ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYmxvY2sgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJsb2NrCmluZGV4IGQyZjkwMzMuLjQ4NzNjNzUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYmxvY2sKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1ibG9jawpAQCAtMTI4LDMgKzEyOCwxNyBAQAogCQlwcmVmZXJyZWQgcmVxdWVzdCBzaXplIGZvciB3b3JrbG9hZHMgd2hlcmUgc3VzdGFpbmVkCiAJCXRocm91Z2hwdXQgaXMgZGVzaXJlZC4gIElmIG5vIG9wdGltYWwgSS9PIHNpemUgaXMKIAkJcmVwb3J0ZWQgdGhpcyBmaWxlIGNvbnRhaW5zIDAuCisKK1doYXQ6CQkvc3lzL2Jsb2NrLzxkaXNrPi9xdWV1ZS9ub21lcmdlcworRGF0ZToJCUphbnVhcnkgMjAxMAorQ29udGFjdDoKK0Rlc2NyaXB0aW9uOgorCQlTdGFuZGFyZCBJL08gZWxldmF0b3Igb3BlcmF0aW9ucyBpbmNsdWRlIGF0dGVtcHRzIHRvCisJCW1lcmdlIGNvbnRpZ3VvdXMgSS9Pcy4gRm9yIGtub3duIHJhbmRvbSBJL08gbG9hZHMgdGhlc2UKKwkJYXR0ZW1wdHMgd2lsbCBhbHdheXMgZmFpbCBhbmQgcmVzdWx0IGluIGV4dHJhIGN5Y2xlcworCQliZWluZyBzcGVudCBpbiB0aGUga2VybmVsLiBUaGlzIGFsbG93cyBvbmUgdG8gdHVybiBvZmYKKwkJdGhpcyBiZWhhdmlvciBvbiBvbmUgb2YgdHdvIHdheXM6IFdoZW4gc2V0IHRvIDEsIGNvbXBsZXgKKwkJbWVyZ2UgY2hlY2tzIGFyZSBkaXNhYmxlZCwgYnV0IHRoZSBzaW1wbGUgb25lLXNob3QgbWVyZ2VzCisJCXdpdGggdGhlIHByZXZpb3VzIEkvTyByZXF1ZXN0IGFyZSBlbmFibGVkLiBXaGVuIHNldCB0byAyLAorCQlhbGwgbWVyZ2UgdHJpZXMgYXJlIGRpc2FibGVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwIC0KKwkJd2hpY2ggZW5hYmxlcyBhbGwgdHlwZXMgb2YgbWVyZ2UgdHJpZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtcG93ZXIgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtcG93ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEyM2M1MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1wb3dlcgpAQCAtMCwwICsxLDc5IEBACitXaGF0OgkJL3N5cy9kZXZpY2VzLy4uLi9wb3dlci8KK0RhdGU6CQlKYW51YXJ5IDIwMDkKK0NvbnRhY3Q6CVJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4KK0Rlc2NyaXB0aW9uOgorCQlUaGUgL3N5cy9kZXZpY2VzLy4uLi9wb3dlciBkaXJlY3RvcnkgY29udGFpbnMgYXR0cmlidXRlcworCQlhbGxvd2luZyB0aGUgdXNlciBzcGFjZSB0byBjaGVjayBhbmQgbW9kaWZ5IHNvbWUgcG93ZXIKKwkJbWFuYWdlbWVudCByZWxhdGVkIHByb3BlcnRpZXMgb2YgZ2l2ZW4gZGV2aWNlLgorCitXaGF0OgkJL3N5cy9kZXZpY2VzLy4uLi9wb3dlci93YWtldXAKK0RhdGU6CQlKYW51YXJ5IDIwMDkKK0NvbnRhY3Q6CVJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4KK0Rlc2NyaXB0aW9uOgorCQlUaGUgL3N5cy9kZXZpY2VzLy4uLi9wb3dlci93YWtldXAgYXR0cmlidXRlIGFsbG93cyB0aGUgdXNlcgorCQlzcGFjZSB0byBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIGVuYWJsZWQgdG8gd2FrZSB1cCB0aGUgc3lzdGVtCisJCWZyb20gc2xlZXAgc3RhdGVzLCBzdWNoIGFzIHRoZSBtZW1vcnkgc2xlZXAgc3RhdGUgKHN1c3BlbmQgdG8KKwkJUkFNKSBhbmQgaGliZXJuYXRpb24gKHN1c3BlbmQgdG8gZGlzayksIGFuZCB0byBlbmFibGUgb3IgZGlzYWJsZQorCQlpdCB0byBkbyB0aGF0IGFzIGRlc2lyZWQuCisKKwkJU29tZSBkZXZpY2VzIHN1cHBvcnQgIndha2V1cCIgZXZlbnRzLCB3aGljaCBhcmUgaGFyZHdhcmUgc2lnbmFscworCQl1c2VkIHRvIGFjdGl2YXRlIHRoZSBzeXN0ZW0gZnJvbSBhIHNsZWVwIHN0YXRlLiAgU3VjaCBkZXZpY2VzCisJCWhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdHdvIHZhbHVlcyBmb3IgdGhlIHN5c2ZzIHBvd2VyL3dha2V1cAorCQlmaWxlOgorCisJCSsgImVuYWJsZWRcbiIgdG8gaXNzdWUgdGhlIGV2ZW50czsKKwkJKyAiZGlzYWJsZWRcbiIgbm90IHRvIGRvIHNvOworCisJCUluIHRoYXQgY2FzZXMgdGhlIHVzZXIgc3BhY2UgY2FuIGNoYW5nZSB0aGUgc2V0dGluZyByZXByZXNlbnRlZAorCQlieSB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGJ5IHdyaXRpbmcgZWl0aGVyICJlbmFibGVkIiwgb3IKKwkJImRpc2FibGVkIiB0byBpdC4KKworCQlGb3IgdGhlIGRldmljZXMgdGhhdCBhcmUgbm90IGNhcGFibGUgb2YgZ2VuZXJhdGluZyBzeXN0ZW0gd2FrZXVwCisJCWV2ZW50cyB0aGlzIGZpbGUgY29udGFpbnMgIlxuIi4gIEluIHRoYXQgY2FzZXMgdGhlIHVzZXIgc3BhY2UKKwkJY2Fubm90IG1vZGlmeSB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFuZCB0aGUgZGV2aWNlIGNhbm5vdCBiZQorCQllbmFibGVkIHRvIHdha2UgdXAgdGhlIHN5c3RlbS4KKworV2hhdDoJCS9zeXMvZGV2aWNlcy8uLi4vcG93ZXIvY29udHJvbAorRGF0ZToJCUphbnVhcnkgMjAwOQorQ29udGFjdDoJUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgorRGVzY3JpcHRpb246CisJCVRoZSAvc3lzL2RldmljZXMvLi4uL3Bvd2VyL2NvbnRyb2wgYXR0cmlidXRlIGFsbG93cyB0aGUgdXNlcgorCQlzcGFjZSB0byBjb250cm9sIHRoZSBydW4tdGltZSBwb3dlciBtYW5hZ2VtZW50IG9mIHRoZSBkZXZpY2UuCisKKwkJQWxsIGRldmljZXMgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0d28gdmFsdWVzIGZvciB0aGUKKwkJcG93ZXIvY29udHJvbCBmaWxlOgorCisJCSsgImF1dG9cbiIgdG8gYWxsb3cgdGhlIGRldmljZSB0byBiZSBwb3dlciBtYW5hZ2VkIGF0IHJ1biB0aW1lOworCQkrICJvblxuIiB0byBwcmV2ZW50IHRoZSBkZXZpY2UgZnJvbSBiZWluZyBwb3dlciBtYW5hZ2VkOworCisJCVRoZSBkZWZhdWx0IGZvciBhbGwgZGV2aWNlcyBpcyAiYXV0byIsIHdoaWNoIG1lYW5zIHRoYXQgdGhleSBtYXkKKwkJYmUgc3ViamVjdCB0byBhdXRvbWF0aWMgcG93ZXIgbWFuYWdlbWVudCwgZGVwZW5kaW5nIG9uIHRoZWlyCisJCWRyaXZlcnMuICBDaGFuZ2luZyB0aGlzIGF0dHJpYnV0ZSB0byAib24iIHByZXZlbnRzIHRoZSBkcml2ZXIKKwkJZnJvbSBwb3dlciBtYW5hZ2luZyB0aGUgZGV2aWNlIGF0IHJ1biB0aW1lLiAgRG9pbmcgdGhhdCB3aGlsZQorCQl0aGUgZGV2aWNlIGlzIHN1c3BlbmRlZCBjYXVzZXMgaXQgdG8gYmUgd29rZW4gdXAuCisKK1doYXQ6CQkvc3lzL2RldmljZXMvLi4uL3Bvd2VyL2FzeW5jCitEYXRlOgkJSmFudWFyeSAyMDA5CitDb250YWN0OglSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+CitEZXNjcmlwdGlvbjoKKwkJVGhlIC9zeXMvZGV2aWNlcy8uLi4vYXN5bmMgYXR0cmlidXRlIGFsbG93cyB0aGUgdXNlciBzcGFjZSB0bworCQllbmFibGUgb3IgZGlhc2JsZSB0aGUgZGV2aWNlJ3Mgc3VzcGVuZCBhbmQgcmVzdW1lIGNhbGxiYWNrcyB0bworCQliZSBleGVjdXRlZCBhc3luY2hyb25vdXNseSAoaWUuIGluIHNlcGFyYXRlIHRocmVhZHMsIGluIHBhcmFsbGVsCisJCXdpdGggdGhlIG1haW4gc3VzcGVuZC9yZXN1bWUgdGhyZWFkKSBkdXJpbmcgc3lzdGVtLXdpZGUgcG93ZXIKKwkJdHJhbnNpdGlvbnMgKGVnLiBzdXNwZW5kIHRvIFJBTSwgaGliZXJuYXRpb24pLgorCisJCUFsbCBkZXZpY2VzIGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdHdvIHZhbHVlcyBmb3IgdGhlCisJCXBvd2VyL2FzeW5jIGZpbGU6CisKKwkJKyAiZW5hYmxlZFxuIiB0byBwZXJtaXQgdGhlIGFzeW5jaHJvbm91cyBzdXNwZW5kL3Jlc3VtZTsKKwkJKyAiZGlzYWJsZWRcbiIgdG8gZm9yYmlkIGl0OworCisJCVRoZSB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSBtYXkgYmUgY2hhbmdlZCBieSB3cml0aW5nIGVpdGhlcgorCQkiZW5hYmxlZCIsIG9yICJkaXNhYmxlZCIgdG8gaXQuCisKKwkJSXQgZ2VuZXJhbGx5IGlzIHVuc2FmZSB0byBwZXJtaXQgdGhlIGFzeW5jaHJvbm91cyBzdXNwZW5kL3Jlc3VtZQorCQlvZiBhIGRldmljZSB1bmxlc3MgaXQgaXMgY2VydGFpbiB0aGF0IGFsbCBvZiB0aGUgUE0gZGVwZW5kZW5jaWVzCisJCW9mIHRoZSBkZXZpY2UgYXJlIGtub3duIHRvIHRoZSBQTSBjb3JlLiAgSG93ZXZlciwgZm9yIHNvbWUKKwkJZGV2aWNlcyB0aGlzIGF0dHJpYnV0ZSBpcyBzZXQgdG8gImVuYWJsZWQiIGJ5IGJ1cyB0eXBlIGNvZGUgb3IKKwkJZGV2aWNlIGRyaXZlcnMgYW5kIGluIHRoYXQgY2FzZXMgaXQgc2hvdWxkIGJlIHNhZmUgdG8gbGVhdmUgdGhlCisJCWRlZmF1bHQgdmFsdWUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBvd2VyIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wb3dlcgppbmRleCBkY2ZmNGQwLi5kNmE4MDFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBvd2VyCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcG93ZXIKQEAgLTEwMSwzICsxMDEsMTYgQEAKIAogCQlDQVVUSU9OOiBVc2luZyBpdCB3aWxsIGNhdXNlIHlvdXIgbWFjaGluZSdzIHJlYWwtdGltZSAoQ01PUykKIAkJY2xvY2sgdG8gYmUgc2V0IHRvIGEgcmFuZG9tIGludmFsaWQgdGltZSBhZnRlciBhIHJlc3VtZS4KKworV2hhdDoJCS9zeXMvcG93ZXIvcG1fYXN5bmMKK0RhdGU6CQlKYW51YXJ5IDIwMDkKK0NvbnRhY3Q6CVJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4KK0Rlc2NyaXB0aW9uOgorCQlUaGUgL3N5cy9wb3dlci9wbV9hc3luYyBmaWxlIGNvbnRyb2xzIHRoZSBzd2l0Y2ggYWxsb3dpbmcgdGhlCisJCXVzZXIgc3BhY2UgdG8gZW5hYmxlIG9yIGRpc2FibGUgYXN5bmNocm9ub3VzIHN1c3BlbmQgYW5kIHJlc3VtZQorCQlvZiBkZXZpY2VzLiAgSWYgZW5hYmxlZCwgdGhpcyBmZWF0dXJlIHdpbGwgY2F1c2Ugc29tZSBkZXZpY2UKKwkJZHJpdmVycycgc3VzcGVuZCBhbmQgcmVzdW1lIGNhbGxiYWNrcyB0byBiZSBleGVjdXRlZCBpbiBwYXJhbGxlbAorCQl3aXRoIGVhY2ggb3RoZXIgYW5kIHdpdGggdGhlIG1haW4gc3VzcGVuZCB0aHJlYWQuICBJdCBpcyBlbmFibGVkCisJCWlmIHRoaXMgZmlsZSBjb250YWlucyAiMSIsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LiAgSXQgbWF5IGJlCisJCWRpc2FibGVkIGJ5IHdyaXRpbmcgIjAiIHRvIHRoaXMgZmlsZSwgaW4gd2hpY2ggY2FzZSBhbGwgZGV2aWNlcworCQl3aWxsIGJlIHN1c3BlbmRlZCBhbmQgcmVzdW1lZCBzeW5jaHJvbm91c2x5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9pby54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2lvLnhtbAppbmRleCBmOTJmMjQzLi5lODcwMzMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2lvLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2lvLnhtbApAQCAtNTg5LDcgKzU4OSw4IEBACiAJICAgIDxlbnRyeT48L2VudHJ5PgogCSAgICA8ZW50cnk+QSBwbGFjZSBob2xkZXIgZm9yIGZ1dHVyZSBleHRlbnNpb25zIGFuZCBjdXN0b20KIChkcml2ZXIgZGVmaW5lZCkgYnVmZmVyIHR5cGVzCi08Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9QUklWQVRFPC9jb25zdGFudD4gYW5kIGhpZ2hlci48L2VudHJ5PgorPGNvbnN0YW50PlY0TDJfQlVGX1RZUEVfUFJJVkFURTwvY29uc3RhbnQ+IGFuZCBoaWdoZXIuIEFwcGxpY2F0aW9ucworc2hvdWxkIHNldCB0aGlzIHRvIDAuPC9lbnRyeT4KIAkgIDwvcm93PgogCTwvdGJvZHk+CiAgICAgICA8L3Rncm91cD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXFidWYueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcWJ1Zi54bWwKaW5kZXggMTg3MDgxNy4uYjg0M2JkNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcWJ1Zi54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcWJ1Zi54bWwKQEAgLTU0LDEyICs1NCwxMCBAQAogZHJpdmVyJ3MgaW5jb21pbmcgcXVldWUuIFRoZSBzZW1hbnRpY3MgZGVwZW5kIG9uIHRoZSBzZWxlY3RlZCBJL08KIG1ldGhvZC48L3BhcmE+CiAKLSAgICA8cGFyYT5UbyBlbnF1ZXVlIGEgPGxpbmsgbGlua2VuZD0ibW1hcCI+bWVtb3J5IG1hcHBlZDwvbGluaz4KLWJ1ZmZlciBhcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mIGEKLSZ2NGwyLWJ1ZmZlcjsgdG8gdGhlIHNhbWUgYnVmZmVyIHR5cGUgYXMgcHJldmlvdXNseSAmdjRsMi1mb3JtYXQ7Ci08c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGFuZCAmdjRsMi1yZXF1ZXN0YnVmZmVyczsKLTxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4sIHRoZSA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KLWZpZWxkIHRvIDxjb25zdGFudD5WNEwyX01FTU9SWV9NTUFQPC9jb25zdGFudD4gYW5kIHRoZQorICAgIDxwYXJhPlRvIGVucXVldWUgYSBidWZmZXIgYXBwbGljYXRpb25zIHNldCB0aGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPgorZmllbGQgb2YgYSAmdjRsMi1idWZmZXI7IHRvIHRoZSBzYW1lIGJ1ZmZlciB0eXBlIGFzIHdhcyBwcmV2aW91c2x5IHVzZWQKK3dpdGggJnY0bDItZm9ybWF0OyA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGFuZCAmdjRsMi1yZXF1ZXN0YnVmZmVyczsKKzxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4uIEFwcGxpY2F0aW9ucyBtdXN0IGFsc28gc2V0IHRoZQogPHN0cnVjdGZpZWxkPmluZGV4PC9zdHJ1Y3RmaWVsZD4gZmllbGQuIFZhbGlkIGluZGV4IG51bWJlcnMgcmFuZ2UgZnJvbQogemVybyB0byB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgYWxsb2NhdGVkIHdpdGggJlZJRElPQy1SRVFCVUZTOwogKCZ2NGwyLXJlcXVlc3RidWZmZXJzOyA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPikgbWludXMgb25lLiBUaGUKQEAgLTcwLDggKzY4LDE5IEBACiA8Y29uc3RhbnQ+VjRMMl9CVUZfVFlQRV9WQklfT1VUUFVUPC9jb25zdGFudD4pIGFwcGxpY2F0aW9ucyBtdXN0IGFsc28KIGluaXRpYWxpemUgdGhlIDxzdHJ1Y3RmaWVsZD5ieXRlc3VzZWQ8L3N0cnVjdGZpZWxkPiwKIDxzdHJ1Y3RmaWVsZD5maWVsZDwvc3RydWN0ZmllbGQ+IGFuZAotPHN0cnVjdGZpZWxkPnRpbWVzdGFtcDwvc3RydWN0ZmllbGQ+IGZpZWxkcy4gU2VlIDx4cmVmCi0JbGlua2VuZD0iYnVmZmVyIiAvPiBmb3IgZGV0YWlscy4gV2hlbgorPHN0cnVjdGZpZWxkPnRpbWVzdGFtcDwvc3RydWN0ZmllbGQ+IGZpZWxkcywgc2VlIDx4cmVmCitsaW5rZW5kPSJidWZmZXIiIC8+IGZvciBkZXRhaWxzLgorQXBwbGljYXRpb25zIG11c3QgYWxzbyBzZXQgPHN0cnVjdGZpZWxkPmZsYWdzPC9zdHJ1Y3RmaWVsZD4gdG8gMC4gSWYgYSBkcml2ZXIKK3N1cHBvcnRzIGNhcHR1cmluZyBmcm9tIHNwZWNpZmljIHZpZGVvIGlucHV0cyBhbmQgeW91IHdhbnQgdG8gc3BlY2lmeSBhIHZpZGVvCitpbnB1dCwgdGhlbiA8c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPiBzaG91bGQgYmUgc2V0IHRvCis8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19JTlBVVDwvY29uc3RhbnQ+IGFuZCB0aGUgZmllbGQKKzxzdHJ1Y3RmaWVsZD5pbnB1dDwvc3RydWN0ZmllbGQ+IG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gdGhlIGRlc2lyZWQgaW5wdXQuCitUaGUgPHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD4gZmllbGQgbXVzdCBiZSBzZXQgdG8gMC4KKzwvcGFyYT4KKworICAgIDxwYXJhPlRvIGVucXVldWUgYSA8bGluayBsaW5rZW5kPSJtbWFwIj5tZW1vcnkgbWFwcGVkPC9saW5rPgorYnVmZmVyIGFwcGxpY2F0aW9ucyBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPgorZmllbGQgdG8gPGNvbnN0YW50PlY0TDJfTUVNT1JZX01NQVA8L2NvbnN0YW50Pi4gV2hlbgogPGNvbnN0YW50PlZJRElPQ19RQlVGPC9jb25zdGFudD4gaXMgY2FsbGVkIHdpdGggYSBwb2ludGVyIHRvIHRoaXMKIHN0cnVjdHVyZSB0aGUgZHJpdmVyIHNldHMgdGhlCiA8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19NQVBQRUQ8L2NvbnN0YW50PiBhbmQKQEAgLTgxLDE0ICs5MCwxMCBAQAogJkVJTlZBTDsuPC9wYXJhPgogCiAgICAgPHBhcmE+VG8gZW5xdWV1ZSBhIDxsaW5rIGxpbmtlbmQ9InVzZXJwIj51c2VyIHBvaW50ZXI8L2xpbms+Ci1idWZmZXIgYXBwbGljYXRpb25zIHNldCB0aGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZiBhCi0mdjRsMi1idWZmZXI7IHRvIHRoZSBzYW1lIGJ1ZmZlciB0eXBlIGFzIHByZXZpb3VzbHkgJnY0bDItZm9ybWF0OwotPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBhbmQgJnY0bDItcmVxdWVzdGJ1ZmZlcnM7Ci08c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+LCB0aGUgPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+Ci1maWVsZCB0byA8Y29uc3RhbnQ+VjRMMl9NRU1PUllfVVNFUlBUUjwvY29uc3RhbnQ+IGFuZCB0aGUKK2J1ZmZlciBhcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KK2ZpZWxkIHRvIDxjb25zdGFudD5WNEwyX01FTU9SWV9VU0VSUFRSPC9jb25zdGFudD4sIHRoZQogPHN0cnVjdGZpZWxkPm0udXNlcnB0cjwvc3RydWN0ZmllbGQ+IGZpZWxkIHRvIHRoZSBhZGRyZXNzIG9mIHRoZQotYnVmZmVyIGFuZCA8c3RydWN0ZmllbGQ+bGVuZ3RoPC9zdHJ1Y3RmaWVsZD4gdG8gaXRzIHNpemUuIFdoZW4gdGhlCi1idWZmZXIgaXMgaW50ZW5kZWQgZm9yIG91dHB1dCBhZGRpdGlvbmFsIGZpZWxkcyBtdXN0IGJlIHNldCBhcyBhYm92ZS4KK2J1ZmZlciBhbmQgPHN0cnVjdGZpZWxkPmxlbmd0aDwvc3RydWN0ZmllbGQ+IHRvIGl0cyBzaXplLgogV2hlbiA8Y29uc3RhbnQ+VklESU9DX1FCVUY8L2NvbnN0YW50PiBpcyBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcwogc3RydWN0dXJlIHRoZSBkcml2ZXIgc2V0cyB0aGUgPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfUVVFVUVEPC9jb25zdGFudD4KIGZsYWcgYW5kIGNsZWFycyB0aGUgPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfTUFQUEVEPC9jb25zdGFudD4gYW5kCkBAIC05NiwxMyArMTAxLDE0IEBACiA8c3RydWN0ZmllbGQ+ZmxhZ3M8L3N0cnVjdGZpZWxkPiBmaWVsZCwgb3IgaXQgcmV0dXJucyBhbiBlcnJvciBjb2RlLgogVGhpcyBpb2N0bCBsb2NrcyB0aGUgbWVtb3J5IHBhZ2VzIG9mIHRoZSBidWZmZXIgaW4gcGh5c2ljYWwgbWVtb3J5LAogdGhleSBjYW5ub3QgYmUgc3dhcHBlZCBvdXQgdG8gZGlzay4gQnVmZmVycyByZW1haW4gbG9ja2VkIHVudGlsCi1kZXF1ZXVlZCwgdW50aWwgdGhlICZWSURJT0MtU1RSRUFNT0ZGOyBvciAmVklESU9DLVJFUUJVRlM7IGlvY3RsIGFyZQorZGVxdWV1ZWQsIHVudGlsIHRoZSAmVklESU9DLVNUUkVBTU9GRjsgb3IgJlZJRElPQy1SRVFCVUZTOyBpb2N0bCBpcwogY2FsbGVkLCBvciB1bnRpbCB0aGUgZGV2aWNlIGlzIGNsb3NlZC48L3BhcmE+CiAKICAgICA8cGFyYT5BcHBsaWNhdGlvbnMgY2FsbCB0aGUgPGNvbnN0YW50PlZJRElPQ19EUUJVRjwvY29uc3RhbnQ+CiBpb2N0bCB0byBkZXF1ZXVlIGEgZmlsbGVkIChjYXB0dXJpbmcpIG9yIGRpc3BsYXllZCAob3V0cHV0KSBidWZmZXIKIGZyb20gdGhlIGRyaXZlcidzIG91dGdvaW5nIHF1ZXVlLiBUaGV5IGp1c3Qgc2V0IHRoZQotPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBhbmQgPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+Cis8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+LCA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KK2FuZCA8c3RydWN0ZmllbGQ+cmVzZXJ2ZWQ8L3N0cnVjdGZpZWxkPgogZmllbGRzIG9mIGEgJnY0bDItYnVmZmVyOyBhcyBhYm92ZSwgd2hlbiA8Y29uc3RhbnQ+VklESU9DX0RRQlVGPC9jb25zdGFudD4KIGlzIGNhbGxlZCB3aXRoIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZSB0aGUgZHJpdmVyIGZpbGxzIHRoZQogcmVtYWluaW5nIGZpZWxkcyBvciByZXR1cm5zIGFuIGVycm9yIGNvZGUuPC9wYXJhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnlidWYueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcXVlcnlidWYueG1sCmluZGV4IGQ4MzQ5OTMuLmU2NDk4MDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXF1ZXJ5YnVmLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1xdWVyeWJ1Zi54bWwKQEAgLTU0LDEyICs1NCwxMyBAQAogJlZJRElPQy1SRVFCVUZTOyBpb2N0bC48L3BhcmE+CiAKICAgICA8cGFyYT5BcHBsaWNhdGlvbnMgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkCi0gICAgb2YgYSAmdjRsMi1idWZmZXI7IHRvIHRoZSBzYW1lIGJ1ZmZlciB0eXBlIGFzIHByZXZpb3VzbHkKKyAgICBvZiBhICZ2NGwyLWJ1ZmZlcjsgdG8gdGhlIHNhbWUgYnVmZmVyIHR5cGUgYXMgd2FzIHByZXZpb3VzbHkgdXNlZCB3aXRoCiAmdjRsMi1mb3JtYXQ7IDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gYW5kICZ2NGwyLXJlcXVlc3RidWZmZXJzOwogPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiwgYW5kIHRoZSA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPgogICAgIGZpZWxkLiBWYWxpZCBpbmRleCBudW1iZXJzIHJhbmdlIGZyb20gemVybwogdG8gdGhlIG51bWJlciBvZiBidWZmZXJzIGFsbG9jYXRlZCB3aXRoICZWSURJT0MtUkVRQlVGUzsKICAgICAoJnY0bDItcmVxdWVzdGJ1ZmZlcnM7IDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+KSBtaW51cyBvbmUuCitUaGUgPHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD4gZmllbGQgc2hvdWxkIHRvIHNldCB0byAwLgogQWZ0ZXIgY2FsbGluZyA8Y29uc3RhbnQ+VklESU9DX1FVRVJZQlVGPC9jb25zdGFudD4gd2l0aCBhIHBvaW50ZXIgdG8KICAgICB0aGlzIHN0cnVjdHVyZSBkcml2ZXJzIHJldHVybiBhbiBlcnJvciBjb2RlIG9yIGZpbGwgdGhlIHJlc3Qgb2YKIHRoZSBzdHJ1Y3R1cmUuPC9wYXJhPgpAQCAtNjgsOCArNjksOCBAQAogPGNvbnN0YW50PlY0TDJfQlVGX0ZMQUdfTUFQUEVEPC9jb25zdGFudD4sCiA8Y29uc3RhbnQ+VjRMMl9CVUZfRkxBR19RVUVVRUQ8L2NvbnN0YW50PiBhbmQKIDxjb25zdGFudD5WNEwyX0JVRl9GTEFHX0RPTkU8L2NvbnN0YW50PiBmbGFncyB3aWxsIGJlIHZhbGlkLiBUaGUKLTxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPiBmaWVsZCB3aWxsIGJlIHNldCB0bwotPGNvbnN0YW50PlY0TDJfTUVNT1JZX01NQVA8L2NvbnN0YW50PiwgdGhlIDxzdHJ1Y3RmaWVsZD5tLm9mZnNldDwvc3RydWN0ZmllbGQ+Cis8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2lsbCBiZSBzZXQgdG8gdGhlIGN1cnJlbnQKK0kvTyBtZXRob2QsIHRoZSA8c3RydWN0ZmllbGQ+bS5vZmZzZXQ8L3N0cnVjdGZpZWxkPgogY29udGFpbnMgdGhlIG9mZnNldCBvZiB0aGUgYnVmZmVyIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBkZXZpY2UgbWVtb3J5LAogdGhlIDxzdHJ1Y3RmaWVsZD5sZW5ndGg8L3N0cnVjdGZpZWxkPiBmaWVsZCBpdHMgc2l6ZS4gVGhlIGRyaXZlciBtYXkKIG9yIG1heSBub3Qgc2V0IHRoZSByZW1haW5pbmcgZmllbGRzIGFuZCBmbGFncywgdGhleSBhcmUgbWVhbmluZ2xlc3MgaW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLXJlcWJ1ZnMueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcmVxYnVmcy54bWwKaW5kZXggYmFiMzgwOC4uMWMwODE2MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcmVxYnVmcy54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtcmVxYnVmcy54bWwKQEAgLTU0LDIzICs1NCwyMyBAQAogYWxsb2NhdGVkIHdpdGggdGhpcyBpb2N0bCBiZWZvcmUgdGhleSBjYW4gYmUgbWFwcGVkIGludG8gdGhlCiBhcHBsaWNhdGlvbidzIGFkZHJlc3Mgc3BhY2UuIFVzZXIgYnVmZmVycyBhcmUgYWxsb2NhdGVkIGJ5CiBhcHBsaWNhdGlvbnMgdGhlbXNlbHZlcywgYW5kIHRoaXMgaW9jdGwgaXMgbWVyZWx5IHVzZWQgdG8gc3dpdGNoIHRoZQotZHJpdmVyIGludG8gdXNlciBwb2ludGVyIEkvTyBtb2RlLjwvcGFyYT4KK2RyaXZlciBpbnRvIHVzZXIgcG9pbnRlciBJL08gbW9kZSBhbmQgdG8gc2V0dXAgc29tZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzLjwvcGFyYT4KIAotICAgIDxwYXJhPlRvIGFsbG9jYXRlIGRldmljZSBidWZmZXJzIGFwcGxpY2F0aW9ucyBpbml0aWFsaXplIHRocmVlCi1maWVsZHMgb2YgYSA8c3RydWN0bmFtZT52NGwyX3JlcXVlc3RidWZmZXJzPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUuCisgICAgPHBhcmE+VG8gYWxsb2NhdGUgZGV2aWNlIGJ1ZmZlcnMgYXBwbGljYXRpb25zIGluaXRpYWxpemUgYWxsCitmaWVsZHMgb2YgdGhlIDxzdHJ1Y3RuYW1lPnY0bDJfcmVxdWVzdGJ1ZmZlcnM8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZS4KIFRoZXkgc2V0IHRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIHRvIHRoZSByZXNwZWN0aXZlCiBzdHJlYW0gb3IgYnVmZmVyIHR5cGUsIHRoZSA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiBmaWVsZCB0bwotdGhlIGRlc2lyZWQgbnVtYmVyIG9mIGJ1ZmZlcnMsIGFuZCA8c3RydWN0ZmllbGQ+bWVtb3J5PC9zdHJ1Y3RmaWVsZD4KLW11c3QgYmUgc2V0IHRvIDxjb25zdGFudD5WNEwyX01FTU9SWV9NTUFQPC9jb25zdGFudD4uIFdoZW4gdGhlIGlvY3RsCi1pcyBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUgdGhlIGRyaXZlciBhdHRlbXB0cyB0bwotYWxsb2NhdGUgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgYnVmZmVycyBhbmQgc3RvcmVzIHRoZSBhY3R1YWwgbnVtYmVyCit0aGUgZGVzaXJlZCBudW1iZXIgb2YgYnVmZmVycywgPHN0cnVjdGZpZWxkPm1lbW9yeTwvc3RydWN0ZmllbGQ+CittdXN0IGJlIHNldCB0byB0aGUgcmVxdWVzdGVkIEkvTyBtZXRob2QgYW5kIHRoZSByZXNlcnZlZCBhcnJheQorbXVzdCBiZSB6ZXJvZWQuIFdoZW4gdGhlIGlvY3RsCitpcyBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUgdGhlIGRyaXZlciB3aWxsIGF0dGVtcHQgdG8gYWxsb2NhdGUKK3RoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ1ZmZlcnMgYW5kIGl0IHN0b3JlcyB0aGUgYWN0dWFsIG51bWJlcgogYWxsb2NhdGVkIGluIHRoZSA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiBmaWVsZC4gSXQgY2FuIGJlCiBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQsIGV2ZW4gemVybywgd2hlbiB0aGUgZHJpdmVyIHJ1bnMgb3V0Ci1vZiBmcmVlIG1lbW9yeS4gQSBsYXJnZXIgbnVtYmVyIGlzIHBvc3NpYmxlIHdoZW4gdGhlIGRyaXZlciByZXF1aXJlcwotbW9yZSBidWZmZXJzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS48Zm9vdG5vdGU+Ci0JPHBhcmE+Rm9yIGV4YW1wbGUgdmlkZW8gb3V0cHV0IHJlcXVpcmVzIGF0IGxlYXN0IHR3byBidWZmZXJzLAorb2YgZnJlZSBtZW1vcnkuIEEgbGFyZ2VyIG51bWJlciBpcyBhbHNvIHBvc3NpYmxlIHdoZW4gdGhlIGRyaXZlciByZXF1aXJlcworbW9yZSBidWZmZXJzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gRm9yIGV4YW1wbGUgdmlkZW8gb3V0cHV0IHJlcXVpcmVzIGF0IGxlYXN0IHR3byBidWZmZXJzLAogb25lIGRpc3BsYXllZCBhbmQgb25lIGZpbGxlZCBieSB0aGUgYXBwbGljYXRpb24uPC9wYXJhPgotCTwvZm9vdG5vdGU+IFdoZW4gbWVtb3J5IG1hcHBpbmcgSS9PIGlzIG5vdCBzdXBwb3J0ZWQgdGhlIGlvY3RsCisgICAgPHBhcmE+V2hlbiB0aGUgSS9PIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIHRoZSBpb2N0bAogcmV0dXJucyBhbiAmRUlOVkFMOy48L3BhcmE+CiAKICAgICA8cGFyYT5BcHBsaWNhdGlvbnMgY2FuIGNhbGwgPGNvbnN0YW50PlZJRElPQ19SRVFCVUZTPC9jb25zdGFudD4KQEAgLTgxLDE0ICs4MSw2IEBACiByZWFzb24gd2h5IG11bm1hcCgpcGluZyBvbmUgb3IgZXZlbiBhbGwgYnVmZmVycyBtdXN0IGltcGx5CiBzdHJlYW1vZmYuLS0+PC9wYXJhPgogCi0gICAgPHBhcmE+VG8gbmVnb3RpYXRlIHVzZXIgcG9pbnRlciBJL08sIGFwcGxpY2F0aW9ucyBpbml0aWFsaXplIG9ubHkKLXRoZSA8c3RydWN0ZmllbGQ+dHlwZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGFuZCBzZXQKLTxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPiB0bwotPGNvbnN0YW50PlY0TDJfTUVNT1JZX1VTRVJQVFI8L2NvbnN0YW50Pi4gV2hlbiB0aGUgaW9jdGwgaXMgY2FsbGVkCi13aXRoIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZSB0aGUgZHJpdmVyIHByZXBhcmVzIGZvciB1c2VyIHBvaW50ZXIKLUkvTywgd2hlbiB0aGlzIEkvTyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCB0aGUgaW9jdGwgcmV0dXJucyBhbgotJkVJTlZBTDsuPC9wYXJhPgotCiAgICAgPHRhYmxlIHBnd2lkZT0iMSIgZnJhbWU9Im5vbmUiIGlkPSJ2NGwyLXJlcXVlc3RidWZmZXJzIj4KICAgICAgIDx0aXRsZT5zdHJ1Y3QgPHN0cnVjdG5hbWU+djRsMl9yZXF1ZXN0YnVmZmVyczwvc3RydWN0bmFtZT48L3RpdGxlPgogICAgICAgPHRncm91cCBjb2xzPSIzIj4KQEAgLTk3LDkgKzg5LDcgQEAKIAkgIDxyb3c+CiAJICAgIDxlbnRyeT5fX3UzMjwvZW50cnk+CiAJICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+Ci0JICAgIDxlbnRyeT5UaGUgbnVtYmVyIG9mIGJ1ZmZlcnMgcmVxdWVzdGVkIG9yIGdyYW50ZWQuIFRoaXMKLWZpZWxkIGlzIG9ubHkgdXNlZCB3aGVuIDxzdHJ1Y3RmaWVsZD5tZW1vcnk8L3N0cnVjdGZpZWxkPiBpcyBzZXQgdG8KLTxjb25zdGFudD5WNEwyX01FTU9SWV9NTUFQPC9jb25zdGFudD4uPC9lbnRyeT4KKwkgICAgPGVudHJ5PlRoZSBudW1iZXIgb2YgYnVmZmVycyByZXF1ZXN0ZWQgb3IgZ3JhbnRlZC48L2VudHJ5PgogCSAgPC9yb3c+CiAJICA8cm93PgogCSAgICA8ZW50cnk+JnY0bDItYnVmLXR5cGU7PC9lbnRyeT4KQEAgLTEyMCw3ICsxMTAsNyBAQAogCSAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlc2VydmVkPC9zdHJ1Y3RmaWVsZD5bMl08L2VudHJ5PgogCSAgICA8ZW50cnk+QSBwbGFjZSBob2xkZXIgZm9yIGZ1dHVyZSBleHRlbnNpb25zIGFuZCBjdXN0b20KIChkcml2ZXIgZGVmaW5lZCkgYnVmZmVyIHR5cGVzIDxjb25zdGFudD5WNEwyX0JVRl9UWVBFX1BSSVZBVEU8L2NvbnN0YW50PiBhbmQKLWhpZ2hlci48L2VudHJ5PgoraGlnaGVyLiBUaGlzIGFycmF5IHNob3VsZCBiZSB6ZXJvZWQgYnkgYXBwbGljYXRpb25zLjwvZW50cnk+CiAJICA8L3Jvdz4KIAk8L3Rib2R5PgogICAgICAgPC90Z3JvdXA+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vUkNVLzAwLUlOREVYCmluZGV4IDliYjYyZjcuLjcxYjZmNTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vUkNVLzAwLUlOREVYCkBAIC02LDE2ICs2LDIyIEBACiAJLSBSZXZpZXcgQ2hlY2tsaXN0IGZvciBSQ1UgUGF0Y2hlcwogbGlzdFJDVS50eHQKIAktIFVzaW5nIFJDVSB0byBQcm90ZWN0IFJlYWQtTW9zdGx5IExpbmtlZCBMaXN0cworbG9ja2RlcC50eHQKKwktIFJDVSBhbmQgbG9ja2RlcCBjaGVja2luZwogTk1JLVJDVS50eHQKIAktIFVzaW5nIFJDVSB0byBQcm90ZWN0IER5bmFtaWMgTk1JIEhhbmRsZXJzCityY3ViYXJyaWVyLnR4dAorCS0gUkNVIGFuZCBVbmxvYWRhYmxlIE1vZHVsZXMKK3JjdWxpc3RfbnVsbHMudHh0CisJLSBSQ1UgbGlzdCBwcmltaXRpdmVzIGZvciB1c2Ugd2l0aCBTTEFCX0RFU1RST1lfQllfUkNVCiByY3VyZWYudHh0CiAJLSBSZWZlcmVuY2UtY291bnQgZGVzaWduIGZvciBlbGVtZW50cyBvZiBsaXN0cy9hcnJheXMgcHJvdGVjdGVkIGJ5IFJDVQogcmN1LnR4dAogCS0gUkNVIENvbmNlcHRzCi1yY3ViYXJyaWVyLnR4dAotCS0gVW5sb2FkaW5nIG1vZHVsZXMgdGhhdCB1c2UgUkNVIGNhbGxiYWNrcwogUlRGUC50eHQKIAktIExpc3Qgb2YgUkNVIHBhcGVycyAoYmlibGlvZ3JhcGh5KSBnb2luZyBiYWNrIHRvIDE5ODAuCitzdGFsbHdhcm4udHh0CisJLSBSQ1UgQ1BVIHN0YWxsIHdhcm5pbmdzIChDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUikKIHRvcnR1cmUudHh0CiAJLSBSQ1UgVG9ydHVyZSBUZXN0IE9wZXJhdGlvbiAoQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QpCiB0cmFjZS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL1JURlAudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQKaW5kZXggZDJiODUyMy4uNWFlYTQ1OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvUlRGUC50eHQKQEAgLTI1LDEwICsyNSwxMCBAQAogb3B0aW1pemVkIGZvciBtb2Rlcm4gY29tcHV0ZXIgc3lzdGVtcywgd2hpY2ggaXMgbm90IHN1cnByaXNpbmcgZ2l2ZW4KIHRoYXQgdGhlc2Ugb3ZlcmhlYWRzIHdlcmUgbm90IHNvIGV4cGVuc2l2ZSBpbiB0aGUgbWlkLTgwcy4gIE5vbmV0aGVsZXNzLAogcGFzc2l2ZSBzZXJpYWxpemF0aW9uIGFwcGVhcnMgdG8gYmUgdGhlIGZpcnN0IGRlZmVycmVkLWRlc3RydWN0aW9uCi1tZWNoYW5pc20gdG8gYmUgdXNlZCBpbiBwcm9kdWN0aW9uLiAgRnVydGhlcm1vcmUsIHRoZSByZWxldmFudCBwYXRlbnQgaGFzCi1sYXBzZWQsIHNvIHRoaXMgYXBwcm9hY2ggbWF5IGJlIHVzZWQgaW4gbm9uLUdQTCBzb2Z0d2FyZSwgaWYgZGVzaXJlZC4KLShJbiBjb250cmFzdCwgdXNlIG9mIFJDVSBpcyBwZXJtaXR0ZWQgb25seSBpbiBzb2Z0d2FyZSBsaWNlbnNlZCB1bmRlcgotR1BMLiAgU29ycnkhISEpCittZWNoYW5pc20gdG8gYmUgdXNlZCBpbiBwcm9kdWN0aW9uLiAgRnVydGhlcm1vcmUsIHRoZSByZWxldmFudCBwYXRlbnQKK2hhcyBsYXBzZWQsIHNvIHRoaXMgYXBwcm9hY2ggbWF5IGJlIHVzZWQgaW4gbm9uLUdQTCBzb2Z0d2FyZSwgaWYgZGVzaXJlZC4KKyhJbiBjb250cmFzdCwgaW1wbGVtZW50YXRpb24gb2YgUkNVIGlzIHBlcm1pdHRlZCBvbmx5IGluIHNvZnR3YXJlIGxpY2Vuc2VkCit1bmRlciBlaXRoZXIgR1BMIG9yIExHUEwuICBTb3JyeSEhISkKIAogSW4gMTk5MCwgUHVnaCBbUHVnaDkwXSBub3RlZCB0aGF0IGV4cGxpY2l0bHkgdHJhY2tpbmcgd2hpY2ggdGhyZWFkcwogd2VyZSByZWFkaW5nIGEgZ2l2ZW4gZGF0YSBzdHJ1Y3R1cmUgcGVybWl0dGVkIGRlZmVycmVkIGZyZWUgdG8gb3BlcmF0ZQpAQCAtMTUwLDYgKzE1MCwxOCBAQAogTFdOICJXaGF0IGlzIFJDVT8iIHNlcmllcyBbUGF1bEVNY0tlbm5leTIwMDdXaGF0SXNSQ1VGdW5kYW1lbnRhbGx5LAogUGF1bEVNY0tlbm5leTIwMDhXaGF0SXNSQ1VVc2FnZSwgYW5kIFBhdWxFTWNLZW5uZXkyMDA4V2hhdElzUkNVQVBJXS4KIAorMjAwOCBzYXcgYSBqb3VybmFsIHBhcGVyIG9uIHJlYWwtdGltZSBSQ1UgW0RpbmFrYXJHdW5pZ3VudGFsYTIwMDhJQk1TeXNKXSwKK2EgaGlzdG9yeSBvZiBob3cgTGludXggY2hhbmdlZCBSQ1UgbW9yZSB0aGFuIFJDVSBjaGFuZ2VkIExpbnV4CitbUGF1bEVNY0tlbm5leTIwMDhSQ1VPU1JdLCBhbmQgYSBkZXNpZ24gb3ZlcnZpZXcgb2YgaGllcmFyY2hpY2FsIFJDVQorW1BhdWxFTWNLZW5uZXkyMDA4SGllcmFyY2hpY2FsUkNVXS4KKworMjAwOSBpbnRyb2R1Y2VkIHVzZXItbGV2ZWwgUkNVIGFsZ29yaXRobXMgW1BhdWxFTWNLZW5uZXkyMDA5TWFsaWNpb3VzVVJDVV0sCit3aGljaCBNYXRoaWV1IERlc25veWVycyBpcyBub3cgbWFpbnRhaW5pbmcgW01hdGhpZXVEZXNub3llcnMyMDA5VVJDVV0KK1tNYXRoaWV1RGVzbm95ZXJzUGhEXS4gIFRJTllfUkNVIFtQYXVsRU1jS2VubmV5MjAwOUJsb2F0V2F0Y2hSQ1VdIG1hZGUKK2l0cyBhcHBlYXJhbmNlLCBhcyBkaWQgZXhwZWRpdGVkIFJDVSBbUGF1bEVNY0tlbm5leTIwMDlleHBlZGl0ZWRSQ1VdLgorVGhlIHByb2JsZW0gb2YgcmVzaXplYWJsZSBSQ1UtcHJvdGVjdGVkIGhhc2ggdGFibGVzIG1heSBub3cgYmUgb24gYSBwYXRoCit0byBhIHNvbHV0aW9uIFtKb3NoVHJpcGxldHQyMDA5UlBIYXNoXS4KKwogQmlidGV4IEVudHJpZXMKIAogQGFydGljbGV7S3VuZzgwCkBAIC03MzAsNiArNzQyLDExIEBACiAiCiB9CiAKKyMKKyMJIldoYXQgaXMgUkNVPyIgTFdOIHNlcmllcy4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCiBAYXJ0aWNsZXtEaW5ha2FyR3VuaWd1bnRhbGEyMDA4SUJNU3lzSgogLGF1dGhvcj0iRC4gR3VuaWd1bnRhbGEgYW5kIFAuIEUuIE1jS2VubmV5IGFuZCBKLiBUcmlwbGV0dCBhbmQgSi4gV2FscG9sZSIKICx0aXRsZT0iVGhlIHJlYWQtY29weS11cGRhdGUgbWVjaGFuaXNtIGZvciBzdXBwb3J0aW5nIHJlYWwtdGltZSBhcHBsaWNhdGlvbnMgb24gc2hhcmVkLW1lbW9yeSBtdWx0aXByb2Nlc3NvciBzeXN0ZW1zIHdpdGgge0xpbnV4fSIKQEAgLTgyMCwzICs4MzcsMzkgQEAKIAlVbmlwcm9jZXNzb3IgYXNzdW1wdGlvbnMgYWxsb3cgc2ltcGxpZmllZCBSQ1UgaW1wbGVtZW50YXRpb24uCiAiCiB9CisKK0B1bnB1Ymxpc2hlZHtQYXVsRU1jS2VubmV5MjAwOWV4cGVkaXRlZFJDVQorLEF1dGhvcj0iUGF1bCBFLiBNY0tlbm5leSIKKyxUaXRsZT0iW3tQQVRDSH0gLXRpcCAwLzNdIGV4cGVkaXRlZCAnYmlnIGhhbW1lcicge1JDVX0gZ3JhY2UgcGVyaW9kcyIKKyxtb250aD0iSnVuZSIKKyxkYXk9IjI1IgorLHllYXI9IjIwMDkiCissbm90ZT0iQXZhaWxhYmxlOgorXHVybHtodHRwOi8vbGttbC5vcmcvbGttbC8yMDA5LzYvMjUvMzA2fQorW1ZpZXdlZCBBdWd1c3QgMTYsIDIwMDldIgorLGFubm90YXRpb249IgorCUZpcnN0IHBvc3Rpbmcgb2YgZXhwZWRpdGVkIFJDVSB0byBiZSBhY2NlcHRlZCBpbnRvIC10aXAuCisiCit9CisKK0B1bnB1Ymxpc2hlZHtKb3NoVHJpcGxldHQyMDA5UlBIYXNoCissQXV0aG9yPSJKb3NoIFRyaXBsZXR0IgorLFRpdGxlPSJTY2FsYWJsZSBjb25jdXJyZW50IGhhc2ggdGFibGVzIHZpYSByZWxhdGl2aXN0aWMgcHJvZ3JhbW1pbmciCissbW9udGg9IlNlcHRlbWJlciIKKyx5ZWFyPSIyMDA5IgorLG5vdGU9IkxpbnV4IFBsdW1iZXJzIENvbmZlcmVuY2UgcHJlc2VudGF0aW9uIgorLGFubm90YXRpb249IgorCVJQIGZ1biB3aXRoIGhhc2ggdGFibGVzLgorIgorfQorCitAcGhkdGhlc2lze01hdGhpZXVEZXNub3llcnNQaEQKKywgdGl0bGUgID0gIkxvdy1JbXBhY3QgT3BlcmF0aW5nIFN5c3RlbSBUcmFjaW5nIgorLCBhdXRob3IgPSAiTWF0aGlldSBEZXNub3llcnMiCissIHNjaG9vbCA9ICJFY29sZSBQb2x5dGVjaG5pcXVlIGRlIE1vbnRyXCd7ZX1hbCIKKywgbW9udGggID0gIkRlY2VtYmVyIgorLCB5ZWFyICAgPSAyMDA5Cissbm90ZT0iQXZhaWxhYmxlOgorXHVybHtodHRwOi8vd3d3Lmx0dG5nLm9yZy9wdWIvdGhlc2lzL2Rlc25veWVycy1kaXNzZXJ0YXRpb24tMjAwOS0xMi5wZGZ9CitbVmlld2VkIERlY2VtYmVyIDksIDIwMDldIgorfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvY2hlY2tsaXN0LnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL2NoZWNrbGlzdC50eHQKaW5kZXggNTE1MjVhMy4uY2JjMTgwZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvY2hlY2tsaXN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9jaGVja2xpc3QudHh0CkBAIC04LDEzICs4LDEyIEBACiBvdmVyIGEgcmF0aGVyIGxvbmcgcGVyaW9kIG9mIHRpbWUsIGJ1dCBpbXByb3ZlbWVudHMgYXJlIGFsd2F5cyB3ZWxjb21lIQogCiAwLglJcyBSQ1UgYmVpbmcgYXBwbGllZCB0byBhIHJlYWQtbW9zdGx5IHNpdHVhdGlvbj8gIElmIHRoZSBkYXRhCi0Jc3RydWN0dXJlIGlzIHVwZGF0ZWQgbW9yZSB0aGFuIGFib3V0IDEwJSBvZiB0aGUgdGltZSwgdGhlbgotCXlvdSBzaG91bGQgc3Ryb25nbHkgY29uc2lkZXIgc29tZSBvdGhlciBhcHByb2FjaCwgdW5sZXNzCi0JZGV0YWlsZWQgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnRzIHNob3cgdGhhdCBSQ1UgaXMgbm9uZXRoZWxlc3MKLQl0aGUgcmlnaHQgdG9vbCBmb3IgdGhlIGpvYi4gIFllcywgeW91IG1pZ2h0IHRoaW5rIG9mIFJDVQotCWFzIHNpbXBseSBjdXR0aW5nIG92ZXJoZWFkIG9mZiBvZiB0aGUgcmVhZGVycyBhbmQgaW1wb3NpbmcgaXQKLQlvbiB0aGUgd3JpdGVycy4gIFRoYXQgaXMgZXhhY3RseSB3aHkgbm9ybWFsIHVzZXMgb2YgUkNVIHdpbGwKLQlkbyBtdWNoIG1vcmUgcmVhZGluZyB0aGFuIHVwZGF0aW5nLgorCXN0cnVjdHVyZSBpcyB1cGRhdGVkIG1vcmUgdGhhbiBhYm91dCAxMCUgb2YgdGhlIHRpbWUsIHRoZW4geW91CisJc2hvdWxkIHN0cm9uZ2x5IGNvbnNpZGVyIHNvbWUgb3RoZXIgYXBwcm9hY2gsIHVubGVzcyBkZXRhaWxlZAorCXBlcmZvcm1hbmNlIG1lYXN1cmVtZW50cyBzaG93IHRoYXQgUkNVIGlzIG5vbmV0aGVsZXNzIHRoZSByaWdodAorCXRvb2wgZm9yIHRoZSBqb2IuICBZZXMsIFJDVSBkb2VzIHJlZHVjZSByZWFkLXNpZGUgb3ZlcmhlYWQgYnkKKwlpbmNyZWFzaW5nIHdyaXRlLXNpZGUgb3ZlcmhlYWQsIHdoaWNoIGlzIGV4YWN0bHkgd2h5IG5vcm1hbCB1c2VzCisJb2YgUkNVIHdpbGwgZG8gbXVjaCBtb3JlIHJlYWRpbmcgdGhhbiB1cGRhdGluZy4KIAogCUFub3RoZXIgZXhjZXB0aW9uIGlzIHdoZXJlIHBlcmZvcm1hbmNlIGlzIG5vdCBhbiBpc3N1ZSwgYW5kIFJDVQogCXByb3ZpZGVzIGEgc2ltcGxlciBpbXBsZW1lbnRhdGlvbi4gIEFuIGV4YW1wbGUgb2YgdGhpcyBzaXR1YXRpb24KQEAgLTM1LDEzICszNCwxMyBAQAogCiAJSWYgeW91IGNob29zZSAjYiwgYmUgcHJlcGFyZWQgdG8gZGVzY3JpYmUgaG93IHlvdSBoYXZlIGhhbmRsZWQKIAltZW1vcnkgYmFycmllcnMgb24gd2Vha2x5IG9yZGVyZWQgbWFjaGluZXMgKHByZXR0eSBtdWNoIGFsbCBvZgotCXRoZW0gLS0gZXZlbiB4ODYgYWxsb3dzIHJlYWRzIHRvIGJlIHJlb3JkZXJlZCksIGFuZCBiZSBwcmVwYXJlZAotCXRvIGV4cGxhaW4gd2h5IHRoaXMgYWRkZWQgY29tcGxleGl0eSBpcyB3b3J0aHdoaWxlLiAgSWYgeW91Ci0JY2hvb3NlICNjLCBiZSBwcmVwYXJlZCB0byBleHBsYWluIGhvdyB0aGlzIHNpbmdsZSB0YXNrIGRvZXMgbm90Ci0JYmVjb21lIGEgbWFqb3IgYm90dGxlbmVjayBvbiBiaWcgbXVsdGlwcm9jZXNzb3IgbWFjaGluZXMgKGZvcgotCWV4YW1wbGUsIGlmIHRoZSB0YXNrIGlzIHVwZGF0aW5nIGluZm9ybWF0aW9uIHJlbGF0aW5nIHRvIGl0c2VsZgotCXRoYXQgb3RoZXIgdGFza3MgY2FuIHJlYWQsIHRoZXJlIGJ5IGRlZmluaXRpb24gY2FuIGJlIG5vCi0JYm90dGxlbmVjaykuCisJdGhlbSAtLSBldmVuIHg4NiBhbGxvd3MgbGF0ZXIgbG9hZHMgdG8gYmUgcmVvcmRlcmVkIHRvIHByZWNlZGUKKwllYXJsaWVyIHN0b3JlcyksIGFuZCBiZSBwcmVwYXJlZCB0byBleHBsYWluIHdoeSB0aGlzIGFkZGVkCisJY29tcGxleGl0eSBpcyB3b3J0aHdoaWxlLiAgSWYgeW91IGNob29zZSAjYywgYmUgcHJlcGFyZWQgdG8KKwlleHBsYWluIGhvdyB0aGlzIHNpbmdsZSB0YXNrIGRvZXMgbm90IGJlY29tZSBhIG1ham9yIGJvdHRsZW5lY2sgb24KKwliaWcgbXVsdGlwcm9jZXNzb3IgbWFjaGluZXMgKGZvciBleGFtcGxlLCBpZiB0aGUgdGFzayBpcyB1cGRhdGluZworCWluZm9ybWF0aW9uIHJlbGF0aW5nIHRvIGl0c2VsZiB0aGF0IG90aGVyIHRhc2tzIGNhbiByZWFkLCB0aGVyZQorCWJ5IGRlZmluaXRpb24gY2FuIGJlIG5vIGJvdHRsZW5lY2spLgogCiAyLglEbyB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBtYWtlIHByb3BlciB1c2Ugb2YKIAlyY3VfcmVhZF9sb2NrKCkgYW5kIGZyaWVuZHM/ICBUaGVzZSBwcmltaXRpdmVzIGFyZSBuZWVkZWQKQEAgLTUxLDggKzUwLDEwIEBACiAJYWN0dWFyaWFsIHJpc2sgb2YgeW91ciBrZXJuZWwuCiAKIAlBcyBhIHJvdWdoIHJ1bGUgb2YgdGh1bWIsIGFueSBkZXJlZmVyZW5jZSBvZiBhbiBSQ1UtcHJvdGVjdGVkCi0JcG9pbnRlciBtdXN0IGJlIGNvdmVyZWQgYnkgcmN1X3JlYWRfbG9jaygpIG9yIHJjdV9yZWFkX2xvY2tfYmgoKQotCW9yIGJ5IHRoZSBhcHByb3ByaWF0ZSB1cGRhdGUtc2lkZSBsb2NrLgorCXBvaW50ZXIgbXVzdCBiZSBjb3ZlcmVkIGJ5IHJjdV9yZWFkX2xvY2soKSwgcmN1X3JlYWRfbG9ja19iaCgpLAorCXJjdV9yZWFkX2xvY2tfc2NoZWQoKSwgb3IgYnkgdGhlIGFwcHJvcHJpYXRlIHVwZGF0ZS1zaWRlIGxvY2suCisJRGlzYWJsaW5nIG9mIHByZWVtcHRpb24gY2FuIHNlcnZlIGFzIHJjdV9yZWFkX2xvY2tfc2NoZWQoKSwgYnV0CisJaXMgbGVzcyByZWFkYWJsZS4KIAogMy4JRG9lcyB0aGUgdXBkYXRlIGNvZGUgdG9sZXJhdGUgY29uY3VycmVudCBhY2Nlc3Nlcz8KIApAQCAtNjIsMjUgKzYzLDI3IEBACiAJb2Ygd2F5cyB0byBoYW5kbGUgdGhpcyBjb25jdXJyZW5jeSwgZGVwZW5kaW5nIG9uIHRoZSBzaXR1YXRpb246CiAKIAlhLglVc2UgdGhlIFJDVSB2YXJpYW50cyBvZiB0aGUgbGlzdCBhbmQgaGxpc3QgdXBkYXRlCi0JCXByaW1pdGl2ZXMgdG8gYWRkLCByZW1vdmUsIGFuZCByZXBsYWNlIGVsZW1lbnRzIG9uIGFuCi0JCVJDVS1wcm90ZWN0ZWQgbGlzdC4gIEFsdGVybmF0aXZlbHksIHVzZSB0aGUgUkNVLXByb3RlY3RlZAotCQl0cmVlcyB0aGF0IGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgTGludXgga2VybmVsLgorCQlwcmltaXRpdmVzIHRvIGFkZCwgcmVtb3ZlLCBhbmQgcmVwbGFjZSBlbGVtZW50cyBvbgorCQlhbiBSQ1UtcHJvdGVjdGVkIGxpc3QuCUFsdGVybmF0aXZlbHksIHVzZSB0aGUgb3RoZXIKKwkJUkNVLXByb3RlY3RlZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgdG8KKwkJdGhlIExpbnV4IGtlcm5lbC4KIAogCQlUaGlzIGlzIGFsbW9zdCBhbHdheXMgdGhlIGJlc3QgYXBwcm9hY2guCiAKIAliLglQcm9jZWVkIGFzIGluIChhKSBhYm92ZSwgYnV0IGFsc28gbWFpbnRhaW4gcGVyLWVsZW1lbnQKIAkJbG9ja3MgKHRoYXQgYXJlIGFjcXVpcmVkIGJ5IGJvdGggcmVhZGVycyBhbmQgd3JpdGVycykKIAkJdGhhdCBndWFyZCBwZXItZWxlbWVudCBzdGF0ZS4gIE9mIGNvdXJzZSwgZmllbGRzIHRoYXQKLQkJdGhlIHJlYWRlcnMgcmVmcmFpbiBmcm9tIGFjY2Vzc2luZyBjYW4gYmUgZ3VhcmRlZCBieSB0aGUKLQkJdXBkYXRlLXNpZGUgbG9jay4KKwkJdGhlIHJlYWRlcnMgcmVmcmFpbiBmcm9tIGFjY2Vzc2luZyBjYW4gYmUgZ3VhcmRlZCBieQorCQlzb21lIG90aGVyIGxvY2sgYWNxdWlyZWQgb25seSBieSB1cGRhdGVycywgaWYgZGVzaXJlZC4KIAogCQlUaGlzIHdvcmtzIHF1aXRlIHdlbGwsIGFsc28uCiAKIAljLglNYWtlIHVwZGF0ZXMgYXBwZWFyIGF0b21pYyB0byByZWFkZXJzLiAgRm9yIGV4YW1wbGUsCi0JCXBvaW50ZXIgdXBkYXRlcyB0byBwcm9wZXJseSBhbGlnbmVkIGZpZWxkcyB3aWxsIGFwcGVhcgotCQlhdG9taWMsIGFzIHdpbGwgaW5kaXZpZHVhbCBhdG9taWMgcHJpbWl0aXZlcy4gIE9wZXJhdGlvbnMKLQkJcGVyZm9ybWVkIHVuZGVyIGEgbG9jayBhbmQgc2VxdWVuY2VzIG9mIG11bHRpcGxlIGF0b21pYwotCQlwcmltaXRpdmVzIHdpbGwgLW5vdC0gYXBwZWFyIHRvIGJlIGF0b21pYy4KKwkJcG9pbnRlciB1cGRhdGVzIHRvIHByb3Blcmx5IGFsaWduZWQgZmllbGRzIHdpbGwKKwkJYXBwZWFyIGF0b21pYywgYXMgd2lsbCBpbmRpdmlkdWFsIGF0b21pYyBwcmltaXRpdmVzLgorCQlTZXF1ZW5jZXMgb2YgcGVyYXRpb25zIHBlcmZvcm1lZCB1bmRlciBhIGxvY2sgd2lsbCAtbm90LQorCQlhcHBlYXIgdG8gYmUgYXRvbWljIHRvIFJDVSByZWFkZXJzLCBub3Igd2lsbCBzZXF1ZW5jZXMKKwkJb2YgbXVsdGlwbGUgYXRvbWljIHByaW1pdGl2ZXMuCiAKIAkJVGhpcyBjYW4gd29yaywgYnV0IGlzIHN0YXJ0aW5nIHRvIGdldCBhIGJpdCB0cmlja3kuCiAKQEAgLTk4LDkgKzEwMSw5IEBACiAJCWEgbmV3IHN0cnVjdHVyZSBjb250YWluaW5nIHVwZGF0ZWQgdmFsdWVzLgogCiA0LglXZWFrbHkgb3JkZXJlZCBDUFVzIHBvc2Ugc3BlY2lhbCBjaGFsbGVuZ2VzLiAgQWxtb3N0IGFsbCBDUFVzCi0JYXJlIHdlYWtseSBvcmRlcmVkIC0tIGV2ZW4gaTM4NiBDUFVzIGFsbG93IHJlYWRzIHRvIGJlIHJlb3JkZXJlZC4KLQlSQ1UgY29kZSBtdXN0IHRha2UgYWxsIG9mIHRoZSBmb2xsb3dpbmcgbWVhc3VyZXMgdG8gcHJldmVudAotCW1lbW9yeS1jb3JydXB0aW9uIHByb2JsZW1zOgorCWFyZSB3ZWFrbHkgb3JkZXJlZCAtLSBldmVuIHg4NiBDUFVzIGFsbG93IGxhdGVyIGxvYWRzIHRvIGJlCisJcmVvcmRlcmVkIHRvIHByZWNlZGUgZWFybGllciBzdG9yZXMuICBSQ1UgY29kZSBtdXN0IHRha2UgYWxsIG9mCisJdGhlIGZvbGxvd2luZyBtZWFzdXJlcyB0byBwcmV2ZW50IG1lbW9yeS1jb3JydXB0aW9uIHByb2JsZW1zOgogCiAJYS4JUmVhZGVycyBtdXN0IG1haW50YWluIHByb3BlciBvcmRlcmluZyBvZiB0aGVpciBtZW1vcnkKIAkJYWNjZXNzZXMuICBUaGUgcmN1X2RlcmVmZXJlbmNlKCkgcHJpbWl0aXZlIGVuc3VyZXMgdGhhdApAQCAtMTEzLDE0ICsxMTYsMjUgQEAKIAkJVGhlIHJjdV9kZXJlZmVyZW5jZSgpIHByaW1pdGl2ZSBpcyBhbHNvIGFuIGV4Y2VsbGVudAogCQlkb2N1bWVudGF0aW9uIGFpZCwgbGV0dGluZyB0aGUgcGVyc29uIHJlYWRpbmcgdGhlIGNvZGUKIAkJa25vdyBleGFjdGx5IHdoaWNoIHBvaW50ZXJzIGFyZSBwcm90ZWN0ZWQgYnkgUkNVLgorCQlQbGVhc2Ugbm90ZSB0aGF0IGNvbXBpbGVycyBjYW4gYWxzbyByZW9yZGVyIGNvZGUsIGFuZAorCQl0aGV5IGFyZSBiZWNvbWluZyBpbmNyZWFzaW5nbHkgYWdncmVzc2l2ZSBhYm91dCBkb2luZworCQlqdXN0IHRoYXQuICBUaGUgcmN1X2RlcmVmZXJlbmNlKCkgcHJpbWl0aXZlIHRoZXJlZm9yZQorCQlhbHNvIHByZXZlbnRzIGRlc3RydWN0aXZlIGNvbXBpbGVyIG9wdGltaXphdGlvbnMuCiAKLQkJVGhlIHJjdV9kZXJlZmVyZW5jZSgpIHByaW1pdGl2ZSBpcyB1c2VkIGJ5IHRoZSB2YXJpb3VzCi0JCSJfcmN1KCkiIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZXMsIHN1Y2ggYXMgdGhlCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KCkuICBOb3RlIHRoYXQgaXQgaXMgcGVyZmVjdGx5Ci0JCWxlZ2FsIChpZiByZWR1bmRhbnQpIGZvciB1cGRhdGUtc2lkZSBjb2RlIHRvIHVzZQotCQlyY3VfZGVyZWZlcmVuY2UoKSBhbmQgdGhlICJfcmN1KCkiIGxpc3QtdHJhdmVyc2FsCi0JCXByaW1pdGl2ZXMuICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgaW4gY29kZQotCQl0aGF0IGlzIGNvbW1vbiB0byByZWFkZXJzIGFuZCB1cGRhdGVycy4KKwkJVGhlIHJjdV9kZXJlZmVyZW5jZSgpIHByaW1pdGl2ZSBpcyB1c2VkIGJ5IHRoZQorCQl2YXJpb3VzICJfcmN1KCkiIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZXMsIHN1Y2gKKwkJYXMgdGhlIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KCkuICBOb3RlIHRoYXQgaXQgaXMKKwkJcGVyZmVjdGx5IGxlZ2FsIChpZiByZWR1bmRhbnQpIGZvciB1cGRhdGUtc2lkZSBjb2RlIHRvCisJCXVzZSByY3VfZGVyZWZlcmVuY2UoKSBhbmQgdGhlICJfcmN1KCkiIGxpc3QtdHJhdmVyc2FsCisJCXByaW1pdGl2ZXMuICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgaW4gY29kZSB0aGF0CisJCWlzIGNvbW1vbiB0byByZWFkZXJzIGFuZCB1cGRhdGVycy4gIEhvd2V2ZXIsIGxvY2tkZXAKKwkJd2lsbCBjb21wbGFpbiBpZiB5b3UgYWNjZXNzIHJjdV9kZXJlZmVyZW5jZSgpIG91dHNpZGUKKwkJb2YgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAgU2VlIGxvY2tkZXAudHh0CisJCXRvIGxlYXJuIHdoYXQgdG8gZG8gYWJvdXQgdGhpcy4KKworCQlPZiBjb3Vyc2UsIG5laXRoZXIgcmN1X2RlcmVmZXJlbmNlKCkgbm9yIHRoZSAiX3JjdSgpIgorCQlsaXN0LXRyYXZlcnNhbCBwcmltaXRpdmVzIGNhbiBzdWJzdGl0dXRlIGZvciBhIGdvb2QKKwkJY29uY3VycmVuY3kgZGVzaWduIGNvb3JkaW5hdGluZyBhbW9uZyBtdWx0aXBsZSB1cGRhdGVycy4KIAogCWIuCUlmIHRoZSBsaXN0IG1hY3JvcyBhcmUgYmVpbmcgdXNlZCwgdGhlIGxpc3RfYWRkX3RhaWxfcmN1KCkKIAkJYW5kIGxpc3RfYWRkX3JjdSgpIHByaW1pdGl2ZXMgbXVzdCBiZSB1c2VkIGluIG9yZGVyCkBAIC0xMzUsMTEgKzE0OSwxNCBAQAogCQlyZWFkZXJzLiAgU2ltaWxhcmx5LCBpZiB0aGUgaGxpc3QgbWFjcm9zIGFyZSBiZWluZyB1c2VkLAogCQl0aGUgaGxpc3RfZGVsX3JjdSgpIHByaW1pdGl2ZSBpcyByZXF1aXJlZC4KIAotCQlUaGUgbGlzdF9yZXBsYWNlX3JjdSgpIHByaW1pdGl2ZSBtYXkgYmUgdXNlZCB0bwotCQlyZXBsYWNlIGFuIG9sZCBzdHJ1Y3R1cmUgd2l0aCBhIG5ldyBvbmUgaW4gYW4KLQkJUkNVLXByb3RlY3RlZCBsaXN0LgorCQlUaGUgbGlzdF9yZXBsYWNlX3JjdSgpIGFuZCBobGlzdF9yZXBsYWNlX3JjdSgpIHByaW1pdGl2ZXMKKwkJbWF5IGJlIHVzZWQgdG8gcmVwbGFjZSBhbiBvbGQgc3RydWN0dXJlIHdpdGggYSBuZXcgb25lCisJCWluIHRoZWlyIHJlc3BlY3RpdmUgdHlwZXMgb2YgUkNVLXByb3RlY3RlZCBsaXN0cy4KIAotCWQuCVVwZGF0ZXMgbXVzdCBlbnN1cmUgdGhhdCBpbml0aWFsaXphdGlvbiBvZiBhIGdpdmVuCisJZC4JUnVsZXMgc2ltaWxhciB0byAoNGIpIGFuZCAoNGMpIGFwcGx5IHRvIHRoZSAiaGxpc3RfbnVsbHMiCisJCXR5cGUgb2YgUkNVLXByb3RlY3RlZCBsaW5rZWQgbGlzdHMuCisKKwllLglVcGRhdGVzIG11c3QgZW5zdXJlIHRoYXQgaW5pdGlhbGl6YXRpb24gb2YgYSBnaXZlbgogCQlzdHJ1Y3R1cmUgaGFwcGVucyBiZWZvcmUgcG9pbnRlcnMgdG8gdGhhdCBzdHJ1Y3R1cmUgYXJlCiAJCXB1YmxpY2l6ZWQuICBVc2UgdGhlIHJjdV9hc3NpZ25fcG9pbnRlcigpIHByaW1pdGl2ZQogCQl3aGVuIHB1YmxpY2l6aW5nIGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSB0aGF0IGNhbgpAQCAtMTUxLDE2ICsxNjgsMzEgQEAKIAlpdCBjYW5ub3QgYmxvY2suCiAKIDYuCVNpbmNlIHN5bmNocm9uaXplX3JjdSgpIGNhbiBibG9jaywgaXQgY2Fubm90IGJlIGNhbGxlZCBmcm9tCi0JYW55IHNvcnQgb2YgaXJxIGNvbnRleHQuICBEaXR0byBmb3Igc3luY2hyb25pemVfc2NoZWQoKSBhbmQKLQlzeW5jaHJvbml6ZV9zcmN1KCkuCisJYW55IHNvcnQgb2YgaXJxIGNvbnRleHQuICBUaGUgc2FtZSBydWxlIGFwcGxpZXMgZm9yCisJc3luY2hyb25pemVfcmN1X2JoKCksIHN5bmNocm9uaXplX3NjaGVkKCksIHN5bmNocm9uaXplX3NyY3UoKSwKKwlzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKCksIHN5bmNocm9uaXplX3JjdV9iaF9leHBlZGl0ZWQoKSwKKwlzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZSgpLCBhbmQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoKS4KIAotNy4JSWYgdGhlIHVwZGF0ZXIgdXNlcyBjYWxsX3JjdSgpLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIHJlYWRlcnMKLQltdXN0IHVzZSByY3VfcmVhZF9sb2NrKCkgYW5kIHJjdV9yZWFkX3VubG9jaygpLiAgSWYgdGhlIHVwZGF0ZXIKLQl1c2VzIGNhbGxfcmN1X2JoKCksIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVhZGVycyBtdXN0IHVzZQotCXJjdV9yZWFkX2xvY2tfYmgoKSBhbmQgcmN1X3JlYWRfdW5sb2NrX2JoKCkuICBJZiB0aGUgdXBkYXRlcgotCXVzZXMgY2FsbF9yY3Vfc2NoZWQoKSwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyByZWFkZXJzIG11c3QKLQlkaXNhYmxlIHByZWVtcHRpb24uICBNaXhpbmcgdGhpbmdzIHVwIHdpbGwgcmVzdWx0IGluIGNvbmZ1c2lvbgotCWFuZCBicm9rZW4ga2VybmVscy4KKwlUaGUgZXhwZWRpdGVkIGZvcm1zIG9mIHRoZXNlIHByaW1pdGl2ZXMgaGF2ZSB0aGUgc2FtZSBzZW1hbnRpY3MKKwlhcyB0aGUgbm9uLWV4cGVkaXRlZCBmb3JtcywgYnV0IGV4cGVkaXRpbmcgaXMgYm90aCBleHBlbnNpdmUKKwlhbmQgdW5mcmllbmRseSB0byByZWFsLXRpbWUgd29ya2xvYWRzLglVc2Ugb2YgdGhlIGV4cGVkaXRlZAorCXByaW1pdGl2ZXMgc2hvdWxkIGJlIHJlc3RyaWN0ZWQgdG8gcmFyZSBjb25maWd1cmF0aW9uLWNoYW5nZQorCW9wZXJhdGlvbnMgdGhhdCB3b3VsZCBub3Qgbm9ybWFsbHkgYmUgdW5kZXJ0YWtlbiB3aGlsZSBhIHJlYWwtdGltZQorCXdvcmtsb2FkIGlzIHJ1bm5pbmcuCisKKzcuCUlmIHRoZSB1cGRhdGVyIHVzZXMgY2FsbF9yY3UoKSBvciBzeW5jaHJvbml6ZV9yY3UoKSwgdGhlbiB0aGUKKwljb3JyZXNwb25kaW5nIHJlYWRlcnMgbXVzdCB1c2UgcmN1X3JlYWRfbG9jaygpIGFuZAorCXJjdV9yZWFkX3VubG9jaygpLiAgSWYgdGhlIHVwZGF0ZXIgdXNlcyBjYWxsX3JjdV9iaCgpIG9yCisJc3luY2hyb25pemVfcmN1X2JoKCksIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVhZGVycyBtdXN0CisJdXNlIHJjdV9yZWFkX2xvY2tfYmgoKSBhbmQgcmN1X3JlYWRfdW5sb2NrX2JoKCkuICBJZiB0aGUKKwl1cGRhdGVyIHVzZXMgY2FsbF9yY3Vfc2NoZWQoKSBvciBzeW5jaHJvbml6ZV9zY2hlZCgpLCB0aGVuCisJdGhlIGNvcnJlc3BvbmRpbmcgcmVhZGVycyBtdXN0IGRpc2FibGUgcHJlZW1wdGlvbiwgcG9zc2libHkKKwlieSBjYWxsaW5nIHJjdV9yZWFkX2xvY2tfc2NoZWQoKSBhbmQgcmN1X3JlYWRfdW5sb2NrX3NjaGVkKCkuCisJSWYgdGhlIHVwZGF0ZXIgdXNlcyBzeW5jaHJvbml6ZV9zcmN1KCksIHRoZSB0aGUgY29ycmVzcG9uZGluZworCXJlYWRlcnMgbXVzdCB1c2Ugc3JjdV9yZWFkX2xvY2soKSBhbmQgc3JjdV9yZWFkX3VubG9jaygpLAorCWFuZCB3aXRoIHRoZSBzYW1lIHNyY3Vfc3RydWN0LglUaGUgcnVsZXMgZm9yIHRoZSBleHBlZGl0ZWQKKwlwcmltaXRpdmVzIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlaXIgbm9uLWV4cGVkaXRlZCBjb3VudGVycGFydHMuCisJTWl4aW5nIHRoaW5ncyB1cCB3aWxsIHJlc3VsdCBpbiBjb25mdXNpb24gYW5kIGJyb2tlbiBrZXJuZWxzLgogCiAJT25lIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGU6IHJjdV9yZWFkX2xvY2soKSBhbmQgcmN1X3JlYWRfdW5sb2NrKCkKIAltYXkgYmUgc3Vic3RpdHV0ZWQgZm9yIHJjdV9yZWFkX2xvY2tfYmgoKSBhbmQgcmN1X3JlYWRfdW5sb2NrX2JoKCkKQEAgLTIxMiw2ICsyNDQsOCBAQAogCWUuCVBlcmlvZGljYWxseSBpbnZva2Ugc3luY2hyb25pemVfcmN1KCksIHBlcm1pdHRpbmcgYSBsaW1pdGVkCiAJCW51bWJlciBvZiB1cGRhdGVzIHBlciBncmFjZSBwZXJpb2QuCiAKKwlUaGUgc2FtZSBjYXV0aW9ucyBhcHBseSB0byBjYWxsX3JjdV9iaCgpIGFuZCBjYWxsX3JjdV9zY2hlZCgpLgorCiA5LglBbGwgUkNVIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZXMsIHdoaWNoIGluY2x1ZGUKIAlyY3VfZGVyZWZlcmVuY2UoKSwgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoKSwKIAlsaXN0X2Zvcl9lYWNoX2NvbnRpbnVlX3JjdSgpLCBhbmQgbGlzdF9mb3JfZWFjaF9zYWZlX3JjdSgpLApAQCAtMjE5LDcgKzI1Myw5IEBACiAJbXVzdCBiZSBwcm90ZWN0ZWQgYnkgYXBwcm9wcmlhdGUgdXBkYXRlLXNpZGUgbG9ja3MuICBSQ1UKIAlyZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgYXJlIGRlbGltaXRlZCBieSByY3VfcmVhZF9sb2NrKCkKIAlhbmQgcmN1X3JlYWRfdW5sb2NrKCksIG9yIGJ5IHNpbWlsYXIgcHJpbWl0aXZlcyBzdWNoIGFzCi0JcmN1X3JlYWRfbG9ja19iaCgpIGFuZCByY3VfcmVhZF91bmxvY2tfYmgoKS4KKwlyY3VfcmVhZF9sb2NrX2JoKCkgYW5kIHJjdV9yZWFkX3VubG9ja19iaCgpLCBpbiB3aGljaCBjYXNlCisJdGhlIG1hdGNoaW5nIHJjdV9kZXJlZmVyZW5jZSgpIHByaW1pdGl2ZSBtdXN0IGJlIHVzZWQgaW4gb3JkZXIKKwl0byBrZWVwIGxvY2tkZXAgaGFwcHksIGluIHRoaXMgY2FzZSwgcmN1X2RlcmVmZXJlbmNlX2JoKCkuCiAKIAlUaGUgcmVhc29uIHRoYXQgaXQgaXMgcGVybWlzc2libGUgdG8gdXNlIFJDVSBsaXN0LXRyYXZlcnNhbAogCXByaW1pdGl2ZXMgd2hlbiB0aGUgdXBkYXRlLXNpZGUgbG9jayBpcyBoZWxkIGlzIHRoYXQgZG9pbmcgc28KQEAgLTIyOSw3ICsyNjUsOCBAQAogMTAuCUNvbnZlcnNlbHksIGlmIHlvdSBhcmUgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLAogCWFuZCB5b3UgZG9uJ3QgaG9sZCB0aGUgYXBwcm9wcmlhdGUgdXBkYXRlLXNpZGUgbG9jaywgeW91IC1tdXN0LQogCXVzZSB0aGUgIl9yY3UoKSIgdmFyaWFudHMgb2YgdGhlIGxpc3QgbWFjcm9zLiAgRmFpbGluZyB0byBkbyBzbwotCXdpbGwgYnJlYWsgQWxwaGEgYW5kIGNvbmZ1c2UgcGVvcGxlIHJlYWRpbmcgeW91ciBjb2RlLgorCXdpbGwgYnJlYWsgQWxwaGEsIGNhdXNlIGFnZ3Jlc3NpdmUgY29tcGlsZXJzIHRvIGdlbmVyYXRlIGJhZCBjb2RlLAorCWFuZCBjb25mdXNlIHBlb3BsZSB0cnlpbmcgdG8gcmVhZCB5b3VyIGNvZGUuCiAKIDExLglOb3RlIHRoYXQgc3luY2hyb25pemVfcmN1KCkgLW9ubHktIGd1YXJhbnRlZXMgdG8gd2FpdCB1bnRpbAogCWFsbCBjdXJyZW50bHkgZXhlY3V0aW5nIHJjdV9yZWFkX2xvY2soKS1wcm90ZWN0ZWQgUkNVIHJlYWQtc2lkZQpAQCAtMjM5LDE1ICsyNzYsMjEgQEAKIAlyY3VfcmVhZF9sb2NrKCktcHJvdGVjdGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgZG8gLW5vdC0KIAl1c2Ugc3luY2hyb25pemVfcmN1KCkuCiAKLQlJZiB5b3Ugd2FudCB0byB3YWl0IGZvciBzb21lIG9mIHRoZXNlIG90aGVyIHRoaW5ncywgeW91IG1pZ2h0Ci0JaW5zdGVhZCBuZWVkIHRvIHVzZSBzeW5jaHJvbml6ZV9pcnEoKSBvciBzeW5jaHJvbml6ZV9zY2hlZCgpLgorCVNpbWlsYXJseSwgZGlzYWJsaW5nIHByZWVtcHRpb24gaXMgbm90IGFuIGFjY2VwdGFibGUgc3Vic3RpdHV0ZQorCWZvciByY3VfcmVhZF9sb2NrKCkuICBDb2RlIHRoYXQgYXR0ZW1wdHMgdG8gdXNlIHByZWVtcHRpb24KKwlkaXNhYmxpbmcgd2hlcmUgaXQgc2hvdWxkIGJlIHVzaW5nIHJjdV9yZWFkX2xvY2soKSB3aWxsIGJyZWFrCisJaW4gcmVhbC10aW1lIGtlcm5lbCBidWlsZHMuCisKKwlJZiB5b3Ugd2FudCB0byB3YWl0IGZvciBpbnRlcnJ1cHQgaGFuZGxlcnMsIE5NSSBoYW5kbGVycywgYW5kCisJY29kZSB1bmRlciB0aGUgaW5mbHVlbmNlIG9mIHByZWVtcHRfZGlzYWJsZSgpLCB5b3UgaW5zdGVhZAorCW5lZWQgdG8gdXNlIHN5bmNocm9uaXplX2lycSgpIG9yIHN5bmNocm9uaXplX3NjaGVkKCkuCiAKIDEyLglBbnkgbG9jayBhY3F1aXJlZCBieSBhbiBSQ1UgY2FsbGJhY2sgbXVzdCBiZSBhY3F1aXJlZCBlbHNld2hlcmUKIAl3aXRoIHNvZnRpcnEgZGlzYWJsZWQsIGUuZy4sIHZpYSBzcGluX2xvY2tfaXJxc2F2ZSgpLAogCXNwaW5fbG9ja19iaCgpLCBldGMuICBGYWlsaW5nIHRvIGRpc2FibGUgaXJxIG9uIGEgZ2l2ZW4KLQlhY3F1aXNpdGlvbiBvZiB0aGF0IGxvY2sgd2lsbCByZXN1bHQgaW4gZGVhZGxvY2sgYXMgc29vbiBhcyB0aGUKLQlSQ1UgY2FsbGJhY2sgaGFwcGVucyB0byBpbnRlcnJ1cHQgdGhhdCBhY3F1aXNpdGlvbidzIGNyaXRpY2FsCi0Jc2VjdGlvbi4KKwlhY3F1aXNpdGlvbiBvZiB0aGF0IGxvY2sgd2lsbCByZXN1bHQgaW4gZGVhZGxvY2sgYXMgc29vbiBhcworCXRoZSBSQ1Ugc29mdGlycSBoYW5kbGVyIGhhcHBlbnMgdG8gcnVuIHlvdXIgUkNVIGNhbGxiYWNrIHdoaWxlCisJaW50ZXJydXB0aW5nIHRoYXQgYWNxdWlzaXRpb24ncyBjcml0aWNhbCBzZWN0aW9uLgogCiAxMy4JUkNVIGNhbGxiYWNrcyBjYW4gYmUgYW5kIGFyZSBleGVjdXRlZCBpbiBwYXJhbGxlbC4gIEluIG1hbnkgY2FzZXMsCiAJdGhlIGNhbGxiYWNrIGNvZGUgc2ltcGx5IHdyYXBwZXJzIGFyb3VuZCBrZnJlZSgpLCBzbyB0aGF0IHRoaXMKQEAgLTI2NSwyOSArMzA4LDMwIEBACiAJbm90IHRoZSBjYXNlLCBhIHNlbGYtc3Bhd25pbmcgUkNVIGNhbGxiYWNrIHdvdWxkIHByZXZlbnQgdGhlCiAJdmljdGltIENQVSBmcm9tIGV2ZXIgZ29pbmcgb2ZmbGluZS4pCiAKLTE0LglTUkNVIChzcmN1X3JlYWRfbG9jaygpLCBzcmN1X3JlYWRfdW5sb2NrKCksIGFuZCBzeW5jaHJvbml6ZV9zcmN1KCkpCi0JbWF5IG9ubHkgYmUgaW52b2tlZCBmcm9tIHByb2Nlc3MgY29udGV4dC4gIFVubGlrZSBvdGhlciBmb3JtcyBvZgotCVJDVSwgaXQgLWlzLSBwZXJtaXNzaWJsZSB0byBibG9jayBpbiBhbiBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbAotCXNlY3Rpb24gKGRlbWFya2VkIGJ5IHNyY3VfcmVhZF9sb2NrKCkgYW5kIHNyY3VfcmVhZF91bmxvY2soKSksCi0JaGVuY2UgdGhlICJTUkNVIjogInNsZWVwYWJsZSBSQ1UiLiAgUGxlYXNlIG5vdGUgdGhhdCBpZiB5b3UKLQlkb24ndCBuZWVkIHRvIHNsZWVwIGluIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucywgeW91IHNob3VsZAotCWJlIHVzaW5nIFJDVSByYXRoZXIgdGhhbiBTUkNVLCBiZWNhdXNlIFJDVSBpcyBhbG1vc3QgYWx3YXlzCi0JZmFzdGVyIGFuZCBlYXNpZXIgdG8gdXNlIHRoYW4gaXMgU1JDVS4KKzE0LglTUkNVIChzcmN1X3JlYWRfbG9jaygpLCBzcmN1X3JlYWRfdW5sb2NrKCksIHNyY3VfZGVyZWZlcmVuY2UoKSwKKwlzeW5jaHJvbml6ZV9zcmN1KCksIGFuZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgpKSBtYXkgb25seQorCWJlIGludm9rZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQuICBVbmxpa2Ugb3RoZXIgZm9ybXMgb2YgUkNVLCBpdAorCS1pcy0gcGVybWlzc2libGUgdG8gYmxvY2sgaW4gYW4gU1JDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbgorCShkZW1hcmtlZCBieSBzcmN1X3JlYWRfbG9jaygpIGFuZCBzcmN1X3JlYWRfdW5sb2NrKCkpLCBoZW5jZSB0aGUKKwkiU1JDVSI6ICJzbGVlcGFibGUgUkNVIi4gIFBsZWFzZSBub3RlIHRoYXQgaWYgeW91IGRvbid0IG5lZWQKKwl0byBzbGVlcCBpbiByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMsIHlvdSBzaG91bGQgYmUgdXNpbmcKKwlSQ1UgcmF0aGVyIHRoYW4gU1JDVSwgYmVjYXVzZSBSQ1UgaXMgYWxtb3N0IGFsd2F5cyBmYXN0ZXIgYW5kCisJZWFzaWVyIHRvIHVzZSB0aGFuIGlzIFNSQ1UuCiAKIAlBbHNvIHVubGlrZSBvdGhlciBmb3JtcyBvZiBSQ1UsIGV4cGxpY2l0IGluaXRpYWxpemF0aW9uCiAJYW5kIGNsZWFudXAgaXMgcmVxdWlyZWQgdmlhIGluaXRfc3JjdV9zdHJ1Y3QoKSBhbmQKIAljbGVhbnVwX3NyY3Vfc3RydWN0KCkuCVRoZXNlIGFyZSBwYXNzZWQgYSAic3RydWN0IHNyY3Vfc3RydWN0IgogCXRoYXQgZGVmaW5lcyB0aGUgc2NvcGUgb2YgYSBnaXZlbiBTUkNVIGRvbWFpbi4JT25jZSBpbml0aWFsaXplZCwKIAl0aGUgc3JjdV9zdHJ1Y3QgaXMgcGFzc2VkIHRvIHNyY3VfcmVhZF9sb2NrKCksIHNyY3VfcmVhZF91bmxvY2soKQotCWFuZCBzeW5jaHJvbml6ZV9zcmN1KCkuICBBIGdpdmVuIHN5bmNocm9uaXplX3NyY3UoKSB3YWl0cyBvbmx5Ci0JZm9yIFNSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIGdvdmVybmVkIGJ5IHNyY3VfcmVhZF9sb2NrKCkKLQlhbmQgc3JjdV9yZWFkX3VubG9jaygpIGNhbGxzIHRoYXQgaGF2ZSBiZWVuIHBhc3NkIHRoZSBzYW1lCi0Jc3JjdV9zdHJ1Y3QuICBUaGlzIHByb3BlcnR5IGlzIHdoYXQgbWFrZXMgc2xlZXBpbmcgcmVhZC1zaWRlCi0JY3JpdGljYWwgc2VjdGlvbnMgdG9sZXJhYmxlIC0tIGEgZ2l2ZW4gc3Vic3lzdGVtIGRlbGF5cyBvbmx5Ci0JaXRzIG93biB1cGRhdGVzLCBub3QgdGhvc2Ugb2Ygb3RoZXIgc3Vic3lzdGVtcyB1c2luZyBTUkNVLgotCVRoZXJlZm9yZSwgU1JDVSBpcyBsZXNzIHByb25lIHRvIE9PTSB0aGUgc3lzdGVtIHRoYW4gUkNVIHdvdWxkCi0JYmUgaWYgUkNVJ3MgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIHdlcmUgcGVybWl0dGVkIHRvCi0Jc2xlZXAuCisJc3luY2hyb25pemVfc3JjdSgpLCBhbmQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoKS4gIEEgZ2l2ZW4KKwlzeW5jaHJvbml6ZV9zcmN1KCkgd2FpdHMgb25seSBmb3IgU1JDVSByZWFkLXNpZGUgY3JpdGljYWwKKwlzZWN0aW9ucyBnb3Zlcm5lZCBieSBzcmN1X3JlYWRfbG9jaygpIGFuZCBzcmN1X3JlYWRfdW5sb2NrKCkKKwljYWxscyB0aGF0IGhhdmUgYmVlbiBwYXNzZWQgdGhlIHNhbWUgc3JjdV9zdHJ1Y3QuICBUaGlzIHByb3BlcnR5CisJaXMgd2hhdCBtYWtlcyBzbGVlcGluZyByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgdG9sZXJhYmxlIC0tCisJYSBnaXZlbiBzdWJzeXN0ZW0gZGVsYXlzIG9ubHkgaXRzIG93biB1cGRhdGVzLCBub3QgdGhvc2Ugb2Ygb3RoZXIKKwlzdWJzeXN0ZW1zIHVzaW5nIFNSQ1UuCVRoZXJlZm9yZSwgU1JDVSBpcyBsZXNzIHByb25lIHRvIE9PTSB0aGUKKwlzeXN0ZW0gdGhhbiBSQ1Ugd291bGQgYmUgaWYgUkNVJ3MgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zCisJd2VyZSBwZXJtaXR0ZWQgdG8gc2xlZXAuCiAKIAlUaGUgYWJpbGl0eSB0byBzbGVlcCBpbiByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgZG9lcyBub3QKIAljb21lIGZvciBmcmVlLglGaXJzdCwgY29ycmVzcG9uZGluZyBzcmN1X3JlYWRfbG9jaygpIGFuZApAQCAtMzExLDEyICszNTUsMTIgQEAKIAlkZXN0cnVjdGl2ZSBvcGVyYXRpb24sIGFuZCAtb25seS0gLXRoZW4tIGludm9rZSBjYWxsX3JjdSgpLAogCXN5bmNocm9uaXplX3JjdSgpLCBvciBmcmllbmRzLgogCi0JQmVjYXVzZSB0aGVzZSBwcmltaXRpdmVzIG9ubHkgd2FpdCBmb3IgcHJlLWV4aXN0aW5nIHJlYWRlcnMsCi0JaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGd1YXJhbnRlZSBzYWZldHkgdG8KLQlhbnkgc3Vic2VxdWVudCByZWFkZXJzLgorCUJlY2F1c2UgdGhlc2UgcHJpbWl0aXZlcyBvbmx5IHdhaXQgZm9yIHByZS1leGlzdGluZyByZWFkZXJzLCBpdAorCWlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgdGhhdCBhbnkgc3Vic2VxdWVudAorCXJlYWRlcnMgd2lsbCBleGVjdXRlIHNhZmVseS4KIAotMTYuCVRoZSB2YXJpb3VzIFJDVSByZWFkLXNpZGUgcHJpbWl0aXZlcyBkbyAtbm90LSBjb250YWluIG1lbW9yeQotCWJhcnJpZXJzLiAgVGhlIENQVSAoYW5kIGluIHNvbWUgY2FzZXMsIHRoZSBjb21waWxlcikgaXMgZnJlZQotCXRvIHJlb3JkZXIgY29kZSBpbnRvIGFuZCBvdXQgb2YgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy4KLQlJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIFJDVSB1cGRhdGUtc2lkZSBwcmltaXRpdmVzIHRvCi0JZGVhbCB3aXRoIHRoaXMuCisxNi4JVGhlIHZhcmlvdXMgUkNVIHJlYWQtc2lkZSBwcmltaXRpdmVzIGRvIC1ub3QtIG5lY2Vzc2FyaWx5IGNvbnRhaW4KKwltZW1vcnkgYmFycmllcnMuICBZb3Ugc2hvdWxkIHRoZXJlZm9yZSBwbGFuIGZvciB0aGUgQ1BVCisJYW5kIHRoZSBjb21waWxlciB0byBmcmVlbHkgcmVvcmRlciBjb2RlIGludG8gYW5kIG91dCBvZiBSQ1UKKwlyZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMuICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlCisJUkNVIHVwZGF0ZS1zaWRlIHByaW1pdGl2ZXMgdG8gZGVhbCB3aXRoIHRoaXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9sb2NrZGVwLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL2xvY2tkZXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMjRiNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9sb2NrZGVwLnR4dApAQCAtMCwwICsxLDY3IEBACitSQ1UgYW5kIGxvY2tkZXAgY2hlY2tpbmcKKworQWxsIGZsYXZvcnMgb2YgUkNVIGhhdmUgbG9ja2RlcCBjaGVja2luZyBhdmFpbGFibGUsIHNvIHRoYXQgbG9ja2RlcCBpcworYXdhcmUgb2Ygd2hlbiBlYWNoIHRhc2sgZW50ZXJzIGFuZCBsZWF2ZXMgYW55IGZsYXZvciBvZiBSQ1UgcmVhZC1zaWRlCitjcml0aWNhbCBzZWN0aW9uLiAgRWFjaCBmbGF2b3Igb2YgUkNVIGlzIHRyYWNrZWQgc2VwYXJhdGVseSAoYnV0IG5vdGUKK3RoYXQgdGhpcyBpcyBub3QgdGhlIGNhc2UgaW4gMi42LjMyIGFuZCBlYXJsaWVyKS4gIFRoaXMgYWxsb3dzIGxvY2tkZXAncwordHJhY2tpbmcgdG8gaW5jbHVkZSBSQ1Ugc3RhdGUsIHdoaWNoIGNhbiBzb21ldGltZXMgaGVscCB3aGVuIGRlYnVnZ2luZworZGVhZGxvY2tzIGFuZCB0aGUgbGlrZS4KKworSW4gYWRkaXRpb24sIFJDVSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIHByaW1pdGl2ZXMgdGhhdCBjaGVjayBsb2NrZGVwJ3MKK3N0YXRlOgorCisJcmN1X3JlYWRfbG9ja19oZWxkKCkgZm9yIG5vcm1hbCBSQ1UuCisJcmN1X3JlYWRfbG9ja19iaF9oZWxkKCkgZm9yIFJDVS1iaC4KKwlyY3VfcmVhZF9sb2NrX3NjaGVkX2hlbGQoKSBmb3IgUkNVLXNjaGVkLgorCXNyY3VfcmVhZF9sb2NrX2hlbGQoKSBmb3IgU1JDVS4KKworVGhlc2UgZnVuY3Rpb25zIGFyZSBjb25zZXJ2YXRpdmUsIGFuZCB3aWxsIHRoZXJlZm9yZSByZXR1cm4gMSBpZiB0aGV5CithcmVuJ3QgY2VydGFpbiAoZm9yIGV4YW1wbGUsIGlmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQpLgorVGhpcyBwcmV2ZW50cyB0aGluZ3MgbGlrZSBXQVJOX09OKCFyY3VfcmVhZF9sb2NrX2hlbGQoKSkgZnJvbSBnaXZpbmcgZmFsc2UKK3Bvc2l0aXZlcyB3aGVuIGxvY2tkZXAgaXMgZGlzYWJsZWQuCisKK0luIGFkZGl0aW9uLCBhIHNlcGFyYXRlIGtlcm5lbCBjb25maWcgcGFyYW1ldGVyIENPTkZJR19QUk9WRV9SQ1UgZW5hYmxlcworY2hlY2tpbmcgb2YgcmN1X2RlcmVmZXJlbmNlKCkgcHJpbWl0aXZlczoKKworCXJjdV9kZXJlZmVyZW5jZShwKToKKwkJQ2hlY2sgZm9yIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKwlyY3VfZGVyZWZlcmVuY2VfYmgocCk6CisJCUNoZWNrIGZvciBSQ1UtYmggcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCisJcmN1X2RlcmVmZXJlbmNlX3NjaGVkKHApOgorCQlDaGVjayBmb3IgUkNVLXNjaGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorCXNyY3VfZGVyZWZlcmVuY2UocCwgc3ApOgorCQlDaGVjayBmb3IgU1JDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKwlyY3VfZGVyZWZlcmVuY2VfY2hlY2socCwgYyk6CisJCVVzZSBleHBsaWNpdCBjaGVjayBleHByZXNzaW9uICJjIi4KKwlyY3VfZGVyZWZlcmVuY2VfcmF3KHApCisJCURvbid0IGNoZWNrLiAgKFVzZSBzcGFyaW5nbHksIGlmIGF0IGFsbC4pCisKK1RoZSByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSBjaGVjayBleHByZXNzaW9uIGNhbiBiZSBhbnkgYm9vbGVhbgorZXhwcmVzc2lvbiwgYnV0IHdvdWxkIG5vcm1hbGx5IGluY2x1ZGUgb25lIG9mIHRoZSByY3VfcmVhZF9sb2NrX2hlbGQoKQorZmFtaWx5IG9mIGZ1bmN0aW9ucyBhbmQgYSBsb2NrZGVwIGV4cHJlc3Npb24uICBIb3dldmVyLCBhbnkgYm9vbGVhbgorZXhwcmVzc2lvbiBjYW4gYmUgdXNlZC4gIEZvciBhIG1vZGVyYXRlbHkgb3JuYXRlIGV4YW1wbGUsIGNvbnNpZGVyCit0aGUgZm9sbG93aW5nOgorCisJZmlsZSA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhmZHQtPmZkW2ZkXSwKKwkJCQkgICAgIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8CisJCQkJICAgICBsb2NrZGVwX2lzX2hlbGQoJmZpbGVzLT5maWxlX2xvY2spIHx8CisJCQkJICAgICBhdG9taWNfcmVhZCgmZmlsZXMtPmNvdW50KSA9PSAxKTsKKworVGhpcyBleHByZXNzaW9uIHBpY2tzIHVwIHRoZSBwb2ludGVyICJmZHQtPmZkW2ZkXSIgaW4gYW4gUkNVLXNhZmUgbWFubmVyLAorYW5kLCBpZiBDT05GSUdfUFJPVkVfUkNVIGlzIGNvbmZpZ3VyZWQsIHZlcmlmaWVzIHRoYXQgdGhpcyBleHByZXNzaW9uCitpcyB1c2VkIGluOgorCisxLglBbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIG9yCisyLgl3aXRoIGZpbGVzLT5maWxlX2xvY2sgaGVsZCwgb3IKKzMuCW9uIGFuIHVuc2hhcmVkIGZpbGVzX3N0cnVjdC4KKworSW4gY2FzZSAoMSksIHRoZSBwb2ludGVyIGlzIHBpY2tlZCB1cCBpbiBhbiBSQ1Utc2FmZSBtYW5uZXIgZm9yIHZhbmlsbGEKK1JDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMsIGluIGNhc2UgKDIpIHRoZSAtPmZpbGVfbG9jayBwcmV2ZW50cworYW55IGNoYW5nZSBmcm9tIHRha2luZyBwbGFjZSwgYW5kIGZpbmFsbHksIGluIGNhc2UgKDMpIHRoZSBjdXJyZW50IHRhc2sKK2lzIHRoZSBvbmx5IHRhc2sgYWNjZXNzaW5nIHRoZSBmaWxlX3N0cnVjdCwgYWdhaW4gcHJldmVudGluZyBhbnkgY2hhbmdlCitmcm9tIHRha2luZyBwbGFjZS4KKworVGhlcmUgYXJlIGN1cnJlbnRseSBvbmx5ICJ1bml2ZXJzYWwiIHZlcnNpb25zIG9mIHRoZSByY3VfYXNzaWduX3BvaW50ZXIoKQorYW5kIFJDVSBsaXN0LS90cmVlLXRyYXZlcnNhbCBwcmltaXRpdmVzLCB3aGljaCBkbyBub3QgKHlldCkgY2hlY2sgZm9yCitiZWluZyBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBJbiB0aGUgZnV0dXJlLCBzZXBhcmF0ZQordmVyc2lvbnMgb2YgdGhlc2UgcHJpbWl0aXZlcyBtaWdodCBiZSBjcmVhdGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQKaW5kZXggMmEyMzUyMy4uMzE4NTI3MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0CkBAIC03NSw2ICs3NSw4IEBACiAJc2VhcmNoIGZvciB0aGUgc3RyaW5nICJQYXRlbnQiIGluIFJURlAudHh0IHRvIGZpbmQgdGhlbS4KIAlPZiB0aGVzZSwgb25lIHdhcyBhbGxvd2VkIHRvIGxhcHNlIGJ5IHRoZSBhc3NpZ25lZSwgYW5kIHRoZQogCW90aGVycyBoYXZlIGJlZW4gY29udHJpYnV0ZWQgdG8gdGhlIExpbnV4IGtlcm5lbCB1bmRlciBHUEwuCisJVGhlcmUgYXJlIG5vdyBhbHNvIExHUEwgaW1wbGVtZW50YXRpb25zIG9mIHVzZXItbGV2ZWwgUkNVCisJYXZhaWxhYmxlIChodHRwOi8vbHR0bmcub3JnLz9xPW5vZGUvMTgpLgogCiBvCUkgaGVhciB0aGF0IFJDVSBuZWVkcyB3b3JrIGluIG9yZGVyIHRvIHN1cHBvcnQgcmVhbHRpbWUga2VybmVscz8KIApAQCAtOTEsNDggKzkzLDQgQEAKIAogbwlXaGF0IGFyZSBhbGwgdGhlc2UgZmlsZXMgaW4gdGhpcyBkaXJlY3Rvcnk/CiAKLQotCU5NSS1SQ1UudHh0Ci0KLQkJRGVzY3JpYmVzIGhvdyB0byB1c2UgUkNVIHRvIGltcGxlbWVudCBkeW5hbWljCi0JCU5NSSBoYW5kbGVycywgd2hpY2ggY2FuIGJlIHJldmVjdG9yZWQgb24gdGhlIGZseSwKLQkJd2l0aG91dCByZWJvb3RpbmcuCi0KLQlSVEZQLnR4dAotCi0JCUxpc3Qgb2YgUkNVLXJlbGF0ZWQgcHVibGljYXRpb25zIGFuZCB3ZWIgc2l0ZXMuCi0KLQlVUC50eHQKLQotCQlEaXNjdXNzaW9uIG9mIFJDVSB1c2FnZSBpbiBVUCBrZXJuZWxzLgotCi0JYXJyYXlSQ1UudHh0Ci0KLQkJRGVzY3JpYmVzIGhvdyB0byB1c2UgUkNVIHRvIHByb3RlY3QgYXJyYXlzLCB3aXRoCi0JCXJlc2l6ZWFibGUgYXJyYXlzIHdob3NlIGVsZW1lbnRzIHJlZmVyZW5jZSBvdGhlcgotCQlkYXRhIHN0cnVjdHVyZXMgYmVpbmcgb2YgdGhlIG1vc3QgaW50ZXJlc3QuCi0KLQljaGVja2xpc3QudHh0Ci0KLQkJTGlzdHMgdGhpbmdzIHRvIGNoZWNrIGZvciB3aGVuIGluc3BlY3RpbmcgY29kZSB0aGF0Ci0JCXVzZXMgUkNVLgotCi0JbGlzdFJDVS50eHQKLQotCQlEZXNjcmliZXMgaG93IHRvIHVzZSBSQ1UgdG8gcHJvdGVjdCBsaW5rZWQgbGlzdHMuCi0JCVRoaXMgaXMgdGhlIHNpbXBsZXN0IGFuZCBtb3N0IGNvbW1vbiB1c2Ugb2YgUkNVCi0JCWluIHRoZSBMaW51eCBrZXJuZWwuCi0KLQlyY3UudHh0Ci0KLQkJWW91IGFyZSByZWFkaW5nIGl0IQotCi0JcmN1cmVmLnR4dAotCi0JCURlc2NyaWJlcyBob3cgdG8gY29tYmluZSB1c2Ugb2YgcmVmZXJlbmNlIGNvdW50cwotCQl3aXRoIFJDVS4KLQotCXdoYXRpc1JDVS50eHQKLQotCQlPdmVydmlldyBvZiBob3cgdGhlIFJDVSBpbXBsZW1lbnRhdGlvbiB3b3Jrcy4gIEFsb25nCi0JCXRoZSB3YXksIHByZXNlbnRzIGEgY29uY2VwdHVhbCB2aWV3IG9mIFJDVS4KKwlTZWUgMDAtSU5ERVggZm9yIHRoZSBsaXN0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1Uvc3RhbGx3YXJuLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3N0YWxsd2Fybi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQyM2QyNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3N0YWxsd2Fybi50eHQKQEAgLTAsMCArMSw1OCBAQAorVXNpbmcgUkNVJ3MgQ1BVIFN0YWxsIERldGVjdG9yCisKK1RoZSBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBrZXJuZWwgY29uZmlnIHBhcmFtZXRlciBlbmFibGVzCitSQ1UncyBDUFUgc3RhbGwgZGV0ZWN0b3IsIHdoaWNoIGRldGVjdHMgY29uZGl0aW9ucyB0aGF0IHVuZHVseSBkZWxheQorUkNVIGdyYWNlIHBlcmlvZHMuICBUaGUgc3RhbGwgZGV0ZWN0b3IncyBpZGVhIG9mIHdoYXQgY29uc3RpdHV0ZXMKKyJ1bmR1bHkgZGVsYXllZCIgaXMgY29udHJvbGxlZCBieSBhIHBhaXIgb2YgQyBwcmVwcm9jZXNzb3IgbWFjcm9zOgorCitSQ1VfU0VDT05EU19USUxMX1NUQUxMX0NIRUNLCisKKwlUaGlzIG1hY3JvIGRlZmluZXMgdGhlIHBlcmlvZCBvZiB0aW1lIHRoYXQgUkNVIHdpbGwgd2FpdCBmcm9tCisJdGhlIGJlZ2lubmluZyBvZiBhIGdyYWNlIHBlcmlvZCB1bnRpbCBpdCBpc3N1ZXMgYW4gUkNVIENQVQorCXN0YWxsIHdhcm5pbmcuCUl0IGlzIG5vcm1hbGx5IHRlbiBzZWNvbmRzLgorCitSQ1VfU0VDT05EU19USUxMX1NUQUxMX1JFQ0hFQ0sKKworCVRoaXMgbWFjcm8gZGVmaW5lcyB0aGUgcGVyaW9kIG9mIHRpbWUgdGhhdCBSQ1Ugd2lsbCB3YWl0IGFmdGVyCisJaXNzdWluZyBhIHN0YWxsIHdhcm5pbmcgdW50aWwgaXQgaXNzdWVzIGFub3RoZXIgc3RhbGwgd2FybmluZy4KKwlJdCBpcyBub3JtYWxseSBzZXQgdG8gdGhpcnR5IHNlY29uZHMuCisKK1JDVV9TVEFMTF9SQVRfREVMQVkKKworCVRoZSBDUFUgc3RhbGwgZGV0ZWN0b3IgdHJpZXMgdG8gbWFrZSB0aGUgb2ZmZW5kaW5nIENQVSByYXQgb24gaXRzZWxmLAorCWFzIHRoaXMgb2Z0ZW4gZ2l2ZXMgYmV0dGVyLXF1YWxpdHkgc3RhY2sgdHJhY2VzLiAgSG93ZXZlciwgaWYKKwl0aGUgb2ZmZW5kaW5nIENQVSBkb2VzIG5vdCBkZXRlY3QgaXRzIG93biBzdGFsbCBpbiB0aGUgbnVtYmVyCisJb2YgamlmZmllcyBzcGVjaWZpZWQgYnkgUkNVX1NUQUxMX1JBVF9ERUxBWSwgdGhlbiBvdGhlciBDUFVzIHdpbGwKKwljb21wbGFpbi4gIFRoaXMgaXMgbm9ybWFsbHkgc2V0IHRvIHR3byBqaWZmaWVzLgorCitUaGUgZm9sbG93aW5nIHByb2JsZW1zIGNhbiByZXN1bHQgaW4gYW4gUkNVIENQVSBzdGFsbCB3YXJuaW5nOgorCitvCUEgQ1BVIGxvb3BpbmcgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorCQorbwlBIENQVSBsb29waW5nIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKworbwlBIENQVSBsb29waW5nIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZC4KKworbwlGb3IgIUNPTkZJR19QUkVFTVBUIGtlcm5lbHMsIGEgQ1BVIGxvb3BpbmcgYW55d2hlcmUgaW4gdGhlIGtlcm5lbAorCXdpdGhvdXQgaW52b2tpbmcgc2NoZWR1bGUoKS4KKworbwlBIGJ1ZyBpbiB0aGUgUkNVIGltcGxlbWVudGF0aW9uLgorCitvCUEgaGFyZHdhcmUgZmFpbHVyZS4gIFRoaXMgaXMgcXVpdGUgdW5saWtlbHksIGJ1dCBoYXMgb2NjdXJyZWQKKwlhdCBsZWFzdCBvbmNlIGluIGEgZm9ybWVyIGxpZmUuICBBIENQVSBmYWlsZWQgaW4gYSBydW5uaW5nIHN5c3RlbSwKKwliZWNvbWluZyB1bnJlc3BvbnNpdmUsIGJ1dCBub3QgY2F1c2luZyBhbiBpbW1lZGlhdGUgY3Jhc2guCisJVGhpcyByZXN1bHRlZCBpbiBhIHNlcmllcyBvZiBSQ1UgQ1BVIHN0YWxsIHdhcm5pbmdzLCBldmVudHVhbGx5CisJbGVhZGluZyB0aGUgcmVhbGl6YXRpb24gdGhhdCB0aGUgQ1BVIGhhZCBmYWlsZWQuCisKK1RoZSBSQ1UsIFJDVS1zY2hlZCwgYW5kIFJDVS1iaCBpbXBsZW1lbnRhdGlvbnMgaGF2ZSBDUFUgc3RhbGwgd2FybmluZy4KK1NSQ1UgZG9lcyBub3QgZG8gc28gZGlyZWN0bHksIGJ1dCBpdHMgY2FsbHMgdG8gc3luY2hyb25pemVfc2NoZWQoKSB3aWxsCityZXN1bHQgaW4gUkNVLXNjaGVkIGRldGVjdGluZyBhbnkgQ1BVIHN0YWxscyB0aGF0IG1pZ2h0IGJlIG9jY3VycmluZy4KKworVG8gZGlhZ25vc2UgdGhlIGNhdXNlIG9mIHRoZSBzdGFsbCwgaW5zcGVjdCB0aGUgc3RhY2sgdHJhY2VzLiAgVGhlIG9mZmVuZGluZworZnVuY3Rpb24gd2lsbCB1c3VhbGx5IGJlIG5lYXIgdGhlIHRvcCBvZiB0aGUgc3RhY2suICBJZiB5b3UgaGF2ZSBhIHNlcmllcworb2Ygc3RhbGwgd2FybmluZ3MgZnJvbSBhIHNpbmdsZSBleHRlbmRlZCBzdGFsbCwgY29tcGFyaW5nIHRoZSBzdGFjayB0cmFjZXMKK2NhbiBvZnRlbiBoZWxwIGRldGVybWluZSB3aGVyZSB0aGUgc3RhbGwgaXMgb2NjdXJyaW5nLCB3aGljaCB3aWxsIHVzdWFsbHkKK2JlIGluIHRoZSBmdW5jdGlvbiBuZWFyZXN0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIHRoYXQgc3RheXMgdGhlIHNhbWUgZnJvbQordHJhY2UgdG8gdHJhY2UuCisKK1JDVSBidWdzIGNhbiBvZnRlbiBiZSBkZWJ1Z2dlZCB3aXRoIHRoZSBoZWxwIG9mIENPTkZJR19SQ1VfVFJBQ0UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS90b3J0dXJlLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3RvcnR1cmUudHh0CmluZGV4IDlkYmEzYmIuLjBlNTBiYzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL3RvcnR1cmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3RvcnR1cmUudHh0CkBAIC0zMCw2ICszMCwxOCBAQAogCiBUaGlzIG1vZHVsZSBoYXMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgogCitmcXNfZHVyYXRpb24JRHVyYXRpb24gKGluIG1pY3Jvc2Vjb25kcykgb2YgYXJ0aWZpY2lhbGx5IGluZHVjZWQgYnVyc3RzCisJCW9mIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpIGludm9jYXRpb25zLiAgSW4gUkNVCisJCWltcGxlbWVudGF0aW9ucyBoYXZpbmcgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCksIHRoZXNlCisJCWJ1cnN0cyBoZWxwIGZvcmNlIHJhY2VzIGJldHdlZW4gZm9yY2luZyBhIGdpdmVuIGdyYWNlCisJCXBlcmlvZCBhbmQgdGhhdCBncmFjZSBwZXJpb2QgZW5kaW5nIG9uIGl0cyBvd24uCisKK2Zxc19ob2xkb2ZmCUhvbGRvZmYgdGltZSAoaW4gbWljcm9zZWNvbmRzKSBiZXR3ZWVuIGNvbnNlY3V0aXZlIGNhbGxzCisJCXRvIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpIHdpdGhpbiBhIGJ1cnN0LgorCitmcXNfc3R1dHRlcglXYWl0IHRpbWUgKGluIHNlY29uZHMpIGJldHdlZW4gY29uc2VjdXRpdmUgYnVyc3RzCisJCW9mIGNhbGxzIHRvIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpLgorCiBpcnFyZWFkZXJzCVNheXMgdG8gaW52b2tlIFJDVSByZWFkZXJzIGZyb20gaXJxIGxldmVsLiAgVGhpcyBpcyBjdXJyZW50bHkKIAkJZG9uZSB2aWEgdGltZXJzLiAgRGVmYXVsdHMgdG8gIjEiIGZvciB2YXJpYW50cyBvZiBSQ1UgdGhhdAogCQlwZXJtaXQgdGhpcy4gIChPciwgbW9yZSBhY2N1cmF0ZWx5LCB2YXJpYW50cyBvZiBSQ1UgdGhhdCBkbwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS50eHQKaW5kZXggZDU0MmNhMi4uMWRjMDBlZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UudHh0CkBAIC0zMjMsMTQgKzMyMywxNyBAQAogCURlZmVyCQkJUHJvdGVjdAogCiBhLglzeW5jaHJvbml6ZV9yY3UoKQlyY3VfcmVhZF9sb2NrKCkgLyByY3VfcmVhZF91bmxvY2soKQotCWNhbGxfcmN1KCkKKwljYWxsX3JjdSgpCQlyY3VfZGVyZWZlcmVuY2UoKQogCiBiLgljYWxsX3JjdV9iaCgpCQlyY3VfcmVhZF9sb2NrX2JoKCkgLyByY3VfcmVhZF91bmxvY2tfYmgoKQorCQkJCXJjdV9kZXJlZmVyZW5jZV9iaCgpCiAKLWMuCXN5bmNocm9uaXplX3NjaGVkKCkJcHJlZW1wdF9kaXNhYmxlKCkgLyBwcmVlbXB0X2VuYWJsZSgpCitjLglzeW5jaHJvbml6ZV9zY2hlZCgpCXJjdV9yZWFkX2xvY2tfc2NoZWQoKSAvIHJjdV9yZWFkX3VubG9ja19zY2hlZCgpCisJCQkJcHJlZW1wdF9kaXNhYmxlKCkgLyBwcmVlbXB0X2VuYWJsZSgpCiAJCQkJbG9jYWxfaXJxX3NhdmUoKSAvIGxvY2FsX2lycV9yZXN0b3JlKCkKIAkJCQloYXJkaXJxIGVudGVyIC8gaGFyZGlycSBleGl0CiAJCQkJTk1JIGVudGVyIC8gTk1JIGV4aXQKKwkJCQlyY3VfZGVyZWZlcmVuY2Vfc2NoZWQoKQogCiBUaGVzZSB0aHJlZSBtZWNoYW5pc21zIGFyZSB1c2VkIGFzIGZvbGxvd3M6CiAKQEAgLTc4MCw5ICs3ODMsOCBAQAogQVBJcywgc2luY2UgdGhlcmUgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIGNhdGVnb3JpemUgdGhlbQogaW4gZG9jYm9vay4gIEhlcmUgaXMgdGhlIGxpc3QsIGJ5IGNhdGVnb3J5LgogCi1SQ1UgcG9pbnRlci9saXN0IHRyYXZlcnNhbDoKK1JDVSBsaXN0IHRyYXZlcnNhbDoKIAotCXJjdV9kZXJlZmVyZW5jZQogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1CiAJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1CkBAIC04MDgsNyArODEwLDcgQEAKIAogCXJjdV9yZWFkX2xvY2sJCXN5bmNocm9uaXplX25ldAkJcmN1X2JhcnJpZXIKIAlyY3VfcmVhZF91bmxvY2sJCXN5bmNocm9uaXplX3JjdQotCQkJCXN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQKKwlyY3VfZGVyZWZlcmVuY2UJCXN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQKIAkJCQljYWxsX3JjdQogCiAKQEAgLTgxNiw3ICs4MTgsNyBAQAogCiAJcmN1X3JlYWRfbG9ja19iaAljYWxsX3JjdV9iaAkJcmN1X2JhcnJpZXJfYmgKIAlyY3VfcmVhZF91bmxvY2tfYmgJc3luY2hyb25pemVfcmN1X2JoCi0JCQkJc3luY2hyb25pemVfcmN1X2JoX2V4cGVkaXRlZAorCXJjdV9kZXJlZmVyZW5jZV9iaAlzeW5jaHJvbml6ZV9yY3VfYmhfZXhwZWRpdGVkCiAKIAogc2NoZWQ6CUNyaXRpY2FsIHNlY3Rpb25zCUdyYWNlIHBlcmlvZAkJQmFycmllcgpAQCAtODI1LDEyICs4MjcsMTQgQEAKIAlyY3VfcmVhZF91bmxvY2tfc2NoZWQJY2FsbF9yY3Vfc2NoZWQKIAlbcHJlZW1wdF9kaXNhYmxlXQlzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQKIAlbYW5kIGZyaWVuZHNdCisJcmN1X2RlcmVmZXJlbmNlX3NjaGVkCiAKIAogU1JDVToJQ3JpdGljYWwgc2VjdGlvbnMJR3JhY2UgcGVyaW9kCQlCYXJyaWVyCiAKIAlzcmN1X3JlYWRfbG9jawkJc3luY2hyb25pemVfc3JjdQlOL0EKIAlzcmN1X3JlYWRfdW5sb2NrCXN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkCisJc3JjdV9kZXJlZmVyZW5jZQogCiBTUkNVOglJbml0aWFsaXphdGlvbi9jbGVhbnVwCiAJaW5pdF9zcmN1X3N0cnVjdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vbWVtb3J5LnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL21lbW9yeS50eHQKaW5kZXggOWQ1OGM3YzUuLmViMGZhZTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXJtL21lbW9yeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vbWVtb3J5LnR4dApAQCAtNTksNyArNTksMTEgQEAKIAkJCQlUaGlzIG1hcHMgdGhlIHBsYXRmb3JtcyBSQU0sIGFuZCB0eXBpY2FsbHkKIAkJCQltYXBzIGFsbCBwbGF0Zm9ybSBSQU0gaW4gYSAxOjEgcmVsYXRpb25zaGlwLgogCi1UQVNLX1NJWkUJUEFHRV9PRkZTRVQtMQlLZXJuZWwgbW9kdWxlIHNwYWNlCitQS01BUF9CQVNFCVBBR0VfT0ZGU0VULTEJUGVybWFuZW50IGtlcm5lbCBtYXBwaW5ncworCQkJCU9uZSB3YXkgb2YgbWFwcGluZyBISUdITUVNIHBhZ2VzIGludG8ga2VybmVsCisJCQkJc3BhY2UuCisKK01PRFVMRVNfVkFERFIJTU9EVUxFU19FTkQtMQlLZXJuZWwgbW9kdWxlIHNwYWNlCiAJCQkJS2VybmVsIG1vZHVsZXMgaW5zZXJ0ZWQgdmlhIGluc21vZCBhcmUKIAkJCQlwbGFjZWQgaGVyZSB1c2luZyBkeW5hbWljIG1hcHBpbmdzLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL3F1ZXVlLXN5c2ZzLnR4dCBiL0RvY3VtZW50YXRpb24vYmxvY2svcXVldWUtc3lzZnMudHh0CmluZGV4IGUxNjQ0MDMuLmY2NTI3NDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYmxvY2svcXVldWUtc3lzZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYmxvY2svcXVldWUtc3lzZnMudHh0CkBAIC0yNSwxMSArMjUsMTEgQEAKIAogbm9tZXJnZXMgKFJXKQogLS0tLS0tLS0tLS0tLQotVGhpcyBlbmFibGVzIHRoZSB1c2VyIHRvIGRpc2FibGUgdGhlIGxvb2t1cCBsb2dpYyBpbnZvbHZlZCB3aXRoIElPIG1lcmdpbmcKLXJlcXVlc3RzIGluIHRoZSBibG9jayBsYXllci4gTWVyZ2luZyBtYXkgc3RpbGwgb2NjdXIgdGhyb3VnaCBhIGRpcmVjdAotMS1oaXQgY2FjaGUsIHNpbmNlIHRoYXQgY29tZXMgZm9yIChhbG1vc3QpIGZyZWUuIFRoZSBJTyBzY2hlZHVsZXIgd2lsbCBub3QKLXdhc3RlIGN5Y2xlcyBkb2luZyB0cmVlL2hhc2ggbG9va3VwcyBmb3IgbWVyZ2VzIGlmIG5vbWVyZ2VzIGlzIDEuIERlZmF1bHRzCi10byAwLCBlbmFibGluZyBhbGwgbWVyZ2VzLgorVGhpcyBlbmFibGVzIHRoZSB1c2VyIHRvIGRpc2FibGUgdGhlIGxvb2t1cCBsb2dpYyBpbnZvbHZlZCB3aXRoIElPCittZXJnaW5nIHJlcXVlc3RzIGluIHRoZSBibG9jayBsYXllci4gQnkgZGVmYXVsdCAoMCkgYWxsIG1lcmdlcyBhcmUKK2VuYWJsZWQuIFdoZW4gc2V0IHRvIDEgb25seSBzaW1wbGUgb25lLWhpdCBtZXJnZXMgd2lsbCBiZSB0cmllZC4gV2hlbgorc2V0IHRvIDIgbm8gbWVyZ2UgYWxnb3JpdGhtcyB3aWxsIGJlIHRyaWVkIChpbmNsdWRpbmcgb25lLWhpdCBvciBtb3JlCitjb21wbGV4IHRyZWUvaGFzaCBsb29rdXBzKS4KIAogbnJfcmVxdWVzdHMgKFJXKQogLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jYWNoZXRsYi50eHQgYi9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dAppbmRleCBkYTQyYWI0Li4yYjVmODIzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dApAQCAtODgsMTIgKzg4LDEyIEBACiAJVGhpcyBpcyB1c2VkIHByaW1hcmlseSBkdXJpbmcgZmF1bHQgcHJvY2Vzc2luZy4KIAogNSkgdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQorCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiAKIAlBdCB0aGUgZW5kIG9mIGV2ZXJ5IHBhZ2UgZmF1bHQsIHRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvCiAJdGVsbCB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvZGUgdGhhdCBhIHRyYW5zbGF0aW9uCi0JZGVzY3JpYmVkIGJ5ICJwdGUiIG5vdyBleGlzdHMgYXQgdmlydHVhbCBhZGRyZXNzICJhZGRyZXNzIgotCWZvciBhZGRyZXNzIHNwYWNlICJ2bWEtPnZtX21tIiwgaW4gdGhlIHNvZnR3YXJlIHBhZ2UgdGFibGVzLgorCW5vdyBleGlzdHMgYXQgdmlydHVhbCBhZGRyZXNzICJhZGRyZXNzIiBmb3IgYWRkcmVzcyBzcGFjZQorCSJ2bWEtPnZtX21tIiwgaW4gdGhlIHNvZnR3YXJlIHBhZ2UgdGFibGVzLgogCiAJQSBwb3J0IG1heSB1c2UgdGhpcyBpbmZvcm1hdGlvbiBpbiBhbnkgd2F5IGl0IHNvIGNob29zZXMuCiAJRm9yIGV4YW1wbGUsIGl0IGNvdWxkIHVzZSB0aGlzIGV2ZW50IHRvIHByZS1sb2FkIFRMQgpAQCAtMzc3LDMgKzM3NywyNyBAQAogCUFsbCB0aGUgZnVuY3Rpb25hbGl0eSBvZiBmbHVzaF9pY2FjaGVfcGFnZSBjYW4gYmUgaW1wbGVtZW50ZWQgaW4KIAlmbHVzaF9kY2FjaGVfcGFnZSBhbmQgdXBkYXRlX21tdV9jYWNoZS4gSW4gMi43IHRoZSBob3BlIGlzIHRvCiAJcmVtb3ZlIHRoaXMgaW50ZXJmYWNlIGNvbXBsZXRlbHkuCisKK1RoZSBmaW5hbCBjYXRlZ29yeSBvZiBBUElzIGlzIGZvciBJL08gdG8gZGVsaWJlcmF0ZWx5IGFsaWFzZWQgYWRkcmVzcworcmFuZ2VzIGluc2lkZSB0aGUga2VybmVsLiAgU3VjaCBhbGlhc2VzIGFyZSBzZXQgdXAgYnkgdXNlIG9mIHRoZQordm1hcC92bWFsbG9jIEFQSS4gIFNpbmNlIGtlcm5lbCBJL08gZ29lcyB2aWEgcGh5c2ljYWwgcGFnZXMsIHRoZSBJL08KK3N1YnN5c3RlbSBhc3N1bWVzIHRoYXQgdGhlIHVzZXIgbWFwcGluZyBhbmQga2VybmVsIG9mZnNldCBtYXBwaW5nIGFyZQordGhlIG9ubHkgYWxpYXNlcy4gIFRoaXMgaXNuJ3QgdHJ1ZSBmb3Igdm1hcCBhbGlhc2VzLCBzbyBhbnl0aGluZyBpbgordGhlIGtlcm5lbCB0cnlpbmcgdG8gZG8gSS9PIHRvIHZtYXAgYXJlYXMgbXVzdCBtYW51YWxseSBtYW5hZ2UKK2NvaGVyZW5jeS4gIEl0IG11c3QgZG8gdGhpcyBieSBmbHVzaGluZyB0aGUgdm1hcCByYW5nZSBiZWZvcmUgZG9pbmcKK0kvTyBhbmQgaW52YWxpZGF0aW5nIGl0IGFmdGVyIHRoZSBJL08gcmV0dXJucy4KKworICB2b2lkIGZsdXNoX2tlcm5lbF92bWFwX3JhbmdlKHZvaWQgKnZhZGRyLCBpbnQgc2l6ZSkKKyAgICAgICBmbHVzaGVzIHRoZSBrZXJuZWwgY2FjaGUgZm9yIGEgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzIHJhbmdlIGluCisgICAgICAgdGhlIHZtYXAgYXJlYS4gIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgYW55IGRhdGEgdGhlIGtlcm5lbAorICAgICAgIG1vZGlmaWVkIGluIHRoZSB2bWFwIHJhbmdlIGlzIG1hZGUgdmlzaWJsZSB0byB0aGUgcGh5c2ljYWwKKyAgICAgICBwYWdlLiAgVGhlIGRlc2lnbiBpcyB0byBtYWtlIHRoaXMgYXJlYSBzYWZlIHRvIHBlcmZvcm0gSS9PIG9uLgorICAgICAgIE5vdGUgdGhhdCB0aGlzIEFQSSBkb2VzICpub3QqIGFsc28gZmx1c2ggdGhlIG9mZnNldCBtYXAgYWxpYXMKKyAgICAgICBvZiB0aGUgYXJlYS4KKworICB2b2lkIGludmFsaWRhdGVfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqdmFkZHIsIGludCBzaXplKSBpbnZhbGlkYXRlcworICAgICAgIHRoZSBjYWNoZSBmb3IgYSBnaXZlbiB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UgaW4gdGhlIHZtYXAgYXJlYQorICAgICAgIHdoaWNoIHByZXZlbnRzIHRoZSBwcm9jZXNzb3IgZnJvbSBtYWtpbmcgdGhlIGNhY2hlIHN0YWxlIGJ5CisgICAgICAgc3BlY3VsYXRpdmVseSByZWFkaW5nIGRhdGEgd2hpbGUgdGhlIEkvTyB3YXMgb2NjdXJyaW5nIHRvIHRoZQorICAgICAgIHBoeXNpY2FsIHBhZ2VzLiAgVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgZGF0YSByZWFkcyBpbnRvIHRoZQorICAgICAgIHZtYXAgYXJlYS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZG9udGRpZmYgYi9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCmluZGV4IDNhZDZhY2UuLmQ5YmNmZmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZG9udGRpZmYKKysrIGIvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgpAQCAtNjksNyArNjksNiBAQAogYmJvb3RzZWN0CiBiaW4yYwogYmlua2VybmVsLnNwZWMKLWJpbm9mZnNldAogYm9vdHNlY3QKIGJvdW5kcy5oCiBic2V0dXAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUgYi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlCmluZGV4IDE0YjdiNWEuLjIzOWNiZGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQpAQCAtMjYsNyArMjYsNyBAQAogCQkiZGVjMzAwMHMiLCAidnA3MDQxIiwgImRpYnVzYiIsICJueHQyMDAyIiwgIm54dDIwMDQiLAogCQkib3I1MTIxMSIsICJvcjUxMTMyX3FhbSIsICJvcjUxMTMyX3ZzYiIsICJibHVlYmlyZCIsCiAJCSJvcGVyYTEiLCAiY3gyMzF4eCIsICJjeDE4IiwgImN4MjM4ODUiLCAicHZydXNiMiIsICJtcGM3MTgiLAotCQkiYWY5MDE1Iik7CisJCSJhZjkwMTUiLCAibmdlbmUiKTsKIAogIyBDaGVjayBhcmdzCiBzeW50YXgoKSBpZiAoc2NhbGFyKEBBUkdWKSAhPSAxKTsKQEAgLTM5LDcgKzM5LDcgQEAKIAlkaWUgJEAgaWYgJEA7CiAJcHJpbnQgU1RERVJSIDw8RU9GOwogRmlybXdhcmUocykgJG91dGZpbGUgZXh0cmFjdGVkIHN1Y2Nlc3NmdWxseS4KLU5vdyBjb3B5IGl0KHRoZXkpIHRvIGVpdGhlciAvdXNyL2xpYi9ob3RwbHVnL2Zpcm13YXJlIG9yIC9saWIvZmlybXdhcmUKK05vdyBjb3B5IGl0KHRoZW0pIHRvIGVpdGhlciAvdXNyL2xpYi9ob3RwbHVnL2Zpcm13YXJlIG9yIC9saWIvZmlybXdhcmUKIChkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbiBvZiBmaXJtd2FyZSBob3RwbHVnKS4KIEVPRgogCWV4aXQoMCk7CkBAIC01NDksNiArNTQ5LDI0IEBACiAJY2xvc2UgSU5GSUxFOwogfQogCitzdWIgbmdlbmUgeworICAgIG15ICR1cmwgPSAiaHR0cDovL3d3dy5kaWdpdGFsZGV2aWNlcy5kZS9kb3dubG9hZC8iOworICAgIG15ICRmaWxlMSA9ICJuZ2VuZV8xNS5mdyI7CisgICAgbXkgJGhhc2gxID0gImQ3OThkNWE3NTcxMjExNzRmMGRiYzVmMjgzM2MwYzg1IjsKKyAgICBteSAkZmlsZTIgPSAibmdlbmVfMTcuZnciOworICAgIG15ICRoYXNoMiA9ICIyNmI2ODcxMzZlMTI3YjhhYzI0YjgxZTBlZWFmYzIwYiI7CisKKyAgICBjaGVja3N0YW5kYXJkKCk7CisKKyAgICB3Z2V0ZmlsZSgkZmlsZTEsICR1cmwgLiAkZmlsZTEpOworICAgIHZlcmlmeSgkZmlsZTEsICRoYXNoMSk7CisKKyAgICB3Z2V0ZmlsZSgkZmlsZTIsICR1cmwgLiAkZmlsZTIpOworICAgIHZlcmlmeSgkZmlsZTIsICRoYXNoMik7CisKKyAgICAiJGZpbGUxLCAkZmlsZTIiOworfQorCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBVdGlsaXRpZXMKIApAQCAtNjY3LDYgKzY4NSw3IEBACiBzdWIgc3ludGF4KCkgewogICAgIHByaW50IFNUREVSUiAic3ludGF4OiBnZXRfZHZiX2Zpcm13YXJlIDxjb21wb25lbnQ+XG4iOwogICAgIHByaW50IFNUREVSUiAiU3VwcG9ydGVkIGNvbXBvbmVudHM6XG4iOworICAgIEBjb21wb25lbnRzID0gc29ydCBAY29tcG9uZW50czsKICAgICBmb3IoJGk9MDsgJGkgPCBzY2FsYXIoQGNvbXBvbmVudHMpOyAkaSsrKSB7CiAJcHJpbnQgU1RERVJSICJcdCIgLiAkY29tcG9uZW50c1skaV0gLiAiXG4iOwogICAgIH0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCAwYTQ2ODMzLi5lYTQwMTQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC02LDIxICs2LDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CVVTRVJfU0NIRUQKLVdoZW46CTIuNi4zNAotCi1XaHk6CVVTRVJfU0NIRUQgd2FzIGltcGxlbWVudGVkIGFzIGEgcHJvb2Ygb2YgY29uY2VwdCBmb3IgZ3JvdXAgc2NoZWR1bGluZy4KLQlUaGUgZWZmZWN0IG9mIFVTRVJfU0NIRUQgY2FuIGFscmVhZHkgYmUgYWNoaWV2ZWQgZnJvbSB1c2Vyc3BhY2Ugd2l0aAotCXRoZSBoZWxwIG9mIGxpYmNncm91cC4gVGhlIHJlbW92YWwgb2YgVVNFUl9TQ0hFRCB3aWxsIGFsc28gc2ltcGxpZnkKLQl0aGUgc2NoZWR1bGVyIGNvZGUgd2l0aCB0aGUgcmVtb3ZhbCBvZiBvbmUgbWFqb3IgaWZkZWYuIFRoZXJlIGFyZSBhbHNvCi0JaXNzdWVzIFVTRVJfU0NIRUQgaGFzIHdpdGggVVNFUl9OUy4gQSBkZWNpc2lvbiB3YXMgdGFrZW4gbm90IHRvIGZpeAotCXRob3NlIGFuZCBpbnN0ZWFkIHJlbW92ZSBVU0VSX1NDSEVELiBBbHNvIG5ldyBncm91cCBzY2hlZHVsaW5nCi0JZmVhdHVyZXMgd2lsbCBub3QgYmUgaW1wbGVtZW50ZWQgZm9yIFVTRVJfU0NIRUQuCi0KLVdobzoJRGhhdmFsIEdpYW5pIDxkaGF2YWxAbGludXgudm5ldC5pYm0uY29tPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJUFJJU001NAogV2hlbjoJMi42LjM0CiAKQEAgLTY0LDYgKzQ5LDE3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXaGF0OglEZXByZWNhdGVkIHNuYXBzaG90IGlvY3RscworV2hlbjoJMi42LjM2CisKK1doeToJVGhlIGlvY3RscyBpbiBrZXJuZWwvcG93ZXIvdXNlci5jIHdlcmUgbWFya2VkIGFzIGRlcHJlY2F0ZWQgbG9uZyB0aW1lCisJYWdvLiBOb3cgdGhleSBub3RpZnkgdXNlcnMgYWJvdXQgdGhhdCBzbyB0aGF0IHRoZXkgbmVlZCB0byByZXBsYWNlCisJdGhlaXIgdXNlcnNwYWNlLiBBZnRlciBzb21lIG1vcmUgdGltZSwgcmVtb3ZlIHRoZW0gY29tcGxldGVseS4KKworV2hvOglKaXJpIFNsYWJ5IDxqaXJpc2xhYnlAZ21haWwuY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogV2hhdDoJVGhlIGllZWU4MDIxMV9yZWdkb20gbW9kdWxlIHBhcmFtZXRlcgogV2hlbjoJTWFyY2ggMjAxMCAvIGRlc2t0b3AgY2F0Y2h1cAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2RlbnRyeS1sb2NraW5nLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGVudHJ5LWxvY2tpbmcudHh0CmluZGV4IDRjMGM1NzUuLjc5MzM0ZWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGVudHJ5LWxvY2tpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZGVudHJ5LWxvY2tpbmcudHh0CkBAIC02Miw3ICs2Miw4IEBACiAyLiBJbnNlcnRpb24gb2YgYSBkZW50cnkgaW50byB0aGUgaGFzaCB0YWJsZSBpcyBkb25lIHVzaW5nCiAgICBobGlzdF9hZGRfaGVhZF9yY3UoKSB3aGljaCB0YWtlIGNhcmUgb2Ygb3JkZXJpbmcgdGhlIHdyaXRlcyAtIHRoZQogICAgd3JpdGVzIHRvIHRoZSBkZW50cnkgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB0aGUgZGVudHJ5IGlzCi0gICBpbnNlcnRlZC4gVGhpcyB3b3JrcyBpbiBjb25qdW5jdGlvbiB3aXRoIGhsaXN0X2Zvcl9lYWNoX3JjdSgpIHdoaWxlCisgICBpbnNlcnRlZC4gVGhpcyB3b3JrcyBpbiBjb25qdW5jdGlvbiB3aXRoIGhsaXN0X2Zvcl9lYWNoX3JjdSgpLAorICAgd2hpY2ggaGFzIHNpbmNlIGJlZW4gcmVwbGFjZWQgYnkgaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KCksIHdoaWxlCiAgICB3YWxraW5nIHRoZSBoYXNoIGNoYWluLiBUaGUgb25seSByZXF1aXJlbWVudCBpcyB0aGF0IGFsbAogICAgaW5pdGlhbGl6YXRpb24gdG8gdGhlIGRlbnRyeSBtdXN0IGJlIGRvbmUgYmVmb3JlCiAgICBobGlzdF9hZGRfaGVhZF9yY3UoKSBzaW5jZSB3ZSBkb24ndCBoYXZlIGRjYWNoZV9sb2NrIHByb3RlY3Rpb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggZTc4NDhhMC4uOGM2NjZkOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTE3MzgsNiArMTczOCw5IEBACiAJbm9tZmdwdAkJW1g4Ni0zMl0gRGlzYWJsZSBNdWx0aS1GdW5jdGlvbiBHZW5lcmFsIFB1cnBvc2UKIAkJCVRpbWVyIHVzYWdlIChmb3IgQU1EIEdlb2RlIG1hY2hpbmVzKS4KIAorCW5vcGF0CQlbWDg2XSBEaXNhYmxlIFBBVCAocGFnZSBhdHRyaWJ1dGUgdGFibGUgZXh0ZW5zaW9uIG9mCisJCQlwYWdldGFibGVzKSBzdXBwb3J0LgorCiAJbm9yYW5kbWFwcwlEb24ndCB1c2UgYWRkcmVzcyBzcGFjZSByYW5kb21pemF0aW9uLiAgRXF1aXZhbGVudCB0bwogCQkJZWNobyAwID4gL3Byb2Mvc3lzL2tlcm5lbC9yYW5kb21pemVfdmFfc3BhY2UKIApAQCAtMTk0OCw4ICsxOTUxLDEyIEBACiAJCQkJSVJRIHJvdXRpbmcgaXMgZW5hYmxlZC4KIAkJbm9hY3BpCQlbWDg2XSBEbyBub3QgdXNlIEFDUEkgZm9yIElSUSByb3V0aW5nCiAJCQkJb3IgZm9yIFBDSSBzY2FubmluZy4KLQkJdXNlX2NycwkJW1g4Nl0gVXNlIF9DUlMgZm9yIFBDSSByZXNvdXJjZQotCQkJCWFsbG9jYXRpb24uCisJCXVzZV9jcnMJCVtYODZdIFVzZSBQQ0kgaG9zdCBicmlkZ2Ugd2luZG93IGluZm9ybWF0aW9uCisJCQkJZnJvbSBBQ1BJLiAgT24gQklPU2VzIGZyb20gMjAwOCBvciBsYXRlciwgdGhpcworCQkJCWlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gIElmIHlvdSBuZWVkIHRvIHVzZSB0aGlzLAorCQkJCXBsZWFzZSByZXBvcnQgYSBidWcuCisJCW5vY3JzCQlbWDg2XSBJZ25vcmUgUENJIGhvc3QgYnJpZGdlIHdpbmRvd3MgZnJvbSBBQ1BJLgorCQkJICAgICAgICBJZiB5b3UgbmVlZCB0byB1c2UgdGhpcywgcGxlYXNlIHJlcG9ydCBhIGJ1Zy4KIAkJcm91dGVpcnEJRG8gSVJRIHJvdXRpbmcgZm9yIGFsbCBQQ0kgZGV2aWNlcy4KIAkJCQlUaGlzIGlzIG5vcm1hbGx5IGRvbmUgaW4gcGNpX2VuYWJsZV9kZXZpY2UoKSwKIAkJCQlzbyB0aGlzIG9wdGlvbiBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kCkBAIC0xOTk4LDYgKzIwMDUsMTQgQEAKIAkJZm9yY2UJRW5hYmxlIEFTUE0gZXZlbiBvbiBkZXZpY2VzIHRoYXQgY2xhaW0gbm90IHRvIHN1cHBvcnQgaXQuCiAJCQlXQVJOSU5HOiBGb3JjaW5nIEFTUE0gb24gbWF5IGNhdXNlIHN5c3RlbSBsb2NrdXBzLgogCisJcGNpZV9wbWU9CVtQQ0lFLFBNXSBOYXRpdmUgUENJZSBQTUUgc2lnbmFsaW5nIG9wdGlvbnM6CisJCW9mZglEbyBub3QgdXNlIG5hdGl2ZSBQQ0llIFBNRSBzaWduYWxpbmcuCisJCWZvcmNlCVVzZSBuYXRpdmUgUENJZSBQTUUgc2lnbmFsaW5nIGV2ZW4gaWYgdGhlIEJJT1MgcmVmdXNlcworCQkJdG8gYWxsb3cgdGhlIGtlcm5lbCB0byBjb250cm9sIHRoZSByZWxldmFudCBQQ0llIGNvbmZpZworCQkJcmVnaXN0ZXJzLgorCQlub21zaQlEbyBub3QgdXNlIE1TSSBmb3IgbmF0aXZlIFBDSWUgUE1FIHNpZ25hbGluZyAodGhpcyBtYWtlcworCQkJYWxsIFBDSWUgcm9vdCBwb3J0cyB1c2UgSU5UeCBmb3IgZXZlcnl0aGluZykuCisKIAlwY212PQkJW0hXLFBDTUNJQV0gQmFkZ2VQQUQgNAogCiAJcGQuCQlbUEFSSURFXQpAQCAtMjcwMyw2ICsyNzE4LDEzIEBACiAJCQkJCW1lZGl1bSBpcyB3cml0ZS1wcm90ZWN0ZWQpLgogCQkJRXhhbXBsZTogcXVpcmtzPTA0MTk6YWFmNTpybCwwNDIxOjA0MzM6cmMKIAorCXVzZXJwdGU9CisJCQlbWDg2XSBGbGFncyBjb250cm9sbGluZyB1c2VyIFBURSBhbGxvY2F0aW9ucy4KKworCQkJCW5vaGlnaCA9IGRvIG5vdCBhbGxvY2F0ZSBQVEUgcGFnZXMgaW4KKwkJCQkJSElHSE1FTSByZWdhcmRsZXNzIG9mIHNldHRpbmcKKwkJCQkJb2YgQ09ORklHX0hJR0hQVEUuCisKIAl2ZHNvPQkJW1g4NixTSF0KIAkJCXZkc289MjogZW5hYmxlIGNvbXBhdCBWRFNPIChkZWZhdWx0IHdpdGggQ09NUEFUX1ZEU08pCiAJCQl2ZHNvPTE6IGVuYWJsZSBWRFNPIChkZWZhdWx0KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LmMgYi9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYwppbmRleCA0MjIwODUxLi4zMTE5ZjVkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYworKysgYi9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPHN5cy91aW8uaD4KICNpbmNsdWRlIDx0ZXJtaW9zLmg+CiAjaW5jbHVkZSA8Z2V0b3B0Lmg+Ci0jaW5jbHVkZSA8emxpYi5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPHNjaGVkLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3BjbWNpYS9sb2NraW5nLnR4dCBiL0RvY3VtZW50YXRpb24vcGNtY2lhL2xvY2tpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZjYyMmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3BjbWNpYS9sb2NraW5nLnR4dApAQCAtMCwwICsxLDExOCBAQAorVGhpcyBmaWxlIGV4cGxhaW5zIHRoZSBsb2NraW5nIGFuZCBleGNsdXNpb24gc2NoZW1lIHVzZWQgaW4gdGhlIFBDQ0FSRAorYW5kIFBDTUNJQSBzdWJzeXN0ZW1zLgorCisKK0EpIE92ZXJ2aWV3LCBMb2NraW5nIEhpZXJhcmNoeToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtCS0gcHJvdGVjdHMgb25seSB0aGUgbGlzdCBvZiBzb2NrZXRzCistIHNrdF9tdXRleAkJCS0gc2VyaWFsaXplcyBjYXJkIGluc2VydCAvIGVqZWN0aW9uCisgIC0gb3BzX211dGV4CQkJLSBzZXJpYWxpemVzIHNvY2tldCBvcGVyYXRpb24KKworCitCKSBFeGNsdXNpb24KKz09PT09PT09PT09PQorCitUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhbmQgY2FsbGJhY2tzIHRvIHN0cnVjdCBwY21jaWFfc29ja2V0IG11c3QKK2JlIGNhbGxlZCB3aXRoICJza3RfbXV0ZXgiIGhlbGQ6CisKKwlzb2NrZXRfZGV0ZWN0X2NoYW5nZSgpCisJc2VuZF9ldmVudCgpCisJc29ja2V0X3Jlc2V0KCkKKwlzb2NrZXRfc2h1dGRvd24oKQorCXNvY2tldF9zZXR1cCgpCisJc29ja2V0X3JlbW92ZSgpCisJc29ja2V0X2luc2VydCgpCisJc29ja2V0X2Vhcmx5X3Jlc3VtZSgpCisJc29ja2V0X2xhdGVfcmVzdW1lKCkKKwlzb2NrZXRfcmVzdW1lKCkKKwlzb2NrZXRfc3VzcGVuZCgpCisKKwlzdHJ1Y3QgcGNtY2lhX2NhbGxiYWNrCSpjYWxsYmFjaworCitUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhbmQgY2FsbGJhY2tzIHRvIHN0cnVjdCBwY21jaWFfc29ja2V0IG11c3QKK2JlIGNhbGxlZCB3aXRoICJvcHNfbXV0ZXgiIGhlbGQ6CisKKwlzb2NrZXRfcmVzZXQoKQorCXNvY2tldF9zZXR1cCgpCisKKwlzdHJ1Y3QgcGNjYXJkX29wZXJhdGlvbnMJKm9wcworCXN0cnVjdCBwY2NhcmRfcmVzb3VyY2Vfb3BzCSpyZXNvdXJjZV9vcHM7CisKK05vdGUgdGhhdCBzZW5kX2V2ZW50KCkgYW5kIHN0cnVjdCBwY21jaWFfY2FsbGJhY2sgKmNhbGxiYWNrIG11c3Qgbm90IGJlCitjYWxsZWQgd2l0aCAib3BzX211dGV4IiBoZWxkLgorCisKK0MpIFByb3RlY3Rpb24KKz09PT09PT09PT09PT0KKworMS4gR2xvYmFsIERhdGE6CistLS0tLS0tLS0tLS0tLS0KK3N0cnVjdCBsaXN0X2hlYWQJcGNtY2lhX3NvY2tldF9saXN0OworCitwcm90ZWN0ZWQgYnkgcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtOworCisKKzIuIFBlci1Tb2NrZXQgRGF0YToKKy0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSByZXNvdXJjZV9vcHMgYW5kIHRoZWlyIGRhdGEgYXJlIHByb3RlY3RlZCBieSBvcHNfbXV0ZXguCisKK1RoZSAibWFpbiIgc3RydWN0IHBjbWNpYV9zb2NrZXQgaXMgcHJvdGVjdGVkIGFzIGZvbGxvd3MgKHJlYWQtb25seSBmaWVsZHMKK29yIHNpbmdsZS11c2UgZmllbGRzIG5vdCBtZW50aW9uZWQpOgorCistIGJ5IHBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbToKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNvY2tldF9saXN0OworCistIGJ5IHRocmVhZF9sb2NrOgorCXVuc2lnbmVkIGludAkJdGhyZWFkX2V2ZW50czsKKworLSBieSBza3RfbXV0ZXg6CisJdV9pbnQJCQlzdXNwZW5kZWRfc3RhdGU7CisJdm9pZAkJCSgqdHVuZV9icmlkZ2UpOworCXN0cnVjdCBwY21jaWFfY2FsbGJhY2sJKmNhbGxiYWNrOworCWludAkJCXJlc3VtZV9zdGF0dXM7CisKKy0gYnkgb3BzX211dGV4OgorCXNvY2tldF9zdGF0ZV90CQlzb2NrZXQ7CisJdV9pbnQJCQlzdGF0ZTsKKwl1X3Nob3J0CQkJbG9ja19jb3VudDsKKwlwY2NhcmRfbWVtX21hcAkJY2lzX21lbTsKKwl2b2lkIF9faW9tZW0gCQkqY2lzX3ZpcnQ7CisJc3RydWN0IHsgfQkJaXJxOworCWlvX3dpbmRvd190CQlpb1tdOworCXBjY2FyZF9tZW1fbWFwCQl3aW5bXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNpc19jYWNoZTsKKwlzaXplX3QJCQlmYWtlX2Npc19sZW47CisJdTgJCQkqZmFrZV9jaXM7CisJdV9pbnQJCQlpcnFfbWFzazsKKwl2b2lkIAkJCSgqem9vbV92aWRlbyk7CisJaW50IAkJCSgqcG93ZXJfaG9vayk7CisJdTgJCQlyZXNvdXJjZS4uLjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWRldmljZXNfbGlzdDsKKwl1OAkJCWRldmljZV9jb3VudDsKKwlzdHJ1Y3QgCQkJcGNtY2lhX3N0YXRlOworCisKKzMuIFBlciBQQ01DSUEtZGV2aWNlIERhdGE6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgIm1haW4iIHN0cnVjdCBwY21jaWFfZGV2aWUgaXMgcHJvdGVjdGVkIGFzIGZvbGxvd3MgKHJlYWQtb25seSBmaWVsZHMKK29yIHNpbmdsZS11c2UgZmllbGRzIG5vdCBtZW50aW9uZWQpOgorCisKKy0gYnkgcGNtY2lhX3NvY2tldC0+b3BzX211dGV4OgorCXN0cnVjdCBsaXN0X2hlYWQJc29ja2V0X2RldmljZV9saXN0OworCXN0cnVjdCBjb25maWdfdAkJKmZ1bmN0aW9uX2NvbmZpZzsKKwl1MTYJCQlfaXJxOjE7CisJdTE2CQkJX2lvOjE7CisJdTE2CQkJX3dpbjo0OworCXUxNgkJCV9sb2NrZWQ6MTsKKwl1MTYJCQlhbGxvd19mdW5jX2lkX21hdGNoOjE7CisJdTE2CQkJc3VzcGVuZGVkOjE7CisJdTE2CQkJX3JlbW92ZWQ6MTsKKworLSBieSB0aGUgUENNQ0lBIGRyaXZlcjoKKwlpb19yZXFfdAkJaW87CisJaXJxX3JlcV90CQlpcnE7CisJY29uZmlnX3JlcV90CQljb25mOworCXdpbmRvd19oYW5kbGVfdAkJd2luOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBjNTEyMS1wc2MudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBjNTEyMS1wc2MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MzJlODcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGM1MTIxLXBzYy50eHQKQEAgLTAsMCArMSw3MCBAQAorTVBDNTEyMSBQU0MgRGV2aWNlIFRyZWUgQmluZGluZ3MKKworUFNDIGluIFVBUlQgbW9kZQorLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgUFNDIGluIFVBUlQgbW9kZSB0aGUgbmVlZGVkIFBTQyBzZXJpYWwgZGV2aWNlcworYXJlIHNwZWNpZmllZCBieSBmc2wsbXBjNTEyMS1wc2MtdWFydCBub2RlcyBpbiB0aGUKK2ZzbCxtcGM1MTIxLWltbXIgU29DIG5vZGUuIEFkZGl0aW9uYWxseSB0aGUgUFNDIEZJRk8KK0NvbnRyb2xsZXIgbm9kZSBmc2wsbXBjNTEyMS1wc2MtZmlmbyBpcyByZXF1ZXJlZCB0aGVyZToKKworZnNsLG1wYzUxMjEtcHNjLXVhcnQgbm9kZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlcXVpcmVkIHByb3BlcnRpZXMgOgorIC0gY29tcGF0aWJsZSA6IFNob3VsZCBjb250YWluICJmc2wsbXBjNTEyMS1wc2MtdWFydCIgYW5kICJmc2wsbXBjNTEyMS1wc2MiCisgLSBjZWxsLWluZGV4IDogSW5kZXggb2YgdGhlIFBTQyBpbiBoYXJkd2FyZQorIC0gcmVnIDogT2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIFBTQyBkZXZpY2UKKyAtIGludGVycnVwdHMgOiA8YSBiPiB3aGVyZSBhIGlzIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIG9mIHRoZQorICAgUFNDIEZJRk8gQ29udHJvbGxlciBhbmQgYiBpcyBhIGZpZWxkIHRoYXQgcmVwcmVzZW50cyBhbgorICAgZW5jb2Rpbmcgb2YgdGhlIHNlbnNlIGFuZCBsZXZlbCBpbmZvcm1hdGlvbiBmb3IgdGhlIGludGVycnVwdC4KKyAtIGludGVycnVwdC1wYXJlbnQgOiB0aGUgcGhhbmRsZSBmb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyIHRoYXQKKyAgIHNlcnZpY2VzIGludGVycnVwdHMgZm9yIHRoaXMgZGV2aWNlLgorCitSZWNvbW1lbmRlZCBwcm9wZXJ0aWVzIDoKKyAtIGZzbCxyeC1maWZvLXNpemUgOiB0aGUgc2l6ZSBvZiB0aGUgUlggZmlmbyBzbGljZSAoYSBtdWx0aXBsZSBvZiA0KQorIC0gZnNsLHR4LWZpZm8tc2l6ZSA6IHRoZSBzaXplIG9mIHRoZSBUWCBmaWZvIHNsaWNlIChhIG11bHRpcGxlIG9mIDQpCisKKworZnNsLG1wYzUxMjEtcHNjLWZpZm8gbm9kZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZXF1aXJlZCBwcm9wZXJ0aWVzIDoKKyAtIGNvbXBhdGlibGUgOiBTaG91bGQgYmUgImZzbCxtcGM1MTIxLXBzYy1maWZvIgorIC0gcmVnIDogT2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIFBTQworICAgICAgICAgRklGTyBDb250cm9sbGVyCisgLSBpbnRlcnJ1cHRzIDogPGEgYj4gd2hlcmUgYSBpcyB0aGUgaW50ZXJydXB0IG51bWJlciBvZiB0aGUKKyAgIFBTQyBGSUZPIENvbnRyb2xsZXIgYW5kIGIgaXMgYSBmaWVsZCB0aGF0IHJlcHJlc2VudHMgYW4KKyAgIGVuY29kaW5nIG9mIHRoZSBzZW5zZSBhbmQgbGV2ZWwgaW5mb3JtYXRpb24gZm9yIHRoZSBpbnRlcnJ1cHQuCisgLSBpbnRlcnJ1cHQtcGFyZW50IDogdGhlIHBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB0aGF0CisgICBzZXJ2aWNlcyBpbnRlcnJ1cHRzIGZvciB0aGlzIGRldmljZS4KKworCitFeGFtcGxlIGZvciBhIGJvYXJkIHVzaW5nIFBTQzAgYW5kIFBTQzEgZGV2aWNlcyBpbiBzZXJpYWwgbW9kZToKKworc2VyaWFsQDExMDAwIHsKKwljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXBzYy11YXJ0IiwgImZzbCxtcGM1MTIxLXBzYyI7CisJY2VsbC1pbmRleCA9IDwwPjsKKwlyZWcgPSA8MHgxMTAwMCAweDEwMD47CisJaW50ZXJydXB0cyA9IDw0MCAweDg+OworCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CisJZnNsLHJ4LWZpZm8tc2l6ZSA9IDwxNj47CisJZnNsLHR4LWZpZm8tc2l6ZSA9IDwxNj47Cit9OworCitzZXJpYWxAMTExMDAgeworCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtcHNjLXVhcnQiLCAiZnNsLG1wYzUxMjEtcHNjIjsKKwljZWxsLWluZGV4ID0gPDE+OworCXJlZyA9IDwweDExMTAwIDB4MTAwPjsKKwlpbnRlcnJ1cHRzID0gPDQwIDB4OD47CisJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKKwlmc2wscngtZmlmby1zaXplID0gPDE2PjsKKwlmc2wsdHgtZmlmby1zaXplID0gPDE2PjsKK307CisKK3BzY2ZpZm9AMTFmMDAgeworCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtcHNjLWZpZm8iOworCXJlZyA9IDwweDExZjAwIDB4MTAwPjsKKwlpbnRlcnJ1cHRzID0gPDQwIDB4OD47CisJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3BpLnR4dAppbmRleCBlN2Q5YTM0Li44MDUxMGMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NwaS50eHQKQEAgLTEzLDYgKzEzLDExIEBACiAtIGludGVycnVwdC1wYXJlbnQgOiB0aGUgcGhhbmRsZSBmb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyIHRoYXQKICAgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UuCiAKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIGdwaW9zIDogc3BlY2lmaWVzIHRoZSBncGlvIHBpbnMgdG8gYmUgdXNlZCBmb3IgY2hpcHNlbGVjdHMuCisgIFRoZSBncGlvcyB3aWxsIGJlIHJlZmVycmVkIHRvIGFzIHJlZyA9IDxpbmRleD4gaW4gdGhlIFNQSSBjaGlsZCBub2Rlcy4KKyAgSWYgdW5zcGVjaWZpZWQsIGEgc2luZ2xlIFNQSSBkZXZpY2Ugd2l0aG91dCBhIGNoaXAgc2VsZWN0IGNhbiBiZSB1c2VkLgorCiBFeGFtcGxlOgogCXNwaUA0YzAgewogCQljZWxsLWluZGV4ID0gPDA+OwpAQCAtMjEsNCArMjYsNiBAQAogCQlpbnRlcnJ1cHRzID0gPDgyIDA+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDcwMD47CiAJCW1vZGUgPSAiY3B1IjsKKwkJZ3Bpb3MgPSA8JmdwaW8gMTggMQkvLyBkZXZpY2UgcmVnPTwwPgorCQkJICZncGlvIDE5IDE+OwkvLyBkZXZpY2UgcmVnPTwxPgogCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvcHRyYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9wdHJhY2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YTU0OTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvcHRyYWNlLnR4dApAQCAtMCwwICsxLDEzNCBAQAorR0RCIGludGVuZHMgdG8gc3VwcG9ydCB0aGUgZm9sbG93aW5nIGhhcmR3YXJlIGRlYnVnIGZlYXR1cmVzIG9mIEJvb2tFCitwcm9jZXNzb3JzOgorCis0IGhhcmR3YXJlIGJyZWFrcG9pbnRzIChJQUMpCisyIGhhcmR3YXJlIHdhdGNocG9pbnRzIChyZWFkLCB3cml0ZSBhbmQgcmVhZC13cml0ZSkgKERBQykKKzIgdmFsdWUgY29uZGl0aW9ucyBmb3IgdGhlIGhhcmR3YXJlIHdhdGNocG9pbnRzIChEVkMpCisKK0ZvciB0aGF0LCB3ZSBuZWVkIHRvIGV4dGVuZCBwdHJhY2Ugc28gdGhhdCBHREIgY2FuIHF1ZXJ5IGFuZCBzZXQgdGhlc2UKK3Jlc291cmNlcy4gU2luY2Ugd2UncmUgZXh0ZW5kaW5nLCB3ZSdyZSB0cnlpbmcgdG8gY3JlYXRlIGFuIGludGVyZmFjZQordGhhdCdzIGV4dGVuZGFibGUgYW5kIHRoYXQgY292ZXJzIGJvdGggQm9va0UgYW5kIHNlcnZlciBwcm9jZXNzb3JzLCBzbwordGhhdCBHREIgZG9lc24ndCBuZWVkIHRvIHNwZWNpYWwtY2FzZSBlYWNoIG9mIHRoZW0uIFdlIGFkZGVkIHRoZQorZm9sbG93aW5nIDMgbmV3IHB0cmFjZSByZXF1ZXN0cy4KKworMS4gUFRSQUNFX1BQQ19HRVRIV0RFQlVHSU5GTworCitRdWVyeSBmb3IgR0RCIHRvIGRpc2NvdmVyIHRoZSBoYXJkd2FyZSBkZWJ1ZyBmZWF0dXJlcy4gVGhlIG1haW4gaW5mbyB0bworYmUgcmV0dXJuZWQgaGVyZSBpcyB0aGUgbWluaW11bSBhbGlnbm1lbnQgZm9yIHRoZSBoYXJkd2FyZSB3YXRjaHBvaW50cy4KK0Jvb2tFIHByb2Nlc3NvcnMgZG9uJ3QgaGF2ZSByZXN0cmljdGlvbnMgaGVyZSwgYnV0IHNlcnZlciBwcm9jZXNzb3JzIGhhdmUKK2FuIDgtYnl0ZSBhbGlnbm1lbnQgcmVzdHJpY3Rpb24gZm9yIGhhcmR3YXJlIHdhdGNocG9pbnRzLiBXZSdkIGxpa2UgdG8gYXZvaWQKK2FkZGluZyBzcGVjaWFsIGNhc2VzIHRvIEdEQiBiYXNlZCBvbiB3aGF0IGl0IHNlZXMgaW4gQVVYVi4KKworU2luY2Ugd2UncmUgYXQgaXQsIHdlIGFkZGVkIG90aGVyIHVzZWZ1bCBpbmZvIHRoYXQgdGhlIGtlcm5lbCBjYW4gcmV0dXJuIHRvCitHREI6IHRoaXMgcXVlcnkgd2lsbCByZXR1cm4gdGhlIG51bWJlciBvZiBoYXJkd2FyZSBicmVha3BvaW50cywgaGFyZHdhcmUKK3dhdGNocG9pbnRzIGFuZCB3aGV0aGVyIGl0IHN1cHBvcnRzIGEgcmFuZ2Ugb2YgYWRkcmVzc2VzIGFuZCBhIGNvbmRpdGlvbi4KK1RoZSBxdWVyeSB3aWxsIGZpbGwgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgcHJvdmlkZWQgYnkgdGhlIHJlcXVlc3RpbmcgcHJvY2VzczoKKworc3RydWN0IHBwY19kZWJ1Z19pbmZvIHsKKyAgICAgICB1bml0MzJfdCB2ZXJzaW9uOworICAgICAgIHVuaXQzMl90IG51bV9pbnN0cnVjdGlvbl9icHM7CisgICAgICAgdW5pdDMyX3QgbnVtX2RhdGFfYnBzOworICAgICAgIHVuaXQzMl90IG51bV9jb25kaXRpb25fcmVnczsKKyAgICAgICB1bml0MzJfdCBkYXRhX2JwX2FsaWdubWVudDsKKyAgICAgICB1bml0MzJfdCBzaXplb2ZfY29uZGl0aW9uOyAvKiBzaXplIG9mIHRoZSBEVkMgcmVnaXN0ZXIgKi8KKyAgICAgICB1aW50NjRfdCBmZWF0dXJlczsgLyogYml0bWFzayBvZiB0aGUgaW5kaXZpZHVhbCBmbGFncyAqLworfTsKKworZmVhdHVyZXMgd2lsbCBoYXZlIGJpdHMgaW5kaWNhdGluZyB3aGV0aGVyIHRoZXJlIGlzIHN1cHBvcnQgZm9yOgorCisjZGVmaW5lIFBQQ19ERUJVR19GRUFUVVJFX0lOU05fQlBfUkFOR0UJCTB4MQorI2RlZmluZSBQUENfREVCVUdfRkVBVFVSRV9JTlNOX0JQX01BU0sJCTB4MgorI2RlZmluZSBQUENfREVCVUdfRkVBVFVSRV9EQVRBX0JQX1JBTkdFCQkweDQKKyNkZWZpbmUgUFBDX0RFQlVHX0ZFQVRVUkVfREFUQV9CUF9NQVNLCQkweDgKKworMi4gUFRSQUNFX1NFVEhXREVCVUcKKworU2V0cyBhIGhhcmR3YXJlIGJyZWFrcG9pbnQgb3Igd2F0Y2hwb2ludCwgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBzdHJ1Y3R1cmU6CisKK3N0cnVjdCBwcGNfaHdfYnJlYWtwb2ludCB7CisgICAgICAgIHVpbnQzMl90IHZlcnNpb247CisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfRVhFQ1VURSAgMHgxCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUkVBRCAgICAgMHgyCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfV1JJVEUgICAgMHg0CisgICAgICAgIHVpbnQzMl90IHRyaWdnZXJfdHlwZTsgICAgICAgLyogb25seSBzb21lIGNvbWJpbmF0aW9ucyBhbGxvd2VkICovCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX01PREVfRVhBQ1QgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfTU9ERV9SQU5HRV9JTkNMVVNJVkUgICAgIDB4MQorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9NT0RFX1JBTkdFX0VYQ0xVU0lWRSAgICAgMHgyCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX01PREVfTUFTSyAgICAgICAgICAgICAgICAweDMKKyAgICAgICAgdWludDMyX3QgYWRkcl9tb2RlOyAgICAgICAgICAvKiBhZGRyZXNzIG1hdGNoIG1vZGUgKi8KKworI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fTU9ERSAgIDB4MworI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fTk9ORSAgIDB4MAorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQU5EICAgIDB4MQorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fRVhBQ1QgIDB4MQkvKiBkaWZmZXJlbnQgbmFtZSBmb3IgdGhlIHNhbWUgdGhpbmcgYXMgYWJvdmUgKi8KKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX09SICAgICAweDIKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0FORF9PUiAweDMKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0JFX0FMTCAweDAwZmYwMDAwCS8qIGJ5dGUgZW5hYmxlIGJpdHMgKi8KKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0JFKG4pICAoMTw8KChuKSsxNikpCisgICAgICAgIHVpbnQzMl90IGNvbmRpdGlvbl9tb2RlOyAgICAgLyogYnJlYWsvd2F0Y2hwb2ludCBjb25kaXRpb24gZmxhZ3MgKi8KKworICAgICAgICB1aW50NjRfdCBhZGRyOworICAgICAgICB1aW50NjRfdCBhZGRyMjsKKyAgICAgICAgdWludDY0X3QgY29uZGl0aW9uX3ZhbHVlOworfTsKKworQSByZXF1ZXN0IHNwZWNpZmllcyBvbmUgZXZlbnQsIG5vdCBuZWNlc3NhcmlseSBqdXN0IG9uZSByZWdpc3RlciB0byBiZSBzZXQuCitGb3IgaW5zdGFuY2UsIGlmIHRoZSByZXF1ZXN0IGlzIGZvciBhIHdhdGNocG9pbnQgd2l0aCBhIGNvbmRpdGlvbiwgYm90aCB0aGUKK0RBQyBhbmQgRFZDIHJlZ2lzdGVycyB3aWxsIGJlIHNldCBpbiB0aGUgc2FtZSByZXF1ZXN0LgorCitXaXRoIHRoaXMgR0RCIGNhbiBhc2sgZm9yIGFsbCBraW5kcyBvZiBoYXJkd2FyZSBicmVha3BvaW50cyBhbmQgd2F0Y2hwb2ludHMKK3RoYXQgdGhlIEJvb2tFIHN1cHBvcnRzLiBDT01FRlJPTSBicmVha3BvaW50cyBhdmFpbGFibGUgaW4gc2VydmVyIHByb2Nlc3NvcnMKK2FyZSBub3QgY29udGVtcGxhdGVkLCBidXQgdGhhdCBpcyBvdXQgb2YgdGhlIHNjb3BlIG9mIHRoaXMgd29yay4KKworcHRyYWNlIHdpbGwgcmV0dXJuIGFuIGludGVnZXIgKGhhbmRsZSkgdW5pcXVlbHkgaWRlbnRpZnlpbmcgdGhlIGJyZWFrcG9pbnQgb3IKK3dhdGNocG9pbnQganVzdCBjcmVhdGVkLiBUaGlzIGludGVnZXIgd2lsbCBiZSB1c2VkIGluIHRoZSBQVFJBQ0VfREVMSFdERUJVRworcmVxdWVzdCB0byBhc2sgZm9yIGl0cyByZW1vdmFsLiBSZXR1cm4gLUVOT1NQQyBpZiB0aGUgcmVxdWVzdGVkIGJyZWFrcG9pbnQKK2Nhbid0IGJlIGFsbG9jYXRlZCBvbiB0aGUgcmVnaXN0ZXJzLgorCitTb21lIGV4YW1wbGVzIG9mIHVzaW5nIHRoZSBzdHJ1Y3R1cmUgdG86CisKKy0gc2V0IGEgYnJlYWtwb2ludCBpbiB0aGUgZmlyc3QgYnJlYWtwb2ludCByZWdpc3RlcgorCisgIHAudmVyc2lvbiAgICAgICAgID0gUFBDX0RFQlVHX0NVUlJFTlRfVkVSU0lPTjsKKyAgcC50cmlnZ2VyX3R5cGUgICAgPSBQUENfQlJFQUtQT0lOVF9UUklHR0VSX0VYRUNVVEU7CisgIHAuYWRkcl9tb2RlICAgICAgID0gUFBDX0JSRUFLUE9JTlRfTU9ERV9FWEFDVDsKKyAgcC5jb25kaXRpb25fbW9kZSAgPSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fTk9ORTsKKyAgcC5hZGRyICAgICAgICAgICAgPSAodWludDY0X3QpIGFkZHJlc3M7CisgIHAuYWRkcjIgICAgICAgICAgID0gMDsKKyAgcC5jb25kaXRpb25fdmFsdWUgPSAwOworCistIHNldCBhIHdhdGNocG9pbnQgd2hpY2ggdHJpZ2dlcnMgb24gcmVhZHMgaW4gdGhlIHNlY29uZCB3YXRjaHBvaW50IHJlZ2lzdGVyCisKKyAgcC52ZXJzaW9uICAgICAgICAgPSBQUENfREVCVUdfQ1VSUkVOVF9WRVJTSU9OOworICBwLnRyaWdnZXJfdHlwZSAgICA9IFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUkVBRDsKKyAgcC5hZGRyX21vZGUgICAgICAgPSBQUENfQlJFQUtQT0lOVF9NT0RFX0VYQUNUOworICBwLmNvbmRpdGlvbl9tb2RlICA9IFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9OT05FOworICBwLmFkZHIgICAgICAgICAgICA9ICh1aW50NjRfdCkgYWRkcmVzczsKKyAgcC5hZGRyMiAgICAgICAgICAgPSAwOworICBwLmNvbmRpdGlvbl92YWx1ZSA9IDA7CisKKy0gc2V0IGEgd2F0Y2hwb2ludCB3aGljaCB0cmlnZ2VycyBvbmx5IHdpdGggYSBzcGVjaWZpYyB2YWx1ZQorCisgIHAudmVyc2lvbiAgICAgICAgID0gUFBDX0RFQlVHX0NVUlJFTlRfVkVSU0lPTjsKKyAgcC50cmlnZ2VyX3R5cGUgICAgPSBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JFQUQ7CisgIHAuYWRkcl9tb2RlICAgICAgID0gUFBDX0JSRUFLUE9JTlRfTU9ERV9FWEFDVDsKKyAgcC5jb25kaXRpb25fbW9kZSAgPSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQU5EIHwgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0JFX0FMTDsKKyAgcC5hZGRyICAgICAgICAgICAgPSAodWludDY0X3QpIGFkZHJlc3M7CisgIHAuYWRkcjIgICAgICAgICAgID0gMDsKKyAgcC5jb25kaXRpb25fdmFsdWUgPSAodWludDY0X3QpIGNvbmRpdGlvbjsKKworLSBzZXQgYSByYW5nZWQgaGFyZHdhcmUgYnJlYWtwb2ludAorCisgIHAudmVyc2lvbiAgICAgICAgID0gUFBDX0RFQlVHX0NVUlJFTlRfVkVSU0lPTjsKKyAgcC50cmlnZ2VyX3R5cGUgICAgPSBQUENfQlJFQUtQT0lOVF9UUklHR0VSX0VYRUNVVEU7CisgIHAuYWRkcl9tb2RlICAgICAgID0gUFBDX0JSRUFLUE9JTlRfTU9ERV9SQU5HRV9JTkNMVVNJVkU7CisgIHAuY29uZGl0aW9uX21vZGUgID0gUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX05PTkU7CisgIHAuYWRkciAgICAgICAgICAgID0gKHVpbnQ2NF90KSBiZWdpbl9yYW5nZTsKKyAgcC5hZGRyMiAgICAgICAgICAgPSAodWludDY0X3QpIGVuZF9yYW5nZTsKKyAgcC5jb25kaXRpb25fdmFsdWUgPSAwOworCiszLiBQVFJBQ0VfREVMSFdERUJVRworCitUYWtlcyBhbiBpbnRlZ2VyIHdoaWNoIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgYnJlYWtwb2ludCBvciB3YXRjaHBvaW50CisoaS5lLiwgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gUFRSQUNFX1NFVEhXREVCVUcpLCBhbmQgZGVsZXRlcyB0aGUKK2NvcnJlc3BvbmRpbmcgYnJlYWtwb2ludCBvciB3YXRjaHBvaW50Li4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vczM5MC9Db21tb25JTyBiL0RvY3VtZW50YXRpb24vczM5MC9Db21tb25JTwppbmRleCAzMzkyMDdkLi5kMzc4Y2JhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3MzOTAvQ29tbW9uSU8KKysrIGIvRG9jdW1lbnRhdGlvbi9zMzkwL0NvbW1vbklPCkBAIC04Nyw2ICs4NywxMiBAQAogICBjb21wYXRpYmlsaXR5LCBieSB0aGUgZGV2aWNlIG51bWJlciBpbiBoZXhhZGVjaW1hbCAoMHhhYmNkIG9yIGFiY2QpLiBEZXZpY2UKICAgbnVtYmVycyBnaXZlbiBhcyAweGFiY2Qgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyAwLjAuYWJjZC4KIAorKiAvcHJvYy9jaW9fc2V0dGxlCisKKyAgQSB3cml0ZSByZXF1ZXN0IHRvIHRoaXMgZmlsZSBpcyBibG9ja2VkIHVudGlsIGFsbCBxdWV1ZWQgY2lvIGFjdGlvbnMgYXJlCisgIGhhbmRsZWQuIFRoaXMgd2lsbCBhbGxvdyB1c2Vyc3BhY2UgdG8gd2FpdCBmb3IgcGVuZGluZyB3b3JrIGFmZmVjdGluZworICBkZXZpY2UgYXZhaWxhYmlsaXR5IGFmdGVyIGNoYW5naW5nIGNpb19pZ25vcmUgb3IgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24uCisKICogRm9yIHNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIHByZXNlbnQgaW4gdGhlIC9wcm9jIGZpbGVzeXN0ZW0gaW4gMi40IChuYW1lbHksCiAgIC9wcm9jL3N1YmNoYW5uZWxzIGFuZCAvcHJvYy9jaHBpZHMpLCBzZWUgZHJpdmVyLW1vZGVsLnR4dC4KICAgSW5mb3JtYXRpb24gZm9ybWVybHkgaW4gL3Byb2MvaXJxX2NvdW50IGlzIG5vdyBpbiAvcHJvYy9pbnRlcnJ1cHRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwL2RyaXZlci1tb2RlbC50eHQgYi9Eb2N1bWVudGF0aW9uL3MzOTAvZHJpdmVyLW1vZGVsLnR4dAppbmRleCBiZGU0NzNkLi5lZDI2NWNmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3MzOTAvZHJpdmVyLW1vZGVsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvZHJpdmVyLW1vZGVsLnR4dApAQCAtMjIzLDggKzIyMyw4IEBACiBwcml2YXRlIGRhdGEuCiAKIFRvIGltcGxlbWVudCBhIGNjd2dyb3VwIGRyaXZlciwgcGxlYXNlIHJlZmVyIHRvIGluY2x1ZGUvYXNtL2Njd2dyb3VwLmguIEtlZXAgaW4KLW1pbmQgdGhhdCBtb3N0IGRyaXZlcnMgd2lsbCBuZWVkIHRvIGltcGxlbWVudCBib3RoIGEgY2N3Z3JvdXAgYW5kIGEgY2N3IGRyaXZlcgotKHVubGVzcyB5b3UgaGF2ZSBhIG1ldGEgY2N3IGRyaXZlciwgbGlrZSBjdTMwODggZm9yIGxjcyBhbmQgY3RjKS4KK21pbmQgdGhhdCBtb3N0IGRyaXZlcnMgd2lsbCBuZWVkIHRvIGltcGxlbWVudCBib3RoIGEgY2N3Z3JvdXAgYW5kIGEgY2N3Citkcml2ZXIuCiAKIAogMi4gQ2hhbm5lbCBwYXRocwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZF9zYXMgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkX3NhcwppbmRleCAxN2ZmYTA2Li4zMDAyMzU2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkX3NhcworKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkX3NhcwpAQCAtMSwzICsxLDE5IEBACisxIFJlbGVhc2UgRGF0ZSAgICA6IFRodXIuICBPY3QgMjksIDIwMDkgMDk6MTI6NDUgUFNUIDIwMDkgLQorCQkJKGVtYWlsZC1pZDptZWdhcmFpZGxpbnV4QGxzaS5jb20pCisJCQlCbyBZYW5nCisKKzIgQ3VycmVudCBWZXJzaW9uIDogMDAuMDAuMDQuMTcuMS1yYzEKKzMgT2xkZXIgVmVyc2lvbiAgIDogMDAuMDAuMDQuMTIKKworMS4JQWRkIHRoZSBwYWRfMCBpbiBtZmkgZnJhbWUgc3RydWN0dXJlIHRvIDAgdG8gZml4IHRoZQorCWNvbnRleHQgdmFsdWUgbGFyZ2VyIHRoYW4gMzJiaXQgdmFsdWUgaXNzdWUuCisKKzIuCUFkZCB0aGUgbG9naWMgZHJpdmUgbGlzdCB0byB0aGUgZHJpdmVyLiAgRHJpdmVyIHdpbGwKKwlrZWVwIHRoZSBsb2dpYyBkcml2ZSBsaXN0IGludGVybmFsIGFmdGVyIGRyaXZlciBsb2FkLgorCiszLglkcml2ZXIgZml4ZWQgdGhlIGRldmljZSB1cGRhdGUgaXNzdWUgYWZ0ZXIgZ2V0IHRoZSBBRU4KKwlQRCBkZWxldGUvQURELCBMRCBhZGQvZGVsZXRlIGZyb20gRlcuCisKIDEgUmVsZWFzZSBEYXRlICAgIDogVHVlcy4gIEp1bHkgMjgsIDIwMDkgMTA6MTI6NDUgUFNUIDIwMDkgLQogCQkJKGVtYWlsZC1pZDptZWdhcmFpZGxpbnV4QGxzaS5jb20pCiAJCQlCbyBZYW5nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CmluZGV4IDg5MjM1OTcuLjMzZGY4MmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CkBAIC00ODIsNiArNDgyLDkgQEAKIAogICAgIHJlZmVyZW5jZV9yYXRlCS0gcmVmZXJlbmNlIHNhbXBsZSByYXRlLCA0NDEwMCBvciA0ODAwMCAoZGVmYXVsdCkKICAgICBtdWx0aXBsZQkJLSBtdWx0aXBsZSB0byByZWYuIHNhbXBsZSByYXRlLCAxIG9yIDIgKGRlZmF1bHQpCisgICAgc3Vic3lzdGVtCQktIG92ZXJyaWRlIHRoZSBQQ0kgU1NJRCBmb3IgcHJvYmluZzsgdGhlIHZhbHVlCisJCQkgIGNvbnNpc3RzIG9mIFNTVklEIDw8IDE2IHwgU1NESUQuICBUaGUgZGVmYXVsdCBpcworCQkJICB6ZXJvLCB3aGljaCBtZWFucyBubyBvdmVycmlkZS4KIAogICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG11bHRpcGxlIGNhcmRzLgogCkBAIC0xMTIzLDYgKzExMjYsMjEgQEAKIAogICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG11bHRpcGxlIGNhcmRzLCBhdXRvcHJvYmUgYW5kIElTQSBQblAuCiAKKyAgTW9kdWxlIHNuZC1qYXp6MTYKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBNZWRpYSBWaXNpb24gSmF6ejE2IGNoaXBzZXQuIFRoZSBjaGlwc2V0IGNvbnNpc3RzIG9mIDMgY2hpcHM6CisgICAgTVZEMTIxNiArIE1WQTQxNiArIE1WQTUxNC4KKworICAgIHBvcnQJLSBwb3J0ICMgZm9yIFNCIERTUCBjaGlwICgweDIxMCwweDIyMCwweDIzMCwweDI0MCwweDI1MCwweDI2MCkKKyAgICBpcnEJCS0gSVJRICMgZm9yIFNCIERTUCBjaGlwICgzLDUsNyw5LDEwLDE1KQorICAgIGRtYTgJLSBETUEgIyBmb3IgU0IgRFNQIGNoaXAgKDEsMykKKyAgICBkbWExNgktIERNQSAjIGZvciBTQiBEU1AgY2hpcCAoNSw3KQorICAgIG1wdV9wb3J0CS0gTVBVLTQwMSBwb3J0ICMgKDB4MzAwLDB4MzEwLDB4MzIwLDB4MzMwKQorICAgIG1wdV9pcnEJLSBNUFUtNDAxIGlycSAjICgyLDMsNSw3KQorCisgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMuCisKICAgTW9kdWxlIHNuZC1rb3JnMTIxMgogICAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE3OTEsNiArMTgwOSwxMyBAQAogCiAgICAgVGhlIHBvd2VyLW1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgogCisgIE1vZHVsZSBzbmQtdWExMDEKKyAgLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciB0aGUgRWRpcm9sIFVBLTEwMSBhdWRpby9NSURJIGludGVyZmFjZS4KKworICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG11bHRpcGxlIGRldmljZXMsIGF1dG9wcm9iZSBhbmQgaG90cGx1Z2dpbmcuCisKICAgTW9kdWxlIHNuZC11c2ItYXVkaW8KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTkyMyw3ICsxOTQ4LDcgQEAKICAgLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgTW9kdWxlIGZvciBzb3VuZCBjYXJkcyBiYXNlZCBvbiB0aGUgQXN1cyBBVjEwMC9BVjIwMCBjaGlwcywKLSAgICBpLmUuLCBYb25hciBEMSwgRFgsIEQyLCBEMlgsIEhEQVYxLjMgKERlbHV4ZSksIEVzc2VuY2UgU1QKKyAgICBpLmUuLCBYb25hciBEMSwgRFgsIEQyLCBEMlgsIERTLCBIREFWMS4zIChEZWx1eGUpLCBFc3NlbmNlIFNUCiAgICAgKERlbHV4ZSkgYW5kIEVzc2VuY2UgU1RYLgogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGFuZCBtdWx0aXBsZSBjYXJkcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQKaW5kZXggZTcyY2VlOS4uMWQzOGIwZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQKQEAgLTEyNCw2ICsxMjQsOCBAQAogICBhc3VzLWE3bQlBU1VTIEE3TQogICBtYWNwcm8JTWFjUHJvIHN1cHBvcnQKICAgbWI1CQlNYWNib29rIDUsMQorICBtYWNtaW5pMwlNYWNtaW5pIDMsMQorICBtYmEyMQkJTWFjYm9vayBBaXIgMiwxCiAgIG1icDMJCU1hY2Jvb2sgUHJvIHJldjMKICAgaW1hYzI0CWlNYWMgMjQnJyB3aXRoIGphY2sgZGV0ZWN0aW9uCiAgIGltYWM5MQlpTWFjIDksMQpAQCAtMjc5LDEzICsyODEsMTYgQEAKICAgbGFwdG9wCUJhc2ljIExhcHRvcCBjb25maWcgKGRlZmF1bHQpCiAgIGhwCQlIUCBTcGFydGFuIGxhcHRvcAogICBocC1kdjY3MzYJSFAgZHY2NzM2CisgIGhwLWY3MDAJSFAgQ29tcGFxIFByZXNhcmlvIEY3MDAKICAgbGVub3ZvLXgyMDAJTGVub3ZvIFgyMDAgbGFwdG9wCisgIHRvc2hpYmEJVG9zaGliYSBTYXRlbGxpdGUgTTMwMAogCiBDb25leGFudCA1MDY2CiA9PT09PT09PT09PT09CiAgIGxhcHRvcAlCYXNpYyBMYXB0b3AgY29uZmlnIChkZWZhdWx0KQogICBkZWxsLWxhcHRvcAlEZWxsIGxhcHRvcHMKICAgb2xwYy14by0xXzUJT0xQQyBYTyAxLjUKKyAgaWRlYXBhZCAgICAgICBMZW5vdm8gSWRlYVBhZCBVMTUwCiAKIFNUQUM5MjAwCiA9PT09PT09PQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby50eHQKaW5kZXggNjMyNWJlYy4uZjRkZDNiZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0CkBAIC00NTIsNiArNDUyLDMzIEBACiBzeXNmcyBlbnRyaWVzLCBhbmQgdGhlIGxpbmVzIGFmdGVyIGBbaGludF1gIGFyZSBwYXJzZWQgYXMgYGhpbnRzYAogc3lzZnMgZW50cmllcywgcmVzcGVjdGl2ZWx5LgogCitBbm90aGVyIGV4YW1wbGUgdG8gb3ZlcnJpZGUgdGhlIGNvZGVjIHZlbmRvciBpZCBmcm9tIDB4MTIzNDU2NzggdG8KKzB4ZGVhZGJlZWYgaXMgbGlrZSBiZWxvdzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBbY29kZWNdCisgIDB4MTIzNDU2NzggMHhhYmNkMTIzNCAyCisKKyAgW3ZlbmRvcl9pZF0KKyAgMHhkZWFkYmVlZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoZSBzaW1pbGFyIHdheSwgeW91IGNhbiBvdmVycmlkZSB0aGUgY29kZWMgc3Vic3lzdGVtX2lkIHZpYQorYFtzdWJzeXN0ZW1faWRdYCwgdGhlIHJldmlzaW9uIGlkIHZpYSBgW3JldmlzaW9uX2lkXWAgbGluZS4KK0Fsc28sIHRoZSBjb2RlYyBjaGlwIG5hbWUgY2FuIGJlIHJld3JpdHRlbiB2aWEgYFtjaGlwX25hbWVdYCBsaW5lLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFtjb2RlY10KKyAgMHgxMjM0NTY3OCAweGFiY2QxMjM0IDIKKworICBbc3Vic3lzdGVtX2lkXQorICAweGZmZmYxMTExCisKKyAgW3JldmlzaW9uX2lkXQorICAweDEwCisKKyAgW2NoaXBfbmFtZV0KKyAgTXktb3duIE5FV1MtMDAwMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFRoZSBoZC1hdWRpbyBkcml2ZXIgcmVhZHMgdGhlIGZpbGUgdmlhIHJlcXVlc3RfZmlybXdhcmUoKS4gIFRodXMsCiBhIHBhdGNoIGZpbGUgaGFzIHRvIGJlIGxvY2F0ZWQgb24gdGhlIGFwcHJvcHJpYXRlIGZpcm13YXJlIHBhdGgsCiB0eXBpY2FsbHksIC9saWIvZmlybXdhcmUuICBGb3IgZXhhbXBsZSwgd2hlbiB5b3UgcGFzcyB0aGUgb3B0aW9uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dAppbmRleCA2YTVhNTc5Li5mMWY4MWFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQKQEAgLTIzOCwxMSArMjM4LDEwIEBACiAKIFlvdSBuZWVkIHZlcnkgZmV3IHRoaW5ncyB0byBnZXQgdGhlIHN5c2NhbGxzIHRyYWNpbmcgaW4gYW4gYXJjaC4KIAorLSBTdXBwb3J0IEhBVkVfQVJDSF9UUkFDRUhPT0sgKHNlZSBhcmNoL0tjb25maWcpLgogLSBIYXZlIGEgTlJfc3lzY2FsbHMgdmFyaWFibGUgaW4gPGFzbS91bmlzdGQuaD4gdGhhdCBwcm92aWRlcyB0aGUgbnVtYmVyCiAgIG9mIHN5c2NhbGxzIHN1cHBvcnRlZCBieSB0aGUgYXJjaC4KLS0gSW1wbGVtZW50IGFyY2hfc3lzY2FsbF9hZGRyKCkgdGhhdCByZXNvbHZlcyBhIHN5c2NhbGwgYWRkcmVzcyBmcm9tIGEKLSAgc3lzY2FsbCBudW1iZXIuCi0tIFN1cHBvcnQgdGhlIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQgdGhyZWFkIGZsYWdzCistIFN1cHBvcnQgdGhlIFRJRl9TWVNDQUxMX1RSQUNFUE9JTlQgdGhyZWFkIGZsYWdzLgogLSBQdXQgdGhlIHRyYWNlX3N5c19lbnRlcigpIGFuZCB0cmFjZV9zeXNfZXhpdCgpIHRyYWNlcG9pbnRzIGNhbGxzIGZyb20gcHRyYWNlCiAgIGluIHRoZSBwdHJhY2Ugc3lzY2FsbHMgdHJhY2luZyBwYXRoLgogLSBUYWcgdGhpcyBhcmNoIGFzIEhBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2Uva3Byb2JldHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQKaW5kZXggNDdhYWJlZS4uYTkxMDBiMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQKQEAgLTI0LDYgKzI0LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgcFs6W0dSUC9dRVZFTlRdIFNZTUJPTFsrb2Zmc118TUVNQUREUiBbRkVUQ0hBUkdTXQk6IFNldCBhIHByb2JlCiAgIHJbOltHUlAvXUVWRU5UXSBTWU1CT0xbKzBdIFtGRVRDSEFSR1NdCQk6IFNldCBhIHJldHVybiBwcm9iZQorICAtOltHUlAvXUVWRU5UCQkJCQkJOiBDbGVhciBhIHByb2JlCiAKICBHUlAJCTogR3JvdXAgbmFtZS4gSWYgb21pdHRlZCwgdXNlICJrcHJvYmVzIiBmb3IgaXQuCiAgRVZFTlQJCTogRXZlbnQgbmFtZS4gSWYgb21pdHRlZCwgdGhlIGV2ZW50IG5hbWUgaXMgZ2VuZXJhdGVkCkBAIC0zNywxNSArMzgsMTIgQEAKICAgQFNZTVsrfC1vZmZzXQk6IEZldGNoIG1lbW9yeSBhdCBTWU0gK3wtIG9mZnMgKFNZTSBzaG91bGQgYmUgYSBkYXRhIHN5bWJvbCkKICAgJHN0YWNrTgk6IEZldGNoIE50aCBlbnRyeSBvZiBzdGFjayAoTiA+PSAwKQogICAkc3RhY2sJOiBGZXRjaCBzdGFjayBhZGRyZXNzLgotICAkYXJnTgkJOiBGZXRjaCBmdW5jdGlvbiBhcmd1bWVudC4gKE4gPj0gMCkoKikKLSAgJHJldHZhbAk6IEZldGNoIHJldHVybiB2YWx1ZS4oKiopCi0gICt8LW9mZnMoRkVUQ0hBUkcpIDogRmV0Y2ggbWVtb3J5IGF0IEZFVENIQVJHICt8LSBvZmZzIGFkZHJlc3MuKCoqKikKKyAgJHJldHZhbAk6IEZldGNoIHJldHVybiB2YWx1ZS4oKikKKyAgK3wtb2ZmcyhGRVRDSEFSRykgOiBGZXRjaCBtZW1vcnkgYXQgRkVUQ0hBUkcgK3wtIG9mZnMgYWRkcmVzcy4oKiopCiAgIE5BTUU9RkVUQ0hBUkc6IFNldCBOQU1FIGFzIHRoZSBhcmd1bWVudCBuYW1lIG9mIEZFVENIQVJHLgogCi0gICgqKSBhTiBtYXkgbm90IGNvcnJlY3Qgb24gYXNtbGlua2FnZWQgZnVuY3Rpb25zIGFuZCBhdCB0aGUgbWlkZGxlIG9mCi0gICAgICBmdW5jdGlvbiBib2R5LgotICAoKiopIG9ubHkgZm9yIHJldHVybiBwcm9iZS4KLSAgKCoqKikgdGhpcyBpcyB1c2VmdWwgZm9yIGZldGNoaW5nIGEgZmllbGQgb2YgZGF0YSBzdHJ1Y3R1cmVzLgorICAoKikgb25seSBmb3IgcmV0dXJuIHByb2JlLgorICAoKiopIHRoaXMgaXMgdXNlZnVsIGZvciBmZXRjaGluZyBhIGZpZWxkIG9mIGRhdGEgc3RydWN0dXJlcy4KIAogCiBQZXItUHJvYmUgRXZlbnQgRmlsdGVyaW5nCkBAIC04MiwxMyArODAsMTYgQEAKIFRvIGFkZCBhIHByb2JlIGFzIGEgbmV3IGV2ZW50LCB3cml0ZSBhIG5ldyBkZWZpbml0aW9uIHRvIGtwcm9iZV9ldmVudHMKIGFzIGJlbG93LgogCi0gIGVjaG8gcDpteXByb2JlIGRvX3N5c19vcGVuIGRmZD0kYXJnMCBmaWxlbmFtZT0kYXJnMSBmbGFncz0kYXJnMiBtb2RlPSRhcmczID4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9rcHJvYmVfZXZlbnRzCisgIGVjaG8gJ3A6bXlwcm9iZSBkb19zeXNfb3BlbiBkZmQ9JWF4IGZpbGVuYW1lPSVkeCBmbGFncz0lY3ggbW9kZT0rNCgkc3RhY2spJyA+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcva3Byb2JlX2V2ZW50cwogCiAgVGhpcyBzZXRzIGEga3Byb2JlIG9uIHRoZSB0b3Agb2YgZG9fc3lzX29wZW4oKSBmdW5jdGlvbiB3aXRoIHJlY29yZGluZwotMXN0IHRvIDR0aCBhcmd1bWVudHMgYXMgIm15cHJvYmUiIGV2ZW50LiBBcyB0aGlzIGV4YW1wbGUgc2hvd3MsIHVzZXJzIGNhbgotY2hvb3NlIG1vcmUgZmFtaWxpYXIgbmFtZXMgZm9yIGVhY2ggYXJndW1lbnRzLgorMXN0IHRvIDR0aCBhcmd1bWVudHMgYXMgIm15cHJvYmUiIGV2ZW50LiBOb3RlLCB3aGljaCByZWdpc3Rlci9zdGFjayBlbnRyeSBpcworYXNzaWduZWQgdG8gZWFjaCBmdW5jdGlvbiBhcmd1bWVudCBkZXBlbmRzIG9uIGFyY2gtc3BlY2lmaWMgQUJJLiBJZiB5b3UgdW5zdXJlCit0aGUgQUJJLCBwbGVhc2UgdHJ5IHRvIHVzZSBwcm9iZSBzdWJjb21tYW5kIG9mIHBlcmYtdG9vbHMgKHlvdSBjYW4gZmluZCBpdAordW5kZXIgdG9vbHMvcGVyZi8pLgorQXMgdGhpcyBleGFtcGxlIHNob3dzLCB1c2VycyBjYW4gY2hvb3NlIG1vcmUgZmFtaWxpYXIgbmFtZXMgZm9yIGVhY2ggYXJndW1lbnRzLgogCi0gIGVjaG8gcjpteXJldHByb2JlIGRvX3N5c19vcGVuICRyZXR2YWwgPj4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9rcHJvYmVfZXZlbnRzCisgIGVjaG8gJ3I6bXlyZXRwcm9iZSBkb19zeXNfb3BlbiAkcmV0dmFsJyA+PiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2twcm9iZV9ldmVudHMKIAogIFRoaXMgc2V0cyBhIGtyZXRwcm9iZSBvbiB0aGUgcmV0dXJuIHBvaW50IG9mIGRvX3N5c19vcGVuKCkgZnVuY3Rpb24gd2l0aAogcmVjb3JkaW5nIHJldHVybiB2YWx1ZSBhcyAibXlyZXRwcm9iZSIgZXZlbnQuCkBAIC05NywyMyArOTgsMjQgQEAKIAogICBjYXQgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMva3Byb2Jlcy9teXByb2JlL2Zvcm1hdAogbmFtZTogbXlwcm9iZQotSUQ6IDc1CitJRDogNzgwCiBmb3JtYXQ6Ci0JZmllbGQ6dW5zaWduZWQgc2hvcnQgY29tbW9uX3R5cGU7CW9mZnNldDowOwlzaXplOjI7Ci0JZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fZmxhZ3M7CW9mZnNldDoyOwlzaXplOjE7Ci0JZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fcHJlZW1wdF9jb3VudDsJb2Zmc2V0OjM7CXNpemU6MTsKLQlmaWVsZDppbnQgY29tbW9uX3BpZDsJb2Zmc2V0OjQ7CXNpemU6NDsKLQlmaWVsZDppbnQgY29tbW9uX3RnaWQ7CW9mZnNldDo4OwlzaXplOjQ7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIHNob3J0IGNvbW1vbl90eXBlOyAgICAgICBvZmZzZXQ6MDsgICAgICAgc2l6ZToyOyBzaWduZWQ6MDsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fZmxhZ3M7ICAgICAgIG9mZnNldDoyOyAgICAgICBzaXplOjE7IHNpZ25lZDowOworICAgICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9wcmVlbXB0X2NvdW50OyAgICAgICBvZmZzZXQ6Mzsgc2l6ZToxO3NpZ25lZDowOworICAgICAgICBmaWVsZDppbnQgY29tbW9uX3BpZDsgICBvZmZzZXQ6NDsgICAgICAgc2l6ZTo0OyBzaWduZWQ6MTsKKyAgICAgICAgZmllbGQ6aW50IGNvbW1vbl9sb2NrX2RlcHRoOyAgICBvZmZzZXQ6ODsgICAgICAgc2l6ZTo0OyBzaWduZWQ6MTsKIAotCWZpZWxkOiB1bnNpZ25lZCBsb25nIGlwOwlvZmZzZXQ6MTY7dHNpemU6ODsKLQlmaWVsZDogaW50IG5hcmdzOwlvZmZzZXQ6MjQ7dHNpemU6NDsKLQlmaWVsZDogdW5zaWduZWQgbG9uZyBkZmQ7CW9mZnNldDozMjt0c2l6ZTo4OwotCWZpZWxkOiB1bnNpZ25lZCBsb25nIGZpbGVuYW1lOwlvZmZzZXQ6NDA7dHNpemU6ODsKLQlmaWVsZDogdW5zaWduZWQgbG9uZyBmbGFnczsJb2Zmc2V0OjQ4O3RzaXplOjg7Ci0JZmllbGQ6IHVuc2lnbmVkIGxvbmcgbW9kZTsJb2Zmc2V0OjU2O3RzaXplOjg7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgX19wcm9iZV9pcDsgb2Zmc2V0OjEyOyAgICAgIHNpemU6NDsgc2lnbmVkOjA7CisgICAgICAgIGZpZWxkOmludCBfX3Byb2JlX25hcmdzOyAgICAgICAgb2Zmc2V0OjE2OyAgICAgIHNpemU6NDsgc2lnbmVkOjE7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgZGZkOyAgICAgICAgb2Zmc2V0OjIwOyAgICAgIHNpemU6NDsgc2lnbmVkOjA7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgZmlsZW5hbWU7ICAgb2Zmc2V0OjI0OyAgICAgIHNpemU6NDsgc2lnbmVkOjA7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgZmxhZ3M7ICAgICAgb2Zmc2V0OjI4OyAgICAgIHNpemU6NDsgc2lnbmVkOjA7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgbW9kZTsgICAgICAgb2Zmc2V0OjMyOyAgICAgIHNpemU6NDsgc2lnbmVkOjA7CiAKLXByaW50IGZtdDogIiglbHgpIGRmZD0lbHggZmlsZW5hbWU9JWx4IGZsYWdzPSVseCBtb2RlPSVseCIsIFJFQy0+aXAsIFJFQy0+ZGZkLCBSRUMtPmZpbGVuYW1lLCBSRUMtPmZsYWdzLCBSRUMtPm1vZGUKIAorcHJpbnQgZm10OiAiKCVseCkgZGZkPSVseCBmaWxlbmFtZT0lbHggZmxhZ3M9JWx4IG1vZGU9JWx4IiwgUkVDLT5fX3Byb2JlX2lwLAorUkVDLT5kZmQsIFJFQy0+ZmlsZW5hbWUsIFJFQy0+ZmxhZ3MsIFJFQy0+bW9kZQogCiAgWW91IGNhbiBzZWUgdGhhdCB0aGUgZXZlbnQgaGFzIDQgYXJndW1lbnRzIGFzIGluIHRoZSBleHByZXNzaW9ucyB5b3Ugc3BlY2lmaWVkLgogCkBAIC0xMjEsNiArMTIzLDEyIEBACiAKICBUaGlzIGNsZWFycyBhbGwgcHJvYmUgcG9pbnRzLgogCisgT3IsCisKKyAgZWNobyAtOm15cHJvYmUgPj4ga3Byb2JlX2V2ZW50cworCisgVGhpcyBjbGVhcnMgcHJvYmUgcG9pbnRzIHNlbGVjdGl2ZWx5LgorCiAgUmlnaHQgYWZ0ZXIgZGVmaW5pdGlvbiwgZWFjaCBldmVudCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiBGb3IgdHJhY2luZyB0aGVzZQogZXZlbnRzLCB5b3UgbmVlZCB0byBlbmFibGUgaXQuCiAKQEAgLTE0Niw0ICsxNTQsMyBAQAogcmV0dXJucyBmcm9tIFNZTUJPTChlLmcuICJzeXNfb3BlbisweDFiLzB4MWQgPC0gZG9fc3lzX29wZW4iIG1lYW5zIGtlcm5lbAogcmV0dXJucyBmcm9tIGRvX3N5c19vcGVuIHRvIHN5c19vcGVuKzB4MWIpLgogCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NSBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NQppbmRleCA3NTM5ZThmLi4xNmNhMDMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1CkBAIC0yNiwzICsyNiw0IEBACiAgMjUgLT4gQ29tcHJvIFZpZGVvTWF0ZSBFODAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxODU4OmU4MDBdCiAgMjYgLT4gSGF1cHBhdWdlIFdpblRWLUhWUjEyOTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDcwOjg1NTFdCiAgMjcgLT4gTXlnaWNhIFg4NTU4IFBSTyBETUItVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNGYxOjg1NzhdCisgMjggLT4gTEVBRFRFSyBXaW5GYXN0IFB4VFYxMjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDdkOjZmMjJdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKaW5kZXggZmNlMWU3ZS4uYjRhNzY3MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNApAQCAtMTc0LDMgKzE3NCw0IEBACiAxNzMgLT4gWm9saWQgSHlicmlkIFRWIFR1bmVyIFBDSSAgICAgICAgICAgICAgICBbMTEzMToyMDA0XQogMTc0IC0+IEFzdXMgRXVyb3BhIEh5YnJpZCBPRU0gICAgICAgICAgICAgICAgICAgWzEwNDM6NDg0N10KIDE3NSAtPiBMZWFkdGVrIFdpbmZhc3QgRFRWMTAwMFMgICAgICAgICAgICAgICAgIFsxMDdkOjY2NTVdCisxNzYgLT4gQmVob2xkZXIgQmVob2xkVFYgNTA1IFJEUyAgICAgICAgICAgICAgICBbMDAwMDo1MDUxXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lciBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKaW5kZXggZTBkMjk4Zi4uOWIyZTBkZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCkBAIC04MSwzICs4MSw0IEBACiB0dW5lcj04MSAtIFBhcnRzbmljIChEYWV3b28pIFBUSS01TkYwNQogdHVuZXI9ODIgLSBQaGlsaXBzIENVMTIxNkwKIHR1bmVyPTgzIC0gTlhQIFREQTE4MjcxCit0dW5lcj04NCAtIFNvbnkgQlRGLVB4bjAxWgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUudGxnMjMwMCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLnRsZzIzMDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE2Y2NiOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLnRsZzIzMDAKQEAgLTAsMCArMSw0NyBAQAordGxnMjMwMCByZWxlYXNlIG5vdGVzCis9PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIGEgdjRsMi9kdmIgZGV2aWNlIGRyaXZlciBmb3IgdGhlIHRsZzIzMDAgY2hpcC4KKworCitjdXJyZW50IHN0YXR1cworPT09PT09PT09PT09PT0KKwordmlkZW8KKwktIHN1cHBvcnQgbW1hcCBhbmQgcmVhZCgpLihubyBvdmVybGF5KQorCithdWRpbworCS0gVGhlIGRyaXZlciB3aWxsIHJlZ2lzdGVyIGEgQUxTQSBjYXJkIGZvciB0aGUgYXVkaW8gaW5wdXQuCisKK3ZiaQorCS0gV29ya3MgZm9yIGFsbW9zdCBUViBub3Jtcy4KKworZHZiLXQKKwktIHdvcmtzIGZvciBEVkItVAorCitGTQorCS0gV29ya3MgZm9yIHJhZGlvLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RFU1RFRCBBUFBMSUNBVElPTlM6CisKKy1WTEMxLjAuNCB0ZXN0IHRoZSB2aWRlbyBhbmQgZHZiLiBUaGUgR1VJIGlzIGZyaWVuZGx5IHRvIHVzZS4KKworLU1wbGF5ZXIgdGVzdCB0aGUgdmlkZW8uCisKKy1NcGxheWVyIHRlc3QgdGhlIEZNLiBUaGUgbXBsYXllciBzaG91bGQgYmUgY29tcGlsZWQgd2l0aCAtLWVuYWJsZS1yYWRpbyBhbmQKKwkgLS1lbmFibGUtcmFkaW8tY2FwdHVyZS4KKwlUaGUgY29tbWFuZCBydW5zIGFzIHRoaXMoVGhlIGFsc2EgYXVkaW8gcmVnaXN0ZXJzIHRvIGNhcmQgMSk6CisJI21wbGF5ZXIgcmFkaW86Ly8xMDMuNy9jYXB0dXJlLyAtcmFkaW8gYWRldmljZT1odz0xLDA6YXJhdGU9NDgwMDAgXAorCQktcmF3YXVkaW8gcmF0ZT00ODAwMDpjaGFubmVscz0yCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorS05PV04gUFJPQkxFTVM6CithYm91dCBwcmVlbXBoYXNpczoKKwlZb3UgY2FuIHNldCB0aGUgcHJlZW1waGFzaXMgZm9yIHJhZGlvIGJ5IHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKwkjdjRsMi1jdGwgLWQgL2Rldi9yYWRpbzAgLS1zZXQtY3RybD1wcmVfZW1waGFzaXNfc2V0dGluZ3M9MQorCisJInByZV9lbXBoYXNpc19zZXR0aW5ncz0xIiBtZWFucyB0aGF0IHlvdSBzZWxlY3QgdGhlIDUwdXMuIElmIHlvdSB3YW50CisJdG8gc2VsZWN0IHRoZSA3NXVzLCBwbGVhc2UgdXNlICJwcmVfZW1waGFzaXNfc2V0dGluZ3M9MiIKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CmluZGV4IDE4MDBhNjIuLjE4MWI5ZTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CkBAIC00Miw2ICs0Miw3IEBACiBvdjUxOQkJMDQxZTo0MDY3CUNyZWF0aXZlIExpdmUhIENhbSBWaWRlbyBJTSAoVkYwMzUwKQogb3Y1MTkJCTA0MWU6NDA2OAlDcmVhdGl2ZSBMaXZlISBWSVNUQSBWRjA0NzAKIHNwY2E1NjEJCTA0NTg6NzAwNAlHZW5pdXMgVmlkZW9DQU0gRXhwcmVzcyBWMgorc245YzIwMjgJMDQ1ODo3MDA1CUdlbml1cyBTbWFydCAzMDAsIHZlcnNpb24gMgogc3VucGx1cwkJMDQ1ODo3MDA2CUdlbml1cyBEc2MgMS4zIFNtYXJ0CiB6YzN4eAkJMDQ1ODo3MDA3CUdlbml1cyBWaWRlb0NhbSBWMgogemMzeHgJCTA0NTg6NzAwYwlHZW5pdXMgVmlkZW9DYW0gVjMKQEAgLTEwOSw2ICsxMTAsNyBAQAogc3VucGx1cwkJMDRhNTozMDA4CUJlbnEgREMgMTUwMAogc3VucGx1cwkJMDRhNTozMDBhCUJlbnEgREMgMzQxMAogc3BjYTUwMAkJMDRhNTozMDBjCUJlbnEgREMgMTAxNgorYmVucQkJMDRhNTozMDM1CUJlbnEgREMgRTMwMAogZmluZXBpeAkJMDRjYjowMTA0CUZ1amlmaWxtIEZpbmVQaXggNDgwMAogZmluZXBpeAkJMDRjYjowMTA5CUZ1amlmaWxtIEZpbmVQaXggQTIwMgogZmluZXBpeAkJMDRjYjowMTBiCUZ1amlmaWxtIEZpbmVQaXggQTIwMwpAQCAtMTQyLDYgKzE0NCw3IEBACiBzcGNhNTAwCQkwNGZjOjczMzMJUGFsbVBpeERDODUKIHN1bnBsdXMJCTA0ZmM6ZmZmZglQdXJlIERpZ2l0YWxEYWtvdGEKIHNwY2E1MDEJCTA1MDY6MDBkZgkzQ29tIEhvbWVDb25uZWN0IExpdGUKK3N1bnBsdXMJCTA1MmI6MTUwNwlNZWdhcGl4ZWwgNSBQcmV0ZWMgREMtMTAwNwogc3VucGx1cwkJMDUyYjoxNTEzCU1lZ2FwaXggVjQKIHN1bnBsdXMJCTA1MmI6MTgwMwlNZWdhSW1hZ2UgVkkKIHR2ODUzMgkJMDU0NTo4MDhiCVZlbyBTdGluZ3JheQpAQCAtMTUxLDYgKzE1NCw3IEBACiBzdW5wbHVzCQkwNTQ2OjMyNzMJUG9sYXJvaWQgUERDMjAzMAogb3Y1MTkJCTA1NGM6MDE1NAlTb25ueSB0b3k0CiBvdjUxOQkJMDU0YzowMTU1CVNvbm55IHRveTUKK2NwaWExCQkwNTUzOjAwMDIJQ1BJQSBDUGlBICh2ZXJzaW9uMSkgYmFzZWQgY2FtZXJhcwogemMzeHgJCTA1NWY6YzAwNQlNdXN0ZWsgV2NhbTMwMEEKIHNwY2E1MDAJCTA1NWY6YzIwMAlNdXN0ZWsgR3NtYXJ0IDMwMAogc3VucGx1cwkJMDU1ZjpjMjExCUtvd2EgQnM4ODhlIE1pY3JvY2FtZXJhCkBAIC0xODgsOCArMTkyLDcgQEAKIHNwY2E1MDAJCTA2YmU6MDgwMAlPcHRpbWVkaWEKIHN1bnBsdXMJCTA2ZDY6MDAzMQlUcnVzdCA2MTAgTENEIFBvd2VyQ0BtIFpvb20KIHNwY2E1MDYJCTA2ZTE6YTE5MAlBRFMgSW5zdGFudCBWQ0QKLW92NTM0CQkwNmY4OjMwMDIJSGVyY3VsZXMgQmxvZyBXZWJjYW0KLW92NTM0CQkwNmY4OjMwMDMJSGVyY3VsZXMgRHVhbHBpeCBIRCBXZWJsb2cKK292NTM0XzkJCTA2Zjg6MzAwMwlIZXJjdWxlcyBEdWFscGl4IEhEIFdlYmxvZwogc29uaXhqCQkwNmY4OjMwMDQJSGVyY3VsZXMgQ2xhc3NpYyBTaWx2ZXIKIHNvbml4agkJMDZmODozMDA4CUhlcmN1bGVzIERlbHV4ZSBPcHRpY2FsIEdsYXNzCiBwYWM3MzAyCQkwNmY4OjMwMDkJSGVyY3VsZXMgQ2xhc3NpYyBMaW5rCkBAIC0yMDQsNiArMjA3LDcgQEAKIHN1bnBsdXMJCTA3MzM6MzI2MQlDb25jb3JkIDMwNDUgc3BjYTUzNmEKIHN1bnBsdXMJCTA3MzM6MzI4MQlDeWJlcnBpeCBTNTUwVgogc3BjYTUwNgkJMDczNDowNDNiCTNEZU1vbiBVU0IgQ2FwdHVyZSBha2EKK2NwaWExCQkwODEzOjAwMDEJUVgzIGNhbWVyYQogb3Y1MTkJCTA4MTM6MDAwMglEdWFsIE1vZGUgVVNCIENhbWVyYSBQbHVzCiBzcGNhNTAwCQkwODRkOjAwMDMJRC1MaW5rIERTQy0zNTAKIHNwY2E1MDAJCTA4Y2E6MDEwMwlBaXB0ZWsgUG9ja2V0RFYKQEAgLTIyNSw3ICsyMjksOCBAQAogc3VucGx1cwkJMDhjYToyMDYwCUFpcHRlayBQb2NrZXREVjUzMDAKIHR2ODUzMgkJMDkyMzowMTBmCUlDTTUzMiBjYW1zCiBtYXJzCQkwOTNhOjA1MGYJTWFycy1TZW1pIFBjLUNhbWVyYQotbXI5NzMxMGEJMDkzYTowMTBmCVNha2FyIERpZ2l0YWwgbm8uIDc3Mzc5Cittcjk3MzEwYQkwOTNhOjAxMGUJQWxsIGtub3duIENJRiBjYW1zIHdpdGggdGhpcyBJRAorbXI5NzMxMGEJMDkzYTowMTBmCUFsbCBrbm93biBWR0EgY2FtcyB3aXRoIHRoaXMgSUQKIHBhYzIwNwkJMDkzYToyNDYwCVF0ZWMgV2ViY2FtIDEwMAogcGFjMjA3CQkwOTNhOjI0NjEJSFAgV2ViY2FtCiBwYWMyMDcJCTA5M2E6MjQ2MwlQaGlsaXBzIFNQQyAyMjAgTkMKQEAgLTMwMiw2ICszMDcsNyBAQAogc29uaXhqCQkwYzQ1OjYxM2MJU29uaXggUGNjYW0xNjgKIHNvbml4agkJMGM0NTo2MTQzCVNvbml4IFBjY2FtMTY4CiBzb25peGoJCTBjNDU6NjE0OAlEaWdpdHVzIERBLTcwODExL1pTTUMgVVNCIFBDIENhbWVyYSBaUzIxMS9NaWNyb2RpYQorc29uaXhqCQkwYzQ1OjYxNGEJRnJvbnRlY2ggRS1DY2FtIChKSUwtMjIyNSkKIHNuOWMyMHgJCTBjNDU6NjI0MAlQQyBDYW1lcmEgKFNOOUMyMDEgKyBNVDlNMDAxKQogc245YzIweAkJMGM0NTo2MjQyCVBDIENhbWVyYSAoU045QzIwMSArIE1UOU0xMTEpCiBzbjljMjB4CQkwYzQ1OjYyNDgJUEMgQ2FtZXJhIChTTjlDMjAxICsgT1Y5NjU1KQpAQCAtMzI0LDYgKzMzMCwxMCBAQAogc245YzIweAkJMGM0NTo2MmIzCVBDIENhbWVyYSAoU045QzIwMiArIE9WOTY1NSkKIHNuOWMyMHgJCTBjNDU6NjJiYglQQyBDYW1lcmEgKFNOOUMyMDIgKyBPVjc2NjApCiBzbjljMjB4CQkwYzQ1OjYyYmMJUEMgQ2FtZXJhIChTTjlDMjAyICsgSFY3MTMxUikKK3NuOWMyMDI4CTBjNDU6ODAwMQlXaWxkIFBsYW5ldCBEaWdpdGFsIFNweSBDYW1lcmEKK3NuOWMyMDI4CTBjNDU6ODAwMwlTYWthciAjMTExOTksICM2NjM3eCwgIzY3NDgwIGtleWNoYWluIGNhbXMKK3NuOWMyMDI4CTBjNDU6ODAwOAlNaW5pLVNob3R6IG1zLTM1MAorc245YzIwMjgJMGM0NTo4MDBhCVZpdml0YXIgVml2aWNhbSAzMzUwQgogc3VucGx1cwkJMGQ2NDowMzAzCVN1bnBsdXMgRmFzaGlvbkNhbSBEWEcKIG92NTE5CQkwZTk2OmMwMDEJVFJVU1QgMzgwIFVTQjIgU1BBQ0VDQE0KIGV0b21zCQkxMDJjOjYxNTEJUWNhbSBTYW5naGEgQ0lGCkBAIC0zNDEsMTAgKzM1MSwxMSBAQAogdDYxMwkJMTdhMTowMTI4CVRBU0NPUlAgSlBFRyBXZWJjYW0sIE5HUyBDeWNsb3BzCiB2YzAzMngJCTE3ZWY6NDgwMglMZW5vdm8gVmMwMzIzK01JMTMxMF9TT0MKIHBhYzIwNwkJMjAwMTpmMTE1CUQtTGluayBEU0ItQzEyMAotc3E5MDVjCQkyNzcwOjkwNTAJc3E5MDVjCi1zcTkwNWMJCTI3NzA6OTA1YwlEdWFsQ2FtZXJhCi1zcTkwNQkJMjc3MDo5MTIwCUFyZ3VzIERpZ2l0YWwgQ2FtZXJhIERDMTUxMgotc3E5MDVjCQkyNzcwOjkxM2QJc3E5MDVjCitzcTkwNWMJCTI3NzA6OTA1MAlEaXNuZXkgcGl4IG1pY3JvIChDSUYpCitzcTkwNWMJCTI3NzA6OTA1MglEaXNuZXkgcGl4IG1pY3JvIDIgKFZHQSkKK3NxOTA1YwkJMjc3MDo5MDVjCUFsbCAxMSBrbm93biBjYW1lcmFzIHdpdGggdGhpcyBJRAorc3E5MDUJCTI3NzA6OTEyMAlBbGwgMjQga25vd24gY2FtZXJhcyB3aXRoIHRoaXMgSUQKK3NxOTA1YwkJMjc3MDo5MTNkCUFsbCA0IGtub3duIGNhbWVyYXMgd2l0aCB0aGlzIElECiBzcGNhNTAwCQkyODk5OjAxMmMJVG9wdHJvIEluZHVzdHJpYWwKIG92NTE5CQk4MDIwOmVmMDQJb3Y1MTkKIHNwY2E1MDgJCTgwODY6MDExMAlJbnRlbCBFYXN5IFBDIENhbWVyYQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dAppbmRleCA3NGQ2NzdjLi41MTU1NzAwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dApAQCAtNTk5LDk5ICs1OTksMTMgQEAKIHZpZGVvIGJ1ZmZlciBoZWxwZXIgZnVuY3Rpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgdjRsMiBjb3JlIEFQSSBwcm92aWRlcyBhIHN0YW5kYXJkIG1ldGhvZCBmb3IgZGVhbGluZyB3aXRoIHZpZGVvCi1idWZmZXJzLiBUaG9zZSBtZXRob2RzIGFsbG93IGEgZHJpdmVyIHRvIGltcGxlbWVudCByZWFkKCksIG1tYXAoKSBhbmQKLW92ZXJsYXkoKSBvbiBhIGNvbnNpc3RlbnQgd2F5LgorVGhlIHY0bDIgY29yZSBBUEkgcHJvdmlkZXMgYSBzZXQgb2Ygc3RhbmRhcmQgbWV0aG9kcyAoY2FsbGVkICJ2aWRlb2J1ZiIpCitmb3IgZGVhbGluZyB3aXRoIHZpZGVvIGJ1ZmZlcnMuIFRob3NlIG1ldGhvZHMgYWxsb3cgYSBkcml2ZXIgdG8gaW1wbGVtZW50CityZWFkKCksIG1tYXAoKSBhbmQgb3ZlcmxheSgpIGluIGEgY29uc2lzdGVudCB3YXkuICBUaGVyZSBhcmUgY3VycmVudGx5CittZXRob2RzIGZvciB1c2luZyB2aWRlbyBidWZmZXJzIG9uIGRldmljZXMgdGhhdCBzdXBwb3J0cyBETUEgd2l0aAorc2NhdHRlci9nYXRoZXIgbWV0aG9kICh2aWRlb2J1Zi1kbWEtc2cpLCBETUEgd2l0aCBsaW5lYXIgYWNjZXNzCisodmlkZW9idWYtZG1hLWNvbnRpZyksIGFuZCB2bWFsbG9jZWQgYnVmZmVycywgbW9zdGx5IHVzZWQgb24gVVNCIGRyaXZlcnMKKyh2aWRlb2J1Zi12bWFsbG9jKS4KIAotVGhlcmUgYXJlIGN1cnJlbnRseSBtZXRob2RzIGZvciB1c2luZyB2aWRlbyBidWZmZXJzIG9uIGRldmljZXMgdGhhdAotc3VwcG9ydHMgRE1BIHdpdGggc2NhdHRlci9nYXRoZXIgbWV0aG9kICh2aWRlb2J1Zi1kbWEtc2cpLCBETUEgd2l0aAotbGluZWFyIGFjY2VzcyAodmlkZW9idWYtZG1hLWNvbnRpZyksIGFuZCB2bWFsbG9jZWQgYnVmZmVycywgbW9zdGx5Ci11c2VkIG9uIFVTQiBkcml2ZXJzICh2aWRlb2J1Zi12bWFsbG9jKS4KLQotQW55IGRyaXZlciB1c2luZyB2aWRlb2J1ZiBzaG91bGQgcHJvdmlkZSBvcGVyYXRpb25zIChjYWxsYmFja3MpIGZvcgotZm91ciBoYW5kbGVyczoKLQotb3BzLT5idWZfc2V0dXAgICAtIGNhbGN1bGF0ZXMgdGhlIHNpemUgb2YgdGhlIHZpZGVvIGJ1ZmZlcnMgYW5kIGF2b2lkIHRoZXkKLQkJICAgdG8gd2FzdGUgbW9yZSB0aGFuIHNvbWUgbWF4aW11bSBsaW1pdCBvZiBSQU07Ci1vcHMtPmJ1Zl9wcmVwYXJlIC0gZmlsbHMgdGhlIHZpZGVvIGJ1ZmZlciBzdHJ1Y3RzIGFuZCBjYWxscwotCQkgICB2aWRlb2J1Zl9pb2xvY2soKSB0byBhbGxvYyBhbmQgcHJlcGFyZSBtbWFwZWQgbWVtb3J5Owotb3BzLT5idWZfcXVldWUgICAtIGFkdmljZXMgdGhlIGRyaXZlciB0aGF0IGFub3RoZXIgYnVmZmVyIHdlcmUKLQkJICAgcmVxdWVzdGVkIChieSByZWFkKCkgb3IgYnkgUUJVRik7Ci1vcHMtPmJ1Zl9yZWxlYXNlIC0gZnJlZXMgYW55IGJ1ZmZlciB0aGF0IHdlcmUgYWxsb2NhdGVkLgotCi1JbiBvcmRlciB0byB1c2UgaXQsIHRoZSBkcml2ZXIgbmVlZCB0byBoYXZlIGEgY29kZSAoZ2VuZXJhbGx5IGNhbGxlZCBhdAotaW50ZXJydXB0IGNvbnRleHQpIHRoYXQgd2lsbCBwcm9wZXJseSBoYW5kbGUgdGhlIGJ1ZmZlciByZXF1ZXN0IGxpc3RzLAotYW5ub3VuY2luZyB0aGF0IGEgbmV3IGJ1ZmZlciB3ZXJlIGZpbGxlZC4KLQotVGhlIGlycSBoYW5kbGluZyBjb2RlIHNob3VsZCBoYW5kbGUgdGhlIHZpZGVvYnVmIHRhc2sgbGlzdHMsIGluIG9yZGVyCi10byBhZHZpY2UgdmlkZW9idWYgdGhhdCBhIG5ldyBmcmFtZSB3ZXJlIGZpbGxlZCwgaW4gb3JkZXIgdG8gaG9ub3IgdG8gYQotcmVxdWVzdC4gVGhlIGNvZGUgaXMgZ2VuZXJhbGx5IGxpa2UgdGhpcyBvbmU6Ci0JaWYgKGxpc3RfZW1wdHkoJmRtYV9xLT5hY3RpdmUpKQotCQlyZXR1cm47Ci0KLQlidWYgPSBsaXN0X2VudHJ5KGRtYV9xLT5hY3RpdmUubmV4dCwgc3RydWN0IHZidWZmZXIsIHZiLnF1ZXVlKTsKLQotCWlmICghd2FpdHF1ZXVlX2FjdGl2ZSgmYnVmLT52Yi5kb25lKSkKLQkJcmV0dXJuOwotCi0JLyogU29tZSBsb2dpYyB0byBoYW5kbGUgdGhlIGJ1ZiBtYXkgYmUgbmVlZGVkIGhlcmUgKi8KLQotCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKLQlkb19nZXR0aW1lb2ZkYXkoJmJ1Zi0+dmIudHMpOwotCXdha2VfdXAoJmJ1Zi0+dmIuZG9uZSk7Ci0KLVRob3NlIGFyZSB0aGUgdmlkZW9idWZmZXIgZnVuY3Rpb25zIHVzZWQgb24gZHJpdmVycywgaW1wbGVtZW50ZWQgb24KLXZpZGVvYnVmLWNvcmU6Ci0KLS0gVmlkZW9idWYgaW5pdCBmdW5jdGlvbnMKLSAgdmlkZW9idWZfcXVldWVfc2dfaW5pdCgpCi0gICAgICBJbml0aWFsaXplcyB0aGUgdmlkZW9idWYgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlCi0gICAgICBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciB2aWRlb2J1ZiBmdW5jdGlvbiBvbiBkcml2ZXJzIHRoYXQgdXNlcyBETUEKLSAgICAgIFNjYXR0ZXIvR2F0aGVyIGJ1ZmZlcnMuCi0KLSAgdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0Ci0gICAgICBJbml0aWFsaXplcyB0aGUgdmlkZW9idWYgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlCi0gICAgICBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciB2aWRlb2J1ZiBmdW5jdGlvbiBvbiBkcml2ZXJzIHRoYXQgbmVlZCBETUEKLSAgICAgIGNvbnRpZ3VvdXMgYnVmZmVycy4KLQotICB2aWRlb2J1Zl9xdWV1ZV92bWFsbG9jX2luaXQoKQotICAgICAgSW5pdGlhbGl6ZXMgdGhlIHZpZGVvYnVmIGluZnJhc3RydWN0dXJlLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZQotICAgICAgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgdmlkZW9idWYgZnVuY3Rpb24gb24gVVNCIChhbmQgb3RoZXIgZHJpdmVycykKLSAgICAgIHRoYXQgbmVlZCBhIHZtYWxsb2NlZCB0eXBlIG9mIHZpZGVvYnVmLgotCi0tIHZpZGVvYnVmX2lvbG9jaygpCi0gIFByZXBhcmVzIHRoZSB2aWRlb2J1ZiBtZW1vcnkgZm9yIHRoZSBwcm9wZXIgbWV0aG9kIChyZWFkLCBtbWFwLCBvdmVybGF5KS4KLQotLSB2aWRlb2J1Zl9xdWV1ZV9pc19idXN5KCkKLSAgQ2hlY2tzIGlmIGEgdmlkZW9idWYgaXMgc3RyZWFtaW5nLgotCi0tIHZpZGVvYnVmX3F1ZXVlX2NhbmNlbCgpCi0gIFN0b3BzIHZpZGVvIGhhbmRsaW5nLgotCi0tIHZpZGVvYnVmX21tYXBfZnJlZSgpCi0gIGZyZWVzIG1tYXAgYnVmZmVycy4KLQotLSB2aWRlb2J1Zl9zdG9wKCkKLSAgU3RvcHMgdmlkZW8gaGFuZGxpbmcsIGVuZHMgbW1hcCBhbmQgZnJlZXMgbW1hcCBhbmQgb3RoZXIgYnVmZmVycy4KLQotLSBWNEwyIGFwaSBmdW5jdGlvbnMuIFRob3NlIGZ1bmN0aW9ucyBjb3JyZXNwb25kIHRvIFZJRElPQ19mb28gaW9jdGxzOgotICAgdmlkZW9idWZfcmVxYnVmcygpLCB2aWRlb2J1Zl9xdWVyeWJ1ZigpLCB2aWRlb2J1Zl9xYnVmKCksCi0gICB2aWRlb2J1Zl9kcWJ1ZigpLCB2aWRlb2J1Zl9zdHJlYW1vbigpLCB2aWRlb2J1Zl9zdHJlYW1vZmYoKS4KLQotLSBWNEwxIGFwaSBmdW5jdGlvbiAoY29ycmVzcG9uZHMgdG8gVklESU9DTUJVRiBpb2N0bCk6Ci0gICB2aWRlb2J1Zl9jZ21idWYoKQotICAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHByb3ZpZGUgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIFY0TDEKLSAgICAgIEFQSS4KLQotLSBTb21lIGhlbHAgZnVuY3Rpb25zIGZvciByZWFkKCkvcG9sbCgpIG9wZXJhdGlvbnM6Ci0gICB2aWRlb2J1Zl9yZWFkX3N0cmVhbSgpCi0gICAgICBGb3IgY29udGludW91cyBzdHJlYW0gcmVhZCgpCi0gICB2aWRlb2J1Zl9yZWFkX29uZSgpCi0gICAgICBGb3Igc25hcHNob3QgcmVhZCgpCi0gICB2aWRlb2J1Zl9wb2xsX3N0cmVhbSgpCi0gICAgICBwb2xsaW5nIGhlbHAgZnVuY3Rpb24KLQotVGhlIGJldHRlciB3YXkgdG8gdW5kZXJzdGFuZCBpdCBpcyB0byB0YWtlIGEgbG9vayBhdCB2aXZpIGRyaXZlci4gT25lCi1vZiB0aGUgbWFpbiByZWFzb25zIGZvciB2aXZpIGlzIHRvIGJlIGEgdmlkZW9idWYgdXNhZ2UgZXhhbXBsZS4gdGhlCi12aXZpX3RocmVhZF90aWNrKCkgZG9lcyB0aGUgdGFzayB0aGF0IHRoZSBJUlEgY2FsbGJhY2sgd291bGQgZG8gb24gUENJCi1kcml2ZXJzIChvciB0aGUgaXJxIGNhbGxiYWNrIG9uIFVTQikuCitQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvdmlkZW9idWYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93Cit0byB1c2UgdGhlIHZpZGVvYnVmIGxheWVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92aWRlb2J1ZiBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdmlkZW9idWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdhMWY5YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdmlkZW9idWYKQEAgLTAsMCArMSwzNjAgQEAKK0FuIGludHJvZHVjdGlvbiB0byB0aGUgdmlkZW9idWYgbGF5ZXIKK0pvbmF0aGFuIENvcmJldCA8Y29yYmV0QGx3bi5uZXQ+CitDdXJyZW50IGFzIG9mIDIuNi4zMworCitUaGUgdmlkZW9idWYgbGF5ZXIgZnVuY3Rpb25zIGFzIGEgc29ydCBvZiBnbHVlIGxheWVyIGJldHdlZW4gYSBWNEwyIGRyaXZlcgorYW5kIHVzZXIgc3BhY2UuICBJdCBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIGJ1ZmZlcnMgZm9yCit0aGUgc3RvcmFnZSBvZiB2aWRlbyBmcmFtZXMuICBUaGVyZSBpcyBhIHNldCBvZiBmdW5jdGlvbnMgd2hpY2ggY2FuIGJlIHVzZWQKK3RvIGltcGxlbWVudCBtYW55IG9mIHRoZSBzdGFuZGFyZCBQT1NJWCBJL08gc3lzdGVtIGNhbGxzLCBpbmNsdWRpbmcgcmVhZCgpLAorcG9sbCgpLCBhbmQsIGhhcHBpbHksIG1tYXAoKS4gIEFub3RoZXIgc2V0IG9mIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCB0bworaW1wbGVtZW50IHRoZSBidWxrIG9mIHRoZSBWNEwyIGlvY3RsKCkgY2FsbHMgcmVsYXRlZCB0byBzdHJlYW1pbmcgSS9PLAoraW5jbHVkaW5nIGJ1ZmZlciBhbGxvY2F0aW9uLCBxdWV1ZWluZyBhbmQgZGVxdWV1ZWluZywgYW5kIHN0cmVhbWluZworY29udHJvbC4gIFVzaW5nIHZpZGVvYnVmIGltcG9zZXMgYSBmZXcgZGVzaWduIGRlY2lzaW9ucyBvbiB0aGUgZHJpdmVyCithdXRob3IsIGJ1dCB0aGUgcGF5YmFjayBjb21lcyBpbiB0aGUgZm9ybSBvZiByZWR1Y2VkIGNvZGUgaW4gdGhlIGRyaXZlciBhbmQKK2EgY29uc2lzdGVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVjRMMiB1c2VyLXNwYWNlIEFQSS4KKworQnVmZmVyIHR5cGVzCisKK05vdCBhbGwgdmlkZW8gZGV2aWNlcyB1c2UgdGhlIHNhbWUga2luZCBvZiBidWZmZXJzLiAgSW4gZmFjdCwgdGhlcmUgYXJlIChhdAorbGVhc3QpIHRocmVlIGNvbW1vbiB2YXJpYXRpb25zOgorCisgLSBCdWZmZXJzIHdoaWNoIGFyZSBzY2F0dGVyZWQgaW4gYm90aCB0aGUgcGh5c2ljYWwgYW5kIChrZXJuZWwpIHZpcnR1YWwKKyAgIGFkZHJlc3Mgc3BhY2VzLiAgKEFsbW9zdCkgYWxsIHVzZXItc3BhY2UgYnVmZmVycyBhcmUgbGlrZSB0aGlzLCBidXQgaXQKKyAgIG1ha2VzIGdyZWF0IHNlbnNlIHRvIGFsbG9jYXRlIGtlcm5lbC1zcGFjZSBidWZmZXJzIHRoaXMgd2F5IGFzIHdlbGwgd2hlbgorICAgaXQgaXMgcG9zc2libGUuICBVbmZvcnR1bmF0ZWx5LCBpdCBpcyBub3QgYWx3YXlzIHBvc3NpYmxlOyB3b3JraW5nIHdpdGgKKyAgIHRoaXMga2luZCBvZiBidWZmZXIgbm9ybWFsbHkgcmVxdWlyZXMgaGFyZHdhcmUgd2hpY2ggY2FuIGRvCisgICBzY2F0dGVyL2dhdGhlciBETUEgb3BlcmF0aW9ucy4KKworIC0gQnVmZmVycyB3aGljaCBhcmUgcGh5c2ljYWxseSBzY2F0dGVyZWQsIGJ1dCB3aGljaCBhcmUgdmlydHVhbGx5CisgICBjb250aWd1b3VzOyBidWZmZXJzIGFsbG9jYXRlZCB3aXRoIHZtYWxsb2MoKSwgaW4gb3RoZXIgd29yZHMuICBUaGVzZQorICAgYnVmZmVycyBhcmUganVzdCBhcyBoYXJkIHRvIHVzZSBmb3IgRE1BIG9wZXJhdGlvbnMsIGJ1dCB0aGV5IGNhbiBiZQorICAgdXNlZnVsIGluIHNpdHVhdGlvbnMgd2hlcmUgRE1BIGlzIG5vdCBhdmFpbGFibGUgYnV0IHZpcnR1YWxseS1jb250aWd1b3VzCisgICBidWZmZXJzIGFyZSBjb252ZW5pZW50LgorCisgLSBCdWZmZXJzIHdoaWNoIGFyZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMuICBBbGxvY2F0aW9uIG9mIHRoaXMga2luZCBvZgorICAgYnVmZmVyIGNhbiBiZSB1bnJlbGlhYmxlIG9uIGZyYWdtZW50ZWQgc3lzdGVtcywgYnV0IHNpbXBsZXIgRE1BCisgICBjb250cm9sbGVycyBjYW5ub3QgZGVhbCB3aXRoIGFueXRoaW5nIGVsc2UuCisKK1ZpZGVvYnVmIGNhbiB3b3JrIHdpdGggYWxsIHRocmVlIHR5cGVzIG9mIGJ1ZmZlcnMsIGJ1dCB0aGUgZHJpdmVyIGF1dGhvcgorbXVzdCBwaWNrIG9uZSBhdCB0aGUgb3V0c2V0IGFuZCBkZXNpZ24gdGhlIGRyaXZlciBhcm91bmQgdGhhdCBkZWNpc2lvbi4KKworW0l0J3Mgd29ydGggbm90aW5nIHRoYXQgdGhlcmUncyBhIGZvdXJ0aCBraW5kIG9mIGJ1ZmZlcjogIm92ZXJsYXkiIGJ1ZmZlcnMKK3doaWNoIGFyZSBsb2NhdGVkIHdpdGhpbiB0aGUgc3lzdGVtJ3MgdmlkZW8gbWVtb3J5LiAgVGhlIG92ZXJsYXkKK2Z1bmN0aW9uYWxpdHkgaXMgY29uc2lkZXJlZCB0byBiZSBkZXByZWNhdGVkIGZvciBtb3N0IHVzZSwgYnV0IGl0IHN0aWxsCitzaG93cyB1cCBvY2Nhc2lvbmFsbHkgaW4gc3lzdGVtLW9uLWNoaXAgZHJpdmVycyB3aGVyZSB0aGUgcGVyZm9ybWFuY2UKK2JlbmVmaXRzIG1lcml0IHRoZSB1c2Ugb2YgdGhpcyB0ZWNobmlxdWUuICBPdmVybGF5IGJ1ZmZlcnMgY2FuIGJlIGhhbmRsZWQKK2FzIGEgZm9ybSBvZiBzY2F0dGVyZWQgYnVmZmVyLCBidXQgdGhlcmUgYXJlIHZlcnkgZmV3IGltcGxlbWVudGF0aW9ucyBpbgordGhlIGtlcm5lbCBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGlzIHRlY2huaXF1ZSBpcyBjdXJyZW50bHkgYmV5b25kIHRoZQorc2NvcGUgb2YgdGhpcyBkb2N1bWVudC5dCisKK0RhdGEgc3RydWN0dXJlcywgY2FsbGJhY2tzLCBhbmQgaW5pdGlhbGl6YXRpb24KKworRGVwZW5kaW5nIG9uIHdoaWNoIHR5cGUgb2YgYnVmZmVycyBhcmUgYmVpbmcgdXNlZCwgdGhlIGRyaXZlciBzaG91bGQKK2luY2x1ZGUgb25lIG9mIHRoZSBmb2xsb3dpbmcgZmlsZXM6CisKKyAgICA8bWVkaWEvdmlkZW9idWYtZG1hLXNnLmg+CQkvKiBQaHlzaWNhbGx5IHNjYXR0ZXJlZCAqLworICAgIDxtZWRpYS92aWRlb2J1Zi12bWFsbG9jLmg+CQkvKiB2bWFsbG9jKCkgYnVmZmVycwkqLworICAgIDxtZWRpYS92aWRlb2J1Zi1kbWEtY29udGlnLmg+CS8qIFBoeXNpY2FsbHkgY29udGlndW91cyAqLworCitUaGUgZHJpdmVyJ3MgZGF0YSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIFY0TDIgZGV2aWNlIHNob3VsZCBpbmNsdWRlIGEKK3N0cnVjdCB2aWRlb2J1Zl9xdWV1ZSBpbnN0YW5jZSBmb3IgdGhlIG1hbmFnZW1lbnQgb2YgdGhlIGJ1ZmZlciBxdWV1ZSwKK2Fsb25nIHdpdGggYSBsaXN0X2hlYWQgZm9yIHRoZSBxdWV1ZSBvZiBhdmFpbGFibGUgYnVmZmVycy4gIFRoZXJlIHdpbGwgYWxzbworbmVlZCB0byBiZSBhbiBpbnRlcnJ1cHQtc2FmZSBzcGlubG9jayB3aGljaCBpcyB1c2VkIHRvIHByb3RlY3QgKGF0IGxlYXN0KQordGhlIHF1ZXVlLgorCitUaGUgbmV4dCBzdGVwIGlzIHRvIHdyaXRlIGZvdXIgc2ltcGxlIGNhbGxiYWNrcyB0byBoZWxwIHZpZGVvYnVmIGRlYWwgd2l0aAordGhlIG1hbmFnZW1lbnQgb2YgYnVmZmVyczoKKworICAgIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgeworCWludCAoKmJ1Zl9zZXR1cCkoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJIHVuc2lnbmVkIGludCAqY291bnQsIHVuc2lnbmVkIGludCAqc2l6ZSk7CisJaW50ICgqYnVmX3ByZXBhcmUpKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAorCQkJICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKTsKKwl2b2lkICgqYnVmX3F1ZXVlKShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKTsKKwl2b2lkICgqYnVmX3JlbGVhc2UpKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2Yik7CisgICAgfTsKKworYnVmX3NldHVwKCkgaXMgY2FsbGVkIGVhcmx5IGluIHRoZSBJL08gcHJvY2Vzcywgd2hlbiBzdHJlYW1pbmcgaXMgYmVpbmcKK2luaXRpYXRlZDsgaXRzIHB1cnBvc2UgaXMgdG8gdGVsbCB2aWRlb2J1ZiBhYm91dCB0aGUgSS9PIHN0cmVhbS4gIFRoZSBjb3VudAorcGFyYW1ldGVyIHdpbGwgYmUgYSBzdWdnZXN0ZWQgbnVtYmVyIG9mIGJ1ZmZlcnMgdG8gdXNlOyB0aGUgZHJpdmVyIHNob3VsZAorY2hlY2sgaXQgZm9yIHJhdGlvbmFsaXR5IGFuZCBhZGp1c3QgaXQgaWYgbmVlZCBiZS4gIEFzIGEgcHJhY3RpY2FsIHJ1bGUsIGEKK21pbmltdW0gb2YgdHdvIGJ1ZmZlcnMgYXJlIG5lZWRlZCBmb3IgcHJvcGVyIHN0cmVhbWluZywgYW5kIHRoZXJlIGlzCit1c3VhbGx5IGEgbWF4aW11bSAod2hpY2ggY2Fubm90IGV4Y2VlZCAzMikgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGVhY2gKK2RldmljZS4gIFRoZSBzaXplIHBhcmFtZXRlciBzaG91bGQgYmUgc2V0IHRvIHRoZSBleHBlY3RlZCAobWF4aW11bSkgc2l6ZQorZm9yIGVhY2ggZnJhbWUgb2YgZGF0YS4KKworRWFjaCBidWZmZXIgKGluIHRoZSBmb3JtIG9mIGEgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciBwb2ludGVyKSB3aWxsIGJlCitwYXNzZWQgdG8gYnVmX3ByZXBhcmUoKSwgd2hpY2ggc2hvdWxkIHNldCB0aGUgYnVmZmVyJ3Mgc2l6ZSwgd2lkdGgsIGhlaWdodCwKK2FuZCBmaWVsZCBmaWVsZHMgcHJvcGVybHkuICBJZiB0aGUgYnVmZmVyJ3Mgc3RhdGUgZmllbGQgaXMKK1ZJREVPQlVGX05FRURTX0lOSVQsIHRoZSBkcml2ZXIgc2hvdWxkIHBhc3MgaXQgdG86CisKKyAgICBpbnQgdmlkZW9idWZfaW9sb2NrKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSogcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmJ1Zik7CisKK0Ftb25nIG90aGVyIHRoaW5ncywgdGhpcyBjYWxsIHdpbGwgdXN1YWxseSBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBidWZmZXIuCitGaW5hbGx5LCB0aGUgYnVmX3ByZXBhcmUoKSBmdW5jdGlvbiBzaG91bGQgc2V0IHRoZSBidWZmZXIncyBzdGF0ZSB0bworVklERU9CVUZfUFJFUEFSRUQuCisKK1doZW4gYSBidWZmZXIgaXMgcXVldWVkIGZvciBJL08sIGl0IGlzIHBhc3NlZCB0byBidWZfcXVldWUoKSwgd2hpY2ggc2hvdWxkCitwdXQgaXQgb250byB0aGUgZHJpdmVyJ3MgbGlzdCBvZiBhdmFpbGFibGUgYnVmZmVycyBhbmQgc2V0IGl0cyBzdGF0ZSB0bworVklERU9CVUZfUVVFVUVELiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIHF1ZXVlIHNwaW5sb2NrCitoZWxkOyBpZiBpdCB0cmllcyB0byBhY3F1aXJlIGl0IGFzIHdlbGwgdGhpbmdzIHdpbGwgY29tZSB0byBhIHNjcmVlY2hpbmcKK2hhbHQuICBZZXMsIHRoaXMgaXMgdGhlIHZvaWNlIG9mIGV4cGVyaWVuY2UuICBOb3RlIGFsc28gdGhhdCB2aWRlb2J1ZiBtYXkKK3dhaXQgb24gdGhlIGZpcnN0IGJ1ZmZlciBpbiB0aGUgcXVldWU7IHBsYWNpbmcgb3RoZXIgYnVmZmVycyBpbiBmcm9udCBvZiBpdAorY291bGQgYWdhaW4gZ3VtIHVwIHRoZSB3b3Jrcy4gIFNvIHVzZSBsaXN0X2FkZF90YWlsKCkgdG8gZW5xdWV1ZSBidWZmZXJzLgorCitGaW5hbGx5LCBidWZfcmVsZWFzZSgpIGlzIGNhbGxlZCB3aGVuIGEgYnVmZmVyIGlzIG5vIGxvbmdlciBpbnRlbmRlZCB0byBiZQordXNlZC4gIFRoZSBkcml2ZXIgc2hvdWxkIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIEkvTyBhY3RpdmUgb24gdGhlIGJ1ZmZlciwKK3RoZW4gcGFzcyBpdCB0byB0aGUgYXBwcm9wcmlhdGUgZnJlZSByb3V0aW5lKHMpOgorCisgICAgLyogU2NhdHRlci9nYXRoZXIgZHJpdmVycyAqLworICAgIGludCB2aWRlb2J1Zl9kbWFfdW5tYXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJICAgc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKTsKKyAgICBpbnQgdmlkZW9idWZfZG1hX2ZyZWUoc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKTsKKworICAgIC8qIHZtYWxsb2MgZHJpdmVycyAqLworICAgIHZvaWQgdmlkZW9idWZfdm1hbGxvY19mcmVlIChzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpidWYpOworCisgICAgLyogQ29udGlndW91cyBkcml2ZXJzICovCisgICAgdm9pZCB2aWRlb2J1Zl9kbWFfY29udGlnX2ZyZWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJCSAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqYnVmKTsKKworT25lIHdheSB0byBlbnN1cmUgdGhhdCBhIGJ1ZmZlciBpcyBubyBsb25nZXIgdW5kZXIgSS9PIGlzIHRvIHBhc3MgaXQgdG86CisKKyAgICBpbnQgdmlkZW9idWZfd2FpdG9uKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLCBpbnQgbm9uX2Jsb2NraW5nLCBpbnQgaW50cik7CisKK0hlcmUsIHZiIGlzIHRoZSBidWZmZXIsIG5vbl9ibG9ja2luZyBpbmRpY2F0ZXMgd2hldGhlciBub24tYmxvY2tpbmcgSS9PCitzaG91bGQgYmUgdXNlZCAoaXQgc2hvdWxkIGJlIHplcm8gaW4gdGhlIGJ1Zl9yZWxlYXNlKCkgY2FzZSksIGFuZCBpbnRyCitjb250cm9scyB3aGV0aGVyIGFuIGludGVycnVwdGlibGUgd2FpdCBpcyB1c2VkLgorCitGaWxlIG9wZXJhdGlvbnMKKworQXQgdGhpcyBwb2ludCwgbXVjaCBvZiB0aGUgd29yayBpcyBkb25lOyBtdWNoIG9mIHRoZSByZXN0IGlzIHNsaXBwaW5nCit2aWRlb2J1ZiBjYWxscyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgb3RoZXIgZHJpdmVyIGNhbGxiYWNrcy4gIFRoZQorZmlyc3Qgc3RlcCBpcyBpbiB0aGUgb3BlbigpIGZ1bmN0aW9uLCB3aGljaCBtdXN0IGluaXRpYWxpemUgdGhlCit2aWRlb2J1ZiBxdWV1ZS4gIFRoZSBmdW5jdGlvbiB0byB1c2UgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiBidWZmZXIgdXNlZDoKKworICAgIHZvaWQgdmlkZW9idWZfcXVldWVfc2dfaW5pdChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyAqb3BzLAorCQkJCXN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzcGlubG9ja190ICppcnFsb2NrLAorCQkJCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlLAorCQkJCWVudW0gdjRsMl9maWVsZCBmaWVsZCwKKwkJCQl1bnNpZ25lZCBpbnQgbXNpemUsCisJCQkJdm9pZCAqcHJpdik7CisKKyAgICB2b2lkIHZpZGVvYnVmX3F1ZXVlX3ZtYWxsb2NfaW5pdChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyAqb3BzLAorCQkJCXN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzcGlubG9ja190ICppcnFsb2NrLAorCQkJCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlLAorCQkJCWVudW0gdjRsMl9maWVsZCBmaWVsZCwKKwkJCQl1bnNpZ25lZCBpbnQgbXNpemUsCisJCQkJdm9pZCAqcHJpdik7CisKKyAgICB2b2lkIHZpZGVvYnVmX3F1ZXVlX2RtYV9jb250aWdfaW5pdChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJICAgICAgIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgKm9wcywKKwkJCQkgICAgICAgc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzcGlubG9ja190ICppcnFsb2NrLAorCQkJCSAgICAgICBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSwKKwkJCQkgICAgICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbXNpemUsCisJCQkJICAgICAgIHZvaWQgKnByaXYpOworCitJbiBlYWNoIGNhc2UsIHRoZSBwYXJhbWV0ZXJzIGFyZSB0aGUgc2FtZTogcSBpcyB0aGUgcXVldWUgc3RydWN0dXJlIGZvciB0aGUKK2RldmljZSwgb3BzIGlzIHRoZSBzZXQgb2YgY2FsbGJhY2tzIGFzIGRlc2NyaWJlZCBhYm92ZSwgZGV2IGlzIHRoZSBkZXZpY2UKK3N0cnVjdHVyZSBmb3IgdGhpcyB2aWRlbyBkZXZpY2UsIGlycWxvY2sgaXMgYW4gaW50ZXJydXB0LXNhZmUgc3BpbmxvY2sgdG8KK3Byb3RlY3QgYWNjZXNzIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMsIHR5cGUgaXMgdGhlIGJ1ZmZlciB0eXBlIHVzZWQgYnkgdGhlCitkZXZpY2UgKGNhbWVyYXMgd2lsbCB1c2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLCBmb3IgZXhhbXBsZSksIGZpZWxkCitkZXNjcmliZXMgd2hpY2ggZmllbGQgaXMgYmVpbmcgY2FwdHVyZWQgKG9mdGVuIFY0TDJfRklFTERfTk9ORSBmb3IKK3Byb2dyZXNzaXZlIGRldmljZXMpLCBtc2l6ZSBpcyB0aGUgc2l6ZSBvZiBhbnkgY29udGFpbmluZyBzdHJ1Y3R1cmUgdXNlZAorYXJvdW5kIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIsIGFuZCBwcml2IGlzIGEgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgd2hpY2gKK3Nob3dzIHVwIGluIHRoZSBwcml2X2RhdGEgZmllbGQgb2Ygc3RydWN0IHZpZGVvYnVmX3F1ZXVlLiAgTm90ZSB0aGF0IHRoZXNlCithcmUgdm9pZCBmdW5jdGlvbnMgd2hpY2gsIGV2aWRlbnRseSwgYXJlIGltbXVuZSB0byBmYWlsdXJlLgorCitWNEwyIGNhcHR1cmUgZHJpdmVycyBjYW4gYmUgd3JpdHRlbiB0byBzdXBwb3J0IGVpdGhlciBvZiB0d28gQVBJczogdGhlCityZWFkKCkgc3lzdGVtIGNhbGwgYW5kIHRoZSByYXRoZXIgbW9yZSBjb21wbGljYXRlZCBzdHJlYW1pbmcgbWVjaGFuaXNtLiAgQXMKK2EgZ2VuZXJhbCBydWxlLCBpdCBpcyBuZWNlc3NhcnkgdG8gc3VwcG9ydCBib3RoIHRvIGVuc3VyZSB0aGF0IGFsbAorYXBwbGljYXRpb25zIGhhdmUgYSBjaGFuY2Ugb2Ygd29ya2luZyB3aXRoIHRoZSBkZXZpY2UuICBWaWRlb2J1ZiBtYWtlcyBpdAorZWFzeSB0byBkbyB0aGF0IHdpdGggdGhlIHNhbWUgY29kZS4gIFRvIGltcGxlbWVudCByZWFkKCksIHRoZSBkcml2ZXIgbmVlZAorb25seSBtYWtlIGEgY2FsbCB0byBvbmUgb2Y6CisKKyAgICBzc2l6ZV90IHZpZGVvYnVmX3JlYWRfb25lKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCSAgICAgIGNoYXIgX191c2VyICpkYXRhLCBzaXplX3QgY291bnQsCisJCQkgICAgICBsb2ZmX3QgKnBwb3MsIGludCBub25ibG9ja2luZyk7CisKKyAgICBzc2l6ZV90IHZpZGVvYnVmX3JlYWRfc3RyZWFtKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKKwkJCQkgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfdCBjb3VudCwKKwkJCQkgbG9mZl90ICpwcG9zLCBpbnQgdmJpaGFjaywgaW50IG5vbmJsb2NraW5nKTsKKworRWl0aGVyIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2lsbCByZWFkIGZyYW1lIGRhdGEgaW50byBkYXRhLCByZXR1cm5pbmcgdGhlCithbW91bnQgYWN0dWFsbHkgcmVhZDsgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCB2aWRlb2J1Zl9yZWFkX29uZSgpIHdpbGwgb25seQorcmVhZCBhIHNpbmdsZSBmcmFtZSwgd2hpbGUgdmlkZW9idWZfcmVhZF9zdHJlYW0oKSB3aWxsIHJlYWQgbXVsdGlwbGUgZnJhbWVzCitpZiB0aGV5IGFyZSBuZWVkZWQgdG8gc2F0aXNmeSB0aGUgY291bnQgcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gIEEKK3R5cGljYWwgZHJpdmVyIHJlYWQoKSBpbXBsZW1lbnRhdGlvbiB3aWxsIHN0YXJ0IHRoZSBjYXB0dXJlIGVuZ2luZSwgY2FsbAorb25lIG9mIHRoZSBhYm92ZSBmdW5jdGlvbnMsIHRoZW4gc3RvcCB0aGUgZW5naW5lIGJlZm9yZSByZXR1cm5pbmcgKHRob3VnaCBhCitzbWFydGVyIGltcGxlbWVudGF0aW9uIG1pZ2h0IGxlYXZlIHRoZSBlbmdpbmUgcnVubmluZyBmb3IgYSBsaXR0bGUgd2hpbGUgaW4KK2FudGljaXBhdGlvbiBvZiBhbm90aGVyIHJlYWQoKSBjYWxsIGhhcHBlbmluZyBpbiB0aGUgbmVhciBmdXR1cmUpLgorCitUaGUgcG9sbCgpIGZ1bmN0aW9uIGNhbiB1c3VhbGx5IGJlIGltcGxlbWVudGVkIHdpdGggYSBkaXJlY3QgY2FsbCB0bzoKKworICAgIHVuc2lnbmVkIGludCB2aWRlb2J1Zl9wb2xsX3N0cmVhbShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgICAgICBzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJICAgICAgcG9sbF90YWJsZSAqd2FpdCk7CisKK05vdGUgdGhhdCB0aGUgYWN0dWFsIHdhaXQgcXVldWUgZXZlbnR1YWxseSB1c2VkIHdpbGwgYmUgdGhlIG9uZSBhc3NvY2lhdGVkCit3aXRoIHRoZSBmaXJzdCBhdmFpbGFibGUgYnVmZmVyLgorCitXaGVuIHN0cmVhbWluZyBJL08gaXMgZG9uZSB0byBrZXJuZWwtc3BhY2UgYnVmZmVycywgdGhlIGRyaXZlciBtdXN0IHN1cHBvcnQKK3RoZSBtbWFwKCkgc3lzdGVtIGNhbGwgdG8gZW5hYmxlIHVzZXIgc3BhY2UgdG8gYWNjZXNzIHRoZSBkYXRhLiAgSW4gbWFueQorVjRMMiBkcml2ZXJzLCB0aGUgb2Z0ZW4tY29tcGxleCBtbWFwKCkgaW1wbGVtZW50YXRpb24gc2ltcGxpZmllcyB0byBhCitzaW5nbGUgY2FsbCB0bzoKKworICAgIGludCB2aWRlb2J1Zl9tbWFwX21hcHBlcihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKKworRXZlcnl0aGluZyBlbHNlIGlzIGhhbmRsZWQgYnkgdGhlIHZpZGVvYnVmIGNvZGUuCisKK1RoZSByZWxlYXNlKCkgZnVuY3Rpb24gcmVxdWlyZXMgdHdvIHNlcGFyYXRlIHZpZGVvYnVmIGNhbGxzOgorCisgICAgdm9pZCB2aWRlb2J1Zl9zdG9wKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSk7CisgICAgaW50IHZpZGVvYnVmX21tYXBfZnJlZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEpOworCitUaGUgY2FsbCB0byB2aWRlb2J1Zl9zdG9wKCkgdGVybWluYXRlcyBhbnkgSS9PIGluIHByb2dyZXNzIC0gdGhvdWdoIGl0IGlzCitzdGlsbCB1cCB0byB0aGUgZHJpdmVyIHRvIHN0b3AgdGhlIGNhcHR1cmUgZW5naW5lLiAgVGhlIGNhbGwgdG8KK3ZpZGVvYnVmX21tYXBfZnJlZSgpIHdpbGwgZW5zdXJlIHRoYXQgYWxsIGJ1ZmZlcnMgaGF2ZSBiZWVuIHVubWFwcGVkOyBpZgorc28sIHRoZXkgd2lsbCBhbGwgYmUgcGFzc2VkIHRvIHRoZSBidWZfcmVsZWFzZSgpIGNhbGxiYWNrLiAgSWYgYnVmZmVycworcmVtYWluIG1hcHBlZCwgdmlkZW9idWZfbW1hcF9mcmVlKCkgcmV0dXJucyBhbiBlcnJvciBjb2RlIGluc3RlYWQuICBUaGUKK3B1cnBvc2UgaXMgY2xlYXJseSB0byBjYXVzZSB0aGUgY2xvc2luZyBvZiB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvIGZhaWwgaWYKK2J1ZmZlcnMgYXJlIHN0aWxsIG1hcHBlZCwgYnV0IGV2ZXJ5IGRyaXZlciBpbiB0aGUgMi42LjMyIGtlcm5lbCBjaGVlcmZ1bGx5CitpZ25vcmVzIGl0cyByZXR1cm4gdmFsdWUuCisKK2lvY3RsKCkgb3BlcmF0aW9ucworCitUaGUgVjRMMiBBUEkgaW5jbHVkZXMgYSB2ZXJ5IGxvbmcgbGlzdCBvZiBkcml2ZXIgY2FsbGJhY2tzIHRvIHJlc3BvbmQgdG8KK3RoZSBtYW55IGlvY3RsKCkgY29tbWFuZHMgbWFkZSBhdmFpbGFibGUgdG8gdXNlciBzcGFjZS4gIEEgbnVtYmVyIG9mIHRoZXNlCistIHRob3NlIGFzc29jaWF0ZWQgd2l0aCBzdHJlYW1pbmcgSS9PIC0gdHVybiBhbG1vc3QgZGlyZWN0bHkgaW50byB2aWRlb2J1ZgorY2FsbHMuICBUaGUgcmVsZXZhbnQgaGVscGVyIGZ1bmN0aW9ucyBhcmU6CisKKyAgICBpbnQgdmlkZW9idWZfcmVxYnVmcyhzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJlcSk7CisgICAgaW50IHZpZGVvYnVmX3F1ZXJ5YnVmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHY0bDJfYnVmZmVyICpiKTsKKyAgICBpbnQgdmlkZW9idWZfcWJ1ZihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYik7CisgICAgaW50IHZpZGVvYnVmX2RxYnVmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHY0bDJfYnVmZmVyICpiLAorCQkgICAgICAgaW50IG5vbmJsb2NraW5nKTsKKyAgICBpbnQgdmlkZW9idWZfc3RyZWFtb24oc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxKTsKKyAgICBpbnQgdmlkZW9idWZfc3RyZWFtb2ZmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSk7CisgICAgaW50IHZpZGVvYnVmX2NnbWJ1ZihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb19tYnVmICptYnVmLAorCQkJaW50IGNvdW50KTsKKworU28sIGZvciBleGFtcGxlLCBhIFZJRElPQ19SRVFCVUZTIGNhbGwgdHVybnMgaW50byBhIGNhbGwgdG8gdGhlIGRyaXZlcidzCit2aWRpb2NfcmVxYnVmcygpIGNhbGxiYWNrIHdoaWNoLCBpbiB0dXJuLCB1c3VhbGx5IG9ubHkgbmVlZHMgdG8gbG9jYXRlIHRoZQorcHJvcGVyIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSBwb2ludGVyIGFuZCBwYXNzIGl0IHRvIHZpZGVvYnVmX3JlcWJ1ZnMoKS4KK1RoZXNlIHN1cHBvcnQgZnVuY3Rpb25zIGNhbiByZXBsYWNlIGEgZ3JlYXQgZGVhbCBvZiBidWZmZXIgbWFuYWdlbWVudAorYm9pbGVycGxhdGUgaW4gYSBsb3Qgb2YgVjRMMiBkcml2ZXJzLgorCitUaGUgdmlkaW9jX3N0cmVhbW9uKCkgYW5kIHZpZGlvY19zdHJlYW1vZmYoKSBmdW5jdGlvbnMgd2lsbCBiZSBhIGJpdCBtb3JlCitjb21wbGV4LCBvZiBjb3Vyc2UsIHNpbmNlIHRoZXkgd2lsbCBhbHNvIG5lZWQgdG8gZGVhbCB3aXRoIHN0YXJ0aW5nIGFuZAorc3RvcHBpbmcgdGhlIGNhcHR1cmUgZW5naW5lLiAgdmlkZW9idWZfY2dtYnVmKCksIGNhbGxlZCBmcm9tIHRoZSBkcml2ZXIncwordmlkaW9jZ21idWYoKSBmdW5jdGlvbiwgb25seSBleGlzdHMgaWYgdGhlIFY0TDEgY29tcGF0aWJpbGl0eSBtb2R1bGUgaGFzCitiZWVuIHNlbGVjdGVkIHdpdGggQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFULCBzbyBpdHMgdXNlIG11c3QgYmUgc3Vycm91bmRlZAord2l0aCAjaWZkZWYgZGlyZWN0aXZlcy4KKworQnVmZmVyIGFsbG9jYXRpb24KKworVGh1cyBmYXIsIHdlIGhhdmUgdGFsa2VkIGFib3V0IGJ1ZmZlcnMsIGJ1dCBoYXZlIG5vdCBsb29rZWQgYXQgaG93IHRoZXkgYXJlCithbGxvY2F0ZWQuICBUaGUgc2NhdHRlci9nYXRoZXIgY2FzZSBpcyB0aGUgbW9zdCBjb21wbGV4IG9uIHRoaXMgZnJvbnQuICBGb3IKK2FsbG9jYXRpb24sIHRoZSBkcml2ZXIgY2FuIGxlYXZlIGJ1ZmZlciBhbGxvY2F0aW9uIGVudGlyZWx5IHVwIHRvIHRoZQordmlkZW9idWYgbGF5ZXI7IGluIHRoaXMgY2FzZSwgYnVmZmVycyB3aWxsIGJlIGFsbG9jYXRlZCBhcyBhbm9ueW1vdXMKK3VzZXItc3BhY2UgcGFnZXMgYW5kIHdpbGwgYmUgdmVyeSBzY2F0dGVyZWQgaW5kZWVkLiAgSWYgdGhlIGFwcGxpY2F0aW9uIGlzCit1c2luZyB1c2VyLXNwYWNlIGJ1ZmZlcnMsIG5vIGFsbG9jYXRpb24gaXMgbmVlZGVkOyB0aGUgdmlkZW9idWYgbGF5ZXIgd2lsbAordGFrZSBjYXJlIG9mIGNhbGxpbmcgZ2V0X3VzZXJfcGFnZXMoKSBhbmQgZmlsbGluZyBpbiB0aGUgc2NhdHRlcmxpc3QgYXJyYXkuCisKK0lmIHRoZSBkcml2ZXIgbmVlZHMgdG8gZG8gaXRzIG93biBtZW1vcnkgYWxsb2NhdGlvbiwgaXQgc2hvdWxkIGJlIGRvbmUgaW4KK3RoZSB2aWRpb2NfcmVxYnVmcygpIGZ1bmN0aW9uLCAqYWZ0ZXIqIGNhbGxpbmcgdmlkZW9idWZfcmVxYnVmcygpLiAgVGhlCitmaXJzdCBzdGVwIGlzIGEgY2FsbCB0bzoKKworICAgIHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKnZpZGVvYnVmX3RvX2RtYShzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpidWYpOworCitUaGUgcmV0dXJuZWQgdmlkZW9idWZfZG1hYnVmIHN0cnVjdHVyZSAoZGVmaW5lZCBpbgorPG1lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oPikgaW5jbHVkZXMgYSBjb3VwbGUgb2YgcmVsZXZhbnQgZmllbGRzOgorCisgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICAqc2dsaXN0OworICAgIGludCAgICAgICAgICAgICAgICAgc2dsZW47CisKK1RoZSBkcml2ZXIgbXVzdCBhbGxvY2F0ZSBhbiBhcHByb3ByaWF0ZWx5LXNpemVkIHNjYXR0ZXJsaXN0IGFycmF5IGFuZAorcG9wdWxhdGUgaXQgd2l0aCBwb2ludGVycyB0byB0aGUgcGllY2VzIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyOyBzZ2xlbgorc2hvdWxkIGJlIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheS4KKworRHJpdmVycyB1c2luZyB0aGUgdm1hbGxvYygpIG1ldGhvZCBuZWVkIG5vdCAoYW5kIGNhbm5vdCkgY29uY2VybiB0aGVtc2VsdmVzCit3aXRoIGJ1ZmZlciBhbGxvY2F0aW9uIGF0IGFsbDsgdmlkZW9idWYgd2lsbCBoYW5kbGUgdGhvc2UgZGV0YWlscy4gIFRoZQorc2FtZSBpcyBub3JtYWxseSB0cnVlIG9mIGNvbnRpZ3VvdXMtRE1BIGRyaXZlcnMgYXMgd2VsbDsgdmlkZW9idWYgd2lsbAorYWxsb2NhdGUgdGhlIGJ1ZmZlcnMgKHdpdGggZG1hX2FsbG9jX2NvaGVyZW50KCkpIHdoZW4gaXQgc2VlcyBmaXQuICBUaGF0CittZWFucyB0aGF0IHRoZXNlIGRyaXZlcnMgbWF5IGJlIHRyeWluZyB0byBkbyBoaWdoLW9yZGVyIGFsbG9jYXRpb25zIGF0IGFueQordGltZSwgYW4gb3BlcmF0aW9uIHdoaWNoIGlzIG5vdCBhbHdheXMgZ3VhcmFudGVlZCB0byB3b3JrLiAgU29tZSBkcml2ZXJzCitwbGF5IHRyaWNrcyBieSBhbGxvY2F0aW5nIERNQSBzcGFjZSBhdCBzeXN0ZW0gYm9vdCB0aW1lOyB2aWRlb2J1ZiBkb2VzIG5vdAorY3VycmVudGx5IHBsYXkgd2VsbCB3aXRoIHRob3NlIGRyaXZlcnMuCisKK0FzIG9mIDIuNi4zMSwgY29udGlndW91cy1ETUEgZHJpdmVycyBjYW4gd29yayB3aXRoIGEgdXNlci1zdXBwbGllZCBidWZmZXIsCithcyBsb25nIGFzIHRoYXQgYnVmZmVyIGlzIHBoeXNpY2FsbHkgY29udGlndW91cy4gIE5vcm1hbCB1c2VyLXNwYWNlCithbGxvY2F0aW9ucyB3aWxsIG5vdCBtZWV0IHRoYXQgY3JpdGVyaW9uLCBidXQgYnVmZmVycyBvYnRhaW5lZCBmcm9tIG90aGVyCitrZXJuZWwgZHJpdmVycywgb3IgdGhvc2UgY29udGFpbmVkIHdpdGhpbiBodWdlIHBhZ2VzLCB3aWxsIHdvcmsgd2l0aCB0aGVzZQorZHJpdmVycy4KKworRmlsbGluZyB0aGUgYnVmZmVycworCitUaGUgZmluYWwgcGFydCBvZiBhIHZpZGVvYnVmIGltcGxlbWVudGF0aW9uIGhhcyBubyBkaXJlY3QgY2FsbGJhY2sgLSBpdCdzCit0aGUgcG9ydGlvbiBvZiB0aGUgY29kZSB3aGljaCBhY3R1YWxseSBwdXRzIGZyYW1lIGRhdGEgaW50byB0aGUgYnVmZmVycywKK3VzdWFsbHkgaW4gcmVzcG9uc2UgdG8gaW50ZXJydXB0cyBmcm9tIHRoZSBkZXZpY2UuICBGb3IgYWxsIHR5cGVzIG9mCitkcml2ZXJzLCB0aGlzIHByb2Nlc3Mgd29ya3MgYXBwcm94aW1hdGVseSBhcyBmb2xsb3dzOgorCisgLSBPYnRhaW4gdGhlIG5leHQgYXZhaWxhYmxlIGJ1ZmZlciBhbmQgbWFrZSBzdXJlIHRoYXQgc29tZWJvZHkgaXMgYWN0dWFsbHkKKyAgIHdhaXRpbmcgZm9yIGl0LgorCisgLSBHZXQgYSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgYW5kIHB1dCB2aWRlbyBkYXRhIHRoZXJlLgorCisgLSBNYXJrIHRoZSBidWZmZXIgYXMgZG9uZSBhbmQgd2FrZSB1cCB0aGUgcHJvY2VzcyB3YWl0aW5nIGZvciBpdC4KKworU3RlcCAoMSkgYWJvdmUgaXMgZG9uZSBieSBsb29raW5nIGF0IHRoZSBkcml2ZXItbWFuYWdlZCBsaXN0X2hlYWQgc3RydWN0dXJlCistIHRoZSBvbmUgd2hpY2ggaXMgZmlsbGVkIGluIHRoZSBidWZfcXVldWUoKSBjYWxsYmFjay4gIEJlY2F1c2Ugc3RhcnRpbmcKK3RoZSBlbmdpbmUgYW5kIGVucXVldWVpbmcgYnVmZmVycyBhcmUgZG9uZSBpbiBzZXBhcmF0ZSBzdGVwcywgaXQncyBwb3NzaWJsZQorZm9yIHRoZSBlbmdpbmUgdG8gYmUgcnVubmluZyB3aXRob3V0IGFueSBidWZmZXJzIGF2YWlsYWJsZSAtIGluIHRoZQordm1hbGxvYygpIGNhc2UgZXNwZWNpYWxseS4gIFNvIHRoZSBkcml2ZXIgc2hvdWxkIGJlIHByZXBhcmVkIGZvciB0aGUgbGlzdAordG8gYmUgZW1wdHkuICBJdCBpcyBlcXVhbGx5IHBvc3NpYmxlIHRoYXQgbm9ib2R5IGlzIHlldCBpbnRlcmVzdGVkIGluIHRoZQorYnVmZmVyOyB0aGUgZHJpdmVyIHNob3VsZCBub3QgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Qgb3IgZmlsbCBpdCB1bnRpbCBhCitwcm9jZXNzIGlzIHdhaXRpbmcgb24gaXQuICBUaGF0IHRlc3QgY2FuIGJlIGRvbmUgYnkgZXhhbWluaW5nIHRoZSBidWZmZXIncworZG9uZSBmaWVsZCAoYSB3YWl0X3F1ZXVlX2hlYWRfdCBzdHJ1Y3R1cmUpIHdpdGggd2FpdHF1ZXVlX2FjdGl2ZSgpLgorCitBIGJ1ZmZlcidzIHN0YXRlIHNob3VsZCBiZSBzZXQgdG8gVklERU9CVUZfQUNUSVZFIGJlZm9yZSBiZWluZyBtYXBwZWQgZm9yCitETUE7IHRoYXQgZW5zdXJlcyB0aGF0IHRoZSB2aWRlb2J1ZiBsYXllciB3aWxsIG5vdCB0cnkgdG8gZG8gYW55dGhpbmcgd2l0aAoraXQgd2hpbGUgdGhlIGRldmljZSBpcyB0cmFuc2ZlcnJpbmcgZGF0YS4KKworRm9yIHNjYXR0ZXIvZ2F0aGVyIGRyaXZlcnMsIHRoZSBuZWVkZWQgbWVtb3J5IHBvaW50ZXJzIHdpbGwgYmUgZm91bmQgaW4gdGhlCitzY2F0dGVybGlzdCBzdHJ1Y3R1cmUgZGVzY3JpYmVkIGFib3ZlLiAgRHJpdmVycyB1c2luZyB0aGUgdm1hbGxvYygpIG1ldGhvZAorY2FuIGdldCBhIG1lbW9yeSBwb2ludGVyIHdpdGg6CisKKyAgICB2b2lkICp2aWRlb2J1Zl90b192bWFsbG9jKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmJ1Zik7CisKK0ZvciBjb250aWd1b3VzIERNQSBkcml2ZXJzLCB0aGUgZnVuY3Rpb24gdG8gdXNlIGlzOgorCisgICAgZG1hX2FkZHJfdCB2aWRlb2J1Zl90b19kbWFfY29udGlnKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmJ1Zik7CisKK1RoZSBjb250aWd1b3VzIERNQSBBUEkgZ29lcyBvdXQgb2YgaXRzIHdheSB0byBoaWRlIHRoZSBrZXJuZWwtc3BhY2UgYWRkcmVzcworb2YgdGhlIERNQSBidWZmZXIgZnJvbSBkcml2ZXJzLgorCitUaGUgZmluYWwgc3RlcCBpcyB0byBzZXQgdGhlIHNpemUgZmllbGQgb2YgdGhlIHJlbGV2YW50IHZpZGVvYnVmX2J1ZmZlcgorc3RydWN0dXJlIHRvIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgY2FwdHVyZWQgaW1hZ2UsIHNldCBzdGF0ZSB0bworVklERU9CVUZfRE9ORSwgdGhlbiBjYWxsIHdha2VfdXAoKSBvbiB0aGUgZG9uZSBxdWV1ZS4gIEF0IHRoaXMgcG9pbnQsIHRoZQorYnVmZmVyIGlzIG93bmVkIGJ5IHRoZSB2aWRlb2J1ZiBsYXllciBhbmQgdGhlIGRyaXZlciBzaG91bGQgbm90IHRvdWNoIGl0CithZ2Fpbi4KKworRGV2ZWxvcGVycyB3aG8gYXJlIGludGVyZXN0ZWQgaW4gbW9yZSBpbmZvcm1hdGlvbiBjYW4gZ28gaW50byB0aGUgcmVsZXZhbnQKK2hlYWRlciBmaWxlczsgdGhlcmUgYXJlIGEgZmV3IGxvdy1sZXZlbCBmdW5jdGlvbnMgZGVjbGFyZWQgdGhlcmUgd2hpY2ggaGF2ZQorbm90IGJlZW4gdGFsa2VkIGFib3V0IGhlcmUuICBBbHNvIHdvcnRod2hpbGUgaXMgdGhlIHZpdmkgZHJpdmVyCisoZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMpLCB3aGljaCBpcyBtYWludGFpbmVkIGFzIGFuIGV4YW1wbGUgb2YgaG93IFY0TDIKK2RyaXZlcnMgc2hvdWxkIGJlIHdyaXR0ZW4uICBWaXZpIG9ubHkgdXNlcyB0aGUgdm1hbGxvYygpIEFQSSwgYnV0IGl0J3MgZ29vZAorZW5vdWdoIHRvIGdldCBzdGFydGVkIHdpdGguICBOb3RlIGFsc28gdGhhdCBhbGwgb2YgdGhlc2UgY2FsbHMgYXJlIGV4cG9ydGVkCitHUEwtb25seSwgc28gdGhleSB3aWxsIG5vdCBiZSBhdmFpbGFibGUgdG8gbm9uLUdQTCBrZXJuZWwgbW9kdWxlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2L3g4Nl82NC9ib290LW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKaW5kZXggMjlhNmZmOC4uN2ZiYmFmOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKQEAgLTE2NiwxOSArMTY2LDEzIEBACiAKICAgbnVtYT1ub2FjcGkgICBEb24ndCBwYXJzZSB0aGUgU1JBVCB0YWJsZSBmb3IgTlVNQSBzZXR1cAogCi0gIG51bWE9ZmFrZT1DTURMSU5FCi0JCUlmIGEgbnVtYmVyLCBmYWtlcyBDTURMSU5FIG5vZGVzIGFuZCBpZ25vcmVzIE5VTUEgc2V0dXAgb2YgdGhlCi0JCWFjdHVhbCBtYWNoaW5lLiAgT3RoZXJ3aXNlLCBzeXN0ZW0gbWVtb3J5IGlzIGNvbmZpZ3VyZWQKLQkJZGVwZW5kaW5nIG9uIHRoZSBzaXplcyBhbmQgY29lZmZpY2llbnRzIGxpc3RlZC4gIEZvciBleGFtcGxlOgotCQkJbnVtYT1mYWtlPTIqNTEyLDEwMjQsNCoyNTYsKjEyOAotCQlnaXZlcyB0d28gNTEyTSBub2RlcywgYSAxMDI0TSBub2RlLCBmb3VyIDI1Nk0gbm9kZXMsIGFuZCB0aGUKLQkJcmVzdCBzcGxpdCBpbnRvIDEyOE0gY2h1bmtzLiAgSWYgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIENNRExJTkUKLQkJaXMgYSAqLCB0aGUgcmVtYWluaW5nIG1lbW9yeSBpcyBkaXZpZGVkIHVwIGVxdWFsbHkgYW1vbmcgaXRzCi0JCWNvZWZmaWNpZW50OgotCQkJbnVtYT1mYWtlPTIqNTEyLDIqCi0JCWdpdmVzIHR3byA1MTJNIG5vZGVzIGFuZCB0aGUgcmVzdCBzcGxpdCBpbnRvIHR3byBub2Rlcy4KLQkJT3RoZXJ3aXNlLCB0aGUgcmVtYWluaW5nIHN5c3RlbSBSQU0gaXMgYWxsb2NhdGVkIHRvIGFuCi0JCWFkZGl0aW9uYWwgbm9kZS4KKyAgbnVtYT1mYWtlPTxzaXplPltNR10KKwkJSWYgZ2l2ZW4gYXMgYSBtZW1vcnkgdW5pdCwgZmlsbHMgYWxsIHN5c3RlbSBSQU0gd2l0aCBub2RlcyBvZgorCQlzaXplIGludGVybGVhdmVkIG92ZXIgcGh5c2ljYWwgbm9kZXMuCisKKyAgbnVtYT1mYWtlPTxOPgorCQlJZiBnaXZlbiBhcyBhbiBpbnRlZ2VyLCBmaWxscyBhbGwgc3lzdGVtIFJBTSB3aXRoIE4gZmFrZSBub2RlcworCQlpbnRlcmxlYXZlZCBvdmVyIHBoeXNpY2FsIG5vZGVzLgogCiBBQ1BJCiAKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMjUzM2ZjNC4uZjUyMGRkMCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTIyMSw2ICsyMjEsNyBAQAogCiBBQ0VSIEFTUElSRSBPTkUgVEVNUEVSQVRVUkUgQU5EIEZBTiBEUklWRVIKIE06CVBldGVyIEZldWVyZXIgPHBldGVyQHBpaWUubmV0PgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9waWllLm5ldC8/c2VjdGlvbj1hY2VyaGRmCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyaGRmLmMKQEAgLTIyOCw2ICsyMjksNyBAQAogQUNFUiBXTUkgTEFQVE9QIEVYVFJBUwogTToJQ2FybG9zIENvcmJhY2hvIDxjYXJsb3NAc3RyYW5nZXdvcmxkcy5jby51az4KIEw6CWFjZXJhY3BpQGdvb2dsZWdyb3Vwcy5jb20gKHN1YnNjcmliZXJzLW9ubHkpCitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FjZXJhY3BpCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCkBAIC0yODgsNyArMjkwLDcgQEAKIAogQUNQSSBXTUkgRFJJVkVSCiBNOglDYXJsb3MgQ29yYmFjaG8gPGNhcmxvc0BzdHJhbmdld29ybGRzLmNvLnVrPgotTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3Lmxlc3N3YXR0cy5vcmcvcHJvamVjdHMvYWNwaS8KIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L3dtaS5jCkBAIC05NjgsNiArOTcwLDcgQEAKIE06CUNvcmVudGluIENoYXJ5IDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CiBNOglLYXJvbCBLb3ppbW9yIDxzeml3YW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgogTDoJYWNwaTRhc3VzLXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2FjcGk0YXN1cy5zZi5uZXQKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jCkBAIC05ODEsNiArOTg0LDcgQEAKIEFTVVMgTEFQVE9QIEVYVFJBUyBEUklWRVIKIE06CUNvcmVudGluIENoYXJ5IDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CiBMOglhY3BpNGFzdXMtdXNlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vYWNwaTRhc3VzLnNmLm5ldAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYwpAQCAtMTQ3Myw2ICsxNDc3LDcgQEAKIENNUEMgQUNQSSBEUklWRVIKIE06CVRoYWRldSBMaW1hIGRlIFNvdXphIENhc2NhcmRvIDxjYXNjYXJkb0Bob2xvc2NvcGlvLmNvbT4KIE06CURhbmllbCBPbGl2ZWlyYSBOYXNjaW1lbnRvIDxkb25Ac3lzdC5jb20uYnI+CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9jbGFzc21hdGUtbGFwdG9wLmMKIApAQCAtMTUxNiw2ICsxNTIxLDcgQEAKIAogQ09NUEFMIExBUFRPUCBTVVBQT1JUCiBNOglDZXphcnkgSmFja2lld2ljeiA8Y2V6YXJ5LmphY2tpZXdpY3pAZ21haWwuY29tPgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYwogCkBAIC0xNzQ2LDYgKzE3NTIsNyBAQAogCiBERUxMIExBUFRPUCBEUklWRVIKIE06CU1hdHRoZXcgR2FycmV0dCA8bWpnNTlAc3JjZi51Y2FtLm9yZz4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCiAKQEAgLTIwMjgsNiArMjAzNSw3IEBACiBFRUVQQyBMQVBUT1AgRVhUUkFTIERSSVZFUgogTToJQ29yZW50aW4gQ2hhcnkgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KIEw6CWFjcGk0YXN1cy11c2VyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9hY3BpNGFzdXMuc2YubmV0CiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwpAQCAtMjE0MSw2ICsyMTQ5LDE3IEBACiBGOglEb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi8KIEY6CWxpYi9mYXVsdC1pbmplY3QuYwogCitGQ09FIFNVQlNZU1RFTSAobGliZmMsIGxpYmZjb2UsIGZjb2UpCitNOglSb2JlcnQgTG92ZSA8cm9iZXJ0LncubG92ZUBpbnRlbC5jb20+CitMOglkZXZlbEBvcGVuLWZjb2Uub3JnCitXOgl3d3cuT3Blbi1GQ29FLm9yZworUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL3Njc2kvbGliZmMvCitGOglkcml2ZXJzL3Njc2kvZmNvZS8KK0Y6CWluY2x1ZGUvc2NzaS9mYy8KK0Y6CWluY2x1ZGUvc2NzaS9saWJmYy5oCitGOglpbmNsdWRlL3Njc2kvbGliZmNvZS5oCisKIEZJTEUgTE9DS0lORyAoZmxvY2soKSBhbmQgZmNudGwoKS9sb2NrZigpKQogTToJTWF0dGhldyBXaWxjb3ggPG1hdHRoZXdAd2lsLmN4PgogTDoJbGludXgtZnNkZXZlbEB2Z2VyLmtlcm5lbC5vcmcKQEAgLTIyOTUsNyArMjMxNCw3IEBACiAKIEZVSklUU1UgTEFQVE9QIEVYVFJBUwogTToJSm9uYXRoYW4gV29pdGhlIDxqd29pdGhlQHBoeXNpY3MuYWRlbGFpZGUuZWR1LmF1PgotTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCiAKQEAgLTIzOTMsNiArMjQxMiwxOCBAQAogUzoJT2RkIEZpeGVzCiBGOglkcml2ZXJzL2NoYXIvaHZjXyoKIAorVklSVElPIENPTlNPTEUgRFJJVkVSCitNOglBbWl0IFNoYWggPGFtaXQuc2hhaEByZWRoYXQuY29tPgorTDoJdmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCisKK2lTQ1NJIEJPT1QgRklSTVdBUkUgVEFCTEUgKGlCRlQpIERSSVZFUgorTToJUGV0ZXIgSm9uZXMgPHBqb25lc0ByZWRoYXQuY29tPgorTToJS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWRAa2VybmVsLm9yZz4KK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdCoKKwogR1NQQ0EgRklORVBJWCBTVUJEUklWRVIKIE06CUZyYW5rIFphZ28gPGZyYW5rQHphZ28ubmV0PgogTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCkBAIC0yNTYxLDYgKzI1OTIsNyBAQAogCiBIUCBDT01QQVEgVEMxMTAwIFRBQkxFVCBXTUkgRVhUUkFTIERSSVZFUgogTToJQ2FybG9zIENvcmJhY2hvIDxjYXJsb3NAc3RyYW5nZXdvcmxkcy5jby51az4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglPZGQgRml4ZXMKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L3RjMTEwMC13bWkuYwogCkBAIC0yNzcxLDcgKzI4MDMsNyBAQAogCiBJTlRFTCBNRU5MT1cgVEhFUk1BTCBEUklWRVIKIE06CVN1aml0aCBUaG9tYXMgPHN1aml0aC50aG9tYXNAaW50ZWwuY29tPgotTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3Lmxlc3N3YXR0cy5vcmcvcHJvamVjdHMvYWNwaS8KIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfbWVubG93LmMKQEAgLTM2MzcsNiArMzY2OSw3IEBACiAKIE1TSSBMQVBUT1AgU1VQUE9SVAogTToJTGVubmFydCBQb2V0dGVyaW5nIDxtenhyZWFyeUAwcG9pbnRlci5kZT4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwczovL3RhbmdvLjBwb2ludGVyLmRlL21haWxtYW4vbGlzdGluZm8vczI3MC1saW51eAogVzoJaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvdGNoaWJvLmh0bWwKIFM6CU1haW50YWluZWQKQEAgLTM2NDQsNiArMzY3Nyw3IEBACiAKIE1TSSBXTUkgU1VQUE9SVAogTToJQW5pc3NlIEFzdGllciA8YW5pc3NlQGFzdGllci5ldT4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L21zaS13bWkuYwogCkBAIC00MDk2LDYgKzQxMzAsNyBAQAogCiBQQU5BU09OSUMgTEFQVE9QIEFDUEkgRVhUUkFTIERSSVZFUgogTToJSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMKIApAQCAtNDUwOSw3ICs0NTQ0LDcgQEAKIFJDVVRPUlRVUkUgTU9EVUxFCiBNOglKb3NoIFRyaXBsZXR0IDxqb3NoQGZyZWVkZXNrdG9wLm9yZz4KIE06CSJQYXVsIEUuIE1jS2VubmV5IiA8cGF1bG1ja0BsaW51eC52bmV0LmlibS5jb20+Ci1TOglNYWludGFpbmVkCitTOglTdXBwb3J0ZWQKIEY6CURvY3VtZW50YXRpb24vUkNVL3RvcnR1cmUudHh0CiBGOglrZXJuZWwvcmN1dG9ydHVyZS5jCiAKQEAgLTQ1MzQsMTEgKzQ1NjksMTIgQEAKIE06CSJQYXVsIEUuIE1jS2VubmV5IiA8cGF1bG1ja0BsaW51eC52bmV0LmlibS5jb20+CiBXOglodHRwOi8vd3d3LnJkcm9wLmNvbS91c2Vycy9wYXVsbWNrL3JjbG9jay8KIFM6CVN1cHBvcnRlZAotRjoJRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dAotRjoJRG9jdW1lbnRhdGlvbi9SQ1UvcmN1cmVmLnR4dAotRjoJaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCi1GOglpbmNsdWRlL2xpbnV4L3NyY3UuaAotRjoJa2VybmVsL3JjdXBkYXRlLmMKK0Y6CURvY3VtZW50YXRpb24vUkNVLworRjoJaW5jbHVkZS9saW51eC9yY3UqCitGOglpbmNsdWRlL2xpbnV4L3NyY3UqCitGOglrZXJuZWwvcmN1KgorRjoJa2VybmVsL3NyY3UqCitYOglrZXJuZWwvcmN1dG9ydHVyZS5jCiAKIFJFQUwgVElNRSBDTE9DSyBEUklWRVIKIE06CVBhdWwgR29ydG1ha2VyIDxwX2dvcnRtYWtlckB5YWhvby5jb20+CkBAIC00Njc2LDYgKzQ3MTIsMTMgQEAKIEY6CWRyaXZlcnMvbWVkaWEvdmlkZW8vKjcxNDYqCiBGOglpbmNsdWRlL21lZGlhLyo3MTQ2KgogCitUTEcyMzAwIFZJREVPNExJTlVYLTIgRFJJVkVSCitNOglIdWFuZyBTaGlqaWUgPHNoaWppZThAZ21haWwuY29tPgorTToJS2FuZyBZb25nIDxrYW5neW9uZ0B0ZWxlZ2VudC5jb20+CitNOglaaGFuZyBYaWFvYmluZyA8eGJ6aGFuZ0B0ZWxlZ2VudC5jb20+CitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMAorCiBTQzEyMDAgV0RUIERSSVZFUgogTToJWndhbmUgTXdhaWthbWJvIDx6d2FuZUBhcm0ubGludXgub3JnLnVrPgogUzoJTWFpbnRhaW5lZApAQCAtNTAzNCw3ICs1MDc3LDcgQEAKIAogU09OWSBWQUlPIENPTlRST0wgREVWSUNFIERSSVZFUgogTToJTWF0dGlhIERvbmdpbGkgPG1hbGF0dGlhQGxpbnV4Lml0PgotTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3LmxpbnV4Lml0L35tYWxhdHRpYS93aWtpL2luZGV4LnBocC9Tb255X2RyaXZlcnMKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vbGFwdG9wcy9zb255LWxhcHRvcC50eHQKQEAgLTUyNDAsNiArNTI4Myw3IEBACiBUSElOS1BBRCBBQ1BJIEVYVFJBUyBEUklWRVIKIE06CUhlbnJpcXVlIGRlIE1vcmFlcyBIb2xzY2h1aCA8aWJtLWFjcGlAaG1oLmVuZy5icj4KIEw6CWlibS1hY3BpLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9pYm0tYWNwaS5zb3VyY2Vmb3JnZS5uZXQKIFc6CWh0dHA6Ly90aGlua3dpa2kub3JnL3dpa2kvSWJtLWFjcGkKIFQ6CWdpdCBnaXQ6Ly9yZXBvLm9yLmN6L2xpbnV4LTIuNi9saW51eC1hY3BpLTIuNi9pYm0tYWNwaS0yLjYuZ2l0CkBAIC01MjkzLDEwICs1MzM3LDEyIEBACiAKIFRPUFNUQVIgTEFQVE9QIEVYVFJBUyBEUklWRVIKIE06CUhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+CitMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9wc3Rhci1sYXB0b3AuYwogCiBUT1NISUJBIEFDUEkgRVhUUkFTIERSSVZFUgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU9ycGhhbgogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMKIApAQCAtNjAyNCw2ICs2MDcwLDEyIEBACiBGOglEb2N1bWVudGF0aW9uL3g4Ni8KIEY6CWFyY2gveDg2LwogCitYODYgUExBVEZPUk0gRFJJVkVSUworTToJTWF0dGhldyBHYXJyZXR0IDxtamdAcmVkaGF0LmNvbT4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL3BsYXRmb3JtL3g4NgorCiBYRU4gSFlQRVJWSVNPUiBJTlRFUkZBQ0UKIE06CUplcmVteSBGaXR6aGFyZGluZ2UgPGplcmVteUB4ZW5zb3VyY2UuY29tPgogTToJQ2hyaXMgV3JpZ2h0IDxjaHJpc3dAc291cy1zb2wub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9LY29uZmlnIGIvYXJjaC9LY29uZmlnCmluZGV4IDlkMDU1YjQuLjIxNWU0NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvS2NvbmZpZworKysgYi9hcmNoL0tjb25maWcKQEAgLTMsMTEgKzMsOSBAQAogIwogCiBjb25maWcgT1BST0ZJTEUKLQl0cmlzdGF0ZSAiT1Byb2ZpbGUgc3lzdGVtIHByb2ZpbGluZyAoRVhQRVJJTUVOVEFMKSIKKwl0cmlzdGF0ZSAiT1Byb2ZpbGUgc3lzdGVtIHByb2ZpbGluZyIKIAlkZXBlbmRzIG9uIFBST0ZJTElORwogCWRlcGVuZHMgb24gSEFWRV9PUFJPRklMRQotCWRlcGVuZHMgb24gVFJBQ0lOR19TVVBQT1JUCi0Jc2VsZWN0IFRSQUNJTkcKIAlzZWxlY3QgUklOR19CVUZGRVIKIAlzZWxlY3QgUklOR19CVUZGRVJfQUxMT1dfU1dBUAogCWhlbHAKQEAgLTE3LDIwICsxNSw2IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBPUFJPRklMRV9JQlMKLQlib29sICJPUHJvZmlsZSBBTUQgSUJTIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVmYXVsdCBuCi0JZGVwZW5kcyBvbiBPUFJPRklMRSAmJiBTTVAgJiYgWDg2Ci0JaGVscAotICAgICAgICAgIEluc3RydWN0aW9uLUJhc2VkIFNhbXBsaW5nIChJQlMpIGlzIGEgbmV3IHByb2ZpbGluZwotICAgICAgICAgIHRlY2huaXF1ZSB0aGF0IHByb3ZpZGVzIHJpY2gsIHByZWNpc2UgcHJvZ3JhbSBwZXJmb3JtYW5jZQotICAgICAgICAgIGluZm9ybWF0aW9uLiBJQlMgaXMgaW50cm9kdWNlZCBieSBBTUQgRmFtaWx5MTBoIHByb2Nlc3NvcnMKLSAgICAgICAgICAoQU1EIE9wdGVyb24gUXVhZC1Db3JlIHByb2Nlc3NvciAiQmFyY2Vsb25hIikgdG8gb3ZlcmNvbWUKLSAgICAgICAgICB0aGUgbGltaXRhdGlvbnMgb2YgY29udmVudGlvbmFsIHBlcmZvcm1hbmNlIGNvdW50ZXIKLSAgICAgICAgICBzYW1wbGluZy4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIE9QUk9GSUxFX0VWRU5UX01VTFRJUExFWAogCWJvb2wgIk9Qcm9maWxlIG11bHRpcGxleGluZyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgogCWRlZmF1bHQgbgpAQCAtMTIxLDYgKzEwNSwxNCBAQAogY29uZmlnIFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTCiAJYm9vbAogCitjb25maWcgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJCisJYm9vbAorCWhlbHAKKwkgIFRoaXMgc3ltYm9sIHNob3VsZCBiZSBzZWxlY3RlZCBieSBhbiBhcmNoaXRlY3VyZSBpZiBpdCBzdXBwb3J0cworCSAgdGhlIEFQSSBuZWVkZWQgdG8gYWNjZXNzIHJlZ2lzdGVycyBhbmQgc3RhY2sgZW50cmllcyBmcm9tIHB0X3JlZ3MsCisJICBkZWNsYXJlZCBpbiBhc20vcHRyYWNlLmgKKwkgIEZvciBleGFtcGxlIHRoZSBrcHJvYmVzLWJhc2VkIGV2ZW50IHRyYWNlciBuZWVkcyB0aGlzIEFQSS4KKwogY29uZmlnIEhBVkVfQ0xLCiAJYm9vbAogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggM2YwYzU5Zi4uNzFhMjQzMiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTMyOSw3ICszMjksNyBAQAogICogdGFibGVzIGNvbnRhaW4gYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uCiAgKi8KIGV4dGVybiBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwKLQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQogewogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wY2kuYyBiL2FyY2gvYWxwaGEva2VybmVsL3BjaS5jCmluZGV4IGE5MWJhMjguLmM5YWI5NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3BjaS5jCkBAIC0xMjYsOCArMTI2LDggQEAKICNkZWZpbmUgTUIJCQkoMTAyNCpLQikKICNkZWZpbmUgR0IJCQkoMTAyNCpNQikKIAotdm9pZAotcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKK3Jlc291cmNlX3NpemVfdAorcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJICAgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRhdGE7CkBAIC0xODQsNyArMTg0LDcgQEAKIAkJfQogCX0KIAotCXJlcy0+c3RhcnQgPSBzdGFydDsKKwlyZXR1cm4gc3RhcnQ7CiB9CiAjdW5kZWYgS0IKICN1bmRlZiBNQgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggMTg0YTZiZC4uM2IxODEyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC0xMiw2ICsxMiw3IEBACiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IFJUQ19MSUIKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT04KKwlzZWxlY3QgR0VORVJJQ19BVE9NSUM2NCBpZiAoIUNQVV8zMnY2SykKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQogCXNlbGVjdCBIQVZFX0FSQ0hfS0dEQgogCXNlbGVjdCBIQVZFX0tQUk9CRVMgaWYgKCFYSVBfS0VSTkVMKQpAQCAtMjAsNiArMjEsOCBAQAogCXNlbGVjdCBIQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0daSVAKIAlzZWxlY3QgSEFWRV9LRVJORUxfTFpPCisJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFMKKwlzZWxlY3QgUEVSRl9VU0VfVk1BTExPQwogCWhlbHAKIAkgIFRoZSBBUk0gc2VyaWVzIGlzIGEgbGluZSBvZiBsb3ctcG93ZXItY29uc3VtcHRpb24gUklTQyBjaGlwIGRlc2lnbnMKIAkgIGxpY2Vuc2VkIGJ5IEFSTSBMdGQgYW5kIHRhcmdldGVkIGF0IGVtYmVkZGVkIGFwcGxpY2F0aW9ucyBhbmQKQEAgLTUyLDYgKzU1LDkgQEAKIAlib29sCiAJc2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SCiAKK2NvbmZpZyBIQVZFX1BST0NfQ1BVCisJYm9vbAorCiBjb25maWcgTk9fSU9QT1JUCiAJYm9vbAogCkBAIC0xNjEsNiArMTY3LDExIEBACiBjb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAJZGVmX2Jvb2wgeQogCitjb25maWcgQVJNX0wxX0NBQ0hFX1NISUZUXzYKKwlib29sCisJaGVscAorCSAgU2V0dGluZyBBUk0gTDEgY2FjaGUgbGluZSBzaXplIHRvIDY0IEJ5dGVzLgorCiBpZiBPUFJPRklMRQogCiBjb25maWcgT1BST0ZJTEVfQVJNVjYKQEAgLTU1MCwxMCArNTYxLDIwIEBACiAJICA8aHR0cDovL3d3dy5udXZvdG9uLmNvbS9ocS9lbnUvUHJvZHVjdEFuZFNhbGVzL1Byb2R1Y3RMaW5lcy8KIAkJQ29uc3VtZXJFbGVjdHJvbmljc0lDL0FSTU1pY3JvY29udHJvbGxlci9BUk1NaWNyb2NvbnRyb2xsZXI+CiAKK2NvbmZpZyBBUkNIX05VQzkzWAorCWJvb2wgIk51dm90b24gTlVDOTNYIENQVSIKKwlzZWxlY3QgQ1BVX0FSTTkyNlQKKwlzZWxlY3QgSEFWRV9DTEsKKwlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIE51dm90b24gKFdpbmJvbmQgbG9naWMgZGVwdC4pIE5VQzkzWCBNQ1UsVGhlIE5VQzkzWCBpcyBhCisJICBsb3ctcG93ZXIgYW5kIGhpZ2ggcGVyZm9ybWFuY2UgTVBFRy00L0pQRUcgbXVsdGltZWRpYSBjb250cm9sbGVyIGNoaXAuCisKIGNvbmZpZyBBUkNIX1BOWDQwMDgKIAlib29sICJQaGlsaXBzIE5leHBlcmlhIFBOWDQwMDggTW9iaWxlIgogCXNlbGVjdCBDUFVfQVJNOTI2VAogCXNlbGVjdCBIQVZFX0NMSworCXNlbGVjdCBDT01NT05fQ0xLREVWCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIFBoaWxpcHMgUE5YNDAwOCBtb2JpbGUgcGxhdGZvcm0uCiAKQEAgLTYzOCw2ICs2NTksNyBAQAogCXNlbGVjdCBHRU5FUklDX0dQSU8KIAlzZWxlY3QgSEFWRV9DTEsKIAlzZWxlY3QgQ1BVX1Y3CisJc2VsZWN0IEFSTV9MMV9DQUNIRV9TSElGVF82CiAJaGVscAogCSAgU2Ftc3VuZyBTNVBDMVhYIHNlcmllcyBiYXNlZCBzeXN0ZW1zCiAKQEAgLTc4NSw2ICs4MDcsOCBAQAogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtbnM5eHh4L0tjb25maWciCiAKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC1udWM5M3gvS2NvbmZpZyIKKwogc291cmNlICJhcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZyIKIAogc291cmNlICJhcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWciCkBAIC04NjcsNiArODkxLDExIEBACiAJZGVwZW5kcyBvbiBDUFVfWFNDQUxFICYmICFYU0NBTEVfUE1VX1RJTUVSCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBDUFVfSEFTX1BNVQorCWRlcGVuZHMgb24gQ1BVX1Y2IHx8IENQVV9WNyB8fCBYU0NBTEVfUE1VCisJZGVmYXVsdCB5CisJYm9vbAorCiBpZiAhTU1VCiBzb3VyY2UgImFyY2gvYXJtL0tjb25maWctbm9tbXUiCiBlbmRpZgpAQCAtOTIxLDYgKzk1MCwxOSBAQAogCSAgQUNUTFIgcmVnaXN0ZXIuIE5vdGUgdGhhdCBzZXR0aW5nIHNwZWNpZmljIGJpdHMgaW4gdGhlIEFDVExSIHJlZ2lzdGVyCiAJICBtYXkgbm90IGJlIGF2YWlsYWJsZSBpbiBub24tc2VjdXJlIG1vZGUuCiAKK2NvbmZpZyBQTDMxMF9FUlJBVEFfNTg4MzY5CisJYm9vbCAiQ2xlYW4gJiBJbnZhbGlkYXRlIG1haW50ZW5hbmNlIG9wZXJhdGlvbnMgZG8gbm90IGludmFsaWRhdGUgY2xlYW4gbGluZXMiCisJZGVwZW5kcyBvbiBDQUNIRV9MMlgwICYmIEFSQ0hfT01BUDQKKwloZWxwCisJICAgVGhlIFBMMzEwIEwyIGNhY2hlIGNvbnRyb2xsZXIgaW1wbGVtZW50cyB0aHJlZSB0eXBlcyBvZiBDbGVhbiAmCisJICAgSW52YWxpZGF0ZSBtYWludGVuYW5jZSBvcGVyYXRpb25zOiBieSBQaHlzaWNhbCBBZGRyZXNzCisJICAgKG9mZnNldCAweDdGMCksIGJ5IEluZGV4L1dheSAoMHg3RjgpIGFuZCBieSBXYXkgKDB4N0ZDKS4KKwkgICBUaGV5IGFyZSBhcmNoaXRlY3R1cmFsbHkgZGVmaW5lZCB0byBiZWhhdmUgYXMgdGhlIGV4ZWN1dGlvbiBvZiBhCisJICAgY2xlYW4gb3BlcmF0aW9uIGZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5IGFuIGludmFsaWRhdGUgb3BlcmF0aW9uLAorCSAgIGJvdGggcGVyZm9ybWluZyB0byB0aGUgc2FtZSBtZW1vcnkgbG9jYXRpb24uIFRoaXMgZnVuY3Rpb25hbGl0eQorCSAgIGlzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50ZWQgaW4gUEwzMTAgYXMgY2xlYW4gbGluZXMgYXJlIG5vdAorCSAgIGludmFsaWRhdGVkIGFzIGEgcmVzdWx0IG9mIHRoZXNlIG9wZXJhdGlvbnMuIE5vdGUgdGhhdCB0aGlzIGVycmF0YQorCSAgIHVzZXMgVGV4YXMgSW5zdHJ1bWVudCdzIHNlY3VyZSBtb25pdG9yIGFwaS4KIGVuZG1lbnUKIAogc291cmNlICJhcmNoL2FybS9jb21tb24vS2NvbmZpZyIKQEAgLTExNzEsNiArMTIxMywxNCBAQAogCWRlcGVuZHMgb24gSElHSE1FTQogCWRlcGVuZHMgb24gIU9VVEVSX0NBQ0hFCiAKK2NvbmZpZyBIV19QRVJGX0VWRU5UUworCWJvb2wgIkVuYWJsZSBoYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVyIHN1cHBvcnQgZm9yIHBlcmYgZXZlbnRzIgorCWRlcGVuZHMgb24gUEVSRl9FVkVOVFMgJiYgQ1BVX0hBU19QTVUgJiYgKENQVV9WNiB8fCBDUFVfVjcpCisJZGVmYXVsdCB5CisJaGVscAorCSAgRW5hYmxlIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXIgc3VwcG9ydCBmb3IgcGVyZiBldmVudHMuIElmCisJICBkaXNhYmxlZCwgcGVyZiBldmVudHMgd2lsbCB1c2Ugc29mdHdhcmUgZXZlbnRzIG9ubHkuCisKIHNvdXJjZSAibW0vS2NvbmZpZyIKIAogY29uZmlnIExFRFMKQEAgLTEyMzAsNiArMTI4MCw3IEBACiAJYm9vbAogCWRlcGVuZHMgb24gQ1BVX0NQMTVfTU1VCiAJZGVmYXVsdCB5IGlmICFBUkNIX0VCU0ExMTAKKwlzZWxlY3QgSEFWRV9QUk9DX0NQVSBpZiBQUk9DX0ZTCiAJaGVscAogCSAgQVJNIHByb2Nlc3NvcnMgY2Fubm90IGZldGNoL3N0b3JlIGluZm9ybWF0aW9uIHdoaWNoIGlzIG5vdAogCSAgbmF0dXJhbGx5IGFsaWduZWQgb24gdGhlIGJ1cywgaS5lLiwgYSA0IGJ5dGUgZmV0Y2ggbXVzdCBzdGFydCBhdCBhbgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCAzNTZkNzAyLi44MWY1NGNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtMTcxLDYgKzE3MSw3IEBACiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfVTg1MDApCQk6PSB1eDUwMAogbWFjaGluZS0kKENPTkZJR19BUkNIX1ZFUlNBVElMRSkJOj0gdmVyc2F0aWxlCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfVzkwWDkwMCkJCTo9IHc5MHg5MDAKK21hY2hpbmUtJChDT05GSUdfQVJDSF9OVUM5M1gpCQk6PSBudWM5M3gKIG1hY2hpbmUtJChDT05GSUdfRk9PVEJSSURHRSkJCTo9IGZvb3RicmlkZ2UKIAogIyBQbGF0Zm9ybSBkaXJlY3RvcnkgbmFtZS4gIFRoaXMgbGlzdCBpcyBzb3J0ZWQgYWxwaGFudW1lcmljYWxseQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDJkNGQ4OGIuLjk3Yzg5ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTUsNyArNSw3IEBACiAjCiAKIEhFQUQJPSBoZWFkLm8KLU9CSlMJPSBtaXNjLm8KK09CSlMJPSBtaXNjLm8gZGVjb21wcmVzcy5vCiBGT05UQwk9ICQoc3JjdHJlZSkvZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnRfYWNvcm5fOHg4LmMKIAogIwpAQCAtMTA2LDEwICsxMDYsNiBAQAogJChvYmopL2xpYjFmdW5jcy5TOiAkKHNyY3RyZWUpL2FyY2gvJChTUkNBUkNIKS9saWIvbGliMWZ1bmNzLlMgRk9SQ0UKIAkkKGNhbGwgY21kLHNoaXBwZWQpCiAKLSMgRG9uJ3QgYWxsb3cgYW55IHN0YXRpYyBkYXRhIGluIG1pc2Mubywgd2hpY2gKLSMgd291bGQgb3RoZXJ3aXNlIG1lc3MgdXAgb3VyIEdPVCB0YWJsZQotQ0ZMQUdTX21pc2MubyA6PSAtRHN0YXRpYz0KLQogJChvYmopL3ZtbGludXg6ICQob2JqKS92bWxpbnV4LmxkcyAkKG9iaikvJChIRUFEKSAkKG9iaikvcGlnZ3kuJChzdWZmaXhfeSkubyBcCiAJIAkkKGFkZHByZWZpeCAkKG9iaikvLCAkKE9CSlMpKSAkKGxpYjFmdW5jcykgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYTM4MmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jCkBAIC0wLDAgKzEsNDUgQEAKKyNkZWZpbmUgX0xJTlVYX1NUUklOR19IXworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4JLyogZm9yIGlubGluZSAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CS8qIGZvciBzaXplX3QgKi8KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogZm9yIE5VTEwgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgorCitleHRlcm4gdW5zaWduZWQgbG9uZyBmcmVlX21lbV9wdHI7CitleHRlcm4gdW5zaWduZWQgbG9uZyBmcmVlX21lbV9lbmRfcHRyOworZXh0ZXJuIHZvaWQgZXJyb3IoY2hhciAqKTsKKworI2RlZmluZSBTVEFUSUMgc3RhdGljCisKKyNkZWZpbmUgQVJDSF9IQVNfREVDT01QX1dET0cKKworLyogRGlhZ25vc3RpYyBmdW5jdGlvbnMgKi8KKyNpZmRlZiBERUJVRworIyAgZGVmaW5lIEFzc2VydChjb25kLG1zZykge2lmKCEoY29uZCkpIGVycm9yKG1zZyk7fQorIyAgZGVmaW5lIFRyYWNlKHgpIGZwcmludGYgeAorIyAgZGVmaW5lIFRyYWNldih4KSB7aWYgKHZlcmJvc2UpIGZwcmludGYgeCA7fQorIyAgZGVmaW5lIFRyYWNldnYoeCkge2lmICh2ZXJib3NlPjEpIGZwcmludGYgeCA7fQorIyAgZGVmaW5lIFRyYWNlYyhjLHgpIHtpZiAodmVyYm9zZSAmJiAoYykpIGZwcmludGYgeCA7fQorIyAgZGVmaW5lIFRyYWNlY3YoYyx4KSB7aWYgKHZlcmJvc2U+MSAmJiAoYykpIGZwcmludGYgeCA7fQorI2Vsc2UKKyMgIGRlZmluZSBBc3NlcnQoY29uZCxtc2cpCisjICBkZWZpbmUgVHJhY2UoeCkKKyMgIGRlZmluZSBUcmFjZXYoeCkKKyMgIGRlZmluZSBUcmFjZXZ2KHgpCisjICBkZWZpbmUgVHJhY2VjKGMseCkKKyMgIGRlZmluZSBUcmFjZWN2KGMseCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0tFUk5FTF9HWklQCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfaW5mbGF0ZS5jIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfS0VSTkVMX0xaTworI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VubHpvLmMiCisjZW5kaWYKKwordm9pZCBkb19kZWNvbXByZXNzKHU4ICppbnB1dCwgaW50IGxlbiwgdTggKm91dHB1dCwgdm9pZCAoKmVycm9yKShjaGFyICp4KSkKK3sKKwlkZWNvbXByZXNzKGlucHV0LCBsZW4sIE5VTEwsIE5VTEwsIG91dHB1dCwgTlVMTCwgZXJyb3IpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKaW5kZXggNGZkZGM1MC4uOTliNzVhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCkBAIC0yMiwxMyArMjIsMTMgQEAKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19JQ0VEQ0MpCiAKICNpZmRlZiBDT05GSUdfQ1BVX1Y2Ci0JCS5tYWNybwlsb2Fkc3AsIHJiCisJCS5tYWNybwlsb2Fkc3AsIHJiLCB0bXAKIAkJLmVuZG0KIAkJLm1hY3JvCXdyaXRlYiwgY2gsIHJiCiAJCW1jcglwMTQsIDAsIFxjaCwgYzAsIGM1LCAwCiAJCS5lbmRtCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfVjcpCi0JCS5tYWNybwlsb2Fkc3AsIHJiCisJCS5tYWNybwlsb2Fkc3AsIHJiLCB0bXAKIAkJLmVuZG0KIAkJLm1hY3JvCXdyaXRlYiwgY2gsIHJiCiB3YWl0OgkJbXJjCXAxNCwgMCwgcGMsIGMwLCBjMSwgMApAQCAtMzYsMTMgKzM2LDEzIEBACiAJCW1jcglwMTQsIDAsIFxjaCwgYzAsIGM1LCAwCiAJCS5lbmRtCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfWFNDQUxFKQotCQkubWFjcm8JbG9hZHNwLCByYgorCQkubWFjcm8JbG9hZHNwLCByYiwgdG1wCiAJCS5lbmRtCiAJCS5tYWNybwl3cml0ZWIsIGNoLCByYgogCQltY3IJcDE0LCAwLCBcY2gsIGM4LCBjMCwgMAogCQkuZW5kbQogI2Vsc2UKLQkJLm1hY3JvCWxvYWRzcCwgcmIKKwkJLm1hY3JvCWxvYWRzcCwgcmIsIHRtcAogCQkuZW5kbQogCQkubWFjcm8Jd3JpdGViLCBjaCwgcmIKIAkJbWNyCXAxNCwgMCwgXGNoLCBjMSwgYzAsIDAKQEAgLTU4LDcgKzU4LDcgQEAKIAkJLmVuZG0KIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfU0ExMTAwKQotCQkubWFjcm8JbG9hZHNwLCByYgorCQkubWFjcm8JbG9hZHNwLCByYiwgdG1wCiAJCW1vdglccmIsICMweDgwMDAwMDAwCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCiAjaWZkZWYgQ09ORklHX0RFQlVHX0xMX1NFUjMKIAkJYWRkCVxyYiwgXHJiLCAjMHgwMDA1MDAwMAlAIFNlcjMKQEAgLTY3LDEzICs2NywxMyBAQAogI2VuZGlmCiAJCS5lbmRtCiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX1MzQzI0MTApCi0JCS5tYWNybyBsb2Fkc3AsIHJiCisJCS5tYWNybyBsb2Fkc3AsIHJiLCB0bXAKIAkJbW92CVxyYiwgIzB4NTAwMDAwMDAKIAkJYWRkCVxyYiwgXHJiLCAjMHg0MDAwICogQ09ORklHX1MzQ19MT1dMRVZFTF9VQVJUX1BPUlQKIAkJLmVuZG0KICNlbHNlCi0JCS5tYWNybwlsb2Fkc3AsCXJiCi0JCWFkZHJ1YXJ0IFxyYgorCQkubWFjcm8JbG9hZHNwLAlyYiwgdG1wCisJCWFkZHJ1YXJ0IFxyYiwgXHRtcAogCQkuZW5kbQogI2VuZGlmCiAjZW5kaWYKQEAgLTEwMjUsNyArMTAyNSw3IEBACiAJCXN0cmIJcjIsIFtyMywgcjFdCiAJCWIJMWIKIAotcHV0czoJCWxvYWRzcAlyMworcHV0czoJCWxvYWRzcAlyMywgcjEKIDE6CQlsZHJiCXIyLCBbcjBdLCAjMQogCQl0ZXEJcjIsICMwCiAJCW1vdmVxCXBjLCBscgpAQCAtMTA0Miw3ICsxMDQyLDcgQEAKIHB1dGM6CiAJCW1vdglyMiwgcjAKIAkJbW92CXIwLCAjMAotCQlsb2Fkc3AJcjMKKwkJbG9hZHNwCXIzLCByMQogCQliCTJiCiAKIG1lbWR1bXA6CW1vdglyMTIsIHIwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCA1NmEwZDExLi5kMzJiYzcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTIzLDggKzIzLDggQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgkvKiBmb3IgaW5saW5lICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JLyogZm9yIHNpemVfdCAqLwogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgkvKiBmb3IgTlVMTCAqLwotI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgogCiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCkBAIC0xMTcsNTcgKzExNyw3IEBACiAKICNlbmRpZgogCi0jZGVmaW5lIF9fcHRyX3Qgdm9pZCAqCi0KLSNkZWZpbmUgbWVtemVybyhzLG4pIF9fbWVtemVybyhzLG4pCi0KLS8qCi0gKiBPcHRpbWlzZWQgQyB2ZXJzaW9uIG9mIG1lbXplcm8gZm9yIHRoZSBBUk0uCi0gKi8KLXZvaWQgX19tZW16ZXJvIChfX3B0cl90IHMsIHNpemVfdCBuKQotewotCXVuaW9uIHsgdm9pZCAqdnA7IHVuc2lnbmVkIGxvbmcgKnVscDsgdW5zaWduZWQgY2hhciAqdWNwOyB9IHU7Ci0JaW50IGk7Ci0KLQl1LnZwID0gczsKLQotCWZvciAoaSA9IG4gPj4gNTsgaSA+IDA7IGktLSkgewotCQkqdS51bHArKyA9IDA7Ci0JCSp1LnVscCsrID0gMDsKLQkJKnUudWxwKysgPSAwOwotCQkqdS51bHArKyA9IDA7Ci0JCSp1LnVscCsrID0gMDsKLQkJKnUudWxwKysgPSAwOwotCQkqdS51bHArKyA9IDA7Ci0JCSp1LnVscCsrID0gMDsKLQl9Ci0KLQlpZiAobiAmIDEgPDwgNCkgewotCQkqdS51bHArKyA9IDA7Ci0JCSp1LnVscCsrID0gMDsKLQkJKnUudWxwKysgPSAwOwotCQkqdS51bHArKyA9IDA7Ci0JfQotCi0JaWYgKG4gJiAxIDw8IDMpIHsKLQkJKnUudWxwKysgPSAwOwotCQkqdS51bHArKyA9IDA7Ci0JfQotCi0JaWYgKG4gJiAxIDw8IDIpCi0JCSp1LnVscCsrID0gMDsKLQotCWlmIChuICYgMSA8PCAxKSB7Ci0JCSp1LnVjcCsrID0gMDsKLQkJKnUudWNwKysgPSAwOwotCX0KLQotCWlmIChuICYgMSkKLQkJKnUudWNwKysgPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIF9fcHRyX3QgbWVtY3B5KF9fcHRyX3QgX19kZXN0LCBfX2NvbnN0IF9fcHRyX3QgX19zcmMsCi0JCQkgICAgc2l6ZV90IF9fbikKK3ZvaWQgKm1lbWNweSh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiB7CiAJaW50IGkgPSAwOwogCXVuc2lnbmVkIGNoYXIgKmQgPSAodW5zaWduZWQgY2hhciAqKV9fZGVzdCwgKnMgPSAodW5zaWduZWQgY2hhciAqKV9fc3JjOwpAQCAtMjA0LDU5ICsxNTQsMjAgQEAKIC8qCiAgKiBnemlwIGRlbGFyYXRpb25zCiAgKi8KLSNkZWZpbmUgU1RBVElDIHN0YXRpYwotCi0vKiBEaWFnbm9zdGljIGZ1bmN0aW9ucyAqLwotI2lmZGVmIERFQlVHCi0jICBkZWZpbmUgQXNzZXJ0KGNvbmQsbXNnKSB7aWYoIShjb25kKSkgZXJyb3IobXNnKTt9Ci0jICBkZWZpbmUgVHJhY2UoeCkgZnByaW50ZiB4Ci0jICBkZWZpbmUgVHJhY2V2KHgpIHtpZiAodmVyYm9zZSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2V2dih4KSB7aWYgKHZlcmJvc2U+MSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2VjKGMseCkge2lmICh2ZXJib3NlICYmIChjKSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2VjdihjLHgpIHtpZiAodmVyYm9zZT4xICYmIChjKSkgZnByaW50ZiB4IDt9Ci0jZWxzZQotIyAgZGVmaW5lIEFzc2VydChjb25kLG1zZykKLSMgIGRlZmluZSBUcmFjZSh4KQotIyAgZGVmaW5lIFRyYWNldih4KQotIyAgZGVmaW5lIFRyYWNldnYoeCkKLSMgIGRlZmluZSBUcmFjZWMoYyx4KQotIyAgZGVmaW5lIFRyYWNlY3YoYyx4KQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGVycm9yKGNoYXIgKm0pOwotCiBleHRlcm4gY2hhciBpbnB1dF9kYXRhW107CiBleHRlcm4gY2hhciBpbnB1dF9kYXRhX2VuZFtdOwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciAqb3V0cHV0X2RhdGE7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBvdXRwdXRfcHRyOwordW5zaWduZWQgY2hhciAqb3V0cHV0X2RhdGE7Cit1bnNpZ25lZCBsb25nIG91dHB1dF9wdHI7CiAKLXN0YXRpYyB2b2lkIGVycm9yKGNoYXIgKm0pOwotCi1zdGF0aWMgdm9pZCBwdXRzdHIoY29uc3QgY2hhciAqKTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJlZV9tZW1fcHRyOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJlZV9tZW1fZW5kX3B0cjsKLQotI2lmZGVmIFNUQU5EQUxPTkVfREVCVUcKLSNkZWZpbmUgTk9fSU5GTEFURV9NQUxMT0MKLSNlbmRpZgotCi0jZGVmaW5lIEFSQ0hfSEFTX0RFQ09NUF9XRE9HCi0KLSNpZmRlZiBDT05GSUdfS0VSTkVMX0daSVAKLSNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc19pbmZsYXRlLmMiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19LRVJORUxfTFpPCi0jaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfdW5sem8uYyIKLSNlbmRpZgordW5zaWduZWQgbG9uZyBmcmVlX21lbV9wdHI7Cit1bnNpZ25lZCBsb25nIGZyZWVfbWVtX2VuZF9wdHI7CiAKICNpZm5kZWYgYXJjaF9lcnJvcgogI2RlZmluZSBhcmNoX2Vycm9yKHgpCiAjZW5kaWYKIAotc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqeCkKK3ZvaWQgZXJyb3IoY2hhciAqeCkKIHsKIAlhcmNoX2Vycm9yKHgpOwogCkBAIC0yNzIsNiArMTgzLDggQEAKIAllcnJvcigiQXR0ZW1wdGluZyBkaXZpc2lvbiBieSAwISIpOwogfQogCitleHRlcm4gdm9pZCBkb19kZWNvbXByZXNzKHU4ICppbnB1dCwgaW50IGxlbiwgdTggKm91dHB1dCwgdm9pZCAoKmVycm9yKShjaGFyICp4KSk7CisKICNpZm5kZWYgU1RBTkRBTE9ORV9ERUJVRwogCiB1bnNpZ25lZCBsb25nCkBAIC0yOTIsOCArMjA1LDggQEAKIAlvdXRwdXRfcHRyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHRtcCk7CiAKIAlwdXRzdHIoIlVuY29tcHJlc3NpbmcgTGludXguLi4iKTsKLQlkZWNvbXByZXNzKGlucHV0X2RhdGEsIGlucHV0X2RhdGFfZW5kIC0gaW5wdXRfZGF0YSwKLQkJCU5VTEwsIE5VTEwsIG91dHB1dF9kYXRhLCBOVUxMLCBlcnJvcik7CisJZG9fZGVjb21wcmVzcyhpbnB1dF9kYXRhLCBpbnB1dF9kYXRhX2VuZCAtIGlucHV0X2RhdGEsCisJCQlvdXRwdXRfZGF0YSwgZXJyb3IpOwogCXB1dHN0cigiIGRvbmUsIGJvb3RpbmcgdGhlIGtlcm5lbC5cbiIpOwogCXJldHVybiBvdXRwdXRfcHRyOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluCmluZGV4IGE1OTI0YjkuLjdjYTllY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbgorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4KQEAgLTE0LDYgKzE0LDEzIEBACiAgIC9ESVNDQVJELyA6IHsKICAgICAqKC5BUk0uZXhpZHgqKQogICAgICooLkFSTS5leHRhYiopCisgICAgLyoKKyAgICAgKiBEaXNjYXJkIGFueSByL3cgZGF0YSAtIHRoaXMgcHJvZHVjZXMgYSBsaW5rIGVycm9yIGlmIHdlIGhhdmUgYW55LAorICAgICAqIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBQSUMgZGVjb21wcmVzc2lvbi4gIExvY2FsIGRhdGEgZ2VuZXJhdGVzCisgICAgICogR09UT0ZGIHJlbG9jYXRpb25zLCB3aGljaCBwcmV2ZW50cyBpdCBiZWluZyByZWxvY2F0ZWQgaW5kZXBlbmRlbnRseQorICAgICAqIG9mIHRoZSB0ZXh0L2dvdCBzZWdtZW50cy4KKyAgICAgKi8KKyAgICAqKC5kYXRhKQogICB9CiAKICAgLiA9IFRFWFRfU1RBUlQ7CkBAIC00MCw3ICs0Nyw2IEBACiAgIC5nb3QJCQk6IHsgKiguZ290KSB9CiAgIF9nb3RfZW5kID0gLjsKICAgLmdvdC5wbHQJCTogeyAqKC5nb3QucGx0KSB9Ci0gIC5kYXRhCQkJOiB7ICooLmRhdGEpIH0KICAgX2VkYXRhID0gLjsKIAogICAuID0gQlNTX1NUQVJUOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2Nsa2Rldi5jIGIvYXJjaC9hcm0vY29tbW9uL2Nsa2Rldi5jCmluZGV4IGFhZTViYzAuLjQ0NmI2OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9jbGtkZXYuYworKysgYi9hcmNoL2FybS9jb21tb24vY2xrZGV2LmMKQEAgLTk5LDYgKzk5LDE2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNsa2Rldl9hZGQpOwogCit2b2lkIF9faW5pdCBjbGtkZXZfYWRkX3RhYmxlKHN0cnVjdCBjbGtfbG9va3VwICpjbCwgc2l6ZV90IG51bSkKK3sKKwltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOworCXdoaWxlIChudW0tLSkgeworCQlsaXN0X2FkZF90YWlsKCZjbC0+bm9kZSwgJmNsb2Nrcyk7CisJCWNsKys7CisJfQorCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKK30KKwogI2RlZmluZSBNQVhfREVWX0lECTIwCiAjZGVmaW5lIE1BWF9DT05fSUQJMTYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jIGIvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jCmluZGV4IGNjMzJjMWUuLmNjMGE5MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYworKysgYi9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCQkgKiBXZSBkb24ndCBuZWVkIHRvIHN5bmMgdGhlIERNQSBidWZmZXIgc2luY2UKIAkJICogaXQgd2FzIGFsbG9jYXRlZCB2aWEgdGhlIGNvaGVyZW50IGFsbG9jYXRvcnMuCiAJCSAqLwotCQlkbWFfY2FjaGVfbWFpbnQocHRyLCBzaXplLCBkaXIpOworCQlfX2RtYV9zaW5nbGVfY3B1X3RvX2RldihwdHIsIHNpemUsIGRpcik7CiAJfQogCiAJcmV0dXJuIGRtYV9hZGRyOwpAQCAtMzE1LDYgKzMxNSw4IEBACiAJCQlfX2NwdWNfZmx1c2hfZGNhY2hlX2FyZWEocHRyLCBzaXplKTsKIAkJfQogCQlmcmVlX3NhZmVfYnVmZmVyKGRldi0+YXJjaGRhdGEuZG1hYm91bmNlLCBidWYpOworCX0gZWxzZSB7CisJCV9fZG1hX3NpbmdsZV9kZXZfdG9fY3B1KGRtYV90b192aXJ0KGRldiwgZG1hX2FkZHIpLCBzaXplLCBkaXIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL3ZpYy5jIGIvYXJjaC9hcm0vY29tbW9uL3ZpYy5jCmluZGV4IGYyMzI5NDEuLjFjZjk5OWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi92aWMuYworKysgYi9hcmNoL2FybS9jb21tb24vdmljLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTI4LDQ4ICsyOSw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3ZpYy5oPgogCi1zdGF0aWMgdm9pZCB2aWNfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXZvaWQgX19pb21lbSAqYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JaXJxICY9IDMxOwotCXdyaXRlbCgxIDw8IGlycSwgYmFzZSArIFZJQ19JTlRfRU5BQkxFX0NMRUFSKTsKLQkvKiBtb3Jlb3ZlciwgY2xlYXIgdGhlIHNvZnQtdHJpZ2dlcmVkLCBpbiBjYXNlIGl0IHdhcyB0aGUgcmVhc29uICovCi0Jd3JpdGVsKDEgPDwgaXJxLCBiYXNlICsgVklDX0lOVF9TT0ZUX0NMRUFSKTsKLX0KLQotc3RhdGljIHZvaWQgdmljX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jdm9pZCBfX2lvbWVtICpiYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQlpcnEgJj0gMzE7Ci0Jd3JpdGVsKDEgPDwgaXJxLCBiYXNlICsgVklDX0lOVF9FTkFCTEVfQ0xFQVIpOwotfQotCi1zdGF0aWMgdm9pZCB2aWNfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXZvaWQgX19pb21lbSAqYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JaXJxICY9IDMxOwotCXdyaXRlbCgxIDw8IGlycSwgYmFzZSArIFZJQ19JTlRfRU5BQkxFKTsKLX0KLQotLyoqCi0gKiB2aWNfaW5pdDIgLSBjb21tb24gaW5pdGlhbGlzYXRpb24gY29kZQotICogQGJhc2U6IEJhc2Ugb2YgdGhlIFZJQy4KLSAqCi0gKiBDb21tb24gaW5pdGlhbGlzYXRpb24gY29kZSBmb3IgcmVnaXN0ZXJhdGlvbgotICogYW5kIHJlc3VtZS4KLSovCi1zdGF0aWMgdm9pZCB2aWNfaW5pdDIodm9pZCBfX2lvbWVtICpiYXNlKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJdm9pZCBfX2lvbWVtICpyZWcgPSBiYXNlICsgVklDX1ZFQ1RfQ05UTDAgKyAoaSAqIDQpOwotCQl3cml0ZWwoVklDX1ZFQ1RfQ05UTF9FTkFCTEUgfCBpLCByZWcpOwotCX0KLQotCXdyaXRlbCgzMiwgYmFzZSArIFZJQ19QTDE5MF9ERUZfVkVDVF9BRERSKTsKLX0KLQogI2lmIGRlZmluZWQoQ09ORklHX1BNKQogLyoqCiAgKiBzdHJ1Y3QgdmljX2RldmljZSAtIFZJQyBQTSBkZXZpY2UKQEAgLTk5LDEzICs1OCwzNCBAQAogLyogd2UgY2Fubm90IGFsbG9jYXRlIG1lbW9yeSB3aGVuIFZJQ3MgYXJlIGluaXRpYWxseSByZWdpc3RlcmVkICovCiBzdGF0aWMgc3RydWN0IHZpY19kZXZpY2UgdmljX2RldmljZXNbQ09ORklHX0FSTV9WSUNfTlJdOwogCitzdGF0aWMgaW50IHZpY19pZDsKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgdmljX2RldmljZSAqdG9fdmljKHN0cnVjdCBzeXNfZGV2aWNlICpzeXMpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihzeXMsIHN0cnVjdCB2aWNfZGV2aWNlLCBzeXNkZXYpOwogfQorI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCi1zdGF0aWMgaW50IHZpY19pZDsKKy8qKgorICogdmljX2luaXQyIC0gY29tbW9uIGluaXRpYWxpc2F0aW9uIGNvZGUKKyAqIEBiYXNlOiBCYXNlIG9mIHRoZSBWSUMuCisgKgorICogQ29tbW9uIGluaXRpYWxpc2F0aW9uIGNvZGUgZm9yIHJlZ2lzdGVyYXRpb24KKyAqIGFuZCByZXN1bWUuCisqLworc3RhdGljIHZvaWQgdmljX2luaXQyKHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwlpbnQgaTsKIAorCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCXZvaWQgX19pb21lbSAqcmVnID0gYmFzZSArIFZJQ19WRUNUX0NOVEwwICsgKGkgKiA0KTsKKwkJd3JpdGVsKFZJQ19WRUNUX0NOVExfRU5BQkxFIHwgaSwgcmVnKTsKKwl9CisKKwl3cml0ZWwoMzIsIGJhc2UgKyBWSUNfUEwxOTBfREVGX1ZFQ1RfQUREUik7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19QTSkKIHN0YXRpYyBpbnQgdmljX2NsYXNzX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2aWNfZGV2aWNlICp2aWMgPSB0b192aWMoZGV2KTsKQEAgLTE1OSwzMSArMTM5LDYgQEAKIH07CiAKIC8qKgotICogdmljX3BtX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgYSBWSUMgZm9yIGxhdGVyIHBvd2VyIG1hbmFnZW1lbnQgY29udHJvbAotICogQGJhc2U6IFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFZJQy4KLSAqIEBpcnE6IFRoZSBiYXNlIElSUSBmb3IgdGhlIFZJQy4KLSAqIEByZXN1bWVfc291cmNlczogYml0bWFzayBvZiBpbnRlcnJ1cHRzIGFsbG93ZWQgZm9yIHJlc3VtZSBzb3VyY2VzLgotICoKLSAqIFJlZ2lzdGVyIHRoZSBWSUMgd2l0aCB0aGUgc3lzdGVtIGRldmljZSB0cmVlIHNvIHRoYXQgaXQgY2FuIGJlIG5vdGlmaWVkCi0gKiBvZiBzdXNwZW5kIGFuZCByZXN1bWUgcmVxdWVzdHMgYW5kIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGFjdGlvbnMgYXJlCi0gKiB0YWtlbiB0byByZS1pbnN0YXRlIHRoZSBzZXR0aW5ncyBvbiByZXN1bWUuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCB2aWNfcG1fcmVnaXN0ZXIodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBpbnQgaXJxLCB1MzIgcmVzdW1lX3NvdXJjZXMpCi17Ci0Jc3RydWN0IHZpY19kZXZpY2UgKnY7Ci0KLQlpZiAodmljX2lkID49IEFSUkFZX1NJWkUodmljX2RldmljZXMpKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0b28gZmV3IFZJQ3MsIGluY3JlYXNlIENPTkZJR19BUk1fVklDX05SXG4iLCBfX2Z1bmNfXyk7Ci0JZWxzZSB7Ci0JCXYgPSAmdmljX2RldmljZXNbdmljX2lkXTsKLQkJdi0+YmFzZSA9IGJhc2U7Ci0JCXYtPnJlc3VtZV9zb3VyY2VzID0gcmVzdW1lX3NvdXJjZXM7Ci0JCXYtPmlycSA9IGlycTsKLQkJdmljX2lkKys7Ci0JfQotfQotCi0vKioKICAqIHZpY19wbV9pbml0IC0gaW5pdGljYWxsIHRvIHJlZ2lzdGVyIFZJQyBwbQogICoKICAqIFRoaXMgaXMgY2FsbGVkIHZpYSBsYXRlX2luaXRjYWxsKCkgdG8gcmVnaXN0ZXIKQEAgLTIxOSw5ICsxNzQsNjAgQEAKIAogCXJldHVybiAwOwogfQotCiBsYXRlX2luaXRjYWxsKHZpY19wbV9pbml0KTsKIAorLyoqCisgKiB2aWNfcG1fcmVnaXN0ZXIgLSBSZWdpc3RlciBhIFZJQyBmb3IgbGF0ZXIgcG93ZXIgbWFuYWdlbWVudCBjb250cm9sCisgKiBAYmFzZTogVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgVklDLgorICogQGlycTogVGhlIGJhc2UgSVJRIGZvciB0aGUgVklDLgorICogQHJlc3VtZV9zb3VyY2VzOiBiaXRtYXNrIG9mIGludGVycnVwdHMgYWxsb3dlZCBmb3IgcmVzdW1lIHNvdXJjZXMuCisgKgorICogUmVnaXN0ZXIgdGhlIFZJQyB3aXRoIHRoZSBzeXN0ZW0gZGV2aWNlIHRyZWUgc28gdGhhdCBpdCBjYW4gYmUgbm90aWZpZWQKKyAqIG9mIHN1c3BlbmQgYW5kIHJlc3VtZSByZXF1ZXN0cyBhbmQgZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgYWN0aW9ucyBhcmUKKyAqIHRha2VuIHRvIHJlLWluc3RhdGUgdGhlIHNldHRpbmdzIG9uIHJlc3VtZS4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHZpY19wbV9yZWdpc3Rlcih2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBpcnEsIHUzMiByZXN1bWVfc291cmNlcykKK3sKKwlzdHJ1Y3QgdmljX2RldmljZSAqdjsKKworCWlmICh2aWNfaWQgPj0gQVJSQVlfU0laRSh2aWNfZGV2aWNlcykpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHRvbyBmZXcgVklDcywgaW5jcmVhc2UgQ09ORklHX0FSTV9WSUNfTlJcbiIsIF9fZnVuY19fKTsKKwllbHNlIHsKKwkJdiA9ICZ2aWNfZGV2aWNlc1t2aWNfaWRdOworCQl2LT5iYXNlID0gYmFzZTsKKwkJdi0+cmVzdW1lX3NvdXJjZXMgPSByZXN1bWVfc291cmNlczsKKwkJdi0+aXJxID0gaXJxOworCQl2aWNfaWQrKzsKKwl9Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHZpY19wbV9yZWdpc3Rlcih2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBpcnEsIHUzMiBhcmcxKSB7IH0KKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIHZvaWQgdmljX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCWlycSAmPSAzMTsKKwl3cml0ZWwoMSA8PCBpcnEsIGJhc2UgKyBWSUNfSU5UX0VOQUJMRV9DTEVBUik7CisJLyogbW9yZW92ZXIsIGNsZWFyIHRoZSBzb2Z0LXRyaWdnZXJlZCwgaW4gY2FzZSBpdCB3YXMgdGhlIHJlYXNvbiAqLworCXdyaXRlbCgxIDw8IGlycSwgYmFzZSArIFZJQ19JTlRfU09GVF9DTEVBUik7Cit9CisKK3N0YXRpYyB2b2lkIHZpY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJaXJxICY9IDMxOworCXdyaXRlbCgxIDw8IGlycSwgYmFzZSArIFZJQ19JTlRfRU5BQkxFX0NMRUFSKTsKK30KKworc3RhdGljIHZvaWQgdmljX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCWlycSAmPSAzMTsKKwl3cml0ZWwoMSA8PCBpcnEsIGJhc2UgKyBWSUNfSU5UX0VOQUJMRSk7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19QTSkKIHN0YXRpYyBzdHJ1Y3QgdmljX2RldmljZSAqdmljX2Zyb21faXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAgICAgICAgIHN0cnVjdCB2aWNfZGV2aWNlICp2ID0gdmljX2RldmljZXM7CkBAIC0yNTUsMTAgKzI2MSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KLQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCB2aWNfcG1fcmVnaXN0ZXIodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBpbnQgaXJxLCB1MzIgYXJnMSkgeyB9Ci0KICNkZWZpbmUgdmljX3NldF93YWtlIE5VTEwKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIApAQCAtMjcwLDgwICsyNzMsNiBAQAogCS5zZXRfd2FrZSA9IHZpY19zZXRfd2FrZSwKIH07CiAKLS8qIFRoZSBQTDE5MCBjZWxsIGZyb20gQVJNIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IFNULCBzbyBoYW5kbGUgYm90aCBoZXJlICovCi1zdGF0aWMgdm9pZCB2aWtfaW5pdF9zdCh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBpcnFfc3RhcnQsCi0JCQkgdTMyIHZpY19zb3VyY2VzKTsKLQotLyoqCi0gKiB2aWNfaW5pdCAtIGluaXRpYWxpc2UgYSB2ZWN0b3JlZCBpbnRlcnJ1cHQgY29udHJvbGxlcgotICogQGJhc2U6IGlvbWVtIGJhc2UgYWRkcmVzcwotICogQGlycV9zdGFydDogc3RhcnRpbmcgaW50ZXJydXB0IG51bWJlciwgbXVzdCBiZSBtdWxpcGxlIG9mIDMyCi0gKiBAdmljX3NvdXJjZXM6IGJpdG1hc2sgb2YgaW50ZXJydXB0IHNvdXJjZXMgdG8gYWxsb3cKLSAqIEByZXN1bWVfc291cmNlczogYml0bWFzayBvZiBpbnRlcnJ1cHQgc291cmNlcyB0byBhbGxvdyBmb3IgcmVzdW1lCi0gKi8KLXZvaWQgX19pbml0IHZpY19pbml0KHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgaW50IGlycV9zdGFydCwKLQkJICAgICB1MzIgdmljX3NvdXJjZXMsIHUzMiByZXN1bWVfc291cmNlcykKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1MzIgY2VsbGlkID0gMDsKLQllbnVtIGFtYmFfdmVuZG9yIHZlbmRvcjsKLQotCS8qIElkZW50aWZ5IHdoaWNoIFZJQyBjZWxsIHRoaXMgb25lIGlzLCBieSByZWFkaW5nIHRoZSBJRCAqLwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJdTMyIGFkZHIgPSAoKHUzMiliYXNlICYgUEFHRV9NQVNLKSArIDB4ZmUwICsgKGkgKiA0KTsKLQkJY2VsbGlkIHw9IChyZWFkbChhZGRyKSAmIDB4ZmYpIDw8ICg4ICogaSk7Ci0JfQotCXZlbmRvciA9IChjZWxsaWQgPj4gMTIpICYgMHhmZjsKLQlwcmludGsoS0VSTl9JTkZPICJWSUMgQCVwOiBpZCAweCUwOHgsIHZlbmRvciAweCUwMnhcbiIsCi0JICAgICAgIGJhc2UsIGNlbGxpZCwgdmVuZG9yKTsKLQotCXN3aXRjaCh2ZW5kb3IpIHsKLQljYXNlIEFNQkFfVkVORE9SX1NUOgotCQl2aWtfaW5pdF9zdChiYXNlLCBpcnFfc3RhcnQsIHZpY19zb3VyY2VzKTsKLQkJcmV0dXJuOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlZJQzogdW5rbm93biB2ZW5kb3IsIGNvbnRpbnVpbmcgYW55d2F5c1xuIik7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgQU1CQV9WRU5ET1JfQVJNOgotCQlicmVhazsKLQl9Ci0KLQkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGluaXRpYWxseS4gKi8KLQotCXdyaXRlbCgwLCBiYXNlICsgVklDX0lOVF9TRUxFQ1QpOwotCXdyaXRlbCgwLCBiYXNlICsgVklDX0lOVF9FTkFCTEUpOwotCXdyaXRlbCh+MCwgYmFzZSArIFZJQ19JTlRfRU5BQkxFX0NMRUFSKTsKLQl3cml0ZWwoMCwgYmFzZSArIFZJQ19JUlFfU1RBVFVTKTsKLQl3cml0ZWwoMCwgYmFzZSArIFZJQ19JVENSKTsKLQl3cml0ZWwofjAsIGJhc2UgKyBWSUNfSU5UX1NPRlRfQ0xFQVIpOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgd2UgY2xlYXIgYWxsIGV4aXN0aW5nIGludGVycnVwdHMKLQkgKi8KLQl3cml0ZWwoMCwgYmFzZSArIFZJQ19QTDE5MF9WRUNUX0FERFIpOwotCWZvciAoaSA9IDA7IGkgPCAxOTsgaSsrKSB7Ci0JCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotCQl2YWx1ZSA9IHJlYWRsKGJhc2UgKyBWSUNfUEwxOTBfVkVDVF9BRERSKTsKLQkJd3JpdGVsKHZhbHVlLCBiYXNlICsgVklDX1BMMTkwX1ZFQ1RfQUREUik7Ci0JfQotCi0JdmljX2luaXQyKGJhc2UpOwotCi0JZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQkJaWYgKHZpY19zb3VyY2VzICYgKDEgPDwgaSkpIHsKLQkJCXVuc2lnbmVkIGludCBpcnEgPSBpcnFfc3RhcnQgKyBpOwotCi0JCQlzZXRfaXJxX2NoaXAoaXJxLCAmdmljX2NoaXApOwotCQkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCBiYXNlKTsKLQkJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwotCQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKLQkJfQotCX0KLQotCXZpY19wbV9yZWdpc3RlcihiYXNlLCBpcnFfc3RhcnQsIHJlc3VtZV9zb3VyY2VzKTsKLX0KLQogLyoKICAqIFRoZSBQTDE5MCBjZWxsIGZyb20gQVJNIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IFNUIHRvIGhhbmRsZSA2NCBpbnRlcnJ1cHRzLgogICogVGhlIG9yaWdpbmFsIGNlbGwgaGFzIDMyIGludGVycnVwdHMsIHdoaWxlIHRoZSBtb2RpZmllZCBvbmUgaGFzIDY0LApAQCAtMzUxLDcgKzI4MCw3IEBACiAgKiB0aGUgcHJvYmUgZnVuY3Rpb24gaXMgY2FsbGVkIHR3aWNlLCB3aXRoIGJhc2Ugc2V0IHRvIG9mZnNldCAwMDAKICAqICBhbmQgMDIwIHdpdGhpbiB0aGUgcGFnZS4gV2UgY2FsbCB0aGlzICJzZWNvbmQgYmxvY2siLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgdmlrX2luaXRfc3Qodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBpbnQgaXJxX3N0YXJ0LAorc3RhdGljIHZvaWQgX19pbml0IHZpY19pbml0X3N0KHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgaW50IGlycV9zdGFydCwKIAkJCQl1MzIgdmljX3NvdXJjZXMpCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC00MDAsMyArMzI5LDczIEBACiAJCX0KIAl9CiB9CisKKy8qKgorICogdmljX2luaXQgLSBpbml0aWFsaXNlIGEgdmVjdG9yZWQgaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAqIEBiYXNlOiBpb21lbSBiYXNlIGFkZHJlc3MKKyAqIEBpcnFfc3RhcnQ6IHN0YXJ0aW5nIGludGVycnVwdCBudW1iZXIsIG11c3QgYmUgbXVsaXBsZSBvZiAzMgorICogQHZpY19zb3VyY2VzOiBiaXRtYXNrIG9mIGludGVycnVwdCBzb3VyY2VzIHRvIGFsbG93CisgKiBAcmVzdW1lX3NvdXJjZXM6IGJpdG1hc2sgb2YgaW50ZXJydXB0IHNvdXJjZXMgdG8gYWxsb3cgZm9yIHJlc3VtZQorICovCit2b2lkIF9faW5pdCB2aWNfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBpcnFfc3RhcnQsCisJCSAgICAgdTMyIHZpY19zb3VyY2VzLCB1MzIgcmVzdW1lX3NvdXJjZXMpCit7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIGNlbGxpZCA9IDA7CisJZW51bSBhbWJhX3ZlbmRvciB2ZW5kb3I7CisKKwkvKiBJZGVudGlmeSB3aGljaCBWSUMgY2VsbCB0aGlzIG9uZSBpcywgYnkgcmVhZGluZyB0aGUgSUQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXUzMiBhZGRyID0gKCh1MzIpYmFzZSAmIFBBR0VfTUFTSykgKyAweGZlMCArIChpICogNCk7CisJCWNlbGxpZCB8PSAocmVhZGwoYWRkcikgJiAweGZmKSA8PCAoOCAqIGkpOworCX0KKwl2ZW5kb3IgPSAoY2VsbGlkID4+IDEyKSAmIDB4ZmY7CisJcHJpbnRrKEtFUk5fSU5GTyAiVklDIEAlcDogaWQgMHglMDh4LCB2ZW5kb3IgMHglMDJ4XG4iLAorCSAgICAgICBiYXNlLCBjZWxsaWQsIHZlbmRvcik7CisKKwlzd2l0Y2godmVuZG9yKSB7CisJY2FzZSBBTUJBX1ZFTkRPUl9TVDoKKwkJdmljX2luaXRfc3QoYmFzZSwgaXJxX3N0YXJ0LCB2aWNfc291cmNlcyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJWSUM6IHVua25vd24gdmVuZG9yLCBjb250aW51aW5nIGFueXdheXNcbiIpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEFNQkFfVkVORE9SX0FSTToKKwkJYnJlYWs7CisJfQorCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBpbml0aWFsbHkuICovCisKKwl3cml0ZWwoMCwgYmFzZSArIFZJQ19JTlRfU0VMRUNUKTsKKwl3cml0ZWwoMCwgYmFzZSArIFZJQ19JTlRfRU5BQkxFKTsKKwl3cml0ZWwofjAsIGJhc2UgKyBWSUNfSU5UX0VOQUJMRV9DTEVBUik7CisJd3JpdGVsKDAsIGJhc2UgKyBWSUNfSVJRX1NUQVRVUyk7CisJd3JpdGVsKDAsIGJhc2UgKyBWSUNfSVRDUik7CisJd3JpdGVsKH4wLCBiYXNlICsgVklDX0lOVF9TT0ZUX0NMRUFSKTsKKworCS8qCisJICogTWFrZSBzdXJlIHdlIGNsZWFyIGFsbCBleGlzdGluZyBpbnRlcnJ1cHRzCisJICovCisJd3JpdGVsKDAsIGJhc2UgKyBWSUNfUEwxOTBfVkVDVF9BRERSKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTk7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwkJdmFsdWUgPSByZWFkbChiYXNlICsgVklDX1BMMTkwX1ZFQ1RfQUREUik7CisJCXdyaXRlbCh2YWx1ZSwgYmFzZSArIFZJQ19QTDE5MF9WRUNUX0FERFIpOworCX0KKworCXZpY19pbml0MihiYXNlKTsKKworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWlmICh2aWNfc291cmNlcyAmICgxIDw8IGkpKSB7CisJCQl1bnNpZ25lZCBpbnQgaXJxID0gaXJxX3N0YXJ0ICsgaTsKKworCQkJc2V0X2lycV9jaGlwKGlycSwgJnZpY19jaGlwKTsKKwkJCXNldF9pcnFfY2hpcF9kYXRhKGlycSwgYmFzZSk7CisJCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJCX0KKwl9CisKKwl2aWNfcG1fcmVnaXN0ZXIoYmFzZSwgaXJxX3N0YXJ0LCByZXN1bWVfc291cmNlcyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0NTcyZDk0MGhmZWtfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDU3MmQ5NDBoZmVrX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmQ3MjRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDU3MmQ5NDBoZmVrX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE2NDAgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzcKKyMgRnJpIERlYyAgNSAxMDo1ODo0NyAyMDA4CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1BVDU3MkQ5NDBIRiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKK0NPTkZJR19UQVNLU1RBVFM9eQorIyBDT05GSUdfVEFTS19ERUxBWV9BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19UQVNLX1hBQ0NUPXkKK0NPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkc9eQorQ09ORklHX0FVRElUPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE3CitDT05GSUdfQ0dST1VQUz15CisjIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9GUkVFWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9ERVZJQ0UgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKK0NPTkZJR19SVF9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19VU0VSX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DR1JPVVBfU0NIRUQ9eQorQ09ORklHX0NHUk9VUF9DUFVBQ0NUPXkKKyMgQ09ORklHX1JFU09VUkNFX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKK0NPTkZJR19SRUxBWT15CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfTUFSS0VSUz15CitDT05GSUdfT1BST0ZJTEU9bQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0tQUk9CRVM9eQorQ09ORklHX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MT15CisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKKworIworIyBQb3dlciBtYW5hZ2VtZW50CisjCisKKyMKKyMgQXRtZWwgQVQ5MSBTeXN0ZW0tb24tQ2hpcAorIworIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05RzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MUNBUDkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxWDQwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0FUNTcyRDk0MEhGPXkKK0NPTkZJR19BVDkxX1BNQ19VTklUPXkKKworIworIyBBVDU3MkQ5NDBIRiBCb2FyZCBUeXBlCisjCitDT05GSUdfTUFDSF9BVDU3MkQ5NDBIRkVCPXkKKworIworIyBBVDkxIEJvYXJkIE9wdGlvbnMKKyMKKyMgQ09ORklHX01URF9BVDkxX0RBVEFGTEFTSF9DQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0FUTUVMX0JVU1dJRFRIXzE2IGlzIG5vdCBzZXQKK0NPTkZJR19OVU1fU0VSSUFMPTMKKworIworIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucworIworQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUz15CitDT05GSUdfQVQ5MV9USU1FUl9IWj0xMDAKK0NPTkZJR19BVDkxX0VBUkxZX0RCR1U9eQorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDAgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDEgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDIgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDMgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDQgaXMgbm90IHNldAorIyBDT05GSUdfQVQ5MV9FQVJMWV9VU0FSVDUgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNOTI2VD15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXQj15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfSFo9MTAwCisjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CitDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKyMgQ09ORklHX0xFRFMgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0wCitDT05GSUdfWkJPT1RfUk9NX0JTUz0wCitDT05GSUdfQ01ETElORT0ibWVtPTQ4TSBjb25zb2xlPXR0eVMwIGluaXRyZD0weDIxMTAwMDAwLDMxNDU3Mjggcm9vdD0vZGV2L3JhbTAgcncgaXA9MTcyLjE2LjEuMTgxIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfS0VYRUM9eQorQ09ORklHX0FUQUdTX1BST0M9eQorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKK0NPTkZJR19GUEVfTldGUEVfWFA9eQorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPW0KK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCitDT05GSUdfTkVUX1BLVEdFTj1tCitDT05GSUdfTkVUX1RDUFBST0JFPW0KKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKK0NPTkZJR19DQU49bQorQ09ORklHX0NBTl9SQVc9bQorQ09ORklHX0NBTl9CQ009bQorCisjCisjIENBTiBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0NBTl9WQ0FOPW0KK0NPTkZJR19DQU5fREVCVUdfREVWSUNFUz15CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExPW0KKyMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCisjIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPW0KK0NPTkZJR19NVEQ9bQorQ09ORklHX01URF9ERUJVRz15CitDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MQorQ09ORklHX01URF9DT05DQVQ9bQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj1tCitDT05GSUdfTVREX0JMS0RFVlM9bQorQ09ORklHX01URF9CTE9DSz1tCitDT05GSUdfTVREX0JMT0NLX1JPPW0KK0NPTkZJR19GVEw9bQorQ09ORklHX05GVEw9bQorQ09ORklHX05GVExfUlc9eQorQ09ORklHX0lORlRMPW0KK0NPTkZJR19SRkRfRlRMPW0KK0NPTkZJR19TU0ZEQz1tCitDT05GSUdfTVREX09PUFM9bQorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST1tCitDT05GSUdfTVREX0pFREVDUFJPQkU9bQorQ09ORklHX01URF9HRU5fUFJPQkU9bQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD1tCitDT05GSUdfTVREX0NGSV9BTURTVEQ9bQorQ09ORklHX01URF9DRklfU1RBQT1tCitDT05GSUdfTVREX0NGSV9VVElMPW0KK0NPTkZJR19NVERfUkFNPW0KK0NPTkZJR19NVERfUk9NPW0KK0NPTkZJR19NVERfQUJTRU5UPW0KKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQorQ09ORklHX01URF9QSFlTTUFQPW0KK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDgwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHg0MDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAorQ09ORklHX01URF9QTEFUUkFNPW0KKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfREFUQUZMQVNIPW0KKyMgQ09ORklHX01URF9EQVRBRkxBU0hfV1JJVEVfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9EQVRBRkxBU0hfT1RQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTTI1UDgwPW0KK0NPTkZJR19NMjVQWFhfVVNFX0ZBU1RfUkVBRD15CitDT05GSUdfTVREX1NMUkFNPW0KK0NPTkZJR19NVERfUEhSQU09bQorQ09ORklHX01URF9NVERSQU09bQorQ09ORklHX01URFJBTV9UT1RBTF9TSVpFPTQwOTYKK0NPTkZJR19NVERSQU1fRVJBU0VfU0laRT0xMjgKK0NPTkZJR19NVERfQkxPQ0syTVREPW0KKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9bQorQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURT15CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPW0KK0NPTkZJR19NVERfTkFORF9ESVNLT05DSElQPW0KKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfQUREUkVTUz0wCisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQX0JCVFdSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0FUTUVMIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9OQU5EU0lNPW0KK0NPTkZJR19NVERfTkFORF9QTEFURk9STT1tCitDT05GSUdfTVREX0FMQVVEQT1tCisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCitDT05GSUdfTVREX1VCST1tCitDT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgorQ09ORklHX01URF9VQklfQkVCX1JFU0VSVkU9MQorQ09ORklHX01URF9VQklfR0xVRUJJPXkKKworIworIyBVQkkgZGVidWdnaW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX01URF9VQklfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKK0NPTkZJR19BVE1FTF9UQ0xJQj15CitDT05GSUdfQVRNRUxfVENCX0NMS1NSQz15CitDT05GSUdfQVRNRUxfVENCX0NMS1NSQ19CTE9DSz0wCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CitDT05GSUdfQVRNRUxfU1NDPW0KKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1JBSURfQVRUUlM9bQorQ09ORklHX1NDU0k9bQorQ09ORklHX1NDU0lfRE1BPXkKK0NPTkZJR19TQ1NJX1RHVD1tCisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9bQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9bQorIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9bQorQ09ORklHX0NIUl9ERVZfU0NIPW0KKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorQ09ORklHX1NDU0lfTE9HR0lORz15CitDT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorQ09ORklHX0JPTkRJTkc9bQorQ09ORklHX01BQ1ZMQU49bQorQ09ORklHX0VRVUFMSVpFUj1tCitDT05GSUdfVFVOPW0KK0NPTkZJR19WRVRIPW0KK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NQVJWRUxMX1BIWT1tCitDT05GSUdfREFWSUNPTV9QSFk9bQorQ09ORklHX1FTRU1JX1BIWT1tCitDT05GSUdfTFhUX1BIWT1tCitDT05GSUdfQ0lDQURBX1BIWT1tCitDT05GSUdfVklURVNTRV9QSFk9bQorQ09ORklHX1NNU0NfUEhZPW0KK0NPTkZJR19CUk9BRENPTV9QSFk9bQorQ09ORklHX0lDUExVU19QSFk9bQorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19NRElPX0JJVEJBTkc9bQorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPW0KK0NPTkZJR19NQUNCPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCitDT05GSUdfV0xBTl9QUkU4MDIxMT15CitDT05GSUdfU1RSSVA9bQorQ09ORklHX1dMQU5fODAyMTE9eQorQ09ORklHX0xJQkVSVEFTPW0KK0NPTkZJR19MSUJFUlRBU19VU0I9bQorQ09ORklHX0xJQkVSVEFTX1NESU89bQorIyBDT05GSUdfTElCRVJUQVNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9aRDEyMDE9bQorIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfSE9TVEFQPW0KK0NPTkZJR19IT1NUQVBfRklSTVdBUkU9eQorQ09ORklHX0hPU1RBUF9GSVJNV0FSRV9OVlJBTT15CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKK0NPTkZJR19VU0JfQ0FUQz1tCitDT05GSUdfVVNCX0tBV0VUSD1tCitDT05GSUdfVVNCX1BFR0FTVVM9bQorQ09ORklHX1VTQl9SVEw4MTUwPW0KK0NPTkZJR19VU0JfVVNCTkVUPW0KK0NPTkZJR19VU0JfTkVUX0FYODgxN1g9bQorQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVI9bQorQ09ORklHX1VTQl9ORVRfRE05NjAxPW0KKyMgQ09ORklHX1VTQl9ORVRfU01TQzk1WFggaXMgbm90IHNldAorQ09ORklHX1VTQl9ORVRfR0w2MjBBPW0KK0NPTkZJR19VU0JfTkVUX05FVDEwODA9bQorQ09ORklHX1VTQl9ORVRfUExVU0I9bQorQ09ORklHX1VTQl9ORVRfTUNTNzgzMD1tCitDT05GSUdfVVNCX05FVF9STkRJU19IT1NUPW0KK0NPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQ9bQorQ09ORklHX1VTQl9BTElfTTU2MzI9eQorQ09ORklHX1VTQl9BTjI3MjA9eQorQ09ORklHX1VTQl9CRUxLSU49eQorQ09ORklHX1VTQl9BUk1MSU5VWD15CitDT05GSUdfVVNCX0VQU09OMjg4OD15CitDT05GSUdfVVNCX0tDMjE5MD15CisjIENPTkZJR19VU0JfTkVUX1pBVVJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9QT0xMREVWPW0KKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9bQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPW0KK0NPTkZJR19JTlBVVF9FVkJVRz1tCisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorQ09ORklHX0tFWUJPQVJEX1NVTktCRD1tCitDT05GSUdfS0VZQk9BUkRfTEtLQkQ9bQorQ09ORklHX0tFWUJPQVJEX1hUS0JEPW0KK0NPTkZJR19LRVlCT0FSRF9ORVdUT049bQorQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZPW0KK0NPTkZJR19LRVlCT0FSRF9HUElPPW0KK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPW0KK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKK0NPTkZJR19NT1VTRV9TRVJJQUw9bQorQ09ORklHX01PVVNFX0FQUExFVE9VQ0g9bQorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CitDT05GSUdfTU9VU0VfVlNYWFhBQT1tCitDT05GSUdfTU9VU0VfR1BJTz1tCisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVUlOUFVUPW0KKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD1tCitDT05GSUdfU0VSSU9fTElCUFMyPXkKK0NPTkZJR19TRVJJT19SQVc9bQorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CitDT05GSUdfTl9IRExDPW0KKyMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldAorQ09ORklHX1NQRUNJQUxJWD1tCitDT05GSUdfUklPPW0KKyMgQ09ORklHX1JJT19PTERQQ0kgaXMgbm90IHNldAorQ09ORklHX1NUQUxEUlY9eQorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9BVE1FTD15CitDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9BVE1FTF9QREM9eQorIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorQ09ORklHX0lQTUlfSEFORExFUj1tCisjIENPTkZJR19JUE1JX1BBTklDX0VWRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19JUE1JX0RFVklDRV9JTlRFUkZBQ0U9bQorQ09ORklHX0lQTUlfU0k9bQorQ09ORklHX0lQTUlfV0FUQ0hET0c9bQorQ09ORklHX0lQTUlfUE9XRVJPRkY9bQorQ09ORklHX0hXX1JBTkRPTT15CitDT05GSUdfTlZSQU09bQorQ09ORklHX1IzOTY0PW0KK0NPTkZJR19SQVdfRFJJVkVSPW0KK0NPTkZJR19NQVhfUkFXX0RFVlM9MjU2CitDT05GSUdfVENHX1RQTT1tCitDT05GSUdfVENHX05TQz1tCitDT05GSUdfVENHX0FUTUVMPW0KK0NPTkZJR19JMkM9bQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPW0KK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworQ09ORklHX0RTMTY4Mj1tCisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0VFUFJPTT1tCitDT05GSUdfU0VOU09SU19QQ0Y4NTc0PW0KKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX1BDRjg1OTE9bQorQ09ORklHX1NFTlNPUlNfTUFYNjg3NT1tCitDT05GSUdfU0VOU09SU19UU0wyNTUwPW0KKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19TUElfQVRNRUw9eQorQ09ORklHX1NQSV9CSVRCQU5HPW0KKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworQ09ORklHX1NQSV9BVDI1PW0KK0NPTkZJR19TUElfU1BJREVWPW0KKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX1NPVU5EPW0KK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU05EPW0KK0NPTkZJR19TTkRfVElNRVI9bQorQ09ORklHX1NORF9QQ009bQorQ09ORklHX1NORF9IV0RFUD1tCitDT05GSUdfU05EX1JBV01JREk9bQorQ09ORklHX1NORF9TRVFVRU5DRVI9bQorQ09ORklHX1NORF9TRVFfRFVNTVk9bQorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfUENNX09TUz1tCisjIENPTkZJR19TTkRfUENNX09TU19QTFVHSU5TIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CitDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTPXkKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfRFJJVkVSUz15CitDT05GSUdfU05EX0RVTU1ZPW0KK0NPTkZJR19TTkRfVklSTUlEST1tCisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FSTT15CitDT05GSUdfU05EX1NQST15CisjIENPTkZJR19TTkRfQVQ3M0MyMTMgaXMgbm90IHNldAorQ09ORklHX1NORF9VU0I9eQorQ09ORklHX1NORF9VU0JfQVVESU89bQorQ09ORklHX1NORF9VU0JfQ0FJQVE9bQorQ09ORklHX1NORF9VU0JfQ0FJQVFfSU5QVVQ9eQorIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD1tCisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0hJRFJBVz15CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPW0KKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCitDT05GSUdfVVNCX0tCRD1tCitDT05GSUdfVVNCX01PVVNFPW0KKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD1tCitDT05GSUdfSElEX0FQUExFPW0KK0NPTkZJR19ISURfQkVMS0lOPW0KK0NPTkZJR19ISURfQlJJR0hUPW0KK0NPTkZJR19ISURfQ0hFUlJZPW0KK0NPTkZJR19ISURfQ0hJQ09OWT1tCitDT05GSUdfSElEX0NZUFJFU1M9bQorQ09ORklHX0hJRF9ERUxMPW0KK0NPTkZJR19ISURfRVpLRVk9bQorQ09ORklHX0hJRF9HWVJBVElPTj1tCitDT05GSUdfSElEX0xPR0lURUNIPW0KKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPW0KK0NPTkZJR19ISURfTU9OVEVSRVk9bQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD1tCisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPW0KK0NPTkZJR19ISURfU0FNU1VORz1tCitDT05GSUdfSElEX1NPTlk9bQorQ09ORklHX0hJRF9TVU5QTFVTPW0KKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUI9eQorQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009eQorQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMD15CitDT05GSUdfVVNCX1NUT1JBR0VfRFBDTT15CitDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQ9eQorQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOT15CitDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1PXkKK0NPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVD15CitDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1RPUkFHRV9LQVJNQT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTElCVVNVQUw9eQorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCitDT05GSUdfVVNCX1NFUklBTD1tCitDT05GSUdfVVNCX0VaVVNCPXkKK0NPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQorIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DSDM0MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lVVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9UT1JPTEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9TUENQOFg1PW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfSFA0WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NBRkUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9ERUJVRz1tCisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworQ09ORklHX1VTQl9FTUk2Mj1tCitDT05GSUdfVVNCX0VNSTI2PW0KK0NPTkZJR19VU0JfQURVVFVYPW0KKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfVEVTVD1tCisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVD1tCitDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUz15CitDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GUz15CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorQ09ORklHX1VTQl9HQURHRVRfQVQ5MT15CitDT05GSUdfVVNCX0FUOTE9bQorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9aRVJPPW0KK0NPTkZJR19VU0JfRVRIPW0KK0NPTkZJR19VU0JfRVRIX1JORElTPXkKK0NPTkZJR19VU0JfR0FER0VURlM9bQorQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR19TRVJJQUw9bQorQ09ORklHX1VTQl9NSURJX0dBREdFVD1tCisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorQ09ORklHX1NESU9fVUFSVD1tCisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0FUOTE9eQorQ09ORklHX01NQ19TUEk9bQorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9bQorCisjCisjIExFRCBkcml2ZXJzCisjCisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorQ09ORklHX0xFRFNfR1BJTz1tCisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorCisjCisjIExFRCBUcmlnZ2VycworIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj1tCitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD1tCisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CitDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMPXkKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9EUzEzMDc9bQorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9EUzEzMDU9eQorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0FUOTFTQU05IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfSkJEX0RFQlVHPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKK0NPTkZJR19SRUlTRVJGU19GUz1tCitDT05GSUdfUkVJU0VSRlNfQ0hFQ0s9eQorQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTz15CitDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRlVTRV9GUz1tCitDT05GSUdfR0VORVJJQ19BQ0w9eQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCitDT05GSUdfTlRGU19GUz1tCisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19OVEZTX1JXPXkKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPW0KK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTz15CisjIENPTkZJR19VQklGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPW0KKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPW0KK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorQ09ORklHX05GU19WND15CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMl9BQ0w9eQorQ09ORklHX05GU0RfVjM9eQorQ09ORklHX05GU0RfVjNfQUNMPXkKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19MT0NLRD1tCitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQUNMX1NVUFBPUlQ9bQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz1tCitDT05GSUdfU1VOUlBDX0dTUz1tCisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT1tCisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTX1dFQUtfUFdfSEFTSD15CisjIENPTkZJR19DSUZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01BQ19QQVJUSVRJT049eQorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfQlNEX0RJU0tMQUJFTD15CitDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OPXkKK0NPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT049eQorQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTD15CitDT05GSUdfTERNX1BBUlRJVElPTj15CitDT05GSUdfTERNX0RFQlVHPXkKK0NPTkZJR19TR0lfUEFSVElUSU9OPXkKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX1NVTl9QQVJUSVRJT049eQorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iY3A0MzciCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PW0KK0NPTkZJR19ETE09bQorIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX1VOVVNFRF9TWU1CT0xTPXkKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX1JORz15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz1tCisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT1tCisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPW0KKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PW0KKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorQ09ORklHX0NSQ19JVFVfVD1tCitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0NSQzc9bQorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfQVVESVRfR0VORVJJQz15CitDT05GSUdfWkxJQl9JTkZMQVRFPW0KK0NPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX0xaT19DT01QUkVTUz1tCitDT05GSUdfTFpPX0RFQ09NUFJFU1M9bQorQ09ORklHX1JFRURfU09MT01PTj1tCitDT05GSUdfUkVFRF9TT0xPTU9OX0RFQzE2PXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF80NDMwc2RwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF80NDMwc2RwX2RlZmNvbmZpZwppbmRleCAzZGU2NDBhLi5jNDhkN2I4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfNDQzMHNkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzQ0MzBzZHBfZGVmY29uZmlnCkBAIC0yNDIsMTAgKzI0MiwxMyBAQAogIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKIENPTkZJR19IQVNfVExTX1JFRz15CitDT05GSUdfT1VURVJfQ0FDSEU9eQorQ09ORklHX0NBQ0hFX0wyWDA9eQogQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01CiAjIENPTkZJR19BUk1fRVJSQVRBXzQzMDk3MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUk1fRVJSQVRBXzQ1ODY5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUk1fRVJSQVRBXzQ2MDA3NSBpcyBub3Qgc2V0CitDT05GSUdfUEwzMTBfRVJSQVRBXzU4ODM2OT15CiBDT05GSUdfQVJNX0dJQz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggZDBkYWVhYi4uZThkZGVjMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTIzNSw2ICsyMzUsMjM0IEBACiAjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQlzbXBfbWIoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQlzbXBfbWIoKQogCisjaWZuZGVmIENPTkZJR19HRU5FUklDX0FUT01JQzY0Cit0eXBlZGVmIHN0cnVjdCB7CisJdTY0IF9fYWxpZ25lZCg4KSBjb3VudGVyOworfSBhdG9taWM2NF90OworCisjZGVmaW5lIEFUT01JQzY0X0lOSVQoaSkgeyAoaSkgfQorCitzdGF0aWMgaW5saW5lIHU2NCBhdG9taWM2NF9yZWFkKGF0b21pYzY0X3QgKnYpCit7CisJdTY0IHJlc3VsdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pYzY0X3JlYWRcbiIKKyIJbGRyZXhkCSUwLCAlSDAsIFslMV0iCisJOiAiPSZyIiAocmVzdWx0KQorCTogInIiICgmdi0+Y291bnRlcikKKwkpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X3NldChhdG9taWM2NF90ICp2LCB1NjQgaSkKK3sKKwl1NjQgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljNjRfc2V0XG4iCisiMToJbGRyZXhkCSUwLCAlSDAsIFslMV1cbiIKKyIJc3RyZXhkCSUwLCAlMiwgJUgyLCBbJTFdXG4iCisiCXRlcQklMCwgIzBcbiIKKyIJYm5lCTFiIgorCTogIj0mciIgKHRtcCkKKwk6ICJyIiAoJnYtPmNvdW50ZXIpLCAiciIgKGkpCisJOiAiY2MiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X2FkZCh1NjQgaSwgYXRvbWljNjRfdCAqdikKK3sKKwl1NjQgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljNjRfYWRkXG4iCisiMToJbGRyZXhkCSUwLCAlSDAsIFslMl1cbiIKKyIJYWRkcwklMCwgJTAsICUzXG4iCisiCWFkYwklSDAsICVIMCwgJUgzXG4iCisiCXN0cmV4ZAklMSwgJTAsICVIMCwgWyUyXVxuIgorIgl0ZXEJJTEsICMwXG4iCisiCWJuZQkxYiIKKwk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodG1wKQorCTogInIiICgmdi0+Y291bnRlciksICJyIiAoaSkKKwk6ICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBhdG9taWM2NF9hZGRfcmV0dXJuKHU2NCBpLCBhdG9taWM2NF90ICp2KQoreworCXU2NCByZXN1bHQ7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlzbXBfbWIoKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pYzY0X2FkZF9yZXR1cm5cbiIKKyIxOglsZHJleGQJJTAsICVIMCwgWyUyXVxuIgorIglhZGRzCSUwLCAlMCwgJTNcbiIKKyIJYWRjCSVIMCwgJUgwLCAlSDNcbiIKKyIJc3RyZXhkCSUxLCAlMCwgJUgwLCBbJTJdXG4iCisiCXRlcQklMSwgIzBcbiIKKyIJYm5lCTFiIgorCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0bXApCisJOiAiciIgKCZ2LT5jb3VudGVyKSwgInIiIChpKQorCTogImNjIik7CisKKwlzbXBfbWIoKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9zdWIodTY0IGksIGF0b21pYzY0X3QgKnYpCit7CisJdTY0IHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pYzY0X3N1YlxuIgorIjE6CWxkcmV4ZAklMCwgJUgwLCBbJTJdXG4iCisiCXN1YnMJJTAsICUwLCAlM1xuIgorIglzYmMJJUgwLCAlSDAsICVIM1xuIgorIglzdHJleGQJJTEsICUwLCAlSDAsIFslMl1cbiIKKyIJdGVxCSUxLCAjMFxuIgorIglibmUJMWIiCisJOiAiPSZyIiAocmVzdWx0KSwgIj0mciIgKHRtcCkKKwk6ICJyIiAoJnYtPmNvdW50ZXIpLCAiciIgKGkpCisJOiAiY2MiKTsKK30KKworc3RhdGljIGlubGluZSB1NjQgYXRvbWljNjRfc3ViX3JldHVybih1NjQgaSwgYXRvbWljNjRfdCAqdikKK3sKKwl1NjQgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJc21wX21iKCk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiQCBhdG9taWM2NF9zdWJfcmV0dXJuXG4iCisiMToJbGRyZXhkCSUwLCAlSDAsIFslMl1cbiIKKyIJc3VicwklMCwgJTAsICUzXG4iCisiCXNiYwklSDAsICVIMCwgJUgzXG4iCisiCXN0cmV4ZAklMSwgJTAsICVIMCwgWyUyXVxuIgorIgl0ZXEJJTEsICMwXG4iCisiCWJuZQkxYiIKKwk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodG1wKQorCTogInIiICgmdi0+Y291bnRlciksICJyIiAoaSkKKwk6ICJjYyIpOworCisJc21wX21iKCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIHU2NCBhdG9taWM2NF9jbXB4Y2hnKGF0b21pYzY0X3QgKnB0ciwgdTY0IG9sZCwgdTY0IG5ldykKK3sKKwl1NjQgb2xkdmFsOworCXVuc2lnbmVkIGxvbmcgcmVzOworCisJc21wX21iKCk7CisKKwlkbyB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pYzY0X2NtcHhjaGdcbiIKKwkJImxkcmV4ZAkJJTEsICVIMSwgWyUyXVxuIgorCQkibW92CQklMCwgIzBcbiIKKwkJInRlcQkJJTEsICUzXG4iCisJCSJ0ZXFlcQkJJUgxLCAlSDNcbiIKKwkJInN0cmV4ZGVxCSUwLCAlNCwgJUg0LCBbJTJdIgorCQk6ICI9JnIiIChyZXMpLCAiPSZyIiAob2xkdmFsKQorCQk6ICJyIiAoJnB0ci0+Y291bnRlciksICJyIiAob2xkKSwgInIiIChuZXcpCisJCTogImNjIik7CisJfSB3aGlsZSAocmVzKTsKKworCXNtcF9tYigpOworCisJcmV0dXJuIG9sZHZhbDsKK30KKworc3RhdGljIGlubGluZSB1NjQgYXRvbWljNjRfeGNoZyhhdG9taWM2NF90ICpwdHIsIHU2NCBuZXcpCit7CisJdTY0IHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCXNtcF9tYigpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljNjRfeGNoZ1xuIgorIjE6CWxkcmV4ZAklMCwgJUgwLCBbJTJdXG4iCisiCXN0cmV4ZAklMSwgJTMsICVIMywgWyUyXVxuIgorIgl0ZXEJJTEsICMwXG4iCisiCWJuZQkxYiIKKwk6ICI9JnIiIChyZXN1bHQpLCAiPSZyIiAodG1wKQorCTogInIiICgmcHRyLT5jb3VudGVyKSwgInIiIChuZXcpCisJOiAiY2MiKTsKKworCXNtcF9tYigpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSB1NjQgYXRvbWljNjRfZGVjX2lmX3Bvc2l0aXZlKGF0b21pYzY0X3QgKnYpCit7CisJdTY0IHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCXNtcF9tYigpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljNjRfZGVjX2lmX3Bvc2l0aXZlXG4iCisiMToJbGRyZXhkCSUwLCAlSDAsIFslMl1cbiIKKyIJc3VicwklMCwgJTAsICMxXG4iCisiCXNiYwklSDAsICVIMCwgIzBcbiIKKyIJdGVxCSVIMCwgIzBcbiIKKyIJYm1pCTJmXG4iCisiCXN0cmV4ZAklMSwgJTAsICVIMCwgWyUyXVxuIgorIgl0ZXEJJTEsICMwXG4iCisiCWJuZQkxYlxuIgorIjI6IgorCTogIj0mciIgKHJlc3VsdCksICI9JnIiICh0bXApCisJOiAiciIgKCZ2LT5jb3VudGVyKQorCTogImNjIik7CisKKwlzbXBfbWIoKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2FkZF91bmxlc3MoYXRvbWljNjRfdCAqdiwgdTY0IGEsIHU2NCB1KQoreworCXU2NCB2YWw7CisJdW5zaWduZWQgbG9uZyB0bXA7CisJaW50IHJldCA9IDE7CisKKwlzbXBfbWIoKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pYzY0X2FkZF91bmxlc3NcbiIKKyIxOglsZHJleGQJJTAsICVIMCwgWyUzXVxuIgorIgl0ZXEJJTAsICU0XG4iCisiCXRlcWVxCSVIMCwgJUg0XG4iCisiCW1vdmVxCSUxLCAjMFxuIgorIgliZXEJMmZcbiIKKyIJYWRkcwklMCwgJTAsICU1XG4iCisiCWFkYwklSDAsICVIMCwgJUg1XG4iCisiCXN0cmV4ZAklMiwgJTAsICVIMCwgWyUzXVxuIgorIgl0ZXEJJTIsICMwXG4iCisiCWJuZQkxYlxuIgorIjI6IgorCTogIj0mciIgKHZhbCksICI9JnIiIChyZXQpLCAiPSZyIiAodG1wKQorCTogInIiICgmdi0+Y291bnRlciksICJyIiAodSksICJyIiAoYSkKKwk6ICJjYyIpOworCisJaWYgKHJldCkKKwkJc21wX21iKCk7CisKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIGF0b21pYzY0X2FkZF9uZWdhdGl2ZShhLCB2KQkoYXRvbWljNjRfYWRkX3JldHVybigoYSksICh2KSkgPCAwKQorI2RlZmluZSBhdG9taWM2NF9pbmModikJCQlhdG9taWM2NF9hZGQoMUxMLCAodikpCisjZGVmaW5lIGF0b21pYzY0X2luY19yZXR1cm4odikJCWF0b21pYzY0X2FkZF9yZXR1cm4oMUxMLCAodikpCisjZGVmaW5lIGF0b21pYzY0X2luY19hbmRfdGVzdCh2KQkoYXRvbWljNjRfaW5jX3JldHVybih2KSA9PSAwKQorI2RlZmluZSBhdG9taWM2NF9zdWJfYW5kX3Rlc3QoYSwgdikJKGF0b21pYzY0X3N1Yl9yZXR1cm4oKGEpLCAodikpID09IDApCisjZGVmaW5lIGF0b21pYzY0X2RlYyh2KQkJCWF0b21pYzY0X3N1YigxTEwsICh2KSkKKyNkZWZpbmUgYXRvbWljNjRfZGVjX3JldHVybih2KQkJYXRvbWljNjRfc3ViX3JldHVybigxTEwsICh2KSkKKyNkZWZpbmUgYXRvbWljNjRfZGVjX2FuZF90ZXN0KHYpCShhdG9taWM2NF9kZWNfcmV0dXJuKCh2KSkgPT0gMCkKKyNkZWZpbmUgYXRvbWljNjRfaW5jX25vdF96ZXJvKHYpCWF0b21pYzY0X2FkZF91bmxlc3MoKHYpLCAxTEwsIDBMTCkKKworI2Vsc2UgLyogIUNPTkZJR19HRU5FUklDX0FUT01JQzY0ICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljNjQuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F0b21pYy1sb25nLmg+CiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDgxMTNiYjUuLjcyZGE3ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTE5NywyMSArMTk3LDYgQEAKICAqCURNQSBDYWNoZSBDb2hlcmVuY3kKICAqCT09PT09PT09PT09PT09PT09PT0KICAqCi0gKglkbWFfaW52X3JhbmdlKHN0YXJ0LCBlbmQpCi0gKgotICoJCUludmFsaWRhdGUgKGRpc2NhcmQpIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgotICoJCU1heSBub3Qgd3JpdGUgYmFjayBhbnkgZW50cmllcy4gIElmICdzdGFydCcgb3IgJ2VuZCcKLSAqCQlhcmUgbm90IGNhY2hlIGxpbmUgYWxpZ25lZCwgdGhvc2UgbGluZXMgbXVzdCBiZSB3cml0dGVuCi0gKgkJYmFjay4KLSAqCQktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcwotICoJCS0gZW5kICAgIC0gdmlydHVhbCBlbmQgYWRkcmVzcwotICoKLSAqCWRtYV9jbGVhbl9yYW5nZShzdGFydCwgZW5kKQotICoKLSAqCQlDbGVhbiAod3JpdGUgYmFjaykgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCi0gKgkJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKLSAqCQktIGVuZCAgICAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKLSAqCiAgKglkbWFfZmx1c2hfcmFuZ2Uoc3RhcnQsIGVuZCkKICAqCiAgKgkJQ2xlYW4gYW5kIGludmFsaWRhdGUgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCkBAIC0yMjgsOCArMjEzLDkgQEAKIAl2b2lkICgqY29oZXJlbnRfdXNlcl9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiAJdm9pZCAoKmZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpKHZvaWQgKiwgc2l6ZV90KTsKIAotCXZvaWQgKCpkbWFfaW52X3JhbmdlKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7Ci0Jdm9pZCAoKmRtYV9jbGVhbl9yYW5nZSkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworCXZvaWQgKCpkbWFfbWFwX2FyZWEpKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOworCXZvaWQgKCpkbWFfdW5tYXBfYXJlYSkoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CisKIAl2b2lkICgqZG1hX2ZsdXNoX3JhbmdlKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CiB9OwogCkBAIC0yNTksOCArMjQ1LDggQEAKICAqIGlzIHZpc2libGUgdG8gRE1BLCBvciBkYXRhIHdyaXR0ZW4gYnkgRE1BIHRvIHN5c3RlbSBtZW1vcnkgaXMKICAqIHZpc2libGUgdG8gdGhlIENQVS4KICAqLwotI2RlZmluZSBkbWFjX2ludl9yYW5nZQkJCWNwdV9jYWNoZS5kbWFfaW52X3JhbmdlCi0jZGVmaW5lIGRtYWNfY2xlYW5fcmFuZ2UJCWNwdV9jYWNoZS5kbWFfY2xlYW5fcmFuZ2UKKyNkZWZpbmUgZG1hY19tYXBfYXJlYQkJCWNwdV9jYWNoZS5kbWFfbWFwX2FyZWEKKyNkZWZpbmUgZG1hY191bm1hcF9hcmVhCQljcHVfY2FjaGUuZG1hX3VubWFwX2FyZWEKICNkZWZpbmUgZG1hY19mbHVzaF9yYW5nZQkJY3B1X2NhY2hlLmRtYV9mbHVzaF9yYW5nZQogCiAjZWxzZQpAQCAtMjg1LDEyICsyNzEsMTIgQEAKICAqIGlzIHZpc2libGUgdG8gRE1BLCBvciBkYXRhIHdyaXR0ZW4gYnkgRE1BIHRvIHN5c3RlbSBtZW1vcnkgaXMKICAqIHZpc2libGUgdG8gdGhlIENQVS4KICAqLwotI2RlZmluZSBkbWFjX2ludl9yYW5nZQkJCV9fZ2x1ZShfQ0FDSEUsX2RtYV9pbnZfcmFuZ2UpCi0jZGVmaW5lIGRtYWNfY2xlYW5fcmFuZ2UJCV9fZ2x1ZShfQ0FDSEUsX2RtYV9jbGVhbl9yYW5nZSkKKyNkZWZpbmUgZG1hY19tYXBfYXJlYQkJCV9fZ2x1ZShfQ0FDSEUsX2RtYV9tYXBfYXJlYSkKKyNkZWZpbmUgZG1hY191bm1hcF9hcmVhCQlfX2dsdWUoX0NBQ0hFLF9kbWFfdW5tYXBfYXJlYSkKICNkZWZpbmUgZG1hY19mbHVzaF9yYW5nZQkJX19nbHVlKF9DQUNIRSxfZG1hX2ZsdXNoX3JhbmdlKQogCi1leHRlcm4gdm9pZCBkbWFjX2ludl9yYW5nZShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7Ci1leHRlcm4gdm9pZCBkbWFjX2NsZWFuX3JhbmdlKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGRtYWNfbWFwX2FyZWEoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CitleHRlcm4gdm9pZCBkbWFjX3VubWFwX2FyZWEoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CiBleHRlcm4gdm9pZCBkbWFjX2ZsdXNoX3JhbmdlKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKIAogI2VuZGlmCkBAIC0zMzEsMTIgKzMxNyw4IEBACiAgKiBwcm9jZXNzZXMgYWRkcmVzcyBzcGFjZS4gIFJlYWxseSwgd2Ugd2FudCB0byBhbGxvdyBvdXIgInVzZXIKICAqIHNwYWNlIiBtb2RlbCB0byBoYW5kbGUgdGhpcy4KICAqLwotI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCi0JZG8gewkJCQkJCQlcCi0JCW1lbWNweShkc3QsIHNyYywgbGVuKTsJCQkJXAotCQlmbHVzaF9wdHJhY2VfYWNjZXNzKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgbGVuLCAxKTtcCi0JfSB3aGlsZSAoMCkKLQorZXh0ZXJuIHZvaWQgY29weV90b191c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCBwYWdlICosCisJdW5zaWduZWQgbG9uZywgdm9pZCAqLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOwogI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKIAlkbyB7CQkJCQkJCVwKIAkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwkJCQlcCkBAIC0zNzAsMTcgKzM1Miw2IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLXZpdnRfZmx1c2hfcHRyYWNlX2FjY2VzcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkgdW5zaWduZWQgbG9uZyB1YWRkciwgdm9pZCAqa2FkZHIsCi0JCQkgdW5zaWduZWQgbG9uZyBsZW4sIGludCB3cml0ZSkKLXsKLQlpZiAoY3B1bWFza190ZXN0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sodm1hLT52bV9tbSkpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKWthZGRyOwotCQlfX2NwdWNfY29oZXJlbnRfa2Vybl9yYW5nZShhZGRyLCBhZGRyICsgbGVuKTsKLQl9Ci19Ci0KICNpZm5kZWYgQ09ORklHX0NQVV9DQUNIRV9WSVBUCiAjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKSBcCiAJCXZpdnRfZmx1c2hfY2FjaGVfbW0obW0pCkBAIC0zODgsMTUgKzM1OSwxMCBAQAogCQl2aXZ0X2ZsdXNoX2NhY2hlX3JhbmdlKHZtYSxzdGFydCxlbmQpCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLGFkZHIscGZuKSBcCiAJCXZpdnRfZmx1c2hfY2FjaGVfcGFnZSh2bWEsYWRkcixwZm4pCi0jZGVmaW5lIGZsdXNoX3B0cmFjZV9hY2Nlc3Modm1hLHBhZ2UsdWEsa2EsbGVuLHdyaXRlKSBcCi0JCXZpdnRfZmx1c2hfcHRyYWNlX2FjY2Vzcyh2bWEscGFnZSx1YSxrYSxsZW4sd3JpdGUpCiAjZWxzZQogZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKIGV4dGVybiB2b2lkIGZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdXNlcl9hZGRyLCB1bnNpZ25lZCBsb25nIHBmbik7Ci1leHRlcm4gdm9pZCBmbHVzaF9wdHJhY2VfYWNjZXNzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQl1bnNpZ25lZCBsb25nIHVhZGRyLCB2b2lkICprYWRkciwKLQkJCQl1bnNpZ25lZCBsb25nIGxlbiwgaW50IHdyaXRlKTsKICNlbmRpZgogCiAjZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkgZmx1c2hfY2FjaGVfbW0obW0pCkBAIC00NDcsNiArNDEzLDE2IEBACiAJICAgIDogInIiICgwKSk7CiAjZW5kaWYKIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9rZXJuZWxfdm1hcF9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSkKK3sKKwlpZiAoKGNhY2hlX2lzX3ZpdnQoKSB8fCBjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkpKQorCSAgX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKGFkZHIsIChzaXplX3Qpc2l6ZSk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZV9rZXJuZWxfdm1hcF9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSkKK3sKKwlpZiAoKGNhY2hlX2lzX3ZpdnQoKSB8fCBjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkpKQorCSAgX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhKGFkZHIsIChzaXplX3Qpc2l6ZSk7Cit9CiAKICNkZWZpbmUgQVJDSF9IQVNfRkxVU0hfQU5PTl9QQUdFCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfYW5vbl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2xrZGV2LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jbGtkZXYuaAppbmRleCBiNmVjN2M2Li43YTA2OTBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jbGtkZXYuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jbGtkZXYuaApAQCAtMjcsNCArMjcsNyBAQAogdm9pZCBjbGtkZXZfYWRkKHN0cnVjdCBjbGtfbG9va3VwICpjbCk7CiB2b2lkIGNsa2Rldl9kcm9wKHN0cnVjdCBjbGtfbG9va3VwICpjbCk7CiAKK3ZvaWQgY2xrZGV2X2FkZF90YWJsZShzdHJ1Y3QgY2xrX2xvb2t1cCAqLCBzaXplX3QpOworaW50IGNsa19hZGRfYWxpYXMoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc3RydWN0IGRldmljZSAqKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCBhOTYzMDBiLi4yNTZlZTFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTU3LDE4ICs1Nyw1OCBAQAogI2VuZGlmCiAKIC8qCi0gKiBETUEtY29uc2lzdGVudCBtYXBwaW5nIGZ1bmN0aW9ucy4gIFRoZXNlIGFsbG9jYXRlL2ZyZWUgYSByZWdpb24gb2YKLSAqIHVuY2FjaGVkLCB1bndyaXRlLWJ1ZmZlcmVkIG1hcHBlZCBtZW1vcnkgc3BhY2UgZm9yIHVzZSB3aXRoIERNQQotICogZGV2aWNlcy4gIFRoaXMgaXMgdGhlICJnZW5lcmljIiB2ZXJzaW9uLiAgVGhlIFBDSSBzcGVjaWZpYyB2ZXJzaW9uCi0gKiBpcyBpbiBwY2kuaAorICogVGhlIERNQSBBUEkgaXMgYnVpbHQgdXBvbiB0aGUgbm90aW9uIG9mICJidWZmZXIgb3duZXJzaGlwIi4gIEEgYnVmZmVyCisgKiBpcyBlaXRoZXIgZXhjbHVzaXZlbHkgb3duZWQgYnkgdGhlIENQVSAoYW5kIHRoZXJlZm9yZSBtYXkgYmUgYWNjZXNzZWQKKyAqIGJ5IGl0KSBvciBleGNsdXNpdmVseSBvd25lZCBieSB0aGUgRE1BIGRldmljZS4gIFRoZXNlIGhlbHBlciBmdW5jdGlvbnMKKyAqIHJlcHJlc2VudCB0aGUgdHJhbnNpdGlvbnMgYmV0d2VlbiB0aGVzZSB0d28gb3duZXJzaGlwIHN0YXRlcy4KICAqCi0gKiBOb3RlOiBEcml2ZXJzIHNob3VsZCBOT1QgdXNlIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHksIGFzIGl0IHdpbGwgYnJlYWsKLSAqIHBsYXRmb3JtcyB3aXRoIENPTkZJR19ETUFCT1VOQ0UuCi0gKiBVc2UgdGhlIGRyaXZlciBETUEgc3VwcG9ydCAtIHNlZSBkbWEtbWFwcGluZy5oIChkbWFfc3luY18qKQorICogTm90ZSwgaG93ZXZlciwgdGhhdCBvbiBsYXRlciBBUk1zLCB0aGlzIG5vdGlvbiBkb2VzIG5vdCB3b3JrIGR1ZSB0bworICogc3BlY3VsYXRpdmUgcHJlZmV0Y2hlcy4gIFdlIG1vZGVsIG91ciBhcHByb2FjaCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0CisgKiB0aGUgQ1BVIGRvZXMgZG8gc3BlY3VsYXRpdmUgcHJlZmV0Y2hlcywgd2hpY2ggbWVhbnMgd2UgY2xlYW4gY2FjaGVzCisgKiBiZWZvcmUgdHJhbnNmZXJzIGFuZCBkZWxheSBjYWNoZSBpbnZhbGlkYXRpb24gdW50aWwgdHJhbnNmZXIgY29tcGxldGlvbi4KKyAqCisgKiBQcml2YXRlIHN1cHBvcnQgZnVuY3Rpb25zOiB0aGVzZSBhcmUgbm90IHBhcnQgb2YgdGhlIEFQSSBhbmQgYXJlCisgKiBsaWFibGUgdG8gY2hhbmdlLiAgRHJpdmVycyBtdXN0IG5vdCB1c2UgdGhlc2UuCiAgKi8KLWV4dGVybiB2b2lkIGRtYV9jYWNoZV9tYWludChjb25zdCB2b2lkICprYWRkciwgc2l6ZV90IHNpemUsIGludCBydyk7Ci1leHRlcm4gdm9pZCBkbWFfY2FjaGVfbWFpbnRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJIHNpemVfdCBzaXplLCBpbnQgcncpOworc3RhdGljIGlubGluZSB2b2lkIF9fZG1hX3NpbmdsZV9jcHVfdG9fZGV2KGNvbnN0IHZvaWQgKmthZGRyLCBzaXplX3Qgc2l6ZSwKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJZXh0ZXJuIHZvaWQgX19fZG1hX3NpbmdsZV9jcHVfdG9fZGV2KGNvbnN0IHZvaWQgKiwgc2l6ZV90LAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7CisKKwlpZiAoIWFyY2hfaXNfY29oZXJlbnQoKSkKKwkJX19fZG1hX3NpbmdsZV9jcHVfdG9fZGV2KGthZGRyLCBzaXplLCBkaXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kbWFfc2luZ2xlX2Rldl90b19jcHUoY29uc3Qgdm9pZCAqa2FkZHIsIHNpemVfdCBzaXplLAorCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlleHRlcm4gdm9pZCBfX19kbWFfc2luZ2xlX2Rldl90b19jcHUoY29uc3Qgdm9pZCAqLCBzaXplX3QsCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKKworCWlmICghYXJjaF9pc19jb2hlcmVudCgpKQorCQlfX19kbWFfc2luZ2xlX2Rldl90b19jcHUoa2FkZHIsIHNpemUsIGRpcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RtYV9wYWdlX2NwdV90b19kZXYoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2ZmLAorCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJZXh0ZXJuIHZvaWQgX19fZG1hX3BhZ2VfY3B1X3RvX2RldihzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCBsb25nLAorCQlzaXplX3QsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKKworCWlmICghYXJjaF9pc19jb2hlcmVudCgpKQorCQlfX19kbWFfcGFnZV9jcHVfdG9fZGV2KHBhZ2UsIG9mZiwgc2l6ZSwgZGlyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZG1hX3BhZ2VfZGV2X3RvX2NwdShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmYsCisJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlleHRlcm4gdm9pZCBfX19kbWFfcGFnZV9kZXZfdG9fY3B1KHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcsCisJCXNpemVfdCwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOworCisJaWYgKCFhcmNoX2lzX2NvaGVyZW50KCkpCisJCV9fX2RtYV9wYWdlX2Rldl90b19jcHUocGFnZSwgb2ZmLCBzaXplLCBkaXIpOworfQogCiAvKgogICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIGRldmljZSBETUEgYWRkcmVzcyBtYXNrIGNhbiBiZSBzdXBwb3J0ZWQKQEAgLTMwNCw4ICszNDQsNyBAQAogewogCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKIAotCWlmICghYXJjaF9pc19jb2hlcmVudCgpKQotCQlkbWFfY2FjaGVfbWFpbnQoY3B1X2FkZHIsIHNpemUsIGRpcik7CisJX19kbWFfc2luZ2xlX2NwdV90b19kZXYoY3B1X2FkZHIsIHNpemUsIGRpcik7CiAKIAlyZXR1cm4gdmlydF90b19kbWEoZGV2LCBjcHVfYWRkcik7CiB9CkBAIC0zMjksOCArMzY4LDcgQEAKIHsKIAlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CiAKLQlpZiAoIWFyY2hfaXNfY29oZXJlbnQoKSkKLQkJZG1hX2NhY2hlX21haW50X3BhZ2UocGFnZSwgb2Zmc2V0LCBzaXplLCBkaXIpOworCV9fZG1hX3BhZ2VfY3B1X3RvX2RldihwYWdlLCBvZmZzZXQsIHNpemUsIGRpcik7CiAKIAlyZXR1cm4gcGFnZV90b19kbWEoZGV2LCBwYWdlKSArIG9mZnNldDsKIH0KQEAgLTM1Miw3ICszOTAsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGhhbmRsZSwKIAkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQkvKiBub3RoaW5nIHRvIGRvICovCisJX19kbWFfc2luZ2xlX2Rldl90b19jcHUoZG1hX3RvX3ZpcnQoZGV2LCBoYW5kbGUpLCBzaXplLCBkaXIpOwogfQogCiAvKioKQEAgLTM3Miw3ICs0MTAsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBoYW5kbGUsCiAJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7Ci0JLyogbm90aGluZyB0byBkbyAqLworCV9fZG1hX3BhZ2VfZGV2X3RvX2NwdShkbWFfdG9fcGFnZShkZXYsIGhhbmRsZSksIGhhbmRsZSAmIH5QQUdFX01BU0ssCisJCXNpemUsIGRpcik7CiB9CiAjZW5kaWYgLyogQ09ORklHX0RNQUJPVU5DRSAqLwogCkBAIC00MDAsNyArNDM5LDEwIEBACiB7CiAJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcikpOwogCi0JZG1hYm91bmNlX3N5bmNfZm9yX2NwdShkZXYsIGhhbmRsZSwgb2Zmc2V0LCBzaXplLCBkaXIpOworCWlmICghZG1hYm91bmNlX3N5bmNfZm9yX2NwdShkZXYsIGhhbmRsZSwgb2Zmc2V0LCBzaXplLCBkaXIpKQorCQlyZXR1cm47CisKKwlfX2RtYV9zaW5nbGVfZGV2X3RvX2NwdShkbWFfdG9fdmlydChkZXYsIGhhbmRsZSkgKyBvZmZzZXQsIHNpemUsIGRpcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC00MTIsOCArNDU0LDcgQEAKIAlpZiAoIWRtYWJvdW5jZV9zeW5jX2Zvcl9kZXZpY2UoZGV2LCBoYW5kbGUsIG9mZnNldCwgc2l6ZSwgZGlyKSkKIAkJcmV0dXJuOwogCi0JaWYgKCFhcmNoX2lzX2NvaGVyZW50KCkpCi0JCWRtYV9jYWNoZV9tYWludChkbWFfdG9fdmlydChkZXYsIGhhbmRsZSkgKyBvZmZzZXQsIHNpemUsIGRpcik7CisJX19kbWFfc2luZ2xlX2NwdV90b19kZXYoZG1hX3RvX3ZpcnQoZGV2LCBoYW5kbGUpICsgb2Zmc2V0LCBzaXplLCBkaXIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggZDJhNTljZi4uYzk4MDE1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oCkBAIC02OSw5ICs2OSwxNiBAQAogLyoKICAqIF9fYXJtX2lvcmVtYXAgdGFrZXMgQ1BVIHBoeXNpY2FsIGFkZHJlc3MuCiAgKiBfX2FybV9pb3JlbWFwX3BmbiB0YWtlcyBhIFBhZ2UgRnJhbWUgTnVtYmVyIGFuZCBhbiBvZmZzZXQgaW50byB0aGF0IHBhZ2UKKyAqIFRoZSBfY2FsbGVyIHZhcmlldHkgdGFrZXMgYSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkgdmFsdWUgZm9yCisgKiAvcHJvYy92bWFsbG9jIHRvIHVzZSAtIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGluIG5vbi1pbmxpbmUgZnVuY3Rpb25zLgogICovCi1leHRlcm4gdm9pZCBfX2lvbWVtICogX19hcm1faW9yZW1hcF9wZm4odW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgX19pb21lbSAqIF9fYXJtX2lvcmVtYXAodW5zaWduZWQgbG9uZywgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgX19pb21lbSAqX19hcm1faW9yZW1hcF9wZm5fY2FsbGVyKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJc2l6ZV90LCB1bnNpZ25lZCBpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCBfX2lvbWVtICpfX2FybV9pb3JlbWFwX2NhbGxlcih1bnNpZ25lZCBsb25nLCBzaXplX3QsIHVuc2lnbmVkIGludCwKKwl2b2lkICopOworCitleHRlcm4gdm9pZCBfX2lvbWVtICpfX2FybV9pb3JlbWFwX3Bmbih1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBzaXplX3QsIHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBfX2lvbWVtICpfX2FybV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcsIHNpemVfdCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIF9faW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC90aW1lLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3RpbWUuaAppbmRleCBiMmNjMWZjLi44YmZmYzNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3RpbWUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3RpbWUuaApAQCAtNDYsMTIgKzQ2LDQgQEAKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyICpzeXN0ZW1fdGltZXI7CiBleHRlcm4gdm9pZCB0aW1lcl90aWNrKHZvaWQpOwogCi0vKgotICogS2VybmVsIHRpbWUga2VlcGluZyBzdXBwb3J0LgotICovCi1zdHJ1Y3QgdGltZXNwZWM7Ci1leHRlcm4gaW50ICgqc2V0X3J0Yykodm9pZCk7Ci1leHRlcm4gdm9pZCBzYXZlX3RpbWVfZGVsdGEoc3RydWN0IHRpbWVzcGVjICpkZWx0YSwgc3RydWN0IHRpbWVzcGVjICpydGMpOwotZXh0ZXJuIHZvaWQgcmVzdG9yZV90aW1lX2RlbHRhKHN0cnVjdCB0aW1lc3BlYyAqZGVsdGEsIHN0cnVjdCB0aW1lc3BlYyAqcnRjKTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCmluZGV4IDU0MjFkODIuLjQzMTJlZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCkBAIC03Niw2ICs3NiwxNyBAQAogICovCiAjZGVmaW5lIElPUkVNQVBfTUFYX09SREVSCTI0CiAKKy8qCisgKiBTaXplIG9mIERNQS1jb25zaXN0ZW50IG1lbW9yeSByZWdpb24uICBNdXN0IGJlIG11bHRpcGxlIG9mIDJNLAorICogYmV0d2VlbiAyTUIgYW5kIDE0TUIgaW5jbHVzaXZlLgorICovCisjaWZuZGVmIENPTlNJU1RFTlRfRE1BX1NJWkUKKyNkZWZpbmUgQ09OU0lTVEVOVF9ETUFfU0laRSAJU1pfMk0KKyNlbmRpZgorCisjZGVmaW5lIENPTlNJU1RFTlRfRU5ECQkoMHhmZmUwMDAwMFVMKQorI2RlZmluZSBDT05TSVNURU5UX0JBU0UJCShDT05TSVNURU5UX0VORCAtIENPTlNJU1RFTlRfRE1BX1NJWkUpCisKICNlbHNlIC8qIENPTkZJR19NTVUgKi8KIAogLyoKQEAgLTkzLDExICsxMDQsMTEgQEAKICNlbmRpZgogCiAjaWZuZGVmIFBIWVNfT0ZGU0VUCi0jZGVmaW5lIFBIWVNfT0ZGU0VUIAkJKENPTkZJR19EUkFNX0JBU0UpCisjZGVmaW5lIFBIWVNfT0ZGU0VUIAkJVUwoQ09ORklHX0RSQU1fQkFTRSkKICNlbmRpZgogCiAjaWZuZGVmIEVORF9NRU0KLSNkZWZpbmUgRU5EX01FTSAgICAgCQkoQ09ORklHX0RSQU1fQkFTRSArIENPTkZJR19EUkFNX1NJWkUpCisjZGVmaW5lIEVORF9NRU0gICAgIAkJKFVMKENPTkZJR19EUkFNX0JBU0UpICsgQ09ORklHX0RSQU1fU0laRSkKICNlbmRpZgogCiAjaWZuZGVmIFBBR0VfT0ZGU0VUCkBAIC0xMTMsMTQgKzEyNCw2IEBACiAjZW5kaWYgLyogIUNPTkZJR19NTVUgKi8KIAogLyoKLSAqIFNpemUgb2YgRE1BLWNvbnNpc3RlbnQgbWVtb3J5IHJlZ2lvbi4gIE11c3QgYmUgbXVsdGlwbGUgb2YgMk0sCi0gKiBiZXR3ZWVuIDJNQiBhbmQgMTRNQiBpbmNsdXNpdmUuCi0gKi8KLSNpZm5kZWYgQ09OU0lTVEVOVF9ETUFfU0laRQotI2RlZmluZSBDT05TSVNURU5UX0RNQV9TSVpFIFNaXzJNCi0jZW5kaWYKLQotLyoKICAqIFBoeXNpY2FsIHZzIHZpcnR1YWwgUkFNIGFkZHJlc3Mgc3BhY2UgY29udmVyc2lvbi4gIFRoZXNlIGFyZQogICogcHJpdmF0ZSBkZWZpbml0aW9ucyB3aGljaCBzaG91bGQgTk9UIGJlIHVzZWQgb3V0c2lkZSBtZW1vcnkuaAogICogZmlsZXMuICBVc2UgdmlydF90b19waHlzL3BoeXNfdG9fdmlydC9fX3BhL19fdmEgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW11LmgKaW5kZXggYjU2MTU4NC4uNjg4NzBjNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW11LmgKQEAgLTYsNiArNiw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAjaWZkZWYgQ09ORklHX0NQVV9IQVNfQVNJRAogCXVuc2lnbmVkIGludCBpZDsKKwlzcGlubG9ja190IGlkX2xvY2s7CiAjZW5kaWYKIAl1bnNpZ25lZCBpbnQga3ZtX3NlcTsKIH0gbW1fY29udGV4dF90OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggZGU2Y2VmYi4uYTBiM2NhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC00MywxMiArNDMsMjMgQEAKICNkZWZpbmUgQVNJRF9GSVJTVF9WRVJTSU9OCSgxIDw8IEFTSURfQklUUykKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBjcHVfbGFzdF9hc2lkOworI2lmZGVmIENPTkZJR19TTVAKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbW1fc3RydWN0ICosIGN1cnJlbnRfbW0pOworI2VuZGlmCiAKIHZvaWQgX19pbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiB2b2lkIF9fbmV3X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKKwkvKgorCSAqIFRoaXMgY29kZSBpcyBleGVjdXRlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4gVGhlcmVmb3JlLAorCSAqIG1tLT5jb250ZXh0LmlkIGNhbm5vdCBiZSB1cGRhdGVkIHRvIHRoZSBsYXRlc3QgQVNJRCB2ZXJzaW9uCisJICogb24gYSBkaWZmZXJlbnQgQ1BVIChhbmQgY29uZGl0aW9uIGJlbG93IG5vdCB0cmlnZ2VyZWQpCisJICogd2l0aG91dCBmaXJzdCBnZXR0aW5nIGFuIElQSSB0byByZXNldCB0aGUgY29udGV4dC4gVGhlCisJICogYWx0ZXJuYXRpdmUgaXMgdG8gdGFrZSBhIHJlYWRfbG9jayBvbiBtbS0+Y29udGV4dC5pZF9sb2NrCisJICogKGFmdGVyIGNoYW5naW5nIGl0cyB0eXBlIHRvIHJ3bG9ja190KS4KKwkgKi8KIAlpZiAodW5saWtlbHkoKG1tLT5jb250ZXh0LmlkIF4gY3B1X2xhc3RfYXNpZCkgPj4gQVNJRF9CSVRTKSkKIAkJX19uZXdfY29udGV4dChtbSk7CiAKQEAgLTEwOCw2ICsxMTksMTAgQEAKIAkJX19mbHVzaF9pY2FjaGVfYWxsKCk7CiAjZW5kaWYKIAlpZiAoIWNwdW1hc2tfdGVzdF9hbmRfc2V0X2NwdShjcHUsIG1tX2NwdW1hc2sobmV4dCkpIHx8IHByZXYgIT0gbmV4dCkgeworI2lmZGVmIENPTkZJR19TTVAKKwkJc3RydWN0IG1tX3N0cnVjdCAqKmNydF9tbSA9ICZwZXJfY3B1KGN1cnJlbnRfbW0sIGNwdSk7CisJCSpjcnRfbW0gPSBuZXh0OworI2VuZGlmCiAJCWNoZWNrX2NvbnRleHQobmV4dCk7CiAJCWNwdV9zd2l0Y2hfbW0obmV4dC0+cGdkLCBuZXh0KTsKIAkJaWYgKGNhY2hlX2lzX3ZpdnQoKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCAzYTMyYWY0Li5hNDg1YWMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xMTcsMTEgKzExNywxMiBAQAogI2VuZGlmCiAKIHN0cnVjdCBwYWdlOworc3RydWN0IHZtX2FyZWFfc3RydWN0OwogCiBzdHJ1Y3QgY3B1X3VzZXJfZm5zIHsKIAl2b2lkICgqY3B1X2NsZWFyX3VzZXJfaGlnaHBhZ2UpKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyKTsKIAl2b2lkICgqY3B1X2NvcHlfdXNlcl9oaWdocGFnZSkoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSwKLQkJCXVuc2lnbmVkIGxvbmcgdmFkZHIpOworCQkJdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogfTsKIAogI2lmZGVmIE1VTFRJX1VTRVIKQEAgLTEzNyw3ICsxMzgsNyBAQAogCiBleHRlcm4gdm9pZCBfX2NwdV9jbGVhcl91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyKTsKIGV4dGVybiB2b2lkIF9fY3B1X2NvcHlfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqdG8sIHN0cnVjdCBwYWdlICpmcm9tLAotCQkJdW5zaWduZWQgbG9uZyB2YWRkcik7CisJCQl1bnNpZ25lZCBsb25nIHZhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiAjZW5kaWYKIAogI2RlZmluZSBjbGVhcl91c2VyX2hpZ2hwYWdlKHBhZ2UsdmFkZHIpCQlcCkBAIC0xNDUsNyArMTQ2LDcgQEAKIAogI2RlZmluZSBfX0hBVkVfQVJDSF9DT1BZX1VTRVJfSElHSFBBR0UKICNkZWZpbmUgY29weV91c2VyX2hpZ2hwYWdlKHRvLGZyb20sdmFkZHIsdm1hKQlcCi0JX19jcHVfY29weV91c2VyX2hpZ2hwYWdlKHRvLCBmcm9tLCB2YWRkcikKKwlfX2NwdV9jb3B5X3VzZXJfaGlnaHBhZ2UodG8sIGZyb20sIHZhZGRyLCB2bWEpCiAKICNkZWZpbmUgY2xlYXJfcGFnZShwYWdlKQltZW1zZXQoKHZvaWQgKikocGFnZSksIDAsIFBBR0VfU0laRSkKIGV4dGVybiB2b2lkIGNvcHlfcGFnZSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDllMzA0OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgcGljb0NoaXAgRGVzaWducyBMdGQsIEphbWllIElsZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVJNX1BFUkZfRVZFTlRfSF9fCisjZGVmaW5lIF9fQVJNX1BFUkZfRVZFTlRfSF9fCisKKy8qCisgKiBOT1A6IG9uICptb3N0KiAocmVhZDogYWxsIHN1cHBvcnRlZCkgQVJNIHBsYXRmb3JtcywgdGhlIHBlcmZvcm1hbmNlCisgKiBjb3VudGVyIGludGVycnVwdHMgYXJlIHJlZ3VsYXIgaW50ZXJydXB0cyBhbmQgbm90IGFuIE5NSS4gVGhpcworICogbWVhbnMgdGhhdCB3aGVuIHdlIHJlY2VpdmUgdGhlIGludGVycnVwdCB3ZSBjYW4gY2FsbAorICogcGVyZl9ldmVudF9kb19wZW5kaW5nKCkgdGhhdCBoYW5kbGVzIGFsbCBvZiB0aGUgd29yayB3aXRoCisgKiBpbnRlcnJ1cHRzIGVuYWJsZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorc2V0X3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKQoreworfQorCisvKiBBUk0gcGVyZm9ybWFuY2UgY291bnRlcnMgc3RhcnQgZnJvbSAxIChpbiB0aGUgY3AxNSBhY2Nlc3Nlcykgc28gdXNlIHRoZQorICogc2FtZSBpbmRleGVzIGhlcmUgZm9yIGNvbnNpc3RlbmN5LiAqLworI2RlZmluZSBQRVJGX0VWRU5UX0lOREVYX09GRlNFVCAxCisKKyNlbmRpZiAvKiBfX0FSTV9QRVJGX0VWRU5UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS1ub21tdS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS1ub21tdS5oCmluZGV4IGIwMTFmMmUuLjAxM2NmY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtbm9tbXUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLW5vbW11LmgKQEAgLTg2LDggKzg2LDggQEAKICAqIEFsbCAzMmJpdCBhZGRyZXNzZXMgYXJlIGVmZmVjdGl2ZWx5IHZhbGlkIGZvciB2bWFsbG9jLi4uCiAgKiBTb3J0IG9mIG1lYW5pbmdsZXNzIGZvciBub24tVk0gdGFyZ2V0cy4KICAqLwotI2RlZmluZQlWTUFMTE9DX1NUQVJUCTAKLSNkZWZpbmUJVk1BTExPQ19FTkQJMHhmZmZmZmZmZgorI2RlZmluZQlWTUFMTE9DX1NUQVJUCTBVTAorI2RlZmluZQlWTUFMTE9DX0VORAkweGZmZmZmZmZmVUwKIAogI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MgICAgICAoMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcG11LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODI5YjlmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcG11LmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9pbmNsdWRlL2FzbS9wbXUuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgcGljb0NoaXAgRGVzaWducyBMdGQsIEphbWllIElsZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVJNX1BNVV9IX18KKyNkZWZpbmUgX19BUk1fUE1VX0hfXworCisjaWZkZWYgQ09ORklHX0NQVV9IQVNfUE1VCisKK3N0cnVjdCBwbXVfaXJxcyB7CisJY29uc3QgaW50ICAgKmlycXM7CisJaW50CSAgICBudW1faXJxczsKK307CisKKy8qKgorICogcmVzZXJ2ZV9wbXUoKSAtIHJlc2VydmUgdGhlIGhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzCisgKgorICogUmVzZXJ2ZSB0aGUgaGFyZHdhcmUgcGVyZm9ybWFuY2UgY291bnRlcnMgaW4gdGhlIHN5c3RlbSBmb3IgZXhjbHVzaXZlIHVzZS4KKyAqIFRoZSAnc3RydWN0IHBtdV9pcnFzJyBmb3IgdGhlIHN5c3RlbSBpcyByZXR1cm5lZCBvbiBzdWNjZXNzLCBFUlJfUFRSKCkKKyAqIGVuY29kZWQgZXJyb3Igb24gZmFpbHVyZS4KKyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBwbXVfaXJxcyAqCityZXNlcnZlX3BtdSh2b2lkKTsKKworLyoqCisgKiByZWxlYXNlX3BtdSgpIC0gUmVsaW5xdWlzaCBjb250cm9sIG9mIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVycworICoKKyAqIFJlbGVhc2UgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGFuZCBhbGxvdyBzb21lb25lIGVsc2UgdG8gdXNlIHRoZW0uCisgKiBDYWxsZXJzIG11c3QgaGF2ZSBkaXNhYmxlZCB0aGUgY291bnRlcnMgYW5kIHJlbGVhc2VkIElSUXMgYmVmb3JlIGNhbGxpbmcKKyAqIHRoaXMuIFRoZSAnc3RydWN0IHBtdV9pcnFzJyByZXR1cm5lZCBmcm9tIHJlc2VydmVfcG11KCkgbXVzdCBiZSBwYXNzZWQgYXMKKyAqIGEgY29va2llLgorICovCitleHRlcm4gaW50CityZWxlYXNlX3BtdShjb25zdCBzdHJ1Y3QgcG11X2lycXMgKmlycXMpOworCisvKioKKyAqIGluaXRfcG11KCkgLSBJbml0aWFsaXNlIHRoZSBQTVUuCisgKgorICogSW5pdGlhbGlzZSB0aGUgc3lzdGVtIHJlYWR5IGZvciBQTVUgZW5hYmxpbmcuIFRoaXMgc2hvdWxkIHR5cGljYWxseSBzZXQgdGhlCisgKiBJUlEgYWZmaW5pdHkgYW5kIG5vdGhpbmcgZWxzZS4gVGhlIHVzZXJzIChvcHJvZmlsZS9wZXJmIGV2ZW50cyBldGMpIHdpbGwgZG8KKyAqIHRoZSBhY3R1YWwgaGFyZHdhcmUgaW5pdGlhbGlzYXRpb24uCisgKi8KK2V4dGVybiBpbnQKK2luaXRfcG11KHZvaWQpOworCisjZWxzZSAvKiBDT05GSUdfQ1BVX0hBU19QTVUgKi8KKworc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgcG11X2lycXMgKgorcmVzZXJ2ZV9wbXUodm9pZCkKK3sKKwlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3JlbGVhc2VfcG11KGNvbnN0IHN0cnVjdCBwbXVfaXJxcyAqaXJxcykKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2luaXRfcG11KHZvaWQpCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQ1BVX0hBU19QTVUgKi8KKworI2VuZGlmIC8qIF9fQVJNX1BNVV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IDVjY2NlMGEuLmYzOTJmYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtMjIzLDE4ICsyMjMsNiBAQAogI2RlZmluZSBiYW5rX3BoeXNfZW5kKGJhbmspCSgoYmFuayktPnN0YXJ0ICsgKGJhbmspLT5zaXplKQogI2RlZmluZSBiYW5rX3BoeXNfc2l6ZShiYW5rKQkoYmFuayktPnNpemUKIAotLyoKLSAqIEVhcmx5IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzLgotICovCi1zdHJ1Y3QgZWFybHlfcGFyYW1zIHsKLQljb25zdCBjaGFyICphcmc7Ci0Jdm9pZCAoKmZuKShjaGFyICoqcCk7Ci19OwotCi0jZGVmaW5lIF9fZWFybHlfcGFyYW0obmFtZSxmbikJCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgZWFybHlfcGFyYW1zIF9fZWFybHlfIyNmbiBfX3VzZWQJCQlcCi1fX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmVhcmx5X3BhcmFtLmluaXQiKSkpID0geyBuYW1lLCBmbiB9Ci0KICNlbmRpZiAgLyogIF9fS0VSTkVMX18gICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wX3BsYXQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcF9wbGF0LmgKaW5kZXggNTkzMDNlMi4uZTYyMTUzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wX3BsYXQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zbXBfcGxhdC5oCkBAIC0xMyw0ICsxMyw5IEBACiAJcmV0dXJuICgocmVhZF9jcHVpZF9leHQoQ1BVSURfRVhUX01NRlIzKSA+PiAxMikgJiAweGYpIDwgMjsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgY2FjaGVfb3BzX25lZWRfYnJvYWRjYXN0KHZvaWQpCit7CisJcmV0dXJuICgocmVhZF9jcHVpZF9leHQoQ1BVSURfRVhUX01NRlIzKSA+PiAxMikgJiAweGYpIDwgMTsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCBjOTFjNjRjLi4xN2ViMzU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTUsNiArNSwyMiBAQAogI2Vycm9yIFNNUCBub3Qgc3VwcG9ydGVkIG9uIHByZS1BUk12NiBDUFVzCiAjZW5kaWYKIAorc3RhdGljIGlubGluZSB2b2lkIGRzYl9zZXYodm9pZCkKK3sKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJImRzYlxuIgorCQkic2V2IgorCSk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfMzJ2NkspCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDRcbiIKKwkJInNldiIKKwkJOiA6ICJyIiAoMCkKKwkpOworI2VuZGlmCit9CisKIC8qCiAgKiBBUk12NiBTcGluLWxvY2tpbmcuCiAgKgpAQCAtNjksMTMgKzg1LDExIEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKICIJc3RyCSUxLCBbJTBdXG4iCi0jaWZkZWYgQ09ORklHX0NQVV8zMnY2SwotIgltY3IJcDE1LCAwLCAlMSwgYzcsIGMxMCwgNFxuIiAvKiBEU0IgKi8KLSIJc2V2IgotI2VuZGlmCiAJOgogCTogInIiICgmbG9jay0+bG9jayksICJyIiAoMCkKIAk6ICJjYyIpOworCisJZHNiX3NldigpOwogfQogCiAvKgpAQCAtMTMyLDEzICsxNDYsMTEgQEAKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCSJzdHIJJTEsIFslMF1cbiIKLSNpZmRlZiBDT05GSUdfQ1BVXzMydjZLCi0iCW1jcglwMTUsIDAsICUxLCBjNywgYzEwLCA0XG4iIC8qIERTQiAqLwotIglzZXZcbiIKLSNlbmRpZgogCToKIAk6ICJyIiAoJnJ3LT5sb2NrKSwgInIiICgwKQogCTogImNjIik7CisKKwlkc2Jfc2V2KCk7CiB9CiAKIC8qIHdyaXRlX2Nhbl9sb2NrIC0gd291bGQgd3JpdGVfdHJ5bG9jaygpIHN1Y2NlZWQ/ICovCkBAIC0xODgsMTQgKzIwMCwxMiBAQAogIglzdHJleAklMSwgJTAsIFslMl1cbiIKICIJdGVxCSUxLCAjMFxuIgogIglibmUJMWIiCi0jaWZkZWYgQ09ORklHX0NQVV8zMnY2SwotIlxuCWNtcAklMCwgIzBcbiIKLSIJbWNyZXEgICBwMTUsIDAsICUwLCBjNywgYzEwLCA0XG4iCi0iCXNldmVxIgotI2VuZGlmCiAJOiAiPSZyIiAodG1wKSwgIj0mciIgKHRtcDIpCiAJOiAiciIgKCZydy0+bG9jaykKIAk6ICJjYyIpOworCisJaWYgKHRtcCA9PSAwKQorCQlkc2Jfc2V2KCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGFyY2hfcmVhZF90cnlsb2NrKGFyY2hfcndsb2NrX3QgKnJ3KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCAwNThlN2U5Li5jYTg4ZTZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtNzMsOCArNzMsNyBAQAogCiBzdHJ1Y3QgcHRfcmVnczsKIAotdm9pZCBkaWUoY29uc3QgY2hhciAqbXNnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGVycikKLQkJX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKK3ZvaWQgZGllKGNvbnN0IGNoYXIgKm1zZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBlcnIpOwogCiBzdHJ1Y3Qgc2lnaW5mbzsKIHZvaWQgYXJtX25vdGlmeV9kaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHNpZ2luZm8gKmluZm8sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAyZGZiN2Q3Li5iNzQ5NzBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTExNSw3ICsxMTUsOCBAQAogZXh0ZXJuIHZvaWQgaXdtbXh0X3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGhyZWFkX2luZm8gKik7CiBleHRlcm4gdm9pZCBpd21teHRfdGFza19zd2l0Y2goc3RydWN0IHRocmVhZF9pbmZvICopOwogCi1leHRlcm4gdm9pZCB2ZnBfc3luY19zdGF0ZShzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCk7CitleHRlcm4gdm9pZCB2ZnBfc3luY19od3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqKTsKK2V4dGVybiB2b2lkIHZmcF9mbHVzaF9od3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCmluZGV4IGMyZjE2MDUuLmUwODVlMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaApAQCAtNTI5LDcgKzUyOSw4IEBACiAgKiBjYWNoZSBlbnRyaWVzIGZvciB0aGUga2VybmVscyB2aXJ0dWFsIG1lbW9yeSByYW5nZSBhcmUgd3JpdHRlbgogICogYmFjayB0byB0aGUgcGFnZS4KICAqLwotZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGUpOworZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCXB0ZV90ICpwdGVwKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQppbmRleCBkZDAwZjc0Li4yNmQzMDJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw3IEBACiAJCSAgIHByb2Nlc3MubyBwdHJhY2UubyByZXR1cm5fYWRkcmVzcy5vIHNldHVwLm8gc2lnbmFsLm8gXAogCQkgICBzeXNfYXJtLm8gc3RhY2t0cmFjZS5vIHRpbWUubyB0cmFwcy5vCiAKK29iai0kKENPTkZJR19MRURTKQkJKz0gbGVkcy5vCiBvYmotJChDT05GSUdfT0NfRVRNKQkJKz0gZXRtLm8KIAogb2JqLSQoQ09ORklHX0lTQV9ETUFfQVBJKQkrPSBkbWEubwpAQCAtNDYsNiArNDcsOCBAQAogb2JqLSQoQ09ORklHX0NQVV9YU0MzKQkJKz0geHNjYWxlLWNwMC5vCiBvYmotJChDT05GSUdfQ1BVX01PSEFXSykJKz0geHNjYWxlLWNwMC5vCiBvYmotJChDT05GSUdfSVdNTVhUKQkJKz0gaXdtbXh0Lm8KK29iai0kKENPTkZJR19DUFVfSEFTX1BNVSkJKz0gcG11Lm8KK29iai0kKENPTkZJR19IV19QRVJGX0VWRU5UUykJKz0gcGVyZl9ldmVudC5vCiBBRkxBR1NfaXdtbXh0Lm8JCQk6PSAtV2EsLW1jcHU9aXdtbXh0CiAKIGlmbmVxICgkKENPTkZJR19BUkNIX0VCU0ExMTApLHkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDRhODgxMjUuLjg4MzUxMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0xMiw2ICsxMiw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgpAQCAtMTEyLDUgKzExMyw5IEBACiAjaWZkZWYgTVVMVElfUEFCT1JUCiAgIERFRklORShQUk9DRVNTT1JfUEFCVF9GVU5DLAlvZmZzZXRvZihzdHJ1Y3QgcHJvY2Vzc29yLCBfcHJlZmV0Y2hfYWJvcnQpKTsKICNlbmRpZgorICBCTEFOSygpOworICBERUZJTkUoRE1BX0JJRElSRUNUSU9OQUwsCURNQV9CSURJUkVDVElPTkFMKTsKKyAgREVGSU5FKERNQV9UT19ERVZJQ0UsCQlETUFfVE9fREVWSUNFKTsKKyAgREVGSU5FKERNQV9GUk9NX0RFVklDRSwJRE1BX0ZST01fREVWSUNFKTsKICAgcmV0dXJuIDA7IAogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jIGIvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jCmluZGV4IDgwOTY4MTkuLmJkMzk3ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYworKysgYi9hcmNoL2FybS9rZXJuZWwvYmlvczMyLmMKQEAgLTYxNiwxNSArNjE2LDE3IEBACiAgKiBidXQgd2Ugd2FudCB0byB0cnkgdG8gYXZvaWQgYWxsb2NhdGluZyBhdCAweDI5MDAtMHgyYmZmCiAgKiB3aGljaCBtaWdodCBiZSBtaXJyb3JlZCBhdCAweDAxMDAtMHgwM2ZmLi4KICAqLwotdm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCityZXNvdXJjZV9zaXplX3QgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8gJiYgc3RhcnQgJiAweDMwMCkKIAkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7CiAKLQlyZXMtPnN0YXJ0ID0gKHN0YXJ0ICsgYWxpZ24gLSAxKSAmIH4oYWxpZ24gLSAxKTsKKwlzdGFydCA9IChzdGFydCArIGFsaWduIC0gMSkgJiB+KGFsaWduIC0gMSk7CisKKwlyZXR1cm4gc3RhcnQ7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMgYi9hcmNoL2FybS9rZXJuZWwvZGVidWcuUwppbmRleCA1YzkxYWRkLi5hMzhiNDg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZGVidWcuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZGVidWcuUwpAQCAtMjQsNyArMjQsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1Y2KQogCi0JCS5tYWNybwlhZGRydWFydCwgcngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCS5lbmRtCiAKIAkJLm1hY3JvCXNlbmR1YXJ0LCByZCwgcngKQEAgLTUxLDcgKzUxLDcgQEAKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1Y3KQogCi0JCS5tYWNybwlhZGRydWFydCwgcngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCS5lbmRtCiAKIAkJLm1hY3JvCXNlbmR1YXJ0LCByZCwgcngKQEAgLTcxLDcgKzcxLDcgQEAKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1hTQ0FMRSkKIAotCQkubWFjcm8JYWRkcnVhcnQsIHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQkuZW5kbQogCiAJCS5tYWNybwlzZW5kdWFydCwgcmQsIHJ4CkBAIC05OCw3ICs5OCw3IEBACiAKICNlbHNlCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LCByeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJLmVuZG0KIAogCQkubWFjcm8Jc2VuZHVhcnQsIHJkLCByeApAQCAtMTY0LDcgKzE2NCw3IEBACiAJCS5sdG9yZwogCiBFTlRSWShwcmludGFzY2lpKQotCQlhZGRydWFydCByMworCQlhZGRydWFydCByMywgcjEKIAkJYgkyZgogMToJCXdhaXR1YXJ0IHIyLCByMwogCQlzZW5kdWFydCByMSwgcjMKQEAgLTE4MCw3ICsxODAsNyBAQAogRU5EUFJPQyhwcmludGFzY2lpKQogCiBFTlRSWShwcmludGNoKQotCQlhZGRydWFydCByMworCQlhZGRydWFydCByMywgcjEKIAkJbW92CXIxLCByMAogCQltb3YJcjAsICMwCiAJCWIJMWIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9sZWRzLmMgYi9hcmNoL2FybS9rZXJuZWwvbGVkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYTMxNmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvbGVkcy5jCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogTEVEIHN1cHBvcnQgY29kZSwgcmlwcGVkIG91dCBvZiBhcmNoL2FybS9rZXJuZWwvdGltZS5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0yMDAxIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisKKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorCitzdGF0aWMgdm9pZCBkdW1teV9sZWRzX2V2ZW50KGxlZF9ldmVudF90IGV2dCkKK3sKK30KKwordm9pZCAoKmxlZHNfZXZlbnQpKGxlZF9ldmVudF90KSA9IGR1bW15X2xlZHNfZXZlbnQ7CisKK3N0cnVjdCBsZWRzX2V2dF9uYW1lIHsKKwljb25zdCBjaGFyCW5hbWVbOF07CisJaW50CQlvbjsKKwlpbnQJCW9mZjsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGVkc19ldnRfbmFtZSBldnRfbmFtZXNbXSA9IHsKKwl7ICJhbWJlciIsIGxlZF9hbWJlcl9vbiwgbGVkX2FtYmVyX29mZiB9LAorCXsgImJsdWUiLCAgbGVkX2JsdWVfb24sICBsZWRfYmx1ZV9vZmYgIH0sCisJeyAiZ3JlZW4iLCBsZWRfZ3JlZW5fb24sIGxlZF9ncmVlbl9vZmYgfSwKKwl7ICJyZWQiLCAgIGxlZF9yZWRfb24sICAgbGVkX3JlZF9vZmYgICB9LAorfTsKKworc3RhdGljIHNzaXplX3QgbGVkc19zdG9yZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCWludCByZXQgPSAtRUlOVkFMLCBsZW4gPSBzdHJjc3BuKGJ1ZiwgIiAiKTsKKworCWlmIChsZW4gPiAwICYmIGJ1ZltsZW5dID09ICdcMCcpCisJCWxlbi0tOworCisJaWYgKHN0cm5jbXAoYnVmLCAiY2xhaW0iLCBsZW4pID09IDApIHsKKwkJbGVkc19ldmVudChsZWRfY2xhaW0pOworCQlyZXQgPSBzaXplOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJyZWxlYXNlIiwgbGVuKSA9PSAwKSB7CisJCWxlZHNfZXZlbnQobGVkX3JlbGVhc2UpOworCQlyZXQgPSBzaXplOworCX0gZWxzZSB7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGV2dF9uYW1lcyk7IGkrKykgeworCQkJaWYgKHN0cmxlbihldnRfbmFtZXNbaV0ubmFtZSkgIT0gbGVuIHx8CisJCQkgICAgc3RybmNtcChidWYsIGV2dF9uYW1lc1tpXS5uYW1lLCBsZW4pICE9IDApCisJCQkJY29udGludWU7CisJCQlpZiAoc3RybmNtcChidWYrbGVuLCAiIG9uIiwgMykgPT0gMCkgeworCQkJCWxlZHNfZXZlbnQoZXZ0X25hbWVzW2ldLm9uKTsKKwkJCQlyZXQgPSBzaXplOworCQkJfSBlbHNlIGlmIChzdHJuY21wKGJ1ZitsZW4sICIgb2ZmIiwgNCkgPT0gMCkgeworCQkJCWxlZHNfZXZlbnQoZXZ0X25hbWVzW2ldLm9mZik7CisJCQkJcmV0ID0gc2l6ZTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBTWVNERVZfQVRUUihldmVudCwgMDIwMCwgTlVMTCwgbGVkc19zdG9yZSk7CisKK3N0YXRpYyBpbnQgbGVkc19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlsZWRzX2V2ZW50KGxlZF9zdG9wKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZWRzX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCWxlZHNfZXZlbnQobGVkX3N0YXJ0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZWRzX3NodXRkb3duKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJbGVkc19ldmVudChsZWRfaGFsdGVkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgbGVkc19zeXNjbGFzcyA9IHsKKwkubmFtZQkJPSAibGVkcyIsCisJLnNodXRkb3duCT0gbGVkc19zaHV0ZG93biwKKwkuc3VzcGVuZAk9IGxlZHNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGxlZHNfcmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGxlZHNfZGV2aWNlID0geworCS5pZAkJPSAwLAorCS5jbHMJCT0gJmxlZHNfc3lzY2xhc3MsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBsZWRzX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCXJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmbGVkc19zeXNjbGFzcyk7CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJmxlZHNfZGV2aWNlKTsKKwlpZiAocmV0ID09IDApCisJCXJldCA9IHN5c2Rldl9jcmVhdGVfZmlsZSgmbGVkc19kZXZpY2UsICZhdHRyX2V2ZW50KTsKKwlyZXR1cm4gcmV0OworfQorCitkZXZpY2VfaW5pdGNhbGwobGVkc19pbml0KTsKKworRVhQT1JUX1NZTUJPTChsZWRzX2V2ZW50KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NGNlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0wLDAgKzEsMjI3NiBAQAorI3VuZGVmIERFQlVHCisKKy8qCisgKiBBUk0gcGVyZm9ybWFuY2UgY291bnRlciBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBwaWNvQ2hpcCBEZXNpZ25zLCBMdGQuLCBKYW1pZSBJbGVzCisgKgorICogQVJNdjcgc3VwcG9ydDogSmVhbiBQaWhldCA8anBpaGV0QG12aXN0YS5jb20+CisgKiAyMDEwIChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBMTEMuCisgKgorICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIHRoZSBzcGFyYzY0IHBlcmYgZXZlbnQgY29kZSwgd2hpY2ggaXMgaW4gdHVybiBiYXNlZAorICogb24gdGhlIHg4NiBjb2RlLiBDYWxsY2hhaW4gY29kZSBpcyBiYXNlZCBvbiB0aGUgQVJNIE9Qcm9maWxlIGJhY2t0cmFjZQorICogY29kZS4KKyAqLworI2RlZmluZSBwcl9mbXQoZm10KSAiaHcgcGVyZmV2ZW50czogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgorI2luY2x1ZGUgPGFzbS9wbXUuaD4KKyNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdV9pcnFzICpwbXVfaXJxczsKKworLyoKKyAqIEhhcmR3YXJlIGxvY2sgdG8gc2VyaWFsaXplIGFjY2Vzc2VzIHRvIFBNVSByZWdpc3RlcnMuIE5lZWRlZCBmb3IgdGhlCisgKiByZWFkL21vZGlmeS93cml0ZSBzZXF1ZW5jZXMuCisgKi8KK0RFRklORV9TUElOTE9DSyhwbXVfbG9jayk7CisKKy8qCisgKiBBUk12NiBzdXBwb3J0cyBhIG1heGltdW0gb2YgMyBldmVudHMsIHN0YXJ0aW5nIGZyb20gaW5kZXggMS4gSWYgd2UgYWRkCisgKiBhbm90aGVyIHBsYXRmb3JtIHRoYXQgc3VwcG9ydHMgbW9yZSwgd2UgbmVlZCB0byBpbmNyZWFzZSB0aGlzIHRvIGJlIHRoZQorICogbGFyZ2VzdCBvZiBhbGwgcGxhdGZvcm1zLgorICoKKyAqIEFSTXY3IHN1cHBvcnRzIHVwIHRvIDMyIGV2ZW50czoKKyAqICBjeWNsZSBjb3VudGVyIENDTlQgKyAzMSBldmVudHMgY291bnRlcnMgQ05UMC4uMzAuCisgKiAgQ29ydGV4LUE4IGhhcyAxKzQgY291bnRlcnMsIENvcnRleC1BOSBoYXMgMSs2IGNvdW50ZXJzLgorICovCisjZGVmaW5lIEFSTVBNVV9NQVhfSFdFVkVOVFMJCTMzCisKKy8qIFRoZSBldmVudHMgZm9yIGEgZ2l2ZW4gQ1BVLiAqLworc3RydWN0IGNwdV9od19ldmVudHMgeworCS8qCisJICogVGhlIGV2ZW50cyB0aGF0IGFyZSBhY3RpdmUgb24gdGhlIENQVSBmb3IgdGhlIGdpdmVuIGluZGV4LiBJbmRleCAwCisJICogaXMgcmVzZXJ2ZWQuCisJICovCisJc3RydWN0IHBlcmZfZXZlbnQJKmV2ZW50c1tBUk1QTVVfTUFYX0hXRVZFTlRTXTsKKworCS8qCisJICogQSAxIGJpdCBmb3IgYW4gaW5kZXggaW5kaWNhdGVzIHRoYXQgdGhlIGNvdW50ZXIgaXMgYmVpbmcgdXNlZCBmb3IKKwkgKiBhbiBldmVudC4gQSAwIG1lYW5zIHRoYXQgdGhlIGNvdW50ZXIgY2FuIGJlIHVzZWQuCisJICovCisJdW5zaWduZWQgbG9uZwkJdXNlZF9tYXNrW0JJVFNfVE9fTE9OR1MoQVJNUE1VX01BWF9IV0VWRU5UUyldOworCisJLyoKKwkgKiBBIDEgYml0IGZvciBhbiBpbmRleCBpbmRpY2F0ZXMgdGhhdCB0aGUgY291bnRlciBpcyBhY3RpdmVseSBiZWluZworCSAqIHVzZWQuCisJICovCisJdW5zaWduZWQgbG9uZwkJYWN0aXZlX21hc2tbQklUU19UT19MT05HUyhBUk1QTVVfTUFYX0hXRVZFTlRTKV07Cit9OworREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV9od19ldmVudHMsIGNwdV9od19ldmVudHMpOworCitzdHJ1Y3QgYXJtX3BtdSB7CisJY2hhcgkJKm5hbWU7CisJaXJxcmV0dXJuX3QJKCpoYW5kbGVfaXJxKShpbnQgaXJxX251bSwgdm9pZCAqZGV2KTsKKwl2b2lkCQkoKmVuYWJsZSkoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmV2dCwgaW50IGlkeCk7CisJdm9pZAkJKCpkaXNhYmxlKShzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqZXZ0LCBpbnQgaWR4KTsKKwlpbnQJCSgqZXZlbnRfbWFwKShpbnQgZXZ0KTsKKwl1NjQJCSgqcmF3X2V2ZW50KSh1NjQpOworCWludAkJKCpnZXRfZXZlbnRfaWR4KShzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkJCQkJIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpOworCXUzMgkJKCpyZWFkX2NvdW50ZXIpKGludCBpZHgpOworCXZvaWQJCSgqd3JpdGVfY291bnRlcikoaW50IGlkeCwgdTMyIHZhbCk7CisJdm9pZAkJKCpzdGFydCkodm9pZCk7CisJdm9pZAkJKCpzdG9wKSh2b2lkKTsKKwlpbnQJCW51bV9ldmVudHM7CisJdTY0CQltYXhfcGVyaW9kOworfTsKKworLyogU2V0IGF0IHJ1bnRpbWUgd2hlbiB3ZSBrbm93IHdoYXQgQ1BVIHR5cGUgd2UgYXJlLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhcm1fcG11ICphcm1wbXU7CisKKyNkZWZpbmUgSFdfT1BfVU5TVVBQT1JURUQJCTB4RkZGRgorCisjZGVmaW5lIEMoX3gpIFwKKwlQRVJGX0NPVU5UX0hXX0NBQ0hFXyMjX3gKKworI2RlZmluZSBDQUNIRV9PUF9VTlNVUFBPUlRFRAkJMHhGRkZGCisKK3N0YXRpYyB1bnNpZ25lZCBhcm1wbXVfcGVyZl9jYWNoZV9tYXBbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCisJCQkJICAgICBbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJICAgICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXTsKKworc3RhdGljIGludAorYXJtcG11X21hcF9jYWNoZV9ldmVudCh1NjQgY29uZmlnKQoreworCXVuc2lnbmVkIGludCBjYWNoZV90eXBlLCBjYWNoZV9vcCwgY2FjaGVfcmVzdWx0LCByZXQ7CisKKwljYWNoZV90eXBlID0gKGNvbmZpZyA+PiAgMCkgJiAweGZmOworCWlmIChjYWNoZV90eXBlID49IFBFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNhY2hlX29wID0gKGNvbmZpZyA+PiAgOCkgJiAweGZmOworCWlmIChjYWNoZV9vcCA+PSBQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljYWNoZV9yZXN1bHQgPSAoY29uZmlnID4+IDE2KSAmIDB4ZmY7CisJaWYgKGNhY2hlX3Jlc3VsdCA+PSBQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gKGludClhcm1wbXVfcGVyZl9jYWNoZV9tYXBbY2FjaGVfdHlwZV1bY2FjaGVfb3BdW2NhY2hlX3Jlc3VsdF07CisKKwlpZiAocmV0ID09IENBQ0hFX09QX1VOU1VQUE9SVEVEKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2FybXBtdV9ldmVudF9zZXRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsCisJCQlpbnQgaWR4KQoreworCXM2NCBsZWZ0ID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7CisJczY0IHBlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh1bmxpa2VseShsZWZ0IDw9IC1wZXJpb2QpKSB7CisJCWxlZnQgPSBwZXJpb2Q7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7CisJCWh3Yy0+bGFzdF9wZXJpb2QgPSBwZXJpb2Q7CisJCXJldCA9IDE7CisJfQorCisJaWYgKHVubGlrZWx5KGxlZnQgPD0gMCkpIHsKKwkJbGVmdCArPSBwZXJpb2Q7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7CisJCWh3Yy0+bGFzdF9wZXJpb2QgPSBwZXJpb2Q7CisJCXJldCA9IDE7CisJfQorCisJaWYgKGxlZnQgPiAoczY0KWFybXBtdS0+bWF4X3BlcmlvZCkKKwkJbGVmdCA9IGFybXBtdS0+bWF4X3BlcmlvZDsKKworCWF0b21pYzY0X3NldCgmaHdjLT5wcmV2X2NvdW50LCAodTY0KS1sZWZ0KTsKKworCWFybXBtdS0+d3JpdGVfY291bnRlcihpZHgsICh1NjQpKC1sZWZ0KSAmIDB4ZmZmZmZmZmYpOworCisJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHU2NAorYXJtcG11X2V2ZW50X3VwZGF0ZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCSAgICBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAorCQkgICAgaW50IGlkeCkKK3sKKwlpbnQgc2hpZnQgPSA2NCAtIDMyOworCXM2NCBwcmV2X3Jhd19jb3VudCwgbmV3X3Jhd19jb3VudDsKKwlzNjQgZGVsdGE7CisKK2FnYWluOgorCXByZXZfcmF3X2NvdW50ID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wcmV2X2NvdW50KTsKKwluZXdfcmF3X2NvdW50ID0gYXJtcG11LT5yZWFkX2NvdW50ZXIoaWR4KTsKKworCWlmIChhdG9taWM2NF9jbXB4Y2hnKCZod2MtPnByZXZfY291bnQsIHByZXZfcmF3X2NvdW50LAorCQkJICAgICBuZXdfcmF3X2NvdW50KSAhPSBwcmV2X3Jhd19jb3VudCkKKwkJZ290byBhZ2FpbjsKKworCWRlbHRhID0gKG5ld19yYXdfY291bnQgPDwgc2hpZnQpIC0gKHByZXZfcmF3X2NvdW50IDw8IHNoaWZ0KTsKKwlkZWx0YSA+Pj0gc2hpZnQ7CisKKwlhdG9taWM2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOworCWF0b21pYzY0X3N1YihkZWx0YSwgJmh3Yy0+cGVyaW9kX2xlZnQpOworCisJcmV0dXJuIG5ld19yYXdfY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkCithcm1wbXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlpbnQgaWR4ID0gaHdjLT5pZHg7CisKKwlXQVJOX09OKGlkeCA8IDApOworCisJY2xlYXJfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spOworCWFybXBtdS0+ZGlzYWJsZShod2MsIGlkeCk7CisKKwliYXJyaWVyKCk7CisKKwlhcm1wbXVfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7CisJY3B1Yy0+ZXZlbnRzW2lkeF0gPSBOVUxMOworCWNsZWFyX2JpdChpZHgsIGNwdWMtPnVzZWRfbWFzayk7CisKKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7Cit9CisKK3N0YXRpYyB2b2lkCithcm1wbXVfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisKKwkvKiBEb24ndCByZWFkIGRpc2FibGVkIGNvdW50ZXJzISAqLworCWlmIChod2MtPmlkeCA8IDApCisJCXJldHVybjsKKworCWFybXBtdV9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaHdjLT5pZHgpOworfQorCitzdGF0aWMgdm9pZAorYXJtcG11X3VudGhyb3R0bGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCisJLyoKKwkgKiBTZXQgdGhlIHBlcmlvZCBhZ2Fpbi4gU29tZSBjb3VudGVycyBjYW4ndCBiZSBzdG9wcGVkLCBzbyB3aGVuIHdlCisJICogd2VyZSB0aHJvdHRsZWQgd2Ugc2ltcGx5IGRpc2FibGVkIHRoZSBJUlEgc291cmNlIGFuZCB0aGUgY291bnRlcgorCSAqIG1heSBoYXZlIGJlZW4gbGVmdCBjb3VudGluZy4gSWYgd2UgZG9uJ3QgZG8gdGhpcyBzdGVwIHRoZW4gd2UgbWF5CisJICogZ2V0IGFuIGludGVycnVwdCB0b28gc29vbiBvciAqd2F5KiB0b28gbGF0ZSBpZiB0aGUgb3ZlcmZsb3cgaGFzCisJICogaGFwcGVuZWQgc2luY2UgZGlzYWJsaW5nLgorCSAqLworCWFybXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGh3Yy0+aWR4KTsKKwlhcm1wbXUtPmVuYWJsZShod2MsIGh3Yy0+aWR4KTsKK30KKworc3RhdGljIGludAorYXJtcG11X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlpbnQgaWR4OworCWludCBlcnIgPSAwOworCisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIHNwYWNlIGZvciB0aGUgY291bnRlciB0aGVuIGZpbmlzaCBlYXJseS4gKi8KKwlpZHggPSBhcm1wbXUtPmdldF9ldmVudF9pZHgoY3B1YywgaHdjKTsKKwlpZiAoaWR4IDwgMCkgeworCQllcnIgPSBpZHg7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogSWYgdGhlcmUgaXMgYW4gZXZlbnQgaW4gdGhlIGNvdW50ZXIgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGVuIG1ha2UKKwkgKiBzdXJlIGl0IGlzIGRpc2FibGVkLgorCSAqLworCWV2ZW50LT5ody5pZHggPSBpZHg7CisJYXJtcG11LT5kaXNhYmxlKGh3YywgaWR4KTsKKwljcHVjLT5ldmVudHNbaWR4XSA9IGV2ZW50OworCXNldF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzayk7CisKKwkvKiBTZXQgdGhlIHBlcmlvZCBmb3IgdGhlIGV2ZW50LiAqLworCWFybXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCk7CisKKwkvKiBFbmFibGUgdGhlIGV2ZW50LiAqLworCWFybXBtdS0+ZW5hYmxlKGh3YywgaWR4KTsKKworCS8qIFByb3BhZ2F0ZSBvdXIgY2hhbmdlcyB0byB0aGUgdXNlcnNwYWNlIG1hcHBpbmcuICovCisJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOworCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBwbXUgcG11ID0geworCS5lbmFibGUJICAgID0gYXJtcG11X2VuYWJsZSwKKwkuZGlzYWJsZSAgICA9IGFybXBtdV9kaXNhYmxlLAorCS51bnRocm90dGxlID0gYXJtcG11X3VudGhyb3R0bGUsCisJLnJlYWQJICAgID0gYXJtcG11X3JlYWQsCit9OworCitzdGF0aWMgaW50Cit2YWxpZGF0ZV9ldmVudChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkgICAgICAgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50IGZha2VfZXZlbnQgPSBldmVudC0+aHc7CisKKwlpZiAoZXZlbnQtPnBtdSAmJiBldmVudC0+cG11ICE9ICZwbXUpCisJCXJldHVybiAwOworCisJcmV0dXJuIGFybXBtdS0+Z2V0X2V2ZW50X2lkeChjcHVjLCAmZmFrZV9ldmVudCkgPj0gMDsKK30KKworc3RhdGljIGludAordmFsaWRhdGVfZ3JvdXAoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpzaWJsaW5nLCAqbGVhZGVyID0gZXZlbnQtPmdyb3VwX2xlYWRlcjsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyBmYWtlX3BtdTsKKworCW1lbXNldCgmZmFrZV9wbXUsIDAsIHNpemVvZihmYWtlX3BtdSkpOworCisJaWYgKCF2YWxpZGF0ZV9ldmVudCgmZmFrZV9wbXUsIGxlYWRlcikpCisJCXJldHVybiAtRU5PU1BDOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzaWJsaW5nLCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBzaWJsaW5nKSkKKwkJCXJldHVybiAtRU5PU1BDOworCX0KKworCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBldmVudCkpCisJCXJldHVybiAtRU5PU1BDOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FybXBtdV9yZXNlcnZlX2hhcmR3YXJlKHZvaWQpCit7CisJaW50IGk7CisJaW50IGVycjsKKworCXBtdV9pcnFzID0gcmVzZXJ2ZV9wbXUoKTsKKwlpZiAoSVNfRVJSKHBtdV9pcnFzKSkgeworCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gcmVzZXJ2ZSBwbXVcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwbXVfaXJxcyk7CisJfQorCisJaW5pdF9wbXUoKTsKKworCWlmIChwbXVfaXJxcy0+bnVtX2lycXMgPCAxKSB7CisJCXByX2Vycigibm8gaXJxcyBmb3IgUE1VcyBkZWZpbmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHBtdV9pcnFzLT5udW1faXJxczsgKytpKSB7CisJCWVyciA9IHJlcXVlc3RfaXJxKHBtdV9pcnFzLT5pcnFzW2ldLCBhcm1wbXUtPmhhbmRsZV9pcnEsCisJCQkJICBJUlFGX0RJU0FCTEVELCAiYXJtcG11IiwgTlVMTCk7CisJCWlmIChlcnIpIHsKKwkJCXByX3dhcm5pbmcoInVuYWJsZSB0byByZXF1ZXN0IElSUSVkIGZvciBBUk0gIgorCQkJCSAgICJwZXJmIGNvdW50ZXJzXG4iLCBwbXVfaXJxcy0+aXJxc1tpXSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChlcnIpIHsKKwkJZm9yIChpID0gaSAtIDE7IGkgPj0gMDsgLS1pKQorCQkJZnJlZV9pcnEocG11X2lycXMtPmlycXNbaV0sIE5VTEwpOworCQlyZWxlYXNlX3BtdShwbXVfaXJxcyk7CisJCXBtdV9pcnFzID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZAorYXJtcG11X3JlbGVhc2VfaGFyZHdhcmUodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IHBtdV9pcnFzLT5udW1faXJxcyAtIDE7IGkgPj0gMDsgLS1pKQorCQlmcmVlX2lycShwbXVfaXJxcy0+aXJxc1tpXSwgTlVMTCk7CisJYXJtcG11LT5zdG9wKCk7CisKKwlyZWxlYXNlX3BtdShwbXVfaXJxcyk7CisJcG11X2lycXMgPSBOVUxMOworfQorCitzdGF0aWMgYXRvbWljX3QgYWN0aXZlX2V2ZW50cyA9IEFUT01JQ19JTklUKDApOworc3RhdGljIERFRklORV9NVVRFWChwbXVfcmVzZXJ2ZV9tdXRleCk7CisKK3N0YXRpYyB2b2lkCitod19wZXJmX2V2ZW50X2Rlc3Ryb3koc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCWlmIChhdG9taWNfZGVjX2FuZF9tdXRleF9sb2NrKCZhY3RpdmVfZXZlbnRzLCAmcG11X3Jlc2VydmVfbXV0ZXgpKSB7CisJCWFybXBtdV9yZWxlYXNlX2hhcmR3YXJlKCk7CisJCW11dGV4X3VubG9jaygmcG11X3Jlc2VydmVfbXV0ZXgpOworCX0KK30KKworc3RhdGljIGludAorX19od19wZXJmX2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWludCBtYXBwaW5nLCBlcnI7CisKKwkvKiBEZWNvZGUgdGhlIGdlbmVyaWMgdHlwZSBpbnRvIGFuIEFSTSBldmVudCBpZGVudGlmaWVyLiAqLworCWlmIChQRVJGX1RZUEVfSEFSRFdBUkUgPT0gZXZlbnQtPmF0dHIudHlwZSkgeworCQltYXBwaW5nID0gYXJtcG11LT5ldmVudF9tYXAoZXZlbnQtPmF0dHIuY29uZmlnKTsKKwl9IGVsc2UgaWYgKFBFUkZfVFlQRV9IV19DQUNIRSA9PSBldmVudC0+YXR0ci50eXBlKSB7CisJCW1hcHBpbmcgPSBhcm1wbXVfbWFwX2NhY2hlX2V2ZW50KGV2ZW50LT5hdHRyLmNvbmZpZyk7CisJfSBlbHNlIGlmIChQRVJGX1RZUEVfUkFXID09IGV2ZW50LT5hdHRyLnR5cGUpIHsKKwkJbWFwcGluZyA9IGFybXBtdS0+cmF3X2V2ZW50KGV2ZW50LT5hdHRyLmNvbmZpZyk7CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoImV2ZW50IHR5cGUgJXggbm90IHN1cHBvcnRlZFxuIiwgZXZlbnQtPmF0dHIudHlwZSk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlpZiAobWFwcGluZyA8IDApIHsKKwkJcHJfZGVidWcoImV2ZW50ICV4OiVsbHggbm90IHN1cHBvcnRlZFxuIiwgZXZlbnQtPmF0dHIudHlwZSwKKwkJCSBldmVudC0+YXR0ci5jb25maWcpOworCQlyZXR1cm4gbWFwcGluZzsKKwl9CisKKwkvKgorCSAqIENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byBleGNsdWRlIHRoZSBjb3VudGVyIGZyb20gY2VydGFpbiBtb2Rlcy4KKwkgKiBUaGUgQVJNIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGFyZSBvbiBhbGwgb2YgdGhlIHRpbWUgc28gaWYgc29tZW9uZQorCSAqIGhhcyBhc2tlZCB1cyBmb3Igc29tZSBleGNsdWRlcyB0aGVuIHdlIGhhdmUgdG8gZmFpbC4KKwkgKi8KKwlpZiAoZXZlbnQtPmF0dHIuZXhjbHVkZV9rZXJuZWwgfHwgZXZlbnQtPmF0dHIuZXhjbHVkZV91c2VyIHx8CisJICAgIGV2ZW50LT5hdHRyLmV4Y2x1ZGVfaHYgfHwgZXZlbnQtPmF0dHIuZXhjbHVkZV9pZGxlKSB7CisJCXByX2RlYnVnKCJBUk0gcGVyZm9ybWFuY2UgY291bnRlcnMgZG8gbm90IHN1cHBvcnQgIgorCQkJICJtb2RlIGV4Y2x1c2lvblxuIik7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJLyoKKwkgKiBXZSBkb24ndCBhc3NpZ24gYW4gaW5kZXggdW50aWwgd2UgYWN0dWFsbHkgcGxhY2UgdGhlIGV2ZW50IG9udG8KKwkgKiBoYXJkd2FyZS4gVXNlIC0xIHRvIHNpZ25pZnkgdGhhdCB3ZSBoYXZlbid0IGRlY2lkZWQgd2hlcmUgdG8gcHV0IGl0CisJICogeWV0LiBGb3IgU01QIHN5c3RlbXMsIGVhY2ggY29yZSBoYXMgaXQncyBvd24gUE1VIHNvIHdlIGNhbid0IGRvIGFueQorCSAqIGNsZXZlciBhbGxvY2F0aW9uIG9yIGNvbnN0cmFpbnRzIGNoZWNraW5nIGF0IHRoaXMgcG9pbnQuCisJICovCisJaHdjLT5pZHggPSAtMTsKKworCS8qCisJICogU3RvcmUgdGhlIGV2ZW50IGVuY29kaW5nIGludG8gdGhlIGNvbmZpZ19iYXNlIGZpZWxkLiBjb25maWcgYW5kCisJICogZXZlbnRfYmFzZSBhcmUgdW51c2VkIGFzIHRoZSBvbmx5IDIgdGhpbmdzIHdlIG5lZWQgdG8ga25vdyBhcmUKKwkgKiB0aGUgZXZlbnQgbWFwcGluZyBhbmQgdGhlIGNvdW50ZXIgdG8gdXNlLiBUaGUgY291bnRlciB0byB1c2UgaXMKKwkgKiBhbHNvIHRoZSBpbmR4IGFuZCB0aGUgY29uZmlnX2Jhc2UgaXMgdGhlIGV2ZW50IHR5cGUuCisJICovCisJaHdjLT5jb25maWdfYmFzZQkgICAgPSAodW5zaWduZWQgbG9uZyltYXBwaW5nOworCWh3Yy0+Y29uZmlnCQkgICAgPSAwOworCWh3Yy0+ZXZlbnRfYmFzZQkJICAgID0gMDsKKworCWlmICghaHdjLT5zYW1wbGVfcGVyaW9kKSB7CisJCWh3Yy0+c2FtcGxlX3BlcmlvZCAgPSBhcm1wbXUtPm1heF9wZXJpb2Q7CisJCWh3Yy0+bGFzdF9wZXJpb2QgICAgPSBod2MtPnNhbXBsZV9wZXJpb2Q7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKKwl9CisKKwllcnIgPSAwOworCWlmIChldmVudC0+Z3JvdXBfbGVhZGVyICE9IGV2ZW50KSB7CisJCWVyciA9IHZhbGlkYXRlX2dyb3VwKGV2ZW50KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK2NvbnN0IHN0cnVjdCBwbXUgKgoraHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmICghYXJtcG11KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKworCWV2ZW50LT5kZXN0cm95ID0gaHdfcGVyZl9ldmVudF9kZXN0cm95OworCisJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZhY3RpdmVfZXZlbnRzKSkgeworCQlpZiAoYXRvbWljX3JlYWQoJmFjdGl2ZV9ldmVudHMpID4gcGVyZl9tYXhfZXZlbnRzKSB7CisJCQlhdG9taWNfZGVjKCZhY3RpdmVfZXZlbnRzKTsKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOworCQl9CisKKwkJbXV0ZXhfbG9jaygmcG11X3Jlc2VydmVfbXV0ZXgpOworCQlpZiAoYXRvbWljX3JlYWQoJmFjdGl2ZV9ldmVudHMpID09IDApIHsKKwkJCWVyciA9IGFybXBtdV9yZXNlcnZlX2hhcmR3YXJlKCk7CisJCX0KKworCQlpZiAoIWVycikKKwkJCWF0b21pY19pbmMoJmFjdGl2ZV9ldmVudHMpOworCQltdXRleF91bmxvY2soJnBtdV9yZXNlcnZlX211dGV4KTsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJZXJyID0gX19od19wZXJmX2V2ZW50X2luaXQoZXZlbnQpOworCWlmIChlcnIpCisJCWh3X3BlcmZfZXZlbnRfZGVzdHJveShldmVudCk7CisKKwlyZXR1cm4gZXJyID8gRVJSX1BUUihlcnIpIDogJnBtdTsKK30KKwordm9pZAoraHdfcGVyZl9lbmFibGUodm9pZCkKK3sKKwkvKiBFbmFibGUgYWxsIG9mIHRoZSBwZXJmIGV2ZW50cyBvbiBoYXJkd2FyZS4gKi8KKwlpbnQgaWR4OworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisKKwlpZiAoIWFybXBtdSkKKwkJcmV0dXJuOworCisJZm9yIChpZHggPSAwOyBpZHggPD0gYXJtcG11LT5udW1fZXZlbnRzOyArK2lkeCkgeworCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBjcHVjLT5ldmVudHNbaWR4XTsKKworCQlpZiAoIWV2ZW50KQorCQkJY29udGludWU7CisKKwkJYXJtcG11LT5lbmFibGUoJmV2ZW50LT5odywgaWR4KTsKKwl9CisKKwlhcm1wbXUtPnN0YXJ0KCk7Cit9CisKK3ZvaWQKK2h3X3BlcmZfZGlzYWJsZSh2b2lkKQoreworCWlmIChhcm1wbXUpCisJCWFybXBtdS0+c3RvcCgpOworfQorCisvKgorICogQVJNdjYgUGVyZm9ybWFuY2UgY291bnRlciBoYW5kbGluZyBjb2RlLgorICoKKyAqIEFSTXY2IGhhcyAyIGNvbmZpZ3VyYWJsZSBwZXJmb3JtYW5jZSBjb3VudGVycyBhbmQgYSBzaW5nbGUgY3ljbGUgY291bnRlci4KKyAqIFRoZXkgYWxsIHNoYXJlIGEgc2luZ2xlIHJlc2V0IGJpdCBidXQgY2FuIGJlIHdyaXR0ZW4gdG8gemVybyBzbyB3ZSBjYW4gdXNlCisgKiB0aGF0IGZvciBhIHJlc2V0LgorICoKKyAqIFRoZSBjb3VudGVycyBjYW4ndCBiZSBpbmRpdmlkdWFsbHkgZW5hYmxlZCBvciBkaXNhYmxlZCBzbyB3aGVuIHdlIHJlbW92ZQorICogb25lIGV2ZW50IGFuZCByZXBsYWNlIGl0IHdpdGggYW5vdGhlciB3ZSBjb3VsZCBnZXQgc3B1cmlvdXMgY291bnRzIGZyb20gdGhlCisgKiB3cm9uZyBldmVudC4gSG93ZXZlciwgd2UgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgdGhlCisgKiBwZXJmb3JtYW5jZSBjb3VudGVycyBjYW4gZXhwb3J0IGV2ZW50cyB0byB0aGUgZXZlbnQgYnVzLCBhbmQgdGhlIGV2ZW50IGJ1cworICogaXRzZWxmIGNhbiBiZSBtb25pdG9yZWQuIFRoaXMgcmVxdWlyZXMgdGhhdCB3ZSAqZG9uJ3QqIGV4cG9ydCB0aGUgZXZlbnRzIHRvCisgKiB0aGUgZXZlbnQgYnVzLiBUaGUgcHJvY2VkdXJlIGZvciBkaXNhYmxpbmcgYSBjb25maWd1cmFibGUgY291bnRlciBpczoKKyAqCS0gY2hhbmdlIHRoZSBjb3VudGVyIHRvIGNvdW50IHRoZSBFVE1FWFRPVVRbMF0gc2lnbmFsICgweDIwKS4gVGhpcworICoJICBlZmZlY3RpdmVseSBzdG9wcyB0aGUgY291bnRlciBmcm9tIGNvdW50aW5nLgorICoJLSBkaXNhYmxlIHRoZSBjb3VudGVyJ3MgaW50ZXJydXB0IGdlbmVyYXRpb24gKGVhY2ggY291bnRlciBoYXMgaXQncworICoJICBvd24gaW50ZXJydXB0IGVuYWJsZSBiaXQpLgorICogT25jZSBzdG9wcGVkLCB0aGUgY291bnRlciB2YWx1ZSBjYW4gYmUgd3JpdHRlbiBhcyAwIHRvIHJlc2V0LgorICoKKyAqIFRvIGVuYWJsZSBhIGNvdW50ZXI6CisgKgktIGVuYWJsZSB0aGUgY291bnRlcidzIGludGVycnVwdCBnZW5lcmF0aW9uLgorICoJLSBzZXQgdGhlIG5ldyBldmVudCB0eXBlLgorICoKKyAqIE5vdGU6IHRoZSBkZWRpY2F0ZWQgY3ljbGUgY291bnRlciBvbmx5IGNvdW50cyBjeWNsZXMgYW5kIGNhbid0IGJlCisgKiBlbmFibGVkL2Rpc2FibGVkIGluZGVwZW5kZW50bHkgb2YgdGhlIG90aGVycy4gV2hlbiB3ZSB3YW50IHRvIGRpc2FibGUgdGhlCisgKiBjeWNsZSBjb3VudGVyLCB3ZSBoYXZlIHRvIGp1c3QgZGlzYWJsZSB0aGUgaW50ZXJydXB0IHJlcG9ydGluZyBhbmQgc3RhcnQKKyAqIGlnbm9yaW5nIHRoYXQgY291bnRlci4gV2hlbiByZS1lbmFibGluZywgd2UgaGF2ZSB0byByZXNldCB0aGUgdmFsdWUgYW5kCisgKiBlbmFibGUgdGhlIGludGVycnVwdC4KKyAqLworCitlbnVtIGFybXY2X3BlcmZfdHlwZXMgeworCUFSTVY2X1BFUkZDVFJfSUNBQ0hFX01JU1MJICAgID0gMHgwLAorCUFSTVY2X1BFUkZDVFJfSUJVRl9TVEFMTAkgICAgPSAweDEsCisJQVJNVjZfUEVSRkNUUl9EREVQX1NUQUxMCSAgICA9IDB4MiwKKwlBUk1WNl9QRVJGQ1RSX0lUTEJfTUlTUwkJICAgID0gMHgzLAorCUFSTVY2X1BFUkZDVFJfRFRMQl9NSVNTCQkgICAgPSAweDQsCisJQVJNVjZfUEVSRkNUUl9CUl9FWEVDCQkgICAgPSAweDUsCisJQVJNVjZfUEVSRkNUUl9CUl9NSVNQUkVESUNUCSAgICA9IDB4NiwKKwlBUk1WNl9QRVJGQ1RSX0lOU1RSX0VYRUMJICAgID0gMHg3LAorCUFSTVY2X1BFUkZDVFJfRENBQ0hFX0hJVAkgICAgPSAweDksCisJQVJNVjZfUEVSRkNUUl9EQ0FDSEVfQUNDRVNTCSAgICA9IDB4QSwKKwlBUk1WNl9QRVJGQ1RSX0RDQUNIRV9NSVNTCSAgICA9IDB4QiwKKwlBUk1WNl9QRVJGQ1RSX0RDQUNIRV9XQkFDSwkgICAgPSAweEMsCisJQVJNVjZfUEVSRkNUUl9TV19QQ19DSEFOR0UJICAgID0gMHhELAorCUFSTVY2X1BFUkZDVFJfTUFJTl9UTEJfTUlTUwkgICAgPSAweEYsCisJQVJNVjZfUEVSRkNUUl9FWFBMX0RfQUNDRVNTCSAgICA9IDB4MTAsCisJQVJNVjZfUEVSRkNUUl9MU1VfRlVMTF9TVEFMTAkgICAgPSAweDExLAorCUFSTVY2X1BFUkZDVFJfV0JVRl9EUkFJTkVECSAgICA9IDB4MTIsCisJQVJNVjZfUEVSRkNUUl9DUFVfQ1lDTEVTCSAgICA9IDB4RkYsCisJQVJNVjZfUEVSRkNUUl9OT1AJCSAgICA9IDB4MjAsCit9OworCitlbnVtIGFybXY2X2NvdW50ZXJzIHsKKwlBUk1WNl9DWUNMRV9DT1VOVEVSID0gMSwKKwlBUk1WNl9DT1VOVEVSMCwKKwlBUk1WNl9DT1VOVEVSMSwKK307CisKKy8qCisgKiBUaGUgaGFyZHdhcmUgZXZlbnRzIHRoYXQgd2Ugc3VwcG9ydC4gV2UgZG8gc3VwcG9ydCBjYWNoZSBvcGVyYXRpb25zIGJ1dAorICogd2UgaGF2ZSBoYXJ2YXJkIGNhY2hlcyBhbmQgbm8gd2F5IHRvIGNvbWJpbmUgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEKKyAqIGFjY2Vzc2VzL21pc3NlcyBpbiBoYXJkd2FyZS4KKyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFybXY2X3BlcmZfbWFwW1BFUkZfQ09VTlRfSFdfTUFYXSA9IHsKKwlbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkgICAgPSBBUk1WNl9QRVJGQ1RSX0NQVV9DWUNMRVMsCisJW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkgICAgPSBBUk1WNl9QRVJGQ1RSX0lOU1RSX0VYRUMsCisJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10gICAgPSBIV19PUF9VTlNVUFBPUlRFRCwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAorCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdID0gQVJNVjZfUEVSRkNUUl9CUl9FWEVDLAorCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCSAgICA9IEFSTVY2X1BFUkZDVFJfQlJfTUlTUFJFRElDVCwKKwlbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkgICAgPSBIV19PUF9VTlNVUFBPUlRFRCwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBhcm12Nl9wZXJmX2NhY2hlX21hcFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KKwkJCQkJICBbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJCSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPSB7CisJW0MoTDFEKV0gPSB7CisJCS8qCisJCSAqIFRoZSBwZXJmb3JtYW5jZSBjb3VudGVycyBkb24ndCBkaWZmZXJlbnRpYXRlIGJldHdlZW4gcmVhZAorCQkgKiBhbmQgd3JpdGUgYWNjZXNzZXMvbWlzc2VzIHNvIHRoaXMgaXNuJ3Qgc3RyaWN0bHkgY29ycmVjdCwKKwkJICogYnV0IGl0J3MgdGhlIGJlc3Qgd2UgY2FuIGRvLiBXcml0ZXMgYW5kIHJlYWRzIGdldAorCQkgKiBjb21iaW5lZC4KKwkJICovCisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY2X1BFUkZDVFJfRENBQ0hFX0FDQ0VTUywKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WNl9QRVJGQ1RSX0RDQUNIRV9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjZfUEVSRkNUUl9EQ0FDSEVfQUNDRVNTLAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY2X1BFUkZDVFJfRENBQ0hFX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKEwxSSldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WNl9QRVJGQ1RSX0lDQUNIRV9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjZfUEVSRkNUUl9JQ0FDSEVfTUlTUywKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoTEwpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoRFRMQildID0geworCQkvKgorCQkgKiBUaGUgQVJNIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGNhbiBjb3VudCBtaWNybyBEVExCIG1pc3NlcywKKwkJICogbWljcm8gSVRMQiBtaXNzZXMgYW5kIG1haW4gVExCIG1pc3Nlcy4gVGhlcmUgaXNuJ3QgYW4gZXZlbnQKKwkJICogZm9yIFRMQiBtaXNzZXMsIHNvIHVzZSB0aGUgbWljcm8gbWlzc2VzIGhlcmUgYW5kIGlmIHVzZXJzCisJCSAqIHdhbnQgdGhlIG1haW4gVExCIG1pc3NlcyB0aGV5IGNhbiB1c2UgYSByYXcgY291bnRlci4KKwkJICovCisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY2X1BFUkZDVFJfRFRMQl9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjZfUEVSRkNUUl9EVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKElUTEIpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjZfUEVSRkNUUl9JVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WNl9QRVJGQ1RSX0lUTEJfTUlTUywKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoQlBVKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorfTsKKworZW51bSBhcm12Nm1wY29yZV9wZXJmX3R5cGVzIHsKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX0lDQUNIRV9NSVNTCSAgICA9IDB4MCwKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX0lCVUZfU1RBTEwJICAgID0gMHgxLAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfRERFUF9TVEFMTAkgICAgPSAweDIsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9JVExCX01JU1MJICAgID0gMHgzLAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfRFRMQl9NSVNTCSAgICA9IDB4NCwKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX0JSX0VYRUMJICAgID0gMHg1LAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfQlJfTk9UUFJFRElDVCAgID0gMHg2LAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfQlJfTUlTUFJFRElDVCAgID0gMHg3LAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfSU5TVFJfRVhFQwkgICAgPSAweDgsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfUkRBQ0NFU1MgPSAweEEsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfUkRNSVNTICAgPSAweEIsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfV1JBQ0NFU1MgPSAweEMsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfV1JNSVNTICAgPSAweEQsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfRVZJQ1RJT04gPSAweEUsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9TV19QQ19DSEFOR0UgICAgPSAweEYsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9NQUlOX1RMQl9NSVNTICAgPSAweDEwLAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfRVhQTF9NRU1fQUNDRVNTID0gMHgxMSwKKwlBUk1WNk1QQ09SRV9QRVJGQ1RSX0xTVV9GVUxMX1NUQUxMICA9IDB4MTIsCisJQVJNVjZNUENPUkVfUEVSRkNUUl9XQlVGX0RSQUlORUQgICAgPSAweDEzLAorCUFSTVY2TVBDT1JFX1BFUkZDVFJfQ1BVX0NZQ0xFUwkgICAgPSAweEZGLAorfTsKKworLyoKKyAqIFRoZSBoYXJkd2FyZSBldmVudHMgdGhhdCB3ZSBzdXBwb3J0LiBXZSBkbyBzdXBwb3J0IGNhY2hlIG9wZXJhdGlvbnMgYnV0CisgKiB3ZSBoYXZlIGhhcnZhcmQgY2FjaGVzIGFuZCBubyB3YXkgdG8gY29tYmluZSBpbnN0cnVjdGlvbiBhbmQgZGF0YQorICogYWNjZXNzZXMvbWlzc2VzIGluIGhhcmR3YXJlLgorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgYXJtdjZtcGNvcmVfcGVyZl9tYXBbUEVSRl9DT1VOVF9IV19NQVhdID0geworCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfQ1BVX0NZQ0xFUywKKwlbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfSU5TVFJfRVhFQywKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAorCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JICAgID0gSFdfT1BfVU5TVVBQT1JURUQsCisJW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10gPSBBUk1WNk1QQ09SRV9QRVJGQ1RSX0JSX0VYRUMsCisJW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JICAgID0gQVJNVjZNUENPUkVfUEVSRkNUUl9CUl9NSVNQUkVESUNULAorCVtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFybXY2bXBjb3JlX3BlcmZfY2FjaGVfbWFwW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0geworCVtDKEwxRCldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0KKwkJCQlBUk1WNk1QQ09SRV9QRVJGQ1RSX0RDQUNIRV9SREFDQ0VTUywKKwkJCVtDKFJFU1VMVF9NSVNTKV0gICAgPQorCQkJCUFSTVY2TVBDT1JFX1BFUkZDVFJfRENBQ0hFX1JETUlTUywKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXSAgPQorCQkJCUFSTVY2TVBDT1JFX1BFUkZDVFJfRENBQ0hFX1dSQUNDRVNTLAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9CisJCQkJQVJNVjZNUENPUkVfUEVSRkNUUl9EQ0FDSEVfV1JNSVNTLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoTDFJKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXSAgPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0gICAgPSBBUk1WNk1QQ09SRV9QRVJGQ1RSX0lDQUNIRV9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfSUNBQ0hFX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhMTCldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhEVExCKV0gPSB7CisJCS8qCisJCSAqIFRoZSBBUk0gcGVyZm9ybWFuY2UgY291bnRlcnMgY2FuIGNvdW50IG1pY3JvIERUTEIgbWlzc2VzLAorCQkgKiBtaWNybyBJVExCIG1pc3NlcyBhbmQgbWFpbiBUTEIgbWlzc2VzLiBUaGVyZSBpc24ndCBhbiBldmVudAorCQkgKiBmb3IgVExCIG1pc3Nlcywgc28gdXNlIHRoZSBtaWNybyBtaXNzZXMgaGVyZSBhbmQgaWYgdXNlcnMKKwkJICogd2FudCB0aGUgbWFpbiBUTEIgbWlzc2VzIHRoZXkgY2FuIHVzZSBhIHJhdyBjb3VudGVyLgorCQkgKi8KKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfRFRMQl9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IEFSTVY2TVBDT1JFX1BFUkZDVFJfRFRMQl9NSVNTLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoSVRMQildID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQVJNVjZNUENPUkVfUEVSRkNUUl9JVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQVJNVjZNUENPUkVfUEVSRkNUUl9JVExCX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0gID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldICAgID0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhCUFUpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXSAgICA9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2FybXY2X3BtY3JfcmVhZCh2b2lkKQoreworCXUzMiB2YWw7CisJYXNtIHZvbGF0aWxlKCJtcmMgICBwMTUsIDAsICUwLCBjMTUsIGMxMiwgMCIgOiAiPXIiKHZhbCkpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYXJtdjZfcG1jcl93cml0ZSh1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlhc20gdm9sYXRpbGUoIm1jciAgIHAxNSwgMCwgJTAsIGMxNSwgYzEyLCAwIiA6IDogInIiKHZhbCkpOworfQorCisjZGVmaW5lIEFSTVY2X1BNQ1JfRU5BQkxFCQkoMSA8PCAwKQorI2RlZmluZSBBUk1WNl9QTUNSX0NUUjAxX1JFU0VUCQkoMSA8PCAxKQorI2RlZmluZSBBUk1WNl9QTUNSX0NDT1VOVF9SRVNFVAkJKDEgPDwgMikKKyNkZWZpbmUgQVJNVjZfUE1DUl9DQ09VTlRfRElWCQkoMSA8PCAzKQorI2RlZmluZSBBUk1WNl9QTUNSX0NPVU5UMF9JRU4JCSgxIDw8IDQpCisjZGVmaW5lIEFSTVY2X1BNQ1JfQ09VTlQxX0lFTgkJKDEgPDwgNSkKKyNkZWZpbmUgQVJNVjZfUE1DUl9DQ09VTlRfSUVOCQkoMSA8PCA2KQorI2RlZmluZSBBUk1WNl9QTUNSX0NPVU5UMF9PVkVSRkxPVwkoMSA8PCA4KQorI2RlZmluZSBBUk1WNl9QTUNSX0NPVU5UMV9PVkVSRkxPVwkoMSA8PCA5KQorI2RlZmluZSBBUk1WNl9QTUNSX0NDT1VOVF9PVkVSRkxPVwkoMSA8PCAxMCkKKyNkZWZpbmUgQVJNVjZfUE1DUl9FVlRfQ09VTlQwX1NISUZUCTIwCisjZGVmaW5lIEFSTVY2X1BNQ1JfRVZUX0NPVU5UMF9NQVNLCSgweEZGIDw8IEFSTVY2X1BNQ1JfRVZUX0NPVU5UMF9TSElGVCkKKyNkZWZpbmUgQVJNVjZfUE1DUl9FVlRfQ09VTlQxX1NISUZUCTEyCisjZGVmaW5lIEFSTVY2X1BNQ1JfRVZUX0NPVU5UMV9NQVNLCSgweEZGIDw8IEFSTVY2X1BNQ1JfRVZUX0NPVU5UMV9TSElGVCkKKworI2RlZmluZSBBUk1WNl9QTUNSX09WRVJGTE9XRURfTUFTSyBcCisJKEFSTVY2X1BNQ1JfQ09VTlQwX09WRVJGTE9XIHwgQVJNVjZfUE1DUl9DT1VOVDFfT1ZFUkZMT1cgfCBcCisJIEFSTVY2X1BNQ1JfQ0NPVU5UX09WRVJGTE9XKQorCitzdGF0aWMgaW5saW5lIGludAorYXJtdjZfcG1jcl9oYXNfb3ZlcmZsb3dlZCh1bnNpZ25lZCBsb25nIHBtY3IpCit7CisJcmV0dXJuIChwbWNyICYgQVJNVjZfUE1DUl9PVkVSRkxPV0VEX01BU0spOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXJtdjZfcG1jcl9jb3VudGVyX2hhc19vdmVyZmxvd2VkKHVuc2lnbmVkIGxvbmcgcG1jciwKKwkJCQkgIGVudW0gYXJtdjZfY291bnRlcnMgY291bnRlcikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChBUk1WNl9DWUNMRV9DT1VOVEVSID09IGNvdW50ZXIpCisJCXJldCA9IHBtY3IgJiBBUk1WNl9QTUNSX0NDT1VOVF9PVkVSRkxPVzsKKwllbHNlIGlmIChBUk1WNl9DT1VOVEVSMCA9PSBjb3VudGVyKQorCQlyZXQgPSBwbWNyICYgQVJNVjZfUE1DUl9DT1VOVDBfT1ZFUkZMT1c7CisJZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjEgPT0gY291bnRlcikKKwkJcmV0ID0gcG1jciAmIEFSTVY2X1BNQ1JfQ09VTlQxX09WRVJGTE9XOworCWVsc2UKKwkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGNvdW50ZXIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1MzIKK2FybXY2cG11X3JlYWRfY291bnRlcihpbnQgY291bnRlcikKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlID0gMDsKKworCWlmIChBUk1WNl9DWUNMRV9DT1VOVEVSID09IGNvdW50ZXIpCisJCWFzbSB2b2xhdGlsZSgibXJjICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDEiIDogIj1yIih2YWx1ZSkpOworCWVsc2UgaWYgKEFSTVY2X0NPVU5URVIwID09IGNvdW50ZXIpCisJCWFzbSB2b2xhdGlsZSgibXJjICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDIiIDogIj1yIih2YWx1ZSkpOworCWVsc2UgaWYgKEFSTVY2X0NPVU5URVIxID09IGNvdW50ZXIpCisJCWFzbSB2b2xhdGlsZSgibXJjICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDMiIDogIj1yIih2YWx1ZSkpOworCWVsc2UKKwkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGNvdW50ZXIpOworCisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2FybXY2cG11X3dyaXRlX2NvdW50ZXIoaW50IGNvdW50ZXIsCisJCSAgICAgICB1MzIgdmFsdWUpCit7CisJaWYgKEFSTVY2X0NZQ0xFX0NPVU5URVIgPT0gY291bnRlcikKKwkJYXNtIHZvbGF0aWxlKCJtY3IgICBwMTUsIDAsICUwLCBjMTUsIGMxMiwgMSIgOiA6ICJyIih2YWx1ZSkpOworCWVsc2UgaWYgKEFSTVY2X0NPVU5URVIwID09IGNvdW50ZXIpCisJCWFzbSB2b2xhdGlsZSgibWNyICAgcDE1LCAwLCAlMCwgYzE1LCBjMTIsIDIiIDogOiAiciIodmFsdWUpKTsKKwllbHNlIGlmIChBUk1WNl9DT1VOVEVSMSA9PSBjb3VudGVyKQorCQlhc20gdm9sYXRpbGUoIm1jciAgIHAxNSwgMCwgJTAsIGMxNSwgYzEyLCAzIiA6IDogInIiKHZhbHVlKSk7CisJZWxzZQorCQlXQVJOX09OQ0UoMSwgImludmFsaWQgY291bnRlciBudW1iZXIgKCVkKVxuIiwgY291bnRlcik7Cit9CisKK3ZvaWQKK2FybXY2cG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAorCQkgICAgICBpbnQgaWR4KQoreworCXVuc2lnbmVkIGxvbmcgdmFsLCBtYXNrLCBldnQsIGZsYWdzOworCisJaWYgKEFSTVY2X0NZQ0xFX0NPVU5URVIgPT0gaWR4KSB7CisJCW1hc2sJPSAwOworCQlldnQJPSBBUk1WNl9QTUNSX0NDT1VOVF9JRU47CisJfSBlbHNlIGlmIChBUk1WNl9DT1VOVEVSMCA9PSBpZHgpIHsKKwkJbWFzawk9IEFSTVY2X1BNQ1JfRVZUX0NPVU5UMF9NQVNLOworCQlldnQJPSAoaHdjLT5jb25maWdfYmFzZSA8PCBBUk1WNl9QTUNSX0VWVF9DT1VOVDBfU0hJRlQpIHwKKwkJCSAgQVJNVjZfUE1DUl9DT1VOVDBfSUVOOworCX0gZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjEgPT0gaWR4KSB7CisJCW1hc2sJPSBBUk1WNl9QTUNSX0VWVF9DT1VOVDFfTUFTSzsKKwkJZXZ0CT0gKGh3Yy0+Y29uZmlnX2Jhc2UgPDwgQVJNVjZfUE1DUl9FVlRfQ09VTlQxX1NISUZUKSB8CisJCQkgIEFSTVY2X1BNQ1JfQ09VTlQxX0lFTjsKKwl9IGVsc2UgeworCQlXQVJOX09OQ0UoMSwgImludmFsaWQgY291bnRlciBudW1iZXIgKCVkKVxuIiwgaWR4KTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogTWFzayBvdXQgdGhlIGN1cnJlbnQgZXZlbnQgYW5kIHNldCB0aGUgY291bnRlciB0byBjb3VudCB0aGUgZXZlbnQKKwkgKiB0aGF0IHdlJ3JlIGludGVyZXN0ZWQgaW4uCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CisJdmFsICY9IH5tYXNrOworCXZhbCB8PSBldnQ7CisJYXJtdjZfcG1jcl93cml0ZSh2YWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorYXJtdjZwbXVfaGFuZGxlX2lycShpbnQgaXJxX251bSwKKwkJICAgIHZvaWQgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIHBtY3IgPSBhcm12Nl9wbWNyX3JlYWQoKTsKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjOworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCWludCBpZHg7CisKKwlpZiAoIWFybXY2X3BtY3JfaGFzX292ZXJmbG93ZWQocG1jcikpCisJCXJldHVybiBJUlFfTk9ORTsKKworCXJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKKworCS8qCisJICogVGhlIGludGVycnVwdHMgYXJlIGNsZWFyZWQgYnkgd3JpdGluZyB0aGUgb3ZlcmZsb3cgZmxhZ3MgYmFjayB0bworCSAqIHRoZSBjb250cm9sIHJlZ2lzdGVyLiBBbGwgb2YgdGhlIG90aGVyIGJpdHMgZG9uJ3QgaGF2ZSBhbnkgZWZmZWN0CisJICogaWYgdGhleSBhcmUgcmV3cml0dGVuLCBzbyB3cml0ZSB0aGUgd2hvbGUgdmFsdWUgYmFjay4KKwkgKi8KKwlhcm12Nl9wbWNyX3dyaXRlKHBtY3IpOworCisJZGF0YS5hZGRyID0gMDsKKworCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8PSBhcm1wbXUtPm51bV9ldmVudHM7ICsraWR4KSB7CisJCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tpZHhdOworCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOworCisJCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBXZSBoYXZlIGEgc2luZ2xlIGludGVycnVwdCBmb3IgYWxsIGNvdW50ZXJzLiBDaGVjayB0aGF0CisJCSAqIGVhY2ggY291bnRlciBoYXMgb3ZlcmZsb3dlZCBiZWZvcmUgd2UgcHJvY2VzcyBpdC4KKwkJICovCisJCWlmICghYXJtdjZfcG1jcl9jb3VudGVyX2hhc19vdmVyZmxvd2VkKHBtY3IsIGlkeCkpCisJCQljb250aW51ZTsKKworCQlod2MgPSAmZXZlbnQtPmh3OworCQlhcm1wbXVfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7CisJCWRhdGEucGVyaW9kID0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOworCQlpZiAoIWFybXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCkpCisJCQljb250aW51ZTsKKworCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMCwgJmRhdGEsIHJlZ3MpKQorCQkJYXJtcG11LT5kaXNhYmxlKGh3YywgaWR4KTsKKwl9CisKKwkvKgorCSAqIEhhbmRsZSB0aGUgcGVuZGluZyBwZXJmIGV2ZW50cy4KKwkgKgorCSAqIE5vdGU6IHRoaXMgY2FsbCAqbXVzdCogYmUgcnVuIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiBGb3IKKwkgKiBwbGF0Zm9ybXMgdGhhdCBjYW4gaGF2ZSB0aGUgUE1VIGludGVycnVwdHMgcmFpc2VkIGFzIGEgUE1JLCB0aGlzCisJICogd2lsbCBub3Qgd29yay4KKwkgKi8KKwlwZXJmX2V2ZW50X2RvX3BlbmRpbmcoKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQKK2FybXY2cG11X3N0YXJ0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncywgdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CisJdmFsIHw9IEFSTVY2X1BNQ1JfRU5BQkxFOworCWFybXY2X3BtY3Jfd3JpdGUodmFsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfbG9jaywgZmxhZ3MpOworfQorCit2b2lkCithcm12NnBtdV9zdG9wKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncywgdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CisJdmFsICY9IH5BUk1WNl9QTUNSX0VOQUJMRTsKKwlhcm12Nl9wbWNyX3dyaXRlKHZhbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2FybXY2cG11X2V2ZW50X21hcChpbnQgY29uZmlnKQoreworCWludCBtYXBwaW5nID0gYXJtdjZfcGVyZl9tYXBbY29uZmlnXTsKKwlpZiAoSFdfT1BfVU5TVVBQT1JURUQgPT0gbWFwcGluZykKKwkJbWFwcGluZyA9IC1FT1BOT1RTVVBQOworCXJldHVybiBtYXBwaW5nOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXJtdjZtcGNvcmVfcG11X2V2ZW50X21hcChpbnQgY29uZmlnKQoreworCWludCBtYXBwaW5nID0gYXJtdjZtcGNvcmVfcGVyZl9tYXBbY29uZmlnXTsKKwlpZiAoSFdfT1BfVU5TVVBQT1JURUQgPT0gbWFwcGluZykKKwkJbWFwcGluZyA9IC1FT1BOT1RTVVBQOworCXJldHVybiBtYXBwaW5nOworfQorCitzdGF0aWMgdTY0Cithcm12NnBtdV9yYXdfZXZlbnQodTY0IGNvbmZpZykKK3sKKwlyZXR1cm4gY29uZmlnICYgMHhmZjsKK30KKworc3RhdGljIGludAorYXJtdjZwbXVfZ2V0X2V2ZW50X2lkeChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkJICAgICAgIHN0cnVjdCBod19wZXJmX2V2ZW50ICpldmVudCkKK3sKKwkvKiBBbHdheXMgcGxhY2UgYSBjeWNsZSBjb3VudGVyIGludG8gdGhlIGN5Y2xlIGNvdW50ZXIuICovCisJaWYgKEFSTVY2X1BFUkZDVFJfQ1BVX0NZQ0xFUyA9PSBldmVudC0+Y29uZmlnX2Jhc2UpIHsKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQoQVJNVjZfQ1lDTEVfQ09VTlRFUiwgY3B1Yy0+dXNlZF9tYXNrKSkKKwkJCXJldHVybiAtRUFHQUlOOworCisJCXJldHVybiBBUk1WNl9DWUNMRV9DT1VOVEVSOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEZvciBhbnl0aGluZyBvdGhlciB0aGFuIGEgY3ljbGUgY291bnRlciwgdHJ5IGFuZCB1c2UKKwkJICogY291bnRlcjAgYW5kIGNvdW50ZXIxLgorCQkgKi8KKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEFSTVY2X0NPVU5URVIxLCBjcHVjLT51c2VkX21hc2spKSB7CisJCQlyZXR1cm4gQVJNVjZfQ09VTlRFUjE7CisJCX0KKworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQVJNVjZfQ09VTlRFUjAsIGNwdWMtPnVzZWRfbWFzaykpIHsKKwkJCXJldHVybiBBUk1WNl9DT1VOVEVSMDsKKwkJfQorCisJCS8qIFRoZSBjb3VudGVycyBhcmUgYWxsIGluIHVzZS4gKi8KKwkJcmV0dXJuIC1FQUdBSU47CisJfQorfQorCitzdGF0aWMgdm9pZAorYXJtdjZwbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAorCQkgICAgICAgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCwgbWFzaywgZXZ0LCBmbGFnczsKKworCWlmIChBUk1WNl9DWUNMRV9DT1VOVEVSID09IGlkeCkgeworCQltYXNrCT0gQVJNVjZfUE1DUl9DQ09VTlRfSUVOOworCQlldnQJPSAwOworCX0gZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjAgPT0gaWR4KSB7CisJCW1hc2sJPSBBUk1WNl9QTUNSX0NPVU5UMF9JRU4gfCBBUk1WNl9QTUNSX0VWVF9DT1VOVDBfTUFTSzsKKwkJZXZ0CT0gQVJNVjZfUEVSRkNUUl9OT1AgPDwgQVJNVjZfUE1DUl9FVlRfQ09VTlQwX1NISUZUOworCX0gZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjEgPT0gaWR4KSB7CisJCW1hc2sJPSBBUk1WNl9QTUNSX0NPVU5UMV9JRU4gfCBBUk1WNl9QTUNSX0VWVF9DT1VOVDFfTUFTSzsKKwkJZXZ0CT0gQVJNVjZfUEVSRkNUUl9OT1AgPDwgQVJNVjZfUE1DUl9FVlRfQ09VTlQxX1NISUZUOworCX0gZWxzZSB7CisJCVdBUk5fT05DRSgxLCAiaW52YWxpZCBjb3VudGVyIG51bWJlciAoJWQpXG4iLCBpZHgpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBNYXNrIG91dCB0aGUgY3VycmVudCBldmVudCBhbmQgc2V0IHRoZSBjb3VudGVyIHRvIGNvdW50IHRoZSBudW1iZXIKKwkgKiBvZiBFVE0gYnVzIHNpZ25hbCBhc3NlcnRpb24gY3ljbGVzLiBUaGUgZXh0ZXJuYWwgcmVwb3J0aW5nIHNob3VsZAorCSAqIGJlIGRpc2FibGVkIGFuZCBzbyB0aGlzIHNob3VsZCBuZXZlciBpbmNyZW1lbnQuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CisJdmFsICY9IH5tYXNrOworCXZhbCB8PSBldnQ7CisJYXJtdjZfcG1jcl93cml0ZSh2YWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCithcm12Nm1wY29yZV9wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAorCQkJICAgICAgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCwgbWFzaywgZmxhZ3MsIGV2dCA9IDA7CisKKwlpZiAoQVJNVjZfQ1lDTEVfQ09VTlRFUiA9PSBpZHgpIHsKKwkJbWFzawk9IEFSTVY2X1BNQ1JfQ0NPVU5UX0lFTjsKKwl9IGVsc2UgaWYgKEFSTVY2X0NPVU5URVIwID09IGlkeCkgeworCQltYXNrCT0gQVJNVjZfUE1DUl9DT1VOVDBfSUVOOworCX0gZWxzZSBpZiAoQVJNVjZfQ09VTlRFUjEgPT0gaWR4KSB7CisJCW1hc2sJPSBBUk1WNl9QTUNSX0NPVU5UMV9JRU47CisJfSBlbHNlIHsKKwkJV0FSTl9PTkNFKDEsICJpbnZhbGlkIGNvdW50ZXIgbnVtYmVyICglZClcbiIsIGlkeCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFVubGlrZSBVUCBBUk12Niwgd2UgZG9uJ3QgaGF2ZSBhIHdheSBvZiBzdG9wcGluZyB0aGUgY291bnRlcnMuIFdlCisJICogc2ltcGx5IGRpc2FibGUgdGhlIGludGVycnVwdCByZXBvcnRpbmcuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJdmFsID0gYXJtdjZfcG1jcl9yZWFkKCk7CisJdmFsICY9IH5tYXNrOworCXZhbCB8PSBldnQ7CisJYXJtdjZfcG1jcl93cml0ZSh2YWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtX3BtdSBhcm12NnBtdSA9IHsKKwkubmFtZQkJCT0gInY2IiwKKwkuaGFuZGxlX2lycQkJPSBhcm12NnBtdV9oYW5kbGVfaXJxLAorCS5lbmFibGUJCQk9IGFybXY2cG11X2VuYWJsZV9ldmVudCwKKwkuZGlzYWJsZQkJPSBhcm12NnBtdV9kaXNhYmxlX2V2ZW50LAorCS5ldmVudF9tYXAJCT0gYXJtdjZwbXVfZXZlbnRfbWFwLAorCS5yYXdfZXZlbnQJCT0gYXJtdjZwbXVfcmF3X2V2ZW50LAorCS5yZWFkX2NvdW50ZXIJCT0gYXJtdjZwbXVfcmVhZF9jb3VudGVyLAorCS53cml0ZV9jb3VudGVyCQk9IGFybXY2cG11X3dyaXRlX2NvdW50ZXIsCisJLmdldF9ldmVudF9pZHgJCT0gYXJtdjZwbXVfZ2V0X2V2ZW50X2lkeCwKKwkuc3RhcnQJCQk9IGFybXY2cG11X3N0YXJ0LAorCS5zdG9wCQkJPSBhcm12NnBtdV9zdG9wLAorCS5udW1fZXZlbnRzCQk9IDMsCisJLm1heF9wZXJpb2QJCT0gKDFMTFUgPDwgMzIpIC0gMSwKK307CisKKy8qCisgKiBBUk12Nm1wY29yZSBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHNpbmdsZSBjb3JlIEFSTXY2IHdpdGggdGhlIGV4Y2VwdGlvbgorICogdGhhdCBzb21lIG9mIHRoZSBldmVudHMgaGF2ZSBkaWZmZXJlbnQgZW51bWVyYXRpb25zIGFuZCB0aGF0IHRoZXJlIGlzIG5vCisgKiAqaGFjayogdG8gc3RvcCB0aGUgcHJvZ3JhbW1hYmxlIGNvdW50ZXJzLiBUbyBzdG9wIHRoZSBjb3VudGVycyB3ZSBzaW1wbHkKKyAqIGRpc2FibGUgdGhlIGludGVycnVwdCByZXBvcnRpbmcgYW5kIHVwZGF0ZSB0aGUgZXZlbnQuIFdoZW4gdW50aHJvdHRsaW5nIHdlCisgKiByZXNldCB0aGUgcGVyaW9kIGFuZCBlbmFibGUgdGhlIGludGVycnVwdCByZXBvcnRpbmcuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtX3BtdSBhcm12Nm1wY29yZV9wbXUgPSB7CisJLm5hbWUJCQk9ICJ2Nm1wY29yZSIsCisJLmhhbmRsZV9pcnEJCT0gYXJtdjZwbXVfaGFuZGxlX2lycSwKKwkuZW5hYmxlCQkJPSBhcm12NnBtdV9lbmFibGVfZXZlbnQsCisJLmRpc2FibGUJCT0gYXJtdjZtcGNvcmVfcG11X2Rpc2FibGVfZXZlbnQsCisJLmV2ZW50X21hcAkJPSBhcm12Nm1wY29yZV9wbXVfZXZlbnRfbWFwLAorCS5yYXdfZXZlbnQJCT0gYXJtdjZwbXVfcmF3X2V2ZW50LAorCS5yZWFkX2NvdW50ZXIJCT0gYXJtdjZwbXVfcmVhZF9jb3VudGVyLAorCS53cml0ZV9jb3VudGVyCQk9IGFybXY2cG11X3dyaXRlX2NvdW50ZXIsCisJLmdldF9ldmVudF9pZHgJCT0gYXJtdjZwbXVfZ2V0X2V2ZW50X2lkeCwKKwkuc3RhcnQJCQk9IGFybXY2cG11X3N0YXJ0LAorCS5zdG9wCQkJPSBhcm12NnBtdV9zdG9wLAorCS5udW1fZXZlbnRzCQk9IDMsCisJLm1heF9wZXJpb2QJCT0gKDFMTFUgPDwgMzIpIC0gMSwKK307CisKKy8qCisgKiBBUk12NyBDb3J0ZXgtQTggYW5kIENvcnRleC1BOSBQZXJmb3JtYW5jZSBFdmVudHMgaGFuZGxpbmcgY29kZS4KKyAqCisgKiBDb3BpZWQgZnJvbSBBUk12NiBjb2RlLCB3aXRoIHRoZSBsb3cgbGV2ZWwgY29kZSBpbnNwaXJlZAorICogIGJ5IHRoZSBBUk12NyBPcHJvZmlsZSBjb2RlLgorICoKKyAqIENvcnRleC1BOCBoYXMgdXAgdG8gNCBjb25maWd1cmFibGUgcGVyZm9ybWFuY2UgY291bnRlcnMgYW5kCisgKiAgYSBzaW5nbGUgY3ljbGUgY291bnRlci4KKyAqIENvcnRleC1BOSBoYXMgdXAgdG8gMzEgY29uZmlndXJhYmxlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGFuZAorICogIGEgc2luZ2xlIGN5Y2xlIGNvdW50ZXIuCisgKgorICogQWxsIGNvdW50ZXJzIGNhbiBiZSBlbmFibGVkL2Rpc2FibGVkIGFuZCBJUlEgbWFza2VkIHNlcGFyYXRlbHkuIFRoZSBjeWNsZQorICogIGNvdW50ZXIgYW5kIGFsbCA0IHBlcmZvcm1hbmNlIGNvdW50ZXJzIHRvZ2V0aGVyIGNhbiBiZSByZXNldCBzZXBhcmF0ZWx5LgorICovCisKKyNkZWZpbmUgQVJNVjdfUE1VX0NPUlRFWF9BOF9OQU1FCQkiQVJNdjcgQ29ydGV4LUE4IgorCisjZGVmaW5lIEFSTVY3X1BNVV9DT1JURVhfQTlfTkFNRQkJIkFSTXY3IENvcnRleC1BOSIKKworLyogQ29tbW9uIEFSTXY3IGV2ZW50IHR5cGVzICovCitlbnVtIGFybXY3X3BlcmZfdHlwZXMgeworCUFSTVY3X1BFUkZDVFJfUE1OQ19TV19JTkNSCQk9IDB4MDAsCisJQVJNVjdfUEVSRkNUUl9JRkVUQ0hfTUlTUwkJPSAweDAxLAorCUFSTVY3X1BFUkZDVFJfSVRMQl9NSVNTCQkJPSAweDAyLAorCUFSTVY3X1BFUkZDVFJfRENBQ0hFX1JFRklMTAkJPSAweDAzLAorCUFSTVY3X1BFUkZDVFJfRENBQ0hFX0FDQ0VTUwkJPSAweDA0LAorCUFSTVY3X1BFUkZDVFJfRFRMQl9SRUZJTEwJCT0gMHgwNSwKKwlBUk1WN19QRVJGQ1RSX0RSRUFECQkJPSAweDA2LAorCUFSTVY3X1BFUkZDVFJfRFdSSVRFCQkJPSAweDA3LAorCisJQVJNVjdfUEVSRkNUUl9FWENfVEFLRU4JCQk9IDB4MDksCisJQVJNVjdfUEVSRkNUUl9FWENfRVhFQ1VURUQJCT0gMHgwQSwKKwlBUk1WN19QRVJGQ1RSX0NJRF9XUklURQkJCT0gMHgwQiwKKwkvKiBBUk1WN19QRVJGQ1RSX1BDX1dSSVRFIGlzIGVxdWl2YWxlbnQgdG8gSFdfQlJBTkNIX0lOU1RSVUNUSU9OUy4KKwkgKiBJdCBjb3VudHM6CisJICogIC0gYWxsIGJyYW5jaCBpbnN0cnVjdGlvbnMsCisJICogIC0gaW5zdHJ1Y3Rpb25zIHRoYXQgZXhwbGljaXRseSB3cml0ZSB0aGUgUEMsCisJICogIC0gZXhjZXB0aW9uIGdlbmVyYXRpbmcgaW5zdHJ1Y3Rpb25zLgorCSAqLworCUFSTVY3X1BFUkZDVFJfUENfV1JJVEUJCQk9IDB4MEMsCisJQVJNVjdfUEVSRkNUUl9QQ19JTU1fQlJBTkNICQk9IDB4MEQsCisJQVJNVjdfUEVSRkNUUl9VTkFMSUdORURfQUNDRVNTCQk9IDB4MEYsCisJQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfTUlTX1BSRUQJPSAweDEwLAorCUFSTVY3X1BFUkZDVFJfQ0xPQ0tfQ1lDTEVTCQk9IDB4MTEsCisKKwlBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9NSVNfVVNFRAk9IDB4MTIsCisKKwlBUk1WN19QRVJGQ1RSX0NQVV9DWUNMRVMJCT0gMHhGRgorfTsKKworLyogQVJNdjcgQ29ydGV4LUE4IHNwZWNpZmljIGV2ZW50IHR5cGVzICovCitlbnVtIGFybXY3X2E4X3BlcmZfdHlwZXMgeworCUFSTVY3X1BFUkZDVFJfSU5TVFJfRVhFQ1VURUQJCT0gMHgwOCwKKworCUFSTVY3X1BFUkZDVFJfUENfUFJPQ19SRVRVUk4JCT0gMHgwRSwKKworCUFSTVY3X1BFUkZDVFJfV1JJVEVfQlVGRkVSX0ZVTEwJCT0gMHg0MCwKKwlBUk1WN19QRVJGQ1RSX0wyX1NUT1JFX01FUkdFRAkJPSAweDQxLAorCUFSTVY3X1BFUkZDVFJfTDJfU1RPUkVfQlVGRgkJPSAweDQyLAorCUFSTVY3X1BFUkZDVFJfTDJfQUNDRVNTCQkJPSAweDQzLAorCUFSTVY3X1BFUkZDVFJfTDJfQ0FDSF9NSVNTCQk9IDB4NDQsCisJQVJNVjdfUEVSRkNUUl9BWElfUkVBRF9DWUNMRVMJCT0gMHg0NSwKKwlBUk1WN19QRVJGQ1RSX0FYSV9XUklURV9DWUNMRVMJCT0gMHg0NiwKKwlBUk1WN19QRVJGQ1RSX01FTU9SWV9SRVBMQVkJCT0gMHg0NywKKwlBUk1WN19QRVJGQ1RSX1VOQUxJR05FRF9BQ0NFU1NfUkVQTEFZCT0gMHg0OCwKKwlBUk1WN19QRVJGQ1RSX0wxX0RBVEFfTUlTUwkJPSAweDQ5LAorCUFSTVY3X1BFUkZDVFJfTDFfSU5TVF9NSVNTCQk9IDB4NEEsCisJQVJNVjdfUEVSRkNUUl9MMV9EQVRBX0NPTE9SSU5HCQk9IDB4NEIsCisJQVJNVjdfUEVSRkNUUl9MMV9ORU9OX0RBVEEJCT0gMHg0QywKKwlBUk1WN19QRVJGQ1RSX0wxX05FT05fQ0FDSF9EQVRBCQk9IDB4NEQsCisJQVJNVjdfUEVSRkNUUl9MMl9ORU9OCQkJPSAweDRFLAorCUFSTVY3X1BFUkZDVFJfTDJfTkVPTl9ISVQJCT0gMHg0RiwKKwlBUk1WN19QRVJGQ1RSX0wxX0lOU1QJCQk9IDB4NTAsCisJQVJNVjdfUEVSRkNUUl9QQ19SRVRVUk5fTUlTX1BSRUQJPSAweDUxLAorCUFSTVY3X1BFUkZDVFJfUENfQlJBTkNIX0ZBSUxFRAkJPSAweDUyLAorCUFSTVY3X1BFUkZDVFJfUENfQlJBTkNIX1RBS0VOCQk9IDB4NTMsCisJQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfRVhFQ1VURUQJPSAweDU0LAorCUFSTVY3X1BFUkZDVFJfT1BfRVhFQ1VURUQJCT0gMHg1NSwKKwlBUk1WN19QRVJGQ1RSX0NZQ0xFU19JTlNUX1NUQUxMCQk9IDB4NTYsCisJQVJNVjdfUEVSRkNUUl9DWUNMRVNfSU5TVAkJPSAweDU3LAorCUFSTVY3X1BFUkZDVFJfQ1lDTEVTX05FT05fREFUQV9TVEFMTAk9IDB4NTgsCisJQVJNVjdfUEVSRkNUUl9DWUNMRVNfTkVPTl9JTlNUX1NUQUxMCT0gMHg1OSwKKwlBUk1WN19QRVJGQ1RSX05FT05fQ1lDTEVTCQk9IDB4NUEsCisKKwlBUk1WN19QRVJGQ1RSX1BNVTBfRVZFTlRTCQk9IDB4NzAsCisJQVJNVjdfUEVSRkNUUl9QTVUxX0VWRU5UUwkJPSAweDcxLAorCUFSTVY3X1BFUkZDVFJfUE1VX0VWRU5UUwkJPSAweDcyLAorfTsKKworLyogQVJNdjcgQ29ydGV4LUE5IHNwZWNpZmljIGV2ZW50IHR5cGVzICovCitlbnVtIGFybXY3X2E5X3BlcmZfdHlwZXMgeworCUFSTVY3X1BFUkZDVFJfSkFWQV9IV19CWVRFQ09ERV9FWEVDCT0gMHg0MCwKKwlBUk1WN19QRVJGQ1RSX0pBVkFfU1dfQllURUNPREVfRVhFQwk9IDB4NDEsCisJQVJNVjdfUEVSRkNUUl9KQVpFTExFX0JSQU5DSF9FWEVDCT0gMHg0MiwKKworCUFSTVY3X1BFUkZDVFJfQ09IRVJFTlRfTElORV9NSVNTCT0gMHg1MCwKKwlBUk1WN19QRVJGQ1RSX0NPSEVSRU5UX0xJTkVfSElUCQk9IDB4NTEsCisKKwlBUk1WN19QRVJGQ1RSX0lDQUNIRV9ERVBfU1RBTExfQ1lDTEVTCT0gMHg2MCwKKwlBUk1WN19QRVJGQ1RSX0RDQUNIRV9ERVBfU1RBTExfQ1lDTEVTCT0gMHg2MSwKKwlBUk1WN19QRVJGQ1RSX1RMQl9NSVNTX0RFUF9TVEFMTF9DWUNMRVMJPSAweDYyLAorCUFSTVY3X1BFUkZDVFJfU1RSRVhfRVhFQ1VURURfUEFTU0VECT0gMHg2MywKKwlBUk1WN19QRVJGQ1RSX1NUUkVYX0VYRUNVVEVEX0ZBSUxFRAk9IDB4NjQsCisJQVJNVjdfUEVSRkNUUl9EQVRBX0VWSUNUSU9OCQk9IDB4NjUsCisJQVJNVjdfUEVSRkNUUl9JU1NVRV9TVEFHRV9OT19JTlNUCT0gMHg2NiwKKwlBUk1WN19QRVJGQ1RSX0lTU1VFX1NUQUdFX0VNUFRZCQk9IDB4NjcsCisJQVJNVjdfUEVSRkNUUl9JTlNUX09VVF9PRl9SRU5BTUVfU1RBR0UJPSAweDY4LAorCisJQVJNVjdfUEVSRkNUUl9QUkVESUNUQUJMRV9GVU5DVF9SRVRVUk5TCT0gMHg2RSwKKworCUFSTVY3X1BFUkZDVFJfTUFJTl9VTklUX0VYRUNVVEVEX0lOU1QJPSAweDcwLAorCUFSTVY3X1BFUkZDVFJfU0VDT05EX1VOSVRfRVhFQ1VURURfSU5TVAk9IDB4NzEsCisJQVJNVjdfUEVSRkNUUl9MRF9TVF9VTklUX0VYRUNVVEVEX0lOU1QJPSAweDcyLAorCUFSTVY3X1BFUkZDVFJfRlBfRVhFQ1VURURfSU5TVAkJPSAweDczLAorCUFSTVY3X1BFUkZDVFJfTkVPTl9FWEVDVVRFRF9JTlNUCT0gMHg3NCwKKworCUFSTVY3X1BFUkZDVFJfUExEX0ZVTExfREVQX1NUQUxMX0NZQ0xFUwk9IDB4ODAsCisJQVJNVjdfUEVSRkNUUl9EQVRBX1dSX0RFUF9TVEFMTF9DWUNMRVMJPSAweDgxLAorCUFSTVY3X1BFUkZDVFJfSVRMQl9NSVNTX0RFUF9TVEFMTF9DWUNMRVMJPSAweDgyLAorCUFSTVY3X1BFUkZDVFJfRFRMQl9NSVNTX0RFUF9TVEFMTF9DWUNMRVMJPSAweDgzLAorCUFSTVY3X1BFUkZDVFJfTUlDUk9fSVRMQl9NSVNTX0RFUF9TVEFMTF9DWUNMRVMJPSAweDg0LAorCUFSTVY3X1BFUkZDVFJfTUlDUk9fRFRMQl9NSVNTX0RFUF9TVEFMTF9DWUNMRVMgCT0gMHg4NSwKKwlBUk1WN19QRVJGQ1RSX0RNQl9ERVBfU1RBTExfQ1lDTEVTCT0gMHg4NiwKKworCUFSTVY3X1BFUkZDVFJfSU5UR1JfQ0xLX0VOQUJMRURfQ1lDTEVTCT0gMHg4QSwKKwlBUk1WN19QRVJGQ1RSX0RBVEFfRU5HSU5FX0NMS19FTl9DWUNMRVMJPSAweDhCLAorCisJQVJNVjdfUEVSRkNUUl9JU0JfSU5TVAkJCT0gMHg5MCwKKwlBUk1WN19QRVJGQ1RSX0RTQl9JTlNUCQkJPSAweDkxLAorCUFSTVY3X1BFUkZDVFJfRE1CX0lOU1QJCQk9IDB4OTIsCisJQVJNVjdfUEVSRkNUUl9FWFRfSU5URVJSVVBUUwkJPSAweDkzLAorCisJQVJNVjdfUEVSRkNUUl9QTEVfQ0FDSEVfTElORV9SUVNUX0NPTVBMRVRFRAk9IDB4QTAsCisJQVJNVjdfUEVSRkNUUl9QTEVfQ0FDSEVfTElORV9SUVNUX1NLSVBQRUQJPSAweEExLAorCUFSTVY3X1BFUkZDVFJfUExFX0ZJRk9fRkxVU0gJCT0gMHhBMiwKKwlBUk1WN19QRVJGQ1RSX1BMRV9SUVNUX0NPTVBMRVRFRAk9IDB4QTMsCisJQVJNVjdfUEVSRkNUUl9QTEVfRklGT19PVkVSRkxPVwkJPSAweEE0LAorCUFSTVY3X1BFUkZDVFJfUExFX1JRU1RfUFJPRwkJPSAweEE1Cit9OworCisvKgorICogQ29ydGV4LUE4IEhXIGV2ZW50cyBtYXBwaW5nCisgKgorICogVGhlIGhhcmR3YXJlIGV2ZW50cyB0aGF0IHdlIHN1cHBvcnQuIFdlIGRvIHN1cHBvcnQgY2FjaGUgb3BlcmF0aW9ucyBidXQKKyAqIHdlIGhhdmUgaGFydmFyZCBjYWNoZXMgYW5kIG5vIHdheSB0byBjb21iaW5lIGluc3RydWN0aW9uIGFuZCBkYXRhCisgKiBhY2Nlc3Nlcy9taXNzZXMgaW4gaGFyZHdhcmUuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBhcm12N19hOF9wZXJmX21hcFtQRVJGX0NPVU5UX0hXX01BWF0gPSB7CisJW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10JICAgID0gQVJNVjdfUEVSRkNUUl9DUFVfQ1lDTEVTLAorCVtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JICAgID0gQVJNVjdfUEVSRkNUUl9JTlNUUl9FWEVDVVRFRCwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXSAgICA9IEhXX09QX1VOU1VQUE9SVEVELAorCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JICAgID0gSFdfT1BfVU5TVVBQT1JURUQsCisJW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10gPSBBUk1WN19QRVJGQ1RSX1BDX1dSSVRFLAorCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCSAgICA9IEFSTVY3X1BFUkZDVFJfUENfQlJBTkNIX01JU19QUkVELAorCVtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCSAgICA9IEFSTVY3X1BFUkZDVFJfQ0xPQ0tfQ1lDTEVTLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFybXY3X2E4X3BlcmZfY2FjaGVfbWFwW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCQkgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQkJICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9IHsKKwlbQyhMMUQpXSA9IHsKKwkJLyoKKwkJICogVGhlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGRvbid0IGRpZmZlcmVudGlhdGUgYmV0d2VlbiByZWFkCisJCSAqIGFuZCB3cml0ZSBhY2Nlc3Nlcy9taXNzZXMgc28gdGhpcyBpc24ndCBzdHJpY3RseSBjb3JyZWN0LAorCQkgKiBidXQgaXQncyB0aGUgYmVzdCB3ZSBjYW4gZG8uIFdyaXRlcyBhbmQgcmVhZHMgZ2V0CisJCSAqIGNvbWJpbmVkLgorCQkgKi8KKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9EQ0FDSEVfQUNDRVNTLAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfRENBQ0hFX1JFRklMTCwKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfRENBQ0hFX0FDQ0VTUywKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RDQUNIRV9SRUZJTEwsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKEwxSSldID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WN19QRVJGQ1RSX0wxX0lOU1QsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9MMV9JTlNUX01JU1MsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WN19QRVJGQ1RSX0wxX0lOU1QsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9MMV9JTlNUX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKExMKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfTDJfQUNDRVNTLAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfTDJfQ0FDSF9NSVNTLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9MMl9BQ0NFU1MsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9MMl9DQUNIX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKERUTEIpXSA9IHsKKwkJLyoKKwkJICogT25seSBJVExCIG1pc3NlcyBhbmQgRFRMQiByZWZpbGxzIGFyZSBzdXBwb3J0ZWQuCisJCSAqIElmIHVzZXJzIHdhbnQgdGhlIERUTEIgcmVmaWxscyBtaXNzZXMgYSByYXcgY291bnRlcgorCQkgKiBtdXN0IGJlIHVzZWQuCisJCSAqLworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RUTEJfUkVGSUxMLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9EVExCX1JFRklMTCwKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoSVRMQildID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0lUTEJfTUlTUywKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfSVRMQl9NSVNTLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhCUFUpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9QQ19XUklURSwKKwkJCVtDKFJFU1VMVF9NSVNTKV0KKwkJCQkJPSBBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9NSVNfUFJFRCwKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfUENfV1JJVEUsCisJCQlbQyhSRVNVTFRfTUlTUyldCisJCQkJCT0gQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfTUlTX1BSRUQsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorfTsKKworLyoKKyAqIENvcnRleC1BOSBIVyBldmVudHMgbWFwcGluZworICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgYXJtdjdfYTlfcGVyZl9tYXBbUEVSRl9DT1VOVF9IV19NQVhdID0geworCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCSAgICA9IEFSTVY3X1BFUkZDVFJfQ1BVX0NZQ0xFUywKKwlbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCSAgICA9CisJCQkJCUFSTVY3X1BFUkZDVFJfSU5TVF9PVVRfT0ZfUkVOQU1FX1NUQUdFLAorCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdICAgID0gQVJNVjdfUEVSRkNUUl9DT0hFUkVOVF9MSU5FX0hJVCwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCSAgICA9IEFSTVY3X1BFUkZDVFJfQ09IRVJFTlRfTElORV9NSVNTLAorCVtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdID0gQVJNVjdfUEVSRkNUUl9QQ19XUklURSwKKwlbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXQkgICAgPSBBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9NSVNfUFJFRCwKKwlbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkgICAgPSBBUk1WN19QRVJGQ1RSX0NMT0NLX0NZQ0xFUywKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBhcm12N19hOV9wZXJmX2NhY2hlX21hcFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KKwkJCQkJICBbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJCSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPSB7CisJW0MoTDFEKV0gPSB7CisJCS8qCisJCSAqIFRoZSBwZXJmb3JtYW5jZSBjb3VudGVycyBkb24ndCBkaWZmZXJlbnRpYXRlIGJldHdlZW4gcmVhZAorCQkgKiBhbmQgd3JpdGUgYWNjZXNzZXMvbWlzc2VzIHNvIHRoaXMgaXNuJ3Qgc3RyaWN0bHkgY29ycmVjdCwKKwkJICogYnV0IGl0J3MgdGhlIGJlc3Qgd2UgY2FuIGRvLiBXcml0ZXMgYW5kIHJlYWRzIGdldAorCQkgKiBjb21iaW5lZC4KKwkJICovCisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfRENBQ0hFX0FDQ0VTUywKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RDQUNIRV9SRUZJTEwsCisJCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RDQUNIRV9BQ0NFU1MsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9EQ0FDSEVfUkVGSUxMLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhMMUkpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9JRkVUQ0hfTUlTUywKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfSUZFVENIX01JU1MsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKExMKV0gPSB7CisJCVtDKE9QX1JFQUQpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorCVtDKERUTEIpXSA9IHsKKwkJLyoKKwkJICogT25seSBJVExCIG1pc3NlcyBhbmQgRFRMQiByZWZpbGxzIGFyZSBzdXBwb3J0ZWQuCisJCSAqIElmIHVzZXJzIHdhbnQgdGhlIERUTEIgcmVmaWxscyBtaXNzZXMgYSByYXcgY291bnRlcgorCQkgKiBtdXN0IGJlIHVzZWQuCisJCSAqLworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0RUTEJfUkVGSUxMLAorCQl9LAorCQlbQyhPUF9XUklURSldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQVJNVjdfUEVSRkNUUl9EVExCX1JFRklMTCwKKwkJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQl9LAorCX0sCisJW0MoSVRMQildID0geworCQlbQyhPUF9SRUFEKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBBUk1WN19QRVJGQ1RSX0lUTEJfTUlTUywKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IENBQ0hFX09QX1VOU1VQUE9SVEVELAorCQkJW0MoUkVTVUxUX01JU1MpXQk9IEFSTVY3X1BFUkZDVFJfSVRMQl9NSVNTLAorCQl9LAorCQlbQyhPUF9QUkVGRVRDSCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCQlbQyhSRVNVTFRfTUlTUyldCT0gQ0FDSEVfT1BfVU5TVVBQT1JURUQsCisJCX0sCisJfSwKKwlbQyhCUFUpXSA9IHsKKwkJW0MoT1BfUkVBRCldID0geworCQkJW0MoUkVTVUxUX0FDQ0VTUyldCT0gQVJNVjdfUEVSRkNUUl9QQ19XUklURSwKKwkJCVtDKFJFU1VMVF9NSVNTKV0KKwkJCQkJPSBBUk1WN19QRVJGQ1RSX1BDX0JSQU5DSF9NSVNfUFJFRCwKKwkJfSwKKwkJW0MoT1BfV1JJVEUpXSA9IHsKKwkJCVtDKFJFU1VMVF9BQ0NFU1MpXQk9IEFSTVY3X1BFUkZDVFJfUENfV1JJVEUsCisJCQlbQyhSRVNVTFRfTUlTUyldCisJCQkJCT0gQVJNVjdfUEVSRkNUUl9QQ19CUkFOQ0hfTUlTX1BSRUQsCisJCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCQlbQyhSRVNVTFRfQUNDRVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJCVtDKFJFU1VMVF9NSVNTKV0JPSBDQUNIRV9PUF9VTlNVUFBPUlRFRCwKKwkJfSwKKwl9LAorfTsKKworLyoKKyAqIFBlcmYgRXZlbnRzIGNvdW50ZXJzCisgKi8KK2VudW0gYXJtdjdfY291bnRlcnMgeworCUFSTVY3X0NZQ0xFX0NPVU5URVIgCQk9IDEsCS8qIEN5Y2xlIGNvdW50ZXIgKi8KKwlBUk1WN19DT1VOVEVSMAkJCT0gMiwJLyogRmlyc3QgZXZlbnQgY291bnRlciAqLworfTsKKworLyoKKyAqIFRoZSBjeWNsZSBjb3VudGVyIGlzIEFSTVY3X0NZQ0xFX0NPVU5URVIuCisgKiBUaGUgZmlyc3QgZXZlbnQgY291bnRlciBpcyBBUk1WN19DT1VOVEVSMC4KKyAqIFRoZSBsYXN0IGV2ZW50IGNvdW50ZXIgaXMgKEFSTVY3X0NPVU5URVIwICsgYXJtcG11LT5udW1fZXZlbnRzIC0gMSkuCisgKi8KKyNkZWZpbmUJQVJNVjdfQ09VTlRFUl9MQVNUCShBUk1WN19DT1VOVEVSMCArIGFybXBtdS0+bnVtX2V2ZW50cyAtIDEpCisKKy8qCisgKiBBUk12NyBsb3cgbGV2ZWwgUE1OQyBhY2Nlc3MKKyAqLworCisvKgorICogUGVyLUNQVSBQTU5DOiBjb25maWcgcmVnCisgKi8KKyNkZWZpbmUgQVJNVjdfUE1OQ19FCQkoMSA8PCAwKSAvKiBFbmFibGUgYWxsIGNvdW50ZXJzICovCisjZGVmaW5lIEFSTVY3X1BNTkNfUAkJKDEgPDwgMSkgLyogUmVzZXQgYWxsIGNvdW50ZXJzICovCisjZGVmaW5lIEFSTVY3X1BNTkNfQwkJKDEgPDwgMikgLyogQ3ljbGUgY291bnRlciByZXNldCAqLworI2RlZmluZSBBUk1WN19QTU5DX0QJCSgxIDw8IDMpIC8qIENDTlQgY291bnRzIGV2ZXJ5IDY0dGggY3B1IGN5Y2xlICovCisjZGVmaW5lIEFSTVY3X1BNTkNfWAkJKDEgPDwgNCkgLyogRXhwb3J0IHRvIEVUTSAqLworI2RlZmluZSBBUk1WN19QTU5DX0RQCQkoMSA8PCA1KSAvKiBEaXNhYmxlIENDTlQgaWYgbm9uLWludmFzaXZlIGRlYnVnKi8KKyNkZWZpbmUJQVJNVjdfUE1OQ19OX1NISUZUCTExCSAvKiBOdW1iZXIgb2YgY291bnRlcnMgc3VwcG9ydGVkICovCisjZGVmaW5lCUFSTVY3X1BNTkNfTl9NQVNLCTB4MWYKKyNkZWZpbmUJQVJNVjdfUE1OQ19NQVNLCQkweDNmCSAvKiBNYXNrIGZvciB3cml0YWJsZSBiaXRzICovCisKKy8qCisgKiBBdmFpbGFibGUgY291bnRlcnMKKyAqLworI2RlZmluZSBBUk1WN19DTlQwIAkJMAkvKiBGaXJzdCBldmVudCBjb3VudGVyICovCisjZGVmaW5lIEFSTVY3X0NDTlQgCQkzMQkvKiBDeWNsZSBjb3VudGVyICovCisKKy8qIFBlcmYgRXZlbnQgdG8gbG93IGxldmVsIGNvdW50ZXJzIG1hcHBpbmcgKi8KKyNkZWZpbmUgQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgJKEFSTVY3X0NPVU5URVIwIC0gQVJNVjdfQ05UMCkKKworLyoKKyAqIENOVEVOUzogY291bnRlcnMgZW5hYmxlIHJlZworICovCisjZGVmaW5lIEFSTVY3X0NOVEVOU19QKGlkeCkJKDEgPDwgKGlkeCAtIEFSTVY3X0VWRU5UX0NOVF9UT19DTlR4KSkKKyNkZWZpbmUgQVJNVjdfQ05URU5TX0MJCSgxIDw8IEFSTVY3X0NDTlQpCisKKy8qCisgKiBDTlRFTkM6IGNvdW50ZXJzIGRpc2FibGUgcmVnCisgKi8KKyNkZWZpbmUgQVJNVjdfQ05URU5DX1AoaWR4KQkoMSA8PCAoaWR4IC0gQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgpKQorI2RlZmluZSBBUk1WN19DTlRFTkNfQwkJKDEgPDwgQVJNVjdfQ0NOVCkKKworLyoKKyAqIElOVEVOUzogY291bnRlcnMgb3ZlcmZsb3cgaW50ZXJydXB0IGVuYWJsZSByZWcKKyAqLworI2RlZmluZSBBUk1WN19JTlRFTlNfUChpZHgpCSgxIDw8IChpZHggLSBBUk1WN19FVkVOVF9DTlRfVE9fQ05UeCkpCisjZGVmaW5lIEFSTVY3X0lOVEVOU19DCQkoMSA8PCBBUk1WN19DQ05UKQorCisvKgorICogSU5URU5DOiBjb3VudGVycyBvdmVyZmxvdyBpbnRlcnJ1cHQgZGlzYWJsZSByZWcKKyAqLworI2RlZmluZSBBUk1WN19JTlRFTkNfUChpZHgpCSgxIDw8IChpZHggLSBBUk1WN19FVkVOVF9DTlRfVE9fQ05UeCkpCisjZGVmaW5lIEFSTVY3X0lOVEVOQ19DCQkoMSA8PCBBUk1WN19DQ05UKQorCisvKgorICogRVZUU0VMOiBFdmVudCBzZWxlY3Rpb24gcmVnCisgKi8KKyNkZWZpbmUJQVJNVjdfRVZUU0VMX01BU0sJMHg3ZgkJLyogTWFzayBmb3Igd3JpdGFibGUgYml0cyAqLworCisvKgorICogU0VMRUNUOiBDb3VudGVyIHNlbGVjdGlvbiByZWcKKyAqLworI2RlZmluZQlBUk1WN19TRUxFQ1RfTUFTSwkweDFmCQkvKiBNYXNrIGZvciB3cml0YWJsZSBiaXRzICovCisKKy8qCisgKiBGTEFHOiBjb3VudGVycyBvdmVyZmxvdyBmbGFnIHN0YXR1cyByZWcKKyAqLworI2RlZmluZSBBUk1WN19GTEFHX1AoaWR4KQkoMSA8PCAoaWR4IC0gQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgpKQorI2RlZmluZSBBUk1WN19GTEFHX0MJCSgxIDw8IEFSTVY3X0NDTlQpCisjZGVmaW5lCUFSTVY3X0ZMQUdfTUFTSwkJMHhmZmZmZmZmZgkvKiBNYXNrIGZvciB3cml0YWJsZSBiaXRzICovCisjZGVmaW5lCUFSTVY3X09WRVJGTE9XRURfTUFTSwlBUk1WN19GTEFHX01BU0sKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFybXY3X3BtbmNfcmVhZCh2b2lkKQoreworCXUzMiB2YWw7CisJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMiwgMCIgOiAiPXIiKHZhbCkpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcm12N19wbW5jX3dyaXRlKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXZhbCAmPSBBUk1WN19QTU5DX01BU0s7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMiwgMCIgOiA6ICJyIih2YWwpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXJtdjdfcG1uY19oYXNfb3ZlcmZsb3dlZCh1bnNpZ25lZCBsb25nIHBtbmMpCit7CisJcmV0dXJuIHBtbmMgJiBBUk1WN19PVkVSRkxPV0VEX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFybXY3X3BtbmNfY291bnRlcl9oYXNfb3ZlcmZsb3dlZCh1bnNpZ25lZCBsb25nIHBtbmMsCisJCQkJCWVudW0gYXJtdjdfY291bnRlcnMgY291bnRlcikKK3sKKwlpbnQgcmV0OworCisJaWYgKGNvdW50ZXIgPT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikKKwkJcmV0ID0gcG1uYyAmIEFSTVY3X0ZMQUdfQzsKKwllbHNlIGlmICgoY291bnRlciA+PSBBUk1WN19DT1VOVEVSMCkgJiYgKGNvdW50ZXIgPD0gQVJNVjdfQ09VTlRFUl9MQVNUKSkKKwkJcmV0ID0gcG1uYyAmIEFSTVY3X0ZMQUdfUChjb3VudGVyKTsKKwllbHNlCisJCXByX2VycigiQ1BVJXUgY2hlY2tpbmcgd3JvbmcgY291bnRlciAlZCBvdmVyZmxvdyBzdGF0dXNcbiIsCisJCQlzbXBfcHJvY2Vzc29yX2lkKCksIGNvdW50ZXIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcih1bnNpZ25lZCBpbnQgaWR4KQoreworCXUzMiB2YWw7CisKKwlpZiAoKGlkeCA8IEFSTVY3X0NPVU5URVIwKSB8fCAoaWR4ID4gQVJNVjdfQ09VTlRFUl9MQVNUKSkgeworCQlwcl9lcnIoIkNQVSV1IHNlbGVjdGluZyB3cm9uZyBQTU5DIGNvdW50ZXIiCisJCQkiICVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGlkeCk7CisJCXJldHVybiAtMTsKKwl9CisKKwl2YWwgPSAoaWR4IC0gQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgpICYgQVJNVjdfU0VMRUNUX01BU0s7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMiwgNSIgOiA6ICJyIiAodmFsKSk7CisKKwlyZXR1cm4gaWR4OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBhcm12N3BtdV9yZWFkX2NvdW50ZXIoaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlID0gMDsKKworCWlmIChpZHggPT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikKKwkJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMywgMCIgOiAiPXIiICh2YWx1ZSkpOworCWVsc2UgaWYgKChpZHggPj0gQVJNVjdfQ09VTlRFUjApICYmIChpZHggPD0gQVJNVjdfQ09VTlRFUl9MQVNUKSkgeworCQlpZiAoYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihpZHgpID09IGlkeCkKKwkJCWFzbSB2b2xhdGlsZSgibXJjIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDIiCisJCQkJICAgICA6ICI9ciIgKHZhbHVlKSk7CisJfSBlbHNlCisJCXByX2VycigiQ1BVJXUgcmVhZGluZyB3cm9uZyBjb3VudGVyICVkXG4iLAorCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZHgpOworCisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJtdjdwbXVfd3JpdGVfY291bnRlcihpbnQgaWR4LCB1MzIgdmFsdWUpCit7CisJaWYgKGlkeCA9PSBBUk1WN19DWUNMRV9DT1VOVEVSKQorCQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEzLCAwIiA6IDogInIiICh2YWx1ZSkpOworCWVsc2UgaWYgKChpZHggPj0gQVJNVjdfQ09VTlRFUjApICYmIChpZHggPD0gQVJNVjdfQ09VTlRFUl9MQVNUKSkgeworCQlpZiAoYXJtdjdfcG1uY19zZWxlY3RfY291bnRlcihpZHgpID09IGlkeCkKKwkJCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTMsIDIiCisJCQkJICAgICA6IDogInIiICh2YWx1ZSkpOworCX0gZWxzZQorCQlwcl9lcnIoIkNQVSV1IHdyaXRpbmcgd3JvbmcgY291bnRlciAlZFxuIiwKKwkJCXNtcF9wcm9jZXNzb3JfaWQoKSwgaWR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFybXY3X3BtbmNfd3JpdGVfZXZ0c2VsKHVuc2lnbmVkIGludCBpZHgsIHUzMiB2YWwpCit7CisJaWYgKGFybXY3X3BtbmNfc2VsZWN0X2NvdW50ZXIoaWR4KSA9PSBpZHgpIHsKKwkJdmFsICY9IEFSTVY3X0VWVFNFTF9NQVNLOworCQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEzLCAxIiA6IDogInIiICh2YWwpKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGFybXY3X3BtbmNfZW5hYmxlX2NvdW50ZXIodW5zaWduZWQgaW50IGlkeCkKK3sKKwl1MzIgdmFsOworCisJaWYgKChpZHggIT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikgJiYKKwkgICAgKChpZHggPCBBUk1WN19DT1VOVEVSMCkgfHwgKGlkeCA+IEFSTVY3X0NPVU5URVJfTEFTVCkpKSB7CisJCXByX2VycigiQ1BVJXUgZW5hYmxpbmcgd3JvbmcgUE1OQyBjb3VudGVyIgorCQkJIiAlZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBpZHgpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGlkeCA9PSBBUk1WN19DWUNMRV9DT1VOVEVSKQorCQl2YWwgPSBBUk1WN19DTlRFTlNfQzsKKwllbHNlCisJCXZhbCA9IEFSTVY3X0NOVEVOU19QKGlkeCk7CisKKwlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEyLCAxIiA6IDogInIiICh2YWwpKTsKKworCXJldHVybiBpZHg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGFybXY3X3BtbmNfZGlzYWJsZV9jb3VudGVyKHVuc2lnbmVkIGludCBpZHgpCit7CisJdTMyIHZhbDsKKworCisJaWYgKChpZHggIT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikgJiYKKwkgICAgKChpZHggPCBBUk1WN19DT1VOVEVSMCkgfHwgKGlkeCA+IEFSTVY3X0NPVU5URVJfTEFTVCkpKSB7CisJCXByX2VycigiQ1BVJXUgZGlzYWJsaW5nIHdyb25nIFBNTkMgY291bnRlciIKKwkJCSIgJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgaWR4KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChpZHggPT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikKKwkJdmFsID0gQVJNVjdfQ05URU5DX0M7CisJZWxzZQorCQl2YWwgPSBBUk1WN19DTlRFTkNfUChpZHgpOworCisJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAwLCAlMCwgYzksIGMxMiwgMiIgOiA6ICJyIiAodmFsKSk7CisKKwlyZXR1cm4gaWR4OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBhcm12N19wbW5jX2VuYWJsZV9pbnRlbnModW5zaWduZWQgaW50IGlkeCkKK3sKKwl1MzIgdmFsOworCisJaWYgKChpZHggIT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikgJiYKKwkgICAgKChpZHggPCBBUk1WN19DT1VOVEVSMCkgfHwgKGlkeCA+IEFSTVY3X0NPVU5URVJfTEFTVCkpKSB7CisJCXByX2VycigiQ1BVJXUgZW5hYmxpbmcgd3JvbmcgUE1OQyBjb3VudGVyIgorCQkJIiBpbnRlcnJ1cHQgZW5hYmxlICVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGlkeCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoaWR4ID09IEFSTVY3X0NZQ0xFX0NPVU5URVIpCisJCXZhbCA9IEFSTVY3X0lOVEVOU19DOworCWVsc2UKKwkJdmFsID0gQVJNVjdfSU5URU5TX1AoaWR4KTsKKworCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTQsIDEiIDogOiAiciIgKHZhbCkpOworCisJcmV0dXJuIGlkeDsKK30KKworc3RhdGljIGlubGluZSB1MzIgYXJtdjdfcG1uY19kaXNhYmxlX2ludGVucyh1bnNpZ25lZCBpbnQgaWR4KQoreworCXUzMiB2YWw7CisKKwlpZiAoKGlkeCAhPSBBUk1WN19DWUNMRV9DT1VOVEVSKSAmJgorCSAgICAoKGlkeCA8IEFSTVY3X0NPVU5URVIwKSB8fCAoaWR4ID4gQVJNVjdfQ09VTlRFUl9MQVNUKSkpIHsKKwkJcHJfZXJyKCJDUFUldSBkaXNhYmxpbmcgd3JvbmcgUE1OQyBjb3VudGVyIgorCQkJIiBpbnRlcnJ1cHQgZW5hYmxlICVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGlkeCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoaWR4ID09IEFSTVY3X0NZQ0xFX0NPVU5URVIpCisJCXZhbCA9IEFSTVY3X0lOVEVOQ19DOworCWVsc2UKKwkJdmFsID0gQVJNVjdfSU5URU5DX1AoaWR4KTsKKworCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM5LCBjMTQsIDIiIDogOiAiciIgKHZhbCkpOworCisJcmV0dXJuIGlkeDsKK30KKworc3RhdGljIGlubGluZSB1MzIgYXJtdjdfcG1uY19nZXRyZXNldF9mbGFncyh2b2lkKQoreworCXUzMiB2YWw7CisKKwkvKiBSZWFkICovCisJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMiwgMyIgOiAiPXIiICh2YWwpKTsKKworCS8qIFdyaXRlIHRvIGNsZWFyIGZsYWdzICovCisJdmFsICY9IEFSTVY3X0ZMQUdfTUFTSzsKKwlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjOSwgYzEyLCAzIiA6IDogInIiICh2YWwpKTsKKworCXJldHVybiB2YWw7Cit9CisKKyNpZmRlZiBERUJVRworc3RhdGljIHZvaWQgYXJtdjdfcG1uY19kdW1wX3JlZ3Modm9pZCkKK3sKKwl1MzIgdmFsOworCXVuc2lnbmVkIGludCBjbnQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJQTU5DIHJlZ2lzdGVycyBkdW1wOlxuIik7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCAwIiA6ICI9ciIgKHZhbCkpOworCXByaW50ayhLRVJOX0lORk8gIlBNTkMgID0weCUwOHhcbiIsIHZhbCk7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCAxIiA6ICI9ciIgKHZhbCkpOworCXByaW50ayhLRVJOX0lORk8gIkNOVEVOUz0weCUwOHhcbiIsIHZhbCk7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzE0LCAxIiA6ICI9ciIgKHZhbCkpOworCXByaW50ayhLRVJOX0lORk8gIklOVEVOUz0weCUwOHhcbiIsIHZhbCk7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCAzIiA6ICI9ciIgKHZhbCkpOworCXByaW50ayhLRVJOX0lORk8gIkZMQUdTID0weCUwOHhcbiIsIHZhbCk7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEyLCA1IiA6ICI9ciIgKHZhbCkpOworCXByaW50ayhLRVJOX0lORk8gIlNFTEVDVD0weCUwOHhcbiIsIHZhbCk7CisKKwlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEzLCAwIiA6ICI9ciIgKHZhbCkpOworCXByaW50ayhLRVJOX0lORk8gIkNDTlQgID0weCUwOHhcbiIsIHZhbCk7CisKKwlmb3IgKGNudCA9IEFSTVY3X0NPVU5URVIwOyBjbnQgPCBBUk1WN19DT1VOVEVSX0xBU1Q7IGNudCsrKSB7CisJCWFybXY3X3BtbmNfc2VsZWN0X2NvdW50ZXIoY250KTsKKwkJYXNtIHZvbGF0aWxlKCJtcmMgcDE1LCAwLCAlMCwgYzksIGMxMywgMiIgOiAiPXIiICh2YWwpKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ05UWyVkXSBjb3VudCA9MHglMDh4XG4iLAorCQkJY250LUFSTVY3X0VWRU5UX0NOVF9UT19DTlR4LCB2YWwpOworCQlhc20gdm9sYXRpbGUoIm1yYyBwMTUsIDAsICUwLCBjOSwgYzEzLCAxIiA6ICI9ciIgKHZhbCkpOworCQlwcmludGsoS0VSTl9JTkZPICJDTlRbJWRdIGV2dHNlbD0weCUwOHhcbiIsCisJCQljbnQtQVJNVjdfRVZFTlRfQ05UX1RPX0NOVHgsIHZhbCk7CisJfQorfQorI2VuZGlmCisKK3ZvaWQgYXJtdjdwbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogRW5hYmxlIGNvdW50ZXIgYW5kIGludGVycnVwdCwgYW5kIHNldCB0aGUgY291bnRlciB0byBjb3VudAorCSAqIHRoZSBldmVudCB0aGF0IHdlJ3JlIGludGVyZXN0ZWQgaW4uCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIERpc2FibGUgY291bnRlcgorCSAqLworCWFybXY3X3BtbmNfZGlzYWJsZV9jb3VudGVyKGlkeCk7CisKKwkvKgorCSAqIFNldCBldmVudCAoaWYgZGVzdGluZWQgZm9yIFBNTnggY291bnRlcnMpCisJICogV2UgZG9uJ3QgbmVlZCB0byBzZXQgdGhlIGV2ZW50IGlmIGl0J3MgYSBjeWNsZSBjb3VudAorCSAqLworCWlmIChpZHggIT0gQVJNVjdfQ1lDTEVfQ09VTlRFUikKKwkJYXJtdjdfcG1uY193cml0ZV9ldnRzZWwoaWR4LCBod2MtPmNvbmZpZ19iYXNlKTsKKworCS8qCisJICogRW5hYmxlIGludGVycnVwdCBmb3IgdGhpcyBjb3VudGVyCisJICovCisJYXJtdjdfcG1uY19lbmFibGVfaW50ZW5zKGlkeCk7CisKKwkvKgorCSAqIEVuYWJsZSBjb3VudGVyCisJICovCisJYXJtdjdfcG1uY19lbmFibGVfY291bnRlcihpZHgpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgYXJtdjdwbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIERpc2FibGUgY291bnRlciBhbmQgaW50ZXJydXB0CisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIERpc2FibGUgY291bnRlcgorCSAqLworCWFybXY3X3BtbmNfZGlzYWJsZV9jb3VudGVyKGlkeCk7CisKKwkvKgorCSAqIERpc2FibGUgaW50ZXJydXB0IGZvciB0aGlzIGNvdW50ZXIKKwkgKi8KKwlhcm12N19wbW5jX2Rpc2FibGVfaW50ZW5zKGlkeCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYXJtdjdwbXVfaGFuZGxlX2lycShpbnQgaXJxX251bSwgdm9pZCAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgcG1uYzsKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjOworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCWludCBpZHg7CisKKwkvKgorCSAqIEdldCBhbmQgcmVzZXQgdGhlIElSUSBmbGFncworCSAqLworCXBtbmMgPSBhcm12N19wbW5jX2dldHJlc2V0X2ZsYWdzKCk7CisKKwkvKgorCSAqIERpZCBhbiBvdmVyZmxvdyBvY2N1cj8KKwkgKi8KKwlpZiAoIWFybXY3X3BtbmNfaGFzX292ZXJmbG93ZWQocG1uYykpCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qCisJICogSGFuZGxlIHRoZSBjb3VudGVyKHMpIG92ZXJmbG93KHMpCisJICovCisJcmVncyA9IGdldF9pcnFfcmVncygpOworCisJZGF0YS5hZGRyID0gMDsKKworCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8PSBhcm1wbXUtPm51bV9ldmVudHM7ICsraWR4KSB7CisJCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tpZHhdOworCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOworCisJCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBXZSBoYXZlIGEgc2luZ2xlIGludGVycnVwdCBmb3IgYWxsIGNvdW50ZXJzLiBDaGVjayB0aGF0CisJCSAqIGVhY2ggY291bnRlciBoYXMgb3ZlcmZsb3dlZCBiZWZvcmUgd2UgcHJvY2VzcyBpdC4KKwkJICovCisJCWlmICghYXJtdjdfcG1uY19jb3VudGVyX2hhc19vdmVyZmxvd2VkKHBtbmMsIGlkeCkpCisJCQljb250aW51ZTsKKworCQlod2MgPSAmZXZlbnQtPmh3OworCQlhcm1wbXVfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7CisJCWRhdGEucGVyaW9kID0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOworCQlpZiAoIWFybXBtdV9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCkpCisJCQljb250aW51ZTsKKworCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMCwgJmRhdGEsIHJlZ3MpKQorCQkJYXJtcG11LT5kaXNhYmxlKGh3YywgaWR4KTsKKwl9CisKKwkvKgorCSAqIEhhbmRsZSB0aGUgcGVuZGluZyBwZXJmIGV2ZW50cy4KKwkgKgorCSAqIE5vdGU6IHRoaXMgY2FsbCAqbXVzdCogYmUgcnVuIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLiBGb3IKKwkgKiBwbGF0Zm9ybXMgdGhhdCBjYW4gaGF2ZSB0aGUgUE1VIGludGVycnVwdHMgcmFpc2VkIGFzIGEgUE1JLCB0aGlzCisJICogd2lsbCBub3Qgd29yay4KKwkgKi8KKwlwZXJmX2V2ZW50X2RvX3BlbmRpbmcoKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgYXJtdjdwbXVfc3RhcnQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJLyogRW5hYmxlIGFsbCBjb3VudGVycyAqLworCWFybXY3X3BtbmNfd3JpdGUoYXJtdjdfcG1uY19yZWFkKCkgfCBBUk1WN19QTU5DX0UpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGFybXY3cG11X3N0b3Aodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7CisJLyogRGlzYWJsZSBhbGwgY291bnRlcnMgKi8KKwlhcm12N19wbW5jX3dyaXRlKGFybXY3X3BtbmNfcmVhZCgpICYgfkFSTVY3X1BNTkNfRSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXJtdjdfYThfcG11X2V2ZW50X21hcChpbnQgY29uZmlnKQoreworCWludCBtYXBwaW5nID0gYXJtdjdfYThfcGVyZl9tYXBbY29uZmlnXTsKKwlpZiAoSFdfT1BfVU5TVVBQT1JURUQgPT0gbWFwcGluZykKKwkJbWFwcGluZyA9IC1FT1BOT1RTVVBQOworCXJldHVybiBtYXBwaW5nOworfQorCitzdGF0aWMgaW5saW5lIGludCBhcm12N19hOV9wbXVfZXZlbnRfbWFwKGludCBjb25maWcpCit7CisJaW50IG1hcHBpbmcgPSBhcm12N19hOV9wZXJmX21hcFtjb25maWddOworCWlmIChIV19PUF9VTlNVUFBPUlRFRCA9PSBtYXBwaW5nKQorCQltYXBwaW5nID0gLUVPUE5PVFNVUFA7CisJcmV0dXJuIG1hcHBpbmc7Cit9CisKK3N0YXRpYyB1NjQgYXJtdjdwbXVfcmF3X2V2ZW50KHU2NCBjb25maWcpCit7CisJcmV0dXJuIGNvbmZpZyAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQgYXJtdjdwbXVfZ2V0X2V2ZW50X2lkeChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkJCQkgIHN0cnVjdCBod19wZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpbnQgaWR4OworCisJLyogQWx3YXlzIHBsYWNlIGEgY3ljbGUgY291bnRlciBpbnRvIHRoZSBjeWNsZSBjb3VudGVyLiAqLworCWlmIChldmVudC0+Y29uZmlnX2Jhc2UgPT0gQVJNVjdfUEVSRkNUUl9DUFVfQ1lDTEVTKSB7CisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KEFSTVY3X0NZQ0xFX0NPVU5URVIsIGNwdWMtPnVzZWRfbWFzaykpCisJCQlyZXR1cm4gLUVBR0FJTjsKKworCQlyZXR1cm4gQVJNVjdfQ1lDTEVfQ09VTlRFUjsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBGb3IgYW55dGhpbmcgb3RoZXIgdGhhbiBhIGN5Y2xlIGNvdW50ZXIsIHRyeSBhbmQgdXNlCisJCSAqIHRoZSBldmVudHMgY291bnRlcnMKKwkJICovCisJCWZvciAoaWR4ID0gQVJNVjdfQ09VTlRFUjA7IGlkeCA8PSBhcm1wbXUtPm51bV9ldmVudHM7ICsraWR4KSB7CisJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKQorCQkJCXJldHVybiBpZHg7CisJCX0KKworCQkvKiBUaGUgY291bnRlcnMgYXJlIGFsbCBpbiB1c2UuICovCisJCXJldHVybiAtRUFHQUlOOworCX0KK30KKworc3RhdGljIHN0cnVjdCBhcm1fcG11IGFybXY3cG11ID0geworCS5oYW5kbGVfaXJxCQk9IGFybXY3cG11X2hhbmRsZV9pcnEsCisJLmVuYWJsZQkJCT0gYXJtdjdwbXVfZW5hYmxlX2V2ZW50LAorCS5kaXNhYmxlCQk9IGFybXY3cG11X2Rpc2FibGVfZXZlbnQsCisJLnJhd19ldmVudAkJPSBhcm12N3BtdV9yYXdfZXZlbnQsCisJLnJlYWRfY291bnRlcgkJPSBhcm12N3BtdV9yZWFkX2NvdW50ZXIsCisJLndyaXRlX2NvdW50ZXIJCT0gYXJtdjdwbXVfd3JpdGVfY291bnRlciwKKwkuZ2V0X2V2ZW50X2lkeAkJPSBhcm12N3BtdV9nZXRfZXZlbnRfaWR4LAorCS5zdGFydAkJCT0gYXJtdjdwbXVfc3RhcnQsCisJLnN0b3AJCQk9IGFybXY3cG11X3N0b3AsCisJLm1heF9wZXJpb2QJCT0gKDFMTFUgPDwgMzIpIC0gMSwKK307CisKK3N0YXRpYyB1MzIgX19pbml0IGFybXY3X3Jlc2V0X3JlYWRfcG1uYyh2b2lkKQoreworCXUzMiBuYl9jbnQ7CisKKwkvKiBJbml0aWFsaXplICYgUmVzZXQgUE1OQzogQyBhbmQgUCBiaXRzICovCisJYXJtdjdfcG1uY193cml0ZShBUk1WN19QTU5DX1AgfCBBUk1WN19QTU5DX0MpOworCisJLyogUmVhZCB0aGUgbmIgb2YgQ05UeCBjb3VudGVycyBzdXBwb3J0ZWQgZnJvbSBQTU5DICovCisJbmJfY250ID0gKGFybXY3X3BtbmNfcmVhZCgpID4+IEFSTVY3X1BNTkNfTl9TSElGVCkgJiBBUk1WN19QTU5DX05fTUFTSzsKKworCS8qIEFkZCB0aGUgQ1BVIGN5Y2xlcyBjb3VudGVyIGFuZCByZXR1cm4gKi8KKwlyZXR1cm4gbmJfY250ICsgMTsKK30KKworc3RhdGljIGludCBfX2luaXQKK2luaXRfaHdfcGVyZl9ldmVudHModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGNwdWlkID0gcmVhZF9jcHVpZF9pZCgpOworCXVuc2lnbmVkIGxvbmcgaW1wbGVtZW50b3IgPSAoY3B1aWQgJiAweEZGMDAwMDAwKSA+PiAyNDsKKwl1bnNpZ25lZCBsb25nIHBhcnRfbnVtYmVyID0gKGNwdWlkICYgMHhGRkYwKTsKKworCS8qIFdlIG9ubHkgc3VwcG9ydCBBUk0gQ1BVcyBpbXBsZW1lbnRlZCBieSBBUk0gYXQgdGhlIG1vbWVudC4gKi8KKwlpZiAoMHg0MSA9PSBpbXBsZW1lbnRvcikgeworCQlzd2l0Y2ggKHBhcnRfbnVtYmVyKSB7CisJCWNhc2UgMHhCMzYwOgkvKiBBUk0xMTM2ICovCisJCWNhc2UgMHhCNTYwOgkvKiBBUk0xMTU2ICovCisJCWNhc2UgMHhCNzYwOgkvKiBBUk0xMTc2ICovCisJCQlhcm1wbXUgPSAmYXJtdjZwbXU7CisJCQltZW1jcHkoYXJtcG11X3BlcmZfY2FjaGVfbWFwLCBhcm12Nl9wZXJmX2NhY2hlX21hcCwKKwkJCQkJc2l6ZW9mKGFybXY2X3BlcmZfY2FjaGVfbWFwKSk7CisJCQlwZXJmX21heF9ldmVudHMJPSBhcm12NnBtdS5udW1fZXZlbnRzOworCQkJYnJlYWs7CisJCWNhc2UgMHhCMDIwOgkvKiBBUk0xMW1wY29yZSAqLworCQkJYXJtcG11ID0gJmFybXY2bXBjb3JlX3BtdTsKKwkJCW1lbWNweShhcm1wbXVfcGVyZl9jYWNoZV9tYXAsCisJCQkgICAgICAgYXJtdjZtcGNvcmVfcGVyZl9jYWNoZV9tYXAsCisJCQkgICAgICAgc2l6ZW9mKGFybXY2bXBjb3JlX3BlcmZfY2FjaGVfbWFwKSk7CisJCQlwZXJmX21heF9ldmVudHMgPSBhcm12Nm1wY29yZV9wbXUubnVtX2V2ZW50czsKKwkJCWJyZWFrOworCQljYXNlIDB4QzA4MDoJLyogQ29ydGV4LUE4ICovCisJCQlhcm12N3BtdS5uYW1lID0gQVJNVjdfUE1VX0NPUlRFWF9BOF9OQU1FOworCQkJbWVtY3B5KGFybXBtdV9wZXJmX2NhY2hlX21hcCwgYXJtdjdfYThfcGVyZl9jYWNoZV9tYXAsCisJCQkJc2l6ZW9mKGFybXY3X2E4X3BlcmZfY2FjaGVfbWFwKSk7CisJCQlhcm12N3BtdS5ldmVudF9tYXAgPSBhcm12N19hOF9wbXVfZXZlbnRfbWFwOworCQkJYXJtcG11ID0gJmFybXY3cG11OworCisJCQkvKiBSZXNldCBQTU5DIGFuZCByZWFkIHRoZSBuYiBvZiBDTlR4IGNvdW50ZXJzCisJCQkgICAgc3VwcG9ydGVkICovCisJCQlhcm12N3BtdS5udW1fZXZlbnRzID0gYXJtdjdfcmVzZXRfcmVhZF9wbW5jKCk7CisJCQlwZXJmX21heF9ldmVudHMgPSBhcm12N3BtdS5udW1fZXZlbnRzOworCQkJYnJlYWs7CisJCWNhc2UgMHhDMDkwOgkvKiBDb3J0ZXgtQTkgKi8KKwkJCWFybXY3cG11Lm5hbWUgPSBBUk1WN19QTVVfQ09SVEVYX0E5X05BTUU7CisJCQltZW1jcHkoYXJtcG11X3BlcmZfY2FjaGVfbWFwLCBhcm12N19hOV9wZXJmX2NhY2hlX21hcCwKKwkJCQlzaXplb2YoYXJtdjdfYTlfcGVyZl9jYWNoZV9tYXApKTsKKwkJCWFybXY3cG11LmV2ZW50X21hcCA9IGFybXY3X2E5X3BtdV9ldmVudF9tYXA7CisJCQlhcm1wbXUgPSAmYXJtdjdwbXU7CisKKwkJCS8qIFJlc2V0IFBNTkMgYW5kIHJlYWQgdGhlIG5iIG9mIENOVHggY291bnRlcnMKKwkJCSAgICBzdXBwb3J0ZWQgKi8KKwkJCWFybXY3cG11Lm51bV9ldmVudHMgPSBhcm12N19yZXNldF9yZWFkX3BtbmMoKTsKKwkJCXBlcmZfbWF4X2V2ZW50cyA9IGFybXY3cG11Lm51bV9ldmVudHM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByX2luZm8oIm5vIGhhcmR3YXJlIHN1cHBvcnQgYXZhaWxhYmxlXG4iKTsKKwkJCXBlcmZfbWF4X2V2ZW50cyA9IC0xOworCQl9CisJfQorCisJaWYgKGFybXBtdSkKKwkJcHJfaW5mbygiZW5hYmxlZCB3aXRoICVzIFBNVSBkcml2ZXIsICVkIGNvdW50ZXJzIGF2YWlsYWJsZVxuIiwKKwkJCWFybXBtdS0+bmFtZSwgYXJtcG11LT5udW1fZXZlbnRzKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChpbml0X2h3X3BlcmZfZXZlbnRzKTsKKworLyoKKyAqIENhbGxjaGFpbiBoYW5kbGluZyBjb2RlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2NhbGxjaGFpbl9zdG9yZShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5LAorCQl1NjQgaXApCit7CisJaWYgKGVudHJ5LT5uciA8IFBFUkZfTUFYX1NUQUNLX0RFUFRIKQorCQllbnRyeS0+aXBbZW50cnktPm5yKytdID0gaXA7Cit9CisKKy8qCisgKiBUaGUgcmVnaXN0ZXJzIHdlJ3JlIGludGVyZXN0ZWQgaW4gYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlCisgKiBsZW5ndGggc2F2ZWQgcmVnaXN0ZXIgc3RydWN0dXJlLiBUaGUgZnAgcG9pbnRzIGF0IHRoZSBlbmQgb2YgdGhpcworICogc3RydWN0dXJlIHNvIHRoZSBhZGRyZXNzIG9mIHRoaXMgc3RydWN0IGlzOgorICogKHN0cnVjdCBmcmFtZV90YWlsICopKHh4eC0+ZnApLTEKKyAqCisgKiBUaGlzIGNvZGUgaGFzIGJlZW4gYWRhcHRlZCBmcm9tIHRoZSBBUk0gT1Byb2ZpbGUgc3VwcG9ydC4KKyAqLworc3RydWN0IGZyYW1lX3RhaWwgeworCXN0cnVjdCBmcmFtZV90YWlsICAgKmZwOworCXVuc2lnbmVkIGxvbmcJICAgIHNwOworCXVuc2lnbmVkIGxvbmcJICAgIGxyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqIEdldCB0aGUgcmV0dXJuIGFkZHJlc3MgZm9yIGEgc2luZ2xlIHN0YWNrZnJhbWUgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlCisgKiBuZXh0IGZyYW1lIHRhaWwuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnJhbWVfdGFpbCAqCit1c2VyX2JhY2t0cmFjZShzdHJ1Y3QgZnJhbWVfdGFpbCAqdGFpbCwKKwkgICAgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgZnJhbWVfdGFpbCBidWZ0YWlsOworCisJLyogQWxzbyBjaGVjayBhY2Nlc3NpYmlsaXR5IG9mIG9uZSBzdHJ1Y3QgZnJhbWVfdGFpbCBiZXlvbmQgKi8KKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdGFpbCwgc2l6ZW9mKGJ1ZnRhaWwpKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMoJmJ1ZnRhaWwsIHRhaWwsIHNpemVvZihidWZ0YWlsKSkpCisJCXJldHVybiBOVUxMOworCisJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBidWZ0YWlsLmxyKTsKKworCS8qCisJICogRnJhbWUgcG9pbnRlcnMgc2hvdWxkIHN0cmljdGx5IHByb2dyZXNzIGJhY2sgdXAgdGhlIHN0YWNrCisJICogKHRvd2FyZHMgaGlnaGVyIGFkZHJlc3NlcykuCisJICovCisJaWYgKHRhaWwgPj0gYnVmdGFpbC5mcCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gYnVmdGFpbC5mcCAtIDE7Cit9CisKK3N0YXRpYyB2b2lkCitwZXJmX2NhbGxjaGFpbl91c2VyKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkgICAgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgZnJhbWVfdGFpbCAqdGFpbDsKKworCWNhbGxjaGFpbl9zdG9yZShlbnRyeSwgUEVSRl9DT05URVhUX1VTRVIpOworCisJaWYgKCF1c2VyX21vZGUocmVncykpCisJCXJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7CisKKwl0YWlsID0gKHN0cnVjdCBmcmFtZV90YWlsICopcmVncy0+QVJNX2ZwIC0gMTsKKworCXdoaWxlICh0YWlsICYmICEoKHVuc2lnbmVkIGxvbmcpdGFpbCAmIDB4MykpCisJCXRhaWwgPSB1c2VyX2JhY2t0cmFjZSh0YWlsLCBlbnRyeSk7Cit9CisKKy8qCisgKiBHZXRzIGNhbGxlZCBieSB3YWxrX3N0YWNrZnJhbWUoKSBmb3IgZXZlcnkgc3RhY2tmcmFtZS4gVGhpcyB3aWxsIGJlIGNhbGxlZAorICogd2hpc3QgdW53aW5kaW5nIHRoZSBzdGFja2ZyYW1lIGFuZCBpcyBsaWtlIGEgc3Vicm91dGluZSByZXR1cm4gc28gd2UgdXNlCisgKiB0aGUgUEMuCisgKi8KK3N0YXRpYyBpbnQKK2NhbGxjaGFpbl90cmFjZShzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnIsCisJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSA9IGRhdGE7CisJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBmci0+cGMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcGVyZl9jYWxsY2hhaW5fa2VybmVsKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkgICAgICBzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBzdGFja2ZyYW1lIGZyOworCisJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBQRVJGX0NPTlRFWFRfS0VSTkVMKTsKKwlmci5mcCA9IHJlZ3MtPkFSTV9mcDsKKwlmci5zcCA9IHJlZ3MtPkFSTV9zcDsKKwlmci5sciA9IHJlZ3MtPkFSTV9scjsKKwlmci5wYyA9IHJlZ3MtPkFSTV9wYzsKKwl3YWxrX3N0YWNrZnJhbWUoJmZyLCBjYWxsY2hhaW5fdHJhY2UsIGVudHJ5KTsKK30KKworc3RhdGljIHZvaWQKK3BlcmZfZG9fY2FsbGNoYWluKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkgIHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnkpCit7CisJaW50IGlzX3VzZXI7CisKKwlpZiAoIXJlZ3MpCisJCXJldHVybjsKKworCWlzX3VzZXIgPSB1c2VyX21vZGUocmVncyk7CisKKwlpZiAoIWN1cnJlbnQgfHwgIWN1cnJlbnQtPnBpZCkKKwkJcmV0dXJuOworCisJaWYgKGlzX3VzZXIgJiYgY3VycmVudC0+c3RhdGUgIT0gVEFTS19SVU5OSU5HKQorCQlyZXR1cm47CisKKwlpZiAoIWlzX3VzZXIpCisJCXBlcmZfY2FsbGNoYWluX2tlcm5lbChyZWdzLCBlbnRyeSk7CisKKwlpZiAoY3VycmVudC0+bW0pCisJCXBlcmZfY2FsbGNoYWluX3VzZXIocmVncywgZW50cnkpOworfQorCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5LCBwbWNfaXJxX2VudHJ5KTsKKworc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICoKK3BlcmZfY2FsbGNoYWluKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnkgPSAmX19nZXRfY3B1X3ZhcihwbWNfaXJxX2VudHJ5KTsKKworCWVudHJ5LT5uciA9IDA7CisJcGVyZl9kb19jYWxsY2hhaW4ocmVncywgZW50cnkpOworCXJldHVybiBlbnRyeTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wbXUuYyBiL2FyY2gvYXJtL2tlcm5lbC9wbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTI0MzEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL3BtdS5jCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9wbXUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgcGljb0NoaXAgRGVzaWducyBMdGQsIEphbWllIElsZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL3BtdS5oPgorCisvKgorICogRGVmaW5lIHRoZSBJUlFzIGZvciB0aGUgc3lzdGVtLiBXZSBjb3VsZCB1c2Ugc29tZXRoaW5nIGxpa2UgYSBwbGF0Zm9ybQorICogZGV2aWNlIGJ1dCB0aGF0IHNlZW1zIGZhaXJseSBoZWF2eXdlaWdodCBmb3IgdGhpcy4gQWxzbywgdGhlIHBlcmZvcm1hbmNlCisgKiBjb3VudGVycyBjYW4ndCBiZSByZW1vdmVkIG9yIGhvdHBsdWdnZWQuCisgKgorICogT3JkZXJpbmcgaXMgaW1wb3J0YW50OiBpbml0X3BtdSgpIHdpbGwgdXNlIHRoZSBvcmRlcmluZyB0byBzZXQgdGhlIGFmZmluaXR5CisgKiB0byB0aGUgY29ycmVzcG9uZGluZyBjb3JlLiBlLmcuIHRoZSBmaXJzdCBpbnRlcnJ1cHQgd2lsbCBnbyB0byBjcHUgMCwgdGhlCisgKiBzZWNvbmQgZ29lcyB0byBjcHUgMSBldGMuCisgKi8KK3N0YXRpYyBjb25zdCBpbnQgaXJxc1tdID0geworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCisJMywKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQkNNUklORykKKwlJUlFfUE1VSVJRLAorI2VsaWYgZGVmaW5lZChDT05GSUdfTUFDSF9SRUFMVklFV19FQikKKwlJUlFfRUIxMU1QX1BNVV9DUFUwLAorCUlSUV9FQjExTVBfUE1VX0NQVTEsCisJSVJRX0VCMTFNUF9QTVVfQ1BVMiwKKwlJUlFfRUIxMU1QX1BNVV9DUFUzLAorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKKwlJTlRfMzRYWF9CRU5DSF9NUFVfRU1VTCwKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfSU9QMzJYKQorCUlSUV9JT1AzMlhfQ09SRV9QTVUsCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lPUDMzWCkKKwlJUlFfSU9QMzNYX0NPUkVfUE1VLAorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9QWEEpCisJSVJRX1BNVSwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXVfaXJxcyBwbXVfaXJxcyA9IHsKKwkuaXJxcwkgICAgPSBpcnFzLAorCS5udW1faXJxcyAgID0gQVJSQVlfU0laRShpcnFzKSwKK307CisKK3N0YXRpYyB2b2xhdGlsZSBsb25nIHBtdV9sb2NrOworCitjb25zdCBzdHJ1Y3QgcG11X2lycXMgKgorcmVzZXJ2ZV9wbXUodm9pZCkKK3sKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdF9sb2NrKDAsICZwbXVfbG9jaykgPyBFUlJfUFRSKC1FQlVTWSkgOgorCQkmcG11X2lycXM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZXNlcnZlX3BtdSk7CisKK2ludAorcmVsZWFzZV9wbXUoY29uc3Qgc3RydWN0IHBtdV9pcnFzICppcnFzKQoreworCWlmIChXQVJOX09OKGlycXMgIT0gJnBtdV9pcnFzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2xlYXJfYml0X3VubG9jaygwLCAmcG11X2xvY2spOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVsZWFzZV9wbXUpOworCitzdGF0aWMgaW50CitzZXRfaXJxX2FmZmluaXR5KGludCBpcnEsCisJCSB1bnNpZ25lZCBpbnQgY3B1KQoreworI2lmZGVmIENPTkZJR19TTVAKKwlpbnQgZXJyID0gaXJxX3NldF9hZmZpbml0eShpcnEsIGNwdW1hc2tfb2YoY3B1KSk7CisJaWYgKGVycikKKwkJcHJfd2FybmluZygidW5hYmxlIHRvIHNldCBpcnEgYWZmaW5pdHkgKGlycT0lZCwgY3B1PSV1KVxuIiwKKwkJCSAgIGlycSwgY3B1KTsKKwlyZXR1cm4gZXJyOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCitpbnQKK2luaXRfcG11KHZvaWQpCit7CisJaW50IGksIGVyciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgcG11X2lycXMubnVtX2lycXM7ICsraSkgeworCQllcnIgPSBzZXRfaXJxX2FmZmluaXR5KHBtdV9pcnFzLmlycXNbaV0sIGkpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGluaXRfcG11KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwppbmRleCBhMmVhMzg1Li4wOGY4OTlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCkBAIC00OTksMTAgKzQ5OSw0MSBAQAogCS5mbgkJPSBicmVha190cmFwLAogfTsKIAorc3RhdGljIGludCB0aHVtYjJfYnJlYWtfdHJhcChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGluc3RyKQoreworCXVuc2lnbmVkIGludCBpbnN0cjI7CisJdm9pZCBfX3VzZXIgKnBjOworCisJLyogQ2hlY2sgdGhlIHNlY29uZCBoYWxmIG9mIHRoZSBpbnN0cnVjdGlvbi4gICovCisJcGMgPSAodm9pZCBfX3VzZXIgKikoaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSArIDIpOworCisJaWYgKHByb2Nlc3Nvcl9tb2RlKHJlZ3MpID09IFNWQ19NT0RFKSB7CisJCWluc3RyMiA9ICoodTE2ICopIHBjOworCX0gZWxzZSB7CisJCWdldF91c2VyKGluc3RyMiwgKHUxNiBfX3VzZXIgKilwYyk7CisJfQorCisJaWYgKGluc3RyMiA9PSAweGEwMDApIHsKKwkJcHRyYWNlX2JyZWFrKGN1cnJlbnQsIHJlZ3MpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gMTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdW5kZWZfaG9vayB0aHVtYjJfYnJlYWtfaG9vayA9IHsKKwkuaW5zdHJfbWFzawk9IDB4ZmZmZiwKKwkuaW5zdHJfdmFsCT0gMHhmN2YwLAorCS5jcHNyX21hc2sJPSBQU1JfVF9CSVQsCisJLmNwc3JfdmFsCT0gUFNSX1RfQklULAorCS5mbgkJPSB0aHVtYjJfYnJlYWtfdHJhcCwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHB0cmFjZV9icmVha19pbml0KHZvaWQpCiB7CiAJcmVnaXN0ZXJfdW5kZWZfaG9vaygmYXJtX2JyZWFrX2hvb2spOwogCXJlZ2lzdGVyX3VuZGVmX2hvb2soJnRodW1iX2JyZWFrX2hvb2spOworCXJlZ2lzdGVyX3VuZGVmX2hvb2soJnRodW1iMl9icmVha19ob29rKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY5LDcgKzcwMCw3IEBACiAJdW5pb24gdmZwX3N0YXRlICp2ZnAgPSAmdGhyZWFkLT52ZnBzdGF0ZTsKIAlzdHJ1Y3QgdXNlcl92ZnAgX191c2VyICp1ZnAgPSBkYXRhOwogCi0JdmZwX3N5bmNfc3RhdGUodGhyZWFkKTsKKwl2ZnBfc3luY19od3N0YXRlKHRocmVhZCk7CiAKIAkvKiBjb3B5IHRoZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KIAlpZiAoY29weV90b191c2VyKCZ1ZnAtPmZwcmVncywgJnZmcC0+aGFyZC5mcHJlZ3MsCkBAIC02OTIsNyArNzIzLDcgQEAKIAl1bmlvbiB2ZnBfc3RhdGUgKnZmcCA9ICZ0aHJlYWQtPnZmcHN0YXRlOwogCXN0cnVjdCB1c2VyX3ZmcCBfX3VzZXIgKnVmcCA9IGRhdGE7CiAKLQl2ZnBfc3luY19zdGF0ZSh0aHJlYWQpOworCXZmcF9zeW5jX2h3c3RhdGUodGhyZWFkKTsKIAogCS8qIGNvcHkgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAqLwogCWlmIChjb3B5X2Zyb21fdXNlcigmdmZwLT5oYXJkLmZwcmVncywgJnVmcC0+ZnByZWdzLApAQCAtNzAzLDYgKzczNCw4IEBACiAJaWYgKGdldF91c2VyKHZmcC0+aGFyZC5mcHNjciwgJnVmcC0+ZnBzY3IpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAorCXZmcF9mbHVzaF9od3N0YXRlKHRocmVhZCk7CisKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtNzEyLDI2ICs3NDUsMTAgQEAKIAlpbnQgcmV0OwogCiAJc3dpdGNoIChyZXF1ZXN0KSB7Ci0JCS8qCi0JCSAqIHJlYWQgd29yZCBhdCBsb2NhdGlvbiAiYWRkciIgaW4gdGhlIGNoaWxkIHByb2Nlc3MuCi0JCSAqLwotCQljYXNlIFBUUkFDRV9QRUVLVEVYVDoKLQkJY2FzZSBQVFJBQ0VfUEVFS0RBVEE6Ci0JCQlyZXQgPSBnZW5lcmljX3B0cmFjZV9wZWVrZGF0YShjaGlsZCwgYWRkciwgZGF0YSk7Ci0JCQlicmVhazsKLQogCQljYXNlIFBUUkFDRV9QRUVLVVNSOgogCQkJcmV0ID0gcHRyYWNlX3JlYWRfdXNlcihjaGlsZCwgYWRkciwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopZGF0YSk7CiAJCQlicmVhazsKIAotCQkvKgotCQkgKiB3cml0ZSB0aGUgd29yZCBhdCBsb2NhdGlvbiBhZGRyLgotCQkgKi8KLQkJY2FzZSBQVFJBQ0VfUE9LRVRFWFQ6Ci0JCWNhc2UgUFRSQUNFX1BPS0VEQVRBOgotCQkJcmV0ID0gZ2VuZXJpY19wdHJhY2VfcG9rZWRhdGEoY2hpbGQsIGFkZHIsIGRhdGEpOwotCQkJYnJlYWs7Ci0KIAkJY2FzZSBQVFJBQ0VfUE9LRVVTUjoKIAkJCXJldCA9IHB0cmFjZV93cml0ZV91c2VyKGNoaWxkLCBhZGRyLCBkYXRhKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwppbmRleCA2MjFhY2FkLi5jOTFjNzdiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogCiAjaW5jbHVkZSA8YXNtL3VuaWZpZWQuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CkBAIC0xMTgsNyArMTE5LDcgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNwdV9uYW1lOwogc3RhdGljIGNvbnN0IGNoYXIgKm1hY2hpbmVfbmFtZTsKLXN0YXRpYyBjaGFyIF9faW5pdGRhdGEgY29tbWFuZF9saW5lW0NPTU1BTkRfTElORV9TSVpFXTsKK3N0YXRpYyBjaGFyIF9faW5pdGRhdGEgY21kX2xpbmVbQ09NTUFORF9MSU5FX1NJWkVdOwogCiBzdGF0aWMgY2hhciBkZWZhdWx0X2NvbW1hbmRfbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YSA9IENPTkZJR19DTURMSU5FOwogc3RhdGljIHVuaW9uIHsgY2hhciBjWzRdOyB1bnNpZ25lZCBsb25nIGw7IH0gZW5kaWFuX3Rlc3QgX19pbml0ZGF0YSA9IHsgeyAnbCcsICc/JywgJz8nLCAnYicgfSB9OwpAQCAtNDE4LDEwICs0MTksMTEgQEAKICAqIFBpY2sgb3V0IHRoZSBtZW1vcnkgc2l6ZS4gIFdlIGxvb2sgZm9yIG1lbT1zaXplQHN0YXJ0LAogICogd2hlcmUgc3RhcnQgYW5kIHNpemUgYXJlICJzaXplW0trTW1dIgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfbWVtKGNoYXIgKipwKQorc3RhdGljIGludCBfX2luaXQgZWFybHlfbWVtKGNoYXIgKnApCiB7CiAJc3RhdGljIGludCB1c2VybWVtIF9faW5pdGRhdGEgPSAwOwogCXVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RhcnQ7CisJY2hhciAqZW5kcDsKIAogCS8qCiAJICogSWYgdGhlIHVzZXIgc3BlY2lmaWVzIG1lbW9yeSBzaXplLCB3ZQpAQCAtNDM0LDUyICs0MzYsMTUgQEAKIAl9CiAKIAlzdGFydCA9IFBIWVNfT0ZGU0VUOwotCXNpemUgID0gbWVtcGFyc2UoKnAsIHApOwotCWlmICgqKnAgPT0gJ0AnKQotCQlzdGFydCA9IG1lbXBhcnNlKCpwICsgMSwgcCk7CisJc2l6ZSAgPSBtZW1wYXJzZShwLCAmZW5kcCk7CisJaWYgKCplbmRwID09ICdAJykKKwkJc3RhcnQgPSBtZW1wYXJzZShlbmRwICsgMSwgTlVMTCk7CiAKIAlhcm1fYWRkX21lbW9yeShzdGFydCwgc2l6ZSk7CisKKwlyZXR1cm4gMDsKIH0KLV9fZWFybHlfcGFyYW0oIm1lbT0iLCBlYXJseV9tZW0pOwotCi0vKgotICogSW5pdGlhbCBwYXJzaW5nIG9mIHRoZSBjb21tYW5kIGxpbmUuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBwYXJzZV9jbWRsaW5lKGNoYXIgKipjbWRsaW5lX3AsIGNoYXIgKmZyb20pCi17Ci0JY2hhciBjID0gJyAnLCAqdG8gPSBjb21tYW5kX2xpbmU7Ci0JaW50IGxlbiA9IDA7Ci0KLQlmb3IgKDs7KSB7Ci0JCWlmIChjID09ICcgJykgewotCQkJZXh0ZXJuIHN0cnVjdCBlYXJseV9wYXJhbXMgX19lYXJseV9iZWdpbiwgX19lYXJseV9lbmQ7Ci0JCQlzdHJ1Y3QgZWFybHlfcGFyYW1zICpwOwotCi0JCQlmb3IgKHAgPSAmX19lYXJseV9iZWdpbjsgcCA8ICZfX2Vhcmx5X2VuZDsgcCsrKSB7Ci0JCQkJaW50IGFyZ2xlbiA9IHN0cmxlbihwLT5hcmcpOwotCi0JCQkJaWYgKG1lbWNtcChmcm9tLCBwLT5hcmcsIGFyZ2xlbikgPT0gMCkgewotCQkJCQlpZiAodG8gIT0gY29tbWFuZF9saW5lKQotCQkJCQkJdG8gLT0gMTsKLQkJCQkJZnJvbSArPSBhcmdsZW47Ci0JCQkJCXAtPmZuKCZmcm9tKTsKLQotCQkJCQl3aGlsZSAoKmZyb20gIT0gJyAnICYmICpmcm9tICE9ICdcMCcpCi0JCQkJCQlmcm9tKys7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCQljID0gKmZyb20rKzsKLQkJaWYgKCFjKQotCQkJYnJlYWs7Ci0JCWlmIChDT01NQU5EX0xJTkVfU0laRSA8PSArK2xlbikKLQkJCWJyZWFrOwotCQkqdG8rKyA9IGM7Ci0JfQotCSp0byA9ICdcMCc7Ci0JKmNtZGxpbmVfcCA9IGNvbW1hbmRfbGluZTsKLX0KK2Vhcmx5X3BhcmFtKCJtZW0iLCBlYXJseV9tZW0pOwogCiBzdGF0aWMgdm9pZCBfX2luaXQKIHNldHVwX3JhbWRpc2soaW50IGRvbG9hZCwgaW50IHByb21wdCwgaW50IGltYWdlX3N0YXJ0LCB1bnNpZ25lZCBpbnQgcmRfc3opCkBAIC03NDAsOSArNzA1LDE1IEBACiAJaW5pdF9tbS5lbmRfZGF0YSAgID0gKHVuc2lnbmVkIGxvbmcpIF9lZGF0YTsKIAlpbml0X21tLmJyawkgICA9ICh1bnNpZ25lZCBsb25nKSBfZW5kOwogCi0JbWVtY3B5KGJvb3RfY29tbWFuZF9saW5lLCBmcm9tLCBDT01NQU5EX0xJTkVfU0laRSk7Ci0JYm9vdF9jb21tYW5kX2xpbmVbQ09NTUFORF9MSU5FX1NJWkUtMV0gPSAnXDAnOwotCXBhcnNlX2NtZGxpbmUoY21kbGluZV9wLCBmcm9tKTsKKwkvKiBwYXJzZV9lYXJseV9wYXJhbSBuZWVkcyBhIGJvb3RfY29tbWFuZF9saW5lICovCisJc3RybGNweShib290X2NvbW1hbmRfbGluZSwgZnJvbSwgQ09NTUFORF9MSU5FX1NJWkUpOworCisJLyogcG9wdWxhdGUgY21kX2xpbmUgdG9vIGZvciBsYXRlciB1c2UsIHByZXNlcnZpbmcgYm9vdF9jb21tYW5kX2xpbmUgKi8KKwlzdHJsY3B5KGNtZF9saW5lLCBib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpOworCSpjbWRsaW5lX3AgPSBjbWRfbGluZTsKKworCXBhcnNlX2Vhcmx5X3BhcmFtKCk7CisKIAlwYWdpbmdfaW5pdChtZGVzYyk7CiAJcmVxdWVzdF9zdGFuZGFyZF9yZXNvdXJjZXMoJm1lbWluZm8sIG1kZXNjKTsKIApAQCAtNzgzLDkgKzc1NCwyMSBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KIHN1YnN5c19pbml0Y2FsbCh0b3BvbG9neV9pbml0KTsKIAorI2lmZGVmIENPTkZJR19IQVZFX1BST0NfQ1BVCitzdGF0aWMgaW50IF9faW5pdCBwcm9jX2NwdV9pbml0KHZvaWQpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyZXM7CisKKwlyZXMgPSBwcm9jX21rZGlyKCJjcHUiLCBOVUxMKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9Citmc19pbml0Y2FsbChwcm9jX2NwdV9pbml0KTsKKyNlbmRpZgorCiBzdGF0aWMgY29uc3QgY2hhciAqaHdjYXBfc3RyW10gPSB7CiAJInN3cCIsCiAJImhhbGYiLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKaW5kZXggZDM4Y2RmMi4uMjg3NTM4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdGltZS5jCkBAIC0xMCwxMSArMTAsNiBAQAogICoKICAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIEFSTS1zcGVjaWZpYyB0aW1lIGhhbmRsaW5nIGRldGFpbHM6CiAgKiAgcmVhZGluZyB0aGUgUlRDIGF0IGJvb3R1cCwgZXRjLi4uCi0gKgotICogIDE5OTQtMDctMDIgIEFsYW4gTW9kcmEKLSAqICAgICAgICAgICAgICBmaXhlZCBzZXRfcnRjX21tc3MsIGZpeGVkIHRpbWUueWVhciBmb3IgPj0gMjAwMCwgbmV3IG1rdGltZQotICogIDE5OTgtMTItMjAgIFVwZGF0ZWQgTlRQIGNvZGUgYWNjb3JkaW5nIHRvIHRlY2huaWNhbCBtZW1vcmFuZHVtIEphbiAnOTYKLSAqICAgICAgICAgICAgICAiQSBLZXJuZWwgTW9kZWwgZm9yIFByZWNpc2lvbiBUaW1la2VlcGluZyIgYnkgRGF2ZSBNaWxscwogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC03NywxMSArNzIsNiBAQAogRVhQT1JUX1NZTUJPTChwcm9maWxlX3BjKTsKICNlbmRpZgogCi0vKgotICogaG9vayBmb3Igc2V0dGluZyB0aGUgUlRDJ3MgaWRlYSBvZiB0aGUgY3VycmVudCB0aW1lLgotICovCi1pbnQgKCpzZXRfcnRjKSh2b2lkKTsKLQogI2lmbmRlZiBDT05GSUdfR0VORVJJQ19USU1FCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkdW1teV9nZXR0aW1lb2Zmc2V0KHZvaWQpCiB7CkBAIC04OSwxNDAgKzc5LDYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBuZXh0X3J0Y191cGRhdGU7Ci0KLS8qCi0gKiBJZiB3ZSBoYXZlIGFuIGV4dGVybmFsbHkgc3luY2hyb25pemVkIGxpbnV4IGNsb2NrLCB0aGVuIHVwZGF0ZQotICogQ01PUyBjbG9jayBhY2NvcmRpbmdseSBldmVyeSB+MTEgbWludXRlcy4gIHNldF9ydGMoKSBoYXMgdG8gYmUKLSAqIGNhbGxlZCBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byA1MDAgbXMgYmVmb3JlIHRoZSBuZXcgc2Vjb25kCi0gKiBzdGFydHMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkb19zZXRfcnRjKHZvaWQpCi17Ci0JaWYgKCFudHBfc3luY2VkKCkgfHwgc2V0X3J0YyA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAobmV4dF9ydGNfdXBkYXRlICYmCi0JICAgIHRpbWVfYmVmb3JlKCh1bnNpZ25lZCBsb25nKXh0aW1lLnR2X3NlYywgbmV4dF9ydGNfdXBkYXRlKSkKLQkJcmV0dXJuOwotCi0JaWYgKHh0aW1lLnR2X25zZWMgPCA1MDAwMDAwMDAgLSAoKHVuc2lnbmVkKSB0aWNrX25zZWMgPj4gMSkgJiYKLQkgICAgeHRpbWUudHZfbnNlYyA+PSA1MDAwMDAwMDAgKyAoKHVuc2lnbmVkKSB0aWNrX25zZWMgPj4gMSkpCi0JCXJldHVybjsKLQotCWlmIChzZXRfcnRjKCkpCi0JCS8qCi0JCSAqIHJ0YyB1cGRhdGUgZmFpbGVkLiAgVHJ5IGFnYWluIGluIDYwcwotCQkgKi8KLQkJbmV4dF9ydGNfdXBkYXRlID0geHRpbWUudHZfc2VjICsgNjA7Ci0JZWxzZQotCQluZXh0X3J0Y191cGRhdGUgPSB4dGltZS50dl9zZWMgKyA2NjA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfTEVEUwotCi1zdGF0aWMgdm9pZCBkdW1teV9sZWRzX2V2ZW50KGxlZF9ldmVudF90IGV2dCkKLXsKLX0KLQotdm9pZCAoKmxlZHNfZXZlbnQpKGxlZF9ldmVudF90KSA9IGR1bW15X2xlZHNfZXZlbnQ7Ci0KLXN0cnVjdCBsZWRzX2V2dF9uYW1lIHsKLQljb25zdCBjaGFyCW5hbWVbOF07Ci0JaW50CQlvbjsKLQlpbnQJCW9mZjsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbGVkc19ldnRfbmFtZSBldnRfbmFtZXNbXSA9IHsKLQl7ICJhbWJlciIsIGxlZF9hbWJlcl9vbiwgbGVkX2FtYmVyX29mZiB9LAotCXsgImJsdWUiLCAgbGVkX2JsdWVfb24sICBsZWRfYmx1ZV9vZmYgIH0sCi0JeyAiZ3JlZW4iLCBsZWRfZ3JlZW5fb24sIGxlZF9ncmVlbl9vZmYgfSwKLQl7ICJyZWQiLCAgIGxlZF9yZWRfb24sICAgbGVkX3JlZF9vZmYgICB9LAotfTsKLQotc3RhdGljIHNzaXplX3QgbGVkc19zdG9yZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAotCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCi0JCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQotewotCWludCByZXQgPSAtRUlOVkFMLCBsZW4gPSBzdHJjc3BuKGJ1ZiwgIiAiKTsKLQotCWlmIChsZW4gPiAwICYmIGJ1ZltsZW5dID09ICdcMCcpCi0JCWxlbi0tOwotCi0JaWYgKHN0cm5jbXAoYnVmLCAiY2xhaW0iLCBsZW4pID09IDApIHsKLQkJbGVkc19ldmVudChsZWRfY2xhaW0pOwotCQlyZXQgPSBzaXplOwotCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJyZWxlYXNlIiwgbGVuKSA9PSAwKSB7Ci0JCWxlZHNfZXZlbnQobGVkX3JlbGVhc2UpOwotCQlyZXQgPSBzaXplOwotCX0gZWxzZSB7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGV2dF9uYW1lcyk7IGkrKykgewotCQkJaWYgKHN0cmxlbihldnRfbmFtZXNbaV0ubmFtZSkgIT0gbGVuIHx8Ci0JCQkgICAgc3RybmNtcChidWYsIGV2dF9uYW1lc1tpXS5uYW1lLCBsZW4pICE9IDApCi0JCQkJY29udGludWU7Ci0JCQlpZiAoc3RybmNtcChidWYrbGVuLCAiIG9uIiwgMykgPT0gMCkgewotCQkJCWxlZHNfZXZlbnQoZXZ0X25hbWVzW2ldLm9uKTsKLQkJCQlyZXQgPSBzaXplOwotCQkJfSBlbHNlIGlmIChzdHJuY21wKGJ1ZitsZW4sICIgb2ZmIiwgNCkgPT0gMCkgewotCQkJCWxlZHNfZXZlbnQoZXZ0X25hbWVzW2ldLm9mZik7Ci0JCQkJcmV0ID0gc2l6ZTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBTWVNERVZfQVRUUihldmVudCwgMDIwMCwgTlVMTCwgbGVkc19zdG9yZSk7Ci0KLXN0YXRpYyBpbnQgbGVkc19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlsZWRzX2V2ZW50KGxlZF9zdG9wKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsZWRzX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCWxlZHNfZXZlbnQobGVkX3N0YXJ0KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsZWRzX3NodXRkb3duKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCi17Ci0JbGVkc19ldmVudChsZWRfaGFsdGVkKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgbGVkc19zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAibGVkcyIsCi0JLnNodXRkb3duCT0gbGVkc19zaHV0ZG93biwKLQkuc3VzcGVuZAk9IGxlZHNfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGxlZHNfcmVzdW1lLAotfTsKLQotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGxlZHNfZGV2aWNlID0gewotCS5pZAkJPSAwLAotCS5jbHMJCT0gJmxlZHNfc3lzY2xhc3MsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBsZWRzX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCXJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmbGVkc19zeXNjbGFzcyk7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJmxlZHNfZGV2aWNlKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IHN5c2Rldl9jcmVhdGVfZmlsZSgmbGVkc19kZXZpY2UsICZhdHRyX2V2ZW50KTsKLQlyZXR1cm4gcmV0OwotfQotCi1kZXZpY2VfaW5pdGNhbGwobGVkc19pbml0KTsKLQotRVhQT1JUX1NZTUJPTChsZWRzX2V2ZW50KTsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0xFRFNfVElNRVIKIHN0YXRpYyBpbmxpbmUgdm9pZCBkb19sZWRzKHZvaWQpCiB7CkBAIC0yOTUsMzkgKzE1MSw2IEBACiBFWFBPUlRfU1lNQk9MKGRvX3NldHRpbWVvZmRheSk7CiAjZW5kaWYgLyogIUNPTkZJR19HRU5FUklDX1RJTUUgKi8KIAotLyoqCi0gKiBzYXZlX3RpbWVfZGVsdGEgLSBTYXZlIHRoZSBvZmZzZXQgYmV0d2VlbiBzeXN0ZW0gdGltZSBhbmQgUlRDIHRpbWUKLSAqIEBkZWx0YTogcG9pbnRlciB0byB0aW1lc3BlYyB0byBzdG9yZSBkZWx0YQotICogQHJ0YzogcG9pbnRlciB0byB0aW1lc3BlYyBmb3IgY3VycmVudCBSVEMgdGltZQotICoKLSAqIFJldHVybiBhIGRlbHRhIGJldHdlZW4gdGhlIHN5c3RlbSB0aW1lIGFuZCB0aGUgUlRDIHRpbWUsIHN1Y2gKLSAqIHRoYXQgc3lzdGVtIHRpbWUgY2FuIGJlIHJlc3RvcmVkIGxhdGVyIHdpdGggcmVzdG9yZV90aW1lX2RlbHRhKCkKLSAqLwotdm9pZCBzYXZlX3RpbWVfZGVsdGEoc3RydWN0IHRpbWVzcGVjICpkZWx0YSwgc3RydWN0IHRpbWVzcGVjICpydGMpCi17Ci0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoZGVsdGEsCi0JCQkJeHRpbWUudHZfc2VjIC0gcnRjLT50dl9zZWMsCi0JCQkJeHRpbWUudHZfbnNlYyAtIHJ0Yy0+dHZfbnNlYyk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNhdmVfdGltZV9kZWx0YSk7Ci0KLS8qKgotICogcmVzdG9yZV90aW1lX2RlbHRhIC0gUmVzdG9yZSB0aGUgY3VycmVudCBzeXN0ZW0gdGltZQotICogQGRlbHRhOiBkZWx0YSByZXR1cm5lZCBieSBzYXZlX3RpbWVfZGVsdGEoKQotICogQHJ0YzogcG9pbnRlciB0byB0aW1lc3BlYyBmb3IgY3VycmVudCBSVEMgdGltZQotICovCi12b2lkIHJlc3RvcmVfdGltZV9kZWx0YShzdHJ1Y3QgdGltZXNwZWMgKmRlbHRhLCBzdHJ1Y3QgdGltZXNwZWMgKnJ0YykKLXsKLQlzdHJ1Y3QgdGltZXNwZWMgdHM7Ci0KLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmdHMsCi0JCQkJZGVsdGEtPnR2X3NlYyArIHJ0Yy0+dHZfc2VjLAotCQkJCWRlbHRhLT50dl9uc2VjICsgcnRjLT50dl9uc2VjKTsKLQotCWRvX3NldHRpbWVvZmRheSgmdHMpOwotfQotRVhQT1JUX1NZTUJPTChyZXN0b3JlX3RpbWVfZGVsdGEpOwotCiAjaWZuZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTCiAvKgogICogS2VybmVsIHN5c3RlbSB0aW1lciBzdXBwb3J0LgpAQCAtMzM2LDcgKzE1OSw2IEBACiB7CiAJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcpOwogCWRvX2xlZHMoKTsKLQlkb19zZXRfcnRjKCk7CiAJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CiAJZG9fdGltZXIoMSk7CiAJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKaW5kZXggM2YzNjFhNy4uMTYyMWU1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKQEAgLTEyLDE1ICsxMiwxNyBAQAogICogICdsaW51eC9hcmNoL2FybS9saWIvdHJhcHMuUycuICBNb3N0bHkgYSBkZWJ1Z2dpbmcgYWlkLCBidXQgd2lsbCBwcm9iYWJseQogICogIGtpbGwgdGhlIG9mZmVuZGluZyBwcm9jZXNzLgogICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CkBAIC0yMjQsMTQgKzIyNiwyMSBAQAogI2RlZmluZSBTX1NNUCAiIgogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIF9fZGllKGNvbnN0IGNoYXIgKnN0ciwgaW50IGVyciwgc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGludCBfX2RpZShjb25zdCBjaGFyICpzdHIsIGludCBlcnIsIHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IHRocmVhZC0+dGFzazsKIAlzdGF0aWMgaW50IGRpZV9jb3VudGVyOworCWludCByZXQ7CiAKIAlwcmludGsoS0VSTl9FTUVSRyAiSW50ZXJuYWwgZXJyb3I6ICVzOiAleCBbIyVkXSIgU19QUkVFTVBUIFNfU01QICJcbiIsCiAJICAgICAgIHN0ciwgZXJyLCArK2RpZV9jb3VudGVyKTsKIAlzeXNmc19wcmludGtfbGFzdF9maWxlKCk7CisKKwkvKiB0cmFwIGFuZCBlcnJvciBudW1iZXJzIGFyZSBtb3N0bHkgbWVhbmluZ2xlc3Mgb24gQVJNICovCisJcmV0ID0gbm90aWZ5X2RpZShESUVfT09QUywgc3RyLCByZWdzLCBlcnIsIHRzay0+dGhyZWFkLnRyYXBfbm8sIFNJR1NFR1YpOworCWlmIChyZXQgPT0gTk9USUZZX1NUT1ApCisJCXJldHVybiByZXQ7CisKIAlwcmludF9tb2R1bGVzKCk7CiAJX19zaG93X3JlZ3MocmVncyk7CiAJcHJpbnRrKEtFUk5fRU1FUkcgIlByb2Nlc3MgJS4qcyAocGlkOiAlZCwgc3RhY2sgbGltaXQgPSAweCVwKVxuIiwKQEAgLTI0Myw2ICsyNTIsOCBAQAogCQlkdW1wX2JhY2t0cmFjZShyZWdzLCB0c2spOwogCQlkdW1wX2luc3RyKEtFUk5fRU1FUkcsIHJlZ3MpOwogCX0KKworCXJldHVybiByZXQ7CiB9CiAKIERFRklORV9TUElOTE9DSyhkaWVfbG9jayk7CkBAIC0yNTAsMTYgKzI2MSwyMSBAQAogLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgcHJvdGVjdGVkIGFnYWluc3QgcmUtZW50cmFuY3kuCiAgKi8KLU5PUkVUX1RZUEUgdm9pZCBkaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGVycikKK3ZvaWQgZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBlcnIpCiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7CisJaW50IHJldDsKIAogCW9vcHNfZW50ZXIoKTsKIAogCXNwaW5fbG9ja19pcnEoJmRpZV9sb2NrKTsKIAljb25zb2xlX3ZlcmJvc2UoKTsKIAlidXN0X3NwaW5sb2NrcygxKTsKLQlfX2RpZShzdHIsIGVyciwgdGhyZWFkLCByZWdzKTsKKwlyZXQgPSBfX2RpZShzdHIsIGVyciwgdGhyZWFkLCByZWdzKTsKKworCWlmIChyZWdzICYmIGtleGVjX3Nob3VsZF9jcmFzaCh0aHJlYWQtPnRhc2spKQorCQljcmFzaF9rZXhlYyhyZWdzKTsKKwogCWJ1c3Rfc3BpbmxvY2tzKDApOwogCWFkZF90YWludChUQUlOVF9ESUUpOwogCXNwaW5fdW5sb2NrX2lycSgmZGllX2xvY2spOwpAQCAtMjY3LDExICsyODMsMTAgQEAKIAogCWlmIChpbl9pbnRlcnJ1cHQoKSkKIAkJcGFuaWMoIkZhdGFsIGV4Y2VwdGlvbiBpbiBpbnRlcnJ1cHQiKTsKLQogCWlmIChwYW5pY19vbl9vb3BzKQogCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIik7Ci0KLQlkb19leGl0KFNJR1NFR1YpOworCWlmIChyZXQgIT0gTk9USUZZX1NUT1ApCisJCWRvX2V4aXQoU0lHU0VHVik7CiB9CiAKIHZvaWQgYXJtX25vdGlmeV9kaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNDk1N2UxM2UuLmIxNmMwNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC00MywxMCArNDMsNiBAQAogCiAJCUlOSVRfU0VUVVAoMTYpCiAKLQkJX19lYXJseV9iZWdpbiA9IC47Ci0JCQkqKC5lYXJseV9wYXJhbS5pbml0KQotCQlfX2Vhcmx5X2VuZCA9IC47Ci0KIAkJSU5JVF9DQUxMUwogCQlDT05fSU5JVENBTEwKIAkJU0VDVVJJVFlfSU5JVENBTEwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDBiNjM1MWQuLmE5Y2FjMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1hYWVjMjAwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTAsNyArMTAsNyBAQAogICovCiAKICNpbmNsdWRlICJoYXJkd2FyZS5oIgotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAjMHg4MDAwMDAwMAkJQCBwaHlzaWNhbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZwppbmRleCAwYjJlZTk1Li4yZGI0M2E1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZwpAQCAtODksNiArODksMTIgQEAKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCXNlbGVjdCBIQVZFX0ZCX0FUTUVMCiAKK2NvbmZpZyBBUkNIX0FUNTcyRDk0MEhGCisJYm9vbCAiQVQ1NzJEOTQwSEYiCisJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IEdFTkVSSUNfVElNRQorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisKIGNvbmZpZyBBUkNIX0FUOTFYNDAKIAlib29sICJBVDkxeDQwIgogCkBAIC0zOTAsNiArMzk2LDIzIEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitpZiBBUkNIX0FUNTcyRDk0MEhGCisKK2NvbW1lbnQgIkFUNTcyRDk0MEhGIEJvYXJkIFR5cGUiCisKK2NvbmZpZyBNQUNIX0FUNTcyRDk0MEhGRUIKKwlib29sICJBVDU3MkQ5NDBIRi1FSyIKKwlkZXBlbmRzIG9uIEFSQ0hfQVQ1NzJEOTQwSEYKKwlzZWxlY3QgSEFWRV9BVDkxX0RBVEFGTEFTSF9DQVJECisJc2VsZWN0IEhBVkVfTkFORF9BVE1FTF9CVVNXSURUSF8xNgorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDU3MkQ5NDBIRi1FSyBldmFsdWF0aW9uIGtpdC4KKwkgIDxodHRwOi8vd3d3LmF0bWVsLmNvbS9wcm9kdWN0cy9kaW9wc2lzL2RlZmF1bHQuYXNwPgorCitlbmRpZgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogaWYgQVJDSF9BVDkxWDQwCiAKIGNvbW1lbnQgIkFUOTFYNDAgQm9hcmQgVHlwZSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZQppbmRleCA3MDlmYmFkLi4wMjdkZDU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw3IEBACiBvYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOUcyMCkJKz0gYXQ5MXNhbTkyNjAubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MXNhbTkyNjBfZGV2aWNlcy5vICBzYW05X3NtYy5vCiAgb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUpCSs9IGF0OTFzYW05ZzQ1Lm8gYXQ5MXNhbTkyNnhfdGltZS5vIGF0OTFzYW05ZzQ1X2RldmljZXMubyBzYW05X3NtYy5vCiBvYmotJChDT05GSUdfQVJDSF9BVDkxQ0FQOSkJKz0gYXQ5MWNhcDkubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MWNhcDlfZGV2aWNlcy5vIHNhbTlfc21jLm8KK29iai0kKENPTkZJR19BUkNIX0FUNTcyRDk0MEhGKSAgKz0gYXQ1NzJkOTQwaGYubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ1NzJkOTQwaGZfZGV2aWNlcy5vIHNhbTlfc21jLm8KIG9iai0kKENPTkZJR19BUkNIX0FUOTFYNDApCSs9IGF0OTF4NDAubyBhdDkxeDQwX3RpbWUubwogCiAjIEFUOTFSTTkyMDAgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydApAQCAtNjksNiArNzAsOSBAQAogIyBBVDkxQ0FQOSBib2FyZC1zcGVjaWZpYyBzdXBwb3J0CiBvYmotJChDT05GSUdfTUFDSF9BVDkxQ0FQOUFESykJKz0gYm9hcmQtY2FwOWFkay5vCiAKKyMgQVQ1NzJEOTQwSEYgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAorb2JqLSQoQ09ORklHX01BQ0hfQVQ1NzJEOTQwSEZFQikgKz0gYm9hcmQtYXQ1NzJkOTQwaGZfZWsubworCiAjIEFUOTFYNDAgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAogb2JqLSQoQ09ORklHX01BQ0hfQVQ5MUVCMDEpCSs9IGJvYXJkLWViMDEubwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ1NzJkOTQwaGYuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDU3MmQ5NDBoZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjljNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ1NzJkOTQwaGYuYwpAQCAtMCwwICsxLDM3NyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtYXQ5MS9hdDU3MmQ5NDBoZi5jCisgKgorICogQW50b25pbyBSLiBDb3N0YSA8Y29zdGEuYW50b25pb3JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEF0bWVsCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFNBTiBQZW9wbGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2F0NTcyZDk0MGhmLmg+CisjaW5jbHVkZSA8bWFjaC9hdDkxX3BtYy5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MV9yc3RjLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhdDU3MmQ5NDBoZl9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gQVQ5MV9WQV9CQVNFX1NZUywKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFfQkFTRV9TWVMpLAorCQkubGVuZ3RoCQk9IFNaXzE2SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBBVDkxX0lPX1ZJUlRfQkFTRSAtIEFUNTcyRDk0MEhGX1NSQU1fU0laRSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUNTcyRDk0MEhGX1NSQU1fQkFTRSksCisJCS5sZW5ndGgJCT0gQVQ1NzJEOTQwSEZfU1JBTV9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ2xvY2tzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogVGhlIHBlcmlwaGVyYWwgY2xvY2tzLgorICovCitzdGF0aWMgc3RydWN0IGNsayBwaW9BX2NsayA9IHsKKwkubmFtZQkJPSAicGlvQV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfUElPQSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBpb0JfY2xrID0geworCS5uYW1lCQk9ICJwaW9CX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9QSU9CLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgcGlvQ19jbGsgPSB7CisJLm5hbWUJCT0gInBpb0NfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX1BJT0MsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBtYWNiX2NsayA9IHsKKwkubmFtZQkJPSAibWFjYl9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfRU1BQywKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MF9jbGsgPSB7CisJLm5hbWUJCT0gInVzYXJ0MF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfVVMwLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKKwkubmFtZQkJPSAidXNhcnQxX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9VUzEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0geworCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX1VTMiwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY19jbGsgPSB7CisJLm5hbWUJCT0gIm1jaV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfTUNJLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdWRjX2NsayA9IHsKKwkubmFtZQkJPSAidWRjX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9VRFAsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0d2kwX2NsayA9IHsKKwkubmFtZQkJPSAidHdpMF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfVFdJMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNwaTBfY2xrID0geworCS5uYW1lCQk9ICJzcGkwX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9TUEkwLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgc3BpMV9jbGsgPSB7CisJLm5hbWUJCT0gInNwaTFfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX1NQSTEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBzc2MwX2NsayA9IHsKKwkubmFtZQkJPSAic3NjMF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfU1NDMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzYzFfY2xrID0geworCS5uYW1lCQk9ICJzc2MxX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9TU0MxLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgc3NjMl9jbGsgPSB7CisJLm5hbWUJCT0gInNzYzJfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX1NTQzIsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0YzBfY2xrID0geworCS5uYW1lCQk9ICJ0YzBfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX1RDMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRjMV9jbGsgPSB7CisJLm5hbWUJCT0gInRjMV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfVEMxLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdGMyX2NsayA9IHsKKwkubmFtZQkJPSAidGMyX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9UQzIsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBvaGNpX2NsayA9IHsKKwkubmFtZQkJPSAib2hjaV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfVUhQLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgc3NjM19jbGsgPSB7CisJLm5hbWUJCT0gInNzYzNfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX1NTQzMsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0d2kxX2NsayA9IHsKKwkubmFtZQkJPSAidHdpMV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ1NzJEOTQwSEZfSURfVFdJMSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNhbjBfY2xrID0geworCS5uYW1lCQk9ICJjYW4wX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDU3MkQ5NDBIRl9JRF9DQU4wLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgY2FuMV9jbGsgPSB7CisJLm5hbWUJCT0gImNhbjFfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX0NBTjEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBtQWdpY1ZfY2xrID0geworCS5uYW1lCQk9ICJtQWdpY1ZfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUNTcyRDk0MEhGX0lEX01TSVJRMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKKworCitzdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7CisJJnBpb0FfY2xrLAorCSZwaW9CX2NsaywKKwkmcGlvQ19jbGssCisJJm1hY2JfY2xrLAorCSZ1c2FydDBfY2xrLAorCSZ1c2FydDFfY2xrLAorCSZ1c2FydDJfY2xrLAorCSZtbWNfY2xrLAorCSZ1ZGNfY2xrLAorCSZ0d2kwX2NsaywKKwkmc3BpMF9jbGssCisJJnNwaTFfY2xrLAorCSZzc2MwX2NsaywKKwkmc3NjMV9jbGssCisJJnNzYzJfY2xrLAorCSZ0YzBfY2xrLAorCSZ0YzFfY2xrLAorCSZ0YzJfY2xrLAorCSZvaGNpX2NsaywKKwkmc3NjM19jbGssCisJJnR3aTFfY2xrLAorCSZjYW4wX2NsaywKKwkmY2FuMV9jbGssCisJJm1BZ2ljVl9jbGssCisJLyogaXJxMCAuLiBpcnEyICovCit9OworCisvKgorICogVGhlIGZpdmUgcHJvZ3JhbW1hYmxlIGNsb2Nrcy4KKyAqIFlvdSBtdXN0IGNvbmZpZ3VyZSBwaW4gbXVsdGlwbGV4aW5nIHRvIGJyaW5nIHRoZXNlIHNpZ25hbHMgb3V0LgorICovCitzdGF0aWMgc3RydWN0IGNsayBwY2swID0geworCS5uYW1lCQk9ICJwY2swIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0swLAorCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKKwkuaWQJCT0gMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBwY2sxID0geworCS5uYW1lCQk9ICJwY2sxIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0sxLAorCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKKwkuaWQJCT0gMSwKK307CitzdGF0aWMgc3RydWN0IGNsayBwY2syID0geworCS5uYW1lCQk9ICJwY2syIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0syLAorCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKKwkuaWQJCT0gMiwKK307CitzdGF0aWMgc3RydWN0IGNsayBwY2szID0geworCS5uYW1lCQk9ICJwY2szIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0szLAorCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKKwkuaWQJCT0gMywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1BZ2ljVl9tZW1fY2xrID0geworCS5uYW1lCQk9ICJtQWdpY1ZfbWVtX2NsayIsCisJLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLNCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QUk9HUkFNTUFCTEUsCisJLmlkCQk9IDQsCit9OworCisvKiBIQ2xvY2tzICovCitzdGF0aWMgc3RydWN0IGNsayBoY2swID0geworCS5uYW1lCQk9ICJoY2swIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19IQ0swLAorCS50eXBlCQk9IENMS19UWVBFX1NZU1RFTSwKKwkuaWQJCT0gMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBoY2sxID0geworCS5uYW1lCQk9ICJoY2sxIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19IQ0sxLAorCS50eXBlCQk9IENMS19UWVBFX1NZU1RFTSwKKwkuaWQJCT0gMSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDU3MmQ5NDBoZl9yZWdpc3Rlcl9jbG9ja3Modm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBlcmlwaF9jbG9ja3MpOyBpKyspCisJCWNsa19yZWdpc3RlcihwZXJpcGhfY2xvY2tzW2ldKTsKKworCWNsa19yZWdpc3RlcigmcGNrMCk7CisJY2xrX3JlZ2lzdGVyKCZwY2sxKTsKKwljbGtfcmVnaXN0ZXIoJnBjazIpOworCWNsa19yZWdpc3RlcigmcGNrMyk7CisJY2xrX3JlZ2lzdGVyKCZtQWdpY1ZfbWVtX2Nsayk7CisKKwljbGtfcmVnaXN0ZXIoJmhjazApOworCWNsa19yZWdpc3RlcigmaGNrMSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgR1BJTworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBhdDkxX2dwaW9fYmFuayBhdDU3MmQ5NDBoZl9ncGlvW10gPSB7CisJeworCQkuaWQJCT0gQVQ1NzJEOTQwSEZfSURfUElPQSwKKwkJLm9mZnNldAkJPSBBVDkxX1BJT0EsCisJCS5jbG9jawkJPSAmcGlvQV9jbGssCisJfSwgeworCQkuaWQJCT0gQVQ1NzJEOTQwSEZfSURfUElPQiwKKwkJLm9mZnNldAkJPSBBVDkxX1BJT0IsCisJCS5jbG9jawkJPSAmcGlvQl9jbGssCisJfSwgeworCQkuaWQJCT0gQVQ1NzJEOTQwSEZfSURfUElPQywKKwkJLm9mZnNldAkJPSBBVDkxX1BJT0MsCisJCS5jbG9jawkJPSAmcGlvQ19jbGssCisJfQorfTsKKworc3RhdGljIHZvaWQgYXQ1NzJkOTQwaGZfcmVzZXQodm9pZCkKK3sKKwlhdDkxX3N5c193cml0ZShBVDkxX1JTVENfQ1IsIEFUOTFfUlNUQ19LRVkgfCBBVDkxX1JTVENfUFJPQ1JTVCB8IEFUOTFfUlNUQ19QRVJSU1QpOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQVQ1NzJEOTQwSEYgcHJvY2Vzc29yIGluaXRpYWxpemF0aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit2b2lkIF9faW5pdCBhdDU3MmQ5NDBoZl9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jaykKK3sKKwkvKiBNYXAgcGVyaXBoZXJhbHMgKi8KKwlpb3RhYmxlX2luaXQoYXQ1NzJkOTQwaGZfaW9fZGVzYywgQVJSQVlfU0laRShhdDU3MmQ5NDBoZl9pb19kZXNjKSk7CisKKwlhdDkxX2FyY2hfcmVzZXQgPSBhdDU3MmQ5NDBoZl9yZXNldDsKKwlhdDkxX2V4dGVybl9pcnEgPSAoMSA8PCBBVDU3MkQ5NDBIRl9JRF9JUlEwKSB8ICgxIDw8IEFUNTcyRDk0MEhGX0lEX0lSUTEpCisJCQl8ICgxIDw8IEFUNTcyRDk0MEhGX0lEX0lSUTIpOworCisJLyogSW5pdCBjbG9jayBzdWJzeXN0ZW0gKi8KKwlhdDkxX2Nsb2NrX2luaXQobWFpbl9jbG9jayk7CisKKwkvKiBSZWdpc3RlciB0aGUgcHJvY2Vzc29yLXNwZWNpZmljIGNsb2NrcyAqLworCWF0NTcyZDk0MGhmX3JlZ2lzdGVyX2Nsb2NrcygpOworCisJLyogUmVnaXN0ZXIgR1BJTyBzdWJzeXN0ZW0gKi8KKwlhdDkxX2dwaW9faW5pdChhdDU3MmQ5NDBoZl9ncGlvLCAzKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBJbnRlcnJ1cHQgaW5pdGlhbGl6YXRpb24KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBUaGUgZGVmYXVsdCBpbnRlcnJ1cHQgcHJpb3JpdHkgbGV2ZWxzICgwID0gbG93ZXN0LCA3ID0gaGlnaGVzdCkuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXQ1NzJkOTQwaGZfZGVmYXVsdF9pcnFfcHJpb3JpdHlbTlJfQUlDX0lSUVNdIF9faW5pdGRhdGEgPSB7CisJNywJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KKwk3LAkvKiBTeXN0ZW0gUGVyaXBoZXJhbHMgKi8KKwkwLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8KKwkwLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEIgKi8KKwkwLAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEMgKi8KKwkzLAkvKiBFdGhlcm5ldCAqLworCTYsCS8qIFVTQVJUIDAgKi8KKwk2LAkvKiBVU0FSVCAxICovCisJNiwJLyogVVNBUlQgMiAqLworCTAsCS8qIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgKi8KKwk0LAkvKiBVU0IgRGV2aWNlIFBvcnQgKi8KKwkwLAkvKiBUd28tV2lyZSBJbnRlcmZhY2UgMCAqLworCTYsCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovCisJNiwJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDEgKi8KKwk1LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAwICovCisJNSwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMSAqLworCTUsCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDIgKi8KKwkwLAkvKiBUaW1lciBDb3VudGVyIDAgKi8KKwkwLAkvKiBUaW1lciBDb3VudGVyIDEgKi8KKwkwLAkvKiBUaW1lciBDb3VudGVyIDIgKi8KKwkzLAkvKiBVU0IgSG9zdCBwb3J0ICovCisJMywJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMyAqLworCTAsCS8qIFR3by1XaXJlIEludGVyZmFjZSAxICovCisJMCwJLyogQ0FOIENvbnRyb2xsZXIgMCAqLworCTAsCS8qIENBTiBDb250cm9sbGVyIDEgKi8KKwkwLAkvKiBtQWdpY1YgSEFMVCBsaW5lICovCisJMCwJLyogbUFnaWNWIFNJUlEwIGxpbmUgKi8KKwkwLAkvKiBtQWdpY1YgZXhjZXB0aW9uIGxpbmUgKi8KKwkwLAkvKiBtQWdpY1YgZW5kIG9mIERNQSBsaW5lICovCisJMCwJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KKwkwLAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLworCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyICovCit9OworCit2b2lkIF9faW5pdCBhdDU3MmQ5NDBoZl9pbml0X2ludGVycnVwdHModW5zaWduZWQgaW50IHByaW9yaXR5W05SX0FJQ19JUlFTXSkKK3sKKwlpZiAoIXByaW9yaXR5KQorCQlwcmlvcml0eSA9IGF0NTcyZDk0MGhmX2RlZmF1bHRfaXJxX3ByaW9yaXR5OworCisJLyogSW5pdGlhbGl6ZSB0aGUgQUlDIGludGVycnVwdCBjb250cm9sbGVyICovCisJYXQ5MV9haWNfaW5pdChwcmlvcml0eSk7CisKKwkvKiBFbmFibGUgR1BJTyBpbnRlcnJ1cHRzICovCisJYXQ5MV9ncGlvX2lycV9zZXR1cCgpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ1NzJkOTQwaGZfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0NTcyZDk0MGhmX2RldmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmMyMGEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0NTcyZDk0MGhmX2RldmljZXMuYwpAQCAtMCwwICsxLDk3MCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtYXQ5MS9hdDU3MmQ5NDBoZl9kZXZpY2VzLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXRtZWwgQW50b25pbyBSLiBDb3N0YSA8Y29zdGEuYW50b25pb3JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRoaWJhdXQgVkFSRU5FIDx2YXJlbmV0QHBhcmlzYy1saW51eC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRGF2aWQgQnJvd25lbGwKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvYXQ1NzJkOTQwaGYuaD4KKyNpbmNsdWRlIDxtYWNoL2F0NTcyZDk0MGhmX21hdHJpeC5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAic2FtOV9zbWMuaCIKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFVTQiBIb3N0CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQorc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSB1c2JoX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiaF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUNTcyRDk0MEhGX1VIUF9CQVNFLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfVUhQX0JBU0UgKyBTWl8xTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9JRF9VSFAsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9VSFAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl91c2JoX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXQ5MV9vaGNpIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZvaGNpX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdXNiaF9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gdXNiaF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYmhfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCXVzYmhfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ1NzJkOTQwaGZfdXNiaF9kZXZpY2UpOworCit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmgoc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBVU0IgRGV2aWNlIChHYWRnZXQpCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfQVQ5MQorc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIHVkY19kYXRhOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVkY19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUNTcyRDk0MEhGX0JBU0VfVURQLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfQkFTRV9VRFAgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfSURfVURQLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfSURfVURQLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ1NzJkOTQwaGZfdWRjX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXQ5MV91ZGMiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWRjX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSB1ZGNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1ZGNfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpCit7CisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwlpZiAoZGF0YS0+dmJ1c19waW4pIHsKKwkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT52YnVzX3BpbiwgMCk7CisJCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnZidXNfcGluLCAxKTsKKwl9CisKKwkvKiBQdWxsdXAgcGluIGlzIGhhbmRsZWQgaW50ZXJuYWxseSAqLworCisJdWRjX2RhdGEgPSAqZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0NTcyZDk0MGhmX3VkY19kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEV0aGVybmV0CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTUFDQikgfHwgZGVmaW5lZChDT05GSUdfTUFDQl9NT0RVTEUpCitzdGF0aWMgdTY0IGV0aF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSBldGhfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBldGhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9CQVNFX0VNQUMsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9CQVNFX0VNQUMgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfSURfRU1BQywKKwkJLmVuZAk9IEFUNTcyRDk0MEhGX0lEX0VNQUMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl9ldGhfZGV2aWNlID0geworCS5uYW1lCQk9ICJtYWNiIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkuZG1hX21hc2sJCT0gJmV0aF9kbWFtYXNrLAorCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZldGhfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGV0aF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGV0aF9yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCWlmIChkYXRhLT5waHlfaXJxX3BpbikgeworCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnBoeV9pcnFfcGluLCAwKTsKKwkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+cGh5X2lycV9waW4sIDEpOworCX0KKworCS8qIE9ubHkgUk1JSSBpcyBzdXBwb3J0ZWQgKi8KKwlkYXRhLT5pc19ybWlpID0gMTsKKworCS8qIFBpbnMgdXNlZCBmb3IgUk1JSSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTYsIDApOwkvKiBFVFhDS19FUkVGQ0sgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE3LCAwKTsJLyogRVJYRFYgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE4LCAwKTsJLyogRVJYMCAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTksIDApOwkvKiBFUlgxICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMCwgMCk7CS8qIEVSWEVSICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMywgMCk7CS8qIEVUWEVOICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMSwgMCk7CS8qIEVUWDAgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIyLCAwKTsJLyogRVRYMSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTMsIDApOwkvKiBFTURJTyAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTQsIDApOwkvKiBFTURDICovCisKKwlldGhfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ1NzJkOTQwaGZfZXRoX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgTU1DIC8gU0QKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX0FUOTFfTU9EVUxFKQorc3RhdGljIHU2NCBtbWNfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CitzdGF0aWMgc3RydWN0IGF0OTFfbW1jX2RhdGEgbW1jX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1jX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfQkFTRV9NQ0ksCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9CQVNFX01DSSArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9JRF9NQ0ksCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9NQ0ksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl9tbWNfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxX21jaSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmbW1jX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmbW1jX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBtbWNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWNfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tbWMoc2hvcnQgbW1jX2lkLCBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCS8qIGlucHV0L2lycSAqLworCWlmIChkYXRhLT5kZXRfcGluKSB7CisJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+ZGV0X3BpbiwgMSk7CisJCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPmRldF9waW4sIDEpOworCX0KKwlpZiAoZGF0YS0+d3BfcGluKQorCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPndwX3BpbiwgMSk7CisJaWYgKGRhdGEtPnZjY19waW4pCisJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnZjY19waW4sIDApOworCisJLyogQ0xLICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMyMiwgMCk7CisKKwkvKiBDTUQgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzIzLCAxKTsKKworCS8qIERBVDAsIG1heWJlIERBVDEuLkRBVDMgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzI0LCAxKTsKKwlpZiAoZGF0YS0+d2lyZTQpIHsKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMyNSwgMSk7CisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMjYsIDEpOworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzI3LCAxKTsKKwl9CisKKwltbWNfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ1NzJkOTQwaGZfbW1jX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21tYyhzaG9ydCBtbWNfaWQsIHN0cnVjdCBhdDkxX21tY19kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBOQU5EIC8gU21hcnRNZWRpYQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBuYW5kX2RhdGE7CisKKyNkZWZpbmUgTkFORF9CQVNFCUFUOTFfQ0hJUFNFTEVDVF8zCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmFuZF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IE5BTkRfQkFTRSwKKwkJLmVuZAk9IE5BTkRfQkFTRSArIFNaXzI1Nk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl9uYW5kX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfbmFuZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJm5hbmRfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IG5hbmRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShuYW5kX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgY3NhOworCisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwljc2EgPSBhdDkxX3N5c19yZWFkKEFUOTFfTUFUUklYX0VCSUNTQSk7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9NQVRSSVhfRUJJQ1NBLCBjc2EgfCBBVDkxX01BVFJJWF9DUzNBX1NNQ19TTUFSVE1FRElBKTsKKworCS8qIGVuYWJsZSBwaW4gKi8KKwlpZiAoZGF0YS0+ZW5hYmxlX3BpbikKKwkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+ZW5hYmxlX3BpbiwgMSk7CisKKwkvKiByZWFkeS9idXN5IHBpbiAqLworCWlmIChkYXRhLT5yZHlfcGluKQorCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnJkeV9waW4sIDEpOworCisJLyogY2FyZCBkZXRlY3QgcGluICovCisJaWYgKGRhdGEtPmRldF9waW4pCisJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+ZGV0X3BpbiwgMSk7CisKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI4LCAwKTsJCS8qIEFbMjJdICovCisJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyOCwgMCk7CQkvKiBOQU5ET0UgKi8KKwlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI5LCAwKTsJCS8qIE5BTkRXRSAqLworCisJbmFuZF9kYXRhID0gKmRhdGE7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDU3MmQ5NDBoZl9uYW5kX2RldmljZSk7Cit9CisKKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBUV0kgKGkyYykKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBQcmVmZXIgdGhlIEdQSU8gY29kZSBzaW5jZSB0aGUgVFdJIGNvbnRyb2xsZXIgaXNuJ3Qgcm9idXN0CisgKiAoZ2V0cyBvdmVycnVucyBhbmQgdW5kZXJydW5zIHVuZGVyIGxvYWQpIGFuZCBjYW4gb25seSBpc3N1ZQorICogcmVwZWF0ZWQgU1RBUlRzIGluIG9uZSBzY2VuYXJpbyAodGhlIGRyaXZlciBkb2Vzbid0IHlldCBoYW5kbGUgdGhlbSkuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0kyQ19HUElPKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfR1BJT19NT0RVTEUpCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBwZGF0YSA9IHsKKwkuc2RhX3BpbgkJPSBBVDkxX1BJTl9QQzcsCisJLnNkYV9pc19vcGVuX2RyYWluCT0gMSwKKwkuc2NsX3BpbgkJPSBBVDkxX1BJTl9QQzgsCisJLnNjbF9pc19vcGVuX2RyYWluCT0gMSwKKwkudWRlbGF5CQkJPSAyLAkJLyogfjEwMCBrSHogKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0NTcyZDk0MGhmX3R3aV9kZXZpY2UgeworCS5uYW1lCQkJPSAiaTJjLWdwaW8iLAorCS5pZAkJCT0gLTEsCisJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJnBkYXRhLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQoreworCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BDNywgMSk7CQkvKiBUV0QgKFNEQSkgKi8KKwlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQzcsIDEpOworCisJYXQ5MV9zZXRfR1BJT19wZXJpcGgoQVQ5MV9QSU5fUEE4LCAxKTsJCS8qIFRXQ0sgKFNDTCkgKi8KKwlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQzgsIDEpOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGV2aWNlcywgbnJfZGV2aWNlcyk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDU3MmQ5NDBoZl90d2lfZGV2aWNlKTsKK30KKworI2VsaWYgZGVmaW5lZChDT05GSUdfSTJDX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19BVDkxX01PRFVMRSkKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0d2kwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfQkFTRV9UV0kwLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfQkFTRV9UV0kwICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUNTcyRDk0MEhGX0lEX1RXSTAsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9UV0kwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ1NzJkOTQwaGZfdHdpMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfaTJjIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSB0d2kwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpMF9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0d2kxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfQkFTRV9UV0kxLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfQkFTRV9UV0kxICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUNTcyRDk0MEhGX0lEX1RXSTEsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9UV0kxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ1NzJkOTQwaGZfdHdpMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfaTJjIiwKKwkuaWQJCT0gMSwKKwkucmVzb3VyY2UJPSB0d2kxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpMV9yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBucl9kZXZpY2VzKQoreworCS8qIHBpbnMgdXNlZCBmb3IgVFdJMCBpbnRlcmZhY2UgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzcsIDApOwkJLyogVFdEICovCisJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEM3LCAxKTsKKworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDOCwgMCk7CQkvKiBUV0NLICovCisJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEM4LCAxKTsKKworCS8qIHBpbnMgdXNlZCBmb3IgVFdJMSBpbnRlcmZhY2UgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzIwLCAwKTsJCS8qIFRXRCAqLworCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BDMjAsIDEpOworCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMyMSwgMCk7CQkvKiBUV0NLICovCisJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEMyMSwgMSk7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBkZXZpY2VzLCBucl9kZXZpY2VzKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0NTcyZDk0MGhmX3R3aTBfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0NTcyZDk0MGhmX3R3aTFfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFNQSQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMX01PRFVMRSkKK3N0YXRpYyB1NjQgc3BpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaTBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9CQVNFX1NQSTAsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9CQVNFX1NQSTAgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfSURfU1BJMCwKKwkJLmVuZAk9IEFUNTcyRDk0MEhGX0lEX1NQSTAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl9zcGkwX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfc3BpIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJnNwaV9kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJfSwKKwkucmVzb3VyY2UJPSBzcGkwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpMF9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwaTBfc3RhbmRhcmRfY3NbNF0gPSB7IEFUOTFfUElOX1BBMywgQVQ5MV9QSU5fUEE0LCBBVDkxX1BJTl9QQTUsIEFUOTFfUElOX1BBNiB9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaTFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9CQVNFX1NQSTEsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9CQVNFX1NQSTEgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfSURfU1BJMSwKKwkJLmVuZAk9IEFUNTcyRDk0MEhGX0lEX1NQSTEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl9zcGkxX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfc3BpIiwKKwkuaWQJCT0gMSwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJnNwaV9kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJfSwKKwkucmVzb3VyY2UJPSBzcGkxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpMV9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwaTFfc3RhbmRhcmRfY3NbNF0gPSB7IEFUOTFfUElOX1BDMywgQVQ5MV9QSU5fUEM0LCBBVDkxX1BJTl9QQzUsIEFUOTFfUElOX1BDNiB9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBjc19waW47CisJc2hvcnQgZW5hYmxlX3NwaTAgPSAwOworCXNob3J0IGVuYWJsZV9zcGkxID0gMDsKKworCS8qIENob29zZSBTUEkgY2hpcC1zZWxlY3RzICovCisJZm9yIChpID0gMDsgaSA8IG5yX2RldmljZXM7IGkrKykgeworCQlpZiAoZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEpCisJCQljc19waW4gPSAodW5zaWduZWQgbG9uZykgZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGE7CisJCWVsc2UgaWYgKGRldmljZXNbaV0uYnVzX251bSA9PSAwKQorCQkJY3NfcGluID0gc3BpMF9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKKwkJZWxzZQorCQkJY3NfcGluID0gc3BpMV9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKKworCQlpZiAoZGV2aWNlc1tpXS5idXNfbnVtID09IDApCisJCQllbmFibGVfc3BpMCA9IDE7CisJCWVsc2UKKwkJCWVuYWJsZV9zcGkxID0gMTsKKworCQkvKiBlbmFibGUgY2hpcC1zZWxlY3QgcGluICovCisJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGNzX3BpbiwgMSk7CisKKwkJLyogcGFzcyBjaGlwLXNlbGVjdCBwaW4gdG8gZHJpdmVyICovCisJCWRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhID0gKHZvaWQgKikgY3NfcGluOworCX0KKworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGRldmljZXMsIG5yX2RldmljZXMpOworCisJLyogQ29uZmlndXJlIFNQSSBidXMoZXMpICovCisJaWYgKGVuYWJsZV9zcGkwKSB7CisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMCwgMCk7CS8qIFNQSTBfTUlTTyAqLworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEsIDApOwkvKiBTUEkwX01PU0kgKi8KKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyLCAwKTsJLyogU1BJMF9TUENLICovCisKKwkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInNwaTBfY2xrIiwgJmF0NTcyZDk0MGhmX3NwaTBfZGV2aWNlLmRldiwgInNwaV9jbGsiKTsKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDU3MmQ5NDBoZl9zcGkwX2RldmljZSk7CisJfQorCWlmIChlbmFibGVfc3BpMSkgeworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzAsIDApOwkvKiBTUEkxX01JU08gKi8KKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxLCAwKTsJLyogU1BJMV9NT1NJICovCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMiwgMCk7CS8qIFNQSTFfU1BDSyAqLworCisJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJzcGkxX2NsayIsICZhdDU3MmQ5NDBoZl9zcGkxX2RldmljZS5kZXYsICJzcGlfY2xrIik7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ1NzJkOTQwaGZfc3BpMV9kZXZpY2UpOworCX0KK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFRpbWVyL0NvdW50ZXIgYmxvY2tzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgQ09ORklHX0FUTUVMX1RDTElCCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGNiX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfQkFTRV9UQ0IsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9CQVNFX1RDQiArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9JRF9UQzAsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9UQzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9JRF9UQzEsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9UQzEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzNdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9JRF9UQzIsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9UQzIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl90Y2JfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF90Y2IiLAorCS5pZAkJPSAwLAorCS5yZXNvdXJjZQk9IHRjYl9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRjYl9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90Yyh2b2lkKQoreworCS8qIHRoaXMgY2hpcCBoYXMgYSBzZXBhcmF0ZSBjbG9jayBhbmQgaXJxIGZvciBlYWNoIFRDIGNoYW5uZWwgKi8KKwlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidGMwX2NsayIsICZhdDU3MmQ5NDBoZl90Y2JfZGV2aWNlLmRldiwgInQwX2NsayIpOworCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ0YzFfY2xrIiwgJmF0NTcyZDk0MGhmX3RjYl9kZXZpY2UuZGV2LCAidDFfY2xrIik7CisJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInRjMl9jbGsiLCAmYXQ1NzJkOTQwaGZfdGNiX2RldmljZS5kZXYsICJ0Ml9jbGsiKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0NTcyZDk0MGhmX3RjYl9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdGModm9pZCkgeyB9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFJUVAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydHRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBBVDkxX0JBU0VfU1lTICsgQVQ5MV9SVFQsCisJCS5lbmQJPSBBVDkxX0JBU0VfU1lTICsgQVQ5MV9SVFQgKyBTWl8xNiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0NTcyZDk0MGhmX3J0dF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfcnR0IiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSBydHRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShydHRfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnR0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDU3MmQ5NDBoZl9ydHRfZGV2aWNlKTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFdhdGNoZG9nCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0dfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ1NzJkOTQwaGZfd2R0X2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXQ5MV93ZHQiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IDAsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDU3MmQ5NDBoZl93ZHRfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKHZvaWQpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFVBUlQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQVRNRUwpCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRiZ3VfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxX1ZBX0JBU0VfU1lTICsgQVQ5MV9EQkdVLAorCQkuZW5kCT0gQVQ5MV9WQV9CQVNFX1NZUyArIEFUOTFfREJHVSArIFNaXzUxMiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxX0lEX1NZUywKKwkJLmVuZAk9IEFUOTFfSURfU1lTLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgZGJndV9kYXRhID0geworCS51c2VfZG1hX3R4CT0gMCwKKwkudXNlX2RtYV9yeAk9IDAsCQkvKiBEQkdVIG5vdCBjYXBhYmxlIG9mIHJlY2VpdmUgRE1BICovCisJLnJlZ3MJCT0gKHZvaWQgX19pb21lbSAqKShBVDkxX1ZBX0JBU0VfU1lTICsgQVQ5MV9EQkdVKSwKK307CisKK3N0YXRpYyB1NjQgZGJndV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ1NzJkOTQwaGZfZGJndV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJmRiZ3VfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZkYmd1X2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBkYmd1X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGJndV9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV9kYmd1X3BpbnModm9pZCkKK3sKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMxLCAxKTsJCS8qIERUWEQgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzMwLCAwKTsJCS8qIERSWEQgKi8KK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUNTcyRDk0MEhGX0JBU0VfVVMwLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfQkFTRV9VUzAgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfSURfVVMwLAorCQkuZW5kCT0gQVQ1NzJEOTQwSEZfSURfVVMwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDBfZGF0YSA9IHsKKwkudXNlX2RtYV90eAk9IDEsCisJLnVzZV9kbWFfcngJPSAxLAorfTsKKworc3RhdGljIHU2NCB1YXJ0MF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ1NzJkOTQwaGZfdWFydDBfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCisJLmlkCQk9IDEsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0MF9kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQwX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSB1YXJ0MF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQwX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MF9waW5zKHVuc2lnbmVkIHBpbnMpCit7CisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEE4LCAxKTsJCS8qIFRYRDAgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTcsIDApOwkJLyogUlhEMCAqLworCisJaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMCwgMCk7CS8qIFJUUzAgKi8KKwlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTksIDApOwkvKiBDVFMwICovCit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9CQVNFX1VTMSwKKwkJLmVuZAk9IEFUNTcyRDk0MEhGX0JBU0VfVVMxICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUNTcyRDk0MEhGX0lEX1VTMSwKKwkJLmVuZAk9IEFUNTcyRDk0MEhGX0lEX1VTMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9kYXRhIHVhcnQxX2RhdGEgPSB7CisJLnVzZV9kbWFfdHgJPSAxLAorCS51c2VfZG1hX3J4CT0gMSwKK307CisKK3N0YXRpYyB1NjQgdWFydDFfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0NTcyZDk0MGhmX3VhcnQxX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAorCS5pZAkJPSAyLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmdWFydDFfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1YXJ0MV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gdWFydDFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0MV9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDFfcGlucyh1bnNpZ25lZCBwaW5zKQoreworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTAsIDEpOwkJLyogVFhEMSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDOSAsIDApOwkJLyogUlhEMSAqLworCisJaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxMiwgMCk7CS8qIFJUUzEgKi8KKwlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzExLCAwKTsJLyogQ1RTMSAqLworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQyX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfQkFTRV9VUzIsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9CQVNFX1VTMiArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDU3MkQ5NDBIRl9JRF9VUzIsCisJCS5lbmQJPSBBVDU3MkQ5NDBIRl9JRF9VUzIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0Ml9kYXRhID0geworCS51c2VfZG1hX3R4CT0gMSwKKwkudXNlX2RtYV9yeAk9IDEsCit9OworCitzdGF0aWMgdTY0IHVhcnQyX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDU3MmQ5NDBoZl91YXJ0Ml9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKKwkuaWQJCT0gMywKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJnVhcnQyX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDJfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IHVhcnQyX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDJfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnModW5zaWduZWQgcGlucykKK3sKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE1LCAxKTsJCS8qIFRYRDIgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE0LCAwKTsJCS8qIFJYRDIgKi8KKworCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDMTcsIDApOwkvKiBSVFMyICovCisJaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEMxNiwgMCk7CS8qIENUUzIgKi8KK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdGRhdGEgYXQ5MV91YXJ0c1tBVE1FTF9NQVhfVUFSVF07CS8qIHRoZSBVQVJUcyB0byB1c2UgKi8KK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2U7CS8qIHRoZSBzZXJpYWwgY29uc29sZSBkZXZpY2UgKi8KKwordm9pZCBfX2luaXQgYXQ5MV9yZWdpc3Rlcl91YXJ0KHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBwb3J0bnIsIHVuc2lnbmVkIHBpbnMpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCXN3aXRjaCAoaWQpIHsKKwkJY2FzZSAwOgkJLyogREJHVSAqLworCQkJcGRldiA9ICZhdDU3MmQ5NDBoZl9kYmd1X2RldmljZTsKKwkJCWNvbmZpZ3VyZV9kYmd1X3BpbnMoKTsKKwkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJtY2siLCAmcGRldi0+ZGV2LCAidXNhcnQiKTsKKwkJCWJyZWFrOworCQljYXNlIEFUNTcyRDk0MEhGX0lEX1VTMDoKKwkJCXBkZXYgPSAmYXQ1NzJkOTQwaGZfdWFydDBfZGV2aWNlOworCQkJY29uZmlndXJlX3VzYXJ0MF9waW5zKHBpbnMpOworCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInVzYXJ0MF9jbGsiLCAmcGRldi0+ZGV2LCAidXNhcnQiKTsKKwkJCWJyZWFrOworCQljYXNlIEFUNTcyRDk0MEhGX0lEX1VTMToKKwkJCXBkZXYgPSAmYXQ1NzJkOTQwaGZfdWFydDFfZGV2aWNlOworCQkJY29uZmlndXJlX3VzYXJ0MV9waW5zKHBpbnMpOworCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInVzYXJ0MV9jbGsiLCAmcGRldi0+ZGV2LCAidXNhcnQiKTsKKwkJCWJyZWFrOworCQljYXNlIEFUNTcyRDk0MEhGX0lEX1VTMjoKKwkJCXBkZXYgPSAmYXQ1NzJkOTQwaGZfdWFydDJfZGV2aWNlOworCQkJY29uZmlndXJlX3VzYXJ0Ml9waW5zKHBpbnMpOworCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInVzYXJ0Ml9jbGsiLCAmcGRldi0+ZGV2LCAidXNhcnQiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuOworCX0KKwlwZGV2LT5pZCA9IHBvcnRucjsJCS8qIHVwZGF0ZSB0byBtYXBwZWQgSUQgKi8KKworCWlmIChwb3J0bnIgPCBBVE1FTF9NQVhfVUFSVCkKKwkJYXQ5MV91YXJ0c1twb3J0bnJdID0gcGRldjsKK30KKwordm9pZCBfX2luaXQgYXQ5MV9zZXRfc2VyaWFsX2NvbnNvbGUodW5zaWduZWQgcG9ydG5yKQoreworCWlmIChwb3J0bnIgPCBBVE1FTF9NQVhfVUFSVCkKKwkJYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZSA9IGF0OTFfdWFydHNbcG9ydG5yXTsKK30KKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFUTUVMX01BWF9VQVJUOyBpKyspIHsKKwkJaWYgKGF0OTFfdWFydHNbaV0pCisJCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoYXQ5MV91YXJ0c1tpXSk7CisJfQorCisJaWYgKCFhdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlKQorCQlwcmludGsoS0VSTl9JTkZPICJBVDkxOiBObyBkZWZhdWx0IHNlcmlhbCBjb25zb2xlIGRlZmluZWQuXG4iKTsKK30KKworI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKSB7fQordm9pZCBfX2luaXQgYXQ5MV9zZXRfc2VyaWFsX2NvbnNvbGUodW5zaWduZWQgcG9ydG5yKSB7fQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBtQWdpYworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIENPTkZJR19NQUdJQ1YKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbUFnaWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBBVDkxX01BR0lDX1BNX0JBU0UsCisJCS5lbmQgICA9IEFUOTFfTUFHSUNfUE1fQkFTRSArIEFUOTFfTUFHSUNfUE1fU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBBVDkxX01BR0lDX0RNX0lfQkFTRSwKKwkJLmVuZCAgID0gQVQ5MV9NQUdJQ19ETV9JX0JBU0UgKyBBVDkxX01BR0lDX0RNX0lfU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBBVDkxX01BR0lDX0RNX0ZfQkFTRSwKKwkJLmVuZCAgID0gQVQ5MV9NQUdJQ19ETV9GX0JBU0UgKyBBVDkxX01BR0lDX0RNX0ZfU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBBVDkxX01BR0lDX0RNX0RCX0JBU0UsCisJCS5lbmQgICA9IEFUOTFfTUFHSUNfRE1fREJfQkFTRSArIEFUOTFfTUFHSUNfRE1fREJfU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBBVDkxX01BR0lDX1JFR1NfQkFTRSwKKwkJLmVuZCAgID0gQVQ5MV9NQUdJQ19SRUdTX0JBU0UgKyBBVDkxX01BR0lDX1JFR1NfU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBBVDkxX01BR0lDX0VYVFBBR0VfQkFTRSwKKwkJLmVuZCAgID0gQVQ5MV9NQUdJQ19FWFRQQUdFX0JBU0UgKyBBVDkxX01BR0lDX0VYVFBBR0VfU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgID0gQVQ1NzJEOTQwSEZfSURfTVNJUlEwLAorCQkuZW5kICAgID0gQVQ1NzJEOTQwSEZfSURfTVNJUlEwLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCAgPSBBVDU3MkQ5NDBIRl9JRF9NSEFMVCwKKwkJLmVuZCAgICA9IEFUNTcyRDk0MEhGX0lEX01IQUxULAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydCAgPSBBVDU3MkQ5NDBIRl9JRF9NRVhDLAorCQkuZW5kICAgID0gQVQ1NzJEOTQwSEZfSURfTUVYQywKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgID0gQVQ1NzJEOTQwSEZfSURfTUVETUEsCisJCS5lbmQgICAgPSBBVDU3MkQ5NDBIRl9JRF9NRURNQSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtQWdpY19kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gIm1BZ2ljIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG1BZ2ljX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gbUFnaWNfcmVzb3VyY2VzLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21BZ2ljKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtQWdpY19kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9tQWdpYyh2b2lkKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIFRoZXNlIGRldmljZXMgYXJlIGFsd2F5cyBwcmVzZW50IGFuZCBkb24ndCBuZWVkIGFueSBib2FyZC1zcGVjaWZpYworICogc2V0dXAuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKK3sKKwlhdDkxX2FkZF9kZXZpY2VfcnR0KCk7CisJYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKCk7CisJYXQ5MV9hZGRfZGV2aWNlX3RjKCk7CisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwoYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYXQ1NzJkOTQwaGZfZWsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1hdDU3MmQ5NDBoZl9lay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYWZmMjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtYXQ1NzJkOTQwaGZfZWsuYwpAQCAtMCwwICsxLDMyOCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1hdDU3MmQ5NDBoZl9lay5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEF0bWVsIEFudG9uaW8gUi4gQ29zdGEgPGNvc3RhLmFudG9uaW9yQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZHMxMzA1Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgorCisjaW5jbHVkZSAic2FtOV9zbWMuaCIKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKworc3RhdGljIHZvaWQgX19pbml0IGViX21hcF9pbyh2b2lkKQoreworCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxMi41MDAgTUh6IGNyeXN0YWwgKi8KKwlhdDU3MmQ5NDBoZl9pbml0aWFsaXplKDEyMDAwMDAwKTsKKworCS8qIERCR1Ugb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOworCisJLyogVVNBUlQwIG9uIHR0eVMxLiAoUnggJiBUeCBvbmx5KSAqLworCWF0OTFfcmVnaXN0ZXJfdWFydChBVDU3MkQ5NDBIRl9JRF9VUzAsIDEsIDApOworCisJLyogVVNBUlQxIG9uIHR0eVMyLiAoUnggJiBUeCBvbmx5KSAqLworCWF0OTFfcmVnaXN0ZXJfdWFydChBVDU3MkQ5NDBIRl9JRF9VUzEsIDIsIDApOworCisJLyogVVNBUlQyIG9uIHR0eVMzLiAoVHggJiBSeCBvbmx5ICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUNTcyRDk0MEhGX0lEX1VTMiwgMywgMCk7CisKKwkvKiBzZXQgc2VyaWFsIGNvbnNvbGUgdG8gdHR5UzAgKGllLCBEQkdVKSAqLworCWF0OTFfc2V0X3NlcmlhbF9jb25zb2xlKDApOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZWJfaW5pdF9pcnEodm9pZCkKK3sKKwlhdDU3MmQ5NDBoZl9pbml0X2ludGVycnVwdHMoTlVMTCk7Cit9CisKKworLyoKKyAqIFVTQiBIb3N0IFBvcnQKKyAqLworc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGViX3VzYmhfZGF0YSA9IHsKKwkucG9ydHMJCT0gMiwKK307CisKKworLyoKKyAqIFVTQiBEZXZpY2UgUG9ydAorICovCitzdGF0aWMgc3RydWN0IGF0OTFfdWRjX2RhdGEgX19pbml0ZGF0YSBlYl91ZGNfZGF0YSA9IHsKKwkudmJ1c19waW4JPSAwLAkJLyogbm8gVkJVUyBkZXRlY3Rpb24sVURDIGFsd2F5cyBvbiAqLworCS5wdWxsdXBfcGluCT0gMCwJCS8qIHB1bGwtdXAgZHJpdmVuIGJ5IFVEQyAqLworfTsKKworCisvKgorICogTUNJIChTRC9NTUMpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSBfX2luaXRkYXRhIGViX21tY19kYXRhID0geworCS53aXJlNAkJPSAxLAorLyoJLmRldF9waW4JPSAuLi4gbm90IGNvbm5lY3RlZCAqLworLyoJLndwX3BpbgkJPSAuLi4gbm90IGNvbm5lY3RlZCAqLworLyoJLnZjY19waW4JPSAuLi4gbm90IGNvbm5lY3RlZCAqLworfTsKKworCisvKgorICogTUFDQiBFdGhlcm5ldCBkZXZpY2UKKyAqLworc3RhdGljIHN0cnVjdCBhdDkxX2V0aF9kYXRhIF9faW5pdGRhdGEgZWJfZXRoX2RhdGEgPSB7CisJLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEIyNSwKKwkuaXNfcm1paQk9IDEsCit9OworCisvKgorICogTk9SIGZsYXNoCisgKi8KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGViX25vcl9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiUmF3IEVudmlyb25tZW50IiwKKwkJLm9mZnNldAkJPSAwLAorCQkuc2l6ZQkJPSBTWl80TSwKKwkJLm1hc2tfZmxhZ3MJPSAwLAorCX0sCisJeworCQkubmFtZQkJPSAiT1MgRlMiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gMyAqIFNaXzFNLAorCQkubWFza19mbGFncwk9IDAsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJBUFAgRlMiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm1hc2tfZmxhZ3MJPSAwLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBub3JfZmxhc2hfc2V0X3ZwcChzdHJ1Y3QgbWFwX2luZm8qIG1pLCBpbnQgaSkgeworfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbm9yX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDQsCisJLnBhcnRzCQk9IGViX25vcl9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoZWJfbm9yX3BhcnRpdGlvbnMpLAorCS5zZXRfdnBwCT0gbm9yX2ZsYXNoX3NldF92cHAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5vcl9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IEFUOTFfQ0hJUFNFTEVDVF8wLAorCQkuZW5kCT0gQVQ5MV9DSElQU0VMRUNUXzAgKyBTWl8xNk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugbm9yX2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJCQkucGxhdGZvcm1fZGF0YSA9ICZub3JfZmxhc2hfZGF0YSwKKwkJCX0sCisJLnJlc291cmNlCT0gbm9yX2ZsYXNoX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobm9yX2ZsYXNoX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgc3RydWN0IHNhbTlfc21jX2NvbmZpZyBfX2luaXRkYXRhIGViX25vcl9zbWNfY29uZmlnID0geworCS5uY3NfcmVhZF9zZXR1cAkJPSAxLAorCS5ucmRfc2V0dXAJCT0gMSwKKwkubmNzX3dyaXRlX3NldHVwCT0gMSwKKwkubndlX3NldHVwCQk9IDEsCisKKwkubmNzX3JlYWRfcHVsc2UJCT0gNywKKwkubnJkX3B1bHNlCQk9IDcsCisJLm5jc193cml0ZV9wdWxzZQk9IDcsCisJLm53ZV9wdWxzZQkJPSA3LAorCisJLnJlYWRfY3ljbGUJCT0gOSwKKwkud3JpdGVfY3ljbGUJCT0gOSwKKworCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19CQVRfV1JJVEUgfCBBVDkxX1NNQ19EQldfMzIsCisJLnRkZl9jeWNsZXMJCT0gMSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlYl9hZGRfZGV2aWNlX25vcih2b2lkKQoreworCS8qIGNvbmZpZ3VyZSBjaGlwLXNlbGVjdCAwIChOT1IpICovCisJc2FtOV9zbWNfY29uZmlndXJlKDAsICZlYl9ub3Jfc21jX2NvbmZpZyk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZub3JfZmxhc2gpOworfQorCisvKgorICogTkFORCBmbGFzaAorICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gX19pbml0ZGF0YSBlYl9uYW5kX3BhcnRpdGlvbltdID0geworCXsKKwkJLm5hbWUJPSAiUGFydGl0aW9uIDEiLAorCQkub2Zmc2V0CT0gMCwKKwkJLnNpemUJPSBTWl8xNk0sCisJfSwKKwl7CisJCS5uYW1lCT0gIlBhcnRpdGlvbiAyIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX05YVEJMSywKKwkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqIF9faW5pdCBuYW5kX3BhcnRpdGlvbnMoaW50IHNpemUsIGludCAqbnVtX3BhcnRpdGlvbnMpCit7CisJKm51bV9wYXJ0aXRpb25zID0gQVJSQVlfU0laRShlYl9uYW5kX3BhcnRpdGlvbik7CisJcmV0dXJuIGViX25hbmRfcGFydGl0aW9uOworfQorCitzdGF0aWMgc3RydWN0IGF0bWVsX25hbmRfZGF0YSBfX2luaXRkYXRhIGViX25hbmRfZGF0YSA9IHsKKwkuYWxlCQk9IDIyLAorCS5jbGUJCT0gMjEsCisvKgkuZGV0X3Bpbgk9IC4uLiBub3QgY29ubmVjdGVkICovCisvKgkucmR5X3Bpbgk9IEFUOTFfUElOX1BDMTYsICovCisJLmVuYWJsZV9waW4JPSBBVDkxX1BJTl9QQTE1LAorCS5wYXJ0aXRpb25faW5mbwk9IG5hbmRfcGFydGl0aW9ucywKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVDkxX0JVU1dJRFRIXzE2KQorCS5idXNfd2lkdGhfMTYJPSAxLAorI2Vsc2UKKwkuYnVzX3dpZHRoXzE2CT0gMCwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBlYl9uYW5kX3NtY19jb25maWcgPSB7CisJLm5jc19yZWFkX3NldHVwCQk9IDAsCisJLm5yZF9zZXR1cAkJPSAwLAorCS5uY3Nfd3JpdGVfc2V0dXAJPSAxLAorCS5ud2Vfc2V0dXAJCT0gMSwKKworCS5uY3NfcmVhZF9wdWxzZQkJPSAzLAorCS5ucmRfcHVsc2UJCT0gMywKKwkubmNzX3dyaXRlX3B1bHNlCT0gMywKKwkubndlX3B1bHNlCQk9IDMsCisKKwkucmVhZF9jeWNsZQkJPSA1LAorCS53cml0ZV9jeWNsZQkJPSA1LAorCisJLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSwKKwkudGRmX2N5Y2xlcwkJPSAxMiwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlYl9hZGRfZGV2aWNlX25hbmQodm9pZCkKK3sKKwkvKiBzZXR1cCBidXMtd2lkdGggKDggb3IgMTYpICovCisJaWYgKGViX25hbmRfZGF0YS5idXNfd2lkdGhfMTYpCisJCWViX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV18xNjsKKwllbHNlCisJCWViX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV184OworCisJLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDMgKE5BTkQpICovCisJc2FtOV9zbWNfY29uZmlndXJlKDMsICZlYl9uYW5kX3NtY19jb25maWcpOworCisJYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmViX25hbmRfZGF0YSk7Cit9CisKKworLyoKKyAqIFNQSSBkZXZpY2VzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ1NzJEOTQwSEZfSURfSVJRMSwKKwkJLmVuZAk9IEFUNTcyRDk0MEhGX0lEX0lSUTEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGRzMTMwNV9wbGF0Zm9ybV9kYXRhIGRzMTMwNl9kYXRhID0geworCS5pc19kczEzMDYJPSB0cnVlLAorCS5lbl8xaHoJCT0gZmFsc2UsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGViX3NwaV9kZXZpY2VzW10gPSB7CisJewkvKiBSVEMgRGFsbGFzIERTMTMwNiAqLworCQkubW9kYWxpYXMJPSAicnRjLWRzMTMwNSIsCisJCS5jaGlwX3NlbGVjdAk9IDMsCisJCS5tb2RlCQk9IFNQSV9DU19ISUdIIHwgU1BJX0NQT0wgfCBTUElfQ1BIQSwKKwkJLm1heF9zcGVlZF9oegk9IDUwMDAwMCwKKwkJLmJ1c19udW0JPSAwLAorCQkuaXJxCQk9IEFUNTcyRDk0MEhGX0lEX0lSUTEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gKHZvaWQgKikgJmRzMTMwNl9kYXRhLAorCX0sCisjaWYgZGVmaW5lZChDT05GSUdfTVREX0FUOTFfREFUQUZMQVNIX0NBUkQpCisJewkvKiBEYXRhZmxhc2ggY2FyZCAqLworCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCisJCS5jaGlwX3NlbGVjdAk9IDAsCisJCS5tYXhfc3BlZWRfaHoJPSAxNSAqIDEwMDAgKiAxMDAwLAorCQkuYnVzX251bQk9IDAsCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGViX2JvYXJkX2luaXQodm9pZCkKK3sKKwkvKiBTZXJpYWwgKi8KKwlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7CisJLyogVVNCIEhvc3QgKi8KKwlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmZWJfdXNiaF9kYXRhKTsKKwkvKiBVU0IgRGV2aWNlICovCisJYXQ5MV9hZGRfZGV2aWNlX3VkYygmZWJfdWRjX2RhdGEpOworCS8qIEkyQyAqLworCWF0OTFfYWRkX2RldmljZV9pMmMoTlVMTCwgMCk7CisJLyogTk9SICovCisJZWJfYWRkX2RldmljZV9ub3IoKTsKKwkvKiBOQU5EICovCisJZWJfYWRkX2RldmljZV9uYW5kKCk7CisJLyogU1BJICovCisJYXQ5MV9hZGRfZGV2aWNlX3NwaShlYl9zcGlfZGV2aWNlcywgQVJSQVlfU0laRShlYl9zcGlfZGV2aWNlcykpOworCS8qIE1NQyAqLworCWF0OTFfYWRkX2RldmljZV9tbWMoMCwgJmViX21tY19kYXRhKTsKKwkvKiBFdGhlcm5ldCAqLworCWF0OTFfYWRkX2RldmljZV9ldGgoJmViX2V0aF9kYXRhKTsKKwkvKiBtQWdpYyAqLworCWF0OTFfYWRkX2RldmljZV9tQWdpYygpOworfQorCitNQUNISU5FX1NUQVJUKEFUNTcyRDk0MEhGRUIsICJBdG1lbCBBVDkxRDk0MEhGLUVCIikKKwkvKiBNYWludGFpbmVyOiBBdG1lbCA8Y29zdGEuYW50b25pb3JAZ21haWwuY29tPiAqLworCS5waHlzX2lvCT0gQVQ5MV9CQVNFX1NZUywKKwkuaW9fcGdfb2Zmc3QJPSAoQVQ5MV9WQV9CQVNFX1NZUyA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gQVQ5MV9TRFJBTV9CQVNFICsgMHgxMDAsCisJLnRpbWVyCQk9ICZhdDkxc2FtOTI2eF90aW1lciwKKwkubWFwX2lvCQk9IGViX21hcF9pbywKKwkuaW5pdF9pcnEJPSBlYl9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gZWJfYm9hcmRfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5jCmluZGV4IGMwNDJkY2YuLjdmN2RhNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KIAogI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAKIC8qCkBAIC02MjgsNyArNjI5LDcgQEAKIAkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfU0NFUiwgQVQ5MVJNOTIwMF9QTUNfTUNLVURQKTsKIAl9IGVsc2UgaWYgKGNwdV9pc19hdDkxc2FtOTI2MCgpIHx8IGNwdV9pc19hdDkxc2FtOTI2MSgpIHx8CiAJCSAgIGNwdV9pc19hdDkxc2FtOTI2MygpIHx8IGNwdV9pc19hdDkxc2FtOWcyMCgpIHx8Ci0JCSAgIGNwdV9pc19hdDkxc2FtOWcxMCgpKSB7CisJCSAgIGNwdV9pc19hdDkxc2FtOWcxMCgpIHx8IGNwdV9pc19hdDU3MmQ5NDBoZigpKSB7CiAJCXVocGNrLnBtY19tYXNrID0gQVQ5MVNBTTkyNnhfUE1DX1VIUDsKIAkJdWRwY2sucG1jX21hc2sgPSBBVDkxU0FNOTI2eF9QTUNfVURQOwogCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFjYXA5KCkpIHsKQEAgLTcxMSwxMiArNzEyLDEzIEBACiAJLyoKIAkgKiBVU0IgSFMgY2xvY2sgaW5pdAogCSAqLwotCWlmIChjcHVfaGFzX3V0bWkoKSkKKwlpZiAoY3B1X2hhc191dG1pKCkpIHsKIAkJLyoKIAkJICogbXVsdGlwbGllciBpcyBoYXJkLXdpcmVkIHRvIDQwCiAJCSAqIChvYnRhaW4gdGhlIFVTQiBIaWdoIFNwZWVkIDQ4MCBNSHogd2hlbiBpbnB1dCBpcyAxMiBNSHopCiAJCSAqLwogCQl1dG1pX2Nsay5yYXRlX2h6ID0gNDAgKiB1dG1pX2Nsay5wYXJlbnQtPnJhdGVfaHo7CisJfQogCiAJLyoKIAkgKiBVU0IgRlMgY2xvY2sgaW5pdApAQCAtNzQ2LDcgKzc0OCw3IEBACiAJCW1jay5yYXRlX2h6ID0gKG1ja3IgJiBBVDkxX1BNQ19NRElWKSA9PSBBVDkxU0FNOV9QTUNfTURJVl8zID8KIAkJCWZyZXEgLyAzIDogZnJlcSAvICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDgpKTsJLyogbWRpdiAqLwogCX0gZWxzZSB7Ci0JCW1jay5yYXRlX2h6ID0gZnJlcSAvICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDgpKTsgICAgICAvKiBtZGl2ICovCisJCW1jay5yYXRlX2h6ID0gZnJlcSAvICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDgpKTsJCS8qIG1kaXYgKi8KIAl9CiAKIAkvKiBSZWdpc3RlciB0aGUgUE1DJ3Mgc3RhbmRhcmQgY2xvY2tzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCmluZGV4IDFiYTNiOTUuLjZjZjRiNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9jbG9jay5oCkBAIC0yMiw3ICsyMiw3IEBACiAJc3RydWN0IGNsawkqcGFyZW50OwogCXUzMgkJcG1jX21hc2s7CiAJdm9pZAkJKCptb2RlKShzdHJ1Y3QgY2xrICosIGludCk7Ci0JdW5zaWduZWQJaWQ6MjsJCS8qIFBDSzAuLjMsIG9yIDMyay9tYWluL2EvYiAqLworCXVuc2lnbmVkCWlkOjM7CQkvKiBQQ0swLi40LCBvciAzMmsvbWFpbi9hL2IgKi8KIAl1bnNpZ25lZAl0eXBlOwkJLyogY2xvY2sgdHlwZSAqLwogCXUxNgkJdXNlcnM7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2dlbmVyaWMuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmgKaW5kZXggODhlNDEzYi4uNjVjM2RjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2dlbmVyaWMuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvZ2VuZXJpYy5oCkBAIC0xNyw2ICsxNyw3IEBACiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXNhbTlnNDVfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spOwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTF4NDBfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spOwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFjYXA5X2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKK2V4dGVybiB2b2lkIF9faW5pdCBhdDU3MmQ5NDBoZl9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jayk7CiAKICAvKiBJbnRlcnJ1cHRzICovCiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXJtOTIwMF9pbml0X2ludGVycnVwdHModW5zaWduZWQgaW50IHByaW9yaXR5W10pOwpAQCAtMjcsNiArMjgsNyBAQAogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFzYW05ZzQ1X2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXg0MF9pbml0X2ludGVycnVwdHModW5zaWduZWQgaW50IHByaW9yaXR5W10pOwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFjYXA5X2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7CitleHRlcm4gdm9pZCBfX2luaXQgYXQ1NzJkOTQwaGZfaW5pdF9pbnRlcnJ1cHRzKHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FpY19pbml0KHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKIAogIC8qIFRpbWVyICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0NTcyZDk0MGhmLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0NTcyZDk0MGhmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5YjBhZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ1NzJkOTQwaGYuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIGluY2x1ZGUvbWFjaC9hdDU3MmQ5NDBoZi5oCisgKgorICogQW50b25pbyBSLiBDb3N0YSA8Y29zdGEuYW50b25pb3JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEF0bWVsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIEFUNTcyRDk0MEhGX0gKKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSAorCisvKgorICogUGVyaXBoZXJhbCBpZGVudGlmaWVycy9pbnRlcnJ1cHRzLgorICovCisjZGVmaW5lIEFUOTFfSURfRklRCQkwCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpICovCisjZGVmaW5lIEFUOTFfSURfU1lTCQkxCS8qIFN5c3RlbSBQZXJpcGhlcmFscyAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9QSU9BCTIJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX1BJT0IJMwkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEIgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfUElPQwk0CS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQyAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9FTUFDCTUJLyogTUFDQiBldGhlcm5ldCBjb250cm9sbGVyICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX1VTMAk2CS8qIFVTQVJUIDAgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfVVMxCTcJLyogVVNBUlQgMSAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9VUzIJOAkvKiBVU0FSVCAyICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX01DSQk5CS8qIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfVURQCTEwCS8qIFVTQiBEZXZpY2UgUG9ydCAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9UV0kwCTExCS8qIFR3by1XaXJlIEludGVyZmFjZSAwICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX1NQSTAJMTIJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDAgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfU1BJMQkxMwkvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgMSAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9TU0MwCTE0CS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDAgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfU1NDMQkxNQkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAxICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX1NTQzIJMTYJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMiAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9UQzAJMTcJLyogVGltZXIgQ291bnRlciAwICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX1RDMQkxOAkvKiBUaW1lciBDb3VudGVyIDEgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfVEMyCTE5CS8qIFRpbWVyIENvdW50ZXIgMiAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9VSFAJMjAJLyogVVNCIEhvc3QgcG9ydCAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9TU0MzCTIxCS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDMgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfVFdJMQkyMgkvKiBUd28tV2lyZSBJbnRlcmZhY2UgMSAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9DQU4wCTIzCS8qIENBTiBDb250cm9sbGVyIDAgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfQ0FOMQkyNAkvKiBDQU4gQ29udHJvbGxlciAxICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX01IQUxUCTI1CS8qIG1BZ2ljViBIQUxUIGxpbmUgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfTVNJUlEwCTI2CS8qIG1BZ2ljViBTSVJRMCBsaW5lICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX01FWEMJMjcJLyogbUFnaWNWIGV4Y2VwdGlvbiBsaW5lICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX01FRE1BCTI4CS8qIG1BZ2ljViBlbmQgb2YgRE1BIGxpbmUgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfSURfSVJRMAkyOQkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgU291cmNlIChJUlEwKSAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9JRF9JUlExCTMwCS8qIEV4dGVybmFsIEludGVycnVwdCBTb3VyY2UgKElSUTEpICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0lEX0lSUTIJMzEJLyogRXh0ZXJuYWwgSW50ZXJydXB0IFNvdXJjZSAoSVJRMikgKi8KKworCisvKgorICogVXNlciBQZXJpcGhlcmFsIHBoeXNpY2FsIGJhc2UgYWRkcmVzc2VzLgorICovCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfVENCCTB4ZmZmYTAwMDAKKyNkZWZpbmUgQVQ1NzJEOTQwSEZfQkFTRV9UQzAJMHhmZmZhMDAwMAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX1RDMQkweGZmZmEwMDQwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfVEMyCTB4ZmZmYTAwODAKKyNkZWZpbmUgQVQ1NzJEOTQwSEZfQkFTRV9VRFAJMHhmZmZhNDAwMAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX01DSQkweGZmZmE4MDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfVFdJMAkweGZmZmFjMDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfVVMwCTB4ZmZmYjAwMDAKKyNkZWZpbmUgQVQ1NzJEOTQwSEZfQkFTRV9VUzEJMHhmZmZiNDAwMAorI2RlZmluZSBBVDU3MkQ5NDBIRl9CQVNFX1VTMgkweGZmZmI4MDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfU1NDMAkweGZmZmJjMDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfU1NDMQkweGZmZmMwMDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfU1NDMgkweGZmZmM0MDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfU1BJMAkweGZmZmM4MDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfU1BJMQkweGZmZmNjMDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfU1NDMwkweGZmZmQwMDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfVFdJMQkweGZmZmQ0MDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfRU1BQwkweGZmZmQ4MDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfQ0FOMAkweGZmZmRjMDAwCisjZGVmaW5lIEFUNTcyRDk0MEhGX0JBU0VfQ0FOMQkweGZmZmUwMDAwCisjZGVmaW5lIEFUOTFfQkFTRV9TWVMJCTB4ZmZmZmVhMDAKKworCisvKgorICogU3lzdGVtIFBlcmlwaGVyYWxzIChvZmZzZXQgZnJvbSBBVDkxX0JBU0VfU1lTKQorICovCisjZGVmaW5lIEFUOTFfU0RSQU1DCSgweGZmZmZlYTAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9TTUMJKDB4ZmZmZmVjMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX01BVFJJWAkoMHhmZmZmZWUwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfQUlDCSgweGZmZmZmMDAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9EQkdVCSgweGZmZmZmMjAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QSU9BCSgweGZmZmZmNDAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QSU9CCSgweGZmZmZmNjAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QSU9DCSgweGZmZmZmODAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QTUMJKDB4ZmZmZmZjMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1JTVEMJKDB4ZmZmZmZkMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1JUVAkoMHhmZmZmZmQyMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfUElUCSgweGZmZmZmZDMwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9XRFQJKDB4ZmZmZmZkNDAgLSBBVDkxX0JBU0VfU1lTKQorCisjZGVmaW5lIEFUOTFfVVNBUlQwCUFUNTcyRDk0MEhGX0lEX1VTMAorI2RlZmluZSBBVDkxX1VTQVJUMQlBVDU3MkQ5NDBIRl9JRF9VUzEKKyNkZWZpbmUgQVQ5MV9VU0FSVDIJQVQ1NzJEOTQwSEZfSURfVVMyCisKKworLyoKKyAqIEludGVybmFsIE1lbW9yeS4KKyAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9TUkFNX0JBU0UJMHgwMDMwMDAwMAkvKiBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBBVDU3MkQ5NDBIRl9TUkFNX1NJWkUJKDQ4ICogU1pfMUspCS8qIEludGVybmFsIFNSQU0gc2l6ZSAoNDhLYikgKi8KKworI2RlZmluZSBBVDU3MkQ5NDBIRl9ST01fQkFTRQkweDAwNDAwMDAwCS8qIEludGVybmFsIFJPTSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQVQ1NzJEOTQwSEZfUk9NX1NJWkUJU1pfMzJLCQkvKiBJbnRlcm5hbCBST00gc2l6ZSAoMzJLYikgKi8KKworI2RlZmluZSBBVDU3MkQ5NDBIRl9VSFBfQkFTRQkweDAwNTAwMDAwCS8qIFVTQiBIb3N0IGNvbnRyb2xsZXIgKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ1NzJkOTQwaGZfbWF0cml4LmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0NTcyZDk0MGhmX21hdHJpeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NzUxZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0NTcyZDk0MGhmX21hdHJpeC5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogaW5jbHVkZS9tYWNoLy9hdDU3MmQ5NDBoZl9tYXRyaXguaAorICoKKyAqIEFudG9uaW8gUi4gQ29zdGEgPGNvc3RhLmFudG9uaW9yQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBdG1lbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgQVQ1NzJEOTQwSEZfTUFUUklYX0gKKyNkZWZpbmUgQVQ1NzJEOTQwSEZfTUFUUklYX0gKKworI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHMAkoQVQ5MV9NQVRSSVggKyAweDAwKQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkcxCShBVDkxX01BVFJJWCArIDB4MDQpCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzIJKEFUOTFfTUFUUklYICsgMHgwOCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLworI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHMwkoQVQ5MV9NQVRSSVggKyAweDBDKQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAzICovCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkc0CShBVDkxX01BVFJJWCArIDB4MTApCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDQgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzUJKEFUOTFfTUFUUklYICsgMHgxNCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNSAqLworCisjZGVmaW5lCQlBVDkxX01BVFJJWF9VTEJUCSg3IDw8IDApCS8qIFVuZGVmaW5lZCBMZW5ndGggQnVyc3QgVHlwZSAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX1VMQlRfSU5GSU5JVEUJKDAgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX1NJTkdMRQkJKDEgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX0ZPVVIJCSgyIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVUxCVF9FSUdIVAkJKDMgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX1NJWFRFRU4JKDQgPDwgMCkKKworI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHMAkoQVQ5MV9NQVRSSVggKyAweDQwKQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzEJKEFUOTFfTUFUUklYICsgMHg0NCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NDRkcyCShBVDkxX01BVFJJWCArIDB4NDgpCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHMwkoQVQ5MV9NQVRSSVggKyAweDRDKQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzQJKEFUOTFfTUFUUklYICsgMHg1MCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA0ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9TTE9UX0NZQ0xFCQkoMHhmZiA8PCAwKQkvKiBNYXhpbXVtIE51bWJlciBvZiBBbGxvd2VkIEN5Y2xlcyBmb3IgYSBCdXJzdCAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFCSgzICAgIDw8IDE2KQkvKiBEZWZhdWx0IE1hc3RlciBUeXBlICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFX05PTkUJKDAgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFX0xBU1QJKDEgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFX0ZJWEVECSgyIDw8IDE2KQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfRklYRURfREVGTVNUUgkoMHg3ICA8PCAxOCkJLyogRml4ZWQgSW5kZXggb2YgRGVmYXVsdCBNYXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX0FSQlQJCSgzICAgIDw8IDI0KQkvKiBBcmJpdHJhdGlvbiBUeXBlICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQVJCVF9ST1VORF9ST0JJTgkoMCA8PCAyNCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9BUkJUX0ZJWEVEX1BSSU9SSVRZCSgxIDw8IDI0KQorCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQVMwCShBVDkxX01BVFJJWCArIDB4ODApCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDAgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzEJKEFUOTFfTUFUUklYICsgMHg4OCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgMSAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkFTMgkoQVQ5MV9NQVRSSVggKyAweDkwKQkvKiBQcmlvcml0eSBSZWdpc3RlciBBIGZvciBTbGF2ZSAyICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQVMzCShBVDkxX01BVFJJWCArIDB4OTgpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDMgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzQJKEFUOTFfTUFUUklYICsgMHhBMCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgNCAqLworCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NMFBSCQkoMyA8PCAwKQkvKiBNYXN0ZXIgMCBQcmlvcml0eSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTFQUgkJKDMgPDwgNCkJLyogTWFzdGVyIDEgUHJpb3JpdHkgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX00yUFIJCSgzIDw8IDgpCS8qIE1hc3RlciAyIFByaW9yaXR5ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NM1BSCQkoMyA8PCAxMikJLyogTWFzdGVyIDMgUHJpb3JpdHkgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX000UFIJCSgzIDw8IDE2KQkvKiBNYXN0ZXIgNCBQcmlvcml0eSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTVQUgkJKDMgPDwgMjApCS8qIE1hc3RlciA1IFByaW9yaXR5ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NNlBSCQkoMyA8PCAyNCkJLyogTWFzdGVyIDYgUHJpb3JpdHkgKi8KKworI2RlZmluZSBBVDkxX01BVFJJWF9NUkNSCShBVDkxX01BVFJJWCArIDB4MTAwKQkvKiBNYXN0ZXIgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCMAkJKDEgPDwgMCkJLyogUmVtYXAgQ29tbWFuZCBmb3IgQUhCIE1hc3RlciAwIChBUk05MjZFSi1TIEluc3RydWN0aW9uIE1hc3RlcikgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjEJCSgxIDw8IDEpCS8qIFJlbWFwIENvbW1hbmQgZm9yIEFIQiBNYXN0ZXIgMSAoQVJNOTI2RUotUyBEYXRhIE1hc3RlcikgKi8KKworI2RlZmluZSBBVDkxX01BVFJJWF9TRlIwCShBVDkxX01BVFJJWCArIDB4MTEwKQkvKiBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSMQkoQVQ5MV9NQVRSSVggKyAweDExNCkJLyogU3BlY2lhbCBGdW5jdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NGUjIJKEFUOTFfTUFUUklYICsgMHgxMTgpCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgMiAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TRlIzCShBVDkxX01BVFJJWCArIDB4MTFDKQkvKiBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSNAkoQVQ5MV9NQVRSSVggKyAweDEyMCkJLyogU3BlY2lhbCBGdW5jdGlvbiBSZWdpc3RlciA0ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NGUjUJKEFUOTFfTUFUUklYICsgMHgxMjQpCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgNSAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TRlI2CShBVDkxX01BVFJJWCArIDB4MTI4KQkvKiBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVyIDYgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSNwkoQVQ5MV9NQVRSSVggKyAweDEyQykJLyogU3BlY2lhbCBGdW5jdGlvbiBSZWdpc3RlciA3ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NGUjgJKEFUOTFfTUFUUklYICsgMHgxMzApCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgOCAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TRlI5CShBVDkxX01BVFJJWCArIDB4MTM0KQkvKiBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVyIDkgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSMTAJKEFUOTFfTUFUUklYICsgMHgxMzgpCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgMTAgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSMTEJKEFUOTFfTUFUUklYICsgMHgxM0MpCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgMTEgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSMTIJKEFUOTFfTUFUUklYICsgMHgxNDApCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgMTIgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSMTMJKEFUOTFfTUFUUklYICsgMHgxNDQpCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgMTMgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSMTQJKEFUOTFfTUFUUklYICsgMHgxNDgpCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgMTQgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0ZSMTUJKEFUOTFfTUFUUklYICsgMHgxNEMpCS8qIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXIgMTUgKi8KKworCisvKgorICogVGhlIGZvbGxvd2luZyByZWdpc3RlcnMgLyBiaXRzIGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgRGF0YXNoZWV0IChSZXZpc2lvbiBBKQorICovCisKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfVENSCQkoQVQ5MV9NQVRSSVggKyAweDEwMCkJLyogVENNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX0lUQ01fU0laRQkJKDB4ZiA8PCAwKQkvKiBTaXplIG9mIElUQ00gZW5hYmxlZCBtZW1vcnkgYmxvY2sgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9JVENNXzAJCSgwIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfSVRDTV8xNgkJKDUgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9JVENNXzMyCQkoNiA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0lUQ01fNjQJCSg3IDw8IDApCisjZGVmaW5lCQlBVDkxX01BVFJJWF9EVENNX1NJWkUJCSgweGYgPDwgNCkJLyogU2l6ZSBvZiBEVENNIGVuYWJsZWQgbWVtb3J5IGJsb2NrICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRFRDTV8wCQkoMCA8PCA0KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0RUQ01fMTYJCSg1IDw8IDQpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRFRDTV8zMgkJKDYgPDwgNCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9EVENNXzY0CQkoNyA8PCA0KQorCisjZGVmaW5lIEFUOTFfTUFUUklYX0VCSUNTQQkoQVQ5MV9NQVRSSVggKyAweDExQykJLyogRUJJIENoaXAgU2VsZWN0IEFzc2lnbm1lbnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX0NTMUEJCSgxIDw8IDEpCS8qIENoaXAgU2VsZWN0IDEgQXNzaWdubWVudCAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX0NTMUFfU01DCQkoMCA8PCAxKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0NTMUFfU0RSQU1DCQkoMSA8PCAxKQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfQ1MzQQkJKDEgPDwgMykJLyogQ2hpcCBTZWxlY3QgMyBBc3NpZ25tZW50ICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1MzQV9TTUMJCSgwIDw8IDMpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1MzQV9TTUNfU01BUlRNRURJQQkoMSA8PCAzKQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfQ1M0QQkJKDEgPDwgNCkJLyogQ2hpcCBTZWxlY3QgNCBBc3NpZ25tZW50ICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1M0QV9TTUMJCSgwIDw8IDQpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfQ1M0QV9TTUNfQ0YxCSgxIDw8IDQpCisjZGVmaW5lCQlBVDkxX01BVFJJWF9DUzVBCQkoMSA8PCA1KQkvKiBDaGlwIFNlbGVjdCA1IEFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9DUzVBX1NNQwkJKDAgPDwgNSkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9DUzVBX1NNQ19DRjIJKDEgPDwgNSkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0RCUFVDCQkoMSA8PCA4KQkvKiBEYXRhIEJ1cyBQdWxsLXVwIENvbmZpZ3VyYXRpb24gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFfcG1jLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFfcG1jLmgKaW5kZXggNjQ1ODllYS4uZTQ2ZjkzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX3BtYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MV9wbWMuaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZQkJQVQ5MV9QTUNfUENLMQkJKDEgPDwgIDkpCQkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgMSAqLwogI2RlZmluZQkJQVQ5MV9QTUNfUENLMgkJKDEgPDwgMTApCQkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgMiAqLwogI2RlZmluZQkJQVQ5MV9QTUNfUENLMwkJKDEgPDwgMTEpCQkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgMyAqLworI2RlZmluZQkJQVQ5MV9QTUNfUENLNAkJKDEgPDwgMTIpCQkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgNCBbQVQ1NzJEOTQwSEYgb25seV0gKi8KICNkZWZpbmUJCUFUOTFfUE1DX0hDSzAJCSgxIDw8IDE2KQkJLyogQUhCIENsb2NrIChVU0IgaG9zdCkgW0FUOTFTQU05MjYxIG9ubHldICovCiAjZGVmaW5lCQlBVDkxX1BNQ19IQ0sxCQkoMSA8PCAxNykJCS8qIEFIQiBDbG9jayAoTENEKSBbQVQ5MVNBTTkyNjEgb25seV0gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ib2FyZC5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ib2FyZC5oCmluZGV4IGJiNmY2YTcuLmNlYWVjNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYm9hcmQuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2JvYXJkLmgKQEAgLTg3LDcgKzg3LDcgQEAKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfZXRoKHN0cnVjdCBhdDkxX2V0aF9kYXRhICpkYXRhKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHMjApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MUNBUDkpIFwKLQl8fCBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05RzQ1KQorCXx8IGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ1NzJEOTQwSEYpCiAjZGVmaW5lIGV0aF9wbGF0Zm9ybV9kYXRhCWF0OTFfZXRoX2RhdGEKICNlbmRpZgogCkBAIC0yMDUsNiArMjA1LDkgQEAKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2dwaW9fbGVkcyhzdHJ1Y3QgZ3Bpb19sZWQgKmxlZHMsIGludCBucik7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9wd21fbGVkcyhzdHJ1Y3QgZ3Bpb19sZWQgKmxlZHMsIGludCBucik7CiAKKyAvKiBBVDU3MkQ5NDBIRiBEU1AgKi8KK2V4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbUFnaWModm9pZCk7CisKIC8qIEZJWE1FOiB0aGlzIG5lZWRzIGEgYmV0dGVyIGxvY2F0aW9uLCBidXQgZ2V0cyBzdHVmZiBidWlsZGluZyBhZ2FpbiAqLwogZXh0ZXJuIGludCBhdDkxX3N1c3BlbmRfZW50ZXJpbmdfc2xvd19jbG9jayh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKaW5kZXggYzIyZGYzMC4uNWEwNjUwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCkBAIC0zMyw2ICszMyw4IEBACiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlYRTI1NgkweDMyOWE5M2EwCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlYRTUxMgkweDMyOWFhM2EwCiAKKyNkZWZpbmUgQVJDSF9JRF9BVDU3MkQ5NDBIRgkweDBlMDMwM2UwCisKICNkZWZpbmUgQVJDSF9JRF9BVDkxTTQwODAwCTB4MTQwODAwNDQKICNkZWZpbmUgQVJDSF9JRF9BVDkxUjQwODA3CTB4NDQwODA3NDYKICNkZWZpbmUgQVJDSF9JRF9BVDkxTTQwODA3CTB4MTQwODA3NDUKQEAgLTE0MSw2ICsxNDMsMTIgQEAKICNkZWZpbmUgY3B1X2lzX2F0OTFjYXA5X3JldkMoKQkoMCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FSQ0hfQVQ1NzJEOTQwSEYKKyNkZWZpbmUgY3B1X2lzX2F0NTcyZDk0MGhmKCkgKGF0OTFfY3B1X2lkZW50aWZ5KCkgPT0gQVJDSF9JRF9BVDU3MkQ5NDBIRikKKyNlbHNlCisjZGVmaW5lIGNwdV9pc19hdDU3MmQ5NDBoZigpICgwKQorI2VuZGlmCisKIC8qCiAgKiBTaW5jZSB0aGlzIGlzIEFSTSwgd2Ugd2lsbCBuZXZlciBydW4gb24gYW55IEFWUjMyIENQVS4gQnV0IHRoZXNlCiAgKiBkZWZpbml0aW9ucyBtYXkgcmVkdWNlIGNsdXR0ZXIgaW4gY29tbW9uIGRyaXZlcnMuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggMjkwNTJiYS4uOWU3NTBhMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFfZGJndS5oPgogCi0JLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAl0c3QJXHJ4LCAjMQkJCQkJCUAgTU1VIGVuYWJsZWQ/CiAJbGRyZXEJXHJ4LCA9KEFUOTFfQkFTRV9TWVMgKyBBVDkxX0RCR1UpCQlAIFN5c3RlbSBwZXJpcGhlcmFscyAocGh5cyBhZGRyZXNzKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IGEwZGY4YjAuLjNkNjRhNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlIDxtYWNoL2F0OTFjYXA5Lmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFYNDApCiAjaW5jbHVkZSA8bWFjaC9hdDkxeDQwLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUNTcyRDk0MEhGKQorI2luY2x1ZGUgPG1hY2gvYXQ1NzJkOTQwaGYuaD4KICNlbHNlCiAjZXJyb3IgIlVuc3VwcG9ydGVkIEFUOTEgcHJvY2Vzc29yIgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL3RpbWV4LmgKaW5kZXggMzFhYzJkOS4uMDVhNmU4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC90aW1leC5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtODIsNiArODIsMTEgQEAKICNkZWZpbmUgQVQ5MVg0MF9NQVNURVJfQ0xPQ0sJNDAwMDAwMDAKICNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkoQVQ5MVg0MF9NQVNURVJfQ0xPQ0spCiAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ1NzJEOTQwSEYpCisKKyNkZWZpbmUgQVQ1NzJEOTQwSEZfTUFTVEVSX0NMT0NLCTgwMDAwMDAwCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKEFUNTcyRDk0MEhGX01BU1RFUl9DTE9DSy8xNikKKwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMKaW5kZXggZTU5MGJiZS4uNzJlNDA1ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY29yZS5jCkBAIC0xNDIsOCArMTQyLDcgQEAKIAogCWNoaXBjSHdfYnVzSW50ZXJmYWNlQ2xvY2tFbmFibGUoYnVzX2Nsb2NrKTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCi0JCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKIAkJc3RydWN0IGFtYmFfZGV2aWNlICpkID0gYW1iYV9kZXZzW2ldOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggNjRiYWY5Zi4uZmVkZDgwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMyw3ICsxMyw3IEBACiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xwczcxMTEuaD4KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAjQ0xQUzcxMTFfUEhZU19CQVNFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNjUtZXZtLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNjUtZXZtLmMKaW5kZXggYjQ3NjM5NS4uMzhlOTAzMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzY1LWV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM2NS1ldm0uYwpAQCAtMzcsNiArMzcsOCBAQAogI2luY2x1ZGUgPG1hY2gvbmFuZC5oPgogI2luY2x1ZGUgPG1hY2gva2V5c2Nhbi5oPgogCisjaW5jbHVkZSA8bWVkaWEvdHZwNTE0eC5oPgorCiBzdGF0aWMgaW5saW5lIGludCBoYXZlX2ltYWdlcih2b2lkKQogewogCS8qIFJFVklTSVQgd2hlbiBpdCdzIHN1cHBvcnRlZCwgdHJpZ2dlciB2aWEgS2NvbmZpZyAqLwpAQCAtMzA2LDYgKzMwOCw3MyBAQAogCWRhdmluY2lfY2ZnX3JlZyhETTM2NV9TRDFfREFUQTApOwogfQogCitzdGF0aWMgc3RydWN0IHR2cDUxNHhfcGxhdGZvcm1fZGF0YSB0dnA1MTQ2X3BkYXRhID0geworCS5jbGtfcG9sYXJpdHkgPSAwLAorCS5oc19wb2xhcml0eSA9IDEsCisJLnZzX3BvbGFyaXR5ID0gMQorfTsKKworI2RlZmluZSBUVlA1MTRYX1NURF9BTEwgICAgICAgIChWNEwyX1NURF9OVFNDIHwgVjRMMl9TVERfUEFMKQorLyogSW5wdXRzIGF2YWlsYWJsZSBhdCB0aGUgVFZQNTE0NiAqLworc3RhdGljIHN0cnVjdCB2NGwyX2lucHV0IHR2cDUxNDZfaW5wdXRzW10gPSB7CisJeworCQkuaW5kZXggPSAwLAorCQkubmFtZSA9ICJDb21wb3NpdGUiLAorCQkudHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCisJCS5zdGQgPSBUVlA1MTRYX1NURF9BTEwsCisJfSwKKwl7CisJCS5pbmRleCA9IDEsCisJCS5uYW1lID0gIlMtVmlkZW8iLAorCQkudHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCisJCS5zdGQgPSBUVlA1MTRYX1NURF9BTEwsCisJfSwKK307CisKKy8qCisgKiB0aGlzIGlzIHRoZSByb3V0ZSBpbmZvIGZvciBjb25uZWN0aW5nIGVhY2ggaW5wdXQgdG8gZGVjb2RlcgorICogb3VwdXQgdGhhdCBnb2VzIHRvIHZwZmUuIFRoZXJlIGlzIGEgb25lIHRvIG9uZSBjb3JyZXNwb25kZW5jZQorICogd2l0aCB0dnA1MTQ2X2lucHV0cworICovCitzdGF0aWMgc3RydWN0IHZwZmVfcm91dGUgdHZwNTE0Nl9yb3V0ZXNbXSA9IHsKKwl7CisJCS5pbnB1dCA9IElOUFVUX0NWQlNfVkkyQiwKKwkJLm91dHB1dCA9IE9VVFBVVF8xMEJJVF80MjJfRU1CRURERURfU1lOQywKKwl9LAoreworCQkuaW5wdXQgPSBJTlBVVF9TVklERU9fVkkyQ19WSTFDLAorCQkub3V0cHV0ID0gT1VUUFVUXzEwQklUXzQyMl9FTUJFRERFRF9TWU5DLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHZwZmVfc3ViZGV2X2luZm8gdnBmZV9zdWJfZGV2c1tdID0geworCXsKKwkJLm5hbWUgPSAidHZwNTE0NiIsCisJCS5ncnBfaWQgPSAwLAorCQkubnVtX2lucHV0cyA9IEFSUkFZX1NJWkUodHZwNTE0Nl9pbnB1dHMpLAorCQkuaW5wdXRzID0gdHZwNTE0Nl9pbnB1dHMsCisJCS5yb3V0ZXMgPSB0dnA1MTQ2X3JvdXRlcywKKwkJLmNhbl9yb3V0ZSA9IDEsCisJCS5jY2RjX2lmX3BhcmFtcyA9IHsKKwkJCS5pZl90eXBlID0gVlBGRV9CVDY1NiwKKwkJCS5oZHBvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkJLnZkcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCX0sCisJCS5ib2FyZF9pbmZvID0geworCQkJSTJDX0JPQVJEX0lORk8oInR2cDUxNDYiLCAweDVkKSwKKwkJCS5wbGF0Zm9ybV9kYXRhID0gJnR2cDUxNDZfcGRhdGEsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdnBmZV9jb25maWcgdnBmZV9jZmcgPSB7CisJLm51bV9zdWJkZXZzID0gQVJSQVlfU0laRSh2cGZlX3N1Yl9kZXZzKSwKKwkuc3ViX2RldnMgPSB2cGZlX3N1Yl9kZXZzLAorCS5pMmNfYWRhcHRlcl9pZCA9IDEsCisJLmNhcmRfbmFtZSA9ICJETTM2NSBFVk0iLAorCS5jY2RjID0gIklTSUYiLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGV2bV9pbml0X2kyYyh2b2lkKQogewogCWRhdmluY2lfaW5pdF9pMmMoJmkyY19wZGF0YSk7CkBAIC00OTcsNiArNTY2LDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGRtMzY1X2V2bV9tYXBfaW8odm9pZCkKIHsKKwkvKiBzZXR1cCBpbnB1dCBjb25maWd1cmF0aW9uIGZvciBWUEZFIGlucHV0IGRldmljZXMgKi8KKwlkbTM2NV9zZXRfdnBmZV9jb25maWcoJnZwZmVfY2ZnKTsKIAlkbTM2NV9pbml0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM1NS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzU1LmMKaW5kZXggZGVkZjRkNC4uZDg0ZTg1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzU1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzU1LmMKQEAgLTEyNSw3ICsxMjUsNiBAQAogCS5scHNjID0gREFWSU5DSV9MUFNDX1ZQU1NTTFYsCiB9OwogCi0KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa291dDFfY2xrID0gewogCS5uYW1lID0gImNsa291dDEiLAogCS5wYXJlbnQgPSAmcGxsMV9hdXhfY2xrLApAQCAtNjY1LDYgKzY2NCwxNyBAQAogCS5yZXNvdXJjZQk9IGRtMzU1X2FzcDFfcmVzb3VyY2VzLAogfTsKIAorc3RhdGljIHZvaWQgZG0zNTVfY2NkY19zZXR1cF9waW5tdXgodm9pZCkKK3sKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX1BDTEspOworCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fQ0FNX1dFTik7CisJZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9DQU1fVkQpOworCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fQ0FNX0hEKTsKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX1lJTl9FTik7CisJZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9DSU5MX0VOKTsKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX0NJTkhfRU4pOworfQorCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtMzU1X3Zwc3NfcmVzb3VyY2VzW10gPSB7CiAJewogCQkvKiBWUFNTIEJMIEJhc2UgYWRkcmVzcyAqLwpAQCAtNzAxLDYgKzcxMSwxMCBAQAogCQkuZW5kICAgICAgICAgICAgPSBJUlFfVkRJTlQxLAogCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAorfTsKKworc3RhdGljIHU2NCB2cGZlX2NhcHR1cmVfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTM1NV9jY2RjX3Jlc291cmNlW10gPSB7CiAJLyogQ0NEQyBCYXNlIGFkZHJlc3MgKi8KIAl7CiAJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLApAQCAtNzA4LDggKzcyMiwxOCBAQAogCQkuZW5kICAgICAgICAgICAgPSAweDAxYzcwNjAwICsgMHgxZmYsCiAJfSwKIH07CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbTM1NV9jY2RjX2RldiA9IHsKKwkubmFtZSAgICAgICAgICAgPSAiZG0zNTVfY2NkYyIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShkbTM1NV9jY2RjX3Jlc291cmNlKSwKKwkucmVzb3VyY2UgICAgICAgPSBkbTM1NV9jY2RjX3Jlc291cmNlLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzayAgICAgICAgICAgICAgID0gJnZwZmVfY2FwdHVyZV9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrICAgICAgPSBETUFfQklUX01BU0soMzIpLAorCQkucGxhdGZvcm1fZGF0YQkJPSBkbTM1NV9jY2RjX3NldHVwX3Bpbm11eCwKKwl9LAorfTsKIAotc3RhdGljIHU2NCB2cGZlX2NhcHR1cmVfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnBmZV9jYXB0dXJlX2RldiA9IHsKIAkubmFtZQkJPSBDQVBUVVJFX0RSVl9OQU1FLAogCS5pZAkJPSAtMSwKQEAgLTg1NywyMCArODgxLDEzIEBACiAJaWYgKCFjcHVfaXNfZGF2aW5jaV9kbTM1NSgpKQogCQlyZXR1cm4gMDsKIAorCS8qIEFkZCBjY2RjIGNsb2NrIGFsaWFzZXMgKi8KKwljbGtfYWRkX2FsaWFzKCJtYXN0ZXIiLCBkbTM1NV9jY2RjX2Rldi5uYW1lLCAidnBzc19tYXN0ZXIiLCBOVUxMKTsKKwljbGtfYWRkX2FsaWFzKCJzbGF2ZSIsIGRtMzU1X2NjZGNfZGV2Lm5hbWUsICJ2cHNzX21hc3RlciIsIE5VTEwpOwogCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9JTlRfRURNQV9DQyk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTM1NV9lZG1hX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTM1NV92cHNzX2RldmljZSk7Ci0JLyoKLQkgKiBzZXR1cCBNdXggY29uZmlndXJhdGlvbiBmb3IgdnBmZSBpbnB1dCBhbmQgcmVnaXN0ZXIKLQkgKiB2cGZlIGNhcHR1cmUgcGxhdGZvcm0gZGV2aWNlCi0JICovCi0JZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9QQ0xLKTsKLQlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX0NBTV9XRU4pOwotCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fQ0FNX1ZEKTsKLQlkYXZpbmNpX2NmZ19yZWcoRE0zNTVfVklOX0NBTV9IRCk7Ci0JZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9ZSU5fRU4pOwotCWRhdmluY2lfY2ZnX3JlZyhETTM1NV9WSU5fQ0lOTF9FTik7Ci0JZGF2aW5jaV9jZmdfcmVnKERNMzU1X1ZJTl9DSU5IX0VOKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRtMzU1X2NjZGNfZGV2KTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnZwZmVfY2FwdHVyZV9kZXYpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNjUuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM2NS5jCmluZGV4IGY1MzczNWMuLmNlOWRhNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM2NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM2NS5jCkBAIC0xMDA4LDYgKzEwMDgsOTcgQEAKIAlkYXZpbmNpX2NvbW1vbl9pbml0KCZkYXZpbmNpX3NvY19pbmZvX2RtMzY1KTsKIH0KIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTM2NV92cHNzX3Jlc291cmNlc1tdID0geworCXsKKwkJLyogVlBTUyBJU1A1IEJhc2UgYWRkcmVzcyAqLworCQkubmFtZSAgICAgICAgICAgPSAiaXNwNSIsCisJCS5zdGFydCAgICAgICAgICA9IDB4MDFjNzAwMDAsCisJCS5lbmQgICAgICAgICAgICA9IDB4MDFjNzAwMDAgKyAweGZmLAorCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLyogVlBTUyBDTEsgQmFzZSBhZGRyZXNzICovCisJCS5uYW1lICAgICAgICAgICA9ICJ2cHNzIiwKKwkJLnN0YXJ0ICAgICAgICAgID0gMHgwMWM3MDIwMCwKKwkJLmVuZCAgICAgICAgICAgID0gMHgwMWM3MDIwMCArIDB4ZmYsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbTM2NV92cHNzX2RldmljZSA9IHsKKyAgICAgICAubmFtZSAgICAgICAgICAgICAgICAgICA9ICJ2cHNzIiwKKyAgICAgICAuaWQgICAgICAgICAgICAgICAgICAgICA9IC0xLAorICAgICAgIC5kZXYucGxhdGZvcm1fZGF0YSAgICAgID0gImRtMzY1X3Zwc3MiLAorICAgICAgIC5udW1fcmVzb3VyY2VzICAgICAgICAgID0gQVJSQVlfU0laRShkbTM2NV92cHNzX3Jlc291cmNlcyksCisgICAgICAgLnJlc291cmNlICAgICAgICAgICAgICAgPSBkbTM2NV92cHNzX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdnBmZV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCAgICAgICAgICA9IElSUV9WRElOVDAsCisJCS5lbmQgICAgICAgICAgICA9IElSUV9WRElOVDAsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQgICAgICAgICAgPSBJUlFfVkRJTlQxLAorCQkuZW5kICAgICAgICAgICAgPSBJUlFfVkRJTlQxLAorCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHU2NCB2cGZlX2NhcHR1cmVfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnBmZV9jYXB0dXJlX2RldiA9IHsKKwkubmFtZSAgICAgICAgICAgPSBDQVBUVVJFX0RSVl9OQU1FLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUodnBmZV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IHZwZmVfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzayAgICAgICAgICAgICAgID0gJnZwZmVfY2FwdHVyZV9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrICAgICAgPSBETUFfQklUX01BU0soMzIpLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBkbTM2NV9pc2lmX3NldHVwX3Bpbm11eCh2b2lkKQoreworCWRhdmluY2lfY2ZnX3JlZyhETTM2NV9WSU5fQ0FNX1dFTik7CisJZGF2aW5jaV9jZmdfcmVnKERNMzY1X1ZJTl9DQU1fVkQpOworCWRhdmluY2lfY2ZnX3JlZyhETTM2NV9WSU5fQ0FNX0hEKTsKKwlkYXZpbmNpX2NmZ19yZWcoRE0zNjVfVklOX1lJTjRfN19FTik7CisJZGF2aW5jaV9jZmdfcmVnKERNMzY1X1ZJTl9ZSU4wXzNfRU4pOworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlzaWZfcmVzb3VyY2VbXSA9IHsKKwkvKiBJU0lGIEJhc2UgYWRkcmVzcyAqLworCXsKKwkJLnN0YXJ0ICAgICAgICAgID0gMHgwMWM3MTAwMCwKKwkJLmVuZCAgICAgICAgICAgID0gMHgwMWM3MTAwMCArIDB4MWZmLAorCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qIElTSUYgTGluZWFyaXphdGlvbiB0YWJsZSAwICovCisJeworCQkuc3RhcnQgICAgICAgICAgPSAweDFDN0MwMDAsCisJCS5lbmQgICAgICAgICAgICA9IDB4MUM3QzAwMCArIDB4MmZmLAorCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qIElTSUYgTGluZWFyaXphdGlvbiB0YWJsZSAxICovCisJeworCQkuc3RhcnQgICAgICAgICAgPSAweDFDN0M0MDAsCisJCS5lbmQgICAgICAgICAgICA9IDB4MUM3QzQwMCArIDB4MmZmLAorCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtMzY1X2lzaWZfZGV2ID0geworCS5uYW1lICAgICAgICAgICA9ICJpc2lmIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGlzaWZfcmVzb3VyY2UpLAorCS5yZXNvdXJjZSAgICAgICA9IGlzaWZfcmVzb3VyY2UsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrICAgICAgICAgICAgICAgPSAmdnBmZV9jYXB0dXJlX2RtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgICAgICA9IERNQV9CSVRfTUFTSygzMiksCisJCS5wbGF0Zm9ybV9kYXRhCQk9IGRtMzY1X2lzaWZfc2V0dXBfcGlubXV4LAorCX0sCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBkbTM2NV9pbml0X2RldmljZXModm9pZCkKIHsKIAlpZiAoIWNwdV9pc19kYXZpbmNpX2RtMzY1KCkpCkBAIC0xMDE2LDcgKzExMDcsMTYgQEAKIAlkYXZpbmNpX2NmZ19yZWcoRE0zNjVfSU5UX0VETUFfQ0MpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG0zNjVfZWRtYV9kZXZpY2UpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG0zNjVfZW1hY19kZXZpY2UpOwotCisJLyogQWRkIGlzaWYgY2xvY2sgYWxpYXMgKi8KKwljbGtfYWRkX2FsaWFzKCJtYXN0ZXIiLCBkbTM2NV9pc2lmX2Rldi5uYW1lLCAidnBzc19tYXN0ZXIiLCBOVUxMKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRtMzY1X3Zwc3NfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRtMzY1X2lzaWZfZGV2KTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnZwZmVfY2FwdHVyZV9kZXYpOwogCXJldHVybiAwOwogfQogcG9zdGNvcmVfaW5pdGNhbGwoZG0zNjVfaW5pdF9kZXZpY2VzKTsKKwordm9pZCBkbTM2NV9zZXRfdnBmZV9jb25maWcoc3RydWN0IHZwZmVfY29uZmlnICpjZmcpCit7CisgICAgICAgdnBmZV9jYXB0dXJlX2Rldi5kZXYucGxhdGZvcm1fZGF0YSA9IGNmZzsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTY0NHguYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTY0NHguYwppbmRleCAyY2QwMDgxLi45MmFlYjU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDR4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ0eC5jCkBAIC02MTIsNiArNjEyLDExIEBACiAJCS5lbmQgICAgICAgICAgICA9IElSUV9WRElOVDEsCiAJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCit9OworCitzdGF0aWMgdTY0IHZwZmVfY2FwdHVyZV9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtNjQ0eF9jY2RjX3Jlc291cmNlW10gPSB7CisJLyogQ0NEQyBCYXNlIGFkZHJlc3MgKi8KIAl7CiAJCS5zdGFydCAgICAgICAgICA9IDB4MDFjNzA0MDAsCiAJCS5lbmQgICAgICAgICAgICA9IDB4MDFjNzA0MDAgKyAweGZmLApAQCAtNjE5LDcgKzYyNCwxNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgdTY0IHZwZmVfY2FwdHVyZV9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbTY0NHhfY2NkY19kZXYgPSB7CisJLm5hbWUgICAgICAgICAgID0gImRtNjQ0eF9jY2RjIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGRtNjQ0eF9jY2RjX3Jlc291cmNlKSwKKwkucmVzb3VyY2UgICAgICAgPSBkbTY0NHhfY2NkY19yZXNvdXJjZSwKKwkuZGV2ID0geworCQkuZG1hX21hc2sgICAgICAgICAgICAgICA9ICZ2cGZlX2NhcHR1cmVfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayAgICAgID0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnBmZV9jYXB0dXJlX2RldiA9IHsKIAkubmFtZQkJPSBDQVBUVVJFX0RSVl9OQU1FLAogCS5pZAkJPSAtMSwKQEAgLTc2OSw5ICs3ODQsMTMgQEAKIAlpZiAoIWNwdV9pc19kYXZpbmNpX2RtNjQ0eCgpKQogCQlyZXR1cm4gMDsKIAorCS8qIEFkZCBjY2RjIGNsb2NrIGFsaWFzZXMgKi8KKwljbGtfYWRkX2FsaWFzKCJtYXN0ZXIiLCBkbTY0NHhfY2NkY19kZXYubmFtZSwgInZwc3NfbWFzdGVyIiwgTlVMTCk7CisJY2xrX2FkZF9hbGlhcygic2xhdmUiLCBkbTY0NHhfY2NkY19kZXYubmFtZSwgInZwc3Nfc2xhdmUiLCBOVUxMKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRtNjQ0eF9lZG1hX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTY0NHhfZW1hY19kZXZpY2UpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG02NDR4X3Zwc3NfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRtNjQ0eF9jY2RjX2Rldik7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2cGZlX2NhcHR1cmVfZGV2KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDE3YWI1MjMuLjNjZDkzYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CiAjZGVmaW5lIFVBUlRfU0hJRlQJMgogCi0JCS5tYWNybyBhZGRydWFydCwgcngKKwkJLm1hY3JvIGFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAjMHgwMTAwMDAwMAlAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kbTM2NS5oIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kbTM2NS5oCmluZGV4IGYxNzEwYTMuLjlmYzVhNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZG0zNjUuaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RtMzY1LmgKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxtYWNoL2VtYWMuaD4KICNpbmNsdWRlIDxtYWNoL2FzcC5oPgogI2luY2x1ZGUgPG1hY2gva2V5c2Nhbi5oPgorI2luY2x1ZGUgPG1lZGlhL2RhdmluY2kvdnBmZV9jYXB0dXJlLmg+CiAKICNkZWZpbmUgRE0zNjVfRU1BQ19CQVNFCQkJKDB4MDFEMDcwMDApCiAjZGVmaW5lIERNMzY1X0VNQUNfQ05UUkxfT0ZGU0VUCQkoMHgwMDAwKQpAQCAtMzYsNCArMzcsNSBAQAogdm9pZCBfX2luaXQgZG0zNjVfaW5pdF9rcyhzdHJ1Y3QgZGF2aW5jaV9rc19wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CiB2b2lkIF9faW5pdCBkbTM2NV9pbml0X3J0Yyh2b2lkKTsKIAordm9pZCBkbTM2NV9zZXRfdnBmZV9jb25maWcoc3RydWN0IHZwZmVfY29uZmlnICpjZmcpOwogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfRE0zNjVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IDQxYzg5MzguLmM0NWJhMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTI3LDcgKzI3LDcgQEAKIC8qCiAgKiBJL08gbWFwcGluZwogICovCi0jZGVmaW5lIElPX1BIWVMJCQkJMHgwMWMwMDAwMAorI2RlZmluZSBJT19QSFlTCQkJCTB4MDFjMDAwMDBVTAogI2RlZmluZSBJT19PRkZTRVQJCQkweGZkMDAwMDAwIC8qIFZpcnR1YWwgSU8gPSAweGZlYzAwMDAwICovCiAjZGVmaW5lIElPX1NJWkUJCQkJMHgwMDQwMDAwMAogI2RlZmluZSBJT19WSVJUCQkJCShJT19QSFlTICsgSU9fT0ZGU0VUKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2lvLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW8uYwppbmRleCA0OTkxMmI0Li5hMWMwYjZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW8uYwpAQCAtMjQsNyArMjQsNyBAQAogCWlmIChCRVRXRUVOKHAsIElPX1BIWVMsIElPX1NJWkUpKQogCQlyZXR1cm4gWExBVEUocCwgSU9fUEhZUywgSU9fVklSVCk7CiAKLQlyZXR1cm4gX19hcm1faW9yZW1hcChwLCBzaXplLCB0eXBlKTsKKwlyZXR1cm4gX19hcm1faW9yZW1hcF9jYWxsZXIocCwgc2l6ZSwgdHlwZSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0woZGF2aW5jaV9pb3JlbWFwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDliODllYzcuLjE1MjFkMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZG92ZS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWRvdmUvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTgsNyArOCw3IEBACiAKICNpbmNsdWRlIDxtYWNoL2JyaWRnZS1yZWdzLmg+CiAKLQkubWFjcm8JYWRkcnVhcnQscngKKwkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCXRzdAlccngsICMxCQkJCQlAIE1NVSBlbmFibGVkPwogCWxkcmVxCVxyeCwgPURPVkVfU0JfUkVHU19QSFlTX0JBU0UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZG92ZS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggOGIyYzk3NC4uYTI4NzkyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTIsNCArMiw0IEBACiAgKiBhcmNoL2FybS9tYWNoLWRvdmUvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAogICovCiAKLSNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZDgwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORAkweGZkODAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCAxZGRlODIyLi5lYmJkODlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMSw3ICsxMSw3IEBACiAgKgogKiovCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltb3YJXHJ4LCAjMHhmMDAwMDAwMAogCQlvcnIJXHJ4LCBccngsICMweDAwMDAwYmUwCiAJCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZwppbmRleCA5MTY3YzNkLi4zYTA4YjE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcKQEAgLTE2MSw2ICsxNjEsMjAgQEAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQogCSAgQ29udGVjIE1pY3JvOS1TbGltIGJvYXJkLgogCitjb25maWcgTUFDSF9TSU1fT05FCisgICAgICAgIGJvb2wgIlN1cHBvcnQgU2ltcGxlbWFjaGluZXMgU2ltLk9uZSBib2FyZCIKKyAgICAgICAgZGVwZW5kcyBvbiBFUDkzWFhfU0RDRTBfUEhZU19PRkZTRVQKKyAgICAgICAgaGVscAorICAgICAgICAgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorICAgICAgICAgIFNpbXBsZW1hY2hpbmVzIFNpbS5PbmUgYm9hcmQuCisKK2NvbmZpZyBNQUNIX1NOQVBQRVJfQ0wxNQorCWJvb2wgIlN1cHBvcnQgQmx1ZXdhdGVyIFN5c3RlbXMgU25hcHBlciBDTDE1IE1vZHVsZSIKKwlkZXBlbmRzIG9uIEVQOTNYWF9TRENFMF9QSFlTX09GRlNFVAorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZSBCbHVld2F0ZXIKKwkgIFN5c3RlbXMgU25hcHBlciBDTDE1IE1vZHVsZS4KKwogY29uZmlnIE1BQ0hfVFM3MlhYCiAJYm9vbCAiU3VwcG9ydCBUZWNobm9sb2dpYyBTeXN0ZW1zIFRTLTcyeHggU0JDIgogCWRlcGVuZHMgb24gRVA5M1hYX1NEQ0UzX1NZTkNfUEhZU19PRkZTRVQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUKaW5kZXggZWFlNjE5OS4uMzNlZTJjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUKQEAgLTEwLDQgKzEwLDYgQEAKIG9iai0kKENPTkZJR19NQUNIX0VEQjkzWFgpCSs9IGVkYjkzeHgubwogb2JqLSQoQ09ORklHX01BQ0hfR0VTQkM5MzEyKQkrPSBnZXNiYzkzMTIubwogb2JqLSQoQ09ORklHX01BQ0hfTUlDUk85KQkrPSBtaWNybzkubworb2JqLSQoQ09ORklHX01BQ0hfU0lNX09ORSkJKz0gc2ltb25lLm8KK29iai0kKENPTkZJR19NQUNIX1NOQVBQRVJfQ0wxNSkJKz0gc25hcHBlcmNsMTUubwogb2JqLSQoQ09ORklHX01BQ0hfVFM3MlhYKQkrPSB0czcyeHgubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKaW5kZXggMWQwZjlkOC4uNWY4MDA5MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jCkBAIC0xMCw2ICsxMCw4IEBACiAgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSAiZXA5M3h4ICIgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtNDQ1LDM3ICs0NDcsMzkgQEAKIHN0YXRpYyBpbnQgX19pbml0IGVwOTN4eF9jbG9ja19pbml0KHZvaWQpCiB7CiAJdTMyIHZhbHVlOwotCWludCBpOwogCi0JdmFsdWUgPSBfX3Jhd19yZWFkbChFUDkzWFhfU1lTQ09OX0NMT0NLX1NFVDEpOwotCWlmICghKHZhbHVlICYgMHgwMDgwMDAwMCkpIHsJCQkvKiBQTEwxIGJ5cGFzc2VkPyAgKi8KKwkvKiBEZXRlcm1pbmUgdGhlIGJvb3Rsb2FkZXIgY29uZmlndXJlZCBwbGwxIHJhdGUgKi8KKwl2YWx1ZSA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fQ0xLU0VUMSk7CisJaWYgKCEodmFsdWUgJiBFUDkzWFhfU1lTQ09OX0NMS1NFVDFfTkJZUDEpKQogCQljbGtfcGxsMS5yYXRlID0gY2xrX3h0YWxpLnJhdGU7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWNsa19wbGwxLnJhdGUgPSBjYWxjX3BsbF9yYXRlKHZhbHVlKTsKLQl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBwbGwxIGRlcml2ZWQgY2xvY2tzICovCiAJY2xrX2YucmF0ZSA9IGNsa19wbGwxLnJhdGUgLyBmY2xrX2Rpdmlzb3JzWyh2YWx1ZSA+PiAyNSkgJiAweDddOwogCWNsa19oLnJhdGUgPSBjbGtfcGxsMS5yYXRlIC8gaGNsa19kaXZpc29yc1sodmFsdWUgPj4gMjApICYgMHg3XTsKIAljbGtfcC5yYXRlID0gY2xrX2gucmF0ZSAvIHBjbGtfZGl2aXNvcnNbKHZhbHVlID4+IDE4KSAmIDB4M107CiAJZXA5M3h4X2RtYV9jbG9ja19pbml0KCk7CiAKLQl2YWx1ZSA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fQ0xPQ0tfU0VUMik7Ci0JaWYgKCEodmFsdWUgJiAweDAwMDgwMDAwKSkgewkJCS8qIFBMTDIgYnlwYXNzZWQ/ICAqLworCS8qIERldGVybWluZSB0aGUgYm9vdGxvYWRlciBjb25maWd1cmVkIHBsbDIgcmF0ZSAqLworCXZhbHVlID0gX19yYXdfcmVhZGwoRVA5M1hYX1NZU0NPTl9DTEtTRVQyKTsKKwlpZiAoISh2YWx1ZSAmIEVQOTNYWF9TWVNDT05fQ0xLU0VUMl9OQllQMikpCiAJCWNsa19wbGwyLnJhdGUgPSBjbGtfeHRhbGkucmF0ZTsKLQl9IGVsc2UgaWYgKHZhbHVlICYgMHgwMDA0MDAwMCkgewkJLyogUExMMiBlbmFibGVkPyAgKi8KKwllbHNlIGlmICh2YWx1ZSAmIEVQOTNYWF9TWVNDT05fQ0xLU0VUMl9QTEwyX0VOKQogCQljbGtfcGxsMi5yYXRlID0gY2FsY19wbGxfcmF0ZSh2YWx1ZSk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWNsa19wbGwyLnJhdGUgPSAwOwotCX0KKworCS8qIEluaXRpYWxpemUgdGhlIHBsbDIgZGVyaXZlZCBjbG9ja3MgKi8KIAljbGtfdXNiX2hvc3QucmF0ZSA9IGNsa19wbGwyLnJhdGUgLyAoKCh2YWx1ZSA+PiAyOCkgJiAweGYpICsgMSk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJlcDkzeHg6IFBMTDEgcnVubmluZyBhdCAlbGQgTUh6LCBQTEwyIGF0ICVsZCBNSHpcbiIsCisJcHJfaW5mbygiUExMMSBydW5uaW5nIGF0ICVsZCBNSHosIFBMTDIgYXQgJWxkIE1IelxuIiwKIAkJY2xrX3BsbDEucmF0ZSAvIDEwMDAwMDAsIGNsa19wbGwyLnJhdGUgLyAxMDAwMDAwKTsKLQlwcmludGsoS0VSTl9JTkZPICJlcDkzeHg6IEZDTEsgJWxkIE1IeiwgSENMSyAlbGQgTUh6LCBQQ0xLICVsZCBNSHpcbiIsCisJcHJfaW5mbygiRkNMSyAlbGQgTUh6LCBIQ0xLICVsZCBNSHosIFBDTEsgJWxkIE1IelxuIiwKIAkJY2xrX2YucmF0ZSAvIDEwMDAwMDAsIGNsa19oLnJhdGUgLyAxMDAwMDAwLAogCQljbGtfcC5yYXRlIC8gMTAwMDAwMCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbG9ja3MpOyBpKyspCi0JCWNsa2Rldl9hZGQoJmNsb2Nrc1tpXSk7CisJY2xrZGV2X2FkZF90YWJsZShjbG9ja3MsIEFSUkFZX1NJWkUoY2xvY2tzKSk7CiAJcmV0dXJuIDA7CiB9CiBhcmNoX2luaXRjYWxsKGVwOTN4eF9jbG9ja19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwppbmRleCAxZjBkNjY1Li45MGZiNTkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCkBAIC0xNCwxMiArMTQsMTUgQEAKICAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpICJlcDkzeHggIiBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CkBAIC0zNSw3ICszOCw2IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CiAKQEAgLTgyLDEzICs4NCw0MCBAQAogICogdG8gdXNlIHRoaXMgdGltZXIgZm9yIHNvbWV0aGluZyBlbHNlLiAgV2UgYWxzbyB1c2UgdGltZXIgNCBmb3Iga2VlcGluZwogICogdHJhY2sgb2YgbG9zdCBqaWZmaWVzLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGxhc3RfamlmZnlfdGltZTsKKyNkZWZpbmUgRVA5M1hYX1RJTUVSX1JFRyh4KQkJKEVQOTNYWF9USU1FUl9CQVNFICsgKHgpKQorI2RlZmluZSBFUDkzWFhfVElNRVIxX0xPQUQJCUVQOTNYWF9USU1FUl9SRUcoMHgwMCkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMV9WQUxVRQkJRVA5M1hYX1RJTUVSX1JFRygweDA0KQorI2RlZmluZSBFUDkzWFhfVElNRVIxX0NPTlRST0wJCUVQOTNYWF9USU1FUl9SRUcoMHgwOCkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMTIzX0NPTlRST0xfRU5BQkxFCSgxIDw8IDcpCisjZGVmaW5lIEVQOTNYWF9USU1FUjEyM19DT05UUk9MX01PREUJKDEgPDwgNikKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMTIzX0NPTlRST0xfQ0xLU0VMCSgxIDw8IDMpCisjZGVmaW5lIEVQOTNYWF9USU1FUjFfQ0xFQVIJCUVQOTNYWF9USU1FUl9SRUcoMHgwYykKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMl9MT0FECQlFUDkzWFhfVElNRVJfUkVHKDB4MjApCisjZGVmaW5lIEVQOTNYWF9USU1FUjJfVkFMVUUJCUVQOTNYWF9USU1FUl9SRUcoMHgyNCkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMl9DT05UUk9MCQlFUDkzWFhfVElNRVJfUkVHKDB4MjgpCisjZGVmaW5lIEVQOTNYWF9USU1FUjJfQ0xFQVIJCUVQOTNYWF9USU1FUl9SRUcoMHgyYykKKyNkZWZpbmUgRVA5M1hYX1RJTUVSNF9WQUxVRV9MT1cJCUVQOTNYWF9USU1FUl9SRUcoMHg2MCkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSNF9WQUxVRV9ISUdICUVQOTNYWF9USU1FUl9SRUcoMHg2NCkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSNF9WQUxVRV9ISUdIX0VOQUJMRQkoMSA8PCA4KQorI2RlZmluZSBFUDkzWFhfVElNRVIzX0xPQUQJCUVQOTNYWF9USU1FUl9SRUcoMHg4MCkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSM19WQUxVRQkJRVA5M1hYX1RJTUVSX1JFRygweDg0KQorI2RlZmluZSBFUDkzWFhfVElNRVIzX0NPTlRST0wJCUVQOTNYWF9USU1FUl9SRUcoMHg4OCkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSM19DTEVBUgkJRVA5M1hYX1RJTUVSX1JFRygweDhjKQogCisjZGVmaW5lIEVQOTNYWF9USU1FUjEyM19DTE9DSwkJNTA4NDY5CisjZGVmaW5lIEVQOTNYWF9USU1FUjRfQ0xPQ0sJCTk4MzA0MAorCisjZGVmaW5lIFRJTUVSMV9SRUxPQUQJCQkoKEVQOTNYWF9USU1FUjEyM19DTE9DSyAvIEhaKSAtIDEpCiAjZGVmaW5lIFRJTUVSNF9USUNLU19QRVJfSklGRlkJCURJVl9ST1VORF9DTE9TRVNUKENMT0NLX1RJQ0tfUkFURSwgSFopCiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFzdF9qaWZmeV90aW1lOworCiBzdGF0aWMgaXJxcmV0dXJuX3QgZXA5M3h4X3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CisJLyogV3JpdGluZyBhbnkgdmFsdWUgY2xlYXJzIHRoZSB0aW1lciBpbnRlcnJ1cHQgKi8KIAlfX3Jhd193cml0ZWwoMSwgRVA5M1hYX1RJTUVSMV9DTEVBUik7CisKKwkvKiBSZWNvdmVyIGxvc3QgamlmZmllcyAqLwogCXdoaWxlICgoc2lnbmVkIGxvbmcpCiAJCShfX3Jhd19yZWFkbChFUDkzWFhfVElNRVI0X1ZBTFVFX0xPVykgLSBsYXN0X2ppZmZ5X3RpbWUpCiAJCQkJCQk+PSBUSU1FUjRfVElDS1NfUEVSX0pJRkZZKSB7CkBAIC0xMDcsMTMgKzEzNiwxOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgZXA5M3h4X3RpbWVyX2luaXQodm9pZCkKIHsKKwl1MzIgdG1vZGUgPSBFUDkzWFhfVElNRVIxMjNfQ09OVFJPTF9NT0RFIHwKKwkJICAgIEVQOTNYWF9USU1FUjEyM19DT05UUk9MX0NMS1NFTDsKKwogCS8qIEVuYWJsZSBwZXJpb2RpYyBIWiB0aW1lci4gICovCi0JX19yYXdfd3JpdGVsKDB4NDgsIEVQOTNYWF9USU1FUjFfQ09OVFJPTCk7Ci0JX19yYXdfd3JpdGVsKCg1MDg0NjkgLyBIWikgLSAxLCBFUDkzWFhfVElNRVIxX0xPQUQpOwotCV9fcmF3X3dyaXRlbCgweGM4LCBFUDkzWFhfVElNRVIxX0NPTlRST0wpOworCV9fcmF3X3dyaXRlbCh0bW9kZSwgRVA5M1hYX1RJTUVSMV9DT05UUk9MKTsKKwlfX3Jhd193cml0ZWwoVElNRVIxX1JFTE9BRCwgRVA5M1hYX1RJTUVSMV9MT0FEKTsKKwlfX3Jhd193cml0ZWwodG1vZGUgfCBFUDkzWFhfVElNRVIxMjNfQ09OVFJPTF9FTkFCTEUsCisJCQlFUDkzWFhfVElNRVIxX0NPTlRST0wpOwogCiAJLyogRW5hYmxlIGxvc3QgamlmZnkgdGltZXIuICAqLwotCV9fcmF3X3dyaXRlbCgweDEwMCwgRVA5M1hYX1RJTUVSNF9WQUxVRV9ISUdIKTsKKwlfX3Jhd193cml0ZWwoRVA5M1hYX1RJTUVSNF9WQUxVRV9ISUdIX0VOQUJMRSwKKwkJCUVQOTNYWF9USU1FUjRfVkFMVUVfSElHSCk7CiAKIAlzZXR1cF9pcnEoSVJRX0VQOTNYWF9USU1FUjEsICZlcDkzeHhfdGltZXJfaXJxKTsKIH0KQEAgLTEzNSwyMzcgKzE2OSwxNiBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBHUElPIGhhbmRsaW5nIGZvciBFUDkzeHgKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3Bpb19pbnRfdW5tYXNrZWRbM107Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBncGlvX2ludF9lbmFibGVkWzNdOwotc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3Bpb19pbnRfdHlwZTFbM107Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBncGlvX2ludF90eXBlMlszXTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGdwaW9faW50X2RlYm91bmNlWzNdOwotCi0vKiBQb3J0IG9yZGVyaW5nIGlzOiBBIEIgRiAqLwotc3RhdGljIGNvbnN0IHU4IGludF90eXBlMV9yZWdpc3Rlcl9vZmZzZXRbM10JPSB7IDB4OTAsIDB4YWMsIDB4NGMgfTsKLXN0YXRpYyBjb25zdCB1OCBpbnRfdHlwZTJfcmVnaXN0ZXJfb2Zmc2V0WzNdCT0geyAweDk0LCAweGIwLCAweDUwIH07Ci1zdGF0aWMgY29uc3QgdTggZW9pX3JlZ2lzdGVyX29mZnNldFszXQkJPSB7IDB4OTgsIDB4YjQsIDB4NTQgfTsKLXN0YXRpYyBjb25zdCB1OCBpbnRfZW5fcmVnaXN0ZXJfb2Zmc2V0WzNdCT0geyAweDljLCAweGI4LCAweDU4IH07Ci1zdGF0aWMgY29uc3QgdTggaW50X2RlYm91bmNlX3JlZ2lzdGVyX29mZnNldFszXQk9IHsgMHhhOCwgMHhjNCwgMHg2NCB9OwotCi12b2lkIGVwOTN4eF9ncGlvX3VwZGF0ZV9pbnRfcGFyYW1zKHVuc2lnbmVkIHBvcnQpCi17Ci0JQlVHX09OKHBvcnQgPiAyKTsKLQotCV9fcmF3X3dyaXRlYigwLCBFUDkzWFhfR1BJT19SRUcoaW50X2VuX3JlZ2lzdGVyX29mZnNldFtwb3J0XSkpOwotCi0JX19yYXdfd3JpdGViKGdwaW9faW50X3R5cGUyW3BvcnRdLAotCQlFUDkzWFhfR1BJT19SRUcoaW50X3R5cGUyX3JlZ2lzdGVyX29mZnNldFtwb3J0XSkpOwotCi0JX19yYXdfd3JpdGViKGdwaW9faW50X3R5cGUxW3BvcnRdLAotCQlFUDkzWFhfR1BJT19SRUcoaW50X3R5cGUxX3JlZ2lzdGVyX29mZnNldFtwb3J0XSkpOwotCi0JX19yYXdfd3JpdGViKGdwaW9faW50X3VubWFza2VkW3BvcnRdICYgZ3Bpb19pbnRfZW5hYmxlZFtwb3J0XSwKLQkJRVA5M1hYX0dQSU9fUkVHKGludF9lbl9yZWdpc3Rlcl9vZmZzZXRbcG9ydF0pKTsKLX0KLQotdm9pZCBlcDkzeHhfZ3Bpb19pbnRfbWFzayh1bnNpZ25lZCBsaW5lKQotewotCWdwaW9faW50X3VubWFza2VkW2xpbmUgPj4gM10gJj0gfigxIDw8IChsaW5lICYgNykpOwotfQotCi12b2lkIGVwOTN4eF9ncGlvX2ludF9kZWJvdW5jZSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgZW5hYmxlKQotewotCWludCBsaW5lID0gaXJxX3RvX2dwaW8oaXJxKTsKLQlpbnQgcG9ydCA9IGxpbmUgPj4gMzsKLQlpbnQgcG9ydF9tYXNrID0gMSA8PCAobGluZSAmIDcpOwotCi0JaWYgKGVuYWJsZSkKLQkJZ3Bpb19pbnRfZGVib3VuY2VbcG9ydF0gfD0gcG9ydF9tYXNrOwotCWVsc2UKLQkJZ3Bpb19pbnRfZGVib3VuY2VbcG9ydF0gJj0gfnBvcnRfbWFzazsKLQotCV9fcmF3X3dyaXRlYihncGlvX2ludF9kZWJvdW5jZVtwb3J0XSwKLQkJRVA5M1hYX0dQSU9fUkVHKGludF9kZWJvdW5jZV9yZWdpc3Rlcl9vZmZzZXRbcG9ydF0pKTsKLX0KLUVYUE9SVF9TWU1CT0woZXA5M3h4X2dwaW9faW50X2RlYm91bmNlKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEVQOTN4eCBJUlEgaGFuZGxpbmcKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9fYWJfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCXVuc2lnbmVkIGNoYXIgc3RhdHVzOwotCWludCBpOwotCi0Jc3RhdHVzID0gX19yYXdfcmVhZGIoRVA5M1hYX0dQSU9fQV9JTlRfU1RBVFVTKTsKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCWlmIChzdGF0dXMgJiAoMSA8PCBpKSkgewotCQkJaW50IGdwaW9faXJxID0gZ3Bpb190b19pcnEoRVA5M1hYX0dQSU9fTElORV9BKDApKSArIGk7Ci0JCQlnZW5lcmljX2hhbmRsZV9pcnEoZ3Bpb19pcnEpOwotCQl9Ci0JfQotCi0Jc3RhdHVzID0gX19yYXdfcmVhZGIoRVA5M1hYX0dQSU9fQl9JTlRfU1RBVFVTKTsKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCWlmIChzdGF0dXMgJiAoMSA8PCBpKSkgewotCQkJaW50IGdwaW9faXJxID0gZ3Bpb190b19pcnEoRVA5M1hYX0dQSU9fTElORV9CKDApKSArIGk7Ci0JCQlnZW5lcmljX2hhbmRsZV9pcnEoZ3Bpb19pcnEpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19mX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQkvKgotCSAqIG1hcCBkaXNjb250aWd1b3VzIGh3IGlycSByYW5nZSB0byBjb250aW5vdXMgc3cgaXJxIHJhbmdlOgotCSAqCi0JICogIElSUV9FUDkzWFhfR1BJT3swLi43fU1VWCAtPiBncGlvX3RvX2lycShFUDkzWFhfR1BJT19MSU5FX0YoezAuLjd9KQotCSAqLwotCWludCBwb3J0X2ZfaWR4ID0gKChpcnEgKyAxKSAmIDcpIF4gNDsgLyogezE5Li4yMiw0Ny4uNTB9IC0+IHswLi43fSAqLwotCWludCBncGlvX2lycSA9IGdwaW9fdG9faXJxKEVQOTNYWF9HUElPX0xJTkVfRigwKSkgKyBwb3J0X2ZfaWR4OwotCi0JZ2VuZXJpY19oYW5kbGVfaXJxKGdwaW9faXJxKTsKLX0KLQotc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9faXJxX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBsaW5lID0gaXJxX3RvX2dwaW8oaXJxKTsKLQlpbnQgcG9ydCA9IGxpbmUgPj4gMzsKLQlpbnQgcG9ydF9tYXNrID0gMSA8PCAobGluZSAmIDcpOwotCi0JaWYgKChpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIElSUV9UWVBFX1NFTlNFX01BU0spID09IElSUV9UWVBFX0VER0VfQk9USCkgewotCQlncGlvX2ludF90eXBlMltwb3J0XSBePSBwb3J0X21hc2s7IC8qIHN3aXRjaCBlZGdlIGRpcmVjdGlvbiAqLwotCQllcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyhwb3J0KTsKLQl9Ci0KLQlfX3Jhd193cml0ZWIocG9ydF9tYXNrLCBFUDkzWFhfR1BJT19SRUcoZW9pX3JlZ2lzdGVyX29mZnNldFtwb3J0XSkpOwotfQotCi1zdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19pcnFfbWFza19hY2sodW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgbGluZSA9IGlycV90b19ncGlvKGlycSk7Ci0JaW50IHBvcnQgPSBsaW5lID4+IDM7Ci0JaW50IHBvcnRfbWFzayA9IDEgPDwgKGxpbmUgJiA3KTsKLQotCWlmICgoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiBJUlFfVFlQRV9TRU5TRV9NQVNLKSA9PSBJUlFfVFlQRV9FREdFX0JPVEgpCi0JCWdwaW9faW50X3R5cGUyW3BvcnRdIF49IHBvcnRfbWFzazsgLyogc3dpdGNoIGVkZ2UgZGlyZWN0aW9uICovCi0KLQlncGlvX2ludF91bm1hc2tlZFtwb3J0XSAmPSB+cG9ydF9tYXNrOwotCWVwOTN4eF9ncGlvX3VwZGF0ZV9pbnRfcGFyYW1zKHBvcnQpOwotCi0JX19yYXdfd3JpdGViKHBvcnRfbWFzaywgRVA5M1hYX0dQSU9fUkVHKGVvaV9yZWdpc3Rlcl9vZmZzZXRbcG9ydF0pKTsKLX0KLQotc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9faXJxX21hc2sodW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgbGluZSA9IGlycV90b19ncGlvKGlycSk7Ci0JaW50IHBvcnQgPSBsaW5lID4+IDM7Ci0KLQlncGlvX2ludF91bm1hc2tlZFtwb3J0XSAmPSB+KDEgPDwgKGxpbmUgJiA3KSk7Ci0JZXA5M3h4X2dwaW9fdXBkYXRlX2ludF9wYXJhbXMocG9ydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2lycV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgbGluZSA9IGlycV90b19ncGlvKGlycSk7Ci0JaW50IHBvcnQgPSBsaW5lID4+IDM7Ci0KLQlncGlvX2ludF91bm1hc2tlZFtwb3J0XSB8PSAxIDw8IChsaW5lICYgNyk7Ci0JZXA5M3h4X2dwaW9fdXBkYXRlX2ludF9wYXJhbXMocG9ydCk7Ci19Ci0KLQotLyoKLSAqIGdwaW9faW50X3R5cGUxIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGludGVycnVwdCBpcyBsZXZlbCAoMCkgb3IKLSAqIGVkZ2UgKDEpIHRyaWdnZXJlZCwgd2hpbGUgZ3Bpb19pbnRfdHlwZTIgY29udHJvbHMgd2hldGhlciBpdAotICogdHJpZ2dlcnMgb24gbG93L2ZhbGxpbmcgKDApIG9yIGhpZ2gvcmlzaW5nICgxKS4KLSAqLwotc3RhdGljIGludCBlcDkzeHhfZ3Bpb19pcnFfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKLXsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQljb25zdCBpbnQgZ3BpbyA9IGlycV90b19ncGlvKGlycSk7Ci0JY29uc3QgaW50IHBvcnQgPSBncGlvID4+IDM7Ci0JY29uc3QgaW50IHBvcnRfbWFzayA9IDEgPDwgKGdwaW8gJiA3KTsKLQotCWdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW8pOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBJUlFfVFlQRV9FREdFX1JJU0lORzoKLQkJZ3Bpb19pbnRfdHlwZTFbcG9ydF0gfD0gcG9ydF9tYXNrOwotCQlncGlvX2ludF90eXBlMltwb3J0XSB8PSBwb3J0X21hc2s7Ci0JCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVfZWRnZV9pcnE7Ci0JCWJyZWFrOwotCWNhc2UgSVJRX1RZUEVfRURHRV9GQUxMSU5HOgotCQlncGlvX2ludF90eXBlMVtwb3J0XSB8PSBwb3J0X21hc2s7Ci0JCWdwaW9faW50X3R5cGUyW3BvcnRdICY9IH5wb3J0X21hc2s7Ci0JCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVfZWRnZV9pcnE7Ci0JCWJyZWFrOwotCWNhc2UgSVJRX1RZUEVfTEVWRUxfSElHSDoKLQkJZ3Bpb19pbnRfdHlwZTFbcG9ydF0gJj0gfnBvcnRfbWFzazsKLQkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gfD0gcG9ydF9tYXNrOwotCQlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlX2xldmVsX2lycTsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFfVFlQRV9MRVZFTF9MT1c6Ci0JCWdwaW9faW50X3R5cGUxW3BvcnRdICY9IH5wb3J0X21hc2s7Ci0JCWdwaW9faW50X3R5cGUyW3BvcnRdICY9IH5wb3J0X21hc2s7Ci0JCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVfbGV2ZWxfaXJxOwotCQlicmVhazsKLQljYXNlIElSUV9UWVBFX0VER0VfQk9USDoKLQkJZ3Bpb19pbnRfdHlwZTFbcG9ydF0gfD0gcG9ydF9tYXNrOwotCQkvKiBzZXQgaW5pdGlhbCBwb2xhcml0eSBiYXNlZCBvbiBjdXJyZW50IGlucHV0IGxldmVsICovCi0JCWlmIChncGlvX2dldF92YWx1ZShncGlvKSkKLQkJCWdwaW9faW50X3R5cGUyW3BvcnRdICY9IH5wb3J0X21hc2s7IC8qIGZhbGxpbmcgKi8KLQkJZWxzZQotCQkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gfD0gcG9ydF9tYXNrOyAvKiByaXNpbmcgKi8KLQkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9lZGdlX2lycTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJfZXJyKCJlcDkzeHg6IGZhaWxlZCB0byBzZXQgaXJxIHR5cGUgJWQgZm9yIGdwaW8gJWRcbiIsCi0JCSAgICAgICB0eXBlLCBncGlvKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZ3Bpb19pbnRfZW5hYmxlZFtwb3J0XSB8PSBwb3J0X21hc2s7Ci0KLQlkZXNjLT5zdGF0dXMgJj0gfklSUV9UWVBFX1NFTlNFX01BU0s7Ci0JZGVzYy0+c3RhdHVzIHw9IHR5cGUgJiBJUlFfVFlQRV9TRU5TRV9NQVNLOwotCi0JZXA5M3h4X2dwaW9fdXBkYXRlX2ludF9wYXJhbXMocG9ydCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBlcDkzeHhfZ3Bpb19pcnFfY2hpcCA9IHsKLQkubmFtZQkJPSAiR1BJTyIsCi0JLmFjawkJPSBlcDkzeHhfZ3Bpb19pcnFfYWNrLAotCS5tYXNrX2Fjawk9IGVwOTN4eF9ncGlvX2lycV9tYXNrX2FjaywKLQkubWFzawkJPSBlcDkzeHhfZ3Bpb19pcnFfbWFzaywKLQkudW5tYXNrCQk9IGVwOTN4eF9ncGlvX2lycV91bm1hc2ssCi0JLnNldF90eXBlCT0gZXA5M3h4X2dwaW9faXJxX3R5cGUsCi19OwotCitleHRlcm4gdm9pZCBlcDkzeHhfZ3Bpb19pbml0X2lycSh2b2lkKTsKIAogdm9pZCBfX2luaXQgZXA5M3h4X2luaXRfaXJxKHZvaWQpCiB7Ci0JaW50IGdwaW9faXJxOwotCiAJdmljX2luaXQoRVA5M1hYX1ZJQzFfQkFTRSwgMCwgRVA5M1hYX1ZJQzFfVkFMSURfSVJRX01BU0ssIDApOwogCXZpY19pbml0KEVQOTNYWF9WSUMyX0JBU0UsIDMyLCBFUDkzWFhfVklDMl9WQUxJRF9JUlFfTUFTSywgMCk7CiAKLQlmb3IgKGdwaW9faXJxID0gZ3Bpb190b19pcnEoMCk7Ci0JICAgICBncGlvX2lycSA8PSBncGlvX3RvX2lycShFUDkzWFhfR1BJT19MSU5FX01BWF9JUlEpOyArK2dwaW9faXJxKSB7Ci0JCXNldF9pcnFfY2hpcChncGlvX2lycSwgJmVwOTN4eF9ncGlvX2lycV9jaGlwKTsKLQkJc2V0X2lycV9oYW5kbGVyKGdwaW9faXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQkJc2V0X2lycV9mbGFncyhncGlvX2lycSwgSVJRRl9WQUxJRCk7Ci0JfQotCi0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPX0FCLCBlcDkzeHhfZ3Bpb19hYl9pcnFfaGFuZGxlcik7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPME1VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPMU1VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPMk1VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPM01VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPNE1VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPNU1VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPNk1VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPN01VWCwgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcik7CisJZXA5M3h4X2dwaW9faW5pdF9pcnEoKTsKIH0KIAogCkBAIC01NzIsOSArMzg1LDkgQEAKIAkgKiBDTU9TIGRyaXZlci4KIAkgKi8KIAlpZiAoZGF0YS0+c2RhX2lzX29wZW5fZHJhaW4gJiYgZGF0YS0+c2RhX3BpbiAhPSBFUDkzWFhfR1BJT19MSU5FX0VFREFUKQotCQlwcl93YXJuaW5nKCJlcDkzeHg6IHNkYSAhPSBFRURBVCwgb3BlbiBkcmFpbiBoYXMgbm8gZWZmZWN0XG4iKTsKKwkJcHJfd2FybmluZygic2RhICE9IEVFREFULCBvcGVuIGRyYWluIGhhcyBubyBlZmZlY3RcbiIpOwogCWlmIChkYXRhLT5zY2xfaXNfb3Blbl9kcmFpbiAmJiBkYXRhLT5zY2xfcGluICE9IEVQOTNYWF9HUElPX0xJTkVfRUVDTEspCi0JCXByX3dhcm5pbmcoImVwOTN4eDogc2NsICE9IEVFQ0xLLCBvcGVuIGRyYWluIGhhcyBubyBlZmZlY3RcbiIpOworCQlwcl93YXJuaW5nKCJzY2wgIT0gRUVDTEssIG9wZW4gZHJhaW4gaGFzIG5vIGVmZmVjdFxuIik7CiAKIAlfX3Jhd193cml0ZWwoKGRhdGEtPnNkYV9pc19vcGVuX2RyYWluIDw8IDEpIHwKIAkJICAgICAoZGF0YS0+c2NsX2lzX29wZW5fZHJhaW4gPDwgMCksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9kbWEtbTJwLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9kbWEtbTJwLmMKaW5kZXggZGJjYWM5Yy4uODkwNGNhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZG1hLW0ycC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2RtYS1tMnAuYwpAQCAtMjgsNiArMjgsOCBAQAogICogd2l0aCB0aGlzIGltcGxlbWVudGF0aW9uLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgImVwOTN4eCAiIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTE3Myw3ICsxNzUsNyBAQAogCiAJc3dpdGNoIChtMnBfY2hhbm5lbF9zdGF0ZShjaCkpIHsKIAljYXNlIFNUQVRFX0lETEU6Ci0JCXByX2NyaXQoIm0ycF9pcnE6IGRtYSBpbnRlcnJ1cHQgd2l0aG91dCBhIGRtYSBidWZmZXJcbiIpOworCQlwcl9jcml0KCJkbWEgaW50ZXJydXB0IHdpdGhvdXQgYSBkbWEgYnVmZmVyXG4iKTsKIAkJQlVHKCk7CiAJCWJyZWFrOwogCkBAIC0xOTcsNyArMTk5LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNUQVRFX05FWFQ6Ci0JCXByX2NyaXQoIm0ycF9pcnE6IGRtYSBpbnRlcnJ1cHQgd2hpbGUgbmV4dFxuIik7CisJCXByX2NyaXQoImRtYSBpbnRlcnJ1cHQgd2hpbGUgbmV4dFxuIik7CiAJCUJVRygpOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMKaW5kZXggYTRhN2JlMy4uZDIyZDY3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYwpAQCAtMTE4LDEyICsxMTgsMzMgQEAKIAl9CiB9CiAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVEQjkzeHggcHdtCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBlZGI5M3h4X3JlZ2lzdGVyX3B3bSh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX2VkYjkzMDEoKSB8fAorCSAgICBtYWNoaW5lX2lzX2VkYjkzMDIoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMDJhKCkpIHsKKwkJLyogRVA5MzAxIGFuZCBFUDkzMDIgb25seSBoYXZlIHB3bS4xIChFR1BJTzE0KSAqLworCQllcDkzeHhfcmVnaXN0ZXJfcHdtKDAsIDEpOworCX0gZWxzZSBpZiAobWFjaGluZV9pc19lZGI5MzA3KCkgfHwgbWFjaGluZV9pc19lZGI5MzA3YSgpKSB7CisJCS8qIEVQOTMwNyBvbmx5IGhhcyBwd20uMCAoUFdNT1VUKSAqLworCQllcDkzeHhfcmVnaXN0ZXJfcHdtKDEsIDApOworCX0gZWxzZSB7CisJCS8qIEVQOTMxMiBhbmQgRVA5MzE1IGhhdmUgYm90aCAqLworCQllcDkzeHhfcmVnaXN0ZXJfcHdtKDEsIDEpOworCX0KK30KKworCiBzdGF0aWMgdm9pZCBfX2luaXQgZWRiOTN4eF9pbml0X21hY2hpbmUodm9pZCkKIHsKIAllcDkzeHhfaW5pdF9kZXZpY2VzKCk7CiAJZWRiOTN4eF9yZWdpc3Rlcl9mbGFzaCgpOwogCWVwOTN4eF9yZWdpc3Rlcl9ldGgoJmVkYjkzeHhfZXRoX2RhdGEsIDEpOwogCWVkYjkzeHhfcmVnaXN0ZXJfaTJjKCk7CisJZWRiOTN4eF9yZWdpc3Rlcl9wd20oKTsKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMKaW5kZXggMWVhODg3MS4uY2MzNzdhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYwpAQCAtMTMsNiArMTMsOCBAQAogICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgImVwOTN4eCAiIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KQEAgLTIyLDYgKzI0LDIzNSBAQAogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR1BJTyBoYW5kbGluZyBmb3IgRVA5M3h4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGdwaW9faW50X3VubWFza2VkWzNdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3Bpb19pbnRfZW5hYmxlZFszXTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGdwaW9faW50X3R5cGUxWzNdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3Bpb19pbnRfdHlwZTJbM107CitzdGF0aWMgdW5zaWduZWQgY2hhciBncGlvX2ludF9kZWJvdW5jZVszXTsKKworLyogUG9ydCBvcmRlcmluZyBpczogQSBCIEYgKi8KK3N0YXRpYyBjb25zdCB1OCBpbnRfdHlwZTFfcmVnaXN0ZXJfb2Zmc2V0WzNdCT0geyAweDkwLCAweGFjLCAweDRjIH07CitzdGF0aWMgY29uc3QgdTggaW50X3R5cGUyX3JlZ2lzdGVyX29mZnNldFszXQk9IHsgMHg5NCwgMHhiMCwgMHg1MCB9Oworc3RhdGljIGNvbnN0IHU4IGVvaV9yZWdpc3Rlcl9vZmZzZXRbM10JCT0geyAweDk4LCAweGI0LCAweDU0IH07CitzdGF0aWMgY29uc3QgdTggaW50X2VuX3JlZ2lzdGVyX29mZnNldFszXQk9IHsgMHg5YywgMHhiOCwgMHg1OCB9Oworc3RhdGljIGNvbnN0IHU4IGludF9kZWJvdW5jZV9yZWdpc3Rlcl9vZmZzZXRbM10JPSB7IDB4YTgsIDB4YzQsIDB4NjQgfTsKKwordm9pZCBlcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyh1bnNpZ25lZCBwb3J0KQoreworCUJVR19PTihwb3J0ID4gMik7CisKKwlfX3Jhd193cml0ZWIoMCwgRVA5M1hYX0dQSU9fUkVHKGludF9lbl9yZWdpc3Rlcl9vZmZzZXRbcG9ydF0pKTsKKworCV9fcmF3X3dyaXRlYihncGlvX2ludF90eXBlMltwb3J0XSwKKwkJRVA5M1hYX0dQSU9fUkVHKGludF90eXBlMl9yZWdpc3Rlcl9vZmZzZXRbcG9ydF0pKTsKKworCV9fcmF3X3dyaXRlYihncGlvX2ludF90eXBlMVtwb3J0XSwKKwkJRVA5M1hYX0dQSU9fUkVHKGludF90eXBlMV9yZWdpc3Rlcl9vZmZzZXRbcG9ydF0pKTsKKworCV9fcmF3X3dyaXRlYihncGlvX2ludF91bm1hc2tlZFtwb3J0XSAmIGdwaW9faW50X2VuYWJsZWRbcG9ydF0sCisJCUVQOTNYWF9HUElPX1JFRyhpbnRfZW5fcmVnaXN0ZXJfb2Zmc2V0W3BvcnRdKSk7Cit9CisKK3ZvaWQgZXA5M3h4X2dwaW9faW50X21hc2sodW5zaWduZWQgbGluZSkKK3sKKwlncGlvX2ludF91bm1hc2tlZFtsaW5lID4+IDNdICY9IH4oMSA8PCAobGluZSAmIDcpKTsKK30KKwordm9pZCBlcDkzeHhfZ3Bpb19pbnRfZGVib3VuY2UodW5zaWduZWQgaW50IGlycSwgaW50IGVuYWJsZSkKK3sKKwlpbnQgbGluZSA9IGlycV90b19ncGlvKGlycSk7CisJaW50IHBvcnQgPSBsaW5lID4+IDM7CisJaW50IHBvcnRfbWFzayA9IDEgPDwgKGxpbmUgJiA3KTsKKworCWlmIChlbmFibGUpCisJCWdwaW9faW50X2RlYm91bmNlW3BvcnRdIHw9IHBvcnRfbWFzazsKKwllbHNlCisJCWdwaW9faW50X2RlYm91bmNlW3BvcnRdICY9IH5wb3J0X21hc2s7CisKKwlfX3Jhd193cml0ZWIoZ3Bpb19pbnRfZGVib3VuY2VbcG9ydF0sCisJCUVQOTNYWF9HUElPX1JFRyhpbnRfZGVib3VuY2VfcmVnaXN0ZXJfb2Zmc2V0W3BvcnRdKSk7Cit9CitFWFBPUlRfU1lNQk9MKGVwOTN4eF9ncGlvX2ludF9kZWJvdW5jZSk7CisKK3N0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2FiX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKwlpbnQgaTsKKworCXN0YXR1cyA9IF9fcmF3X3JlYWRiKEVQOTNYWF9HUElPX0FfSU5UX1NUQVRVUyk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoc3RhdHVzICYgKDEgPDwgaSkpIHsKKwkJCWludCBncGlvX2lycSA9IGdwaW9fdG9faXJxKEVQOTNYWF9HUElPX0xJTkVfQSgwKSkgKyBpOworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGdwaW9faXJxKTsKKwkJfQorCX0KKworCXN0YXR1cyA9IF9fcmF3X3JlYWRiKEVQOTNYWF9HUElPX0JfSU5UX1NUQVRVUyk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoc3RhdHVzICYgKDEgPDwgaSkpIHsKKwkJCWludCBncGlvX2lycSA9IGdwaW9fdG9faXJxKEVQOTNYWF9HUElPX0xJTkVfQigwKSkgKyBpOworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGdwaW9faXJxKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9fZl9pcnFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJLyoKKwkgKiBtYXAgZGlzY29udGlndW91cyBodyBpcnEgcmFuZ2UgdG8gY29udGlub3VzIHN3IGlycSByYW5nZToKKwkgKgorCSAqICBJUlFfRVA5M1hYX0dQSU97MC4uN31NVVggLT4gZ3Bpb190b19pcnEoRVA5M1hYX0dQSU9fTElORV9GKHswLi43fSkKKwkgKi8KKwlpbnQgcG9ydF9mX2lkeCA9ICgoaXJxICsgMSkgJiA3KSBeIDQ7IC8qIHsxOS4uMjIsNDcuLjUwfSAtPiB7MC4uN30gKi8KKwlpbnQgZ3Bpb19pcnEgPSBncGlvX3RvX2lycShFUDkzWFhfR1BJT19MSU5FX0YoMCkpICsgcG9ydF9mX2lkeDsKKworCWdlbmVyaWNfaGFuZGxlX2lycShncGlvX2lycSk7Cit9CisKK3N0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2lycV9hY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgbGluZSA9IGlycV90b19ncGlvKGlycSk7CisJaW50IHBvcnQgPSBsaW5lID4+IDM7CisJaW50IHBvcnRfbWFzayA9IDEgPDwgKGxpbmUgJiA3KTsKKworCWlmICgoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiBJUlFfVFlQRV9TRU5TRV9NQVNLKSA9PSBJUlFfVFlQRV9FREdFX0JPVEgpIHsKKwkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gXj0gcG9ydF9tYXNrOyAvKiBzd2l0Y2ggZWRnZSBkaXJlY3Rpb24gKi8KKwkJZXA5M3h4X2dwaW9fdXBkYXRlX2ludF9wYXJhbXMocG9ydCk7CisJfQorCisJX19yYXdfd3JpdGViKHBvcnRfbWFzaywgRVA5M1hYX0dQSU9fUkVHKGVvaV9yZWdpc3Rlcl9vZmZzZXRbcG9ydF0pKTsKK30KKworc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9faXJxX21hc2tfYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGxpbmUgPSBpcnFfdG9fZ3BpbyhpcnEpOworCWludCBwb3J0ID0gbGluZSA+PiAzOworCWludCBwb3J0X21hc2sgPSAxIDw8IChsaW5lICYgNyk7CisKKwlpZiAoKGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX1RZUEVfU0VOU0VfTUFTSykgPT0gSVJRX1RZUEVfRURHRV9CT1RIKQorCQlncGlvX2ludF90eXBlMltwb3J0XSBePSBwb3J0X21hc2s7IC8qIHN3aXRjaCBlZGdlIGRpcmVjdGlvbiAqLworCisJZ3Bpb19pbnRfdW5tYXNrZWRbcG9ydF0gJj0gfnBvcnRfbWFzazsKKwllcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyhwb3J0KTsKKworCV9fcmF3X3dyaXRlYihwb3J0X21hc2ssIEVQOTNYWF9HUElPX1JFRyhlb2lfcmVnaXN0ZXJfb2Zmc2V0W3BvcnRdKSk7Cit9CisKK3N0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGxpbmUgPSBpcnFfdG9fZ3BpbyhpcnEpOworCWludCBwb3J0ID0gbGluZSA+PiAzOworCisJZ3Bpb19pbnRfdW5tYXNrZWRbcG9ydF0gJj0gfigxIDw8IChsaW5lICYgNykpOworCWVwOTN4eF9ncGlvX3VwZGF0ZV9pbnRfcGFyYW1zKHBvcnQpOworfQorCitzdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGxpbmUgPSBpcnFfdG9fZ3BpbyhpcnEpOworCWludCBwb3J0ID0gbGluZSA+PiAzOworCisJZ3Bpb19pbnRfdW5tYXNrZWRbcG9ydF0gfD0gMSA8PCAobGluZSAmIDcpOworCWVwOTN4eF9ncGlvX3VwZGF0ZV9pbnRfcGFyYW1zKHBvcnQpOworfQorCisvKgorICogZ3Bpb19pbnRfdHlwZTEgY29udHJvbHMgd2hldGhlciB0aGUgaW50ZXJydXB0IGlzIGxldmVsICgwKSBvcgorICogZWRnZSAoMSkgdHJpZ2dlcmVkLCB3aGlsZSBncGlvX2ludF90eXBlMiBjb250cm9scyB3aGV0aGVyIGl0CisgKiB0cmlnZ2VycyBvbiBsb3cvZmFsbGluZyAoMCkgb3IgaGlnaC9yaXNpbmcgKDEpLgorICovCitzdGF0aWMgaW50IGVwOTN4eF9ncGlvX2lycV90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCWNvbnN0IGludCBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwljb25zdCBpbnQgcG9ydCA9IGdwaW8gPj4gMzsKKwljb25zdCBpbnQgcG9ydF9tYXNrID0gMSA8PCAoZ3BpbyAmIDcpOworCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpbyk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIElSUV9UWVBFX0VER0VfUklTSU5HOgorCQlncGlvX2ludF90eXBlMVtwb3J0XSB8PSBwb3J0X21hc2s7CisJCWdwaW9faW50X3R5cGUyW3BvcnRdIHw9IHBvcnRfbWFzazsKKwkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9lZGdlX2lycTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6CisJCWdwaW9faW50X3R5cGUxW3BvcnRdIHw9IHBvcnRfbWFzazsKKwkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gJj0gfnBvcnRfbWFzazsKKwkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9lZGdlX2lycTsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgorCQlncGlvX2ludF90eXBlMVtwb3J0XSAmPSB+cG9ydF9tYXNrOworCQlncGlvX2ludF90eXBlMltwb3J0XSB8PSBwb3J0X21hc2s7CisJCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVfbGV2ZWxfaXJxOworCQlicmVhazsKKwljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKKwkJZ3Bpb19pbnRfdHlwZTFbcG9ydF0gJj0gfnBvcnRfbWFzazsKKwkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gJj0gfnBvcnRfbWFzazsKKwkJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9sZXZlbF9pcnE7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfRURHRV9CT1RIOgorCQlncGlvX2ludF90eXBlMVtwb3J0XSB8PSBwb3J0X21hc2s7CisJCS8qIHNldCBpbml0aWFsIHBvbGFyaXR5IGJhc2VkIG9uIGN1cnJlbnQgaW5wdXQgbGV2ZWwgKi8KKwkJaWYgKGdwaW9fZ2V0X3ZhbHVlKGdwaW8pKQorCQkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gJj0gfnBvcnRfbWFzazsgLyogZmFsbGluZyAqLworCQllbHNlCisJCQlncGlvX2ludF90eXBlMltwb3J0XSB8PSBwb3J0X21hc2s7IC8qIHJpc2luZyAqLworCQlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlX2VkZ2VfaXJxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9lcnIoImZhaWxlZCB0byBzZXQgaXJxIHR5cGUgJWQgZm9yIGdwaW8gJWRcbiIsIHR5cGUsIGdwaW8pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlncGlvX2ludF9lbmFibGVkW3BvcnRdIHw9IHBvcnRfbWFzazsKKworCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1RZUEVfU0VOU0VfTUFTSzsKKwlkZXNjLT5zdGF0dXMgfD0gdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0s7CisKKwllcDkzeHhfZ3Bpb191cGRhdGVfaW50X3BhcmFtcyhwb3J0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGVwOTN4eF9ncGlvX2lycV9jaGlwID0geworCS5uYW1lCQk9ICJHUElPIiwKKwkuYWNrCQk9IGVwOTN4eF9ncGlvX2lycV9hY2ssCisJLm1hc2tfYWNrCT0gZXA5M3h4X2dwaW9faXJxX21hc2tfYWNrLAorCS5tYXNrCQk9IGVwOTN4eF9ncGlvX2lycV9tYXNrLAorCS51bm1hc2sJCT0gZXA5M3h4X2dwaW9faXJxX3VubWFzaywKKwkuc2V0X3R5cGUJPSBlcDkzeHhfZ3Bpb19pcnFfdHlwZSwKK307CisKK3ZvaWQgX19pbml0IGVwOTN4eF9ncGlvX2luaXRfaXJxKHZvaWQpCit7CisJaW50IGdwaW9faXJxOworCisJZm9yIChncGlvX2lycSA9IGdwaW9fdG9faXJxKDApOworCSAgICAgZ3Bpb19pcnEgPD0gZ3Bpb190b19pcnEoRVA5M1hYX0dQSU9fTElORV9NQVhfSVJRKTsgKytncGlvX2lycSkgeworCQlzZXRfaXJxX2NoaXAoZ3Bpb19pcnEsICZlcDkzeHhfZ3Bpb19pcnFfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihncGlvX2lycSwgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoZ3Bpb19pcnEsIElSUUZfVkFMSUQpOworCX0KKworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FUDkzWFhfR1BJT19BQiwgZXA5M3h4X2dwaW9fYWJfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FUDkzWFhfR1BJTzBNVVgsIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FUDkzWFhfR1BJTzFNVVgsIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FUDkzWFhfR1BJTzJNVVgsIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FUDkzWFhfR1BJTzNNVVgsIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FUDkzWFhfR1BJTzRNVVgsIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FUDkzWFhfR1BJTzVNVVgsIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FUDkzWFhfR1BJTzZNVVgsIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FUDkzWFhfR1BJTzdNVVgsIGVwOTN4eF9ncGlvX2ZfaXJxX2hhbmRsZXIpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBncGlvbGliIGludGVyZmFjZSBmb3IgRVA5M3h4IG9uLWNoaXAgR1BJT3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RydWN0IGVwOTN4eF9ncGlvX2NoaXAgewogCXN0cnVjdCBncGlvX2NoaXAJY2hpcDsKIApAQCAtMzEsMTAgKzI2Miw2IEBACiAKICNkZWZpbmUgdG9fZXA5M3h4X2dwaW9fY2hpcChjKSBjb250YWluZXJfb2YoYywgc3RydWN0IGVwOTN4eF9ncGlvX2NoaXAsIGNoaXApCiAKLS8qIEZyb20gY29yZS5jICovCi1leHRlcm4gdm9pZCBlcDkzeHhfZ3Bpb19pbnRfbWFzayh1bnNpZ25lZCBsaW5lKTsKLWV4dGVybiB2b2lkIGVwOTN4eF9ncGlvX3VwZGF0ZV9pbnRfcGFyYW1zKHVuc2lnbmVkIHBvcnQpOwotCiBzdGF0aWMgaW50IGVwOTN4eF9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAJc3RydWN0IGVwOTN4eF9ncGlvX2NoaXAgKmVwOTN4eF9jaGlwID0gdG9fZXA5M3h4X2dwaW9fY2hpcChjaGlwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggODAyODU4Yi4uNWNkMjI0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDcgKzExLDcgQEAKICAqLwogI2luY2x1ZGUgPG1hY2gvZXA5M3h4LXJlZ3MuaD4KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJCUAgTU1VIGVuYWJsZWQ/CiAJCWxkcmVxCVxyeCwgPUVQOTNYWF9BUEJfUEhZU19CQVNFCUAgUGh5c2ljYWwgYmFzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2VwOTN4eC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaAppbmRleCBkNTUxOTRhLi45M2UyZWNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaApAQCAtOTIsMjEgKzkyLDYgQEAKIAogLyogQVBCIHBlcmlwaGVyYWxzICovCiAjZGVmaW5lIEVQOTNYWF9USU1FUl9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwMTAwMDApCi0jZGVmaW5lIEVQOTNYWF9USU1FUl9SRUcoeCkJCShFUDkzWFhfVElNRVJfQkFTRSArICh4KSkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSMV9MT0FECQlFUDkzWFhfVElNRVJfUkVHKDB4MDApCi0jZGVmaW5lIEVQOTNYWF9USU1FUjFfVkFMVUUJCUVQOTNYWF9USU1FUl9SRUcoMHgwNCkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSMV9DT05UUk9MCQlFUDkzWFhfVElNRVJfUkVHKDB4MDgpCi0jZGVmaW5lIEVQOTNYWF9USU1FUjFfQ0xFQVIJCUVQOTNYWF9USU1FUl9SRUcoMHgwYykKLSNkZWZpbmUgRVA5M1hYX1RJTUVSMl9MT0FECQlFUDkzWFhfVElNRVJfUkVHKDB4MjApCi0jZGVmaW5lIEVQOTNYWF9USU1FUjJfVkFMVUUJCUVQOTNYWF9USU1FUl9SRUcoMHgyNCkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSMl9DT05UUk9MCQlFUDkzWFhfVElNRVJfUkVHKDB4MjgpCi0jZGVmaW5lIEVQOTNYWF9USU1FUjJfQ0xFQVIJCUVQOTNYWF9USU1FUl9SRUcoMHgyYykKLSNkZWZpbmUgRVA5M1hYX1RJTUVSNF9WQUxVRV9MT1cJCUVQOTNYWF9USU1FUl9SRUcoMHg2MCkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSNF9WQUxVRV9ISUdICUVQOTNYWF9USU1FUl9SRUcoMHg2NCkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSM19MT0FECQlFUDkzWFhfVElNRVJfUkVHKDB4ODApCi0jZGVmaW5lIEVQOTNYWF9USU1FUjNfVkFMVUUJCUVQOTNYWF9USU1FUl9SRUcoMHg4NCkKLSNkZWZpbmUgRVA5M1hYX1RJTUVSM19DT05UUk9MCQlFUDkzWFhfVElNRVJfUkVHKDB4ODgpCi0jZGVmaW5lIEVQOTNYWF9USU1FUjNfQ0xFQVIJCUVQOTNYWF9USU1FUl9SRUcoMHg4YykKIAogI2RlZmluZSBFUDkzWFhfSTJTX0JBU0UJCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwMjAwMDApCiAKQEAgLTE2Nyw4ICsxNTIsMTEgQEAKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDEJKDE8PDE2KQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0hBTFQJCUVQOTNYWF9TWVNDT05fUkVHKDB4MDgpCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1RBTkRCWQkJRVA5M1hYX1NZU0NPTl9SRUcoMHgwYykKLSNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DTE9DS19TRVQxCUVQOTNYWF9TWVNDT05fUkVHKDB4MjApCi0jZGVmaW5lIEVQOTNYWF9TWVNDT05fQ0xPQ0tfU0VUMglFUDkzWFhfU1lTQ09OX1JFRygweDI0KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0NMS1NFVDEJCUVQOTNYWF9TWVNDT05fUkVHKDB4MjApCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fQ0xLU0VUMV9OQllQMQkoMTw8MjMpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fQ0xLU0VUMgkJRVA5M1hYX1NZU0NPTl9SRUcoMHgyNCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DTEtTRVQyX05CWVAyCSgxPDwxOSkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DTEtTRVQyX1BMTDJfRU4JKDE8PDE4KQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGRwkJRVA5M1hYX1NZU0NPTl9SRUcoMHg4MCkKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfU1dSU1QJKDE8PDMxKQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19EMU9ORwkoMTw8MzApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCBhZWQyMWNkLi4xYjNmMjVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTIsNCArMiw0IEBACiAgKiBhcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCiAgKi8KIAotI2RlZmluZSBWTUFMTE9DX0VORAkweGZlODAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZmU4MDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvc2ltb25lLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9zaW1vbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDkzOTkwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvc2ltb25lLmMKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtZXA5M3h4L3NpbW9uZS5jCisgKiBTaW1wbGVtYWNoaW5lcyBTaW0uT25lIHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJ5YW4gTWFsbG9uIDxyeWFuQGJsdWV3YXRlcnN5cy5jb20+CisgKgorICogQmFzZWQgb24gdGhlIDIuNi4yNC43IHN1cHBvcnQ6CisgKiAgIENvcHlyaWdodCAoQykgMjAwOSBTaW1wbGVtYWNoaW5lcworICogICBNTUMgc3VwcG9ydCBieSBQZXRlciBJdmFub3YgPGl2YW5vdnBAZ21haWwuY29tPiwgMjAwNworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2ZiLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgc2ltb25lX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNpbW9uZV9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gRVA5M1hYX0NTNl9QSFlTX0JBU0UsCisJLmVuZAkJPSBFUDkzWFhfQ1M2X1BIWVNfQkFTRSArIFNaXzhNIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaW1vbmVfZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmc2ltb25lX2ZsYXNoX3Jlc291cmNlLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNpbW9uZV9mbGFzaF9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGVwOTN4eF9ldGhfZGF0YSBzaW1vbmVfZXRoX2RhdGEgPSB7CisJLnBoeV9pZAkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBlcDkzeHhmYl9tYWNoX2luZm8gc2ltb25lX2ZiX2luZm8gPSB7CisJLm51bV9tb2Rlcwk9IEVQOTNYWEZCX1VTRV9NT0RFREIsCisJLmJwcAkJPSAxNiwKKwkuZmxhZ3MJCT0gRVA5M1hYRkJfVVNFX1NEQ1NOMCB8IEVQOTNYWEZCX1BDTEtfRkFMTElORywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBzaW1vbmVfaTJjX2dwaW9fZGF0YSA9IHsKKwkuc2RhX3BpbgkJPSBFUDkzWFhfR1BJT19MSU5FX0VFREFULAorCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDAsCisJLnNjbF9waW4JCT0gRVA5M1hYX0dQSU9fTElORV9FRUNMSywKKwkuc2NsX2lzX29wZW5fZHJhaW4JPSAwLAorCS51ZGVsYXkJCQk9IDAsCisJLnRpbWVvdXQJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBzaW1vbmVfaTJjX2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJkczEzMzciLCAweDY4KSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHNpbW9uZV9pbml0X21hY2hpbmUodm9pZCkKK3sKKwllcDkzeHhfaW5pdF9kZXZpY2VzKCk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNpbW9uZV9mbGFzaCk7CisJZXA5M3h4X3JlZ2lzdGVyX2V0aCgmc2ltb25lX2V0aF9kYXRhLCAxKTsKKwllcDkzeHhfcmVnaXN0ZXJfZmIoJnNpbW9uZV9mYl9pbmZvKTsKKwllcDkzeHhfcmVnaXN0ZXJfaTJjKCZzaW1vbmVfaTJjX2dwaW9fZGF0YSwgc2ltb25lX2kyY19ib2FyZF9pbmZvLAorCQkJICAgIEFSUkFZX1NJWkUoc2ltb25lX2kyY19ib2FyZF9pbmZvKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoU0lNX09ORSwgIlNpbXBsZW1hY2hpbmVzIFNpbS5PbmUgQm9hcmQiKQorLyogTWFpbnRhaW5lcjogUnlhbiBNYWxsb24gPHJ5YW5AYmx1ZXdhdGVyc3lzLmNvbT4gKi8KKwkucGh5c19pbwk9IEVQOTNYWF9BUEJfUEhZU19CQVNFLAorCS5pb19wZ19vZmZzdAk9ICgoRVA5M1hYX0FQQl9WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTBfUEhZU19CQVNFICsgMHgxMDAsCisJLm1hcF9pbwkJPSBlcDkzeHhfbWFwX2lvLAorCS5pbml0X2lycQk9IGVwOTN4eF9pbml0X2lycSwKKwkudGltZXIJCT0gJmVwOTN4eF90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gc2ltb25lX2luaXRfbWFjaGluZSwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9zbmFwcGVyY2wxNS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvc25hcHBlcmNsMTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTEzNGIwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvc25hcHBlcmNsMTUuYwpAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtZXA5M3h4L3NuYXBwZXJjbDE1LmMKKyAqIEJsdWV3YXRlciBTeXN0ZW1zIFNuYXBwZXIgQ0wxNSBzeXN0ZW0gbW9kdWxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEJsdWV3YXRlciBTeXN0ZW1zIEx0ZAorICogQXV0aG9yOiBSeWFuIE1hbGxvbiA8cnlhbkBibHVld2F0ZXJzeXMuY29tPgorICoKKyAqIE5BTkQgY29kZSBhZGFwdGVkIGZyb20gZHJpdmVyIGJ5OgorICogICBBbmRyZSBSZW5hdWQgPGFuZHJlQGJsdWV3YXRlcnN5cy5jb20+CisgKiAgIEphbWVzIFIuIE1jS2Fza2lsbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorCisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZmIuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCisjZGVmaW5lIFNOQVBQRVJDTDE1X05BTkRfQkFTRQkoRVA5M1hYX0NTN19QSFlTX0JBU0UgKyBTWl8xNk0pCisKKyNkZWZpbmUgU05BUFBFUkNMMTVfTkFORF9XUE4JKDEgPDwgOCkgIC8qIFdyaXRlIHByb3RlY3QgKGFjdGl2ZSBsb3cpICovCisjZGVmaW5lIFNOQVBQRVJDTDE1X05BTkRfQUxFCSgxIDw8IDkpICAvKiBBZGRyZXNzIGxhdGNoICovCisjZGVmaW5lIFNOQVBQRVJDTDE1X05BTkRfQ0xFCSgxIDw8IDEwKSAvKiBDb21tYW5kIGxhdGNoICovCisjZGVmaW5lIFNOQVBQRVJDTDE1X05BTkRfQ0VOCSgxIDw8IDExKSAvKiBDaGlwIGVuYWJsZSAoYWN0aXZlIGxvdykgKi8KKyNkZWZpbmUgU05BUFBFUkNMMTVfTkFORF9SRFkJKDEgPDwgMTQpIC8qIERldmljZSByZWFkeSAqLworCisjZGVmaW5lIE5BTkRfQ1RSTF9BRERSKGNoaXApIAkoY2hpcC0+SU9fQUREUl9XICsgMHg0MCkKKworc3RhdGljIHZvaWQgc25hcHBlcmNsMTVfbmFuZF9jbWRfY3RybChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgY3RybCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXN0YXRpYyB1MTYgbmFuZF9zdGF0ZSA9IFNOQVBQRVJDTDE1X05BTkRfV1BOOworCXUxNiBzZXQ7CisKKwlpZiAoY3RybCAmIE5BTkRfQ1RSTF9DSEFOR0UpIHsKKwkJc2V0ID0gU05BUFBFUkNMMTVfTkFORF9DRU4gfCBTTkFQUEVSQ0wxNV9OQU5EX1dQTjsKKworCQlpZiAoY3RybCAmIE5BTkRfTkNFKQorCQkJc2V0ICY9IH5TTkFQUEVSQ0wxNV9OQU5EX0NFTjsKKwkJaWYgKGN0cmwgJiBOQU5EX0NMRSkKKwkJCXNldCB8PSBTTkFQUEVSQ0wxNV9OQU5EX0NMRTsKKwkJaWYgKGN0cmwgJiBOQU5EX0FMRSkKKwkJCXNldCB8PSBTTkFQUEVSQ0wxNV9OQU5EX0FMRTsKKworCQluYW5kX3N0YXRlICY9IH4oU05BUFBFUkNMMTVfTkFORF9DRU4gfAorCQkJCVNOQVBQRVJDTDE1X05BTkRfQ0xFIHwKKwkJCQlTTkFQUEVSQ0wxNV9OQU5EX0FMRSk7CisJCW5hbmRfc3RhdGUgfD0gc2V0OworCQlfX3Jhd193cml0ZXcobmFuZF9zdGF0ZSwgTkFORF9DVFJMX0FERFIoY2hpcCkpOworCX0KKworCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKKwkJX19yYXdfd3JpdGV3KChjbWQgJiAweGZmKSB8IG5hbmRfc3RhdGUsIGNoaXAtPklPX0FERFJfVyk7Cit9CisKK3N0YXRpYyBpbnQgc25hcHBlcmNsMTVfbmFuZF9kZXZfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKworCXJldHVybiAhIShfX3Jhd19yZWFkdyhOQU5EX0NUUkxfQUREUihjaGlwKSkgJiBTTkFQUEVSQ0wxNV9OQU5EX1JEWSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpzbmFwcGVyY2wxNV9uYW5kX3BhcnRfcHJvYmVzW10gPSB7ImNtZGxpbmVwYXJ0IiwgTlVMTH07CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzbmFwcGVyY2wxNV9uYW5kX3BhcnRzW10gPSB7CisJeworCQkubmFtZQkJPSAiS2VybmVsIiwKKwkJLm9mZnNldAkJPSAwLAorCQkuc2l6ZQkJPSBTWl8yTSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gIkZpbGVzeXN0ZW0iLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9uYW5kX2RhdGEgc25hcHBlcmNsMTVfbmFuZF9kYXRhID0geworCS5jaGlwID0geworCQkubnJfY2hpcHMJCT0gMSwKKwkJLnBhcnRfcHJvYmVfdHlwZXMJPSBzbmFwcGVyY2wxNV9uYW5kX3BhcnRfcHJvYmVzLAorCQkucGFydGl0aW9ucwkJPSBzbmFwcGVyY2wxNV9uYW5kX3BhcnRzLAorCQkubnJfcGFydGl0aW9ucwkJPSBBUlJBWV9TSVpFKHNuYXBwZXJjbDE1X25hbmRfcGFydHMpLAorCQkub3B0aW9ucwkJPSBOQU5EX05PX0FVVE9JTkNSLAorCQkuY2hpcF9kZWxheQkJPSAyNSwKKwl9LAorCS5jdHJsID0geworCQkuZGV2X3JlYWR5CQk9IHNuYXBwZXJjbDE1X25hbmRfZGV2X3JlYWR5LAorCQkuY21kX2N0cmwJCT0gc25hcHBlcmNsMTVfbmFuZF9jbWRfY3RybCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbmFwcGVyY2wxNV9uYW5kX3Jlc291cmNlW10gPSB7CisJeworCQkuc3RhcnQJCT0gU05BUFBFUkNMMTVfTkFORF9CQVNFLAorCQkuZW5kCQk9IFNOQVBQRVJDTDE1X05BTkRfQkFTRSArIFNaXzRLIC0gMSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbmFwcGVyY2wxNV9uYW5kX2RldmljZSA9IHsKKwkubmFtZQkJCT0gImdlbl9uYW5kIiwKKwkuaWQJCQk9IC0xLAorCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZzbmFwcGVyY2wxNV9uYW5kX2RhdGEsCisJLnJlc291cmNlCQk9IHNuYXBwZXJjbDE1X25hbmRfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShzbmFwcGVyY2wxNV9uYW5kX3Jlc291cmNlKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhIHNuYXBwZXJjbDE1X2V0aF9kYXRhID0geworCS5waHlfaWQJCQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgc25hcHBlcmNsMTVfaTJjX2dwaW9fZGF0YSA9IHsKKwkuc2RhX3BpbgkJPSBFUDkzWFhfR1BJT19MSU5FX0VFREFULAorCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDAsCisJLnNjbF9waW4JCT0gRVA5M1hYX0dQSU9fTElORV9FRUNMSywKKwkuc2NsX2lzX29wZW5fZHJhaW4JPSAwLAorCS51ZGVsYXkJCQk9IDAsCisJLnRpbWVvdXQJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBzbmFwcGVyY2wxNV9pMmNfZGF0YVtdID0geworCXsKKwkJLyogQXVkaW8gY29kZWMgKi8KKwkJSTJDX0JPQVJEX0lORk8oInRsdjMyMGFpYzIzIiwgMHgxYSksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXA5M3h4ZmJfbWFjaF9pbmZvIHNuYXBwZXJjbDE1X2ZiX2luZm8gPSB7CisJLm51bV9tb2RlcwkJPSBFUDkzWFhGQl9VU0VfTU9ERURCLAorCS5icHAJCQk9IDE2LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHNuYXBwZXJjbDE1X2luaXRfbWFjaGluZSh2b2lkKQoreworCWVwOTN4eF9pbml0X2RldmljZXMoKTsKKwllcDkzeHhfcmVnaXN0ZXJfZXRoKCZzbmFwcGVyY2wxNV9ldGhfZGF0YSwgMSk7CisJZXA5M3h4X3JlZ2lzdGVyX2kyYygmc25hcHBlcmNsMTVfaTJjX2dwaW9fZGF0YSwgc25hcHBlcmNsMTVfaTJjX2RhdGEsCisJCQkgICAgQVJSQVlfU0laRShzbmFwcGVyY2wxNV9pMmNfZGF0YSkpOworCWVwOTN4eF9yZWdpc3Rlcl9mYigmc25hcHBlcmNsMTVfZmJfaW5mbyk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzbmFwcGVyY2wxNV9uYW5kX2RldmljZSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoU05BUFBFUl9DTDE1LCAiQmx1ZXdhdGVyIFN5c3RlbXMgU25hcHBlciBDTDE1IikKKwkvKiBNYWludGFpbmVyOiBSeWFuIE1hbGxvbiA8cnlhbkBibHVld2F0ZXJzeXMuY29tPiAqLworCS5waHlzX2lvCT0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IEVQOTNYWF9TRENFMF9QSFlTX0JBU0UgKyAweDEwMCwKKwkubWFwX2lvCQk9IGVwOTN4eF9tYXBfaW8sCisJLmluaXRfaXJxCT0gZXA5M3h4X2luaXRfaXJxLAorCS50aW1lciAJCT0gJmVwOTN4eF90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gc25hcHBlcmNsMTVfaW5pdF9tYWNoaW5lLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jb21tb24uYwppbmRleCA0MWZlYmM3Li5lM2JjM2Y2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NvbW1vbi5jCkBAIC0zMiwxMiArMzIsMTMgQEAKIAogRVhQT1JUX1NZTUJPTChtZW1fZmNsa18yMTI4NSk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9mY2xrKGNoYXIgKiphcmcpCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV9mY2xrKGNoYXIgKmFyZykKIHsKLQltZW1fZmNsa18yMTI4NSA9IHNpbXBsZV9zdHJ0b3VsKCphcmcsIGFyZywgMCk7CisJbWVtX2ZjbGtfMjEyODUgPSBzaW1wbGVfc3RydG91bChhcmcsIE5VTEwsIDApOworCXJldHVybiAwOwogfQogCi1fX2Vhcmx5X3BhcmFtKCJtZW1fZmNsa18yMTI4NT0iLCBlYXJseV9mY2xrKTsKK2Vhcmx5X3BhcmFtKCJtZW1fZmNsa18yMTI4NSIsIGVhcmx5X2ZjbGspOwogCiBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV90YWdfbWVtY2xrKGNvbnN0IHN0cnVjdCB0YWcgKnRhZykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA0MzI5YjgxLi42MGRkYTEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xNSw3ICsxNSw3IEBACiAKICNpZm5kZWYgQ09ORklHX0RFQlVHX0RDMjEyODVfUE9SVAogCS8qIEZvciBOZXRXaW5kZXIgZGVidWdnaW5nICovCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQltb3ZlcQlccngsICMweDdjMDAwMDAwCUAgcGh5c2ljYWwKQEAgLTMyLDcgKzMyLDcgQEAKIAkJLmVxdQlkYzIxMjg1X2hpZ2gsIEFSTUNTUl9CQVNFICYgMHhmZjAwMDAwMAogCQkuZXF1CWRjMjEyODVfbG93LCAgQVJNQ1NSX0JBU0UgJiAweDAwZmZmZmZmCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgIzB4NDIwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggZDA0YTZlYS4uYWQ0NzcwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDcgKzExLDcgQEAKICAqLwogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotCS5tYWNybwlhZGRydWFydCxyeAorCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJdHN0CVxyeCwgIzEJCQkJCUAgTU1VIGVuYWJsZWQ/CiAJbGRyZXEJXHJ4LCA9R0VNSU5JX1VBUlRfQkFTRQkJCUAgcGh5c2ljYWwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IDgzZTUzNmQuLjQ1MzcxZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtNyw0ICs3LDQgQEAKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2RlZmluZSBWTUFMTE9DX0VORAkweEYwMDAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZjAwMDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1oNzIweC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtaDcyMHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggNjI5NGExMy4uYTllZThmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1oNzIweC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWg3MjB4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xNCw3ICsxNCw3IEBACiAJCS5lcXUgICAgaW9fdmlydCwgSU9fQkFTRQogCQkuZXF1ICAgIGlvX3BoeXMsIElPX1NUQVJUCiAKLQkJLm1hY3JvICBhZGRydWFydCxyeAorCQkubWFjcm8gIGFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYyAgICAgcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QgICAgIFxyeCwgIzEgIAkgICAgICAgQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEgICBccngsICNpb19waHlzCSAgICAgICBAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jb3JlLmMKaW5kZXggYTBmNjBlNS4uOGIzOTBlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY29yZS5jCkBAIC0xNDQsOCArMTQ0LDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCi0JCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKIAkJc3RydWN0IGFtYmFfZGV2aWNlICpkID0gYW1iYV9kZXZzW2ldOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGQzNDdkNjUuLjg3YTY4ODggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDcgKzExLDcgQEAKICAqCiAqLwogCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQltb3ZlcQlccngsICMweDE2MDAwMDAwCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYwppbmRleCAzZjM1MjkzLi42NmVmODZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKQEAgLTU1OCw5ICs1NTgsNyBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3BfbG9va3Vwcyk7IGkrKykKLQkJY2xrZGV2X2FkZCgmY3BfbG9va3Vwc1tpXSk7Ci0KKwljbGtkZXZfYWRkX3RhYmxlKGNwX2xvb2t1cHMsIEFSUkFZX1NJWkUoY3BfbG9va3VwcykpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGludGNwX2RldnMsIEFSUkFZX1NJWkUoaW50Y3BfZGV2cykpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW1iYV9kZXZzKTsgaSsrKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggOTAzN2QyZS4uYzlkNmJhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTEsNyArMTEsNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotCS5tYWNybwlhZGRydWFydCwgcngKKwkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCXRzdAlccngsICMxCQkJQCBtbXUgZW5hYmxlZD8KIAltb3ZlcQlccngsICMweGZmMDAwMDAwCUAgcGh5c2ljYWwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pby5jIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lvLmMKaW5kZXggNTI5NTgwOS4uNDg2NDJlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2lvLmMKQEAgLTYxLDkgKzYxLDkgQEAKIAkJCSAgICAgICAgIChjb29raWUgLSBJT1AxM1hYX1BDSUVfTE9XRVJfTUVNX1JBKSk7CiAJCWJyZWFrOwogCWNhc2UgSU9QMTNYWF9QQklfTE9XRVJfTUVNX1JBIC4uLiBJT1AxM1hYX1BCSV9VUFBFUl9NRU1fUkE6Ci0JCXJldHZhbCA9IF9fYXJtX2lvcmVtYXAoSU9QMTNYWF9QQklfTE9XRVJfTUVNX1BBICsKKwkJcmV0dmFsID0gX19hcm1faW9yZW1hcF9jYWxsZXIoSU9QMTNYWF9QQklfTE9XRVJfTUVNX1BBICsKIAkJCQkgICAgICAgKGNvb2tpZSAtIElPUDEzWFhfUEJJX0xPV0VSX01FTV9SQSksCi0JCQkJICAgICAgIHNpemUsIG10eXBlKTsKKwkJCQkgICAgICAgc2l6ZSwgbXR5cGUsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJCWJyZWFrOwogCWNhc2UgSU9QMTNYWF9QQ0lFX0xPV0VSX0lPX1BBIC4uLiBJT1AxM1hYX1BDSUVfVVBQRVJfSU9fUEE6CiAJCXJldHZhbCA9ICh2b2lkICopIElPUDEzWFhfUENJRV9JT19QSFlTX1RPX1ZJUlQoY29va2llKTsKQEAgLTc1LDcgKzc1LDggQEAKIAkJcmV0dmFsID0gKHZvaWQgKikgSU9QMTNYWF9QTU1SX1BIWVNfVE9fVklSVChjb29raWUpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR2YWwgPSBfX2FybV9pb3JlbWFwKGNvb2tpZSwgc2l6ZSwgbXR5cGUpOworCQlyZXR2YWwgPSBfX2FybV9pb3JlbWFwX2NhbGxlcihjb29raWUsIHNpemUsIG10eXBlLAorCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJfQogCiAJcmV0dXJuIHJldHZhbDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggNThiMDE2Ni4uNzM2YWZlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDcgKzExLDcgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LCByeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbW92CVxyeCwgIzB4ZmUwMDAwMDAJQCBwaHlzaWNhbCBhcyB3ZWxsIGFzIHZpcnR1YWwKIAkJb3JyCVxyeCwgXHJ4LCAjMHgwMDgwMDAwMAlAIGxvY2F0aW9uIG9mIHRoZSBVQVJUCiAJCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCA4NWNlYjA5Li5jNDg2MmQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTIsNCArMiw0IEBACiAgKiBhcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCiAgKi8KIAotI2RlZmluZSBWTUFMTE9DX0VORAkweGZlMDAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZmUwMDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBhNjBjOWVmLi5hZGRiMmRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTEsNyArMTEsNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotCQkubWFjcm8JYWRkcnVhcnQsIHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgbW11IGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgIzB4ZmYwMDAwMDAJQCBwaHlzaWNhbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggZjlmOTlkZS4uNDgzMzFkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0yLDQgKzIsNCBAQAogICogYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAogICovCiAKLSNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZTAwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORAkweGZlMDAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA5MDRmZjU2Li42YTgyNzY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMSw3ICsxMSw3IEBACiAgKgogKi8KIAotCQkubWFjcm8gIGFkZHJ1YXJ0LHJ4CisJCS5tYWNybyAgYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQltb3ZlcQlccngsICMweGMwMDAwMDAwCUAgUGh5c2ljYWwgYmFzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCBkMTk1ZTM1Li42MWM4ZGFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMTcsNCArMTcsNCBAQAogICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCiAgKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCiAgKi8KLSNkZWZpbmUgVk1BTExPQ19FTkQJICAgIDB4ZmIwMDAwMDAKKyNkZWZpbmUgVk1BTExPQ19FTkQJICAgIDB4ZmIwMDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDkwNWRiMzEuLmE4MmUzNzU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMiw3ICsxMiw3IEBACiAgKi8KICNpbmNsdWRlIDxtYWNoL2l4cDIzeHguaD4KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJCUAgbW11IGVuYWJsZWQ/CiAJCWxkcmVxCVxyeCwgPUlYUDIzWFhfUEVSSVBIRVJBTF9QSFlTIAlAIHBoeXNpY2FsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IGRkNTE5ZjYuLjg5NmM1NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC03LDQgKzcsNCBAQAogICogc3BlY2lmaWMgc3RhdGljIEkvTy4KICAqLwogCi0jZGVmaW5lIFZNQUxMT0NfRU5ECSgweGVjMDAwMDAwKQorI2RlZmluZSBWTUFMTE9DX0VORAkoMHhlYzAwMDAwMFVMKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYwppbmRleCAzYmJmNDBmLi43MTcyOGQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYwpAQCAtNDI3LDYgKzQyNywxNyBAQAogfQogCiAvKgorICogc2NoZWRfY2xvY2soKQorICovCit1bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCkKK3sKKwljeWNsZV90IGN5YyA9IGl4cDR4eF9nZXRfY3ljbGVzKE5VTEwpOworCXN0cnVjdCBjbG9ja3NvdXJjZSAqY3MgPSAmY2xvY2tzb3VyY2VfaXhwNHh4OworCisJcmV0dXJuIGNsb2Nrc291cmNlX2N5YzJucyhjeWMsIGNzLT5tdWx0LCBjcy0+c2hpZnQpOworfQorCisvKgogICogY2xvY2tldmVudHMKICAqLwogc3RhdGljIGludCBpeHA0eHhfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBldnQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDdjNmE2OTEuLjg5Mzg3M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMCw3ICsxMCw3IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICovCiAKLSAgICAgICAgICAgICAgICAubWFjcm8gIGFkZHJ1YXJ0LHJ4CisgICAgICAgICAgICAgICAgLm1hY3JvICBhZGRydWFydCwgcngsIHRtcAogICAgICAgICAgICAgICAgIG1yYyAgICAgcDE1LCAwLCBccngsIGMxLCBjMAogICAgICAgICAgICAgICAgIHRzdCAgICAgXHJ4LCAjMSAgICAgICAgICAgICAgICAgQCBNTVUgZW5hYmxlZD8KICAgICAgICAgICAgICAgICBtb3ZlcSAgIFxyeCwgIzB4YzgwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IDdiMzU4MGIuLjliY2Q2NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMSw1ICsxLDUgQEAKIC8qCiAgKiBhcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCiAgKi8KLSNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKDB4RkYwMDAwMDApCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgICgweGZmMDAwMDAwVUwpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGE0YTU1YzEuLmQwNjA2NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtOCw3ICs4LDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvYnJpZGdlLXJlZ3MuaD4KIAotCS5tYWNybwlhZGRydWFydCxyeAorCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJdHN0CVxyeCwgIzEJCQkJCUAgTU1VIGVuYWJsZWQ/CiAJbGRyZXEJXHJ4LCA9S0lSS1dPT0RfUkVHU19QSFlTX0JBU0UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCA4ZjQ4MjYwLi5iZjE2MmNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0yLDQgKzIsNCBAQAogICogYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCiAgKi8KIAotI2RlZmluZSBWTUFMTE9DX0VORAkweGZlODAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZmU4MDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCAzNzgyYzM1Li5jZjIwOTVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtdWFydC5oPgogCi0JLm1hY3JvCWFkZHJ1YXJ0LCByeAorCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCQlAIE1NVSBlbmFibGVkPwogCQlsZHJlcQlccngsID1LUzg2OTVfVUFSVF9QQQkJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDM0ZWVkMmEuLmI2OWVkMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbDcyMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTQsNyArMTQsNyBAQAogCQkuZXF1CWlvX3ZpcnQsIElPX0JBU0UKIAkJLmVxdQlpb19waHlzLCBJT19TVEFSVAogCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQltb3ZlcQlccngsICNpb19waHlzCQlAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDg1MTQxZWQuLmMwZGNiYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTE0LDcgKzE0LDcgQEAKIAlAIEl0IGlzIG5vdCBrbm93biBpZiB0aGlzIHdpbGwgYmUgYXBwcm9wcmlhdGUgZm9yIGV2ZXJ5IDQweAogCUAgYm9hcmQuCiAKLQkJLm1hY3JvICBhZGRydWFydCxyeAorCQkubWFjcm8gIGFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYyAgICAgcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QgICAgIFxyeCwgIzEgICAgICAgICAgICAgICAgIEAgTU1VIGVuYWJsZWQ/CiAJCW1vdiAgICAgXHJ4LCAjMHgwMDAwMDcwMCAgICAgICAgQCBvZmZzZXQgZnJvbSBiYXNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IDNmYmQ0OTQuLmQ2MmRhNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC03LDQgKzcsNCBAQAogICogIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKi8KLSNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKDB4ZTgwMDAwMDApCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgICgweGU4MDAwMDAwVUwpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxva2kvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWxva2kvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggYThjMjBiZC4uMzEzNmM5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1sb2tpL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtOCw3ICs4LDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvbG9raS5oPgogCi0JLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAl0c3QJXHJ4LCAjMQkJCQkJQCBNTVUgZW5hYmxlZD8KIAlsZHJlcQlccngsID1MT0tJX1JFR1NfUEhZU19CQVNFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxva2kvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IDhkYzNiZmMuLjVkY2JkODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0yLDQgKzIsNCBAQAogICogYXJjaC9hcm0vbWFjaC1sb2tpL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKICAqLwogCi0jZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZmU4MDAwMDAKKyNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZTgwMDAwMFVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvY2xvY2suYwppbmRleCAyYTQ2ZWQ1Li44ODZlMDU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmMKQEAgLTg4LDExICs4OCwzIEBACiAJcmV0dXJuIHJhdGU7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7Ci0KLXZvaWQgY2xrc19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqY2xrcywgc2l6ZV90IG51bSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKLQkJY2xrZGV2X2FkZCgmY2xrc1tpXSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvY2xvY2suaAppbmRleCBlZWZmZmJlLi4wMTZhZTk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmgKQEAgLTY4LDUgKzY4LDMgQEAKIAogZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX3B4YTE2OF9ncGlvOwogZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX3B4YTE2OF90aW1lcnM7Ci0KLWV4dGVybiB2b2lkIGNsa3NfcmVnaXN0ZXIoc3RydWN0IGNsa19sb29rdXAgKiwgc2l6ZV90KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggYTg1MGY4Ny4uNzZkZWZmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDcgKzExLDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvYWRkci1tYXAuaD4KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJCUAgTU1VIGVuYWJsZWQ/CiAJCWxkcmVxCVxyeCwgPUFQQl9QSFlTX0JBU0UJCUAgcGh5c2ljYWwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IGI2MGNjYWYuLjFkMGJhYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMiw0ICsyLDQgQEAKICAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKICAqLwogCi0jZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZmUwMDAwMDAKKyNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZTAwMDAwMFVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9weGExNjguYyBiL2FyY2gvYXJtL21hY2gtbW1wL3B4YTE2OC5jCmluZGV4IDM3ZGJkZGUuLjE4NzNjODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL3B4YTE2OC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL3B4YTE2OC5jCkBAIC05NCw3ICs5NCw3IEBACiAJCW1mcF9pbml0X2Jhc2UoTUZQUl9WSVJUX0JBU0UpOwogCQltZnBfaW5pdF9hZGRyKHB4YTE2OF9tZnBfYWRkcl9tYXApOwogCQlweGFfaW5pdF9kbWEoSVJRX1BYQTE2OF9ETUFfSU5UMCwgMzIpOwotCQljbGtzX3JlZ2lzdGVyKEFSUkFZX0FORF9TSVpFKHB4YTE2OF9jbGtyZWdzKSk7CisJCWNsa2Rldl9hZGRfdGFibGUoQVJSQVlfQU5EX1NJWkUocHhhMTY4X2Nsa3JlZ3MpKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL3B4YTkxMC5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvcHhhOTEwLmMKaW5kZXggZDQwNDk1MC4uNDZmMmQ2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvcHhhOTEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvcHhhOTEwLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCQltZnBfaW5pdF9iYXNlKE1GUFJfVklSVF9CQVNFKTsKIAkJbWZwX2luaXRfYWRkcihweGE5MTBfbWZwX2FkZHJfbWFwKTsKIAkJcHhhX2luaXRfZG1hKElSUV9QWEE5MTBfRE1BX0lOVDAsIDMyKTsKLQkJY2xrc19yZWdpc3RlcihBUlJBWV9BTkRfU0laRShweGE5MTBfY2xrcmVncykpOworCQljbGtkZXZfYWRkX3RhYmxlKEFSUkFZX0FORF9TSVpFKHB4YTkxMF9jbGtyZWdzKSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGQ0ODc0N2UuLjUyODc1MGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSA8bWFjaC9tc21faW9tYXAuaD4KIAogI2lmZGVmIENPTkZJR19NU01fREVCVUdfVUFSVAotCS5tYWNybwlhZGRydWFydCxyeAorCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCUAgc2VlIGlmIHRoZSBNTVUgaXMgZW5hYmxlZCBhbmQgc2VsZWN0IGFwcHJvcHJpYXRlIGJhc2UgYWRkcmVzcwogCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJdHN0CVxyeCwgIzEKQEAgLTQwLDcgKzQwLDcgQEAKIAliZXEJMTAwMWIKIAkuZW5kbQogI2Vsc2UKLQkubWFjcm8JYWRkcnVhcnQscngKKwkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkuZW5kbQogCiAJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9pby5jIGIvYXJjaC9hcm0vbWFjaC1tc20vaW8uYwppbmRleCAxYzVlN2RhLi4wNWY5NmI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2lvLmMKQEAgLTc2LDUgKzc2LDYgQEAKIAkJCW10eXBlID0gTVRfREVWSUNFX05PTlNIQVJFRDsKIAl9CiAKLQlyZXR1cm4gX19hcm1faW9yZW1hcChwaHlzX2FkZHIsIHNpemUsIG10eXBlKTsKKwlyZXR1cm4gX19hcm1faW9yZW1hcF9jYWxsZXIocGh5c19hZGRyLCBzaXplLCBtdHlwZSwKKwkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBhMDY0NDJmLi5jZDgxNjg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC04LDcgKzgsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9tdjc4eHgwLmg+CiAKLQkubWFjcm8JYWRkcnVhcnQscngKKwkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCXRzdAlccngsICMxCQkJCQlAIE1NVSBlbmFibGVkPwogCWxkcmVxCVxyeCwgPU1WNzhYWDBfUkVHU19QSFlTX0JBU0UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggMWM0OTU0My4uYmEyNmZlOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTIsNCArMiw0IEBACiAgKiBhcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAogICovCiAKLSNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZTAwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORAkweGZlMDAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgxL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14MS9jbG9jay5jCmluZGV4IGQxYjU4ODUuLjZjZjJkNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgxL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDEvY2xvY2suYwpAQCAtNTcwLDcgKzU3MCw2IEBACiBpbnQgX19pbml0IG14MV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpCiB7CiAJdW5zaWduZWQgaW50IHJlZzsKLQlpbnQgaTsKIAogCS8qIGRpc2FibGUgY2xvY2tzIHdlIGFyZSBhYmxlIHRvICovCiAJX19yYXdfd3JpdGVsKDAsIFNDTV9HQ0NSKTsKQEAgLTU5Miw4ICs1OTEsNyBAQAogCXJlZyA9IChyZWcgJiBDQ01fQ1NDUl9DTEtPX01BU0spID4+IENDTV9DU0NSX0NMS09fT0ZGU0VUOwogCWNsa29fY2xrLnBhcmVudCA9IChzdHJ1Y3QgY2xrICopY2xrb19jbG9ja3NbcmVnXTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCi0JCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CiAKIAljbGtfZW5hYmxlKCZoY2xrKTsKIAljbGtfZW5hYmxlKCZmY2xrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDIxLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyMS5jCmluZGV4IDkxOTAxYjUuLmU4MmI0ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDIxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjEuYwpAQCAtOTY4LDcgKzk2OCw2IEBACiAgKi8KIGludCBfX2luaXQgbXgyMV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGxyZWYsIHVuc2lnbmVkIGxvbmcgaHJlZikKIHsKLQlpbnQgaTsKIAl1MzIgY3NjcjsKIAogCWV4dGVybmFsX2xvd19yZWZlcmVuY2UgPSBscmVmOwpAQCAtOTg2LDggKzk4NSw3IEBACiAJZWxzZQogCQlzcGxsX2Nsay5wYXJlbnQgPSAmZnBtX2NsazsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCi0JCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CiAKIAkvKiBUdXJuIG9mZiBhbGwgY2xvY2sgZ2F0ZXMgKi8KIAlfX3Jhd193cml0ZWwoMCwgQ0NNX1BDQ1IwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMgYi9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jCmluZGV4IGIwMTBiZjkuLjE4YzUzYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYwpAQCAtNzE5LDcgKzcxOSw2IEBACiBpbnQgX19pbml0IG14MjdfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKQogewogCXUzMiBjc2NyID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpOwotCWludCBpOwogCiAJZXh0ZXJuYWxfaGlnaF9yZWZlcmVuY2UgPSBmcmVmOwogCkBAIC03MzYsOCArNzM1LDcgQEAKIAogCXRvMl9hZGp1c3RfY2xvY2tzKCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQotCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKKwljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOwogCiAJLyogVHVybiBvZmYgYWxsIGNsb2NrcyB3ZSBkbyBub3QgbmVlZCAqLwogCV9fcmF3X3dyaXRlbCgwLCBDQ01fUENDUjApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYwppbmRleCA2YWNjODhiLi4zN2UxMzU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYwpAQCAtMjE4LDEwICsyMTgsNyBAQAogCiBpbnQgX19pbml0IG14MjVfY2xvY2tzX2luaXQodm9pZCkKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCi0JCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CiAKIAkvKiBUdXJuIG9mZiBhbGwgY2xvY2tzIGV4Y2VwdCB0aGUgb25lcyB3ZSBuZWVkIHRvIHN1cnZpdmUsIG5hbWVseToKIAkgKiBFTUksIEdQSU8xLTMgKENDTV9DR0NSMVsxODoxNl0pLCBHUFQxLCBJT01VWEMgKENDTV9DR0NSMVsyN10pLCBJSU0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYwppbmRleCA3NTg0YjRjLi5mM2Y0MWZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKQEAgLTQ4NSwxNSArNDg1LDEzIEBACiAKIGludCBfX2luaXQgbXgzNV9jbG9ja3NfaW5pdCgpCiB7Ci0JaW50IGk7CiAJdW5zaWduZWQgaW50IGxsID0gMDsKIAogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0xMKSAmJiAhZGVmaW5lZChDT05GSUdfREVCVUdfSUNFRENDKQogCWxsID0gKDMgPDwgMTYpOwogI2VuZGlmCiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQotCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKKwljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOwogCiAJLyogVHVybiBvZmYgYWxsIGNsb2NrcyBleGNlcHQgdGhlIG9uZXMgd2UgbmVlZCB0byBzdXJ2aXZlLCBuYW1lbHk6CiAJICogRU1JLCBHUElPMS8yLzMsIEdQVCwgSU9NVVgsIE1BWCBhbmQgZXZlbnR1YWxseSB1YXJ0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYwppbmRleCAyN2EzMThhLi5iNWMzOWEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMKQEAgLTU3OCwxMiArNTc4LDEwIEBACiBpbnQgX19pbml0IG14MzFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKQogewogCXUzMiByZWc7Ci0JaW50IGk7CiAKIAlja2loX3JhdGUgPSBmcmVmOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG9va3Vwcyk7IGkrKykKLQkJY2xrZGV2X2FkZCgmbG9va3Vwc1tpXSk7CisJY2xrZGV2X2FkZF90YWJsZShsb29rdXBzLCBBUlJBWV9TSVpFKGxvb2t1cHMpKTsKIAogCS8qIGNoYW5nZSB0aGUgY3NpX2NsayBwYXJlbnQgaWYgbmVjZXNzYXJ5ICovCiAJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQ01SKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvY2xvY2suYwppbmRleCBlY2ZhMzdmLi41Yzg1MDc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14YzkxMjMxL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9jbG9jay5jCkBAIC02MjQsNyArNjI0LDYgQEAKIGludCBfX2luaXQgbXhjOTEyMzFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKQogewogCXZvaWQgX19pb21lbSAqZ3B0X2Jhc2U7Ci0JaW50IGk7CiAKIAlja2loX3JhdGUgPSBmcmVmOwogCkBAIC02MzIsOCArNjMxLDcgQEAKIAlzZGhjX2Nsa1swXS5wYXJlbnQgPSBjbGtfc2RoY19wYXJlbnQoJnNkaGNfY2xrWzBdKTsKIAlzZGhjX2Nsa1sxXS5wYXJlbnQgPSBjbGtfc2RoY19wYXJlbnQoJnNkaGNfY2xrWzFdKTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCi0JCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CiAKIAlncHRfYmFzZSA9IE1YQzkxMjMxX0lPX0FERFJFU1MoTVhDOTEyMzFfR1BUMV9CQVNFX0FERFIpOwogCW14Y190aW1lcl9pbml0KCZncHRfY2xrLCBncHRfYmFzZSwgTVhDOTEyMzFfSU5UX0dQVCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggMTFiOWQ1Yi4uZTk2MzM5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtbmV0eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTMsNyArMTMsNyBAQAogCiAjaW5jbHVkZSAiaGFyZHdhcmUuaCIKIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAjMHgwMDEwMDAwMAkJQCBwaHlzaWNhbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2NwdS04ODE1LmMgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY3B1LTg4MTUuYwppbmRleCBmOTNjNTk2Li45YmYzM2IzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY3B1LTg4MTUuYworKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY3B1LTg4MTUuYwpAQCAtODYsMTEgKzg2LDE5IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgY3B1ODgxNV9hbWJhX3JuZyA9IHsKKwkuZGV2ID0geworCQkuaW5pdF9uYW1lID0gInJuZyIsCisJfSwKKwlfX01FTV80S19SRVNPVVJDRShOT01BRElLX1JOR19CQVNFKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CiAJY3B1ODgxNV9hbWJhX2dwaW8gKyAwLAogCWNwdTg4MTVfYW1iYV9ncGlvICsgMSwKIAljcHU4ODE1X2FtYmFfZ3BpbyArIDIsCiAJY3B1ODgxNV9hbWJhX2dwaW8gKyAzLAorCSZjcHU4ODE1X2FtYmFfcm5nCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBjcHU4ODE1X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBlODc2OTkwLi40ZjkyYWNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMCw3ICsxMCw3IEBACiAgKgogKi8KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAjMHgxMDAwMDAwMAlAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCBiZTEyZTMxLi5mODNkNTc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMSwyICsxLDIgQEAKIAotI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAweGU4MDAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIDB4ZTgwMDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBjOTUzMGZiLi4wODU5MzM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTEsNyArMTEsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLWJvYXJkLWE5bTk3NTBkZXYuaD4KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCiAJCWxkcmVxCVxyeCwgPU5TOVhYWF9DU3hTVEFUX1BIWVMoMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IGZlOTY0ZDMuLmM4NjUxOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMTEsNiArMTEsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX1ZNQUxMT0NfSAogI2RlZmluZSBfX0FTTV9BUkNIX1ZNQUxMT0NfSAogCi0jZGVmaW5lIFZNQUxMT0NfRU5EICAgICAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICgweGYwMDAwMDAwVUwpCiAKICNlbmRpZiAvKiBpZm5kZWYgX19BU01fQVJDSF9WTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYzQwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9LY29uZmlnCkBAIC0wLDAgKzEsMTkgQEAKK2lmIEFSQ0hfTlVDOTNYCisKK2NvbmZpZyBDUFVfTlVDOTMyCisJYm9vbAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIE5VQzkzMiBvZiBOdXZvdG9uIE5VQzkzWCBDUFVzLgorCittZW51ICJOVUM5MzIgTWFjaGluZXMiCisKK2NvbmZpZyBNQUNIX05VQzkzMkVWQgorCWJvb2wgIk51dm90b24gTlVDOTMyIEV2YWx1YXRpb24gQm9hcmQiCisJZGVmYXVsdCB5CisJc2VsZWN0IENQVV9OVUM5MzIKKwloZWxwCisJICAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBOdXZvdG9uIE5VQzkzMkVWQgorCitlbmRtZW51CisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MGUyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworCisjIE9iamVjdCBmaWxlIGxpc3RzLgorCitvYmoteQkJCQk6PSBpcnEubyB0aW1lLm8gZGV2Lm8gY3B1Lm8gY2xvY2subworIyBOVUM5MzIgQ1BVIHN1cHBvcnQgZmlsZXMKKworb2JqLSQoQ09ORklHX0NQVV9OVUM5MzIpCSs9IG51YzkzMi5vCisKKyMgbWFjaGluZSBzdXBwb3J0CisKK29iai0kKENPTkZJR19NQUNIX05VQzkzMkVWQikJKz0gbWFjaC1udWM5MzJldmIubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA1N2I1NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSwzIEBACit6cmVsYWRkci15CTo9IDB4MDAwMDgwMDAKK3BhcmFtc19waHlzLXkJOj0gMHgwMDAwMDEwMAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTIxZWZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvY2xvY2suYwpAQCAtMCwwICsxLDgzIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1udWM5M3gvY2xvY2suYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsb2Nrc19sb2NrKTsKKworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKwlpZiAoY2xrLT5lbmFibGVkKysgPT0gMCkKKwkJKGNsay0+ZW5hYmxlKShjbGssIDEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7CisKK3ZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlXQVJOX09OKGNsay0+ZW5hYmxlZCA9PSAwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCWlmICgtLWNsay0+ZW5hYmxlZCA9PSAwKQorCQkoY2xrLT5lbmFibGUpKGNsaywgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOworCit1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIDI3MDAwMDAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOworCit2b2lkIG51YzkzeF9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBpbnQgY2xvY2tzID0gY2xrLT5ja2VuOworCXVuc2lnbmVkIGxvbmcgY2xrZW47CisKKwljbGtlbiA9IF9fcmF3X3JlYWRsKE5VQzkzWF9WQV9DTEtQV1IpOworCisJaWYgKGVuYWJsZSkKKwkJY2xrZW4gfD0gY2xvY2tzOworCWVsc2UKKwkJY2xrZW4gJj0gfmNsb2NrczsKKworCV9fcmF3X3dyaXRlbChjbGtlbiwgTlVDOTNYX1ZBX0NMS1BXUik7Cit9CisKK3ZvaWQgY2xrc19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqY2xrcywgc2l6ZV90IG51bSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKwkJY2xrZGV2X2FkZCgmY2xrc1tpXSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGU1MWJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvY2xvY2suaApAQCAtMCwwICsxLDM2IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1udWM5M3gvY2xvY2suaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisKK3ZvaWQgbnVjOTN4X2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKTsKK3ZvaWQgY2xrc19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqY2xrcywgc2l6ZV90IG51bSk7CisKK3N0cnVjdCBjbGsgeworCXVuc2lnbmVkIGxvbmcJCWNrZW47CisJdW5zaWduZWQgaW50CQllbmFibGVkOworCXZvaWQJCQkoKmVuYWJsZSkoc3RydWN0IGNsayAqLCBpbnQgZW5hYmxlKTsKK307CisKKyNkZWZpbmUgREVGSU5FX0NMSyhfbmFtZSwgX2N0cmxiaXQpCQkJXAorc3RydWN0IGNsayBjbGtfIyNfbmFtZSA9IHsJCQkJXAorCQkuZW5hYmxlCT0gbnVjOTN4X2Nsa19lbmFibGUsCQlcCisJCS5ja2VuCT0gKDEgPDwgX2N0cmxiaXQpLAkJXAorCX0KKworI2RlZmluZSBERUZfQ0xLTE9PSyhfY2xrLCBfZGV2bmFtZSwgX2Nvbm5hbWUpCQlcCisJewkJCQkJCVwKKwkJLmNsawkJPSBfY2xrLAkJCVwKKwkJLmRldl9pZAkJPSBfZGV2bmFtZSwJCVwKKwkJLmNvbl9pZAkJPSBfY29ubmFtZSwJCVwKKwl9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2NwdS5jIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZmZjVkOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2NwdS5jCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1udWM5M3gvY3B1LmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTnV2b3RvbiBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogTlVDOTN4IHNlcmllcyBjcHUgY29tbW9uIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZWJpLmg+CisKKyNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJjbG9jay5oIgorCisvKiBJbml0aWFsIElPIG1hcHBpbmdzICovCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbnVjOTN4X2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJSU9ERVNDX0VOVChJUlEpLAorCUlPREVTQ19FTlQoR0NSKSwKKwlJT0RFU0NfRU5UKFVBUlQpLAorCUlPREVTQ19FTlQoVElNRVIpLAorCUlPREVTQ19FTlQoRUJJKSwKK307CisKKy8qIEluaXRpYWwgbnVjOTMyIGNsb2NrIGRlY2xhcmF0aW9ucy4gKi8KK3N0YXRpYyBERUZJTkVfQ0xLKGF1ZGlvLCAyKTsKK3N0YXRpYyBERUZJTkVfQ0xLKHNkLCAzKTsKK3N0YXRpYyBERUZJTkVfQ0xLKGpwZywgNCk7CitzdGF0aWMgREVGSU5FX0NMSyh2aWRlbywgNSk7CitzdGF0aWMgREVGSU5FX0NMSyh2cG9zdCwgNik7CitzdGF0aWMgREVGSU5FX0NMSygyZCwgNyk7CitzdGF0aWMgREVGSU5FX0NMSyhncHUsIDgpOworc3RhdGljIERFRklORV9DTEsoZ2RtYSwgOSk7CitzdGF0aWMgREVGSU5FX0NMSyhhZGMsIDEwKTsKK3N0YXRpYyBERUZJTkVfQ0xLKHVhcnQsIDExKTsKK3N0YXRpYyBERUZJTkVfQ0xLKHNwaSwgMTIpOworc3RhdGljIERFRklORV9DTEsocHdtLCAxMyk7CitzdGF0aWMgREVGSU5FX0NMSyh0aW1lciwgMTQpOworc3RhdGljIERFRklORV9DTEsod2R0LCAxNSk7CitzdGF0aWMgREVGSU5FX0NMSyhhYzk3LCAxNik7CitzdGF0aWMgREVGSU5FX0NMSyhpMnMsIDE2KTsKK3N0YXRpYyBERUZJTkVfQ0xLKHVzYmNrLCAxNyk7CitzdGF0aWMgREVGSU5FX0NMSyh1c2I0OCwgMTgpOworc3RhdGljIERFRklORV9DTEsodXNiaCwgMTkpOworc3RhdGljIERFRklORV9DTEsoaTJjLCAyMCk7CitzdGF0aWMgREVGSU5FX0NMSyhleHQsIDApOworCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbnVjOTMyX2Nsa3JlZ3NbXSA9IHsKKyAgICAgICBERUZfQ0xLTE9PSygmY2xrX2F1ZGlvLCAibnVjOTMyLWF1ZGlvIiwgTlVMTCksCisgICAgICAgREVGX0NMS0xPT0soJmNsa19zZCwgIm51YzkzMi1zZCIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfanBnLCAibnVjOTMyLWpwZyIsICJOVUxMIiksCisgICAgICAgREVGX0NMS0xPT0soJmNsa192aWRlbywgIm51YzkzMi12aWRlbyIsICJOVUxMIiksCisgICAgICAgREVGX0NMS0xPT0soJmNsa192cG9zdCwgIm51YzkzMi12cG9zdCIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfMmQsICJudWM5MzItMmQiLCBOVUxMKSwKKyAgICAgICBERUZfQ0xLTE9PSygmY2xrX2dwdSwgIm51YzkzMi1ncHUiLCBOVUxMKSwKKyAgICAgICBERUZfQ0xLTE9PSygmY2xrX2dkbWEsICJudWM5MzItZ2RtYSIsICJOVUxMIiksCisgICAgICAgREVGX0NMS0xPT0soJmNsa19hZGMsICJudWM5MzItYWRjIiwgTlVMTCksCisgICAgICAgREVGX0NMS0xPT0soJmNsa191YXJ0LCBOVUxMLCAidWFydCIpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfc3BpLCAibnVjOTMyLXNwaSIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfcHdtLCAibnVjOTMyLXB3bSIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfdGltZXIsIE5VTEwsICJ0aW1lciIpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfd2R0LCAibnVjOTMyLXdkdCIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfYWM5NywgIm51YzkzMi1hYzk3IiwgTlVMTCksCisgICAgICAgREVGX0NMS0xPT0soJmNsa19pMnMsICJudWM5MzItaTJzIiwgTlVMTCksCisgICAgICAgREVGX0NMS0xPT0soJmNsa191c2JjaywgIm51YzkzMi11c2JjayIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfdXNiNDgsICJudWM5MzItdXNiNDgiLCBOVUxMKSwKKyAgICAgICBERUZfQ0xLTE9PSygmY2xrX3VzYmgsICJudWM5MzItdXNiaCIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfaTJjLCAibnVjOTMyLWkyYyIsIE5VTEwpLAorICAgICAgIERFRl9DTEtMT09LKCZjbGtfZXh0LCBOVUxMLCAiZXh0IiksCit9OworCisvKiBJbml0aWFsIHNlcmlhbCBwbGF0Zm9ybSBkYXRhICovCisKK3N0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBudWM5M3hfdWFydF9kYXRhW10gPSB7CisJTlVDOTNYXzgyNTBQT1JUKFVBUlQwKSwKKwl7fSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTN4X3NlcmlhbF9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gbnVjOTN4X3VhcnRfZGF0YSwKKwl9LAorfTsKKworLypJbml0IE5VQzkzeCBldmIgaW8qLworCit2b2lkIF9faW5pdCBudWM5M3hfbWFwX2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgbWFjaF9zaXplKQoreworCXVuc2lnbmVkIGxvbmcgaWRjb2RlID0gMHgwOworCisJaW90YWJsZV9pbml0KG1hY2hfZGVzYywgbWFjaF9zaXplKTsKKwlpb3RhYmxlX2luaXQobnVjOTN4X2lvZGVzYywgQVJSQVlfU0laRShudWM5M3hfaW9kZXNjKSk7CisKKwlpZGNvZGUgPSBfX3Jhd19yZWFkbChOVUM5M1hQRElEKTsKKwlpZiAoaWRjb2RlID09IE5VQzkzMl9DUFVJRCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVIHR5cGUgMHglMDhseCBpcyBOVUM5MTBcbiIsIGlkY29kZSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgIkNQVSB0eXBlIGRldGVjdCBlcnJvciFcbiIpOworCit9CisKKy8qSW5pdCBOVUM5M3ggY2xvY2sqLworCit2b2lkIF9faW5pdCBudWM5M3hfaW5pdF9jbG9ja3Modm9pZCkKK3sKKwljbGtzX3JlZ2lzdGVyKG51YzkzMl9jbGtyZWdzLCBBUlJBWV9TSVpFKG51YzkzMl9jbGtyZWdzKSk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2NwdS5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlZjI4MTk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvY3B1LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnVjOTN4L2NwdS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBIZWFkZXIgZmlsZSBmb3IgTlVDOTNYIENQVSBzdXBwb3J0CisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNkZWZpbmUgSU9ERVNDX0VOVCh5KQkJCQkJXAorewkJCQkJCQlcCisJLnZpcnR1YWwgPSAodW5zaWduZWQgbG9uZylOVUM5M1hfVkFfIyN5LAlcCisJLnBmbiAgICAgPSBfX3BoeXNfdG9fcGZuKE5VQzkzWF9QQV8jI3kpLAlcCisJLmxlbmd0aCAgPSBOVUM5M1hfU1pfIyN5LAkJCVwKKwkudHlwZSAgICA9IE1UX0RFVklDRSwJCQkJXAorfQorCisjZGVmaW5lIE5VQzkzWF84MjUwUE9SVChuYW1lKQkJCQkJXAorewkJCQkJCQkJXAorCS5tZW1iYXNlCT0gbmFtZSMjX0JBLAkJCQlcCisJLm1hcGJhc2UJPSBuYW1lIyNfUEEsCQkJCVwKKwkuaXJxCQk9IElSUV8jI25hbWUsCQkJCVwKKwkudWFydGNsawk9IDU3MTM5MjAwLAkJCQlcCisJLnJlZ3NoaWZ0CT0gMiwJCQkJCVwKKwkuaW90eXBlCQk9IFVQSU9fTUVNLAkJCQlcCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwJXAorfQorCisvKkNwdSBpZGVudGlmaWVyIHJlZ2lzdGVyKi8KKworI2RlZmluZSBOVUM5M1hQRElECU5VQzkzWF9WQV9HQ1IKKyNkZWZpbmUgTlVDOTMyX0NQVUlECTB4Mjk1NTAwOTEKKworLyogZXh0ZXJuIGZpbGUgZnJvbSBjcHUuYyAqLworCitleHRlcm4gdm9pZCBudWM5M3hfY2xvY2tfc291cmNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciAqc3JjKTsKK2V4dGVybiB2b2lkIG51YzkzeF9pbml0X2Nsb2Nrcyh2b2lkKTsKK2V4dGVybiB2b2lkIG51YzkzeF9tYXBfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBtYWNoX3NpemUpOworZXh0ZXJuIHZvaWQgbnVjOTN4X2JvYXJkX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKmRldmljZSwgaW50IHNpemUpOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTN4X3NlcmlhbF9kZXZpY2U7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2Rldi5jIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2MmFlOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2Rldi5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW51YzkzeC9kZXYuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOdXZvdG9uIGNvcnBvcmF0aW9uLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgImNwdS5oIgorCisvKkhlcmUgc2hvdWxkIGJlIHlvdXIgZXZiIHJlc291cnNlLHN1Y2ggYXMgTENEKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm51YzkzeF9wdWJsaWNfZGV2W10gX19pbml0ZGF0YSA9IHsKKwkmbnVjOTN4X3NlcmlhbF9kZXZpY2UsCit9OworCisvKiBQcm92aWRlIGFkZGluZyBzcGVjaWZpYyBDUFUgcGxhdGZvcm0gZGV2aWNlcyBBUEkgKi8KKwordm9pZCBfX2luaXQgbnVjOTN4X2JvYXJkX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKmRldmljZSwgaW50IHNpemUpCit7CisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlLCBzaXplKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhudWM5M3hfcHVibGljX2RldiwgQVJSQVlfU0laRShudWM5M3hfcHVibGljX2RldikpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvY2xrZGV2LmggYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvY2xrZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRiMzdhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9jbGtkZXYuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9DTEtERVZfSAorI2RlZmluZSBfX0FTTV9NQUNIX0NMS0RFVl9ICisKKyNkZWZpbmUgX19jbGtfZ2V0KGNsaykgKHsgMTsgfSkKKyNkZWZpbmUgX19jbGtfcHV0KGNsaykgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1MmNiZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqLworCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1pcnEuaD4KKworCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwkuZW5kbQorCisJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJLmVuZG0KKworCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKworCQltb3YJXGJhc2UsICNBSUNfQkEKKworCQlsZHIJXGlycW5yLCBbIFxiYXNlLCAjQUlDX0lQRVJdCisJCWxkcglcaXJxbnIsIFsgXGJhc2UsICNBSUNfSVNOUl0KKwkJY21wCVxpcnFuciwgIzAKKworCS5lbmRtCisKKwkvKiBjdXJyZW50bHkgZG9uJ3QgbmVlZCBhbiBkaXNhYmxlX2ZpcSBtYWNybyAqLworCisJLm1hY3JvCWRpc2FibGVfZmlxCisJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI1YzZmYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorCisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmU1MDUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9pby5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVAkweGZmZmZmZmZmCisKKy8qCisgKiAxOjEgbWFwcGluZyBmb3IgaW9yZW1hcHBlZCByZWdpb25zLgorICovCisKKyNkZWZpbmUgX19tZW1fcGNpKGEpCShhKQorI2RlZmluZSBfX2lvKGEpCQlfX3R5cGVzYWZlX2lvKGEpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0YWE3MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9pcnFzLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSVJRU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSVJRU19ICisKKyNkZWZpbmUgTlVDOTNYX0lSUSh4KQkoeCkKKworLyogTWFpbiBjcHUgaW50ZXJydXB0cyAqLworCisjZGVmaW5lIElSUV9XRFQJCU5VQzkzWF9JUlEoMSkKKyNkZWZpbmUgSVJRX0lSUTAJTlVDOTNYX0lSUSgyKQorI2RlZmluZSBJUlFfSVJRMQlOVUM5M1hfSVJRKDMpCisjZGVmaW5lIElSUV9JUlEyCU5VQzkzWF9JUlEoNCkKKyNkZWZpbmUgSVJRX0lSUTMJTlVDOTNYX0lSUSg1KQorI2RlZmluZSBJUlFfVVNCSAlOVUM5M1hfSVJRKDYpCisjZGVmaW5lIElSUV9BUFUJCU5VQzkzWF9JUlEoNykKKyNkZWZpbmUgSVJRX1ZQT1NUCU5VQzkzWF9JUlEoOCkKKyNkZWZpbmUgSVJRX0FEQwkJTlVDOTNYX0lSUSg5KQorI2RlZmluZSBJUlFfVUFSVDAJTlVDOTNYX0lSUSgxMCkKKyNkZWZpbmUgSVJRX1RJTUVSMAlOVUM5M1hfSVJRKDExKQorI2RlZmluZSBJUlFfR1BVMAlOVUM5M1hfSVJRKDEyKQorI2RlZmluZSBJUlFfR1BVMQlOVUM5M1hfSVJRKDEzKQorI2RlZmluZSBJUlFfR1BVMglOVUM5M1hfSVJRKDE0KQorI2RlZmluZSBJUlFfR1BVMwlOVUM5M1hfSVJRKDE1KQorI2RlZmluZSBJUlFfR1BVNAlOVUM5M1hfSVJRKDE2KQorI2RlZmluZSBJUlFfVklOCQlOVUM5M1hfSVJRKDE3KQorI2RlZmluZSBJUlFfVVNCRAlOVUM5M1hfSVJRKDE4KQorI2RlZmluZSBJUlFfVlJBTUxECU5VQzkzWF9JUlEoMTkpCisjZGVmaW5lIElSUV9HRE1BMAlOVUM5M1hfSVJRKDIwKQorI2RlZmluZSBJUlFfR0RNQTEJTlVDOTNYX0lSUSgyMSkKKyNkZWZpbmUgSVJRX1NESU8JTlVDOTNYX0lSUSgyMikKKyNkZWZpbmUgSVJRX0ZNSQkJTlVDOTNYX0lSUSgyMikKKyNkZWZpbmUgSVJRX0pQRUcJTlVDOTNYX0lSUSgyMykKKyNkZWZpbmUgSVJRX1NQSTAJTlVDOTNYX0lSUSgyNCkKKyNkZWZpbmUgSVJRX1NQSTEJTlVDOTNYX0lSUSgyNSkKKyNkZWZpbmUgSVJRX1JUQwkJTlVDOTNYX0lSUSgyNikKKyNkZWZpbmUgSVJRX1BXTTAJTlVDOTNYX0lSUSgyNykKKyNkZWZpbmUgSVJRX1BXTTEJTlVDOTNYX0lSUSgyOCkKKyNkZWZpbmUgSVJRX1BXTTIJTlVDOTNYX0lSUSgyOSkKKyNkZWZpbmUgSVJRX1BXTTMJTlVDOTNYX0lSUSgzMCkKKyNkZWZpbmUgSVJRX0kyU0FDOTcJTlVDOTNYX0lSUSgzMSkKKyNkZWZpbmUgSVJRX0NBUDAJSVJRX1BXTTAKKyNkZWZpbmUgSVJRX0NBUDEJSVJRX1BXTTEKKyNkZWZpbmUgSVJRX0NBUDIJSVJRX1BXTTIKKyNkZWZpbmUgSVJRX0NBUDMJSVJRX1BXTTMKKyNkZWZpbmUgTlJfSVJRUwkJKElSUV9JMlNBQzk3ICsgMSkKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDBiNWU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL21hcC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01BUF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUFQX0gKKworI2RlZmluZSBNQVBfT0ZGU0VUCSgweGZmZjAwMDAwKQorI2RlZmluZSBDTEtfT0ZGU0VUCSgweDEwKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBOVUM5M1hfQUREUih4KQkoKHZvaWQgX19pb21lbSAqKSgweEYwMDAwMDAwICsgKCh4KSYofk1BUF9PRkZTRVQpKSkpCisjZWxzZQorI2RlZmluZSBOVUM5M1hfQUREUih4KQkoMHhGMDAwMDAwMCArICgoeCkmKH5NQVBfT0ZGU0VUKSkpCisjZW5kaWYKKworIC8qCisgICogbnVjOTMyIGhhcmR3YXJlIHJlZ2lzdGVyIGRlZmluaXRpb24KKyAgKi8KKworI2RlZmluZSBOVUM5M1hfUEFfSVJRCQkoMHhGRkY4MzAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX0dDUgkJKDB4RkZGMDAwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9FQkkJCSgweEZGRjAxMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfVUFSVAkJKDB4RkZGODAwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9USU1FUgkJKDB4RkZGODEwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9HUElPCQkoMHhGRkY4NDAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX0dETUEJCSgweEZGRjAzMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfVVNCSE9TVAkoMHhGRkYwZDAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX0kyQwkJKDB4RkZGODkwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9MQ0QJCSgweEZGRjA2MDAwKQorI2RlZmluZSBOVUM5M1hfUEFfR0UJCSgweEZGRjA1MDAwKQorI2RlZmluZSBOVUM5M1hfUEFfQURDCQkoMHhGRkY4NTAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX1JUQwkJKDB4RkZGODcwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9QV00JCSgweEZGRjgyMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfQUNUTAkJKDB4RkZGMGEwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9VU0JERVYJKDB4RkZGMEMwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9KRVBFRwkJKDB4RkZGMGUwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9DQUNIRV9UCSgweEZGRjYwMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfVlJBTQkJKDB4RkZGMGIwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9ETUFDCQkoMHhGRkYwOTAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX0kyU00JCSgweEZGRjA4MDAwKQorI2RlZmluZSBOVUM5M1hfUEFfQ0FDSEUJCSgweEZGRjAyMDAwKQorI2RlZmluZSBOVUM5M1hfUEFfR1BVCQkoMHhGRkYwNDAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX1ZJREVPSU4JKDB4RkZGMDcwMDApCisjZGVmaW5lIE5VQzkzWF9QQV9TUEkwCQkoMHhGRkY4NjAwMCkKKyNkZWZpbmUgTlVDOTNYX1BBX1NQSTEJCSgweEZGRjg4MDAwKQorCisgLyoKKyAgKiBudWM5MzIgdmlydHVhbCBhZGRyZXNzIG1hcHBpbmcuCisgICogaW50ZXJydXB0IGNvbnRyb2xsZXIgaXMgdGhlIGZpcnN0IHRoaW5nIHdlIHB1dCBpbiwgdG8gbWFrZQorICAqIHRoZSBhc3NlbWJseSBjb2RlIGZvciB0aGUgaXJxIGRldGVjdGlvbiBlYXNpZXIKKyAgKi8KKworI2RlZmluZSBOVUM5M1hfVkFfSVJRCQlOVUM5M1hfQUREUigweDAwMDAwMDAwKQorI2RlZmluZSBOVUM5M1hfU1pfSVJRCQlTWl80SworCisjZGVmaW5lIE5VQzkzWF9WQV9HQ1IJCU5VQzkzWF9BRERSKE5VQzkzWF9QQV9JUlEpCisjZGVmaW5lIE5VQzkzWF9WQV9DTEtQV1IJKE5VQzkzWF9WQV9HQ1IrQ0xLX09GRlNFVCkKKyNkZWZpbmUgTlVDOTNYX1NaX0dDUgkJU1pfNEsKKworLyogRUJJIG1hbmFnZW1lbnQgKi8KKworI2RlZmluZSBOVUM5M1hfVkFfRUJJCQlOVUM5M1hfQUREUihOVUM5M1hfUEFfRUJJKQorI2RlZmluZSBOVUM5M1hfU1pfRUJJCQlTWl80SworCisvKiBVQVJUcyAqLworCisjZGVmaW5lIE5VQzkzWF9WQV9VQVJUCQlOVUM5M1hfQUREUihOVUM5M1hfUEFfVUFSVCkKKyNkZWZpbmUgTlVDOTNYX1NaX1VBUlQJCVNaXzRLCisKKy8qIFRpbWVycyAqLworCisjZGVmaW5lIE5VQzkzWF9WQV9USU1FUglOVUM5M1hfQUREUihOVUM5M1hfUEFfVElNRVIpCisjZGVmaW5lIE5VQzkzWF9TWl9USU1FUglTWl80SworCisvKiBHUElPIHBvcnRzICovCisKKyNkZWZpbmUgTlVDOTNYX1ZBX0dQSU8JCU5VQzkzWF9BRERSKE5VQzkzWF9QQV9HUElPKQorI2RlZmluZSBOVUM5M1hfU1pfR1BJTwkJU1pfNEsKKworLyogR0RNQSBjb250cm9sICovCisKKyNkZWZpbmUgTlVDOTNYX1ZBX0dETUEJCU5VQzkzWF9BRERSKE5VQzkzWF9QQV9HRE1BKQorI2RlZmluZSBOVUM5M1hfU1pfR0RNQQkJU1pfNEsKKworLyogSTJDIGhhcmR3YXJlIGNvbnRyb2xsZXIgKi8KKworI2RlZmluZSBOVUM5M1hfVkFfSTJDCQlOVUM5M1hfQUREUihOVUM5M1hfUEFfSTJDKQorI2RlZmluZSBOVUM5M1hfU1pfSTJDCQlTWl80SworCisvKiBMQ0QgY29udHJvbGxlciovCisKKyNkZWZpbmUgTlVDOTNYX1ZBX0xDRAkJTlVDOTNYX0FERFIoTlVDOTNYX1BBX0xDRCkKKyNkZWZpbmUgTlVDOTNYX1NaX0xDRAkJU1pfNEsKKworLyogMkQgY29udHJvbGxlciovCisKKyNkZWZpbmUgTlVDOTNYX1ZBX0dFCQlOVUM5M1hfQUREUihOVUM5M1hfUEFfR0UpCisjZGVmaW5lIE5VQzkzWF9TWl9HRQkJU1pfNEsKKworLyogQURDICovCisKKyNkZWZpbmUgTlVDOTNYX1ZBX0FEQwkJTlVDOTNYX0FERFIoTlVDOTNYX1BBX0FEQykKKyNkZWZpbmUgTlVDOTNYX1NaX0FEQwkJU1pfNEsKKworLyogUlRDICovCisKKyNkZWZpbmUgTlVDOTNYX1ZBX1JUQwkJTlVDOTNYX0FERFIoTlVDOTNYX1BBX1JUQykKKyNkZWZpbmUgTlVDOTNYX1NaX1JUQwkJU1pfNEsKKworLyogUHVsc2UgV2lkdGggTW9kdWxhdGlvbihQV00pIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIE5VQzkzWF9WQV9QV00JCU5VQzkzWF9BRERSKE5VQzkzWF9QQV9QV00pCisjZGVmaW5lIE5VQzkzWF9TWl9QV00JCVNaXzRLCisKKy8qIEF1ZGlvIENvbnRyb2xsZXIgY29udHJvbGxlciAqLworCisjZGVmaW5lIE5VQzkzWF9WQV9BQ1RMCQlOVUM5M1hfQUREUihOVUM5M1hfUEFfQUNUTCkKKyNkZWZpbmUgTlVDOTNYX1NaX0FDVEwJCVNaXzRLCisKKy8qIFVTQiBEZXZpY2UgcG9ydCAqLworCisjZGVmaW5lIE5VQzkzWF9WQV9VU0JERVYJTlVDOTNYX0FERFIoTlVDOTNYX1BBX1VTQkRFVikKKyNkZWZpbmUgTlVDOTNYX1NaX1VTQkRFVglTWl80SworCisvKiBVU0IgaG9zdCBjb250cm9sbGVyKi8KKyNkZWZpbmUgTlVDOTNYX1ZBX1VTQkhPU1QJTlVDOTNYX0FERFIoTlVDOTNYX1BBX1VTQkhPU1QpCisjZGVmaW5lIE5VQzkzWF9TWl9VU0JIT1NUCVNaXzRLCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIzYWIwZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKworI2RlZmluZSBQSFlTX09GRlNFVAlVTCgweDAwMDAwMDAwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmggYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYjI5NTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfQ0xPQ0tfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfQ0xPQ0tfSAorCisvKiBDbG9jayBDb250cm9sIFJlZ2lzdGVycyAgKi8KKyNkZWZpbmUgQ0xLX0JBCQlOVUM5M1hfVkFfQ0xLUFdSCisjZGVmaW5lIFJFR19DTEtFTgkoQ0xLX0JBICsgMHgwMCkKKyNkZWZpbmUgUkVHX0NMS1NFTAkoQ0xLX0JBICsgMHgwNCkKKyNkZWZpbmUgUkVHX0NMS0RJVgkoQ0xLX0JBICsgMHgwOCkKKyNkZWZpbmUgUkVHX1BMTENPTjAJKENMS19CQSArIDB4MEMpCisjZGVmaW5lIFJFR19QTExDT04xCShDTEtfQkEgKyAweDEwKQorI2RlZmluZSBSRUdfUE1DT04JKENMS19CQSArIDB4MTQpCisjZGVmaW5lIFJFR19JUlFXQUtFQ09OCShDTEtfQkEgKyAweDE4KQorI2RlZmluZSBSRUdfSVJRV0FLRUZMQUcJKENMS19CQSArIDB4MUMpCisjZGVmaW5lIFJFR19JUFNSU1QJKENMS19CQSArIDB4MjApCisjZGVmaW5lIFJFR19DTEtFTjEJKENMS19CQSArIDB4MjQpCisjZGVmaW5lIFJFR19DTEtESVYxCShDTEtfQkEgKyAweDI4KQorCisvKiBEZWZpbmUgUExMIGZyZXEgc2V0dGluZyAqLworI2RlZmluZSBQTExfRElTQUJMRQkJMHgxMkI2MworI2RlZmluZQlQTExfNjZNSFoJCTB4MkI2MworI2RlZmluZQlQTExfMTAwTUhaCQkweDRGNjQKKyNkZWZpbmUgUExMXzEyME1IWgkJMHg0RjYzCisjZGVmaW5lCVBMTF8xNjZNSFoJCTB4NDEyNAorI2RlZmluZQlQTExfMjAwTUhaCQkweDRGMjQKKworLyogRGVmaW5lIEFIQjpDUFVGUkVRIHJhdGlvICovCisjZGVmaW5lCUFIQl9DUFVDTEtfMV8xCQkweDAwCisjZGVmaW5lCUFIQl9DUFVDTEtfMV8yCQkweDAxCisjZGVmaW5lCUFIQl9DUFVDTEtfMV80CQkweDAyCisjZGVmaW5lCUFIQl9DUFVDTEtfMV84CQkweDAzCisKKy8qIERlZmluZSBBUEI6QUhCIHJhdGlvICovCisjZGVmaW5lIEFQQl9BSEJfMV8yCQkweDAxCisjZGVmaW5lIEFQQl9BSEJfMV80CQkweDAyCisjZGVmaW5lIEFQQl9BSEJfMV84CQkweDAzCisKKy8qIERlZmluZSBjbG9jayBza2V3ICovCisjZGVmaW5lIERFRkFVTFRTS0VXCQkweDQ4CisKKyNlbmRpZiAvKiAgX19BU01fQVJDSF9SRUdTX0NMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9yZWdzLWViaS5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3JlZ3MtZWJpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M3MjU1MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9yZWdzLWViaS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1lYmkuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9SRUdTX0VCSV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUkVHU19FQklfSAorCisvKiBFQkkgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBFQklfQkEJCU5VQzkzWF9WQV9FQkkKKyNkZWZpbmUgUkVHX0VCSUNPTgkoRUJJX0JBICsgMHgwMCkKKyNkZWZpbmUgUkVHX1JPTUNPTgkoRUJJX0JBICsgMHgwNCkKKyNkZWZpbmUgUkVHX1NEQ09ORjAJKEVCSV9CQSArIDB4MDgpCisjZGVmaW5lIFJFR19TRENPTkYxCShFQklfQkEgKyAweDBDKQorI2RlZmluZSBSRUdfU0RUSU1FMAkoRUJJX0JBICsgMHgxMCkKKyNkZWZpbmUgUkVHX1NEVElNRTEJKEVCSV9CQSArIDB4MTQpCisjZGVmaW5lIFJFR19FWFQwQ09OCShFQklfQkEgKyAweDE4KQorI2RlZmluZSBSRUdfRVhUMUNPTgkoRUJJX0JBICsgMHgxQykKKyNkZWZpbmUgUkVHX0VYVDJDT04JKEVCSV9CQSArIDB4MjApCisjZGVmaW5lIFJFR19FWFQzQ09OCShFQklfQkEgKyAweDI0KQorI2RlZmluZSBSRUdfRVhUNENPTgkoRUJJX0JBICsgMHgyOCkKKyNkZWZpbmUgUkVHX0NLU0tFVwkoRUJJX0JBICsgMHgyQykKKworI2VuZGlmIC8qICBfX0FTTV9BUkNIX1JFR1NfRUJJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9yZWdzLWlycS5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwMjE1OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9yZWdzLWlycS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19fQVNNX0FSQ0hfUkVHU19JUlFfSAorI2RlZmluZSBfX19BU01fQVJDSF9SRUdTX0lSUV9ICisKKy8qIEFkdmFuY2UgSW50ZXJydXB0IENvbnRyb2xsZXIgKEFJQykgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgQUlDX0JBICAgIAkJTlVDOTNYX1ZBX0lSUQorCisjZGVmaW5lIFJFR19BSUNfSVJRU0MJCShBSUNfQkErMHg4MCkKKyNkZWZpbmUgUkVHX0FJQ19HRU4JCShBSUNfQkErMHg4NCkKKyNkZWZpbmUgUkVHX0FJQ19HQVNSCQkoQUlDX0JBKzB4ODgpCisjZGVmaW5lIFJFR19BSUNfR1NDUgkJKEFJQ19CQSsweDhDKQorI2RlZmluZSBSRUdfQUlDX0lSU1IJCShBSUNfQkErMHgxMDApCisjZGVmaW5lIFJFR19BSUNfSUFTUgkJKEFJQ19CQSsweDEwNCkKKyNkZWZpbmUgUkVHX0FJQ19JU1IJCShBSUNfQkErMHgxMDgpCisjZGVmaW5lIFJFR19BSUNfSVBFUgkJKEFJQ19CQSsweDEwQykKKyNkZWZpbmUgUkVHX0FJQ19JU05SCQkoQUlDX0JBKzB4MTEwKQorI2RlZmluZSBSRUdfQUlDX0lNUgkJKEFJQ19CQSsweDExNCkKKyNkZWZpbmUgUkVHX0FJQ19PSVNSCQkoQUlDX0JBKzB4MTE4KQorI2RlZmluZSBSRUdfQUlDX01FQ1IJCShBSUNfQkErMHgxMjApCisjZGVmaW5lIFJFR19BSUNfTURDUgkJKEFJQ19CQSsweDEyNCkKKyNkZWZpbmUgUkVHX0FJQ19TU0NSCQkoQUlDX0JBKzB4MTI4KQorI2RlZmluZSBSRUdfQUlDX1NDQ1IJCShBSUNfQkErMHgxMkMpCisjZGVmaW5lIFJFR19BSUNfRU9TQ1IJCShBSUNfQkErMHgxMzApCisjZGVmaW5lIEFJQ19JUEVSCQkoMHgxMEMpCisjZGVmaW5lIEFJQ19JU05SCQkoMHgxMTApCisKKyNlbmRpZiAvKiBfX19BU01fQVJDSF9SRUdTX0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1zZXJpYWwuaCBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9yZWdzLXNlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2N2EwNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvcmVncy1zZXJpYWwuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3JlZ3Mtc2VyaWFsLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSTV9SRUdTX1NFUklBTF9ICisjZGVmaW5lIF9fQVNNX0FSTV9SRUdTX1NFUklBTF9ICisKKyNkZWZpbmUgVUFSVDBfQkEJTlVDOTNYX1ZBX1VBUlQKKyNkZWZpbmUgVUFSVDFfQkEJKE5VQzkzWF9WQV9VQVJUKzB4MTAwKQorCisjZGVmaW5lIFVBUlQwX1BBCU5VQzkzWF9QQV9VQVJUCisjZGVmaW5lIFVBUlQxX1BBCShOVUM5M1hfUEFfVUFSVCsweDEwMCkKKworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgbnVjOTN4X3VhcnRfY2xrc3JjIHsKKwljb25zdCBjaGFyCSpuYW1lOworCXVuc2lnbmVkIGludAlkaXZpc29yOworCXVuc2lnbmVkIGludAltaW5fYmF1ZDsKKwl1bnNpZ25lZCBpbnQJbWF4X2JhdWQ7Cit9OworCitzdHJ1Y3QgbnVjOTN4X3VhcnRjZmcgeworCXVuc2lnbmVkIGNoYXIJaHdwb3J0OworCXVuc2lnbmVkIGNoYXIJdW51c2VkOworCXVuc2lnbmVkIHNob3J0CWZsYWdzOworCXVuc2lnbmVkIGxvbmcJdWFydF9mbGFnczsKKworCXVuc2lnbmVkIGxvbmcJdWNvbjsKKwl1bnNpZ25lZCBsb25nCXVsY29uOworCXVuc2lnbmVkIGxvbmcJdWZjb247CisKKwlzdHJ1Y3QgbnVjOTN4X3VhcnRfY2xrc3JjICpjbG9ja3M7CisJdW5zaWduZWQgaW50CWNsb2Nrc19zaXplOworfTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX19BU01fQVJNX1JFR1NfU0VSSUFMX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3JlZ3MtdGltZXIuaCBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9yZWdzLXRpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk0YmU5NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9yZWdzLXRpbWVyLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9yZWdzLXRpbWVyLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19USU1FUl9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUkVHU19USU1FUl9ICisKKy8qIFRpbWVyIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIFRNUl9CQQkJCU5VQzkzWF9WQV9USU1FUgorI2RlZmluZSBSRUdfVENTUjAJCShUTVJfQkErMHgwMCkKKyNkZWZpbmUgUkVHX1RJQ1IwCQkoVE1SX0JBKzB4MDgpCisjZGVmaW5lIFJFR19URFIwCQkoVE1SX0JBKzB4MTApCisjZGVmaW5lIFJFR19USVNSCQkoVE1SX0JBKzB4MTgpCisjZGVmaW5lIFJFR19XVENSCQkoVE1SX0JBKzB4MUMpCisKKyNlbmRpZiAvKiAgX19BU01fQVJDSF9SRUdTX1RJTUVSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjZiZDlhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNobnVjOTN4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIGFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+CisKK3N0YXRpYyB2b2lkIGFyY2hfaWRsZSh2b2lkKQoreworfQorCitzdGF0aWMgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQoreworCWNwdV9yZXNldCgwKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzcxOWNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3RpbWV4LmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC90aW1leC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC90aW1leC5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1RJTUVYX0gKKyNkZWZpbmUgX19BU01fQVJDSF9USU1FWF9ICisKKy8qIENMT0NLX1RJQ0tfUkFURSBOb3csIEkgZG9uJ3QgdXNlIGl0LiAqLworCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAyNzAwMDAwMAorCisjZW5kaWYgLyogX19BU01fQVJDSF9USU1FWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzA4MmNkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1udWM5M3gvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIGFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1VOQ09NUFJFU1NfSAorI2RlZmluZSBfX0FTTV9BUkNIX1VOQ09NUFJFU1NfSAorCisvKiBEZWZpbmVzIGZvciBVQVJUIHJlZ2lzdGVycyAqLworCisjaW5jbHVkZSA8bWFjaC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQorCisjZGVmaW5lIFRYX0RPTkUJKFVBUlRfTFNSX1RFTVQgfCBVQVJUX0xTUl9USFJFKQorc3RhdGljIHUzMiAqIHVhcnRfYmFzZSA9ICh1MzIgKilVQVJUMF9QQTsKKworc3RhdGljIHZvaWQgcHV0YyhpbnQgY2gpCit7CisJLyogQ2hlY2sgVEhSRSBhbmQgVEVNVCBiaXRzIGJlZm9yZSB3ZSB0cmFuc21pdCB0aGUgY2hhcmFjdGVyLgorCSAqLworCXdoaWxlICgodWFydF9iYXNlW1VBUlRfTFNSXSAmIFRYX0RPTkUpICE9IFRYX0RPTkUpCisJCWJhcnJpZXIoKTsKKworCSp1YXJ0X2Jhc2UgPSBjaDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCit7Cit9CisKK3N0YXRpYyB2b2lkIGFyY2hfZGVjb21wX3NldHVwKHZvaWQpCit7Cit9CisKKyNlbmRpZi8qIF9fQVNNX05VQzkzWF9VTkNPTVBSRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnVjOTN4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YTIxYjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW51YzkzeC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVk1BTExPQ19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVk1BTExPQ19ICisKKyNkZWZpbmUgVk1BTExPQ19FTkQJICAoMHhFMDAwMDAwMCkKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVk1BTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YTg4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9pcnEuYwpAQCAtMCwwICsxLDY2IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1udWM5M3gvaXJxLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWlycS5oPgorCitzdGF0aWMgdm9pZCBudWM5M3hfaXJxX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlfX3Jhd193cml0ZWwoMSA8PCBpcnEsIFJFR19BSUNfTURDUik7Cit9CisKKy8qCisgKiBCeSB0aGUgdzkwcDkxMCBzcGVjLGFueSBpcnEsb25seSB3cml0ZSAxCisgKiB0byBSRUdfQUlDX0VPU0NSIGZvciBBQ0sKKyAqLworCitzdGF0aWMgdm9pZCBudWM5M3hfaXJxX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCV9fcmF3X3dyaXRlbCgweDAxLCBSRUdfQUlDX0VPU0NSKTsKK30KKworc3RhdGljIHZvaWQgbnVjOTN4X2lycV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlfX3Jhd193cml0ZWwoMSA8PCBpcnEsIFJFR19BSUNfTUVDUik7CisKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBudWM5M3hfaXJxX2NoaXAgPSB7CisJLmFjawkgICA9IG51YzkzeF9pcnFfYWNrLAorCS5tYXNrCSAgID0gbnVjOTN4X2lycV9tYXNrLAorCS51bm1hc2sJICAgPSBudWM5M3hfaXJxX3VubWFzaywKK307CisKK3ZvaWQgX19pbml0IG51YzkzeF9pbml0X2lycSh2b2lkKQoreworCWludCBpcnFubzsKKworCV9fcmF3X3dyaXRlbCgweEZGRkZGRkZFLCBSRUdfQUlDX01EQ1IpOworCisJZm9yIChpcnFubyA9IElSUV9XRFQ7IGlycW5vIDw9IE5SX0lSUVM7IGlycW5vKyspIHsKKwkJc2V0X2lycV9jaGlwKGlycW5vLCAmbnVjOTN4X2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycW5vLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJc2V0X2lycV9mbGFncyhpcnFubywgSVJRRl9WQUxJRCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1udWM5M3gvbWFjaC1udWM5MzJldmIuYyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L21hY2gtbnVjOTMyZXZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY3OTI2NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L21hY2gtbnVjOTMyZXZiLmMKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLW51YzkxMGV2Yi5jCisgKgorICogQmFzZWQgb24gbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYyBieSBKb25hcyBEaWV0c2NoZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSAibnVjOTMyLmgiCisKK3N0YXRpYyB2b2lkIF9faW5pdCBudWM5MzJldmJfbWFwX2lvKHZvaWQpCit7CisJbnVjOTMyX21hcF9pbygpOworCW51YzkzMl9pbml0X2Nsb2NrcygpOworCW51YzkzMl9pbml0X3VhcnRjbGsoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG51YzkzMmV2Yl9pbml0KHZvaWQpCit7CisJbnVjOTMyX2JvYXJkX2luaXQoKTsKK30KKworTUFDSElORV9TVEFSVChOVUM5MzJFVkIsICJOVUM5MzJFVkIiKQorCS8qIE1haW50YWluZXI6IFdhbiBab25nU2h1biAqLworCS5waHlzX2lvCT0gTlVDOTNYX1BBX1VBUlQsCisJLmlvX3BnX29mZnN0CT0gKCgodTMyKU5VQzkzWF9WQV9VQVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMCwKKwkubWFwX2lvCQk9IG51YzkzMmV2Yl9tYXBfaW8sCisJLmluaXRfaXJxCT0gbnVjOTN4X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBudWM5MzJldmJfaW5pdCwKKwkudGltZXIJCT0gJm51YzkzeF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9udWM5MzIuYyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L251YzkzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NjZlYWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9udWM5MzIuYwpAQCAtMCwwICsxLDY1IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1udWM5M3gvbnVjOTMyLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTnV2b3RvbiBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogTlVDOTMyIGNwdSBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKworLyogZGVmaW5lIHNwZWNpZmljIENQVSBwbGF0Zm9ybSBkZXZpY2UgKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm51YzkzMl9kZXZbXSBfX2luaXRkYXRhID0geworfTsKKworLyogZGVmaW5lIHNwZWNpZmljIENQVSBwbGF0Zm9ybSBpbyBtYXAgKi8KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBudWM5MzJldmJfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKK307CisKKy8qSW5pdCBOVUM5MzIgZXZiIGlvKi8KKwordm9pZCBfX2luaXQgbnVjOTMyX21hcF9pbyh2b2lkKQoreworCW51YzkzeF9tYXBfaW8obnVjOTMyZXZiX2lvZGVzYywgQVJSQVlfU0laRShudWM5MzJldmJfaW9kZXNjKSk7Cit9CisKKy8qSW5pdCBOVUM5MzIgY2xvY2sqLworCit2b2lkIF9faW5pdCBudWM5MzJfaW5pdF9jbG9ja3Modm9pZCkKK3sKKwludWM5M3hfaW5pdF9jbG9ja3MoKTsKK30KKworLyplbmFibGUgTlVDOTMyIHVhcnQgY2xvY2sqLworCit2b2lkIF9faW5pdCBudWM5MzJfaW5pdF91YXJ0Y2xrKHZvaWQpCit7CisJc3RydWN0IGNsayAqY2tfdWFydCA9IGNsa19nZXQoTlVMTCwgInVhcnQiKTsKKwlCVUdfT04oSVNfRVJSKGNrX3VhcnQpKTsKKworCWNsa19lbmFibGUoY2tfdWFydCk7Cit9CisKKy8qSW5pdCBOVUM5MzIgYm9hcmQgaW5mbyovCisKK3ZvaWQgX19pbml0IG51YzkzMl9ib2FyZF9pbml0KHZvaWQpCit7CisJbnVjOTN4X2JvYXJkX2luaXQobnVjOTMyX2RldiwgQVJSQVlfU0laRShudWM5MzJfZGV2KSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC9udWM5MzIuaCBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L251YzkzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNjZlZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW51YzkzeC9udWM5MzIuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1udWM5M3gvbnVjOTMyLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiBjb3Jwb3JhdGlvbgorICoKKyAqIEhlYWRlciBmaWxlIGZvciBOVUM5M3ggQ1BVIHN1cHBvcnQKKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworc3RydWN0IG1hcF9kZXNjOworc3RydWN0IHN5c190aW1lcjsKKworLyogY29yZSBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMgKi8KKworZXh0ZXJuIHZvaWQgbnVjOTN4X2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgbnVjOTN4X3RpbWVyOworCisvKiBleHRlcm4gZmlsZSBmcm9tIG51YzkzMi5jICovCisKK2V4dGVybiB2b2lkIG51YzkzMl9ib2FyZF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbnVjOTMyX2luaXRfY2xvY2tzKHZvaWQpOworZXh0ZXJuIHZvaWQgbnVjOTMyX21hcF9pbyh2b2lkKTsKK2V4dGVybiB2b2lkIG51YzkzMl9pbml0X3VhcnRjbGsodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW51YzkzeC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLW51YzkzeC90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY5MGY5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbnVjOTN4L3RpbWUuYwpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbnVjOTN4L3RpbWUuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaW5jbHVkZSA8bWFjaC9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy10aW1lci5oPgorCisjZGVmaW5lIFJFU0VUSU5UCTB4MDEKKyNkZWZpbmUgUEVSSU9ECQkoMHgwMSA8PCAyNykKKyNkZWZpbmUgT05FU0hPVAkJKDB4MDAgPDwgMjcpCisjZGVmaW5lIENPVU5URU4JCSgweDAxIDw8IDMwKQorI2RlZmluZSBJTlRFTgkJKDB4MDEgPDwgMjkpCisKKyNkZWZpbmUgVElDS1NfUEVSX1NFQwkxMDAKKyNkZWZpbmUgUFJFU0NBTEUJMHg2MyAvKiBEaXZpZGVyID0gcHJlc2NhbGUgKyAxICovCisKK3Vuc2lnbmVkIGludCB0aW1lcjBfbG9hZDsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbnVjOTN4X2dldHRpbWVvZmZzZXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworLypJUlEgaGFuZGxlciBmb3IgdGhlIHRpbWVyKi8KKworc3RhdGljIGlycXJldHVybl90IG51YzkzeF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXRpbWVyX3RpY2soKTsKKwlfX3Jhd193cml0ZWwoMHgwMSwgUkVHX1RJU1IpOyAvKiBjbGVhciBUSUYwICovCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBudWM5M3hfdGltZXJfaXJxID0geworCS5uYW1lCQk9ICJudWM5M3ggVGltZXIgVGljayIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAorCS5oYW5kbGVyCT0gbnVjOTN4X3RpbWVyX2ludGVycnVwdCwKK307CisKKy8qU2V0IHVwIHRpbWVyIHJlZy4qLworCitzdGF0aWMgdm9pZCBudWM5M3hfdGltZXJfc2V0dXAodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICpja19leHQgPSBjbGtfZ2V0KE5VTEwsICJleHQiKTsKKwlzdHJ1Y3QgY2xrICpja190aW1lciA9IGNsa19nZXQoTlVMTCwgInRpbWVyIik7CisJdW5zaWduZWQgaW50IHJhdGUsIHZhbCA9IDA7CisKKwlCVUdfT04oSVNfRVJSKGNrX2V4dCkgfHwgSVNfRVJSKGNrX3RpbWVyKSk7CisKKwljbGtfZW5hYmxlKGNrX3RpbWVyKTsKKwlyYXRlID0gY2xrX2dldF9yYXRlKGNrX2V4dCk7CisJY2xrX3B1dChja19leHQpOworCXJhdGUgPSByYXRlIC8gKFBSRVNDQUxFICsgMHgwMSk7CisKKwkgLyogc2V0IGEga25vd24gc3RhdGUgKi8KKwlfX3Jhd193cml0ZWwoMHgwMCwgUkVHX1RDU1IwKTsKKwlfX3Jhd193cml0ZWwoUkVTRVRJTlQsIFJFR19USVNSKTsKKworCXRpbWVyMF9sb2FkID0gKHJhdGUgLyBUSUNLU19QRVJfU0VDKTsKKwlfX3Jhd193cml0ZWwodGltZXIwX2xvYWQsIFJFR19USUNSMCk7CisKKwl2YWwgfD0gKFBFUklPRCB8IENPVU5URU4gfCBJTlRFTiB8IFBSRVNDQUxFKTs7CisJX19yYXdfd3JpdGVsKHZhbCwgUkVHX1RDU1IwKTsKKworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbnVjOTN4X3RpbWVyX2luaXQodm9pZCkKK3sKKwludWM5M3hfdGltZXJfc2V0dXAoKTsKKwlzZXR1cF9pcnEoSVJRX1RJTUVSMCwgJm51YzkzeF90aW1lcl9pcnEpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIG51YzkzeF90aW1lciA9IHsKKwkuaW5pdAkJPSBudWM5M3hfdGltZXJfaW5pdCwKKwkub2Zmc2V0CQk9IG51YzkzeF9nZXR0aW1lb2Zmc2V0LAorCS5yZXN1bWUJCT0gbnVjOTN4X3RpbWVyX3NldHVwCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggYWVkYjc0Ni4uOGM3NGNhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMSw3ICsxMSw3IEBACiAgKgogKi8KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAjMHhmZjAwMDAwMAlAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYwppbmRleCAwYzZiZTZiLi44YmE4ZmI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPHBsYXQvY29udHJvbC5oPgogI2luY2x1ZGUgPHBsYXQvdGltZXItZ3AuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaD4KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2RwNDQzMF9sY2RfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzZHA0NDMwX2xjZCIsCkBAIC01MCw2ICs1MSw1OSBAQAogCXsgT01BUF9UQUdfTENELAkJJnNkcDQ0MzBfbGNkX2NvbmZpZyB9LAogfTsKIAorI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCitub2lubGluZSB2b2lkIG9tYXBfc21jMSh1MzIgZm4sIHUzMiBhcmcpCit7CisJcmVnaXN0ZXIgdTMyIHIxMiBhc20oInIxMiIpID0gZm47CisJcmVnaXN0ZXIgdTMyIHIwIGFzbSgicjAiKSA9IGFyZzsKKworCS8qIFRoaXMgaXMgY29tbW9uIHJvdXRpbmUgY2FjaGUgc2VjdXJlIG1vbml0b3IgQVBJIHVzZWQgdG8KKwkgKiBtb2RpZnkgdGhlIFBMMzEwIHNlY3VyZSByZWdpc3RlcnMuCisJICogcjAgY29udGFpbnMgdGhlIHZhbHVlIHRvIGJlIG1vZGlmaWVkIGFuZCAicjEyIiBjb250YWlucworCSAqIHRoZSBtb25pdG9yIEFQSSBudW1iZXIuIEl0IHVzZXMgZmV3IENQVSByZWdpc3RlcnMKKwkgKiBpbnRlcm5hbGx5IGFuZCBoZW5jZSB0aGV5IG5lZWQgYmUgYmFja2VkIHVwIGluY2x1ZGluZworCSAqIGxpbmsgcmVnaXN0ZXIgImxyIi4KKwkgKiBFeHBsaWNpdGx5IHNhdmUgcjExIGFuZCByMTIgdGhlIGNvbXBpbGVyIGdlbmVyYXRlZCBjb2RlCisJICogd29uJ3Qgc2F2ZSBpdC4KKwkgKi8KKwlhc20gdm9sYXRpbGUoCisJCSJzdG1mZCByMTMhLCB7cjExLHIxMn1cbiIKKwkJImRzYlxuIgorCQkic21jXG4iCisJCSJsZG1mZCByMTMhLCB7cjExLHIxMn1cbiIKKwkJOiAiK3IiIChyMCksICIrciIgKHIxMikKKwkJOgorCQk6ICJyNCIsICJyNSIsICJyMTAiLCAibHIiLCAiY2MiKTsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9zbWMxKTsKKworc3RhdGljIGludCBfX2luaXQgb21hcF9sMl9jYWNoZV9pbml0KHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpsMmNhY2hlX2Jhc2U7CisKKwkvKiBUbyBhdm9pZCBjb2RlIHJ1bm5pbmcgb24gb3RoZXIgT01BUHMgaW4KKwkgKiBtdWx0aS1vbWFwIGJ1aWxkcworCSAqLworCWlmICghY3B1X2lzX29tYXA0NHh4KCkpCisJCXJldHVybiAtRU5PREVWOworCisJLyogU3RhdGljIG1hcHBpbmcsIG5ldmVyIHJlbGVhc2VkICovCisJbDJjYWNoZV9iYXNlID0gaW9yZW1hcChPTUFQNDRYWF9MMkNBQ0hFX0JBU0UsIFNaXzRLKTsKKwlCVUdfT04oIWwyY2FjaGVfYmFzZSk7CisKKwkvKiBFbmFibGUgUEwzMTAgTDIgQ2FjaGUgY29udHJvbGxlciAqLworCW9tYXBfc21jMSgweDEwMiwgMHgxKTsKKworCS8qIDMyS0Igd2F5IHNpemUsIDE2LXdheSBhc3NvY2lhdGl2aXR5LAorCSogcGFyaXR5IGRpc2FibGVkCisJKi8KKwlsMngwX2luaXQobDJjYWNoZV9iYXNlLCAweDBlMDUwMDAwLCAweGMwMDAwZmZmKTsKKworCXJldHVybiAwOworfQorZWFybHlfaW5pdGNhbGwob21hcF9sMl9jYWNoZV9pbml0KTsKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQgZ2ljX2luaXRfaXJxKHZvaWQpCiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggZTlmMjU1ZC4uODY5NzlkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMSw3ICsxMSw3IEBACiAgKgogKi8KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KICNpZmRlZiAgQ09ORklHX0FSQ0hfT01BUDIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBjN2Y4MDhiZi4uOTFlMGUzOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTAsNyArMTAsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9vcmlvbjV4Lmg+CiAKLQkubWFjcm8gIGFkZHJ1YXJ0LHJ4CisJLm1hY3JvICBhZGRydWFydCwgcngsIHRtcAogCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJdHN0CVxyeCwgIzEJCQkJCUAgTU1VIGVuYWJsZWQ/CiAJbGRyZXEJXHJ4LCA9T1JJT041WF9SRUdTX1BIWVNfQkFTRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCA3MTQ3YTI5Li4wNmI1MGFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMiw0ICsyLDQgQEAKICAqIGFyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCiAgKi8KIAotI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAweGZkODAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIDB4ZmQ4MDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suYwppbmRleCA4OThjMGU4Li45ZDE5NzVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suYwpAQCAtMjIsOCArMjIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CiAKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgogI2luY2x1ZGUgImNsb2NrLmgiCiAKQEAgLTU2LDE4ICs1NywxOSBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNsa19yZWdfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdm9pZCBjbGtfcmVnX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewogCWlmIChjbGstPmVuYWJsZV9yZWcpCiAJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpICYKIAkJCSAgICAgfigxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0KSwgY2xrLT5lbmFibGVfcmVnKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNsa19yZWdfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyBpbnQgY2xrX3JlZ19lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewogCWlmIChjbGstPmVuYWJsZV9yZWcpCiAJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpIHwKIAkJCSAgICAgKDEgPDwgY2xrLT5lbmFibGVfc2hpZnQpLCBjbGstPmVuYWJsZV9yZWcpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xrX3JlZ19kaXNhYmxlMShzdHJ1Y3QgY2xrICpjbGspCkBAIC02MzYsMzEgKzYzOCwzNCBAQAogc3RhdGljIHN0cnVjdCBjbGsgaTJjMF9jayA9IHsKIAkubmFtZSA9ICJpMmMwX2NrIiwKIAkucGFyZW50ID0gJnBlcl9jaywKLQkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKLQkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OIHwgRklYRURfUkFURSwKIAkuZW5hYmxlX3NoaWZ0ID0gMCwKIAkuZW5hYmxlX3JlZyA9IEkyQ0NMS0NUUkxfUkVHLAorCS5yYXRlID0gMTMwMDAwMDAsCisJLmVuYWJsZSA9IGNsa19yZWdfZW5hYmxlLAorCS5kaXNhYmxlID0gY2xrX3JlZ19kaXNhYmxlLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9jayA9IHsKIAkubmFtZSA9ICJpMmMxX2NrIiwKIAkucGFyZW50ID0gJnBlcl9jaywKLQkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKLQkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OIHwgRklYRURfUkFURSwKIAkuZW5hYmxlX3NoaWZ0ID0gMSwKIAkuZW5hYmxlX3JlZyA9IEkyQ0NMS0NUUkxfUkVHLAorCS5yYXRlID0gMTMwMDAwMDAsCisJLmVuYWJsZSA9IGNsa19yZWdfZW5hYmxlLAorCS5kaXNhYmxlID0gY2xrX3JlZ19kaXNhYmxlLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9jayA9IHsKIAkubmFtZSA9ICJpMmMyX2NrIiwKIAkucGFyZW50ID0gJnBlcl9jaywKLQkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKLQkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OIHwgRklYRURfUkFURSwKIAkuZW5hYmxlX3NoaWZ0ID0gMiwKIAkuZW5hYmxlX3JlZyA9IFVTQl9PVEdfQ0xLQ1RSTF9SRUcsCisJLnJhdGUgPSAxMzAwMDAwMCwKKwkuZW5hYmxlID0gY2xrX3JlZ19lbmFibGUsCisJLmRpc2FibGUgPSBjbGtfcmVnX2Rpc2FibGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzcGkwX2NrID0gewpAQCAtNzM4LDE2ICs3NDMsMTYgQEAKIAkubmFtZSA9ICJ3ZHRfY2siLAogCS5wYXJlbnQgPSAmcGVyX2NrLAogCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAotCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCiAJLmVuYWJsZV9zaGlmdCA9IDAsCiAJLmVuYWJsZV9yZWcgPSBUSU1DTEtDVFJMX1JFRywKKwkuZW5hYmxlID0gY2xrX3JlZ19lbmFibGUsCisJLmRpc2FibGUgPSBjbGtfcmVnX2Rpc2FibGUsCiB9OwogCiAvKiBUaGVzZSBjbG9ja3MgYXJlIHZpc2libGUgb3V0c2lkZSB0aGlzIG1vZHVsZQogICogYW5kIGNhbiBiZSBpbml0aWFsaXplZAogICovCi1zdGF0aWMgc3RydWN0IGNsayAqb25jaGlwX2Nsa3NbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrICpvbmNoaXBfY2xrc1tdIF9faW5pdGRhdGEgPSB7CiAJJmNrXzEzTUh6LAogCSZja19wbGwxLAogCSZja19wbGw0LApAQCAtNzc3LDQ5ICs3ODIsNzQgQEAKIAkmd2R0X2NrLAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIG9uY2hpcF9jbGtyZWdbXSA9IHsKKwl7IC5jbGsgPSAmY2tfMTNNSHosCS5jb25faWQgPSAiY2tfMTNNSHoiCX0sCisJeyAuY2xrID0gJmNrX3BsbDEsCS5jb25faWQgPSAiY2tfcGxsMSIJfSwKKwl7IC5jbGsgPSAmY2tfcGxsNCwJLmNvbl9pZCA9ICJja19wbGw0Igl9LAorCXsgLmNsayA9ICZja19wbGw1LAkuY29uX2lkID0gImNrX3BsbDUiCX0sCisJeyAuY2xrID0gJmNrX3BsbDMsCS5jb25faWQgPSAiY2tfcGxsMyIJfSwKKwl7IC5jbGsgPSAmdmZwOV9jaywJLmNvbl9pZCA9ICJ2ZnA5X2NrIgl9LAorCXsgLmNsayA9ICZtMmhjbGtfY2ssCS5jb25faWQgPSAibTJoY2xrX2NrIgl9LAorCXsgLmNsayA9ICZoY2xrX2NrLAkuY29uX2lkID0gImhjbGtfY2siCX0sCisJeyAuY2xrID0gJmRtYV9jaywJLmNvbl9pZCA9ICJkbWFfY2siCX0sCisJeyAuY2xrID0gJmZsYXNoX2NrLAkuY29uX2lkID0gImZsYXNoX2NrIgl9LAorCXsgLmNsayA9ICZkdW1fY2ssCS5jb25faWQgPSAiZHVtX2NrIgl9LAorCXsgLmNsayA9ICZrZXlzY2FuX2NrLAkuY29uX2lkID0gImtleXNjYW5fY2siCX0sCisJeyAuY2xrID0gJnB3bTFfY2ssCS5jb25faWQgPSAicHdtMV9jayIJfSwKKwl7IC5jbGsgPSAmcHdtMl9jaywJLmNvbl9pZCA9ICJwd20yX2NrIgl9LAorCXsgLmNsayA9ICZqcGVnX2NrLAkuY29uX2lkID0gImpwZWdfY2siCX0sCisJeyAuY2xrID0gJm1zX2NrLAkuY29uX2lkID0gIm1zX2NrIgl9LAorCXsgLmNsayA9ICZ0b3VjaF9jaywJLmNvbl9pZCA9ICJ0b3VjaF9jayIJfSwKKwl7IC5jbGsgPSAmaTJjMF9jaywJLmRldl9pZCA9ICJwbngtaTJjLjAiCX0sCisJeyAuY2xrID0gJmkyYzFfY2ssCS5kZXZfaWQgPSAicG54LWkyYy4xIgl9LAorCXsgLmNsayA9ICZpMmMyX2NrLAkuZGV2X2lkID0gInBueC1pMmMuMiIJfSwKKwl7IC5jbGsgPSAmc3BpMF9jaywJLmNvbl9pZCA9ICJzcGkwX2NrIgl9LAorCXsgLmNsayA9ICZzcGkxX2NrLAkuY29uX2lkID0gInNwaTFfY2siCX0sCisJeyAuY2xrID0gJnVhcnQzX2NrLAkuY29uX2lkID0gInVhcnQzX2NrIgl9LAorCXsgLmNsayA9ICZ1YXJ0NF9jaywJLmNvbl9pZCA9ICJ1YXJ0NF9jayIJfSwKKwl7IC5jbGsgPSAmdWFydDVfY2ssCS5jb25faWQgPSAidWFydDVfY2siCX0sCisJeyAuY2xrID0gJnVhcnQ2X2NrLAkuY29uX2lkID0gInVhcnQ2X2NrIgl9LAorCXsgLmNsayA9ICZ3ZHRfY2ssCS5kZXZfaWQgPSAicG54NDAwOC13YXRjaGRvZyIgfSwKK307CisKK3N0YXRpYyB2b2lkIGxvY2FsX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoV0FSTl9PTihjbGstPnVzZWNvdW50ID09IDApKQorCQlyZXR1cm47CisKKwlpZiAoISgtLWNsay0+dXNlY291bnQpKSB7CisJCWlmIChjbGstPmRpc2FibGUpCisJCQljbGstPmRpc2FibGUoY2xrKTsKKwkJZWxzZSBpZiAoIShjbGstPmZsYWdzICYgRklYRURfUkFURSkgJiYgY2xrLT5yYXRlICYmIGNsay0+c2V0X3JhdGUpCisJCQljbGstPnNldF9yYXRlKGNsaywgMCk7CisJCWlmIChjbGstPnBhcmVudCkKKwkJCWxvY2FsX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgbG9jYWxfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoIShjbGstPmZsYWdzICYgRklYRURfUkFURSkgJiYgIWNsay0+cmF0ZSAmJiBjbGstPnNldF9yYXRlCi0JICAgICYmIGNsay0+dXNlcl9yYXRlKQotCQlyZXQgPSBjbGstPnNldF9yYXRlKGNsaywgY2xrLT51c2VyX3JhdGUpOwotCXJldHVybiByZXQ7Ci19CisJaWYgKGNsay0+dXNlY291bnQgPT0gMCkgeworCQlpZiAoY2xrLT5wYXJlbnQpIHsKKwkJCXJldCA9IGxvY2FsX2Nsa19lbmFibGUoY2xrLT5wYXJlbnQpOworCQkJaWYgKHJldCAhPSAwKQorCQkJCWdvdG8gb3V0OworCQl9CiAKLXN0YXRpYyB2b2lkIGxvY2FsX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpZiAoIShjbGstPmZsYWdzICYgRklYRURfUkFURSkgJiYgY2xrLT5yYXRlICYmIGNsay0+c2V0X3JhdGUpCi0JCWNsay0+c2V0X3JhdGUoY2xrLCAwKTsKLX0KKwkJaWYgKGNsay0+ZW5hYmxlKQorCQkJcmV0ID0gY2xrLT5lbmFibGUoY2xrKTsKKwkJZWxzZSBpZiAoIShjbGstPmZsYWdzICYgRklYRURfUkFURSkgJiYgIWNsay0+cmF0ZSAmJiBjbGstPnNldF9yYXRlCisJCQkgICAgJiYgY2xrLT51c2VyX3JhdGUpCisJCQlyZXQgPSBjbGstPnNldF9yYXRlKGNsaywgY2xrLT51c2VyX3JhdGUpOwogCi1zdGF0aWMgdm9pZCBsb2NhbF9jbGtfdW51c2Uoc3RydWN0IGNsayAqY2xrKQotewotCWlmIChjbGstPnVzZWNvdW50ID4gMCAmJiAhKC0tY2xrLT51c2Vjb3VudCkpIHsKLQkJbG9jYWxfY2xrX2Rpc2FibGUoY2xrKTsKLQkJaWYgKGNsay0+cGFyZW50KQotCQkJbG9jYWxfY2xrX3VudXNlKGNsay0+cGFyZW50KTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgbG9jYWxfY2xrX3VzZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaW50IHJldCA9IDA7Ci0JaWYgKGNsay0+dXNlY291bnQrKyA9PSAwKSB7Ci0JCWlmIChjbGstPnBhcmVudCkKLQkJCXJldCA9IGxvY2FsX2Nsa191c2UoY2xrLT5wYXJlbnQpOwotCi0JCWlmIChyZXQgIT0gMCkgewotCQkJY2xrLT51c2Vjb3VudC0tOworCQlpZiAocmV0ICE9IDAgJiYgY2xrLT5wYXJlbnQpIHsKKwkJCWxvY2FsX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJcmV0ID0gbG9jYWxfY2xrX2VuYWJsZShjbGspOwotCi0JCWlmIChyZXQgIT0gMCAmJiBjbGstPnBhcmVudCkgewotCQkJbG9jYWxfY2xrX3VudXNlKGNsay0+cGFyZW50KTsKLQkJCWNsay0+dXNlY291bnQtLTsKLQkJfQorCQljbGstPnVzZWNvdW50Kys7CiAJfQogb3V0OgogCXJldHVybiByZXQ7CkBAIC04NjYsMzUgKzg5Niw2IEBACiAKIEVYUE9SVF9TWU1CT0woY2xrX3NldF9yYXRlKTsKIAotc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQotewotCXN0cnVjdCBjbGsgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7Ci0Jc3RydWN0IGNsayAqKmNsa3A7Ci0KLQljbG9ja19sb2NrKCk7Ci0JZm9yIChjbGtwID0gb25jaGlwX2Nsa3M7IGNsa3AgPCBvbmNoaXBfY2xrcyArIEFSUkFZX1NJWkUob25jaGlwX2Nsa3MpOwotCSAgICAgY2xrcCsrKSB7Ci0JCWlmIChzdHJjbXAoaWQsICgqY2xrcCktPm5hbWUpID09IDAKLQkJICAgICYmIHRyeV9tb2R1bGVfZ2V0KCgqY2xrcCktPm93bmVyKSkgewotCQkJY2xrID0gKCpjbGtwKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWNsb2NrX3VubG9jaygpOwotCi0JcmV0dXJuIGNsazsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2dldCk7Ci0KLXZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCi17Ci0JY2xvY2tfbG9jaygpOwotCWlmIChjbGsgJiYgIUlTX0VSUihjbGspKQotCQltb2R1bGVfcHV0KGNsay0+b3duZXIpOwotCWNsb2NrX3VubG9jaygpOwotfQotRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKLQogdW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgcmV0OwpAQCAtOTA3LDEwICs5MDgsMTAgQEAKIAogaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewotCWludCByZXQgPSAwOworCWludCByZXQ7CiAKIAljbG9ja19sb2NrKCk7Ci0JcmV0ID0gbG9jYWxfY2xrX3VzZShjbGspOworCXJldCA9IGxvY2FsX2Nsa19lbmFibGUoY2xrKTsKIAljbG9ja191bmxvY2soKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtOTIwLDcgKzkyMSw3IEBACiB2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAljbG9ja19sb2NrKCk7Ci0JbG9jYWxfY2xrX3VudXNlKGNsayk7CisJbG9jYWxfY2xrX2Rpc2FibGUoY2xrKTsKIAljbG9ja191bmxvY2soKTsKIH0KIApAQCAtOTY3LDE4ICs5NjgsMjQgQEAKIAogCWZvciAoY2xrcCA9IG9uY2hpcF9jbGtzOyBjbGtwIDwgb25jaGlwX2Nsa3MgKyBBUlJBWV9TSVpFKG9uY2hpcF9jbGtzKTsKIAkgICAgIGNsa3ArKykgewotCQlpZiAoKCgqY2xrcCktPmZsYWdzICYgTkVFRFNfSU5JVElBTElaQVRJT04pCi0JCSAgICAmJiAoKCpjbGtwKS0+c2V0X3JhdGUpKSB7Ci0JCQkoKmNsa3ApLT51c2VyX3JhdGUgPSAoKmNsa3ApLT5yYXRlOwotCQkJbG9jYWxfc2V0X3JhdGUoKCpjbGtwKSwgKCpjbGtwKS0+dXNlcl9yYXRlKTsKLQkJCWlmICgoKmNsa3ApLT5zZXRfcGFyZW50KQotCQkJCSgqY2xrcCktPnNldF9wYXJlbnQoKCpjbGtwKSwgKCpjbGtwKS0+cGFyZW50KTsKKwkJc3RydWN0IGNsayAqY2xrID0gKmNsa3A7CisJCWlmIChjbGstPmZsYWdzICYgTkVFRFNfSU5JVElBTElaQVRJT04pIHsKKwkJCWlmIChjbGstPnNldF9yYXRlKSB7CisJCQkJY2xrLT51c2VyX3JhdGUgPSBjbGstPnJhdGU7CisJCQkJbG9jYWxfc2V0X3JhdGUoY2xrLCBjbGstPnVzZXJfcmF0ZSk7CisJCQkJaWYgKGNsay0+c2V0X3BhcmVudCkKKwkJCQkJY2xrLT5zZXRfcGFyZW50KGNsaywgY2xrLT5wYXJlbnQpOworCQkJfQorCQkJaWYgKGNsay0+ZW5hYmxlICYmIGNsay0+dXNlY291bnQpCisJCQkJY2xrLT5lbmFibGUoY2xrKTsKKwkJCWlmIChjbGstPmRpc2FibGUgJiYgIWNsay0+dXNlY291bnQpCisJCQkJY2xrLT5kaXNhYmxlKGNsayk7CiAJCX0KIAkJcHJfZGVidWcoIiVzOiBjbG9jayAlcywgcmF0ZSAlbGRcbiIsCi0JCQlfX2Z1bmNfXywgKCpjbGtwKS0+bmFtZSwgKCpjbGtwKS0+cmF0ZSk7CisJCQlfX2Z1bmNfXywgY2xrLT5uYW1lLCBjbGstPnJhdGUpOwogCX0KIAotCWxvY2FsX2Nsa191c2UoJmNrX3BsbDQpOworCWxvY2FsX2Nsa19lbmFibGUoJmNrX3BsbDQpOwogCiAJLyogaWYgY2tfMTNNSHogaXMgbm90IHVzZWQsIGRpc2FibGUgaXQuICovCiAJaWYgKGNrXzEzTUh6LnVzZWNvdW50ID09IDApCkBAIC05ODcsNiArOTk0LDggQEAKIAkvKiBEaXNhYmxlIGF1dG9jbG9ja2luZyAqLwogCV9fcmF3X3dyaXRlYigweGZmLCBBVVRPQ0xLX0NUUkwpOwogCisJY2xrZGV2X2FkZF90YWJsZShvbmNoaXBfY2xrcmVnLCBBUlJBWV9TSVpFKG9uY2hpcF9jbGtyZWcpKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jbG9jay5oCmluZGV4IGNkNThmMzcuLjM5NzIwZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jbG9jay5oCkBAIC0xNCw4ICsxNCw2IEBACiAjZGVmaW5lIF9fQVJDSF9BUk1fUE5YNDAwOF9DTE9DS19IX18KIAogc3RydWN0IGNsayB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBub2RlOwotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAJc3RydWN0IGNsayAqcGFyZW50OwogCXN0cnVjdCBjbGsgKnByb3BhZ2F0ZV9uZXh0OwpAQCAtMjksOSArMjcsMTEgQEAKIAl1OCBlbmFibGVfc2hpZnQxOwogCXUzMiBlbmFibGVfcmVnMTsKIAl1MzIgcGFyZW50X3N3aXRjaF9yZWc7Ci0JIHUzMigqcm91bmRfcmF0ZSkgKHN0cnVjdCBjbGsgKiwgdTMyKTsKKwl1MzIoKnJvdW5kX3JhdGUpIChzdHJ1Y3QgY2xrICosIHUzMik7CiAJaW50ICgqc2V0X3JhdGUpIChzdHJ1Y3QgY2xrICosIHUzMik7CiAJaW50ICgqc2V0X3BhcmVudCkgKHN0cnVjdCBjbGsgKiBjbGssIHN0cnVjdCBjbGsgKiBwYXJlbnQpOworCWludCAoKmVuYWJsZSkoc3RydWN0IGNsayAqKTsKKwl2b2lkICgqZGlzYWJsZSkoc3RydWN0IGNsayAqKTsKIH07CiAKIC8qIEZsYWdzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvaTJjLmMgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvaTJjLmMKaW5kZXggZjNmZWEyOS4uODEwM2Y5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2kyYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pMmMuYwpAQCAtMTgsMTIwICsxOCwyNCBAQAogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+CiAKLXN0YXRpYyBpbnQgc2V0X2Nsb2NrX3J1bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBjbGsgKmNsazsKLQljaGFyIG5hbWVbMTBdOwotCWludCByZXR2YWwgPSAwOwotCi0Jc25wcmludGYobmFtZSwgMTAsICJpMmMlZF9jayIsIHBkZXYtPmlkKTsKLQljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIG5hbWUpOwotCWlmICghSVNfRVJSKGNsaykpIHsKLQkJY2xrX3NldF9yYXRlKGNsaywgMSk7Ci0JCWNsa19wdXQoY2xrKTsKLQl9IGVsc2UKLQkJcmV0dmFsID0gLUVOT0VOVDsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X2Nsb2NrX3N0b3Aoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgY2xrICpjbGs7Ci0JY2hhciBuYW1lWzEwXTsKLQlpbnQgcmV0dmFsID0gMDsKLQotCXNucHJpbnRmKG5hbWUsIDEwLCAiaTJjJWRfY2siLCBwZGV2LT5pZCk7Ci0JY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBuYW1lKTsKLQlpZiAoIUlTX0VSUihjbGspKSB7Ci0JCWNsa19zZXRfcmF0ZShjbGssIDApOwotCQljbGtfcHV0KGNsayk7Ci0JfSBlbHNlCi0JCXJldHZhbCA9IC1FTk9FTlQ7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgaW50IGkyY19wbnhfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JaW50IHJldHZhbCA9IDA7Ci0jaWZkZWYgQ09ORklHX1BNCi0JcmV0dmFsID0gc2V0X2Nsb2NrX3J1bihwZGV2KTsKLSNlbmRpZgotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBpbnQgaTJjX3BueF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlpbnQgcmV0dmFsID0gMDsKLSNpZmRlZiBDT05GSUdfUE0KLQlyZXR2YWwgPSBzZXRfY2xvY2tfcnVuKHBkZXYpOwotI2VuZGlmCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHUzMiBjYWxjdWxhdGVfaW5wdXRfZnJlcShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXJldHVybiBIQ0xLX01IWjsKLX0KLQotCi1zdGF0aWMgc3RydWN0IGkyY19wbnhfYWxnb19kYXRhIHBueF9hbGdvX2RhdGEwID0geworc3RhdGljIHN0cnVjdCBpMmNfcG54X2RhdGEgaTJjMF9kYXRhID0geworCS5uYW1lID0gSTJDX0NISVBfTkFNRSAiMCIsCiAJLmJhc2UgPSBQTlg0MDA4X0kyQzFfQkFTRSwKIAkuaXJxID0gSTJDXzFfSU5ULAogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSBwbnhfYWxnb19kYXRhMSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaTJjX3BueF9kYXRhIGkyYzFfZGF0YSA9IHsKKwkubmFtZSA9IEkyQ19DSElQX05BTUUgIjEiLAogCS5iYXNlID0gUE5YNDAwOF9JMkMyX0JBU0UsCiAJLmlycSA9IEkyQ18yX0lOVCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgcG54X2FsZ29fZGF0YTIgPSB7CitzdGF0aWMgc3RydWN0IGkyY19wbnhfZGF0YSBpMmMyX2RhdGEgPSB7CisJLm5hbWUgPSAiVVNCLUkyQyIsCiAJLmJhc2UgPSAoUE5YNDAwOF9VU0JfQ09ORklHX0JBU0UgKyAweDMwMCksCiAJLmlycSA9IFVTQl9JMkNfSU5ULAogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBwbnhfYWRhcHRlcjAgPSB7Ci0JLm5hbWUgPSBJMkNfQ0hJUF9OQU1FICIwIiwKLQkuYWxnb19kYXRhID0gJnBueF9hbGdvX2RhdGEwLAotfTsKLXN0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgcG54X2FkYXB0ZXIxID0gewotCS5uYW1lID0gSTJDX0NISVBfTkFNRSAiMSIsCi0JLmFsZ29fZGF0YSA9ICZwbnhfYWxnb19kYXRhMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgcG54X2FkYXB0ZXIyID0gewotCS5uYW1lID0gIlVTQi1JMkMiLAotCS5hbGdvX2RhdGEgPSAmcG54X2FsZ29fZGF0YTIsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19wbnhfZGF0YSBpMmMwX2RhdGEgPSB7Ci0JLnN1c3BlbmQgPSBpMmNfcG54X3N1c3BlbmQsCi0JLnJlc3VtZSA9IGkyY19wbnhfcmVzdW1lLAotCS5jYWxjdWxhdGVfaW5wdXRfZnJlcSA9IGNhbGN1bGF0ZV9pbnB1dF9mcmVxLAotCS5zZXRfY2xvY2tfcnVuID0gc2V0X2Nsb2NrX3J1biwKLQkuc2V0X2Nsb2NrX3N0b3AgPSBzZXRfY2xvY2tfc3RvcCwKLQkuYWRhcHRlciA9ICZwbnhfYWRhcHRlcjAsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19wbnhfZGF0YSBpMmMxX2RhdGEgPSB7Ci0JLnN1c3BlbmQgPSBpMmNfcG54X3N1c3BlbmQsCi0JLnJlc3VtZSA9IGkyY19wbnhfcmVzdW1lLAotCS5jYWxjdWxhdGVfaW5wdXRfZnJlcSA9IGNhbGN1bGF0ZV9pbnB1dF9mcmVxLAotCS5zZXRfY2xvY2tfcnVuID0gc2V0X2Nsb2NrX3J1biwKLQkuc2V0X2Nsb2NrX3N0b3AgPSBzZXRfY2xvY2tfc3RvcCwKLQkuYWRhcHRlciA9ICZwbnhfYWRhcHRlcjEsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19wbnhfZGF0YSBpMmMyX2RhdGEgPSB7Ci0JLnN1c3BlbmQgPSBpMmNfcG54X3N1c3BlbmQsCi0JLnJlc3VtZSA9IGkyY19wbnhfcmVzdW1lLAotCS5jYWxjdWxhdGVfaW5wdXRfZnJlcSA9IGNhbGN1bGF0ZV9pbnB1dF9mcmVxLAotCS5zZXRfY2xvY2tfcnVuID0gc2V0X2Nsb2NrX3J1biwKLQkuc2V0X2Nsb2NrX3N0b3AgPSBzZXRfY2xvY2tfc3RvcCwKLQkuYWRhcHRlciA9ICZwbnhfYWRhcHRlcjIsCi19OwotCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmMwX2RldmljZSA9IHsKIAkubmFtZSA9ICJwbngtaTJjIiwKIAkuaWQgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC9jbGtkZXYuaCBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvY2xrZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRiMzdhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvY2xrZGV2LmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfQ0xLREVWX0gKKyNkZWZpbmUgX19BU01fTUFDSF9DTEtERVZfSAorCisjZGVmaW5lIF9fY2xrX2dldChjbGspICh7IDE7IH0pCisjZGVmaW5lIF9fY2xrX3B1dChjbGspIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggNmQxNDA3Zi4uNmNhOGJkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTEsNyArMTEsNyBAQAogICoKICovCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdglccngsICMweDAwMDkwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL3RpbWV4LmgKaW5kZXggNWZmMDE5Ni4uYjM4M2M3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC90aW1leC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtMTQsNjAgKzE0LDYgQEAKICNpZm5kZWYgX19QTlg0MDA4X1RJTUVYX0gKICNkZWZpbmUgX19QTlg0MDA4X1RJTUVYX0gKIAotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCiAjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJMTAwMDAwMAogCi0jZGVmaW5lIFRJQ0tTMlVTRUNTKHgpCSh4KQotCi0vKiBNaWxsaVNlY29uZCBUaW1lciAtIENoYXB0ZXIgMjEgUGFnZSAyMDIgKi8KLQotI2RlZmluZSBNU1RJTV9JTlQgICAgIElPX0FERFJFU1MoKFBOWDQwMDhfTVNUSU1FUl9CQVNFICsgMHgwKSkKLSNkZWZpbmUgTVNUSU1fQ1RSTCAgICBJT19BRERSRVNTKChQTlg0MDA4X01TVElNRVJfQkFTRSArIDB4NCkpCi0jZGVmaW5lIE1TVElNX0NPVU5URVIgSU9fQUREUkVTUygoUE5YNDAwOF9NU1RJTUVSX0JBU0UgKyAweDgpKQotI2RlZmluZSBNU1RJTV9NQ1RSTCAgIElPX0FERFJFU1MoKFBOWDQwMDhfTVNUSU1FUl9CQVNFICsgMHgxNCkpCi0jZGVmaW5lIE1TVElNX01BVENIMCAgSU9fQUREUkVTUygoUE5YNDAwOF9NU1RJTUVSX0JBU0UgKyAweDE4KSkKLSNkZWZpbmUgTVNUSU1fTUFUQ0gxICBJT19BRERSRVNTKChQTlg0MDA4X01TVElNRVJfQkFTRSArIDB4MWMpKQotCi0vKiBIaWdoIFNwZWVkIFRpbWVyIC0gQ2hwYXRlciAyMiwgUGFnZSAyMDUgKi8KLQotI2RlZmluZSBIU1RJTV9JTlQgICAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgwKSkKLSNkZWZpbmUgSFNUSU1fQ1RSTCAgICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4NCkpCi0jZGVmaW5lIEhTVElNX0NPVU5URVIgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDgpKQotI2RlZmluZSBIU1RJTV9QTUFUQ0ggIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHhDKSkKLSNkZWZpbmUgSFNUSU1fUENPVU5UICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MTApKQotI2RlZmluZSBIU1RJTV9NQ1RSTCAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgxNCkpCi0jZGVmaW5lIEhTVElNX01BVENIMCAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDE4KSkKLSNkZWZpbmUgSFNUSU1fTUFUQ0gxICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MWMpKQotI2RlZmluZSBIU1RJTV9NQVRDSDIgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgyMCkpCi0jZGVmaW5lIEhTVElNX0NDUiAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDI4KSkKLSNkZWZpbmUgSFNUSU1fQ1IwICAgICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MkMpKQotI2RlZmluZSBIU1RJTV9DUjEgICAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgzMCkpCi0KLS8qIElNUE9SVEFOVDogYm90aCB0aW1lcnMgYXJlIFVQQ09VTlRJTkcgKi8KLQotLyogeFNUSU1fTUNUUkwgYml0IGRlZmluaXRpb25zICovCi0jZGVmaW5lIE1SMF9JTlQgICAgICAgIDEKLSNkZWZpbmUgUkVTRVRfQ09VTlQwICAgKDE8PDEpCi0jZGVmaW5lIFNUT1BfQ09VTlQwICAgICgxPDwyKQotI2RlZmluZSBNUjFfSU5UICAgICAgICAoMTw8MykKLSNkZWZpbmUgUkVTRVRfQ09VTlQxICAgKDE8PDQpCi0jZGVmaW5lIFNUT1BfQ09VTlQxICAgICgxPDw1KQotI2RlZmluZSBNUjJfSU5UICAgICAgICAoMTw8NikKLSNkZWZpbmUgUkVTRVRfQ09VTlQyICAgKDE8PDcpCi0jZGVmaW5lIFNUT1BfQ09VTlQyICAgICgxPDw4KQotCi0vKiB4U1RJTV9DVFJMIGJpdCBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBDT1VOVF9FTkFCICAgICAxCi0jZGVmaW5lIFJFU0VUX0NPVU5UICAgICgxPDwxKQotI2RlZmluZSBERUJVR19FTiAgICAgICAoMTw8MikKLQotLyogeFNUSU1fSU5UIGJpdCBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBNQVRDSDBfSU5UICAgICAxCi0jZGVmaW5lIE1BVENIMV9JTlQgICAgICgxPDwxKQotI2RlZmluZSBNQVRDSDJfSU5UICAgICAoMTw8MikKLSNkZWZpbmUgUlRDX1RJQ0swICAgICAgKDE8PDQpCi0jZGVmaW5lIFJUQ19USUNLMSAgICAgICgxPDw1KQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9wbS5jIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3BtLmMKaW5kZXggYjNkOGQ1My4uMWYwNTg1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3BtLmMKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3BtLmg+CiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3RpbWUuYwppbmRleCBmYzBiYTE4Li4wYzhhYWQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC90aW1lLmMKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAKKyNpbmNsdWRlICJ0aW1lLmgiCisKIC8qISBOb3RlOiBhbGwgdGltZXJzIGFyZSBVUENPVU5USU5HICovCiAKIC8qIQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3RpbWUuaCBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVlODhjNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC90aW1lLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvdGltZXguaAorICoKKyAqIFBOWDQwMDggdGltZXJzIGhlYWRlciBmaWxlCisgKgorICogQXV0aG9yOiBEbWl0cnkgQ2hpZ2lyZXYgPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKyNpZm5kZWYgUE5YX1RJTUVfSAorI2RlZmluZSBQTlhfVElNRV9ICisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2RlZmluZSBUSUNLUzJVU0VDUyh4KQkoeCkKKworLyogTWlsbGlTZWNvbmQgVGltZXIgLSBDaGFwdGVyIDIxIFBhZ2UgMjAyICovCisKKyNkZWZpbmUgTVNUSU1fSU5UICAgICBJT19BRERSRVNTKChQTlg0MDA4X01TVElNRVJfQkFTRSArIDB4MCkpCisjZGVmaW5lIE1TVElNX0NUUkwgICAgSU9fQUREUkVTUygoUE5YNDAwOF9NU1RJTUVSX0JBU0UgKyAweDQpKQorI2RlZmluZSBNU1RJTV9DT1VOVEVSIElPX0FERFJFU1MoKFBOWDQwMDhfTVNUSU1FUl9CQVNFICsgMHg4KSkKKyNkZWZpbmUgTVNUSU1fTUNUUkwgICBJT19BRERSRVNTKChQTlg0MDA4X01TVElNRVJfQkFTRSArIDB4MTQpKQorI2RlZmluZSBNU1RJTV9NQVRDSDAgIElPX0FERFJFU1MoKFBOWDQwMDhfTVNUSU1FUl9CQVNFICsgMHgxOCkpCisjZGVmaW5lIE1TVElNX01BVENIMSAgSU9fQUREUkVTUygoUE5YNDAwOF9NU1RJTUVSX0JBU0UgKyAweDFjKSkKKworLyogSGlnaCBTcGVlZCBUaW1lciAtIENocGF0ZXIgMjIsIFBhZ2UgMjA1ICovCisKKyNkZWZpbmUgSFNUSU1fSU5UICAgICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MCkpCisjZGVmaW5lIEhTVElNX0NUUkwgICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDQpKQorI2RlZmluZSBIU1RJTV9DT1VOVEVSIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHg4KSkKKyNkZWZpbmUgSFNUSU1fUE1BVENIICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4QykpCisjZGVmaW5lIEhTVElNX1BDT1VOVCAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDEwKSkKKyNkZWZpbmUgSFNUSU1fTUNUUkwgICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MTQpKQorI2RlZmluZSBIU1RJTV9NQVRDSDAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgxOCkpCisjZGVmaW5lIEhTVElNX01BVENIMSAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDFjKSkKKyNkZWZpbmUgSFNUSU1fTUFUQ0gyICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MjApKQorI2RlZmluZSBIU1RJTV9DQ1IgICAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgyOCkpCisjZGVmaW5lIEhTVElNX0NSMCAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDJDKSkKKyNkZWZpbmUgSFNUSU1fQ1IxICAgICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MzApKQorCisvKiBJTVBPUlRBTlQ6IGJvdGggdGltZXJzIGFyZSBVUENPVU5USU5HICovCisKKy8qIHhTVElNX01DVFJMIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBNUjBfSU5UICAgICAgICAxCisjZGVmaW5lIFJFU0VUX0NPVU5UMCAgICgxPDwxKQorI2RlZmluZSBTVE9QX0NPVU5UMCAgICAoMTw8MikKKyNkZWZpbmUgTVIxX0lOVCAgICAgICAgKDE8PDMpCisjZGVmaW5lIFJFU0VUX0NPVU5UMSAgICgxPDw0KQorI2RlZmluZSBTVE9QX0NPVU5UMSAgICAoMTw8NSkKKyNkZWZpbmUgTVIyX0lOVCAgICAgICAgKDE8PDYpCisjZGVmaW5lIFJFU0VUX0NPVU5UMiAgICgxPDw3KQorI2RlZmluZSBTVE9QX0NPVU5UMiAgICAoMTw8OCkKKworLyogeFNUSU1fQ1RSTCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ09VTlRfRU5BQiAgICAgMQorI2RlZmluZSBSRVNFVF9DT1VOVCAgICAoMTw8MSkKKyNkZWZpbmUgREVCVUdfRU4gICAgICAgKDE8PDIpCisKKy8qIHhTVElNX0lOVCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTUFUQ0gwX0lOVCAgICAgMQorI2RlZmluZSBNQVRDSDFfSU5UICAgICAoMTw8MSkKKyNkZWZpbmUgTUFUQ0gyX0lOVCAgICAgKDE8PDIpCisjZGVmaW5lIFJUQ19USUNLMCAgICAgICgxPDw0KQorI2RlZmluZSBSVENfVElDSzEgICAgICAoMTw8NSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suYwppbmRleCA0OWFlMzgyLi5hYmJhMDA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmMKQEAgLTc4LDExICs3OCwzIEBACiAJLmVuYWJsZQkJPSBjbGtfY2tlbl9lbmFibGUsCiAJLmRpc2FibGUJPSBjbGtfY2tlbl9kaXNhYmxlLAogfTsKLQotdm9pZCBjbGtzX3JlZ2lzdGVyKHN0cnVjdCBjbGtfbG9va3VwICpjbGtzLCBzaXplX3QgbnVtKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQotCQljbGtkZXZfYWRkKCZjbGtzW2ldKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5oCmluZGV4IDk3OGEzNjYuLmQ4NDg4NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suaApAQCAtNjcsNyArNjcsMyBAQAogZXh0ZXJuIHZvaWQgY2xrX3B4YTN4eF9ja2VuX2Rpc2FibGUoc3RydWN0IGNsayAqKTsKICNlbmRpZgogCi12b2lkIGNsa3NfcmVnaXN0ZXIoc3RydWN0IGNsa19sb29rdXAgKmNsa3MsIHNpemVfdCBudW0pOwotaW50IGNsa19hZGRfYWxpYXMoY29uc3QgY2hhciAqYWxpYXMsIGNvbnN0IGNoYXIgKmFsaWFzX25hbWUsIGNoYXIgKmlkLAotCXN0cnVjdCBkZXZpY2UgKmRldik7Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYwppbmRleCA5MTQxN2YwLi45NmVkMTMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jCkBAIC0xMjgsNiArMTI4LDYgQEAKIAogdm9pZCBlc2VyaWVzX3JlZ2lzdGVyX2Nsa3Modm9pZCkKIHsKLQljbGtzX3JlZ2lzdGVyKGVzZXJpZXNfY2xrcmVncywgQVJSQVlfU0laRShlc2VyaWVzX2Nsa3JlZ3MpKTsKKwljbGtkZXZfYWRkX3RhYmxlKGVzZXJpZXNfY2xrcmVncywgQVJSQVlfU0laRShlc2VyaWVzX2Nsa3JlZ3MpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NhbWVyYS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NhbWVyYS5oCmluZGV4IDMxYWJlNmQuLjY3MDliMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jYW1lcmEuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY2FtZXJhLmgKQEAgLTM1LDggKzM1LDYgQEAKICNkZWZpbmUgUFhBX0NBTUVSQV9WU1AJCTB4NDAwCiAKIHN0cnVjdCBweGFjYW1lcmFfcGxhdGZvcm1fZGF0YSB7Ci0JaW50ICgqaW5pdCkoc3RydWN0IGRldmljZSAqKTsKLQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBtY2xrXzEwa2h6OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggNTVkNmExNy4uMDFjZjgxMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTEzLDcgKzEzLDcgQEAKIAogI2luY2x1ZGUgImhhcmR3YXJlLmgiCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgIzB4NDAwMDAwMDAJCUAgcGh5c2ljYWwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IGU5MGM1ZWUuLmJmZWNmYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtOCw0ICs4LDQgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoMHhlODAwMDAwMCkKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKDB4ZTgwMDAwMDBVTCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjV4LmMKaW5kZXggMmMxYjBiNy4uMGI5YWQzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjV4LmMKQEAgLTM0OSw3ICszNDksNyBAQAogCiAJCXJlc2V0X3N0YXR1cyA9IFJDU1I7CiAKLQkJY2xrc19yZWdpc3RlcihweGEyNXhfY2xrcmVncywgQVJSQVlfU0laRShweGEyNXhfY2xrcmVncykpOworCQljbGtkZXZfYWRkX3RhYmxlKHB4YTI1eF9jbGtyZWdzLCBBUlJBWV9TSVpFKHB4YTI1eF9jbGtyZWdzKSk7CiAKIAkJaWYgKChyZXQgPSBweGFfaW5pdF9kbWEoSVJRX0RNQSwgMTYpKSkKIAkJCXJldHVybiByZXQ7CkBAIC0zNzAsNyArMzcwLDcgQEAKIAogCS8qIE9ubHkgYWRkIEhXVUFSVCBmb3IgUFhBMjU1LzI2eDsgUFhBMjEwLzI1MCBkbyBub3QgaGF2ZSBpdC4gKi8KIAlpZiAoY3B1X2lzX3B4YTI1NSgpKQotCQljbGtzX3JlZ2lzdGVyKCZweGEyNXhfaHd1YXJ0X2Nsa3JlZywgMSk7CisJCWNsa2Rldl9hZGQoJnB4YTI1eF9od3VhcnRfY2xrcmVnKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCmluZGV4IDZhMGI3MzEuLmQ3ODMxMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCkBAIC0zOTIsNyArMzkyLDcgQEAKIAogCQlyZXNldF9zdGF0dXMgPSBSQ1NSOwogCi0JCWNsa3NfcmVnaXN0ZXIocHhhMjd4X2Nsa3JlZ3MsIEFSUkFZX1NJWkUocHhhMjd4X2Nsa3JlZ3MpKTsKKwkJY2xrZGV2X2FkZF90YWJsZShweGEyN3hfY2xrcmVncywgQVJSQVlfU0laRShweGEyN3hfY2xrcmVncykpOwogCiAJCWlmICgocmV0ID0gcHhhX2luaXRfZG1hKElSUV9ETUEsIDMyKSkpCiAJCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzMDAuYwppbmRleCBmNGFmNmUyYi4uNDBiYjE2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKQEAgLTEwMiwxMiArMTAyLDEyIEBACiAJaWYgKGNwdV9pc19weGEzMDAoKSB8fCBjcHVfaXNfcHhhMzEwKCkpIHsKIAkJbWZwX2luaXRfYmFzZShpb19wMnYoTUZQUl9CQVNFKSk7CiAJCW1mcF9pbml0X2FkZHIocHhhMzAwX21mcF9hZGRyX21hcCk7Ci0JCWNsa3NfcmVnaXN0ZXIoQVJSQVlfQU5EX1NJWkUoY29tbW9uX2Nsa3JlZ3MpKTsKKwkJY2xrZGV2X2FkZF90YWJsZShBUlJBWV9BTkRfU0laRShjb21tb25fY2xrcmVncykpOwogCX0KIAogCWlmIChjcHVfaXNfcHhhMzEwKCkpIHsKIAkJbWZwX2luaXRfYWRkcihweGEzMTBfbWZwX2FkZHJfbWFwKTsKLQkJY2xrc19yZWdpc3RlcihBUlJBWV9BTkRfU0laRShweGEzMTBfY2xrcmVncykpOworCQljbGtkZXZfYWRkX3RhYmxlKEFSUkFZX0FORF9TSVpFKHB4YTMxMF9jbGtyZWdzKSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzMjAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jCmluZGV4IGM3MzczZTcuLjhkNjE0ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jCkBAIC05MCw3ICs5MCw3IEBACiAJaWYgKGNwdV9pc19weGEzMjAoKSkgewogCQltZnBfaW5pdF9iYXNlKGlvX3AydihNRlBSX0JBU0UpKTsKIAkJbWZwX2luaXRfYWRkcihweGEzMjBfbWZwX2FkZHJfbWFwKTsKLQkJY2xrc19yZWdpc3RlcihBUlJBWV9BTkRfU0laRShweGEzMjBfY2xrcmVncykpOworCQljbGtkZXZfYWRkX3RhYmxlKEFSUkFZX0FORF9TSVpFKHB4YTMyMF9jbGtyZWdzKSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTN4eC5jCmluZGV4IGZjYjA3MjEuLjRkN2MwM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTN4eC5jCkBAIC02MzQsNyArNjM0LDcgQEAKIAkJICovCiAJCUFTQ1IgJj0gfihBU0NSX1JESCB8IEFTQ1JfRDFTIHwgQVNDUl9EMlMgfCBBU0NSX0QzUyk7CiAKLQkJY2xrc19yZWdpc3RlcihweGEzeHhfY2xrcmVncywgQVJSQVlfU0laRShweGEzeHhfY2xrcmVncykpOworCQljbGtkZXZfYWRkX3RhYmxlKHB4YTN4eF9jbGtyZWdzLCBBUlJBWV9TSVpFKHB4YTN4eF9jbGtyZWdzKSk7CiAKIAkJaWYgKChyZXQgPSBweGFfaW5pdF9kbWEoSVJRX0RNQSwgMzIpKSkKIAkJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCmluZGV4IDlmMjkzNDMuLjkwYmQ0ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCkBAIC0zNDYsMTAgKzM0Niw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNsa19pbml0KHZvaWQpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQotCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKKwljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOwogCXJldHVybiAwOwogfQogYXJjaF9pbml0Y2FsbChjbGtfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA5MzJkOGFmLi44NjYyMjI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTMzLDcgKzMzLDcgQEAKICNlcnJvciAiVW5rbm93biBSZWFsVmlldyBwbGF0Zm9ybSIKICNlbmRpZgogCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQltb3ZlcQlccngsICAgICAgIzB4MTAwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCBmZTBkZTFiLi5hMmE0YzY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0xOCw0ICsxOCw0IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCi0jZGVmaW5lIFZNQUxMT0NfRU5ECQkweGY4MDAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5ECQkweGY4MDAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcnBjL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggYjJhOTM5ZmYuLjZmYzhkNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcnBjL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtcnBjL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMSw3ICsxMSw3IEBACiAgKgogKi8KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAjMHgwMzAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDRjMjlhODkuLjBlZWY3OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTE5LDcgKzE5LDcgQEAKICNkZWZpbmUgUzNDMjQxMF9VQVJUMV9PRkYgKDB4NDAwMCkKICNkZWZpbmUgU0hJRlRfMjQ0MFRYRiAoMTQtOSkKIAotCS5tYWNybyBhZGRydWFydCwgcngKKwkubWFjcm8gYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEKIAkJbGRyZXEJXHJ4LCA9IFMzQzI0WFhfUEFfVUFSVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGYwZWYwYWIuLjIzOTQ3NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDxtYWNoL21hcC5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KIAotCS5tYWNybyBhZGRydWFydCwgcngKKwkubWFjcm8gYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEKIAkJbGRyZXEJXHJ4LCA9IFMzQzI0WFhfUEFfVUFSVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCA0ZDRmZTQ4Li45MTQ2NTY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMTIsNiArMTIsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX1ZNQUxMT0NfSAogI2RlZmluZSBfX0FTTV9BUkNIX1ZNQUxMT0NfSAogCi0jZGVmaW5lIFZNQUxMT0NfRU5ECSAgKDB4RTAwMDAwMDApCisjZGVmaW5lIFZNQUxMT0NfRU5ECSAgKDB4ZTAwMDAwMDBVTCkKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVk1BTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggYjE4YWM1Mi4uNWM4ODg3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMjEsNyArMjEsNyBAQAogCSAqIGFsaWduZWQgYW5kIGFkZCBpbiB0aGUgb2Zmc2V0IHdoZW4gd2UgbG9hZCB0aGUgdmFsdWUgaGVyZS4KIAkgKi8KIAotCS5tYWNybyBhZGRydWFydCwgcngKKwkubWFjcm8gYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEKIAkJbGRyZXEJXHJ4LCA9IFMzQ19QQV9VQVJUCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggOWQxNDJjYy4uZTE4MWY1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMjIsNyArMjIsNyBAQAogCSAqIGFsaWduZWQgYW5kIGFkZCBpbiB0aGUgb2Zmc2V0IHdoZW4gd2UgbG9hZCB0aGUgdmFsdWUgaGVyZS4KIAkgKi8KIAotCS5tYWNybyBhZGRydWFydCwgcngKKwkubWFjcm8gYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEKIAkJbGRyZXEJXHJ4LCA9IFMzQ19QQV9VQVJUCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDFmMDYzNGQuLjMzNmFkY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMiw3ICsxMiw3IEBACiAqLwogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAjMHg4MDAwMDAwMAlAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggZWM4ZmRjNS4uYjNkMDAyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0xLDQgKzEsNCBAQAogLyoKICAqIGFyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKICAqLwotI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoMHhlODAwMDAwMCkKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKDB4ZTgwMDAwMDBVTCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGY5N2E3NjIuLjUwZjA3MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTEsNyArMTEsNyBAQAogICoKICovCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltb3YJXHJ4LCAjMHhlMDAwMDAwMAogCQlvcnIJXHJ4LCBccngsICMweDAwMDAwM2Y4CiAJCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5jCmluZGV4IDExMWY3ZWEuLjVhZjcxZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5jCkBAIC02MTAsMzQgKzYxMCwzNCBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfcm91bmRfcmF0ZV9tY2xrKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewotCWlmIChyYXRlID49IDE4OTAwMDAwKQorCWlmIChyYXRlIDw9IDE4OTAwMDAwKQogCQlyZXR1cm4gMTg5MDAwMDA7Ci0JaWYgKHJhdGUgPj0gMjA4MDAwMDApCisJaWYgKHJhdGUgPD0gMjA4MDAwMDApCiAJCXJldHVybiAyMDgwMDAwMDsKLQlpZiAocmF0ZSA+PSAyMzEwMDAwMCkKKwlpZiAocmF0ZSA8PSAyMzEwMDAwMCkKIAkJcmV0dXJuIDIzMTAwMDAwOwotCWlmIChyYXRlID49IDI2MDAwMDAwKQorCWlmIChyYXRlIDw9IDI2MDAwMDAwKQogCQlyZXR1cm4gMjYwMDAwMDA7Ci0JaWYgKHJhdGUgPj0gMjk3MDAwMDApCisJaWYgKHJhdGUgPD0gMjk3MDAwMDApCiAJCXJldHVybiAyOTcwMDAwMDsKLQlpZiAocmF0ZSA+PSAzNDcwMDAwMCkKKwlpZiAocmF0ZSA8PSAzNDcwMDAwMCkKIAkJcmV0dXJuIDM0NzAwMDAwOwotCWlmIChyYXRlID49IDQxNjAwMDAwKQorCWlmIChyYXRlIDw9IDQxNjAwMDAwKQogCQlyZXR1cm4gNDE2MDAwMDA7Ci0JaWYgKHJhdGUgPj0gNTIwMDAwMDApCisJaWYgKHJhdGUgPD0gNTIwMDAwMDApCiAJCXJldHVybiA1MjAwMDAwMDsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3JvdW5kX3JhdGVfY3B1Y2xrKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewotCWlmIChyYXRlID49IDEzMDAwMDAwKQorCWlmIChyYXRlIDw9IDEzMDAwMDAwKQogCQlyZXR1cm4gMTMwMDAwMDA7Ci0JaWYgKHJhdGUgPj0gNTIwMDAwMDApCisJaWYgKHJhdGUgPD0gNTIwMDAwMDApCiAJCXJldHVybiA1MjAwMDAwMDsKLQlpZiAocmF0ZSA+PSAxMDQwMDAwMDApCisJaWYgKHJhdGUgPD0gMTA0MDAwMDAwKQogCQlyZXR1cm4gMTA0MDAwMDAwOwotCWlmIChyYXRlID49IDIwODAwMDAwMCkKKwlpZiAocmF0ZSA8PSAyMDgwMDAwMDApCiAJCXJldHVybiAyMDgwMDAwMDA7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0xMjc2LDExICsxMjc2LDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGNsa19yZWdpc3Rlcih2b2lkKQogewotCWludCBpOwotCiAJLyogUmVnaXN0ZXIgdGhlIGxvb2t1cHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQotCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKKwljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jb3JlLmMKaW5kZXggNjUzZTI1Yi4uMDFiNTAzMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jCkBAIC0zLDcgKzMsNyBAQAogICogYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYwogICoKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBTVC1Fcmljc3NvbiBBQgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgU1QtRXJpY3Nzb24gQUIKICAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgogICogQ29yZSBwbGF0Zm9ybSBzdXBwb3J0LCBJUlEgaGFuZGxpbmcgYW5kIGRldmljZSBkZWZpbml0aW9ucy4KICAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2NvaDkwMTMxOC5oPgogCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC0yOSw2ICszMCw3IEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9zeXNjb24uaD4KKyNpbmNsdWRlIDxtYWNoL2RtYV9jaGFubmVscy5oPgogCiAjaW5jbHVkZSAiY2xvY2suaCIKICNpbmNsdWRlICJtbWMuaCIKQEAgLTM3Miw4ICszNzQsMTAxOSBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtYV9yZXNvdXJjZVtdID0geworCXsKKwkJLnN0YXJ0ID0gVTMwMF9ETUFDX0JBU0UsCisJCS5lbmQgPSBVMzAwX0RNQUNfQkFTRSArIFBBR0VfU0laRSAtIDEsCisJCS5mbGFncyA9ICBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gSVJRX1UzMDBfRE1BLAorCQkuZW5kID0gSVJRX1UzMDBfRE1BLAorCQkuZmxhZ3MgPSAgSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworI2lmZGVmIENPTkZJR19NQUNIX1UzMDBfQlMzMzUKKy8qIHBvaW50cyBvdXQgYWxsIGRtYSBzbGF2ZSBjaGFubmVscy4KKyAqIFN5bnRheCBpcyBbQTEsIEIxLCBBMiwgQjIsIC4uLi4gLC0xLC0xXQorICogU2VsZWN0IGFsbCBjaGFubmVscyBmcm9tIEEgdG8gQiwgZW5kIG9mIGxpc3QgaXMgbWFya2VkIHdpdGggLTEsLTEKKyAqLworc3RhdGljIGludCBkbWFfc2xhdmVfY2hhbm5lbHNbXSA9IHsKKwlVMzAwX0RNQV9NU0xfVFhfMCwgVTMwMF9ETUFfU1BJX1JYLAorCVUzMDBfRE1BX1VBUlQxX1RYLCBVMzAwX0RNQV9VQVJUMV9SWCwgLTEsIC0xfTsKKworLyogcG9pbnRzIG91dCBhbGwgZG1hIG1lbWNweSBjaGFubmVscy4gKi8KK3N0YXRpYyBpbnQgZG1hX21lbWNweV9jaGFubmVsc1tdID0geworCVUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV8wLCBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfOCwgLTEsIC0xfTsKKworI2Vsc2UgLyogQ09ORklHX01BQ0hfVTMwMF9CUzMzNSAqLworCitzdGF0aWMgaW50IGRtYV9zbGF2ZV9jaGFubmVsc1tdID0ge1UzMDBfRE1BX01TTF9UWF8wLCBVMzAwX0RNQV9TUElfUlgsIC0xLCAtMX07CitzdGF0aWMgaW50IGRtYV9tZW1jcHlfY2hhbm5lbHNbXSA9IHsKKwlVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfMCwgVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzEwLCAtMSwgLTF9OworCisjZW5kaWYKKworLyoqIHJlZ2lzdGVyIGRtYSBmb3IgbWVtb3J5IGFjY2VzcworICoKKyAqIGFjdGl2ZSAgMSBtZWFucyBkbWEgaW50ZW5kcyB0byBhY2Nlc3MgbWVtb3J5CisgKiAgICAgICAgIDAgbWVhbnMgZG1hIHdvbnQgYWNjZXNzIG1lbW9yeQorICovCitzdGF0aWMgdm9pZCBjb2g5MDEzMThfYWNjZXNzX21lbW9yeV9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgYWN0aXZlKQoreworfQorCisjZGVmaW5lIGZsYWdzX21lbWNweV9jb25maWcgKENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DRkdfUk1fTUVNT1JZX1RPX01FTU9SWSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DRkdfTENSX0RJU0FCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ0ZHX1RDX0lSUV9FTkFCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUpCisjZGVmaW5lIGZsYWdzX21lbWNweV9sbGlfY2hhaW5lZCAoQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9ESVNBQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFKQorI2RlZmluZSBmbGFnc19tZW1jcHlfbGxpIChDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0RJU0FCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UpCisjZGVmaW5lIGZsYWdzX21lbWNweV9sbGlfbGFzdCAoQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0RJU0FCTEUgfCBcCisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8IFwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwgXAorCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UpCisKK2NvbnN0IHN0cnVjdCBjb2hfZG1hX2NoYW5uZWwgY2hhbl9jb25maWdbVTMwMF9ETUFfQ0hBTk5FTFNdID0geworCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX01TTF9UWF8wLAorCQkubmFtZSA9ICJNU0wgVFggMCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwkJLmRldl9hZGRyID0gVTMwMF9NU0xfQkFTRSArIDAgKiAweDQwICsgMHgyMCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX01TTF9UWF8xLAorCQkubmFtZSA9ICJNU0wgVFggMSIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwkJLmRldl9hZGRyID0gVTMwMF9NU0xfQkFTRSArIDEgKiAweDQwICsgMHgyMCwKKwkJLnBhcmFtLmNvbmZpZyA9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSX00yVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFLAorCQkucGFyYW0uY3RybF9sbGkgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJfTTJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJfTTJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfTVNMX1RYXzIsCisJCS5uYW1lID0gIk1TTCBUWCAyIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCQkuZGV2X2FkZHIgPSBVMzAwX01TTF9CQVNFICsgMiAqIDB4NDAgKyAweDIwLAorCQkucGFyYW0uY29uZmlnID0gQ09IOTAxMzE4X0NYX0NGR19DSF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0xDUl9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfQkVfSVJRX0VOQUJMRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJfTTJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UsCisJCS5wYXJhbS5jdHJsX2xsaSA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUl9NMlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUl9NMlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UsCisJCS5kZXNjX25icl9tYXggPSAxMCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX01TTF9UWF8zLAorCQkubmFtZSA9ICJNU0wgVFggMyIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwkJLmRldl9hZGRyID0gVTMwMF9NU0xfQkFTRSArIDMgKiAweDQwICsgMHgyMCwKKwkJLnBhcmFtLmNvbmZpZyA9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSX00yVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFLAorCQkucGFyYW0uY3RybF9sbGkgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJfTTJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJfTTJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfTVNMX1RYXzQsCisJCS5uYW1lID0gIk1TTCBUWCA0IiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCQkuZGV2X2FkZHIgPSBVMzAwX01TTF9CQVNFICsgNCAqIDB4NDAgKyAweDIwLAorCQkucGFyYW0uY29uZmlnID0gQ09IOTAxMzE4X0NYX0NGR19DSF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0xDUl9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfQkVfSVJRX0VOQUJMRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJfTTJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UsCisJCS5wYXJhbS5jdHJsX2xsaSA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUl9NMlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUl9NMlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9NU0xfVFhfNSwKKwkJLm5hbWUgPSAiTVNMIFRYIDUiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJCS5kZXZfYWRkciA9IFUzMDBfTVNMX0JBU0UgKyA1ICogMHg0MCArIDB4MjAsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9NU0xfVFhfNiwKKwkJLm5hbWUgPSAiTVNMIFRYIDYiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJCS5kZXZfYWRkciA9IFUzMDBfTVNMX0JBU0UgKyA2ICogMHg0MCArIDB4MjAsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9NU0xfUlhfMCwKKwkJLm5hbWUgPSAiTVNMIFJYIDAiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJCS5kZXZfYWRkciA9IFUzMDBfTVNMX0JBU0UgKyAwICogMHg0MCArIDB4MjIwLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfTVNMX1JYXzEsCisJCS5uYW1lID0gIk1TTCBSWCAxIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCQkuZGV2X2FkZHIgPSBVMzAwX01TTF9CQVNFICsgMSAqIDB4NDAgKyAweDIyMCwKKwkJLnBhcmFtLmNvbmZpZyA9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTJSX00xVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9ERU1BTkRfRE1BMSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCQkucGFyYW0uY3RybF9sbGkgPSAwLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00yUl9NMVcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9ERU1BTkRfRE1BMSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfTVNMX1JYXzIsCisJCS5uYW1lID0gIk1TTCBSWCAyIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCQkuZGV2X2FkZHIgPSBVMzAwX01TTF9CQVNFICsgMiAqIDB4NDAgKyAweDIyMCwKKwkJLnBhcmFtLmNvbmZpZyA9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTJSX00xVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9ERU1BTkRfRE1BMSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCQkucGFyYW0uY3RybF9sbGkgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMlJfTTFXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfREVNQU5EX0RNQTEgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMlJfTTFXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfREVNQU5EX0RNQTEgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX01TTF9SWF8zLAorCQkubmFtZSA9ICJNU0wgUlggMyIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwkJLmRldl9hZGRyID0gVTMwMF9NU0xfQkFTRSArIDMgKiAweDQwICsgMHgyMjAsCisJCS5wYXJhbS5jb25maWcgPSBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfTENSX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19CRV9JUlFfRU5BQkxFLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00yUl9NMVcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfREVNQU5EX0RNQTEgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwkJLnBhcmFtLmN0cmxfbGxpID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTJSX00xVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0RFTUFORF9ETUExIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTJSX00xVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0RFTUFORF9ETUExIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9NU0xfUlhfNCwKKwkJLm5hbWUgPSAiTVNMIFJYIDQiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJCS5kZXZfYWRkciA9IFUzMDBfTVNMX0JBU0UgKyA0ICogMHg0MCArIDB4MjIwLAorCQkucGFyYW0uY29uZmlnID0gQ09IOTAxMzE4X0NYX0NGR19DSF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0xDUl9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfQkVfSVJRX0VOQUJMRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMlJfTTFXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0RFTUFORF9ETUExIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJCS5wYXJhbS5jdHJsX2xsaSA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00yUl9NMVcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9ERU1BTkRfRE1BMSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00yUl9NMVcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9ERU1BTkRfRE1BMSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfTVNMX1JYXzUsCisJCS5uYW1lID0gIk1TTCBSWCA1IiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCQkuZGV2X2FkZHIgPSBVMzAwX01TTF9CQVNFICsgNSAqIDB4NDAgKyAweDIyMCwKKwkJLnBhcmFtLmNvbmZpZyA9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTJSX00xVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9ERU1BTkRfRE1BMSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCQkucGFyYW0uY3RybF9sbGkgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMlJfTTFXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfREVNQU5EX0RNQTEgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzMyX0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMlJfTTFXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfREVNQU5EX0RNQTEgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX01TTF9SWF82LAorCQkubmFtZSA9ICJNU0wgUlggNiIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwkJLmRldl9hZGRyID0gVTMwMF9NU0xfQkFTRSArIDYgKiAweDQwICsgMHgyMjAsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9NTUNTRF9SWF9UWCwKKwkJLm5hbWUgPSAiTU1DU0QgUlggVFgiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJCS5kZXZfYWRkciA9ICBVMzAwX01NQ1NEX0JBU0UgKyAweDA4MCwKKwkJLnBhcmFtLmNvbmZpZyA9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1ksCisJCS5wYXJhbS5jdHJsX2xsaSA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMzJfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSwKKworCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfTVNQUk9fVFgsCisJCS5uYW1lID0gIk1TUFJPIFRYIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfTVNQUk9fUlgsCisJCS5uYW1lID0gIk1TUFJPIFJYIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfVUFSVDBfVFgsCisJCS5uYW1lID0gIlVBUlQwIFRYIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfVUFSVDBfUlgsCisJCS5uYW1lID0gIlVBUlQwIFJYIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfQVBFWF9UWCwKKwkJLm5hbWUgPSAiQVBFWCBUWCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX0FQRVhfUlgsCisJCS5uYW1lID0gIkFQRVggUlgiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9QQ01fSTJTMF9UWCwKKwkJLm5hbWUgPSAiUENNIEkyUzAgVFgiLAorCQkucHJpb3JpdHlfaGlnaCA9IDEsCisJCS5kZXZfYWRkciA9IFUzMDBfUENNX0kyUzBfQkFTRSArIDB4MTQsCisJCS5wYXJhbS5jb25maWcgPSBDT0g5MDEzMThfQ1hfQ0ZHX0NIX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfTENSX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19CRV9JUlFfRU5BQkxFLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMTZfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSwKKwkJLnBhcmFtLmN0cmxfbGxpID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8xNl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UsCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8xNl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX1BDTV9JMlMwX1JYLAorCQkubmFtZSA9ICJQQ00gSTJTMCBSWCIsCisJCS5wcmlvcml0eV9oaWdoID0gMSwKKwkJLmRldl9hZGRyID0gVTMwMF9QQ01fSTJTMF9CQVNFICsgMHgxMCwKKwkJLnBhcmFtLmNvbmZpZyA9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8xNl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfREVTVCwKKwkJLnBhcmFtLmN0cmxfbGxpID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8xNl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IDAgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfQlVSU1RfQ09VTlRfMTZfQllURVMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX01BU1RFUl9NT0RFX00xUlcgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfUENNX0kyUzFfVFgsCisJCS5uYW1lID0gIlBDTSBJMlMxIFRYIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAxLAorCQkuZGV2X2FkZHIgPSAgVTMwMF9QQ01fSTJTMV9CQVNFICsgMHgxNCwKKwkJLnBhcmFtLmNvbmZpZyA9IENPSDkwMTMxOF9DWF9DRkdfQ0hfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19MQ1JfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NGR19UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0JFX0lSUV9FTkFCTEUsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8xNl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFLAorCQkucGFyYW0uY3RybF9sbGkgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzE2X0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX1NPVVJDRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzE2X0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9IU1NfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRERNQV9MRUdBQ1kgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1BSRERfU09VUkNFLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfUENNX0kyUzFfUlgsCisJCS5uYW1lID0gIlBDTSBJMlMxIFJYIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAxLAorCQkuZGV2X2FkZHIgPSBVMzAwX1BDTV9JMlMxX0JBU0UgKyAweDEwLAorCQkucGFyYW0uY29uZmlnID0gQ09IOTAxMzE4X0NYX0NGR19DSF9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX0xDUl9ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ0ZHX1RDX0lSUV9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DRkdfQkVfSVJRX0VOQUJMRSwKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzE2X0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTUF9FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0hTU19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9ERE1BX0xFR0FDWSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9ERVNULAorCQkucGFyYW0uY3RybF9sbGkgPSAwIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19FTkFCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzE2X0JZVEVTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8zMl9CSVRTIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQUREUl9JTkNfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9NQVNURVJfTU9ERV9NMVJXIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ1BfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRElTQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gMCB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfRU5BQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8xNl9CWVRFUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0JVU19TSVpFXzMyX0JJVFMgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19BRERSX0lOQ19ESVNBQkxFIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfTUFTVEVSX01PREVfTTFSVyB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfVENfSVJRX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNQX0VOQUJMRSB8CisJCQkJQ09IOTAxMzE4X0NYX0NUUkxfSFNTX0RJU0FCTEUgfAorCQkJCUNPSDkwMTMxOF9DWF9DVFJMX0RETUFfTEVHQUNZIHwKKwkJCQlDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9YR0FNX0NESSwKKwkJLm5hbWUgPSAiWEdBTSBDREkiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9YR0FNX1BESSwKKwkJLm5hbWUgPSAiWEdBTSBQREkiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9TUElfVFgsCisJCS5uYW1lID0gIlNQSSBUWCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX1NQSV9SWCwKKwkJLm5hbWUgPSAiU1BJIFJYIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzAsCisJCS5uYW1lID0gIkdFTkVSQUwgMDAiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisKKwkJLnBhcmFtLmNvbmZpZyA9IGZsYWdzX21lbWNweV9jb25maWcsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gZmxhZ3NfbWVtY3B5X2xsaV9jaGFpbmVkLAorCQkucGFyYW0uY3RybF9sbGkgPSBmbGFnc19tZW1jcHlfbGxpLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IGZsYWdzX21lbWNweV9sbGlfbGFzdCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV8xLAorCQkubmFtZSA9ICJHRU5FUkFMIDAxIiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCisJCS5wYXJhbS5jb25maWcgPSBmbGFnc19tZW1jcHlfY29uZmlnLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IGZsYWdzX21lbWNweV9sbGlfY2hhaW5lZCwKKwkJLnBhcmFtLmN0cmxfbGxpID0gZmxhZ3NfbWVtY3B5X2xsaSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSBmbGFnc19tZW1jcHlfbGxpX2xhc3QsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfMiwKKwkJLm5hbWUgPSAiR0VORVJBTCAwMiIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKworCQkucGFyYW0uY29uZmlnID0gZmxhZ3NfbWVtY3B5X2NvbmZpZywKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSBmbGFnc19tZW1jcHlfbGxpX2NoYWluZWQsCisJCS5wYXJhbS5jdHJsX2xsaSA9IGZsYWdzX21lbWNweV9sbGksCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gZmxhZ3NfbWVtY3B5X2xsaV9sYXN0LAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzMsCisJCS5uYW1lID0gIkdFTkVSQUwgMDMiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisKKwkJLnBhcmFtLmNvbmZpZyA9IGZsYWdzX21lbWNweV9jb25maWcsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gZmxhZ3NfbWVtY3B5X2xsaV9jaGFpbmVkLAorCQkucGFyYW0uY3RybF9sbGkgPSBmbGFnc19tZW1jcHlfbGxpLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IGZsYWdzX21lbWNweV9sbGlfbGFzdCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV80LAorCQkubmFtZSA9ICJHRU5FUkFMIDA0IiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCisJCS5wYXJhbS5jb25maWcgPSBmbGFnc19tZW1jcHlfY29uZmlnLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IGZsYWdzX21lbWNweV9sbGlfY2hhaW5lZCwKKwkJLnBhcmFtLmN0cmxfbGxpID0gZmxhZ3NfbWVtY3B5X2xsaSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSBmbGFnc19tZW1jcHlfbGxpX2xhc3QsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfNSwKKwkJLm5hbWUgPSAiR0VORVJBTCAwNSIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKworCQkucGFyYW0uY29uZmlnID0gZmxhZ3NfbWVtY3B5X2NvbmZpZywKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSBmbGFnc19tZW1jcHlfbGxpX2NoYWluZWQsCisJCS5wYXJhbS5jdHJsX2xsaSA9IGZsYWdzX21lbWNweV9sbGksCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gZmxhZ3NfbWVtY3B5X2xsaV9sYXN0LAorCX0sCisJeworCQkubnVtYmVyID0gVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzYsCisJCS5uYW1lID0gIkdFTkVSQUwgMDYiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisKKwkJLnBhcmFtLmNvbmZpZyA9IGZsYWdzX21lbWNweV9jb25maWcsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gZmxhZ3NfbWVtY3B5X2xsaV9jaGFpbmVkLAorCQkucGFyYW0uY3RybF9sbGkgPSBmbGFnc19tZW1jcHlfbGxpLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IGZsYWdzX21lbWNweV9sbGlfbGFzdCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV83LAorCQkubmFtZSA9ICJHRU5FUkFMIDA3IiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCisJCS5wYXJhbS5jb25maWcgPSBmbGFnc19tZW1jcHlfY29uZmlnLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IGZsYWdzX21lbWNweV9sbGlfY2hhaW5lZCwKKwkJLnBhcmFtLmN0cmxfbGxpID0gZmxhZ3NfbWVtY3B5X2xsaSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSBmbGFnc19tZW1jcHlfbGxpX2xhc3QsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfOCwKKwkJLm5hbWUgPSAiR0VORVJBTCAwOCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKworCQkucGFyYW0uY29uZmlnID0gZmxhZ3NfbWVtY3B5X2NvbmZpZywKKwkJLnBhcmFtLmN0cmxfbGxpX2NoYWluZWQgPSBmbGFnc19tZW1jcHlfbGxpX2NoYWluZWQsCisJCS5wYXJhbS5jdHJsX2xsaSA9IGZsYWdzX21lbWNweV9sbGksCisJCS5wYXJhbS5jdHJsX2xsaV9sYXN0ID0gZmxhZ3NfbWVtY3B5X2xsaV9sYXN0LAorCX0sCisjaWZkZWYgQ09ORklHX01BQ0hfVTMwMF9CUzMzNQorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX1VBUlQxX1RYLAorCQkubmFtZSA9ICJVQVJUMSBUWCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwl9LAorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX1VBUlQxX1JYLAorCQkubmFtZSA9ICJVQVJUMSBSWCIsCisJCS5wcmlvcml0eV9oaWdoID0gMCwKKwl9CisjZWxzZQorCXsKKwkJLm51bWJlciA9IFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV85LAorCQkubmFtZSA9ICJHRU5FUkFMIDA5IiwKKwkJLnByaW9yaXR5X2hpZ2ggPSAwLAorCisJCS5wYXJhbS5jb25maWcgPSBmbGFnc19tZW1jcHlfY29uZmlnLAorCQkucGFyYW0uY3RybF9sbGlfY2hhaW5lZCA9IGZsYWdzX21lbWNweV9sbGlfY2hhaW5lZCwKKwkJLnBhcmFtLmN0cmxfbGxpID0gZmxhZ3NfbWVtY3B5X2xsaSwKKwkJLnBhcmFtLmN0cmxfbGxpX2xhc3QgPSBmbGFnc19tZW1jcHlfbGxpX2xhc3QsCisJfSwKKwl7CisJCS5udW1iZXIgPSBVMzAwX0RNQV9HRU5FUkFMX1BVUlBPU0VfMTAsCisJCS5uYW1lID0gIkdFTkVSQUwgMTAiLAorCQkucHJpb3JpdHlfaGlnaCA9IDAsCisKKwkJLnBhcmFtLmNvbmZpZyA9IGZsYWdzX21lbWNweV9jb25maWcsCisJCS5wYXJhbS5jdHJsX2xsaV9jaGFpbmVkID0gZmxhZ3NfbWVtY3B5X2xsaV9jaGFpbmVkLAorCQkucGFyYW0uY3RybF9sbGkgPSBmbGFnc19tZW1jcHlfbGxpLAorCQkucGFyYW0uY3RybF9sbGlfbGFzdCA9IGZsYWdzX21lbWNweV9sbGlfbGFzdCwKKwl9CisjZW5kaWYKK307CisKKworc3RhdGljIHN0cnVjdCBjb2g5MDEzMThfcGxhdGZvcm0gY29oOTAxMzE4X3BsYXRmb3JtID0geworCS5jaGFuc19zbGF2ZSA9IGRtYV9zbGF2ZV9jaGFubmVscywKKwkuY2hhbnNfbWVtY3B5ID0gZG1hX21lbWNweV9jaGFubmVscywKKwkuYWNjZXNzX21lbW9yeV9zdGF0ZSA9IGNvaDkwMTMxOF9hY2Nlc3NfbWVtb3J5X3N0YXRlLAorCS5jaGFuX2NvbmYgPSBjaGFuX2NvbmZpZywKKwkubWF4X2NoYW5uZWxzID0gVTMwMF9ETUFfQ0hBTk5FTFMsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB3ZG9nX2RldmljZSA9IHsKLQkubmFtZSA9ICJ3ZG9nIiwKKwkubmFtZSA9ICJjb2g5MDEzMjdfd2RvZyIsCiAJLmlkID0gLTEsCiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHdkb2dfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UgPSB3ZG9nX3Jlc291cmNlcywKQEAgLTQyOCwxMSArMTQ0MSwyMyBAQAogCS5yZXNvdXJjZSA9IGF2ZV9yZXNvdXJjZXMsCiB9OwogCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbWFfZGV2aWNlID0geworCS5uYW1lCQk9ICJjb2g5MDEzMTgiLAorCS5pZAkJPSAtMSwKKwkucmVzb3VyY2UJPSBkbWFfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShkbWFfcmVzb3VyY2UpLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmNvaDkwMTMxOF9wbGF0Zm9ybSwKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gfjAsCisJfSwKK307CisKIC8qCiAgKiBOb3RpY2UgdGhhdCBBTUJBIGRldmljZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBwbGF0Zm9ybSBkZXZpY2VzLgogICoKICAqLwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldnNbXSBfX2luaXRkYXRhID0geworCSZkbWFfZGV2aWNlLAogCSZpMmMwX2RldmljZSwKIAkmaTJjMV9kZXZpY2UsCiAJJmtleXBhZF9kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2dwaW8uYwppbmRleCAwYjM1ODI2Li41ZjYxZmQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9ncGlvLmMKQEAgLTU0Niw3ICs1NDYsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBVMzAwX0dQSU9fTUFYOyBpKyspIHsKIAkJdmFsID0gMDsKIAkJZm9yIChqID0gMDsgaiA8IDg7IGorKykKLQkJCXZhbCB8PSAodTMyKSgodTMwMF9ncGlvX2NvbmZpZ1tpXVtqXS5wdWxsX3VwID09IERJU0FCTEVfUFVMTF9VUCkpIDw8IGo7CisJCQl2YWwgfD0gKHUzMikoKHUzMDBfZ3Bpb19jb25maWdbaV1bal0ucHVsbF91cCA9PSBESVNBQkxFX1BVTExfVVApIDw8IGopOwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCXdyaXRlbCh2YWwsIHZpcnRiYXNlICsgVTMwMF9HUElPX1BYUEVSICsgaSAqIFUzMDBfR1BJT19QT1JUWF9TUEFDSU5HKTsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGYzYTFjYmIuLmNhNGEwMjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTEwLDcgKzEwLDcgQEAKICAqLwogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotCS5tYWNybwlhZGRydWFydCxyeAorCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCS8qIElmIHdlIG1vdmUgdGhlIGFkcmVzcyB1c2luZyBNTVUsIHVzZSB0aGlzLiAqLwogCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9kbWFfY2hhbm5lbHMuaCBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvZG1hX2NoYW5uZWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzOTE0OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvZG1hX2NoYW5uZWxzLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqCisgKiBhcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL2RtYV9jaGFubmVscy5oCisgKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFNULUVyaWNzc29uCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqIE1hcCBmaWxlIGZvciB0aGUgVTMwMCBkbWEgZHJpdmVyLgorICogQXV0aG9yOiBQZXIgRnJpZGVuIDxwZXIuZnJpZGVuQHN0ZXJpY3Nzb24uY29tPgorICovCisKKyNpZm5kZWYgRE1BX0NIQU5ORUxTX0gKKyNkZWZpbmUgRE1BX0NIQU5ORUxTX0gKKworI2RlZmluZSBVMzAwX0RNQV9NU0xfVFhfMCAgICAgICAgICAgICAwCisjZGVmaW5lIFUzMDBfRE1BX01TTF9UWF8xICAgICAgICAgICAgIDEKKyNkZWZpbmUgVTMwMF9ETUFfTVNMX1RYXzIgICAgICAgICAgICAgMgorI2RlZmluZSBVMzAwX0RNQV9NU0xfVFhfMyAgICAgICAgICAgICAzCisjZGVmaW5lIFUzMDBfRE1BX01TTF9UWF80ICAgICAgICAgICAgIDQKKyNkZWZpbmUgVTMwMF9ETUFfTVNMX1RYXzUgICAgICAgICAgICAgNQorI2RlZmluZSBVMzAwX0RNQV9NU0xfVFhfNiAgICAgICAgICAgICA2CisjZGVmaW5lIFUzMDBfRE1BX01TTF9SWF8wICAgICAgICAgICAgIDcKKyNkZWZpbmUgVTMwMF9ETUFfTVNMX1JYXzEgICAgICAgICAgICAgOAorI2RlZmluZSBVMzAwX0RNQV9NU0xfUlhfMiAgICAgICAgICAgICA5CisjZGVmaW5lIFUzMDBfRE1BX01TTF9SWF8zICAgICAgICAgICAgIDEwCisjZGVmaW5lIFUzMDBfRE1BX01TTF9SWF80ICAgICAgICAgICAgIDExCisjZGVmaW5lIFUzMDBfRE1BX01TTF9SWF81ICAgICAgICAgICAgIDEyCisjZGVmaW5lIFUzMDBfRE1BX01TTF9SWF82ICAgICAgICAgICAgIDEzCisjZGVmaW5lIFUzMDBfRE1BX01NQ1NEX1JYX1RYICAgICAgICAgIDE0CisjZGVmaW5lIFUzMDBfRE1BX01TUFJPX1RYICAgICAgICAgICAgIDE1CisjZGVmaW5lIFUzMDBfRE1BX01TUFJPX1JYICAgICAgICAgICAgIDE2CisjZGVmaW5lIFUzMDBfRE1BX1VBUlQwX1RYICAgICAgICAgICAgIDE3CisjZGVmaW5lIFUzMDBfRE1BX1VBUlQwX1JYICAgICAgICAgICAgIDE4CisjZGVmaW5lIFUzMDBfRE1BX0FQRVhfVFggICAgICAgICAgICAgIDE5CisjZGVmaW5lIFUzMDBfRE1BX0FQRVhfUlggICAgICAgICAgICAgIDIwCisjZGVmaW5lIFUzMDBfRE1BX1BDTV9JMlMwX1RYICAgICAgICAgIDIxCisjZGVmaW5lIFUzMDBfRE1BX1BDTV9JMlMwX1JYICAgICAgICAgIDIyCisjZGVmaW5lIFUzMDBfRE1BX1BDTV9JMlMxX1RYICAgICAgICAgIDIzCisjZGVmaW5lIFUzMDBfRE1BX1BDTV9JMlMxX1JYICAgICAgICAgIDI0CisjZGVmaW5lIFUzMDBfRE1BX1hHQU1fQ0RJICAgICAgICAgICAgIDI1CisjZGVmaW5lIFUzMDBfRE1BX1hHQU1fUERJICAgICAgICAgICAgIDI2CisjZGVmaW5lIFUzMDBfRE1BX1NQSV9UWCAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIFUzMDBfRE1BX1NQSV9SWCAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV8wICAgIDI5CisjZGVmaW5lIFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV8xICAgIDMwCisjZGVmaW5lIFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV8yICAgIDMxCisjZGVmaW5lIFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV8zICAgIDMyCisjZGVmaW5lIFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV80ICAgIDMzCisjZGVmaW5lIFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV81ICAgIDM0CisjZGVmaW5lIFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV82ICAgIDM1CisjZGVmaW5lIFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV83ICAgIDM2CisjZGVmaW5lIFUzMDBfRE1BX0dFTkVSQUxfUFVSUE9TRV84ICAgIDM3CisjaWZkZWYgQ09ORklHX01BQ0hfVTMwMF9CUzMzNQorI2RlZmluZSBVMzAwX0RNQV9VQVJUMV9UWCAgICAgICAgICAgICAzOAorI2RlZmluZSBVMzAwX0RNQV9VQVJUMV9SWCAgICAgICAgICAgICAzOQorI2Vsc2UKKyNkZWZpbmUgVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzkgICAgMzgKKyNkZWZpbmUgVTMwMF9ETUFfR0VORVJBTF9QVVJQT1NFXzEwICAgMzkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfVTMwMF9CUzMzNQorI2RlZmluZSBVMzAwX0RNQV9ERVZJQ0VfQ0hBTk5FTFMgICAgICAzMgorI2Vsc2UKKyNkZWZpbmUgVTMwMF9ETUFfREVWSUNFX0NIQU5ORUxTICAgICAgMzAKKyNlbmRpZgorI2RlZmluZSBVMzAwX0RNQV9DSEFOTkVMUyAgICAgICAgICAgICA0MAorCisKKyNlbmRpZiAvKiBETUFfQ0hBTk5FTFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCBiMDBjNTFhLi5lYzQyM2I5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtOSw0ICs5LDQgQEAKICAqIEVuZCBtdXN0IGJlIGFib3ZlIHRoZSBJL08gcmVnaXN0ZXJzIGFuZCBvbiBhbiBldmVuIDJNaUIgYm91bmRhcnkuCiAgKiBBdXRob3I6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+CiAgKi8KLSNkZWZpbmUgVk1BTExPQ19FTkQJMHhmZTgwMDAwMAorI2RlZmluZSBWTUFMTE9DX0VORAkweGZlODAwMDAwVUwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5jCmluZGV4IGFhNWFmYmMuLjgwM2FlYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9ib2FyZC1tb3A1MDAuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAogI2luY2x1ZGUgPHBsYXQvbXR1Lmg+CisjaW5jbHVkZSA8cGxhdC9pMmMuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3NldHVwLmg+CkBAIC0xMDgsMTEgKzEwOSw5NiBAQAogCS5wZXJpcGhpZCA9IFNTUF9QRVJfSUQsCiB9OwogCitzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlIHBsMDMxX2RldmljZSA9IHsKKwkuZGV2ID0geworCQkuaW5pdF9uYW1lID0gInBsMDMxIiwKKwl9LAorCS5yZXMgPSB7CisJCS5zdGFydCA9IFU4NTAwX1JUQ19CQVNFLAorCQkuZW5kID0gVTg1MDBfUlRDX0JBU0UgKyBTWl80SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLmlycSA9IHtJUlFfUlRDX1JUVCwgTk9fSVJRfSwKK307CisKKyNkZWZpbmUgVTg1MDBfSTJDX1JFU09VUkNFUyhpZCwgc2l6ZSkJCVwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdTg1MDBfaTJjX3Jlc291cmNlc18jI2lkW10gPSB7CVwKKwlbMF0gPSB7CQkJCQlcCisJCS5zdGFydAk9IFU4NTAwX0kyQyMjaWQjI19CQVNFLAlcCisJCS5lbmQJPSBVODUwMF9JMkMjI2lkIyNfQkFTRSArIHNpemUgLSAxLCBcCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAlcCisJfSwJCQkJCVwKKwlbMV0gPSB7CQkJCQlcCisJCS5zdGFydAk9IElSUV9JMkMjI2lkLAkJXAorCQkuZW5kCT0gSVJRX0kyQyMjaWQsCQlcCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRCVwKKwl9CQkJCQlcCit9CisKK1U4NTAwX0kyQ19SRVNPVVJDRVMoMCwgU1pfNEspOworVTg1MDBfSTJDX1JFU09VUkNFUygxLCBTWl80Syk7CitVODUwMF9JMkNfUkVTT1VSQ0VTKDIsIFNaXzRLKTsKK1U4NTAwX0kyQ19SRVNPVVJDRVMoMywgU1pfNEspOworCisjZGVmaW5lIFU4NTAwX0kyQ19DT05UUk9MTEVSKGlkLCBfc2xzdSwgX3RmdCwgX3JmdCwgY2xrLCBfc20pIFwKK3N0YXRpYyBzdHJ1Y3Qgbm1rX2kyY19jb250cm9sbGVyIHU4NTAwX2kyY18jI2lkID0geyBcCisJLyoJCQkJXAorCSAqIHNsYXZlIGRhdGEgc2V0dXAgdGltZSwgd2hpY2ggaXMJXAorCSAqIDI1MCBucywxMDBucywxMG5zIHdoaWNoIGlzIDE0LDYsMglcCisJICogcmVzcGVjdGl2ZWx5IGZvciBhIDQ4IE1oeglcCisJICogaTJjIGNsb2NrCQkJXAorCSAqLwkJCQlcCisJLnNsc3UJCT0gX3Nsc3UsCVwKKwkvKiBUeCBGSUZPIHRocmVzaG9sZCAqLwkJXAorCS50ZnQJCT0gX3RmdCwJCVwKKwkvKiBSeCBGSUZPIHRocmVzaG9sZCAqLwkJXAorCS5yZnQJCT0gX3JmdCwJCVwKKwkvKiBzdGQuIG1vZGUgb3BlcmF0aW9uICovCVwKKwkuY2xrX2ZyZXEJPSBjbGssCQlcCisJLnNtCQk9IF9zbSwJCVwKK30KKworLyoKKyAqIFRoZSBib2FyZCB1c2VzIDQgaTJjIGNvbnRyb2xsZXJzLCBpbml0aWFsaXplIGFsbCBvZgorICogdGhlbSB3aXRoIHNsYXZlIGRhdGEgc2V0dXAgdGltZSBvZiAyNTAgbnMsCisgKiBUeCAmIFJ4IEZJRk8gdGhyZXNob2xkIHZhbHVlcyBhcyAxIGFuZCBzdGFuZGFyZAorICogbW9kZSBvZiBvcGVyYXRpb24KKyAqLworVTg1MDBfSTJDX0NPTlRST0xMRVIoMCwgMHhlLCAxLCAxLCAxMDAwMDAsIEkyQ19GUkVRX01PREVfU1RBTkRBUkQpOworVTg1MDBfSTJDX0NPTlRST0xMRVIoMSwgMHhlLCAxLCAxLCAxMDAwMDAsIEkyQ19GUkVRX01PREVfU1RBTkRBUkQpOworVTg1MDBfSTJDX0NPTlRST0xMRVIoMiwJMHhlLCAxLCAxLCAxMDAwMDAsIEkyQ19GUkVRX01PREVfU1RBTkRBUkQpOworVTg1MDBfSTJDX0NPTlRST0xMRVIoMywJMHhlLCAxLCAxLCAxMDAwMDAsIEkyQ19GUkVRX01PREVfU1RBTkRBUkQpOworCisjZGVmaW5lIFU4NTAwX0kyQ19QREVWSUNFKGNpZCkJCVwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGkyY19jb250cm9sbGVyIyNjaWQgPSB7IFwKKwkubmFtZSA9ICJubWstaTJjIiwJCVwKKwkuaWQJID0gY2lkLAkJCVwKKwkubnVtX3Jlc291cmNlcyA9IDIsCQlcCisJLnJlc291cmNlID0gdTg1MDBfaTJjX3Jlc291cmNlc18jI2NpZCwJXAorCS5kZXYgPSB7CQkJXAorCQkucGxhdGZvcm1fZGF0YSA9ICZ1ODUwMF9pMmNfIyNjaWQgXAorCX0JCQkJXAorfQorCitVODUwMF9JMkNfUERFVklDRSgwKTsKK1U4NTAwX0kyQ19QREVWSUNFKDEpOworVTg1MDBfSTJDX1BERVZJQ0UoMik7CitVODUwMF9JMkNfUERFVklDRSgzKTsKKwogc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKIAkmdWFydDBfZGV2aWNlLAogCSZ1YXJ0MV9kZXZpY2UsCiAJJnVhcnQyX2RldmljZSwKIAkmcGwwMjJfZGV2aWNlLAorCSZwbDAzMV9kZXZpY2UsCit9OworCisvKiBhZGQgYW55IHBsYXRmb3JtIGRldmljZXMgaGVyZSAtIFRPRE8gKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZzW10gX19pbml0ZGF0YSA9IHsKKwkmaTJjX2NvbnRyb2xsZXIwLAorCSZpMmNfY29udHJvbGxlcjEsCisJJmkyY19jb250cm9sbGVyMiwKKwkmaTJjX2NvbnRyb2xsZXIzLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IHU4NTAwX3RpbWVyX2luaXQodm9pZCkKQEAgLTEzOSw2ICsyMjUsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFtYmFfZGV2cyk7IGkrKykKIAkJYW1iYV9kZXZpY2VfcmVnaXN0ZXIoYW1iYV9kZXZzW2ldLCAmaW9tZW1fcmVzb3VyY2UpOwogCisJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2cywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZzKSk7CisKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyh1ODUwMF9zcGlfZGV2aWNlcywKIAkJCUFSUkFZX1NJWkUodTg1MDBfc3BpX2RldmljZXMpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9jbG9jay5jCmluZGV4IDIwYjZlYmIuLjgzNTlhNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2Nsb2NrLmMKQEAgLTg1LDExICs4NSw4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNsa19pbml0KHZvaWQpCiB7Ci0JaW50IGk7Ci0KIAkvKiByZWdpc3RlciB0aGUgY2xvY2sgbG9va3VwcyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCi0JCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CiAJcmV0dXJuIDA7CiB9CiBhcmNoX2luaXRjYWxsKGNsa19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LXU4NTAwLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2NwdS11ODUwMC5jCmluZGV4IDVmMDVlNTguLjM5N2JjMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LXU4NTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtdTg1MDAuYwpAQCAtMzMsNiArMzMsNyBAQAogCiAvKiBtaW5pbXVtIHN0YXRpYyBpL28gbWFwcGluZyByZXF1aXJlZCB0byBib290IFU4NTAwIHBsYXRmb3JtcyAqLwogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB1ODUwMF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwlfX0lPX0RFVl9ERVNDKFU4NTAwX1VBUlQyX0JBU0UsIFNaXzRLKSwKIAlfX0lPX0RFVl9ERVNDKFU4NTAwX0dJQ19DUFVfQkFTRSwgU1pfNEspLAogCV9fSU9fREVWX0RFU0MoVTg1MDBfR0lDX0RJU1RfQkFTRSwgU1pfNEspLAogCV9fSU9fREVWX0RFU0MoVTg1MDBfTVRVMF9CQVNFLCBTWl80SyksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA4ZjIxYjZhLi4wOWNiZmRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTgsMTIgKzgsMTMgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqLwotCS5tYWNybwlhZGRydWFydCxyeAorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCi0JdHN0CVxyeCwgIzEJCQlATU1VIGVuYWJsZWQ/Ci0JbW92ZXEJXHJ4LCAjMHg4MDAwMDAwMAlATU1VIG9mZiwgUGh5c2ljYWwgYWRkcmVzcwotCW1vdm5lCVxyeCwgIzB4RjAwMDAwMDAJQE1NVSBvbiwgVmlydHVhbCBhZGRyZXNzCi0Jb3JyCVxyeCwgXHJ4LCAjMHg3MDAwCisJdHN0CVxyeCwgIzEJCQkJCUAgTU1VIGVuYWJsZWQ/CisJbGRyZXEJXHJ4LCA9VTg1MDBfVUFSVDJfQkFTRQkJCUAgbm8sIHBoeXNpY2FsIGFkZHJlc3MKKwlsZHJuZQlccngsID1JT19BRERSRVNTKFU4NTAwX1VBUlQyX0JBU0UpCUAgeWVzLCB2aXJ0dWFsIGFkZHJlc3MKIAkuZW5kbQogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYnVnLXBsMDF4LlM+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggODZjZGJiYy4uYTQ5NDVjYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMTUsNCArMTUsNCBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwotI2RlZmluZSBWTUFMTE9DX0VORAkweGYwMDAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZjAwMDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCmluZGV4IGUxM2JlN2MuLjlkZGI0OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKQEAgLTg1MSw4ICs4NTEsNyBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG9va3Vwcyk7IGkrKykKLQkJY2xrZGV2X2FkZCgmbG9va3Vwc1tpXSk7CisJY2xrZGV2X2FkZF90YWJsZShsb29rdXBzLCBBUlJBWV9TSVpFKGxvb2t1cHMpKTsKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdmVyc2F0aWxlX2ZsYXNoX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2ZXJzYXRpbGVfaTJjX2RldmljZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IGI0YWMwMGUuLjZmZWE3MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMSw3ICsxMSw3IEBACiAgKgogKi8KIAotCQkubWFjcm8JYWRkcnVhcnQscngKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAgICAgICMweDEwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbG9jay5jCmluZGV4IGI3ODU5OTRiLi4yYzM3MWZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY2xvY2suYwpAQCAtOTAsMTIgKzkwLDMgQEAKIAogCV9fcmF3X3dyaXRlbChjbGtlbiwgVzkwWDkwMF9WQV9DTEtQV1IgKyBTVUJDTEspOwogfQotCi0KLXZvaWQgY2xrc19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqY2xrcywgc2l6ZV90IG51bSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKLQkJY2xrZGV2X2FkZCgmY2xrc1tpXSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbG9jay5oCmluZGV4IGY1ODE2YTAuLmM1NmRkYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbG9jay5oCkBAIC0xNCw3ICsxNCw2IEBACiAKIHZvaWQgbnVjOTAwX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKTsKIHZvaWQgbnVjOTAwX3N1YmNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKTsKLXZvaWQgY2xrc19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqY2xrcywgc2l6ZV90IG51bSk7CiAKIHN0cnVjdCBjbGsgewogCXVuc2lnbmVkIGxvbmcJCWNrZW47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmMKaW5kZXggMjBkYzBjOS4uNjQyMjA3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jcHUuYwpAQCAtNDUsNiArNDUsNyBAQAogCUlPREVTQ19FTlQoVUFSVCksCiAJSU9ERVNDX0VOVChUSU1FUiksCiAJSU9ERVNDX0VOVChFQkkpLAorCUlPREVTQ19FTlQoR1BJTyksCiB9OwogCiAvKiBJbml0aWFsIGNsb2NrIGRlY2xhcmF0aW9ucy4gKi8KQEAgLTY4LDYgKzY5LDExIEBACiBzdGF0aWMgREVGSU5FX0NMSyhhZGMsIDI4KTsKIHN0YXRpYyBERUZJTkVfQ0xLKHVzaSwgMjkpOwogc3RhdGljIERFRklORV9DTEsoZXh0LCAwKTsKK3N0YXRpYyBERUZJTkVfQ0xLKHRpbWVyMCwgMTkpOworc3RhdGljIERFRklORV9DTEsodGltZXIxLCAyMCk7CitzdGF0aWMgREVGSU5FX0NMSyh0aW1lcjIsIDIxKTsKK3N0YXRpYyBERUZJTkVfQ0xLKHRpbWVyMywgMjIpOworc3RhdGljIERFRklORV9DTEsodGltZXI0LCAyMyk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBudWM5MDBfY2xrcmVnc1tdID0gewogCURFRl9DTEtMT09LKCZjbGtfbGNkLCAibnVjOTAwLWxjZCIsIE5VTEwpLApAQCAtOTAsNiArOTYsMTEgQEAKIAlERUZfQ0xLTE9PSygmY2xrX2FkYywgIm51YzkwMC1hZGMiLCBOVUxMKSwKIAlERUZfQ0xLTE9PSygmY2xrX3VzaSwgIm51YzkwMC1zcGkiLCBOVUxMKSwKIAlERUZfQ0xLTE9PSygmY2xrX2V4dCwgTlVMTCwgImV4dCIpLAorCURFRl9DTEtMT09LKCZjbGtfdGltZXIwLCBOVUxMLCAidGltZXIwIiksCisJREVGX0NMS0xPT0soJmNsa190aW1lcjEsIE5VTEwsICJ0aW1lcjEiKSwKKwlERUZfQ0xLTE9PSygmY2xrX3RpbWVyMiwgTlVMTCwgInRpbWVyMiIpLAorCURFRl9DTEtMT09LKCZjbGtfdGltZXIzLCBOVUxMLCAidGltZXIzIiksCisJREVGX0NMS0xPT0soJmNsa190aW1lcjQsIE5VTEwsICJ0aW1lcjQiKSwKIH07CiAKIC8qIEluaXRpYWwgc2VyaWFsIHBsYXRmb3JtIGRhdGEgKi8KQEAgLTIwOCw2ICsyMTksNiBAQAogCiB2b2lkIF9faW5pdCBudWM5MDBfaW5pdF9jbG9ja3Modm9pZCkKIHsKLQljbGtzX3JlZ2lzdGVyKG51YzkwMF9jbGtyZWdzLCBBUlJBWV9TSVpFKG51YzkwMF9jbGtyZWdzKSk7CisJY2xrZGV2X2FkZF90YWJsZShudWM5MDBfY2xrcmVncywgQVJSQVlfU0laRShudWM5MDBfY2xrcmVncykpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IDJmOWRmYjkuLmIwNjdlNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0xOCw2ICsxOCw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfVk1BTExPQ19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfVk1BTExPQ19ICiAKLSNkZWZpbmUgVk1BTExPQ19FTkQJICAoMHhFMDAwMDAwMCkKKyNkZWZpbmUgVk1BTExPQ19FTkQJICAoMHhlMDAwMDAwMFVMKQogCiAjZW5kaWYgLyogX19BU01fQVJDSF9WTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL0tjb25maWcgYi9hcmNoL2FybS9tbS9LY29uZmlnCmluZGV4IGJhZjYzODQuLmM0ZWQ5ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwpAQCAtMzk5LDcgKzM5OSw3IEBACiBjb25maWcgQ1BVXzMydjZLCiAJYm9vbCAiU3VwcG9ydCBBUk0gVjZLIHByb2Nlc3NvciBleHRlbnNpb25zIiBpZiAhU01QCiAJZGVwZW5kcyBvbiBDUFVfVjYKLQlkZWZhdWx0IHkgaWYgU01QICYmICFBUkNIX01YMworCWRlZmF1bHQgeSBpZiBTTVAgJiYgIShBUkNIX01YMyB8fCBBUkNIX09NQVAyKQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91ciBBUk12NiBwcm9jZXNzb3Igc3VwcG9ydHMgdGhlICdLJyBleHRlbnNpb24uCiAJICBUaGlzIGVuYWJsZXMgdGhlIGtlcm5lbCB0byB1c2Ugc29tZSBpbnN0cnVjdGlvbnMgbm90IHByZXNlbnQKQEAgLTQxMCw3ICs0MTAsNyBAQAogIyBBUk12NwogY29uZmlnIENQVV9WNwogCWJvb2wgIlN1cHBvcnQgQVJNIFY3IHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIgfHwgTUFDSF9SRUFMVklFV19QQlgKLQlzZWxlY3QgQ1BVXzMydjZLCisJc2VsZWN0IENQVV8zMnY2SyBpZiAhQVJDSF9PTUFQMgogCXNlbGVjdCBDUFVfMzJ2NwogCXNlbGVjdCBDUFVfQUJSVF9FVjcKIAlzZWxlY3QgQ1BVX1BBQlJUX1Y3CkBAIC03NTQsNyArNzU0LDcgQEAKIGNvbmZpZyBDQUNIRV9MMlgwCiAJYm9vbCAiRW5hYmxlIHRoZSBMMngwIG91dGVyIGNhY2hlIGNvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBSRUFMVklFV19FQl9BUk0xMU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEIxMU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEIxMTc2IHx8IFwKLQkJICAgUkVBTFZJRVdfRUJfQTlNUCB8fCBBUkNIX01YMzUgfHwgQVJDSF9NWDMxIHx8IE1BQ0hfUkVBTFZJRVdfUEJYIHx8IEFSQ0hfTk9NQURJSworCQkgICBSRUFMVklFV19FQl9BOU1QIHx8IEFSQ0hfTVgzNSB8fCBBUkNIX01YMzEgfHwgTUFDSF9SRUFMVklFV19QQlggfHwgQVJDSF9OT01BRElLIHx8IEFSQ0hfT01BUDQKIAlkZWZhdWx0IHkKIAlzZWxlY3QgT1VURVJfQ0FDSEUKIAloZWxwCkBAIC03NzksNSArNzc5LDUgQEAKIAogY29uZmlnIEFSTV9MMV9DQUNIRV9TSElGVAogCWludAotCWRlZmF1bHQgNiBpZiBBUkNIX09NQVAzIHx8IEFSQ0hfUzVQQzFYWAorCWRlZmF1bHQgNiBpZiBBUk1fTDFfQ0FDSEVfU0hJRlRfNgogCWRlZmF1bHQgNQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMgYi9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYwppbmRleCA2MjgyMGVkLi5lZGRkZDY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYworKysgYi9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYwpAQCAtOTAxLDExICs5MDEsNyBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpyZXM7CiAKLQlyZXMgPSBwcm9jX21rZGlyKCJjcHUiLCBOVUxMKTsKLQlpZiAoIXJlcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXMgPSBjcmVhdGVfcHJvY19lbnRyeSgiYWxpZ25tZW50IiwgU19JV1VTUiB8IFNfSVJVR08sIHJlcyk7CisJcmVzID0gY3JlYXRlX3Byb2NfZW50cnkoImNwdS9hbGlnbm1lbnQiLCBTX0lXVVNSIHwgU19JUlVHTywgTlVMTCk7CiAJaWYgKCFyZXMpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS1mYS5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtZmEuUwppbmRleCBhODk0NDRhLi43MTQ4ZTUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS1mYS5TCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLWZhLlMKQEAgLTE1Nyw3ICsxNTcsNyBAQAogICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKICAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqLwotRU5UUlkoZmFfZG1hX2ludl9yYW5nZSkKK2ZhX2RtYV9pbnZfcmFuZ2U6CiAJdHN0CXIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiAmIGludmFsaWRhdGUgRCBlbnRyeQpAQCAtMTgwLDcgKzE4MCw3IEBACiAgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcwogICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcwogICovCi1FTlRSWShmYV9kbWFfY2xlYW5fcmFuZ2UpCitmYV9kbWFfY2xlYW5fcmFuZ2U6CiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKIAlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCkBAIC0yMDUsNiArMjA1LDMwIEBACiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCiAJbW92CXBjLCBscgogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShmYV9kbWFfbWFwX2FyZWEpCisJYWRkCXIxLCByMSwgcjAKKwljbXAJcjIsICNETUFfVE9fREVWSUNFCisJYmVxCWZhX2RtYV9jbGVhbl9yYW5nZQorCWJjcwlmYV9kbWFfaW52X3JhbmdlCisJYglmYV9kbWFfZmx1c2hfcmFuZ2UKK0VORFBST0MoZmFfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGZhX2RtYV91bm1hcF9hcmVhKQorCW1vdglwYywgbHIKK0VORFBST0MoZmFfZG1hX3VubWFwX2FyZWEpCisKIAlfX0lOSVREQVRBCiAKIAkudHlwZQlmYV9jYWNoZV9mbnMsICNvYmplY3QKQEAgLTIxNSw3ICsyMzksNyBAQAogCS5sb25nCWZhX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlmYV9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJZmFfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCWZhX2RtYV9pbnZfcmFuZ2UKLQkubG9uZwlmYV9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlmYV9kbWFfbWFwX2FyZWEKKwkubG9uZwlmYV9kbWFfdW5tYXBfYXJlYQogCS5sb25nCWZhX2RtYV9mbHVzaF9yYW5nZQogCS5zaXplCWZhX2NhY2hlX2ZucywgLiAtIGZhX2NhY2hlX2ZucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jIGIvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jCmluZGV4IGNiOGZjNjUuLjA3MzM0NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLWwyeDAuYworKysgYi9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMKQEAgLTQyLDYgKzQyLDU3IEBACiAJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DQUNIRV9TWU5DLCAxKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGwyeDBfY2xlYW5fbGluZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gbDJ4MF9iYXNlOworCWNhY2hlX3dhaXQoYmFzZSArIEwyWDBfQ0xFQU5fTElORV9QQSwgMSk7CisJd3JpdGVsKGFkZHIsIGJhc2UgKyBMMlgwX0NMRUFOX0xJTkVfUEEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbDJ4MF9pbnZfbGluZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gbDJ4MF9iYXNlOworCWNhY2hlX3dhaXQoYmFzZSArIEwyWDBfSU5WX0xJTkVfUEEsIDEpOworCXdyaXRlbChhZGRyLCBiYXNlICsgTDJYMF9JTlZfTElORV9QQSk7Cit9CisKKyNpZmRlZiBDT05GSUdfUEwzMTBfRVJSQVRBXzU4ODM2OQorc3RhdGljIHZvaWQgZGVidWdfd3JpdGVsKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWV4dGVybiB2b2lkIG9tYXBfc21jMSh1MzIgZm4sIHUzMiBhcmcpOworCisJLyoKKwkgKiBUZXhhcyBJbnN0cnVtZW50IHNlY3VyZSBtb25pdG9yIGFwaSB0byBtb2RpZnkgdGhlCisJICogUEwzMTAgRGVidWcgQ29udHJvbCBSZWdpc3Rlci4KKwkgKi8KKwlvbWFwX3NtYzEoMHgxMDAsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMngwX2ZsdXNoX2xpbmUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IGwyeDBfYmFzZTsKKworCS8qIENsZWFuIGJ5IFBBIGZvbGxvd2VkIGJ5IEludmFsaWRhdGUgYnkgUEEgKi8KKwljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0NMRUFOX0xJTkVfUEEsIDEpOworCXdyaXRlbChhZGRyLCBiYXNlICsgTDJYMF9DTEVBTl9MSU5FX1BBKTsKKwljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0lOVl9MSU5FX1BBLCAxKTsKKwl3cml0ZWwoYWRkciwgYmFzZSArIEwyWDBfSU5WX0xJTkVfUEEpOworfQorI2Vsc2UKKworLyogT3B0aW1pc2VkIG91dCBmb3Igbm9uLWVycmF0YSBjYXNlICovCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfd3JpdGVsKHVuc2lnbmVkIGxvbmcgdmFsKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbDJ4MF9mbHVzaF9saW5lKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBsMngwX2Jhc2U7CisJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DTEVBTl9JTlZfTElORV9QQSwgMSk7CisJd3JpdGVsKGFkZHIsIGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIHZvaWQgbDJ4MF9pbnZfYWxsKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTYyLDIzICsxMTMsMjQgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbDJ4MF9sb2NrLCBmbGFncyk7CiAJaWYgKHN0YXJ0ICYgKENBQ0hFX0xJTkVfU0laRSAtIDEpKSB7CiAJCXN0YXJ0ICY9IH4oQ0FDSEVfTElORV9TSVpFIC0gMSk7Ci0JCWNhY2hlX3dhaXQoYmFzZSArIEwyWDBfQ0xFQU5fSU5WX0xJTkVfUEEsIDEpOwotCQl3cml0ZWwoc3RhcnQsIGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBKTsKKwkJZGVidWdfd3JpdGVsKDB4MDMpOworCQlsMngwX2ZsdXNoX2xpbmUoc3RhcnQpOworCQlkZWJ1Z193cml0ZWwoMHgwMCk7CiAJCXN0YXJ0ICs9IENBQ0hFX0xJTkVfU0laRTsKIAl9CiAKIAlpZiAoZW5kICYgKENBQ0hFX0xJTkVfU0laRSAtIDEpKSB7CiAJCWVuZCAmPSB+KENBQ0hFX0xJTkVfU0laRSAtIDEpOwotCQljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBLCAxKTsKLQkJd3JpdGVsKGVuZCwgYmFzZSArIEwyWDBfQ0xFQU5fSU5WX0xJTkVfUEEpOworCQlkZWJ1Z193cml0ZWwoMHgwMyk7CisJCWwyeDBfZmx1c2hfbGluZShlbmQpOworCQlkZWJ1Z193cml0ZWwoMHgwMCk7CiAJfQogCiAJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CiAJCXVuc2lnbmVkIGxvbmcgYmxrX2VuZCA9IHN0YXJ0ICsgbWluKGVuZCAtIHN0YXJ0LCA0MDk2VUwpOwogCiAJCXdoaWxlIChzdGFydCA8IGJsa19lbmQpIHsKLQkJCWNhY2hlX3dhaXQoYmFzZSArIEwyWDBfSU5WX0xJTkVfUEEsIDEpOwotCQkJd3JpdGVsKHN0YXJ0LCBiYXNlICsgTDJYMF9JTlZfTElORV9QQSk7CisJCQlsMngwX2ludl9saW5lKHN0YXJ0KTsKIAkJCXN0YXJ0ICs9IENBQ0hFX0xJTkVfU0laRTsKIAkJfQogCkBAIC0xMDMsOCArMTU1LDcgQEAKIAkJdW5zaWduZWQgbG9uZyBibGtfZW5kID0gc3RhcnQgKyBtaW4oZW5kIC0gc3RhcnQsIDQwOTZVTCk7CiAKIAkJd2hpbGUgKHN0YXJ0IDwgYmxrX2VuZCkgewotCQkJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DTEVBTl9MSU5FX1BBLCAxKTsKLQkJCXdyaXRlbChzdGFydCwgYmFzZSArIEwyWDBfQ0xFQU5fTElORV9QQSk7CisJCQlsMngwX2NsZWFuX2xpbmUoc3RhcnQpOwogCQkJc3RhcnQgKz0gQ0FDSEVfTElORV9TSVpFOwogCQl9CiAKQEAgLTEyOCwxMSArMTc5LDEyIEBACiAJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CiAJCXVuc2lnbmVkIGxvbmcgYmxrX2VuZCA9IHN0YXJ0ICsgbWluKGVuZCAtIHN0YXJ0LCA0MDk2VUwpOwogCisJCWRlYnVnX3dyaXRlbCgweDAzKTsKIAkJd2hpbGUgKHN0YXJ0IDwgYmxrX2VuZCkgewotCQkJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DTEVBTl9JTlZfTElORV9QQSwgMSk7Ci0JCQl3cml0ZWwoc3RhcnQsIGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9MSU5FX1BBKTsKKwkJCWwyeDBfZmx1c2hfbGluZShzdGFydCk7CiAJCQlzdGFydCArPSBDQUNIRV9MSU5FX1NJWkU7CiAJCX0KKwkJZGVidWdfd3JpdGVsKDB4MDApOwogCiAJCWlmIChibGtfZW5kIDwgZW5kKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMngwX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXYzLlMgYi9hcmNoL2FybS9tbS9jYWNoZS12My5TCmluZGV4IDJhNDgyNzMuLmMyZmYzYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXYzLlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjMuUwpAQCAtODQsMjAgKzg0LDYgQEAKIAkvKiBGQUxMVEhST1VHSCAqLwogCiAvKgotICoJZG1hX2ludl9yYW5nZShzdGFydCwgZW5kKQotICoKLSAqCUludmFsaWRhdGUgKGRpc2NhcmQpIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgotICoJTWF5IG5vdCB3cml0ZSBiYWNrIGFueSBlbnRyaWVzLiAgSWYgJ3N0YXJ0JyBvciAnZW5kJwotICoJYXJlIG5vdCBjYWNoZSBsaW5lIGFsaWduZWQsIHRob3NlIGxpbmVzIG11c3QgYmUgd3JpdHRlbgotICoJYmFjay4KLSAqCi0gKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcwotICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcwotICovCi1FTlRSWSh2M19kbWFfaW52X3JhbmdlKQotCS8qIEZBTExUSFJPVUdIICovCi0KLS8qCiAgKglkbWFfZmx1c2hfcmFuZ2Uoc3RhcnQsIGVuZCkKICAqCiAgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KQEAgLTEwOCwxOCArOTQsMjkgQEAKIEVOVFJZKHYzX2RtYV9mbHVzaF9yYW5nZSkKIAltb3YJcjAsICMwCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgMAkJQCBmbHVzaCBJRCBjYWNoZQorCW1vdglwYywgbHIKKworLyoKKyAqCWRtYV91bm1hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWSh2M19kbWFfdW5tYXBfYXJlYSkKKwl0ZXEJcjIsICNETUFfVE9fREVWSUNFCisJYm5lCXYzX2RtYV9mbHVzaF9yYW5nZQogCS8qIEZBTExUSFJPVUdIICovCiAKIC8qCi0gKglkbWFfY2xlYW5fcmFuZ2Uoc3RhcnQsIGVuZCkKLSAqCi0gKglDbGVhbiAod3JpdGUgYmFjaykgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCi0gKgotICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKLSAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KICAqLwotRU5UUlkodjNfZG1hX2NsZWFuX3JhbmdlKQorRU5UUlkodjNfZG1hX21hcF9hcmVhKQogCW1vdglwYywgbHIKK0VORFBST0ModjNfZG1hX3VubWFwX2FyZWEpCitFTkRQUk9DKHYzX2RtYV9tYXBfYXJlYSkKIAogCV9fSU5JVERBVEEKIApAQCAtMTMxLDcgKzEyOCw3IEBACiAJLmxvbmcJdjNfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCXYzX2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwl2M19mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJdjNfZG1hX2ludl9yYW5nZQotCS5sb25nCXYzX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCXYzX2RtYV9tYXBfYXJlYQorCS5sb25nCXYzX2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJdjNfZG1hX2ZsdXNoX3JhbmdlCiAJLnNpemUJdjNfY2FjaGVfZm5zLCAuIC0gdjNfY2FjaGVfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS12NC5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjQuUwppbmRleCA1YzdkYTNlLi40ODEwZjdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12NC5TCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLXY0LlMKQEAgLTk0LDIwICs5NCw2IEBACiAJLyogRkFMTFRIUk9VR0ggKi8KIAogLyoKLSAqCWRtYV9pbnZfcmFuZ2Uoc3RhcnQsIGVuZCkKLSAqCi0gKglJbnZhbGlkYXRlIChkaXNjYXJkKSB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZS4KLSAqCU1heSBub3Qgd3JpdGUgYmFjayBhbnkgZW50cmllcy4gIElmICdzdGFydCcgb3IgJ2VuZCcKLSAqCWFyZSBub3QgY2FjaGUgbGluZSBhbGlnbmVkLCB0aG9zZSBsaW5lcyBtdXN0IGJlIHdyaXR0ZW4KLSAqCWJhY2suCi0gKgotICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKLSAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKLSAqLwotRU5UUlkodjRfZG1hX2ludl9yYW5nZSkKLQkvKiBGQUxMVEhST1VHSCAqLwotCi0vKgogICoJZG1hX2ZsdXNoX3JhbmdlKHN0YXJ0LCBlbmQpCiAgKgogICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCkBAIC0xMjAsMTggKzEwNiwyOSBAQAogCW1vdglyMCwgIzAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwCQlAIGZsdXNoIElEIGNhY2hlCiAjZW5kaWYKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkodjRfZG1hX3VubWFwX2FyZWEpCisJdGVxCXIyLCAjRE1BX1RPX0RFVklDRQorCWJuZQl2NF9kbWFfZmx1c2hfcmFuZ2UKIAkvKiBGQUxMVEhST1VHSCAqLwogCiAvKgotICoJZG1hX2NsZWFuX3JhbmdlKHN0YXJ0LCBlbmQpCi0gKgotICoJQ2xlYW4gKHdyaXRlIGJhY2spIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgotICoKLSAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCi0gKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCiAgKi8KLUVOVFJZKHY0X2RtYV9jbGVhbl9yYW5nZSkKK0VOVFJZKHY0X2RtYV9tYXBfYXJlYSkKIAltb3YJcGMsIGxyCitFTkRQUk9DKHY0X2RtYV91bm1hcF9hcmVhKQorRU5EUFJPQyh2NF9kbWFfbWFwX2FyZWEpCiAKIAlfX0lOSVREQVRBCiAKQEAgLTE0Myw3ICsxNDAsNyBAQAogCS5sb25nCXY0X2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwl2NF9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJdjRfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCXY0X2RtYV9pbnZfcmFuZ2UKLQkubG9uZwl2NF9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwl2NF9kbWFfbWFwX2FyZWEKKwkubG9uZwl2NF9kbWFfdW5tYXBfYXJlYQogCS5sb25nCXY0X2RtYV9mbHVzaF9yYW5nZQogCS5zaXplCXY0X2NhY2hlX2ZucywgLiAtIHY0X2NhY2hlX2ZucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TCmluZGV4IDNkYmVkZjFlLi5kZjgzNjhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12NHdiLlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3Yi5TCkBAIC0xNzMsNyArMTczLDcgQEAKICAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCiAgKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCiAgKi8KLUVOVFJZKHY0d2JfZG1hX2ludl9yYW5nZSkKK3Y0d2JfZG1hX2ludl9yYW5nZToKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIAltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKQEAgLTE5NCw3ICsxOTQsNyBAQAogICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKICAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqLwotRU5UUlkodjR3Yl9kbWFfY2xlYW5fcmFuZ2UpCit2NHdiX2RtYV9jbGVhbl9yYW5nZToKIAliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQogCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKQEAgLTIxNiw2ICsyMTYsMzAgQEAKIAkuZ2xvYmwJdjR3Yl9kbWFfZmx1c2hfcmFuZ2UKIAkuc2V0CXY0d2JfZG1hX2ZsdXNoX3JhbmdlLCB2NHdiX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAorLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkodjR3Yl9kbWFfbWFwX2FyZWEpCisJYWRkCXIxLCByMSwgcjAKKwljbXAJcjIsICNETUFfVE9fREVWSUNFCisJYmVxCXY0d2JfZG1hX2NsZWFuX3JhbmdlCisJYmNzCXY0d2JfZG1hX2ludl9yYW5nZQorCWIJdjR3Yl9kbWFfZmx1c2hfcmFuZ2UKK0VORFBST0ModjR3Yl9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkodjR3Yl9kbWFfdW5tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKHY0d2JfZG1hX3VubWFwX2FyZWEpCisKIAlfX0lOSVREQVRBCiAKIAkudHlwZQl2NHdiX2NhY2hlX2ZucywgI29iamVjdApAQCAtMjI2LDcgKzI1MCw3IEBACiAJLmxvbmcJdjR3Yl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJdjR3Yl9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJdjR3Yl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJdjR3Yl9kbWFfaW52X3JhbmdlCi0JLmxvbmcJdjR3Yl9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwl2NHdiX2RtYV9tYXBfYXJlYQorCS5sb25nCXY0d2JfZG1hX3VubWFwX2FyZWEKIAkubG9uZwl2NHdiX2RtYV9mbHVzaF9yYW5nZQogCS5zaXplCXY0d2JfY2FjaGVfZm5zLCAuIC0gdjR3Yl9jYWNoZV9mbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY0d3QuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY0d3QuUwppbmRleCBiM2I3NDEwLi40NWM3MDMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12NHd0LlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjR3dC5TCkBAIC0xNDIsMjMgKzE0MiwxMiBAQAogICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKICAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqLwotRU5UUlkodjR3dF9kbWFfaW52X3JhbmdlKQordjR3dF9kbWFfaW52X3JhbmdlOgogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCQlAIGludmFsaWRhdGUgRCBlbnRyeQogCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKIAljbXAJcjAsIHIxCiAJYmxvCTFiCi0JLyogRkFMTFRIUk9VR0ggKi8KLQotLyoKLSAqCWRtYV9jbGVhbl9yYW5nZShzdGFydCwgZW5kKQotICoKLSAqCUNsZWFuIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgotICoKLSAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCi0gKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCi0gKi8KLUVOVFJZKHY0d3RfZG1hX2NsZWFuX3JhbmdlKQogCW1vdglwYywgbHIKIAogLyoKQEAgLTE3Miw2ICsxNjEsMjkgQEAKIAkuZ2xvYmwJdjR3dF9kbWFfZmx1c2hfcmFuZ2UKIAkuZXF1CXY0d3RfZG1hX2ZsdXNoX3JhbmdlLCB2NHd0X2RtYV9pbnZfcmFuZ2UKIAorLyoKKyAqCWRtYV91bm1hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWSh2NHd0X2RtYV91bm1hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJdGVxCXIyLCAjRE1BX1RPX0RFVklDRQorCWJuZQl2NHd0X2RtYV9pbnZfcmFuZ2UKKwkvKiBGQUxMVEhST1VHSCAqLworCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWSh2NHd0X2RtYV9tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKHY0d3RfZG1hX3VubWFwX2FyZWEpCitFTkRQUk9DKHY0d3RfZG1hX21hcF9hcmVhKQorCiAJX19JTklUREFUQQogCiAJLnR5cGUJdjR3dF9jYWNoZV9mbnMsICNvYmplY3QKQEAgLTE4Miw3ICsxOTQsNyBAQAogCS5sb25nCXY0d3RfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCXY0d3RfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCXY0d3RfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCXY0d3RfZG1hX2ludl9yYW5nZQotCS5sb25nCXY0d3RfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJdjR3dF9kbWFfbWFwX2FyZWEKKwkubG9uZwl2NHd0X2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJdjR3dF9kbWFfZmx1c2hfcmFuZ2UKIAkuc2l6ZQl2NHd0X2NhY2hlX2ZucywgLiAtIHY0d3RfY2FjaGVfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS12Ni5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUwppbmRleCA0YmEwYTI0Li45ZDg5YzY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12Ni5TCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMKQEAgLTE5NSw3ICsxOTUsNyBAQAogICoJLSBzdGFydCAgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzIG9mIHJlZ2lvbgogICoJLSBlbmQgICAgIC0gdmlydHVhbCBlbmQgYWRkcmVzcyBvZiByZWdpb24KICAqLwotRU5UUlkodjZfZG1hX2ludl9yYW5nZSkKK3Y2X2RtYV9pbnZfcmFuZ2U6CiAJdHN0CXIwLCAjRF9DQUNIRV9MSU5FX1NJWkUgLSAxCiAJYmljCXIwLCByMCwgI0RfQ0FDSEVfTElORV9TSVpFIC0gMQogI2lmZGVmIEhBUlZBUkRfQ0FDSEUKQEAgLTIyOCw3ICsyMjgsNyBAQAogICoJLSBzdGFydCAgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzIG9mIHJlZ2lvbgogICoJLSBlbmQgICAgIC0gdmlydHVhbCBlbmQgYWRkcmVzcyBvZiByZWdpb24KICAqLwotRU5UUlkodjZfZG1hX2NsZWFuX3JhbmdlKQordjZfZG1hX2NsZWFuX3JhbmdlOgogCWJpYwlyMCwgcjAsICNEX0NBQ0hFX0xJTkVfU0laRSAtIDEKIDE6CiAjaWZkZWYgSEFSVkFSRF9DQUNIRQpAQCAtMjYzLDYgKzI2MywzMiBAQAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgogCW1vdglwYywgbHIKIAorLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkodjZfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJdGVxCXIyLCAjRE1BX0ZST01fREVWSUNFCisJYmVxCXY2X2RtYV9pbnZfcmFuZ2UKKwliCXY2X2RtYV9jbGVhbl9yYW5nZQorRU5EUFJPQyh2Nl9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkodjZfZG1hX3VubWFwX2FyZWEpCisJYWRkCXIxLCByMSwgcjAKKwl0ZXEJcjIsICNETUFfVE9fREVWSUNFCisJYm5lCXY2X2RtYV9pbnZfcmFuZ2UKKwltb3YJcGMsIGxyCitFTkRQUk9DKHY2X2RtYV91bm1hcF9hcmVhKQorCiAJX19JTklUREFUQQogCiAJLnR5cGUJdjZfY2FjaGVfZm5zLCAjb2JqZWN0CkBAIC0yNzMsNyArMjk5LDcgQEAKIAkubG9uZwl2Nl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJdjZfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCXY2X2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKLQkubG9uZwl2Nl9kbWFfaW52X3JhbmdlCi0JLmxvbmcJdjZfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJdjZfZG1hX21hcF9hcmVhCisJLmxvbmcJdjZfZG1hX3VubWFwX2FyZWEKIAkubG9uZwl2Nl9kbWFfZmx1c2hfcmFuZ2UKIAkuc2l6ZQl2Nl9jYWNoZV9mbnMsIC4gLSB2Nl9jYWNoZV9mbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMgYi9hcmNoL2FybS9tbS9jYWNoZS12Ny5TCmluZGV4IDkwNzNkYjguLmJjZDY0ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUwpAQCAtMjE2LDcgKzIxNiw3IEBACiAgKgktIHN0YXJ0ICAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3Mgb2YgcmVnaW9uCiAgKgktIGVuZCAgICAgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzIG9mIHJlZ2lvbgogICovCi1FTlRSWSh2N19kbWFfaW52X3JhbmdlKQordjdfZG1hX2ludl9yYW5nZToKIAlkY2FjaGVfbGluZV9zaXplIHIyLCByMwogCXN1YglyMywgcjIsICMxCiAJdHN0CXIwLCByMwpAQCAtMjQwLDcgKzI0MCw3IEBACiAgKgktIHN0YXJ0ICAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3Mgb2YgcmVnaW9uCiAgKgktIGVuZCAgICAgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzIG9mIHJlZ2lvbgogICovCi1FTlRSWSh2N19kbWFfY2xlYW5fcmFuZ2UpCit2N19kbWFfY2xlYW5fcmFuZ2U6CiAJZGNhY2hlX2xpbmVfc2l6ZSByMiwgcjMKIAlzdWIJcjMsIHIyLCAjMQogCWJpYwlyMCwgcjAsIHIzCkBAIC0yNzEsNiArMjcxLDMyIEBACiAJbW92CXBjLCBscgogRU5EUFJPQyh2N19kbWFfZmx1c2hfcmFuZ2UpCiAKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKHY3X2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCXRlcQlyMiwgI0RNQV9GUk9NX0RFVklDRQorCWJlcQl2N19kbWFfaW52X3JhbmdlCisJYgl2N19kbWFfY2xlYW5fcmFuZ2UKK0VORFBST0ModjdfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKHY3X2RtYV91bm1hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJdGVxCXIyLCAjRE1BX1RPX0RFVklDRQorCWJuZQl2N19kbWFfaW52X3JhbmdlCisJbW92CXBjLCBscgorRU5EUFJPQyh2N19kbWFfdW5tYXBfYXJlYSkKKwogCV9fSU5JVERBVEEKIAogCS50eXBlCXY3X2NhY2hlX2ZucywgI29iamVjdApAQCAtMjgxLDcgKzMwNyw3IEBACiAJLmxvbmcJdjdfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCXY3X2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwl2N19mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJdjdfZG1hX2ludl9yYW5nZQotCS5sb25nCXY3X2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCXY3X2RtYV9tYXBfYXJlYQorCS5sb25nCXY3X2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJdjdfZG1hX2ZsdXNoX3JhbmdlCiAJLnNpemUJdjdfY2FjaGVfZm5zLCAuIC0gdjdfY2FjaGVfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb250ZXh0LmMgYi9hcmNoL2FybS9tbS9jb250ZXh0LmMKaW5kZXggYTllMjJlMy4uYjBlZTliYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29udGV4dC5jCisrKyBiL2FyY2gvYXJtL21tL2NvbnRleHQuYwpAQCAtMTAsMTIgKzEwLDE3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KIAogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNwdV9hc2lkX2xvY2spOwogdW5zaWduZWQgaW50IGNwdV9sYXN0X2FzaWQgPSBBU0lEX0ZJUlNUX1ZFUlNJT047CisjaWZkZWYgQ09ORklHX1NNUAorREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tX3N0cnVjdCAqLCBjdXJyZW50X21tKTsKKyNlbmRpZgogCiAvKgogICogV2UgZm9yaygpZWQgYSBwcm9jZXNzLCBhbmQgd2UgbmVlZCBhIG5ldyBjb250ZXh0IGZvciB0aGUgY2hpbGQKQEAgLTI2LDEzICszMSwxMDkgQEAKIHZvaWQgX19pbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAltbS0+Y29udGV4dC5pZCA9IDA7CisJc3Bpbl9sb2NrX2luaXQoJm1tLT5jb250ZXh0LmlkX2xvY2spOwogfQogCitzdGF0aWMgdm9pZCBmbHVzaF9jb250ZXh0KHZvaWQpCit7CisJLyogc2V0IHRoZSByZXNlcnZlZCBBU0lEIGJlZm9yZSBmbHVzaGluZyB0aGUgVExCICovCisJYXNtKCJtY3IJcDE1LCAwLCAlMCwgYzEzLCBjMCwgMVxuIiA6IDogInIiICgwKSk7CisJaXNiKCk7CisJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOworCWlmIChpY2FjaGVfaXNfdml2dF9hc2lkX3RhZ2dlZCgpKSB7CisJCV9fZmx1c2hfaWNhY2hlX2FsbCgpOworCQlkc2IoKTsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfU01QCisKK3N0YXRpYyB2b2lkIHNldF9tbV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgYXNpZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBMb2NraW5nIG5lZWRlZCBmb3IgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zIHdoZXJlIHRoZQorCSAqIHNhbWUgbW0tPmNvbnRleHQuaWQgY291bGQgYmUgc2V0IGZyb20gZGlmZmVyZW50IENQVXMgZHVyaW5nCisJICogdGhlIGJyb2FkY2FzdC4gVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB2aWEgSVBJIHNvIHRoZQorCSAqIG1tLT5jb250ZXh0LmlkX2xvY2sgaGFzIHRvIGJlIElSUS1zYWZlLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZtbS0+Y29udGV4dC5pZF9sb2NrLCBmbGFncyk7CisJaWYgKGxpa2VseSgobW0tPmNvbnRleHQuaWQgXiBjcHVfbGFzdF9hc2lkKSA+PiBBU0lEX0JJVFMpKSB7CisJCS8qCisJCSAqIE9sZCB2ZXJzaW9uIG9mIEFTSUQgZm91bmQuIFNldCB0aGUgbmV3IG9uZSBhbmQKKwkJICogcmVzZXQgbW1fY3B1bWFzayhtbSkuCisJCSAqLworCQltbS0+Y29udGV4dC5pZCA9IGFzaWQ7CisJCWNwdW1hc2tfY2xlYXIobW1fY3B1bWFzayhtbSkpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtbS0+Y29udGV4dC5pZF9sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIFNldCB0aGUgbW1fY3B1bWFzayhtbSkgYml0IGZvciB0aGUgY3VycmVudCBDUFUuCisJICovCisJY3B1bWFza19zZXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW1fY3B1bWFzayhtbSkpOworfQorCisvKgorICogUmVzZXQgdGhlIEFTSUQgb24gdGhlIGN1cnJlbnQgQ1BVLiBUaGlzIGZ1bmN0aW9uIGNhbGwgaXMgYnJvYWRjYXN0CisgKiBmcm9tIHRoZSBDUFUgaGFuZGxpbmcgdGhlIEFTSUQgcm9sbG92ZXIgYW5kIGhvbGRpbmcgY3B1X2FzaWRfbG9jay4KKyAqLworc3RhdGljIHZvaWQgcmVzZXRfY29udGV4dCh2b2lkICppbmZvKQoreworCXVuc2lnbmVkIGludCBhc2lkOworCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwZXJfY3B1KGN1cnJlbnRfbW0sIGNwdSk7CisKKwkvKgorCSAqIENoZWNrIGlmIGEgY3VycmVudF9tbSB3YXMgc2V0IG9uIHRoaXMgQ1BVIGFzIGl0IG1pZ2h0IHN0aWxsCisJICogYmUgaW4gdGhlIGVhcmx5IGJvb3Rpbmcgc3RhZ2VzIGFuZCB1c2luZyB0aGUgcmVzZXJ2ZWQgQVNJRC4KKwkgKi8KKwlpZiAoIW1tKQorCQlyZXR1cm47CisKKwlzbXBfcm1iKCk7CisJYXNpZCA9IGNwdV9sYXN0X2FzaWQgKyBjcHUgKyAxOworCisJZmx1c2hfY29udGV4dCgpOworCXNldF9tbV9jb250ZXh0KG1tLCBhc2lkKTsKKworCS8qIHNldCB0aGUgbmV3IEFTSUQgKi8KKwlhc20oIm1jcglwMTUsIDAsICUwLCBjMTMsIGMwLCAxXG4iIDogOiAiciIgKG1tLT5jb250ZXh0LmlkKSk7CisJaXNiKCk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbW1fY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IGFzaWQpCit7CisJbW0tPmNvbnRleHQuaWQgPSBhc2lkOworCWNwdW1hc2tfY29weShtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKTsKK30KKworI2VuZGlmCisKIHZvaWQgX19uZXdfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAl1bnNpZ25lZCBpbnQgYXNpZDsKIAogCXNwaW5fbG9jaygmY3B1X2FzaWRfbG9jayk7CisjaWZkZWYgQ09ORklHX1NNUAorCS8qCisJICogQ2hlY2sgdGhlIEFTSUQgYWdhaW4sIGluIGNhc2UgdGhlIGNoYW5nZSB3YXMgYnJvYWRjYXN0IGZyb20KKwkgKiBhbm90aGVyIENQVSBiZWZvcmUgd2UgYWNxdWlyZWQgdGhlIGxvY2suCisJICovCisJaWYgKHVubGlrZWx5KCgobW0tPmNvbnRleHQuaWQgXiBjcHVfbGFzdF9hc2lkKSA+PiBBU0lEX0JJVFMpID09IDApKSB7CisJCWNwdW1hc2tfc2V0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sobW0pKTsKKwkJc3Bpbl91bmxvY2soJmNwdV9hc2lkX2xvY2spOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50LCBpdCBpcyBndWFyYW50ZWVkIHRoYXQgdGhlIGN1cnJlbnQgbW0gKHdpdGgKKwkgKiBhbiBvbGQgQVNJRCkgaXNuJ3QgYWN0aXZlIG9uIGFueSBvdGhlciBDUFUgc2luY2UgdGhlIEFTSURzCisJICogYXJlIGNoYW5nZWQgc2ltdWx0YW5lb3VzbHkgdmlhIElQSS4KKwkgKi8KIAlhc2lkID0gKytjcHVfbGFzdF9hc2lkOwogCWlmIChhc2lkID09IDApCiAJCWFzaWQgPSBjcHVfbGFzdF9hc2lkID0gQVNJRF9GSVJTVF9WRVJTSU9OOwpAQCAtNDIsMjAgKzE0MywxNSBAQAogCSAqIHRvIHN0YXJ0IGEgbmV3IHZlcnNpb24gYW5kIGZsdXNoIHRoZSBUTEIuCiAJICovCiAJaWYgKHVubGlrZWx5KChhc2lkICYgfkFTSURfTUFTSykgPT0gMCkpIHsKLQkJYXNpZCA9ICsrY3B1X2xhc3RfYXNpZDsKLQkJLyogc2V0IHRoZSByZXNlcnZlZCBBU0lEIGJlZm9yZSBmbHVzaGluZyB0aGUgVExCICovCi0JCWFzbSgibWNyCXAxNSwgMCwgJTAsIGMxMywgYzAsIDEJQCBzZXQgcmVzZXJ2ZWQgY29udGV4dCBJRFxuIgotCQkgICAgOgotCQkgICAgOiAiciIgKDApKTsKLQkJaXNiKCk7Ci0JCWZsdXNoX3RsYl9hbGwoKTsKLQkJaWYgKGljYWNoZV9pc192aXZ0X2FzaWRfdGFnZ2VkKCkpIHsKLQkJCV9fZmx1c2hfaWNhY2hlX2FsbCgpOwotCQkJZHNiKCk7Ci0JCX0KKwkJYXNpZCA9IGNwdV9sYXN0X2FzaWQgKyBzbXBfcHJvY2Vzc29yX2lkKCkgKyAxOworCQlmbHVzaF9jb250ZXh0KCk7CisjaWZkZWYgQ09ORklHX1NNUAorCQlzbXBfd21iKCk7CisJCXNtcF9jYWxsX2Z1bmN0aW9uKHJlc2V0X2NvbnRleHQsIE5VTEwsIDEpOworI2VuZGlmCisJCWNwdV9sYXN0X2FzaWQgKz0gTlJfQ1BVUzsKIAl9Ci0Jc3Bpbl91bmxvY2soJmNwdV9hc2lkX2xvY2spOwogCi0JY3B1bWFza19jb3B5KG1tX2NwdW1hc2sobW0pLCBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSkpOwotCW1tLT5jb250ZXh0LmlkID0gYXNpZDsKKwlzZXRfbW1fY29udGV4dChtbSwgYXNpZCk7CisJc3Bpbl91bmxvY2soJmNwdV9hc2lkX2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtZmVyb2Nlb24uYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLWZlcm9jZW9uLmMKaW5kZXggNzA5OTdkNS4uNWViNGZkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtZmVyb2Nlb24uYworKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS1mZXJvY2Vvbi5jCkBAIC02OCwxMiArNjgsMTMgQEAKIH0KIAogdm9pZCBmZXJvY2Vvbl9jb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSwKLQl1bnNpZ25lZCBsb25nIHZhZGRyKQorCXVuc2lnbmVkIGxvbmcgdmFkZHIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXZvaWQgKmt0bywgKmtmcm9tOwogCiAJa3RvID0ga21hcF9hdG9taWModG8sIEtNX1VTRVIwKTsKIAlrZnJvbSA9IGttYXBfYXRvbWljKGZyb20sIEtNX1VTRVIxKTsKKwlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdmFkZHIsIHBhZ2VfdG9fcGZuKGZyb20pKTsKIAlmZXJvY2Vvbl9jb3B5X3VzZXJfcGFnZShrdG8sIGtmcm9tKTsKIAlrdW5tYXBfYXRvbWljKGtmcm9tLCBLTV9VU0VSMSk7CiAJa3VubWFwX2F0b21pYyhrdG8sIEtNX1VTRVIwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXYzLmMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12My5jCmluZGV4IGRlOWMwNjguLmY3MjMwM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXYzLmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjMuYwpAQCAtMzgsNyArMzgsNyBAQAogfQogCiB2b2lkIHYzX2NvcHlfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqdG8sIHN0cnVjdCBwYWdlICpmcm9tLAotCXVuc2lnbmVkIGxvbmcgdmFkZHIpCisJdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJdm9pZCAqa3RvLCAqa2Zyb207CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0bWMuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0bWMuYwppbmRleCA3MzcwYTcxLi41OThjNTFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12NG1jLmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjRtYy5jCkBAIC02OSw3ICs2OSw3IEBACiB9CiAKIHZvaWQgdjRfbWNfY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sCi0JdW5zaWduZWQgbG9uZyB2YWRkcikKKwl1bnNpZ25lZCBsb25nIHZhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAl2b2lkICprdG8gPSBrbWFwX2F0b21pYyh0bywgS01fVVNFUjEpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHdiLmMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHdiLmMKaW5kZXggOWFiMDk4NC4uN2MyZWI1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3Yi5jCisrKyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d2IuYwpAQCAtNDgsMTIgKzQ4LDEzIEBACiB9CiAKIHZvaWQgdjR3Yl9jb3B5X3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSwKLQl1bnNpZ25lZCBsb25nIHZhZGRyKQorCXVuc2lnbmVkIGxvbmcgdmFkZHIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXZvaWQgKmt0bywgKmtmcm9tOwogCiAJa3RvID0ga21hcF9hdG9taWModG8sIEtNX1VTRVIwKTsKIAlrZnJvbSA9IGttYXBfYXRvbWljKGZyb20sIEtNX1VTRVIxKTsKKwlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdmFkZHIsIHBhZ2VfdG9fcGZuKGZyb20pKTsKIAl2NHdiX2NvcHlfdXNlcl9wYWdlKGt0bywga2Zyb20pOwogCWt1bm1hcF9hdG9taWMoa2Zyb20sIEtNX1VTRVIxKTsKIAlrdW5tYXBfYXRvbWljKGt0bywgS01fVVNFUjApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3dC5jIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjR3dC5jCmluZGV4IDMwMGVmYWYuLjE3MmU2YTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0d3QuYworKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12NHd0LmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIH0KIAogdm9pZCB2NHd0X2NvcHlfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqdG8sIHN0cnVjdCBwYWdlICpmcm9tLAotCXVuc2lnbmVkIGxvbmcgdmFkZHIpCisJdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJdm9pZCAqa3RvLCAqa2Zyb207CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY2LmMgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12Ni5jCmluZGV4IDBmYTEzMTkuLjhiY2E0ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY2LmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjYuYwpAQCAtMzQsNyArMzQsNyBAQAogICogYXR0YWNrIHRoZSBrZXJuZWwncyBleGlzdGluZyBtYXBwaW5nIG9mIHRoZXNlIHBhZ2VzLgogICovCiBzdGF0aWMgdm9pZCB2Nl9jb3B5X3VzZXJfaGlnaHBhZ2Vfbm9uYWxpYXNpbmcoc3RydWN0IHBhZ2UgKnRvLAotCXN0cnVjdCBwYWdlICpmcm9tLCB1bnNpZ25lZCBsb25nIHZhZGRyKQorCXN0cnVjdCBwYWdlICpmcm9tLCB1bnNpZ25lZCBsb25nIHZhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAl2b2lkICprdG8sICprZnJvbTsKIApAQCAtODEsNyArODEsNyBAQAogICogQ29weSB0aGUgcGFnZSwgdGFraW5nIGFjY291bnQgb2YgdGhlIGNhY2hlIGNvbG91ci4KICAqLwogc3RhdGljIHZvaWQgdjZfY29weV91c2VyX2hpZ2hwYWdlX2FsaWFzaW5nKHN0cnVjdCBwYWdlICp0bywKLQlzdHJ1Y3QgcGFnZSAqZnJvbSwgdW5zaWduZWQgbG9uZyB2YWRkcikKKwlzdHJ1Y3QgcGFnZSAqZnJvbSwgdW5zaWduZWQgbG9uZyB2YWRkciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJdW5zaWduZWQgaW50IG9mZnNldCA9IENBQ0hFX0NPTE9VUih2YWRkcik7CiAJdW5zaWduZWQgbG9uZyBrZnJvbSwga3RvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjMy5jIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjMy5jCmluZGV4IGJjNDUyNWYuLjc0N2FkNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzYzMuYworKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS14c2MzLmMKQEAgLTcxLDEyICs3MSwxMyBAQAogfQogCiB2b2lkIHhzYzNfbWNfY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sCi0JdW5zaWduZWQgbG9uZyB2YWRkcikKKwl1bnNpZ25lZCBsb25nIHZhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAl2b2lkICprdG8sICprZnJvbTsKIAogCWt0byA9IGttYXBfYXRvbWljKHRvLCBLTV9VU0VSMCk7CiAJa2Zyb20gPSBrbWFwX2F0b21pYyhmcm9tLCBLTV9VU0VSMSk7CisJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZhZGRyLCBwYWdlX3RvX3Bmbihmcm9tKSk7CiAJeHNjM19tY19jb3B5X3VzZXJfcGFnZShrdG8sIGtmcm9tKTsKIAlrdW5tYXBfYXRvbWljKGtmcm9tLCBLTV9VU0VSMSk7CiAJa3VubWFwX2F0b21pYyhrdG8sIEtNX1VTRVIwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzY2FsZS5jIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjYWxlLmMKaW5kZXggNzY4MjRkMy4uOTkyMGMwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjYWxlLmMKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UteHNjYWxlLmMKQEAgLTkxLDcgKzkxLDcgQEAKIH0KIAogdm9pZCB4c2NhbGVfbWNfY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sCi0JdW5zaWduZWQgbG9uZyB2YWRkcikKKwl1bnNpZ25lZCBsb25nIHZhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAl2b2lkICprdG8gPSBrbWFwX2F0b21pYyh0bywgS01fVVNFUjEpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jIGIvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYwppbmRleCAyNjMyNWNiLi4wZGE3ZWNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCisrKyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKQEAgLTI5LDkgKzI5LDYgQEAKICNlcnJvciAiQ09OU0lTVEVOVF9ETUFfU0laRSBtdXN0IGJlIG11bHRpcGxlIG9mIDJNaUIiCiAjZW5kaWYKIAotI2RlZmluZSBDT05TSVNURU5UX0VORAkoMHhmZmUwMDAwMCkKLSNkZWZpbmUgQ09OU0lTVEVOVF9CQVNFCShDT05TSVNURU5UX0VORCAtIENPTlNJU1RFTlRfRE1BX1NJWkUpCi0KICNkZWZpbmUgQ09OU0lTVEVOVF9PRkZTRVQoeCkJKCgodW5zaWduZWQgbG9uZykoeCkgLSBDT05TSVNURU5UX0JBU0UpID4+IFBBR0VfU0hJRlQpCiAjZGVmaW5lIENPTlNJU1RFTlRfUFRFX0lOREVYKHgpICgoKHVuc2lnbmVkIGxvbmcpKHgpIC0gQ09OU0lTVEVOVF9CQVNFKSA+PiBQR0RJUl9TSElGVCkKICNkZWZpbmUgTlVNX0NPTlNJU1RFTlRfUFRFUyAoQ09OU0lTVEVOVF9ETUFfU0laRSA+PiBQR0RJUl9TSElGVCkKQEAgLTQwNCw3OCArNDAxLDQ0IEBACiAgKiBwbGF0Zm9ybXMgd2l0aCBDT05GSUdfRE1BQk9VTkNFLgogICogVXNlIHRoZSBkcml2ZXIgRE1BIHN1cHBvcnQgLSBzZWUgZG1hLW1hcHBpbmcuaCAoZG1hX3N5bmNfKikKICAqLwotdm9pZCBkbWFfY2FjaGVfbWFpbnQoY29uc3Qgdm9pZCAqc3RhcnQsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQordm9pZCBfX19kbWFfc2luZ2xlX2NwdV90b19kZXYoY29uc3Qgdm9pZCAqa2FkZHIsIHNpemVfdCBzaXplLAorCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQl2b2lkICgqaW5uZXJfb3ApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKLQl2b2lkICgqb3V0ZXJfb3ApKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwotCi0JQlVHX09OKCF2aXJ0X2FkZHJfdmFsaWQoc3RhcnQpIHx8ICF2aXJ0X2FkZHJfdmFsaWQoc3RhcnQgKyBzaXplIC0gMSkpOwotCi0Jc3dpdGNoIChkaXJlY3Rpb24pIHsKLQljYXNlIERNQV9GUk9NX0RFVklDRToJCS8qIGludmFsaWRhdGUgb25seSAqLwotCQlpbm5lcl9vcCA9IGRtYWNfaW52X3JhbmdlOwotCQlvdXRlcl9vcCA9IG91dGVyX2ludl9yYW5nZTsKLQkJYnJlYWs7Ci0JY2FzZSBETUFfVE9fREVWSUNFOgkJLyogd3JpdGViYWNrIG9ubHkgKi8KLQkJaW5uZXJfb3AgPSBkbWFjX2NsZWFuX3JhbmdlOwotCQlvdXRlcl9vcCA9IG91dGVyX2NsZWFuX3JhbmdlOwotCQlicmVhazsKLQljYXNlIERNQV9CSURJUkVDVElPTkFMOgkJLyogd3JpdGViYWNrIGFuZCBpbnZhbGlkYXRlICovCi0JCWlubmVyX29wID0gZG1hY19mbHVzaF9yYW5nZTsKLQkJb3V0ZXJfb3AgPSBvdXRlcl9mbHVzaF9yYW5nZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JfQotCi0JaW5uZXJfb3Aoc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7Ci0Jb3V0ZXJfb3AoX19wYShzdGFydCksIF9fcGEoc3RhcnQpICsgc2l6ZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGRtYV9jYWNoZV9tYWludCk7Ci0KLXN0YXRpYyB2b2lkIGRtYV9jYWNoZV9tYWludF9jb250aWd1b3VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCQkgICAgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCi17Ci0Jdm9pZCAqdmFkZHI7CiAJdW5zaWduZWQgbG9uZyBwYWRkcjsKLQl2b2lkICgqaW5uZXJfb3ApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKLQl2b2lkICgqb3V0ZXJfb3ApKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogCi0Jc3dpdGNoIChkaXJlY3Rpb24pIHsKLQljYXNlIERNQV9GUk9NX0RFVklDRToJCS8qIGludmFsaWRhdGUgb25seSAqLwotCQlpbm5lcl9vcCA9IGRtYWNfaW52X3JhbmdlOwotCQlvdXRlcl9vcCA9IG91dGVyX2ludl9yYW5nZTsKLQkJYnJlYWs7Ci0JY2FzZSBETUFfVE9fREVWSUNFOgkJLyogd3JpdGViYWNrIG9ubHkgKi8KLQkJaW5uZXJfb3AgPSBkbWFjX2NsZWFuX3JhbmdlOwotCQlvdXRlcl9vcCA9IG91dGVyX2NsZWFuX3JhbmdlOwotCQlicmVhazsKLQljYXNlIERNQV9CSURJUkVDVElPTkFMOgkJLyogd3JpdGViYWNrIGFuZCBpbnZhbGlkYXRlICovCi0JCWlubmVyX29wID0gZG1hY19mbHVzaF9yYW5nZTsKLQkJb3V0ZXJfb3AgPSBvdXRlcl9mbHVzaF9yYW5nZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JfQorCUJVR19PTighdmlydF9hZGRyX3ZhbGlkKGthZGRyKSB8fCAhdmlydF9hZGRyX3ZhbGlkKGthZGRyICsgc2l6ZSAtIDEpKTsKIAotCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpIHsKLQkJdmFkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQ7Ci0JCWlubmVyX29wKHZhZGRyLCB2YWRkciArIHNpemUpOworCWRtYWNfbWFwX2FyZWEoa2FkZHIsIHNpemUsIGRpcik7CisKKwlwYWRkciA9IF9fcGEoa2FkZHIpOworCWlmIChkaXIgPT0gRE1BX0ZST01fREVWSUNFKSB7CisJCW91dGVyX2ludl9yYW5nZShwYWRkciwgcGFkZHIgKyBzaXplKTsKIAl9IGVsc2UgewotCQl2YWRkciA9IGttYXBfaGlnaF9nZXQocGFnZSk7Ci0JCWlmICh2YWRkcikgewotCQkJdmFkZHIgKz0gb2Zmc2V0OwotCQkJaW5uZXJfb3AodmFkZHIsIHZhZGRyICsgc2l6ZSk7Ci0JCQlrdW5tYXBfaGlnaChwYWdlKTsKLQkJfQorCQlvdXRlcl9jbGVhbl9yYW5nZShwYWRkciwgcGFkZHIgKyBzaXplKTsKKwl9CisJLyogRklYTUU6IG5vbi1zcGVjdWxhdGluZzogZmx1c2ggb24gYmlkaXJlY3Rpb25hbCBtYXBwaW5ncz8gKi8KK30KK0VYUE9SVF9TWU1CT0woX19fZG1hX3NpbmdsZV9jcHVfdG9fZGV2KTsKKwordm9pZCBfX19kbWFfc2luZ2xlX2Rldl90b19jcHUoY29uc3Qgdm9pZCAqa2FkZHIsIHNpemVfdCBzaXplLAorCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlCVUdfT04oIXZpcnRfYWRkcl92YWxpZChrYWRkcikgfHwgIXZpcnRfYWRkcl92YWxpZChrYWRkciArIHNpemUgLSAxKSk7CisKKwkvKiBGSVhNRTogbm9uLXNwZWN1bGF0aW5nOiBub3QgcmVxdWlyZWQgKi8KKwkvKiBkb24ndCBib3RoZXIgaW52YWxpZGF0aW5nIGlmIERNQSB0byBkZXZpY2UgKi8KKwlpZiAoZGlyICE9IERNQV9UT19ERVZJQ0UpIHsKKwkJdW5zaWduZWQgbG9uZyBwYWRkciA9IF9fcGEoa2FkZHIpOworCQlvdXRlcl9pbnZfcmFuZ2UocGFkZHIsIHBhZGRyICsgc2l6ZSk7CiAJfQogCi0JcGFkZHIgPSBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQ7Ci0Jb3V0ZXJfb3AocGFkZHIsIHBhZGRyICsgc2l6ZSk7CisJZG1hY191bm1hcF9hcmVhKGthZGRyLCBzaXplLCBkaXIpOwogfQorRVhQT1JUX1NZTUJPTChfX19kbWFfc2luZ2xlX2Rldl90b19jcHUpOwogCi12b2lkIGRtYV9jYWNoZV9tYWludF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCSAgc2l6ZV90IHNpemUsIGludCBkaXIpCitzdGF0aWMgdm9pZCBkbWFfY2FjaGVfbWFpbnRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwl2b2lkICgqb3ApKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpKQogewogCS8qCiAJICogQSBzaW5nbGUgc2cgZW50cnkgbWF5IHJlZmVyIHRvIG11bHRpcGxlIHBoeXNpY2FsbHkgY29udGlndW91cwpAQCAtNDg2LDIwICs0NDksNjIgQEAKIAlzaXplX3QgbGVmdCA9IHNpemU7CiAJZG8gewogCQlzaXplX3QgbGVuID0gbGVmdDsKLQkJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpICYmIGxlbiArIG9mZnNldCA+IFBBR0VfU0laRSkgewotCQkJaWYgKG9mZnNldCA+PSBQQUdFX1NJWkUpIHsKLQkJCQlwYWdlICs9IG9mZnNldCAvIFBBR0VfU0laRTsKLQkJCQlvZmZzZXQgJT0gUEFHRV9TSVpFOworCQl2b2lkICp2YWRkcjsKKworCQlpZiAoUGFnZUhpZ2hNZW0ocGFnZSkpIHsKKwkJCWlmIChsZW4gKyBvZmZzZXQgPiBQQUdFX1NJWkUpIHsKKwkJCQlpZiAob2Zmc2V0ID49IFBBR0VfU0laRSkgeworCQkJCQlwYWdlICs9IG9mZnNldCAvIFBBR0VfU0laRTsKKwkJCQkJb2Zmc2V0ICU9IFBBR0VfU0laRTsKKwkJCQl9CisJCQkJbGVuID0gUEFHRV9TSVpFIC0gb2Zmc2V0OwogCQkJfQotCQkJbGVuID0gUEFHRV9TSVpFIC0gb2Zmc2V0OworCQkJdmFkZHIgPSBrbWFwX2hpZ2hfZ2V0KHBhZ2UpOworCQkJaWYgKHZhZGRyKSB7CisJCQkJdmFkZHIgKz0gb2Zmc2V0OworCQkJCW9wKHZhZGRyLCBsZW4sIGRpcik7CisJCQkJa3VubWFwX2hpZ2gocGFnZSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQl2YWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldDsKKwkJCW9wKHZhZGRyLCBsZW4sIGRpcik7CiAJCX0KLQkJZG1hX2NhY2hlX21haW50X2NvbnRpZ3VvdXMocGFnZSwgb2Zmc2V0LCBsZW4sIGRpcik7CiAJCW9mZnNldCA9IDA7CiAJCXBhZ2UrKzsKIAkJbGVmdCAtPSBsZW47CiAJfSB3aGlsZSAobGVmdCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGRtYV9jYWNoZV9tYWludF9wYWdlKTsKKwordm9pZCBfX19kbWFfcGFnZV9jcHVfdG9fZGV2KHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZiwKKwlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXVuc2lnbmVkIGxvbmcgcGFkZHI7CisKKwlkbWFfY2FjaGVfbWFpbnRfcGFnZShwYWdlLCBvZmYsIHNpemUsIGRpciwgZG1hY19tYXBfYXJlYSk7CisKKwlwYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZjsKKwlpZiAoZGlyID09IERNQV9GUk9NX0RFVklDRSkgeworCQlvdXRlcl9pbnZfcmFuZ2UocGFkZHIsIHBhZGRyICsgc2l6ZSk7CisJfSBlbHNlIHsKKwkJb3V0ZXJfY2xlYW5fcmFuZ2UocGFkZHIsIHBhZGRyICsgc2l6ZSk7CisJfQorCS8qIEZJWE1FOiBub24tc3BlY3VsYXRpbmc6IGZsdXNoIG9uIGJpZGlyZWN0aW9uYWwgbWFwcGluZ3M/ICovCit9CitFWFBPUlRfU1lNQk9MKF9fX2RtYV9wYWdlX2NwdV90b19kZXYpOworCit2b2lkIF9fX2RtYV9wYWdlX2Rldl90b19jcHUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2ZmLAorCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJdW5zaWduZWQgbG9uZyBwYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZjsKKworCS8qIEZJWE1FOiBub24tc3BlY3VsYXRpbmc6IG5vdCByZXF1aXJlZCAqLworCS8qIGRvbid0IGJvdGhlciBpbnZhbGlkYXRpbmcgaWYgRE1BIHRvIGRldmljZSAqLworCWlmIChkaXIgIT0gRE1BX1RPX0RFVklDRSkKKwkJb3V0ZXJfaW52X3JhbmdlKHBhZGRyLCBwYWRkciArIHNpemUpOworCisJZG1hX2NhY2hlX21haW50X3BhZ2UocGFnZSwgb2ZmLCBzaXplLCBkaXIsIGRtYWNfdW5tYXBfYXJlYSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fX2RtYV9wYWdlX2Rldl90b19jcHUpOwogCiAvKioKICAqIGRtYV9tYXBfc2cgLSBtYXAgYSBzZXQgb2YgU0cgYnVmZmVycyBmb3Igc3RyZWFtaW5nIG1vZGUgRE1BCkBAIC01NzMsOCArNTc4LDEyIEBACiAJaW50IGk7CiAKIAlmb3JfZWFjaF9zZyhzZywgcywgbmVudHMsIGkpIHsKLQkJZG1hYm91bmNlX3N5bmNfZm9yX2NwdShkZXYsIHNnX2RtYV9hZGRyZXNzKHMpLCAwLAotCQkJCQlzZ19kbWFfbGVuKHMpLCBkaXIpOworCQlpZiAoIWRtYWJvdW5jZV9zeW5jX2Zvcl9jcHUoZGV2LCBzZ19kbWFfYWRkcmVzcyhzKSwgMCwKKwkJCQkJICAgIHNnX2RtYV9sZW4ocyksIGRpcikpCisJCQljb250aW51ZTsKKworCQlfX2RtYV9wYWdlX2Rldl90b19jcHUoc2dfcGFnZShzKSwgcy0+b2Zmc2V0LAorCQkJCSAgICAgIHMtPmxlbmd0aCwgZGlyKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKGRtYV9zeW5jX3NnX2Zvcl9jcHUpOwpAQCAtNTk3LDkgKzYwNiw4IEBACiAJCQkJCXNnX2RtYV9sZW4ocyksIGRpcikpCiAJCQljb250aW51ZTsKIAotCQlpZiAoIWFyY2hfaXNfY29oZXJlbnQoKSkKLQkJCWRtYV9jYWNoZV9tYWludF9wYWdlKHNnX3BhZ2UocyksIHMtPm9mZnNldCwKLQkJCQkJICAgICBzLT5sZW5ndGgsIGRpcik7CisJCV9fZG1hX3BhZ2VfY3B1X3RvX2RldihzZ19wYWdlKHMpLCBzLT5vZmZzZXQsCisJCQkJICAgICAgcy0+bGVuZ3RoLCBkaXIpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woZG1hX3N5bmNfc2dfZm9yX2RldmljZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMgYi9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMKaW5kZXggNTZlZTE1My4uYzliOTdlOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jCisrKyBiL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYwpAQCAtMzYsMjggKzM2LDEyIEBACiAgKiBUaGVyZWZvcmUgdGhvc2UgY29uZmlndXJhdGlvbnMgd2hpY2ggbWlnaHQgY2FsbCBhZGp1c3RfcHRlICh0aG9zZQogICogd2l0aG91dCBDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQpIGNhbm5vdCBzdXBwb3J0IHNwbGl0IHBhZ2VfdGFibGVfbG9jay4KICAqLwotc3RhdGljIGludCBhZGp1c3RfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCitzdGF0aWMgaW50IGRvX2FkanVzdF9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwl1bnNpZ25lZCBsb25nIHBmbiwgcHRlX3QgKnB0ZXApCiB7Ci0JcGdkX3QgKnBnZDsKLQlwbWRfdCAqcG1kOwotCXB0ZV90ICpwdGUsIGVudHJ5OworCXB0ZV90IGVudHJ5ID0gKnB0ZXA7CiAJaW50IHJldDsKIAotCXBnZCA9IHBnZF9vZmZzZXQodm1hLT52bV9tbSwgYWRkcmVzcyk7Ci0JaWYgKHBnZF9ub25lKCpwZ2QpKQotCQlnb3RvIG5vX3BnZDsKLQlpZiAocGdkX2JhZCgqcGdkKSkKLQkJZ290byBiYWRfcGdkOwotCi0JcG1kID0gcG1kX29mZnNldChwZ2QsIGFkZHJlc3MpOwotCWlmIChwbWRfbm9uZSgqcG1kKSkKLQkJZ290byBub19wbWQ7Ci0JaWYgKHBtZF9iYWQoKnBtZCkpCi0JCWdvdG8gYmFkX3BtZDsKLQotCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcmVzcyk7Ci0JZW50cnkgPSAqcHRlOwotCiAJLyoKIAkgKiBJZiB0aGlzIHBhZ2UgaXMgcHJlc2VudCwgaXQncyBhY3R1YWxseSBiZWluZyBzaGFyZWQuCiAJICovCkBAIC02OCwzMyArNTIsNTUgQEAKIAkgKiBmYXVsdCAoaWUsIGlzIG9sZCksIHdlIGNhbiBzYWZlbHkgaWdub3JlIGFueSBpc3N1ZXMuCiAJICovCiAJaWYgKHJldCAmJiAocHRlX3ZhbChlbnRyeSkgJiBMX1BURV9NVF9NQVNLKSAhPSBzaGFyZWRfcHRlX21hc2spIHsKLQkJdW5zaWduZWQgbG9uZyBwZm4gPSBwdGVfcGZuKGVudHJ5KTsKIAkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHJlc3MsIHBmbik7CiAJCW91dGVyX2ZsdXNoX3JhbmdlKChwZm4gPDwgUEFHRV9TSElGVCksCiAJCQkJICAocGZuIDw8IFBBR0VfU0hJRlQpICsgUEFHRV9TSVpFKTsKIAkJcHRlX3ZhbChlbnRyeSkgJj0gfkxfUFRFX01UX01BU0s7CiAJCXB0ZV92YWwoZW50cnkpIHw9IHNoYXJlZF9wdGVfbWFzazsKLQkJc2V0X3B0ZV9hdCh2bWEtPnZtX21tLCBhZGRyZXNzLCBwdGUsIGVudHJ5KTsKKwkJc2V0X3B0ZV9hdCh2bWEtPnZtX21tLCBhZGRyZXNzLCBwdGVwLCBlbnRyeSk7CiAJCWZsdXNoX3RsYl9wYWdlKHZtYSwgYWRkcmVzcyk7CiAJfQotCXB0ZV91bm1hcChwdGUpOworCiAJcmV0dXJuIHJldDsKK30KIAotYmFkX3BnZDoKLQlwZ2RfRVJST1IoKnBnZCk7Ci0JcGdkX2NsZWFyKHBnZCk7Ci1ub19wZ2Q6Ci0JcmV0dXJuIDA7CitzdGF0aWMgaW50IGFkanVzdF9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwl1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlzcGlubG9ja190ICpwdGw7CisJcGdkX3QgKnBnZDsKKwlwbWRfdCAqcG1kOworCXB0ZV90ICpwdGU7CisJaW50IHJldDsKIAotYmFkX3BtZDoKLQlwbWRfRVJST1IoKnBtZCk7Ci0JcG1kX2NsZWFyKHBtZCk7Ci1ub19wbWQ6Ci0JcmV0dXJuIDA7CisJcGdkID0gcGdkX29mZnNldCh2bWEtPnZtX21tLCBhZGRyZXNzKTsKKwlpZiAocGdkX25vbmVfb3JfY2xlYXJfYmFkKHBnZCkpCisJCXJldHVybiAwOworCisJcG1kID0gcG1kX29mZnNldChwZ2QsIGFkZHJlc3MpOworCWlmIChwbWRfbm9uZV9vcl9jbGVhcl9iYWQocG1kKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFRoaXMgaXMgY2FsbGVkIHdoaWxlIGFub3RoZXIgcGFnZSB0YWJsZSBpcyBtYXBwZWQsIHNvIHdlCisJICogbXVzdCB1c2UgdGhlIG5lc3RlZCB2ZXJzaW9uLiAgVGhpcyBhbHNvIG1lYW5zIHdlIG5lZWQgdG8KKwkgKiBvcGVuLWNvZGUgdGhlIHNwaW4tbG9ja2luZy4KKwkgKi8KKwlwdGwgPSBwdGVfbG9ja3B0cih2bWEtPnZtX21tLCBwbWQpOworCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX25lc3RlZChwbWQsIGFkZHJlc3MpOworCXNwaW5fbG9jayhwdGwpOworCisJcmV0ID0gZG9fYWRqdXN0X3B0ZSh2bWEsIGFkZHJlc3MsIHBmbiwgcHRlKTsKKworCXNwaW5fdW5sb2NrKHB0bCk7CisJcHRlX3VubWFwX25lc3RlZChwdGUpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQKLW1ha2VfY29oZXJlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuKQorbWFrZV9jb2hlcmVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBwZm4pCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbXBudDsKQEAgLTEyMiwxMSArMTI4LDExIEBACiAJCWlmICghKG1wbnQtPnZtX2ZsYWdzICYgVk1fTUFZU0hBUkUpKQogCQkJY29udGludWU7CiAJCW9mZnNldCA9IChwZ29mZiAtIG1wbnQtPnZtX3Bnb2ZmKSA8PCBQQUdFX1NISUZUOwotCQlhbGlhc2VzICs9IGFkanVzdF9wdGUobXBudCwgbXBudC0+dm1fc3RhcnQgKyBvZmZzZXQpOworCQlhbGlhc2VzICs9IGFkanVzdF9wdGUobXBudCwgbXBudC0+dm1fc3RhcnQgKyBvZmZzZXQsIHBmbik7CiAJfQogCWZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKTsKIAlpZiAoYWxpYXNlcykKLQkJYWRqdXN0X3B0ZSh2bWEsIGFkZHIpOworCQlkb19hZGp1c3RfcHRlKHZtYSwgYWRkciwgcGZuLCBwdGVwKTsKIAllbHNlCiAJCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyLCBwZm4pOwogfQpAQCAtMTQ0LDkgKzE1MCwxMCBAQAogICoKICAqIE5vdGUgdGhhdCB0aGUgcHRlIGxvY2sgd2lsbCBiZSBoZWxkLgogICovCi12b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQordm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJcHRlX3QgKnB0ZXApCiB7Ci0JdW5zaWduZWQgbG9uZyBwZm4gPSBwdGVfcGZuKHB0ZSk7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBwdGVfcGZuKCpwdGVwKTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIApAQCAtMTY4LDcgKzE3NSw3IEBACiAjZW5kaWYKIAlpZiAobWFwcGluZykgewogCQlpZiAoY2FjaGVfaXNfdml2dCgpKQotCQkJbWFrZV9jb2hlcmVudChtYXBwaW5nLCB2bWEsIGFkZHIsIHBmbik7CisJCQltYWtlX2NvaGVyZW50KG1hcHBpbmcsIHZtYSwgYWRkciwgcHRlcCwgcGZuKTsKIAkJZWxzZSBpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpCiAJCQlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mYXVsdC5jIGIvYXJjaC9hcm0vbW0vZmF1bHQuYwppbmRleCAxMGUwNjgwLi45ZDQwYzM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mYXVsdC5jCisrKyBiL2FyY2gvYXJtL21tL2ZhdWx0LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC0zMDIsNiArMzAzLDEyIEBACiAJZmF1bHQgPSBfX2RvX3BhZ2VfZmF1bHQobW0sIGFkZHIsIGZzciwgdHNrKTsKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCisJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTLCAxLCAwLCByZWdzLCBhZGRyKTsKKwlpZiAoZmF1bHQgJiBWTV9GQVVMVF9NQUpPUikKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwgMSwgMCwgcmVncywgYWRkcik7CisJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9NSU5PUikKKwkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTiwgMSwgMCwgcmVncywgYWRkcik7CisKIAkvKgogCSAqIEhhbmRsZSB0aGUgIm5vcm1hbCIgY2FzZSBmaXJzdCAtIFZNX0ZBVUxUX01BSk9SIC8gVk1fRkFVTFRfTUlOT1IKIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZsdXNoLmMgYi9hcmNoL2FybS9tbS9mbHVzaC5jCmluZGV4IDZmM2E0YjcuLmUzNGYwOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZsdXNoLmMKKysrIGIvYXJjaC9hcm0vbW0vZmx1c2guYwpAQCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vY2FjaGV0eXBlLmg+CisjaW5jbHVkZSA8YXNtL3NtcF9wbGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCkBAIC04NywxMyArODgsMjYgQEAKIAlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMgJiYgaWNhY2hlX2lzX3ZpdnRfYXNpZF90YWdnZWQoKSkKIAkJX19mbHVzaF9pY2FjaGVfYWxsKCk7CiB9CisjZWxzZQorI2RlZmluZSBmbHVzaF9wZm5fYWxpYXMocGZuLHZhZGRyKQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyB2b2lkIGZsdXNoX3B0cmFjZV9hY2Nlc3Nfb3RoZXIodm9pZCAqYXJncykKK3sKKwlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKK30KKyNlbmRpZgorCitzdGF0aWMKIHZvaWQgZmx1c2hfcHRyYWNlX2FjY2VzcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkgdW5zaWduZWQgbG9uZyB1YWRkciwgdm9pZCAqa2FkZHIsCi0JCQkgdW5zaWduZWQgbG9uZyBsZW4sIGludCB3cml0ZSkKKwkJCSB1bnNpZ25lZCBsb25nIHVhZGRyLCB2b2lkICprYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCiB7CiAJaWYgKGNhY2hlX2lzX3ZpdnQoKSkgewotCQl2aXZ0X2ZsdXNoX3B0cmFjZV9hY2Nlc3Modm1hLCBwYWdlLCB1YWRkciwga2FkZHIsIGxlbiwgd3JpdGUpOworCQlpZiAoY3B1bWFza190ZXN0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sodm1hLT52bV9tbSkpKSB7CisJCQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylrYWRkcjsKKwkJCV9fY3B1Y19jb2hlcmVudF9rZXJuX3JhbmdlKGFkZHIsIGFkZHIgKyBsZW4pOworCQl9CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwNCwxNiArMTE4LDM3IEBACiAJfQogCiAJLyogVklQVCBub24tYWxpYXNpbmcgY2FjaGUgKi8KLQlpZiAoY3B1bWFza190ZXN0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sodm1hLT52bV9tbSkpICYmCi0JICAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKSB7CisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKSB7CiAJCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKWthZGRyOwotCQkvKiBvbmx5IGZsdXNoaW5nIHRoZSBrZXJuZWwgbWFwcGluZyBvbiBub24tYWxpYXNpbmcgVklQVCAqLwogCQlfX2NwdWNfY29oZXJlbnRfa2Vybl9yYW5nZShhZGRyLCBhZGRyICsgbGVuKTsKKyNpZmRlZiBDT05GSUdfU01QCisJCWlmIChjYWNoZV9vcHNfbmVlZF9icm9hZGNhc3QoKSkKKwkJCXNtcF9jYWxsX2Z1bmN0aW9uKGZsdXNoX3B0cmFjZV9hY2Nlc3Nfb3RoZXIsCisJCQkJCSAgTlVMTCwgMSk7CisjZW5kaWYKIAl9CiB9Ci0jZWxzZQotI2RlZmluZSBmbHVzaF9wZm5fYWxpYXMocGZuLHZhZGRyKQlkbyB7IH0gd2hpbGUgKDApCisKKy8qCisgKiBDb3B5IHVzZXIgZGF0YSBmcm9tL3RvIGEgcGFnZSB3aGljaCBpcyBtYXBwZWQgaW50byBhIGRpZmZlcmVudAorICogcHJvY2Vzc2VzIGFkZHJlc3Mgc3BhY2UuICBSZWFsbHksIHdlIHdhbnQgdG8gYWxsb3cgb3VyICJ1c2VyCisgKiBzcGFjZSIgbW9kZWwgdG8gaGFuZGxlIHRoaXMuCisgKgorICogTm90ZSB0aGF0IHRoaXMgY29kZSBuZWVkcyB0byBydW4gb24gdGhlIGN1cnJlbnQgQ1BVLgorICovCit2b2lkIGNvcHlfdG9fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWFkZHIsIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBsZW4pCit7CisjaWZkZWYgQ09ORklHX1NNUAorCXByZWVtcHRfZGlzYWJsZSgpOwogI2VuZGlmCisJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOworCWZsdXNoX3B0cmFjZV9hY2Nlc3Modm1hLCBwYWdlLCB1YWRkciwgZHN0LCBsZW4pOworI2lmZGVmIENPTkZJR19TTVAKKwlwcmVlbXB0X2VuYWJsZSgpOworI2VuZGlmCit9CiAKIHZvaWQgX19mbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggYTA0ZmZiYi4uNzgyOWNiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogI2luY2x1ZGUgPGFzbS90bGIuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CkBAIC0zMiwxOSArMzMsMjEgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBoeXNfaW5pdHJkX3N0YXJ0IF9faW5pdGRhdGEgPSAwOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcGh5c19pbml0cmRfc2l6ZSBfX2luaXRkYXRhID0gMDsKIAotc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2luaXRyZChjaGFyICoqcCkKK3N0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRyZChjaGFyICpwKQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemU7CisJY2hhciAqZW5kcDsKIAotCXN0YXJ0ID0gbWVtcGFyc2UoKnAsIHApOwotCWlmICgqKnAgPT0gJywnKSB7Ci0JCXNpemUgPSBtZW1wYXJzZSgoKnApICsgMSwgcCk7CisJc3RhcnQgPSBtZW1wYXJzZShwLCAmZW5kcCk7CisJaWYgKCplbmRwID09ICcsJykgeworCQlzaXplID0gbWVtcGFyc2UoZW5kcCArIDEsIE5VTEwpOwogCiAJCXBoeXNfaW5pdHJkX3N0YXJ0ID0gc3RhcnQ7CiAJCXBoeXNfaW5pdHJkX3NpemUgPSBzaXplOwogCX0KKwlyZXR1cm4gMDsKIH0KLV9fZWFybHlfcGFyYW0oImluaXRyZD0iLCBlYXJseV9pbml0cmQpOworZWFybHlfcGFyYW0oImluaXRyZCIsIGVhcmx5X2luaXRyZCk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHBhcnNlX3RhZ19pbml0cmQoY29uc3Qgc3RydWN0IHRhZyAqdGFnKQogewpAQCAtNTYwLDcgKzU2Myw3IEBACiAgKi8KIHZvaWQgX19pbml0IG1lbV9pbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGNvZGVzaXplLCBkYXRhc2l6ZSwgaW5pdHNpemU7CisJdW5zaWduZWQgbG9uZyByZXNlcnZlZF9wYWdlcywgZnJlZV9wYWdlczsKIAlpbnQgaSwgbm9kZTsKIAogI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCkBAIC01OTYsNiArNTk5LDMzIEBACiAJdG90YWxyYW1fcGFnZXMgKz0gdG90YWxoaWdoX3BhZ2VzOwogI2VuZGlmCiAKKwlyZXNlcnZlZF9wYWdlcyA9IGZyZWVfcGFnZXMgPSAwOworCisJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgeworCQlwZ19kYXRhX3QgKm4gPSBOT0RFX0RBVEEobm9kZSk7CisJCXN0cnVjdCBwYWdlICptYXAgPSBwZ2RhdF9wYWdlX25yKG4sIDApIC0gbi0+bm9kZV9zdGFydF9wZm47CisKKwkJZm9yX2VhY2hfbm9kZWJhbmsoaSwgJm1lbWluZm8sIG5vZGUpIHsKKwkJCXN0cnVjdCBtZW1iYW5rICpiYW5rID0gJm1lbWluZm8uYmFua1tpXTsKKwkJCXVuc2lnbmVkIGludCBwZm4xLCBwZm4yOworCQkJc3RydWN0IHBhZ2UgKnBhZ2UsICplbmQ7CisKKwkJCXBmbjEgPSBiYW5rX3Bmbl9zdGFydChiYW5rKTsKKwkJCXBmbjIgPSBiYW5rX3Bmbl9lbmQoYmFuayk7CisKKwkJCXBhZ2UgPSBtYXAgKyBwZm4xOworCQkJZW5kICA9IG1hcCArIHBmbjI7CisKKwkJCWRvIHsKKwkJCQlpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKQorCQkJCQlyZXNlcnZlZF9wYWdlcysrOworCQkJCWVsc2UgaWYgKCFwYWdlX2NvdW50KHBhZ2UpKQorCQkJCQlmcmVlX3BhZ2VzKys7CisJCQkJcGFnZSsrOworCQkJfSB3aGlsZSAocGFnZSA8IGVuZCk7CisJCX0KKwl9CisKIAkvKgogCSAqIFNpbmNlIG91ciBtZW1vcnkgbWF5IG5vdCBiZSBjb250aWd1b3VzLCBjYWxjdWxhdGUgdGhlCiAJICogcmVhbCBudW1iZXIgb2YgcGFnZXMgd2UgaGF2ZSBpbiB0aGlzIHN5c3RlbQpAQCAtNjA4LDE2ICs2MzgsNzEgQEAKIAl9CiAJcHJpbnRrKCIgPSAlbHVNQiB0b3RhbFxuIiwgbnVtX3BoeXNwYWdlcyA+PiAoMjAgLSBQQUdFX1NISUZUKSk7CiAKLQljb2Rlc2l6ZSA9IF9ldGV4dCAtIF90ZXh0OwotCWRhdGFzaXplID0gX2VuZCAtIF9kYXRhOwotCWluaXRzaXplID0gX19pbml0X2VuZCAtIF9faW5pdF9iZWdpbjsKLQotCXByaW50ayhLRVJOX05PVElDRSAiTWVtb3J5OiAlbHVLQiBhdmFpbGFibGUgKCVkSyBjb2RlLCAiCi0JCSIlZEsgZGF0YSwgJWRLIGluaXQsICVsdUsgaGlnaG1lbSlcbiIsCi0JCW5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCksIGNvZGVzaXplID4+IDEwLAotCQlkYXRhc2l6ZSA+PiAxMCwgaW5pdHNpemUgPj4gMTAsCisJcHJpbnRrKEtFUk5fTk9USUNFICJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUsICVsdWsgcmVzZXJ2ZWQsICVsdUsgaGlnaG1lbVxuIiwKKwkJbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkJZnJlZV9wYWdlcyA8PCAoUEFHRV9TSElGVC0xMCksCisJCXJlc2VydmVkX3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKIAkJdG90YWxoaWdoX3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSk7CiAKKyNkZWZpbmUgTUxLKGIsIHQpIGIsIHQsICgodCkgLSAoYikpID4+IDEwCisjZGVmaW5lIE1MTShiLCB0KSBiLCB0LCAoKHQpIC0gKGIpKSA+PiAyMAorI2RlZmluZSBNTEtfUk9VTkRVUChiLCB0KSBiLCB0LCBESVZfUk9VTkRfVVAoKCh0KSAtIChiKSksIFNaXzFLKQorCisJcHJpbnRrKEtFUk5fTk9USUNFICJWaXJ0dWFsIGtlcm5lbCBtZW1vcnkgbGF5b3V0OlxuIgorCQkJIiAgICB2ZWN0b3IgIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBrQilcbiIKKwkJCSIgICAgZml4bWFwICA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQga0IpXG4iCisjaWZkZWYgQ09ORklHX01NVQorCQkJIiAgICBETUEgICAgIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBNQilcbiIKKyNlbmRpZgorCQkJIiAgICB2bWFsbG9jIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBNQilcbiIKKwkJCSIgICAgbG93bWVtICA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQgTUIpXG4iCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkJCSIgICAgcGttYXAgICA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQgTUIpXG4iCisjZW5kaWYKKwkJCSIgICAgbW9kdWxlcyA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQgTUIpXG4iCisJCQkiICAgICAgLmluaXQgOiAweCVwIiAiIC0gMHglcCIgIiAgICglNGQga0IpXG4iCisJCQkiICAgICAgLnRleHQgOiAweCVwIiAiIC0gMHglcCIgIiAgICglNGQga0IpXG4iCisJCQkiICAgICAgLmRhdGEgOiAweCVwIiAiIC0gMHglcCIgIiAgICglNGQga0IpXG4iLAorCisJCQlNTEsoVUwoQ09ORklHX1ZFQ1RPUlNfQkFTRSksIFVMKENPTkZJR19WRUNUT1JTX0JBU0UpICsKKwkJCQkoUEFHRV9TSVpFKSksCisJCQlNTEsoRklYQUREUl9TVEFSVCwgRklYQUREUl9UT1ApLAorI2lmZGVmIENPTkZJR19NTVUKKwkJCU1MTShDT05TSVNURU5UX0JBU0UsIENPTlNJU1RFTlRfRU5EKSwKKyNlbmRpZgorCQkJTUxNKFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5EKSwKKwkJCU1MTShQQUdFX09GRlNFVCwgKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkpLAorI2lmZGVmIENPTkZJR19ISUdITUVNCisJCQlNTE0oUEtNQVBfQkFTRSwgKFBLTUFQX0JBU0UpICsgKExBU1RfUEtNQVApICoKKwkJCQkoUEFHRV9TSVpFKSksCisjZW5kaWYKKwkJCU1MTShNT0RVTEVTX1ZBRERSLCBNT0RVTEVTX0VORCksCisKKwkJCU1MS19ST1VORFVQKF9faW5pdF9iZWdpbiwgX19pbml0X2VuZCksCisJCQlNTEtfUk9VTkRVUChfdGV4dCwgX2V0ZXh0KSwKKwkJCU1MS19ST1VORFVQKF9kYXRhLCBfZWRhdGEpKTsKKworI3VuZGVmIE1MSworI3VuZGVmIE1MTQorI3VuZGVmIE1MS19ST1VORFVQCisKKwkvKgorCSAqIENoZWNrIGJvdW5kYXJpZXMgdHdpY2U6IFNvbWUgZnVuZGFtZW50YWwgaW5jb25zaXN0ZW5jaWVzIGNhbgorCSAqIGJlIGRldGVjdGVkIGF0IGJ1aWxkIHRpbWUgYWxyZWFkeS4KKwkgKi8KKyNpZmRlZiBDT05GSUdfTU1VCisJQlVJTERfQlVHX09OKFZNQUxMT0NfRU5ECQkJPiBDT05TSVNURU5UX0JBU0UpOworCUJVR19PTihWTUFMTE9DX0VORAkJCQk+IENPTlNJU1RFTlRfQkFTRSk7CisKKwlCVUlMRF9CVUdfT04oVEFTS19TSVpFCQkJCT4gTU9EVUxFU19WQUREUik7CisJQlVHX09OKFRBU0tfU0laRSAJCQkJPiBNT0RVTEVTX1ZBRERSKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwlCVUlMRF9CVUdfT04oUEtNQVBfQkFTRSArIExBU1RfUEtNQVAgKiBQQUdFX1NJWkUgPiBQQUdFX09GRlNFVCk7CisJQlVHX09OKFBLTUFQX0JBU0UgKyBMQVNUX1BLTUFQICogUEFHRV9TSVpFCT4gUEFHRV9PRkZTRVQpOworI2VuZGlmCisKIAlpZiAoUEFHRV9TSVpFID49IDE2Mzg0ICYmIG51bV9waHlzcGFnZXMgPD0gMTI4KSB7CiAJCWV4dGVybiBpbnQgc3lzY3RsX292ZXJjb21taXRfbWVtb3J5OwogCQkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW9yZW1hcC5jIGIvYXJjaC9hcm0vbW0vaW9yZW1hcC5jCmluZGV4IDBhYjc1YzYuLjI4YzhiOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2lvcmVtYXAuYworKysgYi9hcmNoL2FybS9tbS9pb3JlbWFwLmMKQEAgLTEzOSw4ICsxMzksOCBAQAogICogd2hpY2ggcmVxdWlyZXMgdGhlIG5ldyBpb3JlbWFwJ2QgcmVnaW9uIHRvIGJlIHJlZmVyZW5jZWQsIHRoZSBDUFUgd2lsbAogICogcmVmZXJlbmNlIHRoZSBfb2xkXyByZWdpb24uCiAgKgotICogTm90ZSB0aGF0IGdldF92bV9hcmVhKCkgYWxsb2NhdGVzIGEgZ3VhcmQgNEsgcGFnZSwgc28gd2UgbmVlZCB0byBtYXNrCi0gKiB0aGUgc2l6ZSBiYWNrIHRvIDFNQiBhbGlnbmVkIG9yIHdlIHdpbGwgb3ZlcmZsb3cgaW4gdGhlIGxvb3AgYmVsb3cuCisgKiBOb3RlIHRoYXQgZ2V0X3ZtX2FyZWFfY2FsbGVyKCkgYWxsb2NhdGVzIGEgZ3VhcmQgNEsgcGFnZSwgc28gd2UgbmVlZCB0bworICogbWFzayB0aGUgc2l6ZSBiYWNrIHRvIDFNQiBhbGlnbmVkIG9yIHdlIHdpbGwgb3ZlcmZsb3cgaW4gdGhlIGxvb3AgYmVsb3cuCiAgKi8KIHN0YXRpYyB2b2lkIHVubWFwX2FyZWFfc2VjdGlvbnModW5zaWduZWQgbG9uZyB2aXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CkBAIC0yNTQsMjIgKzI1NCw4IEBACiB9CiAjZW5kaWYKIAotCi0vKgotICogUmVtYXAgYW4gYXJiaXRyYXJ5IHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgaW50byB0aGUga2VybmVsIHZpcnR1YWwKLSAqIGFkZHJlc3Mgc3BhY2UuIE5lZWRlZCB3aGVuIHRoZSBrZXJuZWwgd2FudHMgdG8gYWNjZXNzIGhpZ2ggYWRkcmVzc2VzCi0gKiBkaXJlY3RseS4KLSAqCi0gKiBOT1RFISBXZSBuZWVkIHRvIGFsbG93IG5vbi1wYWdlLWFsaWduZWQgbWFwcGluZ3MgdG9vOiB3ZSB3aWxsIG9idmlvdXNseQotICogaGF2ZSB0byBjb252ZXJ0IHRoZW0gaW50byBhbiBvZmZzZXQgaW4gYSBwYWdlLWFsaWduZWQgbWFwcGluZywgYnV0IHRoZQotICogY2FsbGVyIHNob3VsZG4ndCBuZWVkIHRvIGtub3cgdGhhdCBzbWFsbCBkZXRhaWwuCi0gKgotICogJ2ZsYWdzJyBhcmUgdGhlIGV4dHJhIExfUFRFXyBmbGFncyB0aGF0IHlvdSB3YW50IHRvIHNwZWNpZnkgZm9yIHRoaXMKLSAqIG1hcHBpbmcuICBTZWUgPGFzbS9wZ3RhYmxlLmg+IGZvciBtb3JlIGluZm9ybWF0aW9uLgotICovCi12b2lkIF9faW9tZW0gKgotX19hcm1faW9yZW1hcF9wZm4odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKLQkJICB1bnNpZ25lZCBpbnQgbXR5cGUpCit2b2lkIF9faW9tZW0gKiBfX2FybV9pb3JlbWFwX3Bmbl9jYWxsZXIodW5zaWduZWQgbG9uZyBwZm4sCisJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgbXR5cGUsIHZvaWQgKmNhbGxlcikKIHsKIAljb25zdCBzdHJ1Y3QgbWVtX3R5cGUgKnR5cGU7CiAJaW50IGVycjsKQEAgLTI5MSw3ICsyNzcsNyBAQAogCSAqLwogCXNpemUgPSBQQUdFX0FMSUdOKG9mZnNldCArIHNpemUpOwogCi0gCWFyZWEgPSBnZXRfdm1fYXJlYShzaXplLCBWTV9JT1JFTUFQKTsKKwlhcmVhID0gZ2V0X3ZtX2FyZWFfY2FsbGVyKHNpemUsIFZNX0lPUkVNQVAsIGNhbGxlcik7CiAgCWlmICghYXJlYSkKICAJCXJldHVybiBOVUxMOwogIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0+YWRkcjsKQEAgLTMxOCwxMCArMzA0LDkgQEAKIAlmbHVzaF9jYWNoZV92bWFwKGFkZHIsIGFkZHIgKyBzaXplKTsKIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSAob2Zmc2V0ICsgYWRkcik7CiB9Ci1FWFBPUlRfU1lNQk9MKF9fYXJtX2lvcmVtYXBfcGZuKTsKIAotdm9pZCBfX2lvbWVtICoKLV9fYXJtX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgbXR5cGUpCit2b2lkIF9faW9tZW0gKl9fYXJtX2lvcmVtYXBfY2FsbGVyKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCBzaXplX3Qgc2l6ZSwKKwl1bnNpZ25lZCBpbnQgbXR5cGUsIHZvaWQgKmNhbGxlcikKIHsKIAl1bnNpZ25lZCBsb25nIGxhc3RfYWRkcjsKICAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBwaHlzX2FkZHIgJiB+UEFHRV9NQVNLOwpAQCAtMzM0LDcgKzMxOSwzMyBAQAogCWlmICghc2l6ZSB8fCBsYXN0X2FkZHIgPCBwaHlzX2FkZHIpCiAJCXJldHVybiBOVUxMOwogCi0gCXJldHVybiBfX2FybV9pb3JlbWFwX3BmbihwZm4sIG9mZnNldCwgc2l6ZSwgbXR5cGUpOworCXJldHVybiBfX2FybV9pb3JlbWFwX3Bmbl9jYWxsZXIocGZuLCBvZmZzZXQsIHNpemUsIG10eXBlLAorCQkJY2FsbGVyKTsKK30KKworLyoKKyAqIFJlbWFwIGFuIGFyYml0cmFyeSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIGludG8gdGhlIGtlcm5lbCB2aXJ0dWFsCisgKiBhZGRyZXNzIHNwYWNlLiBOZWVkZWQgd2hlbiB0aGUga2VybmVsIHdhbnRzIHRvIGFjY2VzcyBoaWdoIGFkZHJlc3NlcworICogZGlyZWN0bHkuCisgKgorICogTk9URSEgV2UgbmVlZCB0byBhbGxvdyBub24tcGFnZS1hbGlnbmVkIG1hcHBpbmdzIHRvbzogd2Ugd2lsbCBvYnZpb3VzbHkKKyAqIGhhdmUgdG8gY29udmVydCB0aGVtIGludG8gYW4gb2Zmc2V0IGluIGEgcGFnZS1hbGlnbmVkIG1hcHBpbmcsIGJ1dCB0aGUKKyAqIGNhbGxlciBzaG91bGRuJ3QgbmVlZCB0byBrbm93IHRoYXQgc21hbGwgZGV0YWlsLgorICovCit2b2lkIF9faW9tZW0gKgorX19hcm1faW9yZW1hcF9wZm4odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJICB1bnNpZ25lZCBpbnQgbXR5cGUpCit7CisJcmV0dXJuIF9fYXJtX2lvcmVtYXBfcGZuX2NhbGxlcihwZm4sIG9mZnNldCwgc2l6ZSwgbXR5cGUsCisJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworfQorRVhQT1JUX1NZTUJPTChfX2FybV9pb3JlbWFwX3Bmbik7CisKK3ZvaWQgX19pb21lbSAqCitfX2FybV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IG10eXBlKQoreworCXJldHVybiBfX2FybV9pb3JlbWFwX2NhbGxlcihwaHlzX2FkZHIsIHNpemUsIG10eXBlLAorCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0woX19hcm1faW9yZW1hcCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tdS5jIGIvYXJjaC9hcm0vbW0vbW11LmMKaW5kZXggNzYxZmZlZC4uOWQ0ZGE2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vbW11LmMKKysrIGIvYXJjaC9hcm0vbW0vbW11LmMKQEAgLTEwMCwxOCArMTAwLDE3IEBACiAgKiB3cml0ZWJ1ZmZlciB0byBiZSB0dXJuZWQgb2ZmLiAgKE5vdGU6IHRoZSB3cml0ZQogICogYnVmZmVyIHNob3VsZCBub3QgYmUgb24gYW5kIHRoZSBjYWNoZSBvZmYpLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfY2FjaGVwb2xpY3koY2hhciAqKnApCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV9jYWNoZXBvbGljeShjaGFyICpwKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2FjaGVfcG9saWNpZXMpOyBpKyspIHsKIAkJaW50IGxlbiA9IHN0cmxlbihjYWNoZV9wb2xpY2llc1tpXS5wb2xpY3kpOwogCi0JCWlmIChtZW1jbXAoKnAsIGNhY2hlX3BvbGljaWVzW2ldLnBvbGljeSwgbGVuKSA9PSAwKSB7CisJCWlmIChtZW1jbXAocCwgY2FjaGVfcG9saWNpZXNbaV0ucG9saWN5LCBsZW4pID09IDApIHsKIAkJCWNhY2hlcG9saWN5ID0gaTsKIAkJCWNyX2FsaWdubWVudCAmPSB+Y2FjaGVfcG9saWNpZXNbaV0uY3JfbWFzazsKIAkJCWNyX25vX2FsaWdubWVudCAmPSB+Y2FjaGVfcG9saWNpZXNbaV0uY3JfbWFzazsKLQkJCSpwICs9IGxlbjsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTMwLDM2ICsxMjksMzcgQEAKIAl9CiAJZmx1c2hfY2FjaGVfYWxsKCk7CiAJc2V0X2NyKGNyX2FsaWdubWVudCk7CisJcmV0dXJuIDA7CiB9Ci1fX2Vhcmx5X3BhcmFtKCJjYWNoZXBvbGljeT0iLCBlYXJseV9jYWNoZXBvbGljeSk7CitlYXJseV9wYXJhbSgiY2FjaGVwb2xpY3kiLCBlYXJseV9jYWNoZXBvbGljeSk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9ub2NhY2hlKGNoYXIgKipfX3VudXNlZCkKK3N0YXRpYyBpbnQgX19pbml0IGVhcmx5X25vY2FjaGUoY2hhciAqX191bnVzZWQpCiB7CiAJY2hhciAqcCA9ICJidWZmZXJlZCI7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAibm9jYWNoZSBpcyBkZXByZWNhdGVkOyB1c2UgY2FjaGVwb2xpY3k9JXNcbiIsIHApOwotCWVhcmx5X2NhY2hlcG9saWN5KCZwKTsKKwllYXJseV9jYWNoZXBvbGljeShwKTsKKwlyZXR1cm4gMDsKIH0KLV9fZWFybHlfcGFyYW0oIm5vY2FjaGUiLCBlYXJseV9ub2NhY2hlKTsKK2Vhcmx5X3BhcmFtKCJub2NhY2hlIiwgZWFybHlfbm9jYWNoZSk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9ub3dyaXRlKGNoYXIgKipfX3VudXNlZCkKK3N0YXRpYyBpbnQgX19pbml0IGVhcmx5X25vd3JpdGUoY2hhciAqX191bnVzZWQpCiB7CiAJY2hhciAqcCA9ICJ1bmNhY2hlZCI7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAibm93YiBpcyBkZXByZWNhdGVkOyB1c2UgY2FjaGVwb2xpY3k9JXNcbiIsIHApOwotCWVhcmx5X2NhY2hlcG9saWN5KCZwKTsKKwllYXJseV9jYWNoZXBvbGljeShwKTsKKwlyZXR1cm4gMDsKIH0KLV9fZWFybHlfcGFyYW0oIm5vd2IiLCBlYXJseV9ub3dyaXRlKTsKK2Vhcmx5X3BhcmFtKCJub3diIiwgZWFybHlfbm93cml0ZSk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9lY2MoY2hhciAqKnApCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV9lY2MoY2hhciAqcCkKIHsKLQlpZiAobWVtY21wKCpwLCAib24iLCAyKSA9PSAwKSB7CisJaWYgKG1lbWNtcChwLCAib24iLCAyKSA9PSAwKQogCQllY2NfbWFzayA9IFBNRF9QUk9URUNUSU9OOwotCQkqcCArPSAyOwotCX0gZWxzZSBpZiAobWVtY21wKCpwLCAib2ZmIiwgMykgPT0gMCkgeworCWVsc2UgaWYgKG1lbWNtcChwLCAib2ZmIiwgMykgPT0gMCkKIAkJZWNjX21hc2sgPSAwOwotCQkqcCArPSAzOwotCX0KKwlyZXR1cm4gMDsKIH0KLV9fZWFybHlfcGFyYW0oImVjYz0iLCBlYXJseV9lY2MpOworZWFybHlfcGFyYW0oImVjYyIsIGVhcmx5X2VjYyk7CiAKIHN0YXRpYyBpbnQgX19pbml0IG5vYWxpZ25fc2V0dXAoY2hhciAqX191bnVzZWQpCiB7CkBAIC02NzAsOSArNjcwLDkgQEAKICAqIGJ5dGVzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGluY3JlYXNlIChvciBkZWNyZWFzZSkgdGhlIHZtYWxsb2MKICAqIGFyZWEgLSB0aGUgZGVmYXVsdCBpcyAxMjhtLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfdm1hbGxvYyhjaGFyICoqYXJnKQorc3RhdGljIGludCBfX2luaXQgZWFybHlfdm1hbGxvYyhjaGFyICphcmcpCiB7Ci0Jdm1hbGxvY19yZXNlcnZlID0gbWVtcGFyc2UoKmFyZywgYXJnKTsKKwl2bWFsbG9jX3Jlc2VydmUgPSBtZW1wYXJzZShhcmcsIE5VTEwpOwogCiAJaWYgKHZtYWxsb2NfcmVzZXJ2ZSA8IFNaXzE2TSkgewogCQl2bWFsbG9jX3Jlc2VydmUgPSBTWl8xNk07CkBAIC02ODcsOCArNjg3LDkgQEAKIAkJCSJ2bWFsbG9jIGFyZWEgaXMgdG9vIGJpZywgbGltaXRpbmcgdG8gJWx1TUJcbiIsCiAJCQl2bWFsbG9jX3Jlc2VydmUgPj4gMjApOwogCX0KKwlyZXR1cm4gMDsKIH0KLV9fZWFybHlfcGFyYW0oInZtYWxsb2M9IiwgZWFybHlfdm1hbGxvYyk7CitlYXJseV9wYXJhbSgidm1hbGxvYyIsIGVhcmx5X3ZtYWxsb2MpOwogCiAjZGVmaW5lIFZNQUxMT0NfTUlOCSh2b2lkICopKFZNQUxMT0NfRU5EIC0gdm1hbGxvY19yZXNlcnZlKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9ub21tdS5jIGIvYXJjaC9hcm0vbW0vbm9tbXUuYwppbmRleCAzNzRhODMxLi45YmZlYjZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9ub21tdS5jCisrKyBiL2FyY2gvYXJtL21tL25vbW11LmMKQEAgLTc0LDYgKzc0LDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MKF9fYXJtX2lvcmVtYXBfcGZuKTsKIAordm9pZCBfX2lvbWVtICpfX2FybV9pb3JlbWFwX3Bmbl9jYWxsZXIodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJICAgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCBtdHlwZSwgdm9pZCAqY2FsbGVyKQoreworCXJldHVybiBfX2FybV9pb3JlbWFwX3BmbihwZm4sIG9mZnNldCwgc2l6ZSwgbXR5cGUpOworfQorCiB2b2lkIF9faW9tZW0gKl9fYXJtX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHNpemVfdCBzaXplLAogCQkJICAgIHVuc2lnbmVkIGludCBtdHlwZSkKIHsKQEAgLTgxLDYgKzg3LDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MKF9fYXJtX2lvcmVtYXApOwogCit2b2lkIF9faW9tZW0gKl9fYXJtX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHNpemVfdCBzaXplLAorCQkJICAgIHVuc2lnbmVkIGludCBtdHlwZSwgdm9pZCAqY2FsbGVyKQoreworCXJldHVybiBfX2FybV9pb3JlbWFwKHBoeXNfYWRkciwgc2l6ZSwgbXR5cGUpOworfQorCiB2b2lkIF9faW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCmluZGV4IDgwMTJlMjQuLjcyNTA3YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCkBAIC0yNjUsNyArMjY1LDcgQEAKICAqCiAgKiAoc2FtZSBhcyB2NHdiKQogICovCi1FTlRSWShhcm0xMDIwX2RtYV9pbnZfcmFuZ2UpCithcm0xMDIwX2RtYV9pbnZfcmFuZ2U6CiAJbW92CWlwLCAjMAogI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCiAJdHN0CXIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQpAQCAtMjk1LDcgKzI5NSw3IEBACiAgKgogICogKHNhbWUgYXMgdjR3YikKICAqLwotRU5UUlkoYXJtMTAyMF9kbWFfY2xlYW5fcmFuZ2UpCithcm0xMDIwX2RtYV9jbGVhbl9yYW5nZToKIAltb3YJaXAsICMwCiAjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKIAliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQpAQCAtMzMwLDYgKzMzMCwzMCBAQAogCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCiAJbW92CXBjLCBscgogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShhcm0xMDIwX2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJYXJtMTAyMF9kbWFfY2xlYW5fcmFuZ2UKKwliY3MJYXJtMTAyMF9kbWFfaW52X3JhbmdlCisJYglhcm0xMDIwX2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyhhcm0xMDIwX2RtYV9tYXBfYXJlYSkKKworLyoKKyAqCWRtYV91bm1hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShhcm0xMDIwX2RtYV91bm1hcF9hcmVhKQorCW1vdglwYywgbHIKK0VORFBST0MoYXJtMTAyMF9kbWFfdW5tYXBfYXJlYSkKKwogRU5UUlkoYXJtMTAyMF9jYWNoZV9mbnMpCiAJLmxvbmcJYXJtMTAyMF9mbHVzaF9rZXJuX2NhY2hlX2FsbAogCS5sb25nCWFybTEwMjBfZmx1c2hfdXNlcl9jYWNoZV9hbGwKQEAgLTMzNyw4ICszNjEsOCBAQAogCS5sb25nCWFybTEwMjBfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCWFybTEwMjBfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCWFybTEwMjBfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCWFybTEwMjBfZG1hX2ludl9yYW5nZQotCS5sb25nCWFybTEwMjBfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJYXJtMTAyMF9kbWFfbWFwX2FyZWEKKwkubG9uZwlhcm0xMDIwX2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJYXJtMTAyMF9kbWFfZmx1c2hfcmFuZ2UKIAogCS5hbGlnbgk1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKaW5kZXggNDFmZTI1ZC4uZDI3ODI5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUwpAQCAtMjU4LDcgKzI1OCw3IEBACiAgKgogICogKHNhbWUgYXMgdjR3YikKICAqLwotRU5UUlkoYXJtMTAyMGVfZG1hX2ludl9yYW5nZSkKK2FybTEwMjBlX2RtYV9pbnZfcmFuZ2U6CiAJbW92CWlwLCAjMAogI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFCiAJdHN0CXIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQpAQCAtMjg0LDcgKzI4NCw3IEBACiAgKgogICogKHNhbWUgYXMgdjR3YikKICAqLwotRU5UUlkoYXJtMTAyMGVfZG1hX2NsZWFuX3JhbmdlKQorYXJtMTAyMGVfZG1hX2NsZWFuX3JhbmdlOgogCW1vdglpcCwgIzAKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCkBAIC0zMTYsNiArMzE2LDMwIEBACiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKIAltb3YJcGMsIGxyCiAKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTEwMjBlX2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJYXJtMTAyMGVfZG1hX2NsZWFuX3JhbmdlCisJYmNzCWFybTEwMjBlX2RtYV9pbnZfcmFuZ2UKKwliCWFybTEwMjBlX2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyhhcm0xMDIwZV9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtMTAyMGVfZG1hX3VubWFwX2FyZWEpCisJbW92CXBjLCBscgorRU5EUFJPQyhhcm0xMDIwZV9kbWFfdW5tYXBfYXJlYSkKKwogRU5UUlkoYXJtMTAyMGVfY2FjaGVfZm5zKQogCS5sb25nCWFybTEwMjBlX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCiAJLmxvbmcJYXJtMTAyMGVfZmx1c2hfdXNlcl9jYWNoZV9hbGwKQEAgLTMyMyw4ICszNDcsOCBAQAogCS5sb25nCWFybTEwMjBlX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm0xMDIwZV9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJYXJtMTAyMGVfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCWFybTEwMjBlX2RtYV9pbnZfcmFuZ2UKLQkubG9uZwlhcm0xMDIwZV9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlhcm0xMDIwZV9kbWFfbWFwX2FyZWEKKwkubG9uZwlhcm0xMDIwZV9kbWFfdW5tYXBfYXJlYQogCS5sb25nCWFybTEwMjBlX2RtYV9mbHVzaF9yYW5nZQogCiAJLmFsaWduCTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKaW5kZXggMjBhNWIxYi4uY2UxM2U0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKQEAgLTI0Nyw3ICsyNDcsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKGFybTEwMjJfZG1hX2ludl9yYW5nZSkKK2FybTEwMjJfZG1hX2ludl9yYW5nZToKIAltb3YJaXAsICMwCiAjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCkBAIC0yNzMsNyArMjczLDcgQEAKICAqCiAgKiAoc2FtZSBhcyB2NHdiKQogICovCi1FTlRSWShhcm0xMDIyX2RtYV9jbGVhbl9yYW5nZSkKK2FybTEwMjJfZG1hX2NsZWFuX3JhbmdlOgogCW1vdglpcCwgIzAKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCkBAIC0zMDUsNiArMzA1LDMwIEBACiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKIAltb3YJcGMsIGxyCiAKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTEwMjJfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQlhcm0xMDIyX2RtYV9jbGVhbl9yYW5nZQorCWJjcwlhcm0xMDIyX2RtYV9pbnZfcmFuZ2UKKwliCWFybTEwMjJfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKGFybTEwMjJfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTEwMjJfZG1hX3VubWFwX2FyZWEpCisJbW92CXBjLCBscgorRU5EUFJPQyhhcm0xMDIyX2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWShhcm0xMDIyX2NhY2hlX2ZucykKIAkubG9uZwlhcm0xMDIyX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCiAJLmxvbmcJYXJtMTAyMl9mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMzEyLDggKzMzNiw4IEBACiAJLmxvbmcJYXJtMTAyMl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtMTAyMl9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJYXJtMTAyMl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJYXJtMTAyMl9kbWFfaW52X3JhbmdlCi0JLmxvbmcJYXJtMTAyMl9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlhcm0xMDIyX2RtYV9tYXBfYXJlYQorCS5sb25nCWFybTEwMjJfZG1hX3VubWFwX2FyZWEKIAkubG9uZwlhcm0xMDIyX2RtYV9mbHVzaF9yYW5nZQogCiAJLmFsaWduCTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKaW5kZXggOTZhZWRiMS4uNjM2NjcyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMKQEAgLTI0MSw3ICsyNDEsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKGFybTEwMjZfZG1hX2ludl9yYW5nZSkKK2FybTEwMjZfZG1hX2ludl9yYW5nZToKIAltb3YJaXAsICMwCiAjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCkBAIC0yNjcsNyArMjY3LDcgQEAKICAqCiAgKiAoc2FtZSBhcyB2NHdiKQogICovCi1FTlRSWShhcm0xMDI2X2RtYV9jbGVhbl9yYW5nZSkKK2FybTEwMjZfZG1hX2NsZWFuX3JhbmdlOgogCW1vdglpcCwgIzAKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRQogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCkBAIC0yOTksNiArMjk5LDMwIEBACiAJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKIAltb3YJcGMsIGxyCiAKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTEwMjZfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQlhcm0xMDI2X2RtYV9jbGVhbl9yYW5nZQorCWJjcwlhcm0xMDI2X2RtYV9pbnZfcmFuZ2UKKwliCWFybTEwMjZfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKGFybTEwMjZfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTEwMjZfZG1hX3VubWFwX2FyZWEpCisJbW92CXBjLCBscgorRU5EUFJPQyhhcm0xMDI2X2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWShhcm0xMDI2X2NhY2hlX2ZucykKIAkubG9uZwlhcm0xMDI2X2ZsdXNoX2tlcm5fY2FjaGVfYWxsCiAJLmxvbmcJYXJtMTAyNl9mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMzA2LDggKzMzMCw4IEBACiAJLmxvbmcJYXJtMTAyNl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtMTAyNl9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJYXJtMTAyNl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJYXJtMTAyNl9kbWFfaW52X3JhbmdlCi0JLmxvbmcJYXJtMTAyNl9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlhcm0xMDI2X2RtYV9tYXBfYXJlYQorCS5sb25nCWFybTEwMjZfZG1hX3VubWFwX2FyZWEKIAkubG9uZwlhcm0xMDI2X2RtYV9mbHVzaF9yYW5nZQogCiAJLmFsaWduCTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCmluZGV4IDQ3MTY2OWUuLjhiZTgxOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUwpAQCAtMjM5LDcgKzIzOSw3IEBACiAgKgogICogKHNhbWUgYXMgdjR3YikKICAqLwotRU5UUlkoYXJtOTIwX2RtYV9pbnZfcmFuZ2UpCithcm05MjBfZG1hX2ludl9yYW5nZToKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIAltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKQEAgLTI2Miw3ICsyNjIsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKGFybTkyMF9kbWFfY2xlYW5fcmFuZ2UpCithcm05MjBfZG1hX2NsZWFuX3JhbmdlOgogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CiAJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQpAQCAtMjg4LDYgKzI4OCwzMCBAQAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCiAJbW92CXBjLCBscgogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShhcm05MjBfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQlhcm05MjBfZG1hX2NsZWFuX3JhbmdlCisJYmNzCWFybTkyMF9kbWFfaW52X3JhbmdlCisJYglhcm05MjBfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKGFybTkyMF9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtOTIwX2RtYV91bm1hcF9hcmVhKQorCW1vdglwYywgbHIKK0VORFBST0MoYXJtOTIwX2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWShhcm05MjBfY2FjaGVfZm5zKQogCS5sb25nCWFybTkyMF9mbHVzaF9rZXJuX2NhY2hlX2FsbAogCS5sb25nCWFybTkyMF9mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMjk1LDggKzMxOSw4IEBACiAJLmxvbmcJYXJtOTIwX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm05MjBfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCWFybTkyMF9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJYXJtOTIwX2RtYV9pbnZfcmFuZ2UKLQkubG9uZwlhcm05MjBfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJYXJtOTIwX2RtYV9tYXBfYXJlYQorCS5sb25nCWFybTkyMF9kbWFfdW5tYXBfYXJlYQogCS5sb25nCWFybTkyMF9kbWFfZmx1c2hfcmFuZ2UKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUwppbmRleCBlZTExMWIwLi5jMGZmOGU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKQEAgLTI0MSw3ICsyNDEsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKGFybTkyMl9kbWFfaW52X3JhbmdlKQorYXJtOTIyX2RtYV9pbnZfcmFuZ2U6CiAJdHN0CXIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CkBAIC0yNjQsNyArMjY0LDcgQEAKICAqCiAgKiAoc2FtZSBhcyB2NHdiKQogICovCi1FTlRSWShhcm05MjJfZG1hX2NsZWFuX3JhbmdlKQorYXJtOTIyX2RtYV9jbGVhbl9yYW5nZToKIAliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQogCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKQEAgLTI5MCw2ICsyOTAsMzAgQEAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgogCW1vdglwYywgbHIKIAorLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtOTIyX2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJYXJtOTIyX2RtYV9jbGVhbl9yYW5nZQorCWJjcwlhcm05MjJfZG1hX2ludl9yYW5nZQorCWIJYXJtOTIyX2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyhhcm05MjJfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTkyMl9kbWFfdW5tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKGFybTkyMl9kbWFfdW5tYXBfYXJlYSkKKwogRU5UUlkoYXJtOTIyX2NhY2hlX2ZucykKIAkubG9uZwlhcm05MjJfZmx1c2hfa2Vybl9jYWNoZV9hbGwKIAkubG9uZwlhcm05MjJfZmx1c2hfdXNlcl9jYWNoZV9hbGwKQEAgLTI5Nyw4ICszMjEsOCBAQAogCS5sb25nCWFybTkyMl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtOTIyX2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwlhcm05MjJfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCWFybTkyMl9kbWFfaW52X3JhbmdlCi0JLmxvbmcJYXJtOTIyX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCWFybTkyMl9kbWFfbWFwX2FyZWEKKwkubG9uZwlhcm05MjJfZG1hX3VubWFwX2FyZWEKIAkubG9uZwlhcm05MjJfZG1hX2ZsdXNoX3JhbmdlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKaW5kZXggOGRlYjViZC4uM2M2Y2ZmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCkBAIC0yODMsNyArMjgzLDcgQEAKICAqCiAgKiAoc2FtZSBhcyB2NHdiKQogICovCi1FTlRSWShhcm05MjVfZG1hX2ludl9yYW5nZSkKK2FybTkyNV9kbWFfaW52X3JhbmdlOgogI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CkBAIC0zMDgsNyArMzA4LDcgQEAKICAqCiAgKiAoc2FtZSBhcyB2NHdiKQogICovCi1FTlRSWShhcm05MjVfZG1hX2NsZWFuX3JhbmdlKQorYXJtOTI1X2RtYV9jbGVhbl9yYW5nZToKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKQEAgLTM0MSw2ICszNDEsMzAgQEAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgogCW1vdglwYywgbHIKIAorLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtOTI1X2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJYXJtOTI1X2RtYV9jbGVhbl9yYW5nZQorCWJjcwlhcm05MjVfZG1hX2ludl9yYW5nZQorCWIJYXJtOTI1X2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyhhcm05MjVfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTkyNV9kbWFfdW5tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKGFybTkyNV9kbWFfdW5tYXBfYXJlYSkKKwogRU5UUlkoYXJtOTI1X2NhY2hlX2ZucykKIAkubG9uZwlhcm05MjVfZmx1c2hfa2Vybl9jYWNoZV9hbGwKIAkubG9uZwlhcm05MjVfZmx1c2hfdXNlcl9jYWNoZV9hbGwKQEAgLTM0OCw4ICszNzIsOCBAQAogCS5sb25nCWFybTkyNV9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtOTI1X2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwlhcm05MjVfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCWFybTkyNV9kbWFfaW52X3JhbmdlCi0JLmxvbmcJYXJtOTI1X2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCWFybTkyNV9kbWFfbWFwX2FyZWEKKwkubG9uZwlhcm05MjVfZG1hX3VubWFwX2FyZWEKIAkubG9uZwlhcm05MjVfZG1hX2ZsdXNoX3JhbmdlCiAKIEVOVFJZKGNwdV9hcm05MjVfZGNhY2hlX2NsZWFuX2FyZWEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwppbmRleCA2NGRiNmUyLi43NWI3MDdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKQEAgLTI0Niw3ICsyNDYsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKGFybTkyNl9kbWFfaW52X3JhbmdlKQorYXJtOTI2X2RtYV9pbnZfcmFuZ2U6CiAjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAogCXRzdAlyMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIAltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKQEAgLTI3MSw3ICsyNzEsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKGFybTkyNl9kbWFfY2xlYW5fcmFuZ2UpCithcm05MjZfZG1hX2NsZWFuX3JhbmdlOgogI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKIAliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQpAQCAtMzA0LDYgKzMwNCwzMCBAQAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCiAJbW92CXBjLCBscgogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShhcm05MjZfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQlhcm05MjZfZG1hX2NsZWFuX3JhbmdlCisJYmNzCWFybTkyNl9kbWFfaW52X3JhbmdlCisJYglhcm05MjZfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKGFybTkyNl9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtOTI2X2RtYV91bm1hcF9hcmVhKQorCW1vdglwYywgbHIKK0VORFBST0MoYXJtOTI2X2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWShhcm05MjZfY2FjaGVfZm5zKQogCS5sb25nCWFybTkyNl9mbHVzaF9rZXJuX2NhY2hlX2FsbAogCS5sb25nCWFybTkyNl9mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMzExLDggKzMzNSw4IEBACiAJLmxvbmcJYXJtOTI2X2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlhcm05MjZfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCWFybTkyNl9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJYXJtOTI2X2RtYV9pbnZfcmFuZ2UKLQkubG9uZwlhcm05MjZfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJYXJtOTI2X2RtYV9tYXBfYXJlYQorCS5sb25nCWFybTkyNl9kbWFfdW5tYXBfYXJlYQogCS5sb25nCWFybTkyNl9kbWFfZmx1c2hfcmFuZ2UKIAogRU5UUlkoY3B1X2FybTkyNl9kY2FjaGVfY2xlYW5fYXJlYSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0MC5TCmluZGV4IDgxOTZiOWYuLjFhZjE2NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUwpAQCAtMTcxLDcgKzE3MSw3IEBACiAgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCiAgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqLwotRU5UUlkoYXJtOTQwX2RtYV9pbnZfcmFuZ2UpCithcm05NDBfZG1hX2ludl9yYW5nZToKIAltb3YJaXAsICMwCiAJbW92CXIxLCAjKENBQ0hFX0RTRUdNRU5UUyAtIDEpIDw8IDQJQCA0IHNlZ21lbnRzCiAxOglvcnIJcjMsIHIxLCAjKENBQ0hFX0RFTlRSSUVTIC0gMSkgPDwgMjYgQCA2NCBlbnRyaWVzCkBAIC0xOTIsNyArMTkyLDcgQEAKICAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKICAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcwogICovCi1FTlRSWShhcm05NDBfZG1hX2NsZWFuX3JhbmdlKQorYXJtOTQwX2RtYV9jbGVhbl9yYW5nZToKIEVOVFJZKGNwdV9hcm05NDBfZGNhY2hlX2NsZWFuX2FyZWEpCiAJbW92CWlwLCAjMAogI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKQEAgLTIzMyw2ICsyMzMsMzAgQEAKIAltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgogCW1vdglwYywgbHIKIAorLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtOTQwX2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJYXJtOTQwX2RtYV9jbGVhbl9yYW5nZQorCWJjcwlhcm05NDBfZG1hX2ludl9yYW5nZQorCWIJYXJtOTQwX2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyhhcm05NDBfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTk0MF9kbWFfdW5tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKGFybTk0MF9kbWFfdW5tYXBfYXJlYSkKKwogRU5UUlkoYXJtOTQwX2NhY2hlX2ZucykKIAkubG9uZwlhcm05NDBfZmx1c2hfa2Vybl9jYWNoZV9hbGwKIAkubG9uZwlhcm05NDBfZmx1c2hfdXNlcl9jYWNoZV9hbGwKQEAgLTI0MCw4ICsyNjQsOCBAQAogCS5sb25nCWFybTk0MF9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtOTQwX2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwlhcm05NDBfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCWFybTk0MF9kbWFfaW52X3JhbmdlCi0JLmxvbmcJYXJtOTQwX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCWFybTk0MF9kbWFfbWFwX2FyZWEKKwkubG9uZwlhcm05NDBfZG1hX3VubWFwX2FyZWEKIAkubG9uZwlhcm05NDBfZG1hX2ZsdXNoX3JhbmdlCiAKIAlfX0lOSVQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TCmluZGV4IDlhOTUxMjMuLjE2NjRiNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUwpAQCAtMjE1LDcgKzIxNSw3IEBACiAgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqIChzYW1lIGFzIGFybTkyNikKICAqLwotRU5UUlkoYXJtOTQ2X2RtYV9pbnZfcmFuZ2UpCithcm05NDZfZG1hX2ludl9yYW5nZToKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICiAJdHN0CXIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQpAQCAtMjQwLDcgKzI0MCw3IEBACiAgKgogICogKHNhbWUgYXMgYXJtOTI2KQogICovCi1FTlRSWShhcm05NDZfZG1hX2NsZWFuX3JhbmdlKQorYXJtOTQ2X2RtYV9jbGVhbl9yYW5nZToKICNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKQEAgLTI3NSw2ICsyNzUsMzAgQEAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgogCW1vdglwYywgbHIKIAorLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoYXJtOTQ2X2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJYXJtOTQ2X2RtYV9jbGVhbl9yYW5nZQorCWJjcwlhcm05NDZfZG1hX2ludl9yYW5nZQorCWIJYXJtOTQ2X2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyhhcm05NDZfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGFybTk0Nl9kbWFfdW5tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKGFybTk0Nl9kbWFfdW5tYXBfYXJlYSkKKwogRU5UUlkoYXJtOTQ2X2NhY2hlX2ZucykKIAkubG9uZwlhcm05NDZfZmx1c2hfa2Vybl9jYWNoZV9hbGwKIAkubG9uZwlhcm05NDZfZmx1c2hfdXNlcl9jYWNoZV9hbGwKQEAgLTI4Miw4ICszMDYsOCBAQAogCS5sb25nCWFybTk0Nl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJYXJtOTQ2X2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwlhcm05NDZfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCWFybTk0Nl9kbWFfaW52X3JhbmdlCi0JLmxvbmcJYXJtOTQ2X2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCWFybTk0Nl9kbWFfbWFwX2FyZWEKKwkubG9uZwlhcm05NDZfZG1hX3VubWFwX2FyZWEKIAkubG9uZwlhcm05NDZfZG1hX2ZsdXNoX3JhbmdlCiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TCmluZGV4IGRiYzM5MzguLjUzZTYzMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMKQEAgLTI3NCw3ICsyNzQsNyBAQAogICogKHNhbWUgYXMgdjR3YikKICAqLwogCS5hbGlnbgk1Ci1FTlRSWShmZXJvY2Vvbl9kbWFfaW52X3JhbmdlKQorZmVyb2Nlb25fZG1hX2ludl9yYW5nZToKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKIAltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKQEAgLTI4OCw3ICsyODgsNyBAQAogCW1vdglwYywgbHIKIAogCS5hbGlnbgk1Ci1FTlRSWShmZXJvY2Vvbl9yYW5nZV9kbWFfaW52X3JhbmdlKQorZmVyb2Nlb25fcmFuZ2VfZG1hX2ludl9yYW5nZToKIAltcnMJcjIsIGNwc3IKIAl0c3QJcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CkBAIC0zMTQsNyArMzE0LDcgQEAKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KIAkuYWxpZ24JNQotRU5UUlkoZmVyb2Nlb25fZG1hX2NsZWFuX3JhbmdlKQorZmVyb2Nlb25fZG1hX2NsZWFuX3JhbmdlOgogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CiAJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQpAQCAtMzI0LDcgKzMyNCw3IEBACiAJbW92CXBjLCBscgogCiAJLmFsaWduCTUKLUVOVFJZKGZlcm9jZW9uX3JhbmdlX2RtYV9jbGVhbl9yYW5nZSkKK2Zlcm9jZW9uX3JhbmdlX2RtYV9jbGVhbl9yYW5nZToKIAltcnMJcjIsIGNwc3IKIAljbXAJcjEsIHIwCiAJc3VibmUJcjEsIHIxLCAjMQkJCUAgdG9wIGFkZHJlc3MgaXMgaW5jbHVzaXZlCkBAIC0zNjcsNiArMzY3LDQ0IEBACiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKIAltb3YJcGMsIGxyCiAKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGZlcm9jZW9uX2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJZmVyb2Nlb25fZG1hX2NsZWFuX3JhbmdlCisJYmNzCWZlcm9jZW9uX2RtYV9pbnZfcmFuZ2UKKwliCWZlcm9jZW9uX2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyhmZXJvY2Vvbl9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfbWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKGZlcm9jZW9uX3JhbmdlX2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJZmVyb2Nlb25fcmFuZ2VfZG1hX2NsZWFuX3JhbmdlCisJYmNzCWZlcm9jZW9uX3JhbmdlX2RtYV9pbnZfcmFuZ2UKKwliCWZlcm9jZW9uX3JhbmdlX2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyhmZXJvY2Vvbl9yYW5nZV9kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoZmVyb2Nlb25fZG1hX3VubWFwX2FyZWEpCisJbW92CXBjLCBscgorRU5EUFJPQyhmZXJvY2Vvbl9kbWFfdW5tYXBfYXJlYSkKKwogRU5UUlkoZmVyb2Nlb25fY2FjaGVfZm5zKQogCS5sb25nCWZlcm9jZW9uX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCiAJLmxvbmcJZmVyb2Nlb25fZmx1c2hfdXNlcl9jYWNoZV9hbGwKQEAgLTM3NCw4ICs0MTIsOCBAQAogCS5sb25nCWZlcm9jZW9uX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwlmZXJvY2Vvbl9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJZmVyb2Nlb25fZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCWZlcm9jZW9uX2RtYV9pbnZfcmFuZ2UKLQkubG9uZwlmZXJvY2Vvbl9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlmZXJvY2Vvbl9kbWFfbWFwX2FyZWEKKwkubG9uZwlmZXJvY2Vvbl9kbWFfdW5tYXBfYXJlYQogCS5sb25nCWZlcm9jZW9uX2RtYV9mbHVzaF9yYW5nZQogCiBFTlRSWShmZXJvY2Vvbl9yYW5nZV9jYWNoZV9mbnMpCkBAIC0zODUsOCArNDIzLDggQEAKIAkubG9uZwlmZXJvY2Vvbl9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJZmVyb2Nlb25fY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCWZlcm9jZW9uX3JhbmdlX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKLQkubG9uZwlmZXJvY2Vvbl9yYW5nZV9kbWFfaW52X3JhbmdlCi0JLmxvbmcJZmVyb2Nlb25fcmFuZ2VfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJZmVyb2Nlb25fcmFuZ2VfZG1hX21hcF9hcmVhCisJLmxvbmcJZmVyb2Nlb25fZG1hX3VubWFwX2FyZWEKIAkubG9uZwlmZXJvY2Vvbl9yYW5nZV9kbWFfZmx1c2hfcmFuZ2UKIAogCS5hbGlnbgk1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TIGIvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUwppbmRleCA5Njc0ZDM2Li5jYWEzMTE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMKQEAgLTIxOCw3ICsyMTgsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKG1vaGF3a19kbWFfaW52X3JhbmdlKQorbW9oYXdrX2RtYV9pbnZfcmFuZ2U6CiAJdHN0CXIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQogCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQogCXRzdAlyMSwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKQEAgLTI0MSw3ICsyNDEsNyBAQAogICoKICAqIChzYW1lIGFzIHY0d2IpCiAgKi8KLUVOVFJZKG1vaGF3a19kbWFfY2xlYW5fcmFuZ2UpCittb2hhd2tfZG1hX2NsZWFuX3JhbmdlOgogCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CiAJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQpAQCAtMjY4LDYgKzI2OCwzMCBAQAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCiAJbW92CXBjLCBscgogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWShtb2hhd2tfZG1hX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJY21wCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQltb2hhd2tfZG1hX2NsZWFuX3JhbmdlCisJYmNzCW1vaGF3a19kbWFfaW52X3JhbmdlCisJYgltb2hhd2tfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKG1vaGF3a19kbWFfbWFwX2FyZWEpCisKKy8qCisgKglkbWFfdW5tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkobW9oYXdrX2RtYV91bm1hcF9hcmVhKQorCW1vdglwYywgbHIKK0VORFBST0MobW9oYXdrX2RtYV91bm1hcF9hcmVhKQorCiBFTlRSWShtb2hhd2tfY2FjaGVfZm5zKQogCS5sb25nCW1vaGF3a19mbHVzaF9rZXJuX2NhY2hlX2FsbAogCS5sb25nCW1vaGF3a19mbHVzaF91c2VyX2NhY2hlX2FsbApAQCAtMjc1LDggKzI5OSw4IEBACiAJLmxvbmcJbW9oYXdrX2NvaGVyZW50X2tlcm5fcmFuZ2UKIAkubG9uZwltb2hhd2tfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCW1vaGF3a19mbHVzaF9rZXJuX2RjYWNoZV9hcmVhCi0JLmxvbmcJbW9oYXdrX2RtYV9pbnZfcmFuZ2UKLQkubG9uZwltb2hhd2tfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJbW9oYXdrX2RtYV9tYXBfYXJlYQorCS5sb25nCW1vaGF3a19kbWFfdW5tYXBfYXJlYQogCS5sb25nCW1vaGF3a19kbWFfZmx1c2hfcmFuZ2UKIAogRU5UUlkoY3B1X21vaGF3a19kY2FjaGVfY2xlYW5fYXJlYSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKaW5kZXggOGU0ZjZkYy4uZTU3OTdmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKQEAgLTI1Nyw3ICsyNTcsNyBAQAogICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKICAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqLwotRU5UUlkoeHNjM19kbWFfaW52X3JhbmdlKQoreHNjM19kbWFfaW52X3JhbmdlOgogCXRzdAlyMCwgI0NBQ0hFTElORVNJWkUgLSAxCiAJYmljCXIwLCByMCwgI0NBQ0hFTElORVNJWkUgLSAxCiAJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBMMSBEIGxpbmUKQEAgLTI3OCw3ICsyNzgsNyBAQAogICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKICAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqLwotRU5UUlkoeHNjM19kbWFfY2xlYW5fcmFuZ2UpCit4c2MzX2RtYV9jbGVhbl9yYW5nZToKIAliaWMJcjAsIHIwLCAjQ0FDSEVMSU5FU0laRSAtIDEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEwxIEQgbGluZQogCWFkZAlyMCwgcjAsICNDQUNIRUxJTkVTSVpFCkBAIC0zMDQsNiArMzA0LDMwIEBACiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZGF0YSB3cml0ZSBiYXJyaWVyCiAJbW92CXBjLCBscgogCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWSh4c2MzX2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJeHNjM19kbWFfY2xlYW5fcmFuZ2UKKwliY3MJeHNjM19kbWFfaW52X3JhbmdlCisJYgl4c2MzX2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyh4c2MzX2RtYV9tYXBfYXJlYSkKKworLyoKKyAqCWRtYV91bm1hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWSh4c2MzX2RtYV91bm1hcF9hcmVhKQorCW1vdglwYywgbHIKK0VORFBST0MoeHNjM19kbWFfdW5tYXBfYXJlYSkKKwogRU5UUlkoeHNjM19jYWNoZV9mbnMpCiAJLmxvbmcJeHNjM19mbHVzaF9rZXJuX2NhY2hlX2FsbAogCS5sb25nCXhzYzNfZmx1c2hfdXNlcl9jYWNoZV9hbGwKQEAgLTMxMSw4ICszMzUsOCBAQAogCS5sb25nCXhzYzNfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCXhzYzNfY29oZXJlbnRfdXNlcl9yYW5nZQogCS5sb25nCXhzYzNfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCXhzYzNfZG1hX2ludl9yYW5nZQotCS5sb25nCXhzYzNfZG1hX2NsZWFuX3JhbmdlCisJLmxvbmcJeHNjM19kbWFfbWFwX2FyZWEKKwkubG9uZwl4c2MzX2RtYV91bm1hcF9hcmVhCiAJLmxvbmcJeHNjM19kbWFfZmx1c2hfcmFuZ2UKIAogRU5UUlkoY3B1X3hzYzNfZGNhY2hlX2NsZWFuX2FyZWEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwppbmRleCA5M2RmNDcyLi42MzAzN2UyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKQEAgLTMxNSw3ICszMTUsNyBAQAogICoJLSBzdGFydCAgLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKICAqCS0gZW5kCSAtIHZpcnR1YWwgZW5kIGFkZHJlc3MKICAqLwotRU5UUlkoeHNjYWxlX2RtYV9pbnZfcmFuZ2UpCit4c2NhbGVfZG1hX2ludl9yYW5nZToKIAl0c3QJcjAsICNDQUNIRUxJTkVTSVpFIC0gMQogCWJpYwlyMCwgcjAsICNDQUNIRUxJTkVTSVpFIC0gMQogCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQpAQCAtMzM2LDcgKzMzNiw3IEBACiAgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcwogICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcwogICovCi1FTlRSWSh4c2NhbGVfZG1hX2NsZWFuX3JhbmdlKQoreHNjYWxlX2RtYV9jbGVhbl9yYW5nZToKIAliaWMJcjAsIHIwLCAjQ0FDSEVMSU5FU0laRSAtIDEKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKIAlhZGQJcjAsIHIwLCAjQ0FDSEVMSU5FU0laRQpAQCAtMzYzLDYgKzM2Myw0MyBAQAogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIERyYWluIFdyaXRlICgmIEZpbGwpIEJ1ZmZlcgogCW1vdglwYywgbHIKIAorLyoKKyAqCWRtYV9tYXBfYXJlYShzdGFydCwgc2l6ZSwgZGlyKQorICoJLSBzdGFydAktIGtlcm5lbCB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gc2l6ZQktIHNpemUgb2YgcmVnaW9uCisgKgktIGRpcgktIERNQSBkaXJlY3Rpb24KKyAqLworRU5UUlkoeHNjYWxlX2RtYV9tYXBfYXJlYSkKKwlhZGQJcjEsIHIxLCByMAorCWNtcAlyMiwgI0RNQV9UT19ERVZJQ0UKKwliZXEJeHNjYWxlX2RtYV9jbGVhbl9yYW5nZQorCWJjcwl4c2NhbGVfZG1hX2ludl9yYW5nZQorCWIJeHNjYWxlX2RtYV9mbHVzaF9yYW5nZQorRU5EUFJPQyh4c2NhbGVfZG1hX21hcF9hcmVhKQorCisvKgorICoJZG1hX21hcF9hcmVhKHN0YXJ0LCBzaXplLCBkaXIpCisgKgktIHN0YXJ0CS0ga2VybmVsIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBzaXplCS0gc2l6ZSBvZiByZWdpb24KKyAqCS0gZGlyCS0gRE1BIGRpcmVjdGlvbgorICovCitFTlRSWSh4c2NhbGVfZG1hX2EwX21hcF9hcmVhKQorCWFkZAlyMSwgcjEsIHIwCisJdGVxCXIyLCAjRE1BX1RPX0RFVklDRQorCWJlcQl4c2NhbGVfZG1hX2NsZWFuX3JhbmdlCisJYgl4c2NhbGVfZG1hX2ZsdXNoX3JhbmdlCitFTkRQUk9DKHhzY3NhbGVfZG1hX2EwX21hcF9hcmVhKQorCisvKgorICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKKyAqCS0gc3RhcnQJLSBrZXJuZWwgdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIHNpemUJLSBzaXplIG9mIHJlZ2lvbgorICoJLSBkaXIJLSBETUEgZGlyZWN0aW9uCisgKi8KK0VOVFJZKHhzY2FsZV9kbWFfdW5tYXBfYXJlYSkKKwltb3YJcGMsIGxyCitFTkRQUk9DKHhzY2FsZV9kbWFfdW5tYXBfYXJlYSkKKwogRU5UUlkoeHNjYWxlX2NhY2hlX2ZucykKIAkubG9uZwl4c2NhbGVfZmx1c2hfa2Vybl9jYWNoZV9hbGwKIAkubG9uZwl4c2NhbGVfZmx1c2hfdXNlcl9jYWNoZV9hbGwKQEAgLTM3MCw4ICs0MDcsOCBAQAogCS5sb25nCXhzY2FsZV9jb2hlcmVudF9rZXJuX3JhbmdlCiAJLmxvbmcJeHNjYWxlX2NvaGVyZW50X3VzZXJfcmFuZ2UKIAkubG9uZwl4c2NhbGVfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYQotCS5sb25nCXhzY2FsZV9kbWFfaW52X3JhbmdlCi0JLmxvbmcJeHNjYWxlX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCXhzY2FsZV9kbWFfbWFwX2FyZWEKKwkubG9uZwl4c2NhbGVfZG1hX3VubWFwX2FyZWEKIAkubG9uZwl4c2NhbGVfZG1hX2ZsdXNoX3JhbmdlCiAKIC8qCkBAIC0zOTQsOCArNDMxLDggQEAKIAkubG9uZwl4c2NhbGVfY29oZXJlbnRfa2Vybl9yYW5nZQogCS5sb25nCXhzY2FsZV9jb2hlcmVudF91c2VyX3JhbmdlCiAJLmxvbmcJeHNjYWxlX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEKLQkubG9uZwl4c2NhbGVfZG1hX2ZsdXNoX3JhbmdlCi0JLmxvbmcJeHNjYWxlX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCXhzY2FsZV9kbWFfYTBfbWFwX2FyZWEKKwkubG9uZwl4c2NhbGVfZG1hX3VubWFwX2FyZWEKIAkubG9uZwl4c2NhbGVfZG1hX2ZsdXNoX3JhbmdlCiAKIEVOVFJZKGNwdV94c2NhbGVfZGNhY2hlX2NsZWFuX2FyZWEpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9hcm0xMV9jb3JlLmMgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9hcm0xMV9jb3JlLmMKaW5kZXggYWQ4MDc1Mi4uZWYzZTI2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfYXJtMTFfY29yZS5jCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX2FybTExX2NvcmUuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1pbnQgYXJtMTFfcmVxdWVzdF9pbnRlcnJ1cHRzKGludCAqaXJxcywgaW50IG5yKQoraW50IGFybTExX3JlcXVlc3RfaW50ZXJydXB0cyhjb25zdCBpbnQgKmlycXMsIGludCBucikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgcmV0ID0gMDsKQEAgLTE1Myw3ICsxNTMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgYXJtMTFfcmVsZWFzZV9pbnRlcnJ1cHRzKGludCAqaXJxcywgaW50IG5yKQordm9pZCBhcm0xMV9yZWxlYXNlX2ludGVycnVwdHMoY29uc3QgaW50ICppcnFzLCBpbnQgbnIpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX2FybTExX2NvcmUuaCBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX2FybTExX2NvcmUuaAppbmRleCA2Zjg1MzhlLi4xOTAyYjk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9hcm0xMV9jb3JlLmgKKysrIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfYXJtMTFfY29yZS5oCkBAIC0zOSw3ICszOSw3IEBACiBpbnQgYXJtMTFfc2V0dXBfcG11KHZvaWQpOwogaW50IGFybTExX3N0YXJ0X3BtdSh2b2lkKTsKIGludCBhcm0xMV9zdG9wX3BtdSh2b2lkKTsKLWludCBhcm0xMV9yZXF1ZXN0X2ludGVycnVwdHMoaW50ICosIGludCk7Ci12b2lkIGFybTExX3JlbGVhc2VfaW50ZXJydXB0cyhpbnQgKiwgaW50KTsKK2ludCBhcm0xMV9yZXF1ZXN0X2ludGVycnVwdHMoY29uc3QgaW50ICosIGludCk7Cit2b2lkIGFybTExX3JlbGVhc2VfaW50ZXJydXB0cyhjb25zdCBpbnQgKiwgaW50KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF9tcGNvcmUuYyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX21wY29yZS5jCmluZGV4IDRjZTBmOTguLmY3M2NlODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX21wY29yZS5jCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX21wY29yZS5jCkBAIC0zMiw2ICszMiw3IEBACiAvKiAjZGVmaW5lIERFQlVHICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTQzLDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1lYi5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcG11Lmg+CiAKICNpbmNsdWRlICJvcF9jb3VudGVyLmgiCiAjaW5jbHVkZSAib3BfYXJtX21vZGVsLmgiCkBAIC01OCw2ICs2MCw3IEBACiAgKiBCaXRtYXNrIG9mIHVzZWQgU0NVIGNvdW50ZXJzCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2N1X2VtX3VzZWQ7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdV9pcnFzICpwbXVfaXJxczsKIAogLyoKICAqIDIgaGVscGVyIGZucyB0YWtlIGEgY291bnRlciBudW1iZXIgZnJvbSAwLTcgKG5vdCB0aGUgdXNlcnNwYWNlLXZpc2libGUgY291bnRlciBudW1iZXIpCkBAIC0yMjUsMzMgKzIyOCw0MCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFybTExX2lycXNbXSA9IHsKLQlbMF0JPSBJUlFfRUIxMU1QX1BNVV9DUFUwLAotCVsxXQk9IElSUV9FQjExTVBfUE1VX0NQVTEsCi0JWzJdCT0gSVJRX0VCMTFNUF9QTVVfQ1BVMiwKLQlbM10JPSBJUlFfRUIxMU1QX1BNVV9DUFUzCi19OwotCiBzdGF0aWMgaW50IGVtX3N0YXJ0KHZvaWQpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IGFybTExX3JlcXVlc3RfaW50ZXJydXB0cyhhcm0xMV9pcnFzLCBBUlJBWV9TSVpFKGFybTExX2lycXMpKTsKKwlwbXVfaXJxcyA9IHJlc2VydmVfcG11KCk7CisJaWYgKElTX0VSUihwbXVfaXJxcykpIHsKKwkJcmV0ID0gUFRSX0VSUihwbXVfaXJxcyk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGFybTExX3JlcXVlc3RfaW50ZXJydXB0cyhwbXVfaXJxcy0+aXJxcywgcG11X2lycXMtPm51bV9pcnFzKTsKIAlpZiAocmV0ID09IDApIHsKIAkJZW1fY2FsbF9mdW5jdGlvbihhcm0xMV9zdGFydF9wbXUpOwogCiAJCXJldCA9IHNjdV9zdGFydCgpOwotCQlpZiAocmV0KQotCQkJYXJtMTFfcmVsZWFzZV9pbnRlcnJ1cHRzKGFybTExX2lycXMsIEFSUkFZX1NJWkUoYXJtMTFfaXJxcykpOworCQlpZiAocmV0KSB7CisJCQlhcm0xMV9yZWxlYXNlX2ludGVycnVwdHMocG11X2lycXMtPmlycXMsCisJCQkJCQkgcG11X2lycXMtPm51bV9pcnFzKTsKKwkJfSBlbHNlIHsKKwkJCXJlbGVhc2VfcG11KHBtdV9pcnFzKTsKKwkJCXBtdV9pcnFzID0gTlVMTDsKKwkJfQogCX0KKworb3V0OgogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGVtX3N0b3Aodm9pZCkKIHsKIAllbV9jYWxsX2Z1bmN0aW9uKGFybTExX3N0b3BfcG11KTsKLQlhcm0xMV9yZWxlYXNlX2ludGVycnVwdHMoYXJtMTFfaXJxcywgQVJSQVlfU0laRShhcm0xMV9pcnFzKSk7CisJYXJtMTFfcmVsZWFzZV9pbnRlcnJ1cHRzKHBtdV9pcnFzLT5pcnFzLCBwbXVfaXJxcy0+bnVtX2lycXMpOwogCXNjdV9zdG9wKCk7CisJcmVsZWFzZV9wbXUocG11X2lycXMpOwogfQogCiAvKgpAQCAtMjgzLDE1ICsyOTMsNyBAQAogCWVtX3JvdXRlX2lycShJUlFfRUIxMU1QX1BNVV9TQ1U2LCAzKTsKIAllbV9yb3V0ZV9pcnEoSVJRX0VCMTFNUF9QTVVfU0NVNywgMyk7CiAKLQkvKgotCSAqIFNlbmQgQ1AxNSBQTVUgaW50ZXJydXB0cyB0byB0aGUgb3duZXIgQ1BVLgotCSAqLwotCWVtX3JvdXRlX2lycShJUlFfRUIxMU1QX1BNVV9DUFUwLCAwKTsKLQllbV9yb3V0ZV9pcnEoSVJRX0VCMTFNUF9QTVVfQ1BVMSwgMSk7Ci0JZW1fcm91dGVfaXJxKElSUV9FQjExTVBfUE1VX0NQVTIsIDIpOwotCWVtX3JvdXRlX2lycShJUlFfRUIxMU1QX1BNVV9DUFUzLCAzKTsKLQotCXJldHVybiAwOworCXJldHVybiBpbml0X3BtdSgpOwogfQogCiBzdHJ1Y3Qgb3BfYXJtX21vZGVsX3NwZWMgb3BfbXBjb3JlX3NwZWMgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ni5jIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjYuYwppbmRleCBmN2QyZWM1Li5hMjIzNTdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ni5jCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y2LmMKQEAgLTE5LDM5ICsxOSw0NyBAQAogLyogI2RlZmluZSBERUJVRyAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L29wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcG11Lmg+CiAKICNpbmNsdWRlICJvcF9jb3VudGVyLmgiCiAjaW5jbHVkZSAib3BfYXJtX21vZGVsLmgiCiAjaW5jbHVkZSAib3BfbW9kZWxfYXJtMTFfY29yZS5oIgogCi1zdGF0aWMgaW50IGlycXNbXSA9IHsKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgotCTMsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9CQ01SSU5HCi0JSVJRX1BNVUlSUSwgLyogZm9yIEJDTVJJTkcsIEFSTSBQTVUgaW50ZXJydXB0IGlzIDQzICovCi0jZW5kaWYKLX07CitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdV9pcnFzICpwbXVfaXJxczsKIAogc3RhdGljIHZvaWQgYXJtdjZfcG11X3N0b3Aodm9pZCkKIHsKIAlhcm0xMV9zdG9wX3BtdSgpOwotCWFybTExX3JlbGVhc2VfaW50ZXJydXB0cyhpcnFzLCBBUlJBWV9TSVpFKGlycXMpKTsKKwlhcm0xMV9yZWxlYXNlX2ludGVycnVwdHMocG11X2lycXMtPmlycXMsIHBtdV9pcnFzLT5udW1faXJxcyk7CisJcmVsZWFzZV9wbXUocG11X2lycXMpOworCXBtdV9pcnFzID0gTlVMTDsKIH0KIAogc3RhdGljIGludCBhcm12Nl9wbXVfc3RhcnQodm9pZCkKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gYXJtMTFfcmVxdWVzdF9pbnRlcnJ1cHRzKGlycXMsIEFSUkFZX1NJWkUoaXJxcykpOwotCWlmIChyZXQgPj0gMCkKLQkJcmV0ID0gYXJtMTFfc3RhcnRfcG11KCk7CisJcG11X2lycXMgPSByZXNlcnZlX3BtdSgpOworCWlmIChJU19FUlIocG11X2lycXMpKSB7CisJCXJldCA9IFBUUl9FUlIocG11X2lycXMpOworCQlnb3RvIG91dDsKKwl9CiAKKwlyZXQgPSBhcm0xMV9yZXF1ZXN0X2ludGVycnVwdHMocG11X2lycXMtPmlycXMsIHBtdV9pcnFzLT5udW1faXJxcyk7CisJaWYgKHJldCA+PSAwKSB7CisJCXJldCA9IGFybTExX3N0YXJ0X3BtdSgpOworCX0gZWxzZSB7CisJCXJlbGVhc2VfcG11KHBtdV9pcnFzKTsKKwkJcG11X2lycXMgPSBOVUxMOworCX0KKworb3V0OgogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y3LmMgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ny5jCmluZGV4IDIwODhhNmMuLjg2NDJkMDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y3LmMKKysrIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjcuYwpAQCAtMTEsMTEgKzExLDE0IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KIAorI2luY2x1ZGUgPGFzbS9wbXUuaD4KKwogI2luY2x1ZGUgIm9wX2NvdW50ZXIuaCIKICNpbmNsdWRlICJvcF9hcm1fbW9kZWwuaCIKICNpbmNsdWRlICJvcF9tb2RlbF92Ny5oIgpAQCAtMjk1LDcgKzI5OCw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1pbnQgYXJtdjdfcmVxdWVzdF9pbnRlcnJ1cHRzKGludCAqaXJxcywgaW50IG5yKQoraW50IGFybXY3X3JlcXVlc3RfaW50ZXJydXB0cyhjb25zdCBpbnQgKmlycXMsIGludCBucikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgcmV0ID0gMDsKQEAgLTMxOCw3ICszMjEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgYXJtdjdfcmVsZWFzZV9pbnRlcnJ1cHRzKGludCAqaXJxcywgaW50IG5yKQordm9pZCBhcm12N19yZWxlYXNlX2ludGVycnVwdHMoY29uc3QgaW50ICppcnFzLCBpbnQgbnIpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAKQEAgLTM2MiwxMiArMzY1LDcgQEAKIH0KICNlbmRpZgogCi0KLXN0YXRpYyBpbnQgaXJxc1tdID0gewotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCi0JSU5UXzM0WFhfQkVOQ0hfTVBVX0VNVUwsCi0jZW5kaWYKLX07CitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdV9pcnFzICpwbXVfaXJxczsKIAogc3RhdGljIHZvaWQgYXJtdjdfcG1uY19zdG9wKHZvaWQpCiB7CkBAIC0zNzUsMTkgKzM3MywyOSBAQAogCWFybXY3X3BtbmNfZHVtcF9yZWdzKCk7CiAjZW5kaWYKIAlhcm12N19zdG9wX3BtbmMoKTsKLQlhcm12N19yZWxlYXNlX2ludGVycnVwdHMoaXJxcywgQVJSQVlfU0laRShpcnFzKSk7CisJYXJtdjdfcmVsZWFzZV9pbnRlcnJ1cHRzKHBtdV9pcnFzLT5pcnFzLCBwbXVfaXJxcy0+bnVtX2lycXMpOworCXJlbGVhc2VfcG11KHBtdV9pcnFzKTsKKwlwbXVfaXJxcyA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgYXJtdjdfcG1uY19zdGFydCh2b2lkKQogewogCWludCByZXQ7CiAKKwlwbXVfaXJxcyA9IHJlc2VydmVfcG11KCk7CisJaWYgKElTX0VSUihwbXVfaXJxcykpCisJCXJldHVybiBQVFJfRVJSKHBtdV9pcnFzKTsKKwogI2lmZGVmIERFQlVHCiAJYXJtdjdfcG1uY19kdW1wX3JlZ3MoKTsKICNlbmRpZgotCXJldCA9IGFybXY3X3JlcXVlc3RfaW50ZXJydXB0cyhpcnFzLCBBUlJBWV9TSVpFKGlycXMpKTsKLQlpZiAocmV0ID49IDApCisJcmV0ID0gYXJtdjdfcmVxdWVzdF9pbnRlcnJ1cHRzKHBtdV9pcnFzLT5pcnFzLCBwbXVfaXJxcy0+bnVtX2lycXMpOworCWlmIChyZXQgPj0gMCkgewogCQlhcm12N19zdGFydF9wbW5jKCk7CisJfSBlbHNlIHsKKwkJcmVsZWFzZV9wbXUocG11X2lycXMpOworCQlwbXVfaXJxcyA9IE5VTEw7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y3LmggYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ny5oCmluZGV4IDBlMTliY2MuLjljYTMzNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y3LmgKKysrIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjcuaApAQCAtOTcsNyArOTcsNyBAQAogaW50IGFybXY3X3NldHVwX3BtdSh2b2lkKTsKIGludCBhcm12N19zdGFydF9wbXUodm9pZCk7CiBpbnQgYXJtdjdfc3RvcF9wbXUodm9pZCk7Ci1pbnQgYXJtdjdfcmVxdWVzdF9pbnRlcnJ1cHRzKGludCAqLCBpbnQpOwotdm9pZCBhcm12N19yZWxlYXNlX2ludGVycnVwdHMoaW50ICosIGludCk7CitpbnQgYXJtdjdfcmVxdWVzdF9pbnRlcnJ1cHRzKGNvbnN0IGludCAqLCBpbnQpOwordm9pZCBhcm12N19yZWxlYXNlX2ludGVycnVwdHMoY29uc3QgaW50ICosIGludCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfeHNjYWxlLmMgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF94c2NhbGUuYwppbmRleCA3MjRhYjljLi4xZDM0YTAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF94c2NhbGUuYworKysgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF94c2NhbGUuYwpAQCAtMTcsMTIgKzE3LDE0IEBACiAvKiAjZGVmaW5lIERFQlVHICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CisjaW5jbHVkZSA8YXNtL3BtdS5oPgogCiAjaW5jbHVkZSAib3BfY291bnRlci5oIgogI2luY2x1ZGUgIm9wX2FybV9tb2RlbC5oIgpAQCAtMzMsMTcgKzM1LDYgQEAKICNkZWZpbmUJUE1VX1JFU0VUCShDQ05UX1JFU0VUIHwgUE1OX1JFU0VUKQogI2RlZmluZSBQTVVfQ05UNjQJMHgwMDgJLyogTWFrZSBDQ05UIGNvdW50IGV2ZXJ5IDY0dGggY3ljbGUgKi8KIAotLyogVE9ETyBkbyBydW50aW1lIGRldGVjdGlvbiAqLwotI2lmZGVmIENPTkZJR19BUkNIX0lPUDMyWAotI2RlZmluZSBYU0NBTEVfUE1VX0lSUSAgSVJRX0lPUDMyWF9DT1JFX1BNVQotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfSU9QMzNYCi0jZGVmaW5lIFhTQ0FMRV9QTVVfSVJRICBJUlFfSU9QMzNYX0NPUkVfUE1VCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9QWEEKLSNkZWZpbmUgWFNDQUxFX1BNVV9JUlEgIElSUV9QTVUKLSNlbmRpZgotCiAvKgogICogRGlmZmVyZW50IHR5cGVzIG9mIGV2ZW50cyB0aGF0IGNhbiBiZSBjb3VudGVkIGJ5IHRoZSBYU2NhbGUgUE1VCiAgKiBhcyB1c2VkIGJ5IE9wcm9maWxlIHVzZXJzcGFjZS4gSGVyZSBwcmltYXJpbHkgZm9yIGRvY3VtZW50YXRpb24KQEAgLTM2Nyw2ICszNTgsOCBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBwbXVfaXJxcyAqcG11X2lycXM7CisKIHN0YXRpYyB2b2lkIHhzY2FsZV9wbXVfc3RvcCh2b2lkKQogewogCXUzMiBwbW5jID0gcmVhZF9wbW5jKCk7CkBAIC0zNzQsMjAgKzM2NywzMCBAQAogCXBtbmMgJj0gflBNVV9FTkFCTEU7CiAJd3JpdGVfcG1uYyhwbW5jKTsKIAotCWZyZWVfaXJxKFhTQ0FMRV9QTVVfSVJRLCByZXN1bHRzKTsKKwlmcmVlX2lycShwbXVfaXJxcy0+aXJxc1swXSwgcmVzdWx0cyk7CisJcmVsZWFzZV9wbXUocG11X2lycXMpOworCXBtdV9pcnFzID0gTlVMTDsKIH0KIAogc3RhdGljIGludCB4c2NhbGVfcG11X3N0YXJ0KHZvaWQpCiB7CiAJaW50IHJldDsKLQl1MzIgcG1uYyA9IHJlYWRfcG1uYygpOworCXUzMiBwbW5jOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoWFNDQUxFX1BNVV9JUlEsIHhzY2FsZV9wbXVfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAotCQkJIlhTY2FsZSBQTVUiLCAodm9pZCAqKXJlc3VsdHMpOworCXBtdV9pcnFzID0gcmVzZXJ2ZV9wbXUoKTsKKwlpZiAoSVNfRVJSKHBtdV9pcnFzKSkKKwkJcmV0dXJuIFBUUl9FUlIocG11X2lycXMpOworCisJcG1uYyA9IHJlYWRfcG1uYygpOworCisJcmV0ID0gcmVxdWVzdF9pcnEocG11X2lycXMtPmlycXNbMF0sIHhzY2FsZV9wbXVfaW50ZXJydXB0LAorCQkJICBJUlFGX0RJU0FCTEVELCAiWFNjYWxlIFBNVSIsICh2b2lkICopcmVzdWx0cyk7CiAKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIm9wcm9maWxlOiB1bmFibGUgdG8gcmVxdWVzdCBJUlElZCBmb3IgWFNjYWxlIFBNVVxuIiwKLQkJCVhTQ0FMRV9QTVVfSVJRKTsKKwkJICAgICAgIHBtdV9pcnFzLT5pcnFzWzBdKTsKKwkJcmVsZWFzZV9wbXUocG11X2lycXMpOworCQlwbXVfaXJxcyA9IE5VTEw7CiAJCXJldHVybiByZXQ7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LWlvcC9pby5jIGIvYXJjaC9hcm0vcGxhdC1pb3AvaW8uYwppbmRleCBlZDBiYmVjLi5lMTViYzE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LWlvcC9pby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtaW9wL2lvLmMKQEAgLTM0LDcgKzM0LDggQEAKIAkJcmV0dmFsID0gKHZvaWQgKikgSU9QM1hYX1BNTVJfUEhZU19UT19WSVJUKGNvb2tpZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHZhbCA9IF9fYXJtX2lvcmVtYXAoY29va2llLCBzaXplLCBtdHlwZSk7CisJCXJldHZhbCA9IF9fYXJtX2lvcmVtYXBfY2FsbGVyKGNvb2tpZSwgc2l6ZSwgbXR5cGUsCisJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAl9CiAKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZQppbmRleCA5OTZjYmFjLi42Y2VlMzhkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZQpAQCAtMTMsMyArMTMsNyBAQAogb2JqLSQoQ09ORklHX01YQ19VTFBJKSArPSB1bHBpLm8KIG9iai0kKENPTkZJR19BUkNIX01YQ19BVURNVVhfVjEpICs9IGF1ZG11eC12MS5vCiBvYmotJChDT05GSUdfQVJDSF9NWENfQVVETVVYX1YyKSArPSBhdWRtdXgtdjIubworaWZkZWYgQ09ORklHX1NORF9JTVhfU09DCitvYmoteSArPSBzc2ktZmlxLm8KK29iai15ICs9IHNzaS1maXEta3N5bS5vCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCAxNWIyYjE0Li41YTZhZTFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtNTIsNyArNTIsNyBAQAogI2RlZmluZSBVQVJUX1BBRERSCU1YQzkxMjMxX1VBUlQyX0JBU0VfQUREUgogI2RlZmluZSBVQVJUX1ZBRERSCU1YQzkxMjMxX0FJUFMxX0lPX0FERFJFU1MoTVhDOTEyMzFfVUFSVDJfQkFTRV9BRERSKQogI2VuZGlmCi0JCS5tYWNybwlhZGRydWFydCxyeAorCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCQlsZHJlcQlccngsID1VQVJUX1BBRERSCUAgcGh5c2ljYWwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCmluZGV4IDYyZDk3NjIuLjQ0MjQzYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMjEsNiArMjEsNiBAQAogI2RlZmluZSBfX0FTTV9BUkNIX01YQ19WTUFMTE9DX0hfXwogCiAvKiB2bWFsbG9jIGVuZGluZyBhZGRyZXNzICovCi0jZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIDB4RjQwMDAwMDAKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgMHhmNDAwMDAwMFVMCiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19WTUFMTE9DX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvc3NpLWZpcS1rc3ltLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9zc2ktZmlxLWtzeW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWZhZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvc3NpLWZpcS1rc3ltLmMKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIEV4cG9ydGVkIGtzeW1zIGZvciB0aGUgU1NJIEZJUSBoYW5kbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxtYWNoL3NzaS5oPgorCitFWFBPUlRfU1lNQk9MKGlteF9zc2lfZmlxX3R4X2J1ZmZlcik7CitFWFBPUlRfU1lNQk9MKGlteF9zc2lfZmlxX3J4X2J1ZmZlcik7CitFWFBPUlRfU1lNQk9MKGlteF9zc2lfZmlxX3N0YXJ0KTsKK0VYUE9SVF9TWU1CT0woaW14X3NzaV9maXFfZW5kKTsKK0VYUE9SVF9TWU1CT0woaW14X3NzaV9maXFfYmFzZSk7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3NzaS1maXEuUyBiL2FyY2gvYXJtL3BsYXQtbXhjL3NzaS1maXEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGRjZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvc3NpLWZpcS5TCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOSBTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKworLyoKKyAqIHI4ICA9IGJpdCAwLTE1OiB0eCBvZmZzZXQsIGJpdCAxNi0zMTogdHggYnVmZmVyIHNpemUKKyAqIHI5ICA9IGJpdCAwLTE1OiByeCBvZmZzZXQsIGJpdCAxNi0zMTogcnggYnVmZmVyIHNpemUKKyAqLworCisjZGVmaW5lIFNTSV9TVFgwCTB4MDAKKyNkZWZpbmUgU1NJX1NSWDAJMHgwOAorI2RlZmluZSBTU0lfU0lTUgkweDE0CisjZGVmaW5lIFNTSV9TSUVSCTB4MTgKKyNkZWZpbmUgU1NJX1NBQ05UCTB4MzgKKworI2RlZmluZSBTU0lfU0FDTlRfQUM5N0VOCSgxIDw8IDApCisKKyNkZWZpbmUgU1NJX1NJRVJfVEZFMF9FTgkoMSA8PCAwKQorI2RlZmluZSBTU0lfU0lTUl9URkUwCQkoMSA8PCAwKQorI2RlZmluZSBTU0lfU0lTUl9SRkYwCQkoMSA8PCAyKQorI2RlZmluZSBTU0lfU0lFUl9SRkYwX0VOCSgxIDw8IDIpCisKKwkJLnRleHQKKwkJLmdsb2JhbAlpbXhfc3NpX2ZpcV9zdGFydAorCQkuZ2xvYmFsCWlteF9zc2lfZmlxX2VuZAorCQkuZ2xvYmFsIGlteF9zc2lfZmlxX2Jhc2UKKwkJLmdsb2JhbCBpbXhfc3NpX2ZpcV9yeF9idWZmZXIKKwkJLmdsb2JhbCBpbXhfc3NpX2ZpcV90eF9idWZmZXIKKworaW14X3NzaV9maXFfc3RhcnQ6CisJCWxkciByMTIsIGlteF9zc2lfZmlxX2Jhc2UKKworCQkvKiBUWCAqLworCQlsZHIgcjExLCBpbXhfc3NpX2ZpcV90eF9idWZmZXIKKworCQkvKiBzaGFsbCB3ZSBzZW5kPyAqLworCQlsZHIgcjEzLCBbcjEyLCAjU1NJX1NJRVJdCisJCXRzdCByMTMsICNTU0lfU0lFUl9URkUwX0VOCisJCWJlcSAxZgorCisJCS8qIFRYIEZJRk8gZW1wdHk/ICovCisJCWxkciByMTMsIFtyMTIsICNTU0lfU0lTUl0KKwkJdHN0IHIxMywgI1NTSV9TSVNSX1RGRTAKKwkJYmVxIDFmCisKKwkJbW92IHIxMCwgIzB4MTAwMDAKKwkJc3ViIHIxMCwgIzEKKwkJYW5kIHIxMCwgcjEwLCByOAkvKiByMTA6IGN1cnJlbnQgYnVmZmVyIG9mZnNldCAqLworCisJCWFkZCByMTEsIHIxMSwgcjEwCisKKwkJbGRyaCByMTMsIFtyMTFdCisJCXN0cmggcjEzLCBbcjEyLCAjU1NJX1NUWDBdCisKKwkJbGRyaCByMTMsIFtyMTEsICMyXQorCQlzdHJoIHIxMywgW3IxMiwgI1NTSV9TVFgwXQorCisJCWxkcmggcjEzLCBbcjExLCAjNF0KKwkJc3RyaCByMTMsIFtyMTIsICNTU0lfU1RYMF0KKworCQlsZHJoIHIxMywgW3IxMSwgIzZdCisJCXN0cmggcjEzLCBbcjEyLCAjU1NJX1NUWDBdCisKKwkJYWRkIHIxMCwgIzgKKwkJbHNyIHIxMywgcjgsICMxNgkvKiByMTM6IGJ1ZmZlciBzaXplICovCisJCWNtcCByMTAsIHIxMworCQlsc2xndCByOCwgcjEzLCAjMTYKKwkJYWRkbGUgcjgsICM4CisxOgorCQkvKiBSWCAqLworCisJCS8qIHNoYWxsIHdlIHJlY2VpdmU/ICovCisJCWxkciByMTMsIFtyMTIsICNTU0lfU0lFUl0KKwkJdHN0IHIxMywgI1NTSV9TSUVSX1JGRjBfRU4KKwkJYmVxIDFmCisKKwkJLyogUlggRklGTyBmdWxsPyAqLworCQlsZHIgcjEzLCBbcjEyLCAjU1NJX1NJU1JdCisJCXRzdCByMTMsICNTU0lfU0lTUl9SRkYwCisJCWJlcSAxZgorCisJCWxkciByMTEsIGlteF9zc2lfZmlxX3J4X2J1ZmZlcgorCisJCW1vdiByMTAsICMweDEwMDAwCisJCXN1YiByMTAsICMxCisJCWFuZCByMTAsIHIxMCwgcjkJLyogcjEwOiBjdXJyZW50IGJ1ZmZlciBvZmZzZXQgKi8KKworCQlhZGQgcjExLCByMTEsIHIxMAorCisJCWxkciByMTMsIFtyMTIsICNTU0lfU0FDTlRdCisJCXRzdCByMTMsICNTU0lfU0FDTlRfQUM5N0VOCisKKwkJbGRyIHIxMywgW3IxMiwgI1NTSV9TUlgwXQorCQlzdHJoIHIxMywgW3IxMV0KKworCQlsZHIgcjEzLCBbcjEyLCAjU1NJX1NSWDBdCisJCXN0cmggcjEzLCBbcjExLCAjMl0KKworCQkvKiBkdW1teSByZWFkIHRvIHNraXAgc2xvdCAxMiAqLworCQlsZHJuZSByMTMsIFtyMTIsICNTU0lfU1JYMF0KKworCQlsZHIgcjEzLCBbcjEyLCAjU1NJX1NSWDBdCisJCXN0cmggcjEzLCBbcjExLCAjNF0KKworCQlsZHIgcjEzLCBbcjEyLCAjU1NJX1NSWDBdCisJCXN0cmggcjEzLCBbcjExLCAjNl0KKworCQkvKiBkdW1teSByZWFkIHRvIHNraXAgc2xvdCAxMiAqLworCQlsZHJuZSByMTMsIFtyMTIsICNTU0lfU1JYMF0KKworCQlhZGQgcjEwLCAjOAorCQlsc3IgcjEzLCByOSwgIzE2CS8qIHIxMzogYnVmZmVyIHNpemUgKi8KKwkJY21wIHIxMCwgcjEzCisJCWxzbGd0IHI5LCByMTMsICMxNgorCQlhZGRsZSByOSwgIzgKKworMToKKwkJQCByZXR1cm4gZnJvbSBGSVEKKwkJc3VicwlwYywgbHIsICM0CitpbXhfc3NpX2ZpcV9iYXNlOgorCQkud29yZCAweDAKK2lteF9zc2lfZmlxX3J4X2J1ZmZlcjoKKwkJLndvcmQgMHgwCitpbXhfc3NpX2ZpcV90eF9idWZmZXI6CisJCS53b3JkIDB4MAoraW14X3NzaV9maXFfZW5kOgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L2kyYy5oIGIvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9pMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjIxZGI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9pMmMuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFNULUVyaWNzc29uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19QTEFUX0kyQ19ICisjZGVmaW5lIF9fUExBVF9JMkNfSAorCitlbnVtIGkyY19mcmVxX21vZGUgeworCUkyQ19GUkVRX01PREVfU1RBTkRBUkQsCQkvKiB1cCB0byAxMDAgS2IvcyAqLworCUkyQ19GUkVRX01PREVfRkFTVCwJCS8qIHVwIHRvIDQwMCBLYi9zICovCisJSTJDX0ZSRVFfTU9ERV9GQVNUX1BMVVMsCS8qIHVwIHRvIDEgTWIvcyAqLworCUkyQ19GUkVRX01PREVfSElHSF9TUEVFRAkvKiB1cCB0byAzLjQgTWIvcyAqLworfTsKKworLyoqCisgKiBzdHJ1Y3Qgbm1rX2kyY19jb250cm9sbGVyIC0gY2xpZW50IHNwZWNpZmljIGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbgorICogQGNsa19mcmVxOgljbG9jayBmcmVxdWVuY3kgZm9yIHRoZSBvcGVyYXRpb24gbW9kZQorICogQHNsc3U6CVNsYXZlIGRhdGEgc2V0dXAgdGltZSBpbiBucy4KKyAqCQlUaGUgbmVlZGVkIHNldHVwIHRpbWUgZm9yIHRocmVlIG1vZGVzIG9mIG9wZXJhdGlvbgorICoJCWFyZSAyNTBucywgMTAwbnMgYW5kIDEwbnMgcmVzcGVjdGl2ZWx5IHRodXMgbGVhZGluZworICoJCXRvIHRoZSB2YWx1ZXMgb2YgMTQsIDYsIDIgZm9yIGEgNDggTUh6IGkyYyBjbGsKKyAqIEB0ZnQ6CVR4IEZJRk8gVGhyZXNob2xkIGluIGJ5dGVzCisgKiBAcmZ0OglSeCBGSUZPIFRocmVzaG9sZCBpbiBieXRlcworICogQHNtOgkJc3BlZWQgbW9kZQorICovCitzdHJ1Y3Qgbm1rX2kyY19jb250cm9sbGVyIHsKKwl1bnNpZ25lZCBsb25nCWNsa19mcmVxOworCXVuc2lnbmVkIHNob3J0CXNsc3U7CisJdW5zaWduZWQgY2hhciAJdGZ0OworCXVuc2lnbmVkIGNoYXIgCXJmdDsKKwllbnVtIGkyY19mcmVxX21vZGUJc207Cit9OworCisjZW5kaWYJLyogX19QTEFUX0kyQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCmluZGV4IGUyZWEwNGEuLjJlM2VlYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCkBAIC0yMiw2ICsyMiw3IEBACiAJYm9vbCAiVEkgT01BUDMiCiAJc2VsZWN0IENQVV9WNwogCXNlbGVjdCBDT01NT05fQ0xLREVWCisJc2VsZWN0IEFSTV9MMV9DQUNIRV9TSElGVF82CiAKIGNvbmZpZyBBUkNIX09NQVA0CiAJYm9vbCAiVEkgT01BUDQiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXA0NHh4LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXA0NHh4LmgKaW5kZXggZWY4NzBkZS4uYzdkNjI4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwNDR4eC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcDQ0eHguaApAQCAtNDAsNiArNDAsNyBAQAogI2RlZmluZSBPTUFQNDRYWF9HSUNfQ1BVX0JBU0UJCTB4NDgyNDAxMDAKICNkZWZpbmUgT01BUDQ0WFhfU0NVX0JBU0UJCTB4NDgyNDAwMDAKICNkZWZpbmUgT01BUDQ0WFhfTE9DQUxfVFdEX0JBU0UJCTB4NDgyNDA2MDAKKyNkZWZpbmUgT01BUDQ0WFhfTDJDQUNIRV9CQVNFCQkweDQ4MjQyMDAwCiAjZGVmaW5lIE9NQVA0NFhYX1dLVVBHRU5fQkFTRQkJMHg0ODI4MTAwMAogCiAjZGVmaW5lIE9NQVA0NFhYX01BSUxCT1hfQkFTRQkJKEw0XzQ0WFhfQkFTRSArIDB4RjQwMDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW8uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pby5jCmluZGV4IDBjZmQ1NGYuLjRjYmQ0ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pby5jCkBAIC0xMjgsNyArMTI4LDcgQEAKIAkJCXJldHVybiBYTEFURShwLCBMNF9FTVVfNDRYWF9QSFlTLCBMNF9FTVVfNDRYWF9WSVJUKTsKIAl9CiAjZW5kaWYKLQlyZXR1cm4gX19hcm1faW9yZW1hcChwLCBzaXplLCB0eXBlKTsKKwlyZXR1cm4gX19hcm1faW9yZW1hcF9jYWxsZXIocCwgc2l6ZSwgdHlwZSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9pb3JlbWFwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggYmZkMmNhNi4uMjk5ZDk1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0xNSw2ICsxNSw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfVk1BTExPQ19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfVk1BTExPQ19ICiAKLSNkZWZpbmUgVk1BTExPQ19FTkQJICAoMHhFMDAwMDAwMCkKKyNkZWZpbmUgVk1BTExPQ19FTkQJICAoMHhlMDAwMDAwMFVMKQogCiAjZW5kaWYgLyogX19BU01fQVJDSF9WTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvY2xvY2suYwppbmRleCA1ZDJmMTlhLi5lNTkzYTJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9jbG9jay5jCkBAIC0xMTI2LDkgKzExMjYsOCBAQAogCQkJaWYgKG9wcyAmJiBvcHMtPnNldF9wYXJlbnQpCiAJCQkJb3BzLT5zZXRfcGFyZW50KGNsLT5jbGssIGNsLT5jbGstPnBhcmVudCk7CiAJCX0KLQotCQljbGtkZXZfYWRkKGNsKTsKIAl9CisJY2xrZGV2X2FkZF90YWJsZShvbmNoaXBfY2xrcywgQVJSQVlfU0laRShvbmNoaXBfY2xrcykpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBmYjNiOTY5Li4xYjkzNDhiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTE2LDcgKzE2LDcgQEAKICAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAogICovCiAKLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAJCW1vdmVxCVxyeCwgIzB4ODAwMDAwMDAJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAppbmRleCA1NDFiODgwLi45NDNjMWEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC05LDQgKzksNCBAQAogICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCiAgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKICAqLwotI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoMHhGMDAwMDAwMCkKKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgMHhmMDAwMDAwMFVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKaW5kZXggYTYzYzRiZS4uN2YzZjU5ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwpAQCAtNDMzLDcgKzQzMywxMSBAQAogICogc2F2ZWQgb25lLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIHB0cmFjZSBtZWNoYW5pc20uCiAgKi8KICNpZmRlZiBDT05GSUdfU01QCi12b2lkIHZmcF9zeW5jX3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQordm9pZCB2ZnBfc3luY19od3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQoreworfQorCit2b2lkIHZmcF9mbHVzaF9od3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQogewogCS8qCiAJICogT24gU01QIHN5c3RlbXMsIHRoZSBWRlAgc3RhdGUgaXMgYXV0b21hdGljYWxseSBzYXZlZCBhdCBldmVyeQpAQCAtNDQ0LDM1ICs0NDgsNDggQEAKIAl0aHJlYWQtPnZmcHN0YXRlLmhhcmQuY3B1ID0gTlJfQ1BVUzsKIH0KICNlbHNlCi12b2lkIHZmcF9zeW5jX3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQordm9pZCB2ZnBfc3luY19od3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQogewogCXVuc2lnbmVkIGludCBjcHUgPSBnZXRfY3B1KCk7Ci0JdTMyIGZwZXhjID0gZm1yeChGUEVYQyk7CiAKIAkvKgotCSAqIElmIFZGUCBpcyBlbmFibGVkLCB0aGUgcHJldmlvdXMgc3RhdGUgd2FzIGFscmVhZHkgc2F2ZWQgYW5kCi0JICogbGFzdF9WRlBfY29udGV4dCB1cGRhdGVkLgorCSAqIElmIHRoZSB0aHJlYWQgd2UncmUgaW50ZXJlc3RlZCBpbiBpcyB0aGUgY3VycmVudCBvd25lciBvZiB0aGUKKwkgKiBoYXJkd2FyZSBWRlAgc3RhdGUsIHRoZW4gd2UgbmVlZCB0byBzYXZlIGl0cyBzdGF0ZS4KIAkgKi8KLQlpZiAoZnBleGMgJiBGUEVYQ19FTikKLQkJZ290byBvdXQ7CisJaWYgKGxhc3RfVkZQX2NvbnRleHRbY3B1XSA9PSAmdGhyZWFkLT52ZnBzdGF0ZSkgeworCQl1MzIgZnBleGMgPSBmbXJ4KEZQRVhDKTsKIAotCWlmICghbGFzdF9WRlBfY29udGV4dFtjcHVdKQotCQlnb3RvIG91dDsKKwkJLyoKKwkJICogU2F2ZSB0aGUgbGFzdCBWRlAgc3RhdGUgb24gdGhpcyBDUFUuCisJCSAqLworCQlmbXhyKEZQRVhDLCBmcGV4YyB8IEZQRVhDX0VOKTsKKwkJdmZwX3NhdmVfc3RhdGUoJnRocmVhZC0+dmZwc3RhdGUsIGZwZXhjIHwgRlBFWENfRU4pOworCQlmbXhyKEZQRVhDLCBmcGV4Yyk7CisJfQorCisJcHV0X2NwdSgpOworfQorCit2b2lkIHZmcF9mbHVzaF9od3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQoreworCXVuc2lnbmVkIGludCBjcHUgPSBnZXRfY3B1KCk7CiAKIAkvKgotCSAqIFNhdmUgdGhlIGxhc3QgVkZQIHN0YXRlIG9uIHRoaXMgQ1BVLgorCSAqIElmIHRoZSB0aHJlYWQgd2UncmUgaW50ZXJlc3RlZCBpbiBpcyB0aGUgY3VycmVudCBvd25lciBvZiB0aGUKKwkgKiBoYXJkd2FyZSBWRlAgc3RhdGUsIHRoZW4gd2UgbmVlZCB0byBzYXZlIGl0cyBzdGF0ZS4KIAkgKi8KLQlmbXhyKEZQRVhDLCBmcGV4YyB8IEZQRVhDX0VOKTsKLQl2ZnBfc2F2ZV9zdGF0ZShsYXN0X1ZGUF9jb250ZXh0W2NwdV0sIGZwZXhjKTsKLQlmbXhyKEZQRVhDLCBmcGV4Yyk7CisJaWYgKGxhc3RfVkZQX2NvbnRleHRbY3B1XSA9PSAmdGhyZWFkLT52ZnBzdGF0ZSkgeworCQl1MzIgZnBleGMgPSBmbXJ4KEZQRVhDKTsKIAotCS8qCi0JICogU2V0IHRoZSBjb250ZXh0IHRvIE5VTEwgdG8gZm9yY2UgYSByZWxvYWQgdGhlIG5leHQgdGltZSB0aGUgdGhyZWFkCi0JICogdXNlcyB0aGUgVkZQLgotCSAqLwotCWxhc3RfVkZQX2NvbnRleHRbY3B1XSA9IE5VTEw7CisJCWZteHIoRlBFWEMsIGZwZXhjICYgfkZQRVhDX0VOKTsKIAotb3V0OgorCQkvKgorCQkgKiBTZXQgdGhlIGNvbnRleHQgdG8gTlVMTCB0byBmb3JjZSBhIHJlbG9hZCB0aGUgbmV4dCB0aW1lCisJCSAqIHRoZSB0aHJlYWQgdXNlcyB0aGUgVkZQLgorCQkgKi8KKwkJbGFzdF9WRlBfY29udGV4dFtjcHVdID0gTlVMTDsKKwl9CisKIAlwdXRfY3B1KCk7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZmVjZGRhMS4uYTlhZTMwYyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTMyNSw3ICszMjUsNyBAQAogCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CiBleHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpOworCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKTsKIAogLyoKICAqIEVuY29kZSBhbmQgZGVjb2RlIGEgc3dhcCBlbnRyeQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tbS90bGIuYyBiL2FyY2gvYXZyMzIvbW0vdGxiLmMKaW5kZXggMDY2NzdiZS4uMGRhMjMxMCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tbS90bGIuYworKysgYi9hcmNoL2F2cjMyL21tL3RsYi5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIH0KIAogdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKKwkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xMTAsNyArMTEwLDcgQEAKIAkJcmV0dXJuOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXVwZGF0ZV9kdGxiKGFkZHJlc3MsIHB0ZSk7CisJdXBkYXRlX2R0bGIoYWRkcmVzcywgKnB0ZXApOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9pcnEuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvaXJxLmMKaW5kZXggNWQ3NWY3Ny4uMWE2MWVmYyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2lycS5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjcmlzdjEwX2lycV90eXBlID0gewotCS50eXBlbmFtZSA9ICAgICJDUklTdjEwIiwKKwkubmFtZSA9ICAgICAgICAiQ1JJU3YxMCIsCiAJLnN0YXJ0dXAgPSAgICAgc3RhcnR1cF9jcmlzdjEwX2lycSwKIAkuc2h1dGRvd24gPSAgICBzaHV0ZG93bl9jcmlzdjEwX2lycSwKIAkuZW5hYmxlID0gICAgICBlbmFibGVfY3Jpc3YxMF9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2kvYmlvcy5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNpL2Jpb3MuYwppbmRleCA3N2VlMzE5Li5kNGI5YzM2IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2kvYmlvcy5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjaS9iaW9zLmMKQEAgLTQxLDE4ICs0MSwxNiBAQAogCXJldHVybiAwOwogfQogCi12b2lkCi1wY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorcmVzb3VyY2Vfc2l6ZV90CitwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkgICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKLQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKKwlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OwogCi0JCWlmIChzdGFydCAmIDB4MzAwKSB7Ci0JCQlzdGFydCA9IChzdGFydCArIDB4M2ZmKSAmIH4weDNmZjsKLQkJCXJlcy0+c3RhcnQgPSBzdGFydDsKLQkJfQotCX0KKwlpZiAoKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSAmJiAoc3RhcnQgJiAweDMwMCkpCisJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOworCisJcmV0dXJuIHN0YXJ0CiB9CiAKIGludCBwY2liaW9zX2VuYWJsZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG1hc2spCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2lycS5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9pcnEuYwppbmRleCA1NzY2OGRiLi5iNjI0MTE5IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2lycS5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaXJxLmMKQEAgLTMzNiw3ICszMzYsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNyaXN2MzJfaXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lID0gICAgIkNSSVN2MzIiLAorCS5uYW1lID0gICAgICAgICJDUklTdjMyIiwKIAkuc3RhcnR1cCA9ICAgICBzdGFydHVwX2NyaXN2MzJfaXJxLAogCS5zaHV0ZG93biA9ICAgIHNodXRkb3duX2NyaXN2MzJfaXJxLAogCS5lbmFibGUgPSAgICAgIGVuYWJsZV9jcmlzdjMyX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcGlubXV4LmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3Bpbm11eC5jCmluZGV4IDZlYjU0ZWEuLmY2ZjM2MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcGlubXV4LmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9waW5tdXguYwpAQCAtNTQsNyArNTQsNyBAQAogCiAJY3Jpc3YzMl9waW5tdXhfaW5pdCgpOwogCi0JaWYgKHBvcnQgPiBQT1JUUykKKwlpZiAocG9ydCA+IFBPUlRTIHx8IHBvcnQgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwaW5tdXhfbG9jaywgZmxhZ3MpOwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAKIAljcmlzdjMyX3Bpbm11eF9pbml0KCk7CiAKLQlpZiAocG9ydCA+IFBPUlRTKQorCWlmIChwb3J0ID4gUE9SVFMgfHwgcG9ydCA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBpbm11eF9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9waW5tdXguYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL3Bpbm11eC5jCmluZGV4IDBhMjhjOWIuLjE4NjQ4ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL3Bpbm11eC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL3Bpbm11eC5jCkBAIC0yNDIsNyArMjQyLDcgQEAKIAogCWNyaXN2MzJfcGlubXV4X2luaXQoKTsKIAotCWlmIChwb3J0ID4gUE9SVFMpCisJaWYgKHBvcnQgPiBQT1JUUyB8fCBwb3J0IDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGlubXV4X2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL3Bpbm11eC5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvcGlubXV4LmMKaW5kZXggZDcyMmFkOS4uMzhmMjllZSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvcGlubXV4LmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvcGlubXV4LmMKQEAgLTU0LDcgKzU0LDcgQEAKIAogCWNyaXN2MzJfcGlubXV4X2luaXQoKTsKIAotCWlmIChwb3J0ID4gUE9SVFMpCisJaWYgKHBvcnQgPiBQT1JUUyB8fCBwb3J0IDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGlubXV4X2xvY2ssIGZsYWdzKTsKQEAgLTE5NSw3ICsxOTUsNyBAQAogCiAJY3Jpc3YzMl9waW5tdXhfaW5pdCgpOwogCi0JaWYgKHBvcnQgPiBQT1JUUykKKwlpZiAocG9ydCA+IFBPUlRTIHx8IHBvcnQgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwaW5tdXhfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMWZjY2UwMC4uOTllYTZjZCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yNzAsNyArMjcwLDcgQEAKICAqIEFjdHVhbGx5IEkgYW0gbm90IHN1cmUgb24gd2hhdCB0aGlzIGNvdWxkIGJlIHVzZWQgZm9yLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsCi0JdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpCisJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYyBiL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKaW5kZXggYjVjZTA3Mi4uNmQ3YjllZCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2NyaXMva2VybmVsL2lycS5jCkBAIC02Myw3ICs2Myw3IEBACiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogI2VuZGlmCi0JCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOworCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIAogCQlmb3IgKGFjdGlvbj1hY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDIyYzYwNjkuLmMxOGIwZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTUwNSw3ICs1MDUsNyBAQAogLyoKICAqIHByZWxvYWQgaW5mb3JtYXRpb24gYWJvdXQgYSBuZXdseSBpbnN0YW50aWF0ZWQgUFRFIGludG8gdGhlIFNDUjAvU0NSMSBQR0UgY2FjaGUKICAqLwotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJdW5zaWduZWQgbG9uZyBhbXByOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuYyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmMKaW5kZXggNTY2YmRlYi4uMWVkMTVkNyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuYworKysgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5jCkBAIC0zMiwxOCArMzIsMTYgQEAKICAqIGJ1dCB3ZSB3YW50IHRvIHRyeSB0byBhdm9pZCBhbGxvY2F0aW5nIGF0IDB4MjkwMC0weDJiZmYKICAqIHdoaWNoIG1pZ2h0IGhhdmUgYmUgbWlycm9yZWQgYXQgMHgwMTAwLTB4MDNmZi4uCiAgKi8KLXZvaWQKLXBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCityZXNvdXJjZV9zaXplX3QKK3BjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCSAgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewotCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewotCQlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OworCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKLQkJaWYgKHN0YXJ0ICYgMHgzMDApIHsKLQkJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwotCQkJcmVzLT5zdGFydCA9IHN0YXJ0OwotCQl9Ci0JfQorCWlmICgocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pICYmIChzdGFydCAmIDB4MzAwKSkKKwkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7CisKKwlyZXR1cm4gc3RhcnQKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL21tL21lbW9yeS5jIGIvYXJjaC9oODMwMC9tbS9tZW1vcnkuYwppbmRleCBjY2Q2YWRlLi40MGQ4YWE4IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL21tL21lbW9yeS5jCisrKyBiL2FyY2gvaDgzMDAvbW0vbWVtb3J5LmMKQEAgLTQ0LDggKzQ0LDggQEAKIHsKIH0KIAotLyogTWFwIHNvbWUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBpbnRvIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4gVGhlCi0gKiBjb2RlIGlzIGNvcGllZCBhbmQgYWRhcHRlZCBmcm9tIG1hcF9jaHVuaygpLgorLyoKKyAqIE1hcCBzb21lIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UuCiAgKi8KIAogdW5zaWduZWQgbG9uZyBrZXJuZWxfbWFwKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oCmluZGV4IGQzYjQ4MzAuLjIxYWRiZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2FjcGkuaApAQCAtOTgsNiArOTgsNyBAQAogI2VuZGlmCiAjZGVmaW5lIGFjcGlfcHJvY2Vzc29yX2NzdGF0ZV9jaGVjayh4KSAoeCkgLyogbm8gaWRsZSBsaW1pdHMgb24gSUE2NCA6KSAqLwogc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfYWNwaSh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfYWNwaV9jcnNfcXVpcmtzKHZvaWQpIHsgfQogCiAjaWZkZWYgQ09ORklHX0lBNjRfR0VORVJJQwogY29uc3QgY2hhciAqYWNwaV9nZXRfc3lzbmFtZSAodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA2OWJmMTM4Li5jMzI4NmY0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCXJldHVybiBwdGVfdmFsKGEpID09IHB0ZV92YWwoYik7CiB9CiAKLSNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIHB0ZSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlcCkgZG8geyB9IHdoaWxlICgwKQogCiBleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXTsKIGV4dGVybiB2b2lkIHBhZ2luZ19pbml0ICh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggOWFkYWM0NC4uNzAyNmIyOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTg3MCw3ICs4NzAsNyBAQAogCQlyZXR1cm4gMTsKIAogc3NfcHJvYmU6Ci0jaWYgIWRlZmluZWQoQ09ORklHX1BSRUVNUFQpIHx8IGRlZmluZWQoQ09ORklHX0ZSRUVaRVIpCisjaWYgIWRlZmluZWQoQ09ORklHX1BSRUVNUFQpCiAJaWYgKHAtPmFpbnNuLmluc3RfZmxhZyA9PSBJTlNUX0ZMQUdfQk9PU1RBQkxFICYmICFwLT5wb3N0X2hhbmRsZXIpIHsKIAkJLyogQm9vc3QgdXAgLS0gd2UgY2FuIGV4ZWN1dGUgY29waWVkIGluc3RydWN0aW9ucyBkaXJlY3RseSAqLwogCQlpYTY0X3BzcihyZWdzKS0+cmkgPSBwLT5haW5zbi5zbG90OwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMgYi9hcmNoL2lhNjQva2VybmVsL3RpbWUuYwppbmRleCBhMzVjNjYxLi40N2ExOTI3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3RpbWUuYwpAQCAtNjEsNyArNjEsNyBAQAogCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCiBzdGF0aWMgdm9pZAotcGFyYXZpcnRfY2xvY2tzb3VyY2VfcmVzdW1lKHZvaWQpCitwYXJhdmlydF9jbG9ja3NvdXJjZV9yZXN1bWUoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKIAlpZiAocHZfdGltZV9vcHMuY2xvY2tzb3VyY2VfcmVzdW1lKQogCQlwdl90aW1lX29wcy5jbG9ja3NvdXJjZV9yZXN1bWUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9wY2kvcGNpLmMgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCmluZGV4IGRmNjM5ZGI3Li42NGFmZjUyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvcGNpL3BjaS5jCisrKyBiL2FyY2gvaWE2NC9wY2kvcGNpLmMKQEAgLTMyMCw5ICszMjAsOSBAQAogc3RhdGljIHZvaWQgX19kZXZpbml0CiBwY2liaW9zX3NldHVwX3Jvb3Rfd2luZG93cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmN0cmwpCiB7Ci0JaW50IGksIGo7CisJaW50IGk7CiAKLQlqID0gMDsKKwlwY2lfYnVzX3JlbW92ZV9yZXNvdXJjZXMoYnVzKTsKIAlmb3IgKGkgPSAwOyBpIDwgY3RybC0+d2luZG93czsgaSsrKSB7CiAJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJmN0cmwtPndpbmRvd1tpXS5yZXNvdXJjZTsKIAkJLyogSFAncyBmaXJtd2FyZSBoYXMgYSBoYWNrIHRvIHdvcmsgYXJvdW5kIGEgV2luZG93cyBidWcuCkBAIC0zMzAsMTMgKzMzMCw3IEBACiAJCWlmICgocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSAmJgogCQkgICAgKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCA8IDE2KSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoaiA+PSBQQ0lfQlVTX05VTV9SRVNPVVJDRVMpIHsKLQkJCWRldl93YXJuKCZidXMtPmRldiwKLQkJCQkgImlnbm9yaW5nIGhvc3QgYnJpZGdlIHdpbmRvdyAlcFIgKG5vIHNwYWNlKVxuIiwKLQkJCQkgcmVzKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWJ1cy0+cmVzb3VyY2VbaisrXSA9IHJlczsKKwkJcGNpX2J1c19hZGRfcmVzb3VyY2UoYnVzLCByZXMsIDApOwogCX0KIH0KIApAQCAtNDUyLDEzICs0NDYsMTIgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGlzX3ZhbGlkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZHgpCiB7CiAJdW5zaWduZWQgaW50IGksIHR5cGVfbWFzayA9IElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKmRldnIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdOworCXN0cnVjdCByZXNvdXJjZSAqZGV2ciA9ICZkZXYtPnJlc291cmNlW2lkeF0sICpidXNyOwogCiAJaWYgKCFkZXYtPmJ1cykKIAkJcmV0dXJuIDA7Ci0JZm9yIChpPTA7IGk8UENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKLQkJc3RydWN0IHJlc291cmNlICpidXNyID0gZGV2LT5idXMtPnJlc291cmNlW2ldOwogCisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShkZXYtPmJ1cywgYnVzciwgaSkgewogCQlpZiAoIWJ1c3IgfHwgKChidXNyLT5mbGFncyBeIGRldnItPmZsYWdzKSAmIHR5cGVfbWFzaykpCiAJCQljb250aW51ZTsKIAkJaWYgKChkZXZyLT5zdGFydCkgJiYgKGRldnItPnN0YXJ0ID49IGJ1c3ItPnN0YXJ0KSAmJgpAQCAtNTQ3LDEwICs1NDAsMTEgQEAKIAkJYWNwaV9wY2lfaXJxX2Rpc2FibGUoZGV2KTsKIH0KIAotdm9pZAotcGNpYmlvc19hbGlnbl9yZXNvdXJjZSAodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCityZXNvdXJjZV9zaXplX3QKK3BjaWJpb3NfYWxpZ25fcmVzb3VyY2UgKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkgICAgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CisJcmV0dXJuIHJlcy0+c3RhcnQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCmluZGV4IDBlZjk1MzAuLjkyNjE0YjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC05Miw2ICs5Miw2IEBACiAJKTsKIH0KIAotZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QpOworZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7CiAKICNlbmRpZgkvKiBfQVNNX00zMlJfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL21tL2ZhdWx0LW5vbW11LmMgYi9hcmNoL20zMnIvbW0vZmF1bHQtbm9tbXUuYwppbmRleCA4ODQ2OTE3Li44ODhhYWIxIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbW0vZmF1bHQtbm9tbXUuYworKysgYi9hcmNoL20zMnIvbW0vZmF1bHQtbm9tbXUuYwpAQCAtOTUsNyArOTUsNyBAQAogICogdXBkYXRlX21tdV9jYWNoZSgpCiAgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JcHRlX3QgcHRlKQorCXB0ZV90ICpwdGVwKQogewogCUJVRygpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL21tL2ZhdWx0LmMgYi9hcmNoL20zMnIvbW0vZmF1bHQuYwppbmRleCA3Mjc0YjQ3Li4yOGVlMzg5IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbW0vZmF1bHQuYworKysgYi9hcmNoL20zMnIvbW0vZmF1bHQuYwpAQCAtMzM2LDcgKzMzNiw3IEBACiAKIAkJYWRkciA9IChhZGRyZXNzICYgUEFHRV9NQVNLKTsKIAkJc2V0X3RocmVhZF9mYXVsdF9jb2RlKGVycm9yX2NvZGUpOwotCQl1cGRhdGVfbW11X2NhY2hlKE5VTEwsIGFkZHIsICpwdGVfayk7CisJCXVwZGF0ZV9tbXVfY2FjaGUoTlVMTCwgYWRkciwgcHRlX2spOwogCQlzZXRfdGhyZWFkX2ZhdWx0X2NvZGUoMCk7CiAJCXJldHVybjsKIAl9CkBAIC0zNDksNyArMzQ5LDcgQEAKICNkZWZpbmUgSVRMQl9FTkQJKHVuc2lnbmVkIGxvbmcgKikoSVRMQl9CQVNFICsgKE5SX1RMQl9FTlRSSUVTICogOCkpCiAjZGVmaW5lIERUTEJfRU5ECSh1bnNpZ25lZCBsb25nICopKERUTEJfQkFTRSArIChOUl9UTEJfRU5UUklFUyAqIDgpKQogdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHZhZGRyLAotCXB0ZV90IHB0ZSkKKwlwdGVfdCAqcHRlcCkKIHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICplbnRyeTEsICplbnRyeTI7CiAJdW5zaWduZWQgbG9uZyBwdGVfZGF0YSwgZmxhZ3M7CkBAIC0zNjUsNyArMzY1LDcgQEAKIAogCXZhZGRyID0gKHZhZGRyICYgUEFHRV9NQVNLKSB8IGdldF9hc2lkKCk7CiAKLQlwdGVfZGF0YSA9IHB0ZV92YWwocHRlKTsKKwlwdGVfZGF0YSA9IHB0ZV92YWwoKnB0ZXApOwogCiAjaWZkZWYgQ09ORklHX0NISVBfT1BTUAogCWVudHJ5MSA9ICh1bnNpZ25lZCBsb25nICopSVRMQl9CQVNFOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZwppbmRleCBlY2RjMTlhLi5iNWRhMjk4IDEwMDY0NAotLS0gYS9hcmNoL202OGsvS2NvbmZpZworKysgYi9hcmNoL202OGsvS2NvbmZpZwpAQCAtNTM2LDEwICs1MzYsNiBAQAogCSAgU2F5IFkgdG8gZW5hYmxlIGRvaW5nIElQIG92ZXIgdGhlIHBhcmFsbGVsIHBvcnQgb24geW91ciBHVlAKIAkgIElPLUV4dGVuZGVyIGNhcmQsIE4gb3RoZXJ3aXNlLgogCi1jb25maWcgTUFDX1NDQwotCXRyaXN0YXRlICJNYWNpbnRvc2ggc2VyaWFsIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBNQUMKLQogY29uZmlnIE1BQ19ISUQKIAlib29sCiAJZGVwZW5kcyBvbiBJTlBVVF9BREJISUQKQEAgLTU5NSw3ICs1OTEsNyBAQAogCiBjb25maWcgU0VSSUFMX0NPTlNPTEUKIAlib29sICJTdXBwb3J0IGZvciBzZXJpYWwgcG9ydCBjb25zb2xlIgotCWRlcGVuZHMgb24gKEFNSUdBIHx8IEFUQVJJIHx8IE1BQyB8fCBTVU4zIHx8IFNVTjNYIHx8IFZNRSB8fCBBUE9MTE8pICYmIChBVEFSSV9NRlBTRVI9eSB8fCBBVEFSSV9NSURJPXkgfHwgTUFDX1NDQz15IHx8IEFNSUdBX0JVSUxUSU5fU0VSSUFMPXkgfHwgR1ZQSU9FWFQ9eSB8fCBNVUxUSUZBQ0VfSUlJX1RUWT15IHx8IFNFUklBTD15IHx8IE1WTUUxNDdfU0NDIHx8IFNFUklBTDE2NyB8fCBNVk1FMTYyX1NDQyB8fCBCVk1FNjAwMF9TQ0MgfHwgRE5fU0VSSUFMKQorCWRlcGVuZHMgb24gKEFNSUdBIHx8IEFUQVJJIHx8IFNVTjMgfHwgU1VOM1ggfHwgVk1FIHx8IEFQT0xMTykgJiYgKEFUQVJJX01GUFNFUj15IHx8IEFUQVJJX01JREk9eSB8fCBBTUlHQV9CVUlMVElOX1NFUklBTD15IHx8IEdWUElPRVhUPXkgfHwgTVVMVElGQUNFX0lJSV9UVFk9eSB8fCBTRVJJQUw9eSB8fCBNVk1FMTQ3X1NDQyB8fCBTRVJJQUwxNjcgfHwgTVZNRTE2Ml9TQ0MgfHwgQlZNRTYwMDBfU0NDIHx8IEROX1NFUklBTCkKIAktLS1oZWxwLS0tCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byB1c2UgYSBzZXJpYWwgcG9ydCBhcyB0aGUKIAkgIHN5c3RlbSBjb25zb2xlICh0aGUgc3lzdGVtIGNvbnNvbGUgaXMgdGhlIGRldmljZSB3aGljaCByZWNlaXZlcyBhbGwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYyBiL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYwppbmRleCA2Yzc0NzUxLi5kMmNjMzVkIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jCkBAIC00ODAsNyArNDgwLDcgQEAKIAlzdGF0aWMgc3RydWN0IHJlc291cmNlIHNjaGVkX3JlcyA9IHsKIAkJLm5hbWUgPSAidGltZXIiLCAuc3RhcnQgPSAweDAwYmZkNDAwLCAuZW5kID0gMHgwMGJmZDVmZiwKIAl9OwotCWppZmZ5X3RpY2tzID0gKGFtaWdhX2VjbG9jaytIWi8yKS9IWjsKKwlqaWZmeV90aWNrcyA9IERJVl9ST1VORF9DTE9TRVNUKGFtaWdhX2VjbG9jaywgSFopOwogCiAJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJm1iX3Jlc291cmNlcy5fY2lhYiwgJnNjaGVkX3JlcykpCiAJCXByaW50aygiQ2Fubm90IGFsbG9jYXRlIGNpYWIudGF7bG8saGl9XG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnCmluZGV4IDk5OTFiNjQuLmM1ZjMyMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZwpAQCAtNzAxLDYgKzcwMSwxMSBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9QTUFDWklMT0c9eQorQ09ORklHX1NFUklBTF9QTUFDWklMT0dfVFRZUz15CitDT05GSUdfU0VSSUFMX1BNQUNaSUxPR19DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC04MzQsOSArODM5LDcgQEAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLUNPTkZJR19NQUNfU0NDPXkKIENPTkZJR19NQUNfSElEPXkKLUNPTkZJR19TRVJJQUxfQ09OU09MRT15CiAKICMKICMgRmlsZSBzeXN0ZW1zCmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWcKaW5kZXggNjljNDNlMi4uYThiZmEzZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZwpAQCAtODIyLDYgKzgyMiwxMSBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9QTUFDWklMT0c9eQorQ09ORklHX1NFUklBTF9QTUFDWklMT0dfVFRZUz15CitDT05GSUdfU0VSSUFMX1BNQUNaSUxPR19DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC05ODIsNyArOTg3LDYgQEAKIENPTkZJR19BVEFSSV9EU1A1Nks9bQogQ09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMPXkKIENPTkZJR19NVUxUSUZBQ0VfSUlJX1RUWT1tCi1DT05GSUdfTUFDX1NDQz15CiBDT05GSUdfTUFDX0hJRD15CiBDT05GSUdfTVZNRTE0N19TQ0M9eQogQ09ORklHX1NFUklBTDE2Nz15CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaHcuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNody5oCmluZGV4IDJiNGRlMGMuLmEyMjA5NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNody5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNody5oCkBAIC0yMSwyOSArMjEsNCBAQAogI2RlZmluZSBWSURFT01FTVNJWkUJKDQwOTYqMTAyNCkKICNkZWZpbmUgVklERU9NRU1NQVNLCSgtNDA5NioxMDI0KQogCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2lmIDAKLS8qCi0qKiBTQ0MgWjg1MzAKLSovCi0KLSNkZWZpbmUgTUFDX1NDQ19CQVMgKDB4NTBGMDQwMDApCi1zdHJ1Y3QgTUFDX1NDQwotIHsKLSAgdV9jaGFyIGNoYV9hX2N0cmw7Ci0gIHVfY2hhciBjaGFyX2R1bW15MTsKLSAgdV9jaGFyIGNoYV9hX2RhdGE7Ci0gIHVfY2hhciBjaGFyX2R1bW15MjsKLSAgdV9jaGFyIGNoYV9iX2N0cmw7Ci0gIHVfY2hhciBjaGFyX2R1bW15MzsKLSAgdV9jaGFyIGNoYV9iX2RhdGE7Ci0gfTsKLSMgZGVmaW5lIG1hY19zY2MgKCgqKHZvbGF0aWxlIHN0cnVjdCBTQ0MqKU1BQ19TQ0NfQkFTKSkKLSNlbmRpZgotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KICNlbmRpZiAvKiBsaW51eC9tYWNody5oICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50cy5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludHMuaAppbmRleCA2NzljNDhhLi5lYmUxYjcwIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50cy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRzLmgKQEAgLTM3LDcgKzM3LDYgQEAKIAogI2RlZmluZSBWSUExX1NPVVJDRV9CQVNFCTgKICNkZWZpbmUgVklBMl9TT1VSQ0VfQkFTRQkxNgotI2RlZmluZSBNQUNfU0NDX1NPVVJDRV9CQVNFCTI0CiAjZGVmaW5lIFBTQzNfU09VUkNFX0JBU0UJMjQKICNkZWZpbmUgUFNDNF9TT1VSQ0VfQkFTRQkzMgogI2RlZmluZSBQU0M1X1NPVVJDRV9CQVNFCTQwCkBAIC05NiwyNiArOTUsMTIgQEAKICNkZWZpbmUgSVJRX1BTQzNfMgkgICgyNikKICNkZWZpbmUgSVJRX1BTQzNfMwkgICgyNykKIAotLyogTGV2ZWwgNCAoU0NDKSBpbnRlcnJ1cHRzICovCi0jZGVmaW5lIElSUV9TQ0MJCSAgICAgKDMyKQotI2RlZmluZSBJUlFfU0NDQQkgICAgICgzMykKLSNkZWZpbmUgSVJRX1NDQ0IJICAgICAoMzQpCi0jaWYgMCAvKiBGSVhNRTogYXJlIHRoZXJlIG11bHRpcGxlIGludGVycnVwdCBjb25kaXRpb25zIG9uIHRoZSBTQ0MgPz8gKi8KLS8qIFNDQyBpbnRlcnJ1cHRzICovCi0jZGVmaW5lIElSUV9TQ0NCX1RYCSAgICAgKDMyKQotI2RlZmluZSBJUlFfU0NDQl9TVEFUCSAgICAgKDMzKQotI2RlZmluZSBJUlFfU0NDQl9SWAkgICAgICgzNCkKLSNkZWZpbmUgSVJRX1NDQ0JfU1BDT05ECSAgICAgKDM1KQotI2RlZmluZSBJUlFfU0NDQV9UWAkgICAgICgzNikKLSNkZWZpbmUgSVJRX1NDQ0FfU1RBVAkgICAgICgzNykKLSNkZWZpbmUgSVJRX1NDQ0FfUlgJICAgICAoMzgpCi0jZGVmaW5lIElSUV9TQ0NBX1NQQ09ORAkgICAgICgzOSkKLSNlbmRpZgotCiAvKiBMZXZlbCA0IChQU0MsIEFWIE1hY3Mgb25seSkgaW50ZXJydXB0cyAqLwogI2RlZmluZSBJUlFfUFNDNF8wCSAgKDMyKQogI2RlZmluZSBJUlFfUFNDNF8xCSAgKDMzKQorI2RlZmluZSBJUlFfTUFDX1NDQ19BCSAgSVJRX1BTQzRfMQogI2RlZmluZSBJUlFfUFNDNF8yCSAgKDM0KQorI2RlZmluZSBJUlFfTUFDX1NDQ19CCSAgSVJRX1BTQzRfMgogI2RlZmluZSBJUlFfUFNDNF8zCSAgKDM1KQogI2RlZmluZSBJUlFfTUFDX01BQ0VfRE1BICBJUlFfUFNDNF8zCiAKQEAgLTE0Niw2ICsxMzEsOSBAQAogI2RlZmluZSBJUlFfQkFCT09OXzIJICAoNjYpCiAjZGVmaW5lIElSUV9CQUJPT05fMwkgICg2NykKIAorLyogT24gbm9uLVBTQyBtYWNoaW5lcywgdGhlIHNlcmlhbCBwb3J0cyBzaGFyZSBhbiBJUlEgKi8KKyNkZWZpbmUgSVJRX01BQ19TQ0MJICBJUlFfQVVUT180CisKICNkZWZpbmUgU0xPVDJJUlEoeCkJICAoeCArIDQ3KQogI2RlZmluZSBJUlEyU0xPVCh4KQkgICh4IC0gNDcpCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ3RhYmxlX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGd0YWJsZV9tbS5oCmluZGV4IGFjYTBlMjguLjg3MTc0YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ3RhYmxlX21tLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BndGFibGVfbW0uaApAQCAtMTE1LDcgKzExNSw3IEBACiAgKiB0aGV5IGFyZSB1cGRhdGVkIG9uIGRlbWFuZC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQorCQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQogewogfQogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggZWU0MDExYy4uMjE2MDVjNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtNzEsNiArNzEsOCBAQAogI2RlZmluZSBQVFJBQ0VfR0VURlBSRUdTICAgICAgICAgIDE0CiAjZGVmaW5lIFBUUkFDRV9TRVRGUFJFR1MgICAgICAgICAgMTUKIAorI2RlZmluZSBQVFJBQ0VfR0VUX1RIUkVBRF9BUkVBICAgIDI1CisKICNkZWZpbmUgUFRSQUNFX1NJTkdMRUJMT0NLCTMzCS8qIHJlc3VtZSBleGVjdXRpb24gdW50aWwgbmV4dCBicmFuY2ggKi8KIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCmluZGV4IDUyM2RiMmEuLjEzMjBlYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaApAQCAtMTUsOSArMTUsMTUgQEAKIAl1bnNpZ25lZCBsb25nICBzY19wYzsKIAl1bnNpZ25lZCBzaG9ydCBzY19mb3JtYXR2ZWM7CiAjaWZuZGVmIF9fdUNsaW51eF9fCisjIGlmZGVmIF9fbWNvbGRmaXJlX18KKwl1bnNpZ25lZCBsb25nICBzY19mcHJlZ3NbMl1bMl07CS8qIHJvb20gZm9yIHR3byBmcCByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBsb25nICBzY19mcGNudGxbM107CisJdW5zaWduZWQgY2hhciAgc2NfZnBzdGF0ZVsxNis2KjhdOworIyBlbHNlCiAJdW5zaWduZWQgbG9uZyAgc2NfZnByZWdzWzIqM107ICAvKiByb29tIGZvciB0d28gZnAgcmVnaXN0ZXJzICovCiAJdW5zaWduZWQgbG9uZyAgc2NfZnBjbnRsWzNdOwogCXVuc2lnbmVkIGNoYXIgIHNjX2Zwc3RhdGVbMjE2XTsKKyMgZW5kaWYKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2luZm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdpbmZvLmgKaW5kZXggY2E3ZGRlOC4uODUxZDNkNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2luZm8uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnaW5mby5oCkBAIC0xLDk3ICsxLDYgQEAKICNpZm5kZWYgX002OEtfU0lHSU5GT19ICiAjZGVmaW5lIF9NNjhLX1NJR0lORk9fSAogCi0jaWZuZGVmIF9fdUNsaW51eF9fCi0jZGVmaW5lIEhBVkVfQVJDSF9TSUdJTkZPX1QKLSNkZWZpbmUgSEFWRV9BUkNIX0NPUFlfU0lHSU5GTwotI2VuZGlmCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+CiAKLSNpZm5kZWYgX191Q2xpbnV4X18KLQotdHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbyB7Ci0JaW50IHNpX3NpZ25vOwotCWludCBzaV9lcnJubzsKLQlpbnQgc2lfY29kZTsKLQotCXVuaW9uIHsKLQkJaW50IF9wYWRbU0lfUEFEX1NJWkVdOwotCi0JCS8qIGtpbGwoKSAqLwotCQlzdHJ1Y3QgewotCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCi0JCQlfX2tlcm5lbF91aWRfdCBfdWlkOwkvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwotCQkJX19rZXJuZWxfdWlkMzJfdCBfdWlkMzI7IC8qIHNlbmRlcidzIHVpZCAqLwotCQl9IF9raWxsOwotCi0JCS8qIFBPU0lYLjFiIHRpbWVycyAqLwotCQlzdHJ1Y3QgewotCQkJdGltZXJfdCBfdGlkOwkJLyogdGltZXIgaWQgKi8KLQkJCWludCBfb3ZlcnJ1bjsJCS8qIG92ZXJydW4gY291bnQgKi8KLQkJCWNoYXIgX3BhZFtzaXplb2YoIF9fQVJDSF9TSV9VSURfVCkgLSBzaXplb2YoaW50KV07Ci0JCQlzaWd2YWxfdCBfc2lndmFsOwkvKiBzYW1lIGFzIGJlbG93ICovCi0JCQlpbnQgX3N5c19wcml2YXRlOyAgICAgICAvKiBub3QgdG8gYmUgcGFzc2VkIHRvIHVzZXIgKi8KLQkJfSBfdGltZXI7Ci0KLQkJLyogUE9TSVguMWIgc2lnbmFscyAqLwotCQlzdHJ1Y3QgewotCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCi0JCQlfX2tlcm5lbF91aWRfdCBfdWlkOwkvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwotCQkJc2lndmFsX3QgX3NpZ3ZhbDsKLQkJCV9fa2VybmVsX3VpZDMyX3QgX3VpZDMyOyAvKiBzZW5kZXIncyB1aWQgKi8KLQkJfSBfcnQ7Ci0KLQkJLyogU0lHQ0hMRCAqLwotCQlzdHJ1Y3QgewotCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogd2hpY2ggY2hpbGQgKi8KLQkJCV9fa2VybmVsX3VpZF90IF91aWQ7CS8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCi0JCQlpbnQgX3N0YXR1czsJCS8qIGV4aXQgY29kZSAqLwotCQkJY2xvY2tfdCBfdXRpbWU7Ci0JCQljbG9ja190IF9zdGltZTsKLQkJCV9fa2VybmVsX3VpZDMyX3QgX3VpZDMyOyAvKiBzZW5kZXIncyB1aWQgKi8KLQkJfSBfc2lnY2hsZDsKLQotCQkvKiBTSUdJTEwsIFNJR0ZQRSwgU0lHU0VHViwgU0lHQlVTICovCi0JCXN0cnVjdCB7Ci0JCQl2b2lkICpfYWRkcjsgLyogZmF1bHRpbmcgaW5zbi9tZW1vcnkgcmVmLiAqLwotCQl9IF9zaWdmYXVsdDsKLQotCQkvKiBTSUdQT0xMICovCi0JCXN0cnVjdCB7Ci0JCQlpbnQgX2JhbmQ7CS8qIFBPTExfSU4sIFBPTExfT1VULCBQT0xMX01TRyAqLwotCQkJaW50IF9mZDsKLQkJfSBfc2lncG9sbDsKLQl9IF9zaWZpZWxkczsKLX0gc2lnaW5mb190OwotCi0jZGVmaW5lIFVJRDE2X1NJR0lORk9fQ09NUEFUX05FRURFRAotCi0vKgotICogSG93IHRoZXNlIGZpZWxkcyBhcmUgdG8gYmUgYWNjZXNzZWQuCi0gKi8KLSN1bmRlZiBzaV91aWQKLSNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIHNpX3VpZAkJX3NpZmllbGRzLl9raWxsLl91aWQzMgotI2RlZmluZSBzaV91aWQxNglfc2lmaWVsZHMuX2tpbGwuX3VpZAotI2Vsc2UKLSNkZWZpbmUgc2lfdWlkCQlfc2lmaWVsZHMuX2tpbGwuX3VpZAotI2VuZGlmCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLQotc3RhdGljIGlubGluZSB2b2lkIGNvcHlfc2lnaW5mbyhzdHJ1Y3Qgc2lnaW5mbyAqdG8sIHN0cnVjdCBzaWdpbmZvICpmcm9tKQotewotCWlmIChmcm9tLT5zaV9jb2RlIDwgMCkKLQkJbWVtY3B5KHRvLCBmcm9tLCBzaXplb2YoKnRvKSk7Ci0JZWxzZQotCQkvKiBfc2lnY2hsZCBpcyBjdXJyZW50bHkgdGhlIGxhcmdlc3Qga25vdyB1bmlvbiBtZW1iZXIgKi8KLQkJbWVtY3B5KHRvLCBmcm9tLCAzKnNpemVvZihpbnQpICsgc2l6ZW9mKGZyb20tPl9zaWZpZWxkcy5fc2lnY2hsZCkpOwotfQotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qICFfX3VDbGludXhfXyAqLwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IDViNzU0YWEuLmI3YjM3YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMTQsNyArMTQsNyBAQAogfQogCiAjZGVmaW5lIF9fYXJjaF9zd2FiMzIgX19hcmNoX3N3YWIzMgotI2VsaWYgIWRlZmluZWQoX191Q2xpbnV4X18pCisjZWxpZiAhZGVmaW5lZChfX21jb2xkZmlyZV9fKQogCiBzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gX191MzIgX19hcmNoX3N3YWIzMihfX3UzMiB2YWwpCiB7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19tbS5oCmluZGV4IDE2N2U1MTguLjY3MjY2YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19tbS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19tbS5oCkBAIC0xNiw2ICsxNiw3IEBACiAJc3RydWN0IGV4ZWNfZG9tYWluCSpleGVjX2RvbWFpbjsJLyogZXhlY3V0aW9uIGRvbWFpbiAqLwogCWludAkJCXByZWVtcHRfY291bnQ7CS8qIDAgPT4gcHJlZW1wdGFibGUsIDwwID0+IEJVRyAqLwogCV9fdTMyIGNwdTsgLyogc2hvdWxkIGFsd2F5cyBiZSAwIG9uIG02OGsgKi8KKwl1bnNpZ25lZCBsb25nCQl0cF92YWx1ZTsJLyogdGhyZWFkIHBvaW50ZXIgKi8KIAlzdHJ1Y3QgcmVzdGFydF9ibG9jayAgICByZXN0YXJ0X2Jsb2NrOwogfTsKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb19uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvX25vLmgKaW5kZXggYTY1MTJiZi4uODg0Nzc2ZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvX25vLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvX25vLmgKQEAgLTM3LDYgKzM3LDcgQEAKIAl1bnNpZ25lZCBsb25nCSAgIGZsYWdzOwkJLyogbG93IGxldmVsIGZsYWdzICovCiAJaW50CQkgICBjcHU7CQkJLyogY3B1IHdlJ3JlIG9uICovCiAJaW50CQkgICBwcmVlbXB0X2NvdW50OwkvKiAwID0+IHByZWVtcHRhYmxlLCA8MCA9PiBCVUcgKi8KKwl1bnNpZ25lZCBsb25nCSAgIHRwX3ZhbHVlOwkJLyogdGhyZWFkIHBvaW50ZXIgKi8KIAlzdHJ1Y3QgcmVzdGFydF9ibG9jayByZXN0YXJ0X2Jsb2NrOwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHQuaAppbmRleCBlNGUyMjY2Li4wMGRjYzUxIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHQuaApAQCAtNyw3ICs3LDExIEBACiAKIHR5cGVkZWYgc3RydWN0IGZwcmVnc2V0IHsKIAlpbnQgZl9mcGNudGxbM107CisjaWZkZWYgX19tY29sZGZpcmVfXworCWludCBmX2ZwcmVnc1s4XVsyXTsKKyNlbHNlCiAJaW50IGZfZnByZWdzWzgqM107CisjZW5kaWYKIH0gZnByZWdzZXRfdDsKIAogc3RydWN0IG1jb250ZXh0IHsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA0OGI4N2Y1Li5kNzJhNzFkIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zMzYsMTAgKzMzNiwxNCBAQAogI2RlZmluZSBfX05SX3B3cml0ZXYJCTMzMAogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvCTMzMQogI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkzMzIKKyNkZWZpbmUgX19OUl9nZXRfdGhyZWFkX2FyZWEJMzMzCisjZGVmaW5lIF9fTlJfc2V0X3RocmVhZF9hcmVhCTMzNAorI2RlZmluZSBfX05SX2F0b21pY19jbXB4Y2hnXzMyCTMzNQorI2RlZmluZSBfX05SX2F0b21pY19iYXJyaWVyCTMzNgogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jZGVmaW5lIE5SX3N5c2NhbGxzCQkzMzMKKyNkZWZpbmUgTlJfc3lzY2FsbHMJCTMzNwogCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdmlydGNvbnZlcnQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS92aXJ0Y29udmVydC5oCmluZGV4IDNmODM0YjMuLmYzNTIyOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS92aXJ0Y29udmVydC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS92aXJ0Y29udmVydC5oCkBAIC0zMSwxMiArMzEsNyBAQAogI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkgXAogCV9fcGEoUEFHRV9PRkZTRVQgKyAoKChwYWdlKSAtIHBnX2RhdGFfbWFwWzBdLm5vZGVfbWVtX21hcCkgPDwgUEFHRV9TSElGVCkpCiAjZWxzZQotI2RlZmluZSBwYWdlX3RvX3BoeXMoX3BhZ2UpICh7CQkJCQkJXAotCXN0cnVjdCBwYWdlICpfX3BhZ2UgPSBfcGFnZTsJCQkJCVwKLQlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0OwkJCQkJXAotCXBnZGF0ID0gcGdfZGF0YV90YWJsZVtwYWdlX3RvX25pZChfX3BhZ2UpXTsJCQlcCi0JcGFnZV90b19wZm4oX19wYWdlKSA8PCBQQUdFX1NISUZUOwkJCQlcCi19KQorI2RlZmluZSBwYWdlX3RvX3BoeXMocGFnZSkJKHBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQpCiAjZW5kaWYKICNlbHNlCiAjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQkoKChwYWdlKSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL2VudHJ5LlMgYi9hcmNoL202OGsva2VybmVsL2VudHJ5LlMKaW5kZXggNzdmYzdjMS4uZTEzNmI4YyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvZW50cnkuUwpAQCAtNzYxLDQgKzc2MSw4IEBACiAJLmxvbmcgc3lzX3B3cml0ZXYJCS8qIDMzMCAqLwogCS5sb25nIHN5c19ydF90Z3NpZ3F1ZXVlaW5mbwogCS5sb25nIHN5c19wZXJmX2V2ZW50X29wZW4KKwkubG9uZyBzeXNfZ2V0X3RocmVhZF9hcmVhCisJLmxvbmcgc3lzX3NldF90aHJlYWRfYXJlYQorCS5sb25nIHN5c19hdG9taWNfY21weGNoZ18zMgkvKiAzMzUgKi8KKwkubG9uZyBzeXNfYXRvbWljX2JhcnJpZXIKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYwppbmRleCAwNTI5NjU5Li4xN2MzZjMyIDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjUxLDYgKzI1MSwxMCBAQAogCiAJcC0+dGhyZWFkLnVzcCA9IHVzcDsKIAlwLT50aHJlYWQua3NwID0gKHVuc2lnbmVkIGxvbmcpY2hpbGRzdGFjazsKKworCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1NFVFRMUykKKwkJdGFza190aHJlYWRfaW5mbyhwKS0+dHBfdmFsdWUgPSByZWdzLT5kNTsKKwogCS8qCiAJICogTXVzdCBzYXZlIHRoZSBjdXJyZW50IFNGQy9ERkMgdmFsdWUsIE5PVCB0aGUgdmFsdWUgd2hlbgogCSAqIHRoZSBwYXJlbnQgd2FzIGxhc3QgZGVzY2hlZHVsZWQgLSBSR0ggIDEwLTA4LTk2CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYwppbmRleCAxZmMyMTdlLi42MTZlNTk3IDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMKQEAgLTI0NSw2ICsyNDUsMTEgQEAKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCWJyZWFrOwogCisJY2FzZSBQVFJBQ0VfR0VUX1RIUkVBRF9BUkVBOgorCQlyZXQgPSBwdXRfdXNlcih0YXNrX3RocmVhZF9pbmZvKGNoaWxkKS0+dHBfdmFsdWUsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgX191c2VyICopZGF0YSk7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcmV0ID0gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL202OGsva2VybmVsL3NpZ25hbC5jCmluZGV4IGRlMmQwNWQuLjRiMzg3NTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9zaWduYWwuYwpAQCAtODk3LDEwICs4OTcsMTcgQEAKIAogCS8qIFNldCB1cCB0byByZXR1cm4gZnJvbSB1c2Vyc3BhY2UuICAqLwogCWVyciB8PSBfX3B1dF91c2VyKGZyYW1lLT5yZXRjb2RlLCAmZnJhbWUtPnByZXRjb2RlKTsKKyNpZmRlZiBfX21jb2xkZmlyZV9fCisJLyogbW92ZWwgI19fTlJfcnRfc2lncmV0dXJuLGQwOyB0cmFwICMwICovCisJZXJyIHw9IF9fcHV0X3VzZXIoMHgyMDNjMDAwMCwgKGxvbmcgX191c2VyICopKGZyYW1lLT5yZXRjb2RlICsgMCkpOworCWVyciB8PSBfX3B1dF91c2VyKDB4MDAwMDRlNDAgKyAoX19OUl9ydF9zaWdyZXR1cm4gPDwgMTYpLAorCQkJICAobG9uZyBfX3VzZXIgKikoZnJhbWUtPnJldGNvZGUgKyA0KSk7CisjZWxzZQogCS8qIG1vdmVxICMsZDA7IG5vdGIgZDA7IHRyYXAgIzAgKi8KIAllcnIgfD0gX19wdXRfdXNlcigweDcwMDA0NjAwICsgKChfX05SX3J0X3NpZ3JldHVybiBeIDB4ZmYpIDw8IDE2KSwKIAkJCSAgKGxvbmcgX191c2VyICopKGZyYW1lLT5yZXRjb2RlICsgMCkpOwogCWVyciB8PSBfX3B1dF91c2VyKDB4NGU0MCwgKHNob3J0IF9fdXNlciAqKShmcmFtZS0+cmV0Y29kZSArIDQpKTsKKyNlbmRpZgogCiAJaWYgKGVycikKIAkJZ290byBnaXZlX3NpZ3NlZ3Y7CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3N5c19tNjhrLmMgYi9hcmNoL202OGsva2VybmVsL3N5c19tNjhrLmMKaW5kZXggMjE4ZjQ0MS4uZTNhZDJkNiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9zeXNfbTY4ay5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvc3lzX202OGsuYwpAQCAtMjgsNiArMjgsMTEgQEAKICNpbmNsdWRlIDxhc20vdHJhcHMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxhc20vdGxiLmg+CisKK2FzbWxpbmthZ2UgaW50IGRvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlKTsKIAogYXNtbGlua2FnZSBsb25nIHN5c19tbWFwMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAogCXVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKQEAgLTU5NSwzICs2MDAsNzkgQEAKIAkJCTogImQiIChfX2EpLCAiZCIgKF9fYiksICJkIiAoX19jKSk7CiAJcmV0dXJuIF9fcmVzOwogfQorCithc21saW5rYWdlIHVuc2lnbmVkIGxvbmcgc3lzX2dldF90aHJlYWRfYXJlYSh2b2lkKQoreworCXJldHVybiBjdXJyZW50X3RocmVhZF9pbmZvKCktPnRwX3ZhbHVlOworfQorCithc21saW5rYWdlIGludCBzeXNfc2V0X3RocmVhZF9hcmVhKHVuc2lnbmVkIGxvbmcgdHApCit7CisJY3VycmVudF90aHJlYWRfaW5mbygpLT50cF92YWx1ZSA9IHRwOworCXJldHVybiAwOworfQorCisvKiBUaGlzIHN5c2NhbGwgZ2V0cyBpdHMgYXJndW1lbnRzIGluIEEwIChtZW0pLCBEMiAob2xkdmFsKSBhbmQKKyAgIEQxIChuZXd2YWwpLiAgKi8KK2FzbWxpbmthZ2UgaW50CitzeXNfYXRvbWljX2NtcHhjaGdfMzIodW5zaWduZWQgbG9uZyBuZXd2YWwsIGludCBvbGR2YWwsIGludCBkMywgaW50IGQ0LCBpbnQgZDUsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgX191c2VyICogbWVtKQoreworCS8qIFRoaXMgd2FzIGJvcnJvd2VkIGZyb20gQVJNJ3MgaW1wbGVtZW50YXRpb24uICAqLworCWZvciAoOzspIHsKKwkJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwkJcGdkX3QgKnBnZDsKKwkJcG1kX3QgKnBtZDsKKwkJcHRlX3QgKnB0ZTsKKwkJc3BpbmxvY2tfdCAqcHRsOworCQl1bnNpZ25lZCBsb25nIG1lbV92YWx1ZTsKKworCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCXBnZCA9IHBnZF9vZmZzZXQobW0sICh1bnNpZ25lZCBsb25nKW1lbSk7CisJCWlmICghcGdkX3ByZXNlbnQoKnBnZCkpCisJCQlnb3RvIGJhZF9hY2Nlc3M7CisJCXBtZCA9IHBtZF9vZmZzZXQocGdkLCAodW5zaWduZWQgbG9uZyltZW0pOworCQlpZiAoIXBtZF9wcmVzZW50KCpwbWQpKQorCQkJZ290byBiYWRfYWNjZXNzOworCQlwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWQsICh1bnNpZ25lZCBsb25nKW1lbSwgJnB0bCk7CisJCWlmICghcHRlX3ByZXNlbnQoKnB0ZSkgfHwgIXB0ZV9kaXJ0eSgqcHRlKQorCQkgICAgfHwgIXB0ZV93cml0ZSgqcHRlKSkgeworCQkJcHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7CisJCQlnb3RvIGJhZF9hY2Nlc3M7CisJCX0KKworCQltZW1fdmFsdWUgPSAqbWVtOworCQlpZiAobWVtX3ZhbHVlID09IG9sZHZhbCkKKwkJCSptZW0gPSBuZXd2YWw7CisKKwkJcHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7CisJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCXJldHVybiBtZW1fdmFsdWU7CisKKwkgICAgICBiYWRfYWNjZXNzOgorCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQkvKiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSBhIGJhZCBhY2Nlc3MsIHdlIGNhbiBnZXQgaGVyZSBpZgorCQkgICBhIG1lbW9yeSB3ZSdyZSB0cnlpbmcgdG8gd3JpdGUgdG8gc2hvdWxkIGJlIGNvcGllZC1vbi13cml0ZS4KKwkJICAgTWFrZSB0aGUga2VybmVsIGRvIHRoZSBuZWNlc3NhcnkgcGFnZSBzdHVmZiwgdGhlbiByZS1pdGVyYXRlLgorCQkgICBTaW11bGF0ZSBhIHdyaXRlIGFjY2VzcyBmYXVsdCB0byBkbyB0aGF0LiAgKi8KKwkJeworCQkJLyogVGhlIGZpcnN0IGFyZ3VtZW50IG9mIHRoZSBmdW5jdGlvbiBjb3JyZXNwb25kcyB0bworCQkJICAgRDEsIHdoaWNoIGlzIHRoZSBmaXJzdCBmaWVsZCBvZiBzdHJ1Y3QgcHRfcmVncy4gICovCisJCQlzdHJ1Y3QgcHRfcmVncyAqZnAgPSAoc3RydWN0IHB0X3JlZ3MgKikmbmV3dmFsOworCisJCQkvKiAnMycgaXMgYW4gUk1XIGZsYWcuICAqLworCQkJaWYgKGRvX3BhZ2VfZmF1bHQoZnAsICh1bnNpZ25lZCBsb25nKW1lbSwgMykpCisJCQkJLyogSWYgdGhlIGRvX3BhZ2VfZmF1bHQoKSBmYWlsZWQsIHdlIGRvbid0CisJCQkJICAgaGF2ZSBhbnl0aGluZyBtZWFuaW5nZnVsIHRvIHJldHVybi4KKwkJCQkgICBUaGVyZSBzaG91bGQgYmUgYSBTSUdTRUdWIHBlbmRpbmcgZm9yCisJCQkJICAgdGhlIHByb2Nlc3MuICAqLworCQkJCXJldHVybiAweGRlYWRiZWVmOworCQl9CisJfQorfQorCithc21saW5rYWdlIGludCBzeXNfYXRvbWljX2JhcnJpZXIodm9pZCkKK3sKKwkvKiBubyBjb2RlIG5lZWRlZCBmb3IgdW5pcHJvY3MgKi8KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvTWFrZWZpbGUgYi9hcmNoL202OGsvbWFjL01ha2VmaWxlCmluZGV4IGRhZWJkODAuLmI4ZDRjODMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvTWFrZWZpbGUKKysrIGIvYXJjaC9tNjhrL21hYy9NYWtlZmlsZQpAQCAtMyw0ICszLDQgQEAKICMKIAogb2JqLXkJCTo9IGNvbmZpZy5vIG1hY2ludHMubyBpb3AubyB2aWEubyBvc3MubyBwc2MubyBcCi0JCQliYWJvb24ubyBtYWNib2luZy5vIGRlYnVnLm8gbWlzYy5vCisJCQliYWJvb24ubyBtYWNib2luZy5vIG1pc2MubwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9jb25maWcuYyBiL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKaW5kZXggYmUwMTc5OC4uMDM1NmRhOSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy9jb25maWcuYworKysgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jCkBAIC0yMyw2ICsyMyw4IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9hZGIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdWRhLmg+CiAKICNkZWZpbmUgQk9PVElORk9fQ09NUEFUXzFfMAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtNDQsMTIgKzQ2LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjX29zcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNfcHNjLmg+CiAKLS8qIHBsYXRmb3JtIGRldmljZSBpbmZvICovCi0KLSNkZWZpbmUgU1dJTV9JT19TSVpFIDB4MjAwMAkvKiBTV0lNIElPIHJlc291cmNlIHNpemUgKi8KLQogLyogTWFjIGJvb3RpbmZvIHN0cnVjdCAqLwotCiBzdHJ1Y3QgbWFjX2Jvb3Rlcl9kYXRhIG1hY19iaV9kYXRhOwogCiAvKiBUaGUgcGh5cy4gdmlkZW8gYWRkci4gLSBtaWdodCBiZSBib2d1cyBvbiBzb21lIG1hY2hpbmVzICovCkBAIC03MCw4ICs2Nyw2IEBACiAKIGV4dGVybiB2b2lkIG1hY19ta3NvdW5kKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKIAotZXh0ZXJuIHZvaWQgbnVidXNfc3dlZXBfdmlkZW8odm9pZCk7Ci0KIHN0YXRpYyB2b2lkIG1hY19nZXRfbW9kZWwoY2hhciAqc3RyKTsKIHN0YXRpYyB2b2lkIG1hY19pZGVudGlmeSh2b2lkKTsKIHN0YXRpYyB2b2lkIG1hY19yZXBvcnRfaGFyZHdhcmUodm9pZCk7CkBAIC0xNjgsMTIgKzE2Myw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSU5QVVRfTTY4S19CRUVQKSB8fCBkZWZpbmVkKENPTkZJR19JTlBVVF9NNjhLX0JFRVBfTU9EVUxFKQogCW1hY2hfYmVlcCA9IG1hY19ta3NvdW5kOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hFQVJUQkVBVAotI2lmIDAKLQltYWNoX2hlYXJ0YmVhdCA9IG1hY19oZWFydGJlYXQ7Ci0JbWFjaF9oZWFydGJlYXRfaXJxID0gSVJRX01BQ19USU1FUjsKLSNlbmRpZgotI2VuZGlmCiAKIAkvKgogCSAqIERldGVybWluZSBoYXJkd2FyZSBwcmVzZW50CkBAIC0xOTEsMjcgKzE4MCwxOSBAQAogCWlmIChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfSUlDSQogCSAgICB8fCBtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfSUlGWCkKIAkJbWFjaF9sMl9mbHVzaCA9IG1hY19jYWNoZV9jYXJkX2ZsdXNoOwotCi0JLyoKLQkgKiBDaGVjayBmb3IgbWFjaGluZSBzcGVjaWZpYyBmaXh1cHMuCi0JICovCi0KLSNpZmRlZiBPTERfTlVCVVNfQ09ERQotCW51YnVzX3N3ZWVwX3ZpZGVvKCk7Ci0jZW5kaWYKIH0KIAogCiAvKgotICoJTWFjaW50b3NoIFRhYmxlOiBoYXJkY29kZWQgbW9kZWwgY29uZmlndXJhdGlvbiBkYXRhLgorICogTWFjaW50b3NoIFRhYmxlOiBoYXJkY29kZWQgbW9kZWwgY29uZmlndXJhdGlvbiBkYXRhLgogICoKLSAqCU11Y2ggb2YgdGhpcyB3YXMgZGVmaW5lZCBieSBBbGFuLCBiYXNlZCBvbiB3aG8ga25vd3Mgd2hhdCBkb2NzLgotICoJSSd2ZSBhZGRlZCBhIGxvdCBtb3JlLCBhbmQgc29tZSBvZiB0aGF0IHdhcyBwdXJlIGd1ZXNzd29yayBiYXNlZAotICoJb24gaGFyZHdhcmUgcGFnZXMgcHJlc2VudCBvbiB0aGUgTWFjIHdlYiBzaXRlLiBQb3NzaWJseSB3aWxkbHkKLSAqCWluYWNjdXJhdGUsIHNvIGxvb2sgaGVyZSBpZiBhIG5ldyBNYWMgbW9kZWwgd29uJ3QgcnVuLiBFeGFtcGxlOiBpZgotICoJYSBNYWMgY3Jhc2hlcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgVklBMSByZWdpc3RlcnMgaGF2ZSBiZWVuIGR1bXBlZAotICoJdG8gdGhlIHNjcmVlbiwgaXQgcHJvYmFibHkgZGllZCBhdHRlbXB0aW5nIHRvIHJlYWQgRGlyQiBvbiBhIFJCVi4KLSAqCU1lYW5pbmcgaXQgc2hvdWxkIGhhdmUgTUFDX1ZJQV9JSWNpIGhlcmUgOi0pCisgKiBNdWNoIG9mIHRoaXMgd2FzIGRlZmluZWQgYnkgQWxhbiwgYmFzZWQgb24gd2hvIGtub3dzIHdoYXQgZG9jcy4KKyAqIEkndmUgYWRkZWQgYSBsb3QgbW9yZSwgYW5kIHNvbWUgb2YgdGhhdCB3YXMgcHVyZSBndWVzc3dvcmsgYmFzZWQKKyAqIG9uIGhhcmR3YXJlIHBhZ2VzIHByZXNlbnQgb24gdGhlIE1hYyB3ZWIgc2l0ZS4gUG9zc2libHkgd2lsZGx5CisgKiBpbmFjY3VyYXRlLCBzbyBsb29rIGhlcmUgaWYgYSBuZXcgTWFjIG1vZGVsIHdvbid0IHJ1bi4gRXhhbXBsZTogaWYKKyAqIGEgTWFjIGNyYXNoZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIFZJQTEgcmVnaXN0ZXJzIGhhdmUgYmVlbiBkdW1wZWQKKyAqIHRvIHRoZSBzY3JlZW4sIGl0IHByb2JhYmx5IGRpZWQgYXR0ZW1wdGluZyB0byByZWFkIERpckIgb24gYSBSQlYuCisgKiBNZWFuaW5nIGl0IHNob3VsZCBoYXZlIE1BQ19WSUFfSUljaSBoZXJlIDotKQogICovCiAKIHN0cnVjdCBtYWNfbW9kZWwgKm1hY2ludG9zaF9jb25maWc7CkBAIC0yMTksNyArMjAwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBtYWNfbW9kZWwgbWFjX2RhdGFfdGFibGVbXSA9IHsKIAkvKgotCSAqCVdlJ2xsIHByZXRlbmQgdG8gYmUgYSBNYWNpbnRvc2ggSUksIHRoYXQncyBwcmV0dHkgc2FmZS4KKwkgKiBXZSdsbCBwcmV0ZW5kIHRvIGJlIGEgTWFjaW50b3NoIElJLCB0aGF0J3MgcHJldHR5IHNhZmUuCiAJICovCiAKIAl7CkBAIC0yMzAsMTIgKzIxMSwxMSBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9JV00KKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9JV00sCiAJfSwKIAogCS8qCi0JICoJT3JpZ2luYWwgTWFjSUkgaGFyZHdhcmUKLQkgKgorCSAqIE9yaWdpbmFsIE1hYyBJSSBoYXJkd2FyZQogCSAqLwogCiAJewpAQCAtMjQ2LDcgKzIyNiw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX0lXTQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX0lXTSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlYLAogCQkubmFtZQkJPSAiSUl4IiwKQEAgLTI1NSw3ICsyMzUsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlDWCwKIAkJLm5hbWUJCT0gIklJY3giLApAQCAtMjY0LDcgKzI0NCw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9TRTMwLAogCQkubmFtZQkJPSAiU0UvMzAiLApAQCAtMjczLDEzICsyNTMsMTMgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwKIAogCS8qCi0JICoJV2VpcmRpZmllZCBNYWNJSSBoYXJkd2FyZSAtIGFsbCBzdWJ0bHkgZGlmZmVyZW50LiBHZWUgdGhhbmtzCi0JICoJQXBwbGUuIEFsbCB0aGVzZSBib3hlcyBzZWVtIHRvIGhhdmUgVklBMiBpbiBhIGRpZmZlcmVudCBwbGFjZSB0bwotCSAqCXRoZSBNYWNJSSAoKzFBMDAwIHJhdGhlciB0aGFuICs0MDAwKQorCSAqIFdlaXJkaWZpZWQgTWFjIElJIGhhcmR3YXJlIC0gYWxsIHN1YnRseSBkaWZmZXJlbnQuIEdlZSB0aGFua3MKKwkgKiBBcHBsZS4gQWxsIHRoZXNlIGJveGVzIHNlZW0gdG8gaGF2ZSBWSUEyIGluIGEgZGlmZmVyZW50IHBsYWNlIHRvCisJICogdGhlIE1hYyBJSSAoKzFBMDAwIHJhdGhlciB0aGFuICs0MDAwKQogCSAqIENTQTogc2VlIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3RlY2hub3Rlcy9ody9od18wOS5odG1sCiAJICovCiAKQEAgLTI5MSw3ICsyNzEsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlGWCwKIAkJLm5hbWUJCT0gIklJZngiLApAQCAtMzAwLDcgKzI4MCw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSU9QLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0lPUAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fSU9QLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSVNJLAogCQkubmFtZQkJPSAiSUlzaSIsCkBAIC0zMDksNyArMjg5LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJVkksCiAJCS5uYW1lCQk9ICJJSXZpIiwKQEAgLTMxOCw3ICsyOTgsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlWWCwKIAkJLm5hbWUJCT0gIklJdngiLApAQCAtMzI3LDExICszMDcsMTEgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwKIAogCS8qCi0JICoJQ2xhc3NpYyBtb2RlbHMgKGd1ZXNzaW5nOiBzaW1pbGFyIHRvIFNFLzMwID8/IE5vcGUsIHNpbWlsYXIgdG8gTEMgLi4uKQorCSAqIENsYXNzaWMgbW9kZWxzIChndWVzc2luZzogc2ltaWxhciB0byBTRS8zMD8gTm9wZSwgc2ltaWxhciB0byBMQy4uLikKIAkgKi8KIAogCXsKQEAgLTM0Miw3ICszMjIsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfQ0NMLAogCQkubmFtZQkJPSAiQ29sb3IgQ2xhc3NpYyIsCkBAIC0zNTEsMTEgKzMzMSwxMSBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LAogCiAJLyoKLQkgKglTb21lIE1hYyBMQyBtYWNoaW5lcy4gQmFzaWNhbGx5IHRoZSBzYW1lIGFzIHRoZSBJSWNpLCBBREIgbGlrZSBJSXNpCisJICogU29tZSBNYWMgTEMgbWFjaGluZXMuIEJhc2ljYWxseSB0aGUgc2FtZSBhcyB0aGUgSUljaSwgQURCIGxpa2UgSUlzaQogCSAqLwogCiAJewpAQCAtMzY2LDcgKzM0Niw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9MQ0lJLAogCQkubmFtZQkJPSAiTEMgSUkiLApAQCAtMzc1LDcgKzM1NSw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9MQ0lJSSwKIAkJLm5hbWUJCT0gIkxDIElJSSIsCkBAIC0zODQsMTcgKzM2NCwxNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LAogCiAJLyoKLQkgKglRdWFkcmEuIFZpZGVvIGlzIGF0IDB4RjkwMDAwMDAsIHZpYSBpcyBsaWtlIGEgTWFjSUkuIFdlIGxhYmVsIGl0IGRpZmZlcmVudGx5Ci0JICoJYXMgc29tZSBvZiB0aGUgc3R1ZmYgY29ubmVjdGVkIHRvIFZJQTIgc2VlbXMgZGlmZmVyZW50LiBCZXR0ZXIgU0NTSSBjaGlwIGFuZAotCSAqCW9uYm9hcmQgZXRoZXJuZXQgdXNpbmcgYSBOYXRTZW1pIFNPTklDIGV4Y2VwdCB0aGUgNjYwQVYgYW5kIDg0MEFWIHdoaWNoIHVzZSBhbgotCSAqCUFNRCA3OUM5NDAgKE1BQ0UpLgotCSAqCVRoZSA3MDAsIDkwMCBhbmQgOTUwIGhhdmUgc29tZSBJL08gY2hpcHMgaW4gdGhlIHdyb25nIHBsYWNlIHRvCi0JICoJY29uZnVzZSB1cy4gVGhlIDg0MEFWIGhhcyBhIFNDU0kgbG9jYXRpb24gb2YgaXRzIG93biAoc2FtZSBhcwotCSAqCXRoZSA2NjBBVikuCisJICogUXVhZHJhLiBWaWRlbyBpcyBhdCAweEY5MDAwMDAwLCB2aWEgaXMgbGlrZSBhIE1hY0lJLiBXZSBsYWJlbCBpdAorCSAqIGRpZmZlcmVudGx5IGFzIHNvbWUgb2YgdGhlIHN0dWZmIGNvbm5lY3RlZCB0byBWSUEyIHNlZW1zIGRpZmZlcmVudC4KKwkgKiBCZXR0ZXIgU0NTSSBjaGlwIGFuZCBvbmJvYXJkIGV0aGVybmV0IHVzaW5nIGEgTmF0U2VtaSBTT05JQyBleGNlcHQKKwkgKiB0aGUgNjYwQVYgYW5kIDg0MEFWIHdoaWNoIHVzZSBhbiBBTUQgNzlDOTQwIChNQUNFKS4KKwkgKiBUaGUgNzAwLCA5MDAgYW5kIDk1MCBoYXZlIHNvbWUgSS9PIGNoaXBzIGluIHRoZSB3cm9uZyBwbGFjZSB0bworCSAqIGNvbmZ1c2UgdXMuIFRoZSA4NDBBViBoYXMgYSBTQ1NJIGxvY2F0aW9uIG9mIGl0cyBvd24gKHNhbWUgYXMKKwkgKiB0aGUgNjYwQVYpLgogCSAqLwogCiAJewpAQCAtNDA1LDcgKzM4NSw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTYwNV9BQ0MsCiAJCS5uYW1lCQk9ICJRdWFkcmEgNjA1IiwKQEAgLTQxNCw3ICszOTQsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E2MTAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgNjEwIiwKQEAgLTQyNCw3ICs0MDQsNyBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNjMwLAogCQkubmFtZQkJPSAiUXVhZHJhIDYzMCIsCkBAIC00MzUsNyArNDE1LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTY1MCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA2NTAiLApAQCAtNDQ1LDkgKzQyNSw5IEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwKLQkvKglUaGUgUTcwMCBkb2VzIGhhdmUgYSBOUyBTb25pYyAqLworCS8qIFRoZSBRNzAwIGRvZXMgaGF2ZSBhIE5TIFNvbmljICovCiAJewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E3MDAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgNzAwIiwKQEAgLTQ1Nyw3ICs0MzcsNyBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RODAwLAogCQkubmFtZQkJPSAiUXVhZHJhIDgwMCIsCkBAIC00NjcsNyArNDQ3LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTg0MCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA4NDBBViIsCkBAIC00NzcsNyArNDU3LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19QU0MsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX01BQ0UsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX0FWCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfQVYsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E5MDAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgOTAwIiwKQEAgLTQ4Nyw3ICs0NjcsNyBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lPUCwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fSU9QCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9JT1AsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E5NTAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgOTUwIiwKQEAgLTQ5Nyw2MCArNDc3LDYwIEBACiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSU9QLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9JT1AKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0lPUCwKIAl9LAogCiAJLyoKLQkgKglQZXJmb3JtYSAtIG1vcmUgTEMgdHlwZSBtYWNoaW5lcworCSAqIFBlcmZvcm1hIC0gbW9yZSBMQyB0eXBlIG1hY2hpbmVzCiAJICovCiAKIAl7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDQ2MCwKLQkJLm5hbWUJCT0gICJQZXJmb3JtYSA0NjAiLAorCQkubmFtZQkJPSAiUGVyZm9ybWEgNDYwIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9JSVNJLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNDc1LAotCQkubmFtZQkJPSAgIlBlcmZvcm1hIDQ3NSIsCisJCS5uYW1lCQk9ICJQZXJmb3JtYSA0NzUiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDQ3NUYsCi0JCS5uYW1lCQk9ICAiUGVyZm9ybWEgNDc1IiwKKwkJLm5hbWUJCT0gIlBlcmZvcm1hIDQ3NSIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNTIwLAotCQkubmFtZQkJPSAgIlBlcmZvcm1hIDUyMCIsCisJCS5uYW1lCQk9ICJQZXJmb3JtYSA1MjAiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A1NTAsCi0JCS5uYW1lCQk9ICAiUGVyZm9ybWEgNTUwIiwKKwkJLm5hbWUJCT0gIlBlcmZvcm1hIDU1MCIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LAotCS8qIFRoZXNlIGhhdmUgdGhlIGNvbW0gc2xvdCwgYW5kIHRoZXJlZm9yZSB0aGUgcG9zc2liaWxpdHkgb2YgU09OSUMgZXRoZXJuZXQgKi8KKwkvKiBUaGVzZSBoYXZlIHRoZSBjb21tIHNsb3QsIGFuZCB0aGVyZWZvcmUgcG9zc2libHkgU09OSUMgZXRoZXJuZXQgKi8KIAl7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDU3NSwKIAkJLm5hbWUJCT0gIlBlcmZvcm1hIDU3NSIsCkBAIC01NjAsNyArNTQwLDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNTg4LAogCQkubmFtZQkJPSAiUGVyZm9ybWEgNTg4IiwKQEAgLTU3MSw3ICs1NTEsNyBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1RWLAogCQkubmFtZQkJPSAiVFYiLApAQCAtNTgwLDcgKzU2MCw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNjAwLAogCQkubmFtZQkJPSAiUGVyZm9ybWEgNjAwIiwKQEAgLTU4OSwxNCArNTY5LDE0IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sCiAKIAkvKgotCSAqCUNlbnRyaXMgLSBqdXN0IGd1ZXNzaW5nIGFnYWluOyBtYXliZSBsaWtlIFF1YWRyYQorCSAqIENlbnRyaXMgLSBqdXN0IGd1ZXNzaW5nIGFnYWluOyBtYXliZSBsaWtlIFF1YWRyYS4KKwkgKiBUaGUgQzYxMCBtYXkgb3IgbWF5IG5vdCBoYXZlIFNPTklDLiBXZSBwcm9iZSB0byBtYWtlIHN1cmUuCiAJICovCiAKLQkvKiBUaGUgQzYxMCBtYXkgb3IgbWF5IG5vdCBoYXZlIFNPTklDLiAgV2UgcHJvYmUgdG8gbWFrZSBzdXJlICovCiAJewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0M2MTAsCiAJCS5uYW1lCQk9ICJDZW50cmlzIDYxMCIsCkBAIC02MDYsNyArNTg2LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMSwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfQzY1MCwKIAkJLm5hbWUJCT0gIkNlbnRyaXMgNjUwIiwKQEAgLTYxNiw3ICs1OTYsNyBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9DNjYwLAogCQkubmFtZQkJPSAiQ2VudHJpcyA2NjBBViIsCkBAIC02MjYsNyArNjA2LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19QU0MsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX01BQ0UsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX0FWCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfQVYsCiAJfSwKIAogCS8qCkBAIC02NDMsNyArNjIzLDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE0NSwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNDUiLApAQCAtNjUyLDcgKzYzMiw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNTAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTUwIiwKQEAgLTY2Miw3ICs2NDIsNyBAQAogCQkuaWRlX3R5cGUJPSBNQUNfSURFX1BCLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTYwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE2MCIsCkBAIC02NzEsNyArNjUxLDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE2NSwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNjUiLApAQCAtNjgwLDcgKzY2MCw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNjVDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE2NWMiLApAQCAtNjg5LDcgKzY2OSw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNzAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTcwIiwKQEAgLTY5OCw3ICs2NzgsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTgwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE4MCIsCkBAIC03MDcsNyArNjg3LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE4MEMsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTgwYyIsCkBAIC03MTYsNyArNjk2LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE5MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxOTAiLApAQCAtNzI2LDcgKzcwNiw3IEBACiAJCS5pZGVfdHlwZQk9IE1BQ19JREVfQkFCT09OLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCNTIwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDUyMCIsCkBAIC03MzYsNyArNzE2LDcgQEAKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LAogCiAJLyoKQEAgLTc1Nyw3ICs3MzcsNyBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCi0JCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjMwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyMzAiLApAQCAtNzY2LDcgKzc0Niw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyNTAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI1MCIsCkBAIC03NzUsNyArNzU1LDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjI3MEMsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI3MGMiLApAQCAtNzg0LDcgKzc2NCw3IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKLQkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyODAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI4MCIsCkBAIC03OTMsNyArNzczLDcgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjI4MEMsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI4MGMiLApAQCAtODAyLDE3ICs3ODIsNDQgQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAotCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAogCX0sCiAKIAkvKgotCSAqCU90aGVyIHN0dWZmID8/CisJICogT3RoZXIgc3R1ZmY/CiAJICovCisKIAl7CiAJCS5pZGVudAkJPSAtMQogCX0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2NjX2FfcnNyY3NbXSA9IHsKKwl7IC5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIH0sCisJeyAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSB9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzY2NfYl9yc3Jjc1tdID0geworCXsgLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0gfSwKKwl7IC5mbGFncyA9IElPUkVTT1VSQ0VfSVJRIH0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjY19hX3BkZXYgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNjYyIsCisJLmlkICAgICAgICAgICAgID0gMCwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHNjY19hX3JzcmNzKSwKKwkucmVzb3VyY2UgICAgICAgPSBzY2NfYV9yc3JjcywKK307CitFWFBPUlRfU1lNQk9MKHNjY19hX3BkZXYpOworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjY19iX3BkZXYgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNjYyIsCisJLmlkICAgICAgICAgICAgID0gMSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHNjY19iX3JzcmNzKSwKKwkucmVzb3VyY2UgICAgICAgPSBzY2NfYl9yc3JjcywKK307CitFWFBPUlRfU1lNQk9MKHNjY19iX3BkZXYpOworCiBzdGF0aWMgdm9pZCBfX2luaXQgbWFjX2lkZW50aWZ5KHZvaWQpCiB7CiAJc3RydWN0IG1hY19tb2RlbCAqbTsKQEAgLTgyMyw3ICs4MzAsOCBAQAogCQkvKiBubyBib290aW5mbyBtb2RlbCBpZCAtPiBOZXRCU0QgYm9vdGVyIHdhcyB1c2VkISAqLwogCQkvKiBYWFggRklYTUU6IGJyZWFrcyBmb3IgbW9kZWwgPiAzMSAqLwogCQltb2RlbCA9IChtYWNfYmlfZGF0YS5jcHVpZCA+PiAyKSAmIDYzOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBib290aW5mbyBtb2RlbCBJRCwgdXNpbmcgY3B1aWQgaW5zdGVhZCAoaGV5LCB1c2UgUGVuZ3VpbiEpXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gYm9vdGluZm8gbW9kZWwgSUQsIHVzaW5nIGNwdWlkIGluc3RlYWQgIgorCQkgICAgICAgIihvYnNvbGV0ZSBib290bG9hZGVyPylcbiIpOwogCX0KIAogCW1hY2ludG9zaF9jb25maWcgPSBtYWNfZGF0YV90YWJsZTsKQEAgLTgzNCwxMCArODQyLDI5IEBACiAJCX0KIAl9CiAKLQkvKiBXZSBuZWVkIHRvIHByZS1pbml0IHRoZSBJT1BzLCBpZiBhbnkuIE90aGVyd2lzZSAqLwotCS8qIHRoZSBzZXJpYWwgY29uc29sZSB3b24ndCB3b3JrIGlmIHRoZSB1c2VyIGhhZCAgICovCi0JLyogdGhlIHNlcmlhbCBwb3J0cyBzZXQgdG8gIkZhc3RlciIgbW9kZSBpbiBNYWNPUy4gKi8KKwkvKiBTZXQgdXAgc2VyaWFsIHBvcnQgcmVzb3VyY2VzIGZvciB0aGUgY29uc29sZSBpbml0Y2FsbC4gKi8KIAorCXNjY19hX3JzcmNzWzBdLnN0YXJ0ID0gKHJlc291cmNlX3NpemVfdCkgbWFjX2JpX2RhdGEuc2NjYmFzZSArIDI7CisJc2NjX2FfcnNyY3NbMF0uZW5kICAgPSBzY2NfYV9yc3Jjc1swXS5zdGFydDsKKwlzY2NfYl9yc3Jjc1swXS5zdGFydCA9IChyZXNvdXJjZV9zaXplX3QpIG1hY19iaV9kYXRhLnNjY2Jhc2U7CisJc2NjX2JfcnNyY3NbMF0uZW5kICAgPSBzY2NfYl9yc3Jjc1swXS5zdGFydDsKKworCXN3aXRjaCAobWFjaW50b3NoX2NvbmZpZy0+c2NjX3R5cGUpIHsKKwljYXNlIE1BQ19TQ0NfUFNDOgorCQlzY2NfYV9yc3Jjc1sxXS5zdGFydCA9IHNjY19hX3JzcmNzWzFdLmVuZCA9IElSUV9NQUNfU0NDX0E7CisJCXNjY19iX3JzcmNzWzFdLnN0YXJ0ID0gc2NjX2JfcnNyY3NbMV0uZW5kID0gSVJRX01BQ19TQ0NfQjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc2NjX2FfcnNyY3NbMV0uc3RhcnQgPSBzY2NfYV9yc3Jjc1sxXS5lbmQgPSBJUlFfTUFDX1NDQzsKKwkJc2NjX2JfcnNyY3NbMV0uc3RhcnQgPSBzY2NfYl9yc3Jjc1sxXS5lbmQgPSBJUlFfTUFDX1NDQzsKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBXZSBuZWVkIHRvIHByZS1pbml0IHRoZSBJT1BzLCBpZiBhbnkuIE90aGVyd2lzZQorCSAqIHRoZSBzZXJpYWwgY29uc29sZSB3b24ndCB3b3JrIGlmIHRoZSB1c2VyIGhhZAorCSAqIHRoZSBzZXJpYWwgcG9ydHMgc2V0IHRvICJGYXN0ZXIiIG1vZGUgaW4gTWFjT1MuCisJICovCiAJaW9wX3ByZWluaXQoKTsKIAogCXByaW50ayhLRVJOX0lORk8gIkRldGVjdGVkIE1hY2ludG9zaCBtb2RlbDogJWQgXG4iLCBtb2RlbCk7CkBAIC04NDYsNyArODczLDggQEAKIAkgKiBSZXBvcnQgYm9vdGVyIGRhdGE6CiAJICovCiAJcHJpbnRrKEtFUk5fREVCVUcgIiBQZW5ndWluIGJvb3RpbmZvIGRhdGE6XG4iKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiIFZpZGVvOiBhZGRyIDB4JWx4IHJvdyAweCVseCBkZXB0aCAlbHggZGltZW5zaW9ucyAlbGQgeCAlbGRcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIiBWaWRlbzogYWRkciAweCVseCAiCisJCSJyb3cgMHglbHggZGVwdGggJWx4IGRpbWVuc2lvbnMgJWxkIHggJWxkXG4iLAogCQltYWNfYmlfZGF0YS52aWRlb2FkZHIsIG1hY19iaV9kYXRhLnZpZGVvcm93LAogCQltYWNfYmlfZGF0YS52aWRlb2RlcHRoLCBtYWNfYmlfZGF0YS5kaW1lbnNpb25zICYgMHhGRkZGLAogCQltYWNfYmlfZGF0YS5kaW1lbnNpb25zID4+IDE2KTsKQEAgLTg2Myw2ICs4OTEsMTAgQEAKIAlvc3NfaW5pdCgpOwogCXBzY19pbml0KCk7CiAJYmFib29uX2luaXQoKTsKKworI2lmZGVmIENPTkZJR19BREJfQ1VEQQorCWZpbmRfdmlhX2N1ZGEoKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbWFjX3JlcG9ydF9oYXJkd2FyZSh2b2lkKQpAQCAtODc2LDIzICs5MDgsNTAgQEAKIAlzdHJjYXQoc3RyLCBtYWNpbnRvc2hfY29uZmlnLT5uYW1lKTsKIH0KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzd2ltX3Jlc291cmNlc1sxXTsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3dpbV9yc3JjID0geyAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzd2ltX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN3aW1fcGRldiA9IHsKIAkubmFtZQkJPSAic3dpbSIsCiAJLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzd2ltX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gc3dpbV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZzd2ltX3JzcmMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWFjX3BsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZzd2ltX2RldmljZQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXNwXzBfcGRldiA9IHsKKwkubmFtZQkJPSAibWFjX2VzcCIsCisJLmlkCQk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlc3BfMV9wZGV2ID0geworCS5uYW1lCQk9ICJtYWNfZXNwIiwKKwkuaWQJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNvbmljX3BkZXYgPSB7CisJLm5hbWUJCT0gIm1hY3NvbmljIiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtYWNlX3BkZXYgPSB7CisJLm5hbWUJCT0gIm1hY21hY2UiLAorCS5pZAkJPSAtMSwKIH07CiAKIGludCBfX2luaXQgbWFjX3BsYXRmb3JtX2luaXQodm9pZCkKIHsKIAl1OCAqc3dpbV9iYXNlOwogCisJLyoKKwkgKiBTZXJpYWwgZGV2aWNlcworCSAqLworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzY2NfYV9wZGV2KTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNjY19iX3BkZXYpOworCisJLyoKKwkgKiBGbG9wcHkgZGV2aWNlCisJICovCisKIAlzd2l0Y2ggKG1hY2ludG9zaF9jb25maWctPmZsb3BweV90eXBlKSB7CiAJY2FzZSBNQUNfRkxPUFBZX1NXSU1fQUREUjE6CiAJCXN3aW1fYmFzZSA9ICh1OCAqKShWSUExX0JBU0UgKyAweDFFMDAwKTsKQEAgLTkwMSwxNiArOTYwLDQ3IEBACiAJCXN3aW1fYmFzZSA9ICh1OCAqKShWSUExX0JBU0UgKyAweDE2MDAwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIDA7CisJCXN3aW1fYmFzZSA9IE5VTEw7CisJCWJyZWFrOwogCX0KIAotCXN3aW1fcmVzb3VyY2VzWzBdLm5hbWUgPSAic3dpbS1yZWdzIjsKLQlzd2ltX3Jlc291cmNlc1swXS5zdGFydCA9IChyZXNvdXJjZV9zaXplX3Qpc3dpbV9iYXNlOwotCXN3aW1fcmVzb3VyY2VzWzBdLmVuZCA9IChyZXNvdXJjZV9zaXplX3QpKHN3aW1fYmFzZSArIFNXSU1fSU9fU0laRSk7Ci0Jc3dpbV9yZXNvdXJjZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKwlpZiAoc3dpbV9iYXNlKSB7CisJCXN3aW1fcnNyYy5zdGFydCA9IChyZXNvdXJjZV9zaXplX3QpIHN3aW1fYmFzZSwKKwkJc3dpbV9yc3JjLmVuZCAgID0gKHJlc291cmNlX3NpemVfdCkgc3dpbV9iYXNlICsgMHgyMDAwLAorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnN3aW1fcGRldik7CisJfQogCi0JcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKG1hY19wbGF0Zm9ybV9kZXZpY2VzLAotCQkJCSAgICBBUlJBWV9TSVpFKG1hY19wbGF0Zm9ybV9kZXZpY2VzKSk7CisJLyoKKwkgKiBTQ1NJIGRldmljZShzKQorCSAqLworCisJc3dpdGNoIChtYWNpbnRvc2hfY29uZmlnLT5zY3NpX3R5cGUpIHsKKwljYXNlIE1BQ19TQ1NJX1FVQURSQToKKwljYXNlIE1BQ19TQ1NJX1FVQURSQTM6CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXNwXzBfcGRldik7CisJCWJyZWFrOworCWNhc2UgTUFDX1NDU0lfUVVBRFJBMjoKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlc3BfMF9wZGV2KTsKKwkJaWYgKChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfUTkwMCkgfHwKKwkJICAgIChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfUTk1MCkpCisJCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVzcF8xX3BkZXYpOworCQlicmVhazsKKwl9CisKKwkvKgorCSAqIEV0aGVybmV0IGRldmljZQorCSAqLworCisJc3dpdGNoIChtYWNpbnRvc2hfY29uZmlnLT5ldGhlcl90eXBlKSB7CisJY2FzZSBNQUNfRVRIRVJfU09OSUM6CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc29uaWNfcGRldik7CisJCWJyZWFrOworCWNhc2UgTUFDX0VUSEVSX01BQ0U6CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbWFjZV9wZGV2KTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIGFyY2hfaW5pdGNhbGwobWFjX3BsYXRmb3JtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9kZWJ1Zy5jIGIvYXJjaC9tNjhrL21hYy9kZWJ1Zy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2UwNzRjLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9tYWMvZGVidWcuYworKysgL2Rldi9udWxsCkBAIC0xLDM2NSArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9tNjhrL21hYy9kZWJ1Zy5jCi0gKgotICogU2hhbWVsZXNzbHkgc3RvbGVuIChTQ0MgY29kZSBhbmQgZ2VuZXJhbCBmcmFtZXdvcmspIGZyb206Ci0gKgotICogbGludXgvYXJjaC9tNjhrL2F0YXJpL2RlYnVnLmMKLSAqCi0gKiBBdGFyaSBkZWJ1Z2dpbmcgYW5kIHNlcmlhbCBjb25zb2xlIHN0dWZmCi0gKgotICogQXNzZW1ibGVkIG9mIHBhcnRzIG9mIGZvcm1lciBhdGFyaS9jb25maWcuYyA5Ny0xMi0xOCBieSBSb21hbiBIb2RlawotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotI2RlZmluZSBCT09USU5GT19DT01QQVRfMV8wCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2ludHMuaD4KLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWFjX3ZpZGVvYmFzZTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIG1hY19yb3dieXRlczsKLQotZXh0ZXJuIHZvaWQgbWFjX3NlcmlhbF9wcmludChjb25zdCBjaGFyICopOwotCi0jZGVmaW5lIERFQlVHX0hFQURTCi0jdW5kZWYgREVCVUdfU0NSRUVOCi0jZGVmaW5lIERFQlVHX1NFUklBTAotCi0vKgotICogVGhlc2UgdHdvIGF1eGlsaWFyeSBkZWJ1ZyBmdW5jdGlvbnMgc2hvdWxkIGdvIGF3YXkgQVNBUC4gT25seSB1c2FnZToKLSAqIGJlZm9yZSB0aGUgY29uc29sZSBvdXRwdXQgaXMgdXAgKGFmdGVyIGhlYWQuUyBjb21lIHNvbWUgb3RoZXIgY3J1Y2lhbAotICogc2V0dXAgcm91dGluZXMgOi0pIGl0IHBlcm1pdHMgd3JpdGluZyAnZGF0YScgdG8gdGhlIHNjcmVlbiBhcyBiaXQgcGF0dGVybnMKLSAqIChnb29kIGx1Y2sgcmVhZGluZyB0aG9zZSkuIEhlbHBlZCB0byBmaWd1cmUgdGhhdCB0aGUgYm9vdGluZm8gY29udGFpbmVkCi0gKiBnYXJiYWdlIGRhdGEgb24gdGhlIGFtb3VudCBhbmQgc2l6ZSBvZiBtZW1vcnkgY2h1bmtzIC4uLgotICoKLSAqIFRoZSAncG9zJyBhcmd1bWVudCBub3cgc2ltcGx5IG1lYW5zICdsaW5lZmVlZCBhZnRlciBwcmludCcgLi4uCi0gKi8KLQotI2lmZGVmIERFQlVHX1NDUkVFTgotc3RhdGljIGludCBwZW5nLCBsaW5lOwotI2VuZGlmCi0KLSNpZiAwCi0KLXZvaWQgbWFjX2RlYnVnZ2luZ19zaG9ydChpbnQgcG9zLCBzaG9ydCBudW0pCi17Ci0jaWZkZWYgREVCVUdfU0NSRUVOCi0JdW5zaWduZWQgY2hhciAqcGVuZ29mZnNldDsKLQl1bnNpZ25lZCBjaGFyICpwcHRyOwotCWludCBpOwotI2VuZGlmCi0KLSNpZmRlZiBERUJVR19TRVJJQUwKLQlwcmludGsoImRlYnVnOiAlZCAhXG4iLCBudW0pOwotI2VuZGlmCi0KLSNpZmRlZiBERUJVR19TQ1JFRU4KLQlpZiAoIU1BQ0hfSVNfTUFDKSB7Ci0JCS8qIHByaW50aygiZGVidWc6ICVkICFcbiIsIG51bSk7ICovCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBjYWxjdWxhdGUgY3VycmVudCBvZmZzZXQgKi8KLQlwZW5nb2Zmc2V0ID0gKHVuc2lnbmVkIGNoYXIgKiltYWNfdmlkZW9iYXNlICsKLQkJKDE1MCtsaW5lKjIpICogbWFjX3Jvd2J5dGVzICsgODAgKiBwZW5nOwotCi0JcHB0ciA9IHBlbmdvZmZzZXQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgOCAqIHNpemVvZihzaG9ydCk7IGkrKykgeyAvKiAjIG9mIGJpdHMgKi8KLQkJLyogICAgICAgIHZhbHVlICAgICAgICBtYXNrIGZvciBiaXQgaSwgcmV2ZXJzZSBvcmRlciAqLwotCQkqcHB0cisrID0gKG51bSAmICgxIDw8ICg4KnNpemVvZihzaG9ydCktaS0xKSkgPyAweEZGIDogMHgwMCk7Ci0JfQotCi0JcGVuZysrOwotCi0JaWYgKHBvcykgewotCQlsaW5lKys7Ci0JCXBlbmcgPSAwOwotCX0KLSNlbmRpZgotfQotCi12b2lkIG1hY19kZWJ1Z2dpbmdfbG9uZyhpbnQgcG9zLCBsb25nIGFkZHIpCi17Ci0jaWZkZWYgREVCVUdfU0NSRUVOCi0JdW5zaWduZWQgY2hhciAqcGVuZ29mZnNldDsKLQl1bnNpZ25lZCBjaGFyICpwcHRyOwotCWludCBpOwotI2VuZGlmCi0KLSNpZmRlZiBERUJVR19TRVJJQUwKLQlwcmludGsoImRlYnVnOiAjJWxkICFcbiIsIGFkZHIpOwotI2VuZGlmCi0KLSNpZmRlZiBERUJVR19TQ1JFRU4KLQlpZiAoIU1BQ0hfSVNfTUFDKSB7Ci0JCS8qIHByaW50aygiZGVidWc6ICMlbGQgIVxuIiwgYWRkcik7ICovCi0JCXJldHVybjsKLQl9Ci0KLQlwZW5nb2Zmc2V0PSh1bnNpZ25lZCBjaGFyICopKG1hY192aWRlb2Jhc2UrKDE1MCtsaW5lKjIpKm1hY19yb3dieXRlcykKLQkJICAgICs4MCpwZW5nOwotCi0JcHB0ciA9IHBlbmdvZmZzZXQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgOCAqIHNpemVvZihsb25nKTsgaSsrKSB7IC8qICMgb2YgYml0cyAqLwotCQkqcHB0cisrID0gKGFkZHIgJiAoMSA8PCAoOCpzaXplb2YobG9uZyktaS0xKSkgPyAweEZGIDogMHgwMCk7Ci0JfQotCi0JcGVuZysrOwotCi0JaWYgKHBvcykgewotCQlsaW5lKys7Ci0JCXBlbmcgPSAwOwotCX0KLSNlbmRpZgotfQotCi0jZW5kaWYgIC8qICAwICAqLwotCi0jaWZkZWYgREVCVUdfU0VSSUFMCi0vKgotICogVE9ETzogc2VyaWFsIGRlYnVnIGNvZGUKLSAqLwotCi1zdHJ1Y3QgbWFjX1NDQyB7Ci0JdV9jaGFyIGNoYV9iX2N0cmw7Ci0JdV9jaGFyIGNoYXJfZHVtbXkxOwotCXVfY2hhciBjaGFfYV9jdHJsOwotCXVfY2hhciBjaGFyX2R1bW15MjsKLQl1X2NoYXIgY2hhX2JfZGF0YTsKLQl1X2NoYXIgY2hhcl9kdW1teTM7Ci0JdV9jaGFyIGNoYV9hX2RhdGE7Ci19OwotCi0jIGRlZmluZSBzY2MgKCooKHZvbGF0aWxlIHN0cnVjdCBtYWNfU0NDKiltYWNfYmlfZGF0YS5zY2NiYXNlKSkKLQotc3RhdGljIGludCBzY2NfcG9ydCA9IC0xOwotCi1zdGF0aWMgc3RydWN0IGNvbnNvbGUgbWFjX2NvbnNvbGVfZHJpdmVyID0gewotCS5uYW1lCT0gImRlYnVnIiwKLQkuZmxhZ3MJPSBDT05fUFJJTlRCVUZGRVIsCi0JLmluZGV4CT0gLTEsCi19OwotCi0vKgotICogQ3J1ZGUgaGFjayB0byBnZXQgY29uc29sZSBvdXRwdXQgdG8gdGhlIHNjcmVlbiBiZWZvcmUgdGhlIGZyYW1lYnVmZmVyCi0gKiBpcyBpbml0aWFsaXplZCAoaGFwcGVucyBhIGxvdCBsYXRlciBpbiAyLjEhKS4KLSAqIFdlIGp1c3QgdXNlIHRoZSBjb25zb2xlIHJvdXRpbmVzIGRlY2xhcmVkIGluIGhlYWQuUywgdGhpcyB3aWxsIGludGVyZmVyZQotICogd2l0aCByZWd1bGFyIGZyYW1lYnVmZmVyIGNvbnNvbGUgb3V0cHV0IGFuZCBzaG91bGQgYmUgdXNlZCBleGNsdXNpdmVseQotICogdG8gZGVidWcga2VybmVsIHByb2JsZW1zIG1hbmlmZXN0aW5nIGJlZm9yZSBmcmFtZWJ1ZmZlciBpbml0IChha2EgV1NPRCkKLSAqCi0gKiBUbyBrZWVwIHRoaXMgaGFjayBmcm9tIGludGVyZmVyaW5nIHdpdGggdGhlIHJlZ3VsYXIgY29uc29sZSBkcml2ZXIsIGVpdGhlcgotICogZGVyZWdpc3RlciB0aGlzIGRyaXZlciBiZWZvcmUvb24gZnJhbWVidWZmZXIgY29uc29sZSBpbml0LCBvciBzaWxlbmNlIHRoaXMKLSAqIGZ1bmN0aW9uIGFmdGVyIHRoZSBmYmNvbiBkcml2ZXIgaXMgcnVubmluZyAod2lsbCBsb3NlIGNvbnNvbGUgbWVzc2FnZXMhPykuCi0gKiBUbyBkZWJ1ZyByZWFsIGVhcmx5IGJ1Z3MsIG5lZWQgdG8gd3JpdGUgYSAnbWFjX3JlZ2lzdGVyX2NvbnNvbGVfaGFjaygpJwotICogdGhhdCBpcyBjYWxsZWQgZnJvbSBzdGFydF9rZXJuZWwoKSBiZWZvcmUgc2V0dXBfYXJjaCgpIGFuZCBqdXN0IHJlZ2lzdGVycwotICogdGhpcyBkcml2ZXIgaWYgTWFjLgotICovCi0KLXN0YXRpYyB2b2lkIG1hY19kZWJ1Z19jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0JbWFjX3NlcmlhbF9wcmludChzdHIpOwotfQotCi0KLQotLyogTWFjOiBsb29wc19wZXJfamlmZnkgbWluLiAxOTAwMCBePSAuNSB1czsgTUZQREVMQVkgd2FzIDAuNiB1cyovCi0KLSNkZWZpbmUgdVNFQyAxCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtYWNfc2NjYl9vdXQoY2hhciBjKQotewotCWludCBpOwotCi0JZG8gewotCQlmb3IgKGkgPSB1U0VDOyBpID4gMDsgLS1pKQotCQkJYmFycmllcigpOwotCX0gd2hpbGUgKCEoc2NjLmNoYV9iX2N0cmwgJiAweDA0KSk7IC8qIHdhaXQgZm9yIHR4IGJ1ZiBlbXB0eSAqLwotCWZvciAoaSA9IHVTRUM7IGkgPiAwOyAtLWkpCi0JCWJhcnJpZXIoKTsKLQlzY2MuY2hhX2JfZGF0YSA9IGM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtYWNfc2NjYV9vdXQoY2hhciBjKQotewotCWludCBpOwotCi0JZG8gewotCQlmb3IgKGkgPSB1U0VDOyBpID4gMDsgLS1pKQotCQkJYmFycmllcigpOwotCX0gd2hpbGUgKCEoc2NjLmNoYV9hX2N0cmwgJiAweDA0KSk7IC8qIHdhaXQgZm9yIHR4IGJ1ZiBlbXB0eSAqLwotCWZvciAoaSA9IHVTRUM7IGkgPiAwOyAtLWkpCi0JCWJhcnJpZXIoKTsKLQlzY2MuY2hhX2FfZGF0YSA9IGM7Ci19Ci0KLXN0YXRpYyB2b2lkIG1hY19zY2NiX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsCi0JCQkJICAgdW5zaWduZWQgaW50IGNvdW50KQotewotCXdoaWxlIChjb3VudC0tKSB7Ci0JCWlmICgqc3RyID09ICdcbicpCi0JCQltYWNfc2NjYl9vdXQoJ1xyJyk7Ci0JCW1hY19zY2NiX291dCgqc3RyKyspOwotCX0KLX0KLQotc3RhdGljIHZvaWQgbWFjX3NjY2FfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnN0ciwKLQkJCQkgICB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0Jd2hpbGUgKGNvdW50LS0pIHsKLQkJaWYgKCpzdHIgPT0gJ1xuJykKLQkJCW1hY19zY2NhX291dCgnXHInKTsKLQkJbWFjX3NjY2Ffb3V0KCpzdHIrKyk7Ci0JfQotfQotCi0KLS8qIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBkbyBhIHF1aWNrJ24nZGlydHkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIE1GUCBvcgotICogU0NDIHNlcmlhbCBwb3J0cy4gVGhleSdyZSB1c2VkIGJ5IHRoZSBkZWJ1Z2dpbmcgaW50ZXJmYWNlLCBrZ2RiLCBhbmQgdGhlCi0gKiBzZXJpYWwgY29uc29sZSBjb2RlLiAqLwotI2RlZmluZSBTQ0NCX1dSSVRFKHJlZyx2YWwpCQkJCVwKLQlkbyB7CQkJCQkJXAotCQlpbnQgaTsJCQkJCVwKLQkJc2NjLmNoYV9iX2N0cmwgPSAocmVnKTsJCQlcCi0JCWZvciAoaSA9IHVTRUM7IGkgPiAwOyAtLWkpCQlcCi0JCQliYXJyaWVyKCk7CQkJXAotCQlzY2MuY2hhX2JfY3RybCA9ICh2YWwpOwkJCVwKLQkJZm9yIChpID0gdVNFQzsgaSA+IDA7IC0taSkJCVwKLQkJCWJhcnJpZXIoKTsJCQlcCi0JfSB3aGlsZSgwKQotCi0jZGVmaW5lIFNDQ0FfV1JJVEUocmVnLHZhbCkJCQkJXAotCWRvIHsJCQkJCQlcCi0JCWludCBpOwkJCQkJXAotCQlzY2MuY2hhX2FfY3RybCA9IChyZWcpOwkJCVwKLQkJZm9yIChpID0gdVNFQzsgaSA+IDA7IC0taSkJCVwKLQkJCWJhcnJpZXIoKTsJCQlcCi0JCXNjYy5jaGFfYV9jdHJsID0gKHZhbCk7CQkJXAotCQlmb3IgKGkgPSB1U0VDOyBpID4gMDsgLS1pKQkJXAotCQkJYmFycmllcigpOwkJCVwKLQl9IHdoaWxlKDApCi0KLS8qIGxvb3BzX3Blcl9qaWZmeSBpc24ndCBpbml0aWFsaXplZCB5ZXQsIHNvIHdlIGNhbid0IHVzZSB1ZGVsYXkoKS4gVGhpcyBkb2VzIGEKLSAqIGRlbGF5IG9mIH4gNjB1cy4gKi8KLS8qIE1hYzogbG9vcHNfcGVyX2ppZmZ5IG1pbi4gMTkwMDAgXj0gLjUgdXM7IE1GUERFTEFZIHdhcyAwLjYgdXMqLwotI2RlZmluZSBMT05HX0RFTEFZKCkJCQkJCVwKLQlkbyB7CQkJCQkJXAotCQlpbnQgaTsJCQkJCVwKLQkJZm9yIChpID0gNjAqdVNFQzsgaSA+IDA7IC0taSkJCVwKLQkJICAgIGJhcnJpZXIoKTsJCQkJXAotCX0gd2hpbGUoMCkKLQotc3RhdGljIHZvaWQgX19pbml0IG1hY19pbml0X3NjY19wb3J0KGludCBjZmxhZywgaW50IHBvcnQpCi17Ci0JLyoKLQkgKiBiYXVkIHJhdGVzOiAxMjAwLCAxODAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOS4yaywgMzguNGssIDU3LjZrLCAxMTUuMmsKLQkgKi8KLQotCXN0YXRpYyBpbnQgY2xrc3JjX3RhYmxlWzldID0KLQkJLyogcmVnIDExOiAweDUwID0gQlJHLCAweDAwID0gUlR4QywgMHgyOCA9IFRSeEMgKi8KLQkJeyAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDAwLCAweDAwIH07Ci0Jc3RhdGljIGludCBjbGttb2RlX3RhYmxlWzldID0KLQkJLyogcmVnIDQ6IDB4NDAgPSB4MTYsIDB4ODAgPSB4MzIsIDB4YzAgPSB4NjQgKi8KLQkJeyAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweGMwLCAweDgwIH07Ci0Jc3RhdGljIGludCBkaXZfdGFibGVbOV0gPQotCQkvKiByZWcxMiAoQlJHIGxvdykgKi8KLQkJeyA5NCwgNjIsIDQ2LCAyMiwgMTAsIDQsIDEsIDAsIDAgfTsKLQotCWludCBiYXVkID0gY2ZsYWcgJiBDQkFVRDsKLQlpbnQgY2xrc3JjLCBjbGttb2RlLCBkaXYsIHJlZzMsIHJlZzU7Ci0KLQlpZiAoY2ZsYWcgJiBDQkFVREVYKQotCQliYXVkICs9IEIzODQwMDsKLQlpZiAoYmF1ZCA8IEIxMjAwIHx8IGJhdWQgPiBCMzg0MDArMikKLQkJYmF1ZCA9IEI5NjAwOyAvKiB1c2UgZGVmYXVsdCA5NjAwYnBzIGZvciBub24taW1wbGVtZW50ZWQgcmF0ZXMgKi8KLQliYXVkIC09IEIxMjAwOyAvKiB0YWJsZXMgc3RhcnRzIGF0IDEyMDBicHMgKi8KLQotCWNsa3NyYyAgPSBjbGtzcmNfdGFibGVbYmF1ZF07Ci0JY2xrbW9kZSA9IGNsa21vZGVfdGFibGVbYmF1ZF07Ci0JZGl2ICAgICA9IGRpdl90YWJsZVtiYXVkXTsKLQotCXJlZzMgPSAoKChjZmxhZyAmIENTSVpFKSA9PSBDUzgpID8gMHhjMCA6IDB4NDApOwotCXJlZzUgPSAoKChjZmxhZyAmIENTSVpFKSA9PSBDUzgpID8gMHg2MCA6IDB4MjApIHwgMHg4MiAvKiBhc3NlcnQgRFRSL1JUUyAqLzsKLQotCWlmIChwb3J0ID09IDEpIHsKLQkJKHZvaWQpc2NjLmNoYV9iX2N0cmw7CS8qIHJlc2V0IHJlZyBwb2ludGVyICovCi0JCVNDQ0JfV1JJVEUoOSwgMHhjMCk7CS8qIHJlc2V0ICovCi0JCUxPTkdfREVMQVkoKTsJCS8qIGV4dHJhIGRlbGF5IGFmdGVyIFdSOSBhY2Nlc3MgKi8KLQkJU0NDQl9XUklURSg0LCAoY2ZsYWcgJiBQQVJFTkIpID8gKChjZmxhZyAmIFBBUk9ERCkgPyAweDAxIDogMHgwMykgOiAwIHwKLQkJCSAgIDB4MDQgLyogMSBzdG9wYml0ICovIHwKLQkJCSAgIGNsa21vZGUpOwotCQlTQ0NCX1dSSVRFKDMsIHJlZzMpOwotCQlTQ0NCX1dSSVRFKDUsIHJlZzUpOwotCQlTQ0NCX1dSSVRFKDksIDApOwkvKiBubyBpbnRlcnJ1cHRzICovCi0JCUxPTkdfREVMQVkoKTsJCS8qIGV4dHJhIGRlbGF5IGFmdGVyIFdSOSBhY2Nlc3MgKi8KLQkJU0NDQl9XUklURSgxMCwgMCk7CS8qIE5SWiBtb2RlICovCi0JCVNDQ0JfV1JJVEUoMTEsIGNsa3NyYyk7CS8qIG1haW4gY2xvY2sgc291cmNlICovCi0JCVNDQ0JfV1JJVEUoMTIsIGRpdik7CS8qIEJSRyB2YWx1ZSAqLwotCQlTQ0NCX1dSSVRFKDEzLCAwKTsJLyogQlJHIGhpZ2ggYnl0ZSAqLwotCQlTQ0NCX1dSSVRFKDE0LCAxKTsKLQkJU0NDQl9XUklURSgzLCByZWczIHwgMSk7Ci0JCVNDQ0JfV1JJVEUoNSwgcmVnNSB8IDgpOwotCX0gZWxzZSBpZiAocG9ydCA9PSAwKSB7Ci0JCSh2b2lkKXNjYy5jaGFfYV9jdHJsOwkvKiByZXNldCByZWcgcG9pbnRlciAqLwotCQlTQ0NBX1dSSVRFKDksIDB4YzApOwkvKiByZXNldCAqLwotCQlMT05HX0RFTEFZKCk7CQkvKiBleHRyYSBkZWxheSBhZnRlciBXUjkgYWNjZXNzICovCi0JCVNDQ0FfV1JJVEUoNCwgKGNmbGFnICYgUEFSRU5CKSA/ICgoY2ZsYWcgJiBQQVJPREQpID8gMHgwMSA6IDB4MDMpIDogMCB8Ci0JCQkgIDB4MDQgLyogMSBzdG9wYml0ICovIHwKLQkJCSAgY2xrbW9kZSk7Ci0JCVNDQ0FfV1JJVEUoMywgcmVnMyk7Ci0JCVNDQ0FfV1JJVEUoNSwgcmVnNSk7Ci0JCVNDQ0FfV1JJVEUoOSwgMCk7CS8qIG5vIGludGVycnVwdHMgKi8KLQkJTE9OR19ERUxBWSgpOwkJLyogZXh0cmEgZGVsYXkgYWZ0ZXIgV1I5IGFjY2VzcyAqLwotCQlTQ0NBX1dSSVRFKDEwLCAwKTsJLyogTlJaIG1vZGUgKi8KLQkJU0NDQV9XUklURSgxMSwgY2xrc3JjKTsJLyogbWFpbiBjbG9jayBzb3VyY2UgKi8KLQkJU0NDQV9XUklURSgxMiwgZGl2KTsJLyogQlJHIHZhbHVlICovCi0JCVNDQ0FfV1JJVEUoMTMsIDApOwkvKiBCUkcgaGlnaCBieXRlICovCi0JCVNDQ0FfV1JJVEUoMTQsIDEpOwotCQlTQ0NBX1dSSVRFKDMsIHJlZzMgfCAxKTsKLQkJU0NDQV9XUklURSg1LCByZWc1IHwgOCk7Ci0JfQotfQotI2VuZGlmIC8qIERFQlVHX1NFUklBTCAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBtYWNfZGVidWdfc2V0dXAoY2hhciAqYXJnKQotewotCWlmICghTUFDSF9JU19NQUMpCi0JCXJldHVybiAwOwotCi0jaWZkZWYgREVCVUdfU0VSSUFMCi0JaWYgKCFzdHJjbXAoYXJnLCAic2VyIikgfHwgIXN0cmNtcChhcmcsICJzZXIxIikpIHsKLQkJLyogTWFjIG1vZGVtIHBvcnQgKi8KLQkJbWFjX2luaXRfc2NjX3BvcnQoQjk2MDB8Q1M4LCAwKTsKLQkJbWFjX2NvbnNvbGVfZHJpdmVyLndyaXRlID0gbWFjX3NjY2FfY29uc29sZV93cml0ZTsKLQkJc2NjX3BvcnQgPSAwOwotCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICJzZXIyIikpIHsKLQkJLyogTWFjIHByaW50ZXIgcG9ydCAqLwotCQltYWNfaW5pdF9zY2NfcG9ydChCOTYwMHxDUzgsIDEpOwotCQltYWNfY29uc29sZV9kcml2ZXIud3JpdGUgPSBtYWNfc2NjYl9jb25zb2xlX3dyaXRlOwotCQlzY2NfcG9ydCA9IDE7Ci0JfQotI2VuZGlmCi0jaWZkZWYgREVCVUdfSEVBRFMKLQlpZiAoIXN0cmNtcChhcmcsICJzY24iKSB8fCAhc3RyY21wKGFyZywgImNvbiIpKSB7Ci0JCS8qIGRpc3BsYXksIHVzaW5nIGhlYWQuUyBjb25zb2xlIHJvdXRpbmVzICovCi0JCW1hY19jb25zb2xlX2RyaXZlci53cml0ZSA9IG1hY19kZWJ1Z19jb25zb2xlX3dyaXRlOwotCX0KLSNlbmRpZgotCWlmIChtYWNfY29uc29sZV9kcml2ZXIud3JpdGUpCi0JCXJlZ2lzdGVyX2NvbnNvbGUoJm1hY19jb25zb2xlX2RyaXZlcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLWVhcmx5X3BhcmFtKCJkZWJ1ZyIsIG1hY19kZWJ1Z19zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL21hY2ludHMuYyBiL2FyY2gvbTY4ay9tYWMvbWFjaW50cy5jCmluZGV4IDIzNzExMDcuLjkwMGQ4OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvbWFjaW50cy5jCisrKyBiL2FyY2gvbTY4ay9tYWMvbWFjaW50cy5jCkBAIC0zNCw5ICszNCw3IEBACiAgKgogICoJMwktIHVudXNlZCAoPykKICAqCi0gKgk0CS0gU0NDIChzbG90IG51bWJlciBkZXRlcm1pbmVkIGJ5IHJlYWRpbmcgUlIzIG9uIHRoZSBTU0MgaXRzZWxmKQotICoJCSAgLSBzbG90IDE6IFNDQyBjaGFubmVsIEEKLSAqCQkgIC0gc2xvdCAyOiBTQ0MgY2hhbm5lbCBCCisgKgk0CS0gU0NDCiAgKgogICoJNQktIHVudXNlZCAoPykKICAqCQkgIFtzZXJpYWwgZXJyb3JzIG9yIHNwZWNpYWwgY29uZGl0aW9ucyBzZWVtIHRvIHJhaXNlIGxldmVsIDYKQEAgLTU1LDggKzUzLDYgQEAKICAqCQkgIC0gc2xvdCA1OiBTbG90ICRFCiAgKgogICoJNAktIFNDQyBJT1AKLSAqCQkgIC0gc2xvdCAxOiBTQ0MgY2hhbm5lbCBBCi0gKgkJICAtIHNsb3QgMjogU0NDIGNoYW5uZWwgQgogICoKICAqCTUJLSBJU00gSU9QIChBREI/KQogICoKQEAgLTEzNiwxMyArMTMyLDggQEAKICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vbWFjX29zcy5oPgogCi0jZGVmaW5lIERFQlVHX1NQVVJJT1VTCiAjZGVmaW5lIFNIVVRVUF9TT05JQwogCi0vKiBTQ0MgaW50ZXJydXB0IG1hc2sgKi8KLQotc3RhdGljIGludCBzY2NfbWFzazsKLQogLyoKICAqIFZJQS9SQlYgaG9va3MKICAqLwpAQCAtMTkxLDEzICsxODIsNiBAQAogZXh0ZXJuIHZvaWQgYmFib29uX2lycV9jbGVhcihpbnQpOwogCiAvKgotICogU0NDIGludGVycnVwdCByb3V0aW5lcwotICovCi0KLXN0YXRpYyB2b2lkIHNjY19pcnFfZW5hYmxlKHVuc2lnbmVkIGludCk7Ci1zdGF0aWMgdm9pZCBzY2NfaXJxX2Rpc2FibGUodW5zaWduZWQgaW50KTsKLQotLyoKICAqIGNvbnNvbGVfbG9nbGV2ZWwgZGV0ZXJtaW5lcyBOTUkgaGFuZGxlciBmdW5jdGlvbgogICovCiAKQEAgLTIyMSw4ICsyMDUsNiBAQAogI2lmZGVmIERFQlVHX01BQ0lOVFMKIAlwcmludGsoIm1hY19pbml0X0lSUSgpOiBTZXR0aW5nIHRoaW5ncyB1cC4uLlxuIik7CiAjZW5kaWYKLQlzY2NfbWFzayA9IDA7Ci0KIAltNjhrX3NldHVwX2lycV9jb250cm9sbGVyKCZtYWNfaXJxX2NvbnRyb2xsZXIsIElSUV9VU0VSLAogCQkJCSAgTlVNX01BQ19TT1VSQ0VTIC0gSVJRX1VTRVIpOwogCS8qIE1ha2Ugc3VyZSB0aGUgU09OSUMgaW50ZXJydXB0IGlzIGNsZWFyZWQgb3IgdGhpbmdzIGdldCB1Z2x5ICovCkBAIC0yODMsMTUgKzI2NSwxNiBAQAogCQkJdmlhX2lycV9lbmFibGUoaXJxKTsKIAkJYnJlYWs7CiAJY2FzZSAzOgotCWNhc2UgNDoKIAljYXNlIDU6CiAJY2FzZSA2OgogCQlpZiAocHNjX3ByZXNlbnQpCiAJCQlwc2NfaXJxX2VuYWJsZShpcnEpOwogCQllbHNlIGlmIChvc3NfcHJlc2VudCkKIAkJCW9zc19pcnFfZW5hYmxlKGlycSk7Ci0JCWVsc2UgaWYgKGlycV9zcmMgPT0gNCkKLQkJCXNjY19pcnFfZW5hYmxlKGlycSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJaWYgKHBzY19wcmVzZW50KQorCQkJcHNjX2lycV9lbmFibGUoaXJxKTsKIAkJYnJlYWs7CiAJY2FzZSA4OgogCQlpZiAoYmFib29uX3ByZXNlbnQpCkBAIC0zMTYsMTUgKzI5OSwxNiBAQAogCQkJdmlhX2lycV9kaXNhYmxlKGlycSk7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQljYXNlIDQ6CiAJY2FzZSA1OgogCWNhc2UgNjoKIAkJaWYgKHBzY19wcmVzZW50KQogCQkJcHNjX2lycV9kaXNhYmxlKGlycSk7CiAJCWVsc2UgaWYgKG9zc19wcmVzZW50KQogCQkJb3NzX2lycV9kaXNhYmxlKGlycSk7Ci0JCWVsc2UgaWYgKGlycV9zcmMgPT0gNCkKLQkJCXNjY19pcnFfZGlzYWJsZShpcnEpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWlmIChwc2NfcHJlc2VudCkKKwkJCXBzY19pcnFfZGlzYWJsZShpcnEpOwogCQlicmVhazsKIAljYXNlIDg6CiAJCWlmIChiYWJvb25fcHJlc2VudCkKQEAgLTM0Nyw3ICszMzEsNiBAQAogCQkJdmlhX2lycV9jbGVhcihpcnEpOwogCQlicmVhazsKIAljYXNlIDM6Ci0JY2FzZSA0OgogCWNhc2UgNToKIAljYXNlIDY6CiAJCWlmIChwc2NfcHJlc2VudCkKQEAgLTM1NSw2ICszMzgsMTAgQEAKIAkJZWxzZSBpZiAob3NzX3ByZXNlbnQpCiAJCQlvc3NfaXJxX2NsZWFyKGlycSk7CiAJCWJyZWFrOworCWNhc2UgNDoKKwkJaWYgKHBzY19wcmVzZW50KQorCQkJcHNjX2lycV9jbGVhcihpcnEpOworCQlicmVhazsKIAljYXNlIDg6CiAJCWlmIChiYWJvb25fcHJlc2VudCkKIAkJCWJhYm9vbl9pcnFfY2xlYXIoaXJxKTsKQEAgLTM3NCwxMyArMzYxLDE3IEBACiAJCWVsc2UKIAkJCXJldHVybiB2aWFfaXJxX3BlbmRpbmcoaXJxKTsKIAljYXNlIDM6Ci0JY2FzZSA0OgogCWNhc2UgNToKIAljYXNlIDY6CiAJCWlmIChwc2NfcHJlc2VudCkKIAkJCXJldHVybiBwc2NfaXJxX3BlbmRpbmcoaXJxKTsKIAkJZWxzZSBpZiAob3NzX3ByZXNlbnQpCiAJCQlyZXR1cm4gb3NzX2lycV9wZW5kaW5nKGlycSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJaWYgKHBzY19wcmVzZW50KQorCQkJcHNjX2lycV9wZW5kaW5nKGlycSk7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTQ0OCw1OSArNDM5LDMgQEAKIAlpbl9ubWktLTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9Ci0KLS8qCi0gKiBTaW1wbGUgcm91dGluZXMgZm9yIG1hc2tpbmcgYW5kIHVubWFza2luZwotICogU0NDIGludGVycnVwdHMgaW4gY2FzZXMgd2hlcmUgdGhpcyBjYW4ndCBiZQotICogZG9uZSBpbiBoYXJkd2FyZSAob25seSB0aGUgUFNDIGNhbiBkbyB0aGF0LikKLSAqLwotCi1zdGF0aWMgdm9pZCBzY2NfaXJxX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBpcnFfaWR4ID0gSVJRX0lEWChpcnEpOwotCi0Jc2NjX21hc2sgfD0gKDEgPDwgaXJxX2lkeCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjY19pcnFfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBpcnFfaWR4ID0gSVJRX0lEWChpcnEpOwotCi0Jc2NjX21hc2sgJj0gfigxIDw8IGlycV9pZHgpOwotfQotCi0vKgotICogU0NDIG1hc3RlciBpbnRlcnJ1cHQgaGFuZGxlci4gV2UgaGF2ZSB0byBkbyBhIGJpdCBvZiBtYWdpYyBoZXJlCi0gKiB0byBmaWd1cmUgb3V0IHdoYXQgY2hhbm5lbCBnYXZlIHVzIHRoZSBpbnRlcnJ1cHQ7IHB1dHRpbmcgdGhpcwotICogaGVyZSBpcyBjbGVhbmVyIHRoYW4gaGFja2luZyBpdCBpbnRvIGRyaXZlcnMvY2hhci9tYWNzZXJpYWwuYy4KLSAqLwotCi12b2lkIG1hY19zY2NfZGlzcGF0Y2goaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnNjYyA9ICh1bnNpZ25lZCBjaGFyICopIG1hY19iaV9kYXRhLnNjY2Jhc2UgKyAyOwotCXVuc2lnbmVkIGNoYXIgcmVnOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBSZWFkIFJSMyBmcm9tIHRoZSBjaGlwLiBBbHdheXMgZG8gdGhpcyBvbiBjaGFubmVsIEEgKi8KLQkvKiBUaGlzIG11c3QgYmUgYW4gYXRvbWljIG9wZXJhdGlvbiBzbyBkaXNhYmxlIGlycXMuICAgKi8KLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkqc2NjID0gMzsKLQlyZWcgPSAqc2NjOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCS8qIE5vdyBkaXNwYXRjaC4gQml0cyAwLTIgYXJlIGZvciBjaGFubmVsIEIgYW5kICovCi0JLyogYml0cyAzLTUgYXJlIGZvciBjaGFubmVsIEEuIFdlIGNhbiBzYWZlbHkgICAgKi8KLQkvKiBpZ25vcmUgdGhlIHJlbWFpbmluZyBiaXRzIGhlcmUuICAgICAgICAgICAgICAqLwotCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JLyogTm90ZSB0aGF0IHdlJ3JlIGlnbm9yaW5nIHNjY19tYXNrIGZvciBub3cuICAgKi8KLQkvKiBJZiB3ZSBhY3R1YWxseSBtYXNrIHRoZSBpbnRzIHRoZW4gd2UgdGVuZCB0byAqLwotCS8qIGdldCBoYW1tZXJlZCBieSB2ZXJ5IHBlcnNpc3RlbnQgU0NDIGlycXMsICAgICovCi0JLyogYW5kIHNpbmNlIHRoZXkncmUgYXV0b3ZlY3RvciBpbnRlcnJ1cHRzIHRoZXkgKi8KLQkvKiBwcmV0dHkgbXVjaCBraWxsIHRoZSBzeXN0ZW0uICAgICAgICAgICAgICAgICAqLwotCi0JaWYgKHJlZyAmIDB4MzgpCi0JCW02OGtfaGFuZGxlX2ludChJUlFfU0NDQSk7Ci0JaWYgKHJlZyAmIDB4MDcpCi0JCW02OGtfaGFuZGxlX2ludChJUlFfU0NDQik7Ci19CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL29zcy5jIGIvYXJjaC9tNjhrL21hYy9vc3MuYwppbmRleCBmM2QyM2Q2Li5hOWMwZjVhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL29zcy5jCisrKyBiL2FyY2gvbTY4ay9tYWMvb3NzLmMKQEAgLTMzLDcgKzMzLDYgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBvc3NfbnVidXNfaXJxKGludCwgdm9pZCAqKTsKIAogZXh0ZXJuIGlycXJldHVybl90IHZpYTFfaXJxKGludCwgdm9pZCAqKTsKLWV4dGVybiBpcnFyZXR1cm5fdCBtYWNfc2NjX2Rpc3BhdGNoKGludCwgdm9pZCAqKTsKIAogLyoKICAqIEluaXRpYWxpemUgdGhlIE9TUwpAQCAtNjksOSArNjgsNiBAQAogCWlmIChyZXF1ZXN0X2lycShPU1NfSVJRTEVWX1NDU0ksIG9zc19pcnEsIElSUV9GTEdfTE9DSywKIAkJCSJzY3NpIiwgKHZvaWQgKikgb3NzKSkKIAkJcHJfZXJyKCJDb3VsZG4ndCByZWdpc3RlciAlcyBpbnRlcnJ1cHRcbiIsICJzY3NpIik7Ci0JaWYgKHJlcXVlc3RfaXJxKE9TU19JUlFMRVZfSU9QU0NDLCBtYWNfc2NjX2Rpc3BhdGNoLCBJUlFfRkxHX0xPQ0ssCi0JCQkic2NjIiwgbWFjX3NjY19kaXNwYXRjaCkpCi0JCXByX2VycigiQ291bGRuJ3QgcmVnaXN0ZXIgJXMgaW50ZXJydXB0XG4iLCAic2NjIik7CiAJaWYgKHJlcXVlc3RfaXJxKE9TU19JUlFMRVZfTlVCVVMsIG9zc19udWJ1c19pcnEsIElSUV9GTEdfTE9DSywKIAkJCSJudWJ1cyIsICh2b2lkICopIG9zcykpCiAJCXByX2VycigiQ291bGRuJ3QgcmVnaXN0ZXIgJXMgaW50ZXJydXB0XG4iLCAibnVidXMiKTsKQEAgLTE3Miw5ICsxNjgsNyBAQAogCXByaW50aygib3NzX2lycV9lbmFibGUoJWQpXG4iLCBpcnEpOwogI2VuZGlmCiAJc3dpdGNoKGlycSkgewotCQljYXNlIElSUV9TQ0M6Ci0JCWNhc2UgSVJRX1NDQ0E6Ci0JCWNhc2UgSVJRX1NDQ0I6CisJCWNhc2UgSVJRX01BQ19TQ0M6CiAJCQlvc3MtPmlycV9sZXZlbFtPU1NfSU9QU0NDXSA9IE9TU19JUlFMRVZfSU9QU0NDOwogCQkJYnJlYWs7CiAJCWNhc2UgSVJRX01BQ19BREI6CkBAIC0yMTIsOSArMjA2LDcgQEAKIAlwcmludGsoIm9zc19pcnFfZGlzYWJsZSglZClcbiIsIGlycSk7CiAjZW5kaWYKIAlzd2l0Y2goaXJxKSB7Ci0JCWNhc2UgSVJRX1NDQzoKLQkJY2FzZSBJUlFfU0NDQToKLQkJY2FzZSBJUlFfU0NDQjoKKwkJY2FzZSBJUlFfTUFDX1NDQzoKIAkJCW9zcy0+aXJxX2xldmVsW09TU19JT1BTQ0NdID0gT1NTX0lSUUxFVl9ESVNBQkxFRDsKIAkJCWJyZWFrOwogCQljYXNlIElSUV9NQUNfQURCOgpAQCAtMjUwLDkgKzI0Miw3IEBACiB2b2lkIG9zc19pcnFfY2xlYXIoaW50IGlycSkgewogCS8qIEZJWE1FOiBob3cgdG8gZG8gdGhpcyBvbiBPU1M/ICovCiAJc3dpdGNoKGlycSkgewotCQljYXNlIElSUV9TQ0M6Ci0JCWNhc2UgSVJRX1NDQ0E6Ci0JCWNhc2UgSVJRX1NDQ0I6CisJCWNhc2UgSVJRX01BQ19TQ0M6CiAJCQlvc3MtPmlycV9wZW5kaW5nICY9IH5PU1NfSVBfSU9QU0NDOwogCQkJYnJlYWs7CiAJCWNhc2UgSVJRX01BQ19BREI6CkBAIC0yODAsOSArMjcwLDcgQEAKIGludCBvc3NfaXJxX3BlbmRpbmcoaW50IGlycSkKIHsKIAlzd2l0Y2goaXJxKSB7Ci0JCWNhc2UgSVJRX1NDQzoKLQkJY2FzZSBJUlFfU0NDQToKLQkJY2FzZSBJUlFfU0NDQjoKKwkJY2FzZSBJUlFfTUFDX1NDQzoKIAkJCXJldHVybiBvc3MtPmlycV9wZW5kaW5nICYgT1NTX0lQX0lPUFNDQzsKIAkJCWJyZWFrOwogCQljYXNlIElSUV9NQUNfQURCOgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy92aWEuYyBiL2FyY2gvbTY4ay9tYWMvdmlhLmMKaW5kZXggMTFiY2UzYy4uZTcxMTY2ZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy92aWEuYworKysgYi9hcmNoL202OGsvbWFjL3ZpYS5jCkBAIC04NCw4ICs4NCw2IEBACiB2b2lkIHZpYV9pcnFfZGlzYWJsZShpbnQgaXJxKTsKIHZvaWQgdmlhX2lycV9jbGVhcihpbnQgaXJxKTsKIAotZXh0ZXJuIGlycXJldHVybl90IG1hY19zY2NfZGlzcGF0Y2goaW50LCB2b2lkICopOwotCiAvKgogICogSW5pdGlhbGl6ZSB0aGUgVklBcwogICoKQEAgLTMxMSwxMSArMzA5LDYgQEAKIAlpZiAocmVxdWVzdF9pcnEoSVJRX0FVVE9fMiwgdmlhMl9pcnEsIElSUV9GTEdfTE9DS3xJUlFfRkxHX0ZBU1QsCiAJCQkidmlhMiIsICh2b2lkICopIHZpYTIpKQogCQlwcl9lcnIoIkNvdWxkbid0IHJlZ2lzdGVyICVzIGludGVycnVwdFxuIiwgInZpYTIiKTsKLQlpZiAoIXBzY19wcmVzZW50KSB7Ci0JCWlmIChyZXF1ZXN0X2lycShJUlFfQVVUT180LCBtYWNfc2NjX2Rpc3BhdGNoLCBJUlFfRkxHX0xPQ0ssCi0JCQkJInNjYyIsIG1hY19zY2NfZGlzcGF0Y2gpKQotCQkJcHJfZXJyKCJDb3VsZG4ndCByZWdpc3RlciAlcyBpbnRlcnJ1cHRcbiIsICJzY2MiKTsKLQl9CiAJaWYgKHJlcXVlc3RfaXJxKElSUV9NQUNfTlVCVVMsIHZpYV9udWJ1c19pcnEsCiAJCQlJUlFfRkxHX0xPQ0t8SVJRX0ZMR19GQVNULCAibnVidXMiLCAodm9pZCAqKSB2aWEyKSkKIAkJcHJfZXJyKCJDb3VsZG4ndCByZWdpc3RlciAlcyBpbnRlcnJ1cHRcbiIsICJudWJ1cyIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL2ttYXAuYyBiL2FyY2gvbTY4ay9tbS9rbWFwLmMKaW5kZXggZGY2MjBhYy4uNjkzNDU4NCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21tL2ttYXAuYworKysgYi9hcmNoL202OGsvbW0va21hcC5jCkBAIC05OSw4ICs5OSw3IEBACiAjZW5kaWYKIAogLyoKLSAqIE1hcCBzb21lIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UuIFRoZQotICogY29kZSBpcyBjb3BpZWQgYW5kIGFkYXB0ZWQgZnJvbSBtYXBfY2h1bmsoKS4KKyAqIE1hcCBzb21lIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UuCiAgKi8KIC8qIFJld3JpdHRlbiBieSBBbmRyZWFzIFNjaHdhYiB0byByZW1vdmUgYWxsIHJhY2VzLiAqLwogCkBAIC0xMTYsNyArMTE1LDcgQEAKIAkvKgogCSAqIERvbid0IGFsbG93IG1hcHBpbmdzIHRoYXQgd3JhcC4uCiAJICovCi0JaWYgKCFzaXplIHx8IHNpemUgPiBwaHlzYWRkciArIHNpemUpCisJaWYgKCFzaXplIHx8IHBoeXNhZGRyID4gKHVuc2lnbmVkIGxvbmcpKC1zaXplKSkKIAkJcmV0dXJuIE5VTEw7CiAKICNpZmRlZiBDT05GSUdfQU1JR0EKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDVjOWVjZDQuLjk1OWNiMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjIxLDYgKzIyMSwxMCBAQAogCiAJcC0+dGhyZWFkLnVzcCA9IHVzcDsKIAlwLT50aHJlYWQua3NwID0gKHVuc2lnbmVkIGxvbmcpY2hpbGRzdGFjazsKKworCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1NFVFRMUykKKwkJdGFza190aHJlYWRfaW5mbyhwKS0+dHBfdmFsdWUgPSByZWdzLT5kNTsKKwogCS8qCiAJICogTXVzdCBzYXZlIHRoZSBjdXJyZW50IFNGQy9ERkMgdmFsdWUsIE5PVCB0aGUgdmFsdWUgd2hlbgogCSAqIHRoZSBwYXJlbnQgd2FzIGxhc3QgZGVzY2hlZHVsZWQgLSBSR0ggIDEwLTA4LTk2CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNGQzODI4OS4uODVlZDJmOSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wdHJhY2UuYwpAQCAtMzE5LDYgKzMxOSwxMSBAQAogCQl9CiAjZW5kaWYKIAorCWNhc2UgUFRSQUNFX0dFVF9USFJFQURfQVJFQToKKwkJcmV0ID0gcHV0X3VzZXIodGFza190aHJlYWRfaW5mbyhjaGlsZCktPnRwX3ZhbHVlLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWRhdGEpOworCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJcmV0ID0gLUVJTzsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c19tNjhrLmMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzX202OGsuYwppbmRleCBiNjdjYmM3Li45MjNkZDRhIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzX202OGsuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzX202OGsuYwpAQCAtMTkwLDMgKzE5MCwzOSBAQAogCQkJOiAiZCIgKF9fYSksICJkIiAoX19iKSwgImQiIChfX2MpKTsKIAlyZXR1cm4gX19yZXM7CiB9CisKK2FzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzeXNfZ2V0X3RocmVhZF9hcmVhKHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dHBfdmFsdWU7Cit9CisKK2FzbWxpbmthZ2UgaW50IHN5c19zZXRfdGhyZWFkX2FyZWEodW5zaWduZWQgbG9uZyB0cCkKK3sKKwljdXJyZW50X3RocmVhZF9pbmZvKCktPnRwX3ZhbHVlID0gdHA7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgc3lzY2FsbCBnZXRzIGl0cyBhcmd1bWVudHMgaW4gQTAgKG1lbSksIEQyIChvbGR2YWwpIGFuZAorICAgRDEgKG5ld3ZhbCkuICAqLworYXNtbGlua2FnZSBpbnQKK3N5c19hdG9taWNfY21weGNoZ18zMih1bnNpZ25lZCBsb25nIG5ld3ZhbCwgaW50IG9sZHZhbCwgaW50IGQzLCBpbnQgZDQsIGludCBkNSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBfX3VzZXIgKiBtZW0pCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwl1bnNpZ25lZCBsb25nIG1lbV92YWx1ZTsKKworCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKworCW1lbV92YWx1ZSA9ICptZW07CisJaWYgKG1lbV92YWx1ZSA9PSBvbGR2YWwpCisJCSptZW0gPSBuZXd2YWw7CisKKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXJldHVybiBtZW1fdmFsdWU7Cit9CisKK2FzbWxpbmthZ2UgaW50IHN5c19hdG9taWNfYmFycmllcih2b2lkKQoreworCS8qIG5vIGNvZGUgbmVlZGVkIGZvciB1bmlwcm9jcyAqLworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c2NhbGx0YWJsZS5TIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c2NhbGx0YWJsZS5TCmluZGV4IDQ4NjgzN2UuLjU2ZGQwMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNjYWxsdGFibGUuUworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKQEAgLTM1MSw2ICszNTEsMTAgQEAKIAkubG9uZyBzeXNfcHdyaXRldgkJLyogMzMwICovCiAJLmxvbmcgc3lzX3J0X3Rnc2lncXVldWVpbmZvCiAJLmxvbmcgc3lzX3BlcmZfZXZlbnRfb3BlbgorCS5sb25nIHN5c19nZXRfdGhyZWFkX2FyZWEKKwkubG9uZyBzeXNfc2V0X3RocmVhZF9hcmVhCisJLmxvbmcgc3lzX2F0b21pY19jbXB4Y2hnXzMyCS8qIDMzNSAqLworCS5sb25nIHN5c19hdG9taWNfYmFycmllcgogCiAJLnJlcHQgTlJfc3lzY2FsbHMtKC4tc3lzX2NhbGxfdGFibGUpLzQKIAkJLmxvbmcgc3lzX25pX3N5c2NhbGwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L21tL21lbW9yeS5jIGIvYXJjaC9tNjhrbm9tbXUvbW0vbWVtb3J5LmMKaW5kZXggZjkzYjg4Yi4uZDViOWUxMyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvbW0vbWVtb3J5LmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvbW0vbWVtb3J5LmMKQEAgLTI0LDcgKzI0LDYgQEAKIAogLyoKICAqIE1hcCBzb21lIHBoeXNpY2FsIGFkZHJlc3MgcmFuZ2UgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UuCi0gKiBUaGUgY29kZSBpcyBjb3BpZWQgYW5kIGFkYXB0ZWQgZnJvbSBtYXBfY2h1bmsoKS4KICAqLwogCiB1bnNpZ25lZCBsb25nIGtlcm5lbF9tYXAodW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL0tjb25maWcgYi9hcmNoL21pY3JvYmxhemUvS2NvbmZpZwppbmRleCBjZDU4MzdlLi5iMDA4MTY4IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvS2NvbmZpZworKysgYi9hcmNoL21pY3JvYmxhemUvS2NvbmZpZwpAQCAtMTMwLDYgKzEzMCw3IEBACiAKIGNvbmZpZyBPRgogCWRlZl9ib29sIHkKKwlzZWxlY3QgT0ZfRkxBVFRSRUUKIAogY29uZmlnIFBST0NfREVWSUNFVFJFRQogCWJvb2wgIlN1cHBvcnQgZm9yIGRldmljZSB0cmVlIGluIC9wcm9jIgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3Byb20uaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wcm9tLmgKaW5kZXggZWYzZWMxZC4uMDNmNDVhOSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3Byb20uaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcHJvbS5oCkBAIC0yNiwzMSArMjYsMTEgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCi0jZGVmaW5lIE9GX1JPT1RfTk9ERV9BRERSX0NFTExTX0RFRkFVTFQJMQotI2RlZmluZSBPRl9ST09UX05PREVfU0laRV9DRUxMU19ERUZBVUxUCTEKLQotI2RlZmluZSBvZl9jb21wYXRfY21wKHMxLCBzMiwgbCkJc3RybmNhc2VjbXAoKHMxKSwgKHMyKSwgKGwpKQotI2RlZmluZSBvZl9wcm9wX2NtcChzMSwgczIpCQlzdHJjbXAoKHMxKSwgKHMyKSkKLSNkZWZpbmUgb2Zfbm9kZV9jbXAoczEsIHMyKQkJc3RyY2FzZWNtcCgoczEpLCAoczIpKQotCi1leHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9jaG9zZW47Ci0KICNkZWZpbmUgSEFWRV9BUkNIX0RFVlRSRUVfRklYVVBTCiAKLWV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKmFsbG5vZGVzOwkvKiB0ZW1wb3Jhcnkgd2hpbGUgbWVyZ2luZyAqLwotZXh0ZXJuIHJ3bG9ja190IGRldnRyZWVfbG9jazsJLyogdGVtcG9yYXJ5IHdoaWxlIG1lcmdpbmcgKi8KLQotLyogRm9yIHVwZGF0aW5nIHRoZSBkZXZpY2UgdHJlZSBhdCBydW50aW1lICovCi1leHRlcm4gdm9pZCBvZl9hdHRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7Ci1leHRlcm4gdm9pZCBvZl9kZXRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7Ci0KIC8qIE90aGVyIFByb3RvdHlwZXMgKi8KIGV4dGVybiBpbnQgZWFybHlfdWFydGxpdGVfY29uc29sZSh2b2lkKTsKIAotZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSAqcmVxdWVzdF9PRl9yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCi0JCQkJaW50IGluZGV4LCBjb25zdCBjaGFyICpuYW1lX3Bvc3RmaXgpOwotZXh0ZXJuIGludCByZWxlYXNlX09GX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgaW50IGluZGV4KTsKLQogLyoKICAqIE9GIGFkZHJlc3MgcmV0cmVpdmFsICYgdHJhbnNsYXRpb24KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vdGxiZmx1c2guaAppbmRleCBlYjMxYTBlLi4xMGVjNzBjIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vdGxiZmx1c2guaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vdGxiZmx1c2guaApAQCAtMzgsNyArMzgsNyBAQAogCiAjZGVmaW5lIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQogCi0jZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyLCBwdGUpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHIsIHB0ZXApCWRvIHsgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBmbHVzaF90bGJfYWxsIGxvY2FsX2ZsdXNoX3RsYl9hbGwKICNkZWZpbmUgZmx1c2hfdGxiX21tIGxvY2FsX2ZsdXNoX3RsYl9tbQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9vZl9wbGF0Zm9ybS5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9vZl9wbGF0Zm9ybS5jCmluZGV4IGFjZjQ1NzQuLjFjNmQ2ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvb2ZfcGxhdGZvcm0uYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL29mX3BsYXRmb3JtLmMKQEAgLTE4NSw3ICsxODUsNyBAQAogc3RhdGljIGludCBvZl9kZXZfcGhhbmRsZV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiAJcGhhbmRsZSAqcGggPSBkYXRhOwotCXJldHVybiB0b19vZl9kZXZpY2UoZGV2KS0+bm9kZS0+bGludXhfcGhhbmRsZSA9PSAqcGg7CisJcmV0dXJuIHRvX29mX2RldmljZShkZXYpLT5ub2RlLT5waGFuZGxlID09ICpwaDsKIH0KIAogc3RydWN0IG9mX2RldmljZSAqb2ZfZmluZF9kZXZpY2VfYnlfcGhhbmRsZShwaGFuZGxlIHBoKQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9tLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb20uYwppbmRleCBiODE3ZGYxLi5hMTVlZjZkIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb20uYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb20uYwpAQCAtNDIsNjk4ICs0MiwyMSBAQAogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CiAKLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBkdF9yb290X2FkZHJfY2VsbHM7Ci1zdGF0aWMgaW50IF9faW5pdGRhdGEgZHRfcm9vdF9zaXplX2NlbGxzOwotCi10eXBlZGVmIHUzMiBjZWxsX3Q7Ci0KLXN0YXRpYyBzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgKmluaXRpYWxfYm9vdF9wYXJhbXM7Ci0KLS8qIGV4cG9ydCB0aGF0IHRvIG91dHNpZGUgd29ybGQgKi8KLXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfY2hvc2VuOwotCi1zdGF0aWMgaW5saW5lIGNoYXIgKmZpbmRfZmxhdF9kdF9zdHJpbmcodTMyIG9mZnNldCkKK3ZvaWQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW5fYXJjaCh1bnNpZ25lZCBsb25nIG5vZGUpCiB7Ci0JcmV0dXJuICgoY2hhciAqKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKLQkJaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cmluZ3MgKyBvZmZzZXQ7CisJLyogTm8gTWljcm9ibGF6ZSBzcGVjaWZpYyBjb2RlIGhlcmUgKi8KIH0KIAotLyoqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2NhbiB0aGUgZmxhdHRlbmVkIGRldmljZS10cmVlLCBpdCBpcwotICogdXNlZCB0byBleHRyYWN0IHRoZSBtZW1vcnkgaW5mb3JtYXRpb25zIGF0IGJvb3QgYmVmb3JlIHdlIGNhbgotICogdW5mbGF0dGVuIHRoZSB0cmVlCi0gKi8KLWludCBfX2luaXQgb2Zfc2Nhbl9mbGF0X2R0KGludCAoKml0KSh1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJICAgICBjb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLAotCQkJCSAgICAgdm9pZCAqZGF0YSksCi0JCQkgICB2b2lkICpkYXRhKQordm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9hZGRfbWVtb3J5X2FyY2godTY0IGJhc2UsIHU2NCBzaXplKQogewotCXVuc2lnbmVkIGxvbmcgcCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCi0JCWluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3Q7Ci0JaW50IHJjID0gMDsKLQlpbnQgZGVwdGggPSAtMTsKLQotCWRvIHsKLQkJdTMyIHRhZyA9ICooKHUzMiAqKXApOwotCQljaGFyICpwYXRocDsKLQotCQlwICs9IDQ7Ci0JCWlmICh0YWcgPT0gT0ZfRFRfRU5EX05PREUpIHsKLQkJCWRlcHRoLS07Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAodGFnID09IE9GX0RUX05PUCkKLQkJCWNvbnRpbnVlOwotCQlpZiAodGFnID09IE9GX0RUX0VORCkKLQkJCWJyZWFrOwotCQlpZiAodGFnID09IE9GX0RUX1BST1ApIHsKLQkJCXUzMiBzeiA9ICooKHUzMiAqKXApOwotCQkJcCArPSA4OwotCQkJaWYgKGluaXRpYWxfYm9vdF9wYXJhbXMtPnZlcnNpb24gPCAweDEwKQotCQkJCXAgPSBfQUxJR04ocCwgc3ogPj0gOCA/IDggOiA0KTsKLQkJCXAgKz0gc3o7Ci0JCQlwID0gX0FMSUdOKHAsIDQpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHRhZyAhPSBPRl9EVF9CRUdJTl9OT0RFKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJJbnZhbGlkIHRhZyAleCBzY2FubmluZyBmbGF0dGVuZWQiCi0JCQkJIiBkZXZpY2UgdHJlZSAhXG4iLCB0YWcpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJZGVwdGgrKzsKLQkJcGF0aHAgPSAoY2hhciAqKXA7Ci0JCXAgPSBfQUxJR04ocCArIHN0cmxlbihwYXRocCkgKyAxLCA0KTsKLQkJaWYgKCgqcGF0aHApID09ICcvJykgewotCQkJY2hhciAqbHAsICpucDsKLQkJCWZvciAobHAgPSBOVUxMLCBucCA9IHBhdGhwOyAqbnA7IG5wKyspCi0JCQkJaWYgKCgqbnApID09ICcvJykKLQkJCQkJbHAgPSBucCsxOwotCQkJaWYgKGxwICE9IE5VTEwpCi0JCQkJcGF0aHAgPSBscDsKLQkJfQotCQlyYyA9IGl0KHAsIHBhdGhwLCBkZXB0aCwgZGF0YSk7Ci0JCWlmIChyYyAhPSAwKQotCQkJYnJlYWs7Ci0JfSB3aGlsZSAoMSk7Ci0KLQlyZXR1cm4gcmM7CisJbG1iX2FkZChiYXNlLCBzaXplKTsKIH0KIAotdW5zaWduZWQgbG9uZyBfX2luaXQgb2ZfZ2V0X2ZsYXRfZHRfcm9vdCh2b2lkKQordTY0IF9faW5pdCBlYXJseV9pbml0X2R0X2FsbG9jX21lbW9yeV9hcmNoKHU2NCBzaXplLCB1NjQgYWxpZ24pCiB7Ci0JdW5zaWduZWQgbG9uZyBwID0gKCh1bnNpZ25lZCBsb25nKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKLQkJaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cnVjdDsKLQotCXdoaWxlICgqKCh1MzIgKilwKSA9PSBPRl9EVF9OT1ApCi0JCXAgKz0gNDsKLQlCVUdfT04oKigodTMyICopcCkgIT0gT0ZfRFRfQkVHSU5fTk9ERSk7Ci0JcCArPSA0OwotCXJldHVybiBfQUxJR04ocCArIHN0cmxlbigoY2hhciAqKXApICsgMSwgNCk7CisJcmV0dXJuIGxtYl9hbGxvYyhzaXplLCBhbGlnbik7CiB9CiAKLS8qKgotICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB3aXRoaW4gc2Nhbl9mbGF0dGVuZWRfZHQgY2FsbGJhY2sgdG8gZ2V0Ci0gKiBhY2Nlc3MgdG8gcHJvcGVydGllcwotICovCi12b2lkICpfX2luaXQgb2ZfZ2V0X2ZsYXRfZHRfcHJvcCh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJdW5zaWduZWQgbG9uZyAqc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHAgPSBub2RlOwotCi0JZG8gewotCQl1MzIgdGFnID0gKigodTMyICopcCk7Ci0JCXUzMiBzeiwgbm9mZjsKLQkJY29uc3QgY2hhciAqbnN0cjsKLQotCQlwICs9IDQ7Ci0JCWlmICh0YWcgPT0gT0ZfRFRfTk9QKQotCQkJY29udGludWU7Ci0JCWlmICh0YWcgIT0gT0ZfRFRfUFJPUCkKLQkJCXJldHVybiBOVUxMOwotCi0JCXN6ID0gKigodTMyICopcCk7Ci0JCW5vZmYgPSAqKCh1MzIgKikocCArIDQpKTsKLQkJcCArPSA4OwotCQlpZiAoaW5pdGlhbF9ib290X3BhcmFtcy0+dmVyc2lvbiA8IDB4MTApCi0JCQlwID0gX0FMSUdOKHAsIHN6ID49IDggPyA4IDogNCk7Ci0KLQkJbnN0ciA9IGZpbmRfZmxhdF9kdF9zdHJpbmcobm9mZik7Ci0JCWlmIChuc3RyID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbid0IGZpbmQgcHJvcGVydHkgaW5kZXgiCi0JCQkJIiBuYW1lICFcbiIpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJaWYgKHN0cmNtcChuYW1lLCBuc3RyKSA9PSAwKSB7Ci0JCQlpZiAoc2l6ZSkKLQkJCQkqc2l6ZSA9IHN6OwotCQkJcmV0dXJuICh2b2lkICopcDsKLQkJfQotCQlwICs9IHN6OwotCQlwID0gX0FMSUdOKHAsIDQpOwotCX0gd2hpbGUgKDEpOwotfQotCi1pbnQgX19pbml0IG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKmNvbXBhdCkKLXsKLQljb25zdCBjaGFyICpjcDsKLQl1bnNpZ25lZCBsb25nIGNwbGVuLCBsOwotCi0JY3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJjb21wYXRpYmxlIiwgJmNwbGVuKTsKLQlpZiAoY3AgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0Jd2hpbGUgKGNwbGVuID4gMCkgewotCQlpZiAoc3RybmNhc2VjbXAoY3AsIGNvbXBhdCwgc3RybGVuKGNvbXBhdCkpID09IDApCi0JCQlyZXR1cm4gMTsKLQkJbCA9IHN0cmxlbihjcCkgKyAxOwotCQljcCArPSBsOwotCQljcGxlbiAtPSBsOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCAqX19pbml0IHVuZmxhdHRlbl9kdF9hbGxvYyh1bnNpZ25lZCBsb25nICptZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkJdW5zaWduZWQgbG9uZyBhbGlnbikKLXsKLQl2b2lkICpyZXM7Ci0KLQkqbWVtID0gX0FMSUdOKCptZW0sIGFsaWduKTsKLQlyZXMgPSAodm9pZCAqKSptZW07Ci0JKm1lbSArPSBzaXplOwotCi0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHVuZmxhdHRlbl9kdF9ub2RlKHVuc2lnbmVkIGxvbmcgbWVtLAotCQkJCQl1bnNpZ25lZCBsb25nICpwLAotCQkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRhZCwKLQkJCQkJc3RydWN0IGRldmljZV9ub2RlICoqKmFsbG5leHRwcCwKLQkJCQkJdW5zaWduZWQgbG9uZyBmcHNpemUpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQlzdHJ1Y3QgcHJvcGVydHkgKnBwLCAqKnByZXZfcHAgPSBOVUxMOwotCWNoYXIgKnBhdGhwOwotCXUzMiB0YWc7Ci0JdW5zaWduZWQgaW50IGwsIGFsbG9jbDsKLQlpbnQgaGFzX25hbWUgPSAwOwotCWludCBuZXdfZm9ybWF0ID0gMDsKLQotCXRhZyA9ICooKHUzMiAqKSgqcCkpOwotCWlmICh0YWcgIT0gT0ZfRFRfQkVHSU5fTk9ERSkgewotCQlwcmludGsoIldlaXJkIHRhZyBhdCBzdGFydCBvZiBub2RlOiAleFxuIiwgdGFnKTsKLQkJcmV0dXJuIG1lbTsKLQl9Ci0JKnAgKz0gNDsKLQlwYXRocCA9IChjaGFyICopKnA7Ci0JbCA9IGFsbG9jbCA9IHN0cmxlbihwYXRocCkgKyAxOwotCSpwID0gX0FMSUdOKCpwICsgbCwgNCk7Ci0KLQkvKiB2ZXJzaW9uIDB4MTAgaGFzIGEgbW9yZSBjb21wYWN0IHVuaXQgbmFtZSBoZXJlIGluc3RlYWQgb2YgdGhlIGZ1bGwKLQkgKiBwYXRoLiB3ZSBhY2N1bXVsYXRlIHRoZSBmdWxsIHBhdGggc2l6ZSB1c2luZyAiZnBzaXplIiwgd2UnbGwgcmVidWlsZAotCSAqIGl0IGxhdGVyLiBXZSBkZXRlY3QgdGhpcyBiZWNhdXNlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIG5hbWUgaXMKLQkgKiBub3QgJy8nLgotCSAqLwotCWlmICgoKnBhdGhwKSAhPSAnLycpIHsKLQkJbmV3X2Zvcm1hdCA9IDE7Ci0JCWlmIChmcHNpemUgPT0gMCkgewotCQkJLyogcm9vdCBub2RlOiBzcGVjaWFsIGNhc2UuIGZwc2l6ZSBhY2NvdW50cyBmb3IgcGF0aAotCQkJICogcGx1cyB0ZXJtaW5hdGluZyB6ZXJvLiByb290IG5vZGUgb25seSBoYXMgJy8nLCBzbwotCQkJICogZnBzaXplIHNob3VsZCBiZSAyLCBidXQgd2Ugd2FudCB0byBhdm9pZCB0aGUgZmlyc3QKLQkJCSAqIGxldmVsIG5vZGVzIHRvIGhhdmUgdHdvICcvJyBzbyB3ZSB1c2UgZnBzaXplIDEgaGVyZQotCQkJICovCi0JCQlmcHNpemUgPSAxOwotCQkJYWxsb2NsID0gMjsKLQkJfSBlbHNlIHsKLQkJCS8qIGFjY291bnQgZm9yICcvJyBhbmQgcGF0aCBzaXplIG1pbnVzIHRlcm1pbmFsIDAKLQkJCSAqIGFscmVhZHkgaW4gJ2wnCi0JCQkgKi8KLQkJCWZwc2l6ZSArPSBsOwotCQkJYWxsb2NsID0gZnBzaXplOwotCQl9Ci0JfQotCi0JbnAgPSB1bmZsYXR0ZW5fZHRfYWxsb2MoJm1lbSwgc2l6ZW9mKHN0cnVjdCBkZXZpY2Vfbm9kZSkgKyBhbGxvY2wsCi0JCQkJX19hbGlnbm9mX18oc3RydWN0IGRldmljZV9ub2RlKSk7Ci0JaWYgKGFsbG5leHRwcCkgewotCQltZW1zZXQobnAsIDAsIHNpemVvZigqbnApKTsKLQkJbnAtPmZ1bGxfbmFtZSA9ICgoY2hhciAqKW5wKSArIHNpemVvZihzdHJ1Y3QgZGV2aWNlX25vZGUpOwotCQlpZiAobmV3X2Zvcm1hdCkgewotCQkJY2hhciAqcDIgPSBucC0+ZnVsbF9uYW1lOwotCQkJLyogcmVidWlsZCBmdWxsIHBhdGggZm9yIG5ldyBmb3JtYXQgKi8KLQkJCWlmIChkYWQgJiYgZGFkLT5wYXJlbnQpIHsKLQkJCQlzdHJjcHkocDIsIGRhZC0+ZnVsbF9uYW1lKTsKLSNpZmRlZiBERUJVRwotCQkJCWlmICgoc3RybGVuKHAyKSArIGwgKyAxKSAhPSBhbGxvY2wpIHsKLQkJCQkJcHJfZGVidWcoIiVzOiBwOiAlZCwgbDogJWQsIGE6ICVkXG4iLAotCQkJCQkJcGF0aHAsIChpbnQpc3RybGVuKHAyKSwKLQkJCQkJCWwsIGFsbG9jbCk7Ci0JCQkJfQotI2VuZGlmCi0JCQkJcDIgKz0gc3RybGVuKHAyKTsKLQkJCX0KLQkJCSoocDIrKykgPSAnLyc7Ci0JCQltZW1jcHkocDIsIHBhdGhwLCBsKTsKLQkJfSBlbHNlCi0JCQltZW1jcHkobnAtPmZ1bGxfbmFtZSwgcGF0aHAsIGwpOwotCQlwcmV2X3BwID0gJm5wLT5wcm9wZXJ0aWVzOwotCQkqKmFsbG5leHRwcCA9IG5wOwotCQkqYWxsbmV4dHBwID0gJm5wLT5hbGxuZXh0OwotCQlpZiAoZGFkICE9IE5VTEwpIHsKLQkJCW5wLT5wYXJlbnQgPSBkYWQ7Ci0JCQkvKiB3ZSB0ZW1wb3JhcmlseSB1c2UgdGhlIG5leHQgZmllbGQgYXMgYGxhc3RfY2hpbGQnKi8KLQkJCWlmIChkYWQtPm5leHQgPT0gTlVMTCkKLQkJCQlkYWQtPmNoaWxkID0gbnA7Ci0JCQllbHNlCi0JCQkJZGFkLT5uZXh0LT5zaWJsaW5nID0gbnA7Ci0JCQlkYWQtPm5leHQgPSBucDsKLQkJfQotCQlrcmVmX2luaXQoJm5wLT5rcmVmKTsKLQl9Ci0Jd2hpbGUgKDEpIHsKLQkJdTMyIHN6LCBub2ZmOwotCQljaGFyICpwbmFtZTsKLQotCQl0YWcgPSAqKCh1MzIgKikoKnApKTsKLQkJaWYgKHRhZyA9PSBPRl9EVF9OT1ApIHsKLQkJCSpwICs9IDQ7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAodGFnICE9IE9GX0RUX1BST1ApCi0JCQlicmVhazsKLQkJKnAgKz0gNDsKLQkJc3ogPSAqKCh1MzIgKikoKnApKTsKLQkJbm9mZiA9ICooKHUzMiAqKSgoKnApICsgNCkpOwotCQkqcCArPSA4OwotCQlpZiAoaW5pdGlhbF9ib290X3BhcmFtcy0+dmVyc2lvbiA8IDB4MTApCi0JCQkqcCA9IF9BTElHTigqcCwgc3ogPj0gOCA/IDggOiA0KTsKLQotCQlwbmFtZSA9IGZpbmRfZmxhdF9kdF9zdHJpbmcobm9mZik7Ci0JCWlmIChwbmFtZSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJIkNhbid0IGZpbmQgcHJvcGVydHkgbmFtZSBpbiBsaXN0ICFcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHN0cmNtcChwbmFtZSwgIm5hbWUiKSA9PSAwKQotCQkJaGFzX25hbWUgPSAxOwotCQlsID0gc3RybGVuKHBuYW1lKSArIDE7Ci0JCXBwID0gdW5mbGF0dGVuX2R0X2FsbG9jKCZtZW0sIHNpemVvZihzdHJ1Y3QgcHJvcGVydHkpLAotCQkJCQlfX2FsaWdub2ZfXyhzdHJ1Y3QgcHJvcGVydHkpKTsKLQkJaWYgKGFsbG5leHRwcCkgewotCQkJaWYgKHN0cmNtcChwbmFtZSwgImxpbnV4LHBoYW5kbGUiKSA9PSAwKSB7Ci0JCQkJbnAtPm5vZGUgPSAqKCh1MzIgKikqcCk7Ci0JCQkJaWYgKG5wLT5saW51eF9waGFuZGxlID09IDApCi0JCQkJCW5wLT5saW51eF9waGFuZGxlID0gbnAtPm5vZGU7Ci0JCQl9Ci0JCQlpZiAoc3RyY21wKHBuYW1lLCAiaWJtLHBoYW5kbGUiKSA9PSAwKQotCQkJCW5wLT5saW51eF9waGFuZGxlID0gKigodTMyICopKnApOwotCQkJcHAtPm5hbWUgPSBwbmFtZTsKLQkJCXBwLT5sZW5ndGggPSBzejsKLQkJCXBwLT52YWx1ZSA9ICh2b2lkICopKnA7Ci0JCQkqcHJldl9wcCA9IHBwOwotCQkJcHJldl9wcCA9ICZwcC0+bmV4dDsKLQkJfQotCQkqcCA9IF9BTElHTigoKnApICsgc3osIDQpOwotCX0KLQkvKiB3aXRoIHZlcnNpb24gMHgxMCB3ZSBtYXkgbm90IGhhdmUgdGhlIG5hbWUgcHJvcGVydHksIHJlY3JlYXRlCi0JICogaXQgaGVyZSBmcm9tIHRoZSB1bml0IG5hbWUgaWYgYWJzZW50Ci0JICovCi0JaWYgKCFoYXNfbmFtZSkgewotCQljaGFyICpwMSA9IHBhdGhwLCAqcHMgPSBwYXRocCwgKnBhID0gTlVMTDsKLQkJaW50IHN6OwotCi0JCXdoaWxlICgqcDEpIHsKLQkJCWlmICgoKnAxKSA9PSAnQCcpCi0JCQkJcGEgPSBwMTsKLQkJCWlmICgoKnAxKSA9PSAnLycpCi0JCQkJcHMgPSBwMSArIDE7Ci0JCQlwMSsrOwotCQl9Ci0JCWlmIChwYSA8IHBzKQotCQkJcGEgPSBwMTsKLQkJc3ogPSAocGEgLSBwcykgKyAxOwotCQlwcCA9IHVuZmxhdHRlbl9kdF9hbGxvYygmbWVtLCBzaXplb2Yoc3RydWN0IHByb3BlcnR5KSArIHN6LAotCQkJCQlfX2FsaWdub2ZfXyhzdHJ1Y3QgcHJvcGVydHkpKTsKLQkJaWYgKGFsbG5leHRwcCkgewotCQkJcHAtPm5hbWUgPSAibmFtZSI7Ci0JCQlwcC0+bGVuZ3RoID0gc3o7Ci0JCQlwcC0+dmFsdWUgPSBwcCArIDE7Ci0JCQkqcHJldl9wcCA9IHBwOwotCQkJcHJldl9wcCA9ICZwcC0+bmV4dDsKLQkJCW1lbWNweShwcC0+dmFsdWUsIHBzLCBzeiAtIDEpOwotCQkJKChjaGFyICopcHAtPnZhbHVlKVtzeiAtIDFdID0gMDsKLQkJCXByX2RlYnVnKCJmaXhlZCB1cCBuYW1lIGZvciAlcyAtPiAlc1xuIiwgcGF0aHAsCi0JCQkJKGNoYXIgKilwcC0+dmFsdWUpOwotCQl9Ci0JfQotCWlmIChhbGxuZXh0cHApIHsKLQkJKnByZXZfcHAgPSBOVUxMOwotCQlucC0+bmFtZSA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm5hbWUiLCBOVUxMKTsKLQkJbnAtPnR5cGUgPSBvZl9nZXRfcHJvcGVydHkobnAsICJkZXZpY2VfdHlwZSIsIE5VTEwpOwotCi0JCWlmICghbnAtPm5hbWUpCi0JCQlucC0+bmFtZSA9ICI8TlVMTD4iOwotCQlpZiAoIW5wLT50eXBlKQotCQkJbnAtPnR5cGUgPSAiPE5VTEw+IjsKLQl9Ci0Jd2hpbGUgKHRhZyA9PSBPRl9EVF9CRUdJTl9OT0RFKSB7Ci0JCW1lbSA9IHVuZmxhdHRlbl9kdF9ub2RlKG1lbSwgcCwgbnAsIGFsbG5leHRwcCwgZnBzaXplKTsKLQkJdGFnID0gKigodTMyICopKCpwKSk7Ci0JfQotCWlmICh0YWcgIT0gT0ZfRFRfRU5EX05PREUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiV2VpcmQgdGFnIGF0IGVuZCBvZiBub2RlOiAleFxuIiwgdGFnKTsKLQkJcmV0dXJuIG1lbTsKLQl9Ci0JKnAgKz0gNDsKLQlyZXR1cm4gbWVtOwotfQotCi0vKioKLSAqIHVuZmxhdHRlbnMgdGhlIGRldmljZS10cmVlIHBhc3NlZCBieSB0aGUgZmlybXdhcmUsIGNyZWF0aW5nIHRoZQotICogdHJlZSBvZiBzdHJ1Y3QgZGV2aWNlX25vZGUuIEl0IGFsc28gZmlsbHMgdGhlICJuYW1lIiBhbmQgInR5cGUiCi0gKiBwb2ludGVycyBvZiB0aGUgbm9kZXMgc28gdGhlIG5vcm1hbCBkZXZpY2UtdHJlZSB3YWxraW5nIGZ1bmN0aW9ucwotICogY2FuIGJlIHVzZWQgKHRoaXMgdXNlZCB0byBiZSBkb25lIGJ5IGZpbmlzaF9kZXZpY2VfdHJlZSkKLSAqLwotdm9pZCBfX2luaXQgdW5mbGF0dGVuX2RldmljZV90cmVlKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBzdGFydCwgbWVtLCBzaXplOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqKmFsbG5leHRwID0gJmFsbG5vZGVzOwotCi0JcHJfZGVidWcoIiAtPiB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUoKVxuIik7Ci0KLQkvKiBGaXJzdCBwYXNzLCBzY2FuIGZvciBzaXplICovCi0Jc3RhcnQgPSAoKHVuc2lnbmVkIGxvbmcpaW5pdGlhbF9ib290X3BhcmFtcykgKwotCQlpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RydWN0OwotCXNpemUgPSB1bmZsYXR0ZW5fZHRfbm9kZSgwLCAmc3RhcnQsIE5VTEwsIE5VTEwsIDApOwotCXNpemUgPSAoc2l6ZSB8IDMpICsgMTsKLQotCXByX2RlYnVnKCIgIHNpemUgaXMgJWx4LCBhbGxvY2F0aW5nLi4uXG4iLCBzaXplKTsKLQotCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGV4cGFuZGVkIGRldmljZSB0cmVlICovCi0JbWVtID0gbG1iX2FsbG9jKHNpemUgKyA0LCBfX2FsaWdub2ZfXyhzdHJ1Y3QgZGV2aWNlX25vZGUpKTsKLQltZW0gPSAodW5zaWduZWQgbG9uZykgX192YShtZW0pOwotCi0JKCh1MzIgKiltZW0pW3NpemUgLyA0XSA9IDB4ZGVhZGJlZWY7Ci0KLQlwcl9kZWJ1ZygiICB1bmZsYXR0ZW5pbmcgJWx4Li4uXG4iLCBtZW0pOwotCi0JLyogU2Vjb25kIHBhc3MsIGRvIGFjdHVhbCB1bmZsYXR0ZW5pbmcgKi8KLQlzdGFydCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCi0JCWluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3Q7Ci0JdW5mbGF0dGVuX2R0X25vZGUobWVtLCAmc3RhcnQsIE5VTEwsICZhbGxuZXh0cCwgMCk7Ci0JaWYgKCooKHUzMiAqKXN0YXJ0KSAhPSBPRl9EVF9FTkQpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldlaXJkIHRhZyBhdCBlbmQgb2YgdHJlZTogJTA4eFxuIiwKLQkJCSooKHUzMiAqKXN0YXJ0KSk7Ci0JaWYgKCgodTMyICopbWVtKVtzaXplIC8gNF0gIT0gMHhkZWFkYmVlZikKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRW5kIG9mIHRyZWUgbWFya2VyIG92ZXJ3cml0dGVuOiAlMDh4XG4iLAotCQkJKCh1MzIgKiltZW0pW3NpemUgLyA0XSk7Ci0JKmFsbG5leHRwID0gTlVMTDsKLQotCS8qIEdldCBwb2ludGVyIHRvIE9GICIvY2hvc2VuIiBub2RlIGZvciB1c2UgZXZlcnl3aGVyZSAqLwotCW9mX2Nob3NlbiA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvY2hvc2VuIik7Ci0JaWYgKG9mX2Nob3NlbiA9PSBOVUxMKQotCQlvZl9jaG9zZW4gPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2Nob3NlbkAwIik7Ci0KLQlwcl9kZWJ1ZygiIDwtIHVuZmxhdHRlbl9kZXZpY2VfdHJlZSgpXG4iKTsKLX0KLQotI2RlZmluZSBlYXJseV9pbml0X2R0X3NjYW5fZHJjb25mX21lbW9yeShub2RlKSAwCi0KLXN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9jcHVzKHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQkJICBjb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLAotCQkJCQkgIHZvaWQgKmRhdGEpCi17Ci0Jc3RhdGljIGludCBsb2dpY2FsX2NwdWlkOwotCWNoYXIgKnR5cGUgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJkZXZpY2VfdHlwZSIsIE5VTEwpOwotCWNvbnN0IHUzMiAqaW50c2VydjsKLQlpbnQgaSwgbnRocmVhZHM7Ci0JaW50IGZvdW5kID0gMDsKLQotCS8qIFdlIGFyZSBzY2FubmluZyAiY3B1IiBub2RlcyBvbmx5ICovCi0JaWYgKHR5cGUgPT0gTlVMTCB8fCBzdHJjbXAodHlwZSwgImNwdSIpICE9IDApCi0JCXJldHVybiAwOwotCi0JLyogR2V0IHBoeXNpY2FsIGNwdWlkICovCi0JaW50c2VydiA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgInJlZyIsIE5VTEwpOwotCW50aHJlYWRzID0gMTsKLQotCS8qCi0JICogTm93IHNlZSBpZiBhbnkgb2YgdGhlc2UgdGhyZWFkcyBtYXRjaCBvdXIgYm9vdCBjcHUuCi0JICogTk9URTogVGhpcyBtdXN0IG1hdGNoIHRoZSBwYXJzaW5nIGRvbmUgaW4gc21wX3NldHVwX2NwdV9tYXBzLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBudGhyZWFkczsgaSsrKSB7Ci0JCS8qCi0JCSAqIHZlcnNpb24gMiBvZiB0aGUga2V4ZWMgcGFyYW0gZm9ybWF0IGFkZHMgdGhlIHBoeXMgY3B1aWQgb2YKLQkJICogYm9vdGVkIHByb2MuCi0JCSAqLwotCQlpZiAoaW5pdGlhbF9ib290X3BhcmFtcyAmJiBpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uID49IDIpIHsKLQkJCWlmIChpbnRzZXJ2W2ldID09Ci0JCQkJCWluaXRpYWxfYm9vdF9wYXJhbXMtPmJvb3RfY3B1aWRfcGh5cykgewotCQkJCWZvdW5kID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBDaGVjayBpZiBpdCdzIHRoZSBib290LWNwdSwgc2V0IGl0J3MgaHcgaW5kZXggbm93LAotCQkJICogdW5mb3J0dW5hdGVseSB0aGlzIGZvcm1hdCBkaWQgbm90IHN1cHBvcnQgYm9vdGluZwotCQkJICogb2ZmIHNlY29uZGFyeSB0aHJlYWRzLgotCQkJICovCi0JCQlpZiAob2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLAotCQkJCQkibGludXgsYm9vdC1jcHUiLCBOVUxMKSAhPSBOVUxMKSB7Ci0JCQkJZm91bmQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0JCS8qIGxvZ2ljYWwgY3B1IGlkIGlzIGFsd2F5cyAwIG9uIFVQIGtlcm5lbHMgKi8KLQkJbG9naWNhbF9jcHVpZCsrOwotI2VuZGlmCi0JfQotCi0JaWYgKGZvdW5kKSB7Ci0JCXByX2RlYnVnKCJib290IGNwdTogbG9naWNhbCAlZCBwaHlzaWNhbCAlZFxuIiwgbG9naWNhbF9jcHVpZCwKLQkJCWludHNlcnZbaV0pOwotCQlib290X2NwdWlkID0gbG9naWNhbF9jcHVpZDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2luaXRyZCh1bnNpZ25lZCBsb25nIG5vZGUpCi17Ci0JdW5zaWduZWQgbG9uZyBsOwotCXUzMiAqcHJvcDsKLQotCXByX2RlYnVnKCJMb29raW5nIGZvciBpbml0cmQgcHJvcGVydGllcy4uLiAiKTsKLQotCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxpbml0cmQtc3RhcnQiLCAmbCk7Ci0JaWYgKHByb3ApIHsKLQkJaW5pdHJkX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpCi0JCQkJCV9fdmEoKHUzMilvZl9yZWFkX3Vsb25nKHByb3AsIGwvNCkpOwotCi0JCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxpbml0cmQtZW5kIiwgJmwpOwotCQlpZiAocHJvcCkgewotCQkJaW5pdHJkX2VuZCA9ICh1bnNpZ25lZCBsb25nKQotCQkJCQlfX3ZhKCh1MzIpb2ZfcmVhZF91bG9uZyhwcm9wLCAxLzQpKTsKLQkJCWluaXRyZF9iZWxvd19zdGFydF9vayA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlpbml0cmRfc3RhcnQgPSAwOwotCQl9Ci0JfQotCi0JcHJfZGVidWcoImluaXRyZF9zdGFydD0weCVseCAgaW5pdHJkX2VuZD0weCVseFxuIiwKLQkJCQkJaW5pdHJkX3N0YXJ0LCBpbml0cmRfZW5kKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfaW5pdF9kdF9jaGVja19mb3JfaW5pdHJkKHVuc2lnbmVkIGxvbmcgbm9kZSkKLXsKLX0KLSNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JTklUUkQgKi8KLQotc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX2Nob3Nlbih1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwgdm9pZCAqZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGw7Ci0JY2hhciAqcDsKLQotCXByX2RlYnVnKCJzZWFyY2ggXCJjaG9zZW5cIiwgZGVwdGg6ICVkLCB1bmFtZTogJXNcbiIsIGRlcHRoLCB1bmFtZSk7Ci0KLQlpZiAoZGVwdGggIT0gMSB8fAotCQkoc3RyY21wKHVuYW1lLCAiY2hvc2VuIikgIT0gMCAmJgotCQkJCXN0cmNtcCh1bmFtZSwgImNob3NlbkAwIikgIT0gMCkpCi0JCXJldHVybiAwOwotCi0jaWZkZWYgQ09ORklHX0tFWEVDCi0JbHByb3AgPSAodTY0ICopb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLAotCQkJCSJsaW51eCxjcmFzaGtlcm5lbC1iYXNlIiwgTlVMTCk7Ci0JaWYgKGxwcm9wKQotCQljcmFzaGtfcmVzLnN0YXJ0ID0gKmxwcm9wOwotCi0JbHByb3AgPSAodTY0ICopb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLAotCQkJCSJsaW51eCxjcmFzaGtlcm5lbC1zaXplIiwgTlVMTCk7Ci0JaWYgKGxwcm9wKQotCQljcmFzaGtfcmVzLmVuZCA9IGNyYXNoa19yZXMuc3RhcnQgKyAqbHByb3AgLSAxOwotI2VuZGlmCi0KLQllYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQobm9kZSk7Ci0KLQkvKiBSZXRyZWl2ZSBjb21tYW5kIGxpbmUgKi8KLQlwID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiYm9vdGFyZ3MiLCAmbCk7Ci0JaWYgKHAgIT0gTlVMTCAmJiBsID4gMCkKLQkJc3RybGNweShjbWRfbGluZSwgcCwgbWluKChpbnQpbCwgQ09NTUFORF9MSU5FX1NJWkUpKTsKLQotI2lmZGVmIENPTkZJR19DTURMSU5FCi0jaWZuZGVmIENPTkZJR19DTURMSU5FX0ZPUkNFCi0JaWYgKHAgPT0gTlVMTCB8fCBsID09IDAgfHwgKGwgPT0gMSAmJiAoKnApID09IDApKQotI2VuZGlmCi0JCXN0cmxjcHkoY21kX2xpbmUsIENPTkZJR19DTURMSU5FLCBDT01NQU5EX0xJTkVfU0laRSk7Ci0jZW5kaWYgLyogQ09ORklHX0NNRExJTkUgKi8KLQotCXByX2RlYnVnKCJDb21tYW5kIGxpbmUgaXM6ICVzXG4iLCBjbWRfbGluZSk7Ci0KLQkvKiBicmVhayBub3cgKi8KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX3Jvb3QodW5zaWduZWQgbG9uZyBub2RlLAotCQkJCWNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCi17Ci0JdTMyICpwcm9wOwotCi0JaWYgKGRlcHRoICE9IDApCi0JCXJldHVybiAwOwotCi0JcHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgIiNzaXplLWNlbGxzIiwgTlVMTCk7Ci0JZHRfcm9vdF9zaXplX2NlbGxzID0gKHByb3AgPT0gTlVMTCkgPyAxIDogKnByb3A7Ci0JcHJfZGVidWcoImR0X3Jvb3Rfc2l6ZV9jZWxscyA9ICV4XG4iLCBkdF9yb290X3NpemVfY2VsbHMpOwotCi0JcHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgIiNhZGRyZXNzLWNlbGxzIiwgTlVMTCk7Ci0JZHRfcm9vdF9hZGRyX2NlbGxzID0gKHByb3AgPT0gTlVMTCkgPyAyIDogKnByb3A7Ci0JcHJfZGVidWcoImR0X3Jvb3RfYWRkcl9jZWxscyA9ICV4XG4iLCBkdF9yb290X2FkZHJfY2VsbHMpOwotCi0JLyogYnJlYWsgbm93ICovCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB1NjQgX19pbml0IGR0X21lbV9uZXh0X2NlbGwoaW50IHMsIGNlbGxfdCAqKmNlbGxwKQotewotCWNlbGxfdCAqcCA9ICpjZWxscDsKLQotCSpjZWxscCA9IHAgKyBzOwotCXJldHVybiBvZl9yZWFkX251bWJlcihwLCBzKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX21lbW9yeSh1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwgdm9pZCAqZGF0YSkKLXsKLQljaGFyICp0eXBlID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiZGV2aWNlX3R5cGUiLCBOVUxMKTsKLQljZWxsX3QgKnJlZywgKmVuZHA7Ci0JdW5zaWduZWQgbG9uZyBsOwotCi0JLyogTG9vayBmb3IgdGhlIGlibSxkeW5hbWljLXJlY29uZmlndXJhdGlvbi1tZW1vcnkgbm9kZSAqLwotLyoJaWYgKGRlcHRoID09IDEgJiYKLQkJc3RyY21wKHVuYW1lLCAiaWJtLGR5bmFtaWMtcmVjb25maWd1cmF0aW9uLW1lbW9yeSIpID09IDApCi0JCXJldHVybiBlYXJseV9pbml0X2R0X3NjYW5fZHJjb25mX21lbW9yeShub2RlKTsKLSovCi0JLyogV2UgYXJlIHNjYW5uaW5nICJtZW1vcnkiIG5vZGVzIG9ubHkgKi8KLQlpZiAodHlwZSA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIFRoZSBsb25ndHJhaWwgZG9lc24ndCBoYXZlIGEgZGV2aWNlX3R5cGUgb24gdGhlCi0JCSAqIC9tZW1vcnkgbm9kZSwgc28gbG9vayBmb3IgdGhlIG5vZGUgY2FsbGVkIC9tZW1vcnlAMC4KLQkJICovCi0JCWlmIChkZXB0aCAhPSAxIHx8IHN0cmNtcCh1bmFtZSwgIm1lbW9yeUAwIikgIT0gMCkKLQkJCXJldHVybiAwOwotCX0gZWxzZSBpZiAoc3RyY21wKHR5cGUsICJtZW1vcnkiKSAhPSAwKQotCQlyZXR1cm4gMDsKLQotCXJlZyA9IChjZWxsX3QgKilvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCx1c2FibGUtbWVtb3J5IiwgJmwpOwotCWlmIChyZWcgPT0gTlVMTCkKLQkJcmVnID0gKGNlbGxfdCAqKW9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgInJlZyIsICZsKTsKLQlpZiAocmVnID09IE5VTEwpCi0JCXJldHVybiAwOwotCi0JZW5kcCA9IHJlZyArIChsIC8gc2l6ZW9mKGNlbGxfdCkpOwotCi0JcHJfZGVidWcoIm1lbW9yeSBzY2FuIG5vZGUgJXMsIHJlZyBzaXplICVsZCwgZGF0YTogJXggJXggJXggJXgsXG4iLAotCQl1bmFtZSwgbCwgcmVnWzBdLCByZWdbMV0sIHJlZ1syXSwgcmVnWzNdKTsKLQotCXdoaWxlICgoZW5kcCAtIHJlZykgPj0gKGR0X3Jvb3RfYWRkcl9jZWxscyArIGR0X3Jvb3Rfc2l6ZV9jZWxscykpIHsKLQkJdTY0IGJhc2UsIHNpemU7Ci0KLQkJYmFzZSA9IGR0X21lbV9uZXh0X2NlbGwoZHRfcm9vdF9hZGRyX2NlbGxzLCAmcmVnKTsKLQkJc2l6ZSA9IGR0X21lbV9uZXh0X2NlbGwoZHRfcm9vdF9zaXplX2NlbGxzLCAmcmVnKTsKLQotCQlpZiAoc2l6ZSA9PSAwKQotCQkJY29udGludWU7Ci0JCXByX2RlYnVnKCIgLSAlbGx4ICwgICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpYmFzZSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2l6ZSk7Ci0KLQkJbG1iX2FkZChiYXNlLCBzaXplKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUEhZUF9EVU1QCi0vKioKLSAqIHBoeXBfZHVtcF9jYWxjdWxhdGVfcmVzZXJ2ZV9zaXplKCkgLSByZXNlcnZlIHZhcmlhYmxlIGJvb3QgYXJlYSA1JSBvciBhcmcKLSAqCi0gKiBGdW5jdGlvbiB0byBmaW5kIHRoZSBsYXJnZXN0IHNpemUgd2UgbmVlZCB0byByZXNlcnZlCi0gKiBkdXJpbmcgZWFybHkgYm9vdCBwcm9jZXNzLgotICoKLSAqIEl0IGVpdGhlciBsb29rcyBmb3IgYm9vdCBwYXJhbSBhbmQgcmV0dXJucyB0aGF0IE9SCi0gKiByZXR1cm5zIGxhcmdlciBvZiAyNTYgb3IgNSUgcm91bmRlZCBkb3duIHRvIG11bHRpcGxlcyBvZiAyNTZNQi4KLSAqCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwaHlwX2R1bXBfY2FsY3VsYXRlX3Jlc2VydmVfc2l6ZSh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdG1wOwotCi0JaWYgKHBoeXBfZHVtcF9pbmZvLT5yZXNlcnZlX2Jvb3R2YXIpCi0JCXJldHVybiBwaHlwX2R1bXBfaW5mby0+cmVzZXJ2ZV9ib290dmFyOwotCi0JLyogZGl2aWRlIGJ5IDIwIHRvIGdldCA1JSBvZiB2YWx1ZSAqLwotCXRtcCA9IGxtYl9lbmRfb2ZfRFJBTSgpOwotCWRvX2Rpdih0bXAsIDIwKTsKLQotCS8qIHJvdW5kIGl0IGRvd24gaW4gbXVsdGlwbGVzIG9mIDI1NiAqLwotCXRtcCA9IHRtcCAmIH4weDBGRkZGRkZGVUw7Ci0KLQlyZXR1cm4gKHRtcCA+IFBIWVBfRFVNUF9STVJfRU5EID8gdG1wIDogUEhZUF9EVU1QX1JNUl9FTkQpOwotfQotCi0vKioKLSAqIHBoeXBfZHVtcF9yZXNlcnZlX21lbSgpIC0gcmVzZXJ2ZSBhbGwgbm90LXlldC1kdW1wZWQgbW1lbW9yeQotICoKLSAqIFRoaXMgcm91dGluZSBtYXkgcmVzZXJ2ZSBtZW1vcnkgcmVnaW9ucyBpbiB0aGUga2VybmVsIG9ubHkKLSAqIGlmIHRoZSBzeXN0ZW0gaXMgc3VwcG9ydGVkIGFuZCBhIGR1bXAgd2FzIHRha2VuIGluIGxhc3QKLSAqIGJvb3QgaW5zdGFuY2Ugb3IgaWYgdGhlIGhhcmR3YXJlIGlzIHN1cHBvcnRlZCBhbmQgdGhlCi0gKiBzY3JhdGNoIGFyZWEgbmVlZHMgdG8gYmUgc2V0dXAuIEluIG90aGVyIGluc3RhbmNlcyBpdCByZXR1cm5zCi0gKiB3aXRob3V0IHJlc2VydmluZyBhbnl0aGluZy4gVGhlIG1lbW9yeSBpbiBjYXNlIG9mIGR1bXAgYmVpbmcKLSAqIGFjdGl2ZSBpcyBmcmVlZCB3aGVuIHRoZSBkdW1wIGlzIGNvbGxlY3RlZCAoYnkgdXNlcmxhbmQgdG9vbHMpLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgcGh5cF9kdW1wX3Jlc2VydmVfbWVtKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBiYXNlLCBzaXplOwotCXVuc2lnbmVkIGxvbmcgdmFyaWFibGVfcmVzZXJ2ZV9zaXplOwotCi0JaWYgKCFwaHlwX2R1bXBfaW5mby0+cGh5cF9kdW1wX2NvbmZpZ3VyZWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJQaHlwLWR1bXAgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGhhcmR3YXJlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghcGh5cF9kdW1wX2luZm8tPnBoeXBfZHVtcF9hdF9ib290KSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlBoeXAtZHVtcCBkaXNhYmxlZCBhdCBib290IHRpbWVcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JdmFyaWFibGVfcmVzZXJ2ZV9zaXplID0gcGh5cF9kdW1wX2NhbGN1bGF0ZV9yZXNlcnZlX3NpemUoKTsKLQotCWlmIChwaHlwX2R1bXBfaW5mby0+cGh5cF9kdW1wX2lzX2FjdGl2ZSkgewotCQkvKiBSZXNlcnZlICpldmVyeXRoaW5nKiBhYm92ZSBSTVIuQXJlYSBmcmVlZCBieSB1c2VybGFuZCB0b29scyovCi0JCWJhc2UgPSB2YXJpYWJsZV9yZXNlcnZlX3NpemU7Ci0JCXNpemUgPSBsbWJfZW5kX29mX0RSQU0oKSAtIGJhc2U7Ci0KLQkJLyogWFhYIGNyYXNoZWRfcmFtX2VuZCBpcyB3cm9uZywgc2luY2UgaXQgbWF5IGJlIGJleW9uZAotCQkgKiB0aGUgbWVtb3J5X2xpbWl0LCBpdCB3aWxsIG5lZWQgdG8gYmUgYWRqdXN0ZWQuICovCi0JCWxtYl9yZXNlcnZlKGJhc2UsIHNpemUpOwotCi0JCXBoeXBfZHVtcF9pbmZvLT5pbml0X3Jlc2VydmVfc3RhcnQgPSBiYXNlOwotCQlwaHlwX2R1bXBfaW5mby0+aW5pdF9yZXNlcnZlX3NpemUgPSBzaXplOwotCX0gZWxzZSB7Ci0JCXNpemUgPSBwaHlwX2R1bXBfaW5mby0+Y3B1X3N0YXRlX3NpemUgKwotCQkJcGh5cF9kdW1wX2luZm8tPmhwdGVfcmVnaW9uX3NpemUgKwotCQkJdmFyaWFibGVfcmVzZXJ2ZV9zaXplOwotCQliYXNlID0gbG1iX2VuZF9vZl9EUkFNKCkgLSBzaXplOwotCQlsbWJfcmVzZXJ2ZShiYXNlLCBzaXplKTsKLQkJcGh5cF9kdW1wX2luZm8tPmluaXRfcmVzZXJ2ZV9zdGFydCA9IGJhc2U7Ci0JCXBoeXBfZHVtcF9pbmZvLT5pbml0X3Jlc2VydmVfc2l6ZSA9IHNpemU7Ci0JfQotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgcGh5cF9kdW1wX3Jlc2VydmVfbWVtKHZvaWQpIHt9Ci0jZW5kaWYgLyogQ09ORklHX1BIWVBfRFVNUCAgJiYgQ09ORklHX1BQQ19SVEFTICovCi0KICNpZmRlZiBDT05GSUdfRUFSTFlfUFJJTlRLCiAvKiBNUyB0aGlzIGlzIE1pY3JvYmxhemUgc3BlY2lmaWcgZnVuY3Rpb24gKi8KIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9zZXJpYWwodW5zaWduZWQgbG9uZyBub2RlLApAQCAtNzc1LDExICs5OCw2IEBACiAJLyogU2V0dXAgZmxhdCBkZXZpY2UtdHJlZSBwb2ludGVyICovCiAJaW5pdGlhbF9ib290X3BhcmFtcyA9IHBhcmFtczsKIAotI2lmZGVmIENPTkZJR19QSFlQX0RVTVAKLQkvKiBzY2FuIHRyZWUgdG8gc2VlIGlmIGR1bXAgb2NjdXJlZCBkdXJpbmcgbGFzdCBib290ICovCi0Jb2Zfc2Nhbl9mbGF0X2R0KGVhcmx5X2luaXRfZHRfc2Nhbl9waHlwX2R1bXAsIE5VTEwpOwotI2VuZGlmCi0KIAkvKiBSZXRyaWV2ZSB2YXJpb3VzIGluZm9ybWF0aW9ucyBmcm9tIHRoZSAvY2hvc2VuIG5vZGUgb2YgdGhlCiAJICogZGV2aWNlLXRyZWUsIGluY2x1ZGluZyB0aGUgcGxhdGZvcm0gdHlwZSwgaW5pdHJkIGxvY2F0aW9uIGFuZAogCSAqIHNpemUsIFRDRSByZXNlcnZlLCBhbmQgbW9yZSAuLi4KQEAgLTc5OSwzMyArMTE3LDE4IEBACiAKIAlwcl9kZWJ1ZygiUGh5cy4gbWVtOiAlbHhcbiIsICh1bnNpZ25lZCBsb25nKSBsbWJfcGh5c19tZW1fc2l6ZSgpKTsKIAotCXByX2RlYnVnKCJTY2FubmluZyBDUFVzIC4uLlxuIik7Ci0KLQkvKiBSZXRyZWl2ZSBDUFUgcmVsYXRlZCBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgZmxhdCB0cmVlCi0JICogKGFsdGl2ZWMgc3VwcG9ydCwgYm9vdCBDUFUgSUQsIC4uLikKLQkgKi8KLQlvZl9zY2FuX2ZsYXRfZHQoZWFybHlfaW5pdF9kdF9zY2FuX2NwdXMsIE5VTEwpOwotCiAJcHJfZGVidWcoIiA8LSBlYXJseV9pbml0X2RldnRyZWUoKVxuIik7CiB9CiAKLS8qKgotICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJvb3Qgbm9kZSBoYXMgYSBnaXZlbiB2YWx1ZSBpbiBpdHMKLSAqIGNvbXBhdGlibGUgcHJvcGVydHkuCi0gKi8KLWludCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoY29uc3QgY2hhciAqY29tcGF0KQorI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAordm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9zZXR1cF9pbml0cmRfYXJjaCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQl1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3Q7Ci0JaW50IHJjID0gMDsKLQotCXJvb3QgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOwotCWlmIChyb290KSB7Ci0JCXJjID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocm9vdCwgY29tcGF0KTsKLQkJb2Zfbm9kZV9wdXQocm9vdCk7Ci0JfQotCXJldHVybiByYzsKKwlpbml0cmRfc3RhcnQgPSAodW5zaWduZWQgbG9uZylfX3ZhKHN0YXJ0KTsKKwlpbml0cmRfZW5kID0gKHVuc2lnbmVkIGxvbmcpX192YShlbmQpOworCWluaXRyZF9iZWxvd19zdGFydF9vayA9IDE7CiB9Ci1FWFBPUlRfU1lNQk9MKG1hY2hpbmVfaXNfY29tcGF0aWJsZSk7CisjZW5kaWYKIAogLyoqKioqKioKICAqCkBAIC04MzgsMjczICsxNDEsNiBAQAogICoKICAqKioqKioqLwogCi0vKioKLSAqCW9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlIC0gRmluZCBhIG5vZGUgZ2l2ZW4gYSBwaGFuZGxlCi0gKglAaGFuZGxlOglwaGFuZGxlIG9mIHRoZSBub2RlIHRvIGZpbmQKLSAqCi0gKglSZXR1cm5zIGEgbm9kZSBwb2ludGVyIHdpdGggcmVmY291bnQgaW5jcmVtZW50ZWQsIHVzZQotICoJb2Zfbm9kZV9wdXQoKSBvbiBpdCB3aGVuIGRvbmUuCi0gKi8KLXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUocGhhbmRsZSBoYW5kbGUpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQotCXJlYWRfbG9jaygmZGV2dHJlZV9sb2NrKTsKLQlmb3IgKG5wID0gYWxsbm9kZXM7IG5wICE9IE5VTEw7IG5wID0gbnAtPmFsbG5leHQpCi0JCWlmIChucC0+bGludXhfcGhhbmRsZSA9PSBoYW5kbGUpCi0JCQlicmVhazsKLQlvZl9ub2RlX2dldChucCk7Ci0JcmVhZF91bmxvY2soJmRldnRyZWVfbG9jayk7Ci0JcmV0dXJuIG5wOwotfQotRVhQT1JUX1NZTUJPTChvZl9maW5kX25vZGVfYnlfcGhhbmRsZSk7Ci0KLS8qKgotICoJb2Zfbm9kZV9nZXQgLSBJbmNyZW1lbnQgcmVmY291bnQgb2YgYSBub2RlCi0gKglAbm9kZToJTm9kZSB0byBpbmMgcmVmY291bnQsIE5VTEwgaXMgc3VwcG9ydGVkIHRvCi0gKgkJc2ltcGxpZnkgd3JpdGluZyBvZiBjYWxsZXJzCi0gKgotICoJUmV0dXJucyBub2RlLgotICovCi1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGVfZ2V0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKLXsKLQlpZiAobm9kZSkKLQkJa3JlZl9nZXQoJm5vZGUtPmtyZWYpOwotCXJldHVybiBub2RlOwotfQotRVhQT1JUX1NZTUJPTChvZl9ub2RlX2dldCk7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZV9ub2RlICprcmVmX3RvX2RldmljZV9ub2RlKHN0cnVjdCBrcmVmICprcmVmKQotewotCXJldHVybiBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRldmljZV9ub2RlLCBrcmVmKTsKLX0KLQotLyoqCi0gKglvZl9ub2RlX3JlbGVhc2UgLSByZWxlYXNlIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG5vZGUKLSAqCUBrcmVmOiAga3JlZiBlbGVtZW50IG9mIHRoZSBub2RlIHRvIGJlIHJlbGVhc2VkCi0gKgotICoJSW4gb2Zfbm9kZV9wdXQoKSB0aGlzIGZ1bmN0aW9uIGlzIHBhc3NlZCB0byBrcmVmX3B1dCgpCi0gKglhcyB0aGUgZGVzdHJ1Y3Rvci4KLSAqLwotc3RhdGljIHZvaWQgb2Zfbm9kZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IGtyZWZfdG9fZGV2aWNlX25vZGUoa3JlZik7Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wID0gbm9kZS0+cHJvcGVydGllczsKLQotCS8qIFdlIHNob3VsZCBuZXZlciBiZSByZWxlYXNpbmcgbm9kZXMgdGhhdCBoYXZlbid0IGJlZW4gZGV0YWNoZWQuICovCi0JaWYgKCFvZl9ub2RlX2NoZWNrX2ZsYWcobm9kZSwgT0ZfREVUQUNIRUQpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIldBUk5JTkc6IEJhZCBvZl9ub2RlX3B1dCgpIG9uICVzXG4iLAotCQkJbm9kZS0+ZnVsbF9uYW1lKTsKLQkJZHVtcF9zdGFjaygpOwotCQlrcmVmX2luaXQoJm5vZGUtPmtyZWYpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFvZl9ub2RlX2NoZWNrX2ZsYWcobm9kZSwgT0ZfRFlOQU1JQykpCi0JCXJldHVybjsKLQotCXdoaWxlIChwcm9wKSB7Ci0JCXN0cnVjdCBwcm9wZXJ0eSAqbmV4dCA9IHByb3AtPm5leHQ7Ci0JCWtmcmVlKHByb3AtPm5hbWUpOwotCQlrZnJlZShwcm9wLT52YWx1ZSk7Ci0JCWtmcmVlKHByb3ApOwotCQlwcm9wID0gbmV4dDsKLQotCQlpZiAoIXByb3ApIHsKLQkJCXByb3AgPSBub2RlLT5kZWFkcHJvcHM7Ci0JCQlub2RlLT5kZWFkcHJvcHMgPSBOVUxMOwotCQl9Ci0JfQotCWtmcmVlKG5vZGUtPmZ1bGxfbmFtZSk7Ci0Ja2ZyZWUobm9kZS0+ZGF0YSk7Ci0Ja2ZyZWUobm9kZSk7Ci19Ci0KLS8qKgotICoJb2Zfbm9kZV9wdXQgLSBEZWNyZW1lbnQgcmVmY291bnQgb2YgYSBub2RlCi0gKglAbm9kZToJTm9kZSB0byBkZWMgcmVmY291bnQsIE5VTEwgaXMgc3VwcG9ydGVkIHRvCi0gKgkJc2ltcGxpZnkgd3JpdGluZyBvZiBjYWxsZXJzCi0gKgotICovCi12b2lkIG9mX25vZGVfcHV0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKLXsKLQlpZiAobm9kZSkKLQkJa3JlZl9wdXQoJm5vZGUtPmtyZWYsIG9mX25vZGVfcmVsZWFzZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX25vZGVfcHV0KTsKLQotLyoKLSAqIFBsdWcgYSBkZXZpY2Ugbm9kZSBpbnRvIHRoZSB0cmVlIGFuZCBnbG9iYWwgbGlzdC4KLSAqLwotdm9pZCBvZl9hdHRhY2hfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCW5wLT5zaWJsaW5nID0gbnAtPnBhcmVudC0+Y2hpbGQ7Ci0JbnAtPmFsbG5leHQgPSBhbGxub2RlczsKLQlucC0+cGFyZW50LT5jaGlsZCA9IG5wOwotCWFsbG5vZGVzID0gbnA7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotfQotCi0vKgotICogIlVucGx1ZyIgYSBub2RlIGZyb20gdGhlIGRldmljZSB0cmVlLiAgVGhlIGNhbGxlciBtdXN0IGhvbGQKLSAqIGEgcmVmZXJlbmNlIHRvIHRoZSBub2RlLiAgVGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUKLSAqIGlzIG5vdCBmcmVlZCB1bnRpbCBpdHMgcmVmY291bnQgZ29lcyB0byB6ZXJvLgotICovCi12b2lkIG9mX2RldGFjaF9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0KLQlwYXJlbnQgPSBucC0+cGFyZW50OwotCWlmICghcGFyZW50KQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQlpZiAoYWxsbm9kZXMgPT0gbnApCi0JCWFsbG5vZGVzID0gbnAtPmFsbG5leHQ7Ci0JZWxzZSB7Ci0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcHJldjsKLQkJZm9yIChwcmV2ID0gYWxsbm9kZXM7Ci0JCSAgICAgcHJldi0+YWxsbmV4dCAhPSBucDsKLQkJICAgICBwcmV2ID0gcHJldi0+YWxsbmV4dCkKLQkJCTsKLQkJcHJldi0+YWxsbmV4dCA9IG5wLT5hbGxuZXh0OwotCX0KLQotCWlmIChwYXJlbnQtPmNoaWxkID09IG5wKQotCQlwYXJlbnQtPmNoaWxkID0gbnAtPnNpYmxpbmc7Ci0JZWxzZSB7Ci0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcHJldnNpYjsKLQkJZm9yIChwcmV2c2liID0gbnAtPnBhcmVudC0+Y2hpbGQ7Ci0JCSAgICAgcHJldnNpYi0+c2libGluZyAhPSBucDsKLQkJICAgICBwcmV2c2liID0gcHJldnNpYi0+c2libGluZykKLQkJCTsKLQkJcHJldnNpYi0+c2libGluZyA9IG5wLT5zaWJsaW5nOwotCX0KLQotCW9mX25vZGVfc2V0X2ZsYWcobnAsIE9GX0RFVEFDSEVEKTsKLQotb3V0X3VubG9jazoKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBBZGQgYSBwcm9wZXJ0eSB0byBhIG5vZGUKLSAqLwotaW50IHByb21fYWRkX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKLXsKLQlzdHJ1Y3QgcHJvcGVydHkgKipuZXh0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlwcm9wLT5uZXh0ID0gTlVMTDsKLQl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCW5leHQgPSAmbnAtPnByb3BlcnRpZXM7Ci0Jd2hpbGUgKCpuZXh0KSB7Ci0JCWlmIChzdHJjbXAocHJvcC0+bmFtZSwgKCpuZXh0KS0+bmFtZSkgPT0gMCkgewotCQkJLyogZHVwbGljYXRlICEgZG9uJ3QgaW5zZXJ0IGl0ICovCi0JCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OwotCX0KLQkqbmV4dCA9IHByb3A7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCi0jaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQotCS8qIHRyeSB0byBhZGQgdG8gcHJvYyBhcyB3ZWxsIGlmIGl0IHdhcyBpbml0aWFsaXplZCAqLwotCWlmIChucC0+cGRlKQotCQlwcm9jX2RldmljZV90cmVlX2FkZF9wcm9wKG5wLT5wZGUsIHByb3ApOwotI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KLQotCXJldHVybiAwOwotfQotCi0vKgotICogUmVtb3ZlIGEgcHJvcGVydHkgZnJvbSBhIG5vZGUuICBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkKLSAqIHJlbW92ZSBpdCwgc2luY2Ugd2UgaGF2ZSBnaXZlbiBvdXQgd2hvLWtub3dzLWhvdy1tYW55IHBvaW50ZXJzCi0gKiB0byB0aGUgZGF0YSB1c2luZyBnZXQtcHJvcGVydHkuICBJbnN0ZWFkIHdlIGp1c3QgbW92ZSB0aGUgcHJvcGVydHkKLSAqIHRvIHRoZSAiZGVhZCBwcm9wZXJ0aWVzIiBsaXN0LCBzbyBpdCB3b24ndCBiZSBmb3VuZCBhbnkgbW9yZS4KLSAqLwotaW50IHByb21fcmVtb3ZlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKLXsKLQlzdHJ1Y3QgcHJvcGVydHkgKipuZXh0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGZvdW5kID0gMDsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0JbmV4dCA9ICZucC0+cHJvcGVydGllczsKLQl3aGlsZSAoKm5leHQpIHsKLQkJaWYgKCpuZXh0ID09IHByb3ApIHsKLQkJCS8qIGZvdW5kIHRoZSBub2RlICovCi0JCQkqbmV4dCA9IHByb3AtPm5leHQ7Ci0JCQlwcm9wLT5uZXh0ID0gbnAtPmRlYWRwcm9wczsKLQkJCW5wLT5kZWFkcHJvcHMgPSBwcm9wOwotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OwotCX0KLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIWZvdW5kKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotI2lmZGVmIENPTkZJR19QUk9DX0RFVklDRVRSRUUKLQkvKiB0cnkgdG8gcmVtb3ZlIHRoZSBwcm9jIG5vZGUgYXMgd2VsbCAqLwotCWlmIChucC0+cGRlKQotCQlwcm9jX2RldmljZV90cmVlX3JlbW92ZV9wcm9wKG5wLT5wZGUsIHByb3ApOwotI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KLQotCXJldHVybiAwOwotfQotCi0vKgotICogVXBkYXRlIGEgcHJvcGVydHkgaW4gYSBub2RlLiAgTm90ZSB0aGF0IHdlIGRvbid0IGFjdHVhbGx5Ci0gKiByZW1vdmUgaXQsIHNpbmNlIHdlIGhhdmUgZ2l2ZW4gb3V0IHdoby1rbm93cy1ob3ctbWFueSBwb2ludGVycwotICogdG8gdGhlIGRhdGEgdXNpbmcgZ2V0LXByb3BlcnR5LiAgSW5zdGVhZCB3ZSBqdXN0IG1vdmUgdGhlIHByb3BlcnR5Ci0gKiB0byB0aGUgImRlYWQgcHJvcGVydGllcyIgbGlzdCwgYW5kIGFkZCB0aGUgbmV3IHByb3BlcnR5IHRvIHRoZQotICogcHJvcGVydHkgbGlzdAotICovCi1pbnQgcHJvbV91cGRhdGVfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCSBzdHJ1Y3QgcHJvcGVydHkgKm5ld3Byb3AsCi0JCQkgc3RydWN0IHByb3BlcnR5ICpvbGRwcm9wKQotewotCXN0cnVjdCBwcm9wZXJ0eSAqKm5leHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZm91bmQgPSAwOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQluZXh0ID0gJm5wLT5wcm9wZXJ0aWVzOwotCXdoaWxlICgqbmV4dCkgewotCQlpZiAoKm5leHQgPT0gb2xkcHJvcCkgewotCQkJLyogZm91bmQgdGhlIG5vZGUgKi8KLQkJCW5ld3Byb3AtPm5leHQgPSBvbGRwcm9wLT5uZXh0OwotCQkJKm5leHQgPSBuZXdwcm9wOwotCQkJb2xkcHJvcC0+bmV4dCA9IG5wLT5kZWFkcHJvcHM7Ci0JCQlucC0+ZGVhZHByb3BzID0gb2xkcHJvcDsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JCW5leHQgPSAmKCpuZXh0KS0+bmV4dDsKLQl9Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCi0JaWYgKCFmb3VuZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFCi0JLyogdHJ5IHRvIGFkZCB0byBwcm9jIGFzIHdlbGwgaWYgaXQgd2FzIGluaXRpYWxpemVkICovCi0JaWYgKG5wLT5wZGUpCi0JCXByb2NfZGV2aWNlX3RyZWVfdXBkYXRlX3Byb3AobnAtPnBkZSwgbmV3cHJvcCwgb2xkcHJvcCk7Ci0jZW5kaWYgLyogQ09ORklHX1BST0NfREVWSUNFVFJFRSAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykgJiYgZGVmaW5lZChERUJVRykKIHN0YXRpYyBzdHJ1Y3QgZGVidWdmc19ibG9iX3dyYXBwZXIgZmxhdF9kdF9ibG9iOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IDhiNWQxNzQuLjU5MWNhMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC00MSw3ICs0MSw3IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MAotCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAlzZWxlY3QgR0NECiAJc2VsZWN0IFZMWU5RCiAJaGVscApAQCAtMTgwLDcgKzE4MCw3IEBACiAKIGNvbmZpZyBNQUNIX0xPT05HU09OCiAJYm9vbCAiTG9vbmdzb24gZmFtaWx5IG9mIG1hY2hpbmVzIgotCXNlbGVjdCBTWVNfU1VQUE9SVFNfWkJPT1RfVUFSVDE2NTUwCisJc2VsZWN0IFNZU19TVVBQT1JUU19aQk9PVAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBvZiBMb29uZ3NvbiBmYW1pbHkgb2YgbWFjaGluZXMuCiAKQEAgLTEyOTUsNyArMTI5NSw2IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU19TTVAKIAlzZWxlY3QgTlJfQ1BVU19ERUZBVUxUXzE2CiAJc2VsZWN0IFdFQUtfT1JERVJJTkcKLQlzZWxlY3QgV0VBS19SRU9SREVSSU5HX0JFWU9ORF9MTFNDCiAJc2VsZWN0IENQVV9TVVBQT1JUU19ISUdITUVNCiAJc2VsZWN0IENQVV9TVVBQT1JUU19IVUdFUEFHRVMKIAloZWxwCkBAIC0xNzI2LDYgKzE3MjUsOSBAQAogY29uZmlnIDY0QklUX1BIWVNfQUREUgogCWJvb2wKIAorY29uZmlnIEFSQ0hfUEhZU19BRERSX1RfNjRCSVQKKyAgICAgICBkZWZfYm9vbCA2NEJJVF9QSFlTX0FERFIKKwogY29uZmlnIENQVV9IQVNfU01BUlRNSVBTCiAJZGVwZW5kcyBvbiBTWVNfU1VQUE9SVFNfU01BUlRNSVBTCiAJYm9vbCAiU3VwcG9ydCBmb3IgdGhlIFNtYXJ0TUlQUyBBU0UiCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvbWlwcy9LY29uZmlnLmRlYnVnCmluZGV4IGQyYjg4YTAuLjQzZGMyNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnLmRlYnVnCkBAIC0xMDIsNCArMTAyLDMwIEBACiAJICBhcmNoL21pcHMvaW5jbHVkZS9hc20vZGVidWcuaCBmb3IgZGVidWdnaW5nIG1hY3Jvcy4KIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBERUJVR19aQk9PVAorCWJvb2wgIkVuYWJsZSBjb21wcmVzc2VkIGtlcm5lbCBzdXBwb3J0IGRlYnVnZ2luZyIKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBTWVNfU1VQUE9SVFNfWkJPT1QKKwlkZWZhdWx0IG4KKwloZWxwCisJICBJZiB5b3Ugd2FudCB0byBhZGQgY29tcHJlc3NlZCBrZXJuZWwgc3VwcG9ydCB0byBhIG5ldyBib2FyZCwgYW5kIHRoZQorCSAgYm9hcmQgc3VwcG9ydHMgdWFydDE2NTUwIGNvbXBhdGlibGUgc2VyaWFsIHBvcnQsIHBsZWFzZSBzZWxlY3QKKwkgIFNZU19TVVBQT1JUU19aQk9PVF9VQVJUMTY1NTAgZm9yIHlvdXIgYm9hcmQgYW5kIGVuYWJsZSB0aGlzIG9wdGlvbiB0bworCSAgZGVidWcgaXQuCisKKwkgIElmIHlvdXIgYm9hcmQgZG9lc24ndCBzdXBwb3J0IHVhcnQxNjU1MCBjb21wYXRpYmxlIHNlcmlhbCBwb3J0LCB5b3UKKwkgIGNhbiB0cnkgdG8gc2VsZWN0IFNZU19TVVBQT1JUU19aQk9PVCBhbmQgdXNlIHRoZSBvdGhlciBtZXRob2RzIHRvCisJICBkZWJ1ZyBpdC4gZm9yIGV4YW1wbGUsIGFkZCBhIG5ldyBzZXJpYWwgcG9ydCBzdXBwb3J0IGp1c3QgYXMKKwkgIGFyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvdWFydC0xNjU1MC5jIGRvZXMuCisKKwkgIEFmdGVyIHRoZSBjb21wcmVzc2VkIGtlcm5lbCBzdXBwb3J0IHdvcmtzLCBwbGVhc2UgZGlzYWJsZSB0aGlzIG9wdGlvbgorCSAgdG8gcmVkdWNlIHRoZSBrZXJuZWwgaW1hZ2Ugc2l6ZSBhbmQgc3BlZWQgdXAgdGhlIGJvb3RpbmcgcHJvY2VkdXJlIGEKKwkgIGxpdHRsZS4KKworY29uZmlnIFNQSU5MT0NLX1RFU1QKKwlib29sICJFbmFibGUgc3BpbmxvY2sgdGltaW5nIHRlc3RzIGluIGRlYnVnZnMiCisJZGVwZW5kcyBvbiBERUJVR19GUworCWRlZmF1bHQgbgorCWhlbHAKKwkgIEFkZCBzZXZlcmFsIGZpbGVzIHRvIHRoZSBkZWJ1Z2ZzIHRvIHRlc3Qgc3BpbmxvY2sgc3BlZWQuCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9NYWtlZmlsZQppbmRleCAxODkzZWZkLi4yZjJlYWMyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL01ha2VmaWxlCkBAIC0xODUsNiArMTg1LDE1IEBACiBsaWJzLXkJCQkJKz0gYXJjaC9taXBzL2Z3L2xpYi8KIAogIworIyBLZXJuZWwgY29tcHJlc3Npb24KKyMKK2lmZGVmIFNZU19TVVBQT1JUU19aQk9PVAorQ09NUFJFU1NJT05fRk5BTUUJCT0gdm1saW51egorZWxzZQorQ09NUFJFU1NJT05fRk5BTUUJCT0gdm1saW51eAorZW5kaWYKKworIwogIyBCb2FyZC1kZXBlbmRlbnQgb3B0aW9ucyBhbmQgZXh0cmEgZmlsZXMKICMKIApAQCAtMzMyLDExICszNDEsMTEgQEAKICMKICMgTG9vbmdzb24gZmFtaWx5CiAjCi1jb3JlLSQoQ09ORklHX01BQ0hfTE9PTkdTT04pICs9YXJjaC9taXBzL2xvb25nc29uLworY29yZS0kKENPTkZJR19NQUNIX0xPT05HU09OKSArPSBhcmNoL21pcHMvbG9vbmdzb24vCiBjZmxhZ3MtJChDT05GSUdfTUFDSF9MT09OR1NPTikgKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uIFwKICAgICAgICAgICAgICAgICAgICAgLW1uby1icmFuY2gtbGlrZWx5Ci1sb2FkLSQoQ09ORklHX0xFTU9URV9GVUxPT05HMkUpICs9MHhmZmZmZmZmZjgwMTAwMDAwCi1sb2FkLSQoQ09ORklHX0xFTU9URV9NQUNIMkYpICs9MHhmZmZmZmZmZjgwMjAwMDAwCitsb2FkLSQoQ09ORklHX0xFTU9URV9GVUxPT05HMkUpICs9IDB4ZmZmZmZmZmY4MDEwMDAwMAorbG9hZC0kKENPTkZJR19MRU1PVEVfTUFDSDJGKSArPSAweGZmZmZmZmZmODAyMDAwMDAKIAogIwogIyBNSVBTIE1hbHRhIGJvYXJkCkBAIC0zNDQsNyArMzUzLDcgQEAKIGNvcmUtJChDT05GSUdfTUlQU19NQUxUQSkJKz0gYXJjaC9taXBzL210aS1tYWx0YS8KIGNmbGFncy0kKENPTkZJR19NSVBTX01BTFRBKQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbWFsdGEKIGxvYWQtJChDT05GSUdfTUlQU19NQUxUQSkJKz0gMHhmZmZmZmZmZjgwMTAwMDAwCi1hbGwtJChDT05GSUdfTUlQU19NQUxUQSkJOj0gdm1saW51ei5iaW4KK2FsbC0kKENPTkZJR19NSVBTX01BTFRBKQk6PSAkKENPTVBSRVNTSU9OX0ZOQU1FKS5iaW4KIAogIwogIyBNSVBTIFNJTQpAQCAtNTk0LDcgKzYwMyw3IEBACiBlbHNlCiBsb2FkLSQoQ09ORklHX1NOSV9STSkJCSs9IDB4ZmZmZmZmZmY4MDAzMDAwMAogZW5kaWYKLWFsbC0kKENPTkZJR19TTklfUk0pCQk6PSB2bWxpbnV6LmVjb2ZmCithbGwtJChDT05GSUdfU05JX1JNKQkJOj0gJChDT01QUkVTU0lPTl9GTkFNRSkuZWNvZmYKIAogIwogIyBDb21tb24gVFh4OQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvS2NvbmZpZyBiL2FyY2gvbWlwcy9hbGNoZW15L0tjb25maWcKaW5kZXggMDBiNDk4ZS4uZGYzYjFhNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvS2NvbmZpZworKysgYi9hcmNoL21pcHMvYWxjaGVteS9LY29uZmlnCkBAIC0xLDUgKzEsNSBAQAotIyBhdTEwMDAtc3R5bGUgZ3BpbwotY29uZmlnIEFMQ0hFTVlfR1BJT19BVTEwMDAKKyMgYXUxMDAwLXN0eWxlIGdwaW8gYW5kIGludGVycnVwdCBjb250cm9sbGVycworY29uZmlnIEFMQ0hFTVlfR1BJT0lOVF9BVTEwMDAKIAlib29sCiAKICMgc2VsZWN0IHRoaXMgaW4geW91ciBib2FyZCBjb25maWcgaWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoZSBncGlvCkBAIC0yMCwxMiArMjAsMTQgQEAKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBTT0NfQVUxNTAwCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX0JPU1BPUlVTCiAJYm9vbCAiQWxjaGVteSBCb3Nwb3J1cyBib2FyZCIKIAlzZWxlY3QgU09DX0FVMTUwMAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfREIxMDAwCiAJYm9vbCAiQWxjaGVteSBEQjEwMDAgYm9hcmQiCkBAIC0zMywxMiArMzUsMTQgQEAKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfREIxMTAwCiAJYm9vbCAiQWxjaGVteSBEQjExMDAgYm9hcmQiCiAJc2VsZWN0IFNPQ19BVTExMDAKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX0RCMTIwMAogCWJvb2wgIkFsY2hlbXkgREIxMjAwIGJvYXJkIgpAQCAtNDYsNiArNTAsNyBAQAogCXNlbGVjdCBETUFfQ09IRVJFTlQKIAlzZWxlY3QgTUlQU19ESVNBQkxFX09CU09MRVRFX0lERQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19EQjE1MDAKIAlib29sICJBbGNoZW15IERCMTUwMCBib2FyZCIKQEAgLTU1LDYgKzYwLDcgQEAKIAlzZWxlY3QgTUlQU19ESVNBQkxFX09CU09MRVRFX0lERQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19EQjE1NTAKIAlib29sICJBbGNoZW15IERCMTU1MCBib2FyZCIKQEAgLTYzLDEyICs2OSwxNCBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgTUlQU19ESVNBQkxFX09CU09MRVRFX0lERQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19NSVJBR0UKIAlib29sICJBbGNoZW15IE1pcmFnZSBib2FyZCIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IFNPQ19BVTE1MDAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfUEIxMDAwCiAJYm9vbCAiQWxjaGVteSBQQjEwMDAgYm9hcmQiCkBAIC03Nyw2ICs4NSw3IEBACiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgU1dBUF9JT19TUEFDRQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19QQjExMDAKIAlib29sICJBbGNoZW15IFBCMTEwMCBib2FyZCIKQEAgLTg1LDYgKzk0LDcgQEAKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBTV0FQX0lPX1NQQUNFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAKIGNvbmZpZyBNSVBTX1BCMTIwMAogCWJvb2wgIkFsY2hlbXkgUEIxMjAwIGJvYXJkIgpAQCAtOTIsNiArMTAyLDcgQEAKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IE1JUFNfRElTQUJMRV9PQlNPTEVURV9JREUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KKwlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAogY29uZmlnIE1JUFNfUEIxNTAwCiAJYm9vbCAiQWxjaGVteSBQQjE1MDAgYm9hcmQiCkBAIC05OSw2ICsxMTAsNyBAQAogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19QQjE1NTAKIAlib29sICJBbGNoZW15IFBCMTU1MCBib2FyZCIKQEAgLTEwNywzOSArMTE5LDQxIEBACiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgTUlQU19ESVNBQkxFX09CU09MRVRFX0lERQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBjb25maWcgTUlQU19YWFMxNTAwCiAJYm9vbCAiTXlDYWJsZSBYWFMxNTAwIGJvYXJkIgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgU09DX0FVMTUwMAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgorCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCiBlbmRjaG9pY2UKIAogY29uZmlnIFNPQ19BVTEwMDAKIAlib29sCiAJc2VsZWN0IFNPQ19BVTFYMDAKLQlzZWxlY3QgQUxDSEVNWV9HUElPX0FVMTAwMAorCXNlbGVjdCBBTENIRU1ZX0dQSU9JTlRfQVUxMDAwCiAKIGNvbmZpZyBTT0NfQVUxMTAwCiAJYm9vbAogCXNlbGVjdCBTT0NfQVUxWDAwCi0Jc2VsZWN0IEFMQ0hFTVlfR1BJT19BVTEwMDAKKwlzZWxlY3QgQUxDSEVNWV9HUElPSU5UX0FVMTAwMAogCiBjb25maWcgU09DX0FVMTUwMAogCWJvb2wKIAlzZWxlY3QgU09DX0FVMVgwMAotCXNlbGVjdCBBTENIRU1ZX0dQSU9fQVUxMDAwCisJc2VsZWN0IEFMQ0hFTVlfR1BJT0lOVF9BVTEwMDAKIAogY29uZmlnIFNPQ19BVTE1NTAKIAlib29sCiAJc2VsZWN0IFNPQ19BVTFYMDAKLQlzZWxlY3QgQUxDSEVNWV9HUElPX0FVMTAwMAorCXNlbGVjdCBBTENIRU1ZX0dQSU9JTlRfQVUxMDAwCiAKIGNvbmZpZyBTT0NfQVUxMjAwCiAJYm9vbAogCXNlbGVjdCBTT0NfQVUxWDAwCi0Jc2VsZWN0IEFMQ0hFTVlfR1BJT19BVTEwMDAKKwlzZWxlY3QgQUxDSEVNWV9HUElPSU5UX0FVMTAwMAogCiBjb25maWcgU09DX0FVMVgwMAogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9NYWtlZmlsZQppbmRleCBiNjdmYjUxLi4wNmMwZTY1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL01ha2VmaWxlCkBAIC01LDE0ICs1LDE1IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgQWxjaGVteSBBdTF4eDAgQ1BVcywgZ2VuZXJpYyBmaWxlcy4KICMKIAotb2JqLXkgKz0gcHJvbS5vIGlycS5vIHB1dHMubyB0aW1lLm8gcmVzZXQubyBcCi0JY2xvY2tzLm8gcGxhdGZvcm0ubyBwb3dlci5vIHNldHVwLm8gXAorb2JqLXkgKz0gcHJvbS5vIHRpbWUubyBjbG9ja3MubyBwbGF0Zm9ybS5vIHBvd2VyLm8gc2V0dXAubyBcCiAJc2xlZXBlci5vIGRtYS5vIGRiZG1hLm8KIAorb2JqLSQoQ09ORklHX0FMQ0hFTVlfR1BJT0lOVF9BVTEwMDApICs9IGlycS5vCisKICMgb3B0aW9uYWwgZ3Bpb2xpYiBzdXBwb3J0CiBpZmVxICgkKENPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QpLCkKICBpZmVxICgkKENPTkZJR19HUElPTElCKSx5KQotICBvYmotJChDT05GSUdfQUxDSEVNWV9HUElPX0FVMTAwMCkgKz0gZ3Bpb2xpYi1hdTEwMDAubworICBvYmotJChDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMCkgKz0gZ3Bpb2xpYi1hdTEwMDAubwogIGVuZGlmCiBlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vY2xvY2tzLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vY2xvY2tzLmMKaW5kZXggZDg5OTE4NS4uNDYwYzYyOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2Nsb2Nrcy5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9jbG9ja3MuYwpAQCAtNDAsOCArNDAsNiBAQAogc3RhdGljIHVuc2lnbmVkIGludCBhdTF4MDBfY2xvY2s7IC8qICBIeiAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgdWFydF9iYXVkX2Jhc2U7CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGltZV9sb2NrKTsKLQogLyoKICAqIFNldCB0aGUgYXUxMDAwX2Nsb2NrCiAgKi8KQEAgLTg0LDkgKzgyLDYgQEAKIHVuc2lnbmVkIGxvbmcgYXUxeHh4X2NhbGNfY2xvY2sodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGNwdV9zcGVlZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVfbG9jaywgZmxhZ3MpOwogCiAJLyoKIAkgKiBPbiBlYXJseSBBdTEwMDAsIHN5c19jcHVwbGwgd2FzIHdyaXRlLW9ubHkuIFNpbmNlIHRoZXNlCkBAIC0xMDgsOCArMTAzLDYgQEAKIAlzZXRfYXUxeDAwX3VhcnRfYmF1ZF9iYXNlKGNwdV9zcGVlZCAvICgyICogKChpbnQpKGF1X3JlYWRsKFNZU19QT1dFUkNUUkwpCiAJCQkJCQkJICAmIDB4MDMpICsgMikgKiAxNikpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZV9sb2NrLCBmbGFncyk7Ci0KIAlzZXRfYXUxeDAwX3NwZWVkKGNwdV9zcGVlZCk7CiAKIAlyZXR1cm4gY3B1X3NwZWVkOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYwppbmRleCBmOTIwMWNhLi45OWFlODRjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYwpAQCAtMzAsNiArMzAsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpAQCAtNTgsNyArNTksNiBAQAogCiBzdGF0aWMgZGJkbWFfZ2xvYmFsX3QgKmRiZG1hX2dwdHIgPSAoZGJkbWFfZ2xvYmFsX3QgKilERE1BX0dMT0JBTF9CQVNFOwogc3RhdGljIGludCBkYmRtYV9pbml0aWFsaXplZDsKLXN0YXRpYyB2b2lkIGF1MXh4eF9kYmRtYV9pbml0KHZvaWQpOwogCiBzdGF0aWMgZGJkZXZfdGFiX3QgZGJkZXZfdGFiW10gPSB7CiAjaWZkZWYgQ09ORklHX1NPQ19BVTE1NTAKQEAgLTIzNyw3ICsyMzcsNyBAQAogICAgICAgIHZvaWQgKCpjYWxsYmFjaykoaW50LCB2b2lkICopLCB2b2lkICpjYWxscGFyYW0pCiB7CiAJdW5zaWduZWQgbG9uZyAgIGZsYWdzOwotCXUzMgkJdXNlZCwgY2hhbiwgcnY7CisJdTMyCQl1c2VkLCBjaGFuOwogCXUzMgkJZGNwOwogCWludAkJaTsKIAlkYmRldl90YWJfdAkqc3RwLCAqZHRwOwpAQCAtMjUwLDggKzI1MCw3IEBACiAJICogd2hpY2ggY2FuJ3QgYmUgZG9uZSBzdWNjZXNzZnVsbHkgZHVyaW5nIGJvYXJkIHNldCB1cC4KIAkgKi8KIAlpZiAoIWRiZG1hX2luaXRpYWxpemVkKQotCQlhdTF4eHhfZGJkbWFfaW5pdCgpOwotCWRiZG1hX2luaXRpYWxpemVkID0gMTsKKwkJcmV0dXJuIDA7CiAKIAlzdHAgPSBmaW5kX2RiZGV2X2lkKHNyY2lkKTsKIAlpZiAoc3RwID09IE5VTEwpCkBAIC0yNjEsNyArMjYwLDYgQEAKIAkJcmV0dXJuIDA7CiAKIAl1c2VkID0gMDsKLQlydiA9IDA7CiAKIAkvKiBDaGVjayB0byBzZWUgaWYgd2UgY2FuIGdldCBib3RoIGNoYW5uZWxzLiAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZhdTF4eHhfZGJkbWFfc3Bpbl9sb2NrLCBmbGFncyk7CkBAIC0yODIsNjMgKzI4MCw2NSBAQAogCQl1c2VkKys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXUxeHh4X2RiZG1hX3NwaW5fbG9jaywgZmxhZ3MpOwogCi0JaWYgKCF1c2VkKSB7Ci0JCS8qIExldCdzIHNlZSBpZiB3ZSBjYW4gYWxsb2NhdGUgYSBjaGFubmVsIGZvciBpdC4gKi8KLQkJY3RwID0gTlVMTDsKLQkJY2hhbiA9IDA7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZhdTF4eHhfZGJkbWFfc3Bpbl9sb2NrLCBmbGFncyk7Ci0JCWZvciAoaSA9IDA7IGkgPCBOVU1fREJETUFfQ0hBTlM7IGkrKykKLQkJCWlmIChjaGFuX3RhYl9wdHJbaV0gPT0gTlVMTCkgewotCQkJCS8qCi0JCQkJICogSWYga21hbGxvYyBmYWlscywgaXQgaXMgY2F1Z2h0IGJlbG93IHNhbWUKLQkJCQkgKiBhcyBhIGNoYW5uZWwgbm90IGF2YWlsYWJsZS4KLQkJCQkgKi8KLQkJCQljdHAgPSBrbWFsbG9jKHNpemVvZihjaGFuX3RhYl90KSwgR0ZQX0FUT01JQyk7Ci0JCQkJY2hhbl90YWJfcHRyW2ldID0gY3RwOwotCQkJCWJyZWFrOwotCQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdTF4eHhfZGJkbWFfc3Bpbl9sb2NrLCBmbGFncyk7CisJaWYgKHVzZWQpCisJCXJldHVybiAwOwogCi0JCWlmIChjdHAgIT0gTlVMTCkgewotCQkJbWVtc2V0KGN0cCwgMCwgc2l6ZW9mKGNoYW5fdGFiX3QpKTsKLQkJCWN0cC0+Y2hhbl9pbmRleCA9IGNoYW4gPSBpOwotCQkJZGNwID0gRERNQV9DSEFOTkVMX0JBU0U7Ci0JCQlkY3AgKz0gKDB4MDEwMCAqIGNoYW4pOwotCQkJY3RwLT5jaGFuX3B0ciA9IChhdTF4X2RtYV9jaGFuX3QgKilkY3A7Ci0JCQljcCA9IChhdTF4X2RtYV9jaGFuX3QgKilkY3A7Ci0JCQljdHAtPmNoYW5fc3JjID0gc3RwOwotCQkJY3RwLT5jaGFuX2Rlc3QgPSBkdHA7Ci0JCQljdHAtPmNoYW5fY2FsbGJhY2sgPSBjYWxsYmFjazsKLQkJCWN0cC0+Y2hhbl9jYWxscGFyYW0gPSBjYWxscGFyYW07Ci0KLQkJCS8qIEluaXRpYWxpemUgY2hhbm5lbCBjb25maWd1cmF0aW9uLiAqLwotCQkJaSA9IDA7Ci0JCQlpZiAoc3RwLT5kZXZfaW50bGV2ZWwpCi0JCQkJaSB8PSBERE1BX0NGR19TRUQ7Ci0JCQlpZiAoc3RwLT5kZXZfaW50cG9sYXJpdHkpCi0JCQkJaSB8PSBERE1BX0NGR19TUDsKLQkJCWlmIChkdHAtPmRldl9pbnRsZXZlbCkKLQkJCQlpIHw9IERETUFfQ0ZHX0RFRDsKLQkJCWlmIChkdHAtPmRldl9pbnRwb2xhcml0eSkKLQkJCQlpIHw9IERETUFfQ0ZHX0RQOwotCQkJaWYgKChzdHAtPmRldl9mbGFncyAmIERFVl9GTEFHU19TWU5DKSB8fAotCQkJCShkdHAtPmRldl9mbGFncyAmIERFVl9GTEFHU19TWU5DKSkKLQkJCQkJaSB8PSBERE1BX0NGR19TWU5DOwotCQkJY3AtPmRkbWFfY2ZnID0gaTsKLQkJCWF1X3N5bmMoKTsKLQotCQkJLyogUmV0dXJuIGEgbm9uLXplcm8gdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCB0bwotCQkJICogZmluZCB0aGUgY2hhbm5lbCBpbmZvcm1hdGlvbiBpbiBzdWJzZXF1ZW50Ci0JCQkgKiBvcGVyYXRpb25zLgorCS8qIExldCdzIHNlZSBpZiB3ZSBjYW4gYWxsb2NhdGUgYSBjaGFubmVsIGZvciBpdC4gKi8KKwljdHAgPSBOVUxMOworCWNoYW4gPSAwOworCXNwaW5fbG9ja19pcnFzYXZlKCZhdTF4eHhfZGJkbWFfc3Bpbl9sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IE5VTV9EQkRNQV9DSEFOUzsgaSsrKQorCQlpZiAoY2hhbl90YWJfcHRyW2ldID09IE5VTEwpIHsKKwkJCS8qCisJCQkgKiBJZiBrbWFsbG9jIGZhaWxzLCBpdCBpcyBjYXVnaHQgYmVsb3cgc2FtZQorCQkJICogYXMgYSBjaGFubmVsIG5vdCBhdmFpbGFibGUuCiAJCQkgKi8KLQkJCXJ2ID0gKHUzMikoJmNoYW5fdGFiX3B0cltjaGFuXSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBSZWxlYXNlIGRldmljZXMgKi8KLQkJCXN0cC0+ZGV2X2ZsYWdzICY9IH5ERVZfRkxBR1NfSU5VU0U7Ci0JCQlkdHAtPmRldl9mbGFncyAmPSB+REVWX0ZMQUdTX0lOVVNFOworCQkJY3RwID0ga21hbGxvYyhzaXplb2YoY2hhbl90YWJfdCksIEdGUF9BVE9NSUMpOworCQkJY2hhbl90YWJfcHRyW2ldID0gY3RwOworCQkJYnJlYWs7CiAJCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdTF4eHhfZGJkbWFfc3Bpbl9sb2NrLCBmbGFncyk7CisKKwlpZiAoY3RwICE9IE5VTEwpIHsKKwkJbWVtc2V0KGN0cCwgMCwgc2l6ZW9mKGNoYW5fdGFiX3QpKTsKKwkJY3RwLT5jaGFuX2luZGV4ID0gY2hhbiA9IGk7CisJCWRjcCA9IERETUFfQ0hBTk5FTF9CQVNFOworCQlkY3AgKz0gKDB4MDEwMCAqIGNoYW4pOworCQljdHAtPmNoYW5fcHRyID0gKGF1MXhfZG1hX2NoYW5fdCAqKWRjcDsKKwkJY3AgPSAoYXUxeF9kbWFfY2hhbl90ICopZGNwOworCQljdHAtPmNoYW5fc3JjID0gc3RwOworCQljdHAtPmNoYW5fZGVzdCA9IGR0cDsKKwkJY3RwLT5jaGFuX2NhbGxiYWNrID0gY2FsbGJhY2s7CisJCWN0cC0+Y2hhbl9jYWxscGFyYW0gPSBjYWxscGFyYW07CisKKwkJLyogSW5pdGlhbGl6ZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24uICovCisJCWkgPSAwOworCQlpZiAoc3RwLT5kZXZfaW50bGV2ZWwpCisJCQlpIHw9IERETUFfQ0ZHX1NFRDsKKwkJaWYgKHN0cC0+ZGV2X2ludHBvbGFyaXR5KQorCQkJaSB8PSBERE1BX0NGR19TUDsKKwkJaWYgKGR0cC0+ZGV2X2ludGxldmVsKQorCQkJaSB8PSBERE1BX0NGR19ERUQ7CisJCWlmIChkdHAtPmRldl9pbnRwb2xhcml0eSkKKwkJCWkgfD0gRERNQV9DRkdfRFA7CisJCWlmICgoc3RwLT5kZXZfZmxhZ3MgJiBERVZfRkxBR1NfU1lOQykgfHwKKwkJCShkdHAtPmRldl9mbGFncyAmIERFVl9GTEFHU19TWU5DKSkKKwkJCQlpIHw9IERETUFfQ0ZHX1NZTkM7CisJCWNwLT5kZG1hX2NmZyA9IGk7CisJCWF1X3N5bmMoKTsKKworCQkvKgorCQkgKiBSZXR1cm4gYSBub24temVybyB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGZpbmQgdGhlIGNoYW5uZWwKKwkJICogaW5mb3JtYXRpb24gaW4gc3Vic2VxdWVudCBvcGVyYXRpb25zLgorCQkgKi8KKwkJcmV0dXJuICh1MzIpKCZjaGFuX3RhYl9wdHJbY2hhbl0pOwogCX0KLQlyZXR1cm4gcnY7CisKKwkvKiBSZWxlYXNlIGRldmljZXMgKi8KKwlzdHAtPmRldl9mbGFncyAmPSB+REVWX0ZMQUdTX0lOVVNFOworCWR0cC0+ZGV2X2ZsYWdzICY9IH5ERVZfRkxBR1NfSU5VU0U7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woYXUxeHh4X2RiZG1hX2NoYW5fYWxsb2MpOwogCkBAIC01NzIsNyArNTcyLDcgQEAKICAqIFRoaXMgdXBkYXRlcyB0aGUgc291cmNlIHBvaW50ZXIgYW5kIGJ5dGUgY291bnQuICBOb3JtYWxseSB1c2VkCiAgKiBmb3IgbWVtb3J5IHRvIGZpZm8gdHJhbnNmZXJzLgogICovCi11MzIgX2F1MXh4eF9kYmRtYV9wdXRfc291cmNlKHUzMiBjaGFuaWQsIHZvaWQgKmJ1ZiwgaW50IG5ieXRlcywgdTMyIGZsYWdzKQordTMyIGF1MXh4eF9kYmRtYV9wdXRfc291cmNlKHUzMiBjaGFuaWQsIGRtYV9hZGRyX3QgYnVmLCBpbnQgbmJ5dGVzLCB1MzIgZmxhZ3MpCiB7CiAJY2hhbl90YWJfdAkJKmN0cDsKIAlhdTF4X2RkbWFfZGVzY190CSpkcDsKQEAgLTU5OCw3ICs1OTgsNyBAQAogCQlyZXR1cm4gMDsKIAogCS8qIExvYWQgdXAgYnVmZmVyIGFkZHJlc3MgYW5kIGJ5dGUgY291bnQuICovCi0JZHAtPmRzY3Jfc291cmNlMCA9IHZpcnRfdG9fcGh5cyhidWYpOworCWRwLT5kc2NyX3NvdXJjZTAgPSBidWYgJiB+MFVMOwogCWRwLT5kc2NyX2NtZDEgPSBuYnl0ZXM7CiAJLyogQ2hlY2sgZmxhZ3MgKi8KIAlpZiAoZmxhZ3MgJiBERE1BX0ZMQUdTX0lFKQpAQCAtNjI1LDE0ICs2MjUsMTMgQEAKIAkvKiBSZXR1cm4gc29tZXRoaW5nIG5vbi16ZXJvLiAqLwogCXJldHVybiBuYnl0ZXM7CiB9Ci1FWFBPUlRfU1lNQk9MKF9hdTF4eHhfZGJkbWFfcHV0X3NvdXJjZSk7CitFWFBPUlRfU1lNQk9MKGF1MXh4eF9kYmRtYV9wdXRfc291cmNlKTsKIAogLyogUHV0IGEgZGVzdGluYXRpb24gYnVmZmVyIGludG8gdGhlIERNQSByaW5nLgogICogVGhpcyB1cGRhdGVzIHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyIGFuZCBieXRlIGNvdW50LiAgTm9ybWFsbHkgdXNlZAogICogdG8gcGxhY2UgYW4gZW1wdHkgYnVmZmVyIGludG8gdGhlIHJpbmcgZm9yIGZpZm8gdG8gbWVtb3J5IHRyYW5zZmVycy4KICAqLwotdTMyCi1fYXUxeHh4X2RiZG1hX3B1dF9kZXN0KHUzMiBjaGFuaWQsIHZvaWQgKmJ1ZiwgaW50IG5ieXRlcywgdTMyIGZsYWdzKQordTMyIGF1MXh4eF9kYmRtYV9wdXRfZGVzdCh1MzIgY2hhbmlkLCBkbWFfYWRkcl90IGJ1ZiwgaW50IG5ieXRlcywgdTMyIGZsYWdzKQogewogCWNoYW5fdGFiX3QJCSpjdHA7CiAJYXUxeF9kZG1hX2Rlc2NfdAkqZHA7CkBAIC02NjIsNyArNjYxLDcgQEAKIAlpZiAoZmxhZ3MgJiBERE1BX0ZMQUdTX05PSUUpCiAJCWRwLT5kc2NyX2NtZDAgJj0gfkRTQ1JfQ01EMF9JRTsKIAotCWRwLT5kc2NyX2Rlc3QwID0gdmlydF90b19waHlzKGJ1Zik7CisJZHAtPmRzY3JfZGVzdDAgPSBidWYgJiB+MFVMOwogCWRwLT5kc2NyX2NtZDEgPSBuYnl0ZXM7CiAjaWYgMAogCXByaW50ayhLRVJOX0RFQlVHICJjbWQwOiV4IGNtZDE6JXggc291cmNlMDoleCBzb3VyY2UxOiV4IGRlc3QwOiV4IGRlc3QxOiV4XG4iLApAQCAtNjg4LDcgKzY4Nyw3IEBACiAJLyogUmV0dXJuIHNvbWV0aGluZyBub24temVyby4gKi8KIAlyZXR1cm4gbmJ5dGVzOwogfQotRVhQT1JUX1NZTUJPTChfYXUxeHh4X2RiZG1hX3B1dF9kZXN0KTsKK0VYUE9SVF9TWU1CT0woYXUxeHh4X2RiZG1hX3B1dF9kZXN0KTsKIAogLyoKICAqIEdldCBhIGRlc3RpbmF0aW9uIGJ1ZmZlciBpbnRvIHRoZSBETUEgcmluZy4KQEAgLTg3MSwyOCArODcwLDYgQEAKIAlyZXR1cm4gSVJRX1JFVFZBTCgxKTsKIH0KIAotc3RhdGljIHZvaWQgYXUxeHh4X2RiZG1hX2luaXQodm9pZCkKLXsKLQlpbnQgaXJxX25yOwotCi0JZGJkbWFfZ3B0ci0+ZGRtYV9jb25maWcgPSAwOwotCWRiZG1hX2dwdHItPmRkbWFfdGhyb3R0bGUgPSAwOwotCWRiZG1hX2dwdHItPmRkbWFfaW50ZW4gPSAweGZmZmY7Ci0JYXVfc3luYygpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKLQlpcnFfbnIgPSBBVTE1NTBfRERNQV9JTlQ7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMjAwKQotCWlycV9uciA9IEFVMTIwMF9ERE1BX0lOVDsKLSNlbHNlCi0JI2Vycm9yIFVua25vd24gQXUxeDAwIFNPQwotI2VuZGlmCi0KLQlpZiAocmVxdWVzdF9pcnEoaXJxX25yLCBkYmRtYV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCi0JCQkiQXUxeHh4IGRiZG1hIiwgKHZvaWQgKilkYmRtYV9ncHRyKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBnZXQgMTU1MCBkYmRtYSBpcnEiKTsKLX0KLQogdm9pZCBhdTF4eHhfZGJkbWFfZHVtcCh1MzIgY2hhbmlkKQogewogCWNoYW5fdGFiX3QJICpjdHA7CkBAIC05MDYsNyArODgzLDcgQEAKIAlkdHAgPSBjdHAtPmNoYW5fZGVzdDsKIAljcCA9IGN0cC0+Y2hhbl9wdHI7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiQ2hhbiAleCwgc3RwICV4IChkZXYgJWQpICBkdHAgJXggKGRldiAlZCkgXG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJDaGFuICV4LCBzdHAgJXggKGRldiAlZCkgIGR0cCAleCAoZGV2ICVkKVxuIiwKIAkJCSAgKHUzMiljdHAsICh1MzIpc3RwLCBzdHAgLSBkYmRldl90YWIsICh1MzIpZHRwLAogCQkJICBkdHAgLSBkYmRldl90YWIpOwogCXByaW50ayhLRVJOX0RFQlVHICJkZXNjIGJhc2UgJXgsIGdldCAleCwgcHV0ICV4LCBjdXIgJXhcbiIsCkBAIC0xMDQxLDQgKzEwMTgsMzggQEAKIAl9CiB9CiAjZW5kaWYJLyogQ09ORklHX1BNICovCisKK3N0YXRpYyBpbnQgX19pbml0IGF1MXh4eF9kYmRtYV9pbml0KHZvaWQpCit7CisJaW50IGlycV9uciwgcmV0OworCisJZGJkbWFfZ3B0ci0+ZGRtYV9jb25maWcgPSAwOworCWRiZG1hX2dwdHItPmRkbWFfdGhyb3R0bGUgPSAwOworCWRiZG1hX2dwdHItPmRkbWFfaW50ZW4gPSAweGZmZmY7CisJYXVfc3luYygpOworCisJc3dpdGNoIChhbGNoZW15X2dldF9jcHV0eXBlKCkpIHsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTU1MDoKKwkJaXJxX25yID0gQVUxNTUwX0RETUFfSU5UOworCQlicmVhazsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTIwMDoKKwkJaXJxX25yID0gQVUxMjAwX0RETUFfSU5UOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShpcnFfbnIsIGRiZG1hX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKKwkJCSJBdTF4eHggZGJkbWEiLCAodm9pZCAqKWRiZG1hX2dwdHIpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGdyYWIgREJETUEgaW50ZXJydXB0IVxuIik7CisJZWxzZSB7CisJCWRiZG1hX2luaXRpYWxpemVkID0gMTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQWxjaGVteSBEQkRNQSBpbml0aWFsaXplZFxuIik7CisJfQorCisJcmV0dXJuIHJldDsKK30KK3N1YnN5c19pbml0Y2FsbChhdTF4eHhfZGJkbWFfaW5pdCk7CisKICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTUwKSB8fCBkZWZpbmVkKENPTkZJR19TT0NfQVUxMjAwKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RtYS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RtYS5jCmluZGV4IGQ2ZmJkYTIuLmQ1Mjc4ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kbWEuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZG1hLmMKQEAgLTI5LDYgKzI5LDggQEAKICAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqCiAgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMTg4LDE3ICsxOTAsMTQgQEAKIAkJZGV2ID0gJmRtYV9kZXZfdGFibGVbZGV2X2lkXTsKIAogCWlmIChpcnFoYW5kbGVyKSB7Ci0JCWNoYW4tPmlycSA9IEFVMTAwMF9ETUFfSU5UX0JBU0UgKyBpOwogCQljaGFuLT5pcnFfZGV2ID0gaXJxX2Rldl9pZDsKIAkJcmV0ID0gcmVxdWVzdF9pcnEoY2hhbi0+aXJxLCBpcnFoYW5kbGVyLCBpcnFmbGFncywgZGV2X3N0ciwKIAkJCQkgIGNoYW4tPmlycV9kZXYpOwogCQlpZiAocmV0KSB7Ci0JCQljaGFuLT5pcnEgPSAwOwogCQkJY2hhbi0+aXJxX2RldiA9IE5VTEw7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfSBlbHNlIHsKLQkJY2hhbi0+aXJxID0gMDsKIAkJY2hhbi0+aXJxX2RldiA9IE5VTEw7CiAJfQogCkBAIC0yMjYsMTMgKzIyNSw0MCBAQAogCX0KIAogCWRpc2FibGVfZG1hKGRtYW5yKTsKLQlpZiAoY2hhbi0+aXJxKQorCWlmIChjaGFuLT5pcnFfZGV2KQogCQlmcmVlX2lycShjaGFuLT5pcnEsIGNoYW4tPmlycV9kZXYpOwogCi0JY2hhbi0+aXJxID0gMDsKIAljaGFuLT5pcnFfZGV2ID0gTlVMTDsKIAljaGFuLT5kZXZfaWQgPSAtMTsKIH0KIEVYUE9SVF9TWU1CT0woZnJlZV9hdTEwMDBfZG1hKTsKIAorc3RhdGljIGludCBfX2luaXQgYXUxMDAwX2RtYV9pbml0KHZvaWQpCit7CisgICAgICAgIGludCBiYXNlLCBpOworCisgICAgICAgIHN3aXRjaCAoYWxjaGVteV9nZXRfY3B1dHlwZSgpKSB7CisgICAgICAgIGNhc2UgQUxDSEVNWV9DUFVfQVUxMDAwOgorICAgICAgICAgICAgICAgIGJhc2UgPSBBVTEwMDBfRE1BX0lOVF9CQVNFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFMQ0hFTVlfQ1BVX0FVMTUwMDoKKyAgICAgICAgICAgICAgICBiYXNlID0gQVUxNTAwX0RNQV9JTlRfQkFTRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBTENIRU1ZX0NQVV9BVTExMDA6CisgICAgICAgICAgICAgICAgYmFzZSA9IEFVMTEwMF9ETUFfSU5UX0JBU0U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX0FVMTAwMF9ETUFfQ0hBTk5FTFM7IGkrKykKKyAgICAgICAgICAgICAgICBhdTEwMDBfZG1hX3RhYmxlW2ldLmlycSA9IGJhc2UgKyBpOworCisgICAgICAgIHByaW50ayhLRVJOX0lORk8gIkFsY2hlbXkgRE1BIGluaXRpYWxpemVkXG4iKTsKKworb3V0OgorICAgICAgICByZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoYXUxMDAwX2RtYV9pbml0KTsKKwogI2VuZGlmIC8qIEFVMTAwMCBBVTE1MDAgQVUxMTAwICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZ3Bpb2xpYi1hdTEwMDAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9ncGlvbGliLWF1MTAwMC5jCmluZGV4IDFiZmE5MWYuLmM4ZTFhOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9ncGlvbGliLWF1MTAwMC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9ncGlvbGliLWF1MTAwMC5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9ncGlvLmg+CiAKLSNpZiAhZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKIHN0YXRpYyBpbnQgZ3BpbzJfZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKIAlyZXR1cm4gYWxjaGVteV9ncGlvMl9nZXRfdmFsdWUob2Zmc2V0ICsgQUxDSEVNWV9HUElPMl9CQVNFKTsKQEAgLTYzLDcgKzYyLDcgQEAKIHsKIAlyZXR1cm4gYWxjaGVteV9ncGlvMl90b19pcnEob2Zmc2V0ICsgQUxDSEVNWV9HUElPMl9CQVNFKTsKIH0KLSNlbmRpZiAvKiAhZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkgKi8KKwogCiBzdGF0aWMgaW50IGdwaW8xX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7CkBAIC0xMDQsNyArMTAzLDYgQEAKIAkJLmJhc2UJCQk9IEFMQ0hFTVlfR1BJTzFfQkFTRSwKIAkJLm5ncGlvCQkJPSBBTENIRU1ZX0dQSU8xX05VTSwKIAl9LAotI2lmICFkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQogCVsxXSA9IHsKIAkJLmxhYmVsICAgICAgICAgICAgICAgICAgPSAiYWxjaGVteS1ncGlvMiIsCiAJCS5kaXJlY3Rpb25faW5wdXQgICAgICAgID0gZ3BpbzJfZGlyZWN0aW9uX2lucHV0LApAQCAtMTE1LDE1ICsxMTMsMTMgQEAKIAkJLmJhc2UgICAgICAgICAgICAgICAgICAgPSBBTENIRU1ZX0dQSU8yX0JBU0UsCiAJCS5uZ3BpbyAgICAgICAgICAgICAgICAgID0gQUxDSEVNWV9HUElPMl9OVU0sCiAJfSwKLSNlbmRpZgogfTsKIAogc3RhdGljIGludCBfX2luaXQgYWxjaGVteV9ncGlvbGliX2luaXQodm9pZCkKIHsKIAlncGlvY2hpcF9hZGQoJmFsY2hlbXlfZ3Bpb19jaGlwWzBdKTsKLSNpZiAhZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQlncGlvY2hpcF9hZGQoJmFsY2hlbXlfZ3Bpb19jaGlwWzFdKTsKLSNlbmRpZgorCWlmIChhbGNoZW15X2dldF9jcHV0eXBlKCkgIT0gQUxDSEVNWV9DUFVfQVUxMDAwKQorCQlncGlvY2hpcF9hZGQoJmFsY2hlbXlfZ3Bpb19jaGlwWzFdKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2lycS5jCmluZGV4IGQ2NzA5MjguLmIyODIxYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9pcnEuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vaXJxLmMKQEAgLTM5LDE2OCArMzksMTgwIEBACiAKIHN0YXRpYyBpbnQgYXUxeF9pY19zZXR0eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpOwogCisvKiBOT1RFIG9uIGludGVycnVwdCBwcmlvcml0aWVzOiBUaGUgb3JpZ2luYWwgd3JpdGVycyBvZiB0aGlzIGNvZGUgc2FpZDoKKyAqCisgKiBCZWNhdXNlIG9mIHRoZSB0aWdodCB0aW1pbmcgb2YgU0VUVVAgdG9rZW4gdG8gcmVwbHkgdHJhbnNhY3Rpb25zLAorICogdGhlIFVTQiBkZXZpY2VzLXNpZGUgcGFja2V0IGNvbXBsZXRlIGludGVycnVwdCAoVVNCX0RFVl9SRVFfSU5UKQorICogbmVlZHMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkuCisgKi8KKwogLyogcGVyLXByb2Nlc3NvciBmaXhlZCBmdW5jdGlvbiBpcnFzICovCi1zdHJ1Y3QgYXUxeHh4X2lycW1hcCBhdTF4eHhfaWMwX21hcFtdIF9faW5pdGRhdGEgPSB7CitzdHJ1Y3QgYXUxeHh4X2lycW1hcCB7CisJaW50IGltX2lycTsKKwlpbnQgaW1fdHlwZTsKKwlpbnQgaW1fcmVxdWVzdDsJCS8qIHNldCAxIHRvIGdldCBoaWdoZXIgcHJpb3JpdHkgKi8KK307CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCXsgQVUxMDAwX1VBUlQwX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1VBUlQxX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1VBUlQyX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1VBUlQzX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1NTSTBfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfU1NJMV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrMSwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSsyLCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzMsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs1LCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzYsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNywgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1RPWV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMF9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVE9ZX01BVENIMl9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAxIH0sCi0JeyBBVTEwMDBfUlRDX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gwX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gxX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9SVENfTUFUQ0gyX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9JUkRBX1RYX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0lSREFfUlhfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVVNCX0RFVl9SRVFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCitzdHJ1Y3QgYXUxeHh4X2lycW1hcCBhdTEwMDBfaXJxbWFwW10gX19pbml0ZGF0YSA9IHsKKwl7IEFVMTAwMF9VQVJUMF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9VQVJUMV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9VQVJUMl9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9VQVJUM19JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9TU0kwX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX1NTSTFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfRE1BX0lOVF9CQVNFLAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzEsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSsyLCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrMywgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzQsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs1LCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNiwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzcsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX1RPWV9JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTAwMF9UT1lfTUFUQ0gwX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEwMDBfVE9ZX01BVENIMV9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMDAwX1RPWV9NQVRDSDJfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTAwMF9SVENfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEwMDBfUlRDX01BVENIMF9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMDAwX1JUQ19NQVRDSDFfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTAwMF9SVENfTUFUQ0gyX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAxIH0sCisJeyBBVTEwMDBfSVJEQV9UWF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTAwMF9JUkRBX1JYX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMDAwX1VTQl9ERVZfUkVRX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDEgfSwKIAl7IEFVMTAwMF9VU0JfREVWX1NVU19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfVVNCX0hPU1RfSU5ULCBJUlFfVFlQRV9MRVZFTF9MT1csIDAgfSwKLQl7IEFVMTAwMF9BQ1NZTkNfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX01BQzBfRE1BX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX01BQzFfRE1BX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0FDOTdDX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTAwMF9VU0JfSE9TVF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfTE9XLCAgIDAgfSwKKwl7IEFVMTAwMF9BQ1NZTkNfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEwMDBfTUFDMF9ETUFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfTUFDMV9ETUFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEwMDBfQUM5N0NfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyAtMSwgfSwKK307CiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1MDApCitzdHJ1Y3QgYXUxeHh4X2lycW1hcCBhdTE1MDBfaXJxbWFwW10gX19pbml0ZGF0YSA9IHsKKwl7IEFVMTUwMF9VQVJUMF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTUwMF9QQ0lfSU5UQSwJICBJUlFfVFlQRV9MRVZFTF9MT1csICAgMCB9LAorCXsgQVUxNTAwX1BDSV9JTlRCLAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTE1MDBfVUFSVDNfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1MDBfUENJX0lOVEMsCSAgSVJRX1RZUEVfTEVWRUxfTE9XLCAgIDAgfSwKKwl7IEFVMTUwMF9QQ0lfSU5URCwJICBJUlFfVFlQRV9MRVZFTF9MT1csICAgMCB9LAorCXsgQVUxNTAwX0RNQV9JTlRfQkFTRSwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTAwX0RNQV9JTlRfQkFTRSsxLCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTUwMF9ETUFfSU5UX0JBU0UrMiwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1MDBfRE1BX0lOVF9CQVNFKzMsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTAwX0RNQV9JTlRfQkFTRSs0LCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTUwMF9ETUFfSU5UX0JBU0UrNSwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1MDBfRE1BX0lOVF9CQVNFKzYsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTAwX0RNQV9JTlRfQkFTRSs3LCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTUwMF9UT1lfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1MDBfVE9ZX01BVENIMF9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTAwX1RPWV9NQVRDSDFfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTUwMF9UT1lfTUFUQ0gyX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1MDBfUlRDX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTAwX1JUQ19NQVRDSDBfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTUwMF9SVENfTUFUQ0gxX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1MDBfUlRDX01BVENIMl9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMSB9LAorCXsgQVUxNTAwX1VTQl9ERVZfUkVRX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDEgfSwKKwl7IEFVMTUwMF9VU0JfREVWX1NVU19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1MDBfVVNCX0hPU1RfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTE1MDBfQUNTWU5DX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTAwX01BQzBfRE1BX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTAwX01BQzFfRE1BX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTAwX0FDOTdDX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgLTEsIH0sCit9OwogCi0JeyBBVTE1MDBfVUFSVDBfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfUENJX0lOVEEsIElSUV9UWVBFX0xFVkVMX0xPVywgMCB9LAotCXsgQVUxMDAwX1BDSV9JTlRCLCBJUlFfVFlQRV9MRVZFTF9MT1csIDAgfSwKLQl7IEFVMTUwMF9VQVJUM19JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9QQ0lfSU5UQywgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTEwMDBfUENJX0lOVEQsIElSUV9UWVBFX0xFVkVMX0xPVywgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSsxLCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzIsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrMywgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs0LCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzUsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNiwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs3LCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVE9ZX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9UT1lfTUFUQ0gwX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9UT1lfTUFUQ0gyX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDEgfSwKLQl7IEFVMTAwMF9SVENfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1JUQ19NQVRDSDBfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1JUQ19NQVRDSDFfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1JUQ19NQVRDSDJfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1VTQl9ERVZfUkVRX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1VTQl9ERVZfU1VTX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9VU0JfSE9TVF9JTlQsIElSUV9UWVBFX0xFVkVMX0xPVywgMCB9LAotCXsgQVUxMDAwX0FDU1lOQ19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTE1MDBfTUFDMF9ETUFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTE1MDBfTUFDMV9ETUFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfQUM5N0NfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorc3RydWN0IGF1MXh4eF9pcnFtYXAgYXUxMTAwX2lycW1hcFtdIF9faW5pdGRhdGEgPSB7CisJeyBBVTExMDBfVUFSVDBfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfVUFSVDFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfU0RfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfVUFSVDNfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfU1NJMF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9TU0kxX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX0RNQV9JTlRfQkFTRSwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX0RNQV9JTlRfQkFTRSsxLCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9ETUFfSU5UX0JBU0UrMiwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfRE1BX0lOVF9CQVNFKzMsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX0RNQV9JTlRfQkFTRSs0LCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9ETUFfSU5UX0JBU0UrNSwgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfRE1BX0lOVF9CQVNFKzYsICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMTAwX0RNQV9JTlRfQkFTRSs3LCAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9UT1lfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTExMDBfVE9ZX01BVENIMF9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMTAwX1RPWV9NQVRDSDFfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTEwMF9UT1lfTUFUQ0gyX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTExMDBfUlRDX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMTAwX1JUQ19NQVRDSDBfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTEwMF9SVENfTUFUQ0gxX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTExMDBfUlRDX01BVENIMl9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMSB9LAorCXsgQVUxMTAwX0lSREFfVFhfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfSVJEQV9SWF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9VU0JfREVWX1JFUV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsICAxIH0sCisJeyBBVTExMDBfVVNCX0RFVl9TVVNfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMTAwX1VTQl9IT1NUX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9MT1csICAgMCB9LAorCXsgQVUxMTAwX0FDU1lOQ19JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTEwMF9NQUMwX0RNQV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTEwMF9MQ0RfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTExMDBfQUM5N0NfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyAtMSwgfSwKK307CiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTExMDApCi0KLQl7IEFVMTEwMF9VQVJUMF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTEwMF9VQVJUMV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTEwMF9TRF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTEwMF9VQVJUM19JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9TU0kwX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1NTSTFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFLCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzEsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrMiwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSszLCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9ETUFfSU5UX0JBU0UrNSwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0RNQV9JTlRfQkFTRSs2LCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfRE1BX0lOVF9CQVNFKzcsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9UT1lfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDBfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDFfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDJfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMSB9LAotCXsgQVUxMDAwX1JUQ19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMF9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMl9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfSVJEQV9UWF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9JUkRBX1JYX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1VTQl9ERVZfUkVRX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX1VTQl9ERVZfU1VTX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9VU0JfSE9TVF9JTlQsIElSUV9UWVBFX0xFVkVMX0xPVywgMCB9LAotCXsgQVUxMDAwX0FDU1lOQ19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTExMDBfTUFDMF9ETUFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTExMDBfTENEX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMDAwX0FDOTdDX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKLQotCXsgQVUxNTUwX1VBUlQwX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxNTUwX1BDSV9JTlRBLCBJUlFfVFlQRV9MRVZFTF9MT1csIDAgfSwKLQl7IEFVMTU1MF9QQ0lfSU5UQiwgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTE1NTBfRERNQV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTU1MF9DUllQVE9fSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTE1NTBfUENJX0lOVEMsIElSUV9UWVBFX0xFVkVMX0xPVywgMCB9LAotCXsgQVUxNTUwX1BDSV9JTlRELCBJUlFfVFlQRV9MRVZFTF9MT1csIDAgfSwKLQl7IEFVMTU1MF9QQ0lfUlNUX0lOVCwgSVJRX1RZUEVfTEVWRUxfTE9XLCAwIH0sCi0JeyBBVTE1NTBfVUFSVDFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTE1NTBfVUFSVDNfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTE1NTBfUFNDMF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTU1MF9QU0MxX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxNTUwX1BTQzJfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTE1NTBfUFNDM19JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTAwMF9UT1lfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDBfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDFfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1RPWV9NQVRDSDJfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMSB9LAotCXsgQVUxMDAwX1JUQ19JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMF9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMV9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTEwMDBfUlRDX01BVENIMl9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTE1NTBfTkFORF9JTlQsIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCi0JeyBBVTE1NTBfVVNCX0RFVl9SRVFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCitzdHJ1Y3QgYXUxeHh4X2lycW1hcCBhdTE1NTBfaXJxbWFwW10gX19pbml0ZGF0YSA9IHsKKwl7IEFVMTU1MF9VQVJUMF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTU1MF9QQ0lfSU5UQSwJICBJUlFfVFlQRV9MRVZFTF9MT1csICAgMCB9LAorCXsgQVUxNTUwX1BDSV9JTlRCLAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTE1NTBfRERNQV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTU1MF9DUllQVE9fSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1NTBfUENJX0lOVEMsCSAgSVJRX1RZUEVfTEVWRUxfTE9XLCAgIDAgfSwKKwl7IEFVMTU1MF9QQ0lfSU5URCwJICBJUlFfVFlQRV9MRVZFTF9MT1csICAgMCB9LAorCXsgQVUxNTUwX1BDSV9SU1RfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0xPVywgICAwIH0sCisJeyBBVTE1NTBfVUFSVDFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1NTBfVUFSVDNfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1NTBfUFNDMF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTU1MF9QU0MxX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTUwX1BTQzJfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTE1NTBfUFNDM19JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTU1MF9UT1lfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1NTBfVE9ZX01BVENIMF9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTUwX1RPWV9NQVRDSDFfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTU1MF9UT1lfTUFUQ0gyX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1NTBfUlRDX0lOVCwJICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxNTUwX1JUQ19NQVRDSDBfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTU1MF9SVENfTUFUQ0gxX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1NTBfUlRDX01BVENIMl9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMSB9LAorCXsgQVUxNTUwX05BTkRfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTE1NTBfVVNCX0RFVl9SRVFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMSB9LAogCXsgQVUxNTUwX1VTQl9ERVZfU1VTX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTU1MF9VU0JfSE9TVF9JTlQsIElSUV9UWVBFX0xFVkVMX0xPVywgMCB9LAotCXsgQVUxNTUwX01BQzBfRE1BX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxNTUwX01BQzFfRE1BX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAorCXsgQVUxNTUwX1VTQl9IT1NUX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9MT1csICAgMCB9LAorCXsgQVUxNTUwX01BQzBfRE1BX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxNTUwX01BQzFfRE1BX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgLTEsIH0sCit9OwogCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMjAwKQotCi0JeyBBVTEyMDBfVUFSVDBfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEyMDBfU1dUX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTIwMF9TRF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTIwMF9ERE1BX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMjAwX01BRV9CRV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTIwMF9VQVJUMV9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTIwMF9NQUVfRkVfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEyMDBfUFNDMF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTIwMF9QU0MxX0lOVCwgSVJRX1RZUEVfTEVWRUxfSElHSCwgMCB9LAotCXsgQVUxMjAwX0FFU19JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTIwMF9DQU1FUkFfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEwMDBfVE9ZX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9UT1lfTUFUQ0gwX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKLQl7IEFVMTAwMF9UT1lfTUFUQ0gyX0lOVCwgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDEgfSwKLQl7IEFVMTAwMF9SVENfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1JUQ19NQVRDSDBfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1JUQ19NQVRDSDFfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMDAwX1JUQ19NQVRDSDJfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMjAwX05BTkRfSU5ULCBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAotCXsgQVUxMjAwX1VTQl9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gsIDAgfSwKLQl7IEFVMTIwMF9MQ0RfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0JeyBBVTEyMDBfTUFFX0JPVEhfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdILCAwIH0sCi0KLSNlbHNlCi0jZXJyb3IgIkVycm9yOiBVbmtub3duIEFsY2hlbXkgU09DIgotI2VuZGlmCitzdHJ1Y3QgYXUxeHh4X2lycW1hcCBhdTEyMDBfaXJxbWFwW10gX19pbml0ZGF0YSA9IHsKKwl7IEFVMTIwMF9VQVJUMF9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTIwMF9TV1RfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEyMDBfU0RfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEyMDBfRERNQV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTIwMF9NQUVfQkVfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEyMDBfVUFSVDFfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEyMDBfTUFFX0ZFX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMjAwX1BTQzBfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEyMDBfUFNDMV9JTlQsCSAgSVJRX1RZUEVfTEVWRUxfSElHSCwgIDAgfSwKKwl7IEFVMTIwMF9BRVNfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEyMDBfQ0FNRVJBX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMjAwX1RPWV9JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTIwMF9UT1lfTUFUQ0gwX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEyMDBfVE9ZX01BVENIMV9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMjAwX1RPWV9NQVRDSDJfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTIwMF9SVENfSU5ULAkgIElSUV9UWVBFX0VER0VfUklTSU5HLCAwIH0sCisJeyBBVTEyMDBfUlRDX01BVENIMF9JTlQsICBJUlFfVFlQRV9FREdFX1JJU0lORywgMCB9LAorCXsgQVUxMjAwX1JUQ19NQVRDSDFfSU5ULCAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTIwMF9SVENfTUFUQ0gyX0lOVCwgIElSUV9UWVBFX0VER0VfUklTSU5HLCAxIH0sCisJeyBBVTEyMDBfTkFORF9JTlQsCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcsIDAgfSwKKwl7IEFVMTIwMF9VU0JfSU5ULAkgIElSUV9UWVBFX0xFVkVMX0hJR0gsICAwIH0sCisJeyBBVTEyMDBfTENEX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgQVUxMjAwX01BRV9CT1RIX0lOVCwJICBJUlFfVFlQRV9MRVZFTF9ISUdILCAgMCB9LAorCXsgLTEsIH0sCiB9OwogCiAKQEAgLTMwNiw3ICszMTgsNyBAQAogICogbm93aGVyZSBpbiB0aGUgY3VycmVudCBrZXJuZWwgc291cmNlcyBpcyBpdCBkaXNhYmxlZC4JLS1tbGF1CiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTAwMCkKLQlpZiAoaXJxX25yID09IEFVMTAwMF9HUElPXzE1KQorCWlmIChpcnFfbnIgPT0gQVUxMDAwX0dQSU8xNV9JTlQpCiAJCWF1X3dyaXRlbCgweDQwMDAsIFBCMTAwMF9NRFIpOyAvKiBlbmFibGUgaW50ICovCiAjZW5kaWYKIAlhdV9zeW5jKCk7CkBAIC0zNzgsMTEgKzM5MCwxMyBAQAogCiBzdGF0aWMgaW50IGF1MXhfaWMxX3NldHdha2UodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG9uKQogewotCXVuc2lnbmVkIGludCBiaXQgPSBpcnEgLSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7CisJaW50IGJpdCA9IGlycSAtIEFVMTAwMF9JTlRDMV9JTlRfQkFTRTsKIAl1bnNpZ25lZCBsb25nIHdha2Vtc2ssIGZsYWdzOwogCi0JLyogb25seSBHUElPIDAtNyBjYW4gYWN0IGFzIHdha2V1cCBzb3VyY2U6ICovCi0JaWYgKChpcnEgPCBBVTEwMDBfR1BJT18wKSB8fCAoaXJxID4gQVUxMDAwX0dQSU9fNykpCisJLyogb25seSBHUElPIDAtNyBjYW4gYWN0IGFzIHdha2V1cCBzb3VyY2UuICBGb3J0dW5hdGVseSB0aGVzZQorCSAqIGFyZSB3aXJlZCB1cCBpZGVudGljYWxseSBvbiBhbGwgc3VwcG9ydGVkIHZhcmlhbnRzLgorCSAqLworCWlmICgoYml0IDwgMCkgfHwgKGJpdCA+IDcpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKQEAgLTUwNCwxMSArNTE4LDExIEBACiBhc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2godm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfc3RhdHVzKCkgJiByZWFkX2MwX2NhdXNlKCk7Ci0JdW5zaWduZWQgbG9uZyBzLCBvZmYsIGJpdDsKKwl1bnNpZ25lZCBsb25nIHMsIG9mZjsKIAogCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNykgewotCQlkb19JUlEoTUlQU19DUFVfSVJRX0JBU0UgKyA3KTsKLQkJcmV0dXJuOworCQlvZmYgPSBNSVBTX0NQVV9JUlFfQkFTRSArIDc7CisJCWdvdG8gaGFuZGxlOwogCX0gZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDIpIHsKIAkJcyA9IElDMF9SRVEwSU5UOwogCQlvZmYgPSBBVTEwMDBfSU5UQzBfSU5UX0JBU0U7CkBAIC01MjQsNTggKzUzOCwyMCBAQAogCX0gZWxzZQogCQlnb3RvIHNwdXJpb3VzOwogCi0JYml0ID0gMDsKIAlzID0gYXVfcmVhZGwocyk7CiAJaWYgKHVubGlrZWx5KCFzKSkgewogc3B1cmlvdXM6CiAJCXNwdXJpb3VzX2ludGVycnVwdCgpOwogCQlyZXR1cm47CiAJfQotI2lmZGVmIEFVMTAwMF9VU0JfREVWX1JFUV9JTlQKLQkvKgotCSAqIEJlY2F1c2Ugb2YgdGhlIHRpZ2h0IHRpbWluZyBvZiBTRVRVUCB0b2tlbiB0byByZXBseQotCSAqIHRyYW5zYWN0aW9ucywgdGhlIFVTQiBkZXZpY2VzLXNpZGUgcGFja2V0IGNvbXBsZXRlCi0JICogaW50ZXJydXB0IG5lZWRzIHRoZSBoaWdoZXN0IHByaW9yaXR5LgotCSAqLwotCWJpdCA9IDEgPDwgKEFVMTAwMF9VU0JfREVWX1JFUV9JTlQgLSBBVTEwMDBfSU5UQzBfSU5UX0JBU0UpOwotCWlmICgocGVuZGluZyAmIENBVVNFRl9JUDIpICYmIChzICYgYml0KSkgewotCQlkb19JUlEoQVUxMDAwX1VTQl9ERVZfUkVRX0lOVCk7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLQlkb19JUlEoX19mZnMocykgKyBvZmYpOworCW9mZiArPSBfX2ZmcyhzKTsKK2hhbmRsZToKKwlkb19JUlEob2ZmKTsKIH0KIAotLyogc2V0dXAgZWRnZS9sZXZlbCBhbmQgYXNzaWduIHJlcXVlc3QgMC8xICovCi12b2lkIF9faW5pdCBhdTF4eHhfc2V0dXBfaXJxbWFwKHN0cnVjdCBhdTF4eHhfaXJxbWFwICptYXAsIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIF9faW5pdCBhdTEwMDBfaW5pdF9pcnEoc3RydWN0IGF1MXh4eF9pcnFtYXAgKm1hcCkKIHsKIAl1bnNpZ25lZCBpbnQgYml0LCBpcnFfbnI7Ci0KLQl3aGlsZSAoY291bnQtLSkgewotCQlpcnFfbnIgPSBtYXBbY291bnRdLmltX2lycTsKLQotCQlpZiAoKChpcnFfbnIgPCBBVTEwMDBfSU5UQzBfSU5UX0JBU0UpIHx8Ci0JCSAgICAgKGlycV9uciA+PSBBVTEwMDBfSU5UQzBfSU5UX0JBU0UgKyAzMikpICYmCi0JCSAgICAoKGlycV9uciA8IEFVMTAwMF9JTlRDMV9JTlRfQkFTRSkgfHwKLQkJICAgICAoaXJxX25yID49IEFVMTAwMF9JTlRDMV9JTlRfQkFTRSArIDMyKSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoaXJxX25yID49IEFVMTAwMF9JTlRDMV9JTlRfQkFTRSkgewotCQkJYml0ID0gaXJxX25yIC0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFOwotCQkJaWYgKG1hcFtjb3VudF0uaW1fcmVxdWVzdCkKLQkJCQlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9BU1NJR05DTFIpOwotCQl9IGVsc2UgewotCQkJYml0ID0gaXJxX25yIC0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFOwotCQkJaWYgKG1hcFtjb3VudF0uaW1fcmVxdWVzdCkKLQkJCQlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9BU1NJR05DTFIpOwotCQl9Ci0KLQkJYXUxeF9pY19zZXR0eXBlKGlycV9uciwgbWFwW2NvdW50XS5pbV90eXBlKTsKLQl9Ci19Ci0KLXZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKLXsKIAlpbnQgaTsKIAogCS8qCkBAIC01ODUsNyArNTYxLDcgQEAKIAlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX0NGRzFDTFIpOwogCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzBfQ0ZHMkNMUik7CiAJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9NQVNLQ0xSKTsKLQlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX0FTU0lHTlNFVCk7CisJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9BU1NJR05DTFIpOwogCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzBfV0FLRUNMUik7CiAJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9TUkNTRVQpOwogCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzBfRkFMTElOR0NMUik7CkBAIC01OTYsNyArNTcyLDcgQEAKIAlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMxX0NGRzFDTFIpOwogCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzFfQ0ZHMkNMUik7CiAJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9NQVNLQ0xSKTsKLQlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMxX0FTU0lHTlNFVCk7CisJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9BU1NJR05DTFIpOwogCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzFfV0FLRUNMUik7CiAJYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9TUkNTRVQpOwogCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzFfRkFMTElOR0NMUik7CkBAIC02MTksMTEgKzU5NSw0MyBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSBJQzAsIHdoaWNoIGlzIGZpeGVkIHBlciBwcm9jZXNzb3IuCiAJICovCi0JYXUxeHh4X3NldHVwX2lycW1hcChhdTF4eHhfaWMwX21hcCwgQVJSQVlfU0laRShhdTF4eHhfaWMwX21hcCkpOworCXdoaWxlIChtYXAtPmltX2lycSAhPSAtMSkgeworCQlpcnFfbnIgPSBtYXAtPmltX2lycTsKIAotCS8qIEJvYXJkcyBjYW4gcmVnaXN0ZXIgYWRkaXRpb25hbCAoR1BJTy1iYXNlZCkgSVJRcy4KLQkqLwotCWJvYXJkX2luaXRfaXJxKCk7CisJCWlmIChpcnFfbnIgPj0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFKSB7CisJCQliaXQgPSBpcnFfbnIgLSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7CisJCQlpZiAobWFwLT5pbV9yZXF1ZXN0KQorCQkJCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMxX0FTU0lHTlNFVCk7CisJCX0gZWxzZSB7CisJCQliaXQgPSBpcnFfbnIgLSBBVTEwMDBfSU5UQzBfSU5UX0JBU0U7CisJCQlpZiAobWFwLT5pbV9yZXF1ZXN0KQorCQkJCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMwX0FTU0lHTlNFVCk7CisJCX0KKworCQlhdTF4X2ljX3NldHR5cGUoaXJxX25yLCBtYXAtPmltX3R5cGUpOworCQkrK21hcDsKKwl9CiAKIAlzZXRfYzBfc3RhdHVzKElFX0lSUTAgfCBJRV9JUlExIHwgSUVfSVJRMiB8IElFX0lSUTMpOwogfQorCit2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCit7CisJc3dpdGNoIChhbGNoZW15X2dldF9jcHV0eXBlKCkpIHsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTAwMDoKKwkJYXUxMDAwX2luaXRfaXJxKGF1MTAwMF9pcnFtYXApOworCQlicmVhazsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTUwMDoKKwkJYXUxMDAwX2luaXRfaXJxKGF1MTUwMF9pcnFtYXApOworCQlicmVhazsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTEwMDoKKwkJYXUxMDAwX2luaXRfaXJxKGF1MTEwMF9pcnFtYXApOworCQlicmVhazsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTU1MDoKKwkJYXUxMDAwX2luaXRfaXJxKGF1MTU1MF9pcnFtYXApOworCQlicmVhazsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTIwMDoKKwkJYXUxMDAwX2luaXRfaXJxKGF1MTIwMF9pcnFtYXApOworCQlicmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wbGF0Zm9ybS5jCmluZGV4IDExN2Y5OWYuLjI1ODBlNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wbGF0Zm9ybS5jCkBAIC0xOSwzOSArMTksNDAgQEAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9kYmRtYS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTExMDBfbW1jLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9ldGguaD4KIAotI2RlZmluZSBQT1JUKF9iYXNlLCBfaXJxKQkJCQlcCi0JewkJCQkJCVwKLQkJLmlvYmFzZQkJPSBfYmFzZSwJCVwKLQkJLm1lbWJhc2UJPSAodm9pZCBfX2lvbWVtICopX2Jhc2UsXAotCQkubWFwYmFzZQk9IENQSFlTQUREUihfYmFzZSksCVwKLQkJLmlycQkJPSBfaXJxLAkJCVwKLQkJLnJlZ3NoaWZ0CT0gMiwJCQlcCi0JCS5pb3R5cGUJCT0gVVBJT19BVSwJCVwKLQkJLmZsYWdzCQk9IFVQRl9TS0lQX1RFU1QgCVwKKyNkZWZpbmUgUE9SVChfYmFzZSwgX2lycSkJCQkJCVwKKwl7CQkJCQkJCVwKKwkJLm1hcGJhc2UJPSBfYmFzZSwJCQlcCisJCS5pcnEJCT0gX2lycSwJCQkJXAorCQkucmVnc2hpZnQJPSAyLAkJCQlcCisJCS5pb3R5cGUJCT0gVVBJT19BVSwJCQlcCisJCS5mbGFncwkJPSBVUEZfU0tJUF9URVNUIHwgVVBGX0lPUkVNQVAgfAlcCisJCQkJICBVUEZfRklYRURfVFlQRSwJCVwKKwkJLnR5cGUJCT0gUE9SVF8xNjU1MEEsCQkJXAogCX0KIAogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBhdTF4MDBfdWFydF9kYXRhW10gPSB7CiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwKQogI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JUE9SVChVQVJUMF9BRERSLCBBVTEwMDBfVUFSVDBfSU5UKSwKLQlQT1JUKFVBUlQxX0FERFIsIEFVMTAwMF9VQVJUMV9JTlQpLAotCVBPUlQoVUFSVDJfQUREUiwgQVUxMDAwX1VBUlQyX0lOVCksCi0JUE9SVChVQVJUM19BRERSLCBBVTEwMDBfVUFSVDNfSU5UKSwKKwlQT1JUKFVBUlQwX1BIWVNfQUREUiwgQVUxMDAwX1VBUlQwX0lOVCksCisJUE9SVChVQVJUMV9QSFlTX0FERFIsIEFVMTAwMF9VQVJUMV9JTlQpLAorCVBPUlQoVUFSVDJfUEhZU19BRERSLCBBVTEwMDBfVUFSVDJfSU5UKSwKKwlQT1JUKFVBUlQzX1BIWVNfQUREUiwgQVUxMDAwX1VBUlQzX0lOVCksCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQotCVBPUlQoVUFSVDBfQUREUiwgQVUxNTAwX1VBUlQwX0lOVCksCi0JUE9SVChVQVJUM19BRERSLCBBVTE1MDBfVUFSVDNfSU5UKSwKKwlQT1JUKFVBUlQwX1BIWVNfQUREUiwgQVUxNTAwX1VBUlQwX0lOVCksCisJUE9SVChVQVJUM19QSFlTX0FERFIsIEFVMTUwMF9VQVJUM19JTlQpLAogI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTEwMCkKLQlQT1JUKFVBUlQwX0FERFIsIEFVMTEwMF9VQVJUMF9JTlQpLAotCVBPUlQoVUFSVDFfQUREUiwgQVUxMTAwX1VBUlQxX0lOVCksCi0JUE9SVChVQVJUM19BRERSLCBBVTExMDBfVUFSVDNfSU5UKSwKKwlQT1JUKFVBUlQwX1BIWVNfQUREUiwgQVUxMTAwX1VBUlQwX0lOVCksCisJUE9SVChVQVJUMV9QSFlTX0FERFIsIEFVMTEwMF9VQVJUMV9JTlQpLAorCVBPUlQoVUFSVDNfUEhZU19BRERSLCBBVTExMDBfVUFSVDNfSU5UKSwKICNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1NTApCi0JUE9SVChVQVJUMF9BRERSLCBBVTE1NTBfVUFSVDBfSU5UKSwKLQlQT1JUKFVBUlQxX0FERFIsIEFVMTU1MF9VQVJUMV9JTlQpLAotCVBPUlQoVUFSVDNfQUREUiwgQVUxNTUwX1VBUlQzX0lOVCksCisJUE9SVChVQVJUMF9QSFlTX0FERFIsIEFVMTU1MF9VQVJUMF9JTlQpLAorCVBPUlQoVUFSVDFfUEhZU19BRERSLCBBVTE1NTBfVUFSVDFfSU5UKSwKKwlQT1JUKFVBUlQzX1BIWVNfQUREUiwgQVUxNTUwX1VBUlQzX0lOVCksCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMjAwKQotCVBPUlQoVUFSVDBfQUREUiwgQVUxMjAwX1VBUlQwX0lOVCksCi0JUE9SVChVQVJUMV9BRERSLCBBVTEyMDBfVUFSVDFfSU5UKSwKKwlQT1JUKFVBUlQwX1BIWVNfQUREUiwgQVUxMjAwX1VBUlQwX0lOVCksCisJUE9SVChVQVJUMV9QSFlTX0FERFIsIEFVMTIwMF9VQVJUMV9JTlQpLAogI2VuZGlmCiAjZW5kaWYJLyogQ09ORklHX1NFUklBTF84MjUwX0FVMVgwMCAqLwogCXsgfSwKQEAgLTczLDggKzc0LDggQEAKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQJCT0gQVUxMDAwX1VTQl9IT1NUX0lOVCwKLQkJLmVuZAkJPSBBVTEwMDBfVVNCX0hPU1RfSU5ULAorCQkuc3RhcnQJCT0gRk9SX1BMQVRGT1JNX0NfVVNCX0hPU1RfSU5ULAorCQkuZW5kCQk9IEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCwKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtMTMyLDggKzEzMyw4IEBACiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0CQk9IEFVMTAwMF9VU0JfSE9TVF9JTlQsCi0JCS5lbmQJCT0gQVUxMDAwX1VTQl9IT1NUX0lOVCwKKwkJLnN0YXJ0CQk9IEFVMTIwMF9VU0JfSU5ULAorCQkuZW5kCQk9IEFVMTIwMF9VU0JfSU5ULAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC0zMDgsMTEgKzMwOSw2IEBACiAjZW5kaWYgLyogI2lmbmRlZiBDT05GSUdfTUlQU19EQjEyMDAgKi8KICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1NPQ19BVTEyMDAgKi8KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXUxeDAwX3BjbWNpYV9kZXZpY2UgPSB7Ci0JLm5hbWUgCQk9ICJhdTF4MDAtcGNtY2lhIiwKLQkuaWQgCQk9IDAsCi19OwotCiAvKiBBbGwgQWxjaGVteSBkZW1vYm9hcmRzIHdpdGggSTJDIGhhdmUgdGhpcyAjZGVmaW5lIGluIHRoZWlyIGhlYWRlcnMgKi8KICNpZmRlZiBTTUJVU19QU0NfQkFTRQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwYmRiX3NtYnVzX3Jlc291cmNlc1tdID0gewpAQCAtMzMxLDEwICszMjcsOTIgQEAKIH07CiAjZW5kaWYKIAorLyogTWFjcm8gdG8gaGVscCBkZWZpbmluZyB0aGUgRXRoZXJuZXQgTUFDIHJlc291cmNlcyAqLworI2RlZmluZSBNQUNfUkVTKF9iYXNlLCBfZW5hYmxlLCBfaXJxKQkJCVwKKwl7CQkJCQkJXAorCQkuc3RhcnQJPSBDUEhZU0FERFIoX2Jhc2UpLAkJXAorCQkuZW5kCT0gQ1BIWVNBRERSKF9iYXNlICsgMHhmZmZmKSwJXAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwJCVwKKwl9LAkJCQkJCVwKKwl7CQkJCQkJXAorCQkuc3RhcnQJPSBDUEhZU0FERFIoX2VuYWJsZSksCQlcCisJCS5lbmQJPSBDUEhZU0FERFIoX2VuYWJsZSArIDB4MyksCVwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCQlcCisJfSwJCQkJCQlcCisJewkJCQkJCVwKKwkJLnN0YXJ0CT0gX2lycSwJCQkJXAorCQkuZW5kCT0gX2lycSwJCQkJXAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQkJXAorCX0KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdTF4eHhfZXRoMF9yZXNvdXJjZXNbXSA9IHsKKyNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQorCU1BQ19SRVMoQVUxMDAwX0VUSDBfQkFTRSwgQVUxMDAwX01BQzBfRU5BQkxFLCBBVTEwMDBfTUFDMF9ETUFfSU5UKSwKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTExMDApCisJTUFDX1JFUyhBVTExMDBfRVRIMF9CQVNFLCBBVTExMDBfTUFDMF9FTkFCTEUsIEFVMTEwMF9NQUMwX0RNQV9JTlQpLAorI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKKwlNQUNfUkVTKEFVMTU1MF9FVEgwX0JBU0UsIEFVMTU1MF9NQUMwX0VOQUJMRSwgQVUxNTUwX01BQzBfRE1BX0lOVCksCisjZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQorCU1BQ19SRVMoQVUxNTAwX0VUSDBfQkFTRSwgQVUxNTAwX01BQzBfRU5BQkxFLCBBVTE1MDBfTUFDMF9ETUFfSU5UKSwKKyNlbmRpZgorfTsKKworCitzdGF0aWMgc3RydWN0IGF1MTAwMF9ldGhfcGxhdGZvcm1fZGF0YSBhdTF4eHhfZXRoMF9wbGF0Zm9ybV9kYXRhID0geworCS5waHkxX3NlYXJjaF9tYWMwID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF1MXh4eF9ldGgwX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXUxMDAwLWV0aCIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGF1MXh4eF9ldGgwX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gYXUxeHh4X2V0aDBfcmVzb3VyY2VzLAorCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZhdTF4eHhfZXRoMF9wbGF0Zm9ybV9kYXRhLAorfTsKKworI2lmbmRlZiBDT05GSUdfU09DX0FVMTEwMAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdTF4eHhfZXRoMV9yZXNvdXJjZXNbXSA9IHsKKyNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQorCU1BQ19SRVMoQVUxMDAwX0VUSDFfQkFTRSwgQVUxMDAwX01BQzFfRU5BQkxFLCBBVTEwMDBfTUFDMV9ETUFfSU5UKSwKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1NTApCisJTUFDX1JFUyhBVTE1NTBfRVRIMV9CQVNFLCBBVTE1NTBfTUFDMV9FTkFCTEUsIEFVMTU1MF9NQUMxX0RNQV9JTlQpLAorI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTUwMCkKKwlNQUNfUkVTKEFVMTUwMF9FVEgxX0JBU0UsIEFVMTUwMF9NQUMxX0VOQUJMRSwgQVUxNTAwX01BQzFfRE1BX0lOVCksCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhIGF1MXh4eF9ldGgxX3BsYXRmb3JtX2RhdGEgPSB7CisJLnBoeTFfc2VhcmNoX21hYzAgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXUxeHh4X2V0aDFfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdTEwMDAtZXRoIiwKKwkuaWQJCT0gMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYXUxeHh4X2V0aDFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBhdTF4eHhfZXRoMV9yZXNvdXJjZXMsCisJLmRldi5wbGF0Zm9ybV9kYXRhID0gJmF1MXh4eF9ldGgxX3BsYXRmb3JtX2RhdGEsCit9OworI2VuZGlmCisKK3ZvaWQgX19pbml0IGF1MXh4eF9vdmVycmlkZV9ldGhfY2ZnKHVuc2lnbmVkIGludCBwb3J0LAorCQkJc3RydWN0IGF1MTAwMF9ldGhfcGxhdGZvcm1fZGF0YSAqZXRoX2RhdGEpCit7CisJaWYgKCFldGhfZGF0YSB8fCBwb3J0ID4gMSkKKwkJcmV0dXJuOworCisJaWYgKHBvcnQgPT0gMCkKKwkJbWVtY3B5KCZhdTF4eHhfZXRoMF9wbGF0Zm9ybV9kYXRhLCBldGhfZGF0YSwKKwkJCXNpemVvZihzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhKSk7CisjaWZuZGVmIENPTkZJR19TT0NfQVUxMTAwCisJZWxzZQorCQltZW1jcHkoJmF1MXh4eF9ldGgxX3BsYXRmb3JtX2RhdGEsIGV0aF9kYXRhLAorCQkJc2l6ZW9mKHN0cnVjdCBhdTEwMDBfZXRoX3BsYXRmb3JtX2RhdGEpKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXUxeHh4X3BsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZhdTF4eDBfdWFydF9kZXZpY2UsCiAJJmF1MXh4eF91c2Jfb2hjaV9kZXZpY2UsCi0JJmF1MXgwMF9wY21jaWFfZGV2aWNlLAogI2lmZGVmIENPTkZJR19GQl9BVTExMDAKIAkmYXUxMTAwX2xjZF9kZXZpY2UsCiAjZW5kaWYKQEAgLTM1MSw2ICs0MjksNyBAQAogI2lmZGVmIFNNQlVTX1BTQ19CQVNFCiAJJnBiZGJfc21idXNfZGV2aWNlLAogI2VuZGlmCisJJmF1MXh4eF9ldGgwX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGF1MXh4eF9wbGF0Zm9ybV9pbml0KHZvaWQpCkBAIC0zNjIsNiArNDQxLDEyIEBACiAJZm9yIChpID0gMDsgYXUxeDAwX3VhcnRfZGF0YVtpXS5mbGFnczsgaSsrKQogCQlhdTF4MDBfdWFydF9kYXRhW2ldLnVhcnRjbGsgPSB1YXJ0Y2xrOwogCisjaWZuZGVmIENPTkZJR19TT0NfQVUxMTAwCisJLyogUmVnaXN0ZXIgc2Vjb25kIE1BQyBpZiBlbmFibGVkIGluIHBpbmZ1bmMgKi8KKwlpZiAoIShhdV9yZWFkbChTWVNfUElORlVOQykgJiAodTMyKVNZU19QRl9OSTIpKQorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF1MXh4eF9ldGgxX2RldmljZSk7CisjZW5kaWYKKwogCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhhdTF4eHhfcGxhdGZvcm1fZGV2aWNlcywKIAkJCQkgICAgQVJSQVlfU0laRShhdTF4eHhfcGxhdGZvcm1fZGV2aWNlcykpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3Byb20uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wcm9tLmMKaW5kZXggMThiMzEwYi4uYzI5NTExYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3Byb20uYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcHJvbS5jCkBAIC00MywyOSArNDMsMTUgQEAKIGNoYXIgKipwcm9tX2FyZ3Y7CiBjaGFyICoqcHJvbV9lbnZwOwogCi1jaGFyICogX19pbml0X29yX21vZHVsZSBwcm9tX2dldGNtZGxpbmUodm9pZCkKLXsKLQlyZXR1cm4gJihhcmNzX2NtZGxpbmVbMF0pOwotfQotCiB2b2lkIHByb21faW5pdF9jbWRsaW5lKHZvaWQpCiB7Ci0JY2hhciAqY3A7Ci0JaW50IGFjdHI7CisJaW50IGk7CiAKLQlhY3RyID0gMTsgLyogQWx3YXlzIGlnbm9yZSBhcmd2WzBdICovCi0KLQljcCA9ICYoYXJjc19jbWRsaW5lWzBdKTsKLQl3aGlsZSAoYWN0ciA8IHByb21fYXJnYykgewotCQlzdHJjcHkoY3AsIHByb21fYXJndlthY3RyXSk7Ci0JCWNwICs9IHN0cmxlbihwcm9tX2FyZ3ZbYWN0cl0pOwotCQkqY3ArKyA9ICcgJzsKLQkJYWN0cisrOworCWZvciAoaSA9IDE7IGkgPCBwcm9tX2FyZ2M7IGkrKykgeworCQlzdHJsY2F0KGFyY3NfY21kbGluZSwgcHJvbV9hcmd2W2ldLCBDT01NQU5EX0xJTkVfU0laRSk7CisJCWlmIChpIDwgKHByb21fYXJnYyAtIDEpKQorCQkJc3RybGNhdChhcmNzX2NtZGxpbmUsICIgIiwgQ09NTUFORF9MSU5FX1NJWkUpOwogCX0KLQlpZiAoY3AgIT0gJihhcmNzX2NtZGxpbmVbMF0pKSAvKiBnZXQgcmlkIG9mIHRyYWlsaW5nIHNwYWNlICovCi0JCS0tY3A7Ci0JaWYgKHByb21fYXJnYyA+IDEpCi0JCSpjcCA9ICdcMCc7CiB9CiAKIGNoYXIgKnByb21fZ2V0ZW52KGNoYXIgKmVudm5hbWUpCkBAIC0xMjEsMTQgKzEwNywxMiBAQAogaW50IHByb21fZ2V0X2V0aGVybmV0X2FkZHIoY2hhciAqZXRoZXJuZXRfYWRkcikKIHsKIAljaGFyICpldGhhZGRyX3N0cjsKLQljaGFyICphcmdwdHI7CiAKIAkvKiBDaGVjayB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZpcnN0ICovCiAJZXRoYWRkcl9zdHIgPSBwcm9tX2dldGVudigiZXRoYWRkciIpOwogCWlmICghZXRoYWRkcl9zdHIpIHsKIAkJLyogQ2hlY2sgY29tbWFuZCBsaW5lICovCi0JCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCQlldGhhZGRyX3N0ciA9IHN0cnN0cihhcmdwdHIsICJldGhhZGRyPSIpOworCQlldGhhZGRyX3N0ciA9IHN0cnN0cihhcmNzX2NtZGxpbmUsICJldGhhZGRyPSIpOwogCQlpZiAoIWV0aGFkZHJfc3RyKQogCQkJcmV0dXJuIC0xOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcHV0cy5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3B1dHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTViYmUyNC4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vcHV0cy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqCUxvdyBsZXZlbCBVQVJUIHJvdXRpbmVzIHRvIGRpcmVjdGx5IGFjY2VzcyBBbGNoZW15IFVBUlQuCi0gKgotICogQ29weXJpZ2h0IDIwMDEsIDIwMDggTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgotCi0jZGVmaW5lIFNFUklBTF9CQVNFICAgVUFSVF9CQVNFCi0jZGVmaW5lIFNFUl9DTUQgICAgICAgMHg3Ci0jZGVmaW5lIFNFUl9EQVRBICAgICAgMHgxCi0jZGVmaW5lIFRYX0JVU1kgICAgICAgMHgyMAotCi0jZGVmaW5lIFRJTUVPVVQgICAgICAgMHhmZmZmZmYKLSNkZWZpbmUgU0xPV19ET1dOCi0KLXN0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogY29uc3QgY29tMSA9ICh1bnNpZ25lZCBsb25nICopU0VSSUFMX0JBU0U7Ci0KLSNpZmRlZiBTTE9XX0RPV04KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbG93X2Rvd24odm9pZCkKLXsKLQlpbnQgazsKLQotCWZvciAoayA9IDA7IGsgPCAxMDAwMDsgaysrKTsKLX0KLSNlbHNlCi0jZGVmaW5lIHNsb3dfZG93bigpCi0jZW5kaWYKLQotdm9pZAotcHJvbV9wdXRjaGFyKGNvbnN0IHVuc2lnbmVkIGNoYXIgYykKLXsKLQl1bnNpZ25lZCBjaGFyIGNoOwotCWludCBpID0gMDsKLQotCWRvIHsKLQkJY2ggPSBjb20xW1NFUl9DTURdOwotCQlzbG93X2Rvd24oKTsKLQkJaSsrOwotCQlpZiAoaSA+IFRJTUVPVVQpCi0JCQlicmVhazsKLQl9IHdoaWxlICgwID09IChjaCAmIFRYX0JVU1kpKTsKLQotCWNvbTFbU0VSX0RBVEFdID0gYzsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9yZXNldC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3Jlc2V0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3OTEwMTEuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3Jlc2V0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBAQAotLyoKLSAqCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqCUF1MXh4MCByZXNldCByb3V0aW5lcy4KLSAqCi0gKiBDb3B5cmlnaHQgMjAwMSwgMjAwNiwgMjAwOCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiA8c291cmNlQG12aXN0YS5jb20+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0KLSNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KLQotdm9pZCBhdTEwMDBfcmVzdGFydChjaGFyICpjb21tYW5kKQotewotCS8qIFNldCBhbGwgaW50ZWdyYXRlZCBwZXJpcGhlcmFscyB0byBkaXNhYmxlZCBzdGF0ZXMgKi8KLQlleHRlcm4gdm9pZCBib2FyZF9yZXNldCh2b2lkKTsKLQl1MzIgcHJpZCA9IHJlYWRfYzBfcHJpZCgpOwotCi0JcHJpbnRrKEtFUk5fTk9USUNFICJcbioqIFJlc2V0dGluZyBJbnRlZ3JhdGVkIFBlcmlwaGVyYWxzXG4iKTsKLQotCXN3aXRjaCAocHJpZCAmIDB4RkYwMDAwMDApIHsKLQljYXNlIDB4MDAwMDAwMDA6IC8qIEF1MTAwMCAqLwotCQlhdV93cml0ZWwoMHgwMiwgMHhiMDAwMDAxMCk7IC8qIGFjOTdfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDA4LCAweGIwMTdmZmZjKTsgLyogdXNiaF9lbmFibGUgLSBlYXJseSBlcnJhdGEgKi8KLQkJYXNtKCJzeW5jIik7Ci0JCWF1X3dyaXRlbCgweDAwLCAweGIwMTdmZmZjKTsgLyogdXNiaF9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjAyMDAwNTgpOyAvKiB1c2JkX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDMwMDA0MCk7IC8qIGlyX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDEwNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMTQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTI0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDEzNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjA1MjAwMDApOyAvKiBtYWNlbjAgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjA1MjAwMDQpOyAvKiBtYWNlbjEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjEwMDAwMDgpOyAvKiBpMnNfZW5hYmxlICAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTEwMDEwMCk7IC8qIHVhcnQwX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTIwMDEwMCk7IC8qIHVhcnQxX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTMwMDEwMCk7IC8qIHVhcnQyX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTQwMDEwMCk7IC8qIHVhcnQzX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMiwgMHhiMTYwMDEwMCk7IC8qIHNzaTBfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAyLCAweGIxNjgwMTAwKTsgLyogc3NpMV9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwMjApOyAvKiBzeXNfZnJlcWN0cmwwICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDI0KTsgLyogc3lzX2ZyZXFjdHJsMSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDAyOCk7IC8qIHN5c19jbGtzcmMgKi8KLQkJYXVfd3JpdGVsKDB4MTAsIDB4YjE5MDAwNjApOyAvKiBzeXNfY3B1cGxsICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDY0KTsgLyogc3lzX2F1eHBsbCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDEwMCk7IC8qIHN5c19waW5pbnB1dGVuICovCi0JCWJyZWFrOwotCWNhc2UgMHgwMTAwMDAwMDogLyogQXUxNTAwICovCi0JCWF1X3dyaXRlbCgweDAyLCAweGIwMDAwMDEwKTsgLyogYWM5N19lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDgsIDB4YjAxN2ZmZmMpOyAvKiB1c2JoX2VuYWJsZSAtIGVhcmx5IGVycmF0YSAqLwotCQlhc20oInN5bmMiKTsKLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjAxN2ZmZmMpOyAvKiB1c2JoX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDIwMDA1OCk7IC8qIHVzYmRfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTA0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDExNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMjQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTM0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTUyMDAwMCk7IC8qIG1hY2VuMCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTUyMDAwNCk7IC8qIG1hY2VuMSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTEwMDEwMCk7IC8qIHVhcnQwX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTQwMDEwMCk7IC8qIHVhcnQzX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDAyMCk7IC8qIHN5c19mcmVxY3RybDAgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwMjQpOyAvKiBzeXNfZnJlcWN0cmwxICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDI4KTsgLyogc3lzX2Nsa3NyYyAqLwotCQlhdV93cml0ZWwoMHgxMCwgMHhiMTkwMDA2MCk7IC8qIHN5c19jcHVwbGwgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwNjQpOyAvKiBzeXNfYXV4cGxsICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMTAwKTsgLyogc3lzX3BpbmlucHV0ZW4gKi8KLQkJYnJlYWs7Ci0JY2FzZSAweDAyMDAwMDAwOiAvKiBBdTExMDAgKi8KLQkJYXVfd3JpdGVsKDB4MDIsIDB4YjAwMDAwMTApOyAvKiBhYzk3X2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwOCwgMHhiMDE3ZmZmYyk7IC8qIHVzYmhfZW5hYmxlIC0gZWFybHkgZXJyYXRhICovCi0JCWFzbSgic3luYyIpOwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMDE3ZmZmYyk7IC8qIHVzYmhfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIwMjAwMDU4KTsgLyogdXNiZF9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjAzMDAwNDApOyAvKiBpcl9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMDQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTE0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDEyNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMzQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIwNTIwMDAwKTsgLyogbWFjZW4wICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxMDAwMDA4KTsgLyogaTJzX2VuYWJsZSAgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjExMDAxMDApOyAvKiB1YXJ0MF9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjEyMDAxMDApOyAvKiB1YXJ0MV9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE0MDAxMDApOyAvKiB1YXJ0M19lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDIsIDB4YjE2MDAxMDApOyAvKiBzc2kwX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMiwgMHhiMTY4MDEwMCk7IC8qIHNzaTFfZW5hYmxlICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDIwKTsgLyogc3lzX2ZyZXFjdHJsMCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDAyNCk7IC8qIHN5c19mcmVxY3RybDEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwMjgpOyAvKiBzeXNfY2xrc3JjICovCi0JCWF1X3dyaXRlbCgweDEwLCAweGIxOTAwMDYwKTsgLyogc3lzX2NwdXBsbCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDA2NCk7IC8qIHN5c19hdXhwbGwgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAxMDApOyAvKiBzeXNfcGluaW5wdXRlbiAqLwotCQlicmVhazsKLQljYXNlIDB4MDMwMDAwMDA6IC8qIEF1MTU1MCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMWEwMDAwNCk7IC8qIHBzYyAwICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxYjAwMDA0KTsgLyogcHNjIDEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjBhMDAwMDQpOyAvKiBwc2MgMiAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMGIwMDAwNCk7IC8qIHBzYyAzICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIwMTdmZmZjKTsgLyogdXNiaF9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjAyMDAwNTgpOyAvKiB1c2JkX2VuYWJsZSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDEwNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjQwMDQxMTQpOyAvKiBtYWMgZG1hICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGI0MDA0MTI0KTsgLyogbWFjIGRtYSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiNDAwNDEzNCk7IC8qIG1hYyBkbWEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE1MjAwMDApOyAvKiBtYWNlbjAgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE1MjAwMDQpOyAvKiBtYWNlbjEgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjExMDAxMDApOyAvKiB1YXJ0MF9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjEyMDAxMDApOyAvKiB1YXJ0MV9lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE0MDAxMDApOyAvKiB1YXJ0M19lbmFibGUgKi8KLQkJYXVfd3JpdGVsKDB4MDAsIDB4YjE5MDAwMjApOyAvKiBzeXNfZnJlcWN0cmwwICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDI0KTsgLyogc3lzX2ZyZXFjdHJsMSAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDAyOCk7IC8qIHN5c19jbGtzcmMgKi8KLQkJYXVfd3JpdGVsKDB4MTAsIDB4YjE5MDAwNjApOyAvKiBzeXNfY3B1cGxsICovCi0JCWF1X3dyaXRlbCgweDAwLCAweGIxOTAwMDY0KTsgLyogc3lzX2F1eHBsbCAqLwotCQlhdV93cml0ZWwoMHgwMCwgMHhiMTkwMDEwMCk7IC8qIHN5c19waW5pbnB1dGVuICovCi0JCWJyZWFrOwotCX0KLQotCXNldF9jMF9zdGF0dXMoU1QwX0JFViB8IFNUMF9FUkwpOwotCWNoYW5nZV9jMF9jb25maWcoQ09ORl9DTV9DTUFTSywgQ09ORl9DTV9VTkNBQ0hFRCk7Ci0JZmx1c2hfY2FjaGVfYWxsKCk7Ci0Jd3JpdGVfYzBfd2lyZWQoMCk7Ci0KLQkvKiBHaXZlIGJvYXJkIGEgY2hhbmNlIHRvIGRvIGEgaGFyZHdhcmUgcmVzZXQgKi8KLQlib2FyZF9yZXNldCgpOwotCi0JLyogSnVtcCB0byB0aGUgYmVnZ2luaW5nIGluIGNhc2UgYm9hcmRfcmVzZXQoKSBpcyBlbXB0eSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJqclx0JTAiOjoiciIoMHhiZmMwMDAwMCkpOwotfQotCi12b2lkIGF1MTAwMF9oYWx0KHZvaWQpCi17Ci0jaWYgZGVmaW5lZChDT05GSUdfTUlQU19QQjE1NTApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfREIxNTUwKQotCS8qIFBvd2VyIG9mZiBzeXN0ZW0gKi8KLQlwcmludGsoS0VSTl9OT1RJQ0UgIlxuKiogUG93ZXJpbmcgb2ZmLi4uXG4iKTsKLQlhdV93cml0ZXcoYXVfcmVhZHcoMHhBRjAwMDAxQykgfCAoMyA8PCAxNCksIDB4QUYwMDAwMUMpOwotCWF1X3N5bmMoKTsKLQl3aGlsZSAoMSk7IC8qIHNob3VsZCBub3QgZ2V0IGhlcmUgKi8KLSNlbHNlCi0JcHJpbnRrKEtFUk5fTk9USUNFICJcbioqIFlvdSBjYW4gc2FmZWx5IHR1cm4gb2ZmIHRoZSBwb3dlclxuIik7Ci0jaWZkZWYgQ09ORklHX01JUFNfTUlSQUdFCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIxMCwgMSk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUlQU19EQjEyMDAKLQlhdV93cml0ZXcoYXVfcmVhZHcoMHhCOTgwMDAxQykgfCAoMSA8PCAxNCksIDB4Qjk4MDAwMUMpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BNCi0JYXVfc2xlZXAoKTsKLQotCS8qIFNob3VsZCBub3QgZ2V0IGhlcmUgKi8KLQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBwdXQgQ1BVIGluIHNsZWVwIG1vZGVcbiIpOwotCXdoaWxlICgxKTsKLSNlbHNlCi0Jd2hpbGUgKDEpCi0JCV9fYXNtX18oIi5zZXRcdG1pcHMzXG5cdCIKLQkgICAgICAgICAgICAgICAgIndhaXRcblx0IgotCQkJIi5zZXRcdG1pcHMwIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTU1MCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19EQjE1NTApICovCi19Ci0KLXZvaWQgYXUxMDAwX3Bvd2VyX29mZih2b2lkKQotewotCWF1MTAwMF9oYWx0KCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vc2V0dXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9zZXR1cC5jCmluZGV4IDYxODRiYWEuLjU2MWU1ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9zZXR1cC5jCkBAIC0yOSwxOCArMjksMTMgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogCiAjaW5jbHVkZSA8YXUxMDAwLmg+CiAKIGV4dGVybiB2b2lkIF9faW5pdCBib2FyZF9zZXR1cCh2b2lkKTsKLWV4dGVybiB2b2lkIGF1MTAwMF9yZXN0YXJ0KGNoYXIgKik7Ci1leHRlcm4gdm9pZCBhdTEwMDBfaGFsdCh2b2lkKTsKLWV4dGVybiB2b2lkIGF1MTAwMF9wb3dlcl9vZmYodm9pZCk7CiBleHRlcm4gdm9pZCBzZXRfY3B1c3BlYyh2b2lkKTsKIAogdm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKQEAgLTU3LDEwICs1Miw2IEBACiAJLyogdGhpcyBpcyBmYXN0ZXIgdGhhbiB3YXN0aW5nIGN5Y2xlcyB0cnlpbmcgdG8gYXBwcm94aW1hdGUgaXQgKi8KIAlwcmVzZXRfbHBqID0gKGVzdF9mcmVxID4+IDEpIC8gSFo7CiAKLQlfbWFjaGluZV9yZXN0YXJ0ID0gYXUxMDAwX3Jlc3RhcnQ7Ci0JX21hY2hpbmVfaGFsdCA9IGF1MTAwMF9oYWx0OwotCXBtX3Bvd2VyX29mZiA9IGF1MTAwMF9wb3dlcl9vZmY7Ci0KIAlib2FyZF9zZXR1cCgpOyAgLyogYm9hcmQgc3BlY2lmaWMgc2V0dXAgKi8KIAogCWlmIChhdTF4eHhfY3B1X25lZWRzX2NvbmZpZ19vZCgpKQpAQCAtNzgsMzcgKzY5LDIwIEBACiAJaW9tZW1fcmVzb3VyY2UuZW5kID0gSU9NRU1fUkVTT1VSQ0VfRU5EOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfNjRCSVRfUEhZU19BRERSKQorI2lmIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgJiYgZGVmaW5lZChDT05GSUdfUENJKQogLyogVGhpcyByb3V0aW5lIHNob3VsZCBiZSB2YWxpZCBmb3IgYWxsIEF1MXggYmFzZWQgYm9hcmRzICovCiBwaHlzX3QgX19maXh1cF9iaWdwaHlzX2FkZHIocGh5c190IHBoeXNfYWRkciwgcGh5c190IHNpemUpCiB7CisJdTMyIHN0YXJ0ID0gKHUzMilBdTE1MDBfUENJX01FTV9TVEFSVDsKKwl1MzIgZW5kICAgPSAodTMyKUF1MTUwMF9QQ0lfTUVNX0VORDsKKwogCS8qIERvbid0IGZpeHVwIDM2LWJpdCBhZGRyZXNzZXMgKi8KIAlpZiAoKHBoeXNfYWRkciA+PiAzMikgIT0gMCkKIAkJcmV0dXJuIHBoeXNfYWRkcjsKIAotI2lmZGVmIENPTkZJR19QQ0kKLQl7Ci0JCXUzMiBzdGFydCA9ICh1MzIpQXUxNTAwX1BDSV9NRU1fU1RBUlQ7Ci0JCXUzMiBlbmQgICA9ICh1MzIpQXUxNTAwX1BDSV9NRU1fRU5EOwotCi0JCS8qIENoZWNrIGZvciBQQ0kgbWVtb3J5IHdpbmRvdyAqLwotCQlpZiAocGh5c19hZGRyID49IHN0YXJ0ICYmIChwaHlzX2FkZHIgKyBzaXplIC0gMSkgPD0gZW5kKQotCQkJcmV0dXJuIChwaHlzX3QpCi0JCQkgICAgICAgKChwaHlzX2FkZHIgLSBzdGFydCkgKyBBdTE1MDBfUENJX01FTV9TVEFSVCk7Ci0JfQotI2VuZGlmCi0KLQkvKgotCSAqIEFsbCBBdTF4eDAgU09DcyBoYXZlIGEgUENNQ0lBIGNvbnRyb2xsZXIuCi0JICogV2Ugc2V0dXAgb3VyIDMyLWJpdCBwc2V1ZG8gYWRkcmVzc2VzIHRvIGJlIGVxdWFsIHRvIHRoZQotCSAqIDM2LWJpdCBhZGRyID4+IDQsIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGNoZWNrIHRoZSBhZGRyZXNzCi0JICogYW5kIGZpeCBpdC4KLQkgKiBUaGUgUENNQ0lBIHNvY2tldCAwIHBoeXNpY2FsIGF0dHJpYnV0ZSBhZGRyZXNzIGlzIDB4RiA0MDAwIDAwMDAuCi0JICogVGhlIHBzZXVkbyBhZGRyZXNzIHdlIHVzZSBpcyAweEY0MDAgMDAwMC4gQW55IGFkZHJlc3Mgb3ZlcgotCSAqIDB4RjQwMCAwMDAwIGlzIGEgUENNQ0lBIHBzZXVkbyBhZGRyZXNzLgotCSAqLwotCWlmICgocGh5c19hZGRyID49IDB4RjQwMDAwMDApICYmIChwaHlzX2FkZHIgPCAweEZGRkZGRkZGKSkKLQkJcmV0dXJuIChwaHlzX3QpKHBoeXNfYWRkciA8PCA0KTsKKwkvKiBDaGVjayBmb3IgUENJIG1lbW9yeSB3aW5kb3cgKi8KKwlpZiAocGh5c19hZGRyID49IHN0YXJ0ICYmIChwaHlzX2FkZHIgKyBzaXplIC0gMSkgPD0gZW5kKQorCQlyZXR1cm4gKHBoeXNfdCkoKHBoeXNfYWRkciAtIHN0YXJ0KSArIEF1MTUwMF9QQ0lfTUVNX1NUQVJUKTsKIAogCS8qIGRlZmF1bHQgbm9wICovCiAJcmV0dXJuIHBoeXNfYWRkcjsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi90aW1lLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vdGltZS5jCmluZGV4IDM3OWE2NjQuLjJhZWNiMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi90aW1lLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3RpbWUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFudWVsIExhdXNzIDxtYW5vQHJvYXJpbmVsay5ob21lbGludXgubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTWFudWVsIExhdXNzIDxtYW51ZWwubGF1c3NAZ21haWwuY29tPgogICoKICAqIFByZXZpb3VzIGluY2FybmF0aW9ucyB3ZXJlOgogICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDA2LCAyMDA4IE1vbnRhVmlzdGEgU29mdHdhcmUsIDxzb3VyY2VAbXZpc3RhLmNvbT4KQEAgLTg1LDcgKzg1LDYgQEAKIAkubmFtZQkJPSAicnRjbWF0Y2gyIiwKIAkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAogCS5yYXRpbmcJCT0gMTAwLAotCS5pcnEJCT0gQVUxMDAwX1JUQ19NQVRDSDJfSU5ULAogCS5zZXRfbmV4dF9ldmVudAk9IGF1MXhfcnRjbWF0Y2gyX3NldF9uZXh0X2V2ZW50LAogCS5zZXRfbW9kZQk9IGF1MXhfcnRjbWF0Y2gyX3NldF9tb2RlLAogCS5jcHVtYXNrCT0gY3B1X2FsbF9tYXNrLApAQCAtOTgsMTEgKzk3LDEzIEBACiAJLmRldl9pZAkJPSAmYXUxeF9ydGNtYXRjaDJfY2xvY2tkZXYsCiB9OwogCi12b2lkIF9faW5pdCBwbGF0X3RpbWVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYWxjaGVteV90aW1lX2luaXQodW5zaWduZWQgaW50IG0yaW50KQogewogCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNkID0gJmF1MXhfcnRjbWF0Y2gyX2Nsb2NrZGV2OwogCXVuc2lnbmVkIGxvbmcgdDsKIAorCWF1MXhfcnRjbWF0Y2gyX2Nsb2NrZGV2LmlycSA9IG0yaW50OworCiAJLyogQ2hlY2sgaWYgZmlybXdhcmUgKFlBTU9OLCAuLi4pIGhhcyBlbmFibGVkIDMya0h6IGFuZCBjbG9jawogCSAqIGhhcyBiZWVuIGRldGVjdGVkLiAgSWYgc28gaW5zdGFsbCB0aGUgcnRjbWF0Y2gyIGNsb2Nrc291cmNlLAogCSAqIG90aGVyd2lzZSBkb24ndCBib3RoZXIuICBOb3RlIHRoYXQgYm90aCBiaXRzIGJlaW5nIHNldCBpcyBieQpAQCAtMTQ4LDEzICsxNDksMTggQEAKIAljZC0+bWF4X2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweGZmZmZmZmZmLCBjZCk7CiAJY2QtPm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoOCwgY2QpOwkvKiB+MC4yNW1zICovCiAJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNkKTsKLQlzZXR1cF9pcnEoQVUxMDAwX1JUQ19NQVRDSDJfSU5ULCAmYXUxeF9ydGNtYXRjaDJfaXJxYWN0aW9uKTsKKwlzZXR1cF9pcnEobTJpbnQsICZhdTF4X3J0Y21hdGNoMl9pcnFhY3Rpb24pOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiQWxjaGVteSBjbG9ja3NvdXJjZSBpbnN0YWxsZWRcbiIpOwogCi0JcmV0dXJuOworCXJldHVybiAwOwogCiBjbnRyX2VycjoKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhbGNoZW15X3NldHVwX2MwdGltZXIodm9pZCkKK3sKIAkvKgogCSAqIE1JUFMga2VybmVsIGFzc2lnbnMgJ2F1MWtfd2FpdCcgdG8gJ2NwdV93YWl0JyBiZWZvcmUgdGhpcwogCSAqIGZ1bmN0aW9uIGlzIGNhbGxlZC4gIEJlY2F1c2UgdGhlIEFsY2hlbXkgY291bnRlcnMgYXJlIHVudXNhYmxlCkBAIC0xNjYsMyArMTcyLDIyIEBACiAJcjRrX2Nsb2NrZXZlbnRfaW5pdCgpOwogCWluaXRfcjRrX2Nsb2Nrc291cmNlKCk7CiB9CisKK3N0YXRpYyBpbnQgYWxjaGVteV9tMmludHRhYltdIF9faW5pdGRhdGEgPSB7CisJQVUxMDAwX1JUQ19NQVRDSDJfSU5ULAorCUFVMTUwMF9SVENfTUFUQ0gyX0lOVCwKKwlBVTExMDBfUlRDX01BVENIMl9JTlQsCisJQVUxNTUwX1JUQ19NQVRDSDJfSU5ULAorCUFVMTIwMF9SVENfTUFUQ0gyX0lOVCwKK307CisKK3ZvaWQgX19pbml0IHBsYXRfdGltZV9pbml0KHZvaWQpCit7CisJaW50IHQ7CisKKwl0ID0gYWxjaGVteV9nZXRfY3B1dHlwZSgpOworCWlmICh0ID09IEFMQ0hFTVlfQ1BVX1VOS05PV04pCisJCWFsY2hlbXlfc2V0dXBfYzB0aW1lcigpOworCWVsc2UgaWYgKGFsY2hlbXlfdGltZV9pbml0KGFsY2hlbXlfbTJpbnR0YWJbdF0pKQorCQlhbGNoZW15X3NldHVwX2MwdGltZXIoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9NYWtlZmlsZQppbmRleCA3MzBmOWYyLi5lY2JkMzdmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBBbGNoZW15IERldmVsYm9hcmRzCiAjCiAKLW9iai15ICs9IHByb20ubworb2JqLXkgKz0gcHJvbS5vIGJjc3IubyBwbGF0Zm9ybS5vCiBvYmotJChDT05GSUdfUE0pCQkrPSBwbS5vCiBvYmotJChDT05GSUdfTUlQU19QQjEwMDApCSs9IHBiMTAwMC8KIG9iai0kKENPTkZJR19NSVBTX1BCMTEwMCkJKz0gcGIxMTAwLwpAQCAtMTEsOCArMTEsMTAgQEAKIG9iai0kKENPTkZJR19NSVBTX1BCMTU1MCkJKz0gcGIxNTUwLwogb2JqLSQoQ09ORklHX01JUFNfREIxMDAwKQkrPSBkYjF4MDAvCiBvYmotJChDT05GSUdfTUlQU19EQjExMDApCSs9IGRiMXgwMC8KLW9iai0kKENPTkZJR19NSVBTX0RCMTIwMCkJKz0gcGIxMjAwLworb2JqLSQoQ09ORklHX01JUFNfREIxMjAwKQkrPSBkYjEyMDAvCiBvYmotJChDT05GSUdfTUlQU19EQjE1MDApCSs9IGRiMXgwMC8KIG9iai0kKENPTkZJR19NSVBTX0RCMTU1MCkJKz0gZGIxeDAwLwogb2JqLSQoQ09ORklHX01JUFNfQk9TUE9SVVMpCSs9IGRiMXgwMC8KIG9iai0kKENPTkZJR19NSVBTX01JUkFHRSkJKz0gZGIxeDAwLworCitFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2Jjc3IuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9iY3NyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JjNGZkMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9iY3NyLmMKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBiY3NyLmggLS0gRGIxeHh4L1BiMXh4eCBEZXZib2FyZCBDUExEIHJlZ2lzdGVycyAoIkJDU1IiKSBhYnN0cmFjdGlvbi4KKyAqCisgKiBBbGwgQWxjaGVteSBkZXZlbG9wbWVudCBib2FyZHMgKGV4Y2VwdCwgb2YgY291cnNlLCB0aGUgd2VpcmQgUEIxMDAwKQorICogaGF2ZSBhIGZldyByZWdpc3RlcnMgaW4gYSBDUExEIHdpdGggc3RhbmRhcmRpc2VkIGxheW91dDsgdGhleSBtb3N0bHkKKyAqIG9ubHkgZGlmZmVyIGluIGJhc2UgYWRkcmVzcy4KKyAqIEFsbCByZWdpc3RlcnMgYXJlIDE2Yml0cyB3aWRlIHdpdGggMzJiaXQgc3BhY2luZy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKworc3RhdGljIHN0cnVjdCBiY3NyX3JlZyB7CisJdm9pZCBfX2lvbWVtICpyYWRkcjsKKwlzcGlubG9ja190IGxvY2s7Cit9IGJjc3JfcmVnc1tCQ1NSX0NOVF07CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmJjc3JfdmlydDsJLyogS1NFRzEgYWRkciBvZiBCQ1NSIGJhc2UgKi8KK3N0YXRpYyBpbnQgYmNzcl9jc2NfYmFzZTsJLyogbGludXgtaXJxIG9mIGZpcnN0IGNhc2NhZGVkIGlycSAqLworCit2b2lkIF9faW5pdCBiY3NyX2luaXQodW5zaWduZWQgbG9uZyBiY3NyMV9waHlzLCB1bnNpZ25lZCBsb25nIGJjc3IyX3BoeXMpCit7CisJaW50IGk7CisKKwliY3NyMV9waHlzID0gS1NFRzFBRERSKENQSFlTQUREUihiY3NyMV9waHlzKSk7CisJYmNzcjJfcGh5cyA9IEtTRUcxQUREUihDUEhZU0FERFIoYmNzcjJfcGh5cykpOworCisJYmNzcl92aXJ0ID0gKHZvaWQgX19pb21lbSAqKWJjc3IxX3BoeXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgQkNTUl9DTlQ7IGkrKykgeworCQlpZiAoaSA+PSBCQ1NSX0hFWExFRFMpCisJCQliY3NyX3JlZ3NbaV0ucmFkZHIgPSAodm9pZCBfX2lvbWVtICopYmNzcjJfcGh5cyArCisJCQkJCSgweDA0ICogKGkgLSBCQ1NSX0hFWExFRFMpKTsKKwkJZWxzZQorCQkJYmNzcl9yZWdzW2ldLnJhZGRyID0gKHZvaWQgX19pb21lbSAqKWJjc3IxX3BoeXMgKworCQkJCQkoMHgwNCAqIGkpOworCisJCXNwaW5fbG9ja19pbml0KCZiY3NyX3JlZ3NbaV0ubG9jayk7CisJfQorfQorCit1bnNpZ25lZCBzaG9ydCBiY3NyX3JlYWQoZW51bSBiY3NyX2lkIHJlZykKK3sKKwl1bnNpZ25lZCBzaG9ydCByOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNzcl9yZWdzW3JlZ10ubG9jaywgZmxhZ3MpOworCXIgPSBfX3Jhd19yZWFkdyhiY3NyX3JlZ3NbcmVnXS5yYWRkcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzcl9yZWdzW3JlZ10ubG9jaywgZmxhZ3MpOworCXJldHVybiByOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYmNzcl9yZWFkKTsKKwordm9pZCBiY3NyX3dyaXRlKGVudW0gYmNzcl9pZCByZWcsIHVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJjc3JfcmVnc1tyZWddLmxvY2ssIGZsYWdzKTsKKwlfX3Jhd193cml0ZXcodmFsLCBiY3NyX3JlZ3NbcmVnXS5yYWRkcik7CisJd21iKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzcl9yZWdzW3JlZ10ubG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYmNzcl93cml0ZSk7CisKK3ZvaWQgYmNzcl9tb2QoZW51bSBiY3NyX2lkIHJlZywgdW5zaWduZWQgc2hvcnQgY2xyLCB1bnNpZ25lZCBzaG9ydCBzZXQpCit7CisJdW5zaWduZWQgc2hvcnQgcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJjc3JfcmVnc1tyZWddLmxvY2ssIGZsYWdzKTsKKwlyID0gX19yYXdfcmVhZHcoYmNzcl9yZWdzW3JlZ10ucmFkZHIpOworCXIgJj0gfmNscjsKKwlyIHw9IHNldDsKKwlfX3Jhd193cml0ZXcociwgYmNzcl9yZWdzW3JlZ10ucmFkZHIpOworCXdtYigpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjc3JfcmVnc1tyZWddLmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJjc3JfbW9kKTsKKworLyoKKyAqIERCMTIwMC9QQjEyMDAgQ1BMRCBJUlEgbXV4ZXIKKyAqLworc3RhdGljIHZvaWQgYmNzcl9jc2NfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmQpCit7CisJdW5zaWduZWQgc2hvcnQgYmlzciA9IF9fcmF3X3JlYWR3KGJjc3JfdmlydCArIEJDU1JfUkVHX0lOVFNUQVQpOworCisJZm9yICggOyBiaXNyOyBiaXNyICY9IGJpc3IgLSAxKQorCQlnZW5lcmljX2hhbmRsZV9pcnEoYmNzcl9jc2NfYmFzZSArIF9fZmZzKGJpc3IpKTsKK30KKworLyogTk9URTogYm90aCB0aGUgZW5hYmxlIGFuZCBtYXNrIGJpdHMgbXVzdCBiZSBjbGVhcmVkLCBvdGhlcndpc2UgdGhlCisgKiBDUExEIGdlbmVyYXRlcyB0b25zIG9mIHNwdXJpb3VzIGludGVycnVwdHMgKGF0IGxlYXN0IG9uIG15IERCMTIwMCkuCisgKgktLSBtbGF1CisgKi8KK3N0YXRpYyB2b2lkIGJjc3JfaXJxX21hc2sodW5zaWduZWQgaW50IGlycV9ucikKK3sKKwl1bnNpZ25lZCBzaG9ydCB2ID0gMSA8PCAoaXJxX25yIC0gYmNzcl9jc2NfYmFzZSk7CisJX19yYXdfd3JpdGV3KHYsIGJjc3JfdmlydCArIEJDU1JfUkVHX0lOVENMUik7CisJX19yYXdfd3JpdGV3KHYsIGJjc3JfdmlydCArIEJDU1JfUkVHX01BU0tDTFIpOworCXdtYigpOworfQorCitzdGF0aWMgdm9pZCBiY3NyX2lycV9tYXNrYWNrKHVuc2lnbmVkIGludCBpcnFfbnIpCit7CisJdW5zaWduZWQgc2hvcnQgdiA9IDEgPDwgKGlycV9uciAtIGJjc3JfY3NjX2Jhc2UpOworCV9fcmF3X3dyaXRldyh2LCBiY3NyX3ZpcnQgKyBCQ1NSX1JFR19JTlRDTFIpOworCV9fcmF3X3dyaXRldyh2LCBiY3NyX3ZpcnQgKyBCQ1NSX1JFR19NQVNLQ0xSKTsKKwlfX3Jhd193cml0ZXcodiwgYmNzcl92aXJ0ICsgQkNTUl9SRUdfSU5UU1RBVCk7CS8qIGFjayAqLworCXdtYigpOworfQorCitzdGF0aWMgdm9pZCBiY3NyX2lycV91bm1hc2sodW5zaWduZWQgaW50IGlycV9ucikKK3sKKwl1bnNpZ25lZCBzaG9ydCB2ID0gMSA8PCAoaXJxX25yIC0gYmNzcl9jc2NfYmFzZSk7CisJX19yYXdfd3JpdGV3KHYsIGJjc3JfdmlydCArIEJDU1JfUkVHX0lOVFNFVCk7CisJX19yYXdfd3JpdGV3KHYsIGJjc3JfdmlydCArIEJDU1JfUkVHX01BU0tTRVQpOworCXdtYigpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGJjc3JfaXJxX3R5cGUgPSB7CisJLm5hbWUJCT0gIkNQTEQiLAorCS5tYXNrCQk9IGJjc3JfaXJxX21hc2ssCisJLm1hc2tfYWNrCT0gYmNzcl9pcnFfbWFza2FjaywKKwkudW5tYXNrCQk9IGJjc3JfaXJxX3VubWFzaywKK307CisKK3ZvaWQgX19pbml0IGJjc3JfaW5pdF9pcnEoaW50IGNzY19zdGFydCwgaW50IGNzY19lbmQsIGludCBob29rX2lycSkKK3sKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJLyogbWFzayAmIGRpc2FibGUgJiBhY2sgYWxsICovCisJX19yYXdfd3JpdGV3KDB4ZmZmZiwgYmNzcl92aXJ0ICsgQkNTUl9SRUdfSU5UQ0xSKTsKKwlfX3Jhd193cml0ZXcoMHhmZmZmLCBiY3NyX3ZpcnQgKyBCQ1NSX1JFR19NQVNLQ0xSKTsKKwlfX3Jhd193cml0ZXcoMHhmZmZmLCBiY3NyX3ZpcnQgKyBCQ1NSX1JFR19JTlRTVEFUKTsKKwl3bWIoKTsKKworCWJjc3JfY3NjX2Jhc2UgPSBjc2Nfc3RhcnQ7CisKKwlmb3IgKGlycSA9IGNzY19zdGFydDsgaXJxIDw9IGNzY19lbmQ7IGlycSsrKQorCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZiY3NyX2lycV90eXBlLAorCQkJaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7CisKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihob29rX2lycSwgYmNzcl9jc2NfaGFuZGxlcik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxMjAwL01ha2VmaWxlIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMTIwMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzg0MGE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMTIwMC9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmoteSArPSBzZXR1cC5vIHBsYXRmb3JtLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjEyMDAvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjEyMDAvcGxhdGZvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2I5NWE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMTIwMC9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsNTYxIEBACisvKgorICogREJBdTEyMDAgYm9hcmQgcGxhdGZvcm0gZGV2aWNlIHJlZ2lzdHJhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE1hbnVlbCBMYXVzcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CisjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMTAwX21tYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZGJkbWEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxNTUwX3NwaS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2RiMTIwMC5oPgorCisjaW5jbHVkZSAiLi4vcGxhdGZvcm0uaCIKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGRiMTIwMF9zcGlmbGFzaF9wYXJ0c1tdID0geworCXsKKwkJLm5hbWUJPSAiREIxMjAwIFNQSSBmbGFzaCIsCisJCS5vZmZzZXQJPSAwLAorCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBkYjEyMDBfc3BpZmxhc2hfZGF0YSA9IHsKKwkubmFtZQkJPSAiczI1ZmwwMDEiLAorCS5wYXJ0cwkJPSBkYjEyMDBfc3BpZmxhc2hfcGFydHMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShkYjEyMDBfc3BpZmxhc2hfcGFydHMpLAorCS50eXBlCQk9ICJtMjVwMTAiLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBkYjEyMDBfc3BpX2RldnNbXSBfX2luaXRkYXRhID0geworCXsKKwkJLyogVEkgVE1QMTIxQUlEQlZSIHRlbXAgc2Vuc29yICovCisJCS5tb2RhbGlhcwk9ICJ0bXAxMjEiLAorCQkubWF4X3NwZWVkX2h6CT0gMjAwMDAwMCwKKwkJLmJ1c19udW0JPSAwLAorCQkuY2hpcF9zZWxlY3QJPSAwLAorCQkubW9kZQkJPSAwLAorCX0sCisJeworCQkvKiBTcGFuc2lvbiBTMjVGTDAwMUQwRk1BIFNQSSBmbGFzaCAqLworCQkubW9kYWxpYXMJPSAibTI1cDgwIiwKKwkJLm1heF9zcGVlZF9oegk9IDUwMDAwMDAwLAorCQkuYnVzX251bQk9IDAsCisJCS5jaGlwX3NlbGVjdAk9IDEsCisJCS5tb2RlCQk9IDAsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmRiMTIwMF9zcGlmbGFzaF9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGRiMTIwMF9pMmNfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkvKiBBVDI0QzA0LTEwIEkyQyBlZXByb20gKi8KKwkJSTJDX0JPQVJEX0lORk8oIjI0YzA0IiwgMHg1MiksCisJfSwKKwl7CisJCS8qIFBoaWxpcHMgTkUxNjE5IHRlbXAvdm9sdGFnZSBzZW5zb3IgKGFkbTEwMjUgZHJ2KSAqLworCQlJMkNfQk9BUkRfSU5GTygibmUxNjE5IiwgMHgyZCksCisJfSwKKwl7CisJCS8qIEkyUyBhdWRpbyBjb2RlYyBXTTg3MzEgKi8KKwkJSTJDX0JPQVJEX0lORk8oIndtODczMSIsIDB4MWIpLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgYXUxMjAwX25hbmRfY21kX2N0cmwoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCisJCQkJIHVuc2lnbmVkIGludCBjdHJsKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSAodW5zaWduZWQgbG9uZyl0aGlzLT5JT19BRERSX1c7CisKKwlpb2FkZHIgJj0gMHhmZmZmZmYwMDsKKworCWlmIChjdHJsICYgTkFORF9DTEUpIHsKKwkJaW9hZGRyICs9IE1FTV9TVE5BTkRfQ01EOworCX0gZWxzZSBpZiAoY3RybCAmIE5BTkRfQUxFKSB7CisJCWlvYWRkciArPSBNRU1fU1ROQU5EX0FERFI7CisJfSBlbHNlIHsKKwkJLyogYXNzdW1lIHdlIHdhbnQgdG8gci93IHJlYWwgZGF0YSAgYnkgZGVmYXVsdCAqLworCQlpb2FkZHIgKz0gTUVNX1NUTkFORF9EQVRBOworCX0KKwl0aGlzLT5JT19BRERSX1IgPSB0aGlzLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVtICopaW9hZGRyOworCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkgeworCQlfX3Jhd193cml0ZWIoY21kLCB0aGlzLT5JT19BRERSX1cpOworCQl3bWIoKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXUxMjAwX25hbmRfZGV2aWNlX3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXJldHVybiBfX3Jhd19yZWFkbCgodm9pZCBfX2lvbWVtICopTUVNX1NUU1RBVCkgJiAxOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZGIxMjAwX3BhcnRfcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGRiMTIwMF9uYW5kX3BhcnRzW10gPSB7CisJeworCQkubmFtZQk9ICJOQU5EIEZTIDAiLAorCQkub2Zmc2V0CT0gMCwKKwkJLnNpemUJPSA4ICogMTAyNCAqIDEwMjQsCisJfSwKKwl7CisJCS5uYW1lCT0gIk5BTkQgRlMgMSIsCisJCS5vZmZzZXQJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9kYXRhIGRiMTIwMF9uYW5kX3BsYXRkYXRhID0geworCS5jaGlwID0geworCQkubnJfY2hpcHMJPSAxLAorCQkuY2hpcF9vZmZzZXQJPSAwLAorCQkubnJfcGFydGl0aW9ucwk9IEFSUkFZX1NJWkUoZGIxMjAwX25hbmRfcGFydHMpLAorCQkucGFydGl0aW9ucwk9IGRiMTIwMF9uYW5kX3BhcnRzLAorCQkuY2hpcF9kZWxheQk9IDIwLAorCQkucGFydF9wcm9iZV90eXBlcyA9IGRiMTIwMF9wYXJ0X3Byb2JlcywKKwl9LAorCS5jdHJsID0geworCQkuZGV2X3JlYWR5CT0gYXUxMjAwX25hbmRfZGV2aWNlX3JlYWR5LAorCQkuY21kX2N0cmwJPSBhdTEyMDBfbmFuZF9jbWRfY3RybCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYjEyMDBfbmFuZF9yZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IERCMTIwMF9OQU5EX1BIWVNfQUREUiwKKwkJLmVuZAk9IERCMTIwMF9OQU5EX1BIWVNfQUREUiArIDB4ZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYjEyMDBfbmFuZF9kZXYgPSB7CisJLm5hbWUJCT0gImdlbl9uYW5kIiwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZGIxMjAwX25hbmRfcmVzKSwKKwkucmVzb3VyY2UJPSBkYjEyMDBfbmFuZF9yZXMsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZkYjEyMDBfbmFuZF9wbGF0ZGF0YSwKKwl9Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgZGIxMjAwX2V0aF9kYXRhID0geworCS5mbGFncwk9IFNNQzkxWF9OT1dBSVQgfCBTTUM5MVhfVVNFXzE2QklULAorCS5sZWRhCT0gUlBDX0xFRF8xMDBfMTAsCisJLmxlZGIJPSBSUENfTEVEX1RYX1JYLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYjEyMDBfZXRoX3Jlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gREIxMjAwX0VUSF9QSFlTX0FERFIsCisJCS5lbmQJPSBEQjEyMDBfRVRIX1BIWVNfQUREUiArIDB4ZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IERCMTIwMF9FVEhfSU5ULAorCQkuZW5kCT0gREIxMjAwX0VUSF9JTlQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYjEyMDBfZXRoX2RldiA9IHsKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZkYjEyMDBfZXRoX2RhdGEsCisJfSwKKwkubmFtZQkJPSAic21jOTF4IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGRiMTIwMF9ldGhfcmVzKSwKKwkucmVzb3VyY2UJPSBkYjEyMDBfZXRoX3JlcywKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRiMTIwMF9pZGVfcmVzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBEQjEyMDBfSURFX1BIWVNfQUREUiwKKwkJLmVuZCAJPSBEQjEyMDBfSURFX1BIWVNfQUREUiArIERCMTIwMF9JREVfUEhZU19MRU4gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gREIxMjAwX0lERV9JTlQsCisJCS5lbmQJPSBEQjEyMDBfSURFX0lOVCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHU2NCBpZGVfZG1hbWFzayA9IERNQV8zMkJJVF9NQVNLOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYjEyMDBfaWRlX2RldiA9IHsKKwkubmFtZQkJPSAiYXUxMjAwLWlkZSIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrIAkJPSAmaWRlX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV8zMkJJVF9NQVNLLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGRiMTIwMF9pZGVfcmVzKSwKKwkucmVzb3VyY2UJPSBkYjEyMDBfaWRlX3JlcywKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYjEyMDBfcnRjX2RldiA9IHsKKwkubmFtZQk9ICJydGMtYXUxeHh4IiwKKwkuaWQJPSAtMSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBTRCBjYXJkZGV0ZWN0czogIHRoZXkncmUgc3VwcG9zZWQgdG8gYmUgZWRnZS10cmlnZ2VyZWQsIGJ1dCBhY2sKKyAqIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIChDUExEIFJldiAyKS4gIEluc3RlYWQsIHRoZSBzY3JlYW1pbmcgb25lCisgKiBpcyBkaXNhYmxlZCBhbmQgaXRzIGNvdW50ZXJwYXJ0IGVuYWJsZWQuICBUaGUgNTAwbXMgdGltZW91dCBpcworICogYmVjYXVzZSB0aGUgY2FyZGRldGVjdCBpc24ndCBkZWJvdW5jZWQgaW4gaGFyZHdhcmUuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBkYjEyMDBfbW1jX2NkKGludCBpcnEsIHZvaWQgKnB0cikKK3sKKwl2b2lkKCptbWNfY2QpKHN0cnVjdCBtbWNfaG9zdCAqLCB1bnNpZ25lZCBsb25nKTsKKworCWlmIChpcnEgPT0gREIxMjAwX1NEMF9JTlNFUlRfSU5UKSB7CisJCWRpc2FibGVfaXJxX25vc3luYyhEQjEyMDBfU0QwX0lOU0VSVF9JTlQpOworCQllbmFibGVfaXJxKERCMTIwMF9TRDBfRUpFQ1RfSU5UKTsKKwl9IGVsc2UgeworCQlkaXNhYmxlX2lycV9ub3N5bmMoREIxMjAwX1NEMF9FSkVDVF9JTlQpOworCQllbmFibGVfaXJxKERCMTIwMF9TRDBfSU5TRVJUX0lOVCk7CisJfQorCisJLyogbGluayBhZ2FpbnN0IENPTkZJR19NTUM9bSAqLworCW1tY19jZCA9IHN5bWJvbF9nZXQobW1jX2RldGVjdF9jaGFuZ2UpOworCWlmIChtbWNfY2QpIHsKKwkJbW1jX2NkKHB0ciwgbXNlY3NfdG9famlmZmllcyg1MDApKTsKKwkJc3ltYm9sX3B1dChtbWNfZGV0ZWN0X2NoYW5nZSk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGRiMTIwMF9tbWNfY2Rfc2V0dXAodm9pZCAqbW1jX2hvc3QsIGludCBlbikKK3sKKwlpbnQgcmV0OworCisJaWYgKGVuKSB7CisJCXJldCA9IHJlcXVlc3RfaXJxKERCMTIwMF9TRDBfSU5TRVJUX0lOVCwgZGIxMjAwX21tY19jZCwKKwkJCQkgIElSUUZfRElTQUJMRUQsICJzZF9pbnNlcnQiLCBtbWNfaG9zdCk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKworCQlyZXQgPSByZXF1ZXN0X2lycShEQjEyMDBfU0QwX0VKRUNUX0lOVCwgZGIxMjAwX21tY19jZCwKKwkJCQkgIElSUUZfRElTQUJMRUQsICJzZF9lamVjdCIsIG1tY19ob3N0KTsKKwkJaWYgKHJldCkgeworCQkJZnJlZV9pcnEoREIxMjAwX1NEMF9JTlNFUlRfSU5ULCBtbWNfaG9zdCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmIChiY3NyX3JlYWQoQkNTUl9TSUdTVEFUKSAmIEJDU1JfSU5UX1NEMElOU0VSVCkKKwkJCWVuYWJsZV9pcnEoREIxMjAwX1NEMF9FSkVDVF9JTlQpOworCQllbHNlCisJCQllbmFibGVfaXJxKERCMTIwMF9TRDBfSU5TRVJUX0lOVCk7CisKKwl9IGVsc2UgeworCQlmcmVlX2lycShEQjEyMDBfU0QwX0lOU0VSVF9JTlQsIG1tY19ob3N0KTsKKwkJZnJlZV9pcnEoREIxMjAwX1NEMF9FSkVDVF9JTlQsIG1tY19ob3N0KTsKKwl9CisJcmV0ID0gMDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBkYjEyMDBfbW1jX3NldF9wb3dlcih2b2lkICptbWNfaG9zdCwgaW50IHN0YXRlKQoreworCWlmIChzdGF0ZSkgeworCQliY3NyX21vZChCQ1NSX0JPQVJELCAwLCBCQ1NSX0JPQVJEX1NEMFBXUik7CisJCW1zbGVlcCg0MDApOwkvKiBzdGFiaWxpemF0aW9uIHRpbWUgKi8KKwl9IGVsc2UKKwkJYmNzcl9tb2QoQkNTUl9CT0FSRCwgQkNTUl9CT0FSRF9TRDBQV1IsIDApOworfQorCitzdGF0aWMgaW50IGRiMTIwMF9tbWNfY2FyZF9yZWFkb25seSh2b2lkICptbWNfaG9zdCkKK3sKKwlyZXR1cm4gKGJjc3JfcmVhZChCQ1NSX1NUQVRVUykgJiBCQ1NSX1NUQVRVU19TRDBXUCkgPyAxIDogMDsKK30KKworc3RhdGljIGludCBkYjEyMDBfbW1jX2NhcmRfaW5zZXJ0ZWQodm9pZCAqbW1jX2hvc3QpCit7CisJcmV0dXJuIChiY3NyX3JlYWQoQkNTUl9TSUdTVEFUKSAmIEJDU1JfSU5UX1NEMElOU0VSVCkgPyAxIDogMDsKK30KKworc3RhdGljIHZvaWQgZGIxMjAwX21tY2xlZF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkLAorCQkJICAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQoreworCWlmIChicmlnaHRuZXNzICE9IExFRF9PRkYpCisJCWJjc3JfbW9kKEJDU1JfTEVEUywgQkNTUl9MRURTX0xFRDAsIDApOworCWVsc2UKKwkJYmNzcl9tb2QoQkNTUl9MRURTLCAwLCBCQ1NSX0xFRFNfTEVEMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IGRiMTIwMF9tbWNfbGVkID0geworCS5icmlnaHRuZXNzX3NldAk9IGRiMTIwMF9tbWNsZWRfc2V0LAorfTsKKworLyogbmVlZGVkIGJ5IGFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wbGF0Zm9ybS5jICovCitzdHJ1Y3QgYXUxeG1tY19wbGF0Zm9ybV9kYXRhIGF1MXhtbWNfcGxhdGRhdGFbXSA9IHsKKwlbMF0gPSB7CisJCS5jZF9zZXR1cAk9IGRiMTIwMF9tbWNfY2Rfc2V0dXAsCisJCS5zZXRfcG93ZXIJPSBkYjEyMDBfbW1jX3NldF9wb3dlciwKKwkJLmNhcmRfaW5zZXJ0ZWQJPSBkYjEyMDBfbW1jX2NhcmRfaW5zZXJ0ZWQsCisJCS5jYXJkX3JlYWRvbmx5CT0gZGIxMjAwX21tY19jYXJkX3JlYWRvbmx5LAorCQkubGVkCQk9ICZkYjEyMDBfbW1jX2xlZCwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXUxMjAwX3BzYzBfcmVzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBQU0MwX1BIWVNfQUREUiwKKwkJLmVuZAk9IFBTQzBfUEhZU19BRERSICsgMHgwMDBmZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFVMTIwMF9QU0MwX0lOVCwKKwkJLmVuZAk9IEFVMTIwMF9QU0MwX0lOVCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IERTQ1JfQ01EMF9QU0MwX1RYLAorCQkuZW5kCT0gRFNDUl9DTUQwX1BTQzBfVFgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCisJWzNdID0geworCQkuc3RhcnQJPSBEU0NSX0NNRDBfUFNDMF9SWCwKKwkJLmVuZAk9IERTQ1JfQ01EMF9QU0MwX1JYLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGIxMjAwX2kyY19kZXYgPSB7CisJLm5hbWUJCT0gImF1MXhwc2Nfc21idXMiLAorCS5pZAkJPSAwLAkvKiBidXMgbnVtYmVyICovCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGF1MTIwMF9wc2MwX3JlcyksCisJLnJlc291cmNlCT0gYXUxMjAwX3BzYzBfcmVzLAorfTsKKworc3RhdGljIHZvaWQgZGIxMjAwX3NwaV9jc19lbihzdHJ1Y3QgYXUxNTUwX3NwaV9pbmZvICpzcGksIGludCBjcywgaW50IHBvbCkKK3sKKwlpZiAoY3MpCisJCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCAwLCBCQ1NSX1JFU0VUU19TUElTRUwpOworCWVsc2UKKwkJYmNzcl9tb2QoQkNTUl9SRVNFVFMsIEJDU1JfUkVTRVRTX1NQSVNFTCwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXUxNTUwX3NwaV9pbmZvIGRiMTIwMF9zcGlfcGxhdGRhdGEgPSB7CisJLm1haW5jbGtfaHoJPSA1MDAwMDAwMCwJLyogUFNDMCBjbG9jayAqLworCS5udW1fY2hpcHNlbGVjdCA9IDIsCisJLmFjdGl2YXRlX2NzCT0gZGIxMjAwX3NwaV9jc19lbiwKK307CisKK3N0YXRpYyB1NjQgc3BpX2RtYW1hc2sgPSBETUFfMzJCSVRfTUFTSzsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGIxMjAwX3NwaV9kZXYgPSB7CisJLmRldgk9IHsKKwkJLmRtYV9tYXNrCQk9ICZzcGlfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BXzMyQklUX01BU0ssCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZkYjEyMDBfc3BpX3BsYXRkYXRhLAorCX0sCisJLm5hbWUJCT0gImF1MTU1MC1zcGkiLAorCS5pZAkJPSAwLAkvKiBidXMgbnVtYmVyICovCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGF1MTIwMF9wc2MwX3JlcyksCisJLnJlc291cmNlCT0gYXUxMjAwX3BzYzBfcmVzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdTEyMDBfcHNjMV9yZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFBTQzFfUEhZU19BRERSLAorCQkuZW5kCT0gUFNDMV9QSFlTX0FERFIgKyAweDAwMGZmZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVUxMjAwX1BTQzFfSU5ULAorCQkuZW5kCT0gQVUxMjAwX1BTQzFfSU5ULAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gRFNDUl9DTUQwX1BTQzFfVFgsCisJCS5lbmQJPSBEU0NSX0NNRDBfUFNDMV9UWCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwlbM10gPSB7CisJCS5zdGFydAk9IERTQ1JfQ01EMF9QU0MxX1JYLAorCQkuZW5kCT0gRFNDUl9DTUQwX1BTQzFfUlgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYjEyMDBfYXVkaW9fZGV2ID0geworCS8qIG5hbWUgYXNzaWduZWQgbGF0ZXIgYmFzZWQgb24gc3dpdGNoIHNldHRpbmcgKi8KKwkuaWQJCT0gMSwJLyogUFNDIElEICovCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGF1MTIwMF9wc2MxX3JlcyksCisJLnJlc291cmNlCT0gYXUxMjAwX3BzYzFfcmVzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRiMTIwMF9kZXZzW10gX19pbml0ZGF0YSA9IHsKKwlOVUxMLAkJLyogUFNDMCwgc2VsZWN0ZWQgYnkgUzYuOCAqLworCSZkYjEyMDBfaWRlX2RldiwKKwkmZGIxMjAwX2V0aF9kZXYsCisJJmRiMTIwMF9ydGNfZGV2LAorCSZkYjEyMDBfbmFuZF9kZXYsCisJJmRiMTIwMF9hdWRpb19kZXYsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkYjEyMDBfZGV2X2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHBmYzsKKwl1bnNpZ25lZCBzaG9ydCBzdzsKKwlpbnQgc3dhcHBlZDsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRiMTIwMF9pMmNfZGV2cywKKwkJCQlBUlJBWV9TSVpFKGRiMTIwMF9pMmNfZGV2cykpOworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGRiMTIwMF9zcGlfZGV2cywKKwkJCQlBUlJBWV9TSVpFKGRiMTIwMF9pMmNfZGV2cykpOworCisJLyogU1dJVENIRVM6CVM2LjggSTJDL1NQSSBzZWxlY3RvciAgKE9GRj1JMkMgIE9OPVNQSSkKKwkgKgkJUzYuNyBBQzk3L0kyUyBzZWxlY3RvciAoT0ZGPUFDOTcgT049STJTKQorCSAqLworCisJLyogTk9URTogR1BJTzIxNSBjb250cm9scyBPVEcgVkJVUyBzdXBwbHkuICBJbiBTUEkgbW9kZSBob3dldmVyCisJICogdGhpcyBwaW4gaXMgY2xhaW1lZCBieSBQU0MwICh1bnVzZWQgdGhvdWdoLCBidXQgcGlubXV4IGRvZXNuJ3QKKwkgKiBhbGxvdyB0byBmcmVlIGl0IHdpdGhvdXQgY3JpcHBsaW5nIHRoZSBTUEkgaW50ZXJmYWNlKS4KKwkgKiBBcyBhIHJlc3VsdCwgaW4gU1BJIG1vZGUsIE9URyBzaW1wbHkgd29uJ3Qgd29yayAoUFNDMCB1c2VzCisJICogaXQgYXMgYW4gaW5wdXQgcGluIHdoaWNoIGlzIHB1bGxlZCBoaWdoIG9uIHRoZSBib2FyZHMpLgorCSAqLworCXBmYyA9IF9fcmF3X3JlYWRsKCh2b2lkIF9faW9tZW0gKilTWVNfUElORlVOQykgJiB+U1lTX1BJTkZVTkNfUDBBOworCisJLyogc3dpdGNoIG9mZiBPVEcgVkJVUyBzdXBwbHkgKi8KKwlncGlvX3JlcXVlc3QoMjE1LCAib3RnLXZidXMiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjE1LCAxKTsKKworCXByaW50ayhLRVJOX0lORk8gIkRCMTIwMCBkZXZpY2UgY29uZmlndXJhdGlvbjpcbiIpOworCisJc3cgPSBiY3NyX3JlYWQoQkNTUl9TV0lUQ0hFUyk7CisJaWYgKHN3ICYgQkNTUl9TV0lUQ0hFU19ESVBfOCkgeworCQlkYjEyMDBfZGV2c1swXSA9ICZkYjEyMDBfaTJjX2RldjsKKwkJYmNzcl9tb2QoQkNTUl9SRVNFVFMsIEJDU1JfUkVTRVRTX1BTQzBNVVgsIDApOworCisJCXBmYyB8PSAoMiA8PCAxNyk7CS8qIEdQSU8yIGJsb2NrIG93bnMgR1BJTzIxNSAqLworCisJCXByaW50ayhLRVJOX0lORk8gIiBTNi44IE9GRjogUFNDMCBtb2RlIEkyQ1xuIik7CisJCXByaW50ayhLRVJOX0lORk8gIiAgIE9URyBwb3J0IFZCVVMgc3VwcGx5IGF2YWlsYWJsZSFcbiIpOworCX0gZWxzZSB7CisJCWRiMTIwMF9kZXZzWzBdID0gJmRiMTIwMF9zcGlfZGV2OworCQliY3NyX21vZChCQ1NSX1JFU0VUUywgMCwgQkNTUl9SRVNFVFNfUFNDME1VWCk7CisKKwkJcGZjIHw9ICgxIDw8IDE3KTsJLyogUFNDMCBvd25zIEdQSU8yMTUgKi8KKworCQlwcmludGsoS0VSTl9JTkZPICIgUzYuOCBPTiA6IFBTQzAgbW9kZSBTUElcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICIgICBPVEcgcG9ydCBWQlVTIHN1cHBseSBkaXNhYmxlZFxuIik7CisJfQorCV9fcmF3X3dyaXRlbChwZmMsICh2b2lkIF9faW9tZW0gKilTWVNfUElORlVOQyk7CisJd21iKCk7CisKKwkvKiBBdWRpbzogRElQNyBzZWxlY3RzIEkyUygwKS9BQzk3KDEpLCBidXQgbmVlZCBJMkMgZm9yIEkyUyEKKwkgKiBzbzogRElQNz0xIHx8IERJUDg9MCA9PiBBQzk3LCBESVA3PTAgJiYgRElQOD0xID0+IEkyUworCSAqLworCXN3ICY9IEJDU1JfU1dJVENIRVNfRElQXzggfCBCQ1NSX1NXSVRDSEVTX0RJUF83OworCWlmIChzdyA9PSBCQ1NSX1NXSVRDSEVTX0RJUF84KSB7CisJCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCAwLCBCQ1NSX1JFU0VUU19QU0MxTVVYKTsKKwkJZGIxMjAwX2F1ZGlvX2Rldi5uYW1lID0gImF1MXhwc2NfaTJzIjsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiIFM2LjcgT04gOiBQU0MxIG1vZGUgSTJTXG4iKTsKKwl9IGVsc2UgeworCQliY3NyX21vZChCQ1NSX1JFU0VUUywgQkNTUl9SRVNFVFNfUFNDMU1VWCwgMCk7CisJCWRiMTIwMF9hdWRpb19kZXYubmFtZSA9ICJhdTF4cHNjX2FjOTciOworCQlwcmludGsoS0VSTl9JTkZPICIgUzYuNyBPRkY6IFBTQzEgbW9kZSBBQzk3XG4iKTsKKwl9CisKKwkvKiBBdWRpbyBQU0MgY2xvY2sgaXMgc3VwcGxpZWQgZXh0ZXJuYWxseS4gKEZJWE1FOiBwbGF0ZGF0YSEhKSAqLworCV9fcmF3X3dyaXRlbChQU0NfU0VMX0NMS19TRVJDTEssCisJCSh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoUFNDMV9QSFlTX0FERFIpICsgUFNDX1NFTF9PRkZTRVQpOworCXdtYigpOworCisJZGIxeF9yZWdpc3Rlcl9wY21jaWFfc29ja2V0KFBDTUNJQV9BVFRSX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDA0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDA0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSICAgKyAweDAwMDAxMDAwMCAtIDEsCisJCQkJICAgIERCMTIwMF9QQzBfSU5ULAorCQkJCSAgICBEQjEyMDBfUEMwX0lOU0VSVF9JTlQsCisJCQkJICAgIC8qREIxMjAwX1BDMF9TVFNDSEdfSU5UKi8wLAorCQkJCSAgICBEQjEyMDBfUEMwX0VKRUNUX0lOVCwKKwkJCQkgICAgMCk7CisKKwlkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQoUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDQwMDAwMDAsCisJCQkJICAgIFBDTUNJQV9BVFRSX1BIWVNfQUREUiArIDB4MDA0NDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDQwMDAwMDAsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSICArIDB4MDA0NDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDQwMDAwMDAsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDA0MDEwMDAwIC0gMSwKKwkJCQkgICAgREIxMjAwX1BDMV9JTlQsCisJCQkJICAgIERCMTIwMF9QQzFfSU5TRVJUX0lOVCwKKwkJCQkgICAgLypEQjEyMDBfUEMxX1NUU0NIR19JTlQqLzAsCisJCQkJICAgIERCMTIwMF9QQzFfRUpFQ1RfSU5ULAorCQkJCSAgICAxKTsKKworCXN3YXBwZWQgPSBiY3NyX3JlYWQoQkNTUl9TVEFUVVMpICYgQkNTUl9TVEFUVVNfREIxMjAwX1NXQVBCT09UOworCWRiMXhfcmVnaXN0ZXJfbm9yZmxhc2goNjQgPDwgMjAsIDIsIHN3YXBwZWQpOworCisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGRiMTIwMF9kZXZzLCBBUlJBWV9TSVpFKGRiMTIwMF9kZXZzKSk7Cit9CitkZXZpY2VfaW5pdGNhbGwoZGIxMjAwX2Rldl9pbml0KTsKKworLyogYXUxMjAwZmIgY2FsbHMgdGhlc2U6IFNURVJCVCBFSU5FTiBUUkFHSVNDSEVOIFRPRCEhISAqLworaW50IGJvYXJkX2F1MTIwMGZiX3BhbmVsKHZvaWQpCit7CisJcmV0dXJuIChiY3NyX3JlYWQoQkNTUl9TV0lUQ0hFUykgPj4gOCkgJiAweDBmOworfQorCitpbnQgYm9hcmRfYXUxMjAwZmJfcGFuZWxfaW5pdCh2b2lkKQoreworCS8qIEFwcGx5IHBvd2VyICovCisJYmNzcl9tb2QoQkNTUl9CT0FSRCwgMCwgQkNTUl9CT0FSRF9MQ0RWRUUgfCBCQ1NSX0JPQVJEX0xDRFZERCB8CisJCQkJQkNTUl9CT0FSRF9MQ0RCTCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBib2FyZF9hdTEyMDBmYl9wYW5lbF9zaHV0ZG93bih2b2lkKQoreworCS8qIFJlbW92ZSBwb3dlciAqLworCWJjc3JfbW9kKEJDU1JfQk9BUkQsIEJDU1JfQk9BUkRfTENEVkVFIHwgQkNTUl9CT0FSRF9MQ0RWREQgfAorCQkJICAgICBCQ1NSX0JPQVJEX0xDREJMLCAwKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjEyMDAvc2V0dXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjEyMDAvc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzk1MzZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMTIwMC9zZXR1cC5jCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQWxjaGVteS9BTUQvUk1JIERCMTIwMCBib2FyZCBzZXR1cC4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb3V0bGluZWQgaW4gdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgcm9vdCBvZgorICogdGhpcyBzb3VyY2UgYXJjaGl2ZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2RiMTIwMC5oPgorCitjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKK3sKKwlyZXR1cm4gIkFsY2hlbXkgRGIxMjAwIjsKK30KKwordm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZyZXEwLCBjbGtzcmMsIGRpdiwgcGZjOworCXVuc2lnbmVkIHNob3J0IHdob2FtaTsKKworCWJjc3JfaW5pdChEQjEyMDBfQkNTUl9QSFlTX0FERFIsCisJCSAgREIxMjAwX0JDU1JfUEhZU19BRERSICsgREIxMjAwX0JDU1JfSEVYTEVEX09GUyk7CisKKwl3aG9hbWkgPSBiY3NyX3JlYWQoQkNTUl9XSE9BTUkpOworCXByaW50ayhLRVJOX0lORk8gIkFsY2hlbXkvQU1EL1JNSSBEQjEyMDAgQm9hcmQsIENQTEQgUmV2ICVkIgorCQkiICBCb2FyZC1JRCAlZCAgRGF1Z2h0ZXJjYXJkIElEICVkXG4iLAorCQkod2hvYW1pID4+IDQpICYgMHhmLCAod2hvYW1pID4+IDgpICYgMHhmLCB3aG9hbWkgJiAweGYpOworCisJLyogU01CdXMvU1BJIG9uIFBTQzAsIEF1ZGlvIG9uIFBTQzEgKi8KKwlwZmMgPSBfX3Jhd19yZWFkbCgodm9pZCBfX2lvbWVtICopU1lTX1BJTkZVTkMpOworCXBmYyAmPSB+KFNZU19QSU5GVU5DX1AwQSB8IFNZU19QSU5GVU5DX1AwQik7CisJcGZjICY9IH4oU1lTX1BJTkZVTkNfUDFBIHwgU1lTX1BJTkZVTkNfUDFCIHwgU1lTX1BJTkZVTkNfRlMzKTsKKwlwZmMgfD0gU1lTX1BJTkZVTkNfUDFDOwkvKiBTUEkgaXMgY29uZmlndXJlZCBsYXRlciAqLworCV9fcmF3X3dyaXRlbChwZmMsICh2b2lkIF9faW9tZW0gKilTWVNfUElORlVOQyk7CisJd21iKCk7CisKKwkvKiBDbG9jayBjb25maWd1cmF0aW9uczogUFNDMDogfjUwTUh6IHZpYSBDbGtnZW4wLCBkZXJpdmVkIGZyb20KKwkgKiBDUFUgY2xvY2s7IGFsbCBvdGhlciBjbG9jayBnZW5lcmF0b3JzIG9mZi91bnVzZWQuCisJICovCisJZGl2ID0gKGdldF9hdTF4MDBfc3BlZWQoKSArIDI1MDAwMDAwKSAvIDUwMDAwMDAwOworCWlmIChkaXYgJiAxKQorCQlkaXYrKzsKKwlkaXYgPSAoKGRpdiA+PiAxKSAtIDEpICYgMHhmZjsKKworCWZyZXEwID0gZGl2IDw8IFNZU19GQ19GUkRJVjBfQklUOworCV9fcmF3X3dyaXRlbChmcmVxMCwgKHZvaWQgX19pb21lbSAqKVNZU19GUkVRQ1RSTDApOworCXdtYigpOworCWZyZXEwIHw9IFNZU19GQ19GRTA7CS8qIGVuYWJsZSBGMCAqLworCV9fcmF3X3dyaXRlbChmcmVxMCwgKHZvaWQgX19pb21lbSAqKVNZU19GUkVRQ1RSTDApOworCXdtYigpOworCisJLyogcHNjMF9pbnRjbGsgY29tZXMgMToxIGZyb20gRjAgKi8KKwljbGtzcmMgPSBTWVNfQ1NfTVVYX0ZRMCA8PCBTWVNfQ1NfTUUwX0JJVDsKKwlfX3Jhd193cml0ZWwoY2xrc3JjLCAodm9pZCBfX2lvbWVtICopU1lTX0NMS1NSQyk7CisJd21iKCk7Cit9CisKKy8qIHVzZSB0aGUgaGV4bGVkcyB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBjcHUgaGFzIGVudGVyZWQKKyAqIHdhaXQsIHRoZSBkb3RzIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIENQVSBpcyBjdXJyZW50bHkgaWRsZSBvcgorICogYWN0aXZlIChkb3RzIG9mZiA9IHNsZWVwaW5nLCBkb3RzIG9uID0gd29ya2luZykgZm9yIGNhc2VzIHdoZXJlCisgKiB0aGUgbnVtYmVyIGRvZXNuJ3QgY2hhbmdlIGZvciBhIGxvbmcoZXIpIHBlcmlvZCBvZiB0aW1lLgorICovCitzdGF0aWMgdm9pZCBkYjEyMDBfd2FpdCh2b2lkKQoreworCV9fYXNtX18oIgkuc2V0CXB1c2gJCQlcbiIKKwkJIgkuc2V0CW1pcHMzCQkJXG4iCisJCSIJLnNldAlub3Jlb3JkZXIJCVxuIgorCQkiCWNhY2hlCTB4MTQsIDAoJTApCQlcbiIKKwkJIgljYWNoZQkweDE0LCAzMiglMCkJCVxuIgorCQkiCWNhY2hlCTB4MTQsIDY0KCUwKQkJXG4iCisJCS8qIGRvdHMgb2ZmOiB3ZSdyZSBhYm91dCB0byBjYWxsIHdhaXQgKi8KKwkJIglsdWkJJDI2LCAweGI5ODAJCVxuIgorCQkiCW9yaQkkMjcsICQwLCAzCQlcbiIKKwkJIglzYgkkMjcsIDB4MTgoJDI2KQkJXG4iCisJCSIJc3luYwkJCQlcbiIKKwkJIglub3AJCQkJXG4iCisJCSIJd2FpdAkJCQlcbiIKKwkJIglub3AJCQkJXG4iCisJCSIJbm9wCQkJCVxuIgorCQkiCW5vcAkJCQlcbiIKKwkJIglub3AJCQkJXG4iCisJCSIJbm9wCQkJCVxuIgorCQkvKiBkb3RzIG9uOiB0aGVyZSdzIHdvcmsgdG8gZG8sIGluY3JlbWVudCBjbnRyICovCisJCSIJbHVpCSQyNiwgMHhiOTgwCQlcbiIKKwkJIglzYgkkMCwgMHgxOCgkMjYpCQlcbiIKKwkJIglsdWkJJDI2LCAweGI5YzAJCVxuIgorCQkiCWxiCSQyNywgMCgkMjYpCQlcbiIKKwkJIglhZGRpdQkkMjcsICQyNywgMQkJXG4iCisJCSIJc2IJJDI3LCAwKCQyNikJCVxuIgorCQkiCXN5bmMJCQkJXG4iCisJCSIJLnNldAlwb3AJCQlcbiIKKwkJOiA6ICJyIiAoZGIxMjAwX3dhaXQpKTsKK30KKworc3RhdGljIGludCBfX2luaXQgZGIxMjAwX2FyY2hfaW5pdCh2b2lkKQoreworCS8qIEdQSU83IGlzIGxvdy1sZXZlbCB0cmlnZ2VyZWQgQ1BMRCBjYXNjYWRlICovCisJc2V0X2lycV90eXBlKEFVMTIwMF9HUElPN19JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCWJjc3JfaW5pdF9pcnEoREIxMjAwX0lOVF9CRUdJTiwgREIxMjAwX0lOVF9FTkQsIEFVMTIwMF9HUElPN19JTlQpOworCisJLyogZG8gbm90IGF1dG9lbmFibGUgdGhlc2U6IENQTEQgaGFzIGJyb2tlbiBlZGdlIGludCBoYW5kbGluZywKKwkgKiBhbmQgdGhlIENEIGhhbmRsZXIgc2V0dXAgcmVxdWlyZXMgbWFudWFsIGVuYWJsaW5nIHRvIHdvcmsKKwkgKiBhcm91bmQgdGhhdC4KKwkgKi8KKwlpcnFfdG9fZGVzYyhEQjEyMDBfU0QwX0lOU0VSVF9JTlQpLT5zdGF0dXMgfD0gSVJRX05PQVVUT0VOOworCWlycV90b19kZXNjKERCMTIwMF9TRDBfRUpFQ1RfSU5UKS0+c3RhdHVzIHw9IElSUV9OT0FVVE9FTjsKKworCWlmIChjcHVfd2FpdCkKKwkJY3B1X3dhaXQgPSBkYjEyMDBfd2FpdDsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChkYjEyMDBfYXJjaF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvTWFrZWZpbGUgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL01ha2VmaWxlCmluZGV4IDQzMjI0MWEuLjYxM2MwYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9NYWtlZmlsZQpAQCAtNSw0ICs1LDQgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBBbGNoZW15IFNlbWljb25kdWN0b3IgREJBdTF4eDAgYm9hcmRzLgogIwogCi1vYmoteSA6PSBib2FyZF9zZXR1cC5vIGlycW1hcC5vCitvYmoteSA6PSBib2FyZF9zZXR1cC5vIHBsYXRmb3JtLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvYm9hcmRfc2V0dXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvYm9hcmRfc2V0dXAuYwppbmRleCBkZTMwZDhlLi41MGM5YmVmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL2JvYXJkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9ib2FyZF9zZXR1cC5jCkBAIC0yOSw1OCArMjksMTM4IEBACiAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9ldGguaD4KICNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvZGIxeDAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CiAKICNpbmNsdWRlIDxwcm9tLmg+CiAKKyNpZmRlZiBDT05GSUdfTUlQU19EQjE1MDAKK2NoYXIgaXJxX3RhYl9hbGNoZW15W11bNV0gX19pbml0ZGF0YSA9IHsKKwlbMTJdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRBLCAweGZmLCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDEyIC0gSFBUMzcxICAgKi8KKwlbMTNdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRBLCBBVTE1MDBfUENJX0lOVEIsIEFVMTUwMF9QQ0lfSU5UQywgQVUxNTAwX1BDSV9JTlREIH0sIC8qIElEU0VMIDEzIC0gUENJIHNsb3QgKi8KK307CiAKLXN0YXRpYyBCQ1NSICogY29uc3QgYmNzciA9IChCQ1NSICopQkNTUl9LU0VHMV9BRERSOworI2VuZGlmCisKKworI2lmZGVmIENPTkZJR19NSVBTX0RCMTU1MAorY2hhciBpcnFfdGFiX2FsY2hlbXlbXVs1XSBfX2luaXRkYXRhID0geworCVsxMV0gPSB7IC0xLCBBVTE1NTBfUENJX0lOVEMsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSwgLyogSURTRUwgMTEgLSBvbi1ib2FyZCBIUFQzNzEgKi8KKwlbMTJdID0geyAtMSwgQVUxNTUwX1BDSV9JTlRCLCBBVTE1NTBfUENJX0lOVEMsIEFVMTU1MF9QQ0lfSU5URCwgQVUxNTUwX1BDSV9JTlRBIH0sIC8qIElEU0VMIDEyIC0gUENJIHNsb3QgMiAobGVmdCkgKi8KKwlbMTNdID0geyAtMSwgQVUxNTUwX1BDSV9JTlRBLCBBVTE1NTBfUENJX0lOVEIsIEFVMTU1MF9QQ0lfSU5UQywgQVUxNTUwX1BDSV9JTlREIH0sIC8qIElEU0VMIDEzIC0gUENJIHNsb3QgMSAocmlnaHQpICovCit9OworI2VuZGlmCisKKworI2lmZGVmIENPTkZJR19NSVBTX0JPU1BPUlVTCitjaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7CisJWzExXSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQSwgQVUxNTAwX1BDSV9JTlRCLCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDExIC0gbWluaVBDSSAgKi8KKwlbMTJdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRBLCAweGZmLCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDEyIC0gU04xNzQxICAgKi8KKwlbMTNdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRBLCBBVTE1MDBfUENJX0lOVEIsIEFVMTUwMF9QQ0lfSU5UQywgQVUxNTAwX1BDSV9JTlREIH0sIC8qIElEU0VMIDEzIC0gUENJIHNsb3QgKi8KK307CisKKy8qCisgKiBNaWNyZWwvS2VuZGluIDUgcG9ydCBzd2l0Y2ggYXR0YWNoZWQgdG8gTUFDMCwKKyAqIE1BQzAgaXMgYXNzb2NpYXRlZCB3aXRoIFBIWSBhZGRyZXNzIDUgKD09IFdBTiBwb3J0KQorICogTUFDMSBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBQSFksIHNpbmNlIGl0J3MgY29ubmVjdGVkIGRpcmVjdGx5CisgKiB0byB0aGUgc3dpdGNoLgorICogbm8gaW50ZXJydXB0cyBhcmUgdXNlZAorICovCitzdGF0aWMgc3RydWN0IGF1MTAwMF9ldGhfcGxhdGZvcm1fZGF0YSBldGgwX3BkYXRhID0geworCS5waHlfc3RhdGljX2NvbmZpZwk9IDEsCisJLnBoeV9hZGRyCQk9IDUsCit9OworCitzdGF0aWMgdm9pZCBib3Nwb3J1c19wb3dlcl9vZmYodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJJdCdzIG5vdyBzYWZlIHRvIHR1cm4gb2ZmIHBvd2VyXG4iKTsKKwl3aGlsZSAoMSkKKwkJYXNtIHZvbGF0aWxlICgiLnNldCBtaXBzMyA7IHdhaXQgOyAuc2V0IG1pcHMwIik7Cit9CiAKIGNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQogewotI2lmZGVmIENPTkZJR19NSVBTX0JPU1BPUlVTCiAJcmV0dXJuICJBbGNoZW15IEJvc3BvcnVzIEdhdGV3YXkgUmVmZXJlbmNlIjsKLSNlbHNlCi0JcmV0dXJuICJBbGNoZW15IERiMXgwMCI7Cit9CiAjZW5kaWYKKworCisjaWZkZWYgQ09ORklHX01JUFNfTUlSQUdFCitjaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7CisJWzExXSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5URCwgMHhmZiwgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAxMSAtIFNNSSBWR1ggKi8KKwlbMTJdID0geyAtMSwgMHhmZiwgMHhmZiwgQVUxNTAwX1BDSV9JTlRDLCAweGZmIH0sIC8qIElEU0VMIDEyIC0gUE5YMTMwMCAqLworCVsxM10gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEEsIEFVMTUwMF9QQ0lfSU5UQiwgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAxMyAtIG1pbmlQQ0kgKi8KK307CisKK3N0YXRpYyB2b2lkIG1pcmFnZV9wb3dlcl9vZmYodm9pZCkKK3sKKwlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX291dHB1dCgyMTAsIDEpOwogfQogCi12b2lkIGJvYXJkX3Jlc2V0KHZvaWQpCitjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKIHsKLQkvKiBIaXQgQkNTUi5TV19SRVNFVFtSRVNFVF0gKi8KLQliY3NyLT5zd3Jlc2V0ID0gMHgwMDAwOworCXJldHVybiAiQWxjaGVteSBNaXJhZ2UiOwogfQorI2VuZGlmCisKKworI2lmIGRlZmluZWQoQ09ORklHX01JUFNfQk9TUE9SVVMpIHx8IGRlZmluZWQoQ09ORklHX01JUFNfTUlSQUdFKQorc3RhdGljIHZvaWQgbWlwc19zb2Z0cmVzZXQodm9pZCkKK3sKKwlhc20gdm9sYXRpbGUgKCJqclx0JTAiIDogOiAiciIoMHhiZmMwMDAwMCkpOworfQorCisjZWxzZQorCitjb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKK3sKKwlyZXR1cm4gIkFsY2hlbXkgRGIxeDAwIjsKK30KKyNlbmRpZgorCiAKIHZvaWQgX19pbml0IGJvYXJkX3NldHVwKHZvaWQpCiB7Ci0JdTMyIHBpbl9mdW5jID0gMDsKLQljaGFyICphcmdwdHI7CisJdW5zaWduZWQgbG9uZyBiY3NyMSwgYmNzcjI7CisJdTMyIHBpbl9mdW5jOwogCi0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0jaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUKLQlhcmdwdHIgPSBzdHJzdHIoYXJncHRyLCAiY29uc29sZT0iKTsKLQlpZiAoYXJncHRyID09IE5VTEwpIHsKLQkJYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JCXN0cmNhdChhcmdwdHIsICIgY29uc29sZT10dHlTMCwxMTUyMDAiKTsKLQl9CisJYmNzcjEgPSBEQjEwMDBfQkNTUl9QSFlTX0FERFI7CisJYmNzcjIgPSBEQjEwMDBfQkNTUl9QSFlTX0FERFIgKyBEQjEwMDBfQkNTUl9IRVhMRURfT0ZTOworCisJcGluX2Z1bmMgPSAwOworCisjaWZkZWYgQ09ORklHX01JUFNfREIxMDAwCisJcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgQXUxMDAwL0RiMTAwMCBCb2FyZFxuIik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUlQU19EQjE1MDAKKwlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBBdTE1MDAvRGIxNTAwIEJvYXJkXG4iKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NSVBTX0RCMTEwMAorCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IEF1MTEwMC9EYjExMDAgQm9hcmRcbiIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX01JUFNfQk9TUE9SVVMKKwlhdTF4eHhfb3ZlcnJpZGVfZXRoX2NmZygwLCAmZXRoMF9wZGF0YSk7CisKKwlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBCb3Nwb3J1cyBCb2FyZFxuIik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUlQU19NSVJBR0UKKwlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBNaXJhZ2UgQm9hcmRcbiIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX01JUFNfREIxNTUwCisJcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgQXUxNTUwL0RiMTU1MCBCb2FyZFxuIik7CisKKwliY3NyMSA9IERCMTU1MF9CQ1NSX1BIWVNfQUREUjsKKwliY3NyMiA9IERCMTU1MF9CQ1NSX1BIWVNfQUREUiArIERCMTU1MF9CQ1NSX0hFWExFRF9PRlM7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19GQl9BVTExMDAKLQlhcmdwdHIgPSBzdHJzdHIoYXJncHRyLCAidmlkZW89Iik7Ci0JaWYgKGFyZ3B0ciA9PSBOVUxMKSB7Ci0JCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCQkvKiBkZWZhdWx0IHBhbmVsICovCi0JCS8qc3RyY2F0KGFyZ3B0ciwgIiB2aWRlbz1hdTExMDBmYjpwYW5lbDpTaGFycF8zMjB4MjQwXzE2Iik7Ki8KLQl9Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1NPVU5EX0FVMVgwMCkgJiYgIWRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JLyogYXUxMDAwIGRvZXMgbm90IHN1cHBvcnQgdnJhLCBhdTE1MDAgYW5kIGF1MTEwMCBkbyAqLwotCXN0cmNhdChhcmdwdHIsICIgYXUxMDAwX2F1ZGlvPXZyYSIpOwotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotI2VuZGlmCisJLyogaW5pdGlhbGl6ZSBib2FyZCByZWdpc3RlciBzcGFjZSAqLworCWJjc3JfaW5pdChiY3NyMSwgYmNzcjIpOwogCiAJLyogTm90IHZhbGlkIGZvciBBdTE1NTAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19JUkRBKSAmJiBcCkBAIC04OSwxMSArMTY5LDEwIEBACiAJcGluX2Z1bmMgPSBhdV9yZWFkbChTWVNfUElORlVOQykgfCBTWVNfUEZfSVJGOwogCWF1X3dyaXRlbChwaW5fZnVuYywgU1lTX1BJTkZVTkMpOwogCS8qIFBvd2VyIG9mZiB1bnRpbCB0aGUgZHJpdmVyIGlzIGluIHVzZSAqLwotCWJjc3ItPnJlc2V0cyAmPSB+QkNTUl9SRVNFVFNfSVJEQV9NT0RFX01BU0s7Ci0JYmNzci0+cmVzZXRzIHw9ICBCQ1NSX1JFU0VUU19JUkRBX01PREVfT0ZGOwotCWF1X3N5bmMoKTsKKwliY3NyX21vZChCQ1NSX1JFU0VUUywgQkNTUl9SRVNFVFNfSVJEQV9NT0RFX01BU0ssCisJCQkJQkNTUl9SRVNFVFNfSVJEQV9NT0RFX09GRik7CiAjZW5kaWYKLQliY3NyLT5wY21jaWEgPSAweDAwMDA7IC8qIHR1cm4gb2ZmIFBDTUNJQSBwb3dlciAqLworCWJjc3Jfd3JpdGUoQkNTUl9QQ01DSUEsIDApOwkvKiB0dXJuIG9mZiBQQ01DSUEgcG93ZXIgKi8KIAogCS8qIEVuYWJsZSBHUElPWzMxOjBdIGlucHV0cyAqLwogCWFsY2hlbXlfZ3BpbzFfaW5wdXRfZW5hYmxlKCk7CkBAIC0xMjAsMjYgKzE5OSw1MyBAQAogCSAqIGJlIHBhcnQgb2YgdGhlIGF1ZGlvIGRyaXZlci4KIAkgKi8KIAlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX291dHB1dCgyMDksIDEpOworCisJcG1fcG93ZXJfb2ZmID0gbWlyYWdlX3Bvd2VyX29mZjsKKwlfbWFjaGluZV9oYWx0ID0gbWlyYWdlX3Bvd2VyX29mZjsKKwlfbWFjaGluZV9yZXN0YXJ0ID0gKHZvaWQoKikoY2hhciAqKSltaXBzX3NvZnRyZXNldDsKICNlbmRpZgogCi0JYXVfc3luYygpOwotCi0jaWZkZWYgQ09ORklHX01JUFNfREIxMDAwCi0JcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgQXUxMDAwL0RiMTAwMCBCb2FyZFxuIik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUlQU19EQjE1MDAKLQlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBBdTE1MDAvRGIxNTAwIEJvYXJkXG4iKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NSVBTX0RCMTEwMAotCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IEF1MTEwMC9EYjExMDAgQm9hcmRcbiIpOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX01JUFNfQk9TUE9SVVMKLQlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBCb3Nwb3J1cyBCb2FyZFxuIik7CisJcG1fcG93ZXJfb2ZmID0gYm9zcG9ydXNfcG93ZXJfb2ZmOworCV9tYWNoaW5lX2hhbHQgPSBib3Nwb3J1c19wb3dlcl9vZmY7CisJX21hY2hpbmVfcmVzdGFydCA9ICh2b2lkKCopKGNoYXIgKikpbWlwc19zb2Z0cmVzZXQ7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfTUlQU19NSVJBR0UKLQlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBNaXJhZ2UgQm9hcmRcbiIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01JUFNfREIxNTUwCi0JcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgQXUxNTUwL0RiMTU1MCBCb2FyZFxuIik7Ci0jZW5kaWYKKwlhdV9zeW5jKCk7CiB9CisKK3N0YXRpYyBpbnQgX19pbml0IGRiMXgwMF9pbml0X2lycSh2b2lkKQoreworI2lmIGRlZmluZWQoQ09ORklHX01JUFNfTUlSQUdFKQorCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzdfSU5ULCBJUlFGX1RSSUdHRVJfUklTSU5HKTsgLyogVFMgcGVuZG93biAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjE1NTApCisJc2V0X2lycV90eXBlKEFVMTU1MF9HUElPMF9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAgLyogQ0QwIyAqLworCXNldF9pcnFfdHlwZShBVTE1NTBfR1BJTzFfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgIC8qIENEMSMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTUwX0dQSU8zX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7ICAvKiBDQVJEMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTUwX0dQSU81X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7ICAvKiBDQVJEMSMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTUwX0dQSU8yMV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBTVFNDSEcwIyAqLworCXNldF9pcnFfdHlwZShBVTE1NTBfR1BJTzIyX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIFNUU0NIRzEjICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTUwMCkKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8wX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIENEMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8zX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIENEMSMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIENBUkQwIyAqLworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzVfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogQ0FSRDEjICovCisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBTVFNDSEcwIyAqLworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzRfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogU1RTQ0hHMSMgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMTAwKQorCXNldF9pcnFfdHlwZShBVTExMDBfR1BJTzBfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogQ0QwIyAqLworCXNldF9pcnFfdHlwZShBVTExMDBfR1BJTzNfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogQ0QxIyAqLworCXNldF9pcnFfdHlwZShBVTExMDBfR1BJTzJfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogQ0FSRDAjICovCisJc2V0X2lycV90eXBlKEFVMTEwMF9HUElPNV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBDQVJEMSMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxMTAwX0dQSU8xX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIFNUU0NIRzAjICovCisJc2V0X2lycV90eXBlKEFVMTEwMF9HUElPNF9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBTVFNDSEcxIyAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjEwMDApCisJc2V0X2lycV90eXBlKEFVMTAwMF9HUElPMF9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBDRDAjICovCisJc2V0X2lycV90eXBlKEFVMTAwMF9HUElPM19JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBDRDEjICovCisJc2V0X2lycV90eXBlKEFVMTAwMF9HUElPMl9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBDQVJEMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxMDAwX0dQSU81X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIENBUkQxIyAqLworCXNldF9pcnFfdHlwZShBVTEwMDBfR1BJTzFfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogU1RTQ0hHMCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxMDAwX0dQSU80X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7IC8qIFNUU0NIRzEjICovCisjZW5kaWYKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoZGIxeDAwX2luaXRfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvaXJxbWFwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL2lycW1hcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjA5MDI1Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvaXJxbWFwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglBdTF4eHggaXJxIG1hcCB0YWJsZQotICoKLSAqIENvcHlyaWdodCAyMDAzIEVtYmVkZGVkIEVkZ2UsIExMQwotICoJCWRhbkBlbWJlZGRlZGVkZ2UuY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YJIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCUxpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVECSAgYGBBUwlJUycnIEFORCAgIEFOWQlFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLAkgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTwlFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRQkgTElBQkxFIEZPUiBBTlkJICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVECSAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTCU9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLAlPUiBQUk9GSVRTOyBPUglCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCSBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+Ci0KLSNpZmRlZiBDT05GSUdfTUlQU19EQjE1MDAKLWNoYXIgaXJxX3RhYl9hbGNoZW15W11bNV0gX19pbml0ZGF0YSA9IHsKLQlbMTJdID0geyAtMSwgSU5UQSwgSU5UWCwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAxMiAtIEhQVDM3MSAgICovCi0JWzEzXSA9IHsgLTEsIElOVEEsIElOVEIsIElOVEMsIElOVEQgfSwgLyogSURTRUwgMTMgLSBQQ0kgc2xvdCAqLwotfTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfQk9TUE9SVVMKLWNoYXIgaXJxX3RhYl9hbGNoZW15W11bNV0gX19pbml0ZGF0YSA9IHsKLQlbMTFdID0geyAtMSwgSU5UQSwgSU5UQiwgSU5UWCwgSU5UWCB9LCAvKiBJRFNFTCAxMSAtIG1pbmlQQ0kgICovCi0JWzEyXSA9IHsgLTEsIElOVEEsIElOVFgsIElOVFgsIElOVFggfSwgLyogSURTRUwgMTIgLSBTTjE3NDEgICAqLwotCVsxM10gPSB7IC0xLCBJTlRBLCBJTlRCLCBJTlRDLCBJTlREIH0sIC8qIElEU0VMIDEzIC0gUENJIHNsb3QgKi8KLX07Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX01JUkFHRQotY2hhciBpcnFfdGFiX2FsY2hlbXlbXVs1XSBfX2luaXRkYXRhID0gewotCVsxMV0gPSB7IC0xLCBJTlRELCBJTlRYLCBJTlRYLCBJTlRYIH0sIC8qIElEU0VMIDExIC0gU01JIFZHWCAqLwotCVsxMl0gPSB7IC0xLCBJTlRYLCBJTlRYLCBJTlRDLCBJTlRYIH0sIC8qIElEU0VMIDEyIC0gUE5YMTMwMCAqLwotCVsxM10gPSB7IC0xLCBJTlRBLCBJTlRCLCBJTlRYLCBJTlRYIH0sIC8qIElEU0VMIDEzIC0gbWluaVBDSSAqLwotfTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfREIxNTUwCi1jaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7Ci0JWzExXSA9IHsgLTEsIElOVEMsIElOVFgsIElOVFgsIElOVFggfSwgLyogSURTRUwgMTEgLSBvbi1ib2FyZCBIUFQzNzEgKi8KLQlbMTJdID0geyAtMSwgSU5UQiwgSU5UQywgSU5URCwgSU5UQSB9LCAvKiBJRFNFTCAxMiAtIFBDSSBzbG90IDIgKGxlZnQpICovCi0JWzEzXSA9IHsgLTEsIElOVEEsIElOVEIsIElOVEMsIElOVEQgfSwgLyogSURTRUwgMTMgLSBQQ0kgc2xvdCAxIChyaWdodCkgKi8KLX07Ci0jZW5kaWYKLQotCi1zdHJ1Y3QgYXUxeHh4X2lycW1hcCBfX2luaXRkYXRhIGF1MXh4eF9pcnFfbWFwW10gPSB7Ci0KLSNpZm5kZWYgQ09ORklHX01JUFNfTUlSQUdFCi0jaWZkZWYgQ09ORklHX01JUFNfREIxNTUwCi0JeyBBVTEwMDBfR1BJT18zLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sIC8qIFBDTUNJQSBDYXJkIDAgSVJRIyAqLwotCXsgQVUxMDAwX0dQSU9fNSwgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBQQ01DSUEgQ2FyZCAxIElSUSMgKi8KLSNlbHNlCi0JeyBBVTEwMDBfR1BJT18wLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sIC8qIFBDTUNJQSBDYXJkIDAgRnVsbHlfSW50ZXJ0ZWQjICovCi0JeyBBVTEwMDBfR1BJT18xLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sIC8qIFBDTUNJQSBDYXJkIDAgU1RTQ0hHIyAqLwotCXsgQVUxMDAwX0dQSU9fMiwgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBQQ01DSUEgQ2FyZCAwIElSUSMgKi8KLQotCXsgQVUxMDAwX0dQSU9fMywgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBQQ01DSUEgQ2FyZCAxIEZ1bGx5X0ludGVydGVkIyAqLwotCXsgQVUxMDAwX0dQSU9fNCwgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBQQ01DSUEgQ2FyZCAxIFNUU0NIRyMgKi8KLQl7IEFVMTAwMF9HUElPXzUsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwgLyogUENNQ0lBIENhcmQgMSBJUlEjICovCi0jZW5kaWYKLSNlbHNlCi0JeyBBVTEwMDBfR1BJT183LCBJUlFGX1RSSUdHRVJfUklTSU5HLCAwIH0sIC8qIHRvdWNoc2NyZWVuIHBlbiBkb3duICovCi0jZW5kaWYKLQotfTsKLQotdm9pZCBfX2luaXQgYm9hcmRfaW5pdF9pcnEodm9pZCkKLXsKLQlhdTF4eHhfc2V0dXBfaXJxbWFwKGF1MXh4eF9pcnFfbWFwLCBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4ZDVhYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvcGxhdGZvcm0uYwpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIERCQXUxeHh4IGJvYXJkIHBsYXRmb3JtIGRldmljZSByZWdpc3RyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFudWVsIExhdXNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CisjaW5jbHVkZSAiLi4vcGxhdGZvcm0uaCIKKworLyogREIxeHh4IFBDTUNJQSBpbnRlcnJ1cHQgc291cmNlczoKKyAqIENEMC8xIAlHUElPMC8zCisgKiBTVFNDSEcwLzEJR1BJTzEvNAorICogQ0FSRDAvMQlHUElPMi81CisgKiBEYjE1NTA6CTAvMSwgMjEvMjIsIDMvNQorICovCisKKyNkZWZpbmUgREIxWFhYX0hBU19QQ01DSUEKKyNkZWZpbmUgRl9TV0FQUEVEIChiY3NyX3JlYWQoQkNTUl9TVEFUVVMpICYgQkNTUl9TVEFUVVNfREIxMDAwX1NXQVBCT09UKQorCisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjEwMDApCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0QwCUFVMTAwMF9HUElPMF9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9TVFNDSEcwCUFVMTAwMF9HUElPMV9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DQVJEMAlBVTEwMDBfR1BJTzJfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0QxCUFVMTAwMF9HUElPM19JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9TVFNDSEcxCUFVMTAwMF9HUElPNF9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DQVJEMQlBVTEwMDBfR1BJTzVfSU5UCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUJMHgwMjAwMDAwMCAvKiAzMk1CICovCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRICTQgLyogMzItYml0cyAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjExMDApCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0QwCUFVMTEwMF9HUElPMF9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9TVFNDSEcwCUFVMTEwMF9HUElPMV9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DQVJEMAlBVTExMDBfR1BJTzJfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0QxCUFVMTEwMF9HUElPM19JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9TVFNDSEcxCUFVMTEwMF9HUElPNF9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DQVJEMQlBVTExMDBfR1BJTzVfSU5UCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUJMHgwMjAwMDAwMCAvKiAzMk1CICovCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRICTQgLyogMzItYml0cyAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjE1MDApCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0QwCUFVMTUwMF9HUElPMF9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9TVFNDSEcwCUFVMTUwMF9HUElPMV9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DQVJEMAlBVTE1MDBfR1BJTzJfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0QxCUFVMTUwMF9HUElPM19JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9TVFNDSEcxCUFVMTUwMF9HUElPNF9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9DQVJEMQlBVTE1MDBfR1BJTzVfSU5UCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUJMHgwMjAwMDAwMCAvKiAzMk1CICovCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRICTQgLyogMzItYml0cyAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjE1NTApCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0QwCUFVMTU1MF9HUElPMF9JTlQKKyNkZWZpbmUgREIxWFhYX1BDTUNJQV9TVFNDSEcwCUFVMTU1MF9HUElPMjFfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfQ0FSRDAJQVUxNTUwX0dQSU8zX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX0NEMQlBVTE1NTBfR1BJTzFfSU5UCisjZGVmaW5lIERCMVhYWF9QQ01DSUFfU1RTQ0hHMQlBVTE1NTBfR1BJTzIyX0lOVAorI2RlZmluZSBEQjFYWFhfUENNQ0lBX0NBUkQxCUFVMTU1MF9HUElPNV9JTlQKKyNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRQkweDA4MDAwMDAwIC8qIDEyOE1CICovCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRICTQgLyogMzItYml0cyAqLworI2Vsc2UKKy8qIG90aGVyIGJvYXJkOiBubyBQQ01DSUEgKi8KKyN1bmRlZiBEQjFYWFhfSEFTX1BDTUNJQQorI3VuZGVmIEZfU1dBUFBFRAorI2RlZmluZSBGX1NXQVBQRUQgMAorI2lmIGRlZmluZWQoQ09ORklHX01JUFNfQk9TUE9SVVMpCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUJMHgwMTAwMDAwMCAvKiAxNk1CICovCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRICTIgLyogMTYtYml0cyAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfTUlQU19NSVJBR0UpCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUJMHgwNDAwMDAwMCAvKiA2NE1CICovCisjZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRICTQgLyogMzItYml0cyAqLworI2VuZGlmCisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgZGIxeHh4X2Rldl9pbml0KHZvaWQpCit7CisjaWZkZWYgREIxWFhYX0hBU19QQ01DSUEKKwlkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQoUENNQ0lBX0FUVFJfUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDAwMDEwMDAwIC0gMSwKKwkJCQkgICAgREIxWFhYX1BDTUNJQV9DQVJEMCwKKwkJCQkgICAgREIxWFhYX1BDTUNJQV9DRDAsCisJCQkJICAgIC8qREIxWFhYX1BDTUNJQV9TVFNDSEcwKi8wLAorCQkJCSAgICAwLAorCQkJCSAgICAwKTsKKworCWRiMXhfcmVnaXN0ZXJfcGNtY2lhX3NvY2tldChQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwNDAwMDAwMCwKKwkJCQkgICAgUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDQ0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwNDAwMDAwMCwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDQ0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSICAgKyAweDAwNDAwMDAwMCwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDQwMTAwMDAgLSAxLAorCQkJCSAgICBEQjFYWFhfUENNQ0lBX0NBUkQxLAorCQkJCSAgICBEQjFYWFhfUENNQ0lBX0NEMSwKKwkJCQkgICAgLypEQjFYWFhfUENNQ0lBX1NUU0NIRzEqLzAsCisJCQkJICAgIDAsCisJCQkJICAgIDEpOworI2VuZGlmCisJZGIxeF9yZWdpc3Rlcl9ub3JmbGFzaChCT0FSRF9GTEFTSF9TSVpFLCBCT0FSRF9GTEFTSF9XSURUSCwgRl9TV0FQUEVEKTsKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChkYjF4eHhfZGV2X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTAwMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTAwMC9ib2FyZF9zZXR1cC5jCmluZGV4IGNkMjczNTQuLmI1MzExZDggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEwMDAvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMDAwL2JvYXJkX3NldHVwLmMKQEAgLTMxLDExICszMSw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtcGIxeDAwL3BiMTAwMC5oPgogI2luY2x1ZGUgPHByb20uaD4KIAotCi1zdHJ1Y3QgYXUxeHh4X2lycW1hcCBfX2luaXRkYXRhIGF1MXh4eF9pcnFfbWFwW10gPSB7Ci0JeyBBVTEwMDBfR1BJT18xNSwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotfTsKLQorI2luY2x1ZGUgIi4uL3BsYXRmb3JtLmgiCiAKIGNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQogewpAQCAtNDYsMjUgKzQyLDE0IEBACiB7CiB9CiAKLXZvaWQgX19pbml0IGJvYXJkX2luaXRfaXJxKHZvaWQpCi17Ci0JYXUxeHh4X3NldHVwX2lycW1hcChhdTF4eHhfaXJxX21hcCwgQVJSQVlfU0laRShhdTF4eHhfaXJxX21hcCkpOwotfQotCiB2b2lkIF9faW5pdCBib2FyZF9zZXR1cCh2b2lkKQogewogCXUzMiBwaW5fZnVuYywgc3RhdGljX2NmZzA7CiAJdTMyIHN5c19mcmVxY3RybCwgc3lzX2Nsa3NyYzsKIAl1MzIgcHJpZCA9IHJlYWRfYzBfcHJpZCgpOwogCi0jaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUKLQljaGFyICphcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQlhcmdwdHIgPSBzdHJzdHIoYXJncHRyLCAiY29uc29sZT0iKTsKLQlpZiAoYXJncHRyID09IE5VTEwpIHsKLQkJYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JCXN0cmNhdChhcmdwdHIsICIgY29uc29sZT10dHlTMCwxMTUyMDAiKTsKLQl9Ci0jZW5kaWYKKwlzeXNfZnJlcWN0cmwgPSAwOworCXN5c19jbGtzcmMgPSAwOwogCiAJLyogU2V0IEFVWCBjbG9jayB0byAxMiBNSHogKiA4ID0gOTYgTUh6ICovCiAJYXVfd3JpdGVsKDgsIFNZU19BVVhQTEwpOwpAQCAtMTkzLDMgKzE3OCwxNiBAQAogCQlicmVhazsKIAl9CiB9CisKK3N0YXRpYyBpbnQgX19pbml0IHBiMTAwMF9pbml0X2lycSh2b2lkKQoreworCXNldF9pcnFfdHlwZShBVTEwMDBfR1BJTzE1X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKHBiMTAwMF9pbml0X2lycSk7CisKK3N0YXRpYyBpbnQgX19pbml0IHBiMTAwMF9kZXZpY2VfaW5pdCh2b2lkKQoreworCXJldHVybiBkYjF4X3JlZ2lzdGVyX25vcmZsYXNoKDggKiAxMDI0ICogMTAyNCwgNCwgMCk7Cit9CitkZXZpY2VfaW5pdGNhbGwocGIxMDAwX2RldmljZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjExMDAvTWFrZWZpbGUgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMTAwL01ha2VmaWxlCmluZGV4IGM1ODZkZDcuLjdlMzc1NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjExMDAvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTEwMC9NYWtlZmlsZQpAQCAtNSw0ICs1LDQgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBBbGNoZW15IFNlbWljb25kdWN0b3IgUGIxMTAwIGJvYXJkLgogIwogCi1vYmoteSA6PSBib2FyZF9zZXR1cC5vCitvYmoteSA6PSBib2FyZF9zZXR1cC5vIHBsYXRmb3JtLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjExMDAvYm9hcmRfc2V0dXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjExMDAvYm9hcmRfc2V0dXAuYwppbmRleCA2MTI2MzA4Li5jN2I0Y2FhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMTAwL2JvYXJkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTEwMC9ib2FyZF9zZXR1cC5jCkBAIC0yOSwxOSArMjksMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1wYjF4MDAvcGIxMTAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KIAogI2luY2x1ZGUgPHByb20uaD4KIAogCi1zdHJ1Y3QgYXUxeHh4X2lycW1hcCBfX2luaXRkYXRhIGF1MXh4eF9pcnFfbWFwW10gPSB7Ci0JeyBBVTEwMDBfR1BJT185LCAgSVJRRl9UUklHR0VSX0xPVywgMCB9LCAvKiBQQ01DSUEgQ2FyZCBGdWxseV9JbnNlcnRlZCMgKi8KLQl7IEFVMTAwMF9HUElPXzEwLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sIC8qIFBDTUNJQSBDYXJkIFNUU0NIRyMgKi8KLQl7IEFVMTAwMF9HUElPXzExLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sIC8qIFBDTUNJQSBDYXJkIElSUSMgKi8KLQl7IEFVMTAwMF9HUElPXzEzLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sIC8qIERDX0lSUSMgKi8KLX07Ci0KLQogY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCiB7CiAJcmV0dXJuICJBbGNoZW15IFBiMTEwMCI7CkBAIC00OSw0MyArNDEsMTUgQEAKIAogdm9pZCBib2FyZF9yZXNldCh2b2lkKQogewotCS8qIEhpdCBCQ1NSLlJTVF9WRERJW1NPRlRfUkVTRVRdICovCi0JYXVfd3JpdGVsKDB4MDAwMDAwMDAsIFBCMTEwMF9SU1RfVkRESSk7Ci19Ci0KLXZvaWQgX19pbml0IGJvYXJkX2luaXRfaXJxKHZvaWQpCi17Ci0JYXUxeHh4X3NldHVwX2lycW1hcChhdTF4eHhfaXJxX21hcCwgQVJSQVlfU0laRShhdTF4eHhfaXJxX21hcCkpOworCWJjc3Jfd3JpdGUoQkNTUl9TWVNURU0sIDApOwogfQogCiB2b2lkIF9faW5pdCBib2FyZF9zZXR1cCh2b2lkKQogewogCXZvbGF0aWxlIHZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKikweGFjMDAwMDAwVUw7Ci0JY2hhciAqYXJncHRyOwogCi0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0jaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUKLQlhcmdwdHIgPSBzdHJzdHIoYXJncHRyLCAiY29uc29sZT0iKTsKLQlpZiAoYXJncHRyID09IE5VTEwpIHsKLQkJYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JCXN0cmNhdChhcmdwdHIsICIgY29uc29sZT10dHlTMCwxMTUyMDAiKTsKLQl9Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19GQl9BVTExMDAKLQlhcmdwdHIgPSBzdHJzdHIoYXJncHRyLCAidmlkZW89Iik7Ci0JaWYgKGFyZ3B0ciA9PSBOVUxMKSB7Ci0JCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCQkvKiBkZWZhdWx0IHBhbmVsICovCi0JCS8qc3RyY2F0KGFyZ3B0ciwgIiB2aWRlbz1hdTExMDBmYjpwYW5lbDpTaGFycF8zMjB4MjQwXzE2Iik7Ki8KLQl9Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1NPVU5EX0FVMVgwMCkgJiYgIWRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JLyogYXUxMDAwIGRvZXMgbm90IHN1cHBvcnQgdnJhLCBhdTE1MDAgYW5kIGF1MTEwMCBkbyAqLwotCXN0cmNhdChhcmdwdHIsICIgYXUxMDAwX2F1ZGlvPXZyYSIpOwotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotI2VuZGlmCisJYmNzcl9pbml0KERCMTAwMF9CQ1NSX1BIWVNfQUREUiwKKwkJICBEQjEwMDBfQkNTUl9QSFlTX0FERFIgKyBEQjEwMDBfQkNTUl9IRVhMRURfT0ZTKTsKIAogCS8qIFNldCBBVVggY2xvY2sgdG8gMTIgTUh6ICogOCA9IDk2IE1IeiAqLwogCWF1X3dyaXRlbCg4LCBTWVNfQVVYUExMKTsKQEAgLTE1NSwzICsxMTksMTQgQEAKIAkJYXVfc3luYygpOwogCX0KIH0KKworc3RhdGljIGludCBfX2luaXQgcGIxMTAwX2luaXRfaXJxKHZvaWQpCit7CisJc2V0X2lycV90eXBlKEFVMTEwMF9HUElPOV9JTlQsICBJUlFGX1RSSUdHRVJfTE9XKTsgLyogUENDRCMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxMTAwX0dQSU8xMF9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBQQ1NUU0NIRyMgKi8KKwlzZXRfaXJxX3R5cGUoQVUxMTAwX0dQSU8xMV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBQQ0NhcmQjICovCisJc2V0X2lycV90eXBlKEFVMTEwMF9HUElPMTNfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgLyogRENfSVJRIyAqLworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKHBiMTEwMF9pbml0X2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMTAwL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMTAwL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM4ZGMyOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjExMDAvcGxhdGZvcm0uYwpAQCAtMCwwICsxLDUwIEBACisvKgorICogUGIxMTAwIGJvYXJkIHBsYXRmb3JtIGRldmljZSByZWdpc3RyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFudWVsIExhdXNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CisKKyNpbmNsdWRlICIuLi9wbGF0Zm9ybS5oIgorCitzdGF0aWMgaW50IF9faW5pdCBwYjExMDBfZGV2X2luaXQodm9pZCkKK3sKKwlpbnQgc3dhcHBlZDsKKworCS8qIFBDTUNJQS4gc2luZ2xlIHNvY2tldCwgaWRlbnRpY2FsIHRvIFBiMTUwMCAqLworCWRiMXhfcmVnaXN0ZXJfcGNtY2lhX3NvY2tldChQQ01DSUFfQVRUUl9QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9BVFRSX1BIWVNfQUREUiArIDB4MDAwNDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSICArIDB4MDAwNDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDAwMTAwMDAgLSAxLAorCQkJCSAgICBBVTExMDBfR1BJTzExX0lOVCwJIC8qIGNhcmQgKi8KKwkJCQkgICAgQVUxMTAwX0dQSU85X0lOVCwJIC8qIGluc2VydCAqLworCQkJCSAgICAvKkFVMTEwMF9HUElPMTBfSU5UKi8wLCAvKiBzdHNjaGcgKi8KKwkJCQkgICAgMCwJCQkgLyogZWplY3QgKi8KKwkJCQkgICAgMCk7CQkJIC8qIGlkICovCisKKwlzd2FwcGVkID0gYmNzcl9yZWFkKEJDU1JfU1RBVFVTKSAmICBCQ1NSX1NUQVRVU19EQjEwMDBfU1dBUEJPT1Q7CisJZGIxeF9yZWdpc3Rlcl9ub3JmbGFzaCg2NCAqIDEwMjQgKiAxMDI0LCA0LCBzd2FwcGVkKTsKKworCXJldHVybiAwOworfQorZGV2aWNlX2luaXRjYWxsKHBiMTEwMF9kZXZfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL01ha2VmaWxlIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9NYWtlZmlsZQppbmRleCBjOGMzYTk5Li4yZWE5YjAyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvTWFrZWZpbGUKQEAgLTIsNiArMiw2IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgQWxjaGVteSBTZW1pY29uZHVjdG9yIFBiMTIwMC9EQkF1MTIwMCBib2FyZHMuCiAjCiAKLW9iai15IDo9IGJvYXJkX3NldHVwLm8gaXJxbWFwLm8gcGxhdGZvcm0ubworb2JqLXkgOj0gYm9hcmRfc2V0dXAubyBwbGF0Zm9ybS5vCiAKIEVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL2JvYXJkX3NldHVwLmMKaW5kZXggOTRlNmI3ZS4uMzE4NDA2MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvYm9hcmRfc2V0dXAuYwpAQCAtMjUsMTEgKzI1LDIzIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCi0jaW5jbHVkZSA8cHJvbS5oPgotI2luY2x1ZGUgPGF1MXh4eC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgogCisjaWZkZWYgQ09ORklHX01JUFNfUEIxMjAwCisjaW5jbHVkZSA8YXNtL21hY2gtcGIxeDAwL3BiMTIwMC5oPgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUlQU19EQjEyMDAKKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvZGIxMjAwLmg+CisjZGVmaW5lIFBCMTIwMF9JTlRfQkVHSU4gREIxMjAwX0lOVF9CRUdJTgorI2RlZmluZSBQQjEyMDBfSU5UX0VORCBEQjEyMDBfSU5UX0VORAorI2VuZGlmCisKKyNpbmNsdWRlIDxwcm9tLmg+CiAKIGNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQogewpAQCAtMzgsMjUgKzUwLDE1IEBACiAKIHZvaWQgYm9hcmRfcmVzZXQodm9pZCkKIHsKLQliY3NyLT5yZXNldHMgPSAwOwotCWJjc3ItPnN5c3RlbSA9IDA7CisJYmNzcl93cml0ZShCQ1NSX1JFU0VUUywgMCk7CisJYmNzcl93cml0ZShCQ1NSX1NZU1RFTSwgMCk7CiB9CiAKIHZvaWQgX19pbml0IGJvYXJkX3NldHVwKHZvaWQpCiB7Ci0JY2hhciAqYXJncHRyOwotCi0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0jaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUKLQlhcmdwdHIgPSBzdHJzdHIoYXJncHRyLCAiY29uc29sZT0iKTsKLQlpZiAoYXJncHRyID09IE5VTEwpIHsKLQkJYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JCXN0cmNhdChhcmdwdHIsICIgY29uc29sZT10dHlTMCwxMTUyMDAiKTsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfRkJfQVUxMjAwCi0Jc3RyY2F0KGFyZ3B0ciwgIiB2aWRlbz1hdTEyMDBmYjpwYW5lbDpicyIpOwotI2VuZGlmCisJcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgUGIxMjAwIEJvYXJkXG4iKTsKKwliY3NyX2luaXQoUEIxMjAwX0JDU1JfUEhZU19BRERSLAorCQkgIFBCMTIwMF9CQ1NSX1BIWVNfQUREUiArIFBCMTIwMF9CQ1NSX0hFWExFRF9PRlMpOwogCiAjaWYgMAogCXsKQEAgLTgyLDcgKzg0LDcgQEAKIAkJdTMyIHBpbl9mdW5jOwogCiAJCS8qIFNlbGVjdCBTTUJ1cyBpbiBDUExEICovCi0JCWJjc3ItPnJlc2V0cyAmPSB+QkNTUl9SRVNFVFNfUENTME1VWDsKKwkJYmNzcl9tb2QoQkNTUl9SRVNFVFMsIEJDU1JfUkVTRVRTX1BTQzBNVVgsIDApOwogCiAJCXBpbl9mdW5jID0gYXVfcmVhZGwoU1lTX1BJTkZVTkMpOwogCQlhdV9zeW5jKCk7CkBAIC0xMTYsMzggKzExOCw1NCBAQAogCiAJLyoKIAkgKiBUaGUgUGIxMjAwIGRldmVsb3BtZW50IGJvYXJkIHVzZXMgZXh0ZXJuYWwgTVVYIGZvciBQU0MwIHRvCi0JICogc3VwcG9ydCBTTUIvU1BJLiBiY3NyLT5yZXNldHMgYml0IDEyOiAwPVNNQiAxPVNQSQorCSAqIHN1cHBvcnQgU01CL1NQSS4gYmNzcl9yZXNldHMgYml0IDEyOiAwPVNNQiAxPVNQSQogCSAqLwogI2lmZGVmIENPTkZJR19JMkNfQVUxNTUwCi0JYmNzci0+cmVzZXRzICY9IH5CQ1NSX1JFU0VUU19QQ1MwTVVYOworCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCBCQ1NSX1JFU0VUU19QU0MwTVVYLCAwKTsKICNlbmRpZgogCWF1X3N5bmMoKTsKLQotI2lmZGVmIENPTkZJR19NSVBTX1BCMTIwMAotCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IFBiMTIwMCBCb2FyZFxuIik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUlQU19EQjEyMDAKLQlwcmludGsoS0VSTl9JTkZPICJBTUQgQWxjaGVteSBEYjEyMDAgQm9hcmRcbiIpOwotI2VuZGlmCiB9CiAKK3N0YXRpYyBpbnQgX19pbml0IHBiMTIwMF9pbml0X2lycSh2b2lkKQoreworCS8qIFdlIGhhdmUgYSBwcm9ibGVtIHdpdGggQ1BMRCByZXYgMy4gKi8KKwlpZiAoQkNTUl9XSE9BTUlfQ1BMRChiY3NyX3JlYWQoQkNTUl9XSE9BTUkpKSA8PSAzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiUGIxMjAwIG11c3QgYmUgYXQgQ1BMRCByZXYgNC4gUGxlYXNlIGhhdmUgUGIxMjAwXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1cGRhdGVkIHRvIGxhdGVzdCByZXZpc2lvbi4gVGhpcyBzb2Z0d2FyZSB3aWxsXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJub3Qgd29yayBvbiBhbnl0aGluZyBsZXNzIHRoYW4gQ1BMRCByZXYgNC5cbiIpOworCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchISFcbiIpOworCQlwYW5pYygiR2FtZSBvdmVyLiAgWW91ciBzY29yZSBpcyAwLiIpOworCX0KKworCXNldF9pcnFfdHlwZShBVTEyMDBfR1BJTzdfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwliY3NyX2luaXRfaXJxKFBCMTIwMF9JTlRfQkVHSU4sIFBCMTIwMF9JTlRfRU5ELCBBVTEyMDBfR1BJTzdfSU5UKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChwYjEyMDBfaW5pdF9pcnEpOworCisKIGludCBib2FyZF9hdTEyMDBmYl9wYW5lbCh2b2lkKQogewotCUJDU1IgKmJjc3IgPSAoQkNTUiAqKUJDU1JfS1NFRzFfQUREUjsKLQlpbnQgcDsKLQotCXAgPSBiY3NyLT5zd2l0Y2hlczsKLQlwID4+PSA4OwotCXAgJj0gMHgwRjsKLQlyZXR1cm4gcDsKKwlyZXR1cm4gKGJjc3JfcmVhZChCQ1NSX1NXSVRDSEVTKSA+PiA4KSAmIDB4MGY7CiB9CiAKIGludCBib2FyZF9hdTEyMDBmYl9wYW5lbF9pbml0KHZvaWQpCiB7CiAJLyogQXBwbHkgcG93ZXIgKi8KLQlCQ1NSICpiY3NyID0gKEJDU1IgKilCQ1NSX0tTRUcxX0FERFI7Ci0KLQliY3NyLT5ib2FyZCB8PSBCQ1NSX0JPQVJEX0xDRFZFRSB8IEJDU1JfQk9BUkRfTENEVkREIHwgQkNTUl9CT0FSRF9MQ0RCTDsKKwliY3NyX21vZChCQ1NSX0JPQVJELCAwLCBCQ1NSX0JPQVJEX0xDRFZFRSB8IEJDU1JfQk9BUkRfTENEVkREIHwKKwkJCQlCQ1NSX0JPQVJEX0xDREJMKTsKIAkvKiBwcmludGsoS0VSTl9ERUJVRyAiYm9hcmRfYXUxMjAwZmJfcGFuZWxfaW5pdCgpXG4iKTsgKi8KIAlyZXR1cm4gMDsKIH0KQEAgLTE1NSwxMCArMTczLDggQEAKIGludCBib2FyZF9hdTEyMDBmYl9wYW5lbF9zaHV0ZG93bih2b2lkKQogewogCS8qIFJlbW92ZSBwb3dlciAqLwotCUJDU1IgKmJjc3IgPSAoQkNTUiAqKUJDU1JfS1NFRzFfQUREUjsKLQotCWJjc3ItPmJvYXJkICY9IH4oQkNTUl9CT0FSRF9MQ0RWRUUgfCBCQ1NSX0JPQVJEX0xDRFZERCB8Ci0JCQkgQkNTUl9CT0FSRF9MQ0RCTCk7CisJYmNzcl9tb2QoQkNTUl9CT0FSRCwgQkNTUl9CT0FSRF9MQ0RWRUUgfCBCQ1NSX0JPQVJEX0xDRFZERCB8CisJCQkgICAgIEJDU1JfQk9BUkRfTENEQkwsIDApOwogCS8qIHByaW50ayhLRVJOX0RFQlVHICJib2FyZF9hdTEyMDBmYl9wYW5lbF9zaHV0ZG93bigpXG4iKTsgKi8KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvaXJxbWFwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL2lycW1hcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTQ3NDk4Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvaXJxbWFwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICoJQXUxeHh4IGlycSBtYXAgdGFibGUKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZgkgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUJTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQJICBgYEFTCUlTJycgQU5EICAgQU5ZCUVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsCSAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgotICogIE5PCUVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFCSBMSUFCTEUgRk9SIEFOWQkgIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiAgTk9UIExJTUlURUQJICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMJT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsCU9SIFBST0ZJVFM7IE9SCUJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4JIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KLQotI2lmZGVmIENPTkZJR19NSVBTX1BCMTIwMAotI2luY2x1ZGUgPGFzbS9tYWNoLXBiMXgwMC9wYjEyMDAuaD4KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfREIxMjAwCi0jaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2RiMTIwMC5oPgotI2RlZmluZSBQQjEyMDBfSU5UX0JFR0lOIERCMTIwMF9JTlRfQkVHSU4KLSNkZWZpbmUgUEIxMjAwX0lOVF9FTkQgREIxMjAwX0lOVF9FTkQKLSNlbmRpZgotCi1zdHJ1Y3QgYXUxeHh4X2lycW1hcCBfX2luaXRkYXRhIGF1MXh4eF9pcnFfbWFwW10gPSB7Ci0JLyogVGhpcyBpcyBleHRlcm5hbCBpbnRlcnJ1cHQgY2FzY2FkZSAqLwotCXsgQVUxMDAwX0dQSU9fNywgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotfTsKLQotCi0vKgotICogU3VwcG9ydCBmb3IgRXh0ZXJuYWwgaW50ZXJydXB0cyBvbiB0aGUgUGIxMjAwIERldmVsb3BtZW50IHBsYXRmb3JtLgotICovCi0KLXN0YXRpYyB2b2lkIHBiMTIwMF9jYXNjYWRlX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkKQotewotCXVuc2lnbmVkIHNob3J0IGJpc3IgPSBiY3NyLT5pbnRfc3RhdHVzOwotCi0JZm9yICggOyBiaXNyOyBiaXNyICY9IGJpc3IgLSAxKQotCQlnZW5lcmljX2hhbmRsZV9pcnEoUEIxMjAwX0lOVF9CRUdJTiArIF9fZmZzKGJpc3IpKTsKLX0KLQotLyogTk9URTogYm90aCB0aGUgZW5hYmxlIGFuZCBtYXNrIGJpdHMgbXVzdCBiZSBjbGVhcmVkLCBvdGhlcndpc2UgdGhlCi0gKiBDUExEIGdlbmVyYXRlcyB0b25zIG9mIHNwdXJpb3VzIGludGVycnVwdHMgKGF0IGxlYXN0IG9uIHRoZSBEQjEyMDApLgotICovCi1zdGF0aWMgdm9pZCBwYjEyMDBfbWFza19pcnEodW5zaWduZWQgaW50IGlycV9ucikKLXsKLQliY3NyLT5pbnRjbHJfbWFzayA9IDEgPDwgKGlycV9uciAtIFBCMTIwMF9JTlRfQkVHSU4pOwotCWJjc3ItPmludGNsciA9IDEgPDwgKGlycV9uciAtIFBCMTIwMF9JTlRfQkVHSU4pOwotCWF1X3N5bmMoKTsKLX0KLQotc3RhdGljIHZvaWQgcGIxMjAwX21hc2thY2tfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpCi17Ci0JYmNzci0+aW50Y2xyX21hc2sgPSAxIDw8IChpcnFfbnIgLSBQQjEyMDBfSU5UX0JFR0lOKTsKLQliY3NyLT5pbnRjbHIgPSAxIDw8IChpcnFfbnIgLSBQQjEyMDBfSU5UX0JFR0lOKTsKLQliY3NyLT5pbnRfc3RhdHVzID0gMSA8PCAoaXJxX25yIC0gUEIxMjAwX0lOVF9CRUdJTik7CS8qIGFjayAqLwotCWF1X3N5bmMoKTsKLX0KLQotc3RhdGljIHZvaWQgcGIxMjAwX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycV9ucikKLXsKLQliY3NyLT5pbnRzZXQgPSAxIDw8IChpcnFfbnIgLSBQQjEyMDBfSU5UX0JFR0lOKTsKLQliY3NyLT5pbnRzZXRfbWFzayA9IDEgPDwgKGlycV9uciAtIFBCMTIwMF9JTlRfQkVHSU4pOwotCWF1X3N5bmMoKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBwYjEyMDBfY3BsZF9pcnFfdHlwZSA9IHsKLSNpZmRlZiBDT05GSUdfTUlQU19QQjEyMDAKLQkubmFtZSA9ICJQYjEyMDAgRXh0IiwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NSVBTX0RCMTIwMAotCS5uYW1lID0gIkRiMTIwMCBFeHQiLAotI2VuZGlmCi0JLm1hc2sJCT0gcGIxMjAwX21hc2tfaXJxLAotCS5tYXNrX2Fjawk9IHBiMTIwMF9tYXNrYWNrX2lycSwKLQkudW5tYXNrCQk9IHBiMTIwMF91bm1hc2tfaXJxLAotfTsKLQotdm9pZCBfX2luaXQgYm9hcmRfaW5pdF9pcnEodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgaXJxOwotCi0JYXUxeHh4X3NldHVwX2lycW1hcChhdTF4eHhfaXJxX21hcCwgQVJSQVlfU0laRShhdTF4eHhfaXJxX21hcCkpOwotCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxMjAwCi0JLyogV2UgaGF2ZSBhIHByb2JsZW0gd2l0aCBDUExEIHJldiAzLiAqLwotCWlmICgoKGJjc3ItPndob2FtaSAmIEJDU1JfV0hPQU1JX0NQTEQpID4+IDQpIDw9IDMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HISEhXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJQYjEyMDAgbXVzdCBiZSBhdCBDUExEIHJldiA0LiBQbGVhc2UgaGF2ZSBQYjEyMDBcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgInVwZGF0ZWQgdG8gbGF0ZXN0IHJldmlzaW9uLiBUaGlzIHNvZnR3YXJlIHdpbGxcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIm5vdCB3b3JrIG9uIGFueXRoaW5nIGxlc3MgdGhhbiBDUExEIHJldiA0LlxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyEhIVxuIik7Ci0JCXBhbmljKCJHYW1lIG92ZXIuICBZb3VyIHNjb3JlIGlzIDAuIik7Ci0JfQotI2VuZGlmCi0JLyogbWFzayAmIGRpc2FibGUgJiBhY2sgYWxsICovCi0JYmNzci0+aW50Y2xyX21hc2sgPSAweGZmZmY7Ci0JYmNzci0+aW50Y2xyID0gMHhmZmZmOwotCWJjc3ItPmludF9zdGF0dXMgPSAweGZmZmY7Ci0JYXVfc3luYygpOwotCi0JZm9yIChpcnEgPSBQQjEyMDBfSU5UX0JFR0lOOyBpcnEgPD0gUEIxMjAwX0lOVF9FTkQ7IGlycSsrKQotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZwYjEyMDBfY3BsZF9pcnFfdHlwZSwKLQkJCQkJIGhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOwotCi0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoQVUxMDAwX0dQSU9fNywgcGIxMjAwX2Nhc2NhZGVfaGFuZGxlcik7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL3BsYXRmb3JtLmMKaW5kZXggYjkzZGZmNC4uM2VmMmRjZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvcGxhdGZvcm0uYwpAQCAtMjYsMjcgKzI2LDMwIEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTEwMF9tbWMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgorCisjaW5jbHVkZSAiLi4vcGxhdGZvcm0uaCIKIAogc3RhdGljIGludCBtbWNfYWN0aXZpdHk7CiAKIHN0YXRpYyB2b2lkIHBiMTIwMG1tYzBfc2V0X3Bvd2VyKHZvaWQgKm1tY19ob3N0LCBpbnQgc3RhdGUpCiB7CiAJaWYgKHN0YXRlKQotCQliY3NyLT5ib2FyZCB8PSBCQ1NSX0JPQVJEX1NEMFBXUjsKKwkJYmNzcl9tb2QoQkNTUl9CT0FSRCwgMCwgQkNTUl9CT0FSRF9TRDBQV1IpOwogCWVsc2UKLQkJYmNzci0+Ym9hcmQgJj0gfkJDU1JfQk9BUkRfU0QwUFdSOworCQliY3NyX21vZChCQ1NSX0JPQVJELCBCQ1NSX0JPQVJEX1NEMFBXUiwgMCk7CiAKLQlhdV9zeW5jX2RlbGF5KDEpOworCW1zbGVlcCgxKTsKIH0KIAogc3RhdGljIGludCBwYjEyMDBtbWMwX2NhcmRfcmVhZG9ubHkodm9pZCAqbW1jX2hvc3QpCiB7Ci0JcmV0dXJuIChiY3NyLT5zdGF0dXMgJiBCQ1NSX1NUQVRVU19TRDBXUCkgPyAxIDogMDsKKwlyZXR1cm4gKGJjc3JfcmVhZChCQ1NSX1NUQVRVUykgJiBCQ1NSX1NUQVRVU19TRDBXUCkgPyAxIDogMDsKIH0KIAogc3RhdGljIGludCBwYjEyMDBtbWMwX2NhcmRfaW5zZXJ0ZWQodm9pZCAqbW1jX2hvc3QpCiB7Ci0JcmV0dXJuIChiY3NyLT5zaWdfc3RhdHVzICYgQkNTUl9JTlRfU0QwSU5TRVJUKSA/IDEgOiAwOworCXJldHVybiAoYmNzcl9yZWFkKEJDU1JfU0lHU1RBVCkgJiBCQ1NSX0lOVF9TRDBJTlNFUlQpID8gMSA6IDA7CiB9CiAKIHN0YXRpYyB2b2lkIHBiMTIwMF9tbWNsZWRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZCwKQEAgLTU0LDEwICs1NywxMCBAQAogewogCWlmIChicmlnaHRuZXNzICE9IExFRF9PRkYpIHsKIAkJaWYgKCsrbW1jX2FjdGl2aXR5ID09IDEpCi0JCQliY3NyLT5kaXNrX2xlZHMgJj0gfigxIDw8IDgpOworCQkJYmNzcl9tb2QoQkNTUl9MRURTLCBCQ1NSX0xFRFNfTEVEMCwgMCk7CiAJfSBlbHNlIHsKIAkJaWYgKC0tbW1jX2FjdGl2aXR5ID09IDApCi0JCQliY3NyLT5kaXNrX2xlZHMgfD0gKDEgPDwgOCk7CisJCQliY3NyX21vZChCQ1NSX0xFRFMsIDAsIEJDU1JfTEVEU19MRUQwKTsKIAl9CiB9CiAKQEAgLTY1LDI3ICs2OCwyNSBAQAogCS5icmlnaHRuZXNzX3NldAk9IHBiMTIwMF9tbWNsZWRfc2V0LAogfTsKIAotI2lmbmRlZiBDT05GSUdfTUlQU19EQjEyMDAKIHN0YXRpYyB2b2lkIHBiMTIwMG1tYzFfc2V0X3Bvd2VyKHZvaWQgKm1tY19ob3N0LCBpbnQgc3RhdGUpCiB7CiAJaWYgKHN0YXRlKQotCQliY3NyLT5ib2FyZCB8PSBCQ1NSX0JPQVJEX1NEMVBXUjsKKwkJYmNzcl9tb2QoQkNTUl9CT0FSRCwgMCwgQkNTUl9CT0FSRF9TRDFQV1IpOwogCWVsc2UKLQkJYmNzci0+Ym9hcmQgJj0gfkJDU1JfQk9BUkRfU0QxUFdSOworCQliY3NyX21vZChCQ1NSX0JPQVJELCBCQ1NSX0JPQVJEX1NEMVBXUiwgMCk7CiAKLQlhdV9zeW5jX2RlbGF5KDEpOworCW1zbGVlcCgxKTsKIH0KIAogc3RhdGljIGludCBwYjEyMDBtbWMxX2NhcmRfcmVhZG9ubHkodm9pZCAqbW1jX2hvc3QpCiB7Ci0JcmV0dXJuIChiY3NyLT5zdGF0dXMgJiBCQ1NSX1NUQVRVU19TRDFXUCkgPyAxIDogMDsKKwlyZXR1cm4gKGJjc3JfcmVhZChCQ1NSX1NUQVRVUykgJiBCQ1NSX1NUQVRVU19TRDFXUCkgPyAxIDogMDsKIH0KIAogc3RhdGljIGludCBwYjEyMDBtbWMxX2NhcmRfaW5zZXJ0ZWQodm9pZCAqbW1jX2hvc3QpCiB7Ci0JcmV0dXJuIChiY3NyLT5zaWdfc3RhdHVzICYgQkNTUl9JTlRfU0QxSU5TRVJUKSA/IDEgOiAwOworCXJldHVybiAoYmNzcl9yZWFkKEJDU1JfU0lHU1RBVCkgJiBCQ1NSX0lOVF9TRDFJTlNFUlQpID8gMSA6IDA7CiB9Ci0jZW5kaWYKIAogY29uc3Qgc3RydWN0IGF1MXhtbWNfcGxhdGZvcm1fZGF0YSBhdTF4bW1jX3BsYXRkYXRhWzJdID0gewogCVswXSA9IHsKQEAgLTk1LDcgKzk2LDYgQEAKIAkJLmNkX3NldHVwCT0gTlVMTCwJCS8qIHVzZSBwb2xsLXRpbWVyIGluIGRyaXZlciAqLwogCQkubGVkCQk9ICZwYjEyMDBtbWNfbGVkLAogCX0sCi0jaWZuZGVmIENPTkZJR19NSVBTX0RCMTIwMAogCVsxXSA9IHsKIAkJLnNldF9wb3dlcgk9IHBiMTIwMG1tYzFfc2V0X3Bvd2VyLAogCQkuY2FyZF9pbnNlcnRlZAk9IHBiMTIwMG1tYzFfY2FyZF9pbnNlcnRlZCwKQEAgLTEwMyw3ICsxMDMsNiBAQAogCQkuY2Rfc2V0dXAJPSBOVUxMLAkJLyogdXNlIHBvbGwtdGltZXIgaW4gZHJpdmVyICovCiAJCS5sZWQJCT0gJnBiMTIwMG1tY19sZWQsCiAJfSwKLSNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpZGVfcmVzb3VyY2VzW10gPSB7CkBAIC0xNjksOCArMTY4LDM2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGJvYXJkX3JlZ2lzdGVyX2RldmljZXModm9pZCkKIHsKKwlpbnQgc3dhcHBlZDsKKworCWRiMXhfcmVnaXN0ZXJfcGNtY2lhX3NvY2tldChQQ01DSUFfQVRUUl9QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9BVFRSX1BIWVNfQUREUiArIDB4MDAwNDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSICArIDB4MDAwNDAwMDAwIC0gMSwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX0lPX1BIWVNfQUREUiAgICsgMHgwMDAwMTAwMDAgLSAxLAorCQkJCSAgICBQQjEyMDBfUEMwX0lOVCwKKwkJCQkgICAgUEIxMjAwX1BDMF9JTlNFUlRfSU5ULAorCQkJCSAgICAvKlBCMTIwMF9QQzBfU1RTQ0hHX0lOVCovMCwKKwkJCQkgICAgUEIxMjAwX1BDMF9FSkVDVF9JTlQsCisJCQkJICAgIDApOworCisJZGIxeF9yZWdpc3Rlcl9wY21jaWFfc29ja2V0KFBDTUNJQV9BVFRSX1BIWVNfQUREUiArIDB4MDA4MDAwMDAwLAorCQkJCSAgICBQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwODQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSICArIDB4MDA4MDAwMDAwLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwODQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDA4MDAwMDAwLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSICAgKyAweDAwODAxMDAwMCAtIDEsCisJCQkJICAgIFBCMTIwMF9QQzFfSU5ULAorCQkJCSAgICBQQjEyMDBfUEMxX0lOU0VSVF9JTlQsCisJCQkJICAgIC8qUEIxMjAwX1BDMV9TVFNDSEdfSU5UKi8wLAorCQkJCSAgICBQQjEyMDBfUEMxX0VKRUNUX0lOVCwKKwkJCQkgICAgMSk7CisKKwlzd2FwcGVkID0gYmNzcl9yZWFkKEJDU1JfU1RBVFVTKSAmICBCQ1NSX1NUQVRVU19EQjEyMDBfU1dBUEJPT1Q7CisJZGIxeF9yZWdpc3Rlcl9ub3JmbGFzaCgxMjggKiAxMDI0ICogMTAyNCwgMiwgc3dhcHBlZCk7CisKIAlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoYm9hcmRfcGxhdGZvcm1fZGV2aWNlcywKIAkJCQkgICAgQVJSQVlfU0laRShib2FyZF9wbGF0Zm9ybV9kZXZpY2VzKSk7CiB9Ci0KLWFyY2hfaW5pdGNhbGwoYm9hcmRfcmVnaXN0ZXJfZGV2aWNlcyk7CitkZXZpY2VfaW5pdGNhbGwoYm9hcmRfcmVnaXN0ZXJfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTAwL01ha2VmaWxlIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTUwMC9NYWtlZmlsZQppbmRleCAxNzNiNDE5Li5lODNiMTUxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTAwL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvTWFrZWZpbGUKQEAgLTUsNCArNSw0IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgQWxjaGVteSBTZW1pY29uZHVjdG9yIFBiMTUwMCBib2FyZC4KICMKIAotb2JqLXkgOj0gYm9hcmRfc2V0dXAubworb2JqLXkgOj0gYm9hcmRfc2V0dXAubyBwbGF0Zm9ybS5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTAwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTAwL2JvYXJkX3NldHVwLmMKaW5kZXggZDdhNTY1Ni4uZmE5NzcwYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTUwMC9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvYm9hcmRfc2V0dXAuYwpAQCAtMjksMjIgKzI5LDE0IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtcGIxeDAwL3BiMTUwMC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CiAKICNpbmNsdWRlIDxwcm9tLmg+CiAKIAogY2hhciBpcnFfdGFiX2FsY2hlbXlbXVs1XSBfX2luaXRkYXRhID0gewotCVsxMl0gPSB7IC0xLCBJTlRBLCBJTlRYLCBJTlRYLCBJTlRYIH0sICAgLyogSURTRUwgMTIgLSBIUFQzNzAJKi8KLQlbMTNdID0geyAtMSwgSU5UQSwgSU5UQiwgSU5UQywgSU5URCB9LCAgIC8qIElEU0VMIDEzIC0gUENJIHNsb3QgKi8KLX07Ci0KLXN0cnVjdCBhdTF4eHhfaXJxbWFwIF9faW5pdGRhdGEgYXUxeHh4X2lycV9tYXBbXSA9IHsKLQl7IEFVMTUwMF9HUElPXzIwNCwgSVJRRl9UUklHR0VSX0hJR0gsIDAgfSwKLQl7IEFVMTUwMF9HUElPXzIwMSwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotCXsgQVUxNTAwX0dQSU9fMjAyLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0JeyBBVTE1MDBfR1BJT18yMDMsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLQl7IEFVMTUwMF9HUElPXzIwNSwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAorCVsxMl0gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEEsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSwgICAvKiBJRFNFTCAxMiAtIEhQVDM3MAkqLworCVsxM10gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEEsIEFVMTUwMF9QQ0lfSU5UQiwgQVUxNTAwX1BDSV9JTlRDLCBBVTE1MDBfUENJX0lOVEQgfSwgICAvKiBJRFNFTCAxMyAtIFBDSSBzbG90ICovCiB9OwogCiAKQEAgLTU1LDM1ICs0NywxNiBAQAogCiB2b2lkIGJvYXJkX3Jlc2V0KHZvaWQpCiB7Ci0JLyogSGl0IEJDU1IuUlNUX1ZERElbU09GVF9SRVNFVF0gKi8KLQlhdV93cml0ZWwoMHgwMDAwMDAwMCwgUEIxNTAwX1JTVF9WRERJKTsKLX0KLQotdm9pZCBfX2luaXQgYm9hcmRfaW5pdF9pcnEodm9pZCkKLXsKLQlhdTF4eHhfc2V0dXBfaXJxbWFwKGF1MXh4eF9pcnFfbWFwLCBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKSk7CisJYmNzcl93cml0ZShCQ1NSX1NZU1RFTSwgMCk7CiB9CiAKIHZvaWQgX19pbml0IGJvYXJkX3NldHVwKHZvaWQpCiB7CiAJdTMyIHBpbl9mdW5jOwogCXUzMiBzeXNfZnJlcWN0cmwsIHN5c19jbGtzcmM7Ci0JY2hhciAqYXJncHRyOwogCi0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0jaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUKLQlhcmdwdHIgPSBzdHJzdHIoYXJncHRyLCAiY29uc29sZT0iKTsKLQlpZiAoYXJncHRyID09IE5VTEwpIHsKLQkJYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JCXN0cmNhdChhcmdwdHIsICIgY29uc29sZT10dHlTMCwxMTUyMDAiKTsKLQl9Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1NPVU5EX0FVMVgwMCkgJiYgIWRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JLyogYXUxMDAwIGRvZXMgbm90IHN1cHBvcnQgdnJhLCBhdTE1MDAgYW5kIGF1MTEwMCBkbyAqLwotCXN0cmNhdChhcmdwdHIsICIgYXUxMDAwX2F1ZGlvPXZyYSIpOwotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotI2VuZGlmCisJYmNzcl9pbml0KERCMTAwMF9CQ1NSX1BIWVNfQUREUiwKKwkJICBEQjEwMDBfQkNTUl9QSFlTX0FERFIgKyBEQjEwMDBfQkNTUl9IRVhMRURfT0ZTKTsKIAogCXN5c19jbGtzcmMgPSBzeXNfZnJlcWN0cmwgPSBwaW5fZnVuYyA9IDA7CiAJLyogU2V0IEFVWCBjbG9jayB0byAxMiBNSHogKiA4ID0gOTYgTUh6ICovCkBAIC0xNjMsMyArMTM2LDE4IEBACiAJCWF1X3N5bmMoKTsKIAl9CiB9CisKK3N0YXRpYyBpbnQgX19pbml0IHBiMTUwMF9pbml0X2lycSh2b2lkKQoreworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzlfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgICAvKiBDRDAjICovCisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMTBfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgIC8qIENBUkQwICovCisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMTFfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsgIC8qIFNUU0NIRzAjICovCisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjA0X0lOVCwgSVJRRl9UUklHR0VSX0hJR0gpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwMV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwMl9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwM19JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwNV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKHBiMTUwMF9pbml0X2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTAwL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTAwL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0M2JjNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvcGxhdGZvcm0uYwpAQCAtMCwwICsxLDQ5IEBACisvKgorICogUGIxNTAwIGJvYXJkIHBsYXRmb3JtIGRldmljZSByZWdpc3RyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFudWVsIExhdXNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgorCisjaW5jbHVkZSAiLi4vcGxhdGZvcm0uaCIKKworc3RhdGljIGludCBfX2luaXQgcGIxNTAwX2Rldl9pbml0KHZvaWQpCit7CisJaW50IHN3YXBwZWQ7CisKKwkvKiBQQ01DSUEuIHNpbmdsZSBzb2NrZXQsIGlkZW50aWNhbCB0byBQYjE1MDAgKi8KKwlkYjF4X3JlZ2lzdGVyX3BjbWNpYV9zb2NrZXQoUENNQ0lBX0FUVFJfUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwMDQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDAwMDEwMDAwIC0gMSwKKwkJCQkgICAgQVUxNTAwX0dQSU8xMV9JTlQsCSAvKiBjYXJkICovCisJCQkJICAgIEFVMTUwMF9HUElPOV9JTlQsCSAvKiBpbnNlcnQgKi8KKwkJCQkgICAgLypBVTE1MDBfR1BJTzEwX0lOVCovMCwgLyogc3RzY2hnICovCisJCQkJICAgIDAsCQkJIC8qIGVqZWN0ICovCisJCQkJICAgIDApOwkJCSAvKiBpZCAqLworCisJc3dhcHBlZCA9IGJjc3JfcmVhZChCQ1NSX1NUQVRVUykgJiAgQkNTUl9TVEFUVVNfREIxMDAwX1NXQVBCT09UOworCWRiMXhfcmVnaXN0ZXJfbm9yZmxhc2goNjQgKiAxMDI0ICogMTAyNCwgNCwgc3dhcHBlZCk7CisKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChwYjE1MDBfZGV2X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTU1MC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1NTAvTWFrZWZpbGUKaW5kZXggY2ZmOTViYy4uOTY2MWI2ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTU1MC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTUwL01ha2VmaWxlCkBAIC01LDQgKzUsNCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIEFsY2hlbXkgU2VtaWNvbmR1Y3RvciBQYjE1NTAgYm9hcmQuCiAjCiAKLW9iai15IDo9IGJvYXJkX3NldHVwLm8KK29iai15IDo9IGJvYXJkX3NldHVwLm8gcGxhdGZvcm0ubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTU1MC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTU1MC9ib2FyZF9zZXR1cC5jCmluZGV4IGI2ZTllN2QuLjFlOGZiM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1NTAvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTUwL2JvYXJkX3NldHVwLmMKQEAgLTMyLDE4ICszMiwxNSBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXBiMXgwMC9wYjE1NTAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9ncGlvLmg+CiAKICNpbmNsdWRlIDxwcm9tLmg+CiAKIAogY2hhciBpcnFfdGFiX2FsY2hlbXlbXVs1XSBfX2luaXRkYXRhID0gewotCVsxMl0gPSB7IC0xLCBJTlRCLCBJTlRDLCBJTlRELCBJTlRBIH0sIC8qIElEU0VMIDEyIC0gUENJIHNsb3QgMiAobGVmdCkgICovCi0JWzEzXSA9IHsgLTEsIElOVEEsIElOVEIsIElOVEMsIElOVEQgfSwgLyogSURTRUwgMTMgLSBQQ0kgc2xvdCAxIChyaWdodCkgKi8KLX07Ci0KLXN0cnVjdCBhdTF4eHhfaXJxbWFwIF9faW5pdGRhdGEgYXUxeHh4X2lycV9tYXBbXSA9IHsKLQl7IEFVMTAwMF9HUElPXzAsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLQl7IEFVMTAwMF9HUElPXzEsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKKwlbMTJdID0geyAtMSwgQVUxNTUwX1BDSV9JTlRCLCBBVTE1NTBfUENJX0lOVEMsIEFVMTU1MF9QQ0lfSU5URCwgQVUxNTUwX1BDSV9JTlRBIH0sIC8qIElEU0VMIDEyIC0gUENJIHNsb3QgMiAobGVmdCkgICovCisJWzEzXSA9IHsgLTEsIEFVMTU1MF9QQ0lfSU5UQSwgQVUxNTUwX1BDSV9JTlRCLCBBVTE1NTBfUENJX0lOVEMsIEFVMTU1MF9QQ0lfSU5URCB9LCAvKiBJRFNFTCAxMyAtIFBDSSBzbG90IDEgKHJpZ2h0KSAqLwogfTsKIAogY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCkBAIC01MywyOCArNTAsMTcgQEAKIAogdm9pZCBib2FyZF9yZXNldCh2b2lkKQogewotCS8qIEhpdCBCQ1NSLlNZU1RFTVtSRVNFVF0gKi8KLQlhdV93cml0ZXcoYXVfcmVhZHcoMHhBRjAwMDAxQykgJiB+QkNTUl9TWVNURU1fUkVTRVQsIDB4QUYwMDAwMUMpOwotfQotCi12b2lkIF9faW5pdCBib2FyZF9pbml0X2lycSh2b2lkKQotewotCWF1MXh4eF9zZXR1cF9pcnFtYXAoYXUxeHh4X2lycV9tYXAsIEFSUkFZX1NJWkUoYXUxeHh4X2lycV9tYXApKTsKKwliY3NyX3dyaXRlKEJDU1JfU1lTVEVNLCAwKTsKIH0KIAogdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKIHsKIAl1MzIgcGluX2Z1bmM7CiAKLSNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQotCWNoYXIgKmFyZ3B0cjsKLQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQlhcmdwdHIgPSBzdHJzdHIoYXJncHRyLCAiY29uc29sZT0iKTsKLQlpZiAoYXJncHRyID09IE5VTEwpIHsKLQkJYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JCXN0cmNhdChhcmdwdHIsICIgY29uc29sZT10dHlTMCwxMTUyMDAiKTsKLQl9Ci0jZW5kaWYKKwliY3NyX2luaXQoUEIxNTUwX0JDU1JfUEhZU19BRERSLAorCQkgIFBCMTU1MF9CQ1NSX1BIWVNfQUREUiArIFBCMTU1MF9CQ1NSX0hFWExFRF9PRlMpOworCisJYWxjaGVteV9ncGlvMl9lbmFibGUoKTsKIAogCS8qCiAJICogRW5hYmxlIFBTQzEgU1lOQyBmb3IgQUMnOTcuICBOb3JtYWx5IGRvbmUgaW4gYXVkaW8gZHJpdmVyLApAQCAtODUsOCArNzEsMjEgQEAKIAlwaW5fZnVuYyB8PSBTWVNfUEZfTVVTVF9CRV9TRVQgfCBTWVNfUEZfUFNDMV9TMTsKIAlhdV93cml0ZWwocGluX2Z1bmMsIFNZU19QSU5GVU5DKTsKIAotCWF1X3dyaXRlbCgwLCAodTMyKWJjc3IgfCAweDEwKTsgLyogdHVybiBvZmYgUENNQ0lBIHBvd2VyICovCi0JYXVfc3luYygpOworCWJjc3Jfd3JpdGUoQkNTUl9QQ01DSUEsIDApOwkvKiB0dXJuIG9mZiBQQ01DSUEgcG93ZXIgKi8KIAogCXByaW50ayhLRVJOX0lORk8gIkFNRCBBbGNoZW15IFBiMTU1MCBCb2FyZFxuIik7CiB9CisKK3N0YXRpYyBpbnQgX19pbml0IHBiMTU1MF9pbml0X2lycSh2b2lkKQoreworCXNldF9pcnFfdHlwZShBVTE1NTBfR1BJTzBfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTUwX0dQSU8xX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTU1MF9HUElPMjAxXzIwNV9JTlQsIElSUUZfVFJJR0dFUl9ISUdIKTsKKworCS8qIGVuYWJsZSBib3RoIFBDTUNJQSBjYXJkIGlycXMgaW4gdGhlIHNoYXJlZCBsaW5lICovCisJYWxjaGVteV9ncGlvMl9lbmFibGVfaW50KDIwMSk7CisJYWxjaGVteV9ncGlvMl9lbmFibGVfaW50KDIwMik7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwocGIxNTUwX2luaXRfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1NTAvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1NTAvcGxhdGZvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzE1MGQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTU1MC9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBQYjE1NTAgYm9hcmQgcGxhdGZvcm0gZGV2aWNlIHJlZ2lzdHJhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYW51ZWwgTGF1c3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtcGIxeDAwL3BiMTU1MC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWRiMXgwMC9iY3NyLmg+CisKKyNpbmNsdWRlICIuLi9wbGF0Zm9ybS5oIgorCitzdGF0aWMgaW50IF9faW5pdCBwYjE1NTBfZGV2X2luaXQodm9pZCkKK3sKKwlpbnQgc3dhcHBlZDsKKworCS8qIFBiMTU1MCwgbGlrZSBhbGwgb3RoZXJzLCBhbHNvIGhhcyBzdGF0dXNjaGFuZ2UgaXJxczsgaG93ZXZlciB0aGV5J3JlCisJKiB3aXJlZCB1cCBvbiBvbmUgb2YgdGhlIEF1MTU1MCdzIHNoYXJlZCBHUElPMjAxXzIwNSBsaW5lLCB3aGljaCBhbHNvCisJKiBzZXJ2aWNlcyB0aGUgUENNQ0lBIGNhcmQgaW50ZXJydXB0cy4gIFNvIHdlIGlnbm9yZSBzdGF0dXNjaGFuZ2UgYW5kCisJKiB1c2UgdGhlIEdQSU8yMDFfMjA1IGV4Y2x1c2l2ZWx5IGZvciBjYXJkIGludGVycnVwdHMsIHNpbmNlIGEpIHBjbWNpYQorCSogZHJpdmVycyBhcmUgdXNlZCB0byBzaGFyZWQgaXJxcyBhbmQgYikgc3RhdHVzY2hhbmdlIGlzbid0IHJlYWxseSB1c2UtCisJKiBmdWwgYW55d2F5LgorCSovCisJZGIxeF9yZWdpc3Rlcl9wY21jaWFfc29ja2V0KFBDTUNJQV9BVFRSX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDA0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiwKKwkJCQkgICAgUENNQ0lBX01FTV9QSFlTX0FERFIgICsgMHgwMDA0MDAwMDAgLSAxLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSICAgKyAweDAwMDAxMDAwMCAtIDEsCisJCQkJICAgIEFVMTU1MF9HUElPMjAxXzIwNV9JTlQsCisJCQkJICAgIEFVMTU1MF9HUElPMF9JTlQsCisJCQkJICAgIDAsCisJCQkJICAgIDAsCisJCQkJICAgIDApOworCisJZGIxeF9yZWdpc3Rlcl9wY21jaWFfc29ja2V0KFBDTUNJQV9BVFRSX1BIWVNfQUREUiArIDB4MDA4MDAwMDAwLAorCQkJCSAgICBQQ01DSUFfQVRUUl9QSFlTX0FERFIgKyAweDAwODQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9NRU1fUEhZU19BRERSICArIDB4MDA4MDAwMDAwLAorCQkJCSAgICBQQ01DSUFfTUVNX1BIWVNfQUREUiAgKyAweDAwODQwMDAwMCAtIDEsCisJCQkJICAgIFBDTUNJQV9JT19QSFlTX0FERFIgICArIDB4MDA4MDAwMDAwLAorCQkJCSAgICBQQ01DSUFfSU9fUEhZU19BRERSICAgKyAweDAwODAxMDAwMCAtIDEsCisJCQkJICAgIEFVMTU1MF9HUElPMjAxXzIwNV9JTlQsCisJCQkJICAgIEFVMTU1MF9HUElPMV9JTlQsCisJCQkJICAgIDAsCisJCQkJICAgIDAsCisJCQkJICAgIDEpOworCisJc3dhcHBlZCA9IGJjc3JfcmVhZChCQ1NSX1NUQVRVUykgJiBCQ1NSX1NUQVRVU19QQjE1NTBfU1dBUEJPT1Q7CisJZGIxeF9yZWdpc3Rlcl9ub3JmbGFzaCgxMjggKiAxMDI0ICogMTAyNCwgNCwgc3dhcHBlZCk7CisKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChwYjE1NTBfZGV2X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGxhdGZvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWE0YjMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BsYXRmb3JtLmMKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiBkZXZvYXJkIG1pc2Mgc3R1ZmYuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisKKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKworc3RhdGljIHZvaWQgZGIxeF9wb3dlcl9vZmYodm9pZCkKK3sKKwliY3NyX3dyaXRlKEJDU1JfUkVTRVRTLCAwKTsKKwliY3NyX3dyaXRlKEJDU1JfU1lTVEVNLCBCQ1NSX1NZU1RFTV9QV1JPRkYgfCBCQ1NSX1NZU1RFTV9SRVNFVCk7Cit9CisKK3N0YXRpYyB2b2lkIGRiMXhfcmVzZXQoY2hhciAqYykKK3sKKwliY3NyX3dyaXRlKEJDU1JfUkVTRVRTLCAwKTsKKwliY3NyX3dyaXRlKEJDU1JfU1lTVEVNLCAwKTsKK30KKworc3RhdGljIGludCBfX2luaXQgZGIxeF9wb3dlcm9mZl9zZXR1cCh2b2lkKQoreworCWlmICghcG1fcG93ZXJfb2ZmKQorCQlwbV9wb3dlcl9vZmYgPSBkYjF4X3Bvd2VyX29mZjsKKwlpZiAoIV9tYWNoaW5lX2hhbHQpCisJCV9tYWNoaW5lX2hhbHQgPSBkYjF4X3Bvd2VyX29mZjsKKwlpZiAoIV9tYWNoaW5lX3Jlc3RhcnQpCisJCV9tYWNoaW5lX3Jlc3RhcnQgPSBkYjF4X3Jlc2V0OworCisJcmV0dXJuIDA7Cit9CitsYXRlX2luaXRjYWxsKGRiMXhfcG93ZXJvZmZfc2V0dXApOworCisvKiByZWdpc3RlciBhIHBjbWNpYSBzb2NrZXQgKi8KK2ludCBfX2luaXQgZGIxeF9yZWdpc3Rlcl9wY21jaWFfc29ja2V0KHBoeXNfYWRkcl90IHBjbWNpYV9hdHRyX3N0YXJ0LAorCQkJCSAgICAgICBwaHlzX2FkZHJfdCBwY21jaWFfYXR0cl9lbmQsCisJCQkJICAgICAgIHBoeXNfYWRkcl90IHBjbWNpYV9tZW1fc3RhcnQsCisJCQkJICAgICAgIHBoeXNfYWRkcl90IHBjbWNpYV9tZW1fZW5kLAorCQkJCSAgICAgICBwaHlzX2FkZHJfdCBwY21jaWFfaW9fc3RhcnQsCisJCQkJICAgICAgIHBoeXNfYWRkcl90IHBjbWNpYV9pb19lbmQsCisJCQkJICAgICAgIGludCBjYXJkX2lycSwKKwkJCQkgICAgICAgaW50IGNkX2lycSwKKwkJCQkgICAgICAgaW50IHN0c2NoZ19pcnEsCisJCQkJICAgICAgIGludCBlamVjdF9pcnEsCisJCQkJICAgICAgIGludCBpZCkKK3sKKwlpbnQgY250LCBpLCByZXQ7CisJc3RydWN0IHJlc291cmNlICpzcjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZDsKKworCWNudCA9IDU7CisJaWYgKGVqZWN0X2lycSkKKwkJY250Kys7CisJaWYgKHN0c2NoZ19pcnEpCisJCWNudCsrOworCisJc3IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogY250LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBkID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJkYjF4eHhfcGNtY2lhIiwgaWQpOworCWlmICghcGQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJc3JbMF0ubmFtZQk9ICJwY21jaWEtYXR0ciI7CisJc3JbMF0uZmxhZ3MJPSBJT1JFU09VUkNFX01FTTsKKwlzclswXS5zdGFydAk9IHBjbWNpYV9hdHRyX3N0YXJ0OworCXNyWzBdLmVuZAk9IHBjbWNpYV9hdHRyX2VuZDsKKworCXNyWzFdLm5hbWUJPSAicGNtY2lhLW1lbSI7CisJc3JbMV0uZmxhZ3MJPSBJT1JFU09VUkNFX01FTTsKKwlzclsxXS5zdGFydAk9IHBjbWNpYV9tZW1fc3RhcnQ7CisJc3JbMV0uZW5kCT0gcGNtY2lhX21lbV9lbmQ7CisKKwlzclsyXS5uYW1lCT0gInBjbWNpYS1pbyI7CisJc3JbMl0uZmxhZ3MJPSBJT1JFU09VUkNFX01FTTsKKwlzclsyXS5zdGFydAk9IHBjbWNpYV9pb19zdGFydDsKKwlzclsyXS5lbmQJPSBwY21jaWFfaW9fZW5kOworCisJc3JbM10ubmFtZQk9ICJpbnNlcnQiOworCXNyWzNdLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlE7CisJc3JbM10uc3RhcnQgPSBzclszXS5lbmQgPSBjZF9pcnE7CisKKwlzcls0XS5uYW1lCT0gImNhcmQiOworCXNyWzRdLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlE7CisJc3JbNF0uc3RhcnQgPSBzcls0XS5lbmQgPSBjYXJkX2lycTsKKworCWkgPSA1OworCWlmIChzdHNjaGdfaXJxKSB7CisJCXNyW2ldLm5hbWUJPSAic3RzY2hnIjsKKwkJc3JbaV0uZmxhZ3MJPSBJT1JFU09VUkNFX0lSUTsKKwkJc3JbaV0uc3RhcnQgPSBzcltpXS5lbmQgPSBzdHNjaGdfaXJxOworCQlpKys7CisJfQorCWlmIChlamVjdF9pcnEpIHsKKwkJc3JbaV0ubmFtZQk9ICJlamVjdCI7CisJCXNyW2ldLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlE7CisJCXNyW2ldLnN0YXJ0ID0gc3JbaV0uZW5kID0gZWplY3RfaXJxOworCX0KKworCXBkLT5yZXNvdXJjZSA9IHNyOworCXBkLT5udW1fcmVzb3VyY2VzID0gY250OworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZCk7CisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZCk7CitvdXQ6CisJa2ZyZWUoc3IpOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgWUFNT05fU0laRQkweDAwMTAwMDAwCisjZGVmaW5lIFlBTU9OX0VOVl9TSVpFCTB4MDAwNDAwMDAKKworaW50IF9faW5pdCBkYjF4X3JlZ2lzdGVyX25vcmZsYXNoKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IHdpZHRoLAorCQkJCSAgaW50IHN3YXBwZWQpCit7CisJc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSAqcGZkOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkOworCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0LCBpOworCisJaWYgKHNpemUgPCAoOCAqIDEwMjQgKiAxMDI0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSAtRU5PTUVNOworCXBhcnRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9wYXJ0aXRpb24pICogNSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYXJ0cykKKwkJZ290byBvdXQ7CisKKwlyZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcykKKwkJZ290byBvdXQxOworCisJcGZkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghcGZkKQorCQlnb3RvIG91dDI7CisKKwlwZCA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygicGh5c21hcC1mbGFzaCIsIDApOworCWlmICghcGQpCisJCWdvdG8gb3V0MzsKKworCS8qIE5PUiBmbGFzaCBlbmRzIGF0IDB4MjAwMDAwMDAsIHJlZ2FyZGxlc3Mgb2Ygc2l6ZSAqLworCXJlcy0+c3RhcnQgPSAweDIwMDAwMDAwIC0gc2l6ZTsKKwlyZXMtPmVuZCA9IDB4MjAwMDAwMDAgLSAxOworCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKworCS8qIHBhcnRpdGlvbiBzZXR1cC4gIE1vc3QgRGV2ZWxib2FyZHMgaGF2ZSBhIHN3aXRjaCB3aGljaCBhbGxvd3MKKwkgKiB0byBzd2FwIHRoZSBwaHlzaWNhbCBsb2NhdGlvbnMgb2YgdGhlIDIgTk9SIGZsYXNoIGJhbmtzLgorCSAqLworCWkgPSAwOworCWlmICghc3dhcHBlZCkgeworCQkvKiBmaXJzdCBOT1IgY2hpcCAqLworCQlwYXJ0c1tpXS5vZmZzZXQgPSAwOworCQlwYXJ0c1tpXS5uYW1lID0gIlVzZXIgRlMiOworCQlwYXJ0c1tpXS5zaXplID0gc2l6ZSAvIDI7CisJCWkrKzsKKwl9CisKKwlwYXJ0c1tpXS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQ7CisJcGFydHNbaV0ubmFtZSA9ICJVc2VyIEZTIDIiOworCXBhcnRzW2ldLnNpemUgPSAoc2l6ZSAvIDIpIC0gKDB4MjAwMDAwMDAgLSAweDFmYzAwMDAwKTsKKwlpKys7CisKKwlwYXJ0c1tpXS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQ7CisJcGFydHNbaV0ubmFtZSA9ICJZQU1PTiI7CisJcGFydHNbaV0uc2l6ZSA9IFlBTU9OX1NJWkU7CisJcGFydHNbaV0ubWFza19mbGFncyA9IE1URF9XUklURUFCTEU7CisJaSsrOworCisJcGFydHNbaV0ub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5EOworCXBhcnRzW2ldLm5hbWUgPSAicmF3IGtlcm5lbCI7CisJcGFydHNbaV0uc2l6ZSA9IDB4MDA0MDAwMDAgLSBZQU1PTl9TSVpFIC0gWUFNT05fRU5WX1NJWkU7CisJaSsrOworCisJcGFydHNbaV0ub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5EOworCXBhcnRzW2ldLm5hbWUgPSAiWUFNT04gRW52IjsKKwlwYXJ0c1tpXS5zaXplID0gWUFNT05fRU5WX1NJWkU7CisJcGFydHNbaV0ubWFza19mbGFncyA9IE1URF9XUklURUFCTEU7CisJaSsrOworCisJaWYgKHN3YXBwZWQpIHsKKwkJcGFydHNbaV0ub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5EOworCQlwYXJ0c1tpXS5uYW1lID0gIlVzZXIgRlMiOworCQlwYXJ0c1tpXS5zaXplID0gc2l6ZSAvIDI7CisJCWkrKzsKKwl9CisKKwlwZmQtPndpZHRoID0gd2lkdGg7CisJcGZkLT5wYXJ0cyA9IHBhcnRzOworCXBmZC0+bnJfcGFydHMgPSA1OworCisJcGQtPmRldi5wbGF0Zm9ybV9kYXRhID0gcGZkOworCXBkLT5yZXNvdXJjZSA9IHJlczsKKwlwZC0+bnVtX3Jlc291cmNlcyA9IDE7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIHJldDsKKworCXBsYXRmb3JtX2RldmljZV9wdXQocGQpOworb3V0MzoKKwlrZnJlZShwZmQpOworb3V0MjoKKwlrZnJlZShyZXMpOworb3V0MToKKwlrZnJlZShwYXJ0cyk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wbGF0Zm9ybS5oIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BsYXRmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFjMDU1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wbGF0Zm9ybS5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX0RFVkJPQVJEX1BMQVRGT1JNX0hfCisjZGVmaW5lIF9ERVZCT0FSRF9QTEFURk9STV9IXworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCitpbnQgX19pbml0IGRiMXhfcmVnaXN0ZXJfcGNtY2lhX3NvY2tldChwaHlzX2FkZHJfdCBwY21jaWFfYXR0cl9zdGFydCwKKwkJCQkgICAgICAgcGh5c19hZGRyX3QgcGNtY2lhX2F0dHJfbGVuLAorCQkJCSAgICAgICBwaHlzX2FkZHJfdCBwY21jaWFfbWVtX3N0YXJ0LAorCQkJCSAgICAgICBwaHlzX2FkZHJfdCBwY21jaWFfbWVtX2VuZCwKKwkJCQkgICAgICAgcGh5c19hZGRyX3QgcGNtY2lhX2lvX3N0YXJ0LAorCQkJCSAgICAgICBwaHlzX2FkZHJfdCBwY21jaWFfaW9fZW5kLAorCQkJCSAgICAgICBpbnQgY2FyZF9pcnEsCisJCQkJICAgICAgIGludCBjZF9pcnEsCisJCQkJICAgICAgIGludCBzdHNjaGdfaXJxLAorCQkJCSAgICAgICBpbnQgZWplY3RfaXJxLAorCQkJCSAgICAgICBpbnQgaWQpOworCitpbnQgX19pbml0IGRiMXhfcmVnaXN0ZXJfbm9yZmxhc2godW5zaWduZWQgbG9uZyBzaXplLCBpbnQgd2lkdGgsCisJCQkJICBpbnQgc3dhcHBlZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BtLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcG0uYwppbmRleCA2MzJmOTg2Li40YmJkMzEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcG0uYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcG0uYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KIAogLyoKICAqIEdlbmVyaWMgc3VzcGVuZCB1c2Vyc3BhY2UgaW50ZXJmYWNlIGZvciBBbGNoZW15IGRldmVsb3BtZW50IGJvYXJkcy4KQEAgLTI2LDYgKzI3LDIwIEBACiAKIHN0YXRpYyBpbnQgZGIxeF9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCiB7CisJdW5zaWduZWQgc2hvcnQgYmNzcnNbMTZdOworCWludCBpLCBqLCBoYXNpbnQ7CisKKwkvKiBzYXZlIENQTEQgcmVncyAqLworCWhhc2ludCA9IGJjc3JfcmVhZChCQ1NSX1dIT0FNSSk7CisJaGFzaW50ID0gQkNTUl9XSE9BTUlfQk9BUkQoaGFzaW50KSA+PSBCQ1NSX1dIT0FNSV9EQjEyMDA7CisJaiA9IChoYXNpbnQpID8gQkNTUl9NQVNLU0VUIDogQkNTUl9TWVNURU07CisKKwlmb3IgKGkgPSBCQ1NSX1NUQVRVUzsgaSA8PSBqOyBpKyspCisJCWJjc3JzW2ldID0gYmNzcl9yZWFkKGkpOworCisJLyogc2h1dCBvZmYgaGV4bGVkcyAqLworCWJjc3Jfd3JpdGUoQkNTUl9IRVhDTEVBUiwgMyk7CisKIAkvKiBlbmFibGUgR1BJTyBiYXNlZCB3YWtldXAgKi8KIAlhbGNoZW15X2dwaW8xX2lucHV0X2VuYWJsZSgpOwogCkBAIC01Miw2ICs2NywyMyBAQAogCS8qIC4uLmFuZCBub3cgdGhlIHNhbmRtYW4gY2FuIGNvbWUhICovCiAJYXVfc2xlZXAoKTsKIAorCisJLyogcmVzdG9yZSBDUExEIHJlZ3MgKi8KKwlmb3IgKGkgPSBCQ1NSX1NUQVRVUzsgaSA8PSBCQ1NSX1NZU1RFTTsgaSsrKQorCQliY3NyX3dyaXRlKGksIGJjc3JzW2ldKTsKKworCS8qIHJlc3RvcmUgQ1BMRCBpbnQgcmVnaXN0ZXJzICovCisJaWYgKGhhc2ludCkgeworCQliY3NyX3dyaXRlKEJDU1JfSU5UQ0xSLCAweGZmZmYpOworCQliY3NyX3dyaXRlKEJDU1JfTUFTS0NMUiwgMHhmZmZmKTsKKwkJYmNzcl93cml0ZShCQ1NSX0lOVFNUQVQsIDB4ZmZmZik7CisJCWJjc3Jfd3JpdGUoQkNTUl9JTlRTRVQsIGJjc3JzW0JDU1JfSU5UU0VUXSk7CisJCWJjc3Jfd3JpdGUoQkNTUl9NQVNLU0VULCBiY3Nyc1tCQ1NSX01BU0tTRVRdKTsKKwl9CisKKwkvKiBsaWdodCB1cCBoZXhsZWRzICovCisJYmNzcl93cml0ZShCQ1NSX0hFWENMRUFSLCAwKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcHJvbS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3Byb20uYwppbmRleCAwMDQyYmQ2Li5iMzBkZjVjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wcm9tLmMKQEAgLTYwLDMgKzYwLDggQEAKIAkJc3RyaWN0X3N0cnRvdWwobWVtc2l6ZV9zdHIsIDAsICZtZW1zaXplKTsKIAlhZGRfbWVtb3J5X3JlZ2lvbigwLCBtZW1zaXplLCBCT09UX01FTV9SQU0pOwogfQorCit2b2lkIHByb21fcHV0Y2hhcih1bnNpZ25lZCBjaGFyIGMpCit7CisgICAgYWxjaGVteV91YXJ0X3B1dGNoYXIoVUFSVDBfUEhZU19BRERSLCBjKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL01ha2VmaWxlIGIvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvTWFrZWZpbGUKaW5kZXggN2M2N2IzZC4uNGE1MzgxNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBACiAjIE1ha2VmaWxlIGZvciA0RyBTeXN0ZW1zIE1UWC0xIGJvYXJkLgogIwogCi1saWIteSA6PSBpbml0Lm8gYm9hcmRfc2V0dXAubyBpcnFtYXAubworbGliLXkgOj0gaW5pdC5vIGJvYXJkX3NldHVwLm8KIG9iai15IDo9IHBsYXRmb3JtLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9ib2FyZF9zZXR1cC5jCmluZGV4IDQ1YjYxYzkuLmE5ZjAzMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2JvYXJkX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvYm9hcmRfc2V0dXAuYwpAQCAtMzAsMzIgKzMwLDQzIEBACiAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAKKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgogCiAjaW5jbHVkZSA8cHJvbS5oPgogCitjaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7CisJWzBdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRBLCBBVTE1MDBfUENJX0lOVEEsIDB4ZmYsIDB4ZmYgfSwgLyogSURTRUwgMDAgLSBBZGFwdGVyQS1TbG90MCAodG9wKSAqLworCVsxXSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQiwgQVUxNTAwX1BDSV9JTlRBLCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDAxIC0gQWRhcHRlckEtU2xvdDEgKGJvdHRvbSkgKi8KKwlbMl0gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEMsIEFVMTUwMF9QQ0lfSU5URCwgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAwMiAtIEFkYXB0ZXJCLVNsb3QwICh0b3ApICovCisJWzNdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRELCBBVTE1MDBfUENJX0lOVEMsIDB4ZmYsIDB4ZmYgfSwgLyogSURTRUwgMDMgLSBBZGFwdGVyQi1TbG90MSAoYm90dG9tKSAqLworCVs0XSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5UQSwgQVUxNTAwX1BDSV9JTlRCLCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDA0IC0gQWRhcHRlckMtU2xvdDAgKHRvcCkgKi8KKwlbNV0gPSB7IC0xLCBBVTE1MDBfUENJX0lOVEIsIEFVMTUwMF9QQ0lfSU5UQSwgMHhmZiwgMHhmZiB9LCAvKiBJRFNFTCAwNSAtIEFkYXB0ZXJDLVNsb3QxIChib3R0b20pICovCisJWzZdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRDLCBBVTE1MDBfUENJX0lOVEQsIDB4ZmYsIDB4ZmYgfSwgLyogSURTRUwgMDYgLSBBZGFwdGVyRC1TbG90MCAodG9wKSAqLworCVs3XSA9IHsgLTEsIEFVMTUwMF9QQ0lfSU5URCwgQVUxNTAwX1BDSV9JTlRDLCAweGZmLCAweGZmIH0sIC8qIElEU0VMIDA3IC0gQWRhcHRlckQtU2xvdDEgKGJvdHRvbSkgKi8KK307CisKIGV4dGVybiBpbnQgKCpib2FyZF9wY2lfaWRzZWwpKHVuc2lnbmVkIGludCBkZXZzZWwsIGludCBhc3NlcnQpOwogaW50IG10eDFfcGNpX2lkc2VsKHVuc2lnbmVkIGludCBkZXZzZWwsIGludCBhc3NlcnQpOwogCi12b2lkIGJvYXJkX3Jlc2V0KHZvaWQpCitzdGF0aWMgdm9pZCBtdHgxX3Jlc2V0KGNoYXIgKmMpCiB7CiAJLyogSGl0IEJDU1IuU1lTVEVNX0NPTlRST0xbU1dfUlNUXSAqLwogCWF1X3dyaXRlbCgweDAwMDAwMDAwLCAweEFFMDAwMDFDKTsKIH0KIAorc3RhdGljIHZvaWQgbXR4MV9wb3dlcl9vZmYodm9pZCkKK3sKKwlwcmludGsoS0VSTl9BTEVSVCAiSXQncyBub3cgc2FmZSB0byByZW1vdmUgcG93ZXJcbiIpOworCXdoaWxlICgxKQorCQlhc20gdm9sYXRpbGUgKCIuc2V0IG1pcHMzIDsgd2FpdCA7IC5zZXQgbWlwczEiKTsKK30KKwogdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQotCWNoYXIgKmFyZ3B0cjsKLQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQlhcmdwdHIgPSBzdHJzdHIoYXJncHRyLCAiY29uc29sZT0iKTsKLQlpZiAoYXJncHRyID09IE5VTEwpIHsKLQkJYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JCXN0cmNhdChhcmdwdHIsICIgY29uc29sZT10dHlTMCwxMTUyMDAiKTsKLQl9Ci0jZW5kaWYKLQogCWFsY2hlbXlfZ3BpbzJfZW5hYmxlKCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCkBAIC04Niw2ICs5NywxMCBAQAogCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIxMSwgMSk7CS8qIGdyZWVuIG9uICovCiAJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjEyLCAwKTsJLyogcmVkIG9mZiAqLwogCisJcG1fcG93ZXJfb2ZmID0gbXR4MV9wb3dlcl9vZmY7CisJX21hY2hpbmVfaGFsdCA9IG10eDFfcG93ZXJfb2ZmOworCV9tYWNoaW5lX3Jlc3RhcnQgPSBtdHgxX3Jlc2V0OworCiAJcHJpbnRrKEtFUk5fSU5GTyAiNEcgU3lzdGVtcyBNVFgtMSBCb2FyZFxuIik7CiB9CiAKQEAgLTEwOSwzICsxMjQsMTUgQEAKIAlhdV9zeW5jX3VkZWxheSgxKTsKIAlyZXR1cm4gMTsKIH0KKworc3RhdGljIGludCBfX2luaXQgbXR4MV9pbml0X2lycSh2b2lkKQoreworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzIwNF9JTlQsIElSUUZfVFJJR0dFUl9ISUdIKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDFfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDJfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDNfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDVfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChtdHgxX2luaXRfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2luaXQuYyBiL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2luaXQuYwppbmRleCA1ZTg3MWM4Li5mOGQyNTU3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9pbml0LmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvaW5pdC5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgogCiAjaW5jbHVkZSA8cHJvbS5oPgogCkBAIC01OCwzICs1OSw4IEBACiAJCXN0cmljdF9zdHJ0b3VsKG1lbXNpemVfc3RyLCAwLCAmbWVtc2l6ZSk7CiAJYWRkX21lbW9yeV9yZWdpb24oMCwgbWVtc2l6ZSwgQk9PVF9NRU1fUkFNKTsKIH0KKwordm9pZCBwcm9tX3B1dGNoYXIodW5zaWduZWQgY2hhciBjKQoreworCWFsY2hlbXlfdWFydF9wdXRjaGFyKFVBUlQwX1BIWVNfQUREUiwgYyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9pcnFtYXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2lycW1hcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWFiMTJhLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2lycW1hcC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgotICoJQXUxeHh4IGlycSBtYXAgdGFibGUKLSAqCi0gKiBDb3B5cmlnaHQgMjAwMyBFbWJlZGRlZCBFZGdlLCBMTEMKLSAqCQlkYW5AZW1iZWRkZWRlZGdlLmNvbQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUJIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mCSB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQlMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRAkgIGBgQVMJSVMnJyBBTkQgICBBTlkJRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywJICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8JRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUJIExJQUJMRSBGT1IgQU5ZCSAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRAkgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUwlPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwJT1IgUFJPRklUUzsgT1IJQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgkgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KLQotY2hhciBpcnFfdGFiX2FsY2hlbXlbXVs1XSBfX2luaXRkYXRhID0gewotCVswXSA9IHsgLTEsIElOVEEsIElOVEEsIElOVFgsIElOVFggfSwgLyogSURTRUwgMDAgLSBBZGFwdGVyQS1TbG90MCAodG9wKSAqLwotCVsxXSA9IHsgLTEsIElOVEIsIElOVEEsIElOVFgsIElOVFggfSwgLyogSURTRUwgMDEgLSBBZGFwdGVyQS1TbG90MSAoYm90dG9tKSAqLwotCVsyXSA9IHsgLTEsIElOVEMsIElOVEQsIElOVFgsIElOVFggfSwgLyogSURTRUwgMDIgLSBBZGFwdGVyQi1TbG90MCAodG9wKSAqLwotCVszXSA9IHsgLTEsIElOVEQsIElOVEMsIElOVFgsIElOVFggfSwgLyogSURTRUwgMDMgLSBBZGFwdGVyQi1TbG90MSAoYm90dG9tKSAqLwotCVs0XSA9IHsgLTEsIElOVEEsIElOVEIsIElOVFgsIElOVFggfSwgLyogSURTRUwgMDQgLSBBZGFwdGVyQy1TbG90MCAodG9wKSAqLwotCVs1XSA9IHsgLTEsIElOVEIsIElOVEEsIElOVFgsIElOVFggfSwgLyogSURTRUwgMDUgLSBBZGFwdGVyQy1TbG90MSAoYm90dG9tKSAqLwotCVs2XSA9IHsgLTEsIElOVEMsIElOVEQsIElOVFgsIElOVFggfSwgLyogSURTRUwgMDYgLSBBZGFwdGVyRC1TbG90MCAodG9wKSAqLwotCVs3XSA9IHsgLTEsIElOVEQsIElOVEMsIElOVFgsIElOVFggfSwgLyogSURTRUwgMDcgLSBBZGFwdGVyRC1TbG90MSAoYm90dG9tKSAqLwotfTsKLQotc3RydWN0IGF1MXh4eF9pcnFtYXAgX19pbml0ZGF0YSBhdTF4eHhfaXJxX21hcFtdID0gewotICAgICAgIHsgQVUxNTAwX0dQSU9fMjA0LCBJUlFGX1RSSUdHRVJfSElHSCwgMCB9LAotICAgICAgIHsgQVUxNTAwX0dQSU9fMjAxLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0gICAgICAgeyBBVTE1MDBfR1BJT18yMDIsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLSAgICAgICB7IEFVMTUwMF9HUElPXzIwMywgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotICAgICAgIHsgQVUxNTAwX0dQSU9fMjA1LCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi19OwotCi0KLXZvaWQgX19pbml0IGJvYXJkX2luaXRfaXJxKHZvaWQpCi17Ci0JYXUxeHh4X3NldHVwX2lycW1hcChhdTF4eHhfaXJxX21hcCwgQVJSQVlfU0laRShhdTF4eHhfaXJxX21hcCkpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvTWFrZWZpbGUKaW5kZXggZGIzYzUyNi4uNGRjODFkNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL01ha2VmaWxlCkBAIC01LDQgKzUsNiBAQAogIyBNYWtlZmlsZSBmb3IgTXlDYWJsZSBYWFMxNTAwIGJvYXJkLgogIwogCi1saWIteSA6PSBpbml0Lm8gYm9hcmRfc2V0dXAubyBpcnFtYXAubworbGliLXkgOj0gaW5pdC5vIGJvYXJkX3NldHVwLm8gcGxhdGZvcm0ubworCitFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9ib2FyZF9zZXR1cC5jCmluZGV4IDRkZTJkNDguLjQ3YjQyOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2JvYXJkX3NldHVwLmMKQEAgLTI1LDMxICsyNSwzNSBAQAogCiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAKKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgogCiAjaW5jbHVkZSA8cHJvbS5oPgogCi12b2lkIGJvYXJkX3Jlc2V0KHZvaWQpCitzdGF0aWMgdm9pZCB4eHMxNTAwX3Jlc2V0KGNoYXIgKmMpCiB7CiAJLyogSGl0IEJDU1IuU1lTVEVNX0NPTlRST0xbU1dfUlNUXSAqLwogCWF1X3dyaXRlbCgweDAwMDAwMDAwLCAweEFFMDAwMDFDKTsKIH0KIAorc3RhdGljIHZvaWQgeHhzMTUwMF9wb3dlcl9vZmYodm9pZCkKK3sKKwlwcmludGsoS0VSTl9BTEVSVCAiSXQncyBub3cgc2FmZSB0byByZW1vdmUgcG93ZXJcbiIpOworCXdoaWxlICgxKQorCQlhc20gdm9sYXRpbGUgKCIuc2V0IG1pcHMzIDsgd2FpdCA7IC5zZXQgbWlwczEiKTsKK30KKwogdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKIHsKIAl1MzIgcGluX2Z1bmM7CiAKLSNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQotCWNoYXIgKmFyZ3B0cjsKLQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQlhcmdwdHIgPSBzdHJzdHIoYXJncHRyLCAiY29uc29sZT0iKTsKLQlpZiAoYXJncHRyID09IE5VTEwpIHsKLQkJYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JCXN0cmNhdChhcmdwdHIsICIgY29uc29sZT10dHlTMCwxMTUyMDAiKTsKLQl9Ci0jZW5kaWYKKwlwbV9wb3dlcl9vZmYgPSB4eHMxNTAwX3Bvd2VyX29mZjsKKwlfbWFjaGluZV9oYWx0ID0geHhzMTUwMF9wb3dlcl9vZmY7CisJX21hY2hpbmVfcmVzdGFydCA9IHh4czE1MDBfcmVzZXQ7CiAKIAlhbGNoZW15X2dwaW8xX2lucHV0X2VuYWJsZSgpOwogCWFsY2hlbXlfZ3BpbzJfZW5hYmxlKCk7CkBAIC02OCwyMiArNzIsNiBAQAogCS8qIEVuYWJsZSBEVFIgPSBVU0IgcG93ZXIgdXAgKi8KIAlhdV93cml0ZWwoMHgwMSwgVUFSVDNfQUREUiArIFVBUlRfTUNSKTsgLyogVUFSVF9NQ1JfRFRSIGlzIDB4MDE/Pz8gKi8KIAotI2lmZGVmIENPTkZJR19QQ01DSUFfWFhTMTUwMAotCS8qIEdQSU8gMCwgMSwgYW5kIDQgYXJlIGlucHV0cyAqLwotCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25faW5wdXQoMCk7Ci0JYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9pbnB1dCgxKTsKLQlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX2lucHV0KDQpOwotCi0JLyogR1BJTzIgMjA4LzkvMTAvMTEgYXJlIGlucHV0cyAqLwotCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25faW5wdXQoMjA4KTsKLQlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX2lucHV0KDIwOSk7Ci0JYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9pbnB1dCgyMTApOwotCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25faW5wdXQoMjExKTsKLQotCS8qIFR1cm4gb2ZmIHBvd2VyICovCi0JYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjE0LCAwKTsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1BDSQogI2lmIGRlZmluZWQoX19NSVBTRUJfXykKIAlhdV93cml0ZWwoMHhmIHwgKDIgPDwgNikgfCAoMSA8PCA0KSwgQXUxNTAwX1BDSV9DRkcpOwpAQCAtOTIsMyArODAsMjMgQEAKICNlbmRpZgogI2VuZGlmCiB9CisKK3N0YXRpYyBpbnQgX19pbml0IHh4czE1MDBfaW5pdF9pcnEodm9pZCkKK3sKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8yMDRfSU5ULCBJUlFGX1RSSUdHRVJfSElHSCk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjAxX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjAyX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjAzX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjA1X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMjA3X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8wX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPMV9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOworCXNldF9pcnFfdHlwZShBVTE1MDBfR1BJTzJfSU5ULCBJUlFGX1RSSUdHRVJfTE9XKTsKKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU8zX0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisJc2V0X2lycV90eXBlKEFVMTUwMF9HUElPNF9JTlQsIElSUUZfVFJJR0dFUl9MT1cpOyAvKiBDRiBpcnEgKi8KKwlzZXRfaXJxX3R5cGUoQVUxNTAwX0dQSU81X0lOVCwgSVJRRl9UUklHR0VSX0xPVyk7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoeHhzMTUwMF9pbml0X2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2luaXQuYyBiL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvaW5pdC5jCmluZGV4IDQ1NmZhMTQuLjE1MTI1YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvaW5pdC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAKICNpbmNsdWRlIDxwcm9tLmg+CiAKQEAgLTU2LDMgKzU3LDggQEAKIAkJc3RyaWN0X3N0cnRvdWwobWVtc2l6ZV9zdHIsIDAsICZtZW1zaXplKTsKIAlhZGRfbWVtb3J5X3JlZ2lvbigwLCBtZW1zaXplLCBCT09UX01FTV9SQU0pOwogfQorCit2b2lkIHByb21fcHV0Y2hhcih1bnNpZ25lZCBjaGFyIGMpCit7CisJYWxjaGVteV91YXJ0X3B1dGNoYXIoVUFSVDBfUEhZU19BRERSLCBjKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvaXJxbWFwLmMgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2lycW1hcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjBmMzAxLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvaXJxbWFwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglBdTF4eHggaXJxIG1hcCB0YWJsZQotICoKLSAqIENvcHlyaWdodCAyMDAzIEVtYmVkZGVkIEVkZ2UsIExMQwotICoJCWRhbkBlbWJlZGRlZGVkZ2UuY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YJIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCUxpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVECSAgYGBBUwlJUycnIEFORCAgIEFOWQlFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLAkgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTwlFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRQkgTElBQkxFIEZPUiBBTlkJICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVECSAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTCU9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLAlPUiBQUk9GSVRTOyBPUglCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCSBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgotCi1zdHJ1Y3QgYXUxeHh4X2lycW1hcCBfX2luaXRkYXRhIGF1MXh4eF9pcnFfbWFwW10gPSB7Ci0JeyBBVTE1MDBfR1BJT18yMDQsIElSUUZfVFJJR0dFUl9ISUdILCAwIH0sCi0JeyBBVTE1MDBfR1BJT18yMDEsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLQl7IEFVMTUwMF9HUElPXzIwMiwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotCXsgQVUxNTAwX0dQSU9fMjAzLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0JeyBBVTE1MDBfR1BJT18yMDUsIElSUUZfVFJJR0dFUl9MT1csIDAgfSwKLQl7IEFVMTUwMF9HUElPXzIwNywgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotCi0JeyBBVTEwMDBfR1BJT18wLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0JeyBBVTEwMDBfR1BJT18xLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0JeyBBVTEwMDBfR1BJT18yLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0JeyBBVTEwMDBfR1BJT18zLCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sCi0JeyBBVTEwMDBfR1BJT180LCBJUlFGX1RSSUdHRVJfTE9XLCAwIH0sIC8qIENGIGludGVycnVwdCAqLwotCXsgQVUxMDAwX0dQSU9fNSwgSVJRRl9UUklHR0VSX0xPVywgMCB9LAotfTsKLQotdm9pZCBfX2luaXQgYm9hcmRfaW5pdF9pcnEodm9pZCkKLXsKLQlhdTF4eHhfc2V0dXBfaXJxbWFwKGF1MXh4eF9pcnFfbWFwLCBBUlJBWV9TSVpFKGF1MXh4eF9pcnFfbWFwKSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3YzQ1YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvcGxhdGZvcm0uYwpAQCAtMCwwICsxLDYzIEBACisvKgorICogWFhTMTUwMCBib2FyZCBwbGF0Zm9ybSBkZXZpY2UgcmVnaXN0cmF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hbnVlbCBMYXVzcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB4eHMxNTAwX3BjbWNpYV9yZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gInBjbWNpYS1pbyIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQJPSBQQ01DSUFfSU9fUEhZU19BRERSLAorCQkuZW5kCT0gUENNQ0lBX0lPX1BIWVNfQUREUiArIDB4MDAwNDAwMDAwIC0gMSwKKwl9LAorCXsKKwkJLm5hbWUJPSAicGNtY2lhLWF0dHIiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0CT0gUENNQ0lBX0FUVFJfUEhZU19BRERSLAorCQkuZW5kCT0gUENNQ0lBX0FUVFJfUEhZU19BRERSICsgMHgwMDA0MDAwMDAgLSAxLAorCX0sCisJeworCQkubmFtZQk9ICJwY21jaWEtbWVtIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydAk9IFBDTUNJQV9NRU1fUEhZU19BRERSLAorCQkuZW5kCT0gUENNQ0lBX01FTV9QSFlTX0FERFIgKyAweDAwMDQwMDAwMCAtIDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHh4czE1MDBfcGNtY2lhX2RldiA9IHsKKwkubmFtZQkJPSAieHhzMTUwMF9wY21jaWEiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoeHhzMTUwMF9wY21jaWFfcmVzKSwKKwkucmVzb3VyY2UJPSB4eHMxNTAwX3BjbWNpYV9yZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqeHhzMTUwMF9kZXZzW10gX19pbml0ZGF0YSA9IHsKKwkmeHhzMTUwMF9wY21jaWFfZGV2LAorfTsKKworc3RhdGljIGludCBfX2luaXQgeHhzMTUwMF9kZXZfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyh4eHMxNTAwX2RldnMsCisJCQkJICAgIEFSUkFZX1NJWkUoeHhzMTUwMF9kZXZzKSk7Cit9CitkZXZpY2VfaW5pdGNhbGwoeHhzMTUwMF9kZXZfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXI3L2Nsb2NrLmMgYi9hcmNoL21pcHMvYXI3L2Nsb2NrLmMKaW5kZXggY2M2NWM4ZS4uZmMwZTcxNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy9jbG9jay5jCisrKyBiL2FyY2gvbWlwcy9hcjcvY2xvY2suYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRmVsaXggRmlldGthdSA8bmJkQG9wZW53cnQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA3IEV1Z2VuZSBLb25ldiA8ZWprYUBvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjQsNiArMjUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2NkLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hcjcvYXI3Lmg+CkBAIC05NCwxMiArOTcsMTYgQEAKIAlzdHJ1Y3QgdG5ldGQ3MjAwX2Nsb2NrIHVzYjsKIH07CiAKLWludCBhcjdfY3B1X2Nsb2NrID0gMTUwMDAwMDAwOwotRVhQT1JUX1NZTUJPTChhcjdfY3B1X2Nsb2NrKTsKLWludCBhcjdfYnVzX2Nsb2NrID0gMTI1MDAwMDAwOwotRVhQT1JUX1NZTUJPTChhcjdfYnVzX2Nsb2NrKTsKLWludCBhcjdfZHNwX2Nsb2NrOwotRVhQT1JUX1NZTUJPTChhcjdfZHNwX2Nsb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGJ1c19jbGsgPSB7CisJLnJhdGUJPSAxMjUwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjcHVfY2xrID0geworCS5yYXRlCT0gMTUwMDAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNwX2NsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZidXNfY2xrOwogCiBzdGF0aWMgdm9pZCBhcHByb3hpbWF0ZShpbnQgYmFzZSwgaW50IHRhcmdldCwgaW50ICpwcmVkaXYsCiAJCQlpbnQgKnBvc3RkaXYsIGludCAqbXVsKQpAQCAtMTg1LDcgKzE5Miw3IEBACiAJCWJhc2VfY2xvY2sgPSBBUjdfWFRBTF9DTE9DSzsKIAkJYnJlYWs7CiAJY2FzZSBCT09UX1BMTF9TT1VSQ0VfQ1BVOgotCQliYXNlX2Nsb2NrID0gYXI3X2NwdV9jbG9jazsKKwkJYmFzZV9jbG9jayA9IGNwdV9jbGsucmF0ZTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yMTIsMTEgKzIxOSwxMSBAQAogCXUzMiAqYm9vdGNyLCB1MzIgZnJlcXVlbmN5KQogewogCWludCBwcmVkaXYsIHBvc3RkaXYsIG11bDsKLQlpbnQgYmFzZV9jbG9jayA9IGFyN19idXNfY2xvY2s7CisJaW50IGJhc2VfY2xvY2sgPSBidXNfY2xrLnJhdGU7CiAKIAlzd2l0Y2ggKCgqYm9vdGNyICYgKEJPT1RfUExMX1NPVVJDRV9NQVNLIDw8IHNoaWZ0KSkgPj4gc2hpZnQpIHsKIAljYXNlIEJPT1RfUExMX1NPVVJDRV9CVVM6Ci0JCWJhc2VfY2xvY2sgPSBhcjdfYnVzX2Nsb2NrOworCQliYXNlX2Nsb2NrID0gYnVzX2Nsay5yYXRlOwogCQlicmVhazsKIAljYXNlIEJPT1RfUExMX1NPVVJDRV9SRUY6CiAJCWJhc2VfY2xvY2sgPSBBUjdfUkVGX0NMT0NLOwpAQCAtMjI1LDcgKzIzMiw3IEBACiAJCWJhc2VfY2xvY2sgPSBBUjdfWFRBTF9DTE9DSzsKIAkJYnJlYWs7CiAJY2FzZSBCT09UX1BMTF9TT1VSQ0VfQ1BVOgotCQliYXNlX2Nsb2NrID0gYXI3X2NwdV9jbG9jazsKKwkJYmFzZV9jbG9jayA9IGNwdV9jbGsucmF0ZTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yNDcsMTggKzI1NCwxOCBAQAogCQkJCQlpb3JlbWFwX25vY2FjaGUoVVI4X1JFR1NfQ0xPQ0tTLAogCQkJCQlzaXplb2Yoc3RydWN0IHRuZXRkNzMwMF9jbG9ja3MpKTsKIAotCWFyN19idXNfY2xvY2sgPSB0bmV0ZDczMDBfZ2V0X2Nsb2NrKEJVU19QTExfU09VUkNFX1NISUZULAorCWJ1c19jbGsucmF0ZSA9IHRuZXRkNzMwMF9nZXRfY2xvY2soQlVTX1BMTF9TT1VSQ0VfU0hJRlQsCiAJCSZjbG9ja3MtPmJ1cywgYm9vdGNyLCBBUjdfQUZFX0NMT0NLKTsKIAogCWlmICgqYm9vdGNyICYgQk9PVF9QTExfQVNZTkNfTU9ERSkKLQkJYXI3X2NwdV9jbG9jayA9IHRuZXRkNzMwMF9nZXRfY2xvY2soQ1BVX1BMTF9TT1VSQ0VfU0hJRlQsCisJCWNwdV9jbGsucmF0ZSA9IHRuZXRkNzMwMF9nZXRfY2xvY2soQ1BVX1BMTF9TT1VSQ0VfU0hJRlQsCiAJCQkmY2xvY2tzLT5jcHUsIGJvb3RjciwgQVI3X0FGRV9DTE9DSyk7CiAJZWxzZQotCQlhcjdfY3B1X2Nsb2NrID0gYXI3X2J1c19jbG9jazsKKwkJY3B1X2Nsay5yYXRlID0gYnVzX2Nsay5yYXRlOwogCi0JaWYgKGFyN19kc3BfY2xvY2sgPT0gMjUwMDAwMDAwKQorCWlmIChkc3BfY2xrLnJhdGUgPT0gMjUwMDAwMDAwKQogCQl0bmV0ZDczMDBfc2V0X2Nsb2NrKERTUF9QTExfU09VUkNFX1NISUZULCAmY2xvY2tzLT5kc3AsCi0JCQlib290Y3IsIGFyN19kc3BfY2xvY2spOworCQkJYm9vdGNyLCBkc3BfY2xrLnJhdGUpOwogCiAJaW91bm1hcChjbG9ja3MpOwogCWlvdW5tYXAoYm9vdGNyKTsKQEAgLTM0MywyMCArMzUwLDIwIEBACiAJCXByaW50ayhLRVJOX0lORk8gIkNsb2NrczogU2V0dGluZyBEU1AgY2xvY2tcbiIpOwogCQljYWxjdWxhdGUoZHNwX2Jhc2UsIFRORVRENzIwMF9ERUZfRFNQX0NMSywKIAkJCSZkc3BfcHJlZGl2LCAmZHNwX3Bvc3RkaXYsICZkc3BfbXVsKTsKLQkJYXI3X2J1c19jbG9jayA9CisJCWJ1c19jbGsucmF0ZSA9CiAJCQkoKGRzcF9iYXNlIC8gZHNwX3ByZWRpdikgKiBkc3BfbXVsKSAvIGRzcF9wb3N0ZGl2OwogCQl0bmV0ZDcyMDBfc2V0X2Nsb2NrKGRzcF9iYXNlLCAmY2xvY2tzLT5kc3AsCiAJCQlkc3BfcHJlZGl2LCBkc3BfcG9zdGRpdiAqIDIsIGRzcF9wb3N0ZGl2LCBkc3BfbXVsICogMiwKLQkJCWFyN19idXNfY2xvY2spOworCQkJYnVzX2Nsay5yYXRlKTsKIAogCQlwcmludGsoS0VSTl9JTkZPICJDbG9ja3M6IFNldHRpbmcgQ1BVIGNsb2NrXG4iKTsKIAkJY2FsY3VsYXRlKGNwdV9iYXNlLCBUTkVURDcyMDBfREVGX0NQVV9DTEssICZjcHVfcHJlZGl2LAogCQkJJmNwdV9wb3N0ZGl2LCAmY3B1X211bCk7Ci0JCWFyN19jcHVfY2xvY2sgPQorCQljcHVfY2xrLnJhdGUgPQogCQkJKChjcHVfYmFzZSAvIGNwdV9wcmVkaXYpICogY3B1X211bCkgLyBjcHVfcG9zdGRpdjsKIAkJdG5ldGQ3MjAwX3NldF9jbG9jayhjcHVfYmFzZSwgJmNsb2Nrcy0+Y3B1LAogCQkJY3B1X3ByZWRpdiwgY3B1X3Bvc3RkaXYsIC0xLCBjcHVfbXVsLAotCQkJYXI3X2NwdV9jbG9jayk7CisJCQljcHVfY2xrLnJhdGUpOwogCiAJfSBlbHNlCiAJCWlmICgqYm9vdGNyICYgQk9PVF9QTExfMlRPMV9NT0RFKSB7CkBAIC0zNjUsNDggKzM3Miw5MCBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tzOiBTZXR0aW5nIENQVSBjbG9ja1xuIik7CiAJCQljYWxjdWxhdGUoY3B1X2Jhc2UsIFRORVRENzIwMF9ERUZfQ1BVX0NMSywgJmNwdV9wcmVkaXYsCiAJCQkJJmNwdV9wb3N0ZGl2LCAmY3B1X211bCk7Ci0JCQlhcjdfY3B1X2Nsb2NrID0gKChjcHVfYmFzZSAvIGNwdV9wcmVkaXYpICogY3B1X211bCkKKwkJCWNwdV9jbGsucmF0ZSA9ICgoY3B1X2Jhc2UgLyBjcHVfcHJlZGl2KSAqIGNwdV9tdWwpCiAJCQkJCQkJCS8gY3B1X3Bvc3RkaXY7CiAJCQl0bmV0ZDcyMDBfc2V0X2Nsb2NrKGNwdV9iYXNlLCAmY2xvY2tzLT5jcHUsCiAJCQkJY3B1X3ByZWRpdiwgY3B1X3Bvc3RkaXYsIC0xLCBjcHVfbXVsLAotCQkJCWFyN19jcHVfY2xvY2spOworCQkJCWNwdV9jbGsucmF0ZSk7CiAKIAkJCXByaW50ayhLRVJOX0lORk8gIkNsb2NrczogU2V0dGluZyBEU1AgY2xvY2tcbiIpOwogCQkJY2FsY3VsYXRlKGRzcF9iYXNlLCBUTkVURDcyMDBfREVGX0RTUF9DTEssICZkc3BfcHJlZGl2LAogCQkJCSZkc3BfcG9zdGRpdiwgJmRzcF9tdWwpOwotCQkJYXI3X2J1c19jbG9jayA9IGFyN19jcHVfY2xvY2sgLyAyOworCQkJYnVzX2Nsay5yYXRlID0gY3B1X2Nsay5yYXRlIC8gMjsKIAkJCXRuZXRkNzIwMF9zZXRfY2xvY2soZHNwX2Jhc2UsICZjbG9ja3MtPmRzcCwKIAkJCQlkc3BfcHJlZGl2LCBkc3BfcG9zdGRpdiAqIDIsIGRzcF9wb3N0ZGl2LAotCQkJCWRzcF9tdWwgKiAyLCBhcjdfYnVzX2Nsb2NrKTsKKwkJCQlkc3BfbXVsICogMiwgYnVzX2Nsay5yYXRlKTsKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIkNsb2NrczogU3luYyAxOjEgbW9kZVxuIik7CiAKIAkJCXByaW50ayhLRVJOX0lORk8gIkNsb2NrczogU2V0dGluZyBEU1AgY2xvY2tcbiIpOwogCQkJY2FsY3VsYXRlKGRzcF9iYXNlLCBUTkVURDcyMDBfREVGX0RTUF9DTEssICZkc3BfcHJlZGl2LAogCQkJCSZkc3BfcG9zdGRpdiwgJmRzcF9tdWwpOwotCQkJYXI3X2J1c19jbG9jayA9ICgoZHNwX2Jhc2UgLyBkc3BfcHJlZGl2KSAqIGRzcF9tdWwpCisJCQlidXNfY2xrLnJhdGUgPSAoKGRzcF9iYXNlIC8gZHNwX3ByZWRpdikgKiBkc3BfbXVsKQogCQkJCQkJCQkvIGRzcF9wb3N0ZGl2OwogCQkJdG5ldGQ3MjAwX3NldF9jbG9jayhkc3BfYmFzZSwgJmNsb2Nrcy0+ZHNwLAogCQkJCWRzcF9wcmVkaXYsIGRzcF9wb3N0ZGl2ICogMiwgZHNwX3Bvc3RkaXYsCi0JCQkJZHNwX211bCAqIDIsIGFyN19idXNfY2xvY2spOworCQkJCWRzcF9tdWwgKiAyLCBidXNfY2xrLnJhdGUpOwogCi0JCQlhcjdfY3B1X2Nsb2NrID0gYXI3X2J1c19jbG9jazsKKwkJCWNwdV9jbGsucmF0ZSA9IGJ1c19jbGsucmF0ZTsKIAkJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tzOiBTZXR0aW5nIFVTQiBjbG9ja1xuIik7Ci0JdXNiX2Jhc2UgPSBhcjdfYnVzX2Nsb2NrOworCXVzYl9iYXNlID0gYnVzX2Nsay5yYXRlOwogCWNhbGN1bGF0ZSh1c2JfYmFzZSwgVE5FVEQ3MjAwX0RFRl9VU0JfQ0xLLCAmdXNiX3ByZWRpdiwKIAkJJnVzYl9wb3N0ZGl2LCAmdXNiX211bCk7CiAJdG5ldGQ3MjAwX3NldF9jbG9jayh1c2JfYmFzZSwgJmNsb2Nrcy0+dXNiLAogCQl1c2JfcHJlZGl2LCB1c2JfcG9zdGRpdiwgLTEsIHVzYl9tdWwsCiAJCVRORVRENzIwMF9ERUZfVVNCX0NMSyk7CiAKLQlhcjdfZHNwX2Nsb2NrID0gYXI3X2NwdV9jbG9jazsKKwlkc3BfY2xrLnJhdGUgPSBjcHVfY2xrLnJhdGU7CiAKIAlpb3VubWFwKGNsb2Nrcyk7CiAJaW91bm1hcChib290Y3IpOwogfQogCisvKgorICogTGludXggY2xvY2sgQVBJCisgKi8KK2ludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7CisKK3ZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworfQorRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7CisKK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrLT5yYXRlOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCit7CisJaWYgKCFzdHJjbXAoaWQsICJidXMiKSkKKwkJcmV0dXJuICZidXNfY2xrOworCS8qIGNwbWFjIGFuZCB2YnVzIHNoYXJlIHRoZSBzYW1lIHJhdGUgKi8KKwlpZiAoIXN0cmNtcChpZCwgImNwbWFjIikpCisJCXJldHVybiAmdmJ1c19jbGs7CisJaWYgKCFzdHJjbXAoaWQsICJjcHUiKSkKKwkJcmV0dXJuICZjcHVfY2xrOworCWlmICghc3RyY21wKGlkLCAiZHNwIikpOworCQlyZXR1cm4gJmRzcF9jbGs7CisJaWYgKCFzdHJjbXAoaWQsICJ2YnVzIikpCisJCXJldHVybiAmdmJ1c19jbGs7CisJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXQpOworCit2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQoreworfQorRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKKwogaW50IF9faW5pdCBhcjdfaW5pdF9jbG9ja3Modm9pZCkKIHsKIAlzd2l0Y2ggKGFyN19jaGlwX2lkKCkpIHsKQEAgLTQxNSwxMiArNDY0LDE0IEBACiAJCXRuZXRkNzIwMF9pbml0X2Nsb2NrcygpOwogCQlicmVhazsKIAljYXNlIEFSN19DSElQXzczMDA6Ci0JCWFyN19kc3BfY2xvY2sgPSB0bmV0ZDczMDBfZHNwX2Nsb2NrKCk7CisJCWRzcF9jbGsucmF0ZSA9IHRuZXRkNzMwMF9kc3BfY2xvY2soKTsKIAkJdG5ldGQ3MzAwX2luaXRfY2xvY2tzKCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KKwkvKiBhZGp1c3QgdmJ1cyBjbG9jayByYXRlICovCisJdmJ1c19jbGsucmF0ZSA9IGJ1c19jbGsucmF0ZSAvIDI7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hcjcvZ3Bpby5jIGIvYXJjaC9taXBzL2FyNy9ncGlvLmMKaW5kZXggNzRlMTRhMy4uYzMyZmJiNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy9ncGlvLmMKKysrIGIvYXJjaC9taXBzL2FyNy9ncGlvLmMKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEZlbGl4IEZpZXRrYXUgPG5iZEBvcGVud3J0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNyBFdWdlbmUgS29uZXYgPGVqa2FAb3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE4LDMxICsxOSwxMTMgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtYXI3L2dwaW8uaD4KIAotc3RhdGljIGNvbnN0IGNoYXIgKmFyN19ncGlvX2xpc3RbQVI3X0dQSU9fTUFYXTsKK3N0cnVjdCBhcjdfZ3Bpb19jaGlwIHsKKwl2b2lkIF9faW9tZW0JCSpyZWdzOworCXN0cnVjdCBncGlvX2NoaXAJY2hpcDsKK307CiAKLWludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpCitzdGF0aWMgaW50IGFyN19ncGlvX2dldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBncGlvKQogewotCWlmIChncGlvID49IEFSN19HUElPX01BWCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJc3RydWN0IGFyN19ncGlvX2NoaXAgKmdwY2ggPQorCQkJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXI3X2dwaW9fY2hpcCwgY2hpcCk7CisJdm9pZCBfX2lvbWVtICpncGlvX2luID0gZ3BjaC0+cmVncyArIEFSN19HUElPX0lOUFVUOwogCi0JaWYgKGFyN19ncGlvX2xpc3RbZ3Bpb10pCi0JCXJldHVybiAtRUJVU1k7CisJcmV0dXJuIHJlYWRsKGdwaW9faW4pICYgKDEgPDwgZ3Bpbyk7Cit9CiAKLQlpZiAobGFiZWwpCi0JCWFyN19ncGlvX2xpc3RbZ3Bpb10gPSBsYWJlbDsKLQllbHNlCi0JCWFyN19ncGlvX2xpc3RbZ3Bpb10gPSAiYnVzeSI7CitzdGF0aWMgdm9pZCBhcjdfZ3Bpb19zZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQl1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGFyN19ncGlvX2NoaXAgKmdwY2ggPQorCQkJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXI3X2dwaW9fY2hpcCwgY2hpcCk7CisJdm9pZCBfX2lvbWVtICpncGlvX291dCA9IGdwY2gtPnJlZ3MgKyBBUjdfR1BJT19PVVRQVVQ7CisJdW5zaWduZWQgdG1wOworCisJdG1wID0gcmVhZGwoZ3Bpb19vdXQpICYgfigxIDw8IGdwaW8pOworCWlmICh2YWx1ZSkKKwkJdG1wIHw9IDEgPDwgZ3BpbzsKKwl3cml0ZWwodG1wLCBncGlvX291dCk7Cit9CisKK3N0YXRpYyBpbnQgYXI3X2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IGFyN19ncGlvX2NoaXAgKmdwY2ggPQorCQkJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXI3X2dwaW9fY2hpcCwgY2hpcCk7CisJdm9pZCBfX2lvbWVtICpncGlvX2RpciA9IGdwY2gtPnJlZ3MgKyBBUjdfR1BJT19ESVI7CisKKwl3cml0ZWwocmVhZGwoZ3Bpb19kaXIpIHwgKDEgPDwgZ3BpbyksIGdwaW9fZGlyKTsKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChncGlvX3JlcXVlc3QpOwogCi12b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQorc3RhdGljIGludCBhcjdfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCXVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKIHsKLQlCVUdfT04oIWFyN19ncGlvX2xpc3RbZ3Bpb10pOwotCWFyN19ncGlvX2xpc3RbZ3Bpb10gPSBOVUxMOworCXN0cnVjdCBhcjdfZ3Bpb19jaGlwICpncGNoID0KKwkJCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGFyN19ncGlvX2NoaXAsIGNoaXApOworCXZvaWQgX19pb21lbSAqZ3Bpb19kaXIgPSBncGNoLT5yZWdzICsgQVI3X0dQSU9fRElSOworCisJYXI3X2dwaW9fc2V0X3ZhbHVlKGNoaXAsIGdwaW8sIHZhbHVlKTsKKwl3cml0ZWwocmVhZGwoZ3Bpb19kaXIpICYgfigxIDw8IGdwaW8pLCBncGlvX2Rpcik7CisKKwlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woZ3Bpb19mcmVlKTsKKworc3RhdGljIHN0cnVjdCBhcjdfZ3Bpb19jaGlwIGFyN19ncGlvX2NoaXAgPSB7CisJLmNoaXAgPSB7CisJCS5sYWJlbAkJCT0gImFyNy1ncGlvIiwKKwkJLmRpcmVjdGlvbl9pbnB1dAk9IGFyN19ncGlvX2RpcmVjdGlvbl9pbnB1dCwKKwkJLmRpcmVjdGlvbl9vdXRwdXQJPSBhcjdfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0LAorCQkuc2V0CQkJPSBhcjdfZ3Bpb19zZXRfdmFsdWUsCisJCS5nZXQJCQk9IGFyN19ncGlvX2dldF92YWx1ZSwKKwkJLmJhc2UJCQk9IDAsCisJCS5uZ3BpbwkJCT0gQVI3X0dQSU9fTUFYLAorCX0KK307CisKK2ludCBhcjdfZ3Bpb19lbmFibGUodW5zaWduZWQgZ3BpbykKK3sKKwl2b2lkIF9faW9tZW0gKmdwaW9fZW4gPSBhcjdfZ3Bpb19jaGlwLnJlZ3MgKyBBUjdfR1BJT19FTkFCTEU7CisKKwl3cml0ZWwocmVhZGwoZ3Bpb19lbikgfCAoMSA8PCBncGlvKSwgZ3Bpb19lbik7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woYXI3X2dwaW9fZW5hYmxlKTsKKworaW50IGFyN19ncGlvX2Rpc2FibGUodW5zaWduZWQgZ3BpbykKK3sKKwl2b2lkIF9faW9tZW0gKmdwaW9fZW4gPSBhcjdfZ3Bpb19jaGlwLnJlZ3MgKyBBUjdfR1BJT19FTkFCTEU7CisKKwl3cml0ZWwocmVhZGwoZ3Bpb19lbikgJiB+KDEgPDwgZ3BpbyksIGdwaW9fZW4pOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGFyN19ncGlvX2Rpc2FibGUpOworCitzdGF0aWMgaW50IF9faW5pdCBhcjdfZ3Bpb19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWFyN19ncGlvX2NoaXAucmVncyA9IGlvcmVtYXBfbm9jYWNoZShBUjdfUkVHU19HUElPLAorCQkJCQlBUjdfUkVHU19HUElPICsgMHgxMCk7CisKKwlpZiAoIWFyN19ncGlvX2NoaXAucmVncykgeworCQlwcmludGsoS0VSTl9FUlIgImFyNy1ncGlvOiBmYWlsZWQgdG8gaW9yZW1hcCByZWdzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZhcjdfZ3Bpb19jaGlwLmNoaXApOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhcjctZ3BpbzogZmFpbGVkIHRvIGFkZCBncGlvY2hpcFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXByaW50ayhLRVJOX0lORk8gImFyNy1ncGlvOiByZWdpc3RlcmVkICVkIEdQSU9zXG4iLAorCQkJCWFyN19ncGlvX2NoaXAuY2hpcC5uZ3Bpbyk7CisJcmV0dXJuIHJldDsKK30KK2FyY2hfaW5pdGNhbGwoYXI3X2dwaW9faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXI3L21lbW9yeS5jIGIvYXJjaC9taXBzL2FyNy9tZW1vcnkuYwppbmRleCA2OTZjNzIzLi4yOGFiZmVlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXI3L21lbW9yeS5jCisrKyBiL2FyY2gvbWlwcy9hcjcvbWVtb3J5LmMKQEAgLTYyLDggKzYyLDcgQEAKIAl1bnNpZ25lZCBsb25nIHBhZ2VzOwogCiAJcGFnZXMgPSBtZW1zaXplKCkgPj4gUEFHRV9TSElGVDsKLQlhZGRfbWVtb3J5X3JlZ2lvbihQSFlTX09GRlNFVCwgcGFnZXMgPDwgUEFHRV9TSElGVCwKLQkJCSAgQk9PVF9NRU1fUkFNKTsKKwlhZGRfbWVtb3J5X3JlZ2lvbihQSFlTX09GRlNFVCwgcGFnZXMgPDwgUEFHRV9TSElGVCwgQk9PVF9NRU1fUkFNKTsKIH0KIAogdm9pZCBfX2luaXQgcHJvbV9mcmVlX3Byb21fbWVtb3J5KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMKaW5kZXggZjcwYTEwYS4uMjQ2ZGY3YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYwpAQCAtMzQsNDUgKzM0LDUwIEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9waHlfZml4ZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXI3L2FyNy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWFyNy9ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXI3L3Byb20uaD4KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWTFlOUSBCdXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RydWN0IHBsYXRfdmx5bnFfZGF0YSB7CiAJc3RydWN0IHBsYXRfdmx5bnFfb3BzIG9wczsKIAlpbnQgZ3Bpb19iaXQ7CiAJaW50IHJlc2V0X2JpdDsKIH07CiAKLQogc3RhdGljIGludCB2bHlucV9vbihzdHJ1Y3Qgdmx5bnFfZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJlc3VsdDsKKwlpbnQgcmV0OwogCXN0cnVjdCBwbGF0X3ZseW5xX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAotCXJlc3VsdCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+Z3Bpb19iaXQsICJ2bHlucSIpOwotCWlmIChyZXN1bHQpCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5ncGlvX2JpdCwgInZseW5xIik7CisJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKIAlhcjdfZGV2aWNlX3Jlc2V0KHBkYXRhLT5yZXNldF9iaXQpOwogCi0JcmVzdWx0ID0gYXI3X2dwaW9fZGlzYWJsZShwZGF0YS0+Z3Bpb19iaXQpOwotCWlmIChyZXN1bHQpCisJcmV0ID0gYXI3X2dwaW9fZGlzYWJsZShwZGF0YS0+Z3Bpb19iaXQpOworCWlmIChyZXQpCiAJCWdvdG8gb3V0X2VuYWJsZWQ7CiAKLQlyZXN1bHQgPSBhcjdfZ3Bpb19lbmFibGUocGRhdGEtPmdwaW9fYml0KTsKLQlpZiAocmVzdWx0KQorCXJldCA9IGFyN19ncGlvX2VuYWJsZShwZGF0YS0+Z3Bpb19iaXQpOworCWlmIChyZXQpCiAJCWdvdG8gb3V0X2VuYWJsZWQ7CiAKLQlyZXN1bHQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQocGRhdGEtPmdwaW9fYml0LCAwKTsKLQlpZiAocmVzdWx0KQorCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChwZGF0YS0+Z3Bpb19iaXQsIDApOworCWlmIChyZXQpCiAJCWdvdG8gb3V0X2dwaW9fZW5hYmxlZDsKIAogCW1zbGVlcCg1MCk7CiAKIAlncGlvX3NldF92YWx1ZShwZGF0YS0+Z3Bpb19iaXQsIDEpOworCiAJbXNsZWVwKDUwKTsKIAogCXJldHVybiAwOwpAQCAtODMsMzUyICs4OCwyMDggQEAKIAlhcjdfZGV2aWNlX2Rpc2FibGUocGRhdGEtPnJlc2V0X2JpdCk7CiAJZ3Bpb19mcmVlKHBkYXRhLT5ncGlvX2JpdCk7CiBvdXQ6Ci0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCB2bHlucV9vZmYoc3RydWN0IHZseW5xX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBwbGF0X3ZseW5xX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwogCWFyN19ncGlvX2Rpc2FibGUocGRhdGEtPmdwaW9fYml0KTsKIAlncGlvX2ZyZWUocGRhdGEtPmdwaW9fYml0KTsKIAlhcjdfZGV2aWNlX2Rpc2FibGUocGRhdGEtPnJlc2V0X2JpdCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGh5c21hcF9mbGFzaF9yZXNvdXJjZSA9IHsKLQkubmFtZSA9ICJtZW0iLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCS5zdGFydCA9IDB4MTAwMDAwMDAsCi0JLmVuZCA9IDB4MTA3ZmZmZmYsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGNwbWFjX2xvd19yZXNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInJlZ3MiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJLnN0YXJ0ID0gQVI3X1JFR1NfTUFDMCwKLQkJLmVuZCA9IEFSN19SRUdTX01BQzAgKyAweDdmZiwKLQl9LAotCXsKLQkJLm5hbWUgPSAiaXJxIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JCS5zdGFydCA9IDI3LAotCQkuZW5kID0gMjcsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY3BtYWNfaGlnaF9yZXNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInJlZ3MiLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJLnN0YXJ0ID0gQVI3X1JFR1NfTUFDMSwKLQkJLmVuZCA9IEFSN19SRUdTX01BQzEgKyAweDdmZiwKLQl9LAotCXsKLQkJLm5hbWUgPSAiaXJxIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JCS5zdGFydCA9IDQxLAotCQkuZW5kID0gNDEsCi0JfSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugdmx5bnFfbG93X3Jlc1tdID0gewogCXsKLQkJLm5hbWUgPSAicmVncyIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCQkuc3RhcnQgPSBBUjdfUkVHU19WTFlOUTAsCi0JCS5lbmQgPSBBUjdfUkVHU19WTFlOUTAgKyAweGZmLAorCQkubmFtZQk9ICJyZWdzIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydAk9IEFSN19SRUdTX1ZMWU5RMCwKKwkJLmVuZAk9IEFSN19SRUdTX1ZMWU5RMCArIDB4ZmYsCiAJfSwKIAl7Ci0JCS5uYW1lID0gImlycSIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCQkuc3RhcnQgPSAyOSwKLQkJLmVuZCA9IDI5LAorCQkubmFtZQk9ICJpcnEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0CT0gMjksCisJCS5lbmQJPSAyOSwKIAl9LAogCXsKLQkJLm5hbWUgPSAibWVtIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JCS5zdGFydCA9IDB4MDQwMDAwMDAsCi0JCS5lbmQgPSAweDA0ZmZmZmZmLAorCQkubmFtZQk9ICJtZW0iLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0CT0gMHgwNDAwMDAwMCwKKwkJLmVuZAk9IDB4MDRmZmZmZmYsCiAJfSwKIAl7Ci0JCS5uYW1lID0gImRldmlycSIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCQkuc3RhcnQgPSA4MCwKLQkJLmVuZCA9IDExMSwKKwkJLm5hbWUJPSAiZGV2aXJxIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydAk9IDgwLAorCQkuZW5kCT0gMTExLAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHZseW5xX2hpZ2hfcmVzW10gPSB7CiAJewotCQkubmFtZSA9ICJyZWdzIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JCS5zdGFydCA9IEFSN19SRUdTX1ZMWU5RMSwKLQkJLmVuZCA9IEFSN19SRUdTX1ZMWU5RMSArIDB4ZmYsCisJCS5uYW1lCT0gInJlZ3MiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0CT0gQVI3X1JFR1NfVkxZTlExLAorCQkuZW5kCT0gQVI3X1JFR1NfVkxZTlExICsgMHhmZiwKIAl9LAogCXsKLQkJLm5hbWUgPSAiaXJxIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JCS5zdGFydCA9IDMzLAotCQkuZW5kID0gMzMsCisJCS5uYW1lCT0gImlycSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQJPSAzMywKKwkJLmVuZAk9IDMzLAogCX0sCiAJewotCQkubmFtZSA9ICJtZW0iLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJLnN0YXJ0ID0gMHgwYzAwMDAwMCwKLQkJLmVuZCA9IDB4MGNmZmZmZmYsCisJCS5uYW1lCT0gIm1lbSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQJPSAweDBjMDAwMDAwLAorCQkuZW5kCT0gMHgwY2ZmZmZmZiwKIAl9LAogCXsKLQkJLm5hbWUgPSAiZGV2aXJxIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JCS5zdGFydCA9IDExMiwKLQkJLmVuZCA9IDE0MywKKwkJLm5hbWUJPSAiZGV2aXJxIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydAk9IDExMiwKKwkJLmVuZAk9IDE0MywKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2JfcmVzW10gPSB7Ci0JewotCQkubmFtZSA9ICJyZWdzIiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JCS5zdGFydCA9IEFSN19SRUdTX1VTQiwKLQkJLmVuZCA9IEFSN19SRUdTX1VTQiArIDB4ZmYsCi0JfSwKLQl7Ci0JCS5uYW1lID0gImlycSIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCQkuc3RhcnQgPSAzMiwKLQkJLmVuZCA9IDMyLAotCX0sCi0JewotCQkubmFtZSA9ICJtZW0iLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJLnN0YXJ0ID0gMHgwMzQwMDAwMCwKLQkJLmVuZCA9IDB4MDM0MDFmZmYsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHBoeXNtYXBfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGggPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIGZpeGVkX3BoeV9zdGF0dXMgX19pbml0ZGF0YSA9IHsKLQkubGluayA9IDEsCi0JLnNwZWVkID0gMTAwLAotCS5kdXBsZXggPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0X2NwbWFjX2RhdGEgY3BtYWNfbG93X2RhdGEgPSB7Ci0JLnJlc2V0X2JpdCA9IDE3LAotCS5wb3dlcl9iaXQgPSAyMCwKLQkucGh5X21hc2sgPSAweDgwMDAwMDAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0X2NwbWFjX2RhdGEgY3BtYWNfaGlnaF9kYXRhID0gewotCS5yZXNldF9iaXQgPSAyMSwKLQkucG93ZXJfYml0ID0gMjIsCi0JLnBoeV9tYXNrID0gMHg3ZmZmZmZmZiwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcGxhdF92bHlucV9kYXRhIHZseW5xX2xvd19kYXRhID0gewotCS5vcHMub24gPSB2bHlucV9vbiwKLQkub3BzLm9mZiA9IHZseW5xX29mZiwKLQkucmVzZXRfYml0ID0gMjAsCi0JLmdwaW9fYml0ID0gMTgsCisJLm9wcyA9IHsKKwkJLm9uCT0gdmx5bnFfb24sCisJCS5vZmYJPSB2bHlucV9vZmYsCisJfSwKKwkucmVzZXRfYml0CT0gMjAsCisJLmdwaW9fYml0CT0gMTgsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRfdmx5bnFfZGF0YSB2bHlucV9oaWdoX2RhdGEgPSB7Ci0JLm9wcy5vbiA9IHZseW5xX29uLAotCS5vcHMub2ZmID0gdmx5bnFfb2ZmLAotCS5yZXNldF9iaXQgPSAxNiwKLQkuZ3Bpb19iaXQgPSAxOSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBoeXNtYXBfZmxhc2ggPSB7Ci0JLmlkID0gMCwKLQkubmFtZSA9ICJwaHlzbWFwLWZsYXNoIiwKLQkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmcGh5c21hcF9mbGFzaF9kYXRhLAotCS5yZXNvdXJjZSA9ICZwaHlzbWFwX2ZsYXNoX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLX07Ci0KLXN0YXRpYyB1NjQgY3BtYWNfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3BtYWNfbG93ID0gewotCS5pZCA9IDAsCi0JLm5hbWUgPSAiY3BtYWMiLAotCS5kZXYgPSB7Ci0JCS5kbWFfbWFzayA9ICZjcG1hY19kbWFfbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmY3BtYWNfbG93X2RhdGEsCisJLm9wcyA9IHsKKwkJLm9uCT0gdmx5bnFfb24sCisJCS5vZmYJPSB2bHlucV9vZmYsCiAJfSwKLQkucmVzb3VyY2UgPSBjcG1hY19sb3dfcmVzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShjcG1hY19sb3dfcmVzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNwbWFjX2hpZ2ggPSB7Ci0JLmlkID0gMSwKLQkubmFtZSA9ICJjcG1hYyIsCi0JLmRldiA9IHsKLQkJLmRtYV9tYXNrID0gJmNwbWFjX2RtYV9tYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAotCQkucGxhdGZvcm1fZGF0YSA9ICZjcG1hY19oaWdoX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UgPSBjcG1hY19oaWdoX3JlcywKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoY3BtYWNfaGlnaF9yZXMpLAorCS5yZXNldF9iaXQJPSAyNiwKKwkuZ3Bpb19iaXQJPSAxOSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZseW5xX2xvdyA9IHsKLQkuaWQgPSAwLAotCS5uYW1lID0gInZseW5xIiwKLQkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmdmx5bnFfbG93X2RhdGEsCi0JLnJlc291cmNlID0gdmx5bnFfbG93X3JlcywKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodmx5bnFfbG93X3JlcyksCisJLmlkCQk9IDAsCisJLm5hbWUJCT0gInZseW5xIiwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZ2bHlucV9sb3dfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IHZseW5xX2xvd19yZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHZseW5xX2xvd19yZXMpLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugdmx5bnFfaGlnaCA9IHsKLQkuaWQgPSAxLAotCS5uYW1lID0gInZseW5xIiwKLQkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmdmx5bnFfaGlnaF9kYXRhLAotCS5yZXNvdXJjZSA9IHZseW5xX2hpZ2hfcmVzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh2bHlucV9oaWdoX3JlcyksCi19OwotCi0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZGVmYXVsdF9sZWRzW10gPSB7Ci0JewotCQkubmFtZSA9ICJzdGF0dXMiLAotCQkuZ3BpbyA9IDgsCi0JCS5hY3RpdmVfbG93ID0gMSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBkc2w1MDJ0X2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInN0YXR1cyIsCi0JCS5ncGlvID0gOSwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICJldGhlcm5ldCIsCi0JCS5ncGlvID0gNywKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICJ1c2IiLAotCQkuZ3BpbyA9IDEyLAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZGc4MzRnX2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInBwcCIsCi0JCS5ncGlvID0gNiwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICJzdGF0dXMiLAotCQkuZ3BpbyA9IDcsCi0JCS5hY3RpdmVfbG93ID0gMSwKLQl9LAotCXsKLQkJLm5hbWUgPSAiYWRzbCIsCi0JCS5ncGlvID0gOCwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICJ3aWZpIiwKLQkJLmdwaW8gPSAxMiwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICJwb3dlciIsCi0JCS5ncGlvID0gMTQsCi0JCS5hY3RpdmVfbG93ID0gMSwKLQkJLmRlZmF1bHRfdHJpZ2dlciA9ICJkZWZhdWx0LW9uIiwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZCBmYl9zbF9sZWRzW10gPSB7Ci0JewotCQkubmFtZSA9ICIxIiwKLQkJLmdwaW8gPSA3LAotCX0sCi0JewotCQkubmFtZSA9ICIyIiwKLQkJLmdwaW8gPSAxMywKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICIzIiwKLQkJLmdwaW8gPSAxMCwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICI0IiwKLQkJLmdwaW8gPSAxMiwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICI1IiwKLQkJLmdwaW8gPSA5LAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZmJfZm9uX2xlZHNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gIjEiLAotCQkuZ3BpbyA9IDgsCi0JfSwKLQl7Ci0JCS5uYW1lID0gIjIiLAotCQkuZ3BpbyA9IDMsCi0JCS5hY3RpdmVfbG93ID0gMSwKLQl9LAotCXsKLQkJLm5hbWUgPSAiMyIsCi0JCS5ncGlvID0gNSwKLQl9LAotCXsKLQkJLm5hbWUgPSAiNCIsCi0JCS5ncGlvID0gNCwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi0JewotCQkubmFtZSA9ICI1IiwKLQkJLmdwaW8gPSAxMSwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgYXI3X2xlZF9kYXRhOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhcjdfZ3Bpb19sZWRzID0gewotCS5uYW1lID0gImxlZHMtZ3BpbyIsCi0JLmlkID0gLTEsCisJLmlkCQk9IDEsCisJLm5hbWUJCT0gInZseW5xIiwKIAkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZhcjdfbGVkX2RhdGEsCi0JfQorCQkucGxhdGZvcm1fZGF0YQk9ICZ2bHlucV9oaWdoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSB2bHlucV9oaWdoX3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodmx5bnFfaGlnaF9yZXMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXI3X3VkYyA9IHsKLQkuaWQgPSAtMSwKLQkubmFtZSA9ICJhcjdfdWRjIiwKLQkucmVzb3VyY2UgPSB1c2JfcmVzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1c2JfcmVzKSwKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmxhc2gKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwaHlzbWFwX2ZsYXNoX3Jlc291cmNlID0geworCS5uYW1lCT0gIm1lbSIsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJLnN0YXJ0CT0gMHgxMDAwMDAwMCwKKwkuZW5kCT0gMHgxMDdmZmZmZiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXI3X3dkdF9yZXMgPSB7Ci0JLm5hbWUgPSAicmVncyIsCi0JLnN0YXJ0ID0gLTEsIC8qIEZpbGxlZCBhdCBydW50aW1lICovCi0JLmVuZCA9IC0xLCAvKiBGaWxsZWQgYXQgcnVudGltZSAqLwotCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGh5c21hcF9mbGFzaF9kYXRhID0geworCS53aWR0aAk9IDIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhcjdfd2R0ID0gewotCS5pZCA9IC0xLAotCS5uYW1lICA9ICJhcjdfd2R0IiwKLQkucmVzb3VyY2UgPSAmYXI3X3dkdF9yZXMsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGh5c21hcF9mbGFzaCA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcGh5c21hcF9mbGFzaF9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gJnBoeXNtYXBfZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFdGhlcm5ldAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNwbWFjX2xvd19yZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gInJlZ3MiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0CT0gQVI3X1JFR1NfTUFDMCwKKwkJLmVuZAk9IEFSN19SRUdTX01BQzAgKyAweDdmZiwKKwl9LAorCXsKKwkJLm5hbWUJPSAiaXJxIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydAk9IDI3LAorCQkuZW5kIAk9IDI3LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNwbWFjX2hpZ2hfcmVzW10gPSB7CisJeworCQkubmFtZQk9ICJyZWdzIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydAk9IEFSN19SRUdTX01BQzEsCisJCS5lbmQJPSBBUjdfUkVHU19NQUMxICsgMHg3ZmYsCisJfSwKKwl7CisJCS5uYW1lCT0gImlycSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQJPSA0MSwKKwkJLmVuZAk9IDQxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGZpeGVkX3BoeV9zdGF0dXMgZml4ZWRfcGh5X3N0YXR1cyBfX2luaXRkYXRhID0geworCS5saW5rCQk9IDEsCisJLnNwZWVkCQk9IDEwMCwKKwkuZHVwbGV4CQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfY3BtYWNfZGF0YSBjcG1hY19sb3dfZGF0YSA9IHsKKwkucmVzZXRfYml0CT0gMTcsCisJLnBvd2VyX2JpdAk9IDIwLAorCS5waHlfbWFzawk9IDB4ODAwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfY3BtYWNfZGF0YSBjcG1hY19oaWdoX2RhdGEgPSB7CisJLnJlc2V0X2JpdAk9IDIxLAorCS5wb3dlcl9iaXQJPSAyMiwKKwkucGh5X21hc2sJPSAweDdmZmZmZmZmLAorfTsKKworc3RhdGljIHU2NCBjcG1hY19kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNwbWFjX2xvdyA9IHsKKwkuaWQJCT0gMCwKKwkubmFtZQkJPSAiY3BtYWMiLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzawkJPSAmY3BtYWNfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZjcG1hY19sb3dfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGNwbWFjX2xvd19yZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNwbWFjX2xvd19yZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3BtYWNfaGlnaCA9IHsKKwkuaWQJCT0gMSwKKwkubmFtZQkJPSAiY3BtYWMiLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzawkJPSAmY3BtYWNfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZjcG1hY19oaWdoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBjcG1hY19oaWdoX3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY3BtYWNfaGlnaF9yZXMpLAogfTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGNoYXIyaGV4KGNoYXIgaCkKQEAgLTQ2Nyw2ICszMjgsMTU2IEBACiAJCQljaGFyMmhleChtYWNbaSAqIDMgKyAxXSk7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVVNCCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiX3Jlc1tdID0geworCXsKKwkJLm5hbWUJPSAicmVncyIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQJPSBBUjdfUkVHU19VU0IsCisJCS5lbmQJPSBBUjdfUkVHU19VU0IgKyAweGZmLAorCX0sCisJeworCQkubmFtZQk9ICJpcnEiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0CT0gMzIsCisJCS5lbmQJPSAzMiwKKwl9LAorCXsKKwkJLm5hbWUJPSAibWVtIiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydAk9IDB4MDM0MDAwMDAsCisJCS5lbmQJPSAweDAzNDAxZmZmLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhcjdfdWRjID0geworCS5uYW1lCQk9ICJhcjdfdWRjIiwKKwkucmVzb3VyY2UJPSB1c2JfcmVzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JfcmVzKSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTEVEcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGRlZmF1bHRfbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJzdGF0dXMiLAorCQkuZ3BpbwkJCT0gOCwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBkc2w1MDJ0X2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAic3RhdHVzIiwKKwkJLmdwaW8JCQk9IDksCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiZXRoZXJuZXQiLAorCQkuZ3BpbwkJCT0gNywKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJ1c2IiLAorCQkuZ3BpbwkJCT0gMTIsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZGc4MzRnX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAicHBwIiwKKwkJLmdwaW8JCQk9IDYsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAic3RhdHVzIiwKKwkJLmdwaW8JCQk9IDcsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiYWRzbCIsCisJCS5ncGlvCQkJPSA4LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gIndpZmkiLAorCQkuZ3BpbwkJCT0gMTIsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAicG93ZXIiLAorCQkuZ3BpbwkJCT0gMTQsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiZGVmYXVsdC1vbiIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZmJfc2xfbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICIxIiwKKwkJLmdwaW8JCQk9IDcsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiMiIsCisJCS5ncGlvCQkJPSAxMywKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICIzIiwKKwkJLmdwaW8JCQk9IDEwLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gIjQiLAorCQkuZ3BpbwkJCT0gMTIsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiNSIsCisJCS5ncGlvCQkJPSA5LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGZiX2Zvbl9sZWRzW10gPSB7CisJeworCQkubmFtZQkJCT0gIjEiLAorCQkuZ3BpbwkJCT0gOCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICIyIiwKKwkJLmdwaW8JCQk9IDMsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiMyIsCisJCS5ncGlvCQkJPSA1LAorCX0sCisJeworCQkubmFtZQkJCT0gIjQiLAorCQkuZ3BpbwkJCT0gNCwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICI1IiwKKwkJLmdwaW8JCQk9IDExLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgYXI3X2xlZF9kYXRhOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhcjdfZ3Bpb19sZWRzID0geworCS5uYW1lID0gImxlZHMtZ3BpbyIsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYXI3X2xlZF9kYXRhLAorCX0KK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBkZXRlY3RfbGVkcyh2b2lkKQogewogCWNoYXIgKnByaWQsICp1c2JfcHJvZDsKQEAgLTQ5OSwxMTEgKzUxMCwxNDkgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGFyN19yZWdpc3Rlcl9kZXZpY2VzKHZvaWQpCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFdhdGNoZG9nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXI3X3dkdF9yZXMgPSB7CisJLm5hbWUJCT0gInJlZ3MiLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwkuc3RhcnQJCT0gLTEsCS8qIEZpbGxlZCBhdCBydW50aW1lICovCisJLmVuZAkJPSAtMSwJLyogRmlsbGVkIGF0IHJ1bnRpbWUgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFyN193ZHQgPSB7CisJLm5hbWUJCT0gImFyN193ZHQiLAorCS5yZXNvdXJjZQk9ICZhcjdfd2R0X3JlcywKKwkubnVtX3Jlc291cmNlcwk9IDEsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEluaXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBfX2luaXQgYXI3X3JlZ2lzdGVyX3VhcnRzKHZvaWQpCiB7Ci0JdTE2IGNoaXBfaWQ7Ci0JaW50IHJlczsKLQl1MzIgKmJvb3RjciwgdmFsOwogI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MAotCXN0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IHVhcnRfcG9ydFsyXSBfX2luaXRkYXRhOworCXN0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IHVhcnRfcG9ydCBfX2luaXRkYXRhOworCXN0cnVjdCBjbGsgKmJ1c19jbGs7CisJaW50IHJlczsKIAotCW1lbXNldCh1YXJ0X3BvcnQsIDAsIHNpemVvZihzdHJ1Y3QgdWFydF9wb3J0KSAqIDIpOworCW1lbXNldCgmdWFydF9wb3J0LCAwLCBzaXplb2Yoc3RydWN0IHVhcnRfcG9ydCkpOwogCi0JdWFydF9wb3J0WzBdLnR5cGUgPSBQT1JUXzE2NTUwQTsKLQl1YXJ0X3BvcnRbMF0ubGluZSA9IDA7Ci0JdWFydF9wb3J0WzBdLmlycSA9IEFSN19JUlFfVUFSVDA7Ci0JdWFydF9wb3J0WzBdLnVhcnRjbGsgPSBhcjdfYnVzX2ZyZXEoKSAvIDI7Ci0JdWFydF9wb3J0WzBdLmlvdHlwZSA9IFVQSU9fTUVNMzI7Ci0JdWFydF9wb3J0WzBdLm1hcGJhc2UgPSBBUjdfUkVHU19VQVJUMDsKLQl1YXJ0X3BvcnRbMF0ubWVtYmFzZSA9IGlvcmVtYXAodWFydF9wb3J0WzBdLm1hcGJhc2UsIDI1Nik7Ci0JdWFydF9wb3J0WzBdLnJlZ3NoaWZ0ID0gMjsKLQlyZXMgPSBlYXJseV9zZXJpYWxfc2V0dXAoJnVhcnRfcG9ydFswXSk7CisJYnVzX2NsayA9IGNsa19nZXQoTlVMTCwgImJ1cyIpOworCWlmIChJU19FUlIoYnVzX2NsaykpCisJCXBhbmljKCJ1bmFibGUgdG8gZ2V0IGJ1cyBjbGtcbiIpOworCisJdWFydF9wb3J0LnR5cGUJCT0gUE9SVF8xNjU1MEE7CisJdWFydF9wb3J0LnVhcnRjbGsJPSBjbGtfZ2V0X3JhdGUoYnVzX2NsaykgLyAyOworCXVhcnRfcG9ydC5pb3R5cGUJPSBVUElPX01FTTMyOworCXVhcnRfcG9ydC5yZWdzaGlmdAk9IDI7CisKKwl1YXJ0X3BvcnQubGluZQkJPSAwOworCXVhcnRfcG9ydC5pcnEJCT0gQVI3X0lSUV9VQVJUMDsKKwl1YXJ0X3BvcnQubWFwYmFzZQk9IEFSN19SRUdTX1VBUlQwOworCXVhcnRfcG9ydC5tZW1iYXNlCT0gaW9yZW1hcCh1YXJ0X3BvcnQubWFwYmFzZSwgMjU2KTsKKworCXJlcyA9IGVhcmx5X3NlcmlhbF9zZXR1cCgmdWFydF9wb3J0KTsKIAlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwogCi0KIAkvKiBPbmx5IFRORVRENzN4eCBoYXZlIGEgc2Vjb25kIHNlcmlhbCBwb3J0ICovCiAJaWYgKGFyN19oYXNfc2Vjb25kX3VhcnQoKSkgewotCQl1YXJ0X3BvcnRbMV0udHlwZSA9IFBPUlRfMTY1NTBBOwotCQl1YXJ0X3BvcnRbMV0ubGluZSA9IDE7Ci0JCXVhcnRfcG9ydFsxXS5pcnEgPSBBUjdfSVJRX1VBUlQxOwotCQl1YXJ0X3BvcnRbMV0udWFydGNsayA9IGFyN19idXNfZnJlcSgpIC8gMjsKLQkJdWFydF9wb3J0WzFdLmlvdHlwZSA9IFVQSU9fTUVNMzI7Ci0JCXVhcnRfcG9ydFsxXS5tYXBiYXNlID0gVVI4X1JFR1NfVUFSVDE7Ci0JCXVhcnRfcG9ydFsxXS5tZW1iYXNlID0gaW9yZW1hcCh1YXJ0X3BvcnRbMV0ubWFwYmFzZSwgMjU2KTsKLQkJdWFydF9wb3J0WzFdLnJlZ3NoaWZ0ID0gMjsKLQkJcmVzID0gZWFybHlfc2VyaWFsX3NldHVwKCZ1YXJ0X3BvcnRbMV0pOworCQl1YXJ0X3BvcnQubGluZQkJPSAxOworCQl1YXJ0X3BvcnQuaXJxCQk9IEFSN19JUlFfVUFSVDE7CisJCXVhcnRfcG9ydC5tYXBiYXNlCT0gVVI4X1JFR1NfVUFSVDE7CisJCXVhcnRfcG9ydC5tZW1iYXNlCT0gaW9yZW1hcCh1YXJ0X3BvcnQubWFwYmFzZSwgMjU2KTsKKworCQlyZXMgPSBlYXJseV9zZXJpYWxfc2V0dXAoJnVhcnRfcG9ydCk7CiAJCWlmIChyZXMpCiAJCQlyZXR1cm4gcmVzOwogCX0KLSNlbmRpZiAvKiBDT05GSUdfU0VSSUFMXzgyNTAgKi8KKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFyN19yZWdpc3Rlcl9kZXZpY2VzKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpib290Y3I7CisJdTMyIHZhbDsKKwl1MTYgY2hpcF9pZDsKKwlpbnQgcmVzOworCisJcmVzID0gYXI3X3JlZ2lzdGVyX3VhcnRzKCk7CisJaWYgKHJlcykKKwkJcHJfZXJyKCJ1bmFibGUgdG8gc2V0dXAgdWFydChzKTogJWRcbiIsIHJlcyk7CisKIAlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBoeXNtYXBfZmxhc2gpOwogCWlmIChyZXMpCi0JCXJldHVybiByZXM7CisJCXByX3dhcm5pbmcoInVuYWJsZSB0byByZWdpc3RlciBwaHlzbWFwLWZsYXNoOiAlZFxuIiwgcmVzKTsKIAogCWFyN19kZXZpY2VfZGlzYWJsZSh2bHlucV9sb3dfZGF0YS5yZXNldF9iaXQpOwogCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmdmx5bnFfbG93KTsKIAlpZiAocmVzKQotCQlyZXR1cm4gcmVzOworCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gcmVnaXN0ZXIgdmx5bnEtbG93OiAlZFxuIiwgcmVzKTsKIAogCWlmIChhcjdfaGFzX2hpZ2hfdmx5bnEoKSkgewogCQlhcjdfZGV2aWNlX2Rpc2FibGUodmx5bnFfaGlnaF9kYXRhLnJlc2V0X2JpdCk7CiAJCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmdmx5bnFfaGlnaCk7CiAJCWlmIChyZXMpCi0JCQlyZXR1cm4gcmVzOworCQkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlZ2lzdGVyIHZseW5xLWhpZ2g6ICVkXG4iLCByZXMpOwogCX0KIAogCWlmIChhcjdfaGFzX2hpZ2hfY3BtYWMoKSkgewotCQlyZXMgPSBmaXhlZF9waHlfYWRkKFBIWV9QT0xMLCBjcG1hY19oaWdoLmlkLCAmZml4ZWRfcGh5X3N0YXR1cyk7Ci0JCWlmIChyZXMgJiYgcmVzICE9IC1FTk9ERVYpCi0JCQlyZXR1cm4gcmVzOwotCQljcG1hY19nZXRfbWFjKDEsIGNwbWFjX2hpZ2hfZGF0YS5kZXZfYWRkcik7Ci0JCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY3BtYWNfaGlnaCk7Ci0JCWlmIChyZXMpCi0JCQlyZXR1cm4gcmVzOwotCX0gZWxzZSB7CisJCWlmICghcmVzKSB7CisJCQljcG1hY19nZXRfbWFjKDEsIGNwbWFjX2hpZ2hfZGF0YS5kZXZfYWRkcik7CisKKwkJCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY3BtYWNfaGlnaCk7CisJCQlpZiAocmVzKQorCQkJCXByX3dhcm5pbmcoInVuYWJsZSB0byByZWdpc3RlciBjcG1hYy1oaWdoOiAlZFxuIiwgcmVzKTsKKwkJfSBlbHNlCisJCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gYWRkIGNwbWFjLWhpZ2ggcGh5OiAlZFxuIiwgcmVzKTsKKwl9IGVsc2UKIAkJY3BtYWNfbG93X2RhdGEucGh5X21hc2sgPSAweGZmZmZmZmZmOwotCX0KIAogCXJlcyA9IGZpeGVkX3BoeV9hZGQoUEhZX1BPTEwsIGNwbWFjX2xvdy5pZCwgJmZpeGVkX3BoeV9zdGF0dXMpOwotCWlmIChyZXMgJiYgcmVzICE9IC1FTk9ERVYpCi0JCXJldHVybiByZXM7Ci0KLQljcG1hY19nZXRfbWFjKDAsIGNwbWFjX2xvd19kYXRhLmRldl9hZGRyKTsKLQlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNwbWFjX2xvdyk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKKwlpZiAoIXJlcykgeworCQljcG1hY19nZXRfbWFjKDAsIGNwbWFjX2xvd19kYXRhLmRldl9hZGRyKTsKKwkJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjcG1hY19sb3cpOworCQlpZiAocmVzKQorCQkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlZ2lzdGVyIGNwbWFjLWxvdzogJWRcbiIsIHJlcyk7CisJfSBlbHNlCisJCXByX3dhcm5pbmcoInVuYWJsZSB0byBhZGQgY3BtYWMtbG93IHBoeTogJWRcbiIsIHJlcyk7CiAKIAlkZXRlY3RfbGVkcygpOwogCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXI3X2dwaW9fbGVkcyk7CiAJaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKKwkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlZ2lzdGVyIGxlZHM6ICVkXG4iLCByZXMpOwogCiAJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhcjdfdWRjKTsKLQotCWNoaXBfaWQgPSBhcjdfY2hpcF9pZCgpOwotCXN3aXRjaCAoY2hpcF9pZCkgewotCWNhc2UgQVI3X0NISVBfNzEwMDoKLQljYXNlIEFSN19DSElQXzcyMDA6Ci0JCWFyN193ZHRfcmVzLnN0YXJ0ID0gQVI3X1JFR1NfV0RUOwotCQlicmVhazsKLQljYXNlIEFSN19DSElQXzczMDA6Ci0JCWFyN193ZHRfcmVzLnN0YXJ0ID0gVVI4X1JFR1NfV0RUOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlhcjdfd2R0X3Jlcy5lbmQgPSBhcjdfd2R0X3Jlcy5zdGFydCArIDB4MjA7Ci0KLQlib290Y3IgPSAodTMyICopaW9yZW1hcF9ub2NhY2hlKEFSN19SRUdTX0RDTCwgNCk7Ci0JdmFsID0gKmJvb3RjcjsKLQlpb3VubWFwKGJvb3Rjcik7CisJaWYgKHJlcykKKwkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlZ2lzdGVyIHVzYiBzbGF2ZTogJWRcbiIsIHJlcyk7CiAKIAkvKiBSZWdpc3RlciB3YXRjaGRvZyBvbmx5IGlmIGVuYWJsZWQgaW4gaGFyZHdhcmUgKi8KLQlpZiAodmFsICYgQVI3X1dEVF9IV19FTkEpCi0JCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXI3X3dkdCk7CisJYm9vdGNyID0gaW9yZW1hcF9ub2NhY2hlKEFSN19SRUdTX0RDTCwgNCk7CisJdmFsID0gcmVhZGwoYm9vdGNyKTsKKwlpb3VubWFwKGJvb3Rjcik7CisJaWYgKHZhbCAmIEFSN19XRFRfSFdfRU5BKSB7CisJCWNoaXBfaWQgPSBhcjdfY2hpcF9pZCgpOworCQlzd2l0Y2ggKGNoaXBfaWQpIHsKKwkJY2FzZSBBUjdfQ0hJUF83MTAwOgorCQljYXNlIEFSN19DSElQXzcyMDA6CisJCQlhcjdfd2R0X3Jlcy5zdGFydCA9IEFSN19SRUdTX1dEVDsKKwkJCWJyZWFrOworCQljYXNlIEFSN19DSElQXzczMDA6CisJCQlhcjdfd2R0X3Jlcy5zdGFydCA9IFVSOF9SRUdTX1dEVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KIAotCXJldHVybiByZXM7CisJCWFyN193ZHRfcmVzLmVuZCA9IGFyN193ZHRfcmVzLnN0YXJ0ICsgMHgyMDsKKwkJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhcjdfd2R0KTsKKwkJaWYgKHJlcykKKwkJCXByX3dhcm5pbmcoInVuYWJsZSB0byByZWdpc3RlciB3YXRjaGRvZzogJWRcbiIsIHJlcyk7CisJfQorCisJcmV0dXJuIDA7CiB9CiBhcmNoX2luaXRjYWxsKGFyN19yZWdpc3Rlcl9kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hcjcvcHJvbS5jIGIvYXJjaC9taXBzL2FyNy9wcm9tLmMKaW5kZXggYzFmZGQzNi4uNTIzODU3OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyNy9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2FyNy9wcm9tLmMKQEAgLTMyLDggKzMyLDggQEAKICNkZWZpbmUgTUFYX0VOVFJZIDgwCiAKIHN0cnVjdCBlbnZfdmFyIHsKLQljaGFyICpuYW1lOwotCWNoYXIgKnZhbHVlOworCWNoYXIJKm5hbWU7CisJY2hhcgkqdmFsdWU7CiB9OwogCiBzdGF0aWMgc3RydWN0IGVudl92YXIgYWRhbTJfZW52W01BWF9FTlRSWV07CkBAIC00MSw2ICs0MSw3IEBACiBjaGFyICpwcm9tX2dldGVudihjb25zdCBjaGFyICpuYW1lKQogewogCWludCBpOworCiAJZm9yIChpID0gMDsgKGkgPCBNQVhfRU5UUlkpICYmIGFkYW0yX2VudltpXS5uYW1lOyBpKyspCiAJCWlmICghc3RyY21wKG5hbWUsIGFkYW0yX2VudltpXS5uYW1lKSkKIAkJCXJldHVybiBhZGFtMl9lbnZbaV0udmFsdWU7CkBAIC00OSw2NSArNTAsNTAgQEAKIH0KIEVYUE9SVF9TWU1CT0wocHJvbV9nZXRlbnYpOwogCi1jaGFyICogX19pbml0IHByb21fZ2V0Y21kbGluZSh2b2lkKQotewotCXJldHVybiAmKGFyY3NfY21kbGluZVswXSk7Ci19Ci0KIHN0YXRpYyB2b2lkICBfX2luaXQgYXI3X2luaXRfY21kbGluZShpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCWNoYXIgKmNwOwotCWludCBhY3RyOworCWludCBpOwogCi0JYWN0ciA9IDE7IC8qIEFsd2F5cyBpZ25vcmUgYXJndlswXSAqLwotCi0JY3AgPSAmKGFyY3NfY21kbGluZVswXSk7Ci0Jd2hpbGUgKGFjdHIgPCBhcmdjKSB7Ci0JCXN0cmNweShjcCwgYXJndlthY3RyXSk7Ci0JCWNwICs9IHN0cmxlbihhcmd2W2FjdHJdKTsKLQkJKmNwKysgPSAnICc7Ci0JCWFjdHIrKzsKLQl9Ci0JaWYgKGNwICE9ICYoYXJjc19jbWRsaW5lWzBdKSkgewotCQkvKiBnZXQgcmlkIG9mIHRyYWlsaW5nIHNwYWNlICovCi0JCS0tY3A7Ci0JCSpjcCA9ICdcMCc7CisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQlzdHJsY2F0KGFyY3NfY21kbGluZSwgYXJndltpXSwgQ09NTUFORF9MSU5FX1NJWkUpOworCQlpZiAoaSA8IChhcmdjIC0gMSkpCisJCQlzdHJsY2F0KGFyY3NfY21kbGluZSwgIiAiLCBDT01NQU5EX0xJTkVfU0laRSk7CiAJfQogfQogCiBzdHJ1Y3QgcHNibF9yZWMgewotCXUzMiBwc2JsX3NpemU7Ci0JdTMyIGVudl9iYXNlOwotCXUzMiBlbnZfc2l6ZTsKLQl1MzIgZmZzX2Jhc2U7Ci0JdTMyIGZmc19zaXplOworCXUzMglwc2JsX3NpemU7CisJdTMyCWVudl9iYXNlOworCXUzMgllbnZfc2l6ZTsKKwl1MzIJZmZzX2Jhc2U7CisJdTMyCWZmc19zaXplOwogfTsKIAogc3RhdGljIF9faW5pdGRhdGEgY2hhciBwc3BfZW52X3ZlcnNpb25bXSA9ICJUSUVOVjAuOCI7CiAKIHN0cnVjdCBwc3BfZW52X2NodW5rIHsKLQl1OCBudW07Ci0JdTggY3RybDsKLQl1MTYgY3N1bTsKLQl1OCBsZW47Ci0JY2hhciBkYXRhWzExXTsKKwl1OAludW07CisJdTgJY3RybDsKKwl1MTYJY3N1bTsKKwl1OAlsZW47CisJY2hhcglkYXRhWzExXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgcHNwX3Zhcl9tYXBfZW50cnkgewotCXU4IG51bTsKLQljaGFyICp2YWx1ZTsKKwl1OAludW07CisJY2hhcgkqdmFsdWU7CiB9OwogCiBzdGF0aWMgc3RydWN0IHBzcF92YXJfbWFwX2VudHJ5IHBzcF92YXJfbWFwW10gPSB7Ci0JeyAxLCAiY3B1ZnJlcXVlbmN5IiB9LAotCXsgMiwgIm1lbXNpemUiIH0sCi0JeyAzLCAiZmxhc2hzaXplIiB9LAotCXsgNCwgIm1vZGV0dHkwIiB9LAotCXsgNSwgIm1vZGV0dHkxIiB9LAotCXsgOCwgIm1hY2EiIH0sCi0JeyA5LCAibWFjYiIgfSwKLQl7IDI4LCAic3lzZnJlcXVlbmN5IiB9LAotCXsgMzgsICJtaXBzZnJlcXVlbmN5IiB9LAorCXsgIDEsCSJjcHVmcmVxdWVuY3kiIH0sCisJeyAgMiwJIm1lbXNpemUiIH0sCisJeyAgMywJImZsYXNoc2l6ZSIgfSwKKwl7ICA0LAkibW9kZXR0eTAiIH0sCisJeyAgNSwJIm1vZGV0dHkxIiB9LAorCXsgIDgsCSJtYWNhIiB9LAorCXsgIDksCSJtYWNiIiB9LAorCXsgMjgsCSJzeXNmcmVxdWVuY3kiIH0sCisJeyAzOCwJIm1pcHNmcmVxdWVuY3kiIH0sCiB9OwogCiAvKgpAQCAtMTU0LDYgKzE0MCw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgYWRkX2FkYW0yX3ZhcihjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKIHsKIAlpbnQgaTsKKwogCWZvciAoaSA9IDA7IGkgPCBNQVhfRU5UUlk7IGkrKykgewogCQlpZiAoIWFkYW0yX2VudltpXS5uYW1lKSB7CiAJCQlhZGFtMl9lbnZbaV0ubmFtZSA9IG5hbWU7CkBAIC0yMTYsNyArMjAzLDcgQEAKIAljaGFyIHBhcml0eSA9ICdcMCcsIGJpdHMgPSAnXDAnLCBmbG93ID0gJ1wwJzsKIAljaGFyICpzLCAqcDsKIAotCWlmIChzdHJzdHIocHJvbV9nZXRjbWRsaW5lKCksICJjb25zb2xlPSIpKQorCWlmIChzdHJzdHIoYXJjc19jbWRsaW5lLCAiY29uc29sZT0iKSkKIAkJcmV0dXJuOwogCiAJcyA9IHByb21fZ2V0ZW52KCJtb2RldHR5MCIpOwpAQCAtMjUwLDcgKzIzNyw3IEBACiAJZWxzZQogCQlzcHJpbnRmKGNvbnNvbGVfc3RyaW5nLCAiIGNvbnNvbGU9dHR5UzAsJWQlYyVjIiwgYmF1ZCwgcGFyaXR5LAogCQkJYml0cyk7Ci0Jc3RyY2F0KHByb21fZ2V0Y21kbGluZSgpLCBjb25zb2xlX3N0cmluZyk7CisJc3RybGNhdChhcmNzX2NtZGxpbmUsIGNvbnNvbGVfc3RyaW5nLCBDT01NQU5EX0xJTkVfU0laRSk7CiAjZW5kaWYKIH0KIApAQCAtMjc5LDQgKzI2NiwzIEBACiAJc2VyaWFsX291dChVQVJUX1RYLCBjKTsKIAlyZXR1cm4gMTsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FyNy9zZXR1cC5jIGIvYXJjaC9taXBzL2FyNy9zZXR1cC5jCmluZGV4IDM5ZjZiNWIuLjNhODAxZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcjcvc2V0dXAuYworKysgYi9hcmNoL21pcHMvYXI3L3NldHVwLmMKQEAgLTI2LDggKzI2LDggQEAKIAogc3RhdGljIHZvaWQgYXI3X21hY2hpbmVfcmVzdGFydChjaGFyICpjb21tYW5kKQogewotCXUzMiAqc29mdHJlc19yZWcgPSBpb3JlbWFwKEFSN19SRUdTX1JFU0VUICsKLQkJCQkJICBBUjdfUkVTRVRfU09GVFdBUkUsIDEpOworCXUzMiAqc29mdHJlc19yZWcgPSBpb3JlbWFwKEFSN19SRUdTX1JFU0VUICsgQVI3X1JFU0VUX1NPRlRXQVJFLCAxKTsKKwogCXdyaXRlbCgxLCBzb2Z0cmVzX3JlZyk7CiB9CiAKQEAgLTQxLDYgKzQxLDcgQEAKIHsKIAl1MzIgKnBvd2VyX3JlZyA9ICh1MzIgKilpb3JlbWFwKEFSN19SRUdTX1BPV0VSLCAxKTsKIAl1MzIgcG93ZXJfc3RhdGUgPSByZWFkbChwb3dlcl9yZWcpIHwgKDMgPDwgMzApOworCiAJd3JpdGVsKHBvd2VyX3N0YXRlLCBwb3dlcl9yZWcpOwogCWFyN19tYWNoaW5lX2hhbHQoKTsKIH0KQEAgLTQ5LDE0ICs1MCwxNCBAQAogewogCXUxNiBjaGlwX2lkID0gYXI3X2NoaXBfaWQoKTsKIAlzd2l0Y2ggKGNoaXBfaWQpIHsKLQljYXNlIEFSN19DSElQXzczMDA6Ci0JCXJldHVybiAiVEkgQVI3IChUTkVURDczMDApIjsKIAljYXNlIEFSN19DSElQXzcxMDA6CiAJCXJldHVybiAiVEkgQVI3IChUTkVURDcxMDApIjsKIAljYXNlIEFSN19DSElQXzcyMDA6CiAJCXJldHVybiAiVEkgQVI3IChUTkVURDcyMDApIjsKKwljYXNlIEFSN19DSElQXzczMDA6CisJCXJldHVybiAiVEkgQVI3IChUTkVURDczMDApIjsKIAlkZWZhdWx0OgotCQlyZXR1cm4gIlRJIEFSNyAoVW5rbm93bikiOworCQlyZXR1cm4gIlRJIEFSNyAodW5rbm93bikiOwogCX0KIH0KIApAQCAtNzAsNyArNzEsNiBAQAogICogSW5pdGlhbGl6ZXMgYmFzaWMgcm91dGluZXMgYW5kIHN0cnVjdHVyZXMgcG9pbnRlcnMsIG1lbW9yeSBzaXplIChhcwogICogZ2l2ZW4gYnkgdGhlIGJpb3MgYW5kIHNhdmVzIHRoZSBjb21tYW5kIGxpbmUuCiAgKi8KLQogdm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGlvX2Jhc2U7CkBAIC04OCw2ICs4OCw1IEBACiAJcHJvbV9tZW1pbml0KCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlcywgSUQ6IDB4JTA0eCwgUmV2aXNpb246IDB4JTAyeFxuIiwKLQkJCQkJZ2V0X3N5c3RlbV90eXBlKCksCi0JCWFyN19jaGlwX2lkKCksIGFyN19jaGlwX3JldigpKTsKKwkJCWdldF9zeXN0ZW1fdHlwZSgpLCBhcjdfY2hpcF9pZCgpLCBhcjdfY2hpcF9yZXYoKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXI3L3RpbWUuYyBiL2FyY2gvbWlwcy9hcjcvdGltZS5jCmluZGV4IGExZmJhODkuLjVmYjhhMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcjcvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9hcjcvdGltZS5jCkBAIC0yMCwxMSArMjAsMjEgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWFyNy9hcjcuaD4KIAogdm9pZCBfX2luaXQgcGxhdF90aW1lX2luaXQodm9pZCkKIHsKLQltaXBzX2hwdF9mcmVxdWVuY3kgPSBhcjdfY3B1X2ZyZXEoKSAvIDI7CisJc3RydWN0IGNsayAqY3B1X2NsazsKKworCWNwdV9jbGsgPSBjbGtfZ2V0KE5VTEwsICJjcHUiKTsKKwlpZiAoSVNfRVJSKGNwdV9jbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdldCBjcHUgY2xvY2tcbiIpOworCQlyZXR1cm47CisJfQorCisJbWlwc19ocHRfZnJlcXVlbmN5ID0gY2xrX2dldF9yYXRlKGNwdV9jbGspIC8gMjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L2dwaW8uYyBiL2FyY2gvbWlwcy9iY200N3h4L2dwaW8uYwppbmRleCA5Yjc5ODgwLi5lNGE1ZWU5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC9ncGlvLmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvZ3Bpby5jCkBAIC01OSw0ICs1OSwzIEBACiAJCXJldHVybiAtRUlOVkFMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ3Bpb190b19pcnEpOwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMgYi9hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMKaW5kZXggMjlkM2NiZi4uMGZhNjQ2YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYwpAQCAtMTYzLDQgKzE2MywzIEBACiB2b2lkIF9faW5pdCBwcm9tX2ZyZWVfcHJvbV9tZW1vcnkodm9pZCkKIHsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTQ3eHgvc2V0dXAuYyBiL2FyY2gvbWlwcy9iY200N3h4L3NldHVwLmMKaW5kZXggMmY1ODBmYS4uZDQ0MmUxMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2JjbTQ3eHgvc2V0dXAuYworKysgYi9hcmNoL21pcHMvYmNtNDd4eC9zZXR1cC5jCkBAIC0xMjEsNCArMTIxLDMgQEAKIAlfbWFjaGluZV9oYWx0ID0gYmNtNDd4eF9tYWNoaW5lX2hhbHQ7CiAJcG1fcG93ZXJfb2ZmID0gYmNtNDd4eF9tYWNoaW5lX2hhbHQ7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L3dndDYzNHUuYyBiL2FyY2gvbWlwcy9iY200N3h4L3dndDYzNHUuYwppbmRleCBlZjAwZTdmLi43NGQwNjk2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC93Z3Q2MzR1LmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvd2d0NjM0dS5jCkBAIC0xNjQsNCArMTY0LDMgQEAKIH0KIAogbW9kdWxlX2luaXQod2d0NjM0dV9pbml0KTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvYm9hcmRzL2JvYXJkX2JjbTk2M3h4LmMgYi9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYwppbmRleCAxZmU0MTJjLi5lYTE3OTQxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYworKysgYi9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYwpAQCAtODM2LDQgKzgzNiwzIEBACiAKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvdGltZXIuYyBiL2FyY2gvbWlwcy9iY202M3h4L3RpbWVyLmMKaW5kZXggYmE1MjJiZC4uNWYxMTM1OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2JjbTYzeHgvdGltZXIuYworKysgYi9hcmNoL21pcHMvYmNtNjN4eC90aW1lci5jCkBAIC0xNyw4ICsxNyw4IEBACiAjaW5jbHVkZSA8YmNtNjN4eF90aW1lci5oPgogI2luY2x1ZGUgPGJjbTYzeHhfcmVncy5oPgogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRpbWVyX3JlZ19sb2NrKTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGltZXJfZGF0YV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHRpbWVyX3JlZ19sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHRpbWVyX2RhdGFfbG9jayk7CiBzdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2NsazsKIAogc3RhdGljIHN0cnVjdCB0aW1lcl9kYXRhIHsKQEAgLTMxLDIzICszMSwyMyBAQAogCXUzMiBzdGF0OwogCWludCBpOwogCi0Jc3Bpbl9sb2NrKCZ0aW1lcl9yZWdfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmdGltZXJfcmVnX2xvY2spOwogCXN0YXQgPSBiY21fdGltZXJfcmVhZGwoVElNRVJfSVJRU1RBVF9SRUcpOwogCWJjbV90aW1lcl93cml0ZWwoc3RhdCwgVElNRVJfSVJRU1RBVF9SRUcpOwotCXNwaW5fdW5sb2NrKCZ0aW1lcl9yZWdfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZ0aW1lcl9yZWdfbG9jayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQkNNNjNYWF9USU1FUl9DT1VOVDsgaSsrKSB7CiAJCWlmICghKHN0YXQgJiBUSU1FUl9JUlFTVEFUX1RJTUVSX0NBVVNFKGkpKSkKIAkJCWNvbnRpbnVlOwogCi0JCXNwaW5fbG9jaygmdGltZXJfZGF0YV9sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmdGltZXJfZGF0YV9sb2NrKTsKIAkJaWYgKCF0aW1lcl9kYXRhW2ldLmNiKSB7Ci0JCQlzcGluX3VubG9jaygmdGltZXJfZGF0YV9sb2NrKTsKKwkJCXJhd19zcGluX3VubG9jaygmdGltZXJfZGF0YV9sb2NrKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJdGltZXJfZGF0YVtpXS5jYih0aW1lcl9kYXRhW2ldLmRhdGEpOwotCQlzcGluX3VubG9jaygmdGltZXJfZGF0YV9sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZ0aW1lcl9kYXRhX2xvY2spOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTYxLDcgKzYxLDcgQEAKIAlpZiAoaWQgPj0gQkNNNjNYWF9USU1FUl9DT1VOVCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CiAKIAlyZWcgPSBiY21fdGltZXJfcmVhZGwoVElNRVJfQ1RMeF9SRUcoaWQpKTsKIAlyZWcgfD0gVElNRVJfQ1RMX0VOQUJMRV9NQVNLOwpAQCAtNzEsNyArNzEsNyBAQAogCXJlZyB8PSBUSU1FUl9JUlFTVEFUX1RJTUVSX0lSX0VOKGlkKTsKIAliY21fdGltZXJfd3JpdGVsKHJlZywgVElNRVJfSVJRU1RBVF9SRUcpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODUsNyArODUsNyBAQAogCWlmIChpZCA+PSBCQ002M1hYX1RJTUVSX0NPVU5UKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGltZXJfcmVnX2xvY2ssIGZsYWdzKTsKIAogCXJlZyA9IGJjbV90aW1lcl9yZWFkbChUSU1FUl9DVEx4X1JFRyhpZCkpOwogCXJlZyAmPSB+VElNRVJfQ1RMX0VOQUJMRV9NQVNLOwpAQCAtOTUsNyArOTUsNyBAQAogCXJlZyAmPSB+VElNRVJfSVJRU1RBVF9USU1FUl9JUl9FTihpZCk7CiAJYmNtX3RpbWVyX3dyaXRlbChyZWcsIFRJTUVSX0lSUVNUQVRfUkVHKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMCw3ICsxMTAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldCA9IDA7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX2RhdGFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGltZXJfZGF0YV9sb2NrLCBmbGFncyk7CiAJaWYgKHRpbWVyX2RhdGFbaWRdLmNiKSB7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBvdXQ7CkBAIC0xMjAsNyArMTIwLDcgQEAKIAl0aW1lcl9kYXRhW2lkXS5kYXRhID0gZGF0YTsKIAogb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX2RhdGFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lcl9kYXRhX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMzMsOSArMTMzLDkgQEAKIAlpZiAoaWQgPj0gQkNNNjNYWF9USU1FUl9DT1VOVCkKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX2RhdGFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdGltZXJfZGF0YV9sb2NrLCBmbGFncyk7CiAJdGltZXJfZGF0YVtpZF0uY2IgPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyX2RhdGFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lcl9kYXRhX2xvY2ssIGZsYWdzKTsKIH0KIAogRVhQT1JUX1NZTUJPTChiY202M3h4X3RpbWVyX3VucmVnaXN0ZXIpOwpAQCAtMTU5LDcgKzE1OSw3IEBACiAJaWYgKGNvdW50ZG93biAmIH5USU1FUl9DVExfQ09VTlRET1dOX01BU0spCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyX3JlZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOwogCXJlZyA9IGJjbV90aW1lcl9yZWFkbChUSU1FUl9DVEx4X1JFRyhpZCkpOwogCiAJaWYgKG1vbm90b25pYykKQEAgLTE3MSw3ICsxNzEsNyBAQAogCXJlZyB8PSBjb3VudGRvd247CiAJYmNtX3RpbWVyX3dyaXRlbChyZWcsIFRJTUVSX0NUTHhfUkVHKGlkKSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lcl9yZWdfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCA5ZGY5MDNkLi43OTBkZGQzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTksNyArOSw3IEBACiAjIG1vZGlmaWVkIGJ5IENvcnQgKGNvcnRAY3Mubm10LmVkdSkKICMKICMgQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuICYgRFNMYWIsIExhbnpob3UgVW5pdmVyc2l0eQotIyBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisjIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogIwogCiAjIGNvbXByZXNzZWQga2VybmVsIGxvYWQgYWRkcjogVk1MSU5VWl9MT0FEX0FERFJFU1MgPiBWTUxJTlVYX0xPQURfQUREUkVTUyArIFZNTElOVVhfU0laRQpAQCAtMjcsMTUgKzI3LDE4IEBACiBLQlVJTERfQ0ZMQUdTIDo9ICQoc2hlbGwgZWNobyAkKEtCVUlMRF9DRkxBR1MpIHwgc2VkIC1lICJzLy1wZy8vIikKIAogS0JVSUxEX0NGTEFHUyA6PSAkKExJTlVYSU5DTFVERSkgJChLQlVJTERfQ0ZMQUdTKSAtRF9fS0VSTkVMX18gXAotCS1EQk9PVF9IRUFQX1NJWkU9JChCT09UX0hFQVBfU0laRSkgLUQiVk1MSU5VWF9MT0FEX0FERFJFU1NfVUxMPSQoVk1MSU5VWF9MT0FEX0FERFJFU1MpdWxsIiBcCisJLURCT09UX0hFQVBfU0laRT0kKEJPT1RfSEVBUF9TSVpFKSAtRCJWTUxJTlVYX0xPQURfQUREUkVTU19VTEw9JChWTUxJTlVYX0xPQURfQUREUkVTUyl1bGwiCiAKIEtCVUlMRF9BRkxBR1MgOj0gJChMSU5VWElOQ0xVREUpICQoS0JVSUxEX0FGTEFHUykgLURfX0FTU0VNQkxZX18gXAotCS1ES0VSTkVMX0VOVFJZPTB4JChzaGVsbCAkKE5NKSAkKG9ianRyZWUpLyQoS0JVSUxEX0lNQUdFKSAyPi9kZXYvbnVsbCB8IGdyZXAgIiBrZXJuZWxfZW50cnkiIHwgY3V0IC1mMSAtZCBcICkgXAotCS1EQk9PVF9IRUFQX1NJWkU9JChCT09UX0hFQVBfU0laRSkKKwktREJPT1RfSEVBUF9TSVpFPSQoQk9PVF9IRUFQX1NJWkUpIFwKKwktREtFUk5FTF9FTlRSWT0weCQoc2hlbGwgJChOTSkgJChvYmp0cmVlKS8kKEtCVUlMRF9JTUFHRSkgMj4vZGV2L251bGwgfCBncmVwICIga2VybmVsX2VudHJ5IiB8IGN1dCAtZjEgLWQgXCApCiAKIG9iai15IDo9ICQob2JqKS9oZWFkLm8gJChvYmopL2RlY29tcHJlc3MubyAkKG9iaikvZGJnLm8KIAoraWZkZWYgQ09ORklHX0RFQlVHX1pCT09UCiBvYmotJChDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MCkgKz0gJChvYmopL3VhcnQtMTY1NTAubworb2JqLSQoQ09ORklHX01BQ0hfQUxDSEVNWSkJCSAgICs9ICQob2JqKS91YXJ0LWFsY2hlbXkubworZW5kaWYKIAogT0JKQ09QWUZMQUdTX3ZtbGludXguYmluIDo9ICQoT0JKQ09QWUZMQUdTKSAtTyBiaW5hcnkgLVIgLmNvbW1lbnQgLVMKICQob2JqKS92bWxpbnV4LmJpbjogJChLQlVJTERfSU1BR0UpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2RiZy5jIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9kYmcuYwppbmRleCBmZjRkYzdhLi4xMzRhNjE2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2RiZy5jCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGJnLmMKQEAgLTUsMTEgKzUsMTEgQEAKICAqIHBsZWFzZSBzZWxlY3QgU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MCBmb3IgeW91ciBtYWNoaW5lLiBvdGhld2lzZSwgeW91CiAgKiBuZWVkIHRvIGltcGxlbWVudCB5b3VyIG93biBwdXRjKCkuCiAgKi8KLQorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLXZvaWQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKSBwdXRjKGNoYXIgYykKK3ZvaWQgX193ZWFrIHB1dGMoY2hhciBjKQogewogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2RlY29tcHJlc3MuYyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jCmluZGV4IDU1ZDAyYjMuLjVkYjQzYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvZGVjb21wcmVzcy5jCkBAIC01LDggKzUsOCBAQAogICogQXV0aG9yOiBNYXR0IFBvcnRlciA8bXBvcnRlckBtdmlzdGEuY29tPiBEZXJpdmVkIGZyb20KICAqIGFyY2gvcHBjL2Jvb3QvcHJlcC9taXNjLmMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuICYgSW5zdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5Ci0gKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC91YXJ0LWFsY2hlbXkuYyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvdWFydC1hbGNoZW15LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJmZjIyZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvdWFydC1hbGNoZW15LmMKQEAgLTAsMCArMSw3IEBACisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorCit2b2lkIHB1dGMoY2hhciBjKQoreworCS8qIGFsbCBjdXJyZW50IChKYW4uIDIwMTApIGluLWtlcm5lbCBib2FyZHMgKi8KKwlhbGNoZW15X3VhcnRfcHV0Y2hhcihVQVJUMF9QSFlTX0FERFIsIGMpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZG1hLW9jdGVvbi5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZG1hLW9jdGVvbi5jCmluZGV4IDRiOTJiZmMuLmJlNTMxZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2RtYS1vY3Rlb24uYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9kbWEtb2N0ZW9uLmMKQEAgLTQxLDcgKzQxLDcgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfUENJCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJhcjFfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhiYXIxX2xvY2spOwogc3RhdGljIHN0cnVjdCBiYXIxX2luZGV4X3N0YXRlIGJhcjFfc3RhdGVbMzJdOwogI2VuZGlmCiAKQEAgLTE5OCw3ICsxOTgsNyBAQAogCQlzdGFydF9pbmRleCA9IDMxOwogCiAJLyogT25seSBvbmUgcHJvY2Vzc29yIGNhbiBhY2Nlc3MgdGhlIEJhciByZWdpc3RlciBhdCBvbmNlICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJhcjFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmFyMV9sb2NrLCBmbGFncyk7CiAKIAkvKiBMb29rIHRocm91Z2ggQmFyMSBmb3IgZXhpc3RpbmcgbWFwcGluZyB0aGF0IHdpbGwgd29yayAqLwogCWZvciAoaW5kZXggPSBzdGFydF9pbmRleDsgaW5kZXggPj0gMDsgaW5kZXgtLSkgewpAQCAtMjUwLDcgKzI1MCw3IEBACiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBoeXNpY2FsKTsKIAogZG9uZV91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFyMV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhcjFfbG9jaywgZmxhZ3MpOwogZG9uZToKIAlwcl9kZWJ1ZygiZG1hX21hcF9zaW5nbGUgMHglbGx4LT4weCVsbHhcbiIsIHBoeXNpY2FsLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CkBAIC0zMjQsMTQgKzMyNCwxNCBAQAogCQkgICAgICAiQXR0ZW1wdCB0byB1bm1hcCBhbiBpbnZhbGlkIGFkZHJlc3MgKDB4JWxseClcbiIsCiAJCSAgICAgIGRtYV9hZGRyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZiYXIxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJhcjFfbG9jaywgZmxhZ3MpOwogCWJhcjFfc3RhdGVbaW5kZXhdLnJlZl9jb3VudC0tOwogCWlmIChiYXIxX3N0YXRlW2luZGV4XS5yZWZfY291bnQgPT0gMCkKIAkJb2N0ZW9uX25waV93cml0ZTMyKENWTVhfTlBJX1BDSV9CQVIxX0lOREVYWChpbmRleCksIDApOwogCWVsc2UgaWYgKHVubGlrZWx5KGJhcjFfc3RhdGVbaW5kZXhdLnJlZl9jb3VudCA8IDApKQogCQlwYW5pYygiZG1hX3VubWFwX3NpbmdsZTogQmFyMVsldV0gcmVmZXJlbmNlIGNvdW50IDwgMFxuIiwKIAkJICAgICAgKGludCkgaW5kZXgpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhcjFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXIxX2xvY2ssIGZsYWdzKTsKIGRvbmU6CiAJcHJfZGVidWcoImRtYV91bm1hcF9zaW5nbGUgMHglbGx4XG4iLCBkbWFfYWRkcik7CiAJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZXhlY3V0aXZlL2N2bXgtYm9vdG1lbS5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZXhlY3V0aXZlL2N2bXgtYm9vdG1lbS5jCmluZGV4IDI1NjY2ZGEuLmZkZjVmMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2V4ZWN1dGl2ZS9jdm14LWJvb3RtZW0uYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9leGVjdXRpdmUvY3ZteC1ib290bWVtLmMKQEAgLTI1Myw3ICsyNTMsNyBAQAogCSAqIGltcG9zc2libGUgcmVxdWVzdHMgdXAgZnJvbnQuIChOT1AgZm9yIGFkZHJlc3NfbWluID09IDApCiAJICovCiAJaWYgKGFsaWdubWVudCkKLQkJYWRkcmVzc19taW4gPSBfX0FMSUdOX01BU0soYWRkcmVzc19taW4sIChhbGlnbm1lbnQgLSAxKSk7CisJCWFkZHJlc3NfbWluID0gQUxJR04oYWRkcmVzc19taW4sIGFsaWdubWVudCk7CiAKIAkvKgogCSAqIFJlamVjdCBpbmNvbnNpc3RlbnQgYXJncy4gIFdlIGhhdmUgYWRqdXN0ZWQgdGhlc2UsIHNvIHRoaXMKQEAgLTI5MSw3ICsyOTEsNyBAQAogCQkgKiBzYXRpc2Z5IHJlcXVlc3QuCiAJCSAqLwogCQl1c2FibGVfYmFzZSA9Ci0JCSAgICBfX0FMSUdOX01BU0sobWF4KGFkZHJlc3NfbWluLCBlbnRfYWRkciksIGFsaWdubWVudCAtIDEpOworCQkgICAgQUxJR04obWF4KGFkZHJlc3NfbWluLCBlbnRfYWRkciksIGFsaWdubWVudCk7CiAJCXVzYWJsZV9tYXggPSBtaW4oYWRkcmVzc19tYXgsIGVudF9hZGRyICsgZW50X3NpemUpOwogCQkvKgogCQkgKiBXZSBzaG91bGQgYmUgYWJsZSB0byBhbGxvY2F0ZSBibG9jayBhdCBhZGRyZXNzCkBAIC02NzEsNyArNjcxLDcgQEAKIAkgKiBjb2FsbGVzY2VkIHdoZW4gdGhleSBhcmUgZnJlZWQuICBUaGUgYWxsb2Mgcm91dGluZSBkb2VzIHRoZQogCSAqIHNhbWUgcm91bmRpbmcgdXAgb24gYWxsIGFsbG9jYXRpb25zLgogCSAqLwotCXNpemUgPSBfX0FMSUdOX01BU0soc2l6ZSwgKENWTVhfQk9PVE1FTV9BTElHTk1FTlRfU0laRSAtIDEpKTsKKwlzaXplID0gQUxJR04oc2l6ZSwgQ1ZNWF9CT09UTUVNX0FMSUdOTUVOVF9TSVpFKTsKIAogCWFkZHJfYWxsb2NhdGVkID0gY3ZteF9ib290bWVtX3BoeV9hbGxvYyhzaXplLCBtaW5fYWRkciwgbWF4X2FkZHIsCiAJCQkJCQlhbGlnbm1lbnQsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9leGVjdXRpdmUvY3ZteC1zeXNpbmZvLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9leGVjdXRpdmUvY3ZteC1zeXNpbmZvLmMKaW5kZXggZTU4Mzg4OS4uOGIxOGEyMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZXhlY3V0aXZlL2N2bXgtc3lzaW5mby5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2V4ZWN1dGl2ZS9jdm14LXN5c2luZm8uYwpAQCAtMTE1LDQgKzExNSwzIEBACiAKIAlyZXR1cm4gMTsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jCmluZGV4IDZmMmFjZjAuLmM0MjRjZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMKQEAgLTEzLDkgKzEzLDggQEAKICNpbmNsdWRlIDxhc20vb2N0ZW9uL2N2bXgtcGV4cC1kZWZzLmg+CiAjaW5jbHVkZSA8YXNtL29jdGVvbi9jdm14LW5waS1kZWZzLmg+CiAKLURFRklORV9SV0xPQ0sob2N0ZW9uX2lycV9jaXUwX3J3bG9jayk7Ci1ERUZJTkVfUldMT0NLKG9jdGVvbl9pcnFfY2l1MV9yd2xvY2spOwotREVGSU5FX1NQSU5MT0NLKG9jdGVvbl9pcnFfbXNpX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sob2N0ZW9uX2lycV9jaXUwX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sob2N0ZW9uX2lycV9jaXUxX2xvY2spOwogCiBzdGF0aWMgaW50IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShpbnQgY3B1KQogewpAQCAtNTEsOSArNTAsNiBAQAogCSAqLwogCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpCiAJCXJldHVybjsKLQotCS8qIFRoZXJlIGlzIGEgcmFjZSBoZXJlLiAgV2Ugc2hvdWxkIGZpeCBpdC4gICovCi0KIAkvKgogCSAqIFdlIGRvbid0IG5lZWQgdG8gZGlzYWJsZSBJUlFzIHRvIG1ha2UgdGhlc2UgYXRvbWljIHNpbmNlCiAJICogdGhleSBhcmUgYWxyZWFkeSBkaXNhYmxlZCBlYXJsaWVyIGluIHRoZSBsb3cgbGV2ZWwKQEAgLTE0MSwxOSArMTM3LDEyIEBACiAJdWludDY0X3QgZW4wOwogCWludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1dPUktRMDsJLyogQml0IDAtNjMgb2YgRU4wICovCiAKLQkvKgotCSAqIEEgcmVhZCBsb2NrIGlzIHVzZWQgaGVyZSB0byBtYWtlIHN1cmUgb25seSBvbmUgY29yZSBpcyBldmVyCi0JICogdXBkYXRpbmcgdGhlIENJVSBlbmFibGUgYml0cyBhdCBhIHRpbWUuIER1cmluZyBhbiBlbmFibGUKLQkgKiB0aGUgY29yZXMgZG9uJ3QgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlci4gRHVyaW5nIGEgZGlzYWJsZQotCSAqIHRoZSB3cml0ZSBsb2NrIHN0b3BzIGFueSBlbmFibGVzIHRoYXQgbWlnaHQgY2F1c2UgYQotCSAqIHByb2JsZW0uCi0JICovCi0JcmVhZF9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MF9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MF9sb2NrLCBmbGFncyk7CiAJZW4wID0gY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSk7CiAJZW4wIHw9IDF1bGwgPDwgYml0OwogCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpLCBlbjApOwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMikpOwotCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MF9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUwX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUwX2Rpc2FibGUodW5zaWduZWQgaW50IGlycSkKQEAgLTE2Miw3ICsxNTEsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdWludDY0X3QgZW4wOwogCWludCBjcHU7Ci0Jd3JpdGVfbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTBfbG9jaywgZmxhZ3MpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCWludCBjb3JlaWQgPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KTsKIAkJZW4wID0gY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSk7CkBAIC0xNzQsNyArMTYzLDcgQEAKIAkgKiBvZiB0aGVtIGFyZSBkb25lLgogCSAqLwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY3ZteF9nZXRfY29yZV9udW0oKSAqIDIpKTsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTBfbG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtMTkzLDcgKzE4Miw3IEBACiAgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGN1cnJlbnQgY29yZSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQogICogcmVnaXN0ZXJzLgogICovCi1zdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUwX2Fja192Mih1bnNpZ25lZCBpbnQgaXJxKQogewogCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyOwogCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOwpAQCAtMjAyLDYgKzE5MSw0MyBAQAogfQogCiAvKgorICogQ0lVIHRpbWVyIHR5cGUgaW50ZXJydXB0cyBtdXN0IGJlIGFja25vbGVnZWQgYnkgd3JpdGluZyBhICcxJyBiaXQKKyAqIHRvIHRoZWlyIHN1bTAgYml0LgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfdGltZXJfYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGluZGV4ID0gY3ZteF9nZXRfY29yZV9udW0oKSAqIDI7CisJdWludDY0X3QgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV09SS1EwKTsKKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX1NVTTAoaW5kZXgpLCBtYXNrKTsKK30KKworc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUwX3RpbWVyX2Fja192MSh1bnNpZ25lZCBpbnQgaXJxKQoreworCW9jdGVvbl9pcnFfY2l1MF90aW1lcl9hY2soaXJxKTsKKwlvY3Rlb25faXJxX2NpdTBfYWNrKGlycSk7Cit9CisKK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MF90aW1lcl9hY2tfdjIodW5zaWduZWQgaW50IGlycSkKK3sKKwlvY3Rlb25faXJxX2NpdTBfdGltZXJfYWNrKGlycSk7CisJb2N0ZW9uX2lycV9jaXUwX2Fja192MihpcnEpOworfQorCisvKgorICogRW5hYmxlIHRoZSBpcnEgb24gdGhlIGN1cnJlbnQgY29yZSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfZW9pX3YyKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJaW50IGluZGV4ID0gY3ZteF9nZXRfY29yZV9udW0oKSAqIDI7CisJdTY0IG1hc2sgPSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX1dPUktRMCk7CisKKwlpZiAoKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkgPT0gMCkKKwkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFTKGluZGV4KSwgbWFzayk7Cit9CisKKy8qCiAgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGFsbCBjb3JlcyBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQogICogcmVnaXN0ZXJzLgogICovCkBAIC0yMjMsNyArMjQ5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1dPUktRMDsJLyogQml0IDAtNjMgb2YgRU4wICovCiAKLQl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MF9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MF9sb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJaW50IGNvcmVpZCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpOwogCQl1aW50NjRfdCBlbjAgPQpAQCAtMjM5LDcgKzI2NSw3IEBACiAJICogb2YgdGhlbSBhcmUgZG9uZS4KIAkgKi8KIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyKSk7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MF9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUwX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjcyLDggKzI5OCw4IEBACiAJLm5hbWUgPSAiQ0lVMCIsCiAJLmVuYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9lbmFibGVfdjIsCiAJLmRpc2FibGUgPSBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZV9hbGxfdjIsCi0JLmFjayA9IG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlX3YyLAotCS5lb2kgPSBvY3Rlb25faXJxX2NpdTBfZW5hYmxlX3YyLAorCS5hY2sgPSBvY3Rlb25faXJxX2NpdTBfYWNrX3YyLAorCS5lb2kgPSBvY3Rlb25faXJxX2NpdTBfZW9pX3YyLAogI2lmZGVmIENPTkZJR19TTVAKIAkuc2V0X2FmZmluaXR5ID0gb2N0ZW9uX2lycV9jaXUwX3NldF9hZmZpbml0eV92MiwKICNlbmRpZgpAQCAtMjkwLDYgKzMxNiwyOCBAQAogI2VuZGlmCiB9OwogCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9jdGVvbl9pcnFfY2hpcF9jaXUwX3RpbWVyX3YyID0geworCS5uYW1lID0gIkNJVTAtVCIsCisJLmVuYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9lbmFibGVfdjIsCisJLmRpc2FibGUgPSBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZV9hbGxfdjIsCisJLmFjayA9IG9jdGVvbl9pcnFfY2l1MF90aW1lcl9hY2tfdjIsCisJLmVvaSA9IG9jdGVvbl9pcnFfY2l1MF9lb2lfdjIsCisjaWZkZWYgQ09ORklHX1NNUAorCS5zZXRfYWZmaW5pdHkgPSBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5X3YyLAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9jdGVvbl9pcnFfY2hpcF9jaXUwX3RpbWVyID0geworCS5uYW1lID0gIkNJVTAtVCIsCisJLmVuYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9lbmFibGUsCisJLmRpc2FibGUgPSBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZSwKKwkuYWNrID0gb2N0ZW9uX2lycV9jaXUwX3RpbWVyX2Fja192MSwKKwkuZW9pID0gb2N0ZW9uX2lycV9jaXUwX2VvaSwKKyNpZmRlZiBDT05GSUdfU01QCisJLnNldF9hZmZpbml0eSA9IG9jdGVvbl9pcnFfY2l1MF9zZXRfYWZmaW5pdHksCisjZW5kaWYKK307CisKIAogc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUxX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQogewpAQCAtMzIyLDE5ICszNzAsMTIgQEAKIAl1aW50NjRfdCBlbjE7CiAJaW50IGJpdCA9IGlycSAtIE9DVEVPTl9JUlFfV0RPRzA7CS8qIEJpdCAwLTYzIG9mIEVOMSAqLwogCi0JLyoKLQkgKiBBIHJlYWQgbG9jayBpcyB1c2VkIGhlcmUgdG8gbWFrZSBzdXJlIG9ubHkgb25lIGNvcmUgaXMgZXZlcgotCSAqIHVwZGF0aW5nIHRoZSBDSVUgZW5hYmxlIGJpdHMgYXQgYSB0aW1lLiAgRHVyaW5nIGFuIGVuYWJsZQotCSAqIHRoZSBjb3JlcyBkb24ndCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyLiAgRHVyaW5nIGEgZGlzYWJsZQotCSAqIHRoZSB3cml0ZSBsb2NrIHN0b3BzIGFueSBlbmFibGVzIHRoYXQgbWlnaHQgY2F1c2UgYQotCSAqIHByb2JsZW0uCi0JICovCi0JcmVhZF9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9sb2NrLCBmbGFncyk7CiAJZW4xID0gY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSkpOwogCWVuMSB8PSAxdWxsIDw8IGJpdDsKIAljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSksIGVuMSk7CiAJY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSkpOwotCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUxX2Rpc2FibGUodW5zaWduZWQgaW50IGlycSkKQEAgLTM0Myw3ICszODQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdWludDY0X3QgZW4xOwogCWludCBjcHU7Ci0Jd3JpdGVfbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTFfcndsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTFfbG9jaywgZmxhZ3MpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCWludCBjb3JlaWQgPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KTsKIAkJZW4xID0gY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSkpOwpAQCAtMzU1LDcgKzM5Niw3IEBACiAJICogb2YgdGhlbSBhcmUgZG9uZS4KIAkgKi8KIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMSkpOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTFfcndsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC0zNzQsNyArNDE1LDcgQEAKICAqIERpc2FibGUgdGhlIGlycSBvbiB0aGUgY3VycmVudCBjb3JlIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CiAgKiByZWdpc3RlcnMuCiAgKi8KLXN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MV9kaXNhYmxlX3YyKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfYWNrX3YyKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJaW50IGluZGV4ID0gY3ZteF9nZXRfY29yZV9udW0oKSAqIDIgKyAxOwogCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XRE9HMCk7CkBAIC0zODMsNiArNDI0LDIwIEBACiB9CiAKIC8qCisgKiBFbmFibGUgdGhlIGlycSBvbiB0aGUgY3VycmVudCBjb3JlIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CisgKiByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY2l1MV9lb2lfdjIodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlpbnQgaW5kZXggPSBjdm14X2dldF9jb3JlX251bSgpICogMiArIDE7CisJdTY0IG1hc2sgPSAxdWxsIDw8IChpcnEgLSBPQ1RFT05fSVJRX1dET0cwKTsKKworCWlmICgoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSA9PSAwKQorCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMV9XMVMoaW5kZXgpLCBtYXNrKTsKK30KKworLyoKICAqIERpc2FibGUgdGhlIGlycSBvbiB0aGUgYWxsIGNvcmVzIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CiAgKiByZWdpc3RlcnMuCiAgKi8KQEAgLTQwNSw3ICs0NjAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGJpdCA9IGlycSAtIE9DVEVPTl9JUlFfV0RPRzA7CS8qIEJpdCAwLTYzIG9mIEVOMSAqLwogCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTFfcndsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTFfbG9jaywgZmxhZ3MpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCWludCBjb3JlaWQgPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KTsKIAkJdWludDY0X3QgZW4xID0KQEAgLTQyMiw3ICs0NzcsNyBAQAogCSAqIG9mIHRoZW0gYXJlIGRvbmUuCiAJICovCiAJY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjdm14X2dldF9jb3JlX251bSgpICogMiArIDEpKTsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUxX3J3bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX2NpdTFfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NTUsOCArNTEwLDggQEAKIAkubmFtZSA9ICJDSVUwIiwKIAkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUxX2VuYWJsZV92MiwKIAkuZGlzYWJsZSA9IG9jdGVvbl9pcnFfY2l1MV9kaXNhYmxlX2FsbF92MiwKLQkuYWNrID0gb2N0ZW9uX2lycV9jaXUxX2Rpc2FibGVfdjIsCi0JLmVvaSA9IG9jdGVvbl9pcnFfY2l1MV9lbmFibGVfdjIsCisJLmFjayA9IG9jdGVvbl9pcnFfY2l1MV9hY2tfdjIsCisJLmVvaSA9IG9jdGVvbl9pcnFfY2l1MV9lb2lfdjIsCiAjaWZkZWYgQ09ORklHX1NNUAogCS5zZXRfYWZmaW5pdHkgPSBvY3Rlb25faXJxX2NpdTFfc2V0X2FmZmluaXR5X3YyLAogI2VuZGlmCkBAIC00NzUsNiArNTMwLDggQEAKIAogI2lmZGVmIENPTkZJR19QQ0lfTVNJCiAKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG9jdGVvbl9pcnFfbXNpX2xvY2spOworCiBzdGF0aWMgdm9pZCBvY3Rlb25faXJxX21zaV9hY2sodW5zaWduZWQgaW50IGlycSkKIHsKIAlpZiAoIW9jdGVvbl9oYXNfZmVhdHVyZShPQ1RFT05fRkVBVFVSRV9QQ0lFKSkgewpAQCAtNTE1LDEyICs1NzIsMTIgQEAKIAkJICovCiAJCXVpbnQ2NF90IGVuOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9tc2lfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfbXNpX2xvY2ssIGZsYWdzKTsKIAkJZW4gPSBjdm14X3JlYWRfY3NyKENWTVhfUEVYUF9OUEVJX01TSV9FTkIwKTsKIAkJZW4gfD0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9NU0lfQklUMCk7CiAJCWN2bXhfd3JpdGVfY3NyKENWTVhfUEVYUF9OUEVJX01TSV9FTkIwLCBlbik7CiAJCWN2bXhfcmVhZF9jc3IoQ1ZNWF9QRVhQX05QRUlfTVNJX0VOQjApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX21zaV9sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZvY3Rlb25faXJxX21zaV9sb2NrLCBmbGFncyk7CiAJfQogfQogCkBAIC01MzcsMTIgKzU5NCwxMiBAQAogCQkgKi8KIAkJdWludDY0X3QgZW47CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX21zaV9sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmb2N0ZW9uX2lycV9tc2lfbG9jaywgZmxhZ3MpOwogCQllbiA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9QRVhQX05QRUlfTVNJX0VOQjApOwogCQllbiAmPSB+KDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfTVNJX0JJVDApKTsKIAkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QRVhQX05QRUlfTVNJX0VOQjAsIGVuKTsKIAkJY3ZteF9yZWFkX2NzcihDVk1YX1BFWFBfTlBFSV9NU0lfRU5CMCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfbXNpX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfbXNpX2xvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTU1OSw2ICs2MTYsNyBAQAogewogCWludCBpcnE7CiAJc3RydWN0IGlycV9jaGlwICpjaGlwMDsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAwX3RpbWVyOwogCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDE7CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC01NzQsOSArNjMyLDExIEBACiAJICAgIE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041NlhYX1BBU1MyX1gpIHx8CiAJICAgIE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041MlhYX1BBU1MyX1gpKSB7CiAJCWNoaXAwID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUwX3YyOworCQljaGlwMF90aW1lciA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MF90aW1lcl92MjsKIAkJY2hpcDEgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTFfdjI7CiAJfSBlbHNlIHsKIAkJY2hpcDAgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTA7CisJCWNoaXAwX3RpbWVyID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUwX3RpbWVyOwogCQljaGlwMSA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MTsKIAl9CiAKQEAgLTU5MCw3ICs2NTAsMjEgQEAKIAogCS8qIDI0IC0gODcgQ0lVX0lOVF9TVU0wICovCiAJZm9yIChpcnEgPSBPQ1RFT05fSVJRX1dPUktRMDsgaXJxIDw9IE9DVEVPTl9JUlFfQk9PVERNQTsgaXJxKyspIHsKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGlycSwgY2hpcDAsIGhhbmRsZV9wZXJjcHVfaXJxKTsKKwkJc3dpdGNoIChpcnEpIHsKKwkJY2FzZSBPQ1RFT05fSVJRX0dNWF9EUlAwOgorCQljYXNlIE9DVEVPTl9JUlFfR01YX0RSUDE6CisJCWNhc2UgT0NURU9OX0lSUV9JUERfRFJQOgorCQljYXNlIE9DVEVPTl9JUlFfS0VZX1pFUk86CisJCWNhc2UgT0NURU9OX0lSUV9USU1FUjA6CisJCWNhc2UgT0NURU9OX0lSUV9USU1FUjE6CisJCWNhc2UgT0NURU9OX0lSUV9USU1FUjI6CisJCWNhc2UgT0NURU9OX0lSUV9USU1FUjM6CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBjaGlwMF90aW1lciwgaGFuZGxlX3BlcmNwdV9pcnEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBjaGlwMCwgaGFuZGxlX3BlcmNwdV9pcnEpOworCQkJYnJlYWs7CisJCX0KIAl9CiAKIAkvKiA4OCAtIDE1MSBDSVVfSU5UX1NVTTEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLXBsYXRmb3JtLmMKaW5kZXggY2ZkYjRjMi4uNjJhYzMwZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLXBsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLXBsYXRmb3JtLmMKQEAgLTksNiArOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKQEAgLTE1OSw2ICsxNjAsOTAgQEAKIH0KIGRldmljZV9pbml0Y2FsbChvY3Rlb25fcm5nX2RldmljZV9pbml0KTsKIAorc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIG9jdGVvbl9pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oImRzMTMzNyIsIDB4NjgpLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvY3Rlb25faTJjX2RldmljZXNfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBvY3Rlb25faTJjX2RldmljZXMsCisJCQkJICAgICAgIEFSUkFZX1NJWkUob2N0ZW9uX2kyY19kZXZpY2VzKSk7Cit9CithcmNoX2luaXRjYWxsKG9jdGVvbl9pMmNfZGV2aWNlc19pbml0KTsKKworI2RlZmluZSBPQ1RFT05fSTJDX0lPX0JBU0UgMHgxMTgwMDAwMDAxMDAwdWxsCisjZGVmaW5lIE9DVEVPTl9JMkNfSU9fVU5JVF9PRkZTRVQgMHgyMDAKKworc3RhdGljIHN0cnVjdCBvY3Rlb25faTJjX2RhdGEgb2N0ZW9uX2kyY19kYXRhWzJdOworCitzdGF0aWMgaW50IF9faW5pdCBvY3Rlb25faTJjX2RldmljZV9pbml0KHZvaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQ7CisJaW50IHJldCA9IDA7CisJaW50IHBvcnQsIG51bV9wb3J0czsKKworCXN0cnVjdCByZXNvdXJjZSBpMmNfcmVzb3VyY2VzW10gPSB7CisJCXsKKwkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQl9LCB7CisJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwkJfQorCX07CisKKwlpZiAoT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjU2WFgpIHx8IE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041MlhYKSkKKwkJbnVtX3BvcnRzID0gMjsKKwllbHNlCisJCW51bV9wb3J0cyA9IDE7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgbnVtX3BvcnRzOyBwb3J0KyspIHsKKwkJb2N0ZW9uX2kyY19kYXRhW3BvcnRdLnN5c19mcmVxID0gb2N0ZW9uX2dldF9jbG9ja19yYXRlKCk7CisJCS8qRklYTUU6IHNob3VsZCBiZSBleGFtaW5lZC4gQXQgdGhlIG1vbWVudCBpcyBzZXQgZm9yIDEwMEtoeiAqLworCQlvY3Rlb25faTJjX2RhdGFbcG9ydF0uaTJjX2ZyZXEgPSAxMDAwMDA7CisKKwkJcGQgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoImkyYy1vY3Rlb24iLCBwb3J0KTsKKwkJaWYgKCFwZCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcGQtPmRldi5wbGF0Zm9ybV9kYXRhID0gb2N0ZW9uX2kyY19kYXRhICsgcG9ydDsKKworCQlpMmNfcmVzb3VyY2VzWzBdLnN0YXJ0ID0KKwkJCU9DVEVPTl9JMkNfSU9fQkFTRSArIChwb3J0ICogT0NURU9OX0kyQ19JT19VTklUX09GRlNFVCk7CisJCWkyY19yZXNvdXJjZXNbMF0uZW5kID0gaTJjX3Jlc291cmNlc1swXS5zdGFydCArIDB4MWY7CisJCXN3aXRjaCAocG9ydCkgeworCQljYXNlIDA6CisJCQlpMmNfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gT0NURU9OX0lSUV9UV1NJOworCQkJaTJjX3Jlc291cmNlc1sxXS5lbmQgPSBPQ1RFT05fSVJRX1RXU0k7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJaTJjX3Jlc291cmNlc1sxXS5zdGFydCA9IE9DVEVPTl9JUlFfVFdTSTI7CisJCQlpMmNfcmVzb3VyY2VzWzFdLmVuZCA9IE9DVEVPTl9JUlFfVFdTSTI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQl9CisKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGQsCisJCQkJCQkgICAgaTJjX3Jlc291cmNlcywKKwkJCQkJCSAgICBBUlJBWV9TSVpFKGkyY19yZXNvdXJjZXMpKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbDsKKworCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbDsKKwl9CisJcmV0dXJuIHJldDsKK2ZhaWw6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KK2RldmljZV9pbml0Y2FsbChvY3Rlb25faTJjX2RldmljZV9pbml0KTsKKwogLyogT2N0ZW9uIFNNSS9NRElPIGludGVyZmFjZS4gICovCiBzdGF0aWMgaW50IF9faW5pdCBvY3Rlb25fbWRpb2J1c19kZXZpY2VfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc21wLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYwppbmRleCBjMTk4ZWZkLi41MWU5ODAyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYwpAQCAtMzI3LDcgKzMyNyw3IEBACiAJCQkJICAgYXZhaWxfY29yZW1hc2spOwogCX0KIAotCXByX2luZm8oIlJlc2V0IGNvcmUgJWQuIEF2YWlsYWJsZSBDb3JlbWFzayA9ICV4IFxuIiwgY29yZWlkLAorCXByX2luZm8oIlJlc2V0IGNvcmUgJWQuIEF2YWlsYWJsZSBDb3JlbWFzayA9ICV4XG4iLCBjb3JlaWQsCiAJCWF2YWlsX2NvcmVtYXNrKTsKIAljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9QUF9SU1QsIDEgPDwgY29yZWlkKTsKIAljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9QUF9SU1QsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvYmFsdC9wY2kuYyBiL2FyY2gvbWlwcy9jb2JhbHQvcGNpLmMKaW5kZXggY2ZjZTdhZi4uODVlYzljYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvYmFsdC9wY2kuYworKysgYi9hcmNoL21pcHMvY29iYWx0L3BjaS5jCkBAIC0yNSw3ICsyNSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY29iYWx0X2lvX3Jlc291cmNlID0gewogCS5zdGFydAk9IDB4MTAwMCwKLQkuZW5kCT0gR1RfREVGX1BDSTBfSU9fU0laRSAtIDEsCisJLmVuZAk9IDB4ZmZmZmZmVUwsCiAJLm5hbWUJPSAiUENJIEkvTyIsCiAJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKIH07CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZwppbmRleCA2OGU5MGNkLi5mNjZkNDA2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcKQEAgLTEsNzggKzEsMTAyIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzoyNCAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgRnJpIEZlYiAyNiAwODo0NjoxNCAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfTUFDSF9BTENIRU1ZPXkKLSMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19NSVBTX0RCMTAwMD15Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19EQjEwMDA9eQorIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxMDAwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15Ci1DT05GSUdfU09DX0FVMTAwMD15Ci1DT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfSVJRX0NQVT15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CiAKICMKICMgQ1BVIHNlbGVjdGlvbgogIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAogQ09ORklHX0NQVV9NSVBTMzJfUjE9eQogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTg1LDYgKzEwOSw3IEBACiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CkBAIC05MiwxMSArMTE3LDE0IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UPXkKIENPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQogQ09ORklHX0NQVV9NSVBTMzI9eQogQ09ORklHX0NQVV9NSVBTUjE9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0hBUkRXQVJFX1dBVENIUE9JTlRTPXkKIAogIwogIyBLZXJuZWwgdHlwZQpAQCAtMTA2LDE4NCArMTM0LDI0NCBAQAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDA9eQogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAotQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKIENPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQotQ09ORklHX0haPTEwMDAKK0NPTkZJR19IWj0xMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1kYjEwMDAiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk89eQorIyBDT05GSUdfS0VSTkVMX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19LRVJORUxfTFpNQT15CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19USU5ZX1JDVT15CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfUkVMQVk9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfQUlPPXkKIAogIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfUENNQ0lBPXkKIENPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15CisjIENPTkZJR19QQ01DSUFfSU9DVEwgaXMgbm90IHNldAogCiAjCiAjIFBDLWNhcmQgYnJpZGdlcwogIwogIyBDT05GSUdfUENNQ0lBX0FVMVgwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIworQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEPXkKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9NSUdSQVRFPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19ORVRfS0VZX01JR1JBVEU9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CiBDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX1JBUlA9eQogIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CkBAIC0yOTQsMTEwICszODIsMjUgQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19UQ1BfTUQ1U0lHPXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19TRUNNQVJLPXkKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQotQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU1VQUE9SVD15Ci0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLPW0KLUNPTkZJR19ORl9DVF9BQ0NUPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQotQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCi1DT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQotQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQotQ09ORklHX05GX0NUX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQotIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTQwNywyNyArNDEwLDI0IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19ST1VURT15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQzNiwyNSArNDM2LDI1IEBACiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPW0KK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLUNPTkZJR19DT05ORUNUT1I9bQotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00NjcsNiArNDY3LDcgQEAKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC00OTIsMTQgKzQ5MywxMyBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0FMQ0hFTVk9eQorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTUxNiwxNzQgKzUxNiwxMTUgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIworQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0RST01fUEtUQ0RWRD1tCi1DT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19SQUlEX0FUVFJTPW0KKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogQ09ORklHX1BIWUxJQj15CiAKICMKICMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwogIwotQ09ORklHX01BUlZFTExfUEhZPW0KLUNPTkZJR19EQVZJQ09NX1BIWT1tCi1DT05GSUdfUVNFTUlfUEhZPW0KLUNPTkZJR19MWFRfUEhZPW0KLUNPTkZJR19DSUNBREFfUEhZPW0KLUNPTkZJR19WSVRFU1NFX1BIWT1tCi1DT05GSUdfU01TQ19QSFk9bQotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfREFWSUNPTV9QSFk9eQorQ09ORklHX1FTRU1JX1BIWT15CitDT05GSUdfTFhUX1BIWT15CitDT05GSUdfQ0lDQURBX1BIWT15CitDT05GSUdfVklURVNTRV9QSFk9eQorQ09ORklHX1NNU0NfUEhZPXkKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorQ09ORklHX0lDUExVU19QSFk9eQorQ09ORklHX1JFQUxURUtfUEhZPXkKK0NPTkZJR19OQVRJT05BTF9QSFk9eQorQ09ORklHX1NURTEwWFA9eQorQ09ORklHX0xTSV9FVDEwMTFDX1BIWT15CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIworIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST1tCitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX01JUFNfQVUxWDAwX0VORVQ9eQogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKIAogIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCiAKICMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfTkVUX1BDTUNJQT15Ci1DT05GSUdfUENNQ0lBXzNDNTg5PW0KLUNPTkZJR19QQ01DSUFfM0M1NzQ9bQotQ09ORklHX1BDTUNJQV9GTVZKMThYPW0KLUNPTkZJR19QQ01DSUFfUENORVQ9bQotQ09ORklHX1BDTUNJQV9OTUNMQU49bQotQ09ORklHX1BDTUNJQV9TTUM5MUM5Mj1tCi1DT05GSUdfUENNQ0lBX1hJUkMyUFM9bQotQ09ORklHX1BDTUNJQV9BWE5FVD1tCi0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAotQ09ORklHX1BQUF9BU1lOQz1tCi0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAotQ09ORklHX1BQUF9ERUZMQVRFPW0KLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfTVBQRT1tCi1DT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwpAQCAtNjkxLDE2ICs2MzIsMTQgQEAKICMKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwogIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTcxMCwzNSArNjQ5LDMzIEBACiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCi1DT05GSUdfU0VSSU89eQotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19SQVc9bQorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKLUNPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVTFYMDBfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ1M9bQorIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKQEAgLTc1MCwxOTggKzY4NywyOTEgQEAKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogCiAjCiAjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwogIwotQ09ORklHX1NZTkNMSU5LX0NTPW0KKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIFBQUyBzdXBwb3J0CiAjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIworIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCi0jIE11bHRpbWVkaWEgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKLSMgSElEIERldmljZXMKKyMgVVNCIElucHV0IERldmljZXMKICMKLSMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAogCiAjCi0jIFVTQiBzdXBwb3J0CisjIFNwZWNpYWwgSElEIGRyaXZlcnMKICMKKyMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKICMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUz15CitDT05GSUdfVVNCX1NVU1BFTkQ9eQorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIworIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKICMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAorIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKICMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCi0jIExFRCBkcml2ZXJzCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKICMKIAogIwotIyBMRUQgVHJpZ2dlcnMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCitDT05GSUdfUlRDX0RSVl9BVTFYWFg9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjIFRJIFZMWU5RCiAjCi0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCi0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIERNQSBFbmdpbmUgc3VwcG9ydAotIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLQotIwotIyBETUEgRGV2aWNlcwotIwotCi0jCi0jIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKLSMKLQotIwotIyBWaXJ0dWFsaXphdGlvbgotIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUMl9GU19YQVRUUj15Ci1DT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9bQotQ09ORklHX0FVVE9GUzRfRlM9bQotQ09ORklHX0ZVU0VfRlM9bQotQ09ORklHX0dFTkVSSUNfQUNMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtOTYwLDc0ICs5OTAsNjUgQEAKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPW0KK0NPTkZJR19DUkFNRlM9eQorQ09ORklHX1NRVUFTSEZTPXkKKyMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPW0KLSMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPW0KLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPW0KK0NPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKICMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKQEAgLTEwNDUsMTAgKzEwNjYsMTAgQEAKICMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CiAjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CkBAIC0xMDU4LDM4ICsxMDc5LDc1IEBACiAjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotQ09ORklHX0RMTT1tCi1DT05GSUdfRExNX1RDUD15Ci0jIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKK0NPTkZJR19TVFJJUF9BU01fU1lNUz15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0NST1NTQ09NUElMRT15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVEVDVF9IVU5HX1RBU0sgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUlVOVElNRV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfWkJPT1Q9eQogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTEwOTcsNjcgKzExNTUsMjkgQEAKIENPTkZJR19LRVlTPXkKIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19ITUFDPXkKLUNPTkZJR19DUllQVE9fWENCQz1tCi1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9eQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCi1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz1tCi1DT05GSUdfQ1JZUFRPX1BDQkM9bQotQ09ORklHX0NSWVBUT19MUlc9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fVEVBPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi1DT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIworIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj1tCitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfUExJU1Q9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcKaW5kZXggOTA4MTI4My4uYWJiOWE1OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnCkBAIC0xLDc4ICsxLDEwMiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCi0jIFR1ZSBGZWIgMjAgMjE6NDc6MjQgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzCisjIEZyaSBGZWIgMjYgMDg6NTA6MTUgMjAxMAogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCi1DT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX01BQ0hfQUxDSEVNWT15Ci0jIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlQU19EQjExMDA9eQotIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9PTkdTT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlRWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUlLUk9USUtfUkI1MzIgaXMgbm90IHNldAorIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1NJTVVMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1JFRkVSRU5DRV9CT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMD15CisjIENPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAorQ09ORklHX01JUFNfREIxMTAwPXkKKyMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CitDT05GSUdfU09DX0FVMTEwMD15CitDT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BST0ZJTEU9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfQ0VWVF9SNEtfTElCPXkKK0NPTkZJR19DU1JDX1I0S19MSUI9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0dQSU89eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQotQ09ORklHX1NPQ19BVTExMDA9eQotQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0lSUV9DUFU9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCiAjIENQVSBzZWxlY3Rpb24KICMKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJGIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTUlQUzMyX1IxPXkKICMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CkBAIC04NSw2ICsxMDksNyBAQAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldApAQCAtOTIsMTEgKzExNywxNCBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CiBDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKIENPTkZJR19DUFVfTUlQUzMyPXkKIENPTkZJR19DUFVfTUlQU1IxPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19IQVJEV0FSRV9XQVRDSFBPSU5UUz15CiAKICMKICMgS2VybmVsIHR5cGUKQEAgLTEwNiwxNzMgKzEzNCwyNDIgQEAKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzMyS0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKLUNPTkZJR19IWj0xMDAwCitDT05GSUdfSFo9MTAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cAogIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSItZGIxMTAwIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVElOWV9SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1JFTEFZPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQogIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX01NVT15CitDT05GSUdfUENDQVJEPXkKK0NPTkZJR19QQ01DSUE9eQorQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15CisjIENPTkZJR19QQ01DSUFfSU9DVEwgaXMgbm90IHNldAogCiAjCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMgUEMtY2FyZCBicmlkZ2VzCiAjCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKKyMgQ09ORklHX1BDTUNJQV9BVTFYMDAgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEPXkKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9NSUdSQVRFPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19ORVRfS0VZX01JR1JBVEU9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CiBDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX1JBUlA9eQogIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CkBAIC0yODMsMTEwICszODAsMjUgQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19UQ1BfTUQ1U0lHPXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19TRUNNQVJLPXkKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQotQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU1VQUE9SVD15Ci0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLPW0KLUNPTkZJR19ORl9DVF9BQ0NUPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQotQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCi1DT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQotQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQotQ09ORklHX05GX0NUX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQotIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTM5NiwyNyArNDA4LDI0IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19ST1VURT15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQyNSwyNSArNDM0LDI1IEBACiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotQ09ORklHX0NPTk5FQ1RPUj1tCi0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDU2LDYgKzQ2NSw3IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDgxLDE0ICs0OTEsMTMgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9BTENIRU1ZPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC01MDUsMTYxICs1MTQsMTIzIEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CitDT05GSUdfSURFPXkKIAogIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIwotIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFQ1MgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorQ09ORklHX0lERV9UQVNLX0lPQ1RMPXkKK0NPTkZJR19JREVfUFJPQ19GUz15CiAKICMKLSMgQmxvY2sgZGV2aWNlcworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCi0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX09WRVJfRVRIPW0KLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCi0jIENPTkZJR19JREUgaXMgbm90IHNldAorIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX1JBSURfQVRUUlM9bQorIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIEFUQSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCi0jCiAjIENPTkZJR19BVEEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIworIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CiBDT05GSUdfUEhZTElCPXkKIAogIwogIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCiAjCi1DT05GSUdfTUFSVkVMTF9QSFk9bQotQ09ORklHX0RBVklDT01fUEhZPW0KLUNPTkZJR19RU0VNSV9QSFk9bQotQ09ORklHX0xYVF9QSFk9bQotQ09ORklHX0NJQ0FEQV9QSFk9bQotQ09ORklHX1ZJVEVTU0VfUEhZPW0KLUNPTkZJR19TTVNDX1BIWT1tCi0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19EQVZJQ09NX1BIWT15CitDT05GSUdfUVNFTUlfUEhZPXkKK0NPTkZJR19MWFRfUEhZPXkKK0NPTkZJR19DSUNBREFfUEhZPXkKK0NPTkZJR19WSVRFU1NFX1BIWT15CitDT05GSUdfU01TQ19QSFk9eQorQ09ORklHX0JST0FEQ09NX1BIWT15CitDT05GSUdfSUNQTFVTX1BIWT15CitDT05GSUdfUkVBTFRFS19QSFk9eQorQ09ORklHX05BVElPTkFMX1BIWT15CitDT05GSUdfU1RFMTBYUD15CitDT05GSUdfTFNJX0VUMTAxMUNfUEhZPXkKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPW0KK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19BVTFYMDBfRU5FVD15CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKICMKIAogIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAotQ09ORklHX1BQUF9BU1lOQz1tCi0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAotQ09ORklHX1BQUF9ERUZMQVRFPW0KLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfTVBQRT1tCi1DT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwpAQCAtNjY3LDE2ICs2MzgsMTQgQEAKICMKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwogIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTY4NiwzNCArNjU1LDMzIEBACiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCi1DT05GSUdfU0VSSU89eQotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotQ09ORklHX1NFUklPX0xJQlBTMj1tCi1DT05GSUdfU0VSSU9fUkFXPW0KKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15CiBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVTFYMDBfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldApAQCAtNzI1LDc4ICs2OTMsOTEgQEAKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCi0jIERhbGxhcydzIDEtd2lyZSBidXMKKyMgUFBTIHN1cHBvcnQKICMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIwogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogQ09ORklHX0ZCX0FVMTEwMD15CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydApAQCAtODA0LDkgKzc4NSwxMCBAQAogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19GT05UUz15Ci1DT05GSUdfRk9OVF84eDg9eQorIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAogQ09ORklHX0ZPTlRfOHgxNj15CiAjIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAogIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKQEAgLTgxNiwxMzIgKzc5OCwxODYgQEAKICMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAotCi0jCi0jIExvZ28gY29uZmlndXJhdGlvbgotIwotQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIEhJRCBEZXZpY2VzCi0jCi0jIENPTkZJR19ISUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKICMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUz15CitDT05GSUdfVVNCX1NVU1BFTkQ9eQorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIworIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CiAKICMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAorIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKICMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCi0jIExFRCBkcml2ZXJzCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKICMKIAogIwotIyBMRUQgVHJpZ2dlcnMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCitDT05GSUdfUlRDX0RSVl9BVTFYWFg9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjIFRJIFZMWU5RCiAjCi0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCi0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIERNQSBFbmdpbmUgc3VwcG9ydAotIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLQotIwotIyBETUEgRGV2aWNlcwotIwotCi0jCi0jIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKLSMKLQotIwotIyBWaXJ0dWFsaXphdGlvbgotIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUMl9GU19YQVRUUj15Ci1DT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLUNPTkZJR19SRUlTRVJGU19GUz1tCi0jIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAotQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKLUNPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPW0KLUNPTkZJR19BVVRPRlM0X0ZTPW0KLUNPTkZJR19GVVNFX0ZTPW0KLUNPTkZJR19HRU5FUklDX0FDTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTk2MCw2OSArOTk2LDc2IEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorIyBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci1DT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLUNPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz1tCitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CitDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQorQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfSkZGUzJfRlNfU0VDVVJJVFk9eQorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlM9eQorIyBDT05GSUdfU1FVQVNIRlNfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9MwogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotQ09ORklHX05GU0Q9bQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQotQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLUNPTkZJR19TTUJfRlM9bQotIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9bQorQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKICMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CkBAIC0xMDYyLDM0ICsxMTA1LDcxIEBACiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotQ09ORklHX0RMTT1tCi1DT05GSUdfRExNX1RDUD15Ci0jIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKK0NPTkZJR19TVFJJUF9BU01fU1lNUz15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0NST1NTQ09NUElMRT15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVEVDVF9IVU5HX1RBU0sgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUlVOVElNRV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfWkJPT1Q9eQogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTEwOTcsNjcgKzExNzcsMzIgQEAKIENPTkZJR19LRVlTPXkKIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19ITUFDPXkKLUNPTkZJR19DUllQVE9fWENCQz1tCi1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9eQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCi1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz1tCi1DT05GSUdfQ1JZUFRPX1BDQkM9bQotQ09ORklHX0NSWVBUT19MUlc9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fVEVBPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi1DT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIworQ09ORklHX1NFQ1VSSVRZRlM9eQorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0NSQ19DQ0lUVD1tCi1DT05GSUdfQ1JDMTY9bQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX1BMSVNUPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcKaW5kZXggZGFiZjAzMC4uOTkxYzIwYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnCkBAIC0xLDc4ICsxLDEwMiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCi0jIFR1ZSBGZWIgMjAgMjE6NDc6MjUgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzCisjIEZyaSBGZWIgMjYgMTA6MTg6MDkgMjAxMAogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCi1DT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX01BQ0hfQUxDSEVNWT15Ci0jIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlQU19EQjEyMDA9eQotIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9PTkdTT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlRWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUlLUk9USUtfUkI1MzIgaXMgbm90IHNldAorIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1NJTVVMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1JFRkVSRU5DRV9CT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMD15CisjIENPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAorQ09ORklHX01JUFNfREIxMjAwPXkKKyMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CitDT05GSUdfU09DX0FVMTIwMD15CitDT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BST0ZJTEU9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfQ0VWVF9SNEtfTElCPXkKK0NPTkZJR19DU1JDX1I0S19MSUI9eQogQ09ORklHX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQogQ09ORklHX01JUFNfRElTQUJMRV9PQlNPTEVURV9JREU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0dQSU89eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQotQ09ORklHX1NPQ19BVTEyMDA9eQotQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0lSUV9DUFU9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCiAjIENQVSBzZWxlY3Rpb24KICMKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJGIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTUlQUzMyX1IxPXkKICMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CkBAIC04NSw2ICsxMDksNyBAQAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldApAQCAtOTIsMTEgKzExNywxNCBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CiBDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKIENPTkZJR19DUFVfTUlQUzMyPXkKIENPTkZJR19DUFVfTUlQU1IxPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19IQVJEV0FSRV9XQVRDSFBPSU5UUz15CiAKICMKICMgS2VybmVsIHR5cGUKQEAgLTEwNiwxODAgKzEzNCwyMzUgQEAKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzMyS0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfS1NNPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWRiMTIwMCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19USU5ZX1JDVT15CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfQUlPPXkKIAogIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCiAjCisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi1DT05GSUdfUENDQVJEPW0KLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPW0KK0NPTkZJR19QQ0NBUkQ9eQorQ09ORklHX1BDTUNJQT15CiBDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKLUNPTkZJR19QQ01DSUFfSU9DVEw9eQorIyBDT05GSUdfUENNQ0lBX0lPQ1RMIGlzIG5vdCBzZXQKIAogIwogIyBQQy1jYXJkIGJyaWRnZXMKICMKLUNPTkZJR19QQ01DSUFfQVUxWDAwPW0KLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCisjIENPTkZJR19QQ01DSUFfQVUxWDAwIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUFfQUxDSEVNWV9ERVZCT0FSRD15CiAKICMKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUz15CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPXkKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9NSUdSQVRFPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19ORVRfS0VZX01JR1JBVEU9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CiBDT05GSUdfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldApAQCAtMjkwLDEwNyArMzczLDI1IEBACiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCi1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9MUk89eQorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi1DT05GSUdfVENQX01ENVNJRz15Ci0KLSMKLSMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfU0VDTUFSSz15Ci1DT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU1VQUE9SVD15Ci0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLPW0KLUNPTkZJR19ORl9DVF9BQ0NUPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQotQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCi1DT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQotQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQotIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTQwMCwyMSArNDAxLDI0IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19ST1VURT15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQyMywyNSArNDI3LDI1IEBACiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQ1NCw2ICs0NTgsNyBAQAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQ3OSwxOSArNDg0LDIxIEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQUxDSEVNWT15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwogIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC01MDMsMjI0ICs1MTAsMTM0IEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKIENPTkZJR19NVERfTkFORD15CiAjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9JRFM9eQogIyBDT05GSUdfTVREX05BTkRfQVUxNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIworQ09ORklHX01URF9OQU5EX1BMQVRGT1JNPXkKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfVUI9eQorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLUNPTkZJR19JREVfTUFYX0hXSUZTPTQKLUNPTkZJR19CTEtfREVWX0lERT15CiAKICMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKK0NPTkZJR19JREVfQVRBUEk9eQogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLUNPTkZJR19JREVESVNLX01VTFRJX01PREU9eQotQ09ORklHX0JMS19ERVZfSURFQ1M9bQotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDUz15CitDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfVEFTS19JT0NUTD15CisjIENPTkZJR19JREVfUFJPQ19GUyBpcyBub3Qgc2V0CiAKICMKICMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwotQ09ORklHX0lERV9HRU5FUklDPXkKKyMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWD15CiBDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX1BJT19EQkRNQT15CiAjIENPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfTURNQTJfREJETUEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9TRVFUU19QRVJfUlE9MTI4Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfVEdUPW0KKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi1DT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9TUj15Ci0jIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi1DT05GSUdfU0NTSV9NVUxUSV9MVU49eQotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwotIwotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBTQ1NJIGFkYXB0ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfUENNQ0lBX0FIQTE1MlggaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX0ZET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX05JTkpBX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1FMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfU1lNNTNDNTAwIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQVUxWDAwX0VORVQgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKIAogIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCiAKICMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCkBAIC03MjgsMTYgKzY0NSwxNCBAQAogIwogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNzQ3LDI4ICs2NjIsMjYgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz15CisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKIENPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfQVUxWDAwX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIFNlcmlhbCBkcml2ZXJzCkBAIC03NzYsMzMgKzY4OSwyMiBAQAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX0FVMVgwMD15CiAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAKICMKQEAgLTgxMSwyMjMgKzcxMyw2MjQgQEAKICMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAorQ09ORklHX0kyQ19DSEFSREVWPXkKKyMgQ09ORklHX0kyQ19IRUxQRVJfQVVUTyBpcyBub3Qgc2V0CiAKICMKLSMgSTJDIHN1cHBvcnQKKyMgSTJDIEFsZ29yaXRobXMKICMKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CiAKICMKLSMgU1BJIHN1cHBvcnQKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAKICMKLSMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfQVUxNTUwPXkKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1NQSV9BVTE1NTA9eQorQ09ORklHX1NQSV9CSVRCQU5HPXkKKyMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fQURQNTU4OCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorQ09ORklHX0hXTU9OX1ZJRD15CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMgTmF0aXZlIGRyaXZlcnMKICMKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19BRE0xMDI1PXkKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfTE03MD15CisjIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BTUM2ODIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAorIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIwogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogQ09ORklHX0ZCX0FVMTIwMD15CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwotQ09ORklHX1ZHQV9DT05TT0xFPXkKLSMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIEhJRCBEZXZpY2VzCi0jCitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorQ09ORklHX0ZPTlRTPXkKKyMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4MTY9eQorIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAorIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CitDT05GSUdfU09VTkQ9eQorIyBDT05GSUdfU09VTkRfT1NTX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKK0NPTkZJR19TTkRfSkFDSz15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAorQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUz15CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVk1BU1RFUj15CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQUM5N19DT0RFQz15CisjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTUNJQSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX1NPQ19BQzk3X0JVUz15CitDT05GSUdfU05EX1NPQ19BVTFYUFNDPXkKK0NPTkZJR19TTkRfU09DX0FVMVhQU0NfSTJTPXkKK0NPTkZJR19TTkRfU09DX0FVMVhQU0NfQUM5Nz15CitDT05GSUdfU05EX1NPQ19EQjEyMDA9eQorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQorIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DX0FDOTdfQ09ERUM9eQorQ09ORklHX1NORF9TT0NfV004NzMxPXkKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19BQzk3X0JVUz15CitDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0hJRFJBVz15CiAKICMKLSMgVVNCIHN1cHBvcnQKKyMgVVNCIElucHV0IERldmljZXMKICMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAorQ09ORklHX1VTQj15CitDT05GSUdfVVNCX0RFQlVHPXkKK0NPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUz15CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQorQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwotQ09ORklHX1VTQl9HQURHRVQ9bQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAorIyBVU0IgSW1hZ2luZyBkZXZpY2VzCiAjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKICMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTU1DX0JMT0NLPXkKLUNPTkZJR19NTUNfQVUxWD15CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CiAKICMKLSMgTEVEIGRldmljZXMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCiAjCi0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0JMT0NLPXkKKyMgQ09ORklHX01NQ19CTE9DS19CT1VOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfQVUxWD15CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQogCiAjCiAjIExFRCBkcml2ZXJzCiAjCisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MVDM1OTMgaXMgbm90IHNldAogCiAjCiAjIExFRCBUcmlnZ2VycwogIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9JREVfRElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAogCiAjCi0jIEluZmluaUJhbmQgc3VwcG9ydAorIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCiAjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIyBSVEMgaW50ZXJmYWNlcwogIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CiAKICMKLSMgUmVhbCBUaW1lIENsb2NrCisjIEkyQyBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0CisjIFNQSSBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwotIyBETUEgQ2xpZW50cworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCi0jIERNQSBEZXZpY2VzCisjIG9uLUNQVSBSVEMgZHJpdmVycwogIworQ09ORklHX1JUQ19EUlZfQVUxWFhYPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCi0jIEF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQKKyMgVEkgVkxZTlEKICMKLQotIwotIyBWaXJ0dWFsaXphdGlvbgotIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUMl9GU19YQVRUUj15Ci1DT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZTX0ZTPXkKLSMgQ09ORklHX0pGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19BQ0w9eQorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwotQ09ORklHX0lTTzk2NjBfRlM9bQorQ09ORklHX0lTTzk2NjBfRlM9eQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfWklTT0ZTPXkKLUNPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9GUz15CiBDT05GSUdfVURGX05MUz15CiAKICMKICMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwogIwotQ09ORklHX0ZBVF9GUz1tCi1DT05GSUdfTVNET1NfRlM9bQotQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9GUz15CisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CitDT05GSUdfVkZBVF9GUz15CiBDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CiBDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCiAjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEwMzYsMjEgKzEzMzksMTcgQEAKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldApAQCAtMTA1OSwyNyArMTM1OCwzNiBAQAogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19KRkZTMl9GU19ERUJVRz0wCiBDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CiAjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKIENPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9MWk89eQogQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLUNPTkZJR19DUkFNRlM9bQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlM9eQorIyBDT05GSUdfU1FVQVNIRlNfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9MwogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKQEAgLTEwODcsOTMgKzEzOTUsMTQwIEBACiBDT05GSUdfU1VOUlBDPXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLUNPTkZJR19TTUJfRlM9eQotIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCiAjCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX0VGSV9QQVJUSVRJT049eQorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQotQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQotQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQotQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQotQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQotQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQotQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQotQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQotQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQotQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQotQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQotQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQotQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQotQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQotQ09ORklHX05MU19JU084ODU5Xzg9bQotQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCi1DT05GSUdfTkxTX0FTQ0lJPW0KLUNPTkZJR19OTFNfSVNPODg1OV8xPW0KLUNPTkZJR19OTFNfSVNPODg1OV8yPW0KLUNPTkZJR19OTFNfSVNPODg1OV8zPW0KLUNPTkZJR19OTFNfSVNPODg1OV80PW0KLUNPTkZJR19OTFNfSVNPODg1OV81PW0KLUNPTkZJR19OTFNfSVNPODg1OV82PW0KLUNPTkZJR19OTFNfSVNPODg1OV83PW0KLUNPTkZJR19OTFNfSVNPODg1OV85PW0KLUNPTkZJR19OTFNfSVNPODg1OV8xMz1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQotQ09ORklHX05MU19JU084ODU5XzE1PW0KLUNPTkZJR19OTFNfS09JOF9SPW0KLUNPTkZJR19OTFNfS09JOF9VPW0KLUNPTkZJR19OTFNfVVRGOD1tCi0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi1DT05GSUdfRExNPW0KLUNPTkZJR19ETE1fVENQPXkKLSMgQ09ORklHX0RMTV9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX0lTTzg4NTlfMj15CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19DTURMSU5FX0JPT0w9eQotQ09ORklHX0NNRExJTkU9Im1lbT00OE0iCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAiCiAjIENPTkZJR19DTURMSU5FX09WRVJSSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1pCT09UPXkKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMTgxLDY3ICsxNTM2LDMyIEBACiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0hBU0g9bQotQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KLUNPTkZJR19DUllQVE9fSE1BQz1tCi1DT05GSUdfQ1JZUFRPX1hDQkM9bQotQ09ORklHX0NSWVBUT19OVUxMPW0KLUNPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fU0hBMT1tCi1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCi1DT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi1DT05GSUdfQ1JZUFRPX1dQNTEyPW0KLUNPTkZJR19DUllQVE9fVEdSMTkyPW0KLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9bQotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLUNPTkZJR19DUllQVE9fTFJXPW0KLUNPTkZJR19DUllQVE9fREVTPW0KLUNPTkZJR19DUllQVE9fRkNSWVBUPW0KLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX0lUVV9UPXkKIENPTkZJR19DUkMzMj15Ci1DT05GSUdfTElCQ1JDMzJDPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfVEVYVFNFQVJDSD15Ci1DT05GSUdfVEVYVFNFQVJDSF9LTVA9bQotQ09ORklHX1RFWFRTRUFSQ0hfQk09bQotQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KLUNPTkZJR19QTElTVD15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcKaW5kZXggYTE1MTMxMy4uNTQyNGM5MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCkBAIC0xLDgwICsxLDEwNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCi0jIFR1ZSBGZWIgMjAgMjE6NDc6MjYgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzCisjIEZyaSBGZWIgMjYgMDg6NDY6MzMgMjAxMAogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCi1DT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX01BQ0hfQUxDSEVNWT15Ci0jIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlQU19EQjE1MDA9eQotIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9PTkdTT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlRWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUlLUk9USUtfUkI1MzIgaXMgbm90IHNldAorIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1NJTVVMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1JFRkVSRU5DRV9CT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMD15CisjIENPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAorQ09ORklHX01JUFNfREIxNTAwPXkKKyMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CitDT05GSUdfU09DX0FVMTUwMD15CitDT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BST0ZJTEU9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfQ0VWVF9SNEtfTElCPXkKK0NPTkZJR19DU1JDX1I0S19MSUI9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQogQ09ORklHX01JUFNfRElTQUJMRV9PQlNPTEVURV9JREU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0dQSU89eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0JJR19FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19TT0NfQVUxNTAwPXkKLUNPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19JUlFfQ1BVPXkKIENPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKIAogIwogIyBDUFUgc2VsZWN0aW9uCiAjCisjIENPTkZJR19DUFVfTE9PTkdTT04yRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTE9PTkdTT04yRiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX01JUFMzMl9SMT15CiAjIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldApAQCAtODcsNiArMTExLDcgQEAKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKQEAgLTk0LDExICsxMTksMTQgQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1Q9eQogQ09ORklHX1NZU19IQVNfQ1BVX01JUFMzMl9SMT15CiBDT05GSUdfQ1BVX01JUFMzMj15CiBDT05GSUdfQ1BVX01JUFNSMT15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfSEFSRFdBUkVfV0FUQ0hQT0lOVFM9eQogCiAjCiAjIEtlcm5lbCB0eXBlCkBAIC0xMDgsMTM3ICsxMzYsMjA3IEBACiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHXzY0QklUX1BIWVNfQUREUj15CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX1JFU09VUkNFU182NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDA9eQogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAotQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKIENPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQotQ09ORklHX0haPTEwMDAKK0NPTkZJR19IWj0xMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1kYjE1MDAiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk89eQorIyBDT05GSUdfS0VSTkVMX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19LRVJORUxfTFpNQT15CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19SRUxBWT15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfQUlPPXkKIAogIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1BDSV9RVUlSS1M9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CitDT05GSUdfQkxLX0RFVl9CU0c9eQorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfUENNQ0lBPXkKIENPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15Ci1DT05GSUdfQ0FSREJVUz15CisjIENPTkZJR19QQ01DSUFfSU9DVEwgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSREJVUyBpcyBub3Qgc2V0CiAKICMKICMgUEMtY2FyZCBicmlkZ2VzCkBAIC0yNDYsNTEgKzM0NCw0OSBAQAogIyBDT05GSUdfWUVOVEEgaXMgbm90IHNldAogIyBDT05GSUdfUEQ2NzI5IGlzIG5vdCBzZXQKICMgQ09ORklHX0k4MjA5MiBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBX0FVMVgwMD1tCi0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIworIyBDT05GSUdfUENNQ0lBX0FVMVgwMCBpcyBub3Qgc2V0CitDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQ9eQogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfUkFSUD15CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKQEAgLTMwMSwxMTAgKzM5NywyNSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotQ09ORklHX1RDUF9NRDVTSUc9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkZfQ1RfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtNDE0LDI3ICs0MjUsMjQgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDQzLDI1ICs0NTEsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9bQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotQ09ORklHX0NPTk5FQ1RPUj1tCi0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQ3NCw2ICs0ODIsNyBAQAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQ5OSwxNCArNTA4LDE0IEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQUxDSEVNWT15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC01MjQsMTUyICs1MzMsMTUyIEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCi0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi1DT05GSUdfU0dJX0lPQzQ9bQotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz00Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCitDT05GSUdfSURFX1hGRVJfTU9ERT15CiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERUNTPW0KLSMgQ09ORklHX0JMS19ERVZfREVMS0lOIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNTPXkKICMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfUFJPQ19GUz15CiAKICMKICMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwogIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCitDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQorIyBDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CisjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSFBUMzY2PXkKKyMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUE9eQogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19SQUlEX0FUVFJTPW0KKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19QSFlMSUI9eQogCiAjCiAjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKICMKLUNPTkZJR19NQVJWRUxMX1BIWT1tCi1DT05GSUdfREFWSUNPTV9QSFk9bQotQ09ORklHX1FTRU1JX1BIWT1tCi1DT05GSUdfTFhUX1BIWT1tCi1DT05GSUdfQ0lDQURBX1BIWT1tCi1DT05GSUdfVklURVNTRV9QSFk9bQotQ09ORklHX1NNU0NfUEhZPW0KLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTUFSVkVMTF9QSFk9eQorQ09ORklHX0RBVklDT01fUEhZPXkKK0NPTkZJR19RU0VNSV9QSFk9eQorQ09ORklHX0xYVF9QSFk9eQorQ09ORklHX0NJQ0FEQV9QSFk9eQorQ09ORklHX1ZJVEVTU0VfUEhZPXkKK0NPTkZJR19TTVNDX1BIWT15CitDT05GSUdfQlJPQURDT01fUEhZPXkKK0NPTkZJR19JQ1BMVVNfUEhZPXkKK0NPTkZJR19SRUFMVEVLX1BIWT15CitDT05GSUdfTkFUSU9OQUxfUEhZPXkKK0NPTkZJR19TVEUxMFhQPXkKK0NPTkZJR19MU0lfRVQxMDExQ19QSFk9eQogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX01JUFNfQVUxWDAwX0VORVQ9eQogIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CkBAIC02NzcsODggKzY4Niw1MSBAQAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotCi0jCi0jIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci1DT05GSUdfUUxBM1hYWD1tCi0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDM9bQotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRYRU5fTklDPW0KLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKIAogIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwogIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKIAogIwotIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIyBVU0IgTmV0d29yayBBZGFwdGVycwogIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAotQ09ORklHX1BQUF9BU1lOQz1tCi0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAotQ09ORklHX1BQUF9ERUZMQVRFPW0KLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfTVBQRT1tCi1DT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIworIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCkBAIC03NjYsMTYgKzczOCwxNCBAQAogIwogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNzg1LDMzICs3NTUsMzQgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19SQVc9bQorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCi0jIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfQVUxWDAwX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CkBAIC04MjUsMzAxICs3OTYsMTQzIEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAogCiAjCiAjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwogIwotQ09ORklHX1NZTkNMSU5LX0NTPW0KKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKK0NPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIFBQUyBzdXBwb3J0CiAjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIworIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCi0jIE11bHRpbWVkaWEgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBX0FSQiBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwotIyBTb3VuZAorIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfU09VTkQ9eQorIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwotIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCi1DT05GSUdfU05EPW0KLUNPTkZJR19TTkRfVElNRVI9bQotQ09ORklHX1NORF9QQ009bQotQ09ORklHX1NORF9SQVdNSURJPW0KLUNPTkZJR19TTkRfU0VRVUVOQ0VSPW0KLUNPTkZJR19TTkRfU0VRX0RVTU1ZPW0KLUNPTkZJR19TTkRfT1NTRU1VTD15Ci1DT05GSUdfU05EX01JWEVSX09TUz1tCi1DT05GSUdfU05EX1BDTV9PU1M9bQotQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQotQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIEdlbmVyaWMgZGV2aWNlcwotIwotQ09ORklHX1NORF9BQzk3X0NPREVDPW0KLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1ZJUk1JREk9bQotQ09ORklHX1NORF9NVFBBVj1tCi0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgZGV2aWNlcwotIwotIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9GTTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9QQ1hIUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUklQVElERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUgaXMgbm90IHNldAotCi0jCi0jIEFMU0EgTUlQUyBkZXZpY2VzCi0jCi1DT05GSUdfU05EX0FVMVgwMD1tCi0KLSMKLSMgVVNCIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBkZXZpY2VzCi0jCi0jIENPTkZJR19TTkRfVlhQT0NLRVQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BEQVVESU9DRiBpcyBub3Qgc2V0Ci0KLSMKLSMgU29DIGF1ZGlvIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAotCi0jCi0jIE9wZW4gU291bmQgU3lzdGVtCi0jCi1DT05GSUdfU09VTkRfUFJJTUU9eQotIyBDT05GSUdfT0JTT0xFVEVfT1NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0JUODc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0lDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX01TTkRDTEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX01TTkRQSU4gaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfVklBODJDWFhYIGlzIG5vdCBzZXQKLUNPTkZJR19BQzk3X0JVUz1tCi0KLSMKLSMgSElEIERldmljZXMKLSMKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15CiAjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCiAjCiAjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUz15CitDT05GSUdfVVNCX1NVU1BFTkQ9eQogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQogIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwogIwogIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotQ09ORklHX1VTQl9ZRUFMSU5LPW0KLSMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dUQ08gaXMgbm90IHNldAotCi0jCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogCiAjCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVRfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotCi0jCiAjIFVTQiBwb3J0IGRyaXZlcnMKICMKLQotIwotIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtMTEyOCw3ICs5NDEsNyBAQAogIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CkBAIC0xMTM2LDExMiArOTQ5LDEwNyBAQAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTEQ9bQorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotCi0jCi0jIEluZmluaUJhbmQgc3VwcG9ydAotIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCiAjCiAKICMKLSMgUmVhbCBUaW1lIENsb2NrCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCi0jIERNQSBFbmdpbmUgc3VwcG9ydAorIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfQVUxWFhYPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCi0jIERNQSBDbGllbnRzCisjIFRJIFZMWU5RCiAjCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgVmlydHVhbGl6YXRpb24KLSMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci1DT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci1DT05GSUdfUkVJU0VSRlNfRlM9bQotIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19SRUlTRVJGU19GU19YQVRUUj15Ci1DT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0FVVE9GU19GUz1tCi1DT05GSUdfQVVUT0ZTNF9GUz1tCi1DT05GSUdfRlVTRV9GUz1tCi1DT05GSUdfR0VORVJJQ19BQ0w9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC0xMjYwLDc0ICsxMDY4LDgxIEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorIyBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci1DT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLUNPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz1tCitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CitDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQorQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfSkZGUzJfRlNfU0VDVVJJVFk9eQorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlM9eQorIyBDT05GSUdfU1FVQVNIRlNfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9MwogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotQ09ORklHX05GU0Q9bQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQotQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLUNPTkZJR19TTUJfRlM9bQotIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9bQorQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldApAQCAtMTM0NSwxMCArMTE2MCwxMCBAQAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPXkKICMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQogIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldApAQCAtMTM1OCwzOCArMTE3Myw3NiBAQAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQogIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9UQ1A9eQotIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1pCT09UPXkKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMzk3LDY3ICsxMjUwLDMyIEBACiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX1hDQkM9bQotQ09ORklHX0NSWVBUT19OVUxMPW0KLUNPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fU0hBMT1tCi1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCi1DT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi1DT05GSUdfQ1JZUFRPX1dQNTEyPW0KLUNPTkZJR19DUllQVE9fVEdSMTkyPW0KLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9bQotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLUNPTkZJR19DUllQVE9fTFJXPW0KLUNPTkZJR19DUllQVE9fREVTPW0KLUNPTkZJR19DUllQVE9fRkNSWVBUPW0KLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzE2PW0KK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9bQotQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfVEVYVFNFQVJDSD15Ci1DT05GSUdfVEVYVFNFQVJDSF9LTVA9bQotQ09ORklHX1RFWFRTRUFSQ0hfQk09bQotQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KLUNPTkZJR19QTElTVD15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnCmluZGV4IDZiNjQzMzkuLjk0OWI2ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZwpAQCAtMSw3OSArMSwxMDMgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAotIyBUdWUgRmViIDIwIDIxOjQ3OjI3IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMworIyBGcmkgRmViIDI2IDA4OjU4OjIyIDIwMTAKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwotQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19NQUNIX0FMQ0hFTVk9eQotIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAotQ09ORklHX01JUFNfREIxNTUwPXkKLSMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CisjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAotIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FQ19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjUgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUViBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JS1JPVElLX1JCNTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0FMQ0hFTVlfR1BJT0lOVF9BVTEwMDA9eQorIyBDT05GSUdfQUxDSEVNWV9HUElPX0lORElSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTX0RCMTU1MD15CisjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorQ09ORklHX1NPQ19BVTE1NTA9eQorQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX09QUk9GSUxFPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0NFVlRfUjRLX0xJQj15CitDT05GSUdfQ1NSQ19SNEtfTElCPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19NSVBTX0RJU0FCTEVfT0JTT0xFVEVfSURFPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19TT0NfQVUxNTUwPXkKLUNPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19JUlFfQ1BVPXkKIENPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKIAogIwogIyBDUFUgc2VsZWN0aW9uCiAjCisjIENPTkZJR19DUFVfTE9PTkdTT04yRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTE9PTkdTT04yRiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX01JUFMzMl9SMT15CiAjIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldApAQCAtODYsNiArMTEwLDcgQEAKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKQEAgLTkzLDExICsxMTgsMTQgQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1Q9eQogQ09ORklHX1NZU19IQVNfQ1BVX01JUFMzMl9SMT15CiBDT05GSUdfQ1BVX01JUFMzMj15CiBDT05GSUdfQ1BVX01JUFNSMT15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfSEFSRFdBUkVfV0FUQ0hQT0lOVFM9eQogCiAjCiAjIEtlcm5lbCB0eXBlCkBAIC0xMDcsMTM3ICsxMzUsMjA1IEBACiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHXzY0QklUX1BIWVNfQUREUj15CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX1JFU09VUkNFU182NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDA9eQogIyBDT05GSUdfSFpfMTI4IGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAotQ09ORklHX0haXzEwMDA9eQorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDI0IGlzIG5vdCBzZXQKIENPTkZJR19TWVNfU1VQUE9SVFNfQVJCSVRfSFo9eQotQ09ORklHX0haPTEwMDAKK0NPTkZJR19IWj0xMDAKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Ii1kYjE1NTAiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk89eQorIyBDT05GSUdfS0VSTkVMX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19LRVJORUxfTFpNQT15CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19USU5ZX1JDVT15CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfUkVMQVk9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX0FJTz15CiAKICMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfUVVJUktTPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX01PRFZFUlNJT05TPXkKLUNPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogQ09ORklHX01NVT15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotQ09ORklHX1BDQ0FSRD1tCi0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT1tCitDT05GSUdfUENDQVJEPXkKK0NPTkZJR19QQ01DSUE9eQogQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15Ci1DT05GSUdfUENNQ0lBX0lPQ1RMPXkKLUNPTkZJR19DQVJEQlVTPXkKKyMgQ09ORklHX1BDTUNJQV9JT0NUTCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJEQlVTIGlzIG5vdCBzZXQKIAogIwogIyBQQy1jYXJkIGJyaWRnZXMKQEAgLTI0NSw1MSArMzQxLDQ5IEBACiAjIENPTkZJR19ZRU5UQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAogIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUFfQVUxWDAwPW0KLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCisjIENPTkZJR19QQ01DSUFfQVUxWDAwIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUFfQUxDSEVNWV9ERVZCT0FSRD15CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAKICMKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19ORVQ9eQogCiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotQ09ORklHX1hGUk1fTUlHUkFURT15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiAjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAogQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9SQVJQPXkKICMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldApAQCAtMzAwLDExMCArMzk0LDI1IEBACiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCi1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9MUk89eQorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19DVUJJQz15CiBDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi1DT05GSUdfVENQX01ENVNJRz15Ci0KLSMKLSMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfU0VDTUFSSz15Ci1DT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRU5BQkxFRD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NVUFBPUlQ9eQotIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfTkZfQ1RfQUNDVD15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKLUNPTkZJR19ORl9DVF9QUk9UT19HUkU9bQotQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQotQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NBTkU9bQotQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQotQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KLUNPTkZJR19ORl9DVF9ORVRMSU5LPW0KLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKLSMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC00MTMsMjcgKzQyMiwyNCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfUk9VVEU9eQorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT1tCi0jIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCi0jIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00NDIsMjUgKzQ0OCwyNSBAQAogIwogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj1tCitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi1DT05GSUdfQ09OTkVDVE9SPW0KLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00NzMsNiArNDc5LDcgQEAKICMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCkBAIC00OTgsMjAgKzUwNSwyMyBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0FMQ0hFTVk9eQorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwogIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKICMKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTUyMywxMDUgKzUzMyw5NiBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfTVREX05BTkQ9bQorQ09ORklHX01URF9OQU5EPXkKICMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9bQotQ09ORklHX01URF9OQU5EX0FVMTU1MD1tCisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorQ09ORklHX01URF9OQU5EX0FVMTU1MD15CiAjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIworIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9VQj15CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0RST01fUEtUQ0RWRD1tCi1DT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotQ09ORklHX1NHSV9JT0M0PW0KLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIworIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotQ09ORklHX0lERV9NQVhfSFdJRlM9NAotQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIworQ09ORklHX0lERV9YRkVSX01PREU9eQorQ09ORklHX0lERV9BVEFQST15CiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERUNTPW0KLSMgQ09ORklHX0JMS19ERVZfREVMS0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ1M9eQorQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorIyBDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9UQVNLX0lPQ1RMPXkKK0NPTkZJR19JREVfUFJPQ19GUz15CiAKICMKICMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwotQ09ORklHX0lERV9HRU5FUklDPXkKKyMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCiBDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQotIyBDT05GSUdfSURFUENJX1NIQVJFX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfR0VORVJJQz15CisjIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9JREVETUFfRk9SQ0VEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9QQ0lfQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9IUFQzNjY9eQogIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JVDgyMTM9bQorIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKQEAgLTYzMSw4MiArNjMyLDY1IEBACiAjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1RDODZDMDAxPW0KLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUE9eQotIyBDT05GSUdfSURFRE1BX0lWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfUkFJRF9BVFRSUz1tCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAogCiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKKworIworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIEFSQ25ldCBkZXZpY2VzCi0jCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfUEhZTElCPXkKIAogIwogIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCiAjCi1DT05GSUdfTUFSVkVMTF9QSFk9bQotQ09ORklHX0RBVklDT01fUEhZPW0KLUNPTkZJR19RU0VNSV9QSFk9bQotQ09ORklHX0xYVF9QSFk9bQotQ09ORklHX0NJQ0FEQV9QSFk9bQotQ09ORklHX1ZJVEVTU0VfUEhZPW0KLUNPTkZJR19TTVNDX1BIWT1tCi0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19EQVZJQ09NX1BIWT15CitDT05GSUdfUVNFTUlfUEhZPXkKK0NPTkZJR19MWFRfUEhZPXkKK0NPTkZJR19DSUNBREFfUEhZPXkKK0NPTkZJR19WSVRFU1NFX1BIWT15CitDT05GSUdfU01TQ19QSFk9eQorQ09ORklHX0JST0FEQ09NX1BIWT15CitDT05GSUdfSUNQTFVTX1BIWT15CitDT05GSUdfUkVBTFRFS19QSFk9eQorQ09ORklHX05BVElPTkFMX1BIWT15CitDT05GSUdfU1RFMTBYUD15CitDT05GSUdfTFNJX0VUMTAxMUNfUEhZPXkKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPW0KK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19BVTFYMDBfRU5FVD15CiAjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKQEAgLTcxNCw5NiArNjk4LDUzIEBACiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19RTEEzWFhYPW0KLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UMz1tCi0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotQ09ORklHX05FVFhFTl9OSUM9bQotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIworIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKIAogIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwogIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKIAogIwotIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwotQ09ORklHX05FVF9QQ01DSUE9eQotQ09ORklHX1BDTUNJQV8zQzU4OT1tCi1DT05GSUdfUENNQ0lBXzNDNTc0PW0KLUNPTkZJR19QQ01DSUFfRk1WSjE4WD1tCi1DT05GSUdfUENNQ0lBX1BDTkVUPW0KLUNPTkZJR19QQ01DSUFfTk1DTEFOPW0KLUNPTkZJR19QQ01DSUFfU01DOTFDOTI9bQotQ09ORklHX1BDTUNJQV9YSVJDMlBTPW0KLUNPTkZJR19QQ01DSUFfQVhORVQ9bQotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAotQ09ORklHX1BQUF9BU1lOQz1tCi0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAotQ09ORklHX1BQUF9ERUZMQVRFPW0KLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfTVBQRT1tCi1DT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIworIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCkBAIC04MTEsMTYgKzc1MiwxNCBAQAogIwogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtODMwLDI2ICs3NjksMjcgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19SQVc9bQorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCi0jIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfQVUxWDAwX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtODY2LDE5OSArODA2LDQyMCBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKIAogIwogIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKICMKLUNPTkZJR19TWU5DTElOS19DUz1tCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisjIENPTkZJR19JMkNfSEVMUEVSX0FVVE8gaXMgbm90IHNldAogCiAjCi0jIEkyQyBzdXBwb3J0CisjIEkyQyBBbGdvcml0aG1zCiAjCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAogCiAjCi0jIFNQSSBzdXBwb3J0CisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAogIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCi0jIERhbGxhcydzIDEtd2lyZSBidXMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKICMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19BVTE1NTA9eQorIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0FVMTU1MD15CitDT05GSUdfU1BJX0JJVEJBTkc9eQorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIworIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCi0jIE11bHRpbWVkaWEgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAorIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBX0FSQiBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwotIyBTb3VuZAorIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CiAjCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCi0jIEhJRCBEZXZpY2VzCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwotIyBDT05GSUdfSElEIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX1NPVU5EPXkKKyMgQ09ORklHX1NPVU5EX09TU19DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CitDT05GSUdfU05EX0pBQ0s9eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfSFJUSU1FUj15CitDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTPXkKKyMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JUFMgaXMgbm90IHNldAorQ09ORklHX1NORF9VU0I9eQorIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01DSUEgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0M9eQorQ09ORklHX1NORF9TT0NfQVUxWFBTQz15CisjIENPTkZJR19TTkRfU09DX0RCMTIwMCBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST15CisjIENPTkZJR19TTkRfU09DX0FMTF9DT0RFQ1MgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKK0NPTkZJR19VU0JfU1VTUEVORD15CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKK0NPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIworIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKLSMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMgUlRDIGludGVyZmFjZXMKICMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIFJlYWwgVGltZSBDbG9jaworIyBJMkMgUlRDIGRyaXZlcnMKICMKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCi0jIERNQSBFbmdpbmUgc3VwcG9ydAorIyBTUEkgUlRDIGRyaXZlcnMKICMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIENsaWVudHMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwotIyBETUEgRGV2aWNlcworIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKK0NPTkZJR19SVENfRFJWX0FVMVhYWD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwotIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0CisjIFRJIFZMWU5RCiAjCi0KLSMKLSMgVmlydHVhbGl6YXRpb24KLSMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci1DT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci1DT05GSUdfUkVJU0VSRlNfRlM9bQotIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19SRUlTRVJGU19GU19YQVRUUj15Ci1DT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9bQotQ09ORklHX0FVVE9GUzRfRlM9bQotQ09ORklHX0ZVU0VfRlM9bQotQ09ORklHX0dFTkVSSUNfQUNMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtMTA3Nyw3NSArMTIzOCw4MiBAQAogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKICMKIENPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX0tDT1JFPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci1DT05GSUdfQ09ORklHRlNfRlM9bQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKK0NPTkZJR19DT05GSUdGU19GUz15CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPW0KK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKK0NPTkZJR19KRkZTMl9GU19YQVRUUj15CisjIENPTkZJR19KRkZTMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlM9eQorIyBDT05GSUdfU1FVQVNIRlNfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9MwogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIworQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotQ09ORklHX05GU0Q9bQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQotQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLUNPTkZJR19TTUJfRlM9bQotIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCiAjCiAjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLUNPTkZJR19OTFM9bQorQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj15CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CkBAIC0xMTYyLDEwICsxMzMwLDEwIEBACiAjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CiAjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CkBAIC0xMTc1LDM4ICsxMzQzLDc1IEBACiAjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIwotQ09ORklHX0RMTT1tCi1DT05GSUdfRExNX1RDUD15Ci0jIENPTkZJR19ETE1fU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE1fREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0NST1NTQ09NUElMRT15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVEVDVF9IVU5HX1RBU0sgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUlVOVElNRV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfWkJPT1Q9eQogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTEyMTQsNjcgKzE0MTksMzIgQEAKIENPTkZJR19LRVlTPXkKIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19ITUFDPXkKLUNPTkZJR19DUllQVE9fWENCQz1tCi1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9eQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCi1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX0NCQz1tCi1DT05GSUdfQ1JZUFRPX1BDQkM9bQotQ09ORklHX0NSWVBUT19MUlc9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fVEVBPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi1DT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIworQ09ORklHX1NFQ1VSSVRZRlM9eQorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0NSQ19DQ0lUVD1tCi1DT05GSUdfQ1JDMTY9bQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX1BMSVNUPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbGVtb3RlMmZfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbGVtb3RlMmZfZGVmY29uZmlnCmluZGV4IGI3MWEwYTQuLjRjYWEwZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2xlbW90ZTJmX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM2Ci0jIE1vbiBOb3YgIDkgMjM6NDI6NDIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMgorIyBNb24gSmFuICA0IDEzOjQxOjA5IDIwMTAKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMjcsNiArMjcsNyBAQAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUViBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CkBAIC01MSw2ICs1Miw5IEBACiAjIENPTkZJR19MRU1PVEVfRlVMT09ORzJFIGlzIG5vdCBzZXQKIENPTkZJR19MRU1PVEVfTUFDSDJGPXkKIENPTkZJR19DUzU1MzY9eQorQ09ORklHX0NTNTUzNl9NRkdQVD15CitDT05GSUdfTE9PTkdTT05fU1VTUEVORD15CitDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldApAQCAtNjMsMTMgKzY3LDggQEAKIENPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKIENPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfQ0VWVF9SNEtfTElCPXkKLUNPTkZJR19DRVZUX1I0Sz15Ci1DT05GSUdfQ1NSQ19SNEtfTElCPXkKLUNPTkZJR19DU1JDX1I0Sz15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19JODI1OT15CiAjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldApAQCAtMTA5LDEzICsxMDgsMTUgQEAKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UX1VBUlQxNjU1MD15CiBDT05GSUdfQ1BVX0xPT05HU09OMj15CiBDT05GSUdfU1lTX0hBU19DUFVfTE9PTkdTT04yRj15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CitDT05GSUdfQ1BVX1NVUFBPUlRTX0NQVUZSRVE9eQorQ09ORklHX0NQVV9TVVBQT1JUU19BRERSV0lOQ0ZHPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfVU5DQUNIRURfQUNDRUxFUkFURUQ9eQogCiAjCiAjIEtlcm5lbCB0eXBlCkBAIC0xMzcsNyArMTM4LDYgQEAKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX1NZU19TVVBQT1JUU19ISUdITUVNPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiAjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CkBAIC0xNDYsMTcgKzE0NiwxMSBAQAogQ09ORklHX1NQQVJTRU1FTT15CiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci0KLSMKLSMgTWVtb3J5IGhvdHBsdWcgaXMgY3VycmVudGx5IGluY29tcGF0aWJsZSB3aXRoIFNvZnR3YXJlIFN1c3BlbmQKLSMKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfVElDS19PTkVTSE9UPXkKQEAgLTE3NSw3ICsxNjksNyBAQAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKK0NPTkZJR19LRVhFQz15CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0xOTQsOSArMTg4LDkgQEAKIENPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKIENPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CiBDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15Ci0jIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0daSVA9eQogIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKLUNPTkZJR19LRVJORUxfTFpNQT15CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtMjExLDYgKzIwNSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9NjQKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtMjI0LDcgKzIxOSwxMSBAQAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKK0NPTkZJR19SRF9CWklQMj15CitDT05GSUdfUkRfTFpNQT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CkBAIC0yNTYsMTQgKzI1NSwxOCBAQAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19UUkFDRVBPSU5UUz15CitDT05GSUdfT1BST0ZJTEU9bQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfU1lTQ0FMTF9XUkFQUEVSUz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCiAjCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CisjIENPTkZJR19TTE9XX1dPUktfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTI4MywxNCArMjg2LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9bQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiBDT05GSUdfRlJFRVpFUj15CiAKICMKQEAgLTMxNCw3ICszNDQsNyBAQAogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz1tCiBDT05GSUdfTUlQUzMyX0NPTVBBVD15CiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19TWVNWSVBDX0NPTVBBVD15CkBAIC0zMzUsOSArMzY1LDM0IEBACiBDT05GSUdfSElCRVJOQVRJT05fTlZTPXkKIENPTkZJR19ISUJFUk5BVElPTj15CiBDT05GSUdfUE1fU1REX1BBUlRJVElPTj0iL2Rldi9oZGEzIgotIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CitDT05GSUdfTUlQU19FWFRFUk5BTF9USU1FUj15CitDT05GSUdfTUlQU19DUFVGUkVRPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKK0NPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorQ09ORklHX0NQVV9GUkVRX0RFQlVHPXkKK0NPTkZJR19DUFVfRlJFUV9TVEFUPW0KK0NPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFM9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9bQorQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9bQorQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15CitDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRT1tCisKKyMKKyMgQ1BVRnJlcSBwcm9jZXNzb3IgZHJpdmVycworIworQ09ORklHX0xPT05HU09OMl9DUFVGUkVRPW0KIENPTkZJR19ORVQ9eQotQ09ORklHX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKQEAgLTM0NiwxMSArNDAxLDEyIEBACiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX1VTRVI9bQogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT1tCisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKQEAgLTM2MSwxMiArNDE3LDEzIEBACiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKIENPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKICMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorIyBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTVJPVVRFPXkKIENPTkZJR19JUF9QSU1TTV9WMT15CiBDT05GSUdfSVBfUElNU01fVjI9eQotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfQVJQRD15CiBDT05GSUdfU1lOX0NPT0tJRVM9eQogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CkBAIC0zOTksMzAgKzQ1NiwzNCBAQAogIyBDT05GSUdfREVGQVVMVF9XRVNUV09PRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX1JFTk8gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX1RDUF9NRDVTSUc9eQogQ09ORklHX0lQVjY9bQogQ09ORklHX0lQVjZfUFJJVkFDWT15Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXkKKyMgQ09ORklHX0lQVjZfUk9VVEVfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfVFVOTkVMPW0KIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KIENPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCiAjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAogQ09ORklHX0lQVjZfU0lUPW0KKyMgQ09ORklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUFY2X1NVQlRSRUVTPXkKICMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX1NFQ01BUks9eQogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CitDT05GSUdfQlJJREdFX05FVEZJTFRFUj15CiAKICMKICMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgpAQCAtNDQ2LDE3ICs1MDcsMjIgQEAKICMKICMgQ09ORklHX0lQNl9ORl9RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDZfTkZfSVBUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKK0NPTkZJR19TVFA9bQorQ09ORklHX0JSSURHRT1tCiAjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorQ09ORklHX1ZMQU5fODAyMVE9bQorIyBDT05GSUdfVkxBTl84MDIxUV9HVlJQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KICMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKK0NPTkZJR19JUFg9bQorIyBDT05GSUdfSVBYX0lOVEVSTiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CkBAIC01MTgsMjYgKzU4NCw2MSBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfQlQ9bQorQ09ORklHX0JUX0wyQ0FQPW0KK0NPTkZJR19CVF9TQ089bQorQ09ORklHX0JUX1JGQ09NTT1tCitDT05GSUdfQlRfUkZDT01NX1RUWT15CitDT05GSUdfQlRfQk5FUD1tCitDT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQorQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKK0NPTkZJR19CVF9ISURQPW0KKworIworIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19CVF9IQ0lCVFVTQj1tCisjIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCQ00yMDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0CitDT05GSUdfQlRfSENJQkZVU0I9bQorQ09ORklHX0JUX0hDSVZIQ0k9bQorIyBDT05GSUdfQlRfTVJWTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCitDT05GSUdfV0VYVF9DT1JFPXkKK0NPTkZJR19XRVhUX1BST0M9eQorQ09ORklHX0NGRzgwMjExPW0KKyMgQ09ORklHX05MODAyMTFfVEVTVE1PREUgaXMgbm90IHNldAorIyBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QUz15CisjIENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX0NGRzgwMjExX1dFWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKK0NPTkZJR19MSUI4MDIxMT1tCitDT05GSUdfTElCODAyMTFfREVCVUc9eQorQ09ORklHX01BQzgwMjExPW0KKyMgQ09ORklHX01BQzgwMjExX1JDX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUw9eQorIyBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQgaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUw9eQorQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9Im1pbnN0cmVsIgorIyBDT05GSUdfTUFDODAyMTFfTUVTSCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfTEVEUz15CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogQ09ORklHX1JGS0lMTD1tCi0jIENPTkZJR19SRktJTExfSU5QVVQgaXMgbm90IHNldAorQ09ORklHX1JGS0lMTF9MRURTPXkKK0NPTkZJR19SRktJTExfSU5QVVQ9eQogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwpAQCAtNTU1LDcgKzY1Niw3IEBACiBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKIENPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9bQogIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKQEAgLTU2Niw3ICs2NjcsMTIgQEAKICMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPXkKK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKKyMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKQEAgLTU3NywxOSArNjgzLDcgQEAKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15CiAKQEAgLTYxOSw4ICs3MTMsNyBAQAogIwogQ09ORklHX0JMS19ERVZfSURFUENJPXkKICMgQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CiAjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldApAQCAtNzAwLDcgKzc5MywyOSBAQAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD1tCitDT05GSUdfTURfTElORUFSPW0KK0NPTkZJR19NRF9SQUlEMD1tCitDT05GSUdfTURfUkFJRDE9bQorQ09ORklHX01EX1JBSUQxMD1tCitDT05GSUdfTURfUkFJRDQ1Nj1tCitDT05GSUdfTURfUkFJRDZfUFE9bQorIyBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfTURfTVVMVElQQVRIPW0KK0NPTkZJR19NRF9GQVVMVFk9bQorQ09ORklHX0JMS19ERVZfRE09bQorQ09ORklHX0RNX0RFQlVHPXkKK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fTE9HX1VTRVJTUEFDRT1tCitDT05GSUdfRE1fWkVSTz1tCitDT05GSUdfRE1fTVVMVElQQVRIPW0KK0NPTkZJR19ETV9NVUxUSVBBVEhfUUw9bQorQ09ORklHX0RNX01VTFRJUEFUSF9TVD1tCitDT05GSUdfRE1fREVMQVk9bQorQ09ORklHX0RNX1VFVkVOVD15CiAjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAogCiAjCkBAIC03MTIsMTkgKzgyNywxOSBAQAogIwogCiAjCi0jIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0lGQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVk9bQogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfVFVOPW0KK0NPTkZJR19WRVRIPW0KICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CkBAIC03MzgsNiArODUzLDcgQEAKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9SQUNBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CkBAIC03NjksNyArODg1LDcgQEAKICMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CiBDT05GSUdfODEzOVRPTz15CiAjIENPTkZJR184MTM5VE9PX1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVI9eQorIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKICMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKQEAgLTc5NSw2ICs5MTEsNyBAQAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAogQ09ORklHX1I4MTY5PXkKK0NPTkZJR19SODE2OV9WTEFOPXkKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLWTIgaXMgbm90IHNldApAQCAtODEwLDE1ICs5MjcsMzEgQEAKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTj15Ci1DT05GSUdfV0xBTl9QUkU4MDIxMT15Ci0jIENPTkZJR19TVFJJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVZFTEFOIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOXzgwMjExPXkKLSMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUNzZDNTBYX1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgxODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRMODE4NyBpcyBub3Qgc2V0CisjIENPTkZJR19BRE04MjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01XTDhLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRkkgaXMgbm90IHNldAorIyBDT05GSUdfSVdNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0CisjIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTDEyWFggaXMgbm90IHNldAorIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTgzMSwxNyArOTY0LDM5IEBACiAjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorQ09ORklHX1VTQl9VU0JORVQ9bQorQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCitDT05GSUdfVVNCX05FVF9DRENFVEhFUj1tCitDT05GSUdfVVNCX05FVF9DRENfRUVNPW0KKyMgQ09ORklHX1VTQl9ORVRfRE05NjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfU01TQzk1WFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9HTDYyMEEgaXMgbm90IHNldAorQ09ORklHX1VTQl9ORVRfTkVUMTA4MD1tCisjIENPTkZJR19VU0JfTkVUX1BMVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfTUNTNzgzMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1JORElTX0hPU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVD1tCisjIENPTkZJR19VU0JfQUxJX001NjMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTjI3MjAgaXMgbm90IHNldAorQ09ORklHX1VTQl9CRUxLSU49eQorQ09ORklHX1VTQl9BUk1MSU5VWD15CisjIENPTkZJR19VU0JfRVBTT04yODg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQzIxOTAgaXMgbm90IHNldAorQ09ORklHX1VTQl9ORVRfWkFVUlVTPW0KICMgQ09ORklHX1VTQl9IU08gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9JTlQ1MVgxIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUQ09OU09MRT1tCitDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDPXkKK0NPTkZJR19ORVRQT0xMPXkKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCkBAIC04NDksOCArMTAwNCw5IEBACiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KK0NPTkZJR19JTlBVVF9QT0xMREVWPW0KKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTg4NCw3ICsxMDQwLDcgQEAKICMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorQ09ORklHX01PVVNFX0FQUExFVE9VQ0g9bQogIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9JTlBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfTE9HSUJNIGlzIG5vdCBzZXQKQEAgLTkwNCw2ICsxMDYwLDcgQEAKICMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSU9fTElCUFMyPXkKICMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTM0LDggKzEwOTEsNyBAQAogIwogIyBTZXJpYWwgZHJpdmVycwogIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MD1tCiAjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTE2CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CkBAIC05NTMsOCArMTEwOSw3IEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9bQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CkBAIC0xMDMzLDE0ICsxMTg4LDE4IEBACiAjCiAjIE11bHRpbWVkaWEgZHJpdmVycwogIworQ09ORklHX0lSX0NPUkU9bQorQ09ORklHX1ZJREVPX0lSPW0KICMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fVjRMMj1tCiBDT05GSUdfVklERU9fVjRMMT1tCitDT05GSUdfVklERU9CVUZfR0VOPW0KK0NPTkZJR19WSURFT0JVRl9WTUFMTE9DPW0KIENPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQogIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE89eQotIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fVklWST1tCiAjIENPTkZJR19WSURFT19QTVMgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fQ1BJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19DUElBMiBpcyBub3Qgc2V0CkBAIC0xMDQ5LDUyICsxMjA4LDU1IEBACiBDT05GSUdfVVNCX1ZJREVPX0NMQVNTPW0KIENPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVY9eQogQ09ORklHX1VTQl9HU1BDQT1tCi0jIENPTkZJR19VU0JfTTU2MDIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUVjA2WFggaXMgbm90IHNldAorQ09ORklHX1VTQl9NNTYwMj1tCitDT05GSUdfVVNCX1NUVjA2WFg9bQogIyBDT05GSUdfVVNCX0dMODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9DT05FWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfRVRPTVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX0ZJTkVQSVggaXMgbm90IHNldAorQ09ORklHX1VTQl9HU1BDQV9DT05FWD1tCitDT05GSUdfVVNCX0dTUENBX0VUT01TPW0KK0NPTkZJR19VU0JfR1NQQ0FfRklORVBJWD1tCiAjIENPTkZJR19VU0JfR1NQQ0FfSkVJTElOSiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfTUFSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfTVI5NzMxMEEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX09WNTE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9PVjUzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfUEFDMjA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9QQUM3MzExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TTjlDMjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TT05JWEIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NPTklYSiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTU2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1E5MDUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NROTA1QyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1RLMDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9UNjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9UVjg1MzIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1ZDMDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfWkMzWFggaXMgbm90IHNldAorQ09ORklHX1VTQl9HU1BDQV9NQVJTPW0KK0NPTkZJR19VU0JfR1NQQ0FfTVI5NzMxMEE9bQorQ09ORklHX1VTQl9HU1BDQV9PVjUxOT1tCitDT05GSUdfVVNCX0dTUENBX09WNTM0PW0KK0NPTkZJR19VU0JfR1NQQ0FfUEFDMjA3PW0KKyMgQ09ORklHX1VTQl9HU1BDQV9QQUM3MzAyIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR1NQQ0FfUEFDNzMxMT1tCitDT05GSUdfVVNCX0dTUENBX1NOOUMyMFg9bQorQ09ORklHX1VTQl9HU1BDQV9TTjlDMjBYX0VWREVWPXkKK0NPTkZJR19VU0JfR1NQQ0FfU09OSVhCPW0KK0NPTkZJR19VU0JfR1NQQ0FfU09OSVhKPW0KK0NPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMD1tCitDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDE9bQorQ09ORklHX1VTQl9HU1BDQV9TUENBNTA1PW0KK0NPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNj1tCitDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDg9bQorQ09ORklHX1VTQl9HU1BDQV9TUENBNTYxPW0KK0NPTkZJR19VU0JfR1NQQ0FfU1E5MDU9bQorQ09ORklHX1VTQl9HU1BDQV9TUTkwNUM9bQorQ09ORklHX1VTQl9HU1BDQV9TVEswMTQ9bQorIyBDT05GSUdfVVNCX0dTUENBX1NUVjA2ODAgaXMgbm90IHNldAorQ09ORklHX1VTQl9HU1BDQV9TVU5QTFVTPW0KK0NPTkZJR19VU0JfR1NQQ0FfVDYxMz1tCitDT05GSUdfVVNCX0dTUENBX1RWODUzMj1tCitDT05GSUdfVVNCX0dTUENBX1ZDMDMyWD1tCitDT05GSUdfVVNCX0dTUENBX1pDM1hYPW0KICMgQ09ORklHX1ZJREVPX0hEUFZSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WSUNBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSUJNQ0FNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LT05JQ0FXQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUVVJQ0tDQU1fTUVTU0VOR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FVDYxWDI1MSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUNjFYMjUxPW0KICMgQ09ORklHX1VTQl9PVjUxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0U0MDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NOOUMxMDIgaXMgbm90IHNldAorQ09ORklHX1VTQl9TTjlDMTAyPW0KICMgQ09ORklHX1VTQl9TVFY2ODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pDMDMwMSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1pDMDMwMT1tCiAjIENPTkZJR19VU0JfUFdDIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX1VTQl9aUjM2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVEtXRUJDQU0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1MyMjU1IGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfWlIzNjRYWD1tCitDT05GSUdfVVNCX1NUS1dFQkNBTT1tCitDT05GSUdfVVNCX1MyMjU1PW0KICMgQ09ORklHX1JBRElPX0FEQVBURVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKQEAgLTExMzIsNiArMTI5NCw3IEBACiAjIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVVZFU0EgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldApAQCAtMTE2MSw3ICsxMzI0LDcgQEAKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CiBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci1DT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9eQorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPW0KIAogIwogIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CkBAIC0xMTkzLDI4ICsxMzU2LDQ0IEBACiAjIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPW0KLSMgQ09ORklHX1NPVU5EX09TU19DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD1tCiBDT05GSUdfU05EX1RJTUVSPW0KIENPTkZJR19TTkRfUENNPW0KLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CitDT05GSUdfU05EX0hXREVQPW0KK0NPTkZJR19TTkRfUkFXTUlEST1tCitDT05GSUdfU05EX1NFUVVFTkNFUj1tCitDT05GSUdfU05EX1NFUV9EVU1NWT1tCitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTPW0KK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CitDT05GSUdfU05EX0hSVElNRVI9bQorQ09ORklHX1NORF9TRVFfSFJUSU1FUl9ERUZBVUxUPXkKICMgQ09ORklHX1NORF9SVENUSU1FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfVk1BU1RFUj15Ci0jIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9SQVdNSURJX1NFUT1tCiAjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9NUFU0MDFfVUFSVD1tCiBDT05GSUdfU05EX0FDOTdfQ09ERUM9bQotIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9EUklWRVJTPXkKK0NPTkZJR19TTkRfRFVNTVk9bQorQ09ORklHX1NORF9WSVJNSURJPW0KKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NFUklBTF9VMTY1NTA9bQorQ09ORklHX1NORF9NUFU0MDE9bQorQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkU9eQorQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkVfREVGQVVMVD0xMAogQ09ORklHX1NORF9QQ0k9eQogIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKQEAgLTEyODEsNyArMTQ2MCwxMCBAQAogIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfU05EX1VTQj15CitDT05GSUdfU05EX1VTQl9BVURJTz1tCitDT05GSUdfU05EX1VTQl9DQUlBUT1tCitDT05GSUdfU05EX1VTQl9DQUlBUV9JTlBVVD15CiAjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19BQzk3X0JVUz1tCkBAIC0xMjk5LDMyICsxNDgxLDQxIEBACiAjCiAjIFNwZWNpYWwgSElEIGRyaXZlcnMKICMKLSMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CitDT05GSUdfSElEX0E0VEVDSD1tCitDT05GSUdfSElEX0FQUExFPW0KK0NPTkZJR19ISURfQkVMS0lOPW0KK0NPTkZJR19ISURfQ0hFUlJZPW0KK0NPTkZJR19ISURfQ0hJQ09OWT1tCitDT05GSUdfSElEX0NZUFJFU1M9bQorQ09ORklHX0hJRF9EUkFHT05SSVNFPW0KK0NPTkZJR19EUkFHT05SSVNFX0ZGPXkKK0NPTkZJR19ISURfRVpLRVk9bQorQ09ORklHX0hJRF9LWUU9bQorQ09ORklHX0hJRF9HWVJBVElPTj1tCitDT05GSUdfSElEX1RXSU5IQU49bQorQ09ORklHX0hJRF9LRU5TSU5HVE9OPW0KK0NPTkZJR19ISURfTE9HSVRFQ0g9bQorQ09ORklHX0xPR0lURUNIX0ZGPXkKK0NPTkZJR19MT0dJUlVNQkxFUEFEMl9GRj15CitDT05GSUdfSElEX01JQ1JPU09GVD1tCitDT05GSUdfSElEX01PTlRFUkVZPW0KK0NPTkZJR19ISURfTlRSSUc9bQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD1tCitDT05GSUdfUEFOVEhFUkxPUkRfRkY9eQorQ09ORklHX0hJRF9QRVRBTFlOWD1tCitDT05GSUdfSElEX1NBTVNVTkc9bQorQ09ORklHX0hJRF9TT05ZPW0KK0NPTkZJR19ISURfU1VOUExVUz1tCitDT05GSUdfSElEX0dSRUVOQVNJQT1tCitDT05GSUdfR1JFRU5BU0lBX0ZGPXkKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPW0KK0NPTkZJR19TTUFSVEpPWVBMVVNfRkY9eQorQ09ORklHX0hJRF9UT1BTRUVEPW0KK0NPTkZJR19ISURfVEhSVVNUTUFTVEVSPW0KK0NPTkZJR19USFJVU1RNQVNURVJfRkY9eQorQ09ORklHX0hJRF9XQUNPTT1tCitDT05GSUdfSElEX1pFUk9QTFVTPW0KK0NPTkZJR19aRVJPUExVU19GRj15CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTEzNDQsNyArMTUzNSw3IEBACiBDT05GSUdfVVNCX09UR19XSElURUxJU1Q9eQogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfV1VTQj1tCiAjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM2NiwxNCArMTU1NywxNSBAQAogQ09ORklHX1VTQl9VSENJX0hDRD1tCiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfV0hDSV9IQ0Q9bQorQ09ORklHX1VTQl9IV0FfSENEPW0KKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKICMKIENPTkZJR19VU0JfQUNNPW0KLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfUFJJTlRFUj1tCiBDT05GSUdfVVNCX1dETT1tCiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIApAQCAtMTM5Nyw3ICsxNTg5LDcgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTElCVVNVQUw9eQogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKQEAgLTE0NjcsNyArMTY1OSw3IEBACiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTEVEPW0KICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CkBAIC0xNDgwLDE2ICsxNjcyLDk1IEBACiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUPW0KKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyPXkKK0NPTkZJR19VU0JfTTY2NTkyPW0KKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xBTkdXRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CisjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUFTU19TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19NVUxUSSBpcyBub3Qgc2V0CiAKICMKICMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCiAjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAorQ09ORklHX1VXQj1tCitDT05GSUdfVVdCX0hXQT1tCitDT05GSUdfVVdCX1dIQ0k9bQorIyBDT05GSUdfVVdCX1dMUCBpcyBub3Qgc2V0CisjIENPTkZJR19VV0JfSTE0ODBVIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9bQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9bQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVElGTV9TRCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQ0I3MTAgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1ZJQV9TRE1NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9bQorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CisjIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0lERV9ESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CisKKyMKKyMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQorIwogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CkBAIC0xNTA0LDIyICsxNzc1LDE4IEBACiAjIENPTkZJR19TVEFHSU5HX0VYQ0xVREVfQlVJTEQgaXMgbm90IHNldAogIyBDT05GSUdfRVQxMzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JUF9DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfUFJJU00yX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMzVVTkQgaXMgbm90IHNldAogIyBDT05GSUdfRUNITyBpcyBub3Qgc2V0CisjIENPTkZJR19PVFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTUVESSBpcyBub3Qgc2V0CiAjIENPTkZJR19BU1VTX09MRUQgaXMgbm90IHNldAogIyBDT05GSUdfQUxURVJBX1BDSUVfQ0hETUEgaXMgbm90IHNldAotIyBDT05GSUdfUlRMODE4N1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUTDgxOTJTVSBpcyBub3Qgc2V0CisjIENPTkZJR19SODE4N1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUTDgxOTJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSQU5aUE9SVCBpcyBub3Qgc2V0CiAKICMKLSMgQW5kcm9pZAotIwotCi0jCiAjIFF1YWxjb21tIE1TTSBDYW1lcmEgQW5kIFZpZGVvCiAjCiAKQEAgLTE1MjcsNyArMTc5NCw2IEBACiAjIENhbWVyYSBTZW5zb3IgU2VsZWN0aW9uCiAjCiAjIENPTkZJR19JTlBVVF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QT0hNRUxGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CM0RGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTEFOOUFVVEggaXMgbm90IHNldApAQCAtMTU0NCwyOCArMTgxMCw1NSBAQAogIwogIyBDT05GSUdfUkFSX1JFR0lTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lJTyBpcyBub3Qgc2V0CisjIENPTkZJR19SQU1aU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRNQU5fQURWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVkVMQU4gaXMgbm90IHNldAogQ09ORklHX0ZCX1NNN1hYPXkKLUNPTkZJR19GQl9TTTdYWF9BQ0NFTD15CisjIENPTkZJR19GQl9TTTdYWF9BQ0NFTCBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCi0jIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQyX0ZTPW0KKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X0ZTPXkKK0NPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSkJEMj15CisjIENPTkZJR19KQkQyX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlM9bQorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTz15CitDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQorIyBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KRlNfRlM9bQorQ09ORklHX0pGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfSkZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfWEZTX0ZTPW0KK0NPTkZJR19YRlNfUVVPVEE9eQorQ09ORklHX1hGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19CVFJGU19GUz1tCisjIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKQEAgLTE1NzUsMTcgKzE4NjgsMjUgQEAKIENPTkZJR19RVU9UQT15CiAjIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15CitDT05GSUdfUVVPVEFfVFJFRT1tCiAjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FGTVRfVjIgaXMgbm90IHNldAorQ09ORklHX1FGTVRfVjI9bQogQ09ORklHX1FVT1RBQ1RMPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlNfRlM9bQorQ09ORklHX0FVVE9GUzRfRlM9bQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKICMgQ2FjaGVzCiAjCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKK0NPTkZJR19GU0NBQ0hFPW0KKyMgQ09ORklHX0ZTQ0FDSEVfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfRlNDQUNIRV9ISVNUT0dSQU0gaXMgbm90IHNldAorIyBDT05GSUdfRlNDQUNIRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19GU0NBQ0hFX09CSkVDVF9MSVNUIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRUZJTEVTPW0KKyMgQ09ORklHX0NBQ0hFRklMRVNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ0FDSEVGSUxFU19ISVNUT0dSQU0gaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTE1OTksMTEgKzE5MDAsMTMgQEAKICMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwogIwogQ09ORklHX0ZBVF9GUz1tCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9bQogQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwogQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTlRGU19GUz1tCisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19OVEZTX1JXPXkKIAogIwogIyBQc2V1ZG8gZmlsZXN5c3RlbXMKQEAgLTE2MTYsMjMgKzE5MTksNjAgQEAKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JU0NfRklMRVNZU1RFTVMgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPW0KK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9bQorQ09ORklHX1NRVUFTSEZTPW0KK0NPTkZJR19TUVVBU0hGU19FTUJFRERFRD15CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPW0KK0NPTkZJR19ST01GU19CQUNLRURfQllfQkxPQ0s9eQorIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19CQUNLRURfQllfQk9USCBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz1tCiBDT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjNfQUNMPXkKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19GU0NBQ0hFIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEPW0KK0NPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1Y0PXkKIENPTkZJR19MT0NLRD1tCiBDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KIENPTkZJR19ORlNfQUNMX1NVUFBPUlQ9bQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz1tCi0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorQ09ORklHX1NVTlJQQ19HU1M9bQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT1tCiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19VUENBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0RGU19VUENBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE2NDMsNDUgKzE5ODMsNDUgQEAKICMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKIENPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJ1dGYtOCIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfREVGQVVMVD0idXRmOCIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9eQogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwpAQCAtMTY5NSwxMjUgKzIwMzUsMTU1IEBACiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiBDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfRVZFTlRfVFJBQ0lORz15CitDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKK0NPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKICMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorQ09ORklHX0tFWVM9eQorQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCitDT05GSUdfWE9SX0JMT0NLUz1tCitDT05GSUdfQVNZTkNfQ09SRT1tCitDT05GSUdfQVNZTkNfTUVNQ1BZPW0KK0NPTkZJR19BU1lOQ19YT1I9bQorQ09ORklHX0FTWU5DX1BRPW0KK0NPTkZJR19BU1lOQ19SQUlENl9SRUNPVj1tCiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKK0NPTkZJR19DUllQVE9fRklQUz15CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KIENPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQogQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HPW0KIENPTkZJR19DUllQVE9fUk5HMj15CiBDT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX05VTEw9bQogQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NSWVBURD1tCitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KIAogIwogIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKICMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQ009bQorQ09ORklHX0NSWVBUT19HQ009bQorQ09ORklHX0NSWVBUT19TRVFJVj1tCiAKICMKICMgQmxvY2sgbW9kZXMKICMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQkM9bQorQ09ORklHX0NSWVBUT19DVFI9bQogIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0NSWVBUT19YVFM9bQogCiAjCiAjIEhhc2ggbW9kZXMKICMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSE1BQz1tCitDT05GSUdfQ1JZUFRPX1hDQkM9bQogIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0dIQVNIPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19STUQxMjg9bQorQ09ORklHX0NSWVBUT19STUQxNjA9bQorQ09ORklHX0NSWVBUT19STUQyNTY9bQorQ09ORklHX0NSWVBUT19STUQzMjA9bQorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KK0NPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fV1A1MTI9bQogCiAjCiAjIENpcGhlcnMKICMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCitDT05GSUdfQ1JZUFRPX1NBTFNBMjA9bQorQ09ORklHX0NSWVBUT19TRUVEPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCiAKICMKICMgQ29tcHJlc3Npb24KICMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KK0NPTkZJR19DUllQVE9fWkxJQj1tCitDT05GSUdfQ1JZUFRPX0xaTz1tCiAKICMKICMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCiAjCi0jIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkc9bQogQ09ORklHX0NSWVBUT19IVz15CiAjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5BUllfUFJJTlRGPXkKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCkBAIC0xODIxLDE0ICsyMTkxLDIwIEBACiBDT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMTY9eQogQ09ORklHX0NSQ19UMTBESUY9eQogIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19BVURJVF9HRU5FUklDPXkKLUNPTkZJR19aTElCX0lORkxBVEU9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19MWk9fQ09NUFJFU1M9bQorQ09ORklHX0xaT19ERUNPTVBSRVNTPW0KK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnCmluZGV4IGRkZjY3ZjYuLjk3MzgyYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZwpAQCAtMSw3OSArMSwxMDMgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMAotIyBUdWUgRmViIDIwIDIxOjQ3OjM3IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMworIyBGcmkgRmViIDI2IDA5OjUzOjI5IDIwMTAKICMKIENPTkZJR19NSVBTPXkKIAogIwogIyBNYWNoaW5lIHNlbGVjdGlvbgogIwotQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19NQUNIX0FMQ0hFTVk9eQotIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAotQ09ORklHX01JUFNfUEIxMTAwPXkKLSMgQ09ORklHX01JUFNfUEIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CisjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAotIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FQ19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjUgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAogIyBDT05GSUdfUE5YODU1MF9TVEI4MTAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJUViBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFgzOVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFg0OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JS1JPVElLX1JCNTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9TSU1VTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX09DVEVPTl9SRUZFUkVOQ0VfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0FMQ0hFTVlfR1BJT0lOVF9BVTEwMDA9eQorIyBDT05GSUdfQUxDSEVNWV9HUElPX0lORElSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfREIxNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUlSQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19NSVBTX1BCMTEwMD15CisjIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorQ09ORklHX1NPQ19BVTExMDA9eQorQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0xPT05HU09OX1VBUlRfQkFTRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX09QUk9GSUxFPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0NFVlRfUjRLX0xJQj15CitDT05GSUdfQ1NSQ19SNEtfTElCPXkKIENPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQorQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQogQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19TT0NfQVUxMTAwPXkKLUNPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19JUlFfQ1BVPXkKIENPTkZJR19TV0FQX0lPX1NQQUNFPXkKIENPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKIAogIwogIyBDUFUgc2VsZWN0aW9uCiAjCisjIENPTkZJR19DUFVfTE9PTkdTT04yRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTE9PTkdTT04yRiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX01JUFMzMl9SMT15CiAjIENPTkZJR19DUFVfTUlQUzMyX1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTNjRfUjEgaXMgbm90IHNldApAQCAtODYsNiArMTEwLDcgQEAKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKQEAgLTkzLDExICsxMTgsMTQgQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1Q9eQogQ09ORklHX1NZU19IQVNfQ1BVX01JUFMzMl9SMT15CiBDT05GSUdfQ1BVX01JUFMzMj15CiBDT05GSUdfQ1BVX01JUFNSMT15CiBDT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CiBDT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15CitDT05GSUdfSEFSRFdBUkVfV0FUQ0hQT0lOVFM9eQogCiAjCiAjIEtlcm5lbCB0eXBlCkBAIC0xMDcsMTg0ICsxMzUsMjQ0IEBACiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKIENPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKICMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1ZQRV9MT0FERVIgaXMgbm90IHNldAogQ09ORklHXzY0QklUX1BIWVNfQUREUj15CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfQ1BVX1NVUFBPUlRTX0hJR0hNRU09eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLXBiMTEwMCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RJTllfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19SRUxBWT15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfQUlPPXkKIAogIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQogIwogQ09ORklHX0hXX0hBU19QQ0k9eQogIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfUENNQ0lBPXkKIENPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15CisjIENPTkZJR19QQ01DSUFfSU9DVEwgaXMgbm90IHNldAogCiAjCiAjIFBDLWNhcmQgYnJpZGdlcwogIwogIyBDT05GSUdfUENNQ0lBX0FVMVgwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIworQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEPXkKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfUkFSUD15CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKQEAgLTI5NSwxMTAgKzM4MywyNSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotQ09ORklHX1RDUF9NRDVTSUc9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkZfQ1RfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtNDA4LDI3ICs0MTEsMjQgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDM3LDI1ICs0MzcsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9bQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotQ09ORklHX0NPTk5FQ1RPUj1tCi0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDY4LDYgKzQ2OCw3IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDkzLDE0ICs0OTQsMTMgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9BTENIRU1ZPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC01MTcsMTY2ICs1MTcsMTM2IEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfVUI9eQogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX09WRVJfRVRIPW0KKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CitDT05GSUdfSURFPXkKIAogIwotIyBNaXNjIGRldmljZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDUz15CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CitDT05GSUdfSURFX1RBU0tfSU9DVEw9eQorIyBDT05GSUdfSURFX1BST0NfRlMgaXMgbm90IHNldAogCiAjCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19SQUlEX0FUVFJTPW0KKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19QSFlMSUI9bQorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKIAogIwogIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCiAjCi1DT05GSUdfTUFSVkVMTF9QSFk9bQotQ09ORklHX0RBVklDT01fUEhZPW0KLUNPTkZJR19RU0VNSV9QSFk9bQotQ09ORklHX0xYVF9QSFk9bQotQ09ORklHX0NJQ0FEQV9QSFk9bQotQ09ORklHX1ZJVEVTU0VfUEhZPW0KLUNPTkZJR19TTVNDX1BIWT1tCi0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19EQVZJQ09NX1BIWT15CitDT05GSUdfUVNFTUlfUEhZPXkKK0NPTkZJR19MWFRfUEhZPXkKK0NPTkZJR19DSUNBREFfUEhZPXkKK0NPTkZJR19WSVRFU1NFX1BIWT15CitDT05GSUdfU01TQ19QSFk9eQorQ09ORklHX0JST0FEQ09NX1BIWT15CitDT05GSUdfSUNQTFVTX1BIWT15CitDT05GSUdfUkVBTFRFS19QSFk9eQorQ09ORklHX05BVElPTkFMX1BIWT15CitDT05GSUdfU1RFMTBYUD15CitDT05GSUdfTFNJX0VUMTAxMUNfUEhZPXkKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19BVTFYMDBfRU5FVCBpcyBub3Qgc2V0CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorQ09ORklHX01JUFNfQVUxWDAwX0VORVQ9eQogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKIAogIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCiAKICMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAotQ09ORklHX1BQUF9BU1lOQz1tCi0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAotQ09ORklHX1BQUF9ERUZMQVRFPW0KLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfTVBQRT1tCi1DT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwpAQCAtNjg0LDE2ICs2NTQsMTQgQEAKICMKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwogIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKQEAgLTcwMywyOCArNjcxLDI2IEBACiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCi1DT05GSUdfU0VSSU89eQotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19SQVc9bQorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVMVgwMF9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtNzQzLDE5OCArNzA5LDI4OCBAQAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAKICMKICMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCiAjCi1DT05GSUdfU1lOQ0xJTktfQ1M9bQorIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAogCiAjCi0jIERhbGxhcydzIDEtd2lyZSBidXMKKyMgUFBTIHN1cHBvcnQKICMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRFJBVz15CiAKICMKLSMgSElEIERldmljZXMKKyMgVVNCIElucHV0IERldmljZXMKICMKLSMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEREVWPXkKIAogIwotIyBVU0Igc3VwcG9ydAorIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCisjIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorQ09ORklHX1VTQl9TVVNQRU5EPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIworIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwotIyBMRUQgZHJpdmVycworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCiAjCiAKICMKLSMgTEVEIFRyaWdnZXJzCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKLSMgSW5maW5pQmFuZCBzdXBwb3J0CisjIG9uLUNQVSBSVEMgZHJpdmVycwogIworQ09ORklHX1JUQ19EUlZfQVUxWFhYPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIyBUSSBWTFlOUQogIwotCi0jCi0jIFJlYWwgVGltZSBDbG9jawotIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBETUEgRW5naW5lIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgVmlydHVhbGl6YXRpb24KLSMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci1DT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci1DT05GSUdfUkVJU0VSRlNfRlM9bQotIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKLUNPTkZJR19SRUlTRVJGU19GU19YQVRUUj15Ci1DT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9bQotQ09ORklHX0FVVE9GUzRfRlM9bQotQ09ORklHX0ZVU0VfRlM9bQotQ09ORklHX0dFTkVSSUNfQUNMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtOTUzLDY5ICsxMDA5LDc2IEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQorIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorIyBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci1DT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLUNPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDUllQVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0NSQU1GUz1tCitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CitDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQorIyBDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9MWk89eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTPXkKKyMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPW0KLSMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPW0KLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPW0KK0NPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiAjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldApAQCAtMTA1NSwzNCArMTExOCw3MSBAQAogIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9UQ1A9eQotIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlRJTUVfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1pCT09UPXkKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMDkwLDY3ICsxMTkwLDMyIEBACiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX1hDQkM9bQotQ09ORklHX0NSWVBUT19OVUxMPW0KLUNPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fU0hBMT1tCi1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCi1DT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi1DT05GSUdfQ1JZUFRPX1dQNTEyPW0KLUNPTkZJR19DUllQVE9fVEdSMTkyPW0KLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9bQotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLUNPTkZJR19DUllQVE9fTFJXPW0KLUNPTkZJR19DUllQVE9fREVTPW0KLUNPTkZJR19DUllQVE9fRkNSWVBUPW0KLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzE2PW0KK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9bQotQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfVEVYVFNFQVJDSD15Ci1DT05GSUdfVEVYVFNFQVJDSF9LTVA9bQotQ09ORklHX1RFWFRTRUFSQ0hfQk09bQotQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KLUNPTkZJR19QTElTVD15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjEyMDBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YWQ3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjEyMDBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTU2OCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzCisjIEZyaSBGZWIgMjYgMTA6MjM6MzQgMjAxMAorIworQ09ORklHX01JUFM9eQorCisjCisjIE1hY2hpbmUgc2VsZWN0aW9uCisjCitDT05GSUdfTUFDSF9BTENIRU1ZPXkKKyMgQ09ORklHX0FSNyBpcyBub3Qgc2V0CisjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlRWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NOSV9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19QQjEyMDA9eQorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxMjAwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CitDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKK0NPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CitDT05GSUdfTUlQU19ESVNBQkxFX09CU09MRVRFX0lERT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CisjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15CitDT05GSUdfSVJRX0NQVT15CitDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CisKKyMKKyMgQ1BVIHNlbGVjdGlvbgorIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAorQ09ORklHX0NQVV9NSVBTMzJfUjE9eQorIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUjU1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I2MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9ORVZBREEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I4MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CitDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKK0NPTkZJR19DUFVfTUlQUzMyPXkKK0NPTkZJR19DUFVfTUlQU1IxPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19IQVJEV0FSRV9XQVRDSFBPSU5UUz15CisKKyMKKyMgS2VybmVsIHR5cGUKKyMKK0NPTkZJR18zMkJJVD15CisjIENPTkZJR182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8zMktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX1BSRUZFVENIPXkKK0NPTkZJR19NSVBTX01UX0RJU0FCTEVEPXkKKyMgQ09ORklHX01JUFNfTVRfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTVRfU01UQyBpcyBub3Qgc2V0CitDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19DUFVfSEFTX1NZTkM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfS1NNPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKKyMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSItcGIxMjAwIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVElOWV9SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRU1CRURERUQ9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKKyMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19NTVU9eQorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfUENNQ0lBPXkKK0NPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQorIyBDT05GSUdfUENNQ0lBX0lPQ1RMIGlzIG5vdCBzZXQKKworIworIyBQQy1jYXJkIGJyaWRnZXMKKyMKKyMgQ09ORklHX1BDTUNJQV9BVTFYMDAgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEPXkKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTPXkKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9eQorQ09ORklHX1RSQURfU0lHTkFMUz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0FVMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX1BMQVRGT1JNPXkKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIworIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfVUI9eQorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKK0NPTkZJR19JREVfQVRBUEk9eQorIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDUz15CitDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorQ09ORklHX0lERV9UQVNLX0lPQ1RMPXkKKyMgQ09ORklHX0lERV9QUk9DX0ZTIGlzIG5vdCBzZXQKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCisjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERV9BVTFYWFg9eQorQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9QSU9fREJETUE9eQorIyBDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX01ETUEyX0RCRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0FVMVgwMF9FTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwPXkKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0NIQVJERVY9eQorIyBDT05GSUdfSTJDX0hFTFBFUl9BVVRPIGlzIG5vdCBzZXQKKworIworIyBJMkMgQWxnb3JpdGhtcworIworIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19BVTE1NTA9eQorIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0FVMTU1MD15CitDT05GSUdfU1BJX0JJVEJBTkc9eQorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CitDT05GSUdfSFdNT05fVklEPXkKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19BRE0xMDI1PXkKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfTE03MD15CisjIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BTUM2ODIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDQjE0MDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQVUxMjAwPXkKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorQ09ORklHX0ZPTlRTPXkKKyMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4MTY9eQorIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAorIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CitDT05GSUdfU09VTkQ9eQorIyBDT05GSUdfU09VTkRfT1NTX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKK0NPTkZJR19TTkRfSkFDSz15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAorQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUz15CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVk1BU1RFUj15CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQUM5N19DT0RFQz15CisjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTUNJQSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX1NPQ19BQzk3X0JVUz15CitDT05GSUdfU05EX1NPQ19BVTFYUFNDPXkKK0NPTkZJR19TTkRfU09DX0FVMVhQU0NfSTJTPXkKK0NPTkZJR19TTkRfU09DX0FVMVhQU0NfQUM5Nz15CitDT05GSUdfU05EX1NPQ19EQjEyMDA9eQorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQorIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DX0FDOTdfQ09ERUM9eQorQ09ORklHX1NORF9TT0NfV004NzMxPXkKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19BQzk3X0JVUz15CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CitDT05GSUdfSElEUkFXPXkKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRERFVj15CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9ERUJVRz15CitDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CitDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CisjCisKKyMKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KKyMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CisjIENPTkZJR19NTUNfQkxPQ0tfQk9VTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0FVMVg9eQorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfSURFX0RJU0sgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKKworIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfQVUxWFhYPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9eQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CitDT05GSUdfSkZGUzJfTFpPPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CitDT05GSUdfSkZGUzJfUlVCSU49eQorIyBDT05GSUdfSkZGUzJfQ01PREVfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQorIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGUz15CisjIENPTkZJR19TUVVBU0hGU19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19FRklfUEFSVElUSU9OPXkKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfSVNPODg1OV8yPXkKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19TVFJJUF9BU01fU1lNUz15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwIgorIyBDT05GSUdfQ01ETElORV9PVkVSUklERSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworQ09ORklHX0tFWVM9eQorQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWUZTPXkKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorQ09ORklHX0NSQ19JVFVfVD15CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZwppbmRleCA1ZWM2MDgzLi43NDk3ZDMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKQEAgLTEsNzggKzEsMTAyIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjAKLSMgVHVlIEZlYiAyMCAyMTo0NzozNyAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgRnJpIEZlYiAyNiAxMDowNToyNyAyMDEwCiAjCiBDT05GSUdfTUlQUz15CiAKICMKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKLUNPTkZJR19aT05FX0RNQT15CiBDT05GSUdfTUFDSF9BTENIRU1ZPXkKLSMgQ09ORklHX01JUFNfTVRYMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0JPU1BPUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfUEIxMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19NSVBTX1BCMTUwMD15Ci0jIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MT09OR1NPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dSX1BQTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9WUjQxWFggaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfU1RCMjI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVFYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lQMjggaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NSUtST1RJS19SQjUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BTENIRU1ZX0dQSU9JTlRfQVUxMDAwPXkKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0CitDT05GSUdfTUlQU19QQjE1MDA9eQorIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQVUxNTAwPXkKK0NPTkZJR19TT0NfQVUxWDAwPXkKK0NPTkZJR19MT09OR1NPTl9VQVJUX0JBU0U9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFJPRklMRT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19DRVZUX1I0S19MSUI9eQorQ09ORklHX0NTUkNfUjRLX0xJQj15CiBDT05GSUdfRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiAjIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTElUVExFX0VORElBTj15Ci1DT05GSUdfU09DX0FVMTUwMD15Ci1DT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfSVJRX0NQVT15CiBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVD01CiAKICMKICMgQ1BVIHNlbGVjdGlvbgogIworIyBDT05GSUdfQ1BVX0xPT05HU09OMkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0xPT05HU09OMkYgaXMgbm90IHNldAogQ09ORklHX0NQVV9NSVBTMzJfUjE9eQogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTg1LDYgKzEwOSw3IEBACiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjU0MzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1I1NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0CkBAIC05MiwxMSArMTE3LDE0IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTX1NVUFBPUlRTX1pCT09UPXkKIENPTkZJR19TWVNfSEFTX0NQVV9NSVBTMzJfUjE9eQogQ09ORklHX0NQVV9NSVBTMzI9eQogQ09ORklHX0NQVV9NSVBTUjE9eQogQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQogQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQorQ09ORklHX0hBUkRXQVJFX1dBVENIUE9JTlRTPXkKIAogIwogIyBLZXJuZWwgdHlwZQpAQCAtMTA2LDE5MCArMTM0LDI1NSBAQAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15CiBDT05GSUdfTUlQU19NVF9ESVNBQkxFRD15CiAjIENPTkZJR19NSVBTX01UX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR182NEJJVF9QSFlTX0FERFI9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX0NQVV9TVVBQT1JUU19ISUdITUVNPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKICMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKICMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FSQklUX0haPXkKLUNPTkZJR19IWj0xMDAwCitDT05GSUdfSFo9MTAwCiBDT05GSUdfUFJFRU1QVF9OT05FPXkKICMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cAogIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSItcGIxNTAwIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKKyMgQ09ORklHX0tFUk5FTF9HWklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CitDT05GSUdfS0VSTkVMX0xaTUE9eQorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVElOWV9SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1JFTEFZPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQogCiAjCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfUENJX1FVSVJLUz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLQotIwotIyBCbG9jayBsYXllcgotIworIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKICMKIENPTkZJR19IV19IQVNfUENJPXkKIENPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLUNPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQorQ09ORklHX1BDQ0FSRD15CitDT05GSUdfUENNQ0lBPXkKIENPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQogQ09ORklHX1BDTUNJQV9JT0NUTD15Ci1DT05GSUdfQ0FSREJVUz15CisjIENPTkZJR19DQVJEQlVTIGlzIG5vdCBzZXQKIAogIwogIyBQQy1jYXJkIGJyaWRnZXMKICMKICMgQ09ORklHX1lFTlRBIGlzIG5vdCBzZXQKLUNPTkZJR19QRDY3Mjk9bQorIyBDT05GSUdfUEQ2NzI5IGlzIG5vdCBzZXQKICMgQ09ORklHX0k4MjA5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ01DSUFfQVUxWDAwIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0NBUkRfTk9OU1RBVElDPW0KLQotIwotIyBQQ0kgSG90cGx1ZyBTdXBwb3J0Ci0jCitDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQ9eQogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogCiAjCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX1RSQURfU0lHTkFMUz15CiAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiBDT05GSUdfTkVUPXkKIAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX01JR1JBVEU9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKIENPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlBfUkFSUD15CiAjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKQEAgLTMwMCwxMTAgKzM5MywyNSBAQAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotQ09ORklHX1RDUF9NRDVTSUc9eQotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX1NFQ01BUks9eQotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19TVVBQT1JUPXkKLSMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NUX0FDQ1Q9eQotQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi0jIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi1DT05GSUdfTkZfQ1RfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCi0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIworIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtNDEzLDI3ICs0MjEsMjQgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIworIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTE9bQotIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX1NPRlRNQUM9bQotIyBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDQyLDI1ICs0NDcsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9bQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwotQ09ORklHX0NPTk5FQ1RPUj1tCi0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDczLDYgKzQ3OCw3IEBACiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtNDk4LDE0ICs1MDQsMTQgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotQ09ORklHX01URF9BTENIRU1ZPXkKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTUyMywzMCArNTI5LDIwIEBACiAjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUEFDUEkgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKK0NPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKQEAgLTU1NCw2NyArNTUwLDY2IEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1VCPXkKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DRFJPTV9QS1RDRFZEPW0KLUNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0FUQV9PVkVSX0VUSD1tCi0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi1DT05GSUdfU0dJX0lPQzQ9bQotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz00Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCiAjCitDT05GSUdfSURFX1hGRVJfTU9ERT15CitDT05GSUdfSURFX0FUQVBJPXkKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFQ1M9bQotIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDUz15CitDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9UQVNLX0lPQ1RMPXkKK0NPTkZJR19JREVfUFJPQ19GUz15CiAKICMKICMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwotQ09ORklHX0lERV9HRU5FUklDPXkKKyMgQ09ORklHX0lERV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCiBDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQotIyBDT05GSUdfSURFUENJX1NIQVJFX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfR0VORVJJQz15CisjIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9JREVETUFfRk9SQ0VEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9QQ0lfQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9IUFQzNjY9eQogIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JVDgyMTM9bQorIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKQEAgLTYyNCw4MiArNjE5LDY1IEBACiAjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1RDODZDMDAxPW0KLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUE9eQotIyBDT05GSUdfSURFRE1BX0lWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfUkFJRF9BVFRSUz1tCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgQVRBIChwcm9kKSBhbmQgUGFyYWxsZWwgQVRBIChleHBlcmltZW50YWwpIGRyaXZlcnMKLSMKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAogCiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKKworIworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIEFSQ25ldCBkZXZpY2VzCi0jCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfUEhZTElCPXkKIAogIwogIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCiAjCi1DT05GSUdfTUFSVkVMTF9QSFk9bQotQ09ORklHX0RBVklDT01fUEhZPW0KLUNPTkZJR19RU0VNSV9QSFk9bQotQ09ORklHX0xYVF9QSFk9bQotQ09ORklHX0NJQ0FEQV9QSFk9bQotQ09ORklHX1ZJVEVTU0VfUEhZPW0KLUNPTkZJR19TTVNDX1BIWT1tCi0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19EQVZJQ09NX1BIWT15CitDT05GSUdfUVNFTUlfUEhZPXkKK0NPTkZJR19MWFRfUEhZPXkKK0NPTkZJR19DSUNBREFfUEhZPXkKK0NPTkZJR19WSVRFU1NFX1BIWT15CitDT05GSUdfU01TQ19QSFk9eQorQ09ORklHX0JST0FEQ09NX1BIWT15CitDT05GSUdfSUNQTFVTX1BIWT15CitDT05GSUdfUkVBTFRFS19QSFk9eQorQ09ORklHX05BVElPTkFMX1BIWT15CitDT05GSUdfU1RFMTBYUD15CitDT05GSUdfTFNJX0VUMTAxMUNfUEhZPXkKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPW0KK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19BVTFYMDBfRU5FVD15CiAjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKQEAgLTcwNyw5NiArNjg1LDUxIEBACiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19RTEEzWFhYPW0KLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwMCBNYml0KQotIwotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UMz1tCi0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotQ09ORklHX05FVFhFTl9OSUM9bQotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIworIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAogCiAjCi0jIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCiAjCi1DT05GSUdfTkVUX1BDTUNJQT15Ci1DT05GSUdfUENNQ0lBXzNDNTg5PW0KLUNPTkZJR19QQ01DSUFfM0M1NzQ9bQotQ09ORklHX1BDTUNJQV9GTVZKMThYPW0KLUNPTkZJR19QQ01DSUFfUENORVQ9bQotQ09ORklHX1BDTUNJQV9OTUNMQU49bQotQ09ORklHX1BDTUNJQV9TTUM5MUM5Mj1tCi1DT05GSUdfUENNQ0lBX1hJUkMyUFM9bQotQ09ORklHX1BDTUNJQV9BWE5FVD1tCi0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIFRlbGVwaG9ueSBTdXBwb3J0Ci0jCiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKQEAgLTgwNCwxNiArNzM3LDE0IEBACiAjCiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCkBAIC04MjMsMzMgKzc1NCwzNCBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKICMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfQVUxWDAwX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CkBAIC04NjMsMjgyICs3OTUsNDUwIEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIworIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAogCiAjCiAjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwogIwotQ09ORklHX1NZTkNMSU5LX0NTPW0KKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKK0NPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIFBQUyBzdXBwb3J0CiAjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIworIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCi0jIE11bHRpbWVkaWEgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQV9BUkIgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CitDT05GSUdfRklSTVdBUkVfRURJRD15CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorQ09ORklHX0ZCX1RJTEVCTElUVElORz15CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TMUQxM1hYWD15CisjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAorIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCi0jIFNvdW5kCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKICMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwotIyBISUQgRGV2aWNlcworIyBVU0IgSW5wdXQgRGV2aWNlcwogIwotIyBDT05GSUdfSElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQogCiAjCi0jIFVTQiBzdXBwb3J0CisjIFNwZWNpYWwgSElEIGRyaXZlcnMKICMKKyMgQ09ORklHX0hJRF9BNFRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09UR19XSElURUxJU1Q9eQorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKLSMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKIAogIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCi0jIFJlYWwgVGltZSBDbG9jaworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwotIyBETUEgRW5naW5lIHN1cHBvcnQKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0FVMVhYWD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwotIyBETUEgQ2xpZW50cworIyBUSSBWTFlOUQogIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPW0KLUNPTkZJR19BVVRPRlM0X0ZTPW0KLUNPTkZJR19GVVNFX0ZTPW0KLUNPTkZJR19HRU5FUklDX0FDTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JU085NjYwX0ZTPXkKK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfVURGX0ZTPXkKK0NPTkZJR19VREZfTkxTPXkKIAogIwogIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCiAjCitDT05GSUdfRkFUX0ZTPXkKICMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPW0KK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9MWk89eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTPXkKKyMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPW0KLSMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPW0KLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPW0KK0NPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKICMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldApAQCAtMTE1NSwxMCArMTI1NSwxMCBAQAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPXkKICMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQogIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldApAQCAtMTE2OCwzOCArMTI2OCw3NSBAQAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQogIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9UQ1A9eQotIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTIwNyw2NyArMTM0NCwzMiBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfU0VDVVJJVFlGUz15CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj1tCitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfSVRVX1Q9eQogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX1BMSVNUPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcKaW5kZXggNjY0NzY0Mi4uYWE1MjZmNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnCkBAIC0xLDc5ICsxLDEwMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCi0jIFR1ZSBGZWIgMjAgMjE6NDc6MzcgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzCisjIEZyaSBGZWIgMjYgMTA6MDY6MDcgMjAxMAogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCi1DT05GSUdfWk9ORV9ETUE9eQogQ09ORklHX01BQ0hfQUxDSEVNWT15Ci0jIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlQU19QQjE1NTA9eQotIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQVI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTQ3WFggaXMgbm90IHNldAorIyBDT05GSUdfQkNNNjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9PTkdTT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fSkFHVUFSX0FUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1hYUzE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX0pCUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTlg4NTUwX1NUQjgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUNfTVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNQ19ZT1NFTUlURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUlRWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JUDI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9TRU5UT1NBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9CSUdTVVIgaXMgbm90IHNldAogIyBDT05GSUdfU05JX1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDM5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UWDQ5WFggaXMgbm90IHNldAorIyBDT05GSUdfTUlLUk9USUtfUkI1MzIgaXMgbm90IHNldAorIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1NJTVVMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1JFRkVSRU5DRV9CT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQUxDSEVNWV9HUElPSU5UX0FVMTAwMD15CisjIENPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAorQ09ORklHX01JUFNfUEIxNTUwPXkKKyMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0CitDT05GSUdfU09DX0FVMTU1MD15CitDT05GSUdfU09DX0FVMVgwMD15CitDT05GSUdfTE9PTkdTT05fVUFSVF9CQVNFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BST0ZJTEU9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfQ0VWVF9SNEtfTElCPXkKK0NPTkZJR19DU1JDX1I0S19MSUI9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CitDT05GSUdfU1lTX0hBU19FQVJMWV9QUklOVEs9eQogQ09ORklHX01JUFNfRElTQUJMRV9PQlNPTEVURV9JREU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0dQSU89eQogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU49eQotQ09ORklHX1NPQ19BVTE1NTA9eQotQ09ORklHX1NPQ19BVTFYMDA9eQorQ09ORklHX0lSUV9DUFU9eQogQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCiAjIENQVSBzZWxlY3Rpb24KICMKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9MT09OR1NPTjJGIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfTUlQUzMyX1IxPXkKICMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CkBAIC04Niw2ICsxMTAsNyBAQAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9SNTUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldApAQCAtOTMsMTEgKzExOCwxNCBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19aQk9PVD15CiBDT05GSUdfU1lTX0hBU19DUFVfTUlQUzMyX1IxPXkKIENPTkZJR19DUFVfTUlQUzMyPXkKIENPTkZJR19DUFVfTUlQU1IxPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKK0NPTkZJR19IQVJEV0FSRV9XQVRDSFBPSU5UUz15CiAKICMKICMgS2VybmVsIHR5cGUKQEAgLTEwNywxOTAgKzEzNSwyNTUgQEAKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzMyS0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfVlBFX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfNjRCSVRfUEhZU19BRERSPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLXBiMTU1MCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9MWk1BPXkKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RJTllfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLUNPTkZJR19SRUxBWT15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX1NMQUI9eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfQUlPPXkKIAogIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1BDSV9RVUlSS1M9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CitDT05GSUdfQkxLX0RFVl9CU0c9eQorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCiAjCiBDT05GSUdfSFdfSEFTX1BDST15CiBDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi1DT05GSUdfUENDQVJEPW0KLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPW0KK0NPTkZJR19QQ0NBUkQ9eQorQ09ORklHX1BDTUNJQT15CiBDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKIENPTkZJR19QQ01DSUFfSU9DVEw9eQotQ09ORklHX0NBUkRCVVM9eQorIyBDT05GSUdfQ0FSREJVUyBpcyBub3Qgc2V0CiAKICMKICMgUEMtY2FyZCBicmlkZ2VzCiAjCiAjIENPTkZJR19ZRU5UQSBpcyBub3Qgc2V0Ci1DT05GSUdfUEQ2NzI5PW0KKyMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0CiAjIENPTkZJR19JODIwOTIgaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBX0FVMVgwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUENDQVJEX05PTlNUQVRJQz1tCi0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIworQ09ORklHX1BDTUNJQV9BTENIRU1ZX0RFVkJPQVJEPXkKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9NSUdSQVRFPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19ORVRfS0VZX01JR1JBVEU9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKICMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CiBDT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QX1JBUlA9eQogIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CkBAIC0zMDEsMTEwICszOTQsMjUgQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19UQ1BfTUQ1U0lHPXkKLQotIwotIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19TRUNNQVJLPXkKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQotQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU1VQUE9SVD15Ci0jIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ09OTlRSQUNLPW0KLUNPTkZJR19ORl9DVF9BQ0NUPXkKLUNPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQotQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQotQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCi1DT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQotQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAotQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQotQ09ORklHX05GX0NUX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQotIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLQotIwotIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTQxNCwyNyArNDIyLDMwIEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19ST1VURT15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIworIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQ0MywyNSArNDU0LDI1IEBACiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPW0KK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotCi0jCi0jIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKLSMKLUNPTkZJR19DT05ORUNUT1I9bQotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQ3NCw2ICs0ODUsNyBAQAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAogIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTQ5OSwxNCArNTExLDE0IEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQUxDSEVNWT15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC01MjQsMzAgKzUzNiwzMCBAQAogIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIworQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CitDT05GSUdfTVREX05BTkRfQVUxNTUwPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CkBAIC01NTUsNjcgKzU2Nyw2NiBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9VQj15CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0RST01fUEtUQ0RWRD1tCi1DT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotQ09ORklHX1NHSV9JT0M0PW0KLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIworIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotQ09ORklHX0lERV9NQVhfSFdJRlM9NAotQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIworQ09ORklHX0lERV9YRkVSX01PREU9eQorQ09ORklHX0lERV9BVEFQST15CiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERUNTPW0KLSMgQ09ORklHX0JMS19ERVZfREVMS0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ1M9eQorQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorIyBDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAogIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QUk9DX0ZTPXkKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCi1DT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfSURFX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKKworIworIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKKyMKIENPTkZJR19CTEtfREVWX0lERVBDST15Ci0jIENPTkZJR19JREVQQ0lfU0hBUkVfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX1BDSV9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0hQVDM2Nj15CiAjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lUODIxMz1tCisjIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldApAQCAtNjI1LDgyICs2MzYsNjUgQEAKICMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfVEM4NkMwMDE9bQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15Ci0jIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19SQUlEX0FUVFJTPW0KKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CiAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19QSFlMSUI9eQogCiAjCiAjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKICMKLUNPTkZJR19NQVJWRUxMX1BIWT1tCi1DT05GSUdfREFWSUNPTV9QSFk9bQotQ09ORklHX1FTRU1JX1BIWT1tCi1DT05GSUdfTFhUX1BIWT1tCi1DT05GSUdfQ0lDQURBX1BIWT1tCi1DT05GSUdfVklURVNTRV9QSFk9bQotQ09ORklHX1NNU0NfUEhZPW0KLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTUFSVkVMTF9QSFk9eQorQ09ORklHX0RBVklDT01fUEhZPXkKK0NPTkZJR19RU0VNSV9QSFk9eQorQ09ORklHX0xYVF9QSFk9eQorQ09ORklHX0NJQ0FEQV9QSFk9eQorQ09ORklHX1ZJVEVTU0VfUEhZPXkKK0NPTkZJR19TTVNDX1BIWT15CitDT05GSUdfQlJPQURDT01fUEhZPXkKK0NPTkZJR19JQ1BMVVNfUEhZPXkKK0NPTkZJR19SRUFMVEVLX1BIWT15CitDT05GSUdfTkFUSU9OQUxfUEhZPXkKK0NPTkZJR19TVEUxMFhQPXkKK0NPTkZJR19MU0lfRVQxMDExQ19QSFk9eQogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX01JUFNfQVUxWDAwX0VORVQ9eQogIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CkBAIC03MDgsODggKzcwMiw1MSBAQAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotCi0jCi0jIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci1DT05GSUdfUUxBM1hYWD1tCi0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDM9bQotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRYRU5fTklDPW0KLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKIAogIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwogIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKIAogIwotIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIyBVU0IgTmV0d29yayBBZGFwdGVycwogIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAotQ09ORklHX1BQUF9BU1lOQz1tCi0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAotQ09ORklHX1BQUF9ERUZMQVRFPW0KLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUFBfTVBQRT1tCi1DT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIworIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwogIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCkBAIC03OTcsMTYgKzc1NCwxNCBAQAogIwogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtODE2LDMzICs3NzEsMzQgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKICMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19SQVc9bQorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCi0jIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVMVgwMF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NApAQCAtODU2LDI4MiArODEyLDQ5MiBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKIAogIwogIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKICMKLUNPTkZJR19TWU5DTElOS19DUz1tCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisjIENPTkZJR19JMkNfSEVMUEVSX0FVVE8gaXMgbm90IHNldAogCiAjCi0jIEkyQyBzdXBwb3J0CisjIEkyQyBBbGdvcml0aG1zCiAjCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAogCiAjCi0jIFNQSSBzdXBwb3J0CisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAogIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfQVUxNTUwPXkKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKIAogIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjIFBQUyBzdXBwb3J0CiAjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIworIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCi0jIE11bHRpbWVkaWEgZGV2aWNlcworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfVkdBX0FSQiBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwotIyBTb3VuZAorIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRFJBVz15CiAKICMKLSMgSElEIERldmljZXMKKyMgVVNCIElucHV0IERldmljZXMKICMKLSMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEREVWPXkKIAogIwotIyBVU0Igc3VwcG9ydAorIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCisjIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorQ09ORklHX1VTQl9TVVNQRU5EPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQorQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRldmljZXMKLSMKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotCi0jCi0jIEluZmluaUJhbmQgc3VwcG9ydAotIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycwogIwogCiAjCi0jIFJlYWwgVGltZSBDbG9jaworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwotIyBETUEgRW5naW5lIHN1cHBvcnQKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCi0jIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0FVMVhYWD15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwotIyBETUEgQ2xpZW50cworIyBUSSBWTFlOUQogIwotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0KLSMKLSMgQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydAotIwotCi0jCi0jIFZpcnR1YWxpemF0aW9uCi0jCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPW0KLUNPTkZJR19BVVRPRlM0X0ZTPW0KLUNPTkZJR19GVVNFX0ZTPW0KLUNPTkZJR19HRU5FUklDX0FDTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JU085NjYwX0ZTPXkKK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfVURGX0ZTPXkKK0NPTkZJR19VREZfTkxTPXkKIAogIwogIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCiAjCitDT05GSUdfRkFUX0ZTPXkKICMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgUHNldWRvIGZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15CisjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLUNPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPW0KK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9MWk89eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTPXkKKyMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPW0KLSMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci1DT05GSUdfU01CX0ZTPW0KLSMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi1DT05GSUdfTkxTPW0KK0NPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKICMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9eQogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldApAQCAtMTE0OCwxMCArMTMxNCwxMCBAQAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPXkKICMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQogIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldApAQCAtMTE2MSwzOCArMTMyNyw3NSBAQAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQogIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBEaXN0cmlidXRlZCBMb2NrIE1hbmFnZXIKLSMKLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9UQ1A9eQotIyBDT05GSUdfRExNX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQ1JPU1NDT01QSUxFPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SVU5USU1FX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19aQk9PVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTIwMCw2NyArMTQwMywzMiBAQAogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCi1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX0RFUz1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi1DT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCitDT05GSUdfU0VDVVJJVFlGUz15CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj1tCitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfSVRVX1Q9eQogQ09ORklHX0NSQzMyPXkKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT1tCi1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX1BMSVNUPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2RlYy9rbjAxLWJlcnIuYyBiL2FyY2gvbWlwcy9kZWMva24wMS1iZXJyLmMKaW5kZXggYjBkYzZkNS4uOTRkMjNiNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlYy9rbjAxLWJlcnIuYworKysgYi9hcmNoL21pcHMvZGVjL2tuMDEtYmVyci5jCkBAIC00Niw3ICs0Niw3IEBACiAgKiBUaGVyZSBpcyBubyBkZWZhdWx0IHZhbHVlIC0tIGl0IGhhcyB0byBiZSBpbml0aWFsaXplZC4KICAqLwogdTE2IGNhY2hlZF9rbjAxX2NzcjsKLURFRklORV9TUElOTE9DSyhrbjAxX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soa24wMV9sb2NrKTsKIAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGVjX2tuMDFfYmVfYWNrKHZvaWQpCkBAIC01NCwxMiArNTQsMTIgQEAKIAl2b2xhdGlsZSB1MTYgKmNzciA9ICh2b2lkICopQ0tTRUcxQUREUihLTjAxX1NMT1RfQkFTRSArIEtOMDFfQ1NSKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmtuMDFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgma24wMV9sb2NrLCBmbGFncyk7CiAKIAkqY3NyID0gY2FjaGVkX2tuMDFfY3NyIHwgS04wMV9DU1JfTUVNRVJSOwkvKiBDbGVhciBidXMgSVJRLiAqLwogCWlvYigpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma24wMV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtuMDFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IGRlY19rbjAxX2JlX2JhY2tlbmQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBpc19maXh1cCwgaW50IGludm9rZXIpCkBAIC0xODIsNyArMTgyLDcgQEAKIAl2b2xhdGlsZSB1MTYgKmNzciA9ICh2b2lkICopQ0tTRUcxQUREUihLTjAxX1NMT1RfQkFTRSArIEtOMDFfQ1NSKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmtuMDFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgma24wMV9sb2NrLCBmbGFncyk7CiAKIAkvKiBQcmVzZXQgd3JpdGUtb25seSBiaXRzIG9mIHRoZSBDb250cm9sIFJlZ2lzdGVyIGNhY2hlLiAqLwogCWNhY2hlZF9rbjAxX2NzciA9ICpjc3I7CkBAIC0xOTQsNyArMTk0LDcgQEAKIAkqY3NyID0gY2FjaGVkX2tuMDFfY3NyOwogCWlvYigpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma24wMV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtuMDFfbG9jaywgZmxhZ3MpOwogCiAJLyogQ2xlYXIgYW55IGxlZnRvdmVyIGVycm9ycyBmcm9tIHRoZSBmaXJtd2FyZS4gKi8KIAlkZWNfa24wMV9iZV9hY2soKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZWMvcHJvbS9sb2NvcmUuUyBiL2FyY2gvbWlwcy9kZWMvcHJvbS9sb2NvcmUuUwppbmRleCBkOWFjZGNlLi5mNzJiNTc0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGVjL3Byb20vbG9jb3JlLlMKKysrIGIvYXJjaC9taXBzL2RlYy9wcm9tL2xvY29yZS5TCkBAIC0yNyw0ICsyNywzIEBACiAJanIJazAKIAkgcmZlCiBFTkQoZ2VuZXhjZXB0X2Vhcmx5KQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggZGQ3NWQ2Ny4uNTE5MTk3ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtMTM3LDcgKzEzNyw3IEBACiB7CiAJaW50IHJlc3VsdDsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCWludCB0ZW1wOwpAQCAtMTg5LDcgKzE4OSw3IEBACiB7CiAJaW50IHJlc3VsdDsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCWludCB0ZW1wOwpAQCAtMjQ5LDcgKzI0OSw3IEBACiB7CiAJaW50IHJlc3VsdDsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCWludCB0ZW1wOwpAQCAtNTE2LDcgKzUxNiw3IEBACiB7CiAJbG9uZyByZXN1bHQ7CiAKLQlzbXBfbGxzY19tYigpOworCXNtcF9tYl9fYmVmb3JlX2xsc2MoKTsKIAogCWlmIChrZXJuZWxfdXNlc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgewogCQlsb25nIHRlbXA7CkBAIC01NjgsNyArNTY4LDcgQEAKIHsKIAlsb25nIHJlc3VsdDsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCWxvbmcgdGVtcDsKQEAgLTYyOCw3ICs2MjgsNyBAQAogewogCWxvbmcgcmVzdWx0OwogCi0Jc21wX2xsc2NfbWIoKTsKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CiAKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJbG9uZyB0ZW1wOwpAQCAtNzg4LDkgKzc4OCw5IEBACiAgKiBhdG9taWMqX3JldHVybiBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemluZyBidXQgbm90IHRoZSBub24tKl9yZXR1cm4KICAqIHZlcnNpb25zLgogICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQlzbXBfbGxzY19tYigpCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQlzbXBfbWJfX2JlZm9yZV9sbHNjKCkKICNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJc21wX2xsc2NfbWIoKQotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJc21wX2xsc2NfbWIoKQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCkJc21wX21iX19iZWZvcmVfbGxzYygpCiAjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpCXNtcF9sbHNjX21iKCkKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F0b21pYy1sb25nLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYmFycmllci5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JhcnJpZXIuaAppbmRleCA4ZTlhYzMxLi5jMDg4NGYwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYmFycmllci5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9iYXJyaWVyLmgKQEAgLTg4LDEyICs4OCwyMCBAQAogCQk6IC8qIG5vIG91dHB1dCAqLwkJXAogCQk6ICJtIiAoKihpbnQgKilDS1NFRzEpCQlcCiAJCTogIm1lbW9yeSIpCisjaWZkZWYgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OCisjIGRlZmluZSBPQ1RFT05fU1lOQ1dfU1RSCSIuc2V0IHB1c2hcbi5zZXQgYXJjaD1vY3Rlb25cbnN5bmN3XG5zeW5jd1xuLnNldCBwb3BcbiIKKyMgZGVmaW5lIF9fc3luY3coKSAJX19hc21fXyBfX3ZvbGF0aWxlX18oT0NURU9OX1NZTkNXX1NUUiA6IDogOiAibWVtb3J5IikKIAotI2RlZmluZSBmYXN0X3dtYigpCV9fc3luYygpCi0jZGVmaW5lIGZhc3Rfcm1iKCkJX19zeW5jKCkKLSNkZWZpbmUgZmFzdF9tYigpCV9fc3luYygpCi0jaWZkZWYgQ09ORklHX1NHSV9JUDI4Ci0jZGVmaW5lIGZhc3RfaW9iKCkJCQkJXAorIyBkZWZpbmUgZmFzdF93bWIoKQlfX3N5bmN3KCkKKyMgZGVmaW5lIGZhc3Rfcm1iKCkJYmFycmllcigpCisjIGRlZmluZSBmYXN0X21iKCkJX19zeW5jKCkKKyMgZGVmaW5lIGZhc3RfaW9iKCkJZG8geyB9IHdoaWxlICgwKQorI2Vsc2UgLyogISBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04gKi8KKyMgZGVmaW5lIGZhc3Rfd21iKCkJX19zeW5jKCkKKyMgZGVmaW5lIGZhc3Rfcm1iKCkJX19zeW5jKCkKKyMgZGVmaW5lIGZhc3RfbWIoKQlfX3N5bmMoKQorIyBpZmRlZiBDT05GSUdfU0dJX0lQMjgKKyMgIGRlZmluZSBmYXN0X2lvYigpCQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQlcCiAJCSIuc2V0CXB1c2hcblx0IgkJXAogCQkiLnNldAlub3Jlb3JkZXJcblx0IgkJXApAQCAtMTA0LDEzICsxMTIsMTQgQEAKIAkJOiAvKiBubyBvdXRwdXQgKi8JCVwKIAkJOiAibSIgKCooaW50ICopQ0tTRUcxQUREUigweDFmYTAwMDA0KSkgXAogCQk6ICJtZW1vcnkiKQotI2Vsc2UKLSNkZWZpbmUgZmFzdF9pb2IoKQkJCQlcCisjIGVsc2UKKyMgIGRlZmluZSBmYXN0X2lvYigpCQkJCVwKIAlkbyB7CQkJCQlcCiAJCV9fc3luYygpOwkJCVwKIAkJX19mYXN0X2lvYigpOwkJCVwKIAl9IHdoaWxlICgwKQotI2VuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OICovCiAKICNpZmRlZiBDT05GSUdfQ1BVX0hBU19XQgogCkBAIC0xMzEsMjUgKzE0MCw0MiBAQAogI2VuZGlmIC8qICFDT05GSUdfQ1BVX0hBU19XQiAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfV0VBS19PUkRFUklORykgJiYgZGVmaW5lZChDT05GSUdfU01QKQotI2RlZmluZSBfX1dFQUtfT1JERVJJTkdfTUIJIiAgICAgICBzeW5jCVxuIgorIyBpZmRlZiBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04KKyMgIGRlZmluZSBzbXBfbWIoKQlfX3N5bmMoKQorIyAgZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKKyMgIGRlZmluZSBzbXBfd21iKCkJX19zeW5jdygpCisjIGVsc2UKKyMgIGRlZmluZSBzbXBfbWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIgOiA6IDoibWVtb3J5IikKKyMgIGRlZmluZSBzbXBfcm1iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmMiIDogOiA6Im1lbW9yeSIpCisjICBkZWZpbmUgc21wX3dtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIiA6IDogOiJtZW1vcnkiKQorIyBlbmRpZgogI2Vsc2UKLSNkZWZpbmUgX19XRUFLX09SREVSSU5HX01CCSIJCVxuIgorI2RlZmluZSBzbXBfbWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfd21iKCkJYmFycmllcigpCiAjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX1dFQUtfUkVPUkRFUklOR19CRVlPTkRfTExTQykgJiYgZGVmaW5lZChDT05GSUdfU01QKQogI2RlZmluZSBfX1dFQUtfTExTQ19NQgkJIiAgICAgICBzeW5jCVxuIgogI2Vsc2UKICNkZWZpbmUgX19XRUFLX0xMU0NfTUIJCSIJCVxuIgogI2VuZGlmCiAKLSNkZWZpbmUgc21wX21iKCkJX19hc21fXyBfX3ZvbGF0aWxlX18oX19XRUFLX09SREVSSU5HX01CIDogOiA6Im1lbW9yeSIpCi0jZGVmaW5lIHNtcF9ybWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhfX1dFQUtfT1JERVJJTkdfTUIgOiA6IDoibWVtb3J5IikKLSNkZWZpbmUgc21wX3dtYigpCV9fYXNtX18gX192b2xhdGlsZV9fKF9fV0VBS19PUkRFUklOR19NQiA6IDogOiJtZW1vcnkiKQotCiAjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBcCiAJZG8geyB2YXIgPSB2YWx1ZTsgc21wX21iKCk7IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgc21wX2xsc2NfbWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhfX1dFQUtfTExTQ19NQiA6IDogOiJtZW1vcnkiKQotI2RlZmluZSBzbXBfbGxzY19ybWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhfX1dFQUtfTExTQ19NQiA6IDogOiJtZW1vcnkiKQotI2RlZmluZSBzbXBfbGxzY193bWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyhfX1dFQUtfTExTQ19NQiA6IDogOiJtZW1vcnkiKQorCisjaWZkZWYgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2xsc2MoKSBzbXBfd21iKCkKKy8qIENhdXNlIHByZXZpb3VzIHdyaXRlcyB0byBiZWNvbWUgdmlzaWJsZSBvbiBhbGwgQ1BVcyBhcyBzb29uIGFzIHBvc3NpYmxlICovCisjZGVmaW5lIG51ZGdlX3dyaXRlcygpIF9fYXNtX18gX192b2xhdGlsZV9fKCIuc2V0IHB1c2hcblx0IgkJXAorCQkJCQkgICAgIi5zZXQgYXJjaD1vY3Rlb25cblx0IglcCisJCQkJCSAgICAic3luY3dcblx0IgkJCVwKKwkJCQkJICAgICIuc2V0IHBvcCIgOiA6IDogIm1lbW9yeSIpCisjZWxzZQorI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9sbHNjKCkgc21wX2xsc2NfbWIoKQorI2RlZmluZSBudWRnZV93cml0ZXMoKSBtYigpCisjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX0JBUlJJRVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IDg0YTM4MzguLjkyNTVjZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTQyLDcgKzQyLDcgQEAKIC8qCiAgKiBjbGVhcl9iaXQoKSBkb2Vzbid0IHByb3ZpZGUgYW55IGJhcnJpZXIgZm9yIHRoZSBjb21waWxlci4KICAqLwotI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKQlzbXBfbGxzY19tYigpCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpCXNtcF9tYl9fYmVmb3JlX2xsc2MoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCXNtcF9sbHNjX21iKCkKIAogLyoKQEAgLTI1OCw3ICsyNTgsNyBAQAogCXVuc2lnbmVkIHNob3J0IGJpdCA9IG5yICYgU1pMT05HX01BU0s7CiAJdW5zaWduZWQgbG9uZyByZXM7CiAKLQlzbXBfbGxzY19tYigpOworCXNtcF9tYl9fYmVmb3JlX2xsc2MoKTsKIAogCWlmIChrZXJuZWxfdXNlc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgewogCQl1bnNpZ25lZCBsb25nICptID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG5yID4+IFNaTE9OR19MT0cpOwpAQCAtMzk1LDcgKzM5NSw3IEBACiAJdW5zaWduZWQgc2hvcnQgYml0ID0gbnIgJiBTWkxPTkdfTUFTSzsKIAl1bnNpZ25lZCBsb25nIHJlczsKIAotCXNtcF9sbHNjX21iKCk7CisJc21wX21iX19iZWZvcmVfbGxzYygpOwogCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCXVuc2lnbmVkIGxvbmcgKm0gPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gU1pMT05HX0xPRyk7CkBAIC00ODUsNyArNDg1LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBiaXQgPSBuciAmIFNaTE9OR19NQVNLOwogCXVuc2lnbmVkIGxvbmcgcmVzOwogCi0Jc21wX2xsc2NfbWIoKTsKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CiAKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJdW5zaWduZWQgbG9uZyAqbSA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChuciA+PiBTWkxPTkdfTE9HKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jbXB4Y2hnLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY21weGNoZy5oCmluZGV4IDgxNWE0MzguLmVkOWFhYWFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY21weGNoZy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jbXB4Y2hnLmgKQEAgLTcyLDE0ICs3MiwxNCBAQAogICovCiBleHRlcm4gdm9pZCBfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7CiAKLSNkZWZpbmUgX19jbXB4Y2hnKHB0ciwgb2xkLCBuZXcsIGJhcnJpZXIpCQkJCVwKKyNkZWZpbmUgX19jbXB4Y2hnKHB0ciwgb2xkLCBuZXcsIHByZV9iYXJyaWVyLCBwb3N0X2JhcnJpZXIpCQlcCiAoewkJCQkJCQkJCVwKIAlfX3R5cGVvZl9fKHB0cikgX19wdHIgPSAocHRyKTsJCQkJCVwKIAlfX3R5cGVvZl9fKCoocHRyKSkgX19vbGQgPSAob2xkKTsJCQkJXAogCV9fdHlwZW9mX18oKihwdHIpKSBfX25ldyA9IChuZXcpOwkJCQlcCiAJX190eXBlb2ZfXygqKHB0cikpIF9fcmVzID0gMDsJCQkJCVwKIAkJCQkJCQkJCVwKLQliYXJyaWVyOwkJCQkJCQlcCisJcHJlX2JhcnJpZXI7CQkJCQkJCVwKIAkJCQkJCQkJCVwKIAlzd2l0Y2ggKHNpemVvZigqKF9fcHRyKSkpIHsJCQkJCVwKIAljYXNlIDQ6CQkJCQkJCQlcCkBAIC05NiwxMyArOTYsMTMgQEAKIAkJYnJlYWs7CQkJCQkJCVwKIAl9CQkJCQkJCQlcCiAJCQkJCQkJCQlcCi0JYmFycmllcjsJCQkJCQkJXAorCXBvc3RfYmFycmllcjsJCQkJCQkJXAogCQkJCQkJCQkJXAogCV9fcmVzOwkJCQkJCQkJXAogfSkKIAotI2RlZmluZSBjbXB4Y2hnKHB0ciwgb2xkLCBuZXcpCQlfX2NtcHhjaGcocHRyLCBvbGQsIG5ldywgc21wX2xsc2NfbWIoKSkKLSNkZWZpbmUgY21weGNoZ19sb2NhbChwdHIsIG9sZCwgbmV3KQlfX2NtcHhjaGcocHRyLCBvbGQsIG5ldywgKQorI2RlZmluZSBjbXB4Y2hnKHB0ciwgb2xkLCBuZXcpCQlfX2NtcHhjaGcocHRyLCBvbGQsIG5ldywgc21wX21iX19iZWZvcmVfbGxzYygpLCBzbXBfbGxzY19tYigpKQorI2RlZmluZSBjbXB4Y2hnX2xvY2FsKHB0ciwgb2xkLCBuZXcpCV9fY21weGNoZyhwdHIsIG9sZCwgbmV3LCAsICkKIAogI2RlZmluZSBjbXB4Y2hnNjQocHRyLCBvLCBuKQkJCQkJCVwKICAgKHsJCQkJCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LWZlYXR1cmVzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LWZlYXR1cmVzLmgKaW5kZXggMjcyYzVlZi4uYWM3M2NlZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS1mZWF0dXJlcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUtZmVhdHVyZXMuaApAQCAtOTUsNiArOTUsOSBAQAogI2lmbmRlZiBjcHVfaGFzX3NtYXJ0bWlwcwogI2RlZmluZSBjcHVfaGFzX3NtYXJ0bWlwcyAgICAgIChjcHVfZGF0YVswXS5hc2VzICYgTUlQU19BU0VfU01BUlRNSVBTKQogI2VuZGlmCisjaWZuZGVmIGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpCisjZGVmaW5lIGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpIDAKKyNlbmRpZgogI2lmbmRlZiBjcHVfaGFzX3Z0YWdfaWNhY2hlCiAjZGVmaW5lIGNwdV9oYXNfdnRhZ19pY2FjaGUJKGNwdV9kYXRhWzBdLmljYWNoZS5mbGFncyAmIE1JUFNfQ0FDSEVfVlRBRykKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oCmluZGV4IGNmMzczYTkuLmE1YWNkYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmgKQEAgLTIyNCw3ICsyMjQsNyBAQAogCSAqIE1JUFM2NCBjbGFzcyBwcm9jZXNzb3JzCiAJICovCiAJQ1BVXzVLQywgQ1BVXzIwS0MsIENQVV8yNUtGLCBDUFVfU0IxLCBDUFVfU0IxQSwgQ1BVX0xPT05HU09OMiwKLQlDUFVfQ0FWSVVNX09DVEVPTiwKKwlDUFVfQ0FWSVVNX09DVEVPTiwgQ1BVX0NBVklVTV9PQ1RFT05fUExVUywKIAogCUNQVV9MQVNUCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2N1cnJlbnQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jdXJyZW50LmgKaW5kZXggNTU5ZGI2Ni4uNGM1MTQwMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2N1cnJlbnQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3VycmVudC5oCkBAIC0xLDIzICsxIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAyIFJhbGYgQmFlY2hsZQotICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSAqLwotI2lmbmRlZiBfQVNNX0NVUlJFTlRfSAotI2RlZmluZSBfQVNNX0NVUlJFTlRfSAotCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KLQotc3RydWN0IHRhc2tfc3RydWN0OwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqIGdldF9jdXJyZW50KHZvaWQpCi17Ci0JcmV0dXJuIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dGFzazsKLX0KLQotI2RlZmluZSBjdXJyZW50CQlnZXRfY3VycmVudCgpCi0KLSNlbmRpZiAvKiBfQVNNX0NVUlJFTlRfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2N1cnJlbnQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kZWMva24wMS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RlYy9rbjAxLmgKaW5kZXggMjhmYTcxNy4uODhkOWZmZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RlYy9rbjAxLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RlYy9rbjAxLmgKQEAgLTgwLDcgKzgwLDYgQEAKIHN0cnVjdCBwdF9yZWdzOwogCiBleHRlcm4gdTE2IGNhY2hlZF9rbjAxX2NzcjsKLWV4dGVybiBzcGlubG9ja190IGtuMDFfbG9jazsKIAogZXh0ZXJuIHZvaWQgZGVjX2tuMDFfYmVfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgZGVjX2tuMDFfYmVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGlzX2ZpeHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kZXZpY2UuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kZXZpY2UuaAppbmRleCBkOGY5ODcyLi4wNjc0NmM1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZGV2aWNlLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RldmljZS5oCkBAIC00LDQgKzQsMyBAQAogICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2MgogICovCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZGV2aWNlLmg+Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA3YTZhMzVkLi5lNTNkN2JlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0zMzQsMTQgKzMzNCwxNCBAQAogCiAjZGVmaW5lIEVMRl9IV0NBUCAgICAgICAoMCkKIAotLyogVGhpcyB5aWVsZHMgYSBzdHJpbmcgdGhhdCBsZC5zbyB3aWxsIHVzZSB0byBsb2FkIGltcGxlbWVudGF0aW9uCi0gICBzcGVjaWZpYyBsaWJyYXJpZXMgZm9yIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgbW9yZSBzcGVjaWZpYyBpbgotICAgaW50ZW50IHRoYW4gcG9raW5nIGF0IHVuYW1lIG9yIC9wcm9jL2NwdWluZm8uCisvKgorICogVGhpcyB5aWVsZHMgYSBzdHJpbmcgdGhhdCBsZC5zbyB3aWxsIHVzZSB0byBsb2FkIGltcGxlbWVudGF0aW9uCisgKiBzcGVjaWZpYyBsaWJyYXJpZXMgZm9yIG9wdGltaXphdGlvbi4gIFRoaXMgaXMgbW9yZSBzcGVjaWZpYyBpbgorICogaW50ZW50IHRoYW4gcG9raW5nIGF0IHVuYW1lIG9yIC9wcm9jL2NwdWluZm8uCisgKi8KIAotICAgRm9yIHRoZSBtb21lbnQsIHdlIGhhdmUgb25seSBvcHRpbWl6YXRpb25zIGZvciB0aGUgSW50ZWwgZ2VuZXJhdGlvbnMsCi0gICBidXQgdGhhdCBjb3VsZCBjaGFuZ2UuLi4gKi8KLQotI2RlZmluZSBFTEZfUExBVEZPUk0gIChOVUxMKQorI2RlZmluZSBFTEZfUExBVEZPUk0gIF9fZWxmX3BsYXRmb3JtCitleHRlcm4gY29uc3QgY2hhciAqX19lbGZfcGxhdGZvcm07CiAKIC8qCiAgKiBTZWUgY29tbWVudHMgaW4gYXNtLWFscGhhL2VsZi5oLCB0aGlzIGlzIHRoZSBzYW1lIHRoaW5nCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnRyYWNlLmgKaW5kZXggMzk4NmNkOC4uY2UzNWM5YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtNCw3ICs0LDcgQEAKICAqIG1vcmUgZGV0YWlscy4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRFNMYWIsIExhbnpob3UgVW5pdmVyc2l0eSwgQ2hpbmEKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICovCiAKICNpZm5kZWYgX0FTTV9NSVBTX0ZUUkFDRV9ICmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaTgyNTkuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pODI1OS5oCmluZGV4IDg1NzJhMmQuLmM3ZTI3ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pODI1OS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pODI1OS5oCkBAIC0zNSw3ICszNSw3IEBACiAjZGVmaW5lIFNMQVZFX0lDVzRfREVGQVVMVAkweDAxCiAjZGVmaW5lIFBJQ19JQ1c0X0FFT0kJCTIKIAotZXh0ZXJuIHNwaW5sb2NrX3QgaTgyNTlBX2xvY2s7CitleHRlcm4gcmF3X3NwaW5sb2NrX3QgaTgyNTlBX2xvY2s7CiAKIGV4dGVybiBpbnQgaTgyNTlBX2lycV9wZW5kaW5nKHVuc2lnbmVkIGludCBpcnEpOwogZXh0ZXJuIHZvaWQgbWFrZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7CkBAIC01MSw3ICs1MSw3IEBACiB7CiAJaW50IGlycTsKIAotCXNwaW5fbG9jaygmaTgyNTlBX2xvY2spOworCXJhd19zcGluX2xvY2soJmk4MjU5QV9sb2NrKTsKIAogCS8qIFBlcmZvcm0gYW4gaW50ZXJydXB0IGFja25vd2xlZGdlIGN5Y2xlIG9uIGNvbnRyb2xsZXIgMS4gKi8KIAlvdXRiKDB4MEMsIFBJQ19NQVNURVJfQ01EKTsJCS8qIHByZXBhcmUgZm9yIHBvbGwgKi8KQEAgLTc4LDcgKzc4LDcgQEAKIAkJCWlycSA9IC0xOwogCX0KIAotCXNwaW5fdW5sb2NrKCZpODI1OUFfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZpODI1OUFfbG9jayk7CiAKIAlyZXR1cm4gbGlrZWx5KGlycSA+PSAwKSA/IGlycSArIEk4MjU5QV9JUlFfQkFTRSA6IGlycTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggNDM2ODc4ZS4uYzk4YmY1MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTQ0Nyw2ICs0NDcsMjQgQEAKICNkZWZpbmUgcmVhZGxfcmVsYXhlZAkJCXJlYWRsCiAjZGVmaW5lIHJlYWRxX3JlbGF4ZWQJCQlyZWFkcQogCisjZGVmaW5lIHJlYWRiX2JlKGFkZHIpCQkJCQkJCVwKKwlfX3Jhd19yZWFkYigoX19mb3JjZSB1bnNpZ25lZCAqKShhZGRyKSkKKyNkZWZpbmUgcmVhZHdfYmUoYWRkcikJCQkJCQkJXAorCWJlMTZfdG9fY3B1KF9fcmF3X3JlYWR3KChfX2ZvcmNlIHVuc2lnbmVkICopKGFkZHIpKSkKKyNkZWZpbmUgcmVhZGxfYmUoYWRkcikJCQkJCQkJXAorCWJlMzJfdG9fY3B1KF9fcmF3X3JlYWRsKChfX2ZvcmNlIHVuc2lnbmVkICopKGFkZHIpKSkKKyNkZWZpbmUgcmVhZHFfYmUoYWRkcikJCQkJCQkJXAorCWJlNjRfdG9fY3B1KF9fcmF3X3JlYWRxKChfX2ZvcmNlIHVuc2lnbmVkICopKGFkZHIpKSkKKworI2RlZmluZSB3cml0ZWJfYmUodmFsLCBhZGRyKQkJCQkJCVwKKwlfX3Jhd193cml0ZWIoKHZhbCksIChfX2ZvcmNlIHVuc2lnbmVkICopKGFkZHIpKQorI2RlZmluZSB3cml0ZXdfYmUodmFsLCBhZGRyKQkJCQkJCVwKKwlfX3Jhd193cml0ZXcoY3B1X3RvX2JlMTYoKHZhbCkpLCAoX19mb3JjZSB1bnNpZ25lZCAqKShhZGRyKSkKKyNkZWZpbmUgd3JpdGVsX2JlKHZhbCwgYWRkcikJCQkJCQlcCisJX19yYXdfd3JpdGVsKGNwdV90b19iZTMyKCh2YWwpKSwgKF9fZm9yY2UgdW5zaWduZWQgKikoYWRkcikpCisjZGVmaW5lIHdyaXRlcV9iZSh2YWwsIGFkZHIpCQkJCQkJXAorCV9fcmF3X3dyaXRlcShjcHVfdG9fYmU2NCgodmFsKSksIChfX2ZvcmNlIHVuc2lnbmVkICopKGFkZHIpKQorCiAvKgogICogU29tZSBjb2RlIHRlc3RzIGZvciB0aGVzZSBzeW1ib2xzCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9hcjcuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9hcjcuaAppbmRleCAyMWNiYmM3Li5mMWNmMzg5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvYXI3LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2FyNy5oCkBAIC0xMDUsMjYgKzEwNSw5IEBACiAJcmV0dXJuIChyZWFkbCgodm9pZCAqKUtTRUcxQUREUihBUjdfUkVHU19HUElPICsgMHgxNCkpID4+IDE2KSAmIDB4ZmY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFyN19jcHVfZnJlcSh2b2lkKQotewotCXJldHVybiBhcjdfY3B1X2Nsb2NrOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhcjdfYnVzX2ZyZXEodm9pZCkKLXsKLQlyZXR1cm4gYXI3X2J1c19jbG9jazsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXI3X3ZidXNfZnJlcSh2b2lkKQotewotCXJldHVybiBhcjdfYnVzX2Nsb2NrIC8gMjsKLX0KLSNkZWZpbmUgYXI3X2NwbWFjX2ZyZXEgYXI3X3ZidXNfZnJlcQotCi1zdGF0aWMgaW5saW5lIGludCBhcjdfZHNwX2ZyZXEodm9pZCkKLXsKLQlyZXR1cm4gYXI3X2RzcF9jbG9jazsKLX0KK3N0cnVjdCBjbGsgeworCXVuc2lnbmVkIGludAlyYXRlOworfTsKIAogc3RhdGljIGlubGluZSBpbnQgYXI3X2hhc19oaWdoX2NwbWFjKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvZ3Bpby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2dwaW8uaAppbmRleCBjYmU5YzRmLi43M2Y5YjE2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvZ3Bpby5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9ncGlvLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEZsb3JpYW4gRmFpbmVsbGkgPGZsb3JpYW5Ab3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjIsODggKzIyLDE4IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtYXI3L2FyNy5oPgogCiAjZGVmaW5lIEFSN19HUElPX01BWCAzMgorI2RlZmluZSBOUl9CVUlMVElOX0dQSU8gQVI3X0dQSU9fTUFYCiAKLWV4dGVybiBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKTsKLWV4dGVybiB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKTsKKyNkZWZpbmUgZ3Bpb190b19pcnEoZ3BpbykJTlVMTAogCi0vKiBDb21tb24gR1BJTyBsYXllciAqLwotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKLXsKLQl2b2lkIF9faW9tZW0gKmdwaW9faW4gPQotCQkodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFSN19SRUdTX0dQSU8gKyBBUjdfR1BJT19JTlBVVCk7CisjZGVmaW5lIGdwaW9fZ2V0X3ZhbHVlIF9fZ3Bpb19nZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19zZXRfdmFsdWUgX19ncGlvX3NldF92YWx1ZQogCi0JcmV0dXJuIHJlYWRsKGdwaW9faW4pICYgKDEgPDwgZ3Bpbyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCi17Ci0Jdm9pZCBfX2lvbWVtICpncGlvX291dCA9Ci0JCSh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVI3X1JFR1NfR1BJTyArIEFSN19HUElPX09VVFBVVCk7Ci0JdW5zaWduZWQgdG1wOwotCi0JdG1wID0gcmVhZGwoZ3Bpb19vdXQpICYgfigxIDw8IGdwaW8pOwotCWlmICh2YWx1ZSkKLQkJdG1wIHw9IDEgPDwgZ3BpbzsKLQl3cml0ZWwodG1wLCBncGlvX291dCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCi17Ci0Jdm9pZCBfX2lvbWVtICpncGlvX2RpciA9Ci0JCSh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVI3X1JFR1NfR1BJTyArIEFSN19HUElPX0RJUik7Ci0KLQlpZiAoZ3BpbyA+PSBBUjdfR1BJT19NQVgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jd3JpdGVsKHJlYWRsKGdwaW9fZGlyKSB8ICgxIDw8IGdwaW8pLCBncGlvX2Rpcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKLXsKLQl2b2lkIF9faW9tZW0gKmdwaW9fZGlyID0KLQkJKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBUjdfUkVHU19HUElPICsgQVI3X0dQSU9fRElSKTsKLQotCWlmIChncGlvID49IEFSN19HUElPX01BWCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlncGlvX3NldF92YWx1ZShncGlvLCB2YWx1ZSk7Ci0Jd3JpdGVsKHJlYWRsKGdwaW9fZGlyKSAmIH4oMSA8PCBncGlvKSwgZ3Bpb19kaXIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSkKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KKyNkZWZpbmUgZ3Bpb19jYW5zbGVlcCBfX2dwaW9fY2Fuc2xlZXAKIAogLyogQm9hcmQgc3BlY2lmaWMgR1BJTyBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGFyN19ncGlvX2VuYWJsZSh1bnNpZ25lZCBncGlvKQotewotCXZvaWQgX19pb21lbSAqZ3Bpb19lbiA9Ci0JCSh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVI3X1JFR1NfR1BJTyArIEFSN19HUElPX0VOQUJMRSk7Ci0KLQl3cml0ZWwocmVhZGwoZ3Bpb19lbikgfCAoMSA8PCBncGlvKSwgZ3Bpb19lbik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXI3X2dwaW9fZGlzYWJsZSh1bnNpZ25lZCBncGlvKQotewotCXZvaWQgX19pb21lbSAqZ3Bpb19lbiA9Ci0JCSh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVI3X1JFR1NfR1BJTyArIEFSN19HUElPX0VOQUJMRSk7Ci0KLQl3cml0ZWwocmVhZGwoZ3Bpb19lbikgJiB+KDEgPDwgZ3BpbyksIGdwaW9fZW4pOwotCi0JcmV0dXJuIDA7Ci19CitpbnQgYXI3X2dwaW9fZW5hYmxlKHVuc2lnbmVkIGdwaW8pOworaW50IGFyN19ncGlvX2Rpc2FibGUodW5zaWduZWQgZ3Bpbyk7CiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaAppbmRleCA4NTRlOTVmLi5hZTA3NDIzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxMDAwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oCkBAIC0xMzAsNiArMTMwLDU2IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgQUxDSEVNWV9DUFVfVU5LTk9XTgktMQorI2RlZmluZSBBTENIRU1ZX0NQVV9BVTEwMDAJMAorI2RlZmluZSBBTENIRU1ZX0NQVV9BVTE1MDAJMQorI2RlZmluZSBBTENIRU1ZX0NQVV9BVTExMDAJMgorI2RlZmluZSBBTENIRU1ZX0NQVV9BVTE1NTAJMworI2RlZmluZSBBTENIRU1ZX0NQVV9BVTEyMDAJNAorCitzdGF0aWMgaW5saW5lIGludCBhbGNoZW15X2dldF9jcHV0eXBlKHZvaWQpCit7CisJc3dpdGNoIChyZWFkX2MwX3ByaWQoKSAmIDB4ZmZmZjAwMDApIHsKKwljYXNlIDB4MDAwMzAwMDA6CisJCXJldHVybiBBTENIRU1ZX0NQVV9BVTEwMDA7CisJCWJyZWFrOworCWNhc2UgMHgwMTAzMDAwMDoKKwkJcmV0dXJuIEFMQ0hFTVlfQ1BVX0FVMTUwMDsKKwkJYnJlYWs7CisJY2FzZSAweDAyMDMwMDAwOgorCQlyZXR1cm4gQUxDSEVNWV9DUFVfQVUxMTAwOworCQlicmVhazsKKwljYXNlIDB4MDMwMzAwMDA6CisJCXJldHVybiBBTENIRU1ZX0NQVV9BVTE1NTA7CisJCWJyZWFrOworCWNhc2UgMHgwNDAzMDAwMDoKKwljYXNlIDB4MDUwMzAwMDA6CisJCXJldHVybiBBTENIRU1ZX0NQVV9BVTEyMDA7CisJCWJyZWFrOworCX0KKworCXJldHVybiBBTENIRU1ZX0NQVV9VTktOT1dOOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWxjaGVteV91YXJ0X3B1dGNoYXIodTMyIHVhcnRfcGh5cywgdTggYykKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKHVhcnRfcGh5cyk7CisJaW50IHRpbWVvdXQsIGk7CisKKwkvKiBjaGVjayBMU1IgVFhfRU1QVFkgYml0ICovCisJdGltZW91dCA9IDB4ZmZmZmZmOworCWRvIHsKKwkJaWYgKF9fcmF3X3JlYWRsKGJhc2UgKyAweDFjKSAmIDB4MjApCisJCQlicmVhazsKKwkJLyogc2xvdyBkb3duICovCisJCWZvciAoaSA9IDEwMDAwOyBpOyBpLS0pCisJCQlhc20gdm9sYXRpbGUgKCJub3AiKTsKKwl9IHdoaWxlICgtLXRpbWVvdXQpOworCisJX19yYXdfd3JpdGVsKGMsIGJhc2UgKyAweDA0KTsJLyogdHggKi8KKwl3bWIoKTsKK30KKwogLyogYXJjaC9taXBzL2F1MTAwMC9jb21tb24vY2xvY2tzLmMgKi8KIGV4dGVybiB2b2lkIHNldF9hdTF4MDBfc3BlZWQodW5zaWduZWQgaW50IG5ld19mcmVxKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X2F1MXgwMF9zcGVlZCh2b2lkKTsKQEAgLTE0MywyMCArMTkzLDMzMiBAQAogdm9pZCBzYXZlX2F1MXh4eF9pbnRjdGwodm9pZCk7CiB2b2lkIHJlc3RvcmVfYXUxeHh4X2ludGN0bCh2b2lkKTsKIAotLyoKLSAqIEV2ZXJ5IGJvYXJkIGRlc2NyaWJlcyBpdHMgSVJRIG1hcHBpbmcgd2l0aCB0aGlzIHRhYmxlLgotICovCi1zdHJ1Y3QgYXUxeHh4X2lycW1hcCB7Ci0JaW50CWltX2lycTsKLQlpbnQJaW1fdHlwZTsKLQlpbnQJaW1fcmVxdWVzdDsKKworLyogU09DIEludGVycnVwdCBudW1iZXJzICovCisKKyNkZWZpbmUgQVUxMDAwX0lOVEMwX0lOVF9CQVNFCShNSVBTX0NQVV9JUlFfQkFTRSArIDgpCisjZGVmaW5lIEFVMTAwMF9JTlRDMF9JTlRfTEFTVAkoQVUxMDAwX0lOVEMwX0lOVF9CQVNFICsgMzEpCisjZGVmaW5lIEFVMTAwMF9JTlRDMV9JTlRfQkFTRQkoQVUxMDAwX0lOVEMwX0lOVF9MQVNUICsgMSkKKyNkZWZpbmUgQVUxMDAwX0lOVEMxX0lOVF9MQVNUCShBVTEwMDBfSU5UQzFfSU5UX0JBU0UgKyAzMSkKKyNkZWZpbmUgQVUxMDAwX01BWF9JTlRSIAlBVTEwMDBfSU5UQzFfSU5UX0xBU1QKKworZW51bSBzb2NfYXUxMDAwX2ludHMgeworCUFVMTAwMF9GSVJTVF9JTlQJPSBBVTEwMDBfSU5UQzBfSU5UX0JBU0UsCisJQVUxMDAwX1VBUlQwX0lOVAk9IEFVMTAwMF9GSVJTVF9JTlQsCisJQVUxMDAwX1VBUlQxX0lOVCwKKwlBVTEwMDBfVUFSVDJfSU5ULAorCUFVMTAwMF9VQVJUM19JTlQsCisJQVUxMDAwX1NTSTBfSU5ULAorCUFVMTAwMF9TU0kxX0lOVCwKKwlBVTEwMDBfRE1BX0lOVF9CQVNFLAorCisJQVUxMDAwX1RPWV9JTlQJCT0gQVUxMDAwX0ZJUlNUX0lOVCArIDE0LAorCUFVMTAwMF9UT1lfTUFUQ0gwX0lOVCwKKwlBVTEwMDBfVE9ZX01BVENIMV9JTlQsCisJQVUxMDAwX1RPWV9NQVRDSDJfSU5ULAorCUFVMTAwMF9SVENfSU5ULAorCUFVMTAwMF9SVENfTUFUQ0gwX0lOVCwKKwlBVTEwMDBfUlRDX01BVENIMV9JTlQsCisJQVUxMDAwX1JUQ19NQVRDSDJfSU5ULAorCUFVMTAwMF9JUkRBX1RYX0lOVCwKKwlBVTEwMDBfSVJEQV9SWF9JTlQsCisJQVUxMDAwX1VTQl9ERVZfUkVRX0lOVCwKKwlBVTEwMDBfVVNCX0RFVl9TVVNfSU5ULAorCUFVMTAwMF9VU0JfSE9TVF9JTlQsCisJQVUxMDAwX0FDU1lOQ19JTlQsCisJQVUxMDAwX01BQzBfRE1BX0lOVCwKKwlBVTEwMDBfTUFDMV9ETUFfSU5ULAorCUFVMTAwMF9JMlNfVU9fSU5ULAorCUFVMTAwMF9BQzk3Q19JTlQsCisJQVUxMDAwX0dQSU8wX0lOVCwKKwlBVTEwMDBfR1BJTzFfSU5ULAorCUFVMTAwMF9HUElPMl9JTlQsCisJQVUxMDAwX0dQSU8zX0lOVCwKKwlBVTEwMDBfR1BJTzRfSU5ULAorCUFVMTAwMF9HUElPNV9JTlQsCisJQVUxMDAwX0dQSU82X0lOVCwKKwlBVTEwMDBfR1BJTzdfSU5ULAorCUFVMTAwMF9HUElPOF9JTlQsCisJQVUxMDAwX0dQSU85X0lOVCwKKwlBVTEwMDBfR1BJTzEwX0lOVCwKKwlBVTEwMDBfR1BJTzExX0lOVCwKKwlBVTEwMDBfR1BJTzEyX0lOVCwKKwlBVTEwMDBfR1BJTzEzX0lOVCwKKwlBVTEwMDBfR1BJTzE0X0lOVCwKKwlBVTEwMDBfR1BJTzE1X0lOVCwKKwlBVTEwMDBfR1BJTzE2X0lOVCwKKwlBVTEwMDBfR1BJTzE3X0lOVCwKKwlBVTEwMDBfR1BJTzE4X0lOVCwKKwlBVTEwMDBfR1BJTzE5X0lOVCwKKwlBVTEwMDBfR1BJTzIwX0lOVCwKKwlBVTEwMDBfR1BJTzIxX0lOVCwKKwlBVTEwMDBfR1BJTzIyX0lOVCwKKwlBVTEwMDBfR1BJTzIzX0lOVCwKKwlBVTEwMDBfR1BJTzI0X0lOVCwKKwlBVTEwMDBfR1BJTzI1X0lOVCwKKwlBVTEwMDBfR1BJTzI2X0lOVCwKKwlBVTEwMDBfR1BJTzI3X0lOVCwKKwlBVTEwMDBfR1BJTzI4X0lOVCwKKwlBVTEwMDBfR1BJTzI5X0lOVCwKKwlBVTEwMDBfR1BJTzMwX0lOVCwKKwlBVTEwMDBfR1BJTzMxX0lOVCwKIH07CiAKLS8qIGNvcmUgY2FsbHMgdGhpcyBmdW5jdGlvbiB0byBsZXQgYm9hcmRzIGluaXRpYWxpemUgb3RoZXIgSVJRIHNvdXJjZXMgKi8KLXZvaWQgYm9hcmRfaW5pdF9pcnEodm9pZCk7CitlbnVtIHNvY19hdTExMDBfaW50cyB7CisJQVUxMTAwX0ZJUlNUX0lOVAk9IEFVMTAwMF9JTlRDMF9JTlRfQkFTRSwKKwlBVTExMDBfVUFSVDBfSU5UCT0gQVUxMTAwX0ZJUlNUX0lOVCwKKwlBVTExMDBfVUFSVDFfSU5ULAorCUFVMTEwMF9TRF9JTlQsCisJQVUxMTAwX1VBUlQzX0lOVCwKKwlBVTExMDBfU1NJMF9JTlQsCisJQVUxMTAwX1NTSTFfSU5ULAorCUFVMTEwMF9ETUFfSU5UX0JBU0UsCiAKLS8qIGJvYXJkcyBjYWxsIHRoaXMgdG8gcmVnaXN0ZXIgYWRkaXRpb25hbCAoR1BJTykgaW50ZXJydXB0cyAqLwotdm9pZCBhdTF4eHhfc2V0dXBfaXJxbWFwKHN0cnVjdCBhdTF4eHhfaXJxbWFwICptYXAsIGludCBjb3VudCk7CisJQVUxMTAwX1RPWV9JTlQJCT0gQVUxMTAwX0ZJUlNUX0lOVCArIDE0LAorCUFVMTEwMF9UT1lfTUFUQ0gwX0lOVCwKKwlBVTExMDBfVE9ZX01BVENIMV9JTlQsCisJQVUxMTAwX1RPWV9NQVRDSDJfSU5ULAorCUFVMTEwMF9SVENfSU5ULAorCUFVMTEwMF9SVENfTUFUQ0gwX0lOVCwKKwlBVTExMDBfUlRDX01BVENIMV9JTlQsCisJQVUxMTAwX1JUQ19NQVRDSDJfSU5ULAorCUFVMTEwMF9JUkRBX1RYX0lOVCwKKwlBVTExMDBfSVJEQV9SWF9JTlQsCisJQVUxMTAwX1VTQl9ERVZfUkVRX0lOVCwKKwlBVTExMDBfVVNCX0RFVl9TVVNfSU5ULAorCUFVMTEwMF9VU0JfSE9TVF9JTlQsCisJQVUxMTAwX0FDU1lOQ19JTlQsCisJQVUxMTAwX01BQzBfRE1BX0lOVCwKKwlBVTExMDBfR1BJTzIwOF8yMTVfSU5ULAorCUFVMTEwMF9MQ0RfSU5ULAorCUFVMTEwMF9BQzk3Q19JTlQsCisJQVUxMTAwX0dQSU8wX0lOVCwKKwlBVTExMDBfR1BJTzFfSU5ULAorCUFVMTEwMF9HUElPMl9JTlQsCisJQVUxMTAwX0dQSU8zX0lOVCwKKwlBVTExMDBfR1BJTzRfSU5ULAorCUFVMTEwMF9HUElPNV9JTlQsCisJQVUxMTAwX0dQSU82X0lOVCwKKwlBVTExMDBfR1BJTzdfSU5ULAorCUFVMTEwMF9HUElPOF9JTlQsCisJQVUxMTAwX0dQSU85X0lOVCwKKwlBVTExMDBfR1BJTzEwX0lOVCwKKwlBVTExMDBfR1BJTzExX0lOVCwKKwlBVTExMDBfR1BJTzEyX0lOVCwKKwlBVTExMDBfR1BJTzEzX0lOVCwKKwlBVTExMDBfR1BJTzE0X0lOVCwKKwlBVTExMDBfR1BJTzE1X0lOVCwKKwlBVTExMDBfR1BJTzE2X0lOVCwKKwlBVTExMDBfR1BJTzE3X0lOVCwKKwlBVTExMDBfR1BJTzE4X0lOVCwKKwlBVTExMDBfR1BJTzE5X0lOVCwKKwlBVTExMDBfR1BJTzIwX0lOVCwKKwlBVTExMDBfR1BJTzIxX0lOVCwKKwlBVTExMDBfR1BJTzIyX0lOVCwKKwlBVTExMDBfR1BJTzIzX0lOVCwKKwlBVTExMDBfR1BJTzI0X0lOVCwKKwlBVTExMDBfR1BJTzI1X0lOVCwKKwlBVTExMDBfR1BJTzI2X0lOVCwKKwlBVTExMDBfR1BJTzI3X0lOVCwKKwlBVTExMDBfR1BJTzI4X0lOVCwKKwlBVTExMDBfR1BJTzI5X0lOVCwKKwlBVTExMDBfR1BJTzMwX0lOVCwKKwlBVTExMDBfR1BJTzMxX0lOVCwKK307CisKK2VudW0gc29jX2F1MTUwMF9pbnRzIHsKKwlBVTE1MDBfRklSU1RfSU5UCT0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFLAorCUFVMTUwMF9VQVJUMF9JTlQJPSBBVTE1MDBfRklSU1RfSU5ULAorCUFVMTUwMF9QQ0lfSU5UQSwKKwlBVTE1MDBfUENJX0lOVEIsCisJQVUxNTAwX1VBUlQzX0lOVCwKKwlBVTE1MDBfUENJX0lOVEMsCisJQVUxNTAwX1BDSV9JTlRELAorCUFVMTUwMF9ETUFfSU5UX0JBU0UsCisKKwlBVTE1MDBfVE9ZX0lOVAkJPSBBVTE1MDBfRklSU1RfSU5UICsgMTQsCisJQVUxNTAwX1RPWV9NQVRDSDBfSU5ULAorCUFVMTUwMF9UT1lfTUFUQ0gxX0lOVCwKKwlBVTE1MDBfVE9ZX01BVENIMl9JTlQsCisJQVUxNTAwX1JUQ19JTlQsCisJQVUxNTAwX1JUQ19NQVRDSDBfSU5ULAorCUFVMTUwMF9SVENfTUFUQ0gxX0lOVCwKKwlBVTE1MDBfUlRDX01BVENIMl9JTlQsCisJQVUxNTAwX1BDSV9FUlJfSU5ULAorCUFVMTUwMF9SRVNFUlZFRF9JTlQsCisJQVUxNTAwX1VTQl9ERVZfUkVRX0lOVCwKKwlBVTE1MDBfVVNCX0RFVl9TVVNfSU5ULAorCUFVMTUwMF9VU0JfSE9TVF9JTlQsCisJQVUxNTAwX0FDU1lOQ19JTlQsCisJQVUxNTAwX01BQzBfRE1BX0lOVCwKKwlBVTE1MDBfTUFDMV9ETUFfSU5ULAorCUFVMTUwMF9BQzk3Q19JTlQJPSBBVTE1MDBfRklSU1RfSU5UICsgMzEsCisJQVUxNTAwX0dQSU8wX0lOVCwKKwlBVTE1MDBfR1BJTzFfSU5ULAorCUFVMTUwMF9HUElPMl9JTlQsCisJQVUxNTAwX0dQSU8zX0lOVCwKKwlBVTE1MDBfR1BJTzRfSU5ULAorCUFVMTUwMF9HUElPNV9JTlQsCisJQVUxNTAwX0dQSU82X0lOVCwKKwlBVTE1MDBfR1BJTzdfSU5ULAorCUFVMTUwMF9HUElPOF9JTlQsCisJQVUxNTAwX0dQSU85X0lOVCwKKwlBVTE1MDBfR1BJTzEwX0lOVCwKKwlBVTE1MDBfR1BJTzExX0lOVCwKKwlBVTE1MDBfR1BJTzEyX0lOVCwKKwlBVTE1MDBfR1BJTzEzX0lOVCwKKwlBVTE1MDBfR1BJTzE0X0lOVCwKKwlBVTE1MDBfR1BJTzE1X0lOVCwKKwlBVTE1MDBfR1BJTzIwMF9JTlQsCisJQVUxNTAwX0dQSU8yMDFfSU5ULAorCUFVMTUwMF9HUElPMjAyX0lOVCwKKwlBVTE1MDBfR1BJTzIwM19JTlQsCisJQVUxNTAwX0dQSU8yMF9JTlQsCisJQVUxNTAwX0dQSU8yMDRfSU5ULAorCUFVMTUwMF9HUElPMjA1X0lOVCwKKwlBVTE1MDBfR1BJTzIzX0lOVCwKKwlBVTE1MDBfR1BJTzI0X0lOVCwKKwlBVTE1MDBfR1BJTzI1X0lOVCwKKwlBVTE1MDBfR1BJTzI2X0lOVCwKKwlBVTE1MDBfR1BJTzI3X0lOVCwKKwlBVTE1MDBfR1BJTzI4X0lOVCwKKwlBVTE1MDBfR1BJTzIwNl9JTlQsCisJQVUxNTAwX0dQSU8yMDdfSU5ULAorCUFVMTUwMF9HUElPMjA4XzIxNV9JTlQsCit9OworCitlbnVtIHNvY19hdTE1NTBfaW50cyB7CisJQVUxNTUwX0ZJUlNUX0lOVAk9IEFVMTAwMF9JTlRDMF9JTlRfQkFTRSwKKwlBVTE1NTBfVUFSVDBfSU5UCT0gQVUxNTUwX0ZJUlNUX0lOVCwKKwlBVTE1NTBfUENJX0lOVEEsCisJQVUxNTUwX1BDSV9JTlRCLAorCUFVMTU1MF9ERE1BX0lOVCwKKwlBVTE1NTBfQ1JZUFRPX0lOVCwKKwlBVTE1NTBfUENJX0lOVEMsCisJQVUxNTUwX1BDSV9JTlRELAorCUFVMTU1MF9QQ0lfUlNUX0lOVCwKKwlBVTE1NTBfVUFSVDFfSU5ULAorCUFVMTU1MF9VQVJUM19JTlQsCisJQVUxNTUwX1BTQzBfSU5ULAorCUFVMTU1MF9QU0MxX0lOVCwKKwlBVTE1NTBfUFNDMl9JTlQsCisJQVUxNTUwX1BTQzNfSU5ULAorCUFVMTU1MF9UT1lfSU5ULAorCUFVMTU1MF9UT1lfTUFUQ0gwX0lOVCwKKwlBVTE1NTBfVE9ZX01BVENIMV9JTlQsCisJQVUxNTUwX1RPWV9NQVRDSDJfSU5ULAorCUFVMTU1MF9SVENfSU5ULAorCUFVMTU1MF9SVENfTUFUQ0gwX0lOVCwKKwlBVTE1NTBfUlRDX01BVENIMV9JTlQsCisJQVUxNTUwX1JUQ19NQVRDSDJfSU5ULAorCisJQVUxNTUwX05BTkRfSU5UCQk9IEFVMTU1MF9GSVJTVF9JTlQgKyAyMywKKwlBVTE1NTBfVVNCX0RFVl9SRVFfSU5ULAorCUFVMTU1MF9VU0JfREVWX1NVU19JTlQsCisJQVUxNTUwX1VTQl9IT1NUX0lOVCwKKwlBVTE1NTBfTUFDMF9ETUFfSU5ULAorCUFVMTU1MF9NQUMxX0RNQV9JTlQsCisJQVUxNTUwX0dQSU8wX0lOVAk9IEFVMTU1MF9GSVJTVF9JTlQgKyAzMiwKKwlBVTE1NTBfR1BJTzFfSU5ULAorCUFVMTU1MF9HUElPMl9JTlQsCisJQVUxNTUwX0dQSU8zX0lOVCwKKwlBVTE1NTBfR1BJTzRfSU5ULAorCUFVMTU1MF9HUElPNV9JTlQsCisJQVUxNTUwX0dQSU82X0lOVCwKKwlBVTE1NTBfR1BJTzdfSU5ULAorCUFVMTU1MF9HUElPOF9JTlQsCisJQVUxNTUwX0dQSU85X0lOVCwKKwlBVTE1NTBfR1BJTzEwX0lOVCwKKwlBVTE1NTBfR1BJTzExX0lOVCwKKwlBVTE1NTBfR1BJTzEyX0lOVCwKKwlBVTE1NTBfR1BJTzEzX0lOVCwKKwlBVTE1NTBfR1BJTzE0X0lOVCwKKwlBVTE1NTBfR1BJTzE1X0lOVCwKKwlBVTE1NTBfR1BJTzIwMF9JTlQsCisJQVUxNTUwX0dQSU8yMDFfMjA1X0lOVCwJLyogTG9naWNhbCBvciBvZiBHUElPMjAxOjIwNSAqLworCUFVMTU1MF9HUElPMTZfSU5ULAorCUFVMTU1MF9HUElPMTdfSU5ULAorCUFVMTU1MF9HUElPMjBfSU5ULAorCUFVMTU1MF9HUElPMjFfSU5ULAorCUFVMTU1MF9HUElPMjJfSU5ULAorCUFVMTU1MF9HUElPMjNfSU5ULAorCUFVMTU1MF9HUElPMjRfSU5ULAorCUFVMTU1MF9HUElPMjVfSU5ULAorCUFVMTU1MF9HUElPMjZfSU5ULAorCUFVMTU1MF9HUElPMjdfSU5ULAorCUFVMTU1MF9HUElPMjhfSU5ULAorCUFVMTU1MF9HUElPMjA2X0lOVCwKKwlBVTE1NTBfR1BJTzIwN19JTlQsCisJQVUxNTUwX0dQSU8yMDhfMjE1X0lOVCwJLyogTG9naWNhbCBvciBvZiBHUElPMjA4OjIxNSAqLworfTsKKworZW51bSBzb2NfYXUxMjAwX2ludHMgeworCUFVMTIwMF9GSVJTVF9JTlQJPSBBVTEwMDBfSU5UQzBfSU5UX0JBU0UsCisJQVUxMjAwX1VBUlQwX0lOVAk9IEFVMTIwMF9GSVJTVF9JTlQsCisJQVUxMjAwX1NXVF9JTlQsCisJQVUxMjAwX1NEX0lOVCwKKwlBVTEyMDBfRERNQV9JTlQsCisJQVUxMjAwX01BRV9CRV9JTlQsCisJQVUxMjAwX0dQSU8yMDBfSU5ULAorCUFVMTIwMF9HUElPMjAxX0lOVCwKKwlBVTEyMDBfR1BJTzIwMl9JTlQsCisJQVUxMjAwX1VBUlQxX0lOVCwKKwlBVTEyMDBfTUFFX0ZFX0lOVCwKKwlBVTEyMDBfUFNDMF9JTlQsCisJQVUxMjAwX1BTQzFfSU5ULAorCUFVMTIwMF9BRVNfSU5ULAorCUFVMTIwMF9DQU1FUkFfSU5ULAorCUFVMTIwMF9UT1lfSU5ULAorCUFVMTIwMF9UT1lfTUFUQ0gwX0lOVCwKKwlBVTEyMDBfVE9ZX01BVENIMV9JTlQsCisJQVUxMjAwX1RPWV9NQVRDSDJfSU5ULAorCUFVMTIwMF9SVENfSU5ULAorCUFVMTIwMF9SVENfTUFUQ0gwX0lOVCwKKwlBVTEyMDBfUlRDX01BVENIMV9JTlQsCisJQVUxMjAwX1JUQ19NQVRDSDJfSU5ULAorCUFVMTIwMF9HUElPMjAzX0lOVCwKKwlBVTEyMDBfTkFORF9JTlQsCisJQVUxMjAwX0dQSU8yMDRfSU5ULAorCUFVMTIwMF9HUElPMjA1X0lOVCwKKwlBVTEyMDBfR1BJTzIwNl9JTlQsCisJQVUxMjAwX0dQSU8yMDdfSU5ULAorCUFVMTIwMF9HUElPMjA4XzIxNV9JTlQsCS8qIExvZ2ljYWwgT1Igb2YgMjA4OjIxNSAqLworCUFVMTIwMF9VU0JfSU5ULAorCUFVMTIwMF9MQ0RfSU5ULAorCUFVMTIwMF9NQUVfQk9USF9JTlQsCisJQVUxMjAwX0dQSU8wX0lOVCwKKwlBVTEyMDBfR1BJTzFfSU5ULAorCUFVMTIwMF9HUElPMl9JTlQsCisJQVUxMjAwX0dQSU8zX0lOVCwKKwlBVTEyMDBfR1BJTzRfSU5ULAorCUFVMTIwMF9HUElPNV9JTlQsCisJQVUxMjAwX0dQSU82X0lOVCwKKwlBVTEyMDBfR1BJTzdfSU5ULAorCUFVMTIwMF9HUElPOF9JTlQsCisJQVUxMjAwX0dQSU85X0lOVCwKKwlBVTEyMDBfR1BJTzEwX0lOVCwKKwlBVTEyMDBfR1BJTzExX0lOVCwKKwlBVTEyMDBfR1BJTzEyX0lOVCwKKwlBVTEyMDBfR1BJTzEzX0lOVCwKKwlBVTEyMDBfR1BJTzE0X0lOVCwKKwlBVTEyMDBfR1BJTzE1X0lOVCwKKwlBVTEyMDBfR1BJTzE2X0lOVCwKKwlBVTEyMDBfR1BJTzE3X0lOVCwKKwlBVTEyMDBfR1BJTzE4X0lOVCwKKwlBVTEyMDBfR1BJTzE5X0lOVCwKKwlBVTEyMDBfR1BJTzIwX0lOVCwKKwlBVTEyMDBfR1BJTzIxX0lOVCwKKwlBVTEyMDBfR1BJTzIyX0lOVCwKKwlBVTEyMDBfR1BJTzIzX0lOVCwKKwlBVTEyMDBfR1BJTzI0X0lOVCwKKwlBVTEyMDBfR1BJTzI1X0lOVCwKKwlBVTEyMDBfR1BJTzI2X0lOVCwKKwlBVTEyMDBfR1BJTzI3X0lOVCwKKwlBVTEyMDBfR1BJTzI4X0lOVCwKKwlBVTEyMDBfR1BJTzI5X0lOVCwKKwlBVTEyMDBfR1BJTzMwX0lOVCwKKwlBVTEyMDBfR1BJTzMxX0lOVCwKK307CiAKICNlbmRpZiAvKiAhZGVmaW5lZCAoX0xBTkdVQUdFX0FTU0VNQkxZKSAqLwogCkBAIC01NDksNzggKzkxMSwxNiBAQAogCiAjZGVmaW5lIElDMV9URVNUQklUCQkweEIxODAwMDgwCiAKLS8qIEludGVycnVwdCBOdW1iZXJzICovCisKIC8qIEF1MTAwMCAqLwogI2lmZGVmIENPTkZJR19TT0NfQVUxMDAwCi1lbnVtIHNvY19hdTEwMDBfaW50cyB7Ci0JQVUxMDAwX0ZJUlNUX0lOVAk9IE1JUFNfQ1BVX0lSUV9CQVNFICsgOCwKLQlBVTEwMDBfVUFSVDBfSU5UCT0gQVUxMDAwX0ZJUlNUX0lOVCwKLQlBVTEwMDBfVUFSVDFfSU5ULAkJCQkvKiBhdTEwMDAgKi8KLQlBVTEwMDBfVUFSVDJfSU5ULAkJCQkvKiBhdTEwMDAgKi8KLQlBVTEwMDBfVUFSVDNfSU5ULAotCUFVMTAwMF9TU0kwX0lOVCwJCQkJLyogYXUxMDAwICovCi0JQVUxMDAwX1NTSTFfSU5ULAkJCQkvKiBhdTEwMDAgKi8KLQlBVTEwMDBfRE1BX0lOVF9CQVNFLAotCi0JQVUxMDAwX1RPWV9JTlQJCT0gQVUxMDAwX0ZJUlNUX0lOVCArIDE0LAotCUFVMTAwMF9UT1lfTUFUQ0gwX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMV9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDJfSU5ULAotCUFVMTAwMF9SVENfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gwX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMV9JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDJfSU5ULAotCUFVMTAwMF9JUkRBX1RYX0lOVCwJCQkJLyogYXUxMDAwICovCi0JQVUxMDAwX0lSREFfUlhfSU5ULAkJCQkvKiBhdTEwMDAgKi8KLQlBVTEwMDBfVVNCX0RFVl9SRVFfSU5ULAotCUFVMTAwMF9VU0JfREVWX1NVU19JTlQsCi0JQVUxMDAwX1VTQl9IT1NUX0lOVCwKLQlBVTEwMDBfQUNTWU5DX0lOVCwKLQlBVTEwMDBfTUFDMF9ETUFfSU5ULAotCUFVMTAwMF9NQUMxX0RNQV9JTlQsCi0JQVUxMDAwX0kyU19VT19JTlQsCQkJCS8qIGF1MTAwMCAqLwotCUFVMTAwMF9BQzk3Q19JTlQsCi0JQVUxMDAwX0dQSU9fMCwKLQlBVTEwMDBfR1BJT18xLAotCUFVMTAwMF9HUElPXzIsCi0JQVUxMDAwX0dQSU9fMywKLQlBVTEwMDBfR1BJT180LAotCUFVMTAwMF9HUElPXzUsCi0JQVUxMDAwX0dQSU9fNiwKLQlBVTEwMDBfR1BJT183LAotCUFVMTAwMF9HUElPXzgsCi0JQVUxMDAwX0dQSU9fOSwKLQlBVTEwMDBfR1BJT18xMCwKLQlBVTEwMDBfR1BJT18xMSwKLQlBVTEwMDBfR1BJT18xMiwKLQlBVTEwMDBfR1BJT18xMywKLQlBVTEwMDBfR1BJT18xNCwKLQlBVTEwMDBfR1BJT18xNSwKLQlBVTEwMDBfR1BJT18xNiwKLQlBVTEwMDBfR1BJT18xNywKLQlBVTEwMDBfR1BJT18xOCwKLQlBVTEwMDBfR1BJT18xOSwKLQlBVTEwMDBfR1BJT18yMCwKLQlBVTEwMDBfR1BJT18yMSwKLQlBVTEwMDBfR1BJT18yMiwKLQlBVTEwMDBfR1BJT18yMywKLQlBVTEwMDBfR1BJT18yNCwKLQlBVTEwMDBfR1BJT18yNSwKLQlBVTEwMDBfR1BJT18yNiwKLQlBVTEwMDBfR1BJT18yNywKLQlBVTEwMDBfR1BJT18yOCwKLQlBVTEwMDBfR1BJT18yOSwKLQlBVTEwMDBfR1BJT18zMCwKLQlBVTEwMDBfR1BJT18zMSwKLX07CiAKICNkZWZpbmUgVUFSVDBfQUREUgkJMHhCMTEwMDAwMAotI2RlZmluZSBVQVJUMV9BRERSCQkweEIxMjAwMDAwCi0jZGVmaW5lIFVBUlQyX0FERFIJCTB4QjEzMDAwMDAKICNkZWZpbmUgVUFSVDNfQUREUgkJMHhCMTQwMDAwMAogCiAjZGVmaW5lIFVTQl9PSENJX0JBU0UJCTB4MTAxMDAwMDAJLyogcGh5cyBhZGRyIGZvciBpb3JlbWFwICovCiAjZGVmaW5lIFVTQl9IT1NUX0NPTkZJRyAJMHhCMDE3RkZGQworI2RlZmluZSBGT1JfUExBVEZPUk1fQ19VU0JfSE9TVF9JTlQgQVUxMDAwX1VTQl9IT1NUX0lOVAogCiAjZGVmaW5lIEFVMTAwMF9FVEgwX0JBU0UJMHhCMDUwMDAwMAogI2RlZmluZSBBVTEwMDBfRVRIMV9CQVNFCTB4QjA1MTAwMDAKQEAgLTYzMSw3OCArOTMxLDEzIEBACiAKIC8qIEF1MTUwMCAqLwogI2lmZGVmIENPTkZJR19TT0NfQVUxNTAwCi1lbnVtIHNvY19hdTE1MDBfaW50cyB7Ci0JQVUxNTAwX0ZJUlNUX0lOVAk9IE1JUFNfQ1BVX0lSUV9CQVNFICsgOCwKLQlBVTE1MDBfVUFSVDBfSU5UCT0gQVUxNTAwX0ZJUlNUX0lOVCwKLQlBVTEwMDBfUENJX0lOVEEsCQkJCS8qIGF1MTUwMCAqLwotCUFVMTAwMF9QQ0lfSU5UQiwJCQkJLyogYXUxNTAwICovCi0JQVUxNTAwX1VBUlQzX0lOVCwKLQlBVTEwMDBfUENJX0lOVEMsCQkJCS8qIGF1MTUwMCAqLwotCUFVMTAwMF9QQ0lfSU5URCwJCQkJLyogYXUxNTAwICovCi0JQVUxMDAwX0RNQV9JTlRfQkFTRSwKLQotCUFVMTAwMF9UT1lfSU5UCQk9IEFVMTUwMF9GSVJTVF9JTlQgKyAxNCwKLQlBVTEwMDBfVE9ZX01BVENIMF9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDFfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gyX0lOVCwKLQlBVTEwMDBfUlRDX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMF9JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDFfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gyX0lOVCwKLQlBVTE1MDBfUENJX0VSUl9JTlQsCi0JQVUxNTAwX1JFU0VSVkVEX0lOVCwKLQlBVTEwMDBfVVNCX0RFVl9SRVFfSU5ULAotCUFVMTAwMF9VU0JfREVWX1NVU19JTlQsCi0JQVUxMDAwX1VTQl9IT1NUX0lOVCwKLQlBVTEwMDBfQUNTWU5DX0lOVCwKLQlBVTE1MDBfTUFDMF9ETUFfSU5ULAotCUFVMTUwMF9NQUMxX0RNQV9JTlQsCi0JQVUxMDAwX0FDOTdDX0lOVAk9IEFVMTUwMF9GSVJTVF9JTlQgKyAzMSwKLQlBVTEwMDBfR1BJT18wLAotCUFVMTAwMF9HUElPXzEsCi0JQVUxMDAwX0dQSU9fMiwKLQlBVTEwMDBfR1BJT18zLAotCUFVMTAwMF9HUElPXzQsCi0JQVUxMDAwX0dQSU9fNSwKLQlBVTEwMDBfR1BJT182LAotCUFVMTAwMF9HUElPXzcsCi0JQVUxMDAwX0dQSU9fOCwKLQlBVTEwMDBfR1BJT185LAotCUFVMTAwMF9HUElPXzEwLAotCUFVMTAwMF9HUElPXzExLAotCUFVMTAwMF9HUElPXzEyLAotCUFVMTAwMF9HUElPXzEzLAotCUFVMTAwMF9HUElPXzE0LAotCUFVMTAwMF9HUElPXzE1LAotCUFVMTUwMF9HUElPXzIwMCwKLQlBVTE1MDBfR1BJT18yMDEsCi0JQVUxNTAwX0dQSU9fMjAyLAotCUFVMTUwMF9HUElPXzIwMywKLQlBVTE1MDBfR1BJT18yMCwKLQlBVTE1MDBfR1BJT18yMDQsCi0JQVUxNTAwX0dQSU9fMjA1LAotCUFVMTUwMF9HUElPXzIzLAotCUFVMTUwMF9HUElPXzI0LAotCUFVMTUwMF9HUElPXzI1LAotCUFVMTUwMF9HUElPXzI2LAotCUFVMTUwMF9HUElPXzI3LAotCUFVMTUwMF9HUElPXzI4LAotCUFVMTUwMF9HUElPXzIwNiwKLQlBVTE1MDBfR1BJT18yMDcsCi0JQVUxNTAwX0dQSU9fMjA4XzIxNSwKLX07Ci0KLS8qIHNob3J0Y3V0cyAqLwotI2RlZmluZSBJTlRBIEFVMTAwMF9QQ0lfSU5UQQotI2RlZmluZSBJTlRCIEFVMTAwMF9QQ0lfSU5UQgotI2RlZmluZSBJTlRDIEFVMTAwMF9QQ0lfSU5UQwotI2RlZmluZSBJTlREIEFVMTAwMF9QQ0lfSU5URAogCiAjZGVmaW5lIFVBUlQwX0FERFIJCTB4QjExMDAwMDAKICNkZWZpbmUgVUFSVDNfQUREUgkJMHhCMTQwMDAwMAogCiAjZGVmaW5lIFVTQl9PSENJX0JBU0UJCTB4MTAxMDAwMDAJLyogcGh5cyBhZGRyIGZvciBpb3JlbWFwICovCiAjZGVmaW5lIFVTQl9IT1NUX0NPTkZJRyAJMHhCMDE3ZmZmYworI2RlZmluZSBGT1JfUExBVEZPUk1fQ19VU0JfSE9TVF9JTlQgQVUxNTAwX1VTQl9IT1NUX0lOVAogCiAjZGVmaW5lIEFVMTUwMF9FVEgwX0JBU0UJMHhCMTUwMDAwMAogI2RlZmluZSBBVTE1MDBfRVRIMV9CQVNFCTB4QjE1MTAwMDAKQEAgLTcxMyw3NCArOTQ4LDEzIEBACiAKIC8qIEF1MTEwMCAqLwogI2lmZGVmIENPTkZJR19TT0NfQVUxMTAwCi1lbnVtIHNvY19hdTExMDBfaW50cyB7Ci0JQVUxMTAwX0ZJUlNUX0lOVAk9IE1JUFNfQ1BVX0lSUV9CQVNFICsgOCwKLQlBVTExMDBfVUFSVDBfSU5UCT0gQVUxMTAwX0ZJUlNUX0lOVCwKLQlBVTExMDBfVUFSVDFfSU5ULAotCUFVMTEwMF9TRF9JTlQsCi0JQVUxMTAwX1VBUlQzX0lOVCwKLQlBVTEwMDBfU1NJMF9JTlQsCi0JQVUxMDAwX1NTSTFfSU5ULAotCUFVMTAwMF9ETUFfSU5UX0JBU0UsCi0KLQlBVTEwMDBfVE9ZX0lOVAkJPSBBVTExMDBfRklSU1RfSU5UICsgMTQsCi0JQVUxMDAwX1RPWV9NQVRDSDBfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMl9JTlQsCi0JQVUxMDAwX1JUQ19JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDBfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMl9JTlQsCi0JQVUxMDAwX0lSREFfVFhfSU5ULAotCUFVMTAwMF9JUkRBX1JYX0lOVCwKLQlBVTEwMDBfVVNCX0RFVl9SRVFfSU5ULAotCUFVMTAwMF9VU0JfREVWX1NVU19JTlQsCi0JQVUxMDAwX1VTQl9IT1NUX0lOVCwKLQlBVTEwMDBfQUNTWU5DX0lOVCwKLQlBVTExMDBfTUFDMF9ETUFfSU5ULAotCUFVMTEwMF9HUElPXzIwOF8yMTUsCi0JQVUxMTAwX0xDRF9JTlQsCi0JQVUxMDAwX0FDOTdDX0lOVCwKLQlBVTEwMDBfR1BJT18wLAotCUFVMTAwMF9HUElPXzEsCi0JQVUxMDAwX0dQSU9fMiwKLQlBVTEwMDBfR1BJT18zLAotCUFVMTAwMF9HUElPXzQsCi0JQVUxMDAwX0dQSU9fNSwKLQlBVTEwMDBfR1BJT182LAotCUFVMTAwMF9HUElPXzcsCi0JQVUxMDAwX0dQSU9fOCwKLQlBVTEwMDBfR1BJT185LAotCUFVMTAwMF9HUElPXzEwLAotCUFVMTAwMF9HUElPXzExLAotCUFVMTAwMF9HUElPXzEyLAotCUFVMTAwMF9HUElPXzEzLAotCUFVMTAwMF9HUElPXzE0LAotCUFVMTAwMF9HUElPXzE1LAotCUFVMTAwMF9HUElPXzE2LAotCUFVMTAwMF9HUElPXzE3LAotCUFVMTAwMF9HUElPXzE4LAotCUFVMTAwMF9HUElPXzE5LAotCUFVMTAwMF9HUElPXzIwLAotCUFVMTAwMF9HUElPXzIxLAotCUFVMTAwMF9HUElPXzIyLAotCUFVMTAwMF9HUElPXzIzLAotCUFVMTAwMF9HUElPXzI0LAotCUFVMTAwMF9HUElPXzI1LAotCUFVMTAwMF9HUElPXzI2LAotCUFVMTAwMF9HUElPXzI3LAotCUFVMTAwMF9HUElPXzI4LAotCUFVMTAwMF9HUElPXzI5LAotCUFVMTAwMF9HUElPXzMwLAotCUFVMTAwMF9HUElPXzMxLAotfTsKIAogI2RlZmluZSBVQVJUMF9BRERSCQkweEIxMTAwMDAwCi0jZGVmaW5lIFVBUlQxX0FERFIJCTB4QjEyMDAwMDAKICNkZWZpbmUgVUFSVDNfQUREUgkJMHhCMTQwMDAwMAogCiAjZGVmaW5lIFVTQl9PSENJX0JBU0UJCTB4MTAxMDAwMDAJLyogcGh5cyBhZGRyIGZvciBpb3JlbWFwICovCiAjZGVmaW5lIFVTQl9IT1NUX0NPTkZJRyAJMHhCMDE3RkZGQworI2RlZmluZSBGT1JfUExBVEZPUk1fQ19VU0JfSE9TVF9JTlQgQVUxMTAwX1VTQl9IT1NUX0lOVAogCiAjZGVmaW5lIEFVMTEwMF9FVEgwX0JBU0UJMHhCMDUwMDAwMAogI2RlZmluZSBBVTExMDBfTUFDMF9FTkFCTEUJMHhCMDUyMDAwMApAQCAtNzg4LDg3ICs5NjIsMTIgQEAKICNlbmRpZiAvKiBDT05GSUdfU09DX0FVMTEwMCAqLwogCiAjaWZkZWYgQ09ORklHX1NPQ19BVTE1NTAKLWVudW0gc29jX2F1MTU1MF9pbnRzIHsKLQlBVTE1NTBfRklSU1RfSU5UCT0gTUlQU19DUFVfSVJRX0JBU0UgKyA4LAotCUFVMTU1MF9VQVJUMF9JTlQJPSBBVTE1NTBfRklSU1RfSU5ULAotCUFVMTU1MF9QQ0lfSU5UQSwKLQlBVTE1NTBfUENJX0lOVEIsCi0JQVUxNTUwX0RETUFfSU5ULAotCUFVMTU1MF9DUllQVE9fSU5ULAotCUFVMTU1MF9QQ0lfSU5UQywKLQlBVTE1NTBfUENJX0lOVEQsCi0JQVUxNTUwX1BDSV9SU1RfSU5ULAotCUFVMTU1MF9VQVJUMV9JTlQsCi0JQVUxNTUwX1VBUlQzX0lOVCwKLQlBVTE1NTBfUFNDMF9JTlQsCi0JQVUxNTUwX1BTQzFfSU5ULAotCUFVMTU1MF9QU0MyX0lOVCwKLQlBVTE1NTBfUFNDM19JTlQsCi0JQVUxMDAwX1RPWV9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDBfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMl9JTlQsCi0JQVUxMDAwX1JUQ19JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDBfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gxX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMl9JTlQsCi0KLQlBVTE1NTBfTkFORF9JTlQJCQk9IEFVMTU1MF9GSVJTVF9JTlQgKyAyMywKLQlBVTE1NTBfVVNCX0RFVl9SRVFfSU5ULAotCUFVMTAwMF9VU0JfREVWX1JFUV9JTlQJCT0gQVUxNTUwX1VTQl9ERVZfUkVRX0lOVCwKLQlBVTE1NTBfVVNCX0RFVl9TVVNfSU5ULAotCUFVMTAwMF9VU0JfREVWX1NVU19JTlQJCT0gQVUxNTUwX1VTQl9ERVZfU1VTX0lOVCwKLQlBVTE1NTBfVVNCX0hPU1RfSU5ULAotCUFVMTAwMF9VU0JfSE9TVF9JTlQJCT0gQVUxNTUwX1VTQl9IT1NUX0lOVCwKLQlBVTE1NTBfTUFDMF9ETUFfSU5ULAotCUFVMTU1MF9NQUMxX0RNQV9JTlQsCi0JQVUxMDAwX0dQSU9fMAkJCT0gQVUxNTUwX0ZJUlNUX0lOVCArIDMyLAotCUFVMTAwMF9HUElPXzEsCi0JQVUxMDAwX0dQSU9fMiwKLQlBVTEwMDBfR1BJT18zLAotCUFVMTAwMF9HUElPXzQsCi0JQVUxMDAwX0dQSU9fNSwKLQlBVTEwMDBfR1BJT182LAotCUFVMTAwMF9HUElPXzcsCi0JQVUxMDAwX0dQSU9fOCwKLQlBVTEwMDBfR1BJT185LAotCUFVMTAwMF9HUElPXzEwLAotCUFVMTAwMF9HUElPXzExLAotCUFVMTAwMF9HUElPXzEyLAotCUFVMTAwMF9HUElPXzEzLAotCUFVMTAwMF9HUElPXzE0LAotCUFVMTAwMF9HUElPXzE1LAotCUFVMTU1MF9HUElPXzIwMCwKLQlBVTE1MDBfR1BJT18yMDFfMjA1LAkJCS8qIExvZ2ljYWwgb3Igb2YgR1BJTzIwMToyMDUgKi8KLQlBVTE1MDBfR1BJT18xNiwKLQlBVTE1MDBfR1BJT18xNywKLQlBVTE1MDBfR1BJT18yMCwKLQlBVTE1MDBfR1BJT18yMSwKLQlBVTE1MDBfR1BJT18yMiwKLQlBVTE1MDBfR1BJT18yMywKLQlBVTE1MDBfR1BJT18yNCwKLQlBVTE1MDBfR1BJT18yNSwKLQlBVTE1MDBfR1BJT18yNiwKLQlBVTE1MDBfR1BJT18yNywKLQlBVTE1MDBfR1BJT18yOCwKLQlBVTE1MDBfR1BJT18yMDYsCi0JQVUxNTAwX0dQSU9fMjA3LAotCUFVMTUwMF9HUElPXzIwOF8yMTgsCQkJLyogTG9naWNhbCBvciBvZiBHUElPMjA4OjIxOCAqLwotfTsKLQotLyogc2hvcnRjdXRzICovCi0jZGVmaW5lIElOVEEgQVUxNTUwX1BDSV9JTlRBCi0jZGVmaW5lIElOVEIgQVUxNTUwX1BDSV9JTlRCCi0jZGVmaW5lIElOVEMgQVUxNTUwX1BDSV9JTlRDCi0jZGVmaW5lIElOVEQgQVUxNTUwX1BDSV9JTlRECi0KICNkZWZpbmUgVUFSVDBfQUREUgkJMHhCMTEwMDAwMAotI2RlZmluZSBVQVJUMV9BRERSCQkweEIxMjAwMDAwCi0jZGVmaW5lIFVBUlQzX0FERFIJCTB4QjE0MDAwMDAKIAogI2RlZmluZSBVU0JfT0hDSV9CQVNFCQkweDE0MDIwMDAwCS8qIHBoeXMgYWRkciBmb3IgaW9yZW1hcCAqLwogI2RlZmluZSBVU0JfT0hDSV9MRU4JCTB4MDAwNjAwMDAKICNkZWZpbmUgVVNCX0hPU1RfQ09ORklHIAkweEI0MDI3ZmZjCisjZGVmaW5lIEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCBBVTE1NTBfVVNCX0hPU1RfSU5UCiAKICNkZWZpbmUgQVUxNTUwX0VUSDBfQkFTRQkweEIwNTAwMDAwCiAjZGVmaW5lIEFVMTU1MF9FVEgxX0JBU0UJMHhCMDUxMDAwMApAQCAtODc3LDc4ICs5NzYsMTAgQEAKICNkZWZpbmUgTlVNX0VUSF9JTlRFUkZBQ0VTIDIKICNlbmRpZiAvKiBDT05GSUdfU09DX0FVMTU1MCAqLwogCisKICNpZmRlZiBDT05GSUdfU09DX0FVMTIwMAotZW51bSBzb2NfYXUxMjAwX2ludHMgewotCUFVMTIwMF9GSVJTVF9JTlQJPSBNSVBTX0NQVV9JUlFfQkFTRSArIDgsCi0JQVUxMjAwX1VBUlQwX0lOVAk9IEFVMTIwMF9GSVJTVF9JTlQsCi0JQVUxMjAwX1NXVF9JTlQsCi0JQVUxMjAwX1NEX0lOVCwKLQlBVTEyMDBfRERNQV9JTlQsCi0JQVUxMjAwX01BRV9CRV9JTlQsCi0JQVUxMjAwX0dQSU9fMjAwLAotCUFVMTIwMF9HUElPXzIwMSwKLQlBVTEyMDBfR1BJT18yMDIsCi0JQVUxMjAwX1VBUlQxX0lOVCwKLQlBVTEyMDBfTUFFX0ZFX0lOVCwKLQlBVTEyMDBfUFNDMF9JTlQsCi0JQVUxMjAwX1BTQzFfSU5ULAotCUFVMTIwMF9BRVNfSU5ULAotCUFVMTIwMF9DQU1FUkFfSU5ULAotCUFVMTAwMF9UT1lfSU5ULAotCUFVMTAwMF9UT1lfTUFUQ0gwX0lOVCwKLQlBVTEwMDBfVE9ZX01BVENIMV9JTlQsCi0JQVUxMDAwX1RPWV9NQVRDSDJfSU5ULAotCUFVMTAwMF9SVENfSU5ULAotCUFVMTAwMF9SVENfTUFUQ0gwX0lOVCwKLQlBVTEwMDBfUlRDX01BVENIMV9JTlQsCi0JQVUxMDAwX1JUQ19NQVRDSDJfSU5ULAotCUFVMTIwMF9HUElPXzIwMywKLQlBVTEyMDBfTkFORF9JTlQsCi0JQVUxMjAwX0dQSU9fMjA0LAotCUFVMTIwMF9HUElPXzIwNSwKLQlBVTEyMDBfR1BJT18yMDYsCi0JQVUxMjAwX0dQSU9fMjA3LAotCUFVMTIwMF9HUElPXzIwOF8yMTUsCQkJLyogTG9naWNhbCBPUiBvZiAyMDg6MjE1ICovCi0JQVUxMjAwX1VTQl9JTlQsCi0JQVUxMDAwX1VTQl9IT1NUX0lOVAk9IEFVMTIwMF9VU0JfSU5ULAotCUFVMTIwMF9MQ0RfSU5ULAotCUFVMTIwMF9NQUVfQk9USF9JTlQsCi0JQVUxMDAwX0dQSU9fMCwKLQlBVTEwMDBfR1BJT18xLAotCUFVMTAwMF9HUElPXzIsCi0JQVUxMDAwX0dQSU9fMywKLQlBVTEwMDBfR1BJT180LAotCUFVMTAwMF9HUElPXzUsCi0JQVUxMDAwX0dQSU9fNiwKLQlBVTEwMDBfR1BJT183LAotCUFVMTAwMF9HUElPXzgsCi0JQVUxMDAwX0dQSU9fOSwKLQlBVTEwMDBfR1BJT18xMCwKLQlBVTEwMDBfR1BJT18xMSwKLQlBVTEwMDBfR1BJT18xMiwKLQlBVTEwMDBfR1BJT18xMywKLQlBVTEwMDBfR1BJT18xNCwKLQlBVTEwMDBfR1BJT18xNSwKLQlBVTEwMDBfR1BJT18xNiwKLQlBVTEwMDBfR1BJT18xNywKLQlBVTEwMDBfR1BJT18xOCwKLQlBVTEwMDBfR1BJT18xOSwKLQlBVTEwMDBfR1BJT18yMCwKLQlBVTEwMDBfR1BJT18yMSwKLQlBVTEwMDBfR1BJT18yMiwKLQlBVTEwMDBfR1BJT18yMywKLQlBVTEwMDBfR1BJT18yNCwKLQlBVTEwMDBfR1BJT18yNSwKLQlBVTEwMDBfR1BJT18yNiwKLQlBVTEwMDBfR1BJT18yNywKLQlBVTEwMDBfR1BJT18yOCwKLQlBVTEwMDBfR1BJT18yOSwKLQlBVTEwMDBfR1BJT18zMCwKLQlBVTEwMDBfR1BJT18zMSwKLX07CiAKICNkZWZpbmUgVUFSVDBfQUREUgkJMHhCMTEwMDAwMAotI2RlZmluZSBVQVJUMV9BRERSCQkweEIxMjAwMDAwCiAKICNkZWZpbmUgVVNCX1VPQ19CQVNFCQkweDE0MDIwMDIwCiAjZGVmaW5lIFVTQl9VT0NfTEVOCQkweDIwCkBAIC05NzQsMTYgKzEwMDUsMTAgQEAKICNkZWZpbmUgVVNCTVNSTUNGR19SRENPTUIJMzAKICNkZWZpbmUgVVNCTVNSTUNGR19QRkVOIAkzMQogCisjZGVmaW5lIEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCBBVTEyMDBfVVNCX0lOVAorCiAjZW5kaWYgLyogQ09ORklHX1NPQ19BVTEyMDAgKi8KIAotI2RlZmluZSBBVTEwMDBfSU5UQzBfSU5UX0JBU0UJKE1JUFNfQ1BVX0lSUV9CQVNFICsgOCkKLSNkZWZpbmUgQVUxMDAwX0lOVEMwX0lOVF9MQVNUCShBVTEwMDBfSU5UQzBfSU5UX0JBU0UgKyAzMSkKLSNkZWZpbmUgQVUxMDAwX0lOVEMxX0lOVF9CQVNFCShBVTEwMDBfSU5UQzBfSU5UX0JBU0UgKyAzMikKLSNkZWZpbmUgQVUxMDAwX0lOVEMxX0lOVF9MQVNUCShBVTEwMDBfSU5UQzFfSU5UX0JBU0UgKyAzMSkKLQotI2RlZmluZSBBVTEwMDBfTUFYX0lOVFIgCUFVMTAwMF9JTlRDMV9JTlRfTEFTVAotI2RlZmluZSBJTlRYCQkJMHhGRgkJCS8qIG5vdCB2YWxpZCAqLwotCiAvKiBQcm9ncmFtbWFibGUgQ291bnRlcnMgMCBhbmQgMSAqLwogI2RlZmluZSBTWVNfQkFTRQkJMHhCMTkwMDAwMAogI2RlZmluZSBTWVNfQ09VTlRFUl9DTlRSTAkoU1lTX0JBU0UgKyAweDE0KQpAQCAtMTIzMSwxNCArMTI1Niw2IEBACiAjZGVmaW5lIE1BQ19SWF9CVUZGM19TVEFUVVMJMHgzMAogI2RlZmluZSBNQUNfUlhfQlVGRjNfQUREUgkweDM0CiAKLS8qIFVBUlRTIDAtMyAqLwotI2RlZmluZSBVQVJUX0JBU0UJCVVBUlQwX0FERFIKLSNpZmRlZglDT05GSUdfU09DX0FVMTIwMAotI2RlZmluZSBVQVJUX0RFQlVHX0JBU0UgCVVBUlQxX0FERFIKLSNlbHNlCi0jZGVmaW5lIFVBUlRfREVCVUdfQkFTRSAJVUFSVDNfQUREUgotI2VuZGlmCi0KICNkZWZpbmUgVUFSVF9SWAkJMAkvKiBSZWNlaXZlIGJ1ZmZlciAqLwogI2RlZmluZSBVQVJUX1RYCQk0CS8qIFRyYW5zbWl0IGJ1ZmZlciAqLwogI2RlZmluZSBVQVJUX0lFUgk4CS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KQEAgLTEyNTEsODQgKzEyNjgsNiBAQAogI2RlZmluZSBVQVJUX0NMSwkweDI4CS8qIEJhdWQgUmF0ZSBDbG9jayBEaXZpZGVyICovCiAjZGVmaW5lIFVBUlRfTU9EX0NOVFJMCTB4MTAwCS8qIE1vZHVsZSBDb250cm9sICovCiAKLSNkZWZpbmUgVUFSVF9GQ1JfRU5BQkxFX0ZJRk8JMHgwMSAvKiBFbmFibGUgdGhlIEZJRk8gKi8KLSNkZWZpbmUgVUFSVF9GQ1JfQ0xFQVJfUkNWUgkweDAyIC8qIENsZWFyIHRoZSBSQ1ZSIEZJRk8gKi8KLSNkZWZpbmUgVUFSVF9GQ1JfQ0xFQVJfWE1JVAkweDA0IC8qIENsZWFyIHRoZSBYTUlUIEZJRk8gKi8KLSNkZWZpbmUgVUFSVF9GQ1JfRE1BX1NFTEVDVAkweDA4IC8qIEZvciBETUEgYXBwbGljYXRpb25zICovCi0jZGVmaW5lIFVBUlRfRkNSX1RSSUdHRVJfTUFTSwkweEYwIC8qIE1hc2sgZm9yIHRoZSBGSUZPIHRyaWdnZXIgcmFuZ2UgKi8KLSNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHR0VSXzEJMHgwMCAvKiBNYXNrIGZvciByZWNlaXZlIHRyaWdnZXIgc2V0IGF0IDEgKi8KLSNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHR0VSXzQJMHg0MCAvKiBNYXNrIGZvciByZWNlaXZlIHRyaWdnZXIgc2V0IGF0IDQgKi8KLSNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHR0VSXzgJMHg4MCAvKiBNYXNrIGZvciByZWNlaXZlIHRyaWdnZXIgc2V0IGF0IDggKi8KLSNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHR0VSXzE0ICAgMHhBMCAvKiBNYXNrIGZvciByZWNlaXZlIHRyaWdnZXIgc2V0IGF0IDE0ICovCi0jZGVmaW5lIFVBUlRfRkNSX1RfVFJJR0dFUl8wCTB4MDAgLyogTWFzayBmb3IgdHJhbnNtaXQgdHJpZ2dlciBzZXQgYXQgMCAqLwotI2RlZmluZSBVQVJUX0ZDUl9UX1RSSUdHRVJfNAkweDEwIC8qIE1hc2sgZm9yIHRyYW5zbWl0IHRyaWdnZXIgc2V0IGF0IDQgKi8KLSNkZWZpbmUgVUFSVF9GQ1JfVF9UUklHR0VSXzggICAgMHgyMCAvKiBNYXNrIGZvciB0cmFuc21pdCB0cmlnZ2VyIHNldCBhdCA4ICovCi0jZGVmaW5lIFVBUlRfRkNSX1RfVFJJR0dFUl8xMgkweDMwIC8qIE1hc2sgZm9yIHRyYW5zbWl0IHRyaWdnZXIgc2V0IGF0IDEyICovCi0KLS8qCi0gKiBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgTGluZSBDb250cm9sIFJlZ2lzdGVyCi0gKi8KLSNkZWZpbmUgVUFSVF9MQ1JfU0JDCTB4NDAJLyogU2V0IGJyZWFrIGNvbnRyb2wgKi8KLSNkZWZpbmUgVUFSVF9MQ1JfU1BBUgkweDIwCS8qIFN0aWNrIHBhcml0eSAoPykgKi8KLSNkZWZpbmUgVUFSVF9MQ1JfRVBBUgkweDEwCS8qIEV2ZW4gcGFyaXR5IHNlbGVjdCAqLwotI2RlZmluZSBVQVJUX0xDUl9QQVJJVFkJMHgwOAkvKiBQYXJpdHkgRW5hYmxlICovCi0jZGVmaW5lIFVBUlRfTENSX1NUT1AJMHgwNAkvKiBTdG9wIGJpdHM6IDA9MSBzdG9wIGJpdCwgMT0gMiBzdG9wIGJpdHMgKi8KLSNkZWZpbmUgVUFSVF9MQ1JfV0xFTjUgIDB4MDAJLyogV29yZGxlbmd0aDogNSBiaXRzICovCi0jZGVmaW5lIFVBUlRfTENSX1dMRU42ICAweDAxCS8qIFdvcmRsZW5ndGg6IDYgYml0cyAqLwotI2RlZmluZSBVQVJUX0xDUl9XTEVONyAgMHgwMgkvKiBXb3JkbGVuZ3RoOiA3IGJpdHMgKi8KLSNkZWZpbmUgVUFSVF9MQ1JfV0xFTjggIDB4MDMJLyogV29yZGxlbmd0aDogOCBiaXRzICovCi0KLS8qCi0gKiBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgTGluZSBTdGF0dXMgUmVnaXN0ZXIKLSAqLwotI2RlZmluZSBVQVJUX0xTUl9URU1UCTB4NDAJLyogVHJhbnNtaXR0ZXIgZW1wdHkgKi8KLSNkZWZpbmUgVUFSVF9MU1JfVEhSRQkweDIwCS8qIFRyYW5zbWl0LWhvbGQtcmVnaXN0ZXIgZW1wdHkgKi8KLSNkZWZpbmUgVUFSVF9MU1JfQkkJMHgxMAkvKiBCcmVhayBpbnRlcnJ1cHQgaW5kaWNhdG9yICovCi0jZGVmaW5lIFVBUlRfTFNSX0ZFCTB4MDgJLyogRnJhbWUgZXJyb3IgaW5kaWNhdG9yICovCi0jZGVmaW5lIFVBUlRfTFNSX1BFCTB4MDQJLyogUGFyaXR5IGVycm9yIGluZGljYXRvciAqLwotI2RlZmluZSBVQVJUX0xTUl9PRQkweDAyCS8qIE92ZXJydW4gZXJyb3IgaW5kaWNhdG9yICovCi0jZGVmaW5lIFVBUlRfTFNSX0RSCTB4MDEJLyogUmVjZWl2ZXIgZGF0YSByZWFkeSAqLwotCi0vKgotICogVGhlc2UgYXJlIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIEludGVycnVwdCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlcgotICovCi0jZGVmaW5lIFVBUlRfSUlSX05PX0lOVAkweDAxCS8qIE5vIGludGVycnVwdHMgcGVuZGluZyAqLwotI2RlZmluZSBVQVJUX0lJUl9JRAkweDA2CS8qIE1hc2sgZm9yIHRoZSBpbnRlcnJ1cHQgSUQgKi8KLSNkZWZpbmUgVUFSVF9JSVJfTVNJCTB4MDAJLyogTW9kZW0gc3RhdHVzIGludGVycnVwdCAqLwotI2RlZmluZSBVQVJUX0lJUl9USFJJCTB4MDIJLyogVHJhbnNtaXR0ZXIgaG9sZGluZyByZWdpc3RlciBlbXB0eSAqLwotI2RlZmluZSBVQVJUX0lJUl9SREkJMHgwNAkvKiBSZWNlaXZlciBkYXRhIGludGVycnVwdCAqLwotI2RlZmluZSBVQVJUX0lJUl9STFNJCTB4MDYJLyogUmVjZWl2ZXIgbGluZSBzdGF0dXMgaW50ZXJydXB0ICovCi0KLS8qCi0gKiBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgotICovCi0jZGVmaW5lIFVBUlRfSUVSX01TSQkweDA4CS8qIEVuYWJsZSBNb2RlbSBzdGF0dXMgaW50ZXJydXB0ICovCi0jZGVmaW5lIFVBUlRfSUVSX1JMU0kJMHgwNAkvKiBFbmFibGUgcmVjZWl2ZXIgbGluZSBzdGF0dXMgaW50ZXJydXB0ICovCi0jZGVmaW5lIFVBUlRfSUVSX1RIUkkJMHgwMgkvKiBFbmFibGUgVHJhbnNtaXR0ZXIgaG9sZGluZyByZWdpc3RlciBpbnQuICovCi0jZGVmaW5lIFVBUlRfSUVSX1JESQkweDAxCS8qIEVuYWJsZSByZWNlaXZlciBkYXRhIGludGVycnVwdCAqLwotCi0vKgotICogVGhlc2UgYXJlIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIKLSAqLwotI2RlZmluZSBVQVJUX01DUl9MT09QCTB4MTAJLyogRW5hYmxlIGxvb3BiYWNrIHRlc3QgbW9kZSAqLwotI2RlZmluZSBVQVJUX01DUl9PVVQyCTB4MDgJLyogT3V0MiBjb21wbGVtZW50ICovCi0jZGVmaW5lIFVBUlRfTUNSX09VVDEJMHgwNAkvKiBPdXQxIGNvbXBsZW1lbnQgKi8KLSNkZWZpbmUgVUFSVF9NQ1JfUlRTCTB4MDIJLyogUlRTIGNvbXBsZW1lbnQgKi8KLSNkZWZpbmUgVUFSVF9NQ1JfRFRSCTB4MDEJLyogRFRSIGNvbXBsZW1lbnQgKi8KLQotLyoKLSAqIFRoZXNlIGFyZSB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBNb2RlbSBTdGF0dXMgUmVnaXN0ZXIKLSAqLwotI2RlZmluZSBVQVJUX01TUl9EQ0QJMHg4MAkvKiBEYXRhIENhcnJpZXIgRGV0ZWN0ICovCi0jZGVmaW5lIFVBUlRfTVNSX1JJCTB4NDAJLyogUmluZyBJbmRpY2F0b3IgKi8KLSNkZWZpbmUgVUFSVF9NU1JfRFNSCTB4MjAJLyogRGF0YSBTZXQgUmVhZHkgKi8KLSNkZWZpbmUgVUFSVF9NU1JfQ1RTCTB4MTAJLyogQ2xlYXIgdG8gU2VuZCAqLwotI2RlZmluZSBVQVJUX01TUl9ERENECTB4MDgJLyogRGVsdGEgRENEICovCi0jZGVmaW5lIFVBUlRfTVNSX1RFUkkJMHgwNAkvKiBUcmFpbGluZyBlZGdlIHJpbmcgaW5kaWNhdG9yICovCi0jZGVmaW5lIFVBUlRfTVNSX0REU1IJMHgwMgkvKiBEZWx0YSBEU1IgKi8KLSNkZWZpbmUgVUFSVF9NU1JfRENUUwkweDAxCS8qIERlbHRhIENUUyAqLwotI2RlZmluZSBVQVJUX01TUl9BTllfREVMVEEgMHgwRgkvKiBBbnkgb2YgdGhlIGRlbHRhIGJpdHMhICovCi0KIC8qIFNTSU8gKi8KICNkZWZpbmUgU1NJMF9TVEFUVVMJCTB4QjE2MDAwMDAKICMgIGRlZmluZSBTU0lfU1RBVFVTX0JGIAkoMSA8PCA0KQpAQCAtMTcyMCw3ICsxNjU5LDcgQEAKICNkZWZpbmUgSU9QT1JUX1JFU09VUkNFX1NUQVJUCTB4MDAwMDEwMDAJLyogc2tpcCBsZWdhY3kgcHJvYmluZyAqLwogI2RlZmluZSBJT1BPUlRfUkVTT1VSQ0VfRU5ECTB4ZmZmZmZmZmYKICNkZWZpbmUgSU9NRU1fUkVTT1VSQ0VfU1RBUlQJMHgxMDAwMDAwMAotI2RlZmluZSBJT01FTV9SRVNPVVJDRV9FTkQJMHhmZmZmZmZmZgorI2RlZmluZSBJT01FTV9SRVNPVVJDRV9FTkQJMHhmZmZmZmZmZmZVTEwKIAogI2Vsc2UgLyogQXUxMDAwIGFuZCBBdTExMDAgYW5kIEF1MTIwMCAqLwogCkBAIC0xNzI4LDcgKzE2NjcsNyBAQAogI2RlZmluZSBJT1BPUlRfUkVTT1VSQ0VfU1RBUlQJMHgxMDAwMDAwMAogI2RlZmluZSBJT1BPUlRfUkVTT1VSQ0VfRU5ECTB4ZmZmZmZmZmYKICNkZWZpbmUgSU9NRU1fUkVTT1VSQ0VfU1RBUlQJMHgxMDAwMDAwMAotI2RlZmluZSBJT01FTV9SRVNPVVJDRV9FTkQJMHhmZmZmZmZmZgorI2RlZmluZSBJT01FTV9SRVNPVVJDRV9FTkQJMHhmZmZmZmZmZmZVTEwKIAogI2RlZmluZSBQQ0lfSU9fU1RBUlQJMAogI2RlZmluZSBQQ0lfSU9fRU5ECTAKQEAgLTE3MzksNTMgKzE2NzgsNCBAQAogCiAjZW5kaWYKIAotI2lmbmRlZiBfTEFOR1VBR0VfQVNTRU1CTFkKLXR5cGVkZWYgdm9sYXRpbGUgc3RydWN0IHsKLQkvKiAweDAwMDAgKi8gdTMyIHRveXRyaW07Ci0JLyogMHgwMDA0ICovIHUzMiB0b3l3cml0ZTsKLQkvKiAweDAwMDggKi8gdTMyIHRveW1hdGNoMDsKLQkvKiAweDAwMEMgKi8gdTMyIHRveW1hdGNoMTsKLQkvKiAweDAwMTAgKi8gdTMyIHRveW1hdGNoMjsKLQkvKiAweDAwMTQgKi8gdTMyIGNudHJjdHJsOwotCS8qIDB4MDAxOCAqLyB1MzIgc2NyYXRjaDA7Ci0JLyogMHgwMDFDICovIHUzMiBzY3JhdGNoMTsKLQkvKiAweDAwMjAgKi8gdTMyIGZyZXFjdHJsMDsKLQkvKiAweDAwMjQgKi8gdTMyIGZyZXFjdHJsMTsKLQkvKiAweDAwMjggKi8gdTMyIGNsa3NyYzsKLQkvKiAweDAwMkMgKi8gdTMyIHBpbmZ1bmM7Ci0JLyogMHgwMDMwICovIHUzMiByZXNlcnZlZDA7Ci0JLyogMHgwMDM0ICovIHUzMiB3YWtlbXNrOwotCS8qIDB4MDAzOCAqLyB1MzIgZW5kaWFuOwotCS8qIDB4MDAzQyAqLyB1MzIgcG93ZXJjdHJsOwotCS8qIDB4MDA0MCAqLyB1MzIgdG95cmVhZDsKLQkvKiAweDAwNDQgKi8gdTMyIHJ0Y3RyaW07Ci0JLyogMHgwMDQ4ICovIHUzMiBydGN3cml0ZTsKLQkvKiAweDAwNEMgKi8gdTMyIHJ0Y21hdGNoMDsKLQkvKiAweDAwNTAgKi8gdTMyIHJ0Y21hdGNoMTsKLQkvKiAweDAwNTQgKi8gdTMyIHJ0Y21hdGNoMjsKLQkvKiAweDAwNTggKi8gdTMyIHJ0Y3JlYWQ7Ci0JLyogMHgwMDVDICovIHUzMiB3YWtlc3JjOwotCS8qIDB4MDA2MCAqLyB1MzIgY3B1cGxsOwotCS8qIDB4MDA2NCAqLyB1MzIgYXV4cGxsOwotCS8qIDB4MDA2OCAqLyB1MzIgcmVzZXJ2ZWQxOwotCS8qIDB4MDA2QyAqLyB1MzIgcmVzZXJ2ZWQyOwotCS8qIDB4MDA3MCAqLyB1MzIgcmVzZXJ2ZWQzOwotCS8qIDB4MDA3NCAqLyB1MzIgcmVzZXJ2ZWQ0OwotCS8qIDB4MDA3OCAqLyB1MzIgc2xwcHdyOwotCS8qIDB4MDA3QyAqLyB1MzIgc2xlZXA7Ci0JLyogMHgwMDgwICovIHUzMiByZXNlcnZlZDVbMzJdOwotCS8qIDB4MDEwMCAqLyB1MzIgdHJpb3V0cmQ7Ci0jZGVmaW5lIHRyaW91dGNsciB0cmlvdXRyZAotCS8qIDB4MDEwNCAqLyB1MzIgcmVzZXJ2ZWQ2OwotCS8qIDB4MDEwOCAqLyB1MzIgb3V0cHV0cmQ7Ci0jZGVmaW5lIG91dHB1dHNldCBvdXRwdXRyZAotCS8qIDB4MDEwQyAqLyB1MzIgb3V0cHV0Y2xyOwotCS8qIDB4MDExMCAqLyB1MzIgcGluc3RhdGVyZDsKLSNkZWZpbmUgcGluaW5wdXRlbiBwaW5zdGF0ZXJkCi19IEFVMVgwMF9TWVM7Ci0KLXN0YXRpYyBBVTFYMDBfU1lTICogY29uc3Qgc3lzID0gKEFVMVgwMF9TWVMgKilTWVNfQkFTRTsKLQotI2VuZGlmCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTEwMF9tbWMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTExMDBfbW1jLmgKaW5kZXggYzM1ZTIwOS4uOTQwMDBhMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTEwMF9tbWMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxMTAwX21tYy5oCkBAIC00Niw2ICs0Niw3IEBACiAJaW50KCpjYXJkX3JlYWRvbmx5KSh2b2lkICptbWNfaG9zdCk7CiAJdm9pZCgqc2V0X3Bvd2VyKSh2b2lkICptbWNfaG9zdCwgaW50IHN0YXRlKTsKIAlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWQ7CisJdW5zaWduZWQgbG9uZyBtYXNrX2hvc3RfY2FwczsKIH07CiAKICNkZWZpbmUgU0QwX0JBU0UJMHhCMDYwMDAwMApAQCAtMjA1LDQgKzIwNiwzIEBACiAKIAogI2VuZGlmIC8qIF9fQVNNX0FVMTEwMF9NTUNfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmgKaW5kZXggZDIwNjAwMC4uOGM2YjExMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MXh4eF9kYmRtYS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZGJkbWEuaApAQCAtMzM5LDggKzMzOSw4IEBACiB1MzIgYXUxeHh4X2RiZG1hX3JpbmdfYWxsb2ModTMyIGNoYW5pZCwgaW50IGVudHJpZXMpOwogCiAvKiBQdXQgYnVmZmVycyBvbiBzb3VyY2UvZGVzdGluYXRpb24gZGVzY3JpcHRvcnMuICovCi11MzIgX2F1MXh4eF9kYmRtYV9wdXRfc291cmNlKHUzMiBjaGFuaWQsIHZvaWQgKmJ1ZiwgaW50IG5ieXRlcywgdTMyIGZsYWdzKTsKLXUzMiBfYXUxeHh4X2RiZG1hX3B1dF9kZXN0KHUzMiBjaGFuaWQsIHZvaWQgKmJ1ZiwgaW50IG5ieXRlcywgdTMyIGZsYWdzKTsKK3UzMiBhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZSh1MzIgY2hhbmlkLCBkbWFfYWRkcl90IGJ1ZiwgaW50IG5ieXRlcywgdTMyIGZsYWdzKTsKK3UzMiBhdTF4eHhfZGJkbWFfcHV0X2Rlc3QodTMyIGNoYW5pZCwgZG1hX2FkZHJfdCBidWYsIGludCBuYnl0ZXMsIHUzMiBmbGFncyk7CiAKIC8qIEdldCBhIGJ1ZmZlciBmcm9tIHRoZSBkZXN0aW5hdGlvbiBkZXNjcmlwdG9yLiAqLwogdTMyIGF1MXh4eF9kYmRtYV9nZXRfZGVzdCh1MzIgY2hhbmlkLCB2b2lkICoqYnVmLCBpbnQgKm5ieXRlcyk7CkBAIC0zNjMsMjUgKzM2Myw2IEBACiB2b2lkIGF1MXh4eF9kYmRtYV9yZXN1bWUodm9pZCk7CiAjZW5kaWYKIAotCi0vKgotICogU29tZSBjb21wYXRpYmlsdHkgbWFjcm9zIC0tIG5lZWRlZCB0byBtYWtlIGNoYW5nZXMgdG8gQVBJCi0gKiB3aXRob3V0IGJyZWFraW5nIGV4aXN0aW5nIGRyaXZlcnMuCi0gKi8KLSNkZWZpbmUgYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoY2hhbmlkLCBidWYsIG5ieXRlcykJCQlcCi0JX2F1MXh4eF9kYmRtYV9wdXRfc291cmNlKGNoYW5pZCwgYnVmLCBuYnl0ZXMsIERETUFfRkxBR1NfSUUpCi0jZGVmaW5lIGF1MXh4eF9kYmRtYV9wdXRfc291cmNlX2ZsYWdzKGNoYW5pZCwgYnVmLCBuYnl0ZXMsIGZsYWdzKQlcCi0JX2F1MXh4eF9kYmRtYV9wdXRfc291cmNlKGNoYW5pZCwgYnVmLCBuYnl0ZXMsIGZsYWdzKQotI2RlZmluZSBwdXRfc291cmNlX2ZsYWdzKGNoYW5pZCwgYnVmLCBuYnl0ZXMsIGZsYWdzKQkJCVwKLQlhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZV9mbGFncyhjaGFuaWQsIGJ1ZiwgbmJ5dGVzLCBmbGFncykKLQotI2RlZmluZSBhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoY2hhbmlkLCBidWYsIG5ieXRlcykJCQlcCi0JX2F1MXh4eF9kYmRtYV9wdXRfZGVzdChjaGFuaWQsIGJ1ZiwgbmJ5dGVzLCBERE1BX0ZMQUdTX0lFKQotI2RlZmluZSBhdTF4eHhfZGJkbWFfcHV0X2Rlc3RfZmxhZ3MoY2hhbmlkLCBidWYsIG5ieXRlcywgZmxhZ3MpIAlcCi0JX2F1MXh4eF9kYmRtYV9wdXRfZGVzdChjaGFuaWQsIGJ1ZiwgbmJ5dGVzLCBmbGFncykKLSNkZWZpbmUgcHV0X2Rlc3RfZmxhZ3MoY2hhbmlkLCBidWYsIG5ieXRlcywgZmxhZ3MpCQkJXAotCWF1MXh4eF9kYmRtYV9wdXRfZGVzdF9mbGFncyhjaGFuaWQsIGJ1ZiwgbmJ5dGVzLCBmbGFncykKLQogLyoKICAqCUZsYWdzIGZvciB0aGUgcHV0X3NvdXJjZS9wdXRfZGVzdCBmdW5jdGlvbnMuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZXRoLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxeHh4X2V0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZTliNzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxeHh4X2V0aC5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX19BVTFYMDBfRVRIX0RBVEFfSAorI2RlZmluZSBfX0FVMVgwMF9FVEhfREFUQV9ICisKKy8qIFBsYXRmb3JtIHNwZWNpZmljIFBIWSBjb25maWd1cmF0aW9uIHBhc3NlZCB0byB0aGUgTUFDIGRyaXZlciAqLworc3RydWN0IGF1MTAwMF9ldGhfcGxhdGZvcm1fZGF0YSB7CisJaW50IHBoeV9zdGF0aWNfY29uZmlnOworCWludCBwaHlfc2VhcmNoX2hpZ2hlc3RfYWRkcjsKKwlpbnQgcGh5MV9zZWFyY2hfbWFjMDsKKwlpbnQgcGh5X2FkZHI7CisJaW50IHBoeV9idXNpZDsKKwlpbnQgcGh5X2lycTsKK307CisKK3ZvaWQgX19pbml0IGF1MXh4eF9vdmVycmlkZV9ldGhfY2ZnKHVuc2lnbmVkIHBvcnQsCisJCQlzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhICpldGhfZGF0YSk7CisKKyNlbmRpZiAvKiBfX0FVMVgwMF9FVEhfREFUQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby1hdTEwMDAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oCmluZGV4IDkxNTk1ZmEuLjYyZDJmMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oCkBAIC0zNSwxNSArMzUsMTMgQEAKIAlyZXR1cm4gLUVOWElPOwogfQogCi0jaWZkZWYgQ09ORklHX1NPQ19BVTEwMDAKIHN0YXRpYyBpbmxpbmUgaW50IGF1MTAwMF9pcnFfdG9fZ3BpbyhpbnQgaXJxKQogewotCWlmICgoaXJxID49IEFVMTAwMF9HUElPXzApICYmIChpcnEgPD0gQVUxMDAwX0dQSU9fMzEpKQotCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTAwMF9HUElPXzApICsgMDsKKwlpZiAoKGlycSA+PSBBVTEwMDBfR1BJTzBfSU5UKSAmJiAoaXJxIDw9IEFVMTAwMF9HUElPMzFfSU5UKSkKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzFfQkFTRSArIChpcnEgLSBBVTEwMDBfR1BJTzBfSU5UKSArIDA7CiAKIAlyZXR1cm4gLUVOWElPOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgaW50IGF1MTUwMF9ncGlvMV90b19pcnEoaW50IGdwaW8pCiB7CkBAIC03MSwyNyArNjksMjUgQEAKIAlyZXR1cm4gLUVOWElPOwogfQogCi0jaWZkZWYgQ09ORklHX1NPQ19BVTE1MDAKIHN0YXRpYyBpbmxpbmUgaW50IGF1MTUwMF9pcnFfdG9fZ3BpbyhpbnQgaXJxKQogewogCXN3aXRjaCAoaXJxKSB7Ci0JY2FzZSBBVTEwMDBfR1BJT18wIC4uLiBBVTEwMDBfR1BJT18xNToKLQljYXNlIEFVMTUwMF9HUElPXzIwOgotCWNhc2UgQVUxNTAwX0dQSU9fMjMgLi4uIEFVMTUwMF9HUElPXzI4OgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTAwMF9HUElPXzApICsgMDsKLQljYXNlIEFVMTUwMF9HUElPXzIwMCAuLi4gQVUxNTAwX0dQSU9fMjAzOgotCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTUwMF9HUElPXzIwMCkgKyAwOwotCWNhc2UgQVUxNTAwX0dQSU9fMjA0IC4uLiBBVTE1MDBfR1BJT18yMDU6Ci0JCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxNTAwX0dQSU9fMjA0KSArIDQ7Ci0JY2FzZSBBVTE1MDBfR1BJT18yMDYgLi4uIEFVMTUwMF9HUElPXzIwNzoKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTE1MDBfR1BJT18yMDYpICsgNjsKLQljYXNlIEFVMTUwMF9HUElPXzIwOF8yMTU6CisJY2FzZSBBVTE1MDBfR1BJTzBfSU5UIC4uLiBBVTE1MDBfR1BJTzE1X0lOVDoKKwljYXNlIEFVMTUwMF9HUElPMjBfSU5UOgorCWNhc2UgQVUxNTAwX0dQSU8yM19JTlQgLi4uIEFVMTUwMF9HUElPMjhfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTUwMF9HUElPMF9JTlQpICsgMDsKKwljYXNlIEFVMTUwMF9HUElPMjAwX0lOVCAuLi4gQVUxNTAwX0dQSU8yMDNfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTUwMF9HUElPMjAwX0lOVCkgKyAwOworCWNhc2UgQVUxNTAwX0dQSU8yMDRfSU5UIC4uLiBBVTE1MDBfR1BJTzIwNV9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxNTAwX0dQSU8yMDRfSU5UKSArIDQ7CisJY2FzZSBBVTE1MDBfR1BJTzIwNl9JTlQgLi4uIEFVMTUwMF9HUElPMjA3X0lOVDoKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTE1MDBfR1BJTzIwNl9JTlQpICsgNjsKKwljYXNlIEFVMTUwMF9HUElPMjA4XzIxNV9JTlQ6CiAJCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyA4OwogCX0KIAogCXJldHVybiAtRU5YSU87CiB9Ci0jZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQgYXUxMTAwX2dwaW8xX3RvX2lycShpbnQgZ3BpbykKIHsKQEAgLTEwOCwxOSArMTA0LDE3IEBACiAJcmV0dXJuIC1FTlhJTzsKIH0KIAotI2lmZGVmIENPTkZJR19TT0NfQVUxMTAwCiBzdGF0aWMgaW5saW5lIGludCBhdTExMDBfaXJxX3RvX2dwaW8oaW50IGlycSkKIHsKIAlzd2l0Y2ggKGlycSkgewotCWNhc2UgQVUxMDAwX0dQSU9fMCAuLi4gQVUxMDAwX0dQSU9fMzE6Ci0JCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxMDAwX0dQSU9fMCkgKyAwOwotCWNhc2UgQVUxMTAwX0dQSU9fMjA4XzIxNToKKwljYXNlIEFVMTEwMF9HUElPMF9JTlQgLi4uIEFVMTEwMF9HUElPMzFfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTEwMF9HUElPMF9JTlQpICsgMDsKKwljYXNlIEFVMTEwMF9HUElPMjA4XzIxNV9JTlQ6CiAJCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyA4OwogCX0KIAogCXJldHVybiAtRU5YSU87CiB9Ci0jZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQgYXUxNTUwX2dwaW8xX3RvX2lycShpbnQgZ3BpbykKIHsKQEAgLTE0OSwyNCArMTQzLDIyIEBACiAJcmV0dXJuIC1FTlhJTzsKIH0KIAotI2lmZGVmIENPTkZJR19TT0NfQVUxNTUwCiBzdGF0aWMgaW5saW5lIGludCBhdTE1NTBfaXJxX3RvX2dwaW8oaW50IGlycSkKIHsKIAlzd2l0Y2ggKGlycSkgewotCWNhc2UgQVUxMDAwX0dQSU9fMCAuLi4gQVUxMDAwX0dQSU9fMTU6Ci0JCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxMDAwX0dQSU9fMCkgKyAwOwotCWNhc2UgQVUxNTUwX0dQSU9fMjAwOgotCWNhc2UgQVUxNTAwX0dQSU9fMjAxXzIwNToKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTE1NTBfR1BJT18yMDApICsgMDsKLQljYXNlIEFVMTUwMF9HUElPXzE2IC4uLiBBVTE1MDBfR1BJT18yODoKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzFfQkFTRSArIChpcnEgLSBBVTE1MDBfR1BJT18xNikgKyAxNjsKLQljYXNlIEFVMTUwMF9HUElPXzIwNiAuLi4gQVUxNTAwX0dQSU9fMjA4XzIxODoKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTE1MDBfR1BJT18yMDYpICsgNjsKKwljYXNlIEFVMTU1MF9HUElPMF9JTlQgLi4uIEFVMTU1MF9HUElPMTVfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTU1MF9HUElPMF9JTlQpICsgMDsKKwljYXNlIEFVMTU1MF9HUElPMjAwX0lOVDoKKwljYXNlIEFVMTU1MF9HUElPMjAxXzIwNV9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxNTUwX0dQSU8yMDBfSU5UKSArIDA7CisJY2FzZSBBVTE1NTBfR1BJTzE2X0lOVCAuLi4gQVUxNTUwX0dQSU8yOF9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8xX0JBU0UgKyAoaXJxIC0gQVUxNTUwX0dQSU8xNl9JTlQpICsgMTY7CisJY2FzZSBBVTE1NTBfR1BJTzIwNl9JTlQgLi4uIEFVMTU1MF9HUElPMjA4XzIxNV9JTlQ6CisJCXJldHVybiBBTENIRU1ZX0dQSU8yX0JBU0UgKyAoaXJxIC0gQVUxNTUwX0dQSU8yMDZfSU5UKSArIDY7CiAJfQogCiAJcmV0dXJuIC1FTlhJTzsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIGludCBhdTEyMDBfZ3BpbzFfdG9faXJxKGludCBncGlvKQogewpAQCAtMTg3LDIzICsxNzksMjEgQEAKIAlyZXR1cm4gLUVOWElPOwogfQogCi0jaWZkZWYgQ09ORklHX1NPQ19BVTEyMDAKIHN0YXRpYyBpbmxpbmUgaW50IGF1MTIwMF9pcnFfdG9fZ3BpbyhpbnQgaXJxKQogewogCXN3aXRjaCAoaXJxKSB7Ci0JY2FzZSBBVTEwMDBfR1BJT18wIC4uLiBBVTEwMDBfR1BJT18zMToKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzFfQkFTRSArIChpcnEgLSBBVTEwMDBfR1BJT18wKSArIDA7Ci0JY2FzZSBBVTEyMDBfR1BJT18yMDAgLi4uIEFVMTIwMF9HUElPXzIwMjoKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTEyMDBfR1BJT18yMDApICsgMDsKLQljYXNlIEFVMTIwMF9HUElPXzIwMzoKKwljYXNlIEFVMTIwMF9HUElPMF9JTlQgLi4uIEFVMTIwMF9HUElPMzFfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMV9CQVNFICsgKGlycSAtIEFVMTIwMF9HUElPMF9JTlQpICsgMDsKKwljYXNlIEFVMTIwMF9HUElPMjAwX0lOVCAuLi4gQVUxMjAwX0dQSU8yMDJfSU5UOgorCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgKGlycSAtIEFVMTIwMF9HUElPMjAwX0lOVCkgKyAwOworCWNhc2UgQVUxMjAwX0dQSU8yMDNfSU5UOgogCQlyZXR1cm4gQUxDSEVNWV9HUElPMl9CQVNFICsgMzsKLQljYXNlIEFVMTIwMF9HUElPXzIwNCAuLi4gQVUxMjAwX0dQSU9fMjA4XzIxNToKLQkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTEyMDBfR1BJT18yMDQpICsgNDsKKwljYXNlIEFVMTIwMF9HUElPMjA0X0lOVCAuLi4gQVUxMjAwX0dQSU8yMDhfMjE1X0lOVDoKKwkJcmV0dXJuIEFMQ0hFTVlfR1BJTzJfQkFTRSArIChpcnEgLSBBVTEyMDBfR1BJTzIwNF9JTlQpICsgNDsKIAl9CiAKIAlyZXR1cm4gLUVOWElPOwogfQotI2VuZGlmCiAKIC8qCiAgKiBHUElPMSBibG9jayBtYWNyb3MgZm9yIGNvbW1vbiBsaW51eCBncGlvIGZ1bmN0aW9ucy4KQEAgLTI0NiwxOSArMjM2LDE5IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGFsY2hlbXlfZ3BpbzFfdG9faXJxKGludCBncGlvKQogewotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JcmV0dXJuIGF1MTAwMF9ncGlvMV90b19pcnEoZ3Bpbyk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMTAwKQotCXJldHVybiBhdTExMDBfZ3BpbzFfdG9faXJxKGdwaW8pOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTUwMCkKLQlyZXR1cm4gYXUxNTAwX2dwaW8xX3RvX2lycShncGlvKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1NTApCi0JcmV0dXJuIGF1MTU1MF9ncGlvMV90b19pcnEoZ3Bpbyk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMjAwKQotCXJldHVybiBhdTEyMDBfZ3BpbzFfdG9faXJxKGdwaW8pOwotI2Vsc2UKKwlzd2l0Y2ggKGFsY2hlbXlfZ2V0X2NwdXR5cGUoKSkgeworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMDAwOgorCQlyZXR1cm4gYXUxMDAwX2dwaW8xX3RvX2lycShncGlvKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTEwMDoKKwkJcmV0dXJuIGF1MTEwMF9ncGlvMV90b19pcnEoZ3Bpbyk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1MDA6CisJCXJldHVybiBhdTE1MDBfZ3BpbzFfdG9faXJxKGdwaW8pOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTUwOgorCQlyZXR1cm4gYXUxNTUwX2dwaW8xX3RvX2lycShncGlvKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTIwMDoKKwkJcmV0dXJuIGF1MTIwMF9ncGlvMV90b19pcnEoZ3Bpbyk7CisJfQogCXJldHVybiAtRU5YSU87Ci0jZW5kaWYKIH0KIAogLyoKQEAgLTMxNiwxOSArMzA2LDE5IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGFsY2hlbXlfZ3BpbzJfdG9faXJxKGludCBncGlvKQogewotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JcmV0dXJuIGF1MTAwMF9ncGlvMl90b19pcnEoZ3Bpbyk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMTAwKQotCXJldHVybiBhdTExMDBfZ3BpbzJfdG9faXJxKGdwaW8pOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTUwMCkKLQlyZXR1cm4gYXUxNTAwX2dwaW8yX3RvX2lycShncGlvKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1NTApCi0JcmV0dXJuIGF1MTU1MF9ncGlvMl90b19pcnEoZ3Bpbyk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMjAwKQotCXJldHVybiBhdTEyMDBfZ3BpbzJfdG9faXJxKGdwaW8pOwotI2Vsc2UKKwlzd2l0Y2ggKGFsY2hlbXlfZ2V0X2NwdXR5cGUoKSkgeworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMDAwOgorCQlyZXR1cm4gYXUxMDAwX2dwaW8yX3RvX2lycShncGlvKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTEwMDoKKwkJcmV0dXJuIGF1MTEwMF9ncGlvMl90b19pcnEoZ3Bpbyk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1MDA6CisJCXJldHVybiBhdTE1MDBfZ3BpbzJfdG9faXJxKGdwaW8pOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTUwOgorCQlyZXR1cm4gYXUxNTUwX2dwaW8yX3RvX2lycShncGlvKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTIwMDoKKwkJcmV0dXJuIGF1MTIwMF9ncGlvMl90b19pcnEoZ3Bpbyk7CisJfQogCXJldHVybiAtRU5YSU87Ci0jZW5kaWYKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zODQsMTAgKzM3NCwxMyBAQAogCiAJZ3BpbzIgLT0gQUxDSEVNWV9HUElPMl9CQVNFOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTEwMCkgfHwgZGVmaW5lZChDT05GSUdfU09DX0FVMTUwMCkKIAkvKiBBdTExMDAvQXUxNTAwIGhhdmUgR1BJTzIwOC0yMTUgZW5hYmxlIGJpdHMgYXQgMC4uNyAqLwotCWdwaW8yIC09IDg7Ci0jZW5kaWYKKwlzd2l0Y2ggKGFsY2hlbXlfZ2V0X2NwdXR5cGUoKSkgeworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMTAwOgorCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTAwOgorCQlncGlvMiAtPSA4OworCX0KKwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlfX2FsY2hlbXlfZ3BpbzJfbW9kX2ludChncGlvMiwgMSk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtNDA1LDEwICszOTgsMTMgQEAKIAogCWdwaW8yIC09IEFMQ0hFTVlfR1BJTzJfQkFTRTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTExMDApIHx8IGRlZmluZWQoQ09ORklHX1NPQ19BVTE1MDApCiAJLyogQXUxMTAwL0F1MTUwMCBoYXZlIEdQSU8yMDgtMjE1IGVuYWJsZSBiaXRzIGF0IDAuLjcgKi8KLQlncGlvMiAtPSA4OwotI2VuZGlmCisJc3dpdGNoIChhbGNoZW15X2dldF9jcHV0eXBlKCkpIHsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTEwMDoKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTUwMDoKKwkJZ3BpbzIgLT0gODsKKwl9CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJX19hbGNoZW15X2dwaW8yX21vZF9pbnQoZ3BpbzIsIDApOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTQ5NCwxOSArNDkwLDE5IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGFsY2hlbXlfaXJxX3RvX2dwaW8oaW50IGlycSkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCXJldHVybiBhdTEwMDBfaXJxX3RvX2dwaW8oaXJxKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTExMDApCi0JcmV0dXJuIGF1MTEwMF9pcnFfdG9fZ3BpbyhpcnEpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTUwMCkKLQlyZXR1cm4gYXUxNTAwX2lycV90b19ncGlvKGlycSk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTUwKQotCXJldHVybiBhdTE1NTBfaXJxX3RvX2dwaW8oaXJxKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApCi0JcmV0dXJuIGF1MTIwMF9pcnFfdG9fZ3BpbyhpcnEpOwotI2Vsc2UKKwlzd2l0Y2ggKGFsY2hlbXlfZ2V0X2NwdXR5cGUoKSkgeworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMDAwOgorCQlyZXR1cm4gYXUxMDAwX2lycV90b19ncGlvKGlycSk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTExMDA6CisJCXJldHVybiBhdTExMDBfaXJxX3RvX2dwaW8oaXJxKTsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTUwMDoKKwkJcmV0dXJuIGF1MTUwMF9pcnFfdG9fZ3BpbyhpcnEpOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTUwOgorCQlyZXR1cm4gYXUxNTUwX2lycV90b19ncGlvKGlycSk7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTEyMDA6CisJCXJldHVybiBhdTEyMDBfaXJxX3RvX2dwaW8oaXJxKTsKKwl9CiAJcmV0dXJuIC1FTlhJTzsKLSNlbmRpZgogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby5oCmluZGV4IGY5YjdkNDEuLmMzZjYwY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8uaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX0FMQ0hFTVlfR1BJT19IXwogI2RlZmluZSBfQUxDSEVNWV9HUElPX0hfCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BTENIRU1ZX0dQSU9fQVUxMDAwKQorI2lmIGRlZmluZWQoQ09ORklHX0FMQ0hFTVlfR1BJT0lOVF9BVTEwMDApCiAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvZ3Bpby1hdTEwMDAuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2lvcmVtYXAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9pb3JlbWFwLmgKaW5kZXggMzY0Y2VhMi4uNzVhOTRhZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2lvcmVtYXAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvaW9yZW1hcC5oCkBAIC0xMSw3ICsxMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jaWZkZWYgQ09ORklHXzY0QklUX1BIWVNfQUREUgorI2lmIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgJiYgZGVmaW5lZChDT05GSUdfUENJKQogZXh0ZXJuIHBoeXNfdCBfX2ZpeHVwX2JpZ3BoeXNfYWRkcihwaHlzX3QsIHBoeXNfdCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBwaHlzX3QgX19maXh1cF9iaWdwaHlzX2FkZHIocGh5c190IHBoeXNfYWRkciwgcGh5c190IHNpemUpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvcHJvbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL3Byb20uaAppbmRleCBlMzg3MTU1Li40YzBlMDljIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvcHJvbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9wcm9tLmgKQEAgLTYsNyArNiw2IEBACiBleHRlcm4gY2hhciAqKnByb21fZW52cDsKIAogZXh0ZXJuIHZvaWQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCk7Ci1leHRlcm4gY2hhciAqcHJvbV9nZXRjbWRsaW5lKHZvaWQpOwogZXh0ZXJuIGNoYXIgKnByb21fZ2V0ZW52KGNoYXIgKmVudm5hbWUpOwogZXh0ZXJuIGludCBwcm9tX2dldF9ldGhlcm5ldF9hZGRyKGNoYXIgKmV0aGVybmV0X2FkZHIpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTYzeHhfcmVncy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY202M3h4X3JlZ3MuaAppbmRleCBlZDRjY2VjLi44NWZkMjc1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTYzeHhfcmVncy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtNjN4eF9yZWdzLmgKQEAgLTc3MCw0ICs3NzAsMyBAQAogI2RlZmluZSBETUlQU1BMTENGR19OMl9NQVNLCQkoMHg3IDw8IERNSVBTUExMQ0ZHX04yX1NISUZUKQogCiAjZW5kaWYgLyogQkNNNjNYWF9SRUdTX0hfICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWNhdml1bS1vY3Rlb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1jYXZpdW0tb2N0ZW9uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCmluZGV4IDQyNWU3MDguLmJiZjA1NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWNhdml1bS1vY3Rlb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtY2F2aXVtLW9jdGVvbi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtNTgsNiArNTgsOSBAQAogI2RlZmluZSBjcHVfaGFzX3ZpbnQJCTAKICNkZWZpbmUgY3B1X2hhc192ZWljCQkwCiAjZGVmaW5lIGNwdV9od3JlbmFfaW1wbF9iaXRzCTB4YzAwMDAwMDAKKworI2RlZmluZSBrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSAoY3B1X2RhdGFbMF0uY3B1dHlwZSA9PSBDUFVfQ0FWSVVNX09DVEVPTl9QTFVTKQorCiAjZGVmaW5lIEFSQ0hfSEFTX1JFQURfQ1VSUkVOVF9USU1FUiAxCiAjZGVmaW5lIEFSQ0hfSEFTX0lSUV9QRVJfQ1BVCTEKICNkZWZpbmUgQVJDSF9IQVNfU1BJTkxPQ0tfUFJFRkVUQ0ggMQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2Jjc3IuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMC9iY3NyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE4ZDJkZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMC9iY3NyLmgKQEAgLTAsMCArMSwyMzggQEAKKy8qCisgKiBiY3NyLmggLS0gRGIxeHh4L1BiMXh4eCBEZXZib2FyZCBDUExEIHJlZ2lzdGVycyAoIkJDU1IiKSBhYnN0cmFjdGlvbi4KKyAqCisgKiBBbGwgQWxjaGVteSBkZXZlbG9wbWVudCBib2FyZHMgKGV4Y2VwdCwgb2YgY291cnNlLCB0aGUgd2VpcmQgUEIxMDAwKQorICogaGF2ZSBhIGZldyByZWdpc3RlcnMgaW4gYSBDUExEIHdpdGggc3RhbmRhcmRpc2VkIGxheW91dDsgdGhleSBtb3N0bHkKKyAqIG9ubHkgZGlmZmVyIGluIGJhc2UgYWRkcmVzcyBhbmQgYml0IG1lYW5pbmdzIGluIHRoZSBSRVNFVFMgYW5kIEJPQVJECisgKiByZWdpc3RlcnMuCisgKgorICogQWxsIGRhdGEgdGFrZW4gZnJvbSB0aGUgb2ZmaWNpYWwgQU1EIGJvYXJkIGRvY3VtZW50YXRpb24gc2hlZXRzLgorICovCisKKyNpZm5kZWYgX0RCMVhYWF9CQ1NSX0hfCisjZGVmaW5lIF9EQjFYWFhfQkNTUl9IXworCisKKy8qIEJDU1IgYmFzZSBhZGRyZXNzZXMgb24gdmFyaW91cyBib2FyZHMuIEJDU1IgYmFzZSAyIHJlZmVycyB0byB0aGUKKyAqIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IEhFWExFRFMgcmVnaXN0ZXIsIHdoaWNoIGlzIHVzdWFsbHkKKyAqIGEgdmFyaWFibGUgb2Zmc2V0IGZyb20gdGhlIFdIT0FNSSByZWdpc3Rlci4KKyAqLworCisvKiBEQjEwMDAsIERCMTEwMCwgREIxNTAwLCBQQjExMDAsIFBCMTUwMCAqLworI2RlZmluZSBEQjEwMDBfQkNTUl9QSFlTX0FERFIJMHgwRTAwMDAwMAorI2RlZmluZSBEQjEwMDBfQkNTUl9IRVhMRURfT0ZTCTB4MDEwMDAwMDAKKworI2RlZmluZSBEQjE1NTBfQkNTUl9QSFlTX0FERFIJMHgwRjAwMDAwMAorI2RlZmluZSBEQjE1NTBfQkNTUl9IRVhMRURfT0ZTCTB4MDA0MDAwMDAKKworI2RlZmluZSBQQjE1NTBfQkNTUl9QSFlTX0FERFIJMHgwRjAwMDAwMAorI2RlZmluZSBQQjE1NTBfQkNTUl9IRVhMRURfT0ZTCTB4MDA4MDAwMDAKKworI2RlZmluZSBEQjEyMDBfQkNTUl9QSFlTX0FERFIJMHgxOTgwMDAwMAorI2RlZmluZSBEQjEyMDBfQkNTUl9IRVhMRURfT0ZTCTB4MDA0MDAwMDAKKworI2RlZmluZSBQQjEyMDBfQkNTUl9QSFlTX0FERFIJMHgwRDgwMDAwMAorI2RlZmluZSBQQjEyMDBfQkNTUl9IRVhMRURfT0ZTCTB4MDA0MDAwMDAKKworCitlbnVtIGJjc3JfaWQgeworCS8qIEJDU1IgYmFzZSAxICovCisJQkNTUl9XSE9BTUkJPSAwLAorCUJDU1JfU1RBVFVTLAorCUJDU1JfU1dJVENIRVMsCisJQkNTUl9SRVNFVFMsCisJQkNTUl9QQ01DSUEsCisJQkNTUl9CT0FSRCwKKwlCQ1NSX0xFRFMsCisJQkNTUl9TWVNURU0sCisJLyogQXUxMjAwLzEzMDAgYmFzZWQgYm9hcmRzICovCisJQkNTUl9JTlRDTFIsCisJQkNTUl9JTlRTRVQsCisJQkNTUl9NQVNLQ0xSLAorCUJDU1JfTUFTS1NFVCwKKwlCQ1NSX1NJR1NUQVQsCisJQkNTUl9JTlRTVEFULAorCisJLyogQkNTUiBiYXNlIDIgKi8KKwlCQ1NSX0hFWExFRFMsCisJQkNTUl9SU1ZEMSwKKwlCQ1NSX0hFWENMRUFSLAorCisJQkNTUl9DTlQsCit9OworCisvKiByZWdpc3RlciBvZmZzZXRzLCB2YWxpZCBmb3IgYWxsIERiMXh4eC9QYjF4eHggYm9hcmRzICovCisjZGVmaW5lIEJDU1JfUkVHX1dIT0FNSQkJMHgwMAorI2RlZmluZSBCQ1NSX1JFR19TVEFUVVMJCTB4MDQKKyNkZWZpbmUgQkNTUl9SRUdfU1dJVENIRVMJMHgwOAorI2RlZmluZSBCQ1NSX1JFR19SRVNFVFMJCTB4MGMKKyNkZWZpbmUgQkNTUl9SRUdfUENNQ0lBCQkweDEwCisjZGVmaW5lIEJDU1JfUkVHX0JPQVJECQkweDE0CisjZGVmaW5lIEJDU1JfUkVHX0xFRFMJCTB4MTgKKyNkZWZpbmUgQkNTUl9SRUdfU1lTVEVNCQkweDFjCisvKiBBdTEyMDAvQXUxMzAwIGJhc2VkIGJvYXJkczogQ1BMRCBJUlEgbXV4ZXIgKi8KKyNkZWZpbmUgQkNTUl9SRUdfSU5UQ0xSCQkweDIwCisjZGVmaW5lIEJDU1JfUkVHX0lOVFNFVAkJMHgyNAorI2RlZmluZSBCQ1NSX1JFR19NQVNLQ0xSCTB4MjgKKyNkZWZpbmUgQkNTUl9SRUdfTUFTS1NFVAkweDJjCisjZGVmaW5lIEJDU1JfUkVHX1NJR1NUQVQJMHgzMAorI2RlZmluZSBCQ1NSX1JFR19JTlRTVEFUCTB4MzQKKworLyogaGV4bGVkIGNvbnRyb2wsIG9mZnNldCBmcm9tIEJDU1IgYmFzZSAyICovCisjZGVmaW5lIEJDU1JfUkVHX0hFWExFRFMJMHgwMAorI2RlZmluZSBCQ1NSX1JFR19IRVhDTEVBUgkweDA4CisKKy8qCisgKiBSZWdpc3RlciBCaXRzIGFuZCBQaWVjZXMuCisgKi8KKyNkZWZpbmUgQkNTUl9XSE9BTUlfRENJRCh4KQkJKCh4KSAmIDB4ZikKKyNkZWZpbmUgQkNTUl9XSE9BTUlfQ1BMRCh4KQkJKCgoeCkgPj4gNCkgJiAweGYpCisjZGVmaW5lIEJDU1JfV0hPQU1JX0JPQVJEKHgpCQkoKCh4KSA+PiA4KSAmIDB4ZikKKworLyogcmVnaXN0ZXIgIldIT0FNSSIgYml0cyAxMTo4IGlkZW50aWZ5IHRoZSBib2FyZCAqLworZW51bSBiY3NyX3dob2FtaV9ib2FyZHMgeworCUJDU1JfV0hPQU1JX1BCMTUwMCA9IDEsCisJQkNTUl9XSE9BTUlfUEIxNTAwUjIsCisJQkNTUl9XSE9BTUlfUEIxMTAwLAorCUJDU1JfV0hPQU1JX0RCMTAwMCwKKwlCQ1NSX1dIT0FNSV9EQjExMDAsCisJQkNTUl9XSE9BTUlfREIxNTAwLAorCUJDU1JfV0hPQU1JX0RCMTU1MCwKKwlCQ1NSX1dIT0FNSV9QQjE1NTBfRERSLAorCUJDU1JfV0hPQU1JX1BCMTU1MCA9IEJDU1JfV0hPQU1JX1BCMTU1MF9ERFIsCisJQkNTUl9XSE9BTUlfUEIxNTUwX1NEUiwKKwlCQ1NSX1dIT0FNSV9QQjEyMDBfRERSMSwKKwlCQ1NSX1dIT0FNSV9QQjEyMDAgPSBCQ1NSX1dIT0FNSV9QQjEyMDBfRERSMSwKKwlCQ1NSX1dIT0FNSV9QQjEyMDBfRERSMiwKKwlCQ1NSX1dIT0FNSV9EQjEyMDAsCit9OworCisvKiBTVEFUVVMgcmVnLiAgVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgdGhleSdyZSB2YWxpZCBvbiBhbGwgYm9hcmRzLgorICogUEIxMjAwID0gREIxMjAwLgorICovCisjZGVmaW5lIEJDU1JfU1RBVFVTX1BDMFZTCQkweDAwMDMKKyNkZWZpbmUgQkNTUl9TVEFUVVNfUEMxVlMJCTB4MDAwQworI2RlZmluZSBCQ1NSX1NUQVRVU19QQzBGSQkJMHgwMDEwCisjZGVmaW5lIEJDU1JfU1RBVFVTX1BDMUZJCQkweDAwMjAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfUEIxNTUwX1NXQVBCT09UCTB4MDA0MAorI2RlZmluZSBCQ1NSX1NUQVRVU19TUkFNV0lEVEgJCTB4MDA4MAorI2RlZmluZSBCQ1NSX1NUQVRVU19GTEFTSEJVU1kJCTB4MDEwMAorI2RlZmluZSBCQ1NSX1NUQVRVU19ST01CVVNZCQkweDA0MDAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfU0QwV1AJCTB4MDQwMAkvKiBEQjEyMDAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfU0QxV1AJCTB4MDgwMAorI2RlZmluZSBCQ1NSX1NUQVRVU19VU0JPVEdJRAkJMHgwODAwCS8qIFBCL0RCMTU1MCAqLworI2RlZmluZSBCQ1NSX1NUQVRVU19EQjEwMDBfU1dBUEJPT1QJMHgyMDAwCisjZGVmaW5lIEJDU1JfU1RBVFVTX0RCMTIwMF9TV0FQQk9PVAkweDAwNDAJLyogREIxMjAwICovCisjZGVmaW5lIEJDU1JfU1RBVFVTX0lERUNCTElECQkweDAyMDAJLyogREIxMjAwICovCisjZGVmaW5lIEJDU1JfU1RBVFVTX0RCMTIwMF9VMFJYRAkweDEwMDAJLyogREIxMjAwICovCisjZGVmaW5lIEJDU1JfU1RBVFVTX0RCMTIwMF9VMVJYRAkweDIwMDAJLyogREIxMjAwICovCisjZGVmaW5lIEJDU1JfU1RBVFVTX0ZMQVNIREVOCQkweEMwMDAKKyNkZWZpbmUgQkNTUl9TVEFUVVNfREIxNTUwX1UwUlhECTB4MTAwMAkvKiBEQjE1NTAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfREIxNTUwX1UzUlhECTB4MjAwMAkvKiBEQjE1NTAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfUEIxNTUwX1UwUlhECTB4MTAwMAkvKiBQQjE1NTAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfUEIxNTUwX1UxUlhECTB4MjAwMAkvKiBQQjE1NTAgKi8KKyNkZWZpbmUgQkNTUl9TVEFUVVNfUEIxNTUwX1UzUlhECTB4ODAwMAkvKiBQQjE1NTAgKi8KKworCisvKiBEQi9QQjEwMDAsMTEwMCwxNTAwLDE1NTAgKi8KKyNkZWZpbmUgQkNTUl9SRVNFVFNfUEhZMAkJMHgwMDAxCisjZGVmaW5lIEJDU1JfUkVTRVRTX1BIWTEJCTB4MDAwMgorI2RlZmluZSBCQ1NSX1JFU0VUU19EQwkJCTB4MDAwNAorI2RlZmluZSBCQ1NSX1JFU0VUU19GSVJfU0VMCQkweDIwMDAKKyNkZWZpbmUgQkNTUl9SRVNFVFNfSVJEQV9NT0RFX01BU0sJMHhDMDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9GVUxMCTB4MDAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19QQjE1NTBfV1NDRlNNCTB4MjAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfT0ZGCTB4NDAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfMl8zCTB4ODAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfMV8zCTB4QzAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19ETUFSRVEJCTB4ODAwMAkvKiBQQjE1NTAgKi8KKworI2RlZmluZSBCQ1NSX0JPQVJEX1BDSU02NkVOCQkweDAwMDEKKyNkZWZpbmUgQkNTUl9CT0FSRF9TRDBQV1IJCTB4MDA0MAorI2RlZmluZSBCQ1NSX0JPQVJEX1NEMVBXUgkJMHgwMDgwCisjZGVmaW5lIEJDU1JfQk9BUkRfUENJTTMzCQkweDAxMDAKKyNkZWZpbmUgQkNTUl9CT0FSRF9QQ0lFWFRBUkIJCTB4MDIwMAorI2RlZmluZSBCQ1NSX0JPQVJEX0dQSU8yMDBSU1QJCTB4MDQwMAorI2RlZmluZSBCQ1NSX0JPQVJEX1BDSUNMS09VVAkJMHgwODAwCisjZGVmaW5lIEJDU1JfQk9BUkRfUENJQ0ZHCQkweDEwMDAKKyNkZWZpbmUgQkNTUl9CT0FSRF9TUElTRUwJCTB4NDAwMAkvKiBQQi9EQjE1NTAgKi8KKyNkZWZpbmUgQkNTUl9CT0FSRF9TRDBXUAkJMHg0MDAwCS8qIERCMTEwMCAqLworI2RlZmluZSBCQ1NSX0JPQVJEX1NEMVdQCQkweDgwMDAJLyogREIxMTAwICovCisKKworLyogREIvUEIxMjAwICovCisjZGVmaW5lIEJDU1JfUkVTRVRTX0VUSAkJCTB4MDAwMQorI2RlZmluZSBCQ1NSX1JFU0VUU19DQU1FUkEJCTB4MDAwMgorI2RlZmluZSBCQ1NSX1JFU0VUU19EQwkJCTB4MDAwNAorI2RlZmluZSBCQ1NSX1JFU0VUU19JREUJCQkweDAwMDgKKyNkZWZpbmUgQkNTUl9SRVNFVFNfVFYJCQkweDAwMTAJLyogREIxMjAwICovCisvKiBOb3QgcmVzZXRzIGJ1dCBpbiB0aGUgc2FtZSByZWdpc3RlciAqLworI2RlZmluZSBCQ1NSX1JFU0VUU19QV01SMU1VWAkJMHgwODAwCS8qIERCMTIwMCAqLworI2RlZmluZSBCQ1NSX1JFU0VUU19QQjEyMDBfV1NDRlNNCTB4MDgwMAkvKiBQQjEyMDAgKi8KKyNkZWZpbmUgQkNTUl9SRVNFVFNfUFNDME1VWAkJMHgxMDAwCisjZGVmaW5lIEJDU1JfUkVTRVRTX1BTQzFNVVgJCTB4MjAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19TUElTRUwJCTB4NDAwMAorI2RlZmluZSBCQ1NSX1JFU0VUU19TRDFNVVgJCTB4ODAwMAkvKiBQQjEyMDAgKi8KKworI2RlZmluZSBCQ1NSX0JPQVJEX0xDRFZFRQkJMHgwMDAxCisjZGVmaW5lIEJDU1JfQk9BUkRfTENEVkRECQkweDAwMDIKKyNkZWZpbmUgQkNTUl9CT0FSRF9MQ0RCTAkJMHgwMDA0CisjZGVmaW5lIEJDU1JfQk9BUkRfQ0FNU05BUAkJMHgwMDEwCisjZGVmaW5lIEJDU1JfQk9BUkRfQ0FNUFdSCQkweDAwMjAKKyNkZWZpbmUgQkNTUl9CT0FSRF9TRDBQV1IJCTB4MDA0MAorCisKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVAJCTB4MDBGRgorI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8xCQkweDAwODAKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMgkJMHgwMDQwCisjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzMJCTB4MDAyMAorI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF80CQkweDAwMTAKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNQkJMHgwMDA4CisjZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzYJCTB4MDAwNAorI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF83CQkweDAwMDIKKyNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfOAkJMHgwMDAxCisjZGVmaW5lIEJDU1JfU1dJVENIRVNfUk9UQVJZCQkweDBGMDAKKworCisjZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZQUAkJMHgwMDAzCisjZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZDQwkJMHgwMDBDCisjZGVmaW5lIEJDU1JfUENNQ0lBX1BDMERSVkVOCQkweDAwMTAKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwUlNUCQkweDAwODAKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVlBQCQkweDAzMDAKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVkNDCQkweDBDMDAKKyNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxRFJWRU4JCTB4MTAwMAorI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFSU1QJCTB4ODAwMAorCisKKyNkZWZpbmUgQkNTUl9MRURTX0RFQ0lNQUxTCQkweDAwMDMKKyNkZWZpbmUgQkNTUl9MRURTX0xFRDAJCQkweDAxMDAKKyNkZWZpbmUgQkNTUl9MRURTX0xFRDEJCQkweDAyMDAKKyNkZWZpbmUgQkNTUl9MRURTX0xFRDIJCQkweDA0MDAKKyNkZWZpbmUgQkNTUl9MRURTX0xFRDMJCQkweDA4MDAKKworCisjZGVmaW5lIEJDU1JfU1lTVEVNX1JFU0VUCQkweDgwMDAJLyogY2xlYXIgdG8gcmVzZXQgKi8KKyNkZWZpbmUgQkNTUl9TWVNURU1fUFdST0ZGCQkweDQwMDAJLyogc2V0IHRvIHBvd2VyIG9mZiAqLworI2RlZmluZSBCQ1NSX1NZU1RFTV9WRERJCQkweDAwMUYJLyogUEIxeHh4IGJvYXJkcyAqLworCisKKworCisvKiBpbml0aWFsaXplIEJDU1IgZm9yIGEgYm9hcmQuIFByb3ZpZGUgdGhlIFBIWVNJQ0FMIGFkZHJlc3NlcyBvZiBib3RoCisgKiBCQ1NSIHNwYWNlcy4KKyAqLwordm9pZCBfX2luaXQgYmNzcl9pbml0KHVuc2lnbmVkIGxvbmcgYmNzcjFfcGh5cywgdW5zaWduZWQgbG9uZyBiY3NyMl9waHlzKTsKKworLyogcmVhZCBhIGJvYXJkIHJlZ2lzdGVyICovCit1bnNpZ25lZCBzaG9ydCBiY3NyX3JlYWQoZW51bSBiY3NyX2lkIHJlZyk7CisKKy8qIHdyaXRlIHRvIGEgYm9hcmQgcmVnaXN0ZXIgKi8KK3ZvaWQgYmNzcl93cml0ZShlbnVtIGJjc3JfaWQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWwpOworCisvKiBtb2RpZnkgYSByZWdpc3Rlci4gY2xlYXIgYml0cyBzZXQgaW4gJ2NscicsIHNldCBiaXRzIHNldCBpbiAnc2V0JyAqLwordm9pZCBiY3NyX21vZChlbnVtIGJjc3JfaWQgcmVnLCB1bnNpZ25lZCBzaG9ydCBjbHIsIHVuc2lnbmVkIHNob3J0IHNldCk7CisKKy8qIGluc3RhbGwgQ1BMRCBJUlEgZGVtdXhlciAoREIxMjAwL1BCMTIwMCkgKi8KK3ZvaWQgX19pbml0IGJjc3JfaW5pdF9pcnEoaW50IGNzY19zdGFydCwgaW50IGNzY19lbmQsIGludCBob29rX2lycSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2RiMTIwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2RiMTIwMC5oCmluZGV4IDI3ZjI2MTAuLjM0MDQyNDggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMC9kYjEyMDAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAvZGIxMjAwLmgKQEAgLTI1LDEzMyArMjUsOSBAQAogI2RlZmluZSBfX0FTTV9EQjEyMDBfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaD4KIAotI2RlZmluZSBEQkRNQV9BQzk3X1RYX0NIQU4JRFNDUl9DTUQwX1BTQzFfVFgKLSNkZWZpbmUgREJETUFfQUM5N19SWF9DSEFOCURTQ1JfQ01EMF9QU0MxX1JYCi0jZGVmaW5lIERCRE1BX0kyU19UWF9DSEFOCURTQ1JfQ01EMF9QU0MxX1RYCi0jZGVmaW5lIERCRE1BX0kyU19SWF9DSEFOCURTQ1JfQ01EMF9QU0MxX1JYCi0KLS8qCi0gKiBTUEkgYW5kIFNNQiBhcmUgbXV4ZWQgb24gdGhlIERCQXUxMjAwIGJvYXJkLgotICogUmVmZXIgdG8gYm9hcmQgZG9jdW1lbnRhdGlvbi4KLSAqLwotI2RlZmluZSBTUElfUFNDX0JBU0UJCVBTQzBfQkFTRV9BRERSCi0jZGVmaW5lIFNNQlVTX1BTQ19CQVNFCQlQU0MwX0JBU0VfQUREUgotLyoKLSAqIEFDJzk3IGFuZCBJMlMgYXJlIG11eGVkIG9uIHRoZSBEQkF1MTIwMCBib2FyZC4KLSAqIFJlZmVyIHRvIGJvYXJkIGRvY3VtZW50YXRpb24uCi0gKi8KLSNkZWZpbmUgQUM5N19QU0NfQkFTRQkJUFNDMV9CQVNFX0FERFIKLSNkZWZpbmUgSTJTX1BTQ19CQVNFCQlQU0MxX0JBU0VfQUREUgotCi0jZGVmaW5lIEJDU1JfS1NFRzFfQUREUiAJMHhCOTgwMDAwMAotCi10eXBlZGVmIHZvbGF0aWxlIHN0cnVjdAotewotCS8qMDAqLwl1MTYgd2hvYW1pOwotCQl1MTYgcmVzZXJ2ZWQwOwotCS8qMDQqLwl1MTYgc3RhdHVzOwotCQl1MTYgcmVzZXJ2ZWQxOwotCS8qMDgqLwl1MTYgc3dpdGNoZXM7Ci0JCXUxNiByZXNlcnZlZDI7Ci0JLyowQyovCXUxNiByZXNldHM7Ci0JCXUxNiByZXNlcnZlZDM7Ci0KLQkvKjEwKi8JdTE2IHBjbWNpYTsKLQkJdTE2IHJlc2VydmVkNDsKLQkvKjE0Ki8JdTE2IGJvYXJkOwotCQl1MTYgcmVzZXJ2ZWQ1OwotCS8qMTgqLwl1MTYgZGlza19sZWRzOwotCQl1MTYgcmVzZXJ2ZWQ2OwotCS8qMUMqLwl1MTYgc3lzdGVtOwotCQl1MTYgcmVzZXJ2ZWQ3OwotCi0JLyoyMCovCXUxNiBpbnRjbHI7Ci0JCXUxNiByZXNlcnZlZDg7Ci0JLyoyNCovCXUxNiBpbnRzZXQ7Ci0JCXUxNiByZXNlcnZlZDk7Ci0JLyoyOCovCXUxNiBpbnRjbHJfbWFzazsKLQkJdTE2IHJlc2VydmVkMTA7Ci0JLyoyQyovCXUxNiBpbnRzZXRfbWFzazsKLQkJdTE2IHJlc2VydmVkMTE7Ci0KLQkvKjMwKi8JdTE2IHNpZ19zdGF0dXM7Ci0JCXUxNiByZXNlcnZlZDEyOwotCS8qMzQqLwl1MTYgaW50X3N0YXR1czsKLQkJdTE2IHJlc2VydmVkMTM7Ci0JLyozOCovCXUxNiByZXNlcnZlZDE0OwotCQl1MTYgcmVzZXJ2ZWQxNTsKLQkvKjNDKi8JdTE2IHJlc2VydmVkMTY7Ci0JCXUxNiByZXNlcnZlZDE3OwotCi19IEJDU1I7Ci0KLXN0YXRpYyBCQ1NSICogY29uc3QgYmNzciA9IChCQ1NSICopQkNTUl9LU0VHMV9BRERSOwotCi0vKgotICogUmVnaXN0ZXIgYml0IGRlZmluaXRpb25zIGZvciB0aGUgQkNTUnMKLSAqLwotI2RlZmluZSBCQ1NSX1dIT0FNSV9EQ0lECTB4MDAwRgotI2RlZmluZSBCQ1NSX1dIT0FNSV9DUExECTB4MDBGMAotI2RlZmluZSBCQ1NSX1dIT0FNSV9CT0FSRAkweDBGMDAKLQotI2RlZmluZSBCQ1NSX1NUQVRVU19QQ01DSUEwVlMJMHgwMDAzCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDTUNJQTFWUwkweDAwMEMKLSNkZWZpbmUgQkNTUl9TVEFUVVNfU1dBUEJPT1QJMHgwMDQwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX0ZMQVNIQlVTWQkweDAxMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfSURFQ0JMSUQJMHgwMjAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1NEMFdQCTB4MDQwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19VMFJYRAkweDEwMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfVTFSWEQJMHgyMDAwCi0KLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19PQ1RBTAkweDAwRkYKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMQkweDAwODAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMgkweDAwNDAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMwkweDAwMjAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNAkweDAwMTAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNQkweDAwMDgKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNgkweDAwMDQKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNwkweDAwMDIKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfOAkweDAwMDEKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ST1RBUlkJMHgwRjAwCi0KLSNkZWZpbmUgQkNTUl9SRVNFVFNfRVRICQkweDAwMDEKLSNkZWZpbmUgQkNTUl9SRVNFVFNfQ0FNRVJBCTB4MDAwMgotI2RlZmluZSBCQ1NSX1JFU0VUU19EQwkJMHgwMDA0Ci0jZGVmaW5lIEJDU1JfUkVTRVRTX0lERQkJMHgwMDA4Ci0jZGVmaW5lIEJDU1JfUkVTRVRTX1RWCQkweDAwMTAKLS8qIE5vdCByZXNldHMgYnV0IGluIHRoZSBzYW1lIHJlZ2lzdGVyICovCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BXTVIxTVVYCTB4MDgwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19QQ1MwTVVYCTB4MTAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19QQ1MxTVVYCTB4MjAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19TUElTRUwJMHg0MDAwCi0KLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwVlBQCTB4MDAwMwotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBWQ0MJMHgwMDBDCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMERSVkVOCTB4MDAxMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBSU1QJMHgwMDgwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVZQUAkweDAzMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVkNDCTB4MEMwMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFEUlZFTgkweDEwMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxUlNUCTB4ODAwMAotCi0jZGVmaW5lIEJDU1JfQk9BUkRfTENEVkVFCTB4MDAwMQotI2RlZmluZSBCQ1NSX0JPQVJEX0xDRFZERAkweDAwMDIKLSNkZWZpbmUgQkNTUl9CT0FSRF9MQ0RCTAkweDAwMDQKLSNkZWZpbmUgQkNTUl9CT0FSRF9DQU1TTkFQCTB4MDAxMAotI2RlZmluZSBCQ1NSX0JPQVJEX0NBTVBXUgkweDAwMjAKLSNkZWZpbmUgQkNTUl9CT0FSRF9TRDBQV1IJMHgwMDQwCi0KLSNkZWZpbmUgQkNTUl9MRURTX0RFQ0lNQUxTCTB4MDAwMwotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMAkJMHgwMTAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQxCQkweDAyMDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDIJCTB4MDQwMAotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMwkJMHgwODAwCi0KLSNkZWZpbmUgQkNTUl9TWVNURU1fUE9XRVJPRkYJMHg0MDAwCi0jZGVmaW5lIEJDU1JfU1lTVEVNX1JFU0VUCTB4ODAwMAotCiAvKiBCaXQgcG9zaXRpb25zIGZvciB0aGUgZGlmZmVyZW50IGludGVycnVwdCBzb3VyY2VzICovCiAjZGVmaW5lIEJDU1JfSU5UX0lERQkJMHgwMDAxCiAjZGVmaW5lIEJDU1JfSU5UX0VUSAkJMHgwMDAyCkBAIC0xNjgsMTcgKzQ0LDE1IEBACiAjZGVmaW5lIEJDU1JfSU5UX1NEMElOU0VSVAkweDEwMDAKICNkZWZpbmUgQkNTUl9JTlRfU0QwRUpFQ1QJMHgyMDAwCiAKLSNkZWZpbmUgU01DOTFDMTExX1BIWVNfQUREUgkweDE5MDAwMzAwCi0jZGVmaW5lIFNNQzkxQzExMV9JTlQJCURCMTIwMF9FVEhfSU5UCi0KICNkZWZpbmUgSURFX1BIWVNfQUREUgkJMHgxODgwMDAwMAogI2RlZmluZSBJREVfUkVHX1NISUZUCQk1Ci0jZGVmaW5lIElERV9QSFlTX0xFTgkJKDE2IDw8IElERV9SRUdfU0hJRlQpCi0jZGVmaW5lIElERV9JTlQgCQlEQjEyMDBfSURFX0lOVAogI2RlZmluZSBJREVfRERNQV9SRVEJCURTQ1JfQ01EMF9ETUFfUkVRMQogI2RlZmluZSBJREVfUlFTSVpFCQkxMjgKIAotI2RlZmluZSBOQU5EX1BIWVNfQUREUgkJMHgyMDAwMDAwMAorI2RlZmluZSBEQjEyMDBfSURFX1BIWVNfQUREUglJREVfUEhZU19BRERSCisjZGVmaW5lIERCMTIwMF9JREVfUEhZU19MRU4JKDE2IDw8IElERV9SRUdfU0hJRlQpCisjZGVmaW5lIERCMTIwMF9FVEhfUEhZU19BRERSCTB4MTkwMDAzMDAKKyNkZWZpbmUgREIxMjAwX05BTkRfUEhZU19BRERSCTB4MjAwMDAwMDAKIAogLyoKICAqIEV4dGVybmFsIEludGVycnVwdHMgZm9yIERCQXUxMjAwIGFzIG9mIDgvNi8yMDA0LgpAQCAtMTg4LDcgKzYyLDcgQEAKICAqICAgRXhhbXBsZTogSURFIGJpcyBwb3MgaXMgID0gNjQgLSA2NAogICogICAgICAgICAgICBFVEggYml0IHBvcyBpcyAgPSA2NSAtIDY0CiAgKi8KLWVudW0gZXh0ZXJuYWxfcGIxMjAwX2ludHMgeworZW51bSBleHRlcm5hbF9kYjEyMDBfaW50cyB7CiAJREIxMjAwX0lOVF9CRUdJTgk9IEFVMTAwMF9NQVhfSU5UUiArIDEsCiAKIAlEQjEyMDBfSURFX0lOVAkJPSBEQjEyMDBfSU5UX0JFR0lOLApAQCAtMjA5LDIyICs4Myw0IEBACiAJREIxMjAwX0lOVF9FTkQJCT0gREIxMjAwX0lOVF9CRUdJTiArIDE1LAogfTsKIAotCi0vKgotICogREJBdTEyMDAgc3BlY2lmaWMgUENNQ0lBIGRlZmluZXMgZm9yIGRyaXZlcnMvcGNtY2lhL2F1MTAwMF9kYjF4MDAuYwotICovCi0jZGVmaW5lIFBDTUNJQV9NQVhfU09DSyAgMQotI2RlZmluZSBQQ01DSUFfTlVNX1NPQ0tTIChQQ01DSUFfTUFYX1NPQ0sgKyAxKQotCi0vKiBWUFAvVkNDICovCi0jZGVmaW5lIFNFVF9WQ0NfVlBQKFZDQywgVlBQLCBTTE9UKSBcCi0JKCgoKFZDQykgPDwgMikgfCAoKFZQUCkgPDwgMCkpIDw8ICgoU0xPVCkgKiA4KSkKLQotI2RlZmluZSBCT0FSRF9QQzBfSU5UCURCMTIwMF9QQzBfSU5UCi0jZGVmaW5lIEJPQVJEX1BDMV9JTlQJREIxMjAwX1BDMV9JTlQKLSNkZWZpbmUgQk9BUkRfQ0FSRF9JTlNFUlRFRChTT0NLRVQpIGJjc3ItPnNpZ19zdGF0dXMgJiAoMSA8PCAoOCArICgyICogU09DS0VUKSkpCi0KLS8qIE5BTkQgY2hpcCBzZWxlY3QgKi8KLSNkZWZpbmUgTkFORF9DUyAxCi0KICNlbmRpZiAvKiBfX0FTTV9EQjEyMDBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2RiMXgwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZGIxeDAwL2RiMXgwMC5oCmluZGV4IDFhNTE1YjguLmE5MTlkYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWRiMXgwMC9kYjF4MDAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1kYjF4MDAvZGIxeDAwLmgKQEAgLTQxLDExMSArNDEsMTEgQEAKICNkZWZpbmUgU01CVVNfUFNDX0JBU0UJCVBTQzJfQkFTRV9BRERSCiAjZGVmaW5lIEkyU19QU0NfQkFTRQkJUFNDM19CQVNFX0FERFIKIAotI2RlZmluZSBCQ1NSX0tTRUcxX0FERFIgCTB4QUYwMDAwMDAKICNkZWZpbmUgTkFORF9QSFlTX0FERFIJCTB4MjAwMDAwMDAKIAotI2Vsc2UKLSNkZWZpbmUgQkNTUl9LU0VHMV9BRERSIDB4QUUwMDAwMDAKICNlbmRpZgogCiAvKgotICogT3ZlcmxheSBkYXRhIHN0cnVjdHVyZSBvZiB0aGUgREJBdTF4MDAgYm9hcmQgcmVnaXN0ZXJzLgotICogUmVnaXN0ZXJzIGFyZSBsb2NhdGVkIGF0IHBoeXNpY2FsIDBFMDAwMHh4LCBLU0VHMSAweEFFMDAwMHh4LgotICovCi10eXBlZGVmIHZvbGF0aWxlIHN0cnVjdAotewotCS8qMDAqLwl1bnNpZ25lZCBzaG9ydCB3aG9hbWk7Ci0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQwOwotCS8qMDQqLwl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7Ci0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQxOwotCS8qMDgqLwl1bnNpZ25lZCBzaG9ydCBzd2l0Y2hlczsKLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDI7Ci0JLyowQyovCXVuc2lnbmVkIHNob3J0IHJlc2V0czsKLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDM7Ci0JLyoxMCovCXVuc2lnbmVkIHNob3J0IHBjbWNpYTsKLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDQ7Ci0JLyoxNCovCXVuc2lnbmVkIHNob3J0IHNwZWNpZmljOwotCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkNTsKLQkvKjE4Ki8JdW5zaWduZWQgc2hvcnQgbGVkczsKLQl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDY7Ci0JLyoxQyovCXVuc2lnbmVkIHNob3J0IHN3cmVzZXQ7Ci0JdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQ3OwotCi19IEJDU1I7Ci0KLQotLyoKLSAqIFJlZ2lzdGVyL21hc2sgYml0IGRlZmluaXRpb25zIGZvciB0aGUgQkNTUnMKLSAqLwotI2RlZmluZSBCQ1NSX1dIT0FNSV9EQ0lECQkweDAwMEYKLSNkZWZpbmUgQkNTUl9XSE9BTUlfQ1BMRAkJMHgwMEYwCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0JPQVJECQkweDBGMDAKLQotI2RlZmluZSBCQ1NSX1NUQVRVU19QQzBWUwkJMHgwMDAzCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDMVZTCQkweDAwMEMKLSNkZWZpbmUgQkNTUl9TVEFUVVNfUEMwRkkJCTB4MDAxMAotI2RlZmluZSBCQ1NSX1NUQVRVU19QQzFGSQkJMHgwMDIwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX0ZMQVNIQlVTWQkJMHgwMTAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1JPTUJVU1kJCTB4MDQwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19TV0FQQk9PVAkJMHgyMDAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX0ZMQVNIREVOCQkweEMwMDAKLQotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUAkJMHgwMEZGCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzEJCTB4MDA4MAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF8yCQkweDAwNDAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMwkJMHgwMDIwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzQJCTB4MDAxMAotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF81CQkweDAwMDgKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNgkJMHgwMDA0Ci0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzcJCTB4MDAwMgotI2RlZmluZSBCQ1NSX1NXSVRDSEVTX0RJUF84CQkweDAwMDEKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ST1RBUlkJCTB4MEYwMAotCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BIWTAJCTB4MDAwMQotI2RlZmluZSBCQ1NSX1JFU0VUU19QSFkxCQkweDAwMDIKLSNkZWZpbmUgQkNTUl9SRVNFVFNfREMJCQkweDAwMDQKLSNkZWZpbmUgQkNTUl9SRVNFVFNfRklSX1NFTAkJMHgyMDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0lSREFfTU9ERV9NQVNLCTB4QzAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19JUkRBX01PREVfRlVMTAkweDAwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfSVJEQV9NT0RFX09GRgkweDQwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfSVJEQV9NT0RFXzJfMwkweDgwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfSVJEQV9NT0RFXzFfMwkweEMwMDAKLQotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBWUFAJCTB4MDAwMwotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBWQ0MJCTB4MDAwQwotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBEUlZFTgkJMHgwMDEwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFJTVAkJMHgwMDgwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVZQUAkJMHgwMzAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVZDQwkJMHgwQzAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMURSVkVOCQkweDEwMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxUlNUCQkweDgwMDAKLQotI2RlZmluZSBCQ1NSX0JPQVJEX1BDSU02NkVOCQkweDAwMDEKLSNkZWZpbmUgQkNTUl9CT0FSRF9TRDBfUFdSCQkweDAwNDAKLSNkZWZpbmUgQkNTUl9CT0FSRF9TRDFfUFdSCQkweDAwODAKLSNkZWZpbmUgQkNTUl9CT0FSRF9QQ0lNMzMJCTB4MDEwMAotI2RlZmluZSBCQ1NSX0JPQVJEX0dQSU8yMDBSU1QJCTB4MDQwMAotI2RlZmluZSBCQ1NSX0JPQVJEX1BDSUNGRwkJMHgxMDAwCi0jZGVmaW5lIEJDU1JfQk9BUkRfU0QwX1dQCQkweDQwMDAKLSNkZWZpbmUgQkNTUl9CT0FSRF9TRDFfV1AJCTB4ODAwMAotCi0jZGVmaW5lIEJDU1JfTEVEU19ERUNJTUFMUwkJMHgwMDAzCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQwCQkJMHgwMTAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQxCQkJMHgwMjAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQyCQkJMHgwNDAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQzCQkJMHgwODAwCi0KLSNkZWZpbmUgQkNTUl9TV1JFU0VUX1JFU0VUCQkweDAwODAKLQotLyogUENNQ0lBIERCQXUxeDAwIHNwZWNpZmljIGRlZmluZXMgKi8KLSNkZWZpbmUgUENNQ0lBX01BWF9TT0NLICAxCi0jZGVmaW5lIFBDTUNJQV9OVU1fU09DS1MgKFBDTUNJQV9NQVhfU09DSyArIDEpCi0KLS8qIFZQUC9WQ0MgKi8KLSNkZWZpbmUgU0VUX1ZDQ19WUFAoVkNDLCBWUFAsIFNMT1QpXAotCSgoKChWQ0MpIDw8IDIpIHwgKChWUFApIDw8IDApKSA8PCAoKFNMT1QpICogOCkpCi0KLS8qCiAgKiBOQU5EIGRlZmluZXMKICAqCiAgKiBUaW1pbmcgdmFsdWVzIGFzIGRlc2NyaWJlZCBpbiBkYXRhYm9vaywgKiBucyB2YWx1ZSBzdHJpcHBlZCBvZiB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKaW5kZXggOTk0N2U1Ny4uMTYyMTBjZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTMsNyArMyw3IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBQaGlsaXBwZSBWYWNob24gPHBoaWxpcHBlQGNvd3BpZy5jYT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBaaGFuZyBMZSA8cjBiZXJ0ekBnZW50b28ub3JnPgogICoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzZfdnNtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9jczU1MzYvY3M1NTM2X3ZzbS5oCmluZGV4IDYzMDViZWEuLjIxYzRlY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NzNTUzNi9jczU1MzZfdnNtLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3M1NTM2L2NzNTUzNl92c20uaApAQCAtMiw3ICsyLDcgQEAKICAqIHRoZSByZWFkL3dyaXRlIGludGVyZmFjZXMgZm9yIFZpcnR1YWwgU3VwcG9ydCBNb2R1bGUoVlNNKQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICovCiAKICNpZm5kZWYJX0NTNTUzNl9WU01fSApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbG9vbmdzb24uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2xvb25nc29uLmgKaW5kZXggZWU4YmM4My4uMWNmN2IxNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbG9vbmdzb24uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9sb29uZ3Nvbi5oCkBAIC0xLDEyICsxLDExIEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKICAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCiAgKi8KIAogI2lmbmRlZiBfX0FTTV9NQUNIX0xPT05HU09OX0xPT05HU09OX0gKQEAgLTIzLDcgKzIyLDcgQEAKIGV4dGVybiB2b2lkIG1hY2hfcHJlcGFyZV9zaHV0ZG93bih2b2lkKTsKIAogLyogZW52aXJvbm1lbnQgYXJndW1lbnRzIGZyb20gYm9vdGxvYWRlciAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYnVzX2Nsb2NrLCBjcHVfY2xvY2tfZnJlcTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNwdV9jbG9ja19mcmVxOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtc2l6ZSwgaGlnaG1lbXNpemU7CiAKIC8qIGxvb25nc29uLXNwZWNpZmljIGNvbW1hbmQgbGluZSwgZW52IGFuZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21hY2hpbmUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21hY2hpbmUuaAppbmRleCBhY2Y4MzU5Li40MzIxMzM4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9tYWNoaW5lLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vbWFjaGluZS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4gJiBJbnN0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9tZW0uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21lbS5oCmluZGV4IGU5OTYwZjMuLjNiMjNlZTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21lbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL21lbS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sb29uZ3Nvbi9wY2kuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL3BjaS5oCmluZGV4IGExOTlhNGYuLmJjOTlkYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL3BjaS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL3BjaS5oCkBAIC0xLDIzICsxLDEyIEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA4IFpoYW5nIExlIDxyMGJlcnR6QGdlbnRvby5vcmc+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0CiAgKiBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKICAqIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQotICogdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAotICogd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKLSAqIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEKLSAqIDAyMTM5LCBVU0EuCiAgKi8KIAogI2lmbmRlZiBfX0FTTV9NQUNIX0xPT05HU09OX1BDSV9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTEwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTEwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWE2MGYxLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjExMDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBBbGNoZW15IFNlbWkgUGIxMTAwIFJlZmVycmVuY2UgQm9hcmQKLSAqCi0gKiBDb3B5cmlnaHQgMjAwMSwgMjAwOCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiA8c291cmNlQG12aXN0YS5jb20+Ci0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICoKLSAqLwotI2lmbmRlZiBfX0FTTV9QQjExMDBfSAotI2RlZmluZSBfX0FTTV9QQjExMDBfSAotCi0jZGVmaW5lIFBCMTEwMF9JREVOVAkJMHhBRTAwMDAwMAotI2RlZmluZSBCT0FSRF9TVEFUVVNfUkVHCTB4QUUwMDAwMDQKLSMgIGRlZmluZSBQQjExMDBfUk9NX1NFTAkoMSA8PCAxNSkKLSMgIGRlZmluZSBQQjExMDBfUk9NX1NJWgkoMSA8PCAxNCkKLSMgIGRlZmluZSBQQjExMDBfU1dBUF9CT09UCSgxIDw8IDEzKQotIyAgZGVmaW5lIFBCMTEwMF9GTEFTSF9XUAkoMSA8PCAxMikKLSMgIGRlZmluZSBQQjExMDBfUk9NX0hfU1RTCSgxIDw8IDExKQotIyAgZGVmaW5lIFBCMTEwMF9ST01fTF9TVFMJKDEgPDwgMTApCi0jICBkZWZpbmUgUEIxMTAwX0ZMQVNIX0hfU1RTCSgxIDw8IDkpCi0jICBkZWZpbmUgUEIxMTAwX0ZMQVNIX0xfU1RTCSgxIDw8IDgpCi0jICBkZWZpbmUgUEIxMTAwX1NSQU1fU0laCSgxIDw8IDcpCi0jICBkZWZpbmUgUEIxMTAwX1RTQ19CVVNZCSgxIDw8IDYpCi0jICBkZWZpbmUgUEIxMTAwX1BDTUNJQV9WU19NQVNLICgzIDw8IDQpCi0jICBkZWZpbmUgUEIxMTAwX1JTMjMyX0NECSgxIDw8IDMpCi0jICBkZWZpbmUgUEIxMTAwX1JTMjMyX0NUUwkoMSA8PCAyKQotIyAgZGVmaW5lIFBCMTEwMF9SUzIzMl9EU1IJKDEgPDwgMSkKLSMgIGRlZmluZSBQQjExMDBfUlMyMzJfUkkJKDEgPDwgMCkKLQotI2RlZmluZSBQQjExMDBfSVJEQV9SUzIzMgkweEFFMDAwMDBDCi0jICBkZWZpbmUgUEIxMTAwX0lSREFfRlVMTAkoMCA8PCAxNCkJLyogZnVsbCBwb3dlcgkJKi8KLSMgIGRlZmluZSBQQjExMDBfSVJEQV9TSFVURE9XTgkoMSA8PCAxNCkKLSMgIGRlZmluZSBQQjExMDBfSVJEQV9UVAkoMiA8PCAxNCkJLyogMi8zIHBvd2VyCQkqLwotIyAgZGVmaW5lIFBCMTEwMF9JUkRBX09UCSgzIDw8IDE0KQkvKiAxLzMgcG93ZXIJCSovCi0jICBkZWZpbmUgUEIxMTAwX0lSREFfRklSCSgxIDw8IDEzKQotCi0jZGVmaW5lIFBDTUNJQV9CT0FSRF9SRUcJMHhBRTAwMDAxMAotIyAgZGVmaW5lIFBCMTEwMF9TRF9XUDFfUk8JKDEgPDwgMTUpCS8qIHJlYWQgb25seQkJKi8KLSMgIGRlZmluZSBQQjExMDBfU0RfV1AwX1JPCSgxIDw8IDE0KQkvKiByZWFkIG9ubHkJCSovCi0jICBkZWZpbmUgUEIxMTAwX1NEX1BXUjEJKDEgPDwgMTEpCS8qIGFwcGxpZXMgcG93ZXIgdG8gU0QxICovCi0jICBkZWZpbmUgUEIxMTAwX1NEX1BXUjAJKDEgPDwgMTApCS8qIGFwcGxpZXMgcG93ZXIgdG8gU0QwICovCi0jICBkZWZpbmUgUEIxMTAwX1NFTF9TRF9DT05OMQkoMSA8PCA5KQotIyAgZGVmaW5lIFBCMTEwMF9TRUxfU0RfQ09OTjAJKDEgPDwgOCkKLSMgIGRlZmluZSBQQ19ERUFTU0VSVF9SU1QJKDEgPDwgNykKLSMgIGRlZmluZSBQQ19EUlZfRU4JCSgxIDw8IDQpCi0KLSNkZWZpbmUgUEIxMTAwX0dfQ09OVFJPTAkweEFFMDAwMDE0CS8qIGdyYXBoaWNzIGNvbnRyb2wJKi8KLQotI2RlZmluZSBQQjExMDBfUlNUX1ZEREkgCTB4QUUwMDAwMUMKLSMgIGRlZmluZSBQQjExMDBfU09GVF9SRVNFVAkoMSA8PCAxNSkJLyogY2xlYXIgdG8gcmVzZXQgdGhlIGJvYXJkICovCi0jICBkZWZpbmUgUEIxMTAwX1ZERElfTUFTSwkweDFGCi0KLSNkZWZpbmUgUEIxMTAwX0xFRFMJCTB4QUUwMDAwMTgKLQotLyoKLSAqIDExOjggaXMgNCBkaXNjcmVldCBMRURzLiBDbGVhcmluZyBhIGJpdCBpbGx1bWluYXRlcyB0aGUgTEVELgotICogNzowICBpcyB0aGUgTEVEIERpc3BsYXkncyBkZWNpbWFsIHBvaW50cy4KLSAqLwotI2RlZmluZSBQQjExMDBfSEVYX0xFRAkJMHhBRTAwMDAxOAotCi0vKiBQQ01DSUEgUGIxMTAwIHNwZWNpZmljIGRlZmluZXMgKi8KLSNkZWZpbmUgUENNQ0lBX01BWF9TT0NLICAwCi0jZGVmaW5lIFBDTUNJQV9OVU1fU09DS1MgKFBDTUNJQV9NQVhfU09DSyArIDEpCi0KLS8qIFZQUC9WQ0MgKi8KLSNkZWZpbmUgU0VUX1ZDQ19WUFAoVkNDLCBWUFApICgoKFZDQykgPDwgMikgfCAoKFZQUCkgPDwgMCkpCi0KLSNlbmRpZiAvKiBfX0FTTV9QQjExMDBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTIwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTIwMC5oCmluZGV4IGM4NjE4ZGYuLjk2MmViNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjEyMDAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxMjAwLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNkZWZpbmUgX19BU01fUEIxMjAwX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHhfcHNjLmg+CiAKICNkZWZpbmUgREJETUFfQUM5N19UWF9DSEFOCURTQ1JfQ01EMF9QU0MxX1RYCkBAIC00MywxMTMgKzQ0LDggQEAKICAqIFJlZmVyIHRvIGJvYXJkIGRvY3VtZW50YXRpb24uCiAgKi8KICNkZWZpbmUgQUM5N19QU0NfQkFTRSAgICAgICBQU0MxX0JBU0VfQUREUgotI2RlZmluZSBJMlNfUFNDX0JBU0UJCVBTQzFfQkFTRV9BRERSCisjZGVmaW5lIEkyU19QU0NfQkFTRQlQU0MxX0JBU0VfQUREUgogCi0jZGVmaW5lIEJDU1JfS1NFRzFfQUREUiAweEFEODAwMDAwCi0KLXR5cGVkZWYgdm9sYXRpbGUgc3RydWN0Ci17Ci0JLyowMCovCXUxNiB3aG9hbWk7Ci0JCXUxNiByZXNlcnZlZDA7Ci0JLyowNCovCXUxNiBzdGF0dXM7Ci0JCXUxNiByZXNlcnZlZDE7Ci0JLyowOCovCXUxNiBzd2l0Y2hlczsKLQkJdTE2IHJlc2VydmVkMjsKLQkvKjBDKi8JdTE2IHJlc2V0czsKLQkJdTE2IHJlc2VydmVkMzsKLQotCS8qMTAqLwl1MTYgcGNtY2lhOwotCQl1MTYgcmVzZXJ2ZWQ0OwotCS8qMTQqLwl1MTYgYm9hcmQ7Ci0JCXUxNiByZXNlcnZlZDU7Ci0JLyoxOCovCXUxNiBkaXNrX2xlZHM7Ci0JCXUxNiByZXNlcnZlZDY7Ci0JLyoxQyovCXUxNiBzeXN0ZW07Ci0JCXUxNiByZXNlcnZlZDc7Ci0KLQkvKjIwKi8JdTE2IGludGNscjsKLQkJdTE2IHJlc2VydmVkODsKLQkvKjI0Ki8JdTE2IGludHNldDsKLQkJdTE2IHJlc2VydmVkOTsKLQkvKjI4Ki8JdTE2IGludGNscl9tYXNrOwotCQl1MTYgcmVzZXJ2ZWQxMDsKLQkvKjJDKi8JdTE2IGludHNldF9tYXNrOwotCQl1MTYgcmVzZXJ2ZWQxMTsKLQotCS8qMzAqLwl1MTYgc2lnX3N0YXR1czsKLQkJdTE2IHJlc2VydmVkMTI7Ci0JLyozNCovCXUxNiBpbnRfc3RhdHVzOwotCQl1MTYgcmVzZXJ2ZWQxMzsKLQkvKjM4Ki8JdTE2IHJlc2VydmVkMTQ7Ci0JCXUxNiByZXNlcnZlZDE1OwotCS8qM0MqLwl1MTYgcmVzZXJ2ZWQxNjsKLQkJdTE2IHJlc2VydmVkMTc7Ci0KLX0gQkNTUjsKLQotc3RhdGljIEJDU1IgKiBjb25zdCBiY3NyID0gKEJDU1IgKilCQ1NSX0tTRUcxX0FERFI7Ci0KLS8qCi0gKiBSZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgZm9yIHRoZSBCQ1NScwotICovCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0RDSUQJMHgwMDBGCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0NQTEQJMHgwMEYwCi0jZGVmaW5lIEJDU1JfV0hPQU1JX0JPQVJECTB4MEYwMAotCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDTUNJQTBWUwkweDAwMDMKLSNkZWZpbmUgQkNTUl9TVEFUVVNfUENNQ0lBMVZTCTB4MDAwQwotI2RlZmluZSBCQ1NSX1NUQVRVU19TV0FQQk9PVAkweDAwNDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfRkxBU0hCVVNZCTB4MDEwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19JREVDQkxJRAkweDAyMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfU0QwV1AJMHgwNDAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1NEMVdQCTB4MDgwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19VMFJYRAkweDEwMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfVTFSWEQJMHgyMDAwCi0KLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19PQ1RBTAkweDAwRkYKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMQkweDAwODAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMgkweDAwNDAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfMwkweDAwMjAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNAkweDAwMTAKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNQkweDAwMDgKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNgkweDAwMDQKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfNwkweDAwMDIKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ESVBfOAkweDAwMDEKLSNkZWZpbmUgQkNTUl9TV0lUQ0hFU19ST1RBUlkJMHgwRjAwCi0KLSNkZWZpbmUgQkNTUl9SRVNFVFNfRVRICQkweDAwMDEKLSNkZWZpbmUgQkNTUl9SRVNFVFNfQ0FNRVJBCTB4MDAwMgotI2RlZmluZSBCQ1NSX1JFU0VUU19EQwkJMHgwMDA0Ci0jZGVmaW5lIEJDU1JfUkVTRVRTX0lERQkJMHgwMDA4Ci0vKiBub3QgcmVzZXRzIGJ1dCBpbiB0aGUgc2FtZSByZWdpc3RlciAqLwotI2RlZmluZSBCQ1NSX1JFU0VUU19XU0NGU00JMHgwODAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BDUzBNVVgJMHgxMDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BDUzFNVVgJMHgyMDAwCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1NQSVNFTAkweDQwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfU0QxTVVYCTB4ODAwMAotCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMFZQUAkweDAwMDMKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwVkNDCTB4MDAwQwotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBEUlZFTgkweDAwMTAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwUlNUCTB4MDA4MAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFWUFAJMHgwMzAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVZDQwkweDBDMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxRFJWRU4JMHgxMDAwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVJTVAkweDgwMDAKLQotI2RlZmluZSBCQ1NSX0JPQVJEX0xDRFZFRQkweDAwMDEKLSNkZWZpbmUgQkNTUl9CT0FSRF9MQ0RWREQJMHgwMDAyCi0jZGVmaW5lIEJDU1JfQk9BUkRfTENEQkwJMHgwMDA0Ci0jZGVmaW5lIEJDU1JfQk9BUkRfQ0FNU05BUAkweDAwMTAKLSNkZWZpbmUgQkNTUl9CT0FSRF9DQU1QV1IJMHgwMDIwCi0jZGVmaW5lIEJDU1JfQk9BUkRfU0QwUFdSCTB4MDA0MAotI2RlZmluZSBCQ1NSX0JPQVJEX1NEMVBXUgkweDAwODAKLQotI2RlZmluZSBCQ1NSX0xFRFNfREVDSU1BTFMJMHgwMEZGCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQwCQkweDAxMDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDEJCTB4MDIwMAotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMgkJMHgwNDAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQzCQkweDA4MDAKIAogI2RlZmluZSBCQ1NSX1NZU1RFTV9WRERJCTB4MDAxRgogI2RlZmluZSBCQ1NSX1NZU1RFTV9QT1dFUk9GRgkweDQwMDAKQEAgLTIzOSwyMCArMTM1LDYgQEAKIAlQQjEyMDBfSU5UX0VORAkJPSBQQjEyMDBfSU5UX0JFR0lOICsgMTUKIH07CiAKLS8qCi0gKiBQYjEyMDAgc3BlY2lmaWMgUENNQ0lBIGRlZmluZXMgZm9yIGRyaXZlcnMvcGNtY2lhL2F1MTAwMF9kYjF4MDAuYwotICovCi0jZGVmaW5lIFBDTUNJQV9NQVhfU09DSyAgMQotI2RlZmluZSBQQ01DSUFfTlVNX1NPQ0tTIChQQ01DSUFfTUFYX1NPQ0sgKyAxKQotCi0vKiBWUFAvVkNDICovCi0jZGVmaW5lIFNFVF9WQ0NfVlBQKFZDQywgVlBQLCBTTE9UKSBcCi0JKCgoKFZDQykgPDwgMikgfCAoKFZQUCkgPDwgMCkpIDw8ICgoU0xPVCkgKiA4KSkKLQotI2RlZmluZSBCT0FSRF9QQzBfSU5UCVBCMTIwMF9QQzBfSU5UCi0jZGVmaW5lIEJPQVJEX1BDMV9JTlQJUEIxMjAwX1BDMV9JTlQKLSNkZWZpbmUgQk9BUkRfQ0FSRF9JTlNFUlRFRChTT0NLRVQpIGJjc3ItPnNpZ19zdGF0dXMgJiAoMSA8PCAoOCArICgyICogU09DS0VUKSkpCi0KIC8qIE5BTkQgY2hpcCBzZWxlY3QgKi8KICNkZWZpbmUgTkFORF9DUyAxCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1MDAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1MDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE1MWEyZS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxNTAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogQWxjaGVteSBTZW1pIFBiMTUwMCBSZWZlcnJlbmNlIEJvYXJkCi0gKgotICogQ29weXJpZ2h0IDIwMDEsIDIwMDggTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqCi0gKi8KLSNpZm5kZWYgX19BU01fUEIxNTAwX0gKLSNkZWZpbmUgX19BU01fUEIxNTAwX0gKLQotI2RlZmluZSBJREVOVF9CT0FSRF9SRUcgCTB4QUUwMDAwMDAKLSNkZWZpbmUgQk9BUkRfU1RBVFVTX1JFRwkweEFFMDAwMDA0Ci0jZGVmaW5lIFBDSV9CT0FSRF9SRUcJCTB4QUUwMDAwMTAKLSNkZWZpbmUgUENNQ0lBX0JPQVJEX1JFRwkweEFFMDAwMDEwCi0jICBkZWZpbmUgUENfREVBU1NFUlRfUlNUCSAgICAgIDB4ODAKLSMgIGRlZmluZSBQQ19EUlZfRU4JCSAgICAgIDB4MTAKLSNkZWZpbmUgUEIxNTAwX0dfQ09OVFJPTAkweEFFMDAwMDE0Ci0jZGVmaW5lIFBCMTUwMF9SU1RfVkRESSAJMHhBRTAwMDAxQwotI2RlZmluZSBQQjE1MDBfTEVEUwkJMHhBRTAwMDAxOAotCi0jZGVmaW5lIFBCMTUwMF9IRVhfTEVECQkweEFGMDAwMDA0Ci0jZGVmaW5lIFBCMTUwMF9IRVhfTEVEX0JMQU5LCTB4QUYwMDAwMDgKLQotLyogUENNQ0lBIFBiMTUwMCBzcGVjaWZpYyBkZWZpbmVzICovCi0jZGVmaW5lIFBDTUNJQV9NQVhfU09DSyAgMAotI2RlZmluZSBQQ01DSUFfTlVNX1NPQ0tTIChQQ01DSUFfTUFYX1NPQ0sgKyAxKQotCi0vKiBWUFAvVkNDICovCi0jZGVmaW5lIFNFVF9WQ0NfVlBQKFZDQywgVlBQKSAoKChWQ0MpIDw8IDIpIHwgKChWUFApIDw8IDApKQotCi0jZW5kaWYgLyogX19BU01fUEIxNTAwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1NTAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBiMXgwMC9wYjE1NTAuaAppbmRleCA2NzA0YTExLi41ODc5NjQxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wYjF4MDAvcGIxNTUwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcGIxeDAwL3BiMTU1MC5oCkBAIC00MCwxMDIgKzQwLDYgQEAKICNkZWZpbmUgU01CVVNfUFNDX0JBU0UJCVBTQzJfQkFTRV9BRERSCiAjZGVmaW5lIEkyU19QU0NfQkFTRQkJUFNDM19CQVNFX0FERFIKIAotI2RlZmluZSBCQ1NSX1BIWVNfQUREUiAweEFGMDAwMDAwCi0KLXR5cGVkZWYgdm9sYXRpbGUgc3RydWN0Ci17Ci0JLyowMCovCXUxNiB3aG9hbWk7Ci0JCXUxNiByZXNlcnZlZDA7Ci0JLyowNCovCXUxNiBzdGF0dXM7Ci0JCXUxNiByZXNlcnZlZDE7Ci0JLyowOCovCXUxNiBzd2l0Y2hlczsKLQkJdTE2IHJlc2VydmVkMjsKLQkvKjBDKi8JdTE2IHJlc2V0czsKLQkJdTE2IHJlc2VydmVkMzsKLQkvKjEwKi8JdTE2IHBjbWNpYTsKLQkJdTE2IHJlc2VydmVkNDsKLQkvKjE0Ki8JdTE2IHBjaTsKLQkJdTE2IHJlc2VydmVkNTsKLQkvKjE4Ki8JdTE2IGxlZHM7Ci0JCXUxNiByZXNlcnZlZDY7Ci0JLyoxQyovCXUxNiBzeXN0ZW07Ci0JCXUxNiByZXNlcnZlZDc7Ci0KLX0gQkNTUjsKLQotc3RhdGljIEJDU1IgKiBjb25zdCBiY3NyID0gKEJDU1IgKilCQ1NSX1BIWVNfQUREUjsKLQotLyoKLSAqIFJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIEJDU1JzCi0gKi8KLSNkZWZpbmUgQkNTUl9XSE9BTUlfRENJRAkweDAwMEYKLSNkZWZpbmUgQkNTUl9XSE9BTUlfQ1BMRAkweDAwRjAKLSNkZWZpbmUgQkNTUl9XSE9BTUlfQk9BUkQJMHgwRjAwCi0KLSNkZWZpbmUgQkNTUl9TVEFUVVNfUENNQ0lBMFZTCTB4MDAwMwotI2RlZmluZSBCQ1NSX1NUQVRVU19QQ01DSUExVlMJMHgwMDBDCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1BDTUNJQTBGSQkweDAwMTAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfUENNQ0lBMUZJCTB4MDAyMAotI2RlZmluZSBCQ1NSX1NUQVRVU19TV0FQQk9PVAkweDAwNDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfU1JBTVdJRFRICTB4MDA4MAotI2RlZmluZSBCQ1NSX1NUQVRVU19GTEFTSEJVU1kJMHgwMTAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1JPTUJVU1kJMHgwMjAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1VTQk9UR0lECTB4MDgwMAotI2RlZmluZSBCQ1NSX1NUQVRVU19VMFJYRAkweDEwMDAKLSNkZWZpbmUgQkNTUl9TVEFUVVNfVTFSWEQJMHgyMDAwCi0jZGVmaW5lIEJDU1JfU1RBVFVTX1UzUlhECTB4ODAwMAotCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfT0NUQUwJMHgwMEZGCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzEJMHgwMDgwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzIJMHgwMDQwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzMJMHgwMDIwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzQJMHgwMDEwCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzUJMHgwMDA4Ci0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzYJMHgwMDA0Ci0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzcJMHgwMDAyCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfRElQXzgJMHgwMDAxCi0jZGVmaW5lIEJDU1JfU1dJVENIRVNfUk9UQVJZCTB4MEYwMAotCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BIWTAJMHgwMDAxCi0jZGVmaW5lIEJDU1JfUkVTRVRTX1BIWTEJMHgwMDAyCi0jZGVmaW5lIEJDU1JfUkVTRVRTX0RDCQkweDAwMDQKLSNkZWZpbmUgQkNTUl9SRVNFVFNfV1NDCQkweDIwMDAKLSNkZWZpbmUgQkNTUl9SRVNFVFNfU1BJU0VMCTB4NDAwMAotI2RlZmluZSBCQ1NSX1JFU0VUU19ETUFSRVEJMHg4MDAwCi0KLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMwVlBQCTB4MDAwMwotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBWQ0MJMHgwMDBDCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMERSVkVOCTB4MDAxMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzBSU1QJMHgwMDgwCi0jZGVmaW5lIEJDU1JfUENNQ0lBX1BDMVZQUAkweDAzMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxVkNDCTB4MEMwMAotI2RlZmluZSBCQ1NSX1BDTUNJQV9QQzFEUlZFTgkweDEwMDAKLSNkZWZpbmUgQkNTUl9QQ01DSUFfUEMxUlNUCTB4ODAwMAotCi0jZGVmaW5lIEJDU1JfUENJX002NkVOCQkweDAwMDEKLSNkZWZpbmUgQkNTUl9QQ0lfTTMzCQkweDAxMDAKLSNkZWZpbmUgQkNTUl9QQ0lfRVhURVJOQVJCCTB4MDIwMAotI2RlZmluZSBCQ1NSX1BDSV9HUElPMjAwUlNUCTB4MDQwMAotI2RlZmluZSBCQ1NSX1BDSV9DTEtPVVQJCTB4MDgwMAotI2RlZmluZSBCQ1NSX1BDSV9DRkdIT1NUCTB4MTAwMAotCi0jZGVmaW5lIEJDU1JfTEVEU19ERUNJTUFMUwkweDAwRkYKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDAJCTB4MDEwMAotI2RlZmluZSBCQ1NSX0xFRFNfTEVEMQkJMHgwMjAwCi0jZGVmaW5lIEJDU1JfTEVEU19MRUQyCQkweDA0MDAKLSNkZWZpbmUgQkNTUl9MRURTX0xFRDMJCTB4MDgwMAotCi0jZGVmaW5lIEJDU1JfU1lTVEVNX1ZEREkJMHgwMDFGCi0jZGVmaW5lIEJDU1JfU1lTVEVNX1BPV0VST0ZGCTB4NDAwMAotI2RlZmluZSBCQ1NSX1NZU1RFTV9SRVNFVAkweDgwMDAKLQotI2RlZmluZSBQQ01DSUFfTUFYX1NPQ0sgIDEKLSNkZWZpbmUgUENNQ0lBX05VTV9TT0NLUyAoUENNQ0lBX01BWF9TT0NLICsgMSkKLQotLyogVlBQL1ZDQyAqLwotI2RlZmluZSBTRVRfVkNDX1ZQUChWQ0MsIFZQUCwgU0xPVCkgXAotCSgoKChWQ0MpIDw8IDIpIHwgKChWUFApIDw8IDApKSA8PCAoKFNMT1QpICogOCkpCi0KICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEIxNTUwX0JPT1QpICYmIGRlZmluZWQoQ09ORklHX01URF9QQjE1NTBfVVNFUikKICNkZWZpbmUgUEIxNTUwX0JPVEhfQkFOS1MKICNlbGlmIGRlZmluZWQoQ09ORklHX01URF9QQjE1NTBfQk9PVCkgJiYgIWRlZmluZWQoQ09ORklHX01URF9QQjE1NTBfVVNFUikKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBueDgzM3gvaXJxLW1hcHBpbmcuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBueDgzM3gvaXJxLW1hcHBpbmcuaAppbmRleCA2NTdmMDg5Li42ZDcwMjY0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1wbng4MzN4L2lycS1tYXBwaW5nLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG54ODMzeC9pcnEtbWFwcGluZy5oCkBAIC0xMjMsNCArMTIzLDMgQEAKICNkZWZpbmUgUE5YODMzWF9HUElPXzE1X0lOVAkJCShQTlg4MzNYX0dQSU9fSVJRX0JBU0UgKyAxNSkKIAogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLXBvd2VydHYvaW50ZXJydXB0cy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pbnRlcnJ1cHRzLmgKaW5kZXggNjI5YTU3NC4uNGZkNjUyYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pbnRlcnJ1cHRzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtcG93ZXJ0di9pbnRlcnJ1cHRzLmgKQEAgLTI1MSw0ICsyNTEsMyBAQAogCQkJCQkJICogY2hhbm5lbCAzLiAqLwogI2RlZmluZSBpcnFfbXBlZ19kCQkoaWJhc2UrMCkgCS8qIE1QRUcgRGVjb2RlciBJbnRlcnJ1cHQgKi8KICNlbmRpZgkvKiBfQVNNX01BQ0hfUE9XRVJUVl9JTlRFUlJVUFRTX0hfICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzcmVncy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKaW5kZXggZjRhYjMxMy4uNDkzODJkNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmgKQEAgLTI1MSw2ICsyNTEsMTQgQEAKICNkZWZpbmUgUExfMjU2TQkJMjgKIAogLyoKKyAqIFBhZ2VHcmFpbiBiaXRzCisgKi8KKyNkZWZpbmUgUEdfUklFCQkoX1VMQ0FTVF8oMSkgPDwgIDMxKQorI2RlZmluZSBQR19YSUUJCShfVUxDQVNUXygxKSA8PCAgMzApCisjZGVmaW5lIFBHX0VMUEEJCShfVUxDQVNUXygxKSA8PCAgMjkpCisjZGVmaW5lIFBHX0VTUAkJKF9VTENBU1RfKDEpIDw8ICAyOCkKKworLyoKICAqIFI0eDAwIGludGVycnVwdCBlbmFibGUgLyBjYXVzZSBiaXRzCiAgKi8KICNkZWZpbmUgSUVfU1cwICAgICAgICAgIChfVUxDQVNUXygxKSA8PCAgOCkKQEAgLTU3Niw2ICs1ODQsMTAgQEAKICNkZWZpbmUgTUlQU19DT05GM19EU1AJCShfVUxDQVNUXygxKSA8PCAxMCkKICNkZWZpbmUgTUlQU19DT05GM19VTFJJCQkoX1VMQ0FTVF8oMSkgPDwgMTMpCiAKKyNkZWZpbmUgTUlQU19DT05GNF9NTVVTSVpFRVhUCShfVUxDQVNUXygyNTUpIDw8IDApCisjZGVmaW5lIE1JUFNfQ09ORjRfTU1VRVhUREVGCShfVUxDQVNUXygzKSA8PCAxNCkKKyNkZWZpbmUgTUlQU19DT05GNF9NTVVFWFRERUZfTU1VU0laRUVYVCAoX1VMQ0FTVF8oMSkgPDwgMTQpCisKICNkZWZpbmUgTUlQU19DT05GN19XSUkJCShfVUxDQVNUXygxKSA8PCAzMSkKIAogI2RlZmluZSBNSVBTX0NPTkY3X1JQUwkJKF9VTENBU1RfKDEpIDw8IDIpCkBAIC04MjYsNiArODM4LDkgQEAKICNkZWZpbmUgcmVhZF9jMF9wYWdlbWFzaygpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkNSwgMCkKICNkZWZpbmUgd3JpdGVfYzBfcGFnZW1hc2sodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQ1LCAwLCB2YWwpCiAKKyNkZWZpbmUgcmVhZF9jMF9wYWdlZ3JhaW4oKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDUsIDEpCisjZGVmaW5lIHdyaXRlX2MwX3BhZ2VncmFpbih2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDUsIDEsIHZhbCkKKwogI2RlZmluZSByZWFkX2MwX3dpcmVkKCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkNiwgMCkKICNkZWZpbmUgd3JpdGVfYzBfd2lyZWQodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQ2LCAwLCB2YWwpCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tc2MwMV9pYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21zYzAxX2ljLmgKaW5kZXggNzk4OWI5Zi4uZDkyNDA2YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21zYzAxX2ljLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21zYzAxX2ljLmgKQEAgLTE0NSw0ICsxNDUsMyBAQAogZXh0ZXJuIHZvaWQgbGxfbXNjX2lycSh2b2lkKTsKIAogI2VuZGlmIC8qIF9fQVNNX01JUFNfQk9BUkRTX01TQzAxX0lDX0ggKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25pbGU0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmlsZTQuaAppbmRleCBjM2NhOTU5Li5hZjBlNTFhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmlsZTQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmlsZTQuaApAQCAtMzA3LDQgKzMwNywzIEBACiBleHRlcm4gdm9pZCBuaWxlNF9kdW1wX2lycV9zdGF0dXModm9pZCk7CS8qIERlYnVnICovCiAKICNlbmRpZgotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi1mZWF0dXJlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi1mZWF0dXJlLmgKaW5kZXggZWYyNGE3Yi4uY2JhNmZiZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9vY3Rlb24tZmVhdHVyZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vb2N0ZW9uLWZlYXR1cmUuaApAQCAtOTksNiArOTksOCBAQAogCQlyZXR1cm4gIWN2bXhfZnVzZV9yZWFkKDkwKTsKIAogCWNhc2UgT0NURU9OX0ZFQVRVUkVfUENJRToKKwljYXNlIE9DVEVPTl9GRUFUVVJFX01HTVRfUE9SVDoKKwljYXNlIE9DVEVPTl9GRUFUVVJFX1JBSUQ6CiAJCXJldHVybiBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTZYWCkKIAkJCXx8IE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041MlhYKTsKIApAQCAtMTEwLDEyICsxMTIsNiBAQAogCWNhc2UgT0NURU9OX0ZFQVRVUkVfVFJBOgogCQlyZXR1cm4gIShPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NOMzBYWCkKIAkJCSB8fCBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTBYWCkpOwotCWNhc2UgT0NURU9OX0ZFQVRVUkVfTUdNVF9QT1JUOgotCQlyZXR1cm4gT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjU2WFgpCi0JCQl8fCBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTJYWCk7Ci0JY2FzZSBPQ1RFT05fRkVBVFVSRV9SQUlEOgotCQlyZXR1cm4gT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjU2WFgpCi0JCQl8fCBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTJYWCk7CiAJY2FzZSBPQ1RFT05fRkVBVFVSRV9VU0I6CiAJCXJldHVybiAhKE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ04zOFhYKQogCQkJIHx8IE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041OFhYKSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL29jdGVvbi9vY3Rlb24uaAppbmRleCA0ZDBhOGM2Li5jYTYyMTRiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vb2N0ZW9uL29jdGVvbi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9vY3Rlb24vb2N0ZW9uLmgKQEAgLTIxMyw2ICsyMTMsMTEgQEAKIAlpbnQJCWRtYV9lbmdpbmU7CS8qIC0xIGZvciBubyBETUEgKi8KIH07CiAKK3N0cnVjdCBvY3Rlb25faTJjX2RhdGEgeworCXVuc2lnbmVkIGludAlzeXNfZnJlcTsKKwl1bnNpZ25lZCBpbnQJaTJjX2ZyZXE7Cit9OworCiBleHRlcm4gdm9pZCBvY3Rlb25fd3JpdGVfbGNkKGNvbnN0IGNoYXIgKnMpOwogZXh0ZXJuIHZvaWQgb2N0ZW9uX2NoZWNrX2NwdV9iaXN0KHZvaWQpOwogZXh0ZXJuIGludCBvY3Rlb25fZ2V0X2Jvb3RfZGVidWdfZmxhZyh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IGYyNjYyOTUuLmFjMzI1NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTA3LDE4ICsxMDcsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OwogCiAvKgotICogRm9yIDMtbGV2ZWwgcGFnZXRhYmxlcyB3ZSBkZWZpbmVzIHRoZXNlIG91cnNlbHZlcywgZm9yIDItbGV2ZWwgdGhlCi0gKiBkZWZpbml0aW9ucyBhcmUgc3VwcGxpZWQgYnkgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4uCi0gKi8KLSNpZmRlZiBDT05GSUdfNjRCSVQKLQotdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZDsgfSBwbWRfdDsKLSNkZWZpbmUgcG1kX3ZhbCh4KQkoKHgpLnBtZCkKLSNkZWZpbmUgX19wbWQoeCkJKChwbWRfdCkgeyAoeCkgfSApCi0KLSNlbmRpZgotCi0vKgogICogUmlnaHQgbm93IHdlIGRvbid0IHN1cHBvcnQgNC1sZXZlbCBwYWdldGFibGVzLCBzbyBhbGwgcHVkLXJlbGF0ZWQKICAqIGRlZmluaXRpb25zIGNvbWUgZnJvbSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oPi4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhcmFtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFyYW0uaAppbmRleCAxZDliYjhjLi5kYTM5MjBmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFyYW0uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFyYW0uaApAQCAtOSwyMyArOSw4IEBACiAjaWZuZGVmIF9BU01fUEFSQU1fSAogI2RlZmluZSBfQVNNX1BBUkFNX0gKIAotI2lmZGVmIF9fS0VSTkVMX18KLQotIyBkZWZpbmUgSFoJCUNPTkZJR19IWgkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCi0jIGRlZmluZSBVU0VSX0haCTEwMAkJLyogLi4gc29tZSB1c2VyIGludGVyZmFjZXMgYXJlIGluICJ0aWNrcyIgKi8KLSMgZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKQkvKiBsaWtlIHRpbWVzKCkgKi8KLSNlbmRpZgotCi0jaWZuZGVmIEhaCi0jZGVmaW5lIEhaIDEwMAotI2VuZGlmCi0KICNkZWZpbmUgRVhFQ19QQUdFU0laRQk2NTUzNgogCi0jaWZuZGVmIE5PR1JPVVAKLSNkZWZpbmUgTk9HUk9VUAkJKC0xKQotI2VuZGlmCi0KLSNkZWZpbmUgTUFYSE9TVE5BTUVMRU4JNjQJLyogbWF4IGxlbmd0aCBvZiBob3N0bmFtZSAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BhcmFtLmg+CiAKICNlbmRpZiAvKiBfQVNNX1BBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYXJwb3J0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGFycG9ydC5oCmluZGV4IGY1MjY1NjguLmNmMjUyYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wYXJwb3J0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BhcnBvcnQuaApAQCAtMSwxNSArMSBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCAgVGltIFdhdWdoIDx0aW1AY3liZXJlbGsuZGVtb24uY28udWs+Ci0gKgotICogVGhpcyBmaWxlIHNob3VsZCBvbmx5IGJlIGluY2x1ZGVkIGJ5IGRyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMuCi0gKi8KLSNpZm5kZWYgX0FTTV9QQVJQT1JUX0gKLSNkZWZpbmUgX0FTTV9QQVJQT1JUX0gKLQotc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9wY19maW5kX2lzYV9wb3J0cyhpbnQgYXV0b2lycSwgaW50IGF1dG9kbWEpOwotc3RhdGljIGludCBfX2RldmluaXQgcGFycG9ydF9wY19maW5kX25vbnBjaV9wb3J0cyhpbnQgYXV0b2lycSwgaW50IGF1dG9kbWEpCi17Ci0JcmV0dXJuIHBhcnBvcnRfcGNfZmluZF9pc2FfcG9ydHMoYXV0b2lycSwgYXV0b2RtYSk7Ci19Ci0KLSNlbmRpZiAvKiBfQVNNX1BBUlBPUlRfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BhcnBvcnQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDM3MzhmNGIuLjg4MWQxOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMzEsNyArMzEsNyBAQAogICovCiBleHRlcm4gdm9pZCBwbWRfaW5pdCh1bnNpZ25lZCBsb25nIHBhZ2UsIHVuc2lnbmVkIGxvbmcgcGFnZXRhYmxlKTsKIAotI2lmZGVmIENPTkZJR182NEJJVAorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWQsIHBtZF90ICpwbWQpCiB7CkBAIC0xMDQsNyArMTA0LDcgQEAKIAl0bGJfcmVtb3ZlX3BhZ2UoKHRsYiksIHB0ZSk7CQkJXAogfSB3aGlsZSAoMCkKIAotI2lmZGVmIENPTkZJR182NEJJVAorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAKIHN0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTMyLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS0zMi5oCmluZGV4IDU1ODEzZDYuLmFlOTA0MTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTMyLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtMzIuaApAQCAtMTI3LDggKzEyNyw4IEBACiAjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKHgpLnB0ZSA+PiAoUEFHRV9TSElGVCArIDIpKSkKICNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgocGZuKSA8PCAoUEFHRV9TSElGVCArIDIpKSB8IHBncHJvdF92YWwocHJvdCkpCiAjZWxzZQotI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKCh4KS5wdGUgPj4gUEFHRV9TSElGVCkpCi0jZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHVuc2lnbmVkIGxvbmcgbG9uZykocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpCisjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKHgpLnB0ZSA+PiBfUEZOX1NISUZUKSkKKyNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgodW5zaWduZWQgbG9uZyBsb25nKShwZm4pIDw8IF9QRk5fU0hJRlQpIHwgcGdwcm90X3ZhbChwcm90KSkKICNlbmRpZgogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgJiYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtNjQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTY0LmgKaW5kZXggOGVkYTMwYi4uMjZkYzY5ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtNjQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS02NC5oCkBAIC0xNiw3ICsxNiwxMSBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZWN0bC5oPgogI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KIAorI2lmZGVmIENPTkZJR19QQUdFX1NJWkVfNjRLQgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4KKyNlbHNlCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oPgorI2VuZGlmCiAKIC8qCiAgKiBFYWNoIGFkZHJlc3Mgc3BhY2UgaGFzIDIgNEsgcGFnZXMgYXMgaXRzIHBhZ2UgZGlyZWN0b3J5LCBnaXZpbmcgMTAyNApAQCAtMzcsMTMgKzQxLDIwIEBACiAgKiBmYXVsdCBhZGRyZXNzIC0gVk1BTExPQ19TVEFSVC4KICAqLwogCisKKy8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2lmZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKKyNkZWZpbmUgUEdESVJfU0hJRlQJKFBBR0VfU0hJRlQgKyBQQUdFX1NISUZUICsgUFRFX09SREVSIC0gMykKKyNlbHNlCisKIC8qIFBNRF9TSElGVCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBhcmVhIGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgY2FuIG1hcCAqLwogI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyAoUEFHRV9TSElGVCArIFBURV9PUkRFUiAtIDMpKQogI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKICNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCiAKLS8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworCiAjZGVmaW5lIFBHRElSX1NISUZUCShQTURfU0hJRlQgKyAoUEFHRV9TSElGVCArIFBNRF9PUkRFUiAtIDMpKQorI2VuZGlmCiAjZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKICNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQogCkBAIC05MiwxMiArMTAzLDE0IEBACiAjaWZkZWYgQ09ORklHX1BBR0VfU0laRV82NEtCCiAjZGVmaW5lIFBHRF9PUkRFUgkJMAogI2RlZmluZSBQVURfT1JERVIJCWFpZWVlZV9hdHRlbXB0X3RvX2FsbG9jYXRlX3B1ZAotI2RlZmluZSBQTURfT1JERVIJCTAKKyNkZWZpbmUgUE1EX09SREVSCQlhaWVlZWVfYXR0ZW1wdF90b19hbGxvY2F0ZV9wbWQKICNkZWZpbmUgUFRFX09SREVSCQkwCiAjZW5kaWYKIAogI2RlZmluZSBQVFJTX1BFUl9QR0QJKChQQUdFX1NJWkUgPDwgUEdEX09SREVSKSAvIHNpemVvZihwZ2RfdCkpCisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKICNkZWZpbmUgUFRSU19QRVJfUE1ECSgoUEFHRV9TSVpFIDw8IFBNRF9PUkRFUikgLyBzaXplb2YocG1kX3QpKQorI2VuZGlmCiAjZGVmaW5lIFBUUlNfUEVSX1BURQkoKFBBR0VfU0laRSA8PCBQVEVfT1JERVIpIC8gc2l6ZW9mKHB0ZV90KSkKIAogI2lmIFBHRElSX1NJWkUgPj0gVEFTS19TSVpFCkBAIC0xMjIsMTUgKzEzNSwzMCBAQAogCiAjZGVmaW5lIHB0ZV9FUlJPUihlKSBcCiAJcHJpbnRrKCIlczolZDogYmFkIHB0ZSAlMDE2bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHB0ZV92YWwoZSkpCisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKICNkZWZpbmUgcG1kX0VSUk9SKGUpIFwKIAlwcmludGsoIiVzOiVkOiBiYWQgcG1kICUwMTZseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcG1kX3ZhbChlKSkKKyNlbmRpZgogI2RlZmluZSBwZ2RfRVJST1IoZSkgXAogCXByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJTAxNmx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKQogCiBleHRlcm4gcHRlX3QgaW52YWxpZF9wdGVfdGFibGVbUFRSU19QRVJfUFRFXTsKIGV4dGVybiBwdGVfdCBlbXB0eV9iYWRfcGFnZV90YWJsZVtQVFJTX1BFUl9QVEVdOworCisKKyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAorLyoKKyAqIEZvciAzLWxldmVsIHBhZ2V0YWJsZXMgd2UgZGVmaW5lcyB0aGVzZSBvdXJzZWx2ZXMsIGZvciAyLWxldmVsIHRoZQorICogZGVmaW5pdGlvbnMgYXJlIHN1cHBsaWVkIGJ5IDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmg+LgorICovCit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcG1kOyB9IHBtZF90OworI2RlZmluZSBwbWRfdmFsKHgpCSgoeCkucG1kKQorI2RlZmluZSBfX3BtZCh4KQkoKHBtZF90KSB7ICh4KSB9ICkKKworCiBleHRlcm4gcG1kX3QgaW52YWxpZF9wbWRfdGFibGVbUFRSU19QRVJfUE1EXTsKIGV4dGVybiBwbWRfdCBlbXB0eV9iYWRfcG1kX3RhYmxlW1BUUlNfUEVSX1BNRF07CisjZW5kaWYKIAogLyoKICAqIEVtcHR5IHBnZC9wbWQgZW50cmllcyBwb2ludCB0byB0aGUgaW52YWxpZF9wdGVfdGFibGUuCkBAIC0xNTEsNiArMTc5LDcgQEAKIHsKIAlwbWRfdmFsKCpwbWRwKSA9ICgodW5zaWduZWQgbG9uZykgaW52YWxpZF9wdGVfdGFibGUpOwogfQorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAKIC8qCiAgKiBFbXB0eSBwdWQgZW50cmllcyBwb2ludCB0byB0aGUgaW52YWxpZF9wbWRfdGFibGUuCkBAIC0xNzQsNiArMjAzLDcgQEAKIHsKIAlwdWRfdmFsKCpwdWRwKSA9ICgodW5zaWduZWQgbG9uZykgaW52YWxpZF9wbWRfdGFibGUpOwogfQorI2VuZGlmCiAKICNkZWZpbmUgcHRlX3BhZ2UoeCkJCXBmbl90b19wYWdlKHB0ZV9wZm4oeCkpCiAKQEAgLTE4MSw4ICsyMTEsOCBAQAogI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKCh4KS5wdGUgPj4gKFBBR0VfU0hJRlQgKyAyKSkpCiAjZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHBmbikgPDwgKFBBR0VfU0hJRlQgKyAyKSkgfCBwZ3Byb3RfdmFsKHByb3QpKQogI2Vsc2UKLSNkZWZpbmUgcHRlX3Bmbih4KQkJKCh1bnNpZ25lZCBsb25nKSgoeCkucHRlID4+IFBBR0VfU0hJRlQpKQotI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkJX19wdGUoKChwZm4pIDw8IFBBR0VfU0hJRlQpIHwgcGdwcm90X3ZhbChwcm90KSkKKyNkZWZpbmUgcHRlX3Bmbih4KQkJKCh1bnNpZ25lZCBsb25nKSgoeCkucHRlID4+IF9QRk5fU0hJRlQpKQorI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkJX19wdGUoKChwZm4pIDw8IF9QRk5fU0hJRlQpIHwgcGdwcm90X3ZhbChwcm90KSkKICNlbmRpZgogCiAjZGVmaW5lIF9fcGdkX29mZnNldChhZGRyZXNzKQlwZ2RfaW5kZXgoYWRkcmVzcykKQEAgLTE5OCw2ICsyMjgsNyBAQAogLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIHBhZ2UtdGFibGUtZGlyZWN0b3J5ICovCiAjZGVmaW5lIHBnZF9vZmZzZXQobW0sIGFkZHIpCSgobW0pLT5wZ2QgKyBwZ2RfaW5kZXgoYWRkcikpCiAKKyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB1ZF9wYWdlX3ZhZGRyKHB1ZF90IHB1ZCkKIHsKIAlyZXR1cm4gcHVkX3ZhbChwdWQpOwpAQCAtMjEwLDYgKzI0MSw3IEBACiB7CiAJcmV0dXJuIChwbWRfdCAqKSBwdWRfcGFnZV92YWRkcigqcHVkKSArIHBtZF9pbmRleChhZGRyZXNzKTsKIH0KKyNlbmRpZgogCiAvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8KICNkZWZpbmUgX19wdGVfb2Zmc2V0KGFkZHJlc3MpCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy5oCmluZGV4IDEwNzNlNmQuLmU5ZmU3ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLWJpdHMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS1iaXRzLmgKQEAgLTUwLDcgKzUwLDcgQEAKICNkZWZpbmUgX0NBQ0hFX1NISUZUICAgICAgICAgICAgICAgIDMKICNkZWZpbmUgX0NBQ0hFX01BU0sgICAgICAgICAgICAgICAgICg3PDwzKQogCi0jZWxzZQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1IzMDAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfVFgzOVhYKQogCiAjZGVmaW5lIF9QQUdFX1BSRVNFTlQgICAgICAgICAgICAgICAoMTw8MCkgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCiAjZGVmaW5lIF9QQUdFX1JFQUQgICAgICAgICAgICAgICAgICAoMTw8MSkgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCkBAIC01OSw4ICs1OSw2IEBACiAjZGVmaW5lIF9QQUdFX01PRElGSUVEICAgICAgICAgICAgICAoMTw8NCkgIC8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCiAjZGVmaW5lIF9QQUdFX0ZJTEUgICAgICAgICAgICAgICAgICAoMTw8NCkgIC8qIHNldDpwYWdlY2FjaGUgdW5zZXQ6c3dhcCAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1IzMDAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfVFgzOVhYKQotCiAjZGVmaW5lIF9QQUdFX0dMT0JBTCAgICAgICAgICAgICAgICAoMTw8OCkKICNkZWZpbmUgX1BBR0VfVkFMSUQgICAgICAgICAgICAgICAgICgxPDw5KQogI2RlZmluZSBfUEFHRV9TSUxFTlRfUkVBRCAgICAgICAgICAgKDE8PDkpICAvKiBzeW5vbnltICAgICAgICAgICAgICAgICAqLwpAQCAtNjksMjEgKzY3LDExMyBAQAogI2RlZmluZSBfQ0FDSEVfVU5DQUNIRUQgICAgICAgICAgICAgKDE8PDExKQogI2RlZmluZSBfQ0FDSEVfTUFTSyAgICAgICAgICAgICAgICAgKDE8PDExKQogCisjZWxzZSAvKiAnTm9ybWFsJyByNEsgY2FzZSAqLworLyoKKyAqIFdoZW4gdXNpbmcgdGhlIFJJL1hJIGJpdCBzdXBwb3J0LCB3ZSBoYXZlIDEzIGJpdHMgb2YgZmxhZ3MgYmVsb3cKKyAqIHRoZSBwaHlzaWNhbCBhZGRyZXNzLiBUaGUgUkkvWEkgYml0cyBhcmUgcGxhY2VkIHN1Y2ggdGhhdCBhIFNSTCA1CisgKiBjYW4gc3RyaXAgb2ZmIHRoZSBzb2Z0d2FyZSBiaXRzLCB0aGVuIGEgUk9UUiAyIGNhbiBtb3ZlIHRoZSBSSS9YSQorICogaW50byBiaXRzIFs2Mzo2Ml0uIFRoaXMgYWxzbyBsaW1pdHMgcGh5c2ljYWwgYWRkcmVzcyB0byA1NiBiaXRzLAorICogd2hpY2ggaXMgbW9yZSB0aGFuIHdlIG5lZWQgcmlnaHQgbm93LgorICovCisKKy8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX1BSRVNFTlRfU0hJRlQJKDApCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJCSgxIDw8IF9QQUdFX1BSRVNFTlRfU0hJRlQpCisvKiBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZSwgc2hvdWxkIGJlIHVudXNlZCBpZiBrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aS4gKi8KKyNkZWZpbmUgX1BBR0VfUkVBRF9TSElGVAkoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgPyBfUEFHRV9QUkVTRU5UX1NISUZUIDogX1BBR0VfUFJFU0VOVF9TSElGVCArIDEpCisjZGVmaW5lIF9QQUdFX1JFQUQgKHtpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIEJVRygpOyAxIDw8IF9QQUdFX1JFQURfU0hJRlQ7IH0pCisvKiBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZSAqLworI2RlZmluZSBfUEFHRV9XUklURV9TSElGVAkoX1BBR0VfUkVBRF9TSElGVCArIDEpCisjZGVmaW5lIF9QQUdFX1dSSVRFCQkoMSA8PCBfUEFHRV9XUklURV9TSElGVCkKKy8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VEX1NISUZUCShfUEFHRV9XUklURV9TSElGVCArIDEpCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECQkoMSA8PCBfUEFHRV9BQ0NFU1NFRF9TSElGVCkKKy8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCisjZGVmaW5lIF9QQUdFX01PRElGSUVEX1NISUZUCShfUEFHRV9BQ0NFU1NFRF9TSElGVCArIDEpCisjZGVmaW5lIF9QQUdFX01PRElGSUVECQkoMSA8PCBfUEFHRV9NT0RJRklFRF9TSElGVCkKKy8qIHNldDpwYWdlY2FjaGUgdW5zZXQ6c3dhcCAqLworI2RlZmluZSBfUEFHRV9GSUxFCQkoX1BBR0VfTU9ESUZJRUQpCisKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisvKiBodWdlIHRsYiBwYWdlICovCisjZGVmaW5lIF9QQUdFX0hVR0VfU0hJRlQJKF9QQUdFX01PRElGSUVEX1NISUZUICsgMSkKKyNkZWZpbmUgX1BBR0VfSFVHRQkJKDEgPDwgX1BBR0VfSFVHRV9TSElGVCkKICNlbHNlCi0KLSNkZWZpbmUgX1BBR0VfUjRLQlVHICAgICAgICAgICAgICAgICgxPDw1KSAgLyogd29ya2Fyb3VuZCBmb3IgcjRrIGJ1ZyAgKi8KLSNkZWZpbmUgX1BBR0VfSFVHRSAgICAgICAgICAgICAgICAgICgxPDw1KSAgLyogaHVnZSB0bGIgcGFnZSAqLwotI2RlZmluZSBfUEFHRV9HTE9CQUwgICAgICAgICAgICAgICAgKDE8PDYpCi0jZGVmaW5lIF9QQUdFX1ZBTElEICAgICAgICAgICAgICAgICAoMTw8NykKLSNkZWZpbmUgX1BBR0VfU0lMRU5UX1JFQUQgICAgICAgICAgICgxPDw3KSAgLyogc3lub255bSAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BBR0VfRElSVFkgICAgICAgICAgICAgICAgICgxPDw4KSAgLyogVGhlIE1JUFMgZGlydHkgYml0ICAgICAgKi8KLSNkZWZpbmUgX1BBR0VfU0lMRU5UX1dSSVRFICAgICAgICAgICgxPDw4KQotI2RlZmluZSBfQ0FDSEVfU0hJRlQJCSAgICA5Ci0jZGVmaW5lIF9DQUNIRV9NQVNLICAgICAgICAgICAgICAgICAoNzw8OSkKLQorI2RlZmluZSBfUEFHRV9IVUdFX1NISUZUCShfUEFHRV9NT0RJRklFRF9TSElGVCkKKyNkZWZpbmUgX1BBR0VfSFVHRQkJKHtCVUcoKTsgMTsgfSkgIC8qIER1bW15IHZhbHVlICovCiAjZW5kaWYKKworLyogUGFnZSBjYW5ub3QgYmUgZXhlY3V0ZWQgKi8KKyNkZWZpbmUgX1BBR0VfTk9fRVhFQ19TSElGVAkoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgPyBfUEFHRV9IVUdFX1NISUZUICsgMSA6IF9QQUdFX0hVR0VfU0hJRlQpCisjZGVmaW5lIF9QQUdFX05PX0VYRUMJCSh7aWYgKCFrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgQlVHKCk7IDEgPDwgX1BBR0VfTk9fRVhFQ19TSElGVDsgfSkKKworLyogUGFnZSBjYW5ub3QgYmUgcmVhZCAqLworI2RlZmluZSBfUEFHRV9OT19SRUFEX1NISUZUCShrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSA/IF9QQUdFX05PX0VYRUNfU0hJRlQgKyAxIDogX1BBR0VfTk9fRVhFQ19TSElGVCkKKyNkZWZpbmUgX1BBR0VfTk9fUkVBRAkJKHtpZiAoIWtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSBCVUcoKTsgMSA8PCBfUEFHRV9OT19SRUFEX1NISUZUOyB9KQorCisjZGVmaW5lIF9QQUdFX0dMT0JBTF9TSElGVAkoX1BBR0VfTk9fUkVBRF9TSElGVCArIDEpCisjZGVmaW5lIF9QQUdFX0dMT0JBTAkJKDEgPDwgX1BBR0VfR0xPQkFMX1NISUZUKQorCisjZGVmaW5lIF9QQUdFX1ZBTElEX1NISUZUCShfUEFHRV9HTE9CQUxfU0hJRlQgKyAxKQorI2RlZmluZSBfUEFHRV9WQUxJRAkJKDEgPDwgX1BBR0VfVkFMSURfU0hJRlQpCisvKiBzeW5vbnltICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9TSUxFTlRfUkVBRAkoX1BBR0VfVkFMSUQpCisKKy8qIFRoZSBNSVBTIGRpcnR5IGJpdCAgICAgICovCisjZGVmaW5lIF9QQUdFX0RJUlRZX1NISUZUCShfUEFHRV9WQUxJRF9TSElGVCArIDEpCisjZGVmaW5lIF9QQUdFX0RJUlRZCQkoMSA8PCBfUEFHRV9ESVJUWV9TSElGVCkKKyNkZWZpbmUgX1BBR0VfU0lMRU5UX1dSSVRFCShfUEFHRV9ESVJUWSkKKworI2RlZmluZSBfQ0FDSEVfU0hJRlQJCShfUEFHRV9ESVJUWV9TSElGVCArIDEpCisjZGVmaW5lIF9DQUNIRV9NQVNLCQkoNyA8PCBfQ0FDSEVfU0hJRlQpCisKKyNkZWZpbmUgX1BGTl9TSElGVAkJKFBBR0VfU0hJRlQgLSAxMiArIF9DQUNIRV9TSElGVCArIDMpCisKICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR182NEJJVF9QSFlTX0FERFIgJiYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikgKi8KIAorI2lmbmRlZiBfUEZOX1NISUZUCisjZGVmaW5lIF9QRk5fU0hJRlQgICAgICAgICAgICAgICAgICBQQUdFX1NISUZUCisjZW5kaWYKKyNkZWZpbmUgX1BGTl9NQVNLCQkofigoMSA8PCAoX1BGTl9TSElGVCkpIC0gMSkpCisKKyNpZm5kZWYgX1BBR0VfTk9fUkVBRAorI2RlZmluZSBfUEFHRV9OT19SRUFEICh7QlVHKCk7IDA7IH0pCisjZGVmaW5lIF9QQUdFX05PX1JFQURfU0hJRlQgKHtCVUcoKTsgMDsgfSkKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9OT19FWEVDCisjZGVmaW5lIF9QQUdFX05PX0VYRUMgKHtCVUcoKTsgMDsgfSkKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9HTE9CQUxfU0hJRlQKKyNkZWZpbmUgX1BBR0VfR0xPQkFMX1NISUZUIGlsb2cyKF9QQUdFX0dMT0JBTCkKKyNlbmRpZgorCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogcHRlX3RvX2VudHJ5bG8gY29udmVydHMgYSBwYWdlIHRhYmxlIGVudHJ5IChQVEUpIGludG8gYSBNaXBzCisgKiBlbnRyeWxvMC8xIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IHB0ZV90b19lbnRyeWxvKHVuc2lnbmVkIGxvbmcgcHRlX3ZhbCkKK3sKKwlpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIHsKKwkJaW50IHNhOworI2lmZGVmIENPTkZJR18zMkJJVAorCQlzYSA9IDMxIC0gX1BBR0VfTk9fUkVBRF9TSElGVDsKKyNlbHNlCisJCXNhID0gNjMgLSBfUEFHRV9OT19SRUFEX1NISUZUOworI2VuZGlmCisJCS8qCisJCSAqIEMgaGFzIG5vIHdheSB0byBleHByZXNzIHRoYXQgdGhpcyBpcyBhIERTUkwKKwkJICogX1BBR0VfTk9fRVhFQ19TSElGVCBmb2xsb3dlZCBieSBhIFJPVFIgMi4gIEx1Y2tpbHkKKwkJICogaW4gdGhlIGZhc3QgcGF0aCB0aGlzIGlzIGRvbmUgaW4gYXNzZW1ibHkKKwkJICovCisJCXJldHVybiAocHRlX3ZhbCA+PiBfUEFHRV9HTE9CQUxfU0hJRlQpIHwKKwkJCSgocHRlX3ZhbCAmIChfUEFHRV9OT19FWEVDIHwgX1BBR0VfTk9fUkVBRCkpIDw8IHNhKTsKKwl9CisKKwlyZXR1cm4gcHRlX3ZhbCA+PiBfUEFHRV9HTE9CQUxfU0hJRlQ7Cit9CisjZW5kaWYKIAogLyoKICAqIENhY2hlIGF0dHJpYnV0ZXMKQEAgLTEzMCw5ICsyMjAsOSBAQAogCiAjZW5kaWYKIAotI2RlZmluZSBfX1JFQURBQkxFCShfUEFHRV9SRUFEIHwgX1BBR0VfU0lMRU5UX1JFQUQgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgX19SRUFEQUJMRQkoX1BBR0VfU0lMRU5UX1JFQUQgfCBfUEFHRV9BQ0NFU1NFRCB8IChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSA/IDAgOiBfUEFHRV9SRUFEKSkKICNkZWZpbmUgX19XUklURUFCTEUJKF9QQUdFX1dSSVRFIHwgX1BBR0VfU0lMRU5UX1dSSVRFIHwgX1BBR0VfTU9ESUZJRUQpCiAKLSNkZWZpbmUgX1BBR0VfQ0hHX01BU0sgIChQQUdFX01BU0sgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX01PRElGSUVEIHwgX0NBQ0hFX01BU0spCisjZGVmaW5lIF9QQUdFX0NIR19NQVNLICAoX1BGTl9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9NT0RJRklFRCB8IF9DQUNIRV9NQVNLKQogCiAjZW5kaWYgLyogX0FTTV9QR1RBQkxFX0JJVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMTg1NDMzNi4uN2U0MGYzNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yMiwyMyArMjIsMjQgQEAKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKIAogI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9DQUNIRV9DQUNIQUJMRV9OT05DT0hFUkVOVCkKLSNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgfCBfUEFHRV9XUklURSB8IFwKKyNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1dSSVRFIHwgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpID8gMCA6IF9QQUdFX1JFQUQpIHwgXAogCQkJCSBfcGFnZV9jYWNoYWJsZV9kZWZhdWx0KQotI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgfCBcCi0JCQkJIF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQpCi0jZGVmaW5lIFBBR0VfUkVBRE9OTFkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgfCBcCisjZGVmaW5lIFBBR0VfQ09QWQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpID8gMCA6IF9QQUdFX1JFQUQpIHwgXAorCQkJCSAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkgPyAgX1BBR0VfTk9fRVhFQyA6IDApIHwgX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCkKKyNkZWZpbmUgUEFHRV9SRUFET05MWQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpID8gMCA6IF9QQUdFX1JFQUQpIHwgXAogCQkJCSBfcGFnZV9jYWNoYWJsZV9kZWZhdWx0KQogI2RlZmluZSBQQUdFX0tFUk5FTAlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX19SRUFEQUJMRSB8IF9fV1JJVEVBQkxFIHwgXAogCQkJCSBfUEFHRV9HTE9CQUwgfCBfcGFnZV9jYWNoYWJsZV9kZWZhdWx0KQotI2RlZmluZSBQQUdFX1VTRVJJTwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRCB8IF9QQUdFX1dSSVRFIHwgXAorI2RlZmluZSBQQUdFX1VTRVJJTwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpID8gMCA6IF9QQUdFX1JFQUQpIHwgX1BBR0VfV1JJVEUgfCBcCiAJCQkJIF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQpCiAjZGVmaW5lIFBBR0VfS0VSTkVMX1VOQ0FDSEVEIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfX1JFQURBQkxFIHwgXAogCQkJX19XUklURUFCTEUgfCBfUEFHRV9HTE9CQUwgfCBfQ0FDSEVfVU5DQUNIRUQpCiAKIC8qCi0gKiBNSVBTIGNhbid0IGRvIHBhZ2UgcHJvdGVjdGlvbiBmb3IgZXhlY3V0ZSwgYW5kIGNvbnNpZGVycyB0aGF0IHRoZSBzYW1lIGxpa2UKLSAqIHJlYWQuIEFsc28sIHdyaXRlIHBlcm1pc3Npb25zIGltcGx5IHJlYWQgcGVybWlzc2lvbnMuIFRoaXMgaXMgdGhlIGNsb3Nlc3QKLSAqIHdlIGNhbiBnZXQgYnkgcmVhc29uYWJsZSBtZWFucy4uCisgKiBJZiBfUEFHRV9OT19FWEVDIGlzIG5vdCBkZWZpbmVkLCB3ZSBjYW4ndCBkbyBwYWdlIHByb3RlY3Rpb24gZm9yCisgKiBleGVjdXRlLCBhbmQgY29uc2lkZXIgaXQgdG8gYmUgdGhlIHNhbWUgYXMgcmVhZC4gQWxzbywgd3JpdGUKKyAqIHBlcm1pc3Npb25zIGltcGx5IHJlYWQgcGVybWlzc2lvbnMuIFRoaXMgaXMgdGhlIGNsb3Nlc3Qgd2UgY2FuIGdldAorICogYnkgcmVhc29uYWJsZSBtZWFucy4uCiAgKi8KIAogLyoKQEAgLTE3Nyw3ICsxNzgsNyBAQAogICovCiAjZGVmaW5lIHNldF9wbWQocG1kcHRyLCBwbWR2YWwpIGRvIHsgKihwbWRwdHIpID0gKHBtZHZhbCk7IH0gd2hpbGUoMCkKIAotI2lmZGVmIENPTkZJR182NEJJVAorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAvKgogICogKHB1ZHMgYXJlIGZvbGRlZCBpbnRvIHBnZHMgc28gdGhpcyBkb2Vzbid0IGdldCBhY3R1YWxseSBjYWxsZWQsCiAgKiBidXQgdGhlIGRlZmluZSBpcyBuZWVkZWQgZm9yIGEgZ2VuZXJpYyBpbmxpbmUgZnVuY3Rpb24uKQpAQCAtMjk4LDggKzI5OSwxMyBAQAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCiB7CiAJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0FDQ0VTU0VEOwotCWlmIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9SRUFEKQotCQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfU0lMRU5UX1JFQUQ7CisJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCWlmICghKHB0ZV92YWwocHRlKSAmIF9QQUdFX05PX1JFQUQpKQorCQkJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1NJTEVOVF9SRUFEOworCX0gZWxzZSB7CisJCWlmIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9SRUFEKQorCQkJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1NJTEVOVF9SRUFEOworCX0KIAlyZXR1cm4gcHRlOwogfQogCkBAIC0zNjIsOCArMzY4LDkgQEAKIAlwdGVfdCBwdGUpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQogeworCXB0ZV90IHB0ZSA9ICpwdGVwOwogCV9fdXBkYXRlX3RsYih2bWEsIGFkZHJlc3MsIHB0ZSk7CiAJX191cGRhdGVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfcHJvbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfcHJvbS5oCmluZGV4IDE0Y2E3ZGMuLjU0ZWYxYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3Byb20uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9wcm9tLmgKQEAgLTExOCw3ICsxMTgsNiBAQAogI2RlZmluZSBaU1BfRFVFVAkJJ0QnCS8qIG9uZSBEVUVUIHpzcCBlbmdpbmUgKi8KICNkZWZpbmUgWlNQX1RSSUFECQknVCcJLyogdHdvIFRSSUFEIHpzcCBlbmdpbmVzICovCiAKLWV4dGVybiBjaGFyICpwcm9tX2dldGNtZGxpbmUodm9pZCk7CiBleHRlcm4gY2hhciAqcHJvbV9nZXRlbnYoY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCBwcm9tX2luaXRfY21kbGluZSh2b2lkKTsKIGV4dGVybiB2b2lkIHByb21fbWVtaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXJpYWwuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXJpYWwuaAppbmRleCBjMDdlYmQ4Li5hMGNiMGNhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2VyaWFsLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NlcmlhbC5oCkBAIC0xLDIyICsxIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IGJ5IFJhbGYgQmFlY2hsZQotICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSAqLwotI2lmbmRlZiBfQVNNX1NFUklBTF9ICi0jZGVmaW5lIF9BU01fU0VSSUFMX0gKLQotCi0vKgotICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMS44NDMyIE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgotICoKLSAqIEl0J2QgYmUgbmljZSBpZiBzb21lb25lIGJ1aWx0IGEgc2VyaWFsIGNhcmQgd2l0aCBhIDI0LjU3NiBNSHoKLSAqIGNsb2NrLCBzaW5jZSB0aGUgMTY1NTBBIGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgYSB0b3Agc3BlZWQgb2YgMS41Ci0gKiBtZWdhYml0cy9zZWNvbmQ7IGJ1dCB0aGlzIHJlcXVpcmVzIHRoZSBmYXN0ZXIgY2xvY2suCi0gKi8KLSNkZWZpbmUgQkFTRV9CQVVEICgxODQzMjAwIC8gMTYpCi0KLSNlbmRpZiAvKiBfQVNNX1NFUklBTF9IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2dpYWxpYi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NnaWFsaWIuaAppbmRleCA2Mzc0MWNhLi4yYTJmMWJkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2dpYWxpYi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZ2lhbGliLmgKQEAgLTMzLDE0ICszMyw2IEBACiBleHRlcm4gdm9pZCBwcm9tX3B1dGNoYXIoY2hhciBjKTsKIGV4dGVybiBjaGFyIHByb21fZ2V0Y2hhcih2b2lkKTsKIAotLyogTWVtb3J5IGRlc2NyaXB0b3IgbWFuYWdlbWVudC4gKi8KLSNkZWZpbmUgUFJPTV9NQVhfUE1FTUJMT0NLUyAgICAzMgotc3RydWN0IHByb21fcG1lbWJsb2NrIHsKLQlMT05HCWJhc2U7CQkvKiBXaXRoaW4gS1NFRzAgb3IgWEtQSFlTLiAqLwotCVVMT05HCXNpemU7CQkvKiBJbiBieXRlcy4gKi8KLQlVTE9ORwl0eXBlOwkJLyogZnJlZSBvciBwcm9tIG1lbW9yeSAqLwotfTsKLQogLyogR2V0IG5leHQgbWVtb3J5IGRlc2NyaXB0b3IgYWZ0ZXIgQ1VSUiwgcmV0dXJucyBmaXJzdCBkZXNjcmlwdG9yCiAgKiBpbiBjaGFpbiBpcyBDVVJSIGlzIE5VTEwuCiAgKi8KQEAgLTUxLDcgKzQzLDYgQEAKICAqIGFycmF5LgogICovCiBleHRlcm4gdm9pZCBwcm9tX21lbWluaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBwcm9tX2ZpeHVwX21lbV9tYXAodW5zaWduZWQgbG9uZyBzdGFydF9tZW0sIHVuc2lnbmVkIGxvbmcgZW5kX21lbSk7CiAKIC8qIFBST00gZGV2aWNlIHRyZWUgbGlicmFyeSByb3V0aW5lcy4gKi8KICNkZWZpbmUgUFJPTV9OVUxMX0NPTVBPTkVOVCAoKHBjb21wb25lbnQgKikgMCkKQEAgLTYyLDIwICs1Myw2IEBACiAvKiBHZXQgY2hpbGQgY29tcG9uZW50IG9mIFRISVMuICovCiBleHRlcm4gcGNvbXBvbmVudCAqQXJjR2V0Q2hpbGQocGNvbXBvbmVudCAqdGhpcyk7CiAKLS8qIEdldCBwYXJlbnQgY29tcG9uZW50IG9mIENISUxELiAqLwotZXh0ZXJuIHBjb21wb25lbnQgKnByb21fZ2V0cGFyZW50KHBjb21wb25lbnQgKmNoaWxkKTsKLQotLyogQ29weSBjb21wb25lbnQgb3BhcXVlIGRhdGEgb2YgY29tcG9uZW50IFRISVMgaW50byBCVUZGRVIKLSAqIGlmIGNvbXBvbmVudCBUSElTIGhhcyBvcGFxdWUgZGF0YS4gIFJldHVybnMgc3VjY2VzcyBvcgotICogZmFpbHVyZSBzdGF0dXMuCi0gKi8KLWV4dGVybiBsb25nIHByb21fZ2V0Y2RhdGEodm9pZCAqYnVmZmVyLCBwY29tcG9uZW50ICp0aGlzKTsKLQotLyogT3RoZXIgbWlzYy4gY29tcG9uZW50IHJvdXRpbmVzLiAqLwotZXh0ZXJuIHBjb21wb25lbnQgKnByb21fY2hpbGRhZGQocGNvbXBvbmVudCAqdGhpcywgcGNvbXBvbmVudCAqdG1wLCB2b2lkICpkYXRhKTsKLWV4dGVybiBsb25nIHByb21fZGVsY29tcG9uZW50KHBjb21wb25lbnQgKnRoaXMpOwotZXh0ZXJuIHBjb21wb25lbnQgKnByb21fY29tcG9uZW50YnlwYXRoKGNoYXIgKnBhdGgpOwotCiAvKiBUaGlzIGlzIGNhbGxlZCBhdCBwcm9tX2luaXQgdGltZSB0byBpZGVudGlmeSB0aGUKICAqIEFSQyBhcmNoaXRlY3R1cmUgd2UgYXJlIHJ1bm5pbmcgb24KICAqLwpAQCAtODgsMzUgKzY1LDEzIEBACiAvKiBBUkNTIGNvbW1hbmQgbGluZSBwYXJzaW5nLiAqLwogZXh0ZXJuIHZvaWQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCk7CiAKLS8qIEFjcXVpcmluZyBpbmZvIGFib3V0IHRoZSBjdXJyZW50IHRpbWUsIGV0Yy4gKi8KLWV4dGVybiBzdHJ1Y3QgbGludXhfdGluZm8gKnByb21fZ2V0dGluZm8odm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBwcm9tX2dldHJ0aW1lKHZvaWQpOwotCiAvKiBGaWxlIG9wZXJhdGlvbnMuICovCi1leHRlcm4gbG9uZyBwcm9tX2dldHZkaXJlbnQodW5zaWduZWQgbG9uZyBmZCwgc3RydWN0IGxpbnV4X3ZkaXJlbnQgKmVudCwgdW5zaWduZWQgbG9uZyBudW0sIHVuc2lnbmVkIGxvbmcgKmNudCk7Ci1leHRlcm4gbG9uZyBwcm9tX29wZW4oY2hhciAqbmFtZSwgZW51bSBsaW51eF9vbW9kZSBtZCwgdW5zaWduZWQgbG9uZyAqZmQpOwotZXh0ZXJuIGxvbmcgcHJvbV9jbG9zZSh1bnNpZ25lZCBsb25nIGZkKTsKIGV4dGVybiBMT05HIEFyY1JlYWQoVUxPTkcgZmQsIFBWT0lEIGJ1ZiwgVUxPTkcgbnVtLCBQVUxPTkcgY250KTsKLWV4dGVybiBsb25nIHByb21fZ2V0cnN0YXR1cyh1bnNpZ25lZCBsb25nIGZkKTsKIGV4dGVybiBMT05HIEFyY1dyaXRlKFVMT05HIGZkLCBQVk9JRCBidWYsIFVMT05HIG51bSwgUFVMT05HIGNudCk7Ci1leHRlcm4gbG9uZyBwcm9tX3NlZWsodW5zaWduZWQgbG9uZyBmZCwgc3RydWN0IGxpbnV4X2JpZ2ludCAqb2ZmLCBlbnVtIGxpbnV4X3NlZWttb2RlIHNtKTsKLWV4dGVybiBsb25nIHByb21fbW91bnQoY2hhciAqbmFtZSwgZW51bSBsaW51eF9tb3VudG9wcyBvcCk7Ci1leHRlcm4gbG9uZyBwcm9tX2dldGZpbmZvKHVuc2lnbmVkIGxvbmcgZmQsIHN0cnVjdCBsaW51eF9maW5mbyAqYnVmKTsKLWV4dGVybiBsb25nIHByb21fc2V0ZmluZm8odW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBtc2spOwotCi0vKiBSdW5uaW5nIHN0YW5kLWFsb25nIHByb2dyYW1zLiAqLwotZXh0ZXJuIGxvbmcgcHJvbV9sb2FkKGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nICpwYywgdW5zaWduZWQgbG9uZyAqZWFkZHIpOwotZXh0ZXJuIGxvbmcgcHJvbV9pbnZva2UodW5zaWduZWQgbG9uZyBwYywgdW5zaWduZWQgbG9uZyBzcCwgbG9uZyBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAqKmVudnApOwotZXh0ZXJuIGxvbmcgcHJvbV9leGVjKGNoYXIgKm5hbWUsIGxvbmcgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwKTsKIAogLyogTWlzYy4gcm91dGluZXMuICovCi1leHRlcm4gVk9JRCBwcm9tX2hhbHQoVk9JRCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKLWV4dGVybiBWT0lEIHByb21fcG93ZXJkb3duKFZPSUQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7Ci1leHRlcm4gVk9JRCBwcm9tX3Jlc3RhcnQoVk9JRCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKIGV4dGVybiBWT0lEIEFyY1JlYm9vdChWT0lEKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOwogZXh0ZXJuIFZPSUQgQXJjRW50ZXJJbnRlcmFjdGl2ZU1vZGUoVk9JRCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKLWV4dGVybiBsb25nIHByb21fY2Znc2F2ZShWT0lEKTsKLWV4dGVybiBzdHJ1Y3QgbGludXhfc3lzaWQgKnByb21fZ2V0c3lzaWQoVk9JRCk7CiBleHRlcm4gVk9JRCBBcmNGbHVzaEFsbENhY2hlcyhWT0lEKTsKIGV4dGVybiBESVNQTEFZX1NUQVRVUyAqQXJjR2V0RGlzcGxheVN0YXR1cyhVTE9ORyBGaWxlSUQpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lieXRlL2JpZ3N1ci5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpYnl0ZS9iaWdzdXIuaAppbmRleCBlYmVmZTc5Li4yZDFhMjZkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lieXRlL2JpZ3N1ci5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWJ5dGUvYmlnc3VyLmgKQEAgLTQ2LDQgKzQ2LDMgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19BU01fU0lCWVRFX0JJR1NVUl9IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWJ5dGUvc2IxMjUwX2xkdC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpYnl0ZS9zYjEyNTBfbGR0LmgKaW5kZXggMDgxZThiMS4uMWU3NmNmMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpYnl0ZS9zYjEyNTBfbGR0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpYnl0ZS9zYjEyNTBfbGR0LmgKQEAgLTQyMCw0ICs0MjAsMyBAQAogI2VuZGlmIC8qIDEyNTAgUEFTUzIgfHwgMTEyeCBQQVNTMSAqLwogCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NuL2tsa2VybnZhcnMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbi9rbGtlcm52YXJzLmgKaW5kZXggNWRlNGM1ZS4uNmFmMjViYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NuL2tsa2VybnZhcnMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc24va2xrZXJudmFycy5oCkBAIC0yNiw0ICsyNiwzIEBACiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX19BU01fU05fS0xLRVJOVkFSU19IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGFyc2VtZW0uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGFyc2VtZW0uaAppbmRleCA3OTVhYzZjLi43MTY1MzMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BhcnNlbWVtLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwYXJzZW1lbS5oCkBAIC0xMSw0ICsxMSwzIEBACiAKICNlbmRpZiAvKiBDT05GSUdfU1BBUlNFTUVNICovCiAjZW5kaWYgLyogX01JUFNfU1BBUlNFTUVNX0ggKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCAyMWVmOWVmLi4zOTZlNDAyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMzYsOSArMzYsOSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBhcmNoX3NwaW5faXNfbG9ja2VkKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKLQl1bnNpZ25lZCBpbnQgY291bnRlcnMgPSBBQ0NFU1NfT05DRShsb2NrLT5sb2NrKTsKKwl1MzIgY291bnRlcnMgPSBBQ0NFU1NfT05DRShsb2NrLT5sb2NrKTsKIAotCXJldHVybiAoKGNvdW50ZXJzID4+IDE0KSBeIGNvdW50ZXJzKSAmIDB4MWZmZjsKKwlyZXR1cm4gKChjb3VudGVycyA+PiAxNikgXiBjb3VudGVycykgJiAweGZmZmY7CiB9CiAKICNkZWZpbmUgYXJjaF9zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIGFyY2hfc3Bpbl9sb2NrKGxvY2spCkBAIC00Nyw5ICs0Nyw5IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGFyY2hfc3Bpbl9pc19jb250ZW5kZWQoYXJjaF9zcGlubG9ja190ICpsb2NrKQogewotCXVuc2lnbmVkIGludCBjb3VudGVycyA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOworCXUzMiBjb3VudGVycyA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOwogCi0JcmV0dXJuICgoKGNvdW50ZXJzID4+IDE0KSAtIGNvdW50ZXJzKSAmIDB4MWZmZikgPiAxOworCXJldHVybiAoKChjb3VudGVycyA+PiAxNikgLSBjb3VudGVycykgJiAweGZmZmYpID4gMTsKIH0KICNkZWZpbmUgYXJjaF9zcGluX2lzX2NvbnRlbmRlZAlhcmNoX3NwaW5faXNfY29udGVuZGVkCiAKQEAgLTU3LDYgKzU3LDcgQEAKIHsKIAlpbnQgbXlfdGlja2V0OwogCWludCB0bXA7CisJaW50IGluYyA9IDB4MTAwMDA7CiAKIAlpZiAoUjEwMDAwX0xMU0NfV0FSKSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKQEAgLTY0LDI1ICs2NSwyNCBAQAogCQkiCS5zZXQgbm9yZW9yZGVyCQkJCQlcbiIKIAkJIgkJCQkJCQlcbiIKIAkJIjE6CWxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJYWRkaXUJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sIDB4NDAwMAkJXG4iCisJCSIJYWRkdQklW215X3RpY2tldF0sICVbdGlja2V0XSwgJVtpbmNdCQlcbiIKIAkJIglzYwklW215X3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgogCQkiCWJlcXpsCSVbbXlfdGlja2V0XSwgMWIJCQlcbiIKIAkJIgkgbm9wCQkJCQkJXG4iCi0JCSIJc3JsCSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAxNAkJXG4iCi0JCSIJYW5kaQklW215X3RpY2tldF0sICVbbXlfdGlja2V0XSwgMHgxZmZmCVxuIgotCQkiCWFuZGkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MWZmZgkJXG4iCisJCSIJc3JsCSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAxNgkJXG4iCisJCSIJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHhmZmZmCQlcbiIKKwkJIglhbmRpCSVbbXlfdGlja2V0XSwgJVtteV90aWNrZXRdLCAweGZmZmYJXG4iCiAJCSIJYm5lCSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCA0ZgkJXG4iCiAJCSIJIHN1YnUJJVt0aWNrZXRdLCAlW215X3RpY2tldF0sICVbdGlja2V0XQlcbiIKIAkJIjI6CQkJCQkJCVxuIgogCQkiCS5zdWJzZWN0aW9uIDIJCQkJCVxuIgotCQkiNDoJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKKwkJIjQ6CWFuZGkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4ZmZmZgkJXG4iCiAJCSIJc2xsCSVbdGlja2V0XSwgNQkJCQlcbiIKIAkJIgkJCQkJCQlcbiIKIAkJIjY6CWJuZXoJJVt0aWNrZXRdLCA2YgkJCQlcbiIKIAkJIgkgc3VidQklW3RpY2tldF0sIDEJCQkJXG4iCiAJCSIJCQkJCQkJXG4iCi0JCSIJbHcJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKLQkJIglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDFmZmYJCVxuIgorCQkiCWxodQklW3RpY2tldF0sICVbc2VydmluZ19ub3dfcHRyXQkJXG4iCiAJCSIJYmVxCSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCAyYgkJXG4iCiAJCSIJIHN1YnUJJVt0aWNrZXRdLCAlW215X3RpY2tldF0sICVbdGlja2V0XQlcbiIKIAkJIgliCTRiCQkJCQlcbiIKQEAgLTkwLDM2ICs5MCwzMyBAQAogCQkiCS5wcmV2aW91cwkJCQkJXG4iCiAJCSIJLnNldCBwb3AJCQkJCVxuIgogCQk6IFt0aWNrZXRfcHRyXSAiK20iIChsb2NrLT5sb2NrKSwKKwkJICBbc2VydmluZ19ub3dfcHRyXSAiK20iIChsb2NrLT5oLnNlcnZpbmdfbm93KSwKIAkJICBbdGlja2V0XSAiPSZyIiAodG1wKSwKLQkJICBbbXlfdGlja2V0XSAiPSZyIiAobXlfdGlja2V0KSk7CisJCSAgW215X3RpY2tldF0gIj0mciIgKG15X3RpY2tldCkKKwkJOiBbaW5jXSAiciIgKGluYykpOwogCX0gZWxzZSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIgkuc2V0IHB1c2gJCSMgYXJjaF9zcGluX2xvY2sJXG4iCiAJCSIJLnNldCBub3Jlb3JkZXIJCQkJCVxuIgogCQkiCQkJCQkJCVxuIgotCQkiCWxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIxOglhZGRpdQklW215X3RpY2tldF0sICVbdGlja2V0XSwgMHg0MDAwCQlcbiIKKwkJIjE6CWxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCisJCSIJYWRkdQklW215X3RpY2tldF0sICVbdGlja2V0XSwgJVtpbmNdCQlcbiIKIAkJIglzYwklW215X3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCWJlcXoJJVtteV90aWNrZXRdLCAzZgkJCVxuIgotCQkiCSBub3AJCQkJCQlcbiIKLQkJIglzcmwJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sIDE0CQlcbiIKLQkJIglhbmRpCSVbbXlfdGlja2V0XSwgJVtteV90aWNrZXRdLCAweDFmZmYJXG4iCi0JCSIJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKKwkJIgliZXF6CSVbbXlfdGlja2V0XSwgMWIJCQlcbiIKKwkJIgkgc3JsCSVbbXlfdGlja2V0XSwgJVt0aWNrZXRdLCAxNgkJXG4iCisJCSIJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHhmZmZmCQlcbiIKKwkJIglhbmRpCSVbbXlfdGlja2V0XSwgJVtteV90aWNrZXRdLCAweGZmZmYJXG4iCiAJCSIJYm5lCSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCA0ZgkJXG4iCiAJCSIJIHN1YnUJJVt0aWNrZXRdLCAlW215X3RpY2tldF0sICVbdGlja2V0XQlcbiIKIAkJIjI6CQkJCQkJCVxuIgogCQkiCS5zdWJzZWN0aW9uIDIJCQkJCVxuIgotCQkiMzoJYgkxYgkJCQkJXG4iCi0JCSIJIGxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJCQkJCQkJXG4iCiAJCSI0OglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDFmZmYJCVxuIgogCQkiCXNsbAklW3RpY2tldF0sIDUJCQkJXG4iCiAJCSIJCQkJCQkJXG4iCiAJCSI2OglibmV6CSVbdGlja2V0XSwgNmIJCQkJXG4iCiAJCSIJIHN1YnUJJVt0aWNrZXRdLCAxCQkJCVxuIgogCQkiCQkJCQkJCVxuIgotCQkiCWx3CSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKKwkJIglsaHUJJVt0aWNrZXRdLCAlW3NlcnZpbmdfbm93X3B0cl0JCVxuIgogCQkiCWJlcQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgMmIJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCAlW3RpY2tldF0JXG4iCiAJCSIJYgk0YgkJCQkJXG4iCkBAIC0xMjcsOCArMTI0LDEwIEBACiAJCSIJLnByZXZpb3VzCQkJCQlcbiIKIAkJIgkuc2V0IHBvcAkJCQkJXG4iCiAJCTogW3RpY2tldF9wdHJdICIrbSIgKGxvY2stPmxvY2spLAorCQkgIFtzZXJ2aW5nX25vd19wdHJdICIrbSIgKGxvY2stPmguc2VydmluZ19ub3cpLAogCQkgIFt0aWNrZXRdICI9JnIiICh0bXApLAotCQkgIFtteV90aWNrZXRdICI9JnIiIChteV90aWNrZXQpKTsKKwkJICBbbXlfdGlja2V0XSAiPSZyIiAobXlfdGlja2V0KQorCQk6IFtpbmNdICJyIiAoaW5jKSk7CiAJfQogCiAJc21wX2xsc2NfbWIoKTsKQEAgLTEzNiw0NyArMTM1LDE2IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NwaW5fdW5sb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jaykKIHsKLQlpbnQgdG1wOwotCi0Jc21wX2xsc2NfbWIoKTsKLQotCWlmIChSMTAwMDBfTExTQ19XQVIpIHsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiCQkJCSMgYXJjaF9zcGluX3VubG9jawlcbiIKLQkJIjE6CWxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJYWRkaXUJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDEJCQlcbiIKLQkJIglvcmkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MjAwMAkJXG4iCi0JCSIJeG9yaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgyMDAwCQlcbiIKLQkJIglzYwklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCWJlcXpsCSVbdGlja2V0XSwgMWIJCQkJXG4iCi0JCTogW3RpY2tldF9wdHJdICIrbSIgKGxvY2stPmxvY2spLAotCQkgIFt0aWNrZXRdICI9JnIiICh0bXApKTsKLQl9IGVsc2UgewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIJLnNldCBwdXNoCQkjIGFyY2hfc3Bpbl91bmxvY2sJXG4iCi0JCSIJLnNldCBub3Jlb3JkZXIJCQkJCVxuIgotCQkiCQkJCQkJCVxuIgotCQkiCWxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIxOglhZGRpdQklW3RpY2tldF0sICVbdGlja2V0XSwgMQkJCVxuIgotCQkiCW9yaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgyMDAwCQlcbiIKLQkJIgl4b3JpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDIwMDAJCVxuIgotCQkiCXNjCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJYmVxegklW3RpY2tldF0sIDJmCQkJCVxuIgotCQkiCSBub3AJCQkJCQlcbiIKLQkJIgkJCQkJCQlcbiIKLQkJIgkuc3Vic2VjdGlvbiAyCQkJCQlcbiIKLQkJIjI6CWIJMWIJCQkJCVxuIgotCQkiCSBsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCS5wcmV2aW91cwkJCQkJXG4iCi0JCSIJLnNldCBwb3AJCQkJCVxuIgotCQk6IFt0aWNrZXRfcHRyXSAiK20iIChsb2NrLT5sb2NrKSwKLQkJICBbdGlja2V0XSAiPSZyIiAodG1wKSk7Ci0JfQorCXVuc2lnbmVkIGludCBzZXJ2aW5nX25vdyA9IGxvY2stPmguc2VydmluZ19ub3cgKyAxOworCXdtYigpOworCWxvY2stPmguc2VydmluZ19ub3cgPSAodTE2KXNlcnZpbmdfbm93OworCW51ZGdlX3dyaXRlcygpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhcmNoX3NwaW5fdHJ5bG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCiB7CiAJaW50IHRtcCwgdG1wMiwgdG1wMzsKKwlpbnQgaW5jID0gMHgxMDAwMDsKIAogCWlmIChSMTAwMDBfTExTQ19XQVIpIHsKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18gKApAQCAtMTg0LDExICsxNTIsMTEgQEAKIAkJIgkuc2V0IG5vcmVvcmRlcgkJCQkJXG4iCiAJCSIJCQkJCQkJXG4iCiAJCSIxOglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgotCQkiCXNybAklW215X3RpY2tldF0sICVbdGlja2V0XSwgMTQJCVxuIgotCQkiCWFuZGkJJVtteV90aWNrZXRdLCAlW215X3RpY2tldF0sIDB4MWZmZglcbiIKLQkJIglhbmRpCSVbbm93X3NlcnZpbmddLCAlW3RpY2tldF0sIDB4MWZmZglcbiIKKwkJIglzcmwJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sIDE2CQlcbiIKKwkJIglhbmRpCSVbbXlfdGlja2V0XSwgJVtteV90aWNrZXRdLCAweGZmZmYJXG4iCisJCSIJYW5kaQklW25vd19zZXJ2aW5nXSwgJVt0aWNrZXRdLCAweGZmZmYJXG4iCiAJCSIJYm5lCSVbbXlfdGlja2V0XSwgJVtub3dfc2VydmluZ10sIDNmCVxuIgotCQkiCSBhZGRpdQklW3RpY2tldF0sICVbdGlja2V0XSwgMHg0MDAwCQlcbiIKKwkJIgkgYWRkdQklW3RpY2tldF0sICVbdGlja2V0XSwgJVtpbmNdCQlcbiIKIAkJIglzYwklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgogCQkiCWJlcXpsCSVbdGlja2V0XSwgMWIJCQkJXG4iCiAJCSIJIGxpCSVbdGlja2V0XSwgMQkJCQlcbiIKQEAgLTIwMSwzMyArMTY5LDMzIEBACiAJCTogW3RpY2tldF9wdHJdICIrbSIgKGxvY2stPmxvY2spLAogCQkgIFt0aWNrZXRdICI9JnIiICh0bXApLAogCQkgIFtteV90aWNrZXRdICI9JnIiICh0bXAyKSwKLQkJICBbbm93X3NlcnZpbmddICI9JnIiICh0bXAzKSk7CisJCSAgW25vd19zZXJ2aW5nXSAiPSZyIiAodG1wMykKKwkJOiBbaW5jXSAiciIgKGluYykpOwogCX0gZWxzZSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIgkuc2V0IHB1c2gJCSMgYXJjaF9zcGluX3RyeWxvY2sJXG4iCiAJCSIJLnNldCBub3Jlb3JkZXIJCQkJCVxuIgogCQkiCQkJCQkJCVxuIgotCQkiCWxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIxOglzcmwJJVtteV90aWNrZXRdLCAlW3RpY2tldF0sIDE0CQlcbiIKLQkJIglhbmRpCSVbbXlfdGlja2V0XSwgJVtteV90aWNrZXRdLCAweDFmZmYJXG4iCi0JCSIJYW5kaQklW25vd19zZXJ2aW5nXSwgJVt0aWNrZXRdLCAweDFmZmYJXG4iCisJCSIxOglsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgorCQkiCXNybAklW215X3RpY2tldF0sICVbdGlja2V0XSwgMTYJCVxuIgorCQkiCWFuZGkJJVtteV90aWNrZXRdLCAlW215X3RpY2tldF0sIDB4ZmZmZglcbiIKKwkJIglhbmRpCSVbbm93X3NlcnZpbmddLCAlW3RpY2tldF0sIDB4ZmZmZglcbiIKIAkJIglibmUJJVtteV90aWNrZXRdLCAlW25vd19zZXJ2aW5nXSwgM2YJXG4iCi0JCSIJIGFkZGl1CSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDQwMDAJCVxuIgorCQkiCSBhZGR1CSVbdGlja2V0XSwgJVt0aWNrZXRdLCAlW2luY10JCVxuIgogCQkiCXNjCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJYmVxegklW3RpY2tldF0sIDRmCQkJCVxuIgorCQkiCWJlcXoJJVt0aWNrZXRdLCAxYgkJCQlcbiIKIAkJIgkgbGkJJVt0aWNrZXRdLCAxCQkJCVxuIgogCQkiMjoJCQkJCQkJXG4iCiAJCSIJLnN1YnNlY3Rpb24gMgkJCQkJXG4iCiAJCSIzOgliCTJiCQkJCQlcbiIKIAkJIgkgbGkJJVt0aWNrZXRdLCAwCQkJCVxuIgotCQkiNDoJYgkxYgkJCQkJXG4iCi0JCSIJIGxsCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCiAJCSIJLnByZXZpb3VzCQkJCQlcbiIKIAkJIgkuc2V0IHBvcAkJCQkJXG4iCiAJCTogW3RpY2tldF9wdHJdICIrbSIgKGxvY2stPmxvY2spLAogCQkgIFt0aWNrZXRdICI9JnIiICh0bXApLAogCQkgIFtteV90aWNrZXRdICI9JnIiICh0bXAyKSwKLQkJICBbbm93X3NlcnZpbmddICI9JnIiICh0bXAzKSk7CisJCSAgW25vd19zZXJ2aW5nXSAiPSZyIiAodG1wMykKKwkJOiBbaW5jXSAiciIgKGluYykpOwogCX0KIAogCXNtcF9sbHNjX21iKCk7CkBAIC0zMDUsNyArMjczLDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgdG1wOwogCi0Jc21wX2xsc2NfbWIoKTsKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CiAKIAlpZiAoUjEwMDAwX0xMU0NfV0FSKSB7CiAJCV9fYXNtX18gX192b2xhdGlsZV9fKApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAppbmRleCBlZTE5N2MyLi5jNTJmMzYwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaApAQCAtNSwxNiArNSwyOCBAQAogIyBlcnJvciAicGxlYXNlIGRvbid0IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5IgogI2VuZGlmCiAKLXR5cGVkZWYgc3RydWN0IHsKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCit0eXBlZGVmIHVuaW9uIHsKIAkvKgotCSAqIGJpdHMgIDAuLjEzOiBzZXJ2aW5nX25vdwotCSAqIGJpdHMgMTQgICAgOiBqdW5rIGRhdGEKLQkgKiBiaXRzIDE1Li4yODogdGlja2V0CisJICogYml0cyAgMC4uMTUgOiBzZXJ2aW5nX25vdworCSAqIGJpdHMgMTYuLjMxIDogdGlja2V0CiAJICovCi0JdW5zaWduZWQgaW50IGxvY2s7CisJdTMyIGxvY2s7CisJc3RydWN0IHsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJdTE2IHRpY2tldDsKKwkJdTE2IHNlcnZpbmdfbm93OworI2Vsc2UKKwkJdTE2IHNlcnZpbmdfbm93OworCQl1MTYgdGlja2V0OworI2VuZGlmCisJfSBoOwogfSBhcmNoX3NwaW5sb2NrX3Q7CiAKLSNkZWZpbmUgX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRAl7IDAgfQorI2RlZmluZSBfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VECXsgLmxvY2sgPSAwIH0KIAogdHlwZWRlZiBzdHJ1Y3QgewogCXZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IDgzYjU1MDkuLmJiOTM3Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTk1LDYgKzk1LDggQEAKIHsKIAlfX3UzMiByZXR2YWw7CiAKKwlzbXBfbWJfX2JlZm9yZV9sbHNjKCk7CisKIAlpZiAoa2VybmVsX3VzZXNfbGxzYyAmJiBSMTAwMDBfTExTQ19XQVIpIHsKIAkJdW5zaWduZWQgbG9uZyBkdW1teTsKIApAQCAtMTQ3LDYgKzE0OSw4IEBACiB7CiAJX191NjQgcmV0dmFsOwogCisJc21wX21iX19iZWZvcmVfbGxzYygpOworCiAJaWYgKGtlcm5lbF91c2VzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90eHg5L2dlbmVyaWMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90eHg5L2dlbmVyaWMuaAppbmRleCA4MjdkYzIyLi42NDg4N2QzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdHh4OS9nZW5lcmljLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3R4eDkvZ2VuZXJpYy5oCkBAIC00Miw3ICs0Miw2IEBACiB9OwogZXh0ZXJuIHN0cnVjdCB0eHg5X2JvYXJkX3ZlYyAqdHh4OV9ib2FyZF92ZWM7CiBleHRlcm4gaW50ICgqdHh4OV9pcnFfZGlzcGF0Y2gpKGludCBwZW5kaW5nKTsKLWNoYXIgKnByb21fZ2V0Y21kbGluZSh2b2lkKTsKIGNvbnN0IGNoYXIgKnByb21fZ2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUpOwogdm9pZCB0eHg5X3dkdF9pbml0KHVuc2lnbmVkIGxvbmcgYmFzZSk7CiB2b2lkIHR4eDlfd2R0X25vdyh1bnNpZ25lZCBsb25nIGJhc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3Vhc20uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91YXNtLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9taXBzL21tL3Vhc20uaApyZW5hbWUgdG8gYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Vhc20uaAppbmRleCAzZDE1M2VkLi5iOTliZDA3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdWFzbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91YXNtLmgKQEAgLTkyLDkgKzkyLDExIEBACiBJcF91MnUxdTMoX3NsbCk7CiBJcF91MnUxdTMoX3NyYSk7CiBJcF91MnUxdTMoX3NybCk7CitJcF91MnUxdTMoX3JvdHIpOwogSXBfdTN1MXUyKF9zdWJ1KTsKIElwX3UyczN1MShfc3cpOwogSXBfMChfdGxicCk7CitJcF8wKF90bGJyKTsKIElwXzAoX3RsYndpKTsKIElwXzAoX3RsYndyKTsKIElwX3UzdTF1MihfeG9yKTsKQEAgLTEyOSw2ICsxMzEsNyBAQAogIyBkZWZpbmUgVUFTTV9pX1NMTChidWYsIHJzLCBydCwgc2gpIHVhc21faV9kc2xsKGJ1ZiwgcnMsIHJ0LCBzaCkKICMgZGVmaW5lIFVBU01faV9TUkEoYnVmLCBycywgcnQsIHNoKSB1YXNtX2lfZHNyYShidWYsIHJzLCBydCwgc2gpCiAjIGRlZmluZSBVQVNNX2lfU1JMKGJ1ZiwgcnMsIHJ0LCBzaCkgdWFzbV9pX2RzcmwoYnVmLCBycywgcnQsIHNoKQorIyBkZWZpbmUgVUFTTV9pX1JPVFIoYnVmLCBycywgcnQsIHNoKSB1YXNtX2lfZHJvdHIoYnVmLCBycywgcnQsIHNoKQogIyBkZWZpbmUgVUFTTV9pX01GQzAoYnVmLCBydCwgcmQuLi4pIHVhc21faV9kbWZjMChidWYsIHJ0LCByZCkKICMgZGVmaW5lIFVBU01faV9NVEMwKGJ1ZiwgcnQsIHJkLi4uKSB1YXNtX2lfZG10YzAoYnVmLCBydCwgcmQpCiAjIGRlZmluZSBVQVNNX2lfQURESVUoYnVmLCBycywgcnQsIHZhbCkgdWFzbV9pX2RhZGRpdShidWYsIHJzLCBydCwgdmFsKQpAQCAtMTQyLDYgKzE0NSw3IEBACiAjIGRlZmluZSBVQVNNX2lfU0xMKGJ1ZiwgcnMsIHJ0LCBzaCkgdWFzbV9pX3NsbChidWYsIHJzLCBydCwgc2gpCiAjIGRlZmluZSBVQVNNX2lfU1JBKGJ1ZiwgcnMsIHJ0LCBzaCkgdWFzbV9pX3NyYShidWYsIHJzLCBydCwgc2gpCiAjIGRlZmluZSBVQVNNX2lfU1JMKGJ1ZiwgcnMsIHJ0LCBzaCkgdWFzbV9pX3NybChidWYsIHJzLCBydCwgc2gpCisjIGRlZmluZSBVQVNNX2lfUk9UUihidWYsIHJzLCBydCwgc2gpIHVhc21faV9yb3RyKGJ1ZiwgcnMsIHJ0LCBzaCkKICMgZGVmaW5lIFVBU01faV9NRkMwKGJ1ZiwgcnQsIHJkLi4uKSB1YXNtX2lfbWZjMChidWYsIHJ0LCByZCkKICMgZGVmaW5lIFVBU01faV9NVEMwKGJ1ZiwgcnQsIHJkLi4uKSB1YXNtX2lfbXRjMChidWYsIHJ0LCByZCkKICMgZGVmaW5lIFVBU01faV9BRERJVShidWYsIHJzLCBydCwgdmFsKSB1YXNtX2lfYWRkaXUoYnVmLCBycywgcnQsIHZhbCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91Y29udGV4dC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKaW5kZXggOGE0YjIwZS4uOWJjMDdiOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKQEAgLTEsMjEgKzEgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBMb3cgbGV2ZWwgZXhjZXB0aW9uIGhhbmRsaW5nCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5IGJ5IFJhbGYgQmFlY2hsZQotICovCi0jaWZuZGVmIF9BU01fVUNPTlRFWFRfSAotI2RlZmluZSBfQVNNX1VDT05URVhUX0gKLQotc3RydWN0IHVjb250ZXh0IHsKLQl1bnNpZ25lZCBsb25nCSAgdWNfZmxhZ3M7Ci0Jc3RydWN0IHVjb250ZXh0ICAqdWNfbGluazsKLQlzdGFja190CQkgIHVjX3N0YWNrOwotCXN0cnVjdCBzaWdjb250ZXh0IHVjX21jb250ZXh0OwotCXNpZ3NldF90CSAgdWNfc2lnbWFzazsJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCi19OwotCi0jZW5kaWYgLyogX0FTTV9VQ09OVEVYVF9IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdWNvbnRleHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qYXp6L2lycS5jIGIvYXJjaC9taXBzL2phenovaXJxLmMKaW5kZXggN2JkMzJkMC4uZWUxODAyOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2phenovaXJxLmMKKysrIGIvYXJjaC9taXBzL2phenovaXJxLmMKQEAgLTIwLDE3ICsyMCwxNyBAQAogI2luY2x1ZGUgPGFzbS9qYXp6Lmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAotc3RhdGljIERFRklORV9TUElOTE9DSyhyNDAzMF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHI0MDMwX2xvY2spOwogCiBzdGF0aWMgdm9pZCBlbmFibGVfcjQwMzBfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAxIDw8IChpcnEgLSBKQVpaX0lSUV9TVEFSVCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZyNDAzMF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZyNDAzMF9sb2NrLCBmbGFncyk7CiAJbWFzayB8PSByNDAzMF9yZWFkX3JlZzE2KEpBWlpfSU9fSVJRX0VOQUJMRSk7CiAJcjQwMzBfd3JpdGVfcmVnMTYoSkFaWl9JT19JUlFfRU5BQkxFLCBtYXNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyNDAzMF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnI0MDMwX2xvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBkaXNhYmxlX3I0MDMwX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMzgsMTAgKzM4LDEwIEBACiAJdW5zaWduZWQgaW50IG1hc2sgPSB+KDEgPDwgKGlycSAtIEpBWlpfSVJRX1NUQVJUKSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZyNDAzMF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZyNDAzMF9sb2NrLCBmbGFncyk7CiAJbWFzayAmPSByNDAzMF9yZWFkX3JlZzE2KEpBWlpfSU9fSVJRX0VOQUJMRSk7CiAJcjQwMzBfd3JpdGVfcmVnMTYoSkFaWl9JT19JUlFfRU5BQkxFLCBtYXNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyNDAzMF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnI0MDMwX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCByNDAzMF9pcnFfdHlwZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCmluZGV4IDkzMjZhZjUuLmVmMjA5NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQpAQCAtOTMsNiArOTMsNyBAQAogCiBvYmotJChDT05GSUdfS0VYRUMpCQkrPSBtYWNoaW5lX2tleGVjLm8gcmVsb2NhdGVfa2VybmVsLm8KIG9iai0kKENPTkZJR19FQVJMWV9QUklOVEspCSs9IGVhcmx5X3ByaW50ay5vCitvYmotJChDT05GSUdfU1BJTkxPQ0tfVEVTVCkJKz0gc3BpbmxvY2tfdGVzdC5vCiAKIENGTEFHU19jcHUtYnVnczY0Lm8JPSAkKHNoZWxsIGlmICQoQ0MpICQoS0JVSUxEX0NGTEFHUykgLVdhLC1tZGFkZGkgLWMgLW8gL2Rldi9udWxsIC14YyAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIGVjaG8gIi1ESEFWRV9BU19TRVRfREFEREkiOyBmaSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9taXBzL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDJjMWUxZDAuLmNhNmM4MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL21pcHMva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTE4OCwxMSArMTg4LDE1IEBACiAJREVGSU5FKF9QVEVfVF9TSVpFLCBzaXplb2YocHRlX3QpKTsKIAlCTEFOSygpOwogCURFRklORShfUEdEX1RfTE9HMiwgUEdEX1RfTE9HMik7CisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIAlERUZJTkUoX1BNRF9UX0xPRzIsIFBNRF9UX0xPRzIpOworI2VuZGlmCiAJREVGSU5FKF9QVEVfVF9MT0cyLCBQVEVfVF9MT0cyKTsKIAlCTEFOSygpOwogCURFRklORShfUEdEX09SREVSLCBQR0RfT1JERVIpOworI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAJREVGSU5FKF9QTURfT1JERVIsIFBNRF9PUkRFUik7CisjZW5kaWYKIAlERUZJTkUoX1BURV9PUkRFUiwgUFRFX09SREVSKTsKIAlCTEFOSygpOwogCURFRklORShfUE1EX1NISUZULCBQTURfU0hJRlQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWd0NjQxeHguYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1ndDY0MXh4LmMKaW5kZXggZjVkMjY1ZS4uMzkyZWYzNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWd0NjQxeHguYworKysgYi9hcmNoL21pcHMva2VybmVsL2NldnQtZ3Q2NDF4eC5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL2d0NjQxMjAuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGd0NjQxeHhfdGltZXJfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhndDY0MXh4X3RpbWVyX2xvY2spOwogc3RhdGljIHVuc2lnbmVkIGludCBndDY0MXh4X2Jhc2VfY2xvY2s7CiAKIHZvaWQgZ3Q2NDF4eF9zZXRfYmFzZV9jbG9jayh1bnNpZ25lZCBpbnQgY2xvY2spCkBAIC00OSw3ICs0OSw3IEBACiB7CiAJdTMyIGN0cmw7CiAKLQlzcGluX2xvY2soJmd0NjQxeHhfdGltZXJfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmZ3Q2NDF4eF90aW1lcl9sb2NrKTsKIAogCWN0cmwgPSBHVF9SRUFEKEdUX1RDX0NPTlRST0xfT0ZTKTsKIAljdHJsICY9IH4oR1RfVENfQ09OVFJPTF9FTlRDMF9NU0sgfCBHVF9UQ19DT05UUk9MX1NFTFRDMF9NU0spOwpAQCAtNTgsNyArNTgsNyBAQAogCUdUX1dSSVRFKEdUX1RDMF9PRlMsIGRlbHRhKTsKIAlHVF9XUklURShHVF9UQ19DT05UUk9MX09GUywgY3RybCk7CiAKLQlzcGluX3VubG9jaygmZ3Q2NDF4eF90aW1lcl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmd0NjQxeHhfdGltZXJfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY4LDcgKzY4LDcgQEAKIHsKIAl1MzIgY3RybDsKIAotCXNwaW5fbG9jaygmZ3Q2NDF4eF90aW1lcl9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZndDY0MXh4X3RpbWVyX2xvY2spOwogCiAJY3RybCA9IEdUX1JFQUQoR1RfVENfQ09OVFJPTF9PRlMpOwogCWN0cmwgJj0gfihHVF9UQ19DT05UUk9MX0VOVEMwX01TSyB8IEdUX1RDX0NPTlRST0xfU0VMVEMwX01TSyk7CkBAIC04Niw3ICs4Niw3IEBACiAKIAlHVF9XUklURShHVF9UQ19DT05UUk9MX09GUywgY3RybCk7CiAKLQlzcGluX3VubG9jaygmZ3Q2NDF4eF90aW1lcl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJmd0NjQxeHhfdGltZXJfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGd0NjQxeHhfdGltZXIwX2V2ZW50X2hhbmRsZXIoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKaW5kZXggNzU4YWQ0Mi4uYmU1YmIxNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCkBAIC0xNjIsNiArMTYyLDcgQEAKIAljYXNlIENQVV9CQ002MzQ4OgogCWNhc2UgQ1BVX0JDTTYzNTg6CiAJY2FzZSBDUFVfQ0FWSVVNX09DVEVPTjoKKwljYXNlIENQVV9DQVZJVU1fT0NURU9OX1BMVVM6CiAJCWNwdV93YWl0ID0gcjRrX3dhaXQ7CiAJCWJyZWFrOwogCkBAIC03MDAsNiArNzAxLDE5IEBACiAJcmV0dXJuIGNvbmZpZzMgJiBNSVBTX0NPTkZfTTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGVjb2RlX2NvbmZpZzQoc3RydWN0IGNwdWluZm9fbWlwcyAqYykKK3sKKwl1bnNpZ25lZCBpbnQgY29uZmlnNDsKKworCWNvbmZpZzQgPSByZWFkX2MwX2NvbmZpZzQoKTsKKworCWlmICgoY29uZmlnNCAmIE1JUFNfQ09ORjRfTU1VRVhUREVGKSA9PSBNSVBTX0NPTkY0X01NVUVYVERFRl9NTVVTSVpFRVhUCisJICAgICYmIGNwdV9oYXNfdGxiKQorCQljLT50bGJzaXplICs9IChjb25maWc0ICYgTUlQU19DT05GNF9NTVVTSVpFRVhUKSAqIDB4NDA7CisKKwlyZXR1cm4gY29uZmlnNCAmIE1JUFNfQ09ORl9NOworfQorCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgZGVjb2RlX2NvbmZpZ3Moc3RydWN0IGNwdWluZm9fbWlwcyAqYykKIHsKIAlpbnQgb2s7CkBAIC03MTgsNiArNzMyLDggQEAKIAkJb2sgPSBkZWNvZGVfY29uZmlnMihjKTsKIAlpZiAob2spCiAJCW9rID0gZGVjb2RlX2NvbmZpZzMoYyk7CisJaWYgKG9rKQorCQlvayA9IGRlY29kZV9jb25maWc0KGMpOwogCiAJbWlwc19wcm9iZV93YXRjaF9yZWdpc3RlcnMoYyk7CiB9CkBAIC03MzEsOSArNzQ3LDYgQEAKIAkJX19jcHVfbmFtZVtjcHVdID0gIk1JUFMgNEtjIjsKIAkJYnJlYWs7CiAJY2FzZSBQUklEX0lNUF80S0VDOgotCQljLT5jcHV0eXBlID0gQ1BVXzRLRUM7Ci0JCV9fY3B1X25hbWVbY3B1XSA9ICJNSVBTIDRLRWMiOwotCQlicmVhazsKIAljYXNlIFBSSURfSU1QXzRLRUNSMjoKIAkJYy0+Y3B1dHlwZSA9IENQVV80S0VDOwogCQlfX2NwdV9uYW1lW2NwdV0gPSAiTUlQUyA0S0VjIjsKQEAgLTg5OSwxMiArOTEyLDE4IEBACiAJY2FzZSBQUklEX0lNUF9DQVZJVU1fQ04zOFhYOgogCWNhc2UgUFJJRF9JTVBfQ0FWSVVNX0NOMzFYWDoKIAljYXNlIFBSSURfSU1QX0NBVklVTV9DTjMwWFg6CisJCWMtPmNwdXR5cGUgPSBDUFVfQ0FWSVVNX09DVEVPTjsKKwkJX19jcHVfbmFtZVtjcHVdID0gIkNhdml1bSBPY3Rlb24iOworCQlnb3RvIHBsYXRmb3JtOwogCWNhc2UgUFJJRF9JTVBfQ0FWSVVNX0NONThYWDoKIAljYXNlIFBSSURfSU1QX0NBVklVTV9DTjU2WFg6CiAJY2FzZSBQUklEX0lNUF9DQVZJVU1fQ041MFhYOgogCWNhc2UgUFJJRF9JTVBfQ0FWSVVNX0NONTJYWDoKLQkJYy0+Y3B1dHlwZSA9IENQVV9DQVZJVU1fT0NURU9OOwotCQlfX2NwdV9uYW1lW2NwdV0gPSAiQ2F2aXVtIE9jdGVvbiI7CisJCWMtPmNwdXR5cGUgPSBDUFVfQ0FWSVVNX09DVEVPTl9QTFVTOworCQlfX2NwdV9uYW1lW2NwdV0gPSAiQ2F2aXVtIE9jdGVvbisiOworcGxhdGZvcm06CisJCWlmIChjcHUgPT0gMCkKKwkJCV9fZWxmX3BsYXRmb3JtID0gIm9jdGVvbiI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0lORk8gIlVua25vd24gT2N0ZW9uIGNoaXAhXG4iKTsKQEAgLTkxNCw2ICs5MzMsNyBAQAogfQogCiBjb25zdCBjaGFyICpfX2NwdV9uYW1lW05SX0NQVVNdOworY29uc3QgY2hhciAqX19lbGZfcGxhdGZvcm07CiAKIF9fY3B1aW5pdCB2b2lkIGNwdV9wcm9iZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvbWlwcy9rZXJuZWwvZnRyYWNlLmMKaW5kZXggNjhiMDY3MC4uZTllNjRlMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFN0ZXZlbiBSb3N0ZWR0IDxzcm9zdGVkdEByZWRoYXQuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERTTGFiLCBMYW56aG91IFVuaXZlcnNpdHksIENoaW5hCi0gKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiBBdXRob3I6IFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqCiAgKiBUaGFua3MgZ29lcyB0byBTdGV2ZW4gUm9zdGVkdCBmb3Igd3JpdGluZyB0aGUgb3JpZ2luYWwgeDg2IHZlcnNpb24uCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYwppbmRleCAwMWMwODg1Li4yNzc5OTExIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2k4MjU5LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jCkBAIC0yOSw3ICsyOSw3IEBACiAgKi8KIAogc3RhdGljIGludCBpODI1OUFfYXV0b19lb2kgPSAtMTsKLURFRklORV9TUElOTE9DSyhpODI1OUFfbG9jayk7CitERUZJTkVfUkFXX1NQSU5MT0NLKGk4MjU5QV9sb2NrKTsKIHN0YXRpYyB2b2lkIGRpc2FibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOwogc3RhdGljIHZvaWQgZW5hYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIHN0YXRpYyB2b2lkIG1hc2tfYW5kX2Fja184MjU5QSh1bnNpZ25lZCBpbnQgaXJxKTsKQEAgLTY1LDEzICs2NSwxMyBAQAogCiAJaXJxIC09IEk4MjU5QV9JUlFfQkFTRTsKIAltYXNrID0gMSA8PCBpcnE7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCWNhY2hlZF9pcnFfbWFzayB8PSBtYXNrOwogCWlmIChpcnEgJiA4KQogCQlvdXRiKGNhY2hlZF9zbGF2ZV9tYXNrLCBQSUNfU0xBVkVfSU1SKTsKIAllbHNlCiAJCW91dGIoY2FjaGVkX21hc3Rlcl9tYXNrLCBQSUNfTUFTVEVSX0lNUik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtODEsMTMgKzgxLDEzIEBACiAKIAlpcnEgLT0gSTgyNTlBX0lSUV9CQVNFOwogCW1hc2sgPSB+KDEgPDwgaXJxKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAJY2FjaGVkX2lycV9tYXNrICY9IG1hc2s7CiAJaWYgKGlycSAmIDgpCiAJCW91dGIoY2FjaGVkX3NsYXZlX21hc2ssIFBJQ19TTEFWRV9JTVIpOwogCWVsc2UKIAkJb3V0YihjYWNoZWRfbWFzdGVyX21hc2ssIFBJQ19NQVNURVJfSU1SKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogfQogCiBpbnQgaTgyNTlBX2lycV9wZW5kaW5nKHVuc2lnbmVkIGludCBpcnEpCkBAIC05OCwxMiArOTgsMTIgQEAKIAogCWlycSAtPSBJODI1OUFfSVJRX0JBU0U7CiAJbWFzayA9IDEgPDwgaXJxOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAlpZiAoaXJxIDwgOCkKIAkJcmV0ID0gaW5iKFBJQ19NQVNURVJfQ01EKSAmIG1hc2s7CiAJZWxzZQogCQlyZXQgPSBpbmIoUElDX1NMQVZFX0NNRCkgJiAobWFzayA+PiA4KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE1MSw3ICsxNTEsNyBAQAogCiAJaXJxIC09IEk4MjU5QV9JUlFfQkFTRTsKIAlpcnFtYXNrID0gMSA8PCBpcnE7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCS8qCiAJICogTGlnaHR3ZWlnaHQgc3B1cmlvdXMgSVJRIGRldGVjdGlvbi4gV2UgZG8gbm90IHdhbnQKIAkgKiB0byBvdmVyZG8gc3B1cmlvdXMgSVJRIGhhbmRsaW5nIC0gaXQncyB1c3VhbGx5IGEgc2lnbgpAQCAtMTgzLDcgKzE4Myw3IEBACiAJCW91dGIoMHg2MCtpcnEsIFBJQ19NQVNURVJfQ01EKTsJLyogJ1NwZWNpZmljIEVPSSB0byBtYXN0ZXIgKi8KIAl9CiAJc210Y19pbV9hY2tfaXJxKGlycSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm47CiAKIHNwdXJpb3VzXzgyNTlBX2lycToKQEAgLTI2NCw3ICsyNjQsNyBAQAogCiAJaTgyNTlBX2F1dG9fZW9pID0gYXV0b19lb2k7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAKIAlvdXRiKDB4ZmYsIFBJQ19NQVNURVJfSU1SKTsJLyogbWFzayBhbGwgb2YgODI1OUEtMSAqLwogCW91dGIoMHhmZiwgUElDX1NMQVZFX0lNUik7CS8qIG1hc2sgYWxsIG9mIDgyNTlBLTIgKi8KQEAgLTI5OCw3ICsyOTgsNyBAQAogCW91dGIoY2FjaGVkX21hc3Rlcl9tYXNrLCBQSUNfTUFTVEVSX0lNUik7IC8qIHJlc3RvcmUgbWFzdGVyIElSUSBtYXNrICovCiAJb3V0YihjYWNoZWRfc2xhdmVfbWFzaywgUElDX1NMQVZFX0lNUik7CSAgLyogcmVzdG9yZSBzbGF2ZSBJUlEgbWFzayAqLwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWd0NjQxeHguYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWd0NjQxeHguYwppbmRleCBlYmNjNWY3Li40MmVmODE0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2lycS1ndDY0MXh4LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEtZ3Q2NDF4eC5jCkBAIC0yNywxOCArMjcsMTggQEAKIAogI2RlZmluZSBHVDY0MVhYX0lSUV9UT19CSVQoaXJxKQkoMVUgPDwgKGlycSAtIEdUNjQxWFhfSVJRX0JBU0UpKQogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGd0NjQxeHhfaXJxX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soZ3Q2NDF4eF9pcnFfbG9jayk7CiAKIHN0YXRpYyB2b2lkIGFja19ndDY0MXh4X2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGNhdXNlOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKIAljYXVzZSA9IEdUX1JFQUQoR1RfSU5UUkNBVVNFX09GUyk7CiAJY2F1c2UgJj0gfkdUNjQxWFhfSVJRX1RPX0JJVChpcnEpOwogCUdUX1dSSVRFKEdUX0lOVFJDQVVTRV9PRlMsIGNhdXNlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgbWFza19ndDY0MXh4X2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtNDYsMTEgKzQ2LDExIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgbWFzazsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CiAJbWFzayA9IEdUX1JFQUQoR1RfSU5UUk1BU0tfT0ZTKTsKIAltYXNrICY9IH5HVDY0MVhYX0lSUV9UT19CSVQoaXJxKTsKIAlHVF9XUklURShHVF9JTlRSTUFTS19PRlMsIG1hc2spOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBtYXNrX2Fja19ndDY0MXh4X2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtNTgsNyArNTgsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGNhdXNlLCBtYXNrOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmd0NjQxeHhfaXJxX2xvY2ssIGZsYWdzKTsKIAltYXNrID0gR1RfUkVBRChHVF9JTlRSTUFTS19PRlMpOwogCW1hc2sgJj0gfkdUNjQxWFhfSVJRX1RPX0JJVChpcnEpOwogCUdUX1dSSVRFKEdUX0lOVFJNQVNLX09GUywgbWFzayk7CkBAIC02Niw3ICs2Niw3IEBACiAJY2F1c2UgPSBHVF9SRUFEKEdUX0lOVFJDQVVTRV9PRlMpOwogCWNhdXNlICY9IH5HVDY0MVhYX0lSUV9UT19CSVQoaXJxKTsKIAlHVF9XUklURShHVF9JTlRSQ0FVU0VfT0ZTLCBjYXVzZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHVubWFza19ndDY0MXh4X2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtNzQsMTEgKzc0LDExIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgbWFzazsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CiAJbWFzayA9IEdUX1JFQUQoR1RfSU5UUk1BU0tfT0ZTKTsKIAltYXNrIHw9IEdUNjQxWFhfSVJRX1RPX0JJVChpcnEpOwogCUdUX1dSSVRFKEdUX0lOVFJNQVNLX09GUywgbWFzayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Q2NDF4eF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZndDY0MXh4X2lycV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZ3Q2NDF4eF9pcnFfY2hpcCA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKaW5kZXggZjA0MjU2My4uYmRlNzllZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKQEAgLTksNyArOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2h1aWQuaD4KICNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbWNvdW50LlMgYi9hcmNoL21pcHMva2VybmVsL21jb3VudC5TCmluZGV4IDBhOWNmZGIuLjY4NTFmYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbWNvdW50LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9tY291bnQuUwpAQCAtNiw3ICs2LDcgQEAKICAqIG1vcmUgZGV0YWlscy4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4gJiBEU0xhYiwgTGFuemhvdSBVbml2ZXJzaXR5LCBDaGluYQotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKi8KIAogI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvb2N0ZW9uX3N3aXRjaC5TIGIvYXJjaC9taXBzL2tlcm5lbC9vY3Rlb25fc3dpdGNoLlMKaW5kZXggMzk1MmI4My4uZGQxOGIyNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9vY3Rlb25fc3dpdGNoLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9vY3Rlb25fc3dpdGNoLlMKQEAgLTUwMCw0ICs1MDAsMyBAQAogCSBub3AKIAlFTkQob2N0ZW9uX211bHRfcmVzdG9yZSkKIAkuc2V0IHBvcAotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3J0bHguYyBiL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jCmluZGV4IDM2NGYwNjYuLmRjYWVkMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZWxvYWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zcGlubG9ja190ZXN0LmMgYi9hcmNoL21pcHMva2VybmVsL3NwaW5sb2NrX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTYxMTM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zcGlubG9ja190ZXN0LmMKQEAgLTAsMCArMSwxNDEgQEAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisKK3N0YXRpYyBpbnQgc3NfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCWt0aW1lX3Qgc3RhcnQsIGZpbmlzaDsKKwlpbnQgbG9vcHM7CisJaW50IGNvbnQ7CisJREVGSU5FX1JBV19TUElOTE9DSyhzc19zcGluKTsKKworCWxvb3BzID0gMTAwMDAwMDsKKwljb250ID0gMTsKKworCXN0YXJ0ID0ga3RpbWVfZ2V0KCk7CisKKwl3aGlsZSAoY29udCkgeworCQlyYXdfc3Bpbl9sb2NrKCZzc19zcGluKTsKKwkJbG9vcHMtLTsKKwkJaWYgKGxvb3BzID09IDApCisJCQljb250ID0gMDsKKwkJcmF3X3NwaW5fdW5sb2NrKCZzc19zcGluKTsKKwl9CisKKwlmaW5pc2ggPSBrdGltZV9nZXQoKTsKKworCSp2YWwgPSBrdGltZV91c19kZWx0YShmaW5pc2gsIHN0YXJ0KTsKKworCXJldHVybiAwOworfQorCitERUZJTkVfU0lNUExFX0FUVFJJQlVURShmb3BzX3NzLCBzc19nZXQsIE5VTEwsICIlbGx1XG4iKTsKKworCisKK3N0cnVjdCBzcGluX211bHRpX3N0YXRlIHsKKwlyYXdfc3BpbmxvY2tfdCBsb2NrOworCWF0b21pY190IHN0YXJ0X3dhaXQ7CisJYXRvbWljX3QgZW50ZXJfd2FpdDsKKwlhdG9taWNfdCBleGl0X3dhaXQ7CisJaW50IGxvb3BzOworfTsKKworc3RydWN0IHNwaW5fbXVsdGlfcGVyX3RocmVhZCB7CisJc3RydWN0IHNwaW5fbXVsdGlfc3RhdGUgKnN0YXRlOworCWt0aW1lX3Qgc3RhcnQ7Cit9OworCitzdGF0aWMgaW50IG11bHRpX290aGVyKHZvaWQgKmRhdGEpCit7CisJaW50IGxvb3BzOworCWludCBjb250OworCXN0cnVjdCBzcGluX211bHRpX3Blcl90aHJlYWQgKnB0ID0gZGF0YTsKKwlzdHJ1Y3Qgc3Bpbl9tdWx0aV9zdGF0ZSAqcyA9IHB0LT5zdGF0ZTsKKworCWxvb3BzID0gcy0+bG9vcHM7CisJY29udCA9IDE7CisKKwlhdG9taWNfZGVjKCZzLT5lbnRlcl93YWl0KTsKKworCXdoaWxlIChhdG9taWNfcmVhZCgmcy0+ZW50ZXJfd2FpdCkpCisJCTsgLyogc3BpbiAqLworCisJcHQtPnN0YXJ0ID0ga3RpbWVfZ2V0KCk7CisKKwlhdG9taWNfZGVjKCZzLT5zdGFydF93YWl0KTsKKworCXdoaWxlIChhdG9taWNfcmVhZCgmcy0+c3RhcnRfd2FpdCkpCisJCTsgLyogc3BpbiAqLworCisJd2hpbGUgKGNvbnQpIHsKKwkJcmF3X3NwaW5fbG9jaygmcy0+bG9jayk7CisJCWxvb3BzLS07CisJCWlmIChsb29wcyA9PSAwKQorCQkJY29udCA9IDA7CisJCXJhd19zcGluX3VubG9jaygmcy0+bG9jayk7CisJfQorCisJYXRvbWljX2RlYygmcy0+ZXhpdF93YWl0KTsKKwl3aGlsZSAoYXRvbWljX3JlYWQoJnMtPmV4aXRfd2FpdCkpCisJCTsgLyogc3BpbiAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG11bHRpX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKK3sKKwlrdGltZV90IGZpbmlzaDsKKwlzdHJ1Y3Qgc3Bpbl9tdWx0aV9zdGF0ZSBtczsKKwlzdHJ1Y3Qgc3Bpbl9tdWx0aV9wZXJfdGhyZWFkIHQxLCB0MjsKKworCW1zLmxvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQoIm11bHRpX2dldCIpOworCW1zLmxvb3BzID0gMTAwMDAwMDsKKworCWF0b21pY19zZXQoJm1zLnN0YXJ0X3dhaXQsIDIpOworCWF0b21pY19zZXQoJm1zLmVudGVyX3dhaXQsIDIpOworCWF0b21pY19zZXQoJm1zLmV4aXRfd2FpdCwgMik7CisJdDEuc3RhdGUgPSAmbXM7CisJdDIuc3RhdGUgPSAmbXM7CisKKwlrdGhyZWFkX3J1bihtdWx0aV9vdGhlciwgJnQyLCAibXVsdGlfZ2V0Iik7CisKKwltdWx0aV9vdGhlcigmdDEpOworCisJZmluaXNoID0ga3RpbWVfZ2V0KCk7CisKKwkqdmFsID0ga3RpbWVfdXNfZGVsdGEoZmluaXNoLCB0MS5zdGFydCk7CisKKwlyZXR1cm4gMDsKK30KKworREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoZm9wc19tdWx0aSwgbXVsdGlfZ2V0LCBOVUxMLCAiJWxsdVxuIik7CisKKworZXh0ZXJuIHN0cnVjdCBkZW50cnkgKm1pcHNfZGVidWdmc19kaXI7CitzdGF0aWMgaW50IF9faW5pdCBzcGlubG9ja190ZXN0KHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqZDsKKworCWlmICghbWlwc19kZWJ1Z2ZzX2RpcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkID0gZGVidWdmc19jcmVhdGVfZmlsZSgic3Bpbl9zaW5nbGUiLCBTX0lSVUdPLAorCQkJCW1pcHNfZGVidWdmc19kaXIsIE5VTEwsCisJCQkJJmZvcHNfc3MpOworCWlmICghZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkID0gZGVidWdmc19jcmVhdGVfZmlsZSgic3Bpbl9tdWx0aSIsIFNfSVJVR08sCisJCQkJbWlwc19kZWJ1Z2ZzX2RpciwgTlVMTCwKKwkJCQkmZm9wc19tdWx0aSk7CisJaWYgKCFkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorZGV2aWNlX2luaXRjYWxsKHNwaW5sb2NrX3Rlc3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCmluZGV4IDMxYjIwNGIuLjRlMDBmOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vdWFzbS5oPgogCiBleHRlcm4gdm9pZCBjaGVja193YWl0KHZvaWQpOwogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCByNGtfd2FpdCh2b2lkKTsKQEAgLTEyNzEsMjEgKzEyNzIsMjUgQEAKIHVuc2lnbmVkIGxvbmcgZXhjZXB0aW9uX2hhbmRsZXJzWzMyXTsKIHVuc2lnbmVkIGxvbmcgdmlfaGFuZGxlcnNbNjRdOwogCi0vKgotICogQXMgYSBzaWRlIGVmZmVjdCBvZiB0aGUgd2F5IHRoaXMgaXMgaW1wbGVtZW50ZWQgd2UncmUgbGltaXRlZAotICogdG8gaW50ZXJydXB0IGhhbmRsZXJzIGluIHRoZSBhZGRyZXNzIHJhbmdlIGZyb20KLSAqIEtTRUcwIDw9IHggPCBLU0VHMCArIDI1Nm1iIG9uIHRoZSBOZXZhZGEuICBPaCB3ZWxsIC4uLgotICovCi12b2lkICpzZXRfZXhjZXB0X3ZlY3RvcihpbnQgbiwgdm9pZCAqYWRkcikKK3ZvaWQgX19pbml0ICpzZXRfZXhjZXB0X3ZlY3RvcihpbnQgbiwgdm9pZCAqYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIGhhbmRsZXIgPSAodW5zaWduZWQgbG9uZykgYWRkcjsKIAl1bnNpZ25lZCBsb25nIG9sZF9oYW5kbGVyID0gZXhjZXB0aW9uX2hhbmRsZXJzW25dOwogCiAJZXhjZXB0aW9uX2hhbmRsZXJzW25dID0gaGFuZGxlcjsKIAlpZiAobiA9PSAwICYmIGNwdV9oYXNfZGl2ZWMpIHsKLQkJKih1MzIgKikoZWJhc2UgKyAweDIwMCkgPSAweDA4MDAwMDAwIHwKLQkJCQkJICAoMHgwM2ZmZmZmZiAmIChoYW5kbGVyID4+IDIpKTsKLQkJbG9jYWxfZmx1c2hfaWNhY2hlX3JhbmdlKGViYXNlICsgMHgyMDAsIGViYXNlICsgMHgyMDQpOworCQl1bnNpZ25lZCBsb25nIGp1bXBfbWFzayA9IH4oKDEgPDwgMjgpIC0gMSk7CisJCXUzMiAqYnVmID0gKHUzMiAqKShlYmFzZSArIDB4MjAwKTsKKwkJdW5zaWduZWQgaW50IGswID0gMjY7CisJCWlmICgoaGFuZGxlciAmIGp1bXBfbWFzaykgPT0gKChlYmFzZSArIDB4MjAwKSAmIGp1bXBfbWFzaykpIHsKKwkJCXVhc21faV9qKCZidWYsIGhhbmRsZXIgJiB+anVtcF9tYXNrKTsKKwkJCXVhc21faV9ub3AoJmJ1Zik7CisJCX0gZWxzZSB7CisJCQlVQVNNX2lfTEEoJmJ1ZiwgazAsIGhhbmRsZXIpOworCQkJdWFzbV9pX2pyKCZidWYsIGswKTsKKwkJCXVhc21faV9ub3AoJmJ1Zik7CisJCX0KKwkJbG9jYWxfZmx1c2hfaWNhY2hlX3JhbmdlKGViYXNlICsgMHgyMDAsICh1bnNpZ25lZCBsb25nKWJ1Zik7CiAJfQogCXJldHVybiAodm9pZCAqKW9sZF9oYW5kbGVyOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC92cGUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKaW5kZXggNjA0Nzc1Mi4uMmJkMjE1MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC92cGUuYworKysgYi9hcmNoL21pcHMva2VybmVsL3ZwZS5jCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZWxvYWRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhc2F0L3BpY3Z1ZS5oIGIvYXJjaC9taXBzL2xhc2F0L3BpY3Z1ZS5oCmluZGV4IDkxZGY1NTMuLjJmMDc1NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sYXNhdC9waWN2dWUuaAorKysgYi9hcmNoL21pcHMvbGFzYXQvcGljdnVlLmgKQEAgLTQyLDQgKzQyLDMgQEAKIAogdm9pZCBwdmNfY2xlYXIodm9pZCk7CiB2b2lkIHB2Y19ob21lKHZvaWQpOwotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NtZGxpbmUuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY21kbGluZS5jCmluZGV4IDdhZDQ3ZjIuLjFhMDZkZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY21kbGluZS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY21kbGluZS5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKiBBdXRob3I6IEZ1eGluIFpoYW5nLCB6aGFuZ2Z4QGxlbW90ZS5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMjEsMTIgKzIxLDExIEBACiAKICNpbmNsdWRlIDxsb29uZ3Nvbi5oPgogCi1pbnQgcHJvbV9hcmdjOwotLyogcG1vbiBwYXNzZXMgYXJndW1lbnRzIGluIDMyYml0IHBvaW50ZXJzICovCi1pbnQgKl9wcm9tX2FyZ3Y7Ci0KIHZvaWQgX19pbml0IHByb21faW5pdF9jbWRsaW5lKHZvaWQpCiB7CisJaW50IHByb21fYXJnYzsKKwkvKiBwbW9uIHBhc3NlcyBhcmd1bWVudHMgaW4gMzJiaXQgcG9pbnRlcnMgKi8KKwlpbnQgKl9wcm9tX2FyZ3Y7CiAJaW50IGk7CiAJbG9uZyBsOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfYWNjLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfYWNjLmMKaW5kZXggYjQ5NDg1Zi4uYjNmZDVlYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2FjYy5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9hY2MuYwpAQCAtNSw3ICs1LDcgQEAKICAqIEF1dGhvciA6IGpsbGl1LCBsaXVqbEBsZW1vdGUuY29tCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfZWhjaS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2VoY2kuYwppbmRleCA3NGY5YzU5Li5lYWY4Yjg2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfZWhjaS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9laGNpLmMKQEAgLTUsNyArNSw3IEBACiAgKiBBdXRob3IgOiBqbGxpdSwgbGl1amxAbGVtb3RlLmNvbQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2lkZS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2lkZS5jCmluZGV4IDNmNjE1OTQuLjlhOTZiNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pZGUuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfaWRlLmMKQEAgLTUsNyArNSw3IEBACiAgKiBBdXRob3IgOiBqbGxpdSwgbGl1amxAbGVtb3RlLmNvbQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2lzYS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X2lzYS5jCmluZGV4IGI2ZjE3ZjUuLmY1YzA4MTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9pc2EuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfaXNhLmMKQEAgLTUsNyArNSw3IEBACiAgKiBBdXRob3IgOiBqbGxpdSwgbGl1amxAbGVtb3RlLmNvbQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X21mZ3B0LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfbWZncHQuYwppbmRleCA2Y2I0NGRiLi44YzgwN2M5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfbWZncHQuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfbWZncHQuYwpAQCAtNSw3ICs1LDcgQEAKICAqIEF1dGhvcjogWWFuaHVhLCB5YW5oQGxlbW90ZS5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KLSAqIEF1dGhvcjogV3UgemhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSB6aGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBSZWZlcmVuY2U6IEFNRCBHZW9kZShUTSkgQ1M1NTM2IENvbXBhbmlvbiBEZXZpY2UgRGF0YSBCb29rCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X29oY2kuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9vaGNpLmMKaW5kZXggOGZkYjAyYi4uZGI1OTAwYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X29oY2kuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfb2hjaS5jCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9wY2kuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9wY2kuYwppbmRleCBlMjNmM2Q3Li42ZGZlYWIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfcGNpLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X3BjaS5jCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yIDogamxsaXUsIGxpdWpsQGxlbW90ZS5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZWFybHlfcHJpbnRrLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vhcmx5X3ByaW50ay5jCmluZGV4IDIzZTdhOGYuLmE3MTczNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZWFybHlfcHJpbnRrLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lYXJseV9wcmludGsuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFBoaWxpcHBlIFZhY2hvbiA8cGhpbGlwcGVAY293cGlnLmNhPgogICogIENvcHlyaWdodCAoYykgMjAwOSBMZW1vdGUgSW5jLgotICogIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lbnYuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZW52LmMKaW5kZXggMTk2ZDk0Ny4uYWU0Y2ZmOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lbnYuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vudi5jCkBAIC05LDggKzksOCBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3IExlbW90ZSBJbmMuICYgSW5zaXRpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQogICogQXV0aG9yOiBGdXhpbiBaaGFuZywgemhhbmdmeEBsZW1vdGUuY29tCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuICYgSW5zaXRpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTIzLDEzICsyMywxMCBAQAogCiAjaW5jbHVkZSA8bG9vbmdzb24uaD4KIAotdW5zaWduZWQgbG9uZyBidXNfY2xvY2ssIGNwdV9jbG9ja19mcmVxOwordW5zaWduZWQgbG9uZyBjcHVfY2xvY2tfZnJlcTsKIEVYUE9SVF9TWU1CT0woY3B1X2Nsb2NrX2ZyZXEpOwogdW5zaWduZWQgbG9uZyBtZW1zaXplLCBoaWdobWVtc2l6ZTsKIAotLyogcG1vbiBwYXNzZXMgYXJndW1lbnRzIGluIDMyYml0IHBvaW50ZXJzICovCi1pbnQgKl9wcm9tX2VudnA7Ci0KICNkZWZpbmUgcGFyc2VfZXZlbl9lYXJsaWVyKHJlcywgb3B0aW9uLCBwKQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCWlmIChzdHJuY21wKG9wdGlvbiwgKGNoYXIgKilwLCBzdHJsZW4ob3B0aW9uKSkgPT0gMCkJCVwKQEAgLTM5LDYgKzM2LDEwIEBACiAKIHZvaWQgX19pbml0IHByb21faW5pdF9lbnYodm9pZCkKIHsKKwkvKiBwbW9uIHBhc3NlcyBhcmd1bWVudHMgaW4gMzJiaXQgcG9pbnRlcnMgKi8KKwlpbnQgKl9wcm9tX2VudnA7CisJdW5zaWduZWQgbG9uZyBidXNfY2xvY2s7CisJdW5zaWduZWQgaW50IHByb2Nlc3Nvcl9pZDsKIAlsb25nIGw7CiAKIAkvKiBmaXJtd2FyZSBhcmd1bWVudHMgYXJlIGluaXRpYWxpemVkIGluIGhlYWQuUyAqLwpAQCAtNTUsNiArNTYsMjIgQEAKIAl9CiAJaWYgKG1lbXNpemUgPT0gMCkKIAkJbWVtc2l6ZSA9IDI1NjsKKwlpZiAoYnVzX2Nsb2NrID09IDApCisJCWJ1c19jbG9jayA9IDY2MDAwMDAwOworCWlmIChjcHVfY2xvY2tfZnJlcSA9PSAwKSB7CisJCXByb2Nlc3Nvcl9pZCA9ICgmY3VycmVudF9jcHVfZGF0YSktPnByb2Nlc3Nvcl9pZDsKKwkJc3dpdGNoIChwcm9jZXNzb3JfaWQgJiBQUklEX1JFVl9NQVNLKSB7CisJCWNhc2UgUFJJRF9SRVZfTE9PTkdTT04yRToKKwkJCWNwdV9jbG9ja19mcmVxID0gNTMzMDgwMDAwOworCQkJYnJlYWs7CisJCWNhc2UgUFJJRF9SRVZfTE9PTkdTT04yRjoKKwkJCWNwdV9jbG9ja19mcmVxID0gNzk3MDAwMDAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljcHVfY2xvY2tfZnJlcSA9IDEwMDAwMDAwMDsKKwkJCWJyZWFrOworCQl9CisJfQogCiAJcHJfaW5mbygiYnVzY2xvY2s9JWxkLCBjcHVjbG9jaz0lbGQsIG1lbXNpemU9JWxkLCBoaWdobWVtc2l6ZT0lbGRcbiIsCiAJCWJ1c19jbG9jaywgY3B1X2Nsb2NrX2ZyZXEsIG1lbXNpemUsIGhpZ2htZW1zaXplKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaW5pdC5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pbml0LmMKaW5kZXggYTJhYmQ5My4uMTlkMzQxNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pbml0LmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pbml0LmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vbWFjaHR5cGUuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vbWFjaHR5cGUuYwppbmRleCAwZWQ1MmIzLi44NTNmMTg0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21hY2h0eXBlLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tYWNodHlwZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLiAmIEluc2l0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIENvcHlyaWdodCAoYykgMjAwOSBaaGFuZyBMZSA8cjBiZXJ0ekBnZW50b28ub3JnPgogICoKQEAgLTM1LDYgKzM1LDEwIEBACiAJcmV0dXJuIHN5c3RlbV90eXBlc1ttaXBzX21hY2h0eXBlXTsKIH0KIAordm9pZCBfX3dlYWsgX19pbml0IG1hY2hfcHJvbV9pbml0X21hY2h0eXBlKHZvaWQpCit7Cit9CisKIHZvaWQgX19pbml0IHByb21faW5pdF9tYWNodHlwZSh2b2lkKQogewogCWNoYXIgKnAsIHN0cltNQUNIVFlQRV9MRU5dOwpAQCAtNDMsOCArNDcsMTAgQEAKIAltaXBzX21hY2h0eXBlID0gTE9PTkdTT05fTUFDSFRZUEU7CiAKIAlwID0gc3Ryc3RyKGFyY3NfY21kbGluZSwgIm1hY2h0eXBlPSIpOwotCWlmICghcCkKKwlpZiAoIXApIHsKKwkJbWFjaF9wcm9tX2luaXRfbWFjaHR5cGUoKTsKIAkJcmV0dXJuOworCX0KIAlwICs9IHN0cmxlbigibWFjaHR5cGU9Iik7CiAJc3RybmNweShzdHIsIHAsIE1BQ0hUWVBFX0xFTik7CiAJcCA9IHN0cnN0cihzdHIsICIgIik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21lbS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9tZW0uYwppbmRleCBjZWFjZDA5Li5lYzJmNzk2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL21lbS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vbWVtLmMKQEAgLTE2LDEwICsxNiwxMSBAQAogCiB2b2lkIF9faW5pdCBwcm9tX2luaXRfbWVtb3J5KHZvaWQpCiB7Ci0gICAgYWRkX21lbW9yeV9yZWdpb24oMHgwLCAobWVtc2l6ZSA8PCAyMCksIEJPT1RfTUVNX1JBTSk7CisJYWRkX21lbW9yeV9yZWdpb24oMHgwLCAobWVtc2l6ZSA8PCAyMCksIEJPT1RfTUVNX1JBTSk7CiAKLSAgICBhZGRfbWVtb3J5X3JlZ2lvbihtZW1zaXplIDw8IDIwLCBMT09OR1NPTl9QQ0lfTUVNX1NUQVJUIC0gKG1lbXNpemUgPDwKLQkJCSAgICAyMCksIEJPT1RfTUVNX1JFU0VSVkVEKTsKKwlhZGRfbWVtb3J5X3JlZ2lvbihtZW1zaXplIDw8IDIwLCBMT09OR1NPTl9QQ0lfTUVNX1NUQVJUIC0gKG1lbXNpemUgPDwKKwkJCQkyMCksIEJPT1RfTUVNX1JFU0VSVkVEKTsKKwogI2lmZGVmIENPTkZJR19DUFVfU1VQUE9SVFNfQUREUldJTkNGRwogCXsKIAkJaW50IGJpdDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcGxhdGZvcm0uYwppbmRleCBiZTgxNzc3Li5lZDAwN2EyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbGF0Zm9ybS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3BtLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3BtLmMKaW5kZXggYjYyNWZlYy4uNmMxZmQ5MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9wbS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcG0uYwpAQCAtMiw3ICsyLDcgQEAKICAqIGxvb25nc29uLXNwZWNpZmljIHN1c3BlbmQgc3VwcG9ydAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KLSAqICBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiAgQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3Jlc2V0LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3Jlc2V0LmMKaW5kZXggZDU3ZjE3MS4uNGJkOWMxOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9yZXNldC5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vcmVzZXQuYwpAQCAtNiw4ICs2LDggQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTGVtb3RlLCBJbmMuICYgSW5zdGl0dXRlIG9mIENvbXB1dGluZyBUZWNobm9sb2d5CiAgKiBBdXRob3I6IEZ1eGluIFpoYW5nLCB6aGFuZ2Z4QGxlbW90ZS5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4gJiBJbnN0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKLSAqIEF1dGhvcjogWmhhbmdqaW4gV3UsIHd1empAbGVtb3RlLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgorICogQXV0aG9yOiBaaGFuZ2ppbiBXdSwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgpAQCAtMjUsMTggKzI1LDI2IEBACiAJKCh2b2lkICgqKSh2b2lkKSlpb3JlbWFwX25vY2FjaGUoTE9PTkdTT05fQk9PVF9CQVNFLCA0KSkgKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGxvb25nc29uX2hhbHQodm9pZCkKK3N0YXRpYyB2b2lkIGxvb25nc29uX3Bvd2Vyb2ZmKHZvaWQpCiB7CiAJbWFjaF9wcmVwYXJlX3NodXRkb3duKCk7Ci0Jd2hpbGUgKDEpCi0JCTsKKwl1bnJlYWNoYWJsZSgpOworfQorCitzdGF0aWMgdm9pZCBsb29uZ3Nvbl9oYWx0KHZvaWQpCit7CisJcHJfbm90aWNlKCJcblxuKiogWW91IGNhbiBzYWZlbHkgdHVybiBvZmYgdGhlIHBvd2VyIG5vdyAqKlxuXG4iKTsKKwl3aGlsZSAoMSkgeworCQlpZiAoY3B1X3dhaXQpCisJCQljcHVfd2FpdCgpOworCX0KIH0KIAogc3RhdGljIGludCBfX2luaXQgbWlwc19yZWJvb3Rfc2V0dXAodm9pZCkKIHsKIAlfbWFjaGluZV9yZXN0YXJ0ID0gbG9vbmdzb25fcmVzdGFydDsKIAlfbWFjaGluZV9oYWx0ID0gbG9vbmdzb25faGFsdDsKLQlwbV9wb3dlcl9vZmYgPSBsb29uZ3Nvbl9oYWx0OworCXBtX3Bvd2VyX29mZiA9IGxvb25nc29uX3Bvd2Vyb2ZmOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3NlcmlhbC5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9zZXJpYWwuYwppbmRleCAyM2I2NmE1Li43NTgwODczIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3NlcmlhbC5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vc2VyaWFsLmMKQEAgLTcsNyArNyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgogICogQXV0aG9yOiBZYW4gaHVhICh5YW5odWFAbGVtb3RlLmNvbSkKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gKHd1empAbGVtb3RlLmNvbSkKKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gKHd1emhhbmdqaW5AZ21haWwuY29tKQogICovCiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi90aW1lLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3RpbWUuYwppbmRleCAzNWYwYjY2Li45ZmRkMDFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3RpbWUuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3RpbWUuYwpAQCAtMiw4ICsyLDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwNyBMZW1vdGUsIEluYy4gJiBJbnN0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKICAqIEF1dGhvcjogRnV4aW4gWmhhbmcsIHpoYW5nZnhAbGVtb3RlLmNvbQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUgSW5jLiAmIEluc2l0aXR1dGUgb2YgQ29tcHV0aW5nIFRlY2hub2xvZ3kKLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdWFydF9iYXNlLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL3VhcnRfYmFzZS5jCmluZGV4IDc4ZmY2NmEuLmQ2OWVhNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vdWFydF9iYXNlLmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi91YXJ0X2Jhc2UuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2Z1bG9vbmctMmUvcmVzZXQuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9mdWxvb25nLTJlL3Jlc2V0LmMKaW5kZXggZmMxNmM2Ny4uYmMzOWVjNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2Z1bG9vbmctMmUvcmVzZXQuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vZnVsb29uZy0yZS9yZXNldC5jCkBAIC0xLDggKzEsOCBAQAogLyogQm9hcmQtc3BlY2lmaWMgcmVib290L3NodXRkb3duIHJvdXRpbmVzCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDkgUGhpbGlwcGUgVmFjaG9uIDxwaGlsaXBwZUBjb3dwaWcuY2E+CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuICYgSW5zaXRpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvTWFrZWZpbGUgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL01ha2VmaWxlCmluZGV4IDRkODRiMjcuLjg2OTlhNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIGxlbW90ZSBsb29uZ3NvbjJmIGZhbWlseSBtYWNoaW5lcwogIwogCi1vYmoteSArPSBpcnEubyByZXNldC5vIGVjX2tiMzMxMGIubworb2JqLXkgKz0gbWFjaHR5cGUubyBpcnEubyByZXNldC5vIGVjX2tiMzMxMGIubwogCiAjCiAjIFN1c3BlbmQgU3VwcG9ydApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9lY19rYjMzMTBiLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2VjX2tiMzMxMGIuYwppbmRleCA0ZDg0MTExLi42NDA1NzI0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2VjX2tiMzMxMGIuYworKysgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2VjX2tiMzMxMGIuYwpAQCAtNzUsNiArNzUsOCBAQAogCQl1ZGVsYXkoRUNfUkVHX0RFTEFZKTsKIAl9CiAKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0X2FjY2Vzc19sb2NrLCBmbGFncyk7CisKIAlpZiAodGltZW91dCA8PSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRlYWRhYmxlIGVycm9yIDogdGltZW91dC4uLlxuIiwgX19mdW5jX18pOwogCQlyZXQgPSAtRUlOVkFMOwpAQCAtODMsOCArODUsNiBAQAogCQkJICAgIigleC8lZCllYyBpc3N1ZWQgY29tbWFuZCAlZCBzdGF0dXMgOiAweCV4XG4iLAogCQkJICAgdGltZW91dCwgRUNfQ01EX1RJTUVPVVQgLSB0aW1lb3V0LCBjbWQsIHN0YXR1cyk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0X2FjY2Vzc19sb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZWNfcXVlcnlfc2VxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvaXJxLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2lycS5jCmluZGV4IDc3ZDMyZjkuLjg4MmRmY2Q0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL2lycS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvaXJxLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAlpcnEgPSAtMTsKIAogCWlmICgoTE9PTkdTT05fSU5USVNSICYgTE9PTkdTT05fSU5URU4pICYgTE9PTkdTT05fSU5UX0JJVF9JTlQwKSB7Ci0JCXNwaW5fbG9jaygmaTgyNTlBX2xvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZpODI1OUFfbG9jayk7CiAJCWlzciA9IGluYihQSUNfTUFTVEVSX0NNRCkgJgogCQkJfmluYihQSUNfTUFTVEVSX0lNUikgJiB+KDEgPDwgUElDX0NBU0NBREVfSVIpOwogCQlpZiAoIWlzcikKQEAgLTU2LDcgKzU2LDcgQEAKIAkJCWlmICh+aW5iKFBJQ19NQVNURVJfSVNSKSAmIDB4ODApCiAJCQkJaXJxID0gLTE7CiAJCX0KLQkJc3Bpbl91bmxvY2soJmk4MjU5QV9sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZpODI1OUFfbG9jayk7CiAJfQogCiAJcmV0dXJuIGlycTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvbWFjaHR5cGUuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvbWFjaHR5cGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODYwYTI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9tYWNodHlwZS5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorCisjaW5jbHVkZSA8bG9vbmdzb24uaD4KKwordm9pZCBfX2luaXQgbWFjaF9wcm9tX2luaXRfbWFjaHR5cGUodm9pZCkKK3sKKwkvKiBXZSBzaGFyZSB0aGUgc2FtZSBrZXJuZWwgaW1hZ2UgZmlsZSBhbW9uZyBMZW1vdGUgMkYgZmFtaWx5CisJICogb2YgbWFjaGluZXMsIGFuZCBwcm92aWRlIHRoZSBtYWNodHlwZT0ga2VybmVsIGNvbW1hbmQgbGluZQorCSAqIHRvIHVzZXJzIHRvIGluZGljYXRlIHRoZWlyIG1hY2hpbmUsIHRoaXMgY29tbWFuZCBsaW5lIHdpbGwKKwkgKiBiZSBwYXNzZWQgYnkgdGhlIGxhdGVzdCBQTU9OIGF1dG9tYXRpY2FsbHkuIGFuZCBmb3J0dW5hdGVseSwKKwkgKiB1cCB0byBub3csIHdlIGNhbiBnZXQgdGhlIG1hY2hpbmUgdHlwZSBmcm9tIHRoZSBQTU9OX1ZFUj0KKwkgKiBjb21tYW5kbGluZSBkaXJlY3RseSBleGNlcHQgdGhlIE5BUyBtYWNoaW5lLCBJbiB0aGUgb2xkCisJICogbWFjaGluZXMsIHRoaXMgd2lsbCBoZWxwIHRoZSB1c2VycyBhIGxvdC4KKwkgKgorCSAqIElmIG5vICJtYWNodHlwZT0iIHBhc3NlZCwgZ2V0IG1hY2hpbmUgdHlwZSBmcm9tICJQTU9OX1ZFUj0iLgorCSAqIAlQTU9OX1ZFUj1MTTgwODkJCUxlbW90ZSA4LjknJyBuZXRib29rCisJICogCSAgICAgICAgIExNODEwMQkJTGVtb3RlIDEwLjEnJyBuZXRib29rCisJICogCShUaGUgYWJvdmUgdHdvIG5ldGJvb2tzIGhhdmUgdGhlIHNhbWUga2VybmVsIHN1cHBvcnQpCisJICoJICAgICAgICAgTE02WFhYCQlMZW1vdGUgRnVMb29uZygyRikgYm94IHNlcmllcworCSAqCSAgICAgICAgIExNOVhYWAkJTGVtb3RlIEx5bkxvb25nIFBDIHNlcmllcworCSAqLworCWlmIChzdHJzdHIoYXJjc19jbWRsaW5lLCAiUE1PTl9WRVI9TE0iKSkgeworCQlpZiAoc3Ryc3RyKGFyY3NfY21kbGluZSwgIlBNT05fVkVSPUxNOCIpKQorCQkJbWlwc19tYWNodHlwZSA9IE1BQ0hfTEVNT1RFX1lMMkY4OTsKKwkJZWxzZSBpZiAoc3Ryc3RyKGFyY3NfY21kbGluZSwgIlBNT05fVkVSPUxNNiIpKQorCQkJbWlwc19tYWNodHlwZSA9IE1BQ0hfTEVNT1RFX0ZMMkY7CisJCWVsc2UgaWYgKHN0cnN0cihhcmNzX2NtZGxpbmUsICJQTU9OX1ZFUj1MTTkiKSkKKwkJCW1pcHNfbWFjaHR5cGUgPSBNQUNIX0xFTU9URV9MTDJGOworCQllbHNlCisJCQltaXBzX21hY2h0eXBlID0gTUFDSF9MRU1PVEVfTkFTOworCisJCXN0cmNhdChhcmNzX2NtZGxpbmUsICIgbWFjaHR5cGU9Iik7CisJCXN0cmNhdChhcmNzX2NtZGxpbmUsIGdldF9zeXN0ZW1fdHlwZSgpKTsKKwkJc3RyY2F0KGFyY3NfY21kbGluZSwgIiAiKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL3BtLmMgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL3BtLmMKaW5kZXggZDdhZjJlNi4uY2FjNGQzOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9wbS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvcG0uYwpAQCAtMiw3ICsyLDcgQEAKICAqICBMZW1vdGUgbG9vbmdzb24yZiBmYW1pbHkgbWFjaGluZXMnIHNwZWNpZmljIHN1c3BlbmQgc3VwcG9ydAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KLSAqICBBdXRob3I6IFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiAgQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL3Jlc2V0LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vbGVtb3RlLTJmL3Jlc2V0LmMKaW5kZXggNTFkMWE2MC4uMzYwMjBhMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2xlbW90ZS0yZi9yZXNldC5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9sZW1vdGUtMmYvcmVzZXQuYwpAQCAtMyw3ICszLDcgQEAKICAqIENvcHlyaWdodCAoYykgMjAwOSBQaGlsaXBwZSBWYWNob24gPHBoaWxpcHBlQGNvd3BpZy5jYT4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRkLmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NGQuYwppbmRleCA3ZTkwMGYzLi5hMDMyNTMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NGQuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NGQuYwpAQCAtMTM1LDQgKzEzNSwzIEBACiAJcHJpbnRrKCJcbiIpOwogCXJldHVybiB4OwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NGRwLmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NGRwLmMKaW5kZXggNmQyZDg5Zi4uMmYyMmZkNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRkcC5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0ZHAuYwpAQCAtMTQ4LDcgKzE0OCw2IEBACiAKIAkJCXN3aXRjaChpZWVlNzU0X2Nzci5ybSkgewogCQkJY2FzZSBJRUVFNzU0X1JOOgotCQkJCXJldHVybiBpZWVlNzU0ZHBfemVybyhzbik7CiAJCQljYXNlIElFRUU3NTRfUlo6CiAJCQkJcmV0dXJuIGllZWU3NTRkcF96ZXJvKHNuKTsKIAkJCWNhc2UgSUVFRTc1NF9SVTogICAgLyogdG93YXJkICtJbmZpbml0eSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRzcC5jIGIvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTRzcC5jCmluZGV4IDQ2MzUzNDAuLmExOWI3MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9pZWVlNzU0c3AuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NHNwLmMKQEAgLTE0OSw3ICsxNDksNiBAQAogCiAJCQlzd2l0Y2goaWVlZTc1NF9jc3Iucm0pIHsKIAkJCWNhc2UgSUVFRTc1NF9STjoKLQkJCQlyZXR1cm4gaWVlZTc1NHNwX3plcm8oc24pOwogCQkJY2FzZSBJRUVFNzU0X1JaOgogCQkJCXJldHVybiBpZWVlNzU0c3BfemVybyhzbik7CiAJCQljYXNlIElFRUU3NTRfUlU6ICAgICAgLyogdG93YXJkICtJbmZpbml0eSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2llZWU3NTR4Y3B0LmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NHhjcHQuYwppbmRleCA3ZDhlZjg5Li5lMDI0MjNhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NHhjcHQuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvaWVlZTc1NHhjcHQuYwpAQCAtNDYsNCArNDYsMyBAQAogCXByaW50ayhLRVJOX0RFQlVHICJmbG9hdGluZyBwb2ludCBleGNlcHRpb24gaW4gXCIlc1wiLCB0eXBlPSVzXG4iLAogCQl4Y3AtPm9wLCBydG5hbWVzW3hjcC0+cnRdKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2Mtb2N0ZW9uLmMgYi9hcmNoL21pcHMvbW0vYy1vY3Rlb24uYwppbmRleCBlMDZmMWFmLi4wZjljNDg4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vYy1vY3Rlb24uYworKysgYi9hcmNoL21pcHMvbW0vYy1vY3Rlb24uYwpAQCAtMTgzLDYgKzE4Myw3IEBACiAKIAlzd2l0Y2ggKGMtPmNwdXR5cGUpIHsKIAljYXNlIENQVV9DQVZJVU1fT0NURU9OOgorCWNhc2UgQ1BVX0NBVklVTV9PQ1RFT05fUExVUzoKIAkJY29uZmlnMSA9IHJlYWRfYzBfY29uZmlnMSgpOwogCQljLT5pY2FjaGUubGluZXN6ID0gMiA8PCAoKGNvbmZpZzEgPj4gMTkpICYgNyk7CiAJCWMtPmljYWNoZS5zZXRzID0gNjQgPDwgKChjb25maWcxID4+IDIyKSAmIDcpOwpAQCAtMTkyLDEwICsxOTMsMTAgQEAKIAkJCWMtPmljYWNoZS5zZXRzICogYy0+aWNhY2hlLndheXMgKiBjLT5pY2FjaGUubGluZXN6OwogCQljLT5pY2FjaGUud2F5Yml0ID0gZmZzKGljYWNoZV9zaXplIC8gYy0+aWNhY2hlLndheXMpIC0gMTsKIAkJYy0+ZGNhY2hlLmxpbmVzeiA9IDEyODsKLQkJaWYgKE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ04zWFhYKSkKLQkJCWMtPmRjYWNoZS5zZXRzID0gMTsgLyogQ04zWFhYIGhhcyBvbmUgRGNhY2hlIHNldCAqLwotCQllbHNlCisJCWlmIChjLT5jcHV0eXBlID09IENQVV9DQVZJVU1fT0NURU9OX1BMVVMpCiAJCQljLT5kY2FjaGUuc2V0cyA9IDI7IC8qIENONVhYWCBoYXMgdHdvIERjYWNoZSBzZXRzICovCisJCWVsc2UKKwkJCWMtPmRjYWNoZS5zZXRzID0gMTsgLyogQ04zWFhYIGhhcyBvbmUgRGNhY2hlIHNldCAqLwogCQljLT5kY2FjaGUud2F5cyA9IDY0OwogCQlkY2FjaGVfc2l6ZSA9CiAJCQljLT5kY2FjaGUuc2V0cyAqIGMtPmRjYWNoZS53YXlzICogYy0+ZGNhY2hlLmxpbmVzejsKQEAgLTMwNSw0ICszMDYsMyBAQAogewogCWNhY2hlX3Bhcml0eV9lcnJvcl9vY3Rlb24oMSk7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jYWNoZS5jIGIvYXJjaC9taXBzL21tL2NhY2hlLmMKaW5kZXggZTcxNmNhZi4uYmU4NjI3YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2NhY2hlLmMKKysrIGIvYXJjaC9taXBzL21tL2NhY2hlLmMKQEAgLTEzNywyMiArMTM3LDQzIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9wcm90ZWN0aW9uX21hcCh2b2lkKQogewotCXByb3RlY3Rpb25fbWFwWzBdID0gUEFHRV9OT05FOwotCXByb3RlY3Rpb25fbWFwWzFdID0gUEFHRV9SRUFET05MWTsKLQlwcm90ZWN0aW9uX21hcFsyXSA9IFBBR0VfQ09QWTsKLQlwcm90ZWN0aW9uX21hcFszXSA9IFBBR0VfQ09QWTsKLQlwcm90ZWN0aW9uX21hcFs0XSA9IFBBR0VfUkVBRE9OTFk7Ci0JcHJvdGVjdGlvbl9tYXBbNV0gPSBQQUdFX1JFQURPTkxZOwotCXByb3RlY3Rpb25fbWFwWzZdID0gUEFHRV9DT1BZOwotCXByb3RlY3Rpb25fbWFwWzddID0gUEFHRV9DT1BZOwotCXByb3RlY3Rpb25fbWFwWzhdID0gUEFHRV9OT05FOwotCXByb3RlY3Rpb25fbWFwWzldID0gUEFHRV9SRUFET05MWTsKLQlwcm90ZWN0aW9uX21hcFsxMF0gPSBQQUdFX1NIQVJFRDsKLQlwcm90ZWN0aW9uX21hcFsxMV0gPSBQQUdFX1NIQVJFRDsKLQlwcm90ZWN0aW9uX21hcFsxMl0gPSBQQUdFX1JFQURPTkxZOwotCXByb3RlY3Rpb25fbWFwWzEzXSA9IFBBR0VfUkVBRE9OTFk7Ci0JcHJvdGVjdGlvbl9tYXBbMTRdID0gUEFHRV9TSEFSRUQ7Ci0JcHJvdGVjdGlvbl9tYXBbMTVdID0gUEFHRV9TSEFSRUQ7CisJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCXByb3RlY3Rpb25fbWFwWzBdICA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fRVhFQyB8IF9QQUdFX05PX1JFQUQpOworCQlwcm90ZWN0aW9uX21hcFsxXSAgPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX05PX0VYRUMpOworCQlwcm90ZWN0aW9uX21hcFsyXSAgPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX05PX0VYRUMgfCBfUEFHRV9OT19SRUFEKTsKKwkJcHJvdGVjdGlvbl9tYXBbM10gID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19FWEVDKTsKKwkJcHJvdGVjdGlvbl9tYXBbNF0gID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19SRUFEKTsKKwkJcHJvdGVjdGlvbl9tYXBbNV0gID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQpOworCQlwcm90ZWN0aW9uX21hcFs2XSAgPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX05PX1JFQUQpOworCQlwcm90ZWN0aW9uX21hcFs3XSAgPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCk7CisKKwkJcHJvdGVjdGlvbl9tYXBbOF0gID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19FWEVDIHwgX1BBR0VfTk9fUkVBRCk7CisJCXByb3RlY3Rpb25fbWFwWzldICA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fRVhFQyk7CisJCXByb3RlY3Rpb25fbWFwWzEwXSA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fRVhFQyB8IF9QQUdFX1dSSVRFIHwgX1BBR0VfTk9fUkVBRCk7CisJCXByb3RlY3Rpb25fbWFwWzExXSA9IF9fcGdwcm90KF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQgfCBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfTk9fRVhFQyB8IF9QQUdFX1dSSVRFKTsKKwkJcHJvdGVjdGlvbl9tYXBbMTJdID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9OT19SRUFEKTsKKwkJcHJvdGVjdGlvbl9tYXBbMTNdID0gX19wZ3Byb3QoX3BhZ2VfY2FjaGFibGVfZGVmYXVsdCB8IF9QQUdFX1BSRVNFTlQpOworCQlwcm90ZWN0aW9uX21hcFsxNF0gPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1dSSVRFICB8IF9QQUdFX05PX1JFQUQpOworCQlwcm90ZWN0aW9uX21hcFsxNV0gPSBfX3BncHJvdChfcGFnZV9jYWNoYWJsZV9kZWZhdWx0IHwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1dSSVRFKTsKKworCX0gZWxzZSB7CisJCXByb3RlY3Rpb25fbWFwWzBdID0gUEFHRV9OT05FOworCQlwcm90ZWN0aW9uX21hcFsxXSA9IFBBR0VfUkVBRE9OTFk7CisJCXByb3RlY3Rpb25fbWFwWzJdID0gUEFHRV9DT1BZOworCQlwcm90ZWN0aW9uX21hcFszXSA9IFBBR0VfQ09QWTsKKwkJcHJvdGVjdGlvbl9tYXBbNF0gPSBQQUdFX1JFQURPTkxZOworCQlwcm90ZWN0aW9uX21hcFs1XSA9IFBBR0VfUkVBRE9OTFk7CisJCXByb3RlY3Rpb25fbWFwWzZdID0gUEFHRV9DT1BZOworCQlwcm90ZWN0aW9uX21hcFs3XSA9IFBBR0VfQ09QWTsKKwkJcHJvdGVjdGlvbl9tYXBbOF0gPSBQQUdFX05PTkU7CisJCXByb3RlY3Rpb25fbWFwWzldID0gUEFHRV9SRUFET05MWTsKKwkJcHJvdGVjdGlvbl9tYXBbMTBdID0gUEFHRV9TSEFSRUQ7CisJCXByb3RlY3Rpb25fbWFwWzExXSA9IFBBR0VfU0hBUkVEOworCQlwcm90ZWN0aW9uX21hcFsxMl0gPSBQQUdFX1JFQURPTkxZOworCQlwcm90ZWN0aW9uX21hcFsxM10gPSBQQUdFX1JFQURPTkxZOworCQlwcm90ZWN0aW9uX21hcFsxNF0gPSBQQUdFX1NIQVJFRDsKKwkJcHJvdGVjdGlvbl9tYXBbMTVdID0gUEFHRV9TSEFSRUQ7CisJfQogfQogCiB2b2lkIF9fY3B1aW5pdCBjcHVfY2FjaGVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2ZhdWx0LmMgYi9hcmNoL21pcHMvbW0vZmF1bHQuYwppbmRleCBlOTdhN2EyLi5iNzhmN2Q5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vZmF1bHQuYworKysgYi9hcmNoL21pcHMvbW0vZmF1bHQuYwpAQCAtOTksOCArOTksMzEgQEAKIAkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkKIAkJCWdvdG8gYmFkX2FyZWE7CiAJfSBlbHNlIHsKLQkJaWYgKCEodm1hLT52bV9mbGFncyAmIChWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDKSkpCi0JCQlnb3RvIGJhZF9hcmVhOworCQlpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIHsKKwkJCWlmIChhZGRyZXNzID09IHJlZ3MtPmNwMF9lcGMgJiYgISh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykpIHsKKyNpZiAwCisJCQkJcHJfbm90aWNlKCJDcHUlZFslczolZDolMCpseDolbGQ6JTAqbHhdIFhJIHZpb2xhdGlvblxuIiwKKwkJCQkJICByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLAorCQkJCQkgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKKwkJCQkJICBmaWVsZCwgYWRkcmVzcywgd3JpdGUsCisJCQkJCSAgZmllbGQsIHJlZ3MtPmNwMF9lcGMpOworI2VuZGlmCisJCQkJZ290byBiYWRfYXJlYTsKKwkJCX0KKwkJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEKSkgeworI2lmIDAKKwkJCQlwcl9ub3RpY2UoIkNwdSVkWyVzOiVkOiUwKmx4OiVsZDolMCpseF0gUkkgdmlvbGF0aW9uXG4iLAorCQkJCQkgIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksCisJCQkJCSAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLAorCQkJCQkgIGZpZWxkLCBhZGRyZXNzLCB3cml0ZSwKKwkJCQkJICBmaWVsZCwgcmVncy0+Y3AwX2VwYyk7CisjZW5kaWYKKwkJCQlnb3RvIGJhZF9hcmVhOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKCEodm1hLT52bV9mbGFncyAmIChWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDKSkpCisJCQkJZ290byBiYWRfYXJlYTsKKwkJfQogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvbWlwcy9tbS9odWdldGxicGFnZS5jCmluZGV4IDhjMjgzNGYuLmNkMDY2MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvbWlwcy9tbS9odWdldGxicGFnZS5jCkBAIC05Nyw0ICs5NywzIEBACiAJCXBhZ2UgKz0gKChhZGRyZXNzICYgfkhQQUdFX01BU0spID4+IFBBR0VfU0hJRlQpOwogCXJldHVybiBwYWdlOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaW5pdC5jIGIvYXJjaC9taXBzL21tL2luaXQuYwppbmRleCAxNjUxOTQyLi4xMjUzOWFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHXzY0QklUX1BIWVNfQUREUikgJiYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFMzMikKIAllbnRyeWxvID0gcHRlLnB0ZV9oaWdoOwogI2Vsc2UKLQllbnRyeWxvID0gcHRlX3ZhbChwdGUpID4+IDY7CisJZW50cnlsbyA9IHB0ZV90b19lbnRyeWxvKHB0ZV92YWwocHRlKSk7CiAjZW5kaWYKIAogCUVOVEVSX0NSSVRJQ0FMKGZsYWdzKTsKQEAgLTI5OCw3ICsyOTgsNyBAQAogfQogCiAjaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCi1zdGF0aWMgaW50IF9faW5pdCBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBhZ2VucikKK2ludCBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBhZ2VucikKIHsKIAlpbnQgaTsKIApAQCAtNDc3LDcgKzQ3Nyw3IEBACiAgKiB3aWxsIG9mZmljaWFsbHkgYmUgcmV0aXJlZC4KICAqLwogcGdkX3Qgc3dhcHBlcl9wZ19kaXJbX1BUUlNfUEVSX1BHRF0gX19wYWdlX2FsaWduZWQoX1BHRF9PUkRFUik7Ci0jaWZkZWYgQ09ORklHXzY0QklUCisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIHBtZF90IGludmFsaWRfcG1kX3RhYmxlW1BUUlNfUEVSX1BNRF0gX19wYWdlX2FsaWduZWQoUE1EX09SREVSKTsKICNlbmRpZgogcHRlX3QgaW52YWxpZF9wdGVfdGFibGVbUFRSU19QRVJfUFRFXSBfX3BhZ2VfYWxpZ25lZChQVEVfT1JERVIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3BhZ2UuYyBiL2FyY2gvbWlwcy9tbS9wYWdlLmMKaW5kZXggZjVjNzM3NS4uMzYyNzJmNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3BhZ2UuYworKysgYi9hcmNoL21pcHMvbW0vcGFnZS5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfZG1hLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgInVhc20uaCIKKyNpbmNsdWRlIDxhc20vdWFzbS5oPgogCiAvKiBSZWdpc3RlcnMgdXNlZCBpbiB0aGUgYXNzZW1ibGVkIHJvdXRpbmVzLiAqLwogI2RlZmluZSBaRVJPIDAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLTY0LmMgYi9hcmNoL21pcHMvbW0vcGd0YWJsZS02NC5jCmluZGV4IDExMjEwMTkuLjc4ZWFhNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9wZ3RhYmxlLTY0LmMKKysrIGIvYXJjaC9taXBzL21tL3BndGFibGUtNjQuYwpAQCAtMTUsMjMgKzE1LDMxIEBACiB2b2lkIHBnZF9pbml0KHVuc2lnbmVkIGxvbmcgcGFnZSkKIHsKIAl1bnNpZ25lZCBsb25nICpwLCAqZW5kOworCXVuc2lnbmVkIGxvbmcgZW50cnk7CisKKyNpZmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECisJZW50cnkgPSAodW5zaWduZWQgbG9uZylpbnZhbGlkX3B0ZV90YWJsZTsKKyNlbHNlCisJZW50cnkgPSAodW5zaWduZWQgbG9uZylpbnZhbGlkX3BtZF90YWJsZTsKKyNlbmRpZgogCiAgCXAgPSAodW5zaWduZWQgbG9uZyAqKSBwYWdlOwogCWVuZCA9IHAgKyBQVFJTX1BFUl9QR0Q7CiAKIAl3aGlsZSAocCA8IGVuZCkgewotCQlwWzBdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzFdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzJdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzNdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzRdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzVdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzZdID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOwotCQlwWzddID0gKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcG1kX3RhYmxlOworCQlwWzBdID0gZW50cnk7CisJCXBbMV0gPSBlbnRyeTsKKwkJcFsyXSA9IGVudHJ5OworCQlwWzNdID0gZW50cnk7CisJCXBbNF0gPSBlbnRyeTsKKwkJcFs1XSA9IGVudHJ5OworCQlwWzZdID0gZW50cnk7CisJCXBbN10gPSBlbnRyeTsKIAkJcCArPSA4OwogCX0KIH0KIAorI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiB2b2lkIHBtZF9pbml0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwYWdldGFibGUpCiB7CiAJdW5zaWduZWQgbG9uZyAqcCwgKmVuZDsKQEAgLTQwLDE3ICs0OCwxOCBAQAogCWVuZCA9IHAgKyBQVFJTX1BFUl9QTUQ7CiAKIAl3aGlsZSAocCA8IGVuZCkgewotCQlwWzBdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzFdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzJdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzNdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzRdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzVdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzZdID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOwotCQlwWzddID0gKHVuc2lnbmVkIGxvbmcpcGFnZXRhYmxlOworCQlwWzBdID0gcGFnZXRhYmxlOworCQlwWzFdID0gcGFnZXRhYmxlOworCQlwWzJdID0gcGFnZXRhYmxlOworCQlwWzNdID0gcGFnZXRhYmxlOworCQlwWzRdID0gcGFnZXRhYmxlOworCQlwWzVdID0gcGFnZXRhYmxlOworCQlwWzZdID0gcGFnZXRhYmxlOworCQlwWzddID0gcGFnZXRhYmxlOwogCQlwICs9IDg7CiAJfQogfQorI2VuZGlmCiAKIHZvaWQgX19pbml0IHBhZ2V0YWJsZV9pbml0KHZvaWQpCiB7CkBAIC01OSw4ICs2OCw5IEBACiAKIAkvKiBJbml0aWFsaXplIHRoZSBlbnRpcmUgcGdkLiAgKi8KIAlwZ2RfaW5pdCgodW5zaWduZWQgbG9uZylzd2FwcGVyX3BnX2Rpcik7CisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIAlwbWRfaW5pdCgodW5zaWduZWQgbG9uZylpbnZhbGlkX3BtZF90YWJsZSwgKHVuc2lnbmVkIGxvbmcpaW52YWxpZF9wdGVfdGFibGUpOwotCisjZW5kaWYKIAlwZ2RfYmFzZSA9IHN3YXBwZXJfcGdfZGlyOwogCS8qCiAJICogRml4ZWQgbWFwcGluZ3M6CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdGxiLXI0ay5jIGIvYXJjaC9taXBzL21tL3RsYi1yNGsuYwppbmRleCBkNzM0MjhiLi5jNjE4ZWVkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCisrKyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKQEAgLTMwMyw3ICszMDMsNyBAQAogCQl1bnNpZ25lZCBsb25nIGxvOwogCQl3cml0ZV9jMF9wYWdlbWFzayhQTV9IVUdFX01BU0spOwogCQlwdGVwID0gKHB0ZV90ICopcG1kcDsKLQkJbG8gPSBwdGVfdmFsKCpwdGVwKSA+PiA2OworCQlsbyA9IHB0ZV90b19lbnRyeWxvKHB0ZV92YWwoKnB0ZXApKTsKIAkJd3JpdGVfYzBfZW50cnlsbzAobG8pOwogCQl3cml0ZV9jMF9lbnRyeWxvMShsbyArIChIUEFHRV9TSVpFID4+IDcpKTsKIApAQCAtMzIzLDggKzMyMyw4IEBACiAJCXB0ZXArKzsKIAkJd3JpdGVfYzBfZW50cnlsbzEocHRlcC0+cHRlX2hpZ2gpOwogI2Vsc2UKLQkJd3JpdGVfYzBfZW50cnlsbzAocHRlX3ZhbCgqcHRlcCsrKSA+PiA2KTsKLQkJd3JpdGVfYzBfZW50cnlsbzEocHRlX3ZhbCgqcHRlcCkgPj4gNik7CisJCXdyaXRlX2MwX2VudHJ5bG8wKHB0ZV90b19lbnRyeWxvKHB0ZV92YWwoKnB0ZXArKykpKTsKKwkJd3JpdGVfYzBfZW50cnlsbzEocHRlX3RvX2VudHJ5bG8ocHRlX3ZhbCgqcHRlcCkpKTsKICNlbmRpZgogCQltdGMwX3RsYndfaGF6YXJkKCk7CiAJCWlmIChpZHggPCAwKQpAQCAtMzM3LDQwICszMzcsNiBAQAogCUVYSVRfQ1JJVElDQUwoZmxhZ3MpOwogfQogCi0jaWYgMAotc3RhdGljIHZvaWQgcjRrX3VwZGF0ZV9tbXVfY2FjaGVfaHdidWcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBhc2lkOwotCXBnZF90ICpwZ2RwOwotCXBtZF90ICpwbWRwOwotCXB0ZV90ICpwdGVwOwotCWludCBpZHg7Ci0KLQlFTlRFUl9DUklUSUNBTChmbGFncyk7Ci0JYWRkcmVzcyAmPSAoUEFHRV9NQVNLIDw8IDEpOwotCWFzaWQgPSByZWFkX2MwX2VudHJ5aGkoKSAmIEFTSURfTUFTSzsKLQl3cml0ZV9jMF9lbnRyeWhpKGFkZHJlc3MgfCBhc2lkKTsKLQlwZ2RwID0gcGdkX29mZnNldCh2bWEtPnZtX21tLCBhZGRyZXNzKTsKLQltdGMwX3RsYndfaGF6YXJkKCk7Ci0JdGxiX3Byb2JlKCk7Ci0JdGxiX3Byb2JlX2hhemFyZCgpOwotCXBtZHAgPSBwbWRfb2Zmc2V0KHBnZHAsIGFkZHJlc3MpOwotCWlkeCA9IHJlYWRfYzBfaW5kZXgoKTsKLQlwdGVwID0gcHRlX29mZnNldF9tYXAocG1kcCwgYWRkcmVzcyk7Ci0Jd3JpdGVfYzBfZW50cnlsbzAocHRlX3ZhbCgqcHRlcCsrKSA+PiA2KTsKLQl3cml0ZV9jMF9lbnRyeWxvMShwdGVfdmFsKCpwdGVwKSA+PiA2KTsKLQltdGMwX3RsYndfaGF6YXJkKCk7Ci0JaWYgKGlkeCA8IDApCi0JCXRsYl93cml0ZV9yYW5kb20oKTsKLQllbHNlCi0JCXRsYl93cml0ZV9pbmRleGVkKCk7Ci0JdGxid191c2VfaGF6YXJkKCk7Ci0JRVhJVF9DUklUSUNBTChmbGFncyk7Ci19Ci0jZW5kaWYKLQogdm9pZCBfX2luaXQgYWRkX3dpcmVkX2VudHJ5KHVuc2lnbmVkIGxvbmcgZW50cnlsbzAsIHVuc2lnbmVkIGxvbmcgZW50cnlsbzEsCiAJdW5zaWduZWQgbG9uZyBlbnRyeWhpLCB1bnNpZ25lZCBsb25nIHBhZ2VtYXNrKQogewpAQCAtNDQ3LDM0ICs0MTMsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBwcm9iZV90bGIodW5zaWduZWQgbG9uZyBjb25maWcpCi17Ci0Jc3RydWN0IGNwdWluZm9fbWlwcyAqYyA9ICZjdXJyZW50X2NwdV9kYXRhOwotCXVuc2lnbmVkIGludCByZWc7Ci0KLQkvKgotCSAqIElmIHRoaXMgaXNuJ3QgYSBNSVBTMzIgLyBNSVBTNjQgY29tcGxpYW50IENQVS4gIENvbmZpZyAxIHJlZ2lzdGVyCi0JICogaXMgbm90IHN1cHBvcnRlZCwgd2UgYXNzdW1lIFI0ayBzdHlsZS4gIENwdSBwcm9iaW5nIGFscmVhZHkgZmlndXJlZAotCSAqIG91dCB0aGUgbnVtYmVyIG9mIHRsYiBlbnRyaWVzLgotCSAqLwotCWlmICgoYy0+cHJvY2Vzc29yX2lkICYgMHhmZjAwMDApID09IFBSSURfQ09NUF9MRUdBQ1kpCi0JCXJldHVybjsKLSNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0JLyoKLQkgKiBJZiBUTEIgaXMgc2hhcmVkIGluIFNNVEMgc3lzdGVtLCB0b3RhbCBzaXplIGFscmVhZHkKLQkgKiBoYXMgYmVlbiBjYWxjdWxhdGVkIGFuZCB3cml0dGVuIGludG8gY3B1X2RhdGEgdGxic2l6ZQotCSAqLwotCWlmKChzbXRjX3N0YXR1cyAmIFNNVENfVExCX1NIQVJFRCkgPT0gU01UQ19UTEJfU0hBUkVEKQotCQlyZXR1cm47Ci0jZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwotCi0JcmVnID0gcmVhZF9jMF9jb25maWcxKCk7Ci0JaWYgKCEoKGNvbmZpZyA+PiA3KSAmIDMpKQotCQlwYW5pYygiTm8gVExCIHByZXNlbnQiKTsKLQotCWMtPnRsYnNpemUgPSAoKHJlZyA+PiAyNSkgJiAweDNmKSArIDE7Ci19Ci0KIHN0YXRpYyBpbnQgX19jcHVpbml0ZGF0YSBudGxiOwogc3RhdGljIGludCBfX2luaXQgc2V0X250bGIoY2hhciAqc3RyKQogewpAQCAtNDg2LDggKzQyNCw2IEBACiAKIHZvaWQgX19jcHVpbml0IHRsYl9pbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGNvbmZpZyA9IHJlYWRfYzBfY29uZmlnKCk7Ci0KIAkvKgogCSAqIFlvdSBzaG91bGQgbmV2ZXIgY2hhbmdlIHRoaXMgcmVnaXN0ZXI6CiAJICogICAtIE9uIFI0NjAwIDEuNyB0aGUgdGxicCBuZXZlciBoaXRzIGZvciBwYWdlcyBzbWFsbGVyIHRoYW4KQEAgLTQ5NSwxMyArNDMxLDI1IEBACiAJICogICAtIFRoZSBlbnRpcmUgbW0gaGFuZGxpbmcgYXNzdW1lcyB0aGUgYzBfcGFnZW1hc2sgcmVnaXN0ZXIgdG8KIAkgKiAgICAgYmUgc2V0IHRvIGZpeGVkLXNpemUgcGFnZXMuCiAJICovCi0JcHJvYmVfdGxiKGNvbmZpZyk7CiAJd3JpdGVfYzBfcGFnZW1hc2soUE1fREVGQVVMVF9NQVNLKTsKIAl3cml0ZV9jMF93aXJlZCgwKTsKIAlpZiAoY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9SMTAwMDAgfHwKIAkgICAgY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9SMTIwMDAgfHwKIAkgICAgY3VycmVudF9jcHVfdHlwZSgpID09IENQVV9SMTQwMDApCiAJCXdyaXRlX2MwX2ZyYW1lbWFzaygwKTsKKworCWlmIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgeworCQkvKgorCQkgKiBFbmFibGUgdGhlIG5vIHJlYWQsIG5vIGV4ZWMgYml0cywgYW5kIGVuYWJsZSBsYXJnZSB2aXJ0dWFsCisJCSAqIGFkZHJlc3MuCisJCSAqLworCQl1MzIgcGcgPSBQR19SSUUgfCBQR19YSUU7CisjaWZkZWYgQ09ORklHXzY0QklUCisJCXBnIHw9IFBHX0VMUEE7CisjZW5kaWYKKwkJd3JpdGVfYzBfcGFnZWdyYWluKHBnKTsKKwl9CisKIAl0ZW1wX3RsYl9lbnRyeSA9IGN1cnJlbnRfY3B1X2RhdGEudGxic2l6ZSAtIDE7CiAKICAgICAgICAgLyogRnJvbSB0aGlzIHBvaW50IG9uIHRoZSBBUkMgZmlybXdhcmUgaXMgZGVhZC4gICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdGxiZXguYyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCmluZGV4IGJhZGNmNWUuLjBkZTBlNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS90bGJleC5jCisrKyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCkBAIC0yOSw4ICsyOSw3IEBACiAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vd2FyLmg+Ci0KLSNpbmNsdWRlICJ1YXNtLmgiCisjaW5jbHVkZSA8YXNtL3Vhc20uaD4KIAogc3RhdGljIGlubGluZSBpbnQgcjQ1a19idmFod2J1Zyh2b2lkKQogewpAQCAtNzcsNiArNzYsOCBAQAogCWxhYmVsX3ZtYWxsb2NfZG9uZSwKIAlsYWJlbF90bGJ3X2hhemFyZCwKIAlsYWJlbF9zcGxpdCwKKwlsYWJlbF90bGJsX2dvYXJvdW5kMSwKKwlsYWJlbF90bGJsX2dvYXJvdW5kMiwKIAlsYWJlbF9ub3BhZ2VfdGxibCwKIAlsYWJlbF9ub3BhZ2VfdGxicywKIAlsYWJlbF9ub3BhZ2VfdGxibSwKQEAgLTkzLDYgKzk0LDggQEAKIFVBU01fTF9MQShfdm1hbGxvY19kb25lKQogVUFTTV9MX0xBKF90bGJ3X2hhemFyZCkKIFVBU01fTF9MQShfc3BsaXQpCitVQVNNX0xfTEEoX3RsYmxfZ29hcm91bmQxKQorVUFTTV9MX0xBKF90bGJsX2dvYXJvdW5kMikKIFVBU01fTF9MQShfbm9wYWdlX3RsYmwpCiBVQVNNX0xfTEEoX25vcGFnZV90bGJzKQogVUFTTV9MX0xBKF9ub3BhZ2VfdGxibSkKQEAgLTM5Nyw3ICs0MDAsNDQgQEAKIAl9CiB9CiAKK3N0YXRpYyBfX2NwdWluaXQgX19tYXliZV91bnVzZWQgdm9pZCBidWlsZF9jb252ZXJ0X3B0ZV90b19lbnRyeWxvKHUzMiAqKnAsCisJCQkJCQkJCSAgdW5zaWduZWQgaW50IHJlZykKK3sKKwlpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIHsKKwkJVUFTTV9pX1NSTChwLCByZWcsIHJlZywgaWxvZzIoX1BBR0VfTk9fRVhFQykpOworCQlVQVNNX2lfUk9UUihwLCByZWcsIHJlZywgaWxvZzIoX1BBR0VfR0xPQkFMKSAtIGlsb2cyKF9QQUdFX05PX0VYRUMpKTsKKwl9IGVsc2UgeworI2lmZGVmIENPTkZJR182NEJJVF9QSFlTX0FERFIKKwkJdWFzbV9pX2RzcmwocCwgcmVnLCByZWcsIGlsb2cyKF9QQUdFX0dMT0JBTCkpOworI2Vsc2UKKwkJVUFTTV9pX1NSTChwLCByZWcsIHJlZywgaWxvZzIoX1BBR0VfR0xPQkFMKSk7CisjZW5kaWYKKwl9Cit9CisKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisKK3N0YXRpYyBfX2NwdWluaXQgdm9pZCBidWlsZF9yZXN0b3JlX3BhZ2VtYXNrKHUzMiAqKnAsCisJCQkJCSAgICAgc3RydWN0IHVhc21fcmVsb2MgKipyLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCB0bXAsCisJCQkJCSAgICAgZW51bSBsYWJlbF9pZCBsaWQpCit7CisJLyogUmVzZXQgZGVmYXVsdCBwYWdlIHNpemUgKi8KKwlpZiAoUE1fREVGQVVMVF9NQVNLID4+IDE2KSB7CisJCXVhc21faV9sdWkocCwgdG1wLCBQTV9ERUZBVUxUX01BU0sgPj4gMTYpOworCQl1YXNtX2lfb3JpKHAsIHRtcCwgdG1wLCBQTV9ERUZBVUxUX01BU0sgJiAweGZmZmYpOworCQl1YXNtX2lsX2IocCwgciwgbGlkKTsKKwkJdWFzbV9pX210YzAocCwgdG1wLCBDMF9QQUdFTUFTSyk7CisJfSBlbHNlIGlmIChQTV9ERUZBVUxUX01BU0spIHsKKwkJdWFzbV9pX29yaShwLCB0bXAsIDAsIFBNX0RFRkFVTFRfTUFTSyk7CisJCXVhc21faWxfYihwLCByLCBsaWQpOworCQl1YXNtX2lfbXRjMChwLCB0bXAsIEMwX1BBR0VNQVNLKTsKKwl9IGVsc2UgeworCQl1YXNtX2lsX2IocCwgciwgbGlkKTsKKwkJdWFzbV9pX210YzAocCwgMCwgQzBfUEFHRU1BU0spOworCX0KK30KKwogc3RhdGljIF9fY3B1aW5pdCB2b2lkIGJ1aWxkX2h1Z2VfdGxiX3dyaXRlX2VudHJ5KHUzMiAqKnAsCiAJCQkJCQkgc3RydWN0IHVhc21fbGFiZWwgKipsLAogCQkJCQkJIHN0cnVjdCB1YXNtX3JlbG9jICoqciwKQEAgLTQxMSwyMCArNDUxLDcgQEAKIAogCWJ1aWxkX3RsYl93cml0ZV9lbnRyeShwLCBsLCByLCB3bW9kZSk7CiAKLQkvKiBSZXNldCBkZWZhdWx0IHBhZ2Ugc2l6ZSAqLwotCWlmIChQTV9ERUZBVUxUX01BU0sgPj4gMTYpIHsKLQkJdWFzbV9pX2x1aShwLCB0bXAsIFBNX0RFRkFVTFRfTUFTSyA+PiAxNik7Ci0JCXVhc21faV9vcmkocCwgdG1wLCB0bXAsIFBNX0RFRkFVTFRfTUFTSyAmIDB4ZmZmZik7Ci0JCXVhc21faWxfYihwLCByLCBsYWJlbF9sZWF2ZSk7Ci0JCXVhc21faV9tdGMwKHAsIHRtcCwgQzBfUEFHRU1BU0spOwotCX0gZWxzZSBpZiAoUE1fREVGQVVMVF9NQVNLKSB7Ci0JCXVhc21faV9vcmkocCwgdG1wLCAwLCBQTV9ERUZBVUxUX01BU0spOwotCQl1YXNtX2lsX2IocCwgciwgbGFiZWxfbGVhdmUpOwotCQl1YXNtX2lfbXRjMChwLCB0bXAsIEMwX1BBR0VNQVNLKTsKLQl9IGVsc2UgewotCQl1YXNtX2lsX2IocCwgciwgbGFiZWxfbGVhdmUpOwotCQl1YXNtX2lfbXRjMChwLCAwLCBDMF9QQUdFTUFTSyk7Ci0JfQorCWJ1aWxkX3Jlc3RvcmVfcGFnZW1hc2socCwgciwgdG1wLCBsYWJlbF9sZWF2ZSk7CiB9CiAKIC8qCkBAIC00NjAsMTUgKzQ4NywxNSBAQAogCWlmICghc21hbGxfc2VxdWVuY2UpCiAJCXVhc21faV9sdWkocCwgdG1wLCBIUEFHRV9TSVpFID4+ICg3ICsgMTYpKTsKIAotCVVBU01faV9TUkwocCwgcHRlLCBwdGUsIDYpOyAvKiBjb252ZXJ0IHRvIGVudHJ5bG8gKi8KLQl1YXNtX2lfbXRjMChwLCBwdGUsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCAqLworCWJ1aWxkX2NvbnZlcnRfcHRlX3RvX2VudHJ5bG8ocCwgcHRlKTsKKwlVQVNNX2lfTVRDMChwLCBwdGUsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCAqLwogCS8qIGNvbnZlcnQgdG8gZW50cnlsbzEgKi8KIAlpZiAoc21hbGxfc2VxdWVuY2UpCiAJCVVBU01faV9BRERJVShwLCBwdGUsIHB0ZSwgSFBBR0VfU0laRSA+PiA3KTsKIAllbHNlCiAJCVVBU01faV9BRERVKHAsIHB0ZSwgcHRlLCB0bXApOwogCi0JdWFzbV9pX210YzAocCwgcHRlLCBDMF9FTlRSWUxPMSk7IC8qIGxvYWQgaXQgKi8KKwlVQVNNX2lfTVRDMChwLCBwdGUsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCAqLwogfQogCiBzdGF0aWMgX19jcHVpbml0IHZvaWQgYnVpbGRfaHVnZV9oYW5kbGVyX3RhaWwodTMyICoqcCwKQEAgLTU0OSwxMSArNTc2LDEzIEBACiAKIAl1YXNtX2lfYW5kaShwLCB0bXAsIHRtcCwgKFBUUlNfUEVSX1BHRCAtIDEpPDwzKTsKIAl1YXNtX2lfZGFkZHUocCwgcHRyLCBwdHIsIHRtcCk7IC8qIGFkZCBpbiBwZ2Qgb2Zmc2V0ICovCisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKIAl1YXNtX2lfZG1mYzAocCwgdG1wLCBDMF9CQURWQUREUik7IC8qIGdldCBmYXVsdGluZyBhZGRyZXNzICovCiAJdWFzbV9pX2xkKHAsIHB0ciwgMCwgcHRyKTsgLyogZ2V0IHBtZCBwb2ludGVyICovCiAJdWFzbV9pX2RzcmwocCwgdG1wLCB0bXAsIFBNRF9TSElGVC0zKTsgLyogZ2V0IHBtZCBvZmZzZXQgaW4gYnl0ZXMgKi8KIAl1YXNtX2lfYW5kaShwLCB0bXAsIHRtcCwgKFBUUlNfUEVSX1BNRCAtIDEpPDwzKTsKIAl1YXNtX2lfZGFkZHUocCwgcHRyLCBwdHIsIHRtcCk7IC8qIGFkZCBpbiBwbWQgb2Zmc2V0ICovCisjZW5kaWYKIH0KIAogLyoKQEAgLTY4NCwzNSArNzEzLDUzIEBACiAJaWYgKGNwdV9oYXNfNjRiaXRzKSB7CiAJCXVhc21faV9sZChwLCB0bXAsIDAsIHB0ZXApOyAvKiBnZXQgZXZlbiBwdGUgKi8KIAkJdWFzbV9pX2xkKHAsIHB0ZXAsIHNpemVvZihwdGVfdCksIHB0ZXApOyAvKiBnZXQgb2RkIHB0ZSAqLwotCQl1YXNtX2lfZHNybChwLCB0bXAsIHRtcCwgNik7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzAgKi8KLQkJdWFzbV9pX210YzAocCwgdG1wLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgKi8KLQkJdWFzbV9pX2RzcmwocCwgcHRlcCwgcHRlcCwgNik7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzEgKi8KLQkJdWFzbV9pX210YzAocCwgcHRlcCwgQzBfRU5UUllMTzEpOyAvKiBsb2FkIGl0ICovCisJCWlmIChrZXJuZWxfdXNlc19zbWFydG1pcHNfcml4aSkgeworCQkJVUFTTV9pX1NSTChwLCB0bXAsIHRtcCwgaWxvZzIoX1BBR0VfTk9fRVhFQykpOworCQkJVUFTTV9pX1NSTChwLCBwdGVwLCBwdGVwLCBpbG9nMihfUEFHRV9OT19FWEVDKSk7CisJCQlVQVNNX2lfUk9UUihwLCB0bXAsIHRtcCwgaWxvZzIoX1BBR0VfR0xPQkFMKSAtIGlsb2cyKF9QQUdFX05PX0VYRUMpKTsKKwkJCVVBU01faV9NVEMwKHAsIHRtcCwgQzBfRU5UUllMTzApOyAvKiBsb2FkIGl0ICovCisJCQlVQVNNX2lfUk9UUihwLCBwdGVwLCBwdGVwLCBpbG9nMihfUEFHRV9HTE9CQUwpIC0gaWxvZzIoX1BBR0VfTk9fRVhFQykpOworCQl9IGVsc2UgeworCQkJdWFzbV9pX2RzcmwocCwgdG1wLCB0bXAsIGlsb2cyKF9QQUdFX0dMT0JBTCkpOyAvKiBjb252ZXJ0IHRvIGVudHJ5bG8wICovCisJCQlVQVNNX2lfTVRDMChwLCB0bXAsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCAqLworCQkJdWFzbV9pX2RzcmwocCwgcHRlcCwgcHRlcCwgaWxvZzIoX1BBR0VfR0xPQkFMKSk7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzEgKi8KKwkJfQorCQlVQVNNX2lfTVRDMChwLCBwdGVwLCBDMF9FTlRSWUxPMSk7IC8qIGxvYWQgaXQgKi8KIAl9IGVsc2UgewogCQlpbnQgcHRlX29mZl9ldmVuID0gc2l6ZW9mKHB0ZV90KSAvIDI7CiAJCWludCBwdGVfb2ZmX29kZCA9IHB0ZV9vZmZfZXZlbiArIHNpemVvZihwdGVfdCk7CiAKIAkJLyogVGhlIHB0ZSBlbnRyaWVzIGFyZSBwcmUtc2hpZnRlZCAqLwogCQl1YXNtX2lfbHcocCwgdG1wLCBwdGVfb2ZmX2V2ZW4sIHB0ZXApOyAvKiBnZXQgZXZlbiBwdGUgKi8KLQkJdWFzbV9pX210YzAocCwgdG1wLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgKi8KKwkJVUFTTV9pX01UQzAocCwgdG1wLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgKi8KIAkJdWFzbV9pX2x3KHAsIHB0ZXAsIHB0ZV9vZmZfb2RkLCBwdGVwKTsgLyogZ2V0IG9kZCBwdGUgKi8KLQkJdWFzbV9pX210YzAocCwgcHRlcCwgQzBfRU5UUllMTzEpOyAvKiBsb2FkIGl0ICovCisJCVVBU01faV9NVEMwKHAsIHB0ZXAsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCAqLwogCX0KICNlbHNlCiAJVUFTTV9pX0xXKHAsIHRtcCwgMCwgcHRlcCk7IC8qIGdldCBldmVuIHB0ZSAqLwogCVVBU01faV9MVyhwLCBwdGVwLCBzaXplb2YocHRlX3QpLCBwdGVwKTsgLyogZ2V0IG9kZCBwdGUgKi8KIAlpZiAocjQ1a19idmFod2J1ZygpKQogCQlidWlsZF90bGJfcHJvYmVfZW50cnkocCk7Ci0JVUFTTV9pX1NSTChwLCB0bXAsIHRtcCwgNik7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzAgKi8KKwlpZiAoa2VybmVsX3VzZXNfc21hcnRtaXBzX3JpeGkpIHsKKwkJVUFTTV9pX1NSTChwLCB0bXAsIHRtcCwgaWxvZzIoX1BBR0VfTk9fRVhFQykpOworCQlVQVNNX2lfU1JMKHAsIHB0ZXAsIHB0ZXAsIGlsb2cyKF9QQUdFX05PX0VYRUMpKTsKKwkJVUFTTV9pX1JPVFIocCwgdG1wLCB0bXAsIGlsb2cyKF9QQUdFX0dMT0JBTCkgLSBpbG9nMihfUEFHRV9OT19FWEVDKSk7CisJCWlmIChyNGtfMjUwTUhaaHdidWcoKSkKKwkJCVVBU01faV9NVEMwKHAsIDAsIEMwX0VOVFJZTE8wKTsKKwkJVUFTTV9pX01UQzAocCwgdG1wLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgKi8KKwkJVUFTTV9pX1JPVFIocCwgcHRlcCwgcHRlcCwgaWxvZzIoX1BBR0VfR0xPQkFMKSAtIGlsb2cyKF9QQUdFX05PX0VYRUMpKTsKKwl9IGVsc2UgeworCQlVQVNNX2lfU1JMKHAsIHRtcCwgdG1wLCBpbG9nMihfUEFHRV9HTE9CQUwpKTsgLyogY29udmVydCB0byBlbnRyeWxvMCAqLworCQlpZiAocjRrXzI1ME1IWmh3YnVnKCkpCisJCQlVQVNNX2lfTVRDMChwLCAwLCBDMF9FTlRSWUxPMCk7CisJCVVBU01faV9NVEMwKHAsIHRtcCwgQzBfRU5UUllMTzApOyAvKiBsb2FkIGl0ICovCisJCVVBU01faV9TUkwocCwgcHRlcCwgcHRlcCwgaWxvZzIoX1BBR0VfR0xPQkFMKSk7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzEgKi8KKwkJaWYgKHI0NWtfYnZhaHdidWcoKSkKKwkJCXVhc21faV9tZmMwKHAsIHRtcCwgQzBfSU5ERVgpOworCX0KIAlpZiAocjRrXzI1ME1IWmh3YnVnKCkpCi0JCXVhc21faV9tdGMwKHAsIDAsIEMwX0VOVFJZTE8wKTsKLQl1YXNtX2lfbXRjMChwLCB0bXAsIEMwX0VOVFJZTE8wKTsgLyogbG9hZCBpdCAqLwotCVVBU01faV9TUkwocCwgcHRlcCwgcHRlcCwgNik7IC8qIGNvbnZlcnQgdG8gZW50cnlsbzEgKi8KLQlpZiAocjQ1a19idmFod2J1ZygpKQotCQl1YXNtX2lfbWZjMChwLCB0bXAsIEMwX0lOREVYKTsKLQlpZiAocjRrXzI1ME1IWmh3YnVnKCkpCi0JCXVhc21faV9tdGMwKHAsIDAsIEMwX0VOVFJZTE8xKTsKLQl1YXNtX2lfbXRjMChwLCBwdGVwLCBDMF9FTlRSWUxPMSk7IC8qIGxvYWQgaXQgKi8KKwkJVUFTTV9pX01UQzAocCwgMCwgQzBfRU5UUllMTzEpOworCVVBU01faV9NVEMwKHAsIHB0ZXAsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCAqLwogI2VuZGlmCiB9CiAKQEAgLTk4NSw5ICsxMDMyLDE0IEBACiBidWlsZF9wdGVfcHJlc2VudCh1MzIgKipwLCBzdHJ1Y3QgdWFzbV9yZWxvYyAqKnIsCiAJCSAgdW5zaWduZWQgaW50IHB0ZSwgdW5zaWduZWQgaW50IHB0ciwgZW51bSBsYWJlbF9pZCBsaWQpCiB7Ci0JdWFzbV9pX2FuZGkocCwgcHRlLCBwdGUsIF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEKTsKLQl1YXNtX2lfeG9yaShwLCBwdGUsIHB0ZSwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQpOwotCXVhc21faWxfYm5leihwLCByLCBwdGUsIGxpZCk7CisJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCXVhc21faV9hbmRpKHAsIHB0ZSwgcHRlLCBfUEFHRV9QUkVTRU5UKTsKKwkJdWFzbV9pbF9iZXF6KHAsIHIsIHB0ZSwgbGlkKTsKKwl9IGVsc2UgeworCQl1YXNtX2lfYW5kaShwLCBwdGUsIHB0ZSwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQpOworCQl1YXNtX2lfeG9yaShwLCBwdGUsIHB0ZSwgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQpOworCQl1YXNtX2lsX2JuZXoocCwgciwgcHRlLCBsaWQpOworCX0KIAlpUFRFX0xXKHAsIHB0ZSwgcHRyKTsKIH0KIApAQCAtMTI3Miw2ICsxMzI0LDM0IEBACiAJYnVpbGRfcHRlX3ByZXNlbnQoJnAsICZyLCBLMCwgSzEsIGxhYmVsX25vcGFnZV90bGJsKTsKIAlpZiAobTRrY190bGJwX3dhcigpKQogCQlidWlsZF90bGJfcHJvYmVfZW50cnkoJnApOworCisJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCS8qCisJCSAqIElmIHRoZSBwYWdlIGlzIG5vdCBfUEFHRV9WQUxJRCwgUkkgb3IgWEkgY291bGQgbm90CisJCSAqIGhhdmUgdHJpZ2dlcmVkIGl0LiAgU2tpcCB0aGUgZXhwZW5zaXZlIHRlc3QuLgorCQkgKi8KKwkJdWFzbV9pX2FuZGkoJnAsIEswLCBLMCwgX1BBR0VfVkFMSUQpOworCQl1YXNtX2lsX2JlcXooJnAsICZyLCBLMCwgbGFiZWxfdGxibF9nb2Fyb3VuZDEpOworCQl1YXNtX2lfbm9wKCZwKTsKKworCQl1YXNtX2lfdGxicigmcCk7CisJCS8qIEV4YW1pbmUgIGVudHJ5bG8gMCBvciAxIGJhc2VkIG9uIHB0ci4gKi8KKwkJdWFzbV9pX2FuZGkoJnAsIEswLCBLMSwgc2l6ZW9mKHB0ZV90KSk7CisJCXVhc21faV9iZXF6KCZwLCBLMCwgOCk7CisKKwkJVUFTTV9pX01GQzAoJnAsIEswLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgaW4gdGhlIGRlbGF5IHNsb3QqLworCQlVQVNNX2lfTUZDMCgmcCwgSzAsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCBpZiBwdHIgaXMgb2RkICovCisJCS8qCisJCSAqIElmIHRoZSBlbnRyeUxvIChub3cgaW4gSzApIGlzIHZhbGlkIChiaXQgMSksIFJJIG9yCisJCSAqIFhJIG11c3QgaGF2ZSB0cmlnZ2VyZWQgaXQuCisJCSAqLworCQl1YXNtX2lfYW5kaSgmcCwgSzAsIEswLCAyKTsKKwkJdWFzbV9pbF9ibmV6KCZwLCAmciwgSzAsIGxhYmVsX25vcGFnZV90bGJsKTsKKworCQl1YXNtX2xfdGxibF9nb2Fyb3VuZDEoJmwsIHApOworCQkvKiBSZWxvYWQgdGhlIFBURSB2YWx1ZSAqLworCQlpUFRFX0xXKCZwLCBLMCwgSzEpOworCX0KIAlidWlsZF9tYWtlX3ZhbGlkKCZwLCAmciwgSzAsIEsxKTsKIAlidWlsZF9yNDAwMF90bGJjaGFuZ2VfaGFuZGxlcl90YWlsKCZwLCAmbCwgJnIsIEswLCBLMSk7CiAKQEAgLTEyODQsNiArMTM2NCw0MCBAQAogCWlQVEVfTFcoJnAsIEswLCBLMSk7CiAJYnVpbGRfcHRlX3ByZXNlbnQoJnAsICZyLCBLMCwgSzEsIGxhYmVsX25vcGFnZV90bGJsKTsKIAlidWlsZF90bGJfcHJvYmVfZW50cnkoJnApOworCisJaWYgKGtlcm5lbF91c2VzX3NtYXJ0bWlwc19yaXhpKSB7CisJCS8qCisJCSAqIElmIHRoZSBwYWdlIGlzIG5vdCBfUEFHRV9WQUxJRCwgUkkgb3IgWEkgY291bGQgbm90CisJCSAqIGhhdmUgdHJpZ2dlcmVkIGl0LiAgU2tpcCB0aGUgZXhwZW5zaXZlIHRlc3QuLgorCQkgKi8KKwkJdWFzbV9pX2FuZGkoJnAsIEswLCBLMCwgX1BBR0VfVkFMSUQpOworCQl1YXNtX2lsX2JlcXooJnAsICZyLCBLMCwgbGFiZWxfdGxibF9nb2Fyb3VuZDIpOworCQl1YXNtX2lfbm9wKCZwKTsKKworCQl1YXNtX2lfdGxicigmcCk7CisJCS8qIEV4YW1pbmUgIGVudHJ5bG8gMCBvciAxIGJhc2VkIG9uIHB0ci4gKi8KKwkJdWFzbV9pX2FuZGkoJnAsIEswLCBLMSwgc2l6ZW9mKHB0ZV90KSk7CisJCXVhc21faV9iZXF6KCZwLCBLMCwgOCk7CisKKwkJVUFTTV9pX01GQzAoJnAsIEswLCBDMF9FTlRSWUxPMCk7IC8qIGxvYWQgaXQgaW4gdGhlIGRlbGF5IHNsb3QqLworCQlVQVNNX2lfTUZDMCgmcCwgSzAsIEMwX0VOVFJZTE8xKTsgLyogbG9hZCBpdCBpZiBwdHIgaXMgb2RkICovCisJCS8qCisJCSAqIElmIHRoZSBlbnRyeUxvIChub3cgaW4gSzApIGlzIHZhbGlkIChiaXQgMSksIFJJIG9yCisJCSAqIFhJIG11c3QgaGF2ZSB0cmlnZ2VyZWQgaXQuCisJCSAqLworCQl1YXNtX2lfYW5kaSgmcCwgSzAsIEswLCAyKTsKKwkJdWFzbV9pbF9iZXF6KCZwLCAmciwgSzAsIGxhYmVsX3RsYmxfZ29hcm91bmQyKTsKKwkJLyogUmVsb2FkIHRoZSBQVEUgdmFsdWUgKi8KKwkJaVBURV9MVygmcCwgSzAsIEsxKTsKKworCQkvKgorCQkgKiBXZSBjbG9iYmVyZWQgQzBfUEFHRU1BU0ssIHJlc3RvcmUgaXQuICBPbiB0aGUgb3RoZXIgYnJhbmNoCisJCSAqIGl0IGlzIHJlc3RvcmVkIGluIGJ1aWxkX2h1Z2VfdGxiX3dyaXRlX2VudHJ5LgorCQkgKi8KKwkJYnVpbGRfcmVzdG9yZV9wYWdlbWFzaygmcCwgJnIsIEswLCBsYWJlbF9ub3BhZ2VfdGxibCk7CisKKwkJdWFzbV9sX3RsYmxfZ29hcm91bmQyKCZsLCBwKTsKKwl9CiAJdWFzbV9pX29yaSgmcCwgSzAsIEswLCAoX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9WQUxJRCkpOwogCWJ1aWxkX2h1Z2VfaGFuZGxlcl90YWlsKCZwLCAmciwgJmwsIEswLCBLMSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS91YXNtLmMgYi9hcmNoL21pcHMvbW0vdWFzbS5jCmluZGV4IDBhMTY1YzUuLjE1ODFlOTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS91YXNtLmMKKysrIGIvYXJjaC9taXBzL21tL3Vhc20uYwpAQCAtMTksOCArMTksNyBAQAogI2luY2x1ZGUgPGFzbS9pbnN0Lmg+CiAjaW5jbHVkZSA8YXNtL2VsZi5oPgogI2luY2x1ZGUgPGFzbS9idWdzLmg+Ci0KLSNpbmNsdWRlICJ1YXNtLmgiCisjaW5jbHVkZSA8YXNtL3Vhc20uaD4KIAogZW51bSBmaWVsZHMgewogCVJTID0gMHgwMDEsCkBAIC02Myw4ICs2Miw5IEBACiAJaW5zbl9kc3JsMzIsIGluc25fZHJvdHIsIGluc25fZHN1YnUsIGluc25fZXJldCwgaW5zbl9qLCBpbnNuX2phbCwKIAlpbnNuX2pyLCBpbnNuX2xkLCBpbnNuX2xsLCBpbnNuX2xsZCwgaW5zbl9sdWksIGluc25fbHcsIGluc25fbWZjMCwKIAlpbnNuX210YzAsIGluc25fb3JpLCBpbnNuX3ByZWYsIGluc25fcmZlLCBpbnNuX3NjLCBpbnNuX3NjZCwKLQlpbnNuX3NkLCBpbnNuX3NsbCwgaW5zbl9zcmEsIGluc25fc3JsLCBpbnNuX3N1YnUsIGluc25fc3csCi0JaW5zbl90bGJwLCBpbnNuX3RsYndpLCBpbnNuX3RsYndyLCBpbnNuX3hvciwgaW5zbl94b3JpLCBpbnNuX2RpbnMKKwlpbnNuX3NkLCBpbnNuX3NsbCwgaW5zbl9zcmEsIGluc25fc3JsLCBpbnNuX3JvdHIsIGluc25fc3VidSwgaW5zbl9zdywKKwlpbnNuX3RsYnAsIGluc25fdGxiciwgaW5zbl90bGJ3aSwgaW5zbl90bGJ3ciwgaW5zbl94b3IsIGluc25feG9yaSwKKwlpbnNuX2RpbnMKIH07CiAKIHN0cnVjdCBpbnNuIHsKQEAgLTEyNiw5ICsxMjYsMTEgQEAKIAl7IGluc25fc2xsLCAgTShzcGVjX29wLCAwLCAwLCAwLCAwLCBzbGxfb3ApLCAgUlQgfCBSRCB8IFJFIH0sCiAJeyBpbnNuX3NyYSwgIE0oc3BlY19vcCwgMCwgMCwgMCwgMCwgc3JhX29wKSwgIFJUIHwgUkQgfCBSRSB9LAogCXsgaW5zbl9zcmwsICBNKHNwZWNfb3AsIDAsIDAsIDAsIDAsIHNybF9vcCksICBSVCB8IFJEIHwgUkUgfSwKKwl7IGluc25fcm90ciwgIE0oc3BlY19vcCwgMSwgMCwgMCwgMCwgc3JsX29wKSwgIFJUIHwgUkQgfCBSRSB9LAogCXsgaW5zbl9zdWJ1LCAgTShzcGVjX29wLCAwLCAwLCAwLCAwLCBzdWJ1X29wKSwgIFJTIHwgUlQgfCBSRCB9LAogCXsgaW5zbl9zdywgIE0oc3dfb3AsIDAsIDAsIDAsIDAsIDApLCAgUlMgfCBSVCB8IFNJTU0gfSwKIAl7IGluc25fdGxicCwgIE0oY29wMF9vcCwgY29wX29wLCAwLCAwLCAwLCB0bGJwX29wKSwgIDAgfSwKKwl7IGluc25fdGxiciwgIE0oY29wMF9vcCwgY29wX29wLCAwLCAwLCAwLCB0bGJyX29wKSwgIDAgfSwKIAl7IGluc25fdGxid2ksICBNKGNvcDBfb3AsIGNvcF9vcCwgMCwgMCwgMCwgdGxid2lfb3ApLCAgMCB9LAogCXsgaW5zbl90bGJ3ciwgIE0oY29wMF9vcCwgY29wX29wLCAwLCAwLCAwLCB0bGJ3cl9vcCksICAwIH0sCiAJeyBpbnNuX3hvciwgIE0oc3BlY19vcCwgMCwgMCwgMCwgMCwgeG9yX29wKSwgIFJTIHwgUlQgfCBSRCB9LApAQCAtMzc5LDkgKzM4MSwxMSBAQAogSV91MnUxdTMoX3NsbCkKIElfdTJ1MXUzKF9zcmEpCiBJX3UydTF1Myhfc3JsKQorSV91MnUxdTMoX3JvdHIpCiBJX3UzdTF1Mihfc3VidSkKIElfdTJzM3UxKF9zdykKIElfMChfdGxicCkKK0lfMChfdGxicikKIElfMChfdGxid2kpCiBJXzAoX3RsYndyKQogSV91M3UxdTIoX3hvcikKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jCmluZGV4IDRjM2ZjYTEuLjJjYjVhZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbnQuYwpAQCAtNTIsNyArNTIsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgX2djbXBfYmFzZTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXBpX21hcFtOUl9DUFVTXTsKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhtaXBzX2lycV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG1pcHNfaXJxX2xvY2spOwogCiBzdGF0aWMgaW5saW5lIGludCBtaXBzX3BjaWJpb3NfaWFjayh2b2lkKQogewpAQCAtMTAzLDcgKzEwMyw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaXJxOwotCXNwaW5fbG9ja19pcnFzYXZlKCZtaXBzX2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZtaXBzX2lycV9sb2NrLCBmbGFncyk7CiAKIAlpcnEgPSBtaXBzX3BjaWJpb3NfaWFjaygpOwogCkBAIC0xMTMsNyArMTEzLDcgQEAKIAkgKiBvbiBhbiBTTVAgc3lzdGVtLCAgc28gbGVhdmUgaXQgdXAgdG8gdGhlIGdlbmVyaWMgY29kZS4uLgogCSAqLwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWlwc19pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZtaXBzX2lycV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gaXJxOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9pbnRlcnJ1cHRzLmMgYi9hcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL2ludGVycnVwdHMuYwppbmRleCAzYTQ2N2MwLi45NDE5MTZmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL2ludGVycnVwdHMuYworKysgYi9hcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL2ludGVycnVwdHMuYwpAQCAtMTU2LDE5ICsxNTYsMTkgQEAKICNkZWZpbmUgSVJRRkxBR19TVEFSVEVECQkxCiAjZGVmaW5lIElSUUZMQUdfRElTQUJMRUQJMgogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBueDgzM3hfaXJxX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0socG54ODMzeF9pcnFfbG9jayk7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcG54ODMzeF9zdGFydHVwX3BpY19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBwaWNfaXJxID0gaXJxIC0gUE5YODMzWF9QSUNfSVJRX0JBU0U7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCiAJaXJxZmxhZ3NbcGljX2lycV0gPSBJUlFGTEFHX1NUQVJURUQ7CS8qIHN0YXJ0ZWQsIG5vdCBkaXNhYmxlZCAqLwogCXBueDgzM3hfaGFyZF9lbmFibGVfcGljX2lycShwaWNfaXJxKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0xNzcsMTIgKzE3NywxMiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHBpY19pcnEgPSBpcnEgLSBQTlg4MzNYX1BJQ19JUlFfQkFTRTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiAKIAlpcnFmbGFnc1twaWNfaXJxXSA9IDA7CQkJLyogbm90IHN0YXJ0ZWQgKi8KIAlwbng4MzN4X2hhcmRfZGlzYWJsZV9waWNfaXJxKHBpY19pcnEpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBueDgzM3hfZW5hYmxlX3BpY19pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTE5MCwxMyArMTkwLDEzIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgcGljX2lycSA9IGlycSAtIFBOWDgzM1hfUElDX0lSUV9CQVNFOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKIAogCWlycWZsYWdzW3BpY19pcnFdICY9IH5JUlFGTEFHX0RJU0FCTEVEOwogCWlmIChpcnFmbGFnc1twaWNfaXJxXSA9PSBJUlFGTEFHX1NUQVJURUQpCiAJCXBueDgzM3hfaGFyZF9lbmFibGVfcGljX2lycShwaWNfaXJxKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBwbng4MzN4X2Rpc2FibGVfcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMjA0LDEyICsyMDQsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBwaWNfaXJxID0gaXJxIC0gUE5YODMzWF9QSUNfSVJRX0JBU0U7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCiAJaXJxZmxhZ3NbcGljX2lycV0gfD0gSVJRRkxBR19ESVNBQkxFRDsKIAlwbng4MzN4X2hhcmRfZGlzYWJsZV9waWNfaXJxKHBpY19pcnEpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBueDgzM3hfYWNrX3BpY19pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTIyMCwxNSArMjIwLDE1IEBACiB7CiB9CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0socG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2spOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IHBueDgzM3hfc3RhcnR1cF9ncGlvX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCWludCBwaW4gPSBpcnEgLSBQTlg4MzNYX0dQSU9fSVJRX0JBU0U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiAJcG54ODMzeF9ncGlvX2VuYWJsZV9pcnEocGluKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0yMzYsMTggKzIzNiwxOCBAQAogewogCWludCBwaW4gPSBpcnEgLSBQTlg4MzNYX0dQSU9fSVJRX0JBU0U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG54ODMzeF9ncGlvX3BueDgzM3hfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiAJcG54ODMzeF9ncGlvX2VuYWJsZV9pcnEocGluKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBwbng4MzN4X2Rpc2FibGVfZ3Bpb19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlpbnQgcGluID0gaXJxIC0gUE5YODMzWF9HUElPX0lSUV9CQVNFOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCXBueDgzM3hfZ3Bpb19kaXNhYmxlX2lycShwaW4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBueDgzM3hfYWNrX2dwaW9faXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0yNTgsOSArMjU4LDkgQEAKIHsKIAlpbnQgcGluID0gaXJxIC0gUE5YODMzWF9HUElPX0lSUV9CQVNFOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBueDgzM3hfZ3Bpb19wbng4MzN4X2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogCXBueDgzM3hfZ3Bpb19jbGVhcl9pcnEocGluKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbng4MzN4X2dwaW9fcG54ODMzeF9pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IHBueDgzM3hfc2V0X3R5cGVfZ3Bpb19pcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKQEAgLTM3Nyw0ICszNzcsMyBAQAogCiAJbWlwc19ocHRfZnJlcXVlbmN5ICo9IDUwMDAwMDsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL254cC9wbng4MzN4L2NvbW1vbi9wcm9tLmMgYi9hcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL3Byb20uYwppbmRleCAyYTQxZThmLi4yOTk2OWY5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL3Byb20uYworKysgYi9hcmNoL21pcHMvbnhwL3BueDgzM3gvY29tbW9uL3Byb20uYwpAQCAtNjIsOSArNjIsMyBAQAogdm9pZCBfX2luaXQgcHJvbV9mcmVlX3Byb21fbWVtb3J5KHZvaWQpCiB7CiB9Ci0KLWNoYXIgKiBfX2luaXQgcHJvbV9nZXRjbWRsaW5lKHZvaWQpCi17Ci0JcmV0dXJuIGFyY3NfY21kbGluZTsKLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9wcm9tLmMgYi9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3Byb20uYwppbmRleCAyZjU2NzQ1Li4zMmY3MDA5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3Byb20uYworKysgYi9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3Byb20uYwpAQCAtMTI0LDYgKzEyNCw1IEBACiAJfQogfQogCi1FWFBPUlRfU1lNQk9MKHByb21fZ2V0Y21kbGluZSk7CiBFWFBPUlRfU1lNQk9MKGdldF9ldGhlcm5ldF9hZGRyKTsKIEVYUE9SVF9TWU1CT0woc3RyMmVhZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9vcHJvZmlsZS9jb21tb24uYyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9jb21tb24uYwppbmRleCA3ODMyYWQyLi5mOWViMWFiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvb3Byb2ZpbGUvY29tbW9uLmMKKysrIGIvYXJjaC9taXBzL29wcm9maWxlL2NvbW1vbi5jCkBAIC02LDYgKzYsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJhbGYgQmFlY2hsZQogICogQ29weXJpZ2h0IChDKSAyMDA1IE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L29wcm9maWxlLmg+CkBAIC0xNCw5ICsxNSw5IEBACiAKICNpbmNsdWRlICJvcF9pbXBsLmgiCiAKLWV4dGVybiBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9taXBzeHhfb3BzIF9fYXR0cmlidXRlX18oKHdlYWspKTsKLWV4dGVybiBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9ybTkwMDBfb3BzIF9fYXR0cmlidXRlX18oKHdlYWspKTsKLWV4dGVybiBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9sb29uZ3NvbjJfb3BzIF9fYXR0cmlidXRlX18oKHdlYWspKTsKK2V4dGVybiBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9taXBzeHhfb3BzIF9fd2VhazsKK2V4dGVybiBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9ybTkwMDBfb3BzIF9fd2VhazsKK2V4dGVybiBzdHJ1Y3Qgb3BfbWlwc19tb2RlbCBvcF9tb2RlbF9sb29uZ3NvbjJfb3BzIF9fd2VhazsKIAogc3RhdGljIHN0cnVjdCBvcF9taXBzX21vZGVsICptb2RlbDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX2xvb25nc29uMi5jIGIvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX2xvb25nc29uMi5jCmluZGV4IDQ3NWZmNDYuLjI5ZTIzMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYworKysgYi9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCiAgKiBBdXRob3I6IFlhbmh1YSA8eWFuaEBsZW1vdGUuY29tPgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6akBsZW1vdGUuY29tPgorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiA8d3V6aGFuZ2ppbkBnbWFpbC5jb20+CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTQ3LDggKzQ3LDYgQEAKIAlpbnQgY250MV9lbmFibGVkLCBjbnQyX2VuYWJsZWQ7CiB9IHJlZzsKIAotREVGSU5FX1NQSU5MT0NLKHNhbXBsZV9sb2NrKTsKLQogc3RhdGljIGNoYXIgKm9wcm9maWQgPSAiTG9vbmdzb25QZXJmIjsKIHN0YXRpYyBpcnFyZXR1cm5fdCBsb29uZ3NvbjJfcGVyZmNvdW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIC8qIENvbXB1dGUgYWxsIG9mIHRoZSByZWdpc3RlcnMgaW4gcHJlcGFyYXRpb24gZm9yIGVuYWJsaW5nIHByb2ZpbGluZy4gICovCkBAIC0xMTUsNyArMTEzLDYgQEAKIAl1aW50NjRfdCBjb3VudGVyLCBjb3VudGVyMSwgY291bnRlcjI7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKIAlpbnQgZW5hYmxlZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoKIAkgKiBMT09OR1NPTjIgZGVmaW5lcyB0d28gMzItYml0IHBlcmZvcm1hbmNlIGNvdW50ZXJzLgpAQCAtMTM2LDggKzEzMyw2IEBACiAJY291bnRlcjEgPSBjb3VudGVyICYgMHhmZmZmZmZmZjsKIAljb3VudGVyMiA9IGNvdW50ZXIgPj4gMzI7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2FtcGxlX2xvY2ssIGZsYWdzKTsKLQogCWlmIChjb3VudGVyMSAmIExPT05HU09OMl9QRVJGQ05UX09WRVJGTE9XKSB7CiAJCWlmIChyZWcuY250MV9lbmFibGVkKQogCQkJb3Byb2ZpbGVfYWRkX3NhbXBsZShyZWdzLCAwKTsKQEAgLTE0OSw4ICsxNDQsNiBAQAogCQljb3VudGVyMiA9IHJlZy5yZXNldF9jb3VudGVyMjsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYW1wbGVfbG9jaywgZmxhZ3MpOwotCiAJd3JpdGVfYzBfcGVyZmNudCgoY291bnRlcjIgPDwgMzIpIHwgY291bnRlcjEpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9maXh1cC1jb2JhbHQuYyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtY29iYWx0LmMKaW5kZXggOTU1M2IxNC4uYWNhY2QxNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9maXh1cC1jb2JhbHQuYworKysgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWNvYmFsdC5jCkBAIC01MSw2ICs1MSw2NyBAQAogREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCBQQ0lfREVWSUNFX0lEX01BUlZFTExfR1Q2NDExMSwKIAkgcXViZV9yYXFfZ2FsaWxlb19lYXJseV9maXh1cCk7CiAKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBjb2JhbHRfbGVnYWN5X2lkZV9yZXNvdXJjZV9maXh1cChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkJICAgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzKQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKilkZXYtPnN5c2RhdGE7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBob3NlLT5pb19vZmZzZXQ7CisJc3RydWN0IHJlc291cmNlIG9yaWcgPSAqcmVzOworCisJaWYgKCEocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHx8CisJICAgICEocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfUENJX0ZJWEVEKSkKKwkJcmV0dXJuOworCisJcmVzLT5zdGFydCAtPSBvZmZzZXQ7CisJcmVzLT5lbmQgLT0gb2Zmc2V0OworCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiY29udmVydGVkIGxlZ2FjeSAlcFIgdG8gYnVzICVwUlxuIiwKKwkJICAgJm9yaWcsIHJlcyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBjb2JhbHRfbGVnYWN5X2lkZV9maXh1cChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXUzMiBjbGFzczsKKwl1OCBwcm9naWY7CisKKwkvKgorCSAqIElmIHRoZSBJREUgY29udHJvbGxlciBpcyBpbiBsZWdhY3kgbW9kZSwgcGNpX3NldHVwX2RldmljZSgpIGZpbGxzIGluCisJICogdGhlIHJlc291cmNlcyB3aXRoIHRoZSBsZWdhY3kgYWRkcmVzc2VzIHRoYXQgbm9ybWFsbHkgYXBwZWFyIG9uIHRoZQorCSAqIFBDSSBidXMsIGp1c3QgYXMgaWYgd2UgaGFkIHJlYWQgdGhlbSBmcm9tIGEgQkFSLgorCSAqCisJICogSG93ZXZlciwgd2l0aCB0aGUgR1QtNjQxMTEsIHRob3NlIGxlZ2FjeSBhZGRyZXNzZXMsIGUuZy4sIDB4MWYwLAorCSAqIHdpbGwgbmV2ZXIgYXBwZWFyIG9uIHRoZSBQQ0kgYnVzIGJlY2F1c2UgaXQgY29udmVydHMgbWVtb3J5IGFjY2Vzc2VzCisJICogaW4gdGhlIFBDSSBJL08gcmVnaW9uICh3aGljaCBpcyBuZXZlciBhdCBhZGRyZXNzIHplcm8pIGludG8gSS9PIHBvcnQKKwkgKiBhY2Nlc3NlcyB3aXRoIG5vIGFkZHJlc3MgdHJhbnNsYXRpb24uCisJICoKKwkgKiBGb3IgZXhhbXBsZSwgaWYgR1RfREVGX1BDSTBfSU9fQkFTRSBpcyAweDEwMDAwMDAwLCBhIGxvYWQgb3Igc3RvcmUKKwkgKiB0byBwaHlzaWNhbCBhZGRyZXNzIDB4MTAwMDAxZjAgd2lsbCBiZWNvbWUgYSBQQ0kgYWNjZXNzIHRvIEkvTyBwb3J0CisJICogMHgxMDAwMDFmMC4gIFRoZXJlJ3Mgbm8gd2F5IHRvIGdlbmVyYXRlIGFuIGFjY2VzcyB0byBJL08gcG9ydCAweDFmMCwKKwkgKiBidXQgdGhlIFZUODJDNTg2IElERSBjb250cm9sbGVyIGRvZXMgcmVzcG9uZCBhdCAweDEwMDAwMWYwIGJlY2F1c2UKKwkgKiBpdCBvbmx5IGRlY29kZXMgdGhlIGxvdyAyNCBiaXRzIG9mIHRoZSBhZGRyZXNzLgorCSAqCisJICogV2hlbiB0aGlzIHF1aXJrIHJ1bnMsIHRoZSBwY2lfZGV2IHJlc291cmNlcyBzaG91bGQgY29udGFpbiBidXMKKwkgKiBhZGRyZXNzZXMsIG5vdCBMaW51eCBJL08gcG9ydCBudW1iZXJzLCBzbyBjb252ZXJ0IGxlZ2FjeSBhZGRyZXNzZXMKKwkgKiBsaWtlIDB4MWYwIHRvIGJ1cyBhZGRyZXNzZXMgbGlrZSAweDEwMDAwMWYwLiAgTGF0ZXIsIHdlJ2xsIGNvbnZlcnQKKwkgKiB0aGVtIGJhY2sgd2l0aCBwY2liaW9zX2ZpeHVwX2J1cygpIG9yIHBjaWJpb3NfYnVzX3RvX3Jlc291cmNlKCkuCisJICovCisJY2xhc3MgPSBkZXYtPmNsYXNzID4+IDg7CisJaWYgKGNsYXNzICE9IFBDSV9DTEFTU19TVE9SQUdFX0lERSkKKwkJcmV0dXJuOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfQ0xBU1NfUFJPRywgJnByb2dpZik7CisJaWYgKChwcm9naWYgJiAxKSA9PSAwKSB7CisJCWNvYmFsdF9sZWdhY3lfaWRlX3Jlc291cmNlX2ZpeHVwKGRldiwgJmRldi0+cmVzb3VyY2VbMF0pOworCQljb2JhbHRfbGVnYWN5X2lkZV9yZXNvdXJjZV9maXh1cChkZXYsICZkZXYtPnJlc291cmNlWzFdKTsKKwl9CisJaWYgKChwcm9naWYgJiA0KSA9PSAwKSB7CisJCWNvYmFsdF9sZWdhY3lfaWRlX3Jlc291cmNlX2ZpeHVwKGRldiwgJmRldi0+cmVzb3VyY2VbMl0pOworCQljb2JhbHRfbGVnYWN5X2lkZV9yZXNvdXJjZV9maXh1cChkZXYsICZkZXYtPnJlc291cmNlWzNdKTsKKwl9Cit9CisKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzEsCisJICBjb2JhbHRfbGVnYWN5X2lkZV9maXh1cCk7CisKIHN0YXRpYyB2b2lkIHF1YmVfcmFxX3ZpYV9ibUlERV9maXh1cChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXVuc2lnbmVkIHNob3J0IGNmZ3dvcmQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWxlbW90ZTJmLmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWxlbW90ZTJmLmMKaW5kZXggY2FmMmVkZS4uNGI5NzY4ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9maXh1cC1sZW1vdGUyZi5jCisrKyBiL2FyY2gvbWlwcy9wY2kvZml4dXAtbGVtb3RlMmYuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAKIAkvKiBTZXJpYWwgc2hvcnQgZGV0ZWN0IGVuYWJsZSAqLwogCV9yZG1zcihVU0JfTVNSX1JFRyhVU0JfQ09ORklHKSwgJmhpLCAmbG8pOwotCV93cm1zcihVU0JfTVNSX1JFRyhVU0JfQ09ORklHKSwgKDEgPDwgMSkgfCAoMSA8PCAyKSB8ICgxIDw8IDMpLCBsbyk7CisJX3dybXNyKFVTQl9NU1JfUkVHKFVTQl9DT05GSUcpLCAoMSA8PCAxKSB8ICgxIDw8IDMpLCBsbyk7CiAKIAkvKiBzZXR0aW5nIHRoZSBVU0IyLjAgbWljcm8gZnJhbWUgbGVuZ3RoICovCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfRUhDSV9GTEFESl9SRUcsIDB4MjAwMCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL29wcy1sb29uZ3NvbjIuYyBiL2FyY2gvbWlwcy9wY2kvb3BzLWxvb25nc29uMi5jCmluZGV4IGFhNWQzZGEuLjJiYjQwNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvb3BzLWxvb25nc29uMi5jCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLWxvb25nc29uMi5jCkBAIC0xLDEzICsxLDExIEBACiAvKgotICogZnVsb29uZzJlIHNwZWNpZmljIFBDSSBzdXBwb3J0LgotICoKICAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwNCAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KICAqCUFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKglBdXRob3JzOiBDYXJzdGVuIExhbmdnYWFyZCA8Y2Fyc3RlbmxAbWlwcy5jb20+CiAgKgkJIE1hY2llaiBXLiBSb3p5Y2tpIDxtYWNyb0BtaXBzLmNvbT4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1empAbGVtb3RlLmNvbT4KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4gPHd1emhhbmdqaW5AZ21haWwuY29tPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL29wcy1wbWNtc3AuYyBiL2FyY2gvbWlwcy9wY2kvb3BzLXBtY21zcC5jCmluZGV4IDMyNTQ4YjUuLjA0YjMxNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvb3BzLXBtY21zcC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLXBtY21zcC5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAmJiBQQ0lfQ09VTlRFUlMgKi8KIAotREVGSU5FX1NQSU5MT0NLKGJwY2lfbG9jayk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJwY2lfbG9jayk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTQ3eHguYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTQ3eHguYwppbmRleCBiZWE5YjZjLi40NTVmOGU1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS1iY200N3h4LmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktYmNtNDd4eC5jCkBAIC01Nyw0ICs1NywzIEBACiAJZGV2LT5pcnEgPSByZXM7CiAJcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLW9jdGVvbi5jIGIvYXJjaC9taXBzL3BjaS9wY2ktb2N0ZW9uLmMKaW5kZXggOWNiMGM4MC4uZDI0OGI3MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2ktb2N0ZW9uLmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktb2N0ZW9uLmMKQEAgLTIwOSwxNiArMjA5LDE0IEBACiAJY2FzZSBDVk1YX0JPQVJEX1RZUEVfTkFPMzg6CiAJCS8qIFRoaXMgaXMgcmVhbGx5IHRoZSBOQUMzOCAqLwogCQlyZXR1cm4gIkFBQUFBREFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIjsKLQljYXNlIENWTVhfQk9BUkRfVFlQRV9USFVOREVSOgotCQlyZXR1cm4gIiI7Ci0JY2FzZSBDVk1YX0JPQVJEX1RZUEVfRUJIMzAwMDoKLQkJcmV0dXJuICIiOwogCWNhc2UgQ1ZNWF9CT0FSRF9UWVBFX0VCSDMxMDA6CiAJY2FzZSBDVk1YX0JPQVJEX1RZUEVfQ04zMDEwX0VWQl9IUzU6CiAJY2FzZSBDVk1YX0JPQVJEX1RZUEVfQ04zMDA1X0VWQl9IUzU6CiAJCXJldHVybiAiQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiOwogCWNhc2UgQ1ZNWF9CT0FSRF9UWVBFX0JCR1dfUkVGOgogCQlyZXR1cm4gIkFBQkNEIjsKKwljYXNlIENWTVhfQk9BUkRfVFlQRV9USFVOREVSOgorCWNhc2UgQ1ZNWF9CT0FSRF9UWVBFX0VCSDMwMDA6CiAJZGVmYXVsdDoKIAkJcmV0dXJuICIiOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLmMgYi9hcmNoL21pcHMvcGNpL3BjaS5jCmluZGV4IDlhMTFjMjIuLjM4YmMyODAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2kuYwpAQCAtNDksOCArNDksOCBAQAogICogYnV0IHdlIHdhbnQgdG8gdHJ5IHRvIGF2b2lkIGFsbG9jYXRpbmcgYXQgMHgyOTAwLTB4MmJmZgogICogd2hpY2ggbWlnaHQgaGF2ZSBiZSBtaXJyb3JlZCBhdCAweDAxMDAtMHgwM2ZmLi4KICAqLwotdm9pZAotcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKK3Jlc291cmNlX3NpemVfdAorcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJICAgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRhdGE7CkBAIC03Myw3ICs3Myw3IEBACiAJCQlzdGFydCA9IFBDSUJJT1NfTUlOX01FTSArIGhvc2UtPm1lbV9yZXNvdXJjZS0+c3RhcnQ7CiAJfQogCi0JcmVzLT5zdGFydCA9IHN0YXJ0OworCXJldHVybiBzdGFydDsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaWJpb3Nfc2NhbmJ1cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCkBAIC0yNTEsOCArMjUxLDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgUENJX05VTV9SRVNPVVJDRVM7IGkrKykgewogCQlpZiAoIWRldi0+cmVzb3VyY2VbaV0uc3RhcnQpCiAJCQljb250aW51ZTsKLQkJaWYgKGRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgJiBJT1JFU09VUkNFX1BDSV9GSVhFRCkKLQkJCWNvbnRpbnVlOwogCQlpZiAoZGV2LT5yZXNvdXJjZVtpXS5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCiAJCQlvZmZzZXQgPSBob3NlLT5pb19vZmZzZXQ7CiAJCWVsc2UgaWYgKGRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX2lycV9jaWMuYyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX2lycV9jaWMuYwppbmRleCA1MTc1MzU3Li45NGM5YzJjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9pcnFfY2ljLmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfaXJxX2NpYy5jCkBAIC0xMzEsNCArMTMxLDMgQEAKIAllbHNlCiAJCWRvX0lSUShmZnMocGVuZGluZykgKyBpbnRiYXNlIC0gMSk7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3Byb20uYyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3Byb20uYwppbmRleCBjMzE3YTM2Li5kYjk4ZDg3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9wcm9tLmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfcHJvbS5jCkBAIC0zMDMsMTIgKzMwMyw2IEBACiB9CiAKIC8qIFBST00gY29tbWFuZGxpbmUgZnVuY3Rpb25zICovCi1jaGFyICpwcm9tX2dldGNtZGxpbmUodm9pZCkKLXsKLQlyZXR1cm4gJihhcmNzX2NtZGxpbmVbMF0pOwotfQotRVhQT1JUX1NZTUJPTChwcm9tX2dldGNtZGxpbmUpOwotCiB2b2lkICBfX2luaXQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCkKIHsKIAljaGFyICpjcDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2F0bWVsX3JlYWRfZWVwcm9tLmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9hdG1lbF9yZWFkX2VlcHJvbS5jCmluZGV4IGZjOTkwY2IuLmQ2ZjhiZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2F0bWVsX3JlYWRfZWVwcm9tLmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvYXRtZWxfcmVhZF9lZXByb20uYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAKIAlpZiAoYWNrKSB7CiAJCWRvX2lkbGUoKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZWFkaW5nIHRoZSBBdG1lbCAyNEMzMi8yNEM2NCBFRVBST00gXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZWFkaW5nIHRoZSBBdG1lbCAyNEMzMi8yNEM2NCBFRVBST01cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9hdG1lbF9yZWFkX2VlcHJvbS5oIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvYXRtZWxfcmVhZF9lZXByb20uaAppbmRleCBhMzEyODgzLi5kNmM3ZWM0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9hdG1lbF9yZWFkX2VlcHJvbS5oCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2F0bWVsX3JlYWRfZWVwcm9tLmgKQEAgLTY1LDQgKzY1LDMgQEAKIGNvbnN0IGNoYXIgcnRzID0gVElPQ01fUlRTOwogY29uc3QgY2hhciBkdHIgPSBUSU9DTV9EVFI7CiBpbnQgZmQ7Ci0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2h0LmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9odC5jCmluZGV4IDY3ODM4OGYuLmZkMjI1OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL2h0LmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvaHQuYwpAQCAtMzQ1LDE0ICszNDUsMTMgQEAKICAgICAgICAgcmV0dXJuIHBjaWJpb3NfZW5hYmxlX3Jlc291cmNlcyhkZXYpOwogfQogCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkYXRhOworCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKICAgICAgICAgaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7Ci0gICAgICAgICAgICAgICAgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKLQogICAgICAgICAgICAgICAgIC8qIFdlIG5lZWQgdG8gYXZvaWQgY29sbGlzaW9ucyB3aXRoIGBtaXJyb3JlZCcgVkdBIHBvcnRzCiAgICAgICAgICAgICAgICAgICAgYW5kIG90aGVyIHN0cmFuZ2UgSVNBIGhhcmR3YXJlLCBzbyB3ZSBhbHdheXMgd2FudCB0aGUKICAgICAgICAgICAgICAgICAgICBhZGRyZXNzZXMga2lsb2J5dGUgYWxpZ25lZC4gICovCkBAIC0zNjMsOCArMzYyLDkgQEAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBzdGFydCA9IChzdGFydCArIDEwMjQgLSAxKSAmIH4oMTAyNCAtIDEpOwotICAgICAgICAgICAgICAgIHJlcy0+c3RhcnQgPSBzdGFydDsKICAgICAgICAgfQorCisJcmV0dXJuIHN0YXJ0OwogfQogCiBzdHJ1Y3QgcGNpX29wcyB0aXRhbl9wY2lfb3BzID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc21wLmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zbXAuYwppbmRleCAzMjZmZTdhLi5lZmM5ZTg4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zbXAuYworKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zbXAuYwpAQCAtOCw3ICs4LDcgQEAKIAogI2RlZmluZSBMQVVOQ0hTVEFDS19TSVpFIDI1NgogCi1zdGF0aWMgX19jcHVpbml0ZGF0YSBERUZJTkVfU1BJTkxPQ0sobGF1bmNoX2xvY2spOworc3RhdGljIF9fY3B1aW5pdGRhdGEgYXJjaF9zcGlubG9ja190IGxhdW5jaF9sb2NrID0gX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRDsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2Vjb25kYXJ5X3NwIF9fY3B1aW5pdGRhdGE7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzZWNvbmRhcnlfZ3AgX19jcHVpbml0ZGF0YTsKQEAgLTIwLDcgKzIwLDcgQEAKIHsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCi0Jd2hpbGUgKHNwaW5faXNfbG9ja2VkKCZsYXVuY2hfbG9jaykpOworCXdoaWxlIChhcmNoX3NwaW5faXNfbG9ja2VkKCZsYXVuY2hfbG9jaykpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJIgltb3ZlCSRzcCwgJTAJCVxuIgpAQCAtMzcsNyArMzcsNyBAQAogICovCiB2b2lkIF9faW5pdCBwcm9tX2dyYWJfc2Vjb25kYXJ5KHZvaWQpCiB7Ci0Jc3Bpbl9sb2NrKCZsYXVuY2hfbG9jayk7CisJYXJjaF9zcGluX2xvY2soJmxhdW5jaF9sb2NrKTsKIAogCXBtb25fY3B1c3RhcnQoMSwgJnByb21fc21wX2Jvb3RzdHJhcCwKIAkgICAgICAgICAgICAgIGxhdW5jaHN0YWNrICsgTEFVTkNIU1RBQ0tfU0laRSwgMCk7CkBAIC0xMzgsNyArMTM4LDcgQEAKIAlzZWNvbmRhcnlfc3AgPSBzcDsKIAlzZWNvbmRhcnlfZ3AgPSBncDsKIAotCXNwaW5fdW5sb2NrKCZsYXVuY2hfbG9jayk7CisJYXJjaF9zcGluX3VubG9jaygmbGF1bmNoX2xvY2spOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VyL2NwdS5jIGIvYXJjaC9taXBzL3Bvd2VyL2NwdS5jCmluZGV4IDc5OTVkZjQuLjI2YTZlZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wb3dlci9jcHUuYworKysgYi9hcmNoL21pcHMvcG93ZXIvY3B1LmMKQEAgLTMsOSArMyw5IEBACiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTHYyCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuICYgSW5zaXRpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCiAgKiBBdXRob3I6IEh1IEhvbmdiaW5nIDxodWhiQGxlbW90ZS5jb20+Ci0gKiAgICAgICAgIFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiAgICAgICAgIFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqLwogI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VyL2hpYmVybmF0ZS5TIGIvYXJjaC9taXBzL3Bvd2VyL2hpYmVybmF0ZS5TCmluZGV4IDBjZjg2ZmIuLmRiYjVjN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wb3dlci9oaWJlcm5hdGUuUworKysgYi9hcmNoL21pcHMvcG93ZXIvaGliZXJuYXRlLlMKQEAgLTMsOSArMyw5IEBACiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTHYyCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuICYgSW5zaXRpdHV0ZSBvZiBDb21wdXRpbmcgVGVjaG5vbG9neQorICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSBJbmMuCiAgKiBBdXRob3I6IEh1IEhvbmdiaW5nIDxodWhiQGxlbW90ZS5jb20+Ci0gKiAgICAgICAgIFd1IFpoYW5namluIDx3dXpqQGxlbW90ZS5jb20+CisgKiAgICAgICAgIFd1IFpoYW5namluIDx3dXpoYW5namluQGdtYWlsLmNvbT4KICAqLwogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWNfZGV2aWNlcy5jIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2RldmljZXMuYwppbmRleCA2YTg4MjE5Li4yMTc0MjQyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWNfZGV2aWNlcy5jCisrKyBiL2FyY2gvbWlwcy9wb3dlcnR2L2FzaWMvYXNpY19kZXZpY2VzLmMKQEAgLTM0MCwxMCArMzQwLDYgQEAKIAogCXN3aXRjaCAoYXNpYykgewogCWNhc2UgQVNJQ19aRVVTOgotCQlmc191cGRhdGUoMHgwMDAwLCAweDExLCAweDAyLCAwKTsKLQkJYmNtMV91c2IyX2N0bCA9IDB4ODAzOwotCQlicmVhazsKLQogCWNhc2UgQVNJQ19DUk9OVVM6CiAJY2FzZSBBU0lDX0NST05VU0xJVEU6CiAJCWZzX3VwZGF0ZSgweDAwMDAsIDB4MTEsIDB4MDIsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2ludC5jIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2ludC5jCmluZGV4IDgwYjJlZWQuLjMyNWZhYjk2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXJ0di9hc2ljL2FzaWNfaW50LmMKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvYXNpYy9hc2ljX2ludC5jCkBAIC0zOSwyMSArMzksMjEgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXBvd2VydHYvYXNpY19yZWdzLmg+CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYXNpY19pcnFfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhhc2ljX2lycV9sb2NrKTsKIAogc3RhdGljIGlubGluZSBpbnQgZ2V0X2ludCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGlycTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhc2ljX2lycV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhc2ljX2lycV9sb2NrLCBmbGFncyk7CiAKIAlpcnEgPSAoYXNpY19yZWFkKGludF9pbnRfc2NhbikgPj4gNCkgLSAxOwogCiAJaWYgKGlycSA9PSAwIHx8IGlycSA+PSBOUl9JUlFTKQogCQlpcnEgPSAtMTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzaWNfaXJxX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXNpY19pcnFfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIGlycTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wb3dlcnR2L3Bvd2VydHZfc2V0dXAuYyBiL2FyY2gvbWlwcy9wb3dlcnR2L3Bvd2VydHZfc2V0dXAuYwppbmRleCA2OThiMWVhLi5hZjJjYWUwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG93ZXJ0di9wb3dlcnR2X3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3Bvd2VydHYvcG93ZXJ0dl9zZXR1cC5jCkBAIC0yNSwxNCArMjUsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KLQogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKwogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvZ2VuZXJpYy5oPgogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vYXNtLmg+CiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSAicmVzZXQuaCIKQEAgLTQxLDI2ICs0MiwyMSBAQAogCiAvKgogICogTWFjcm9zIGZvciBsb2FkaW5nIGFkZHJlc3NlcyBhbmQgc3RvcmluZyByZWdpc3RlcnM6Ci0gKiBQVFJfTEEJTG9hZCB0aGUgYWRkcmVzcyBpbnRvIGEgcmVnaXN0ZXIKLSAqIExPTkdfUwlTdG9yZSB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgZ2l2ZW4gcmVnaXN0ZXIuCi0gKiBMT05HX0wJTG9hZCB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgZ2l2ZW4gcmVnaXN0ZXIKLSAqIFBUUl9BRERJVQlBZGQgYSBjb25zdGFudCB2YWx1ZSB0byBhIHJlZ2lzdGVyIHVzZWQgYXMgYSBwb2ludGVyCisgKiBMT05HX0xfCVN0cmluZ2lmaWVkIHZlcnNpb24gb2YgTE9OR19MIGZvciB1c2UgaW4gYXNtKCkgc3RhdGVtZW50CisgKiBMT05HX1NfCVN0cmluZ2lmaWVkIHZlcnNpb24gb2YgTE9OR19TIGZvciB1c2UgaW4gYXNtKCkgc3RhdGVtZW50CisgKiBQVFJfTEFfCVN0cmluZ2lmaWVkIHZlcnNpb24gb2YgUFRSX0xBIGZvciB1c2UgaW4gYXNtKCkgc3RhdGVtZW50CiAgKiBSRUdfU0laRQlOdW1iZXIgb2YgOC1iaXQgYnl0ZXMgaW4gYSBmdWxsIHdpZHRoIHJlZ2lzdGVyCiAgKi8KKyNkZWZpbmUgTE9OR19MXwkJVkFMKExPTkdfTCkgIiAiCisjZGVmaW5lIExPTkdfU18JCVZBTChMT05HX1MpICIgIgorI2RlZmluZSBQVFJfTEFfCQlWQUwoUFRSX0xBKSAiICIKKwogI2lmZGVmIENPTkZJR182NEJJVAogI3dhcm5pbmcgVE9ETzogNjQtYml0IGNvZGUgbmVlZHMgdG8gYmUgdmVyaWZpZWQKLSNkZWZpbmUgUFRSX0xBCQkiZGxhCSIKLSNkZWZpbmUgTE9OR19TCQkic2QJIgotI2RlZmluZSBMT05HX0wJCSJsZAkiCi0jZGVmaW5lIFBUUl9BRERJVQkiZGFkZGl1CSIKICNkZWZpbmUgUkVHX1NJWkUJIjgiCQkvKiBJbiBieXRlcyAqLwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfMzJCSVQKLSNkZWZpbmUgUFRSX0xBCQkibGEJIgotI2RlZmluZSBMT05HX1MJCSJzdwkiCi0jZGVmaW5lIExPTkdfTAkJImx3CSIKLSNkZWZpbmUgUFRSX0FERElVCSJhZGRpdQkiCiAjZGVmaW5lIFJFR19TSVpFCSI0IgkJLyogSW4gYnl0ZXMgKi8KICNlbmRpZgogCkBAIC0xMTMsOSArMTA5LDkgQEAKIAkJICogc3RydWN0dXJlLiAqLwogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCQkiLnNldAlub2F0XG4iCi0JCQlMT05HX1MJCSIkYXQsICVbYXRdXG4iCi0JCQlMT05HX1MJCSIkMiwgJVt2MF1cbiIKLQkJCUxPTkdfUwkJIiQzLCAlW3YxXVxuIgorCQkJTE9OR19TXwkJIiRhdCwgJVthdF1cbiIKKwkJCUxPTkdfU18JCSIkMiwgJVt2MF1cbiIKKwkJCUxPTkdfU18JCSIkMywgJVt2MV1cbiIKIAkJOgogCQkJW2F0XSAiPW0iIChhdCksCiAJCQlbdjBdICI9bSIgKHYwKSwKQEAgLTEyOSw1NCArMTI1LDU0IEBACiAJCQkibW92ZQkJJGF0LCAlW3B0X3JlZ3NdXG4iCiAKIAkJCS8qIEFyZ3VtZW50IHJlZ2lzdGVycyAqLwotCQkJTE9OR19TCQkiJDQsICIgVkFMKFBUX1I0KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQ1LCAiIFZBTChQVF9SNSkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkNiwgIiBWQUwoUFRfUjYpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDcsICIgVkFMKFBUX1I3KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkNCwgIiBWQUwoUFRfUjQpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQ1LCAiIFZBTChQVF9SNSkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDYsICIgVkFMKFBUX1I2KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkNywgIiBWQUwoUFRfUjcpICIoJGF0KVxuIgogCiAJCQkvKiBUZW1wb3JhcnkgcmVncyAqLwotCQkJTE9OR19TCQkiJDgsICIgVkFMKFBUX1I4KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQ5LCAiIFZBTChQVF9SOSkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMTAsICIgVkFMKFBUX1IxMCkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMTEsICIgVkFMKFBUX1IxMSkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMTIsICIgVkFMKFBUX1IxMikgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMTMsICIgVkFMKFBUX1IxMykgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMTQsICIgVkFMKFBUX1IxNCkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkMTUsICIgVkFMKFBUX1IxNSkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDgsICIgVkFMKFBUX1I4KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkOSwgIiBWQUwoUFRfUjkpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQxMCwgIiBWQUwoUFRfUjEwKSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMTEsICIgVkFMKFBUX1IxMSkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDEyLCAiIFZBTChQVF9SMTIpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQxMywgIiBWQUwoUFRfUjEzKSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMTQsICIgVkFMKFBUX1IxNCkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDE1LCAiIFZBTChQVF9SMTUpICIoJGF0KVxuIgogCiAJCQkvKiAiU2F2ZWQiIHJlZ2lzdGVycyAqLwotCQkJTE9OR19TCQkiJDE2LCAiIFZBTChQVF9SMTYpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDE3LCAiIFZBTChQVF9SMTcpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDE4LCAiIFZBTChQVF9SMTgpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDE5LCAiIFZBTChQVF9SMTkpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDIwLCAiIFZBTChQVF9SMjApICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDIxLCAiIFZBTChQVF9SMjEpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDIyLCAiIFZBTChQVF9SMjIpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDIzLCAiIFZBTChQVF9SMjMpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQxNiwgIiBWQUwoUFRfUjE2KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMTcsICIgVkFMKFBUX1IxNykgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDE4LCAiIFZBTChQVF9SMTgpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQxOSwgIiBWQUwoUFRfUjE5KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMjAsICIgVkFMKFBUX1IyMCkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDIxLCAiIFZBTChQVF9SMjEpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQyMiwgIiBWQUwoUFRfUjIyKSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMjMsICIgVkFMKFBUX1IyMykgIigkYXQpXG4iCiAKIAkJCS8qIEFkZCdsIHRlbXAgcmVncyAqLwotCQkJTE9OR19TCQkiJDI0LCAiIFZBTChQVF9SMjQpICIoJGF0KVxuIgotCQkJTE9OR19TCQkiJDI1LCAiIFZBTChQVF9SMjUpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiQyNCwgIiBWQUwoUFRfUjI0KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMjUsICIgVkFMKFBUX1IyNSkgIigkYXQpXG4iCiAKIAkJCS8qIEtlcm5lbCB0ZW1wIHJlZ3MgKi8KLQkJCUxPTkdfUwkJIiQyNiwgIiBWQUwoUFRfUjI2KSAiKCRhdClcbiIKLQkJCUxPTkdfUwkJIiQyNywgIiBWQUwoUFRfUjI3KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkMjYsICIgVkFMKFBUX1IyNikgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJDI3LCAiIFZBTChQVF9SMjcpICIoJGF0KVxuIgogCiAJCQkvKiBHbG9iYWwgcG9pbnRlciwgc3RhY2sgcG9pbnRlciwgZnJhbWUgcG9pbnRlciBhbmQKIAkJCSAqIHJldHVybiBhZGRyZXNzICovCi0JCQlMT05HX1MJCSIkZ3AsICIgVkFMKFBUX1IyOCkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkc3AsICIgVkFMKFBUX1IyOSkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkZnAsICIgVkFMKFBUX1IzMCkgIigkYXQpXG4iCi0JCQlMT05HX1MJCSIkcmEsICIgVkFMKFBUX1IzMSkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJGdwLCAiIFZBTChQVF9SMjgpICIoJGF0KVxuIgorCQkJTE9OR19TXwkJIiRzcCwgIiBWQUwoUFRfUjI5KSAiKCRhdClcbiIKKwkJCUxPTkdfU18JCSIkZnAsICIgVkFMKFBUX1IzMCkgIigkYXQpXG4iCisJCQlMT05HX1NfCQkiJHJhLCAiIFZBTChQVF9SMzEpICIoJGF0KVxuIgogCiAJCQkvKiBOb3cgd2UgY2FuIGdldCB0aGUgJGF0IGFuZCB2MCByZWdpc3RlcnMgYmFjayBhbmQKIAkJCSAqIHN0b3JlIHRoZW0gKi8KLQkJCUxPTkdfTAkJIiQ4LCAlW2F0XVxuIgotCQkJTE9OR19TCQkiJDgsICIgVkFMKFBUX1IxKSAiKCRhdClcbiIKLQkJCUxPTkdfTAkJIiQ4LCAlW3YwXVxuIgotCQkJTE9OR19TCQkiJDgsICIgVkFMKFBUX1IyKSAiKCRhdClcbiIKLQkJCUxPTkdfTAkJIiQ4LCAlW3YxXVxuIgotCQkJTE9OR19TCQkiJDgsICIgVkFMKFBUX1IzKSAiKCRhdClcbiIKKwkJCUxPTkdfTF8JCSIkOCwgJVthdF1cbiIKKwkJCUxPTkdfU18JCSIkOCwgIiBWQUwoUFRfUjEpICIoJGF0KVxuIgorCQkJTE9OR19MXwkJIiQ4LCAlW3YwXVxuIgorCQkJTE9OR19TXwkJIiQ4LCAiIFZBTChQVF9SMikgIigkYXQpXG4iCisJCQlMT05HX0xfCQkiJDgsICVbdjFdXG4iCisJCQlMT05HX1NfCQkiJDgsICIgVkFMKFBUX1IzKSAiKCRhdClcbiIKIAkJOgogCQk6CiAJCQlbYXRdICJtIiAoYXQpLApAQCAtMTkxLDggKzE4Nyw4IEBACiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJCSIuc2V0CW5vYXRcbiIKIAkJIjE6XG4iCi0JCQlQVFJfTEEJCSIkYXQsIDFiXG4iCi0JCQlMT05HX1MJCSIkYXQsICVbY3AwX2VwY11cbiIKKwkJCVBUUl9MQV8JCSIkYXQsIDFiXG4iCisJCQlMT05HX1NfCQkiJGF0LCAlW2NwMF9lcGNdXG4iCiAJCToKIAkJCVtjcDBfZXBjXSAiPW0iIChteV9yZWdzLmNwMF9lcGMpCiAJCToKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWtsbnVtYS5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMKaW5kZXggZDljNzlkOC4uYzNkMzBhOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMKQEAgLTEzMyw0ICsxMzMsMyBAQAogCQlyZXR1cm4gKEtETV9UT19QSFlTKFBBR0VfQUxJR04oU1lNTU9OX1NUS19BRERSKG5hc2lkLCAwKSkpID4+CiAJCQkJCQkJCVBBR0VfU0hJRlQpOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1ubWkuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW5taS5jCmluZGV4IDZjNWE2MzAuLmJjNGZhOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW5taS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW5taS5jCkBAIC0xNywxMSArMTcsMTAgQEAKICNlbmRpZgogCiAjZGVmaW5lIENOT0RFSURfTk9ORSAoY25vZGVpZF90KS0xCi0jZGVmaW5lIGVudGVyX3BhbmljX21vZGUoKQlzcGluX2xvY2soJm5taV9sb2NrKQogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbWFjaHJlZ190OwogCi1ERUZJTkVfU1BJTkxPQ0sobm1pX2xvY2spOworc3RhdGljIGFyY2hfc3BpbmxvY2tfdCBubWlfbG9jayA9IF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQ7CiAKIC8qCiAgKiBMZXRzIHNlZSB3aGF0IGVsc2Ugd2UgbmVlZCB0byBkbyBoZXJlLiBTZXQgdXAgc3AsIGdwPwpAQCAtMTkzLDkgKzE5Miw5IEBACiAJYXRvbWljX2luYygmbm1pZWRfY3B1cyk7CiAjZW5kaWYKIAkvKgotCSAqIFVzZSBlbnRlcl9wYW5pY19tb2RlIHRvIGFsbG93IG9ubHkgMSBjcHUgdG8gcHJvY2VlZAorCSAqIE9ubHkgYWxsb3cgMSBjcHUgdG8gcHJvY2VlZAogCSAqLwotCWVudGVyX3BhbmljX21vZGUoKTsKKwlhcmNoX3NwaW5fbG9jaygmbm1pX2xvY2spOwogCiAjaWZkZWYgUkVBTF9OTUlfU0lHTkFMCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKaW5kZXggNWMyYmYxMS4uZDhiNjUyMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKQEAgLTUxMiwxMCArNTEyLDYgQEAKIAkJCQkibGV2ZWwiKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgQ1JJTUVfR0JFMF9JUlEgLi4uIENSSU1FX0dCRTNfSVJROgotCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAotCQkJCSZjcmltZV9lZGdlX2ludGVycnVwdCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwotCQkJYnJlYWs7CiAJCWNhc2UgQ1JJTUVfQ1BVRVJSX0lSUToKIAkJY2FzZSBDUklNRV9NRU1FUlJfSVJROgogCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLApAQCAtNTIzLDEyICs1MTksOSBAQAogCQkJCSJsZXZlbCIpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBDUklNRV9HQkUwX0lSUSAuLi4gQ1JJTUVfR0JFM19JUlE6CiAJCWNhc2UgQ1JJTUVfUkVfRU1QVFlfRV9JUlEgLi4uIENSSU1FX1JFX0lETEVfRV9JUlE6CiAJCWNhc2UgQ1JJTUVfU09GVDBfSVJRIC4uLiBDUklNRV9TT0ZUMl9JUlE6Ci0JCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsCi0JCQkJJmNyaW1lX2VkZ2VfaW50ZXJydXB0LCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7Ci0JCQlicmVhazsKLQogCQljYXNlIENSSU1FX1ZJQ0VfSVJROgogCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAogCQkJCSZjcmltZV9lZGdlX2ludGVycnVwdCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCmluZGV4IDQwNzAyNjguLjA2ZTI1ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYworKysgYi9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKQEAgLTczLDE0ICs3MywxNCBAQAogLyogU3RvcmUgdGhlIENQVSBpZCAobm90IHRoZSBsb2dpY2FsIG51bWJlcikgKi8KIGludCBiY20xNDgwX2lycV9vd25lcltCQ00xNDgwX05SX0lSUVNdOwogCi1ERUZJTkVfU1BJTkxPQ0soYmNtMTQ4MF9pbXJfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhiY20xNDgwX2ltcl9sb2NrKTsKIAogdm9pZCBiY20xNDgwX21hc2tfaXJxKGludCBjcHUsIGludCBpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgaGxfc3BhY2luZzsKIAl1NjQgY3VyX2ludHM7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOwogCWhsX3NwYWNpbmcgPSAwOwogCWlmICgoaXJxID49IEJDTTE0ODBfTlJfSVJRU19IQUxGKSAmJiAoaXJxIDw9IEJDTTE0ODBfTlJfSVJRUykpIHsKIAkJaGxfc3BhY2luZyA9IEJDTTE0ODBfSU1SX0hMX1NQQUNJTkc7CkBAIC04OSw3ICs4OSw3IEBACiAJY3VyX2ludHMgPSBfX19fcmF3X3JlYWRxKElPQUREUihBX0JDTTE0ODBfSU1SX01BUFBFUihjcHUpICsgUl9CQ00xNDgwX0lNUl9JTlRFUlJVUFRfTUFTS19IICsgaGxfc3BhY2luZykpOwogCWN1cl9pbnRzIHw9ICgoKHU2NCkgMSkgPDwgaXJxKTsKIAlfX19fcmF3X3dyaXRlcShjdXJfaW50cywgSU9BRERSKEFfQkNNMTQ4MF9JTVJfTUFQUEVSKGNwdSkgKyBSX0JDTTE0ODBfSU1SX0lOVEVSUlVQVF9NQVNLX0ggKyBobF9zcGFjaW5nKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20xNDgwX2ltcl9sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgYmNtMTQ4MF91bm1hc2tfaXJxKGludCBjcHUsIGludCBpcnEpCkBAIC05Nyw3ICs5Nyw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFncywgaGxfc3BhY2luZzsKIAl1NjQgY3VyX2ludHM7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOwogCWhsX3NwYWNpbmcgPSAwOwogCWlmICgoaXJxID49IEJDTTE0ODBfTlJfSVJRU19IQUxGKSAmJiAoaXJxIDw9IEJDTTE0ODBfTlJfSVJRUykpIHsKIAkJaGxfc3BhY2luZyA9IEJDTTE0ODBfSU1SX0hMX1NQQUNJTkc7CkBAIC0xMDYsNyArMTA2LDcgQEAKIAljdXJfaW50cyA9IF9fX19yYXdfcmVhZHEoSU9BRERSKEFfQkNNMTQ4MF9JTVJfTUFQUEVSKGNwdSkgKyBSX0JDTTE0ODBfSU1SX0lOVEVSUlVQVF9NQVNLX0ggKyBobF9zcGFjaW5nKSk7CiAJY3VyX2ludHMgJj0gfigoKHU2NCkgMSkgPDwgaXJxKTsKIAlfX19fcmF3X3dyaXRlcShjdXJfaW50cywgSU9BRERSKEFfQkNNMTQ4MF9JTVJfTUFQUEVSKGNwdSkgKyBSX0JDTTE0ODBfSU1SX0lOVEVSUlVQVF9NQVNLX0ggKyBobF9zcGFjaW5nKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20xNDgwX2ltcl9sb2NrLCBmbGFncyk7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC0xMjMsNyArMTIzLDcgQEAKIAljcHUgPSBjcHVfbG9naWNhbF9tYXAoaSk7CiAKIAkvKiBQcm90ZWN0IGFnYWluc3Qgb3RoZXIgYWZmaW5pdHkgY2hhbmdlcnMgYW5kIElNUiBtYW5pcHVsYXRpb24gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOwogCiAJLyogU3dpenpsZSBlYWNoIENQVSdzIElNUiAoYnV0IGxlYXZlIHRoZSBJUCBzZWxlY3Rpb24gYWxvbmUpICovCiAJb2xkX2NwdSA9IGJjbTE0ODBfaXJxX293bmVyW2lycV07CkBAIC0xNDgsNyArMTQ4LDcgQEAKIAkJCV9fX19yYXdfd3JpdGVxKGN1cl9pbnRzLCBJT0FERFIoQV9CQ00xNDgwX0lNUl9NQVBQRVIoY3B1KSArIFJfQkNNMTQ4MF9JTVJfSU5URVJSVVBUX01BU0tfSCArIChrKkJDTTE0ODBfSU1SX0hMX1NQQUNJTkcpKSk7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtMTQ4MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20xNDgwX2ltcl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jIGIvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKaW5kZXggMTVlYTc3OC4uZWQyNDUzZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKaW5kZXggNWU3ZjIwMS4uYWI0NGEyZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKQEAgLTcyLDIwICs3MiwyMCBAQAogLyogU3RvcmUgdGhlIENQVSBpZCAobm90IHRoZSBsb2dpY2FsIG51bWJlcikgKi8KIGludCBzYjEyNTBfaXJxX293bmVyW1NCMTI1MF9OUl9JUlFTXTsKIAotREVGSU5FX1NQSU5MT0NLKHNiMTI1MF9pbXJfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhzYjEyNTBfaW1yX2xvY2spOwogCiB2b2lkIHNiMTI1MF9tYXNrX2lycShpbnQgY3B1LCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTY0IGN1cl9pbnRzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmc2IxMjUwX2ltcl9sb2NrLCBmbGFncyk7CiAJY3VyX2ludHMgPSBfX19fcmF3X3JlYWRxKElPQUREUihBX0lNUl9NQVBQRVIoY3B1KSArCiAJCQkJCVJfSU1SX0lOVEVSUlVQVF9NQVNLKSk7CiAJY3VyX2ludHMgfD0gKCgodTY0KSAxKSA8PCBpcnEpOwogCV9fX19yYXdfd3JpdGVxKGN1cl9pbnRzLCBJT0FERFIoQV9JTVJfTUFQUEVSKGNwdSkgKwogCQkJCQlSX0lNUl9JTlRFUlJVUFRfTUFTSykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBzYjEyNTBfdW5tYXNrX2lycShpbnQgY3B1LCBpbnQgaXJxKQpAQCAtOTMsMTMgKzkzLDEzIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1NjQgY3VyX2ludHM7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2IxMjUwX2ltcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKIAljdXJfaW50cyA9IF9fX19yYXdfcmVhZHEoSU9BRERSKEFfSU1SX01BUFBFUihjcHUpICsKIAkJCQkJUl9JTVJfSU5URVJSVVBUX01BU0spKTsKIAljdXJfaW50cyAmPSB+KCgodTY0KSAxKSA8PCBpcnEpOwogCV9fX19yYXdfd3JpdGVxKGN1cl9pbnRzLCBJT0FERFIoQV9JTVJfTUFQUEVSKGNwdSkgKwogCQkJCQlSX0lNUl9JTlRFUlJVUFRfTUFTSykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTExNSw3ICsxMTUsNyBAQAogCWNwdSA9IGNwdV9sb2dpY2FsX21hcChpKTsKIAogCS8qIFByb3RlY3QgYWdhaW5zdCBvdGhlciBhZmZpbml0eSBjaGFuZ2VycyBhbmQgSU1SIG1hbmlwdWxhdGlvbiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZzYjEyNTBfaW1yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOwogCiAJLyogU3dpenpsZSBlYWNoIENQVSdzIElNUiAoYnV0IGxlYXZlIHRoZSBJUCBzZWxlY3Rpb24gYWxvbmUpICovCiAJb2xkX2NwdSA9IHNiMTI1MF9pcnFfb3duZXJbaXJxXTsKQEAgLTEzNyw3ICsxMzcsNyBAQAogCQlfX19fcmF3X3dyaXRlcShjdXJfaW50cywgSU9BRERSKEFfSU1SX01BUFBFUihjcHUpICsKIAkJCQkJUl9JTVJfSU5URVJSVVBUX01BU0spKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2IxMjUwX2ltcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNiMTI1MF9pbXJfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3JtMjAwLmMgYi9hcmNoL21pcHMvc25pL3JtMjAwLmMKaW5kZXggMzFlMjU4My4uOTBjNTU4ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9ybTIwMC5jCisrKyBiL2FyY2gvbWlwcy9zbmkvcm0yMDAuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAgKiByZWFkYi93cml0ZWIgdG8gYWNjZXNzIHRoZW0KICAqLwogCi1ERUZJTkVfU1BJTkxPQ0soc25pX3JtMjAwX2k4MjU5QV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHNuaV9ybTIwMF9pODI1OUFfbG9jayk7CiAjZGVmaW5lIFBJQ19DTUQgICAgMHgwMAogI2RlZmluZSBQSUNfSU1SICAgIDB4MDEKICNkZWZpbmUgUElDX0lTUiAgICBQSUNfQ01ECkBAIC0xNjEsMTMgKzE2MSwxMyBAQAogCiAJaXJxIC09IFJNMjAwX0k4MjU5QV9JUlFfQkFTRTsKIAltYXNrID0gMSA8PCBpcnE7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CiAJcm0yMDBfY2FjaGVkX2lycV9tYXNrIHw9IG1hc2s7CiAJaWYgKGlycSAmIDgpCiAJCXdyaXRlYihjYWNoZWRfc2xhdmVfbWFzaywgcm0yMDBfcGljX3NsYXZlICsgUElDX0lNUik7CiAJZWxzZQogCQl3cml0ZWIoY2FjaGVkX21hc3Rlcl9tYXNrLCBybTIwMF9waWNfbWFzdGVyICsgUElDX0lNUik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBzbmlfcm0yMDBfZW5hYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMTc3LDEzICsxNzcsMTMgQEAKIAogCWlycSAtPSBSTTIwMF9JODI1OUFfSVJRX0JBU0U7CiAJbWFzayA9IH4oMSA8PCBpcnEpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOwogCXJtMjAwX2NhY2hlZF9pcnFfbWFzayAmPSBtYXNrOwogCWlmIChpcnEgJiA4KQogCQl3cml0ZWIoY2FjaGVkX3NsYXZlX21hc2ssIHJtMjAwX3BpY19zbGF2ZSArIFBJQ19JTVIpOwogCWVsc2UKIAkJd3JpdGViKGNhY2hlZF9tYXN0ZXJfbWFzaywgcm0yMDBfcGljX21hc3RlciArIFBJQ19JTVIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNuaV9ybTIwMF9pODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc25pX3JtMjAwX2k4MjU5QV9pcnFfcmVhbCh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMjE2LDcgKzIxNiw3IEBACiAKIAlpcnEgLT0gUk0yMDBfSTgyNTlBX0lSUV9CQVNFOwogCWlycW1hc2sgPSAxIDw8IGlycTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAkvKgogCSAqIExpZ2h0d2VpZ2h0IHNwdXJpb3VzIElSUSBkZXRlY3Rpb24uIFdlIGRvIG5vdCB3YW50CiAJICogdG8gb3ZlcmRvIHNwdXJpb3VzIElSUSBoYW5kbGluZyAtIGl0J3MgdXN1YWxseSBhIHNpZ24KQEAgLTI0Nyw3ICsyNDcsNyBAQAogCQl3cml0ZWIoY2FjaGVkX21hc3Rlcl9tYXNrLCBybTIwMF9waWNfbWFzdGVyICsgUElDX0lNUik7CiAJCXdyaXRlYigweDYwK2lycSwgcm0yMDBfcGljX21hc3RlciArIFBJQ19DTUQpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuOwogCiBzcHVyaW91c184MjU5QV9pcnE6CkBAIC0yOTgsNyArMjk4LDcgQEAKIHsKIAlpbnQgaXJxOwogCi0Jc3Bpbl9sb2NrKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2spOworCXJhd19zcGluX2xvY2soJnNuaV9ybTIwMF9pODI1OUFfbG9jayk7CiAKIAkvKiBQZXJmb3JtIGFuIGludGVycnVwdCBhY2tub3dsZWRnZSBjeWNsZSBvbiBjb250cm9sbGVyIDEuICovCiAJd3JpdGViKDB4MEMsIHJtMjAwX3BpY19tYXN0ZXIgKyBQSUNfQ01EKTsJLyogcHJlcGFyZSBmb3IgcG9sbCAqLwpAQCAtMzI1LDcgKzMyNSw3IEBACiAJCQlpcnEgPSAtMTsKIAl9CiAKLQlzcGluX3VubG9jaygmc25pX3JtMjAwX2k4MjU5QV9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnNuaV9ybTIwMF9pODI1OUFfbG9jayk7CiAKIAlyZXR1cm4gbGlrZWx5KGlycSA+PSAwKSA/IGlycSArIFJNMjAwX0k4MjU5QV9JUlFfQkFTRSA6IGlycTsKIH0KQEAgLTMzNCw3ICszMzQsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAogCXdyaXRlYigweGZmLCBybTIwMF9waWNfbWFzdGVyICsgUElDX0lNUik7CiAJd3JpdGViKDB4ZmYsIHJtMjAwX3BpY19zbGF2ZSArIFBJQ19JTVIpOwpAQCAtMzUyLDcgKzM1Miw3IEBACiAJd3JpdGViKGNhY2hlZF9tYXN0ZXJfbWFzaywgcm0yMDBfcGljX21hc3RlciArIFBJQ19JTVIpOwogCXdyaXRlYihjYWNoZWRfc2xhdmVfbWFzaywgcm0yMDBfcGljX3NsYXZlICsgUElDX0lNUik7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbmlfcm0yMDBfaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25pX3JtMjAwX2k4MjU5QV9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwLmMgYi9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwLmMKaW5kZXggZTI3ODA5Yi4uNzE3NGQ4MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYwpAQCAtMzk5LDExICszOTksNiBAQAogCXJldHVybiB0eHg5X3N5c3RlbV90eXBlOwogfQogCi1jaGFyICogX19pbml0IHByb21fZ2V0Y21kbGluZSh2b2lkKQotewotCXJldHVybiAmKGFyY3NfY21kbGluZVswXSk7Ci19Ci0KIGNvbnN0IGNoYXIgKl9faW5pdCBwcm9tX2dldGVudihjb25zdCBjaGFyICpuYW1lKQogewogCWNvbnN0IHMzMiAqc3RyOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvam1yMzkyNy9zZXR1cC5jIGIvYXJjaC9taXBzL3R4eDkvam1yMzkyNy9zZXR1cC5jCmluZGV4IDI1ZTUwYTcuLjMyMDZmNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eHg5L2ptcjM5Mjcvc2V0dXAuYworKysgYi9hcmNoL21pcHMvdHh4OS9qbXIzOTI3L3NldHVwLmMKQEAgLTY3LDggKzY3LDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGptcjM5MjdfbWVtX3NldHVwKHZvaWQpCiB7Ci0JY2hhciAqYXJncHRyOwotCiAJc2V0X2lvX3BvcnRfYmFzZShKTVIzOTI3X1BPUlRfQkFTRSArIEpNUjM5MjdfUENJSU8pOwogCiAJX21hY2hpbmVfcmVzdGFydCA9IGptcjM5MjdfbWFjaGluZV9yZXN0YXJ0OwpAQCAtOTcsMTEgKzk1LDYgQEAKIAlqbXIzOTI3X2JvYXJkX2luaXQoKTsKIAogCXR4MzkyN19zaW9faW5pdCgwLCAxIDw8IDEpOyAvKiBjaDE6IG5vQ1RTICovCi0jaWZkZWYgQ09ORklHX1NFUklBTF9UWFg5X0NPTlNPTEUKLQlhcmdwdHIgPSBwcm9tX2dldGNtZGxpbmUoKTsKLQlpZiAoIXN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpKQotCQlzdHJjYXQoYXJncHRyLCAiIGNvbnNvbGU9dHR5UzEsMTE1MjAwIik7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGptcjM5MjdfcGNpX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHh4OS9yYnR4NDkyNy9zZXR1cC5jIGIvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5Mjcvc2V0dXAuYwppbmRleCBlZTQ2OGVhLi5iMTVhZGZjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9yYnR4NDkyNy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy90eHg5L3JidHg0OTI3L3NldHVwLmMKQEAgLTE4Nyw4ICsxODcsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgcmJ0eDQ5MjdfbWVtX3NldHVwKHZvaWQpCiB7Ci0JY2hhciAqYXJncHRyOwotCiAJaWYgKFRYNDkyN19SRVZfUENPREUoKSA9PSAweDQ5MjcpIHsKIAkJcmJ0eDQ5MjdfY2xvY2tfaW5pdCgpOwogCQl0eDQ5Mjdfc2V0dXAoKTsKQEAgLTIxMywxMSArMjExLDYgQEAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoMTUsIDEpOwogCiAJdHg0OTI3X3Npb19pbml0KDAsIDApOwotI2lmZGVmIENPTkZJR19TRVJJQUxfVFhYOV9DT05TT0xFCi0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JaWYgKCFzdHJzdHIoYXJncHRyLCAiY29uc29sZT0iKSkKLQkJc3RyY2F0KGFyZ3B0ciwgIiBjb25zb2xlPXR0eVMwLDM4NDAwIik7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHJidHg0OTI3X2Nsb2NrX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eHg5L3JidHg0OTM4L3NldHVwLmMgYi9hcmNoL21pcHMvdHh4OS9yYnR4NDkzOC9zZXR1cC5jCmluZGV4IGQ2NjUwOWIuLmQ2ZTcwZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eHg5L3JidHg0OTM4L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4eDkvcmJ0eDQ5Mzgvc2V0dXAuYwpAQCAtMTUzLDcgKzE1Myw2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcmJ0eDQ5MzhfbWVtX3NldHVwKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHBjZmc7Ci0JY2hhciAqYXJncHRyOwogCiAJaWYgKHR4eDlfbWFzdGVyX2Nsb2NrID09IDApCiAJCXR4eDlfbWFzdGVyX2Nsb2NrID0gMjUwMDAwMDA7IC8qIDI1TUh6ICovCkBAIC0xNjgsMTEgKzE2Nyw2IEBACiAjZW5kaWYKIAogCXR4NDkzOF9zaW9faW5pdCg3MzcyODAwLCAwKTsKLSNpZmRlZiBDT05GSUdfU0VSSUFMX1RYWDlfQ09OU09MRQotCWFyZ3B0ciA9IHByb21fZ2V0Y21kbGluZSgpOwotCWlmICghc3Ryc3RyKGFyZ3B0ciwgImNvbnNvbGU9IikpCi0JCXN0cmNhdChhcmdwdHIsICIgY29uc29sZT10dHlTMCwzODQwMCIpOwotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfVE9TSElCQV9SQlRYNDkzOF9NUExFWF9QSU81OF82MQogCXByX2luZm8oIlBJT1NFTDogZGlzYWJsaW5nIGJvdGggQVRBIGFuZCBOQU5EIHNlbGVjdGlvblxuIik7CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA2ZGMzMGZjLi4xNmQ4ODU3IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTQ2Niw3ICs0NjYsNyBAQAogICogdGhlIGtlcm5lbCBwYWdlIHRhYmxlcyBjb250YWluaW5nIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gYnkgdGxiLW1uMTAzMDAuUwogICovCiBleHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSk7CisJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApOwogCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvbW0vbW11LWNvbnRleHQuYyBiL2FyY2gvbW4xMDMwMC9tbS9tbXUtY29udGV4dC5jCmluZGV4IDMxYzlkMjcuLjM2YmEwMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9tbS9tbXUtY29udGV4dC5jCisrKyBiL2FyY2gvbW4xMDMwMC9tbS9tbXUtY29udGV4dC5jCkBAIC01MSw5ICs1MSwxMCBAQAogLyoKICAqIHByZWVtcHRpdmVseSBzZXQgYSBUTEIgZW50cnkKICAqLwotdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSkKK3ZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKIHsKIAl1bnNpZ25lZCBsb25nIHB0ZXUsIHB0ZWwsIGNueCwgZmxhZ3M7CisJcHRlX3QgcHRlID0gKnB0ZXA7CiAKIAlhZGRyICY9IFBBR0VfTUFTSzsKIAlwdGVsID0gcHRlX3ZhbChwdGUpICYgfih4UFRFTF9VTlVTRUQxIHwgeFBURUxfVU5VU0VEMik7CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS1hc2IyMzA1LmMgYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS1hc2IyMzA1LmMKaW5kZXggNzhjZDEzNC4uZDYxMTliOCAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2ktYXNiMjMwNS5jCisrKyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLWFzYjIzMDUuYwpAQCAtMzEsOSArMzEsMTEgQEAKICAqIGJ1dCB3ZSB3YW50IHRvIHRyeSB0byBhdm9pZCBhbGxvY2F0aW5nIGF0IDB4MjkwMC0weDJiZmYKICAqIHdoaWNoIG1pZ2h0IGhhdmUgYmUgbWlycm9yZWQgYXQgMHgwMTAwLTB4MDNmZi4uCiAgKi8KLXZvaWQgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCSAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQorcmVzb3VyY2Vfc2l6ZV90IHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKIHsKKwlyZXNvdXJjZV9zaXplX3Qgc3RhcnQgPSByZXMtPnN0YXJ0OworCiAjaWYgMAogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkYXRhOwogCkBAIC00NywxNCArNDksMTAgQEAKIAkgICAgICAgKTsKICNlbmRpZgogCi0JaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSByZXMtPnN0YXJ0OworCWlmICgocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pICYmIChzdGFydCAmIDB4MzAwKSkKKwkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7CiAKLQkJaWYgKHN0YXJ0ICYgMHgzMDApIHsKLQkJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwotCQkJcmVzLT5zdGFydCA9IHN0YXJ0OwotCQl9Ci0JfQorCXJldHVybiBzdGFydDsKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS5jIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2kuYwppbmRleCAyY2I3ZTc1Li42ZDg3MjBhIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS5jCisrKyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLmMKQEAgLTMzMSwxMiArMzMxLDEwIEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpc192YWxpZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaWR4KQogewogCXVuc2lnbmVkIGludCBpLCB0eXBlX21hc2sgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU07Ci0Jc3RydWN0IHJlc291cmNlICpkZXZyID0gJmRldi0+cmVzb3VyY2VbaWR4XTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmRldnIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdLCAqYnVzcjsKIAogCWlmIChkZXYtPmJ1cykgewotCQlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKLQkJCXN0cnVjdCByZXNvdXJjZSAqYnVzciA9IGRldi0+YnVzLT5yZXNvdXJjZVtpXTsKLQorCQlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGRldi0+YnVzLCBidXNyLCBpKSB7CiAJCQlpZiAoIWJ1c3IgfHwgKGJ1c3ItPmZsYWdzIF4gZGV2ci0+ZmxhZ3MpICYgdHlwZV9tYXNrKQogCQkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggN2E3M2I2MS4uNDc3Mjc3NyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMzgsNiArMzgsMTggQEAKIAogI2RlZmluZSBmbHVzaF9rZXJuZWxfZGNhY2hlX3JhbmdlKHN0YXJ0LHNpemUpIFwKIAlmbHVzaF9rZXJuZWxfZGNhY2hlX3JhbmdlX2FzbSgoc3RhcnQpLCAoc3RhcnQpKyhzaXplKSk7CisvKiB2bWFwIHJhbmdlIGZsdXNoZXMgYW5kIGludmFsaWRhdGVzLiAgQXJjaGl0ZWN0dXJhbGx5LCB3ZSBkb24ndCBuZWVkCisgKiB0aGUgaW52YWxpZGF0ZSwgYmVjYXVzZSB0aGUgQ1BVIHNob3VsZCByZWZ1c2UgdG8gc3BlY3VsYXRlIG9uY2UgYW4KKyAqIGFyZWEgaGFzIGJlZW4gZmx1c2hlZCwgc28gaW52YWxpZGF0ZSBpcyBsZWZ0IGVtcHR5ICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqdmFkZHIsIGludCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAodW5zaWduZWQgbG9uZyl2YWRkcjsKKworCWZsdXNoX2tlcm5lbF9kY2FjaGVfcmFuZ2VfYXNtKHN0YXJ0LCBzdGFydCArIHNpemUpOworfQorc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqdmFkZHIsIGludCBzaXplKQoreworfQogCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWZsdXNoX2NhY2hlX2FsbCgpCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZmx1c2hfY2FjaGVfYWxsKCkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBhMjdkMmUyLi4wMWMxNTAzIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC00MTAsNyArNDEwLDcgQEAKIAogI2RlZmluZSBQR19kY2FjaGVfZGlydHkgICAgICAgICBQR19hcmNoXzEKIAotZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QpOworZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7CiAKIC8qIEVuY29kZSBhbmQgZGUtY29kZSBhIHN3YXAgZW50cnkgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2NhY2hlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvY2FjaGUuYwppbmRleCBiNmVkMzRkLi4xMDU0YmFhIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvY2FjaGUuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvY2FjaGUuYwpAQCAtNjgsOSArNjgsOSBAQAogRVhQT1JUX1NZTUJPTChmbHVzaF9jYWNoZV9hbGxfbG9jYWwpOwogCiB2b2lkCi11cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKK3VwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiB7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdGVfcGFnZShwdGUpOworCXN0cnVjdCBwYWdlICpwYWdlID0gcHRlX3BhZ2UoKnB0ZXApOwogCiAJaWYgKHBmbl92YWxpZChwYWdlX3RvX3BmbihwYWdlKSkgJiYgcGFnZV9tYXBwaW5nKHBhZ2UpICYmCiAJICAgIHRlc3RfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJnBhZ2UtPmZsYWdzKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3BjaS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BjaS5jCmluZGV4IDllNzRiZmUuLjM4MzcyZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGNpLmMKQEAgLTI1NywxMCArMjU3LDEwIEBACiAgKiBTaW5jZSB3ZSBhcmUganVzdCBjaGVja2luZyBjYW5kaWRhdGVzLCBkb24ndCB1c2UgYW55IGZpZWxkcyBvdGhlcgogICogdGhhbiByZXMtPnN0YXJ0LgogICovCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCityZXNvdXJjZV9zaXplX3QgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWdubWVudCkKIHsKLQlyZXNvdXJjZV9zaXplX3QgbWFzaywgYWxpZ247CisJcmVzb3VyY2Vfc2l6ZV90IG1hc2ssIGFsaWduLCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKIAlEQkdfUkVTKCJwY2liaW9zX2FsaWduX3Jlc291cmNlKCVzLCAoJXApIFslbHgsJWx4XS8leCwgMHglbHgsIDB4JWx4KVxuIiwKIAkJcGNpX25hbWUoKChzdHJ1Y3QgcGNpX2RldiAqKSBkYXRhKSksCkBAIC0yNzIsMTAgKzI3MiwxMCBAQAogCiAJLyogQWxpZ24gdG8gbGFyZ2VzdCBvZiBNSU4gb3IgaW5wdXQgc2l6ZSAqLwogCW1hc2sgPSBtYXgoYWxpZ25tZW50LCBhbGlnbikgLSAxOwotCXJlcy0+c3RhcnQgKz0gbWFzazsKLQlyZXMtPnN0YXJ0ICY9IH5tYXNrOworCXN0YXJ0ICs9IG1hc2s7CisJc3RhcnQgJj0gfm1hc2s7CiAKLQkvKiBUaGUgY2FsbGVyIHVwZGF0ZXMgdGhlIGVuZCBmaWVsZCwgd2UgZG9uJ3QuICAqLworCXJldHVybiBzdGFydDsKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IGJhMzk0OGMuLjE1NWQ1NzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC01OCw3ICs1OCw3IEBACiAKIGNvbmZpZyBOUl9JUlFTCiAJaW50ICJOdW1iZXIgb2YgdmlydHVhbCBpbnRlcnJ1cHQgbnVtYmVycyIKLQlyYW5nZSAzMiA1MTIKKwlyYW5nZSAzMiAzMjc2OAogCWRlZmF1bHQgIjUxMiIKIAloZWxwCiAJICBUaGlzIGRlZmluZXMgdGhlIG51bWJlciBvZiB2aXJ0dWFsIGludGVycnVwdCBudW1iZXJzIHRoZSBrZXJuZWwKQEAgLTE3Myw2ICsxNzMsNyBAQAogCiBjb25maWcgT0YKIAlkZWZfYm9vbCB5CisJc2VsZWN0IE9GX0ZMQVRUUkVFCiAKIGNvbmZpZyBQUENfVURCR18xNjU1MAogCWJvb2wKQEAgLTI0MCw2ICsyNDEsMzMgQEAKIGNvbmZpZyBBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQwogCWRlZl9ib29sIHkKIAorY29uZmlnIFBQQ19BRFZfREVCVUdfUkVHUworCWJvb2wKKwlkZXBlbmRzIG9uIDQweCB8fCBCT09LRQorCWRlZmF1bHQgeQorCitjb25maWcgUFBDX0FEVl9ERUJVR19JQUNTCisJaW50CisJZGVwZW5kcyBvbiBQUENfQURWX0RFQlVHX1JFR1MKKwlkZWZhdWx0IDQgaWYgNDR4CisJZGVmYXVsdCAyCisKK2NvbmZpZyBQUENfQURWX0RFQlVHX0RBQ1MKKwlpbnQKKwlkZXBlbmRzIG9uIFBQQ19BRFZfREVCVUdfUkVHUworCWRlZmF1bHQgMgorCitjb25maWcgUFBDX0FEVl9ERUJVR19EVkNTCisJaW50CisJZGVwZW5kcyBvbiBQUENfQURWX0RFQlVHX1JFR1MKKwlkZWZhdWx0IDIgaWYgNDR4CisJZGVmYXVsdCAwCisKK2NvbmZpZyBQUENfQURWX0RFQlVHX0RBQ19SQU5HRQorCWJvb2wKKwlkZXBlbmRzIG9uIFBQQ19BRFZfREVCVUdfUkVHUyAmJiA0NHgKKwlkZWZhdWx0IHkKKwogc291cmNlICJpbml0L0tjb25maWciCiAKIHNvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hcmNoZXMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FyY2hlcy5kdHMKaW5kZXggNDE0ZWY4Yi4uMzBmNDEyMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FyY2hlcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FyY2hlcy5kdHMKQEAgLTYwLDYgKzYwLDcgQEAKIAkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CiAJCQlkY3ItY29udHJvbGxlcjsKIAkJCWRjci1hY2Nlc3MtbWV0aG9kID0gIm5hdGl2ZSI7CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMkMwPjsKIAkJfTsKIAl9OwogCkBAIC0xNDYsNiArMTQ3LDEzIEBACiAJCQlkY3ItcmVnID0gPDB4MDEwIDB4MDAyPjsKIAkJfTsKIAorCQlDUllQVE86IGNyeXB0b0AxODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbWNjLHBwYzQ2MGd0LWNyeXB0byIsICJhbWNjLHBwYzR4eC1jcnlwdG8iOworCQkJcmVnID0gPDQgMHgwMDE4MDAwMCAweDgwNDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4ND47CisJCX07CisKIAkJTUFMMDogbWNtYWwgewogCQkJY29tcGF0aWJsZSA9ICJpYm0sbWNtYWwtNDYwZ3QiLCAiaWJtLG1jbWFsMiI7CiAJCQlkY3ItcmVnID0gPDB4MTgwIDB4MDYyPjsKQEAgLTI3NCw2ICsyODIsNyBAQAogCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OwogCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKIAkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisJCQkJcngtZmlmby1zaXplLWdpZ2UgPSA8MTYzODQ+OwogCQkJCXBoeS1tb2RlID0gInNnbWlpIjsKIAkJCQlwaHktbWFwID0gPDB4ZmZmZmZmZmY+OwogCQkJCWdwY3MtYWRkcmVzcyA9IDwweDAwMDAwMDBhPjsKQEAgLTMwMiw2ICszMTEsNyBAQAogCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OwogCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKIAkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisJCQkJcngtZmlmby1zaXplLWdpZ2UgPSA8MTYzODQ+OwogCQkJCXBoeS1tb2RlID0gInNnbWlpIjsKIAkJCQlwaHktbWFwID0gPDB4MDAwMDAwMDA+OwogCQkJCWdwY3MtYWRkcmVzcyA9IDwweDAwMDAwMDBiPjsKQEAgLTMzMSw2ICszNDEsOCBAQAogCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OwogCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKIAkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisJCQkJcngtZmlmby1zaXplLWdpZ2UgPSA8MTYzODQ+OworCQkJCXR4LWZpZm8tc2l6ZS1naWdlID0gPDE2Mzg0PjsgLyogZW1hYzImMyBvbmx5ICovCiAJCQkJcGh5LW1vZGUgPSAic2dtaWkiOwogCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMT47CiAJCQkJZ3Bjcy1hZGRyZXNzID0gPDB4MDAwMDAwMEM+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9wcGM5YS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3BwYzlhLmR0cwppbmRleCBjODYxMTRlLi45NzdmMjYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3BwYzlhLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3BwYzlhLmR0cwpAQCAtMzQxLDYgKzM0MSwyMiBAQAogCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwogCQl9OwogCisJCW1zaUA0MTYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLW1zaSIsICJmc2wsbXBpYy1tc2kiOworCQkJcmVnID0gPDB4NDE2MDAgMHg4MD47CisJCQltc2ktYXZhaWxhYmxlLXJhbmdlcyA9IDwwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8CisJCQkJMHhlMCAwCisJCQkJMHhlMSAwCisJCQkJMHhlMiAwCisJCQkJMHhlMyAwCisJCQkJMHhlNCAwCisJCQkJMHhlNSAwCisJCQkJMHhlNiAwCisJCQkJMHhlNyAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCiAJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1ndXRzIjsKIAkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzMxMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzMxMC5kdHMKaW5kZXggODIwYzJiMy4uOGU0ZWZmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmMzMTAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjMzEwLmR0cwpAQCAtMzIsNiArMzIsNyBAQAogCQlzZXJpYWwwID0gJnNlcmlhbDA7CiAJCXNlcmlhbDEgPSAmc2VyaWFsMTsKIAkJcGNpMCA9ICZwY2kwOworCQlwY2kxID0gJnBjaTE7CiAJfTsKIAogCWNwdXMgewpAQCAtMzM4LDYgKzMzOSwyMiBAQAogCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwogCQl9OwogCisJCW1zaUA0MTYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLW1zaSIsICJmc2wsbXBpYy1tc2kiOworCQkJcmVnID0gPDB4NDE2MDAgMHg4MD47CisJCQltc2ktYXZhaWxhYmxlLXJhbmdlcyA9IDwwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8CisJCQkJMHhlMCAwCisJCQkJMHhlMSAwCisJCQkJMHhlMiAwCisJCQkJMHhlMyAwCisJCQkJMHhlNCAwCisJCQkJMHhlNSAwCisJCQkJMHhlNiAwCisJCQkJMHhlNyAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCiAJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1ndXRzIjsKIAkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47CkBAIC0zNTgsNyArMzc1LDcgQEAKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCWludGVycnVwdHMgPSA8MHgxOCAweDI+OwotCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZmYwMCAweDAgMHgwIDB4Nz47CiAJCWludGVycnVwdC1tYXAgPSA8CiAJCQkweDAwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MgogCQkJMHgwMDAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjNjEwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjNjEwLmR0cwppbmRleCAzMDkxMWFkLi5iYjcwNjAwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzYxMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzCkBAIC03NSwxNCArNzUsNDggQEAKIAkJaW50ZXJydXB0cyA9IDwxOSAyPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAKLQkJcmFuZ2VzID0gPDAgMCAweGZmMDAwMDAwIDB4MDEwMDAwMDAgICAgIC8vIDE2TUIgQm9vdCBmbGFzaAotCQkJICAxIDAgMHhlODAwMDAwMCAweDA4MDAwMDAwICAgICAvLyBQYWdlZCBGbGFzaCAwCi0JCQkgIDIgMCAweGUwMDAwMDAwIDB4MDgwMDAwMDAgICAgIC8vIFBhZ2VkIEZsYXNoIDEKLQkJCSAgMyAwIDB4ZmMxMDAwMDAgMHgwMDAyMDAwMCAgICAgLy8gTlZSQU0KLQkJCSAgNCAwIDB4ZmMwMDAwMDAgMHgwMDAwODAwMCAgICAgLy8gRlBHQQotCQkJICA1IDAgMHhmYzAwODAwMCAweDAwMDA4MDAwICAgICAvLyBBRklYIEZQR0EKLQkJCSAgNiAwIDB4ZmQwMDAwMDAgMHgwMDgwMDAwMCAgICAgLy8gSU8gRlBHQSAoOC1iaXQpCi0JCQkgIDcgMCAweGZkODAwMDAwIDB4MDA4MDAwMDA+OyAgIC8vIElPIEZQR0EgKDMyLWJpdCkKKwkJcmFuZ2VzID0gPDAgMCAweGZmMDAwMDAwIDB4MDEwMDAwMDAJLy8gMTZNQiBCb290IGZsYXNoCisJCQkgIDEgMCAweGU4MDAwMDAwIDB4MDgwMDAwMDAJLy8gUGFnZWQgRmxhc2ggMAorCQkJICAyIDAgMHhlMDAwMDAwMCAweDA4MDAwMDAwCS8vIFBhZ2VkIEZsYXNoIDEKKwkJCSAgMyAwIDB4ZmMxMDAwMDAgMHgwMDAyMDAwMAkvLyBOVlJBTQorCQkJICA0IDAgMHhmYzAwMDAwMCAweDAwMDA4MDAwCS8vIEZQR0EKKwkJCSAgNSAwIDB4ZmMwMDgwMDAgMHgwMDAwODAwMAkvLyBBRklYIEZQR0EKKwkJCSAgNiAwIDB4ZmQwMDAwMDAgMHgwMDgwMDAwMAkvLyBJTyBGUEdBICg4LWJpdCkKKwkJCSAgNyAwIDB4ZmQ4MDAwMDAgMHgwMDgwMDAwMD47CS8vIElPIEZQR0EgKDMyLWJpdCkKKworCQkvKiBmbGFzaEAwLDAgaXMgYSBtaXJyb3Igb2YgcGFydCBvZiB0aGUgbWVtb3J5IGluIGZsYXNoQDEsMAorCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJnZWYsc2JjNjEwLWZpcm13YXJlLW1pcnJvciIsICJjZmktZmxhc2giOworCQkJcmVnID0gPDB4MCAweDAgMHgxMDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8ND47CisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gImZpcm13YXJlIjsKKwkJCQlyZWcgPSA8MHgwIDB4MTAwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJfTsKKwkJKi8KKworCQlmbGFzaEAxLDAgeworCQkJY29tcGF0aWJsZSA9ICJnZWYsc2JjNjEwLXBhZ2VkLWZsYXNoIiwgImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgxIDB4MCAweDgwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDw0PjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJcmVnID0gPDB4MCAweDc4MDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3ODAwMDAwIHsKKwkJCQlsYWJlbCA9ICJmaXJtd2FyZSI7CisJCQkJcmVnID0gPDB4NzgwMDAwMCAweDgwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJfTsKIAogCQludnJhbUAzLDAgewogCQkJZGV2aWNlX3R5cGUgPSAibnZyYW0iOwpAQCAtMzA1LDYgKzMzOSwyMiBAQAogCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwogCQl9OwogCisJCW1zaUA0MTYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLW1zaSIsICJmc2wsbXBpYy1tc2kiOworCQkJcmVnID0gPDB4NDE2MDAgMHg4MD47CisJCQltc2ktYXZhaWxhYmxlLXJhbmdlcyA9IDwwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8CisJCQkJMHhlMCAwCisJCQkJMHhlMSAwCisJCQkJMHhlMiAwCisJCQkJMHhlMyAwCisJCQkJMHhlNCAwCisJCQkJMHhlNSAwCisJCQkJMHhlNiAwCisJCQkJMHhlNyAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCiAJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1ndXRzIjsKIAkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2xhY2llci5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2xhY2llci5kdHMKaW5kZXggZjZmNjE4OS4uZDYyYTRmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dsYWNpZXIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nbGFjaWVyLmR0cwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIEFNQ0MgR2xhY2llciAoNDYwR1QpCiAgKgotICogQ29weXJpZ2h0IDIwMDggREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorICogQ29weXJpZ2h0IDIwMDgtMjAxMCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CiAgKgogICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQKQEAgLTQyLDYgKzQyLDcgQEAKIAkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CiAJCQlkY3ItY29udHJvbGxlcjsKIAkJCWRjci1hY2Nlc3MtbWV0aG9kID0gIm5hdGl2ZSI7CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMkMwPjsKIAkJfTsKIAl9OwogCkBAIC0xMDYsNiArMTA3LDE2IEBACiAJCWRjci1yZWcgPSA8MHgwMGMgMHgwMDI+OwogCX07CiAKKwlMMkMwOiBsMmMgeworCQljb21wYXRpYmxlID0gImlibSxsMi1jYWNoZS00NjBndCIsICJpYm0sbDItY2FjaGUiOworCQlkY3ItcmVnID0gPDB4MDIwIDB4MDA4CQkvKiBJbnRlcm5hbCBTUkFNIERDUidzICovCisJCQkgICAweDAzMCAweDAwOD47CS8qIEwyIGNhY2hlIERDUidzICovCisJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CQkvKiAzMiBieXRlcyAqLworCQljYWNoZS1zaXplID0gPDI2MjE0ND47CQkvKiBMMiwgMjU2SyAqLworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKwkJaW50ZXJydXB0cyA9IDwxMSAxPjsKKwl9OworCiAJcGxiIHsKIAkJY29tcGF0aWJsZSA9ICJpYm0scGxiLTQ2MGd0IiwgImlibSxwbGI0IjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CkBAIC0xMTgsNiArMTI5LDEzIEBACiAJCQlkY3ItcmVnID0gPDB4MDEwIDB4MDAyPjsKIAkJfTsKIAorCQlDUllQVE86IGNyeXB0b0AxODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbWNjLHBwYzQ2MGd0LWNyeXB0byIsICJhbWNjLHBwYzR4eC1jcnlwdG8iOworCQkJcmVnID0gPDQgMHgwMDE4MDAwMCAweDgwNDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4ND47CisJCX07CisKIAkJTUFMMDogbWNtYWwgewogCQkJY29tcGF0aWJsZSA9ICJpYm0sbWNtYWwtNDYwZ3QiLCAiaWJtLG1jbWFsMiI7CiAJCQlkY3ItcmVnID0gPDB4MTgwIDB4MDYyPjsKQEAgLTE4Niw2ICsyMDQsMjkgQEAKIAkJCQkJCXJlZyA9IDwweDAzZmEwMDAwIDB4MDAwNjAwMDA+OwogCQkJCQl9OwogCQkJCX07CisKKwkJCQluZGZjQDMsMCB7CisJCQkJCWNvbXBhdGlibGUgPSAiaWJtLG5kZmMiOworCQkJCQlyZWcgPSA8MHgwMDAwMDAwMyAweDAwMDAwMDAwIDB4MDAwMDIwMDA+OworCQkJCQljY3IgPSA8MHgwMDAwMTAwMD47CisJCQkJCWJhbmstc2V0dGluZ3MgPSA8MHg4MDAwMjIyMj47CisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQkJCQluYW5kIHsKKwkJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJCQkJCXBhcnRpdGlvbkAwIHsKKwkJCQkJCQlsYWJlbCA9ICJ1LWJvb3QiOworCQkJCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAxMDAwMDA+OworCQkJCQkJfTsKKwkJCQkJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJCQkJCWxhYmVsID0gInVzZXIiOworCQkJCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDNmMDAwMDA+OworCQkJCQkJfTsKKwkJCQkJfTsKKwkJCQl9OwogCQkJfTsKIAogCQkJVUFSVDA6IHNlcmlhbEBlZjYwMDMwMCB7CkBAIC0yMzcsNiArMjc4LDIwIEBACiAJCQkJcmVnID0gPDB4ZWY2MDA3MDAgMHgwMDAwMDAxND47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CiAJCQkJaW50ZXJydXB0cyA9IDwweDIgMHg0PjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQlydGNANjggeworCQkJCQljb21wYXRpYmxlID0gInN0bSxtNDF0ODAiOworCQkJCQlyZWcgPSA8MHg2OD47CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzI+OworCQkJCQlpbnRlcnJ1cHRzID0gPDB4MTkgMHg4PjsKKwkJCQl9OworCQkJCXN0dG1ANDggeworCQkJCQljb21wYXRpYmxlID0gImFkLGFkNzQxNCI7CisJCQkJCXJlZyA9IDwweDQ4PjsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CisJCQkJCWludGVycnVwdHMgPSA8MHgxNCAweDg+OworCQkJCX07CiAJCQl9OwogCiAJCQlJSUMxOiBpMmNAZWY2MDA4MDAgewpAQCAtMjc1LDcgKzMzMCw3IEBACiAKIAkJCUVNQUMwOiBldGhlcm5ldEBlZjYwMGUwMCB7CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7Ci0JCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzQiOworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGVtYWMtNDYwZ3QiLCAiaWJtLGVtYWM0c3luYyI7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRU1BQzA+OwogCQkJCWludGVycnVwdHMgPSA8MHgwIDB4MT47CiAJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKQEAgLTI4Myw3ICszMzgsNyBAQAogCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWludGVycnVwdC1tYXAgPSA8LypTdGF0dXMqLyAweDAgJlVJQzIgMHgxMCAweDQKIAkJCQkJCSAvKldha2UqLyAgIDB4MSAmVUlDMiAweDE0IDB4ND47Ci0JCQkJcmVnID0gPDB4ZWY2MDBlMDAgMHgwMDAwMDA3ND47CisJCQkJcmVnID0gPDB4ZWY2MDBlMDAgMHgwMDAwMDBjND47CiAJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OwogCQkJCW1hbC10eC1jaGFubmVsID0gPDA+OwpAQCAtMzA1LDcgKzM2MCw3IEBACiAKIAkJCUVNQUMxOiBldGhlcm5ldEBlZjYwMGYwMCB7CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7Ci0JCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzQiOworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGVtYWMtNDYwZ3QiLCAiaWJtLGVtYWM0c3luYyI7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRU1BQzE+OwogCQkJCWludGVycnVwdHMgPSA8MHgwIDB4MT47CiAJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKQEAgLTMxMyw3ICszNjgsNyBAQAogCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWludGVycnVwdC1tYXAgPSA8LypTdGF0dXMqLyAweDAgJlVJQzIgMHgxMSAweDQKIAkJCQkJCSAvKldha2UqLyAgIDB4MSAmVUlDMiAweDE1IDB4ND47Ci0JCQkJcmVnID0gPDB4ZWY2MDBmMDAgMHgwMDAwMDA3ND47CisJCQkJcmVnID0gPDB4ZWY2MDBmMDAgMHgwMDAwMDBjND47CiAJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OwogCQkJCW1hbC10eC1jaGFubmVsID0gPDE+OwpAQCAtMzM2LDcgKzM5MSw3IEBACiAKIAkJCUVNQUMyOiBldGhlcm5ldEBlZjYwMTEwMCB7CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7Ci0JCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzQiOworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGVtYWMtNDYwZ3QiLCAiaWJtLGVtYWM0c3luYyI7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRU1BQzI+OwogCQkJCWludGVycnVwdHMgPSA8MHgwIDB4MT47CiAJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKQEAgLTM0NCw3ICszOTksNyBAQAogCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWludGVycnVwdC1tYXAgPSA8LypTdGF0dXMqLyAweDAgJlVJQzIgMHgxMiAweDQKIAkJCQkJCSAvKldha2UqLyAgIDB4MSAmVUlDMiAweDE2IDB4ND47Ci0JCQkJcmVnID0gPDB4ZWY2MDExMDAgMHgwMDAwMDA3ND47CisJCQkJcmVnID0gPDB4ZWY2MDExMDAgMHgwMDAwMDBjND47CiAJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OwogCQkJCW1hbC10eC1jaGFubmVsID0gPDI+OwpAQCAtMzY2LDcgKzQyMSw3IEBACiAKIAkJCUVNQUMzOiBldGhlcm5ldEBlZjYwMTIwMCB7CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7Ci0JCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzQiOworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGVtYWMtNDYwZ3QiLCAiaWJtLGVtYWM0c3luYyI7CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRU1BQzM+OwogCQkJCWludGVycnVwdHMgPSA8MHgwIDB4MT47CiAJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKQEAgLTM3NCw3ICs0MjksNyBAQAogCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWludGVycnVwdC1tYXAgPSA8LypTdGF0dXMqLyAweDAgJlVJQzIgMHgxMyAweDQKIAkJCQkJCSAvKldha2UqLyAgIDB4MSAmVUlDMiAweDE3IDB4ND47Ci0JCQkJcmVnID0gPDB4ZWY2MDEyMDAgMHgwMDAwMDA3ND47CisJCQkJcmVnID0gPDB4ZWY2MDEyMDAgMHgwMDAwMDBjND47CiAJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwogCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OwogCQkJCW1hbC10eC1jaGFubmVsID0gPDM+OwpAQCAtNDE0LDYgKzQ2OSw3IEBACiAJCQkgKiBsYXRlciBjYW5ub3QgYmUgY2hhbmdlZAogCQkJICovCiAJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAwMDAwMDAwIDB4ODAwMDAwMDAgMHgwMDAwMDAwZCAweDgwMDAwMDAwIDB4MDAwMDAwMDAgMHg4MDAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwYyAweDBlZTAwMDAwIDB4MDAwMDAwMDAgMHgwMDEwMDAwMAogCQkJCSAgMHgwMTAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwYyAweDA4MDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAxMDAwMD47CiAKIAkJCS8qIEluYm91bmQgMkdCIHJhbmdlIHN0YXJ0aW5nIGF0IDAgKi8KQEAgLTQ0NCw2ICs1MDAsNyBAQAogCQkJICogbGF0ZXIgY2Fubm90IGJlIGNoYW5nZWQKIAkJCSAqLwogCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwMDAwMDAwMCAweDgwMDAwMDAwIDB4MDAwMDAwMGUgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMGYgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAxMDAwMDAKIAkJCQkgIDB4MDEwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMGYgMHg4MDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMTAwMDA+OwogCiAJCQkvKiBJbmJvdW5kIDJHQiByYW5nZSBzdGFydGluZyBhdCAwICovCkBAIC00ODUsNiArNTQyLDcgQEAKIAkJCSAqIGxhdGVyIGNhbm5vdCBiZSBjaGFuZ2VkCiAJCQkgKi8KIAkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MDAwMDAwMDAgMHg4MDAwMDAwMCAweDAwMDAwMDBlIDB4ODAwMDAwMDAgMHgwMDAwMDAwMCAweDgwMDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDBmIDB4MDAxMDAwMDAgMHgwMDAwMDAwMCAweDAwMTAwMDAwCiAJCQkJICAweDAxMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDBmIDB4ODAwMTAwMDAgMHgwMDAwMDAwMCAweDAwMDEwMDAwPjsKIAogCQkJLyogSW5ib3VuZCAyR0IgcmFuZ2Ugc3RhcnRpbmcgYXQgMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2thdG1haS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2F0bWFpLmR0cwppbmRleCA4ZjM0NWRlOS4uOGNmMmMwYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2thdG1haS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2thdG1haS5kdHMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJpYm0sb3BiLTQ0MHNwZSIsICJpYm0sb3BiLTQ0MGdwIiwgImlibSxvcGIiOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCXJhbmdlcyA9IDwweDAwMDAwMDAwIDB4MDAwMDAwMDQgMHhlMDAwMDAwMCAweDIwMDAwMDAwPjsKKwkJCXJhbmdlcyA9IDwweGUwMDAwMDAwIDB4MDAwMDAwMDQgMHhlMDAwMDAwMCAweDIwMDAwMDAwPjsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHpJbWFnZSAqLwogCiAJCQlFQkMwOiBlYmMgewpAQCAtMTY1LDE0ICsxNjUsNDcgQEAKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSB6SW1hZ2UgKi8KKwkJCQkvKiByYW5nZXMgcHJvcGVydHkgaXMgc3VwcGxpZWQgYnkgVS1Cb290ICovCiAJCQkJaW50ZXJydXB0cyA9IDwweDUgMHgxPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKworCQkJCW5vcl9mbGFzaEAwLDAgeworCQkJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQkJCWJhbmstd2lkdGggPSA8Mj47CisJCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMTAwMDAwMD47CisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQkJcGFydGl0aW9uQDAgeworCQkJCQkJbGFiZWwgPSAia2VybmVsIjsKKwkJCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAxZTAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AMWUwMDAwIHsKKwkJCQkJCWxhYmVsID0gImR0YiI7CisJCQkJCQlyZWcgPSA8MHgwMDFlMDAwMCAweDAwMDIwMDAwPjsKKwkJCQkJfTsKKwkJCQkJcGFydGl0aW9uQDIwMDAwMCB7CisJCQkJCQlsYWJlbCA9ICJyb290IjsKKwkJCQkJCXJlZyA9IDwweDAwMjAwMDAwIDB4MDAyMDAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25ANDAwMDAwIHsKKwkJCQkJCWxhYmVsID0gInVzZXIiOworCQkJCQkJcmVnID0gPDB4MDA0MDAwMDAgMHgwMGI2MDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkBmNjAwMDAgeworCQkJCQkJbGFiZWwgPSAiZW52IjsKKwkJCQkJCXJlZyA9IDwweDAwZjYwMDAwIDB4MDAwNDAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AZmEwMDAwIHsKKwkJCQkJCWxhYmVsID0gInUtYm9vdCI7CisJCQkJCQlyZWcgPSA8MHgwMGZhMDAwMCAweDAwMDYwMDAwPjsKKwkJCQkJfTsKKwkJCQl9OwogCQkJfTsKIAotCQkJVUFSVDA6IHNlcmlhbEAxMDAwMDIwMCB7CisJCQlVQVJUMDogc2VyaWFsQGYwMDAwMjAwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQkJcmVnID0gPDB4MTAwMDAyMDAgMHgwMDAwMDAwOD47CisJCQkJcmVnID0gPDB4ZjAwMDAyMDAgMHgwMDAwMDAwOD47CiAJCQkJdmlydHVhbC1yZWcgPSA8MHhhMDAwMDIwMD47CiAJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgekltYWdlICovCiAJCQkJY3VycmVudC1zcGVlZCA9IDwxMTUyMDA+OwpAQCAtMTgwLDEwICsyMTMsMTAgQEAKIAkJCQlpbnRlcnJ1cHRzID0gPDB4MCAweDQ+OwogCQkJfTsKIAotCQkJVUFSVDE6IHNlcmlhbEAxMDAwMDMwMCB7CisJCQlVQVJUMTogc2VyaWFsQGYwMDAwMzAwIHsKIAkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQkJcmVnID0gPDB4MTAwMDAzMDAgMHgwMDAwMDAwOD47CisJCQkJcmVnID0gPDB4ZjAwMDAzMDAgMHgwMDAwMDAwOD47CiAJCQkJdmlydHVhbC1yZWcgPSA8MHhhMDAwMDMwMD47CiAJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkJCWN1cnJlbnQtc3BlZWQgPSA8MD47CkBAIC0xOTIsMTAgKzIyNSwxMCBAQAogCQkJfTsKIAogCi0JCQlVQVJUMjogc2VyaWFsQDEwMDAwNjAwIHsKKwkJCVVBUlQyOiBzZXJpYWxAZjAwMDA2MDAgewogCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKLQkJCQlyZWcgPSA8MHgxMDAwMDYwMCAweDAwMDAwMDA4PjsKKwkJCQlyZWcgPSA8MHhmMDAwMDYwMCAweDAwMDAwMDA4PjsKIAkJCQl2aXJ0dWFsLXJlZyA9IDwweGEwMDAwNjAwPjsKIAkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsKQEAgLTIwMywyNyArMjM2LDI3IEBACiAJCQkJaW50ZXJydXB0cyA9IDwweDUgMHg0PjsKIAkJCX07CiAKLQkJCUlJQzA6IGkyY0AxMDAwMDQwMCB7CisJCQlJSUMwOiBpMmNAZjAwMDA0MDAgewogCQkJCWNvbXBhdGlibGUgPSAiaWJtLGlpYy00NDBzcGUiLCAiaWJtLGlpYy00NDBncCIsICJpYm0saWljIjsKLQkJCQlyZWcgPSA8MHgxMDAwMDQwMCAweDAwMDAwMDE0PjsKKwkJCQlyZWcgPSA8MHhmMDAwMDQwMCAweDAwMDAwMDE0PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDB4MiAweDQ+OwogCQkJfTsKIAotCQkJSUlDMTogaTJjQDEwMDAwNTAwIHsKKwkJCUlJQzE6IGkyY0BmMDAwMDUwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0saWljLTQ0MHNwZSIsICJpYm0saWljLTQ0MGdwIiwgImlibSxpaWMiOwotCQkJCXJlZyA9IDwweDEwMDAwNTAwIDB4MDAwMDAwMTQ+OworCQkJCXJlZyA9IDwweGYwMDAwNTAwIDB4MDAwMDAwMTQ+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OwogCQkJCWludGVycnVwdHMgPSA8MHgzIDB4ND47CiAJCQl9OwogCi0JCQlFTUFDMDogZXRoZXJuZXRAMTAwMDA4MDAgeworCQkJRU1BQzA6IGV0aGVybmV0QGYwMDAwODAwIHsKIAkJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDB4MD47CiAJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NDBzcGUiLCAiaWJtLGVtYWM0IjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDB4MWMgMHg0IDB4MWQgMHg0PjsKLQkJCQlyZWcgPSA8MHgxMDAwMDgwMCAweDAwMDAwMDc0PjsKKwkJCQlyZWcgPSA8MHhmMDAwMDgwMCAweDAwMDAwMDc0PjsKIAkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOwogCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OwogCQkJCW1hbC10eC1jaGFubmVsID0gPDA+OwpAQCAtMjQ4LDExICsyODEsMTEgQEAKIAkJCXByaW1hcnk7CiAJCQlsYXJnZS1pbmJvdW5kLXdpbmRvd3M7CiAJCQllbmFibGUtbXNpLWhvbGU7Ci0JCQlyZWcgPSA8MHgwMDAwMDAwYyAweDBlYzAwMDAwICAgMHgwMDAwMDAwOAkvKiBDb25maWcgc3BhY2UgYWNjZXNzICovCi0JCQkgICAgICAgMHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDAJCS8qIG5vIElBQ0sgY3ljbGVzICovCi0JCQkgICAgICAgMHgwMDAwMDAwYyAweDBlZDAwMDAwICAgMHgwMDAwMDAwNCAgIC8qIFNwZWNpYWwgY3ljbGVzICovCi0JCQkgICAgICAgMHgwMDAwMDAwYyAweDBlYzgwMDAwIDB4MDAwMDAxMDAJLyogSW50ZXJuYWwgcmVnaXN0ZXJzICovCi0JCQkgICAgICAgMHgwMDAwMDAwYyAweDBlYzgwMTAwICAweDAwMDAwMGZjPjsJLyogSW50ZXJuYWwgbWVzc2FnaW5nIHJlZ2lzdGVycyAqLworCQkJcmVnID0gPDB4MDAwMDAwMGMgMHgwZWMwMDAwMCAweDAwMDAwMDA4ICAgLyogQ29uZmlnIHNwYWNlIGFjY2VzcyAqLworCQkJICAgICAgIDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwICAgLyogbm8gSUFDSyBjeWNsZXMgKi8KKwkJCSAgICAgICAweDAwMDAwMDBjIDB4MGVkMDAwMDAgMHgwMDAwMDAwNCAgIC8qIFNwZWNpYWwgY3ljbGVzICovCisJCQkgICAgICAgMHgwMDAwMDAwYyAweDBlYzgwMDAwIDB4MDAwMDAxMDAgICAvKiBJbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJCSAgICAgICAweDAwMDAwMDBjIDB4MGVjODAxMDAgMHgwMDAwMDBmYz47IC8qIEludGVybmFsIG1lc3NhZ2luZyByZWdpc3RlcnMgKi8KIAogCQkJLyogT3V0Ym91bmQgcmFuZ2VzLCBvbmUgbWVtb3J5IGFuZCBvbmUgSU8sCiAJCQkgKiBsYXRlciBjYW5ub3QgYmUgY2hhbmdlZApAQCAtNDUzLDYgKzQ4Niw2IEBACiAJfTsKIAogCWNob3NlbiB7Ci0JCWxpbnV4LHN0ZG91dC1wYXRoID0gIi9wbGIvb3BiL3NlcmlhbEAxMDAwMDIwMCI7CisJCWxpbnV4LHN0ZG91dC1wYXRoID0gIi9wbGIvb3BiL3NlcmlhbEBmMDAwMDIwMCI7CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMKaW5kZXggYzM1M2RhYy4uYzllZjZiYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzUxMjFhZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cwpAQCAtNjIsMTcgKzYyLDEyIEBACiAJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJYmFuay13aWR0aCA9IDwxPjsKIAkJLy8gQURTIGhhcyB0d28gSHluaXggNTEyTUIgTmFuZCBmbGFzaCBjaGlwcyBpbiBhIHNpbmdsZQotCQkvLyBzdGFja2VkIHBhY2thZ2UgLgorCQkvLyBzdGFja2VkIHBhY2thZ2UuCiAJCWNoaXBzID0gPDI+OwotCQluYW5kMEAwIHsKLQkJCWxhYmVsID0gIm5hbmQwIjsKLQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDIwMDAwMDA+OyAJLy8gZmlyc3QgMzIgTUIgb2YgY2hpcCAwCi0JCX07Ci0JCW5hbmQxQDIwMDAwMDAwIHsKLQkJCWxhYmVsID0gIm5hbmQxIjsKLQkJCXJlZyA9IDwweDIwMDAwMDAwIDB4MDIwMDAwMDA+OyAJLy8gZmlyc3QgMzIgTUIgb2YgY2hpcCAxCisJCW5hbmRAMCB7CisJCQlsYWJlbCA9ICJuYW5kIjsKKwkJCXJlZyA9IDwweDAwMDAwMDAwIDB4NDAwMDAwMDA+OwkvLyA1MTJNQiArIDUxMk1CCiAJCX07CiAJfTsKIApAQCAtMTY2LDYgKzE2MSwxMSBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJfTsKIAorCQlyZXNldEBlMDAgewkvLyBSZXNldCBtb2R1bGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtcmVzZXQiOworCQkJcmVnID0gPDB4ZTAwIDB4MTAwPjsKKwkJfTsKKwogCQljbG9ja0BmMDAgewkvLyBDbG9jayBjb250cm9sCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWNsb2NrIjsKIAkJCXJlZyA9IDwweGYwMCAweDEwMD47CkBAIC0xODUsMTcgKzE4NSwxNSBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJfTsKIAotCQltc2NhbkAxMzAwIHsKKwkJY2FuQDEzMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1tc2NhbiI7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwogCQkJaW50ZXJydXB0cyA9IDwxMiAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKIAkJCXJlZyA9IDwweDEzMDAgMHg4MD47CiAJCX07CiAKLQkJbXNjYW5AMTM4MCB7CisJCWNhbkAxMzgwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtbXNjYW4iOwotCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWludGVycnVwdHMgPSA8MTMgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CiAJCQlyZWcgPSA8MHgxMzgwIDB4ODA+OwpAQCAtMjA1LDE3ICsyMDMsMzEgQEAKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWkyYyIsICJmc2wtaTJjIjsKLQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MHgxNzAwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDw5IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OworCQkJZnNsLHByZXNlcnZlLWNsb2NraW5nOworCisJCQlod21vbkA0YSB7CisJCQkJY29tcGF0aWJsZSA9ICJhZGksYWQ3NDE0IjsKKwkJCQlyZWcgPSA8MHg0YT47CisJCQl9OworCisJCQllZXByb21ANTAgeworCQkJCWNvbXBhdGlibGUgPSAiYXQsMjRjMzIiOworCQkJCXJlZyA9IDwweDUwPjsKKwkJCX07CisKKwkJCXJ0Y0A2OCB7CisJCQkJY29tcGF0aWJsZSA9ICJzdG0sbTQxdDYyIjsKKwkJCQlyZWcgPSA8MHg2OD47CisJCQl9OwogCQl9OwogCiAJCWkyY0AxNzIwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWkyYyIsICJmc2wtaTJjIjsKLQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlyZWcgPSA8MHgxNzIwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDwxMCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwgJmlwaWMgPjsKQEAgLTIyNSw3ICsyMzcsNiBAQAogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtaTJjIiwgImZzbC1pMmMiOwotCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCXJlZyA9IDwweDE3NDAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDExIDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwpAQCAtMjQ0LDcgKzI1NSw3IEBACiAJCX07CiAKIAkJZGlzcGxheUAyMTAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtZGl1IiwgImZzbC1kaXUiOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1kaXUiOwogCQkJcmVnID0gPDB4MjEwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDY0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwpAQCAtMjc3LDcgKzI4OCw3IEBACiAKIAkJLy8gVVNCMSB1c2luZyBleHRlcm5hbCBVTFBJIFBIWQogCQkvL3VzYkAzMDAwIHsKLQkJLy8JY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS11c2IyLWRyIiwgImZzbC11c2IyLWRyIjsKKwkJLy8JY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS11c2IyLWRyIjsKIAkJLy8JcmVnID0gPDB4MzAwMCAweDEwMDA+OwogCQkvLwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJLy8JI3NpemUtY2VsbHMgPSA8MD47CkBAIC0yODUsMTIgKzI5NiwxMSBAQAogCQkvLwlpbnRlcnJ1cHRzID0gPDQzIDB4OD47CiAJCS8vCWRyX21vZGUgPSAib3RnIjsKIAkJLy8JcGh5X3R5cGUgPSAidWxwaSI7Ci0JCS8vCXBvcnQxOwogCQkvL307CiAKIAkJLy8gVVNCMCB1c2luZyBpbnRlcm5hbCBVVE1JIFBIWQogCQl1c2JANDAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXVzYjItZHIiLCAiZnNsLXVzYjItZHIiOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS11c2IyLWRyIjsKIAkJCXJlZyA9IDwweDQwMDAgMHgxMDAwPjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC0yOTgsNyArMzA4LDggQEAKIAkJCWludGVycnVwdHMgPSA8NDQgMHg4PjsKIAkJCWRyX21vZGUgPSAib3RnIjsKIAkJCXBoeV90eXBlID0gInV0bWlfd2lkZSI7Ci0JCQlwb3J0MDsKKwkJCWZzbCxpbnZlcnQtZHJ2dmJ1czsKKwkJCWZzbCxpbnZlcnQtcHdyLWZhdWx0OwogCQl9OwogCiAJCS8vIElPIGNvbnRyb2wKQEAgLTM2NSw3ICszNzYsNyBAQAogCQl9OwogCiAJCWRtYUAxNDAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWRtYTIiOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1kbWEiOwogCQkJcmVnID0gPDB4MTQwMDAgMHgxODAwPjsKIAkJCWludGVycnVwdHMgPSA8NjUgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMKaW5kZXggNmQ4OTJiYS4uOTJmYjE3OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjhtZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cwpAQCAtNTQsOSArNTQsNTIgQEAKIAkJcmVnID0gPDB4MCAweDEwMDAwMDAwPjsKIAl9OwogCi0JYmNzckBmODAwMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjhtZHMtYmNzciI7Ci0JCXJlZyA9IDwweGY4MDAwMDAwIDB4ODAwMD47CisJbG9jYWxidXNAZTAwMDUwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjgtbG9jYWxidXMiLCAiZnNsLHBxMy1sb2NhbGJ1cyIsCisJCQkgICAgICJzaW1wbGUtYnVzIjsKKwkJcmVnID0gPDB4ZTAwMDUwMDAgMHgxMDAwPjsKKworCQlyYW5nZXMgPSA8MHgwIDB4MCAweGZlMDAwMDAwIDB4MDIwMDAwMDAKKwkJCSAgMHgxIDB4MCAweGY4MDAwMDAwIDB4MDAwMDgwMDAKKwkJCSAgMHgyIDB4MCAweGYwMDAwMDAwIDB4MDQwMDAwMDAKKwkJCSAgMHg0IDB4MCAweGY4MDA4MDAwIDB4MDAwMDgwMDAKKwkJCSAgMHg1IDB4MCAweGY4MDEwMDAwIDB4MDAwMDgwMDA+OworCisJCW5vckAwLDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwweDAgMHgwIDB4MDIwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJfTsKKworCQliY3NyQDEsMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU2OG1kcy1iY3NyIjsKKwkJCXJlZyA9IDwxIDAgMHg4MDAwPjsKKwkJCXJhbmdlcyA9IDwwIDEgMCAweDgwMDA+OworCisJCQliY3NyNTogZ3Bpby1jb250cm9sbGVyQDExIHsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTY4bWRzLWJjc3ItZ3BpbyI7CisJCQkJcmVnID0gPDB4NSAweDE+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCX07CisJCX07CisKKwkJcGliQDQsMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTY4bWRzLXBpYiI7CisJCQlyZWcgPSA8NCAwIDB4ODAwMD47CisJCX07CisKKwkJcGliQDUsMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTY4bWRzLXBpYiI7CisJCQlyZWcgPSA8NSAwIDB4ODAwMD47CisJCX07CiAJfTsKIAogCXNvYzg1NjhAZTAwMDAwMDAgewpAQCAtNjEwLDQgKzY1MywyMCBAQAogCQlzbGVlcCA9IDwmcG1jIDB4MDAwODAwMDAgICAvKiBjb250cm9sbGVyICovCiAJCQkgJnBtYyAweDAwMDQwMDAwPjsgLyogbWVzc2FnZSB1bml0ICovCiAJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisKKwkJZ3JlZW4geworCQkJZ3Bpb3MgPSA8JmJjc3I1IDEgMD47CisJCX07CisKKwkJYW1iZXIgeworCQkJZ3Bpb3MgPSA8JmJjc3I1IDIgMD47CisJCX07CisKKwkJcmVkIHsKKwkJCWdwaW9zID0gPCZiY3NyNSAzIDA+OworCQl9OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2thdG1haV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgva2F0bWFpX2RlZmNvbmZpZwppbmRleCBkZWM5MDFmLi5hZjI0NGUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgva2F0bWFpX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgva2F0bWFpX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKLSMgTW9uIEphbiAgNCAxNDo1NTozNCAyMDEwCisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmM1CisjIFR1ZSBKYW4gMjYgMTQ6NDA6NTggMjAxMAogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0xMDYsNiArMTA2LDcgQEAKIENPTkZJR19SRF9HWklQPXkKICMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0FOT05fSU5PREVTPXkKQEAgLTQ0Miw3ICs0NDMsOTAgQEAKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQogQ09ORklHX1BST0NfRVZFTlRTPXkKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfT0ZfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVY9eQpAQCAtNTAwLDcgKzU4NCw3IEBACiAjCiAKICMKLSMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC03NjMsNyArODQ3LDYgQEAKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtODIwLDYgKzkwMyw3IEBACiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CiAjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZwppbmRleCBhODVmOTI3Li42MjJkODRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnCkBAIC0xNTU3LDcgKzE1NTcsNTIgQEAKICMKICMgVEkgVkxZTlEKICMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorQ09ORklHX1NUQUdJTkc9eQorIyBDT05GSUdfU1RBR0lOR19FWENMVURFX0JVSUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUMTMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRTQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUVJTEhBVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lQX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ0hPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTUVESSBpcyBub3Qgc2V0CisjIENPTkZJR19BU1VTX09MRUQgaXMgbm90IHNldAorIyBDT05GSUdfQUxURVJBX1BDSUVfQ0hETUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlNSU8gaXMgbm90IHNldAorIyBDT05GSUdfVFJBTlpQT1JUIGlzIG5vdCBzZXQKKworIworIyBBbmRyb2lkCisjCisjIENPTkZJR19BTkRST0lEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTVCBpcyBub3Qgc2V0CisjIENPTkZJR19QT0hNRUxGUyBpcyBub3Qgc2V0CisjIENPTkZJR19CM0RGRyBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfUEhJU09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMQU45QVVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19IRUNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DUEMgaXMgbm90IHNldAorCisjCisjIFF1YWxjb21tIE1TTSBDYW1lcmEgQW5kIFZpZGVvCisjCisKKyMKKyMgQ2FtZXJhIFNlbnNvciBTZWxlY3Rpb24KKyMKKyMgQ09ORklHX0hZUEVSVl9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hZUEVSVl9CTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19IWVBFUlZfTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19WTUVfQlVTPXkKKworIworIyBWTUUgQnJpZGdlIERyaXZlcnMKKyMKK0NPTkZJR19WTUVfVFNJMTQ4PXkKKworIworIyBWTUUgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1ZNRV9VU0VSIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnCmluZGV4IDQ1NTRkOWIuLjYyYzJiODEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZwpAQCAtMjY1LDcgKzI2NSw3IEBACiAjCiAjIEtlcm5lbCBvcHRpb25zCiAjCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19ISUdITUVNPXkKIENPTkZJR19USUNLX09ORVNIT1Q9eQogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CkBAIC02NTEsNyArNjUxLDcgQEAKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9PRl9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKIAogIwpAQCAtNjcxLDEzICs2NzEsOSBAQAogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwogIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9KRURFQ1BST0JFPXkKIENPTkZJR19NVERfR0VOX1BST0JFPXkKLUNPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLSMgQ09ORklHX01URF9DRklfTk9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUD15Ci0jIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAogQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQpAQCAtNjg4LDcgKzY4NCw2IEBACiBDT05GSUdfTVREX0NGSV9JMj15CiAjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQogIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKQEAgLTE2NTIsNyArMTY0Nyw0NCBAQAogIwogIyBUSSBWTFlOUQogIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CitDT05GSUdfU1RBR0lORz15CisjIENPTkZJR19TVEFHSU5HX0VYQ0xVREVfQlVJTEQgaXMgbm90IHNldAorIyBDT05GSUdfRVQxMzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRUlMSEFVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVBfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDSE8gaXMgbm90IHNldAorIyBDT05GSUdfQ09NRURJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTVVNfT0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19BTFRFUkFfUENJRV9DSERNQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSU1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFOWlBPUlQgaXMgbm90IHNldAorCisjCisjIEFuZHJvaWQKKyMKKyMgQ09ORklHX0FORFJPSUQgaXMgbm90IHNldAorIyBDT05GSUdfRFNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPSE1FTEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0IzREZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9QSElTT04gaXMgbm90IHNldAorIyBDT05GSUdfUExBTjlBVVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVlQ2NjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DUEMgaXMgbm90IHNldAorIyBDT05GSUdfUkRDXzE3RjMxMDFYIGlzIG5vdCBzZXQKK0NPTkZJR19WTUVfQlVTPXkKKworIworIyBWTUUgQnJpZGdlIERyaXZlcnMKKyMKKyMgQ09ORklHX1ZNRV9DQTkxQ1g0MiBpcyBub3Qgc2V0CitDT05GSUdfVk1FX1RTSTE0OD15CisKKyMKKyMgVk1FIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19WTUVfVVNFUiBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC0xNzI5LDcgKzE3NjEsMTcgQEAKICMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CkBAIC0xODc0LDYgKzE5MTYsNyBAQAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSElHSE1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUxMnhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTEyeF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA0NzI3MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUxMnhfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTY5NCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjNgorIyBGcmkgRmViICA1IDExOjQ4OjI5IDIwMTAKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHX1BQQ19CT09LM1NfMzI9eQorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKK0NPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKKyMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19OUl9JUlFTPTUxMgorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorIyBDT05GSUdfUFBDX1VEQkdfMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorQ09ORklHX1JEX0JaSVAyPXkKK0NPTkZJR19SRF9MWk1BPXkKK0NPTkZJR19SRF9MWk89eQorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCREFGPXkKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0RFQURMSU5FPXkKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX01QQzUxMng9eQorQ09ORklHX1BQQ19NUEM1MTIxPXkKK0NPTkZJR19NUEM1MTIxX0FEUz15CisjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQU9ORSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15CitDT05GSUdfSVBJQz15CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19UQVUgaXMgbm90IHNldAorIyBDT05GSUdfUVVJQ0NfRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorQ09ORklHX0haPTEwMDAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFX0lSUT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfTUlHUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19QUENfNEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfRlNMX1NPQz15CitDT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQorIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKK0NPTkZJR19DQU49eQorQ09ORklHX0NBTl9SQVc9eQorQ09ORklHX0NBTl9CQ009eQorCisjCisjIENBTiBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0NBTl9WQ0FOPXkKK0NPTkZJR19DQU5fREVWPXkKKyMgQ09ORklHX0NBTl9DQUxDX0JJVFRJTUlORyBpcyBub3Qgc2V0CitDT05GSUdfQ0FOX01TQ0FOPXkKKyMgQ09ORklHX0NBTl9TSkExMDAwIGlzIG5vdCBzZXQKKworIworIyBDQU4gVVNCIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0NBTl9FTVNfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19DQU5fREVCVUdfREVWSUNFUz15CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFOREFMT05FPXkKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorQ09ORklHX0ZXX0xPQURFUj15CisjIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9PRl9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorQ09ORklHX01URF9ST009eQorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0ZTTF9FTEJDIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9NUEM1MTIxX05GQz15CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCitDT05GSUdfTVREX1VCST15CitDT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgorQ09ORklHX01URF9VQklfQkVCX1JFU0VSVkU9MQorIyBDT05GSUdfTVREX1VCSV9HTFVFQkkgaXMgbm90IHNldAorCisjCisjIFVCSSBkZWJ1Z2dpbmcgb3B0aW9ucworIworIyBDT05GSUdfTVREX1VCSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKK0NPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xCitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCitDT05GSUdfQkxLX0RFVl9YSVA9eQorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCitDT05GSUdfRUVQUk9NX0FUMjQ9eQorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfREFWSUNPTV9QSFk9eQorQ09ORklHX1FTRU1JX1BIWT15CitDT05GSUdfTFhUX1BIWT15CitDT05GSUdfQ0lDQURBX1BIWT15CitDT05GSUdfVklURVNTRV9QSFk9eQorQ09ORklHX1NNU0NfUEhZPXkKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorQ09ORklHX0lDUExVU19QSFk9eQorQ09ORklHX1JFQUxURUtfUEhZPXkKK0NPTkZJR19OQVRJT05BTF9QSFk9eQorQ09ORklHX1NURTEwWFA9eQorQ09ORklHX0xTSV9FVDEwMTFDX1BIWT15CitDT05GSUdfRklYRURfUEhZPXkKK0NPTkZJR19NRElPX0JJVEJBTkc9eQorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19GU19FTkVUPXkKK0NPTkZJR19GU19FTkVUX01QQzUxMjFfRkVDPXkKK0NPTkZJR19GU19FTkVUX0hBU19GRUM9eQorQ09ORklHX0ZTX0VORVRfTURJT19GRUM9eQorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX01QQzUyeHg9eQorQ09ORklHX1NFUklBTF9NUEM1Mnh4X0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9NUEM1Mnh4X0NPTlNPTEVfQkFVRD0xMTUyMDAKKyMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9TVVBQT1JUPXkKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworQ09ORklHX1ZJREVPX0RFVj15CitDT05GSUdfVklERU9fVjRMMl9DT01NT049eQorIyBDT05GSUdfVklERU9fQUxMT1dfVjRMMSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fVjRMMV9DT01QQVQ9eQorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX01FRElBPXkKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKK0NPTkZJR19JUl9DT1JFPXkKK0NPTkZJR19WSURFT19JUj15CisjIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAorQ09ORklHX01FRElBX1RVTkVSPXkKKyMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlTRSBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfVFVORVJfU0lNUExFPXkKK0NPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwPXkKK0NPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3PXkKK0NPTkZJR19NRURJQV9UVU5FUl9URUE1NzYxPXkKK0NPTkZJR19NRURJQV9UVU5FUl9URUE1NzY3PXkKK0NPTkZJR19NRURJQV9UVU5FUl9NVDIwWFg9eQorQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOD15CitDT05GSUdfTUVESUFfVFVORVJfWEM1MDAwPXkKK0NPTkZJR19NRURJQV9UVU5FUl9NQzQ0UzgwMz15CitDT05GSUdfVklERU9fVjRMMj15CitDT05GSUdfVklERU9fQ0FQVFVSRV9EUklWRVJTPXkKK0NPTkZJR19WSURFT19BRFZfREVCVUc9eQorIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0hFTFBFUl9DSElQU19BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19JUl9JMkM9eQorCisjCisjIEVuY29kZXJzL2RlY29kZXJzIGFuZCBvdGhlciBoZWxwZXIgY2hpcHMKKyMKKworIworIyBBdWRpbyBkZWNvZGVycworIworIyBDT05GSUdfVklERU9fVFZBVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UREE3NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1REQTk4NDAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVERBOTg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19URUE2NDE1QyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19URUE2NDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01TUDM0MDAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1M1MzQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NTNTNMMzJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX001Mjc5MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UTFYzMjBBSUMyM0IgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fV004Nzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1dNODczOSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19WUDI3U01QWCBpcyBub3Qgc2V0CisKKyMKKyMgUkRTIGRlY29kZXJzCisjCisjIENPTkZJR19WSURFT19TQUE2NTg4IGlzIG5vdCBzZXQKKworIworIyBWaWRlbyBkZWNvZGVycworIworIyBDT05GSUdfVklERU9fQURWNzE4MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19CVDgxOSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19CVDg1NiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19CVDg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19LUzAxMjcgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1Y3NjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01UOVYwMTEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVENNODI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE3MTEwIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19TQUE3MTFYPXkKKyMgQ09ORklHX1ZJREVPX1NBQTcxN1ggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVFZQNTE0WCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UVlA1MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1ZQWDMyMjAgaXMgbm90IHNldAorCisjCisjIFZpZGVvIGFuZCBhdWRpbyBkZWNvZGVycworIworIyBDT05GSUdfVklERU9fQ1gyNTg0MCBpcyBub3Qgc2V0CisKKyMKKyMgTVBFRyB2aWRlbyBlbmNvZGVycworIworIyBDT05GSUdfVklERU9fQ1gyMzQxWCBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW8gZW5jb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX1NBQTcxMjcgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNzE4NSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19BRFY3MTcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0FEVjcxNzUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVEhTNzMwMyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19BRFY3MzQzIGlzIG5vdCBzZXQKKworIworIyBWaWRlbyBpbXByb3ZlbWVudCBjaGlwcworIworIyBDT05GSUdfVklERU9fVVBENjQwMzFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1VQRDY0MDgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1ZJVkkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNTI0OSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBIGlzIG5vdCBzZXQKK0NPTkZJR19WNExfVVNCX0RSSVZFUlM9eQorIyBDT05GSUdfVVNCX1ZJREVPX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVY9eQorQ09ORklHX1VTQl9HU1BDQT1tCisjIENPTkZJR19VU0JfTTU2MDIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUVjA2WFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dMODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9DT05FWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfRVRPTVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX0ZJTkVQSVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX0pFSUxJTkogaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX01BUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX01SOTczMTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9PVjUxOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfT1Y1MzQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1BBQzIwNyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfUEFDNzMwMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfUEFDNzMxMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU045QzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU09OSVhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TT05JWEogaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1NjEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NROTA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUTkwNUMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NUSzAxNCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1RWMDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1VOUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfVDYxMyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfVFY4NTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9WQzAzMlggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1pDM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1BWUlVTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fSERQVlIgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fRU0yOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NYMjMxWFggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVVNCVklTSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FVDYxWDI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU045QzEwMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkMwMzAxIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX1VTQl9aUjM2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVEtXRUJDQU0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1MyMjU1IGlzIG5vdCBzZXQKK0NPTkZJR19SQURJT19BREFQVEVSUz15CisjIENPTkZJR19JMkNfU0k0NzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1NJNDcxMyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFNCUiBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19TSTQ3MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01SODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1RFQTU3NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fVEVGNjg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9GU0xfRElVPXkKKyMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RSQUdPTlJJU0U9eQorIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfS1lFPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9UV0lOSEFOPXkKK0NPTkZJR19ISURfS0VOU0lOR1RPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorQ09ORklHX0hJRF9OVFJJRz15CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX0hJRF9HUkVFTkFTSUE9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKKyMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1RPUFNFRUQ9eQorQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQorIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfWkVST1BMVVM9eQorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CitDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQorIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0JJR19FTkRJQU5fTU1JTz15CitDT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9ERVNDPXkKKyMgQ09ORklHX1hQU19VU0JfSENEX1hJTElOWCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfRlNMPXkKK0NPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CisjCisKKyMKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX000MVQ4MD15CisjIENPTkZJR19SVENfRFJWX000MVQ4MF9XRFQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfTVBDNTEyMT15CitDT05GSUdfRE1BREVWSUNFUz15CisKKyMKKyMgRE1BIERldmljZXMKKyMKKyMgQ09ORklHX0ZTTF9ETUEgaXMgbm90IHNldAorQ09ORklHX01QQzUxMlhfRE1BPXkKK0NPTkZJR19ETUFfRU5HSU5FPXkKKworIworIyBETUEgQ2xpZW50cworIworIyBDT05GSUdfTkVUX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19BU1lOQ19UWF9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfRE1BVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfRVhUMl9GU19YSVA9eQorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfWElQPXkKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfVUJJRlNfRlM9eQorIyBDT05GSUdfVUJJRlNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVUJJRlNfRlNfQURWQU5DRURfQ09NUFIgaXMgbm90IHNldAorQ09ORklHX1VCSUZTX0ZTX0xaTz15CitDT05GSUdfVUJJRlNfRlNfWkxJQj15CisjIENPTkZJR19VQklGU19GU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMxNj15CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CitDT05GSUdfREVDT01QUkVTU19MWk89eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKK0NPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19MWk89eQorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfQ0xPQ0s9eQorQ09ORklHX1BQQ19MSUJfUkhFQVA9eQorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCmluZGV4IDdiMzgwNGEuLmI1YjI1OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKQEAgLTEzNyw4ICsxMzcsOSBAQAogQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CkBAIC0xOTEsNiArMTkyLDcgQEAKIENPTkZJR19MUEFSQ0ZHPXkKIENPTkZJR19QUENfU01MUEFSPXkKIENPTkZJR19DTU09eQorQ09ORklHX0RUTD15CiBDT05GSUdfUFBDX0lTRVJJRVM9eQogCiAjCkBAIC0zMjgsOSArMzMwLDEwIEBACiBDT05GSUdfS0VYRUM9eQogIyBDT05GSUdfUEhZUF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQotIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CitDT05GSUdfTlVNQT15CitDT05GSUdfTk9ERVNfU0hJRlQ9OAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0yNTYKIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQpAQCAtMzM5LDYgKzM0Miw3IEBACiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKIENPTkZJR19TUEFSU0VNRU09eQorQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVM9eQogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9FWFRSRU1FPXkKIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEU9eQpAQCAtMzU0LDExICszNTgsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfTk9ERVNfU1BBTl9PVEhFUl9OT0RFUz15CiBDT05GSUdfQVJDSF9NRU1PUllfUFJPQkU9eQogQ09ORklHX1BQQ19IQVNfSEFTSF82NEs9eQogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMwotIyBDT05GSUdfU0NIRURfU01UIGlzIG5vdCBzZXQKK0NPTkZJR19TQ0hFRF9TTVQ9eQogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKQEAgLTc5MCwxMiArNzk1LDEyIEBACiBDT05GSUdfU0NTSV9JUFJfVFJBQ0U9eQogQ09ORklHX1NDU0lfSVBSX0RVTVA9eQogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9RTEFfRkM9bQogIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTFBGQz1tCiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9ERUJVRz1tCisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldApAQCAtODY3LDkgKzg3Miw4IEBACiBDT05GSUdfTURfTElORUFSPXkKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQotQ09ORklHX01EX1JBSUQxMD15Ci1DT05GSUdfTURfUkFJRDQ1Nj15Ci1DT05GSUdfTURfUkFJRDVfUkVTSEFQRT15CitDT05GSUdfTURfUkFJRDEwPW0KK0NPTkZJR19NRF9SQUlENDU2PW0KIENPTkZJR19NRF9NVUxUSVBBVEg9bQogQ09ORklHX01EX0ZBVUxUWT1tCiBDT05GSUdfQkxLX0RFVl9ETT15CkBAIC05ODQsNyArOTg4LDcgQEAKIENPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JPXkKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPXkKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CitDT05GSUdfRTEwMDBFPW0KICMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CkBAIC0xMDA2LDE5ICsxMDEwLDE5IEBACiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDE9bQorQ09ORklHX0NIRUxTSU9fVDM9bQogQ09ORklHX0VIRUE9bQogIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CitDT05GSUdfSVhHQkU9bQogQ09ORklHX0lYR0I9bQotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKK0NPTkZJR19TMklPPW0KK0NPTkZJR19NWVJJMTBHRT1tCitDT05GSUdfTkVUWEVOX05JQz1tCiAjIENPTkZJR19OSVUgaXMgbm90IHNldAogQ09ORklHX1BBU0VNSV9NQUM9eQotIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorQ09ORklHX01MWDRfRU49bQorQ09ORklHX01MWDRfQ09SRT1tCiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CkBAIC0xMTY5LDcgKzExNzMsNyBAQAogQ09ORklHX0hBU19UWFg5X1NFUklBTD15CiBDT05GSUdfU0VSSUFMX1RYWDlfTlJfVUFSVFM9NgogQ09ORklHX1NFUklBTF9UWFg5X0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0pTTT1tCiAjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CkBAIC0xNTg2LDcgKzE1OTAsNyBAQAogQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj1tCiAjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKIApAQCAtMTY4NiwyMSArMTY5MCwyMiBAQAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5GSU5JQkFORD1tCi0jIENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkRfVVNFUl9BQ0NFU1MgaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfVVNFUl9NQUQ9bQorQ09ORklHX0lORklOSUJBTkRfVVNFUl9BQ0NFU1M9bQorQ09ORklHX0lORklOSUJBTkRfVVNFUl9NRU09eQogQ09ORklHX0lORklOSUJBTkRfQUREUl9UUkFOUz15CiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQT1tCiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRz15Ci0jIENPTkZJR19JTkZJTklCQU5EX0lQQVRIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX0lQQVRIPW0KIENPTkZJR19JTkZJTklCQU5EX0VIQ0E9bQogIyBDT05GSUdfSU5GSU5JQkFORF9BTVNPMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0lORklOSUJBTkQgaXMgbm90IHNldAorQ09ORklHX01MWDRfSU5GSU5JQkFORD1tCiAjIENPTkZJR19JTkZJTklCQU5EX05FUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQj1tCi0jIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0NNIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX0lQT0lCX0NNPXkKIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHPXkKICMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EX1NSUCBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9TUlA9bQogQ09ORklHX0lORklOSUJBTkRfSVNFUj1tCiBDT05GSUdfRURBQz15CiAKQEAgLTE3OTgsNyArMTgwMyw3IEBACiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQogQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQotQ09ORklHX0pGU19GUz15CitDT05GSUdfSkZTX0ZTPW0KIENPTkZJR19KRlNfUE9TSVhfQUNMPXkKIENPTkZJR19KRlNfU0VDVVJJVFk9eQogIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTE4MTEsMTQgKzE4MTYsMjIgQEAKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfT0NGUzJfRlM9bQorQ09ORklHX09DRlMyX0ZTX08yQ0I9bQorQ09ORklHX09DRlMyX0ZTX1NUQVRTPXkKK0NPTkZJR19PQ0ZTMl9ERUJVR19NQVNLTE9HPXkKKyMgQ09ORklHX09DRlMyX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0NPTVBBVF9KQkQgaXMgbm90IHNldAorQ09ORklHX0JUUkZTX0ZTPW0KK0NPTkZJR19CVFJGU19GU19QT1NJWF9BQ0w9eQorQ09ORklHX05JTEZTMl9GUz1tCiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz1tCi0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GVVNFX0ZTPW0KIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC0xODUxLDcgKzE4NjQsNyBAQAogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0hVR0VUTEJfUEFHRT15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ORklHRlNfRlM9bQogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTIwNzUsNyArMjA4OCw3IEBACiBDT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15CiBDT05GSUdfREVCVUdHRVI9eQogQ09ORklHX0lSUVNUQUNLUz15Ci0jIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19WSVJRX0RFQlVHPXkKIENPTkZJR19CT09UWF9URVhUPXkKICMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcKaW5kZXggY2E5ZmY5YS4uNDFkZTNkZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcKQEAgLTE1OSw3ICsxNTksNyBAQAogQ09ORklHX0tNT0Q9eQogQ09ORklHX1NUT1BfTUFDSElORT15CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JT19UUkFDRT15CiBDT05GSUdfQkxLX0RFVl9CU0c9eQogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogQ09ORklHX0JMT0NLX0NPTVBBVD15CkBAIC0xOTEsNiArMTkxLDcgQEAKIENPTkZJR19MUEFSQ0ZHPXkKIENPTkZJR19QUENfU01MUEFSPXkKIENPTkZJR19DTU09eQorQ09ORklHX0RUTD15CiAjIENPTkZJR19QUENfSVNFUklFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTUFQTEUgaXMgbm90IHNldApAQCAtMjU1LDcgKzI1Niw4IEBACiAjIENPTkZJR19QSFlQX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CiBDT05GSUdfTlVNQT15Ci1DT05GSUdfTk9ERVNfU0hJRlQ9NAorQ09ORklHX05PREVTX1NISUZUPTgKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MjU2CiBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQpAQCAtMjcwLDcgKzI3Miw5IEBACiBDT05GSUdfU1BBUlNFTUVNX0VYVFJFTUU9eQogQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRT15CiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVA9eQotIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19NRU1PUllfSE9UUExVR19TUEFSU0U9eQorQ09ORklHX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CkBAIC03MDUsNyArNzA5LDcgQEAKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQogQ09ORklHX01EX1JBSUQxMD1tCi0jIENPTkZJR19NRF9SQUlENDU2IGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENDU2PW0KIENPTkZJR19NRF9NVUxUSVBBVEg9bQogQ09ORklHX01EX0ZBVUxUWT1tCiBDT05GSUdfQkxLX0RFVl9ETT15CkBAIC04MDAsNyArODA0LDcgQEAKIENPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JPXkKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPXkKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CitDT05GSUdfRTEwMDBFPW0KICMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CkBAIC04MTgsMTggKzgyMiwxOCBAQAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QxPW0KK0NPTkZJR19DSEVMU0lPX1QzPW0KIENPTkZJR19FSEVBPXkKICMgQ09ORklHX0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAorQ09ORklHX0lYR0JFPW0KIENPTkZJR19JWEdCPW0KIENPTkZJR19TMklPPW0KLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorQ09ORklHX01ZUkkxMEdFPW0KK0NPTkZJR19ORVRYRU5fTklDPW0KICMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfTUxYNF9FTj1tCitDT05GSUdfTUxYNF9DT1JFPW0KICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKQEAgLTg5NCw3ICs4OTgsNyBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9bQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCiAjCkBAIC0xMjcxLDcgKzEyNzUsNyBAQAogQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQorQ09ORklHX1VTQl9NT049bQogIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CiAKQEAgLTEzMTEsNyArMTMxNSw3IEBACiAjCiAjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KICMKLUNPTkZJR19VU0JfU1RPUkFHRT15CitDT05GSUdfVVNCX1NUT1JBR0U9bQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKQEAgLTEzMjIsNyArMTMyNiw3IEBACiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSD15CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CkBAIC0xMzc3LDE3ICsxMzgxLDE3IEBACiBDT05GSUdfSU5GSU5JQkFORF9BRERSX1RSQU5TPXkKIENPTkZJR19JTkZJTklCQU5EX01USENBPW0KIENPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHPXkKLSMgQ09ORklHX0lORklOSUJBTkRfSVBBVEggaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfSVBBVEg9bQogQ09ORklHX0lORklOSUJBTkRfRUhDQT1tCiAjIENPTkZJR19JTkZJTklCQU5EX0FNU08xMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfSU5GSU5JQkFORCBpcyBub3Qgc2V0CitDT05GSUdfTUxYNF9JTkZJTklCQU5EPW0KICMgQ09ORklHX0lORklOSUJBTkRfTkVTIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX0lQT0lCPW0KLSMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfQ00gaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfSVBPSUJfQ009eQogQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUc9eQogIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVR19EQVRBIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX1NSUD1tCi0jIENPTkZJR19JTkZJTklCQU5EX0lTRVIgaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfSVNFUj1tCiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKQEAgLTE0NDMsNiArMTQ0Nyw5IEBACiBDT05GSUdfT0NGUzJfREVCVUdfTUFTS0xPRz15CiAjIENPTkZJR19PQ0ZTMl9ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9DT01QQVRfSkJEIGlzIG5vdCBzZXQKK0NPTkZJR19CVFJGU19GUz1tCitDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19OSUxGUzJfRlM9bQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xNDU1LDggKzE0NjIsOCBAQAogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiBDT05GSUdfSVNPOTY2MF9GUz15Ci1DT05GSUdfSk9MSUVUPXkKLUNPTkZJR19aSVNPRlM9eQorIyBDT05GSUdfSk9MSUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0CiBDT05GSUdfVURGX0ZTPW0KIENPTkZJR19VREZfTkxTPXkKIApAQCAtMTUwOCwxNCArMTUxNSwxNCBAQAogQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15CiBDT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ORlNEPXkKK0NPTkZJR19ORlNEPW0KIENPTkZJR19ORlNEX1YyX0FDTD15CiBDT05GSUdfTkZTRF9WMz15CiBDT05GSUdfTkZTRF9WM19BQ0w9eQogQ09ORklHX05GU0RfVjQ9eQogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQorQ09ORklHX0VYUE9SVEZTPW0KIENPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CkBAIC0xNjgxLDEyICsxNjg4LDEyIEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX0hDQUxMX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAorQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1Q9eQorQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVD15CitDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVD15CiBDT05GSUdfWE1PTj15CiBDT05GSUdfWE1PTl9ERUZBVUxUPXkKIENPTkZJR19YTU9OX0RJU0FTU0VNQkxZPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hc20tY29tcGF0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXNtLWNvbXBhdC5oCmluZGV4IDhmMGZlNzkuLmMxYjQ3NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hc20tY29tcGF0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2FzbS1jb21wYXQuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX0FTTV9QT1dFUlBDX0FTTV9DT01QQVRfSAogCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3BwYy1vcGNvZGUuaD4KIAogI2lmZGVmIF9fQVNTRU1CTFlfXwogIyAgZGVmaW5lIHN0cmluZ2lmeV9pbl9jKC4uLikJX19WQV9BUkdTX18KQEAgLTI0LDcgKzI1LDcgQEAKICNkZWZpbmUgUFBDX0xPTkcJc3RyaW5naWZ5X2luX2MoLmxsb25nKQogI2RlZmluZSBQUENfTE9OR19BTElHTglzdHJpbmdpZnlfaW5fYyguYmFsaWduIDgpCiAjZGVmaW5lIFBQQ19UTE5FSQlzdHJpbmdpZnlfaW5fYyh0ZG5laSkKLSNkZWZpbmUgUFBDX0xMQVJYCXN0cmluZ2lmeV9pbl9jKGxkYXJ4KQorI2RlZmluZSBQUENfTExBUlgodCwgYSwgYiwgZWgpCVBQQ19MREFSWCh0LCBhLCBiLCBlaCkKICNkZWZpbmUgUFBDX1NUTENYCXN0cmluZ2lmeV9pbl9jKHN0ZGN4LikKICNkZWZpbmUgUFBDX0NOVExaTAlzdHJpbmdpZnlfaW5fYyhjbnRsemQpCiAKQEAgLTQ2LDcgKzQ3LDcgQEAKICNkZWZpbmUgUFBDX0xPTkcJc3RyaW5naWZ5X2luX2MoLmxvbmcpCiAjZGVmaW5lIFBQQ19MT05HX0FMSUdOCXN0cmluZ2lmeV9pbl9jKC5iYWxpZ24gNCkKICNkZWZpbmUgUFBDX1RMTkVJCXN0cmluZ2lmeV9pbl9jKHR3bmVpKQotI2RlZmluZSBQUENfTExBUlgJc3RyaW5naWZ5X2luX2MobHdhcngpCisjZGVmaW5lIFBQQ19MTEFSWCh0LCBhLCBiLCBlaCkJUFBDX0xXQVJYKHQsIGEsIGIsIGVoKQogI2RlZmluZSBQUENfU1RMQ1gJc3RyaW5naWZ5X2luX2Moc3R3Y3guKQogI2RlZmluZSBQUENfQ05UTFpMCXN0cmluZ2lmeV9pbl9jKGNudGx6dykKICNkZWZpbmUgUFBDX01UT0NSRglzdHJpbmdpZnlfaW5fYyhtdGNyZikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCA0MDEyNDgzLi5iOGYxNTJlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC00OSwxMyArNDksMTMgQEAKIAlpbnQgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbHdhcngJJTAsMCwlMgkJIyBhdG9taWNfYWRkX3JldHVyblxuXAogCWFkZAklMCwlMSwlMFxuIgogCVBQQzQwNV9FUlI3NygwLCUyKQogIglzdHdjeC4JJTAsMCwlMiBcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiICh0KQogCTogInIiIChhKSwgInIiICgmdi0+Y291bnRlcikKIAk6ICJjYyIsICJtZW1vcnkiKTsKQEAgLTg1LDEzICs4NSwxMyBAQAogCWludCB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAklMCwwLCUyCQkjIGF0b21pY19zdWJfcmV0dXJuXG5cCiAJc3ViZgklMCwlMSwlMFxuIgogCVBQQzQwNV9FUlI3NygwLCUyKQogIglzdHdjeC4JJTAsMCwlMiBcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiICh0KQogCTogInIiIChhKSwgInIiICgmdi0+Y291bnRlcikKIAk6ICJjYyIsICJtZW1vcnkiKTsKQEAgLTExOSwxMyArMTE5LDEzIEBACiAJaW50IHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWx3YXJ4CSUwLDAsJTEJCSMgYXRvbWljX2luY19yZXR1cm5cblwKIAlhZGRpYwklMCwlMCwxXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTEpCiAiCXN0d2N4LgklMCwwLCUxIFxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHQpCiAJOiAiciIgKCZ2LT5jb3VudGVyKQogCTogImNjIiwgInhlciIsICJtZW1vcnkiKTsKQEAgLTE2MywxMyArMTYzLDEzIEBACiAJaW50IHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWx3YXJ4CSUwLDAsJTEJCSMgYXRvbWljX2RlY19yZXR1cm5cblwKIAlhZGRpYwklMCwlMCwtMVxuIgogCVBQQzQwNV9FUlI3NygwLCUxKQogIglzdHdjeC4JJTAsMCwlMVxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHQpCiAJOiAiciIgKCZ2LT5jb3VudGVyKQogCTogImNjIiwgInhlciIsICJtZW1vcnkiKTsKQEAgLTE5NCw3ICsxOTQsNyBAQAogCWludCB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbHdhcngJJTAsMCwlMQkJIyBhdG9taWNfYWRkX3VubGVzc1xuXAogCWNtcHcJMCwlMCwlMyBcblwKIAliZXEtCTJmIFxuXApAQCAtMjAyLDcgKzIwMiw3IEBACiAJUFBDNDA1X0VSUjc3KDAsJTIpCiAiCXN0d2N4LgklMCwwLCUxIFxuXAogCWJuZS0JMWIgXG4iCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogIglzdWJmCSUwLCUyLCUwIFxuXAogMjoiCiAJOiAiPSZyIiAodCkKQEAgLTIyNyw3ICsyMjcsNyBAQAogCWludCB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAklMCwwLCUxCQkjIGF0b21pY19kZWNfaWZfcG9zaXRpdmVcblwKIAljbXB3aQklMCwxXG5cCiAJYWRkaQklMCwlMCwtMVxuXApAQCAtMjM1LDcgKzIzNSw3IEBACiAJUFBDNDA1X0VSUjc3KDAsJTEpCiAiCXN0d2N4LgklMCwwLCUxXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJIlxuXAogMjoiCTogIj0mYiIgKHQpCiAJOiAiciIgKCZ2LT5jb3VudGVyKQpAQCAtMjg2LDEyICsyODYsMTIgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWxkYXJ4CSUwLDAsJTIJCSMgYXRvbWljNjRfYWRkX3JldHVyblxuXAogCWFkZAklMCwlMSwlMFxuXAogCXN0ZGN4LgklMCwwLCUyIFxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHQpCiAJOiAiciIgKGEpLCAiciIgKCZ2LT5jb3VudGVyKQogCTogImNjIiwgIm1lbW9yeSIpOwpAQCAtMzIwLDEyICszMjAsMTIgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWxkYXJ4CSUwLDAsJTIJCSMgYXRvbWljNjRfc3ViX3JldHVyblxuXAogCXN1YmYJJTAsJTEsJTBcblwKIAlzdGRjeC4JJTAsMCwlMiBcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiICh0KQogCTogInIiIChhKSwgInIiICgmdi0+Y291bnRlcikKIAk6ICJjYyIsICJtZW1vcnkiKTsKQEAgLTM1MiwxMiArMzUyLDEyIEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsZGFyeAklMCwwLCUxCQkjIGF0b21pYzY0X2luY19yZXR1cm5cblwKIAlhZGRpYwklMCwlMCwxXG5cCiAJc3RkY3guCSUwLDAsJTEgXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJOiAiPSZyIiAodCkKIAk6ICJyIiAoJnYtPmNvdW50ZXIpCiAJOiAiY2MiLCAieGVyIiwgIm1lbW9yeSIpOwpAQCAtMzk0LDEyICszOTQsMTIgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWxkYXJ4CSUwLDAsJTEJCSMgYXRvbWljNjRfZGVjX3JldHVyblxuXAogCWFkZGljCSUwLCUwLC0xXG5cCiAJc3RkY3guCSUwLDAsJTFcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiICh0KQogCTogInIiICgmdi0+Y291bnRlcikKIAk6ICJjYyIsICJ4ZXIiLCAibWVtb3J5Iik7CkBAIC00MTksMTMgKzQxOSwxMyBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbGRhcngJJTAsMCwlMQkJIyBhdG9taWM2NF9kZWNfaWZfcG9zaXRpdmVcblwKIAlhZGRpYy4JJTAsJTAsLTFcblwKIAlibHQtCTJmXG5cCiAJc3RkY3guCSUwLDAsJTFcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAkiXG5cCiAyOiIJOiAiPSZyIiAodCkKIAk6ICJyIiAoJnYtPmNvdW50ZXIpCkBAIC00NTEsMTQgKzQ1MSwxNCBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWxkYXJ4CSUwLDAsJTEJCSMgYXRvbWljX2FkZF91bmxlc3NcblwKIAljbXBkCTAsJTAsJTMgXG5cCiAJYmVxLQkyZiBcblwKIAlhZGQJJTAsJTIsJTAgXG4iCiAiCXN0ZGN4LgklMCwwLCUxIFxuXAogCWJuZS0JMWIgXG4iCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogIglzdWJmCSUwLCUyLCUwIFxuXAogMjoiCiAJOiAiPSZyIiAodCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCA1NmYyZjJlLi4zMDk2NGFlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC02NSw3ICs2NSw3IEBACiAJdW5zaWduZWQgbG9uZyAqcCA9ICh1bnNpZ25lZCBsb25nICopX3A7CVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJXAogCXByZWZpeAkJCQkJXAotIjE6IglQUENfTExBUlggIiUwLDAsJTNcbiIJCQlcCisiMToiCVBQQ19MTEFSWCglMCwwLCUzLDApICJcbiIJCVwKIAlzdHJpbmdpZnlfaW5fYyhvcCkgIiUwLCUwLCUyXG4iCQlcCiAJUFBDNDA1X0VSUjc3KDAsJTMpCQkJXAogCVBQQ19TVExDWCAiJTAsMCwlM1xuIgkJCVwKQEAgLTc4LDcgKzc4LDcgQEAKIAogREVGSU5FX0JJVE9QKHNldF9iaXRzLCBvciwgIiIsICIiKQogREVGSU5FX0JJVE9QKGNsZWFyX2JpdHMsIGFuZGMsICIiLCAiIikKLURFRklORV9CSVRPUChjbGVhcl9iaXRzX3VubG9jaywgYW5kYywgTFdTWU5DX09OX1NNUCwgIiIpCitERUZJTkVfQklUT1AoY2xlYXJfYml0c191bmxvY2ssIGFuZGMsIFBQQ19SRUxFQVNFX0JBUlJJRVIsICIiKQogREVGSU5FX0JJVE9QKGNoYW5nZV9iaXRzLCB4b3IsICIiLCAiIikKIAogc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKQEAgLTEwMywzMSArMTAzLDM1IEBACiAKIC8qIExpa2UgREVGSU5FX0JJVE9QKCksIHdpdGggY2hhbmdlcyB0byB0aGUgYXJndW1lbnRzIHRvICdvcCcgYW5kIHRoZSBvdXRwdXQKICAqIG9wZXJhbmRzLiAqLwotI2RlZmluZSBERUZJTkVfVEVTVE9QKGZuLCBvcCwgcHJlZml4LCBwb3N0Zml4KQlcCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGZuKAkJXAotCQl1bnNpZ25lZCBsb25nIG1hc2ssCQlcCi0JCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKl9wKQlcCi17CQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgb2xkLCB0OwkJCVwKLQl1bnNpZ25lZCBsb25nICpwID0gKHVuc2lnbmVkIGxvbmcgKilfcDsJXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQlcCi0JcHJlZml4CQkJCQlcCi0iMToiCVBQQ19MTEFSWCAiJTAsMCwlM1xuIgkJCVwKLQlzdHJpbmdpZnlfaW5fYyhvcCkgIiUxLCUwLCUyXG4iCQlcCi0JUFBDNDA1X0VSUjc3KDAsJTMpCQkJXAotCVBQQ19TVExDWCAiJTEsMCwlM1xuIgkJCVwKLQkiYm5lLSAxYlxuIgkJCQlcCi0JcG9zdGZpeAkJCQkJXAotCTogIj0mciIgKG9sZCksICI9JnIiICh0KQkJXAotCTogInIiIChtYXNrKSwgInIiIChwKQkJCVwKLQk6ICJjYyIsICJtZW1vcnkiKTsJCQlcCi0JcmV0dXJuIChvbGQgJiBtYXNrKTsJCQlcCisjZGVmaW5lIERFRklORV9URVNUT1AoZm4sIG9wLCBwcmVmaXgsIHBvc3RmaXgsIGVoKQlcCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGZuKAkJCVwKKwkJdW5zaWduZWQgbG9uZyBtYXNrLAkJCVwKKwkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqX3ApCQlcCit7CQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIG9sZCwgdDsJCQkJXAorCXVuc2lnbmVkIGxvbmcgKnAgPSAodW5zaWduZWQgbG9uZyAqKV9wOwkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJXAorCXByZWZpeAkJCQkJCVwKKyIxOiIJUFBDX0xMQVJYKCUwLDAsJTMsZWgpICJcbiIJCQlcCisJc3RyaW5naWZ5X2luX2Mob3ApICIlMSwlMCwlMlxuIgkJCVwKKwlQUEM0MDVfRVJSNzcoMCwlMykJCQkJXAorCVBQQ19TVExDWCAiJTEsMCwlM1xuIgkJCQlcCisJImJuZS0gMWJcbiIJCQkJCVwKKwlwb3N0Zml4CQkJCQkJXAorCTogIj0mciIgKG9sZCksICI9JnIiICh0KQkJCVwKKwk6ICJyIiAobWFzayksICJyIiAocCkJCQkJXAorCTogImNjIiwgIm1lbW9yeSIpOwkJCQlcCisJcmV0dXJuIChvbGQgJiBtYXNrKTsJCQkJXAogfQogCi1ERUZJTkVfVEVTVE9QKHRlc3RfYW5kX3NldF9iaXRzLCBvciwgTFdTWU5DX09OX1NNUCwgSVNZTkNfT05fU01QKQotREVGSU5FX1RFU1RPUCh0ZXN0X2FuZF9zZXRfYml0c19sb2NrLCBvciwgIiIsIElTWU5DX09OX1NNUCkKLURFRklORV9URVNUT1AodGVzdF9hbmRfY2xlYXJfYml0cywgYW5kYywgTFdTWU5DX09OX1NNUCwgSVNZTkNfT05fU01QKQotREVGSU5FX1RFU1RPUCh0ZXN0X2FuZF9jaGFuZ2VfYml0cywgeG9yLCBMV1NZTkNfT05fU01QLCBJU1lOQ19PTl9TTVApCitERUZJTkVfVEVTVE9QKHRlc3RfYW5kX3NldF9iaXRzLCBvciwgUFBDX1JFTEVBU0VfQkFSUklFUiwKKwkgICAgICBQUENfQUNRVUlSRV9CQVJSSUVSLCAwKQorREVGSU5FX1RFU1RPUCh0ZXN0X2FuZF9zZXRfYml0c19sb2NrLCBvciwgIiIsCisJICAgICAgUFBDX0FDUVVJUkVfQkFSUklFUiwgMSkKK0RFRklORV9URVNUT1AodGVzdF9hbmRfY2xlYXJfYml0cywgYW5kYywgUFBDX1JFTEVBU0VfQkFSUklFUiwKKwkgICAgICBQUENfQUNRVUlSRV9CQVJSSUVSLCAwKQorREVGSU5FX1RFU1RPUCh0ZXN0X2FuZF9jaGFuZ2VfYml0cywgeG9yLCBQUENfUkVMRUFTRV9CQVJSSUVSLAorCSAgICAgIFBQQ19BQ1FVSVJFX0JBUlJJRVIsIDApCiAKIHN0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9zZXRfYml0KHVuc2lnbmVkIGxvbmcgbnIsCiAJCQkJICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCkBAIC0xNTgsNyArMTYyLDcgQEAKIAogc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2NsZWFyX2JpdF91bmxvY2soaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewotCV9fYXNtX18gX192b2xhdGlsZV9fKExXU1lOQ19PTl9TTVAgIiIgOjo6ICJtZW1vcnkiKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyhQUENfUkVMRUFTRV9CQVJSSUVSICIiIDo6OiAibWVtb3J5Iik7CiAJX19jbGVhcl9iaXQobnIsIGFkZHIpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCmluZGV4IDgwZjMxNWUuLmFiYjgzM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCkBAIC0zODEsOSArMzgxLDkgQEAKICNkZWZpbmUgQ1BVX0ZUUlNfR0VORVJJQ18zMgkoQ1BVX0ZUUl9DT01NT04gfCBDUFVfRlRSX05PRFNJU1JBTElHTikKIAogLyogNjQtYml0IENQVXMgKi8KLSNkZWZpbmUgQ1BVX0ZUUlNfUE9XRVIzCShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXAorI2RlZmluZSBDUFVfRlRSU19QT1dFUjMJKENQVV9GVFJfVVNFX1RCIHwgXAogCSAgICBDUFVfRlRSX0lBQlIgfCBDUFVfRlRSX1BQQ19MRSkKLSNkZWZpbmUgQ1BVX0ZUUlNfUlM2NAkoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0xXU1lOQyB8IFwKKyNkZWZpbmUgQ1BVX0ZUUlNfUlM2NAkoQ1BVX0ZUUl9VU0VfVEIgfCBcCiAJICAgIENQVV9GVFJfSUFCUiB8IFwKIAkgICAgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfQ1RSTCkKICNkZWZpbmUgQ1BVX0ZUUlNfUE9XRVI0CShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRpbWUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKaW5kZXggZmExOWYzZi4uOGJkYzZhOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRpbWUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGltZS5oCkBAIC03MywxMCArNzMsOSBAQAogc3RhdGljIGlubGluZSBjcHV0aW1lX3QgY3B1dGltZV90b19zY2FsZWQoY29uc3QgY3B1dGltZV90IGN0KQogewogCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TUFVSUikgJiYKLQkgICAgcGVyX2NwdShjcHV0aW1lX2xhc3RfZGVsdGEsIHNtcF9wcm9jZXNzb3JfaWQoKSkpCi0JCXJldHVybiBjdCAqCi0JCQlwZXJfY3B1KGNwdXRpbWVfc2NhbGVkX2xhc3RfZGVsdGEsIHNtcF9wcm9jZXNzb3JfaWQoKSkvCi0JCQlwZXJfY3B1KGNwdXRpbWVfbGFzdF9kZWx0YSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkgICAgX19nZXRfY3B1X3ZhcihjcHV0aW1lX2xhc3RfZGVsdGEpKQorCQlyZXR1cm4gY3QgKiBfX2dldF9jcHVfdmFyKGNwdXRpbWVfc2NhbGVkX2xhc3RfZGVsdGEpIC8KKwkJCSAgICBfX2dldF9jcHVfdmFyKGNwdXRpbWVfbGFzdF9kZWx0YSk7CiAJcmV0dXJuIGN0OwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmVhdHVyZS1maXh1cHMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mZWF0dXJlLWZpeHVwcy5oCmluZGV4IGNiZDRkZmEuLjk2YTdkMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mZWF0dXJlLWZpeHVwcy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mZWF0dXJlLWZpeHVwcy5oCkBAIC0xNjUsNyArMTY1LDcgQEAKIAkucHVzaHNlY3Rpb24gc2VjdCwiYSI7CQkJCVwKIAkuYWxpZ24gMjsJCQkJCVwKIGxhYmVsIyMzOgkJCQkJICAgICAgIAlcCi0JLmxvbmcgbGFiZWwjIzFiLWxhYmVsIyMzYjsJCQlcCisJRlRSX0VOVFJZX09GRlNFVCBsYWJlbCMjMWItbGFiZWwjIzNiOwkJXAogCS5wb3BzZWN0aW9uOwogCiAjZW5kaWYgLyogX19BU01fUE9XRVJQQ19GRUFUVVJFX0ZJWFVQU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZnV0ZXguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mdXRleC5oCmluZGV4IDk2OTZjYzMuLjdjNTg5ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mdXRleC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mdXRleC5oCkBAIC0xMSw3ICsxMSw3IEBACiAKICNkZWZpbmUgX19mdXRleF9hdG9taWNfb3AoaW5zbiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZykgXAogICBfX2FzbV9fIF9fdm9sYXRpbGUgKCBcCi0JTFdTWU5DX09OX1NNUCBcCisJUFBDX1JFTEVBU0VfQkFSUklFUiBcCiAiMToJbHdhcngJJTAsMCwlMlxuIiBcCiAJaW5zbiBcCiAJUFBDNDA1X0VSUjc3KDAsICUyKSBcCkBAIC05MCwxNCArOTAsMTQgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICBMV1NZTkNfT05fU01QCisgICAgICAgIFBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOiAgICAgbHdhcnggICAlMCwwLCUyICAgICAgICAgIyBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pY1xuXAogICAgICAgICBjbXB3ICAgIDAsJTAsJTNcblwKICAgICAgICAgYm5lLSAgICAzZlxuIgogICAgICAgICBQUEM0MDVfRVJSNzcoMCwlMikKICIyOiAgICAgc3R3Y3guICAlNCwwLCUyXG5cCiAgICAgICAgIGJuZS0gICAgMWJcbiIKLSAgICAgICAgSVNZTkNfT05fU01QCisgICAgICAgIFBQQ19BQ1FVSVJFX0JBUlJJRVIKICIzOgkuc2VjdGlvbiAuZml4dXAsXCJheFwiXG5cCiA0OglsaQklMCwlNVxuXAogCWIJM2JcblwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IGZiM2MwNWEuLjMxNDdhMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMSArMSwyOSBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2hhcmRpcnEuaD4KKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0hBUkRJUlFfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfSEFSRElSUV9ICisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7CisJdW5zaWduZWQgaW50IHRpbWVyX2lycXM7CisJdW5zaWduZWQgaW50IHBtdV9pcnFzOworCXVuc2lnbmVkIGludCBtY2VfZXhjZXB0aW9uczsKKwl1bnNpZ25lZCBpbnQgc3B1cmlvdXNfaXJxczsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkIGlycV9jcHVzdGF0X3Q7CisKK0RFQ0xBUkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChpcnFfY3B1c3RhdF90LCBpcnFfc3RhdCk7CisKKyNkZWZpbmUgX19BUkNIX0lSUV9TVEFUCisKKyNkZWZpbmUgbG9jYWxfc29mdGlycV9wZW5kaW5nKCkJX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkuX19zb2Z0aXJxX3BlbmRpbmcKKworc3RhdGljIGlubGluZSB2b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJcHJpbnRrKEtFUk5fQ1JJVCAidW5leHBlY3RlZCBJUlEgdHJhcCBhdCB2ZWN0b3IgJTAyeFxuIiwgaXJxKTsKK30KKworZXh0ZXJuIHU2NCBhcmNoX2lycV9zdGF0X2NwdSh1bnNpZ25lZCBpbnQgY3B1KTsKKyNkZWZpbmUgYXJjaF9pcnFfc3RhdF9jcHUJYXJjaF9pcnFfc3RhdF9jcHUKKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19IQVJESVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9sb2NhbC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xvY2FsLmgKaW5kZXggODRiNDU3YS4uY2U1OGM4MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xvY2FsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xvY2FsLmgKQEAgLTI0LDcgKzI0LDcgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOiIJUFBDX0xMQVJYCSIlMCwwLCUyCQkjIGxvY2FsX2FkZF9yZXR1cm5cblwKKyIxOiIJUFBDX0xMQVJYKCUwLDAsJTIsMCkgIgkJCSMgbG9jYWxfYWRkX3JldHVyblxuXAogCWFkZAklMCwlMSwlMFxuIgogCVBQQzQwNV9FUlI3NygwLCUyKQogCVBQQ19TVExDWAkiJTAsMCwlMiBcblwKQEAgLTQzLDcgKzQzLDcgQEAKIAlsb25nIHQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOiIJUFBDX0xMQVJYCSIlMCwwLCUyCQkjIGxvY2FsX3N1Yl9yZXR1cm5cblwKKyIxOiIJUFBDX0xMQVJYKCUwLDAsJTIsMCkgIgkJCSMgbG9jYWxfc3ViX3JldHVyblxuXAogCXN1YmYJJTAsJTEsJTBcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMikKIAlQUENfU1RMQ1gJIiUwLDAsJTIgXG5cCkBAIC02MCw3ICs2MCw3IEBACiAJbG9uZyB0OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToiCVBQQ19MTEFSWAkiJTAsMCwlMQkJIyBsb2NhbF9pbmNfcmV0dXJuXG5cCisiMToiCVBQQ19MTEFSWCglMCwwLCUxLDApICIJCQkjIGxvY2FsX2luY19yZXR1cm5cblwKIAlhZGRpYwklMCwlMCwxXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTEpCiAJUFBDX1NUTENYCSIlMCwwLCUxIFxuXApAQCAtODcsNyArODcsNyBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6IglQUENfTExBUlgJIiUwLDAsJTEJCSMgbG9jYWxfZGVjX3JldHVyblxuXAorIjE6IglQUENfTExBUlgoJTAsMCwlMSwwKSAiCQkJIyBsb2NhbF9kZWNfcmV0dXJuXG5cCiAJYWRkaWMJJTAsJTAsLTFcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMSkKIAlQUENfU1RMQ1gJIiUwLDAsJTFcblwKQEAgLTExNyw3ICsxMTcsNyBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKLSIxOiIJUFBDX0xMQVJYCSIlMCwwLCUxCQkjIGxvY2FsX2FkZF91bmxlc3NcblwKKyIxOiIJUFBDX0xMQVJYKCUwLDAsJTEsMCkgIgkJCSMgbG9jYWxfYWRkX3VubGVzc1xuXAogCWNtcHcJMCwlMCwlMyBcblwKIAliZXEtCTJmIFxuXAogCWFkZAklMCwlMiwlMCBcbiIKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCWxvbmcgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6IglQUENfTExBUlgJIiUwLDAsJTEJCSMgbG9jYWxfZGVjX2lmX3Bvc2l0aXZlXG5cCisiMToiCVBQQ19MTEFSWCglMCwwLCUxLDApICIJCQkjIGxvY2FsX2RlY19pZl9wb3NpdGl2ZVxuXAogCWNtcHdpCSUwLDFcblwKIAlhZGRpCSUwLCUwLC0xXG5cCiAJYmx0LQkyZlxuIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUxMjEuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1MTIxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZhMzBiYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1MTIxLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIE1QQzUxMjEgUHJvdG90eXBlcyBhbmQgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKyNpZm5kZWYgX19BU01fUE9XRVJQQ19NUEM1MTIxX0hfXworI2RlZmluZSBfX0FTTV9QT1dFUlBDX01QQzUxMjFfSF9fCisKKy8qIE1QQzUxMnggUmVzZXQgbW9kdWxlIHJlZ2lzdGVycyAqLworc3RydWN0IG1wYzUxMnhfcmVzZXRfbW9kdWxlIHsKKwl1MzIJcmN3bHI7CS8qIFJlc2V0IENvbmZpZ3VyYXRpb24gV29yZCBMb3cgUmVnaXN0ZXIgKi8KKwl1MzIJcmN3aHI7CS8qIFJlc2V0IENvbmZpZ3VyYXRpb24gV29yZCBIaWdoIFJlZ2lzdGVyICovCisJdTMyCXJlc2VydmVkMTsKKwl1MzIJcmVzZXJ2ZWQyOworCXUzMglyc3I7CS8qIFJlc2V0IFN0YXR1cyBSZWdpc3RlciAqLworCXUzMglybXI7CS8qIFJlc2V0IE1vZGUgUmVnaXN0ZXIgKi8KKwl1MzIJcnByOwkvKiBSZXNldCBQcm90ZWN0aW9uIFJlZ2lzdGVyICovCisJdTMyCXJjcjsJLyogUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLworCXUzMglyY2VyOwkvKiBSZXNldCBDb250cm9sIEVuYWJsZSBSZWdpc3RlciAqLworfTsKKworI2VuZGlmIC8qIF9fQVNNX1BPV0VSUENfTVBDNTEyMV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1Mnh4X3BzYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUyeHhfcHNjLmgKaW5kZXggZmI4NDEyMC4uNDI1NjFmNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUyeHhfcHNjLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUyeHhfcHNjLmgKQEAgLTI1LDcgKzI1LDExIEBACiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKIC8qIE1heCBudW1iZXIgb2YgUFNDcyAqLworI2lmZGVmIENPTkZJR19QUENfTVBDNTEyeAorI2RlZmluZSBNUEM1Mnh4X1BTQ19NQVhOVU0gICAgIDEyCisjZWxzZQogI2RlZmluZSBNUEM1Mnh4X1BTQ19NQVhOVU0JNgorI2VuZGlmCiAKIC8qIFByb2dyYW1tYWJsZSBTZXJpYWwgQ29udHJvbGxlciAoUFNDKSBzdGF0dXMgcmVnaXN0ZXIgYml0cyAqLwogI2RlZmluZSBNUEM1Mnh4X1BTQ19TUl9VTkVYX1JYCTB4MDAwMQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21waWMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGljLmgKaW5kZXggYTAwMjY4Mi4uNjE5MTNkOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21waWMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBpYy5oCkBAIC0yODksNyArMjg5LDcgQEAKICNpZmRlZiBDT05GSUdfTVBJQ19VM19IVF9JUlFTCiAJLyogVGhlIGZpeHVwIHRhYmxlICovCiAJc3RydWN0IG1waWNfaXJxX2ZpeHVwCSpmaXh1cHM7Ci0Jc3BpbmxvY2tfdAkJZml4dXBfbG9jazsKKwlyYXdfc3BpbmxvY2tfdAlmaXh1cF9sb2NrOwogI2VuZGlmCiAKIAkvKiBSZWdpc3RlciBhY2Nlc3MgbWV0aG9kICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXV0ZXguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tdXRleC5oCmluZGV4IGRhYmMwMWMuLjUzOTlmN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tdXRleC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tdXRleC5oCkBAIC0xNSw3ICsxNSw3IEBACiAJUFBDNDA1X0VSUjc3KDAsJTEpCiAiCXN0d2N4LgklMywwLCUxXG5cCiAJYm5lLQkxYiIKLQlJU1lOQ19PTl9TTVAKKwlQUENfQUNRVUlSRV9CQVJSSUVSCiAJIlxuXAogMjoiCiAJOiAiPSZyIiAodCkKQEAgLTM1LDcgKzM1LDcgQEAKIAlQUEM0MDVfRVJSNzcoMCwlMSkKICIJc3R3Y3guCSUwLDAsJTFcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiICh0KQogCTogInIiICgmdi0+Y291bnRlcikKIAk6ICJjYyIsICJtZW1vcnkiKTsKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlpbnQgdDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCUxXU1lOQ19PTl9TTVAKKwlQUENfUkVMRUFTRV9CQVJSSUVSCiAiMToJbHdhcngJJTAsMCwlMQkJIyBtdXRleCB1bmxvY2tcblwKIAlhZGRpYwklMCwlMCwxXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTEpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFyYW0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhbS5oCmluZGV4IDA5NGY2M2QuLjk2NWQ0NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhbS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYXJhbS5oCkBAIC0xLDIyICsxIEBACi0jaWZuZGVmIF9BU01fUE9XRVJQQ19QQVJBTV9ICi0jZGVmaW5lIF9BU01fUE9XRVJQQ19QQVJBTV9ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIEhaCQlDT05GSUdfSFoJLyogaW50ZXJuYWwga2VybmVsIHRpbWVyIGZyZXF1ZW5jeSAqLwotI2RlZmluZSBVU0VSX0haCQkxMDAJCS8qIGZvciB1c2VyIGludGVyZmFjZXMgaW4gInRpY2tzIiAqLwotI2RlZmluZSBDTE9DS1NfUEVSX1NFQwkoVVNFUl9IWikJLyogZnJlcXVlbmN5IGF0IHdoaWNoIHRpbWVzKCkgY291bnRzICovCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jaWZuZGVmIEhaCi0jZGVmaW5lIEhaIDEwMAotI2VuZGlmCi0KLSNkZWZpbmUgRVhFQ19QQUdFU0laRQk0MDk2Ci0KLSNpZm5kZWYgTk9HUk9VUAotI2RlZmluZSBOT0dST1VQCQkoLTEpCi0jZW5kaWYKLQotI2RlZmluZSBNQVhIT1NUTkFNRUxFTgk2NAkvKiBtYXggbGVuZ3RoIG9mIGhvc3RuYW1lICovCi0KLSNlbmRpZgkvKiBfQVNNX1BPV0VSUENfUEFSQU1fSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BhcmFtLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAyMTIwN2U1Li44OWYxNTg3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTIwOSw3ICsyMDksNyBAQAogICogY29ycmVzcG9uZGluZyBIUFRFIGludG8gdGhlIGhhc2ggdGFibGUgYWhlYWQgb2YgdGltZSwgaW5zdGVhZCBvZgogICogd2FpdGluZyBmb3IgdGhlIGluZXZpdGFibGUgZXh0cmEgaGFzaC10YWJsZSBtaXNzIGV4Y2VwdGlvbi4KICAqLwotZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QpOworZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7CiAKIGV4dGVybiBpbnQgZ3VwX2h1Z2VwZChodWdlcGRfdCAqaHVnZXBkLCB1bnNpZ25lZCBwZHNoaWZ0LCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgd3JpdGUsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BtYWNfZmVhdHVyZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BtYWNfZmVhdHVyZS5oCmluZGV4IDg3N2MzNWEuLjAwZWVkYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbWFjX2ZlYXR1cmUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcG1hY19mZWF0dXJlLmgKQEAgLTM3OCw3ICszNzgsNyBAQAogICogVGhvc2UgYXJlIGV4cG9ydGVkIGJ5IHBtYWMgZmVhdHVyZSBmb3IgaW50ZXJuYWwgdXNlIGJ5IGFyY2ggY29kZQogICogb25seSBsaWtlIHRoZSBwbGF0Zm9ybSBmdW5jdGlvbiBjYWxsYmFja3MsIGRvIG5vdCB1c2UgZGlyZWN0bHkgaW4gZHJpdmVycwogICovCi1leHRlcm4gc3BpbmxvY2tfdCBmZWF0dXJlX2xvY2s7CitleHRlcm4gcmF3X3NwaW5sb2NrX3QgZmVhdHVyZV9sb2NrOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqdW5pbm9ydGhfbm9kZTsKIGV4dGVybiB1MzIgX19pb21lbSAqdW5pbm9ydGhfYmFzZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1vcGNvZGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtb3Bjb2RlLmgKaW5kZXggZWY5YWE4NC4uYWVhNzE0NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1vcGNvZGUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLW9wY29kZS5oCkBAIC0yMiw4ICsyMiwxMCBAQAogI2RlZmluZSBQUENfSU5TVF9EQ0JaTAkJCTB4N2MyMDA3ZWMKICNkZWZpbmUgUFBDX0lOU1RfSVNFTAkJCTB4N2MwMDAwMWUKICNkZWZpbmUgUFBDX0lOU1RfSVNFTF9NQVNLCQkweGZjMDAwMDNlCisjZGVmaW5lIFBQQ19JTlNUX0xEQVJYCQkJMHg3YzAwMDBhOAogI2RlZmluZSBQUENfSU5TVF9MU1dJCQkJMHg3YzAwMDRhYQogI2RlZmluZSBQUENfSU5TVF9MU1dYCQkJMHg3YzAwMDQyYQorI2RlZmluZSBQUENfSU5TVF9MV0FSWAkJCTB4N2MwMDAwMjkKICNkZWZpbmUgUFBDX0lOU1RfTFdTWU5DCQkJMHg3YzIwMDRhYwogI2RlZmluZSBQUENfSU5TVF9MWFZEMlgJCQkweDdjMDAwNjk4CiAjZGVmaW5lIFBQQ19JTlNUX01DUlhSCQkJMHg3YzAwMDQwMApAQCAtNTUsMTUgKzU3LDMxIEBACiAjZGVmaW5lIF9fUFBDX1JBKGEpCSgoKGEpICYgMHgxZikgPDwgMTYpCiAjZGVmaW5lIF9fUFBDX1JCKGIpCSgoKGIpICYgMHgxZikgPDwgMTEpCiAjZGVmaW5lIF9fUFBDX1JTKHMpCSgoKHMpICYgMHgxZikgPDwgMjEpCisjZGVmaW5lIF9fUFBDX1JUKHMpCV9fUFBDX1JTKHMpCiAjZGVmaW5lIF9fUFBDX1hTKHMpCSgoKChzKSAmIDB4MWYpIDw8IDIxKSB8ICgoKHMpICYgMHgyMCkgPj4gNSkpCiAjZGVmaW5lIF9fUFBDX1RfVExCKHQpCSgoKHQpICYgMHgzKSA8PCAyMSkKICNkZWZpbmUgX19QUENfV0ModykJKCgodykgJiAweDMpIDw8IDIxKQorLyoKKyAqIE9ubHkgdXNlIHRoZSBsYXJ4IGhpbnQgYml0IG9uIDY0Yml0IENQVXMuIE9uY2Ugd2UgdmVyaWZ5IGl0IGRvZXNuJ3QgaGF2ZQorICogYW55IHNpZGUgZWZmZWN0cyBvbiBhbGwgMzJiaXQgcHJvY2Vzc29ycywgd2UgY2FuIGRvIHRoaXMgYWxsIHRoZSB0aW1lLgorICovCisjaWZkZWYgQ09ORklHX1BQQzY0CisjZGVmaW5lIF9fUFBDX0VIKGVoKQkoKChlaCkgJiAweDEpIDw8IDApCisjZWxzZQorI2RlZmluZSBfX1BQQ19FSChlaCkJMAorI2VuZGlmCiAKIC8qIERlYWwgd2l0aCBpbnN0cnVjdGlvbnMgdGhhdCBvbGRlciBhc3NlbWJsZXJzIGFyZW4ndCBhd2FyZSBvZiAqLwogI2RlZmluZQlQUENfRENCQUwoYSwgYikJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX0RDQkFMIHwgXAogCQkJCQlfX1BQQ19SQShhKSB8IF9fUFBDX1JCKGIpKQogI2RlZmluZQlQUENfRENCWkwoYSwgYikJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX0RDQlpMIHwgXAogCQkJCQlfX1BQQ19SQShhKSB8IF9fUFBDX1JCKGIpKQorI2RlZmluZSBQUENfTERBUlgodCwgYSwgYiwgZWgpCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX0xEQVJYIHwgXAorCQkJCQlfX1BQQ19SVCh0KSB8IF9fUFBDX1JBKGEpIHwgXAorCQkJCQlfX1BQQ19SQihiKSB8IF9fUFBDX0VIKGVoKSkKKyNkZWZpbmUgUFBDX0xXQVJYKHQsIGEsIGIsIGVoKQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9MV0FSWCB8IFwKKwkJCQkJX19QUENfUlQodCkgfCBfX1BQQ19SQShhKSB8IFwKKwkJCQkJX19QUENfUkIoYikgfCBfX1BQQ19FSChlaCkpCiAjZGVmaW5lIFBQQ19NU0dTTkQoYikJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX01TR1NORCB8IFwKIAkJCQkJX19QUENfUkIoYikpCiAjZGVmaW5lIFBQQ19SRkNJCQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9SRkNJKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1wY2kuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtcGNpLmgKaW5kZXggMjgyOGY5ZC4uNDJmZGZmMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1wY2kuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLXBjaS5oCkBAIC0xMzcsNiArMTM3LDExIEBACiB2b2lkIGVlaF9zeXNmc19hZGRfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIHZvaWQgZWVoX3N5c2ZzX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmVlaF9wY2lfbmFtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikgCit7IAorCXJldHVybiBwZGV2ID8gcGNpX25hbWUocGRldikgOiAiPG51bGw+IjsKK30gCisKICNlbmRpZiAvKiBDT05GSUdfRUVIICovCiAKICNlbHNlIC8qIENPTkZJR19QQ0kgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCA5ZWVkMjllLi4yMjFiYTYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xNjEsOSArMTYxLDQxIEBACiAjaWZkZWYgQ09ORklHX1BQQzMyCiAJdm9pZAkJKnBnZGlyOwkJLyogcm9vdCBvZiBwYWdlLXRhYmxlIHRyZWUgKi8KICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHXzR4eCkgfHwgZGVmaW5lZCAoQ09ORklHX0JPT0tFKQotCXVuc2lnbmVkIGxvbmcJZGJjcjA7CQkvKiBkZWJ1ZyBjb250cm9sIHJlZ2lzdGVyIHZhbHVlcyAqLworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgaGVscCB0byBtYW5hZ2UgdGhlIHVzZSBvZiBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVycworCSAqIG9tIHRoZSBCb29rRSBwbGF0Zm9ybXMuCisJICovCisJdW5zaWduZWQgbG9uZwlkYmNyMDsKIAl1bnNpZ25lZCBsb25nCWRiY3IxOworI2lmZGVmIENPTkZJR19CT09LRQorCXVuc2lnbmVkIGxvbmcJZGJjcjI7CisjZW5kaWYKKwkvKgorCSAqIFRoZSBzdG9yZWQgdmFsdWUgb2YgdGhlIERCU1IgcmVnaXN0ZXIgd2lsbCBiZSB0aGUgdmFsdWUgYXQgdGhlCisJICogbGFzdCBkZWJ1ZyBpbnRlcnJ1cHQuIFRoaXMgcmVnaXN0ZXIgY2FuIG9ubHkgYmUgcmVhZCBmcm9tIHRoZQorCSAqIHVzZXIgKHdpbGwgbmV2ZXIgYmUgd3JpdHRlbiB0bykgYW5kIGhhcyB2YWx1ZSB3aGlsZSBoZWxwaW5nIHRvCisJICogZGVzY3JpYmUgdGhlIHJlYXNvbiBmb3IgdGhlIGxhc3QgZGVidWcgdHJhcC4gIFRvcmV6CisJICovCisJdW5zaWduZWQgbG9uZwlkYnNyOworCS8qCisJICogVGhlIGZvbGxvd2luZyB3aWxsIGNvbnRhaW4gYWRkcmVzc2VzIHVzZWQgYnkgZGVidWcgYXBwbGljYXRpb25zCisJICogdG8gaGVscCB0cmFjZSBhbmQgdHJhcCBvbiBwYXJ0aWN1bGFyIGFkZHJlc3MgbG9jYXRpb25zLgorCSAqIFRoZSBiaXRzIGluIHRoZSBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVycyBhYm92ZSBoZWxwIGRlZmluZSB3aGljaAorCSAqIG9mIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzIHdpbGwgY29udGFpbiB2YWxpZCBkYXRhIGFuZC9vciBhZGRyZXNzZXMuCisJICovCisJdW5zaWduZWQgbG9uZwlpYWMxOworCXVuc2lnbmVkIGxvbmcJaWFjMjsKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19JQUNTID4gMgorCXVuc2lnbmVkIGxvbmcJaWFjMzsKKwl1bnNpZ25lZCBsb25nCWlhYzQ7CisjZW5kaWYKKwl1bnNpZ25lZCBsb25nCWRhYzE7CisJdW5zaWduZWQgbG9uZwlkYWMyOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0RWQ1MgPiAwCisJdW5zaWduZWQgbG9uZwlkdmMxOworCXVuc2lnbmVkIGxvbmcJZHZjMjsKKyNlbmRpZgogI2VuZGlmCiAJLyogRlAgYW5kIFZTWCAwLTMxIHJlZ2lzdGVyIHNldCAqLwogCWRvdWJsZQkJZnByWzMyXVtUU19GUFJXSURUSF07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb20uaAppbmRleCAyYWI5Y2JkLi5kZGQ0MDhhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvbS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9tLmgKQEAgLTIzLDIxICsyMyw4IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAotI2RlZmluZSBPRl9ST09UX05PREVfQUREUl9DRUxMU19ERUZBVUxUCTEKLSNkZWZpbmUgT0ZfUk9PVF9OT0RFX1NJWkVfQ0VMTFNfREVGQVVMVAkxCi0KLSNkZWZpbmUgb2ZfY29tcGF0X2NtcChzMSwgczIsIGwpCXN0cmNhc2VjbXAoKHMxKSwgKHMyKSkKLSNkZWZpbmUgb2ZfcHJvcF9jbXAoczEsIHMyKQkJc3RyY21wKChzMSksIChzMikpCi0jZGVmaW5lIG9mX25vZGVfY21wKHMxLCBzMikJCXN0cmNhc2VjbXAoKHMxKSwgKHMyKSkKLQotZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfY2hvc2VuOwotCiAjZGVmaW5lIEhBVkVfQVJDSF9ERVZUUkVFX0ZJWFVQUwogCi0vKiBGb3IgdXBkYXRpbmcgdGhlIGRldmljZSB0cmVlIGF0IHJ1bnRpbWUgKi8KLWV4dGVybiB2b2lkIG9mX2F0dGFjaF9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqKTsKLWV4dGVybiB2b2lkIG9mX2RldGFjaF9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqKTsKLQogI2lmZGVmIENPTkZJR19QUEMzMgogLyoKICAqIFBDSSA8LT4gT0YgbWF0Y2hpbmcgZnVuY3Rpb25zCkBAIC01MiwxMSArMzksNiBAQAogZXh0ZXJuIHZvaWQgcGNpX2NyZWF0ZV9PRl9idXNfbWFwKHZvaWQpOwogI2VuZGlmCiAKLWV4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgKnJlcXVlc3RfT0ZfcmVzb3VyY2Uoc3RydWN0IGRldmljZV9ub2RlKiBub2RlLAotCQkJCWludCBpbmRleCwgY29uc3QgY2hhciogbmFtZV9wb3N0Zml4KTsKLWV4dGVybiBpbnQgcmVsZWFzZV9PRl9yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlX25vZGUqIG5vZGUsIGludCBpbmRleCk7Ci0KLQogLyoKICAqIE9GIGFkZHJlc3MgcmV0cmVpdmFsICYgdHJhbnNsYXRpb24KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IGNiZDc1OWUuLmI0NTEwODEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTI0LDYgKzI0LDEyIEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogc3RydWN0IHB0X3JlZ3MgewpAQCAtMjk0LDQgKzMwMCw3NSBAQAogCiAjZGVmaW5lIFBUUkFDRV9TSU5HTEVCTE9DSwkweDEwMAkvKiByZXN1bWUgZXhlY3V0aW9uIHVudGlsIG5leHQgYnJhbmNoICovCiAKKyNkZWZpbmUgUFBDX1BUUkFDRV9HRVRIV0RCR0lORk8JMHg4OQorI2RlZmluZSBQUENfUFRSQUNFX1NFVEhXREVCVUcJMHg4OAorI2RlZmluZSBQUENfUFRSQUNFX0RFTEhXREVCVUcJMHg4NworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgcHBjX2RlYnVnX2luZm8geworCXVpbnQzMl90IHZlcnNpb247CQkvKiBPbmx5IHZlcnNpb24gMSBleGlzdHMgdG8gZGF0ZSAqLworCXVpbnQzMl90IG51bV9pbnN0cnVjdGlvbl9icHM7CisJdWludDMyX3QgbnVtX2RhdGFfYnBzOworCXVpbnQzMl90IG51bV9jb25kaXRpb25fcmVnczsKKwl1aW50MzJfdCBkYXRhX2JwX2FsaWdubWVudDsKKwl1aW50MzJfdCBzaXplb2ZfY29uZGl0aW9uOwkvKiBzaXplIG9mIHRoZSBEVkMgcmVnaXN0ZXIgKi8KKwl1aW50NjRfdCBmZWF0dXJlczsKK307CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIGZlYXR1cmVzIHdpbGwgaGF2ZSBiaXRzIGluZGljYXRpb24gd2hldGhlciB0aGVyZSBpcyBzdXBwb3J0IGZvcjoKKyAqLworI2RlZmluZSBQUENfREVCVUdfRkVBVFVSRV9JTlNOX0JQX1JBTkdFCQkweDAwMDAwMDAwMDAwMDAwMDEKKyNkZWZpbmUgUFBDX0RFQlVHX0ZFQVRVUkVfSU5TTl9CUF9NQVNLCQkweDAwMDAwMDAwMDAwMDAwMDIKKyNkZWZpbmUgUFBDX0RFQlVHX0ZFQVRVUkVfREFUQV9CUF9SQU5HRQkJMHgwMDAwMDAwMDAwMDAwMDA0CisjZGVmaW5lIFBQQ19ERUJVR19GRUFUVVJFX0RBVEFfQlBfTUFTSwkJMHgwMDAwMDAwMDAwMDAwMDA4CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBwcGNfaHdfYnJlYWtwb2ludCB7CisJdWludDMyX3QgdmVyc2lvbjsJCS8qIGN1cnJlbnRseSwgdmVyc2lvbiBtdXN0IGJlIDEgKi8KKwl1aW50MzJfdCB0cmlnZ2VyX3R5cGU7CQkvKiBvbmx5IHNvbWUgY29tYmluYXRpb25zIGFsbG93ZWQgKi8KKwl1aW50MzJfdCBhZGRyX21vZGU7CQkvKiBhZGRyZXNzIG1hdGNoIG1vZGUgKi8KKwl1aW50MzJfdCBjb25kaXRpb25fbW9kZTsJLyogYnJlYWsvd2F0Y2hwb2ludCBjb25kaXRpb24gZmxhZ3MgKi8KKwl1aW50NjRfdCBhZGRyOwkJCS8qIGJyZWFrL3dhdGNocG9pbnQgYWRkcmVzcyAqLworCXVpbnQ2NF90IGFkZHIyOwkJCS8qIHJhbmdlIGVuZCBvciBtYXNrICovCisJdWludDY0X3QgY29uZGl0aW9uX3ZhbHVlOwkvKiBjb250ZW50cyBvZiB0aGUgRFZDIHJlZ2lzdGVyICovCit9OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBUcmlnZ2VyIFR5cGUKKyAqLworI2RlZmluZSBQUENfQlJFQUtQT0lOVF9UUklHR0VSX0VYRUNVVEUJMHgwMDAwMDAwMQorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JFQUQJMHgwMDAwMDAwMgorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1dSSVRFCTB4MDAwMDAwMDQKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SVwlcCisJKFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUkVBRCB8IFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfV1JJVEUpCisKKy8qCisgKiBBZGRyZXNzIE1vZGUKKyAqLworI2RlZmluZSBQUENfQlJFQUtQT0lOVF9NT0RFX0VYQUNUCQkweDAwMDAwMDAwCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX01PREVfUkFOR0VfSU5DTFVTSVZFCTB4MDAwMDAwMDEKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfTU9ERV9SQU5HRV9FWENMVVNJVkUJMHgwMDAwMDAwMgorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9NT0RFX01BU0sJCTB4MDAwMDAwMDMKKworLyoKKyAqIENvbmRpdGlvbiBNb2RlCisgKi8KKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX01PREUJMHgwMDAwMDAwMworI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fTk9ORQkweDAwMDAwMDAwCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9BTkQJMHgwMDAwMDAwMQorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fRVhBQ1QJUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0FORAorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fT1IJMHgwMDAwMDAwMgorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQU5EX09SCTB4MDAwMDAwMDMKKyNkZWZpbmUgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0JFX0FMTAkweDAwZmYwMDAwCisjZGVmaW5lIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9CRV9TSElGVAkxNgorI2RlZmluZSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fQkUobikJXAorCSgxPDwoKG4pK1BQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9CRV9TSElGVCkpCisKICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfUFRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaAppbmRleCAzYmY3ODM1Li44ODA4ZDMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCkBAIC0yNDgsNiArMjQ4LDggQEAKICNkZWZpbmUgREJTUl9SRVQJMHgwMDAwODAwMAkvKiBSZXR1cm4gRGVidWcgRXZlbnQgKi8KICNkZWZpbmUgREJTUl9DSVJQVAkweDAwMDAwMDQwCS8qIENyaXRpY2FsIEludGVycnVwdCBUYWtlbiBFdmVudCAqLwogI2RlZmluZSBEQlNSX0NSRVQJMHgwMDAwMDAyMAkvKiBDcml0aWNhbCBSZXR1cm4gRGVidWcgRXZlbnQgKi8KKyNkZWZpbmUgREJTUl9JQUMxMkFUUwkweDAwMDAwMDAyCS8qIEluc3RyIEFkZHJlc3MgQ29tcGFyZSAxLzIgVG9nZ2xlICovCisjZGVmaW5lIERCU1JfSUFDMzRBVFMJMHgwMDAwMDAwMQkvKiBJbnN0ciBBZGRyZXNzIENvbXBhcmUgMy80IFRvZ2dsZSAqLwogI2VuZGlmCiAjaWZkZWYgQ09ORklHXzQweAogI2RlZmluZSBEQlNSX0lDCQkweDgwMDAwMDAwCS8qIEluc3RydWN0aW9uIENvbXBsZXRpb24gKi8KQEAgLTMxMyw2ICszMTUsMzggQEAKICNkZWZpbmUgREJDUjBfSUExMlQJMHgwMDAwODAwMAkvKiBJbnN0ciBBZGRyIDEtMiByYW5nZSBUb2dnbGUgKi8KICNkZWZpbmUgREJDUjBfSUEzNFQJMHgwMDAwNDAwMAkvKiBJbnN0ciBBZGRyIDMtNCByYW5nZSBUb2dnbGUgKi8KICNkZWZpbmUgREJDUjBfRlQJMHgwMDAwMDAwMQkvKiBGcmVlemUgVGltZXJzIG9uIGRlYnVnIGV2ZW50ICovCisKKyNkZWZpbmUgZGJjcl9pYWNfcmFuZ2UodGFzaykJKCh0YXNrKS0+dGhyZWFkLmRiY3IwKQorI2RlZmluZSBEQkNSX0lBQzEySQlEQkNSMF9JQTEyCQkJLyogUmFuZ2UgSW5jbHVzaXZlICovCisjZGVmaW5lIERCQ1JfSUFDMTJYCShEQkNSMF9JQTEyIHwgREJDUjBfSUExMlgpCS8qIFJhbmdlIEV4Y2x1c2l2ZSAqLworI2RlZmluZSBEQkNSX0lBQzEyTU9ERQkoREJDUjBfSUExMiB8IERCQ1IwX0lBMTJYKQkvKiBJQUMgMS0yIE1vZGUgQml0cyAqLworI2RlZmluZSBEQkNSX0lBQzM0SQlEQkNSMF9JQTM0CQkJLyogUmFuZ2UgSW5jbHVzaXZlICovCisjZGVmaW5lIERCQ1JfSUFDMzRYCShEQkNSMF9JQTM0IHwgREJDUjBfSUEzNFgpCS8qIFJhbmdlIEV4Y2x1c2l2ZSAqLworI2RlZmluZSBEQkNSX0lBQzM0TU9ERQkoREJDUjBfSUEzNCB8IERCQ1IwX0lBMzRYKQkvKiBJQUMgMy00IE1vZGUgQml0cyAqLworCisvKiBCaXQgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgREJDUjEuICovCisjZGVmaW5lIERCQ1IxX0RBQzFSCTB4ODAwMDAwMDAJLyogREFDMSBSZWFkIERlYnVnIEV2ZW50ICovCisjZGVmaW5lIERCQ1IxX0RBQzJSCTB4NDAwMDAwMDAJLyogREFDMiBSZWFkIERlYnVnIEV2ZW50ICovCisjZGVmaW5lIERCQ1IxX0RBQzFXCTB4MjAwMDAwMDAJLyogREFDMSBXcml0ZSBEZWJ1ZyBFdmVudCAqLworI2RlZmluZSBEQkNSMV9EQUMyVwkweDEwMDAwMDAwCS8qIERBQzIgV3JpdGUgRGVidWcgRXZlbnQgKi8KKworI2RlZmluZSBkYmNyX2RhYyh0YXNrKQkoKHRhc2spLT50aHJlYWQuZGJjcjEpCisjZGVmaW5lIERCQ1JfREFDMVIJREJDUjFfREFDMVIKKyNkZWZpbmUgREJDUl9EQUMxVwlEQkNSMV9EQUMxVworI2RlZmluZSBEQkNSX0RBQzJSCURCQ1IxX0RBQzJSCisjZGVmaW5lIERCQ1JfREFDMlcJREJDUjFfREFDMlcKKworLyoKKyAqIEFyZSB0aGVyZSBhbnkgYWN0aXZlIERlYnVnIEV2ZW50cyByZXByZXNlbnRlZCBpbiB0aGUKKyAqIERlYnVnIENvbnRyb2wgUmVnaXN0ZXJzPworICovCisjZGVmaW5lIERCQ1IwX0FDVElWRV9FVkVOVFMJKERCQ1IwX0lDTVAgfCBEQkNSMF9JQUMxIHwgREJDUjBfSUFDMiB8IFwKKwkJCQkgREJDUjBfSUFDMyB8IERCQ1IwX0lBQzQpCisjZGVmaW5lIERCQ1IxX0FDVElWRV9FVkVOVFMJKERCQ1IxX0RBQzFSIHwgREJDUjFfREFDMlIgfCBcCisJCQkJIERCQ1IxX0RBQzFXIHwgREJDUjFfREFDMlcpCisjZGVmaW5lIERCQ1JfQUNUSVZFX0VWRU5UUyhkYmNyMCwgZGJjcjEpICAoKChkYmNyMCkgJiBEQkNSMF9BQ1RJVkVfRVZFTlRTKSB8fCBcCisJCQkJCSAgICgoZGJjcjEpICYgREJDUjFfQUNUSVZFX0VWRU5UUykpCisKICNlbGlmIGRlZmluZWQoQ09ORklHX0JPT0tFKQogI2RlZmluZSBEQkNSMF9FRE0JMHg4MDAwMDAwMAkvKiBFeHRlcm5hbCBEZWJ1ZyBNb2RlICovCiAjZGVmaW5lIERCQ1IwX0lETQkweDQwMDAwMDAwCS8qIEludGVybmFsIERlYnVnIE1vZGUgKi8KQEAgLTM0MiwxOSArMzc2LDc5IEBACiAjZGVmaW5lIERCQ1IwX0NSRVQJMHgwMDAwMDAyMAkvKiBDcml0aWNhbCBSZXR1cm4gRGVidWcgRXZlbnQgKi8KICNkZWZpbmUgREJDUjBfRlQJMHgwMDAwMDAwMQkvKiBGcmVlemUgVGltZXJzIG9uIGRlYnVnIGV2ZW50ICovCiAKKyNkZWZpbmUgZGJjcl9kYWModGFzaykJKCh0YXNrKS0+dGhyZWFkLmRiY3IwKQorI2RlZmluZSBEQkNSX0RBQzFSCURCQ1IwX0RBQzFSCisjZGVmaW5lIERCQ1JfREFDMVcJREJDUjBfREFDMVcKKyNkZWZpbmUgREJDUl9EQUMyUglEQkNSMF9EQUMyUgorI2RlZmluZSBEQkNSX0RBQzJXCURCQ1IwX0RBQzJXCisKIC8qIEJpdCBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHRoZSBEQkNSMS4gKi8KKyNkZWZpbmUgREJDUjFfSUFDMVVTCTB4QzAwMDAwMDAJLyogSW5zdHIgQWRkciBDbXAgMSBTdXAvVXNlciAgICovCisjZGVmaW5lIERCQ1IxX0lBQzFFUgkweDMwMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDEgRWZmL1JlYWwgKi8KKyNkZWZpbmUgREJDUjFfSUFDMUVSXzAxCTB4MTAwMDAwMDAJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgREJDUjFfSUFDMUVSXzEwCTB4MjAwMDAwMDAJLyogSW5zdHIgQWRkciBDbXAgMSBFZmYvUmVhbCBNU1JbSVNdPTAgKi8KKyNkZWZpbmUgREJDUjFfSUFDMUVSXzExCTB4MzAwMDAwMDAJLyogSW5zdHIgQWRkciBDbXAgMSBFZmYvUmVhbCBNU1JbSVNdPTEgKi8KKyNkZWZpbmUgREJDUjFfSUFDMlVTCTB4MEMwMDAwMDAJLyogSW5zdHIgQWRkciBDbXAgMiBTdXAvVXNlciAgICovCisjZGVmaW5lIERCQ1IxX0lBQzJFUgkweDAzMDAwMDAwCS8qIEluc3RyIEFkZHIgQ21wIDIgRWZmL1JlYWwgKi8KKyNkZWZpbmUgREJDUjFfSUFDMkVSXzAxCTB4MDEwMDAwMDAJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgREJDUjFfSUFDMkVSXzEwCTB4MDIwMDAwMDAJLyogSW5zdHIgQWRkciBDbXAgMiBFZmYvUmVhbCBNU1JbSVNdPTAgKi8KKyNkZWZpbmUgREJDUjFfSUFDMkVSXzExCTB4MDMwMDAwMDAJLyogSW5zdHIgQWRkciBDbXAgMiBFZmYvUmVhbCBNU1JbSVNdPTEgKi8KICNkZWZpbmUgREJDUjFfSUFDMTJNCTB4MDA4MDAwMDAJLyogSW5zdHIgQWRkciAxLTIgcmFuZ2UgZW5hYmxlICovCiAjZGVmaW5lIERCQ1IxX0lBQzEyTVgJMHgwMEMwMDAwMAkvKiBJbnN0ciBBZGRyIDEtMiByYW5nZSBlWGNsdXNpdmUgKi8KICNkZWZpbmUgREJDUjFfSUFDMTJBVAkweDAwMDEwMDAwCS8qIEluc3RyIEFkZHIgMS0yIHJhbmdlIFRvZ2dsZSAqLworI2RlZmluZSBEQkNSMV9JQUMzVVMJMHgwMDAwQzAwMAkvKiBJbnN0ciBBZGRyIENtcCAzIFN1cC9Vc2VyICAgKi8KKyNkZWZpbmUgREJDUjFfSUFDM0VSCTB4MDAwMDMwMDAJLyogSW5zdHIgQWRkciBDbXAgMyBFZmYvUmVhbCAqLworI2RlZmluZSBEQkNSMV9JQUMzRVJfMDEJMHgwMDAwMTAwMAkvKiByZXNlcnZlZCAqLworI2RlZmluZSBEQkNSMV9JQUMzRVJfMTAJMHgwMDAwMjAwMAkvKiBJbnN0ciBBZGRyIENtcCAzIEVmZi9SZWFsIE1TUltJU109MCAqLworI2RlZmluZSBEQkNSMV9JQUMzRVJfMTEJMHgwMDAwMzAwMAkvKiBJbnN0ciBBZGRyIENtcCAzIEVmZi9SZWFsIE1TUltJU109MSAqLworI2RlZmluZSBEQkNSMV9JQUM0VVMJMHgwMDAwMEMwMAkvKiBJbnN0ciBBZGRyIENtcCA0IFN1cC9Vc2VyICAgKi8KKyNkZWZpbmUgREJDUjFfSUFDNEVSCTB4MDAwMDAzMDAJLyogSW5zdHIgQWRkciBDbXAgNCBFZmYvUmVhbCAqLworI2RlZmluZSBEQkNSMV9JQUM0RVJfMDEJMHgwMDAwMDEwMAkvKiBJbnN0ciBBZGRyIENtcCA0IEVmZi9SZWFsIE1TUltJU109MCAqLworI2RlZmluZSBEQkNSMV9JQUM0RVJfMTAJMHgwMDAwMDIwMAkvKiBJbnN0ciBBZGRyIENtcCA0IEVmZi9SZWFsIE1TUltJU109MCAqLworI2RlZmluZSBEQkNSMV9JQUM0RVJfMTEJMHgwMDAwMDMwMAkvKiBJbnN0ciBBZGRyIENtcCA0IEVmZi9SZWFsIE1TUltJU109MSAqLwogI2RlZmluZSBEQkNSMV9JQUMzNE0JMHgwMDAwMDA4MAkvKiBJbnN0ciBBZGRyIDMtNCByYW5nZSBlbmFibGUgKi8KICNkZWZpbmUgREJDUjFfSUFDMzRNWAkweDAwMDAwMEMwCS8qIEluc3RyIEFkZHIgMy00IHJhbmdlIGVYY2x1c2l2ZSAqLwogI2RlZmluZSBEQkNSMV9JQUMzNEFUCTB4MDAwMDAwMDEJLyogSW5zdHIgQWRkciAzLTQgcmFuZ2UgVG9nZ2xlICovCiAKKyNkZWZpbmUgZGJjcl9pYWNfcmFuZ2UodGFzaykJKCh0YXNrKS0+dGhyZWFkLmRiY3IxKQorI2RlZmluZSBEQkNSX0lBQzEySQlEQkNSMV9JQUMxMk0JLyogUmFuZ2UgSW5jbHVzaXZlICovCisjZGVmaW5lIERCQ1JfSUFDMTJYCURCQ1IxX0lBQzEyTVgJLyogUmFuZ2UgRXhjbHVzaXZlICovCisjZGVmaW5lIERCQ1JfSUFDMTJNT0RFCURCQ1IxX0lBQzEyTVgJLyogSUFDIDEtMiBNb2RlIEJpdHMgKi8KKyNkZWZpbmUgREJDUl9JQUMzNEkJREJDUjFfSUFDMzRNCS8qIFJhbmdlIEluY2x1c2l2ZSAqLworI2RlZmluZSBEQkNSX0lBQzM0WAlEQkNSMV9JQUMzNE1YCS8qIFJhbmdlIEV4Y2x1c2l2ZSAqLworI2RlZmluZSBEQkNSX0lBQzM0TU9ERQlEQkNSMV9JQUMzNE1YCS8qIElBQyAzLTQgTW9kZSBCaXRzICovCisKIC8qIEJpdCBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHRoZSBEQkNSMi4gKi8KKyNkZWZpbmUgREJDUjJfREFDMVVTCTB4QzAwMDAwMDAJLyogRGF0YSBBZGRyIENtcCAxIFN1cC9Vc2VyICAgKi8KKyNkZWZpbmUgREJDUjJfREFDMUVSCTB4MzAwMDAwMDAJLyogRGF0YSBBZGRyIENtcCAxIEVmZi9SZWFsICovCisjZGVmaW5lIERCQ1IyX0RBQzJVUwkweDAwMDAwMDAwCS8qIERhdGEgQWRkciBDbXAgMiBTdXAvVXNlciAgICovCisjZGVmaW5lIERCQ1IyX0RBQzJFUgkweDAwMDAwMDAwCS8qIERhdGEgQWRkciBDbXAgMiBFZmYvUmVhbCAqLwogI2RlZmluZSBEQkNSMl9EQUMxMk0JMHgwMDgwMDAwMAkvKiBEQUMgMS0yIHJhbmdlIGVuYWJsZSAqLworI2RlZmluZSBEQkNSMl9EQUMxMk1NCTB4MDA0MDAwMDAJLyogREFDIDEtMiBNYXNrIG1vZGUqLwogI2RlZmluZSBEQkNSMl9EQUMxMk1YCTB4MDBDMDAwMDAJLyogREFDIDEtMiByYW5nZSBlWGNsdXNpdmUgKi8KKyNkZWZpbmUgREJDUjJfREFDMTJNT0RFCTB4MDBDMDAwMDAJLyogREFDIDEtMiBNb2RlIEJpdHMgKi8KICNkZWZpbmUgREJDUjJfREFDMTJBCTB4MDAyMDAwMDAJLyogREFDIDEtMiBBc3luY2hyb25vdXMgKi8KLSNlbmRpZgorI2RlZmluZSBEQkNSMl9EVkMxTQkweDAwMEMwMDAwCS8qIERhdGEgVmFsdWUgQ29tcCAxIE1vZGUgKi8KKyNkZWZpbmUgREJDUjJfRFZDMU1fU0hJRlQJMTgJLyogIyBvZiBiaXRzIHRvIHNoaWZ0IERCQ1IyX0RWQzFNICovCisjZGVmaW5lIERCQ1IyX0RWQzJNCTB4MDAwMzAwMDAJLyogRGF0YSBWYWx1ZSBDb21wIDIgTW9kZSAqLworI2RlZmluZSBEQkNSMl9EVkMyTV9TSElGVAkxNgkvKiAjIG9mIGJpdHMgdG8gc2hpZnQgREJDUjJfRFZDMk0gKi8KKyNkZWZpbmUgREJDUjJfRFZDMUJFCTB4MDAwMDBGMDAJLyogRGF0YSBWYWx1ZSBDb21wIDEgQnl0ZSAqLworI2RlZmluZSBEQkNSMl9EVkMxQkVfU0hJRlQJOAkvKiAjIG9mIGJpdHMgdG8gc2hpZnQgREJDUjJfRFZDMUJFICovCisjZGVmaW5lIERCQ1IyX0RWQzJCRQkweDAwMDAwMDBGCS8qIERhdGEgVmFsdWUgQ29tcCAyIEJ5dGUgKi8KKyNkZWZpbmUgREJDUjJfRFZDMkJFX1NISUZUCTAJLyogIyBvZiBiaXRzIHRvIHNoaWZ0IERCQ1IyX0RWQzJCRSAqLworCisvKgorICogQXJlIHRoZXJlIGFueSBhY3RpdmUgRGVidWcgRXZlbnRzIHJlcHJlc2VudGVkIGluIHRoZQorICogRGVidWcgQ29udHJvbCBSZWdpc3RlcnM/CisgKi8KKyNkZWZpbmUgREJDUjBfQUNUSVZFX0VWRU5UUyAgKERCQ1IwX0lDTVAgfCBEQkNSMF9JQUMxIHwgREJDUjBfSUFDMiB8IFwKKwkJCSAgICAgIERCQ1IwX0lBQzMgfCBEQkNSMF9JQUM0IHwgREJDUjBfREFDMVIgfCBcCisJCQkgICAgICBEQkNSMF9EQUMxVyAgfCBEQkNSMF9EQUMyUiB8IERCQ1IwX0RBQzJXKQorI2RlZmluZSBEQkNSMV9BQ1RJVkVfRVZFTlRTCTAKKworI2RlZmluZSBEQkNSX0FDVElWRV9FVkVOVFMoZGJjcjAsIGRiY3IxKSAgKCgoZGJjcjApICYgREJDUjBfQUNUSVZFX0VWRU5UUykgfHwgXAorCQkJCQkgICAoKGRiY3IxKSAmIERCQ1IxX0FDVElWRV9FVkVOVFMpKQorI2VuZGlmIC8qICNlbGlmIGRlZmluZWQoQ09ORklHX0JPT0tFKSAqLwogCiAvKiBCaXQgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgVENSLiAqLwogI2RlZmluZSBUQ1JfV1AoeCkJKCgoeCkmMHgzKTw8MzApCS8qIFdEVCBQZXJpb2QgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggNzY0MDk0Yy4uZjk2MTFiZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3N5bmNoLmg+CisjaW5jbHVkZSA8YXNtL3BwYy1vcGNvZGUuaD4KIAogI2RlZmluZSBhcmNoX3NwaW5faXNfbG9ja2VkKHgpCQkoKHgpLT5zbG9jayAhPSAwKQogCkBAIC02MCwxMyArNjEsMTQgQEAKIAogCXRva2VuID0gTE9DS19UT0tFTjsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOglsd2FyeAkJJTAsMCwlMlxuXAorIjE6CSIgUFBDX0xXQVJYKCUwLDAsJTIsMSkgIlxuXAogCWNtcHdpCQkwLCUwLDBcblwKIAlibmUtCQkyZlxuXAogCXN0d2N4LgkJJTEsMCwlMlxuXAotCWJuZS0JCTFiXG5cCi0JaXN5bmNcblwKLTI6Igk6ICI9JnIiICh0bXApCisJYm5lLQkJMWJcbiIKKwlQUENfQUNRVUlSRV9CQVJSSUVSCisiMjoiCisJOiAiPSZyIiAodG1wKQogCTogInIiICh0b2tlbiksICJyIiAoJmxvY2stPnNsb2NrKQogCTogImNyMCIsICJtZW1vcnkiKTsKIApAQCAtMTQ0LDcgKzE0Niw3IEBACiB7CiAJU1lOQ19JTzsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIyBhcmNoX3NwaW5fdW5sb2NrXG5cdCIKLQkJCQlMV1NZTkNfT05fU01QOiA6IDoibWVtb3J5Iik7CisJCQkJUFBDX1JFTEVBU0VfQkFSUklFUjogOiA6Im1lbW9yeSIpOwogCWxvY2stPnNsb2NrID0gMDsKIH0KIApAQCAtMTg2LDE1ICsxODgsMTUgQEAKIAlsb25nIHRtcDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6CWx3YXJ4CQklMCwwLCUxXG4iCisiMToJIiBQUENfTFdBUlgoJTAsMCwlMSwxKSAiXG4iCiAJX19ET19TSUdOX0VYVEVORAogIglhZGRpYy4JCSUwLCUwLDFcblwKIAlibGUtCQkyZlxuIgogCVBQQzQwNV9FUlI3NygwLCUxKQogIglzdHdjeC4JCSUwLDAsJTFcblwKLQlibmUtCQkxYlxuXAotCWlzeW5jXG5cCi0yOiIJOiAiPSZyIiAodG1wKQorCWJuZS0JCTFiXG4iCisJUFBDX0FDUVVJUkVfQkFSUklFUgorIjI6Igk6ICI9JnIiICh0bXApCiAJOiAiciIgKCZydy0+bG9jaykKIAk6ICJjcjAiLCAieGVyIiwgIm1lbW9yeSIpOwogCkBAIC0yMTEsMTQgKzIxMywxNCBAQAogCiAJdG9rZW4gPSBXUkxPQ0tfVE9LRU47CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToJbHdhcngJCSUwLDAsJTJcblwKKyIxOgkiIFBQQ19MV0FSWCglMCwwLCUyLDEpICJcblwKIAljbXB3aQkJMCwlMCwwXG5cCiAJYm5lLQkJMmZcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMSkKICIJc3R3Y3guCQklMSwwLCUyXG5cCi0JYm5lLQkJMWJcblwKLQlpc3luY1xuXAotMjoiCTogIj0mciIgKHRtcCkKKwlibmUtCQkxYlxuIgorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKKyIyOiIJOiAiPSZyIiAodG1wKQogCTogInIiICh0b2tlbiksICJyIiAoJnJ3LT5sb2NrKQogCTogImNyMCIsICJtZW1vcnkiKTsKIApAQCAtMjY5LDcgKzI3MSw3IEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkiIyByZWFkX3VubG9ja1xuXHQiCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsd2FyeAkJJTAsMCwlMVxuXAogCWFkZGljCQklMCwlMCwtMVxuIgogCVBQQzQwNV9FUlI3NygwLCUxKQpAQCAtMjgzLDcgKzI4NSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF93cml0ZV91bmxvY2soYXJjaF9yd2xvY2tfdCAqcncpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIiMgd3JpdGVfdW5sb2NrXG5cdCIKLQkJCQlMV1NZTkNfT05fU01QOiA6IDoibWVtb3J5Iik7CisJCQkJUFBDX1JFTEVBU0VfQkFSUklFUjogOiA6Im1lbW9yeSIpOwogCXJ3LT5sb2NrID0gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5bmNoLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3luY2guaAppbmRleCAyOGY2ZGRiLi5kN2NhYjQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3luY2guaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3luY2guaApAQCAtMzcsMTEgKzM3LDE1IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TTVAKLSNkZWZpbmUgSVNZTkNfT05fU01QCSJcblx0aXN5bmNcbiIKLSNkZWZpbmUgTFdTWU5DX09OX1NNUAlzdHJpbmdpZnlfaW5fYyhMV1NZTkMpICJcbiIKKyNkZWZpbmUgX19QUENfQUNRVUlSRV9CQVJSSUVSCQkJCVwKKwlTVEFSVF9MV1NZTkNfU0VDVElPTig5Nyk7CQkJXAorCWlzeW5jOwkJCQkJCVwKKwlNQUtFX0xXU1lOQ19TRUNUSU9OX0VOVFJZKDk3LCBfX2x3c3luY19maXh1cCk7CisjZGVmaW5lIFBQQ19BQ1FVSVJFX0JBUlJJRVIJIlxuIiBzdHJpbmdpZnlfaW5fYyhfX1BQQ19BQ1FVSVJFX0JBUlJJRVIpCisjZGVmaW5lIFBQQ19SRUxFQVNFX0JBUlJJRVIJc3RyaW5naWZ5X2luX2MoTFdTWU5DKSAiXG4iCiAjZWxzZQotI2RlZmluZSBJU1lOQ19PTl9TTVAKLSNkZWZpbmUgTFdTWU5DX09OX1NNUAorI2RlZmluZSBQUENfQUNRVUlSRV9CQVJSSUVSCisjZGVmaW5lIFBQQ19SRUxFQVNFX0JBUlJJRVIKICNlbmRpZgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IGJiOGUwMDYuLmE2Mjk3YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTExMiw4ICsxMTIsMTMgQEAKICNlbmRpZgogCiBleHRlcm4gaW50IHNldF9kYWJyKHVuc2lnbmVkIGxvbmcgZGFicik7CisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworZXh0ZXJuIHZvaWQgZG9fc2VuZF90cmFwKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLCBpbnQgc2lnbmFsX2NvZGUsIGludCBicmtwdCk7CisjZWxzZQogZXh0ZXJuIHZvaWQgZG9fZGFicihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkgICAgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlKTsKKyNlbmRpZgogZXh0ZXJuIHZvaWQgcHJpbnRfYmFja3RyYWNlKHVuc2lnbmVkIGxvbmcgKik7CiBleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKIGV4dGVybiB2b2lkIGZsdXNoX2luc3RydWN0aW9uX2NhY2hlKHZvaWQpOwpAQCAtMjMyLDEyICsyMzcsMTIgQEAKIAl1bnNpZ25lZCBsb25nIHByZXY7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWx3YXJ4CSUwLDAsJTIgXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTIpCiAiCXN0d2N4LgklMywwLCUyIFxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCTogIj0mciIgKHByZXYpLCAiK20iICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKXApCiAJOiAiciIgKHApLCAiciIgKHZhbCkKIAk6ICJjYyIsICJtZW1vcnkiKTsKQEAgLTI3NSwxMiArMjgwLDEyIEBACiAJdW5zaWduZWQgbG9uZyBwcmV2OwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JTFdTWU5DX09OX1NNUAorCVBQQ19SRUxFQVNFX0JBUlJJRVIKICIxOglsZGFyeAklMCwwLCUyIFxuIgogCVBQQzQwNV9FUlI3NygwLCUyKQogIglzdGRjeC4JJTMsMCwlMiBcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAk6ICI9JnIiIChwcmV2KSwgIittIiAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopcCkKIAk6ICJyIiAocCksICJyIiAodmFsKQogCTogImNjIiwgIm1lbW9yeSIpOwpAQCAtMzY2LDE0ICszNzEsMTQgQEAKIAl1bnNpZ25lZCBpbnQgcHJldjsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWx3YXJ4CSUwLDAsJTIJCSMgX19jbXB4Y2hnX3UzMlxuXAogCWNtcHcJMCwlMCwlM1xuXAogCWJuZS0JMmZcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMikKICIJc3R3Y3guCSU0LDAsJTJcblwKIAlibmUtCTFiIgotCUlTWU5DX09OX1NNUAorCVBQQ19BQ1FVSVJFX0JBUlJJRVIKIAkiXG5cCiAyOiIKIAk6ICI9JnIiIChwcmV2KSwgIittIiAoKnApCkBAIC00MTIsMTMgKzQxNywxMyBAQAogCXVuc2lnbmVkIGxvbmcgcHJldjsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQlMV1NZTkNfT05fU01QCisJUFBDX1JFTEVBU0VfQkFSUklFUgogIjE6CWxkYXJ4CSUwLDAsJTIJCSMgX19jbXB4Y2hnX3U2NFxuXAogCWNtcGQJMCwlMCwlM1xuXAogCWJuZS0JMmZcblwKIAlzdGRjeC4JJTQsMCwlMlxuXAogCWJuZS0JMWIiCi0JSVNZTkNfT05fU01QCisJUFBDX0FDUVVJUkVfQkFSUklFUgogCSJcblwKIDI6IgogCTogIj0mciIgKHByZXYpLCAiK20iICgqcCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90b3BvbG9neS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKaW5kZXggYmJmODk3MC4uOGVhZWMzMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKQEAgLTM4LDI3ICszOCwzMyBAQAogCQkJCSBjcHVtYXNrX29mX25vZGUocGNpYnVzX3RvX25vZGUoYnVzKSkpCiAKIC8qIHNjaGVkX2RvbWFpbnMgU0RfTk9ERV9JTklUIGZvciBQUEM2NCBtYWNoaW5lcyAqLwotI2RlZmluZSBTRF9OT0RFX0lOSVQgKHN0cnVjdCBzY2hlZF9kb21haW4pIHsJCVwKLQkucGFyZW50CQkJPSBOVUxMLAkJCVwKLQkuY2hpbGQJCQk9IE5VTEwsCQkJXAotCS5ncm91cHMJCQk9IE5VTEwsCQkJXAotCS5taW5faW50ZXJ2YWwJCT0gOCwJCQlcCi0JLm1heF9pbnRlcnZhbAkJPSAzMiwJCQlcCi0JLmJ1c3lfZmFjdG9yCQk9IDMyLAkJCVwKLQkuaW1iYWxhbmNlX3BjdAkJPSAxMjUsCQkJXAotCS5jYWNoZV9uaWNlX3RyaWVzCT0gMSwJCQlcCi0JLmJ1c3lfaWR4CQk9IDMsCQkJXAotCS5pZGxlX2lkeAkJPSAxLAkJCVwKLQkubmV3aWRsZV9pZHgJCT0gMCwJCQlcCi0JLndha2VfaWR4CQk9IDAsCQkJXAotCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFCVwKLQkJCQl8IFNEX0JBTEFOQ0VfRVhFQwlcCi0JCQkJfCBTRF9CQUxBTkNFX0ZPUksJXAotCQkJCXwgU0RfQkFMQU5DRV9ORVdJRExFCVwKLQkJCQl8IFNEX1NFUklBTElaRSwJCVwKLQkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQlcCi0JLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCVwKLQkubnJfYmFsYW5jZV9mYWlsZWQJPSAwLAkJCVwKKyNkZWZpbmUgU0RfTk9ERV9JTklUIChzdHJ1Y3Qgc2NoZWRfZG9tYWluKSB7CQkJCVwKKwkubWluX2ludGVydmFsCQk9IDgsCQkJCQlcCisJLm1heF9pbnRlcnZhbAkJPSAzMiwJCQkJCVwKKwkuYnVzeV9mYWN0b3IJCT0gMzIsCQkJCQlcCisJLmltYmFsYW5jZV9wY3QJCT0gMTI1LAkJCQkJXAorCS5jYWNoZV9uaWNlX3RyaWVzCT0gMSwJCQkJCVwKKwkuYnVzeV9pZHgJCT0gMywJCQkJCVwKKwkuaWRsZV9pZHgJCT0gMSwJCQkJCVwKKwkubmV3aWRsZV9pZHgJCT0gMCwJCQkJCVwKKwkud2FrZV9pZHgJCT0gMCwJCQkJCVwKKwkuZm9ya2V4ZWNfaWR4CQk9IDAsCQkJCQlcCisJCQkJCQkJCQlcCisJLmZsYWdzCQkJPSAxKlNEX0xPQURfQkFMQU5DRQkJCVwKKwkJCQl8IDEqU0RfQkFMQU5DRV9ORVdJRExFCQkJXAorCQkJCXwgMSpTRF9CQUxBTkNFX0VYRUMJCQlcCisJCQkJfCAxKlNEX0JBTEFOQ0VfRk9SSwkJCVwKKwkJCQl8IDAqU0RfQkFMQU5DRV9XQUtFCQkJXAorCQkJCXwgMCpTRF9XQUtFX0FGRklORQkJCVwKKwkJCQl8IDAqU0RfUFJFRkVSX0xPQ0FMCQkJXAorCQkJCXwgMCpTRF9TSEFSRV9DUFVQT1dFUgkJCVwKKwkJCQl8IDAqU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UJCVwKKwkJCQl8IDAqU0RfU0hBUkVfUEtHX1JFU09VUkNFUwkJXAorCQkJCXwgMSpTRF9TRVJJQUxJWkUJCQlcCisJCQkJfCAwKlNEX1BSRUZFUl9TSUJMSU5HCQkJXAorCQkJCSwJCQkJCVwKKwkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQkJCVwKKwkuYmFsYW5jZV9pbnRlcnZhbAk9IDEsCQkJCQlcCiB9CiAKIGV4dGVybiB2b2lkIF9faW5pdCBkdW1wX251bWFfY3B1X3RvcG9sb2d5KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IGJkY2I1NTcuLjA3MTA5ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKQEAgLTc5MSw5ICs3OTEsOCBAQAogCQogICAgICAgICBsaSAgICAgIHI5LDEKICAgICAgICAgcmxkaWNyICByOSxyOSxNU1JfU0ZfTEcsKDYzLU1TUl9TRl9MRykKLQlvcmkJcjkscjksTVNSX0lSfE1TUl9EUnxNU1JfRkUwfE1TUl9GRTF8TVNSX0ZQCisJb3JpCXI5LHI5LE1TUl9JUnxNU1JfRFJ8TVNSX0ZFMHxNU1JfRkUxfE1TUl9GUHxNU1JfUkkKIAlhbmRjCXI2LHIwLHI5Ci0Jb3JpCXI2LHI2LE1TUl9SSQogCXN5bmMJCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIHNvIFNSUjAvMSAqLwogCW10bXNyZAlyMAkJCS8qIGRvbid0IGdldCB0cmFzaGVkICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZmlybXdhcmUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZmlybXdhcmUuYwppbmRleCAxNjc5YTcwLi42YjFmNDI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2Zpcm13YXJlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9maXJtd2FyZS5jCkBAIC0xNyw1ICsxNyw1IEBACiAKICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KIAotdW5zaWduZWQgbG9uZyBwb3dlcnBjX2Zpcm13YXJlX2ZlYXR1cmVzOwordW5zaWduZWQgbG9uZyBwb3dlcnBjX2Zpcm13YXJlX2ZlYXR1cmVzIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTChwb3dlcnBjX2Zpcm13YXJlX2ZlYXR1cmVzKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUwppbmRleCA3ZjRiZDdmLi4yNTc5M2JiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCkBAIC0yMTQsMTEgKzIxNCwxMSBAQAogCWJsCTFmCQkvKiBGaW5kIG91ciBhZGRyZXNzICovCiAxOgltZmxyCXI5CiAJcmx3aW1pCXI3LHI5LDAsMjAsMzEKLQlhZGRpCXI3LHI3LDI0CisJYWRkaQlyNyxyNywoMmYgLSAxYikKIAltdHNwcglTUFJOX1NSUjAscjcKIAltdHNwcglTUFJOX1NSUjEscjYKIAlyZmkKLQorMjoKIC8qIDQuIENsZWFyIG91dCBQSURzICYgU2VhcmNoIGluZm8gKi8KIAlsaQlyNiwwCiAJbXRzcHIgICBTUFJOX01BUzYscjYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCmluZGV4IDkwNDAzMzAuLjY0ZjZmMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwpAQCAtNzMsOCArNzMsMTAgQEAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgPGFzbS90cmFjZS5oPgogCitERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChpcnFfY3B1c3RhdF90LCBpcnFfc3RhdCk7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0woaXJxX3N0YXQpOworCiBpbnQgX19pcnFfb2Zmc2V0X3ZhbHVlOwotc3RhdGljIGludCBwcGNfc3B1cmlvdXNfaW50ZXJydXB0czsKIAogI2lmZGVmIENPTkZJR19QUEMzMgogRVhQT1JUX1NZTUJPTChfX2lycV9vZmZzZXRfdmFsdWUpOwpAQCAtMTgwLDMwICsxODIsNjQgQEAKIEVYUE9SVF9TWU1CT0wocmF3X2xvY2FsX2lycV9yZXN0b3JlKTsKICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAorc3RhdGljIGludCBzaG93X290aGVyX2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCBpbnQgcHJlYykKK3sKKwlpbnQgajsKKworI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiBkZWZpbmVkKENPTkZJR19UQVVfSU5UKQorCWlmICh0YXVfaW5pdGlhbGl6ZWQpIHsKKwkJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiVEFVIik7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgdGF1X2ludGVycnVwdHMoaikpOworCQlzZXFfcHV0cyhwLCAiICBQb3dlclBDICAgICAgICAgICAgIFRoZXJtYWwgQXNzaXN0IChjcHUgdGVtcClcbiIpOworCX0KKyNlbmRpZiAvKiBDT05GSUdfUFBDMzIgJiYgQ09ORklHX1RBVV9JTlQgKi8KKworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIkxPQyIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBwZXJfY3B1KGlycV9zdGF0LCBqKS50aW1lcl9pcnFzKTsKKyAgICAgICAgc2VxX3ByaW50ZihwLCAiICBMb2NhbCB0aW1lciBpbnRlcnJ1cHRzXG4iKTsKKworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlNQVSIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBwZXJfY3B1KGlycV9zdGF0LCBqKS5zcHVyaW91c19pcnFzKTsKKwlzZXFfcHJpbnRmKHAsICIgIFNwdXJpb3VzIGludGVycnVwdHNcbiIpOworCisJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiQ05UIik7CisJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIHBlcl9jcHUoaXJxX3N0YXQsIGopLnBtdV9pcnFzKTsKKwlzZXFfcHJpbnRmKHAsICIgIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcgaW50ZXJydXB0c1xuIik7CisKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJNQ0UiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgcGVyX2NwdShpcnFfc3RhdCwgaikubWNlX2V4Y2VwdGlvbnMpOworCXNlcV9wcmludGYocCwgIiAgTWFjaGluZSBjaGVjayBleGNlcHRpb25zXG4iKTsKKworCXJldHVybiAwOworfQorCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKIHsKLQlpbnQgaSA9ICoobG9mZl90ICopdiwgajsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBhbnlfY291bnQgPSAwOworCWludCBpID0gKihsb2ZmX3QgKikgdiwgaiwgcHJlYzsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoaSA9PSAwKSB7Ci0JCXNlcV9wdXRzKHAsICIgICAgICAgICAgICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICJDUFUlZCAgICAgICAiLCBqKTsKLQkJc2VxX3B1dGMocCwgJ1xuJyk7Ci0JfSBlbHNlIGlmIChpID09IG5yX2lycXMpIHsKLSNpZiBkZWZpbmVkKENPTkZJR19QUEMzMikgJiYgZGVmaW5lZChDT05GSUdfVEFVX0lOVCkKLQkJaWYgKHRhdV9pbml0aWFsaXplZCl7Ci0JCQlzZXFfcHV0cyhwLCAiVEFVOiAiKTsKLQkJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIHRhdV9pbnRlcnJ1cHRzKGopKTsKLQkJCXNlcV9wdXRzKHAsICIgIFBvd2VyUEMgICAgICAgICAgICAgVGhlcm1hbCBBc3Npc3QgKGNwdSB0ZW1wKVxuIik7Ci0JCX0KLSNlbmRpZiAvKiBDT05GSUdfUFBDMzIgJiYgQ09ORklHX1RBVV9JTlQqLwotCQlzZXFfcHJpbnRmKHAsICJCQUQ6ICUxMHVcbiIsIHBwY19zcHVyaW91c19pbnRlcnJ1cHRzKTsKLQorCWlmIChpID4gbnJfaXJxcykKIAkJcmV0dXJuIDA7CisKKwlmb3IgKHByZWMgPSAzLCBqID0gMTAwMDsgcHJlYyA8IDEwICYmIGogPD0gbnJfaXJxczsgKytwcmVjKQorCQlqICo9IDEwOworCisJaWYgKGkgPT0gbnJfaXJxcykKKwkJcmV0dXJuIHNob3dfb3RoZXJfaW50ZXJydXB0cyhwLCBwcmVjKTsKKworCS8qIHByaW50IGhlYWRlciAqLworCWlmIChpID09IDApIHsKKwkJc2VxX3ByaW50ZihwLCAiJSpzIiwgcHJlYyArIDgsICIiKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiQ1BVJS04ZCIsIGopOworCQlzZXFfcHV0YyhwLCAnXG4nKTsKIAl9CiAKIAlkZXNjID0gaXJxX3RvX2Rlc2MoaSk7CkBAIC0yMTEsMzcgKzI0Nyw0OCBAQAogCQlyZXR1cm4gMDsKIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCisJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQlhbnlfY291bnQgfD0ga3N0YXRfaXJxc19jcHUoaSwgaik7CiAJYWN0aW9uID0gZGVzYy0+YWN0aW9uOwotCWlmICghYWN0aW9uIHx8ICFhY3Rpb24tPmhhbmRsZXIpCi0JCWdvdG8gc2tpcDsKKwlpZiAoIWFjdGlvbiAmJiAhYW55X2NvdW50KQorCQlnb3RvIG91dDsKIAotCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7Ci0jaWZkZWYgQ09ORklHX1NNUAorCXNlcV9wcmludGYocCwgIiUqZDogIiwgcHJlYywgaSk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKLSNlbHNlCi0Jc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIAlpZiAoZGVzYy0+Y2hpcCkKLQkJc2VxX3ByaW50ZihwLCAiICVzICIsIGRlc2MtPmNoaXAtPm5hbWUpOworCQlzZXFfcHJpbnRmKHAsICIgICUtMTZzIiwgZGVzYy0+Y2hpcC0+bmFtZSk7CiAJZWxzZQotCQlzZXFfcHV0cyhwLCAiICBOb25lICAgICAgIik7CisJCXNlcV9wcmludGYocCwgIiAgJS0xNnMiLCAiTm9uZSIpOworCXNlcV9wcmludGYocCwgIiAlLThzIiwgKGRlc2MtPnN0YXR1cyAmIElSUV9MRVZFTCkgPyAiTGV2ZWwiIDogIkVkZ2UiKTsKIAotCXNlcV9wcmludGYocCwgIiVzIiwgKGRlc2MtPnN0YXR1cyAmIElSUV9MRVZFTCkgPyAiTGV2ZWwgIiA6ICJFZGdlICAiKTsKLQlzZXFfcHJpbnRmKHAsICIgICAgJXMiLCBhY3Rpb24tPm5hbWUpOworCWlmIChhY3Rpb24pIHsKKwkJc2VxX3ByaW50ZihwLCAiICAgICAlcyIsIGFjdGlvbi0+bmFtZSk7CisJCXdoaWxlICgoYWN0aW9uID0gYWN0aW9uLT5uZXh0KSAhPSBOVUxMKQorCQkJc2VxX3ByaW50ZihwLCAiLCAlcyIsIGFjdGlvbi0+bmFtZSk7CisJfQogCi0JZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQotCQlzZXFfcHJpbnRmKHAsICIsICVzIiwgYWN0aW9uLT5uYW1lKTsKIAlzZXFfcHV0YyhwLCAnXG4nKTsKLQotc2tpcDoKK291dDoKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiAvcHJvYy9zdGF0IGhlbHBlcnMKKyAqLwordTY0IGFyY2hfaXJxX3N0YXRfY3B1KHVuc2lnbmVkIGludCBjcHUpCit7CisJdTY0IHN1bSA9IHBlcl9jcHUoaXJxX3N0YXQsIGNwdSkudGltZXJfaXJxczsKKworCXN1bSArPSBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLnBtdV9pcnFzOworCXN1bSArPSBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLm1jZV9leGNlcHRpb25zOworCXN1bSArPSBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLnNwdXJpb3VzX2lycXM7CisKKwlyZXR1cm4gc3VtOworfQorCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiB2b2lkIGZpeHVwX2lycXMoY3B1bWFza190IG1hcCkKIHsKQEAgLTM1Myw4ICs0MDAsNyBAQAogCWlmIChpcnEgIT0gTk9fSVJRICYmIGlycSAhPSBOT19JUlFfSUdOT1JFKQogCQloYW5kbGVfb25lX2lycShpcnEpOwogCWVsc2UgaWYgKGlycSAhPSBOT19JUlFfSUdOT1JFKQotCQkvKiBUaGF0J3Mgbm90IFNNUCBzYWZlIC4uLiBidXQgd2hvIGNhcmVzID8gKi8KLQkJcHBjX3NwdXJpb3VzX2ludGVycnVwdHMrKzsKKwkJX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkuc3B1cmlvdXNfaXJxcysrOwogCiAJaXJxX2V4aXQoKTsKIAlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOwpAQCAtNDc0LDcgKzUyMCw3IEBACiAgKi8KIAogc3RhdGljIExJU1RfSEVBRChpcnFfaG9zdHMpOwotc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfYmlnX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soaXJxX2JpZ19sb2NrKTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmV2bWFwX3RyZWVzX2FsbG9jYXRlZDsKIHN0YXRpYyBERUZJTkVfTVVURVgocmV2bWFwX3RyZWVzX211dGV4KTsKIHN0cnVjdCBpcnFfbWFwX2VudHJ5IGlycV9tYXBbTlJfSVJRU107CkBAIC01MjAsMTQgKzU2NiwxNCBAQAogCWlmIChob3N0LT5vcHMtPm1hdGNoID09IE5VTEwpCiAJCWhvc3QtPm9wcy0+bWF0Y2ggPSBkZWZhdWx0X2lycV9ob3N0X21hdGNoOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CiAKIAkvKiBJZiBpdCdzIGEgbGVnYWN5IGNvbnRyb2xsZXIsIGNoZWNrIGZvciBkdXBsaWNhdGVzIGFuZAogCSAqIG1hcmsgaXQgYXMgYWxsb2NhdGVkICh3ZSB1c2UgaXJxIDAgaG9zdCBwb2ludGVyIGZvciB0aGF0CiAJICovCiAJaWYgKHJldm1hcF90eXBlID09IElSUV9IT1NUX01BUF9MRUdBQ1kpIHsKIAkJaWYgKGlycV9tYXBbMF0uaG9zdCAhPSBOVUxMKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIAkJCS8qIElmIHdlIGFyZSBlYXJseSBib290LCB3ZSBjYW4ndCBmcmVlIHRoZSBzdHJ1Y3R1cmUsCiAJCQkgKiB0b28gYmFkLi4uCiAJCQkgKiB0aGlzIHdpbGwgYmUgZml4ZWQgb25jZSBzbGFiIGlzIG1hZGUgYXZhaWxhYmxlIGVhcmx5CkBAIC01NDEsNyArNTg3LDcgQEAKIAl9CiAKIAlsaXN0X2FkZCgmaG9zdC0+bGluaywgJmlycV9ob3N0cyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwogCiAJLyogQWRkaXRpb25hbCBzZXR1cHMgcGVyIHJldm1hcCB0eXBlICovCiAJc3dpdGNoKHJldm1hcF90eXBlKSB7CkBAIC01OTIsMTMgKzYzOCwxMyBAQAogCSAqIHRoZSBhYnNlbmNlIG9mIGEgZGV2aWNlIG5vZGUuIFRoaXMgaXNuJ3QgYSBwcm9ibGVtIHNvIGZhcgogCSAqIHlldCB0aG91Z2guLi4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsICZpcnFfaG9zdHMsIGxpbmspCiAJCWlmIChoLT5vcHMtPm1hdGNoKGgsIG5vZGUpKSB7CiAJCQlmb3VuZCA9IGg7CiAJCQlicmVhazsKIAkJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gZm91bmQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcnFfZmluZF9ob3N0KTsKQEAgLTk2Nyw3ICsxMDEzLDcgQEAKIAlpZiAoY291bnQgPT0gMCB8fCBjb3VudCA+IChpcnFfdmlycV9jb3VudCAtIE5VTV9JU0FfSU5URVJSVVBUUykpCiAJCXJldHVybiBOT19JUlE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIAogCS8qIFVzZSBoaW50IGZvciAxIGludGVycnVwdCBpZiBhbnkgKi8KIAlpZiAoY291bnQgPT0gMSAmJiBoaW50ID49IE5VTV9JU0FfSU5URVJSVVBUUyAmJgpAQCAtOTkxLDcgKzEwMzcsNyBAQAogCQl9CiAJfQogCWlmIChmb3VuZCA9PSBOT19JUlEpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIE5PX0lSUTsKIAl9CiAgaGludF9mb3VuZDoKQEAgLTEwMDAsNyArMTA0Niw3IEBACiAJCXNtcF93bWIoKTsKIAkJaXJxX21hcFtpXS5ob3N0ID0gaG9zdDsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwogCXJldHVybiBmb3VuZDsKIH0KIApAQCAtMTAxMiw3ICsxMDU4LDcgQEAKIAlXQVJOX09OICh2aXJxIDwgTlVNX0lTQV9JTlRFUlJVUFRTKTsKIAlXQVJOX09OIChjb3VudCA9PSAwIHx8ICh2aXJxICsgY291bnQpID4gaXJxX3ZpcnFfY291bnQpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gdmlycTsgaSA8ICh2aXJxICsgY291bnQpOyBpKyspIHsKIAkJc3RydWN0IGlycV9ob3N0ICpob3N0OwogCkBAIC0xMDI1LDcgKzEwNzEsNyBAQAogCQlzbXBfd21iKCk7CiAJCWlycV9tYXBbaV0uaG9zdCA9IE5VTEw7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKIH0KIAogaW50IGFyY2hfZWFybHlfaXJxX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMKaW5kZXggYjZiZDFlYS4uNDFiYWRhMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMKQEAgLTMzMyw3ICszMzMsNyBAQAogCQlhdG9taWNfc2V0KCZrZ2RiX2NwdV9kb2luZ19zaW5nbGVfc3RlcCwgLTEpOwogCQkvKiBzZXQgdGhlIHRyYWNlIGJpdCBpZiB3ZSdyZSBzdGVwcGluZyAqLwogCQlpZiAocmVtY29tX2luX2J1ZmZlclswXSA9PSAncycpIHsKLSNpZiBkZWZpbmVkKENPTkZJR180MHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAkJCW10c3ByKFNQUk5fREJDUjAsCiAJCQkgICAgICBtZnNwcihTUFJOX0RCQ1IwKSB8IERCQ1IwX0lDIHwgREJDUjBfSURNKTsKIAkJCWxpbnV4X3JlZ3MtPm1zciB8PSBNU1JfREU7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGM5MzI5NzguLjNmZDFhZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLSNpZmRlZiBDT05GSUdfQk9PS0UKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAjZGVmaW5lIE1TUl9TSU5HTEVTVEVQCShNU1JfREUpCiAjZWxzZQogI2RlZmluZSBNU1JfU0lOR0xFU1RFUAkoTVNSX1NFKQpAQCAtMTEwLDcgKzExMCw3IEBACiAJICogbGlrZSBEZWNyZW1lbnRlciBvciBFeHRlcm5hbCBJbnRlcnJ1cHQgKi8KIAlyZWdzLT5tc3IgJj0gfk1TUl9FRTsKIAlyZWdzLT5tc3IgfD0gTVNSX1NJTkdMRVNURVA7Ci0jaWZkZWYgQ09ORklHX0JPT0tFCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogCXJlZ3MtPm1zciAmPSB+TVNSX0NFOwogCW10c3ByKFNQUk5fREJDUjAsIG1mc3ByKFNQUk5fREJDUjApIHwgREJDUjBfSUMgfCBEQkNSMF9JRE0pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jCmluZGV4IDc5YTAwYmIuLmQwOWQxYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jCkBAIC0zNTksNyArMzU5LDcgQEAKIAogCXVuc2lnbmVkIGNoYXIgKmxvY2FsX2J1ZmZlciA9IGttYWxsb2MoU1BMUEFSX01BWExFTkdUSCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFsb2NhbF9idWZmZXIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAlcyBrbWFsbG9jIGZhaWx1cmUgYXQgbGluZSAlZCBcbiIsCisJCXByaW50ayhLRVJOX0VSUiAiJXMgJXMga21hbGxvYyBmYWlsdXJlIGF0IGxpbmUgJWRcbiIsCiAJCSAgICAgICBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKTsKIAkJcmV0dXJuOwogCX0KQEAgLTM4MywxMyArMzgzLDEzIEBACiAJCWludCBpZHgsIHdfaWR4OwogCQljaGFyICp3b3JrYnVmZmVyID0ga3phbGxvYyhTUExQQVJfTUFYTEVOR1RILCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF3b3JrYnVmZmVyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzICVzIGttYWxsb2MgZmFpbHVyZSBhdCBsaW5lICVkIFxuIiwKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMgJXMga21hbGxvYyBmYWlsdXJlIGF0IGxpbmUgJWRcbiIsCiAJCQkgICAgICAgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCQlrZnJlZShsb2NhbF9idWZmZXIpOwogCQkJcmV0dXJuOwogCQl9CiAjaWZkZWYgTFBBUkNGR19ERUJVRwotCQlwcmludGsoS0VSTl9JTkZPICJzdWNjZXNzIGNhbGxpbmcgZ2V0LXN5c3RlbS1wYXJhbWV0ZXIgXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAic3VjY2VzcyBjYWxsaW5nIGdldC1zeXN0ZW0tcGFyYW1ldGVyXG4iKTsKICNlbmRpZgogCQlzcGxwYXJfc3RybGVuID0gbG9jYWxfYnVmZmVyWzBdICogMjU2ICsgbG9jYWxfYnVmZmVyWzFdOwogCQlsb2NhbF9idWZmZXIgKz0gMjsJLyogc3RlcCBvdmVyIHN0cmxlbiB2YWx1ZSAqLwpAQCAtNDQwLDcgKzQ0MCw3IEBACiAKIAl3aGlsZSAoKGNwdXNfZG4gPSBvZl9maW5kX25vZGVfYnlfdHlwZShjcHVzX2RuLCAiY3B1IikpKSB7CiAjaWZkZWYgTFBBUkNGR19ERUJVRwotCQlwcmludGsoS0VSTl9FUlIgImNwdXNfZG4gJXAgXG4iLCBjcHVzX2RuKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjcHVzX2RuICVwXG4iLCBjcHVzX2RuKTsKICNlbmRpZgogCQljb3VudCsrOwogCX0KQEAgLTcyNSw3ICs3MjUsNyBAQAogCWNvbnN0IHVuc2lnbmVkIGludCAqbHBfaW5kZXhfcHRyOwogCXVuc2lnbmVkIGludCBscF9pbmRleCA9IDA7CiAKLQlzZXFfcHJpbnRmKG0sICIlcyAlcyBcbiIsIE1PRFVMRV9OQU1FLCBNT0RVTEVfVkVSUyk7CisJc2VxX3ByaW50ZihtLCAiJXMgJXNcbiIsIE1PRFVMRV9OQU1FLCBNT0RVTEVfVkVSUyk7CiAKIAlyb290ZG4gPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOwogCWlmIChyb290ZG4pIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYwppbmRleCBhZDQ2MWU3Li45Y2YxOTdmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jCkBAIC0zMzgsOCArMzM4LDggQEAKIAogCXJjID0gbnZyYW1fd3JpdGVfaGVhZGVyKG5ld19wYXJ0KTsKIAlpZiAocmMgPD0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIm52cmFtX2NyZWF0ZV9vc19wYXJ0aXRpb246IG52cmFtX3dyaXRlX2hlYWRlciBcCi0JCQkJZmFpbGVkICglZClcbiIsIHJjKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJudnJhbV9jcmVhdGVfb3NfcGFydGl0aW9uOiBudnJhbV93cml0ZV9oZWFkZXIgIgorCQkJCSJmYWlsZWQgKCVkKVxuIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCkBAIC0zNDksNyArMzQ5LDcgQEAKIAlyYyA9IHBwY19tZC5udnJhbV93cml0ZSgoY2hhciAqKSZzZXFfaW5pdCwgc2l6ZW9mKHNlcV9pbml0KSwgJnRtcF9pbmRleCk7CiAJaWYgKHJjIDw9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJudnJhbV9jcmVhdGVfb3NfcGFydGl0aW9uOiBudnJhbV93cml0ZSAiCi0JCQkJImZhaWxlZCAoJWQpXG4iLCByYyk7CisJCSAgICAgICAiZmFpbGVkICglZClcbiIsIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIAkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfcGxhdGZvcm0uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfcGxhdGZvcm0uYwppbmRleCAxYTRmYzBkLi42NjZkMDhkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX3BsYXRmb3JtLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9wbGF0Zm9ybS5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIHN0YXRpYyBpbnQgb2ZfZGV2X3BoYW5kbGVfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogCXBoYW5kbGUgKnBoID0gZGF0YTsKLQlyZXR1cm4gdG9fb2ZfZGV2aWNlKGRldiktPm5vZGUtPmxpbnV4X3BoYW5kbGUgPT0gKnBoOworCXJldHVybiB0b19vZl9kZXZpY2UoZGV2KS0+bm9kZS0+cGhhbmRsZSA9PSAqcGg7CiB9CiAKIHN0cnVjdCBvZl9kZXZpY2UgKm9mX2ZpbmRfZGV2aWNlX2J5X3BoYW5kbGUocGhhbmRsZSBwaCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKaW5kZXggY2FkYmVkNi4uMjU5N2Y5NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKQEAgLTEwNDcsMTAgKzEwNDcsOCBAQAogCiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGJ1cy0+c2VsZjsKIAotCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7ICsraSkgewotCQlpZiAoKHJlcyA9IGJ1cy0+cmVzb3VyY2VbaV0pID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJaWYgKCFyZXMtPmZsYWdzKQorCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByZXMsIGkpIHsKKwkJaWYgKCFyZXMgfHwgIXJlcy0+ZmxhZ3MpCiAJCQljb250aW51ZTsKIAkJaWYgKGkgPj0gMyAmJiBidXMtPnNlbGYtPnRyYW5zcGFyZW50KQogCQkJY29udGludWU7CkBAIC0xMTgxLDIxICsxMTc5LDIwIEBACiAgKiBidXQgd2Ugd2FudCB0byB0cnkgdG8gYXZvaWQgYWxsb2NhdGluZyBhdCAweDI5MDAtMHgyYmZmCiAgKiB3aGljaCBtaWdodCBoYXZlIGJlIG1pcnJvcmVkIGF0IDB4MDEwMC0weDAzZmYuLgogICovCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCityZXNvdXJjZV9zaXplX3QgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkYXRhOworCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKLQogCQlpZiAoc2tpcF9pc2FfaW9yZXNvdXJjZV9hbGlnbihkZXYpKQotCQkJcmV0dXJuOwotCQlpZiAoc3RhcnQgJiAweDMwMCkgeworCQkJcmV0dXJuIHN0YXJ0OworCQlpZiAoc3RhcnQgJiAweDMwMCkKIAkJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwotCQkJcmVzLT5zdGFydCA9IHN0YXJ0OwotCQl9CiAJfQorCisJcmV0dXJuIHN0YXJ0OwogfQogRVhQT1JUX1NZTUJPTChwY2liaW9zX2FsaWduX3Jlc291cmNlKTsKIApAQCAtMTI3OCw5ICsxMjc1LDggQEAKIAlwcl9kZWJ1ZygiUENJOiBBbGxvY2F0aW5nIGJ1cyByZXNvdXJjZXMgZm9yICUwNHg6JTAyeC4uLlxuIiwKIAkJIHBjaV9kb21haW5fbnIoYnVzKSwgYnVzLT5udW1iZXIpOwogCi0JZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgKytpKSB7Ci0JCWlmICgocmVzID0gYnVzLT5yZXNvdXJjZVtpXSkgPT0gTlVMTCB8fCAhcmVzLT5mbGFncwotCQkgICAgfHwgcmVzLT5zdGFydCA+IHJlcy0+ZW5kIHx8IHJlcy0+cGFyZW50KQorCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByZXMsIGkpIHsKKwkJaWYgKCFyZXMgfHwgIXJlcy0+ZmxhZ3MgfHwgcmVzLT5zdGFydCA+IHJlcy0+ZW5kIHx8IHJlcy0+cGFyZW50KQogCQkJY29udGludWU7CiAJCWlmIChidXMtPnBhcmVudCA9PSBOVUxMKQogCQkJcHIgPSAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pID8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCmluZGV4IGNjZjU2YWMuLmQ0M2ZjNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYwpAQCAtMjI0LDcgKzIyNCw3IEBACiAJICogRzUgbWFjaGluZXMuLi4gU28gd2hlbiBzb21ldGhpbmcgYXNrcyBmb3IgYnVzIDAgaW8gYmFzZQogCSAqIChidXMgMCBpcyBIVCByb290KSwgd2UgcmV0dXJuIHRoZSBBR1Agb25lIGluc3RlYWQuCiAJICovCi0JaWYgKGluX2J1cyA9PSAwICYmIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkgeworCWlmIChpbl9idXMgPT0gMCAmJiBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0M0IikpIHsKIAkJc3RydWN0IGRldmljZV9ub2RlICphZ3A7CiAKIAkJYWdwID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgInUzLWFncCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfb2Zfc2Nhbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfb2Zfc2Nhbi5jCmluZGV4IDRhYTE3NDAuLmNkMTFkNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpX29mX3NjYW4uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9vZl9zY2FuLmMKQEAgLTMwNCw3ICszMDQsNyBAQAogCWludCByZWdsZW4sIGRldmZuOwogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAKLQlwcl9kZWJ1Zygib2Zfc2Nhbl9idXMoJXMpIGJ1cyBubyAlZC4uLiBcbiIsCisJcHJfZGVidWcoIm9mX3NjYW5fYnVzKCVzKSBidXMgbm8gJWQuLi5cbiIsCiAJCSBub2RlLT5mdWxsX25hbWUsIGJ1cy0+bnVtYmVyKTsKIAogCS8qIFNjYW4gZGlyZWN0IGNoaWxkcmVuICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY2FsbGNoYWluLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfY2FsbGNoYWluLmMKaW5kZXggYTNjMTFjYS4uOTVhZDlkYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYwpAQCAtNDk1LDkgKzQ5NSw2IEBACiAKIAllbnRyeS0+bnIgPSAwOwogCi0JaWYgKGN1cnJlbnQtPnBpZCA9PSAwKQkJLyogaWRsZSB0YXNrPyAqLwotCQlyZXR1cm4gZW50cnk7Ci0KIAlpZiAoIXVzZXJfbW9kZShyZWdzKSkgewogCQlwZXJmX2NhbGxjaGFpbl9rZXJuZWwocmVncywgZW50cnkpOwogCQlpZiAoY3VycmVudC0+bW0pCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IDFlYjg1ZmIuLmI2Y2Y4ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC03MTgsMTAgKzcxOCwxMCBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgdm9pZCBldmVudF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBjcHUpCitzdGF0aWMgdm9pZCBldmVudF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkU7Ci0JZXZlbnQtPm9uY3B1ID0gY3B1OworCWV2ZW50LT5vbmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlldmVudC0+dHN0YW1wX3J1bm5pbmcgKz0gZXZlbnQtPmN0eC0+dGltZSAtIGV2ZW50LT50c3RhbXBfc3RvcHBlZDsKIAlpZiAoaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQpKQogCQlldmVudC0+cG11LT5lbmFibGUoZXZlbnQpOwpAQCAtNzM1LDcgKzczNSw3IEBACiAgKi8KIGludCBod19wZXJmX2dyb3VwX3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpncm91cF9sZWFkZXIsCiAJICAgICAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCi0JICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwgaW50IGNwdSkKKwkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodzsKIAlsb25nIGksIG4sIG4wOwpAQCAtNzY2LDEwICs3NjYsMTAgQEAKIAkJY3B1aHctPmV2ZW50W2ldLT5ody5jb25maWcgPSBjcHVody0+ZXZlbnRzW2ldOwogCWNwdWN0eC0+YWN0aXZlX29uY3B1ICs9IG47CiAJbiA9IDE7Ci0JZXZlbnRfc2NoZWRfaW4oZ3JvdXBfbGVhZGVyLCBjcHUpOworCWV2ZW50X3NjaGVkX2luKGdyb3VwX2xlYWRlcik7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZncm91cF9sZWFkZXItPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKIAkJaWYgKHN1Yi0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9PRkYpIHsKLQkJCWV2ZW50X3NjaGVkX2luKHN1YiwgY3B1KTsKKwkJCWV2ZW50X3NjaGVkX2luKHN1Yik7CiAJCQkrK247CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BtYy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wbWMuYwppbmRleCAwNTE2ZTJkLi40NjE0OTliIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BtYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcG1jLmMKQEAgLTM3LDcgKzM3LDcgQEAKIH0KIAogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBtY19vd25lcl9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHBtY19vd25lcl9sb2NrKTsKIHN0YXRpYyB2b2lkICpwbWNfb3duZXJfY2FsbGVyOyAvKiBtb3N0bHkgZm9yIGRlYnVnZ2luZyAqLwogcGVyZl9pcnFfdCBwZXJmX2lycSA9IGR1bW15X3BlcmY7CiAKQEAgLTQ1LDcgKzQ1LDcgQEAKIHsKIAlpbnQgZXJyID0gMDsKIAotCXNwaW5fbG9jaygmcG1jX293bmVyX2xvY2spOworCXJhd19zcGluX2xvY2soJnBtY19vd25lcl9sb2NrKTsKIAogCWlmIChwbWNfb3duZXJfY2FsbGVyKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInJlc2VydmVfcG1jX2hhcmR3YXJlOiAiCkBAIC01OSwyMSArNTksMjEgQEAKIAlwZXJmX2lycSA9IG5ld19wZXJmX2lycSA/IG5ld19wZXJmX2lycSA6IGR1bW15X3BlcmY7CiAKICBvdXQ6Ci0Jc3Bpbl91bmxvY2soJnBtY19vd25lcl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnBtY19vd25lcl9sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVzZXJ2ZV9wbWNfaGFyZHdhcmUpOwogCiB2b2lkIHJlbGVhc2VfcG1jX2hhcmR3YXJlKHZvaWQpCiB7Ci0Jc3Bpbl9sb2NrKCZwbWNfb3duZXJfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmcG1jX293bmVyX2xvY2spOwogCiAJV0FSTl9PTighIHBtY19vd25lcl9jYWxsZXIpOwogCiAJcG1jX293bmVyX2NhbGxlciA9IE5VTEw7CiAJcGVyZl9pcnEgPSBkdW1teV9wZXJmOwogCi0Jc3Bpbl91bmxvY2soJnBtY19vd25lcl9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnBtY19vd25lcl9sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJlbGVhc2VfcG1jX2hhcmR3YXJlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwppbmRleCA3YjgxNmRhLi5lNGQ3MWNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjQ1LDYgKzI0NSwyNCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKK3ZvaWQgZG9fc2VuZF90cmFwKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCSAgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlLCBpbnQgc2lnbmFsX2NvZGUsIGludCBicmVha3B0KQoreworCXNpZ2luZm9fdCBpbmZvOworCisJaWYgKG5vdGlmeV9kaWUoRElFX0RBQlJfTUFUQ0gsICJkYWJyX21hdGNoIiwgcmVncywgZXJyb3JfY29kZSwKKwkJCTExLCBTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKKwkJcmV0dXJuOworCisJLyogRGVsaXZlciB0aGUgc2lnbmFsIHRvIHVzZXJzcGFjZSAqLworCWluZm8uc2lfc2lnbm8gPSBTSUdUUkFQOworCWluZm8uc2lfZXJybm8gPSBicmVha3B0OwkvKiBicmVha3BvaW50IG9yIHdhdGNocG9pbnQgaWQgKi8KKwlpbmZvLnNpX2NvZGUgPSBzaWduYWxfY29kZTsKKwlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKilhZGRyZXNzOworCWZvcmNlX3NpZ19pbmZvKFNJR1RSQVAsICZpbmZvLCBjdXJyZW50KTsKK30KKyNlbHNlCS8qICFDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTICovCiB2b2lkIGRvX2RhYnIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJICAgIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSkKIHsKQEAgLTI1NywxMiArMjc1LDYgQEAKIAlpZiAoZGVidWdnZXJfZGFicl9tYXRjaChyZWdzKSkKIAkJcmV0dXJuOwogCi0JLyogQ2xlYXIgdGhlIERBQyBhbmQgc3RydWN0IGVudHJpZXMuICBPbmUgc2hvdCB0cmlnZ2VyICovCi0jaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpCi0JbXRzcHIoU1BSTl9EQkNSMCwgbWZzcHIoU1BSTl9EQkNSMCkgJiB+KERCU1JfREFDMVIgfCBEQlNSX0RBQzFXCi0JCQkJCQkJfCBEQkNSMF9JRE0pKTsKLSNlbmRpZgotCiAJLyogQ2xlYXIgdGhlIERBQlIgKi8KIAlzZXRfZGFicigwKTsKIApAQCAtMjczLDkgKzI4NSw4MiBAQAogCWluZm8uc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKWFkZHJlc3M7CiAJZm9yY2Vfc2lnX2luZm8oU0lHVFJBUCwgJmluZm8sIGN1cnJlbnQpOwogfQorI2VuZGlmCS8qIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGN1cnJlbnRfZGFicik7CiAKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCisvKgorICogU2V0IHRoZSBkZWJ1ZyByZWdpc3RlcnMgYmFjayB0byB0aGVpciBkZWZhdWx0ICJzYWZlIiB2YWx1ZXMuCisgKi8KK3N0YXRpYyB2b2lkIHNldF9kZWJ1Z19yZWdfZGVmYXVsdHMoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCkKK3sKKwl0aHJlYWQtPmlhYzEgPSB0aHJlYWQtPmlhYzIgPSAwOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0lBQ1MgPiAyCisJdGhyZWFkLT5pYWMzID0gdGhyZWFkLT5pYWM0ID0gMDsKKyNlbmRpZgorCXRocmVhZC0+ZGFjMSA9IHRocmVhZC0+ZGFjMiA9IDA7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyA+IDAKKwl0aHJlYWQtPmR2YzEgPSB0aHJlYWQtPmR2YzIgPSAwOworI2VuZGlmCisJdGhyZWFkLT5kYmNyMCA9IDA7CisjaWZkZWYgQ09ORklHX0JPT0tFCisJLyoKKwkgKiBGb3JjZSBVc2VyL1N1cGVydmlzb3IgYml0cyB0byBiMTEgKHVzZXItb25seSBNU1JbUFJdPTEpCisJICovCisJdGhyZWFkLT5kYmNyMSA9IERCQ1IxX0lBQzFVUyB8IERCQ1IxX0lBQzJVUyB8CVwKKwkJCURCQ1IxX0lBQzNVUyB8IERCQ1IxX0lBQzRVUzsKKwkvKgorCSAqIEZvcmNlIERhdGEgQWRkcmVzcyBDb21wYXJlIFVzZXIvU3VwZXJ2aXNvciBiaXRzIHRvIGJlIFVzZXItb25seQorCSAqICgwYjExIE1TUltQUl09MSkgYW5kIHNldCBhbGwgb3RoZXIgYml0cyBpbiBEQkNSMiByZWdpc3RlciB0byBiZSAwLgorCSAqLworCXRocmVhZC0+ZGJjcjIgPSBEQkNSMl9EQUMxVVMgfCBEQkNSMl9EQUMyVVM7CisjZWxzZQorCXRocmVhZC0+ZGJjcjEgPSAwOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHByaW1lX2RlYnVnX3JlZ3Moc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCkKK3sKKwltdHNwcihTUFJOX0lBQzEsIHRocmVhZC0+aWFjMSk7CisJbXRzcHIoU1BSTl9JQUMyLCB0aHJlYWQtPmlhYzIpOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0lBQ1MgPiAyCisJbXRzcHIoU1BSTl9JQUMzLCB0aHJlYWQtPmlhYzMpOworCW10c3ByKFNQUk5fSUFDNCwgdGhyZWFkLT5pYWM0KTsKKyNlbmRpZgorCW10c3ByKFNQUk5fREFDMSwgdGhyZWFkLT5kYWMxKTsKKwltdHNwcihTUFJOX0RBQzIsIHRocmVhZC0+ZGFjMik7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyA+IDAKKwltdHNwcihTUFJOX0RWQzEsIHRocmVhZC0+ZHZjMSk7CisJbXRzcHIoU1BSTl9EVkMyLCB0aHJlYWQtPmR2YzIpOworI2VuZGlmCisJbXRzcHIoU1BSTl9EQkNSMCwgdGhyZWFkLT5kYmNyMCk7CisJbXRzcHIoU1BSTl9EQkNSMSwgdGhyZWFkLT5kYmNyMSk7CisjaWZkZWYgQ09ORklHX0JPT0tFCisJbXRzcHIoU1BSTl9EQkNSMiwgdGhyZWFkLT5kYmNyMik7CisjZW5kaWYKK30KKy8qCisgKiBVbmxlc3MgbmVpdGhlciB0aGUgb2xkIG9yIG5ldyB0aHJlYWQgYXJlIG1ha2luZyB1c2Ugb2YgdGhlCisgKiBkZWJ1ZyByZWdpc3RlcnMsIHNldCB0aGUgZGVidWcgcmVnaXN0ZXJzIGZyb20gdGhlIHZhbHVlcworICogc3RvcmVkIGluIHRoZSBuZXcgdGhyZWFkLgorICovCitzdGF0aWMgdm9pZCBzd2l0Y2hfYm9va2VfZGVidWdfcmVncyhzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqbmV3X3RocmVhZCkKK3sKKwlpZiAoKGN1cnJlbnQtPnRocmVhZC5kYmNyMCAmIERCQ1IwX0lETSkKKwkJfHwgKG5ld190aHJlYWQtPmRiY3IwICYgREJDUjBfSURNKSkKKwkJCXByaW1lX2RlYnVnX3JlZ3MobmV3X3RocmVhZCk7Cit9CisjZWxzZQkvKiAhQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLworc3RhdGljIHZvaWQgc2V0X2RlYnVnX3JlZ19kZWZhdWx0cyhzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkKQoreworCWlmICh0aHJlYWQtPmRhYnIpIHsKKwkJdGhyZWFkLT5kYWJyID0gMDsKKwkJc2V0X2RhYnIoMCk7CisJfQorfQorI2VuZGlmCS8qIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KKwogaW50IHNldF9kYWJyKHVuc2lnbmVkIGxvbmcgZGFicikKIHsKIAlfX2dldF9jcHVfdmFyKGN1cnJlbnRfZGFicikgPSBkYWJyOwpAQCAtMjg0LDcgKzM2OSw3IEBACiAJCXJldHVybiBwcGNfbWQuc2V0X2RhYnIoZGFicik7CiAKIAkvKiBYWFggc2hvdWxkIHdlIGhhdmUgYSBDUFVfRlRSX0hBU19EQUJSID8gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJbXRzcHIoU1BSTl9EQUMxLCBkYWJyKTsKICNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19CT09LM1MpCiAJbXRzcHIoU1BSTl9EQUJSLCBkYWJyKTsKQEAgLTM3MSwxMCArNDU2LDggQEAKIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKQotCS8qIElmIG5ldyB0aHJlYWQgREFDIChIVyBicmVha3BvaW50KSBpcyB0aGUgc2FtZSB0aGVuIGxlYXZlIGl0ICovCi0JaWYgKG5ldy0+dGhyZWFkLmRhYnIpCi0JCXNldF9kYWJyKG5ldy0+dGhyZWFkLmRhYnIpOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKKwlzd2l0Y2hfYm9va2VfZGVidWdfcmVncygmbmV3LT50aHJlYWQpOwogI2Vsc2UKIAlpZiAodW5saWtlbHkoX19nZXRfY3B1X3ZhcihjdXJyZW50X2RhYnIpICE9IG5ldy0+dGhyZWFkLmRhYnIpKQogCQlzZXRfZGFicihuZXctPnRocmVhZC5kYWJyKTsKQEAgLTUxNCw3ICs1OTcsNyBAQAogCXByaW50aygiICBDUjogJTA4bHggIFhFUjogJTA4bHhcbiIsIHJlZ3MtPmNjciwgcmVncy0+eGVyKTsKIAl0cmFwID0gVFJBUChyZWdzKTsKIAlpZiAodHJhcCA9PSAweDMwMCB8fCB0cmFwID09IDB4NjAwKQotI2lmIGRlZmluZWQoQ09ORklHXzR4eCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogCQlwcmludGsoIkRFQVI6ICJSRUciLCBFU1I6ICJSRUciXG4iLCByZWdzLT5kYXIsIHJlZ3MtPmRzaXNyKTsKICNlbHNlCiAJCXByaW50aygiREFSOiAiUkVHIiwgRFNJU1I6ICJSRUciXG4iLCByZWdzLT5kYXIsIHJlZ3MtPmRzaXNyKTsKQEAgLTU1NiwxNCArNjM5LDcgQEAKIHsKIAlkaXNjYXJkX2xhenlfY3B1X3N0YXRlKCk7CiAKLQlpZiAoY3VycmVudC0+dGhyZWFkLmRhYnIpIHsKLQkJY3VycmVudC0+dGhyZWFkLmRhYnIgPSAwOwotCQlzZXRfZGFicigwKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKQotCQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfihEQlNSX0RBQzFSIHwgREJTUl9EQUMxVyk7Ci0jZW5kaWYKLQl9CisJc2V0X2RlYnVnX3JlZ19kZWZhdWx0cygmY3VycmVudC0+dGhyZWFkKTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwppbmRleCA0ZWMzMDA4Li40MzIzOGIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwpAQCAtNjEsMzY1ICs2MSwxMiBAQAogI2RlZmluZSBEQkcoZm10Li4uKQogI2VuZGlmCiAKLQotc3RhdGljIGludCBfX2luaXRkYXRhIGR0X3Jvb3RfYWRkcl9jZWxsczsKLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBkdF9yb290X3NpemVfY2VsbHM7Ci0KICNpZmRlZiBDT05GSUdfUFBDNjQKIGludCBfX2luaXRkYXRhIGlvbW11X2lzX29mZjsKIGludCBfX2luaXRkYXRhIGlvbW11X2ZvcmNlX29uOwogdW5zaWduZWQgbG9uZyB0Y2VfYWxsb2Nfc3RhcnQsIHRjZV9hbGxvY19lbmQ7CiAjZW5kaWYKIAotdHlwZWRlZiB1MzIgY2VsbF90OwotCi0jaWYgMAotc3RhdGljIHN0cnVjdCBib290X3BhcmFtX2hlYWRlciAqaW5pdGlhbF9ib290X3BhcmFtcyBfX2luaXRkYXRhOwotI2Vsc2UKLXN0cnVjdCBib290X3BhcmFtX2hlYWRlciAqaW5pdGlhbF9ib290X3BhcmFtczsKLSNlbmRpZgotCi1leHRlcm4gc3RydWN0IGRldmljZV9ub2RlICphbGxub2RlczsJLyogdGVtcG9yYXJ5IHdoaWxlIG1lcmdpbmcgKi8KLQotZXh0ZXJuIHJ3bG9ja190IGRldnRyZWVfbG9jazsJLyogdGVtcG9yYXJ5IHdoaWxlIG1lcmdpbmcgKi8KLQotLyogZXhwb3J0IHRoYXQgdG8gb3V0c2lkZSB3b3JsZCAqLwotc3RydWN0IGRldmljZV9ub2RlICpvZl9jaG9zZW47Ci0KLXN0YXRpYyBpbmxpbmUgY2hhciAqZmluZF9mbGF0X2R0X3N0cmluZyh1MzIgb2Zmc2V0KQotewotCXJldHVybiAoKGNoYXIgKilpbml0aWFsX2Jvb3RfcGFyYW1zKSArCi0JCWluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJpbmdzICsgb2Zmc2V0OwotfQotCi0vKioKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzY2FuIHRoZSBmbGF0dGVuZWQgZGV2aWNlLXRyZWUsIGl0IGlzCi0gKiB1c2VkIHRvIGV4dHJhY3QgdGhlIG1lbW9yeSBpbmZvcm1hdGlvbnMgYXQgYm9vdCBiZWZvcmUgd2UgY2FuCi0gKiB1bmZsYXR0ZW4gdGhlIHRyZWUKLSAqLwotaW50IF9faW5pdCBvZl9zY2FuX2ZsYXRfZHQoaW50ICgqaXQpKHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQkgICAgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsCi0JCQkJICAgICB2b2lkICpkYXRhKSwKLQkJCSAgIHZvaWQgKmRhdGEpCi17Ci0JdW5zaWduZWQgbG9uZyBwID0gKCh1bnNpZ25lZCBsb25nKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKLQkJaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cnVjdDsKLQlpbnQgcmMgPSAwOwotCWludCBkZXB0aCA9IC0xOwotCi0JZG8gewotCQl1MzIgdGFnID0gKigodTMyICopcCk7Ci0JCWNoYXIgKnBhdGhwOwotCQkKLQkJcCArPSA0OwotCQlpZiAodGFnID09IE9GX0RUX0VORF9OT0RFKSB7Ci0JCQlkZXB0aCAtLTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICh0YWcgPT0gT0ZfRFRfTk9QKQotCQkJY29udGludWU7Ci0JCWlmICh0YWcgPT0gT0ZfRFRfRU5EKQotCQkJYnJlYWs7Ci0JCWlmICh0YWcgPT0gT0ZfRFRfUFJPUCkgewotCQkJdTMyIHN6ID0gKigodTMyICopcCk7Ci0JCQlwICs9IDg7Ci0JCQlpZiAoaW5pdGlhbF9ib290X3BhcmFtcy0+dmVyc2lvbiA8IDB4MTApCi0JCQkJcCA9IF9BTElHTihwLCBzeiA+PSA4ID8gOCA6IDQpOwotCQkJcCArPSBzejsKLQkJCXAgPSBfQUxJR04ocCwgNCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAodGFnICE9IE9GX0RUX0JFR0lOX05PREUpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkludmFsaWQgdGFnICV4IHNjYW5uaW5nIGZsYXR0ZW5lZCIKLQkJCSAgICAgICAiIGRldmljZSB0cmVlICFcbiIsIHRhZyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlkZXB0aCsrOwotCQlwYXRocCA9IChjaGFyICopcDsKLQkJcCA9IF9BTElHTihwICsgc3RybGVuKHBhdGhwKSArIDEsIDQpOwotCQlpZiAoKCpwYXRocCkgPT0gJy8nKSB7Ci0JCQljaGFyICpscCwgKm5wOwotCQkJZm9yIChscCA9IE5VTEwsIG5wID0gcGF0aHA7ICpucDsgbnArKykKLQkJCQlpZiAoKCpucCkgPT0gJy8nKQotCQkJCQlscCA9IG5wKzE7Ci0JCQlpZiAobHAgIT0gTlVMTCkKLQkJCQlwYXRocCA9IGxwOwotCQl9Ci0JCXJjID0gaXQocCwgcGF0aHAsIGRlcHRoLCBkYXRhKTsKLQkJaWYgKHJjICE9IDApCi0JCQlicmVhazsJCQotCX0gd2hpbGUoMSk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgX19pbml0IG9mX2dldF9mbGF0X2R0X3Jvb3Qodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHAgPSAoKHVuc2lnbmVkIGxvbmcpaW5pdGlhbF9ib290X3BhcmFtcykgKwotCQlpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RydWN0OwotCi0Jd2hpbGUoKigodTMyICopcCkgPT0gT0ZfRFRfTk9QKQotCQlwICs9IDQ7Ci0JQlVHX09OICgqKCh1MzIgKilwKSAhPSBPRl9EVF9CRUdJTl9OT0RFKTsKLQlwICs9IDQ7Ci0JcmV0dXJuIF9BTElHTihwICsgc3RybGVuKChjaGFyICopcCkgKyAxLCA0KTsKLX0KLQotLyoqCi0gKiBUaGlzICBmdW5jdGlvbiBjYW4gYmUgdXNlZCB3aXRoaW4gc2Nhbl9mbGF0dGVuZWRfZHQgY2FsbGJhY2sgdG8gZ2V0Ci0gKiBhY2Nlc3MgdG8gcHJvcGVydGllcwotICovCi12b2lkKiBfX2luaXQgb2ZfZ2V0X2ZsYXRfZHRfcHJvcCh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJIHVuc2lnbmVkIGxvbmcgKnNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBwID0gbm9kZTsKLQotCWRvIHsKLQkJdTMyIHRhZyA9ICooKHUzMiAqKXApOwotCQl1MzIgc3osIG5vZmY7Ci0JCWNvbnN0IGNoYXIgKm5zdHI7Ci0KLQkJcCArPSA0OwotCQlpZiAodGFnID09IE9GX0RUX05PUCkKLQkJCWNvbnRpbnVlOwotCQlpZiAodGFnICE9IE9GX0RUX1BST1ApCi0JCQlyZXR1cm4gTlVMTDsKLQotCQlzeiA9ICooKHUzMiAqKXApOwotCQlub2ZmID0gKigodTMyICopKHAgKyA0KSk7Ci0JCXAgKz0gODsKLQkJaWYgKGluaXRpYWxfYm9vdF9wYXJhbXMtPnZlcnNpb24gPCAweDEwKQotCQkJcCA9IF9BTElHTihwLCBzeiA+PSA4ID8gOCA6IDQpOwotCi0JCW5zdHIgPSBmaW5kX2ZsYXRfZHRfc3RyaW5nKG5vZmYpOwotCQlpZiAobnN0ciA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW4ndCBmaW5kIHByb3BlcnR5IGluZGV4IgotCQkJICAgICAgICIgbmFtZSAhXG4iKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCWlmIChzdHJjbXAobmFtZSwgbnN0cikgPT0gMCkgewotCQkJaWYgKHNpemUpCi0JCQkJKnNpemUgPSBzejsKLQkJCXJldHVybiAodm9pZCAqKXA7Ci0JCX0KLQkJcCArPSBzejsKLQkJcCA9IF9BTElHTihwLCA0KTsKLQl9IHdoaWxlKDEpOwotfQotCi1pbnQgX19pbml0IG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKmNvbXBhdCkKLXsKLQljb25zdCBjaGFyKiBjcDsKLQl1bnNpZ25lZCBsb25nIGNwbGVuLCBsOwotCi0JY3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJjb21wYXRpYmxlIiwgJmNwbGVuKTsKLQlpZiAoY3AgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0Jd2hpbGUgKGNwbGVuID4gMCkgewotCQlpZiAoc3RybmNhc2VjbXAoY3AsIGNvbXBhdCwgc3RybGVuKGNvbXBhdCkpID09IDApCi0JCQlyZXR1cm4gMTsKLQkJbCA9IHN0cmxlbihjcCkgKyAxOwotCQljcCArPSBsOwotCQljcGxlbiAtPSBsOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCAqX19pbml0IHVuZmxhdHRlbl9kdF9hbGxvYyh1bnNpZ25lZCBsb25nICptZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbikKLXsKLQl2b2lkICpyZXM7Ci0KLQkqbWVtID0gX0FMSUdOKCptZW0sIGFsaWduKTsKLQlyZXMgPSAodm9pZCAqKSptZW07Ci0JKm1lbSArPSBzaXplOwotCi0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHVuZmxhdHRlbl9kdF9ub2RlKHVuc2lnbmVkIGxvbmcgbWVtLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nICpwLAotCQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRhZCwKLQkJCQkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICoqKmFsbG5leHRwcCwKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBmcHNpemUpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQlzdHJ1Y3QgcHJvcGVydHkgKnBwLCAqKnByZXZfcHAgPSBOVUxMOwotCWNoYXIgKnBhdGhwOwotCXUzMiB0YWc7Ci0JdW5zaWduZWQgaW50IGwsIGFsbG9jbDsKLQlpbnQgaGFzX25hbWUgPSAwOwotCWludCBuZXdfZm9ybWF0ID0gMDsKLQotCXRhZyA9ICooKHUzMiAqKSgqcCkpOwotCWlmICh0YWcgIT0gT0ZfRFRfQkVHSU5fTk9ERSkgewotCQlwcmludGsoIldlaXJkIHRhZyBhdCBzdGFydCBvZiBub2RlOiAleFxuIiwgdGFnKTsKLQkJcmV0dXJuIG1lbTsKLQl9Ci0JKnAgKz0gNDsKLQlwYXRocCA9IChjaGFyICopKnA7Ci0JbCA9IGFsbG9jbCA9IHN0cmxlbihwYXRocCkgKyAxOwotCSpwID0gX0FMSUdOKCpwICsgbCwgNCk7Ci0KLQkvKiB2ZXJzaW9uIDB4MTAgaGFzIGEgbW9yZSBjb21wYWN0IHVuaXQgbmFtZSBoZXJlIGluc3RlYWQgb2YgdGhlIGZ1bGwKLQkgKiBwYXRoLiB3ZSBhY2N1bXVsYXRlIHRoZSBmdWxsIHBhdGggc2l6ZSB1c2luZyAiZnBzaXplIiwgd2UnbGwgcmVidWlsZAotCSAqIGl0IGxhdGVyLiBXZSBkZXRlY3QgdGhpcyBiZWNhdXNlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIG5hbWUgaXMKLQkgKiBub3QgJy8nLgotCSAqLwotCWlmICgoKnBhdGhwKSAhPSAnLycpIHsKLQkJbmV3X2Zvcm1hdCA9IDE7Ci0JCWlmIChmcHNpemUgPT0gMCkgewotCQkJLyogcm9vdCBub2RlOiBzcGVjaWFsIGNhc2UuIGZwc2l6ZSBhY2NvdW50cyBmb3IgcGF0aAotCQkJICogcGx1cyB0ZXJtaW5hdGluZyB6ZXJvLiByb290IG5vZGUgb25seSBoYXMgJy8nLCBzbwotCQkJICogZnBzaXplIHNob3VsZCBiZSAyLCBidXQgd2Ugd2FudCB0byBhdm9pZCB0aGUgZmlyc3QKLQkJCSAqIGxldmVsIG5vZGVzIHRvIGhhdmUgdHdvICcvJyBzbyB3ZSB1c2UgZnBzaXplIDEgaGVyZQotCQkJICovCi0JCQlmcHNpemUgPSAxOwotCQkJYWxsb2NsID0gMjsKLQkJfSBlbHNlIHsKLQkJCS8qIGFjY291bnQgZm9yICcvJyBhbmQgcGF0aCBzaXplIG1pbnVzIHRlcm1pbmFsIDAKLQkJCSAqIGFscmVhZHkgaW4gJ2wnCi0JCQkgKi8KLQkJCWZwc2l6ZSArPSBsOwotCQkJYWxsb2NsID0gZnBzaXplOwotCQl9Ci0JfQotCi0KLQlucCA9IHVuZmxhdHRlbl9kdF9hbGxvYygmbWVtLCBzaXplb2Yoc3RydWN0IGRldmljZV9ub2RlKSArIGFsbG9jbCwKLQkJCQlfX2FsaWdub2ZfXyhzdHJ1Y3QgZGV2aWNlX25vZGUpKTsKLQlpZiAoYWxsbmV4dHBwKSB7Ci0JCW1lbXNldChucCwgMCwgc2l6ZW9mKCpucCkpOwotCQlucC0+ZnVsbF9uYW1lID0gKChjaGFyKilucCkgKyBzaXplb2Yoc3RydWN0IGRldmljZV9ub2RlKTsKLQkJaWYgKG5ld19mb3JtYXQpIHsKLQkJCWNoYXIgKnAgPSBucC0+ZnVsbF9uYW1lOwotCQkJLyogcmVidWlsZCBmdWxsIHBhdGggZm9yIG5ldyBmb3JtYXQgKi8KLQkJCWlmIChkYWQgJiYgZGFkLT5wYXJlbnQpIHsKLQkJCQlzdHJjcHkocCwgZGFkLT5mdWxsX25hbWUpOwotI2lmZGVmIERFQlVHCi0JCQkJaWYgKChzdHJsZW4ocCkgKyBsICsgMSkgIT0gYWxsb2NsKSB7Ci0JCQkJCURCRygiJXM6IHA6ICVkLCBsOiAlZCwgYTogJWRcbiIsCi0JCQkJCSAgICBwYXRocCwgKGludClzdHJsZW4ocCksIGwsIGFsbG9jbCk7Ci0JCQkJfQotI2VuZGlmCi0JCQkJcCArPSBzdHJsZW4ocCk7Ci0JCQl9Ci0JCQkqKHArKykgPSAnLyc7Ci0JCQltZW1jcHkocCwgcGF0aHAsIGwpOwotCQl9IGVsc2UKLQkJCW1lbWNweShucC0+ZnVsbF9uYW1lLCBwYXRocCwgbCk7Ci0JCXByZXZfcHAgPSAmbnAtPnByb3BlcnRpZXM7Ci0JCSoqYWxsbmV4dHBwID0gbnA7Ci0JCSphbGxuZXh0cHAgPSAmbnAtPmFsbG5leHQ7Ci0JCWlmIChkYWQgIT0gTlVMTCkgewotCQkJbnAtPnBhcmVudCA9IGRhZDsKLQkJCS8qIHdlIHRlbXBvcmFyaWx5IHVzZSB0aGUgbmV4dCBmaWVsZCBhcyBgbGFzdF9jaGlsZCcqLwotCQkJaWYgKGRhZC0+bmV4dCA9PSAwKQotCQkJCWRhZC0+Y2hpbGQgPSBucDsKLQkJCWVsc2UKLQkJCQlkYWQtPm5leHQtPnNpYmxpbmcgPSBucDsKLQkJCWRhZC0+bmV4dCA9IG5wOwotCQl9Ci0JCWtyZWZfaW5pdCgmbnAtPmtyZWYpOwotCX0KLQl3aGlsZSgxKSB7Ci0JCXUzMiBzeiwgbm9mZjsKLQkJY2hhciAqcG5hbWU7Ci0KLQkJdGFnID0gKigodTMyICopKCpwKSk7Ci0JCWlmICh0YWcgPT0gT0ZfRFRfTk9QKSB7Ci0JCQkqcCArPSA0OwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHRhZyAhPSBPRl9EVF9QUk9QKQotCQkJYnJlYWs7Ci0JCSpwICs9IDQ7Ci0JCXN6ID0gKigodTMyICopKCpwKSk7Ci0JCW5vZmYgPSAqKCh1MzIgKikoKCpwKSArIDQpKTsKLQkJKnAgKz0gODsKLQkJaWYgKGluaXRpYWxfYm9vdF9wYXJhbXMtPnZlcnNpb24gPCAweDEwKQotCQkJKnAgPSBfQUxJR04oKnAsIHN6ID49IDggPyA4IDogNCk7Ci0KLQkJcG5hbWUgPSBmaW5kX2ZsYXRfZHRfc3RyaW5nKG5vZmYpOwotCQlpZiAocG5hbWUgPT0gTlVMTCkgewotCQkJcHJpbnRrKCJDYW4ndCBmaW5kIHByb3BlcnR5IG5hbWUgaW4gbGlzdCAhXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChzdHJjbXAocG5hbWUsICJuYW1lIikgPT0gMCkKLQkJCWhhc19uYW1lID0gMTsKLQkJbCA9IHN0cmxlbihwbmFtZSkgKyAxOwotCQlwcCA9IHVuZmxhdHRlbl9kdF9hbGxvYygmbWVtLCBzaXplb2Yoc3RydWN0IHByb3BlcnR5KSwKLQkJCQkJX19hbGlnbm9mX18oc3RydWN0IHByb3BlcnR5KSk7Ci0JCWlmIChhbGxuZXh0cHApIHsKLQkJCWlmIChzdHJjbXAocG5hbWUsICJsaW51eCxwaGFuZGxlIikgPT0gMCkgewotCQkJCW5wLT5ub2RlID0gKigodTMyICopKnApOwotCQkJCWlmIChucC0+bGludXhfcGhhbmRsZSA9PSAwKQotCQkJCQlucC0+bGludXhfcGhhbmRsZSA9IG5wLT5ub2RlOwotCQkJfQotCQkJaWYgKHN0cmNtcChwbmFtZSwgImlibSxwaGFuZGxlIikgPT0gMCkKLQkJCQlucC0+bGludXhfcGhhbmRsZSA9ICooKHUzMiAqKSpwKTsKLQkJCXBwLT5uYW1lID0gcG5hbWU7Ci0JCQlwcC0+bGVuZ3RoID0gc3o7Ci0JCQlwcC0+dmFsdWUgPSAodm9pZCAqKSpwOwotCQkJKnByZXZfcHAgPSBwcDsKLQkJCXByZXZfcHAgPSAmcHAtPm5leHQ7Ci0JCX0KLQkJKnAgPSBfQUxJR04oKCpwKSArIHN6LCA0KTsKLQl9Ci0JLyogd2l0aCB2ZXJzaW9uIDB4MTAgd2UgbWF5IG5vdCBoYXZlIHRoZSBuYW1lIHByb3BlcnR5LCByZWNyZWF0ZQotCSAqIGl0IGhlcmUgZnJvbSB0aGUgdW5pdCBuYW1lIGlmIGFic2VudAotCSAqLwotCWlmICghaGFzX25hbWUpIHsKLQkJY2hhciAqcCA9IHBhdGhwLCAqcHMgPSBwYXRocCwgKnBhID0gTlVMTDsKLQkJaW50IHN6OwotCi0JCXdoaWxlICgqcCkgewotCQkJaWYgKCgqcCkgPT0gJ0AnKQotCQkJCXBhID0gcDsKLQkJCWlmICgoKnApID09ICcvJykKLQkJCQlwcyA9IHAgKyAxOwotCQkJcCsrOwotCQl9Ci0JCWlmIChwYSA8IHBzKQotCQkJcGEgPSBwOwotCQlzeiA9IChwYSAtIHBzKSArIDE7Ci0JCXBwID0gdW5mbGF0dGVuX2R0X2FsbG9jKCZtZW0sIHNpemVvZihzdHJ1Y3QgcHJvcGVydHkpICsgc3osCi0JCQkJCV9fYWxpZ25vZl9fKHN0cnVjdCBwcm9wZXJ0eSkpOwotCQlpZiAoYWxsbmV4dHBwKSB7Ci0JCQlwcC0+bmFtZSA9ICJuYW1lIjsKLQkJCXBwLT5sZW5ndGggPSBzejsKLQkJCXBwLT52YWx1ZSA9IHBwICsgMTsKLQkJCSpwcmV2X3BwID0gcHA7Ci0JCQlwcmV2X3BwID0gJnBwLT5uZXh0OwotCQkJbWVtY3B5KHBwLT52YWx1ZSwgcHMsIHN6IC0gMSk7Ci0JCQkoKGNoYXIgKilwcC0+dmFsdWUpW3N6IC0gMV0gPSAwOwotCQkJREJHKCJmaXhlZCB1cCBuYW1lIGZvciAlcyAtPiAlc1xuIiwgcGF0aHAsCi0JCQkJKGNoYXIgKilwcC0+dmFsdWUpOwotCQl9Ci0JfQotCWlmIChhbGxuZXh0cHApIHsKLQkJKnByZXZfcHAgPSBOVUxMOwotCQlucC0+bmFtZSA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm5hbWUiLCBOVUxMKTsKLQkJbnAtPnR5cGUgPSBvZl9nZXRfcHJvcGVydHkobnAsICJkZXZpY2VfdHlwZSIsIE5VTEwpOwotCi0JCWlmICghbnAtPm5hbWUpCi0JCQlucC0+bmFtZSA9ICI8TlVMTD4iOwotCQlpZiAoIW5wLT50eXBlKQotCQkJbnAtPnR5cGUgPSAiPE5VTEw+IjsKLQl9Ci0Jd2hpbGUgKHRhZyA9PSBPRl9EVF9CRUdJTl9OT0RFKSB7Ci0JCW1lbSA9IHVuZmxhdHRlbl9kdF9ub2RlKG1lbSwgcCwgbnAsIGFsbG5leHRwcCwgZnBzaXplKTsKLQkJdGFnID0gKigodTMyICopKCpwKSk7Ci0JfQotCWlmICh0YWcgIT0gT0ZfRFRfRU5EX05PREUpIHsKLQkJcHJpbnRrKCJXZWlyZCB0YWcgYXQgZW5kIG9mIG5vZGU6ICV4XG4iLCB0YWcpOwotCQlyZXR1cm4gbWVtOwotCX0KLQkqcCArPSA0OwotCXJldHVybiBtZW07Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X3BhcnNlX21lbShjaGFyICpwKQogewogCWlmICghcCkKQEAgLTQ0Niw3ICs5Myw3IEBACiAJREJHKCItPiBtb3ZlX2RldmljZV90cmVlXG4iKTsKIAogCXN0YXJ0ID0gX19wYShpbml0aWFsX2Jvb3RfcGFyYW1zKTsKLQlzaXplID0gaW5pdGlhbF9ib290X3BhcmFtcy0+dG90YWxzaXplOworCXNpemUgPSBiZTMyX3RvX2NwdShpbml0aWFsX2Jvb3RfcGFyYW1zLT50b3RhbHNpemUpOwogCiAJaWYgKChtZW1vcnlfbGltaXQgJiYgKHN0YXJ0ICsgc2l6ZSkgPiBtZW1vcnlfbGltaXQpIHx8CiAJCQlvdmVybGFwc19jcmFzaGtlcm5lbChzdGFydCwgc2l6ZSkpIHsKQEAgLTQ1OSw1NCArMTA2LDYgQEAKIAlEQkcoIjwtIG1vdmVfZGV2aWNlX3RyZWVcbiIpOwogfQogCi0vKioKLSAqIHVuZmxhdHRlbnMgdGhlIGRldmljZS10cmVlIHBhc3NlZCBieSB0aGUgZmlybXdhcmUsIGNyZWF0aW5nIHRoZQotICogdHJlZSBvZiBzdHJ1Y3QgZGV2aWNlX25vZGUuIEl0IGFsc28gZmlsbHMgdGhlICJuYW1lIiBhbmQgInR5cGUiCi0gKiBwb2ludGVycyBvZiB0aGUgbm9kZXMgc28gdGhlIG5vcm1hbCBkZXZpY2UtdHJlZSB3YWxraW5nIGZ1bmN0aW9ucwotICogY2FuIGJlIHVzZWQgKHRoaXMgdXNlZCB0byBiZSBkb25lIGJ5IGZpbmlzaF9kZXZpY2VfdHJlZSkKLSAqLwotdm9pZCBfX2luaXQgdW5mbGF0dGVuX2RldmljZV90cmVlKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBzdGFydCwgbWVtLCBzaXplOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqKmFsbG5leHRwID0gJmFsbG5vZGVzOwotCi0JREJHKCIgLT4gdW5mbGF0dGVuX2RldmljZV90cmVlKClcbiIpOwotCi0JLyogRmlyc3QgcGFzcywgc2NhbiBmb3Igc2l6ZSAqLwotCXN0YXJ0ID0gKCh1bnNpZ25lZCBsb25nKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKLQkJaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cnVjdDsKLQlzaXplID0gdW5mbGF0dGVuX2R0X25vZGUoMCwgJnN0YXJ0LCBOVUxMLCBOVUxMLCAwKTsKLQlzaXplID0gKHNpemUgfCAzKSArIDE7Ci0KLQlEQkcoIiAgc2l6ZSBpcyAlbHgsIGFsbG9jYXRpbmcuLi5cbiIsIHNpemUpOwotCi0JLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZXhwYW5kZWQgZGV2aWNlIHRyZWUgKi8KLQltZW0gPSBsbWJfYWxsb2Moc2l6ZSArIDQsIF9fYWxpZ25vZl9fKHN0cnVjdCBkZXZpY2Vfbm9kZSkpOwotCW1lbSA9ICh1bnNpZ25lZCBsb25nKSBfX3ZhKG1lbSk7Ci0KLQkoKHUzMiAqKW1lbSlbc2l6ZSAvIDRdID0gMHhkZWFkYmVlZjsKLQotCURCRygiICB1bmZsYXR0ZW5pbmcgJWx4Li4uXG4iLCBtZW0pOwotCi0JLyogU2Vjb25kIHBhc3MsIGRvIGFjdHVhbCB1bmZsYXR0ZW5pbmcgKi8KLQlzdGFydCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCi0JCWluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3Q7Ci0JdW5mbGF0dGVuX2R0X25vZGUobWVtLCAmc3RhcnQsIE5VTEwsICZhbGxuZXh0cCwgMCk7Ci0JaWYgKCooKHUzMiAqKXN0YXJ0KSAhPSBPRl9EVF9FTkQpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldlaXJkIHRhZyBhdCBlbmQgb2YgdHJlZTogJTA4eFxuIiwgKigodTMyICopc3RhcnQpKTsKLQlpZiAoKCh1MzIgKiltZW0pW3NpemUgLyA0XSAhPSAweGRlYWRiZWVmKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJFbmQgb2YgdHJlZSBtYXJrZXIgb3ZlcndyaXR0ZW46ICUwOHhcbiIsCi0JCSAgICAgICAoKHUzMiAqKW1lbSlbc2l6ZSAvIDRdICk7Ci0JKmFsbG5leHRwID0gTlVMTDsKLQotCS8qIEdldCBwb2ludGVyIHRvIE9GICIvY2hvc2VuIiBub2RlIGZvciB1c2UgZXZlcnl3aGVyZSAqLwotCW9mX2Nob3NlbiA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvY2hvc2VuIik7Ci0JaWYgKG9mX2Nob3NlbiA9PSBOVUxMKQotCQlvZl9jaG9zZW4gPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2Nob3NlbkAwIik7Ci0KLQlEQkcoIiA8LSB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUoKVxuIik7Ci19Ci0KIC8qCiAgKiBpYm0scGEtZmVhdHVyZXMgaXMgYSBwZXItY3B1IHByb3BlcnR5IHRoYXQgY29udGFpbnMgYSBzdHJpbmcgb2YKICAqIGF0dHJpYnV0ZSBkZXNjcmlwdG9ycywgZWFjaCBvZiB3aGljaCBoYXMgYSAyIGJ5dGUgaGVhZGVyIHBsdXMgdXAKQEAgLTc2Myw0OCArMzYyLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2luaXRyZCh1bnNpZ25lZCBsb25nIG5vZGUpCi17Ci0JdW5zaWduZWQgbG9uZyBsOwotCXUzMiAqcHJvcDsKLQotCURCRygiTG9va2luZyBmb3IgaW5pdHJkIHByb3BlcnRpZXMuLi4gIik7Ci0KLQlwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsaW5pdHJkLXN0YXJ0IiwgJmwpOwotCWlmIChwcm9wKSB7Ci0JCWluaXRyZF9zdGFydCA9ICh1bnNpZ25lZCBsb25nKV9fdmEob2ZfcmVhZF91bG9uZyhwcm9wLCBsLzQpKTsKLQotCQlwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsaW5pdHJkLWVuZCIsICZsKTsKLQkJaWYgKHByb3ApIHsKLQkJCWluaXRyZF9lbmQgPSAodW5zaWduZWQgbG9uZykKLQkJCQkJX192YShvZl9yZWFkX3Vsb25nKHByb3AsIGwvNCkpOwotCQkJaW5pdHJkX2JlbG93X3N0YXJ0X29rID0gMTsKLQkJfSBlbHNlIHsKLQkJCWluaXRyZF9zdGFydCA9IDA7Ci0JCX0KLQl9Ci0KLQlEQkcoImluaXRyZF9zdGFydD0weCVseCAgaW5pdHJkX2VuZD0weCVseFxuIiwgaW5pdHJkX3N0YXJ0LCBpbml0cmRfZW5kKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfaW5pdF9kdF9jaGVja19mb3JfaW5pdHJkKHVuc2lnbmVkIGxvbmcgbm9kZSkKLXsKLX0KLSNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JTklUUkQgKi8KLQotc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX2Nob3Nlbih1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJCSAgICBjb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLCB2b2lkICpkYXRhKQordm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX2Nob3Nlbl9hcmNoKHVuc2lnbmVkIGxvbmcgbm9kZSkKIHsKIAl1bnNpZ25lZCBsb25nICpscHJvcDsKLQl1bnNpZ25lZCBsb25nIGw7Ci0JY2hhciAqcDsKLQotCURCRygic2VhcmNoIFwiY2hvc2VuXCIsIGRlcHRoOiAlZCwgdW5hbWU6ICVzXG4iLCBkZXB0aCwgdW5hbWUpOwotCi0JaWYgKGRlcHRoICE9IDEgfHwKLQkgICAgKHN0cmNtcCh1bmFtZSwgImNob3NlbiIpICE9IDAgJiYgc3RyY21wKHVuYW1lLCAiY2hvc2VuQDAiKSAhPSAwKSkKLQkJcmV0dXJuIDA7CiAKICNpZmRlZiBDT05GSUdfUFBDNjQKIAkvKiBjaGVjayBpZiBpb21tdSBpcyBmb3JjZWQgb24gb3Igb2ZmICovCkBAIC04MTUsMTcgKzM3NSwxNyBAQAogI2VuZGlmCiAKIAkvKiBtZW09eCBvbiB0aGUgY29tbWFuZCBsaW5lIGlzIHRoZSBwcmVmZXJyZWQgbWVjaGFuaXNtICovCi0gCWxwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsbWVtb3J5LWxpbWl0IiwgTlVMTCk7Ci0gCWlmIChscHJvcCkKLSAJCW1lbW9yeV9saW1pdCA9ICpscHJvcDsKKwlscHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LG1lbW9yeS1saW1pdCIsIE5VTEwpOworCWlmIChscHJvcCkKKwkJbWVtb3J5X2xpbWl0ID0gKmxwcm9wOwogCiAjaWZkZWYgQ09ORklHX1BQQzY0Ci0gCWxwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsdGNlLWFsbG9jLXN0YXJ0IiwgTlVMTCk7Ci0gCWlmIChscHJvcCkKLSAJCXRjZV9hbGxvY19zdGFydCA9ICpscHJvcDsKLSAJbHByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCx0Y2UtYWxsb2MtZW5kIiwgTlVMTCk7Ci0gCWlmIChscHJvcCkKLSAJCXRjZV9hbGxvY19lbmQgPSAqbHByb3A7CisJbHByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCx0Y2UtYWxsb2Mtc3RhcnQiLCBOVUxMKTsKKwlpZiAobHByb3ApCisJCXRjZV9hbGxvY19zdGFydCA9ICpscHJvcDsKKwlscHJvcCA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LHRjZS1hbGxvYy1lbmQiLCBOVUxMKTsKKwlpZiAobHByb3ApCisJCXRjZV9hbGxvY19lbmQgPSAqbHByb3A7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19LRVhFQwpAQCAtODM3LDUxICszOTcsNiBAQAogCWlmIChscHJvcCkKIAkJY3Jhc2hrX3Jlcy5lbmQgPSBjcmFzaGtfcmVzLnN0YXJ0ICsgKmxwcm9wIC0gMTsKICNlbmRpZgotCi0JZWFybHlfaW5pdF9kdF9jaGVja19mb3JfaW5pdHJkKG5vZGUpOwotCi0JLyogUmV0cmVpdmUgY29tbWFuZCBsaW5lICovCi0gCXAgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJib290YXJncyIsICZsKTsKLQlpZiAocCAhPSBOVUxMICYmIGwgPiAwKQotCQlzdHJsY3B5KGNtZF9saW5lLCBwLCBtaW4oKGludClsLCBDT01NQU5EX0xJTkVfU0laRSkpOwotCi0jaWZkZWYgQ09ORklHX0NNRExJTkUKLQlpZiAocCA9PSBOVUxMIHx8IGwgPT0gMCB8fCAobCA9PSAxICYmICgqcCkgPT0gMCkpCi0JCXN0cmxjcHkoY21kX2xpbmUsIENPTkZJR19DTURMSU5FLCBDT01NQU5EX0xJTkVfU0laRSk7Ci0jZW5kaWYgLyogQ09ORklHX0NNRExJTkUgKi8KLQotCURCRygiQ29tbWFuZCBsaW5lIGlzOiAlc1xuIiwgY21kX2xpbmUpOwotCi0JLyogYnJlYWsgbm93ICovCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9yb290KHVuc2lnbmVkIGxvbmcgbm9kZSwKLQkJCQkJICBjb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLCB2b2lkICpkYXRhKQotewotCXUzMiAqcHJvcDsKLQotCWlmIChkZXB0aCAhPSAwKQotCQlyZXR1cm4gMDsKLQotCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICIjc2l6ZS1jZWxscyIsIE5VTEwpOwotCWR0X3Jvb3Rfc2l6ZV9jZWxscyA9IChwcm9wID09IE5VTEwpID8gMSA6ICpwcm9wOwotCURCRygiZHRfcm9vdF9zaXplX2NlbGxzID0gJXhcbiIsIGR0X3Jvb3Rfc2l6ZV9jZWxscyk7Ci0KLQlwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiI2FkZHJlc3MtY2VsbHMiLCBOVUxMKTsKLQlkdF9yb290X2FkZHJfY2VsbHMgPSAocHJvcCA9PSBOVUxMKSA/IDIgOiAqcHJvcDsKLQlEQkcoImR0X3Jvb3RfYWRkcl9jZWxscyA9ICV4XG4iLCBkdF9yb290X2FkZHJfY2VsbHMpOwotCQotCS8qIGJyZWFrIG5vdyAqLwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdTY0IF9faW5pdCBkdF9tZW1fbmV4dF9jZWxsKGludCBzLCBjZWxsX3QgKipjZWxscCkKLXsKLQljZWxsX3QgKnAgPSAqY2VsbHA7Ci0KLQkqY2VsbHAgPSBwICsgczsKLQlyZXR1cm4gb2ZfcmVhZF9udW1iZXIocCwgcyk7CiB9CiAKICNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVMKQEAgLTg5MywyMiArNDA4LDIyIEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9kcmNvbmZfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbm9kZSkKIHsKLQljZWxsX3QgKmRtLCAqbHMsICp1c207CisJX19iZTMyICpkbSwgKmxzLCAqdXNtOwogCXVuc2lnbmVkIGxvbmcgbCwgbiwgZmxhZ3M7CiAJdTY0IGJhc2UsIHNpemUsIGxtYl9zaXplOwogCXVuc2lnbmVkIGludCBpc19rZXhlY19rZHVtcCA9IDAsIHJuZ3M7CiAKIAlscyA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImlibSxsbWItc2l6ZSIsICZsKTsKLQlpZiAobHMgPT0gTlVMTCB8fCBsIDwgZHRfcm9vdF9zaXplX2NlbGxzICogc2l6ZW9mKGNlbGxfdCkpCisJaWYgKGxzID09IE5VTEwgfHwgbCA8IGR0X3Jvb3Rfc2l6ZV9jZWxscyAqIHNpemVvZihfX2JlMzIpKQogCQlyZXR1cm4gMDsKIAlsbWJfc2l6ZSA9IGR0X21lbV9uZXh0X2NlbGwoZHRfcm9vdF9zaXplX2NlbGxzLCAmbHMpOwogCiAJZG0gPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJpYm0sZHluYW1pYy1tZW1vcnkiLCAmbCk7Ci0JaWYgKGRtID09IE5VTEwgfHwgbCA8IHNpemVvZihjZWxsX3QpKQorCWlmIChkbSA9PSBOVUxMIHx8IGwgPCBzaXplb2YoX19iZTMyKSkKIAkJcmV0dXJuIDA7CiAKIAluID0gKmRtKys7CS8qIG51bWJlciBvZiBlbnRyaWVzICovCi0JaWYgKGwgPCAobiAqIChkdF9yb290X2FkZHJfY2VsbHMgKyA0KSArIDEpICogc2l6ZW9mKGNlbGxfdCkpCisJaWYgKGwgPCAobiAqIChkdF9yb290X2FkZHJfY2VsbHMgKyA0KSArIDEpICogc2l6ZW9mKF9fYmUzMikpCiAJCXJldHVybiAwOwogCiAJLyogY2hlY2sgaWYgdGhpcyBpcyBhIGtleGVjL2tkdW1wIGtlcm5lbC4gKi8KQEAgLTk2Myw2NiArNDc4LDQ4IEBACiAjZGVmaW5lIGVhcmx5X2luaXRfZHRfc2Nhbl9kcmNvbmZfbWVtb3J5KG5vZGUpCTAKICNlbmRpZiAvKiBDT05GSUdfUFBDX1BTRVJJRVMgKi8KIAotc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX21lbW9yeSh1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJCSAgICBjb25zdCBjaGFyICp1bmFtZSwgaW50IGRlcHRoLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9zY2FuX21lbW9yeV9wcGModW5zaWduZWQgbG9uZyBub2RlLAorCQkJCQkJY29uc3QgY2hhciAqdW5hbWUsCisJCQkJCQlpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCiB7Ci0JY2hhciAqdHlwZSA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImRldmljZV90eXBlIiwgTlVMTCk7Ci0JY2VsbF90ICpyZWcsICplbmRwOwotCXVuc2lnbmVkIGxvbmcgbDsKLQotCS8qIExvb2sgZm9yIHRoZSBpYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5IG5vZGUgKi8KIAlpZiAoZGVwdGggPT0gMSAmJgogCSAgICBzdHJjbXAodW5hbWUsICJpYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5IikgPT0gMCkKIAkJcmV0dXJuIGVhcmx5X2luaXRfZHRfc2Nhbl9kcmNvbmZfbWVtb3J5KG5vZGUpOwotCi0JLyogV2UgYXJlIHNjYW5uaW5nICJtZW1vcnkiIG5vZGVzIG9ubHkgKi8KLQlpZiAodHlwZSA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIFRoZSBsb25ndHJhaWwgZG9lc24ndCBoYXZlIGEgZGV2aWNlX3R5cGUgb24gdGhlCi0JCSAqIC9tZW1vcnkgbm9kZSwgc28gbG9vayBmb3IgdGhlIG5vZGUgY2FsbGVkIC9tZW1vcnlAMC4KLQkJICovCi0JCWlmIChkZXB0aCAhPSAxIHx8IHN0cmNtcCh1bmFtZSwgIm1lbW9yeUAwIikgIT0gMCkKLQkJCXJldHVybiAwOwotCX0gZWxzZSBpZiAoc3RyY21wKHR5cGUsICJtZW1vcnkiKSAhPSAwKQotCQlyZXR1cm4gMDsKLQotCXJlZyA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LHVzYWJsZS1tZW1vcnkiLCAmbCk7Ci0JaWYgKHJlZyA9PSBOVUxMKQotCQlyZWcgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJyZWciLCAmbCk7Ci0JaWYgKHJlZyA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQotCWVuZHAgPSByZWcgKyAobCAvIHNpemVvZihjZWxsX3QpKTsKLQotCURCRygibWVtb3J5IHNjYW4gbm9kZSAlcywgcmVnIHNpemUgJWxkLCBkYXRhOiAleCAleCAleCAleCxcbiIsCi0JICAgIHVuYW1lLCBsLCByZWdbMF0sIHJlZ1sxXSwgcmVnWzJdLCByZWdbM10pOwotCi0Jd2hpbGUgKChlbmRwIC0gcmVnKSA+PSAoZHRfcm9vdF9hZGRyX2NlbGxzICsgZHRfcm9vdF9zaXplX2NlbGxzKSkgewotCQl1NjQgYmFzZSwgc2l6ZTsKLQotCQliYXNlID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X2FkZHJfY2VsbHMsICZyZWcpOwotCQlzaXplID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X3NpemVfY2VsbHMsICZyZWcpOwotCi0JCWlmIChzaXplID09IDApCi0JCQljb250aW51ZTsKLQkJREJHKCIgLSAlbGx4ICwgICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpYmFzZSwKLQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2l6ZSk7Ci0jaWZkZWYgQ09ORklHX1BQQzY0Ci0JCWlmIChpb21tdV9pc19vZmYpIHsKLQkJCWlmIChiYXNlID49IDB4ODAwMDAwMDB1bCkKLQkJCQljb250aW51ZTsKLQkJCWlmICgoYmFzZSArIHNpemUpID4gMHg4MDAwMDAwMHVsKQotCQkJCXNpemUgPSAweDgwMDAwMDAwdWwgLSBiYXNlOwotCQl9Ci0jZW5kaWYKLQkJbG1iX2FkZChiYXNlLCBzaXplKTsKLQotCQltZW1zdGFydF9hZGRyID0gbWluKCh1NjQpbWVtc3RhcnRfYWRkciwgYmFzZSk7Ci0JfQotCi0JcmV0dXJuIDA7CisJCisJcmV0dXJuIGVhcmx5X2luaXRfZHRfc2Nhbl9tZW1vcnkobm9kZSwgdW5hbWUsIGRlcHRoLCBkYXRhKTsKIH0KIAordm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9hZGRfbWVtb3J5X2FyY2godTY0IGJhc2UsIHU2NCBzaXplKQoreworI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KQorCWlmIChpb21tdV9pc19vZmYpIHsKKwkJaWYgKGJhc2UgPj0gMHg4MDAwMDAwMHVsKQorCQkJcmV0dXJuOworCQlpZiAoKGJhc2UgKyBzaXplKSA+IDB4ODAwMDAwMDB1bCkKKwkJCXNpemUgPSAweDgwMDAwMDAwdWwgLSBiYXNlOworCX0KKyNlbmRpZgorCisJbG1iX2FkZChiYXNlLCBzaXplKTsKKworCW1lbXN0YXJ0X2FkZHIgPSBtaW4oKHU2NCltZW1zdGFydF9hZGRyLCBiYXNlKTsKK30KKwordTY0IF9faW5pdCBlYXJseV9pbml0X2R0X2FsbG9jX21lbW9yeV9hcmNoKHU2NCBzaXplLCB1NjQgYWxpZ24pCit7CisJcmV0dXJuIGxtYl9hbGxvYyhzaXplLCBhbGlnbik7Cit9CisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKK3ZvaWQgX19pbml0IGVhcmx5X2luaXRfZHRfc2V0dXBfaW5pdHJkX2FyY2godW5zaWduZWQgbG9uZyBzdGFydCwKKwkJdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaW5pdHJkX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX192YShzdGFydCk7CisJaW5pdHJkX2VuZCA9ICh1bnNpZ25lZCBsb25nKV9fdmEoZW5kKTsKKwlpbml0cmRfYmVsb3dfc3RhcnRfb2sgPSAxOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9yZXNlcnZlX21lbSh2b2lkKQogewogCXU2NCBiYXNlLCBzaXplOwpAQCAtMTE4Niw3ICs2ODMsNyBAQAogCS8qIFNjYW4gbWVtb3J5IG5vZGVzIGFuZCByZWJ1aWxkIExNQnMgKi8KIAlsbWJfaW5pdCgpOwogCW9mX3NjYW5fZmxhdF9kdChlYXJseV9pbml0X2R0X3NjYW5fcm9vdCwgTlVMTCk7Ci0Jb2Zfc2Nhbl9mbGF0X2R0KGVhcmx5X2luaXRfZHRfc2Nhbl9tZW1vcnksIE5VTEwpOworCW9mX3NjYW5fZmxhdF9kdChlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5X3BwYywgTlVMTCk7CiAKIAkvKiBTYXZlIGNvbW1hbmQgbGluZSBmb3IgL3Byb2MvY21kbGluZSBhbmQgdGhlbiBwYXJzZSBwYXJhbWV0ZXJzICovCiAJc3RybGNweShib290X2NvbW1hbmRfbGluZSwgY21kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTsKQEAgLTEyMzQsMjUgKzczMSw2IEBACiAJREJHKCIgPC0gZWFybHlfaW5pdF9kZXZ0cmVlKClcbiIpOwogfQogCi0KLS8qKgotICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJvb3Qgbm9kZSBoYXMgYSBnaXZlbiB2YWx1ZSBpbiBpdHMKLSAqIGNvbXBhdGlibGUgcHJvcGVydHkuCi0gKi8KLWludCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoY29uc3QgY2hhciAqY29tcGF0KQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdDsKLQlpbnQgcmMgPSAwOwotCi0Jcm9vdCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7Ci0JaWYgKHJvb3QpIHsKLQkJcmMgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShyb290LCBjb21wYXQpOwotCQlvZl9ub2RlX3B1dChyb290KTsKLQl9Ci0JcmV0dXJuIHJjOwotfQotRVhQT1JUX1NZTUJPTChtYWNoaW5lX2lzX2NvbXBhdGlibGUpOwotCiAvKioqKioqKgogICoKICAqIE5ldyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgT0YgImZpbmQiIEFQSXMsIHJldHVybiBhIHJlZmNvdW50ZWQKQEAgLTEyNjUsMjcgKzc0Myw2IEBACiAgKioqKioqKi8KIAogLyoqCi0gKglvZl9maW5kX25vZGVfYnlfcGhhbmRsZSAtIEZpbmQgYSBub2RlIGdpdmVuIGEgcGhhbmRsZQotICoJQGhhbmRsZToJcGhhbmRsZSBvZiB0aGUgbm9kZSB0byBmaW5kCi0gKgotICoJUmV0dXJucyBhIG5vZGUgcG9pbnRlciB3aXRoIHJlZmNvdW50IGluY3JlbWVudGVkLCB1c2UKLSAqCW9mX25vZGVfcHV0KCkgb24gaXQgd2hlbiBkb25lLgotICovCi1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKHBoYW5kbGUgaGFuZGxlKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0KLQlyZWFkX2xvY2soJmRldnRyZWVfbG9jayk7Ci0JZm9yIChucCA9IGFsbG5vZGVzOyBucCAhPSAwOyBucCA9IG5wLT5hbGxuZXh0KQotCQlpZiAobnAtPmxpbnV4X3BoYW5kbGUgPT0gaGFuZGxlKQotCQkJYnJlYWs7Ci0Jb2Zfbm9kZV9nZXQobnApOwotCXJlYWRfdW5sb2NrKCZkZXZ0cmVlX2xvY2spOwotCXJldHVybiBucDsKLX0KLUVYUE9SVF9TWU1CT0wob2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUpOwotCi0vKioKICAqCW9mX2ZpbmRfbmV4dF9jYWNoZV9ub2RlIC0gRmluZCBhIG5vZGUncyBzdWJzaWRpYXJ5IGNhY2hlCiAgKglAbnA6CW5vZGUgb2YgdHlwZSAiY3B1IiBvciAiY2FjaGUiCiAgKgpAQCAtMTMxNiwxMzggKzc3Myw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLS8qKgotICoJb2Zfbm9kZV9nZXQgLSBJbmNyZW1lbnQgcmVmY291bnQgb2YgYSBub2RlCi0gKglAbm9kZToJTm9kZSB0byBpbmMgcmVmY291bnQsIE5VTEwgaXMgc3VwcG9ydGVkIHRvCi0gKgkJc2ltcGxpZnkgd3JpdGluZyBvZiBjYWxsZXJzCi0gKgotICoJUmV0dXJucyBub2RlLgotICovCi1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGVfZ2V0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKLXsKLQlpZiAobm9kZSkKLQkJa3JlZl9nZXQoJm5vZGUtPmtyZWYpOwotCXJldHVybiBub2RlOwotfQotRVhQT1JUX1NZTUJPTChvZl9ub2RlX2dldCk7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZV9ub2RlICoga3JlZl90b19kZXZpY2Vfbm9kZShzdHJ1Y3Qga3JlZiAqa3JlZikKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBkZXZpY2Vfbm9kZSwga3JlZik7Ci19Ci0KLS8qKgotICoJb2Zfbm9kZV9yZWxlYXNlIC0gcmVsZWFzZSBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBub2RlCi0gKglAa3JlZjogIGtyZWYgZWxlbWVudCBvZiB0aGUgbm9kZSB0byBiZSByZWxlYXNlZAotICoKLSAqCUluIG9mX25vZGVfcHV0KCkgdGhpcyBmdW5jdGlvbiBpcyBwYXNzZWQgdG8ga3JlZl9wdXQoKQotICoJYXMgdGhlIGRlc3RydWN0b3IuCi0gKi8KLXN0YXRpYyB2b2lkIG9mX25vZGVfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBrcmVmX3RvX2RldmljZV9ub2RlKGtyZWYpOwotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcCA9IG5vZGUtPnByb3BlcnRpZXM7Ci0KLQkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgcmVsZWFzaW5nIG5vZGVzIHRoYXQgaGF2ZW4ndCBiZWVuIGRldGFjaGVkLiAqLwotCWlmICghb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX0RFVEFDSEVEKSkgewotCQlwcmludGsoIldBUk5JTkc6IEJhZCBvZl9ub2RlX3B1dCgpIG9uICVzXG4iLCBub2RlLT5mdWxsX25hbWUpOwotCQlkdW1wX3N0YWNrKCk7Ci0JCWtyZWZfaW5pdCgmbm9kZS0+a3JlZik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9EWU5BTUlDKSkKLQkJcmV0dXJuOwotCi0Jd2hpbGUgKHByb3ApIHsKLQkJc3RydWN0IHByb3BlcnR5ICpuZXh0ID0gcHJvcC0+bmV4dDsKLQkJa2ZyZWUocHJvcC0+bmFtZSk7Ci0JCWtmcmVlKHByb3AtPnZhbHVlKTsKLQkJa2ZyZWUocHJvcCk7Ci0JCXByb3AgPSBuZXh0OwotCi0JCWlmICghcHJvcCkgewotCQkJcHJvcCA9IG5vZGUtPmRlYWRwcm9wczsKLQkJCW5vZGUtPmRlYWRwcm9wcyA9IE5VTEw7Ci0JCX0KLQl9Ci0Ja2ZyZWUobm9kZS0+ZnVsbF9uYW1lKTsKLQlrZnJlZShub2RlLT5kYXRhKTsKLQlrZnJlZShub2RlKTsKLX0KLQotLyoqCi0gKglvZl9ub2RlX3B1dCAtIERlY3JlbWVudCByZWZjb3VudCBvZiBhIG5vZGUKLSAqCUBub2RlOglOb2RlIHRvIGRlYyByZWZjb3VudCwgTlVMTCBpcyBzdXBwb3J0ZWQgdG8KLSAqCQlzaW1wbGlmeSB3cml0aW5nIG9mIGNhbGxlcnMKLSAqCi0gKi8KLXZvaWQgb2Zfbm9kZV9wdXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQotewotCWlmIChub2RlKQotCQlrcmVmX3B1dCgmbm9kZS0+a3JlZiwgb2Zfbm9kZV9yZWxlYXNlKTsKLX0KLUVYUE9SVF9TWU1CT0wob2Zfbm9kZV9wdXQpOwotCi0vKgotICogUGx1ZyBhIGRldmljZSBub2RlIGludG8gdGhlIHRyZWUgYW5kIGdsb2JhbCBsaXN0LgotICovCi12b2lkIG9mX2F0dGFjaF9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0JbnAtPnNpYmxpbmcgPSBucC0+cGFyZW50LT5jaGlsZDsKLQlucC0+YWxsbmV4dCA9IGFsbG5vZGVzOwotCW5wLT5wYXJlbnQtPmNoaWxkID0gbnA7Ci0JYWxsbm9kZXMgPSBucDsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiAiVW5wbHVnIiBhIG5vZGUgZnJvbSB0aGUgZGV2aWNlIHRyZWUuICBUaGUgY2FsbGVyIG11c3QgaG9sZAotICogYSByZWZlcmVuY2UgdG8gdGhlIG5vZGUuICBUaGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZQotICogaXMgbm90IGZyZWVkIHVudGlsIGl0cyByZWZjb3VudCBnb2VzIHRvIHplcm8uCi0gKi8KLXZvaWQgb2ZfZGV0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQotCXBhcmVudCA9IG5wLT5wYXJlbnQ7Ci0JaWYgKCFwYXJlbnQpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCWlmIChhbGxub2RlcyA9PSBucCkKLQkJYWxsbm9kZXMgPSBucC0+YWxsbmV4dDsKLQllbHNlIHsKLQkJc3RydWN0IGRldmljZV9ub2RlICpwcmV2OwotCQlmb3IgKHByZXYgPSBhbGxub2RlczsKLQkJICAgICBwcmV2LT5hbGxuZXh0ICE9IG5wOwotCQkgICAgIHByZXYgPSBwcmV2LT5hbGxuZXh0KQotCQkJOwotCQlwcmV2LT5hbGxuZXh0ID0gbnAtPmFsbG5leHQ7Ci0JfQotCi0JaWYgKHBhcmVudC0+Y2hpbGQgPT0gbnApCi0JCXBhcmVudC0+Y2hpbGQgPSBucC0+c2libGluZzsKLQllbHNlIHsKLQkJc3RydWN0IGRldmljZV9ub2RlICpwcmV2c2liOwotCQlmb3IgKHByZXZzaWIgPSBucC0+cGFyZW50LT5jaGlsZDsKLQkJICAgICBwcmV2c2liLT5zaWJsaW5nICE9IG5wOwotCQkgICAgIHByZXZzaWIgPSBwcmV2c2liLT5zaWJsaW5nKQotCQkJOwotCQlwcmV2c2liLT5zaWJsaW5nID0gbnAtPnNpYmxpbmc7Ci0JfQotCi0Jb2Zfbm9kZV9zZXRfZmxhZyhucCwgT0ZfREVUQUNIRUQpOwotCi1vdXRfdW5sb2NrOgotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLX0KLQogI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwogLyoKICAqIEZpeCB1cCB0aGUgdW5pbml0aWFsaXplZCBmaWVsZHMgaW4gYSBuZXcgZGV2aWNlIG5vZGU6CkBAIC0xNDc5LDkgKzgwNCw5IEBACiAJaWYgKG1hY2hpbmVfaXMocG93ZXJtYWMpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIGZpeCB1cCBuZXcgbm9kZSdzIGxpbnV4X3BoYW5kbGUgZmllbGQgKi8KKwkvKiBmaXggdXAgbmV3IG5vZGUncyBwaGFuZGxlIGZpZWxkICovCiAJaWYgKChpYm1fcGhhbmRsZSA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAiaWJtLHBoYW5kbGUiLCBOVUxMKSkpCi0JCW5vZGUtPmxpbnV4X3BoYW5kbGUgPSAqaWJtX3BoYW5kbGU7CisJCW5vZGUtPnBoYW5kbGUgPSAqaWJtX3BoYW5kbGU7CiAKIG91dDoKIAlvZl9ub2RlX3B1dChwYXJlbnQpOwpAQCAtMTUyMCwxMjAgKzg0NSw2IEBACiBfX2luaXRjYWxsKHByb21fcmVjb25maWdfc2V0dXApOwogI2VuZGlmCiAKLS8qCi0gKiBBZGQgYSBwcm9wZXJ0eSB0byBhIG5vZGUKLSAqLwotaW50IHByb21fYWRkX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSogbnAsIHN0cnVjdCBwcm9wZXJ0eSogcHJvcCkKLXsKLQlzdHJ1Y3QgcHJvcGVydHkgKipuZXh0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlwcm9wLT5uZXh0ID0gTlVMTDsJCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQluZXh0ID0gJm5wLT5wcm9wZXJ0aWVzOwotCXdoaWxlICgqbmV4dCkgewotCQlpZiAoc3RyY21wKHByb3AtPm5hbWUsICgqbmV4dCktPm5hbWUpID09IDApIHsKLQkJCS8qIGR1cGxpY2F0ZSAhIGRvbid0IGluc2VydCBpdCAqLwotCQkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCW5leHQgPSAmKCpuZXh0KS0+bmV4dDsKLQl9Ci0JKm5leHQgPSBwcm9wOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQotI2lmZGVmIENPTkZJR19QUk9DX0RFVklDRVRSRUUKLQkvKiB0cnkgdG8gYWRkIHRvIHByb2MgYXMgd2VsbCBpZiBpdCB3YXMgaW5pdGlhbGl6ZWQgKi8KLQlpZiAobnAtPnBkZSkKLQkJcHJvY19kZXZpY2VfdHJlZV9hZGRfcHJvcChucC0+cGRlLCBwcm9wKTsKLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFICovCi0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFJlbW92ZSBhIHByb3BlcnR5IGZyb20gYSBub2RlLiAgTm90ZSB0aGF0IHdlIGRvbid0IGFjdHVhbGx5Ci0gKiByZW1vdmUgaXQsIHNpbmNlIHdlIGhhdmUgZ2l2ZW4gb3V0IHdoby1rbm93cy1ob3ctbWFueSBwb2ludGVycwotICogdG8gdGhlIGRhdGEgdXNpbmcgZ2V0LXByb3BlcnR5LiAgSW5zdGVhZCB3ZSBqdXN0IG1vdmUgdGhlIHByb3BlcnR5Ci0gKiB0byB0aGUgImRlYWQgcHJvcGVydGllcyIgbGlzdCwgc28gaXQgd29uJ3QgYmUgZm91bmQgYW55IG1vcmUuCi0gKi8KLWludCBwcm9tX3JlbW92ZV9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgcHJvcGVydHkgKnByb3ApCi17Ci0Jc3RydWN0IHByb3BlcnR5ICoqbmV4dDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBmb3VuZCA9IDA7Ci0KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCW5leHQgPSAmbnAtPnByb3BlcnRpZXM7Ci0Jd2hpbGUgKCpuZXh0KSB7Ci0JCWlmICgqbmV4dCA9PSBwcm9wKSB7Ci0JCQkvKiBmb3VuZCB0aGUgbm9kZSAqLwotCQkJKm5leHQgPSBwcm9wLT5uZXh0OwotCQkJcHJvcC0+bmV4dCA9IG5wLT5kZWFkcHJvcHM7Ci0JCQlucC0+ZGVhZHByb3BzID0gcHJvcDsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JCW5leHQgPSAmKCpuZXh0KS0+bmV4dDsKLQl9Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOwotCi0JaWYgKCFmb3VuZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFCi0JLyogdHJ5IHRvIHJlbW92ZSB0aGUgcHJvYyBub2RlIGFzIHdlbGwgKi8KLQlpZiAobnAtPnBkZSkKLQkJcHJvY19kZXZpY2VfdHJlZV9yZW1vdmVfcHJvcChucC0+cGRlLCBwcm9wKTsKLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFICovCi0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFVwZGF0ZSBhIHByb3BlcnR5IGluIGEgbm9kZS4gIE5vdGUgdGhhdCB3ZSBkb24ndCBhY3R1YWxseQotICogcmVtb3ZlIGl0LCBzaW5jZSB3ZSBoYXZlIGdpdmVuIG91dCB3aG8ta25vd3MtaG93LW1hbnkgcG9pbnRlcnMKLSAqIHRvIHRoZSBkYXRhIHVzaW5nIGdldC1wcm9wZXJ0eS4gIEluc3RlYWQgd2UganVzdCBtb3ZlIHRoZSBwcm9wZXJ0eQotICogdG8gdGhlICJkZWFkIHByb3BlcnRpZXMiIGxpc3QsIGFuZCBhZGQgdGhlIG5ldyBwcm9wZXJ0eSB0byB0aGUKLSAqIHByb3BlcnR5IGxpc3QKLSAqLwotaW50IHByb21fdXBkYXRlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkgc3RydWN0IHByb3BlcnR5ICpuZXdwcm9wLAotCQkJIHN0cnVjdCBwcm9wZXJ0eSAqb2xkcHJvcCkKLXsKLQlzdHJ1Y3QgcHJvcGVydHkgKipuZXh0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGZvdW5kID0gMDsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Ci0JbmV4dCA9ICZucC0+cHJvcGVydGllczsKLQl3aGlsZSAoKm5leHQpIHsKLQkJaWYgKCpuZXh0ID09IG9sZHByb3ApIHsKLQkJCS8qIGZvdW5kIHRoZSBub2RlICovCi0JCQluZXdwcm9wLT5uZXh0ID0gb2xkcHJvcC0+bmV4dDsKLQkJCSpuZXh0ID0gbmV3cHJvcDsKLQkJCW9sZHByb3AtPm5leHQgPSBucC0+ZGVhZHByb3BzOwotCQkJbnAtPmRlYWRwcm9wcyA9IG9sZHByb3A7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQluZXh0ID0gJigqbmV4dCktPm5leHQ7Ci0JfQotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKLQotCWlmICghZm91bmQpCi0JCXJldHVybiAtRU5PREVWOwotCi0jaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQotCS8qIHRyeSB0byBhZGQgdG8gcHJvYyBhcyB3ZWxsIGlmIGl0IHdhcyBpbml0aWFsaXplZCAqLwotCWlmIChucC0+cGRlKQotCQlwcm9jX2RldmljZV90cmVlX3VwZGF0ZV9wcm9wKG5wLT5wZGUsIG5ld3Byb3AsIG9sZHByb3ApOwotI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KLQotCXJldHVybiAwOwotfQotCi0KIC8qIEZpbmQgdGhlIGRldmljZSBub2RlIGZvciBhIGdpdmVuIGxvZ2ljYWwgY3B1IG51bWJlciwgYWxzbyByZXR1cm5zIHRoZSBjcHUKICAqIGxvY2FsIHRocmVhZCBudW1iZXIgKGluZGV4IGluIGlibSxpbnRlcnJ1cHQtc2VydmVyI3MpIGlmIHJlbGV2YW50IGFuZAogICogYXNrZWQgZm9yIChub24gTlVMTCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCmluZGV4IGJhZmFjMmUuLjVmMzA2YzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwpAQCAtNjU0LDYgKzY1NCw5IEBACiAjZGVmaW5lIE9WNV9DTU8JCQkweDAwCiAjZW5kaWYKIAorLyogT3B0aW9uIFZlY3RvciA2OiBJQk0gUEFQUiBoaW50cyAqLworI2RlZmluZSBPVjZfTElOVVgJCTB4MDIJLyogTGludXggaXMgb3VyIE9TICovCisKIC8qCiAgKiBUaGUgYXJjaGl0ZWN0dXJlIHZlY3RvciBoYXMgYW4gYXJyYXkgb2YgUFZSIG1hc2svdmFsdWUgcGFpcnMsCiAgKiBmb2xsb3dlZCBieSAjIG9wdGlvbiB2ZWN0b3JzIC0gMSwgZm9sbG93ZWQgYnkgdGhlIG9wdGlvbiB2ZWN0b3JzLgpAQCAtNjY1LDcgKzY2OCw3IEBACiAJVygweGZmZmZmZmZmKSwgVygweDBmMDAwMDAzKSwJLyogYWxsIDIuMDYtY29tcGxpYW50ICovCiAJVygweGZmZmZmZmZmKSwgVygweDBmMDAwMDAyKSwJLyogYWxsIDIuMDUtY29tcGxpYW50ICovCiAJVygweGZmZmZmZmZlKSwgVygweDBmMDAwMDAxKSwJLyogYWxsIDIuMDQtY29tcGxpYW50IGFuZCBlYXJsaWVyICovCi0JNSAtIDEsCQkJCS8qIDUgb3B0aW9uIHZlY3RvcnMgKi8KKwk2IC0gMSwJCQkJLyogNiBvcHRpb24gdmVjdG9ycyAqLwogCiAJLyogb3B0aW9uIHZlY3RvciAxOiBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0ZWQgKi8KIAkzIC0gMiwJCQkJLyogbGVuZ3RoICovCkBAIC02OTcsMTIgKzcwMCwyOSBAQAogCTAsCQkJCS8qIGRvbid0IGhhbHQgKi8KIAogCS8qIG9wdGlvbiB2ZWN0b3IgNTogUEFQUi9PRiBvcHRpb25zICovCi0JNSAtIDIsCQkJCS8qIGxlbmd0aCAqLworCTEzIC0gMiwJCQkJLyogbGVuZ3RoICovCiAJMCwJCQkJLyogZG9uJ3QgaWdub3JlLCBkb24ndCBoYWx0ICovCiAJT1Y1X0xQQVIgfCBPVjVfU1BMUEFSIHwgT1Y1X0xBUkdFX1BBR0VTIHwgT1Y1X0RSQ09ORl9NRU1PUlkgfAogCU9WNV9ET05BVEVfREVESUNBVEVfQ1BVIHwgT1Y1X01TSSwKIAkwLAogCU9WNV9DTU8sCisJMCwKKwkwLAorCTAsCisJMCwKKwkvKiBXQVJOSU5HOiBUaGUgb2Zmc2V0IG9mIHRoZSAibnVtYmVyIG9mIGNvcmVzIiBmaWVsZCBiZWxvdworCSAqIG11c3QgbWF0Y2ggYnkgdGhlIG1hY3JvIGJlbG93LiBVcGRhdGUgdGhlIGRlZmluaXRpb24gaWYKKwkgKiB0aGUgc3RydWN0dXJlIGxheW91dCBjaGFuZ2VzLgorCSAqLworI2RlZmluZSBJQk1fQVJDSF9WRUNfTlJDT1JFU19PRkZTRVQJMTAwCisJVyhOUl9DUFVTKSwJCQkvKiBudW1iZXIgb2YgY29yZXMgc3VwcG9ydGVkICovCisKKwkvKiBvcHRpb24gdmVjdG9yIDY6IElCTSBQQVBSIGhpbnRzICovCisJNCAtIDIsCQkJCS8qIGxlbmd0aCAqLworCTAsCisJMCwKKwlPVjZfTElOVVgsCisKIH07CiAKIC8qIE9sZCBtZXRob2QgLSBFTEYgaGVhZGVyIHdpdGggUFRfTk9URSBzZWN0aW9ucyAqLwpAQCAtNzkyLDEzICs4MTIsNzAgQEAKIAl9CiB9OwogCitzdGF0aWMgaW50IF9faW5pdCBwcm9tX2NvdW50X3NtdF90aHJlYWRzKHZvaWQpCit7CisJcGhhbmRsZSBub2RlOworCWNoYXIgdHlwZVs2NF07CisJdW5zaWduZWQgaW50IHBsZW47CisKKwkvKiBQaWNrIHVwIHRoIGZpcnN0IENQVSBub2RlIHdlIGNhbiBmaW5kICovCisJZm9yIChub2RlID0gMDsgcHJvbV9uZXh0X25vZGUoJm5vZGUpOyApIHsKKwkJdHlwZVswXSA9IDA7CisJCXByb21fZ2V0cHJvcChub2RlLCAiZGV2aWNlX3R5cGUiLCB0eXBlLCBzaXplb2YodHlwZSkpOworCisJCWlmIChzdHJjbXAodHlwZSwgUkVMT0MoImNwdSIpKSkKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBUaGVyZSBpcyBhbiBlbnRyeSBmb3IgZWFjaCBzbXQgdGhyZWFkLCBlYWNoIGVudHJ5IGJlaW5nCisJCSAqIDQgYnl0ZXMgbG9uZy4gIEFsbCBjcHVzIHNob3VsZCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZgorCQkgKiBzbXQgdGhyZWFkcywgc28gcmV0dXJuIGFmdGVyIGZpbmRpbmcgdGhlIGZpcnN0LgorCQkgKi8KKwkJcGxlbiA9IHByb21fZ2V0cHJvcGxlbihub2RlLCAiaWJtLHBwYy1pbnRlcnJ1cHQtc2VydmVyI3MiKTsKKwkJaWYgKHBsZW4gPT0gUFJPTV9FUlJPUikKKwkJCWJyZWFrOworCQlwbGVuID4+PSAyOworCQlwcm9tX2RlYnVnKCJGb3VuZCAweCV4IHNtdCB0aHJlYWRzIHBlciBjb3JlXG4iLCAodW5zaWduZWQgbG9uZylwbGVuKTsKKworCQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJaWYgKHBsZW4gPCAxIHx8IHBsZW4gPiA2NCkgeworCQkJcHJvbV9wcmludGYoIlRocmVhZHMgcGVyIGNvcmUgMHgleCBvdXQgb2YgYm91bmRzLCBhc3N1bWluZyAxXG4iLAorCQkJCSAgICAodW5zaWduZWQgbG9uZylwbGVuKTsKKwkJCXJldHVybiAxOworCQl9CisJCXJldHVybiBwbGVuOworCX0KKwlwcm9tX2RlYnVnKCJObyB0aHJlYWRzIGZvdW5kLCBhc3N1bWluZyAxIHBlciBjb3JlXG4iKTsKKworCXJldHVybiAxOworCit9CisKKwogc3RhdGljIHZvaWQgX19pbml0IHByb21fc2VuZF9jYXBhYmlsaXRpZXModm9pZCkKIHsKIAlpaGFuZGxlIGVsZmxvYWRlciwgcm9vdDsKIAlwcm9tX2FyZ190IHJldDsKKwl1MzIgKmNvcmVzOwogCiAJcm9vdCA9IGNhbGxfcHJvbSgib3BlbiIsIDEsIDEsIEFERFIoIi8iKSk7CiAJaWYgKHJvb3QgIT0gMCkgeworCQkvKiBXZSBuZWVkIHRvIHRlbGwgdGhlIEZXIGFib3V0IHRoZSBudW1iZXIgb2YgY29yZXMgd2Ugc3VwcG9ydC4KKwkJICoKKwkJICogVG8gZG8gdGhhdCwgd2UgY291bnQgdGhlIG51bWJlciBvZiB0aHJlYWRzIG9uIHRoZSBmaXJzdCBjb3JlCisJCSAqICh3ZSBhc3N1bWUgdGhpcyBpcyB0aGUgc2FtZSBmb3IgYWxsIGNvcmVzKSBhbmQgdXNlIGl0IHRvCisJCSAqIGRpdmlkZSBOUl9DUFVTLgorCQkgKi8KKwkJY29yZXMgPSAodTMyICopUFRSUkVMT0MoJmlibV9hcmNoaXRlY3R1cmVfdmVjW0lCTV9BUkNIX1ZFQ19OUkNPUkVTX09GRlNFVF0pOworCQlpZiAoKmNvcmVzICE9IE5SX0NQVVMpIHsKKwkJCXByb21fcHJpbnRmKCJXQVJOSU5HICEgIgorCQkJCSAgICAiaWJtX2FyY2hpdGVjdHVyZV92ZWMgc3RydWN0dXJlIGluY29uc2lzdGVudDogMHgleCAhXG4iLAorCQkJCSAgICAqY29yZXMpOworCQl9IGVsc2UgeworCQkJKmNvcmVzID0gTlJfQ1BVUyAvIHByb21fY291bnRfc210X3RocmVhZHMoKTsKKwkJCXByb21fcHJpbnRmKCJNYXggbnVtYmVyIG9mIGNvcmVzIHBhc3NlZCB0byBmaXJtd2FyZTogMHgleFxuIiwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcpKmNvcmVzKTsKKwkJfQorCiAJCS8qIHRyeSBjYWxsaW5nIHRoZSBpYm0sY2xpZW50LWFyY2hpdGVjdHVyZS1zdXBwb3J0IG1ldGhvZCAqLwogCQlwcm9tX3ByaW50ZigiQ2FsbGluZyBpYm0sY2xpZW50LWFyY2hpdGVjdHVyZS1zdXBwb3J0Li4uIik7CiAJCWlmIChjYWxsX3Byb21fcmV0KCJjYWxsLW1ldGhvZCIsIDMsIDIsICZyZXQsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYwppbmRleCBlZjE0OTg4Li5kOWIwNTg2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIC8qCiAgKiBTZXQgb2YgbXNyIGJpdHMgdGhhdCBnZGIgY2FuIGNoYW5nZSBvbiBiZWhhbGYgb2YgYSBwcm9jZXNzLgogICovCi0jaWYgZGVmaW5lZChDT05GSUdfNDB4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAjZGVmaW5lIE1TUl9ERUJVR0NIQU5HRQkwCiAjZWxzZQogI2RlZmluZSBNU1JfREVCVUdDSEFOR0UJKE1TUl9TRSB8IE1TUl9CRSkKQEAgLTcwMyw3ICs3MDMsNyBAQAogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFzay0+dGhyZWFkLnJlZ3M7CiAKIAlpZiAocmVncyAhPSBOVUxMKSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfNDB4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJCXRhc2stPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfQlQ7CiAJCXRhc2stPnRocmVhZC5kYmNyMCB8PSBEQkNSMF9JRE0gfCBEQkNSMF9JQzsKIAkJcmVncy0+bXNyIHw9IE1TUl9ERTsKQEAgLTcyMCw3ICs3MjAsNyBAQAogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFzay0+dGhyZWFkLnJlZ3M7CiAKIAlpZiAocmVncyAhPSBOVUxMKSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfNDB4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJCXRhc2stPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUM7CiAJCXRhc2stPnRocmVhZC5kYmNyMCA9IERCQ1IwX0lETSB8IERCQ1IwX0JUOwogCQlyZWdzLT5tc3IgfD0gTVNSX0RFOwpAQCAtNzM3LDE3ICs3MzcsMjUgQEAKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2stPnRocmVhZC5yZWdzOwogCiAJaWYgKHJlZ3MgIT0gTlVMTCkgewotI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKQotCQkvKiBJZiBEQUMgZG9uJ3QgY2xlYXIgREJDUk9fSURNIG9yIE1TUl9ERSAqLwotCQlpZiAodGFzay0+dGhyZWFkLmRhYnIpCi0JCQl0YXNrLT50aHJlYWQuZGJjcjAgJj0gfihEQkNSMF9JQyB8IERCQ1IwX0JUKTsKLQkJZWxzZSB7Ci0JCQl0YXNrLT50aHJlYWQuZGJjcjAgJj0gfihEQkNSMF9JQyB8IERCQ1IwX0JUIHwgREJDUjBfSURNKTsKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCisJCS8qCisJCSAqIFRoZSBsb2dpYyB0byBkaXNhYmxlIHNpbmdsZSBzdGVwcGluZyBzaG91bGQgYmUgYXMKKwkJICogc2ltcGxlIGFzIHR1cm5pbmcgb2ZmIHRoZSBJbnN0cnVjdGlvbiBDb21wbGV0ZSBmbGFnLgorCQkgKiBBbmQsIGFmdGVyIGRvaW5nIHNvLCBpZiBhbGwgZGVidWcgZmxhZ3MgYXJlIG9mZiwgdHVybgorCQkgKiBvZmYgREJDUjAoSURNKSBhbmQgTVNSKERFKSAuLi4uIFRvcmV6CisJCSAqLworCQl0YXNrLT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lDOworCQkvKgorCQkgKiBUZXN0IHRvIHNlZSBpZiBhbnkgb2YgdGhlIERCQ1JfQUNUSVZFX0VWRU5UUyBiaXRzIGFyZSBzZXQuCisJCSAqLworCQlpZiAoIURCQ1JfQUNUSVZFX0VWRU5UUyh0YXNrLT50aHJlYWQuZGJjcjAsCisJCQkJCXRhc2stPnRocmVhZC5kYmNyMSkpIHsKKwkJCS8qCisJCQkgKiBBbGwgZGVidWcgZXZlbnRzIHdlcmUgb2ZmLi4uLi4KKwkJCSAqLworCQkJdGFzay0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JRE07CiAJCQlyZWdzLT5tc3IgJj0gfk1TUl9ERTsKIAkJfQotI2VsaWYgZGVmaW5lZChDT05GSUdfNDB4KQotCQl0YXNrLT50aHJlYWQuZGJjcjAgJj0gfihEQkNSMF9JQyB8IERCQ1IwX0JUIHwgREJDUjBfSURNKTsKLQkJcmVncy0+bXNyICY9IH5NU1JfREU7CiAjZWxzZQogCQlyZWdzLT5tc3IgJj0gfihNU1JfU0UgfCBNU1JfQkUpOwogI2VuZGlmCkBAIC03NjksOCArNzc3LDcgQEAKIAlpZiAoKGRhdGEgJiB+MHg3VUwpID49IFRBU0tfU0laRSkKIAkJcmV0dXJuIC1FSU87CiAKLSNpZm5kZWYgQ09ORklHX0JPT0tFCi0KKyNpZm5kZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUwogCS8qIEZvciBwcm9jZXNzb3JzIHVzaW5nIERBQlIgKGkuZS4gOTcwKSwgdGhlIGJvdHRvbSAzIGJpdHMgYXJlIGZsYWdzLgogCSAqICBJdCB3YXMgYXNzdW1lZCwgb24gcHJldmlvdXMgaW1wbGVtZW50YXRpb25zLCB0aGF0IDMgYml0cyB3ZXJlCiAJICogIHBhc3NlZCB0b2dldGhlciB3aXRoIHRoZSBkYXRhIGFkZHJlc3MsIGZpdHRpbmcgdGhlIGRlc2lnbiBvZiB0aGUKQEAgLTc4OSwyMSArNzk2LDIyIEBACiAKIAkvKiBNb3ZlIGNvbnRlbnRzIHRvIHRoZSBEQUJSIHJlZ2lzdGVyICovCiAJdGFzay0+dGhyZWFkLmRhYnIgPSBkYXRhOwotCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkKLQorI2Vsc2UgLyogQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLwogCS8qIEFzIGRlc2NyaWJlZCBhYm92ZSwgaXQgd2FzIGFzc3VtZWQgMyBiaXRzIHdlcmUgcGFzc2VkIHdpdGggdGhlIGRhdGEKIAkgKiAgYWRkcmVzcywgYnV0IHdlIHdpbGwgYXNzdW1lIG9ubHkgdGhlIG1vZGUgYml0cyB3aWxsIGJlIHBhc3NlZAogCSAqICBhcyB0byBub3QgY2F1c2UgYWxpZ25tZW50IHJlc3RyaWN0aW9ucyBmb3IgREFDLWJhc2VkIHByb2Nlc3NvcnMuCiAJICovCiAKIAkvKiBEQUMncyBob2xkIHRoZSB3aG9sZSBhZGRyZXNzIHdpdGhvdXQgYW55IG1vZGUgZmxhZ3MgKi8KLQl0YXNrLT50aHJlYWQuZGFiciA9IGRhdGEgJiB+MHgzVUw7CisJdGFzay0+dGhyZWFkLmRhYzEgPSBkYXRhICYgfjB4M1VMOwogCi0JaWYgKHRhc2stPnRocmVhZC5kYWJyID09IDApIHsKLQkJdGFzay0+dGhyZWFkLmRiY3IwICY9IH4oREJTUl9EQUMxUiB8IERCU1JfREFDMVcgfCBEQkNSMF9JRE0pOwotCQl0YXNrLT50aHJlYWQucmVncy0+bXNyICY9IH5NU1JfREU7CisJaWYgKHRhc2stPnRocmVhZC5kYWMxID09IDApIHsKKwkJZGJjcl9kYWModGFzaykgJj0gfihEQkNSX0RBQzFSIHwgREJDUl9EQUMxVyk7CisJCWlmICghREJDUl9BQ1RJVkVfRVZFTlRTKHRhc2stPnRocmVhZC5kYmNyMCwKKwkJCQkJdGFzay0+dGhyZWFkLmRiY3IxKSkgeworCQkJdGFzay0+dGhyZWFkLnJlZ3MtPm1zciAmPSB+TVNSX0RFOworCQkJdGFzay0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JRE07CisJCX0KIAkJcmV0dXJuIDA7CiAJfQogCkBAIC04MTQsMTcgKzgyMiwxNyBAQAogCiAJLyogU2V0IHRoZSBJbnRlcm5hbCBEZWJ1Z2dpbmcgZmxhZyAoSURNIGJpdCAxKSBmb3IgdGhlIERCQ1IwCiAJICAgcmVnaXN0ZXIgKi8KLQl0YXNrLT50aHJlYWQuZGJjcjAgPSBEQkNSMF9JRE07CisJdGFzay0+dGhyZWFkLmRiY3IwIHw9IERCQ1IwX0lETTsKIAogCS8qIENoZWNrIGZvciB3cml0ZSBhbmQgcmVhZCBmbGFncyBhbmQgc2V0IERCQ1IwCiAJICAgYWNjb3JkaW5nbHkgKi8KKwlkYmNyX2RhYyh0YXNrKSAmPSB+KERCQ1JfREFDMVJ8REJDUl9EQUMxVyk7CiAJaWYgKGRhdGEgJiAweDFVTCkKLQkJdGFzay0+dGhyZWFkLmRiY3IwIHw9IERCU1JfREFDMVI7CisJCWRiY3JfZGFjKHRhc2spIHw9IERCQ1JfREFDMVI7CiAJaWYgKGRhdGEgJiAweDJVTCkKLQkJdGFzay0+dGhyZWFkLmRiY3IwIHw9IERCU1JfREFDMVc7Ci0KKwkJZGJjcl9kYWModGFzaykgfD0gREJDUl9EQUMxVzsKIAl0YXNrLT50aHJlYWQucmVncy0+bXNyIHw9IE1TUl9ERTsKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtODM5LDYgKzg0NywzOTQgQEAKIAl1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoY2hpbGQpOwogfQogCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUworc3RhdGljIGxvbmcgc2V0X2ludHJ1Y3Rpb25fYnAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKKwkJCSAgICAgIHN0cnVjdCBwcGNfaHdfYnJlYWtwb2ludCAqYnBfaW5mbykKK3sKKwlpbnQgc2xvdDsKKwlpbnQgc2xvdDFfaW5fdXNlID0gKChjaGlsZC0+dGhyZWFkLmRiY3IwICYgREJDUjBfSUFDMSkgIT0gMCk7CisJaW50IHNsb3QyX2luX3VzZSA9ICgoY2hpbGQtPnRocmVhZC5kYmNyMCAmIERCQ1IwX0lBQzIpICE9IDApOworCWludCBzbG90M19pbl91c2UgPSAoKGNoaWxkLT50aHJlYWQuZGJjcjAgJiBEQkNSMF9JQUMzKSAhPSAwKTsKKwlpbnQgc2xvdDRfaW5fdXNlID0gKChjaGlsZC0+dGhyZWFkLmRiY3IwICYgREJDUjBfSUFDNCkgIT0gMCk7CisKKwlpZiAoZGJjcl9pYWNfcmFuZ2UoY2hpbGQpICYgREJDUl9JQUMxMk1PREUpCisJCXNsb3QyX2luX3VzZSA9IDE7CisJaWYgKGRiY3JfaWFjX3JhbmdlKGNoaWxkKSAmIERCQ1JfSUFDMzRNT0RFKQorCQlzbG90NF9pbl91c2UgPSAxOworCisJaWYgKGJwX2luZm8tPmFkZHIgPj0gVEFTS19TSVpFKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChicF9pbmZvLT5hZGRyX21vZGUgIT0gUFBDX0JSRUFLUE9JTlRfTU9ERV9FWEFDVCkgeworCisJCS8qIE1ha2Ugc3VyZSByYW5nZSBpcyB2YWxpZC4gKi8KKwkJaWYgKGJwX2luZm8tPmFkZHIyID49IFRBU0tfU0laRSkKKwkJCXJldHVybiAtRUlPOworCisJCS8qIFdlIG5lZWQgYSBwYWlyIG9mIElBQyByZWdzaXN0ZXJzICovCisJCWlmICgoIXNsb3QxX2luX3VzZSkgJiYgKCFzbG90Ml9pbl91c2UpKSB7CisJCQlzbG90ID0gMTsKKwkJCWNoaWxkLT50aHJlYWQuaWFjMSA9IGJwX2luZm8tPmFkZHI7CisJCQljaGlsZC0+dGhyZWFkLmlhYzIgPSBicF9pbmZvLT5hZGRyMjsKKwkJCWNoaWxkLT50aHJlYWQuZGJjcjAgfD0gREJDUjBfSUFDMTsKKwkJCWlmIChicF9pbmZvLT5hZGRyX21vZGUgPT0KKwkJCQkJUFBDX0JSRUFLUE9JTlRfTU9ERV9SQU5HRV9FWENMVVNJVkUpCisJCQkJZGJjcl9pYWNfcmFuZ2UoY2hpbGQpIHw9IERCQ1JfSUFDMTJYOworCQkJZWxzZQorCQkJCWRiY3JfaWFjX3JhbmdlKGNoaWxkKSB8PSBEQkNSX0lBQzEySTsKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19JQUNTID4gMgorCQl9IGVsc2UgaWYgKCghc2xvdDNfaW5fdXNlKSAmJiAoIXNsb3Q0X2luX3VzZSkpIHsKKwkJCXNsb3QgPSAzOworCQkJY2hpbGQtPnRocmVhZC5pYWMzID0gYnBfaW5mby0+YWRkcjsKKwkJCWNoaWxkLT50aHJlYWQuaWFjNCA9IGJwX2luZm8tPmFkZHIyOworCQkJY2hpbGQtPnRocmVhZC5kYmNyMCB8PSBEQkNSMF9JQUMzOworCQkJaWYgKGJwX2luZm8tPmFkZHJfbW9kZSA9PQorCQkJCQlQUENfQlJFQUtQT0lOVF9NT0RFX1JBTkdFX0VYQ0xVU0lWRSkKKwkJCQlkYmNyX2lhY19yYW5nZShjaGlsZCkgfD0gREJDUl9JQUMzNFg7CisJCQllbHNlCisJCQkJZGJjcl9pYWNfcmFuZ2UoY2hpbGQpIHw9IERCQ1JfSUFDMzRJOworI2VuZGlmCisJCX0gZWxzZQorCQkJcmV0dXJuIC1FTk9TUEM7CisJfSBlbHNlIHsKKwkJLyogV2Ugb25seSBuZWVkIG9uZS4gIElmIHBvc3NpYmxlIGxlYXZlIGEgcGFpciBmcmVlIGluCisJCSAqIGNhc2UgYSByYW5nZSBpcyBuZWVkZWQgbGF0ZXIKKwkJICovCisJCWlmICghc2xvdDFfaW5fdXNlKSB7CisJCQkvKgorCQkJICogRG9uJ3QgdXNlIGlhYzEgaWYgaWFjMS1pYWMyIGFyZSBmcmVlIGFuZCBlaXRoZXIKKwkJCSAqIGlhYzMgb3IgaWFjNCAoYnV0IG5vdCBib3RoKSBhcmUgZnJlZQorCQkJICovCisJCQlpZiAoc2xvdDJfaW5fdXNlIHx8IChzbG90M19pbl91c2UgPT0gc2xvdDRfaW5fdXNlKSkgeworCQkJCXNsb3QgPSAxOworCQkJCWNoaWxkLT50aHJlYWQuaWFjMSA9IGJwX2luZm8tPmFkZHI7CisJCQkJY2hpbGQtPnRocmVhZC5kYmNyMCB8PSBEQkNSMF9JQUMxOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJCWlmICghc2xvdDJfaW5fdXNlKSB7CisJCQlzbG90ID0gMjsKKwkJCWNoaWxkLT50aHJlYWQuaWFjMiA9IGJwX2luZm8tPmFkZHI7CisJCQljaGlsZC0+dGhyZWFkLmRiY3IwIHw9IERCQ1IwX0lBQzI7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfSUFDUyA+IDIKKwkJfSBlbHNlIGlmICghc2xvdDNfaW5fdXNlKSB7CisJCQlzbG90ID0gMzsKKwkJCWNoaWxkLT50aHJlYWQuaWFjMyA9IGJwX2luZm8tPmFkZHI7CisJCQljaGlsZC0+dGhyZWFkLmRiY3IwIHw9IERCQ1IwX0lBQzM7CisJCX0gZWxzZSBpZiAoIXNsb3Q0X2luX3VzZSkgeworCQkJc2xvdCA9IDQ7CisJCQljaGlsZC0+dGhyZWFkLmlhYzQgPSBicF9pbmZvLT5hZGRyOworCQkJY2hpbGQtPnRocmVhZC5kYmNyMCB8PSBEQkNSMF9JQUM0OworI2VuZGlmCisJCX0gZWxzZQorCQkJcmV0dXJuIC1FTk9TUEM7CisJfQorb3V0OgorCWNoaWxkLT50aHJlYWQuZGJjcjAgfD0gREJDUjBfSURNOworCWNoaWxkLT50aHJlYWQucmVncy0+bXNyIHw9IE1TUl9ERTsKKworCXJldHVybiBzbG90OworfQorCitzdGF0aWMgaW50IGRlbF9pbnN0cnVjdGlvbl9icChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBpbnQgc2xvdCkKK3sKKwlzd2l0Y2ggKHNsb3QpIHsKKwljYXNlIDE6CisJCWlmIChjaGlsZC0+dGhyZWFkLmlhYzEgPT0gMCkKKwkJCXJldHVybiAtRU5PRU5UOworCisJCWlmIChkYmNyX2lhY19yYW5nZShjaGlsZCkgJiBEQkNSX0lBQzEyTU9ERSkgeworCQkJLyogYWRkcmVzcyByYW5nZSAtIGNsZWFyIHNsb3RzIDEgJiAyICovCisJCQljaGlsZC0+dGhyZWFkLmlhYzIgPSAwOworCQkJZGJjcl9pYWNfcmFuZ2UoY2hpbGQpICY9IH5EQkNSX0lBQzEyTU9ERTsKKwkJfQorCQljaGlsZC0+dGhyZWFkLmlhYzEgPSAwOworCQljaGlsZC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQUMxOworCQlicmVhazsKKwljYXNlIDI6CisJCWlmIChjaGlsZC0+dGhyZWFkLmlhYzIgPT0gMCkKKwkJCXJldHVybiAtRU5PRU5UOworCisJCWlmIChkYmNyX2lhY19yYW5nZShjaGlsZCkgJiBEQkNSX0lBQzEyTU9ERSkKKwkJCS8qIHVzZWQgaW4gYSByYW5nZSAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNoaWxkLT50aHJlYWQuaWFjMiA9IDA7CisJCWNoaWxkLT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lBQzI7CisJCWJyZWFrOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0lBQ1MgPiAyCisJY2FzZSAzOgorCQlpZiAoY2hpbGQtPnRocmVhZC5pYWMzID09IDApCisJCQlyZXR1cm4gLUVOT0VOVDsKKworCQlpZiAoZGJjcl9pYWNfcmFuZ2UoY2hpbGQpICYgREJDUl9JQUMzNE1PREUpIHsKKwkJCS8qIGFkZHJlc3MgcmFuZ2UgLSBjbGVhciBzbG90cyAzICYgNCAqLworCQkJY2hpbGQtPnRocmVhZC5pYWM0ID0gMDsKKwkJCWRiY3JfaWFjX3JhbmdlKGNoaWxkKSAmPSB+REJDUl9JQUMzNE1PREU7CisJCX0KKwkJY2hpbGQtPnRocmVhZC5pYWMzID0gMDsKKwkJY2hpbGQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUFDMzsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlpZiAoY2hpbGQtPnRocmVhZC5pYWM0ID09IDApCisJCQlyZXR1cm4gLUVOT0VOVDsKKworCQlpZiAoZGJjcl9pYWNfcmFuZ2UoY2hpbGQpICYgREJDUl9JQUMzNE1PREUpCisJCQkvKiBVc2VkIGluIGEgcmFuZ2UgKi8KKwkJCXJldHVybiAtRUlOVkFMOworCQljaGlsZC0+dGhyZWFkLmlhYzQgPSAwOworCQljaGlsZC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQUM0OworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfZGFjKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHN0cnVjdCBwcGNfaHdfYnJlYWtwb2ludCAqYnBfaW5mbykKK3sKKwlpbnQgYnl0ZV9lbmFibGUgPQorCQkoYnBfaW5mby0+Y29uZGl0aW9uX21vZGUgPj4gUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0JFX1NISUZUKQorCQkmIDB4ZjsKKwlpbnQgY29uZGl0aW9uX21vZGUgPQorCQlicF9pbmZvLT5jb25kaXRpb25fbW9kZSAmIFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9NT0RFOworCWludCBzbG90OworCisJaWYgKGJ5dGVfZW5hYmxlICYmIChjb25kaXRpb25fbW9kZSA9PSAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYnBfaW5mby0+YWRkciA+PSBUQVNLX1NJWkUpCisJCXJldHVybiAtRUlPOworCisJaWYgKChkYmNyX2RhYyhjaGlsZCkgJiAoREJDUl9EQUMxUiB8IERCQ1JfREFDMVcpKSA9PSAwKSB7CisJCXNsb3QgPSAxOworCQlpZiAoYnBfaW5mby0+dHJpZ2dlcl90eXBlICYgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9SRUFEKQorCQkJZGJjcl9kYWMoY2hpbGQpIHw9IERCQ1JfREFDMVI7CisJCWlmIChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1dSSVRFKQorCQkJZGJjcl9kYWMoY2hpbGQpIHw9IERCQ1JfREFDMVc7CisJCWNoaWxkLT50aHJlYWQuZGFjMSA9ICh1bnNpZ25lZCBsb25nKWJwX2luZm8tPmFkZHI7CisjaWYgQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyA+IDAKKwkJaWYgKGJ5dGVfZW5hYmxlKSB7CisJCQljaGlsZC0+dGhyZWFkLmR2YzEgPQorCQkJCSh1bnNpZ25lZCBsb25nKWJwX2luZm8tPmNvbmRpdGlvbl92YWx1ZTsKKwkJCWNoaWxkLT50aHJlYWQuZGJjcjIgfD0KKwkJCQkoKGJ5dGVfZW5hYmxlIDw8IERCQ1IyX0RWQzFCRV9TSElGVCkgfAorCQkJCSAoY29uZGl0aW9uX21vZGUgPDwgREJDUjJfRFZDMU1fU0hJRlQpKTsKKwkJfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1BQQ19BRFZfREVCVUdfREFDX1JBTkdFCisJfSBlbHNlIGlmIChjaGlsZC0+dGhyZWFkLmRiY3IyICYgREJDUjJfREFDMTJNT0RFKSB7CisJCS8qIEJvdGggZGFjMSBhbmQgZGFjMiBhcmUgcGFydCBvZiBhIHJhbmdlICovCisJCXJldHVybiAtRU5PU1BDOworI2VuZGlmCisJfSBlbHNlIGlmICgoZGJjcl9kYWMoY2hpbGQpICYgKERCQ1JfREFDMlIgfCBEQkNSX0RBQzJXKSkgPT0gMCkgeworCQlzbG90ID0gMjsKKwkJaWYgKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfUkVBRCkKKwkJCWRiY3JfZGFjKGNoaWxkKSB8PSBEQkNSX0RBQzJSOworCQlpZiAoYnBfaW5mby0+dHJpZ2dlcl90eXBlICYgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9XUklURSkKKwkJCWRiY3JfZGFjKGNoaWxkKSB8PSBEQkNSX0RBQzJXOworCQljaGlsZC0+dGhyZWFkLmRhYzIgPSAodW5zaWduZWQgbG9uZylicF9pbmZvLT5hZGRyOworI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0RWQ1MgPiAwCisJCWlmIChieXRlX2VuYWJsZSkgeworCQkJY2hpbGQtPnRocmVhZC5kdmMyID0KKwkJCQkodW5zaWduZWQgbG9uZylicF9pbmZvLT5jb25kaXRpb25fdmFsdWU7CisJCQljaGlsZC0+dGhyZWFkLmRiY3IyIHw9CisJCQkJKChieXRlX2VuYWJsZSA8PCBEQkNSMl9EVkMyQkVfU0hJRlQpIHwKKwkJCQkgKGNvbmRpdGlvbl9tb2RlIDw8IERCQ1IyX0RWQzJNX1NISUZUKSk7CisJCX0KKyNlbmRpZgorCX0gZWxzZQorCQlyZXR1cm4gLUVOT1NQQzsKKwljaGlsZC0+dGhyZWFkLmRiY3IwIHw9IERCQ1IwX0lETTsKKwljaGlsZC0+dGhyZWFkLnJlZ3MtPm1zciB8PSBNU1JfREU7CisKKwlyZXR1cm4gc2xvdCArIDQ7Cit9CisKK3N0YXRpYyBpbnQgZGVsX2RhYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBpbnQgc2xvdCkKK3sKKwlpZiAoc2xvdCA9PSAxKSB7CisJCWlmIChjaGlsZC0+dGhyZWFkLmRhYzEgPT0gMCkKKwkJCXJldHVybiAtRU5PRU5UOworCisJCWNoaWxkLT50aHJlYWQuZGFjMSA9IDA7CisJCWRiY3JfZGFjKGNoaWxkKSAmPSB+KERCQ1JfREFDMVIgfCBEQkNSX0RBQzFXKTsKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EQUNfUkFOR0UKKwkJaWYgKGNoaWxkLT50aHJlYWQuZGJjcjIgJiBEQkNSMl9EQUMxMk1PREUpIHsKKwkJCWNoaWxkLT50aHJlYWQuZGFjMiA9IDA7CisJCQljaGlsZC0+dGhyZWFkLmRiY3IyICY9IH5EQkNSMl9EQUMxMk1PREU7CisJCX0KKwkJY2hpbGQtPnRocmVhZC5kYmNyMiAmPSB+KERCQ1IyX0RWQzFNIHwgREJDUjJfRFZDMUJFKTsKKyNlbmRpZgorI2lmIENPTkZJR19QUENfQURWX0RFQlVHX0RWQ1MgPiAwCisJCWNoaWxkLT50aHJlYWQuZHZjMSA9IDA7CisjZW5kaWYKKwl9IGVsc2UgaWYgKHNsb3QgPT0gMikgeworCQlpZiAoY2hpbGQtPnRocmVhZC5kYWMxID09IDApCisJCQlyZXR1cm4gLUVOT0VOVDsKKworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX0RBQ19SQU5HRQorCQlpZiAoY2hpbGQtPnRocmVhZC5kYmNyMiAmIERCQ1IyX0RBQzEyTU9ERSkKKwkJCS8qIFBhcnQgb2YgYSByYW5nZSAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNoaWxkLT50aHJlYWQuZGJjcjIgJj0gfihEQkNSMl9EVkMyTSB8IERCQ1IyX0RWQzJCRSk7CisjZW5kaWYKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTID4gMAorCQljaGlsZC0+dGhyZWFkLmR2YzIgPSAwOworI2VuZGlmCisJCWNoaWxkLT50aHJlYWQuZGFjMiA9IDA7CisJCWRiY3JfZGFjKGNoaWxkKSAmPSB+KERCQ1JfREFDMlIgfCBEQkNSX0RBQzJXKTsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTICovCisKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EQUNfUkFOR0UKK3N0YXRpYyBpbnQgc2V0X2RhY19yYW5nZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAorCQkJIHN0cnVjdCBwcGNfaHdfYnJlYWtwb2ludCAqYnBfaW5mbykKK3sKKwlpbnQgbW9kZSA9IGJwX2luZm8tPmFkZHJfbW9kZSAmIFBQQ19CUkVBS1BPSU5UX01PREVfTUFTSzsKKworCS8qIFdlIGRvbid0IGFsbG93IHJhbmdlIHdhdGNocG9pbnRzIHRvIGJlIHVzZWQgd2l0aCBEVkMgKi8KKwlpZiAoYnBfaW5mby0+Y29uZGl0aW9uX21vZGUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBCZXN0IGVmZm9ydCB0byB2ZXJpZnkgdGhlIGFkZHJlc3MgcmFuZ2UuICBUaGUgdXNlci9zdXBlcnZpc29yIGJpdHMKKwkgKiBwcmV2ZW50IHRyYXBwaW5nIGluIGtlcm5lbCBzcGFjZSwgYnV0IGxldCdzIGZhaWwgb24gYW4gb2J2aW91cyBiYWQKKwkgKiByYW5nZS4gIFRoZSBzaW1wbGUgdGVzdCBvbiB0aGUgbWFzayBpcyBub3QgZm9vbC1wcm9vZiwgYW5kIGFueQorCSAqIGV4Y2x1c2l2ZSByYW5nZSB3aWxsIHNwaWxsIG92ZXIgaW50byBrZXJuZWwgc3BhY2UuCisJICovCisJaWYgKGJwX2luZm8tPmFkZHIgPj0gVEFTS19TSVpFKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAobW9kZSA9PSBQUENfQlJFQUtQT0lOVF9NT0RFX01BU0spIHsKKwkJLyoKKwkJICogZGFjMiBpcyBhIGJpdG1hc2suICBEb24ndCBhbGxvdyBhIG1hc2sgdGhhdCBtYWtlcyBhCisJCSAqIGtlcm5lbCBzcGFjZSBhZGRyZXNzIGZyb20gYSB2YWxpZCBkYWMxIHZhbHVlCisJCSAqLworCQlpZiAofigodW5zaWduZWQgbG9uZylicF9pbmZvLT5hZGRyMikgPj0gVEFTS19TSVpFKQorCQkJcmV0dXJuIC1FSU87CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRm9yIHJhbmdlIGJyZWFrcG9pbnRzLCBhZGRyMiBtdXN0IGFsc28gYmUgYSB2YWxpZCBhZGRyZXNzCisJCSAqLworCQlpZiAoYnBfaW5mby0+YWRkcjIgPj0gVEFTS19TSVpFKQorCQkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGNoaWxkLT50aHJlYWQuZGJjcjAgJgorCSAgICAoREJDUjBfREFDMVIgfCBEQkNSMF9EQUMxVyB8IERCQ1IwX0RBQzJSIHwgREJDUjBfREFDMlcpKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmIChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JFQUQpCisJCWNoaWxkLT50aHJlYWQuZGJjcjAgfD0gKERCQ1IwX0RBQzFSIHwgREJDUjBfSURNKTsKKwlpZiAoYnBfaW5mby0+dHJpZ2dlcl90eXBlICYgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9XUklURSkKKwkJY2hpbGQtPnRocmVhZC5kYmNyMCB8PSAoREJDUjBfREFDMVcgfCBEQkNSMF9JRE0pOworCWNoaWxkLT50aHJlYWQuZGFjMSA9IGJwX2luZm8tPmFkZHI7CisJY2hpbGQtPnRocmVhZC5kYWMyID0gYnBfaW5mby0+YWRkcjI7CisJaWYgKG1vZGUgPT0gUFBDX0JSRUFLUE9JTlRfTU9ERV9SQU5HRV9JTkNMVVNJVkUpCisJCWNoaWxkLT50aHJlYWQuZGJjcjIgIHw9IERCQ1IyX0RBQzEyTTsKKwllbHNlIGlmIChtb2RlID09IFBQQ19CUkVBS1BPSU5UX01PREVfUkFOR0VfRVhDTFVTSVZFKQorCQljaGlsZC0+dGhyZWFkLmRiY3IyICB8PSBEQkNSMl9EQUMxMk1YOworCWVsc2UJLyogUFBDX0JSRUFLUE9JTlRfTU9ERV9NQVNLICovCisJCWNoaWxkLT50aHJlYWQuZGJjcjIgIHw9IERCQ1IyX0RBQzEyTU07CisJY2hpbGQtPnRocmVhZC5yZWdzLT5tc3IgfD0gTVNSX0RFOworCisJcmV0dXJuIDU7Cit9CisjZW5kaWYgLyogQ09ORklHX1BQQ19BRFZfREVCVUdfREFDX1JBTkdFICovCisKK3N0YXRpYyBsb25nIHBwY19zZXRfaHdkZWJ1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAorCQkgICAgIHN0cnVjdCBwcGNfaHdfYnJlYWtwb2ludCAqYnBfaW5mbykKK3sKKwlpZiAoYnBfaW5mby0+dmVyc2lvbiAhPSAxKQorCQlyZXR1cm4gLUVOT1RTVVBQOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKKwkvKgorCSAqIENoZWNrIGZvciBpbnZhbGlkIGZsYWdzIGFuZCBjb21iaW5hdGlvbnMKKwkgKi8KKwlpZiAoKGJwX2luZm8tPnRyaWdnZXJfdHlwZSA9PSAwKSB8fAorCSAgICAoYnBfaW5mby0+dHJpZ2dlcl90eXBlICYgfihQUENfQlJFQUtQT0lOVF9UUklHR0VSX0VYRUNVVEUgfAorCQkJCSAgICAgICBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JXKSkgfHwKKwkgICAgKGJwX2luZm8tPmFkZHJfbW9kZSAmIH5QUENfQlJFQUtQT0lOVF9NT0RFX01BU0spIHx8CisJICAgIChicF9pbmZvLT5jb25kaXRpb25fbW9kZSAmCisJICAgICB+KFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9NT0RFIHwKKwkgICAgICAgUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX0JFX0FMTCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKyNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTID09IDAKKwlpZiAoYnBfaW5mby0+Y29uZGl0aW9uX21vZGUgIT0gUFBDX0JSRUFLUE9JTlRfQ09ORElUSU9OX05PTkUpCisJCXJldHVybiAtRUlOVkFMOworI2VuZGlmCisKKwlpZiAoYnBfaW5mby0+dHJpZ2dlcl90eXBlICYgUFBDX0JSRUFLUE9JTlRfVFJJR0dFUl9FWEVDVVRFKSB7CisJCWlmICgoYnBfaW5mby0+dHJpZ2dlcl90eXBlICE9IFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfRVhFQ1VURSkgfHwKKwkJICAgIChicF9pbmZvLT5jb25kaXRpb25fbW9kZSAhPSBQUENfQlJFQUtQT0lOVF9DT05ESVRJT05fTk9ORSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIHNldF9pbnRydWN0aW9uX2JwKGNoaWxkLCBicF9pbmZvKTsKKwl9CisJaWYgKGJwX2luZm8tPmFkZHJfbW9kZSA9PSBQUENfQlJFQUtQT0lOVF9NT0RFX0VYQUNUKQorCQlyZXR1cm4gc2V0X2RhYyhjaGlsZCwgYnBfaW5mbyk7CisKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EQUNfUkFOR0UKKwlyZXR1cm4gc2V0X2RhY19yYW5nZShjaGlsZCwgYnBfaW5mbyk7CisjZWxzZQorCXJldHVybiAtRUlOVkFMOworI2VuZGlmCisjZWxzZSAvKiAhQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUyAqLworCS8qCisJICogV2Ugb25seSBzdXBwb3J0IG9uZSBkYXRhIGJyZWFrcG9pbnQKKwkgKi8KKwlpZiAoKChicF9pbmZvLT50cmlnZ2VyX3R5cGUgJiBQUENfQlJFQUtQT0lOVF9UUklHR0VSX1JXKSA9PSAwKSB8fAorCSAgICAoKGJwX2luZm8tPnRyaWdnZXJfdHlwZSAmIH5QUENfQlJFQUtQT0lOVF9UUklHR0VSX1JXKSAhPSAwKSB8fAorCSAgICAoYnBfaW5mby0+dHJpZ2dlcl90eXBlICE9IFBQQ19CUkVBS1BPSU5UX1RSSUdHRVJfV1JJVEUpIHx8CisJICAgIChicF9pbmZvLT5hZGRyX21vZGUgIT0gUFBDX0JSRUFLUE9JTlRfTU9ERV9FWEFDVCkgfHwKKwkgICAgKGJwX2luZm8tPmNvbmRpdGlvbl9tb2RlICE9IFBQQ19CUkVBS1BPSU5UX0NPTkRJVElPTl9OT05FKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY2hpbGQtPnRocmVhZC5kYWJyKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmICgodW5zaWduZWQgbG9uZylicF9pbmZvLT5hZGRyID49IFRBU0tfU0laRSkKKwkJcmV0dXJuIC1FSU87CisKKwljaGlsZC0+dGhyZWFkLmRhYnIgPSAodW5zaWduZWQgbG9uZylicF9pbmZvLT5hZGRyOworCisJcmV0dXJuIDE7CisjZW5kaWYgLyogIUNPTkZJR19QUENfQURWX0RFQlVHX0RWQ1MgKi8KK30KKworc3RhdGljIGxvbmcgcHBjX2RlbF9od2RlYnVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgYWRkciwgbG9uZyBkYXRhKQoreworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKKwlpbnQgcmM7CisKKwlpZiAoZGF0YSA8PSA0KQorCQlyYyA9IGRlbF9pbnN0cnVjdGlvbl9icChjaGlsZCwgKGludClkYXRhKTsKKwllbHNlCisJCXJjID0gZGVsX2RhYyhjaGlsZCwgKGludClkYXRhIC0gNCk7CisKKwlpZiAoIXJjKSB7CisJCWlmICghREJDUl9BQ1RJVkVfRVZFTlRTKGNoaWxkLT50aHJlYWQuZGJjcjAsCisJCQkJCWNoaWxkLT50aHJlYWQuZGJjcjEpKSB7CisJCQljaGlsZC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JRE07CisJCQljaGlsZC0+dGhyZWFkLnJlZ3MtPm1zciAmPSB+TVNSX0RFOworCQl9CisJfQorCXJldHVybiByYzsKKyNlbHNlCisJaWYgKGRhdGEgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNoaWxkLT50aHJlYWQuZGFiciA9PSAwKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWNoaWxkLT50aHJlYWQuZGFiciA9IDA7CisKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCiAvKgogICogSGVyZSBhcmUgdGhlIG9sZCAibGVnYWN5IiBwb3dlcnBjIHNwZWNpZmljIGdldHJlZ3Mvc2V0cmVncyBwdHJhY2UgY2FsbHMsCiAgKiB3ZSBtYXJrIHRoZW0gYXMgb2Jzb2xldGUgbm93LCB0aGV5IHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uCkBAIC05MzIsMTMgKzEzMjgsNzcgQEAKIAkJYnJlYWs7CiAJfQogCisJY2FzZSBQUENfUFRSQUNFX0dFVEhXREJHSU5GTzogeworCQlzdHJ1Y3QgcHBjX2RlYnVnX2luZm8gZGJnaW5mbzsKKworCQlkYmdpbmZvLnZlcnNpb24gPSAxOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKKwkJZGJnaW5mby5udW1faW5zdHJ1Y3Rpb25fYnBzID0gQ09ORklHX1BQQ19BRFZfREVCVUdfSUFDUzsKKwkJZGJnaW5mby5udW1fZGF0YV9icHMgPSBDT05GSUdfUFBDX0FEVl9ERUJVR19EQUNTOworCQlkYmdpbmZvLm51bV9jb25kaXRpb25fcmVncyA9IENPTkZJR19QUENfQURWX0RFQlVHX0RWQ1M7CisJCWRiZ2luZm8uZGF0YV9icF9hbGlnbm1lbnQgPSA0OworCQlkYmdpbmZvLnNpemVvZl9jb25kaXRpb24gPSA0OworCQlkYmdpbmZvLmZlYXR1cmVzID0gUFBDX0RFQlVHX0ZFQVRVUkVfSU5TTl9CUF9SQU5HRSB8CisJCQkJICAgUFBDX0RFQlVHX0ZFQVRVUkVfSU5TTl9CUF9NQVNLOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX0RBQ19SQU5HRQorCQlkYmdpbmZvLmZlYXR1cmVzIHw9CisJCQkJICAgUFBDX0RFQlVHX0ZFQVRVUkVfREFUQV9CUF9SQU5HRSB8CisJCQkJICAgUFBDX0RFQlVHX0ZFQVRVUkVfREFUQV9CUF9NQVNLOworI2VuZGlmCisjZWxzZSAvKiAhQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLworCQlkYmdpbmZvLm51bV9pbnN0cnVjdGlvbl9icHMgPSAwOworCQlkYmdpbmZvLm51bV9kYXRhX2JwcyA9IDE7CisJCWRiZ2luZm8ubnVtX2NvbmRpdGlvbl9yZWdzID0gMDsKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwkJZGJnaW5mby5kYXRhX2JwX2FsaWdubWVudCA9IDg7CisjZWxzZQorCQlkYmdpbmZvLmRhdGFfYnBfYWxpZ25tZW50ID0gNDsKKyNlbmRpZgorCQlkYmdpbmZvLnNpemVvZl9jb25kaXRpb24gPSAwOworCQlkYmdpbmZvLmZlYXR1cmVzID0gMDsKKyNlbmRpZiAvKiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTICovCisKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBkYXRhLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcHBjX2RlYnVnX2luZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXQgPSBfX2NvcHlfdG9fdXNlcigoc3RydWN0IHBwY19kZWJ1Z19pbmZvIF9fdXNlciAqKWRhdGEsCisJCQkJICAgICAmZGJnaW5mbywgc2l6ZW9mKHN0cnVjdCBwcGNfZGVidWdfaW5mbykpID8KKwkJICAgICAgLUVGQVVMVCA6IDA7CisJCWJyZWFrOworCX0KKworCWNhc2UgUFBDX1BUUkFDRV9TRVRIV0RFQlVHOiB7CisJCXN0cnVjdCBwcGNfaHdfYnJlYWtwb2ludCBicF9pbmZvOworCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBkYXRhLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcHBjX2h3X2JyZWFrcG9pbnQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXQgPSBfX2NvcHlfZnJvbV91c2VyKCZicF9pbmZvLAorCQkJCSAgICAgICAoc3RydWN0IHBwY19od19icmVha3BvaW50IF9fdXNlciAqKWRhdGEsCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcHBjX2h3X2JyZWFrcG9pbnQpKSA/CisJCSAgICAgIC1FRkFVTFQgOiAwOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHBwY19zZXRfaHdkZWJ1ZyhjaGlsZCwgJmJwX2luZm8pOworCQlicmVhazsKKwl9CisKKwljYXNlIFBQQ19QVFJBQ0VfREVMSFdERUJVRzogeworCQlyZXQgPSBwcGNfZGVsX2h3ZGVidWcoY2hpbGQsIGFkZHIsIGRhdGEpOworCQlicmVhazsKKwl9CisKIAljYXNlIFBUUkFDRV9HRVRfREVCVUdSRUc6IHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJLyogV2Ugb25seSBzdXBwb3J0IG9uZSBEQUJSIGFuZCBubyBJQUJSUyBhdCB0aGUgbW9tZW50ICovCiAJCWlmIChhZGRyID4gMCkKIAkJCWJyZWFrOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKKwkJcmV0ID0gcHV0X3VzZXIoY2hpbGQtPnRocmVhZC5kYWMxLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWRhdGEpOworI2Vsc2UKIAkJcmV0ID0gcHV0X3VzZXIoY2hpbGQtPnRocmVhZC5kYWJyLAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWRhdGEpOworI2VuZGlmCiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmMKaW5kZXggMDBiNTA3OC4uYTBhZmI1NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbC5jCkBAIC0xNDAsMTcgKzE0MCwxNSBAQAogCQlyZXR1cm4gMDsgICAgICAgICAgICAgICAvKiBubyBzaWduYWxzIGRlbGl2ZXJlZCAqLwogCX0KIAorI2lmbmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAgICAgICAgIC8qCiAJICogUmVlbmFibGUgdGhlIERBQlIgYmVmb3JlIGRlbGl2ZXJpbmcgdGhlIHNpZ25hbCB0bwogCSAqIHVzZXIgc3BhY2UuIFRoZSBEQUJSIHdpbGwgaGF2ZSBiZWVuIGNsZWFyZWQgaWYgaXQKIAkgKiB0cmlnZ2VyZWQgaW5zaWRlIHRoZSBrZXJuZWwuCiAJICovCi0JaWYgKGN1cnJlbnQtPnRocmVhZC5kYWJyKSB7CisJaWYgKGN1cnJlbnQtPnRocmVhZC5kYWJyKQogCQlzZXRfZGFicihjdXJyZW50LT50aHJlYWQuZGFicik7Ci0jaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpCi0JCW10c3ByKFNQUk5fREJDUjAsIGN1cnJlbnQtPnRocmVhZC5kYmNyMCk7CiAjZW5kaWYKLQl9CiAKIAlpZiAoaXMzMikgewogICAgICAgICAJaWYgKGthLnNhLnNhX2ZsYWdzICYgU0FfU0lHSU5GTykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCmluZGV4IGQ2NzA0MjkuLjI2NjYxMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYwpAQCAtMTA3OCw3ICsxMDc4LDcgQEAKIAlpbnQgaTsKIAl1bnNpZ25lZCBjaGFyIHRtcDsKIAl1bnNpZ25lZCBsb25nIG5ld19tc3IgPSByZWdzLT5tc3I7Ci0jaWYgZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJdW5zaWduZWQgbG9uZyBuZXdfZGJjcjAgPSBjdXJyZW50LT50aHJlYWQuZGJjcjA7CiAjZW5kaWYKIApAQCAtMTA4NywxMyArMTA4NywxNyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXN3aXRjaCAob3AuZGJnX3R5cGUpIHsKIAkJY2FzZSBTSUdfREJHX1NJTkdMRV9TVEVQUElORzoKLSNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAkJCWlmIChvcC5kYmdfdmFsdWUpIHsKIAkJCQluZXdfbXNyIHw9IE1TUl9ERTsKIAkJCQluZXdfZGJjcjAgfD0gKERCQ1IwX0lETSB8IERCQ1IwX0lDKTsKIAkJCX0gZWxzZSB7Ci0JCQkJbmV3X21zciAmPSB+TVNSX0RFOwotCQkJCW5ld19kYmNyMCAmPSB+KERCQ1IwX0lETSB8IERCQ1IwX0lDKTsKKwkJCQluZXdfZGJjcjAgJj0gfkRCQ1IwX0lDOworCQkJCWlmICghREJDUl9BQ1RJVkVfRVZFTlRTKG5ld19kYmNyMCwKKwkJCQkJCWN1cnJlbnQtPnRocmVhZC5kYmNyMSkpIHsKKwkJCQkJbmV3X21zciAmPSB+TVNSX0RFOworCQkJCQluZXdfZGJjcjAgJj0gfkRCQ1IwX0lETTsKKwkJCQl9CiAJCQl9CiAjZWxzZQogCQkJaWYgKG9wLmRiZ192YWx1ZSkKQEAgLTExMDMsNyArMTEwNyw3IEBACiAjZW5kaWYKIAkJCWJyZWFrOwogCQljYXNlIFNJR19EQkdfQlJBTkNIX1RSQUNJTkc6Ci0jaWYgZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAJCQlyZXR1cm4gLUVJTlZBTDsKICNlbHNlCiAJCQlpZiAob3AuZGJnX3ZhbHVlKQpAQCAtMTEyNCw3ICsxMTI4LDcgQEAKIAkgICBmYWlsdXJlIGlzIGEgcHJvYmxlbSwgYW55d2F5LCBhbmQgaXQncyB2ZXJ5IHVubGlrZWx5IHVubGVzcwogCSAgIHRoZSB1c2VyIGlzIHJlYWxseSBkb2luZyBzb21ldGhpbmcgd3JvbmcuICovCiAJcmVncy0+bXNyID0gbmV3X21zcjsKLSNpZiBkZWZpbmVkKENPTkZJR180eHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKIAljdXJyZW50LT50aHJlYWQuZGJjcjAgPSBuZXdfZGJjcjA7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwppbmRleCA2YzYwOTNkLi4xYjE2YjlhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwpAQCAtMjY1LDggKzI2NSw4IEBACiAJCWFjY291bnRfc3lzdGVtX3RpbWUodHNrLCAwLCBkZWx0YSwgZGVsdGFzY2FsZWQpOwogCWVsc2UKIAkJYWNjb3VudF9pZGxlX3RpbWUoZGVsdGEpOwotCXBlcl9jcHUoY3B1dGltZV9sYXN0X2RlbHRhLCBzbXBfcHJvY2Vzc29yX2lkKCkpID0gZGVsdGE7Ci0JcGVyX2NwdShjcHV0aW1lX3NjYWxlZF9sYXN0X2RlbHRhLCBzbXBfcHJvY2Vzc29yX2lkKCkpID0gZGVsdGFzY2FsZWQ7CisJX19nZXRfY3B1X3ZhcihjcHV0aW1lX2xhc3RfZGVsdGEpID0gZGVsdGE7CisJX19nZXRfY3B1X3ZhcihjcHV0aW1lX3NjYWxlZF9sYXN0X2RlbHRhKSA9IGRlbHRhc2NhbGVkOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFjY291bnRfc3lzdGVtX3Z0aW1lKTsKQEAgLTU3NSw2ICs1NzUsOCBAQAogCiAJdHJhY2VfdGltZXJfaW50ZXJydXB0X2VudHJ5KHJlZ3MpOwogCisJX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkudGltZXJfaXJxcysrOworCiAJLyogRW5zdXJlIGEgcG9zaXRpdmUgdmFsdWUgaXMgd3JpdHRlbiB0byB0aGUgZGVjcmVtZW50ZXIsIG9yIGVsc2UKIAkgKiBzb21lIENQVXMgd2lsbCBjb250aW51dWUgdG8gdGFrZSBkZWNyZW1lbnRlciBleGNlcHRpb25zICovCiAJc2V0X2RlYyhERUNSRU1FTlRFUl9NQVgpOwpAQCAtOTM1LDggKzkzNyw4IEBACiAJKmRlYyA9IGRlY3JlbWVudGVyX2Nsb2NrZXZlbnQ7CiAJZGVjLT5jcHVtYXNrID0gY3B1bWFza19vZihjcHUpOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgImNsb2NrZXZlbnQ6ICVzIG11bHRbJXhdIHNoaWZ0WyVkXSBjcHVbJWRdXG4iLAotCSAgICAgICBkZWMtPm5hbWUsIGRlYy0+bXVsdCwgZGVjLT5zaGlmdCwgY3B1KTsKKwlwcmludGtfb25jZShLRVJOX0RFQlVHICJjbG9ja2V2ZW50OiAlcyBtdWx0WyV4XSBzaGlmdFslZF0gY3B1WyVkXVxuIiwKKwkJICAgIGRlYy0+bmFtZSwgZGVjLT5tdWx0LCBkZWMtPnNoaWZ0LCBjcHUpOwogCiAJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGRlYyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKaW5kZXggZDA2OWZmOC4uNjk2NjI2YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwpAQCAtNjAsMTMgKzYwLDEzIEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHR0VSKSB8fCBkZWZpbmVkKENPTkZJR19LRVhFQykKLWludCAoKl9fZGVidWdnZXIpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWludCAoKl9fZGVidWdnZXJfaXBpKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1pbnQgKCpfX2RlYnVnZ2VyX2JwdCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotaW50ICgqX19kZWJ1Z2dlcl9zc3RlcCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotaW50ICgqX19kZWJ1Z2dlcl9pYWJyX21hdGNoKShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1pbnQgKCpfX2RlYnVnZ2VyX2RhYnJfbWF0Y2gpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWludCAoKl9fZGVidWdnZXJfZmF1bHRfaGFuZGxlcikoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworaW50ICgqX19kZWJ1Z2dlcikoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIF9fcmVhZF9tb3N0bHk7CitpbnQgKCpfX2RlYnVnZ2VyX2lwaSkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIF9fcmVhZF9tb3N0bHk7CitpbnQgKCpfX2RlYnVnZ2VyX2JwdCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIF9fcmVhZF9tb3N0bHk7CitpbnQgKCpfX2RlYnVnZ2VyX3NzdGVwKShzdHJ1Y3QgcHRfcmVncyAqcmVncykgX19yZWFkX21vc3RseTsKK2ludCAoKl9fZGVidWdnZXJfaWFicl9tYXRjaCkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIF9fcmVhZF9tb3N0bHk7CitpbnQgKCpfX2RlYnVnZ2VyX2RhYnJfbWF0Y2gpKHN0cnVjdCBwdF9yZWdzICpyZWdzKSBfX3JlYWRfbW9zdGx5OworaW50ICgqX19kZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyKShzdHJ1Y3QgcHRfcmVncyAqcmVncykgX19yZWFkX21vc3RseTsKIAogRVhQT1JUX1NZTUJPTChfX2RlYnVnZ2VyKTsKIEVYUE9SVF9TWU1CT0woX19kZWJ1Z2dlcl9pcGkpOwpAQCAtMTAyLDExICsxMDIsMTEgQEAKIGludCBkaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIpCiB7CiAJc3RhdGljIHN0cnVjdCB7Ci0JCXNwaW5sb2NrX3QgbG9jazsKKwkJcmF3X3NwaW5sb2NrX3QgbG9jazsKIAkJdTMyIGxvY2tfb3duZXI7CiAJCWludCBsb2NrX293bmVyX2RlcHRoOwogCX0gZGllID0gewotCQkubG9jayA9CQkJX19TUElOX0xPQ0tfVU5MT0NLRUQoZGllLmxvY2spLAorCQkubG9jayA9CQkJX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKGRpZS5sb2NrKSwKIAkJLmxvY2tfb3duZXIgPQkJLTEsCiAJCS5sb2NrX293bmVyX2RlcHRoID0JMAogCX07CkBAIC0xMjAsNyArMTIwLDcgQEAKIAogCWlmIChkaWUubG9ja19vd25lciAhPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CiAJCWNvbnNvbGVfdmVyYm9zZSgpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGllLmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkaWUubG9jaywgZmxhZ3MpOwogCQlkaWUubG9ja19vd25lciA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAkJZGllLmxvY2tfb3duZXJfZGVwdGggPSAwOwogCQlidXN0X3NwaW5sb2NrcygxKTsKQEAgLTE0Niw2ICsxNDYsMTEgQEAKICNlbmRpZgogCQlwcmludGsoIiVzXG4iLCBwcGNfbWQubmFtZSA/IHBwY19tZC5uYW1lIDogIiIpOwogCisJCXN5c2ZzX3ByaW50a19sYXN0X2ZpbGUoKTsKKwkJaWYgKG5vdGlmeV9kaWUoRElFX09PUFMsIHN0ciwgcmVncywgZXJyLCAyNTUsCisJCQkgICAgICAgU0lHU0VHVikgPT0gTk9USUZZX1NUT1ApCisJCQlyZXR1cm4gMTsKKwogCQlwcmludF9tb2R1bGVzKCk7CiAJCXNob3dfcmVncyhyZWdzKTsKIAl9IGVsc2UgewpAQCAtMTU1LDcgKzE2MCw3IEBACiAJYnVzdF9zcGlubG9ja3MoMCk7CiAJZGllLmxvY2tfb3duZXIgPSAtMTsKIAlhZGRfdGFpbnQoVEFJTlRfRElFKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaWUubG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaWUubG9jaywgZmxhZ3MpOwogCiAJaWYgKGtleGVjX3Nob3VsZF9jcmFzaChjdXJyZW50KSB8fAogCQlrZXhlY19zcl9hY3RpdmF0ZWQoc21wX3Byb2Nlc3Nvcl9pZCgpKSkKQEAgLTI5NCw3ICsyOTksNyBAQAogCXJldHVybiAwOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTCiAvKiBPbiA0eHgsIHRoZSByZWFzb24gZm9yIHRoZSBtYWNoaW5lIGNoZWNrIG9yIHByb2dyYW0gZXhjZXB0aW9uCiAgICBpcyBpbiB0aGUgRVNSLiAqLwogI2RlZmluZSBnZXRfcmVhc29uKHJlZ3MpCSgocmVncyktPmRzaXNyKQpAQCAtNDc4LDYgKzQ4Myw4IEBACiB7CiAJaW50IHJlY292ZXIgPSAwOwogCisJX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkubWNlX2V4Y2VwdGlvbnMrKzsKKwogCS8qIFNlZSBpZiBhbnkgbWFjaGluZSBkZXBlbmRlbnQgY2FsbHMuIEluIHRoZW9yeSwgd2Ugd291bGQgd2FudAogCSAqIHRvIGNhbGwgdGhlIENQVSBmaXJzdCwgYW5kIGNhbGwgdGhlIHBwY19tZC4gb25lIGlmIHRoZSBDUFUKIAkgKiBvbmUgcmV0dXJucyBhIHBvc2l0aXZlIG51bWJlci4gSG93ZXZlciB0aGVyZSBpcyBleGlzdGluZyBjb2RlCkBAIC05NjAsNiArOTY3LDggQEAKIAogdm9pZCBwZXJmb3JtYW5jZV9tb25pdG9yX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKwlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5wbXVfaXJxcysrOworCiAJcGVyZl9pcnEocmVncyk7CiB9CiAKQEAgLTEwMjQsMTAgKzEwMzMsNjkgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfOHh4ICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR180MHgpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQorI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKK3N0YXRpYyB2b2lkIGhhbmRsZV9kZWJ1ZyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBkZWJ1Z19zdGF0dXMpCit7CisJaW50IGNoYW5nZWQgPSAwOworCS8qCisJICogRGV0ZXJtaW5lIHRoZSBjYXVzZSBvZiB0aGUgZGVidWcgZXZlbnQsIGNsZWFyIHRoZQorCSAqIGV2ZW50IGZsYWdzIGFuZCBzZW5kIGEgdHJhcCB0byB0aGUgaGFuZGxlci4gVG9yZXoKKwkgKi8KKwlpZiAoZGVidWdfc3RhdHVzICYgKERCU1JfREFDMVIgfCBEQlNSX0RBQzFXKSkgeworCQlkYmNyX2RhYyhjdXJyZW50KSAmPSB+KERCQ1JfREFDMVIgfCBEQkNSX0RBQzFXKTsKKyNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EQUNfUkFOR0UKKwkJY3VycmVudC0+dGhyZWFkLmRiY3IyICY9IH5EQkNSMl9EQUMxMk1PREU7CisjZW5kaWYKKwkJZG9fc2VuZF90cmFwKHJlZ3MsIG1mc3ByKFNQUk5fREFDMSksIGRlYnVnX3N0YXR1cywgVFJBUF9IV0JLUFQsCisJCQkgICAgIDUpOworCQljaGFuZ2VkIHw9IDB4MDE7CisJfSAgZWxzZSBpZiAoZGVidWdfc3RhdHVzICYgKERCU1JfREFDMlIgfCBEQlNSX0RBQzJXKSkgeworCQlkYmNyX2RhYyhjdXJyZW50KSAmPSB+KERCQ1JfREFDMlIgfCBEQkNSX0RBQzJXKTsKKwkJZG9fc2VuZF90cmFwKHJlZ3MsIG1mc3ByKFNQUk5fREFDMiksIGRlYnVnX3N0YXR1cywgVFJBUF9IV0JLUFQsCisJCQkgICAgIDYpOworCQljaGFuZ2VkIHw9IDB4MDE7CisJfSAgZWxzZSBpZiAoZGVidWdfc3RhdHVzICYgREJTUl9JQUMxKSB7CisJCWN1cnJlbnQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUFDMTsKKwkJZGJjcl9pYWNfcmFuZ2UoY3VycmVudCkgJj0gfkRCQ1JfSUFDMTJNT0RFOworCQlkb19zZW5kX3RyYXAocmVncywgbWZzcHIoU1BSTl9JQUMxKSwgZGVidWdfc3RhdHVzLCBUUkFQX0hXQktQVCwKKwkJCSAgICAgMSk7CisJCWNoYW5nZWQgfD0gMHgwMTsKKwl9ICBlbHNlIGlmIChkZWJ1Z19zdGF0dXMgJiBEQlNSX0lBQzIpIHsKKwkJY3VycmVudC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQUMyOworCQlkb19zZW5kX3RyYXAocmVncywgbWZzcHIoU1BSTl9JQUMyKSwgZGVidWdfc3RhdHVzLCBUUkFQX0hXQktQVCwKKwkJCSAgICAgMik7CisJCWNoYW5nZWQgfD0gMHgwMTsKKwl9ICBlbHNlIGlmIChkZWJ1Z19zdGF0dXMgJiBEQlNSX0lBQzMpIHsKKwkJY3VycmVudC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQUMzOworCQlkYmNyX2lhY19yYW5nZShjdXJyZW50KSAmPSB+REJDUl9JQUMzNE1PREU7CisJCWRvX3NlbmRfdHJhcChyZWdzLCBtZnNwcihTUFJOX0lBQzMpLCBkZWJ1Z19zdGF0dXMsIFRSQVBfSFdCS1BULAorCQkJICAgICAzKTsKKwkJY2hhbmdlZCB8PSAweDAxOworCX0gIGVsc2UgaWYgKGRlYnVnX3N0YXR1cyAmIERCU1JfSUFDNCkgeworCQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lBQzQ7CisJCWRvX3NlbmRfdHJhcChyZWdzLCBtZnNwcihTUFJOX0lBQzQpLCBkZWJ1Z19zdGF0dXMsIFRSQVBfSFdCS1BULAorCQkJICAgICA0KTsKKwkJY2hhbmdlZCB8PSAweDAxOworCX0KKwkvKgorCSAqIEF0IHRoZSBwb2ludCB0aGlzIHJvdXRpbmUgd2FzIGNhbGxlZCwgdGhlIE1TUihERSkgd2FzIHR1cm5lZCBvZmYuCisJICogQ2hlY2sgYWxsIG90aGVyIGRlYnVnIGZsYWdzIGFuZCBzZWUgaWYgdGhhdCBiaXQgbmVlZHMgdG8gYmUgdHVybmVkCisJICogYmFjayBvbiBvciBub3QuCisJICovCisJaWYgKERCQ1JfQUNUSVZFX0VWRU5UUyhjdXJyZW50LT50aHJlYWQuZGJjcjAsIGN1cnJlbnQtPnRocmVhZC5kYmNyMSkpCisJCXJlZ3MtPm1zciB8PSBNU1JfREU7CisJZWxzZQorCQkvKiBNYWtlIHN1cmUgdGhlIElETSBmbGFnIGlzIG9mZiAqLworCQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lETTsKKworCWlmIChjaGFuZ2VkICYgMHgwMSkKKwkJbXRzcHIoU1BSTl9EQkNSMCwgY3VycmVudC0+dGhyZWFkLmRiY3IwKTsKK30KIAogdm9pZCBfX2twcm9iZXMgRGVidWdFeGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZGVidWdfc3RhdHVzKQogeworCWN1cnJlbnQtPnRocmVhZC5kYnNyID0gZGVidWdfc3RhdHVzOworCiAJLyogSGFjayBhbGVydDogT24gQm9va0UsIEJyYW5jaCBUYWtlbiBzdG9wcyBvbiB0aGUgYnJhbmNoIGl0c2VsZiwgd2hpbGUKIAkgKiBvbiBzZXJ2ZXIsIGl0IHN0b3BzIG9uIHRoZSB0YXJnZXQgb2YgdGhlIGJyYW5jaC4gSW4gb3JkZXIgdG8gc2ltdWxhdGUKIAkgKiB0aGUgc2VydmVyIGJlaGF2aW91ciwgd2UgdGh1cyByZXN0YXJ0IHJpZ2h0IGF3YXkgd2l0aCBhIHNpbmdsZSBzdGVwCkBAIC0xMDcxLDI5ICsxMTM5LDIzIEBACiAJCWlmIChkZWJ1Z2dlcl9zc3RlcChyZWdzKSkKIAkJCXJldHVybjsKIAotCQlpZiAodXNlcl9tb2RlKHJlZ3MpKQotCQkJY3VycmVudC0+dGhyZWFkLmRiY3IwICY9IH4oREJDUjBfSUMpOworCQlpZiAodXNlcl9tb2RlKHJlZ3MpKSB7CisJCQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lDOworI2lmZGVmIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MKKwkJCWlmIChEQkNSX0FDVElWRV9FVkVOVFMoY3VycmVudC0+dGhyZWFkLmRiY3IwLAorCQkJCQkgICAgICAgY3VycmVudC0+dGhyZWFkLmRiY3IxKSkKKwkJCQlyZWdzLT5tc3IgfD0gTVNSX0RFOworCQkJZWxzZQorCQkJCS8qIE1ha2Ugc3VyZSB0aGUgSURNIGJpdCBpcyBvZmYgKi8KKwkJCQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lETTsKKyNlbmRpZgorCQl9CiAKIAkJX2V4Y2VwdGlvbihTSUdUUkFQLCByZWdzLCBUUkFQX1RSQUNFLCByZWdzLT5uaXApOwotCX0gZWxzZSBpZiAoZGVidWdfc3RhdHVzICYgKERCU1JfREFDMVIgfCBEQlNSX0RBQzFXKSkgewotCQlyZWdzLT5tc3IgJj0gfk1TUl9ERTsKLQotCQlpZiAodXNlcl9tb2RlKHJlZ3MpKSB7Ci0JCQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfihEQlNSX0RBQzFSIHwgREJTUl9EQUMxVyB8Ci0JCQkJCQkJCURCQ1IwX0lETSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBEaXNhYmxlIERBQyBpbnRlcnVwdHMgKi8KLQkJCW10c3ByKFNQUk5fREJDUjAsIG1mc3ByKFNQUk5fREJDUjApICYgfihEQlNSX0RBQzFSIHwKLQkJCQkJCURCU1JfREFDMVcgfCBEQkNSMF9JRE0pKTsKLQotCQkJLyogQ2xlYXIgdGhlIERBQyBldmVudCAqLwotCQkJbXRzcHIoU1BSTl9EQlNSLCAoREJTUl9EQUMxUiB8IERCU1JfREFDMVcpKTsKLQkJfQotCQkvKiBTZXR1cCBhbmQgc2VuZCB0aGUgdHJhcCB0byB0aGUgaGFuZGxlciAqLwotCQlkb19kYWJyKHJlZ3MsIG1mc3ByKFNQUk5fREFDMSksIGRlYnVnX3N0YXR1cyk7Ci0JfQorCX0gZWxzZQorCQloYW5kbGVfZGVidWcocmVncywgZGVidWdfc3RhdHVzKTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfNHh4IHx8IENPTkZJR19CT09LRSAqLworI2VuZGlmIC8qIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KIAogI2lmICFkZWZpbmVkKENPTkZJR19UQVVfSU5UKQogdm9pZCBUQVVFeGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMgYi9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMKaW5kZXggZTY4YmVhYy4uNGQ0ZWViOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9jb3B5cGFnZV82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvY29weXBhZ2VfNjQuUwpAQCAtNDMsNjIgKzQzLDYyIEBACiAJbGQJcjcsMTYocjQpCiAJbGR1CXI4LDI0KHI0KQogMToJc3RkCXI1LDgocjMpCi0JbGQJcjksOChyNCkKIAlzdGQJcjYsMTYocjMpCisJbGQJcjksOChyNCkKIAlsZAlyMTAsMTYocjQpCiAJc3RkCXI3LDI0KHIzKQotCWxkCXIxMSwyNChyNCkKIAlzdGQJcjgsMzIocjMpCisJbGQJcjExLDI0KHI0KQogCWxkCXIxMiwzMihyNCkKIAlzdGQJcjksNDAocjMpCi0JbGQJcjUsNDAocjQpCiAJc3RkCXIxMCw0OChyMykKKwlsZAlyNSw0MChyNCkKIAlsZAlyNiw0OChyNCkKIAlzdGQJcjExLDU2KHIzKQotCWxkCXI3LDU2KHI0KQogCXN0ZAlyMTIsNjQocjMpCisJbGQJcjcsNTYocjQpCiAJbGQJcjgsNjQocjQpCiAJc3RkCXI1LDcyKHIzKQotCWxkCXI5LDcyKHI0KQogCXN0ZAlyNiw4MChyMykKKwlsZAlyOSw3MihyNCkKIAlsZAlyMTAsODAocjQpCiAJc3RkCXI3LDg4KHIzKQotCWxkCXIxMSw4OChyNCkKIAlzdGQJcjgsOTYocjMpCisJbGQJcjExLDg4KHI0KQogCWxkCXIxMiw5NihyNCkKIAlzdGQJcjksMTA0KHIzKQotCWxkCXI1LDEwNChyNCkKIAlzdGQJcjEwLDExMihyMykKKwlsZAlyNSwxMDQocjQpCiAJbGQJcjYsMTEyKHI0KQogCXN0ZAlyMTEsMTIwKHIzKQotCWxkCXI3LDEyMChyNCkKIAlzdGR1CXIxMiwxMjgocjMpCisJbGQJcjcsMTIwKHI0KQogCWxkdQlyOCwxMjgocjQpCiAJYmRuegkxYgogCiAJc3RkCXI1LDgocjMpCi0JbGQJcjksOChyNCkKIAlzdGQJcjYsMTYocjMpCisJbGQJcjksOChyNCkKIAlsZAlyMTAsMTYocjQpCiAJc3RkCXI3LDI0KHIzKQotCWxkCXIxMSwyNChyNCkKIAlzdGQJcjgsMzIocjMpCisJbGQJcjExLDI0KHI0KQogCWxkCXIxMiwzMihyNCkKIAlzdGQJcjksNDAocjMpCi0JbGQJcjUsNDAocjQpCiAJc3RkCXIxMCw0OChyMykKKwlsZAlyNSw0MChyNCkKIAlsZAlyNiw0OChyNCkKIAlzdGQJcjExLDU2KHIzKQotCWxkCXI3LDU2KHI0KQogCXN0ZAlyMTIsNjQocjMpCisJbGQJcjcsNTYocjQpCiAJbGQJcjgsNjQocjQpCiAJc3RkCXI1LDcyKHIzKQotCWxkCXI5LDcyKHI0KQogCXN0ZAlyNiw4MChyMykKKwlsZAlyOSw3MihyNCkKIAlsZAlyMTAsODAocjQpCiAJc3RkCXI3LDg4KHIzKQotCWxkCXIxMSw4OChyNCkKIAlzdGQJcjgsOTYocjMpCisJbGQJcjExLDg4KHI0KQogCWxkCXIxMiw5NihyNCkKIAlzdGQJcjksMTA0KHIzKQogCXN0ZAlyMTAsMTEyKHIzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9jb3B5dXNlcl82NC5TIGIvYXJjaC9wb3dlcnBjL2xpYi9jb3B5dXNlcl82NC5TCmluZGV4IDY5M2IxNGEuLjU3OGI2MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvY29weXVzZXJfNjQuUworKysgYi9hcmNoL3Bvd2VycGMvbGliL2NvcHl1c2VyXzY0LlMKQEAgLTQ0LDM3ICs0NCw1NSBAQAogCWFuZGkuCXIwLHI0LDcKIAlibmUJLkxzcmNfdW5hbGlnbmVkCiBFTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9VTkFMSUdORURfTERfU1REKQotCXNyZGkJcjcscjUsNAotMjA6CWxkCXI5LDAocjQpCi0JYWRkaQlyNCxyNCwtOAotCW10Y3RyCXI3Ci0JYW5kaS4JcjUscjUsNwotCWJmCWNyNyo0KzAsMjJmCi0JYWRkaQlyMyxyMyw4Ci0JYWRkaQlyNCxyNCw4Ci0JbXIJcjgscjkKLQlibHQJY3IxLDcyZgotMjE6CWxkCXI5LDgocjQpCi03MDoJc3RkCXI4LDgocjMpCi0yMjoJbGR1CXI4LDE2KHI0KQotNzE6CXN0ZHUJcjksMTYocjMpCi0JYmRuegkyMWIKLTcyOglzdGQJcjgsOChyMykKLQliZXErCTNmCisJYmx0CWNyMSwuTGRvX3RhaWwJCS8qIGlmIDwgMTYgYnl0ZXMgdG8gY29weSAqLworCXNyZGkJcjAscjUsNQorCWNtcGRpCWNyMSxyMCwwCisyMDoJbGQJcjcsMChyNCkKKzIyMDoJbGQJcjYsOChyNCkKKwlhZGRpCXI0LHI0LDE2CisJbXRjdHIJcjAKKwlhbmRpLglyMCxyNSwweDEwCisJYmVxCTIyZgogCWFkZGkJcjMscjMsMTYKKwlhZGRpCXI0LHI0LC0xNgorCW1yCXI5LHI3CisJbXIJcjgscjYKKwliZXEJY3IxLDcyZgorMjE6CWxkCXI3LDE2KHI0KQorMjIxOglsZAlyNiwyNChyNCkKKwlhZGRpCXI0LHI0LDMyCis3MDoJc3RkCXI5LDAocjMpCisyNzA6CXN0ZAlyOCw4KHIzKQorMjI6CWxkCXI5LDAocjQpCisyMjI6CWxkCXI4LDgocjQpCis3MToJc3RkCXI3LDE2KHIzKQorMjcxOglzdGQJcjYsMjQocjMpCisJYWRkaQlyMyxyMywzMgorCWJkbnoJMjFiCis3MjoJc3RkCXI5LDAocjMpCisyNzI6CXN0ZAlyOCw4KHIzKQorCWFuZGkuCXI1LHI1LDB4ZgorCWJlcSsJM2YKKwlhZGRpCXI0LHI0LDE2CiAuTGRvX3RhaWw6Ci0JYmYJY3I3KjQrMSwxZgotMjM6CWx3eglyOSw4KHI0KQorCWFkZGkJcjMscjMsMTYKKwliZgljcjcqNCswLDI0NmYKKzI0NDoJbGQJcjksMChyNCkKKwlhZGRpCXI0LHI0LDgKKzI0NToJc3RkCXI5LDAocjMpCisJYWRkaQlyMyxyMyw4CisyNDY6CWJmCWNyNyo0KzEsMWYKKzIzOglsd3oJcjksMChyNCkKIAlhZGRpCXI0LHI0LDQKIDczOglzdHcJcjksMChyMykKIAlhZGRpCXIzLHIzLDQKIDE6CWJmCWNyNyo0KzIsMmYKLTQ0OglsaHoJcjksOChyNCkKKzQ0OglsaHoJcjksMChyNCkKIAlhZGRpCXI0LHI0LDIKIDc0OglzdGgJcjksMChyMykKIAlhZGRpCXIzLHIzLDIKIDI6CWJmCWNyNyo0KzMsM2YKLTQ1OglsYnoJcjksOChyNCkKKzQ1OglsYnoJcjksMChyNCkKIDc1OglzdGIJcjksMChyMykKIDM6CWxpCXIzLDAKIAlibHIKQEAgLTIyMCw3ICsyMzgsOSBAQAogMTMxOgogCWFkZGkJcjMscjMsOAogMTIwOgorMzIwOgogMTIyOgorMzIyOgogMTI0OgogMTI1OgogMTI2OgpAQCAtMjI5LDkgKzI0OSwxMSBAQAogMTI5OgogMTMzOgogCWFkZGkJcjMscjMsOAotMTIxOgogMTMyOgogCWFkZGkJcjMscjMsOAorMTIxOgorMzIxOgorMzQ0OgogMTM0OgogMTM1OgogMTM4OgpAQCAtMzAzLDE4ICszMjUsMjIgQEAKIDE4MzoKIAlhZGQJcjMscjMscjcKIAliCTFmCiszNzE6CiAxODA6CiAJYWRkaQlyMyxyMyw4CiAxNzE6CiAxNzc6CiAJYWRkaQlyMyxyMyw4Ci0xNzA6Ci0xNzI6CiszNzA6CiszNzI6CiAxNzY6CiAxNzg6CiAJYWRkaQlyMyxyMyw0CiAxODU6CiAJYWRkaQlyMyxyMyw0CisxNzA6CisxNzI6CiszNDU6CiAxNzM6CiAxNzQ6CiAxNzU6CkBAIC0zNDEsMTEgKzM2NywxOSBAQAogCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCiAJLmFsaWduCTMKIAkubGxvbmcJMjBiLDEyMGIKKwkubGxvbmcJMjIwYiwzMjBiCiAJLmxsb25nCTIxYiwxMjFiCisJLmxsb25nCTIyMWIsMzIxYgogCS5sbG9uZwk3MGIsMTcwYgorCS5sbG9uZwkyNzBiLDM3MGIKIAkubGxvbmcJMjJiLDEyMmIKKwkubGxvbmcJMjIyYiwzMjJiCiAJLmxsb25nCTcxYiwxNzFiCisJLmxsb25nCTI3MWIsMzcxYgogCS5sbG9uZwk3MmIsMTcyYgorCS5sbG9uZwkyNzJiLDM3MmIKKwkubGxvbmcJMjQ0YiwzNDRiCisJLmxsb25nCTI0NWIsMzQ1YgogCS5sbG9uZwkyM2IsMTIzYgogCS5sbG9uZwk3M2IsMTczYgogCS5sbG9uZwk0NGIsMTQ0YgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9mZWF0dXJlLWZpeHVwcy5jIGIvYXJjaC9wb3dlcnBjL2xpYi9mZWF0dXJlLWZpeHVwcy5jCmluZGV4IDdlODg2NWIuLmU2NDAxNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvZmVhdHVyZS1maXh1cHMuYworKysgYi9hcmNoL3Bvd2VycGMvbGliL2ZlYXR1cmUtZml4dXBzLmMKQEAgLTExMiw3ICsxMTIsOCBAQAogCiB2b2lkIGRvX2x3c3luY19maXh1cHModW5zaWduZWQgbG9uZyB2YWx1ZSwgdm9pZCAqZml4dXBfc3RhcnQsIHZvaWQgKmZpeHVwX2VuZCkKIHsKLQl1bnNpZ25lZCBpbnQgKnN0YXJ0LCAqZW5kLCAqZGVzdDsKKwlsb25nICpzdGFydCwgKmVuZDsKKwl1bnNpZ25lZCBpbnQgKmRlc3Q7CiAKIAlpZiAoISh2YWx1ZSAmIENQVV9GVFJfTFdTWU5DKSkKIAkJcmV0dXJuIDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS80MHhfbW11LmMgYi9hcmNoL3Bvd2VycGMvbW0vNDB4X21tdS5jCmluZGV4IDA4ZGZhOGUuLjY1YWJmY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS80MHhfbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tLzQweF9tbXUuYwpAQCAtODQsOCArODQsOCBAQAogCSAqIHZlY3RvcnMgYW5kIHRoZSBrZXJuZWwgbGl2ZSBpbiByZWFsLW1vZGUuCiAJICovCiAKLSAgICAgICAgbXRzcHIoU1BSTl9EQ0NSLCAweEYwMDAwMDAwKTsJLyogNTEyIE1CIG9mIGRhdGEgc3BhY2UgYXQgMHgwLiAqLwotICAgICAgICBtdHNwcihTUFJOX0lDQ1IsIDB4RjAwMDAwMDApOwkvKiA1MTIgTUIgb2YgaW5zdHIuIHNwYWNlIGF0IDB4MC4gKi8KKyAgICAgICAgbXRzcHIoU1BSTl9EQ0NSLCAweEZGRkYwMDAwKTsJLyogMkdCeXRlIG9mIGRhdGEgc3BhY2UgYXQgMHgwLiAqLworICAgICAgICBtdHNwcihTUFJOX0lDQ1IsIDB4RkZGRjAwMDApOwkvKiAyR0J5dGUgb2YgaW5zdHIuIHNwYWNlIGF0IDB4MC4gKi8KIH0KIAogI2RlZmluZSBMQVJHRV9QQUdFX1NJWkVfMTZNCSgxPDwyNCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX25hdGl2ZV82NC5jIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfbmF0aXZlXzY0LmMKaW5kZXggMDU2ZDIzYS4uNzg0YTQwMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfbmF0aXZlXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfbmF0aXZlXzY0LmMKQEAgLTM3LDcgKzM3LDcgQEAKIAogI2RlZmluZSBIUFRFX0xPQ0tfQklUIDMKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhuYXRpdmVfdGxiaWVfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhuYXRpdmVfdGxiaWVfbG9jayk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYmllKHVuc2lnbmVkIGxvbmcgdmEsIGludCBwc2l6ZSwgaW50IHNzaXplKQogewpAQCAtMTA0LDcgKzEwNCw3IEBACiAJaWYgKHVzZV9sb2NhbCkKIAkJdXNlX2xvY2FsID0gbW11X3BzaXplX2RlZnNbcHNpemVdLnRsYmllbDsKIAlpZiAobG9ja190bGJpZSAmJiAhdXNlX2xvY2FsKQotCQlzcGluX2xvY2soJm5hdGl2ZV90bGJpZV9sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmbmF0aXZlX3RsYmllX2xvY2spOwogCWFzbSB2b2xhdGlsZSgicHRlc3luYyI6IDogOiJtZW1vcnkiKTsKIAlpZiAodXNlX2xvY2FsKSB7CiAJCV9fdGxiaWVsKHZhLCBwc2l6ZSwgc3NpemUpOwpAQCAtMTE0LDcgKzExNCw3IEBACiAJCWFzbSB2b2xhdGlsZSgiZWllaW87IHRsYnN5bmM7IHB0ZXN5bmMiOiA6IDoibWVtb3J5Iik7CiAJfQogCWlmIChsb2NrX3RsYmllICYmICF1c2VfbG9jYWwpCi0JCXNwaW5fdW5sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmbmF0aXZlX3RsYmllX2xvY2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX2xvY2tfaHB0ZShzdHJ1Y3QgaGFzaF9wdGUgKmhwdGVwKQpAQCAtMTIyLDcgKzEyMiw3IEBACiAJdW5zaWduZWQgbG9uZyAqd29yZCA9ICZocHRlcC0+djsKIAogCXdoaWxlICgxKSB7Ci0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChIUFRFX0xPQ0tfQklULCB3b3JkKSkKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0X2xvY2soSFBURV9MT0NLX0JJVCwgd29yZCkpCiAJCQlicmVhazsKIAkJd2hpbGUodGVzdF9iaXQoSFBURV9MT0NLX0JJVCwgd29yZCkpCiAJCQljcHVfcmVsYXgoKTsKQEAgLTEzMyw4ICsxMzMsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgKndvcmQgPSAmaHB0ZXAtPnY7CiAKLQlhc20gdm9sYXRpbGUoImx3c3luYyI6OjoibWVtb3J5Iik7Ci0JY2xlYXJfYml0KEhQVEVfTE9DS19CSVQsIHdvcmQpOworCWNsZWFyX2JpdF91bmxvY2soSFBURV9MT0NLX0JJVCwgd29yZCk7CiB9CiAKIHN0YXRpYyBsb25nIG5hdGl2ZV9ocHRlX2luc2VydCh1bnNpZ25lZCBsb25nIGhwdGVfZ3JvdXAsIHVuc2lnbmVkIGxvbmcgdmEsCkBAIC00MzQsNyArNDMzLDcgQEAKIAkvKiB3ZSB0YWtlIHRoZSB0bGJpZSBsb2NrIGFuZCBob2xkIGl0LiAgU29tZSBoYXJkd2FyZSB3aWxsCiAJICogZGVhZGxvY2sgaWYgd2UgdHJ5IHRvIHRsYmllIGZyb20gdHdvIHByb2Nlc3NvcnMgYXQgb25jZS4KIAkgKi8KLQlzcGluX2xvY2soJm5hdGl2ZV90bGJpZV9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CiAKIAlzbG90cyA9IHB0ZWdfY291bnQgKiBIUFRFU19QRVJfR1JPVVA7CiAKQEAgLTQ1OCw3ICs0NTcsNyBAQAogCX0KIAogCWFzbSB2b2xhdGlsZSgiZWllaW87IHRsYnN5bmM7IHB0ZXN5bmMiOjo6Im1lbW9yeSIpOwotCXNwaW5fdW5sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC01MjEsNyArNTIwLDcgQEAKIAkJaW50IGxvY2tfdGxiaWUgPSAhY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfTE9DS0xFU1NfVExCSUUpOwogCiAJCWlmIChsb2NrX3RsYmllKQotCQkJc3Bpbl9sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CisJCQlyYXdfc3Bpbl9sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CiAKIAkJYXNtIHZvbGF0aWxlKCJwdGVzeW5jIjo6OiJtZW1vcnkiKTsKIAkJZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7CkBAIC01MzYsNyArNTM1LDcgQEAKIAkJYXNtIHZvbGF0aWxlKCJlaWVpbzsgdGxic3luYzsgcHRlc3luYyI6OjoibWVtb3J5Iik7CiAKIAkJaWYgKGxvY2tfdGxiaWUpCi0JCQlzcGluX3VubG9jaygmbmF0aXZlX3RsYmllX2xvY2spOworCQkJcmF3X3NwaW5fdW5sb2NrKCZuYXRpdmVfdGxiaWVfbG9jayk7CiAJfQogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21lbS5jIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCmluZGV4IGI5YjE1MjUuLjMxMTIyNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKQEAgLTQ5NCwxMyArNDk0LDEzIEBACiAgKiBUaGlzIG11c3QgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIHRoZSBwdGUgbG9jayBoZWxkLgogICovCiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJICAgICAgcHRlX3QgcHRlKQorCQkgICAgICBwdGVfdCAqcHRlcCkKIHsKICNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVUKIAl1bnNpZ25lZCBsb25nIGFjY2VzcyA9IDAsIHRyYXA7CiAKIAkvKiBXZSBvbmx5IHdhbnQgSFBURXMgZm9yIGxpbnV4IFBURXMgdGhhdCBoYXZlIF9QQUdFX0FDQ0VTU0VEIHNldCAqLwotCWlmICghcHRlX3lvdW5nKHB0ZSkgfHwgYWRkcmVzcyA+PSBUQVNLX1NJWkUpCisJaWYgKCFwdGVfeW91bmcoKnB0ZXApIHx8IGFkZHJlc3MgPj0gVEFTS19TSVpFKQogCQlyZXR1cm47CiAKIAkvKiBXZSB0cnkgdG8gZmlndXJlIG91dCBpZiB3ZSBhcmUgY29taW5nIGZyb20gYW4gaW5zdHJ1Y3Rpb24KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9oYXNoNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9oYXNoNjQuYwppbmRleCBiOTEwZDM3Li41MTYyMmRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfaGFzaDY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X2hhc2g2NC5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobW11X2NvbnRleHRfbG9jayk7Ci1zdGF0aWMgREVGSU5FX0lEUihtbXVfY29udGV4dF9pZHIpOworc3RhdGljIERFRklORV9JREEobW11X2NvbnRleHRfaWRhKTsKIAogLyoKICAqIFRoZSBwcm90by1WU0lEIHNwYWNlIGhhcyAyXjM1IC0gMSBzZWdtZW50cyBhdmFpbGFibGUgZm9yIHVzZXIgbWFwcGluZ3MuCkBAIC0zOSwxMSArMzksMTEgQEAKIAlpbnQgZXJyOwogCiBhZ2FpbjoKLQlpZiAoIWlkcl9wcmVfZ2V0KCZtbXVfY29udGV4dF9pZHIsIEdGUF9LRVJORUwpKQorCWlmICghaWRhX3ByZV9nZXQoJm1tdV9jb250ZXh0X2lkYSwgR0ZQX0tFUk5FTCkpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJc3Bpbl9sb2NrKCZtbXVfY29udGV4dF9sb2NrKTsKLQllcnIgPSBpZHJfZ2V0X25ld19hYm92ZSgmbW11X2NvbnRleHRfaWRyLCBOVUxMLCAxLCAmaW5kZXgpOworCWVyciA9IGlkYV9nZXRfbmV3X2Fib3ZlKCZtbXVfY29udGV4dF9pZGEsIDEsICZpbmRleCk7CiAJc3Bpbl91bmxvY2soJm1tdV9jb250ZXh0X2xvY2spOwogCiAJaWYgKGVyciA9PSAtRUFHQUlOKQpAQCAtNTMsNyArNTMsNyBAQAogCiAJaWYgKGluZGV4ID4gTUFYX0NPTlRFWFQpIHsKIAkJc3Bpbl9sb2NrKCZtbXVfY29udGV4dF9sb2NrKTsKLQkJaWRyX3JlbW92ZSgmbW11X2NvbnRleHRfaWRyLCBpbmRleCk7CisJCWlkYV9yZW1vdmUoJm1tdV9jb250ZXh0X2lkYSwgaW5kZXgpOwogCQlzcGluX3VubG9jaygmbW11X2NvbnRleHRfbG9jayk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTg1LDcgKzg1LDcgQEAKIHZvaWQgX19kZXN0cm95X2NvbnRleHQoaW50IGNvbnRleHRfaWQpCiB7CiAJc3Bpbl9sb2NrKCZtbXVfY29udGV4dF9sb2NrKTsKLQlpZHJfcmVtb3ZlKCZtbXVfY29udGV4dF9pZHIsIGNvbnRleHRfaWQpOworCWlkYV9yZW1vdmUoJm1tdV9jb250ZXh0X2lkYSwgY29udGV4dF9pZCk7CiAJc3Bpbl91bmxvY2soJm1tdV9jb250ZXh0X2xvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19kZXN0cm95X2NvbnRleHQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCmluZGV4IDEwNDRhNjMuLmRiYzY5MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKQEAgLTU2LDcgKzU2LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nICpjb250ZXh0X21hcDsKIHN0YXRpYyB1bnNpZ25lZCBsb25nICpzdGFsZV9tYXBbTlJfQ1BVU107CiBzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqKmNvbnRleHRfbW07Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbnRleHRfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhjb250ZXh0X2xvY2spOwogCiAjZGVmaW5lIENUWF9NQVBfU0laRQlcCiAJKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIChsYXN0X2NvbnRleHQgLyBCSVRTX1BFUl9MT05HICsgMSkpCkBAIC0xMjEsOSArMTIxLDkgQEAKIAkvKiBUaGlzIHdpbGwgaGFwcGVuIGlmIHlvdSBoYXZlIG1vcmUgQ1BVcyB0aGFuIGF2YWlsYWJsZSBjb250ZXh0cywKIAkgKiBhbGwgd2UgY2FuIGRvIGhlcmUgaXMgd2FpdCBhIGJpdCBhbmQgdHJ5IGFnYWluCiAJICovCi0Jc3Bpbl91bmxvY2soJmNvbnRleHRfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZjb250ZXh0X2xvY2spOwogCWNwdV9yZWxheCgpOwotCXNwaW5fbG9jaygmY29udGV4dF9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZjb250ZXh0X2xvY2spOwogCiAJLyogVGhpcyB3aWxsIGNhdXNlIHRoZSBjYWxsZXIgdG8gdHJ5IGFnYWluICovCiAJcmV0dXJuIE1NVV9OT19DT05URVhUOwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJdW5zaWduZWQgbG9uZyAqbWFwOwogCiAJLyogTm8gbG9ja2xlc3MgZmFzdCBwYXRoIC4uIHlldCAqLwotCXNwaW5fbG9jaygmY29udGV4dF9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZjb250ZXh0X2xvY2spOwogCiAJcHJfaGFyZCgiWyVkXSBhY3RpdmF0aW5nIGNvbnRleHQgZm9yIG1tIEAlcCwgYWN0aXZlPSVkLCBpZD0lZCIsCiAJCWNwdSwgbmV4dCwgbmV4dC0+Y29udGV4dC5hY3RpdmUsIG5leHQtPmNvbnRleHQuaWQpOwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJLyogRmxpY2sgdGhlIE1NVSBhbmQgcmVsZWFzZSBsb2NrICovCiAJcHJfaGFyZGNvbnQoIiAtPiAlZFxuIiwgaWQpOwogCXNldF9jb250ZXh0KGlkLCBuZXh0LT5wZ2QpOwotCXNwaW5fdW5sb2NrKCZjb250ZXh0X2xvY2spOworCXJhd19zcGluX3VubG9jaygmY29udGV4dF9sb2NrKTsKIH0KIAogLyoKQEAgLTMwNyw3ICszMDcsNyBAQAogCiAJV0FSTl9PTihtbS0+Y29udGV4dC5hY3RpdmUgIT0gMCk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY29udGV4dF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZjb250ZXh0X2xvY2ssIGZsYWdzKTsKIAlpZCA9IG1tLT5jb250ZXh0LmlkOwogCWlmIChpZCAhPSBNTVVfTk9fQ09OVEVYVCkgewogCQlfX2NsZWFyX2JpdChpZCwgY29udGV4dF9tYXApOwpAQCAtMzE4LDcgKzMxOCw3IEBACiAJCWNvbnRleHRfbW1baWRdID0gTlVMTDsKIAkJbnJfZnJlZV9jb250ZXh0cysrOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb250ZXh0X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29udGV4dF9sb2NrLCBmbGFncyk7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCmluZGV4IGYyODgyNzkuLjhiMDRjNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCisrKyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBMb3cgbGV2ZSBUTEIgbWlzcyBoYW5kbGVycyBmb3IgQm9vazNFCisgKiAgTG93IGxldmVsIFRMQiBtaXNzIGhhbmRsZXJzIGZvciBCb29rM0UKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkKICAqICAgICAgQmVuLiBIZXJyZW5zY2htaWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpLCBJQk0gQ29ycC4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaC5jCmluZGV4IDJmYmM2ODAuLmU4MWQ1ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2guYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAgKi8KICNpZmRlZiBDT05GSUdfU01QCiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGxiaXZheF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHRsYml2YXhfbG9jayk7CiAKIHN0YXRpYyBpbnQgbW1faXNfY29yZV9sb2NhbChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKQEAgLTIzMiwxMCArMjMyLDEwIEBACiAJCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9VU0VfVExCSVZBWF9CQ0FTVCkpIHsKIAkJCWludCBsb2NrID0gbW11X2hhc19mZWF0dXJlKE1NVV9GVFJfTE9DS19CQ0FTVF9JTlZBTCk7CiAJCQlpZiAobG9jaykKLQkJCQlzcGluX2xvY2soJnRsYml2YXhfbG9jayk7CisJCQkJcmF3X3NwaW5fbG9jaygmdGxiaXZheF9sb2NrKTsKIAkJCV90bGJpdmF4X2JjYXN0KHZtYWRkciwgcGlkLCB0c2l6ZSwgaW5kKTsKIAkJCWlmIChsb2NrKQotCQkJCXNwaW5fdW5sb2NrKCZ0bGJpdmF4X2xvY2spOworCQkJCXJhd19zcGluX3VubG9jaygmdGxiaXZheF9sb2NrKTsKIAkJCWdvdG8gYmFpbDsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCB0bGJfZmx1c2hfcGFyYW0gcCA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9jbG9jay5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L2Nsb2NrLmMKaW5kZXggODQ1NDRkMC4uNGM0MjI0NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L2Nsb2NrLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L2Nsb2NrLmMKQEAgLTY5OCw4ICs2OTgsNyBAQAogCS5jbGtfZ2V0X3BhcmVudAkJPSBOVUxMLAogfTsKIAotc3RhdGljIGludAotbXBjNTEyMV9jbGtfaW5pdCh2b2lkKQoraW50IF9faW5pdCBtcGM1MTIxX2Nsa19pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKIApAQCAtNzI0LDYgKzcyMywzIEBACiAJY2xrX2Z1bmN0aW9ucyA9IG1wYzUxMjFfY2xrX2Z1bmN0aW9uczsKIAlyZXR1cm4gMDsKIH0KLQotCi1hcmNoX2luaXRjYWxsKG1wYzUxMjFfY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHMuYwppbmRleCA0NDFhYmM0Li5lZTZhZTEyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHMuYwpAQCAtNjQsOCArNjQsOSBAQAogCS5uYW1lCQkJPSAiTVBDNTEyMSBBRFMiLAogCS5wcm9iZQkJCT0gbXBjNTEyMV9hZHNfcHJvYmUsCiAJLnNldHVwX2FyY2gJCT0gbXBjNTEyMV9hZHNfc2V0dXBfYXJjaCwKLQkuaW5pdAkJCT0gbXBjNTEyeF9kZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMsCisJLmluaXQJCQk9IG1wYzUxMnhfaW5pdCwKIAkuaW5pdF9JUlEJCT0gbXBjNTEyMV9hZHNfaW5pdF9JUlEsCiAJLmdldF9pcnEJCT0gaXBpY19nZXRfaXJxLAogCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorCS5yZXN0YXJ0CQk9IG1wYzUxMnhfcmVzdGFydCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHNfY3BsZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzX2NwbGQuYwppbmRleCBkYTliMjBhLi40ZWNmNGNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHNfY3BsZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkc19jcGxkLmMKQEAgLTc5LDcgKzc5LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjcGxkX3BpYyA9IHsKLQkubmFtZSA9ICIgQ1BMRCBQSUMgIiwKKwkubmFtZSA9ICJDUExEIFBJQyIsCiAJLm1hc2sgPSBjcGxkX21hc2tfaXJxLAogCS5hY2sgPSBjcGxkX21hc2tfaXJxLAogCS51bm1hc2sgPSBjcGxkX3VubWFza19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9nZW5lcmljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9nZW5lcmljLmMKaW5kZXggMjQ3OWRlOS4uYTZjMGUzYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfZ2VuZXJpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2dlbmVyaWMuYwpAQCAtNTEsOCArNTEsOSBAQAogZGVmaW5lX21hY2hpbmUobXBjNTEyMV9nZW5lcmljKSB7CiAJLm5hbWUJCQk9ICJNUEM1MTIxIGdlbmVyaWMiLAogCS5wcm9iZQkJCT0gbXBjNTEyMV9nZW5lcmljX3Byb2JlLAotCS5pbml0CQkJPSBtcGM1MTJ4X2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcywKKwkuaW5pdAkJCT0gbXBjNTEyeF9pbml0LAogCS5pbml0X0lSUQkJPSBtcGM1MTJ4X2luaXRfSVJRLAogCS5nZXRfaXJxCQk9IGlwaWNfZ2V0X2lycSwKIAkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucmVzdGFydAkJPSBtcGM1MTJ4X3Jlc3RhcnQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnguaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTJ4LmgKaW5kZXggMjJhNTM1Mi4uYjJkYWNhMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnguaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeC5oCkBAIC0xMiw1ICsxMiw4IEBACiAjaWZuZGVmIF9fTVBDNTEyWF9IX18KICNkZWZpbmUgX19NUEM1MTJYX0hfXwogZXh0ZXJuIHZvaWQgX19pbml0IG1wYzUxMnhfaW5pdF9JUlEodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgbXBjNTEyeF9pbml0KHZvaWQpOworZXh0ZXJuIGludCBfX2luaXQgbXBjNTEyMV9jbGtfaW5pdCh2b2lkKTsKIHZvaWQgX19pbml0IG1wYzUxMnhfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpOworZXh0ZXJuIHZvaWQgbXBjNTEyeF9yZXN0YXJ0KGNoYXIgKmNtZCk7CiAjZW5kaWYJCQkJLyogX19NUEM1MTJYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMnhfc2hhcmVkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeF9zaGFyZWQuYwppbmRleCA0MzRkNjgzLi5iN2Y1MThhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeF9zaGFyZWQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyeF9zaGFyZWQuYwpAQCAtMjEsOSArMjEsMzggQEAKICNpbmNsdWRlIDxhc20vaXBpYy5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbXBjNTEyMS5oPgogCiAjaW5jbHVkZSAibXBjNTEyeC5oIgogCitzdGF0aWMgc3RydWN0IG1wYzUxMnhfcmVzZXRfbW9kdWxlIF9faW9tZW0gKnJlc2V0X21vZHVsZV9iYXNlOworCitzdGF0aWMgdm9pZCBfX2luaXQgbXBjNTEyeF9yZXN0YXJ0X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLG1wYzUxMjEtcmVzZXQiKTsKKwlpZiAoIW5wKQorCQlyZXR1cm47CisKKwlyZXNldF9tb2R1bGVfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKKwlvZl9ub2RlX3B1dChucCk7Cit9CisKK3ZvaWQgbXBjNTEyeF9yZXN0YXJ0KGNoYXIgKmNtZCkKK3sKKwlpZiAocmVzZXRfbW9kdWxlX2Jhc2UpIHsKKwkJLyogRW5hYmxlIHNvZnR3YXJlIHJlc2V0ICJSU1RFIiAqLworCQlvdXRfYmUzMigmcmVzZXRfbW9kdWxlX2Jhc2UtPnJwciwgMHg1MjUzNTQ0NSk7CisJCS8qIFNldCBzb2Z0d2FyZSBoYXJkIHJlc2V0ICovCisJCW91dF9iZTMyKCZyZXNldF9tb2R1bGVfYmFzZS0+cmNyLCAweDIpOworCX0gZWxzZSB7CisJCXByX2VycigiUmVzdGFydCBtb2R1bGUgbm90IG1hcHBlZC5cbiIpOworCX0KKwlmb3IgKDs7KQorCQk7Cit9CisKIHZvaWQgX19pbml0IG1wYzUxMnhfaW5pdF9JUlEodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwpAQCAtNTMsOCArODIsMjIgQEAKIAogdm9pZCBfX2luaXQgbXBjNTEyeF9kZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXModm9pZCkKIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCiAJaWYgKG9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBvZl9idXNfaWRzLCBOVUxMKSkKIAkJcHJpbnRrKEtFUk5fRVJSIF9fRklMRV9fICI6ICIKIAkJCSJFcnJvciB3aGlsZSBwcm9iaW5nIG9mX3BsYXRmb3JtIGJ1c1xuIik7CisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsbXBjNTEyMS1uZmMiKTsKKwlpZiAobnApIHsKKwkJb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgTlVMTCwgTlVMTCk7CisJCW9mX25vZGVfcHV0KG5wKTsKKwl9CiB9CiAKK3ZvaWQgX19pbml0IG1wYzUxMnhfaW5pdCh2b2lkKQoreworCW1wYzUxMnhfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKCk7CisJbXBjNTEyMV9jbGtfaW5pdCgpOworCW1wYzUxMnhfcmVzdGFydF9pbml0KCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCmluZGV4IGNjMjljMGYuLjA0ZDEwNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jCkBAIC0zMDIsMTEgKzMwMiwxNCBAQAogCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wscmFwaWRpby1kZWx0YSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1ndXRzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdwaW8tbGVkcyIsIH0sCiAJe30sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtcGM4NXh4X3B1Ymxpc2hfZGV2aWNlcyh2b2lkKQogeworCWlmIChtYWNoaW5lX2lzKG1wYzg1NjhfbWRzKSkKKwkJc2ltcGxlX2dwaW9jaGlwX2luaXQoImZzbCxtcGM4NTY4bWRzLWJjc3ItZ3BpbyIpOwogCWlmIChtYWNoaW5lX2lzKG1wYzg1NjlfbWRzKSkKIAkJc2ltcGxlX2dwaW9jaGlwX2luaXQoImZzbCxtcGM4NTY5bWRzLWJjc3ItZ3BpbyIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCmluZGV4IGU1ZGE1ZjYuLjQyZTg3ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCkBAIC0yMzIsNyArMjMyLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzb2NyYXRlc19mcGdhX3BpY19jaGlwID0gewotCS5uYW1lCQk9ICIgRlBHQS1QSUMgIiwKKwkubmFtZQkJPSAiRlBHQS1QSUMiLAogCS5hY2sJCT0gc29jcmF0ZXNfZnBnYV9waWNfYWNrLAogCS5tYXNrICAgICAgICAgICA9IHNvY3JhdGVzX2ZwZ2FfcGljX21hc2ssCiAJLm1hc2tfYWNrICAgICAgID0gc29jcmF0ZXNfZnBnYV9waWNfbWFza19hY2ssCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYwppbmRleCBmNTU5OTE4Li5iYzMzZDE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCXB2aWQgPSBtZnNwcihTUFJOX1BWUik7CiAJc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKIAotCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IFJQQyBFbGVjdHJvbmljcyBTVHggXG4iKTsKKwlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBSUEMgRWxlY3Ryb25pY3MgU1R4XG4iKTsKIAlzZXFfcHJpbnRmKG0sICJQVlJcdFx0OiAweCV4XG4iLCBwdmlkKTsKIAlzZXFfcHJpbnRmKG0sICJTVlJcdFx0OiAweCV4XG4iLCBzdmlkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3hlc19tcGM4NXh4LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgveGVzX21wYzg1eHguYwppbmRleCAxYjQyNjA1Li4wMTI1NjA0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgveGVzX21wYzg1eHguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgveGVzX21wYzg1eHguYwpAQCAtODAsOCArODAsOCBAQAogCXByaW50ayhLRVJOX0lORk8gInhlc19tcGM4NXh4OiBFbmFibGluZyBMMiBhcyBjYWNoZVxuIik7CiAKIAljdGwgPSBNUEM4NXh4X0wyQ1RMX0wyRSB8IE1QQzg1eHhfTDJDVExfTDJJOwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1QQzg1NDAiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1QQzg1NjAiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNUEM4NTQwIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNUEM4NTYwIikpCiAJCS8qCiAJCSAqIEFzc3VtZSBMMiBTUkFNIGlzIHVzZWQgZnVsbHkgZm9yIGNhY2hlLCBzbyBzZXQKIAkJICogTDJCTEtTWiAoYml0cyA0OjUpIHRvIG1hdGNoIEwyU0laIChiaXRzIDI6MykuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9odGFiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9odGFiLmMKaW5kZXggMzViMWVjNC4uMjUxNmMxYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaHRhYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2h0YWIuYwpAQCAtNDAsNyArNDAsNyBAQAogI2RlZmluZSBEQkdfTE9XKGZtdC4uLikgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYmVhdF9odGFiX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soYmVhdF9odGFiX2xvY2spOwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiZWF0X3JlYWRfbWFzayh1bnNpZ25lZCBocHRlX2dyb3VwKQogewpAQCAtMTE0LDE4ICsxMTQsMTggQEAKIAlpZiAocmZsYWdzICYgX1BBR0VfTk9fQ0FDSEUpCiAJCWhwdGVfciAmPSB+X1BBR0VfQ09IRVJFTlQ7CiAKLQlzcGluX2xvY2soJmJlYXRfaHRhYl9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZiZWF0X2h0YWJfbG9jayk7CiAJbHBhcl9yYyA9IGJlYXRfcmVhZF9tYXNrKGhwdGVfZ3JvdXApOwogCWlmIChscGFyX3JjID09IDApIHsKIAkJaWYgKCEodmZsYWdzICYgSFBURV9WX0JPTFRFRCkpCiAJCQlEQkdfTE9XKCIgZnVsbFxuIik7Ci0JCXNwaW5fdW5sb2NrKCZiZWF0X2h0YWJfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJbHBhcl9yYyA9IGJlYXRfaW5zZXJ0X2h0YWJfZW50cnkoMCwgaHB0ZV9ncm91cCwgbHBhcl9yYyA8PCA0OCwKIAkJaHB0ZV92LCBocHRlX3IsICZzbG90KTsKLQlzcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOworCXJhd19zcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOwogCiAJLyoKIAkgKiBTaW5jZSB3ZSB0cnkgYW5kIGlvcmVtYXAgUEhCcyB3ZSBkb24ndCBvd24sIHRoZSBwdGUgaW5zZXJ0CkBAIC0xOTgsMTcgKzE5OCwxNyBAQAogCQkiYXZwbnY9JTAxNmx4LCBzbG90PSUwMTZseCwgcHNpemU6ICVkLCBuZXdwcCAlMDE2bHggLi4uICIsCiAJCXdhbnRfdiAmIEhQVEVfVl9BVlBOLCBzbG90LCBwc2l6ZSwgbmV3cHApOwogCi0Jc3Bpbl9sb2NrKCZiZWF0X2h0YWJfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmYmVhdF9odGFiX2xvY2spOwogCWR1bW15MCA9IGJlYXRfbHBhcl9ocHRlX2dldHdvcmQwKHNsb3QpOwogCWlmICgoZHVtbXkwICYgfjB4N0ZVTCkgIT0gKHdhbnRfdiAmIH4weDdGVUwpKSB7CiAJCURCR19MT1coIm5vdCBmb3VuZCAhXG4iKTsKLQkJc3Bpbl91bmxvY2soJmJlYXRfaHRhYl9sb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZiZWF0X2h0YWJfbG9jayk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlscGFyX3JjID0gYmVhdF93cml0ZV9odGFiX2VudHJ5KDAsIHNsb3QsIDAsIG5ld3BwLCAwLCA3LCAmZHVtbXkwLAogCQkJCQkmZHVtbXkxKTsKLQlzcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOworCXJhd19zcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOwogCWlmIChscGFyX3JjICE9IDAgfHwgZHVtbXkwID09IDApIHsKIAkJREJHX0xPVygibm90IGZvdW5kICFcbiIpOwogCQlyZXR1cm4gLTE7CkBAIC0yNjIsMTMgKzI2MiwxMyBAQAogCXZzaWQgPSBnZXRfa2VybmVsX3ZzaWQoZWEsIE1NVV9TRUdTSVpFXzI1Nk0pOwogCXZhID0gKHZzaWQgPDwgMjgpIHwgKGVhICYgMHgwZmZmZmZmZik7CiAKLQlzcGluX2xvY2soJmJlYXRfaHRhYl9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZiZWF0X2h0YWJfbG9jayk7CiAJc2xvdCA9IGJlYXRfbHBhcl9ocHRlX2ZpbmQodmEsIHBzaXplKTsKIAlCVUdfT04oc2xvdCA9PSAtMSk7CiAKIAlscGFyX3JjID0gYmVhdF93cml0ZV9odGFiX2VudHJ5KDAsIHNsb3QsIDAsIG5ld3BwLCAwLCA3LAogCQkmZHVtbXkwLCAmZHVtbXkxKTsKLQlzcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOworCXJhd19zcGluX3VubG9jaygmYmVhdF9odGFiX2xvY2spOwogCiAJQlVHX09OKGxwYXJfcmMgIT0gMCk7CiB9CkBAIC0yODUsMTggKzI4NSwxOCBAQAogCQlzbG90LCB2YSwgcHNpemUsIGxvY2FsKTsKIAl3YW50X3YgPSBocHRlX2VuY29kZV92KHZhLCBwc2l6ZSwgTU1VX1NFR1NJWkVfMjU2TSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmVhdF9odGFiX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRfaHRhYl9sb2NrLCBmbGFncyk7CiAJZHVtbXkxID0gYmVhdF9scGFyX2hwdGVfZ2V0d29yZDAoc2xvdCk7CiAKIAlpZiAoKGR1bW15MSAmIH4weDdGVUwpICE9ICh3YW50X3YgJiB+MHg3RlVMKSkgewogCQlEQkdfTE9XKCJub3QgZm91bmQgIVxuIik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRfaHRhYl9sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0X2h0YWJfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCiAJbHBhcl9yYyA9IGJlYXRfd3JpdGVfaHRhYl9lbnRyeSgwLCBzbG90LCAwLCAwLCBIUFRFX1ZfVkFMSUQsIDAsCiAJCSZkdW1teTEsICZkdW1teTIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRfaHRhYl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRfaHRhYl9sb2NrLCBmbGFncyk7CiAKIAlCVUdfT04obHBhcl9yYyAhPSAwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW50ZXJydXB0LmMKaW5kZXggMzYwNTJhOS4uNjgyYWY5NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW50ZXJydXB0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW50ZXJydXB0LmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJiZWF0X3dyYXBwZXIuaCIKIAogI2RlZmluZQlNQVhfSVJRUwlOUl9JUlFTCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJlYXRpY19pcnFfbWFza19sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGJlYXRpY19pcnFfbWFza19sb2NrKTsKIHN0YXRpYyB1aW50NjRfdAliZWF0aWNfaXJxX21hc2tfZW5hYmxlWyhNQVhfSVJRUysyNTUpLzY0XTsKIHN0YXRpYyB1aW50NjRfdAliZWF0aWNfaXJxX21hc2tfYWNrWyhNQVhfSVJRUysyNTUpLzY0XTsKIApAQCAtNjUsMzAgKzY1LDMwIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKIAliZWF0aWNfaXJxX21hc2tfZW5hYmxlW2lycV9wbHVnLzY0XSAmPSB+KDFVTCA8PCAoNjMgLSAoaXJxX3BsdWclNjQpKSk7CiAJYmVhdGljX3VwZGF0ZV9pcnFfbWFzayhpcnFfcGx1Zyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgYmVhdGljX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycV9wbHVnKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmVhdGljX2lycV9tYXNrX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CiAJYmVhdGljX2lycV9tYXNrX2VuYWJsZVtpcnFfcGx1Zy82NF0gfD0gMVVMIDw8ICg2MyAtIChpcnFfcGx1ZyU2NCkpOwogCWJlYXRpY191cGRhdGVfaXJxX21hc2soaXJxX3BsdWcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGJlYXRpY19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnFfcGx1ZykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOwogCWJlYXRpY19pcnFfbWFza19hY2tbaXJxX3BsdWcvNjRdICY9IH4oMVVMIDw8ICg2MyAtIChpcnFfcGx1ZyU2NCkpKTsKIAliZWF0aWNfdXBkYXRlX2lycV9tYXNrKGlycV9wbHVnKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBiZWF0aWNfZW5kX2lycSh1bnNpZ25lZCBpbnQgaXJxX3BsdWcpCkBAIC0xMDMsMTQgKzEwMywxNCBAQAogCiAJCXByaW50ayhLRVJOX0VSUiAiSVJRIG92ZXItZG93bmNvdW50ZWQsIHBsdWcgJWRcbiIsIGlycV9wbHVnKTsKIAl9Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJlYXRpY19pcnFfbWFza19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOwogCWJlYXRpY19pcnFfbWFza19hY2tbaXJxX3BsdWcvNjRdIHw9IDFVTCA8PCAoNjMgLSAoaXJxX3BsdWclNjQpKTsKIAliZWF0aWNfdXBkYXRlX2lycV9tYXNrKGlycV9wbHVnKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZWF0aWNfaXJxX21hc2tfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGJlYXRpY19waWMgPSB7Ci0JLm5hbWUgPSAiIENFTEwtQkVBVCAiLAorCS5uYW1lID0gIkNFTEwtQkVBVCIsCiAJLnVubWFzayA9IGJlYXRpY191bm1hc2tfaXJxLAogCS5tYXNrID0gYmVhdGljX21hc2tfaXJxLAogCS5lb2kgPSBiZWF0aWNfZW5kX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jYmVfcG93ZXJidXR0b24uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jYmVfcG93ZXJidXR0b24uYwppbmRleCBkY2RkYWE1Li5mNzVhNGRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2JlX3Bvd2VyYnV0dG9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NiZV9wb3dlcmJ1dHRvbi5jCkBAIC00OCw3ICs0OCw3IEBACiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2OwogCi0JaWYgKCFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIklCTSxDQlBMVVMtMS4wIikpIHsKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiSUJNLENCUExVUy0xLjAiKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBOb3QgYSBjZWxsIGJsYWRlLlxuIiwgX19mdW5jX18pOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYwppbmRleCA2ODI5Y2Y3Li4xMGViMWE0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jCkBAIC04OCw3ICs4OCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaWljX2NoaXAgPSB7Ci0JLm5hbWUgPSAiIENFTEwtSUlDICIsCisJLm5hbWUgPSAiQ0VMTC1JSUMiLAogCS5tYXNrID0gaWljX21hc2ssCiAJLnVubWFzayA9IGlpY191bm1hc2ssCiAJLmVvaSA9IGlpY19lb2ksCkBAIC0xMzMsNyArMTMzLDcgQEAKIAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlpY19pb2V4Y19jaGlwID0gewotCS5uYW1lID0gIiBDRUxMLUlPRVgiLAorCS5uYW1lID0gIkNFTEwtSU9FWCIsCiAJLm1hc2sgPSBpaWNfbWFzaywKIAkudW5tYXNrID0gaWljX3VubWFzaywKIAkuZW9pID0gaWljX2lvZXhjX2VvaSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9yYXMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9yYXMuYwppbmRleCA1ZTBhMTkxLi42MDhmZDJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcmFzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3Jhcy5jCkBAIC0yNTUsNyArMjU1LDcgQEAKIHsKIAlzdHJ1Y3QgY2JlX3BtZF9yZWdzIF9faW9tZW0gKnJlZ3M7CiAKLQlzeXNyZXNldF9oYWNrID0gbWFjaGluZV9pc19jb21wYXRpYmxlKCJJQk0sQ0JQTFVTLTEuMCIpOworCXN5c3Jlc2V0X2hhY2sgPSBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIklCTSxDQlBMVVMtMS4wIik7CiAJaWYgKCFzeXNyZXNldF9oYWNrKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwaWRlci1waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMKaW5kZXggMDEyNDRmMi4uNTg3NmU4OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwaWRlci1waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3BpZGVyLXBpYy5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzcGlkZXJfcGljID0gewotCS5uYW1lID0gIiBTUElERVIgICAiLAorCS5uYW1lID0gIlNQSURFUiIsCiAJLnVubWFzayA9IHNwaWRlcl91bm1hc2tfaXJxLAogCS5tYXNrID0gc3BpZGVyX21hc2tfaXJxLAogCS5hY2sgPSBzcGlkZXJfYWNrX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfbWFuYWdlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X21hbmFnZS5jCmluZGV4IDRjNTA2YzEuLjg5MWYxOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfbWFuYWdlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9tYW5hZ2UuYwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAJCQljb250aW51ZTsKIAkJdmljX2hhbmRsZXMgPSBvZl9nZXRfcHJvcGVydHkoc3B1X2RuLCAidmljaW5pdHkiLCAmbGVucCk7CiAJCWZvciAoaT0wOyBpIDwgKGxlbnAgLyBzaXplb2YocGhhbmRsZSkpOyBpKyspIHsKLQkJCWlmICh2aWNfaGFuZGxlc1tpXSA9PSB0YXJnZXQtPmxpbnV4X3BoYW5kbGUpCisJCQlpZiAodmljX2hhbmRsZXNbaV0gPT0gdGFyZ2V0LT5waGFuZGxlKQogCQkJCXJldHVybiBzcHU7CiAJCX0KIAl9CkBAIC00OTksNyArNDk5LDcgQEAKIAogCQkJaWYgKHN0cmNtcChuYW1lLCAic3BlIikgPT0gMCkgewogCQkJCXNwdSA9IGRldm5vZGVfc3B1KGNiZSwgdmljX2RuKTsKLQkJCQlhdm9pZF9waCA9IGxhc3Rfc3B1X2RuLT5saW51eF9waGFuZGxlOworCQkJCWF2b2lkX3BoID0gbGFzdF9zcHVfZG4tPnBoYW5kbGU7CiAJCQl9IGVsc2UgewogCQkJCS8qCiAJCQkJICogIm1pYy10bSIgYW5kICJiaWYwIiBub2RlcyBkbyBub3QgaGF2ZQpAQCAtNTE0LDcgKzUxNCw3IEBACiAJCQkJCWxhc3Rfc3B1LT5oYXNfbWVtX2FmZmluaXR5ID0gMTsKIAkJCQkJc3B1LT5oYXNfbWVtX2FmZmluaXR5ID0gMTsKIAkJCQl9Ci0JCQkJYXZvaWRfcGggPSB2aWNfZG4tPmxpbnV4X3BoYW5kbGU7CisJCQkJYXZvaWRfcGggPSB2aWNfZG4tPnBoYW5kbGU7CiAJCQl9CiAKIAkJCWxpc3RfYWRkX3RhaWwoJnNwdS0+YWZmX2xpc3QsICZsYXN0X3NwdS0+YWZmX2xpc3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9mc2xfdWxpMTU3NS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9mc2xfdWxpMTU3NS5jCmluZGV4IGZkMjNhMWQuLjhiMGMyMDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZnNsX3VsaTE1NzUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2ZzbF91bGkxNTc1LmMKQEAgLTIyMiw2ICsyMjIsNyBAQAogCWludCBpOwogCXU4ICpkdW1teTsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gZGV2LT5idXM7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAJcmVzb3VyY2Vfc2l6ZV90IGVuZCA9IDA7CiAKIAlmb3IgKGkgPSBQQ0lfQlJJREdFX1JFU09VUkNFUzsgaSA8IFBDSV9CUklER0VfUkVTT1VSQ0VTKzM7IGkrKykgewpAQCAtMjMwLDEzICsyMzEsMTIgQEAKIAkJCWVuZCA9IHBjaV9yZXNvdXJjZV9lbmQoZGV2LCBpKTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKLQkJaWYgKChidXMtPnJlc291cmNlW2ldKSAmJgotCQkJKGJ1cy0+cmVzb3VyY2VbaV0tPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pKSB7Ci0JCQlpZiAoYnVzLT5yZXNvdXJjZVtpXS0+ZW5kID09IGVuZCkKLQkJCQlkdW1teSA9IGlvcmVtYXAoYnVzLT5yZXNvdXJjZVtpXS0+c3RhcnQsIDB4NCk7CisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHJlcywgaSkgeworCQlpZiAocmVzICYmIHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgeworCQkJaWYgKHJlcy0+ZW5kID09IGVuZCkKKwkJCQlkdW1teSA9IGlvcmVtYXAocmVzLT5zdGFydCwgMHg0KTsKIAkJCWVsc2UKLQkJCQlkdW1teSA9IGlvcmVtYXAoYnVzLT5yZXNvdXJjZVtpXS0+ZW5kIC0gMywgMHg0KTsKKwkJCQlkdW1teSA9IGlvcmVtYXAocmVzLT5lbmQgLSAzLCAweDQpOwogCQkJaWYgKGR1bW15KSB7CiAJCQkJaW5fOChkdW1teSk7CiAJCQkJaW91bm1hcChkdW1teSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMKaW5kZXggODZjNGIyOS4uYmE0NDZiZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYwpAQCAtMjczLDcgKzI3Myw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXNlcmllc19waWMgPSB7Ci0JLm5hbWUJPSAiaVNlcmllcyBpcnEgY29udHJvbGxlciIsCisJLm5hbWUJCT0gImlTZXJpZXMiLAogCS5zdGFydHVwCT0gaXNlcmllc19zdGFydHVwX0lSUSwKIAkuc2h1dGRvd24JPSBpc2VyaWVzX3NodXRkb3duX0lSUSwKIAkudW5tYXNrCQk9IGlzZXJpZXNfZW5hYmxlX0lSUSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9wcm9jLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvcHJvYy5jCmluZGV4IDkxZjRjNmMuLjA2NzYzNjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9wcm9jLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Byb2MuYwpAQCAtODUsNyArODUsNyBAQAogCiAJCXNlcV9wcmludGYobSwgIiAgdGl0YW4gZWxhcHNlZCA9ICVsdSB1U2VjXG4iLCB0aXRhbl91c2VjKTsKIAkJc2VxX3ByaW50ZihtLCAiICB0YiBlbGFwc2VkICAgID0gJWx1IHRpY2tzXG4iLCB0Yl90aWNrcyk7Ci0JCXNlcV9wcmludGYobSwgIiAgdGl0YW4gamlmZmllcyA9ICVsdS4lMDRsdSBcbiIsIHRpdGFuX2ppZmZpZXMsCisJCXNlcV9wcmludGYobSwgIiAgdGl0YW4gamlmZmllcyA9ICVsdS4lMDRsdVxuIiwgdGl0YW5famlmZmllcywKIAkJCSAgIHRpdGFuX2ppZmZfcmVtX3VzZWMpOwogCQlzZXFfcHJpbnRmKG0sICIgIHRiIGppZmZpZXMgICAgPSAlbHUuJTA0bHVcbiIsIHRiX2ppZmZpZXMsCiAJCQkgICB0Yl9qaWZmX3JlbV91c2VjKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKaW5kZXggYTZjZDMzOS4uYjA4NjM0MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKQEAgLTI1Niw3ICsyNTYsNyBAQAogCQltZW1fYmxvY2tzID0gaVNlcmllc19wcm9jZXNzX0NvbmRvcl9tYWluc3RvcmVfdnBkKG1iX2FycmF5LAogCQkJCW1heF9lbnRyaWVzKTsKIAotCXByaW50aygiTWFpbnN0b3JlX1ZQRDogbnVtTWVtb3J5QmxvY2tzID0gJWxkIFxuIiwgbWVtX2Jsb2Nrcyk7CisJcHJpbnRrKCJNYWluc3RvcmVfVlBEOiBudW1NZW1vcnlCbG9ja3MgPSAlbGRcbiIsIG1lbV9ibG9ja3MpOwogCWZvciAoaSA9IDA7IGkgPCBtZW1fYmxvY2tzOyArK2kpIHsKIAkJcHJpbnRrKCJNYWluc3RvcmVfVlBEOiBibG9jayAlM2xkIGxvZ2ljYWwgY2h1bmtzICUwMTZseCAtICUwMTZseFxuIgogCQkgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzIGNodW5rcyAlMDE2bHggLSAlMDE2bHhcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9jcHVmcmVxLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9jcHVmcmVxLmMKaW5kZXggYmUyNTI3YS4uZDM1ZTA1MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvY3B1ZnJlcS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2NwdWZyZXEuYwpAQCAtMzA0LDggKzMwNCw4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBhc19jcHVmcmVxX2luaXQodm9pZCkKIHsKLQlpZiAoIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUEE2VC0xNjgyTSIpICYmCi0JICAgICFtYWNoaW5lX2lzX2NvbXBhdGlibGUoInBhc2VtaSxwd3JmaWNpZW50IikpCisJaWYgKCFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBBNlQtMTY4Mk0iKSAmJgorCSAgICAhb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJwYXNlbWkscHdyZmljaWVudCIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJldHVybiBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmcGFzX2NwdWZyZXFfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvYm9vdHhfaW5pdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9ib290eF9pbml0LmMKaW5kZXggOWRkNzg5YS4uODRkN2ZkOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9ib290eF9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9ib290eF9pbml0LmMKQEAgLTUzOSw3ICs1MzksNyBAQAogCQlpZiAobW9kZWwKIAkJICAgICYmIChzdHJjbXAobW9kZWwsICJpTWFjLDEiKSA9PSAwCiAJCQl8fCBzdHJjbXAobW9kZWwsICJQb3dlck1hYzEsMSIpID09IDApKSB7Ci0JCQlib290eF9wcmludGYoImlNYWMsMSBkZXRlY3RlZCwgc2h1dHRpbmcgZG93biBVU0IgXG4iKTsKKwkJCWJvb3R4X3ByaW50ZigiaU1hYywxIGRldGVjdGVkLCBzaHV0dGluZyBkb3duIFVTQlxuIik7CiAJCQlvdXRfbGUzMigodW5zaWduZWQgX19pb21lbSAqKTB4ODA4ODAwMDgsIDEpOwkvKiBYWFggKi8KIAkJfQogCX0KQEAgLTU1NCw3ICs1NTQsNyBAQAogCX0gZWxzZQogCQlzcGFjZSA9IGJpLT50b3RhbFBhcmFtc1NpemU7CiAKLQlib290eF9wcmludGYoIlRvdGFsIHNwYWNlIHVzZWQgYnkgcGFyYW1ldGVycyAmIHJhbWRpc2s6IDB4JXggXG4iLCBzcGFjZSk7CisJYm9vdHhfcHJpbnRmKCJUb3RhbCBzcGFjZSB1c2VkIGJ5IHBhcmFtZXRlcnMgJiByYW1kaXNrOiAweCV4XG4iLCBzcGFjZSk7CiAKIAkvKiBOZXcgQm9vdFggd2lsbCBoYXZlIGZsdXNoZWQgYWxsIFRMQnMgYW5kIGVudGVycyBrZXJuZWwgd2l0aAogCSAqIE1NVSBzd2l0Y2hlZCBPRkYsIHNvIHRoaXMgc2hvdWxkIG5vdCBiZSB1c2VmdWwgYW55bW9yZS4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzMyLmMKaW5kZXggMDhkOTRlNC4uZDRmMTI3ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzMyLmMKQEAgLTY1NywzMSArNjU3LDMxIEBACiAJY3VyX2ZyZXEgPSAoKnZhbHVlKSAvIDEwMDA7CiAKIAkvKiAgQ2hlY2sgZm9yIDc0NDdBIGJhc2VkIE1hY1JJU0MzICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzMiKSAmJgorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0MzIikgJiYKIAkgICAgb2ZfZ2V0X3Byb3BlcnR5KGNwdW5vZGUsICJkeW5hbWljLXBvd2VyLXN0ZXAiLCBOVUxMKSAmJgogCSAgICBQVlJfVkVSKG1mc3ByKFNQUk5fUFZSKSkgPT0gMHg4MDAzKSB7CiAJCXBtYWNfY3B1ZnJlcV9pbml0Xzc0NDdBKGNwdW5vZGUpOwogCS8qIENoZWNrIGZvciBvdGhlciBNYWNSSVNDMyBtYWNoaW5lcyAqLwotCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDQiKSB8fAotCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsNSIpIHx8Ci0JCSAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzMiKSkgeworCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDQiKSB8fAorCQkgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsNSIpIHx8CisJCSAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzMiKSkgewogCQlwbWFjX2NwdWZyZXFfaW5pdF9NYWNSSVNDMyhjcHVub2RlKTsKIAkvKiBFbHNlIGNoZWNrIGZvciBpQm9vazIgNTAwLzYwMCAqLwotCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKSkgeworCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKSkgewogCQloaV9mcmVxID0gY3VyX2ZyZXE7CiAJCWxvd19mcmVxID0gNDAwMDAwOwogCQlzZXRfc3BlZWRfcHJvYyA9IHBtdV9zZXRfY3B1X3NwZWVkOwogCQlpc19wbXVfYmFzZWQgPSAxOwogCX0KIAkvKiBFbHNlIGNoZWNrIGZvciBUaVBiIDU1MCAqLwotCWVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywzIikgJiYgY3VyX2ZyZXEgPT0gNTUwMDAwKSB7CisJZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDMiKSAmJiBjdXJfZnJlcSA9PSA1NTAwMDApIHsKIAkJaGlfZnJlcSA9IGN1cl9mcmVxOwogCQlsb3dfZnJlcSA9IDUwMDAwMDsKIAkJc2V0X3NwZWVkX3Byb2MgPSBwbXVfc2V0X2NwdV9zcGVlZDsKIAkJaXNfcG11X2Jhc2VkID0gMTsKIAl9CiAJLyogRWxzZSBjaGVjayBmb3IgVGlQYiA0MDAgJiA1MDAgKi8KLQllbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMiIpKSB7CisJZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDIiKSkgewogCQkvKiBXZSBvbmx5IGtub3cgYWJvdXQgdGhlIDQwMCBNSHogYW5kIHRoZSA1MDBNaHogbW9kZWwKIAkJICogdGhleSBib3RoIGhhdmUgMzAwIE1IeiBhcyBsb3cgZnJlcXVlbmN5CiAJCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzY0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYwppbmRleCA3MDhjNzUxLi4zZWQyODhlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYwpAQCAtMzk4LDExICszOTgsMTEgQEAKIAlpbnQgcmMgPSAtRU5PREVWOwogCiAJLyogQ2hlY2sgc3VwcG9ydGVkIHBsYXRmb3JtcyAqLwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwxIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMiIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM5LDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMSIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDIiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOSwxIikpCiAJCXVzZV92b2x0c19zbXUgPSAxOwotCWVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMSwyIikpCisJZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzExLDIiKSkKIAkJdXNlX3ZvbHRzX3ZkbmFwID0gMTsKIAllbHNlCiAJCXJldHVybiAtRU5PREVWOwpAQCAtNzI5LDkgKzcyOSw5IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpKQogCQlyYyA9IGc1X3BtNzJfY3B1ZnJlcV9pbml0KGNwdXMpOwogI2lmZGVmIENPTkZJR19QTUFDX1NNVQogCWVsc2UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvZmVhdHVyZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMKaW5kZXggZmJjOWJiZC4uOWUxYjlmZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMKQEAgLTU5LDEwICs1OSwxMCBAQAogICogV2UgdXNlIGEgc2luZ2xlIGdsb2JhbCBsb2NrIHRvIHByb3RlY3QgYWNjZXNzZXMuIEVhY2ggZHJpdmVyIGhhcwogICogdG8gdGFrZSBjYXJlIG9mIGl0cyBvd24gbG9ja2luZwogICovCi1ERUZJTkVfU1BJTkxPQ0soZmVhdHVyZV9sb2NrKTsKK0RFRklORV9SQVdfU1BJTkxPQ0soZmVhdHVyZV9sb2NrKTsKIAotI2RlZmluZSBMT0NLKGZsYWdzKQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7Ci0jZGVmaW5lIFVOTE9DSyhmbGFncykJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisjZGVmaW5lIExPQ0soZmxhZ3MpCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisjZGVmaW5lIFVOTE9DSyhmbGFncykJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCiAKIC8qCkBAIC0yNDI2LDcgKzI0MjYsNyBAQAogCSAgICB9CiAJfQogCWZvcihpPTA7IGk8QVJSQVlfU0laRShwbWFjX21iX2RlZnMpOyBpKyspIHsKLQkgICAgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZShwbWFjX21iX2RlZnNbaV0ubW9kZWxfc3RyaW5nKSkgeworCSAgICBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKHBtYWNfbWJfZGVmc1tpXS5tb2RlbF9zdHJpbmcpKSB7CiAJCXBtYWNfbWIgPSBwbWFjX21iX2RlZnNbaV07CiAJCWdvdG8gZm91bmQ7CiAJICAgIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbnZyYW0uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbnZyYW0uYwppbmRleCBjNmYwZjllLi44MGE1MjU4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9udnJhbS5jCkBAIC04MCw3ICs4MCw3IEBACiBzdGF0aWMgaW50IGNvcmU5OV9iYW5rID0gMDsKIHN0YXRpYyBpbnQgbnZyYW1fcGFydGl0aW9uc1szXTsKIC8vIFhYWCBUdXJuIHRoYXQgaW50byBhIHNlbQotc3RhdGljIERFRklORV9TUElOTE9DSyhudl9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG52X2xvY2spOwogCiBzdGF0aWMgaW50ICgqY29yZTk5X3dyaXRlX2JhbmspKGludCBiYW5rLCB1OCogZGF0YXMpOwogc3RhdGljIGludCAoKmNvcmU5OV9lcmFzZV9iYW5rKShpbnQgYmFuayk7CkBAIC0xNjUsMTAgKzE2NSwxMCBAQAogCXVuc2lnbmVkIGNoYXIgdmFsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbnZfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbnZfbG9jaywgZmxhZ3MpOwogCW91dF84KG52cmFtX2FkZHIsIGFkZHIgPj4gNSk7CiAJdmFsID0gaW5fOCgmbnZyYW1fZGF0YVsoYWRkciAmIDB4MWYpIDw8IDRdKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm52X2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiB2YWw7CiB9CkBAIC0xNzcsMTAgKzE3NywxMCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbnZfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbnZfbG9jaywgZmxhZ3MpOwogCW91dF84KG52cmFtX2FkZHIsIGFkZHIgPj4gNSk7CiAJb3V0XzgoJm52cmFtX2RhdGFbKGFkZHIgJiAweDFmKSA8PCA0XSwgdmFsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm52X2xvY2ssIGZsYWdzKTsKIH0KIAogCkBAIC00ODEsNyArNDgxLDcgQEAKIAlpZiAoIWlzX2NvcmVfOTkgfHwgIW52cmFtX2RhdGEgfHwgIW52cmFtX2ltYWdlKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbnZfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbnZfbG9jaywgZmxhZ3MpOwogCWlmICghbWVtY21wKG52cmFtX2ltYWdlLCAodTgqKW52cmFtX2RhdGEgKyBjb3JlOTlfYmFuaypOVlJBTV9TSVpFLAogCQlOVlJBTV9TSVpFKSkKIAkJZ290byBiYWlsOwpAQCAtNTAzLDcgKzUwMyw3IEBACiAJCWlmIChjb3JlOTlfd3JpdGVfYmFuayhjb3JlOTlfYmFuaywgbnZyYW1faW1hZ2UpKQogCQkJcHJpbnRrKCJudnJhbTogRXJyb3Igd3JpdGluZyBiYW5rICVkXG4iLCBjb3JlOTlfYmFuayk7CiAgYmFpbDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm52X2xvY2ssIGZsYWdzKTsKIAogI2lmZGVmIERFQlVHCiAgICAgICAgCW1kZWxheSgyMDAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfYmFzZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19iYXNlLmMKaW5kZXggZGIyMGRlNS4uZjVlM2NkYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19iYXNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19iYXNlLmMKQEAgLTUwLDEzICs1MCwxMyBAQAogCQl2YWx1ZSA9IH52YWx1ZTsKIAogCS8qIFRvZ2dsZSB0aGUgR1BJTyAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCXRtcCA9IHJlYWRiKGFkZHIpOwogCXRtcCA9ICh0bXAgJiB+bWFzaykgfCAodmFsdWUgJiBtYXNrKTsKIAlEQkcoIkRvIHdyaXRlIDB4JTAyeCB0byBHUElPICVzICglcClcbiIsCiAJICAgIHRtcCwgZnVuYy0+bm9kZS0+ZnVsbF9uYW1lLCBhZGRyKTsKIAl3cml0ZWIodG1wLCBhZGRyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NSw5ICsxNDUsOSBAQAogCXN0cnVjdCBtYWNpb19jaGlwICptYWNpbyA9IGZ1bmMtPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAlNQUNJT19PVVQzMihvZmZzZXQsIChNQUNJT19JTjMyKG9mZnNldCkgJiB+bWFzaykgfCAodmFsdWUgJiBtYXNrKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0xNjgsOSArMTY4LDkgQEAKIAlzdHJ1Y3QgbWFjaW9fY2hpcCAqbWFjaW8gPSBmdW5jLT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CiAJTUFDSU9fT1VUOChvZmZzZXQsIChNQUNJT19JTjgob2Zmc2V0KSAmIH5tYXNrKSB8ICh2YWx1ZSAmIG1hc2spKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyMywxMiArMjIzLDEyIEBACiAJaWYgKGFyZ3MgPT0gTlVMTCB8fCBhcmdzLT5jb3VudCA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCXRtcCA9IE1BQ0lPX0lOMzIob2Zmc2V0KTsKIAl2YWwgPSBhcmdzLT51WzBdLnYgPDwgc2hpZnQ7CiAJdG1wID0gKHRtcCAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsKIAlNQUNJT19PVVQzMihvZmZzZXQsIHRtcCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0yNDMsMTIgKzI0MywxMiBAQAogCWlmIChhcmdzID09IE5VTEwgfHwgYXJncy0+Y291bnQgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAl0bXAgPSBNQUNJT19JTjgob2Zmc2V0KTsKIAl2YWwgPSBhcmdzLT51WzBdLnYgPDwgc2hpZnQ7CiAJdG1wID0gKHRtcCAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsKIAlNQUNJT19PVVQ4KG9mZnNldCwgdG1wKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVhdHVyZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3OCwxMiArMjc4LDEyIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOwogCS8qIFRoaXMgaXMgZmFpcmx5IGJvZ3VzIGluIGRhcndpbiwgYnV0IGl0IHNob3VsZCB3b3JrIGZvciBvdXIgbmVlZHMKIAkgKiBpbXBsZW1ldGVkIHRoYXQgd2F5OgogCSAqLwogCVVOX09VVChvZmZzZXQsIChVTl9JTihvZmZzZXQpICYgfm1hc2spIHwgKHZhbHVlICYgbWFzaykpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlYXR1cmVfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZWF0dXJlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2NvcmUuYwppbmRleCA5NmQ1Y2U1Li5lZGU0OWU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2NvcmUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2NvcmUuYwpAQCAtODQyLDcgKzg0Miw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmdW5jLCAmZGV2LT5mdW5jdGlvbnMsIGxpbmspIHsKIAkJaWYgKG5hbWUgJiYgc3RyY21wKG5hbWUsIGZ1bmMtPm5hbWUpKQogCQkJY29udGludWU7Ci0JCWlmIChmdW5jLT5waGFuZGxlICYmIHRhcmdldC0+bm9kZSAhPSBmdW5jLT5waGFuZGxlKQorCQlpZiAoZnVuYy0+cGhhbmRsZSAmJiB0YXJnZXQtPnBoYW5kbGUgIT0gZnVuYy0+cGhhbmRsZSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoKGZ1bmMtPmZsYWdzICYgZmxhZ3MpID09IDApCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCmluZGV4IDA5ZTgyNzIuLjYzMGE1MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYwpAQCAtNTcsNyArNTcsNyBAQAogc3RhdGljIGludCBtYXhfcmVhbF9pcnFzOwogc3RhdGljIHUzMiBsZXZlbF9tYXNrWzRdOwogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBtYWNfcGljX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0socG1hY19waWNfbG9jayk7CiAKICNkZWZpbmUgTlJfTUFTS19XT1JEUwkoKE5SX0lSUVMgKyAzMSkgLyAzMikKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBwY19sb3N0X2ludGVycnVwdHNbTlJfTUFTS19XT1JEU107CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgIGludCBpID0gc3JjID4+IDU7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogICAgICAgICBfX2NsZWFyX2JpdChzcmMsIHBwY19jYWNoZWRfaXJxX21hc2spOwogICAgICAgICBpZiAoX190ZXN0X2FuZF9jbGVhcl9iaXQoc3JjLCBwcGNfbG9zdF9pbnRlcnJ1cHRzKSkKICAgICAgICAgICAgICAgICBhdG9taWNfZGVjKCZwcGNfbl9sb3N0X2ludGVycnVwdHMpOwpAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAgICAgICAgIG1iKCk7CiAgICAgICAgIH0gd2hpbGUoKGluX2xlMzIoJnBtYWNfaXJxX2h3W2ldLT5lbmFibGUpICYgYml0KQogICAgICAgICAgICAgICAgICE9IChwcGNfY2FjaGVkX2lycV9tYXNrW2ldICYgYml0KSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBtYWNfYWNrX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKQEAgLTEwNywxMiArMTA3LDEyIEBACiAgICAgICAgIGludCBpID0gc3JjID4+IDU7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSAgCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAJaWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KHNyYywgcHBjX2xvc3RfaW50ZXJydXB0cykpCiAgICAgICAgICAgICAgICAgYXRvbWljX2RlYygmcHBjX25fbG9zdF9pbnRlcnJ1cHRzKTsKICAgICAgICAgb3V0X2xlMzIoJnBtYWNfaXJxX2h3W2ldLT5hY2ssIGJpdCk7CiAgICAgICAgICh2b2lkKWluX2xlMzIoJnBtYWNfaXJxX2h3W2ldLT5hY2spOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBfX3BtYWNfc2V0X2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnFfbnIsIGludCBub2tpY2tsb3N0KQpAQCAtMTUyLDEyICsxNTIsMTIgQEAKICAgICAgICAgdW5zaWduZWQgbG9uZyBiaXQgPSAxVUwgPDwgKHNyYyAmIDB4MWYpOwogICAgICAgICBpbnQgaSA9IHNyYyA+PiA1OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlpZiAoKGlycV90b19kZXNjKHZpcnEpLT5zdGF0dXMgJiBJUlFfTEVWRUwpID09IDApCiAJCW91dF9sZTMyKCZwbWFjX2lycV9od1tpXS0+YWNrLCBiaXQpOwogICAgICAgICBfX3NldF9iaXQoc3JjLCBwcGNfY2FjaGVkX2lycV9tYXNrKTsKICAgICAgICAgX19wbWFjX3NldF9pcnFfbWFzayhzcmMsIDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjcsMTAgKzE2NywxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHNyYyA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAKLSAgCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAgICAgICAgIF9fY2xlYXJfYml0KHNyYywgcHBjX2NhY2hlZF9pcnFfbWFzayk7CiAgICAgICAgIF9fcG1hY19zZXRfaXJxX21hc2soc3JjLCAxKTsKLSAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBwbWFjX3VubWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCkBAIC0xNzgsMjQgKzE3OCwyNCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHNyYyA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCV9fc2V0X2JpdChzcmMsIHBwY19jYWNoZWRfaXJxX21hc2spOwogICAgICAgICBfX3BtYWNfc2V0X2lycV9tYXNrKHNyYywgMCk7Ci0gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBwbWFjX3JldHJpZ2dlcih1bnNpZ25lZCBpbnQgdmlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCV9fcG1hY19yZXRyaWdnZXIoaXJxX21hcFt2aXJxXS5od2lycSk7Ci0gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBwbWFjX3BpYyA9IHsKLQkubmFtZQkJPSAiIFBNQUMtUElDICIsCisJLm5hbWUJCT0gIlBNQUMtUElDIiwKIAkuc3RhcnR1cAk9IHBtYWNfc3RhcnR1cF9pcnEsCiAJLm1hc2sJCT0gcG1hY19tYXNrX2lycSwKIAkuYWNrCQk9IHBtYWNfYWNrX2lycSwKQEAgLTIxMCw3ICsyMTAsNyBAQAogCWludCBpcnEsIGJpdHM7CiAJaW50IHJjID0gSVJRX05PTkU7CiAKLSAgCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAJZm9yIChpcnEgPSBtYXhfaXJxczsgKGlycSAtPSAzMikgPj0gbWF4X3JlYWxfaXJxczsgKSB7CiAJCWludCBpID0gaXJxID4+IDU7CiAJCWJpdHMgPSBpbl9sZTMyKCZwbWFjX2lycV9od1tpXS0+ZXZlbnQpIHwgcHBjX2xvc3RfaW50ZXJydXB0c1tpXTsKQEAgLTIyMCwxMiArMjIwLDEyIEBACiAJCWlmIChiaXRzID09IDApCiAJCQljb250aW51ZTsKIAkJaXJxICs9IF9faWxvZzIoYml0cyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCQlyYyA9IElSUV9IQU5ETEVEOwogCX0KLSAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCXJldHVybiByYzsKIH0KIApAQCAtMjQ0LDcgKzI0NCw3IEBACiAJCXJldHVybiBOT19JUlFfSUdOT1JFOwkvKiBpZ25vcmUsIGFscmVhZHkgaGFuZGxlZCAqLwogICAgICAgICB9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwotICAJc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlmb3IgKGlycSA9IG1heF9yZWFsX2lycXM7IChpcnEgLT0gMzIpID49IDA7ICkgewogCQlpbnQgaSA9IGlycSA+PiA1OwogCQliaXRzID0gaW5fbGUzMigmcG1hY19pcnFfaHdbaV0tPmV2ZW50KSB8IHBwY19sb3N0X2ludGVycnVwdHNbaV07CkBAIC0yNTYsNyArMjU2LDcgQEAKIAkJaXJxICs9IF9faWxvZzIoYml0cyk7CiAJCWJyZWFrOwogCX0KLSAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogCWlmICh1bmxpa2VseShpcnEgPCAwKSkKIAkJcmV0dXJuIE5PX0lSUTsKIAlyZXR1cm4gaXJxX2xpbmVhcl9yZXZtYXAocG1hY19waWNfaG9zdCwgaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCmluZGV4IGI0MGMyMmQuLjY4OThlODIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYwpAQCAtNjkzLDkgKzY5Myw5IEBACiAjaWZkZWYgQ09ORklHX1BQQzY0CiAKIAkvKiBpMmMgYmFzZWQgSFcgc3luYyBvbiBzb21lIEc1cyAqLwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpKQogCQlzbXBfY29yZTk5X3NldHVwX2kyY19od3N5bmMobmNwdXMpOwogCiAJLyogcGZ1bmMgYmFzZWQgSFcgc3luYyBvbiByZWNlbnQgRzVzICovCkBAIC03MTMsNyArNzEzLDcgQEAKICNlbHNlIC8qIENPTkZJR19QUEM2NCAqLwogCiAJLyogR1BJTyBiYXNlZCBIVyBzeW5jIG9uIHBwYzMyIENvcmU5OSAqLwotCWlmIChwbWFjX3RiX2ZyZWV6ZSA9PSBOVUxMICYmICFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0M0IikpIHsKKwlpZiAocG1hY190Yl9mcmVlemUgPT0gTlVMTCAmJiAhb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKSB7CiAJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1OwogCQljb25zdCB1MzIgKnRicHJvcCA9IE5VTEw7CiAKQEAgLTc1MCw3ICs3NTAsNyBAQAogI2VuZGlmCiAKIAkvKiAzMiBiaXRzIFNNUCBjYW4ndCBOQVAgKi8KLQlpZiAoIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkKIAkJcG93ZXJzYXZlX25hcCA9IDA7CiB9CiAKQEAgLTg1Miw3ICs4NTIsNyBAQAogCQkvKiBJZiB3ZSBkaWRuJ3Qgc3RhcnQgdGhlIHNlY29uZCBDUFUsIHdlIG11c3QgdGFrZQogCQkgKiBpdCBvZmYgdGhlIGJ1cwogCQkgKi8KLQkJaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSAmJgorCQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpICYmCiAJCSAgICBudW1fb25saW5lX2NwdXMoKSA8IDIpCQkKIAkJCWc1X3BoeV9kaXNhYmxlX2NwdTEoKTsKICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdGltZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy90aW1lLmMKaW5kZXggMTgxMGU0Mi4uNDgyMTFjYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy90aW1lLmMKQEAgLTMxNyw5ICszMTcsOSBAQAogCSAqIGNhbGlicmF0aW9uLiBUaGF0J3MgYmV0dGVyIHNpbmNlIHRoZSBWSUEgaXRzZWxmIHNlZW1zCiAJICogdG8gYmUgc2xpZ2h0bHkgb2ZmLiAtLUJlbkgKIAkgKi8KLQlpZiAoIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzIiKSAmJgotCSAgICAhbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDMyIpICYmCi0JICAgICFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0M0IikpCisJaWYgKCFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIk1hY1JJU0MyIikgJiYKKwkgICAgIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzMiKSAmJgorCSAgICAhb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKQogCQlpZiAodmlhX2NhbGlicmF0ZV9kZWNyKCkpCiAJCQlyZXR1cm47CiAKQEAgLTMyOCw3ICszMjgsNyBAQAogCSAqIHByb2JhYmx5IGltcGxlbWVudCBjYWxpYnJhdGlvbiBiYXNlZCBvbiB0aGUgS0wgdGltZXIgb24gdGhlc2UKIAkgKiBtYWNoaW5lcyBhbnl3YXkuLi4gLUJlbkgKIAkgKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzMsNSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMyw1IikpCiAJCWlmICh2aWFfY2FsaWJyYXRlX2RlY3IoKSkKIAkJCXJldHVybjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX3NjYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX3NjYy5jCmluZGV4IDk0OTAxNTcuLmQ4MzEzNWE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3VkYmdfc2NjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX3NjYy5jCkBAIC0xMzIsOSArMTMyLDkgQEAKIAkJc2NjX2luaXR0YWJbMV0gPSBpbl84KHNjY2MpOwogCQlvdXRfOChzY2NjLCAxMik7CiAJCXNjY19pbml0dGFiWzNdID0gaW5fOChzY2NjKTsKLQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzEsMSIpCi0JCSAgIHx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzEsMiIpCi0JCSAgIHx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkgeworCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMSwxIikKKwkJICAgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMSwyIikKKwkJICAgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKSB7CiAJCS8qIFhzZXJ2ZXMgYW5kIEc1cyBkZWZhdWx0IHRvIDU3NjAwICovCiAJCXNjY19pbml0dGFiWzFdID0gMDsKIAkJc2NjX2luaXR0YWJbM10gPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCmluZGV4IGNjZDhkZDAuLjdkZjdmYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogRVhQT1JUX1NZTUJPTChlZWhfc3Vic3lzdGVtX2VuYWJsZWQpOwogCiAvKiBMb2NrIHRvIGF2b2lkIHJhY2VzIGR1ZSB0byBtdWx0aXBsZSByZXBvcnRzIG9mIGFuIGVycm9yICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbmZpcm1fZXJyb3JfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhjb25maXJtX2Vycm9yX2xvY2spOwogCiAvKiBCdWZmZXIgZm9yIHJlcG9ydGluZyBzbG90LWVycm9yLWRldGFpbCBydGFzIGNhbGxzLiBJdHMgaGVyZQogICogaW4gQlNTLCBhbmQgbm90IGR5bmFtaWNhbGx5IGFsbG9jZWQsIHNvIHRoYXQgaXQgZW5kcyB1cCBpbgpAQCAtNDM2LDcgKzQzNiw3IEBACiB2b2lkIGVlaF9jbGVhcl9zbG90IChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgbW9kZV9mbGFnKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CiAJCiAJZG4gPSBmaW5kX2RldmljZV9wZSAoZG4pOwogCQpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAJUENJX0ROKGRuKS0+ZWVoX21vZGUgJj0gfm1vZGVfZmxhZzsKIAlQQ0lfRE4oZG4pLT5lZWhfY2hlY2tfY291bnQgPSAwOwogCV9fZWVoX2NsZWFyX3Nsb3QoZG4sIG1vZGVfZmxhZyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOwogfQogCiAvKioKQEAgLTQ5MSw3ICs0OTEsNyBAQAogCSAgICBwZG4tPmVlaF9tb2RlICYgRUVIX01PREVfTk9DSEVDSykgewogCQlpZ25vcmVkX2NoZWNrKys7CiAJCXByX2RlYnVnKCJFRUg6IElnbm9yZWQgY2hlY2sgKCV4KSBmb3IgJXMgJXNcbiIsCi0JCQkgcGRuLT5lZWhfbW9kZSwgcGNpX25hbWUgKGRldiksIGRuLT5mdWxsX25hbWUpOworCQkJIHBkbi0+ZWVoX21vZGUsIGVlaF9wY2lfbmFtZShkZXYpLCBkbi0+ZnVsbF9uYW1lKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC01MDYsNyArNTA2LDcgQEAKIAkgKiBpbiBvbmUgc2xvdCBtaWdodCByZXBvcnQgZXJyb3JzIHNpbXVsdGFuZW91c2x5LCBhbmQgd2UKIAkgKiBvbmx5IHdhbnQgb25lIGVycm9yIHJlY292ZXJ5IHJvdXRpbmUgcnVubmluZy4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKIAlyYyA9IDE7CiAJaWYgKHBkbi0+ZWVoX21vZGUgJiBFRUhfTU9ERV9JU09MQVRFRCkgewogCQlwZG4tPmVlaF9jaGVja19jb3VudCArKzsKQEAgLTUxNSw3ICs1MTUsNyBAQAogCQkJcHJpbnRrIChLRVJOX0VSUiAiRUVIOiAlZCByZWFkcyBpZ25vcmVkIGZvciByZWNvdmVyaW5nIGRldmljZSBhdCAiCiAJCQkJImxvY2F0aW9uPSVzIGRyaXZlcj0lcyBwY2kgYWRkcj0lc1xuIiwKIAkJCQlwZG4tPmVlaF9jaGVja19jb3VudCwgbG9jYXRpb24sCi0JCQkJZGV2LT5kcml2ZXItPm5hbWUsIHBjaV9uYW1lKGRldikpOworCQkJCWRldi0+ZHJpdmVyLT5uYW1lLCBlZWhfcGNpX25hbWUoZGV2KSk7CiAJCQlwcmludGsgKEtFUk5fRVJSICJFRUg6IE1pZ2h0IGJlIGluZmluaXRlIGxvb3AgaW4gJXMgZHJpdmVyXG4iLAogCQkJCWRldi0+ZHJpdmVyLT5uYW1lKTsKIAkJCWR1bXBfc3RhY2soKTsKQEAgLTU3NSw3ICs1NzUsNyBAQAogCSAqIHdpdGggb3RoZXIgZnVuY3Rpb25zIG9uIHRoaXMgZGV2aWNlLCBhbmQgZnVuY3Rpb25zIHVuZGVyCiAJICogYnJpZGdlcy4gKi8KIAllZWhfbWFya19zbG90IChkbiwgRUVIX01PREVfSVNPTEFURUQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKIAogCWVlaF9zZW5kX2ZhaWx1cmVfZXZlbnQgKGRuLCBkZXYpOwogCkBAIC01ODYsNyArNTg2LDcgQEAKIAlyZXR1cm4gMTsKIAogZG5fdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTEwNjQsNyArMTA2NCw3IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpwaGIsICpucDsKIAlzdHJ1Y3QgZWVoX2Vhcmx5X2VuYWJsZV9pbmZvIGluZm87CiAKLQlzcGluX2xvY2tfaW5pdCgmY29uZmlybV9lcnJvcl9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrX2luaXQoJmNvbmZpcm1fZXJyb3JfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnNsb3RfZXJyYnVmX2xvY2spOwogCiAJbnAgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL3J0YXMiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCmluZGV4IGVmOGU0NTQuLmI4ZDcwZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwpAQCAtMzM3LDcgKzMzNyw3IEBACiAJCWxvY2F0aW9uID0gbG9jYXRpb24gPyBsb2NhdGlvbiA6ICJ1bmtub3duIjsKIAkJcHJpbnRrKEtFUk5fRVJSICJFRUg6IEVycm9yOiBDYW5ub3QgZmluZCBwYXJ0aXRpb24gZW5kcG9pbnQgIgogCQkgICAgICAgICAgICAgICAgImZvciBsb2NhdGlvbj0lcyBwY2kgYWRkcj0lc1xuIiwKLQkJICAgICAgICBsb2NhdGlvbiwgcGNpX25hbWUoZXZlbnQtPmRldikpOworCQkgICAgICAgIGxvY2F0aW9uLCBlZWhfcGNpX25hbWUoZXZlbnQtPmRldikpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTM2OCw3ICszNjgsNyBAQAogCQlwY2lfc3RyID0gcGNpX25hbWUgKGZyb3plbl9wZG4tPnBjaWRldik7CiAJCWRydl9zdHIgPSBwY2lkX25hbWUgKGZyb3plbl9wZG4tPnBjaWRldik7CiAJfSBlbHNlIHsKLQkJcGNpX3N0ciA9IHBjaV9uYW1lIChldmVudC0+ZGV2KTsKKwkJcGNpX3N0ciA9IGVlaF9wY2lfbmFtZShldmVudC0+ZGV2KTsKIAkJZHJ2X3N0ciA9IHBjaWRfbmFtZSAoZXZlbnQtPmRldik7CiAJfQogCQpAQCAtNDc4LDkgKzQ3OCw5IEBACiAJICogZHVlIHRvIGFjdHVhbCwgZmFpbGVkIGNhcmRzLgogCSAqLwogCXByaW50ayhLRVJOX0VSUgotCSAgICJFRUg6IFBDSSBkZXZpY2UgYXQgbG9jYXRpb249JXMgZHJpdmVyPSVzIHBjaSBhZGRyPSVzIFxuIgorCSAgICJFRUg6IFBDSSBkZXZpY2UgYXQgbG9jYXRpb249JXMgZHJpdmVyPSVzIHBjaSBhZGRyPSVzXG4iCiAJCSJoYXMgZmFpbGVkICVkIHRpbWVzIGluIHRoZSBsYXN0IGhvdXIgIgotCQkiYW5kIGhhcyBiZWVuIHBlcm1hbmVudGx5IGRpc2FibGVkLiBcbiIKKwkJImFuZCBoYXMgYmVlbiBwZXJtYW5lbnRseSBkaXNhYmxlZC5cbiIKIAkJIlBsZWFzZSB0cnkgcmVzZWF0aW5nIHRoaXMgZGV2aWNlIG9yIHJlcGxhY2luZyBpdC5cbiIsCiAJCWxvY2F0aW9uLCBkcnZfc3RyLCBwY2lfc3RyLCBmcm96ZW5fcGRuLT5lZWhfZnJlZXplX2NvdW50KTsKIAlnb3RvIHBlcm1fZXJyb3I7CkBAIC00ODgsNyArNDg4LDcgQEAKIGhhcmRfZmFpbDoKIAlwcmludGsoS0VSTl9FUlIKIAkgICAiRUVIOiBVbmFibGUgdG8gcmVjb3ZlciBmcm9tIGZhaWx1cmUgb2YgUENJIGRldmljZSAiCi0JICAgImF0IGxvY2F0aW9uPSVzIGRyaXZlcj0lcyBwY2kgYWRkcj0lcyBcbiIKKwkgICAiYXQgbG9jYXRpb249JXMgZHJpdmVyPSVzIHBjaSBhZGRyPSVzXG4iCiAJICAgIlBsZWFzZSB0cnkgcmVzZWF0aW5nIHRoaXMgZGV2aWNlIG9yIHJlcGxhY2luZyBpdC5cbiIsCiAJCWxvY2F0aW9uLCBkcnZfc3RyLCBwY2lfc3RyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jCmluZGV4IGRkYjgwZjUuLmVjNWRmOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZXZlbnQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2V2ZW50LmMKQEAgLTgwLDcgKzgwLDcgQEAKIAllZWhfbWFya19zbG90KGV2ZW50LT5kbiwgRUVIX01PREVfUkVDT1ZFUklORyk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJFRUg6IERldGVjdGVkIFBDSSBidXMgZXJyb3Igb24gZGV2aWNlICVzXG4iLAotCSAgICAgICBwY2lfbmFtZShldmVudC0+ZGV2KSk7CisJICAgICAgIGVlaF9wY2lfbmFtZShldmVudC0+ZGV2KSk7CiAKIAlwZG4gPSBoYW5kbGVfZWVoX2V2ZW50cyhldmVudCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKaW5kZXggNmVhNDY5OC4uZDFiMTI0ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKQEAgLTM4NywyNCArMzg3LDEyIEBACiAKIHN0YXRpYyBpbnQgcGFyc2VfY2VkZV9wYXJhbWV0ZXJzKHZvaWQpCiB7Ci0JaW50IGNhbGxfc3RhdHVzOwotCiAJbWVtc2V0KGNlZGVfcGFyYW1ldGVycywgMCwgQ0VERV9MQVRFTkNZX1BBUkFNX01BWF9MRU5HVEgpOwotCWNhbGxfc3RhdHVzID0gcnRhc19jYWxsKHJ0YXNfdG9rZW4oImlibSxnZXQtc3lzdGVtLXBhcmFtZXRlciIpLCAzLCAxLAotCQkJCU5VTEwsCi0JCQkJQ0VERV9MQVRFTkNZX1RPS0VOLAotCQkJCV9fcGEoY2VkZV9wYXJhbWV0ZXJzKSwKLQkJCQlDRURFX0xBVEVOQ1lfUEFSQU1fTUFYX0xFTkdUSCk7Ci0KLQlpZiAoY2FsbF9zdGF0dXMgIT0gMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ0VERV9MQVRFTkNZOiBcCi0JCQklcyAlcyBFcnJvciBjYWxsaW5nIGdldC1zeXN0ZW0tcGFyYW1ldGVyKDB4JXgpXG4iLAotCQkJX19GSUxFX18sIF9fZnVuY19fLCBjYWxsX3N0YXR1cyk7Ci0JZWxzZQotCQlwcmludGsoS0VSTl9JTkZPICJDRURFX0xBVEVOQ1k6IFwKLQkJCWdldC1zeXN0ZW0tcGFyYW1ldGVyIHN1Y2Nlc3NmdWwuXG4iKTsKLQotCXJldHVybiBjYWxsX3N0YXR1czsKKwlyZXR1cm4gcnRhc19jYWxsKHJ0YXNfdG9rZW4oImlibSxnZXQtc3lzdGVtLXBhcmFtZXRlciIpLCAzLCAxLAorCQkJIE5VTEwsCisJCQkgQ0VERV9MQVRFTkNZX1RPS0VOLAorCQkJIF9fcGEoY2VkZV9wYXJhbWV0ZXJzKSwKKwkJCSBDRURFX0xBVEVOQ1lfUEFSQU1fTUFYX0xFTkdUSCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHBzZXJpZXNfY3B1X2hvdHBsdWdfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbF9pbnN0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYwppbmRleCAyZjU4YzcxLi4xZmVmYWU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYwpAQCAtMTI0LDggKzEyNCw4IEBACiAKIAloID0gJl9fZ2V0X2NwdV92YXIoaGNhbGxfc3RhdHMpW29wY29kZSAvIDRdOwogCWgtPm51bV9jYWxscysrOwotCWgtPnRiX3RvdGFsID0gbWZ0YigpIC0gaC0+dGJfc3RhcnQ7Ci0JaC0+cHVycl90b3RhbCA9IG1mc3ByKFNQUk5fUFVSUikgLSBoLT5wdXJyX3N0YXJ0OworCWgtPnRiX3RvdGFsICs9IG1mdGIoKSAtIGgtPnRiX3N0YXJ0OworCWgtPnB1cnJfdG90YWwgKz0gbWZzcHIoU1BSTl9QVVJSKSAtIGgtPnB1cnJfc3RhcnQ7CiAKIAlwdXRfY3B1X3ZhcihoY2FsbF9zdGF0cyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpX2RscGFyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpX2RscGFyLmMKaW5kZXggYjZmYTNlNC4uNGI3YTA2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2lfZGxwYXIuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJjLCBpOwogCi0JcHJfZGVidWcoIlBDSTogUmVtb3ZpbmcgUEhCICUwNHg6JTAyeC4uLiBcbiIsCisJcHJfZGVidWcoIlBDSTogUmVtb3ZpbmcgUEhCICUwNHg6JTAyeC4uLlxuIiwKIAkJIHBjaV9kb21haW5fbnIoYiksIGItPm51bWJlcik7CiAKIAkvKiBXZSBjYW5ub3QgdG8gcmVtb3ZlIGEgcm9vdCBidXMgdGhhdCBoYXMgY2hpbGRyZW4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9waHlwX2R1bXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9waHlwX2R1bXAuYwppbmRleCAxNWViNjEwLi4yMjVhNTBhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGh5cF9kdW1wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BoeXBfZHVtcC5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJNYXggYXV0byB0aW1lPSAlZFxuIiwgcGgtPm1heHRpbWVfdG9fYXV0byk7CiAKIAkvKnNldCBjcHUgc3RhdGUgYW5kIGhwdGUgc3RhdGVzIGFzIHdlbGwgc2NyYXRjaCBwYWQgYXJlYSAqLwotCXByaW50ayhLRVJOX0lORk8gIiBDUFUgQVJFQSBcbiIpOworCXByaW50ayhLRVJOX0lORk8gIiBDUFUgQVJFQVxuIik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiY3B1IGR1bXBfZmxhZ3MgPSVkXG4iLCBwaC0+Y3B1X2RhdGEuZHVtcF9mbGFncyk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiY3B1IHNvdXJjZV90eXBlID0lZFxuIiwgcGgtPmNwdV9kYXRhLnNvdXJjZV90eXBlKTsKIAlwcmludGsoS0VSTl9JTkZPICJjcHUgZXJyb3JfZmxhZ3MgPSVkXG4iLCBwaC0+Y3B1X2RhdGEuZXJyb3JfZmxhZ3MpOwpAQCAtMTYxLDcgKzE2MSw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiY3B1IGxlbmd0aF9jb3BpZWQgPSVsbHhcbiIsCiAJCXBoLT5jcHVfZGF0YS5sZW5ndGhfY29waWVkKTsKIAotCXByaW50ayhLRVJOX0lORk8gIiBIUFRFIEFSRUEgXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICIgSFBURSBBUkVBXG4iKTsKIAlwcmludGsoS0VSTl9JTkZPICJIUFRFIGR1bXBfZmxhZ3MgPSVkXG4iLCBwaC0+aHB0ZV9kYXRhLmR1bXBfZmxhZ3MpOwogCXByaW50ayhLRVJOX0lORk8gIkhQVEUgc291cmNlX3R5cGUgPSVkXG4iLCBwaC0+aHB0ZV9kYXRhLnNvdXJjZV90eXBlKTsKIAlwcmludGsoS0VSTl9JTkZPICJIUFRFIGVycm9yX2ZsYWdzID0lZFxuIiwgcGgtPmhwdGVfZGF0YS5lcnJvcl9mbGFncyk7CkBAIC0xNzIsNyArMTcyLDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJIUFRFIGxlbmd0aF9jb3BpZWQgPSVsbHhcbiIsCiAJCXBoLT5ocHRlX2RhdGEubGVuZ3RoX2NvcGllZCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICIgU1JTRCBBUkVBIFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiIFNSU0QgQVJFQVxuIik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiU1JTRCBkdW1wX2ZsYWdzID0lZFxuIiwgcGgtPmtlcm5lbF9kYXRhLmR1bXBfZmxhZ3MpOwogCXByaW50ayhLRVJOX0lORk8gIlNSU0Qgc291cmNlX3R5cGUgPSVkXG4iLCBwaC0+a2VybmVsX2RhdGEuc291cmNlX3R5cGUpOwogCXByaW50ayhLRVJOX0lORk8gIlNSU0QgZXJyb3JfZmxhZ3MgPSVkXG4iLCBwaC0+a2VybmVsX2RhdGEuZXJyb3JfZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCmluZGV4IGI0ODg2NjMuLjRlN2Y4OWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKQEAgLTE0NCw4ICsxNDQsOCBAQAogCQloY3B1aWQgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKG5yKTsKIAkJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9QUk9ELCBoY3B1aWQpOwogCQlpZiAocmMgIT0gSF9TVUNDRVNTKQotCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogUHJvZCB0byB3YWtlIHVwIHByb2Nlc3NvciAlZFwKLQkJCQkJCVJldD0gJWxkXG4iLCBuciwgcmMpOworCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogUHJvZCB0byB3YWtlIHVwIHByb2Nlc3NvciAlZCAiCisJCQkJCQkiUmV0PSAlbGRcbiIsIG5yLCByYyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwppbmRleCBmNWY3OTE5Li40Y2E2NDEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCiAJbHBhcl9yYyA9IHBscGFyX3hpcnIoJnJldHVybl92YWx1ZSk7CiAJaWYgKGxwYXJfcmMgIT0gSF9TVUNDRVNTKQotCQlwYW5pYygiIGJhZCByZXR1cm4gY29kZSB4aXJyIC0gcmMgPSAlbHggXG4iLCBscGFyX3JjKTsKKwkJcGFuaWMoIiBiYWQgcmV0dXJuIGNvZGUgeGlyciAtIHJjID0gJWx4XG4iLCBscGFyX3JjKTsKIAlyZXR1cm4gKHVuc2lnbmVkIGludClyZXR1cm5fdmFsdWU7CiB9CiAKQEAgLTQyNCw3ICs0MjQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhpY3NfcGljX2RpcmVjdCA9IHsKLQkubmFtZSA9ICIgWElDUyAgICAgIiwKKwkubmFtZSA9ICJYSUNTIiwKIAkuc3RhcnR1cCA9IHhpY3Nfc3RhcnR1cCwKIAkubWFzayA9IHhpY3NfbWFza19pcnEsCiAJLnVubWFzayA9IHhpY3NfdW5tYXNrX2lycSwKQEAgLTQzMyw3ICs0MzMsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4aWNzX3BpY19scGFyID0gewotCS5uYW1lID0gIiBYSUNTICAgICAiLAorCS5uYW1lID0gIlhJQ1MiLAogCS5zdGFydHVwID0geGljc19zdGFydHVwLAogCS5tYXNrID0geGljc19tYXNrX2lycSwKIAkudW5tYXNrID0geGljc191bm1hc2tfaXJxLApAQCAtNTEwLDE1ICs1MTAsMTMgQEAKIC8qCiAgKiBYSUNTIG9ubHkgaGFzIGEgc2luZ2xlIElQSSwgc28gZW5jb2RlIHRoZSBtZXNzYWdlcyBwZXIgQ1BVCiAgKi8KLXN0cnVjdCB4aWNzX2lwaV9zdHJ1Y3QgewotICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlOwotCX0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwotCi1zdGF0aWMgc3RydWN0IHhpY3NfaXBpX3N0cnVjdCB4aWNzX2lwaV9tZXNzYWdlW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CitzdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQodW5zaWduZWQgbG9uZywgeGljc19pcGlfbWVzc2FnZSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfeGljc19kb19tZXNzYWdlKGludCBjcHUsIGludCBtc2cpCiB7Ci0Jc2V0X2JpdChtc2csICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpOworCXVuc2lnbmVkIGxvbmcgKnRndCA9ICZwZXJfY3B1KHhpY3NfaXBpX21lc3NhZ2UsIGNwdSk7CisKKwlzZXRfYml0KG1zZywgdGd0KTsKIAltYigpOwogCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQogCQlscGFyX3FpcnJfaW5mbyhjcHUsIElQSV9QUklPUklUWSk7CkBAIC01NDQsMjUgKzU0MiwyMyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgeGljc19pcGlfZGlzcGF0Y2goaW50IGNwdSkKIHsKKwl1bnNpZ25lZCBsb25nICp0Z3QgPSAmcGVyX2NwdSh4aWNzX2lwaV9tZXNzYWdlLCBjcHUpOworCiAJV0FSTl9PTihjcHVfaXNfb2ZmbGluZShjcHUpKTsKIAogCW1iKCk7CS8qIG9yZGVyIG1taW8gY2xlYXJpbmcgcWlyciAqLwotCXdoaWxlICh4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ1RJT04sCi0JCQkJICAgICAgICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpKSB7CisJd2hpbGUgKCp0Z3QpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ1RJT04sIHRndCkpIHsKIAkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19DQUxMX0ZVTkNUSU9OKTsKIAkJfQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfUkVTQ0hFRFVMRSwKLQkJCQkgICAgICAgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX1JFU0NIRURVTEUsIHRndCkpIHsKIAkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19SRVNDSEVEVUxFKTsKIAkJfQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfQ0FMTF9GVU5DX1NJTkdMRSwKLQkJCQkgICAgICAgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ19TSU5HTEUsIHRndCkpIHsKIAkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19DQUxMX0ZVTkNfU0lOR0xFKTsKIAkJfQogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHR0VSKSB8fCBkZWZpbmVkKENPTkZJR19LRVhFQykKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0RFQlVHR0VSX0JSRUFLLAotCQkJCSAgICAgICAmeGljc19pcGlfbWVzc2FnZVtjcHVdLnZhbHVlKSkgeworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfREVCVUdHRVJfQlJFQUssIHRndCkpIHsKIAkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19ERUJVR0dFUl9CUkVBSyk7CiAJCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0xLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYwppbmRleCBhNGI0MWRiLi5lY2FkMTBkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYwpAQCAtNzcsNyArNzcsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNwbV9waWMgPSB7Ci0JLm5hbWUgPSAiIENQTSBQSUMgIiwKKwkubmFtZSA9ICJDUE0gUElDIiwKIAkubWFzayA9IGNwbV9tYXNrX2lycSwKIAkudW5tYXNrID0gY3BtX3VubWFza19pcnEsCiAJLmVvaSA9IGNwbV9lbmRfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jCmluZGV4IDE3MDlhYzUuLmZjZWE0ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMl9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTJfcGljLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNwbTJfcGljID0gewotCS5uYW1lID0gIiBDUE0yIFNJVSAiLAorCS5uYW1lID0gIkNQTTIgU0lVIiwKIAkubWFzayA9IGNwbTJfbWFza19pcnEsCiAJLnVubWFzayA9IGNwbTJfdW5tYXNrX2lycSwKIAkuYWNrID0gY3BtMl9hY2ssCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCmluZGV4IGM2ZTExYjAuLmUwOTQzNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJLm1hc2sJCT0gbWFza19tc2lfaXJxLAogCS51bm1hc2sJCT0gdW5tYXNrX21zaV9pcnEsCiAJLmFjawkJPSBmc2xfbXNpX2VuZF9pcnEsCi0JLm5hbWUJPSAiIEZTTC1NU0kgICIsCisJLm5hbWUJCT0gIkZTTC1NU0kiLAogfTsKIAogc3RhdGljIGludCBmc2xfbXNpX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2dyYWNrbGUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZ3JhY2tsZS5jCmluZGV4IDVkYTM3YzIuLmNmMjdkZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZ3JhY2tsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZ3JhY2tsZS5jCkBAIC01Niw5ICs1Niw5IEBACiB2b2lkIF9faW5pdCBzZXR1cF9ncmFja2xlKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKIHsKIAlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwgMHhmZWMwMDAwMCwgMHhmZWUwMDAwMCwgMCk7Ci0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxLDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzEsMSIpKQogCQlwcGNfcGNpX2FkZF9mbGFncyhQUENfUENJX1JFQVNTSUdOX0FMTF9CVVMpOwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsUG93ZXJCb29rMTk5OCIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsUG93ZXJCb29rMTk5OCIpKQogCQlncmFja2xlX3NldF9sb29wX3Nub29wKGhvc2UsIDEpOwogI2lmIDAJLyogRGlzYWJsZWQgZm9yIG5vdywgSFcgcHJvYmxlbXMgPz8/ICovCiAJZ3JhY2tsZV9zZXRfc3RnKGhvc2UsIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pODI1OS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pODI1OS5jCmluZGV4IDBhNTVkYjguLjYzMjNlNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaTgyNTkuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2k4MjU5LmMKQEAgLTIzLDcgKzIzLDcgQEAKICNkZWZpbmUgY2FjaGVkX0ExIChjYWNoZWRfODI1OVswXSkKICNkZWZpbmUgY2FjaGVkXzIxIChjYWNoZWRfODI1OVsxXSkKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhpODI1OV9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGk4MjU5X2xvY2spOwogCiBzdGF0aWMgc3RydWN0IGlycV9ob3N0ICppODI1OV9ob3N0OwogCkBAIC00Miw3ICs0Miw3IEBACiAJaWYgKHBjaV9pbnRhY2spCiAJCWlycSA9IHJlYWRiKHBjaV9pbnRhY2spOwogCWVsc2UgewotCQlzcGluX2xvY2soJmk4MjU5X2xvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZpODI1OV9sb2NrKTsKIAkJbG9jayA9IDE7CiAKIAkJLyogUGVyZm9ybSBhbiBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UgY3ljbGUgb24gY29udHJvbGxlciAxLiAqLwpAQCAtNzQsNyArNzQsNyBAQAogCQlpcnEgPSBOT19JUlE7CiAKIAlpZiAobG9jaykKLQkJc3Bpbl91bmxvY2soJmk4MjU5X2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJmk4MjU5X2xvY2spOwogCXJldHVybiBpcnE7CiB9CiAKQEAgLTgyLDcgKzgyLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKIAlpZiAoaXJxX25yID4gNykgewogCQljYWNoZWRfQTEgfD0gMSA8PCAoaXJxX25yLTgpOwogCQlpbmIoMHhBMSk7IAkvKiBEVU1NWSAqLwpAQCAtOTUsNyArOTUsNyBAQAogCQlvdXRiKGNhY2hlZF8yMSwgMHgyMSk7CiAJCW91dGIoMHgyMCwgMHgyMCk7CS8qIE5vbi1zcGVjaWZpYyBFT0kgKi8KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGk4MjU5X3NldF9pcnFfbWFzayhpbnQgaXJxX25yKQpAQCAtMTEwLDEzICsxMTAsMTMgQEAKIAogCXByX2RlYnVnKCJpODI1OV9tYXNrX2lycSglZClcbiIsIGlycV9ucik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlfbG9jaywgZmxhZ3MpOwogCWlmIChpcnFfbnIgPCA4KQogCQljYWNoZWRfMjEgfD0gMSA8PCBpcnFfbnI7CiAJZWxzZQogCQljYWNoZWRfQTEgfD0gMSA8PCAoaXJxX25yLTgpOwogCWk4MjU5X3NldF9pcnFfbWFzayhpcnFfbnIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBpODI1OV91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnFfbnIpCkBAIC0xMjUsMTcgKzEyNSwxNyBAQAogCiAJcHJfZGVidWcoImk4MjU5X3VubWFza19pcnEoJWQpXG4iLCBpcnFfbnIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKIAlpZiAoaXJxX25yIDwgOCkKIAkJY2FjaGVkXzIxICY9IH4oMSA8PCBpcnFfbnIpOwogCWVsc2UKIAkJY2FjaGVkX0ExICY9IH4oMSA8PCAoaXJxX25yLTgpKTsKIAlpODI1OV9zZXRfaXJxX21hc2soaXJxX25yKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5X2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpODI1OV9waWMgPSB7Ci0JLm5hbWUJCT0gIiBpODI1OSAgICAiLAorCS5uYW1lCQk9ICJpODI1OSIsCiAJLm1hc2sJCT0gaTgyNTlfbWFza19pcnEsCiAJLmRpc2FibGUJPSBpODI1OV9tYXNrX2lycSwKIAkudW5tYXNrCQk9IGk4MjU5X3VubWFza19pcnEsCkBAIC0yNDEsNyArMjQxLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogaW5pdGlhbGl6ZSB0aGUgY29udHJvbGxlciAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OV9sb2NrLCBmbGFncyk7CiAKIAkvKiBNYXNrIGFsbCBmaXJzdCAqLwogCW91dGIoMHhmZiwgMHhBMSk7CkBAIC0yNzMsNyArMjczLDcgQEAKIAlvdXRiKGNhY2hlZF9BMSwgMHhBMSk7CiAJb3V0YihjYWNoZWRfMjEsIDB4MjEpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OV9sb2NrLCBmbGFncyk7CiAKIAkvKiBjcmVhdGUgYSBsZWdhY3kgaG9zdCAqLwogCWk4MjU5X2hvc3QgPSBpcnFfYWxsb2NfaG9zdChub2RlLCBJUlFfSE9TVF9NQVBfTEVHQUNZLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYwppbmRleCAyOGNkZGRkLi5kN2I5YjljIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYwpAQCAtMzIsNyArMzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlwaWMgKiBwcmltYXJ5X2lwaWM7CiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlwaWNfbGV2ZWxfaXJxX2NoaXAsIGlwaWNfZWRnZV9pcnFfY2hpcDsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXBpY19sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGlwaWNfbG9jayk7CiAKIHN0YXRpYyBzdHJ1Y3QgaXBpY19pbmZvIGlwaWNfaW5mb1tdID0gewogCVsxXSA9IHsKQEAgLTUzMCwxMyArNTMwLDEzIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGVtcDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogCiAJdGVtcCA9IGlwaWNfcmVhZChpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5tYXNrKTsKIAl0ZW1wIHw9ICgxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOwogCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10ubWFzaywgdGVtcCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBpY19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwaWNfbWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCkBAIC01NDYsNyArNTQ2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXBpY19sb2NrLCBmbGFncyk7CiAKIAl0ZW1wID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLm1hc2spOwogCXRlbXAgJj0gfigxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOwpAQCAtNTU2LDcgKzU1Niw3IEBACiAJICogZm9yIG5lYXJseSBhbGwgY2FzZXMuICovCiAJbWIoKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgaXBpY19hY2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQpAQCAtNTY2LDcgKzU2Niw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGVtcDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogCiAJdGVtcCA9IDEgPDwgKDMxIC0gaXBpY19pbmZvW3NyY10uYml0KTsKIAlpcGljX3dyaXRlKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLmFjaywgdGVtcCk7CkBAIC01NzUsNyArNTc1LDcgQEAKIAkgKiBmb3IgbmVhcmx5IGFsbCBjYXNlcy4gKi8KIAltYigpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBpcGljX21hc2tfaXJxX2FuZF9hY2sodW5zaWduZWQgaW50IHZpcnEpCkBAIC01ODUsNyArNTg1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXBpY19sb2NrLCBmbGFncyk7CiAKIAl0ZW1wID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLm1hc2spOwogCXRlbXAgJj0gfigxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOwpAQCAtNTk4LDcgKzU5OCw3IEBACiAJICogZm9yIG5lYXJseSBhbGwgY2FzZXMuICovCiAJbWIoKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBpcGljX3NldF9pcnFfdHlwZSh1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKQEAgLTY2MCw3ICs2NjAsNyBAQAogCiAvKiBsZXZlbCBpbnRlcnJ1cHRzIGFuZCBlZGdlIGludGVycnVwdHMgaGF2ZSBkaWZmZXJlbnQgYWNrIG9wZXJhdGlvbnMgKi8KIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXBpY19sZXZlbF9pcnFfY2hpcCA9IHsKLQkubmFtZQkJPSAiIElQSUMgICIsCisJLm5hbWUJCT0gIklQSUMiLAogCS51bm1hc2sJCT0gaXBpY191bm1hc2tfaXJxLAogCS5tYXNrCQk9IGlwaWNfbWFza19pcnEsCiAJLm1hc2tfYWNrCT0gaXBpY19tYXNrX2lycSwKQEAgLTY2OCw3ICs2NjgsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcGljX2VkZ2VfaXJxX2NoaXAgPSB7Ci0JLm5hbWUJCT0gIiBJUElDICAiLAorCS5uYW1lCQk9ICJJUElDIiwKIAkudW5tYXNrCQk9IGlwaWNfdW5tYXNrX2lycSwKIAkubWFzawkJPSBpcGljX21hc2tfaXJxLAogCS5tYXNrX2Fjawk9IGlwaWNfbWFza19pcnFfYW5kX2FjaywKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4X3BpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMKaW5kZXggNjliZDZmNC4uOGMyN2QyNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHhfcGljLmMKQEAgLTk0LDcgKzk0LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtcGM4eHhfcGljID0gewotCS5uYW1lID0gIiBNUEM4WFggU0lVICIsCisJLm5hbWUgPSAiTVBDOFhYIFNJVSIsCiAJLnVubWFzayA9IG1wYzh4eF91bm1hc2tfaXJxLAogCS5tYXNrID0gbXBjOHh4X21hc2tfaXJxLAogCS5hY2sgPSBtcGM4eHhfYWNrLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYwppbmRleCA0NzBkYzZjLi4zMzllOGEzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYwpAQCAtNDYsNyArNDYsNyBAQAogCiBzdGF0aWMgc3RydWN0IG1waWMgKm1waWNzOwogc3RhdGljIHN0cnVjdCBtcGljICptcGljX3ByaW1hcnk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1waWNfbG9jayk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhtcGljX2xvY2spOwogCiAjaWZkZWYgQ09ORklHX1BQQzMyCS8qIFhYWCBmb3Igbm93ICovCiAjaWZkZWYgQ09ORklHX0lSUV9BTExfQ1BVUwpAQCAtMzQ3LDEwICszNDcsMTAgQEAKIAkJdW5zaWduZWQgaW50IG1hc2sgPSAxVSA8PCAoZml4dXAtPmluZGV4ICYgMHgxZik7CiAJCXdyaXRlbChtYXNrLCBmaXh1cC0+YXBwbGViYXNlICsgc29mZik7CiAJfSBlbHNlIHsKLQkJc3Bpbl9sb2NrKCZtcGljLT5maXh1cF9sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmbXBpYy0+Zml4dXBfbG9jayk7CiAJCXdyaXRlYigweDExICsgMiAqIGZpeHVwLT5pbmRleCwgZml4dXAtPmJhc2UgKyAyKTsKIAkJd3JpdGVsKGZpeHVwLT5kYXRhLCBmaXh1cC0+YmFzZSArIDQpOwotCQlzcGluX3VubG9jaygmbXBpYy0+Zml4dXBfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmbXBpYy0+Zml4dXBfbG9jayk7CiAJfQogfQogCkBAIC0zNjYsNyArMzY2LDcgQEAKIAogCURCRygic3RhcnR1cF9odF9pbnRlcnJ1cHQoMHgleCwgMHgleCkgaW5kZXg6ICVkXG4iLAogCSAgICBzb3VyY2UsIGlycWZsYWdzLCBmaXh1cC0+aW5kZXgpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljLT5maXh1cF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZtcGljLT5maXh1cF9sb2NrLCBmbGFncyk7CiAJLyogRW5hYmxlIGFuZCBjb25maWd1cmUgKi8KIAl3cml0ZWIoMHgxMCArIDIgKiBmaXh1cC0+aW5kZXgsIGZpeHVwLT5iYXNlICsgMik7CiAJdG1wID0gcmVhZGwoZml4dXAtPmJhc2UgKyA0KTsKQEAgLTM3NCw3ICszNzQsNyBAQAogCWlmIChpcnFmbGFncyAmIElSUV9MRVZFTCkKIAkJdG1wIHw9IDB4MjI7CiAJd3JpdGVsKHRtcCwgZml4dXAtPmJhc2UgKyA0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljLT5maXh1cF9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWMtPmZpeHVwX2xvY2ssIGZsYWdzKTsKIAogI2lmZGVmIENPTkZJR19QTQogCS8qIHVzZSB0aGUgbG93ZXN0IGJpdCBpbnZlcnRlZCB0byB0aGUgYWN0dWFsIEhXLApAQCAtMzk2LDEyICszOTYsMTIgQEAKIAlEQkcoInNodXRkb3duX2h0X2ludGVycnVwdCgweCV4LCAweCV4KVxuIiwgc291cmNlLCBpcnFmbGFncyk7CiAKIAkvKiBEaXNhYmxlICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1waWMtPmZpeHVwX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm1waWMtPmZpeHVwX2xvY2ssIGZsYWdzKTsKIAl3cml0ZWIoMHgxMCArIDIgKiBmaXh1cC0+aW5kZXgsIGZpeHVwLT5iYXNlICsgMik7CiAJdG1wID0gcmVhZGwoZml4dXAtPmJhc2UgKyA0KTsKIAl0bXAgfD0gMTsKIAl3cml0ZWwodG1wLCBmaXh1cC0+YmFzZSArIDQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWMtPmZpeHVwX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpYy0+Zml4dXBfbG9jaywgZmxhZ3MpOwogCiAjaWZkZWYgQ09ORklHX1BNCiAJLyogdXNlIHRoZSBsb3dlc3QgYml0IGludmVydGVkIHRvIHRoZSBhY3R1YWwgSFcsCkBAIC01MTUsNyArNTE1LDcgQEAKIAlCVUdfT04obXBpYy0+Zml4dXBzID09IE5VTEwpOwogCiAJLyogSW5pdCBzcGlubG9jayAqLwotCXNwaW5fbG9ja19pbml0KCZtcGljLT5maXh1cF9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrX2luaXQoJm1waWMtPmZpeHVwX2xvY2spOwogCiAJLyogTWFwIFUzIGNvbmZpZyBzcGFjZS4gV2UgYXNzdW1lIGFsbCBJTy1BUElDcyBhcmUgb24gdGhlIHByaW1hcnkgYnVzCiAJICogc28gd2Ugb25seSBuZWVkIHRvIG1hcCA2NGtCLgpAQCAtNTczLDEyICs1NzMsMTIgQEAKIAogCWlmIChjcHVtYXNrX2VxdWFsKG1hc2ssIGNwdV9hbGxfbWFzaykpIHsKIAkJc3RhdGljIGludCBpcnFfcm92ZXI7Ci0JCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXJxX3JvdmVyX2xvY2spOworCQlzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhpcnFfcm92ZXJfbG9jayk7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkJLyogUm91bmQtcm9iaW4gZGlzdHJpYnV0aW9uLi4uICovCiAJZG9fcm91bmRfcm9iaW46Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfcm92ZXJfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9yb3Zlcl9sb2NrLCBmbGFncyk7CiAKIAkJd2hpbGUgKCFjcHVfb25saW5lKGlycV9yb3ZlcikpIHsKIAkJCWlmICgrK2lycV9yb3ZlciA+PSBOUl9DUFVTKQpAQCAtNTkwLDcgKzU5MCw3IEBACiAJCQkJaXJxX3JvdmVyID0gMDsKIAkJfSB3aGlsZSAoIWNwdV9vbmxpbmUoaXJxX3JvdmVyKSk7CiAKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX3JvdmVyX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9yb3Zlcl9sb2NrLCBmbGFncyk7CiAJfSBlbHNlIHsKIAkJY3B1aWQgPSBjcHVtYXNrX2ZpcnN0X2FuZChtYXNrLCBjcHVfb25saW5lX21hc2spOwogCQlpZiAoY3B1aWQgPj0gbnJfY3B1X2lkcykKQEAgLTEzNjgsMTQgKzEzNjgsMTQgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB2OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbXBpY19sb2NrLCBmbGFncyk7CiAJdiA9IG1waWNfcmVhZChtcGljLT5ncmVncywgTVBJQ19HUkVHX0dMT0JBTF9DT05GXzEpOwogCWlmIChlbmFibGUpCiAJCXYgfD0gTVBJQ19HUkVHX0dMT0JBTF9DT05GXzFfU0lFOwogCWVsc2UKIAkJdiAmPSB+TVBJQ19HUkVHX0dMT0JBTF9DT05GXzFfU0lFOwogCW1waWNfd3JpdGUobXBpYy0+Z3JlZ3MsIE1QSUNfR1JFR19HTE9CQUxfQ09ORl8xLCB2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpY19sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgbXBpY19pcnFfc2V0X3ByaW9yaXR5KHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBwcmkpCkBAIC0xMzg4LDcgKzEzODgsNyBAQAogCWlmICghbXBpYykKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbXBpY19sb2NrLCBmbGFncyk7CiAJaWYgKG1waWNfaXNfaXBpKG1waWMsIGlycSkpIHsKIAkJcmVnID0gbXBpY19pcGlfcmVhZChzcmMgLSBtcGljLT5pcGlfdmVjc1swXSkgJgogCQkJfk1QSUNfVkVDUFJJX1BSSU9SSVRZX01BU0s7CkBAIC0xNDAwLDcgKzE0MDAsNyBAQAogCQltcGljX2lycV93cml0ZShzcmMsIE1QSUNfSU5GTyhJUlFfVkVDVE9SX1BSSSksCiAJCQkgICAgICAgcmVnIHwgKHByaSA8PCBNUElDX1ZFQ1BSSV9QUklPUklUWV9TSElGVCkpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpY19sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgbXBpY19zZXR1cF90aGlzX2NwdSh2b2lkKQpAQCAtMTQxNSw3ICsxNDE1LDcgQEAKIAogCURCRygiJXM6IHNldHVwX3RoaXNfY3B1KCVkKVxuIiwgbXBpYy0+bmFtZSwgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbXBpY19sb2NrLCBmbGFncyk7CiAKICAJLyogbGV0IHRoZSBtcGljIGtub3cgd2Ugd2FudCBpbnRycy4gZGVmYXVsdCBhZmZpbml0eSBpcyAweGZmZmZmZmZmCiAJICogdW50aWwgY2hhbmdlZCB2aWEgL3Byb2MuIFRoYXQncyBob3cgaXQncyBkb25lIG9uIHg4Ni4gSWYgd2Ugd2FudApAQCAtMTQzMSw3ICsxNDMxLDcgQEAKIAkvKiBTZXQgY3VycmVudCBwcm9jZXNzb3IgcHJpb3JpdHkgdG8gMCAqLwogCW1waWNfY3B1X3dyaXRlKE1QSUNfSU5GTyhDUFVfQ1VSUkVOVF9UQVNLX1BSSSksIDApOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIH0KIApAQCAtMTQ2MCw3ICsxNDYwLDcgQEAKIAlCVUdfT04obXBpYyA9PSBOVUxMKTsKIAogCURCRygiJXM6IHRlYXJkb3duX3RoaXNfY3B1KCVkKVxuIiwgbXBpYy0+bmFtZSwgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJm1waWNfbG9jaywgZmxhZ3MpOwogCiAJLyogbGV0IHRoZSBtcGljIGtub3cgd2UgZG9uJ3Qgd2FudCBpbnRycy4gICovCiAJZm9yIChpID0gMDsgaSA8IG1waWMtPm51bV9zb3VyY2VzIDsgaSsrKQpAQCAtMTQ3NCw3ICsxNDc0LDcgQEAKIAkgKi8KIAltcGljX2VvaShtcGljKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogCkBAIC0xNTc1LDcgKzE1NzUsNyBAQAogCWludCBpOwogCUJVR19PTihtcGljID09IE5VTEwpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAibXBpYzogcmVxdWVzdGluZyBJUElzIC4uLiBcbiIpOworCXByaW50ayhLRVJOX0lORk8gIm1waWM6IHJlcXVlc3RpbmcgSVBJcy4uLlxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCB2aXBpID0gaXJxX2NyZWF0ZV9tYXBwaW5nKG1waWMtPmlycWhvc3QsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYwppbmRleCAwZjZhYjA2Li4zYjZhOWE0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19wYXNlbWlfbXNpLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAkuZW9pCQk9IG1waWNfZW5kX2lycSwKIAkuc2V0X3R5cGUJPSBtcGljX3NldF9pcnFfdHlwZSwKIAkuc2V0X2FmZmluaXR5CT0gbXBpY19zZXRfYWZmaW5pdHksCi0JLm5hbWUJCT0gIlBBU0VNSS1NU0kgIiwKKwkubmFtZQkJPSAiUEFTRU1JLU1TSSIsCiB9OwogCiBzdGF0aWMgaW50IHBhc2VtaV9tc2lfY2hlY2tfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfZGV2LmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfZGV2LmMKaW5kZXggYjZiZDc3NS4uMzFhY2QzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX2Rldi5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9kZXYuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L212NjQzeHguaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogCkBAIC0xODksNiArMTkwLDcgQEAKIAlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKE1QU0NfQ1RMUl9OQU1FLCBwb3J0X251bWJlcik7CiAJaWYgKCFwZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKKwlwZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOwogCiAJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgciwgNSk7CiAJaWYgKGVycikKQEAgLTMwMiw2ICszMDQsNyBAQAogCWlmICghcGRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlwZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOwogCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHIsIDEpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9zb2MuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X3NvYy5jCmluZGV4IDViMzJhZGMuLjVjMDE0MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X3NvYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X3NvYy5jCkBAIC0xNzQsNyArMTc0LDggQEAKIAkJfCBMMkNfQ0ZHX0NQSU0gfCBMMkNfQ0ZHX1RQSU0gfCBMMkNfQ0ZHX0xJTSB8IEwyQ19DRkdfU01DTTsKIAogCS8qIENoZWNrIGZvciA0NjBFWC9HVCBzcGVjaWFsIGhhbmRsaW5nICovCi0JaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaWJtLGwyLWNhY2hlLTQ2MGV4IikpCisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaWJtLGwyLWNhY2hlLTQ2MGV4IikgfHwKKwkgICAgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJpYm0sbDItY2FjaGUtNDYwZ3QiKSkKIAkJciB8PSBMMkNfQ0ZHX1JEQlc7CiAKIAltdGRjcihkY3JiYXNlX2wyYyArIERDUk5fTDJDMF9DRkcsIHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2ljLmMKaW5kZXggMmFjYzkyOC4uZDkyN2RhOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pYy5jCkBAIC0yMzcsNyArMjM3LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBxZV9pY19pcnFfY2hpcCA9IHsKLQkubmFtZSA9ICIgUUVJQyAgIiwKKwkubmFtZSA9ICJRRUlDIiwKIAkudW5tYXNrID0gcWVfaWNfdW5tYXNrX2lycSwKIAkubWFzayA9IHFlX2ljX21hc2tfaXJxLAogCS5tYXNrX2FjayA9IHFlX2ljX21hc2tfaXJxLApAQCAtMjU2LDcgKzI1Niw3IEBACiAJc3RydWN0IGlycV9jaGlwICpjaGlwOwogCiAJaWYgKHFlX2ljX2luZm9baHddLm1hc2sgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IG1hcCByZXNlcnZlZCBJUlEgXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBtYXAgcmVzZXJ2ZWQgSVJRXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCS8qIERlZmF1bHQgY2hpcCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaW8uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2lvLmMKaW5kZXggN2M4NzQ2MC4uNzdlNDkzNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaW8uYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pby5jCkBAIC0xNTcsMTMgKzE1NywxMyBAQAogCWNvbnN0IHVuc2lnbmVkIGludCAqcGlvX21hcDsKIAogCWlmIChwYXJfaW8gPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgInBhcl9pbyBub3QgaW5pdGlhbGl6ZWQgXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJwYXJfaW8gbm90IGluaXRpYWxpemVkXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCXBoID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicGlvLWhhbmRsZSIsIE5VTEwpOwogCWlmIChwaCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGlvLWhhbmRsZSBub3QgYXZhaWxhYmxlIFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAicGlvLWhhbmRsZSBub3QgYXZhaWxhYmxlXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTcxLDEyICsxNzEsMTIgQEAKIAogCXBpb19tYXAgPSBvZl9nZXRfcHJvcGVydHkocGlvLCAicGlvLW1hcCIsICZwaW9fbWFwX2xlbik7CiAJaWYgKHBpb19tYXAgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgInBpby1tYXAgaXMgbm90IHNldCEgXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJwaW8tbWFwIGlzIG5vdCBzZXQhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlwaW9fbWFwX2xlbiAvPSBzaXplb2YodW5zaWduZWQgaW50KTsKIAlpZiAoKHBpb19tYXBfbGVuICUgNikgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgInBpby1tYXAgZm9ybWF0IHdyb25nISBcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInBpby1tYXAgZm9ybWF0IHdyb25nIVxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvdWljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3VpYy5jCmluZGV4IDZmMjIwYTkuLjAwMzhmYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvdWljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi91aWMuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgdWljX2lycV9jaGlwID0gewotCS5uYW1lCQk9ICIgVUlDICAiLAorCS5uYW1lCQk9ICJVSUMiLAogCS51bm1hc2sJCT0gdWljX3VubWFza19pcnEsCiAJLm1hc2sJCT0gdWljX21hc2tfaXJxLAogIAkubWFza19hY2sJPSB1aWNfbWFza19hY2tfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCmluZGV4IDRlNjE1MmMuLjhiYWQ3ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYworKysgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKQEAgLTYxLDcgKzYxLDcgQEAKIHN0YXRpYyBpbnQgeG1vbl9nYXRlOwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5feG1vbiA9IDA7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbl94bW9uIF9fcmVhZF9tb3N0bHkgPSAwOwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBhZHJzOwogc3RhdGljIGludCBzaXplID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggYzgwMjM1Mi4uMGQ4Y2Q5YiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTU0LDYgKzU0LDkgQEAKIAlkZXBlbmRzIG9uIEJVRwogCWRlZmF1bHQgeQogCitjb25maWcgR0VORVJJQ19CVUdfUkVMQVRJVkVfUE9JTlRFUlMKKwlkZWZfYm9vbCB5CisKIGNvbmZpZyBOT19JT01FTQogCWRlZl9ib29sIHkKIApAQCAtODcsNiArOTAsNyBAQAogCXNlbGVjdCBIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFMKIAlzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRQogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorCXNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUEkKIAlzZWxlY3QgSEFWRV9ERUZBVUxUX05PX1NQSU5fTVVURVhFUwogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfS1BST0JFUwpAQCAtOTUsNiArOTksOSBAQAogCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCiAJc2VsZWN0IElOSVRfQUxMX1BPU1NJQkxFCiAJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFMKKwlzZWxlY3QgSEFWRV9LRVJORUxfR1pJUAorCXNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMgorCXNlbGVjdCBIQVZFX0tFUk5FTF9MWk1BCiAJc2VsZWN0IEFSQ0hfSU5MSU5FX1NQSU5fVFJZTE9DSwogCXNlbGVjdCBBUkNIX0lOTElORV9TUElOX1RSWUxPQ0tfQkgKIAlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9MT0NLCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvczM5MC9LY29uZmlnLmRlYnVnCmluZGV4IDIyODM5MzMuLjQ1ZTBjNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnLmRlYnVnCkBAIC02LDQgKzYsMTcgQEAKIAogc291cmNlICJsaWIvS2NvbmZpZy5kZWJ1ZyIKIAorY29uZmlnIERFQlVHX1NUUklDVF9VU0VSX0NPUFlfQ0hFQ0tTCisJYm9vbCAiU3RyaWN0IHVzZXIgY29weSBzaXplIGNoZWNrcyIKKwktLS1oZWxwLS0tCisJICBFbmFibGluZyB0aGlzIG9wdGlvbiB0dXJucyBhIGNlcnRhaW4gc2V0IG9mIHNhbml0eSBjaGVja3MgZm9yIHVzZXIKKwkgIGNvcHkgb3BlcmF0aW9ucyBpbnRvIGNvbXBpbGUgdGltZSB3YXJuaW5ncy4KKworCSAgVGhlIGNvcHlfZnJvbV91c2VyKCkgZXRjIGNoZWNrcyBhcmUgdGhlcmUgdG8gaGVscCB0ZXN0IGlmIHRoZXJlCisJICBhcmUgc3VmZmljaWVudCBzZWN1cml0eSBjaGVja3Mgb24gdGhlIGxlbmd0aCBhcmd1bWVudCBvZgorCSAgdGhlIGNvcHkgb3BlcmF0aW9uLCBieSBoYXZpbmcgZ2NjIHByb3ZlIHRoYXQgdGhlIGFyZ3VtZW50IGlzCisJICB3aXRoaW4gYm91bmRzLgorCisJICBJZiB1bnN1cmUsIG9yIGlmIHlvdSBydW4gYW4gb2xkZXIgKHByZSA0LjQpIGdjYywgc2F5IE4uCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9NYWtlZmlsZSBiL2FyY2gvczM5MC9NYWtlZmlsZQppbmRleCBmYzhmYjIwLi4wZGExMDc0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL01ha2VmaWxlCkBAIC0xNCw2ICsxNCw3IEBACiAjCiAKIGlmbmRlZiBDT05GSUdfNjRCSVQKK0xEX0JGRAkJOj0gZWxmMzItczM5MAogTERGTEFHUwkJOj0gLW0gZWxmX3MzOTAKIEtCVUlMRF9DRkxBR1MJKz0gLW0zMQogS0JVSUxEX0FGTEFHUwkrPSAtbTMxCkBAIC0yMSw2ICsyMiw3IEBACiBTVEFDS19TSVpFCTo9IDgxOTIKIENIRUNLRkxBR1MJKz0gLURfX3MzOTBfXyAtbXNpemUtbG9uZwogZWxzZQorTERfQkZECQk6PSBlbGY2NC1zMzkwCiBMREZMQUdTCQk6PSAtbSBlbGY2NF9zMzkwCiBNT0RGTEFHUwkrPSAtZnBpYyAtRF9fUElDX18KIEtCVUlMRF9DRkxBR1MJKz0gLW02NApAQCAtMzAsNiArMzIsOCBAQAogQ0hFQ0tGTEFHUwkrPSAtRF9fczM5MF9fIC1EX19zMzkweF9fCiBlbmRpZgogCitleHBvcnQgTERfQkZECisKIGNmbGFncy0kKENPTkZJR19NQVJDSF9HNSkgICArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1nNSkKIGNmbGFncy0kKENPTkZJR19NQVJDSF9aOTAwKSArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD16OTAwKQogY2ZsYWdzLSQoQ09ORklHX01BUkNIX1o5OTApICs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPXo5OTApCkBAIC04NSw3ICs4OSw5IEBACiBPQkpDT1BZRkxBR1MJOj0gLU8gYmluYXJ5CiBMREZMQUdTX3ZtbGludXggOj0gLWUgc3RhcnQKIAotaGVhZC15CQk6PSBhcmNoL3MzOTAva2VybmVsL2hlYWQubyBhcmNoL3MzOTAva2VybmVsL2luaXRfdGFzay5vCitoZWFkLXkJCTo9IGFyY2gvczM5MC9rZXJuZWwvaGVhZC5vCitoZWFkLXkJCSs9IGFyY2gvczM5MC9rZXJuZWwvJChpZiAkKENPTkZJR182NEJJVCksaGVhZDY0Lm8saGVhZDMxLm8pCitoZWFkLXkJCSs9IGFyY2gvczM5MC9rZXJuZWwvaW5pdF90YXNrLm8KIAogY29yZS15CQkrPSBhcmNoL3MzOTAvbW0vIGFyY2gvczM5MC9rZXJuZWwvIGFyY2gvczM5MC9jcnlwdG8vIFwKIAkJICAgYXJjaC9zMzkwL2FwcGxkYXRhLyBhcmNoL3MzOTAvaHlwZnMvIGFyY2gvczM5MC9rdm0vCkBAIC05OSwxMiArMTA1LDEyIEBACiAKIGJvb3QJCTo9IGFyY2gvczM5MC9ib290CiAKLWFsbDogaW1hZ2UKK2FsbDogaW1hZ2UgYnpJbWFnZQogCiBpbnN0YWxsOiB2bWxpbnV4CiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSAkQAogCi1pbWFnZTogdm1saW51eAoraW1hZ2UgYnpJbWFnZTogdm1saW51eAogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgJChib290KS8kQAogCiB6ZmNwZHVtcDoKQEAgLTExNiw0ICsxMjIsNSBAQAogIyBEb24ndCB1c2UgdGFicyBpbiBlY2hvIGFyZ3VtZW50cwogZGVmaW5lIGFyY2hoZWxwCiAgIGVjaG8gICcqIGltYWdlICAgICAgICAgICAtIEtlcm5lbCBpbWFnZSBmb3IgSVBMICgkKGJvb3QpL2ltYWdlKScKKyAgZWNobwknKiBiekltYWdlICAgICAgICAgLSBDb21wcmVzc2VkIGtlcm5lbCBpbWFnZSBmb3IgSVBMICgkKGJvb3QpL2J6SW1hZ2UpJwogZW5kZWYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9ib290L01ha2VmaWxlIGIvYXJjaC9zMzkwL2Jvb3QvTWFrZWZpbGUKaW5kZXggNGQ5N2VlZi4uODgwMGNmMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9ib290L01ha2VmaWxlCkBAIC05LDEwICs5LDE4IEBACiBFWFRSQV9DRkxBR1MgIDo9IC1EQ09NUElMRV9WRVJTSU9OPSQoQ09NUElMRV9WRVJTSU9OKSAtZ3N0YWJzIC1JLgogCiB0YXJnZXRzIDo9IGltYWdlCit0YXJnZXRzICs9IGJ6SW1hZ2UKK3N1YmRpci0gOj0gY29tcHJlc3NlZAogCiAkKG9iaikvaW1hZ2U6IHZtbGludXggRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQogCiskKG9iaikvYnpJbWFnZTogJChvYmopL2NvbXByZXNzZWQvdm1saW51eCBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLG9iamNvcHkpCisKKyQob2JqKS9jb21wcmVzc2VkL3ZtbGludXg6IEZPUkNFCisJJChRKSQoTUFLRSkgJChidWlsZCk9JChvYmopL2NvbXByZXNzZWQgJEAKKwogaW5zdGFsbDogJChDT05GSUdVUkUpICQob2JqKS9pbWFnZQogCXNoIC14ICAkKHNyY3RyZWUpLyQob2JqKS9pbnN0YWxsLnNoICQoS0VSTkVMUkVMRUFTRSkgJChvYmopL2ltYWdlIFwKIAkgICAgICBTeXN0ZW0ubWFwIEtlcm50eXBlcyAiJChJTlNUQUxMX1BBVEgpIgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU0YTY3YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTAsMCArMSw2MCBAQAorIworIyBsaW51eC9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisjCisjIGNyZWF0ZSBhIGNvbXByZXNzZWQgdm1saW51eCBpbWFnZSBmcm9tIHRoZSBvcmlnaW5hbCB2bWxpbnV4CisjCisKK0JJVFMgOj0gJChpZiAkKENPTkZJR182NEJJVCksNjQsMzEpCisKK3RhcmdldHMJOj0gdm1saW51eC5sZHMgdm1saW51eCB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiB2bWxpbnV4LmJpbi5iejIgXAorCSAgIHZtbGludXguYmluLmx6bWEgbWlzYy5vIHBpZ2d5Lm8gc2l6ZXMuaCBoZWFkJChCSVRTKS5vCisKK0tCVUlMRF9DRkxBR1MgOj0gLW0kKEJJVFMpIC1EX19LRVJORUxfXyAkKExJTlVYX0lOQ0xVREUpIC1PMgorS0JVSUxEX0NGTEFHUyArPSAkKGNmbGFncy15KQorS0JVSUxEX0NGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tcGFja2VkLXN0YWNrKQorS0JVSUxEX0NGTEFHUyArPSAkKGNhbGwgY2Mtb3B0aW9uLC1mZnJlZXN0YW5kaW5nKQorCitHQ09WX1BST0ZJTEUgOj0gbgorCitPQkpFQ1RTIDo9ICQoYWRkcHJlZml4ICQob2JqdHJlZSkvYXJjaC9zMzkwL2tlcm5lbC8sIGhlYWQubyBzY2xwLm8gZWJjZGljLm8pCitPQkpFQ1RTICs9ICQob2JqKS9oZWFkJChCSVRTKS5vICQob2JqKS9taXNjLm8gJChvYmopL3BpZ2d5Lm8KKworTERGTEFHU192bWxpbnV4IDo9IC0tb2Zvcm1hdCAkKExEX0JGRCkgLWUgc3RhcnR1cCAtVAorJChvYmopL3ZtbGludXg6ICQob2JqKS92bWxpbnV4LmxkcyAkKE9CSkVDVFMpCisJJChjYWxsIGlmX2NoYW5nZWQsbGQpCisJQDoKKworc2VkLXNpemVzIDo9IC1lICdzL15cKFswLTlhLWZBLUZdKlwpIC4gXChfX2Jzc19zdGFydFx8X2VuZFwpJCQvXCNkZWZpbmUgU1pcMiAweFwxL3AnCisKK3F1aWV0X2NtZF9zaXplcyA9IEdFTiAkQAorICAgICAgY21kX3NpemVzID0gJChOTSkgJDwgfCBzZWQgLW4gJChzZWQtc2l6ZXMpID4gJEAKKworJChvYmopL3NpemVzLmg6IHZtbGludXgKKwkkKGNhbGwgaWZfY2hhbmdlZCxzaXplcykKKworQUZMQUdTX2hlYWQkKEJJVFMpLm8gKz0gLUkkKG9iaikKKyQob2JqKS9oZWFkJChCSVRTKS5vOiAkKG9iaikvc2l6ZXMuaAorCitDRkxBR1NfbWlzYy5vICs9IC1JJChvYmopCiskKG9iaikvbWlzYy5vOiAkKG9iaikvc2l6ZXMuaAorCitPQkpDT1BZRkxBR1Nfdm1saW51eC5iaW4gOj0gIC1SIC5jb21tZW50IC1TCiskKG9iaikvdm1saW51eC5iaW46IHZtbGludXgKKwkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQorCit2bWxpbnV4LmJpbi5hbGwteSA6PSAkKG9iaikvdm1saW51eC5iaW4KKworc3VmZml4LSQoQ09ORklHX0tFUk5FTF9HWklQKSAgOj0gZ3oKK3N1ZmZpeC0kKENPTkZJR19LRVJORUxfQlpJUDIpIDo9IGJ6Mgorc3VmZml4LSQoQ09ORklHX0tFUk5FTF9MWk1BKSAgOj0gbHptYQorCiskKG9iaikvdm1saW51eC5iaW4uZ3o6ICQodm1saW51eC5iaW4uYWxsLXkpCisJJChjYWxsIGlmX2NoYW5nZWQsZ3ppcCkKKyQob2JqKS92bWxpbnV4LmJpbi5iejI6ICQodm1saW51eC5iaW4uYWxsLXkpCisJJChjYWxsIGlmX2NoYW5nZWQsYnppcDIpCiskKG9iaikvdm1saW51eC5iaW4ubHptYTogJCh2bWxpbnV4LmJpbi5hbGwteSkKKwkkKGNhbGwgaWZfY2hhbmdlZCxsem1hKQorCitMREZMQUdTX3BpZ2d5Lm8gOj0gLXIgLS1mb3JtYXQgYmluYXJ5IC0tb2Zvcm1hdCAkKExEX0JGRCkgLVQKKyQob2JqKS9waWdneS5vOiAkKG9iaikvdm1saW51eC5zY3IgJChvYmopL3ZtbGludXguYmluLiQoc3VmZml4LXkpCisJJChjYWxsIGlmX2NoYW5nZWQsbGQpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL2hlYWQzMS5TIGIvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9oZWFkMzEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTU1MjNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9oZWFkMzEuUwpAQCAtMCwwICsxLDUxIEBACisvKgorICogU3RhcnR1cCBnbHVlIGNvZGUgdG8gdW5jb21wcmVzcyB0aGUga2VybmVsCisgKgorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDEwCisgKgorICogICBBdXRob3Iocyk6CU1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSAic2l6ZXMuaCIKKworX19IRUFECisJLmdsb2JsCXN0YXJ0dXBfY29udGludWUKK3N0YXJ0dXBfY29udGludWU6CisJYmFzcgklcjEzLDAJCQkjIGdldCBiYXNlCisuTFBHMToKKwkjIHNldHVwIHN0YWNrCisJbAklcjE1LC5Mc3RhY2stLkxQRzEoJXIxMykKKwlhaGkJJXIxNSwtOTYKKwlsCSVyMSwuTGRlY29tcHJlc3MtLkxQRzEoJXIxMykKKwliYXNyCSVyMTQsJXIxCisJIyBzZXR1cCByZWdpc3RlcnMgZm9yIG1lbW9yeSBtb3ZlciAmIGJyYW5jaCB0byB0YXJnZXQKKwlscgklcjQsJXIyCisJbAklcjIsLkxvZmZzZXQtLkxQRzEoJXIxMykKKwlsYQklcjQsMCglcjIsJXI0KQorCWwJJXIzLC5MbXZzaXplLS5MUEcxKCVyMTMpCisJbHIJJXI1LCVyMworCSMgbW92ZSB0aGUgbWVtb3J5IG1vdmVyIHNvbWVwbGFjZSBzYWZlCisJbGEJJXIxLDB4MjAwCisJbXZjCTAobW92ZXJfZW5kLW1vdmVyLCVyMSksbW92ZXItLkxQRzEoJXIxMykKKwkjIGRlY29tcHJlc3MgaW1hZ2UgaXMgc3RhcnRlZCBhdCAweDExMDAwCisJbHIJJXI2LCVyMgorCWJyCSVyMQorbW92ZXI6CisJbXZjbGUJJXIyLCVyNCwwCisJam8JbW92ZXIKKwlicgklcjYKK21vdmVyX2VuZDoKKworCS5hbGlnbgk4CisuTHN0YWNrOgorCS5sb25nCTB4ODAwMCArICgxPDwoUEFHRV9TSElGVCtUSFJFQURfT1JERVIpKQorLkxkZWNvbXByZXNzOgorCS5sb25nCWRlY29tcHJlc3Nfa2VybmVsCisuTG9mZnNldDoKKwkubG9uZwkweDExMDAwCisuTG12c2l6ZToKKwkubG9uZwlTWl9fYnNzX3N0YXJ0CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL2hlYWQ2NC5TIGIvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9oZWFkNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTgyY2IxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9oZWFkNjQuUwpAQCAtMCwwICsxLDQ4IEBACisvKgorICogU3RhcnR1cCBnbHVlIGNvZGUgdG8gdW5jb21wcmVzcyB0aGUga2VybmVsCisgKgorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDEwCisgKgorICogICBBdXRob3Iocyk6CU1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSAic2l6ZXMuaCIKKworX19IRUFECisJLmdsb2JsCXN0YXJ0dXBfY29udGludWUKK3N0YXJ0dXBfY29udGludWU6CisJYmFzcgklcjEzLDAJCQkjIGdldCBiYXNlCisuTFBHMToKKwkjIHNldHVwIHN0YWNrCisJbGcJJXIxNSwuTHN0YWNrLS5MUEcxKCVyMTMpCisJYWdoaQklcjE1LC0xNjAKKwlicmFzbAklcjE0LGRlY29tcHJlc3Nfa2VybmVsCisJIyBzZXR1cCByZWdpc3RlcnMgZm9yIG1lbW9yeSBtb3ZlciAmIGJyYW5jaCB0byB0YXJnZXQKKwlsZ3IJJXI0LCVyMgorCWxnCSVyMiwuTG9mZnNldC0uTFBHMSglcjEzKQorCWxhCSVyNCwwKCVyMiwlcjQpCisJbGcJJXIzLC5MbXZzaXplLS5MUEcxKCVyMTMpCisJbGdyCSVyNSwlcjMKKwkjIG1vdmUgdGhlIG1lbW9yeSBtb3ZlciBzb21lcGxhY2Ugc2FmZQorCWxhCSVyMSwweDIwMAorCW12YwkwKG1vdmVyX2VuZC1tb3ZlciwlcjEpLG1vdmVyLS5MUEcxKCVyMTMpCisJIyBkZWNvbXByZXNzIGltYWdlIGlzIHN0YXJ0ZWQgYXQgMHgxMTAwMAorCWxncgklcjYsJXIyCisJYnIJJXIxCittb3ZlcjoKKwltdmNsZQklcjIsJXI0LDAKKwlqbwltb3ZlcgorCWJyCSVyNgorbW92ZXJfZW5kOgorCisJLmFsaWduCTgKKy5Mc3RhY2s6CisJLnF1YWQJMHg4MDAwICsgKDE8PChQQUdFX1NISUZUK1RIUkVBRF9PUkRFUikpCisuTG9mZnNldDoKKwkucXVhZAkweDExMDAwCisuTG12c2l6ZToKKwkucXVhZAlTWl9fYnNzX3N0YXJ0CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYyBiL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5N2Q2OTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIERlZmluaXRpb25zIGFuZCB3cmFwcGVyIGZ1bmN0aW9ucyBmb3Iga2VybmVsIGRlY29tcHJlc3NvcgorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAxMAorICoKKyAqIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgorICovCisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2lwbC5oPgorI2luY2x1ZGUgInNpemVzLmgiCisKKy8qCisgKiBnemlwIGRlY2xhcmF0aW9ucworICovCisjZGVmaW5lIFNUQVRJQyBzdGF0aWMKKworI3VuZGVmIG1lbXNldAorI3VuZGVmIG1lbWNweQorI3VuZGVmIG1lbW1vdmUKKyNkZWZpbmUgbWVtemVybyhzLCBuKSBtZW1zZXQoKHMpLCAwLCAobikpCisKKy8qIFN5bWJvbHMgZGVmaW5lZCBieSBsaW5rZXIgc2NyaXB0cyAqLworZXh0ZXJuIGNoYXIgaW5wdXRfZGF0YVtdOworZXh0ZXJuIGludCBpbnB1dF9sZW47CitleHRlcm4gaW50IF90ZXh0OworZXh0ZXJuIGludCBfZW5kOworCitzdGF0aWMgdm9pZCBlcnJvcihjaGFyICptKTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJlZV9tZW1fcHRyOworc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJlZV9tZW1fZW5kX3B0cjsKKworI2lmZGVmIENPTkZJR19IQVZFX0tFUk5FTF9CWklQMgorI2RlZmluZSBIRUFQX1NJWkUJMHg0MDAwMDAKKyNlbHNlCisjZGVmaW5lIEhFQVBfU0laRQkweDEwMDAwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19LRVJORUxfR1pJUAorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX2luZmxhdGUuYyIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0tFUk5FTF9CWklQMgorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX2J1bnppcDIuYyIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0tFUk5FTF9MWk1BCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfdW5sem1hLmMiCisjZW5kaWYKKworZXh0ZXJuIF9zY2xwX3ByaW50X2Vhcmx5KGNvbnN0IGNoYXIgKik7CisKK2ludCBwdXRzKGNvbnN0IGNoYXIgKnMpCit7CisJX3NjbHBfcHJpbnRfZWFybHkocyk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgKm1lbXNldCh2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pCit7CisJY2hhciAqeHM7CisKKwlpZiAoYyA9PSAwKQorCQlyZXR1cm4gX19idWlsdGluX21lbXNldChzLCAwLCBuKTsKKworCXhzID0gKGNoYXIgKikgczsKKwlpZiAobiA+IDApCisJCWRvIHsKKwkJCSp4cysrID0gYzsKKwkJfSB3aGlsZSAoLS1uID4gMCk7CisJcmV0dXJuIHM7Cit9CisKK3ZvaWQgKm1lbWNweSh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCit7CisJcmV0dXJuIF9fYnVpbHRpbl9tZW1jcHkoX19kZXN0LCBfX3NyYywgX19uKTsKK30KKwordm9pZCAqbWVtbW92ZSh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCit7CisJY2hhciAqZDsKKwljb25zdCBjaGFyICpzOworCisJaWYgKF9fZGVzdCA8PSBfX3NyYykKKwkJcmV0dXJuIF9fYnVpbHRpbl9tZW1jcHkoX19kZXN0LCBfX3NyYywgX19uKTsKKwlkID0gX19kZXN0ICsgX19uOworCXMgPSBfX3NyYyArIF9fbjsKKwl3aGlsZSAoX19uLS0pCisJCSotLWQgPSAqLS1zOworCXJldHVybiBfX2Rlc3Q7Cit9CisKK3N0YXRpYyB2b2lkIGVycm9yKGNoYXIgKngpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHBzdyA9IDB4MDAwYTAwMDBkZWFkYmVlZlVMTDsKKworCXB1dHMoIlxuXG4iKTsKKwlwdXRzKHgpOworCXB1dHMoIlxuXG4gLS0gU3lzdGVtIGhhbHRlZCIpOworCisJYXNtIHZvbGF0aWxlKCJscHN3ICUwIiA6IDogIlEiIChwc3cpKTsKK30KKworLyoKKyAqIFNhZmUgZ3VhcmQgdGhlIGlwbCBwYXJhbWV0ZXIgYmxvY2sgYWdhaW5zdCBhIG1lbW9yeSBhcmVhIHRoYXQgd2lsbCBiZQorICogb3ZlcndyaXR0ZW4uIFRoZSB2YWxpZGl0eSBjaGVjayBmb3IgdGhlIGlwbCBwYXJhbWV0ZXIgYmxvY2sgaXMgY29tcGxleAorICogKHNlZSBjaW9fZ2V0X2lwbGluZm8gYW5kIGlwbF9zYXZlX3BhcmFtZXRlcnMpIGJ1dCBpZiB0aGUgcG9pbnRlciB0bworICogdGhlIGlwbCBwYXJhbWV0ZXIgYmxvY2sgaW50ZXJzZWN0cyB3aXRoIHRoZSBwYXNzZWQgbWVtb3J5IGFyZWEgd2UgY2FuCisgKiBzYWZlbHkgYXNzdW1lIHRoYXQgd2UgY2FuIHJlYWQgZnJvbSB0aGF0IG1lbW9yeS4gSW4gdGhhdCBjYXNlIGp1c3QgY29weQorICogdGhlIG1lbW9yeSB0byBJUExfUEFSTUJMT0NLX09SSUdJTiBldmVuIGlmIHRoZXJlIGlzIG5vIGlwbCBwYXJhbWV0ZXIKKyAqIGJsb2NrLgorICovCitzdGF0aWMgdm9pZCBjaGVja19pcGxfcGFybWJsb2NrKHZvaWQgKnN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdm9pZCAqc3JjLCAqZHN0OworCisJc3JjID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykgUzM5MF9sb3djb3JlLmlwbF9wYXJtYmxvY2tfcHRyOworCWlmIChzcmMgKyBQQUdFX1NJWkUgPD0gc3RhcnQgfHwgc3JjID49IHN0YXJ0ICsgc2l6ZSkKKwkJcmV0dXJuOworCWRzdCA9ICh2b2lkICopIElQTF9QQVJNQkxPQ0tfT1JJR0lOOworCW1lbW1vdmUoZHN0LCBzcmMsIFBBR0VfU0laRSk7CisJUzM5MF9sb3djb3JlLmlwbF9wYXJtYmxvY2tfcHRyID0gSVBMX1BBUk1CTE9DS19PUklHSU47Cit9CisKK3Vuc2lnbmVkIGxvbmcgZGVjb21wcmVzc19rZXJuZWwodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG91dHB1dF9hZGRyOworCXVuc2lnbmVkIGNoYXIgKm91dHB1dDsKKworCWZyZWVfbWVtX3B0ciA9ICh1bnNpZ25lZCBsb25nKSZfZW5kOworCWZyZWVfbWVtX2VuZF9wdHIgPSBmcmVlX21lbV9wdHIgKyBIRUFQX1NJWkU7CisJb3V0cHV0ID0gKHVuc2lnbmVkIGNoYXIgKikgKChmcmVlX21lbV9lbmRfcHRyICsgNDA5NVVMKSAmIC00MDk2VUwpOworCisJY2hlY2tfaXBsX3Bhcm1ibG9jaygodm9pZCAqKSAwLCAodW5zaWduZWQgbG9uZykgb3V0cHV0ICsgU1pfX2Jzc19zdGFydCk7CisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKKwkvKgorCSAqIE1vdmUgdGhlIGluaXRyZCByaWdodCBiZWhpbmQgdGhlIGVuZCBvZiB0aGUgZGVjb21wcmVzc2VkCisJICoga2VybmVsIGltYWdlLgorCSAqLworCWlmIChJTklUUkRfU1RBUlQgJiYgSU5JVFJEX1NJWkUgJiYKKwkgICAgSU5JVFJEX1NUQVJUIDwgKHVuc2lnbmVkIGxvbmcpIG91dHB1dCArIFNaX19ic3Nfc3RhcnQpIHsKKwkJY2hlY2tfaXBsX3Bhcm1ibG9jayhvdXRwdXQgKyBTWl9fYnNzX3N0YXJ0LAorCQkJCSAgICBJTklUUkRfU1RBUlQgKyBJTklUUkRfU0laRSk7CisJCW1lbW1vdmUob3V0cHV0ICsgU1pfX2Jzc19zdGFydCwKKwkJCSh2b2lkICopIElOSVRSRF9TVEFSVCwgSU5JVFJEX1NJWkUpOworCQlJTklUUkRfU1RBUlQgPSAodW5zaWduZWQgbG9uZykgb3V0cHV0ICsgU1pfX2Jzc19zdGFydDsKKwl9CisjZW5kaWYKKworCXB1dHMoIlVuY29tcHJlc3NpbmcgTGludXguLi4gIik7CisJZGVjb21wcmVzcyhpbnB1dF9kYXRhLCBpbnB1dF9sZW4sIE5VTEwsIE5VTEwsIG91dHB1dCwgTlVMTCwgZXJyb3IpOworCXB1dHMoIk9rLCBib290aW5nIHRoZSBrZXJuZWwuXG4iKTsKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIG91dHB1dDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MGY3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLlMKQEAgLTAsMCArMSw1NSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CisKKyNpZmRlZiBDT05GSUdfNjRCSVQKK09VVFBVVF9GT1JNQVQoImVsZjY0LXMzOTAiLCAiZWxmNjQtczM5MCIsICJlbGY2NC1zMzkwIikKK09VVFBVVF9BUkNIKHMzOTA6NjQtYml0KQorI2Vsc2UKK09VVFBVVF9GT1JNQVQoImVsZjMyLXMzOTAiLCAiZWxmMzItczM5MCIsICJlbGYzMi1zMzkwIikKK09VVFBVVF9BUkNIKHMzOTApCisjZW5kaWYKKworRU5UUlkoc3RhcnR1cCkKKworU0VDVElPTlMKK3sKKwkvKiBCZSBjYXJlZnVsIHBhcnRzIG9mIGhlYWRfNjQuUyBhc3N1bWUgc3RhcnR1cF8zMiBpcyBhdAorCSAqIGFkZHJlc3MgMC4KKwkgKi8KKwkuID0gMDsKKwkuaGVhZC50ZXh0IDogeworCQlfaGVhZCA9IC4gOworCQlIRUFEX1RFWFQKKwkJX2VoZWFkID0gLiA7CisJfQorCS5yb2RhdGEuY29tcHJlc3NlZCA6IHsKKwkJKigucm9kYXRhLmNvbXByZXNzZWQpCisJfQorCS50ZXh0IDoJeworCQlfdGV4dCA9IC47CS8qIFRleHQgKi8KKwkJKigudGV4dCkKKwkJKigudGV4dC4qKQorCQlfZXRleHQgPSAuIDsKKwl9CisJLnJvZGF0YSA6IHsKKwkJX3JvZGF0YSA9IC4gOworCQkqKC5yb2RhdGEpCSAvKiByZWFkLW9ubHkgZGF0YSAqLworCQkqKC5yb2RhdGEuKikKKwkJX2Vyb2RhdGEgPSAuIDsKKwl9CisJLmRhdGEgOgl7CisJCV9kYXRhID0gLiA7CisJCSooLmRhdGEpCisJCSooLmRhdGEuKikKKwkJX2VkYXRhID0gLiA7CisJfQorCS4gPSBBTElHTigyNTYpOworCS5ic3MgOiB7CisJCV9ic3MgPSAuIDsKKwkJKiguYnNzKQorCQkqKC5ic3MuKikKKwkJKihDT01NT04pCisJCS4gPSBBTElHTig4KTsJLyogRm9yIGNvbnZlbmllbmNlIGR1cmluZyB6ZXJvaW5nICovCisJCV9lYnNzID0gLjsKKwl9CisJX2VuZCA9IC47Cit9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL3ZtbGludXguc2NyIGIvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4LnNjcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDIzODJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4LnNjcgpAQCAtMCwwICsxLDEwIEBACitTRUNUSU9OUworeworICAucm9kYXRhLmNvbXByZXNzZWQgOiB7CisJaW5wdXRfbGVuID0gLjsKKwlMT05HKGlucHV0X2RhdGFfZW5kIC0gaW5wdXRfZGF0YSkgaW5wdXRfZGF0YSA9IC47CisJKiguZGF0YSkKKwlvdXRwdXRfbGVuID0gLiAtIDQ7CisJaW5wdXRfZGF0YV9lbmQgPSAuOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYwppbmRleCA2YmU0NTAzLi41OGY0NjczIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9hZXNfczM5MC5jCkBAIC03OCwxNCArNzgsMTQgQEAKIAlzdHJ1Y3QgczM5MF9hZXNfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAlpbnQgcmV0OwogCi0Jc2N0eC0+ZmFsbGJhY2suYmxrLT5iYXNlLmNydF9mbGFncyAmPSB+Q1JZUFRPX1RGTV9SRVFfTUFTSzsKLQlzY3R4LT5mYWxsYmFjay5ibGstPmJhc2UuY3J0X2ZsYWdzIHw9ICh0Zm0tPmNydF9mbGFncyAmCisJc2N0eC0+ZmFsbGJhY2suY2lwLT5iYXNlLmNydF9mbGFncyAmPSB+Q1JZUFRPX1RGTV9SRVFfTUFTSzsKKwlzY3R4LT5mYWxsYmFjay5jaXAtPmJhc2UuY3J0X2ZsYWdzIHw9ICh0Zm0tPmNydF9mbGFncyAmCiAJCQlDUllQVE9fVEZNX1JFUV9NQVNLKTsKIAogCXJldCA9IGNyeXB0b19jaXBoZXJfc2V0a2V5KHNjdHgtPmZhbGxiYWNrLmNpcCwgaW5fa2V5LCBrZXlfbGVuKTsKIAlpZiAocmV0KSB7CiAJCXRmbS0+Y3J0X2ZsYWdzICY9IH5DUllQVE9fVEZNX1JFU19NQVNLOwotCQl0Zm0tPmNydF9mbGFncyB8PSAoc2N0eC0+ZmFsbGJhY2suYmxrLT5iYXNlLmNydF9mbGFncyAmCisJCXRmbS0+Y3J0X2ZsYWdzIHw9IChzY3R4LT5mYWxsYmFjay5jaXAtPmJhc2UuY3J0X2ZsYWdzICYKIAkJCQlDUllQVE9fVEZNX1JFU19NQVNLKTsKIAl9CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9kZWZjb25maWcgYi9hcmNoL3MzOTAvZGVmY29uZmlnCmluZGV4IGI0MTZhYTEuLjdhZTcxY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9kZWZjb25maWcKKysrIGIvYXJjaC9zMzkwL2RlZmNvbmZpZwpAQCAtMzYsNiArMzYsMTMgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYwppbmRleCAyYjkyZDUwLi44N2NmNTIzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCisrKyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKQEAgLTQ4OCw3ICs0ODgsNyBAQAogCiBzdGF0aWMgaW50IGRpYWcyMjQodm9pZCAqcHRyKQogewotCWludCByYyA9IC1FTk9UU1VQUDsKKwlpbnQgcmMgPSAtRU9QTk9UU1VQUDsKIAogCWFzbSB2b2xhdGlsZSgKIAkJIglkaWFnCSUxLCUyLDB4MjI0XG4iCkBAIC01MDcsNyArNTA3LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKGRpYWcyMjQoZGlhZzIyNF9jcHVfbmFtZXMpKSB7CiAJCWtmcmVlKGRpYWcyMjRfY3B1X25hbWVzKTsKLQkJcmV0dXJuIC1FTk9UU1VQUDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAlFQkNBU0MoZGlhZzIyNF9jcHVfbmFtZXMgKyAxNiwgKCpkaWFnMjI0X2NwdV9uYW1lcyArIDEpICogMTYpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IDJhMTEzZDYuLjQ1MWJmYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTE4LDggKzE4LDYgQEAKIAogI2RlZmluZSBBVE9NSUNfSU5JVChpKSAgeyAoaSkgfQogCi0jaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKLQogI2RlZmluZSBfX0NTX0xPT1AocHRyLCBvcF92YWwsIG9wX3N0cmluZykgKHsJCQkJXAogCWludCBvbGRfdmFsLCBuZXdfdmFsOwkJCQkJCVwKIAlhc20gdm9sYXRpbGUoCQkJCQkJCVwKQEAgLTM1LDI2ICszMyw2IEBACiAJbmV3X3ZhbDsJCQkJCQkJXAogfSkKIAotI2Vsc2UgLyogX19HTlVDX18gKi8KLQotI2RlZmluZSBfX0NTX0xPT1AocHRyLCBvcF92YWwsIG9wX3N0cmluZykgKHsJCQkJXAotCWludCBvbGRfdmFsLCBuZXdfdmFsOwkJCQkJCVwKLQlhc20gdm9sYXRpbGUoCQkJCQkJCVwKLQkJIglsCSUwLDAoJTMpXG4iCQkJCVwKLQkJIjA6CWxyCSUxLCUwXG4iCQkJCVwKLQkJb3Bfc3RyaW5nICIJJTEsJTRcbiIJCQkJXAotCQkiCWNzCSUwLCUxLDAoJTMpXG4iCQkJCVwKLQkJIglqbAkwYiIJCQkJCVwKLQkJOiAiPSZkIiAob2xkX3ZhbCksICI9JmQiIChuZXdfdmFsKSwJCQlcCi0JCSAgIj1tIiAoKChhdG9taWNfdCAqKShwdHIpKS0+Y291bnRlcikJCQlcCi0JCTogImEiIChwdHIpLCAiZCIgKG9wX3ZhbCksCQkJCVwKLQkJICAibSIgKCgoYXRvbWljX3QgKikocHRyKSktPmNvdW50ZXIpCQkJXAotCQk6ICJjYyIsICJtZW1vcnkiKTsJCQkJCVwKLQluZXdfdmFsOwkJCQkJCQlcCi19KQotCi0jZW5kaWYgLyogX19HTlVDX18gKi8KLQogc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3JlYWQoY29uc3QgYXRvbWljX3QgKnYpCiB7CiAJYmFycmllcigpOwpAQCAtMTAxLDE5ICs3OSwxMSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBhdG9taWNfY21weGNoZyhhdG9taWNfdCAqdiwgaW50IG9sZCwgaW50IG5ldykKIHsKLSNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQogCWFzbSB2b2xhdGlsZSgKIAkJIgljcwklMCwlMiwlMSIKIAkJOiAiK2QiIChvbGQpLCAiPVEiICh2LT5jb3VudGVyKQogCQk6ICJkIiAobmV3KSwgIlEiICh2LT5jb3VudGVyKQogCQk6ICJjYyIsICJtZW1vcnkiKTsKLSNlbHNlIC8qIF9fR05VQ19fICovCi0JYXNtIHZvbGF0aWxlKAotCQkiCWNzCSUwLCUzLDAoJTIpIgotCQk6ICIrZCIgKG9sZCksICI9bSIgKHYtPmNvdW50ZXIpCi0JCTogImEiICh2KSwgImQiIChuZXcpLCAibSIgKHYtPmNvdW50ZXIpCi0JCTogImNjIiwgIm1lbW9yeSIpOwotI2VuZGlmIC8qIF9fR05VQ19fICovCiAJcmV0dXJuIG9sZDsKIH0KIApAQCAtMTQwLDggKzExMCw2IEBACiAKICNpZmRlZiBDT05GSUdfNjRCSVQKIAotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCi0KICNkZWZpbmUgX19DU0dfTE9PUChwdHIsIG9wX3ZhbCwgb3Bfc3RyaW5nKSAoewkJCQlcCiAJbG9uZyBsb25nIG9sZF92YWwsIG5ld192YWw7CQkJCQlcCiAJYXNtIHZvbGF0aWxlKAkJCQkJCQlcCkBAIC0xNTcsMjYgKzEyNSw2IEBACiAJbmV3X3ZhbDsJCQkJCQkJXAogfSkKIAotI2Vsc2UgLyogX19HTlVDX18gKi8KLQotI2RlZmluZSBfX0NTR19MT09QKHB0ciwgb3BfdmFsLCBvcF9zdHJpbmcpICh7CQkJCVwKLQlsb25nIGxvbmcgb2xkX3ZhbCwgbmV3X3ZhbDsJCQkJCVwKLQlhc20gdm9sYXRpbGUoCQkJCQkJCVwKLQkJIglsZwklMCwwKCUzKVxuIgkJCQlcCi0JCSIwOglsZ3IJJTEsJTBcbiIJCQkJXAotCQlvcF9zdHJpbmcgIgklMSwlNFxuIgkJCQlcCi0JCSIJY3NnCSUwLCUxLDAoJTMpXG4iCQkJCVwKLQkJIglqbAkwYiIJCQkJCVwKLQkJOiAiPSZkIiAob2xkX3ZhbCksICI9JmQiIChuZXdfdmFsKSwJCQlcCi0JCSAgIj1tIiAoKChhdG9taWNfdCAqKShwdHIpKS0+Y291bnRlcikJCQlcCi0JCTogImEiIChwdHIpLCAiZCIgKG9wX3ZhbCksCQkJCVwKLQkJICAibSIgKCgoYXRvbWljX3QgKikocHRyKSktPmNvdW50ZXIpCQkJXAotCQk6ICJjYyIsICJtZW1vcnkiKTsJCQkJCVwKLQluZXdfdmFsOwkJCQkJCQlcCi19KQotCi0jZW5kaWYgLyogX19HTlVDX18gKi8KLQogc3RhdGljIGlubGluZSBsb25nIGxvbmcgYXRvbWljNjRfcmVhZChjb25zdCBhdG9taWM2NF90ICp2KQogewogCWJhcnJpZXIoKTsKQEAgLTIxNCwxOSArMTYyLDExIEBACiBzdGF0aWMgaW5saW5lIGxvbmcgbG9uZyBhdG9taWM2NF9jbXB4Y2hnKGF0b21pYzY0X3QgKnYsCiAJCQkJCSAgICAgbG9uZyBsb25nIG9sZCwgbG9uZyBsb25nIG5ldykKIHsKLSNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQogCWFzbSB2b2xhdGlsZSgKIAkJIgljc2cJJTAsJTIsJTEiCiAJCTogIitkIiAob2xkKSwgIj1RIiAodi0+Y291bnRlcikKIAkJOiAiZCIgKG5ldyksICJRIiAodi0+Y291bnRlcikKIAkJOiAiY2MiLCAibWVtb3J5Iik7Ci0jZWxzZSAvKiBfX0dOVUNfXyAqLwotCWFzbSB2b2xhdGlsZSgKLQkJIgljc2cJJTAsJTMsMCglMikiCi0JCTogIitkIiAob2xkKSwgIj1tIiAodi0+Y291bnRlcikKLQkJOiAiYSIgKHYpLCAiZCIgKG5ldyksICJtIiAodi0+Y291bnRlcikKLQkJOiAiY2MiLCAibWVtb3J5Iik7Ci0jZW5kaWYgLyogX19HTlVDX18gKi8KIAlyZXR1cm4gb2xkOwogfQogCkBAIC0yNDMsMTAgKzE4Myw4IEBACiAJcmVnaXN0ZXJfcGFpciBycDsKIAogCWFzbSB2b2xhdGlsZSgKLQkJIglsbQklMCwlTjAsMCglMSkiCi0JCTogIj0mZCIgKHJwKQotCQk6ICJhIiAoJnYtPmNvdW50ZXIpLCAibSIgKHYtPmNvdW50ZXIpCi0JCSk7CisJCSIJbG0JJTAsJU4wLCUxIgorCQk6ICI9JmQiIChycCkgOiAiUSIgKHYtPmNvdW50ZXIpCSk7CiAJcmV0dXJuIHJwLnBhaXI7CiB9CiAKQEAgLTI1NSwxMCArMTkzLDggQEAKIAlyZWdpc3Rlcl9wYWlyIHJwID0gey5wYWlyID0gaX07CiAKIAlhc20gdm9sYXRpbGUoCi0JCSIJc3RtCSUxLCVOMSwwKCUyKSIKLQkJOiAiPW0iICh2LT5jb3VudGVyKQotCQk6ICJkIiAocnApLCAiYSIgKCZ2LT5jb3VudGVyKQotCQkpOworCQkiCXN0bQklMSwlTjEsJTAiCisJCTogIj1RIiAodi0+Y291bnRlcikgOiAiZCIgKHJwKSApOwogfQogCiBzdGF0aWMgaW5saW5lIGxvbmcgbG9uZyBhdG9taWM2NF94Y2hnKGF0b21pYzY0X3QgKnYsIGxvbmcgbG9uZyBuZXcpCkBAIC0yNjcsMTEgKzIwMywxMSBAQAogCXJlZ2lzdGVyX3BhaXIgcnBfb2xkOwogCiAJYXNtIHZvbGF0aWxlKAotCQkiCWxtCSUwLCVOMCwwKCUyKVxuIgotCQkiMDoJY2RzCSUwLCUzLDAoJTIpXG4iCisJCSIJbG0JJTAsJU4wLCUxXG4iCisJCSIwOgljZHMJJTAsJTIsJTFcbiIKIAkJIglqbAkwYlxuIgotCQk6ICI9JmQiIChycF9vbGQpLCAiK20iICh2LT5jb3VudGVyKQotCQk6ICJhIiAoJnYtPmNvdW50ZXIpLCAiZCIgKHJwX25ldykKKwkJOiAiPSZkIiAocnBfb2xkKSwgIj1RIiAodi0+Y291bnRlcikKKwkJOiAiZCIgKHJwX25ldyksICJRIiAodi0+Y291bnRlcikKIAkJOiAiY2MiKTsKIAlyZXR1cm4gcnBfb2xkLnBhaXI7CiB9CkBAIC0yODMsOSArMjE5LDkgQEAKIAlyZWdpc3Rlcl9wYWlyIHJwX25ldyA9IHsucGFpciA9IG5ld307CiAKIAlhc20gdm9sYXRpbGUoCi0JCSIJY2RzCSUwLCUzLDAoJTIpIgotCQk6ICIrJmQiIChycF9vbGQpLCAiK20iICh2LT5jb3VudGVyKQotCQk6ICJhIiAoJnYtPmNvdW50ZXIpLCAiZCIgKHJwX25ldykKKwkJIgljZHMJJTAsJTIsJTEiCisJCTogIismZCIgKHJwX29sZCksICI9USIgKHYtPmNvdW50ZXIpCisJCTogImQiIChycF9uZXcpLCAiUSIgKHYtPmNvdW50ZXIpCiAJCTogImNjIik7CiAJcmV0dXJuIHJwX29sZC5wYWlyOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IGIzMDYwNmYuLjJlMDU5NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTcxLDggKzcxLDYgQEAKICNkZWZpbmUgX19CSVRPUFNfQU5ECQkibnIiCiAjZGVmaW5lIF9fQklUT1BTX1hPUgkJInhyIgogCi0jaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKLQogI2RlZmluZSBfX0JJVE9QU19MT09QKF9fb2xkLCBfX25ldywgX19hZGRyLCBfX3ZhbCwgX19vcF9zdHJpbmcpCVwKIAlhc20gdm9sYXRpbGUoCQkJCQkJXAogCQkiCWwJJTAsJTJcbiIJCQlcCkBAIC04NSwyMiArODMsNiBAQAogCQk6ICJkIiAoX192YWwpLCAiUSIgKCoodW5zaWduZWQgbG9uZyAqKSBfX2FkZHIpCVwKIAkJOiAiY2MiKTsKIAotI2Vsc2UgLyogX19HTlVDX18gKi8KLQotI2RlZmluZSBfX0JJVE9QU19MT09QKF9fb2xkLCBfX25ldywgX19hZGRyLCBfX3ZhbCwgX19vcF9zdHJpbmcpCVwKLQlhc20gdm9sYXRpbGUoCQkJCQkJXAotCQkiCWwJJTAsMCglNClcbiIJCQlcCi0JCSIwOglscgklMSwlMFxuIgkJCVwKLQkJX19vcF9zdHJpbmcgIgklMSwlM1xuIgkJCVwKLQkJIgljcwklMCwlMSwwKCU0KVxuIgkJCVwKLQkJIglqbAkwYiIJCQkJXAotCQk6ICI9JmQiIChfX29sZCksICI9JmQiIChfX25ldyksCQkJXAotCQkgICI9bSIgKCoodW5zaWduZWQgbG9uZyAqKSBfX2FkZHIpCQlcCi0JCTogImQiIChfX3ZhbCksICJhIiAoX19hZGRyKSwJCQlcCi0JCSAgIm0iICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKSA6ICJjYyIpOwotCi0jZW5kaWYgLyogX19HTlVDX18gKi8KLQogI2Vsc2UgLyogX19zMzkweF9fICovCiAKICNkZWZpbmUgX19CSVRPUFNfQUxJR04JCTcKQEAgLTEwOSw4ICs5MSw2IEBACiAjZGVmaW5lIF9fQklUT1BTX0FORAkJIm5nciIKICNkZWZpbmUgX19CSVRPUFNfWE9SCQkieGdyIgogCi0jaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKLQogI2RlZmluZSBfX0JJVE9QU19MT09QKF9fb2xkLCBfX25ldywgX19hZGRyLCBfX3ZhbCwgX19vcF9zdHJpbmcpCVwKIAlhc20gdm9sYXRpbGUoCQkJCQkJXAogCQkiCWxnCSUwLCUyXG4iCQkJXApAQCAtMTIzLDIzICsxMDMsNiBAQAogCQk6ICJkIiAoX192YWwpLCAiUSIgKCoodW5zaWduZWQgbG9uZyAqKSBfX2FkZHIpCVwKIAkJOiAiY2MiKTsKIAotI2Vsc2UgLyogX19HTlVDX18gKi8KLQotI2RlZmluZSBfX0JJVE9QU19MT09QKF9fb2xkLCBfX25ldywgX19hZGRyLCBfX3ZhbCwgX19vcF9zdHJpbmcpCVwKLQlhc20gdm9sYXRpbGUoCQkJCQkJXAotCQkiCWxnCSUwLDAoJTQpXG4iCQkJXAotCQkiMDoJbGdyCSUxLCUwXG4iCQkJXAotCQlfX29wX3N0cmluZyAiCSUxLCUzXG4iCQkJXAotCQkiCWNzZwklMCwlMSwwKCU0KVxuIgkJCVwKLQkJIglqbAkwYiIJCQkJXAotCQk6ICI9JmQiIChfX29sZCksICI9JmQiIChfX25ldyksCQkJXAotCQkgICI9bSIgKCoodW5zaWduZWQgbG9uZyAqKSBfX2FkZHIpCQlcCi0JCTogImQiIChfX3ZhbCksICJhIiAoX19hZGRyKSwJCQlcCi0JCSAgIm0iICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKSA6ICJjYyIpOwotCi0KLSNlbmRpZiAvKiBfX0dOVUNfXyAqLwotCiAjZW5kaWYgLyogX19zMzkweF9fICovCiAKICNkZWZpbmUgX19CSVRPUFNfV09SRFMoYml0cykgKCgoYml0cykrX19CSVRPUFNfV09SRFNJWkUtMSkvX19CSVRPUFNfV09SRFNJWkUpCkBAIC0yNjEsOSArMjI0LDggQEAKIAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKIAlhc20gdm9sYXRpbGUoCi0JCSIJb2MJMCgxLCUxKSwwKCUyKSIKLQkJOiAiPW0iICgqKGNoYXIgKikgYWRkcikgOiAiYSIgKGFkZHIpLAotCQkgICJhIiAoX29pX2JpdG1hcCArIChuciAmIDcpKSwgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiICk7CisJCSIJb2MJJU8wKDEsJVIwKSwlMSIKKwkJOiAiPVEiICgqKGNoYXIgKikgYWRkcikgOiAiUSIgKF9vaV9iaXRtYXBbbnIgJiA3XSkgOiAiY2MiICk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAKQEAgLTI5MCw5ICsyNTIsOCBAQAogCiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwdHIgKyAoKG5yIF4gKF9fQklUT1BTX1dPUkRTSVpFIC0gOCkpID4+IDMpOwogCWFzbSB2b2xhdGlsZSgKLQkJIgluYwkwKDEsJTEpLDAoJTIpIgotCQk6ICI9bSIgKCooY2hhciAqKSBhZGRyKQk6ICJhIiAoYWRkciksCi0JCSAgImEiIChfbmlfYml0bWFwICsgKG5yICYgNykpLCAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIpOworCQkiCW5jCSVPMCgxLCVSMCksJTEiCisJCTogIj1RIiAoKihjaGFyICopIGFkZHIpIDogIlEiIChfbmlfYml0bWFwW25yICYgN10pIDogImNjIiApOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgCkBAIC0zMTgsOSArMjc5LDggQEAKIAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKIAlhc20gdm9sYXRpbGUoCi0JCSIJeGMJMCgxLCUxKSwwKCUyKSIKLQkJOiAgIj1tIiAoKihjaGFyICopIGFkZHIpIDogImEiIChhZGRyKSwKLQkJICAgImEiIChfb2lfYml0bWFwICsgKG5yICYgNykpLCAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKKwkJIgl4YwklTzAoMSwlUjApLCUxIgorCQk6ICI9USIgKCooY2hhciAqKSBhZGRyKSA6ICJRIiAoX29pX2JpdG1hcFtuciAmIDddKSA6ICJjYyIgKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIApAQCAtMzQ5LDEwICszMDksOSBAQAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKIAljaCA9ICoodW5zaWduZWQgY2hhciAqKSBhZGRyOwogCWFzbSB2b2xhdGlsZSgKLQkJIglvYwkwKDEsJTEpLDAoJTIpIgotCQk6ICI9bSIgKCooY2hhciAqKSBhZGRyKQotCQk6ICJhIiAoYWRkciksICJhIiAoX29pX2JpdG1hcCArIChuciAmIDcpKSwKLQkJICAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIsICJtZW1vcnkiKTsKKwkJIglvYwklTzAoMSwlUjApLCUxIgorCQk6ICI9USIgKCooY2hhciAqKSBhZGRyKQk6ICJRIiAoX29pX2JpdG1hcFtuciAmIDddKQorCQk6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gKGNoID4+IChuciAmIDcpKSAmIDE7CiB9CiAjZGVmaW5lIF9fdGVzdF9hbmRfc2V0X2JpdChYLFkpCQl0ZXN0X2FuZF9zZXRfYml0X3NpbXBsZShYLFkpCkBAIC0zNjksMTAgKzMyOCw5IEBACiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwdHIgKyAoKG5yIF4gKF9fQklUT1BTX1dPUkRTSVpFIC0gOCkpID4+IDMpOwogCWNoID0gKih1bnNpZ25lZCBjaGFyICopIGFkZHI7CiAJYXNtIHZvbGF0aWxlKAotCQkiCW5jCTAoMSwlMSksMCglMikiCi0JCTogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCTogImEiIChhZGRyKSwgImEiIChfbmlfYml0bWFwICsgKG5yICYgNykpLAotCQkgICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiwgIm1lbW9yeSIpOworCQkiCW5jCSVPMCgxLCVSMCksJTEiCisJCTogIj1RIiAoKihjaGFyICopIGFkZHIpCTogIlEiIChfbmlfYml0bWFwW25yICYgN10pCisJCTogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiAoY2ggPj4gKG5yICYgNykpICYgMTsKIH0KICNkZWZpbmUgX190ZXN0X2FuZF9jbGVhcl9iaXQoWCxZKQl0ZXN0X2FuZF9jbGVhcl9iaXRfc2ltcGxlKFgsWSkKQEAgLTM4OSwxMCArMzQ3LDkgQEAKIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0ciArICgobnIgXiAoX19CSVRPUFNfV09SRFNJWkUgLSA4KSkgPj4gMyk7CiAJY2ggPSAqKHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKIAlhc20gdm9sYXRpbGUoCi0JCSIJeGMJMCgxLCUxKSwwKCUyKSIKLQkJOiAiPW0iICgqKGNoYXIgKikgYWRkcikKLQkJOiAiYSIgKGFkZHIpLCAiYSIgKF9vaV9iaXRtYXAgKyAobnIgJiA3KSksCi0JCSAgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiLCAibWVtb3J5Iik7CisJCSIJeGMJJU8wKDEsJVIwKSwlMSIKKwkJOiAiPVEiICgqKGNoYXIgKikgYWRkcikJOiAiUSIgKF9vaV9iaXRtYXBbbnIgJiA3XSkKKwkJOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIChjaCA+PiAobnIgJiA3KSkgJiAxOwogfQogI2RlZmluZSBfX3Rlc3RfYW5kX2NoYW5nZV9iaXQoWCxZKQl0ZXN0X2FuZF9jaGFuZ2VfYml0X3NpbXBsZShYLFkpCkBAIC01OTEsMTEgKzU0OCwxMSBAQAogCXAgPSAodW5zaWduZWQgbG9uZyAqKSgodW5zaWduZWQgbG9uZykgcCArIG9mZnNldCk7CiAjaWZuZGVmIF9fczM5MHhfXwogCWFzbSB2b2xhdGlsZSgKLQkJIglpYwklMCwwKCUxKVxuIgotCQkiCWljbQklMCwyLDEoJTEpXG4iCi0JCSIJaWNtCSUwLDQsMiglMSlcbiIKLQkJIglpY20JJTAsOCwzKCUxKSIKLQkJOiAiPSZkIiAod29yZCkgOiAiYSIgKHApLCAibSIgKCpwKSA6ICJjYyIpOworCQkiCWljCSUwLCVPMSglUjEpXG4iCisJCSIJaWNtCSUwLDIsJU8xKzEoJVIxKVxuIgorCQkiCWljbQklMCw0LCVPMSsyKCVSMSlcbiIKKwkJIglpY20JJTAsOCwlTzErMyglUjEpIgorCQk6ICI9JmQiICh3b3JkKSA6ICJRIiAoKnApIDogImNjIik7CiAjZWxzZQogCWFzbSB2b2xhdGlsZSgKIAkJIglscnZnCSUwLCUxIgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2J1Zy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2J1Zy5oCmluZGV4IGIxMDY2YjkuLjliZWViOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9idWcuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYnVnLmgKQEAgLTUsMTIgKzUsNiBAQAogCiAjaWZkZWYgQ09ORklHX0JVRwogCi0jaWZkZWYgQ09ORklHXzY0QklUCi0jZGVmaW5lIFMzOTBfTE9ORyAiLnF1YWQiCi0jZWxzZQotI2RlZmluZSBTMzkwX0xPTkcgIi5sb25nIgotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQogCiAjZGVmaW5lIF9fRU1JVF9CVUcoeCkgZG8gewkJCQkJXApAQCAtMjEsNyArMTUsNyBAQAogCQkiMjoJLmFzY2l6CVwiIl9fRklMRV9fIlwiXG4iCQlcCiAJCSIucHJldmlvdXNcbiIJCQkJCVwKIAkJIi5zZWN0aW9uIF9fYnVnX3RhYmxlLFwiYVwiXG4iCQkJXAotCQkiMzpcdCIJUzM5MF9MT05HICJcdDFiLDJiXG4iCQkJXAorCQkiMzoJLmxvbmcJMWItM2IsMmItM2JcbiIJCQlcCiAJCSIJLnNob3J0CSUwLCUxXG4iCQkJXAogCQkiCS5vcmcJM2IrJTJcbiIJCQlcCiAJCSIucHJldmlvdXNcbiIJCQkJCVwKQEAgLTM3LDcgKzMxLDcgQEAKIAkJIjA6CWoJMGIrMlxuIgkJCVwKIAkJIjE6XG4iCQkJCQlcCiAJCSIuc2VjdGlvbiBfX2J1Z190YWJsZSxcImFcIlxuIgkJXAotCQkiMjpcdCIJUzM5MF9MT05HICJcdDFiXG4iCQlcCisJCSIyOgkubG9uZwkxYi0yYlxuIgkJXAogCQkiCS5zaG9ydAklMFxuIgkJCVwKIAkJIgkub3JnCTJiKyUxXG4iCQlcCiAJCSIucHJldmlvdXNcbiIJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Nydy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Nydy5oCmluZGV4IDIxODVhNmQuLjc0OWE5N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcncuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3J3LmgKQEAgLTMyLDYgKzMyLDcgQEAKIGV4dGVybiBpbnQgY3J3X3JlZ2lzdGVyX2hhbmRsZXIoaW50IHJzYywgY3J3X2hhbmRsZXJfdCBoYW5kbGVyKTsKIGV4dGVybiB2b2lkIGNyd191bnJlZ2lzdGVyX2hhbmRsZXIoaW50IHJzYyk7CiBleHRlcm4gdm9pZCBjcndfaGFuZGxlX2NoYW5uZWxfcmVwb3J0KHZvaWQpOwordm9pZCBjcndfd2FpdF9mb3JfY2hhbm5lbF9yZXBvcnQodm9pZCk7CiAKICNkZWZpbmUgTlJfUlNDUyAxNgogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZXRyLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZXRyLmgKaW5kZXggODBlZjU4Yy4uNTM4ZTFiMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2V0ci5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9ldHIuaApAQCAtMTQ1LDExICsxNDUsMTEgQEAKIAlpbnQgcmMgPSAtRU5PU1lTOwogCiAJYXNtIHZvbGF0aWxlKAotCQkiCS5pbnNuCXMsMHhiMjE2MDAwMCwwKCUyKVxuIgorCQkiCS5pbnNuCXMsMHhiMjE2MDAwMCwlMVxuIgogCQkiMDoJbGEJJTAsMFxuIgogCQkiMTpcbiIKIAkJRVhfVEFCTEUoMGIsMWIpCi0JCTogIitkIiAocmMpIDogIm0iICgqY3RybCksICJhIiAoY3RybCkpOworCQk6ICIrZCIgKHJjKSA6ICJRIiAoKmN0cmwpKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTE1OSwxMSArMTU5LDExIEBACiAJaW50IHJjID0gLUVOT1NZUzsKIAogCWFzbSB2b2xhdGlsZSgKLQkJIgkuaW5zbglzLDB4YjIxNzAwMDAsMCglMilcbiIKKwkJIgkuaW5zbglzLDB4YjIxNzAwMDAsJTFcbiIKIAkJIjA6CWxhCSUwLDBcbiIKIAkJIjE6XG4iCiAJCUVYX1RBQkxFKDBiLDFiKQotCQk6ICIrZCIgKHJjKSA6ICJtIiAoKmFpYiksICJhIiAoYWliKSk7CisJCTogIitkIiAocmMpIDogIlEiICgqYWliKSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xNzQsMTEgKzE3NCwxMSBAQAogCWludCByYyA9IC1FTk9TWVM7CiAKIAlhc20gdm9sYXRpbGUoCi0JCSIJLmluc24JcywweGIyYjMwMDAwLDAoJTIpXG4iCisJCSIJLmluc24JcywweGIyYjMwMDAwLCUxXG4iCiAJCSIwOglsYQklMCwwXG4iCiAJCSIxOlxuIgogCQlFWF9UQUJMRSgwYiwxYikKLQkJOiAiK2QiIChyYykgOiAibSIgKCphaWIpLCAiYSIgKGFpYiksICJkIiAocmVnMCkpOworCQk6ICIrZCIgKHJjKSA6ICJRIiAoKmFpYiksICJkIiAocmVnMCkpOwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lycWZsYWdzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaAppbmRleCBjMmZiNDMyLi4xNWIzYWMyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaApAQCAtOCw4ICs4LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLSNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQotCiAvKiBzdG9yZSB0aGVuIG9yIHN5c3RlbSBtYXNrLiAqLwogI2RlZmluZSBfX3Jhd19sb2NhbF9pcnFfc3Rvc20oX19vcikJCQkJCVwKICh7CQkJCQkJCQkJXApAQCAtMzYsNDAgKzM0LDYgQEAKIAlhc20gdm9sYXRpbGUoInNzbSAgICUwIiA6IDogIlEiIChfX21hc2spIDogIm1lbW9yeSIpOwkJXAogfSkKIAotI2Vsc2UgLyogX19HTlVDX18gKi8KLQotLyogc3RvcmUgdGhlbiBvciBzeXN0ZW0gbWFzay4gKi8KLSNkZWZpbmUgX19yYXdfbG9jYWxfaXJxX3N0b3NtKF9fb3IpCQkJCQlcCi0oewkJCQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIF9fbWFzazsJCQkJCQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCQlcCi0JCSIJc3Rvc20JMCglMSksJTIiCQkJCVwKLQkJOiAiPW0iIChfX21hc2spCQkJCQkJXAotCQk6ICJhIiAoJl9fbWFzayksICJpIiAoX19vcikgOiAibWVtb3J5Iik7CQlcCi0JX19tYXNrOwkJCQkJCQkJXAotfSkKLQotLyogc3RvcmUgdGhlbiBhbmQgc3lzdGVtIG1hc2suICovCi0jZGVmaW5lIF9fcmF3X2xvY2FsX2lycV9zdG5zbShfX2FuZCkJCQkJCVwKLSh7CQkJCQkJCQkJXAotCXVuc2lnbmVkIGxvbmcgX19tYXNrOwkJCQkJCVwKLQlhc20gdm9sYXRpbGUoCQkJCQkJCVwKLQkJIglzdG5zbQkwKCUxKSwlMiIJCQkJXAotCQk6ICI9bSIgKF9fbWFzaykJCQkJCQlcCi0JCTogImEiICgmX19tYXNrKSwgImkiIChfX2FuZCkgOiAibWVtb3J5Iik7CQlcCi0JX19tYXNrOwkJCQkJCQkJXAotfSkKLQotLyogc2V0IHN5c3RlbSBtYXNrLiAqLwotI2RlZmluZSBfX3Jhd19sb2NhbF9pcnFfc3NtKF9fbWFzaykJCQkJCVwKLSh7CQkJCQkJCQkJXAotCWFzbSB2b2xhdGlsZSgJCQkJCQkJXAotCQkiCXNzbQkwKCUwKSIJCQkJCVwKLQkJOiA6ICJhIiAoJl9fbWFzayksICJtIiAoX19tYXNrKSA6ICJtZW1vcnkiKTsJCVwKLX0pCi0KLSNlbmRpZiAvKiBfX0dOVUNfXyAqLwotCiAvKiBpbnRlcnJ1cHQgY29udHJvbC4uICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmF3X2xvY2FsX2lycV9lbmFibGUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCmluZGV4IGMyNWRmYWMuLjA1NTI3YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaApAQCAtMSwxNDEgKzEsMTYgQEAKIC8qCi0gKiAgaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmgKLSAqCi0gKiAgUzM5MCB2ZXJzaW9uCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3Iocyk6IEhhcnRtdXQgUGVubmVyIChocEBkZS5pYm0uY29tKSwKLSAqICAgICAgICAgICAgICAgTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKSwKLSAqICAgICAgICAgICAgICAgRGVuaXMgSm9zZXBoIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKQorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk5LDIwMTAKKyAqICAgIEF1dGhvcihzKTogSGFydG11dCBQZW5uZXIgPGhwQGRlLmlibS5jb20+LAorICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+LAorICoJCSBEZW5pcyBKb3NlcGggQmFycm93LAogICovCiAKICNpZm5kZWYgX0FTTV9TMzkwX0xPV0NPUkVfSAogI2RlZmluZSBfQVNNX1MzOTBfTE9XQ09SRV9ICiAKLSNkZWZpbmUgX19MQ19JUExfUEFSTUJMT0NLX1BUUgkJMHgwMDE0Ci0jZGVmaW5lIF9fTENfRVhUX1BBUkFNUwkJCTB4MDA4MAotI2RlZmluZSBfX0xDX0NQVV9BRERSRVNTCQkweDAwODQKLSNkZWZpbmUgX19MQ19FWFRfSU5UX0NPREUJCTB4MDA4NgotCi0jZGVmaW5lIF9fTENfU1ZDX0lMQwkJCTB4MDA4OAotI2RlZmluZSBfX0xDX1NWQ19JTlRfQ09ERQkJMHgwMDhhCi0jZGVmaW5lIF9fTENfUEdNX0lMQwkJCTB4MDA4YwotI2RlZmluZSBfX0xDX1BHTV9JTlRfQ09ERQkJMHgwMDhlCi0KLSNkZWZpbmUgX19MQ19QRVJfQVRNSUQJCQkweDAwOTYKLSNkZWZpbmUgX19MQ19QRVJfQUREUkVTUwkJMHgwMDk4Ci0jZGVmaW5lIF9fTENfUEVSX0FDQ0VTU19JRAkJMHgwMGExCi0jZGVmaW5lIF9fTENfQVJfTU9ERV9JRAkJCTB4MDBhMwotCi0jZGVmaW5lIF9fTENfU1VCQ0hBTk5FTF9JRAkJMHgwMGI4Ci0jZGVmaW5lIF9fTENfU1VCQ0hBTk5FTF9OUgkJMHgwMGJhCi0jZGVmaW5lIF9fTENfSU9fSU5UX1BBUk0JCTB4MDBiYwotI2RlZmluZSBfX0xDX0lPX0lOVF9XT1JECQkweDAwYzAKLSNkZWZpbmUgX19MQ19TVEZMX0ZBQ19MSVNUCQkweDAwYzgKLSNkZWZpbmUgX19MQ19NQ0NLX0NPREUJCQkweDAwZTgKLQotI2RlZmluZSBfX0xDX0RVTVBfUkVJUEwJCQkweDBlMDAKLQotI2lmbmRlZiBfX3MzOTB4X18KLSNkZWZpbmUgX19MQ19FWFRfT0xEX1BTVwkJMHgwMDE4Ci0jZGVmaW5lIF9fTENfU1ZDX09MRF9QU1cJCTB4MDAyMAotI2RlZmluZSBfX0xDX1BHTV9PTERfUFNXCQkweDAwMjgKLSNkZWZpbmUgX19MQ19NQ0tfT0xEX1BTVwkJMHgwMDMwCi0jZGVmaW5lIF9fTENfSU9fT0xEX1BTVwkJCTB4MDAzOAotI2RlZmluZSBfX0xDX0VYVF9ORVdfUFNXCQkweDAwNTgKLSNkZWZpbmUgX19MQ19TVkNfTkVXX1BTVwkJMHgwMDYwCi0jZGVmaW5lIF9fTENfUEdNX05FV19QU1cJCTB4MDA2OAotI2RlZmluZSBfX0xDX01DS19ORVdfUFNXCQkweDAwNzAKLSNkZWZpbmUgX19MQ19JT19ORVdfUFNXCQkJMHgwMDc4Ci0jZGVmaW5lIF9fTENfU0FWRV9BUkVBCQkJMHgwMjAwCi0jZGVmaW5lIF9fTENfUkVUVVJOX1BTVwkJCTB4MDI0MAotI2RlZmluZSBfX0xDX1JFVFVSTl9NQ0NLX1BTVwkJMHgwMjQ4Ci0jZGVmaW5lIF9fTENfU1lOQ19FTlRFUl9USU1FUgkJMHgwMjUwCi0jZGVmaW5lIF9fTENfQVNZTkNfRU5URVJfVElNRVIJCTB4MDI1OAotI2RlZmluZSBfX0xDX0VYSVRfVElNRVIJCQkweDAyNjAKLSNkZWZpbmUgX19MQ19VU0VSX1RJTUVSCQkJMHgwMjY4Ci0jZGVmaW5lIF9fTENfU1lTVEVNX1RJTUVSCQkweDAyNzAKLSNkZWZpbmUgX19MQ19TVEVBTF9USU1FUgkJMHgwMjc4Ci0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfVElNRVIJCTB4MDI4MAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCQkweDAyODgKLSNkZWZpbmUgX19MQ19DVVJSRU5UCQkJMHgwMjkwCi0jZGVmaW5lIF9fTENfVEhSRUFEX0lORk8JCTB4MDI5NAotI2RlZmluZSBfX0xDX0tFUk5FTF9TVEFDSwkJMHgwMjk4Ci0jZGVmaW5lIF9fTENfQVNZTkNfU1RBQ0sJCTB4MDI5YwotI2RlZmluZSBfX0xDX1BBTklDX1NUQUNLCQkweDAyYTAKLSNkZWZpbmUgX19MQ19LRVJORUxfQVNDRQkJMHgwMmE0Ci0jZGVmaW5lIF9fTENfVVNFUl9BU0NFCQkJMHgwMmE4Ci0jZGVmaW5lIF9fTENfVVNFUl9FWEVDX0FTQ0UJCTB4MDJhYwotI2RlZmluZSBfX0xDX0NQVUlECQkJMHgwMmIwCi0jZGVmaW5lIF9fTENfSU5UX0NMT0NLCQkJMHgwMmM4Ci0jZGVmaW5lIF9fTENfTUFDSElORV9GTEFHUwkJMHgwMmQ4Ci0jZGVmaW5lIF9fTENfRlRSQUNFX0ZVTkMJCTB4MDJkYwotI2RlZmluZSBfX0xDX0lSQgkJCTB4MDMwMAotI2RlZmluZSBfX0xDX1BGQVVMVF9JTlRQQVJNCQkweDAwODAKLSNkZWZpbmUgX19MQ19DUFVfVElNRVJfU0FWRV9BUkVBCTB4MDBkOAotI2RlZmluZSBfX0xDX0NMT0NLX0NPTVBfU0FWRV9BUkVBCTB4MDBlMAotI2RlZmluZSBfX0xDX1BTV19TQVZFX0FSRUEJCTB4MDEwMAotI2RlZmluZSBfX0xDX1BSRUZJWF9TQVZFX0FSRUEJCTB4MDEwOAotI2RlZmluZSBfX0xDX0FSRUdTX1NBVkVfQVJFQQkJMHgwMTIwCi0jZGVmaW5lIF9fTENfRlBSRUdTX1NBVkVfQVJFQQkJMHgwMTYwCi0jZGVmaW5lIF9fTENfR1BSRUdTX1NBVkVfQVJFQQkJMHgwMTgwCi0jZGVmaW5lIF9fTENfQ1JFR1NfU0FWRV9BUkVBCQkweDAxYzAKLSNlbHNlIC8qIF9fczM5MHhfXyAqLwotI2RlZmluZSBfX0xDX0xBU1RfQlJFQUsJCQkweDAxMTAKLSNkZWZpbmUgX19MQ19FWFRfT0xEX1BTVwkJMHgwMTMwCi0jZGVmaW5lIF9fTENfU1ZDX09MRF9QU1cJCTB4MDE0MAotI2RlZmluZSBfX0xDX1BHTV9PTERfUFNXCQkweDAxNTAKLSNkZWZpbmUgX19MQ19NQ0tfT0xEX1BTVwkJMHgwMTYwCi0jZGVmaW5lIF9fTENfSU9fT0xEX1BTVwkJCTB4MDE3MAotI2RlZmluZSBfX0xDX1JFU1RBUlRfUFNXCQkweDAxYTAKLSNkZWZpbmUgX19MQ19FWFRfTkVXX1BTVwkJMHgwMWIwCi0jZGVmaW5lIF9fTENfU1ZDX05FV19QU1cJCTB4MDFjMAotI2RlZmluZSBfX0xDX1BHTV9ORVdfUFNXCQkweDAxZDAKLSNkZWZpbmUgX19MQ19NQ0tfTkVXX1BTVwkJMHgwMWUwCi0jZGVmaW5lIF9fTENfSU9fTkVXX1BTVwkJCTB4MDFmMAotI2RlZmluZSBfX0xDX1NBVkVfQVJFQQkJCTB4MDIwMAotI2RlZmluZSBfX0xDX1JFVFVSTl9QU1cJCQkweDAyODAKLSNkZWZpbmUgX19MQ19SRVRVUk5fTUNDS19QU1cJCTB4MDI5MAotI2RlZmluZSBfX0xDX1NZTkNfRU5URVJfVElNRVIJCTB4MDJhMAotI2RlZmluZSBfX0xDX0FTWU5DX0VOVEVSX1RJTUVSCQkweDAyYTgKLSNkZWZpbmUgX19MQ19FWElUX1RJTUVSCQkJMHgwMmIwCi0jZGVmaW5lIF9fTENfVVNFUl9USU1FUgkJCTB4MDJiOAotI2RlZmluZSBfX0xDX1NZU1RFTV9USU1FUgkJMHgwMmMwCi0jZGVmaW5lIF9fTENfU1RFQUxfVElNRVIJCTB4MDJjOAotI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCQkweDAyZDAKLSNkZWZpbmUgX19MQ19MQVNUX1VQREFURV9DTE9DSwkJMHgwMmQ4Ci0jZGVmaW5lIF9fTENfQ1VSUkVOVAkJCTB4MDJlMAotI2RlZmluZSBfX0xDX1RIUkVBRF9JTkZPCQkweDAyZTgKLSNkZWZpbmUgX19MQ19LRVJORUxfU1RBQ0sJCTB4MDJmMAotI2RlZmluZSBfX0xDX0FTWU5DX1NUQUNLCQkweDAyZjgKLSNkZWZpbmUgX19MQ19QQU5JQ19TVEFDSwkJMHgwMzAwCi0jZGVmaW5lIF9fTENfS0VSTkVMX0FTQ0UJCTB4MDMwOAotI2RlZmluZSBfX0xDX1VTRVJfQVNDRQkJCTB4MDMxMAotI2RlZmluZSBfX0xDX1VTRVJfRVhFQ19BU0NFCQkweDAzMTgKLSNkZWZpbmUgX19MQ19DUFVJRAkJCTB4MDMyMAotI2RlZmluZSBfX0xDX0lOVF9DTE9DSwkJCTB4MDM0MAotI2RlZmluZSBfX0xDX1ZEU09fUEVSX0NQVQkJMHgwMzUwCi0jZGVmaW5lIF9fTENfTUFDSElORV9GTEFHUwkJMHgwMzU4Ci0jZGVmaW5lIF9fTENfRlRSQUNFX0ZVTkMJCTB4MDM2MAotI2RlZmluZSBfX0xDX0lSQgkJCTB4MDM4MAotI2RlZmluZSBfX0xDX1BBU1RFCQkJMHgwM2MwCi0jZGVmaW5lIF9fTENfUEZBVUxUX0lOVFBBUk0JCTB4MTFiOAotI2RlZmluZSBfX0xDX0ZQUkVHU19TQVZFX0FSRUEJCTB4MTIwMAotI2RlZmluZSBfX0xDX0dQUkVHU19TQVZFX0FSRUEJCTB4MTI4MAotI2RlZmluZSBfX0xDX1BTV19TQVZFX0FSRUEJCTB4MTMwMAotI2RlZmluZSBfX0xDX1BSRUZJWF9TQVZFX0FSRUEJCTB4MTMxOAotI2RlZmluZSBfX0xDX0ZQX0NSRUdfU0FWRV9BUkVBCQkweDEzMWMKLSNkZWZpbmUgX19MQ19UT0RSRUdfU0FWRV9BUkVBCQkweDEzMjQKLSNkZWZpbmUgX19MQ19DUFVfVElNRVJfU0FWRV9BUkVBCTB4MTMyOAotI2RlZmluZSBfX0xDX0NMT0NLX0NPTVBfU0FWRV9BUkVBCTB4MTMzMQotI2RlZmluZSBfX0xDX0FSRUdTX1NBVkVfQVJFQQkJMHgxMzQwCi0jZGVmaW5lIF9fTENfQ1JFR1NfU0FWRV9BUkVBCQkweDEzODAKLSNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2luY2x1ZGUgPGFzbS9jcHUuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgogCiB2b2lkIHJlc3RhcnRfaW50X2hhbmRsZXIodm9pZCk7CiB2b2lkIGV4dF9pbnRfaGFuZGxlcih2b2lkKTsKQEAgLTE0NCw3ICsxOSwxMiBAQAogdm9pZCBtY2NrX2ludF9oYW5kbGVyKHZvaWQpOwogdm9pZCBpb19pbnRfaGFuZGxlcih2b2lkKTsKIAotc3RydWN0IHNhdmVfYXJlYV9zMzkwIHsKKyNpZmRlZiBDT05GSUdfMzJCSVQKKworI2RlZmluZSBMQ19PUkRFUiAwCisjZGVmaW5lIExDX1BBR0VTIDEKKworc3RydWN0IHNhdmVfYXJlYSB7CiAJdTMyCWV4dF9zYXZlOwogCXU2NAl0aW1lcjsKIAl1NjQJY2xrX2NtcDsKQEAgLTE1Niw1NCArMzYsMTMgQEAKIAl1NjQJZnBfcmVnc1s0XTsKIAl1MzIJZ3BfcmVnc1sxNl07CiAJdTMyCWN0cmxfcmVnc1sxNl07Ci19ICBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK30gX19wYWNrZWQ7CiAKLXN0cnVjdCBzYXZlX2FyZWFfczM5MHggewotCXU2NAlmcF9yZWdzWzE2XTsKLQl1NjQJZ3BfcmVnc1sxNl07Ci0JdTgJcHN3WzE2XTsKLQl1OAlwYWQxWzhdOwotCXUzMglwcmVmX3JlZzsKLQl1MzIJZnBfY3RybF9yZWc7Ci0JdTgJcGFkMls0XTsKLQl1MzIJdG9kX3JlZzsKLQl1NjQJdGltZXI7Ci0JdTY0CWNsa19jbXA7Ci0JdTgJcGFkM1s4XTsKLQl1MzIJYWNjX3JlZ3NbMTZdOwotCXU2NAljdHJsX3JlZ3NbMTZdOwotfSAgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXVuaW9uIHNhdmVfYXJlYSB7Ci0Jc3RydWN0IHNhdmVfYXJlYV9zMzkwCXMzOTA7Ci0Jc3RydWN0IHNhdmVfYXJlYV9zMzkweAlzMzkweDsKLX07Ci0KLSNkZWZpbmUgU0FWRV9BUkVBX0JBU0VfUzM5MAkweGQ0Ci0jZGVmaW5lIFNBVkVfQVJFQV9CQVNFX1MzOTBYCTB4MTIwMAotCi0jaWZuZGVmIF9fczM5MHhfXwotI2RlZmluZSBTQVZFX0FSRUFfU0laRSBzaXplb2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkwKQotI2RlZmluZSBTQVZFX0FSRUFfQkFTRSBTQVZFX0FSRUFfQkFTRV9TMzkwCi0jZWxzZQotI2RlZmluZSBTQVZFX0FSRUFfU0laRSBzaXplb2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCkKLSNkZWZpbmUgU0FWRV9BUkVBX0JBU0UgU0FWRV9BUkVBX0JBU0VfUzM5MFgKLSNlbmRpZgotCi0jaWZuZGVmIF9fczM5MHhfXwotI2RlZmluZSBMQ19PUkRFUiAwCi0jZWxzZQotI2RlZmluZSBMQ19PUkRFUiAxCi0jZW5kaWYKLQotI2RlZmluZSBMQ19QQUdFUyAoMVVMIDw8IExDX09SREVSKQotCi1zdHJ1Y3QgX2xvd2NvcmUKLXsKLSNpZm5kZWYgX19zMzkweF9fCi0JLyogMHgwMDAwIC0gMHgwMWZmOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLworc3RydWN0IF9sb3djb3JlIHsKIAlwc3dfdAlyZXN0YXJ0X3BzdzsJCQkvKiAweDAwMDAgKi8KLQlfX3UzMgljY3cyWzRdOwkJCS8qIDB4MDAwOCAqLworCXBzd190CXJlc3RhcnRfb2xkX3BzdzsJCS8qIDB4MDAwOCAqLworCV9fdTgJcGFkXzB4MDAxMFsweDAwMTQtMHgwMDEwXTsJLyogMHgwMDEwICovCisJX191MzIJaXBsX3Bhcm1ibG9ja19wdHI7CQkvKiAweDAwMTQgKi8KIAlwc3dfdAlleHRlcm5hbF9vbGRfcHN3OwkJLyogMHgwMDE4ICovCiAJcHN3X3QJc3ZjX29sZF9wc3c7CQkJLyogMHgwMDIwICovCiAJcHN3X3QJcHJvZ3JhbV9vbGRfcHN3OwkJLyogMHgwMDI4ICovCkBAIC0yMjksNyArNjgsOSBAQAogCV9fdTMyCW1vbml0b3JfY29kZTsJCQkvKiAweDAwOWMgKi8KIAlfX3U4CWV4Y19hY2Nlc3NfaWQ7CQkJLyogMHgwMGEwICovCiAJX191OAlwZXJfYWNjZXNzX2lkOwkJCS8qIDB4MDBhMSAqLwotCV9fdTgJcGFkXzB4MDBhMlsweDAwYjgtMHgwMGEyXTsJLyogMHgwMGEyICovCisJX191OAlvcF9hY2Nlc3NfaWQ7CQkJLyogMHgwMGEyICovCisJX191OAlhcl9hY2Nlc3NfaWQ7CQkJLyogMHgwMGEzICovCisJX191OAlwYWRfMHgwMGE0WzB4MDBiOC0weDAwYTRdOwkvKiAweDAwYTQgKi8KIAlfX3UxNglzdWJjaGFubmVsX2lkOwkJCS8qIDB4MDBiOCAqLwogCV9fdTE2CXN1YmNoYW5uZWxfbnI7CQkJLyogMHgwMGJhICovCiAJX191MzIJaW9faW50X3Bhcm07CQkJLyogMHgwMGJjICovCkBAIC0yNDUsOCArODYsOSBAQAogCV9fdTMyCWV4dGVybmFsX2RhbWFnZV9jb2RlOwkJLyogMHgwMGY0ICovCiAJX191MzIJZmFpbGluZ19zdG9yYWdlX2FkZHJlc3M7CS8qIDB4MDBmOCAqLwogCV9fdTgJcGFkXzB4MDBmY1sweDAxMDAtMHgwMGZjXTsJLyogMHgwMGZjICovCi0JX191MzIJc3Rfc3RhdHVzX2ZpeGVkX2xvZ291dFs0XTsJLyogMHgwMTAwICovCi0JX191OAlwYWRfMHgwMTEwWzB4MDEyMC0weDAxMTBdOwkvKiAweDAxMTAgKi8KKwlwc3dfdAlwc3dfc2F2ZV9hcmVhOwkJCS8qIDB4MDEwMCAqLworCV9fdTMyCXByZWZpeHJlZ19zYXZlX2FyZWE7CQkvKiAweDAxMDggKi8KKwlfX3U4CXBhZF8weDAxMGNbMHgwMTIwLTB4MDEwY107CS8qIDB4MDEwYyAqLwogCiAJLyogQ1BVIHJlZ2lzdGVyIHNhdmUgYXJlYTogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KIAlfX3UzMglhY2Nlc3NfcmVnc19zYXZlX2FyZWFbMTZdOwkvKiAweDAxMjAgKi8KQEAgLTMxMCwxMCArMTUyLDMyIEBACiAKIAkvKiBBbGlnbiB0byB0aGUgdG9wIDFrIG9mIHByZWZpeCBhcmVhICovCiAJX191OAlwYWRfMHgwZTA4WzB4MTAwMC0weDBlMDhdOwkvKiAweDBlMDggKi8KLSNlbHNlIC8qICFfX3MzOTB4X18gKi8KLQkvKiAweDAwMDAgLSAweDAxZmY6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCi0JX191MzIJY2N3MVsyXTsJCQkvKiAweDAwMDAgKi8KLQlfX3UzMgljY3cyWzRdOwkJCS8qIDB4MDAwOCAqLworfSBfX3BhY2tlZDsKKworI2Vsc2UgLyogQ09ORklHXzMyQklUICovCisKKyNkZWZpbmUgTENfT1JERVIgMQorI2RlZmluZSBMQ19QQUdFUyAyCisKK3N0cnVjdCBzYXZlX2FyZWEgeworCXU2NAlmcF9yZWdzWzE2XTsKKwl1NjQJZ3BfcmVnc1sxNl07CisJdTgJcHN3WzE2XTsKKwl1OAlwYWQxWzhdOworCXUzMglwcmVmX3JlZzsKKwl1MzIJZnBfY3RybF9yZWc7CisJdTgJcGFkMls0XTsKKwl1MzIJdG9kX3JlZzsKKwl1NjQJdGltZXI7CisJdTY0CWNsa19jbXA7CisJdTgJcGFkM1s4XTsKKwl1MzIJYWNjX3JlZ3NbMTZdOworCXU2NAljdHJsX3JlZ3NbMTZdOworfSBfX3BhY2tlZDsKKworc3RydWN0IF9sb3djb3JlIHsKKwlfX3U4CXBhZF8weDAwMDBbMHgwMDE0LTB4MDAwMF07CS8qIDB4MDAwMCAqLworCV9fdTMyCWlwbF9wYXJtYmxvY2tfcHRyOwkJLyogMHgwMDE0ICovCiAJX191OAlwYWRfMHgwMDE4WzB4MDA4MC0weDAwMThdOwkvKiAweDAwMTggKi8KIAlfX3UzMglleHRfcGFyYW1zOwkJCS8qIDB4MDA4MCAqLwogCV9fdTE2CWNwdV9hZGRyOwkJCS8qIDB4MDA4NCAqLwpAQCAtMzQ0LDcgKzIwOCw5IEBACiAJX191OAlwYWRfMHgwMGYwWzB4MDBmNC0weDAwZjBdOwkvKiAweDAwZjAgKi8KIAlfX3UzMglleHRlcm5hbF9kYW1hZ2VfY29kZTsJCS8qIDB4MDBmNCAqLwogCWFkZHJfdAlmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzczsJLyogMHgwMGY4ICovCi0JX191OAlwYWRfMHgwMTAwWzB4MDEyMC0weDAxMDBdOwkvKiAweDAxMDAgKi8KKwlfX3U4CXBhZF8weDAxMDBbMHgwMTEwLTB4MDEwMF07CS8qIDB4MDEwMCAqLworCV9fdTY0CWJyZWFraW5nX2V2ZW50X2FkZHI7CQkvKiAweDAxMTAgKi8KKwlfX3U4CXBhZF8weDAxMThbMHgwMTIwLTB4MDExOF07CS8qIDB4MDExOCAqLwogCXBzd190CXJlc3RhcnRfb2xkX3BzdzsJCS8qIDB4MDEyMCAqLwogCXBzd190CWV4dGVybmFsX29sZF9wc3c7CQkvKiAweDAxMzAgKi8KIAlwc3dfdAlzdmNfb2xkX3BzdzsJCQkvKiAweDAxNDAgKi8KQEAgLTQyNSw3ICsyOTEsNyBAQAogCS8qIENQVSByZWdpc3RlciBzYXZlIGFyZWE6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCiAJX191NjQJZmxvYXRpbmdfcHRfc2F2ZV9hcmVhWzE2XTsJLyogMHgxMjAwICovCiAJX191NjQJZ3ByZWdzX3NhdmVfYXJlYVsxNl07CQkvKiAweDEyODAgKi8KLQlfX3UzMglzdF9zdGF0dXNfZml4ZWRfbG9nb3V0WzRdOwkvKiAweDEzMDAgKi8KKwlwc3dfdAlwc3dfc2F2ZV9hcmVhOwkJCS8qIDB4MTMwMCAqLwogCV9fdTgJcGFkXzB4MTMxMFsweDEzMTgtMHgxMzEwXTsJLyogMHgxMzEwICovCiAJX191MzIJcHJlZml4cmVnX3NhdmVfYXJlYTsJCS8qIDB4MTMxOCAqLwogCV9fdTMyCWZwdF9jcmVnX3NhdmVfYXJlYTsJCS8qIDB4MTMxYyAqLwpAQCAtNDM5LDEwICszMDUsMTIgQEAKIAogCS8qIGFsaWduIHRvIHRoZSB0b3Agb2YgdGhlIHByZWZpeCBhcmVhICovCiAJX191OAlwYWRfMHgxNDAwWzB4MjAwMC0weDE0MDBdOwkvKiAweDE0MDAgKi8KLSNlbmRpZiAvKiAhX19zMzkweF9fICovCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOyAvKiBFbmQgc3RydWN0dXJlKi8KK30gX19wYWNrZWQ7CisKKyNlbmRpZiAvKiBDT05GSUdfMzJCSVQgKi8KIAogI2RlZmluZSBTMzkwX2xvd2NvcmUgKCooKHN0cnVjdCBfbG93Y29yZSAqKSAwKSkKKwogZXh0ZXJuIHN0cnVjdCBfbG93Y29yZSAqbG93Y29yZV9wdHJbXTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9wcmVmaXgoX191MzIgYWRkcmVzcykKQEAgLTQ1OCw2ICszMjYsNCBAQAogCXJldHVybiBhZGRyZXNzOwogfQogCi0jZW5kaWYKLQotI2VuZGlmCisjZW5kaWYgLyogX0FTTV9TMzkwX0xPV0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggNWU5ZGFmNS4uYWY2NTBmYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xMDcsOSArMTA3LDYgQEAKICNkZWZpbmUgX19wZ2QoeCkgICAgICAgICgocGdkX3QpIHsgKHgpIH0gKQogI2RlZmluZSBfX3BncHJvdCh4KSAgICAgKChwZ3Byb3RfdCkgeyAoeCkgfSApCiAKLS8qIGRlZmF1bHQgc3RvcmFnZSBrZXkgdXNlZCBmb3IgYWxsIHBhZ2VzICovCi1leHRlcm4gdW5zaWduZWQgaW50IGRlZmF1bHRfc3RvcmFnZV9rZXk7Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZAogcGFnZV9zZXRfc3RvcmFnZV9rZXkodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgc2tleSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGUyZmE3OWMuLjliNWI5MTggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtNDMsNyArNDMsNyBAQAogICogVGhlIFMzOTAgZG9lc24ndCBoYXZlIGFueSBleHRlcm5hbCBNTVUgaW5mbzogdGhlIGtlcm5lbCBwYWdlCiAgKiB0YWJsZXMgY29udGFpbiBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi4KICAqLwotI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlKSAgICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlcCkgICAgIGRvIHsgfSB3aGlsZSAoMCkKIAogLyoKICAqIFpFUk9fUEFHRSBpcyBhIGdsb2JhbCBzaGFyZWQgcGFnZSB0aGF0IGlzIGFsd2F5cyB6ZXJvOiB1c2VkCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggYjQyNzE1NC4uNzNlMjU5OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMjgsNyArMjgsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2NwdV9pZChzdHJ1Y3QgY3B1aWQgKnB0cikKIHsKLQlhc20gdm9sYXRpbGUoInN0aWRwIDAoJTEpIiA6ICI9bSIgKCpwdHIpIDogImEiIChwdHIpKTsKKwlhc20gdm9sYXRpbGUoInN0aWRwICUwIiA6ICI9USIgKCpwdHIpKTsKIH0KIAogZXh0ZXJuIHZvaWQgczM5MF9hZGp1c3RfamlmZmllcyh2b2lkKTsKQEAgLTE4NCw5ICsxODQsOSBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fbG9hZF9wc3cocHN3X3QgcHN3KQogewogI2lmbmRlZiBfX3MzOTB4X18KLQlhc20gdm9sYXRpbGUoImxwc3cgIDAoJTApIiA6IDogImEiICgmcHN3KSwgIm0iIChwc3cpIDogImNjIik7CisJYXNtIHZvbGF0aWxlKCJscHN3ICAlMCIgOiA6ICJRIiAocHN3KSA6ICJjYyIpOwogI2Vsc2UKLQlhc20gdm9sYXRpbGUoImxwc3dlIDAoJTApIiA6IDogImEiICgmcHN3KSwgIm0iIChwc3cpIDogImNjIik7CisJYXNtIHZvbGF0aWxlKCJscHN3ZSAlMCIgOiA6ICJRIiAocHN3KSA6ICJjYyIpOwogI2VuZGlmCiB9CiAKQEAgLTIwNiwxNyArMjA2LDE3IEBACiAJYXNtIHZvbGF0aWxlKAogCQkiCWJhc3IJJTAsMFxuIgogCQkiMDoJYWhpCSUwLDFmLTBiXG4iCi0JCSIJc3QJJTAsNCglMSlcbiIKLQkJIglscHN3CTAoJTEpXG4iCisJCSIJc3QJJTAsJU8xKzQoJVIxKVxuIgorCQkiCWxwc3cJJTFcbiIKIAkJIjE6IgotCQk6ICI9JmQiIChhZGRyKSA6ICJhIiAoJnBzdyksICJtIiAocHN3KSA6ICJtZW1vcnkiLCAiY2MiKTsKKwkJOiAiPSZkIiAoYWRkciksICI9USIgKHBzdykgOiAiUSIgKHBzdykgOiAibWVtb3J5IiwgImNjIik7CiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KIAlhc20gdm9sYXRpbGUoCiAJCSIJbGFybAklMCwxZlxuIgotCQkiCXN0ZwklMCw4KCUxKVxuIgotCQkiCWxwc3dlCTAoJTEpXG4iCisJCSIJc3RnCSUwLCVPMSs4KCVSMSlcbiIKKwkJIglscHN3ZQklMVxuIgogCQkiMToiCi0JCTogIj0mZCIgKGFkZHIpIDogImEiICgmcHN3KSwgIm0iIChwc3cpIDogIm1lbW9yeSIsICJjYyIpOworCQk6ICI9JmQiIChhZGRyKSwgIj1RIiAocHN3KSA6ICJRIiAocHN3KSA6ICJtZW1vcnkiLCAiY2MiKTsKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KIH0KICAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCA5NWRjZjE4Li5kZDJkOTEzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC00OTIsMTMgKzQ5MiwyNCBAQAogc3RydWN0IHRhc2tfc3RydWN0OwogZXh0ZXJuIHZvaWQgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOwogCiAjZGVmaW5lIHVzZXJfbW9kZShyZWdzKSAoKChyZWdzKS0+cHN3Lm1hc2sgJiBQU1dfTUFTS19QU1RBVEUpICE9IDApCiAjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgKChyZWdzKS0+cHN3LmFkZHIgJiBQU1dfQUREUl9JTlNOKQogI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIocmVncykoKHJlZ3MpLT5ncHJzWzE1XSkKICNkZWZpbmUgcmVnc19yZXR1cm5fdmFsdWUocmVncykoKHJlZ3MpLT5ncHJzWzJdKQogI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykKLWV4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOworCitpbnQgcmVnc19xdWVyeV9yZWdpc3Rlcl9vZmZzZXQoY29uc3QgY2hhciAqbmFtZSk7Citjb25zdCBjaGFyICpyZWdzX3F1ZXJ5X3JlZ2lzdGVyX25hbWUodW5zaWduZWQgaW50IG9mZnNldCk7Cit1bnNpZ25lZCBsb25nIHJlZ3NfZ2V0X3JlZ2lzdGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKK3Vuc2lnbmVkIGxvbmcgcmVnc19nZXRfa2VybmVsX3N0YWNrX250aChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IG4pOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcga2VybmVsX3N0YWNrX3BvaW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIHJlZ3MtPmdwcnNbMTVdICYgUFNXX0FERFJfSU5TTjsKK30KKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKaW5kZXggNzlkODQ5Zi4uYzY2NmJmZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCkBAIC0xMyw3ICsxMyw4IEBACiAjaW5jbHVkZSA8YXNtL2Npby5oPgogI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KIAotI2RlZmluZSBRRElPX01BWF9RVUVVRVNfUEVSX0lSUQkJMzIKKy8qIG9ubHkgdXNlIDQgcXVldWVzIHRvIHNhdmUgc29tZSBjYWNoZWxpbmVzICovCisjZGVmaW5lIFFESU9fTUFYX1FVRVVFU19QRVJfSVJRCQk0CiAjZGVmaW5lIFFESU9fTUFYX0JVRkZFUlNfUEVSX1EJCTEyOAogI2RlZmluZSBRRElPX01BWF9CVUZGRVJTX01BU0sJCShRRElPX01BWF9CVUZGRVJTX1BFUl9RIC0gMSkKICNkZWZpbmUgUURJT19NQVhfRUxFTUVOVFNfUEVSX0JVRkZFUgkxNgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3J3c2VtLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcndzZW0uaAppbmRleCA5ZDJhMTc5Li40MjNmZGRhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcndzZW0uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcndzZW0uaApAQCAtMTI0LDIxICsxMjQsMjEgQEAKIAogCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIJbAklMCwwKCUzKVxuIgorCQkiCWwJJTAsJTJcbiIKIAkJIjA6CWxyCSUxLCUwXG4iCi0JCSIJYWhpCSUxLCU1XG4iCi0JCSIJY3MJJTAsJTEsMCglMylcbiIKKwkJIglhaGkJJTEsJTRcbiIKKwkJIgljcwklMCwlMSwlMlxuIgogCQkiCWpsCTBiIgogI2Vsc2UgLyogX19zMzkweF9fICovCi0JCSIJbGcJJTAsMCglMylcbiIKKwkJIglsZwklMCwlMlxuIgogCQkiMDoJbGdyCSUxLCUwXG4iCi0JCSIJYWdoaQklMSwlNVxuIgotCQkiCWNzZwklMCwlMSwwKCUzKVxuIgorCQkiCWFnaGkJJTEsJTRcbiIKKwkJIgljc2cJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLQkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCi0JCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksCi0JCSAgImkiIChSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTKSA6ICJjYyIsICJtZW1vcnkiKTsKKwkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9USIgKHNlbS0+Y291bnQpCisJCTogIlEiIChzZW0tPmNvdW50KSwgImkiIChSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTKQorCQk6ICJjYyIsICJtZW1vcnkiKTsKIAlpZiAob2xkIDwgMCkKIAkJcndzZW1fZG93bl9yZWFkX2ZhaWxlZChzZW0pOwogfQpAQCAtMTUyLDI1ICsxNTIsMjUgQEAKIAogCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIJbAklMCwwKCUzKVxuIgorCQkiCWwJJTAsJTJcbiIKIAkJIjA6CWx0cgklMSwlMFxuIgogCQkiCWptCTFmXG4iCi0JCSIJYWhpCSUxLCU1XG4iCi0JCSIJY3MJJTAsJTEsMCglMylcbiIKKwkJIglhaGkJJTEsJTRcbiIKKwkJIgljcwklMCwlMSwlMlxuIgogCQkiCWpsCTBiXG4iCiAJCSIxOiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIJbGcJJTAsJTJcbiIKIAkJIjA6CWx0Z3IJJTEsJTBcbiIKIAkJIglqbQkxZlxuIgotCQkiCWFnaGkJJTEsJTVcbiIKLQkJIgljc2cJJTAsJTEsMCglMylcbiIKKwkJIglhZ2hpCSUxLCU0XG4iCisJCSIJY3NnCSUwLCUxLCUyXG4iCiAJCSIJamwJMGJcbiIKIAkJIjE6IgogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1tIiAoc2VtLT5jb3VudCkKLQkJOiAiYSIgKCZzZW0tPmNvdW50KSwgIm0iIChzZW0tPmNvdW50KSwKLQkJICAiaSIgKFJXU0VNX0FDVElWRV9SRUFEX0JJQVMpIDogImNjIiwgIm1lbW9yeSIpOworCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1RIiAoc2VtLT5jb3VudCkKKwkJOiAiUSIgKHNlbS0+Y291bnQpLCAiaSIgKFJXU0VNX0FDVElWRV9SRUFEX0JJQVMpCisJCTogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiBvbGQgPj0gMCA/IDEgOiAwOwogfQogCkBAIC0xODQsMjAgKzE4NCwyMCBAQAogCXRtcCA9IFJXU0VNX0FDVElWRV9XUklURV9CSUFTOwogCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIJbAklMCwwKCUzKVxuIgorCQkiCWwJJTAsJTJcbiIKIAkJIjA6CWxyCSUxLCUwXG4iCi0JCSIJYQklMSwlNVxuIgotCQkiCWNzCSUwLCUxLDAoJTMpXG4iCisJCSIJYQklMSwlNFxuIgorCQkiCWNzCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLQkJIglsZwklMCwwKCUzKVxuIgorCQkiCWxnCSUwLCUyXG4iCiAJCSIwOglsZ3IJJTEsJTBcbiIKLQkJIglhZwklMSwlNVxuIgotCQkiCWNzZwklMCwlMSwwKCUzKVxuIgorCQkiCWFnCSUxLCU0XG4iCisJCSIJY3NnCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZW5kaWYgLyogX19zMzkweF9fICovCi0JCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQotCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAibSIgKHNlbS0+Y291bnQpLCAibSIgKHRtcCkKKwkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9USIgKHNlbS0+Y291bnQpCisJCTogIlEiIChzZW0tPmNvdW50KSwgIm0iICh0bXApCiAJCTogImNjIiwgIm1lbW9yeSIpOwogCWlmIChvbGQgIT0gMCkKIAkJcndzZW1fZG93bl93cml0ZV9mYWlsZWQoc2VtKTsKQEAgLTIxNywyMiArMjE3LDIyIEBACiAKIAlhc20gdm9sYXRpbGUoCiAjaWZuZGVmIF9fczM5MHhfXwotCQkiCWwJJTAsMCglMilcbiIKKwkJIglsCSUwLCUxXG4iCiAJCSIwOglsdHIJJTAsJTBcbiIKIAkJIglqbnoJMWZcbiIKLQkJIgljcwklMCwlNCwwKCUyKVxuIgorCQkiCWNzCSUwLCUzLCUxXG4iCiAJCSIJamwJMGJcbiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTIpXG4iCisJCSIJbGcJJTAsJTFcbiIKIAkJIjA6CWx0Z3IJJTAsJTBcbiIKIAkJIglqbnoJMWZcbiIKLQkJIgljc2cJJTAsJTQsMCglMilcbiIKKwkJIgljc2cJJTAsJTMsJTFcbiIKIAkJIglqbAkwYlxuIgogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCQkiMToiCi0JCTogIj0mZCIgKG9sZCksICI9bSIgKHNlbS0+Y291bnQpCi0JCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksCi0JCSAgImQiIChSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUykgOiAiY2MiLCAibWVtb3J5Iik7CisJCTogIj0mZCIgKG9sZCksICI9USIgKHNlbS0+Y291bnQpCisJCTogIlEiIChzZW0tPmNvdW50KSwgImQiIChSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUykKKwkJOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIChvbGQgPT0gUldTRU1fVU5MT0NLRURfVkFMVUUpID8gMSA6IDA7CiB9CiAKQEAgLTI0NSwyMSArMjQ1LDIwIEBACiAKIAlhc20gdm9sYXRpbGUoCiAjaWZuZGVmIF9fczM5MHhfXwotCQkiCWwJJTAsMCglMylcbiIKKwkJIglsCSUwLCUyXG4iCiAJCSIwOglscgklMSwlMFxuIgotCQkiCWFoaQklMSwlNVxuIgotCQkiCWNzCSUwLCUxLDAoJTMpXG4iCisJCSIJYWhpCSUxLCU0XG4iCisJCSIJY3MJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIJbGcJJTAsJTJcbiIKIAkJIjA6CWxncgklMSwlMFxuIgotCQkiCWFnaGkJJTEsJTVcbiIKLQkJIgljc2cJJTAsJTEsMCglMylcbiIKKwkJIglhZ2hpCSUxLCU0XG4iCisJCSIJY3NnCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZW5kaWYgLyogX19zMzkweF9fICovCi0JCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQotCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAibSIgKHNlbS0+Y291bnQpLAotCQkgICJpIiAoLVJXU0VNX0FDVElWRV9SRUFEX0JJQVMpCisJCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPVEiIChzZW0tPmNvdW50KQorCQk6ICJRIiAoc2VtLT5jb3VudCksICJpIiAoLVJXU0VNX0FDVElWRV9SRUFEX0JJQVMpCiAJCTogImNjIiwgIm1lbW9yeSIpOwogCWlmIChuZXcgPCAwKQogCQlpZiAoKG5ldyAmIFJXU0VNX0FDVElWRV9NQVNLKSA9PSAwKQpAQCAtMjc2LDIwICsyNzUsMjAgQEAKIAl0bXAgPSAtUldTRU1fQUNUSVZFX1dSSVRFX0JJQVM7CiAJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIglsCSUwLDAoJTMpXG4iCisJCSIJbAklMCwlMlxuIgogCQkiMDoJbHIJJTEsJTBcbiIKLQkJIglhCSUxLCU1XG4iCi0JCSIJY3MJJTAsJTEsMCglMylcbiIKKwkJIglhCSUxLCU0XG4iCisJCSIJY3MJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIJbGcJJTAsJTJcbiIKIAkJIjA6CWxncgklMSwlMFxuIgotCQkiCWFnCSUxLCU1XG4iCi0JCSIJY3NnCSUwLCUxLDAoJTMpXG4iCisJCSIJYWcJJTEsJTRcbiIKKwkJIgljc2cJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLQkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCi0JCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksICJtIiAodG1wKQorCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1RIiAoc2VtLT5jb3VudCkKKwkJOiAiUSIgKHNlbS0+Y291bnQpLCAibSIgKHRtcCkKIAkJOiAiY2MiLCAibWVtb3J5Iik7CiAJaWYgKG5ldyA8IDApCiAJCWlmICgobmV3ICYgUldTRU1fQUNUSVZFX01BU0spID09IDApCkBAIC0zMDYsMjAgKzMwNSwyMCBAQAogCXRtcCA9IC1SV1NFTV9XQUlUSU5HX0JJQVM7CiAJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIglsCSUwLDAoJTMpXG4iCisJCSIJbAklMCwlMlxuIgogCQkiMDoJbHIJJTEsJTBcbiIKLQkJIglhCSUxLCU1XG4iCi0JCSIJY3MJJTAsJTEsMCglMylcbiIKKwkJIglhCSUxLCU0XG4iCisJCSIJY3MJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIJbGcJJTAsJTJcbiIKIAkJIjA6CWxncgklMSwlMFxuIgotCQkiCWFnCSUxLCU1XG4iCi0JCSIJY3NnCSUwLCUxLDAoJTMpXG4iCisJCSIJYWcJJTEsJTRcbiIKKwkJIgljc2cJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLQkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCi0JCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksICJtIiAodG1wKQorCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1RIiAoc2VtLT5jb3VudCkKKwkJOiAiUSIgKHNlbS0+Y291bnQpLCAibSIgKHRtcCkKIAkJOiAiY2MiLCAibWVtb3J5Iik7CiAJaWYgKG5ldyA+IDEpCiAJCXJ3c2VtX2Rvd25ncmFkZV93YWtlKHNlbSk7CkBAIC0zMzQsMjAgKzMzMywyMCBAQAogCiAJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIglsCSUwLDAoJTMpXG4iCisJCSIJbAklMCwlMlxuIgogCQkiMDoJbHIJJTEsJTBcbiIKLQkJIglhcgklMSwlNVxuIgotCQkiCWNzCSUwLCUxLDAoJTMpXG4iCisJCSIJYXIJJTEsJTRcbiIKKwkJIgljcwklMCwlMSwlMlxuIgogCQkiCWpsCTBiIgogI2Vsc2UgLyogX19zMzkweF9fICovCi0JCSIJbGcJJTAsMCglMylcbiIKKwkJIglsZwklMCwlMlxuIgogCQkiMDoJbGdyCSUxLCUwXG4iCi0JCSIJYWdyCSUxLCU1XG4iCi0JCSIJY3NnCSUwLCUxLDAoJTMpXG4iCisJCSIJYWdyCSUxLCU0XG4iCisJCSIJY3NnCSUwLCUxLCUyXG4iCiAJCSIJamwJMGIiCiAjZW5kaWYgLyogX19zMzkweF9fICovCi0JCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQotCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAibSIgKHNlbS0+Y291bnQpLCAiZCIgKGRlbHRhKQorCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1RIiAoc2VtLT5jb3VudCkKKwkJOiAiUSIgKHNlbS0+Y291bnQpLCAiZCIgKGRlbHRhKQogCQk6ICJjYyIsICJtZW1vcnkiKTsKIH0KIApAQCAtMzYwLDIwICszNTksMjAgQEAKIAogCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIJbAklMCwwKCUzKVxuIgorCQkiCWwJJTAsJTJcbiIKIAkJIjA6CWxyCSUxLCUwXG4iCi0JCSIJYXIJJTEsJTVcbiIKLQkJIgljcwklMCwlMSwwKCUzKVxuIgorCQkiCWFyCSUxLCU0XG4iCisJCSIJY3MJJTAsJTEsJTJcbiIKIAkJIglqbAkwYiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIJbGcJJTAsJTJcbiIKIAkJIjA6CWxncgklMSwlMFxuIgotCQkiCWFncgklMSwlNVxuIgotCQkiCWNzZwklMCwlMSwwKCUzKVxuIgorCQkiCWFncgklMSwlNFxuIgorCQkiCWNzZwklMCwlMSwlMlxuIgogCQkiCWpsCTBiIgogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1tIiAoc2VtLT5jb3VudCkKLQkJOiAiYSIgKCZzZW0tPmNvdW50KSwgIm0iIChzZW0tPmNvdW50KSwgImQiIChkZWx0YSkKKwkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9USIgKHNlbS0+Y291bnQpCisJCTogIlEiIChzZW0tPmNvdW50KSwgImQiIChkZWx0YSkKIAkJOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIG5ldzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldHVwLmgKaW5kZXggNTJhNzc5Yy4uOWFiNmJkMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTE0LDE0ICsxNCwxNCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQogI2RlZmluZSBQQVJNQVJFQQkJMHgxMDQwMAogI2RlZmluZSBNRU1PUllfQ0hVTktTCQkyNTYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKICNpZm5kZWYgX19zMzkweF9fCiAjZGVmaW5lIElQTF9ERVZJQ0UgICAgICAgICgqKHVuc2lnbmVkIGxvbmcgKikgICgweDEwNDA0KSkKICNkZWZpbmUgSU5JVFJEX1NUQVJUICAgICAgKCoodW5zaWduZWQgbG9uZyAqKSAgKDB4MTA0MEMpKQpAQCAtNzEsOSArNzEsMTIgQEAKICNkZWZpbmUgTUFDSElORV9GTEFHX0tWTQkoMVVMIDw8IDkpCiAjZGVmaW5lIE1BQ0hJTkVfRkxBR19IUEFHRQkoMVVMIDw8IDEwKQogI2RlZmluZSBNQUNISU5FX0ZMQUdfUEZNRgkoMVVMIDw8IDExKQorI2RlZmluZSBNQUNISU5FX0ZMQUdfTFBBUgkoMVVMIDw8IDEyKQogCiAjZGVmaW5lIE1BQ0hJTkVfSVNfVk0JCShTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFncyAmIE1BQ0hJTkVfRkxBR19WTSkKICNkZWZpbmUgTUFDSElORV9JU19LVk0JCShTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFncyAmIE1BQ0hJTkVfRkxBR19LVk0pCisjZGVmaW5lIE1BQ0hJTkVfSVNfTFBBUgkJKFMzOTBfbG93Y29yZS5tYWNoaW5lX2ZsYWdzICYgTUFDSElORV9GTEFHX0xQQVIpCisKICNkZWZpbmUgTUFDSElORV9IQVNfRElBRzlDCShTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFncyAmIE1BQ0hJTkVfRkxBR19ESUFHOUMpCiAKICNpZm5kZWYgX19zMzkweF9fCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2lncC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NpZ3AuaAppbmRleCBmNzJkNjExLi5lM2JmZmQ0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2lncC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zaWdwLmgKQEAgLTEsMjQgKzEsMTkgQEAKIC8qCi0gKiAgaW5jbHVkZS9hc20tczM5MC9zaWdwLmgKKyAqICBSb3V0aW5lcyBhbmQgc3RydWN0dXJlcyBmb3Igc2lnbmFsbGluZyBvdGhlciBwcm9jZXNzb3JzLgogICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMTk5OSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3Iocyk6IERlbmlzIEpvc2VwaCBCYXJyb3cgKGRqYmFycm93QGRlLmlibS5jb20sYmFycm93X2RqQHlhaG9vLmNvbSksCi0gKiAgICAgICAgICAgICAgIE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSkKLSAqICAgICAgICAgICAgICAgSGVpa28gQ2Fyc3RlbnMgKGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20pCi0gKgotICogIHNpZ3AuaCBieSBELkouIEJhcnJvdyAoYykgSUJNIDE5OTkKLSAqICBjb250YWlucyByb3V0aW5lcyAvIHN0cnVjdHVyZXMgZm9yIHNpZ25hbGxpbmcgb3RoZXIgUy8zOTAgcHJvY2Vzc29ycyBpbiBhbgotICogIFNNUCBjb25maWd1cmF0aW9uLgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk5LDIwMTAKKyAqICAgIEF1dGhvcihzKTogRGVuaXMgSm9zZXBoIEJhcnJvdywKKyAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+LAogICovCiAKLSNpZm5kZWYgX19TSUdQX18KLSNkZWZpbmUgX19TSUdQX18KKyNpZm5kZWYgX19BU01fU0lHUF9ICisjZGVmaW5lIF9fQVNNX1NJR1BfSAogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0vKiBnZXQgcmVhbCBjcHUgYWRkcmVzcyBmcm9tIGxvZ2ljYWwgY3B1IG51bWJlciAqLwotZXh0ZXJuIGludCBfX2NwdV9sb2dpY2FsX21hcFtdOworLyogR2V0IHJlYWwgY3B1IGFkZHJlc3MgZnJvbSBsb2dpY2FsIGNwdSBudW1iZXIuICovCitleHRlcm4gdW5zaWduZWQgc2hvcnQgX19jcHVfbG9naWNhbF9tYXBbXTsKIAogc3RhdGljIGlubGluZSBpbnQgY3B1X2xvZ2ljYWxfbWFwKGludCBjcHUpCiB7CkBAIC0yOSwxMDcgKzI0LDEwOCBAQAogI2VuZGlmCiB9CiAKLXR5cGVkZWYgZW51bQotewotCXNpZ3BfdW5hc3NpZ25lZD0weDAsCi0Jc2lncF9zZW5zZSwKLQlzaWdwX2V4dGVybmFsX2NhbGwsCi0Jc2lncF9lbWVyZ2VuY3lfc2lnbmFsLAotCXNpZ3Bfc3RhcnQsCi0Jc2lncF9zdG9wLAotCXNpZ3BfcmVzdGFydCwKLQlzaWdwX3VuYXNzaWduZWQxLAotCXNpZ3BfdW5hc3NpZ25lZDIsCi0Jc2lncF9zdG9wX2FuZF9zdG9yZV9zdGF0dXMsCi0Jc2lncF91bmFzc2lnbmVkMywKLQlzaWdwX2luaXRpYWxfY3B1X3Jlc2V0LAotCXNpZ3BfY3B1X3Jlc2V0LAotCXNpZ3Bfc2V0X3ByZWZpeCwKLQlzaWdwX3N0b3JlX3N0YXR1c19hdF9hZGRyZXNzLAotCXNpZ3Bfc3RvcmVfZXh0ZW5kZWRfc3RhdHVzX2F0X2FkZHJlc3MKLX0gc2lncF9vcmRlcl9jb2RlOworZW51bSB7CisJc2lncF9zZW5zZSA9IDEsCisJc2lncF9leHRlcm5hbF9jYWxsID0gMiwKKwlzaWdwX2VtZXJnZW5jeV9zaWduYWwgPSAzLAorCXNpZ3Bfc3RhcnQgPSA0LAorCXNpZ3Bfc3RvcCA9IDUsCisJc2lncF9yZXN0YXJ0ID0gNiwKKwlzaWdwX3N0b3BfYW5kX3N0b3JlX3N0YXR1cyA9IDksCisJc2lncF9pbml0aWFsX2NwdV9yZXNldCA9IDExLAorCXNpZ3BfY3B1X3Jlc2V0ID0gMTIsCisJc2lncF9zZXRfcHJlZml4ID0gMTMsCisJc2lncF9zdG9yZV9zdGF0dXNfYXRfYWRkcmVzcyA9IDE0LAorCXNpZ3Bfc3RvcmVfZXh0ZW5kZWRfc3RhdHVzX2F0X2FkZHJlc3MgPSAxNSwKKwlzaWdwX3NldF9hcmNoaXRlY3R1cmUgPSAxOCwKKwlzaWdwX2NvbmRpdGlvbmFsX2VtZXJnZW5jeV9zaWduYWwgPSAxOSwKKwlzaWdwX3NlbnNlX3J1bm5pbmcgPSAyMSwKK307CiAKLXR5cGVkZWYgX191MzIgc2lncF9zdGF0dXNfd29yZDsKLQotdHlwZWRlZiBlbnVtCi17Ci0gICAgICAgIHNpZ3Bfb3JkZXJfY29kZV9hY2NlcHRlZD0wLAotCXNpZ3Bfc3RhdHVzX3N0b3JlZCwKLQlzaWdwX2J1c3ksCi0Jc2lncF9ub3Rfb3BlcmF0aW9uYWwKLX0gc2lncF9jY29kZTsKLQorZW51bSB7CisJc2lncF9vcmRlcl9jb2RlX2FjY2VwdGVkID0gMCwKKwlzaWdwX3N0YXR1c19zdG9yZWQgPSAxLAorCXNpZ3BfYnVzeSA9IDIsCisJc2lncF9ub3Rfb3BlcmF0aW9uYWwgPSAzLAorfTsKIAogLyoKLSAqIERlZmluaXRpb25zIGZvciB0aGUgZXh0ZXJuYWwgY2FsbAorICogRGVmaW5pdGlvbnMgZm9yIGV4dGVybmFsIGNhbGwuCiAgKi8KLQotLyogJ0JpdCcgc2lnbmFscywgYXN5bmNocm9ub3VzICovCi10eXBlZGVmIGVudW0KLXsKLQllY19zY2hlZHVsZT0wLAorZW51bSB7CisJZWNfc2NoZWR1bGUgPSAwLAogCWVjX2NhbGxfZnVuY3Rpb24sCiAJZWNfY2FsbF9mdW5jdGlvbl9zaW5nbGUsCi0JZWNfYml0X2xhc3QKLX0gZWNfYml0X3NpZzsKK307CiAKIC8qCi0gKiBTaWduYWwgcHJvY2Vzc29yCisgKiBTaWduYWwgcHJvY2Vzc29yLgogICovCi1zdGF0aWMgaW5saW5lIHNpZ3BfY2NvZGUKLXNpZ25hbF9wcm9jZXNzb3IoX191MTYgY3B1X2FkZHIsIHNpZ3Bfb3JkZXJfY29kZSBvcmRlcl9jb2RlKQorc3RhdGljIGlubGluZSBpbnQgcmF3X3NpZ3AodTE2IGNwdSwgaW50IG9yZGVyKQogewogCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMSBhc20gKCIxIikgPSAwOwotCXNpZ3BfY2NvZGUgY2NvZGU7CisJaW50IGNjb2RlOwogCiAJYXNtIHZvbGF0aWxlKAogCQkiCXNpZ3AJJTEsJTIsMCglMylcbiIKIAkJIglpcG0JJTBcbiIKIAkJIglzcmwJJTAsMjhcbiIKIAkJOgkiPWQiCShjY29kZSkKLQkJOiAiZCIgKHJlZzEpLCAiZCIgKGNwdV9sb2dpY2FsX21hcChjcHVfYWRkcikpLAotCQkgICJhIiAob3JkZXJfY29kZSkgOiAiY2MiICwgIm1lbW9yeSIpOworCQk6ICJkIiAocmVnMSksICJkIiAoY3B1KSwKKwkJICAiYSIgKG9yZGVyKSA6ICJjYyIgLCAibWVtb3J5Iik7CiAJcmV0dXJuIGNjb2RlOwogfQogCiAvKgotICogU2lnbmFsIHByb2Nlc3NvciB3aXRoIHBhcmFtZXRlcgorICogU2lnbmFsIHByb2Nlc3NvciB3aXRoIHBhcmFtZXRlci4KICAqLwotc3RhdGljIGlubGluZSBzaWdwX2Njb2RlCi1zaWduYWxfcHJvY2Vzc29yX3AoX191MzIgcGFyYW1ldGVyLCBfX3UxNiBjcHVfYWRkciwgc2lncF9vcmRlcl9jb2RlIG9yZGVyX2NvZGUpCitzdGF0aWMgaW5saW5lIGludCByYXdfc2lncF9wKHUzMiBwYXJhbWV0ZXIsIHUxNiBjcHUsIGludCBvcmRlcikKIHsKIAlyZWdpc3RlciB1bnNpZ25lZCBpbnQgcmVnMSBhc20gKCIxIikgPSBwYXJhbWV0ZXI7Ci0Jc2lncF9jY29kZSBjY29kZTsKKwlpbnQgY2NvZGU7CiAKIAlhc20gdm9sYXRpbGUoCiAJCSIJc2lncAklMSwlMiwwKCUzKVxuIgogCQkiCWlwbQklMFxuIgogCQkiCXNybAklMCwyOFxuIgogCQk6ICI9ZCIgKGNjb2RlKQotCQk6ICJkIiAocmVnMSksICJkIiAoY3B1X2xvZ2ljYWxfbWFwKGNwdV9hZGRyKSksCi0JCSAgImEiIChvcmRlcl9jb2RlKSA6ICJjYyIgLCAibWVtb3J5Iik7CisJCTogImQiIChyZWcxKSwgImQiIChjcHUpLAorCQkgICJhIiAob3JkZXIpIDogImNjIiAsICJtZW1vcnkiKTsKIAlyZXR1cm4gY2NvZGU7CiB9CiAKIC8qCi0gKiBTaWduYWwgcHJvY2Vzc29yIHdpdGggcGFyYW1ldGVyIGFuZCByZXR1cm4gc3RhdHVzCisgKiBTaWduYWwgcHJvY2Vzc29yIHdpdGggcGFyYW1ldGVyIGFuZCByZXR1cm4gc3RhdHVzLgogICovCi1zdGF0aWMgaW5saW5lIHNpZ3BfY2NvZGUKLXNpZ25hbF9wcm9jZXNzb3JfcHMoX191MzIgKnN0YXR1c3B0ciwgX191MzIgcGFyYW1ldGVyLCBfX3UxNiBjcHVfYWRkciwKLQkJICAgIHNpZ3Bfb3JkZXJfY29kZSBvcmRlcl9jb2RlKQorc3RhdGljIGlubGluZSBpbnQgcmF3X3NpZ3BfcHModTMyICpzdGF0dXMsIHUzMiBwYXJtLCB1MTYgY3B1LCBpbnQgb3JkZXIpCiB7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlZzEgYXNtICgiMSIpID0gcGFyYW1ldGVyOwotCXNpZ3BfY2NvZGUgY2NvZGU7CisJcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlZzEgYXNtICgiMSIpID0gcGFybTsKKwlpbnQgY2NvZGU7CiAKIAlhc20gdm9sYXRpbGUoCiAJCSIJc2lncAklMSwlMiwwKCUzKVxuIgogCQkiCWlwbQklMFxuIgogCQkiCXNybAklMCwyOFxuIgogCQk6ICI9ZCIgKGNjb2RlKSwgIitkIiAocmVnMSkKLQkJOiAiZCIgKGNwdV9sb2dpY2FsX21hcChjcHVfYWRkcikpLCAiYSIgKG9yZGVyX2NvZGUpCisJCTogImQiIChjcHUpLCAiYSIgKG9yZGVyKQogCQk6ICJjYyIgLCAibWVtb3J5Iik7Ci0JKnN0YXR1c3B0ciA9IHJlZzE7CisJKnN0YXR1cyA9IHJlZzE7CiAJcmV0dXJuIGNjb2RlOwogfQogCi0jZW5kaWYgLyogX19TSUdQX18gKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNpZ3AoaW50IGNwdSwgaW50IG9yZGVyKQoreworCXJldHVybiByYXdfc2lncChjcHVfbG9naWNhbF9tYXAoY3B1KSwgb3JkZXIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzaWdwX3AodTMyIHBhcmFtZXRlciwgaW50IGNwdSwgaW50IG9yZGVyKQoreworCXJldHVybiByYXdfc2lncF9wKHBhcmFtZXRlciwgY3B1X2xvZ2ljYWxfbWFwKGNwdSksIG9yZGVyKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2lncF9wcyh1MzIgKnN0YXR1cywgdTMyIHBhcm0sIGludCBjcHUsIGludCBvcmRlcikKK3sKKwlyZXR1cm4gcmF3X3NpZ3BfcHMoc3RhdHVzLCBwYXJtLCBjcHVfbG9naWNhbF9tYXAoY3B1KSwgb3JkZXIpOworfQorCisjZW5kaWYgLyogX19BU01fU0lHUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggMmFiMTE0MS4uZWRjMDNjYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaApAQCAtMjksNyArMjksNDMgQEAKIGV4dGVybiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pcGkoaW50IGNwdSk7CiBleHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7CiAKLWV4dGVybiB1bmlvbiBzYXZlX2FyZWEgKnpmY3BkdW1wX3NhdmVfYXJlYXNbTlJfQ1BVUyArIDFdOworZXh0ZXJuIHN0cnVjdCBzYXZlX2FyZWEgKnpmY3BkdW1wX3NhdmVfYXJlYXNbTlJfQ1BVUyArIDFdOworCitleHRlcm4gdm9pZCBzbXBfc3dpdGNoX3RvX2lwbF9jcHUodm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKik7CitleHRlcm4gdm9pZCBzbXBfc3dpdGNoX3RvX2NwdSh2b2lkICgqKSh2b2lkICopLCB2b2lkICosIHVuc2lnbmVkIGxvbmcgc3AsCisJCQkgICAgICBpbnQgZnJvbSwgaW50IHRvKTsKK2V4dGVybiB2b2lkIHNtcF9yZXN0YXJ0X2NwdSh2b2lkKTsKKworLyoKKyAqIHJldHVybnMgMSBpZiAodmlydHVhbCkgY3B1IGlzIHNjaGVkdWxlZAorICogcmV0dXJucyAwIG90aGVyd2lzZQorICovCitzdGF0aWMgaW5saW5lIGludCBzbXBfdmNwdV9zY2hlZHVsZWQoaW50IGNwdSkKK3sKKwl1MzIgc3RhdHVzOworCisJc3dpdGNoIChzaWdwX3BzKCZzdGF0dXMsIDAsIGNwdSwgc2lncF9zZW5zZV9ydW5uaW5nKSkgeworCWNhc2Ugc2lncF9zdGF0dXNfc3RvcmVkOgorCQkvKiBDaGVjayBmb3IgcnVubmluZyBzdGF0dXMgKi8KKwkJaWYgKHN0YXR1cyAmIDB4NDAwKQorCQkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2Ugc2lncF9ub3Rfb3BlcmF0aW9uYWw6CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMTsKK30KKworI2Vsc2UgLyogQ09ORklHX1NNUCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc21wX3N3aXRjaF90b19pcGxfY3B1KHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICpkYXRhKQoreworCWZ1bmMoZGF0YSk7Cit9CisKKyNkZWZpbmUgc21wX3ZjcHVfc2NoZWR1bGVkCSgxKQogCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCmluZGV4IGE1ODc5MDcuLjU2NjEyZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0xMyw4ICsxMyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KIAotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCi0KIHN0YXRpYyBpbmxpbmUgaW50CiBfcmF3X2NvbXBhcmVfYW5kX3N3YXAodm9sYXRpbGUgdW5zaWduZWQgaW50ICpsb2NrLAogCQkgICAgICB1bnNpZ25lZCBpbnQgb2xkLCB1bnNpZ25lZCBpbnQgbmV3KQpAQCAtMjcsMjIgKzI1LDYgQEAKIAlyZXR1cm4gb2xkOwogfQogCi0jZWxzZSAvKiBfX0dOVUNfXyAqLwotCi1zdGF0aWMgaW5saW5lIGludAotX3Jhd19jb21wYXJlX2FuZF9zd2FwKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqbG9jaywKLQkJICAgICAgdW5zaWduZWQgaW50IG9sZCwgdW5zaWduZWQgaW50IG5ldykKLXsKLQlhc20gdm9sYXRpbGUoCi0JCSIJY3MJJTAsJTMsMCglNCkiCi0JCTogIj1kIiAob2xkKSwgIj1tIiAoKmxvY2spCi0JCTogIjAiIChvbGQpLCAiZCIgKG5ldyksICJhIiAobG9jayksICJtIiAoKmxvY2spCi0JCTogImNjIiwgIm1lbW9yeSIgKTsKLQlyZXR1cm4gb2xkOwotfQotCi0jZW5kaWYgLyogX19HTlVDX18gKi8KLQogLyoKICAqIFNpbXBsZSBzcGluIGxvY2sgb3BlcmF0aW9ucy4gIFRoZXJlIGFyZSB0d28gdmFyaWFudHMsIG9uZSBjbGVhcnMgSVJRJ3MKICAqIG9uIHRoZSBsb2NhbCBwcm9jZXNzb3IsIG9uZSBkb2VzIG5vdC4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IGViMThkYzEuLjZiZGVlMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtNDcsMTEgKzQ3LDExIEBACiAJCiAJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIglpY20JJTAsOCwzKCUxKVxuIgotCQkiCWljbQklMCw0LDIoJTEpXG4iCi0JCSIJaWNtCSUwLDIsMSglMSlcbiIKLQkJIglpYwklMCwwKCUxKSIKLQkJOiAiPSZkIiAocmVzdWx0KSA6ICJhIiAoeCksICJtIiAoKngpIDogImNjIik7CisJCSIJaWNtCSUwLDgsJU8xKzMoJVIxKVxuIgorCQkiCWljbQklMCw0LCVPMSsyKCVSMSlcbiIKKwkJIglpY20JJTAsMiwlTzErMSglUjEpXG4iCisJCSIJaWMJJTAsJTEiCisJCTogIj0mZCIgKHJlc3VsdCkgOiAiUSIgKCp4KSA6ICJjYyIpOwogI2Vsc2UgLyogX19zMzkweF9fICovCiAJCSIJbHJ2CSUwLCUxIgogCQk6ICI9ZCIgKHJlc3VsdCkgOiAibSIgKCp4KSk7CkBAIC03Nyw5ICs3Nyw5IEBACiAJCiAJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIglpY20JJTAsMiwxKCUxKVxuIgotCQkiCWljCSUwLDAoJTEpXG4iCi0JCTogIj0mZCIgKHJlc3VsdCkgOiAiYSIgKHgpLCAibSIgKCp4KSA6ICJjYyIpOworCQkiCWljbQklMCwyLCVPKzEoJVIxKVxuIgorCQkiCWljCSUwLCUxXG4iCisJCTogIj0mZCIgKHJlc3VsdCkgOiAiUSIgKCp4KSA6ICJjYyIpOwogI2Vsc2UgLyogX19zMzkweF9fICovCiAJCSIJbHJ2aAklMCwlMSIKIAkJOiAiPWQiIChyZXN1bHQpIDogIm0iICgqeCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKaW5kZXggZTBhNzNkMy4uODQyOTY4NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2NhbGwuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzY2FsbC5oCkBAIC0xNSw2ICsxNSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCisvKgorICogVGhlIHN5c2NhbGwgdGFibGUgYWx3YXlzIGNvbnRhaW5zIDMyIGJpdCBwb2ludGVycyBzaW5jZSB3ZSBrbm93IHRoYXQgdGhlCisgKiBhZGRyZXNzIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgaXMgKHdheSkgYmVsb3cgNEdCLiAgU28gdGhlICJpbnQiCisgKiB0eXBlIGhlcmUgaXMgd2hhdCB3ZSB3YW50IFtuZWVkXSBmb3IgYm90aCAzMiBiaXQgYW5kIDY0IGJpdCBzeXN0ZW1zLgorICovCitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IHN5c19jYWxsX3RhYmxlW107CisKIHN0YXRpYyBpbmxpbmUgbG9uZyBzeXNjYWxsX2dldF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiAJCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNpbmZvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzaW5mby5oCmluZGV4IDlkNzAwNTcuLjIyYmRiMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNpbmZvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2luZm8uaApAQCAtODcsNyArODcsOCBAQAogCiBzdHJ1Y3Qgc3lzaW5mb18zXzJfMiB7CiAJY2hhciByZXNlcnZlZF8wWzMxXTsKLQl1bnNpZ25lZCBjaGFyIGNvdW50OworCXVuc2lnbmVkIGNoYXIgOjQ7CisJdW5zaWduZWQgY2hhciBjb3VudDo0OwogCXN0cnVjdCB7CiAJCWNoYXIgcmVzZXJ2ZWRfMFs0XTsKIAkJdW5zaWduZWQgc2hvcnQgY3B1c190b3RhbDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCAzNzk2NjFkLi42N2VlNmMzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0yNCw2NSArMjQsNjUgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX2ZwX3JlZ3MoczM5MF9mcF9yZWdzICpmcHJlZ3MpCiB7CiAJYXNtIHZvbGF0aWxlKAotCQkiCXN0ZAkwLDgoJTEpXG4iCi0JCSIJc3RkCTIsMjQoJTEpXG4iCi0JCSIJc3RkCTQsNDAoJTEpXG4iCi0JCSIJc3RkCTYsNTYoJTEpIgotCQk6ICI9bSIgKCpmcHJlZ3MpIDogImEiIChmcHJlZ3MpLCAibSIgKCpmcHJlZ3MpIDogIm1lbW9yeSIpOworCQkiCXN0ZAkwLCVPMCs4KCVSMClcbiIKKwkJIglzdGQJMiwlTzArMjQoJVIwKVxuIgorCQkiCXN0ZAk0LCVPMCs0MCglUjApXG4iCisJCSIJc3RkCTYsJU8wKzU2KCVSMCkiCisJCTogIj1RIiAoKmZwcmVncykgOiAiUSIgKCpmcHJlZ3MpKTsKIAlpZiAoIU1BQ0hJTkVfSEFTX0lFRUUpCiAJCXJldHVybjsKIAlhc20gdm9sYXRpbGUoCi0JCSIJc3RmcGMJMCglMSlcbiIKLQkJIglzdGQJMSwxNiglMSlcbiIKLQkJIglzdGQJMywzMiglMSlcbiIKLQkJIglzdGQJNSw0OCglMSlcbiIKLQkJIglzdGQJNyw2NCglMSlcbiIKLQkJIglzdGQJOCw3MiglMSlcbiIKLQkJIglzdGQJOSw4MCglMSlcbiIKLQkJIglzdGQJMTAsODgoJTEpXG4iCi0JCSIJc3RkCTExLDk2KCUxKVxuIgotCQkiCXN0ZAkxMiwxMDQoJTEpXG4iCi0JCSIJc3RkCTEzLDExMiglMSlcbiIKLQkJIglzdGQJMTQsMTIwKCUxKVxuIgotCQkiCXN0ZAkxNSwxMjgoJTEpXG4iCi0JCTogIj1tIiAoKmZwcmVncykgOiAiYSIgKGZwcmVncyksICJtIiAoKmZwcmVncykgOiAibWVtb3J5Iik7CisJCSIJc3RmcGMJJTBcbiIKKwkJIglzdGQJMSwlTzArMTYoJVIwKVxuIgorCQkiCXN0ZAkzLCVPMCszMiglUjApXG4iCisJCSIJc3RkCTUsJU8wKzQ4KCVSMClcbiIKKwkJIglzdGQJNywlTzArNjQoJVIwKVxuIgorCQkiCXN0ZAk4LCVPMCs3MiglUjApXG4iCisJCSIJc3RkCTksJU8wKzgwKCVSMClcbiIKKwkJIglzdGQJMTAsJU8wKzg4KCVSMClcbiIKKwkJIglzdGQJMTEsJU8wKzk2KCVSMClcbiIKKwkJIglzdGQJMTIsJU8wKzEwNCglUjApXG4iCisJCSIJc3RkCTEzLCVPMCsxMTIoJVIwKVxuIgorCQkiCXN0ZAkxNCwlTzArMTIwKCVSMClcbiIKKwkJIglzdGQJMTUsJU8wKzEyOCglUjApXG4iCisJCTogIj1RIiAoKmZwcmVncykgOiAiUSIgKCpmcHJlZ3MpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfZnBfcmVncyhzMzkwX2ZwX3JlZ3MgKmZwcmVncykKIHsKIAlhc20gdm9sYXRpbGUoCi0JCSIJbGQJMCw4KCUwKVxuIgotCQkiCWxkCTIsMjQoJTApXG4iCi0JCSIJbGQJNCw0MCglMClcbiIKLQkJIglsZAk2LDU2KCUwKSIKLQkJOiA6ICJhIiAoZnByZWdzKSwgIm0iICgqZnByZWdzKSk7CisJCSIJbGQJMCwlTzArOCglUjApXG4iCisJCSIJbGQJMiwlTzArMjQoJVIwKVxuIgorCQkiCWxkCTQsJU8wKzQwKCVSMClcbiIKKwkJIglsZAk2LCVPMCs1NiglUjApIgorCQk6IDogIlEiICgqZnByZWdzKSk7CiAJaWYgKCFNQUNISU5FX0hBU19JRUVFKQogCQlyZXR1cm47CiAJYXNtIHZvbGF0aWxlKAotCQkiCWxmcGMJMCglMClcbiIKLQkJIglsZAkxLDE2KCUwKVxuIgotCQkiCWxkCTMsMzIoJTApXG4iCi0JCSIJbGQJNSw0OCglMClcbiIKLQkJIglsZAk3LDY0KCUwKVxuIgotCQkiCWxkCTgsNzIoJTApXG4iCi0JCSIJbGQJOSw4MCglMClcbiIKLQkJIglsZAkxMCw4OCglMClcbiIKLQkJIglsZAkxMSw5NiglMClcbiIKLQkJIglsZAkxMiwxMDQoJTApXG4iCi0JCSIJbGQJMTMsMTEyKCUwKVxuIgotCQkiCWxkCTE0LDEyMCglMClcbiIKLQkJIglsZAkxNSwxMjgoJTApXG4iCi0JCTogOiAiYSIgKGZwcmVncyksICJtIiAoKmZwcmVncykpOworCQkiCWxmcGMJJTBcbiIKKwkJIglsZAkxLCVPMCsxNiglUjApXG4iCisJCSIJbGQJMywlTzArMzIoJVIwKVxuIgorCQkiCWxkCTUsJU8wKzQ4KCVSMClcbiIKKwkJIglsZAk3LCVPMCs2NCglUjApXG4iCisJCSIJbGQJOCwlTzArNzIoJVIwKVxuIgorCQkiCWxkCTksJU8wKzgwKCVSMClcbiIKKwkJIglsZAkxMCwlTzArODgoJVIwKVxuIgorCQkiCWxkCTExLCVPMCs5NiglUjApXG4iCisJCSIJbGQJMTIsJU8wKzEwNCglUjApXG4iCisJCSIJbGQJMTMsJU8wKzExMiglUjApXG4iCisJCSIJbGQJMTQsJU8wKzEyMCglUjApXG4iCisJCSIJbGQJMTUsJU8wKzEyOCglUjApXG4iCisJCTogOiAiUSIgKCpmcHJlZ3MpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNhdmVfYWNjZXNzX3JlZ3ModW5zaWduZWQgaW50ICphY3JzKQogewotCWFzbSB2b2xhdGlsZSgic3RhbSAwLDE1LDAoJTApIiA6IDogImEiIChhY3JzKSA6ICJtZW1vcnkiKTsKKwlhc20gdm9sYXRpbGUoInN0YW0gMCwxNSwlMCIgOiAiPVEiICgqYWNycykpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVzdG9yZV9hY2Nlc3NfcmVncyh1bnNpZ25lZCBpbnQgKmFjcnMpCiB7Ci0JYXNtIHZvbGF0aWxlKCJsYW0gMCwxNSwwKCUwKSIgOiA6ICJhIiAoYWNycykpOworCWFzbSB2b2xhdGlsZSgibGFtIDAsMTUsJTAiIDogOiAiUSIgKCphY3JzKSk7CiB9CiAKICNkZWZpbmUgc3dpdGNoX3RvKHByZXYsbmV4dCxsYXN0KSBkbyB7CQkJCQkgICAgIFwKQEAgLTEzOSw0OCArMTM5LDQ4IEBACiAJCXNoaWZ0ID0gKDMgXiAoYWRkciAmIDMpKSA8PCAzOwogCQlhZGRyIF49IGFkZHIgJiAzOwogCQlhc20gdm9sYXRpbGUoCi0JCQkiCWwJJTAsMCglNClcbiIKKwkJCSIJbAklMCwlNFxuIgogCQkJIjA6CWxyCTAsJTBcbiIKIAkJCSIJbnIJMCwlM1xuIgogCQkJIglvcgkwLCUyXG4iCi0JCQkiCWNzCSUwLDAsMCglNClcbiIKKwkJCSIJY3MJJTAsMCwlNFxuIgogCQkJIglqbAkwYlxuIgotCQkJOiAiPSZkIiAob2xkKSwgIj1tIiAoKihpbnQgKikgYWRkcikKLQkJCTogImQiICh4IDw8IHNoaWZ0KSwgImQiICh+KDI1NSA8PCBzaGlmdCkpLCAiYSIgKGFkZHIpLAotCQkJICAibSIgKCooaW50ICopIGFkZHIpIDogIm1lbW9yeSIsICJjYyIsICIwIik7CisJCQk6ICI9JmQiIChvbGQpLCAiPVEiICgqKGludCAqKSBhZGRyKQorCQkJOiAiZCIgKHggPDwgc2hpZnQpLCAiZCIgKH4oMjU1IDw8IHNoaWZ0KSksCisJCQkgICJRIiAoKihpbnQgKikgYWRkcikgOiAibWVtb3J5IiwgImNjIiwgIjAiKTsKIAkJcmV0dXJuIG9sZCA+PiBzaGlmdDsKIAljYXNlIDI6CiAJCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyOwogCQlzaGlmdCA9ICgyIF4gKGFkZHIgJiAyKSkgPDwgMzsKIAkJYWRkciBePSBhZGRyICYgMjsKIAkJYXNtIHZvbGF0aWxlKAotCQkJIglsCSUwLDAoJTQpXG4iCisJCQkiCWwJJTAsJTRcbiIKIAkJCSIwOglscgkwLCUwXG4iCiAJCQkiCW5yCTAsJTNcbiIKIAkJCSIJb3IJMCwlMlxuIgotCQkJIgljcwklMCwwLDAoJTQpXG4iCisJCQkiCWNzCSUwLDAsJTRcbiIKIAkJCSIJamwJMGJcbiIKLQkJCTogIj0mZCIgKG9sZCksICI9bSIgKCooaW50ICopIGFkZHIpCi0JCQk6ICJkIiAoeCA8PCBzaGlmdCksICJkIiAofig2NTUzNSA8PCBzaGlmdCkpLCAiYSIgKGFkZHIpLAotCQkJICAibSIgKCooaW50ICopIGFkZHIpIDogIm1lbW9yeSIsICJjYyIsICIwIik7CisJCQk6ICI9JmQiIChvbGQpLCAiPVEiICgqKGludCAqKSBhZGRyKQorCQkJOiAiZCIgKHggPDwgc2hpZnQpLCAiZCIgKH4oNjU1MzUgPDwgc2hpZnQpKSwKKwkJCSAgIlEiICgqKGludCAqKSBhZGRyKSA6ICJtZW1vcnkiLCAiY2MiLCAiMCIpOwogCQlyZXR1cm4gb2xkID4+IHNoaWZ0OwogCWNhc2UgNDoKIAkJYXNtIHZvbGF0aWxlKAotCQkJIglsCSUwLDAoJTMpXG4iCi0JCQkiMDoJY3MJJTAsJTIsMCglMylcbiIKKwkJCSIJbAklMCwlM1xuIgorCQkJIjA6CWNzCSUwLCUyLCUzXG4iCiAJCQkiCWpsCTBiXG4iCi0JCQk6ICI9JmQiIChvbGQpLCAiPW0iICgqKGludCAqKSBwdHIpCi0JCQk6ICJkIiAoeCksICJhIiAocHRyKSwgIm0iICgqKGludCAqKSBwdHIpCisJCQk6ICI9JmQiIChvbGQpLCAiPVEiICgqKGludCAqKSBwdHIpCisJCQk6ICJkIiAoeCksICJRIiAoKihpbnQgKikgcHRyKQogCQkJOiAibWVtb3J5IiwgImNjIik7CiAJCXJldHVybiBvbGQ7CiAjaWZkZWYgX19zMzkweF9fCiAJY2FzZSA4OgogCQlhc20gdm9sYXRpbGUoCi0JCQkiCWxnCSUwLDAoJTMpXG4iCi0JCQkiMDoJY3NnCSUwLCUyLDAoJTMpXG4iCisJCQkiCWxnCSUwLCUzXG4iCisJCQkiMDoJY3NnCSUwLCUyLCUzXG4iCiAJCQkiCWpsCTBiXG4iCiAJCQk6ICI9JmQiIChvbGQpLCAiPW0iICgqKGxvbmcgKikgcHRyKQotCQkJOiAiZCIgKHgpLCAiYSIgKHB0ciksICJtIiAoKihsb25nICopIHB0cikKKwkJCTogImQiICh4KSwgIlEiICgqKGxvbmcgKikgcHRyKQogCQkJOiAibWVtb3J5IiwgImNjIik7CiAJCXJldHVybiBvbGQ7CiAjZW5kaWYgLyogX19zMzkweF9fICovCkBAIC0yMTUsMjAgKzIxNSwyMCBAQAogCQlzaGlmdCA9ICgzIF4gKGFkZHIgJiAzKSkgPDwgMzsKIAkJYWRkciBePSBhZGRyICYgMzsKIAkJYXNtIHZvbGF0aWxlKAotCQkJIglsCSUwLDAoJTQpXG4iCisJCQkiCWwJJTAsJTJcbiIKIAkJCSIwOglucgklMCwlNVxuIgogCQkJIglscgklMSwlMFxuIgogCQkJIglvcgklMCwlMlxuIgogCQkJIglvcgklMSwlM1xuIgotCQkJIgljcwklMCwlMSwwKCU0KVxuIgorCQkJIgljcwklMCwlMSwlMlxuIgogCQkJIglqbmwJMWZcbiIKIAkJCSIJeHIJJTEsJTBcbiIKIAkJCSIJbnIJJTEsJTVcbiIKIAkJCSIJam56CTBiXG4iCiAJCQkiMToiCi0JCQk6ICI9JmQiIChwcmV2KSwgIj0mZCIgKHRtcCkKLQkJCTogImQiIChvbGQgPDwgc2hpZnQpLCAiZCIgKG5ldyA8PCBzaGlmdCksICJhIiAocHRyKSwKLQkJCSAgImQiICh+KDI1NSA8PCBzaGlmdCkpCisJCQk6ICI9JmQiIChwcmV2KSwgIj0mZCIgKHRtcCksICI9USIgKCooaW50ICopIHB0cikKKwkJCTogImQiIChvbGQgPDwgc2hpZnQpLCAiZCIgKG5ldyA8PCBzaGlmdCksCisJCQkgICJkIiAofigyNTUgPDwgc2hpZnQpKSwgIlEiICgqKGludCAqKSBwdHIpCiAJCQk6ICJtZW1vcnkiLCAiY2MiKTsKIAkJcmV0dXJuIHByZXYgPj4gc2hpZnQ7CiAJY2FzZSAyOgpAQCAtMjM2LDMzICsyMzYsMzUgQEAKIAkJc2hpZnQgPSAoMiBeIChhZGRyICYgMikpIDw8IDM7CiAJCWFkZHIgXj0gYWRkciAmIDI7CiAJCWFzbSB2b2xhdGlsZSgKLQkJCSIJbAklMCwwKCU0KVxuIgorCQkJIglsCSUwLCUyXG4iCiAJCQkiMDoJbnIJJTAsJTVcbiIKIAkJCSIJbHIJJTEsJTBcbiIKIAkJCSIJb3IJJTAsJTJcbiIKIAkJCSIJb3IJJTEsJTNcbiIKLQkJCSIJY3MJJTAsJTEsMCglNClcbiIKKwkJCSIJY3MJJTAsJTEsJTJcbiIKIAkJCSIJam5sCTFmXG4iCiAJCQkiCXhyCSUxLCUwXG4iCiAJCQkiCW5yCSUxLCU1XG4iCiAJCQkiCWpuegkwYlxuIgogCQkJIjE6IgotCQkJOiAiPSZkIiAocHJldiksICI9JmQiICh0bXApCi0JCQk6ICJkIiAob2xkIDw8IHNoaWZ0KSwgImQiIChuZXcgPDwgc2hpZnQpLCAiYSIgKHB0ciksCi0JCQkgICJkIiAofig2NTUzNSA8PCBzaGlmdCkpCisJCQk6ICI9JmQiIChwcmV2KSwgIj0mZCIgKHRtcCksICI9USIgKCooaW50ICopIHB0cikKKwkJCTogImQiIChvbGQgPDwgc2hpZnQpLCAiZCIgKG5ldyA8PCBzaGlmdCksCisJCQkgICJkIiAofig2NTUzNSA8PCBzaGlmdCkpLCAiUSIgKCooaW50ICopIHB0cikKIAkJCTogIm1lbW9yeSIsICJjYyIpOwogCQlyZXR1cm4gcHJldiA+PiBzaGlmdDsKIAljYXNlIDQ6CiAJCWFzbSB2b2xhdGlsZSgKLQkJCSIJY3MJJTAsJTIsMCglMylcbiIKLQkJCTogIj0mZCIgKHByZXYpIDogIjAiIChvbGQpLCAiZCIgKG5ldyksICJhIiAocHRyKQorCQkJIgljcwklMCwlMywlMVxuIgorCQkJOiAiPSZkIiAocHJldiksICI9USIgKCooaW50ICopIHB0cikKKwkJCTogIjAiIChvbGQpLCAiZCIgKG5ldyksICJRIiAoKihpbnQgKikgcHRyKQogCQkJOiAibWVtb3J5IiwgImNjIik7CiAJCXJldHVybiBwcmV2OwogI2lmZGVmIF9fczM5MHhfXwogCWNhc2UgODoKIAkJYXNtIHZvbGF0aWxlKAotCQkJIgljc2cJJTAsJTIsMCglMylcbiIKLQkJCTogIj0mZCIgKHByZXYpIDogIjAiIChvbGQpLCAiZCIgKG5ldyksICJhIiAocHRyKQorCQkJIgljc2cJJTAsJTMsJTFcbiIKKwkJCTogIj0mZCIgKHByZXYpLCAiPVEiICgqKGxvbmcgKikgcHRyKQorCQkJOiAiMCIgKG9sZCksICJkIiAobmV3KSwgIlEiICgqKGxvbmcgKikgcHRyKQogCQkJOiAibWVtb3J5IiwgImNjIik7CiAJCXJldHVybiBwcmV2OwogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwpAQCAtMzAyLDE3ICszMDQsMTcgQEAKICNkZWZpbmUgX19jdGxfbG9hZChhcnJheSwgbG93LCBoaWdoKSAoewkJCQlcCiAJdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIF9bc2l6ZW9mKGFycmF5KV07IH0gYWRkcnR5cGU7CVwKIAlhc20gdm9sYXRpbGUoCQkJCQkJXAotCQkiCWxjdGxnCSUxLCUyLDAoJTApXG4iCQkJXAotCQk6IDogImEiICgmYXJyYXkpLCAiaSIgKGxvdyksICJpIiAoaGlnaCksCVwKLQkJICAgICJtIiAoKihhZGRydHlwZSAqKSgmYXJyYXkpKSk7CQlcCisJCSIJbGN0bGcJJTEsJTIsJTBcbiIJCQlcCisJCTogOiAiUSIgKCooYWRkcnR5cGUgKikoJmFycmF5KSksCQlcCisJCSAgICAiaSIgKGxvdyksICJpIiAoaGlnaCkpOwkJCVwKIAl9KQogCiAjZGVmaW5lIF9fY3RsX3N0b3JlKGFycmF5LCBsb3csIGhpZ2gpICh7CQkJXAogCXR5cGVkZWYgc3RydWN0IHsgY2hhciBfW3NpemVvZihhcnJheSldOyB9IGFkZHJ0eXBlOwlcCiAJYXNtIHZvbGF0aWxlKAkJCQkJCVwKLQkJIglzdGN0ZwklMiwlMywwKCUxKVxuIgkJCVwKLQkJOiAiPW0iICgqKGFkZHJ0eXBlICopKCZhcnJheSkpCQkJXAotCQk6ICJhIiAoJmFycmF5KSwgImkiIChsb3cpLCAiaSIgKGhpZ2gpKTsJCVwKKwkJIglzdGN0ZwklMSwlMiwlMFxuIgkJCVwKKwkJOiAiPVEiICgqKGFkZHJ0eXBlICopKCZhcnJheSkpCQkJXAorCQk6ICJpIiAobG93KSwgImkiIChoaWdoKSk7CQkJXAogCX0pCiAKICNlbHNlIC8qIF9fczM5MHhfXyAqLwpAQCAtMzIwLDE3ICszMjIsMTcgQEAKICNkZWZpbmUgX19jdGxfbG9hZChhcnJheSwgbG93LCBoaWdoKSAoewkJCQlcCiAJdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIF9bc2l6ZW9mKGFycmF5KV07IH0gYWRkcnR5cGU7CVwKIAlhc20gdm9sYXRpbGUoCQkJCQkJXAotCQkiCWxjdGwJJTEsJTIsMCglMClcbiIJCQlcCi0JCTogOiAiYSIgKCZhcnJheSksICJpIiAobG93KSwgImkiIChoaWdoKSwJXAotCQkgICAgIm0iICgqKGFkZHJ0eXBlICopKCZhcnJheSkpKTsJCVwKKwkJIglsY3RsCSUxLCUyLCUwXG4iCQkJXAorCQk6IDogIlEiICgqKGFkZHJ0eXBlICopKCZhcnJheSkpLAkJXAorCQkgICAgImkiIChsb3cpLCAiaSIgKGhpZ2gpKTsJCQlcCiB9KQogCiAjZGVmaW5lIF9fY3RsX3N0b3JlKGFycmF5LCBsb3csIGhpZ2gpICh7CQkJXAogCXR5cGVkZWYgc3RydWN0IHsgY2hhciBfW3NpemVvZihhcnJheSldOyB9IGFkZHJ0eXBlOwlcCiAJYXNtIHZvbGF0aWxlKAkJCQkJCVwKLQkJIglzdGN0bAklMiwlMywwKCUxKVxuIgkJCVwKLQkJOiAiPW0iICgqKGFkZHJ0eXBlICopKCZhcnJheSkpCQkJXAotCQk6ICJhIiAoJmFycmF5KSwgImkiIChsb3cpLCAiaSIgKGhpZ2gpKTsJCVwKKwkJIglzdGN0bAklMSwlMiwlMFxuIgkJCVwKKwkJOiAiPVEiICgqKGFkZHJ0eXBlICopKCZhcnJheSkpCQkJXAorCQk6ICJpIiAobG93KSwgImkiIChoaWdoKSk7CQkJXAogCX0pCiAKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggNjYwNjllNy4uMzRmMDg3MyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTczLDcgKzczLDcgQEAKIC8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQogewotCXJldHVybiAoc3RydWN0IHRocmVhZF9pbmZvICopKCgqKHVuc2lnbmVkIGxvbmcgKikgX19MQ19LRVJORUxfU1RBQ0spLVRIUkVBRF9TSVpFKTsKKwlyZXR1cm4gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKShTMzkwX2xvd2NvcmUua2VybmVsX3N0YWNrIC0gVEhSRUFEX1NJWkUpOwogfQogCiAjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSIFRIUkVBRF9PUkRFUgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RpbWV4LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaAppbmRleCA2OGQ5ZmVhLi5mMTc0YmRhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaApAQCAtMjAsMTAgKzIwLDEwIEBACiAJaW50IGNjOwogCiAJYXNtIHZvbGF0aWxlKAotCQkiICAgc2NrICAgMCglMilcbiIKKwkJIiAgIHNjayAgICUxXG4iCiAJCSIgICBpcG0gICAlMFxuIgogCQkiICAgc3JsICAgJTAsMjhcbiIKLQkJOiAiPWQiIChjYykgOiAibSIgKHRpbWUpLCAiYSIgKCZ0aW1lKSA6ICJjYyIpOworCQk6ICI9ZCIgKGNjKSA6ICJRIiAodGltZSkgOiAiY2MiKTsKIAlyZXR1cm4gY2M7CiB9CiAKQEAgLTMyLDIxICszMiwyMSBAQAogCWludCBjYzsKIAogCWFzbSB2b2xhdGlsZSgKLQkJIiAgIHN0Y2sgIDAoJTIpXG4iCisJCSIgICBzdGNrICAlMVxuIgogCQkiICAgaXBtICAgJTBcbiIKIAkJIiAgIHNybCAgICUwLDI4XG4iCi0JCTogIj1kIiAoY2MpLCAiPW0iICgqdGltZSkgOiAiYSIgKHRpbWUpIDogImNjIik7CisJCTogIj1kIiAoY2MpLCAiPVEiICgqdGltZSkgOiA6ICJjYyIpOwogCXJldHVybiBjYzsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9jbG9ja19jb21wYXJhdG9yKF9fdTY0IHRpbWUpCiB7Ci0JYXNtIHZvbGF0aWxlKCJzY2tjIDAoJTEpIiA6IDogIm0iICh0aW1lKSwgImEiICgmdGltZSkpOworCWFzbSB2b2xhdGlsZSgic2NrYyAlMCIgOiA6ICJRIiAodGltZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3RvcmVfY2xvY2tfY29tcGFyYXRvcihfX3U2NCAqdGltZSkKIHsKLQlhc20gdm9sYXRpbGUoInN0Y2tjIDAoJTEpIiA6ICI9bSIgKCp0aW1lKSA6ICJhIiAodGltZSkpOworCWFzbSB2b2xhdGlsZSgic3Rja2MgJTAiIDogIj1RIiAoKnRpbWUpKTsKIH0KIAogI2RlZmluZSBDTE9DS19USUNLX1JBVEUJMTE5MzE4MCAvKiBVbmRlcmx5aW5nIEhaICovCkBAIC01NywxMSArNTcsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBjbGs7CiAKLSNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQogCWFzbSB2b2xhdGlsZSgic3RjayAlMCIgOiAiPVEiIChjbGspIDogOiAiY2MiKTsKLSNlbHNlIC8qIF9fR05VQ19fICovCi0JYXNtIHZvbGF0aWxlKCJzdGNrIDAoJTEpIiA6ICI9bSIgKGNsaykgOiAiYSIgKCZjbGspIDogImNjIik7Ci0jZW5kaWYgLyogX19HTlVDX18gKi8KIAlyZXR1cm4gY2xrOwogfQogCkBAIC02OSwxMyArNjUsNyBAQAogewogCXVuc2lnbmVkIGNoYXIgY2xrWzE2XTsKIAotI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCiAJYXNtIHZvbGF0aWxlKCJzdGNrZSAlMCIgOiAiPVEiIChjbGspIDogOiAiY2MiKTsKLSNlbHNlIC8qIF9fR05VQ19fICovCi0JYXNtIHZvbGF0aWxlKCJzdGNrZSAwKCUxKSIgOiAiPW0iIChjbGspCi0JCQkJICAgOiAiYSIgKGNsaykgOiAiY2MiKTsKLSNlbmRpZiAvKiBfX0dOVUNfXyAqLwotCiAJcmV0dXJuICooKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSZjbGtbMV0pOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAppbmRleCBjYmYwYTg3Li5kNmIxZWQwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTI2NSw2ICsyNjUsMTIgQEAKIAkJcmV0dXJuIHVhY2Nlc3MuY29weV9mcm9tX3VzZXIobiwgZnJvbSwgdG8pOwogfQogCitleHRlcm4gdm9pZCBjb3B5X2Zyb21fdXNlcl9vdmVyZmxvdyh2b2lkKQorI2lmZGVmIENPTkZJR19ERUJVR19TVFJJQ1RfVVNFUl9DT1BZX0NIRUNLUworX19jb21waWxldGltZV93YXJuaW5nKCJjb3B5X2Zyb21fdXNlcigpIGJ1ZmZlciBzaXplIGlzIG5vdCBwcm92YWJseSBjb3JyZWN0IikKKyNlbmRpZgorOworCiAvKioKICAqIGNvcHlfZnJvbV91c2VyOiAtIENvcHkgYSBibG9jayBvZiBkYXRhIGZyb20gdXNlciBzcGFjZS4KICAqIEB0bzogICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiBrZXJuZWwgc3BhY2UuCkBAIC0yODQsNyArMjkwLDEzIEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrCiBjb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKIHsKKwl1bnNpZ25lZCBpbnQgc3ogPSBfX2NvbXBpbGV0aW1lX29iamVjdF9zaXplKHRvKTsKKwogCW1pZ2h0X2ZhdWx0KCk7CisJaWYgKHVubGlrZWx5KHN6ICE9IC0xICYmIHN6IDwgbikpIHsKKwkJY29weV9mcm9tX3VzZXJfb3ZlcmZsb3coKTsKKwkJcmV0dXJuIG47CisJfQogCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyb20sIG4pKQogCQluID0gX19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbik7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Zkc28uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS92ZHNvLmgKaW5kZXggN2JkZDdjOC4uNGE3NmQ5NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Zkc28uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdmRzby5oCkBAIC03LDcgKzcsNyBAQAogI2RlZmluZSBWRFNPMzJfTEJBU0UJMAogI2RlZmluZSBWRFNPNjRfTEJBU0UJMAogCi0jZGVmaW5lIFZEU09fVkVSU0lPTl9TVFJJTkcJTElOVVhfMi42LjI2CisjZGVmaW5lIFZEU09fVkVSU0lPTl9TVFJJTkcJTElOVVhfMi42LjI5CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCmluZGV4IDY4M2Y2MzguLjY0MjMwYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQpAQCAtMjksOSArMjksMTIgQEAKIG9iai15CSs9ICQoaWYgJChDT05GSUdfNjRCSVQpLHJlaXBsNjQubyxyZWlwbC5vKQogCiBleHRyYS15CQkJCSs9IGhlYWQubyBpbml0X3Rhc2subyB2bWxpbnV4LmxkcworZXh0cmEteQkJCQkrPSAkKGlmICQoQ09ORklHXzY0QklUKSxoZWFkNjQubyxoZWFkMzEubykKIAogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBzMzkwX2tzeW1zLm8gbW9kdWxlLm8KIG9iai0kKENPTkZJR19TTVApCQkrPSBzbXAubyB0b3BvbG9neS5vCitvYmotJChDT05GSUdfU01QKQkJKz0gJChpZiAkKENPTkZJR182NEJJVCksc3dpdGNoX2NwdTY0Lm8sIFwKKwkJCQkJCQlzd2l0Y2hfY3B1Lm8pCiBvYmotJChDT05GSUdfSElCRVJOQVRJT04pCSs9IHN1c3BlbmQubyBzd3N1c3BfYXNtNjQubwogb2JqLSQoQ09ORklHX0FVRElUKQkJKz0gYXVkaXQubwogY29tcGF0LW9iai0kKENPTkZJR19BVURJVCkJKz0gY29tcGF0X2F1ZGl0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA2M2U0NjQzLi4wOGRiNzM2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC00LDE4ICs0LDI3IEBACiAgKiBhbmQgZm9ybWF0IHRoZSByZXF1aXJlZCBkYXRhLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2RlZmluZSBBU01fT0ZGU0VUU19DCisKICNpbmNsdWRlIDxsaW51eC9rYnVpbGQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS92ZHNvLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ3AuaD4KIAorLyoKKyAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBjb21waWxlciBpcyBuZXcgZW5vdWdoLiBXZSB3YW50IGEgY29tcGlsZXIgdGhhdAorICogaXMga25vd24gdG8gd29yayB3aXRoIHRoZSAiUSIgYXNzZW1ibGVyIGNvbnN0cmFpbnQuCisgKi8KKyNpZiBfX0dOVUNfXyA8IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPCAzKQorI2Vycm9yIFlvdXIgY29tcGlsZXIgaXMgdG9vIG9sZDsgcGxlYXNlIHVzZSB2ZXJzaW9uIDMuMy4zIG9yIG5ld2VyCisjZW5kaWYKKwogaW50IG1haW4odm9pZCkKIHsKIAlERUZJTkUoX19USFJFQURfaW5mbywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBzdGFjaykpOwogCURFRklORShfX1RIUkVBRF9rc3AsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLmtzcCkpOwogCURFRklORShfX1RIUkVBRF9wZXIsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLnBlcl9pbmZvKSk7Ci0JREVGSU5FKF9fVEhSRUFEX21tX3NlZ21lbnQsCi0JICAgICAgIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLm1tX3NlZ21lbnQpKTsKKwlERUZJTkUoX19USFJFQURfbW1fc2VnbWVudCwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQubW1fc2VnbWVudCkpOwogCUJMQU5LKCk7CiAJREVGSU5FKF9fVEFTS19waWQsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgcGlkKSk7CiAJQkxBTksoKTsKQEAgLTUyLDE4ICs2MSw5NCBAQAogCURFRklORShfX1ZEU09fV1RPTV9OU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB3dG9tX2Nsb2NrX25zZWMpKTsKIAlERUZJTkUoX19WRFNPX1RJTUVaT05FLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB0el9taW51dGVzd2VzdCkpOwogCURFRklORShfX1ZEU09fRUNUR19PSywgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgZWN0Z19hdmFpbGFibGUpKTsKLQlERUZJTkUoX19WRFNPX0VDVEdfQkFTRSwKLQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZkc29fcGVyX2NwdV9kYXRhLCBlY3RnX3RpbWVyX2Jhc2UpKTsKLQlERUZJTkUoX19WRFNPX0VDVEdfVVNFUiwKLQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZkc29fcGVyX2NwdV9kYXRhLCBlY3RnX3VzZXJfdGltZSkpOworCURFRklORShfX1ZEU09fRUNUR19CQVNFLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19wZXJfY3B1X2RhdGEsIGVjdGdfdGltZXJfYmFzZSkpOworCURFRklORShfX1ZEU09fRUNUR19VU0VSLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19wZXJfY3B1X2RhdGEsIGVjdGdfdXNlcl90aW1lKSk7CiAJLyogY29uc3RhbnRzIHVzZWQgYnkgdGhlIHZkc28gKi8KIAlERUZJTkUoQ0xPQ0tfUkVBTFRJTUUsIENMT0NLX1JFQUxUSU1FKTsKIAlERUZJTkUoQ0xPQ0tfTU9OT1RPTklDLCBDTE9DS19NT05PVE9OSUMpOwogCURFRklORShDTE9DS19SRUFMVElNRV9SRVMsIE1PTk9UT05JQ19SRVNfTlNFQyk7CisJQkxBTksoKTsKIAkvKiBjb25zdGFudHMgZm9yIFNJR1AgKi8KIAlERUZJTkUoX19TSUdQX1NUT1AsIHNpZ3Bfc3RvcCk7CiAJREVGSU5FKF9fU0lHUF9SRVNUQVJULCBzaWdwX3Jlc3RhcnQpOwogCURFRklORShfX1NJR1BfU0VOU0UsIHNpZ3Bfc2Vuc2UpOwogCURFRklORShfX1NJR1BfSU5JVElBTF9DUFVfUkVTRVQsIHNpZ3BfaW5pdGlhbF9jcHVfcmVzZXQpOworCUJMQU5LKCk7CisJLyogbG93Y29yZSBvZmZzZXRzICovCisJREVGSU5FKF9fTENfRVhUX1BBUkFNUywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBleHRfcGFyYW1zKSk7CisJREVGSU5FKF9fTENfQ1BVX0FERFJFU1MsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgY3B1X2FkZHIpKTsKKwlERUZJTkUoX19MQ19FWFRfSU5UX0NPREUsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZXh0X2ludF9jb2RlKSk7CisJREVGSU5FKF9fTENfU1ZDX0lMQywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBzdmNfaWxjKSk7CisJREVGSU5FKF9fTENfU1ZDX0lOVF9DT0RFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN2Y19jb2RlKSk7CisJREVGSU5FKF9fTENfUEdNX0lMQywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwZ21faWxjKSk7CisJREVGSU5FKF9fTENfUEdNX0lOVF9DT0RFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHBnbV9jb2RlKSk7CisJREVGSU5FKF9fTENfUEVSX0FUTUlELCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHBlcl9wZXJjX2F0bWlkKSk7CisJREVGSU5FKF9fTENfUEVSX0FERFJFU1MsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcGVyX2FkZHJlc3MpKTsKKwlERUZJTkUoX19MQ19QRVJfQUNDRVNTX0lELCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHBlcl9hY2Nlc3NfaWQpKTsKKwlERUZJTkUoX19MQ19BUl9NT0RFX0lELCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGFyX2FjY2Vzc19pZCkpOworCURFRklORShfX0xDX1NVQkNIQU5ORUxfSUQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3ViY2hhbm5lbF9pZCkpOworCURFRklORShfX0xDX1NVQkNIQU5ORUxfTlIsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3ViY2hhbm5lbF9ucikpOworCURFRklORShfX0xDX0lPX0lOVF9QQVJNLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGlvX2ludF9wYXJtKSk7CisJREVGSU5FKF9fTENfSU9fSU5UX1dPUkQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgaW9faW50X3dvcmQpKTsKKwlERUZJTkUoX19MQ19TVEZMX0ZBQ19MSVNULCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN0ZmxfZmFjX2xpc3QpKTsKKwlERUZJTkUoX19MQ19NQ0NLX0NPREUsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgbWNja19pbnRlcnJ1cHRpb25fY29kZSkpOworCURFRklORShfX0xDX0RVTVBfUkVJUEwsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgaXBpYikpOworCUJMQU5LKCk7CisJREVGSU5FKF9fTENfUlNUX05FV19QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcmVzdGFydF9wc3cpKTsKKwlERUZJTkUoX19MQ19SU1RfT0xEX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCByZXN0YXJ0X29sZF9wc3cpKTsKKwlERUZJTkUoX19MQ19FWFRfT0xEX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBleHRlcm5hbF9vbGRfcHN3KSk7CisJREVGSU5FKF9fTENfU1ZDX09MRF9QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3ZjX29sZF9wc3cpKTsKKwlERUZJTkUoX19MQ19QR01fT0xEX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwcm9ncmFtX29sZF9wc3cpKTsKKwlERUZJTkUoX19MQ19NQ0tfT0xEX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBtY2NrX29sZF9wc3cpKTsKKwlERUZJTkUoX19MQ19JT19PTERfUFNXLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGlvX29sZF9wc3cpKTsKKwlERUZJTkUoX19MQ19FWFRfTkVXX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBleHRlcm5hbF9uZXdfcHN3KSk7CisJREVGSU5FKF9fTENfU1ZDX05FV19QU1csIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3ZjX25ld19wc3cpKTsKKwlERUZJTkUoX19MQ19QR01fTkVXX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwcm9ncmFtX25ld19wc3cpKTsKKwlERUZJTkUoX19MQ19NQ0tfTkVXX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBtY2NrX25ld19wc3cpKTsKKwlERUZJTkUoX19MQ19JT19ORVdfUFNXLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGlvX25ld19wc3cpKTsKKwlERUZJTkUoX19MQ19TQVZFX0FSRUEsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfUkVUVVJOX1BTVywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCByZXR1cm5fcHN3KSk7CisJREVGSU5FKF9fTENfUkVUVVJOX01DQ0tfUFNXLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHJldHVybl9tY2NrX3BzdykpOworCURFRklORShfX0xDX1NZTkNfRU5URVJfVElNRVIsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgc3luY19lbnRlcl90aW1lcikpOworCURFRklORShfX0xDX0FTWU5DX0VOVEVSX1RJTUVSLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGFzeW5jX2VudGVyX3RpbWVyKSk7CisJREVGSU5FKF9fTENfRVhJVF9USU1FUiwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBleGl0X3RpbWVyKSk7CisJREVGSU5FKF9fTENfVVNFUl9USU1FUiwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCB1c2VyX3RpbWVyKSk7CisJREVGSU5FKF9fTENfU1lTVEVNX1RJTUVSLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN5c3RlbV90aW1lcikpOworCURFRklORShfX0xDX1NURUFMX1RJTUVSLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHN0ZWFsX3RpbWVyKSk7CisJREVGSU5FKF9fTENfTEFTVF9VUERBVEVfVElNRVIsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgbGFzdF91cGRhdGVfdGltZXIpKTsKKwlERUZJTkUoX19MQ19MQVNUX1VQREFURV9DTE9DSywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBsYXN0X3VwZGF0ZV9jbG9jaykpOworCURFRklORShfX0xDX0NVUlJFTlQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgY3VycmVudF90YXNrKSk7CisJREVGSU5FKF9fTENfVEhSRUFEX0lORk8sIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgdGhyZWFkX2luZm8pKTsKKwlERUZJTkUoX19MQ19LRVJORUxfU1RBQ0ssIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwga2VybmVsX3N0YWNrKSk7CisJREVGSU5FKF9fTENfQVNZTkNfU1RBQ0ssIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgYXN5bmNfc3RhY2spKTsKKwlERUZJTkUoX19MQ19QQU5JQ19TVEFDSywgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwYW5pY19zdGFjaykpOworCURFRklORShfX0xDX0tFUk5FTF9BU0NFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGtlcm5lbF9hc2NlKSk7CisJREVGSU5FKF9fTENfVVNFUl9BU0NFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHVzZXJfYXNjZSkpOworCURFRklORShfX0xDX1VTRVJfRVhFQ19BU0NFLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIHVzZXJfZXhlY19hc2NlKSk7CisJREVGSU5FKF9fTENfQ1BVSUQsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgY3B1X2lkKSk7CisJREVGSU5FKF9fTENfSU5UX0NMT0NLLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGludF9jbG9jaykpOworCURFRklORShfX0xDX01BQ0hJTkVfRkxBR1MsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgbWFjaGluZV9mbGFncykpOworCURFRklORShfX0xDX0ZUUkFDRV9GVU5DLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGZ0cmFjZV9mdW5jKSk7CisJREVGSU5FKF9fTENfSVJCLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGlyYikpOworCURFRklORShfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgY3B1X3RpbWVyX3NhdmVfYXJlYSkpOworCURFRklORShfX0xDX0NMT0NLX0NPTVBfU0FWRV9BUkVBLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGNsb2NrX2NvbXBfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfUFNXX1NBVkVfQVJFQSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwc3dfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfUFJFRklYX1NBVkVfQVJFQSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBwcmVmaXhyZWdfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfQVJFR1NfU0FWRV9BUkVBLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGFjY2Vzc19yZWdzX3NhdmVfYXJlYSkpOworCURFRklORShfX0xDX0ZQUkVHU19TQVZFX0FSRUEsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZmxvYXRpbmdfcHRfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfR1BSRUdTX1NBVkVfQVJFQSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBncHJlZ3Nfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfQ1JFR1NfU0FWRV9BUkVBLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGNyZWdzX3NhdmVfYXJlYSkpOworI2lmZGVmIENPTkZJR18zMkJJVAorCURFRklORShfX0xDX1BGQVVMVF9JTlRQQVJNLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGV4dF9wYXJhbXMpKTsKKwlERUZJTkUoU0FWRV9BUkVBX0JBU0UsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZXh0ZW5kZWRfc2F2ZV9hcmVhX2FkZHIpKTsKKyNlbHNlIC8qIENPTkZJR18zMkJJVCAqLworCURFRklORShfX0xDX1BGQVVMVF9JTlRQQVJNLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGV4dF9wYXJhbXMyKSk7CisJREVGSU5FKF9fTENfRVhUX1BBUkFNUzIsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZXh0X3BhcmFtczIpKTsKKwlERUZJTkUoU0FWRV9BUkVBX0JBU0UsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgZmxvYXRpbmdfcHRfc2F2ZV9hcmVhKSk7CisJREVGSU5FKF9fTENfUEFTVEUsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgcGFzdGUpKTsKKwlERUZJTkUoX19MQ19GUF9DUkVHX1NBVkVfQVJFQSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBmcHRfY3JlZ19zYXZlX2FyZWEpKTsKKwlERUZJTkUoX19MQ19MQVNUX0JSRUFLLCBvZmZzZXRvZihzdHJ1Y3QgX2xvd2NvcmUsIGJyZWFraW5nX2V2ZW50X2FkZHIpKTsKKwlERUZJTkUoX19MQ19WRFNPX1BFUl9DUFUsIG9mZnNldG9mKHN0cnVjdCBfbG93Y29yZSwgdmRzb19wZXJfY3B1X2RhdGEpKTsKKyNlbmRpZiAvKiBDT05GSUdfMzJCSVQgKi8KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvYmFzZS5TIGIvYXJjaC9zMzkwL2tlcm5lbC9iYXNlLlMKaW5kZXggZGM3ZTUyNS4uMTVlNDZjYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9iYXNlLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9iYXNlLlMKQEAgLTYsOCArNiw4IEBACiAgKgkJIE1pY2hhZWwgSG9semhldSA8aG9semhldUBkZS5pYm0uY29tPgogICovCiAKKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KIAogI2lmZGVmIENPTkZJR182NEJJVAogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2Rpcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9kaXMuYwppbmRleCBkYjk0M2E3Li5iMzliMjdkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2Rpcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZGlzLmMKQEAgLTg2LDEwICs4NiwxNyBAQAogCVU0XzEyLAkvKiA0IGJpdCB1bnNpZ25lZCB2YWx1ZSBzdGFydGluZyBhdCAxMiAqLwogCVU0XzE2LAkvKiA0IGJpdCB1bnNpZ25lZCB2YWx1ZSBzdGFydGluZyBhdCAxNiAqLwogCVU0XzIwLAkvKiA0IGJpdCB1bnNpZ25lZCB2YWx1ZSBzdGFydGluZyBhdCAyMCAqLworCVU0XzMyLAkvKiA0IGJpdCB1bnNpZ25lZCB2YWx1ZSBzdGFydGluZyBhdCAzMiAqLwogCVU4XzgsCS8qIDggYml0IHVuc2lnbmVkIHZhbHVlIHN0YXJ0aW5nIGF0IDggKi8KIAlVOF8xNiwJLyogOCBiaXQgdW5zaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMTYgKi8KKwlVOF8yNCwJLyogOCBiaXQgdW5zaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMjQgKi8KKwlVOF8zMiwJLyogOCBiaXQgdW5zaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMzIgKi8KKwlJOF84LAkvKiA4IGJpdCBzaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgOCAqLworCUk4XzMyLAkvKiA4IGJpdCBzaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMzIgKi8KIAlJMTZfMTYsCS8qIDE2IGJpdCBzaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMTYgKi8KKwlJMTZfMzIsCS8qIDMyIGJpdCBzaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMTYgKi8KIAlVMTZfMTYsCS8qIDE2IGJpdCB1bnNpZ25lZCB2YWx1ZSBzdGFydGluZyBhdCAxNiAqLworCVUxNl8zMiwJLyogMzIgYml0IHVuc2lnbmVkIHZhbHVlIHN0YXJ0aW5nIGF0IDE2ICovCiAJSjE2XzE2LAkvKiBQQyByZWxhdGl2ZSBqdW1wIG9mZnNldCBhdCAxNiAqLwogCUozMl8xNiwJLyogUEMgcmVsYXRpdmUgbG9uZyBvZmZzZXQgYXQgMTYgKi8KIAlJMzJfMTYsCS8qIDMyIGJpdCBzaWduZWQgdmFsdWUgc3RhcnRpbmcgYXQgMTYgKi8KQEAgLTEwNCwyMSArMTExLDM3IEBACiAgKi8KIGVudW0gewogCUlOU1RSX0lOVkFMSUQsCi0JSU5TVFJfRSwgSU5TVFJfUklFX1JSUCwgSU5TVFJfUklMX1JJLCBJTlNUUl9SSUxfUlAsIElOU1RSX1JJTF9SVSwKLQlJTlNUUl9SSUxfVVAsIElOU1RSX1JJX1JJLCBJTlNUUl9SSV9SUCwgSU5TVFJfUklfUlUsIElOU1RSX1JJX1VQLAorCUlOU1RSX0UsCisJSU5TVFJfUklFX1IwSVUsIElOU1RSX1JJRV9SMFVVLCBJTlNUUl9SSUVfUlJQLCBJTlNUUl9SSUVfUlJQVSwKKwlJTlNUUl9SSUVfUlJVVVUsIElOU1RSX1JJRV9SVVBJLCBJTlNUUl9SSUVfUlVQVSwKKwlJTlNUUl9SSUxfUkksIElOU1RSX1JJTF9SUCwgSU5TVFJfUklMX1JVLCBJTlNUUl9SSUxfVVAsCisJSU5TVFJfUklTX1IwUkRVLCBJTlNUUl9SSVNfUjBVVSwgSU5TVFJfUklTX1JVUkRJLCBJTlNUUl9SSVNfUlVSRFUsCisJSU5TVFJfUklfUkksIElOU1RSX1JJX1JQLCBJTlNUUl9SSV9SVSwgSU5TVFJfUklfVVAsCiAJSU5TVFJfUlJFXzAwLCBJTlNUUl9SUkVfMFIsIElOU1RSX1JSRV9BQSwgSU5TVFJfUlJFX0FSLCBJTlNUUl9SUkVfRjAsCi0JSU5TVFJfUlJFX0ZGLCBJTlNUUl9SUkVfUjAsIElOU1RSX1JSRV9SQSwgSU5TVFJfUlJFX1JGLCBJTlNUUl9SUkVfUlIsCi0JSU5TVFJfUlJFX1JSX09QVCwgSU5TVFJfUlJGX0YwRkYsIElOU1RSX1JSRl9GVUZGLCBJTlNUUl9SUkZfTTBSUiwKLQlJTlNUUl9SUkZfUjBSUiwgSU5TVFJfUlJGX1JVUlIsIElOU1RSX1JSRl9VMEZGLCBJTlNUUl9SUkZfVTBSRiwKKwlJTlNUUl9SUkVfRkYsIElOU1RSX1JSRV9GUiwgSU5TVFJfUlJFX1IwLCBJTlNUUl9SUkVfUkEsIElOU1RSX1JSRV9SRiwKKwlJTlNUUl9SUkVfUlIsIElOU1RSX1JSRV9SUl9PUFQsCisJSU5TVFJfUlJGXzBVRkYsIElOU1RSX1JSRl9GMEZGLCBJTlNUUl9SUkZfRjBGRjIsIElOU1RSX1JSRl9GMEZSLAorCUlOU1RSX1JSRl9GRlJVLCBJTlNUUl9SUkZfRlVGRiwgSU5TVFJfUlJGX00wUlIsIElOU1RSX1JSRl9SMFJSLAorCUlOU1RSX1JSRl9SVVJSLCBJTlNUUl9SUkZfVTBGRiwgSU5TVFJfUlJGX1UwUkYsIElOU1RSX1JSRl9VMFJSLAorCUlOU1RSX1JSRl9VVUZGLCBJTlNUUl9SUlJfRjBGRiwgSU5TVFJfUlJTX1JSUkRVLAogCUlOU1RSX1JSX0ZGLCBJTlNUUl9SUl9SMCwgSU5TVFJfUlJfUlIsIElOU1RSX1JSX1UwLCBJTlNUUl9SUl9VUiwKLQlJTlNUUl9SU0VfQ0NSRCwgSU5TVFJfUlNFX1JSUkQsIElOU1RSX1JTRV9SVVJELCBJTlNUUl9SU0lfUlJQLAotCUlOU1RSX1JTTF9SMFJELCBJTlNUUl9SU1lfQUFSRCwgSU5TVFJfUlNZX0NDUkQsIElOU1RSX1JTWV9SUlJELAotCUlOU1RSX1JTWV9SVVJELCBJTlNUUl9SU19BQVJELCBJTlNUUl9SU19DQ1JELCBJTlNUUl9SU19SMFJELAotCUlOU1RSX1JTX1JSUkQsIElOU1RSX1JTX1JVUkQsIElOU1RSX1JYRV9GUlJELCBJTlNUUl9SWEVfUlJSRCwKLQlJTlNUUl9SWEZfRlJSREYsIElOU1RSX1JYWV9GUlJELCBJTlNUUl9SWFlfUlJSRCwgSU5TVFJfUlhfRlJSRCwKLQlJTlNUUl9SWF9SUlJELCBJTlNUUl9SWF9VUlJELCBJTlNUUl9TSVlfVVJELCBJTlNUUl9TSV9VUkQsCi0JSU5TVFJfU1NFX1JEUkQsIElOU1RSX1NTRl9SUkRSRCwgSU5TVFJfU1NfTDBSRFJELCBJTlNUUl9TU19MSVJEUkQsCi0JSU5TVFJfU1NfTExSRFJELCBJTlNUUl9TU19SUlJEUkQsIElOU1RSX1NTX1JSUkRSRDIsIElOU1RSX1NTX1JSUkRSRDMsCisJSU5TVFJfUlNFX0NDUkQsIElOU1RSX1JTRV9SUlJELCBJTlNUUl9SU0VfUlVSRCwKKwlJTlNUUl9SU0lfUlJQLAorCUlOU1RSX1JTTF9SMFJELAorCUlOU1RSX1JTWV9BQVJELCBJTlNUUl9SU1lfQ0NSRCwgSU5TVFJfUlNZX1JSUkQsIElOU1RSX1JTWV9SVVJELAorCUlOU1RSX1JTX0FBUkQsIElOU1RSX1JTX0NDUkQsIElOU1RSX1JTX1IwUkQsIElOU1RSX1JTX1JSUkQsCisJSU5TVFJfUlNfUlVSRCwKKwlJTlNUUl9SWEVfRlJSRCwgSU5TVFJfUlhFX1JSUkQsCisJSU5TVFJfUlhGX0ZSUkRGLAorCUlOU1RSX1JYWV9GUlJELCBJTlNUUl9SWFlfUlJSRCwgSU5TVFJfUlhZX1VSUkQsCisJSU5TVFJfUlhfRlJSRCwgSU5TVFJfUlhfUlJSRCwgSU5TVFJfUlhfVVJSRCwKKwlJTlNUUl9TSUxfUkRJLCBJTlNUUl9TSUxfUkRVLAorCUlOU1RSX1NJWV9JUkQsIElOU1RSX1NJWV9VUkQsCisJSU5TVFJfU0lfVVJELAorCUlOU1RSX1NTRV9SRFJELAorCUlOU1RSX1NTRl9SUkRSRCwKKwlJTlNUUl9TU19MMFJEUkQsIElOU1RSX1NTX0xJUkRSRCwgSU5TVFJfU1NfTExSRFJELCBJTlNUUl9TU19SUlJEUkQsCisJSU5TVFJfU1NfUlJSRFJEMiwgSU5TVFJfU1NfUlJSRFJEMywKIAlJTlNUUl9TXzAwLCBJTlNUUl9TX1JELAogfTsKIApAQCAtMTI5LDcgKzE1Miw3IEBACiB9OwogCiBzdHJ1Y3QgaW5zbiB7Ci0JY29uc3QgY2hhciBuYW1lWzVdOworCWNvbnN0IGNoYXIgbmFtZVs2XTsKIAl1bnNpZ25lZCBjaGFyIG9wZnJhZzsKIAl1bnNpZ25lZCBjaGFyIGZvcm1hdDsKIH07CkBAIC0xNzAsMTEgKzE5MywxNiBAQAogCVtVNF8xMl0gID0geyAgNCwgMTIsIDAgfSwKIAlbVTRfMTZdICA9IHsgIDQsIDE2LCAwIH0sCiAJW1U0XzIwXSAgPSB7ICA0LCAyMCwgMCB9LAorCVtVNF8zMl0gID0geyAgNCwgMzIsIDAgfSwKIAlbVThfOF0JID0geyAgOCwgIDgsIDAgfSwKIAlbVThfMTZdICA9IHsgIDgsIDE2LCAwIH0sCisJW1U4XzI0XSAgPSB7ICA4LCAyNCwgMCB9LAorCVtVOF8zMl0gID0geyAgOCwgMzIsIDAgfSwKIAlbSTE2XzE2XSA9IHsgMTYsIDE2LCBPUEVSQU5EX1NJR05FRCB9LAogCVtVMTZfMTZdID0geyAxNiwgMTYsIDAgfSwKKwlbVTE2XzMyXSA9IHsgMTYsIDMyLCAwIH0sCiAJW0oxNl8xNl0gPSB7IDE2LCAxNiwgT1BFUkFORF9QQ1JFTCB9LAorCVtJMTZfMzJdID0geyAxNiwgMzIsIE9QRVJBTkRfU0lHTkVEIH0sCiAJW0ozMl8xNl0gPSB7IDMyLCAxNiwgT1BFUkFORF9QQ1JFTCB9LAogCVtJMzJfMTZdID0geyAzMiwgMTYsIE9QRVJBTkRfU0lHTkVEIH0sCiAJW1UzMl8xNl0gPSB7IDMyLCAxNiwgMCB9LApAQCAtMTgzLDgyICsyMTEsOTMgQEAKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGZvcm1hdHNbXVs3XSA9IHsKLQlbSU5TVFJfRV0JICA9IHsgMHhmZiwgMCwwLDAsMCwwLDAgfSwJICAgICAgIC8qIGUuZy4gcHIgICAgKi8KLQlbSU5TVFJfUklFX1JSUF0JICA9IHsgMHhmZiwgUl84LFJfMTIsSjE2XzE2LDAsMCwwIH0sICAgLyogZS5nLiBicnhoZyAqLwotCVtJTlNUUl9SSUxfUlBdCSAgPSB7IDB4MGYsIFJfOCxKMzJfMTYsMCwwLDAsMCB9LCAgICAgIC8qIGUuZy4gYnJhc2wgKi8KLQlbSU5TVFJfUklMX1VQXQkgID0geyAweDBmLCBVNF84LEozMl8xNiwwLDAsMCwwIH0sICAgICAvKiBlLmcuIGJyY2wgICovCi0JW0lOU1RSX1JJTF9SSV0JICA9IHsgMHgwZiwgUl84LEkzMl8xNiwwLDAsMCwwIH0sICAgICAgLyogZS5nLiBhZmkgICAqLwotCVtJTlNUUl9SSUxfUlVdCSAgPSB7IDB4MGYsIFJfOCxVMzJfMTYsMCwwLDAsMCB9LCAgICAgIC8qIGUuZy4gYWxmaSAgKi8KLQlbSU5TVFJfUklfUkldCSAgPSB7IDB4MGYsIFJfOCxJMTZfMTYsMCwwLDAsMCB9LCAgICAgIC8qIGUuZy4gYWhpICAgKi8KLQlbSU5TVFJfUklfUlBdCSAgPSB7IDB4MGYsIFJfOCxKMTZfMTYsMCwwLDAsMCB9LCAgICAgIC8qIGUuZy4gYnJjdCAgKi8KLQlbSU5TVFJfUklfUlVdCSAgPSB7IDB4MGYsIFJfOCxVMTZfMTYsMCwwLDAsMCB9LCAgICAgIC8qIGUuZy4gdG1sICAgKi8KLQlbSU5TVFJfUklfVVBdCSAgPSB7IDB4MGYsIFU0XzgsSjE2XzE2LDAsMCwwLDAgfSwgICAgIC8qIGUuZy4gYnJjICAgKi8KLQlbSU5TVFJfUlJFXzAwXQkgID0geyAweGZmLCAwLDAsMCwwLDAsMCB9LAkgICAgICAgLyogZS5nLiBwYWxiICAqLwotCVtJTlNUUl9SUkVfMFJdCSAgPSB7IDB4ZmYsIFJfMjgsMCwwLDAsMCwwIH0sCSAgICAgICAvKiBlLmcuIHRiICAgICovCi0JW0lOU1RSX1JSRV9BQV0JICA9IHsgMHhmZiwgQV8yNCxBXzI4LDAsMCwwLDAgfSwgICAgICAgLyogZS5nLiBjcHlhICAqLwotCVtJTlNUUl9SUkVfQVJdCSAgPSB7IDB4ZmYsIEFfMjQsUl8yOCwwLDAsMCwwIH0sICAgICAgIC8qIGUuZy4gc2FyICAgKi8KLQlbSU5TVFJfUlJFX0YwXQkgID0geyAweGZmLCBGXzI0LDAsMCwwLDAsMCB9LAkgICAgICAgLyogZS5nLiBzcWVyICAqLwotCVtJTlNUUl9SUkVfRkZdCSAgPSB7IDB4ZmYsIEZfMjQsRl8yOCwwLDAsMCwwIH0sICAgICAgIC8qIGUuZy4gZGViciAgKi8KLQlbSU5TVFJfUlJFX1IwXQkgID0geyAweGZmLCBSXzI0LDAsMCwwLDAsMCB9LAkgICAgICAgLyogZS5nLiBpcG0gICAqLwotCVtJTlNUUl9SUkVfUkFdCSAgPSB7IDB4ZmYsIFJfMjQsQV8yOCwwLDAsMCwwIH0sICAgICAgIC8qIGUuZy4gZWFyICAgKi8KLQlbSU5TVFJfUlJFX1JGXQkgID0geyAweGZmLCBSXzI0LEZfMjgsMCwwLDAsMCB9LCAgICAgICAvKiBlLmcuIGNlZmJyICovCi0JW0lOU1RSX1JSRV9SUl0JICA9IHsgMHhmZiwgUl8yNCxSXzI4LDAsMCwwLDAgfSwgICAgICAgLyogZS5nLiBsdXJhICAqLwotCVtJTlNUUl9SUkVfUlJfT1BUXT0geyAweGZmLCBSXzI0LFJPXzI4LDAsMCwwLDAgfSwgICAgICAvKiBlZnBjLCBzZnBjICovCi0JW0lOU1RSX1JSRl9GMEZGXSAgPSB7IDB4ZmYsIEZfMTYsRl8yNCxGXzI4LDAsMCwwIH0sICAgIC8qIGUuZy4gbWFkYnIgKi8KLQlbSU5TVFJfUlJGX0ZVRkZdICA9IHsgMHhmZiwgRl8yNCxGXzE2LEZfMjgsVTRfMjAsMCwwIH0sLyogZS5nLiBkaWRiciAqLwotCVtJTlNUUl9SUkZfUlVSUl0gID0geyAweGZmLCBSXzI0LFJfMjgsUl8xNixVNF8yMCwwLDAgfSwvKiBlLmcuIC5pbnNuICovCi0JW0lOU1RSX1JSRl9SMFJSXSAgPSB7IDB4ZmYsIFJfMjQsUl8xNixSXzI4LDAsMCwwIH0sICAgIC8qIGUuZy4gaWR0ZSAgKi8KLQlbSU5TVFJfUlJGX1UwRkZdICA9IHsgMHhmZiwgRl8yNCxVNF8xNixGXzI4LDAsMCwwIH0sICAgLyogZS5nLiBmaXhyICAqLwotCVtJTlNUUl9SUkZfVTBSRl0gID0geyAweGZmLCBSXzI0LFU0XzE2LEZfMjgsMCwwLDAgfSwgICAvKiBlLmcuIGNmZWJyICovCi0JW0lOU1RSX1JSRl9NMFJSXSAgPSB7IDB4ZmYsIFJfMjQsUl8yOCxNXzE2LDAsMCwwIH0sICAgIC8qIGUuZy4gc3NrZSAgKi8KLQlbSU5TVFJfUlJfRkZdCSAgPSB7IDB4ZmYsIEZfOCxGXzEyLDAsMCwwLDAgfSwgICAgICAgIC8qIGUuZy4gYWRyICAgKi8KLQlbSU5TVFJfUlJfUjBdCSAgPSB7IDB4ZmYsIFJfOCwgMCwwLDAsMCwwIH0sCSAgICAgICAvKiBlLmcuIHNwbSAgICovCi0JW0lOU1RSX1JSX1JSXQkgID0geyAweGZmLCBSXzgsUl8xMiwwLDAsMCwwIH0sICAgICAgICAvKiBlLmcuIGxyICAgICovCi0JW0lOU1RSX1JSX1UwXQkgID0geyAweGZmLCBVOF84LCAwLDAsMCwwLDAgfSwJICAgICAgIC8qIGUuZy4gc3ZjICAgKi8KLQlbSU5TVFJfUlJfVVJdCSAgPSB7IDB4ZmYsIFU0XzgsUl8xMiwwLDAsMCwwIH0sICAgICAgIC8qIGUuZy4gYmNyICAgKi8KLQlbSU5TVFJfUlNFX1JSUkRdICA9IHsgMHhmZiwgUl84LFJfMTIsRF8yMCxCXzE2LDAsMCB9LCAgLyogZS5nLiBsbWggICAqLwotCVtJTlNUUl9SU0VfQ0NSRF0gID0geyAweGZmLCBDXzgsQ18xMixEXzIwLEJfMTYsMCwwIH0sICAvKiBlLmcuIGxtaCAgICovCi0JW0lOU1RSX1JTRV9SVVJEXSAgPSB7IDB4ZmYsIFJfOCxVNF8xMixEXzIwLEJfMTYsMCwwIH0sIC8qIGUuZy4gaWNtaCAgKi8KLQlbSU5TVFJfUlNMX1IwUkRdICA9IHsgMHhmZiwgUl84LERfMjAsQl8xNiwwLDAsMCB9LCAgICAgLyogZS5nLiB0cCAgICAqLwotCVtJTlNUUl9SU0lfUlJQXQkgID0geyAweGZmLCBSXzgsUl8xMixKMTZfMTYsMCwwLDAgfSwgICAvKiBlLmcuIGJyeGggICovCi0JW0lOU1RSX1JTWV9SUlJEXSAgPSB7IDB4ZmYsIFJfOCxSXzEyLEQyMF8yMCxCXzE2LDAsMCB9LC8qIGUuZy4gc3RteSAgKi8KKwlbSU5TVFJfRV0JICA9IHsgMHhmZiwgMCwwLDAsMCwwLDAgfSwKKwlbSU5TVFJfUklFX1IwVVVdICA9IHsgMHhmZiwgUl84LFUxNl8xNixVNF8zMiwwLDAsMCB9LAorCVtJTlNUUl9SSUVfUlJQVV0gID0geyAweGZmLCBSXzgsUl8xMixVNF8zMixKMTZfMTYsMCwwIH0sCisJW0lOU1RSX1JJRV9SUlBdCSAgPSB7IDB4ZmYsIFJfOCxSXzEyLEoxNl8xNiwwLDAsMCB9LAorCVtJTlNUUl9SSUVfUlJVVVVdID0geyAweGZmLCBSXzgsUl8xMixVOF8xNixVOF8yNCxVOF8zMiwwIH0sCisJW0lOU1RSX1JJRV9SVVBJXSAgPSB7IDB4ZmYsIFJfOCxJOF8zMixVNF8xMixKMTZfMTYsMCwwIH0sCisJW0lOU1RSX1JJTF9SSV0JICA9IHsgMHgwZiwgUl84LEkzMl8xNiwwLDAsMCwwIH0sCisJW0lOU1RSX1JJTF9SUF0JICA9IHsgMHgwZiwgUl84LEozMl8xNiwwLDAsMCwwIH0sCisJW0lOU1RSX1JJTF9SVV0JICA9IHsgMHgwZiwgUl84LFUzMl8xNiwwLDAsMCwwIH0sCisJW0lOU1RSX1JJTF9VUF0JICA9IHsgMHgwZiwgVTRfOCxKMzJfMTYsMCwwLDAsMCB9LAorCVtJTlNUUl9SSVNfUjBSRFVdID0geyAweGZmLCBSXzgsVThfMzIsRF8yMCxCXzE2LDAsMCB9LAorCVtJTlNUUl9SSVNfUlVSREldID0geyAweGZmLCBSXzgsSThfMzIsVTRfMTIsRF8yMCxCXzE2LDAgfSwKKwlbSU5TVFJfUklTX1JVUkRVXSA9IHsgMHhmZiwgUl84LFU4XzMyLFU0XzEyLERfMjAsQl8xNiwwIH0sCisJW0lOU1RSX1JJX1JJXQkgID0geyAweDBmLCBSXzgsSTE2XzE2LDAsMCwwLDAgfSwKKwlbSU5TVFJfUklfUlBdCSAgPSB7IDB4MGYsIFJfOCxKMTZfMTYsMCwwLDAsMCB9LAorCVtJTlNUUl9SSV9SVV0JICA9IHsgMHgwZiwgUl84LFUxNl8xNiwwLDAsMCwwIH0sCisJW0lOU1RSX1JJX1VQXQkgID0geyAweDBmLCBVNF84LEoxNl8xNiwwLDAsMCwwIH0sCisJW0lOU1RSX1JSRV8wMF0JICA9IHsgMHhmZiwgMCwwLDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJFXzBSXQkgID0geyAweGZmLCBSXzI4LDAsMCwwLDAsMCB9LAorCVtJTlNUUl9SUkVfQUFdCSAgPSB7IDB4ZmYsIEFfMjQsQV8yOCwwLDAsMCwwIH0sCisJW0lOU1RSX1JSRV9BUl0JICA9IHsgMHhmZiwgQV8yNCxSXzI4LDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJFX0YwXQkgID0geyAweGZmLCBGXzI0LDAsMCwwLDAsMCB9LAorCVtJTlNUUl9SUkVfRkZdCSAgPSB7IDB4ZmYsIEZfMjQsRl8yOCwwLDAsMCwwIH0sCisJW0lOU1RSX1JSRV9GUl0JICA9IHsgMHhmZiwgRl8yNCxSXzI4LDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJFX1IwXQkgID0geyAweGZmLCBSXzI0LDAsMCwwLDAsMCB9LAorCVtJTlNUUl9SUkVfUkFdCSAgPSB7IDB4ZmYsIFJfMjQsQV8yOCwwLDAsMCwwIH0sCisJW0lOU1RSX1JSRV9SRl0JICA9IHsgMHhmZiwgUl8yNCxGXzI4LDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJFX1JSXQkgID0geyAweGZmLCBSXzI0LFJfMjgsMCwwLDAsMCB9LAorCVtJTlNUUl9SUkVfUlJfT1BUXT0geyAweGZmLCBSXzI0LFJPXzI4LDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJGXzBVRkZdICA9IHsgMHhmZiwgRl8yNCxGXzI4LFU0XzIwLDAsMCwwIH0sCisJW0lOU1RSX1JSRl9GMEZGMl0gPSB7IDB4ZmYsIEZfMjQsRl8xNixGXzI4LDAsMCwwIH0sCisJW0lOU1RSX1JSRl9GMEZGXSAgPSB7IDB4ZmYsIEZfMTYsRl8yNCxGXzI4LDAsMCwwIH0sCisJW0lOU1RSX1JSRl9GMEZSXSAgPSB7IDB4ZmYsIEZfMjQsRl8xNixSXzI4LDAsMCwwIH0sCisJW0lOU1RSX1JSRl9GRlJVXSAgPSB7IDB4ZmYsIEZfMjQsRl8xNixSXzI4LFU0XzIwLDAsMCB9LAorCVtJTlNUUl9SUkZfRlVGRl0gID0geyAweGZmLCBGXzI0LEZfMTYsRl8yOCxVNF8yMCwwLDAgfSwKKwlbSU5TVFJfUlJGX00wUlJdICA9IHsgMHhmZiwgUl8yNCxSXzI4LE1fMTYsMCwwLDAgfSwKKwlbSU5TVFJfUlJGX1IwUlJdICA9IHsgMHhmZiwgUl8yNCxSXzE2LFJfMjgsMCwwLDAgfSwKKwlbSU5TVFJfUlJGX1JVUlJdICA9IHsgMHhmZiwgUl8yNCxSXzI4LFJfMTYsVTRfMjAsMCwwIH0sCisJW0lOU1RSX1JSRl9VMEZGXSAgPSB7IDB4ZmYsIEZfMjQsVTRfMTYsRl8yOCwwLDAsMCB9LAorCVtJTlNUUl9SUkZfVTBSRl0gID0geyAweGZmLCBSXzI0LFU0XzE2LEZfMjgsMCwwLDAgfSwKKwlbSU5TVFJfUlJGX1UwUlJdICA9IHsgMHhmZiwgUl8yNCxSXzI4LFU0XzE2LDAsMCwwIH0sCisJW0lOU1RSX1JSRl9VVUZGXSAgPSB7IDB4ZmYsIEZfMjQsVTRfMTYsRl8yOCxVNF8yMCwwLDAgfSwKKwlbSU5TVFJfUlJSX0YwRkZdICA9IHsgMHhmZiwgRl8yNCxGXzI4LEZfMTYsMCwwLDAgfSwKKwlbSU5TVFJfUlJTX1JSUkRVXSA9IHsgMHhmZiwgUl84LFJfMTIsVTRfMzIsRF8yMCxCXzE2LDAgfSwKKwlbSU5TVFJfUlJfRkZdCSAgPSB7IDB4ZmYsIEZfOCxGXzEyLDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJfUjBdCSAgPSB7IDB4ZmYsIFJfOCwgMCwwLDAsMCwwIH0sCisJW0lOU1RSX1JSX1JSXQkgID0geyAweGZmLCBSXzgsUl8xMiwwLDAsMCwwIH0sCisJW0lOU1RSX1JSX1UwXQkgID0geyAweGZmLCBVOF84LCAwLDAsMCwwLDAgfSwKKwlbSU5TVFJfUlJfVVJdCSAgPSB7IDB4ZmYsIFU0XzgsUl8xMiwwLDAsMCwwIH0sCisJW0lOU1RSX1JTRV9DQ1JEXSAgPSB7IDB4ZmYsIENfOCxDXzEyLERfMjAsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlNFX1JSUkRdICA9IHsgMHhmZiwgUl84LFJfMTIsRF8yMCxCXzE2LDAsMCB9LAorCVtJTlNUUl9SU0VfUlVSRF0gID0geyAweGZmLCBSXzgsVTRfMTIsRF8yMCxCXzE2LDAsMCB9LAorCVtJTlNUUl9SU0lfUlJQXQkgID0geyAweGZmLCBSXzgsUl8xMixKMTZfMTYsMCwwLDAgfSwKKwlbSU5TVFJfUlNMX1IwUkRdICA9IHsgMHhmZiwgRF8yMCxMNF84LEJfMTYsMCwwLDAgfSwKKwlbSU5TVFJfUlNZX0FBUkRdICA9IHsgMHhmZiwgQV84LEFfMTIsRDIwXzIwLEJfMTYsMCwwIH0sCisJW0lOU1RSX1JTWV9DQ1JEXSAgPSB7IDB4ZmYsIENfOCxDXzEyLEQyMF8yMCxCXzE2LDAsMCB9LAorCVtJTlNUUl9SU1lfUlJSRF0gID0geyAweGZmLCBSXzgsUl8xMixEMjBfMjAsQl8xNiwwLDAgfSwKIAlbSU5TVFJfUlNZX1JVUkRdICA9IHsgMHhmZiwgUl84LFU0XzEyLEQyMF8yMCxCXzE2LDAsMCB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIGljbWggICovCi0JW0lOU1RSX1JTWV9BQVJEXSAgPSB7IDB4ZmYsIEFfOCxBXzEyLEQyMF8yMCxCXzE2LDAsMCB9LC8qIGUuZy4gbGFteSAgKi8KLQlbSU5TVFJfUlNZX0NDUkRdICA9IHsgMHhmZiwgQ184LENfMTIsRDIwXzIwLEJfMTYsMCwwIH0sLyogZS5nLiBsYW15ICAqLwotCVtJTlNUUl9SU19BQVJEXQkgID0geyAweGZmLCBBXzgsQV8xMixEXzIwLEJfMTYsMCwwIH0sICAvKiBlLmcuIGxhbSAgICovCi0JW0lOU1RSX1JTX0NDUkRdCSAgPSB7IDB4ZmYsIENfOCxDXzEyLERfMjAsQl8xNiwwLDAgfSwgIC8qIGUuZy4gbGN0bCAgKi8KLQlbSU5TVFJfUlNfUjBSRF0JICA9IHsgMHhmZiwgUl84LERfMjAsQl8xNiwwLDAsMCB9LCAgICAgLyogZS5nLiBzbGwgICAqLwotCVtJTlNUUl9SU19SUlJEXQkgID0geyAweGZmLCBSXzgsUl8xMixEXzIwLEJfMTYsMCwwIH0sICAvKiBlLmcuIGNzICAgICovCi0JW0lOU1RSX1JTX1JVUkRdCSAgPSB7IDB4ZmYsIFJfOCxVNF8xMixEXzIwLEJfMTYsMCwwIH0sIC8qIGUuZy4gaWNtICAgKi8KLQlbSU5TVFJfUlhFX0ZSUkRdICA9IHsgMHhmZiwgRl84LERfMjAsWF8xMixCXzE2LDAsMCB9LCAgLyogZS5nLiBheGJyICAqLwotCVtJTlNUUl9SWEVfUlJSRF0gID0geyAweGZmLCBSXzgsRF8yMCxYXzEyLEJfMTYsMCwwIH0sICAvKiBlLmcuIGxnICAgICovCisJW0lOU1RSX1JTX0FBUkRdCSAgPSB7IDB4ZmYsIEFfOCxBXzEyLERfMjAsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlNfQ0NSRF0JICA9IHsgMHhmZiwgQ184LENfMTIsRF8yMCxCXzE2LDAsMCB9LAorCVtJTlNUUl9SU19SMFJEXQkgID0geyAweGZmLCBSXzgsRF8yMCxCXzE2LDAsMCwwIH0sCisJW0lOU1RSX1JTX1JSUkRdCSAgPSB7IDB4ZmYsIFJfOCxSXzEyLERfMjAsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlNfUlVSRF0JICA9IHsgMHhmZiwgUl84LFU0XzEyLERfMjAsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlhFX0ZSUkRdICA9IHsgMHhmZiwgRl84LERfMjAsWF8xMixCXzE2LDAsMCB9LAorCVtJTlNUUl9SWEVfUlJSRF0gID0geyAweGZmLCBSXzgsRF8yMCxYXzEyLEJfMTYsMCwwIH0sCiAJW0lOU1RSX1JYRl9GUlJERl0gPSB7IDB4ZmYsIEZfMzIsRl84LERfMjAsWF8xMixCXzE2LDAgfSwKLQkJCQkJCQkgICAgICAgLyogZS5nLiBtYWRiICAqLwotCVtJTlNUUl9SWFlfUlJSRF0gID0geyAweGZmLCBSXzgsRDIwXzIwLFhfMTIsQl8xNiwwLDAgfSwvKiBlLmcuIGx5ICAgICovCi0JW0lOU1RSX1JYWV9GUlJEXSAgPSB7IDB4ZmYsIEZfOCxEMjBfMjAsWF8xMixCXzE2LDAsMCB9LC8qIGUuZy4gbGV5ICAgKi8KLQlbSU5TVFJfUlhfRlJSRF0JICA9IHsgMHhmZiwgRl84LERfMjAsWF8xMixCXzE2LDAsMCB9LCAgLyogZS5nLiBhZSAgICAqLwotCVtJTlNUUl9SWF9SUlJEXQkgID0geyAweGZmLCBSXzgsRF8yMCxYXzEyLEJfMTYsMCwwIH0sICAvKiBlLmcuIGwgICAgICovCi0JW0lOU1RSX1JYX1VSUkRdCSAgPSB7IDB4ZmYsIFU0XzgsRF8yMCxYXzEyLEJfMTYsMCwwIH0sIC8qIGUuZy4gYmMgICAgKi8KLQlbSU5TVFJfU0lfVVJEXQkgID0geyAweGZmLCBEXzIwLEJfMTYsVThfOCwwLDAsMCB9LCAgICAvKiBlLmcuIGNsaSAgICovCi0JW0lOU1RSX1NJWV9VUkRdCSAgPSB7IDB4ZmYsIEQyMF8yMCxCXzE2LFU4XzgsMCwwLDAgfSwgIC8qIGUuZy4gdG15ICAgKi8KLQlbSU5TVFJfU1NFX1JEUkRdICA9IHsgMHhmZiwgRF8yMCxCXzE2LERfMzYsQl8zMiwwLDAgfSwgLyogZS5nLiBtdnNkayAqLwotCVtJTlNUUl9TU19MMFJEUkRdID0geyAweGZmLCBEXzIwLEw4XzgsQl8xNixEXzM2LEJfMzIsMCB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIG12YyAgICovCi0JW0lOU1RSX1NTX0xJUkRSRF0gPSB7IDB4ZmYsIERfMjAsTDRfOCxCXzE2LERfMzYsQl8zMixVNF8xMiB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIHNycCAgICovCi0JW0lOU1RSX1NTX0xMUkRSRF0gPSB7IDB4ZmYsIERfMjAsTDRfOCxCXzE2LERfMzYsTDRfMTIsQl8zMiB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIHBhY2sgICovCi0JW0lOU1RSX1NTX1JSUkRSRF0gPSB7IDB4ZmYsIERfMjAsUl84LEJfMTYsRF8zNixCXzMyLFJfMTIgfSwKLQkJCQkJCQkgICAgICAgLyogZS5nLiBtdmNrICAqLwotCVtJTlNUUl9TU19SUlJEUkQyXT0geyAweGZmLCBSXzgsRF8yMCxCXzE2LFJfMTIsRF8zNixCXzMyIH0sCi0JCQkJCQkJICAgICAgIC8qIGUuZy4gcGxvICAgKi8KLQlbSU5TVFJfU1NfUlJSRFJEM109IHsgMHhmZiwgUl84LFJfMTIsRF8yMCxCXzE2LERfMzYsQl8zMiB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIGxtZCAgICovCi0JW0lOU1RSX1NfMDBdCSAgPSB7IDB4ZmYsIDAsMCwwLDAsMCwwIH0sCSAgICAgICAvKiBlLmcuIGhzY2ggICovCi0JW0lOU1RSX1NfUkRdCSAgPSB7IDB4ZmYsIERfMjAsQl8xNiwwLDAsMCwwIH0sICAgICAgIC8qIGUuZy4gbHBzdyAgKi8KKwlbSU5TVFJfUlhZX0ZSUkRdICA9IHsgMHhmZiwgRl84LEQyMF8yMCxYXzEyLEJfMTYsMCwwIH0sCisJW0lOU1RSX1JYWV9SUlJEXSAgPSB7IDB4ZmYsIFJfOCxEMjBfMjAsWF8xMixCXzE2LDAsMCB9LAorCVtJTlNUUl9SWFlfVVJSRF0gID0geyAweGZmLCBVNF84LEQyMF8yMCxYXzEyLEJfMTYsMCwwIH0sCisJW0lOU1RSX1JYX0ZSUkRdCSAgPSB7IDB4ZmYsIEZfOCxEXzIwLFhfMTIsQl8xNiwwLDAgfSwKKwlbSU5TVFJfUlhfUlJSRF0JICA9IHsgMHhmZiwgUl84LERfMjAsWF8xMixCXzE2LDAsMCB9LAorCVtJTlNUUl9SWF9VUlJEXQkgID0geyAweGZmLCBVNF84LERfMjAsWF8xMixCXzE2LDAsMCB9LAorCVtJTlNUUl9TSUxfUkRJXSAgID0geyAweGZmLCBEXzIwLEJfMTYsSTE2XzMyLDAsMCwwIH0sCisJW0lOU1RSX1NJTF9SRFVdICAgPSB7IDB4ZmYsIERfMjAsQl8xNixVMTZfMzIsMCwwLDAgfSwKKwlbSU5TVFJfU0lZX0lSRF0gICA9IHsgMHhmZiwgRDIwXzIwLEJfMTYsSThfOCwwLDAsMCB9LAorCVtJTlNUUl9TSVlfVVJEXQkgID0geyAweGZmLCBEMjBfMjAsQl8xNixVOF84LDAsMCwwIH0sCisJW0lOU1RSX1NJX1VSRF0JICA9IHsgMHhmZiwgRF8yMCxCXzE2LFU4XzgsMCwwLDAgfSwKKwlbSU5TVFJfU1NFX1JEUkRdICA9IHsgMHhmZiwgRF8yMCxCXzE2LERfMzYsQl8zMiwwLDAgfSwKIAlbSU5TVFJfU1NGX1JSRFJEXSA9IHsgMHgwMCwgRF8yMCxCXzE2LERfMzYsQl8zMixSXzgsMCB9LAotCQkJCQkJCSAgICAgICAvKiBlLmcuIG12Y29zICovCisJW0lOU1RSX1NTX0wwUkRSRF0gPSB7IDB4ZmYsIERfMjAsTDhfOCxCXzE2LERfMzYsQl8zMiwwIH0sCisJW0lOU1RSX1NTX0xJUkRSRF0gPSB7IDB4ZmYsIERfMjAsTDRfOCxCXzE2LERfMzYsQl8zMixVNF8xMiB9LAorCVtJTlNUUl9TU19MTFJEUkRdID0geyAweGZmLCBEXzIwLEw0XzgsQl8xNixEXzM2LEw0XzEyLEJfMzIgfSwKKwlbSU5TVFJfU1NfUlJSRFJEMl09IHsgMHhmZiwgUl84LERfMjAsQl8xNixSXzEyLERfMzYsQl8zMiB9LAorCVtJTlNUUl9TU19SUlJEUkQzXT0geyAweGZmLCBSXzgsUl8xMixEXzIwLEJfMTYsRF8zNixCXzMyIH0sCisJW0lOU1RSX1NTX1JSUkRSRF0gPSB7IDB4ZmYsIERfMjAsUl84LEJfMTYsRF8zNixCXzMyLFJfMTIgfSwKKwlbSU5TVFJfU18wMF0JICA9IHsgMHhmZiwgMCwwLDAsMCwwLDAgfSwKKwlbSU5TVFJfU19SRF0JICA9IHsgMHhmZiwgRF8yMCxCXzE2LDAsMCwwLDAgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW5zbiBvcGNvZGVbXSA9IHsKQEAgLTQ1NCw2ICs0OTMsOCBAQAogc3RhdGljIHN0cnVjdCBpbnNuIG9wY29kZV8wMVtdID0gewogI2lmZGVmIENPTkZJR182NEJJVAogCXsgInNhbTY0IiwgMHgwZSwgSU5TVFJfRSB9LAorCXsgInBmcG8iLCAweDBhLCBJTlNUUl9FIH0sCisJeyAicHRmZiIsIDB4MDQsIElOU1RSX0UgfSwKICNlbmRpZgogCXsgInByIiwgMHgwMSwgSU5TVFJfRSB9LAogCXsgInVwdCIsIDB4MDIsIElOU1RSX0UgfSwKQEAgLTUxOSw2ICs1NjAsOCBAQAogCXsgImN1dGZ1IiwgMHhhNywgSU5TVFJfUlJGX00wUlIgfSwKIAl7ICJzdGZsZSIsIDB4YjAsIElOU1RSX1NfUkQgfSwKIAl7ICJscHN3ZSIsIDB4YjIsIElOU1RSX1NfUkQgfSwKKwl7ICJzcm5tdCIsIDB4YjksIElOU1RSX1NfUkQgfSwKKwl7ICJsZmFzIiwgMHhiZCwgSU5TVFJfU19SRCB9LAogI2VuZGlmCiAJeyAic3RpZHAiLCAweDAyLCBJTlNUUl9TX1JEIH0sCiAJeyAic2NrIiwgMHgwNCwgSU5TVFJfU19SRCB9LApAQCAtNTg5LDcgKzYzMiw2IEBACiAJeyAiY2xzdCIsIDB4NWQsIElOU1RSX1JSRV9SUiB9LAogCXsgInNyc3QiLCAweDVlLCBJTlNUUl9SUkVfUlIgfSwKIAl7ICJjbXBzYyIsIDB4NjMsIElOU1RSX1JSRV9SUiB9LAotCXsgImNtcHNjIiwgMHg2MywgSU5TVFJfUlJFX1JSIH0sCiAJeyAic2lnYSIsIDB4NzQsIElOU1RSX1NfUkQgfSwKIAl7ICJ4c2NoIiwgMHg3NiwgSU5TVFJfU18wMCB9LAogCXsgInJwIiwgMHg3NywgSU5TVFJfU19SRCB9LApAQCAtNjMwLDYgKzY3Miw1NyBAQAogCXsgImNnZXIiLCAweGM4LCBJTlNUUl9SUkZfVTBSRiB9LAogCXsgImNnZHIiLCAweGM5LCBJTlNUUl9SUkZfVTBSRiB9LAogCXsgImNneHIiLCAweGNhLCBJTlNUUl9SUkZfVTBSRiB9LAorCXsgImxwZGZyIiwgMHg3MCwgSU5TVFJfUlJFX0ZGIH0sCisJeyAibG5kZnIiLCAweDcxLCBJTlNUUl9SUkVfRkYgfSwKKwl7ICJjcHNkciIsIDB4NzIsIElOU1RSX1JSRl9GMEZGMiB9LAorCXsgImxjZGZyIiwgMHg3MywgSU5TVFJfUlJFX0ZGIH0sCisJeyAibGRnciIsIDB4YzEsIElOU1RSX1JSRV9GUiB9LAorCXsgImxnZHIiLCAweGNkLCBJTlNUUl9SUkVfUkYgfSwKKwl7ICJhZHRyIiwgMHhkMiwgSU5TVFJfUlJSX0YwRkYgfSwKKwl7ICJheHRyIiwgMHhkYSwgSU5TVFJfUlJSX0YwRkYgfSwKKwl7ICJjZHRyIiwgMHhlNCwgSU5TVFJfUlJFX0ZGIH0sCisJeyAiY3h0ciIsIDB4ZWMsIElOU1RSX1JSRV9GRiB9LAorCXsgImtkdHIiLCAweGUwLCBJTlNUUl9SUkVfRkYgfSwKKwl7ICJreHRyIiwgMHhlOCwgSU5TVFJfUlJFX0ZGIH0sCisJeyAiY2VkdHIiLCAweGY0LCBJTlNUUl9SUkVfRkYgfSwKKwl7ICJjZXh0ciIsIDB4ZmMsIElOU1RSX1JSRV9GRiB9LAorCXsgImNkZ3RyIiwgMHhmMSwgSU5TVFJfUlJFX0ZSIH0sCisJeyAiY3hndHIiLCAweGY5LCBJTlNUUl9SUkVfRlIgfSwKKwl7ICJjZHN0ciIsIDB4ZjMsIElOU1RSX1JSRV9GUiB9LAorCXsgImN4c3RyIiwgMHhmYiwgSU5TVFJfUlJFX0ZSIH0sCisJeyAiY2R1dHIiLCAweGYyLCBJTlNUUl9SUkVfRlIgfSwKKwl7ICJjeHV0ciIsIDB4ZmEsIElOU1RSX1JSRV9GUiB9LAorCXsgImNnZHRyIiwgMHhlMSwgSU5TVFJfUlJGX1UwUkYgfSwKKwl7ICJjZ3h0ciIsIDB4ZTksIElOU1RSX1JSRl9VMFJGIH0sCisJeyAiY3NkdHIiLCAweGUzLCBJTlNUUl9SUkVfUkYgfSwKKwl7ICJjc3h0ciIsIDB4ZWIsIElOU1RSX1JSRV9SRiB9LAorCXsgImN1ZHRyIiwgMHhlMiwgSU5TVFJfUlJFX1JGIH0sCisJeyAiY3V4dHIiLCAweGVhLCBJTlNUUl9SUkVfUkYgfSwKKwl7ICJkZHRyIiwgMHhkMSwgSU5TVFJfUlJSX0YwRkYgfSwKKwl7ICJkeHRyIiwgMHhkOSwgSU5TVFJfUlJSX0YwRkYgfSwKKwl7ICJlZWR0ciIsIDB4ZTUsIElOU1RSX1JSRV9SRiB9LAorCXsgImVleHRyIiwgMHhlZCwgSU5TVFJfUlJFX1JGIH0sCisJeyAiZXNkdHIiLCAweGU3LCBJTlNUUl9SUkVfUkYgfSwKKwl7ICJlc3h0ciIsIDB4ZWYsIElOU1RSX1JSRV9SRiB9LAorCXsgImllZHRyIiwgMHhmNiwgSU5TVFJfUlJGX0YwRlIgfSwKKwl7ICJpZXh0ciIsIDB4ZmUsIElOU1RSX1JSRl9GMEZSIH0sCisJeyAibHRkdHIiLCAweGQ2LCBJTlNUUl9SUkVfRkYgfSwKKwl7ICJsdHh0ciIsIDB4ZGUsIElOU1RSX1JSRV9GRiB9LAorCXsgImZpZHRyIiwgMHhkNywgSU5TVFJfUlJGX1VVRkYgfSwKKwl7ICJmaXh0ciIsIDB4ZGYsIElOU1RSX1JSRl9VVUZGIH0sCisJeyAibGRldHIiLCAweGQ0LCBJTlNUUl9SUkZfMFVGRiB9LAorCXsgImx4ZHRyIiwgMHhkYywgSU5TVFJfUlJGXzBVRkYgfSwKKwl7ICJsZWR0ciIsIDB4ZDUsIElOU1RSX1JSRl9VVUZGIH0sCisJeyAibGR4dHIiLCAweGRkLCBJTlNUUl9SUkZfVVVGRiB9LAorCXsgIm1kdHIiLCAweGQwLCBJTlNUUl9SUlJfRjBGRiB9LAorCXsgIm14dHIiLCAweGQ4LCBJTlNUUl9SUlJfRjBGRiB9LAorCXsgInFhZHRyIiwgMHhmNSwgSU5TVFJfUlJGX0ZVRkYgfSwKKwl7ICJxYXh0ciIsIDB4ZmQsIElOU1RSX1JSRl9GVUZGIH0sCisJeyAicnJkdHIiLCAweGY3LCBJTlNUUl9SUkZfRkZSVSB9LAorCXsgInJyeHRyIiwgMHhmZiwgSU5TVFJfUlJGX0ZGUlUgfSwKKwl7ICJzZmFzciIsIDB4ODUsIElOU1RSX1JSRV9SMCB9LAorCXsgInNkdHIiLCAweGQzLCBJTlNUUl9SUlJfRjBGRiB9LAorCXsgInN4dHIiLCAweGRiLCBJTlNUUl9SUlJfRjBGRiB9LAogI2VuZGlmCiAJeyAibHBlYnIiLCAweDAwLCBJTlNUUl9SUkVfRkYgfSwKIAl7ICJsbmViciIsIDB4MDEsIElOU1RSX1JSRV9GRiB9LApAQCAtNzgwLDYgKzg3MywxNCBAQAogCXsgImN1MjQiLCAweGIxLCBJTlNUUl9SUkZfTTBSUiB9LAogCXsgImN1NDEiLCAweGIyLCBJTlNUUl9SUkZfTTBSUiB9LAogCXsgImN1NDIiLCAweGIzLCBJTlNUUl9SUkZfTTBSUiB9LAorCXsgImNydCIsIDB4NzIsIElOU1RSX1JSRl9VMFJSIH0sCisJeyAiY2dydCIsIDB4NjAsIElOU1RSX1JSRl9VMFJSIH0sCisJeyAiY2xydCIsIDB4NzMsIElOU1RSX1JSRl9VMFJSIH0sCisJeyAiY2xncnQiLCAweDYxLCBJTlNUUl9SUkZfVTBSUiB9LAorCXsgInB0ZiIsIDB4YTIsIElOU1RSX1JSRV9SMCB9LAorCXsgInBmbWYiLCAweGFmLCBJTlNUUl9SUkVfUlIgfSwKKwl7ICJ0cnRlIiwgMHhiZiwgSU5TVFJfUlJGX00wUlIgfSwKKwl7ICJ0cnRyZSIsIDB4YmQsIElOU1RSX1JSRl9NMFJSIH0sCiAjZW5kaWYKIAl7ICJrbWFjIiwgMHgxZSwgSU5TVFJfUlJFX1JSIH0sCiAJeyAibHJ2ciIsIDB4MWYsIElOU1RSX1JSRV9SUiB9LApAQCAtODM1LDYgKzkzNiw0MyBAQAogCXsgImNmaSIsIDB4MGQsIElOU1RSX1JJTF9SSSB9LAogCXsgImNsZ2ZpIiwgMHgwZSwgSU5TVFJfUklMX1JVIH0sCiAJeyAiY2xmaSIsIDB4MGYsIElOU1RSX1JJTF9SVSB9LAorCXsgIm1zZmkiLCAweDAxLCBJTlNUUl9SSUxfUkkgfSwKKwl7ICJtc2dmaSIsIDB4MDAsIElOU1RSX1JJTF9SSSB9LAorI2VuZGlmCisJeyAiIiwgMCwgSU5TVFJfSU5WQUxJRCB9Cit9OworCitzdGF0aWMgc3RydWN0IGluc24gb3Bjb2RlX2M0W10gPSB7CisjaWZkZWYgQ09ORklHXzY0QklUCisJeyAibHJsIiwgMHgwZCwgSU5TVFJfUklMX1JQIH0sCisJeyAibGdybCIsIDB4MDgsIElOU1RSX1JJTF9SUCB9LAorCXsgImxnZnJsIiwgMHgwYywgSU5TVFJfUklMX1JQIH0sCisJeyAibGhybCIsIDB4MDUsIElOU1RSX1JJTF9SUCB9LAorCXsgImxnaHJsIiwgMHgwNCwgSU5TVFJfUklMX1JQIH0sCisJeyAibGxnZnJsIiwgMHgwZSwgSU5TVFJfUklMX1JQIH0sCisJeyAibGxocmwiLCAweDAyLCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJsbGdocmwiLCAweDA2LCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJzdHJsIiwgMHgwZiwgSU5TVFJfUklMX1JQIH0sCisJeyAic3RncmwiLCAweDBiLCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJzdGhybCIsIDB4MDcsIElOU1RSX1JJTF9SUCB9LAorI2VuZGlmCisJeyAiIiwgMCwgSU5TVFJfSU5WQUxJRCB9Cit9OworCitzdGF0aWMgc3RydWN0IGluc24gb3Bjb2RlX2M2W10gPSB7CisjaWZkZWYgQ09ORklHXzY0QklUCisJeyAiY3JsIiwgMHgwZCwgSU5TVFJfUklMX1JQIH0sCisJeyAiY2dybCIsIDB4MDgsIElOU1RSX1JJTF9SUCB9LAorCXsgImNnZnJsIiwgMHgwYywgSU5TVFJfUklMX1JQIH0sCisJeyAiY2hybCIsIDB4MDUsIElOU1RSX1JJTF9SUCB9LAorCXsgImNnaHJsIiwgMHgwNCwgSU5TVFJfUklMX1JQIH0sCisJeyAiY2xybCIsIDB4MGYsIElOU1RSX1JJTF9SUCB9LAorCXsgImNsZ3JsIiwgMHgwYSwgSU5TVFJfUklMX1JQIH0sCisJeyAiY2xnZnJsIiwgMHgwZSwgSU5TVFJfUklMX1JQIH0sCisJeyAiY2xocmwiLCAweDA3LCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJjbGdocmwiLCAweDA2LCBJTlNUUl9SSUxfUlAgfSwKKwl7ICJwZmRybCIsIDB4MDIsIElOU1RSX1JJTF9VUCB9LAorCXsgImV4cmwiLCAweDAwLCBJTlNUUl9SSUxfUlAgfSwKICNlbmRpZgogCXsgIiIsIDAsIElOU1RSX0lOVkFMSUQgfQogfTsKQEAgLTg0Miw2ICs5ODAsOCBAQAogc3RhdGljIHN0cnVjdCBpbnNuIG9wY29kZV9jOFtdID0gewogI2lmZGVmIENPTkZJR182NEJJVAogCXsgIm12Y29zIiwgMHgwMCwgSU5TVFJfU1NGX1JSRFJEIH0sCisJeyAiZWN0ZyIsIDB4MDEsIElOU1RSX1NTRl9SUkRSRCB9LAorCXsgImNzc3QiLCAweDAyLCBJTlNUUl9TU0ZfUlJEUkQgfSwKICNlbmRpZgogCXsgIiIsIDAsIElOU1RSX0lOVkFMSUQgfQogfTsKQEAgLTkxNyw2ICsxMDU3LDEyIEBACiAJeyAibGxnaCIsIDB4OTEsIElOU1RSX1JYWV9SUlJEIH0sCiAJeyAibGxjIiwgMHg5NCwgSU5TVFJfUlhZX1JSUkQgfSwKIAl7ICJsbGgiLCAweDk1LCBJTlNUUl9SWFlfUlJSRCB9LAorCXsgImNnaCIsIDB4MzQsIElOU1RSX1JYWV9SUlJEIH0sCisJeyAibGFleSIsIDB4NzUsIElOU1RSX1JYWV9SUlJEIH0sCisJeyAibHRnZiIsIDB4MzIsIElOU1RSX1JYWV9SUlJEIH0sCisJeyAibWZ5IiwgMHg1YywgSU5TVFJfUlhZX1JSUkQgfSwKKwl7ICJtaHkiLCAweDdjLCBJTlNUUl9SWFlfUlJSRCB9LAorCXsgInBmZCIsIDB4MzYsIElOU1RSX1JYWV9VUlJEIH0sCiAjZW5kaWYKIAl7ICJscnYiLCAweDFlLCBJTlNUUl9SWFlfUlJSRCB9LAogCXsgImxydmgiLCAweDFmLCBJTlNUUl9SWFlfUlJSRCB9LApAQCAtOTMxLDYgKzEwNzcsMTUgQEAKIHN0YXRpYyBzdHJ1Y3QgaW5zbiBvcGNvZGVfZTVbXSA9IHsKICNpZmRlZiBDT05GSUdfNjRCSVQKIAl7ICJzdHJhZyIsIDB4MDIsIElOU1RSX1NTRV9SRFJEIH0sCisJeyAiY2hoc2kiLCAweDU0LCBJTlNUUl9TSUxfUkRJIH0sCisJeyAiY2hzaSIsIDB4NWMsIElOU1RSX1NJTF9SREkgfSwKKwl7ICJjZ2hzaSIsIDB4NTgsIElOU1RSX1NJTF9SREkgfSwKKwl7ICJjbGhoc2kiLCAweDU1LCBJTlNUUl9TSUxfUkRVIH0sCisJeyAiY2xmaHNpIiwgMHg1ZCwgSU5TVFJfU0lMX1JEVSB9LAorCXsgImNsZ2hzaSIsIDB4NTksIElOU1RSX1NJTF9SRFUgfSwKKwl7ICJtdmhoaSIsIDB4NDQsIElOU1RSX1NJTF9SREkgfSwKKwl7ICJtdmhpIiwgMHg0YywgSU5TVFJfU0lMX1JESSB9LAorCXsgIm12Z2hpIiwgMHg0OCwgSU5TVFJfU0lMX1JESSB9LAogI2VuZGlmCiAJeyAibGFzcCIsIDB4MDAsIElOU1RSX1NTRV9SRFJEIH0sCiAJeyAidHByb3QiLCAweDAxLCBJTlNUUl9TU0VfUkRSRCB9LApAQCAtOTc3LDYgKzExMzIsMTEgQEAKIAl7ICJsbXkiLCAweDk4LCBJTlNUUl9SU1lfUlJSRCB9LAogCXsgImxhbXkiLCAweDlhLCBJTlNUUl9SU1lfQUFSRCB9LAogCXsgInN0YW15IiwgMHg5YiwgSU5TVFJfUlNZX0FBUkQgfSwKKwl7ICJhc2kiLCAweDZhLCBJTlNUUl9TSVlfSVJEIH0sCisJeyAiYWdzaSIsIDB4N2EsIElOU1RSX1NJWV9JUkQgfSwKKwl7ICJhbHNpIiwgMHg2ZSwgSU5TVFJfU0lZX0lSRCB9LAorCXsgImFsZ3NpIiwgMHg3ZSwgSU5TVFJfU0lZX0lSRCB9LAorCXsgImVjYWciLCAweDRjLCBJTlNUUl9SU1lfUlJSRCB9LAogI2VuZGlmCiAJeyAicmxsIiwgMHgxZCwgSU5TVFJfUlNZX1JSUkQgfSwKIAl7ICJtdmNsdSIsIDB4OGUsIElOU1RSX1JTWV9SUlJEIH0sCkBAIC05ODgsNiArMTE0OCwzMCBAQAogI2lmZGVmIENPTkZJR182NEJJVAogCXsgImJyeGhnIiwgMHg0NCwgSU5TVFJfUklFX1JSUCB9LAogCXsgImJyeGxnIiwgMHg0NSwgSU5TVFJfUklFX1JSUCB9LAorCXsgImNyYiIsIDB4ZjYsIElOU1RSX1JSU19SUlJEVSB9LAorCXsgImNncmIiLCAweGU0LCBJTlNUUl9SUlNfUlJSRFUgfSwKKwl7ICJjcmoiLCAweDc2LCBJTlNUUl9SSUVfUlJQVSB9LAorCXsgImNncmoiLCAweDY0LCBJTlNUUl9SSUVfUlJQVSB9LAorCXsgImNpYiIsIDB4ZmUsIElOU1RSX1JJU19SVVJESSB9LAorCXsgImNnaWIiLCAweGZjLCBJTlNUUl9SSVNfUlVSREkgfSwKKwl7ICJjaWoiLCAweDdlLCBJTlNUUl9SSUVfUlVQSSB9LAorCXsgImNnaWoiLCAweDdjLCBJTlNUUl9SSUVfUlVQSSB9LAorCXsgImNpdCIsIDB4NzIsIElOU1RSX1JJRV9SMElVIH0sCisJeyAiY2dpdCIsIDB4NzAsIElOU1RSX1JJRV9SMElVIH0sCisJeyAiY2xyYiIsIDB4ZjcsIElOU1RSX1JSU19SUlJEVSB9LAorCXsgImNsZ3JiIiwgMHhlNSwgSU5TVFJfUlJTX1JSUkRVIH0sCisJeyAiY2xyaiIsIDB4NzcsIElOU1RSX1JJRV9SUlBVIH0sCisJeyAiY2xncmoiLCAweDY1LCBJTlNUUl9SSUVfUlJQVSB9LAorCXsgImNsaWIiLCAweGZmLCBJTlNUUl9SSVNfUlVSRFUgfSwKKwl7ICJjbGdpYiIsIDB4ZmQsIElOU1RSX1JJU19SVVJEVSB9LAorCXsgImNsaWoiLCAweDdmLCBJTlNUUl9SSUVfUlVQVSB9LAorCXsgImNsZ2lqIiwgMHg3ZCwgSU5TVFJfUklFX1JVUFUgfSwKKwl7ICJjbGZpdCIsIDB4NzMsIElOU1RSX1JJRV9SMFVVIH0sCisJeyAiY2xnaXQiLCAweDcxLCBJTlNUUl9SSUVfUjBVVSB9LAorCXsgInJuc2JnIiwgMHg1NCwgSU5TVFJfUklFX1JSVVVVIH0sCisJeyAicnhzYmciLCAweDU3LCBJTlNUUl9SSUVfUlJVVVUgfSwKKwl7ICJyb3NiZyIsIDB4NTYsIElOU1RSX1JJRV9SUlVVVSB9LAorCXsgInJpc2JnIiwgMHg1NSwgSU5TVFJfUklFX1JSVVVVIH0sCiAjZW5kaWYKIAl7ICIiLCAwLCBJTlNUUl9JTlZBTElEIH0KIH07CkBAIC0xMDA0LDYgKzExODgsMTYgQEAKIAl7ICJsZHkiLCAweDY1LCBJTlNUUl9SWFlfRlJSRCB9LAogCXsgInN0ZXkiLCAweDY2LCBJTlNUUl9SWFlfRlJSRCB9LAogCXsgInN0ZHkiLCAweDY3LCBJTlNUUl9SWFlfRlJSRCB9LAorCXsgInNsZHQiLCAweDQwLCBJTlNUUl9SWEZfRlJSREYgfSwKKwl7ICJzbHh0IiwgMHg0OCwgSU5TVFJfUlhGX0ZSUkRGIH0sCisJeyAic3JkdCIsIDB4NDEsIElOU1RSX1JYRl9GUlJERiB9LAorCXsgInNyeHQiLCAweDQ5LCBJTlNUUl9SWEZfRlJSREYgfSwKKwl7ICJ0ZGNldCIsIDB4NTAsIElOU1RSX1JYRV9GUlJEIH0sCisJeyAidGRjZHQiLCAweDU0LCBJTlNUUl9SWEVfRlJSRCB9LAorCXsgInRkY3h0IiwgMHg1OCwgSU5TVFJfUlhFX0ZSUkQgfSwKKwl7ICJ0ZGdldCIsIDB4NTEsIElOU1RSX1JYRV9GUlJEIH0sCisJeyAidGRnZHQiLCAweDU1LCBJTlNUUl9SWEVfRlJSRCB9LAorCXsgInRkZ3h0IiwgMHg1OSwgSU5TVFJfUlhFX0ZSUkQgfSwKICNlbmRpZgogCXsgImxkZWIiLCAweDA0LCBJTlNUUl9SWEVfRlJSRCB9LAogCXsgImx4ZGIiLCAweDA1LCBJTlNUUl9SWEVfRlJSRCB9LApAQCAtMTAzNyw2ICsxMjMxLDcgQEAKIAl7ICJtYWUiLCAweDJlLCBJTlNUUl9SWEZfRlJSREYgfSwKIAl7ICJtc2UiLCAweDJmLCBJTlNUUl9SWEZfRlJSREYgfSwKIAl7ICJzcWUiLCAweDM0LCBJTlNUUl9SWEVfRlJSRCB9LAorCXsgInNxZCIsIDB4MzUsIElOU1RSX1JYRV9GUlJEIH0sCiAJeyAibWVlIiwgMHgzNywgSU5TVFJfUlhFX0ZSUkQgfSwKIAl7ICJtYWQiLCAweDNlLCBJTlNUUl9SWEZfRlJSREYgfSwKIAl7ICJtc2QiLCAweDNmLCBJTlNUUl9SWEZfRlJSREYgfSwKQEAgLTExMTcsNiArMTMxMiwxMiBAQAogCWNhc2UgMHhjMjoKIAkJdGFibGUgPSBvcGNvZGVfYzI7CiAJCWJyZWFrOworCWNhc2UgMHhjNDoKKwkJdGFibGUgPSBvcGNvZGVfYzQ7CisJCWJyZWFrOworCWNhc2UgMHhjNjoKKwkJdGFibGUgPSBvcGNvZGVfYzY7CisJCWJyZWFrOwogCWNhc2UgMHhjODoKIAkJdGFibGUgPSBvcGNvZGVfYzg7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCmluZGV4IGU0OWU5ZTAuLjMxZDYxOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKQEAgLTIxNCwxMCArMjE0LDEzIEBACiAKIHN0YXRpYyBub2lubGluZSBfX2luaXQgdm9pZCBkZXRlY3RfbWFjaGluZV90eXBlKHZvaWQpCiB7Ci0JLyogTm8gVk0gaW5mb3JtYXRpb24/IExvb2tzIGxpa2UgTFBBUiAqLwotCWlmIChzdHNpKCZ2bW1zLCAzLCAyLCAyKSA9PSAtRU5PU1lTKQorCS8qIENoZWNrIGN1cnJlbnQtY29uZmlndXJhdGlvbi1sZXZlbCAqLworCWlmICgoc3RzaShOVUxMLCAwLCAwLCAwKSA+PiAyOCkgPD0gMikgeworCQlTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFncyB8PSBNQUNISU5FX0ZMQUdfTFBBUjsKIAkJcmV0dXJuOwotCWlmICghdm1tcy5jb3VudCkKKwl9CisJLyogR2V0IHZpcnR1YWwtbWFjaGluZSBjcHUgaW5mb3JtYXRpb24uICovCisJaWYgKHN0c2koJnZtbXMsIDMsIDIsIDIpID09IC1FTk9TWVMgfHwgIXZtbXMuY291bnQpCiAJCXJldHVybjsKIAogCS8qIFJ1bm5pbmcgdW5kZXIgS1ZNPyBJZiBub3Qgd2UgYXNzdW1lIHovVk0gKi8KQEAgLTQwMiw4ICs0MDUsMTkgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHNldHVwX2Jvb3RfY29tbWFuZF9saW5lKHZvaWQpCiB7CisJaW50IGk7CisKKwkvKiBjb252ZXJ0IGFyY2ggY29tbWFuZCBsaW5lIHRvIGFzY2lpICovCisJZm9yIChpID0gMDsgaSA8IEFSQ0hfQ09NTUFORF9MSU5FX1NJWkU7IGkrKykKKwkJaWYgKENPTU1BTkRfTElORVtpXSAmIDB4ODApCisJCQlicmVhazsKKwlpZiAoaSA8IEFSQ0hfQ09NTUFORF9MSU5FX1NJWkUpCisJCUVCQ0FTQyhDT01NQU5EX0xJTkUsIEFSQ0hfQ09NTUFORF9MSU5FX1NJWkUpOworCUNPTU1BTkRfTElORVtBUkNIX0NPTU1BTkRfTElORV9TSVpFLTFdID0gMDsKKwogCS8qIGNvcHkgYXJjaCBjb21tYW5kIGxpbmUgKi8KLQlzdHJsY3B5KGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkUsIEFSQ0hfQ09NTUFORF9MSU5FX1NJWkUpOworCXN0cmxjcHkoYm9vdF9jb21tYW5kX2xpbmUsIHN0cnN0cmlwKENPTU1BTkRfTElORSksCisJCUFSQ0hfQ09NTUFORF9MSU5FX1NJWkUpOwogCiAJLyogYXBwZW5kIElQTCBQQVJNIGRhdGEgdG8gdGhlIGJvb3QgY29tbWFuZCBsaW5lICovCiAJaWYgKE1BQ0hJTkVfSVNfVk0pCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKaW5kZXggZThlZjIxYy4uNDM0OGY5YiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+Ci0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCmluZGV4IGYzMzY1OGYuLjI5ZmQwZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCkBAIC05LDExICs5LDkgQEAKICAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+Ci0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYwppbmRleCA1YTgyYmM2Li42YTgzZDA1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPHRyYWNlL3N5c2NhbGwuaD4KLSNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAKQEAgLTIwMCwxMyArMjAwLDMgQEAKIAlyZXR1cm4gcGFyZW50OwogfQogI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi8KLQotI2lmZGVmIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMKLQotZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNfY2FsbF90YWJsZVtdOwotCi11bnNpZ25lZCBsb25nIF9faW5pdCBhcmNoX3N5c2NhbGxfYWRkcihpbnQgbnIpCi17Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nKXN5c19jYWxsX3RhYmxlW25yXTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQuUwppbmRleCBjNTJiNGY3Li5jYTRhNjJiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTksMjAwOQorICogQ29weXJpZ2h0IElCTSBDb3JwLiAxOTk5LDIwMTAKICAqCiAgKiAgICBBdXRob3Iocyk6IEhhcnRtdXQgUGVubmVyIDxocEBkZS5pYm0uY29tPgogICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CkBAIC0yMiwxMiArMjIsOSBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9jcHUuaD4KIAogI2lmZGVmIENPTkZJR182NEJJVAogI2RlZmluZSBBUkNIX09GRlNFVAk0CkBAIC0yODgsMTkgKzI4NSw3IEBACiAJYnoJLkxhZ2FpbjEJCSMgc2tpcCBkYXRlc2V0IHRyYWlsZXIKIAlsYQklcjUsMCglcjQsJXIyKQogCWxyCSVyMywlcjIKLS5MaWRlYmM6Ci0JdG0JMCglcjUpLDB4ODAJCSMgaGlnaCBvcmRlciBiaXQgc2V0ID8KLQlibwkuTGRvY3YJCQkjICB5ZXMgLT4gY29udmVydCBmcm9tIEVCQ0RJQwotCWFoaQklcjUsLTEKLQliY3QJJXIzLC5MaWRlYmMKLQliCS5Mbm9jdgotLkxkb2N2OgotCWwJJXIzLC5MY3Z0YWIKLQl0cgkwKDI1NiwlcjQpLDAoJXIzKQkjIGNvbnZlcnQgcGFyYW1ldGVycyB0byBhc2NpaQotCXRyCTI1NigyNTYsJXI0KSwwKCVyMykKLQl0cgk1MTIoMjU2LCVyNCksMCglcjMpCi0JdHIJNzY4KDEyMiwlcjQpLDAoJXIzKQotLkxub2N2OiBsYQklcjMsQ09NTUFORF9MSU5FLVBBUk1BUkVBKCVyMTIpICMgbG9hZCBhZHIuIG9mIGNvbW1hbmQgbGluZQorCWxhCSVyMyxDT01NQU5EX0xJTkUtUEFSTUFSRUEoJXIxMikgIyBsb2FkIGFkci4gb2YgY29tbWFuZCBsaW5lCiAJbXZjCTAoMjU2LCVyMyksMCglcjQpCiAJbXZjCTI1NigyNTYsJXIzKSwyNTYoJXI0KQogCW12Ywk1MTIoMjU2LCVyMyksNTEyKCVyNCkKQEAgLTM4NCw3ICszNjksNiBAQAogLkxpbml0cmQ6LmxvbmcgX2VuZCArIDB4NDAwMDAwCQkjIGRlZmF1bHQgYWRkcmVzcyBvZiBpbml0cmQKIC5McGFybToJLmxvbmcgIFBBUk1BUkVBCiAuTHN0YXJ0dXA6IC5sb25nIHN0YXJ0dXAKLS5MY3Z0YWI6LmxvbmcJX2ViY2FzYyAJCSMgZWJjZGljIHRvIGFzY2lpIHRhYmxlCiAuTHJlc2V0Oi5ieXRlCTB4YzMsMHhjOCwweGMxLDB4ZDUsMHhjNywweGM1LDB4NDAsMHhkOSwweGM0LDB4ZDksMHg0MAogCS5ieXRlCTB4YzEsMHhkMywweGQzLDB4NDAsMHhkMiwweGM1LDB4YzUsMHhkNywweDQwLDB4ZDUsMHhkNgogCS5ieXRlCTB4YzgsMHhkNiwweGQzLDB4YzQJIyAiY2hhbmdlIHJkciBhbGwga2VlcCBub2hvbGQiCkBAIC00MTcsMTMgKzQwMSwxMCBAQAogLnNrOHg4OgogCW12YwkwKDI0MCwlcjgpLDAoJXI5KQkjIGNvcHkgaXBscGFybXMgaW50byBidWZmZXIKIC5nb3RyOgotCWwJJXIxMCwudGJsCQkjIEVCQ0RJQyB0byBBU0NJSSB0YWJsZQotCXRyCTAoMjQwLCVyOCksMCglcjEwKQogCXNscgklcjAsJXIwCiAJc3QJJXIwLElOSVRSRF9TSVpFK0FSQ0hfT0ZGU0VULVBBUk1BUkVBKCVyMTEpCiAJc3QJJXIwLElOSVRSRF9TVEFSVCtBUkNIX09GRlNFVC1QQVJNQVJFQSglcjExKQogCWoJc3RhcnR1cCAJCSMgY29udGludWUgd2l0aCBzdGFydHVwCi0udGJsOgkubG9uZwlfZWJjYXNjCQkJIyB0cmFuc2xhdGUgdGFibGUKIC5jbWQ6CS5sb25nCUNPTU1BTkRfTElORQkJIyBhZGRyZXNzIG9mIGNvbW1hbmQgbGluZSBidWZmZXIKIC5wYXJtOgkubG9uZwlQQVJNQVJFQQogLmxvd2Nhc2U6CkBAIC00NjcsMTYgKzQ0OCwxNSBAQAogIyBvciBsaW5sb2FkIG9yIFNBTElQTAogIwogCS5vcmcJMHgxMDAwMAotc3RhcnR1cDpiYXNyCSVyMTMsMAkJCSMgZ2V0IGJhc2UKKwkuZ2xvYmwJc3RhcnR1cAorc3RhcnR1cDoKKwliYXNyCSVyMTMsMAkJCSMgZ2V0IGJhc2UKIC5MUEcwOgogCXhjCTB4MjAwKDI1NiksMHgyMDAJIyBwYXJ0aWFsbHkgY2xlYXIgbG93Y29yZQogCXhjCTB4MzAwKDI1NiksMHgzMDAKLQlsCSVyMSw1Zi0uTFBHMCglcjEzKQotCXN0Y2sJMCglcjEpCi0Jc3B0CTZmLS5MUEcwKCVyMTMpCi0JbXZjCV9fTENfTEFTVF9VUERBVEVfQ0xPQ0soOCksMCglcjEpCi0JbXZjCV9fTENfTEFTVF9VUERBVEVfVElNRVIoOCksNmYtLkxQRzAoJXIxMykKLQltdmMJX19MQ19FWElUX1RJTUVSKDgpLDVmLS5MUEcwKCVyMTMpCisJc3RjawlfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCisJc3B0CTVmLS5MUEcwKCVyMTMpCisJbXZjCV9fTENfTEFTVF9VUERBVEVfVElNRVIoOCksNWYtLkxQRzAoJXIxMykKICNpZm5kZWYgQ09ORklHX01BUkNIX0c1CiAJIyBjaGVjayBjYXBhYmlsaXRpZXMgYWdhaW5zdCBNQVJDSF97RzUsWjkwMCxaOTkwLFo5XzEwOSxaMTB9CiAJeGMJX19MQ19TVEZMX0ZBQ19MSVNUKDgpLF9fTENfU1RGTF9GQUNfTElTVApAQCAtNDk0LDcgKzQ3NCw2IEBACiAJY2wJJXIwLDJmKzEyLS5MUEcwKCVyMTMpCiAJamUJM2YKIDE6CWwJJXIxNSwuTHN0YWNrLS5MUEcwKCVyMTMpCi0JYWhpCSVyMTUsMTw8KFBBR0VfU0hJRlQrVEhSRUFEX09SREVSKSAjIGluaXRfdGFza191bmlvbitUSFJFQURfU0laRQogCWFoaQklcjE1LC05NgogCWxhCSVyMiwuTGFsc19zdHJpbmctLkxQRzAoJXIxMykKIAlsCSVyMywuTHNjbHBfcHJpbnQtLkxQRzAoJXIxMykKQEAgLTUwNSw3ICs0ODQsNyBAQAogLkxzY2xwX3ByaW50OgogCS5sb25nCV9zY2xwX3ByaW50X2Vhcmx5CiAuTHN0YWNrOgotCS5sb25nCWluaXRfdGhyZWFkX3VuaW9uCisJLmxvbmcJMHg4MDAwICsgKDE8PChQQUdFX1NISUZUK1RIUkVBRF9PUkRFUikpCiAJLmFsaWduIDE2CiAyOgkubG9uZwkweDAwMGEwMDAwLDB4OGJhZGNjY2MKICNpZiBkZWZpbmVkKENPTkZJR182NEJJVCkKQEAgLTUzMiwxMyArNTExLDIyIEBACiAzOgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfNjRCSVQKKwltdmkJX19MQ19BUl9NT0RFX0lELDEJIyBzZXQgZXNhbWUgZmxhZworCXNscgklcjAsJXIwIAkJIyBzZXQgY3B1aWQgdG8gemVybworCWxoaQklcjEsMgkJCSMgbW9kZSAyID0gZXNhbWUgKGR1bXApCisJc2lncAklcjEsJXIwLDB4MTIJCSMgc3dpdGNoIHRvIGVzYW1lIG1vZGUKKwlzYW02NAkJCQkjIHN3aXRjaCB0byA2NCBiaXQgbW9kZQorCWpnCXN0YXJ0dXBfY29udGludWUKKyNlbHNlCisJbXZpCV9fTENfQVJfTU9ERV9JRCwwCSMgc2V0IEVTQSBmbGFnIChtb2RlIDApCiAJbAklcjEzLDRmLS5MUEcwKCVyMTMpCiAJYgkwKCVyMTMpCi0JLmFsaWduCTQKLTQ6CS5sb25nCXN0YXJ0dXBfY29udGludWUKLTU6CS5sb25nCXNjaGVkX2Nsb2NrX2Jhc2VfY2MKIAkuYWxpZ24JOAotNjoJLmxvbmcJMHg3ZmZmZmZmZiwweGZmZmZmZmZmCis0OgkubG9uZwlzdGFydHVwX2NvbnRpbnVlCisjZW5kaWYKKwkuYWxpZ24JOAorNToJLmxvbmcJMHg3ZmZmZmZmZiwweGZmZmZmZmZmCiAKICMKICMgcGFyYW1zIGF0IDEwNDAwIChzZXR1cC5oKQpAQCAtNTUyLDggKzU0MCw0IEBACiAJLmJ5dGUJInJvb3Q9L2Rldi9yYW0wIHJvIgogCS5ieXRlCTAKIAotI2lmZGVmIENPTkZJR182NEJJVAotI2luY2x1ZGUgImhlYWQ2NC5TIgotI2Vsc2UKLSNpbmNsdWRlICJoZWFkMzEuUyIKLSNlbmRpZgorCS5vcmcJMHgxMTAwMApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKaW5kZXggNjAyYjUwOC4uMWJiY2M0OSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGFyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAyMDA1LDIwMDYKKyAqIENvcHlyaWdodCAoQykgSUJNIENvcnAuIDIwMDUsMjAxMAogICoKICAqICAgQXV0aG9yKHMpOglIYXJ0bXV0IFBlbm5lciA8aHBAZGUuaWJtLmNvbT4KICAqCQlNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CkBAIC0xMCwxMyArMTAsMTkgQEAKICAqCiAgKi8KIAotCS5vcmcJMHgxMTAwMAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCitfX0hFQUQKKwkuZ2xvYmwJc3RhcnR1cF9jb250aW51ZQogc3RhcnR1cF9jb250aW51ZToKIAliYXNyCSVyMTMsMAkJCSMgZ2V0IGJhc2UKIC5MUEcxOgogCi0JbXZpCV9fTENfQVJfTU9ERV9JRCwwCSMgc2V0IEVTQSBmbGFnIChtb2RlIDApCisJbAklcjEsLkxiYXNlX2NjLS5MUEcxKCVyMTMpCisJbXZjCTAoOCwlcjEpLF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sKIAlsY3RsCSVjMCwlYzE1LC5MY3RsLS5MUEcxKCVyMTMpICMgbG9hZCBjb250cm9sIHJlZ2lzdGVycwogCWwJJXIxMiwuTHBhcm1hZGRyLS5MUEcxKCVyMTMpICMgcG9pbnRlciB0byBwYXJhbWV0ZXIgYXJlYQogCQkJCQkjIG1vdmUgSVBMIGRldmljZSB0byBsb3djb3JlCkBAIC02OSwxMCArNzUsMTIgQEAKIC5MZHVhbGQ6LnJlcHQJOAogCS5sb25nCTB4ODAwMDAwMDAsMCwwLDAJIyBpbnZhbGlkIGFjY2Vzcy1saXN0IGVudHJpZXMKIAkuZW5kcgorLkxiYXNlX2NjOgorCS5sb25nCXNjaGVkX2Nsb2NrX2Jhc2VfY2MKIAotCS5vcmcJMHgxMjAwMAogCS5nbG9ibAlfZWhlYWQKIF9laGVhZDoKKwogI2lmZGVmIENPTkZJR19TSEFSRURfS0VSTkVMCiAJLm9yZwkweDEwMDAwMAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUwppbmRleCBkOTg0YTJhLi4zOTU4MGU3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKQEAgLTEsNyArMSw3IEBACiAvKgogICogYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUwogICoKLSAqIENvcHlyaWdodCAoQykgSUJNIENvcnAuIDE5OTksMjAwNgorICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycC4gMTk5OSwyMDEwCiAgKgogICogICBBdXRob3Iocyk6CUhhcnRtdXQgUGVubmVyIDxocEBkZS5pYm0uY29tPgogICoJCU1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KQEAgLTEwLDgwICsxMCwxNyBAQAogICoKICAqLwogCi0JLm9yZwkweDExMDAwCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKK19fSEVBRAorCS5nbG9ibAlzdGFydHVwX2NvbnRpbnVlCiBzdGFydHVwX2NvbnRpbnVlOgotCWJhc3IJJXIxMywwCQkJIyBnZXQgYmFzZQotLkxQRzE6CXNsbAklcjEzLDEJCQkjIHJlbW92ZSBoaWdoIG9yZGVyIGJpdAotCXNybAklcjEzLDEKLQotI2lmZGVmIENPTkZJR19aRkNQRFVNUAotCi0JIyBjaGVjayBpZiB3ZSBoYXZlIGJlZW4gaXBsZWQgdXNpbmcgemZjcCBkdW1wOgotCi0JdG0JMHhiOSwweDAxCQkjIHRlc3QgaWYgc3ViY2hhbm5lbCBpcyBlbmFibGVkCi0Jam5vCS5ub2R1bXAJCQkjIHN1YmNoYW5uZWwgZGlzYWJsZWQKLQlsCSVyMSwweGI4Ci0JbGEJJXI1LC5MaXBsX3NjaGliLS5MUEcxKCVyMTMpCi0Jc3RzY2gJMCglcjUpCQkJIyBnZXQgc2NoaWIgb2Ygc3ViY2hhbm5lbAotCWpuZQkubm9kdW1wCQkJIyBzY2hpYiBub3QgYXZhaWxhYmxlCi0JdG0JNSglcjUpLDB4MDEJCSMgZGV2bm8gdmFsaWQ/Ci0Jam5vCS5ub2R1bXAKLQl0bQk0KCVyNSksMHg4MAkJIyBxZGlvIGNhcGFibGUgZGV2aWNlPwotCWpubwkubm9kdW1wCi0JbAklcjIsMjAoJXIwKQkJIyBhZGRyZXNzIG9mIGlwbCBwYXJhbWV0ZXIgYmxvY2sKLQlsaGkJJXIzLDAKLQlpYwklcjMsMHgxNDgoJXIyKQkJIyBnZXQgb3B0IGZpZWxkCi0JY2hpCSVyMywweDIwCQkjIGxvYWQgd2l0aCBkdW1wPwotCWpuZQkubm9kdW1wCi0KLQkjIHN0b3JlIGFsbCBwcmVmaXggcmVnaXN0ZXJzIGluIGNhc2Ugb2YgbG9hZCB3aXRoIGR1bXA6Ci0KLQlsYQklcjcsMAkJCSMgYmFzZSByZWdpc3RlciBmb3IgMCBwYWdlCi0JbGEJJXI4LDAJCQkjIGZpcnN0IGNwdQotCWwJJXIxMSwuTHByZWZfYXJyX3B0ci0uTFBHMSglcjEzKQkjIGFkZHJlc3Mgb2YgcHJlZml4IGFycmF5Ci0JYWhpCSVyMTEsNAkJCSMgc2tpcCBib290IGNwdQotCWxyCSVyMTIsJXIxMQotCWFoaQklcjEyLChDT05GSUdfTlJfQ1BVUyo0KQkjIGVuZCBvZiBwcmVmaXggYXJyYXkKLQlzdGFwCS5MY3VycmVudF9jcHUrMi0uTFBHMSglcjEzKQkjIHN0b3JlIGN1cnJlbnQgY3B1IGFkZHIKLTE6Ci0JY2wJJXI4LC5MY3VycmVudF9jcHUtLkxQRzEoJXIxMykJIyBpcyBpcGwgY3B1ID8KLQlqZQk0ZgkJCQkjIGlmIHllcyBnZXQgbmV4dCBjcHUKLTI6Ci0JbHIJJXI5LCVyNwotCXNpZ3AJJXI5LCVyOCwweDkJCSMgc3RvcCAmIHN0b3JlIHN0YXR1cyBvZiBjcHUKLQlicmMJOCwzZgkJCSMgYWNjZXB0ZWQKLQlicmMJNCw0ZgkJCSMgc3RhdHVzIHN0b3JlZDogbmV4dCBjcHUKLQlicmMJMiwyYgkJCSMgYnVzeTogCSB0cnkgYWdhaW4KLQlicmMJMSw0ZgkJCSMgbm90IG9wOgkgbmV4dCBjcHUKLTM6Ci0JbXZjCTAoNCwlcjExKSwyNjQoJXI3KQkjIGNvcHkgcHJlZml4IHJlZ2lzdGVyIHRvIHByZWZpeCBhcnJheQotCWFoaQklcjExLDQJCQkjIG5leHQgZWxlbWVudCBpbiBwcmVmaXggYXJyYXkKLQljbHIJJXIxMSwlcjEyCi0JamUJNWYJCQkjIG5vIG1vcmUgc3BhY2UgaW4gcHJlZml4IGFycmF5Ci00OgotCWFoaQklcjgsMQkJCSMgbmV4dCBjcHUgKHI4ICs9IDEpCi0JY2hpCSVyOCxNQVhfQ1BVX0FERFJFU1MJIyBpcyBsYXN0IHBvc3NpYmxlIGNwdSA/Ci0JamxlCTFiCQkJIyBqdW1wIGlmIG5vdCBsYXN0IGNwdQotNToKLQlsaGkJJXIxLDIJCQkjIG1vZGUgMiA9IGVzYW1lIChkdW1wKQotCWoJNmYKLQkuYWxpZ24gNAotLkxpcGxfc2NoaWI6Ci0JLnJlcHQgMTMKLQkubG9uZyAwCi0JLmVuZHIKLS5ub2R1bXA6Ci0JbGhpCSVyMSwxCQkJIyBtb2RlIDEgPSBlc2FtZSAobm9ybWFsIGlwbCkKLTY6Ci0jZWxzZQotCWxoaQklcjEsMQkJCSMgbW9kZSAxID0gZXNhbWUgKG5vcm1hbCBpcGwpCi0jZW5kaWYgLyogQ09ORklHX1pGQ1BEVU1QICovCi0JbXZpCV9fTENfQVJfTU9ERV9JRCwxCSMgc2V0IGVzYW1lIGZsYWcKLQlzbHIJJXIwLCVyMCAJCSMgc2V0IGNwdWlkIHRvIHplcm8KLQlzaWdwCSVyMSwlcjAsMHgxMgkJIyBzd2l0Y2ggdG8gZXNhbWUgbW9kZQotCXNhbTY0CQkJCSMgc3dpdGNoIHRvIDY0IGJpdCBtb2RlCi0JbGxnZnIJJXIxMywlcjEzCQkjIGNsZWFyIGhpZ2gtb3JkZXIgaGFsZiBvZiBiYXNlIHJlZworCWxhcmwJJXIxLHNjaGVkX2Nsb2NrX2Jhc2VfY2MKKwltdmMJMCg4LCVyMSksX19MQ19MQVNUX1VQREFURV9DTE9DSworCWxhcmwJJXIxMywuTFBHMQkJIyBnZXQgYmFzZQogCWxtaAklcjAsJXIxNSwuTHplcm82NC0uTFBHMSglcjEzKQkjIGNsZWFyIGhpZ2gtb3JkZXIgaGFsZgogCWxjdGxnCSVjMCwlYzE1LC5MY3RsLS5MUEcxKCVyMTMpCSMgbG9hZCBjb250cm9sIHJlZ2lzdGVycwogCWxnCSVyMTIsLkxwYXJtYWRkci0uTFBHMSglcjEzKQkjIHBvaW50ZXIgdG8gcGFyYW1ldGVyIGFyZWEKQEAgLTEwOCw2ICs0NSw3IEBACiAJbHBzd2UJLkxlbnRyeS0uTFBHMSgxMykJIyBqdW1wIHRvIF9zdGV4dCBpbiBwcmltYXJ5LXNwYWNlLAogCQkJCQkjIHZpcnR1YWwgYW5kIG5ldmVyIHJldHVybiAuLi4KIAkuYWxpZ24JMTYKKy5MUEcxOgogLkxlbnRyeToucXVhZAkweDAwMDAwMDAxODAwMDAwMDAsX3N0ZXh0CiAuTGN0bDoJLnF1YWQJMHgwNDM1MDAwMgkJIyBjcjA6IHZhcmlvdXMgdGhpbmdzCiAJLnF1YWQJMAkJCSMgY3IxOiBwcmltYXJ5IHNwYWNlIHNlZ21lbnQgdGFibGUKQEAgLTEzMCwxMiArNjgsNiBAQAogLkxzY2FuMmc6LnF1YWQJMHg4MDAwMDAwMCArIDB4MjAwMDAgLSA4CSMgMkdCICsgMTI4SyAtIDgKIC5Mbm9wOgkubG9uZwkweDA3MDAwNzAwCiAuTHplcm82NDouZmlsbAkxNiw0LDB4MAotI2lmZGVmIENPTkZJR19aRkNQRFVNUAotLkxjdXJyZW50X2NwdToKLQkubG9uZyAweDAKLS5McHJlZl9hcnJfcHRyOgotCS5sb25nIHpmY3BkdW1wX3ByZWZpeF9hcnJheQotI2VuZGlmIC8qIENPTkZJR19aRkNQRFVNUCAqLwogLkxwYXJtYWRkcjoKIAkucXVhZAlQQVJNQVJFQQogCS5hbGlnbgk2NApAQCAtMTQ2LDkgKzc4LDkgQEAKIAkubG9uZwkweDgwMDAwMDAwLDAsMCwwCSMgaW52YWxpZCBhY2Nlc3MtbGlzdCBlbnRyaWVzCiAJLmVuZHIKIAotCS5vcmcJMHgxMjAwMAogCS5nbG9ibAlfZWhlYWQKIF9laGVhZDoKKwogI2lmZGVmIENPTkZJR19TSEFSRURfS0VSTkVMCiAJLm9yZwkweDEwMDAwMAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2lwbC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwppbmRleCA0ZDczMjk2Li43ZWVkYmJjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2lwbC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKQEAgLTU1Myw3ICs1NTMsNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQgaXBsX3J1bihzdHJ1Y3Qgc2h1dGRvd25fdHJpZ2dlciAqdHJpZ2dlcikKK3N0YXRpYyB2b2lkIF9faXBsX3J1bih2b2lkICp1bnVzZWQpCiB7CiAJZGlhZzMwOChESUFHMzA4X0lQTCwgTlVMTCk7CiAJaWYgKE1BQ0hJTkVfSVNfVk0pCkBAIC01NjIsNiArNTYyLDExIEBACiAJCXJlaXBsX2Njd19kZXYoJmlwbF9pbmZvLmRhdGEuY2N3LmRldl9pZCk7CiB9CiAKK3N0YXRpYyB2b2lkIGlwbF9ydW4oc3RydWN0IHNodXRkb3duX3RyaWdnZXIgKnRyaWdnZXIpCit7CisJc21wX3N3aXRjaF90b19pcGxfY3B1KF9faXBsX3J1biwgTlVMTCk7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGlwbF9pbml0KHZvaWQpCiB7CiAJaW50IHJjOwpAQCAtMTAzOSw3ICsxMDQ0LDcgQEAKIAkJc3ByaW50Zihkc3QgKyBwb3MsICIgUEFSTSAlcyIsIHZtcGFybSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlaXBsX3J1bihzdHJ1Y3Qgc2h1dGRvd25fdHJpZ2dlciAqdHJpZ2dlcikKK3N0YXRpYyB2b2lkIF9fcmVpcGxfcnVuKHZvaWQgKnVudXNlZCkKIHsKIAlzdHJ1Y3QgY2N3X2Rldl9pZCBkZXZpZDsKIAlzdGF0aWMgY2hhciBidWZbMTI4XTsKQEAgLTEwODcsNiArMTA5MiwxMSBAQAogCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKK3N0YXRpYyB2b2lkIHJlaXBsX3J1bihzdHJ1Y3Qgc2h1dGRvd25fdHJpZ2dlciAqdHJpZ2dlcikKK3sKKwlzbXBfc3dpdGNoX3RvX2lwbF9jcHUoX19yZWlwbF9ydW4sIE5VTEwpOworfQorCiBzdGF0aWMgdm9pZCByZWlwbF9ibG9ja19jY3dfaW5pdChzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqaXBiKQogewogCWlwYi0+aGRyLmxlbiA9IElQTF9QQVJNX0JMS19DQ1dfTEVOOwpAQCAtMTM2OSwyMCArMTM3OSwxOCBAQAogCiBzdGF0aWMgc3RydWN0IGtzZXQgKmR1bXBfa3NldDsKIAotc3RhdGljIHZvaWQgZHVtcF9ydW4oc3RydWN0IHNodXRkb3duX3RyaWdnZXIgKnRyaWdnZXIpCitzdGF0aWMgdm9pZCBfX2R1bXBfcnVuKHZvaWQgKnVudXNlZCkKIHsKIAlzdHJ1Y3QgY2N3X2Rldl9pZCBkZXZpZDsKIAlzdGF0aWMgY2hhciBidWZbMTAwXTsKIAogCXN3aXRjaCAoZHVtcF9tZXRob2QpIHsKIAljYXNlIERVTVBfTUVUSE9EX0NDV19DSU86Ci0JCXNtcF9zZW5kX3N0b3AoKTsKIAkJZGV2aWQuZGV2bm8gPSBkdW1wX2Jsb2NrX2Njdy0+aXBsX2luZm8uY2N3LmRldm5vOwogCQlkZXZpZC5zc2lkICA9IDA7CiAJCXJlaXBsX2Njd19kZXYoJmRldmlkKTsKIAkJYnJlYWs7CiAJY2FzZSBEVU1QX01FVEhPRF9DQ1dfVk06Ci0JCXNtcF9zZW5kX3N0b3AoKTsKIAkJc3ByaW50ZihidWYsICJTVE9SRSBTVEFUVVMiKTsKIAkJX19jcGNtZChidWYsIE5VTEwsIDAsIE5VTEwpOwogCQlzcHJpbnRmKGJ1ZiwgIklQTCAlWCIsIGR1bXBfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cuZGV2bm8pOwpAQCAtMTM5NiwxMCArMTQwNCwxNyBAQAogCQlkaWFnMzA4KERJQUczMDhfU0VULCBkdW1wX2Jsb2NrX2ZjcCk7CiAJCWRpYWczMDgoRElBRzMwOF9EVU1QLCBOVUxMKTsKIAkJYnJlYWs7Ci0JY2FzZSBEVU1QX01FVEhPRF9OT05FOgotCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQotCXByaW50ayhLRVJOX0VNRVJHICJEdW1wIGZhaWxlZCFcbiIpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX3J1bihzdHJ1Y3Qgc2h1dGRvd25fdHJpZ2dlciAqdHJpZ2dlcikKK3sKKwlpZiAoZHVtcF9tZXRob2QgPT0gRFVNUF9NRVRIT0RfTk9ORSkKKwkJcmV0dXJuOworCXNtcF9zZW5kX3N0b3AoKTsKKwlzbXBfc3dpdGNoX3RvX2lwbF9jcHUoX19kdW1wX3J1biwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGR1bXBfY2N3X2luaXQodm9pZCkKQEAgLTE1NzcsNyArMTU5Miw3IEBACiBzdGF0aWMgaW50IHZtY21kX2luaXQodm9pZCkKIHsKIAlpZiAoIU1BQ0hJTkVfSVNfVk0pCi0JCXJldHVybiAtRU5PVFNVUFA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl2bWNtZF9rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZCgidm1jbWQiLCBOVUxMLCBmaXJtd2FyZV9rb2JqKTsKIAlpZiAoIXZtY21kX2tzZXQpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTU5NSw3ICsxNjEwLDcgQEAKIHsKIAlpZiAoc3RyY21wKHRyaWdnZXItPm5hbWUsIE9OX1BBTklDX1NUUikgPT0gMCkKIAkJZGlzYWJsZWRfd2FpdCgodW5zaWduZWQgbG9uZykgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKLQl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCkgPT0gc2lncF9idXN5KQorCXdoaWxlIChzaWdwKHNtcF9wcm9jZXNzb3JfaWQoKSwgc2lncF9zdG9wKSA9PSBzaWdwX2J1c3kpCiAJCWNwdV9yZWxheCgpOwogCWZvciAoOzspOwogfQpAQCAtMTkwMiw3ICsxOTE3LDYgQEAKIHZvaWQgX19pbml0IGlwbF9zYXZlX3BhcmFtZXRlcnModm9pZCkKIHsKIAlzdHJ1Y3QgY2lvX2lwbGluZm8gaXBsaW5mbzsKLQl1bnNpZ25lZCBpbnQgKmlwbF9wdHI7CiAJdm9pZCAqc3JjLCAqZHN0OwogCiAJaWYgKGNpb19nZXRfaXBsaW5mbygmaXBsaW5mbykpCkBAIC0xOTEzLDExICsxOTI3LDEwIEBACiAJaWYgKCFpcGxpbmZvLmlzX3FkaW8pCiAJCXJldHVybjsKIAlpcGxfZmxhZ3MgfD0gSVBMX1BBUk1CTE9DS19WQUxJRDsKLQlpcGxfcHRyID0gKHVuc2lnbmVkIGludCAqKV9fTENfSVBMX1BBUk1CTE9DS19QVFI7Ci0Jc3JjID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykqaXBsX3B0cjsKKwlzcmMgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKVMzOTBfbG93Y29yZS5pcGxfcGFybWJsb2NrX3B0cjsKIAlkc3QgPSAodm9pZCAqKUlQTF9QQVJNQkxPQ0tfT1JJR0lOOwogCW1lbW1vdmUoZHN0LCBzcmMsIFBBR0VfU0laRSk7Ci0JKmlwbF9wdHIgPSBJUExfUEFSTUJMT0NLX09SSUdJTjsKKwlTMzkwX2xvd2NvcmUuaXBsX3Bhcm1ibG9ja19wdHIgPSBJUExfUEFSTUJMT0NLX09SSUdJTjsKIH0KIAogc3RhdGljIExJU1RfSEVBRChyY2FsbCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL21hY2hpbmVfa2V4ZWMuYyBiL2FyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCmluZGV4IDEzMWQ3ZWUuLmE5MjJkNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCkBAIC01NCwxMSArNTQsMTEgQEAKIHsKIH0KIAotdm9pZCBtYWNoaW5lX2tleGVjKHN0cnVjdCBraW1hZ2UgKmltYWdlKQorc3RhdGljIHZvaWQgX19tYWNoaW5lX2tleGVjKHZvaWQgKmRhdGEpCiB7CiAJcmVsb2NhdGVfa2VybmVsX3QgZGF0YV9tb3ZlcjsKKwlzdHJ1Y3Qga2ltYWdlICppbWFnZSA9IGRhdGE7CiAKLQlzbXBfc2VuZF9zdG9wKCk7CiAJcGZhdWx0X2ZpbmkoKTsKIAlzMzkwX3Jlc2V0X3N5c3RlbSgpOwogCkBAIC02OCwzICs2OCw5IEBACiAJKCpkYXRhX21vdmVyKSgmaW1hZ2UtPmhlYWQsIGltYWdlLT5zdGFydCk7CiAJZm9yICg7Oyk7CiB9CisKK3ZvaWQgbWFjaGluZV9rZXhlYyhzdHJ1Y3Qga2ltYWdlICppbWFnZSkKK3sKKwlzbXBfc2VuZF9zdG9wKCk7CisJc21wX3N3aXRjaF90b19pcGxfY3B1KF9fbWFjaGluZV9rZXhlYywgaW1hZ2UpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggN2NmNDY0Mi4uMzNmZGM1YSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCkBAIC05OTIsMyArOTkyLDYxIEBACiAjZW5kaWYKIAlyZXR1cm4gJnVzZXJfczM5MF92aWV3OwogfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ3ByX25hbWVzW05VTV9HUFJTXSA9IHsKKwkicjAiLCAicjEiLCAgInIyIiwgICJyMyIsICAicjQiLCAgInI1IiwgICJyNiIsICAicjciLAorCSJyOCIsICJyOSIsICJyMTAiLCAicjExIiwgInIxMiIsICJyMTMiLCAicjE0IiwgInIxNSIsCit9OworCit1bnNpZ25lZCBsb25nIHJlZ3NfZ2V0X3JlZ2lzdGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCWlmIChvZmZzZXQgPj0gTlVNX0dQUlMpCisJCXJldHVybiAwOworCXJldHVybiByZWdzLT5ncHJzW29mZnNldF07Cit9CisKK2ludCByZWdzX3F1ZXJ5X3JlZ2lzdGVyX29mZnNldChjb25zdCBjaGFyICpuYW1lKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCisJaWYgKCFuYW1lIHx8ICpuYW1lICE9ICdyJykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHN0cmljdF9zdHJ0b3VsKG5hbWUgKyAxLCAxMCwgJm9mZnNldCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChvZmZzZXQgPj0gTlVNX0dQUlMpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBvZmZzZXQ7Cit9CisKK2NvbnN0IGNoYXIgKnJlZ3NfcXVlcnlfcmVnaXN0ZXJfbmFtZSh1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCWlmIChvZmZzZXQgPj0gTlVNX0dQUlMpCisJCXJldHVybiBOVUxMOworCXJldHVybiBncHJfbmFtZXNbb2Zmc2V0XTsKK30KKworc3RhdGljIGludCByZWdzX3dpdGhpbl9rZXJuZWxfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGtzcCA9IGtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpOworCisJcmV0dXJuIChhZGRyICYgfihUSFJFQURfU0laRSAtIDEpKSA9PSAoa3NwICYgfihUSFJFQURfU0laRSAtIDEpKTsKK30KKworLyoqCisgKiByZWdzX2dldF9rZXJuZWxfc3RhY2tfbnRoKCkgLSBnZXQgTnRoIGVudHJ5IG9mIHRoZSBzdGFjaworICogQHJlZ3M6cHRfcmVncyB3aGljaCBjb250YWlucyBrZXJuZWwgc3RhY2sgcG9pbnRlci4KKyAqIEBuOnN0YWNrIGVudHJ5IG51bWJlci4KKyAqCisgKiByZWdzX2dldF9rZXJuZWxfc3RhY2tfbnRoKCkgcmV0dXJucyBAbiB0aCBlbnRyeSBvZiB0aGUga2VybmVsIHN0YWNrIHdoaWNoCisgKiBpcyBzcGVjaWZpbmVkIGJ5IEByZWdzLiBJZiB0aGUgQG4gdGggZW50cnkgaXMgTk9UIGluIHRoZSBrZXJuZWwgc3RhY2ssCisgKiB0aGlzIHJldHVybnMgMC4KKyAqLwordW5zaWduZWQgbG9uZyByZWdzX2dldF9rZXJuZWxfc3RhY2tfbnRoKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgbikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlhZGRyID0ga2VybmVsX3N0YWNrX3BvaW50ZXIocmVncykgKyBuICogc2l6ZW9mKGxvbmcpOworCWlmICghcmVnc193aXRoaW5fa2VybmVsX3N0YWNrKHJlZ3MsIGFkZHIpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gKih1bnNpZ25lZCBsb25nICopYWRkcjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGwuUyBiL2FyY2gvczM5MC9rZXJuZWwvcmVpcGwuUwppbmRleCAyZjQ4MWNjLi5jYjg5OWQ5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3JlaXBsLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbC5TCkBAIC02LDcgKzYsNyBAQAogICogICAgQXV0aG9yKHMpOiBIb2xnZXIgU21vbGluc2tpIChIb2xnZXIuU21vbGluc2tpQGRlLmlibS5jb20pCiAgKi8KIAotI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKICMKICMgZG9fcmVpcGxfYXNtCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TCmluZGV4IDc3NDE0NzguLjVlNzNkZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TCkBAIC00LDcgKzQsNyBAQAogICoJCSBEZW5pcyBKb3NlcGggQmFycm93LAogICovCiAKLSNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogCiAjCiAjIGRvX3JlaXBsX2FzbQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zY2xwLlMgYi9hcmNoL3MzOTAva2VybmVsL3NjbHAuUwppbmRleCBlMjdjYTYzLi4yN2FmM2JmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NjbHAuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3NjbHAuUwpAQCAtOSw4ICs5LDEwIEBACiAgKi8KIAogTENfRVhUX05FV19QU1cJCT0gMHg1OAkJCSMgYWRkciBvZiBleHQgaW50IGhhbmRsZXIKK0xDX0VYVF9ORVdfUFNXXzY0CT0gMHgxYjAJCQkjIGFkZHIgb2YgZXh0IGludCBoYW5kbGVyIDY0IGJpdAogTENfRVhUX0lOVF9QQVJBTQk9IDB4ODAJCQkjIGFkZHIgb2YgZXh0IGludCBwYXJhbWV0ZXIKIExDX0VYVF9JTlRfQ09ERQkJPSAweDg2CQkJIyBhZGRyIG9mIGV4dCBpbnQgY29kZQorTENfQVJfTU9ERV9JRAkJPSAweGEzCiAKICMKICMgU3Vicm91dGluZSB3aGljaCB3YWl0cyBzeW5jaHJvbm91c2x5IHVudGlsIGVpdGhlciBhbiBleHRlcm5hbCBpbnRlcnJ1cHRpb24KQEAgLTMwLDggKzMyLDE2IEBACiAuTGJhc2VTMToKIAlhaGkJJXIxNSwtOTYJCQkjIGNyZWF0ZSBzdGFjayBmcmFtZQogCWxhCSVyOCxMQ19FWFRfTkVXX1BTVwkJIyByZWdpc3RlciBpbnQgaGFuZGxlcgotCW12YwkuTG9sZHBzd1MxLS5MYmFzZVMxKDgsJXIxMyksMCglcjgpCi0JbXZjCTAoOCwlcjgpLC5MZXh0cHN3UzEtLkxiYXNlUzEoJXIxMykKKwlsYQklcjksLkxleHRwc3dTMS0uTGJhc2VTMSglcjEzKQorI2lmZGVmIENPTkZJR182NEJJVAorCXRtCUxDX0FSX01PREVfSUQsMQorCWpubwkuTGVzYTEKKwlsYQklcjgsTENfRVhUX05FV19QU1dfNjQJCSMgcmVnaXN0ZXIgaW50IGhhbmRsZXIgNjQgYml0CisJbGEJJXI5LC5MZXh0cHN3UzFfNjQtLkxiYXNlUzEoJXIxMykKKy5MZXNhMToKKyNlbmRpZgorCW12YwkuTG9sZHBzd1MxLS5MYmFzZVMxKDE2LCVyMTMpLDAoJXI4KQorCW12YwkwKDE2LCVyOCksMCglcjkpCiAJbGhpCSVyNiwweDAyMDAJCQkjIGNyIG1hc2sgZm9yIGV4dCBpbnQgKGNyMC41NCkKIAlsdHIJJXIyLCVyMgogCWp6CS5Mc2V0Y3RTMQpAQCAtNjQsMTUgKzc0LDE5IEBACiAuTHRpbWVvdXRTMToKIAlsY3RsCSVjMCwlYzAsLkxjdGxTMS0uTGJhc2VTMSglcjEzKQkjIHJlc3RvcmUgaW50ZXJydXB0IHNldHRpbmcKIAkjIHJlc3RvcmUgb2xkIGhhbmRsZXIKLQltdmMJMCg4LCVyOCksLkxvbGRwc3dTMS0uTGJhc2VTMSglcjEzKQorCW12YwkwKDE2LCVyOCksLkxvbGRwc3dTMS0uTGJhc2VTMSglcjEzKQogCWxtCSVyNiwlcjE1LDEyMCglcjE1KQkJIyByZXN0b3JlIHJlZ2lzdGVycwogCWJyCSVyMTQJCQkJIyByZXR1cm4gdG8gY2FsbGVyCiAKIAkuYWxpZ24JOAogLkxvbGRwc3dTMToKLQkubG9uZwkwLCAwCQkJCSMgb2xkIGV4dCBpbnQgUFNXCisJLmxvbmcJMCwgMCwgMCwgMAkJCSMgb2xkIGV4dCBpbnQgUFNXCiAuTGV4dHBzd1MxOgogCS5sb25nCTB4MDAwODAwMDAsIDB4ODAwMDAwMDArLkx3YWl0UzEJIyBQU1cgdG8gaGFuZGxlIGV4dCBpbnQKKyNpZmRlZiBDT05GSUdfNjRCSVQKKy5MZXh0cHN3UzFfNjQ6CisJLnF1YWQJMHgwMDAwMDAwMTgwMDAwMDAwLCAuTHdhaXRTMQkjIFBTVyB0byBoYW5kbGUgZXh0IGludCwgNjQgYml0CisjZW5kaWYKIC5Md2FpdHBzd1MxOgogCS5sb25nCTB4MDEwYTAwMDAsIDB4MDAwMDAwMDArLkxsb29wUzEJIyBQU1cgdG8gd2FpdCBmb3IgZXh0IGludAogLkx0aW1lUzE6CkBAIC0yNTAsNiArMjY0LDEzIEBACiBfc2NscF9wcmludF9lYXJseToKIAlzdG0JJXI2LCVyMTUsMjQoJXIxNSkJCSMgc2F2ZSByZWdpc3RlcnMKIAlhaGkJJXIxNSwtOTYJCQkjIGNyZWF0ZSBzdGFjayBmcmFtZQorI2lmZGVmIENPTkZJR182NEJJVAorCXRtCUxDX0FSX01PREVfSUQsMQorCWpubwkuTGVzYTIKKwlhaGkJJXIxNSwtODAKKwlzdG1oCSVyNiwlcjE1LDk2KCVyMTUpCQkjIHN0b3JlIHVwcGVyIHJlZ2lzdGVyIGhhbHZlcworLkxlc2EyOgorI2VuZGlmCiAJbHIJJXIxMCwlcjIJCQkjIHNhdmUgc3RyaW5nIHBvaW50ZXIKIAlsaGkJJXIyLDAKIAlicmFzCSVyMTQsX3NjbHBfc2V0dXAJCSMgZW5hYmxlIGNvbnNvbGUKQEAgLTI2Miw2ICsyODMsMTMgQEAKIAlsaGkJJXIyLDEKIAlicmFzCSVyMTQsX3NjbHBfc2V0dXAJCSMgZGlzYWJsZSBjb25zb2xlCiAuTGVuZFM1OgorI2lmZGVmIENPTkZJR182NEJJVAorCXRtCUxDX0FSX01PREVfSUQsMQorCWpubwkuTGVzYTMKKwlsbWgJJXI2LCVyMTUsOTYoJXIxNSkJCSMgc3RvcmUgdXBwZXIgcmVnaXN0ZXIgaGFsdmVzCisJYWhpCSVyMTUsODAKKy5MZXNhMzoKKyNlbmRpZgogCWxtCSVyNiwlcjE1LDEyMCglcjE1KQkJIyByZXN0b3JlIHJlZ2lzdGVycwogCWJyCSVyMTQKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCmluZGV4IDhkODk1N2IuLjc3YTYzYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKQEAgLTM5NiwxNSArMzk2LDEyIEBACiBzZXR1cF9sb3djb3JlKHZvaWQpCiB7CiAJc3RydWN0IF9sb3djb3JlICpsYzsKLQlpbnQgbGNfcGFnZXM7CiAKIAkvKgogCSAqIFNldHVwIGxvd2NvcmUgZm9yIGJvb3QgY3B1CiAJICovCi0JbGNfcGFnZXMgPSBzaXplb2Yodm9pZCAqKSA9PSA4ID8gMiA6IDE7Ci0JbGMgPSAoc3RydWN0IF9sb3djb3JlICopCi0JCV9fYWxsb2NfYm9vdG1lbShsY19wYWdlcyAqIFBBR0VfU0laRSwgbGNfcGFnZXMgKiBQQUdFX1NJWkUsIDApOwotCW1lbXNldChsYywgMCwgbGNfcGFnZXMgKiBQQUdFX1NJWkUpOworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IF9sb3djb3JlKSAhPSBMQ19QQUdFUyAqIDQwOTYpOworCWxjID0gX19hbGxvY19ib290bWVtKExDX1BBR0VTICogUEFHRV9TSVpFLCBMQ19QQUdFUyAqIFBBR0VfU0laRSwgMCk7CiAJbGMtPnJlc3RhcnRfcHN3Lm1hc2sgPSBQU1dfQkFTRV9CSVRTIHwgUFNXX0RFRkFVTFRfS0VZOwogCWxjLT5yZXN0YXJ0X3Bzdy5hZGRyID0KIAkJUFNXX0FERFJfQU1PREUgfCAodW5zaWduZWQgbG9uZykgcmVzdGFydF9pbnRfaGFuZGxlcjsKQEAgLTgwNCw3ICs4MDEsNyBAQAogCWlmIChNQUNISU5FX0lTX1ZNKQogCQlwcl9pbmZvKCJMaW51eCBpcyBydW5uaW5nIGFzIGEgei9WTSAiCiAJCQkiZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbSBpbiAzMS1iaXQgbW9kZVxuIik7Ci0JZWxzZQorCWVsc2UgaWYgKE1BQ0hJTkVfSVNfTFBBUikKIAkJcHJfaW5mbygiTGludXggaXMgcnVubmluZyBuYXRpdmVseSBpbiAzMS1iaXQgbW9kZVxuIik7CiAJaWYgKE1BQ0hJTkVfSEFTX0lFRUUpCiAJCXByX2luZm8oIlRoZSBoYXJkd2FyZSBzeXN0ZW0gaGFzIElFRUUgY29tcGF0aWJsZSAiCkBAIC04MTgsNyArODE1LDcgQEAKIAkJCSJndWVzdCBvcGVyYXRpbmcgc3lzdGVtIGluIDY0LWJpdCBtb2RlXG4iKTsKIAllbHNlIGlmIChNQUNISU5FX0lTX0tWTSkKIAkJcHJfaW5mbygiTGludXggaXMgcnVubmluZyB1bmRlciBLVk0gaW4gNjQtYml0IG1vZGVcbiIpOwotCWVsc2UKKwllbHNlIGlmIChNQUNISU5FX0lTX0xQQVIpCiAJCXByX2luZm8oIkxpbnV4IGlzIHJ1bm5pbmcgbmF0aXZlbHkgaW4gNjQtYml0IG1vZGVcbiIpOwogI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwppbmRleCA3NmE2ZmRkLi44YjEwMTI3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vaXBsLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ3AuaD4KQEAgLTUzLDcgKzU0LDcgQEAKICNpbmNsdWRlICJlbnRyeS5oIgogCiAvKiBsb2dpY2FsIGNwdSB0byBjcHUgYWRkcmVzcyAqLwotaW50IF9fY3B1X2xvZ2ljYWxfbWFwW05SX0NQVVNdOwordW5zaWduZWQgc2hvcnQgX19jcHVfbG9naWNhbF9tYXBbTlJfQ1BVU107CiAKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnRfc2V0W05SX0NQVVNdOwogCkBAIC03MiwxMyArNzMsMTMgQEAKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHUsIGNwdV9kZXZpY2VzKTsKIAotc3RhdGljIHZvaWQgc21wX2V4dF9iaXRjYWxsKGludCwgZWNfYml0X3NpZyk7CitzdGF0aWMgdm9pZCBzbXBfZXh0X2JpdGNhbGwoaW50LCBpbnQpOwogCi1zdGF0aWMgaW50IGNwdV9zdG9wcGVkKGludCBjcHUpCitzdGF0aWMgaW50IHJhd19jcHVfc3RvcHBlZChpbnQgY3B1KQogewotCV9fdTMyIHN0YXR1czsKKwl1MzIgc3RhdHVzOwogCi0Jc3dpdGNoIChzaWduYWxfcHJvY2Vzc29yX3BzKCZzdGF0dXMsIDAsIGNwdSwgc2lncF9zZW5zZSkpIHsKKwlzd2l0Y2ggKHJhd19zaWdwX3BzKCZzdGF0dXMsIDAsIGNwdSwgc2lncF9zZW5zZSkpIHsKIAljYXNlIHNpZ3Bfc3RhdHVzX3N0b3JlZDoKIAkJLyogQ2hlY2sgZm9yIHN0b3BwZWQgYW5kIGNoZWNrIHN0b3Agc3RhdGUgKi8KIAkJaWYgKHN0YXR1cyAmIDB4NTApCkBAIC05MCw2ICs5MSw0NCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBjcHVfc3RvcHBlZChpbnQgY3B1KQoreworCXJldHVybiByYXdfY3B1X3N0b3BwZWQoY3B1X2xvZ2ljYWxfbWFwKGNwdSkpOworfQorCit2b2lkIHNtcF9zd2l0Y2hfdG9faXBsX2NwdSh2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgX2xvd2NvcmUgKmxjLCAqY3VycmVudF9sYzsKKwlzdHJ1Y3Qgc3RhY2tfZnJhbWUgKnNmOworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCXVuc2lnbmVkIGxvbmcgc3A7CisKKwlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpID09IDApCisJCWZ1bmMoZGF0YSk7CisJX19sb2FkX3Bzd19tYXNrKFBTV19CQVNFX0JJVFMgfCBQU1dfREVGQVVMVF9LRVkpOworCS8qIERpc2FibGUgbG93Y29yZSBwcm90ZWN0aW9uICovCisJX19jdGxfY2xlYXJfYml0KDAsIDI4KTsKKwljdXJyZW50X2xjID0gbG93Y29yZV9wdHJbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlsYyA9IGxvd2NvcmVfcHRyWzBdOworCWlmICghbGMpCisJCWxjID0gY3VycmVudF9sYzsKKwlsYy0+cmVzdGFydF9wc3cubWFzayA9IFBTV19CQVNFX0JJVFMgfCBQU1dfREVGQVVMVF9LRVk7CisJbGMtPnJlc3RhcnRfcHN3LmFkZHIgPSBQU1dfQUREUl9BTU9ERSB8ICh1bnNpZ25lZCBsb25nKSBzbXBfcmVzdGFydF9jcHU7CisJaWYgKCFjcHVfb25saW5lKDApKQorCQlzbXBfc3dpdGNoX3RvX2NwdShmdW5jLCBkYXRhLCAwLCBzdGFwKCksIF9fY3B1X2xvZ2ljYWxfbWFwWzBdKTsKKwl3aGlsZSAoc2lncCgwLCBzaWdwX3N0b3BfYW5kX3N0b3JlX3N0YXR1cykgPT0gc2lncF9idXN5KQorCQljcHVfcmVsYXgoKTsKKwlzcCA9IGxjLT5wYW5pY19zdGFjazsKKwlzcCAtPSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpOworCXJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKikgc3A7CisJbWVtY3B5KCZyZWdzLT5ncHJzLCAmY3VycmVudF9sYy0+Z3ByZWdzX3NhdmVfYXJlYSwgc2l6ZW9mKHJlZ3MtPmdwcnMpKTsKKwlyZWdzLT5wc3cgPSBsYy0+cHN3X3NhdmVfYXJlYTsKKwlzcCAtPSBTVEFDS19GUkFNRV9PVkVSSEVBRDsKKwlzZiA9IChzdHJ1Y3Qgc3RhY2tfZnJhbWUgKikgc3A7CisJc2YtPmJhY2tfY2hhaW4gPSByZWdzLT5ncHJzWzE1XTsKKwlzbXBfc3dpdGNoX3RvX2NwdShmdW5jLCBkYXRhLCBzcCwgc3RhcCgpLCBfX2NwdV9sb2dpY2FsX21hcFswXSk7Cit9CisKIHZvaWQgc21wX3NlbmRfc3RvcCh2b2lkKQogewogCWludCBjcHUsIHJjOwpAQCAtMTAzLDcgKzE0Miw3IEBACiAJCWlmIChjcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQogCQkJY29udGludWU7CiAJCWRvIHsKLQkJCXJjID0gc2lnbmFsX3Byb2Nlc3NvcihjcHUsIHNpZ3Bfc3RvcCk7CisJCQlyYyA9IHNpZ3AoY3B1LCBzaWdwX3N0b3ApOwogCQl9IHdoaWxlIChyYyA9PSBzaWdwX2J1c3kpOwogCiAJCXdoaWxlICghY3B1X3N0b3BwZWQoY3B1KSkKQEAgLTEzOSwxMyArMTc4LDEzIEBACiAgKiBTZW5kIGFuIGV4dGVybmFsIGNhbGwgc2lncCB0byBhbm90aGVyIGNwdSBhbmQgcmV0dXJuIHdpdGhvdXQgd2FpdGluZwogICogZm9yIGl0cyBjb21wbGV0aW9uLgogICovCi1zdGF0aWMgdm9pZCBzbXBfZXh0X2JpdGNhbGwoaW50IGNwdSwgZWNfYml0X3NpZyBzaWcpCitzdGF0aWMgdm9pZCBzbXBfZXh0X2JpdGNhbGwoaW50IGNwdSwgaW50IHNpZykKIHsKIAkvKgogCSAqIFNldCBzaWduYWxpbmcgYml0IGluIGxvd2NvcmUgb2YgdGFyZ2V0IGNwdSBhbmQga2ljayBpdAogCSAqLwogCXNldF9iaXQoc2lnLCAodW5zaWduZWQgbG9uZyAqKSAmbG93Y29yZV9wdHJbY3B1XS0+ZXh0X2NhbGxfZmFzdCk7Ci0Jd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3IoY3B1LCBzaWdwX2VtZXJnZW5jeV9zaWduYWwpID09IHNpZ3BfYnVzeSkKKwl3aGlsZSAoc2lncChjcHUsIHNpZ3BfZW1lcmdlbmN5X3NpZ25hbCkgPT0gc2lncF9idXN5KQogCQl1ZGVsYXkoMTApOwogfQogCkBAIC0yMzksMjQgKzI3OCw4IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNtcF9jdGxfY2xlYXJfYml0KTsKIAotLyoKLSAqIEluIGVhcmx5IGlwbCBzdGF0ZSBhIHRlbXAuIGxvZ2ljYWxseSBjcHUgbnVtYmVyIGlzIG5lZWRlZCwgc28gdGhlIHNpZ3AKLSAqIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCB0byBzZW5zZSBvdGhlciBjcHVzLiBTaW5jZSBOUl9DUFVTIGlzID49IDIgb24KLSAqIENPTkZJR19TTVAgYW5kIHRoZSBpcGwgY3B1IGlzIGxvZ2ljYWwgY3B1IDAsIGl0IG11c3QgYmUgMS4KLSAqLwotI2RlZmluZSBDUFVfSU5JVF9OTwkxCi0KICNpZmRlZiBDT05GSUdfWkZDUERVTVAKIAotLyoKLSAqIHpmY3BkdW1wX3ByZWZpeF9hcnJheSBob2xkcyBwcmVmaXggcmVnaXN0ZXJzIGZvciB0aGUgZm9sbG93aW5nIHNjZW5hcmlvOgotICogNjQgYml0IHpmY3BkdW1wIGtlcm5lbCBhbmQgMzEgYml0IGtlcm5lbCB3aGljaCBpcyB0byBiZSBkdW1wZWQuIFdlIGhhdmUgdG8KLSAqIHNhdmUgaXRzIHByZWZpeCByZWdpc3RlcnMsIHNpbmNlIHRoZXkgZ2V0IGxvc3QsIHdoZW4gc3dpdGNoaW5nIGZyb20gMzEgYml0Ci0gKiB0byA2NCBiaXQuCi0gKi8KLXVuc2lnbmVkIGludCB6ZmNwZHVtcF9wcmVmaXhfYXJyYXlbTlJfQ1BVUyArIDFdIFwKLQlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEiKSkpOwotCiBzdGF0aWMgdm9pZCBfX2luaXQgc21wX2dldF9zYXZlX2FyZWEodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IHBoeV9jcHUpCiB7CiAJaWYgKGlwbF9pbmZvLnR5cGUgIT0gSVBMX1RZUEVfRkNQX0RVTVApCkBAIC0yNjYsMjEgKzI4OSwxNSBAQAogCQkJICAgInRoZSBkdW1wXG4iLCBjcHUsIE5SX0NQVVMgLSAxKTsKIAkJcmV0dXJuOwogCX0KLQl6ZmNwZHVtcF9zYXZlX2FyZWFzW2NwdV0gPSBrbWFsbG9jKHNpemVvZih1bmlvbiBzYXZlX2FyZWEpLCBHRlBfS0VSTkVMKTsKLQlfX2NwdV9sb2dpY2FsX21hcFtDUFVfSU5JVF9OT10gPSAoX191MTYpIHBoeV9jcHU7Ci0Jd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3IoQ1BVX0lOSVRfTk8sIHNpZ3Bfc3RvcF9hbmRfc3RvcmVfc3RhdHVzKSA9PQotCSAgICAgICBzaWdwX2J1c3kpCisJemZjcGR1bXBfc2F2ZV9hcmVhc1tjcHVdID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNhdmVfYXJlYSksIEdGUF9LRVJORUwpOworCXdoaWxlIChyYXdfc2lncChwaHlfY3B1LCBzaWdwX3N0b3BfYW5kX3N0b3JlX3N0YXR1cykgPT0gc2lncF9idXN5KQogCQljcHVfcmVsYXgoKTsKIAltZW1jcHkoemZjcGR1bXBfc2F2ZV9hcmVhc1tjcHVdLAogCSAgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSBzdG9yZV9wcmVmaXgoKSArIFNBVkVfQVJFQV9CQVNFLAotCSAgICAgICBTQVZFX0FSRUFfU0laRSk7Ci0jaWZkZWYgQ09ORklHXzY0QklUCi0JLyogY29weSBvcmlnaW5hbCBwcmVmaXggcmVnaXN0ZXIgKi8KLQl6ZmNwZHVtcF9zYXZlX2FyZWFzW2NwdV0tPnMzOTB4LnByZWZfcmVnID0gemZjcGR1bXBfcHJlZml4X2FycmF5W2NwdV07Ci0jZW5kaWYKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBzYXZlX2FyZWEpKTsKIH0KIAotdW5pb24gc2F2ZV9hcmVhICp6ZmNwZHVtcF9zYXZlX2FyZWFzW05SX0NQVVMgKyAxXTsKK3N0cnVjdCBzYXZlX2FyZWEgKnpmY3BkdW1wX3NhdmVfYXJlYXNbTlJfQ1BVUyArIDFdOwogRVhQT1JUX1NZTUJPTF9HUEwoemZjcGR1bXBfc2F2ZV9hcmVhcyk7CiAKICNlbHNlCkBAIC0zODksOCArNDA2LDcgQEAKIAkJZm9yIChjcHUgPSAwOyBjcHUgPD0gTUFYX0NQVV9BRERSRVNTOyBjcHUrKykgewogCQkJaWYgKGNwdSA9PSBib290X2NwdV9hZGRyKQogCQkJCWNvbnRpbnVlOwotCQkJX19jcHVfbG9naWNhbF9tYXBbQ1BVX0lOSVRfTk9dID0gY3B1OwotCQkJaWYgKCFjcHVfc3RvcHBlZChDUFVfSU5JVF9OTykpCisJCQlpZiAoIXJhd19jcHVfc3RvcHBlZChjcHUpKQogCQkJCWNvbnRpbnVlOwogCQkJc21wX2dldF9zYXZlX2FyZWEoY19jcHVzLCBjcHUpOwogCQkJY19jcHVzKys7CkBAIC00MTMsOCArNDI5LDcgQEAKIAkJY3B1X2FkZHIgPSBpbmZvLT5jcHVbY3B1XS5hZGRyZXNzOwogCQlpZiAoY3B1X2FkZHIgPT0gYm9vdF9jcHVfYWRkcikKIAkJCWNvbnRpbnVlOwotCQlfX2NwdV9sb2dpY2FsX21hcFtDUFVfSU5JVF9OT10gPSBjcHVfYWRkcjsKLQkJaWYgKCFjcHVfc3RvcHBlZChDUFVfSU5JVF9OTykpIHsKKwkJaWYgKCFyYXdfY3B1X3N0b3BwZWQoY3B1X2FkZHIpKSB7CiAJCQlzX2NwdXMrKzsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC01MzMsMTggKzU0OCwxOCBAQAogLyogVXBwaW5nIGFuZCBkb3duaW5nIG9mIENQVXMgKi8KIGludCBfX2NwdWluaXQgX19jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGU7CiAJc3RydWN0IF9sb3djb3JlICpjcHVfbG93Y29yZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGU7CiAJc3RydWN0IHN0YWNrX2ZyYW1lICpzZjsKLQlzaWdwX2Njb2RlIGNjb2RlOwogCXUzMiBsb3djb3JlOworCWludCBjY29kZTsKIAogCWlmIChzbXBfY3B1X3N0YXRlW2NwdV0gIT0gQ1BVX1NUQVRFX0NPTkZJR1VSRUQpCiAJCXJldHVybiAtRUlPOwogCWlmIChzbXBfYWxsb2NfbG93Y29yZShjcHUpKQogCQlyZXR1cm4gLUVOT01FTTsKIAlkbyB7Ci0JCWNjb2RlID0gc2lnbmFsX3Byb2Nlc3NvcihjcHUsIHNpZ3BfaW5pdGlhbF9jcHVfcmVzZXQpOworCQljY29kZSA9IHNpZ3AoY3B1LCBzaWdwX2luaXRpYWxfY3B1X3Jlc2V0KTsKIAkJaWYgKGNjb2RlID09IHNpZ3BfYnVzeSkKIAkJCXVkZWxheSgxMCk7CiAJCWlmIChjY29kZSA9PSBzaWdwX25vdF9vcGVyYXRpb25hbCkKQEAgLTU1Miw3ICs1NjcsNyBAQAogCX0gd2hpbGUgKGNjb2RlID09IHNpZ3BfYnVzeSk7CiAKIAlsb3djb3JlID0gKHUzMikodW5zaWduZWQgbG9uZylsb3djb3JlX3B0cltjcHVdOwotCXdoaWxlIChzaWduYWxfcHJvY2Vzc29yX3AobG93Y29yZSwgY3B1LCBzaWdwX3NldF9wcmVmaXgpID09IHNpZ3BfYnVzeSkKKwl3aGlsZSAoc2lncF9wKGxvd2NvcmUsIGNwdSwgc2lncF9zZXRfcHJlZml4KSA9PSBzaWdwX2J1c3kpCiAJCXVkZWxheSgxMCk7CiAKIAlpZGxlID0gY3VycmVudF9zZXRbY3B1XTsKQEAgLTU3OCw3ICs1OTMsNyBAQAogCWNwdV9sb3djb3JlLT5mdHJhY2VfZnVuYyA9IFMzOTBfbG93Y29yZS5mdHJhY2VfZnVuYzsKIAllaWVpbygpOwogCi0Jd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3IoY3B1LCBzaWdwX3Jlc3RhcnQpID09IHNpZ3BfYnVzeSkKKwl3aGlsZSAoc2lncChjcHUsIHNpZ3BfcmVzdGFydCkgPT0gc2lncF9idXN5KQogCQl1ZGVsYXkoMTApOwogCiAJd2hpbGUgKCFjcHVfb25saW5lKGNwdSkpCkBAIC02NDAsNyArNjU1LDcgQEAKIAkvKiBXYWl0IHVudGlsIHRhcmdldCBjcHUgaXMgZG93biAqLwogCXdoaWxlICghY3B1X3N0b3BwZWQoY3B1KSkKIAkJY3B1X3JlbGF4KCk7Ci0Jd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3JfcCgwLCBjcHUsIHNpZ3Bfc2V0X3ByZWZpeCkgPT0gc2lncF9idXN5KQorCXdoaWxlIChzaWdwX3AoMCwgY3B1LCBzaWdwX3NldF9wcmVmaXgpID09IHNpZ3BfYnVzeSkKIAkJdWRlbGF5KDEwKTsKIAlzbXBfZnJlZV9sb3djb3JlKGNwdSk7CiAJcHJfaW5mbygiUHJvY2Vzc29yICVkIHN0b3BwZWRcbiIsIGNwdSk7CkBAIC02NDksNyArNjY0LDcgQEAKIHZvaWQgY3B1X2RpZSh2b2lkKQogewogCWlkbGVfdGFza19leGl0KCk7Ci0Jd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApID09IHNpZ3BfYnVzeSkKKwl3aGlsZSAoc2lncChzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCkgPT0gc2lncF9idXN5KQogCQljcHVfcmVsYXgoKTsKIAlmb3IgKDs7KTsKIH0KQEAgLTc2NSw3ICs3ODAsOCBAQAogCWdldF9vbmxpbmVfY3B1cygpOwogCW11dGV4X2xvY2soJnNtcF9jcHVfc3RhdGVfbXV0ZXgpOwogCXJjID0gLUVCVVNZOwotCWlmIChjcHVfb25saW5lKGNwdSkpCisJLyogZGlzYWxsb3cgY29uZmlndXJhdGlvbiBjaGFuZ2VzIG9mIG9ubGluZSBjcHVzIGFuZCBjcHUgMCAqLworCWlmIChjcHVfb25saW5lKGNwdSkgfHwgY3B1ID09IDApCiAJCWdvdG8gb3V0OwogCXJjID0gMDsKIAlzd2l0Y2ggKHZhbCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zd2l0Y2hfY3B1LlMgYi9hcmNoL3MzOTAva2VybmVsL3N3aXRjaF9jcHUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjlmMTFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zd2l0Y2hfY3B1LlMKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIDMxLWJpdCBzd2l0Y2ggY3B1IGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDkKKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworIyBzbXBfc3dpdGNoX3RvX2NwdSBzd2l0Y2hlcyB0byBkZXN0aW5hdGlvbiBjcHUgYW5kIGV4ZWN1dGVzIHRoZSBwYXNzZWQgZnVuY3Rpb24KKyMgUGFyYW1ldGVyOiAlcjIgLSBmdW5jdGlvbiB0byBjYWxsCisjCSAgICAgJXIzIC0gZnVuY3Rpb24gcGFyYW1ldGVyCisjCSAgICAgJXI0IC0gc3RhY2sgcG9pbmVyCisjCSAgICAgJXI1IC0gY3VycmVudCBjcHUKKyMJICAgICAlcjYgLSBkZXN0aW5hdGlvbiBjcHUKKworCS5zZWN0aW9uIC50ZXh0CisJLmFsaWduIDQKKwkuZ2xvYmwgc21wX3N3aXRjaF90b19jcHUKK3NtcF9zd2l0Y2hfdG9fY3B1OgorCXN0bQklcjYsJXIxNSxfX1NGX0dQUlMoJXIxNSkKKwlscgklcjEsJXIxNQorCWFoaQklcjE1LC1TVEFDS19GUkFNRV9PVkVSSEVBRAorCXN0CSVyMSxfX1NGX0JBQ0tDSEFJTiglcjE1KQorCWJhc3IJJXIxMywwCiswOglsYQklcjEsLmdwcnJlZ3NfYWRkci0wYiglcjEzKQorCWwJJXIxLDAoJXIxKQorCXN0bQklcjAsJXIxNSwwKCVyMSkKKzE6CXNpZ3AJJXIwLCVyNixfX1NJR1BfUkVTVEFSVAkvKiBzdGFydCBkZXN0aW5hdGlvbiBDUFUgKi8KKwlicmMJMiwxYgkJCS8qIGJ1c3ksIHRyeSBhZ2FpbiAqLworMjoJc2lncAklcjAsJXI1LF9fU0lHUF9TVE9QCS8qIHN0b3AgY3VycmVudCBDUFUgKi8KKwlicmMJMiwyYgkJCS8qIGJ1c3ksIHRyeSBhZ2FpbiAqLworMzoJagkzYgorCisJLmdsb2JsCXNtcF9yZXN0YXJ0X2NwdQorc21wX3Jlc3RhcnRfY3B1OgorCWJhc3IJJXIxMywwCiswOglsYQklcjEsLmdwcnJlZ3NfYWRkci0wYiglcjEzKQorCWwJJXIxLDAoJXIxKQorCWxtCSVyMCwlcjE1LDAoJXIxKQorMToJc2lncAklcjAsJXI1LF9fU0lHUF9TRU5TRQkvKiBXYWl0IGZvciBjYWxsaW5nIENQVSAqLworCWJyYwkxMCwxYgkJCS8qIGJ1c3ksIGFjY2VwdGVkIChzdGF0dXMgMCksIHJ1bm5pbmcgKi8KKwl0bWxsCSVyMCwweDQwCQkvKiBUZXN0IGlmIGNhbGxpbmcgQ1BVIGlzIHN0b3BwZWQgKi8KKwlqegkxYgorCWx0cgklcjQsJXI0CQkJLyogTmV3IHN0YWNrID8gKi8KKwlqegkxZgorCWxyCSVyMTUsJXI0CisxOgliYXNyCSVyMTQsJXIyCisKKy5ncHJyZWdzX2FkZHI6CisJLmxvbmcJLmdwcnJlZ3MKKworCS5zZWN0aW9uIC5kYXRhLCJhdyIsQHByb2diaXRzCisuZ3BycmVnczoKKwkucmVwdAkxNgorCS5sb25nCTAKKwkuZW5kcgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zd2l0Y2hfY3B1NjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvc3dpdGNoX2NwdTY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk0YWFjYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc3dpdGNoX2NwdTY0LlMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIDY0LWJpdCBzd2l0Y2ggY3B1IGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDkKKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworIyBzbXBfc3dpdGNoX3RvX2NwdSBzd2l0Y2hlcyB0byBkZXN0aW5hdGlvbiBjcHUgYW5kIGV4ZWN1dGVzIHRoZSBwYXNzZWQgZnVuY3Rpb24KKyMgUGFyYW1ldGVyOiAlcjIgLSBmdW5jdGlvbiB0byBjYWxsCisjCSAgICAgJXIzIC0gZnVuY3Rpb24gcGFyYW1ldGVyCisjCSAgICAgJXI0IC0gc3RhY2sgcG9pbmVyCisjCSAgICAgJXI1IC0gY3VycmVudCBjcHUKKyMJICAgICAlcjYgLSBkZXN0aW5hdGlvbiBjcHUKKworCS5zZWN0aW9uIC50ZXh0CisJLmFsaWduIDQKKwkuZ2xvYmwgc21wX3N3aXRjaF90b19jcHUKK3NtcF9zd2l0Y2hfdG9fY3B1OgorCXN0bWcJJXI2LCVyMTUsX19TRl9HUFJTKCVyMTUpCisJbGdyCSVyMSwlcjE1CisJYWdoaQklcjE1LC1TVEFDS19GUkFNRV9PVkVSSEVBRAorCXN0ZwklcjEsX19TRl9CQUNLQ0hBSU4oJXIxNSkKKwlsYXJsCSVyMSwuZ3BycmVncworCXN0bWcJJXIwLCVyMTUsMCglcjEpCisxOglzaWdwCSVyMCwlcjYsX19TSUdQX1JFU1RBUlQJLyogc3RhcnQgZGVzdGluYXRpb24gQ1BVICovCisJYnJjCTIsMWIJCQkvKiBidXN5LCB0cnkgYWdhaW4gKi8KKzI6CXNpZ3AJJXIwLCVyNSxfX1NJR1BfU1RPUAkvKiBzdG9wIGN1cnJlbnQgQ1BVICovCisJYnJjCTIsMmIJCQkvKiBidXN5LCB0cnkgYWdhaW4gKi8KKzM6CWoJM2IKKworCS5nbG9ibAlzbXBfcmVzdGFydF9jcHUKK3NtcF9yZXN0YXJ0X2NwdToKKwlsYXJsCSVyMSwuZ3BycmVncworCWxtZwklcjAsJXIxNSwwKCVyMSkKKzE6CXNpZ3AJJXIwLCVyNSxfX1NJR1BfU0VOU0UJLyogV2FpdCBmb3IgY2FsbGluZyBDUFUgKi8KKwlicmMJMTAsMWIJCQkvKiBidXN5LCBhY2NlcHRlZCAoc3RhdHVzIDApLCBydW5uaW5nICovCisJdG1sbAklcjAsMHg0MAkJLyogVGVzdCBpZiBjYWxsaW5nIENQVSBpcyBzdG9wcGVkICovCisJanoJMWIKKwlsdGdyCSVyNCwlcjQJCQkvKiBOZXcgc3RhY2sgPyAqLworCWp6CTFmCisJbGdyCSVyMTUsJXI0CisxOgliYXNyCSVyMTQsJXIyCisKKwkuc2VjdGlvbiAuZGF0YSwiYXciLEBwcm9nYml0cworLmdwcnJlZ3M6CisJLnJlcHQJMTYKKwkucXVhZAkwCisJLmVuZHIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMgYi9hcmNoL3MzOTAva2VybmVsL3N3c3VzcF9hc202NC5TCmluZGV4IDBjMjZjYzEuLmIzNTQ0MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJY2dyCSVyMSwlcjIKIAlqZQlyZXN0b3JlX3JlZ2lzdGVycwkJLyogcjEgPSByMiAtPiBub3RoaW5nIHRvIGRvICovCiAJbGFybAklcjQsLkxyZXN0YXJ0X3N1c3BlbmRfcHN3CS8qIFNldCBuZXcgcmVzdGFydCBQU1cgKi8KLQltdmMJX19MQ19SRVNUQVJUX1BTVygxNiwlcjApLDAoJXI0KQorCW12YwlfX0xDX1JTVF9ORVdfUFNXKDE2LCVyMCksMCglcjQpCiAzOgogCXNpZ3AJJXI5LCVyMSxfX1NJR1BfSU5JVElBTF9DUFVfUkVTRVQKIAlicmMJOCw0ZgkvKiBhY2NlcHRlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMgYi9hcmNoL3MzOTAva2VybmVsL3RpbWUuYwppbmRleCA2NTA2NWFjLi5hOGY5M2YxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3RpbWUuYwpAQCAtNTEsMTQgKzUxLDYgQEAKICNkZWZpbmUgVVNFQ1NfUEVSX0pJRkZZICAgICAoKHVuc2lnbmVkIGxvbmcpIDEwMDAwMDAvSFopCiAjZGVmaW5lIENMS19USUNLU19QRVJfSklGRlkgKCh1bnNpZ25lZCBsb25nKSBVU0VDU19QRVJfSklGRlkgPDwgMTIpCiAKLS8qCi0gKiBDcmVhdGUgYSBzbWFsbCB0aW1lIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdGltZXIgaW50ZXJydXB0cwotICogb24gdGhlIGRpZmZlcmVudCBjcHVzIHRvIGF2b2lkIGxvY2sgY29udGVudGlvbi4KLSAqLwotI2RlZmluZSBDUFVfREVWSUFUSU9OICAgICAgIChzbXBfcHJvY2Vzc29yX2lkKCkgPDwgMTIpCi0KLSNkZWZpbmUgVElDS19TSVpFIHRpY2sKLQogdTY0IHNjaGVkX2Nsb2NrX2Jhc2VfY2MgPSAtMTsJLyogRm9yY2UgdG8gZGF0YSBzZWN0aW9uLiAqLwogRVhQT1JUX1NZTUJPTF9HUEwoc2NoZWRfY2xvY2tfYmFzZV9jYyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKaW5kZXggNWY5OWU2Ni4uNmJjOWMxOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2RpYWcuYyBiL2FyY2gvczM5MC9rdm0vZGlhZy5jCmluZGV4IDgzMDAzMDkuLjllNGM4NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vZGlhZy5jCisrKyBiL2FyY2gvczM5MC9rdm0vZGlhZy5jCkBAIC0zOSw3ICszOSw3IEBACiAJCXZjcHUtPnJ1bi0+czM5MF9yZXNldF9mbGFncyA9IDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PVFNVUFA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKIAlhdG9taWNfY2xlYXJfbWFzayhDUFVTVEFUX1JVTk5JTkcsICZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y3B1ZmxhZ3MpOwpAQCAtNjIsNiArNjIsNiBAQAogCWNhc2UgMHgzMDg6CiAJCXJldHVybiBfX2RpYWdfaXBsX2Z1bmN0aW9ucyh2Y3B1KTsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT1RTVVBQOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKaW5kZXggYjQwMDk2NC4uM2RkYzMwOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYworKysgYi9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCkBAIC0zMiw3ICszMiw3IEBACiAKIAl2Y3B1LT5zdGF0Lmluc3RydWN0aW9uX2xjdGxnKys7CiAJaWYgKCh2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aXBiICYgMHhmZikgIT0gMHgyZikKLQkJcmV0dXJuIC1FTk9UU1VQUDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJdXNlcmFkZHIgPSBkaXNwMjsKIAlpZiAoYmFzZTIpCkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJcmMgPSBfX2t2bV9zMzkwX3ZjcHVfc3RvcmVfc3RhdHVzKHZjcHUsCiAJCQkJCQkgIEtWTV9TMzkwX1NUT1JFX1NUQVRVU19OT0FERFIpOwogCQlpZiAocmMgPj0gMCkKLQkJCXJjID0gLUVOT1RTVVBQOworCQkJcmMgPSAtRU9QTk9UU1VQUDsKIAl9CiAKIAlpZiAodmNwdS0+YXJjaC5sb2NhbF9pbnQuYWN0aW9uX2JpdHMgJiBBQ1RJT05fUkVMT0FEVkNQVV9PTl9TVE9QKSB7CkBAIC0xNTAsNyArMTUwLDcgQEAKIAlpZiAodmNwdS0+YXJjaC5sb2NhbF9pbnQuYWN0aW9uX2JpdHMgJiBBQ1RJT05fU1RPUF9PTl9TVE9QKSB7CiAJCXZjcHUtPmFyY2gubG9jYWxfaW50LmFjdGlvbl9iaXRzICY9IH5BQ1RJT05fU1RPUF9PTl9TVE9QOwogCQlWQ1BVX0VWRU5UKHZjcHUsIDMsICIlcyIsICJjcHUgc3RvcHBlZCIpOwotCQlyYyA9IC1FTk9UU1VQUDsKKwkJcmMgPSAtRU9QTk9UU1VQUDsKIAl9CiAKIAlzcGluX3VubG9ja19iaCgmdmNwdS0+YXJjaC5sb2NhbF9pbnQubG9jayk7CkBAIC0xNzEsOSArMTcxLDkgQEAKIAkJCSAyKlBBR0VfU0laRSk7CiAJCWlmIChyYykKIAkJCS8qIHVzZXIgd2lsbCByZWNlaXZlIHNpZ3NlZ3YsIGV4aXQgdG8gdXNlciAqLwotCQkJcmMgPSAtRU5PVFNVUFA7CisJCQlyYyA9IC1FT1BOT1RTVVBQOwogCX0gZWxzZQotCQlyYyA9IC1FTk9UU1VQUDsKKwkJcmMgPSAtRU9QTk9UU1VQUDsKIAogCWlmIChyYykKIAkJVkNQVV9FVkVOVCh2Y3B1LCAyLCAidW5oYW5kbGVkIHZhbGlkaXR5IGludGVyY2VwdCBjb2RlICVkIiwKQEAgLTE4OSw3ICsxODksNyBAQAogCWhhbmRsZXIgPSBpbnN0cnVjdGlvbl9oYW5kbGVyc1t2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aXBhID4+IDhdOwogCWlmIChoYW5kbGVyKQogCQlyZXR1cm4gaGFuZGxlcih2Y3B1KTsKLQlyZXR1cm4gLUVOT1RTVVBQOworCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAogc3RhdGljIGludCBoYW5kbGVfcHJvZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0yMDYsNyArMjA2LDcgQEAKIAlyYyA9IGhhbmRsZV9pbnN0cnVjdGlvbih2Y3B1KTsKIAlyYzIgPSBoYW5kbGVfcHJvZyh2Y3B1KTsKIAotCWlmIChyYyA9PSAtRU5PVFNVUFApCisJaWYgKHJjID09IC1FT1BOT1RTVVBQKQogCQl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+aWNwdGNvZGUgPSAweDA0OwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpAQCAtMjMxLDkgKzIzMSw5IEBACiAJdTggY29kZSA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5pY3B0Y29kZTsKIAogCWlmIChjb2RlICYgMyB8fCAoY29kZSA+PiAyKSA+PSBBUlJBWV9TSVpFKGludGVyY2VwdF9mdW5jcykpCi0JCXJldHVybiAtRU5PVFNVUFA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlmdW5jID0gaW50ZXJjZXB0X2Z1bmNzW2NvZGUgPj4gMl07CiAJaWYgKGZ1bmMpCiAJCXJldHVybiBmdW5jKHZjcHUpOwotCXJldHVybiAtRU5PVFNVUFA7CisJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKaW5kZXggNDM0ODZjMi4uODM0Nzc0ZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYworKysgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCkBAIC0xMCwxMiArMTAsMTIgQEAKICAqICAgIEF1dGhvcihzKTogQ2Fyc3RlbiBPdHRlIDxjb3R0ZUBkZS5pYm0uY29tPgogICovCiAKLSNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAia3ZtLXMzOTAuaCIKICNpbmNsdWRlICJnYWNjZXNzLmgiCiAKQEAgLTE4Nyw4ICsxODcsOCBAQAogCQlpZiAocmMgPT0gLUVGQVVMVCkKIAkJCWV4Y2VwdGlvbiA9IDE7CiAKLQkJcmMgPSBwdXRfZ3Vlc3RfdTY0KHZjcHUsIF9fTENfUEZBVUxUX0lOVFBBUk0sCi0JCQlpbnRpLT5leHQuZXh0X3BhcmFtczIpOworCQlyYyA9IHB1dF9ndWVzdF91NjQodmNwdSwgX19MQ19FWFRfUEFSQU1TMiwKKwkJCQkgICBpbnRpLT5leHQuZXh0X3BhcmFtczIpOwogCQlpZiAocmMgPT0gLUVGQVVMVCkKIAkJCWV4Y2VwdGlvbiA9IDE7CiAJCWJyZWFrOwpAQCAtMzQyLDcgKzM0Miw3IEBACiAJaWYgKHBzd19pbnRlcnJ1cHRzX2Rpc2FibGVkKHZjcHUpKSB7CiAJCVZDUFVfRVZFTlQodmNwdSwgMywgIiVzIiwgImRpc2FibGVkIHdhaXQiKTsKIAkJX191bnNldF9jcHVfaWRsZSh2Y3B1KTsKLQkJcmV0dXJuIC1FTk9UU1VQUDsgLyogZGlzYWJsZWQgd2FpdCAqLworCQlyZXR1cm4gLUVPUE5PVFNVUFA7IC8qIGRpc2FibGVkIHdhaXQgKi8KIAl9CiAKIAlpZiAocHN3X2V4dGludF9kaXNhYmxlZCh2Y3B1KSB8fApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IGY4YmNhZWYuLjNmYTBhMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYworKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL25taS5oPgpAQCAtNTQzLDcgKzU0NCw3IEBACiAJCXJjID0gLUVJTlRSOwogCX0KIAotCWlmIChyYyA9PSAtRU5PVFNVUFApIHsKKwlpZiAocmMgPT0gLUVPUE5PVFNVUFApIHsKIAkJLyogaW50ZXJjZXB0IGNhbm5vdCBiZSBoYW5kbGVkIGluLWtlcm5lbCwgcHJlcGFyZSBrdm0tcnVuICovCiAJCWt2bV9ydW4tPmV4aXRfcmVhc29uICAgICAgICAgPSBLVk1fRVhJVF9TMzkwX1NJRUlDOwogCQlrdm1fcnVuLT5zMzkwX3NpZWljLmljcHRjb2RlID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmljcHRjb2RlOwpAQCAtNjAzLDQ1ICs2MDQsNDUgQEAKIAl9IGVsc2UKIAkJcHJlZml4ID0gMDsKIAotCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCwgZnBfcmVncyksCisJaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCBmcF9yZWdzKSwKIAkJCXZjcHUtPmFyY2guZ3Vlc3RfZnByZWdzLmZwcnMsIDEyOCwgcHJlZml4KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWFfczM5MHgsIGdwX3JlZ3MpLAorCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYSwgZ3BfcmVncyksCiAJCQl2Y3B1LT5hcmNoLmd1ZXN0X2dwcnMsIDEyOCwgcHJlZml4KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWFfczM5MHgsIHBzdyksCisJaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCBwc3cpLAogCQkJJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5ncHN3LCAxNiwgcHJlZml4KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWFfczM5MHgsIHByZWZfcmVnKSwKKwlpZiAoX19ndWVzdGNvcHkodmNwdSwgYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWEsIHByZWZfcmVnKSwKIAkJCSZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+cHJlZml4LCA0LCBwcmVmaXgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWlmIChfX2d1ZXN0Y29weSh2Y3B1LAotCQkJYWRkciArIG9mZnNldG9mKHN0cnVjdCBzYXZlX2FyZWFfczM5MHgsIGZwX2N0cmxfcmVnKSwKKwkJCWFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCBmcF9jdHJsX3JlZyksCiAJCQkmdmNwdS0+YXJjaC5ndWVzdF9mcHJlZ3MuZnBjLCA0LCBwcmVmaXgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCwgdG9kX3JlZyksCisJaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCB0b2RfcmVnKSwKIAkJCSZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+dG9kcHIsIDQsIHByZWZpeCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhX3MzOTB4LCB0aW1lciksCisJaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCB0aW1lciksCiAJCQkmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmNwdXRtLCA4LCBwcmVmaXgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCwgY2xrX2NtcCksCisJaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsIGFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCBjbGtfY21wKSwKIAkJCSZ2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Y2tjLCA4LCBwcmVmaXgpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCwgYWNjX3JlZ3MpLAorCWlmIChfX2d1ZXN0Y29weSh2Y3B1LCBhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYSwgYWNjX3JlZ3MpLAogCQkJJnZjcHUtPmFyY2guZ3Vlc3RfYWNycywgNjQsIHByZWZpeCkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKF9fZ3Vlc3Rjb3B5KHZjcHUsCi0JCQlhZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkweCwgY3RybF9yZWdzKSwKKwkJCWFkZHIgKyBvZmZzZXRvZihzdHJ1Y3Qgc2F2ZV9hcmVhLCBjdHJsX3JlZ3MpLAogCQkJJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5nY3IsIDEyOCwgcHJlZml4KSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCmluZGV4IGQ0MjZhYWMuLjI4YzU1NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vcHJpdi5jCisrKyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCkBAIC0zMjMsNSArMzIzLDUgQEAKIAkJZWxzZQogCQkJcmV0dXJuIGhhbmRsZXIodmNwdSk7CiAJfQotCXJldHVybiAtRU5PVFNVUFA7CisJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9zaWdwLmMgYi9hcmNoL3MzOTAva3ZtL3NpZ3AuYwppbmRleCAxNWVlMTExLi4yNDFhNDg0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3NpZ3AuYworKysgYi9hcmNoL3MzOTAva3ZtL3NpZ3AuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJCXJjID0gMDsgLyogb3JkZXIgYWNjZXB0ZWQgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmMgPSAtRU5PVFNVUFA7CisJCXJjID0gLUVPUE5PVFNVUFA7CiAJfQogCXJldHVybiByYzsKIH0KQEAgLTI5Myw3ICsyOTMsNyBAQAogCQl2Y3B1LT5zdGF0Lmluc3RydWN0aW9uX3NpZ3BfcmVzdGFydCsrOwogCQkvKiB1c2VyIHNwYWNlIG11c3Qga25vdyBhYm91dCByZXN0YXJ0ICovCiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9UU1VQUDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAogCWlmIChyYyA8IDApCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL01ha2VmaWxlIGIvYXJjaC9zMzkwL2xpYi9NYWtlZmlsZQppbmRleCA5Nzk3NWVjLi5jZDU0YTFjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9saWIvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciBzMzkwLXNwZWNpZmljIGxpYnJhcnkgZmlsZXMuLgogIwogCi1saWIteSArPSBkZWxheS5vIHN0cmluZy5vIHVhY2Nlc3Nfc3RkLm8gdWFjY2Vzc19wdC5vCitsaWIteSArPSBkZWxheS5vIHN0cmluZy5vIHVhY2Nlc3Nfc3RkLm8gdWFjY2Vzc19wdC5vIHVzZXJjb3B5Lm8KIG9iai0kKENPTkZJR18zMkJJVCkgKz0gZGl2NjQubyBxcm5uZC5vIHVjbXBkaTIubwogbGliLSQoQ09ORklHXzY0QklUKSArPSB1YWNjZXNzX212Y29zLm8KIGxpYi0kKENPTkZJR19TTVApICs9IHNwaW5sb2NrLm8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvc3BpbmxvY2suYyBiL2FyY2gvczM5MC9saWIvc3BpbmxvY2suYwppbmRleCBjZmYzMjdmLi45MTc1NGZmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMKKysrIGIvYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jCkBAIC00MywxNiArNDMsMjQgQEAKIHsKIAlpbnQgY291bnQgPSBzcGluX3JldHJ5OwogCXVuc2lnbmVkIGludCBjcHUgPSB+c21wX3Byb2Nlc3Nvcl9pZCgpOworCXVuc2lnbmVkIGludCBvd25lcjsKIAogCXdoaWxlICgxKSB7Ci0JCWlmIChjb3VudC0tIDw9IDApIHsKLQkJCXVuc2lnbmVkIGludCBvd25lciA9IGxwLT5vd25lcl9jcHU7Ci0JCQlpZiAob3duZXIgIT0gMCkKLQkJCQlfcmF3X3lpZWxkX2NwdSh+b3duZXIpOwotCQkJY291bnQgPSBzcGluX3JldHJ5OworCQlvd25lciA9IGxwLT5vd25lcl9jcHU7CisJCWlmICghb3duZXIgfHwgc21wX3ZjcHVfc2NoZWR1bGVkKH5vd25lcikpIHsKKwkJCWZvciAoY291bnQgPSBzcGluX3JldHJ5OyBjb3VudCA+IDA7IGNvdW50LS0pIHsKKwkJCQlpZiAoYXJjaF9zcGluX2lzX2xvY2tlZChscCkpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJmxwLT5vd25lcl9jcHUsIDAsCisJCQkJCQkJICBjcHUpID09IDApCisJCQkJCXJldHVybjsKKwkJCX0KKwkJCWlmIChNQUNISU5FX0lTX0xQQVIpCisJCQkJY29udGludWU7CiAJCX0KLQkJaWYgKGFyY2hfc3Bpbl9pc19sb2NrZWQobHApKQotCQkJY29udGludWU7CisJCW93bmVyID0gbHAtPm93bmVyX2NwdTsKKwkJaWYgKG93bmVyKQorCQkJX3Jhd195aWVsZF9jcHUofm93bmVyKTsKIAkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPm93bmVyX2NwdSwgMCwgY3B1KSA9PSAwKQogCQkJcmV0dXJuOwogCX0KQEAgLTYzLDE3ICs3MSwyNyBAQAogewogCWludCBjb3VudCA9IHNwaW5fcmV0cnk7CiAJdW5zaWduZWQgaW50IGNwdSA9IH5zbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgaW50IG93bmVyOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXdoaWxlICgxKSB7Ci0JCWlmIChjb3VudC0tIDw9IDApIHsKLQkJCXVuc2lnbmVkIGludCBvd25lciA9IGxwLT5vd25lcl9jcHU7Ci0JCQlpZiAob3duZXIgIT0gMCkKLQkJCQlfcmF3X3lpZWxkX2NwdSh+b3duZXIpOwotCQkJY291bnQgPSBzcGluX3JldHJ5OworCQlvd25lciA9IGxwLT5vd25lcl9jcHU7CisJCWlmICghb3duZXIgfHwgc21wX3ZjcHVfc2NoZWR1bGVkKH5vd25lcikpIHsKKwkJCWZvciAoY291bnQgPSBzcGluX3JldHJ5OyBjb3VudCA+IDA7IGNvdW50LS0pIHsKKwkJCQlpZiAoYXJjaF9zcGluX2lzX2xvY2tlZChscCkpCisJCQkJCWNvbnRpbnVlOworCQkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCQkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPm93bmVyX2NwdSwgMCwKKwkJCQkJCQkgIGNwdSkgPT0gMCkKKwkJCQkJcmV0dXJuOworCQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJCX0KKwkJCWlmIChNQUNISU5FX0lTX0xQQVIpCisJCQkJY29udGludWU7CiAJCX0KLQkJaWYgKGFyY2hfc3Bpbl9pc19sb2NrZWQobHApKQotCQkJY29udGludWU7CisJCW93bmVyID0gbHAtPm93bmVyX2NwdTsKKwkJaWYgKG93bmVyKQorCQkJX3Jhd195aWVsZF9jcHUofm93bmVyKTsKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPm93bmVyX2NwdSwgMCwgY3B1KSA9PSAwKQogCQkJcmV0dXJuOwpAQCAtMTAwLDggKzExOCwxMSBAQAogdm9pZCBhcmNoX3NwaW5fcmVsYXgoYXJjaF9zcGlubG9ja190ICpsb2NrKQogewogCXVuc2lnbmVkIGludCBjcHUgPSBsb2NrLT5vd25lcl9jcHU7Ci0JaWYgKGNwdSAhPSAwKQotCQlfcmF3X3lpZWxkX2NwdSh+Y3B1KTsKKwlpZiAoY3B1ICE9IDApIHsKKwkJaWYgKE1BQ0hJTkVfSVNfVk0gfHwgTUFDSElORV9JU19LVk0gfHwKKwkJICAgICFzbXBfdmNwdV9zY2hlZHVsZWQofmNwdSkpCisJCQlfcmF3X3lpZWxkX2NwdSh+Y3B1KTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MKGFyY2hfc3Bpbl9yZWxheCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvdXNlcmNvcHkuYyBiL2FyY2gvczM5MC9saWIvdXNlcmNvcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGIzNjNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2xpYi91c2VyY29weS5jCkBAIC0wLDAgKzEsOCBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorCit2b2lkIGNvcHlfZnJvbV91c2VyX292ZXJmbG93KHZvaWQpCit7CisJV0FSTigxLCAiQnVmZmVyIG92ZXJmbG93IGRldGVjdGVkIVxuIik7Cit9CitFWFBPUlRfU1lNQk9MKGNvcHlfZnJvbV91c2VyX292ZXJmbG93KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9leHRtZW0uYyBiL2FyY2gvczM5MC9tbS9leHRtZW0uYwppbmRleCA1Yzg0NTcxLi42NDA5ZmQ1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZXh0bWVtLmMKKysrIGIvYXJjaC9zMzkwL21tL2V4dG1lbS5jCkBAIC0zMDksNyArMzA5LDcgQEAKIAl9CiAjZW5kaWYKIAlpZiAocW91dC0+c2VnY250ID4gNikgewotCQlyYyA9IC1FTk9UU1VQUDsKKwkJcmMgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKQEAgLTMyNCwxMSArMzI0LDExIEBACiAJCWZvciAoaT0wOyBpPHFvdXQtPnNlZ2NudDsgaSsrKSB7CiAJCQlpZiAoKChxb3V0LT5yYW5nZVtpXS5zdGFydCAmIDB4ZmYpICE9IFNFR19UWVBFX0VXKSAmJgogCQkJICAgICgocW91dC0+cmFuZ2VbaV0uc3RhcnQgJiAweGZmKSAhPSBTRUdfVFlQRV9FTikpIHsKLQkJCQlyYyA9IC1FTk9UU1VQUDsKKwkJCQlyYyA9IC1FT1BOT1RTVVBQOwogCQkJCWdvdG8gb3V0X2ZyZWU7CiAJCQl9CiAJCQlpZiAoc3RhcnQgIT0gcW91dC0+cmFuZ2VbaV0uc3RhcnQgPj4gUEFHRV9TSElGVCkgewotCQkJCXJjID0gLUVOT1RTVVBQOworCQkJCXJjID0gLUVPUE5PVFNVUFA7CiAJCQkJZ290byBvdXRfZnJlZTsKIAkJCX0KIAkJCXN0YXJ0ID0gKHFvdXQtPnJhbmdlW2ldLmVuZCA+PiBQQUdFX1NISUZUKSArIDE7CkBAIC0zNTcsNyArMzU3LDcgQEAKICAqIC1FTk9TWVMgIDogd2UgYXJlIG5vdCBydW5uaW5nIG9uIFZNCiAgKiAtRUlPICAgICA6IGNvdWxkIG5vdCBwZXJmb3JtIHF1ZXJ5IGRpYWdub3NlCiAgKiAtRU5PRU5UICA6IG5vIHN1Y2ggc2VnbWVudAotICogLUVOT1RTVVBQOiBtdWx0aS1wYXJ0IHNlZ21lbnQgY2Fubm90IGJlIHVzZWQgd2l0aCBsaW51eAorICogLUVPUE5PVFNVUFA6IG11bHRpLXBhcnQgc2VnbWVudCBjYW5ub3QgYmUgdXNlZCB3aXRoIGxpbnV4CiAgKiAtRU5PTUVNICA6IG91dCBvZiBtZW1vcnkKICAqIDAgLi4gNiAgIDogdHlwZSBvZiBzZWdtZW50IGFzIGRlZmluZWQgaW4gaW5jbHVkZS9hc20tczM5MC9leHRtZW0uaAogICovCkBAIC01MTUsNyArNTE1LDcgQEAKICAqIC1FTk9TWVMgIDogd2UgYXJlIG5vdCBydW5uaW5nIG9uIFZNCiAgKiAtRUlPICAgICA6IGNvdWxkIG5vdCBwZXJmb3JtIHF1ZXJ5IG9yIGxvYWQgZGlhZ25vc2UKICAqIC1FTk9FTlQgIDogbm8gc3VjaCBzZWdtZW50Ci0gKiAtRU5PVFNVUFA6IG11bHRpLXBhcnQgc2VnbWVudCBjYW5ub3QgYmUgdXNlZCB3aXRoIGxpbnV4CisgKiAtRU9QTk9UU1VQUDogbXVsdGktcGFydCBzZWdtZW50IGNhbm5vdCBiZSB1c2VkIHdpdGggbGludXgKICAqIC1FTk9TUEMgIDogc2VnbWVudCBjYW5ub3QgYmUgdXNlZCAob3ZlcmxhcHMgd2l0aCBzdG9yYWdlKQogICogLUVCVVNZICAgOiBzZWdtZW50IGNhbiB0ZW1wb3JhcmlseSBub3QgYmUgdXNlZCAob3ZlcmxhcHMgd2l0aCBkY3NzKQogICogLUVSQU5HRSAgOiBzZWdtZW50IGNhbm5vdCBiZSB1c2VkIChleGNlZWRzIGtlcm5lbCBtYXBwaW5nIHJhbmdlKQpAQCAtNzQyLDcgKzc0Miw3IEBACiAJCXByX2VycigiTG9hZGluZyBvciBxdWVyeWluZyBEQ1NTICVzIHJlc3VsdGVkIGluIGEgIgogCQkgICAgICAgImhhcmR3YXJlIGVycm9yXG4iLCBzZWdfbmFtZSk7CiAJCWJyZWFrOwotCWNhc2UgLUVOT1RTVVBQOgorCWNhc2UgLUVPUE5PVFNVUFA6CiAJCXByX2VycigiRENTUyAlcyBoYXMgbXVsdGlwbGUgcGFnZSByYW5nZXMgYW5kIGNhbm5vdCBiZSAiCiAJCSAgICAgICAibG9hZGVkIG9yIHF1ZXJpZWRcbiIsIHNlZ19uYW1lKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCmluZGV4IGZjMTAyZTcuLjMwNDBkN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3MzOTBfZXh0Lmg+CkBAIC01OSwxNSArNjAsMTMgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotI2lmZGVmIENPTkZJR19LUFJPQkVTCiAJLyoga3Byb2JlX3J1bm5pbmcoKSBuZWVkcyBzbXBfcHJvY2Vzc29yX2lkKCkgKi8KLQlpZiAoIXVzZXJfbW9kZShyZWdzKSkgeworCWlmIChrcHJvYmVzX2J1aWx0X2luKCkgJiYgIXVzZXJfbW9kZShyZWdzKSkgewogCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJaWYgKGtwcm9iZV9ydW5uaW5nKCkgJiYga3Byb2JlX2ZhdWx0X2hhbmRsZXIocmVncywgMTQpKQogCQkJcmV0ID0gMTsKIAkJcHJlZW1wdF9lbmFibGUoKTsKIAl9Ci0jZW5kaWYKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vaW5pdC5jIGIvYXJjaC9zMzkwL21tL2luaXQuYwppbmRleCA3NjU2NDc5Li5kNTg2NWU0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vaW5pdC5jCisrKyBiL2FyY2gvczM5MC9tbS9pbml0LmMKQEAgLTE0MywzMyArMTQzLDM0IEBACiB9CiAjZW5kaWYKIAotdm9pZCBmcmVlX2luaXRtZW0odm9pZCkKK3ZvaWQgZnJlZV9pbml0X3BhZ2VzKGNoYXIgKndoYXQsIHVuc2lnbmVkIGxvbmcgYmVnaW4sIHVuc2lnbmVkIGxvbmcgZW5kKQogewotICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gYmVnaW47CiAKLSAgICAgICAgYWRkciA9ICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2JlZ2luKTsKLSAgICAgICAgZm9yICg7IGFkZHIgPCAodW5zaWduZWQgbG9uZykoJl9faW5pdF9lbmQpOyBhZGRyICs9IFBBR0VfU0laRSkgeworCWlmIChiZWdpbiA+PSBlbmQpCisJCXJldHVybjsKKwlmb3IgKDsgYWRkciA8IGVuZDsgYWRkciArPSBQQUdFX1NJWkUpIHsKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGFkZHIpKTsKIAkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSk7Ci0JCW1lbXNldCgodm9pZCAqKWFkZHIsIFBPSVNPTl9GUkVFX0lOSVRNRU0sIFBBR0VfU0laRSk7CisJCW1lbXNldCgodm9pZCAqKShhZGRyICYgUEFHRV9NQVNLKSwgUE9JU09OX0ZSRUVfSU5JVE1FTSwKKwkJICAgICAgIFBBR0VfU0laRSk7CiAJCWZyZWVfcGFnZShhZGRyKTsKIAkJdG90YWxyYW1fcGFnZXMrKzsKLSAgICAgICAgfQotICAgICAgICBwcmludGsgKCJGcmVlaW5nIHVudXNlZCBrZXJuZWwgbWVtb3J5OiAlbGRrIGZyZWVkXG4iLAotCQkoKHVuc2lnbmVkIGxvbmcpJl9faW5pdF9lbmQgLSAodW5zaWduZWQgbG9uZykmX19pbml0X2JlZ2luKSA+PiAxMCk7CisJfQorCXByaW50ayhLRVJOX0lORk8gIkZyZWVpbmcgJXM6ICVsdWsgZnJlZWRcbiIsIHdoYXQsIChlbmQgLSBiZWdpbikgPj4gMTApOworfQorCit2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQoreworCWZyZWVfaW5pdF9wYWdlcygidW51c2VkIGtlcm5lbCBtZW1vcnkiLAorCQkJKHVuc2lnbmVkIGxvbmcpJl9faW5pdF9iZWdpbiwKKwkJCSh1bnNpZ25lZCBsb25nKSZfX2luaXRfZW5kKTsKIH0KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogdm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0gICAgICAgIGlmIChzdGFydCA8IGVuZCkKLSAgICAgICAgICAgICAgICBwcmludGsgKCJGcmVlaW5nIGluaXRyZCBtZW1vcnk6ICVsZGsgZnJlZWRcbiIsIChlbmQgLSBzdGFydCkgPj4gMTApOwotICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IFBBR0VfU0laRSkgewotICAgICAgICAgICAgICAgIENsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShzdGFydCkpOwotICAgICAgICAgICAgICAgIGluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKLSAgICAgICAgICAgICAgICBmcmVlX3BhZ2Uoc3RhcnQpOwotICAgICAgICAgICAgICAgIHRvdGFscmFtX3BhZ2VzKys7Ci0gICAgICAgIH0KKwlmcmVlX2luaXRfcGFnZXMoImluaXRyZCBtZW1vcnkiLCBzdGFydCwgZW5kKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDY3NDkzNGIuLmNjZjM4ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yNzIsOCArMjcyLDkgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3MsCXB0ZV90IHB0ZSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQorCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiB7CisJcHRlX3QgcHRlID0gKnB0ZXA7CiAJX191cGRhdGVfdGxiKHZtYSwgYWRkcmVzcywgcHRlKTsKIAlfX3VwZGF0ZV9jYWNoZSh2bWEsIGFkZHJlc3MsIHB0ZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL21tL2luaXQuYyBiL2FyY2gvc2NvcmUvbW0vaW5pdC5jCmluZGV4IGRmYWY0NTguLjdmMDAxYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2NvcmUvbW0vaW5pdC5jCisrKyBiL2FyY2gvc2NvcmUvbW0vaW5pdC5jCkBAIC01OSw3ICs1OSw3IEBACiB9CiAKICNpZm5kZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKLXN0YXRpYyBpbnQgX19pbml0IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKQoraW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKQogewogCWlmIChwYWdlbnIgPj0gbWluX2xvd19wZm4gJiYgcGFnZW5yIDwgbWF4X2xvd19wZm4pCiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IDIxMjFmYmIuLjA1Y2VmNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTEzLDcgKzEzLDYgQEAKIAlzZWxlY3QgSEFWRV9MTUIKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQogCXNlbGVjdCBIQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UCi0Jc2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UIGlmIE1NVQogCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCiAJc2VsZWN0IEhBVkVfRE1BX0FQSV9ERUJVRwogCXNlbGVjdCBIQVZFX0RNQV9BVFRSUwpAQCAtMjIsNiArMjEsNyBAQAogCXNlbGVjdCBIQVZFX0tFUk5FTF9HWklQCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0xaTUEKKwlzZWxlY3QgSEFWRV9LRVJORUxfTFpPCiAJc2VsZWN0IEhBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUwogCXNlbGVjdCBSVENfTElCCiAJc2VsZWN0IEdFTkVSSUNfQVRPTUlDNjQKQEAgLTM1LDYgKzM1LDcgQEAKIAlkZWZfYm9vbCBBUkNIID0gInNoIgogCXNlbGVjdCBIQVZFX0tQUk9CRVMKIAlzZWxlY3QgSEFWRV9LUkVUUFJPQkVTCisJc2VsZWN0IEhBVkVfSU9SRU1BUF9QUk9UIGlmIE1NVSAmJiAhWDJUTEIKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIKIAlzZWxlY3QgSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRAogCXNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFCkBAIC00Miw2ICs0Myw4IEBACiAJc2VsZWN0IEhBVkVfRlRSQUNFX05NSV9FTlRFUiBpZiBEWU5BTUlDX0ZUUkFDRQogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCXNlbGVjdCBIQVZFX0FSQ0hfS0dEQgorCXNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQKKwlzZWxlY3QgUEVSRl9FVkVOVFMgaWYgSEFWRV9IV19CUkVBS1BPSU5UCiAJc2VsZWN0IEFSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaWYgTU1VCiAKIGNvbmZpZyBTVVBFUkg2NApAQCAtNzgsMTIgKzgxLDEzIEBACiBjb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAJZGVmX2Jvb2wgeQogCi1jb25maWcgR0VORVJJQ19JUlFfUFJPQkUKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBJUlFfUEVSX0NQVQogCWRlZl9ib29sIHkKIAorY29uZmlnIFNQQVJTRV9JUlEKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBTVVBFUkgzMgorCiBjb25maWcgR0VORVJJQ19HUElPCiAJZGVmX2Jvb2wgbgogCkBAIC01NDgsOCArNTUyLDcgQEAKIAkJCSAgICAgIENQVV9TVUJUWVBFX1NINzIwMyB8fCBcCiAJCQkgICAgICBDUFVfU1VCVFlQRV9TSDcyMDYgfHwgXAogCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3MjYzIHx8IFwKLQkJCSAgICAgIENQVV9TVUJUWVBFX01YRyAgICB8fCBcCi0JCQkgICAgICBDUFVfU1VCVFlQRV9TSDc3ODYKKwkJCSAgICAgIENQVV9TVUJUWVBFX01YRwogCWRlZmF1bHQgIjYwMDAwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDc3NTEgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxUgogCWRlZmF1bHQgIjY2MDAwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDRfMjAyCiAJZGVmYXVsdCAiNTAwMDAwMDAiCkBAIC01NjMsNyArNTY2LDggQEAKIAogY29uZmlnIFNIX0NMS19DUEdfTEVHQUNZCiAJZGVwZW5kcyBvbiBTSF9DTEtfQ1BHCi0JZGVmX2Jvb2wgeSBpZiAhQ1BVX1NVQlRZUEVfU0g3Nzg1ICYmICFBUkNIX1NITU9CSUxFCisJZGVmX2Jvb2wgeSBpZiAhQ1BVX1NVQlRZUEVfU0g3Nzg1ICYmICFBUkNIX1NITU9CSUxFICYmIFwKKwkJICAgICAgIUNQVV9TVUJUWVBFX1NINzc4NgogCiBjb25maWcgU0hfQ0xLX01ECiAJaW50ICJDUFUgTW9kZSBQaW4gU2V0dGluZyIKQEAgLTcyNSwxOCArNzI5LDYgQEAKIAkgIExMU0MsIHRoaXMgc2hvdWxkIGJlIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG90aGVyIGFsdGVybmF0aXZlIG9mCiAJICBkaXNhYmxpbmcgaW50ZXJydXB0cyBhcm91bmQgdGhlIGF0b21pYyBzZXF1ZW5jZS4KIAotY29uZmlnIFNQQVJTRV9JUlEKLQlib29sICJTdXBwb3J0IHNwYXJzZSBpcnEgbnVtYmVyaW5nIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHNwYXJzZSBpcnFzLiBUaGlzIGlzIHVzZWZ1bCBpbiBnZW5lcmFsCi0JICBhcyBtb3N0IENQVXMgaGF2ZSBhIGZhaXJseSBzcGFyc2UgYXJyYXkgb2YgSVJRIHZlY3RvcnMsIHdoaWNoCi0JICB0aGUgaXJxX2Rlc2MgdGhlbiBtYXBzIGRpcmVjdGx5IG9uIHRvLiBTeXN0ZW1zIHdpdGggYSBoaWdoCi0JICBudW1iZXIgb2Ygb2ZmLWNoaXAgSVJRcyB3aWxsIHdhbnQgdG8gdHJlYXQgdGhpcyBhcwotCSAgZXhwZXJpbWVudGFsIHVudGlsIHRoZXkgaGF2ZSBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQuCi0KLQkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8gaGVyZSwgc2F5IE4uCi0KIGVuZG1lbnUKIAogbWVudSAiQm9vdCBvcHRpb25zIgpAQCAtODIyLDExICs4MTQsMTUgQEAKIGNvbmZpZyBQQ0kKIAlib29sICJQQ0kgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNZU19TVVBQT1JUU19QQ0kKKwlzZWxlY3QgUENJX0RPTUFJTlMKIAloZWxwCiAJICBGaW5kIG91dCB3aGV0aGVyIHlvdSBoYXZlIGEgUENJIG1vdGhlcmJvYXJkLiBQQ0kgaXMgdGhlIG5hbWUgb2YgYQogCSAgYnVzIHN5c3RlbSwgaS5lLiB0aGUgd2F5IHRoZSBDUFUgdGFsa3MgdG8gdGhlIG90aGVyIHN0dWZmIGluc2lkZQogCSAgeW91ciBib3guIElmIHlvdSBoYXZlIFBDSSwgc2F5IFksIG90aGVyd2lzZSBOLgogCitjb25maWcgUENJX0RPTUFJTlMKKwlib29sCisKIHNvdXJjZSAiZHJpdmVycy9wY2kvcGNpZS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvcGNpL0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcuY3B1IGIvYXJjaC9zaC9LY29uZmlnLmNwdQppbmRleCBjZDZlM2VhLi5kZGYwOTZjIDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcuY3B1CisrKyBiL2FyY2gvc2gvS2NvbmZpZy5jcHUKQEAgLTY4LDcgKzY4LDggQEAKIAogY29uZmlnIFNQRUNVTEFUSVZFX0VYRUNVVElPTgogCWJvb2wgIlNwZWN1bGF0aXZlIHN1YnJvdXRpbmUgcmV0dXJuIgotCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzgwICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3ODAgfHwgQ1BVX1NVQlRZUEVfU0g3Nzg1IHx8IENQVV9TVUJUWVBFX1NINzc4NgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBhIHNwZWN1bGF0aXZlIGluc3RydWN0aW9uIGZldGNoIGZvcgogCSAgc3Vicm91dGluZSByZXR1cm4uIFRoZXJlIGFyZSB2YXJpb3VzIHBpdGZhbGxzIGFzc29jaWF0ZWQgd2l0aApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9NYWtlZmlsZSBiL2FyY2gvc2gvTWFrZWZpbGUKaW5kZXggZGI5MTkyNS4uNTg4NTc5YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL01ha2VmaWxlCkBAIC04Myw2ICs4Myw3IEBACiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU0hfNzcyNF9TT0xVVElPTl9FTkdJTkUpCTo9IHVJbWFnZQogZGVmYXVsdGltYWdlLSQoQ09ORklHX1NIXzcyMDZfU09MVVRJT05fRU5HSU5FKQk6PSB2bWxpbnV4CiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU0hfNzYxOV9TT0xVVElPTl9FTkdJTkUpCTo9IHZtbGludXgKK2RlZmF1bHRpbWFnZS0kKENPTkZJR19TSF9TREs3Nzg2KQkJOj0gdm1saW51eC5iaW4KIAogIyBTZXQgc29tZSBzZW5zaWJsZSBLYnVpbGQgZGVmYXVsdHMKIEtCVUlMRF9JTUFHRQkJOj0gJChkZWZhdWx0aW1hZ2UteSkKQEAgLTE0MywxMSArMTQ0LDExIEBACiBtYWNoZGlyLSQoQ09ORklHX1NIX0tGUjJSMDkpCQkJKz0gbWFjaC1rZnIycjA5CiBtYWNoZGlyLSQoQ09ORklHX1NIX0VDT1ZFQykJCQkrPSBtYWNoLWVjb3ZlYzI0CiBtYWNoZGlyLSQoQ09ORklHX1NIX1NESzc3ODApCQkJKz0gbWFjaC1zZGs3NzgwCittYWNoZGlyLSQoQ09ORklHX1NIX1NESzc3ODYpCQkJKz0gbWFjaC1zZGs3Nzg2CiBtYWNoZGlyLSQoQ09ORklHX1NIX1gzUFJPVE8pCQkJKz0gbWFjaC14M3Byb3RvCiBtYWNoZGlyLSQoQ09ORklHX1NIX1NINzc2M1JEUCkJCQkrPSBtYWNoLXNoNzc2M3JkcAogbWFjaGRpci0kKENPTkZJR19TSF9TSDQyMDJfTUlDUk9ERVYpCQkrPSBtYWNoLW1pY3JvZGV2CiBtYWNoZGlyLSQoQ09ORklHX1NIX0xBTkRJU0spCQkJKz0gbWFjaC1sYW5kaXNrCi1tYWNoZGlyLSQoQ09ORklHX1NIX1RJVEFOKQkJCSs9IG1hY2gtdGl0YW4KIG1hY2hkaXItJChDT05GSUdfU0hfTEJPWF9SRTIpCQkJKz0gbWFjaC1sYm94cmUyCiBtYWNoZGlyLSQoQ09ORklHX1NIX0NBWU1BTikJCQkrPSBtYWNoLWNheW1hbgogbWFjaGRpci0kKENPTkZJR19TSF9SU0spCQkJKz0gbWFjaC1yc2sKQEAgLTIwMyw4ICsyMDQsOSBAQAogbGlicy0kKENPTkZJR19TVVBFUkgzMikJCTo9IGFyY2gvc2gvbGliLwkkKGxpYnMteSkKIGxpYnMtJChDT05GSUdfU1VQRVJINjQpCQk6PSBhcmNoL3NoL2xpYjY0LyAkKGxpYnMteSkKIAotQk9PVF9UQVJHRVRTID0gdUltYWdlIHVJbWFnZS5iejIgdUltYWdlLmd6IHVJbWFnZS5sem1hIHVJbWFnZS5zcmVjIHVJbWFnZS5iaW4gXAotCSAgICAgICB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlCitCT09UX1RBUkdFVFMgPSB1SW1hZ2UgdUltYWdlLmJ6MiB1SW1hZ2UuZ3ogdUltYWdlLmx6bWEgdUltYWdlLmx6byBcCisJICAgICAgIHVJbWFnZS5zcmVjIHVJbWFnZS5iaW4gekltYWdlIHZtbGludXguYmluIHZtbGludXguc3JlYyBcCisJICAgICAgIHJvbUltYWdlCiBQSE9OWSArPSAkKEJPT1RfVEFSR0VUUykKIAogYWxsOiAkKEtCVUlMRF9JTUFHRSkKQEAgLTIyNSwxMCArMjI3LDEyIEBACiAJQGVjaG8gJyAgekltYWdlIAkgICAgICAgICAgIC0gQ29tcHJlc3NlZCBrZXJuZWwgaW1hZ2UnCiAJQGVjaG8gJyAgcm9tSW1hZ2UJICAgICAgICAgICAtIENvbXByZXNzZWQgUk9NIGltYWdlLCBpZiBzdXBwb3J0ZWQnCiAJQGVjaG8gJyAgdm1saW51eC5zcmVjCSAgICAgICAgICAgLSBDcmVhdGUgYW4gRUxGIFMtcmVjb3JkJworCUBlY2hvICcgIHZtbGludXguYmluCSAgICAgICAgICAgLSBDcmVhdGUgYW4gdW5jb21wcmVzc2VkIGJpbmFyeSBpbWFnZScKIAlAZWNobyAnKiB1SW1hZ2UgIAkgICAgICAgICAgIC0gQWxpYXMgdG8gYm9vdGFibGUgVS1Cb290IGltYWdlJwogCUBlY2hvICcgIHVJbWFnZS5zcmVjCSAgICAgICAgICAgLSBDcmVhdGUgYW4gUy1yZWNvcmQgZm9yIFUtQm9vdCcKIAlAZWNobyAnICB1SW1hZ2UuYmluCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChiaW4pJwogCUBlY2hvICcqIHVJbWFnZS5negkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoZ3ppcCknCiAJQGVjaG8gJyAgdUltYWdlLmJ6MgkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoYnppcDIpJwogCUBlY2hvICcgIHVJbWFnZS5sem1hCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChsem1hKScKKwlAZWNobyAnICB1SW1hZ2UubHpvCSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290IChsem8pJwogZW5kZWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL0tjb25maWcgYi9hcmNoL3NoL2JvYXJkcy9LY29uZmlnCmluZGV4IGFlZGQ5ZGUuLjkzOGU4N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL0tjb25maWcKKysrIGIvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZwpAQCAtMTUwLDYgKzE1MCwxNCBAQAogCSAgU2VsZWN0IFNESzc3ODAgaWYgY29uZmlndXJpbmcgZm9yIGEgUmVuZXNhcyBTSDc3ODAgU0RLNzc4MFIzCiAJICBldmFsdWF0aW9uIGJvYXJkLgogCitjb25maWcgU0hfU0RLNzc4NgorCWJvb2wgIlNESzc3ODYiCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3ODYKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX1BDSQorCWhlbHAKKwkgIFNlbGVjdCBTREs3Nzg2IGlmIGNvbmZpZ3VyaW5nIGZvciBhIFJlbmVzYXMgVGVjaG5vbG9neSBFdXJvcGUKKwkgIFNINzc4Ni02NW5tIGJvYXJkLgorCiBjb25maWcgU0hfSElHSExBTkRFUgogCWJvb2wgIkhpZ2hsYW5kZXIiCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3ODAgfHwgQ1BVX1NVQlRZUEVfU0g3Nzg1CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCmluZGV4IGNlMGYyNjMuLjRmOTBmOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCkBAIC04LDMgKzgsNCBAQAogb2JqLSQoQ09ORklHX1NIX0VET1NLNzc2MCkJKz0gYm9hcmQtZWRvc2s3NzYwLm8KIG9iai0kKENPTkZJR19TSF9FU1BUKQkJKz0gYm9hcmQtZXNwdC5vCiBvYmotJChDT05GSUdfU0hfUE9MQVJJUykJKz0gYm9hcmQtcG9sYXJpcy5vCitvYmotJChDT05GSUdfU0hfVElUQU4pCQkrPSBib2FyZC10aXRhbi5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1tYWdpY3BhbmVscjIuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jCmluZGV4IDk5ZmZjNWYuLmVmYmE0NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgogI2luY2x1ZGUgPGNwdS9zaDc3MjAuaD4KIAotI2RlZmluZSBMQU45MTE1X1JFQURZCShjdHJsX2lubCgweEE4MDAwMDg0VUwpICYgMHgwMDAwMDAwMVVMKQorI2RlZmluZSBMQU45MTE1X1JFQURZCShfX3Jhd19yZWFkbCgweEE4MDAwMDg0VUwpICYgMHgwMDAwMDAwMVVMKQogCiAvKiBQcmVmZXIgY21kbGluZSBvdmVyIFJlZEJvb3QgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpwcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgIlJlZEJvb3QiLCBOVUxMIH07CkBAIC02MCwzMyArNjAsMzMgQEAKIHsKIAkvKiBDUzI6IExBTiAoMHgwODAwMDAwMCAtIDB4MGJmZmZmZmYpICovCiAJLyogbm8gaWRsZSBjeWNsZXMsIG5vcm1hbCBzcGFjZSwgOCBiaXQgZGF0YSBidXMgKi8KLQljdHJsX291dGwoMHgzNmRiMDQwMCwgQ1MyQkNSKTsKKwlfX3Jhd193cml0ZWwoMHgzNmRiMDQwMCwgQ1MyQkNSKTsKIAkvKiAoU1c6MS41IFdSOjMgSFc6MS41KSwgZXh0LiB3YWl0ICovCi0JY3RybF9vdXRsKDB4MDAwMDAzYzAsIENTMldDUik7CisJX19yYXdfd3JpdGVsKDB4MDAwMDAzYzAsIENTMldDUik7CiAKIAkvKiBDUzQ6IENBTjEgKDB4YjAwMDAwMDAgLSAweGIzZmZmZmZmKSAqLwogCS8qIG5vIGlkbGUgY3ljbGVzLCBub3JtYWwgc3BhY2UsIDggYml0IGRhdGEgYnVzICovCi0JY3RybF9vdXRsKDB4MDAwMDAyMDAsIENTNEJDUik7CisJX19yYXdfd3JpdGVsKDB4MDAwMDAyMDAsIENTNEJDUik7CiAJLyogKFNXOjEuNSBXUjozIEhXOjEuNSksIGV4dC4gd2FpdCAqLwotCWN0cmxfb3V0bCgweDAwMTAwOTgxLCBDUzRXQ1IpOworCV9fcmF3X3dyaXRlbCgweDAwMTAwOTgxLCBDUzRXQ1IpOwogCiAJLyogQ1M1YTogQ0FOMiAoMHhiNDAwMDAwMCAtIDB4YjVmZmZmZmYpICovCiAJLyogbm8gaWRsZSBjeWNsZXMsIG5vcm1hbCBzcGFjZSwgOCBiaXQgZGF0YSBidXMgKi8KLQljdHJsX291dGwoMHgwMDAwMDIwMCwgQ1M1QUJDUik7CisJX19yYXdfd3JpdGVsKDB4MDAwMDAyMDAsIENTNUFCQ1IpOwogCS8qIChTVzoxLjUgV1I6MyBIVzoxLjUpLCBleHQuIHdhaXQgKi8KLQljdHJsX291dGwoMHgwMDEwMDk4MSwgQ1M1QVdDUik7CisJX19yYXdfd3JpdGVsKDB4MDAxMDA5ODEsIENTNUFXQ1IpOwogCiAJLyogQ1M1YjogQ0FOMyAoMHhiNjAwMDAwMCAtIDB4YjdmZmZmZmYpICovCiAJLyogbm8gaWRsZSBjeWNsZXMsIG5vcm1hbCBzcGFjZSwgOCBiaXQgZGF0YSBidXMgKi8KLQljdHJsX291dGwoMHgwMDAwMDIwMCwgQ1M1QkJDUik7CisJX19yYXdfd3JpdGVsKDB4MDAwMDAyMDAsIENTNUJCQ1IpOwogCS8qIChTVzoxLjUgV1I6MyBIVzoxLjUpLCBleHQuIHdhaXQgKi8KLQljdHJsX291dGwoMHgwMDEwMDk4MSwgQ1M1QldDUik7CisJX19yYXdfd3JpdGVsKDB4MDAxMDA5ODEsIENTNUJXQ1IpOwogCiAJLyogQ1M2YTogUm90YXJ5ICgweGI4MDAwMDAwIC0gMHhiOWZmZmZmZikgKi8KIAkvKiBubyBpZGxlIGN5Y2xlcywgbm9ybWFsIHNwYWNlLCA4IGJpdCBkYXRhIGJ1cyAqLwotCWN0cmxfb3V0bCgweDAwMDAwMjAwLCBDUzZBQkNSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMDIwMCwgQ1M2QUJDUik7CiAJLyogKFNXOjEuNSBXUjozIEhXOjEuNSksIG5vIGV4dC4gd2FpdCAqLwotCWN0cmxfb3V0bCgweDAwMTAwOUMxLCBDUzZBV0NSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDEwMDlDMSwgQ1M2QVdDUik7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9wb3J0X211bHRpcGxleGluZyh2b2lkKQpAQCAtOTQsNzEgKzk0LDcxIEBACiAJLyogQTcgR1BPKExFRDgpOyAgICAgQTYgR1BPKExFRDcpOyAgICAgQTUgR1BPKExFRDYpOwkgIEE0IEdQTyhMRUQ1KTsKIAkgKiBBMyBHUE8oTEVENCk7ICAgICBBMiBHUE8oTEVEMyk7ICAgICBBMSBHUE8oTEVEMik7CSAgQTAgR1BPKExFRDEpOwogCSAqLwotCWN0cmxfb3V0dygweDU1NTUsIFBPUlRfUEFDUik7CS8qIDAxIDAxIDAxIDAxIDAxIDAxIDAxIDAxICovCisJX19yYXdfd3JpdGV3KDB4NTU1NSwgUE9SVF9QQUNSKTsJLyogMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEgKi8KIAogCS8qIEI3IEdQTyhSU1Q0KTsgICBCNiBHUE8oUlNUMyk7ICBCNSBHUE8oUlNUMik7ICAgIEI0IEdQTyhSU1QxKTsKIAkgKiBCMyBHUE8oUEIzKTsJICAgQjIgR1BPKFBCMik7CSAgQjEgR1BPKFBCMSk7CSAgIEIwIEdQTyhQQjApOwogCSAqLwotCWN0cmxfb3V0dygweDU1NTUsIFBPUlRfUEJDUik7CS8qIDAxIDAxIDAxIDAxIDAxIDAxIDAxIDAxICovCisJX19yYXdfd3JpdGV3KDB4NTU1NSwgUE9SVF9QQkNSKTsJLyogMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEgKi8KIAogCS8qIEM3IEdQTyhQQzcpOwkgIEM2IEdQTyhQQzYpOwkgIEM1IEdQTyhQQzUpOwkgICBDNCBHUE8oUEM0KTsKIAkgKiBDMyBMQ0RfREFUQTM7ICBDMiBMQ0RfREFUQTI7ICAgQzEgTENEX0RBVEExOwkgICBDMCBMQ0RfREFUQTA7CiAJICovCi0JY3RybF9vdXR3KDB4NTUwMCwgUE9SVF9QQ0NSKTsJLyogMDEgMDEgMDEgMDEgMDAgMDAgMDAgMDAgKi8KKwlfX3Jhd193cml0ZXcoMHg1NTAwLCBQT1JUX1BDQ1IpOwkvKiAwMSAwMSAwMSAwMSAwMCAwMCAwMCAwMCAqLwogCiAJLyogRDcgR1BPKFBENyk7CUQ2IEdQTyhQRDYpOwlENSBHUE8oUEQ1KTsJICAgRDQgR1BPKFBENCk7CiAJICogRDMgR1BPKFBEMyk7CUQyIEdQTyhQRDIpOwlEMSBHUE8oUEQxKTsJICAgRDAgR1BPKFBEMCk7CiAJICovCi0JY3RybF9vdXR3KDB4NTU1NSwgUE9SVF9QRENSKTsJLyogMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEgKi8KKwlfX3Jhd193cml0ZXcoMHg1NTU1LCBQT1JUX1BEQ1IpOwkvKiAwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSAqLwogCiAJLyogRTcgKHgpOwkgIEU2IEdQSShudSk7CSBFNSBHUEkobnUpOwkgIEU0IExDRF9NX0RJU1A7CiAJICogRTMgTENEX0NMMTsJICBFMiBMQ0RfQ0wyOwkgRTEgTENEX0RPTjsJICBFMCBMQ0RfRkxNOwogCSAqLwotCWN0cmxfb3V0dygweDNDMDAsIFBPUlRfUEVDUik7CS8qIDAwIDExIDExIDAwIDAwIDAwIDAwIDAwICovCisJX19yYXdfd3JpdGV3KDB4M0MwMCwgUE9SVF9QRUNSKTsJLyogMDAgMTEgMTEgMDAgMDAgMDAgMDAgMDAgKi8KIAogCS8qIEY3ICh4KTsJICAgICBGNiBEQTEoVkxDRCk7ICAgICBGNSBEQTAobmMpOwkgIEY0IEFOMzsKIAkgKiBGMyBBTjIoTUlEX0FEKTsgICBGMiBBTjEoRUFSVEhfQUQpOyBGMSBBTjAoVEVNUCk7CSAgRjAgR1BJKyhuYyk7CiAJICovCi0JY3RybF9vdXR3KDB4MDAwMiwgUE9SVF9QRkNSKTsJLyogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMTAgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAyLCBQT1JUX1BGQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAxMCAqLwogCiAJLyogRzcgKHgpOwkgIEc2IElSUTUoVE9VQ0hfQlVTWSk7IEc1IElSUTQoVE9VQ0hfSVJRKTsgRzQgR1BJKEtFWTIpOwogCSAqIEczIEdQSShLRVkxKTsgIEcyIEdQTyhMRUQxMSk7CUcxIEdQTyhMRUQxMCk7ICAgICBHMCBHUE8oTEVEOSk7CiAJICovCi0JY3RybF9vdXR3KDB4MDNENSwgUE9SVF9QR0NSKTsJLyogMDAgMDAgMDAgMTEgMTEgMDEgMDEgMDEgKi8KKwlfX3Jhd193cml0ZXcoMHgwM0Q1LCBQT1JUX1BHQ1IpOwkvKiAwMCAwMCAwMCAxMSAxMSAwMSAwMSAwMSAqLwogCiAJLyogSDcgKHgpOwkgICAgICBINiAvUkFTKEJSQVMpOwkgIEg1IC9DQVMoQkNBUyk7IEg0IENLRShCQ0tFKTsKIAkgKiBIMyBHUE8oRUFSVEhfT0ZGKTsgSDIgR1BPKEVBUlRIX1RFU1QpOyBIMSBVU0IyX1BXUjsJIEgwIFVTQjFfUFdSOwogCSAqLwotCWN0cmxfb3V0dygweDAwNTAsIFBPUlRfUEhDUik7CS8qIDAwIDAwIDAwIDAwIDAxIDAxIDAwIDAwICovCisJX19yYXdfd3JpdGV3KDB4MDA1MCwgUE9SVF9QSENSKTsJLyogMDAgMDAgMDAgMDAgMDEgMDEgMDAgMDAgKi8KIAogCS8qIEo3ICh4KTsJICBKNiBBVURDSzsJICAgSjUgQVNFQlJLQUs7CSAgICBKNCBBVURBVEEzOwogCSAqIEozIEFVREFUQTI7CSAgSjIgQVVEQVRBMTsJICAgSjEgQVVEQVRBMDsJICAgIEowIEFVRFNZTkM7CiAJICovCi0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QSkNSKTsJLyogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BKQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAqLwogCiAJLyogSzcgKHgpOwkgICAgSzYgKHgpOwkgICAgIEs1ICh4KTsJICAgSzQgKHgpOwogCSAqIEszIFBJTlQ3KC9QV1IyKTsgSzIgUElOVDYoL1BXUjEpOyBLMSBQSU5UNShudSk7IEswIFBJTlQ0KEZMQVNIX1JFQURZKQogCSAqLwotCWN0cmxfb3V0dygweDAwRkYsIFBPUlRfUEtDUik7CS8qIDAwIDAwIDAwIDAwIDExIDExIDExIDExICovCisJX19yYXdfd3JpdGV3KDB4MDBGRiwgUE9SVF9QS0NSKTsJLyogMDAgMDAgMDAgMDAgMTEgMTEgMTEgMTEgKi8KIAogCS8qIEw3IFRSU1Q7CSAgIEw2IFRNUzsJICAgICBMNSBURE87CQkgIEw0IFRESTsKIAkgKiBMMyBUQ0s7CSAgIEwyICh4KTsJICAgICBMMSAoeCk7CQkgIEwwICh4KTsKIAkgKi8KLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BMQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUExDUik7CS8qIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICovCiAKIAkvKiBNNyBHUE8oQ1VSUkVOVF9TSU5LKTsgICAgTTYgR1BPKFBXUl9TV0lUQ0gpOyAgICAgTTUgR1BPKExBTl9TUEVFRCk7CiAJICogTTQgR1BPKExBTl9SRVNFVCk7ICAgICAgIE0zIEdQTyhCVVpaRVIpOwkgICAgTTIgR1BPKExDRF9CTCk7CiAJICogTTEgQ1M1QihDQU4zX0NTKTsJICAgIE0wIEdQSSsobmMpOwogCSAqLwotCWN0cmxfb3V0dygweDU1NTIsIFBPUlRfUE1DUik7CSAgIC8qIDAxIDAxIDAxIDAxIDAxIDAxIDAwIDEwICovCisJX19yYXdfd3JpdGV3KDB4NTU1MiwgUE9SVF9QTUNSKTsJICAgLyogMDEgMDEgMDEgMDEgMDEgMDEgMDAgMTAgKi8KIAogCS8qIENVUlJFTlRfU0lOSz1vZmYsCVBXUl9TV0lUQ0g9b2ZmLCBMQU5fU1BFRUQ9MTAwTUJpdCwKIAkgKiBMQU5fUkVTRVQ9b2ZmLAlCVVpaRVI9b2ZmLAlMQ0RfQkw9b2ZmCiAJICovCiAjaWYgQ09ORklHX1NIX01BR0lDX1BBTkVMX1IyX1ZFUlNJT04gPT0gMgotCWN0cmxfb3V0YigweDMwLCBQT1JUX1BNRFIpOworCV9fcmF3X3dyaXRlYigweDMwLCBQT1JUX1BNRFIpOwogI2VsaWYgQ09ORklHX1NIX01BR0lDX1BBTkVMX1IyX1ZFUlNJT04gPT0gMwotCWN0cmxfb3V0YigweEYwLCBQT1JUX1BNRFIpOworCV9fcmF3X3dyaXRlYigweEYwLCBQT1JUX1BNRFIpOwogI2Vsc2UKICNlcnJvciBVbmtub3duIHJldmlzaW9uIG9mIFBMQVRGT1JNX01QX1IyCiAjZW5kaWYKQEAgLTE2Nyw4ICsxNjcsOCBAQAogCSAqIFA0IEdQTyhudSk7CSAgICAgICBQMyBJUlEzKExBTl9JUlEpOyAgUDIgSVJRMihDQU4zX0lSUSk7CiAJICogUDEgSVJRMShDQU4yX0lSUSk7ICBQMCBJUlEwKENBTjFfSVJRKQogCSAqLwotCWN0cmxfb3V0dygweDAxMDAsIFBPUlRfUFBDUik7CS8qIDAwIDAwIDAwIDAxIDAwIDAwIDAwIDAwICovCi0JY3RybF9vdXRiKDB4MTAsIFBPUlRfUFBEUik7CisJX19yYXdfd3JpdGV3KDB4MDEwMCwgUE9SVF9QUENSKTsJLyogMDAgMDAgMDAgMDEgMDAgMDAgMDAgMDAgKi8KKwlfX3Jhd193cml0ZWIoMHgxMCwgUE9SVF9QUERSKTsKIAogCS8qIFI3IEEyNTsJICAgICBSNiBBMjQ7CSAgICAgUjUgQTIzOwkJICBSNCBBMjI7CiAJICogUjMgQTIxOwkgICAgIFIyIEEyMDsJICAgICBSMSBBMTk7CQkgIFIwIEEwOwpAQCAtMTg1LDIyICsxODUsMjIgQEAKIAkvKiBTNyAoeCk7CQlTNiAoeCk7ICAgICAgICBTNSAoeCk7CSAgICAgUzQgR1BPKEVFUFJPTV9DUzIpOwogCSAqIFMzIEdQTyhFRVBST01fQ1MxKTsgIFMyIFNJT0YwX1RYRDsgIFMxIFNJT0YwX1JYRDsgUzAgU0lPRjBfU0NLOwogCSAqLwotCWN0cmxfb3V0dygweDAxNDAsIFBPUlRfUFNDUik7CS8qIDAwIDAwIDAwIDAxIDAxIDAwIDAwIDAwICovCisJX19yYXdfd3JpdGV3KDB4MDE0MCwgUE9SVF9QU0NSKTsJLyogMDAgMDAgMDAgMDEgMDEgMDAgMDAgMDAgKi8KIAogCS8qIFQ3ICh4KTsJICAgVDYgKHgpOwkgIFQ1ICh4KTsJICBUNCBDT00xX0NUUzsKIAkgKiBUMyBDT00xX1JUUzsJICAgVDIgQ09NMV9UWEQ7CSAgVDEgQ09NMV9SWEQ7CSAgVDAgR1BPKFdET0cpCiAJICovCi0JY3RybF9vdXR3KDB4MDAwMSwgUE9SVF9QVENSKTsJLyogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDEgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAxLCBQT1JUX1BUQ1IpOwkvKiAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMSAqLwogCiAJLyogVTcgKHgpOwkgICAgIFU2ICh4KTsJICAgVTUgKHgpOwkgIFU0IEdQSSsoL0FDX0ZBVUxUKTsKIAkgKiBVMyBHUE8oVE9VQ0hfQ1MpOyBVMiBUT1VDSF9UWEQ7IFUxIFRPVUNIX1JYRDsgIFUwIFRPVUNIX1NDSzsKIAkgKi8KLQljdHJsX291dHcoMHgwMjQwLCBQT1JUX1BVQ1IpOwkvKiAwMCAwMCAwMCAxMCAwMSAwMCAwMCAwMCAqLworCV9fcmF3X3dyaXRldygweDAyNDAsIFBPUlRfUFVDUik7CS8qIDAwIDAwIDAwIDEwIDAxIDAwIDAwIDAwICovCiAKIAkvKiBWNyAoeCk7CSAgVjYgKHgpOwlWNSAoeCk7CQkgIFY0IEdQTyhNSUQyKTsKIAkgKiBWMyBHUE8oTUlEMSk7ICBWMiBDQVJEX1R4RDsJVjEgQ0FSRF9SeEQ7CSAgVjAgR1BJKygvQkFUX0ZBVUxUKTsKIAkgKi8KLQljdHJsX291dHcoMHgwMTQyLCBQT1JUX1BWQ1IpOwkvKiAwMCAwMCAwMCAwMSAwMSAwMCAwMCAxMCAqLworCV9fcmF3X3dyaXRldygweDAxNDIsIFBPUlRfUFZDUik7CS8qIDAwIDAwIDAwIDAxIDAxIDAwIDAwIDEwICovCiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtcHIyX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCkBAIC0yMDksMjQgKzIwOSwyNCBAQAogCSAqIC9QQ0NfQ0QxLCAvUENDX0NEMiwgIFBDQ19CVkQxLCBQQ0NfQlZEMiwKIAkgKiAvSU9JUzE2LCAgSVJRNCwJSVJRNSwJICBVU0IxZF9TVVNQRU5ECiAJICovCi0JY3RybF9vdXR3KDB4QUFCQywgUE9SVF9QU0VMQSk7CisJX19yYXdfd3JpdGV3KDB4QUFCQywgUE9SVF9QU0VMQSk7CiAJLyogc2V0IFBpbiBTZWxlY3QgUmVnaXN0ZXIgQjoKIAkgKiAvU0NJRjBfUlRTLCAvU0NJRjBfQ1RTLCBMQ0RfVkNQV0MsCiAJICogTENEX1ZFUFdDLCAgSUlDX1NEQSwgICAgSUlDX1NDTCwgUmVzZXJ2ZWQKIAkgKi8KLQljdHJsX291dHcoMHgzQzAwLCBQT1JUX1BTRUxCKTsKKwlfX3Jhd193cml0ZXcoMHgzQzAwLCBQT1JUX1BTRUxCKTsKIAkvKiBzZXQgUGluIFNlbGVjdCBSZWdpc3RlciBDOgogCSAqIFNJT0YxX1NDSywgU0lPRjFfUnhELCBTQ0lGMV9SeEQsIFNDSUYxX1R4RCwgUmVzZXJ2ZWQKIAkgKi8KLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BTRUxDKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BTRUxDKTsKIAkvKiBzZXQgUGluIFNlbGVjdCBSZWdpc3RlciBEOiBSZXNlcnZlZCwgU0lPRjFfVHhELCBSZXNlcnZlZCwgU0lPRjFfTUNMSywKIAkgKiBSZXNlcnZlZCwgU0lPRjFfU1lOQywgUmVzZXJ2ZWQsIFNDSUYxX1NDSywgUmVzZXJ2ZWQKIAkgKi8KLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BTRUxEKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BTRUxEKTsKIAkvKiBzZXQgVVNCIFR4UnggQ29udHJvbDogUmVzZXJ2ZWQsIERSViwgUmVzZXJ2ZWQsIFVTQl9UUkFOUywgVVNCX1NFTCAqLwotCWN0cmxfb3V0dygweDAxMDEsIFBPUlRfVVRSQ1RMKTsKKwlfX3Jhd193cml0ZXcoMHgwMTAxLCBQT1JUX1VUUkNUTCk7CiAJLyogc2V0IFVTQiBDbG9jayBDb250cm9sOiBVU1NDUywgVVNTVEIsIFJlc2VydmVkIChIaWdoQnl0ZSBhbHdheXMgQTUpICovCi0JY3RybF9vdXR3KDB4QTVDMCwgUE9SVF9VQ0xLQ1JfVyk7CisJX19yYXdfd3JpdGV3KDB4QTVDMCwgUE9SVF9VQ0xLQ1JfVyk7CiAKIAlzZXR1cF9jaGlwX3NlbGVjdCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1wb2xhcmlzLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1wb2xhcmlzLmMKaW5kZXggNjI2MDdlYi4uNTk0ODY2MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtcG9sYXJpcy5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXBvbGFyaXMuYwpAQCAtNTksMTUgKzU5LDEyIEBACiBzdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewogCS5iaXRfcG9zCT0gaGVhcnRiZWF0X2JpdF9wb3MsCiAJLm5yX2JpdHMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9iaXRfcG9zKSwKLQkucmVnc2l6ZQk9IDgsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IFBPUlRfUENEUiwKLQkJLmVuZAk9IFBPUlRfUENEUiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydAk9IFBPUlRfUENEUiwKKwkuZW5kCT0gUE9SVF9QQ0RSLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fOEJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CkBAIC03Niw4ICs3Myw4IEBACiAJLmRldgk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmaGVhcnRiZWF0X2RhdGEsCiAJfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gaGVhcnRiZWF0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwb2xhcmlzX2RldmljZXNbXSBfX2luaXRkYXRhID0gewpAQCAtOTIsMTUgKzg5LDE1IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiQ29uZmlndXJpbmcgUG9sYXJpcyBleHRlcm5hbCBidXNcbiIpOwogCiAJLyogQ29uZmlndXJlIGFyZWEgNSB3aXRoIDIgd2FpdCBzdGF0ZXMgKi8KLQl3Y3IgPSBjdHJsX2ludyhXQ1IyKTsKKwl3Y3IgPSBfX3Jhd19yZWFkdyhXQ1IyKTsKIAl3Y3IgJj0gKH5BUkVBNV9XQUlUX0NUUkwpOwogCXdjciB8PSAoV0FJVF9TVEFURVNfMTAgPDwgMTApOwotCWN0cmxfb3V0dyh3Y3IsIFdDUjIpOworCV9fcmF3X3dyaXRldyh3Y3IsIFdDUjIpOwogCiAJLyogQ29uZmlndXJlIGFyZWEgNSBmb3IgMzItYml0IGFjY2VzcyAqLwotCWJjcl9tYXNrID0gY3RybF9pbncoQkNSMik7CisJYmNyX21hc2sgPSBfX3Jhd19yZWFkdyhCQ1IyKTsKIAliY3JfbWFzayB8PSAxIDw8IDEwOwotCWN0cmxfb3V0dyhiY3JfbWFzaywgQkNSMik7CisJX19yYXdfd3JpdGV3KGJjcl9tYXNrLCBCQ1IyKTsKIAogCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwb2xhcmlzX2RldmljZXMsCiAJCQkJICAgIEFSUkFZX1NJWkUocG9sYXJpc19kZXZpY2VzKSk7CkBAIC0xMzEsMTMgKzEyOCwxMyBAQAogc3RhdGljIHZvaWQgX19pbml0IGluaXRfcG9sYXJpc19pcnEodm9pZCkKIHsKIAkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCi0JY3RybF9vdXR3KDAsIEJDUl9JTENSQSk7Ci0JY3RybF9vdXR3KDAsIEJDUl9JTENSQik7Ci0JY3RybF9vdXR3KDAsIEJDUl9JTENSQyk7Ci0JY3RybF9vdXR3KDAsIEJDUl9JTENSRCk7Ci0JY3RybF9vdXR3KDAsIEJDUl9JTENSRSk7Ci0JY3RybF9vdXR3KDAsIEJDUl9JTENSRik7Ci0JY3RybF9vdXR3KDAsIEJDUl9JTENSRyk7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSQSk7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSQik7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSQyk7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSRCk7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSRSk7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSRik7CisJX19yYXdfd3JpdGV3KDAsIEJDUl9JTENSRyk7CiAKIAlyZWdpc3Rlcl9pcHJfY29udHJvbGxlcigmaXByX2lycV9kZXNjKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNoNzc4NWxjci5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMKaW5kZXggZTVhOGEyZi4uZmU3ZTY4NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1wY2EuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvcjhhNjY1OTcuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bWFjaC9zaDc3ODVsY3IuaD4KQEAgLTMyLDI2ICszMywxNyBAQAogICogTk9URTogVGhpcyBib2FyZCBoYXMgMiBwaHlzaWNhbCBtZW1vcnkgbWFwcy4KICAqCSBQbGVhc2UgbG9vayBhdCBpbmNsdWRlL2FzbS1zaC9zaDc3ODVsY3IuaCBvciBoYXJkd2FyZSBtYW51YWwuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gUExEX0xFRENSLAotCQkuZW5kCT0gUExEX0xFRENSLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKLQkucmVnc2l6ZSA9IDgsCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBQTERfTEVEQ1IsCisJLmVuZAk9IFBMRF9MRURDUiwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzhCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewogCS5uYW1lCQk9ICJoZWFydGJlYXQiLAogCS5pZAkJPSAtMSwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZoZWFydGJlYXRfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG5vcl9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CkBAIC0zNDEsOCArMzMzLDE0IEBACiAJcG1fcG93ZXJfb2ZmID0gc2g3Nzg1bGNyX3Bvd2VyX29mZjsKIAogCS8qIHNtNTAxIERSQU0gY29uZmlndXJhdGlvbiAqLwotCXNtNTAxX3JlZyA9ICh2b2lkIF9faW9tZW0gKikweGIzZTAwMDAwICsgU001MDFfRFJBTV9DT05UUk9MOwotCXdyaXRlbCgweDAwMDMwN2MyLCBzbTUwMV9yZWcpOworCXNtNTAxX3JlZyA9IGlvcmVtYXBfbm9jYWNoZShTTTEwN19SRUdfQUREUiwgU001MDFfRFJBTV9DT05UUk9MKTsKKwlpZiAoIXNtNTAxX3JlZykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpb3JlbWFwIGVycm9yLlxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJd3JpdGVsKDB4MDAwMzA3YzIsIHNtNTAxX3JlZyArIFNNNTAxX0RSQU1fQ09OVFJPTCk7CisJaW91bm1hcChzbTUwMV9yZWcpOwogfQogCiAvKiBSZXR1cm4gdGhlIGJvYXJkIHNwZWNpZmljIGJvb3QgbW9kZSBwaW4gY29uZmlndXJhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2htaW4uYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNobWluLmMKaW5kZXggYjFkY2JiYy4uMzI1YmVkNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2htaW4uYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaG1pbi5jCkBAIC0xNyw4ICsxNyw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpbml0X3NobWluX2lycSh2b2lkKQogewotCWN0cmxfb3V0dygweDJhMDAsIFBGQ19QSENSKTsJLy8gSVJRMC0zPUlSUQotCWN0cmxfb3V0dygweDBhYWEsIElOVENfSUNSMSk7CS8vIElSUTAtMz1JUlEtbW9kZSxMb3ctYWN0aXZlLgorCV9fcmF3X3dyaXRldygweDJhMDAsIFBGQ19QSENSKTsJLy8gSVJRMC0zPUlSUQorCV9fcmF3X3dyaXRldygweDBhYWEsIElOVENfSUNSMSk7CS8vIElSUTAtMz1JUlEtbW9kZSxMb3ctYWN0aXZlLgogCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJRKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdGl0YW4uYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXRpdGFuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjMzZjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC10aXRhbi5jCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBhcmNoL3NoL2JvYXJkcy90aXRhbi9zZXR1cC5jIC0gU2V0dXAgZm9yIFRpdGFuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiAgSmFtaWUgTGVuZWhhbgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPG1hY2gvdGl0YW4uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RhdGljIHZvaWQgX19pbml0IGluaXRfdGl0YW5faXJxKHZvaWQpCit7CisJLyogZW5hYmxlIGluZGl2aWR1YWwgaW50ZXJydXB0IG1vZGUgZm9yIGV4dGVybmFscyAqLworCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJRKTsKK30KKworc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl90aXRhbiBfX2luaXRtdiA9IHsKKwkubXZfbmFtZQk9ICJUaXRhbiIsCisJLm12X2luaXRfaXJxCT0gaW5pdF90aXRhbl9pcnEsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jCmluZGV4IDM2YjhiYWMuLmE5YmQ2ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXVycXVlbGwuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC11cnF1ZWxsLmMKQEAgLTIsNyArMiw3IEBACiAgKiBSZW5lc2FzIFRlY2hub2xvZ3kgQ29ycC4gU0g3Nzg2IFVycXVlbGwgU3VwcG9ydC4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwICBQYXVsIE11bmR0CiAgKgogICogQmFzZWQgb24gYm9hcmQtc2g3Nzg1bGNyLmMKICAqIENvcHlyaWdodCAoQykgMjAwOCAgWW9zaGloaXJvIFNoaW1vZGEKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxtYWNoL3VycXVlbGwuaD4KICNpbmNsdWRlIDxjcHUvc2g3Nzg2Lmg+CiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgpAQCAtNTAsMjYgKzUxLDE3IEBACiAgKi8KIAogLyogSGVhcnRCZWF0ICovCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IEJPQVJEUkVHKFNMRURSKSwKLQkJLmVuZAk9IEJPQVJEUkVHKFNMRURSKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7Ci0JLnJlZ3NpemUgPSAxNiwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydAk9IEJPQVJEUkVHKFNMRURSKSwKKwkuZW5kCT0gQk9BUkRSRUcoU0xFRFIpLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMTZCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewogCS5uYW1lCQk9ICJoZWFydGJlYXQiLAogCS5pZAkJPSAtMSwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZoZWFydGJlYXRfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogLyogTEFOOTFDMTExICovCkBAIC0xODQsNiArMTc2LDI3IEBACiAJcmV0dXJuIF9fcmF3X3JlYWR3KFVCT0FSRFJFRyhNRFNXTVIpKTsKIH0KIAorc3RhdGljIGludCB1cnF1ZWxsX2Nsa19pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrOworCWludCByZXQ7CisKKwkvKgorCSAqIE9ubHkgaGFuZGxlIHRoZSBFWFRBTCBjYXNlLCBhbnlvbmUgaW50ZXJmYWNpbmcgYSBjcnlzdGFsCisJICogcmVzb25hdG9yIHdpbGwgbmVlZCB0byBwcm92aWRlIHRoZWlyIG93biBpbnB1dCBjbG9jay4KKwkgKi8KKwlpZiAodGVzdF9tb2RlX3BpbihNT0RFX1BJTjkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNsayA9IGNsa19nZXQoTlVMTCwgImV4dGFsIik7CisJaWYgKCFjbGsgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybiBQVFJfRVJSKGNsayk7CisJcmV0ID0gY2xrX3NldF9yYXRlKGNsaywgMzMzMzMzMzMpOworCWNsa19wdXQoY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKIC8qIEluaXRpYWxpemUgdGhlIGJvYXJkICovCiBzdGF0aWMgdm9pZCBfX2luaXQgdXJxdWVsbF9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewpAQCAtMjAwLDQgKzIxMyw1IEBACiAJLm12X3NldHVwCT0gdXJxdWVsbF9zZXR1cCwKIAkubXZfaW5pdF9pcnEJPSB1cnF1ZWxsX2luaXRfaXJxLAogCS5tdl9tb2RlX3BpbnMJPSB1cnF1ZWxsX21vZGVfcGlucywKKwkubXZfY2xrX2luaXQJPSB1cnF1ZWxsX2Nsa19pbml0LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYwppbmRleCAxZjVmYTVjLi41N2UzN2UyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhhL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1hcDMyNXJ4YS9zZXR1cC5jCkBAIC0xNTksMjEgKzE1OSwyMSBAQAogCW1zbGVlcCgxMDApOwogCiAJLyogQVNEIEFQLTMyMC8zMjUgTENEIE9OICovCi0JY3RybF9vdXR3KEZQR0FfTENEUkVHX1ZBTCwgRlBHQV9MQ0RSRUcpOworCV9fcmF3X3dyaXRldyhGUEdBX0xDRFJFR19WQUwsIEZQR0FfTENEUkVHKTsKIAogCS8qIGJhY2tsaWdodCAqLwogCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRTMywgMCk7Ci0JY3RybF9vdXR3KDB4MTAwLCBGUEdBX0JLTFJFRyk7CisJX19yYXdfd3JpdGV3KDB4MTAwLCBGUEdBX0JLTFJFRyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFwMzIwX3d2Z2FfcG93ZXJfb2ZmKHZvaWQgKmJvYXJkX2RhdGEpCiB7CiAJLyogYmFja2xpZ2h0ICovCi0JY3RybF9vdXR3KDAsIEZQR0FfQktMUkVHKTsKKwlfX3Jhd193cml0ZXcoMCwgRlBHQV9CS0xSRUcpOwogCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRTMywgMSk7CiAKIAkvKiBBU0QgQVAtMzIwLzMyNSBMQ0QgT0ZGICovCi0JY3RybF9vdXR3KDAsIEZQR0FfTENEUkVHKTsKKwlfX3Jhd193cml0ZXcoMCwgRlBHQV9MQ0RSRUcpOwogfQogCiBzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9sY2RjX2luZm8gbGNkY19pbmZvID0gewpAQCAtNDIwLDcgKzQyMCw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQJPSAxMDEsCisJCS5zdGFydAk9IDEwMCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQJPSAyNCwKKwkJLnN0YXJ0CT0gMjMsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTQ3MSw4ICs0NzEsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvdjc3MnhfY2FtZXJhX2luZm8gb3Y3NzI1X2luZm8gPSB7Ci0JLmJ1c3dpZHRoCT0gU09DQU1fREFUQVdJRFRIXzgsCi0JLmZsYWdzCQk9IE9WNzcyWF9GTEFHX1ZGTElQIHwgT1Y3NzJYX0ZMQUdfSEZMSVAsCisJLmZsYWdzCQk9IE9WNzcyWF9GTEFHX1ZGTElQIHwgT1Y3NzJYX0ZMQUdfSEZMSVAgfCBcCisJCQkgIE9WNzcyWF9GTEFHXzhCSVQsCiAJLmVkZ2VjdHJsCT0gT1Y3NzJYX0FVVE9fRURHRUNUUkwoMHhmLCAwKSwKIH07CiAKQEAgLTU5NSw3ICs1OTUsNyBAQAogCWdwaW9fcmVxdWVzdChHUElPX1BUWjQsIE5VTEwpOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUWjQsIDApOyAvKiBTQUREUiAqLwogCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfTVNFTENSQikgJiB+MHgwMDAxLCBQT1JUX01TRUxDUkIpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX01TRUxDUkIpICYgfjB4MDAwMSwgUE9SVF9NU0VMQ1JCKTsKIAogCS8qIEZMQ1RMICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRkNFLCBOVUxMKTsKQEAgLTYxMyw5ICs2MTMsOSBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZXRSwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlJCLCBOVUxMKTsKIAotCWN0cmxfb3V0dygwLCBQT1JUX0hJWkNSQyk7Ci0JY3RybF9vdXR3KDB4RkZGRiwgUE9SVF9EUlZDUkEpOwotCWN0cmxfb3V0dygweEZGRkYsIFBPUlRfRFJWQ1JCKTsKKwlfX3Jhd193cml0ZXcoMCwgUE9SVF9ISVpDUkMpOworCV9fcmF3X3dyaXRldygweEZGRkYsIFBPUlRfRFJWQ1JBKTsKKwlfX3Jhd193cml0ZXcoMHhGRkZGLCBQT1JUX0RSVkNSQik7CiAKIAlwbGF0Zm9ybV9yZXNvdXJjZV9zZXR1cF9tZW1vcnkoJmNldV9kZXZpY2UsICJjZXUiLCA0IDw8IDIwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1jYXltYW4vaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWNheW1hbi9pcnEuYwppbmRleCAzM2Y3NzA4Li4xMzk0YjA3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWNheW1hbi9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWNheW1hbi9pcnEuYwpAQCAtNjYsOSArNjYsOSBAQAogCXJlZyA9IEVQTERfTUFTS19CQVNFICsgKChpcnEgLyA4KSA8PCAyKTsKIAliaXQgPSAxPDwoaXJxICUgOCk7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCW1hc2sgPSBjdHJsX2lubChyZWcpOworCW1hc2sgPSBfX3Jhd19yZWFkbChyZWcpOwogCW1hc2sgfD0gYml0OwotCWN0cmxfb3V0bChtYXNrLCByZWcpOworCV9fcmF3X3dyaXRlbChtYXNrLCByZWcpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtODMsOSArODMsOSBAQAogCXJlZyA9IEVQTERfTUFTS19CQVNFICsgKChpcnEgLyA4KSA8PCAyKTsKIAliaXQgPSAxPDwoaXJxICUgOCk7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCW1hc2sgPSBjdHJsX2lubChyZWcpOworCW1hc2sgPSBfX3Jhd19yZWFkbChyZWcpOwogCW1hc2sgJj0gfmJpdDsKLQljdHJsX291dGwobWFzaywgcmVnKTsKKwlfX3Jhd193cml0ZWwobWFzaywgcmVnKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTEwOSw4ICsxMDksOCBAQAogCQl1bnNpZ25lZCBsb25nIHN0YXR1czsKIAkJaW50IGk7CiAKLQkJc3RhdHVzID0gY3RybF9pbmwoRVBMRF9TVEFUVVNfQkFTRSkgJgotCQkJIGN0cmxfaW5sKEVQTERfTUFTS19CQVNFKSAmIDB4ZmY7CisJCXN0YXR1cyA9IF9fcmF3X3JlYWRsKEVQTERfU1RBVFVTX0JBU0UpICYKKwkJCSBfX3Jhd19yZWFkbChFUExEX01BU0tfQkFTRSkgJiAweGZmOwogCQlpZiAoc3RhdHVzID09IDApIHsKIAkJCWlycSA9IC0xOwogCQl9IGVsc2UgewpAQCAtMTI2LDggKzEyNiw4IEBACiAJCXVuc2lnbmVkIGxvbmcgc3RhdHVzOwogCQlpbnQgaTsKIAotCQlzdGF0dXMgPSBjdHJsX2lubChFUExEX1NUQVRVU19CQVNFICsgMyAqIHNpemVvZih1MzIpKSAmCi0JCQkgY3RybF9pbmwoRVBMRF9NQVNLX0JBU0UgKyAzICogc2l6ZW9mKHUzMikpICYgMHhmZjsKKwkJc3RhdHVzID0gX19yYXdfcmVhZGwoRVBMRF9TVEFUVVNfQkFTRSArIDMgKiBzaXplb2YodTMyKSkgJgorCQkJIF9fcmF3X3JlYWRsKEVQTERfTUFTS19CQVNFICsgMyAqIHNpemVvZih1MzIpKSAmIDB4ZmY7CiAJCWlmIChzdGF0dXMgPT0gMCkgewogCQkJaXJxID0gLTE7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L2lycS5jCmluZGV4IGY1NWZjOGUuLmQ5MzI2NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L2lycS5jCkBAIC0xMzUsMyArMTM1LDMwIEBACiAJLyogTm90IHJlYWNoZWQgKi8KIAlyZXR1cm4gaXJxOwogfQorCit2b2lkIHN5c3RlbWFzaWNfaXJxX2luaXQodm9pZCkKK3sKKwlpbnQgaSwgbmlkID0gY3B1X3RvX25vZGUoYm9vdF9jcHVfZGF0YSk7CisKKwkvKiBBc3NpZ24gYWxsIHZpcnR1YWwgSVJRcyB0byB0aGUgU3lzdGVtIEFTSUMgaW50LiBoYW5kbGVyICovCisJZm9yIChpID0gSFdfRVZFTlRfSVJRX0JBU0U7IGkgPCBIV19FVkVOVF9JUlFfTUFYOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGlycTsKKworCQlpcnEgPSBjcmVhdGVfaXJxX25yKGksIG5pZCk7CisJCWlmICh1bmxpa2VseShpcnEgPT0gMCkpIHsKKwkJCXByX2VycigiJXM6IGZhaWxlZCBob29raW5nIGlycSAlZCBmb3Igc3lzdGVtYXNpY1xuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgaSk7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAodW5saWtlbHkoaXJxICE9IGkpKSB7CisJCQlwcl9lcnIoIiVzOiBnb3QgaXJxICVkIGJ1dCB3YW50ZWQgJWQsIGJhaWxpbmcuXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBpcnEsIGkpOworCQkJZGVzdHJveV9pcnEoaXJxKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmc3lzdGVtYXNpY19pbnQsCisJCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9ydGMuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3J0Yy5jCmluZGV4IGE3NDMzNjguLjA2MWQ2NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3J0Yy5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3J0Yy5jCkBAIC0zNSwxMSArMzUsMTEgQEAKIAl1bnNpZ25lZCBsb25nIHZhbDEsIHZhbDI7CiAKIAlkbyB7Ci0JCXZhbDEgPSAoKGN0cmxfaW5sKEFJQ0FfUlRDX1NFQ1NfSCkgJiAweGZmZmYpIDw8IDE2KSB8Ci0JCQkoY3RybF9pbmwoQUlDQV9SVENfU0VDU19MKSAmIDB4ZmZmZik7CisJCXZhbDEgPSAoKF9fcmF3X3JlYWRsKEFJQ0FfUlRDX1NFQ1NfSCkgJiAweGZmZmYpIDw8IDE2KSB8CisJCQkoX19yYXdfcmVhZGwoQUlDQV9SVENfU0VDU19MKSAmIDB4ZmZmZik7CiAKLQkJdmFsMiA9ICgoY3RybF9pbmwoQUlDQV9SVENfU0VDU19IKSAmIDB4ZmZmZikgPDwgMTYpIHwKLQkJCShjdHJsX2lubChBSUNBX1JUQ19TRUNTX0wpICYgMHhmZmZmKTsKKwkJdmFsMiA9ICgoX19yYXdfcmVhZGwoQUlDQV9SVENfU0VDU19IKSAmIDB4ZmZmZikgPDwgMTYpIHwKKwkJCShfX3Jhd19yZWFkbChBSUNBX1JUQ19TRUNTX0wpICYgMHhmZmZmKTsKIAl9IHdoaWxlICh2YWwxICE9IHZhbDIpOwogCiAJdHMtPnR2X3NlYyA9IHZhbDEgLSBUV0VOVFlfWUVBUlM7CkBAIC02MCwxNCArNjAsMTQgQEAKIAl1bnNpZ25lZCBsb25nIGFkaiA9IHNlY3MgKyBUV0VOVFlfWUVBUlM7CiAKIAlkbyB7Ci0JCWN0cmxfb3V0bCgoYWRqICYgMHhmZmZmMDAwMCkgPj4gMTYsIEFJQ0FfUlRDX1NFQ1NfSCk7Ci0JCWN0cmxfb3V0bCgoYWRqICYgMHhmZmZmKSwgQUlDQV9SVENfU0VDU19MKTsKKwkJX19yYXdfd3JpdGVsKChhZGogJiAweGZmZmYwMDAwKSA+PiAxNiwgQUlDQV9SVENfU0VDU19IKTsKKwkJX19yYXdfd3JpdGVsKChhZGogJiAweGZmZmYpLCBBSUNBX1JUQ19TRUNTX0wpOwogCi0JCXZhbDEgPSAoKGN0cmxfaW5sKEFJQ0FfUlRDX1NFQ1NfSCkgJiAweGZmZmYpIDw8IDE2KSB8Ci0JCQkoY3RybF9pbmwoQUlDQV9SVENfU0VDU19MKSAmIDB4ZmZmZik7CisJCXZhbDEgPSAoKF9fcmF3X3JlYWRsKEFJQ0FfUlRDX1NFQ1NfSCkgJiAweGZmZmYpIDw8IDE2KSB8CisJCQkoX19yYXdfcmVhZGwoQUlDQV9SVENfU0VDU19MKSAmIDB4ZmZmZik7CiAKLQkJdmFsMiA9ICgoY3RybF9pbmwoQUlDQV9SVENfU0VDU19IKSAmIDB4ZmZmZikgPDwgMTYpIHwKLQkJCShjdHJsX2lubChBSUNBX1JUQ19TRUNTX0wpICYgMHhmZmZmKTsKKwkJdmFsMiA9ICgoX19yYXdfcmVhZGwoQUlDQV9SVENfU0VDU19IKSAmIDB4ZmZmZikgPDwgMTYpIHwKKwkJCShfX3Jhd19yZWFkbChBSUNBX1JUQ19TRUNTX0wpICYgMHhmZmZmKTsKIAl9IHdoaWxlICh2YWwxICE9IHZhbDIpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3Qvc2V0dXAuYwppbmRleCBhNGI3NDAyLi5hZDFhNGRiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3NldHVwLmMKQEAgLTI4LDI1ICsyOCw4IEBACiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxtYWNoL3N5c2FzaWMuaD4KIAotZXh0ZXJuIHN0cnVjdCBpcnFfY2hpcCBzeXN0ZW1hc2ljX2ludDsKLWV4dGVybiB2b2lkIGFpY2FfdGltZV9pbml0KHZvaWQpOwotZXh0ZXJuIGludCBzeXN0ZW1hc2ljX2lycV9kZW11eChpbnQpOwotCiBzdGF0aWMgdm9pZCBfX2luaXQgZHJlYW1jYXN0X3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7Ci0JaW50IGk7Ci0KLQkvKiBNYXNrIGFsbCBoYXJkd2FyZSBldmVudHMgKi8KLQkvKiBYWFggKi8KLQotCS8qIEFja25vd2xlZGdlIGFueSBwcmV2aW91cyBldmVudHMgKi8KLQkvKiBYWFggKi8KLQotCS8qIEFzc2lnbiBhbGwgdmlydHVhbCBJUlFzIHRvIHRoZSBTeXN0ZW0gQVNJQyBpbnQuIGhhbmRsZXIgKi8KLQlmb3IgKGkgPSBIV19FVkVOVF9JUlFfQkFTRTsgaSA8IEhXX0VWRU5UX0lSUV9NQVg7IGkrKykKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZzeXN0ZW1hc2ljX2ludCwKLQkJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwotCiAJYm9hcmRfdGltZV9pbml0ID0gYWljYV90aW1lX2luaXQ7CiB9CiAKQEAgLTU0LDQgKzM3LDUgQEAKIAkubXZfbmFtZQkJPSAiU2VnYSBEcmVhbWNhc3QiLAogCS5tdl9zZXR1cAkJPSBkcmVhbWNhc3Rfc2V0dXAsCiAJLm12X2lycV9kZW11eAkJPSBzeXN0ZW1hc2ljX2lycV9kZW11eCwKKwkubXZfaW5pdF9pcnEJCT0gc3lzdGVtYXNpY19pcnFfaW5pdCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NkcmFtLlMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NkcmFtLlMKaW5kZXggODMzNDQwMC4uMzk2M2M2ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZHJhbS5TCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2RyYW0uUwpAQCAtMzcsNiArMzcsMTAgQEAKIAkuYmFsaWduIDQKIEVOVFJZKGVjb3ZlYzI0X3NkcmFtX2xlYXZlX3N0YXJ0KQogCisJbW92LmwJQChTSF9TTEVFUF9NT0RFLCByNSksIHIwCisJdHN0CSNTVVNQX1NIX1JTVEFOREJZLCByMAorCWJmCXJlc3VtZV9yc3RhbmRieQorCiAJLyogREJTQzogcHV0IG1lbW9yeSBpbiBhdXRvLXJlZnJlc2ggbW9kZSAqLwogCiAJRUQgMHhGRDAwMDA0MCwgMHgwMDAwMDAwMCAvKiBEQlJGUEROMCAqLwpAQCAtNDksNCArNTMsNTkgQEAKIAlydHMKIAkgbm9wCiAKK3Jlc3VtZV9yc3RhbmRieToKKworCS8qIERCU0M6IHJlLWluaXRpYWxpemUgYW5kIHB1dCBpbiBhdXRvLXJlZnJlc2ggKi8KKworCUVEIDB4RkQwMDAxMDgsIDB4MDAwMDAxODEgLyogREJQRENOVDAgKi8KKwlFRCAweEZEMDAwMDIwLCAweDAxNUIwMDAyIC8qIERCQ09ORiAqLworCUVEIDB4RkQwMDAwMzAsIDB4MDMwNzE1MDIgLyogREJUUjAgKi8KKwlFRCAweEZEMDAwMDM0LCAweDAyMDIwMTAyIC8qIERCVFIxICovCisJRUQgMHhGRDAwMDAzOCwgMHgwMTA5MDQwNSAvKiBEQlRSMiAqLworCUVEIDB4RkQwMDAwM0MsIDB4MDAwMDAwMDIgLyogREJUUjMgKi8KKwlFRCAweEZEMDAwMDA4LCAweDAwMDAwMDA1IC8qIERCS0lORCAqLworCUVEIDB4RkQwMDAwNDAsIDB4MDAwMDAwMDEgLyogREJSRlBETjAgKi8KKwlFRCAweEZEMDAwMDQwLCAweDAwMDAwMDAwIC8qIERCUkZQRE4wICovCisJRUQgMHhGRDAwMDAxOCwgMHgwMDAwMDAwMSAvKiBEQkNLRUNOVCAqLworCisJbW92CSMxMDAscjAKK1dBSVRfNDAwTlM6CisJZHQJcjAKKwliZglXQUlUXzQwME5TCisKKwlFRCAweEZEMDAwMDE0LCAweDAwMDAwMDAyIC8qIERCQ01EQ05UIChQQUxMKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMjAwMDAgLyogREJNUkNOVCAoRU1SMikgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDMwMDAwIC8qIERCTVJDTlQgKEVNUjMpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAxMDAwNCAvKiBEQk1SQ05UIChFTVIpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAwMDUzMiAvKiBEQk1SQ05UIChNUlMpICovCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwMiAvKiBEQkNNRENOVCAoUEFMTCkgKi8KKwlFRCAweEZEMDAwMDE0LCAweDAwMDAwMDA0IC8qIERCQ01EQ05UIChSRUYpICovCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwNCAvKiBEQkNNRENOVCAoUkVGKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMDA0MzIgLyogREJNUkNOVCAoTVJTKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMTAzYzAgLyogREJNUkNOVCAoRU1SKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMTAwNDAgLyogREJNUkNOVCAoRU1SKSAqLworCisJbW92CSMxMDAscjAKK1dBSVRfNDAwTlNfMjoKKwlkdAlyMAorCWJmCVdBSVRfNDAwTlNfMgorCisJRUQgMHhGRDAwMDAxMCwgMHgwMDAwMDAwMSAvKiBEQkVOICovCisJRUQgMHhGRDAwMDA0NCwgMHgwMDAwMDUwZiAvKiBEQlJGUEROMSAqLworCUVEIDB4RkQwMDAwNDgsIDB4MjM2ODAwZTYgLyogREJSRlBETjIgKi8KKworCW1vdi5sCURVTU1ZLHIwCisJbW92LmwJQHIwLCByMSAvKiBmb3JjZSBzaW5nbGUgZHVtbXkgcmVhZCAqLworCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwMiAvKiBEQkNNRENOVCAoUEFMTCkgKi8KKwlFRCAweEZEMDAwMDE0LCAweDAwMDAwMDA0IC8qIERCQ01EQ05UIChSRUYpICovCisJRUQgMHhGRDAwMDEwOCwgMHgwMDAwMDA4MCAvKiBEQlBEQ05UMCAqLworCUVEIDB4RkQwMDAwNDAsIDB4MDAwMTAwMDAgLyogREJSRlBETjAgKi8KKworCXJ0cworCSBub3AKKworCS5iYWxpZ24gNAorRFVNTVk6CS5sb25nCTB4YWM0MDAwMDAKKwogRU5UUlkoZWNvdmVjMjRfc2RyYW1fbGVhdmVfZW5kKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCmluZGV4IDVjMjQ2MjguLjM5ZWQ4NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKQEAgLTY0LDE4ICs2NCwxNiBAQAogCiAvKiBIZWFydGJlYXQgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGxlZF9wb3NbXSA9IHsgMCwgMSwgMiwgMyB9OworCiBzdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewotCS5yZWdzaXplID0gOCwKIAkubnJfYml0cyA9IDQsCiAJLmJpdF9wb3MgPSBsZWRfcG9zLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gMHhBNDA1MDEyQywgLyogUFRHICovCi0JCS5lbmQgICAgPSAweEE0MDUwMTJFIC0gMSwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgID0gMHhBNDA1MDEyQywgLyogUFRHICovCisJLmVuZCAgICA9IDB4QTQwNTAxMkUgLSAxLAorCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzhCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewpAQCAtODQsOCArODIsOCBAQAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhID0gJmhlYXJ0YmVhdF9kYXRhLAogCX0sCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgICAgICAgPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IDEsCisJLnJlc291cmNlICAgICAgID0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIC8qIE1URCAqLwpAQCAtNDU1LDcgKzQ1Myw3IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0ICA9IDEwMSwKKwkJLnN0YXJ0ICA9IDEwMCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNDkxLDcgKzQ4OSw3IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0ICA9IDI0LAorCQkuc3RhcnQgID0gMjMsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTY5OCwxMyArNjk2LDEzIEBACiAjZGVmaW5lIEZDTEtCQ1IJCTB4YTQxNTAwMGMKIHN0YXRpYyB2b2lkIGZzaW1ja19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQl1MzIgc3RhdHVzID0gY3RybF9pbmwoY2xrLT5lbmFibGVfcmVnKTsKKwl1MzIgc3RhdHVzID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKIAogCS8qIHVzZSBleHRlcm5hbCBjbG9jayAqLwogCXN0YXR1cyAmPSB+MHgwMDAwMDBmZjsKIAlzdGF0dXMgfD0gMHgwMDAwMDA4MDsKIAotCWN0cmxfb3V0bChzdGF0dXMsIGNsay0+ZW5hYmxlX3JlZyk7CisJX19yYXdfd3JpdGVsKHN0YXR1cywgY2xrLT5lbmFibGVfcmVnKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIGZzaW1ja19jbGtfb3BzID0gewpAQCAtNzUzLDYgKzc1MSwyNiBAQAogCX0sCiB9OwogCisvKiBJckRBICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlyZGFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJJckRBIiwKKwkJLnN0YXJ0ICA9IDB4QTQ1RDAwMDAsCisJCS5lbmQgICAgPSAweEE0NUQwMDQ5LAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSAyMCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpcmRhX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAic2hfc2lyIiwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGlyZGFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgICAgICAgPSBpcmRhX3Jlc291cmNlcywKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplY292ZWNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmhlYXJ0YmVhdF9kZXZpY2UsCiAJJm5vcl9mbGFzaF9kZXZpY2UsCkBAIC03NzMsOCArNzkxLDEwIEBACiAJJmNhbWVyYV9kZXZpY2VzWzFdLAogCSZjYW1lcmFfZGV2aWNlc1syXSwKIAkmZnNpX2RldmljZSwKKwkmaXJkYV9kZXZpY2UsCiB9OwogCisjaWZkZWYgQ09ORklHX0kyQwogI2RlZmluZSBFRVBST01fQUREUiAweDUwCiBzdGF0aWMgdTggbWFjX3JlYWQoc3RydWN0IGkyY19hZGFwdGVyICphLCB1OCBjb21tYW5kKQogewpAQCAtODE3LDYgKzgzNywxMiBAQAogCQltc2xlZXAoMTApOwogCX0KIH0KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgc2hfZXRoX2luaXQoc3RydWN0IHNoX2V0aF9wbGF0X2RhdGEgKnBkKQoreworCXByX2VycigidW5hYmxlIHRvIHJlYWQgc2hfZXRoIE1BQyBhZGRyZXNzXG4iKTsKK30KKyNlbmRpZgogCiAjZGVmaW5lIFBPUlRfSElaQSAweEE0MDUwMTU4CiAjZGVmaW5lIElPRFJJVkVBICAweEE0MDUwMThBCkBAIC04MzEsNyArODU3LDggQEAKIAlzdHJ1Y3QgY2xrICpjbGs7CiAKIAkvKiByZWdpc3RlciBib2FyZCBzcGVjaWZpYyBzZWxmLXJlZnJlc2ggY29kZSAqLwotCXNoX21vYmlsZV9yZWdpc3Rlcl9zZWxmX3JlZnJlc2goU1VTUF9TSF9TVEFOREJZIHwgU1VTUF9TSF9TRiwKKwlzaF9tb2JpbGVfcmVnaXN0ZXJfc2VsZl9yZWZyZXNoKFNVU1BfU0hfU1RBTkRCWSB8IFNVU1BfU0hfU0YgfAorCQkJCQlTVVNQX1NIX1JTVEFOREJZLAogCQkJCQkmZWNvdmVjMjRfc2RyYW1fZW50ZXJfc3RhcnQsCiAJCQkJCSZlY292ZWMyNF9zZHJhbV9lbnRlcl9lbmQsCiAJCQkJCSZlY292ZWMyNF9zZHJhbV9sZWF2ZV9zdGFydCwKQEAgLTg1NSw3ICs4ODIsNyBAQAogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BURzEsIDApOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BURzIsIDApOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BURzMsIDApOwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9ISVpBKSAmIH4oMHgxIDw8IDEpKSAsIFBPUlRfSElaQSk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhQT1JUX0hJWkEpICYgfigweDEgPDwgMSkpICwgUE9SVF9ISVpBKTsKIAogCS8qIGVuYWJsZSBTSC1FdGggKi8KIAlncGlvX3JlcXVlc3QoR1BJT19QVEExLCBOVUxMKTsKQEAgLTg3NSwxNiArOTAyLDE2IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTE5LU1RBLCAgICAgICBOVUxMKTsKIAogCS8qIGVuYWJsZSBVU0IgKi8KLQljdHJsX291dHcoMHgwMDAwLCAweEE0RDgwMDAwKTsKLQljdHJsX291dHcoMHgwMDAwLCAweEE0RDkwMDAwKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCAweEE0RDgwMDAwKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCAweEE0RDkwMDAwKTsKIAlncGlvX3JlcXVlc3QoR1BJT19QVEIzLCAgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRCNCwgIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX1BUQjUsICBOVUxMKTsKIAlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX1BUQjMpOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUQjQsIDApOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUQjUsIDApOwotCWN0cmxfb3V0dygweDA2MDAsIDB4YTQwNTAxZDQpOwotCWN0cmxfb3V0dygweDA2MDAsIDB4YTQwNTAxOTIpOworCV9fcmF3X3dyaXRldygweDA2MDAsIDB4YTQwNTAxZDQpOworCV9fcmF3X3dyaXRldygweDA2MDAsIDB4YTQwNTAxOTIpOwogCiAJaWYgKGdwaW9fZ2V0X3ZhbHVlKEdQSU9fUFRCMykpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVVNCMSBmdW5jdGlvbiBpcyBzZWxlY3RlZFxuIik7CkBAIC05MjUsNyArOTUyLDcgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RWU1lOLCAgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERE9OLCAgIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRExDTEssICBOVUxMKTsKLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfSElaQSkgJiB+MHgwMDAxKSwgUE9SVF9ISVpBKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfSElaQSkgJiB+MHgwMDAxKSwgUE9SVF9ISVpBKTsKIAogCWdwaW9fcmVxdWVzdChHUElPX1BURTYsIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX1BUVTEsIE5VTEwpOwpAQCAtOTM3LDcgKzk2NCw3IEBACiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRBMiwgMCk7CiAKIAkvKiBJL08gYnVmZmVyIGRyaXZlIGFiaWxpdHkgaXMgaGlnaCAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoSU9EUklWRUEpICYgfjB4MDBjMCkgfCAweDAwODAgLCBJT0RSSVZFQSk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhJT0RSSVZFQSkgJiB+MHgwMGMwKSB8IDB4MDA4MCAsIElPRFJJVkVBKTsKIAogCWlmIChncGlvX2dldF92YWx1ZShHUElPX1BURTYpKSB7CiAJCS8qIERWSSAqLwpAQCAtMTA2OSw3ICsxMDk2LDcgQEAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEI3LCAwKTsKIAogCS8qIEkvTyBidWZmZXIgZHJpdmUgYWJpbGl0eSBpcyBoaWdoIGZvciBTREhJMSAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoSU9EUklWRUEpICYgfjB4MzAwMCkgfCAweDIwMDAgLCBJT0RSSVZFQSk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhJT0RSSVZFQSkgJiB+MHgzMDAwKSB8IDB4MjAwMCAsIElPRFJJVkVBKTsKICNlbHNlCiAJLyogZW5hYmxlIE1TSU9GMCBvbiBDTjExIChuZWVkcyBEUzIuNCBzZXQgdG8gT0ZGKSAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX01TSU9GMF9UWEQsIE5VTEwpOwpAQCAtMTEwNyw2ICsxMTM0LDExIEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJT0JMUkNLLCAgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQ0xLQVVESU9CTywgTlVMTCk7CiAKKwkvKiBzZXQgU1BVMiBjbG9jayB0byA4My40IE1IeiAqLworCWNsayA9IGNsa19nZXQoTlVMTCwgInNwdV9jbGsiKTsKKwljbGtfc2V0X3JhdGUoY2xrLCBjbGtfcm91bmRfcmF0ZShjbGssIDgzMzMzMzMzKSk7CisJY2xrX3B1dChjbGspOworCiAJLyogY2hhbmdlIHBhcmVudCBvZiBGU0kgQiAqLwogCWNsayA9IGNsa19nZXQoTlVMTCwgImZzaWJfY2xrIik7CiAJY2xrX3JlZ2lzdGVyKCZmc2ltY2tiX2Nsayk7CkBAIC0xMTIzLDYgKzExNTUsMTcgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9JTlRDX0lSUTEsIE5VTEwpOwogCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fRk5fSU5UQ19JUlExKTsKIAorCS8qIHNldCBWUFUgY2xvY2sgdG8gMTY2IE1IeiAqLworCWNsayA9IGNsa19nZXQoTlVMTCwgInZwdV9jbGsiKTsKKwljbGtfc2V0X3JhdGUoY2xrLCBjbGtfcm91bmRfcmF0ZShjbGssIDE2NjAwMDAwMCkpOworCWNsa19wdXQoY2xrKTsKKworCS8qIGVuYWJsZSBJckRBICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJEQV9PVVQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSREFfSU4sICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19QVFU1LCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFU1LCAwKTsKKwogCS8qIGVuYWJsZSBJMkMgZGV2aWNlICovCiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgaTJjMF9kZXZpY2VzLAogCQkJCUFSUkFZX1NJWkUoaTJjMF9kZXZpY2VzKSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwbXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBtcC5jCmluZGV4IDgzYzI4YmMuLjk4OTNmZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBtcC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBtcC5jCkBAIC02NCw3ICs2NCw3IEBACiAKIHVuc2lnbmVkIGNoYXIgKiBfX2luaXQgaGlnaGxhbmRlcl9wbGF0X2lycV9zZXR1cCh2b2lkKQogewotCWlmICgoY3RybF9pbncoMHhhNDAwMDcwMCkgJiAweGYwMDApID09IDB4MjAwMCkgeworCWlmICgoX19yYXdfcmVhZHcoMHhhNDAwMDcwMCkgJiAweGYwMDApID09IDB4MjAwMCkgewogCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyByNzc4MG1wIGludGVycnVwdCBjb250cm9sbGVyLlxuIik7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIAkJcmV0dXJuIGlybDJpcnE7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwcnAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBycC5jCmluZGV4IGI3MjFlODYuLjA4MDViMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBycC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBycC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAKIHVuc2lnbmVkIGNoYXIgKiBfX2luaXQgaGlnaGxhbmRlcl9wbGF0X2lycV9zZXR1cCh2b2lkKQogewotCWlmIChjdHJsX2ludygweGE1MDAwNjAwKSkgeworCWlmIChfX3Jhd19yZWFkdygweGE1MDAwNjAwKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyByNzc4MHJwIGludGVycnVwdCBjb250cm9sbGVyLlxuIik7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIAkJcmV0dXJuIGlybDJpcnE7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3Nzg1cnAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODVycC5jCmluZGV4IDM4MTFiMDYuLjU1OGIyNDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODVycC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODVycC5jCkBAIC02NiwyMCArNjYsMjAgQEAKIAogdW5zaWduZWQgY2hhciAqIF9faW5pdCBoaWdobGFuZGVyX3BsYXRfaXJxX3NldHVwKHZvaWQpCiB7Ci0JaWYgKChjdHJsX2ludygweGE0MDAwMTU4KSAmIDB4ZjAwMCkgIT0gMHgxMDAwKQorCWlmICgoX19yYXdfcmVhZHcoMHhhNDAwMDE1OCkgJiAweGYwMDApICE9IDB4MTAwMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlwcmludGsoS0VSTl9JTkZPICJVc2luZyByNzc4NXJwIGludGVycnVwdCBjb250cm9sbGVyLlxuIik7CiAKLQljdHJsX291dHcoMHgwMDAwLCBQQV9JUkxTU1IxKTsJLyogRlBHQSBJUkxTU1IxKENGX0NEIGNsZWFyKSAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIFBBX0lSTFNTUjEpOwkvKiBGUEdBIElSTFNTUjEoQ0ZfQ0QgY2xlYXIpICovCiAKIAkvKiBTZXR1cCB0aGUgRlBHQSBJUkwgKi8KLQljdHJsX291dHcoMHgwMDAwLCBQQV9JUkxQUkEpOwkvKiBGUEdBIElSTEEgKi8KLQljdHJsX291dHcoMHhlNTk4LCBQQV9JUkxQUkIpOwkvKiBGUEdBIElSTEIgKi8KLQljdHJsX291dHcoMHg3MDYwLCBQQV9JUkxQUkMpOwkvKiBGUEdBIElSTEMgKi8KLQljdHJsX291dHcoMHgwMDAwLCBQQV9JUkxQUkQpOwkvKiBGUEdBIElSTEQgKi8KLQljdHJsX291dHcoMHg0MzIxLCBQQV9JUkxQUkUpOwkvKiBGUEdBIElSTEUgKi8KLQljdHJsX291dHcoMHhkY2JhLCBQQV9JUkxQUkYpOwkvKiBGUEdBIElSTEYgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQQV9JUkxQUkEpOwkvKiBGUEdBIElSTEEgKi8KKwlfX3Jhd193cml0ZXcoMHhlNTk4LCBQQV9JUkxQUkIpOwkvKiBGUEdBIElSTEIgKi8KKwlfX3Jhd193cml0ZXcoMHg3MDYwLCBQQV9JUkxQUkMpOwkvKiBGUEdBIElSTEMgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQQV9JUkxQUkQpOwkvKiBGUEdBIElSTEQgKi8KKwlfX3Jhd193cml0ZXcoMHg0MzIxLCBQQV9JUkxQUkUpOwkvKiBGUEdBIElSTEUgKi8KKwlfX3Jhd193cml0ZXcoMHhkY2JhLCBQQV9JUkxQUkYpOwkvKiBGUEdBIElSTEYgKi8KIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIAlyZXR1cm4gaXJsMmlycTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9wc3cuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9wc3cuYwppbmRleCAzN2IxYTJlLi41MjI3ODYzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvcHN3LmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3Bzdy5jCkBAIC0yNCw3ICsyNCw3IEBACiAJdW5zaWduZWQgaW50IGwsIG1hc2s7CiAJaW50IHJldCA9IDA7CiAKLQlsID0gY3RybF9pbncoUEFfREJTVyk7CisJbCA9IF9fcmF3X3JlYWR3KFBBX0RCU1cpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSdzIG5vIHN0YXRlIGNoYW5nZSAqLwogCWlmIChwc3ctPnN0YXRlKSB7CkBAIC00NSw3ICs0NSw3IEBACiBvdXQ6CiAJLyogQ2xlYXIgdGhlIHN3aXRjaCBJUlFzICovCiAJbCB8PSAoMHg3IDw8IDEyKTsKLQljdHJsX291dHcobCwgUEFfREJTVyk7CisJX19yYXdfd3JpdGV3KGwsIFBBX0RCU1cpOwogCiAJcmV0dXJuIElSUV9SRVRWQUwocmV0KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3NldHVwLmMKaW5kZXggZjY2M2MxNC4uYWZmZDY2NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3NldHVwLmMKQEAgLTMxMSwxMyArMzExLDEzIEBACiAgKi8KIHN0YXRpYyBpbnQgaXZkcl9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQljdHJsX291dHcoY3RybF9pbncoUEFfSVZEUkNUTCkgfCAoMSA8PCBJVkRSX0NLX09OKSwgUEFfSVZEUkNUTCk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBBX0lWRFJDVEwpIHwgKDEgPDwgSVZEUl9DS19PTiksIFBBX0lWRFJDVEwpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBpdmRyX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQljdHJsX291dHcoY3RybF9pbncoUEFfSVZEUkNUTCkgJiB+KDEgPDwgSVZEUl9DS19PTiksIFBBX0lWRFJDVEwpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQQV9JVkRSQ1RMKSAmIH4oMSA8PCBJVkRSX0NLX09OKSwgUEFfSVZEUkNUTCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBpdmRyX2Nsa19vcHMgPSB7CkBAIC0zMzcsNyArMzM3LDcgQEAKIHN0YXRpYyB2b2lkIHI3NzgwcnBfcG93ZXJfb2ZmKHZvaWQpCiB7CiAJaWYgKG1hY2hfaXNfcjc3ODBtcCgpIHx8IG1hY2hfaXNfcjc3ODVycCgpKQotCQljdHJsX291dHcoMHgwMDAxLCBQQV9QT0ZGKTsKKwkJX19yYXdfd3JpdGV3KDB4MDAwMSwgUEFfUE9GRik7CiB9CiAKIC8qCkBAIC0zNDUsNyArMzQ1LDcgQEAKICAqLwogc3RhdGljIHZvaWQgX19pbml0IGhpZ2hsYW5kZXJfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKLQl1MTYgdmVyID0gY3RybF9pbncoUEFfVkVSUkVHKTsKKwl1MTYgdmVyID0gX19yYXdfcmVhZHcoUEFfVkVSUkVHKTsKIAlpbnQgaTsKIAogCXByaW50ayhLRVJOX0lORk8gIlJlbmVzYXMgU29sdXRpb25zIEhpZ2hsYW5kZXIgJXMgc3VwcG9ydC5cbiIsCkBAIC0zNzAsMTIgKzM3MCwxMiBAQAogCQljbGtfZW5hYmxlKGNsayk7CiAJfQogCi0JY3RybF9vdXR3KDB4MDAwMCwgUEFfT0JMRUQpOwkvKiBDbGVhciBMRUQuICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUEFfT0JMRUQpOwkvKiBDbGVhciBMRUQuICovCiAKIAlpZiAobWFjaF9pc19yNzc4MHJwKCkpCi0JCWN0cmxfb3V0dygweDAwMDEsIFBBX1NEUE9XKTsJLyogU0QgUG93ZXIgT04gKi8KKwkJX19yYXdfd3JpdGV3KDB4MDAwMSwgUEFfU0RQT1cpOwkvKiBTRCBQb3dlciBPTiAqLwogCi0JY3RybF9vdXR3KGN0cmxfaW53KFBBX0lWRFJDVEwpIHwgMHgwMSwgUEFfSVZEUkNUTCk7CS8qIFNpMTMxMTIgKi8KKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUEFfSVZEUkNUTCkgfCAweDAxLCBQQV9JVkRSQ1RMKTsJLyogU2kxMzExMiAqLwogCiAJcG1fcG93ZXJfb2ZmID0gcjc3ODBycF9wb3dlcl9vZmY7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L2hwNnh4X2FwbS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9ocDZ4eF9hcG0uYwppbmRleCBlODUyMTJmLi5iNDk1MzVjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L2hwNnh4X2FwbS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvaHA2eHhfYXBtLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAlpbmZvLT5hY19saW5lX3N0YXR1cyA9IChiYXR0ZXJ5ID4gSFA2ODBfQkFUVEVSWV9BQ19PTikgPwogCQkJIEFQTV9BQ19PTkxJTkUgOiBBUE1fQUNfT0ZGTElORTsKIAotCXBnZHIgPSBjdHJsX2luYihQR0RSKTsKKwlwZ2RyID0gX19yYXdfcmVhZGIoUEdEUik7CiAJaWYgKHBnZHIgJiBQR0RSX01BSU5fQkFUVEVSWV9PVVQpIHsKIAkJaW5mby0+YmF0dGVyeV9zdGF0dXMJPSBBUE1fQkFUVEVSWV9TVEFUVVNfTk9UX1BSRVNFTlQ7CiAJCWluZm8tPmJhdHRlcnlfZmxhZwk9IDB4ODA7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtLmMKaW5kZXggZDkzNmMxYS4uNDQ5OWEzNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG0uYwpAQCAtNTMsMTcgKzUzLDE3IEBACiAJc2hfd2R0X3dyaXRlX2NudCgwKTsKIAogCS8qIGRpc2FibGUgUExMMSAqLwotCWZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWZycWNyICY9IH4oRlJRQ1JfUExMRU4gfCBGUlFDUl9QU1RCWSk7Ci0JY3RybF9vdXR3KGZycWNyLCBGUlFDUik7CisJX19yYXdfd3JpdGV3KGZycWNyLCBGUlFDUik7CiAKIAkvKiBlbmFibGUgc3RhbmRieSAqLwotCXN0YmNyID0gY3RybF9pbmIoU1RCQ1IpOwotCWN0cmxfb3V0YihzdGJjciB8IFNUQkNSX1NUQlkgfCBTVEJDUl9NU1RQMiwgU1RCQ1IpOworCXN0YmNyID0gX19yYXdfcmVhZGIoU1RCQ1IpOworCV9fcmF3X3dyaXRlYihzdGJjciB8IFNUQkNSX1NUQlkgfCBTVEJDUl9NU1RQMiwgU1RCQ1IpOwogCiAJLyogc2V0IHNlbGYtcmVmcmVzaCAqLwotCW1jciA9IGN0cmxfaW53KE1DUik7Ci0JY3RybF9vdXR3KG1jciAmIH5NQ1JfUkZTSCwgTUNSKTsKKwltY3IgPSBfX3Jhd19yZWFkdyhNQ1IpOworCV9fcmF3X3dyaXRldyhtY3IgJiB+TUNSX1JGU0gsIE1DUik7CiAKIAkvKiBzZXQgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlhc20gdm9sYXRpbGUoInN0YyB2YnIsICUwIiA6ICI9ciIgKHZicl9vbGQpKTsKQEAgLTczLDggKzczLDggQEAKIAkgICAgICAgJndha2V1cF9zdGFydCwgJndha2V1cF9lbmQgLSAmd2FrZXVwX3N0YXJ0KTsKIAlhc20gdm9sYXRpbGUoImxkYyAlMCwgdmJyIiA6IDogInIiICh2YnJfbmV3KSk7CiAKLQljdHJsX291dHcoMCwgUlRDTlQpOwotCWN0cmxfb3V0dyhtY3IgfCBNQ1JfUkZTSCB8IE1DUl9STU9ERSwgTUNSKTsKKwlfX3Jhd193cml0ZXcoMCwgUlRDTlQpOworCV9fcmF3X3dyaXRldyhtY3IgfCBNQ1JfUkZTSCB8IE1DUl9STU9ERSwgTUNSKTsKIAogCWNwdV9zbGVlcCgpOwogCkBAIC04MywxNCArODMsMTQgQEAKIAlmcmVlX3BhZ2UodmJyX25ldyk7CiAKIAkvKiBlbmFibGUgUExMMSAqLwotCWZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWZycWNyIHw9IEZSUUNSX1BTVEJZOwotCWN0cmxfb3V0dyhmcnFjciwgRlJRQ1IpOworCV9fcmF3X3dyaXRldyhmcnFjciwgRlJRQ1IpOwogCXVkZWxheSg1MCk7CiAJZnJxY3IgfD0gRlJRQ1JfUExMRU47Ci0JY3RybF9vdXR3KGZycWNyLCBGUlFDUik7CisJX19yYXdfd3JpdGV3KGZycWNyLCBGUlFDUik7CiAKLQljdHJsX291dGIoc3RiY3IsIFNUQkNSKTsKKwlfX3Jhd193cml0ZWIoc3RiY3IsIFNUQkNSKTsKIAogCWNsZWFyX2JsX2JpdCgpOwogfQpAQCAtMTE1LDIxICsxMTUsMjEgQEAKIAlvdXR3KGhkNjQ0NjFfc3RiY3IsIEhENjQ0NjFfU1RCQ1IpOwogI2VuZGlmCiAKLQljdHJsX291dGIoMHgxZiwgREFDUik7CisJX19yYXdfd3JpdGViKDB4MWYsIERBQ1IpOwogCi0Jc3RiY3IgPSBjdHJsX2luYihTVEJDUik7Ci0JY3RybF9vdXRiKDB4MDEsIFNUQkNSKTsKKwlzdGJjciA9IF9fcmF3X3JlYWRiKFNUQkNSKTsKKwlfX3Jhd193cml0ZWIoMHgwMSwgU1RCQ1IpOwogCi0Jc3RiY3IyID0gY3RybF9pbmIoU1RCQ1IyKTsKLQljdHJsX291dGIoMHg3ZiAsIFNUQkNSMik7CisJc3RiY3IyID0gX19yYXdfcmVhZGIoU1RCQ1IyKTsKKwlfX3Jhd193cml0ZWIoMHg3ZiAsIFNUQkNSMik7CiAKIAlvdXR3KDB4ZjA3ZiwgSEQ2NDQ2MV9TQ1BVQ1IpOwogCiAJcG1fZW50ZXIoKTsKIAogCW91dHcoMCwgSEQ2NDQ2MV9TQ1BVQ1IpOwotCWN0cmxfb3V0YihzdGJjciwgU1RCQ1IpOwotCWN0cmxfb3V0YihzdGJjcjIsIFNUQkNSMik7CisJX19yYXdfd3JpdGViKHN0YmNyLCBTVEJDUik7CisJX19yYXdfd3JpdGViKHN0YmNyMiwgU1RCQ1IyKTsKIAogI2lmZGVmIENPTkZJR19IRDY0NDYxX0VOQUJMRVIKIAloZDY0NDYxX3N0YmNyID0gaW53KEhENjQ0NjFfU1RCQ1IpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jCmluZGV4IGU2ZGQ1ZTkuLjhjOWFkZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMKQEAgLTE0OSwxOSArMTQ5LDE5IEBACiAKIAlzaF9kYWNfb3V0cHV0KDAsIERBQ19TUEVBS0VSX1ZPTFVNRSk7CiAJc2hfZGFjX2Rpc2FibGUoREFDX1NQRUFLRVJfVk9MVU1FKTsKLQl2OCA9IGN0cmxfaW5iKERBQ1IpOworCXY4ID0gX19yYXdfcmVhZGIoREFDUik7CiAJdjggJj0gfkRBQ1JfREFFOwotCWN0cmxfb3V0Yih2OCxEQUNSKTsKKwlfX3Jhd193cml0ZWIodjgsREFDUik7CiAKLQl2OCA9IGN0cmxfaW5iKFNDUERSKTsKKwl2OCA9IF9fcmF3X3JlYWRiKFNDUERSKTsKIAl2OCB8PSBTQ1BEUl9UU19TQ0FOX1ggfCBTQ1BEUl9UU19TQ0FOX1k7CiAJdjggJj0gflNDUERSX1RTX1NDQU5fRU5BQkxFOwotCWN0cmxfb3V0Yih2OCwgU0NQRFIpOworCV9fcmF3X3dyaXRlYih2OCwgU0NQRFIpOwogCi0JdiA9IGN0cmxfaW53KFNDUENSKTsKKwl2ID0gX19yYXdfcmVhZHcoU0NQQ1IpOwogCXYgJj0gflNDUENSX1RTX01BU0s7CiAJdiB8PSBTQ1BDUl9UU19FTkFCTEU7Ci0JY3RybF9vdXR3KHYsIFNDUENSKTsKKwlfX3Jhd193cml0ZXcodiwgU0NQQ1IpOwogfQogZGV2aWNlX2luaXRjYWxsKGhwNnh4X2RldmljZXNfc2V0dXApOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWtmcjJyMDkvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gta2ZyMnIwOS9zZXR1cC5jCmluZGV4IDVkN2I1ZDkuLmIyY2QwZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gta2ZyMnIwOS9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gta2ZyMnIwOS9zZXR1cC5jCkBAIC0yODIsNyArMjgyLDcgQEAKIAkJICogdXNlIDEuOCBWIGZvciBWY2NRX1ZJTwogCQkgKiB1c2UgMi44NVYgZm9yIFZjY1FfU1IKIAkJICovCi0JCWN0cmxfb3V0dygoY3RybF9pbncoRFJWQ1JCKSAmIH4weDAwMDMpIHwgMHgwMDAxLCBEUlZDUkIpOworCQlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KERSVkNSQikgJiB+MHgwMDAzKSB8IDB4MDAwMSwgRFJWQ1JCKTsKIAogCQkvKiByZXNldCBjbGVhciAqLwogCQlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19QVEI0LCBOVUxMKTsKQEAgLTM1MSw3ICszNTEsNyBAQAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydCAgPSAxMDEsCisJCS5zdGFydCAgPSAxMDAsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTQ5MiwxMyArNDkyLDEzIEBACiAJaWYgKGtmcjJyMDlfdXNiMF9nYWRnZXRfaTJjX3NldHVwKCkgIT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7IC8qIHVuYWJsZSB0byBjb25maWd1cmUgdXNpbmcgaTJjICovCiAKLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfTVNFTENSQikgJiB+MHhjMDAwKSB8IDB4ODAwMCwgUE9SVF9NU0VMQ1JCKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfTVNFTENSQikgJiB+MHhjMDAwKSB8IDB4ODAwMCwgUE9SVF9NU0VMQ1JCKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9QRFNUQVRVUywgTlVMTCk7IC8qIFItc3RhbmRieSBkaXNhYmxlcyBVU0IgY2xvY2sgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19QVFY2LCBOVUxMKTsgLyogVVNCQ0xLX09OICovCiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRWNiwgMSk7IC8qIFVTQkNMS19PTiA9IEggKi8KIAltc2xlZXAoMjApOyAvKiB3YWl0IDIwbXMgdG8gbGV0IHRoZSBjbG9jayBzZXR0bGUgKi8KIAljbGtfZW5hYmxlKGNsa19nZXQoTlVMTCwgInVzYjAiKSk7Ci0JY3RybF9vdXR3KDB4MDYwMCwgMHhhNDA1MDFkNCk7CisJX19yYXdfd3JpdGV3KDB4MDYwMCwgMHhhNDA1MDFkNCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyNiwxMiArNTI2LDEyIEBACiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRHMywgMSk7IC8qIEhQT05fT04gPSBIICovCiAKIAkvKiBzZXR1cCBOT1IgZmxhc2ggYXQgQ1MwICovCi0JY3RybF9vdXRsKDB4MzZkYjA0MDAsIEJTQ19DUzBCQ1IpOwotCWN0cmxfb3V0bCgweDAwMDAwNTAwLCBCU0NfQ1MwV0NSKTsKKwlfX3Jhd193cml0ZWwoMHgzNmRiMDQwMCwgQlNDX0NTMEJDUik7CisJX19yYXdfd3JpdGVsKDB4MDAwMDA1MDAsIEJTQ19DUzBXQ1IpOwogCiAJLyogc2V0dXAgTkFORCBmbGFzaCBhdCBDUzQgKi8KLQljdHJsX291dGwoMHgzNmRiMDQwMCwgQlNDX0NTNEJDUik7Ci0JY3RybF9vdXRsKDB4MDAwMDA1MDAsIEJTQ19DUzRXQ1IpOworCV9fcmF3X3dyaXRlbCgweDM2ZGIwNDAwLCBCU0NfQ1M0QkNSKTsKKwlfX3Jhd193cml0ZWwoMHgwMDAwMDUwMCwgQlNDX0NTNFdDUik7CiAKIAkvKiBzZXR1cCBLRVlTQyBwaW5zICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMCwgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svZ2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svZ2lvLmMKaW5kZXggNTI4MDEzMS4uMDFlNmFiYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYwpAQCAtNzYsMzkgKzc2LDM5IEBACiAJCWJyZWFrOwogCiAJY2FzZSBHSU9EUlZfSU9DU0dJT0RBVEExOgkvKiB3cml0ZSBieXRlICovCi0JCWN0cmxfb3V0YigodW5zaWduZWQgY2hhcikoMHgwZmYgJiBkYXRhKSwgYWRkcik7CisJCV9fcmF3X3dyaXRlYigodW5zaWduZWQgY2hhcikoMHgwZmYgJiBkYXRhKSwgYWRkcik7CiAJCWJyZWFrOwogCiAJY2FzZSBHSU9EUlZfSU9DU0dJT0RBVEEyOgkvKiB3cml0ZSB3b3JkICovCiAJCWlmIChhZGRyICYgMHgwMSkgewogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KLQkJY3RybF9vdXR3KCh1bnNpZ25lZCBzaG9ydCBpbnQpKDB4MGZmZmYgJiBkYXRhKSwgYWRkcik7CisJCV9fcmF3X3dyaXRldygodW5zaWduZWQgc2hvcnQgaW50KSgweDBmZmZmICYgZGF0YSksIGFkZHIpOwogCQlicmVhazsKIAogCWNhc2UgR0lPRFJWX0lPQ1NHSU9EQVRBNDoJLyogd3JpdGUgbG9uZyAqLwogCQlpZiAoYWRkciAmIDB4MDMpIHsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9Ci0JCWN0cmxfb3V0bChkYXRhLCBhZGRyKTsKKwkJX19yYXdfd3JpdGVsKGRhdGEsIGFkZHIpOwogCQlicmVhazsKIAogCWNhc2UgR0lPRFJWX0lPQ0dHSU9EQVRBMToJLyogcmVhZCBieXRlICovCi0JCWRhdGEgPSBjdHJsX2luYihhZGRyKTsKKwkJZGF0YSA9IF9fcmF3X3JlYWRiKGFkZHIpOwogCQlicmVhazsKIAogCWNhc2UgR0lPRFJWX0lPQ0dHSU9EQVRBMjoJLyogcmVhZCB3b3JkICovCiAJCWlmIChhZGRyICYgMHgwMSkgewogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KLQkJZGF0YSA9IGN0cmxfaW53KGFkZHIpOworCQlkYXRhID0gX19yYXdfcmVhZHcoYWRkcik7CiAJCWJyZWFrOwogCiAJY2FzZSBHSU9EUlZfSU9DR0dJT0RBVEE0OgkvKiByZWFkIGxvbmcgKi8KIAkJaWYgKGFkZHIgJiAweDAzKSB7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQotCQlkYXRhID0gY3RybF9pbmwoYWRkcik7CisJCWRhdGEgPSBfX3Jhd19yZWFkbChhZGRyKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svaXJxLmMKaW5kZXggN2IyODRjZC4uOTZmMzhhNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9pcnEuYwpAQCAtMjIsMTQgKzIyLDE0IEBACiB7CiAJdW5zaWduZWQgY2hhciBtYXNrID0gMHhmZiBeICgweDAxIDw8IChpcnEgLSA1KSk7CiAKLQljdHJsX291dGIoY3RybF9pbmIoUEFfSU1BU0spICYgbWFzaywgUEFfSU1BU0spOworCV9fcmF3X3dyaXRlYihfX3Jhd19yZWFkYihQQV9JTUFTSykgJiBtYXNrLCBQQV9JTUFTSyk7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9sYW5kaXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGNoYXIgdmFsdWUgPSAoMHgwMSA8PCAoaXJxIC0gNSkpOwogCi0JY3RybF9vdXRiKGN0cmxfaW5iKFBBX0lNQVNLKSB8IHZhbHVlLCBQQV9JTUFTSyk7CisJX19yYXdfd3JpdGViKF9fcmF3X3JlYWRiKFBBX0lNQVNLKSB8IHZhbHVlLCBQQV9JTUFTSyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbGFuZGlza19pcnFfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewpAQCAtNTIsNSArNTIsNSBAQAogCQkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKIAkJZW5hYmxlX2xhbmRpc2tfaXJxKGkpOwogCX0KLQljdHJsX291dGIoMHgwMCwgUEFfUFdSSU5UX0NMUik7CisJX19yYXdfd3JpdGViKDB4MDAsIFBBX1BXUklOVF9DTFIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL3Bzdy5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL3Bzdy5jCmluZGV4IGU2YjBlZmEuLmJlZjgzNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9wc3cuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svcHN3LmMKQEAgLTI1LDcgKzI1LDcgQEAKIAl1bnNpZ25lZCBpbnQgc3dfdmFsdWU7CiAJaW50IHJldCA9IDA7CiAKLQlzd192YWx1ZSA9ICgweDBmZiAmICh+Y3RybF9pbmIoUEFfU1RBVFVTKSkpOworCXN3X3ZhbHVlID0gKDB4MGZmICYgKH5fX3Jhd19yZWFkYihQQV9TVEFUVVMpKSk7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlJ3Mgbm8gc3RhdGUgY2hhbmdlICovCiAJaWYgKHBzdy0+c3RhdGUpIHsKQEAgLTQyLDcgKzQyLDcgQEAKIAogb3V0OgogCS8qIENsZWFyIHRoZSBzd2l0Y2ggSVJRcyAqLwotCWN0cmxfb3V0YigweDAwLCBQQV9QV1JJTlRfQ0xSKTsKKwlfX3Jhd193cml0ZWIoMHgwMCwgUEFfUFdSSU5UX0NMUik7CiAKIAlyZXR1cm4gSVJRX1JFVFZBTChyZXQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svc2V0dXAuYwppbmRleCBkYjIyZWEyLi41MDMzN2FjYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL3NldHVwLmMKQEAgLTI1LDcgKzI1LDcgQEAKIAogc3RhdGljIHZvaWQgbGFuZGlza19wb3dlcl9vZmYodm9pZCkKIHsKLSAgICAgICAgY3RybF9vdXRiKDB4MDEsIFBBX1NIVVRET1dOKTsKKyAgICAgICAgX19yYXdfd3JpdGViKDB4MDEsIFBBX1NIVVRET1dOKTsKIH0KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjZl9pZGVfcmVzb3VyY2VzWzNdOwpAQCAtNjMsNyArNjMsNyBAQAogCS8qIG9wZW4gSS9PIGFyZWEgd2luZG93ICovCiAJcGFkZHJiYXNlID0gdmlydF90b19waHlzKCh2b2lkICopUEFfQVJFQTVfSU8pOwogCXByb3QgPSBQQUdFX0tFUk5FTF9QQ0MoMSwgX1BBR0VfUENDX0lPMTYpOwotCWNmX2lkZV9iYXNlID0gcDNfaW9yZW1hcChwYWRkcmJhc2UsIFBBR0VfU0laRSwgcHJvdC5wZ3Byb3QpOworCWNmX2lkZV9iYXNlID0gaW9yZW1hcF9wcm90KHBhZGRyYmFzZSwgUEFHRV9TSVpFLCBwZ3Byb3RfdmFsKHByb3QpKTsKIAlpZiAoIWNmX2lkZV9iYXNlKSB7CiAJCXByaW50aygiYWxsb2NhdGVfY2ZfYXJlYSA6IGNhbid0IG9wZW4gQ0YgSS9PIHdpbmRvdyFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTg4LDcgKzg4LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBsYW5kaXNrX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAgICAgICAgIC8qIExFRCBPTiAqLwotCWN0cmxfb3V0YihjdHJsX2luYihQQV9MRUQpIHwgMHgwMywgUEFfTEVEKTsKKwlfX3Jhd193cml0ZWIoX19yYXdfcmVhZGIoUEFfTEVEKSB8IDB4MDMsIFBBX0xFRCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJJLU8gREFUQSBERVZJQ0UsIElOQy4gXCJMQU5ESVNLIFNlcmllc1wiIHN1cHBvcnQuXG4iKTsKIAlwbV9wb3dlcl9vZmYgPSBsYW5kaXNrX3Bvd2VyX29mZjsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL3NldHVwLmMKaW5kZXggMmIwYjU4MS4uNzliNGUwZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9zZXR1cC5jCkBAIC01Niw4ICs1Niw4IEBACiAJLyogb3BlbiBJL08gYXJlYSB3aW5kb3cgKi8KIAlwYWRkcmJhc2UgPSB2aXJ0X3RvX3BoeXMoKHZvaWQqKVBBX0FSRUE1X0lPKTsKIAlwc2l6ZSA9IFBBR0VfU0laRTsKLQlwcm90ID0gUEFHRV9LRVJORUxfUENDKCAxICwgX1BBR0VfUENDX0lPMTYpOwotCWNmMF9pb19iYXNlID0gKHUzMilwM19pb3JlbWFwKHBhZGRyYmFzZSwgcHNpemUsIHByb3QucGdwcm90KTsKKwlwcm90ID0gUEFHRV9LRVJORUxfUENDKDEsIF9QQUdFX1BDQ19JTzE2KTsKKwljZjBfaW9fYmFzZSA9ICh1MzIpaW9yZW1hcF9wcm90KHBhZGRyYmFzZSwgcHNpemUsIHBncHJvdF92YWwocHJvdCkpOwogCWlmICghY2YwX2lvX2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcyA6IGNhbid0IG9wZW4gQ0YgSS9PIHdpbmRvdyFcbiIgLCBfX2Z1bmNfXyApOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaW8uYwppbmRleCA1MmRkNzQ4Li4yOTYwYzY1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pby5jCkBAIC0xNDEsMTAgKzE0MSwxMCBAQAogI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKIAkvKiBTeXN0ZW0gYm9hcmQgcHJlc2VudCwganVzdCBtYWtlIGEgZHVtbXkgU1JBTSBhY2Nlc3MuICAoQ1MwIHdpbGwgYmUKIAkgICBtYXBwZWQgdG8gUENJIG1lbW9yeSwgcHJvYmFibHkgZ29vZCB0byBhdm9pZCBpdC4pICovCi0JY3RybF9pbncoMHhhNjgwMDAwMCk7CisJX19yYXdfcmVhZHcoMHhhNjgwMDAwMCk7CiAjZWxzZQogCS8qIENTMCB3aWxsIGJlIG1hcHBlZCB0byBmbGFzaCwgUk9NIGV0YyBzbyBzYWZlIHRvIGFjY2VzcyBpdC4gKi8KLQljdHJsX2ludygweGEwMDAwMDAwKTsKKwlfX3Jhd19yZWFkdygweGEwMDAwMDAwKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pcnEuYwppbmRleCBiNTUxOTYzLi5hMjZkMTY2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaXJxLmMKQEAgLTg4LDcgKzg4LDcgQEAKIAlmcGdhSXJxID0gZnBnYUlycVRhYmxlW2lycV0uZnBnYUlycTsKIAogCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgRlBHQSBJTlRDIHJlZ2lzdGVyICovCi0JY3RybF9vdXRsKE1JQ1JPREVWX0ZQR0FfSU5UQ19NQVNLKGZwZ2FJcnEpLCBNSUNST0RFVl9GUEdBX0lOVERTQl9SRUcpOworCV9fcmF3X3dyaXRlbChNSUNST0RFVl9GUEdBX0lOVENfTUFTSyhmcGdhSXJxKSwgTUlDUk9ERVZfRlBHQV9JTlREU0JfUkVHKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX21pY3JvZGV2X2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMTA3LDEzICsxMDcsMTMgQEAKIAlwcmlvcml0eVJlZyA9IE1JQ1JPREVWX0ZQR0FfSU5UUFJJX1JFRyhmcGdhSXJxKTsKIAogCS8qIHNldCBwcmlvcml0eSBmb3IgdGhlIGludGVycnVwdCAqLwotCXByaW9yaXRpZXMgPSBjdHJsX2lubChwcmlvcml0eVJlZyk7CisJcHJpb3JpdGllcyA9IF9fcmF3X3JlYWRsKHByaW9yaXR5UmVnKTsKIAlwcmlvcml0aWVzICY9IH5NSUNST0RFVl9GUEdBX0lOVFBSSV9NQVNLKGZwZ2FJcnEpOwogCXByaW9yaXRpZXMgfD0gTUlDUk9ERVZfRlBHQV9JTlRQUklfTEVWRUwoZnBnYUlycSwgcHJpKTsKLQljdHJsX291dGwocHJpb3JpdGllcywgcHJpb3JpdHlSZWcpOworCV9fcmF3X3dyaXRlbChwcmlvcml0aWVzLCBwcmlvcml0eVJlZyk7CiAKIAkvKiBlbmFibGUgaW50ZXJydXB0cyBvbiB0aGUgRlBHQSBJTlRDIHJlZ2lzdGVyICovCi0JY3RybF9vdXRsKE1JQ1JPREVWX0ZQR0FfSU5UQ19NQVNLKGZwZ2FJcnEpLCBNSUNST0RFVl9GUEdBX0lOVEVOQl9SRUcpOworCV9fcmF3X3dyaXRlbChNSUNST0RFVl9GUEdBX0lOVENfTUFTSyhmcGdhSXJxKSwgTUlDUk9ERVZfRlBHQV9JTlRFTkJfUkVHKTsKIH0KIAogLyogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBkZXNpcmVkIGlycSBoYW5kbGVyIHRvIGJlIGEgTWljcm9EZXYgdHlwZSAqLwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJaW50IGk7CiAKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIEZQR0EgSU5UQyByZWdpc3RlciAqLwotCWN0cmxfb3V0bCh+MHVsLCBNSUNST0RFVl9GUEdBX0lOVERTQl9SRUcpOworCV9fcmF3X3dyaXRlbCh+MHVsLCBNSUNST0RFVl9GUEdBX0lOVERTQl9SRUcpOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9FWFRFUk5BTF9JUlFTOyBpKyspCiAJCW1ha2VfbWljcm9kZXZfaXJxKGkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCmluZGV4IDUwN2M3N2IuLmJlMzAwYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKQEAgLTM5Nyw3ICszOTcsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0CT0gMTAxLAorCQkuc3RhcnQJPSAxMDAsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTQzMSw3ICs0MzEsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvdjc3MnhfY2FtZXJhX2luZm8gb3Y3NzI1X2luZm8gPSB7Ci0JLmJ1c3dpZHRoCT0gU09DQU1fREFUQVdJRFRIXzgsCisJLmZsYWdzCQk9IE9WNzcyWF9GTEFHXzhCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBvdjc3MjVfbGluayA9IHsKQEAgLTQ5NiwyOCArNDk2LDE2IEBACiAJCQkJCSZtaWdvcl9zZHJhbV9lbnRlcl9lbmQsCiAJCQkJCSZtaWdvcl9zZHJhbV9sZWF2ZV9zdGFydCwKIAkJCQkJJm1pZ29yX3NkcmFtX2xlYXZlX2VuZCk7Ci0jaWZkZWYgQ09ORklHX1BNCiAJLyogTGV0IEQxMSBMRUQgc2hvdyBTVEFUVVMwICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU1RBVFVTMCwgTlVMTCk7CiAKIAkvKiBMaXQgRDEyIExFRCBzaG93IFBEU1RBVFVTICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUERTVEFUVVMsIE5VTEwpOwotI2Vsc2UKLQkvKiBMaXQgRDExIExFRCAqLwotCWdwaW9fcmVxdWVzdChHUElPX1BUSjcsIE5VTEwpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUSjcsIDEpOwotCWdwaW9fZXhwb3J0KEdQSU9fUFRKNywgMCk7Ci0KLQkvKiBMaXQgRDEyIExFRCAqLwotCWdwaW9fcmVxdWVzdChHUElPX1BUSjUsIE5VTEwpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUSjUsIDEpOwotCWdwaW9fZXhwb3J0KEdQSU9fUFRKNSwgMCk7Ci0jZW5kaWYKIAogCS8qIFNNQzkxQzExMSAtIEVuYWJsZSBJUlEwLCBTZXR1cCBDUzQgZm9yIDE2LWJpdCBmYXN0IGFjY2VzcyAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSUTAsIE5VTEwpOwotCWN0cmxfb3V0bCgweDAwMDAzNDAwLCBCU0NfQ1M0QkNSKTsKLQljdHJsX291dGwoMHgwMDExMDA4MCwgQlNDX0NTNFdDUik7CisJX19yYXdfd3JpdGVsKDB4MDAwMDM0MDAsIEJTQ19DUzRCQ1IpOworCV9fcmF3X3dyaXRlbCgweDAwMTEwMDgwLCBCU0NfQ1M0V0NSKTsKIAogCS8qIEtFWVNDICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMCwgTlVMTCk7CkBAIC01MzMsNyArNTIxLDcgQEAKIAogCS8qIE5BTkQgRmxhc2ggKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9DUzZBX0NFMkIsIE5VTEwpOwotCWN0cmxfb3V0bCgoY3RybF9pbmwoQlNDX0NTNkFCQ1IpICYgfjB4MDYwMCkgfCAweDAyMDAsIEJTQ19DUzZBQkNSKTsKKwlfX3Jhd193cml0ZWwoKF9fcmF3X3JlYWRsKEJTQ19DUzZBQkNSKSAmIH4weDA2MDApIHwgMHgwMjAwLCBCU0NfQ1M2QUJDUik7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRBMSwgTlVMTCk7CiAJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19QVEExKTsKIApAQCAtNjI3LDcgKzYxNSw3IEBACiAjZWxzZQogCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUVDAsIDEpOwogI2VuZGlmCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfTVNFTENSQikgfCAweDIwMDAsIFBPUlRfTVNFTENSQik7IC8qIEQxNS0+RDggKi8KKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUE9SVF9NU0VMQ1JCKSB8IDB4MjAwMCwgUE9SVF9NU0VMQ1JCKTsgLyogRDE1LT5EOCAqLwogCiAJcGxhdGZvcm1fcmVzb3VyY2Vfc2V0dXBfbWVtb3J5KCZtaWdvcl9jZXVfZGV2aWNlLCAiY2V1IiwgNCA8PCAyMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvaXJxLmMKaW5kZXggNzhkN2IyNy4uNTc0ZjAwOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvaXJxLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogewogCXN0cnVjdCBpbnRjX2Rlc2MgKmQ7CiAKLQlzd2l0Y2ggKGN0cmxfaW53KFBBX1ZFUlJFRykgJiAweGYwKSB7CisJc3dpdGNoIChfX3Jhd19yZWFkdyhQQV9WRVJSRUcpICYgMHhmMCkgewogI2lmZGVmIENPTkZJR19SVFM3NzUxUjJEX1BMVVMKIAljYXNlIDB4MTA6CiAJCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIFIyRC1QTFVTIGludGVycnVwdCBjb250cm9sbGVyLlxuIik7CkBAIC0xNDcsNyArMTQ3LDcgQEAKICNlbmRpZgogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0lORk8gIlVua25vd24gUjJEIGludGVycnVwdCBjb250cm9sbGVyIDB4JTA0eFxuIiwKLQkJICAgICAgIGN0cmxfaW53KFBBX1ZFUlJFRykpOworCQkgICAgICAgX19yYXdfcmVhZHcoUEFfVkVSUkVHKSk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXIyZC9zZXR1cC5jCmluZGV4IGE2MjVlY2IuLmI4NGRmNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcjJkL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvc2V0dXAuYwpAQCAtNzAsNyArNzAsNyBAQAogc3RhdGljIHZvaWQgcjJkX2NoaXBfc2VsZWN0KHN0cnVjdCBzaF9zcGlfaW5mbyAqc3BpLCBpbnQgY3MsIGludCBzdGF0ZSkKIHsKIAlCVUdfT04oY3MgIT0gMCk7ICAvKiBTaW5nbGUgRXBzb24gUlRDLTk3MDFKRSBhdHRhY2hlZCBvbiBDUzAgKi8KLQljdHJsX291dHcoc3RhdGUgPT0gQklUQkFOR19DU19BQ1RJVkUsIFBBX1JUQ0NFKTsKKwlfX3Jhd193cml0ZXcoc3RhdGUgPT0gQklUQkFOR19DU19BQ1RJVkUsIFBBX1JUQ0NFKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzaF9zcGlfaW5mbyBzcGlfaW5mbyA9IHsKQEAgLTI2Miw3ICsyNjIsNyBAQAogCiBzdGF0aWMgdm9pZCBydHM3NzUxcjJkX3Bvd2VyX29mZih2b2lkKQogewotCWN0cmxfb3V0dygweDAwMDEsIFBBX1BPV09GRik7CisJX19yYXdfd3JpdGV3KDB4MDAwMSwgUEFfUE9XT0ZGKTsKIH0KIAogLyoKQEAgLTI3MSwxNCArMjcxLDE0IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcnRzNzc1MXIyZF9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewogCXZvaWQgX19pb21lbSAqc201MDFfcmVnOwotCXUxNiB2ZXIgPSBjdHJsX2ludyhQQV9WRVJSRUcpOworCXUxNiB2ZXIgPSBfX3Jhd19yZWFkdyhQQV9WRVJSRUcpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiUmVuZXNhcyBUZWNobm9sb2d5IFNhbGVzIFJUUzc3NTFSMkQgc3VwcG9ydC5cbiIpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiRlBHQSB2ZXJzaW9uOiVkIChyZXZpc2lvbjolZClcbiIsCiAJCQkJCSh2ZXIgPj4gNCkgJiAweGYsIHZlciAmIDB4Zik7CiAKLQljdHJsX291dHcoMHgwMDAwLCBQQV9PVVRQT1JUKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQQV9PVVRQT1JUKTsKIAlwbV9wb3dlcl9vZmYgPSBydHM3NzUxcjJkX3Bvd2VyX29mZjsKIAogCS8qIHNtNTAxIGRyYW0gY29uZmlndXJhdGlvbjoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL2RldmljZXMtcnNrNzIwMy5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svZGV2aWNlcy1yc2s3MjAzLmMKaW5kZXggYzM3NjE3ZS4uNGZhMDhiYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svZGV2aWNlcy1yc2s3MjAzLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svZGV2aWNlcy1yc2s3MjAzLmMKQEAgLTk2LDcgKzk2LDcgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9SWEQwLCBOVUxMKTsKIAogCS8qIFNldHVwIExBTjkxMTg6IENTMSBpbiAxNi1iaXQgQmlnIEVuZGlhbiBNb2RlLCBJUlEwIGF0IFBvcnQgQiAqLwotCWN0cmxfb3V0bCgweDM2ZGIwNDAwLCAweGZmZmMwMDA4KTsgLyogQ1MxQkNSICovCisJX19yYXdfd3JpdGVsKDB4MzZkYjA0MDAsIDB4ZmZmYzAwMDgpOyAvKiBDUzFCQ1IgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9JUlEwX1BCLCBOVUxMKTsKIAogCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhyc2s3MjAzX2RldmljZXMsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvaXJxLmMKaW5kZXggODU1NTU4MS4uZTVmNzU2NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3NzgwL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9pcnEuYwpAQCAtMzcsOSArMzcsOSBAQAogewogCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIFNESzc3ODAgaW50ZXJydXB0IGNvbnRyb2xsZXIuXG4iKTsKIAotCWN0cmxfb3V0dygweEZGRkYsIEZQR0FfSVJRME1SKTsKKwlfX3Jhd193cml0ZXcoMHhGRkZGLCBGUEdBX0lSUTBNUik7CiAJLyogU2V0dXAgSVJMIDAtMyAqLwotCWN0cmxfb3V0dygweDAwMDMsIEZQR0FfSU1TUik7CisJX19yYXdfd3JpdGV3KDB4MDAwMywgRlBHQV9JTVNSKTsKIAlwbGF0X2lycV9zZXR1cF9waW5zKElSUV9NT0RFX0lSTDMyMTApOwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZmcGdhX2ludGNfZGVzYyk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODAvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jCmluZGV4IGFhZDk0YTcuLjRkYTM4ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4MC9zZXR1cC5jCkBAIC0yMCwyNyArMjAsMTggQEAKIAogI2RlZmluZSBHUElPX1BFQ1IgICAgICAgIDB4RkZFQTAwMDgKIAotLy8qIEhlYXJ0YmVhdCAqLwotc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKLQkucmVnc2l6ZSA9IDE2LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gUEFfTEVELAotCQkuZW5kICAgID0gUEFfTEVELAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKKy8qIEhlYXJ0YmVhdCAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0ICA9IFBBX0xFRCwKKwkuZW5kICAgID0gUEFfTEVELAorCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzE2QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKIAkubmFtZSAgICAgICAgICAgPSAiaGVhcnRiZWF0IiwKIAkuaWQgICAgICAgICAgICAgPSAtMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZoZWFydGJlYXRfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCi0JLnJlc291cmNlICAgICAgID0gaGVhcnRiZWF0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyAgPSAxLAorCS5yZXNvdXJjZSAgICAgICA9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiAvKiBTTUM5MXggKi8KQEAgLTgzLDggKzc0LDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHNkazc3ODBfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKLQl1MTYgdmVyID0gY3RybF9pbncoRlBHQV9GUFZFUlIpOwotCXUxNiBkYXRlU3RhbXAgPSBjdHJsX2ludyhGUEdBX0ZQREFURVIpOworCXUxNiB2ZXIgPSBfX3Jhd19yZWFkdyhGUEdBX0ZQVkVSUik7CisJdTE2IGRhdGVTdGFtcCA9IF9fcmF3X3JlYWR3KEZQR0FfRlBEQVRFUik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJSZW5lc2FzIFRlY2hub2xvZ3kgRXVyb3BlIFNESzc3ODAgc3VwcG9ydC5cbiIpOwogCXByaW50ayhLRVJOX0lORk8gIkJvYXJkIHZlcnNpb246ICVkIChyZXZpc2lvbiAlZCksICIKQEAgLTk0LDcgKzg1LDcgQEAKIAkJCSBkYXRlU3RhbXApOwogCiAJLyogU2V0dXAgcGluIG11eCdpbmcgZm9yIFBDSUMgKi8KLQljdHJsX291dHcoMHgwMDAwLCBHUElPX1BFQ1IpOworCV9fcmF3X3dyaXRldygweDAwMDAsIEdQSU9fUEVDUik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5ZjE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmoteQk6PSBzZXR1cC5vIGZwZ2EubyBpcnEubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L2ZwZ2EuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9mcGdhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U0ZWM2NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9mcGdhLmMKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIFNESzc3ODYgRlBHQSBTdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CisjaW5jbHVkZSA8bWFjaC9mcGdhLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKyNkZWZpbmUgRlBHQV9SRUdTX09GRlNFVAkweDAzZmZmODAwCisjZGVmaW5lIEZQR0FfUkVHU19TSVpFCQkweDQ5MAorCisvKgorICogVGhlIEZQR0EgY2FuIGJlIG1hcHBlZCBpbiBhbnkgb2YgdGhlIGdlbmVyYWxseSBhdmFpbGFibGUgYXJlYXMsCisgKiBzbyB3ZSBhdHRlbXB0IHRvIHNjYW4gZm9yIGl0IHVzaW5nIHRoZSBmaXhlZCBTUlNUUiByZWFkIG1hZ2ljLgorICoKKyAqIE9uY2UgdGhlIEZQR0EgaXMgbG9jYXRlZCwgdGhlIHJlc3Qgb2YgdGhlIG1hcHBpbmcgZGF0YSBmb3IgdGhlIG90aGVyCisgKiBjb21wb25lbnRzIGNhbiBiZSBkZXRlcm1pbmVkIGR5bmFtaWNhbGx5IGZyb20gaXRzIHNlY3Rpb24gbWFwcGluZworICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBfX2lvbWVtICpzZGs3Nzg2X2ZwZ2FfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFyZWE7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJLyoKKwkgKiBJdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBhcmVhcyB3aGVyZSB0aGUgRlBHQSBjb3VsZCBiZSBtYXBwZWQuCisJICogVGhlIHBvc3NpYmxlIHJhbmdlIGlzIGFueXdoZXJlIGZyb20gYXJlYSAwIHRocm91Z2ggNiwgYXJlYSA3CisJICogaXMgcmVzZXJ2ZWQuCisJICovCisJZm9yIChhcmVhID0gUEFfQVJFQTA7IGFyZWEgPCBQQV9BUkVBNzsgYXJlYSArPSBTWl82NE0pIHsKKwkJYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShhcmVhICsgRlBHQV9SRUdTX09GRlNFVCwgRlBHQV9SRUdTX1NJWkUpOworCQlpZiAoIWJhc2UpIHsKKwkJCS8qIEZhaWxlZCB0byByZW1hcCB0aGlzIGFyZWEsIG1vdmUgYWxvbmcuICovCisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChpb3JlYWQxNihiYXNlICsgU1JTVFIpID09IFNSU1RSX01BR0lDKQorCQkJcmV0dXJuIGJhc2U7CS8qIEZvdW5kIGl0ISAqLworCisJCWlvdW5tYXAoYmFzZSk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgX19pb21lbSAqc2RrNzc4Nl9mcGdhX2Jhc2U7CisKK3ZvaWQgX19pbml0IHNkazc3ODZfZnBnYV9pbml0KHZvaWQpCit7CisJdTE2IHZlcnNpb24sIGRhdGU7CisKKwlzZGs3Nzg2X2ZwZ2FfYmFzZSA9IHNkazc3ODZfZnBnYV9wcm9iZSgpOworCWlmICh1bmxpa2VseSghc2RrNzc4Nl9mcGdhX2Jhc2UpKSB7CisJCXBhbmljKCJGUEdBIGRldGVjdGlvbiBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXZlcnNpb24gPSBmcGdhX3JlYWRfcmVnKEZQR0FWUik7CisJZGF0ZSA9IGZwZ2FfcmVhZF9yZWcoRlBHQURSKTsKKworCXByX2luZm8oIlx0RlBHQSB2ZXJzaW9uOlx0JWQuJWQgKGJ1aWx0IG9uICVkLyVkLyVkKVxuIiwKKwkJYmNkMmJpbih2ZXJzaW9uID4+IDgpICYgMHhmLCBiY2QyYmluKHZlcnNpb24gJiAweGYpLAorCQkoKGRhdGUgPj4gMTIpICYgMHhmKSArIDIwMDAsCisJCShkYXRlID4+IDgpICYgMHhmLCBiY2QyYmluKGRhdGUgJiAweGZmKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY5NDNhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2RrNzc4Ni9pcnEuYwpAQCAtMCwwICsxLDQ4IEBACisvKgorICogU0RLNzc4NiBGUEdBIElSUSBDb250cm9sbGVyIFN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwICBNYXR0IEZsZW1pbmcKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9mcGdhLmg+CisjaW5jbHVkZSA8bWFjaC9pcnEuaD4KKworZW51bSB7CisJQVRBX0lSUV9CSVQJCT0gMSwKKwlTUElfQlVTWV9CSVQJCT0gMiwKKwlMSVJRNV9CSVQJCT0gMywKKwlMSVJRNl9CSVQJCT0gNCwKKwlMSVJRN19CSVQJCT0gNSwKKwlMSVJROF9CSVQJCT0gNiwKKwlLRVlfSVJRX0JJVAkJPSA3LAorCVBFTl9JUlFfQklUCQk9IDgsCisJRVRIX0lSUV9CSVQJCT0gOSwKKwlSVENfQUxBUk1fQklUCQk9IDEwLAorCUNSWVNUQUxfRkFJTF9CSVQJPSAxMiwKKwlFVEhfUE1FX0JJVAkJPSAxNCwKK307CisKK3ZvaWQgX19pbml0IHNkazc3ODZfaW5pdF9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJLyogRW5hYmxlIHByaW9yaXR5IGVuY29kaW5nIGZvciBhbGwgSVJMcyAqLworCWZwZ2Ffd3JpdGVfcmVnKGZwZ2FfcmVhZF9yZWcoSU5UTVNSKSB8IDB4MDMwMywgSU5UTVNSKTsKKworCS8qIENsZWFyIEZQR0EgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgKi8KKwlmcGdhX3dyaXRlX3JlZygweDAwMDAsIElOVEFTUik7CisJZnBnYV93cml0ZV9yZWcoMHgwMDAwLCBJTlRCU1IpOworCisJLyogVW5tYXNrIEZQR0EgaW50ZXJydXB0cyAqLworCXRtcCA9IGZwZ2FfcmVhZF9yZWcoSU5UQU1SKTsKKwl0bXAgJj0gfigxIDw8IEVUSF9JUlFfQklUKTsKKwlmcGdhX3dyaXRlX3JlZyh0bXAsIElOVEFNUik7CisKKwlwbGF0X2lycV9zZXR1cF9waW5zKElSUV9NT0RFX0lSTDc2NTRfTUFTSyk7CisJcGxhdF9pcnFfc2V0dXBfcGlucyhJUlFfTU9ERV9JUkwzMjEwX01BU0spOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNkazc3ODYvc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDk0ZWEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L3NldHVwLmMKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBSZW5lc2FzIFRlY2hub2xvZ3kgRXVyb3BlIFNESzc3ODYgU3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIE1hdHQgRmxlbWluZworICogQ29weXJpZ2h0IChDKSAyMDEwICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPG1hY2gvZnBnYS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKyNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gMHgwN2ZmZjhiMCwKKwkuZW5kCQk9IDB4MDdmZmY4YjAgKyBzaXplb2YodTE2KSAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMTZCSVQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJoZWFydGJlYXQiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21zYzkxMXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQkJPSAic21zYzkxMXgtbWVtb3J5IiwKKwkJLnN0YXJ0CQk9IDB4MDdmZmZmMDAsCisJCS5lbmQJCT0gMHgwN2ZmZmYwMCArIFNaXzI1NiAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUJCT0gInNtc2M5MTF4LWlycSIsCisJCS5zdGFydAkJPSBldnQyaXJxKDB4MmMwKSwKKwkJLmVuZAkJPSBldnQyaXJxKDB4MmMwKSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyBzbXNjOTExeF9jb25maWcgPSB7CisJLmlycV9wb2xhcml0eQk9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAorCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9UWVBFX09QRU5fRFJBSU4sCisJLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8zMkJJVCwKKwkucGh5X2ludGVyZmFjZQk9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbXNjOTExeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtc2M5MTF4IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtc2M5MTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21zYzkxMXhfcmVzb3VyY2VzLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnNtc2M5MTF4X2NvbmZpZywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWJ1c19mcGdhX3Jlc291cmNlID0geworCS5zdGFydAkJPSAweDA3ZmZmOWUwLAorCS5lbmQJCT0gMHgwN2ZmZjllMCArIFNaXzMyIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWJ1c19mcGdhX2RldmljZSA9IHsKKwkubmFtZQkJPSAiaTJjLXNkazc3ODYiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmc21idXNfZnBnYV9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21idXNfcGNpZV9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gMHgwN2ZmZmMzMCwKKwkuZW5kCQk9IDB4MDdmZmZjMzAgKyBTWl8zMiAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21idXNfcGNpZV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImkyYy1zZGs3Nzg2IiwKKwkuaWQJCT0gMSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJnNtYnVzX3BjaWVfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgc2RrNzc4Nl9pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oIm1heDY5MDAiLCAweDY4KSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc4Nl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmaGVhcnRiZWF0X2RldmljZSwKKwkmc21zYzkxMXhfZGV2aWNlLAorCSZzbWJ1c19mcGdhX2RldmljZSwKKwkmc21idXNfcGNpZV9kZXZpY2UsCit9OworCitzdGF0aWMgaW50IHNkazc3ODZfaTJjX3NldHVwKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCS8qCisJICogSGFuZCBvdmVyIEkyQyBjb250cm9sIHRvIHRoZSBGUEdBLgorCSAqLworCXRtcCA9IGZwZ2FfcmVhZF9yZWcoU0JDUik7CisJdG1wICY9IH5TQ0JSX0kyQ0NFTjsKKwl0bXAgfD0gU0NCUl9JMkNNRU47CisJZnBnYV93cml0ZV9yZWcodG1wLCBTQkNSKTsKKworCXJldHVybiBpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBzZGs3Nzg2X2kyY19kZXZpY2VzLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKHNkazc3ODZfaTJjX2RldmljZXMpKTsKK30KKworc3RhdGljIGludCBfX2luaXQgc2RrNzc4Nl9kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBsYXRmb3JtX2FkZF9kZXZpY2VzKHNoNzc4Nl9kZXZpY2VzLCBBUlJBWV9TSVpFKHNoNzc4Nl9kZXZpY2VzKSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzZGs3Nzg2X2kyY19zZXR1cCgpOworfQorX19pbml0Y2FsbChzZGs3Nzg2X2RldmljZXNfc2V0dXApOworCitzdGF0aWMgaW50IHNkazc3ODZfbW9kZV9waW5zKHZvaWQpCit7CisJcmV0dXJuIGZwZ2FfcmVhZF9yZWcoTU9EU1dSKTsKK30KKworc3RhdGljIGludCBzZGs3Nzg2X2Nsa19pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrOworCWludCByZXQ7CisKKwkvKgorCSAqIE9ubHkgaGFuZGxlIHRoZSBFWFRBTCBjYXNlLCBhbnlvbmUgaW50ZXJmYWNpbmcgYSBjcnlzdGFsCisJICogcmVzb25hdG9yIHdpbGwgbmVlZCB0byBwcm92aWRlIHRoZWlyIG93biBpbnB1dCBjbG9jay4KKwkgKi8KKwlpZiAodGVzdF9tb2RlX3BpbihNT0RFX1BJTjkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNsayA9IGNsa19nZXQoTlVMTCwgImV4dGFsIik7CisJaWYgKCFjbGsgfHwgSVNfRVJSKGNsaykpCisJCXJldHVybiBQVFJfRVJSKGNsayk7CisJcmV0ID0gY2xrX3NldF9yYXRlKGNsaywgMzMzMzMzMzMpOworCWNsa19wdXQoY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNkazc3ODZfcmVzdGFydChjaGFyICpjbWQpCit7CisJZnBnYV93cml0ZV9yZWcoMHhhNWE1LCBTUlNUUik7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIGJvYXJkICovCitzdGF0aWMgdm9pZCBfX2luaXQgc2RrNzc4Nl9zZXR1cChjaGFyICoqY21kbGluZV9wKQoreworCXByX2luZm8oIlJlbmVzYXMgVGVjaG5vbG9neSBFdXJvcGUgU0RLNzc4NiBzdXBwb3J0OlxuIik7CisKKwlzZGs3Nzg2X2ZwZ2FfaW5pdCgpOworCisJcHJfaW5mbygiXHRQQ0IgcmV2aXNpb246XHQlZFxuIiwgZnBnYV9yZWFkX3JlZyhQQ0JSUikgJiAweGYpOworCisJbWFjaGluZV9vcHMucmVzdGFydCA9IHNkazc3ODZfcmVzdGFydDsKK30KKworLyoKKyAqIFRoZSBNYWNoaW5lIFZlY3RvcgorICovCitzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3Nkazc3ODYgX19pbml0bXYgPSB7CisJLm12X25hbWUJCT0gIlNESzc3ODYiLAorCS5tdl9zZXR1cAkJPSBzZGs3Nzg2X3NldHVwLAorCS5tdl9tb2RlX3BpbnMJCT0gc2RrNzc4Nl9tb2RlX3BpbnMsCisJLm12X2Nsa19pbml0CQk9IHNkazc3ODZfY2xrX2luaXQsCisJLm12X2luaXRfaXJxCQk9IHNkazc3ODZfaW5pdF9pcnEsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvaW8uYwppbmRleCAxODA0NTU2Li5hZGFkYzc3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvaW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvaW8uYwpAQCAtMTYsNyArMTYsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGVsYXkodm9pZCkKIHsKLQljdHJsX2ludygweDIwMDAwMDAwKTsgIC8qIFAyIFJPTSBBcmVhICovCisJX19yYXdfcmVhZHcoMHgyMDAwMDAwMCk7ICAvKiBQMiBST00gQXJlYSAqLwogfQogCiAvKiBNUzc3NTAgcmVxdWlyZXMgc3BlY2lhbCB2ZXJzaW9ucyBvZiBpbiosIG91dCogcm91dGluZXMsIHNpbmNlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzcyMDYvaXJxLmMKaW5kZXggYWVmN2YwNS4uOGQ4MjE3NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9pcnEuYwpAQCAtMzIsMTIgKzMyLDEyIEBACiAJdW5zaWduZWQgc2hvcnQgbXNrMCxtc2sxOwogCiAJLyogU2V0IHRoZSBwcmlvcml0eSBpbiBJUFIgdG8gMCAqLwotCXZhbCA9IGN0cmxfaW53KElOVENfSVBSMDEpOworCXZhbCA9IF9fcmF3X3JlYWR3KElOVENfSVBSMDEpOwogCXZhbCAmPSBtYXNrOwotCWN0cmxfb3V0dyh2YWwsIElOVENfSVBSMDEpOworCV9fcmF3X3dyaXRldyh2YWwsIElOVENfSVBSMDEpOwogCS8qIEZQR0EgbWFzayBzZXQgKi8KLQltc2swID0gY3RybF9pbncoSU5UTVNLMCk7Ci0JbXNrMSA9IGN0cmxfaW53KElOVE1TSzEpOworCW1zazAgPSBfX3Jhd19yZWFkdyhJTlRNU0swKTsKKwltc2sxID0gX19yYXdfcmVhZHcoSU5UTVNLMSk7CiAKIAlzd2l0Y2ggKGlycSkgewogCWNhc2UgSVJRMF9JUlE6CkBAIC01MSw4ICs1MSw4IEBACiAJCW1zazEgfD0gMHgwMGZmOwogCQlicmVhazsKIAl9Ci0JY3RybF9vdXR3KG1zazAsIElOVE1TSzApOwotCWN0cmxfb3V0dyhtc2sxLCBJTlRNU0sxKTsKKwlfX3Jhd193cml0ZXcobXNrMCwgSU5UTVNLMCk7CisJX19yYXdfd3JpdGV3KG1zazEsIElOVE1TSzEpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfc2U3MjA2X2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtNjIsMTMgKzYyLDEzIEBACiAJdW5zaWduZWQgc2hvcnQgbXNrMCxtc2sxOwogCiAJLyogU2V0IHByaW9yaXR5IGluIElQUiBiYWNrIHRvIG9yaWdpbmFsIHZhbHVlICovCi0JdmFsID0gY3RybF9pbncoSU5UQ19JUFIwMSk7CisJdmFsID0gX19yYXdfcmVhZHcoSU5UQ19JUFIwMSk7CiAJdmFsIHw9IHZhbHVlOwotCWN0cmxfb3V0dyh2YWwsIElOVENfSVBSMDEpOworCV9fcmF3X3dyaXRldyh2YWwsIElOVENfSVBSMDEpOwogCiAJLyogRlBHQSBtYXNrIHJlc2V0ICovCi0JbXNrMCA9IGN0cmxfaW53KElOVE1TSzApOwotCW1zazEgPSBjdHJsX2ludyhJTlRNU0sxKTsKKwltc2swID0gX19yYXdfcmVhZHcoSU5UTVNLMCk7CisJbXNrMSA9IF9fcmF3X3JlYWR3KElOVE1TSzEpOwogCiAJc3dpdGNoIChpcnEpIHsKIAljYXNlIElSUTBfSVJROgpAQCAtODIsMTkgKzgyLDIwIEBACiAJCW1zazEgJj0gfjB4MDBmZjsKIAkJYnJlYWs7CiAJfQotCWN0cmxfb3V0dyhtc2swLCBJTlRNU0swKTsKLQljdHJsX291dHcobXNrMSwgSU5UTVNLMSk7CisJX19yYXdfd3JpdGV3KG1zazAsIElOVE1TSzApOworCV9fcmF3X3dyaXRldyhtc2sxLCBJTlRNU0sxKTsKIH0KIAogc3RhdGljIHZvaWQgZW9pX3NlNzIwNl9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBzaG9ydCBzdHMwLHN0czE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAotCWlmICghKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRHxJUlFfSU5QUk9HUkVTUykpKQorCWlmICghKGRlc2MtPnN0YXR1cyAmIChJUlFfRElTQUJMRUR8SVJRX0lOUFJPR1JFU1MpKSkKIAkJZW5hYmxlX3NlNzIwNl9pcnEoaXJxKTsKIAkvKiBGUEdBIGlzciBjbGVhciAqLwotCXN0czAgPSBjdHJsX2ludyhJTlRTVFMwKTsKLQlzdHMxID0gY3RybF9pbncoSU5UU1RTMSk7CisJc3RzMCA9IF9fcmF3X3JlYWR3KElOVFNUUzApOworCXN0czEgPSBfX3Jhd19yZWFkdyhJTlRTVFMxKTsKIAogCXN3aXRjaCAoaXJxKSB7CiAJY2FzZSBJUlEwX0lSUToKQEAgLTEwOCw4ICsxMDksOCBAQAogCQlzdHMxICY9IH4weDAwZmY7CiAJCWJyZWFrOwogCX0KLQljdHJsX291dHcoc3RzMCwgSU5UU1RTMCk7Ci0JY3RybF9vdXR3KHN0czEsIElOVFNUUzEpOworCV9fcmF3X3dyaXRldyhzdHMwLCBJTlRTVFMwKTsKKwlfX3Jhd193cml0ZXcoc3RzMSwgSU5UU1RTMSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc2U3MjA2X2lycV9jaGlwIF9fcmVhZF9tb3N0bHkgPSB7CkBAIC0xMzYsMTEgKzEzNywxMSBAQAogCW1ha2Vfc2U3MjA2X2lycShJUlEwX0lSUSk7IC8qIFNNQzkxQzExMSAqLwogCW1ha2Vfc2U3MjA2X2lycShJUlExX0lSUSk7IC8qIEFUQSAqLwogCW1ha2Vfc2U3MjA2X2lycShJUlEzX0lSUSk7IC8qIFNMT1QgLyBQQ00gKi8KLQljdHJsX291dHcoaW53KElOVENfSUNSMSkgfCAweDAwMGIgLElOVENfSUNSMSApIDsgLyogSUNSMSAqLworCV9fcmF3X3dyaXRldyhpbncoSU5UQ19JQ1IxKSB8IDB4MDAwYiAsSU5UQ19JQ1IxICkgOyAvKiBJQ1IxICovCiAKIAkvKiBGUEdBIFN5c3RlbSByZWdpc3RlciBzZXR1cCovCi0JY3RybF9vdXR3KDB4MDAwMCxJTlRTVFMwKTsgLyogQ2xlYXIgSU5UU1RTMCAqLwotCWN0cmxfb3V0dygweDAwMDAsSU5UU1RTMSk7IC8qIENsZWFyIElOVFNUUzEgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLElOVFNUUzApOyAvKiBDbGVhciBJTlRTVFMwICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCxJTlRTVFMxKTsgLyogQ2xlYXIgSU5UU1RTMSAqLwogCS8qIElSUTA9TEFOLCBJUlExPUFUQSwgSVJRMz1TTFQsUENNICovCi0JY3RybF9vdXR3KDB4MDAwMSxJTlRTRUwpOworCV9fcmF3X3dyaXRldygweDAwMDEsSU5UU0VMKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MjA2L3NldHVwLmMKaW5kZXggZjU0NjYzODQuLjhmNWM2NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzIwNi9zZXR1cC5jCkBAIC01MCwxNSArNTAsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7CiAJLmJpdF9wb3MJPSBoZWFydGJlYXRfYml0X3BvcywKIAkubnJfYml0cwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X2JpdF9wb3MpLAotCS5yZWdzaXplCT0gMzIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IFBBX0xFRCwKLQkJLmVuZAk9IFBBX0xFRCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydAk9IFBBX0xFRCwKKwkuZW5kCT0gUEFfTEVELAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMzJCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewpAQCAtNjcsOCArNjQsOCBAQAogCS5kZXYJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJmhlYXJ0YmVhdF9kYXRhLAogCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2U3MjA2X2RldmljZXNbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL2lycS5jCmluZGV4IDA1MWMyOWQuLmQ0MzA1YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzM0My9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzczNDMvaXJxLmMKQEAgLTE2LDE2ICsxNiwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bWFjaC1zZS9tYWNoL3NlNzM0My5oPgogCit1bnNpZ25lZCBpbnQgc2U3MzQzX2ZwZ2FfaXJxW1NFNzM0M19GUEdBX0lSUV9OUl0gPSB7IDAsIH07CisKIHN0YXRpYyB2b2lkIGRpc2FibGVfc2U3MzQzX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXVuc2lnbmVkIGludCBiaXQgPSBpcnEgLSBTRTczNDNfRlBHQV9JUlFfQkFTRTsKLQljdHJsX291dHcoY3RybF9pbncoUEFfQ1BMRF9JTVNLKSB8IDEgPDwgYml0LCBQQV9DUExEX0lNU0spOworCXVuc2lnbmVkIGludCBiaXQgPSAodW5zaWduZWQgaW50KWdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBBX0NQTERfSU1TSykgfCAxIDw8IGJpdCwgUEFfQ1BMRF9JTVNLKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX3NlNzM0M19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl1bnNpZ25lZCBpbnQgYml0ID0gaXJxIC0gU0U3MzQzX0ZQR0FfSVJRX0JBU0U7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBBX0NQTERfSU1TSykgJiB+KDEgPDwgYml0KSwgUEFfQ1BMRF9JTVNLKTsKKwl1bnNpZ25lZCBpbnQgYml0ID0gKHVuc2lnbmVkIGludClnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQQV9DUExEX0lNU0spICYgfigxIDw8IGJpdCksIFBBX0NQTERfSU1TSyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc2U3MzQzX2lycV9jaGlwIF9fcmVhZF9tb3N0bHkgPSB7CkBAIC0zNywxOSArMzksMTYgQEAKIAogc3RhdGljIHZvaWQgc2U3MzQzX2lycV9kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0JdW5zaWduZWQgc2hvcnQgaW50diA9IGN0cmxfaW53KFBBX0NQTERfU1QpOwotCXN0cnVjdCBpcnFfZGVzYyAqZXh0X2Rlc2M7Ci0JdW5zaWduZWQgaW50IGV4dF9pcnEgPSBTRTczNDNfRlBHQV9JUlFfQkFTRTsKKwl1bnNpZ25lZCBzaG9ydCBpbnR2ID0gX19yYXdfcmVhZHcoUEFfQ1BMRF9TVCk7CisJdW5zaWduZWQgaW50IGV4dF9pcnEgPSAwOwogCiAJaW50diAmPSAoMSA8PCBTRTczNDNfRlBHQV9JUlFfTlIpIC0gMTsKIAotCXdoaWxlIChpbnR2KSB7Ci0JCWlmIChpbnR2ICYgMSkgewotCQkJZXh0X2Rlc2MgPSBpcnFfZGVzYyArIGV4dF9pcnE7Ci0JCQloYW5kbGVfbGV2ZWxfaXJxKGV4dF9pcnEsIGV4dF9kZXNjKTsKLQkJfQotCQlpbnR2ID4+PSAxOwotCQlleHRfaXJxKys7CisJZm9yICg7IGludHY7IGludHYgPj49IDEsIGV4dF9pcnErKykgeworCQlpZiAoIShpbnR2ICYgMSkpCisJCQljb250aW51ZTsKKworCQlnZW5lcmljX2hhbmRsZV9pcnEoc2U3MzQzX2ZwZ2FfaXJxW2V4dF9pcnFdKTsKIAl9CiB9CiAKQEAgLTU4LDE2ICs1NywyNCBAQAogICovCiB2b2lkIF9faW5pdCBpbml0XzczNDNzZV9JUlEodm9pZCkKIHsKLQlpbnQgaTsKKwlpbnQgaSwgaXJxOwogCi0JY3RybF9vdXR3KDAsIFBBX0NQTERfSU1TSyk7CS8qIGRpc2FibGUgYWxsIGlycXMgKi8KLQljdHJsX291dHcoMHgyMDAwLCAweGIwM2ZmZmVjKTsJLyogbXJzaHBjIGlycSBlbmFibGUgKi8KKwlfX3Jhd193cml0ZXcoMCwgUEFfQ1BMRF9JTVNLKTsJLyogZGlzYWJsZSBhbGwgaXJxcyAqLworCV9fcmF3X3dyaXRldygweDIwMDAsIDB4YjAzZmZmZWMpOwkvKiBtcnNocGMgaXJxIGVuYWJsZSAqLwogCi0JZm9yIChpID0gMDsgaSA8IFNFNzM0M19GUEdBX0lSUV9OUjsgaSsrKQotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShTRTczNDNfRlBHQV9JUlFfQkFTRSArIGksCisJZm9yIChpID0gMDsgaSA8IFNFNzM0M19GUEdBX0lSUV9OUjsgaSsrKSB7CisJCWlycSA9IGNyZWF0ZV9pcnEoKTsKKwkJaWYgKGlycSA8IDApCisJCQlyZXR1cm47CisJCXNlNzM0M19mcGdhX2lycVtpXSA9IGlycTsKKworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShzZTczNDNfZnBnYV9pcnFbaV0sCiAJCQkJCSAgICAgICZzZTczNDNfaXJxX2NoaXAsCiAJCQkJCSAgICAgIGhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOwogCisJCXNldF9pcnFfY2hpcF9kYXRhKHNlNzM0M19mcGdhX2lycVtpXSwgKHZvaWQgKilpKTsKKwl9CisKIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlEwX0lSUSwgc2U3MzQzX2lycV9kZW11eCk7CiAJc2V0X2lycV90eXBlKElSUTBfSVJRLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUTFfSVJRLCBzZTczNDNfaXJxX2RlbXV4KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzM0My9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL3NldHVwLmMKaW5kZXggNGRlNTZmMy4uZDIzNzBhZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL3NldHVwLmMKQEAgLTExLDI2ICsxMSwxNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBQQV9MRUQsCi0JCS5lbmQJPSBQQV9MRUQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewotCS5yZWdzaXplID0gMTYsCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBQQV9MRUQsCisJLmVuZAk9IFBBX0xFRCwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzE2QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKIAkubmFtZQkJPSAiaGVhcnRiZWF0IiwKIAkuaWQJCT0gLTEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaGVhcnRiZWF0X2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gaGVhcnRiZWF0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBub3JfZmxhc2hfcGFydGl0aW9uc1tdID0gewpAQCAtODIsNyArNzMsNiBAQAogCQkubWFwYmFzZQk9IDB4MTYwMDAwMDAsCiAJCS5yZWdzaGlmdAk9IDEsCiAJCS5mbGFncwkJPSBTVDE2QzI1NTBDX0ZMQUdTLAotCQkuaXJxCQk9IFVBUlRBX0lSUSwKIAkJLnVhcnRjbGsJPSA3MzcyODAwLAogCX0sCiAJWzFdID0gewpAQCAtOTAsNyArODAsNiBAQAogCQkubWFwYmFzZQk9IDB4MTcwMDAwMDAsCiAJCS5yZWdzaGlmdAk9IDEsCiAJCS5mbGFncwkJPSBTVDE2QzI1NTBDX0ZMQUdTLAotCQkuaXJxCQk9IFVBUlRCX0lSUSwKIAkJLnVhcnRjbGsJPSA3MzcyODAwLAogCX0sCiAJeyB9LApAQCAtMTIxLDcgKzExMCw3IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsyXSA9IHsKLQkJLnN0YXJ0ICA9IFVTQl9JUlEsCisJCS8qIEZpbGxlZCBpbiBsYXRlciAqLwogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC0xMzgsOCArMTI3LDggQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHVzYl9kZXZpY2UgPSB7CiAJLm5hbWUJCQk9ICJpc3AxMTZ4LWhjZCIsCiAJLmlkCQkJPSAtMSwKLQkubnVtX3Jlc291cmNlcyAgCT0gQVJSQVlfU0laRSh1c2JfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgICAgICAgCT0gdXNiX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKHVzYl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQkJPSB1c2JfcmVzb3VyY2VzLAogCS5kZXYJCQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmdXNiX3BsYXRmb3JtX2RhdGEsCiAJfSwKQEAgLTE1NSw2ICsxNDQsMTMgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2g3MzQzc2VfZGV2aWNlc19zZXR1cCh2b2lkKQogeworCS8qIFdpcmUtdXAgZHluYW1pYyB2ZWN0b3JzICovCisJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMF0uaXJxID0gc2U3MzQzX2ZwZ2FfaXJxW1NFNzM0M19GUEdBX0lSUV9VQVJUQV07CisJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMV0uaXJxID0gc2U3MzQzX2ZwZ2FfaXJxW1NFNzM0M19GUEdBX0lSUV9VQVJUQl07CisKKwl1c2JfcmVzb3VyY2VzWzJdLnN0YXJ0ID0gdXNiX3Jlc291cmNlc1syXS5lbmQgPQorCQlzZTczNDNfZnBnYV9pcnFbU0U3MzQzX0ZQR0FfSVJRX1VTQl07CisKIAlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3MzQzc2VfcGxhdGZvcm1fZGV2aWNlcywKIAkJCQkgICAgQVJSQVlfU0laRShzaDczNDNzZV9wbGF0Zm9ybV9kZXZpY2VzKSk7CiB9CkBAIC0xNjUsMTAgKzE2MSwxMCBAQAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgc2g3MzQzc2Vfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKLQljdHJsX291dHcoMHhmOTAwLCBGUEdBX09VVCk7CS8qIEZQR0EgKi8KKwlfX3Jhd193cml0ZXcoMHhmOTAwLCBGUEdBX09VVCk7CS8qIEZQR0EgKi8KIAotCWN0cmxfb3V0dygweDAwMDIsIFBPUlRfUEVDUik7CS8qIFBPUlQgRSAxID0gSVJRNSAqLwotCWN0cmxfb3V0dygweDAwMjAsIFBPUlRfUFNFTEQpOworCV9fcmF3X3dyaXRldygweDAwMDIsIFBPUlRfUEVDUik7CS8qIFBPUlQgRSAxID0gSVJRNSAqLworCV9fcmF3X3dyaXRldygweDAwMjAsIFBPUlRfUFNFTEQpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiTVM3MzQzQ1AwMSBTZXR1cC4uLmRvbmVcbiIpOwogfQpAQCAtMTc5LDYgKzE3NSw1IEBACiBzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12XzczNDNzZSBfX2luaXRtdiA9IHsKIAkubXZfbmFtZSA9ICJTb2x1dGlvbkVuZ2luZSA3MzQzIiwKIAkubXZfc2V0dXAgPSBzaDczNDNzZV9zZXR1cCwKLQkubXZfbnJfaXJxcyA9IFNFNzM0M19GUEdBX0lSUV9CQVNFICsgU0U3MzQzX0ZQR0FfSVJRX05SLAogCS5tdl9pbml0X2lycSA9IGluaXRfNzM0M3NlX0lSUSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MHgvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MHgvaXJxLmMKaW5kZXggZWMxZmVhNS4uMTAyOGMxNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzB4L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcweC9pcnEuYwpAQCAtOTYsMTMgKzk2LDEzIEBACiB2b2lkIF9faW5pdCBpbml0X3NlX0lSUSh2b2lkKQogewogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KLQljdHJsX291dHcoMCwgQkNSX0lMQ1JBKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JCKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JDKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JEKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JFKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JGKTsKLQljdHJsX291dHcoMCwgQkNSX0lMQ1JHKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JBKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JCKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JDKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JEKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JFKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JGKTsKKwlfX3Jhd193cml0ZXcoMCwgQkNSX0lMQ1JHKTsKIAogCXJlZ2lzdGVyX2lwcl9jb250cm9sbGVyKCZpcHJfaXJxX2Rlc2MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzB4L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MHgvc2V0dXAuYwppbmRleCA1MjdlYjZiLi42NmQzOWQxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MHgvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MHgvc2V0dXAuYwpAQCAtOTMsMTUgKzkzLDEyIEBACiBzdGF0aWMgc3RydWN0IGhlYXJ0YmVhdF9kYXRhIGhlYXJ0YmVhdF9kYXRhID0gewogCS5iaXRfcG9zCT0gaGVhcnRiZWF0X2JpdF9wb3MsCiAJLm5yX2JpdHMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9iaXRfcG9zKSwKLQkucmVnc2l6ZQk9IDE2LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBQQV9MRUQsCi0JCS5lbmQJPSBQQV9MRUQsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBQQV9MRUQsCisJLmVuZAk9IFBBX0xFRCwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzE2QklULAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGVhcnRiZWF0X2RldmljZSA9IHsKQEAgLTExMCw4ICsxMDcsOCBAQAogCS5kZXYJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJmhlYXJ0YmVhdF9kYXRhLAogCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZoZWFydGJlYXRfcmVzb3VyY2UsCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKSB8fFwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMS9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMS9pcnEuYwppbmRleCBiNDE3YWNjLi5kODUwMjJlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjEvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIxL2lycS5jCkBAIC0zOCw3ICszOCw3IEBACiB2b2lkIF9faW5pdCBpbml0X3NlNzcyMV9JUlEodm9pZCkKIHsKIAkvKiBQUENSICovCi0JY3RybF9vdXR3KGN0cmxfaW53KDB4YTQwNTAxMTgpICYgfjB4MDBmZiwgMHhhNDA1MDExOCk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KDB4YTQwNTAxMTgpICYgfjB4MDBmZiwgMHhhNDA1MDExOCk7CiAKIAlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzYyk7CiAJaW50Y19zZXRfcHJpb3JpdHkoTVJTSFBDX0lSUTAsIDB4ZiAtIE1SU0hQQ19JUlEwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMS9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIxL3NldHVwLmMKaW5kZXggNTVhZjRjMy4uNzQxNmFkNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIxL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIxL3NldHVwLmMKQEAgLTIzLDE1ICsyMywxMiBAQAogc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKIAkuYml0X3Bvcwk9IGhlYXJ0YmVhdF9iaXRfcG9zLAogCS5ucl9iaXRzCT0gQVJSQVlfU0laRShoZWFydGJlYXRfYml0X3BvcyksCi0JLnJlZ3NpemUJPSAxNiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gUEFfTEVELAotCQkuZW5kCT0gUEFfTEVELAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUEFfTEVELAorCS5lbmQJPSBQQV9MRUQsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8xNkJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CkBAIC00MCw4ICszNyw4IEBACiAJLmRldgk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmaGVhcnRiZWF0X2RhdGEsCiAJfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGVhcnRiZWF0X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gaGVhcnRiZWF0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2ZfaWRlX3Jlc291cmNlc1tdID0gewpAQCAtODMsMTAgKzgwLDEwIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgc2U3NzIxX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAJLyogZm9yIFVTQiAqLwotCWN0cmxfb3V0dygweDAwMDAsIDB4QTQwNTAxMEMpOwkvKiBQR0NSICovCi0JY3RybF9vdXR3KDB4MDAwMCwgMHhBNDA1MDEwRSk7CS8qIFBIQ1IgKi8KLQljdHJsX291dHcoMHgwMEFBLCAweEE0MDUwMTE4KTsJLyogUFBDUiAqLwotCWN0cmxfb3V0dygweDAwMDAsIDB4QTQwNTAxMjQpOwkvKiBQU0VMQSAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIDB4QTQwNTAxMEMpOwkvKiBQR0NSICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgMHhBNDA1MDEwRSk7CS8qIFBIQ1IgKi8KKwlfX3Jhd193cml0ZXcoMHgwMEFBLCAweEE0MDUwMTE4KTsJLyogUFBDUiAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIDB4QTQwNTAxMjQpOwkvKiBQU0VMQSAqLwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIyL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIyL2lycS5jCmluZGV4IGIyMjFiNjguLjYxNjA1ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMi9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjIvaXJxLmMKQEAgLTIxLDEzICsyMSwxMyBAQAogc3RhdGljIHZvaWQgZGlzYWJsZV9zZTc3MjJfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgaW50IGJpdCA9ICh1bnNpZ25lZCBpbnQpZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQljdHJsX291dHcoY3RybF9pbncoSVJRMDFfTUFTSykgfCAxIDw8IGJpdCwgSVJRMDFfTUFTSyk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KElSUTAxX01BU0spIHwgMSA8PCBiaXQsIElSUTAxX01BU0spOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfc2U3NzIyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGludCBiaXQgPSAodW5zaWduZWQgaW50KWdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JY3RybF9vdXR3KGN0cmxfaW53KElSUTAxX01BU0spICYgfigxIDw8IGJpdCksIElSUTAxX01BU0spOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhJUlEwMV9NQVNLKSAmIH4oMSA8PCBiaXQpLCBJUlEwMV9NQVNLKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzZTc3MjJfaXJxX2NoaXAgX19yZWFkX21vc3RseSA9IHsKQEAgLTM5LDcgKzM5LDcgQEAKIAogc3RhdGljIHZvaWQgc2U3NzIyX2lycV9kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0JdW5zaWduZWQgc2hvcnQgaW50diA9IGN0cmxfaW53KElSUTAxX1NUUyk7CisJdW5zaWduZWQgc2hvcnQgaW50diA9IF9fcmF3X3JlYWR3KElSUTAxX1NUUyk7CiAJdW5zaWduZWQgaW50IGV4dF9pcnEgPSAwOwogCiAJaW50diAmPSAoMSA8PCBTRTc3MjJfRlBHQV9JUlFfTlIpIC0gMTsKQEAgLTU5LDggKzU5LDggQEAKIHsKIAlpbnQgaSwgaXJxOwogCi0JY3RybF9vdXR3KDAsIElSUTAxX01BU0spOyAgICAgICAvKiBkaXNhYmxlIGFsbCBpcnFzICovCi0JY3RybF9vdXR3KDB4MjAwMCwgMHhiMDNmZmZlYyk7ICAvKiBtcnNocGMgaXJxIGVuYWJsZSAqLworCV9fcmF3X3dyaXRldygwLCBJUlEwMV9NQVNLKTsgICAgICAgLyogZGlzYWJsZSBhbGwgaXJxcyAqLworCV9fcmF3X3dyaXRldygweDIwMDAsIDB4YjAzZmZmZWMpOyAgLyogbXJzaHBjIGlycSBlbmFibGUgKi8KIAogCWZvciAoaSA9IDA7IGkgPCBTRTc3MjJfRlBHQV9JUlFfTlI7IGkrKykgewogCQlpcnEgPSBjcmVhdGVfaXJxKCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjIvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMi9zZXR1cC5jCmluZGV4IGIxY2I5NDIuLjgwYTRlNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMi9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyMi9zZXR1cC5jCkBAIC0yNSwyNiArMjUsMTcgQEAKICNpbmNsdWRlIDxjcHUvc2g3NzIyLmg+CiAKIC8qIEhlYXJ0YmVhdCAqLwotc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKLQkucmVnc2l6ZSA9IDE2LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZWFydGJlYXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgID0gUEFfTEVELAotCQkuZW5kICAgID0gUEFfTEVELAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlID0geworCS5zdGFydCAgPSBQQV9MRUQsCisJLmVuZCAgICA9IFBBX0xFRCwKKwkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8xNkJJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhlYXJ0YmVhdF9kZXZpY2UgPSB7CiAJLm5hbWUgICAgICAgICAgID0gImhlYXJ0YmVhdCIsCiAJLmlkICAgICAgICAgICAgID0gLTEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaGVhcnRiZWF0X2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGhlYXJ0YmVhdF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSAgICAgICA9IGhlYXJ0YmVhdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgID0gMSwKKwkucmVzb3VyY2UgICAgICAgPSAmaGVhcnRiZWF0X3Jlc291cmNlLAogfTsKIAogLyogU01DOTF4ICovCkBAIC0xNjUsMzIgKzE1NiwzMiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2U3NzIyX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7Ci0JY3RybF9vdXR3KDB4MDEwRCwgRlBHQV9PVVQpOyAgICAvKiBGUEdBICovCisJX19yYXdfd3JpdGV3KDB4MDEwRCwgRlBHQV9PVVQpOyAgICAvKiBGUEdBICovCiAKLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BFQ1IpOyAgIC8qIFBPUlQgRSAxID0gSVJRNSAsRSAwID0gQlMgKi8KLQljdHJsX291dHcoMHgxMDAwLCBQT1JUX1BKQ1IpOyAgIC8qIFBPUlQgSiAxID0gSVJRMSxKIDAgPUlSUTAgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BFQ1IpOyAgIC8qIFBPUlQgRSAxID0gSVJRNSAsRSAwID0gQlMgKi8KKwlfX3Jhd193cml0ZXcoMHgxMDAwLCBQT1JUX1BKQ1IpOyAgIC8qIFBPUlQgSiAxID0gSVJRMSxKIDAgPUlSUTAgKi8KIAogCS8qIExDREMgSS9PICovCi0JY3RybF9vdXR3KDB4MDAyMCwgUE9SVF9QU0VMRCk7CisJX19yYXdfd3JpdGV3KDB4MDAyMCwgUE9SVF9QU0VMRCk7CiAKIAkvKiBTSU9GMSovCi0JY3RybF9vdXR3KDB4MDAwMywgUE9SVF9QU0VMQik7Ci0JY3RybF9vdXR3KDB4ZTAwMCwgUE9SVF9QU0VMQyk7Ci0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QS0NSKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAzLCBQT1JUX1BTRUxCKTsKKwlfX3Jhd193cml0ZXcoMHhlMDAwLCBQT1JUX1BTRUxDKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BLQ1IpOwogCiAJLyogTENEQyAqLwotCWN0cmxfb3V0dygweDQwMjAsIFBPUlRfUEhDUik7Ci0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QTENSKTsKLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BNQ1IpOwotCWN0cmxfb3V0dygweDAwMDIsIFBPUlRfUFJDUik7Ci0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QWENSKTsgICAvKiBMQ0RDLENTNkEgKi8KKwlfX3Jhd193cml0ZXcoMHg0MDIwLCBQT1JUX1BIQ1IpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUExDUik7CisJX19yYXdfd3JpdGV3KDB4MDAwMCwgUE9SVF9QTUNSKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAyLCBQT1JUX1BSQ1IpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUFhDUik7ICAgLyogTENEQyxDUzZBICovCiAKIAkvKiBLRVlTQyAqLwotCWN0cmxfb3V0dygweDBBMTAsIFBPUlRfUFNFTEEpOyAvKiBCUyxTSEhJRDIgKi8KLQljdHJsX291dHcoMHgwMDAwLCBQT1JUX1BZQ1IpOwotCWN0cmxfb3V0dygweDAwMDAsIFBPUlRfUFpDUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfSElaQ1JBKSAmIH4weDQwMDAsIFBPUlRfSElaQ1JBKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9ISVpDUkMpICYgfjB4YzAwMCwgUE9SVF9ISVpDUkMpOworCV9fcmF3X3dyaXRldygweDBBMTAsIFBPUlRfUFNFTEEpOyAvKiBCUyxTSEhJRDIgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBQT1JUX1BZQ1IpOworCV9fcmF3X3dyaXRldygweDAwMDAsIFBPUlRfUFpDUik7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBPUlRfSElaQ1JBKSAmIH4weDQwMDAsIFBPUlRfSElaQ1JBKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUE9SVF9ISVpDUkMpICYgfjB4YzAwMCwgUE9SVF9ISVpDUkMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L2lycS5jCmluZGV4IGY3NmNmM2IuLjA5NDJiZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvaXJxLmMKQEAgLTcyLDE0ICs3MiwxNCBAQAogewogCXN0cnVjdCBmcGdhX2lycSBzZXQgPSBnZXRfZnBnYV9pcnEoZnBnYTJpcnEoaXJxKSk7CiAJdW5zaWduZWQgaW50IGJpdCA9IGlycSAtIHNldC5iYXNlOwotCWN0cmxfb3V0dyhjdHJsX2ludyhzZXQubXJhZGRyKSB8IDB4MDAwMSA8PCBiaXQsIHNldC5tcmFkZHIpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhzZXQubXJhZGRyKSB8IDB4MDAwMSA8PCBiaXQsIHNldC5tcmFkZHIpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfc2U3NzI0X2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXN0cnVjdCBmcGdhX2lycSBzZXQgPSBnZXRfZnBnYV9pcnEoZnBnYTJpcnEoaXJxKSk7CiAJdW5zaWduZWQgaW50IGJpdCA9IGlycSAtIHNldC5iYXNlOwotCWN0cmxfb3V0dyhjdHJsX2ludyhzZXQubXJhZGRyKSAmIH4oMHgwMDAxIDw8IGJpdCksIHNldC5tcmFkZHIpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhzZXQubXJhZGRyKSAmIH4oMHgwMDAxIDw8IGJpdCksIHNldC5tcmFkZHIpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNlNzcyNF9pcnFfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewpAQCAtOTIsMTkgKzkyLDE2IEBACiBzdGF0aWMgdm9pZCBzZTc3MjRfaXJxX2RlbXV4KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgZnBnYV9pcnEgc2V0ID0gZ2V0X2ZwZ2FfaXJxKGlycSk7Ci0JdW5zaWduZWQgc2hvcnQgaW50diA9IGN0cmxfaW53KHNldC5zcmFkZHIpOwotCXN0cnVjdCBpcnFfZGVzYyAqZXh0X2Rlc2M7CisJdW5zaWduZWQgc2hvcnQgaW50diA9IF9fcmF3X3JlYWR3KHNldC5zcmFkZHIpOwogCXVuc2lnbmVkIGludCBleHRfaXJxID0gc2V0LmJhc2U7CiAKIAlpbnR2ICY9IHNldC5tYXNrOwogCi0Jd2hpbGUgKGludHYpIHsKLQkJaWYgKGludHYgJiAweDAwMDEpIHsKLQkJCWV4dF9kZXNjID0gaXJxX2Rlc2MgKyBleHRfaXJxOwotCQkJaGFuZGxlX2xldmVsX2lycShleHRfaXJxLCBleHRfZGVzYyk7Ci0JCX0KLQkJaW50diA+Pj0gMTsKLQkJZXh0X2lycSsrOworCWZvciAoOyBpbnR2OyBpbnR2ID4+PSAxLCBleHRfaXJxKyspIHsKKwkJaWYgKCEoaW50diAmIDEpKQorCQkJY29udGludWU7CisKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGV4dF9pcnEpOwogCX0KIH0KIApAQCAtMTEzLDIwICsxMTAsMzkgQEAKICAqLwogdm9pZCBfX2luaXQgaW5pdF9zZTc3MjRfSVJRKHZvaWQpCiB7Ci0JaW50IGk7CisJaW50IGksIG5pZCA9IGNwdV90b19ub2RlKGJvb3RfY3B1X2RhdGEpOwogCi0JY3RybF9vdXR3KDB4ZmZmZiwgSVJRMF9NUik7ICAvKiBtYXNrIGFsbCAqLwotCWN0cmxfb3V0dygweGZmZmYsIElSUTFfTVIpOyAgLyogbWFzayBhbGwgKi8KLQljdHJsX291dHcoMHhmZmZmLCBJUlEyX01SKTsgIC8qIG1hc2sgYWxsICovCi0JY3RybF9vdXR3KDB4MDAwMCwgSVJRMF9TUik7ICAvKiBjbGVhciBpcnEgKi8KLQljdHJsX291dHcoMHgwMDAwLCBJUlExX1NSKTsgIC8qIGNsZWFyIGlycSAqLwotCWN0cmxfb3V0dygweDAwMDAsIElSUTJfU1IpOyAgLyogY2xlYXIgaXJxICovCi0JY3RybF9vdXR3KDB4MDAyYSwgSVJRX01PREUpOyAvKiBzZXQgaXJxIHR5cGUgKi8KKwlfX3Jhd193cml0ZXcoMHhmZmZmLCBJUlEwX01SKTsgIC8qIG1hc2sgYWxsICovCisJX19yYXdfd3JpdGV3KDB4ZmZmZiwgSVJRMV9NUik7ICAvKiBtYXNrIGFsbCAqLworCV9fcmF3X3dyaXRldygweGZmZmYsIElSUTJfTVIpOyAgLyogbWFzayBhbGwgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDAwLCBJUlEwX1NSKTsgIC8qIGNsZWFyIGlycSAqLworCV9fcmF3X3dyaXRldygweDAwMDAsIElSUTFfU1IpOyAgLyogY2xlYXIgaXJxICovCisJX19yYXdfd3JpdGV3KDB4MDAwMCwgSVJRMl9TUik7ICAvKiBjbGVhciBpcnEgKi8KKwlfX3Jhd193cml0ZXcoMHgwMDJhLCBJUlFfTU9ERSk7IC8qIHNldCBpcnEgdHlwZSAqLwogCi0JZm9yIChpID0gMDsgaSA8IFNFNzcyNF9GUEdBX0lSUV9OUjsgaSsrKQotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShTRTc3MjRfRlBHQV9JUlFfQkFTRSArIGksCisJZm9yIChpID0gMDsgaSA8IFNFNzcyNF9GUEdBX0lSUV9OUjsgaSsrKSB7CisJCWludCBpcnEsIHdhbnRlZDsKKworCQl3YW50ZWQgPSBTRTc3MjRfRlBHQV9JUlFfQkFTRSArIGk7CisKKwkJaXJxID0gY3JlYXRlX2lycV9ucih3YW50ZWQsIG5pZCk7CisJCWlmICh1bmxpa2VseShpcnEgPT0gMCkpIHsKKwkJCXByX2VycigiJXM6IGZhaWxlZCBob29raW5nIGlycSAlZCBmb3IgRlBHQVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgd2FudGVkKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmICh1bmxpa2VseShpcnEgIT0gd2FudGVkKSkgeworCQkJcHJfZXJyKCIlczogZ290IGlycSAlZCBidXQgd2FudGVkICVkLCBiYWlsaW5nLlxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgaXJxLCB3YW50ZWQpOworCQkJZGVzdHJveV9pcnEoaXJxKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwKIAkJCQkJICAgICAgJnNlNzcyNF9pcnFfY2hpcCwKIAkJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7CisJfQogCiAJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRMF9JUlEsIHNlNzcyNF9pcnFfZGVtdXgpOwogCXNldF9pcnFfdHlwZShJUlEwX0lSUSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZHJhbS5TIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NkcmFtLlMKaW5kZXggOTA0MDE2Ny4uNmZhNDczNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NkcmFtLlMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NkcmFtLlMKQEAgLTM5LDYgKzM5LDEwIEBACiAKIAkvKiBEQlNDOiBwdXQgbWVtb3J5IGluIGF1dG8tcmVmcmVzaCBtb2RlICovCiAKKwltb3YubAlAKFNIX1NMRUVQX01PREUsIHI1KSwgcjAKKwl0c3QJI1NVU1BfU0hfUlNUQU5EQlksIHIwCisJYmYJcmVzdW1lX3JzdGFuZGJ5CisKIAlFRCAweEZEMDAwMDQwLCAweDAwMDAwMDAwIC8qIERCUkZQRE4wICovCiAJV0FJVCAxCiAJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwMiAvKiBEQkNNRENOVCAoUEFMTCkgKi8KQEAgLTQ5LDQgKzUzLDc5IEBACiAJcnRzCiAJIG5vcAogCityZXN1bWVfcnN0YW5kYnk6CisKKwkvKiBDUEc6IHNldHVwIGNsb2NrcyBiZWZvcmUgcmVzdGFydGluZyBleHRlcm5hbCBtZW1vcnkgKi8KKworCUVEIDB4QTQxNTAwMjQsIDB4MDAwMDQwMDAgLyogUExMQ1IgKi8KKworCW1vdi5sCUZSUUNSQSxyMAorCW1vdi5sCUByMCxyMworCW1vdi5sCUtJQ0sscjEKKwlvcglyMSwgcjMKKwltb3YubAlyMywgQHIwCisKKwltb3YubAlMU1RBVFMscjAKKwltb3YJIzEscjEKK1dBSVRfTFNUQVRTOgorCW1vdi5sCUByMCxyMworCXRzdAlyMSxyMworCWJmCVdBSVRfTFNUQVRTCisKKwkvKiBEQlNDOiByZS1pbml0aWFsaXplIGFuZCBwdXQgaW4gYXV0by1yZWZyZXNoICovCisKKwlFRCAweEZEMDAwMTA4LCAweDAwMDAwMTgxIC8qIERCUERDTlQwICovCisJRUQgMHhGRDAwMDAyMCwgMHgwMTVCMDAwMiAvKiBEQkNPTkYgKi8KKwlFRCAweEZEMDAwMDMwLCAweDAzMDcxNTAyIC8qIERCVFIwICovCisJRUQgMHhGRDAwMDAzNCwgMHgwMjAyMDEwMiAvKiBEQlRSMSAqLworCUVEIDB4RkQwMDAwMzgsIDB4MDEwOTA0MDUgLyogREJUUjIgKi8KKwlFRCAweEZEMDAwMDNDLCAweDAwMDAwMDAyIC8qIERCVFIzICovCisJRUQgMHhGRDAwMDAwOCwgMHgwMDAwMDAwNSAvKiBEQktJTkQgKi8KKwlFRCAweEZEMDAwMDQwLCAweDAwMDAwMDAxIC8qIERCUkZQRE4wICovCisJRUQgMHhGRDAwMDA0MCwgMHgwMDAwMDAwMCAvKiBEQlJGUEROMCAqLworCUVEIDB4RkQwMDAwMTgsIDB4MDAwMDAwMDEgLyogREJDS0VDTlQgKi8KKworCW1vdgkjMTAwLHIwCitXQUlUXzQwME5TOgorCWR0CXIwCisJYmYJV0FJVF80MDBOUworCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwMiAvKiBEQkNNRENOVCAoUEFMTCkgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDIwMDAwIC8qIERCTVJDTlQgKEVNUjIpICovCisJRUQgMHhGRDAwMDA2MCwgMHgwMDAzMDAwMCAvKiBEQk1SQ05UIChFTVIzKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMTAwMDQgLyogREJNUkNOVCAoRU1SKSAqLworCUVEIDB4RkQwMDAwNjAsIDB4MDAwMDA1MzIgLyogREJNUkNOVCAoTVJTKSAqLworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDIgLyogREJDTURDTlQgKFBBTEwpICovCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwNCAvKiBEQkNNRENOVCAoUkVGKSAqLworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDQgLyogREJDTURDTlQgKFJFRikgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDAwNDMyIC8qIERCTVJDTlQgKE1SUykgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDEwM2MwIC8qIERCTVJDTlQgKEVNUikgKi8KKwlFRCAweEZEMDAwMDYwLCAweDAwMDEwMDQwIC8qIERCTVJDTlQgKEVNUikgKi8KKworCW1vdgkjMTAwLHIwCitXQUlUXzQwME5TXzI6CisJZHQJcjAKKwliZglXQUlUXzQwME5TXzIKKworCUVEIDB4RkQwMDAwMTAsIDB4MDAwMDAwMDEgLyogREJFTiAqLworCUVEIDB4RkQwMDAwNDQsIDB4MDAwMDA1MGYgLyogREJSRlBETjEgKi8KKwlFRCAweEZEMDAwMDQ4LCAweDIzNjgwMGU2IC8qIERCUkZQRE4yICovCisKKwltb3YubAlEVU1NWSxyMAorCW1vdi5sCUByMCwgcjEgLyogZm9yY2Ugc2luZ2xlIGR1bW15IHJlYWQgKi8KKworCUVEIDB4RkQwMDAwMTQsIDB4MDAwMDAwMDIgLyogREJDTURDTlQgKFBBTEwpICovCisJRUQgMHhGRDAwMDAxNCwgMHgwMDAwMDAwNCAvKiBEQkNNRENOVCAoUkVGKSAqLworCUVEIDB4RkQwMDAxMDgsIDB4MDAwMDAwODAgLyogREJQRENOVDAgKi8KKwlFRCAweEZEMDAwMDQwLCAweDAwMDEwMDAwIC8qIERCUkZQRE4wICovCisKKwlydHMKKwkgbm9wCisKKwkuYmFsaWduIDQKK0RVTU1ZOgkubG9uZwkweGFjNDAwMDAwCitGUlFDUkE6CS5sb25nCTB4YTQxNTAwMDAKK0tJQ0s6CS5sb25nCTB4ODAwMDAwMDAKK0xTVEFUUzoJLmxvbmcJMHhhNDE1MDA2MAorCiBFTlRSWShtczc3MjRzZV9zZHJhbV9sZWF2ZV9lbmQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCmluZGV4IDg1OGVjYjIuLjY2Y2RiYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCkBAIC01MywyNiArNTMsMTcgQEAKICAqLwogCiAvKiBIZWFydGJlYXQgKi8KLXN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7Ci0JLnJlZ3NpemUgPSAxNiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IFBBX0xFRCwKLQkJLmVuZCAgICA9IFBBX0xFRCwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgID0gUEFfTEVELAorCS5lbmQgICAgPSBQQV9MRUQsCisJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMTZCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewogCS5uYW1lICAgICAgICAgICA9ICJoZWFydGJlYXQiLAogCS5pZCAgICAgICAgICAgICA9IC0xLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmhlYXJ0YmVhdF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgICAgICAgPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IDEsCisJLnJlc291cmNlICAgICAgID0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIC8qIExBTjkxQzExMSAqLwpAQCAtMjY1LDEyICsyNTYsMTIgQEAKICNkZWZpbmUgRkNMS0FDUgkJMHhhNDE1MDAwOAogc3RhdGljIHZvaWQgZnNpbWNrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCXUzMiBzdGF0dXMgPSBjdHJsX2lubChjbGstPmVuYWJsZV9yZWcpOworCXUzMiBzdGF0dXMgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwogCiAJLyogdXNlIGV4dGVybmFsIGNsb2NrICovCiAJc3RhdHVzICY9IH4weDAwMDAwMGZmOwogCXN0YXR1cyB8PSAweDAwMDAwMDgwOwotCWN0cmxfb3V0bChzdGF0dXMsIGNsay0+ZW5hYmxlX3JlZyk7CisJX19yYXdfd3JpdGVsKHN0YXR1cywgY2xrLT5lbmFibGVfcmVnKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIGZzaW1ja19jbGtfb3BzID0gewpAQCAtMzIyLDcgKzMxMyw3IEBACiAvKiBLRVlTQyBpbiBTb0MgKE5lZWRzIFNXMzMtMiBzZXQgdG8gT04pICovCiBzdGF0aWMgc3RydWN0IHNoX2tleXNjX2luZm8ga2V5c2NfaW5mbyA9IHsKIAkubW9kZSA9IFNIX0tFWVNDX01PREVfMSwKLQkuc2Nhbl90aW1pbmcgPSAxMCwKKwkuc2Nhbl90aW1pbmcgPSAzLAogCS5kZWxheSA9IDUwLAogCS5rZXljb2RlcyA9IHsKIAkJS0VZXzEsIEtFWV8yLCBLRVlfMywgS0VZXzQsIEtFWV81LApAQCAtNDYwLDcgKzQ1MSw3IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0ICA9IDEwMSwKKwkJLnN0YXJ0ICA9IDEwMCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNDgzLDcgKzQ3NCw3IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0ICA9IDI0LAorCQkuc3RhcnQgID0gMjMsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTQ5OCw2ICs0ODksMjYgQEAKIAl9LAogfTsKIAorLyogSXJEQSAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpcmRhX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiSXJEQSIsCisJCS5zdGFydCAgPSAweEE0NUQwMDAwLAorCQkuZW5kICAgID0gMHhBNDVEMDA0OSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gMjAsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaXJkYV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNoX3NpciIsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShpcmRhX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gaXJkYV9yZXNvdXJjZXMsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXM3NzI0c2VfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmhlYXJ0YmVhdF9kZXZpY2UsCiAJJnNtYzkxeF9ldGhfZGV2aWNlLApAQCAtNTEyLDYgKzUyMyw3IEBACiAJJmZzaV9kZXZpY2UsCiAJJnNkaGkwX2NuN19kZXZpY2UsCiAJJnNkaGkxX2NuOF9kZXZpY2UsCisJJmlyZGFfZGV2aWNlLAogfTsKIAogLyogSTJDIGRldmljZSAqLwpAQCAtNTMxLDcgKzU0Myw3IEBACiAJaW50IHQgPSAxMDAwMDsKIAogCXdoaWxlICh0LS0pIHsKLQkJaWYgKCFjdHJsX2ludyhFRVBST01fU1RBVCkpCisJCWlmICghX19yYXdfcmVhZHcoRUVQUk9NX1NUQVQpKQogCQkJcmV0dXJuIDE7CiAJCXVkZWxheSgxKTsKIAl9CkBAIC01NTEsMTMgKzU2MywxMyBAQAogCiAJLyogcmVhZCBNQUMgYWRkciBmcm9tIEVFUFJPTSAqLwogCWZvciAoaSA9IDAgOyBpIDwgMyA7IGkrKykgewotCQljdHJsX291dHcoMHgwLCBFRVBST01fT1ApOyAvKiByZWFkICovCi0JCWN0cmxfb3V0dyhpKjIsIEVFUFJPTV9BRFIpOwotCQljdHJsX291dHcoMHgxLCBFRVBST01fU1RSVCk7CisJCV9fcmF3X3dyaXRldygweDAsIEVFUFJPTV9PUCk7IC8qIHJlYWQgKi8KKwkJX19yYXdfd3JpdGV3KGkqMiwgRUVQUk9NX0FEUik7CisJCV9fcmF3X3dyaXRldygweDEsIEVFUFJPTV9TVFJUKTsKIAkJaWYgKCFzaF9ldGhfaXNfZWVwcm9tX3JlYWR5KCkpCiAJCQlyZXR1cm47CiAKLQkJbWFjID0gY3RybF9pbncoRUVQUk9NX0RBVEEpOworCQltYWMgPSBfX3Jhd19yZWFkdyhFRVBST01fREFUQSk7CiAJCXNoX2V0aF9wbGF0Lm1hY19hZGRyW2kgPDwgMV0gPSBtYWMgJiAweGZmOwogCQlzaF9ldGhfcGxhdC5tYWNfYWRkclsoaSA8PCAxKSArIDFdID0gbWFjID4+IDg7CiAJfQpAQCAtNTk0LDI4ICs2MDYsMjkgQEAKIAogc3RhdGljIGludCBfX2luaXQgZGV2aWNlc19zZXR1cCh2b2lkKQogewotCXUxNiBzdyA9IGN0cmxfaW53KFNXNDE0MCk7IC8qIHNlbGVjdCBjYW1lcmEsIG1vbml0b3IgKi8KLQlzdHJ1Y3QgY2xrICpmc2lhX2NsazsKKwl1MTYgc3cgPSBfX3Jhd19yZWFkdyhTVzQxNDApOyAvKiBzZWxlY3QgY2FtZXJhLCBtb25pdG9yICovCisJc3RydWN0IGNsayAqY2xrOwogCiAJLyogcmVnaXN0ZXIgYm9hcmQgc3BlY2lmaWMgc2VsZi1yZWZyZXNoIGNvZGUgKi8KLQlzaF9tb2JpbGVfcmVnaXN0ZXJfc2VsZl9yZWZyZXNoKFNVU1BfU0hfU1RBTkRCWSB8IFNVU1BfU0hfU0YsCisJc2hfbW9iaWxlX3JlZ2lzdGVyX3NlbGZfcmVmcmVzaChTVVNQX1NIX1NUQU5EQlkgfCBTVVNQX1NIX1NGIHwKKwkJCQkJU1VTUF9TSF9SU1RBTkRCWSwKIAkJCQkJJm1zNzcyNHNlX3NkcmFtX2VudGVyX3N0YXJ0LAogCQkJCQkmbXM3NzI0c2Vfc2RyYW1fZW50ZXJfZW5kLAogCQkJCQkmbXM3NzI0c2Vfc2RyYW1fbGVhdmVfc3RhcnQsCiAJCQkJCSZtczc3MjRzZV9zZHJhbV9sZWF2ZV9lbmQpOwogCS8qIFJlc2V0IFJlbGVhc2UgKi8KLQljdHJsX291dHcoY3RybF9pbncoRlBHQV9PVVQpICYKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoRlBHQV9PVVQpICYKIAkJICB+KCgxIDw8IDEpICB8IC8qIExBTiAqLwogCQkgICAgKDEgPDwgNikgIHwgLyogVklERU8gREFDICovCiAJCSAgICAoMSA8PCA3KSAgfCAvKiBBSzQ2NDMgKi8KKwkJICAgICgxIDw8IDgpICB8IC8qIElyREEgKi8KIAkJICAgICgxIDw8IDEyKSB8IC8qIFVTQjAgKi8KIAkJICAgICgxIDw8IDE0KSksIC8qIFJNSUkgKi8KIAkJICBGUEdBX09VVCk7CiAKIAkvKiB0dXJuIG9uIFVTQiBjbG9ja3MsIHVzZSBleHRlcm5hbCBjbG9jayAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9NU0VMQ1JCKSAmIH4weGMwMDApIHwgMHg4MDAwLCBQT1JUX01TRUxDUkIpOworCV9fcmF3X3dyaXRldygoX19yYXdfcmVhZHcoUE9SVF9NU0VMQ1JCKSAmIH4weGMwMDApIHwgMHg4MDAwLCBQT1JUX01TRUxDUkIpOwogCi0jaWZkZWYgQ09ORklHX1BNCiAJLyogTGV0IExFRDkgc2hvdyBTVEFUVVMyICovCiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU1RBVFVTMiwgTlVMTCk7CiAKQEAgLTYyNCwyOCArNjM3LDEyIEBACiAKIAkvKiBMaXQgTEVEMTEgc2hvdyBQRFNUQVRVUyAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1BEU1RBVFVTLCBOVUxMKTsKLSNlbHNlCi0JLyogTGl0IExFRDkgKi8KLQlncGlvX3JlcXVlc3QoR1BJT19QVEo2LCBOVUxMKTsKLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEo2LCAxKTsKLQlncGlvX2V4cG9ydChHUElPX1BUSjYsIDApOwotCi0JLyogTGl0IExFRDEwICovCi0JZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNSwgTlVMTCk7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNSwgMSk7Ci0JZ3Bpb19leHBvcnQoR1BJT19QVEo1LCAwKTsKLQotCS8qIExpdCBMRUQxMSAqLwotCWdwaW9fcmVxdWVzdChHUElPX1BUSjcsIE5VTEwpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUSjcsIDEpOwotCWdwaW9fZXhwb3J0KEdQSU9fUFRKNywgMCk7Ci0jZW5kaWYKIAogCS8qIGVuYWJsZSBVU0IwIHBvcnQgKi8KLQljdHJsX291dHcoMHgwNjAwLCAweGE0MDUwMWQ0KTsKKwlfX3Jhd193cml0ZXcoMHgwNjAwLCAweGE0MDUwMWQ0KTsKIAogCS8qIGVuYWJsZSBVU0IxIHBvcnQgKi8KLQljdHJsX291dHcoMHgwNjAwLCAweGE0MDUwMTkyKTsKKwlfX3Jhd193cml0ZXcoMHgwNjAwLCAweGE0MDUwMTkyKTsKIAogCS8qIGVuYWJsZSBJUlEgMCwxLDIgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9JTlRDX0lSUTAsIE5VTEwpOwpAQCAtNjkzLDcgKzY5MCw3IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEVkNQV0MsIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFJELCAgICBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RMQ0xLLCAgTlVMTCk7Ci0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX0hJWkEpICYgfjB4MDAwMSksIFBPUlRfSElaQSk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhQT1JUX0hJWkEpICYgfjB4MDAwMSksIFBPUlRfSElaQSk7CiAKIAkvKiBlbmFibGUgQ0VVMCAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJTzBfRDE1LCBOVUxMKTsKQEAgLTc2NCwxMyArNzYxLDE4IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQ0xLQVVESU9CTywgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJSUFTRCwgICAgTlVMTCk7CiAKKwkvKiBzZXQgU1BVMiBjbG9jayB0byA4My40IE1IeiAqLworCWNsayA9IGNsa19nZXQoTlVMTCwgInNwdV9jbGsiKTsKKwljbGtfc2V0X3JhdGUoY2xrLCBjbGtfcm91bmRfcmF0ZShjbGssIDgzMzMzMzMzKSk7CisJY2xrX3B1dChjbGspOworCiAJLyogY2hhbmdlIHBhcmVudCBvZiBGU0kgQSAqLwotCWZzaWFfY2xrID0gY2xrX2dldChOVUxMLCAiZnNpYV9jbGsiKTsKKwljbGsgPSBjbGtfZ2V0KE5VTEwsICJmc2lhX2NsayIpOwogCWNsa19yZWdpc3RlcigmZnNpbWNrYV9jbGspOwotCWNsa19zZXRfcGFyZW50KGZzaWFfY2xrLCAmZnNpbWNrYV9jbGspOwotCWNsa19zZXRfcmF0ZShmc2lhX2NsaywgMTEwMDApOworCWNsa19zZXRfcGFyZW50KGNsaywgJmZzaW1ja2FfY2xrKTsKKwljbGtfc2V0X3JhdGUoY2xrLCAxMTAwMCk7CiAJY2xrX3NldF9yYXRlKCZmc2ltY2thX2NsaywgMTEwMDApOwotCWNsa19wdXQoZnNpYV9jbGspOworCWNsa19wdXQoY2xrKTsKIAogCS8qIFNESEkwIGNvbm5lY3RlZCB0byBjbjcgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJMENELCBOVUxMKTsKQEAgLTc5Miw2ICs3OTQsMTAgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJMUNNRCwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISTFDTEssIE5VTEwpOwogCisJLyogZW5hYmxlIElyREEgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9JUkRBX09VVCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJEQV9JTiwgIE5VTEwpOworCiAJLyoKIAkgKiBlbmFibGUgU0gtRXRoCiAJICoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzc4MC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzc4MC9pcnEuYwppbmRleCAxMjE3NDRjLi5kNWM5ZWRjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3ODAvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzgwL2lycS5jCkBAIC0yNCwzMCArMjQsMzAgQEAKIHZvaWQgX19pbml0IGluaXRfc2U3NzgwX0lSUSh2b2lkKQogewogCS8qIGVuYWJsZSBhbGwgaW50ZXJydXB0IGF0IEZQR0EgKi8KLQljdHJsX291dHcoMCwgRlBHQV9JTlRNU0sxKTsKKwlfX3Jhd193cml0ZXcoMCwgRlBHQV9JTlRNU0sxKTsKIAkvKiBtYXNrIFNNNTAxIGludGVycnVwdCAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoRlBHQV9JTlRNU0sxKSB8IDB4MDAwMiksIEZQR0FfSU5UTVNLMSk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhGUEdBX0lOVE1TSzEpIHwgMHgwMDAyKSwgRlBHQV9JTlRNU0sxKTsKIAkvKiBlbmFibGUgYWxsIGludGVycnVwdCBhdCBGUEdBICovCi0JY3RybF9vdXR3KDAsIEZQR0FfSU5UTVNLMik7CisJX19yYXdfd3JpdGV3KDAsIEZQR0FfSU5UTVNLMik7CiAKIAkvKiBzZXQgRlBHQSBJTlRTRUwgcmVnaXN0ZXIgKi8KIAkvKiBGUEdBICsgMHgwNiAqLwotCWN0cmxfb3V0dyggKChJUlFQSU5fU001MDEgPDwgSVJRUE9TX1NNNTAxKSB8CisJX19yYXdfd3JpdGV3KCAoKElSUVBJTl9TTTUwMSA8PCBJUlFQT1NfU001MDEpIHwKIAkJKElSUVBJTl9TTUM5MUNYIDw8IElSUVBPU19TTUM5MUNYKSksIEZQR0FfSU5UU0VMMSk7CiAKIAkvKiBGUEdBICsgMHgwOCAqLwotCWN0cmxfb3V0dygoKElSUVBJTl9FWFRJTlQ0IDw8IElSUVBPU19FWFRJTlQ0KSB8CisJX19yYXdfd3JpdGV3KCgoSVJRUElOX0VYVElOVDQgPDwgSVJRUE9TX0VYVElOVDQpIHwKIAkJKElSUVBJTl9FWFRJTlQzIDw8IElSUVBPU19FWFRJTlQzKSB8CiAJCShJUlFQSU5fRVhUSU5UMiA8PCBJUlFQT1NfRVhUSU5UMikgfAogCQkoSVJRUElOX0VYVElOVDEgPDwgSVJRUE9TX0VYVElOVDEpKSwgRlBHQV9JTlRTRUwyKTsKIAogCS8qIEZQR0EgKyAweDBBICovCi0JY3RybF9vdXR3KChJUlFQSU5fUENDUFcgPDwgSVJRUE9TX1BDQ1BXKSwgRlBHQV9JTlRTRUwzKTsKKwlfX3Jhd193cml0ZXcoKElSUVBJTl9QQ0NQVyA8PCBJUlFQT1NfUENDUFcpLCBGUEdBX0lOVFNFTDMpOwogCiAJcGxhdF9pcnFfc2V0dXBfcGlucyhJUlFfTU9ERV9JUlEpOyAvKiBpbnN0YWxsIGhhbmRsZXJzIGZvciBJUlEwLTcgKi8KIAogCS8qIElDUjE6IGRldGVjdCBsb3cgbGV2ZWwoZm9yIDJuZGN1dCkgKi8KLQljdHJsX291dGwoMHhBQUFBMDAwMCwgSU5UQ19JQ1IxKTsKKwlfX3Jhd193cml0ZWwoMHhBQUFBMDAwMCwgSU5UQ19JQ1IxKTsKIAogCS8qCiAJICogRlBHQSBQQ0lTRUwgcmVnaXN0ZXIgaW5pdGlhbGl6ZQpAQCAtNjMsNiArNjMsNiBAQAogCSAqICBJTlREIHx8IElOVEQgIHwgSU5UQyAgfCAgLS0gICB8IElOVEEKIAkgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCSAqLwotCWN0cmxfb3V0dygweDAwMTMsIEZQR0FfUENJX0lOVFNFTDEpOwotCWN0cmxfb3V0dygweEU0MDIsIEZQR0FfUENJX0lOVFNFTDIpOworCV9fcmF3X3dyaXRldygweDAwMTMsIEZQR0FfUENJX0lOVFNFTDEpOworCV9fcmF3X3dyaXRldygweEU0MDIsIEZQR0FfUENJX0lOVFNFTDIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzgwL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3ODAvc2V0dXAuYwppbmRleCAxZDNhODY3Li42ZjdjMjA3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3ODAvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3ODAvc2V0dXAuYwpAQCAtMTcsMjYgKzE3LDE3IEBACiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgogCiAvKiBIZWFydGJlYXQgKi8KLXN0YXRpYyBzdHJ1Y3QgaGVhcnRiZWF0X2RhdGEgaGVhcnRiZWF0X2RhdGEgPSB7Ci0JLnJlZ3NpemUgPSAxNiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGVhcnRiZWF0X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICA9IFBBX0xFRCwKLQkJLmVuZCAgICA9IFBBX0xFRCwKLQkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGhlYXJ0YmVhdF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgID0gUEFfTEVELAorCS5lbmQgICAgPSBQQV9MRUQsCisJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMTZCSVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZWFydGJlYXRfZGV2aWNlID0gewogCS5uYW1lICAgICAgICAgICA9ICJoZWFydGJlYXQiLAogCS5pZCAgICAgICAgICAgICA9IC0xLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmhlYXJ0YmVhdF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShoZWFydGJlYXRfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgICAgICAgPSBoZWFydGJlYXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IDEsCisJLnJlc291cmNlICAgICAgID0gJmhlYXJ0YmVhdF9yZXNvdXJjZSwKIH07CiAKIC8qIFNNQzkxeCAqLwpAQCAtODQsMTQgKzc1LDE0IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgc2U3NzgwX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAJLyogIlNILUxpbnV4IiBvbiBMRUQgRGlzcGxheSAqLwotCWN0cmxfb3V0dyggJ1MnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUwwX0FERFIgPDwgMSkgKTsKLQljdHJsX291dHcoICdIJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMMV9BRERSIDw8IDEpICk7Ci0JY3RybF9vdXR3KCAnLScgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDJfQUREUiA8PCAxKSApOwotCWN0cmxfb3V0dyggJ0wnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUwzX0FERFIgPDwgMSkgKTsKLQljdHJsX291dHcoICdpJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMNF9BRERSIDw8IDEpICk7Ci0JY3RybF9vdXR3KCAnbicgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDVfQUREUiA8PCAxKSApOwotCWN0cmxfb3V0dyggJ3UnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUw2X0FERFIgPDwgMSkgKTsKLQljdHJsX291dHcoICd4JyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMN19BRERSIDw8IDEpICk7CisJX19yYXdfd3JpdGV3KCAnUycgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDBfQUREUiA8PCAxKSApOworCV9fcmF3X3dyaXRldyggJ0gnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUwxX0FERFIgPDwgMSkgKTsKKwlfX3Jhd193cml0ZXcoICctJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMMl9BRERSIDw8IDEpICk7CisJX19yYXdfd3JpdGV3KCAnTCcgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDNfQUREUiA8PCAxKSApOworCV9fcmF3X3dyaXRldyggJ2knICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUw0X0FERFIgPDwgMSkgKTsKKwlfX3Jhd193cml0ZXcoICduJyAsIFBBX0xFRF9ESVNQICsgKERJU1BfU0VMNV9BRERSIDw8IDEpICk7CisJX19yYXdfd3JpdGV3KCAndScgLCBQQV9MRURfRElTUCArIChESVNQX1NFTDZfQUREUiA8PCAxKSApOworCV9fcmF3X3dyaXRldyggJ3gnICwgUEFfTEVEX0RJU1AgKyAoRElTUF9TRUw3X0FERFIgPDwgMSkgKTsKIAogCXByaW50ayhLRVJOX0lORk8gIkhpdGFjaGkgVUwgU29sdXRpb25zIEVuZ2luZSA3NzgwU0UwMyBzdXBwb3J0LlxuIik7CiAKQEAgLTEwMiwxNSArOTMsMTUgQEAKIAkgKiAgIFJFUTIvR05UMiAtPiBTZXJpYWwgQVRBCiAJICogICBSRVEzL0dOVDMgLT4gUENJIHNsb3QKIAkgKi8KLQljdHJsX291dHcoMHgwMjEzLCBGUEdBX1JFUVNFTCk7CisJX19yYXdfd3JpdGV3KDB4MDIxMywgRlBHQV9SRVFTRUwpOwogCiAJLyogR1BJTyBzZXR0aW5nICovCi0JY3RybF9vdXR3KDB4MDAwMCwgR1BJT19QRUNSKTsKLQljdHJsX291dHcoY3RybF9pbncoR1BJT19QSENSKSYweGZmZjMsIEdQSU9fUEhDUik7Ci0JY3RybF9vdXR3KDB4MGMwMCwgR1BJT19QTVNFTFIpOworCV9fcmF3X3dyaXRldygweDAwMDAsIEdQSU9fUEVDUik7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KEdQSU9fUEhDUikmMHhmZmYzLCBHUElPX1BIQ1IpOworCV9fcmF3X3dyaXRldygweDBjMDAsIEdQSU9fUE1TRUxSKTsKIAogCS8qIGlWRFIgUG93ZXIgT04gKi8KLQljdHJsX291dHcoMHgwMDAxLCBGUEdBX0lWRFJQVyk7CisJX19yYXdfd3JpdGV3KDB4MDAwMSwgRlBHQV9JVkRSUFcpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDAzL3J0Yy5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDAzL3J0Yy5jCmluZGV4IGE4YjlmODQuLjFiMjAwOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9ydGMuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoMDMvcnRjLmMKQEAgLTQ0LDE1ICs0NCwxNSBAQAogCXNwaW5fbG9jaygmc2gwM19ydGNfbG9jayk7CiAgYWdhaW46CiAJZG8gewotCQlzZWMgID0gKGN0cmxfaW5iKFJUQ19TRUMxKSAmIDB4ZikgKyAoY3RybF9pbmIoUlRDX1NFQzEwKSAmIDB4NykgKiAxMDsKLQkJbWluICA9IChjdHJsX2luYihSVENfTUlOMSkgJiAweGYpICsgKGN0cmxfaW5iKFJUQ19NSU4xMCkgJiAweGYpICogMTA7Ci0JCWhvdXIgPSAoY3RybF9pbmIoUlRDX0hPVTEpICYgMHhmKSArIChjdHJsX2luYihSVENfSE9VMTApICYgMHhmKSAqIDEwOwotCQlkYXkgID0gKGN0cmxfaW5iKFJUQ19EQVkxKSAmIDB4ZikgKyAoY3RybF9pbmIoUlRDX0RBWTEwKSAmIDB4ZikgKiAxMDsKLQkJbW9uICA9IChjdHJsX2luYihSVENfTU9OMSkgJiAweGYpICsgKGN0cmxfaW5iKFJUQ19NT04xMCkgJiAweGYpICogMTA7Ci0JCXllYXIgPSAoY3RybF9pbmIoUlRDX1lFQTEpICYgMHhmKSArIChjdHJsX2luYihSVENfWUVBMTApICYgMHhmKSAqIDEwCi0JCSAgICAgKyAoY3RybF9pbmIoUlRDX1lFQTEwMCApICYgMHhmKSAqIDEwMAotCQkgICAgICsgKGN0cmxfaW5iKFJUQ19ZRUExMDAwKSAmIDB4ZikgKiAxMDAwOwotCX0gd2hpbGUgKHNlYyAhPSAoY3RybF9pbmIoUlRDX1NFQzEpICYgMHhmKSArIChjdHJsX2luYihSVENfU0VDMTApICYgMHg3KSAqIDEwKTsKKwkJc2VjICA9IChfX3Jhd19yZWFkYihSVENfU0VDMSkgJiAweGYpICsgKF9fcmF3X3JlYWRiKFJUQ19TRUMxMCkgJiAweDcpICogMTA7CisJCW1pbiAgPSAoX19yYXdfcmVhZGIoUlRDX01JTjEpICYgMHhmKSArIChfX3Jhd19yZWFkYihSVENfTUlOMTApICYgMHhmKSAqIDEwOworCQlob3VyID0gKF9fcmF3X3JlYWRiKFJUQ19IT1UxKSAmIDB4ZikgKyAoX19yYXdfcmVhZGIoUlRDX0hPVTEwKSAmIDB4ZikgKiAxMDsKKwkJZGF5ICA9IChfX3Jhd19yZWFkYihSVENfREFZMSkgJiAweGYpICsgKF9fcmF3X3JlYWRiKFJUQ19EQVkxMCkgJiAweGYpICogMTA7CisJCW1vbiAgPSAoX19yYXdfcmVhZGIoUlRDX01PTjEpICYgMHhmKSArIChfX3Jhd19yZWFkYihSVENfTU9OMTApICYgMHhmKSAqIDEwOworCQl5ZWFyID0gKF9fcmF3X3JlYWRiKFJUQ19ZRUExKSAmIDB4ZikgKyAoX19yYXdfcmVhZGIoUlRDX1lFQTEwKSAmIDB4ZikgKiAxMAorCQkgICAgICsgKF9fcmF3X3JlYWRiKFJUQ19ZRUExMDAgKSAmIDB4ZikgKiAxMDAKKwkJICAgICArIChfX3Jhd19yZWFkYihSVENfWUVBMTAwMCkgJiAweGYpICogMTAwMDsKKwl9IHdoaWxlIChzZWMgIT0gKF9fcmF3X3JlYWRiKFJUQ19TRUMxKSAmIDB4ZikgKyAoX19yYXdfcmVhZGIoUlRDX1NFQzEwKSAmIDB4NykgKiAxMCk7CiAJaWYgKHllYXIgPT0gMCB8fCBtb24gPCAxIHx8IG1vbiA+IDEyIHx8IGRheSA+IDMxIHx8IGRheSA8IDEgfHwKIAkgICAgaG91ciA+IDIzIHx8IG1pbiA+IDU5IHx8IHNlYyA+IDU5KSB7CiAJCXByaW50ayhLRVJOX0VSUgpAQCAtNjAsMTYgKzYwLDE2IEBACiAJCXByaW50aygieWVhcj0lZCwgbW9uPSVkLCBkYXk9JWQsIGhvdXI9JWQsIG1pbj0lZCwgc2VjPSVkXG4iLAogCQkgICAgICAgeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjKTsKIAotCQljdHJsX291dGIoMCwgUlRDX1NFQzEpOyBjdHJsX291dGIoMCwgUlRDX1NFQzEwKTsKLQkJY3RybF9vdXRiKDAsIFJUQ19NSU4xKTsgY3RybF9vdXRiKDAsIFJUQ19NSU4xMCk7Ci0JCWN0cmxfb3V0YigwLCBSVENfSE9VMSk7IGN0cmxfb3V0YigwLCBSVENfSE9VMTApOwotCQljdHJsX291dGIoNiwgUlRDX1dFRTEpOwotCQljdHJsX291dGIoMSwgUlRDX0RBWTEpOyBjdHJsX291dGIoMCwgUlRDX0RBWTEwKTsKLQkJY3RybF9vdXRiKDEsIFJUQ19NT04xKTsgY3RybF9vdXRiKDAsIFJUQ19NT04xMCk7Ci0JCWN0cmxfb3V0YigwLCBSVENfWUVBMSk7IGN0cmxfb3V0YigwLCBSVENfWUVBMTApOwotCQljdHJsX291dGIoMCwgUlRDX1lFQTEwMCk7Ci0JCWN0cmxfb3V0YigyLCBSVENfWUVBMTAwMCk7Ci0JCWN0cmxfb3V0YigwLCBSVENfQ1RMKTsKKwkJX19yYXdfd3JpdGViKDAsIFJUQ19TRUMxKTsgX19yYXdfd3JpdGViKDAsIFJUQ19TRUMxMCk7CisJCV9fcmF3X3dyaXRlYigwLCBSVENfTUlOMSk7IF9fcmF3X3dyaXRlYigwLCBSVENfTUlOMTApOworCQlfX3Jhd193cml0ZWIoMCwgUlRDX0hPVTEpOyBfX3Jhd193cml0ZWIoMCwgUlRDX0hPVTEwKTsKKwkJX19yYXdfd3JpdGViKDYsIFJUQ19XRUUxKTsKKwkJX19yYXdfd3JpdGViKDEsIFJUQ19EQVkxKTsgX19yYXdfd3JpdGViKDAsIFJUQ19EQVkxMCk7CisJCV9fcmF3X3dyaXRlYigxLCBSVENfTU9OMSk7IF9fcmF3X3dyaXRlYigwLCBSVENfTU9OMTApOworCQlfX3Jhd193cml0ZWIoMCwgUlRDX1lFQTEpOyBfX3Jhd193cml0ZWIoMCwgUlRDX1lFQTEwKTsKKwkJX19yYXdfd3JpdGViKDAsIFJUQ19ZRUExMDApOworCQlfX3Jhd193cml0ZWIoMiwgUlRDX1lFQTEwMDApOworCQlfX3Jhd193cml0ZWIoMCwgUlRDX0NUTCk7CiAJCWdvdG8gYWdhaW47CiAJfQogCkBAIC05Myw5ICs5Myw5IEBACiAJLyogZ2V0cyByZWNhbGxlZCB3aXRoIGlycSBsb2NhbGx5IGRpc2FibGVkICovCiAJc3Bpbl9sb2NrKCZzaDAzX3J0Y19sb2NrKTsKIAlmb3IgKGkgPSAwIDsgaSA8IDEwMDAwMDAgOyBpKyspCS8qIG1heSB0YWtlIHVwIHRvIDEgc2Vjb25kLi4uICovCi0JCWlmICghKGN0cmxfaW5iKFJUQ19DVEwpICYgUlRDX0JVU1kpKQorCQlpZiAoIShfX3Jhd19yZWFkYihSVENfQ1RMKSAmIFJUQ19CVVNZKSkKIAkJCWJyZWFrOwotCWNtb3NfbWludXRlcyA9IChjdHJsX2luYihSVENfTUlOMSkgJiAweGYpICsgKGN0cmxfaW5iKFJUQ19NSU4xMCkgJiAweGYpICogMTA7CisJY21vc19taW51dGVzID0gKF9fcmF3X3JlYWRiKFJUQ19NSU4xKSAmIDB4ZikgKyAoX19yYXdfcmVhZGIoUlRDX01JTjEwKSAmIDB4ZikgKiAxMDsKIAlyZWFsX3NlY29uZHMgPSBub3d0aW1lICUgNjA7CiAJcmVhbF9taW51dGVzID0gbm93dGltZSAvIDYwOwogCWlmICgoKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpICsgMTUpLzMwKSAmIDEpCkBAIC0xMDMsMTAgKzEwMywxMCBAQAogCXJlYWxfbWludXRlcyAlPSA2MDsKIAogCWlmIChhYnMocmVhbF9taW51dGVzIC0gY21vc19taW51dGVzKSA8IDMwKSB7Ci0JCWN0cmxfb3V0YihyZWFsX3NlY29uZHMgJSAxMCwgUlRDX1NFQzEpOwotCQljdHJsX291dGIocmVhbF9zZWNvbmRzIC8gMTAsIFJUQ19TRUMxMCk7Ci0JCWN0cmxfb3V0YihyZWFsX21pbnV0ZXMgJSAxMCwgUlRDX01JTjEpOwotCQljdHJsX291dGIocmVhbF9taW51dGVzIC8gMTAsIFJUQ19NSU4xMCk7CisJCV9fcmF3X3dyaXRlYihyZWFsX3NlY29uZHMgJSAxMCwgUlRDX1NFQzEpOworCQlfX3Jhd193cml0ZWIocmVhbF9zZWNvbmRzIC8gMTAsIFJUQ19TRUMxMCk7CisJCV9fcmF3X3dyaXRlYihyZWFsX21pbnV0ZXMgJSAxMCwgUlRDX01JTjEpOworCQlfX3Jhd193cml0ZWIocmVhbF9taW51dGVzIC8gMTAsIFJUQ19NSU4xMCk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgInNldF9ydGNfbW1zczogY2FuJ3QgdXBkYXRlIGZyb20gJWQgdG8gJWRcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoMDMvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9zZXR1cC5jCmluZGV4IDc0Y2ZiNGIuLmFmNGEwYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2gwMy9zZXR1cC5jCkBAIC04Miw3ICs4Miw3IEBACiAJLyogb3BlbiBJL08gYXJlYSB3aW5kb3cgKi8KIAlwYWRkcmJhc2UgPSB2aXJ0X3RvX3BoeXMoKHZvaWQgKilQQV9BUkVBNV9JTyk7CiAJcHJvdCA9IFBBR0VfS0VSTkVMX1BDQygxLCBfUEFHRV9QQ0NfSU8xNik7Ci0JY2ZfaWRlX2Jhc2UgPSBwM19pb3JlbWFwKHBhZGRyYmFzZSwgUEFHRV9TSVpFLCBwcm90LnBncHJvdCk7CisJY2ZfaWRlX2Jhc2UgPSBpb3JlbWFwX3Byb3QocGFkZHJiYXNlLCBQQUdFX1NJWkUsIHBncHJvdF92YWwocHJvdCkpOwogCWlmICghY2ZfaWRlX2Jhc2UpIHsKIAkJcHJpbnRrKCJhbGxvY2F0ZV9jZl9hcmVhIDogY2FuJ3Qgb3BlbiBDRiBJL08gd2luZG93IVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9pcnEuYwppbmRleCBkOGViZmE3Li5hZGQ2OThjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9pcnEuYwpAQCAtMjgsMTggKzI4LDE4IEBACiB2b2lkIF9faW5pdCBpbml0X3NoNzc2M3JkcF9JUlEodm9pZCkKIHsKIAkvKiBHUElPIGVuYWJsZWQgKi8KLQljdHJsX291dGwoMSA8PCAyNSwgSU5UQ19JTlQyTVNLQ1IpOworCV9fcmF3X3dyaXRlbCgxIDw8IDI1LCBJTlRDX0lOVDJNU0tDUik7CiAKIAkvKiBlbmFibGUgR1BJTyBpbnRlcnJ1cHRzICovCi0JY3RybF9vdXRsKChjdHJsX2lubChJTlRDX0lOVDJQUkk3KSAmIDB4RkYwMEZGRkYpIHwgMHgwMDBGMDAwMCwKKwlfX3Jhd193cml0ZWwoKF9fcmF3X3JlYWRsKElOVENfSU5UMlBSSTcpICYgMHhGRjAwRkZGRikgfCAweDAwMEYwMDAwLAogCQkgIElOVENfSU5UMlBSSTcpOwogCiAJLyogVVNCSCBlbmFibGVkICovCi0JY3RybF9vdXRsKDEgPDwgMTcsIElOVENfSU5UMk1TS0NSMSk7CisJX19yYXdfd3JpdGVsKDEgPDwgMTcsIElOVENfSU5UMk1TS0NSMSk7CiAKIAkvKiBHRVRIRVIgZW5hYmxlZCAqLwotCWN0cmxfb3V0bCgxIDw8IDE2LCBJTlRDX0lOVDJNU0tDUjEpOworCV9fcmF3X3dyaXRlbCgxIDw8IDE2LCBJTlRDX0lOVDJNU0tDUjEpOwogCiAJLyogRE1BQyBlbmFibGVkICovCi0JY3RybF9vdXRsKDEgPDwgOCwgSU5UQ19JTlQyTVNLQ1IpOworCV9fcmF3X3dyaXRlbCgxIDw8IDgsIElOVENfSU5UMk1TS0NSKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNoNzc2M3JkcC9zZXR1cC5jCmluZGV4IDM5MDUzNGEuLmY2NGE2OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2g3NzYzcmRwL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zaDc3NjNyZHAvc2V0dXAuYwpAQCAtMTU4LDUwICsxNTgsNTAgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBzaDc3NjNyZHBfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKIAkvKiBCb2FyZCB2ZXJzaW9uIGNoZWNrICovCi0JaWYgKGN0cmxfaW53KENQTERfQk9BUkRfSURfRVJWX1JFRykgPT0gMHhFQ0IxKQorCWlmIChfX3Jhd19yZWFkdyhDUExEX0JPQVJEX0lEX0VSVl9SRUcpID09IDB4RUNCMSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUlRFIFN0YW5kYXJkIENvbmZpZ3VyYXRpb25cbiIpOwogCWVsc2UKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUlRBIFN0YW5kYXJkIENvbmZpZ3VyYXRpb25cbiIpOwogCiAJLyogVVNCIHBpbiBzZWxlY3QgYml0cyAoY2xlYXIgYml0IDUtMiB0byAwKSAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QU0VMMikgJiAweEZGQzMpLCBQT1JUX1BTRUwyKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfUFNFTDIpICYgMHhGRkMzKSwgUE9SVF9QU0VMMik7CiAJLyogVVNCSCBzZXR1cCBwb3J0IEkgY29udHJvbHMgdG8gb3RoZXIgKGNsZWFyIGJpdHMgNC05IHRvIDApICovCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUElDUikgJiAweEZDMEYsIFBPUlRfUElDUik7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBPUlRfUElDUikgJiAweEZDMEYsIFBPUlRfUElDUik7CiAKIAkvKiBTZWxlY3QgVVNCIEhvc3QgY29udHJvbGxlciAqLwotCWN0cmxfb3V0dygweDAwLCBVU0JfVVNCSFNDKTsKKwlfX3Jhd193cml0ZXcoMHgwMCwgVVNCX1VTQkhTQyk7CiAKIAkvKiBGb3IgTENEICovCiAJLyogc2V0IFBUSjctMSwgYml0cyAxNS0yIG9mIFBKQ1IgdG8gMCAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BKQ1IpICYgMHgwMDAzLCBQT1JUX1BKQ1IpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX1BKQ1IpICYgMHgwMDAzLCBQT1JUX1BKQ1IpOwogCS8qIHNldCBQVEk1LCBiaXRzIDExLTEwIG9mIFBJQ1IgdG8gMCAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BJQ1IpICYgMHhGM0ZGLCBQT1JUX1BJQ1IpOwotCWN0cmxfb3V0dygwLCBQT1JUX1BLQ1IpOwotCWN0cmxfb3V0dygwLCBQT1JUX1BMQ1IpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX1BJQ1IpICYgMHhGM0ZGLCBQT1JUX1BJQ1IpOworCV9fcmF3X3dyaXRldygwLCBQT1JUX1BLQ1IpOworCV9fcmF3X3dyaXRldygwLCBQT1JUX1BMQ1IpOwogCS8qIHNldCBQU0VMMiBiaXRzIDE0LTgsIDUtNCwgb2YgUFNFTDIgdG8gMCAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QU0VMMikgJiAweDAwQzApLCBQT1JUX1BTRUwyKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfUFNFTDIpICYgMHgwMEMwKSwgUE9SVF9QU0VMMik7CiAJLyogc2V0IFBTRUwzIGJpdHMgMTQtMTIsIDYtNCwgMi0wIG9mIFBTRUwzIHRvIDAgKi8KLQljdHJsX291dHcoKGN0cmxfaW53KFBPUlRfUFNFTDMpICYgMHgwNzAwKSwgUE9SVF9QU0VMMyk7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhQT1JUX1BTRUwzKSAmIDB4MDcwMCksIFBPUlRfUFNFTDMpOwogCiAJLyogRm9yIEhBQyAqLwogCS8qIGJpdDMtMCAgMDEwMDpIQUMgJiBTU0kxIGVuYWJsZSAqLwotCWN0cmxfb3V0dygoY3RybF9pbncoUE9SVF9QU0VMMSkgJiAweEZGRjApIHwgMHgwMDA0LCBQT1JUX1BTRUwxKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfUFNFTDEpICYgMHhGRkYwKSB8IDB4MDAwNCwgUE9SVF9QU0VMMSk7CiAJLyogYml0MTQgICAgICAxOlNTSV9IQUNfQ0xLIGVuYWJsZSAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BTRUw0KSB8IDB4NDAwMCwgUE9SVF9QU0VMNCk7CisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFBPUlRfUFNFTDQpIHwgMHg0MDAwLCBQT1JUX1BTRUw0KTsKIAogCS8qIFNILUV0aGVyICovCi0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX1BTRUwxKSAmIH4weGZmMDApIHwgMHgyNDAwLCBQT1JUX1BTRUwxKTsKLQljdHJsX291dHcoMHgwLCBQT1JUX1BGQ1IpOwotCWN0cmxfb3V0dygweDAsIFBPUlRfUEZDUik7Ci0JY3RybF9vdXR3KDB4MCwgUE9SVF9QRkNSKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KFBPUlRfUFNFTDEpICYgfjB4ZmYwMCkgfCAweDI0MDAsIFBPUlRfUFNFTDEpOworCV9fcmF3X3dyaXRldygweDAsIFBPUlRfUEZDUik7CisJX19yYXdfd3JpdGV3KDB4MCwgUE9SVF9QRkNSKTsKKwlfX3Jhd193cml0ZXcoMHgwLCBQT1JUX1BGQ1IpOwogCiAJLyogTU1DICovCiAJLypzZWxlY3RzIFNDSUYgYW5kIE1NQyBvdGhlciBmdW5jdGlvbnMgKi8KLQljdHJsX291dHcoMHgwMDAxLCBQT1JUX1BTRUwwKTsKKwlfX3Jhd193cml0ZXcoMHgwMDAxLCBQT1JUX1BTRUwwKTsKIAkvKiBNTUMgY2xvY2sgb3BlcmF0ZXMgKi8KLQljdHJsX291dGwoY3RybF9pbmwoTVNUUENSMSkgJiB+MHg4LCBNU1RQQ1IxKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QQUNSKSAmIH4weDMwMDAsIFBPUlRfUEFDUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUENDUikgJiB+MHhDRkMzLCBQT1JUX1BDQ1IpOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChNU1RQQ1IxKSAmIH4weDgsIE1TVFBDUjEpOworCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQT1JUX1BBQ1IpICYgfjB4MzAwMCwgUE9SVF9QQUNSKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUE9SVF9QQ0NSKSAmIH4weENGQzMsIFBPUlRfUENDUik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfc2g3NzYzcmRwIF9faW5pdG12ID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zbmFwZ2Vhci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zbmFwZ2Vhci9zZXR1cC5jCmluZGV4IGEzMjc3YTIuLjMzMTc0NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc25hcGdlYXIvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXNuYXBnZWFyL3NldHVwLmMKQEAgLTMwLDcgKzMwLDcgQEAKIAogc3RhdGljIGlycXJldHVybl90IGVyYXNlY29uZmlnX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0JKHZvaWQpY3RybF9pbmIoMHhiODAwMDAwMCk7CS8qIGR1bW15IHJlYWQgKi8KKwkodm9pZClfX3Jhd19yZWFkYigweGI4MDAwMDAwKTsJLyogZHVtbXkgcmVhZCAqLwogCiAJcHJpbnRrKCJTbmFwR2VhcjogZXJhc2Ugc3dpdGNoIGludGVycnVwdCFcbiIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXN5c3RlbWgvaXJxLmMKaW5kZXggOTg2YTBlNy4uNTIzYWVhNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zeXN0ZW1oL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc3lzdGVtaC9pcnEuYwpAQCAtNDEsMTMgKzQxLDEzIEBACiAJCXVuc2lnbmVkIGxvbmcgdmFsLCBtYXNrID0gMHgwMSA8PCAxOwogCiAJCS8qIENsZWFyIHRoZSAiaXJxInRoIGJpdCBpbiB0aGUgbWFzayBhbmQgc2V0IGl0IGluIHRoZSByZXF1ZXN0ICovCi0JCXZhbCA9IGN0cmxfaW5sKCh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX21hc2tfcmVnaXN0ZXIpOworCQl2YWwgPSBfX3Jhd19yZWFkbCgodW5zaWduZWQgbG9uZylzeXN0ZW1oX2lycV9tYXNrX3JlZ2lzdGVyKTsKIAkJdmFsICY9IH5tYXNrOwotCQljdHJsX291dGwodmFsLCAodW5zaWduZWQgbG9uZylzeXN0ZW1oX2lycV9tYXNrX3JlZ2lzdGVyKTsKKwkJX19yYXdfd3JpdGVsKHZhbCwgKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfbWFza19yZWdpc3Rlcik7CiAKLQkJdmFsID0gY3RybF9pbmwoKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfcmVxdWVzdF9yZWdpc3Rlcik7CisJCXZhbCA9IF9fcmF3X3JlYWRsKCh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX3JlcXVlc3RfcmVnaXN0ZXIpOwogCQl2YWwgfD0gbWFzazsKLQkJY3RybF9vdXRsKHZhbCwgKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfcmVxdWVzdF9yZWdpc3Rlcik7CisJCV9fcmF3X3dyaXRlbCh2YWwsICh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX3JlcXVlc3RfcmVnaXN0ZXIpOwogCX0KIH0KIApAQCAtNTcsOSArNTcsOSBAQAogCQl1bnNpZ25lZCBsb25nIHZhbCwgbWFzayA9IDB4MDEgPDwgMTsKIAogCQkvKiBTZXQgImlycSJ0aCBiaXQgaW4gdGhlIG1hc2sgcmVnaXN0ZXIgKi8KLQkJdmFsID0gY3RybF9pbmwoKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfbWFza19yZWdpc3Rlcik7CisJCXZhbCA9IF9fcmF3X3JlYWRsKCh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX21hc2tfcmVnaXN0ZXIpOwogCQl2YWwgfD0gbWFzazsKLQkJY3RybF9vdXRsKHZhbCwgKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfbWFza19yZWdpc3Rlcik7CisJCV9fcmF3X3dyaXRlbCh2YWwsICh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX21hc2tfcmVnaXN0ZXIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZDc1MzcuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgdGhlIE5pbWJsZSBNaWNyb3N5c3RlbXMgVElUQU4gc3BlY2lmaWMgcGFydHMgb2YgdGhlIGtlcm5lbAotIwotCi1vYmoteQkgOj0gc2V0dXAubyBpby5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL2lvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxMzBlOTguLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9pby5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKglJL08gcm91dGluZXMgZm9yIFRpdGFuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxtYWNoL3RpdGFuLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHBvcnQyYWRyKHVuc2lnbmVkIGludCBwb3J0KQotewotICAgICAgICBtYXliZWJhZGlvKCh1bnNpZ25lZCBsb25nKXBvcnQpOwotICAgICAgICByZXR1cm4gcG9ydDsKLX0KLQotdTggdGl0YW5faW5iKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIHJldHVybiBjdHJsX2luYihwb3J0KTsKLSAgICAgICAgcmV0dXJuIGN0cmxfaW53KHBvcnQyYWRyKHBvcnQpKSAmIDB4ZmY7Ci19Ci0KLXU4IHRpdGFuX2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgdTggdjsKLQotICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgdiA9IGN0cmxfaW5iKHBvcnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdiA9IGN0cmxfaW53KHBvcnQyYWRyKHBvcnQpKSAmIDB4ZmY7Ci0gICAgICAgIGN0cmxfZGVsYXkoKTsKLSAgICAgICAgcmV0dXJuIHY7Ci19Ci0KLXUxNiB0aXRhbl9pbncodW5zaWduZWQgbG9uZyBwb3J0KQotewotICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW53KHBvcnQpOwotICAgICAgICBlbHNlIGlmIChwb3J0ID49IDB4MjAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3RybF9pbncocG9ydDJhZHIocG9ydCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWF5YmViYWRpbyhwb3J0KTsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLXUzMiB0aXRhbl9pbmwodW5zaWduZWQgbG9uZyBwb3J0KQotewotICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5sKHBvcnQpOwotICAgICAgICBlbHNlIGlmIChwb3J0ID49IDB4MjAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3RybF9pbncocG9ydDJhZHIocG9ydCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWF5YmViYWRpbyhwb3J0KTsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgdGl0YW5fb3V0Yih1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgY3RybF9vdXRiKHZhbHVlLCBwb3J0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGN0cmxfb3V0dyh2YWx1ZSwgcG9ydDJhZHIocG9ydCkpOwotfQotCi12b2lkIHRpdGFuX291dGJfcCh1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgY3RybF9vdXRiKHZhbHVlLCBwb3J0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGN0cmxfb3V0dyh2YWx1ZSwgcG9ydDJhZHIocG9ydCkpOwotICAgICAgICBjdHJsX2RlbGF5KCk7Ci19Ci0KLXZvaWQgdGl0YW5fb3V0dyh1MTYgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLSAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIGN0cmxfb3V0dyh2YWx1ZSwgcG9ydCk7Ci0gICAgICAgIGVsc2UgaWYgKHBvcnQgPj0gMHgyMDAwKQotICAgICAgICAgICAgICAgIGN0cmxfb3V0dyh2YWx1ZSwgcG9ydDJhZHIocG9ydCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWF5YmViYWRpbyhwb3J0KTsKLX0KLQotdm9pZCB0aXRhbl9vdXRsKHUzMiB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgY3RybF9vdXRsKHZhbHVlLCBwb3J0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1heWJlYmFkaW8ocG9ydCk7Ci19Ci0KLXZvaWQgdGl0YW5faW5zbCh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLSAgICAgICAgbWF5YmViYWRpbyhwb3J0KTsKLX0KLQotdm9pZCB0aXRhbl9vdXRzbCh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLSAgICAgICAgbWF5YmViYWRpbyhwb3J0KTsKLX0KLQotdm9pZCBfX2lvbWVtICp0aXRhbl9pb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JaWYgKFBYU0VHKHBvcnQpKQotCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBvcnQ7Ci0KLQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBvcnQyYWRyKHBvcnQpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9zZXR1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWU3ZTBmLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vc2V0dXAuYworKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBhcmNoL3NoL2JvYXJkcy90aXRhbi9zZXR1cC5jIC0gU2V0dXAgZm9yIFRpdGFuCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNiAgSmFtaWUgTGVuZWhhbgotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPG1hY2gvdGl0YW4uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotc3RhdGljIHZvaWQgX19pbml0IGluaXRfdGl0YW5faXJxKHZvaWQpCi17Ci0JLyogZW5hYmxlIGluZGl2aWR1YWwgaW50ZXJydXB0IG1vZGUgZm9yIGV4dGVybmFscyAqLwotCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJRKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl90aXRhbiBfX2luaXRtdiA9IHsKLQkubXZfbmFtZSA9CSJUaXRhbiIsCi0KLQkubXZfaW5iID0JdGl0YW5faW5iLAotCS5tdl9pbncgPQl0aXRhbl9pbncsCi0JLm12X2lubCA9CXRpdGFuX2lubCwKLQkubXZfb3V0YiA9CXRpdGFuX291dGIsCi0JLm12X291dHcgPQl0aXRhbl9vdXR3LAotCS5tdl9vdXRsID0JdGl0YW5fb3V0bCwKLQotCS5tdl9pbmJfcCA9CXRpdGFuX2luYl9wLAotCS5tdl9pbndfcCA9CXRpdGFuX2ludywKLQkubXZfaW5sX3AgPQl0aXRhbl9pbmwsCi0JLm12X291dGJfcCA9CXRpdGFuX291dGJfcCwKLQkubXZfb3V0d19wID0JdGl0YW5fb3V0dywKLQkubXZfb3V0bF9wID0JdGl0YW5fb3V0bCwKLQotCS5tdl9pbnNsID0JdGl0YW5faW5zbCwKLQkubXZfb3V0c2wgPQl0aXRhbl9vdXRzbCwKLQotCS5tdl9pb3BvcnRfbWFwID0gdGl0YW5faW9wb3J0X21hcCwKLQotCS5tdl9pbml0X2lycSA9CWluaXRfdGl0YW5faXJxLAotfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gteDNwcm90by9pbHNlbC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC14M3Byb3RvL2lsc2VsLmMKaW5kZXggYjVjNjczYy4uNWM5ODQyNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC14M3Byb3RvL2lsc2VsLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC14M3Byb3RvL2lsc2VsLmMKQEAgLTcwLDEwICs3MCwxMCBAQAogCXByX2RlYnVnKCIlczogYml0IyVkOiBhZGRyIC0gMHglMDhseCAoc2hpZnQgJWQsIHNldCAlZClcbiIsCiAJCSBfX2Z1bmNfXywgYml0LCBhZGRyLCBzaGlmdCwgc2V0KTsKIAotCXRtcCA9IGN0cmxfaW53KGFkZHIpOworCXRtcCA9IF9fcmF3X3JlYWR3KGFkZHIpOwogCXRtcCAmPSB+KDB4ZiA8PCBzaGlmdCk7CiAJdG1wIHw9IHNldCA8PCBzaGlmdDsKLQljdHJsX291dHcodG1wLCBhZGRyKTsKKwlfX3Jhd193cml0ZXcodG1wLCBhZGRyKTsKIH0KIAogLyoqCkBAIC0xNDIsOSArMTQyLDkgQEAKIAogCWFkZHIgPSBta19pbHNlbF9hZGRyKGlycSk7CiAKLQl0bXAgPSBjdHJsX2ludyhhZGRyKTsKKwl0bXAgPSBfX3Jhd19yZWFkdyhhZGRyKTsKIAl0bXAgJj0gfigweGYgPDwgbWtfaWxzZWxfc2hpZnQoaXJxKSk7Ci0JY3RybF9vdXR3KHRtcCwgYWRkcik7CisJX19yYXdfd3JpdGV3KHRtcCwgYWRkcik7CiAKIAljbGVhcl9iaXQoaXJxLCAmaWxzZWxfbGV2ZWxfbWFwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gteDNwcm90by9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC14M3Byb3RvL3NldHVwLmMKaW5kZXggZWZlNGNiOS4uZTI4NDU5MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC14M3Byb3RvL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC14M3Byb3RvL3NldHVwLmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJMMzIxMCk7CiAKIAkvKiBTZXQgSUNSMC5MVkxNT0RFICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKDB4ZmU0MTAwMDApIHwgKDEgPDwgMjEpLCAweGZlNDEwMDAwKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoMHhmZTQxMDAwMCkgfCAoMSA8PCAyMSksIDB4ZmU0MTAwMDApOwogfQogCiBzdGF0aWMgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3gzcHJvdG8gX19pbml0bXYgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKaW5kZXggY2I4Y2Y1NS4uMWNlNjM2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQpAQCAtMjEsMTIgKzIxLDE1IEBACiBDT05GSUdfRU5UUllfT0ZGU0VUCT89IDB4MDAwMDEwMDAKIAogc3VmZml4LXkgOj0gYmluCi1zdWZmaXgtJChDT05GSUdfS0VSTkVMX0daSVApICA6PSBnegotc3VmZml4LSQoQ09ORklHX0tFUk5FTF9CWklQMikgOj0gYnoyCi1zdWZmaXgtJChDT05GSUdfS0VSTkVMX0xaTUEpICA6PSBsem1hCitzdWZmaXgtJChDT05GSUdfS0VSTkVMX0daSVApCTo9IGd6CitzdWZmaXgtJChDT05GSUdfS0VSTkVMX0JaSVAyKQk6PSBiejIKK3N1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpNQSkJOj0gbHptYQorc3VmZml4LSQoQ09ORklHX0tFUk5FTF9MWk8pCTo9IGx6bwogCi10YXJnZXRzIDo9IHpJbWFnZSB2bWxpbnV4LnNyZWMgcm9tSW1hZ2UgdUltYWdlIHVJbWFnZS5zcmVjIHVJbWFnZS5neiB1SW1hZ2UuYnoyIHVJbWFnZS5sem1hIHVJbWFnZS5iaW4KLWV4dHJhLXkgKz0gdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIHZtbGludXguYmluLmx6bWEKK3RhcmdldHMgOj0gekltYWdlIHZtbGludXguc3JlYyByb21JbWFnZSB1SW1hZ2UgdUltYWdlLnNyZWMgdUltYWdlLmd6IFwKKwkgICB1SW1hZ2UuYnoyIHVJbWFnZS5sem1hIHVJbWFnZS5sem8gdUltYWdlLmJpbgorZXh0cmEteSArPSB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiB2bWxpbnV4LmJpbi5iejIgdm1saW51eC5iaW4ubHptYSBcCisJICAgdm1saW51eC5iaW4ubHpvCiBzdWJkaXItIDo9IGNvbXByZXNzZWQgcm9taW1hZ2UKIAogJChvYmopL3pJbWFnZTogJChvYmopL2NvbXByZXNzZWQvdm1saW51eCBGT1JDRQpAQCAtNDMsMTUgKzQ2LDggQEAKICQob2JqKS9yb21pbWFnZS92bWxpbnV4OiAkKG9iaikvekltYWdlIEZPUkNFCiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChvYmopL3JvbWltYWdlICRACiAKLUtFUk5FTF9NRU1PUlkgOj0gMHgwMDAwMDAwMAotaWZlcSAoJChDT05GSUdfUE1CX0ZJWEVEKSx5KQotS0VSTkVMX01FTU9SWSA6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKK0tFUk5FTF9NRU1PUlkJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCiAJCSAgICAgJCRbJChDT05GSUdfTUVNT1JZX1NUQVJUKSAmIDB4MWZmZmZmZmZdJykKLWVuZGlmCi1pZmVxICgkKENPTkZJR18yOUJJVCkseSkKLUtFUk5FTF9NRU1PUlkgOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCi0JCSAgICAgJCRbJChDT05GSUdfTUVNT1JZX1NUQVJUKV0nKQotZW5kaWYKIAogS0VSTkVMX0xPQUQJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCiAJCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKQEAgLTgwLDYgKzc2LDkgQEAKICQob2JqKS92bWxpbnV4LmJpbi5sem1hOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsem1hKQogCiskKG9iaikvdm1saW51eC5iaW4ubHpvOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxsem8pCisKICQob2JqKS91SW1hZ2UuYnoyOiAkKG9iaikvdm1saW51eC5iaW4uYnoyCiAJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLGJ6aXAyKQogCkBAIC04OSw2ICs4OCw5IEBACiAkKG9iaikvdUltYWdlLmx6bWE6ICQob2JqKS92bWxpbnV4LmJpbi5sem1hCiAJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLGx6bWEpCiAKKyQob2JqKS91SW1hZ2UubHpvOiAkKG9iaikvdm1saW51eC5iaW4ubHpvCisJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLGx6bykKKwogJChvYmopL3VJbWFnZS5iaW46ICQob2JqKS92bWxpbnV4LmJpbgogCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxub25lKQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDYxODJlY2EuLjVkNjYwYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC02LDE0ICs2LDExIEBACiAKIHRhcmdldHMJCTo9IHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogXAogCQkgICB2bWxpbnV4LmJpbi5iejIgdm1saW51eC5iaW4ubHptYSBcCisJCSAgIHZtbGludXguYmluLmx6byBcCiAJCSAgIGhlYWRfJChCSVRTKS5vIG1pc2MubyBwaWdneS5vCiAKIE9CSkVDVFMgPSAkKG9iaikvaGVhZF8kKEJJVFMpLm8gJChvYmopL21pc2MubyAkKG9iaikvY2FjaGUubwogCi1pZmRlZiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUwotT0JKRUNUUyArPSAkKG9iaikvLi4vLi4va2VybmVsL3NoX2Jpb3MubwotZW5kaWYKLQogIwogIyBJTUFHRV9PRkZTRVQgaXMgdGhlIGxvYWQgb2Zmc2V0IG9mIHRoZSBjb21wcmVzc2lvbiBsb2FkZXIKICMKQEAgLTQ3LDYgKzQ0LDggQEAKIAkkKGNhbGwgaWZfY2hhbmdlZCxiemlwMikKICQob2JqKS92bWxpbnV4LmJpbi5sem1hOiAkKHZtbGludXguYmluLmFsbC15KSBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bWEpCiskKG9iaikvdm1saW51eC5iaW4ubHpvOiAkKHZtbGludXguYmluLmFsbC15KSBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bykKIAogT0JKQ09QWUZMQUdTICs9IC1SIC5lbXB0eV96ZXJvX3BhZ2UKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzYy5jCmluZGV4IGI1MWIxZmMuLjI3MTQwYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9zaF9iaW9zLmg+CiAKIC8qCiAgKiBnemlwIGRlY2xhcmF0aW9ucwpAQCAtNjIsMjkgKzYxLDE1IEBACiAjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfdW5sem1hLmMiCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19TSF9TVEFOREFSRF9CSU9TCi1zaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKnMpCi17Ci0JaW50IGkgPSAwOworI2lmZGVmIENPTkZJR19LRVJORUxfTFpPCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfdW5sem8uYyIKKyNlbmRpZgogCi0Jd2hpbGUgKCpzKyspCi0JCWkrKzsKLQlyZXR1cm4gaTsKLX0KLQotaW50IHB1dHMoY29uc3QgY2hhciAqcykKLXsKLQlpbnQgbGVuID0gc3RybGVuKHMpOwotCXNoX2Jpb3NfY29uc29sZV93cml0ZShzLCBsZW4pOwotCXJldHVybiBsZW47Ci19Ci0jZWxzZQogaW50IHB1dHMoY29uc3QgY2hhciAqcykKIHsKIAkvKiBUaGlzIHNob3VsZCBiZSB1cGRhdGVkIHRvIHVzZSB0aGUgc2gtc2NpIHJvdXRpbmVzICovCiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYKIAogdm9pZCogbWVtc2V0KHZvaWQqIHMsIGludCBjLCBzaXplX3QgbikKIHsKQEAgLTEzMiw3ICsxMTcsNyBAQAogCW91dHB1dF9hZGRyID0gKENPTkZJR19NRU1PUllfU1RBUlQgKyAweDIwMDApOwogI2Vsc2UKIAlvdXRwdXRfYWRkciA9IF9fcGEoKHVuc2lnbmVkIGxvbmcpJl90ZXh0K1BBR0VfU0laRSk7Ci0jaWZkZWYgQ09ORklHXzI5QklUCisjaWYgZGVmaW5lZChDT05GSUdfMjlCSVQpCiAJb3V0cHV0X2FkZHIgfD0gUDJTRUc7CiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxLmMgYi9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjEuYwppbmRleCA1MGFhMGMxLi5iY2IzMWFlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjEuYworKysgYi9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjEuYwpAQCAtNTUsMjUgKzU1LDIyIEBACiAKIHN0YXRpYyB2b2lkIGhkNjQ0NjFfaXJxX2RlbXV4KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQl1bnNpZ25lZCBzaG9ydCBpbnR2ID0gY3RybF9pbncoSEQ2NDQ2MV9OSVJSKTsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmV4dF9kZXNjOworCXVuc2lnbmVkIHNob3J0IGludHYgPSBfX3Jhd19yZWFkdyhIRDY0NDYxX05JUlIpOwogCXVuc2lnbmVkIGludCBleHRfaXJxID0gSEQ2NDQ2MV9JUlFCQVNFOwogCiAJaW50diAmPSAoMSA8PCBIRDY0NDYxX0lSUV9OVU0pIC0gMTsKIAotCXdoaWxlIChpbnR2KSB7Ci0JCWlmIChpbnR2ICYgMSkgewotCQkJZXh0X2Rlc2MgPSBpcnFfZGVzYyArIGV4dF9pcnE7Ci0JCQloYW5kbGVfbGV2ZWxfaXJxKGV4dF9pcnEsIGV4dF9kZXNjKTsKLQkJfQotCQlpbnR2ID4+PSAxOwotCQlleHRfaXJxKys7CisJZm9yICg7IGludHY7IGludHYgPj49IDEsIGV4dF9pcnErKykgeworCQlpZiAoIShpbnR2ICYgMSkpCisJCQljb250aW51ZTsKKworCQlnZW5lcmljX2hhbmRsZV9pcnEoZXh0X2lycSk7CiAJfQogfQogCiBpbnQgX19pbml0IHNldHVwX2hkNjQ0NjEodm9pZCkKIHsKLQlpbnQgaTsKKwlpbnQgaSwgbmlkID0gY3B1X3RvX25vZGUoYm9vdF9jcHVfZGF0YSk7CiAKIAlpZiAoIU1BQ0hfSEQ2NDQ2MSkKIAkJcmV0dXJuIDA7CkBAIC05MCw5ICs4NywyNiBAQAogCV9fcmF3X3dyaXRldygweGZmZmYsIEhENjQ0NjFfTklNUik7CiAKIAkvKiAgSVJRIDgwIC0+IDk1IGJlbG9uZ3MgdG8gSEQ2NDQ2MSAgKi8KLQlmb3IgKGkgPSBIRDY0NDYxX0lSUUJBU0U7IGkgPCBIRDY0NDYxX0lSUUJBU0UgKyAxNjsgaSsrKQorCWZvciAoaSA9IEhENjQ0NjFfSVJRQkFTRTsgaSA8IEhENjQ0NjFfSVJRQkFTRSArIDE2OyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGlycTsKKworCQlpcnEgPSBjcmVhdGVfaXJxX25yKGksIG5pZCk7CisJCWlmICh1bmxpa2VseShpcnEgPT0gMCkpIHsKKwkJCXByX2VycigiJXM6IGZhaWxlZCBob29raW5nIGlycSAlZCBmb3IgSEQ2NDQ2MVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgaSk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisKKwkJaWYgKHVubGlrZWx5KGlycSAhPSBpKSkgeworCQkJcHJfZXJyKCIlczogZ290IGlycSAlZCBidXQgd2FudGVkICVkLCBiYWlsaW5nLlxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgaXJxLCBpKTsKKwkJCWRlc3Ryb3lfaXJxKGlycSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmaGQ2NDQ2MV9pcnFfY2hpcCwKIAkJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOworCX0KIAogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKENPTkZJR19IRDY0NDYxX0lSUSwgaGQ2NDQ2MV9pcnFfZGVtdXgpOwogCXNldF9pcnFfdHlwZShDT05GSUdfSEQ2NDQ2MV9JUlEsIElSUV9UWVBFX0xFVkVMX0xPVyk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4Nl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4Nl9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIzMzFlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZGs3Nzg2X2RlZmNvbmZpZwpAQCAtMCwwICsxLDE3NTQgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzcKKyMgVHVlIEZlYiAgOSAxNToyNzowNiAyMDEwCisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19TVVBFUkgzMj15CisjIENPTkZJR19TVVBFUkg2NCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyIKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfU01QPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CitDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CitDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CitDT05GSUdfRE1BX0NPSEVSRU5UPXkKKyMgQ09ORklHX0RNQV9OT05DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorQ09ORklHX1JDVV9UUkFDRT15CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1VfVFJBQ0U9eQorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorQ09ORklHX1JUX0dST1VQX1NDSEVEPXkKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0dST1VQUz15CisjIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NHUk9VUF9OUz15CitDT05GSUdfQ0dST1VQX0ZSRUVaRVI9eQorQ09ORklHX0NHUk9VUF9ERVZJQ0U9eQorIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CitDT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eQorQ09ORklHX1JFU09VUkNFX0NPVU5URVJTPXkKK0NPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSPXkKKyMgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFJfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTU1fT1dORVI9eQorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CitDT05GSUdfVVRTX05TPXkKK0NPTkZJR19JUENfTlM9eQorQ09ORklHX1VTRVJfTlM9eQorQ09ORklHX1BJRF9OUz15CitDT05GSUdfTkVUX05TPXkKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CitDT05GSUdfUEVSRl9VU0VfVk1BTExPQz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BFUkZfVVNFX1ZNQUxMT0MgaXMgbm90IHNldAorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX1RSQUNFUE9JTlRTPXkKKyMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CitDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfQ0dST1VQPXkKKyMgQ09ORklHX0RFQlVHX0JMS19DR1JPVVAgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19DRlFfR1JPVVBfSU9TQ0hFRD15CisjIENPTkZJR19ERUJVR19DRlFfSU9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKKworIworIyBTeXN0ZW0gdHlwZQorIworQ09ORklHX0NQVV9TSDQ9eQorQ09ORklHX0NQVV9TSDRBPXkKK0NPTkZJR19DUFVfU0hYMz15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4Nj15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUVVJQ0tMSVNUPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4NjAwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDIwMDAwMDAwCisjIENPTkZJR18yOUJJVCBpcyBub3Qgc2V0CitDT05GSUdfMzJCSVQ9eQorQ09ORklHX1BNQj15CisjIENPTkZJR19QTUJfTEVHQUNZIGlzIG5vdCBzZXQKK0NPTkZJR19YMlRMQj15CitDT05GSUdfVlNZU0NBTEw9eQorIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX01FTU9SWV9QUk9CRT15CitDT05GSUdfSU9SRU1BUF9GSVhFRD15CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0SyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV8yNTZLIGlzIG5vdCBzZXQKK0NPTkZJR19IVUdFVExCX1BBR0VfU0laRV8xTUI9eQorIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNE1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0TUIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNTEyTUIgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CitDT05GSUdfU1BBUlNFTUVNPXkKK0NPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKK0NPTkZJR19NRU1PUllfSE9UUExVRz15CitDT05GSUdfTUVNT1JZX0hPVFBMVUdfU1BBUlNFPXkKK0NPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19OUl9RVUlDSz0xCitDT05GSUdfS1NNPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorCisjCisjIENhY2hlIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19DQUNIRV9XUklURUJBQ0s9eQorIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1NIX0ZQVT15CitDT05GSUdfU0hfU1RPUkVfUVVFVUVTPXkKK0NPTkZJR19DUFVfSEFTX0lOVEVWVD15CitDT05GSUdfQ1BVX0hBU19TUl9SQj15CitDT05GSUdfQ1BVX0hBU19QVEVBRVg9eQorQ09ORklHX0NQVV9IQVNfRlBVPXkKKworIworIyBCb2FyZCBzdXBwb3J0CisjCitDT05GSUdfU0hfU0RLNzc4Nj15CisjIENPTkZJR19TSF9VUlFVRUxMIGlzIG5vdCBzZXQKKworIworIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgorIworQ09ORklHX1NIX1RJTUVSX1RNVT15CitDT05GSUdfU0hfQ0xLX0NQRz15CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKK0NPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFPW0KK0NPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPW0KK0NPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9bQorQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkU9bQorQ09ORklHX1NIX0NQVV9GUkVRPXkKKworIworIyBETUEgc3VwcG9ydAorIworIyBDT05GSUdfU0hfRE1BIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gQ2hpcHMKKyMKKworIworIyBBZGRpdGlvbmFsIFN1cGVySCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0hFQVJUQkVBVD15CisjIENPTkZJR19QVVNIX1NXSVRDSCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGZlYXR1cmVzCisjCisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19LRVhFQz15CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0dVU0E9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAorQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDExNTIwMCBlYXJseXByaW50az1zaC1zY2kuMSwxMTUyMDAgcm9vdD0vZGV2L3NkYTEgbm1pX2RlYnVnPXN0YXRlLGRlYm91bmNlIHJvb3RkZWxheT0xMCIKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSUVQT1JUQlVTPXkKK0NPTkZJR19QQ0lFQUVSPXkKKyMgQ09ORklHX1BDSUVfRUNSQyBpcyBub3Qgc2V0CitDT05GSUdfUENJRUFFUl9JTkpFQ1Q9eQorQ09ORklHX1BDSUVBU1BNPXkKK0NPTkZJR19QQ0lFQVNQTV9ERUJVRz15CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfREVCVUc9eQorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPXkKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKKyMKK0NPTkZJR19QTT15CitDT05GSUdfUE1fREVCVUc9eQorQ09ORklHX1BNX1ZFUkJPU0U9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQorQ09ORklHX0NQVV9JRExFPXkKK0NPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKK0NPTkZJR19DUFVfSURMRV9HT1ZfTUVOVT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT15CisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQorQ09ORklHX1NBVEFfUE1QPXkKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9TSUwyND15CitDT05GSUdfQVRBX1NGRj15CisjIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorQ09ORklHX1BBVEFfUExBVEZPUk09eQorIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19NRElPX0JJVEJBTkc9eQorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorQ09ORklHX1NNU0M5MTFYPXkKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fSTgwNDI9eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfU0hfU0NJPXkKK0NPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTYKK0NPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSF9NT0JJTEUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1NIX01TSU9GIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TSF9TQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAorIyBDT05GSUdfU0hfV0RUIGlzIG5vdCBzZXQKKworIworIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfVkdBX0FSQj15CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QQU5USEVSTE9SRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKKworIworIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbworIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX002NjU5Mj15CitDT05GSUdfVVNCX002NjU5Mj15CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01BU1NfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfTVVMVEkgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CisjIENPTkZJR19VV0IgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9NQVg2OTAwPXkKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX1NIPXkKKyMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorQ09ORklHX1VJTz1tCisjIENPTkZJR19VSU9fQ0lGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19QRFJWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19QRFJWX0dFTklSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fU01YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19BRUMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPX1NFUkNPUzMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPX1BDSV9HRU5FUklDIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0hVR0VUTEJGUz15CitDT05GSUdfSFVHRVRMQl9QQUdFPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19ERUJVR19TSElSUT15CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19QUkVFTVBUPXkKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorQ09ORklHX1NUQUNLVFJBQ0U9eQorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19WTT15CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkc9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorQ09ORklHX0tTWU1fVFJBQ0VSPXkKKyMgQ09ORklHX1BST0ZJTEVfS1NZTV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKKyMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1QX0NPREU9eQorQ09ORklHX0RXQVJGX1VOV0lOREVSPXkKKyMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CitDT05GSUdfQklOQVJZX1BSSU5URj15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKK0NPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtcHZyMi5jIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtcHZyMi5jCmluZGV4IDM5MWNiZTEuLjNjZWU1OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXB2cjIuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1wdnIyLmMKQEAgLTQwLDEwICs0MCwxMCBAQAogCiBzdGF0aWMgaW50IHB2cjJfcmVxdWVzdF9kbWEoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQogewotCWlmIChjdHJsX2lubChQVlIyX0RNQV9NT0RFKSAhPSAwKQorCWlmIChfX3Jhd19yZWFkbChQVlIyX0RNQV9NT0RFKSAhPSAwKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JY3RybF9vdXRsKDAsIFBWUjJfRE1BX0xNTU9ERTApOworCV9fcmF3X3dyaXRlbCgwLCBQVlIyX0RNQV9MTU1PREUwKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjAsOSArNjAsOSBAQAogCiAJeGZlcl9jb21wbGV0ZSA9IDA7CiAKLQljdHJsX291dGwoY2hhbi0+ZGFyLCBQVlIyX0RNQV9BRERSKTsKLQljdHJsX291dGwoY2hhbi0+Y291bnQsIFBWUjJfRE1BX0NPVU5UKTsKLQljdHJsX291dGwoY2hhbi0+bW9kZSAmIERNQV9NT0RFX01BU0ssIFBWUjJfRE1BX01PREUpOworCV9fcmF3X3dyaXRlbChjaGFuLT5kYXIsIFBWUjJfRE1BX0FERFIpOworCV9fcmF3X3dyaXRlbChjaGFuLT5jb3VudCwgUFZSMl9ETUFfQ09VTlQpOworCV9fcmF3X3dyaXRlbChjaGFuLT5tb2RlICYgRE1BX01PREVfTUFTSywgUFZSMl9ETUFfTU9ERSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jCmluZGV4IDM3ZmI1YjguLjgyNzIwODcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYwpAQCAtNTIsMTEgKzUyLDE0IEBACiAgKgogICogaXRlcmF0aW9ucyB0byBjb21wbGV0ZSB0aGUgdHJhbnNmZXIuCiAgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSA9IFRTX1NISUZUOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2FsY194bWl0X3NoaWZ0KHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbikKIHsKLQl1MzIgY2hjciA9IGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKKwl1MzIgY2hjciA9IF9fcmF3X3JlYWRsKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKKwlpbnQgY250ID0gKChjaGNyICYgQ0hDUl9UU19MT1dfTUFTSykgPj4gQ0hDUl9UU19MT1dfU0hJRlQpIHwKKwkJKChjaGNyICYgQ0hDUl9UU19ISUdIX01BU0spID4+IENIQ1JfVFNfSElHSF9TSElGVCk7CiAKLQlyZXR1cm4gdHNfc2hpZnRbKGNoY3IgJiBDSENSX1RTX01BU0spPj5DSENSX1RTX1NISUZUXTsKKwlyZXR1cm4gdHNfc2hpZnRbY250XTsKIH0KIAogLyoKQEAgLTcwLDEzICs3MywxMyBAQAogCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbiA9IGRldl9pZDsKIAl1MzIgY2hjcjsKIAotCWNoY3IgPSBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CisJY2hjciA9IF9fcmF3X3JlYWRsKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKIAogCWlmICghKGNoY3IgJiBDSENSX1RFKSkKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJY2hjciAmPSB+KENIQ1JfSUUgfCBDSENSX0RFKTsKLQljdHJsX291dGwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CisJX19yYXdfd3JpdGVsKGNoY3IsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUikpOwogCiAJd2FrZV91cCgmY2hhbi0+d2FpdF9xdWV1ZSk7CiAKQEAgLTExNSw3ICsxMTgsNyBAQAogCQljaGFuLT5mbGFncyAmPSB+RE1BX1RFSV9DQVBBQkxFOwogCX0KIAotCWN0cmxfb3V0bChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKKwlfX3Jhd193cml0ZWwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CiAKIAljaGFuLT5mbGFncyB8PSBETUFfQ09ORklHVVJFRDsKIAlyZXR1cm4gMDsKQEAgLTEyNiwxMyArMTI5LDEzIEBACiAJaW50IGlycTsKIAl1MzIgY2hjcjsKIAotCWNoY3IgPSBjdHJsX2lubChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dICsgQ0hDUik7CisJY2hjciA9IF9fcmF3X3JlYWRsKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKIAljaGNyIHw9IENIQ1JfREU7CiAKIAlpZiAoY2hhbi0+ZmxhZ3MgJiBETUFfVEVJX0NBUEFCTEUpCiAJCWNoY3IgfD0gQ0hDUl9JRTsKIAotCWN0cmxfb3V0bChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKKwlfX3Jhd193cml0ZWwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CiAKIAlpZiAoY2hhbi0+ZmxhZ3MgJiBETUFfVEVJX0NBUEFCTEUpIHsKIAkJaXJxID0gZ2V0X2RtdGVfaXJxKGNoYW4tPmNoYW4pOwpAQCAtMTUwLDkgKzE1Myw5IEBACiAJCWRpc2FibGVfaXJxKGlycSk7CiAJfQogCi0JY2hjciA9IGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKTsKKwljaGNyID0gX19yYXdfcmVhZGwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpOwogCWNoY3IgJj0gfihDSENSX0RFIHwgQ0hDUl9URSB8IENIQ1JfSUUpOwotCWN0cmxfb3V0bChjaGNyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpKTsKKwlfX3Jhd193cml0ZWwoY2hjciwgKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBDSENSKSk7CiB9CiAKIHN0YXRpYyBpbnQgc2hfZG1hY194ZmVyX2RtYShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pCkBAIC0xODMsMTIgKzE4NiwxMiBAQAogCSAqLwogCWlmIChjaGFuLT5zYXIgfHwgKG1hY2hfaXNfZHJlYW1jYXN0KCkgJiYKIAkJCSAgY2hhbi0+Y2hhbiA9PSBQVlIyX0NBU0NBREVfQ0hBTikpCi0JCWN0cmxfb3V0bChjaGFuLT5zYXIsIChkbWFfYmFzZV9hZGRyW2NoYW4tPmNoYW5dK1NBUikpOworCQlfX3Jhd193cml0ZWwoY2hhbi0+c2FyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXStTQVIpKTsKIAlpZiAoY2hhbi0+ZGFyIHx8IChtYWNoX2lzX2RyZWFtY2FzdCgpICYmCiAJCQkgIGNoYW4tPmNoYW4gPT0gUFZSMl9DQVNDQURFX0NIQU4pKQotCQljdHJsX291dGwoY2hhbi0+ZGFyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIERBUikpOworCQlfX3Jhd193cml0ZWwoY2hhbi0+ZGFyLCAoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIERBUikpOwogCi0JY3RybF9vdXRsKGNoYW4tPmNvdW50ID4+IGNhbGNfeG1pdF9zaGlmdChjaGFuKSwKKwlfX3Jhd193cml0ZWwoY2hhbi0+Y291bnQgPj4gY2FsY194bWl0X3NoaWZ0KGNoYW4pLAogCQkoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIFRDUikpOwogCiAJc2hfZG1hY19lbmFibGVfZG1hKGNoYW4pOwpAQCAtMTk4LDEwICsyMDEsMTAgQEAKIAogc3RhdGljIGludCBzaF9kbWFjX2dldF9kbWFfcmVzaWR1ZShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pCiB7Ci0JaWYgKCEoY3RybF9pbmwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpICYgQ0hDUl9ERSkpCisJaWYgKCEoX19yYXdfcmVhZGwoZG1hX2Jhc2VfYWRkcltjaGFuLT5jaGFuXSArIENIQ1IpICYgQ0hDUl9ERSkpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIGN0cmxfaW5sKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBUQ1IpCisJcmV0dXJuIF9fcmF3X3JlYWRsKGRtYV9iYXNlX2FkZHJbY2hhbi0+Y2hhbl0gKyBUQ1IpCiAJCSA8PCBjYWxjX3htaXRfc2hpZnQoY2hhbik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hYnJnLmMgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYWJyZy5jCmluZGV4IDVlMjI2ODkuLjcyNjIyZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hYnJnLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWFicmcuYwpAQCAtODYsOCArODYsOCBAQAogCXVuc2lnbmVkIGxvbmcgZGNyOwogCXVuc2lnbmVkIGludCBpOwogCi0JZGNyID0gY3RybF9pbmwoRE1BQlJHQ1IpOwotCWN0cmxfb3V0bChkY3IgJiB+MHgwMGZmMDAwMywgRE1BQlJHQ1IpOwkvKiBhY2sgYWxsICovCisJZGNyID0gX19yYXdfcmVhZGwoRE1BQlJHQ1IpOworCV9fcmF3X3dyaXRlbChkY3IgJiB+MHgwMGZmMDAwMywgRE1BQlJHQ1IpOwkvKiBhY2sgYWxsICovCiAJZGNyICY9IGRjciA+PiA4OwkvKiBpZ25vcmUgbWFza2VkICovCiAKIAkvKiBVU0Igc3R1ZmYsIGdldCBpdCBvdXQgb2YgdGhlIHdheSBmaXJzdCAqLwpAQCAtMTA5LDE3ICsxMDksMTcgQEAKIHN0YXRpYyB2b2lkIGRtYWJyZ19kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgZG1haXJxKQogewogCXVuc2lnbmVkIGxvbmcgZGNyOwotCWRjciA9IGN0cmxfaW5sKERNQUJSR0NSKTsKKwlkY3IgPSBfX3Jhd19yZWFkbChETUFCUkdDUik7CiAJZGNyICY9IH4oMSA8PCAoKGRtYWlycSA+IDEpID8gZG1haXJxICsgMjIgOiBkbWFpcnEgKyA4KSk7Ci0JY3RybF9vdXRsKGRjciwgRE1BQlJHQ1IpOworCV9fcmF3X3dyaXRlbChkY3IsIERNQUJSR0NSKTsKIH0KIAogc3RhdGljIHZvaWQgZG1hYnJnX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGRtYWlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGRjcjsKLQlkY3IgPSBjdHJsX2lubChETUFCUkdDUik7CisJZGNyID0gX19yYXdfcmVhZGwoRE1BQlJHQ1IpOwogCWRjciB8PSAoMSA8PCAoKGRtYWlycSA+IDEpID8gZG1haXJxICsgMjIgOiBkbWFpcnEgKyA4KSk7Ci0JY3RybF9vdXRsKGRjciwgRE1BQlJHQ1IpOworCV9fcmF3X3dyaXRlbChkY3IsIERNQUJSR0NSKTsKIH0KIAogaW50IGRtYWJyZ19yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgZG1haXJxLCB2b2lkKCpoYW5kbGVyKSh2b2lkKiksCkBAIC0xNjUsMTMgKzE2NSwxMyBAQAogCQlwcmludGsoS0VSTl9JTkZPICJETUFCUkc6IERNQUMgY2gwIG5vdCByZXNlcnZlZCFcbiIpOwogI2VuZGlmCiAKLQljdHJsX291dGwoMCwgRE1BQlJHQ1IpOwotCWN0cmxfb3V0bCgwLCBETUFDSENSMCk7Ci0JY3RybF9vdXRsKDB4OTQwMDAwMDAsIERNQVJTUkEpOwkvKiBlbmFibGUgRE1BQlJHIGluIERNQUMgMCAqLworCV9fcmF3X3dyaXRlbCgwLCBETUFCUkdDUik7CisJX19yYXdfd3JpdGVsKDAsIERNQUNIQ1IwKTsKKwlfX3Jhd193cml0ZWwoMHg5NDAwMDAwMCwgRE1BUlNSQSk7CS8qIGVuYWJsZSBETUFCUkcgaW4gRE1BQyAwICovCiAKIAkvKiBlbmFibGUgRE1BQlJHIG1vZGUsIGVuYWJsZSB0aGUgRE1BQyAqLwotCW9yID0gY3RybF9pbmwoRE1BT1IpOwotCWN0cmxfb3V0bChvciB8IERNQU9SX0JSRyB8IERNQU9SX0RNRU4sIERNQU9SKTsKKwlvciA9IF9fcmF3X3JlYWRsKERNQU9SKTsKKwlfX3Jhd193cml0ZWwob3IgfCBETUFPUl9CUkcgfCBETUFPUl9ETUVOLCBETUFPUik7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShETUFCUkdJMCwgZG1hYnJnX2lycSwgSVJRRl9ESVNBQkxFRCwKIAkJCSJETUFCUkcgVVNCIGFkZHJlc3MgZXJyb3IiLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9oZWFydGJlYXQuYyBiL2FyY2gvc2gvZHJpdmVycy9oZWFydGJlYXQuYwppbmRleCBhOTMzOWE2Li4yYWNiYzc5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvaGVhcnRiZWF0LmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2hlYXJ0YmVhdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIEdlbmVyaWMgaGVhcnRiZWF0IGRyaXZlciBmb3IgcmVndWxhciBMRUQgYmFua3MKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgIFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAwNyAtIDIwMTAgIFBhdWwgTXVuZHQKICAqCiAgKiBNb3N0IFNIIHJlZmVyZW5jZSBib2FyZHMgaW5jbHVkZSBhIG51bWJlciBvZiBpbmRpdmlkdWFsIExFRHMgdGhhdCBjYW4KICAqIGJlIGluZGVwZW5kZW50bHkgY29udHJvbGxlZCAoZWl0aGVyIHZpYSBhIHByZS1kZWZpbmVkIGhhcmR3YXJlCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgogCiAjZGVmaW5lIERSVl9OQU1FICJoZWFydGJlYXQiCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjEuMSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMS4yIgogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBkZWZhdWx0X2JpdF9wb3NbXSA9IHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyB9OwogCkBAIC05OCw3ICs5OCw3IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQloZC0+YmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwloZC0+YmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmICh1bmxpa2VseSghaGQtPmJhc2UpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKIApAQCAtMTE3LDggKzExNywyMCBAQAogCWZvciAoaSA9IDA7IGkgPCBoZC0+bnJfYml0czsgaSsrKQogCQloZC0+bWFzayB8PSAoMSA8PCBoZC0+Yml0X3Bvc1tpXSk7CiAKLQlpZiAoIWhkLT5yZWdzaXplKQotCQloZC0+cmVnc2l6ZSA9IDg7CS8qIGRlZmF1bHQgYWNjZXNzIHNpemUgKi8KKwlpZiAoIWhkLT5yZWdzaXplKSB7CisJCXN3aXRjaCAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNX1RZUEVfTUFTSykgeworCQljYXNlIElPUkVTT1VSQ0VfTUVNXzMyQklUOgorCQkJaGQtPnJlZ3NpemUgPSAzMjsKKwkJCWJyZWFrOworCQljYXNlIElPUkVTT1VSQ0VfTUVNXzE2QklUOgorCQkJaGQtPnJlZ3NpemUgPSAxNjsKKwkJCWJyZWFrOworCQljYXNlIElPUkVTT1VSQ0VfTUVNXzhCSVQ6CisJCWRlZmF1bHQ6CisJCQloZC0+cmVnc2l6ZSA9IDg7CisJCQlicmVhazsKKwkJfQorCX0KIAogCXNldHVwX3RpbWVyKCZoZC0+dGltZXIsIGhlYXJ0YmVhdF90aW1lciwgKHVuc2lnbmVkIGxvbmcpaGQpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhkKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL01ha2VmaWxlCmluZGV4IDA4YWYxZjQuLjRhNTllNjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9NYWtlZmlsZQpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBNYWtlZmlsZSBmb3IgdGhlIFBDSSBzcGVjaWZpYyBrZXJuZWwgaW50ZXJmYWNlIHJvdXRpbmVzIHVuZGVyIExpbnV4LgogIwotb2JqLXkJCQkJCSs9IHBjaS5vCitvYmoteQkJCQkJKz0gY29tbW9uLm8gcGNpLm8KIAogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSkJKz0gcGNpLXNoNzc1MS5vIG9wcy1zaDQubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIpCSs9IHBjaS1zaDc3NTEubyBvcHMtc2g0Lm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpCSs9IHBjaS1zaDc3ODAubyBvcHMtc2g0Lm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCSs9IHBjaS1zaDc3ODAubyBvcHMtc2g0Lm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCSs9IHBjaS1zaDc3ODAubyBvcHMtc2g0Lm8KLW9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCSs9IG9wcy1zaDc3ODYubworb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikJKz0gcGNpZS1zaDc3ODYubyBvcHMtc2g3Nzg2Lm8KIG9iai0kKENPTkZJR19DUFVfU0g1KQkJCSs9IHBjaS1zaDUubyBvcHMtc2g1Lm8KIAogb2JqLSQoQ09ORklHX1NIX0RSRUFNQ0FTVCkJCSs9IG9wcy1kcmVhbWNhc3QubyBmaXh1cHMtZHJlYW1jYXN0Lm8gXApAQCAtMjUsNCArMjUsMyBAQAogb2JqLSQoQ09ORklHX1NIX0xBTkRJU0spCQkrPSBmaXh1cHMtbGFuZGlzay5vCiBvYmotJChDT05GSUdfU0hfTEJPWF9SRTIpCQkrPSBmaXh1cHMtcnRzNzc1MXIyZC5vCiBvYmotJChDT05GSUdfU0hfQ0FZTUFOKQkJCSs9IGZpeHVwcy1jYXltYW4ubwotb2JqLSQoQ09ORklHX1NIX1VSUVVFTEwpCQkrPSBwY2llLXNoNzc4Ni5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2NvbW1vbi5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmYxMzgxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9jb21tb24uYwpAQCAtMCwwICsxLDE2MiBAQAorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKy8qCisgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgZWFybHkgb24gYmVmb3JlIFBDSSBzY2FubmluZyBpcyBkb25lCisgKiBhbmQgYWxsIG9mIHRoZSBwY2lfZGV2IGFuZCBwY2lfYnVzIHN0cnVjdHVyZXMgaGF2ZSBiZWVuIGNyZWF0ZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqZmFrZV9wY2lfZGV2KHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSwKKwlpbnQgdG9wX2J1cywgaW50IGJ1c25yLCBpbnQgZGV2Zm4pCit7CisJc3RhdGljIHN0cnVjdCBwY2lfZGV2IGRldjsKKwlzdGF0aWMgc3RydWN0IHBjaV9idXMgYnVzOworCisJZGV2LmJ1cyA9ICZidXM7CisJZGV2LnN5c2RhdGEgPSBob3NlOworCWRldi5kZXZmbiA9IGRldmZuOworCWJ1cy5udW1iZXIgPSBidXNucjsKKwlidXMuc3lzZGF0YSA9IGhvc2U7CisJYnVzLm9wcyA9IGhvc2UtPnBjaV9vcHM7CisKKwlpZihidXNuciAhPSB0b3BfYnVzKQorCQkvKiBGYWtlIGEgcGFyZW50IGJ1cyBzdHJ1Y3R1cmUuICovCisJCWJ1cy5wYXJlbnQgPSAmYnVzOworCWVsc2UKKwkJYnVzLnBhcmVudCA9IE5VTEw7CisKKwlyZXR1cm4gJmRldjsKK30KKworI2RlZmluZSBFQVJMWV9QQ0lfT1AocncsIHNpemUsIHR5cGUpCQkJCQlcCitpbnQgX19pbml0IGVhcmx5XyMjcncjI19jb25maWdfIyNzaXplKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSwJCVwKKwlpbnQgdG9wX2J1cywgaW50IGJ1cywgaW50IGRldmZuLCBpbnQgb2Zmc2V0LCB0eXBlIHZhbHVlKQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBwY2lfIyNydyMjX2NvbmZpZ18jI3NpemUoCQkJCVwKKwkJZmFrZV9wY2lfZGV2KGhvc2UsIHRvcF9idXMsIGJ1cywgZGV2Zm4pLAkJXAorCQlvZmZzZXQsIHZhbHVlKTsJCQkJCQlcCit9CisKK0VBUkxZX1BDSV9PUChyZWFkLCBieXRlLCB1OCAqKQorRUFSTFlfUENJX09QKHJlYWQsIHdvcmQsIHUxNiAqKQorRUFSTFlfUENJX09QKHJlYWQsIGR3b3JkLCB1MzIgKikKK0VBUkxZX1BDSV9PUCh3cml0ZSwgYnl0ZSwgdTgpCitFQVJMWV9QQ0lfT1Aod3JpdGUsIHdvcmQsIHUxNikKK0VBUkxZX1BDSV9PUCh3cml0ZSwgZHdvcmQsIHUzMikKKworaW50IF9faW5pdCBwY2lfaXNfNjZtaHpfY2FwYWJsZShzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsCisJCQkJaW50IHRvcF9idXMsIGludCBjdXJyZW50X2J1cykKK3sKKwl1MzIgcGNpX2RldmZuOworCXVuc2lnbmVkIHNob3J0IHZpZDsKKwlpbnQgY2FwNjYgPSAtMTsKKwl1MTYgc3RhdDsKKworCXByaW50ayhLRVJOX0lORk8gIlBDSTogQ2hlY2tpbmcgNjZNSHogY2FwYWJpbGl0aWVzLi4uXG4iKTsKKworCWZvciAocGNpX2RldmZuID0gMDsgcGNpX2RldmZuIDwgMHhmZjsgcGNpX2RldmZuKyspIHsKKwkJaWYgKFBDSV9GVU5DKHBjaV9kZXZmbikpCisJCQljb250aW51ZTsKKwkJaWYgKGVhcmx5X3JlYWRfY29uZmlnX3dvcmQoaG9zZSwgdG9wX2J1cywgY3VycmVudF9idXMsCisJCQkJCSAgIHBjaV9kZXZmbiwgUENJX1ZFTkRPUl9JRCwgJnZpZCkgIT0KKwkJICAgIFBDSUJJT1NfU1VDQ0VTU0ZVTCkKKwkJCWNvbnRpbnVlOworCQlpZiAodmlkID09IDB4ZmZmZikKKwkJCWNvbnRpbnVlOworCisJCS8qIGNoZWNrIDY2TUh6IGNhcGFiaWxpdHkgKi8KKwkJaWYgKGNhcDY2IDwgMCkKKwkJCWNhcDY2ID0gMTsKKwkJaWYgKGNhcDY2KSB7CisJCQllYXJseV9yZWFkX2NvbmZpZ193b3JkKGhvc2UsIHRvcF9idXMsIGN1cnJlbnRfYnVzLAorCQkJCQkgICAgICAgcGNpX2RldmZuLCBQQ0lfU1RBVFVTLCAmc3RhdCk7CisJCQlpZiAoIShzdGF0ICYgUENJX1NUQVRVU182Nk1IWikpIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSAgICAgICAiUENJOiAlMDJ4OiUwMnggbm90IDY2TUh6IGNhcGFibGUuXG4iLAorCQkJCSAgICAgICBjdXJyZW50X2J1cywgcGNpX2RldmZuKTsKKwkJCQljYXA2NiA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gY2FwNjYgPiAwOworfQorCitzdGF0aWMgdm9pZCBwY2liaW9zX2VuYWJsZV9lcnIodW5zaWduZWQgbG9uZyBfX2RhdGEpCit7CisJc3RydWN0IHBjaV9jaGFubmVsICpob3NlID0gKHN0cnVjdCBwY2lfY2hhbm5lbCAqKV9fZGF0YTsKKworCWRlbF90aW1lcigmaG9zZS0+ZXJyX3RpbWVyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiUENJOiByZS1lbmFibGluZyBlcnJvciBJUlEuXG4iKTsKKwllbmFibGVfaXJxKGhvc2UtPmVycl9pcnEpOworfQorCitzdGF0aWMgdm9pZCBwY2liaW9zX2VuYWJsZV9zZXJyKHVuc2lnbmVkIGxvbmcgX19kYXRhKQoreworCXN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSA9IChzdHJ1Y3QgcGNpX2NoYW5uZWwgKilfX2RhdGE7CisKKwlkZWxfdGltZXIoJmhvc2UtPnNlcnJfdGltZXIpOworCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IHJlLWVuYWJsaW5nIHN5c3RlbSBlcnJvciBJUlEuXG4iKTsKKwllbmFibGVfaXJxKGhvc2UtPnNlcnJfaXJxKTsKK30KKwordm9pZCBwY2liaW9zX2VuYWJsZV90aW1lcnMoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKQoreworCWlmIChob3NlLT5lcnJfaXJxKSB7CisJCWluaXRfdGltZXIoJmhvc2UtPmVycl90aW1lcik7CisJCWhvc2UtPmVycl90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaG9zZTsKKwkJaG9zZS0+ZXJyX3RpbWVyLmZ1bmN0aW9uID0gcGNpYmlvc19lbmFibGVfZXJyOworCX0KKworCWlmIChob3NlLT5zZXJyX2lycSkgeworCQlpbml0X3RpbWVyKCZob3NlLT5zZXJyX3RpbWVyKTsKKwkJaG9zZS0+c2Vycl90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaG9zZTsKKwkJaG9zZS0+c2Vycl90aW1lci5mdW5jdGlvbiA9IHBjaWJpb3NfZW5hYmxlX3NlcnI7CisJfQorfQorCisvKgorICogQSBzaW1wbGUgaGFuZGxlciBmb3IgdGhlIHJlZ3VsYXIgUENJIHN0YXR1cyBlcnJvcnMsIGNhbGxlZCBmcm9tIElSUQorICogY29udGV4dC4KKyAqLwordW5zaWduZWQgaW50IHBjaWJpb3NfaGFuZGxlX3N0YXR1c19lcnJvcnModW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCQkgIHVuc2lnbmVkIGludCBzdGF0dXMsCisJCQkJCSAgc3RydWN0IHBjaV9jaGFubmVsICpob3NlKQoreworCXVuc2lnbmVkIGludCBjbWQgPSAwOworCisJaWYgKHN0YXR1cyAmIFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBtYXN0ZXIgYWJvcnQsIHBjPTB4JTA4bHhcbiIsIGFkZHIpOworCQljbWQgfD0gUENJX1NUQVRVU19SRUNfTUFTVEVSX0FCT1JUOworCX0KKworCWlmIChzdGF0dXMgJiBQQ0lfU1RBVFVTX1JFQ19UQVJHRVRfQUJPUlQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogdGFyZ2V0IGFib3J0OiAiKTsKKwkJcGNpYmlvc19yZXBvcnRfc3RhdHVzKFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVCB8CisJCQkJICAgICAgUENJX1NUQVRVU19TSUdfVEFSR0VUX0FCT1JUIHwKKwkJCQkgICAgICBQQ0lfU1RBVFVTX1JFQ19NQVNURVJfQUJPUlQsIDEpOworCQlwcmludGsoIlxuIik7CisKKwkJY21kIHw9IFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVDsKKwl9CisKKwlpZiAoc3RhdHVzICYgKFBDSV9TVEFUVVNfUEFSSVRZIHwgUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFkpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IHBhcml0eSBlcnJvciBkZXRlY3RlZDogIik7CisJCXBjaWJpb3NfcmVwb3J0X3N0YXR1cyhQQ0lfU1RBVFVTX1BBUklUWSB8CisJCQkJICAgICAgUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFksIDEpOworCQlwcmludGsoIlxuIik7CisKKwkJY21kIHw9IFBDSV9TVEFUVVNfUEFSSVRZIHwgUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFk7CisKKwkJLyogTm93IGJhY2sgb2ZmIG9mIHRoZSBJUlEgZm9yIGF3aGlsZSAqLworCQlpZiAoaG9zZS0+ZXJyX2lycSkgeworCQkJZGlzYWJsZV9pcnFfbm9zeW5jKGhvc2UtPmVycl9pcnEpOworCQkJaG9zZS0+ZXJyX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFo7CisJCQlhZGRfdGltZXIoJmhvc2UtPmVycl90aW1lcik7CisJCX0KKwl9CisKKwlyZXR1cm4gY21kOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtZHJlYW1jYXN0LmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1kcmVhbWNhc3QuYwppbmRleCBlZDdmNDg5Li45NDJlZjRmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1kcmVhbWNhc3QuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1kcmVhbWNhc3QuYwpAQCAtMzksNyArMzksNyBAQAogCQkvKgogCQkgKiBXZSBhbHNvIGFzc3VtZSB0aGF0IGRldi0+ZGV2Zm4gPT0gMAogCQkgKi8KLQkJZGV2LT5yZXNvdXJjZVsxXS5zdGFydAk9IHAtPmlvX3Jlc291cmNlLT5zdGFydCAgKyAweDEwMDsKKwkJZGV2LT5yZXNvdXJjZVsxXS5zdGFydAk9IHAtPnJlc291cmNlc1swXS5zdGFydCAgKyAweDEwMDsKIAkJZGV2LT5yZXNvdXJjZVsxXS5lbmQJPSBkZXYtPnJlc291cmNlWzFdLnN0YXJ0ICsgMHgyMDAgLSAxOwogCiAJCS8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1yNzc4MHJwLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1yNzc4MHJwLmMKaW5kZXggMTVjYTY1Yy4uMDhiMmQ4NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcjc3ODBycC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXI3NzgwcnAuYwpAQCAtMjIsMTUgKzIyLDMgQEAKIHsKIAlyZXR1cm4gaXJxX3RhYltzbG90XTsKIH0KLQotaW50IHBjaV9maXh1cF9wY2ljKHN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbikKLXsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDQzZmYsIFNINF9QQ0lJTlRNKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMDAsIFNINzc4MF9QQ0lJQkFSKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDgwMDAwMDAsIFNINzc4MF9QQ0lDU0NSMCk7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDFiLCBTSDc3ODBfUENJQ1NBUjApOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHhmZDAwMDAwMCwgU0g3NzgwX1BDSUNTQ1IxKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMGYsIFNINzc4MF9QQ0lDU0FSMSk7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXJ0czc3NTFyMmQuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXJ0czc3NTFyMmQuYwppbmRleCA3ODk4ZjE0Li5lMjQ4NTE2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1ydHM3NzUxcjJkLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcnRzNzc1MXIyZC5jCkBAIC00Myw3ICs0Myw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBiY3IxLCBtY3I7CiAKLQliY3IxID0gY3RybF9pbmwoU0g3NzUxX0JDUjEpOworCWJjcjEgPSBfX3Jhd19yZWFkbChTSDc3NTFfQkNSMSk7CiAJYmNyMSB8PSAweDQwMDgwMDAwOwkvKiBFbmFibGUgQml0IDE5IEJSRVFFTiwgc2V0IFBDSUMgdG8gc2xhdmUgKi8KIAlwY2lfd3JpdGVfcmVnKGNoYW4sIGJjcjEsIFNINF9QQ0lCQ1IxKTsKIApAQCAtNTQsNyArNTQsNyBAQAogCXBjaV93cml0ZV9yZWcoY2hhbiwgMHhmYjkwMDA0NywgU0g3NzUxX1BDSUNPTkYxKTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4YWIwMDAwMDEsIFNINzc1MV9QQ0lDT05GNCk7CiAKLQltY3IgPSBjdHJsX2lubChTSDc3NTFfTUNSKTsKKwltY3IgPSBfX3Jhd19yZWFkbChTSDc3NTFfTUNSKTsKIAltY3IgPSAobWNyICYgUENJTUNSX01SU0VUX09GRikgJiBQQ0lNQ1JfUkZTSF9PRkY7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCBtY3IsIFNINF9QQ0lNQ1IpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zZGs3NzgwLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zZGs3NzgwLmMKaW5kZXggMjUwYjBlZC4uMDkzMGY5OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc2RrNzc4MC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNkazc3ODAuYwpAQCAtMzEsMjIgKzMxLDMgQEAKIHsKICAgICAgICByZXR1cm4gc2RrNzc4MF9pcnFfdGFiW3Bpbi0xXVtzbG90XTsKIH0KLWludCBwY2lfZml4dXBfcGNpYyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4pCi17Ci0JLyogRW5hYmxlIGFsbCBpbnRlcnJ1cHRzLCBzbyB3ZSBrbm93IHdoYXQgdG8gZml4ICovCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDBDM0ZGLCBTSDc3ODBfUENJSU1SKTsKLQotCS8qIFNldCB1cCBzdGFuZGFyZCBQQ0kgY29uZmlnIHJlZ2lzdGVycyAqLwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwODAwMDAwMCwgU0g3NzgwX1BDSU1CQVIwKTsJLyogUENJICovCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDA4MDAwMDAwLCBTSDRfUENJTEFSMCk7CS8qIFNId3kgKi8KLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDdGMDAwMDEsIFNINF9QQ0lMU1IwKTsJLyogc2l6ZSAxMjhNIHcvIE1CQVIgKi8KLQotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAwMCwgU0g3NzgwX1BDSU1CQVIxKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMDAsIFNINF9QQ0lMQVIxKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMDAsIFNINF9QQ0lMU1IxKTsKLQotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHhBQjAwMDgwMSwgU0g3NzgwX1BDSUlCQVIpOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHhBNTAwMEMwMSwgU0g0X1BDSUNSKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc2U3NzUxLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zZTc3NTEuYwppbmRleCA0NzVmYTlmLi5hNGM3ZDNhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zZTc3NTEuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zZTc3NTEuYwpAQCAtOTcsMTIgKzk3LDEyIEBACiAJKiBtZWFuaW5nIGFsbCBjYWxscyBnbyBzdHJhaWdodCB0aHJvdWdoLi4uIHVzZSBCVUdfT04gdG8KIAkqIGNhdGNoIGVycm9uZW91cyBhc3N1bXB0aW9uLgogCSovCi0JQlVHX09OKGNoYW4tPm1lbV9yZXNvdXJjZS0+c3RhcnQgIT0gU0g3NzUxX1BDSV9NRU1PUllfQkFTRSk7CisJQlVHX09OKGNoYW4tPnJlc291cmNlc1sxXS5zdGFydCAhPSBTSDc3NTFfUENJX01FTU9SWV9CQVNFKTsKIAotCVBDSUNfV1JJVEUoU0g3NzUxX1BDSU1CUiwgY2hhbi0+bWVtX3Jlc291cmNlLT5zdGFydCk7CisJUENJQ19XUklURShTSDc3NTFfUENJTUJSLCBjaGFuLT5yZXNvdXJjZXNbMV0uc3RhcnQpOwogCiAJLyogU2V0IElPQlIgZm9yIHdpbmRvdyBjb250YWluaW5nIGFyZWEgc3BlY2lmaWVkIGluIHBjaS5oICovCi0JUENJQ19XUklURShTSDc3NTFfUENJSU9CUiwgKGNoYW4tPmlvX3Jlc291cmNlLT5zdGFydCAmIFNINzc1MV9QQ0lJT0JSX01BU0spKTsKKwlQQ0lDX1dSSVRFKFNINzc1MV9QQ0lJT0JSLCAoY2hhbi0+cmVzb3VyY2VzWzBdLnN0YXJ0ICYgU0g3NzUxX1BDSUlPQlJfTUFTSykpOwogCiAJLyogQWxsIGRvbmUsIG1heSBhcyB3ZWxsIHNheSBzby4uLiAqLwogCXByaW50aygiU0g3NzUxIFBDSTogRmluaXNoZWQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIFBDSSBjb250cm9sbGVyXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNoNC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc2g0LmMKaW5kZXggNzhiZWJlYi4uMGI4MTk5OSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc2g0LmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc2g0LmMKQEAgLTE2LDcgKzE2LDcgQEAKICAqIERpcmVjdCBhY2Nlc3MgdG8gUENJIGhhcmR3YXJlLi4uCiAgKi8KICNkZWZpbmUgQ09ORklHX0NNRChidXMsIGRldmZuLCB3aGVyZSkgXAotCShQMVNFRyB8IChidXMtPm51bWJlciA8PCAxNikgfCAoZGV2Zm4gPDwgOCkgfCAod2hlcmUgJiB+MykpCisJKDB4ODAwMDAwMDAgfCAoYnVzLT5udW1iZXIgPDwgMTYpIHwgKGRldmZuIDw8IDgpIHwgKHdoZXJlICYgfjMpKQogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNoNF9wY2lfbG9jayk7CiAKQEAgLTEwMiwzNCArMTAyLDYgQEAKIAkud3JpdGUJCT0gc2g0X3BjaV93cml0ZSwKIH07CiAKLS8qCi0gKiBOb3QgcmVhbGx5IHJlbGF0ZWQgdG8gcGNpX29wcywgYnV0IGl0J3MgY29tbW9uIGFuZCBub3Qgd29ydGggc2hvdmluZwotICogc29tZXdoZXJlIGVsc2UgZm9yIG5vdy4uCi0gKi8KLWludCBfX2luaXQgc2g0X3BjaV9jaGVja19kaXJlY3Qoc3RydWN0IHBjaV9jaGFubmVsICpjaGFuKQotewotCS8qCi0JICogQ2hlY2sgaWYgY29uZmlndXJhdGlvbiB3b3Jrcy4KLQkgKi8KLQl1bnNpZ25lZCBpbnQgdG1wID0gcGNpX3JlYWRfcmVnKGNoYW4sIFNINF9QQ0lQQVIpOwotCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCBQMVNFRywgU0g0X1BDSVBBUik7Ci0KLQlpZiAocGNpX3JlYWRfcmVnKGNoYW4sIFNINF9QQ0lQQVIpID09IFAxU0VHKSB7Ci0JCXBjaV93cml0ZV9yZWcoY2hhbiwgdG1wLCBTSDRfUENJUEFSKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBVc2luZyBjb25maWd1cmF0aW9uIHR5cGUgMVxuIik7Ci0JCXJlcXVlc3RfcmVnaW9uKGNoYW4tPnJlZ19iYXNlICsgU0g0X1BDSVBBUiwgOCwKLQkJCSAgICAgICAiUENJIGNvbmYxIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXBjaV93cml0ZV9yZWcoY2hhbiwgdG1wLCBTSDRfUENJUEFSKTsKLQotCXByaW50ayhLRVJOX0VSUiAiUENJOiAlcyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiAtRUlOVkFMOwotfQotCiBpbnQgX19hdHRyaWJ1dGVfXygod2VhaykpIHBjaV9maXh1cF9wY2ljKHN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbikKIHsKIAkvKiBOb3RoaW5nIHRvIGRvLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktZHJlYW1jYXN0LmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1kcmVhbWNhc3QuYwppbmRleCAyMTBmOWQ0Li42MzM2OTQxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1kcmVhbWNhc3QuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1kcmVhbWNhc3QuYwpAQCAtMjUsMjUgKzI1LDI1IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvcGNpLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZ2Fwc3BjaV9pb19yZXNvdXJjZSA9IHsKLQkubmFtZQk9ICJHQVBTUENJIElPIiwKLQkuc3RhcnQJPSBHQVBTUENJX0JCQV9DT05GSUcsCi0JLmVuZAk9IEdBUFNQQ0lfQkJBX0NPTkZJRyArIEdBUFNQQ0lfQkJBX0NPTkZJR19TSVpFIC0gMSwKLQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBnYXBzcGNpX21lbV9yZXNvdXJjZSA9IHsKLQkubmFtZQk9ICJHQVBTUENJIG1lbSIsCi0JLnN0YXJ0CT0gR0FQU1BDSV9ETUFfQkFTRSwKLQkuZW5kCT0gR0FQU1BDSV9ETUFfQkFTRSArIEdBUFNQQ0lfRE1BX1NJWkUgLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBnYXBzcGNpX3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAiR0FQU1BDSSBJTyIsCisJCS5zdGFydAk9IEdBUFNQQ0lfQkJBX0NPTkZJRywKKwkJLmVuZAk9IEdBUFNQQ0lfQkJBX0NPTkZJRyArIEdBUFNQQ0lfQkJBX0NPTkZJR19TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwl9LCAgeworCQkubmFtZQk9ICJHQVBTUENJIG1lbSIsCisJCS5zdGFydAk9IEdBUFNQQ0lfRE1BX0JBU0UsCisJCS5lbmQJPSBHQVBTUENJX0RNQV9CQVNFICsgR0FQU1BDSV9ETUFfU0laRSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9jaGFubmVsIGRyZWFtY2FzdF9wY2lfY29udHJvbGxlciA9IHsKIAkucGNpX29wcwk9ICZnYXBzcGNpX3BjaV9vcHMsCi0JLmlvX3Jlc291cmNlCT0gJmdhcHNwY2lfaW9fcmVzb3VyY2UsCisJLnJlc291cmNlcwk9IGdhcHNwY2lfcmVzb3VyY2VzLAorCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGdhcHNwY2lfcmVzb3VyY2VzKSwKIAkuaW9fb2Zmc2V0CT0gMHgwMDAwMDAwMCwKLQkubWVtX3Jlc291cmNlCT0gJmdhcHNwY2lfbWVtX3Jlc291cmNlLAogCS5tZW1fb2Zmc2V0CT0gMHgwMDAwMDAwMCwKIH07CiAKQEAgLTk1LDggKzk1LDYgQEAKIAlvdXRsKDB4MDAwMDIwMDEsIEdBUFNQQ0lfQkJBX0NPTkZJRysweDEwKTsKIAlvdXRsKDB4MDEwMDAwMDAsIEdBUFNQQ0lfQkJBX0NPTkZJRysweDE0KTsKIAotCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKCZkcmVhbWNhc3RfcGNpX2NvbnRyb2xsZXIpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKCZkcmVhbWNhc3RfcGNpX2NvbnRyb2xsZXIpOwogfQogYXJjaF9pbml0Y2FsbChnYXBzcGNpX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g0LmggYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDQuaAppbmRleCAzZDUyOTZjLi5jYmY3NjNiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDQuaAorKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDQuaApAQCAtNDksNiArNDksMTcgQEAKICAgI2RlZmluZSBTSDRfUENJSU5UX01XUEQJICAweDAwMDAwMDAyCS8qIE1hc3RlciBXcml0ZSBQRVJSIERldGVjdCAqLwogICAjZGVmaW5lIFNINF9QQ0lJTlRfTVJQRAkgIDB4MDAwMDAwMDEJLyogTWFzdGVyIFJlYWQgUEVSUiBEZXRlY3QgKi8KICNkZWZpbmUgU0g0X1BDSUlOVE0JCTB4MTE4CQkvKiBQQ0kgSW50ZXJydXB0IE1hc2sgKi8KKyAgI2RlZmluZSBTSDRfUENJSU5UTV9UVEFESU0JICBCSVQoMTQpCS8qIFRhcmdldC10YXJnZXQgYWJvcnQgaW50ZXJydXB0ICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fVE1UT0lNCSAgQklUKDkpCS8qIFRhcmdldCByZXRyeSB0aW1lb3V0ICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fTURFSU0JICBCSVQoOCkJLyogTWFzdGVyIGZ1bmN0aW9uIGRpc2FibGUgZXJyb3IgKi8KKyAgI2RlZmluZSBTSDRfUENJSU5UTV9BUEVESU0JICBCSVQoNykJLyogQWRkcmVzcyBwYXJpdHkgZXJyb3IgZGV0ZWN0aW9uICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fU0RJTQkgIEJJVCg2KQkvKiBTRVJSIGRldGVjdGlvbiAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX0RQRUlUV00JICBCSVQoNSkJLyogRGF0YSBwYXJpdHkgZXJyb3IgZm9yIHRhcmdldCB3cml0ZSAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX1BFRElUUk0JICBCSVQoNCkJLyogUEVSUiBkZXRlY3Rpb24gZm9yIHRhcmdldCByZWFkICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fVEFESU1NCSAgQklUKDMpCS8qIFRhcmdldCBhYm9ydCBmb3IgbWFzdGVyICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fTUFESU1NCSAgQklUKDIpCS8qIE1hc3RlciBhYm9ydCBmb3IgbWFzdGVyICovCisgICNkZWZpbmUgU0g0X1BDSUlOVE1fTVdQRElNCSAgQklUKDEpCS8qIE1hc3RlciB3cml0ZSBkYXRhIHBhcml0eSBlcnJvciAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRNX01SRFBFSU0JICBCSVQoMCkJLyogTWFzdGVyIHJlYWQgZGF0YSBwYXJpdHkgZXJyb3IgKi8KICNkZWZpbmUgU0g0X1BDSUFMUgkJMHgxMUMJCS8qIEVycm9yIEFkZHJlc3MgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU0g0X1BDSUNMUgkJMHgxMjAJCS8qIEVycm9yIENvbW1hbmQvRGF0YSAqLwogICAjZGVmaW5lIFNINF9QQ0lDTFJfTVBJTwkgIDB4ODAwMDAwMDAKQEAgLTYxLDcgKzcyLDcgQEAKICNkZWZpbmUgU0g0X1BDSUFJTlQJCTB4MTMwCQkvKiBBcmJpdGVyIEludGVycnVwdCBSZWdpc3RlciAqLwogICAjZGVmaW5lIFNINF9QQ0lBSU5UX01CS04JICAweDAwMDAyMDAwCS8qIE1hc3RlciBCcm9rZW4gSW50ZXJydXB0ICovCiAgICNkZWZpbmUgU0g0X1BDSUFJTlRfVEJUTwkgIDB4MDAwMDEwMDAJLyogVGFyZ2V0IEJ1cyBUaW1lIE91dCAqLwotICAjZGVmaW5lIFNINF9QQ0lBSU5UX01CVE8JICAweDAwMDAxMDAwCS8qIE1hc3RlciBCdXMgVGltZSBPdXQgKi8KKyAgI2RlZmluZSBTSDRfUENJQUlOVF9NQlRPCSAgMHgwMDAwMDgwMAkvKiBNYXN0ZXIgQnVzIFRpbWUgT3V0ICovCiAgICNkZWZpbmUgU0g0X1BDSUFJTlRfVEFCVAkgIDB4MDAwMDAwMDgJLyogVGFyZ2V0IEFib3J0ICovCiAgICNkZWZpbmUgU0g0X1BDSUFJTlRfTUFCVAkgIDB4MDAwMDAwMDQJLyogTWFzdGVyIEFib3J0ICovCiAgICNkZWZpbmUgU0g0X1BDSUFJTlRfUkRQRQkgIDB4MDAwMDAwMDIJLyogUmVhZCBEYXRhIFBhcml0eSBFcnJvciAqLwpAQCAtMTUxLDcgKzE2Miw2IEBACiAKIC8qIGFyY2gvc2gva2VybmVsL2RyaXZlcnMvcGNpL29wcy1zaDQuYyAqLwogZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIHNoNF9wY2lfb3BzOwotaW50IHNoNF9wY2lfY2hlY2tfZGlyZWN0KHN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbik7CiBpbnQgcGNpX2ZpeHVwX3BjaWMoc3RydWN0IHBjaV9jaGFubmVsICpjaGFuKTsKIAogc3RydWN0IHNoNF9wY2lfYWRkcmVzc19zcGFjZSB7CkBAIC0xNjcsMTMgKzE3NywxMyBAQAogc3RhdGljIGlubGluZSB2b2lkIHBjaV93cml0ZV9yZWcoc3RydWN0IHBjaV9jaGFubmVsICpjaGFuLAogCQkJCSB1bnNpZ25lZCBsb25nIHZhbCwgdW5zaWduZWQgbG9uZyByZWcpCiB7Ci0JY3RybF9vdXRsKHZhbCwgY2hhbi0+cmVnX2Jhc2UgKyByZWcpOworCV9fcmF3X3dyaXRlbCh2YWwsIGNoYW4tPnJlZ19iYXNlICsgcmVnKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBjaV9yZWFkX3JlZyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4sCiAJCQkJCSB1bnNpZ25lZCBsb25nIHJlZykKIHsKLQlyZXR1cm4gY3RybF9pbmwoY2hhbi0+cmVnX2Jhc2UgKyByZWcpOworCXJldHVybiBfX3Jhd19yZWFkbChjaGFuLT5yZWdfYmFzZSArIHJlZyk7CiB9CiAKICNlbmRpZiAvKiBfX1BDSV9TSDRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g1LmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDUuYwppbmRleCA4NzNlZDJiLi4wYmYyOTZjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDUuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDUuYwpAQCAtODksMTQgKzg5LDEzIEBACiAJcmV0dXJuIElSUV9OT05FOwogfQogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNV9pb19yZXNvdXJjZSA9IHsgLyogcGxhY2UgaG9sZGVyICovIH07Ci1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNV9tZW1fcmVzb3VyY2UgPSB7IC8qIHBsYWNlIGhvbGRlciAqLyB9Oworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDVfcGNpX3Jlc291cmNlc1syXTsKIAogc3RhdGljIHN0cnVjdCBwY2lfY2hhbm5lbCBzaDVwY2lfY29udHJvbGxlciA9IHsKIAkucGNpX29wcwkJPSAmc2g1X3BjaV9vcHMsCi0JLm1lbV9yZXNvdXJjZQkJPSAmc2g1X21lbV9yZXNvdXJjZSwKKwkucmVzb3VyY2VzCQk9IHNoNV9wY2lfcmVzb3VyY2VzLAorCS5ucl9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShzaDVfcGNpX3Jlc291cmNlcyksCiAJLm1lbV9vZmZzZXQJCT0gMHgwMDAwMDAwMCwKLQkuaW9fcmVzb3VyY2UJCT0gJnNoNV9pb19yZXNvdXJjZSwKIAkuaW9fb2Zmc2V0CQk9IDB4MDAwMDAwMDAsCiB9OwogCkBAIC0yMTAsMTQgKzIwOSwxMiBAQAogICAgICAgICBTSDVQQ0lfV1JJVEUoQUlOVE0sIH4wKTsKICAgICAgICAgU0g1UENJX1dSSVRFKFBJTlRNLCB+MCk7CiAKLQlzaDVfaW9fcmVzb3VyY2Uuc3RhcnQgPSBQQ0lfSU9fQVJFQTsKLQlzaDVfaW9fcmVzb3VyY2UuZW5kID0gUENJX0lPX0FSRUEgKyAweDEwMDAwOworCXNoNV9wY2lfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gUENJX0lPX0FSRUE7CisJc2g1X3BjaV9yZXNvdXJjZXNbMF0uZW5kID0gUENJX0lPX0FSRUEgKyAweDEwMDAwOwogCi0Jc2g1X21lbV9yZXNvdXJjZS5zdGFydCA9IG1lbVN0YXJ0OwotCXNoNV9tZW1fcmVzb3VyY2UuZW5kID0gbWVtU3RhcnQgKyBtZW1TaXplOworCXNoNV9wY2lfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gbWVtU3RhcnQ7CisJc2g1X3BjaV9yZXNvdXJjZXNbMV0uZW5kID0gbWVtU3RhcnQgKyBtZW1TaXplOwogCi0JcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoJnNoNXBjaV9jb250cm9sbGVyKTsKLQotCXJldHVybiAwOworCXJldHVybiByZWdpc3Rlcl9wY2lfY29udHJvbGxlcigmc2g1cGNpX2NvbnRyb2xsZXIpOwogfQogYXJjaF9pbml0Y2FsbChzaDVwY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDUuaCBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNS5oCmluZGV4IGYyNzc2MjguLjNmMDFkZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNS5oCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNS5oCkBAIC04NiwxNCArODYsMTQgQEAKIC8qICNkZWZpbmUgUENJU0g1X1ZDUl9SRUcoeCkgICAgICAgICAgICAgICAgKCBTSDVQQ0lfVkNSX0JBU0UgKFBDSVNINV9WQ1JfIyN4KSkgKi8KIAogLyogV3JpdGUgSS9PIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBTSDVQQ0lfV1JJVEUocmVnLHZhbCkgICAgICAgIGN0cmxfb3V0bCgodTMyKSh2YWwpLFBDSVNINV9JQ1JfUkVHKHJlZykpCi0jZGVmaW5lIFNINVBDSV9XUklURV9TSE9SVChyZWcsdmFsKSAgY3RybF9vdXR3KCh1MTYpKHZhbCksUENJU0g1X0lDUl9SRUcocmVnKSkKLSNkZWZpbmUgU0g1UENJX1dSSVRFX0JZVEUocmVnLHZhbCkgICBjdHJsX291dGIoKHU4KSh2YWwpLFBDSVNINV9JQ1JfUkVHKHJlZykpCisjZGVmaW5lIFNINVBDSV9XUklURShyZWcsdmFsKSAgICAgICAgX19yYXdfd3JpdGVsKCh1MzIpKHZhbCksUENJU0g1X0lDUl9SRUcocmVnKSkKKyNkZWZpbmUgU0g1UENJX1dSSVRFX1NIT1JUKHJlZyx2YWwpICBfX3Jhd193cml0ZXcoKHUxNikodmFsKSxQQ0lTSDVfSUNSX1JFRyhyZWcpKQorI2RlZmluZSBTSDVQQ0lfV1JJVEVfQllURShyZWcsdmFsKSAgIF9fcmF3X3dyaXRlYigodTgpKHZhbCksUENJU0g1X0lDUl9SRUcocmVnKSkKIAogLyogUmVhZCBJL08gZnVuY3Rpb25zICovCi0jZGVmaW5lIFNINVBDSV9SRUFEKHJlZykgICAgICAgICAgICAgY3RybF9pbmwoUENJU0g1X0lDUl9SRUcocmVnKSkKLSNkZWZpbmUgU0g1UENJX1JFQURfU0hPUlQocmVnKSAgICAgICBjdHJsX2ludyhQQ0lTSDVfSUNSX1JFRyhyZWcpKQotI2RlZmluZSBTSDVQQ0lfUkVBRF9CWVRFKHJlZykgICAgICAgIGN0cmxfaW5iKFBDSVNINV9JQ1JfUkVHKHJlZykpCisjZGVmaW5lIFNINVBDSV9SRUFEKHJlZykgICAgICAgICAgICAgX19yYXdfcmVhZGwoUENJU0g1X0lDUl9SRUcocmVnKSkKKyNkZWZpbmUgU0g1UENJX1JFQURfU0hPUlQocmVnKSAgICAgICBfX3Jhd19yZWFkdyhQQ0lTSDVfSUNSX1JFRyhyZWcpKQorI2RlZmluZSBTSDVQQ0lfUkVBRF9CWVRFKHJlZykgICAgICAgIF9fcmF3X3JlYWRiKFBDSVNINV9JQ1JfUkVHKHJlZykpCiAKIC8qIFNldCBQQ0kgY29uZmlnIGJpdHMgKi8KICNkZWZpbmUgU0VUX0NPTkZJR19CSVRTKGJ1cyxkZXZmbix3aGVyZSkgICgoKChidXMpIDw8IDE2KSB8ICgoZGV2Zm4pIDw8IDgpIHwgKCh3aGVyZSkgJiB+MykpIHwgMHg4MDAwMDAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzUxLmMKaW5kZXggNzBjMTk5OS4uMTc4MTFlNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzUxLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzUxLmMKQEAgLTQ0LDI1ICs0NCwyNSBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc1MV9pb19yZXNvdXJjZSA9IHsKLQkubmFtZQk9ICJTSDc3NTFfSU8iLAotCS5zdGFydAk9IFNINzc1MV9QQ0lfSU9fQkFTRSwKLQkuZW5kCT0gU0g3NzUxX1BDSV9JT19CQVNFICsgU0g3NzUxX1BDSV9JT19TSVpFIC0gMSwKLQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc1MV9tZW1fcmVzb3VyY2UgPSB7Ci0JLm5hbWUJPSAiU0g3NzUxX21lbSIsCi0JLnN0YXJ0CT0gU0g3NzUxX1BDSV9NRU1PUllfQkFTRSwKLQkuZW5kCT0gU0g3NzUxX1BDSV9NRU1PUllfQkFTRSArIFNINzc1MV9QQ0lfTUVNX1NJWkUgLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc1MV9wY2lfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQk9ICJTSDc3NTFfSU8iLAorCQkuc3RhcnQJPSBTSDc3NTFfUENJX0lPX0JBU0UsCisJCS5lbmQJPSBTSDc3NTFfUENJX0lPX0JBU0UgKyBTSDc3NTFfUENJX0lPX1NJWkUgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCisJfSwgeworCQkubmFtZQk9ICJTSDc3NTFfbWVtIiwKKwkJLnN0YXJ0CT0gU0g3NzUxX1BDSV9NRU1PUllfQkFTRSwKKwkJLmVuZAk9IFNINzc1MV9QQ0lfTUVNT1JZX0JBU0UgKyBTSDc3NTFfUENJX01FTV9TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfY2hhbm5lbCBzaDc3NTFfcGNpX2NvbnRyb2xsZXIgPSB7CiAJLnBjaV9vcHMJPSAmc2g0X3BjaV9vcHMsCi0JLm1lbV9yZXNvdXJjZQk9ICZzaDc3NTFfbWVtX3Jlc291cmNlLAorCS5yZXNvdXJjZXMJPSBzaDc3NTFfcGNpX3Jlc291cmNlcywKKwkubnJfcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzaDc3NTFfcGNpX3Jlc291cmNlcyksCiAJLm1lbV9vZmZzZXQJPSAweDAwMDAwMDAwLAotCS5pb19yZXNvdXJjZQk9ICZzaDc3NTFfaW9fcmVzb3VyY2UsCiAJLmlvX29mZnNldAk9IDB4MDAwMDAwMDAsCiAJLmlvX21hcF9iYXNlCT0gU0g3NzUxX1BDSV9JT19CQVNFLAogfTsKQEAgLTc5LDcgKzc5LDYgQEAKIAlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4gPSAmc2g3NzUxX3BjaV9jb250cm9sbGVyOwogCXVuc2lnbmVkIGludCBpZDsKIAl1MzIgd29yZCwgcmVnOwotCWludCByZXQ7CiAKIAlwcmludGsoS0VSTl9OT1RJQ0UgIlBDSTogU3RhcnRpbmcgaW50aWFsaXphdGlvbi5cbiIpOwogCkBAIC05MywxMyArOTIsMTAgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKChyZXQgPSBzaDRfcGNpX2NoZWNrX2RpcmVjdChjaGFuKSkgIT0gMCkKLQkJcmV0dXJuIHJldDsKLQogCS8qIFNldCB0aGUgQkNSJ3MgdG8gZW5hYmxlIFBDSSBhY2Nlc3MgKi8KLQlyZWcgPSBjdHJsX2lubChTSDc3NTFfQkNSMSk7CisJcmVnID0gX19yYXdfcmVhZGwoU0g3NzUxX0JDUjEpOwogCXJlZyB8PSAweDgwMDAwOwotCWN0cmxfb3V0bChyZWcsIFNINzc1MV9CQ1IxKTsKKwlfX3Jhd193cml0ZWwocmVnLCBTSDc3NTFfQkNSMSk7CiAKIAkvKiBUdXJuIHRoZSBjbG9ja3MgYmFjayBvbiAobm90IGRvbmUgaW4gcmVzZXQpKi8KIAlwY2lfd3JpdGVfcmVnKGNoYW4sIDAsIFNINF9QQ0lDTEtSKTsKQEAgLTEzMiwxMyArMTI4LDEzIEBACiAJLyogU2V0IHRoZSBsb2NhbCAxNk1CIFBDSSBtZW1vcnkgc3BhY2Ugd2luZG93IHRvCiAJICogdGhlIGxvd2VzdCBQQ0kgbWFwcGVkIGFkZHJlc3MKIAkgKi8KLQl3b3JkID0gY2hhbi0+bWVtX3Jlc291cmNlLT5zdGFydCAmIFNINF9QQ0lNQlJfTUFTSzsKKwl3b3JkID0gY2hhbi0+cmVzb3VyY2VzWzFdLnN0YXJ0ICYgU0g0X1BDSU1CUl9NQVNLOwogCXByX2RlYnVnKCJQQ0k6IFNldHRpbmcgdXBwZXIgYml0cyBvZiBNZW1vcnkgd2luZG93IHRvIDB4JXhcbiIsIHdvcmQpOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgd29yZCAsIFNINF9QQ0lNQlIpOwogCiAJLyogTWFrZSBzdXJlIHRoZSBNU0IncyBvZiBJTyB3aW5kb3cgYXJlIHNldCB0byBhY2Nlc3MgUENJIHNwYWNlCiAJICogY29ycmVjdGx5ICovCi0Jd29yZCA9IGNoYW4tPmlvX3Jlc291cmNlLT5zdGFydCAmIFNINF9QQ0lJT0JSX01BU0s7CisJd29yZCA9IGNoYW4tPnJlc291cmNlc1swXS5zdGFydCAmIFNINF9QQ0lJT0JSX01BU0s7CiAJcHJfZGVidWcoIlBDSTogU2V0dGluZyB1cHBlciBiaXRzIG9mIElPIHdpbmRvdyB0byAweCV4XG4iLCB3b3JkKTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIHdvcmQsIFNINF9QQ0lJT0JSKTsKIApAQCAtMTU5LDEzICsxNTUsMTMgQEAKIAkJcmV0dXJuIC0xOwogCiAJLyogY29uZmlndXJlIHRoZSB3YWl0IGNvbnRyb2wgcmVnaXN0ZXJzICovCi0Jd29yZCA9IGN0cmxfaW5sKFNINzc1MV9XQ1IxKTsKKwl3b3JkID0gX19yYXdfcmVhZGwoU0g3NzUxX1dDUjEpOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgd29yZCwgU0g0X1BDSVdDUjEpOwotCXdvcmQgPSBjdHJsX2lubChTSDc3NTFfV0NSMik7CisJd29yZCA9IF9fcmF3X3JlYWRsKFNINzc1MV9XQ1IyKTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIHdvcmQsIFNINF9QQ0lXQ1IyKTsKLQl3b3JkID0gY3RybF9pbmwoU0g3NzUxX1dDUjMpOworCXdvcmQgPSBfX3Jhd19yZWFkbChTSDc3NTFfV0NSMyk7CiAJcGNpX3dyaXRlX3JlZyhjaGFuLCB3b3JkLCBTSDRfUENJV0NSMyk7Ci0Jd29yZCA9IGN0cmxfaW5sKFNINzc1MV9NQ1IpOworCXdvcmQgPSBfX3Jhd19yZWFkbChTSDc3NTFfTUNSKTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIHdvcmQsIFNINF9QQ0lNQ1IpOwogCiAJLyogTk9URTogSSdtIGlnbm9yaW5nIHRoZSBQQ0kgZXJyb3IgSVJRcyBmb3Igbm93Li4KQEAgLTE4MCw4ICsxNzYsNiBAQAogCXdvcmQgPSBTSDRfUENJQ1JfUFJFRklYIHwgU0g0X1BDSUNSX0NGSU4gfCBTSDRfUENJQ1JfQVJCTTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIHdvcmQsIFNINF9QQ0lDUik7CiAKLQlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcihjaGFuKTsKLQotCXJldHVybiAwOworCXJldHVybiByZWdpc3Rlcl9wY2lfY29udHJvbGxlcihjaGFuKTsKIH0KIGFyY2hfaW5pdGNhbGwoc2g3NzUxX3BjaV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMKaW5kZXggMzIzYjkyZC4uZmZkY2JmMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogTG93LUxldmVsIFBDSSBTdXBwb3J0IGZvciB0aGUgU0g3NzgwCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTExLDUyICsxMSwyNDAgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgInBjaS1zaDQuaCIKKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3Nzg1X2lvX3Jlc291cmNlID0gewotCS5uYW1lCT0gIlNINzc4NV9JTyIsCi0JLnN0YXJ0CT0gU0g3NzgwX1BDSV9JT19CQVNFLAotCS5lbmQJPSBTSDc3ODBfUENJX0lPX0JBU0UgKyBTSDc3ODBfUENJX0lPX1NJWkUgLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3Nzg1X21lbV9yZXNvdXJjZSA9IHsKLQkubmFtZQk9ICJTSDc3ODVfbWVtIiwKLQkuc3RhcnQJPSBTSDc3ODBfUENJX01FTU9SWV9CQVNFLAotCS5lbmQJPSBTSDc3ODBfUENJX01FTU9SWV9CQVNFICsgU0g3NzgwX1BDSV9NRU1fU0laRSAtIDEsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3Nzg1X3BjaV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIlBDSSBJTyIsCisJCS5zdGFydAk9IDB4MTAwMCwKKwkJLmVuZAk9IFNaXzRNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwl9LCB7CisJCS5uYW1lCT0gIlBDSSBNRU0gMCIsCisJCS5zdGFydAk9IDB4ZmQwMDAwMDAsCisJCS5lbmQJPSAweGZkMDAwMDAwICsgU1pfMTZNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkubmFtZQk9ICJQQ0kgTUVNIDEiLAorCQkuc3RhcnQJPSAweDEwMDAwMDAwLAorCQkuZW5kCT0gMHgxMDAwMDAwMCArIFNaXzY0TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLyoKKwkJICogMzItYml0IG9ubHkgcmVzb3VyY2VzIG11c3QgYmUgbGFzdC4KKwkJICovCisJCS5uYW1lCT0gIlBDSSBNRU0gMiIsCisJCS5zdGFydAk9IDB4YzAwMDAwMDAsCisJCS5lbmQJPSAweGMwMDAwMDAwICsgU1pfNTEyTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMzJCSVQsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2NoYW5uZWwgc2g3NzgwX3BjaV9jb250cm9sbGVyID0gewogCS5wY2lfb3BzCT0gJnNoNF9wY2lfb3BzLAotCS5tZW1fcmVzb3VyY2UJPSAmc2g3Nzg1X21lbV9yZXNvdXJjZSwKLQkubWVtX29mZnNldAk9IDB4MDAwMDAwMDAsCi0JLmlvX3Jlc291cmNlCT0gJnNoNzc4NV9pb19yZXNvdXJjZSwKLQkuaW9fb2Zmc2V0CT0gMHgwMDAwMDAwMCwKLQkuaW9fbWFwX2Jhc2UJPSBTSDc3ODBfUENJX0lPX0JBU0UsCisJLnJlc291cmNlcwk9IHNoNzc4NV9wY2lfcmVzb3VyY2VzLAorCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoNzc4NV9wY2lfcmVzb3VyY2VzKSwKKwkuaW9fb2Zmc2V0CT0gMCwKKwkubWVtX29mZnNldAk9IDAsCisJLmlvX21hcF9iYXNlCT0gMHhmZTIwMDAwMCwKKwkuc2Vycl9pcnEJPSBldnQyaXJxKDB4YTAwKSwKKwkuZXJyX2lycQk9IGV2dDJpcnEoMHhhYTApLAogfTsKIAotc3RhdGljIHN0cnVjdCBzaDRfcGNpX2FkZHJlc3NfbWFwIHNoNzc4MF9wY2lfbWFwID0gewotCS53aW5kb3cwCT0gewotI2lmIGRlZmluZWQoQ09ORklHXzMyQklUKQotCQkuYmFzZQk9IFNINzc4MF8zMkJJVF9ERFJfQkFTRV9BRERSLAotCQkuc2l6ZQk9IDB4NDAwMDAwMDAsCi0jZWxzZQotCQkuYmFzZQk9IFNINzc4MF9DUzBfQkFTRV9BRERSLAotCQkuc2l6ZQk9IDB4MjAwMDAwMDAsCi0jZW5kaWYKLQl9LAorc3RydWN0IHBjaV9lcnJvcnMgeworCXVuc2lnbmVkIGludAltYXNrOworCWNvbnN0IGNoYXIJKnN0cjsKK30gcGNpX2FyYml0ZXJfZXJyb3JzW10gPSB7CisJeyBTSDRfUENJQUlOVF9NQktOLAkibWFzdGVyIGJyb2tlbiIgfSwKKwl7IFNINF9QQ0lBSU5UX1RCVE8sCSJ0YXJnZXQgYnVzIHRpbWUgb3V0IiB9LAorCXsgU0g0X1BDSUFJTlRfTUJUTywJIm1hc3RlciBidXMgdGltZSBvdXQiIH0sCisJeyBTSDRfUENJQUlOVF9UQUJULAkidGFyZ2V0IGFib3J0IiB9LAorCXsgU0g0X1BDSUFJTlRfTUFCVCwJIm1hc3RlciBhYm9ydCIgfSwKKwl7IFNINF9QQ0lBSU5UX1JEUEUsCSJyZWFkIGRhdGEgcGFyaXR5IGVycm9yIiB9LAorCXsgU0g0X1BDSUFJTlRfV0RQRSwJIndyaXRlIGRhdGEgcGFyaXR5IGVycm9yIiB9LAorfSwgcGNpX2ludGVycnVwdF9lcnJvcnNbXSA9IHsKKwl7IFNINF9QQ0lJTlRfTUxDSywJIm1hc3RlciBsb2NrIGVycm9yIiB9LAorCXsgU0g0X1BDSUlOVF9UQUJULAkidGFyZ2V0LXRhcmdldCBhYm9ydCIgfSwKKwl7IFNINF9QQ0lJTlRfVFJFVCwJInRhcmdldCByZXRyeSB0aW1lIG91dCIgfSwKKwl7IFNINF9QQ0lJTlRfTUZERSwJIm1hc3RlciBmdW5jdGlvbiBkaXNhYmxlIGVyb3JyIiB9LAorCXsgU0g0X1BDSUlOVF9QUlRZLAkiYWRkcmVzcyBwYXJpdHkgZXJyb3IiIH0sCisJeyBTSDRfUENJSU5UX1NFUlIsCSJTRVJSIiB9LAorCXsgU0g0X1BDSUlOVF9UV0RQLAkiZGF0YSBwYXJpdHkgZXJyb3IgZm9yIHRhcmdldCB3cml0ZSIgfSwKKwl7IFNINF9QQ0lJTlRfVFJEUCwJIlBFUlIgZGV0ZWN0ZWQgZm9yIHRhcmdldCByZWFkIiB9LAorCXsgU0g0X1BDSUlOVF9NVEFCVCwJInRhcmdldCBhYm9ydCBmb3IgbWFzdGVyIiB9LAorCXsgU0g0X1BDSUlOVF9NTUFCVCwJIm1hc3RlciBhYm9ydCBmb3IgbWFzdGVyIiB9LAorCXsgU0g0X1BDSUlOVF9NV1BELAkibWFzdGVyIHdyaXRlIGRhdGEgcGFyaXR5IGVycm9yIiB9LAorCXsgU0g0X1BDSUlOVF9NUlBELAkibWFzdGVyIHJlYWQgZGF0YSBwYXJpdHkgZXJyb3IiIH0sCiB9OwogCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2g3NzgwX3BjaV9lcnJfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UgPSBkZXZfaWQ7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJdW5zaWduZWQgaW50IGNtZDsKKwlpbnQgaTsKKworCWFkZHIgPSBfX3Jhd19yZWFkbChob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lBTFIpOworCisJLyoKKwkgKiBIYW5kbGUgc3RhdHVzIGVycm9ycy4KKwkgKi8KKwlzdGF0dXMgPSBfX3Jhd19yZWFkdyhob3NlLT5yZWdfYmFzZSArIFBDSV9TVEFUVVMpOworCWlmIChzdGF0dXMgJiAoUENJX1NUQVRVU19QQVJJVFkgfAorCQkgICAgICBQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSB8CisJCSAgICAgIFBDSV9TVEFUVVNfU0lHX1RBUkdFVF9BQk9SVCB8CisJCSAgICAgIFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVCB8CisJCSAgICAgIFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVCkpIHsKKwkJY21kID0gcGNpYmlvc19oYW5kbGVfc3RhdHVzX2Vycm9ycyhhZGRyLCBzdGF0dXMsIGhvc2UpOworCQlpZiAobGlrZWx5KGNtZCkpCisJCQlfX3Jhd193cml0ZXcoY21kLCBob3NlLT5yZWdfYmFzZSArIFBDSV9TVEFUVVMpOworCX0KKworCS8qCisJICogSGFuZGxlIGFyYml0ZXIgZXJyb3JzLgorCSAqLworCXN0YXR1cyA9IF9fcmF3X3JlYWRsKGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUFJTlQpOworCWZvciAoaSA9IGNtZCA9IDA7IGkgPCBBUlJBWV9TSVpFKHBjaV9hcmJpdGVyX2Vycm9ycyk7IGkrKykgeworCQlpZiAoc3RhdHVzICYgcGNpX2FyYml0ZXJfZXJyb3JzW2ldLm1hc2spIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6ICVzLCBhZGRyPSUwOGx4XG4iLAorCQkJICAgICAgIHBjaV9hcmJpdGVyX2Vycm9yc1tpXS5zdHIsIGFkZHIpOworCQkJY21kIHw9IHBjaV9hcmJpdGVyX2Vycm9yc1tpXS5tYXNrOworCQl9CisJfQorCV9fcmF3X3dyaXRlbChjbWQsIGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUFJTlQpOworCisJLyoKKwkgKiBIYW5kbGUgdGhlIHJlbWFpbmluZyBQQ0kgZXJyb3JzLgorCSAqLworCXN0YXR1cyA9IF9fcmF3X3JlYWRsKGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUlOVCk7CisJZm9yIChpID0gY21kID0gMDsgaSA8IEFSUkFZX1NJWkUocGNpX2ludGVycnVwdF9lcnJvcnMpOyBpKyspIHsKKwkJaWYgKHN0YXR1cyAmIHBjaV9pbnRlcnJ1cHRfZXJyb3JzW2ldLm1hc2spIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6ICVzLCBhZGRyPSUwOGx4XG4iLAorCQkJICAgICAgIHBjaV9pbnRlcnJ1cHRfZXJyb3JzW2ldLnN0ciwgYWRkcik7CisJCQljbWQgfD0gcGNpX2ludGVycnVwdF9lcnJvcnNbaV0ubWFzazsKKwkJfQorCX0KKwlfX3Jhd193cml0ZWwoY21kLCBob3NlLT5yZWdfYmFzZSArIFNINF9QQ0lJTlQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2g3NzgwX3BjaV9zZXJyX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHBjaV9jaGFubmVsICpob3NlID0gZGV2X2lkOworCisJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogc3lzdGVtIGVycm9yIHJlY2VpdmVkOiAiKTsKKwlwY2liaW9zX3JlcG9ydF9zdGF0dXMoUENJX1NUQVRVU19TSUdfU1lTVEVNX0VSUk9SLCAxKTsKKwlwcmludGsoIlxuIik7CisKKwkvKiBEZWFzc2VydCBTRVJSICovCisJX19yYXdfd3JpdGVsKFNINF9QQ0lJTlRNX1NESU0sIGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUlOVE0pOworCisJLyogQmFjayBvZmYgdGhlIElSUSBmb3IgYXdoaWxlICovCisJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CisJaG9zZS0+c2Vycl90aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaOworCWFkZF90aW1lcigmaG9zZS0+c2Vycl90aW1lcik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNoNzc4MF9wY2lfc2V0dXBfaXJxcyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpCit7CisJaW50IHJldDsKKworCS8qIENsZWFyIG91dCBQQ0kgYXJiaXRlciBJUlFzICovCisJX19yYXdfd3JpdGVsKDAsIGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUFJTlQpOworCisJLyogQ2xlYXIgYWxsIGVycm9yIGNvbmRpdGlvbnMgKi8KKwlfX3Jhd193cml0ZXcoUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFkgIHwgXAorCQkgICAgIFBDSV9TVEFUVVNfU0lHX1NZU1RFTV9FUlJPUiB8IFwKKwkJICAgICBQQ0lfU1RBVFVTX1JFQ19NQVNURVJfQUJPUlQgfCBcCisJCSAgICAgUENJX1NUQVRVU19SRUNfVEFSR0VUX0FCT1JUIHwgXAorCQkgICAgIFBDSV9TVEFUVVNfU0lHX1RBUkdFVF9BQk9SVCB8IFwKKwkJICAgICBQQ0lfU1RBVFVTX1BBUklUWSwgaG9zZS0+cmVnX2Jhc2UgKyBQQ0lfU1RBVFVTKTsKKworCXJldCA9IHJlcXVlc3RfaXJxKGhvc2UtPnNlcnJfaXJxLCBzaDc3ODBfcGNpX3NlcnJfaXJxLCBJUlFGX0RJU0FCTEVELAorCQkJICAiUENJIFNFUlIgaW50ZXJydXB0IiwgaG9zZSk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IEZhaWxlZCBob29raW5nIFNFUlIgSVJRXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKgorCSAqIFRoZSBQQ0kgRVJSIElSUSBuZWVkcyB0byBiZSBJUlFGX1NIQVJFRCBzaW5jZSBhbGwgb2YgdGhlIHBvd2VyCisJICogZG93biBJUlEgdmVjdG9ycyBhcmUgcm91dGVkIHRocm91Z2ggdGhlIEVSUiBJUlEgdmVjdG9yLiBXZQorCSAqIG9ubHkgcmVxdWVzdF9pcnEoKSBvbmNlIGFzIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgbWFza2luZworCSAqIHNvdXJjZSBmb3IgbXVsdGlwbGUgZXZlbnRzLgorCSAqLworCXJldCA9IHJlcXVlc3RfaXJxKGhvc2UtPmVycl9pcnEsIHNoNzc4MF9wY2lfZXJyX2lycSwgSVJRRl9TSEFSRUQsCisJCQkgICJQQ0kgRVJSIGludGVycnVwdCIsIGhvc2UpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCWZyZWVfaXJxKGhvc2UtPnNlcnJfaXJxLCBob3NlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBVbm1hc2sgYWxsIG9mIHRoZSBhcmJpdGVyIElSUXMuICovCisJX19yYXdfd3JpdGVsKFNINF9QQ0lBSU5UX01CS04gfCBTSDRfUENJQUlOVF9UQlRPIHwgU0g0X1BDSUFJTlRfTUJUTyB8IFwKKwkJICAgICBTSDRfUENJQUlOVF9UQUJUIHwgU0g0X1BDSUFJTlRfTUFCVCB8IFNINF9QQ0lBSU5UX1JEUEUgfCBcCisJCSAgICAgU0g0X1BDSUFJTlRfV0RQRSwgaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJQUlOVE0pOworCisJLyogVW5tYXNrIGFsbCBvZiB0aGUgUENJIElSUXMgKi8KKwlfX3Jhd193cml0ZWwoU0g0X1BDSUlOVE1fVFRBRElNICB8IFNINF9QQ0lJTlRNX1RNVE9JTSAgfCBcCisJCSAgICAgU0g0X1BDSUlOVE1fTURFSU0gICB8IFNINF9QQ0lJTlRNX0FQRURJTSAgfCBcCisJCSAgICAgU0g0X1BDSUlOVE1fU0RJTSAgICB8IFNINF9QQ0lJTlRNX0RQRUlUV00gfCBcCisJCSAgICAgU0g0X1BDSUlOVE1fUEVESVRSTSB8IFNINF9QQ0lJTlRNX1RBRElNTSAgfCBcCisJCSAgICAgU0g0X1BDSUlOVE1fTUFESU1NICB8IFNINF9QQ0lJTlRNX01XUERJTSAgfCBcCisJCSAgICAgU0g0X1BDSUlOVE1fTVJEUEVJTSwgaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJSU5UTSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHNoNzc4MF9wY2lfdGVhcmRvd25faXJxcyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpCit7CisJZnJlZV9pcnEoaG9zZS0+ZXJyX2lycSwgaG9zZSk7CisJZnJlZV9pcnEoaG9zZS0+c2Vycl9pcnEsIGhvc2UpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc2g3NzgwX3BjaTY2X2luaXQoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKQoreworCXVuc2lnbmVkIGludCB0bXA7CisKKwlpZiAoIXBjaV9pc182Nm1oel9jYXBhYmxlKGhvc2UsIDAsIDApKQorCQlyZXR1cm47CisKKwkvKiBFbmFibGUgcmVnaXN0ZXIgYWNjZXNzICovCisJdG1wID0gX19yYXdfcmVhZGwoaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJQ1IpOworCXRtcCB8PSBTSDRfUENJQ1JfUFJFRklYOworCV9fcmF3X3dyaXRlbCh0bXAsIGhvc2UtPnJlZ19iYXNlICsgU0g0X1BDSUNSKTsKKworCS8qIEVuYWJsZSA2Nk1IeiBvcGVyYXRpb24gKi8KKwl0bXAgPSBfX3Jhd19yZWFkdyhob3NlLT5yZWdfYmFzZSArIFBDSV9TVEFUVVMpOworCXRtcCB8PSBQQ0lfU1RBVFVTXzY2TUhaOworCV9fcmF3X3dyaXRldyh0bXAsIGhvc2UtPnJlZ19iYXNlICsgUENJX1NUQVRVUyk7CisKKwkvKiBEb25lICovCisJdG1wID0gX19yYXdfcmVhZGwoaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJQ1IpOworCXRtcCB8PSBTSDRfUENJQ1JfUFJFRklYIHwgU0g0X1BDSUNSX0NGSU47CisJX19yYXdfd3JpdGVsKHRtcCwgaG9zZS0+cmVnX2Jhc2UgKyBTSDRfUENJQ1IpOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBzaDc3ODBfcGNpX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4gPSAmc2g3NzgwX3BjaV9jb250cm9sbGVyOworCXBoeXNfYWRkcl90IG1lbXBoeXM7CisJc2l6ZV90IG1lbXNpemU7CiAJdW5zaWduZWQgaW50IGlkOwotCWNvbnN0IGNoYXIgKnR5cGUgPSBOVUxMOwotCWludCByZXQ7Ci0JdTMyIHdvcmQ7CisJY29uc3QgY2hhciAqdHlwZTsKKwlpbnQgcmV0LCBpOwogCiAJcHJpbnRrKEtFUk5fTk9USUNFICJQQ0k6IFN0YXJ0aW5nIGludGlhbGl6YXRpb24uXG4iKTsKIApAQCAtNjUsMTcgKzI1MywyOCBAQAogCS8qIEVuYWJsZSBDUFUgYWNjZXNzIHRvIHRoZSBQQ0lDIHJlZ2lzdGVycy4gKi8KIAlfX3Jhd193cml0ZWwoUENJRUNSX0VOQkwsIFBDSUVDUik7CiAKLQlpZCA9IF9fcmF3X3JlYWR3KGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSVZJRCk7Ci0JaWYgKGlkICE9IFNINzc4MF9WRU5ET1JfSUQpIHsKKwkvKiBSZXNldCAqLworCV9fcmF3X3dyaXRlbChTSDRfUENJQ1JfUFJFRklYIHwgU0g0X1BDSUNSX1BSU1QsCisJCSAgICAgY2hhbi0+cmVnX2Jhc2UgKyBTSDRfUENJQ1IpOworCisJLyoKKwkgKiBXYWl0IGZvciBpdCB0byBjb21lIGJhY2sgdXAuIFRoZSBzcGVjIHNheXMgdG8gYWxsb3cgZm9yIHVwIHRvCisJICogMSBzZWNvbmQgYWZ0ZXIgdG9nZ2xpbmcgdGhlIHJlc2V0IHBpbiwgYnV0IGluIHByYWN0aWNlIDEwMG1zCisJICogaXMgbW9yZSB0aGFuIGVub3VnaC4KKwkgKi8KKwltZGVsYXkoMTAwKTsKKworCWlkID0gX19yYXdfcmVhZHcoY2hhbi0+cmVnX2Jhc2UgKyBQQ0lfVkVORE9SX0lEKTsKKwlpZiAoaWQgIT0gUENJX1ZFTkRPUl9JRF9SRU5FU0FTKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUENJOiBVbmtub3duIHZlbmRvciBJRCAweCUwNHguXG4iLCBpZCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlkID0gX19yYXdfcmVhZHcoY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJRElEKTsKLQl0eXBlID0gKGlkID09IFNINzc2M19ERVZJQ0VfSUQpCT8gIlNINzc2MyIgOgotCSAgICAgICAoaWQgPT0gU0g3NzgwX0RFVklDRV9JRCkgPyAiU0g3NzgwIiA6Ci0JICAgICAgIChpZCA9PSBTSDc3ODFfREVWSUNFX0lEKSA/ICJTSDc3ODEiIDoKLQkgICAgICAgKGlkID09IFNINzc4NV9ERVZJQ0VfSUQpID8gIlNINzc4NSIgOgorCWlkID0gX19yYXdfcmVhZHcoY2hhbi0+cmVnX2Jhc2UgKyBQQ0lfREVWSUNFX0lEKTsKKwl0eXBlID0gKGlkID09IFBDSV9ERVZJQ0VfSURfUkVORVNBU19TSDc3NjMpID8gIlNINzc2MyIgOgorCSAgICAgICAoaWQgPT0gUENJX0RFVklDRV9JRF9SRU5FU0FTX1NINzc4MCkgPyAiU0g3NzgwIiA6CisJICAgICAgIChpZCA9PSBQQ0lfREVWSUNFX0lEX1JFTkVTQVNfU0g3NzgxKSA/ICJTSDc3ODEiIDoKKwkgICAgICAgKGlkID09IFBDSV9ERVZJQ0VfSURfUkVORVNBU19TSDc3ODUpID8gIlNINzc4NSIgOgogCQkJCQkgIE5VTEw7CiAJaWYgKHVubGlrZWx5KCF0eXBlKSkgewogCQlwcmludGsoS0VSTl9FUlIgIlBDSTogRm91bmQgYW4gdW5zdXBwb3J0ZWQgUmVuZXNhcyBob3N0ICIKQEAgLTg1LDYyICsyODQsMTE5IEBACiAKIAlwcmludGsoS0VSTl9OT1RJQ0UgIlBDSTogRm91bmQgYSBSZW5lc2FzICVzIGhvc3QgIgogCSAgICAgICAiY29udHJvbGxlciwgcmV2aXNpb24gJWQuXG4iLCB0eXBlLAotCSAgICAgICBfX3Jhd19yZWFkYihjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lSSUQpKTsKKwkgICAgICAgX19yYXdfcmVhZGIoY2hhbi0+cmVnX2Jhc2UgKyBQQ0lfUkVWSVNJT05fSUQpKTsKIAotCWlmICgocmV0ID0gc2g0X3BjaV9jaGVja19kaXJlY3QoY2hhbikpICE9IDApCisJLyoKKwkgKiBOb3cgdGhyb3cgaXQgaW4gdG8gcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gbW9kZSBhbmQKKwkgKiBzdGFydCB0aGUgcmVhbCB3b3JrLgorCSAqLworCV9fcmF3X3dyaXRlbChTSDRfUENJQ1JfUFJFRklYLCBjaGFuLT5yZWdfYmFzZSArIFNINF9QQ0lDUik7CisKKwltZW1waHlzID0gX19wYShtZW1vcnlfc3RhcnQpOworCW1lbXNpemUgPSByb3VuZHVwX3Bvd19vZl90d28obWVtb3J5X2VuZCAtIG1lbW9yeV9zdGFydCk7CisKKwkvKgorCSAqIElmIHRoZXJlJ3MgbW9yZSB0aGFuIDUxMk1CIG9mIG1lbW9yeSwgd2UgbmVlZCB0byByb2xsIG92ZXIgdG8KKwkgKiBMQVIxL0xTUjEuCisJICovCisJaWYgKG1lbXNpemUgPiBTWl81MTJNKSB7CisJCV9fcmF3X3dyaXRlbChtZW1waHlzICsgU1pfNTEyTSwgY2hhbi0+cmVnX2Jhc2UgKyBTSDRfUENJTEFSMSk7CisJCV9fcmF3X3dyaXRlbCgoKChtZW1zaXplIC0gU1pfNTEyTSkgLSBTWl8xTSkgJiAweDFmZjAwMDAwKSB8IDEsCisJCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g0X1BDSUxTUjEpOworCQltZW1zaXplID0gU1pfNTEyTTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBPdGhlcndpc2UganVzdCB6ZXJvIGl0IG91dCBhbmQgZGlzYWJsZSBpdC4KKwkJICovCisJCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFNINF9QQ0lMQVIxKTsKKwkJX19yYXdfd3JpdGVsKDAsIGNoYW4tPnJlZ19iYXNlICsgU0g0X1BDSUxTUjEpOworCX0KKworCS8qCisJICogTEFSMC9MU1IwIGNvdmVycyB1cCB0byB0aGUgZmlyc3QgNTEyTUIsIHdoaWNoIGlzIGVub3VnaCB0bworCSAqIGNvdmVyIGFsbCBvZiBsb3dtZW0gb24gbW9zdCBwbGF0Zm9ybXMuCisJICovCisJX19yYXdfd3JpdGVsKG1lbXBoeXMsIGNoYW4tPnJlZ19iYXNlICsgU0g0X1BDSUxBUjApOworCV9fcmF3X3dyaXRlbCgoKG1lbXNpemUgLSBTWl8xTSkgJiAweDFmZjAwMDAwKSB8IDEsCisJCSAgICAgY2hhbi0+cmVnX2Jhc2UgKyBTSDRfUENJTFNSMCk7CisKKwkvKgorCSAqIEhvb2sgdXAgdGhlIEVSUiBhbmQgU0VSUiBJUlFzLgorCSAqLworCXJldCA9IHNoNzc4MF9wY2lfc2V0dXBfaXJxcyhjaGFuKTsKKwlpZiAodW5saWtlbHkocmV0KSkKIAkJcmV0dXJuIHJldDsKIAogCS8qCi0JICogU2V0IHRoZSBjbGFzcyBhbmQgc3ViLWNsYXNzIGNvZGVzLgorCSAqIERpc2FibGUgdGhlIGNhY2hlIHNub29wIGNvbnRyb2xsZXIgZm9yIG5vbi1jb2hlcmVudCBETUEuCiAJICovCi0JX19yYXdfd3JpdGViKFBDSV9DTEFTU19CUklER0VfSE9TVCA+PiA4LAotCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSUJDQyk7Ci0JX19yYXdfd3JpdGViKFBDSV9DTEFTU19CUklER0VfSE9TVCAmIDB4ZmYsCi0JCSAgICAgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJU1VCKTsKKwlfX3Jhd193cml0ZWwoMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJQ1NDUjApOworCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lDU0FSMCk7CisJX19yYXdfd3JpdGVsKDAsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSUNTQ1IxKTsKKwlfX3Jhd193cml0ZWwoMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJQ1NBUjEpOwogCiAJLyoKLQkgKiBTZXQgSU8gYW5kIE1lbSB3aW5kb3dzIHRvIGxvY2FsIGFkZHJlc3MKLQkgKiBNYWtlIFBDSSBhbmQgbG9jYWwgYWRkcmVzcyB0aGUgc2FtZSBmb3IgZWFzeSAxIHRvIDEgbWFwcGluZworCSAqIFNldHVwIHRoZSBtZW1vcnkgQkFScwogCSAqLwotCXBjaV93cml0ZV9yZWcoY2hhbiwgc2g3NzgwX3BjaV9tYXAud2luZG93MC5zaXplIC0gMHhmZmZmZiwgU0g0X1BDSUxTUjApOwotCS8qIFNldCB0aGUgdmFsdWVzIG9uIHdpbmRvdyAwIFBDSSBjb25maWcgcmVnaXN0ZXJzICovCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCBzaDc3ODBfcGNpX21hcC53aW5kb3cwLmJhc2UsIFNINF9QQ0lMQVIwKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIHNoNzc4MF9wY2lfbWFwLndpbmRvdzAuYmFzZSwgU0g3NzgwX1BDSU1CQVIwKTsKKwlmb3IgKGkgPSAxOyBpIDwgY2hhbi0+bnJfcmVzb3VyY2VzOyBpKyspIHsKKwkJc3RydWN0IHJlc291cmNlICpyZXMgPSBjaGFuLT5yZXNvdXJjZXMgKyBpOworCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZTsKIAotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMzgwZiwgU0g0X1BDSUFJTlRNKTsKKwkJaWYgKHVubGlrZWx5KHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSkKKwkJCWNvbnRpbnVlOwogCi0JLyogU2V0IHVwIHN0YW5kYXJkIFBDSSBjb25maWcgcmVnaXN0ZXJzICovCi0JX19yYXdfd3JpdGV3KDB4RkIwMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJU1RBVFVTKTsKLQlfX3Jhd193cml0ZXcoMHgwMDQ3LCBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lDTUQpOwotCV9fcmF3X3dyaXRldygweDE5MTIsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSVNWSUQpOwotCV9fcmF3X3dyaXRldygweDAwMDEsIGNoYW4tPnJlZ19iYXNlICsgU0g3NzgwX1BDSVNJRCk7CisJCS8qCisJCSAqIE1ha2Ugc3VyZSB3ZSdyZSBpbiB0aGUgcmlnaHQgcGh5c2ljYWwgYWRkcmVzc2luZyBtb2RlCisJCSAqIGZvciBkZWFsaW5nIHdpdGggdGhlIHJlc291cmNlLgorCQkgKi8KKwkJaWYgKChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU1fMzJCSVQpICYmIF9faW5fMjliaXRfbW9kZSgpKSB7CisJCQljaGFuLT5ucl9yZXNvdXJjZXMtLTsKKwkJCWNvbnRpbnVlOworCQl9CiAKLQlfX3Jhd193cml0ZWIoMHgwMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJUElGKTsKKwkJc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKIAotCS8qIEFwcGx5IGFueSBsYXN0LW1pbnV0ZSBQQ0lDIGZpeHVwcyAqLwotCXBjaV9maXh1cF9wY2ljKGNoYW4pOworCQkvKgorCQkgKiBUaGUgTUJNUiBtYXNrIGlzIGNhbGN1bGF0ZWQgaW4gdW5pdHMgb2YgMjU2a0IsIHdoaWNoCisJCSAqIGtlZXBzIHRoaW5ncyBwcmV0dHkgc2ltcGxlLgorCQkgKi8KKwkJX19yYXdfd3JpdGVsKCgocm91bmR1cF9wb3dfb2ZfdHdvKHNpemUpIC8gU1pfMjU2SykgLSAxKSA8PCAxOCwKKwkJCSAgICAgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJTUJNUihpIC0gMSkpOworCQlfX3Jhd193cml0ZWwocmVzLT5zdGFydCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJTUJSKGkgLSAxKSk7CisJfQogCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweGZkMDAwMDAwLCBTSDc3ODBfUENJTUJSMCk7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwZmMwMDAwLCBTSDc3ODBfUENJTUJNUjApOworCS8qCisJICogQW5kIEkvTy4KKwkgKi8KKwlfX3Jhd193cml0ZWwoMCwgY2hhbi0+cmVnX2Jhc2UgKyBQQ0lfQkFTRV9BRERSRVNTXzApOworCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFNINzc4MF9QQ0lJT0JSKTsKKwlfX3Jhd193cml0ZWwoMCwgY2hhbi0+cmVnX2Jhc2UgKyBTSDc3ODBfUENJSU9CTVIpOwogCi0jaWZkZWYgQ09ORklHXzMyQklUCi0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweGMwMDAwMDAwLCBTSDc3ODBfUENJTUJSMik7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDIwMDAwMDAwIC0gU0g3NzgwX1BDSV9JT19TSVpFLCBTSDc3ODBfUENJTUJNUjIpOwotI2VuZGlmCisJX19yYXdfd3JpdGV3KFBDSV9DT01NQU5EX1NFUlIgICB8IFBDSV9DT01NQU5EX1dBSVQgICB8IFwKKwkJICAgICBQQ0lfQ09NTUFORF9QQVJJVFkgfCBQQ0lfQ09NTUFORF9NQVNURVIgfCBcCisJCSAgICAgUENJX0NPTU1BTkRfTUVNT1JZLCBjaGFuLT5yZWdfYmFzZSArIFBDSV9DT01NQU5EKTsKIAotCS8qIFNldCBJT0JSIGZvciB3aW5kb3dzIGNvbnRhaW5pbmcgYXJlYSBzcGVjaWZpZWQgaW4gcGNpLmggKi8KLQlwY2lfd3JpdGVfcmVnKGNoYW4sIGNoYW4tPmlvX3Jlc291cmNlLT5zdGFydCAmIH4oU0g3NzgwX1BDSV9JT19TSVpFLTEpLAotCQkgICAgICBTSDc3ODBfUENJSU9CUik7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAoKFNINzc4MF9QQ0lfSU9fU0laRS0xKSAmICg3PDwxOCkpLAotCQkgICAgICBTSDc3ODBfUENJSU9CTVIpOworCS8qCisJICogSW5pdGlhbGl6YXRpb24gbW9kZSBjb21wbGV0ZSwgcmVsZWFzZSB0aGUgY29udHJvbCByZWdpc3RlciBhbmQKKwkgKiBlbmFibGUgcm91bmQgcm9iaW4gbW9kZSB0byBzdG9wIGRldmljZSBvdmVycnVucy9zdGFydmF0aW9uLgorCSAqLworCV9fcmF3X3dyaXRlbChTSDRfUENJQ1JfUFJFRklYIHwgU0g0X1BDSUNSX0NGSU4gfCBTSDRfUENJQ1JfRlRPLAorCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g0X1BDSUNSKTsKIAotCS8qIFNINzc4MCBpbml0IGRvbmUsIHNldCBjZW50cmFsIGZ1bmN0aW9uIGluaXQgY29tcGxldGUgKi8KLQkvKiB1c2Ugcm91bmQgcm9iaW4gbW9kZSB0byBzdG9wIGEgZGV2aWNlIHN0YXJ2aW5nL292ZXJydW5pbmcgKi8KLQl3b3JkID0gU0g0X1BDSUNSX1BSRUZJWCB8IFNINF9QQ0lDUl9DRklOIHwgU0g0X1BDSUNSX0ZUTzsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIHdvcmQsIFNINF9QQ0lDUik7CisJcmV0ID0gcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoY2hhbik7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCWdvdG8gZXJyOwogCi0JcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoY2hhbik7CisJc2g3NzgwX3BjaTY2X2luaXQoY2hhbik7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIlBDSTogUnVubmluZyBhdCAlZE1Iei5cbiIsCisJICAgICAgIChfX3Jhd19yZWFkdyhjaGFuLT5yZWdfYmFzZSArIFBDSV9TVEFUVVMpICYgUENJX1NUQVRVU182Nk1IWikgPworCSAgICAgICA2NiA6IDMzKTsKIAogCXJldHVybiAwOworCitlcnI6CisJc2g3NzgwX3BjaV90ZWFyZG93bl9pcnFzKGNoYW4pOworCXJldHVybiByZXQ7CiB9CiBhcmNoX2luaXRjYWxsKHNoNzc4MF9wY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuaCBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5oCmluZGV4IDRhNTI0NzguLjIwNWRjYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5oCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5oCkBAIC0xMiwxMiArMTIsMTEgQEAKICNpZm5kZWYgX1BDSV9TSDc3ODBfSF8KICNkZWZpbmUgX1BDSV9TSDc3ODBfSF8KIAotLyogUGxhdGZvcm0gU3BlY2lmaWMgVmFsdWVzICovCi0jZGVmaW5lIFNINzc4MF9WRU5ET1JfSUQJMHgxOTEyCi0jZGVmaW5lIFNINzc4MV9ERVZJQ0VfSUQJMHgwMDAxCi0jZGVmaW5lIFNINzc4MF9ERVZJQ0VfSUQJMHgwMDAyCi0jZGVmaW5lIFNINzc2M19ERVZJQ0VfSUQJMHgwMDA0Ci0jZGVmaW5lIFNINzc4NV9ERVZJQ0VfSUQJMHgwMDA3CisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUkVORVNBUwkJMHgxOTEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkVORVNBU19TSDc3ODEJMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkVORVNBU19TSDc3ODAJMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkVORVNBU19TSDc3NjMJMHgwMDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkVORVNBU19TSDc3ODUJMHgwMDA3CiAKIC8qIFNINzc4MCBDb250cm9sIFJlZ2lzdGVycyAqLwogI2RlZmluZQlQQ0lFQ1IJCQkweEZFMDAwMDA4CkBAIC0yNyw0NCArMjYsOSBAQAogI2RlZmluZSBTSDc3ODBfUENJX0NPTkZJR19CQVNFCTB4RkQwMDAwMDAJLyogQ29uZmlnIHNwYWNlIGJhc2UgYWRkciAqLwogI2RlZmluZSBTSDc3ODBfUENJX0NPTkZJR19TSVpFCTB4MDEwMDAwMDAJLyogQ29uZmlnIHNwYWNlIHNpemUgKi8KIAotI2RlZmluZSBTSDc3ODBfUENJX01FTU9SWV9CQVNFCTB4RkQwMDAwMDAJLyogTWVtb3J5IHNwYWNlIGJhc2UgYWRkciAqLwotI2RlZmluZSBTSDc3ODBfUENJX01FTV9TSVpFCTB4MDEwMDAwMDAJLyogU2l6ZSBvZiBNZW1vcnkgd2luZG93ICovCi0KLSNkZWZpbmUgU0g3NzgwX1BDSV9JT19CQVNFCTB4RkUyMDAwMDAJLyogSU8gc3BhY2UgYmFzZSBhZGRyZXNzICovCi0jZGVmaW5lIFNINzc4MF9QQ0lfSU9fU0laRQkweDAwNDAwMDAwCS8qIFNpemUgb2YgSU8gd2luZG93ICovCi0KICNkZWZpbmUgU0g3NzgwX1BDSVJFR19CQVNFCTB4RkUwNDAwMDAJLyogUENJIHJlZ3MgYmFzZSBhZGRyZXNzICovCiAKIC8qIFNINzc4MCBQQ0kgQ29uZmlnIFJlZ2lzdGVycyAqLwotI2RlZmluZSBTSDc3ODBfUENJVklECQkweDAwMAkJLyogVmVuZG9yIElEICovCi0jZGVmaW5lIFNINzc4MF9QQ0lESUQJCTB4MDAyCQkvKiBEZXZpY2UgSUQgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSUNNRAkJMHgwMDQJCS8qIENvbW1hbmQgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSVNUQVRVUwkweDAwNgkJLyogU3RhdHVzICovCi0jZGVmaW5lIFNINzc4MF9QQ0lSSUQJCTB4MDA4CQkvKiBSZXZpc2lvbiBJRCAqLwotI2RlZmluZSBTSDc3ODBfUENJUElGCQkweDAwOQkJLyogUHJvZ3JhbSBJbnRlcmZhY2UgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSVNVQgkJMHgwMGEJCS8qIFN1YiBjbGFzcyBjb2RlICovCi0jZGVmaW5lIFNINzc4MF9QQ0lCQ0MJCTB4MDBiCQkvKiBCYXNlIGNsYXNzIGNvZGUgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSUNMUwkJMHgwMGMJCS8qIENhY2hlIGxpbmUgc2l6ZSAqLwotI2RlZmluZSBTSDc3ODBfUENJTFRNCQkweDAwZAkJLyogbGF0ZW5jeSB0aW1lciAqLwotI2RlZmluZSBTSDc3ODBfUENJSERSCQkweDAwZQkJLyogSGVhZGVyIHR5cGUgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSUJJU1QJCTB4MDBmCQkvKiBCSVNUICovCi0jZGVmaW5lIFNINzc4MF9QQ0lJQkFSCQkweDAxMAkJLyogSU8gQmFzZSBhZGRyZXNzICovCi0jZGVmaW5lIFNINzc4MF9QQ0lNQkFSMAkJMHgwMTQJCS8qIE1lbW9yeSBiYXNlIGFkZHJlc3MwICovCi0jZGVmaW5lIFNINzc4MF9QQ0lNQkFSMQkJMHgwMTgJCS8qIE1lbW9yeSBiYXNlIGFkZHJlc3MxICovCi0jZGVmaW5lIFNINzc4MF9QQ0lTVklECQkweDAyYwkJLyogU3ViIHN5c3RlbSB2ZW5kb3IgSUQgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSVNJRAkJMHgwMmUJCS8qIFN1YiBzeXN0ZW0gSUQgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSUNQCQkweDAzNAotI2RlZmluZSBTSDc3ODBfUENJSU5UTElORQkweDAzYwkJLyogSW50ZXJydXB0IGxpbmUgKi8KLSNkZWZpbmUgU0g3NzgwX1BDSUlOVFBJTgkweDAzZAkJLyogSW50ZXJydXB0IHBpbiAqLwotI2RlZmluZSBTSDc3ODBfUENJTUlOR05UCTB4MDNlCQkvKiBNaW51bXVtIGdyYW5kICovCi0jZGVmaW5lIFNINzc4MF9QQ0lNQVhMQVQJMHgwM2YJCS8qIE1heG11bSBsYXRlbmN5ICovCi0jZGVmaW5lIFNINzc4MF9QQ0lDSUQJCTB4MDQwCi0jZGVmaW5lIFNINzc4MF9QQ0lOSVAJCTB4MDQxCi0jZGVmaW5lIFNINzc4MF9QQ0lQTUMJCTB4MDQyCi0jZGVmaW5lIFNINzc4MF9QQ0lQTUNTUgkJMHgwNDQKLSNkZWZpbmUgU0g3NzgwX1BDSVBNQ1NSX0JTRQkweDA0NgotI2RlZmluZSBTSDc3ODBfUENJQ0RECQkweDA0NwotCiAjZGVmaW5lIFNINzc4MF9QQ0lJUgkJMHgxMTQJCS8qIFBDSSBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU0g3NzgwX1BDSUlNUgkJMHgxMTgJCS8qIFBDSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwogI2RlZmluZSBTSDc3ODBfUENJQUlSCQkweDExQwkJLyogRXJyb3IgQWRkcmVzcyBSZWdpc3RlciAqLwpAQCAtNzYsMTAgKzQwLDggQEAKICNkZWZpbmUgU0g3NzgwX1BDSVBJTlQJCTB4MUNDCQkvKiBQb3dlciBNZ21udCBJbnQuIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNINzc4MF9QQ0lQSU5UTQkJMHgxRDAJCS8qIFBvd2VyIE1nbW50IE1hc2sgUmVnaXN0ZXIgKi8KIAotI2RlZmluZSBTSDc3ODBfUENJTUJSMAkJMHgxRTAKLSNkZWZpbmUgU0g3NzgwX1BDSU1CTVIwCQkweDFFNAotI2RlZmluZSBTSDc3ODBfUENJTUJSMgkJMHgxRjAKLSNkZWZpbmUgU0g3NzgwX1BDSU1CTVIyCQkweDFGNAorI2RlZmluZSBTSDc3ODBfUENJTUJSKHgpCSgweDFFMCArICgoeCkgKiA4KSkKKyNkZWZpbmUgU0g3NzgwX1BDSU1CTVIoeCkJKDB4MUU0ICsgKCh4KSAqIDgpKQogI2RlZmluZSBTSDc3ODBfUENJSU9CUgkJMHgxRjgKICNkZWZpbmUgU0g3NzgwX1BDSUlPQk1SCQkweDFGQwogI2RlZmluZSBTSDc3ODBfUENJQ1NDUjAJCTB4MjEwCQkvKiBDYWNoZSBTbm9vcDEgQ250LiBSZWdpc3RlciAqLwpAQCAtODcsMTYgKzQ5LDQgQEAKICNkZWZpbmUgU0g3NzgwX1BDSUNTQVIwCQkweDIxOAkvKiBDYWNoZSBTbm9vcDEgQWRkci4gUmVnaXN0ZXIgKi8KICNkZWZpbmUgU0g3NzgwX1BDSUNTQVIxCQkweDIxQwkvKiBDYWNoZSBTbm9vcDIgQWRkci4gUmVnaXN0ZXIgKi8KIAotLyogR2VuZXJhbCBNZW1vcnkgQ29uZmlnIEFkZHJlc3NlcyAqLwotI2RlZmluZSBTSDc3ODBfQ1MwX0JBU0VfQUREUgkweDAKLSNkZWZpbmUgU0g3NzgwX01FTV9SRUdJT05fU0laRQkweDA0MDAwMDAwCi0jZGVmaW5lIFNINzc4MF9DUzFfQkFTRV9BRERSCShTSDc3ODBfQ1MwX0JBU0VfQUREUiArIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUpCi0jZGVmaW5lIFNINzc4MF9DUzJfQkFTRV9BRERSCShTSDc3ODBfQ1MxX0JBU0VfQUREUiArIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUpCi0jZGVmaW5lIFNINzc4MF9DUzNfQkFTRV9BRERSCShTSDc3ODBfQ1MyX0JBU0VfQUREUiArIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUpCi0jZGVmaW5lIFNINzc4MF9DUzRfQkFTRV9BRERSCShTSDc3ODBfQ1MzX0JBU0VfQUREUiArIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUpCi0jZGVmaW5lIFNINzc4MF9DUzVfQkFTRV9BRERSCShTSDc3ODBfQ1M0X0JBU0VfQUREUiArIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUpCi0jZGVmaW5lIFNINzc4MF9DUzZfQkFTRV9BRERSCShTSDc3ODBfQ1M1X0JBU0VfQUREUiArIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUpCi0KLSNkZWZpbmUgU0g3NzgwXzMyQklUX0REUl9CQVNFX0FERFIJMHg0MDAwMDAwMAotCiAjZW5kaWYgLyogX1BDSV9TSDc3ODBfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IGM0ODFkZjYuLjk1M2FmMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtMzMsMTUgKzMzLDIyIEBACiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpYmlvc19zY2FuYnVzKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSkKIHsKIAlzdGF0aWMgaW50IG5leHRfYnVzbm87CisJc3RhdGljIGludCBuZWVkX2RvbWFpbl9pbmZvOwogCXN0cnVjdCBwY2lfYnVzICpidXM7CiAKIAlidXMgPSBwY2lfc2Nhbl9idXMobmV4dF9idXNubywgaG9zZS0+cGNpX29wcywgaG9zZSk7CisJaG9zZS0+YnVzID0gYnVzOworCisJbmVlZF9kb21haW5faW5mbyA9IG5lZWRfZG9tYWluX2luZm8gfHwgaG9zZS0+aW5kZXg7CisJaG9zZS0+bmVlZF9kb21haW5faW5mbyA9IG5lZWRfZG9tYWluX2luZm87CiAJaWYgKGJ1cykgewogCQluZXh0X2J1c25vID0gYnVzLT5zdWJvcmRpbmF0ZSArIDE7CiAJCS8qIERvbid0IGFsbG93IDgtYml0IGJ1cyBudW1iZXIgb3ZlcmZsb3cgaW5zaWRlIHRoZSBob3NlIC0KIAkJICAgcmVzZXJ2ZSBzb21lIHNwYWNlIGZvciBicmlkZ2VzLiAqLwotCQlpZiAobmV4dF9idXNubyA+IDIyNCkKKwkJaWYgKG5leHRfYnVzbm8gPiAyMjQpIHsKIAkJCW5leHRfYnVzbm8gPSAwOworCQkJbmVlZF9kb21haW5faW5mbyA9IDE7CisJCX0KIAogCQlwY2lfYnVzX3NpemVfYnJpZGdlcyhidXMpOwogCQlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYnVzKTsKQEAgLTUxLDEwICs1OCwyMSBAQAogCiBzdGF0aWMgREVGSU5FX01VVEVYKHBjaV9zY2FuX211dGV4KTsKIAotdm9pZCBfX2RldmluaXQgcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9jaGFubmVsICpob3NlKQoraW50IF9fZGV2aW5pdCByZWdpc3Rlcl9wY2lfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpCiB7Ci0JcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIGhvc2UtPm1lbV9yZXNvdXJjZSk7Ci0JcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCBob3NlLT5pb19yZXNvdXJjZSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaG9zZS0+bnJfcmVzb3VyY2VzOyBpKyspIHsKKwkJc3RydWN0IHJlc291cmNlICpyZXMgPSBob3NlLT5yZXNvdXJjZXMgKyBpOworCisJCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgeworCQkJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgcmVzKSA8IDApCisJCQkJZ290byBvdXQ7CisJCX0gZWxzZSB7CisJCQlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIHJlcykgPCAwKQorCQkJCWdvdG8gb3V0OworCQl9CisJfQogCiAJKmhvc2VfdGFpbCA9IGhvc2U7CiAJaG9zZV90YWlsID0gJmhvc2UtPm5leHQ7CkBAIC02OCw2ICs4NiwxMSBAQAogCX0KIAogCS8qCisJICogU2V0dXAgdGhlIEVSUi9QRVJSIGFuZCBTRVJSIHRpbWVycywgaWYgYXZhaWxhYmxlLgorCSAqLworCXBjaWJpb3NfZW5hYmxlX3RpbWVycyhob3NlKTsKKworCS8qCiAJICogU2NhbiB0aGUgYnVzIGlmIGl0IGlzIHJlZ2lzdGVyIGFmdGVyIHRoZSBQQ0kgc3Vic3lzdGVtCiAJICogaW5pdGlhbGl6YXRpb24uCiAJICovCkBAIC03Niw2ICs5OSwxNSBAQAogCQlwY2liaW9zX3NjYW5idXMoaG9zZSk7CiAJCW11dGV4X3VubG9jaygmcGNpX3NjYW5fbXV0ZXgpOwogCX0KKworCXJldHVybiAwOworCitvdXQ6CisJZm9yICgtLWk7IGkgPj0gMDsgaS0tKQorCQlyZWxlYXNlX3Jlc291cmNlKCZob3NlLT5yZXNvdXJjZXNbaV0pOworCisJcHJpbnRrKEtFUk5fV0FSTklORyAiU2tpcHBpbmcgUENJIGJ1cyBzY2FuIGR1ZSB0byByZXNvdXJjZSBjb25mbGljdFxuIik7CisJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBwY2liaW9zX2luaXQodm9pZCkKQEAgLTEyNywxMSArMTU5LDEzIEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGJ1cy0+c2VsZjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsbjsKLQlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4gPSBidXMtPnN5c2RhdGE7CisJc3RydWN0IHBjaV9jaGFubmVsICpob3NlID0gYnVzLT5zeXNkYXRhOwogCiAJaWYgKCFkZXYpIHsKLQkJYnVzLT5yZXNvdXJjZVswXSA9IGNoYW4tPmlvX3Jlc291cmNlOwotCQlidXMtPnJlc291cmNlWzFdID0gY2hhbi0+bWVtX3Jlc291cmNlOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgaG9zZS0+bnJfcmVzb3VyY2VzOyBpKyspCisJCQlidXMtPnJlc291cmNlW2ldID0gaG9zZS0+cmVzb3VyY2VzICsgaTsKIAl9CiAKIAlmb3IgKGxuID0gYnVzLT5kZXZpY2VzLm5leHQ7IGxuICE9ICZidXMtPmRldmljZXM7IGxuID0gbG4tPm5leHQpIHsKQEAgLTE0OCwzNCArMTgyLDI5IEBACiAgKiBhZGRyZXNzZXMgdG8gYmUgYWxsb2NhdGVkIGluIHRoZSAweDAwMC0weDBmZiByZWdpb24KICAqIG1vZHVsbyAweDQwMC4KICAqLwotdm9pZCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCityZXNvdXJjZV9zaXplX3QgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkYXRhOwotCXN0cnVjdCBwY2lfY2hhbm5lbCAqY2hhbiA9IGRldi0+c3lzZGF0YTsKKwlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UgPSBkZXYtPnN5c2RhdGE7CiAJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKIAogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewotCQlpZiAoc3RhcnQgPCBQQ0lCSU9TX01JTl9JTyArIGNoYW4tPmlvX3Jlc291cmNlLT5zdGFydCkKLQkJCXN0YXJ0ID0gUENJQklPU19NSU5fSU8gKyBjaGFuLT5pb19yZXNvdXJjZS0+c3RhcnQ7CisJCWlmIChzdGFydCA8IFBDSUJJT1NfTUlOX0lPICsgaG9zZS0+cmVzb3VyY2VzWzBdLnN0YXJ0KQorCQkJc3RhcnQgPSBQQ0lCSU9TX01JTl9JTyArIGhvc2UtPnJlc291cmNlc1swXS5zdGFydDsKIAogCQkvKgogICAgICAgICAgICAgICAgICAqIFB1dCBldmVyeXRoaW5nIGludG8gMHgwMC0weGZmIHJlZ2lvbiBtb2R1bG8gMHg0MDAuCiAJCSAqLwotCQlpZiAoc3RhcnQgJiAweDMwMCkgeworCQlpZiAoc3RhcnQgJiAweDMwMCkKIAkJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwotCQkJcmVzLT5zdGFydCA9IHN0YXJ0OwotCQl9Ci0JfSBlbHNlIGlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pIHsKLQkJaWYgKHN0YXJ0IDwgUENJQklPU19NSU5fTUVNICsgY2hhbi0+bWVtX3Jlc291cmNlLT5zdGFydCkKLQkJCXN0YXJ0ID0gUENJQklPU19NSU5fTUVNICsgY2hhbi0+bWVtX3Jlc291cmNlLT5zdGFydDsKIAl9CiAKLQlyZXMtPnN0YXJ0ID0gc3RhcnQ7CisJcmV0dXJuIHN0YXJ0OwogfQogCiB2b2lkIHBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBwY2lfYnVzX3JlZ2lvbiAqcmVnaW9uLAotCQkJIHN0cnVjdCByZXNvdXJjZSAqcmVzKQorCQkJICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKIHsKIAlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UgPSBkZXYtPnN5c2RhdGE7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOwpAQCAtMTg5LDkgKzIxOCw4IEBACiAJcmVnaW9uLT5lbmQgPSByZXMtPmVuZCAtIG9mZnNldDsKIH0KIAotdm9pZCBfX2RldmluaXQKLXBjaWJpb3NfYnVzX3RvX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJc3RydWN0IHBjaV9idXNfcmVnaW9uICpyZWdpb24pCit2b2lkIHBjaWJpb3NfYnVzX3RvX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJICAgICBzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbikKIHsKIAlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UgPSBkZXYtPnN5c2RhdGE7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOwpAQCAtMjc0LDYgKzMwMiw4NiBAQAogCXJldHVybiBzdHI7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdAorcGNpYmlvc19idXNfcmVwb3J0X3N0YXR1c19lYXJseShzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsCisJCQkJaW50IHRvcF9idXMsIGludCBjdXJyZW50X2J1cywKKwkJCQl1bnNpZ25lZCBpbnQgc3RhdHVzX21hc2ssIGludCB3YXJuKQoreworCXVuc2lnbmVkIGludCBwY2lfZGV2Zm47CisJdTE2IHN0YXR1czsKKwlpbnQgcmV0OworCisJZm9yIChwY2lfZGV2Zm4gPSAwOyBwY2lfZGV2Zm4gPCAweGZmOyBwY2lfZGV2Zm4rKykgeworCQlpZiAoUENJX0ZVTkMocGNpX2RldmZuKSkKKwkJCWNvbnRpbnVlOworCQlyZXQgPSBlYXJseV9yZWFkX2NvbmZpZ193b3JkKGhvc2UsIHRvcF9idXMsIGN1cnJlbnRfYnVzLAorCQkJCQkgICAgIHBjaV9kZXZmbiwgUENJX1NUQVRVUywgJnN0YXR1cyk7CisJCWlmIChyZXQgIT0gUENJQklPU19TVUNDRVNTRlVMKQorCQkJY29udGludWU7CisJCWlmIChzdGF0dXMgPT0gMHhmZmZmKQorCQkJY29udGludWU7CisKKwkJZWFybHlfd3JpdGVfY29uZmlnX3dvcmQoaG9zZSwgdG9wX2J1cywgY3VycmVudF9idXMsCisJCQkJCXBjaV9kZXZmbiwgUENJX1NUQVRVUywKKwkJCQkJc3RhdHVzICYgc3RhdHVzX21hc2spOworCQlpZiAod2FybikKKwkJCXByaW50aygiKCUwMng6JTAyeDogJTA0WCkgIiwgY3VycmVudF9idXMsCisJCQkgICAgICAgcGNpX2RldmZuLCBzdGF0dXMpOworCX0KK30KKworLyoKKyAqIFdlIGNhbid0IHVzZSBwY2lfZmluZF9kZXZpY2UoKSBoZXJlIHNpbmNlIHdlIGFyZQorICogY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdF9yZWZvaworcGNpYmlvc19idXNfcmVwb3J0X3N0YXR1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgc3RhdHVzX21hc2ssCisJCQkgIGludCB3YXJuKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJdTE2IHN0YXR1czsKKworCQkvKgorCQkgKiBpZ25vcmUgaG9zdCBicmlkZ2UgLSB3ZSBoYW5kbGUKKwkJICogdGhhdCBzZXBhcmF0ZWx5CisJCSAqLworCQlpZiAoZGV2LT5idXMtPm51bWJlciA9PSAwICYmIGRldi0+ZGV2Zm4gPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX1NUQVRVUywgJnN0YXR1cyk7CisJCWlmIChzdGF0dXMgPT0gMHhmZmZmKQorCQkJY29udGludWU7CisKKwkJaWYgKChzdGF0dXMgJiBzdGF0dXNfbWFzaykgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIGNsZWFyIHRoZSBzdGF0dXMgZXJyb3JzICovCisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9TVEFUVVMsIHN0YXR1cyAmIHN0YXR1c19tYXNrKTsKKworCQlpZiAod2FybikKKwkJCXByaW50aygiKCVzOiAlMDRYKSAiLCBwY2lfbmFtZShkZXYpLCBzdGF0dXMpOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkKKwkJaWYgKGRldi0+c3Vib3JkaW5hdGUpCisJCQlwY2liaW9zX2J1c19yZXBvcnRfc3RhdHVzKGRldi0+c3Vib3JkaW5hdGUsIHN0YXR1c19tYXNrLCB3YXJuKTsKK30KKwordm9pZCBfX2luaXRfcmVmb2sgcGNpYmlvc19yZXBvcnRfc3RhdHVzKHVuc2lnbmVkIGludCBzdGF0dXNfbWFzaywgaW50IHdhcm4pCit7CisJc3RydWN0IHBjaV9jaGFubmVsICpob3NlOworCisJZm9yIChob3NlID0gaG9zZV9oZWFkOyBob3NlOyBob3NlID0gaG9zZS0+bmV4dCkgeworCQlpZiAodW5saWtlbHkoIWhvc2UtPmJ1cykpCisJCQlwY2liaW9zX2J1c19yZXBvcnRfc3RhdHVzX2Vhcmx5KGhvc2UsIGhvc2VfaGVhZC0+aW5kZXgsCisJCQkJCWhvc2UtPmluZGV4LCBzdGF0dXNfbWFzaywgd2Fybik7CisJCWVsc2UKKwkJCXBjaWJpb3NfYnVzX3JlcG9ydF9zdGF0dXMoaG9zZS0+YnVzLCBzdGF0dXNfbWFzaywgd2Fybik7CisJfQorfQorCiBpbnQgcGNpX21tYXBfcGFnZV9yYW5nZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCWVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSwgaW50IHdyaXRlX2NvbWJpbmUpCiB7CkBAIC0zMDIsOSArNDEwLDE1IEBACiB7CiAJc3RydWN0IHBjaV9jaGFubmVsICpjaGFuID0gZGV2LT5zeXNkYXRhOwogCi0JaWYgKCFjaGFuLT5pb19tYXBfYmFzZSkKKwlpZiAodW5saWtlbHkoIWNoYW4tPmlvX21hcF9iYXNlKSkgewogCQljaGFuLT5pb19tYXBfYmFzZSA9IGdlbmVyaWNfaW9fYmFzZTsKIAorCQlpZiAocGNpX2RvbWFpbnNfc3VwcG9ydGVkKQorCQkJcGFuaWMoIlRvIGF2b2lkIGRhdGEgY29ycnVwdGlvbiBpb19tYXBfYmFzZSBNVVNUIGJlICIKKwkJCSAgICAgICJzZXQgd2l0aCBtdWx0aXBsZSBQQ0kgZG9tYWlucy4iKTsKKwl9CisKKwogCXJldHVybiAodm9pZCBfX2lvbWVtICopKGNoYW4tPmlvX21hcF9iYXNlICsgcG9ydCk7CiB9CiAKQEAgLTMyMSwyMCArNDM1LDkgQEAKIAogCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfSU8pCiAJCXJldHVybiBpb3BvcnRfbWFwX3BjaShkZXYsIHN0YXJ0LCBsZW4pOwotCi0JLyoKLQkgKiBQcmVzZW50bHkgdGhlIElPUkVTT1VSQ0VfTUVNIGNhc2UgaXMgYSBiaXQgc3BlY2lhbCwgbW9zdAotCSAqIFNINzc1MSBzdHlsZSBQQ0kgY29udHJvbGxlcnMgaGF2ZSBQQ0kgbWVtb3J5IGF0IGEgZml4ZWQKLQkgKiBsb2NhdGlvbiBpbiB0aGUgYWRkcmVzcyBzcGFjZSB3aGVyZSBubyByZW1hcHBpbmcgaXMgZGVzaXJlZC4KLQkgKiBXaXRoIHRoZSBJT1JFU09VUkNFX01FTSBjYXNlIG1vcmUgY2FyZSBoYXMgdG8gYmUgdGFrZW4KLQkgKiB0byBpbmhpYml0IHBhZ2UgdGFibGUgbWFwcGluZyBmb3IgbGVnYWN5IGNvcmVzLCBidXQgdGhpcyBpcwotCSAqIHB1bnRlZCBvZmYgdG8gX19pb3JlbWFwKCkuCi0JICoJCQkJCS0tIFBGTS4KLQkgKi8KIAlpZiAoZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgewogCQlpZiAoZmxhZ3MgJiBJT1JFU09VUkNFX0NBQ0hFQUJMRSkKIAkJCXJldHVybiBpb3JlbWFwKHN0YXJ0LCBsZW4pOwotCiAJCXJldHVybiBpb3JlbWFwX25vY2FjaGUoc3RhcnQsIGxlbik7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaWUtc2g3Nzg2LmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaWUtc2g3Nzg2LmMKaW5kZXggYWMzN2VlOC4uYWU5MWEyZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2llLXNoNzc4Ni5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpZS1zaDc3ODYuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBMb3ctTGV2ZWwgUENJIEV4cHJlc3MgU3VwcG9ydCBmb3IgdGhlIFNINzc4NgogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDEwICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTMwLDYwICszMCw4NCBAQAogCWludCAoKnBvcnRfaW5pdF9odykoc3RydWN0IHNoNzc4Nl9wY2llX3BvcnQgKnBvcnQpOwogfSAqc2g3Nzg2X3BjaWVfaHdvcHM7CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3Nzg2X3BjaV8zMmJpdF9tZW1fcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4Nl9wY2kwX3Jlc291cmNlc1tdID0gewogCXsKLQkJLm5hbWUJPSAicGNpMF9tZW0iLAotCQkuc3RhcnQJPSBTSDRBX1BDSU1FTV9CQVNFQSwKLQkJLmVuZAk9IFNINEFfUENJTUVNX0JBU0VBICsgU1pfNjRNIC0gMSwKKwkJLm5hbWUJPSAiUENJZTAgSU8iLAorCQkuc3RhcnQJPSAweGZkMDAwMDAwLAorCQkuZW5kCT0gMHhmZDAwMDAwMCArIFNaXzhNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwl9LCB7CisJCS5uYW1lCT0gIlBDSWUwIE1FTSAwIiwKKwkJLnN0YXJ0CT0gMHhjMDAwMDAwMCwKKwkJLmVuZAk9IDB4YzAwMDAwMDAgKyBTWl81MTJNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX01FTV8zMkJJVCwKKwl9LCB7CisJCS5uYW1lCT0gIlBDSWUwIE1FTSAxIiwKKwkJLnN0YXJ0CT0gMHgxMDAwMDAwMCwKKwkJLmVuZAk9IDB4MTAwMDAwMDAgKyBTWl82NE0gLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LCB7Ci0JCS5uYW1lCT0gInBjaTFfbWVtIiwKLQkJLnN0YXJ0CT0gU0g0QV9QQ0lNRU1fQkFTRUExLAotCQkuZW5kCT0gU0g0QV9QQ0lNRU1fQkFTRUExICsgU1pfNjRNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkubmFtZQk9ICJwY2kyX21lbSIsCi0JCS5zdGFydAk9IFNINEFfUENJTUVNX0JBU0VBMiwKLQkJLmVuZAk9IFNINEFfUENJTUVNX0JBU0VBMiArIFNaXzY0TSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkubmFtZQk9ICJQQ0llMCBNRU0gMiIsCisJCS5zdGFydAk9IDB4ZmUxMDAwMDAsCisJCS5lbmQJPSAweGZlMTAwMDAwICsgU1pfMU0gLSAxLAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4Nl9wY2lfMjliaXRfbWVtX3Jlc291cmNlID0gewotCS5zdGFydAk9IFNINEFfUENJTUVNX0JBU0UsCi0JLmVuZAk9IFNINEFfUENJTUVNX0JBU0UgKyBTWl82NE0gLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3ODZfcGNpMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIlBDSWUxIElPIiwKKwkJLnN0YXJ0CT0gMHhmZDgwMDAwMCwKKwkJLmVuZAk9IDB4ZmQ4MDAwMDAgKyBTWl84TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwgeworCQkubmFtZQk9ICJQQ0llMSBNRU0gMCIsCisJCS5zdGFydAk9IDB4YTAwMDAwMDAsCisJCS5lbmQJPSAweGEwMDAwMDAwICsgU1pfNTEyTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMzJCSVQsCisJfSwgeworCQkubmFtZQk9ICJQQ0llMSBNRU0gMSIsCisJCS5zdGFydAk9IDB4MzAwMDAwMDAsCisJCS5lbmQJPSAweDMwMDAwMDAwICsgU1pfMjU2TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMzJCSVQsCisJfSwgeworCQkubmFtZQk9ICJQQ0llMSBNRU0gMiIsCisJCS5zdGFydAk9IDB4ZmUzMDAwMDAsCisJCS5lbmQJPSAweGZlMzAwMDAwICsgU1pfMU0gLSAxLAorCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4Nl9wY2lfaW9fcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4Nl9wY2kyX3Jlc291cmNlc1tdID0gewogCXsKLQkJLm5hbWUJPSAicGNpMF9pbyIsCi0JCS5zdGFydAk9IFNINEFfUENJSU9fQkFTRSwKLQkJLmVuZAk9IFNINEFfUENJSU9fQkFTRSArIFNaXzhNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwkJLm5hbWUJPSAiUENJZTIgSU8iLAorCQkuc3RhcnQJPSAweGZjODAwMDAwLAorCQkuZW5kCT0gMHhmYzgwMDAwMCArIFNaXzRNIC0gMSwKIAl9LCB7Ci0JCS5uYW1lCT0gInBjaTFfaW8iLAotCQkuc3RhcnQJPSBTSDRBX1BDSUlPX0JBU0UxLAotCQkuZW5kCT0gU0g0QV9QQ0lJT19CQVNFMSArIFNaXzhNIC0gMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywKKwkJLm5hbWUJPSAiUENJZTIgTUVNIDAiLAorCQkuc3RhcnQJPSAweDgwMDAwMDAwLAorCQkuZW5kCT0gMHg4MDAwMDAwMCArIFNaXzUxMk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfTUVNXzMyQklULAogCX0sIHsKLQkJLm5hbWUJPSAicGNpMl9pbyIsCi0JCS5zdGFydAk9IFNINEFfUENJSU9fQkFTRTIsCi0JCS5lbmQJPSBTSDRBX1BDSUlPX0JBU0UyICsgU1pfNE0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAorCQkubmFtZQk9ICJQQ0llMiBNRU0gMSIsCisJCS5zdGFydAk9IDB4MjAwMDAwMDAsCisJCS5lbmQJPSAweDIwMDAwMDAwICsgU1pfMjU2TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9NRU1fMzJCSVQsCisJfSwgeworCQkubmFtZQk9ICJQQ0llMiBNRU0gMiIsCisJCS5zdGFydAk9IDB4ZmNkMDAwMDAsCisJCS5lbmQJPSAweGZjZDAwMDAwICsgU1pfMU0gLSAxLAogCX0sCiB9OwogCiBleHRlcm4gc3RydWN0IHBjaV9vcHMgc2g3Nzg2X3BjaV9vcHM7CiAKLSNkZWZpbmUgREVGSU5FX0NPTlRST0xMRVIoc3RhcnQsIGlkeCkJCQkJXAotewkJCQkJCQkJXAotCS5wY2lfb3BzCT0gJnNoNzc4Nl9wY2lfb3BzLAkJCVwKLQkucmVnX2Jhc2UJPSBzdGFydCwJCQkJXAotCS8qIG1lbV9yZXNvdXJjZSBmaWxsZWQgaW4gYXQgcHJvYmUgdGltZSAqLwkJXAotCS5tZW1fb2Zmc2V0CT0gMCwJCQkJCVwKLQkuaW9fcmVzb3VyY2UJPSAmc2g3Nzg2X3BjaV9pb19yZXNvdXJjZXNbaWR4XSwJXAotCS5pb19vZmZzZXQJPSAwLAkJCQkJXAorI2RlZmluZSBERUZJTkVfQ09OVFJPTExFUihzdGFydCwgaWR4KQkJCQkJXAorewkJCQkJCQkJCVwKKwkucGNpX29wcwk9ICZzaDc3ODZfcGNpX29wcywJCQkJXAorCS5yZXNvdXJjZXMJPSBzaDc3ODZfcGNpIyNpZHgjI19yZXNvdXJjZXMsCQkJXAorCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoNzc4Nl9wY2kjI2lkeCMjX3Jlc291cmNlcyksCVwKKwkucmVnX2Jhc2UJPSBzdGFydCwJCQkJCVwKKwkubWVtX29mZnNldAk9IDAsCQkJCQkJXAorCS5pb19vZmZzZXQJPSAwLAkJCQkJCVwKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfY2hhbm5lbCBzaDc3ODZfcGNpX2NoYW5uZWxzW10gPSB7CkBAIC0xODAsNyArMjA0LDkgQEAKIHsKIAlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmNoYW4gPSBwb3J0LT5ob3NlOwogCXVuc2lnbmVkIGludCBkYXRhOwotCWludCByZXQ7CisJcGh5c19hZGRyX3QgbWVtcGh5czsKKwlzaXplX3QgbWVtc2l6ZTsKKwlpbnQgcmV0LCBpOwogCiAJLyogQmVnaW4gaW5pdGlhbGl6YXRpb24gKi8KIAlwY2lfd3JpdGVfcmVnKGNoYW4sIDAsIFNINEFfUENJRVRDVExSKTsKQEAgLTIwMywxNSArMjI5LDI0IEBACiAJZGF0YSB8PSBQQ0lfQ0FQX0lEX0VYUDsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIGRhdGEsIFNINEFfUENJRUVYUENBUDApOwogCi0JLyogRW5hYmxlIHg0IGxpbmsgd2lkdGggYW5kIGV4dGVuZGVkIHN5bmMuICovCisJLyogRW5hYmxlIGRhdGEgbGluayBsYXllciBhY3RpdmUgc3RhdGUgcmVwb3J0aW5nICovCisJcGNpX3dyaXRlX3JlZyhjaGFuLCBQQ0lfRVhQX0xOS0NBUF9ETExMQVJDLCBTSDRBX1BDSUVFWFBDQVAzKTsKKworCS8qIEVuYWJsZSBleHRlbmRlZCBzeW5jIGFuZCBBU1BNIEwwcyBzdXBwb3J0ICovCiAJZGF0YSA9IHBjaV9yZWFkX3JlZyhjaGFuLCBTSDRBX1BDSUVFWFBDQVA0KTsKLQlkYXRhICY9IH4oUENJX0VYUF9MTktTVEFfTkxXIDw8IDE2KTsKLQlkYXRhIHw9ICgxIDw8IDIyKSB8IFBDSV9FWFBfTE5LQ1RMX0VTOworCWRhdGEgJj0gflBDSV9FWFBfTE5LQ1RMX0FTUE1DOworCWRhdGEgfD0gUENJX0VYUF9MTktDVExfRVMgfCAxOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgZGF0YSwgU0g0QV9QQ0lFRVhQQ0FQNCk7CiAKKwkvKiBXcml0ZSBvdXQgdGhlIHBoeXNpY2FsIHNsb3QgbnVtYmVyICovCisJZGF0YSA9IHBjaV9yZWFkX3JlZyhjaGFuLCBTSDRBX1BDSUVFWFBDQVA1KTsKKwlkYXRhICY9IH5QQ0lfRVhQX1NMVENBUF9QU047CisJZGF0YSB8PSAocG9ydC0+aW5kZXggKyAxKSA8PCAxOTsKKwlwY2lfd3JpdGVfcmVnKGNoYW4sIGRhdGEsIFNINEFfUENJRUVYUENBUDUpOworCiAJLyogU2V0IHRoZSBjb21wbGV0aW9uIHRpbWVyIHRpbWVvdXQgdG8gdGhlIG1heGltdW0gMzJtcy4gKi8KIAlkYXRhID0gcGNpX3JlYWRfcmVnKGNoYW4sIFNINEFfUENJRVRMQ1RMUik7Ci0JZGF0YSAmPSB+MHhmZmZmOworCWRhdGEgJj0gfjB4M2YwMDsKIAlkYXRhIHw9IDB4MzIgPDwgODsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIGRhdGEsIFNINEFfUENJRVRMQ1RMUik7CiAKQEAgLTIyNCw2ICsyNTksMzMgQEAKIAlkYXRhIHw9ICgweGZmIDw8IDE2KTsKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIGRhdGEsIFNINEFfUENJRU1BQ0NUTFIpOwogCisJbWVtcGh5cyA9IF9fcGEobWVtb3J5X3N0YXJ0KTsKKwltZW1zaXplID0gcm91bmR1cF9wb3dfb2ZfdHdvKG1lbW9yeV9lbmQgLSBtZW1vcnlfc3RhcnQpOworCisJLyoKKwkgKiBJZiB0aGVyZSdzIG1vcmUgdGhhbiA1MTJNQiBvZiBtZW1vcnksIHdlIG5lZWQgdG8gcm9sbCBvdmVyIHRvCisJICogTEFSMS9MQU1SMS4KKwkgKi8KKwlpZiAobWVtc2l6ZSA+IFNaXzUxMk0pIHsKKwkJX19yYXdfd3JpdGVsKG1lbXBoeXMgKyBTWl81MTJNLCBjaGFuLT5yZWdfYmFzZSArIFNINEFfUENJRUxBUjEpOworCQlfX3Jhd193cml0ZWwoKChtZW1zaXplIC0gU1pfNTEyTSkgLSBTWl8yNTYpIHwgMSwKKwkJCSAgICAgY2hhbi0+cmVnX2Jhc2UgKyBTSDRBX1BDSUVMQU1SMSk7CisJCW1lbXNpemUgPSBTWl81MTJNOworCX0gZWxzZSB7CisJCS8qCisJCSAqIE90aGVyd2lzZSBqdXN0IHplcm8gaXQgb3V0IGFuZCBkaXNhYmxlIGl0LgorCQkgKi8KKwkJX19yYXdfd3JpdGVsKDAsIGNoYW4tPnJlZ19iYXNlICsgU0g0QV9QQ0lFTEFSMSk7CisJCV9fcmF3X3dyaXRlbCgwLCBjaGFuLT5yZWdfYmFzZSArIFNINEFfUENJRUxBTVIxKTsKKwl9CisKKwkvKgorCSAqIExBUjAvTEFNUjAgY292ZXJzIHVwIHRvIHRoZSBmaXJzdCA1MTJNQiwgd2hpY2ggaXMgZW5vdWdoIHRvCisJICogY292ZXIgYWxsIG9mIGxvd21lbSBvbiBtb3N0IHBsYXRmb3Jtcy4KKwkgKi8KKwlfX3Jhd193cml0ZWwobWVtcGh5cywgY2hhbi0+cmVnX2Jhc2UgKyBTSDRBX1BDSUVMQVIwKTsKKwlfX3Jhd193cml0ZWwoKG1lbXNpemUgLSBTWl8yNTYpIHwgMSwgY2hhbi0+cmVnX2Jhc2UgKyBTSDRBX1BDSUVMQU1SMCk7CisKIAkvKiBGaW5pc2ggaW5pdGlhbGl6YXRpb24gKi8KIAlkYXRhID0gcGNpX3JlYWRfcmVnKGNoYW4sIFNINEFfUENJRVRDVExSKTsKIAlkYXRhIHw9IDB4MTsKQEAgLTI0MywxMCArMzA1LDE0IEBACiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAxMDAwMDcsIFNINEFfUENJRVBDSUNPTkYxKTsKKwlkYXRhID0gcGNpX3JlYWRfcmVnKGNoYW4sIFNINEFfUENJRVBDSUNPTkYxKTsKKwlkYXRhICY9IH4oUENJX1NUQVRVU19ERVZTRUxfTUFTSyA8PCAxNik7CisJZGF0YSB8PSBQQ0lfQ09NTUFORF9JTyB8IFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUiB8CisJCShQQ0lfU1RBVFVTX0NBUF9MSVNUIHwgUENJX1NUQVRVU19ERVZTRUxfRkFTVCkgPDwgMTY7CisJcGNpX3dyaXRlX3JlZyhjaGFuLCBkYXRhLCBTSDRBX1BDSUVQQ0lDT05GMSk7CisKIAlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4ODA4ODgwMDAsIFNINEFfUENJRVRYVkMwRENUTFIpOwogCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDIyMjAwMCwgU0g0QV9QQ0lFUlhWQzBEQ1RMUik7Ci0JcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDA1MEEwLCBTSDRBX1BDSUVFWFBDQVAyKTsKIAogCXdtYigpOwogCkBAIC0yNTQsMTUgKzMyMCwzMiBAQAogCXByaW50ayhLRVJOX05PVElDRSAiUENJOiBQQ0llIyVkIGxpbmsgd2lkdGggJWRcbiIsCiAJICAgICAgIHBvcnQtPmluZGV4LCAoZGF0YSA+PiAyMCkgJiAweDNmKTsKIAotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDdjMDAwMCwgU0g0QV9QQ0lFUEFNUjApOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAwMCwgU0g0QV9QQ0lFUEFSSDApOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHgwMDAwMDAwMCwgU0g0QV9QQ0lFUEFSTDApOwotCXBjaV93cml0ZV9yZWcoY2hhbiwgMHg4MDAwMDEwMCwgU0g0QV9QQ0lFUFRDVExSMCk7CiAKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDNmYzAwMDAsIFNINEFfUENJRVBBTVIyKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMDAsIFNINEFfUENJRVBBUkgyKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4MDAwMDAwMDAsIFNINEFfUENJRVBBUkwyKTsKLQlwY2lfd3JpdGVfcmVnKGNoYW4sIDB4ODAwMDAwMDAsIFNINEFfUENJRVBUQ1RMUjIpOworCWZvciAoaSA9IDA7IGkgPCBjaGFuLT5ucl9yZXNvdXJjZXM7IGkrKykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGNoYW4tPnJlc291cmNlcyArIGk7CisJCXJlc291cmNlX3NpemVfdCBzaXplOworCQl1MzIgZW5hYmxlX21hc2s7CisKKwkJcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDRBX1BDSUVQVENUTFIoaSkpOworCisJCXNpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CisKKwkJLyoKKwkJICogVGhlIFBBTVIgbWFzayBpcyBjYWxjdWxhdGVkIGluIHVuaXRzIG9mIDI1NmtCLCB3aGljaAorCQkgKiBrZWVwcyB0aGluZ3MgcHJldHR5IHNpbXBsZS4KKwkJICovCisJCV9fcmF3X3dyaXRlbCgoKHJvdW5kdXBfcG93X29mX3R3byhzaXplKSAvIFNaXzI1NkspIC0gMSkgPDwgMTgsCisJCQkgICAgIGNoYW4tPnJlZ19iYXNlICsgU0g0QV9QQ0lFUEFNUihpKSk7CisKKwkJcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDRBX1BDSUVQQVJIKGkpKTsKKwkJcGNpX3dyaXRlX3JlZyhjaGFuLCAweDAwMDAwMDAwLCBTSDRBX1BDSUVQQVJMKGkpKTsKKworCQllbmFibGVfbWFzayA9IE1BU0tfUEFSRTsKKwkJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQorCQkJZW5hYmxlX21hc2sgfD0gTUFTS19TUEM7CisKKwkJcGNpX3dyaXRlX3JlZyhjaGFuLCBlbmFibGVfbWFzaywgU0g0QV9QQ0lFUFRDVExSKGkpKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI5Niw5ICszNzksNyBAQAogCWlmICh1bmxpa2VseShyZXQgPCAwKSkKIAkJcmV0dXJuIHJldDsKIAotCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKHBvcnQtPmhvc2UpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKHBvcnQtPmhvc2UpOwogfQogCiBzdGF0aWMgc3RydWN0IHNoNzc4Nl9wY2llX2h3b3BzIHNoNzc4Nl82NW5tX3BjaWVfaHdvcHMgX19pbml0ZGF0YSA9IHsKQEAgLTMzMiwxNyArNDEzLDcgQEAKIAogCQlwb3J0LT5pbmRleAkJPSBpOwogCQlwb3J0LT5ob3NlCQk9IHNoNzc4Nl9wY2lfY2hhbm5lbHMgKyBpOwotCQlwb3J0LT5ob3NlLT5pb19tYXBfYmFzZQk9IHBvcnQtPmhvc2UtPmlvX3Jlc291cmNlLT5zdGFydDsKLQotCQkvKgotCQkgKiBDaGVjayBpZiB3ZSBhcmUgYm9vdGluZyBpbiAyOSBvciAzMi1iaXQgbW9kZQotCQkgKgotCQkgKiAzMi1iaXQgbW9kZSBwcm92aWRlcyBlYWNoIGNvbnRyb2xsZXIgd2l0aCBpdHMgb3duCi0JCSAqIG1lbW9yeSB3aW5kb3csIHdoaWxlIDI5LWJpdCBtb2RlIHVzZXMgYSBzaGFyZWQgb25lLgotCQkgKi8KLQkJcG9ydC0+aG9zZS0+bWVtX3Jlc291cmNlID0gdGVzdF9tb2RlX3BpbihNT0RFX1BJTjEwKSA/Ci0JCQkmc2g3Nzg2X3BjaV8zMmJpdF9tZW1fcmVzb3VyY2VzW2ldIDoKLQkJCSZzaDc3ODZfcGNpXzI5Yml0X21lbV9yZXNvdXJjZTsKKwkJcG9ydC0+aG9zZS0+aW9fbWFwX2Jhc2UJPSBwb3J0LT5ob3NlLT5yZXNvdXJjZXNbMF0uc3RhcnQ7CiAKIAkJcmV0IHw9IHNoNzc4Nl9wY2llX2h3b3BzLT5wb3J0X2luaXRfaHcocG9ydCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2llLXNoNzc4Ni5oIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2llLXNoNzc4Ni5oCmluZGV4IGM2NTUyOTAuLjkwYTY5OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpZS1zaDc3ODYuaAorKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaWUtc2g3Nzg2LmgKQEAgLTMwLDQ3ICszMCw5IEBACiAgKiBmb3Igb3RoZXIoTWF4IFBheWxvYWQgU2l6ZT00MDk2QixQQ0lJT19TSVpFPThNKQogICovCiAKLS8qIFBDSTAtMDogUENJIEkvTyBzcGFjZSAqLwotI2RlZmluZSBTSDRBX1BDSUlPX0JBU0UJCTB4RkQwMDAwMDAJLyogUENJIEkvTyBmb3IgY29udHJvbGxlciAwICovCi0jZGVmaW5lIFNINEFfUENJSU9fQkFTRTEJMHhGRDgwMDAwMAkvKiBQQ0kgSS9PIGZvciBjb250cm9sbGVyIDEgKFJldjEuMTQpKi8KLSNkZWZpbmUgU0g0QV9QQ0lJT19CQVNFMgkweEZDODAwMDAwCS8qIFBDSSBJL08gZm9yIGNvbnRyb2xsZXIgMiAoUmV2MS4xNzEpKi8KLQotI2RlZmluZSBTSDRBX1BDSUlPX1NJWkU2NAkweDAwMDEwMDAwCS8qIFBMWCBhbGxvd3Mgb25seSA2NEsgKi8KLSNkZWZpbmUgU0g0QV9QQ0lJT19TSVpFCQkweDAwODAwMDAwCS8qIDhNICovCi0jZGVmaW5lIFNINEFfUENJSU9fU0laRTIJMHgwMDQwMDAwMAkvKiA0TSAoUmV2MS4xNzEpKi8KLQotLyogUENJMC0xOiBQQ0kgbWVtb3J5IHNwYWNlIDI5LWJpdCBhZGRyZXNzICovCi0jZGVmaW5lIFNINEFfUENJTUVNX0JBU0UJMHgxMDAwMDAwMAotI2RlZmluZSBTSDRBX1BDSU1FTV9TSVpFCTB4MDQwMDAwMDAJLyogNjRNICovCi0KLS8qIFBDSTAtMjogUENJIG1lbW9yeSBzcGFjZSAzMi1iaXQgYWRkcmVzcyAqLwotI2RlZmluZSBTSDRBX1BDSU1FTV9CQVNFQQkweEMwMDAwMDAwCS8qICBmb3IgY29udHJvbGxlciAwICovCi0jZGVmaW5lIFNINEFfUENJTUVNX0JBU0VBMQkweEEwMDAwMDAwCS8qICBmb3IgY29udHJvbGxlciAxIChSZXYxLjE0KSovCi0jZGVmaW5lIFNINEFfUENJTUVNX0JBU0VBMgkweDgwMDAwMDAwCS8qICBmb3IgY29udHJvbGxlciAyIChSZXYxLjE3MSkqLwotI2RlZmluZSBTSDRBX1BDSU1FTV9TSVpFQQkweDIwMDAwMDAwCS8qIDUxMk0gKi8KLQogLyogUENJMDogUENJIG1lbW9yeSB0YXJnZXQgdHJhbnNmZXIgMzItYml0IGFkZHJlc3MgdHJhbnNsYXRpb24gdmFsdWUoUmV2MS4xMVQpKi8KICNkZWZpbmUgU0g0QV9QQ0lCTVNUUl9UUkFOU0xBVElPTgkweDIwMDAwMDAwCiAKLSNkZWZpbmUgU0g0QV9QQ0lfREVWSUNFX0lECQkweDAwMDIKLSNkZWZpbmUgU0g0QV9QQ0lfVkVORE9SX0lECQkweDE5MTIKLQotLy8gUENJIGNvbXBhdGlibGUgMDAwLTAzZgotI2RlZmluZSBQQ0lfQ01ECQkweDAwNAotI2RlZmluZSBQQ0lfUklECQkweDAwOAotI2RlZmluZSBQQ0lfSUJBUgkweDAxMAotI2RlZmluZSBQQ0lfTUJBUjAJMHgwMTQKLSNkZWZpbmUgUENJX01CQVIxCTB4MDE4Ci0KLS8qIFBDSSBwb3dlciBtYW5hZ2VtZW50L01TSS9jYXBhYmxpdHkgMDQwLTBmZiAqLwotLyogUENJRSBleHRlbmRlZCAxMDAtZmZmICovCi0KLS8qIFNINzc4NiBkZXZpY2UgaWRlbnRpZmljYXRpb24gKi8JLy8gUmV2MS4xNzEKLSNkZWZpbmUgU0g0QV9QVlIJCSgweEZGMDAwMDMwKQotI2RlZmluZSBTSDRBX1BWUl9TSFgzCQkoMHgxMDQwMDAwMCkKLSNkZWZpbmUgU0g0QV9QUlIJCSgweEZGMDAwMDQ0KQotI2RlZmluZSBTSDRBX1BSUl9TSDc3ODYJCSgweDAwMDAwNDAwKQkvLyBSZXYxLjE3MQotCiAvKglTUFZDUjAJCSovCiAjZGVmaW5lCVNINEFfUENJRVZDUjAJCSgweDAwMDAwMCkJLyogUiAtIDB4MDAwMCAwMDAwIDMyICovCiAjZGVmaW5lCQlCSVRTX1RPUF9NQgkoMjQpCkBAIC0zNTAsMjMgKzMxMiwyMyBAQAogI2RlZmluZQlTSDRBX1BDSUVDU0FSNQkJKDB4MDIwMkI0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCiAjZGVmaW5lCVNINEFfUENJRVNUQ1RMUjUJKDB4MDIwMkI4KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCiAKLS8qCVBDSUVQQVJMMAkqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJMMAkJKDB4MDIwNDAwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCisvKglQQ0lFUEFSTAkqLworI2RlZmluZQlTSDRBX1BDSUVQQVJMKHgpCSgweDAyMDQwMCArICgoeCkgKiAweDIwKSkgLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQkJQklUU19QQUwJKDE4KQogI2RlZmluZQkJTUFTS19QQUwJKDB4M2ZmZjw8QklUU19QQUwpCiAKLS8qCVBDSUVQQVJIMAkqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJIMAkJKDB4MDIwNDA0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCisvKglQQ0lFUEFSSAkqLworI2RlZmluZQlTSDRBX1BDSUVQQVJIKHgpCSgweDAyMDQwNCArICgoeCkgKiAweDIwKSkgLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQkJQklUU19QQUgJKDApCiAjZGVmaW5lCQlNQVNLX1BBSAkoMHhmZmZmZmZmZjw8QklUU19QQUgpCiAKLS8qCVBDSUVQQU1SMAkgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFNUjAJCSgweDAyMDQwOCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLworLyoJUENJRVBBTVIJICovCisjZGVmaW5lCVNINEFfUENJRVBBTVIoeCkJKDB4MDIwNDA4ICsgKCh4KSAqIDB4MjApKSAvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCiAjZGVmaW5lCQlCSVRTX1BBTQkoMTgpCiAjZGVmaW5lCQlNQVNLX1BBTQkoMHgzZmZmPDxCSVRTX1BBTSkKIAotLyoJUENJRVBUQ1RMUjAJKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUFRDVExSMAkoMHgwMjA0MEMpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KKy8qCVBDSUVQVENUTFIJKi8KKyNkZWZpbmUgU0g0QV9QQ0lFUFRDVExSKHgpCSgweDAyMDQwQyArICgoeCkgKiAweDIwKSkKICNkZWZpbmUJCUJJVFNfUEFSRQkoMzEpCiAjZGVmaW5lCQlNQVNLX1BBUkUJKDB4MTw8QklUU19QQVJFKQogI2RlZmluZQkJQklUU19UQwkJKDIwKQpAQCAtMzc4LDI2ICszNDAsNiBAQAogI2RlZmluZQkJQklUU19TUEMJKDgpCiAjZGVmaW5lCQlNQVNLX1NQQwkoMHgxPDxCSVRTX1NQQykKIAotI2RlZmluZQlTSDRBX1BDSUVQQVJMMQkJKDB4MDIwNDIwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBUkgxCQkoMHgwMjA0MjQpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFNUjEJCSgweDAyMDQyOCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQVENUTFIxCSgweDAyMDQyQykJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJMMgkJKDB4MDIwNDQwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBUkgyCQkoMHgwMjA0NDQpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFNUjIJCSgweDAyMDQ0OCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQVENUTFIyCSgweDAyMDQ0QykJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJMMwkJKDB4MDIwNDYwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBUkgzCQkoMHgwMjA0NjQpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFNUjMJCSgweDAyMDQ2OCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQVENUTFIzCSgweDAyMDQ2QykJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJMNAkJKDB4MDIwNDgwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBUkg0CQkoMHgwMjA0ODQpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFNUjQJCSgweDAyMDQ4OCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQVENUTFI0CSgweDAyMDQ4QykJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQQVJMNQkJKDB4MDIwNEEwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCi0jZGVmaW5lCVNINEFfUENJRVBBUkg1CQkoMHgwMjA0QTQpCS8qIFIvVyBSL1cgMHgwMDAwIDAwMDAgMzIgKi8KLSNkZWZpbmUJU0g0QV9QQ0lFUEFNUjUJCSgweDAyMDRBOCkJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwotI2RlZmluZQlTSDRBX1BDSUVQVENUTFI1CSgweDAyMDRBQykJLyogUi9XIFIvVyAweDAwMDAgMDAwMCAzMiAqLwogI2RlZmluZQlTSDRBX1BDSUVETUFPUgkJKDB4MDIxMDAwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCiAjZGVmaW5lCVNINEFfUENJRURNU0FSMAkJKDB4MDIxMTAwKQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCiAjZGVmaW5lCVNINEFfUENJRURNU0FIUjAJKDB4MDIxMTA0KQkvKiBSL1cgUi9XIDB4MDAwMCAwMDAwIDMyICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvc3VwZXJoeXdheS9vcHMtc2g0LTIwMi5jIGIvYXJjaC9zaC9kcml2ZXJzL3N1cGVyaHl3YXkvb3BzLXNoNC0yMDIuYwppbmRleCAzYjE0YmY4Li42ZGE2MmU5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvc3VwZXJoeXdheS9vcHMtc2g0LTIwMi5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9zdXBlcmh5d2F5L29wcy1zaDQtMjAyLmMKQEAgLTEzNCw4ICsxMzQsOCBAQAogCSAqCiAJICogRG8gbm90IHRydXN0IHRoZSBkb2N1bWVudGF0aW9uLCBmb3IgaXQgaXMgZXZpbC4KIAkgKi8KLQl2Y3JoID0gY3RybF9pbmwoYmFzZSk7Ci0JdmNybCA9IGN0cmxfaW5sKGJhc2UgKyBzaXplb2YodTMyKSk7CisJdmNyaCA9IF9fcmF3X3JlYWRsKGJhc2UpOworCXZjcmwgPSBfX3Jhd19yZWFkbChiYXNlICsgc2l6ZW9mKHUzMikpOwogCiAJdG1wID0gKCh1NjQpdmNyaCA8PCAzMikgfCB2Y3JsOwogCW1lbWNweSh2Y3IsICZ0bXAsIHNpemVvZih1NjQpKTsKQEAgLTE0Nyw4ICsxNDcsOCBAQAogewogCXU2NCB0bXAgPSAqKHU2NCAqKSZ2Y3I7CiAKLQljdHJsX291dGwoKHRtcCA+PiAzMikgJiAweGZmZmZmZmZmLCBiYXNlKTsKLQljdHJsX291dGwodG1wICYgMHhmZmZmZmZmZiwgYmFzZSArIHNpemVvZih1MzIpKTsKKwlfX3Jhd193cml0ZWwoKHRtcCA+PiAzMikgJiAweGZmZmZmZmZmLCBiYXNlKTsKKwlfX3Jhd193cml0ZWwodG1wICYgMHhmZmZmZmZmZiwgYmFzZSArIHNpemVvZih1MzIpKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9LYnVpbGQgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL0tidWlsZAppbmRleCBlMTIxYzMwLi40NmNiOTM0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL0tidWlsZAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL0tidWlsZApAQCAtMSw2ICsxLDggQEAKIGluY2x1ZGUgaW5jbHVkZS9hc20tZ2VuZXJpYy9LYnVpbGQuYXNtCiAKLWhlYWRlci15ICs9IGNhY2hlY3RsLmggY3B1LWZlYXR1cmVzLmgKK2hlYWRlci15ICs9IGNhY2hlY3RsLmgKK2hlYWRlci15ICs9IGNwdS1mZWF0dXJlcy5oCitoZWFkZXIteSArPSBod19icmVha3BvaW50LmgKIAogdW5pZmRlZi15ICs9IHVuaXN0ZF8zMi5oCiB1bmlmZGVmLXkgKz0gdW5pc3RkXzY0LmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYWRkcnNwYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2FkZHJzcGFjZS5oCmluZGV4IDk5ZDZiM2UuLjQ0NmIzODMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYWRkcnNwYWNlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hZGRyc3BhY2UuaApAQCAtMjgsNyArMjgsNyBAQAogLyogUmV0dXJucyB0aGUgcHJpdmlsZWdlZCBzZWdtZW50IGJhc2Ugb2YgYSBnaXZlbiBhZGRyZXNzICAqLwogI2RlZmluZSBQWFNFRyhhKQkoKCh1bnNpZ25lZCBsb25nKShhKSkgJiAweGUwMDAwMDAwKQogCi0jaWYgZGVmaW5lZChDT05GSUdfMjlCSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNQl9GSVhFRCkKKyNpZmRlZiBDT05GSUdfMjlCSVQKIC8qCiAgKiBNYXAgYW4gYWRkcmVzcyB0byBhIGNlcnRhaW4gcHJpdmlsZWdlZCBzZWdtZW50CiAgKi8KQEAgLTQwLDcgKzQwLDE1IEBACiAJKChfX3R5cGVvZl9fKGEpKSgoKHVuc2lnbmVkIGxvbmcpKGEpICYgMHgxZmZmZmZmZikgfCBQM1NFRykpCiAjZGVmaW5lIFA0U0VHQUREUihhKQlcCiAJKChfX3R5cGVvZl9fKGEpKSgoKHVuc2lnbmVkIGxvbmcpKGEpICYgMHgxZmZmZmZmZikgfCBQNFNFRykpCi0jZW5kaWYgLyogMjlCSVQgfHwgUE1CX0ZJWEVEICovCisjZWxzZQorLyoKKyAqIFRoZXNlIHdpbGwgbmV2ZXIgd29yayBpbiAzMi1iaXQsIGRvbid0IGV2ZW4gYm90aGVyLgorICovCisjZGVmaW5lIFAxU0VHQUREUihhKQlfX2Z1dGlsZV9yZW1hcHBpbmdfYXR0ZW1wdAorI2RlZmluZSBQMlNFR0FERFIoYSkJX19mdXRpbGVfcmVtYXBwaW5nX2F0dGVtcHQKKyNkZWZpbmUgUDNTRUdBRERSKGEpCV9fZnV0aWxlX3JlbWFwcGluZ19hdHRlbXB0CisjZGVmaW5lIFA0U0VHQUREUihhKQlfX2Z1dGlsZV9yZW1hcHBpbmdfYXR0ZW1wdAorI2VuZGlmCiAjZW5kaWYgLyogUDFTRUcgKi8KIAogLyogQ2hlY2sgaWYgYW4gYWRkcmVzcyBjYW4gYmUgcmVhY2hlZCBpbiAyOSBiaXRzICovCkBAIC01NywxMSArNjUsNSBAQAogI2RlZmluZSBQM19BRERSX01BWAkJUDRTRUcKICNlbmRpZgogCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotI2lmZGVmIENPTkZJR19QTUIKLWV4dGVybiBpbnQgX19pbl8yOWJpdF9tb2RlKHZvaWQpOwotI2VuZGlmIC8qIENPTkZJR19QTUIgKi8KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfX0FTTV9TSF9BRERSU1BBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9hbGlnbm1lbnQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYWxpZ25tZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEyZWZlYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYWxpZ25tZW50LmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfX0FTTV9TSF9BTElHTk1FTlRfSAorI2RlZmluZSBfX0FTTV9TSF9BTElHTk1FTlRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZXh0ZXJuIHZvaWQgaW5jX3VuYWxpZ25lZF9ieXRlX2FjY2Vzcyh2b2lkKTsKK2V4dGVybiB2b2lkIGluY191bmFsaWduZWRfd29yZF9hY2Nlc3Modm9pZCk7CitleHRlcm4gdm9pZCBpbmNfdW5hbGlnbmVkX2R3b3JkX2FjY2Vzcyh2b2lkKTsKK2V4dGVybiB2b2lkIGluY191bmFsaWduZWRfbXVsdGlfYWNjZXNzKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5jX3VuYWxpZ25lZF91c2VyX2FjY2Vzcyh2b2lkKTsKK2V4dGVybiB2b2lkIGluY191bmFsaWduZWRfa2VybmVsX2FjY2Vzcyh2b2lkKTsKKworI2RlZmluZSBVTV9XQVJOCQkoMSA8PCAwKQorI2RlZmluZSBVTV9GSVhVUAkoMSA8PCAxKQorI2RlZmluZSBVTV9TSUdOQUwJKDEgPDwgMikKKworZXh0ZXJuIHVuc2lnbmVkIGludCB1bmFsaWduZWRfdXNlcl9hY3Rpb24odm9pZCk7CisKK2V4dGVybiB2b2lkIHVuYWxpZ25lZF9maXh1cHNfbm90aWZ5KHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBpbnNuX3NpemVfdCwgc3RydWN0IHB0X3JlZ3MgKik7CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9BTElHTk1FTlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtZ3JiLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1ncmIuaAppbmRleCA0YzViN2RiLi5hMjczYzg4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1ncmIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1ncmIuaApAQCAtMTIwLDUwICsxMjAsNCBAQAogCQk6ICJtZW1vcnkiICwgInIwIiwgInIxIik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19jbXB4Y2hnKGF0b21pY190ICp2LCBpbnQgb2xkLCBpbnQgbmV3KQotewotCWludCByZXQ7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIgICAuYWxpZ24gMgkJXG5cdCIKLQkJIiAgIG1vdmEgICAgIDFmLCAgcjAJXG5cdCIKLQkJIiAgIG5vcAkJCVxuXHQiCi0JCSIgICBtb3YgICAgIHIxNSwgIHIxCVxuXHQiCi0JCSIgICBtb3YgICAgIy04LCAgcjE1CVxuXHQiCi0JCSIgICBtb3YubCAgIEAlMSwgICUwCVxuXHQiCi0JCSIgICBjbXAvZXEgICAlMiwgICUwCVxuXHQiCi0JCSIgICBiZgkgICAgIDFmCQlcblx0IgotCQkiICAgbW92LmwgICAgJTMsIEAlMQlcblx0IgotCQkiMTogbW92ICAgICAgcjEsICByMTUJXG5cdCIKLQkJOiAiPSZyIiAocmV0KQotCQk6ICJyIiAodiksICJyIiAob2xkKSwgInIiIChuZXcpCi0JCTogIm1lbW9yeSIgLCAicjAiLCAicjEiICwgInQiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCi17Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIiAgIC5hbGlnbiAyCQlcblx0IgotCQkiICAgbW92YSAgICAxZiwgICByMAlcblx0IgotCQkiICAgbm9wCQkJXG5cdCIKLQkJIiAgIG1vdiAgICByMTUsICAgcjEJXG5cdCIKLQkJIiAgIG1vdiAgICAjLTEyLCAgcjE1CVxuXHQiCi0JCSIgICBtb3YubCAgQCUyLCAgICUxCVxuXHQiCi0JCSIgICBtb3YJICAgICUxLCAgICUwICAgIFxuXHQiCi0JCSIgICBjbXAvZXEgICU0LCAgICUwCVxuXHQiCi0JCSIgICBidC9zICAgIDFmCQlcblx0IgotCQkiICAgIGFkZCAgICAlMywgICAlMQlcblx0IgotCQkiICAgbW92LmwgICAlMSwgIEAlMglcblx0IgotCQkiMTogbW92ICAgICByMSwgICByMTUJXG5cdCIKLQkJOiAiPSZyIiAocmV0KSwgIj0mciIgKHRtcCkKLQkJOiAiciIgKHYpLCAiciIgKGEpLCAiciIgKHUpCi0JCTogIm1lbW9yeSIgLCAicjAiLCAicjEiICwgInQiKTsKLQotCXJldHVybiByZXQgIT0gdTsKLX0KICNlbmRpZiAvKiBfX0FTTV9TSF9BVE9NSUNfR1JCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLWxsc2MuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLWxsc2MuaAppbmRleCBiMDQwZTFlLi40YjAwYjc4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy1sbHNjLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMtbGxzYy5oCkBAIC0xMDQsMzEgKzEwNCw0IEBACiAJOiAidCIpOwogfQogCi0jZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG8sIG4pIChjbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG8pLCAobikpKQotCi0vKioKLSAqIGF0b21pY19hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGEgZ2l2ZW4gdmFsdWUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byB2Li4uCi0gKiBAdTogLi4udW5sZXNzIHYgaXMgZXF1YWwgdG8gdS4KLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQHYsIHNvIGxvbmcgYXMgaXQgd2FzIG5vdCBAdS4KLSAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQotewotCWludCBjLCBvbGQ7Ci0JYyA9IGF0b21pY19yZWFkKHYpOwotCWZvciAoOzspIHsKLQkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKLQkJCWJyZWFrOwotCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOwotCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKLQkJCWJyZWFrOwotCQljID0gb2xkOwotCX0KLQotCXJldHVybiBjICE9ICh1KTsKLX0KLQogI2VuZGlmIC8qIF9fQVNNX1NIX0FUT01JQ19MTFNDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IGIxNjM4OGQuLjI3NWE0NDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtMjUsNTggKzI1LDQzIEBACiAjZW5kaWYKIAogI2RlZmluZSBhdG9taWNfYWRkX25lZ2F0aXZlKGEsIHYpCShhdG9taWNfYWRkX3JldHVybigoYSksICh2KSkgPCAwKQorI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KQkJYXRvbWljX3N1Yl9yZXR1cm4oMSwgKHYpKQorI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KQkJYXRvbWljX2FkZF9yZXR1cm4oMSwgKHYpKQorI2RlZmluZSBhdG9taWNfaW5jX2FuZF90ZXN0KHYpCQkoYXRvbWljX2luY19yZXR1cm4odikgPT0gMCkKKyNkZWZpbmUgYXRvbWljX3N1Yl9hbmRfdGVzdChpLHYpCShhdG9taWNfc3ViX3JldHVybigoaSksICh2KSkgPT0gMCkKKyNkZWZpbmUgYXRvbWljX2RlY19hbmRfdGVzdCh2KQkJKGF0b21pY19zdWJfcmV0dXJuKDEsICh2KSkgPT0gMCkKKyNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KQkJYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQogCi0jZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpIGF0b21pY19zdWJfcmV0dXJuKDEsKHYpKQotI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KSBhdG9taWNfYWRkX3JldHVybigxLCh2KSkKKyNkZWZpbmUgYXRvbWljX2luYyh2KQkJCWF0b21pY19hZGQoMSwgKHYpKQorI2RlZmluZSBhdG9taWNfZGVjKHYpCQkJYXRvbWljX3N1YigxLCAodikpCiAKLS8qCi0gKiBhdG9taWNfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0CisjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykJCSh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKKyNkZWZpbmUgYXRvbWljX2NtcHhjaGcodiwgbywgbikJCShjbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG8pLCAobikpKQorCisvKioKKyAqIGF0b21pY19hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGEgZ2l2ZW4gdmFsdWUKICAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byB2Li4uCisgKiBAdTogLi4udW5sZXNzIHYgaXMgZXF1YWwgdG8gdS4KICAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQotICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgorICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIGl0IHdhcyBub3QgQHUuCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEB2IHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KICAqLwotI2RlZmluZSBhdG9taWNfaW5jX2FuZF90ZXN0KHYpIChhdG9taWNfaW5jX3JldHVybih2KSA9PSAwKQotCi0jZGVmaW5lIGF0b21pY19zdWJfYW5kX3Rlc3QoaSx2KSAoYXRvbWljX3N1Yl9yZXR1cm4oKGkpLCAodikpID09IDApCi0jZGVmaW5lIGF0b21pY19kZWNfYW5kX3Rlc3QodikgKGF0b21pY19zdWJfcmV0dXJuKDEsICh2KSkgPT0gMCkKLQotI2RlZmluZSBhdG9taWNfaW5jKHYpIGF0b21pY19hZGQoMSwodikpCi0jZGVmaW5lIGF0b21pY19kZWModikgYXRvbWljX3N1YigxLCh2KSkKLQotI2lmICFkZWZpbmVkKENPTkZJR19HVVNBX1JCKSAmJiAhZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfY21weGNoZyhhdG9taWNfdCAqdiwgaW50IG9sZCwgaW50IG5ldykKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JcmV0ID0gdi0+Y291bnRlcjsKLQlpZiAobGlrZWx5KHJldCA9PSBvbGQpKQotCQl2LT5jb3VudGVyID0gbmV3OwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCiB7Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjLCBvbGQ7CisJYyA9IGF0b21pY19yZWFkKHYpOworCWZvciAoOzspIHsKKwkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKKwkJCWJyZWFrOworCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOworCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKKwkJCWJyZWFrOworCQljID0gb2xkOworCX0KIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlyZXQgPSB2LT5jb3VudGVyOwotCWlmIChyZXQgIT0gdSkKLQkJdi0+Y291bnRlciArPSBhOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiByZXQgIT0gdTsKKwlyZXR1cm4gYyAhPSAodSk7CiB9Ci0jZW5kaWYgLyogIUNPTkZJR19HVVNBX1JCICYmICFDT05GSUdfQ1BVX1NINEEgKi8KLQotI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKLSNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCiAKICNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCXNtcF9tYigpCiAjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCXNtcF9tYigpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IGRkYTk2ZWIuLmRhM2ViZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC02Myw2ICs2MywxNCBAQAogCWlmIChib290X2NwdV9kYXRhLmRjYWNoZS5uX2FsaWFzZXMgJiYgUGFnZUFub24ocGFnZSkpCiAJCV9fZmx1c2hfYW5vbl9wYWdlKHBhZ2UsIHZtYWRkcik7CiB9CitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfa2VybmVsX3ZtYXBfcmFuZ2Uodm9pZCAqYWRkciwgaW50IHNpemUpCit7CisJX19mbHVzaF93YmFja19yZWdpb24oYWRkciwgc2l6ZSk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZV9rZXJuZWxfdm1hcF9yYW5nZSh2b2lkICphZGRyLCBpbnQgc2l6ZSkKK3sKKwlfX2ZsdXNoX2ludmFsaWRhdGVfcmVnaW9uKGFkZHIsIHNpemUpOworfQogCiAjZGVmaW5lIEFSQ0hfSEFTX0ZMVVNIX0tFUk5FTF9EQ0FDSEVfUEFHRQogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2tlcm5lbF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaAppbmRleCA5ZmU3ZDdmLi4xMWRhNGM1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbG9jay5oCkBAIC0xNDYsOCArMTQ2LDE3IEBACiAJLmZsYWdzID0gX2ZsYWdzLAkJCQkJCVwKIH0KIAorc3RydWN0IGNsa19kaXY0X3RhYmxlIHsKKwlzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlICpkaXZfbXVsdF90YWJsZTsKKwl2b2lkICgqa2ljaykoc3RydWN0IGNsayAqY2xrKTsKK307CisKIGludCBzaF9jbGtfZGl2NF9yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGtzLCBpbnQgbnIsCi0JCQkgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSAqdGFibGUpOworCQkJIHN0cnVjdCBjbGtfZGl2NF90YWJsZSAqdGFibGUpOworaW50IHNoX2Nsa19kaXY0X2VuYWJsZV9yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGtzLCBpbnQgbnIsCisJCQkgc3RydWN0IGNsa19kaXY0X3RhYmxlICp0YWJsZSk7CitpbnQgc2hfY2xrX2RpdjRfcmVwYXJlbnRfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAorCQkJIHN0cnVjdCBjbGtfZGl2NF90YWJsZSAqdGFibGUpOwogCiAjZGVmaW5lIFNIX0NMS19ESVY2KF9uYW1lLCBfcGFyZW50LCBfcmVnLCBfZmxhZ3MpCVwKIHsJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWdyYi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWdyYi5oCmluZGV4IGUyNjgxYWIuLjQ2NzZiZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1ncmIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctZ3JiLmgKQEAgLTU3LDExICs1NywxMCBAQAogCQkiICAgbW92LmwgIEAlMSwgICAlMCAgICAgIFxuXHQiIC8qIGxvYWQgIG9sZCB2YWx1ZSAqLwogCQkiICAgY21wL2VxICAlMCwgICAlMiAgICAgIFxuXHQiCiAJCSIgICBiZiAgICAgICAgICAgIDFmICAgICAgXG5cdCIgLyogaWYgbm90IGVxdWFsICovCi0JCSIgICBtb3YubCAgICUyLCAgIEAlMSAgICAgXG5cdCIgLyogc3RvcmUgbmV3IHZhbHVlICovCisJCSIgICBtb3YubCAgICUzLCAgIEAlMSAgICAgXG5cdCIgLyogc3RvcmUgbmV3IHZhbHVlICovCiAJCSIxOiBtb3YgICAgIHIxLCAgIHIxNSAgICAgXG5cdCIgLyogTE9HT1VUICovCi0JCTogIj0mciIgKHJldHZhbCksCi0JCSAgIityIiAgKG0pCi0JCTogInIiICAgKG5ldykKKwkJOiAiPSZyIiAocmV0dmFsKQorCQk6ICAiciIgIChtKSwgInIiICAob2xkKSwgInIiICAobmV3KQogCQk6ICJtZW1vcnkiICwgInIwIiwgInIxIiwgInQiKTsKIAogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggODdjZWQxMy4uYmVhMzMzNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtODksOCArODksNiBAQAogewogCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKIAotCVdBUk5fT04oaXJxc19kaXNhYmxlZCgpKTsJLyogZm9yIHBvcnRhYmlsaXR5ICovCi0KIAlpZiAoZG1hX3JlbGVhc2VfZnJvbV9jb2hlcmVudChkZXYsIGdldF9vcmRlcihzaXplKSwgdmFkZHIpKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLXNoLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oCmluZGV4IDc4ZWVkM2UwLi5lOTM0YTJlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLXNoLmgKQEAgLTIwLDE0ICsyMCwxNCBAQAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkJfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKICNkZWZpbmUgZG1hb3JfcmVhZF9yZWcobikgXAotICAgIChuID8gY3RybF9pbncoU0hfRE1BQ19CQVNFMSArIERNQU9SKSBcCi0JOiBjdHJsX2ludyhTSF9ETUFDX0JBU0UwICsgRE1BT1IpKQorICAgIChuID8gX19yYXdfcmVhZHcoU0hfRE1BQ19CQVNFMSArIERNQU9SKSBcCisJOiBfX3Jhd19yZWFkdyhTSF9ETUFDX0JBU0UwICsgRE1BT1IpKQogI2RlZmluZSBkbWFvcl93cml0ZV9yZWcobiwgZGF0YSkgXAotICAgIChuID8gY3RybF9vdXR3KGRhdGEsIFNIX0RNQUNfQkFTRTEgKyBETUFPUikgXAotICAgIDogY3RybF9vdXR3KGRhdGEsIFNIX0RNQUNfQkFTRTAgKyBETUFPUikpCisgICAgKG4gPyBfX3Jhd193cml0ZXcoZGF0YSwgU0hfRE1BQ19CQVNFMSArIERNQU9SKSBcCisgICAgOiBfX3Jhd193cml0ZXcoZGF0YSwgU0hfRE1BQ19CQVNFMCArIERNQU9SKSkKICNlbHNlIC8qIE90aGVyIENQVSAqLwotI2RlZmluZSBkbWFvcl9yZWFkX3JlZyhuKSBjdHJsX2ludyhTSF9ETUFDX0JBU0UwICsgRE1BT1IpCi0jZGVmaW5lIGRtYW9yX3dyaXRlX3JlZyhuLCBkYXRhKSBjdHJsX291dHcoZGF0YSwgU0hfRE1BQ19CQVNFMCArIERNQU9SKQorI2RlZmluZSBkbWFvcl9yZWFkX3JlZyhuKSBfX3Jhd19yZWFkdyhTSF9ETUFDX0JBU0UwICsgRE1BT1IpCisjZGVmaW5lIGRtYW9yX3dyaXRlX3JlZyhuLCBkYXRhKSBfX3Jhd193cml0ZXcoZGF0YSwgU0hfRE1BQ19CQVNFMCArIERNQU9SKQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgZG10ZV9pcnFfbWFwW10gX19tYXliZV91bnVzZWQgPSB7CkBAIC02NCw4ICs2NCwxMCBAQAogI2RlZmluZSBBQ0tfTAkweDAwMDEwMDAwCiAjZGVmaW5lIERNX0lOQwkweDAwMDA0MDAwCiAjZGVmaW5lIERNX0RFQwkweDAwMDA4MDAwCisjZGVmaW5lIERNX0ZJWAkweDAwMDBjMDAwCiAjZGVmaW5lIFNNX0lOQwkweDAwMDAxMDAwCiAjZGVmaW5lIFNNX0RFQwkweDAwMDAyMDAwCisjZGVmaW5lIFNNX0ZJWAkweDAwMDAzMDAwCiAjZGVmaW5lIFJTX0lOCTB4MDAwMDAyMDAKICNkZWZpbmUgUlNfT1VUCTB4MDAwMDAzMDAKICNkZWZpbmUgVFNfQkxLCTB4MDAwMDAwNDAKQEAgLTgzLDcgKzg1LDcgQEAKICAqIERlZmluZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBkdWFsIGFkZHJlc3MgbWVtb3J5LW1lbW9yeSB0cmFuc2Zlci4KICAqIFRoZSAweDQwMCB2YWx1ZSByZXByZXNlbnRzIGF1dG8tcmVxdWVzdCwgZXh0ZXJuYWwtPmV4dGVybmFsLgogICovCi0jZGVmaW5lIFJTX0RVQUwJKERNX0lOQyB8IFNNX0lOQyB8IDB4NDAwIHwgVFNfMzIpCisjZGVmaW5lIFJTX0RVQUwJKERNX0lOQyB8IFNNX0lOQyB8IDB4NDAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfMzJCSVQpKQogCiAvKiBETUEgYmFzZSBhZGRyZXNzICovCiBzdGF0aWMgdTMyIGRtYV9iYXNlX2FkZHJbXSBfX21heWJlX3VudXNlZCA9IHsKQEAgLTEyMywxMCArMTI1LDQ3IEBACiAgKi8KICNkZWZpbmUgU0hETUFfTUlYX0lSUQkoMSA8PCAxKQogI2RlZmluZSBTSERNQV9ETUFPUjEJKDEgPDwgMikKLSNkZWZpbmUgU0hETUFfRE1BRTEJCSgxIDw8IDMpCisjZGVmaW5lIFNIRE1BX0RNQUUxCSgxIDw8IDMpCisKK2VudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkIHsKKwlTSERNQV9TTEFWRV9TQ0lGMF9UWCwKKwlTSERNQV9TTEFWRV9TQ0lGMF9SWCwKKwlTSERNQV9TTEFWRV9TQ0lGMV9UWCwKKwlTSERNQV9TTEFWRV9TQ0lGMV9SWCwKKwlTSERNQV9TTEFWRV9TQ0lGMl9UWCwKKwlTSERNQV9TTEFWRV9TQ0lGMl9SWCwKKwlTSERNQV9TTEFWRV9TQ0lGM19UWCwKKwlTSERNQV9TTEFWRV9TQ0lGM19SWCwKKwlTSERNQV9TTEFWRV9TQ0lGNF9UWCwKKwlTSERNQV9TTEFWRV9TQ0lGNF9SWCwKKwlTSERNQV9TTEFWRV9TQ0lGNV9UWCwKKwlTSERNQV9TTEFWRV9TQ0lGNV9SWCwKKwlTSERNQV9TTEFWRV9TSVVBX1RYLAorCVNIRE1BX1NMQVZFX1NJVUFfUlgsCisJU0hETUFfU0xBVkVfU0lVQl9UWCwKKwlTSERNQV9TTEFWRV9TSVVCX1JYLAorCVNIRE1BX1NMQVZFX05VTUJFUiwJLyogTXVzdCBzdGF5IGxhc3QgKi8KK307CisKK3N0cnVjdCBzaF9kbWFlX3NsYXZlX2NvbmZpZyB7CisJZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQJc2xhdmVfaWQ7CisJZG1hX2FkZHJfdAkJCWFkZHI7CisJdTMyCQkJCWNoY3I7CisJY2hhcgkJCQltaWRfcmlkOworfTsKIAogc3RydWN0IHNoX2RtYWVfcGRhdGEgewogCXVuc2lnbmVkIGludCBtb2RlOworCXN0cnVjdCBzaF9kbWFlX3NsYXZlX2NvbmZpZyAqY29uZmlnOworCWludCBjb25maWdfbnVtOworfTsKKworc3RydWN0IGRldmljZTsKKworc3RydWN0IHNoX2RtYWVfc2xhdmUgeworCWVudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkCXNsYXZlX2lkOyAvKiBTZXQgYnkgdGhlIHBsYXRmb3JtICovCisJc3RydWN0IGRldmljZQkJCSpkbWFfZGV2OyAvKiBTZXQgYnkgdGhlIHBsYXRmb3JtICovCisJc3RydWN0IHNoX2RtYWVfc2xhdmVfY29uZmlnCSpjb25maWc7ICAvKiBTZXQgYnkgdGhlIGRyaXZlciAqLwogfTsKIAogI2VuZGlmIC8qIF9fRE1BX1NIX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZHdhcmYuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZHdhcmYuaAppbmRleCBiZGNjYmJmLi5kNjJhYmQxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2R3YXJmLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kd2FyZi5oCkBAIC0yNDMsMTYgKzI0MywxMyBAQAogCiAJdW5zaWduZWQgbG9uZyBjaWVfcG9pbnRlcjsKIAotCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKLQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAjZGVmaW5lIERXQVJGX0NJRV9aX0FVR01FTlRBVElPTgkoMSA8PCAwKQogCi0JLyoKLQkgKiAnbW9kJyB3aWxsIGJlIG5vbi1OVUxMIGlmIHRoaXMgQ0lFIGNhbWUgZnJvbSBhIG1vZHVsZSdzCi0JICogLmVoX2ZyYW1lIHNlY3Rpb24uCi0JICovCi0Jc3RydWN0IG1vZHVsZSAqbW9kOworCS8qIGxpbmtlZC1saXN0IGVudHJ5IGlmIHRoaXMgQ0lFIGlzIGZyb20gYSBtb2R1bGUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisKKwlzdHJ1Y3QgcmJfbm9kZSBub2RlOwogfTsKIAogLyoqCkBAIC0yNjYsMTMgKzI2MywxMSBAQAogCXVuc2lnbmVkIGxvbmcgYWRkcmVzc19yYW5nZTsKIAl1bnNpZ25lZCBjaGFyICppbnN0cnVjdGlvbnM7CiAJdW5zaWduZWQgY2hhciAqZW5kOworCisJLyogbGlua2VkLWxpc3QgZW50cnkgaWYgdGhpcyBGREUgaXMgZnJvbSBhIG1vZHVsZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKIAotCS8qCi0JICogJ21vZCcgd2lsbCBiZSBub24tTlVMTCBpZiB0aGlzIEZERSBjYW1lIGZyb20gYSBtb2R1bGUncwotCSAqIC5laF9mcmFtZSBzZWN0aW9uLgotCSAqLwotCXN0cnVjdCBtb2R1bGUgKm1vZDsKKwlzdHJ1Y3QgcmJfbm9kZSBub2RlOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9maXhtYXAuaAppbmRleCA1YWMxZTQwLi42ZTdjZWE0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZml4bWFwLmgKQEAgLTU1LDE2ICs1NSwyOSBAQAogI2RlZmluZSBGSVhfTl9DT0xPVVJTIDgKIAlGSVhfQ01BUF9CRUdJTiwKIAlGSVhfQ01BUF9FTkQgPSBGSVhfQ01BUF9CRUdJTiArIChGSVhfTl9DT0xPVVJTICogTlJfQ1BVUykgLSAxLAotCUZJWF9VTkNBQ0hFRCwKKwogI2lmZGVmIENPTkZJR19ISUdITUVNCiAJRklYX0tNQVBfQkVHSU4sCS8qIHJlc2VydmVkIHB0ZSdzIGZvciB0ZW1wb3Jhcnkga2VybmVsIG1hcHBpbmdzICovCiAJRklYX0tNQVBfRU5EID0gRklYX0tNQVBfQkVHSU4rKEtNX1RZUEVfTlIqTlJfQ1BVUyktMSwKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX0lPUkVNQVBfRklYRUQKKwkvKgorCSAqIEZJWF9JT1JFTUFQIGVudHJpZXMgYXJlIHVzZWZ1bCBmb3IgbWFwcGluZyBwaHlzaWNhbCBhZGRyZXNzCisJICogc3BhY2UgYmVmb3JlIGlvcmVtYXAoKSBpcyB1c2VhYmxlLCBlLmcuIHJlYWxseSBlYXJseSBpbiBib290CisJICogYmVmb3JlIGttYWxsb2MoKSBpcyB3b3JraW5nLgorCSAqLworI2RlZmluZSBGSVhfTl9JT1JFTUFQUwkzMgorCUZJWF9JT1JFTUFQX0JFR0lOLAorCUZJWF9JT1JFTUFQX0VORCA9IEZJWF9JT1JFTUFQX0JFR0lOICsgRklYX05fSU9SRU1BUFMsCisjZW5kaWYKKwogCV9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcwogfTsKIAogZXh0ZXJuIHZvaWQgX19zZXRfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwKIAkJCSB1bnNpZ25lZCBsb25nIHBoeXMsIHBncHJvdF90IGZsYWdzKTsKK2V4dGVybiB2b2lkIF9fY2xlYXJfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwgcGdwcm90X3QgZmxhZ3MpOwogCiAjZGVmaW5lIHNldF9maXhtYXAoaWR4LCBwaHlzKSBcCiAJCV9fc2V0X2ZpeG1hcChpZHgsIHBoeXMsIFBBR0VfS0VSTkVMKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9mcHUuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZnB1LmgKaW5kZXggZmI2YmJiOS4uMDZjNDI4MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9mcHUuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZwdS5oCkBAIC0yLDggKzIsOCBAQAogI2RlZmluZSBfX0FTTV9TSF9GUFVfSAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKIAogI2lmZGVmIENPTkZJR19TSF9GUFUKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWxlYXNlX2ZwdShzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTE2LDIyICsxNiwyMyBAQAogCXJlZ3MtPnNyICY9IH5TUl9GRDsKIH0KIAotc3RydWN0IHRhc2tfc3RydWN0OwotCiBleHRlcm4gdm9pZCBzYXZlX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9fdHNrKTsKLXZvaWQgZnB1X3N0YXRlX3Jlc3RvcmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgcmVzdG9yZV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICpfX3Rzayk7CitleHRlcm4gdm9pZCBmcHVfc3RhdGVfcmVzdG9yZShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBfX2ZwdV9zdGF0ZV9yZXN0b3JlKHZvaWQpOwogI2Vsc2UKLQotI2RlZmluZSBzYXZlX2ZwdSh0c2spCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHJlbGVhc2VfZnB1KHJlZ3MpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZ3JhYl9mcHUocmVncykJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZnB1X3N0YXRlX3Jlc3RvcmUocmVncykJZG8geyB9IHdoaWxlICgwKQotCisjZGVmaW5lIHNhdmVfZnB1KHRzaykJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHJlc3RvcmVfZnB1KHRzaykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcmVsZWFzZV9mcHUocmVncykJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZ3JhYl9mcHUocmVncykJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZwdV9zdGF0ZV9yZXN0b3JlKHJlZ3MpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fZnB1X3N0YXRlX3Jlc3RvcmUocmVncykJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKIHN0cnVjdCB1c2VyX3JlZ3NldDsKIAogZXh0ZXJuIGludCBkb19mcHVfaW5zdCh1bnNpZ25lZCBzaG9ydCwgc3RydWN0IHB0X3JlZ3MgKik7CitleHRlcm4gaW50IGluaXRfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIAogZXh0ZXJuIGludCBmcHJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAogCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKQEAgLTY1LDE4ICs2Niw2IEBACiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgaW5pdF9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JaWYgKHRza191c2VkX21hdGgodHNrKSkgewotCQlpZiAoKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkgJiYgdHNrID09IGN1cnJlbnQpCi0JCQl1bmxhenlfZnB1KHRzaywgdGFza19wdF9yZWdzKHRzaykpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzZXRfc3RvcHBlZF9jaGlsZF91c2VkX21hdGgodHNrKTsKLQlyZXR1cm4gMDsKLX0KLQogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX19BU01fU0hfRlBVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9od19icmVha3BvaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY1ZGQ3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oCkBAIC0wLDAgKzEsNjcgQEAKKyNpZm5kZWYgX19BU01fU0hfSFdfQlJFQUtQT0lOVF9ICisjZGVmaW5lIF9fQVNNX1NIX0hXX0JSRUFLUE9JTlRfSAorCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBfX0FSQ0hfSFdfQlJFQUtQT0lOVF9ICisKKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50IHsKKwljaGFyCQkqbmFtZTsgLyogQ29udGFpbnMgbmFtZSBvZiB0aGUgc3ltYm9sIHRvIHNldCBia3B0ICovCisJdW5zaWduZWQgbG9uZwlhZGRyZXNzOworCXUxNgkJbGVuOworCXUxNgkJdHlwZTsKK307CisKK2VudW0geworCVNIX0JSRUFLUE9JTlRfUkVBRAk9ICgxIDw8IDEpLAorCVNIX0JSRUFLUE9JTlRfV1JJVEUJPSAoMSA8PCAyKSwKKwlTSF9CUkVBS1BPSU5UX1JXCT0gU0hfQlJFQUtQT0lOVF9SRUFEIHwgU0hfQlJFQUtQT0lOVF9XUklURSwKKworCVNIX0JSRUFLUE9JTlRfTEVOXzEJPSAoMSA8PCAxMiksCisJU0hfQlJFQUtQT0lOVF9MRU5fMgk9ICgxIDw8IDEzKSwKKwlTSF9CUkVBS1BPSU5UX0xFTl80CT0gU0hfQlJFQUtQT0lOVF9MRU5fMSB8IFNIX0JSRUFLUE9JTlRfTEVOXzIsCisJU0hfQlJFQUtQT0lOVF9MRU5fOAk9ICgxIDw8IDE0KSwKK307CisKK3N0cnVjdCBzaF91YmMgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJdW5zaWduZWQgaW50CW51bV9ldmVudHM7CisJdW5zaWduZWQgaW50CXRyYXBfbnI7CisJdm9pZAkJKCplbmFibGUpKHN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKiwgaW50KTsKKwl2b2lkCQkoKmRpc2FibGUpKHN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKiwgaW50KTsKKwl2b2lkCQkoKmVuYWJsZV9hbGwpKHVuc2lnbmVkIGxvbmcpOworCXZvaWQJCSgqZGlzYWJsZV9hbGwpKHZvaWQpOworCXVuc2lnbmVkIGxvbmcJKCphY3RpdmVfbWFzaykodm9pZCk7CisJdW5zaWduZWQgbG9uZwkoKnRyaWdnZXJlZF9tYXNrKSh2b2lkKTsKKwl2b2lkCQkoKmNsZWFyX3RyaWdnZXJlZF9tYXNrKSh1bnNpZ25lZCBsb25nKTsKKwlzdHJ1Y3QgY2xrCSpjbGs7CS8qIG9wdGlvbmFsIGludGVyZmFjZSBjbG9jayAvIE1TVFAgYml0ICovCit9OworCitzdHJ1Y3QgcGVyZl9ldmVudDsKK3N0cnVjdCB0YXNrX3N0cnVjdDsKK3N0cnVjdCBwbXU7CisKKy8qIE1heGltdW0gbnVtYmVyIG9mIFVCQyBjaGFubmVscyAqLworI2RlZmluZSBIQlBfTlVNCQkyCisKKy8qIGFyY2gvc2gva2VybmVsL2h3X2JyZWFrcG9pbnQuYyAqLworZXh0ZXJuIGludCBhcmNoX2NoZWNrX3ZhX2luX3VzZXJzcGFjZSh1bnNpZ25lZCBsb25nIHZhLCB1MTYgaGJwX2xlbik7CitleHRlcm4gaW50IGFyY2hfdmFsaWRhdGVfaHdia3B0X3NldHRpbmdzKHN0cnVjdCBwZXJmX2V2ZW50ICpicCwKKwkJCQkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKK2V4dGVybiBpbnQgaHdfYnJlYWtwb2ludF9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpOworCitpbnQgYXJjaF9pbnN0YWxsX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKTsKK3ZvaWQgYXJjaF91bmluc3RhbGxfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApOwordm9pZCBod19icmVha3BvaW50X3BtdV9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpicCk7Cit2b2lkIGh3X2JyZWFrcG9pbnRfcG11X3VudGhyb3R0bGUoc3RydWN0IHBlcmZfZXZlbnQgKmJwKTsKKworZXh0ZXJuIHZvaWQgYXJjaF9maWxsX3BlcmZfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApOworZXh0ZXJuIGludCByZWdpc3Rlcl9zaF91YmMoc3RydWN0IHNoX3ViYyAqKTsKKworZXh0ZXJuIHN0cnVjdCBwbXUgcGVyZl9vcHNfYnA7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX19BU01fU0hfSFdfQlJFQUtQT0lOVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggMDI2ZGQ2NS4uN2RhYjdiMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTIyLDYgKzIyLDcgQEAKICAqIGZvciBvbGQgY29tcGF0IGNvZGUgZm9yIEkvTyBvZmZzZXRpbmcgdG8gU3VwZXJJT3MsIGFsbCBvZiB3aGljaCBhcmUKICAqIGJldHRlciBoYW5kbGVkIHRocm91Z2ggdGhlIG1hY2h2ZWMgaW9wb3J0IG1hcHBpbmcgcm91dGluZXMgdGhlc2UgZGF5cy4KICAqLworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KQEAgLTc5LDE2ICs4MCw1MSBAQAogI2RlZmluZSB3cml0ZWwodixhKQkJKHsgX19yYXdfd3JpdGVsKCh2KSwoYSkpOyBtYigpOyB9KQogI2RlZmluZSB3cml0ZXEodixhKQkJKHsgX19yYXdfd3JpdGVxKCh2KSwoYSkpOyBtYigpOyB9KQogCi0vKiBTdXBlckggb24tY2hpcCBJL08gZnVuY3Rpb25zICovCi0jZGVmaW5lIGN0cmxfaW5iCQlfX3Jhd19yZWFkYgotI2RlZmluZSBjdHJsX2ludwkJX19yYXdfcmVhZHcKLSNkZWZpbmUgY3RybF9pbmwJCV9fcmF3X3JlYWRsCi0jZGVmaW5lIGN0cmxfaW5xCQlfX3Jhd19yZWFkcQorLyoKKyAqIExlZ2FjeSBTdXBlckggb24tY2hpcCBJL08gZnVuY3Rpb25zCisgKgorICogVGhlc2UgYXJlIGFsbCBkZXByZWNhdGVkLCBhbGwgbmV3IChhbmQgZXNwZWNpYWxseSBjcm9zcy1wbGF0Zm9ybSkgY29kZQorICogc2hvdWxkIGJlIHVzaW5nIHRoZSBfX3Jhd194eHgoKSByb3V0aW5lcyBkaXJlY3RseS4KKyAqLworc3RhdGljIGlubGluZSB1OCBfX2RlcHJlY2F0ZWQgY3RybF9pbmIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBfX3Jhd19yZWFkYihhZGRyKTsKK30KIAotI2RlZmluZSBjdHJsX291dGIJCV9fcmF3X3dyaXRlYgotI2RlZmluZSBjdHJsX291dHcJCV9fcmF3X3dyaXRldwotI2RlZmluZSBjdHJsX291dGwJCV9fcmF3X3dyaXRlbAotI2RlZmluZSBjdHJsX291dHEJCV9fcmF3X3dyaXRlcQorc3RhdGljIGlubGluZSB1MTYgX19kZXByZWNhdGVkIGN0cmxfaW53KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gX19yYXdfcmVhZHcoYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIF9fZGVwcmVjYXRlZCBjdHJsX2lubCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBfX2RlcHJlY2F0ZWQgY3RybF9pbnEodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBfX3Jhd19yZWFkcShhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZGVwcmVjYXRlZCBjdHJsX291dGIodTggdiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fcmF3X3dyaXRlYih2LCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZGVwcmVjYXRlZCBjdHJsX291dHcodTE2IHYsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX3Jhd193cml0ZXcodiwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RlcHJlY2F0ZWQgY3RybF9vdXRsKHUzMiB2LCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJX19yYXdfd3JpdGVsKHYsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZXByZWNhdGVkIGN0cmxfb3V0cSh1NjQgdiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fcmF3X3dyaXRlcSh2LCBhZGRyKTsKK30KIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2VuZXJpY19pb19iYXNlOwogCkBAIC05Nyw2ICsxMzMsMjggQEAKIAlfX3Jhd19yZWFkdyhnZW5lcmljX2lvX2Jhc2UpOwogfQogCisjZGVmaW5lIF9fQlVJTERfVU5DQUNIRURfSU8oYndscSwgdHlwZSkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdHlwZSByZWFkIyNid2xxIyNfdW5jYWNoZWQodW5zaWduZWQgbG9uZyBhZGRyKQkJXAorewkJCQkJCQkJCVwKKwl0eXBlIHJldDsJCQkJCQkJXAorCWp1bXBfdG9fdW5jYWNoZWQoKTsJCQkJCQlcCisJcmV0ID0gX19yYXdfcmVhZCMjYndscShhZGRyKTsJCQkJCVwKKwliYWNrX3RvX2NhY2hlZCgpOwkJCQkJCVwKKwlyZXR1cm4gcmV0OwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIHdyaXRlIyNid2xxIyNfdW5jYWNoZWQodHlwZSB2LCB1bnNpZ25lZCBsb25nIGFkZHIpCVwKK3sJCQkJCQkJCQlcCisJanVtcF90b191bmNhY2hlZCgpOwkJCQkJCVwKKwlfX3Jhd193cml0ZSMjYndscSh2LCBhZGRyKTsJCQkJCVwKKwliYWNrX3RvX2NhY2hlZCgpOwkJCQkJCVwKK30KKworX19CVUlMRF9VTkNBQ0hFRF9JTyhiLCB1OCkKK19fQlVJTERfVU5DQUNIRURfSU8odywgdTE2KQorX19CVUlMRF9VTkNBQ0hFRF9JTyhsLCB1MzIpCitfX0JVSUxEX1VOQ0FDSEVEX0lPKHEsIHU2NCkKKwogI2RlZmluZSBfX0JVSUxEX01FTU9SWV9TVFJJTkcoYndscSwgdHlwZSkJCQkJXAogCQkJCQkJCQkJXAogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlcyMjYndscSh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKm1lbSwJXApAQCAtMjM0LDI4ICsyOTIsMjEgQEAKICAqLwogI2lmZGVmIENPTkZJR19NTVUKIHZvaWQgX19pb21lbSAqX19pb3JlbWFwX2NhbGxlcih1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmNhbGxlcik7CisJCQkgICAgICAgcGdwcm90X3QgcHJvdCwgdm9pZCAqY2FsbGVyKTsKIHZvaWQgX19pb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKLV9faW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCiB7Ci0JcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIob2Zmc2V0LCBzaXplLCBmbGFncywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihvZmZzZXQsIHNpemUsIHByb3QsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKLV9faW9yZW1hcF9tb2RlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCitfX2lvcmVtYXBfMjliaXQodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19TVVBFUkgzMikgJiYgIWRlZmluZWQoQ09ORklHX1BNQl9GSVhFRCkgJiYgIWRlZmluZWQoQ09ORklHX1BNQikKKyNpZmRlZiBDT05GSUdfMjlCSVQKIAl1bnNpZ25lZCBsb25nIGxhc3RfYWRkciA9IG9mZnNldCArIHNpemUgLSAxOwotI2VuZGlmCi0Jdm9pZCBfX2lvbWVtICpyZXQ7CiAKLQlyZXQgPSBfX2lvcmVtYXBfdHJhcHBlZChvZmZzZXQsIHNpemUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TVVBFUkgzMikgJiYgIWRlZmluZWQoQ09ORklHX1BNQl9GSVhFRCkgJiYgIWRlZmluZWQoQ09ORklHX1BNQikKIAkvKgogCSAqIEZvciBQMSBhbmQgUDIgc3BhY2UgdGhpcyBpcyB0cml2aWFsLCBhcyBldmVyeXRoaW5nIGlzIGFscmVhZHkKIAkgKiBtYXBwZWQuIFVuY2FjaGVkIGFjY2VzcyBmb3IgUDEgYWRkcmVzc2VzIGFyZSBkb25lIHRocm91Z2ggUDIuCkBAIC0yNjMsNyArMzE0LDcgQEAKIAkgKiBtYXBwaW5nIG11c3QgYmUgZG9uZSBieSB0aGUgUE1CIG9yIGJ5IHVzaW5nIHBhZ2UgdGFibGVzLgogCSAqLwogCWlmIChsaWtlbHkoUFhTRUcob2Zmc2V0KSA8IFAzU0VHICYmIFBYU0VHKGxhc3RfYWRkcikgPCBQM1NFRykpIHsKLQkJaWYgKHVubGlrZWx5KGZsYWdzICYgX1BBR0VfQ0FDSEFCTEUpKQorCQlpZiAodW5saWtlbHkocGdwcm90X3ZhbChwcm90KSAmIF9QQUdFX0NBQ0hBQkxFKSkKIAkJCXJldHVybiAodm9pZCBfX2lvbWVtICopUDFTRUdBRERSKG9mZnNldCk7CiAKIAkJcmV0dXJuICh2b2lkIF9faW9tZW0gKilQMlNFR0FERFIob2Zmc2V0KTsKQEAgLTI3NCwyNiArMzI1LDcwIEBACiAJCXJldHVybiAodm9pZCBfX2lvbWVtICopUDRTRUdBRERSKG9mZnNldCk7CiAjZW5kaWYKIAotCXJldHVybiBfX2lvcmVtYXAob2Zmc2V0LCBzaXplLCBmbGFncyk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKK19faW9yZW1hcF9tb2RlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCit7CisJdm9pZCBfX2lvbWVtICpyZXQ7CisKKwlyZXQgPSBfX2lvcmVtYXBfdHJhcHBlZChvZmZzZXQsIHNpemUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBfX2lvcmVtYXBfMjliaXQob2Zmc2V0LCBzaXplLCBwcm90KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIF9faW9yZW1hcChvZmZzZXQsIHNpemUsIHByb3QpOwogfQogI2Vsc2UKLSNkZWZpbmUgX19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgZmxhZ3MpCQkoKHZvaWQgX19pb21lbSAqKShvZmZzZXQpKQotI2RlZmluZSBfX2lvcmVtYXBfbW9kZShvZmZzZXQsIHNpemUsIGZsYWdzKQkoKHZvaWQgX19pb21lbSAqKShvZmZzZXQpKQorI2RlZmluZSBfX2lvcmVtYXAob2Zmc2V0LCBzaXplLCBwcm90KQkJKCh2b2lkIF9faW9tZW0gKikob2Zmc2V0KSkKKyNkZWZpbmUgX19pb3JlbWFwX21vZGUob2Zmc2V0LCBzaXplLCBwcm90KQkoKHZvaWQgX19pb21lbSAqKShvZmZzZXQpKQogI2RlZmluZSBfX2lvdW5tYXAoYWRkcikJCQkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KIAotI2RlZmluZSBpb3JlbWFwKG9mZnNldCwgc2l6ZSkJCQkJXAotCV9faW9yZW1hcF9tb2RlKChvZmZzZXQpLCAoc2l6ZSksIDApCi0jZGVmaW5lIGlvcmVtYXBfbm9jYWNoZShvZmZzZXQsIHNpemUpCQkJXAotCV9faW9yZW1hcF9tb2RlKChvZmZzZXQpLCAoc2l6ZSksIDApCi0jZGVmaW5lIGlvcmVtYXBfY2FjaGUob2Zmc2V0LCBzaXplKQkJCVwKLQlfX2lvcmVtYXBfbW9kZSgob2Zmc2V0KSwgKHNpemUpLCBfUEFHRV9DQUNIQUJMRSkKLSNkZWZpbmUgcDNfaW9yZW1hcChvZmZzZXQsIHNpemUsIGZsYWdzKQkJCVwKLQlfX2lvcmVtYXAoKG9mZnNldCksIChzaXplKSwgKGZsYWdzKSkKLSNkZWZpbmUgaW9yZW1hcF9wcm90KG9mZnNldCwgc2l6ZSwgZmxhZ3MpCQlcCi0JX19pb3JlbWFwX21vZGUoKG9mZnNldCksIChzaXplKSwgKGZsYWdzKSkKLSNkZWZpbmUgaW91bm1hcChhZGRyKQkJCQkJXAotCV9faW91bm1hcCgoYWRkcikpCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCitpb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIF9faW9yZW1hcF9tb2RlKG9mZnNldCwgc2l6ZSwgUEFHRV9LRVJORUxfTk9DQUNIRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKK2lvcmVtYXBfY2FjaGUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19pb3JlbWFwX21vZGUob2Zmc2V0LCBzaXplLCBQQUdFX0tFUk5FTCk7Cit9CisKKyNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKK2lvcmVtYXBfcHJvdChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuIF9faW9yZW1hcF9tb2RlKG9mZnNldCwgc2l6ZSwgX19wZ3Byb3QoZmxhZ3MpKTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0lPUkVNQVBfRklYRUQKK2V4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfZml4ZWQocmVzb3VyY2Vfc2l6ZV90LCB1bnNpZ25lZCBsb25nLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcsIHBncHJvdF90KTsKK2V4dGVybiBpbnQgaW91bm1hcF9maXhlZCh2b2lkIF9faW9tZW0gKik7CitleHRlcm4gdm9pZCBpb3JlbWFwX2ZpeGVkX2luaXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgoraW9yZW1hcF9maXhlZChyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCit7CisJQlVHKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb3JlbWFwX2ZpeGVkX2luaXQodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIGludCBpb3VubWFwX2ZpeGVkKHZvaWQgX19pb21lbSAqYWRkcikgeyByZXR1cm4gLUVJTlZBTDsgfQorI2VuZGlmCisKKyNkZWZpbmUgaW9yZW1hcF9ub2NhY2hlCWlvcmVtYXAKKyNkZWZpbmUgaW91bm1hcAkJX19pb3VubWFwCiAKICNkZWZpbmUgbWF5YmViYWRpbyhwb3J0KSBcCiAJcHJpbnRrKEtFUk5fRVJSICJiYWQgUEMtbGlrZSBpbyAlczoldSBmb3IgcG9ydCAweCVseCBhdCAweCUwOHhcbiIsIFwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20va2RlYnVnLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2tkZWJ1Zy5oCmluZGV4IDk4NTIxOWYuLjVmNmQyZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20va2RlYnVnLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9rZGVidWcuaApAQCAtNiw2ICs2LDggQEAKIAlESUVfVFJBUCwKIAlESUVfTk1JLAogCURJRV9PT1BTLAorCURJRV9CUkVBS1BPSU5ULAorCURJRV9TU1RFUCwKIH07CiAKICNlbmRpZiAvKiBfX0FTTV9TSF9LREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11LmgKaW5kZXggYzc0MjZhZC4uMTVhMDViNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXUuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdS5oCkBAIC0xMSw3ICsxMSw5IEBACiAKICNkZWZpbmUgUE1CX0FERFIJCTB4ZjYxMDAwMDAKICNkZWZpbmUgUE1CX0RBVEEJCTB4ZjcxMDAwMDAKLSNkZWZpbmUgUE1CX0VOVFJZX01BWAkJMTYKKworI2RlZmluZSBOUl9QTUJfRU5UUklFUwkJMTYKKwogI2RlZmluZSBQTUJfRV9NQVNLCQkweDAwMDAwMDBmCiAjZGVmaW5lIFBNQl9FX1NISUZUCQk4CiAKQEAgLTI1LDExICsyNywxNSBAQAogI2RlZmluZSBQTUJfQwkJCTB4MDAwMDAwMDgKICNkZWZpbmUgUE1CX1dUCQkJMHgwMDAwMDAwMQogI2RlZmluZSBQTUJfVUIJCQkweDAwMDAwMjAwCisjZGVmaW5lIFBNQl9DQUNIRV9NQVNLCQkoUE1CX0MgfCBQTUJfV1QgfCBQTUJfVUIpCiAjZGVmaW5lIFBNQl9WCQkJMHgwMDAwMDEwMAogCiAjZGVmaW5lIFBNQl9OT19FTlRSWQkJKC0xKQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIC8qIERlZmF1bHQgInVuc2lnbmVkIGxvbmciIGNvbnRleHQgKi8KIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBtbV9jb250ZXh0X2lkX3RbTlJfQ1BVU107CkBAIC00NywyOSArNTMsMzAgQEAKICNlbmRpZgogfSBtbV9jb250ZXh0X3Q7CiAKLXN0cnVjdCBwbWJfZW50cnk7Ci0KLXN0cnVjdCBwbWJfZW50cnkgewotCXVuc2lnbmVkIGxvbmcgdnBuOwotCXVuc2lnbmVkIGxvbmcgcHBuOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKgotCSAqIDAgLi4gTlJfUE1CX0VOVFJJRVMgZm9yIHNwZWNpZmljIGVudHJ5IHNlbGVjdGlvbiwgb3IKLQkgKiBQTUJfTk9fRU5UUlkgdG8gc2VhcmNoIGZvciBhIGZyZWUgb25lCi0JICovCi0JaW50IGVudHJ5OwotCi0Jc3RydWN0IHBtYl9lbnRyeSAqbmV4dDsKLQkvKiBBZGphY2VudCBlbnRyeSBsaW5rIGZvciBjb250aWd1b3VzIG11bHRpLWVudHJ5IG1hcHBpbmdzICovCi0Jc3RydWN0IHBtYl9lbnRyeSAqbGluazsKLX07Ci0KKyNpZmRlZiBDT05GSUdfUE1CCiAvKiBhcmNoL3NoL21tL3BtYi5jICovCiBsb25nIHBtYl9yZW1hcCh1bnNpZ25lZCBsb25nIHZpcnQsIHVuc2lnbmVkIGxvbmcgcGh5cywKLQkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKwkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KTsKIHZvaWQgcG1iX3VubWFwKHVuc2lnbmVkIGxvbmcgYWRkcik7Ci1pbnQgcG1iX2luaXQodm9pZCk7Cit2b2lkIHBtYl9pbml0KHZvaWQpOworYm9vbCBfX2luXzI5Yml0X21vZGUodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBsb25nIHBtYl9yZW1hcCh1bnNpZ25lZCBsb25nIHZpcnQsIHVuc2lnbmVkIGxvbmcgcGh5cywKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQoreworCXJldHVybiAtRUlOVkFMOworfQorCisjZGVmaW5lIHBtYl91bm1hcChhZGRyKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwbWJfaW5pdChhZGRyKQkJZG8geyB9IHdoaWxlICgwKQorCisjaWZkZWYgQ09ORklHXzI5QklUCisjZGVmaW5lIF9faW5fMjliaXRfbW9kZSgpCSgxKQorI2Vsc2UKKyNkZWZpbmUgX19pbl8yOWJpdF9tb2RlKCkJKDApCisjZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19QTUIgKi8KICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9fTU1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCA0MTA4MGIxLi4zODRjNzQ3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC0xNTgsNyArMTU4LDcgQEAKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJLyogRW5hYmxlIE1NVSAqLwotCWN0cmxfb3V0bChNTVVfQ09OVFJPTF9JTklULCBNTVVDUik7CisJX19yYXdfd3JpdGVsKE1NVV9DT05UUk9MX0lOSVQsIE1NVUNSKTsKIAljdHJsX2JhcnJpZXIoKTsKIAogCWlmIChhc2lkX2NhY2hlKGNwdSkgPT0gTk9fQ09OVEVYVCkKQEAgLTE3MSw5ICsxNzEsOSBAQAogewogCXVuc2lnbmVkIGxvbmcgY3I7CiAKLQljciA9IGN0cmxfaW5sKE1NVUNSKTsKKwljciA9IF9fcmF3X3JlYWRsKE1NVUNSKTsKIAljciAmPSB+TU1VX0NPTlRST0xfSU5JVDsKLQljdHJsX291dGwoY3IsIE1NVUNSKTsKKwlfX3Jhd193cml0ZWwoY3IsIE1NVUNSKTsKIAogCWN0cmxfYmFycmllcigpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF8zMi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF8zMi5oCmluZGV4IDhlZjgwMGMuLjEwZTJlMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzMyLmgKQEAgLTQ5LDExICs0OSwxMSBAQAogLyogTU1VX1RUQiBpcyB1c2VkIGZvciBvcHRpbWl6aW5nIHRoZSBmYXVsdCBoYW5kbGluZy4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfVFRCKHBnZF90ICpwZ2QpCiB7Ci0JY3RybF9vdXRsKCh1bnNpZ25lZCBsb25nKXBnZCwgTU1VX1RUQik7CisJX19yYXdfd3JpdGVsKCh1bnNpZ25lZCBsb25nKXBnZCwgTU1VX1RUQik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcGdkX3QgKmdldF9UVEIodm9pZCkKIHsKLQlyZXR1cm4gKHBnZF90ICopY3RybF9pbmwoTU1VX1RUQik7CisJcmV0dXJuIChwZ2RfdCAqKV9fcmF3X3JlYWRsKE1NVV9UVEIpOwogfQogI2VuZGlmIC8qIF9fQVNNX1NIX01NVV9DT05URVhUXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW9kdWxlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21vZHVsZS5oCmluZGV4IDA2OGJmMTYuLmI3OTI3ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW9kdWxlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tb2R1bGUuaApAQCAtMSw3ICsxLDIyIEBACiAjaWZuZGVmIF9BU01fU0hfTU9EVUxFX0gKICNkZWZpbmUgX0FTTV9TSF9NT0RVTEVfSAogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW9kdWxlLmg+CitzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgeworI2lmZGVmIENPTkZJR19EV0FSRl9VTldJTkRFUgorCXN0cnVjdCBsaXN0X2hlYWQgZmRlX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBjaWVfbGlzdDsKKyNlbmRpZgorfTsKKworI2lmZGVmIENPTkZJR182NEJJVAorI2RlZmluZSBFbGZfU2hkciBFbGY2NF9TaGRyCisjZGVmaW5lIEVsZl9TeW0gRWxmNjRfU3ltCisjZGVmaW5lIEVsZl9FaGRyIEVsZjY0X0VoZHIKKyNlbHNlCisjZGVmaW5lIEVsZl9TaGRyIEVsZjMyX1NoZHIKKyNkZWZpbmUgRWxmX1N5bSBFbGYzMl9TeW0KKyNkZWZpbmUgRWxmX0VoZHIgRWxmMzJfRWhkcgorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4KICMgaWZkZWYgQ09ORklHX0NQVV9TSDIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggODFiZmZjMC4uZDcxZmViMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTQ1LDYgKzQ1LDcgQEAKICNlbmRpZgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS91bmNhY2hlZC5oPgogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBzaG1fYWxpZ25fbWFzazsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1heF9sb3dfcGZuLCBtaW5fbG93X3BmbjsKQEAgLTU2LDcgKzU3LDYgQEAKIAlyZXR1cm4gKGFkZHIxIF4gYWRkcjIpICYgc2htX2FsaWduX21hc2s7CiB9CiAKLQogI2RlZmluZSBjbGVhcl9wYWdlKHBhZ2UpCW1lbXNldCgodm9pZCAqKShwYWdlKSwgMCwgUEFHRV9TSVpFKQogZXh0ZXJuIHZvaWQgY29weV9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tKTsKIApAQCAtODgsNyArODgsNyBAQAogI2RlZmluZSBfX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KSB9ICkKICNlbHNlCiB0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgbG9uZyBwdGVfbG93OyB9IHB0ZV90OwotdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBncHJvdDsgfSBwZ3Byb3RfdDsKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBsb25nIHBncHJvdDsgfSBwZ3Byb3RfdDsKIHR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ2Q7IH0gcGdkX3Q7CiAjZGVmaW5lIHB0ZV92YWwoeCkJKCh4KS5wdGVfbG93KQogI2RlZmluZSBfX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KSB9ICkKQEAgLTEyNywxMiArMTI3LDcgQEAKICAqIGlzIG5vdCB2aXNpYmxlIChpdCBpcyBwYXJ0IG9mIHRoZSBQTUIgbWFwcGluZykgYW5kIHNvIG5lZWRzIHRvIGJlCiAgKiBhZGRlZCBvciBzdWJ0cmFjdGVkIGFzIHJlcXVpcmVkLgogICovCi0jaWYgZGVmaW5lZChDT05GSUdfUE1CX0ZJWEVEKQotLyogcGh5cyA9IHZpcnQgLSBQQUdFX09GRlNFVCAtIChfX01FTU9SWV9TVEFSVCAmIDB4ZTAwMDAwMDApICovCi0jZGVmaW5lIFBNQl9PRkZTRVQJKFBBR0VfT0ZGU0VUIC0gUFhTRUcoX19NRU1PUllfU1RBUlQpKQotI2RlZmluZSBfX3BhKHgpCSgodW5zaWduZWQgbG9uZykoeCkgLSBQTUJfT0ZGU0VUKQotI2RlZmluZSBfX3ZhKHgpCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoeCkgKyBQTUJfT0ZGU0VUKSkKLSNlbGlmIGRlZmluZWQoQ09ORklHXzMyQklUKQorI2lmZGVmIENPTkZJR19QTUIKICNkZWZpbmUgX19wYSh4KQkoKHVuc2lnbmVkIGxvbmcpKHgpLVBBR0VfT0ZGU0VUK19fTUVNT1JZX1NUQVJUKQogI2RlZmluZSBfX3ZhKHgpCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoeCkrUEFHRV9PRkZTRVQtX19NRU1PUllfU1RBUlQpKQogI2Vsc2UKQEAgLTE0MCw2ICsxMzUsMTQgQEAKICNkZWZpbmUgX192YSh4KQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHgpK1BBR0VfT0ZGU0VUKSkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1VOQ0FDSEVEX01BUFBJTkcKKyNkZWZpbmUgVU5DQUNfQUREUihhZGRyKQkoKGFkZHIpIC0gUEFHRV9PRkZTRVQgKyB1bmNhY2hlZF9zdGFydCkKKyNkZWZpbmUgQ0FDX0FERFIoYWRkcikJCSgoYWRkcikgLSB1bmNhY2hlZF9zdGFydCArIFBBR0VfT0ZGU0VUKQorI2Vsc2UKKyNkZWZpbmUgVU5DQUNfQUREUihhZGRyKQkoKGFkZHIpKQorI2RlZmluZSBDQUNfQUREUihhZGRyKQkJKChhZGRyKSkKKyNlbmRpZgorCiAjZGVmaW5lIHBmbl90b19rYWRkcihwZm4pCV9fdmEoKHBmbikgPDwgUEFHRV9TSElGVCkKICNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpCShwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUKQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wY2kuaAppbmRleCA2N2YzOTk5Li4xMDQyZjdmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BjaS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTE1LDIwICsxNSw0OSBAQAogICovCiBzdHJ1Y3QgcGNpX2NoYW5uZWwgewogCXN0cnVjdCBwY2lfY2hhbm5lbAkqbmV4dDsKKwlzdHJ1Y3QgcGNpX2J1cwkJKmJ1czsKIAogCXN0cnVjdCBwY2lfb3BzCQkqcGNpX29wczsKLQlzdHJ1Y3QgcmVzb3VyY2UJCSppb19yZXNvdXJjZTsKLQlzdHJ1Y3QgcmVzb3VyY2UJCSptZW1fcmVzb3VyY2U7CisKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXNvdXJjZXM7CisJdW5zaWduZWQgaW50CQlucl9yZXNvdXJjZXM7CiAKIAl1bnNpZ25lZCBsb25nCQlpb19vZmZzZXQ7CiAJdW5zaWduZWQgbG9uZwkJbWVtX29mZnNldDsKIAogCXVuc2lnbmVkIGxvbmcJCXJlZ19iYXNlOwotCiAJdW5zaWduZWQgbG9uZwkJaW9fbWFwX2Jhc2U7CisKKwl1bnNpZ25lZCBpbnQJCWluZGV4OworCXVuc2lnbmVkIGludAkJbmVlZF9kb21haW5faW5mbzsKKworCS8qIE9wdGlvbmFsIGVycm9yIGhhbmRsaW5nICovCisJc3RydWN0IHRpbWVyX2xpc3QJZXJyX3RpbWVyLCBzZXJyX3RpbWVyOworCXVuc2lnbmVkIGludAkJZXJyX2lycSwgc2Vycl9pcnE7CiB9OwogCi1leHRlcm4gdm9pZCByZWdpc3Rlcl9wY2lfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpOworLyogYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2kuYyAqLworZXh0ZXJuIGludCByZWdpc3Rlcl9wY2lfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpOworZXh0ZXJuIHZvaWQgcGNpYmlvc19yZXBvcnRfc3RhdHVzKHVuc2lnbmVkIGludCBzdGF0dXNfbWFzaywgaW50IHdhcm4pOworCisvKiBhcmNoL3NoL2RyaXZlcnMvcGNpL2NvbW1vbi5jICovCitleHRlcm4gaW50IGVhcmx5X3JlYWRfY29uZmlnX2J5dGUoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLCBpbnQgdG9wX2J1cywKKwkJCQkgIGludCBidXMsIGludCBkZXZmbiwgaW50IG9mZnNldCwgdTggKnZhbHVlKTsKK2V4dGVybiBpbnQgZWFybHlfcmVhZF9jb25maWdfd29yZChzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsIGludCB0b3BfYnVzLAorCQkJCSAgaW50IGJ1cywgaW50IGRldmZuLCBpbnQgb2Zmc2V0LCB1MTYgKnZhbHVlKTsKK2V4dGVybiBpbnQgZWFybHlfcmVhZF9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLCBpbnQgdG9wX2J1cywKKwkJCQkgICBpbnQgYnVzLCBpbnQgZGV2Zm4sIGludCBvZmZzZXQsIHUzMiAqdmFsdWUpOworZXh0ZXJuIGludCBlYXJseV93cml0ZV9jb25maWdfYnl0ZShzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsIGludCB0b3BfYnVzLAorCQkJCSAgIGludCBidXMsIGludCBkZXZmbiwgaW50IG9mZnNldCwgdTggdmFsdWUpOworZXh0ZXJuIGludCBlYXJseV93cml0ZV9jb25maWdfd29yZChzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsIGludCB0b3BfYnVzLAorCQkJCSAgIGludCBidXMsIGludCBkZXZmbiwgaW50IG9mZnNldCwgdTE2IHZhbHVlKTsKK2V4dGVybiBpbnQgZWFybHlfd3JpdGVfY29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfY2hhbm5lbCAqaG9zZSwgaW50IHRvcF9idXMsCisJCQkJICAgIGludCBidXMsIGludCBkZXZmbiwgaW50IG9mZnNldCwgdTMyIHZhbHVlKTsKK2V4dGVybiB2b2lkIHBjaWJpb3NfZW5hYmxlX3RpbWVycyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpOworZXh0ZXJuIHVuc2lnbmVkIGludCBwY2liaW9zX2hhbmRsZV9zdGF0dXNfZXJyb3JzKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgdW5zaWduZWQgaW50IHN0YXR1cywgc3RydWN0IHBjaV9jaGFubmVsICpob3NlKTsKK2V4dGVybiBpbnQgcGNpX2lzXzY2bWh6X2NhcGFibGUoc3RydWN0IHBjaV9jaGFubmVsICpob3NlLAorCQkJCWludCB0b3BfYnVzLCBpbnQgY3VycmVudF9idXMpOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBQQ0lCSU9TX01JTl9JTywgUENJQklPU19NSU5fTUVNOwogCkBAIC05OSwyMCArMTI4LDYgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1NVUEVSSDMyCi0vKgotICogSWYgd2UncmUgb24gYW4gU0g3NzUxIG9yIFNINzc4MCBQQ0kgY29udHJvbGxlciwgUENJIG1lbW9yeSBpcyBtYXBwZWQKLSAqIGF0IHRoZSBlbmQgb2YgdGhlIGFkZHJlc3Mgc3BhY2UgaW4gYSBzcGVjaWFsIG5vbi10cmFuc2xhdGFibGUgYXJlYS4KLSAqLwotI2RlZmluZSBQQ0lfTUVNX0ZJWEVEX1NUQVJUCTB4ZmQwMDAwMDAKLSNkZWZpbmUgUENJX01FTV9GSVhFRF9FTkQJKFBDSV9NRU1fRklYRURfU1RBUlQgKyAweDAxMDAwMDAwKQotCi0jZGVmaW5lIGlzX3BjaV9tZW1vcnlfZml4ZWRfcmFuZ2UocywgZSkJXAotCSgocykgPj0gUENJX01FTV9GSVhFRF9TVEFSVCAmJiAoZSkgPCBQQ0lfTUVNX0ZJWEVEX0VORCkKLSNlbHNlCi0jZGVmaW5lIGlzX3BjaV9tZW1vcnlfZml4ZWRfcmFuZ2UocywgZSkJKDApCi0jZW5kaWYKLQogLyogQm9hcmQtc3BlY2lmaWMgZml4dXAgcm91dGluZXMuICovCiBpbnQgcGNpYmlvc19tYXBfcGxhdGZvcm1faXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbik7CiAKQEAgLTEyMiw2ICsxMzcsMTQgQEAKIGV4dGVybiB2b2lkIHBjaWJpb3NfYnVzX3RvX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkJCSAgICBzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbik7CiAKKyNkZWZpbmUgcGNpX2RvbWFpbl9ucihidXMpICgoc3RydWN0IHBjaV9jaGFubmVsICopKGJ1cyktPnN5c2RhdGEpLT5pbmRleAorCitzdGF0aWMgaW5saW5lIGludCBwY2lfcHJvY19kb21haW4oc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UgPSBidXMtPnN5c2RhdGE7CisJcmV0dXJuIGhvc2UtPm5lZWRfZG9tYWluX2luZm87Cit9CisKIC8qIENoYW5jZXMgYXJlIHRoaXMgaW50ZXJydXB0IGlzIHdpcmVkIFBDLXN0eWxlIC4uLiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9nZXRfbGVnYWN5X2lkZV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNoYW5uZWwpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDYzY2EzN2IuLjhjMDA3ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC00LDggKzQsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9xdWlja2xpc3QuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCi0jZGVmaW5lIFFVSUNLX1BHRCAwCS8qIFdlIHByZXNlcnZlIHNwZWNpYWwgbWFwcGluZ3Mgb3ZlciBmcmVlICovCi0jZGVmaW5lIFFVSUNLX1BUIDEJLyogT3RoZXIgcGFnZSB0YWJsZSBwYWdlcyB0aGF0IGFyZSB6ZXJvIG9uIGZyZWUgKi8KKyNkZWZpbmUgUVVJQ0tfUFQgMAkvKiBPdGhlciBwYWdlIHRhYmxlIHBhZ2VzIHRoYXQgYXJlIHplcm8gb24gZnJlZSAqLworCitleHRlcm4gcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICopOworZXh0ZXJuIHZvaWQgcGdkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpOworCisjaWYgUEFHRVRBQkxFX0xFVkVMUyA+IDIKK2V4dGVybiB2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWQpOworZXh0ZXJuIHBtZF90ICpwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOworZXh0ZXJuIHZvaWQgcG1kX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpOworI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAogCQkJCSAgICAgICBwdGVfdCAqcHRlKQpAQCAtMjAsMjggKzI4LDkgQEAKIH0KICNkZWZpbmUgcG1kX3BndGFibGUocG1kKSBwbWRfcGFnZShwbWQpCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfY3Rvcih2b2lkICp4KQotewotCXBnZF90ICpwZ2QgPSB4OwotCi0JbWVtY3B5KHBnZCArIFVTRVJfUFRSU19QRVJfUEdELAotCSAgICAgICBzd2FwcGVyX3BnX2RpciArIFVTRVJfUFRSU19QRVJfUEdELAotCSAgICAgICAoUFRSU19QRVJfUEdEIC0gVVNFUl9QVFJTX1BFUl9QR0QpICogc2l6ZW9mKHBnZF90KSk7Ci19Ci0KIC8qCiAgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4KICAqLwotc3RhdGljIGlubGluZSBwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXJldHVybiBxdWlja2xpc3RfYWxsb2MoUVVJQ0tfUEdELCBHRlBfS0VSTkVMIHwgX19HRlBfUkVQRUFULCBwZ2RfY3Rvcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCkKLXsKLQlxdWlja2xpc3RfZnJlZShRVUlDS19QR0QsIE5VTEwsIHBnZCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKQEAgLTgxLDcgKzcwLDYgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX3BndF9jYWNoZSh2b2lkKQogewotCXF1aWNrbGlzdF90cmltKFFVSUNLX1BHRCwgTlVMTCwgMjUsIDE2KTsKIAlxdWlja2xpc3RfdHJpbShRVUlDS19QVCwgTlVMTCwgMjUsIDE2KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YmQ4OWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBfX0FTTV9TSF9QR1RBQkxFXzJMRVZFTF9ICisjZGVmaW5lIF9fQVNNX1NIX1BHVEFCTEVfMkxFVkVMX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4KKworLyoKKyAqIHRyYWRpdGlvbmFsIHR3by1sZXZlbCBwYWdpbmcgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgUEFHRVRBQkxFX0xFVkVMUwkyCisKKy8qIFBURSBiaXRzICovCisjZGVmaW5lIFBURV9NQUdOSVRVREUJCTIJLyogMzItYml0IFBURXMgKi8KKworI2RlZmluZSBQVEVfU0hJRlQJCVBBR0VfU0hJRlQKKyNkZWZpbmUgUFRFX0JJVFMJCShQVEVfU0hJRlQgLSBQVEVfTUFHTklUVURFKQorCisvKiBQR0QgYml0cyAqLworI2RlZmluZSBQR0RJUl9TSElGVAkJKFBURV9TSElGVCArIFBURV9CSVRTKQorCisjZGVmaW5lIFBUUlNfUEVSX1BHRAkJKFBBR0VfU0laRSAvICgxIDw8IFBURV9NQUdOSVRVREUpKQorI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoVEFTS19TSVpFL1BHRElSX1NJWkUpCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9QR1RBQkxFXzJMRVZFTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ5YTk4NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaApAQCAtMCwwICsxLDU2IEBACisjaWZuZGVmIF9fQVNNX1NIX1BHVEFCTEVfM0xFVkVMX0gKKyNkZWZpbmUgX19BU01fU0hfUEdUQUJMRV8zTEVWRUxfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oPgorCisvKgorICogU29tZSBjb3JlcyBuZWVkIGEgMy1sZXZlbCBwYWdlIHRhYmxlIGxheW91dCwgZm9yIGV4YW1wbGUgd2hlbiB1c2luZworICogNjQtYml0IFBURXMgYW5kIDRLIHBhZ2VzLgorICovCisjZGVmaW5lIFBBR0VUQUJMRV9MRVZFTFMJMworCisjZGVmaW5lIFBURV9NQUdOSVRVREUJCTMJLyogNjQtYml0IFBURXMgb24gU0gtWDIgVExCICovCisKKy8qIFBHRCBiaXRzICovCisjZGVmaW5lIFBHRElSX1NISUZUCQkzMAorCisjZGVmaW5lIFBUUlNfUEVSX1BHRAkJNAorI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkyCisKKy8qIFBNRCBiaXRzICovCisjZGVmaW5lIFBNRF9TSElGVAkoUEFHRV9TSElGVCArIChQQUdFX1NISUZUIC0gUFRFX01BR05JVFVERSkpCisjZGVmaW5lIFBNRF9TSVpFCSgxVUwgPDwgUE1EX1NISUZUKQorI2RlZmluZSBQTURfTUFTSwkofihQTURfU0laRS0xKSkKKworI2RlZmluZSBQVFJTX1BFUl9QTUQJKCgxIDw8IFBHRElSX1NISUZUKSAvIFBNRF9TSVpFKQorCisjZGVmaW5lIHBtZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHBtZCAlMDE2bGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwbWRfdmFsKGUpKQorCit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgbG9uZyBwbWQ7IH0gcG1kX3Q7CisjZGVmaW5lIHBtZF92YWwoeCkJKCh4KS5wbWQpCisjZGVmaW5lIF9fcG1kKHgpCSgocG1kX3QpIHsgKHgpIH0gKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHVkX3BhZ2VfdmFkZHIocHVkX3QgcHVkKQoreworCXJldHVybiBwdWRfdmFsKHB1ZCk7Cit9CisKKyNkZWZpbmUgcG1kX2luZGV4KGFkZHJlc3MpCSgoKGFkZHJlc3MpID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1ELTEpKQorc3RhdGljIGlubGluZSBwbWRfdCAqcG1kX29mZnNldChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIChwbWRfdCAqKXB1ZF9wYWdlX3ZhZGRyKCpwdWQpICsgcG1kX2luZGV4KGFkZHJlc3MpOworfQorCisjZGVmaW5lIHB1ZF9ub25lKHgpCSghcHVkX3ZhbCh4KSkKKyNkZWZpbmUgcHVkX3ByZXNlbnQoeCkJKHB1ZF92YWwoeCkpCisjZGVmaW5lIHB1ZF9jbGVhcih4cCkJZG8geyBzZXRfcHVkKHhwLCBfX3B1ZCgwKSk7IH0gd2hpbGUgKDApCisjZGVmaW5lCXB1ZF9iYWQoeCkJKHB1ZF92YWwoeCkgJiB+UEFHRV9NQVNLKQorCisvKgorICogKHB1ZHMgYXJlIGZvbGRlZCBpbnRvIHBnZHMgc28gdGhpcyBkb2Vzbid0IGdldCBhY3R1YWxseSBjYWxsZWQsCisgKiBidXQgdGhlIGRlZmluZSBpcyBuZWVkZWQgZm9yIGEgZ2VuZXJpYyBpbmxpbmUgZnVuY3Rpb24uKQorICovCisjZGVmaW5lIHNldF9wdWQocHVkcHRyLCBwdWR2YWwpIGRvIHsgKihwdWRwdHIpID0gKHB1ZHZhbCk7IH0gd2hpbGUoMCkKKworI2VuZGlmIC8qIF9fQVNNX1NIX1BHVEFCTEVfM0xFVkVMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYmEzMDQ2ZS4uMDJmNzc0NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTEyLDcgKzEyLDExIEBACiAjaWZuZGVmIF9fQVNNX1NIX1BHVEFCTEVfSAogI2RlZmluZSBfX0FTTV9TSF9QR1RBQkxFX0gKIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4KKyNpZmRlZiBDT05GSUdfWDJUTEIKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS0zbGV2ZWwuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtL3BndGFibGUtMmxldmVsLmg+CisjZW5kaWYKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpAQCAtNTEsMjggKzU1LDEyIEBACiAjZGVmaW5lCU5QSFlTX1NJR04JKDFMTCA8PCAoTlBIWVMgLSAxKSkKICNkZWZpbmUJTlBIWVNfTUFTSwkoLTFMTCA8PCBOUEhZUykKIAotLyoKLSAqIHRyYWRpdGlvbmFsIHR3by1sZXZlbCBwYWdpbmcgc3RydWN0dXJlCi0gKi8KLS8qIFBURSBiaXRzICovCi0jaWYgZGVmaW5lZChDT05GSUdfWDJUTEIpIHx8IGRlZmluZWQoQ09ORklHX1NVUEVSSDY0KQotIyBkZWZpbmUgUFRFX01BR05JVFVERQkzCS8qIDY0LWJpdCBQVEVzIG9uIGV4dGVuZGVkIG1vZGUgU0gtWDIgVExCICovCi0jZWxzZQotIyBkZWZpbmUgUFRFX01BR05JVFVERQkyCS8qIDMyLWJpdCBQVEVzICovCi0jZW5kaWYKLSNkZWZpbmUgUFRFX1NISUZUCVBBR0VfU0hJRlQKLSNkZWZpbmUgUFRFX0JJVFMJKFBURV9TSElGVCAtIFBURV9NQUdOSVRVREUpCi0KLS8qIFBHRCBiaXRzICovCi0jZGVmaW5lIFBHRElSX1NISUZUCShQVEVfU0hJRlQgKyBQVEVfQklUUykKICNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQogI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCiAKIC8qIEVudHJpZXMgcGVyIGxldmVsICovCiAjZGVmaW5lIFBUUlNfUEVSX1BURQkoUEFHRV9TSVpFIC8gKDEgPDwgUFRFX01BR05JVFVERSkpCi0jZGVmaW5lIFBUUlNfUEVSX1BHRAkoUEFHRV9TSVpFIC8gc2l6ZW9mKHBnZF90KSkKIAotI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoVEFTS19TSVpFL1BHRElSX1NJWkUpCiAjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCiAKICNkZWZpbmUgUEhZU19BRERSX01BU0syOQkJMHgxZmZmZmZmZgpAQCAtMTUzLDkgKzE0MSw5IEBACiAjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKCh4KS5wdGVfbG93ID4+IFBBR0VfU0hJRlQpKSkKIAogLyoKLSAqIE5vIHBhZ2UgdGFibGUgY2FjaGVzIHRvIGluaXRpYWxpc2UKKyAqIEluaXRpYWxpc2UgdGhlIHBhZ2UgdGFibGUgY2FjaGVzCiAgKi8KLSNkZWZpbmUgcGd0YWJsZV9jYWNoZV9pbml0KCkJZG8geyB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgcGd0YWJsZV9jYWNoZV9pbml0KHZvaWQpOwogCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CiAKQEAgLTE2NSw4ICsxNTMsOSBAQAogCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKTsKIAogc3RhdGljIGlubGluZSB2b2lkCi11cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkKK3VwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiB7CisJcHRlX3QgcHRlID0gKnB0ZXA7CiAJX191cGRhdGVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGUpOwogCV9fdXBkYXRlX3RsYih2bWEsIGFkZHJlc3MsIHB0ZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCmluZGV4IDUwMDNlZTguLmUxNzJkNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCkBAIC03MSw2ICs3MSw4IEBACiAjZGVmaW5lIF9QQUdFX0VYVF9LRVJOX1dSSVRFCTB4MTAwMAkvKiBFUFI0LWJpdDogS2VybmVsIHNwYWNlIHdyaXRhYmxlICovCiAjZGVmaW5lIF9QQUdFX0VYVF9LRVJOX1JFQUQJMHgyMDAwCS8qIEVQUjUtYml0OiBLZXJuZWwgc3BhY2UgcmVhZGFibGUgKi8KIAorI2RlZmluZSBfUEFHRV9FWFRfV0lSRUQJCTB4NDAwMAkvKiBzb2Z0d2FyZTogV2lyZSBUTEIgZW50cnkgKi8KKwogLyogV3JhcHBlciBmb3IgZXh0ZW5kZWQgbW9kZSBwZ3Byb3QgdHdpZGRsaW5nICovCiAjZGVmaW5lIF9QQUdFX0VYVCh4KQkJKCh1bnNpZ25lZCBsb25nIGxvbmcpKHgpIDw8IDMyKQogCkBAIC0xNDEsMTIgKzE0MywxNCBAQAogIyBlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0TUIpCiAjICBkZWZpbmUgX1BBR0VfU1pIVUdFCShfUEFHRV9FWFRfRVNaMiB8IF9QQUdFX0VYVF9FU1ozKQogIyBlbmRpZgorIyBkZWZpbmUgX1BBR0VfV0lSRUQJKF9QQUdFX0VYVChfUEFHRV9FWFRfV0lSRUQpKQogI2Vsc2UKICMgaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRLKQogIyAgZGVmaW5lIF9QQUdFX1NaSFVHRQkoX1BBR0VfU1oxKQogIyBlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQikKICMgIGRlZmluZSBfUEFHRV9TWkhVR0UJKF9QQUdFX1NaMCB8IF9QQUdFX1NaMSkKICMgZW5kaWYKKyMgZGVmaW5lIF9QQUdFX1dJUkVECSgwKQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCmluZGV4IDE3Y2RiZWMuLjBlZTQ2NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCkBAIC00MywxMSArNDMsNiBAQAogfQogI2RlZmluZSBzZXRfcHRlX2F0KG1tLGFkZHIscHRlcCxwdGV2YWwpIHNldF9wdGUocHRlcCxwdGV2YWwpCiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgcG1kX3NldChwbWRfdCAqcG1kcCxwdGVfdCAqcHRlcCkKLXsKLQlwbWRfdmFsKCpwbWRwKSA9ICh1bnNpZ25lZCBsb25nKSBwdGVwOwotfQotCiAvKgogICogUEdEIGRlZmluZXMuIFRvcCBsZXZlbC4KICAqLwpAQCAtMTI4LDggKzEyMywyMSBAQAogI2RlZmluZSBfUEFHRV9ESVJUWQkweDQwMCAgLyogc29mdHdhcmU6IHBhZ2UgYWNjZXNzZWQgaW4gd3JpdGUgKi8KICNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHg4MDAgIC8qIHNvZnR3YXJlOiBwYWdlIHJlZmVyZW5jZWQgKi8KIAorLyogV3JhcHBlciBmb3IgZXh0ZW5kZWQgbW9kZSBwZ3Byb3QgdHdpZGRsaW5nICovCisjZGVmaW5lIF9QQUdFX0VYVCh4KQkJKCh1bnNpZ25lZCBsb25nIGxvbmcpKHgpIDw8IDMyKQorCisvKgorICogV2UgY2FuIHVzZSB0aGUgc2lnbi1leHRlbmRlZCBiaXRzIGluIHRoZSBQVEVMIHRvIGdldCAzMiBiaXRzIG9mCisgKiBzb2Z0d2FyZSBmbGFncy4gVGhpcyB3b3JrcyBmb3Igbm93IGJlY2F1c2Ugbm8gaW1wbGVtZW50YXRpb25zIHVzZXMKKyAqIGFueXRoaW5nIGFib3ZlIHRoZSBQUE4gZmllbGQuCisgKi8KKyNkZWZpbmUgX1BBR0VfV0lSRUQJX1BBR0VfRVhUKDB4MDAxKSAvKiBzb2Z0d2FyZTogd2lyZSB0aGUgdGxiIGVudHJ5ICovCisKKyNkZWZpbmUgX1BBR0VfQ0xFQVJfRkxBR1MJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9GSUxFIHwgX1BBR0VfU0hBUkVEIHwgXAorCQkJCSBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfV0lSRUQpCisKIC8qIE1hc2sgd2hpY2ggZHJvcHMgc29mdHdhcmUgZmxhZ3MgKi8KLSNkZWZpbmUgX1BBR0VfRkxBR1NfSEFSRFdBUkVfTUFTSwkweGZmZmZmZmZmZmZmZmYzZGJMTAorI2RlZmluZSBfUEFHRV9GTEFHU19IQVJEV0FSRV9NQVNLCShORUZGX01BU0sgJiB+KF9QQUdFX0NMRUFSX0ZMQUdTKSkKIAogLyoKICAqIEh1Z2VUTEIgc3VwcG9ydApAQCAtMjAzLDEyICsyMTEsNiBAQAogI2RlZmluZSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHByb3QpIF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgJiB+X1BBR0VfQ0FDSEFCTEUpCiAKIC8qCi0gKiBIYW5kbGluZyBhbGxvY2F0aW9uIGZhaWx1cmVzIGR1cmluZyBwYWdlIHRhYmxlIHNldHVwLgotICovCi1leHRlcm4gdm9pZCBfX2hhbmRsZV9iYWRfcG1kX2tlcm5lbChwbWRfdCAqIHBtZCk7Ci0jZGVmaW5lIF9faGFuZGxlX2JhZF9wbWQoeCkJX19oYW5kbGVfYmFkX3BtZF9rZXJuZWwoeCkKLQotLyoKICAqIFBURSBsZXZlbCBhY2Nlc3Mgcm91dGluZXMuCiAgKgogICogTm90ZTE6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCAwMTdlMGMxLi45NjA1ZTA2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC05OCwxMyArOTgsMzQgQEAKIAogLyogRm9yd2FyZCBkZWNsICovCiBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnM7CitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKIGV4dGVybiBzdHJ1Y3QgcHRfcmVncyBmYWtlX3N3YXBwZXJfcmVnczsKIAorLyogYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jICovCitleHRlcm4gdW5zaWduZWQgaW50IHhzdGF0ZV9zaXplOworZXh0ZXJuIHZvaWQgZnJlZV90aHJlYWRfeHN0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKK2V4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqdGFza194c3RhdGVfY2FjaGVwOworCisvKiBhcmNoL3NoL21tL2FsaWdubWVudC5jICovCitleHRlcm4gaW50IGdldF91bmFsaWduX2N0bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiBpbnQgc2V0X3VuYWxpZ25fY3RsKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB1bnNpZ25lZCBpbnQgdmFsKTsKKworI2RlZmluZSBHRVRfVU5BTElHTl9DVEwodHNrLCBhZGRyKQlnZXRfdW5hbGlnbl9jdGwoKHRzayksIChhZGRyKSkKKyNkZWZpbmUgU0VUX1VOQUxJR05fQ1RMKHRzaywgdmFsKQlzZXRfdW5hbGlnbl9jdGwoKHRzayksICh2YWwpKQorCisvKiBhcmNoL3NoL21tL2luaXQuYyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBtZW1faW5pdF9kb25lOworCiAvKiBhcmNoL3NoL2tlcm5lbC9zZXR1cC5jICovCiBjb25zdCBjaGFyICpnZXRfY3B1X3N1YnR5cGUoc3RydWN0IHNoX2NwdWluZm8gKmMpOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjcHVpbmZvX29wOwogCisvKiB0aHJlYWRfc3RydWN0IGZsYWdzICovCisjZGVmaW5lIFNIX1RIUkVBRF9VQUNfTk9QUklOVAkoMSA8PCAwKQorI2RlZmluZSBTSF9USFJFQURfVUFDX1NJR0JVUwkoMSA8PCAxKQorI2RlZmluZSBTSF9USFJFQURfVUFDX01BU0sJKFNIX1RIUkVBRF9VQUNfTk9QUklOVCB8IFNIX1RIUkVBRF9VQUNfU0lHQlVTKQorCiAvKiBwcm9jZXNzb3IgYm9vdCBtb2RlIGNvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgTU9ERV9QSU4wICgxIDw8IDApCiAjZGVmaW5lIE1PREVfUElOMSAoMSA8PCAxKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgKaW5kZXggMWYzZDZmYS4uNTcyYjRlYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2h3X2JyZWFrcG9pbnQuaD4KIAogLyoKICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgbWFjcm8gdGhhdCByZXR1cm5zIGN1cnJlbnQKQEAgLTkwLDkgKzkxLDkgQEAKIAl1bnNpZ25lZCBsb25nIGVudHJ5X3BjOwogfTsKIAotdW5pb24gc2hfZnB1X3VuaW9uIHsKLQlzdHJ1Y3Qgc2hfZnB1X2hhcmRfc3RydWN0IGhhcmQ7Ci0Jc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCBzb2Z0OwordW5pb24gdGhyZWFkX3hzdGF0ZSB7CisJc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCBoYXJkZnB1OworCXN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3Qgc29mdGZwdTsKIH07CiAKIHN0cnVjdCB0aHJlYWRfc3RydWN0IHsKQEAgLTEwMCwzOCArMTAxLDMwIEBACiAJdW5zaWduZWQgbG9uZyBzcDsKIAl1bnNpZ25lZCBsb25nIHBjOwogCi0JLyogSGFyZHdhcmUgZGVidWdnaW5nIHJlZ2lzdGVycyAqLwotCXVuc2lnbmVkIGxvbmcgdWJjX3BjOworCS8qIFZhcmlvdXMgdGhyZWFkIGZsYWdzLCBzZWUgU0hfVEhSRUFEX3h4eCAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKiBmbG9hdGluZyBwb2ludCBpbmZvICovCi0JdW5pb24gc2hfZnB1X3VuaW9uIGZwdTsKKwkvKiBTYXZlIG1pZGRsZSBzdGF0ZXMgb2YgcHRyYWNlIGJyZWFrcG9pbnRzICovCisJc3RydWN0IHBlcmZfZXZlbnQgKnB0cmFjZV9icHNbSEJQX05VTV07CiAKICNpZmRlZiBDT05GSUdfU0hfRFNQCiAJLyogRHNwIHN0YXR1cyBpbmZvcm1hdGlvbiAqLwogCXN0cnVjdCBzaF9kc3Bfc3RydWN0IGRzcF9zdGF0dXM7CiAjZW5kaWYKLX07CiAKLS8qIENvdW50IG9mIGFjdGl2ZSB0YXNrcyB3aXRoIFVCQyBzZXR0aW5ncyAqLwotZXh0ZXJuIGludCB1YmNfdXNlcmNudDsKKwkvKiBFeHRlbmRlZCBwcm9jZXNzb3Igc3RhdGUgKi8KKwl1bmlvbiB0aHJlYWRfeHN0YXRlICp4c3RhdGU7Cit9OwogCiAjZGVmaW5lIElOSVRfVEhSRUFEICB7CQkJCQkJXAogCS5zcCA9IHNpemVvZihpbml0X3N0YWNrKSArIChsb25nKSAmaW5pdF9zdGFjaywJCVwKKwkuZmxhZ3MgPSAwLAkJCQkJCVwKIH0KIAotLyoKLSAqIERvIG5lY2Vzc2FyeSBzZXR1cCB0byBzdGFydCB1cCBhIG5ld2x5IGV4ZWN1dGVkIHRocmVhZC4KLSAqLwotI2RlZmluZSBzdGFydF90aHJlYWQoX3JlZ3MsIG5ld19wYywgbmV3X3NwKQkgXAotCXNldF9mcyhVU0VSX0RTKTsJCQkgXAotCV9yZWdzLT5wciA9IDA7CQkJCSBcCi0JX3JlZ3MtPnNyID0gU1JfRkQ7CS8qIFVzZXIgbW9kZS4gKi8gXAotCV9yZWdzLT5wYyA9IG5ld19wYzsJCQkgXAotCV9yZWdzLT5yZWdzWzE1XSA9IG5ld19zcAotCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uLCBhIHN0cmFuZ2UgQyB0aGluZyAqLwogc3RydWN0IHRhc2tfc3RydWN0Owotc3RydWN0IG1tX3N0cnVjdDsKKworZXh0ZXJuIHZvaWQgc3RhcnRfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIG5ld19wYywgdW5zaWduZWQgbG9uZyBuZXdfc3ApOwogCiAvKiBGcmVlIGFsbCByZXNvdXJjZXMgaGVsZCBieSBhIHRocmVhZC4gKi8KIGV4dGVybiB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oCmluZGV4IDU3MjdkMzEuLjYyMWJjNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaApAQCAtODcsMjYgKzg3LDMxIEBACiAJLyogbG9uZyBzdGF0dXM7ICogc29mdHdhcmUgc3RhdHVzIGluZm9ybWF0aW9uICovCiB9OwogCi0jaWYgMAogLyogRHVtbXkgZnB1IGVtdWxhdG9yICAqLwogc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGZwX3JlZ3NbMzJdOworCXVuc2lnbmVkIGxvbmcgZnBfcmVnc1s2NF07CiAJdW5zaWduZWQgaW50IGZwc2NyOwogCXVuc2lnbmVkIGNoYXIgbG9va2FoZWFkOwogCXVuc2lnbmVkIGxvbmcgZW50cnlfcGM7CiB9OwotI2VuZGlmCiAKLXVuaW9uIHNoX2ZwdV91bmlvbiB7Ci0Jc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCBoYXJkOwotCS8qICdoYXJkJyBpdHNlbGYgb25seSBwcm9kdWNlcyAzMiBiaXQgYWxpZ25tZW50LCB5ZXQgd2UgbmVlZAotCSAgIHRvIGFjY2VzcyBpdCB1c2luZyA2NCBiaXQgbG9hZC9zdG9yZSBhcyB3ZWxsLiAqLwordW5pb24gdGhyZWFkX3hzdGF0ZSB7CisJc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCBoYXJkZnB1OworCXN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3Qgc29mdGZwdTsKKwkvKgorCSAqIFRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgb25seSBwcm9kdWNlIDMyIGJpdCBhbGlnbm1lbnQsIHlldCB3ZSBuZWVkCisJICogdG8gYWNjZXNzIHRoZW0gdXNpbmcgNjQgYml0IGxvYWQvc3RvcmUgYXMgd2VsbC4KKwkgKi8KIAl1bnNpZ25lZCBsb25nIGxvbmcgYWxpZ25tZW50X2R1bW15OwogfTsKIAogc3RydWN0IHRocmVhZF9zdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgc3A7CiAJdW5zaWduZWQgbG9uZyBwYzsKKworCS8qIFZhcmlvdXMgdGhyZWFkIGZsYWdzLCBzZWUgU0hfVEhSRUFEX3h4eCAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAkvKiBUaGlzIHN0b3JlcyB0aGUgYWRkcmVzcyBvZiB0aGUgcHRfcmVncyBidWlsdCBkdXJpbmcgYSBjb250ZXh0CiAJICAgc3dpdGNoLCBvciBvZiB0aGUgcmVnaXN0ZXIgc2F2ZSBhcmVhIGJ1aWx0IGZvciBhIGtlcm5lbCBtb2RlCiAJICAgZXhjZXB0aW9uLiAgSXQgaXMgdXNlZCBmb3IgYmFja3RyYWNpbmcgdGhlIHN0YWNrIG9mIGEgc2xlZXBpbmcgdGFzawpAQCAtMTIyLDcgKzEyNyw3IEBACiAJLyogSGFyZHdhcmUgZGVidWdnaW5nIHJlZ2lzdGVycyBtYXkgY29tZSBoZXJlICovCiAKIAkvKiBmbG9hdGluZyBwb2ludCBpbmZvICovCi0JdW5pb24gc2hfZnB1X3VuaW9uIGZwdTsKKwl1bmlvbiB0aHJlYWRfeHN0YXRlICp4c3RhdGU7CiB9OwogCiAjZGVmaW5lIElOSVRfTU1BUCBcCkBAIC0xMzcsNyArMTQyLDcgQEAKIAkudHJhcF9ubwk9IDAsCQkJXAogCS5lcnJvcl9jb2RlCT0gMCwJCQlcCiAJLmFkZHJlc3MJPSAwLAkJCVwKLQkuZnB1CQk9IHsgeyB7IDAsIH0gfSwgfQlcCisJLmZsYWdzCQk9IDAsCQkJXAogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggMWRjMTJjYi4uZTExYjE0ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xMDIsMTMgKzEwMiwxNSBAQAogI2RlZmluZQlQVFJBQ0VfR0VURFNQUkVHUwk1NQkvKiBEU1AgcmVnaXN0ZXJzICovCiAjZGVmaW5lCVBUUkFDRV9TRVREU1BSRUdTCTU2CiAKLSNkZWZpbmUgUFRfVEVYVF9FTkRfQUREUiAJMjQwCi0jZGVmaW5lIFBUX1RFWFRfQUREUiAJCTI0NAkvKiAmKHN0cnVjdCB1c2VyKS0+c3RhcnRfY29kZSAqLwotI2RlZmluZSBQVF9EQVRBX0FERFIgCQkyNDgJLyogJihzdHJ1Y3QgdXNlciktPnN0YXJ0X2RhdGEgKi8KKyNkZWZpbmUgUFRfVEVYVF9FTkRfQUREUgkyNDAKKyNkZWZpbmUgUFRfVEVYVF9BRERSCQkyNDQJLyogJihzdHJ1Y3QgdXNlciktPnN0YXJ0X2NvZGUgKi8KKyNkZWZpbmUgUFRfREFUQV9BRERSCQkyNDgJLyogJihzdHJ1Y3QgdXNlciktPnN0YXJ0X2RhdGEgKi8KICNkZWZpbmUgUFRfVEVYVF9MRU4JCTI1MgogCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogI2RlZmluZSB1c2VyX21vZGUocmVncykJCQkoKChyZWdzKS0+c3IgJiAweDQwMDAwMDAwKT09MCkKICNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQkoKHVuc2lnbmVkIGxvbmcpKHJlZ3MpLT5wYykKQEAgLTEyNCw2ICsxMjYsMTIgQEAKIGV4dGVybiB2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAKK3N0cnVjdCBwZXJmX2V2ZW50Oworc3RydWN0IHBlcmZfc2FtcGxlX2RhdGE7CisKK2V4dGVybiB2b2lkIHB0cmFjZV90cmlnZ2VyZWQoc3RydWN0IHBlcmZfZXZlbnQgKmJwLCBpbnQgbm1pLAorCQkgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCiAjZGVmaW5lIHRhc2tfcHRfcmVncyh0YXNrKSBcCiAJKChzdHJ1Y3QgcHRfcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUpIC0gMSkKIApAQCAtMTMxLDEwICsxMzksOCBAQAogewogCXVuc2lnbmVkIGxvbmcgcGMgPSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOwogCi0jaWZkZWYgUDJTRUcKLQlpZiAocGMgPj0gUDJTRUcgJiYgcGMgPCBQM1NFRykKLQkJcGMgLT0gMHgyMDAwMDAwMDsKLSNlbmRpZgorCWlmICh2aXJ0X2FkZHJfdW5jYWNoZWQocGMpKQorCQlyZXR1cm4gQ0FDX0FERFIocGMpOwogCiAJcmV0dXJuIHBjOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9yZWJvb3QuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcmVib290LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNkYTBjNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcmVib290LmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfX0FTTV9TSF9SRUJPT1RfSAorI2RlZmluZSBfX0FTTV9TSF9SRUJPT1RfSAorCisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisKK3N0cnVjdCBwdF9yZWdzOworCitzdHJ1Y3QgbWFjaGluZV9vcHMgeworCXZvaWQgKCpyZXN0YXJ0KShjaGFyICpjbWQpOworCXZvaWQgKCpoYWx0KSh2b2lkKTsKKwl2b2lkICgqcG93ZXJfb2ZmKSh2b2lkKTsKKwl2b2lkICgqc2h1dGRvd24pKHZvaWQpOworCXZvaWQgKCpjcmFzaF9zaHV0ZG93bikoc3RydWN0IHB0X3JlZ3MgKik7Cit9OworCitleHRlcm4gc3RydWN0IG1hY2hpbmVfb3BzIG1hY2hpbmVfb3BzOworCisvKiBhcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgKi8KK3ZvaWQgbmF0aXZlX21hY2hpbmVfY3Jhc2hfc2h1dGRvd24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisjZW5kaWYgLyogX19BU01fU0hfUkVCT09UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCBjZTM3NDM1Li40NzU4MzI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC0xOCw3ICsxOCw2IEBACiAvKiAuLi4gKi8KICNkZWZpbmUgQ09NTUFORF9MSU5FICgoY2hhciAqKSAoUEFSQU0rMHgxMDApKQogCi1pbnQgc2V0dXBfZWFybHlfcHJpbnRrKGNoYXIgKik7CiB2b2lkIHNoX212X3NldHVwKHZvaWQpOwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaF9iaW9zLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NoX2Jpb3MuaAppbmRleCBkOWM5NmQ3Li45NTcxNGMyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NoX2Jpb3MuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NoX2Jpb3MuaApAQCAtMSwxOCArMSwyNyBAQAogI2lmbmRlZiBfX0FTTV9TSF9CSU9TX0gKICNkZWZpbmUgX19BU01fU0hfQklPU19ICiAKKyNpZmRlZiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUworCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAwIEdyZWcgQmFua3MsIE1pdGNoIERhdmlzCiAgKiBDIEFQSSB0byBpbnRlcmZhY2UgdG8gdGhlIHN0YW5kYXJkIExpbnV4U0ggQklPUwogICogdXN1YWxseSBmcm9tIHdpdGhpbiB0aGUgZWFybHkgc3RhZ2VzIG9mIGtlcm5lbCBib290LgogICovCi0KLQogZXh0ZXJuIHZvaWQgc2hfYmlvc19jb25zb2xlX3dyaXRlKGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7Ci1leHRlcm4gdm9pZCBzaF9iaW9zX2NoYXJfb3V0KGNoYXIgY2gpOwogZXh0ZXJuIHZvaWQgc2hfYmlvc19nZGJfZGV0YWNoKHZvaWQpOwogCiBleHRlcm4gdm9pZCBzaF9iaW9zX2dldF9ub2RlX2FkZHIodW5zaWduZWQgY2hhciAqbm9kZV9hZGRyKTsKIGV4dGVybiB2b2lkIHNoX2Jpb3Nfc2h1dGRvd24odW5zaWduZWQgaW50IGhvdyk7CiAKK2V4dGVybiB2b2lkIHNoX2Jpb3NfdmJyX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBzaF9iaW9zX3Zicl9yZWxvYWQodm9pZCk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaF9iaW9zX3Zicl9pbml0KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHNoX2Jpb3NfdmJyX3JlbG9hZCh2b2lkKSB7IH0KKworI2VuZGlmIC8qIENPTkZJR19TSF9TVEFOREFSRF9CSU9TICovCisKICNlbmRpZiAvKiBfX0FTTV9TSF9CSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2l1LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NpdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NTY1YTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NpdS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBwbGF0Zm9ybSBoZWFkZXIgZm9yIHRoZSBTSVUgQVNvQyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgQVNNX1NJVV9ICisjZGVmaW5lIEFTTV9TSVVfSAorCisjaW5jbHVkZSA8YXNtL2RtYS1zaC5oPgorCitzdHJ1Y3QgZGV2aWNlOworCitzdHJ1Y3Qgc2l1X3BsYXRmb3JtIHsKKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2OworCWVudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkIGRtYV9zbGF2ZV90eF9hOworCWVudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkIGRtYV9zbGF2ZV9yeF9hOworCWVudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkIGRtYV9zbGF2ZV90eF9iOworCWVudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkIGRtYV9zbGF2ZV9yeF9iOworfTsKKworI2VuZGlmIC8qIEFTTV9TSVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zdXNwZW5kLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N1c3BlbmQuaAppbmRleCBmZTljMmExLi42NGViNDFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N1c3BlbmQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N1c3BlbmQuaApAQCAtOTIsNSArOTIsNiBAQAogI2RlZmluZSBTVVNQX1NIX1VTVEFOREJZCSgxIDw8IDMpIC8qIFNILU1vYmlsZSBVLXN0YW5kYnkgbW9kZSAqLwogI2RlZmluZSBTVVNQX1NIX1NGCQkoMSA8PCA0KSAvKiBFbmFibGUgc2VsZi1yZWZyZXNoICovCiAjZGVmaW5lIFNVU1BfU0hfTU1VCQkoMSA8PCA1KSAvKiBTYXZlL3Jlc3RvcmUgTU1VIGFuZCBjYWNoZSAqLworI2RlZmluZSBTVVNQX1NIX1JFR1MJCSgxIDw8IDYpIC8qIFNhdmUvcmVzdG9yZSByZWdpc3RlcnMgKi8KIAogI2VuZGlmIC8qIF9BU01fU0hfU1VTUEVORF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oCmluZGV4IDZhMzgxNDIuLmFhNzc3N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfX0FTTV9TSF9TWVNDQUxMX0gKICNkZWZpbmUgX19BU01fU0hfU1lTQ0FMTF9ICiAKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIHN5c19jYWxsX3RhYmxlW107CisKICNpZmRlZiBDT05GSUdfU1VQRVJIMzIKICMgaW5jbHVkZSAic3lzY2FsbF8zMi5oIgogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IGMxNTQxNWIuLjBiZDdhMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAogI2RlZmluZSBBVF9WRUNUT1JfU0laRV9BUkNIIDUgLyogZW50cmllcyBpbiBBUkNIX0RMSU5GTyAqLwogCkBAIC0zMiw3ICszMSw3IEBACiAjZGVmaW5lIG1iKCkJCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luY28iOiA6IDoibWVtb3J5IikKICNkZWZpbmUgcm1iKCkJCW1iKCkKICNkZWZpbmUgd21iKCkJCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luY28iOiA6IDoibWVtb3J5IikKLSNkZWZpbmUgY3RybF9iYXJyaWVyKCkJX19pY2JpKDB4YTgwMDAwMDApCisjZGVmaW5lIGN0cmxfYmFycmllcigpCV9faWNiaShQQUdFX09GRlNFVCkKICNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUoMCkKICNlbHNlCiAjZGVmaW5lIG1iKCkJCV9fYXNtX18gX192b2xhdGlsZV9fICgiIjogOiA6Im1lbW9yeSIpCkBAIC0xMTQsNiArMTEzLDggQEAKIAkJCQkgICAgKHVuc2lnbmVkIGxvbmcpX25fLCBzaXplb2YoKihwdHIpKSk7IFwKICAgfSkKIAorc3RydWN0IHB0X3JlZ3M7CisKIGV4dGVybiB2b2lkIGRpZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycikgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CiB2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKTsKIHZvaWQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKQEAgLTEzNywxNCArMTM4LDE0IEBACiAjZW5kaWYKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY2FjaGVkX3RvX3VuY2FjaGVkOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdW5jYWNoZWRfc2l6ZTsKIAogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnNoX2RlYnVnZnNfcm9vdDsKIAogdm9pZCBwZXJfY3B1X3RyYXBfaW5pdCh2b2lkKTsKIHZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpOwogdm9pZCBjcHVfaWRsZV93YWl0KHZvaWQpOwotCi1hc21saW5rYWdlIHZvaWQgYnJlYWtfcG9pbnRfdHJhcCh2b2lkKTsKK3ZvaWQgc3RvcF90aGlzX2NwdSh2b2lkICopOwogCiAjaWZkZWYgQ09ORklHX1NVUEVSSDMyCiAjZGVmaW5lIEJVSUxEX1RSQVBfSEFORExFUihuYW1lKQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKaW5kZXggMDY4MTRmNS4uNTEyOTZiMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfX0FTTV9TSF9TWVNURU1fMzJfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CiAKICNpZmRlZiBDT05GSUdfU0hfRFNQCiAKQEAgLTE0NCw5ICsxNDUsNiBAQAogCQlfX3Jlc3RvcmVfZHNwKHByZXYpOwkJCQlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIFwKLQlub2lubGluZSBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIudW5jYWNoZWQudGV4dCIpKSkKLQogLyoKICAqIEp1bXAgdG8gdW5jYWNoZWQgYXJlYS4KICAqIFdoZW4gaGFuZGxpbmcgVExCIG9yIGNhY2hlcywgd2UgbmVlZCB0byBkbyBpdCBmcm9tIGFuIHVuY2FjaGVkIGFyZWEuCkBAIC0yMTYsNiArMjE0LDE3IEBACiBpbnQgaGFuZGxlX3VuYWxpZ25lZF9hY2Nlc3MoaW5zbl9zaXplX3QgaW5zdHJ1Y3Rpb24sIHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQkJICAgIHN0cnVjdCBtZW1fYWNjZXNzICptYSwgaW50KTsKIAorc3RhdGljIGlubGluZSB2b2lkIHRyaWdnZXJfYWRkcmVzc19lcnJvcih2b2lkKQoreworCWlmIChfX2luXzI5Yml0X21vZGUoKSkKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkJImxkYyAlMCwgc3Jcblx0IgorCQkJIm1vdi5sIEAlMSwgJTAiCisJCQk6CisJCQk6ICJyIiAoMHgxMDAwMDAwMCksICJyIiAoMHg4MDAwMDAwMSkKKwkJKTsKK30KKwogYXNtbGlua2FnZSB2b2lkIGRvX2FkZHJlc3NfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkJIHVuc2lnbmVkIGxvbmcgd3JpdGVhY2Nlc3MsCiAJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaAppbmRleCBhYjFkZDkxLi4zNjMzODY0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKQEAgLTE4LDYgKzE4LDcgQEAKIC8qCiAgKglzd2l0Y2hfdG8oKSBzaG91bGQgc3dpdGNoIHRhc2tzIHRvIHRhc2sgbnIgbiwgZmlyc3QKICAqLworc3RydWN0IHRocmVhZF9zdHJ1Y3Q7CiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNoNjRfc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKIAkJCQkgICBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqcHJldl90aHJlYWQsCiAJCQkJICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0LApAQCAtMzMsOCArMzQsNiBAQAogCQkJICAgICAgJm5leHQtPnRocmVhZCk7CQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBfX3VzZXNfanVtcF90b191bmNhY2hlZAotCiAjZGVmaW5lIGp1bXBfdG9fdW5jYWNoZWQoKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJhY2tfdG9fY2FjaGVkKCkJZG8geyB9IHdoaWxlICgwKQogCkBAIC00OCw2ICs0NywxMyBAQAogCXJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKShzaWduZWQgbG9uZyBsb25nKShzaWduZWQgbG9uZyl2YWw7CiB9CiAKK2V4dGVybiB2b2lkIHBoeXNfc3RleHQodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmlnZ2VyX2FkZHJlc3NfZXJyb3Iodm9pZCkKK3sKKwlwaHlzX3N0ZXh0KCk7Cit9CisKICNkZWZpbmUgU1JfQkxfTEwJMHgwMDAwMDAwMDEwMDAwMDAwTEwKIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9ibF9iaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAxZjNkOTI3Li41NWEzNmZlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC05MywxNCArOTMsMTYgQEAKIAogI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkoVEhSRUFEX1NISUZUIC0gUEFHRV9TSElGVCkKIAotI2Vsc2UgLyogVEhSRUFEX1NISUZUIDwgUEFHRV9TSElGVCAqLwotCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1RIUkVBRF9JTkZPX0FMTE9DQVRPUgorI2VuZGlmCiAKIGV4dGVybiBzdHJ1Y3QgdGhyZWFkX2luZm8gKmFsbG9jX3RocmVhZF9pbmZvKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIGV4dGVybiB2b2lkIGZyZWVfdGhyZWFkX2luZm8oc3RydWN0IHRocmVhZF9pbmZvICp0aSk7CitleHRlcm4gdm9pZCBhcmNoX3Rhc2tfY2FjaGVfaW5pdCh2b2lkKTsKKyNkZWZpbmUgYXJjaF90YXNrX2NhY2hlX2luaXQgYXJjaF90YXNrX2NhY2hlX2luaXQKK2V4dGVybiBpbnQgYXJjaF9kdXBfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICpkc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqc3JjKTsKK2V4dGVybiB2b2lkIGluaXRfdGhyZWFkX3hzdGF0ZSh2b2lkKTsKIAotI2VuZGlmIC8qIFRIUkVBRF9TSElGVCA8IFBBR0VfU0hJRlQgKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfVEhSRUFEX0lORk9fQUxMT0NBVE9SCiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggZGE4ZmU3YS4uNzVhYmIzOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RsYi5oCkBAIC0xMSw2ICsxMSw3IEBACiAjaWZkZWYgQ09ORklHX01NVQogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAKIC8qCiAgKiBUTEIgaGFuZGxpbmcuICBUaGlzIGFsbG93cyB1cyB0byByZW1vdmUgcGFnZXMgZnJvbSB0aGUgcGFnZQpAQCAtOTcsNiArOTgsMjIgQEAKIAogI2RlZmluZSB0bGJfbWlncmF0ZV9maW5pc2gobW0pCQlkbyB7IH0gd2hpbGUgKDApCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KSB8fCBkZWZpbmVkKENPTkZJR19TVVBFUkg2NCkKK2V4dGVybiB2b2lkIHRsYl93aXJlX2VudHJ5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCk7CitleHRlcm4gdm9pZCB0bGJfdW53aXJlX2VudHJ5KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB0bGJfd2lyZV9lbnRyeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSAsCisJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSkKK3sKKwlCVUcoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRsYl91bndpcmVfZW50cnkodm9pZCkKK3sKKwlCVUcoKTsKK30KKyNlbmRpZgorCiAjZWxzZSAvKiBDT05GSUdfTU1VICovCiAKICNkZWZpbmUgdGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSkJCQkJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS91YmMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdWJjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliZjk2MTYuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS91YmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1zaC91YmMuaAotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBOaWliZSBZdXRha2EKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBQYXVsIE11bmR0Ci0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpZm5kZWYgX19BU01fU0hfVUJDX0gKLSNkZWZpbmUgX19BU01fU0hfVUJDX0gKLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxjcHUvdWJjLmg+Ci0KLS8qIFVzZXIgQnJlYWsgQ29udHJvbGxlciAqLwotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQotI2RlZmluZSBVQkNfVFlQRV9TSDc3MjkJKGN1cnJlbnRfY3B1X2RhdGEudHlwZSA9PSBDUFVfU0g3NzI5KQotI2Vsc2UKLSNkZWZpbmUgVUJDX1RZUEVfU0g3NzI5CTAKLSNlbmRpZgotCi0jZGVmaW5lIEJBTVJfQVNJRAkJKDEgPDwgMikKLSNkZWZpbmUgQkFNUl9OT05FCQkwCi0jZGVmaW5lIEJBTVJfMTAJCQkweDEKLSNkZWZpbmUgQkFNUl8xMgkJCTB4MgotI2RlZmluZSBCQU1SX0FMTAkJMHgzCi0jZGVmaW5lIEJBTVJfMTYJCQkweDgKLSNkZWZpbmUgQkFNUl8yMAkJCTB4OQotCi0jZGVmaW5lIEJCUl9JTlNUCQkoMSA8PCA0KQotI2RlZmluZSBCQlJfREFUQQkJKDIgPDwgNCkKLSNkZWZpbmUgQkJSX1JFQUQJCSgxIDw8IDIpCi0jZGVmaW5lIEJCUl9XUklURQkJKDIgPDwgMikKLSNkZWZpbmUgQkJSX0JZVEUJCTB4MQotI2RlZmluZSBCQlJfSEFMRgkJMHgyCi0jZGVmaW5lIEJCUl9MT05HCQkweDMKLSNkZWZpbmUgQkJSX1FVQUQJCSgxIDw8IDYpCS8qIFNINzc1MCAqLwotI2RlZmluZSBCQlJfQ1BVCQkJKDEgPDwgNikJLyogU0g3NzA5QSxTSDc3MjkgKi8KLSNkZWZpbmUgQkJSX0RNQQkJCSgyIDw8IDYpCS8qIFNINzcwOUEsU0g3NzI5ICovCi0KLSNkZWZpbmUgQlJDUl9DTUZBCQkoMSA8PCAxNSkKLSNkZWZpbmUgQlJDUl9DTUZCCQkoMSA8PCAxNCkKLQotI2lmIGRlZmluZWQgQ09ORklHX0NQVV9TSDJBCi0jZGVmaW5lIEJSQ1JfQ01GQ0EJCSgxIDw8IDE1KQotI2RlZmluZSBCUkNSX0NNRkNCCQkoMSA8PCAxNCkKLSNkZWZpbmUgQlJDUl9DTUZEQQkJKDEgPDwgMTMpCi0jZGVmaW5lIEJSQ1JfQ01GREIJCSgxIDw8IDEyKQotI2RlZmluZSBCUkNSX1BDQkIJCSgxIDw8IDYpCS8qIDE6IGFmdGVyIGV4ZWN1dGlvbiAqLwotI2RlZmluZSBCUkNSX1BDQkEJCSgxIDw8IDUpCS8qIDE6IGFmdGVyIGV4ZWN1dGlvbiAqLwotI2RlZmluZSBCUkNSX1BDVEUJCTAKLSNlbHNlCi0jZGVmaW5lIEJSQ1JfUENURQkJKDEgPDwgMTEpCi0jZGVmaW5lIEJSQ1JfUENCQQkJKDEgPDwgMTApCS8qIDE6IGFmdGVyIGV4ZWN1dGlvbiAqLwotI2RlZmluZSBCUkNSX0RCRUIJCSgxIDw8IDcpCi0jZGVmaW5lIEJSQ1JfUENCQgkJKDEgPDwgNikKLSNkZWZpbmUgQlJDUl9TRVEJCSgxIDw8IDMpCi0jZGVmaW5lIEJSQ1JfVUJERQkJKDEgPDwgMCkKLSNlbmRpZgotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9fQVNNX1NIX1VCQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuY2FjaGVkLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuY2FjaGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM0MTlmOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdW5jYWNoZWQuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIF9fQVNNX1NIX1VOQ0FDSEVEX0gKKyNkZWZpbmUgX19BU01fU0hfVU5DQUNIRURfSAorCisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisKKyNpZmRlZiBDT05GSUdfVU5DQUNIRURfTUFQUElORworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdW5jYWNoZWRfc3RhcnQsIHVuY2FjaGVkX2VuZDsKKworZXh0ZXJuIGludCB2aXJ0X2FkZHJfdW5jYWNoZWQodW5zaWduZWQgbG9uZyBrYWRkcik7CitleHRlcm4gdm9pZCB1bmNhY2hlZF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgdW5jYWNoZWRfcmVzaXplKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisjZWxzZQorI2RlZmluZSB2aXJ0X2FkZHJfdW5jYWNoZWQoa2FkZHIpCSgwKQorI2RlZmluZSB1bmNhY2hlZF9pbml0KCkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHVuY2FjaGVkX3Jlc2l6ZShzaXplKQkJQlVHKCkKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fU0hfVU5DQUNIRURfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS92bWxpbnV4Lmxkcy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS92bWxpbnV4Lmxkcy5oCmluZGV4IDI0NGVjNGEuLmQ1OGFkNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdm1saW51eC5sZHMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3ZtbGludXgubGRzLmgKQEAgLTE0LDQgKzE0LDEyIEBACiAjZGVmaW5lIERXQVJGX0VIX0ZSQU1FCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TVVBFUkg2NAorI2RlZmluZSBFWFRSQV9URVhUCQlcCisJKigudGV4dDY0KQkJXAorCSooLnRleHQuLlNIbWVkaWEzMikKKyNlbHNlCisjZGVmaW5lIEVYVFJBX1RFWFQKKyNlbmRpZgorCiAjZW5kaWYgLyogX19BU01fU0hfVk1MSU5VWF9MRFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS93YXRjaGRvZy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS93YXRjaGRvZy5oCmluZGV4IDE5ZGZmZjUuLjg1YTdhY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vd2F0Y2hkb2cuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3dhdGNoZG9nLmgKQEAgLTcwLDcgKzcwLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBfX3UzMiBzaF93ZHRfcmVhZF9jbnQodm9pZCkKIHsKLQlyZXR1cm4gY3RybF9pbmwoV1RDTlRfUik7CisJcmV0dXJuIF9fcmF3X3JlYWRsKFdUQ05UX1IpOwogfQogCiAvKioKQEAgLTgyLDcgKzgyLDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHNoX3dkdF93cml0ZV9jbnQoX191MzIgdmFsKQogewotCWN0cmxfb3V0bCgoV1RDTlRfSElHSCA8PCAyNCkgfCAoX191MzIpdmFsLCBXVENOVCk7CisJX19yYXdfd3JpdGVsKChXVENOVF9ISUdIIDw8IDI0KSB8IChfX3UzMil2YWwsIFdUQ05UKTsKIH0KIAogLyoqCkBAIC05NCw3ICs5NCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzaF93ZHRfd3JpdGVfYnN0KF9fdTMyIHZhbCkKIHsKLQljdHJsX291dGwoKFdUQlNUX0hJR0ggPDwgMjQpIHwgKF9fdTMyKXZhbCwgV1RCU1QpOworCV9fcmF3X3dyaXRlbCgoV1RCU1RfSElHSCA8PCAyNCkgfCAoX191MzIpdmFsLCBXVEJTVCk7CiB9CiAvKioKICAqIAlzaF93ZHRfcmVhZF9jc3IgLSBSZWFkIGZyb20gQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIKQEAgLTEwMyw3ICsxMDMsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIF9fdTMyIHNoX3dkdF9yZWFkX2Nzcih2b2lkKQogewotCXJldHVybiBjdHJsX2lubChXVENTUl9SKTsKKwlyZXR1cm4gX19yYXdfcmVhZGwoV1RDU1JfUik7CiB9CiAKIC8qKgpAQCAtMTE1LDcgKzExNSw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzaF93ZHRfd3JpdGVfY3NyKF9fdTMyIHZhbCkKIHsKLQljdHJsX291dGwoKFdUQ1NSX0hJR0ggPDwgMjQpIHwgKF9fdTMyKXZhbCwgV1RDU1IpOworCV9fcmF3X3dyaXRlbCgoV1RDU1JfSElHSCA8PCAyNCkgfCAoX191MzIpdmFsLCBXVENTUik7CiB9CiAjZWxzZQogLyoqCkBAIC0xMjQsNyArMTI0LDcgQEAKICAqLwogc3RhdGljIGlubGluZSBfX3U4IHNoX3dkdF9yZWFkX2NudCh2b2lkKQogewotCXJldHVybiBjdHJsX2luYihXVENOVF9SKTsKKwlyZXR1cm4gX19yYXdfcmVhZGIoV1RDTlRfUik7CiB9CiAKIC8qKgpAQCAtMTM2LDcgKzEzNiw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzaF93ZHRfd3JpdGVfY250KF9fdTggdmFsKQogewotCWN0cmxfb3V0dygoV1RDTlRfSElHSCA8PCA4KSB8IChfX3UxNil2YWwsIFdUQ05UKTsKKwlfX3Jhd193cml0ZXcoKFdUQ05UX0hJR0ggPDwgOCkgfCAoX191MTYpdmFsLCBXVENOVCk7CiB9CiAKIC8qKgpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgX191OCBzaF93ZHRfcmVhZF9jc3Iodm9pZCkKIHsKLQlyZXR1cm4gY3RybF9pbmIoV1RDU1JfUik7CisJcmV0dXJuIF9fcmF3X3JlYWRiKFdUQ1NSX1IpOwogfQogCiAvKioKQEAgLTE1OCw3ICsxNTgsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2hfd2R0X3dyaXRlX2NzcihfX3U4IHZhbCkKIHsKLQljdHJsX291dHcoKFdUQ1NSX0hJR0ggPDwgOCkgfCAoX191MTYpdmFsLCBXVENTUik7CisJX19yYXdfd3JpdGV3KChXVENTUl9ISUdIIDw8IDgpIHwgKF9fdTE2KXZhbCwgV1RDU1IpOwogfQogI2VuZGlmIC8qIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgfHwgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCAqLwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyL2NwdS91YmMuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyL2NwdS91YmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEwZTg3Zi4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMi9jcHUvdWJjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tc2gvY3B1LXNoMi91YmMuaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBQYXVsIE11bmR0Ci0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpZm5kZWYgX19BU01fQ1BVX1NIMl9VQkNfSAotI2RlZmluZSBfX0FTTV9DUFVfU0gyX1VCQ19ICi0KLSNkZWZpbmUgVUJDX0JBUkEgICAgICAgICAgICAgICAgMHhmZmZmZmY0MAotI2RlZmluZSBVQkNfQkFNUkEgICAgICAgICAgICAgICAweGZmZmZmZjQ0Ci0jZGVmaW5lIFVCQ19CQlJBICAgICAgICAgICAgICAgIDB4ZmZmZmZmNDgKLSNkZWZpbmUgVUJDX0JBUkIgICAgICAgICAgICAgICAgMHhmZmZmZmY2MAotI2RlZmluZSBVQkNfQkFNUkIgICAgICAgICAgICAgICAweGZmZmZmZjY0Ci0jZGVmaW5lIFVCQ19CQlJCICAgICAgICAgICAgICAgIDB4ZmZmZmZmNjgKLSNkZWZpbmUgVUJDX0JEUkIgICAgICAgICAgICAgICAgMHhmZmZmZmY3MAotI2RlZmluZSBVQkNfQkRNUkIgICAgICAgICAgICAgICAweGZmZmZmZjc0Ci0jZGVmaW5lIFVCQ19CUkNSICAgICAgICAgICAgICAgIDB4ZmZmZmZmNzgKLQotLyoKLSAqIFdlIGRvbid0IGhhdmUgYW55IEFTSUQgY2hhbmdlcyB0byBtYWtlIGluIHRoZSBVQkMgb24gdGhlIFNILTIuCi0gKgotICogTWFrZSB0aGVzZSBwdXJwb3NlbHkgaW52YWxpZCB0byB0cmFjayBtaXN1c2UuCi0gKi8KLSNkZWZpbmUgVUJDX0JBU1JBCQkweDAwMDAwMDAwCi0jZGVmaW5lIFVCQ19CQVNSQgkJMHgwMDAwMDAwMAotCi0jZW5kaWYgLyogX19BU01fQ1BVX1NIMl9VQkNfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMi9jcHUvd2F0Y2hkb2cuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyL2NwdS93YXRjaGRvZy5oCmluZGV4IDM5MzE2MWMuLjFlYWI4YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyL2NwdS93YXRjaGRvZy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyL2NwdS93YXRjaGRvZy5oCkBAIC00NCw3ICs0NCw3IEBACiAJLyoKIAkgKiBTYW1lIHJlYWQvd3JpdGUgYnJhaW4tZGFtYWdlIGFzIGZvciBXVENOVCBoZXJlLi4KIAkgKi8KLQlyZXR1cm4gY3RybF9pbmIoUlNUQ1NSX1IpOworCXJldHVybiBfX3Jhd19yZWFkYihSU1RDU1JfUik7CiB9CiAKIC8qKgpAQCAtNjIsNyArNjIsNyBAQAogCSAqIHdlIGNhbid0IHByZXNlbnRseSB0b3VjaCB0aGUgV09WRiBiaXQsIHNpbmNlIHRoZSB1cHBlciBieXRlCiAJICogaGFzIHRvIGJlIHN3YXBwZWQgZm9yIHRoaXMuIFNvIGp1c3QgbGVhdmUgaXQgYWxvbmUuLgogCSAqLwotCWN0cmxfb3V0dygoV1RDTlRfSElHSCA8PCA4KSB8IChfX3UxNil2YWwsIFJTVENTUik7CisJX19yYXdfd3JpdGViKChXVENOVF9ISUdIIDw8IDgpIHwgKF9fdTE2KXZhbCwgUlNUQ1NSKTsKIH0KIAogI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDJfV0FUQ0hET0dfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RhYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RhYy5oCmluZGV4IDA1ZmRhODMuLjk4ZjFkMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kYWMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZGFjLmgKQEAgLTE3LDI1ICsxNywyNSBAQAogc3RhdGljIF9faW5saW5lX18gdm9pZCBzaF9kYWNfZW5hYmxlKGludCBjaGFubmVsKQogewogCXVuc2lnbmVkIGNoYXIgdjsKLQl2ID0gY3RybF9pbmIoREFDUik7CisJdiA9IF9fcmF3X3JlYWRiKERBQ1IpOwogCWlmKGNoYW5uZWwpIHYgfD0gREFDUl9EQU9FMTsKIAllbHNlIHYgfD0gREFDUl9EQU9FMDsKLQljdHJsX291dGIodixEQUNSKTsKKwlfX3Jhd193cml0ZWIodixEQUNSKTsKIH0KIAogc3RhdGljIF9faW5saW5lX18gdm9pZCBzaF9kYWNfZGlzYWJsZShpbnQgY2hhbm5lbCkKIHsKIAl1bnNpZ25lZCBjaGFyIHY7Ci0JdiA9IGN0cmxfaW5iKERBQ1IpOworCXYgPSBfX3Jhd19yZWFkYihEQUNSKTsKIAlpZihjaGFubmVsKSB2ICY9IH5EQUNSX0RBT0UxOwogCWVsc2UgdiAmPSB+REFDUl9EQU9FMDsKLQljdHJsX291dGIodixEQUNSKTsKKwlfX3Jhd193cml0ZWIodixEQUNSKTsKIH0KIAogc3RhdGljIF9faW5saW5lX18gdm9pZCBzaF9kYWNfb3V0cHV0KHU4IHZhbHVlLCBpbnQgY2hhbm5lbCkKIHsKLQlpZihjaGFubmVsKSBjdHJsX291dGIodmFsdWUsREFEUjEpOwotCWVsc2UgY3RybF9vdXRiKHZhbHVlLERBRFIwKTsKKwlpZihjaGFubmVsKSBfX3Jhd193cml0ZWIodmFsdWUsREFEUjEpOworCWVsc2UgX19yYXdfd3JpdGViKHZhbHVlLERBRFIwKTsKIH0KIAogI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDNfREFDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaAppbmRleCAwZWExNWYzLi4yMDc4MTFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oCkBAIC0yMCw4ICsyMCwxMCBAQAogI2RlZmluZSBUU18zMgkJMHgwMDAwMDAxMAogI2RlZmluZSBUU18xMjgJCTB4MDAwMDAwMTgKIAotI2RlZmluZSBDSENSX1RTX01BU0sJMHgxOAotI2RlZmluZSBDSENSX1RTX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAogCiAjZGVmaW5lIERNQU9SX0lOSVQJRE1BT1JfRE1FCiAKQEAgLTM2LDExICszOCwxMyBAQAogCVhNSVRfU1pfMTI4QklULAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdIF9fbWF5YmVfdW51c2VkID0gewotCVtYTUlUX1NaXzhCSVRdCQk9IDAsCi0JW1hNSVRfU1pfMTZCSVRdCQk9IDEsCi0JW1hNSVRfU1pfMzJCSVRdCQk9IDIsCi0JW1hNSVRfU1pfMTI4QklUXQk9IDQsCi19OworI2RlZmluZSBUU19TSElGVCB7CQkJXAorCVtYTUlUX1NaXzhCSVRdCQk9IDAsCVwKKwlbWE1JVF9TWl8xNkJJVF0JCT0gMSwJXAorCVtYTUlUX1NaXzMyQklUXQkJPSAyLAlcCisJW1hNSVRfU1pfMTI4QklUXQk9IDQsCVwKK30KKworI2RlZmluZSBUU19JTkRFWDJWQUwoaSkJKCgoaSkgJiAzKSA8PCBDSENSX1RTX0xPV19TSElGVCkKIAogI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDNfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS91YmMuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS91YmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU2MzgxZC4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvdWJjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tc2gvY3B1LXNoMy91YmMuaAotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBOaWliZSBZdXRha2EKLSAqIENvcHlyaWdodCAoQykgMjAwMyBQYXVsIE11bmR0Ci0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpZm5kZWYgX19BU01fQ1BVX1NIM19VQkNfSAotI2RlZmluZSBfX0FTTV9DUFVfU0gzX1VCQ19ICi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpCi0jZGVmaW5lIFVCQ19CQVJBCQkweGE0ZmZmZmIwCi0jZGVmaW5lIFVCQ19CQU1SQQkJMHhhNGZmZmZiNAotI2RlZmluZSBVQkNfQkJSQQkJMHhhNGZmZmZiOAotI2RlZmluZSBVQkNfQkFTUkEJCTB4ZmZmZmZmZTQKLSNkZWZpbmUgVUJDX0JBUkIJCTB4YTRmZmZmYTAKLSNkZWZpbmUgVUJDX0JBTVJCCQkweGE0ZmZmZmE0Ci0jZGVmaW5lIFVCQ19CQlJCCQkweGE0ZmZmZmE4Ci0jZGVmaW5lIFVCQ19CQVNSQgkJMHhmZmZmZmZlOAotI2RlZmluZSBVQkNfQkRSQgkJMHhhNGZmZmY5MAotI2RlZmluZSBVQkNfQkRNUkIJCTB4YTRmZmZmOTQKLSNkZWZpbmUgVUJDX0JSQ1IJCTB4YTRmZmZmOTgKLSNlbHNlCi0jZGVmaW5lIFVCQ19CQVJBICAgICAgICAgICAgICAgIDB4ZmZmZmZmYjAKLSNkZWZpbmUgVUJDX0JBTVJBICAgICAgICAgICAgICAgMHhmZmZmZmZiNAotI2RlZmluZSBVQkNfQkJSQSAgICAgICAgICAgICAgICAweGZmZmZmZmI4Ci0jZGVmaW5lIFVCQ19CQVNSQSAgICAgICAgICAgICAgIDB4ZmZmZmZmZTQKLSNkZWZpbmUgVUJDX0JBUkIgICAgICAgICAgICAgICAgMHhmZmZmZmZhMAotI2RlZmluZSBVQkNfQkFNUkIgICAgICAgICAgICAgICAweGZmZmZmZmE0Ci0jZGVmaW5lIFVCQ19CQlJCICAgICAgICAgICAgICAgIDB4ZmZmZmZmYTgKLSNkZWZpbmUgVUJDX0JBU1JCICAgICAgICAgICAgICAgMHhmZmZmZmZlOAotI2RlZmluZSBVQkNfQkRSQiAgICAgICAgICAgICAgICAweGZmZmZmZjkwCi0jZGVmaW5lIFVCQ19CRE1SQiAgICAgICAgICAgICAgIDB4ZmZmZmZmOTQKLSNkZWZpbmUgVUJDX0JSQ1IgICAgICAgICAgICAgICAgMHhmZmZmZmY5OAotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0FTTV9DUFVfU0gzX1VCQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvYWRkcnNwYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvYWRkcnNwYWNlLmgKaW5kZXggYTNmYTczMy4uZDUxZGEyNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2FkZHJzcGFjZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9hZGRyc3BhY2UuaApAQCAtMjgsNiArMjgsMTUgQEAKICNkZWZpbmUgUDRTRUdfVExCX0RBVEEJMHhmNzAwMDAwMAogI2RlZmluZSBQNFNFR19SRUdfQkFTRQkweGZmMDAwMDAwCiAKKyNkZWZpbmUgUEFfQVJFQTAJMHgwMDAwMDAwMAorI2RlZmluZSBQQV9BUkVBMQkweDA0MDAwMDAwCisjZGVmaW5lIFBBX0FSRUEyCTB4MDgwMDAwMDAKKyNkZWZpbmUgUEFfQVJFQTMJMHgwYzAwMDAwMAorI2RlZmluZSBQQV9BUkVBNAkweDEwMDAwMDAwCisjZGVmaW5lIFBBX0FSRUE1CTB4MTQwMDAwMDAKKyNkZWZpbmUgUEFfQVJFQTYJMHgxODAwMDAwMAorI2RlZmluZSBQQV9BUkVBNwkweDFjMDAwMDAwCisKICNkZWZpbmUgUEFfQVJFQTVfSU8JMHhiNDAwMDAwMAkvKiBBcmVhIDUgSU8gTWVtb3J5ICovCiAjZGVmaW5lIFBBX0FSRUE2X0lPCTB4YjgwMDAwMDAJLyogQXJlYSA2IElPIE1lbW9yeSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oCmluZGV4IGM0ZWQ2NjAuLmU3MzRlYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oCkBAIC0yLDIyICsyLDM4IEBACiAjZGVmaW5lIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9ICiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMpIHx8IFwKLQlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MzApCiAjZGVmaW5lIERNVEUwX0lSUQk0OAogI2RlZmluZSBETVRFNF9JUlEJNzYKICNkZWZpbmUgRE1BRTBfSVJRCTc4CS8qIERNQSBFcnJvciBJUlEqLwogI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkUwMDgwMjAKLSNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZFMDA5MDAwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UwCTB4RkUwMDkwMDAKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQorI2RlZmluZSBETVRFMF9JUlEJNDgKKyNkZWZpbmUgRE1URTRfSVJRCTc2CisjZGVmaW5lIERNQUUwX0lSUQk3OAkvKiBETUEgRXJyb3IgSVJRKi8KKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZFMDA4MDIwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UwCTB4RkUwMDkwMDAKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMHgwMDMwMDAwMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMjAKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykgfHwgXAogCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2NCkKICNkZWZpbmUgRE1URTBfSVJRCTM0CiAjZGVmaW5lIERNVEU0X0lSUQk0NAogI2RlZmluZSBETUFFMF9JUlEJMzgKICNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZGNjA4MDIwCi0jZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGRjYwOTAwMAotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQpCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UwCTB4RkY2MDkwMDAKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQogI2RlZmluZSBETVRFMF9JUlEJNDgJLyogRE1BQzBBKi8KICNkZWZpbmUgRE1URTRfSVJRCTc2CS8qIERNQUMwQiAqLwogI2RlZmluZSBETVRFNl9JUlEJNDAKQEAgLTI5LDcgKzQ1LDI5IEBACiAjZGVmaW5lIERNQUUxX0lSUQk3NAkvKiBETUEgRXJyb3IgSVJRKi8KICNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZFMDA4MDIwCiAjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhGREMwODAyMAotI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkRDMDkwMDAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRTAJMHhGREMwOTAwMAorI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4MDAwMDAwMTgKKyNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJMworI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkwCisjZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQpCisjZGVmaW5lIERNVEUwX0lSUQk0OAkvKiBETUFDMEEqLworI2RlZmluZSBETVRFNF9JUlEJNzYJLyogRE1BQzBCICovCisjZGVmaW5lIERNVEU2X0lSUQk0MAorI2RlZmluZSBETVRFOF9JUlEJNDIJLyogRE1BQzFBICovCisjZGVmaW5lIERNVEU5X0lSUQk0MworI2RlZmluZSBETVRFMTBfSVJRCTcyCS8qIERNQUMxQiAqLworI2RlZmluZSBETVRFMTFfSVJRCTczCisjZGVmaW5lIERNQUUwX0lSUQk3OAkvKiBETUEgRXJyb3IgSVJRKi8KKyNkZWZpbmUgRE1BRTFfSVJRCTc0CS8qIERNQSBFcnJvciBJUlEqLworI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkUwMDgwMjAKKyNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweEZEQzA4MDIwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UwCTB4RkUwMDkwMDAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRTEJMHhGREMwOTAwMAorI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4MDAwMDAwMTgKKyNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJMworI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkweDAwNjAwMDAwCisjZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkyMQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQogI2RlZmluZSBETVRFMF9JUlEJMzQKICNkZWZpbmUgRE1URTRfSVJRCTQ0CkBAIC00MSw3ICs3OSwxMSBAQAogI2RlZmluZSBETUFFMF9JUlEJMzgJLyogRE1BIEVycm9yIElSUSAqLwogI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkM4MDgwMjAKICNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweEZDODE4MDIwCi0jZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGQzgwOTAwMAorI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZDODA5MDAwCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKICNlbHNlIC8qIFNINzc4NSAqLwogI2RlZmluZSBETVRFMF9JUlEJMzMKICNkZWZpbmUgRE1URTRfSVJRCTM3CkBAIC01NCwxOCArOTYsMTcgQEAKICNkZWZpbmUgRE1BRTFfSVJRCTU4CS8qIERNQSBFcnJvciBJUlExICovCiAjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGQzgwODAyMAogI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4RkNDMDgwMjAKLSNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZDODA5MDAwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UwCTB4RkM4MDkwMDAKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAogI2VuZGlmCiAKLSNkZWZpbmUgUkVRX0hFCTB4MDAwMDAwQzAKLSNkZWZpbmUgUkVRX0gJMHgwMDAwMDA4MAotI2RlZmluZSBSRVFfTEUJMHgwMDAwMDA0MAotI2RlZmluZSBUTV9CVVJTVCAweDAwMDAwMjAKLSNkZWZpbmUgVFNfOAkweDAwMDAwMDAwCi0jZGVmaW5lIFRTXzE2CTB4MDAwMDAwMDgKLSNkZWZpbmUgVFNfMzIJMHgwMDAwMDAxMAotI2RlZmluZSBUU18xNkJMSwkweDAwMDAwMDE4Ci0jZGVmaW5lIFRTXzMyQkxLCTB4MDAxMDAwMDAKKyNkZWZpbmUgUkVRX0hFCQkweDAwMDAwMEMwCisjZGVmaW5lIFJFUV9ICQkweDAwMDAwMDgwCisjZGVmaW5lIFJFUV9MRQkJMHgwMDAwMDA0MAorI2RlZmluZSBUTV9CVVJTVAkweDAwMDAwMDIwCiAKIC8qCiAgKiBUaGUgU3VwZXJIIERNQUMgc3VwcG9ydHMgYSBudW1iZXIgb2YgdHJhbnNtaXQgc2l6ZXMsIHdlIGxpc3QgdGhlbSBoZXJlLApAQCAtNzQsMjIgKzExNSwzMSBAQAogICogRGVmYXVsdHMgdG8gYSA2NC1iaXQgdHJhbnNmZXIgc2l6ZS4KICAqLwogZW51bSB7Ci0JWE1JVF9TWl84QklULAotCVhNSVRfU1pfMTZCSVQsCi0JWE1JVF9TWl8zMkJJVCwKLQlYTUlUX1NaXzEyOEJJVCwKLQlYTUlUX1NaXzI1NkJJVCwKKwlYTUlUX1NaXzhCSVQJCT0gMCwKKwlYTUlUX1NaXzE2QklUCQk9IDEsCisJWE1JVF9TWl8zMkJJVAkJPSAyLAorCVhNSVRfU1pfNjRCSVQJCT0gNywKKwlYTUlUX1NaXzEyOEJJVAkJPSAzLAorCVhNSVRfU1pfMjU2QklUCQk9IDQsCisJWE1JVF9TWl8xMjhCSVRfQkxLCT0gMHhiLAorCVhNSVRfU1pfMjU2QklUX0JMSwk9IDB4YywKIH07CiAKIC8qCiAgKiBUaGUgRE1BIGNvdW50IGlzIGRlZmluZWQgYXMgdGhlIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2Zlci4KICAqLwotc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdIF9fbWF5YmVfdW51c2VkID0gewotCVtYTUlUX1NaXzhCSVRdCQk9IDAsCi0JW1hNSVRfU1pfMTZCSVRdCQk9IDEsCi0JW1hNSVRfU1pfMzJCSVRdCQk9IDIsCi0JW1hNSVRfU1pfMTI4QklUXQk9IDQsCi0JW1hNSVRfU1pfMjU2QklUXQk9IDUsCi19OworI2RlZmluZSBUU19TSElGVCB7CQkJXAorCVtYTUlUX1NaXzhCSVRdCQk9IDAsCVwKKwlbWE1JVF9TWl8xNkJJVF0JCT0gMSwJXAorCVtYTUlUX1NaXzMyQklUXQkJPSAyLAlcCisJW1hNSVRfU1pfNjRCSVRdCQk9IDMsCVwKKwlbWE1JVF9TWl8xMjhCSVRdCT0gNCwJXAorCVtYTUlUX1NaXzI1NkJJVF0JPSA1LAlcCisJW1hNSVRfU1pfMTI4QklUX0JMS10JPSA0LAlcCisJW1hNSVRfU1pfMjU2QklUX0JMS10JPSA1LAlcCit9CisKKyNkZWZpbmUgVFNfSU5ERVgyVkFMKGkpCSgoKChpKSAmIDMpIDw8IENIQ1JfVFNfTE9XX1NISUZUKSB8IFwKKwkJCSAoKCgoaSkgPj4gMikgJiAzKSA8PCBDSENSX1RTX0hJR0hfU0hJRlQpKQogCiAjZW5kaWYgLyogX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaAppbmRleCBiY2IzMDI0Li4xMTRhMzY5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS5oCkBAIC02LDggKzYsNiBAQAogI2lmZGVmIENPTkZJR19DUFVfU0g0QQogCiAjZGVmaW5lIERNQU9SX0lOSVQJKERNQU9SX0RNRSkKLSNkZWZpbmUgQ0hDUl9UU19NQVNLCTB4MTgKLSNkZWZpbmUgQ0hDUl9UU19TSElGVAkzCiAKICNpbmNsdWRlIDxjcHUvZG1hLXNoNGEuaD4KICNlbHNlIC8qIENPTkZJR19DUFVfU0g0QSAqLwpAQCAtMjksOCArMjcsMTAgQEAKICNkZWZpbmUgVFNfMzIJCTB4MDAwMDAwMzAKICNkZWZpbmUgVFNfNjQJCTB4MDAwMDAwMDAKIAotI2RlZmluZSBDSENSX1RTX01BU0sJMHg3MAotI2RlZmluZSBDSENSX1RTX1NISUZUCTQKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDcwCisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTQKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAogCiAjZGVmaW5lIERNQU9SX0NPRAkweDAwMDAwMDA4CiAKQEAgLTQxLDIzICs0MSwyNiBAQAogICogRGVmYXVsdHMgdG8gYSA2NC1iaXQgdHJhbnNmZXIgc2l6ZS4KICAqLwogZW51bSB7Ci0JWE1JVF9TWl82NEJJVCwKLQlYTUlUX1NaXzhCSVQsCi0JWE1JVF9TWl8xNkJJVCwKLQlYTUlUX1NaXzMyQklULAotCVhNSVRfU1pfMjU2QklULAorCVhNSVRfU1pfOEJJVAk9IDEsCisJWE1JVF9TWl8xNkJJVAk9IDIsCisJWE1JVF9TWl8zMkJJVAk9IDMsCisJWE1JVF9TWl82NEJJVAk9IDAsCisJWE1JVF9TWl8yNTZCSVQJPSA0LAogfTsKIAogLyoKICAqIFRoZSBETUEgY291bnQgaXMgZGVmaW5lZCBhcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHRzX3NoaWZ0W10gX19tYXliZV91bnVzZWQgPSB7Ci0JW1hNSVRfU1pfNjRCSVRdCQk9IDMsCi0JW1hNSVRfU1pfOEJJVF0JCT0gMCwKLQlbWE1JVF9TWl8xNkJJVF0JCT0gMSwKLQlbWE1JVF9TWl8zMkJJVF0JCT0gMiwKLQlbWE1JVF9TWl8yNTZCSVRdCT0gNSwKLX07CisjZGVmaW5lIFRTX1NISUZUIHsJCQlcCisJW1hNSVRfU1pfOEJJVF0JCT0gMCwJXAorCVtYTUlUX1NaXzE2QklUXQkJPSAxLAlcCisJW1hNSVRfU1pfMzJCSVRdCQk9IDIsCVwKKwlbWE1JVF9TWl82NEJJVF0JCT0gMywJXAorCVtYTUlUX1NaXzI1NkJJVF0JPSA1LAlcCit9CisKKyNkZWZpbmUgVFNfSU5ERVgyVkFMKGkpCSgoKGkpICYgNykgPDwgQ0hDUl9UU19MT1dfU0hJRlQpCisKICNlbmRpZgogCiAjZW5kaWYgLyogX19BU01fQ1BVX1NINF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L21tdV9jb250ZXh0LmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvbW11X2NvbnRleHQuaAppbmRleCAzY2U3ZWY2Li4wM2VhNzVjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvbW11X2NvbnRleHQuaApAQCAtMjUsNiArMjUsMTAgQEAKIAogI2RlZmluZSBNTVVDUl9USQkJKDE8PDIpCiAKKyNkZWZpbmUgTU1VQ1JfVVJCCQkweDAwRkMwMDAwCisjZGVmaW5lIE1NVUNSX1VSQl9TSElGVAkJMTgKKyNkZWZpbmUgTU1VQ1JfVVJCX05FTlRSSUVTCTY0CisKICNpZiBkZWZpbmVkKENPTkZJR18zMkJJVCkgJiYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MCkKICNkZWZpbmUgTU1VQ1JfU0UJCSgxIDw8IDQpCiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NxLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc3EuaAppbmRleCA1ODZkNjQ5Li43NDcxNmJhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc3EuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc3EuaApAQCAtMTIsNiArMTIsNyBAQAogI2RlZmluZSBfX0FTTV9DUFVfU0g0X1NRX0gKIAogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAvKgogICogU3RvcmUgcXVldWVzIHJhbmdlIGZyb20gZTAwMDAwMDAtZTNmZmZmZmMsIGFsbG93aW5nIGFwcHJveC4gNjRNQiB0byBiZQpAQCAtMjgsNyArMjksNyBAQAogCiAvKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMgKi8KIHVuc2lnbmVkIGxvbmcgc3FfcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgcGdwcm90X3QgcHJvdCk7CiB2b2lkIHNxX3VubWFwKHVuc2lnbmVkIGxvbmcgdmFkZHIpOwogdm9pZCBzcV9mbHVzaF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3ViYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3ViYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODZlMTcwLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS91YmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1zaC9jcHUtc2g0L3ViYy5oCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IE5paWJlIFl1dGFrYQotICogQ29weXJpZ2h0IChDKSAyMDAzIFBhdWwgTXVuZHQKLSAqIENvcHlyaWdodCAoQykgMjAwNiBMaW5lbyBTb2x1dGlvbnMgSW5jLiBzdXBwb3J0IFNINEEgVUJDCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpZm5kZWYgX19BU01fQ1BVX1NINF9VQkNfSAotI2RlZmluZSBfX0FTTV9DUFVfU0g0X1VCQ19ICi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKLSNkZWZpbmUgVUJDX0NCUjAJCTB4ZmYyMDAwMDAKLSNkZWZpbmUgVUJDX0NSUjAJCTB4ZmYyMDAwMDQKLSNkZWZpbmUgVUJDX0NBUjAJCTB4ZmYyMDAwMDgKLSNkZWZpbmUgVUJDX0NBTVIwCQkweGZmMjAwMDBjCi0jZGVmaW5lIFVCQ19DQlIxCQkweGZmMjAwMDIwCi0jZGVmaW5lIFVCQ19DUlIxCQkweGZmMjAwMDI0Ci0jZGVmaW5lIFVCQ19DQVIxCQkweGZmMjAwMDI4Ci0jZGVmaW5lIFVCQ19DQU1SMQkJMHhmZjIwMDAyYwotI2RlZmluZSBVQkNfQ0RSMQkJMHhmZjIwMDAzMAotI2RlZmluZSBVQkNfQ0RNUjEJCTB4ZmYyMDAwMzQKLSNkZWZpbmUgVUJDX0NFVFIxCQkweGZmMjAwMDM4Ci0jZGVmaW5lIFVCQ19DQ01GUgkJMHhmZjIwMDYwMAotI2RlZmluZSBVQkNfQ0JDUgkJMHhmZjIwMDYyMAotCi0vKiBDQlIJKi8KLSNkZWZpbmUgVUJDX0NCUl9BSUUJCSgweDAxPDwzMCkKLSNkZWZpbmUgVUJDX0NCUl9JRF9JTlNUCQkoMHgwMTw8NCkKLSNkZWZpbmUgVUJDX0NCUl9SV19SRUFECQkoMHgwMTw8MSkKLSNkZWZpbmUgVUJDX0NCUl9DRQkJKDB4MDEpCi0KLSNkZWZpbmUJVUJDX0NCUl9BSVZfTUFTSwkoMHgwMEZGMDAwMCkKLSNkZWZpbmUJVUJDX0NCUl9BSVZfU0hJRlQJKDE2KQotI2RlZmluZSBVQkNfQ0JSX0FJVl9TRVQoYXNpZCkJKCgoYXNpZCk8PFVCQ19DQlJfQUlWX1NISUZUKSAmIFVCQ19DQlJfQUlWX01BU0spCi0KLSNkZWZpbmUgVUJDX0NCUl9JTklUCQkweDIwMDAwMDAwCi0KLS8qIENSUgkqLwotI2RlZmluZSBVQkNfQ1JSX1JFUwkJKDB4MDE8PDEzKQotI2RlZmluZSBVQkNfQ1JSX1BDQgkJKDB4MDE8PDEpCi0jZGVmaW5lIFVCQ19DUlJfQklFCQkoMHgwMSkKLQotI2RlZmluZSBVQkNfQ1JSX0lOSVQJCTB4MDAwMDIwMDAKLQotI2Vsc2UJLyogQ09ORklHX0NQVV9TSDQgKi8KLSNkZWZpbmUgVUJDX0JBUkEJCTB4ZmYyMDAwMDAKLSNkZWZpbmUgVUJDX0JBTVJBCQkweGZmMjAwMDA0Ci0jZGVmaW5lIFVCQ19CQlJBCQkweGZmMjAwMDA4Ci0jZGVmaW5lIFVCQ19CQVNSQQkJMHhmZjAwMDAxNAotI2RlZmluZSBVQkNfQkFSQgkJMHhmZjIwMDAwYwotI2RlZmluZSBVQkNfQkFNUkIJCTB4ZmYyMDAwMTAKLSNkZWZpbmUgVUJDX0JCUkIJCTB4ZmYyMDAwMTQKLSNkZWZpbmUgVUJDX0JBU1JCCQkweGZmMDAwMDE4Ci0jZGVmaW5lIFVCQ19CRFJCCQkweGZmMjAwMDE4Ci0jZGVmaW5lIFVCQ19CRE1SQgkJMHhmZjIwMDAxYwotI2RlZmluZSBVQkNfQlJDUgkJMHhmZjIwMDAyMAotI2VuZGlmCS8qIENPTkZJR19DUFVfU0g0ICovCi0KLSNlbmRpZiAvKiBfX0FTTV9DUFVfU0g0X1VCQ19IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21hZ2ljcGFuZWxyMi5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbWFnaWNwYW5lbHIyLmgKaW5kZXggYzY0NGE3Ny4uMTgzYTJmNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbWFnaWNwYW5lbHIyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbWFnaWNwYW5lbHIyLmgKQEAgLTE5LDEyICsxOSwxMiBAQAogI2luY2x1ZGUgPGFzbS9pb19nZW5lcmljLmg+CiAKIAotI2RlZmluZSBTRVRCSVRTX09VVEIobWFzaywgcmVnKSAgIGN0cmxfb3V0YihjdHJsX2luYihyZWcpIHwgbWFzaywgcmVnKQotI2RlZmluZSBTRVRCSVRTX09VVFcobWFzaywgcmVnKSAgIGN0cmxfb3V0dyhjdHJsX2ludyhyZWcpIHwgbWFzaywgcmVnKQotI2RlZmluZSBTRVRCSVRTX09VVEwobWFzaywgcmVnKSAgIGN0cmxfb3V0bChjdHJsX2lubChyZWcpIHwgbWFzaywgcmVnKQotI2RlZmluZSBDTFJCSVRTX09VVEIobWFzaywgcmVnKSAgIGN0cmxfb3V0YihjdHJsX2luYihyZWcpICYgfm1hc2ssIHJlZykKLSNkZWZpbmUgQ0xSQklUU19PVVRXKG1hc2ssIHJlZykgICBjdHJsX291dHcoY3RybF9pbncocmVnKSAmIH5tYXNrLCByZWcpCi0jZGVmaW5lIENMUkJJVFNfT1VUTChtYXNrLCByZWcpICAgY3RybF9vdXRsKGN0cmxfaW5sKHJlZykgJiB+bWFzaywgcmVnKQorI2RlZmluZSBTRVRCSVRTX09VVEIobWFzaywgcmVnKSAgIF9fcmF3X3dyaXRlYihfX3Jhd19yZWFkYihyZWcpIHwgbWFzaywgcmVnKQorI2RlZmluZSBTRVRCSVRTX09VVFcobWFzaywgcmVnKSAgIF9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhyZWcpIHwgbWFzaywgcmVnKQorI2RlZmluZSBTRVRCSVRTX09VVEwobWFzaywgcmVnKSAgIF9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChyZWcpIHwgbWFzaywgcmVnKQorI2RlZmluZSBDTFJCSVRTX09VVEIobWFzaywgcmVnKSAgIF9fcmF3X3dyaXRlYihfX3Jhd19yZWFkYihyZWcpICYgfm1hc2ssIHJlZykKKyNkZWZpbmUgQ0xSQklUU19PVVRXKG1hc2ssIHJlZykgICBfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcocmVnKSAmIH5tYXNrLCByZWcpCisjZGVmaW5lIENMUkJJVFNfT1VUTChtYXNrLCByZWcpICAgX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHJlZykgJiB+bWFzaywgcmVnKQogCiAKICNkZWZpbmUgUEFfTEVEICAgICAgICAgIFBPUlRfUEFEUiAgICAgIC8qIExFRCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL21hY2gtZHJlYW1jYXN0L21hY2gvc3lzYXNpYy5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtZHJlYW1jYXN0L21hY2gvc3lzYXNpYy5oCmluZGV4IGYzMzQyNjYuLjU4ZjcxMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWRyZWFtY2FzdC9tYWNoL3N5c2FzaWMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1kcmVhbWNhc3QvbWFjaC9zeXNhc2ljLmgKQEAgLTM5LDUgKzM5LDEwIEBACiAKICNkZWZpbmUgSFdfRVZFTlRfSVJRX01BWCAoSFdfRVZFTlRfSVJRX0JBU0UgKyA5NSkKIAorLyogYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3QvaXJxLmMgKi8KK2V4dGVybiBpbnQgc3lzdGVtYXNpY19pcnFfZGVtdXgoaW50KTsKK2V4dGVybiB2b2lkIHN5c3RlbWFzaWNfaXJxX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBhaWNhX3RpbWVfaW5pdCh2b2lkKTsKKwogI2VuZGlmIC8qIF9fQVNNX1NIX0RSRUFNQ0FTVF9TWVNBU0lDX0ggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL21hY2gtc2RrNzc4Ni9tYWNoL2ZwZ2EuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLXNkazc3ODYvbWFjaC9mcGdhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEyMGQ2NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLXNkazc3ODYvbWFjaC9mcGdhLmgKQEAgLTAsMCArMSwxMTQgQEAKKyNpZm5kZWYgX19NQUNIX1NESzc3ODZfRlBHQV9ICisjZGVmaW5lIF9fTUFDSF9TREs3Nzg2X0ZQR0FfSAorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjZGVmaW5lIFNSU1RSCQkweDAwMAorI2RlZmluZSAgU1JTVFJfTUFHSUMJMHgxOTcxCS8qIEZpeGVkIG1hZ2ljYWwgcmVhZCB2YWx1ZSAqLworCisjZGVmaW5lIElOVEFTUgkJMHgwMTAKKyNkZWZpbmUgSU5UQU1SCQkweDAyMAorI2RlZmluZSBNT0RTV1IJCTB4MDMwCisjZGVmaW5lIElOVFRFU1RSCTB4MDQwCisjZGVmaW5lIFNZU1NSCQkweDA1MAorI2RlZmluZSBOUkdQUgkJMHgwNjAKKyNkZWZpbmUgTk1JU1IJCTB4MDcwCisKKyNkZWZpbmUgTk1JTVIJCTB4MDgwCisjZGVmaW5lICBOTUlNUl9NQU5fTk1JTQlCSVQoMCkJLyogTWFudWFsIE5NSSBtYXNrICovCisjZGVmaW5lICBOTUlNUl9BVVhfTk1JTQlCSVQoMSkJLyogQXV4aWxpYXJ5IE5NSSBtYXNrICovCisKKyNkZWZpbmUgSU5UQlNSCQkweDA5MAorI2RlZmluZSBJTlRCTVIJCTB4MGEwCisjZGVmaW5lIFVTUkxFRFIJCTB4MGIwCisjZGVmaW5lIE1BUFNXUgkJMHgwYzAKKyNkZWZpbmUgRlBHQVZSCQkweDBkMAorI2RlZmluZSBGUEdBRFIJCTB4MGUwCisjZGVmaW5lIFBDQlJSCQkweDBmMAorI2RlZmluZSBSU1IJCTB4MTAwCisjZGVmaW5lIEVYVEFTUgkJMHgxMTAKKyNkZWZpbmUgU1BDQVIJCTB4MTIwCisjZGVmaW5lIElOVE1TUgkJMHgxMzAKKyNkZWZpbmUgUENJRUNSCQkweDE0MAorI2RlZmluZSBGQUVSCQkweDE1MAorI2RlZmluZSBVU1JHUElSCQkweDE2MAorLyogMHgxNzAgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgTENMQVNSCQkweDE4MAorCisjZGVmaW5lIFNCQ1IJCTB4MTkwCisjZGVmaW5lICBTQ0JSX0kyQ01FTglCSVQoMCkJLyogRlBHQSBJMkMgbWFzdGVyIGVuYWJsZSAqLworI2RlZmluZSAgU0NCUl9JMkNDRU4JQklUKDEpCS8qIENQVSBJMkMgbWFzdGVyIGVuYWJsZSAqLworCisjZGVmaW5lIFBXUkNSCQkweDFhMAorI2RlZmluZSBTUENCUgkJMHgxYjAKKyNkZWZpbmUgU1BJQ1IJCTB4MWMwCisjZGVmaW5lIFNQSURSCQkweDFkMAorI2RlZmluZSBJMkNDUgkJMHgxZTAKKyNkZWZpbmUgSTJDRFIJCTB4MWYwCisjZGVmaW5lIEZQR0FDUgkJMHgyMDAKKyNkZWZpbmUgSUFTRUxSMQkJMHgyMTAKKyNkZWZpbmUgSUFTRUxSMgkJMHgyMjAKKyNkZWZpbmUgSUFTRUxSMwkJMHgyMzAKKyNkZWZpbmUgSUFTRUxSNAkJMHgyNDAKKyNkZWZpbmUgSUFTRUxSNQkJMHgyNTAKKyNkZWZpbmUgSUFTRUxSNgkJMHgyNjAKKyNkZWZpbmUgSUFTRUxSNwkJMHgyNzAKKyNkZWZpbmUgSUFTRUxSOAkJMHgyODAKKyNkZWZpbmUgSUFTRUxSOQkJMHgyOTAKKyNkZWZpbmUgSUFTRUxSMTAJMHgyYTAKKyNkZWZpbmUgSUFTRUxSMTEJMHgyYjAKKyNkZWZpbmUgSUFTRUxSMTIJMHgyYzAKKyNkZWZpbmUgSUFTRUxSMTMJMHgyZDAKKyNkZWZpbmUgSUFTRUxSMTQJMHgyZTAKKyNkZWZpbmUgSUFTRUxSMTUJMHgyZjAKKy8qIDB4MzAwIHJlc2VydmVkICovCisjZGVmaW5lIElCU0VMUjEJCTB4MzEwCisjZGVmaW5lIElCU0VMUjIJCTB4MzIwCisjZGVmaW5lIElCU0VMUjMJCTB4MzMwCisjZGVmaW5lIElCU0VMUjQJCTB4MzQwCisjZGVmaW5lIElCU0VMUjUJCTB4MzUwCisjZGVmaW5lIElCU0VMUjYJCTB4MzYwCisjZGVmaW5lIElCU0VMUjcJCTB4MzcwCisjZGVmaW5lIElCU0VMUjgJCTB4MzgwCisjZGVmaW5lIElCU0VMUjkJCTB4MzkwCisjZGVmaW5lIElCU0VMUjEwCTB4M2EwCisjZGVmaW5lIElCU0VMUjExCTB4M2IwCisjZGVmaW5lIElCU0VMUjEyCTB4M2MwCisjZGVmaW5lIElCU0VMUjEzCTB4M2QwCisjZGVmaW5lIElCU0VMUjE0CTB4M2UwCisjZGVmaW5lIElCU0VMUjE1CTB4M2YwCisjZGVmaW5lIFVTUkFDUgkJMHg0MDAKKyNkZWZpbmUgQkVFUFIJCTB4NDEwCisjZGVmaW5lIFVTUkxDRFIJCTB4NDIwCisjZGVmaW5lIFNNQkNSCQkweDQzMAorI2RlZmluZSBTTUJEUgkJMHg0NDAKKyNkZWZpbmUgVVNCQ1IJCTB4NDUwCisjZGVmaW5lIEFNU1IJCTB4NDYwCisjZGVmaW5lIEFDQ1IJCTB4NDcwCisjZGVmaW5lIFNESUZDUgkJMHg0ODAKKworLyogYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L2ZwZ2EuYyAqLworZXh0ZXJuIHZvaWQgX19pb21lbSAqc2RrNzc4Nl9mcGdhX2Jhc2U7CitleHRlcm4gdm9pZCBzZGs3Nzg2X2ZwZ2FfaW5pdCh2b2lkKTsKKworI2RlZmluZSBTREs3Nzg2X0ZQR0FfUkVHQUREUihyZWcpCShzZGs3Nzg2X2ZwZ2FfYmFzZSArIChyZWcpKQorCisvKgorICogQSBjb252ZW5pZW5jZSB3cmFwcGVyIGZyb20gcmVnaXN0ZXIgb2Zmc2V0IHRvIGludGVybmFsIEkyQyBhZGRyZXNzLAorICogd2hlbiB0aGUgRlBHQSBpcyBpbiBJMkMgc2xhdmUgbW9kZS4KKyAqLworI2RlZmluZSBTREs3Nzg2X0ZQR0FfSTJDQUREUihyZWcpCSgocmVnKSA+PiAzKQorCitzdGF0aWMgaW5saW5lIHUxNiBmcGdhX3JlYWRfcmVnKHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIGlvcmVhZDE2KHNkazc3ODZfZnBnYV9iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZwZ2Ffd3JpdGVfcmVnKHUxNiB2YWwsIHVuc2lnbmVkIGludCByZWcpCit7CisJaW93cml0ZTE2KHZhbCwgc2RrNzc4Nl9mcGdhX2Jhc2UgKyByZWcpOworfQorCisjZW5kaWYgLyogX19NQUNIX1NESzc3ODZfRlBHQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZGs3Nzg2L21hY2gvaXJxLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZGs3Nzg2L21hY2gvaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY1ODQ2MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLXNkazc3ODYvbWFjaC9pcnEuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19NQUNIX1NESzc3ODZfSVJRX0gKKyNkZWZpbmUgX19NQUNIX1NESzc3ODZfSVJRX0gKKworLyogYXJjaC9zaC9ib2FyZHMvbWFjaC1zZGs3Nzg2L2lycS5jICovCitleHRlcm4gdm9pZCBzZGs3Nzg2X2luaXRfaXJxKHZvaWQpOworCisjZW5kaWYgLyogX19NQUNIX1NESzc3ODZfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLXNlL21hY2gvc2U3MzQzLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1zZS9tYWNoL3NlNzM0My5oCmluZGV4IDc0OTkxNGIuLjhkODE3MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLXNlL21hY2gvc2U3MzQzLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtc2UvbWFjaC9zZTczNDMuaApAQCAtOTQsMjYgKzk0LDI2IEBACiAKICNkZWZpbmUgUE9SVF9EUlZDUgkweEE0MDUwMTgwCiAKLSNkZWZpbmUgUE9SVF9QQURSICAJMHhBNDA1MDEyMAotI2RlZmluZSBQT1JUX1BCRFIgIAkweEE0MDUwMTIyCi0jZGVmaW5lIFBPUlRfUENEUiAgCTB4QTQwNTAxMjQKLSNkZWZpbmUgUE9SVF9QRERSICAJMHhBNDA1MDEyNgotI2RlZmluZSBQT1JUX1BFRFIgIAkweEE0MDUwMTI4Ci0jZGVmaW5lIFBPUlRfUEZEUiAgCTB4QTQwNTAxMkEKLSNkZWZpbmUgUE9SVF9QR0RSICAJMHhBNDA1MDEyQwotI2RlZmluZSBQT1JUX1BIRFIgIAkweEE0MDUwMTJFCi0jZGVmaW5lIFBPUlRfUEpEUiAgCTB4QTQwNTAxMzAKLSNkZWZpbmUgUE9SVF9QS0RSICAJMHhBNDA1MDEzMgotI2RlZmluZSBQT1JUX1BMRFIgIAkweEE0MDUwMTM0Ci0jZGVmaW5lIFBPUlRfUE1EUiAgCTB4QTQwNTAxMzYKLSNkZWZpbmUgUE9SVF9QTkRSICAJMHhBNDA1MDEzOAotI2RlZmluZSBQT1JUX1BRRFIgIAkweEE0MDUwMTNBCi0jZGVmaW5lIFBPUlRfUFJEUiAgCTB4QTQwNTAxM0MKLSNkZWZpbmUgUE9SVF9QVERSICAJMHhBNDA1MDE2MAotI2RlZmluZSBQT1JUX1BVRFIgIAkweEE0MDUwMTYyCi0jZGVmaW5lIFBPUlRfUFZEUiAgCTB4QTQwNTAxNjQKLSNkZWZpbmUgUE9SVF9QV0RSICAJMHhBNDA1MDE2NgotI2RlZmluZSBQT1JUX1BZRFIgIAkweEE0MDUwMTY4CisjZGVmaW5lIFBPUlRfUEFEUgkweEE0MDUwMTIwCisjZGVmaW5lIFBPUlRfUEJEUgkweEE0MDUwMTIyCisjZGVmaW5lIFBPUlRfUENEUgkweEE0MDUwMTI0CisjZGVmaW5lIFBPUlRfUEREUgkweEE0MDUwMTI2CisjZGVmaW5lIFBPUlRfUEVEUgkweEE0MDUwMTI4CisjZGVmaW5lIFBPUlRfUEZEUgkweEE0MDUwMTJBCisjZGVmaW5lIFBPUlRfUEdEUgkweEE0MDUwMTJDCisjZGVmaW5lIFBPUlRfUEhEUgkweEE0MDUwMTJFCisjZGVmaW5lIFBPUlRfUEpEUgkweEE0MDUwMTMwCisjZGVmaW5lIFBPUlRfUEtEUgkweEE0MDUwMTMyCisjZGVmaW5lIFBPUlRfUExEUgkweEE0MDUwMTM0CisjZGVmaW5lIFBPUlRfUE1EUgkweEE0MDUwMTM2CisjZGVmaW5lIFBPUlRfUE5EUgkweEE0MDUwMTM4CisjZGVmaW5lIFBPUlRfUFFEUgkweEE0MDUwMTNBCisjZGVmaW5lIFBPUlRfUFJEUgkweEE0MDUwMTNDCisjZGVmaW5lIFBPUlRfUFREUgkweEE0MDUwMTYwCisjZGVmaW5lIFBPUlRfUFVEUgkweEE0MDUwMTYyCisjZGVmaW5lIFBPUlRfUFZEUgkweEE0MDUwMTY0CisjZGVmaW5lIFBPUlRfUFdEUgkweEE0MDUwMTY2CisjZGVmaW5lIFBPUlRfUFlEUgkweEE0MDUwMTY4CiAKICNkZWZpbmUgRlBHQV9JTgkJMHhiMTQwMDAwMAogI2RlZmluZSBGUEdBX09VVAkweGIxNDAwMDAyCkBAIC0xMzMsMTggKzEzMywxMCBAQAogI2RlZmluZSBTRTczNDNfRlBHQV9JUlFfVUFSVEIJMTEKIAogI2RlZmluZSBTRTczNDNfRlBHQV9JUlFfTlIJMTIKLSNkZWZpbmUgU0U3MzQzX0ZQR0FfSVJRX0JBU0UJMTIwCi0KLSNkZWZpbmUgTVJTSFBDX0lSUTMgICAgCShTRTczNDNfRlBHQV9JUlFfQkFTRSArIFNFNzM0M19GUEdBX0lSUV9NUlNIUEMzKQotI2RlZmluZSBNUlNIUENfSVJRMiAgICAJKFNFNzM0M19GUEdBX0lSUV9CQVNFICsgU0U3MzQzX0ZQR0FfSVJRX01SU0hQQzIpCi0jZGVmaW5lIE1SU0hQQ19JUlExICAgIAkoU0U3MzQzX0ZQR0FfSVJRX0JBU0UgKyBTRTczNDNfRlBHQV9JUlFfTVJTSFBDMSkKLSNkZWZpbmUgTVJTSFBDX0lSUTAgICAgCShTRTczNDNfRlBHQV9JUlFfQkFTRSArIFNFNzM0M19GUEdBX0lSUV9NUlNIUEMwKQotI2RlZmluZSBTTUNfSVJRCQkoU0U3MzQzX0ZQR0FfSVJRX0JBU0UgKyBTRTczNDNfRlBHQV9JUlFfU01DKQotI2RlZmluZSBVU0JfSVJRCQkoU0U3MzQzX0ZQR0FfSVJRX0JBU0UgKyBTRTczNDNfRlBHQV9JUlFfVVNCKQotI2RlZmluZSBVQVJUQV9JUlEJKFNFNzM0M19GUEdBX0lSUV9CQVNFICsgU0U3MzQzX0ZQR0FfSVJRX1VBUlRBKQotI2RlZmluZSBVQVJUQl9JUlEJKFNFNzM0M19GUEdBX0lSUV9CQVNFICsgU0U3MzQzX0ZQR0FfSVJRX1VBUlRCKQogCiAvKiBhcmNoL3NoL2JvYXJkcy9zZS83MzQzL2lycS5jICovCitleHRlcm4gdW5zaWduZWQgaW50IHNlNzM0M19mcGdhX2lycVtdOworCiB2b2lkIGluaXRfNzM0M3NlX0lSUSh2b2lkKTsKIAogI2VuZGlmICAvKiBfX0FTTV9TSF9ISVRBQ0hJX1NFNzM0M19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL01ha2VmaWxlCmluZGV4IDBkNTg3ZGEuLjAyZmQzYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL01ha2VmaWxlCkBAIC0xMyw4ICsxMyw5IEBACiAKIG9iai15CTo9IGRlYnVndHJhcHMubyBkbWEtbm9tbXUubyBkdW1wc3RhY2subyAJCQlcCiAJICAgaWRsZS5vIGlvLm8gaW9fZ2VuZXJpYy5vIGlycS5vCQkJCVwKLQkgICBpcnFfJChCSVRTKS5vIG1hY2h2ZWMubyBubWlfZGVidWcubyBwcm9jZXNzXyQoQklUUykubyAJXAotCSAgIHB0cmFjZV8kKEJJVFMpLm8gcmV0dXJuX2FkZHJlc3MubwkJCQlcCisJICAgaXJxXyQoQklUUykubyBtYWNodmVjLm8gbm1pX2RlYnVnLm8gcHJvY2Vzcy5vCQlcCisJICAgcHJvY2Vzc18kKEJJVFMpLm8gcHRyYWNlXyQoQklUUykubwkJCQlcCisJICAgcmVib290Lm8gcmV0dXJuX2FkZHJlc3MubwkJCQkJXAogCSAgIHNldHVwLm8gc2lnbmFsXyQoQklUUykubyBzeXNfc2gubyBzeXNfc2gkKEJJVFMpLm8JCVwKIAkgICBzeXNjYWxsc18kKEJJVFMpLm8gdGltZS5vIHRvcG9sb2d5Lm8gdHJhcHMubwkJCVwKIAkgICB0cmFwc18kKEJJVFMpLm8gdW53aW5kZXIubwpAQCAtMjIsNyArMjMsNyBAQAogb2JqLXkJCQkJKz0gY3B1Lwogb2JqLSQoQ09ORklHX1ZTWVNDQUxMKQkJKz0gdnN5c2NhbGwvCiBvYmotJChDT05GSUdfU01QKQkJKz0gc21wLm8KLW9iai0kKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKQkrPSBzaF9iaW9zLm8gZWFybHlfcHJpbnRrLm8KK29iai0kKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKQkrPSBzaF9iaW9zLm8KIG9iai0kKENPTkZJR19LR0RCKQkJKz0ga2dkYi5vCiBvYmotJChDT05GSUdfU0hfQ1BVX0ZSRVEpCSs9IGNwdWZyZXEubwogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBzaF9rc3ltc18kKEJJVFMpLm8gbW9kdWxlLm8KQEAgLTM5LDYgKzQwLDcgQEAKIG9iai0kKENPTkZJR19EV0FSRl9VTldJTkRFUikJKz0gZHdhcmYubwogb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKQkrPSBwZXJmX2V2ZW50Lm8gcGVyZl9jYWxsY2hhaW4ubwogCitvYmotJChDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UKQkJKz0gaHdfYnJlYWtwb2ludC5vCiBvYmotJChDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1QpCSs9IGxvY2FsdGltZXIubwogCiBFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlCmluZGV4IGQ5N2M4MDMuLjBlNDhiYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvTWFrZWZpbGUKQEAgLTE3LDUgKzE3LDcgQEAKIAogb2JqLSQoQ09ORklHX1NIX0FEQykJCSs9IGFkYy5vCiBvYmotJChDT05GSUdfU0hfQ0xLX0NQRykJKz0gY2xvY2stY3BnLm8KK29iai0kKENPTkZJR19TSF9GUFUpCQkrPSBmcHUubworb2JqLSQoQ09ORklHX1NIX0ZQVV9FTVUpCSs9IGZwdS5vCiAKIG9iai15CSs9IGlycS8gaW5pdC5vIGNsb2NrLm8gaHdibGsubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2FkYy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2FkYy5jCmluZGV4IGRhM2Q2ODcuLmQzMDc1NzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9hZGMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvYWRjLmMKQEAgLTE4LDE5ICsxOCwxOSBAQAogCiAJb2ZmID0gKGNoYW5uZWwgJiAweDAzKSA8PCAyOwogCi0JY3NyID0gY3RybF9pbmIoQURDU1IpOworCWNzciA9IF9fcmF3X3JlYWRiKEFEQ1NSKTsKIAljc3IgPSBjaGFubmVsIHwgQURDU1JfQURTVCB8IEFEQ1NSX0NLUzsKLQljdHJsX291dGIoY3NyLCBBRENTUik7CisJX19yYXdfd3JpdGViKGNzciwgQURDU1IpOwogCiAJZG8gewotCQljc3IgPSBjdHJsX2luYihBRENTUik7CisJCWNzciA9IF9fcmF3X3JlYWRiKEFEQ1NSKTsKIAl9IHdoaWxlICgoY3NyICYgQURDU1JfQURGKSA9PSAwKTsKIAogCWNzciAmPSB+KEFEQ1NSX0FERiB8IEFEQ1NSX0FEU1QpOwotCWN0cmxfb3V0Yihjc3IsIEFEQ1NSKTsKKwlfX3Jhd193cml0ZWIoY3NyLCBBRENTUik7CiAKLQlyZXR1cm4gKCgoY3RybF9pbmIoQUREUkFIICsgb2ZmKSA8PCA4KSB8Ci0JCWN0cmxfaW5iKEFERFJBTCArIG9mZikpID4+IDYpOworCXJldHVybiAoKChfX3Jhd19yZWFkYihBRERSQUggKyBvZmYpIDw8IDgpIHwKKwkJX19yYXdfcmVhZGIoQUREUkFMICsgb2ZmKSkgPj4gNik7CiB9CiAKIEVYUE9SVF9TWU1CT0woYWRjX3NpbmdsZSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2stY3BnLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2stY3BnLmMKaW5kZXggNmRmZTJjYy4uZWVkNWVhZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLWNwZy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay1jcGcuYwpAQCAtMTQ5LDcgKzE0OSw4IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNoX2Nsa19kaXY0X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0Jc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSAqdGFibGUgPSBjbGstPnByaXY7CisJc3RydWN0IGNsa19kaXY0X3RhYmxlICpkNHQgPSBjbGstPnByaXY7CisJc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSAqdGFibGUgPSBkNHQtPmRpdl9tdWx0X3RhYmxlOwogCXVuc2lnbmVkIGludCBpZHg7CiAKIAljbGtfcmF0ZV90YWJsZV9idWlsZChjbGssIGNsay0+ZnJlcV90YWJsZSwgdGFibGUtPm5yX2Rpdmlzb3JzLApAQCAtMTYwLDE3ICsxNjEsOTAgQEAKIAlyZXR1cm4gY2xrLT5mcmVxX3RhYmxlW2lkeF0uZnJlcXVlbmN5OwogfQogCitzdGF0aWMgaW50IHNoX2Nsa19kaXY0X3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJc3RydWN0IGNsa19kaXY0X3RhYmxlICpkNHQgPSBjbGstPnByaXY7CisJc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSAqdGFibGUgPSBkNHQtPmRpdl9tdWx0X3RhYmxlOworCXUzMiB2YWx1ZTsKKwlpbnQgcmV0OworCisJaWYgKCFzdHJjbXAoInBsbF9jbGsiLCBwYXJlbnQtPm5hbWUpKQorCQl2YWx1ZSA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZykgJiB+KDEgPDwgNyk7CisJZWxzZQorCQl2YWx1ZSA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZykgfCAoMSA8PCA3KTsKKworCXJldCA9IGNsa19yZXBhcmVudChjbGssIHBhcmVudCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlfX3Jhd193cml0ZWwodmFsdWUsIGNsay0+ZW5hYmxlX3JlZyk7CisKKwkvKiBSZWJpdWxkIHRoZSBmcmVxdWVuY3kgdGFibGUgKi8KKwljbGtfcmF0ZV90YWJsZV9idWlsZChjbGssIGNsay0+ZnJlcV90YWJsZSwgdGFibGUtPm5yX2Rpdmlzb3JzLAorCQkJICAgICB0YWJsZSwgJmNsay0+YXJjaF9mbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaF9jbGtfZGl2NF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSwgaW50IGFsZ29faWQpCit7CisJc3RydWN0IGNsa19kaXY0X3RhYmxlICpkNHQgPSBjbGstPnByaXY7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwlpbnQgaWR4ID0gY2xrX3JhdGVfdGFibGVfZmluZChjbGssIGNsay0+ZnJlcV90YWJsZSwgcmF0ZSk7CisJaWYgKGlkeCA8IDApCisJCXJldHVybiBpZHg7CisKKwl2YWx1ZSA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJdmFsdWUgJj0gfigweGYgPDwgY2xrLT5lbmFibGVfYml0KTsKKwl2YWx1ZSB8PSAoaWR4IDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJX19yYXdfd3JpdGVsKHZhbHVlLCBjbGstPmVuYWJsZV9yZWcpOworCisJaWYgKGQ0dC0+a2ljaykKKwkJZDR0LT5raWNrKGNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaF9jbGtfZGl2NF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpICYgfigxIDw8IDgpLCBjbGstPmVuYWJsZV9yZWcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaF9jbGtfZGl2NF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKSB8ICgxIDw8IDgpLCBjbGstPmVuYWJsZV9yZWcpOworfQorCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2hfY2xrX2RpdjRfY2xrX29wcyA9IHsKIAkucmVjYWxjCQk9IHNoX2Nsa19kaXY0X3JlY2FsYywKKwkuc2V0X3JhdGUJPSBzaF9jbGtfZGl2NF9zZXRfcmF0ZSwKIAkucm91bmRfcmF0ZQk9IHNoX2Nsa19kaXZfcm91bmRfcmF0ZSwKIH07CiAKLWludCBfX2luaXQgc2hfY2xrX2RpdjRfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAotCQkJCXN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgKnRhYmxlKQorc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoX2Nsa19kaXY0X2VuYWJsZV9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gc2hfY2xrX2RpdjRfcmVjYWxjLAorCS5zZXRfcmF0ZQk9IHNoX2Nsa19kaXY0X3NldF9yYXRlLAorCS5yb3VuZF9yYXRlCT0gc2hfY2xrX2Rpdl9yb3VuZF9yYXRlLAorCS5lbmFibGUJCT0gc2hfY2xrX2RpdjRfZW5hYmxlLAorCS5kaXNhYmxlCT0gc2hfY2xrX2RpdjRfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaF9jbGtfZGl2NF9yZXBhcmVudF9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gc2hfY2xrX2RpdjRfcmVjYWxjLAorCS5zZXRfcmF0ZQk9IHNoX2Nsa19kaXY0X3NldF9yYXRlLAorCS5yb3VuZF9yYXRlCT0gc2hfY2xrX2Rpdl9yb3VuZF9yYXRlLAorCS5lbmFibGUJCT0gc2hfY2xrX2RpdjRfZW5hYmxlLAorCS5kaXNhYmxlCT0gc2hfY2xrX2RpdjRfZGlzYWJsZSwKKwkuc2V0X3BhcmVudAk9IHNoX2Nsa19kaXY0X3NldF9wYXJlbnQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaF9jbGtfZGl2NF9yZWdpc3Rlcl9vcHMoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAorCQkJc3RydWN0IGNsa19kaXY0X3RhYmxlICp0YWJsZSwgc3RydWN0IGNsa19vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgY2xrICpjbGtwOwogCXZvaWQgKmZyZXFfdGFibGU7Ci0JaW50IG5yX2RpdnMgPSB0YWJsZS0+bnJfZGl2aXNvcnM7CisJaW50IG5yX2RpdnMgPSB0YWJsZS0+ZGl2X211bHRfdGFibGUtPm5yX2Rpdmlzb3JzOwogCWludCBmcmVxX3RhYmxlX3NpemUgPSBzaXplb2Yoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlKTsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgazsKQEAgLTE4NSw3ICsyNTksNyBAQAogCWZvciAoayA9IDA7ICFyZXQgJiYgKGsgPCBucik7IGsrKykgewogCQljbGtwID0gY2xrcyArIGs7CiAKLQkJY2xrcC0+b3BzID0gJnNoX2Nsa19kaXY0X2Nsa19vcHM7CisJCWNsa3AtPm9wcyA9IG9wczsKIAkJY2xrcC0+aWQgPSAtMTsKIAkJY2xrcC0+cHJpdiA9IHRhYmxlOwogCkBAIC0xOTgsNiArMjcyLDI2IEBACiAJcmV0dXJuIHJldDsKIH0KIAoraW50IF9faW5pdCBzaF9jbGtfZGl2NF9yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGtzLCBpbnQgbnIsCisJCQkJc3RydWN0IGNsa19kaXY0X3RhYmxlICp0YWJsZSkKK3sKKwlyZXR1cm4gc2hfY2xrX2RpdjRfcmVnaXN0ZXJfb3BzKGNsa3MsIG5yLCB0YWJsZSwgJnNoX2Nsa19kaXY0X2Nsa19vcHMpOworfQorCitpbnQgX19pbml0IHNoX2Nsa19kaXY0X2VuYWJsZV9yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGtzLCBpbnQgbnIsCisJCQkJc3RydWN0IGNsa19kaXY0X3RhYmxlICp0YWJsZSkKK3sKKwlyZXR1cm4gc2hfY2xrX2RpdjRfcmVnaXN0ZXJfb3BzKGNsa3MsIG5yLCB0YWJsZSwKKwkJCQkJJnNoX2Nsa19kaXY0X2VuYWJsZV9jbGtfb3BzKTsKK30KKworaW50IF9faW5pdCBzaF9jbGtfZGl2NF9yZXBhcmVudF9yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGtzLCBpbnQgbnIsCisJCQkJc3RydWN0IGNsa19kaXY0X3RhYmxlICp0YWJsZSkKK3sKKwlyZXR1cm4gc2hfY2xrX2RpdjRfcmVnaXN0ZXJfb3BzKGNsa3MsIG5yLCB0YWJsZSwKKwkJCQkJJnNoX2Nsa19kaXY0X3JlcGFyZW50X2Nsa19vcHMpOworfQorCiAjaWZkZWYgQ09ORklHX1NIX0NMS19DUEdfTEVHQUNZCiBzdGF0aWMgc3RydWN0IGNsayBtYXN0ZXJfY2xrID0gewogCS5uYW1lCQk9ICJtYXN0ZXJfY2xrIiwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9mcHUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9mcHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDU5ZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2ZwdS5jCkBAIC0wLDAgKzEsODQgQEAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vZnB1Lmg+CisKK2ludCBpbml0X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAodHNrX3VzZWRfbWF0aCh0c2spKSB7CisJCWlmICgoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSAmJiB0c2sgPT0gY3VycmVudCkKKwkJCXVubGF6eV9mcHUodHNrLCB0YXNrX3B0X3JlZ3ModHNrKSk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogTWVtb3J5IGFsbG9jYXRpb24gYXQgdGhlIGZpcnN0IHVzYWdlIG9mIHRoZSBGUFUgYW5kIG90aGVyIHN0YXRlLgorCSAqLworCWlmICghdHNrLT50aHJlYWQueHN0YXRlKSB7CisJCXRzay0+dGhyZWFkLnhzdGF0ZSA9IGttZW1fY2FjaGVfYWxsb2ModGFza194c3RhdGVfY2FjaGVwLAorCQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghdHNrLT50aHJlYWQueHN0YXRlKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkgeworCQlzdHJ1Y3Qgc2hfZnB1X2hhcmRfc3RydWN0ICpmcCA9ICZ0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHU7CisJCW1lbXNldChmcCwgMCwgeHN0YXRlX3NpemUpOworCQlmcC0+ZnBzY3IgPSBGUFNDUl9JTklUOworCX0gZWxzZSB7CisJCXN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKmZwID0gJnRzay0+dGhyZWFkLnhzdGF0ZS0+c29mdGZwdTsKKwkJbWVtc2V0KGZwLCAwLCB4c3RhdGVfc2l6ZSk7CisJCWZwLT5mcHNjciA9IEZQU0NSX0lOSVQ7CisJfQorCisJc2V0X3N0b3BwZWRfY2hpbGRfdXNlZF9tYXRoKHRzayk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfU0hfRlBVCit2b2lkIF9fZnB1X3N0YXRlX3Jlc3RvcmUodm9pZCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisKKwlyZXN0b3JlX2ZwdSh0c2spOworCisJdGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgfD0gVFNfVVNFREZQVTsKKwl0c2stPmZwdV9jb3VudGVyKys7Cit9CisKK3ZvaWQgZnB1X3N0YXRlX3Jlc3RvcmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCisJaWYgKHVubGlrZWx5KCF1c2VyX21vZGUocmVncykpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQlVHOiBGUFUgaXMgdXNlZCBpbiBrZXJuZWwgbW9kZS5cbiIpOworCQlCVUcoKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghdHNrX3VzZWRfbWF0aCh0c2spKSB7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJLyoKKwkJICogZG9lcyBhIHNsYWIgYWxsb2Mgd2hpY2ggY2FuIHNsZWVwCisJCSAqLworCQlpZiAoaW5pdF9mcHUodHNrKSkgeworCQkJLyoKKwkJCSAqIHJhbiBvdXQgb2YgbWVtb3J5IQorCQkJICovCisJCQlkb19ncm91cF9leGl0KFNJR0tJTEwpOworCQkJcmV0dXJuOworCQl9CisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJfQorCisJZ3JhYl9mcHUocmVncyk7CisKKwlfX2ZwdV9zdGF0ZV9yZXN0b3JlKCk7Cit9CisKK0JVSUxEX1RSQVBfSEFORExFUihmcHVfc3RhdGVfcmVzdG9yZSkKK3sKKwlUUkFQX0hBTkRMRVJfREVDTDsKKworCWZwdV9zdGF0ZV9yZXN0b3JlKHJlZ3MpOworfQorI2VuZGlmIC8qIENPTkZJR19TSF9GUFUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pbml0LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaW5pdC5jCmluZGV4IDg5YjRiNzYuLmM3MzY0MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pbml0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2luaXQuYwpAQCAtMjQsMjIgKzI0LDMyIEBACiAjaW5jbHVkZSA8YXNtL2VsZi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpZmRlZiBDT05GSUdfU1VQRVJIMzIKLSNpbmNsdWRlIDxhc20vdWJjLmg+CisjaW5jbHVkZSA8YXNtL3NoX2Jpb3MuaD4KKworI2lmZGVmIENPTkZJR19TSF9GUFUKKyNkZWZpbmUgY3B1X2hhc19mcHUJMQorI2Vsc2UKKyNkZWZpbmUgY3B1X2hhc19mcHUJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0hfRFNQCisjZGVmaW5lIGNwdV9oYXNfZHNwCTEKKyNlbHNlCisjZGVmaW5lIGNwdV9oYXNfZHNwCTAKICNlbmRpZgogCiAvKgogICogR2VuZXJpYyB3cmFwcGVyIGZvciBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIGRpc2FibGUgb24tY2hpcAogICogcGVyaXBoZXJhbHMgKG5vZnB1LCBub2RzcCwgYW5kIHNvIGZvcnRoKS4KICAqLwotI2RlZmluZSBvbmNoaXBfc2V0dXAoeCkJCQkJXAotc3RhdGljIGludCB4IyNfZGlzYWJsZWQgX19pbml0ZGF0YSA9IDA7CQlcCi0JCQkJCQlcCi1zdGF0aWMgaW50IF9faW5pdCB4IyNfc2V0dXAoY2hhciAqb3B0cykJCVwKLXsJCQkJCQlcCi0JeCMjX2Rpc2FibGVkID0gMTsJCQlcCi0JcmV0dXJuIDE7CQkJCVwKLX0JCQkJCQlcCisjZGVmaW5lIG9uY2hpcF9zZXR1cCh4KQkJCQkJXAorc3RhdGljIGludCB4IyNfZGlzYWJsZWQgX19pbml0ZGF0YSA9ICFjcHVfaGFzXyMjeDsJXAorCQkJCQkJCVwKK3N0YXRpYyBpbnQgX19pbml0IHgjI19zZXR1cChjaGFyICpvcHRzKQkJCVwKK3sJCQkJCQkJXAorCXgjI19kaXNhYmxlZCA9IDE7CQkJCVwKKwlyZXR1cm4gMTsJCQkJCVwKK30JCQkJCQkJXAogX19zZXR1cCgibm8iIF9fc3RyaW5naWZ5KHgpLCB4IyNfc2V0dXApOwogCiBvbmNoaXBfc2V0dXAoZnB1KTsKQEAgLTUyLDEwICs2MiwxMCBAQAogc3RhdGljIHZvaWQgX19pbml0IHNwZWN1bGF0aXZlX2V4ZWN1dGlvbl9pbml0KHZvaWQpCiB7CiAJLyogQ2xlYXIgUkFCRCAqLwotCWN0cmxfb3V0bChjdHJsX2lubChDUFVPUE0pICYgfkNQVU9QTV9SQUJELCBDUFVPUE0pOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChDUFVPUE0pICYgfkNQVU9QTV9SQUJELCBDUFVPUE0pOwogCiAJLyogRmx1c2ggdGhlIHVwZGF0ZSAqLwotCSh2b2lkKWN0cmxfaW5sKENQVU9QTSk7CisJKHZvaWQpX19yYXdfcmVhZGwoQ1BVT1BNKTsKIAljdHJsX2JhcnJpZXIoKTsKIH0KICNlbHNlCkBAIC04OSw3ICs5OSw3IEBACiAjZW5kaWYKIAogLyogMm5kLWxldmVsIGNhY2hlIGluaXQgKi8KLXZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKSBsMl9jYWNoZV9pbml0KHZvaWQpCit2b2lkIF9fYXR0cmlidXRlX18gKCh3ZWFrKSkgbDJfY2FjaGVfaW5pdCh2b2lkKQogewogfQogCkBAIC05NywxMiArMTA3LDEyIEBACiAgKiBHZW5lcmljIGZpcnN0LWxldmVsIGNhY2hlIGluaXQKICAqLwogI2lmZGVmIENPTkZJR19TVVBFUkgzMgotc3RhdGljIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgY2FjaGVfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgY2FjaGVfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgY2NyLCBmbGFnczsKIAogCWp1bXBfdG9fdW5jYWNoZWQoKTsKLQljY3IgPSBjdHJsX2lubChDQ1IpOworCWNjciA9IF9fcmF3X3JlYWRsKENDUik7CiAKIAkvKgogCSAqIEF0IHRoaXMgcG9pbnQgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSBjYWNoZSBpcyBlbmFibGVkIG9yIG5vdCAtIGEKQEAgLTE0Niw3ICsxNTYsNyBAQAogCQkJZm9yIChhZGRyID0gYWRkcnN0YXJ0OwogCQkJICAgICBhZGRyIDwgYWRkcnN0YXJ0ICsgd2F5c2l6ZTsKIAkJCSAgICAgYWRkciArPSBjdXJyZW50X2NwdV9kYXRhLmRjYWNoZS5saW5lc3opCi0JCQkJY3RybF9vdXRsKDAsIGFkZHIpOworCQkJCV9fcmF3X3dyaXRlbCgwLCBhZGRyKTsKIAogCQkJYWRkcnN0YXJ0ICs9IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLndheV9pbmNyOwogCQl9IHdoaWxlICgtLXdheXMpOwpAQCAtMTc5LDcgKzE4OSw3IEBACiAKIAlsMl9jYWNoZV9pbml0KCk7CiAKLQljdHJsX291dGwoZmxhZ3MsIENDUik7CisJX19yYXdfd3JpdGVsKGZsYWdzLCBDQ1IpOwogCWJhY2tfdG9fY2FjaGVkKCk7CiB9CiAjZWxzZQpAQCAtMjA3LDYgKzIxNywxOCBAQAogCQlsMl9jYWNoZV9zaGFwZSA9IC0xOyAvKiBObyBTLWNhY2hlICovCiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBmcHVfaW5pdCh2b2lkKQoreworCS8qIERpc2FibGUgdGhlIEZQVSAqLworCWlmIChmcHVfZGlzYWJsZWQgJiYgKGN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpIHsKKwkJcHJpbnRrKCJGUFUgRGlzYWJsZWRcbiIpOworCQljdXJyZW50X2NwdV9kYXRhLmZsYWdzICY9IH5DUFVfSEFTX0ZQVTsKKwl9CisKKwlkaXNhYmxlX2ZwdSgpOworCWNsZWFyX3VzZWRfbWF0aCgpOworfQorCiAjaWZkZWYgQ09ORklHX1NIX0RTUAogc3RhdGljIHZvaWQgX19pbml0IHJlbGVhc2VfZHNwKHZvaWQpCiB7CkBAIC0yNDQsMjggKzI2NiwzNSBAQAogCWlmIChzciAmIFNSX0RTUCkKIAkJY3VycmVudF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX0RTUDsKIAorCS8qIERpc2FibGUgdGhlIERTUCAqLworCWlmIChkc3BfZGlzYWJsZWQgJiYgKGN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0RTUCkpIHsKKwkJcHJpbnRrKCJEU1AgRGlzYWJsZWRcbiIpOworCQljdXJyZW50X2NwdV9kYXRhLmZsYWdzICY9IH5DUFVfSEFTX0RTUDsKKwl9CisKIAkvKiBOb3cgdGhhdCB3ZSd2ZSBkZXRlcm1pbmVkIHRoZSBEU1Agc3RhdHVzLCBjbGVhciB0aGUgRFNQIGJpdC4gKi8KIAlyZWxlYXNlX2RzcCgpOwogfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgZHNwX2luaXQodm9pZCkgeyB9CiAjZW5kaWYgLyogQ09ORklHX1NIX0RTUCAqLwogCiAvKioKICAqIHNoX2NwdV9pbml0CiAgKgotICogVGhpcyBpcyBvdXIgaW5pdGlhbCBlbnRyeSBwb2ludCBmb3IgZWFjaCBDUFUsIGFuZCBpcyBpbnZva2VkIG9uIHRoZSBib290Ci0gKiBDUFUgcHJpb3IgdG8gY2FsbGluZyBzdGFydF9rZXJuZWwoKS4gRm9yIFNNUCwgYSBjb21iaW5hdGlvbiBvZiB0aGlzIGFuZAotICogc3RhcnRfc2Vjb25kYXJ5KCkgd2lsbCBicmluZyB1cCBlYWNoIHByb2Nlc3NvciB0byBhIHJlYWR5IHN0YXRlIHByaW9yCi0gKiB0byBoYW5kIGZvcmtpbmcgdGhlIGlkbGUgbG9vcC4KKyAqIFRoaXMgaXMgb3VyIGluaXRpYWwgZW50cnkgcG9pbnQgZm9yIGVhY2ggQ1BVLCBhbmQgaXMgaW52b2tlZCBvbiB0aGUKKyAqIGJvb3QgQ1BVIHByaW9yIHRvIGNhbGxpbmcgc3RhcnRfa2VybmVsKCkuIEZvciBTTVAsIGEgY29tYmluYXRpb24gb2YKKyAqIHRoaXMgYW5kIHN0YXJ0X3NlY29uZGFyeSgpIHdpbGwgYnJpbmcgdXAgZWFjaCBwcm9jZXNzb3IgdG8gYSByZWFkeQorICogc3RhdGUgcHJpb3IgdG8gaGFuZCBmb3JraW5nIHRoZSBpZGxlIGxvb3AuCiAgKgotICogV2UgZG8gYWxsIG9mIHRoZSBiYXNpYyBwcm9jZXNzb3IgaW5pdCBoZXJlLCBpbmNsdWRpbmcgc2V0dGluZyB1cCB0aGUKLSAqIGNhY2hlcywgRlBVLCBEU1AsIGtpY2tpbmcgdGhlIFVCQywgZXRjLiBCeSB0aGUgdGltZSBzdGFydF9rZXJuZWwoKSBpcwotICogaGl0IChhbmQgc3Vic2VxdWVudGx5IHBsYXRmb3JtX3NldHVwKCkpIHRoaW5ncyBsaWtlIGRldGVybWluaW5nIHRoZQotICogQ1BVIHN1YnR5cGUgYW5kIGluaXRpYWwgY29uZmlndXJhdGlvbiB3aWxsIGFsbCBiZSBkb25lLgorICogV2UgZG8gYWxsIG9mIHRoZSBiYXNpYyBwcm9jZXNzb3IgaW5pdCBoZXJlLCBpbmNsdWRpbmcgc2V0dGluZyB1cAorICogdGhlIGNhY2hlcywgRlBVLCBEU1AsIGV0Yy4gQnkgdGhlIHRpbWUgc3RhcnRfa2VybmVsKCkgaXMgaGl0IChhbmQKKyAqIHN1YnNlcXVlbnRseSBwbGF0Zm9ybV9zZXR1cCgpKSB0aGluZ3MgbGlrZSBkZXRlcm1pbmluZyB0aGUgQ1BVCisgKiBzdWJ0eXBlIGFuZCBpbml0aWFsIGNvbmZpZ3VyYXRpb24gd2lsbCBhbGwgYmUgZG9uZS4KICAqCiAgKiBFYWNoIHByb2Nlc3NvciBmYW1pbHkgaXMgc3RpbGwgcmVzcG9uc2libGUgZm9yIGRvaW5nIGl0cyBvd24gcHJvYmluZwogICogYW5kIGNhY2hlIGNvbmZpZ3VyYXRpb24gaW4gZGV0ZWN0X2NwdV9hbmRfY2FjaGVfc3lzdGVtKCkuCiAgKi8KLQogYXNtbGlua2FnZSB2b2lkIF9faW5pdCBzaF9jcHVfaW5pdCh2b2lkKQogewogCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC0zMDIsMTggKzMzMSw4IEBACiAJCWRldGVjdF9jYWNoZV9zaGFwZSgpOwogCX0KIAotCS8qIERpc2FibGUgdGhlIEZQVSAqLwotCWlmIChmcHVfZGlzYWJsZWQpIHsKLQkJcHJpbnRrKCJGUFUgRGlzYWJsZWRcbiIpOwotCQljdXJyZW50X2NwdV9kYXRhLmZsYWdzICY9IH5DUFVfSEFTX0ZQVTsKLQl9Ci0KLQkvKiBGUFUgaW5pdGlhbGl6YXRpb24gKi8KLQlkaXNhYmxlX2ZwdSgpOwotCWlmICgoY3VycmVudF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkgewotCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyAmPSB+VFNfVVNFREZQVTsKLQkJY2xlYXJfdXNlZF9tYXRoKCk7Ci0JfQorCWZwdV9pbml0KCk7CisJZHNwX2luaXQoKTsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgcGVyLUNQVSBBU0lEIGNhY2hlIHZlcnkgZWFybHksIHNpbmNlIHRoZQpAQCAtMzIxLDE4ICszNDAsMjQgQEAKIAkgKi8KIAljdXJyZW50X2NwdV9kYXRhLmFzaWRfY2FjaGUgPSBOT19DT05URVhUOwogCi0jaWZkZWYgQ09ORklHX1NIX0RTUAotCS8qIFByb2JlIGZvciBEU1AgKi8KLQlkc3BfaW5pdCgpOwotCi0JLyogRGlzYWJsZSB0aGUgRFNQICovCi0JaWYgKGRzcF9kaXNhYmxlZCkgewotCQlwcmludGsoIkRTUCBEaXNhYmxlZFxuIik7Ci0JCWN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJj0gfkNQVV9IQVNfRFNQOwotCQlyZWxlYXNlX2RzcCgpOwotCX0KLSNlbmRpZgotCiAJc3BlY3VsYXRpdmVfZXhlY3V0aW9uX2luaXQoKTsKIAlleHBtYXNrX2luaXQoKTsKKworCS8qIERvIHRoZSByZXN0IG9mIHRoZSBib290IHByb2Nlc3NvciBzZXR1cCAqLworCWlmIChyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpID09IDApIHsKKwkJLyogU2F2ZSBvZmYgdGhlIEJJT1MgVkJSLCBpZiB0aGVyZSBpcyBvbmUgKi8KKwkJc2hfYmlvc192YnJfaW5pdCgpOworCisJCS8qCisJCSAqIFNldHVwIFZCUiBmb3IgYm9vdCBDUFUuIFNlY29uZGFyeSBDUFVzIGRvIHRoaXMgdGhyb3VnaAorCQkgKiBzdGFydF9zZWNvbmRhcnkoKS4KKwkJICovCisJCXBlcl9jcHVfdHJhcF9pbml0KCk7CisKKwkJLyoKKwkJICogQm9vdCBwcm9jZXNzb3IgdG8gc2V0dXAgdGhlIEZQIGFuZCBleHRlbmRlZCBzdGF0ZQorCQkgKiBjb250ZXh0IGluZm8uCisJCSAqLworCQlpbml0X3RocmVhZF94c3RhdGUoKTsKKwl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMtc2g1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMtc2g1LmMKaW5kZXggMDZlN2UyOS4uOTZhMjM5NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjLXNoNS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy1zaDUuYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJCWJpdG1hc2sgPSAxIDw8IChpcnEgLSAzMik7CiAJfQogCi0JY3RybF9vdXRsKGJpdG1hc2ssIHJlZyk7CisJX19yYXdfd3JpdGVsKGJpdG1hc2ssIHJlZyk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpc2FibGVfaW50Y19pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTEzOSw3ICsxMzksNyBAQAogCQliaXRtYXNrID0gMSA8PCAoaXJxIC0gMzIpOwogCX0KIAotCWN0cmxfb3V0bChiaXRtYXNrLCByZWcpOworCV9fcmF3X3dyaXRlbChiaXRtYXNrLCByZWcpOwogfQogCiBzdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfaW50Yyh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMTcwLDExICsxNzAsMTEgQEAKIAogCiAJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBhbmQgc2V0IGFsbCBwcmlvcml0aWVzIHRvIDAgdG8gYXZvaWQgdHJvdWJsZSAqLwotCWN0cmxfb3V0bCgtMSwgSU5UQ19JTlREU0JfMCk7Ci0JY3RybF9vdXRsKC0xLCBJTlRDX0lOVERTQl8xKTsKKwlfX3Jhd193cml0ZWwoLTEsIElOVENfSU5URFNCXzApOworCV9fcmF3X3dyaXRlbCgtMSwgSU5UQ19JTlREU0JfMSk7CiAKIAlmb3IgKHJlZyA9IElOVENfSU5UUFJJXzAsIGkgPSAwOyBpIDwgSU5UQ19JTlRQUklfUFJFR1M7IGkrKywgcmVnICs9IDgpCi0JCWN0cmxfb3V0bCggTk9fUFJJT1JJVFksIHJlZyk7CisJCV9fcmF3X3dyaXRlbCggTk9fUFJJT1JJVFksIHJlZyk7CiAKIAogI2lmZGVmIENPTkZJR19TSF9DQVlNQU4KQEAgLTE5OSw3ICsxOTksNyBAQAogCQkJcmVnID0gSU5UQ19JQ1JfU0VUOwogCQkJaSA9IElSUV9JUkwwOwogCQl9Ci0JCWN0cmxfb3V0bChJTlRDX0lDUl9JUkxNLCByZWcpOworCQlfX3Jhd193cml0ZWwoSU5UQ19JQ1JfSVJMTSwgcmVnKTsKIAogCQkvKiBTZXQgaW50ZXJydXB0IHByaW9yaXRpZXMgYWNjb3JkaW5nIHRvIHBsYXRmb3JtIGRlc2NyaXB0aW9uICovCiAJCWZvciAoZGF0YSA9IDAsIHJlZyA9IElOVENfSU5UUFJJXzA7IGkgPCBOUl9JTlRDX0lSUVM7IGkrKykgewpAQCAtMjA3LDcgKzIwNyw3IEBACiAJCQkJKChpICUgSU5UQ19JTlRQUklfUFBSRUcpICogNCk7CiAJCQlpZiAoKGkgJSBJTlRDX0lOVFBSSV9QUFJFRykgPT0gKElOVENfSU5UUFJJX1BQUkVHIC0gMSkpIHsKIAkJCQkvKiBVcG9uIHRoZSA3dGgsIHNldCBQcmlvcml0eSBSZWdpc3RlciAqLwotCQkJCWN0cmxfb3V0bChkYXRhLCByZWcpOworCQkJCV9fcmF3X3dyaXRlbChkYXRhLCByZWcpOwogCQkJCWRhdGEgPSAwOwogCQkJCXJlZyArPSA4OwogCQkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9jbG9jay1zaDc2MTkuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvY2xvY2stc2g3NjE5LmMKaW5kZXggNGZlODYzMS4uMGM5ZjI0ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9jbG9jay1zaDc2MTkuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL2Nsb2NrLXNoNzYxOS5jCkBAIC0zMSw3ICszMSw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlICo9IFBMTDIgKiBwbGwxcmF0ZVsoY3RybF9pbncoRlJFUUNSKSA+PiA4KSAmIDddOworCWNsay0+cmF0ZSAqPSBQTEwyICogcGxsMXJhdGVbKF9fcmF3X3JlYWR3KEZSRVFDUikgPj4gOCkgJiA3XTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzYxOV9tYXN0ZXJfY2xrX29wcyA9IHsKQEAgLTQwLDcgKzQwLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJFUUNSKSAmIDB4MDAwNyk7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUkVRQ1IpICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNTAsNyArNTAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGxsMXJhdGVbKGN0cmxfaW53KEZSRVFDUikgPj4gOCkgJiA3XTsKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwbGwxcmF0ZVsoX19yYXdfcmVhZHcoRlJFUUNSKSA+PiA4KSAmIDddOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NjE5X2J1c19jbGtfb3BzID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAxLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDEuYwppbmRleCA3ODE0Yzc2Li5iMjYyNjRkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDEuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDEuYwpAQCAtMzQsNyArMzQsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCXJldHVybiAxMDAwMDAwMCAqIFBMTDIgKiBwbGwxcmF0ZVsoY3RybF9pbncoRlJFUUNSKSA+PiA4KSAmIDB4MDAwN107CisJcmV0dXJuIDEwMDAwMDAwICogUExMMiAqIHBsbDFyYXRlWyhfX3Jhd19yZWFkdyhGUkVRQ1IpID4+IDgpICYgMHgwMDA3XTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzIwMV9tYXN0ZXJfY2xrX29wcyA9IHsKQEAgLTQzLDcgKzQzLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJFUUNSKSAmIDB4MDAwNyk7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUkVRQ1IpICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNTMsNyArNTMsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUkVRQ1IpICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSRVFDUikgJiAweDAwMDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC02Myw3ICs2Myw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2ludyhGUkVRQ1IpID4+IDQpICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkdyhGUkVRQ1IpID4+IDQpICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvY2xvY2stc2g3MjAzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDMuYwppbmRleCA5NDA5ODY5Li43ZTc1ZDhmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDMuYwpAQCAtMzksNyArMzksNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSAqPSBwbGwxcmF0ZVsoY3RybF9pbncoRlJFUUNSKSA+PiA4KSAmIDB4MDAwM10gKiBQTEwyIDsKKwljbGstPnJhdGUgKj0gcGxsMXJhdGVbKF9fcmF3X3JlYWR3KEZSRVFDUikgPj4gOCkgJiAweDAwMDNdICogUExMMiA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDcyMDNfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC00OCw3ICs0OCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSRVFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJFUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTU4LDcgKzU4LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJFUUNSKSAmIDB4MDAwNyk7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUkVRQ1IpICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4LTJdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9jbG9jay1zaDcyMDYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwNi5jCmluZGV4IGMyMjY4YmQuLmIyN2E1ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwNi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2Nsb2NrLXNoNzIwNi5jCkBAIC0zNCw3ICszNCw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlICo9IFBMTDIgKiBwbGwxcmF0ZVsoY3RybF9pbncoRlJFUUNSKSA+PiA4KSAmIDB4MDAwN107CisJY2xrLT5yYXRlICo9IFBMTDIgKiBwbGwxcmF0ZVsoX19yYXdfcmVhZHcoRlJFUUNSKSA+PiA4KSAmIDB4MDAwN107CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDcyMDZfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC00Myw3ICs0Myw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSRVFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJFUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTUzLDcgKzUzLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBsbDFyYXRlWyhjdHJsX2ludyhGUkVRQ1IpID4+IDgpICYgMHgwMDA3XTsKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwbGwxcmF0ZVsoX19yYXdfcmVhZHcoRlJFUUNSKSA+PiA4KSAmIDB4MDAwN107CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDcyMDZfYnVzX2Nsa19vcHMgPSB7CkBAIC02Miw3ICs2Miw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSRVFDUikgJiAweDAwMDcpOworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJFUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL2ZwdS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvZnB1LmMKaW5kZXggZDM5NWNlNS4uNDg4ZDI0ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvZnB1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvZnB1LmMKQEAgLTI2LDggKzI2LDcgQEAKIC8qCiAgKiBTYXZlIEZQVSByZWdpc3RlcnMgb250byB0YXNrIHN0cnVjdHVyZS4KICAqLwotdm9pZAotc2F2ZV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit2b2lkIHNhdmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAKQEAgLTUyLDcgKzUxLDcgQEAKIAkJICAgICAiZm1vdi5zCWZyMCwgQC0lMFxuXHQiCiAJCSAgICAgImxkcwklMywgZnBzY3Jcblx0IgogCQkgICAgIDogIj1yIiAoZHVtbXkpCi0JCSAgICAgOiAiMCIgKChjaGFyICopKCZ0c2stPnRocmVhZC5mcHUuaGFyZC5zdGF0dXMpKSwKKwkJICAgICA6ICIwIiAoKGNoYXIgKikoJnRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5zdGF0dXMpKSwKIAkJICAgICAgICJyIiAoRlBTQ1JfUkNIRyksCiAJCSAgICAgICAiciIgKEZQU0NSX0lOSVQpCiAJCSAgICAgOiAibWVtb3J5Iik7CkBAIC02MCw4ICs1OSw3IEBACiAJZGlzYWJsZV9mcHUoKTsKIH0KIAotc3RhdGljIHZvaWQKLXJlc3RvcmVfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQordm9pZCByZXN0b3JlX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAl1bnNpZ25lZCBsb25nIGR1bW15OwogCkBAIC04NSw0NSArODMsMTIgQEAKIAkJICAgICAibGRzLmwJQCUwKywgZnBzY3Jcblx0IgogCQkgICAgICJsZHMubAlAJTArLCBmcHVsXG5cdCIKIAkJICAgICA6ICI9ciIgKGR1bW15KQotCQkgICAgIDogIjAiICgmdHNrLT50aHJlYWQuZnB1KSwgInIiIChGUFNDUl9SQ0hHKQorCQkgICAgIDogIjAiICh0c2stPnRocmVhZC54c3RhdGUpLCAiciIgKEZQU0NSX1JDSEcpCiAJCSAgICAgOiAibWVtb3J5Iik7CiAJZGlzYWJsZV9mcHUoKTsKIH0KIAogLyoKLSAqIExvYWQgdGhlIEZQVSB3aXRoIHNpZ25hbGxpbmcgTkFOUy4gIFRoaXMgYml0IHBhdHRlcm4gd2UncmUgdXNpbmcKLSAqIGhhcyB0aGUgcHJvcGVydHkgdGhhdCBubyBtYXR0ZXIgd2V0aGVyIGNvbnNpZGVyZWQgYXMgc2luZ2xlIG9yIGFzCi0gKiBkb3VibGUgcHJlY2lzc2lvbiByZXByZXNlbnRzIHNpZ25hbGluZyBOQU5TLgotICovCi0KLXN0YXRpYyB2b2lkCi1mcHVfaW5pdCh2b2lkKQotewotCWVuYWJsZV9mcHUoKTsKLQlhc20gdm9sYXRpbGUoImxkcwklMCwgZnB1bFxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIwXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjFcblx0IgotCQkgICAgICJmc3RzCWZwdWwsIGZyMlxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnIzXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjRcblx0IgotCQkgICAgICJmc3RzCWZwdWwsIGZyNVxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnI2XG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjdcblx0IgotCQkgICAgICJmc3RzCWZwdWwsIGZyOFxuXHQiCi0JCSAgICAgImZzdHMJZnB1bCwgZnI5XG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjEwXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjExXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjEyXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjEzXG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjE0XG5cdCIKLQkJICAgICAiZnN0cwlmcHVsLCBmcjE1XG5cdCIKLQkJICAgICAibGRzCSUyLCBmcHNjclxuXHQiCi0JCSAgICAgOiAvKiBubyBvdXRwdXQgKi8KLQkJICAgICA6ICJyIiAoMCksICJyIiAoRlBTQ1JfUkNIRyksICJyIiAoRlBTQ1JfSU5JVCkpOwotCWRpc2FibGVfZnB1KCk7Ci19Ci0KLS8qCiAgKglFbXVsYXRlIGFyaXRobWV0aWMgb3BzIG9uIGRlbm9ybWFsaXplZCBudW1iZXIgZm9yIHNvbWUgRlBVIGluc25zLgogICovCiAKQEAgLTQ5MCw5ICs0NTUsOSBAQAogCWlmICgoZmluc24gJiAweGYxZmYpID09IDB4ZjBhZCkgeyAvKiBmY252c2QgKi8KIAkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCi0JCWlmICgodHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJiBGUFNDUl9GUFVfRVJST1IpKSB7CisJCWlmICgodHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyICYgRlBTQ1JfRlBVX0VSUk9SKSkgewogCQkJLyogRlBVIGVycm9yICovCi0JCQlkZW5vcm1hbF90b19kb3VibGUgKCZ0c2stPnRocmVhZC5mcHUuaGFyZCwKKwkJCWRlbm9ybWFsX3RvX2RvdWJsZSAoJnRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSwKIAkJCQkJICAgIChmaW5zbiA+PiA4KSAmIDB4Zik7CiAJCX0gZWxzZQogCQkJcmV0dXJuIDA7CkBAIC01MDcsOSArNDcyLDkgQEAKIAogCQluID0gKGZpbnNuID4+IDgpICYgMHhmOwogCQltID0gKGZpbnNuID4+IDQpICYgMHhmOwotCQloeCA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl07Ci0JCWh5ID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttXTsKLQkJZnBzY3IgPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjcjsKKwkJaHggPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXTsKKwkJaHkgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttXTsKKwkJZnBzY3IgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3I7CiAJCXByZWMgPSBmcHNjciAmICgxIDw8IDE5KTsKIAogCQlpZiAoKGZwc2NyICYgRlBTQ1JfRlBVX0VSUk9SKQpAQCAtNTE5LDE1ICs0ODQsMTUgQEAKIAogCQkJLyogRlBVIGVycm9yIGJlY2F1c2Ugb2YgZGVub3JtYWwgKi8KIAkJCWxseCA9ICgobG9uZyBsb25nKSBoeCA8PCAzMikKLQkJCSAgICAgICB8IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbisxXTsKKwkJCSAgICAgICB8IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW24rMV07CiAJCQlsbHkgPSAoKGxvbmcgbG9uZykgaHkgPDwgMzIpCi0JCQkgICAgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW20rMV07CisJCQkgICAgICAgfCB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttKzFdOwogCQkJaWYgKChoeCAmIDB4N2ZmZmZmZmYpID49IDB4MDAxMDAwMDApCiAJCQkJbGx4ID0gZGVub3JtYWxfbXVsZChsbHksIGxseCk7CiAJCQllbHNlCiAJCQkJbGx4ID0gZGVub3JtYWxfbXVsZChsbHgsIGxseSk7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dID0gbGx4ID4+IDMyOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuKzFdID0gbGx4ICYgMHhmZmZmZmZmZjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dID0gbGx4ID4+IDMyOworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbisxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CiAJCX0gZWxzZSBpZiAoKGZwc2NyICYgRlBTQ1JfRlBVX0VSUk9SKQogCQkgICAgICYmICghcHJlYyAmJiAoKGh4ICYgMHg3ZmZmZmZmZikgPCAweDAwODAwMDAwCiAJCQkJICAgfHwgKGh5ICYgMHg3ZmZmZmZmZikgPCAweDAwODAwMDAwKSkpIHsKQEAgLTUzNiw3ICs1MDEsNyBAQAogCQkJCWh4ID0gZGVub3JtYWxfbXVsZihoeSwgaHgpOwogCQkJZWxzZQogCQkJCWh4ID0gZGVub3JtYWxfbXVsZihoeCwgaHkpOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXSA9IGh4OworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl0gPSBoeDsKIAkJfSBlbHNlCiAJCQlyZXR1cm4gMDsKIApAQCAtNTUwLDkgKzUxNSw5IEBACiAKIAkJbiA9IChmaW5zbiA+PiA4KSAmIDB4ZjsKIAkJbSA9IChmaW5zbiA+PiA0KSAmIDB4ZjsKLQkJaHggPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dOwotCQloeSA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbV07Ci0JCWZwc2NyID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3I7CisJCWh4ID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbbl07CisJCWh5ID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbV07CisJCWZwc2NyID0gdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyOwogCQlwcmVjID0gZnBzY3IgJiAoMSA8PCAxOSk7CiAKIAkJaWYgKChmcHNjciAmIEZQU0NSX0ZQVV9FUlJPUikKQEAgLTU2MiwxNSArNTI3LDE1IEBACiAKIAkJCS8qIEZQVSBlcnJvciBiZWNhdXNlIG9mIGRlbm9ybWFsICovCiAJCQlsbHggPSAoKGxvbmcgbG9uZykgaHggPDwgMzIpCi0JCQkgICAgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW24rMV07CisJCQkgICAgICAgfCB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuKzFdOwogCQkJbGx5ID0gKChsb25nIGxvbmcpIGh5IDw8IDMyKQotCQkJICAgICAgIHwgdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttKzFdOworCQkJICAgICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbSsxXTsKIAkJCWlmICgoZmluc24gJiAweGYwMGYpID09IDB4ZjAwMCkKIAkJCQlsbHggPSBkZW5vcm1hbF9hZGRkKGxseCwgbGx5KTsKIAkJCWVsc2UKIAkJCQlsbHggPSBkZW5vcm1hbF9hZGRkKGxseCwgbGx5IF4gKDFMTCA8PCA2MykpOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbisxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW24rMV0gPSBsbHggJiAweGZmZmZmZmZmOwogCQl9IGVsc2UgaWYgKChmcHNjciAmIEZQU0NSX0ZQVV9FUlJPUikKIAkJICAgICAmJiAoIXByZWMgJiYgKChoeCAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMAogCQkJCSAgIHx8IChoeSAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMCkpKSB7CkBAIC01NzksNyArNTQ0LDcgQEAKIAkJCQloeCA9IGRlbm9ybWFsX2FkZGYoaHgsIGh5KTsKIAkJCWVsc2UKIAkJCQloeCA9IGRlbm9ybWFsX2FkZGYoaHgsIGh5IF4gMHg4MDAwMDAwMCk7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dID0gaHg7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGh4OwogCQl9IGVsc2UKIAkJCXJldHVybiAwOwogCkBAIC01OTcsNyArNTYyLDcgQEAKIAogCV9fdW5sYXp5X2ZwdSh0c2ssIHJlZ3MpOwogCWlmIChpZWVlX2ZwZV9oYW5kbGVyKHJlZ3MpKSB7Ci0JCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyICY9CisJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjciAmPQogCQkJfihGUFNDUl9DQVVTRV9NQVNLIHwgRlBTQ1JfRkxBR19NQVNLKTsKIAkJZ3JhYl9mcHUocmVncyk7CiAJCXJlc3RvcmVfZnB1KHRzayk7CkBAIC02MDcsMzMgKzU3MiwzIEBACiAKIAlmb3JjZV9zaWcoU0lHRlBFLCB0c2spOwogfQotCi12b2lkIGZwdV9zdGF0ZV9yZXN0b3JlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQotCWdyYWJfZnB1KHJlZ3MpOwotCWlmICh1bmxpa2VseSghdXNlcl9tb2RlKHJlZ3MpKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkJVRzogRlBVIGlzIHVzZWQgaW4ga2VybmVsIG1vZGUuXG4iKTsKLQkJQlVHKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAobGlrZWx5KHVzZWRfbWF0aCgpKSkgewotCQkvKiBVc2luZyB0aGUgRlBVIGFnYWluLiAgKi8KLQkJcmVzdG9yZV9mcHUodHNrKTsKLQl9IGVsc2UJewotCQkvKiBGaXJzdCB0aW1lIEZQVSB1c2VyLiAgKi8KLQkJZnB1X2luaXQoKTsKLQkJc2V0X3VzZWRfbWF0aCgpOwotCX0KLQl0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyB8PSBUU19VU0VERlBVOwotCXRzay0+ZnB1X2NvdW50ZXIrKzsKLX0KLQotQlVJTERfVFJBUF9IQU5ETEVSKGZwdV9zdGF0ZV9yZXN0b3JlKQotewotCVRSQVBfSEFORExFUl9ERUNMOwotCi0JZnB1X3N0YXRlX3Jlc3RvcmUocmVncyk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDMuYwppbmRleCAyN2I4NzM4Li5iNzgzODRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoMy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2gzLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHgyMDAwKSA+PiAxMSkgfCAoZnJxY3IgJiAweDAwMDMpOwogCiAJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tpZHhdOwpAQCAtNDAsNyArNDAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4MjAwMCkgPj4gMTEpIHwgKGZycWNyICYgMHgwMDAzKTsKIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwpAQCAtNTIsNyArNTIsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4ODAwMCkgPj4gMTMpIHwgKChmcnFjciAmIDB4MDAzMCkgPj4gNCk7CiAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBzdGNfbXVsdGlwbGllcnNbaWR4XTsKQEAgLTY0LDcgKzY0LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9ICgoZnJxY3IgJiAweDQwMDApID4+IDEyKSB8ICgoZnJxY3IgJiAweDAwMGMpID4+IDIpOwogCiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwNS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MDUuYwppbmRleCAwY2E4ZjJjLi4wZWNlYTE0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwNS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA1LmMKQEAgLTMyLDcgKzMyLDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2N0cmxfaW53KEZSUUNSKSAmIDB4MDAwM107CisJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tfX3Jhd19yZWFkdyhGUlFDUikgJiAweDAwMDNdOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NzA1X21hc3Rlcl9jbGtfb3BzID0gewpAQCAtNDEsNyArNDEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IGN0cmxfaW53KEZSUUNSKSAmIDB4MDAwMzsKKwlpbnQgaWR4ID0gX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwMDAzOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01MSw3ICs1MSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSAmIDB4MDMwMCkgPj4gODsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSUUNSKSAmIDB4MDMwMCkgPj4gODsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBzdGNfbXVsdGlwbGllcnNbaWR4XTsKIH0KIApAQCAtNjEsNyArNjEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2ludyhGUlFDUikgJiAweDAwMzApID4+IDQ7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUlFDUikgJiAweDAwMzApID4+IDQ7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwNi5jCmluZGV4IDRiZjc4ODcuLjZmOWZmOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MDYuYwpAQCAtMjQsNyArMjQsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9ICgoZnJxY3IgJiAweDIwMDApID4+IDExKSB8IChmcnFjciAmIDB4MDAwMyk7CiAKIAljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2lkeF07CkBAIC0zNiw3ICszNiw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHgyMDAwKSA+PiAxMSkgfCAoZnJxY3IgJiAweDAwMDMpOwogCiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CkBAIC00OCw3ICs0OCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHg4MDAwKSA+PiAxMykgfCAoKGZycWNyICYgMHgwMDMwKSA+PiA0KTsKIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHN0Y19tdWx0aXBsaWVyc1tpZHhdOwpAQCAtNjAsNyArNjAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKChmcnFjciAmIDB4NDAwMCkgPj4gMTIpIHwgKChmcnFjciAmIDB4MDAwYykgPj4gMik7CiAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA5LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwOS5jCmluZGV4IGU4NzQ5NTAuLmYzMDJiYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA5LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MDkuYwpAQCAtMjQsNyArMjQsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9ICgoZnJxY3IgJiAweDIwMDApID4+IDExKSB8IChmcnFjciAmIDB4MDAwMyk7CiAKIAljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2lkeF07CkBAIC0zNiw3ICszNiw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHgyMDAwKSA+PiAxMSkgfCAoZnJxY3IgJiAweDAwMDMpOwogCiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CkBAIC00OCw3ICs0OCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoZnJxY3IgJiAweDAwODApID8KIAkJKChmcnFjciAmIDB4ODAwMCkgPj4gMTMpIHwgKChmcnFjciAmIDB4MDAzMCkgPj4gNCkgOiAxOwogCkBAIC02MSw3ICs2MSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgZnJxY3IgPSBjdHJsX2ludyhGUlFDUik7CisJaW50IGZycWNyID0gX19yYXdfcmVhZHcoRlJRQ1IpOwogCWludCBpZHggPSAoKGZycWNyICYgMHg0MDAwKSA+PiAxMikgfCAoKGZycWNyICYgMHgwMDBjKSA+PiAyKTsKIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MTAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzEwLmMKaW5kZXggMDMwYTU4Yi4uMjlhODdkOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MTAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcxMC5jCkBAIC0yNiw3ICsyNiw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlICo9IG1kX3RhYmxlW2N0cmxfaW53KEZSUUNSKSAmIDB4MDAwN107CisJY2xrLT5yYXRlICo9IG1kX3RhYmxlW19fcmF3X3JlYWR3KEZSUUNSKSAmIDB4MDAwN107CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3MTBfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC0zNSw3ICszNSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSAmIDB4MDAwNyk7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhGUlFDUikgJiAweDAwMDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIG1kX3RhYmxlW2lkeF07CiB9CiAKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJRQ1IpICYgMHgwNzAwKSA+PiA4OworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwNzAwKSA+PiA4OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIG1kX3RhYmxlW2lkeF07CiB9CiAKQEAgLTU1LDcgKzU1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJRQ1IpICYgMHgwMDcwKSA+PiA0OworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwMDcwKSA+PiA0OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIG1kX3RhYmxlW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzEyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcxMi5jCmluZGV4IDY0MjhlZTYuLmIwZDBjNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzEyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9jbG9jay1zaDc3MTIuYwpAQCAtMjMsNyArMjMsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgZnJxY3IgPSBfX3Jhd19yZWFkdyhGUlFDUik7CiAJaW50IGlkeCA9IChmcnFjciAmIDB4MDMwMCkgPj4gODsKIAogCWNsay0+cmF0ZSAqPSBtdWx0aXBsaWVyc1tpZHhdOwpAQCAtMzUsNyArMzUsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gZnJxY3IgJiAweDAwMDc7CiAKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXZpc29yc1tpZHhdOwpAQCAtNDcsNyArNDcsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBmcnFjciA9IF9fcmF3X3JlYWR3KEZSUUNSKTsKIAlpbnQgaWR4ID0gKGZycWNyICYgMHgwMDMwKSA+PiA0OwogCiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gZGl2aXNvcnNbaWR4XTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZXguUyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZXguUwppbmRleCA0NjYxMGMzLi45OWI0ZDAyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2V4LlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9leC5TCkBAIC00OSw3ICs0OSw3IEBACiAJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCSEgcmVzZXJ2ZWRfaW5zdHJ1Y3Rpb24gKGZpbGxlZCBieSB0cmFwX2luaXQpIC8qIDE4MCAqLwogCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgkhIGlsbGVnYWxfc2xvdF9pbnN0cnVjdGlvbiAoZmlsbGVkIGJ5IHRyYXBfaW5pdCkgLyoxQTAqLwogCS5sb25nCW5taV90cmFwX2hhbmRsZXIJLyogMUMwICovCSEgQWxsb3cgdHJhcCB0byBkZWJ1Z2dlcgotCS5sb25nCWJyZWFrX3BvaW50X3RyYXAJLyogMUUwICovCisJLmxvbmcJYnJlYWtwb2ludF90cmFwX2hhbmRsZXIJLyogMUUwICovCiAKIAkvKgogCSAqIFBhZCB0aGUgcmVtYWluZGVyIG9mIHRoZSB0YWJsZSBvdXQsIGV4Y2VwdGlvbnMgcmVzaWRpbmcgaW4gZmFyCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Byb2JlLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Byb2JlLmMKaW5kZXggZjljN2RmNi4uMjk1ZWM0YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9wcm9iZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvcHJvYmUuYwpAQCAtMTYsNyArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi1pbnQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgZGV0ZWN0X2NwdV9hbmRfY2FjaGVfc3lzdGVtKHZvaWQpCitpbnQgZGV0ZWN0X2NwdV9hbmRfY2FjaGVfc3lzdGVtKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyMCwgYWRkcjEsIGRhdGEwLCBkYXRhMSwgZGF0YTIsIGRhdGEzOwogCkBAIC0zMCwyMyArMzAsMjMgQEAKIAlhZGRyMSA9IENBQ0hFX09DX0FERFJFU1NfQVJSQVkgKyAoMSA8PCAxMik7CiAKIAkvKiBGaXJzdCwgd3JpdGUgYmFjayAmIGludmFsaWRhdGUgKi8KLQlkYXRhMCAgPSBjdHJsX2lubChhZGRyMCk7Ci0JY3RybF9vdXRsKGRhdGEwJn4oU0hfQ0FDSEVfVkFMSUR8U0hfQ0FDSEVfVVBEQVRFRCksIGFkZHIwKTsKLQlkYXRhMSAgPSBjdHJsX2lubChhZGRyMSk7Ci0JY3RybF9vdXRsKGRhdGExJn4oU0hfQ0FDSEVfVkFMSUR8U0hfQ0FDSEVfVVBEQVRFRCksIGFkZHIxKTsKKwlkYXRhMCAgPSBfX3Jhd19yZWFkbChhZGRyMCk7CisJX19yYXdfd3JpdGVsKGRhdGEwJn4oU0hfQ0FDSEVfVkFMSUR8U0hfQ0FDSEVfVVBEQVRFRCksIGFkZHIwKTsKKwlkYXRhMSAgPSBfX3Jhd19yZWFkbChhZGRyMSk7CisJX19yYXdfd3JpdGVsKGRhdGExJn4oU0hfQ0FDSEVfVkFMSUR8U0hfQ0FDSEVfVVBEQVRFRCksIGFkZHIxKTsKIAogCS8qIE5leHQsIGNoZWNrIGlmIHRoZXJlJ3Mgc2hhZG93IG9yIG5vdCAqLwotCWRhdGEwID0gY3RybF9pbmwoYWRkcjApOworCWRhdGEwID0gX19yYXdfcmVhZGwoYWRkcjApOwogCWRhdGEwIF49IFNIX0NBQ0hFX1ZBTElEOwotCWN0cmxfb3V0bChkYXRhMCwgYWRkcjApOwotCWRhdGExID0gY3RybF9pbmwoYWRkcjEpOworCV9fcmF3X3dyaXRlbChkYXRhMCwgYWRkcjApOworCWRhdGExID0gX19yYXdfcmVhZGwoYWRkcjEpOwogCWRhdGEyID0gZGF0YTEgXiBTSF9DQUNIRV9WQUxJRDsKLQljdHJsX291dGwoZGF0YTIsIGFkZHIxKTsKLQlkYXRhMyA9IGN0cmxfaW5sKGFkZHIwKTsKKwlfX3Jhd193cml0ZWwoZGF0YTIsIGFkZHIxKTsKKwlkYXRhMyA9IF9fcmF3X3JlYWRsKGFkZHIwKTsKIAogCS8qIExhc3RseSwgaW52YWxpYXRlIHRoZW0uICovCi0JY3RybF9vdXRsKGRhdGEwJn5TSF9DQUNIRV9WQUxJRCwgYWRkcjApOwotCWN0cmxfb3V0bChkYXRhMiZ+U0hfQ0FDSEVfVkFMSUQsIGFkZHIxKTsKKwlfX3Jhd193cml0ZWwoZGF0YTAmflNIX0NBQ0hFX1ZBTElELCBhZGRyMCk7CisJX19yYXdfd3JpdGVsKGRhdGEyJn5TSF9DQUNIRV9WQUxJRCwgYWRkcjEpOwogCiAJYmFja190b19jYWNoZWQoKTsKIApAQCAtOTQsOSArOTQsOSBAQAogCQlib290X2NwdV9kYXRhLmRjYWNoZS53YXlfaW5jcgk9ICgxIDw8IDEzKTsKIAkJYm9vdF9jcHVfZGF0YS5kY2FjaGUuZW50cnlfbWFzawk9IDB4MWZmMDsKIAkJYm9vdF9jcHVfZGF0YS5kY2FjaGUuc2V0cwk9IDUxMjsKLQkJY3RybF9vdXRsKENDUl9DQUNIRV8zMktCLCBDQ1IzX1JFRyk7CisJCV9fcmF3X3dyaXRlbChDQ1JfQ0FDSEVfMzJLQiwgQ0NSM19SRUcpOwogI2Vsc2UKLQkJY3RybF9vdXRsKENDUl9DQUNIRV8xNktCLCBDQ1IzX1JFRyk7CisJCV9fcmF3X3dyaXRlbChDQ1JfQ0FDSEVfMTZLQiwgQ0NSM19SRUcpOwogI2VuZGlmCiAjZW5kaWYKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDMuYwppbmRleCBjOTg4NDY4Li41M2JlNzBiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoMy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2gzLmMKQEAgLTU4LDcgKzU4LDcgQEAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwX3BpbnMoaW50IG1vZGUpCiB7CiAJaWYgKG1vZGUgPT0gSVJRX01PREVfSVJRKSB7Ci0JCWN0cmxfb3V0dyhjdHJsX2ludyhJTlRDX0lDUjEpICYgfklOVENfSUNSMV9JUlFMVkwsIElOVENfSUNSMSk7CisJCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhJTlRDX0lDUjEpICYgfklOVENfSUNSMV9JUlFMVkwsIElOVENfSUNSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTAxMjMpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDQtMjAyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC0yMDIuYwppbmRleCAyMTQyMWUzLi42YjgwODUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC0yMDIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC0yMDIuYwpAQCAtMjMsNyArMjMsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBlbWlfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IGN0cmxfaW5sKENQRzJfRlJRQ1IzKSAmIDB4MDAwNzsKKwlpbnQgaWR4ID0gX19yYXdfcmVhZGwoQ1BHMl9GUlFDUjMpICYgMHgwMDA3OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGZycWNyM19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01Miw3ICs1Miw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZlbWlfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChDUEcyX0ZSUUNSMykgPj4gMykgJiAweDAwMDc7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkbChDUEcyX0ZSUUNSMykgPj4gMykgJiAweDAwMDc7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gZnJxY3IzX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTkyLDcgKzkyLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hvY19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW5sKENQRzJfRlJRQ1IzKSA+PiA2KSAmIDB4MDAwNzsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWRsKENQRzJfRlJRQ1IzKSA+PiA2KSAmIDB4MDAwNzsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBmcnFjcjNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtMTIyLDEwICsxMjIsMTAgQEAKIAogCXRtcCA9IGZycWNyM19sb29rdXAoY2xrLCByYXRlKTsKIAotCWZycWNyMyA9IGN0cmxfaW5sKENQRzJfRlJRQ1IzKTsKKwlmcnFjcjMgPSBfX3Jhd19yZWFkbChDUEcyX0ZSUUNSMyk7CiAJZnJxY3IzICY9IH4oMHgwMDA3IDw8IDYpOwogCWZycWNyMyB8PSB0bXAgPDwgNjsKLQljdHJsX291dGwoZnJxY3IzLCBDUEcyX0ZSUUNSMyk7CisJX19yYXdfd3JpdGVsKGZycWNyMywgQ1BHMl9GUlFDUjMpOwogCiAJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBmcnFjcjNfZGl2aXNvcnNbdG1wXTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvY2xvY2stc2g0LmMKaW5kZXggNzMyOTRkOS4uNWFkZDc1YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9jbG9jay1zaDQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2Nsb2NrLXNoNC5jCkBAIC0yOCw3ICsyOCw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tjdHJsX2ludyhGUlFDUikgJiAweDAwMDddOworCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbX19yYXdfcmVhZHcoRlJRQ1IpICYgMHgwMDA3XTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNF9tYXN0ZXJfY2xrX29wcyA9IHsKQEAgLTM3LDcgKzM3LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJRQ1IpICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSUUNSKSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoRlJRQ1IpID4+IDMpICYgMHgwMDA3OworCWludCBpZHggPSAoX19yYXdfcmVhZHcoRlJRQ1IpID4+IDMpICYgMHgwMDA3OwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGJmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01Nyw3ICs1Nyw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KEZSUUNSKSA+PiA2KSAmIDB4MDAwNzsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KEZSUUNSKSA+PiA2KSAmIDB4MDAwNzsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvZnB1LmMKaW5kZXggZTk3ODU3YS4uNDQ3NDgyZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2ZwdS5jCkBAIC04NSwxNCArODUsMTQgQEAKIAkJICAgICAgImZtb3YucwlmcjEsIEAtJTBcblx0IgogCQkgICAgICAiZm1vdi5zCWZyMCwgQC0lMFxuXHQiCiAJCSAgICAgICJsZHMJJTMsIGZwc2NyXG5cdCI6Ij1yIiAoZHVtbXkpCi0JCSAgICAgIDoiMCIoKGNoYXIgKikoJnRzay0+dGhyZWFkLmZwdS5oYXJkLnN0YXR1cykpLAorCQkgICAgICA6IjAiKChjaGFyICopKCZ0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuc3RhdHVzKSksCiAJCSAgICAgICJyIihGUFNDUl9SQ0hHKSwgInIiKEZQU0NSX0lOSVQpCiAJCSAgICAgIDoibWVtb3J5Iik7CiAKIAlkaXNhYmxlX2ZwdSgpOwogfQogCi1zdGF0aWMgdm9pZCByZXN0b3JlX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3ZvaWQgcmVzdG9yZV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJdW5zaWduZWQgbG9uZyBkdW1teTsKIApAQCAtMTM1LDYyICsxMzUsMTEgQEAKIAkJICAgICAgImxkcy5sCUAlMCssIGZwc2NyXG5cdCIKIAkJICAgICAgImxkcy5sCUAlMCssIGZwdWxcblx0IgogCQkgICAgICA6Ij1yIiAoZHVtbXkpCi0JCSAgICAgIDoiMCIoJnRzay0+dGhyZWFkLmZwdSksICJyIihGUFNDUl9SQ0hHKQorCQkgICAgICA6IjAiICh0c2stPnRocmVhZC54c3RhdGUpLCAiciIgKEZQU0NSX1JDSEcpCiAJCSAgICAgIDoibWVtb3J5Iik7CiAJZGlzYWJsZV9mcHUoKTsKIH0KIAotLyoKLSAqIExvYWQgdGhlIEZQVSB3aXRoIHNpZ25hbGxpbmcgTkFOUy4gIFRoaXMgYml0IHBhdHRlcm4gd2UncmUgdXNpbmcKLSAqIGhhcyB0aGUgcHJvcGVydHkgdGhhdCBubyBtYXR0ZXIgd2V0aGVyIGNvbnNpZGVyZWQgYXMgc2luZ2xlIG9yIGFzCi0gKiBkb3VibGUgcHJlY2lzaW9uIHJlcHJlc2VudHMgc2lnbmFsaW5nIE5BTlMuCi0gKi8KLQotc3RhdGljIHZvaWQgZnB1X2luaXQodm9pZCkKLXsKLQllbmFibGVfZnB1KCk7Ci0JYXNtIHZvbGF0aWxlICgJImxkcwklMCwgZnB1bFxuXHQiCi0JCQkibGRzCSUxLCBmcHNjclxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjBcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMlxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjNcblx0IgotCQkJImZzdHMJZnB1bCwgZnI0XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyNVxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjZcblx0IgotCQkJImZzdHMJZnB1bCwgZnI3XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyOFxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjlcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxMFxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjExXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTJcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxM1xuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjE0XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTVcblx0IgotCQkJImZyY2hnXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMFxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjFcblx0IgotCQkJImZzdHMJZnB1bCwgZnIyXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyM1xuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjRcblx0IgotCQkJImZzdHMJZnB1bCwgZnI1XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyNlxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjdcblx0IgotCQkJImZzdHMJZnB1bCwgZnI4XG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyOVxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjEwXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTFcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxMlxuXHQiCi0JCQkiZnN0cwlmcHVsLCBmcjEzXG5cdCIKLQkJCSJmc3RzCWZwdWwsIGZyMTRcblx0IgotCQkJImZzdHMJZnB1bCwgZnIxNVxuXHQiCi0JCQkiZnJjaGdcblx0IgotCQkJImxkcwklMiwgZnBzY3Jcblx0IgotCQkJOgkvKiBubyBvdXRwdXQgKi8KLQkJCToiciIgKDApLCAiciIoRlBTQ1JfUkNIRyksICJyIihGUFNDUl9JTklUKSk7Ci0JZGlzYWJsZV9mcHUoKTsKLX0KLQogLyoqCiAgKiAgICAgIGRlbm9ybWFsX3RvX2RvdWJsZSAtIEdpdmVuIGRlbm9ybWFsaXplZCBmbG9hdCBudW1iZXIsCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlIGRvdWJsZSBmbG9hdApAQCAtMjgyLDkgKzIzMSw5IEBACiAJCS8qIGZjbnZzZCAqLwogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAKLQkJaWYgKCh0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjciAmIEZQU0NSX0NBVVNFX0VSUk9SKSkKKwkJaWYgKCh0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikpCiAJCQkvKiBGUFUgZXJyb3IgKi8KLQkJCWRlbm9ybWFsX3RvX2RvdWJsZSgmdHNrLT50aHJlYWQuZnB1LmhhcmQsCisJCQlkZW5vcm1hbF90b19kb3VibGUoJnRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSwKIAkJCQkJICAgKGZpbnNuID4+IDgpICYgMHhmKTsKIAkJZWxzZQogCQkJcmV0dXJuIDA7CkBAIC0zMDAsOSArMjQ5LDkgQEAKIAogCQluID0gKGZpbnNuID4+IDgpICYgMHhmOwogCQltID0gKGZpbnNuID4+IDQpICYgMHhmOwotCQloeCA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl07Ci0JCWh5ID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttXTsKLQkJZnBzY3IgPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjcjsKKwkJaHggPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXTsKKwkJaHkgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttXTsKKwkJZnBzY3IgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3I7CiAJCXByZWMgPSBmcHNjciAmIEZQU0NSX0RCTF9QUkVDSVNJT047CiAKIAkJaWYgKChmcHNjciAmIEZQU0NSX0NBVVNFX0VSUk9SKQpAQCAtMzEyLDE4ICsyNjEsMTggQEAKIAogCQkJLyogRlBVIGVycm9yIGJlY2F1c2Ugb2YgZGVub3JtYWwgKGRvdWJsZXMpICovCiAJCQlsbHggPSAoKGxvbmcgbG9uZyloeCA8PCAzMikKLQkJCSAgICB8IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbiArIDFdOworCQkJICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbiArIDFdOwogCQkJbGx5ID0gKChsb25nIGxvbmcpaHkgPDwgMzIpCi0JCQkgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW20gKyAxXTsKKwkJCSAgICB8IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW20gKyAxXTsKIAkJCWxseCA9IGZsb2F0NjRfbXVsKGxseCwgbGx5KTsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl0gPSBsbHggPj4gMzI7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW24gKyAxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW24gKyAxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CiAJCX0gZWxzZSBpZiAoKGZwc2NyICYgRlBTQ1JfQ0FVU0VfRVJST1IpCiAJCQkgICAmJiAoIXByZWMgJiYgKChoeCAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMAogCQkJCQkgfHwgKGh5ICYgMHg3ZmZmZmZmZikgPCAweDAwODAwMDAwKSkpIHsKIAkJCS8qIEZQVSBlcnJvciBiZWNhdXNlIG9mIGRlbm9ybWFsIChmbG9hdHMpICovCiAJCQloeCA9IGZsb2F0MzJfbXVsKGh4LCBoeSk7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dID0gaHg7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGh4OwogCQl9IGVsc2UKIAkJCXJldHVybiAwOwogCkBAIC0zMzgsOSArMjg3LDkgQEAKIAogCQluID0gKGZpbnNuID4+IDgpICYgMHhmOwogCQltID0gKGZpbnNuID4+IDQpICYgMHhmOwotCQloeCA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl07Ci0JCWh5ID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1ttXTsKLQkJZnBzY3IgPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjcjsKKwkJaHggPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXTsKKwkJaHkgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1ttXTsKKwkJZnBzY3IgPSB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3I7CiAJCXByZWMgPSBmcHNjciAmIEZQU0NSX0RCTF9QUkVDSVNJT047CiAKIAkJaWYgKChmcHNjciAmIEZQU0NSX0NBVVNFX0VSUk9SKQpAQCAtMzUwLDE1ICsyOTksMTUgQEAKIAogCQkJLyogRlBVIGVycm9yIGJlY2F1c2Ugb2YgZGVub3JtYWwgKGRvdWJsZXMpICovCiAJCQlsbHggPSAoKGxvbmcgbG9uZyloeCA8PCAzMikKLQkJCSAgICB8IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbiArIDFdOworCQkJICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbiArIDFdOwogCQkJbGx5ID0gKChsb25nIGxvbmcpaHkgPDwgMzIpCi0JCQkgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW20gKyAxXTsKKwkJCSAgICB8IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW20gKyAxXTsKIAkJCWlmICgoZmluc24gJiAweGYwMGYpID09IDB4ZjAwMCkKIAkJCQlsbHggPSBmbG9hdDY0X2FkZChsbHgsIGxseSk7CiAJCQllbHNlCiAJCQkJbGx4ID0gZmxvYXQ2NF9zdWIobGx4LCBsbHkpOwotCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbiArIDFdID0gbGx4ICYgMHhmZmZmZmZmZjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dID0gbGx4ID4+IDMyOworCQkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbiArIDFdID0gbGx4ICYgMHhmZmZmZmZmZjsKIAkJfSBlbHNlIGlmICgoZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikKIAkJCSAgICYmICghcHJlYyAmJiAoKGh4ICYgMHg3ZmZmZmZmZikgPCAweDAwODAwMDAwCiAJCQkJCSB8fCAoaHkgJiAweDdmZmZmZmZmKSA8IDB4MDA4MDAwMDApKSkgewpAQCAtMzY3LDcgKzMxNiw3IEBACiAJCQkJaHggPSBmbG9hdDMyX2FkZChoeCwgaHkpOwogCQkJZWxzZQogCQkJCWh4ID0gZmxvYXQzMl9zdWIoaHgsIGh5KTsKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl0gPSBoeDsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dID0gaHg7CiAJCX0gZWxzZQogCQkJcmV0dXJuIDA7CiAKQEAgLTM4Miw5ICszMzEsOSBAQAogCiAJCW4gPSAoZmluc24gPj4gOCkgJiAweGY7CiAJCW0gPSAoZmluc24gPj4gNCkgJiAweGY7Ci0JCWh4ID0gdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuXTsKLQkJaHkgPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW21dOwotCQlmcHNjciA9IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyOworCQloeCA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW25dOworCQloeSA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW21dOworCQlmcHNjciA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcHNjcjsKIAkJcHJlYyA9IGZwc2NyICYgRlBTQ1JfREJMX1BSRUNJU0lPTjsKIAogCQlpZiAoKGZwc2NyICYgRlBTQ1JfQ0FVU0VfRVJST1IpCkBAIC0zOTQsMjAgKzM0MywyMCBAQAogCiAJCQkvKiBGUFUgZXJyb3IgYmVjYXVzZSBvZiBkZW5vcm1hbCAoZG91YmxlcykgKi8KIAkJCWxseCA9ICgobG9uZyBsb25nKWh4IDw8IDMyKQotCQkJICAgIHwgdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tuICsgMV07CisJCQkgICAgfCB0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuICsgMV07CiAJCQlsbHkgPSAoKGxvbmcgbG9uZyloeSA8PCAzMikKLQkJCSAgICB8IHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbSArIDFdOworCQkJICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbSArIDFdOwogCiAJCQlsbHggPSBmbG9hdDY0X2RpdihsbHgsIGxseSk7CiAKLQkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbbl0gPSBsbHggPj4gMzI7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW24gKyAxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGxseCA+PiAzMjsKKwkJCXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW24gKyAxXSA9IGxseCAmIDB4ZmZmZmZmZmY7CiAJCX0gZWxzZSBpZiAoKGZwc2NyICYgRlBTQ1JfQ0FVU0VfRVJST1IpCiAJCQkgICAmJiAoIXByZWMgJiYgKChoeCAmIDB4N2ZmZmZmZmYpIDwgMHgwMDgwMDAwMAogCQkJCQkgfHwgKGh5ICYgMHg3ZmZmZmZmZikgPCAweDAwODAwMDAwKSkpIHsKIAkJCS8qIEZQVSBlcnJvciBiZWNhdXNlIG9mIGRlbm9ybWFsIChmbG9hdHMpICovCiAJCQloeCA9IGZsb2F0MzJfZGl2KGh4LCBoeSk7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW25dID0gaHg7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tuXSA9IGh4OwogCQl9IGVsc2UKIAkJCXJldHVybiAwOwogCkBAIC00MjAsMTcgKzM2OSwxNyBAQAogCQl1bnNpZ25lZCBpbnQgaHg7CiAKIAkJbSA9IChmaW5zbiA+PiA4KSAmIDB4NzsKLQkJaHggPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW21dOworCQloeCA9IHRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW21dOwogCi0JCWlmICgodHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikKKwkJaWYgKCh0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikKIAkJCSYmICgoaHggJiAweDdmZmZmZmZmKSA8IDB4MDAxMDAwMDApKSB7CiAJCQkvKiBzdWJub3JtYWwgZG91YmxlIHRvIGZsb2F0IGNvbnZlcnNpb24gKi8KIAkJCWxvbmcgbG9uZyBsbHg7CiAKLQkJCWxseCA9ICgobG9uZyBsb25nKXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbV0gPDwgMzIpCi0JCQkgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW20gKyAxXTsKKwkJCWxseCA9ICgobG9uZyBsb25nKXRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW21dIDw8IDMyKQorCQkJICAgIHwgdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbbSArIDFdOwogCi0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcHVsID0gZmxvYXQ2NF90b19mbG9hdDMyKGxseCk7CisJCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnB1bCA9IGZsb2F0NjRfdG9fZmxvYXQzMihsbHgpOwogCQl9IGVsc2UKIAkJCXJldHVybiAwOwogCkBAIC00NDksNyArMzk4LDcgQEAKIGludCBmbG9hdF9yb3VuZGluZ19tb2RlKHZvaWQpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCWludCByb3VuZGluZ01vZGUgPSBGUFNDUl9ST1VORElOR19NT0RFKHRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyKTsKKwlpbnQgcm91bmRpbmdNb2RlID0gRlBTQ1JfUk9VTkRJTkdfTU9ERSh0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IpOwogCXJldHVybiByb3VuZGluZ01vZGU7CiB9CiAKQEAgLTQ2MSwxNiArNDEwLDE2IEBACiAJX191bmxhenlfZnB1KHRzaywgcmVncyk7CiAJZnB1X2V4Y2VwdGlvbl9mbGFncyA9IDA7CiAJaWYgKGllZWVfZnBlX2hhbmRsZXIocmVncykpIHsKLQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJj0KKwkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyICY9CiAJCSAgICB+KEZQU0NSX0NBVVNFX01BU0sgfCBGUFNDUl9GTEFHX01BU0spOwotCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjciB8PSBmcHVfZXhjZXB0aW9uX2ZsYWdzOworCQl0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IgfD0gZnB1X2V4Y2VwdGlvbl9mbGFnczsKIAkJLyogU2V0IHRoZSBGUFNDUiBmbGFnIGFzIHdlbGwgYXMgY2F1c2UgYml0cyAtIHNpbXBseQogCQkgKiByZXBsaWNhdGUgdGhlIGNhdXNlICovCi0JCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyIHw9IChmcHVfZXhjZXB0aW9uX2ZsYWdzID4+IDEwKTsKKwkJdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwc2NyIHw9IChmcHVfZXhjZXB0aW9uX2ZsYWdzID4+IDEwKTsKIAkJZ3JhYl9mcHUocmVncyk7CiAJCXJlc3RvcmVfZnB1KHRzayk7CiAJCXRhc2tfdGhyZWFkX2luZm8odHNrKS0+c3RhdHVzIHw9IFRTX1VTRURGUFU7Ci0JCWlmICgoKCh0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjciAmIEZQU0NSX0VOQUJMRV9NQVNLKSA+PiA3KSAmCisJCWlmICgoKCh0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBzY3IgJiBGUFNDUl9FTkFCTEVfTUFTSykgPj4gNykgJgogCQkgICAgIChmcHVfZXhjZXB0aW9uX2ZsYWdzID4+IDIpKSA9PSAwKSB7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTQ3OCwzMyArNDI3LDMgQEAKIAogCWZvcmNlX3NpZyhTSUdGUEUsIHRzayk7CiB9Ci0KLXZvaWQgZnB1X3N0YXRlX3Jlc3RvcmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCi0JZ3JhYl9mcHUocmVncyk7Ci0JaWYgKHVubGlrZWx5KCF1c2VyX21vZGUocmVncykpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQlVHOiBGUFUgaXMgdXNlZCBpbiBrZXJuZWwgbW9kZS5cbiIpOwotCQlCVUcoKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChsaWtlbHkodXNlZF9tYXRoKCkpKSB7Ci0JCS8qIFVzaW5nIHRoZSBGUFUgYWdhaW4uICAqLwotCQlyZXN0b3JlX2ZwdSh0c2spOwotCX0gZWxzZSB7Ci0JCS8qIEZpcnN0IHRpbWUgRlBVIHVzZXIuICAqLwotCQlmcHVfaW5pdCgpOwotCQlzZXRfdXNlZF9tYXRoKCk7Ci0JfQotCXRhc2tfdGhyZWFkX2luZm8odHNrKS0+c3RhdHVzIHw9IFRTX1VTRURGUFU7Ci0JdHNrLT5mcHVfY291bnRlcisrOwotfQotCi1CVUlMRF9UUkFQX0hBTkRMRVIoZnB1X3N0YXRlX3Jlc3RvcmUpCi17Ci0JVFJBUF9IQU5ETEVSX0RFQ0w7Ci0KLQlmcHVfc3RhdGVfcmVzdG9yZShyZWdzKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYwppbmRleCBkMzZmMGM0Li44MjI5NzdhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jCkBAIC0yOCw5ICsyOCw5IEBACiAJCVs5XSA9ICgxIDw8IDE2KQogCX07CiAKLQlwdnIgPSAoY3RybF9pbmwoQ0NOX1BWUikgPj4gOCkgJiAweGZmZmZmZjsKLQlwcnIgPSAoY3RybF9pbmwoQ0NOX1BSUikgPj4gNCkgJiAweGZmOwotCWN2ciA9IChjdHJsX2lubChDQ05fQ1ZSKSk7CisJcHZyID0gKF9fcmF3X3JlYWRsKENDTl9QVlIpID4+IDgpICYgMHhmZmZmZmY7CisJcHJyID0gKF9fcmF3X3JlYWRsKENDTl9QUlIpID4+IDQpICYgMHhmZjsKKwljdnIgPSAoX19yYXdfcmVhZGwoQ0NOX0NWUikpOwogCiAJLyoKIAkgKiBTZXR1cCBzb21lIHNhbmUgU0gtNCBkZWZhdWx0cyBmb3IgdGhlIGljYWNoZQpAQCAtNzEsMTEgKzcxLDExIEBACiAJCWJvb3RfY3B1X2RhdGEuZGNhY2hlLndheXMgPSA0OwogCX0gZWxzZSB7CiAJCS8qIEFuZCBzb21lIFNILTQgZGVmYXVsdHMuLiAqLwotCQlib290X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfUFRFQTsKKwkJYm9vdF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX1BURUEgfCBDUFVfSEFTX0ZQVTsKIAkJYm9vdF9jcHVfZGF0YS5mYW1pbHkgPSBDUFVfRkFNSUxZX1NINDsKIAl9CiAKLQkvKiBGUFUgZGV0ZWN0aW9uIHdvcmtzIGZvciBldmVyeW9uZSAqLworCS8qIEZQVSBkZXRlY3Rpb24gd29ya3MgZm9yIGFsbW9zdCBldmVyeW9uZSAqLwogCWlmICgoY3ZyICYgMHgyMDAwMDAwMCkpCiAJCWJvb3RfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19GUFU7CiAKQEAgLTEyNCw2ICsxMjQsNyBAQAogCQlib290X2NwdV9kYXRhLnR5cGUgPSBDUFVfU0g3Nzg1OwogCQlicmVhazsKIAljYXNlIDB4NDAwNDoKKwljYXNlIDB4NDAwNToKIAkJYm9vdF9jcHVfZGF0YS50eXBlID0gQ1BVX1NINzc4NjsKIAkJYm9vdF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX1BURUFFWCB8IENQVV9IQVNfTDJfQ0FDSEU7CiAJCWJyZWFrOwpAQCAtMTYwLDYgKzE2MSw3IEBACiAJCWJyZWFrOwogCWNhc2UgMHg3MDA6CiAJCWJvb3RfY3B1X2RhdGEudHlwZSA9IENQVV9TSDRfNTAxOworCQlib290X2NwdV9kYXRhLmZsYWdzICY9IH5DUFVfSEFTX0ZQVTsKIAkJYm9vdF9jcHVfZGF0YS5pY2FjaGUud2F5cyA9IDI7CiAJCWJvb3RfY3B1X2RhdGEuZGNhY2hlLndheXMgPSAyOwogCQlicmVhazsKQEAgLTIyNyw3ICsyMjksNyBAQAogCQkJICogU2l6ZSBjYWxjdWxhdGlvbiBpcyBtdWNoIG1vcmUgc2Vuc2libGUKIAkJCSAqIHRoYW4gaXQgaXMgZm9yIHRoZSBMMS4KIAkJCSAqCi0JCQkgKiBTaXplcyBhcmUgMTI4S0IsIDI1OEtCLCA1MTJLQiwgYW5kIDFNQi4KKwkJCSAqIFNpemVzIGFyZSAxMjhLQiwgMjU2S0IsIDUxMktCLCBhbmQgMU1CLgogCQkJICovCiAJCQlzaXplID0gKGN2ciAmIDB4ZikgPDwgMTc7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g0LTIwMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDQtMjAyLmMKaW5kZXggNGI3MzM3MS4uYjliN2UxMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDQtMjAyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDQtMjAyLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogewogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgSVJRX01PREVfSVJROiAvKiBpbmRpdmlkdWFsIGludGVycnVwdCBtb2RlIGZvciBJUkwzLTAgKi8KLQkJY3RybF9vdXR3KGN0cmxfaW53KElOVENfSUNSKSB8IElOVENfSUNSX0lSTE0sIElOVENfSUNSKTsKKwkJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KElOVENfSUNSKSB8IElOVENfSUNSX0lSTE0sIElOVENfSUNSKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsbSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYwppbmRleCBiMmE5ZGYxLi5mZmQ3OWU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKQEAgLTQ0Miw3ICs0NDIsNyBAQAogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE6IC8qIGluZGl2aWR1YWwgaW50ZXJydXB0IG1vZGUgZm9yIElSTDMtMCAqLwotCQljdHJsX291dHcoY3RybF9pbncoSU5UQ19JQ1IpIHwgSU5UQ19JQ1JfSVJMTSwgSU5UQ19JQ1IpOworCQlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoSU5UQ19JQ1IpIHwgSU5UQ19JQ1JfSVJMTSwgSU5UQ19JQ1IpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmxtKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jCmluZGV4IDViNzRjYzAuLmExNmViMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NjAuYwpAQCAtMzE5LDcgKzMxOSw3IEBACiB7CiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE6Ci0JCWN0cmxfb3V0dyhjdHJsX2ludyhJTlRDX0lDUikgfCBJTlRDX0lDUl9JUkxNLCBJTlRDX0lDUik7CisJCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhJTlRDX0lDUikgfCBJTlRDX0lDUl9JUkxNLCBJTlRDX0lDUik7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMKaW5kZXggOGE4YTk5My4uZmMwNjVmOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc3EuYwpAQCAtNDMsOSArNDMsOSBAQAogCiAjZGVmaW5lIHN0b3JlX3F1ZXVlX2JhcnJpZXIoKQkJCVwKIGRvIHsJCQkJCQlcCi0JKHZvaWQpY3RybF9pbmwoUDRTRUdfU1RPUkVfUVVFKTsJXAotCWN0cmxfb3V0bCgwLCBQNFNFR19TVE9SRV9RVUUgKyAwKTsJXAotCWN0cmxfb3V0bCgwLCBQNFNFR19TVE9SRV9RVUUgKyA4KTsJXAorCSh2b2lkKV9fcmF3X3JlYWRsKFA0U0VHX1NUT1JFX1FVRSk7CVwKKwlfX3Jhd193cml0ZWwoMCwgUDRTRUdfU1RPUkVfUVVFICsgMCk7CVwKKwlfX3Jhd193cml0ZWwoMCwgUDRTRUdfU1RPUkVfUVVFICsgOCk7CVwKIH0gd2hpbGUgKDApOwogCiAvKioKQEAgLTEwMCw3ICsxMDAsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmc3FfbWFwcGluZ19sb2NrKTsKIH0KIAotc3RhdGljIGludCBfX3NxX3JlbWFwKHN0cnVjdCBzcV9tYXBwaW5nICptYXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCitzdGF0aWMgaW50IF9fc3FfcmVtYXAoc3RydWN0IHNxX21hcHBpbmcgKm1hcCwgcGdwcm90X3QgcHJvdCkKIHsKICNpZiBkZWZpbmVkKENPTkZJR19NTVUpCiAJc3RydWN0IHZtX3N0cnVjdCAqdm1hOwpAQCAtMTEzLDcgKzExMyw3IEBACiAKIAlpZiAoaW9yZW1hcF9wYWdlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXZtYS0+YWRkciwKIAkJCSAgICAgICAodW5zaWduZWQgbG9uZyl2bWEtPmFkZHIgKyBtYXAtPnNpemUsCi0JCQkgICAgICAgdm1hLT5waHlzX2FkZHIsIF9fcGdwcm90KGZsYWdzKSkpIHsKKwkJCSAgICAgICB2bWEtPnBoeXNfYWRkciwgcHJvdCkpIHsKIAkJdnVubWFwKHZtYS0+YWRkcik7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KQEAgLTEyMyw4ICsxMjMsOCBAQAogCSAqIHN0cmFpZ2h0Zm9yd2FyZCwgYXMgd2UgY2FuIGp1c3QgbG9hZCB1cCBlYWNoIHF1ZXVlJ3MgUUFDUiB3aXRoCiAJICogdGhlIHBoeXNpY2FsIGFkZHJlc3MgYXBwcm9wcmlhdGVseSBtYXNrZWQuCiAJICovCi0JY3RybF9vdXRsKCgobWFwLT5hZGRyID4+IDI2KSA8PCAyKSAmIDB4MWMsIFNRX1FBQ1IwKTsKLQljdHJsX291dGwoKChtYXAtPmFkZHIgPj4gMjYpIDw8IDIpICYgMHgxYywgU1FfUUFDUjEpOworCV9fcmF3X3dyaXRlbCgoKG1hcC0+YWRkciA+PiAyNikgPDwgMikgJiAweDFjLCBTUV9RQUNSMCk7CisJX19yYXdfd3JpdGVsKCgobWFwLT5hZGRyID4+IDI2KSA8PCAyKSAmIDB4MWMsIFNRX1FBQ1IxKTsKICNlbmRpZgogCiAJcmV0dXJuIDA7CkBAIC0xMzUsMTQgKzEzNSwxNCBAQAogICogQHBoeXM6IFBoeXNpY2FsIGFkZHJlc3Mgb2YgbWFwcGluZy4KICAqIEBzaXplOiBMZW5ndGggb2YgbWFwcGluZy4KICAqIEBuYW1lOiBVc2VyIGludm9raW5nIG1hcHBpbmcuCi0gKiBAZmxhZ3M6IFByb3RlY3Rpb24gZmxhZ3MuCisgKiBAcHJvdDogUHJvdGVjdGlvbiBiaXRzLgogICoKICAqIFJlbWFwcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBAcGh5cyB0aHJvdWdoIHRoZSBuZXh0IGF2YWlsYWJsZSBzdG9yZSBxdWV1ZQogICogYWRkcmVzcyBvZiBAc2l6ZSBsZW5ndGguIEBuYW1lIGlzIGxvZ2dlZCBhdCBib290IHRpbWUgYXMgd2VsbCBhcyB0aHJvdWdoCiAgKiB0aGUgc3lzZnMgaW50ZXJmYWNlLgogICovCiB1bnNpZ25lZCBsb25nIHNxX3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgaW50IHNpemUsCi0JCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgcGdwcm90X3QgcHJvdCkKIHsKIAlzdHJ1Y3Qgc3FfbWFwcGluZyAqbWFwOwogCXVuc2lnbmVkIGxvbmcgZW5kOwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAKIAltYXAtPnNxX2FkZHIgPSBQNFNFR19TVE9SRV9RVUUgKyAocGFnZSA8PCBQQUdFX1NISUZUKTsKIAotCXJldCA9IF9fc3FfcmVtYXAobWFwLCBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMX05PQ0FDSEUpIHwgZmxhZ3MpOworCXJldCA9IF9fc3FfcmVtYXAobWFwLCBwcm90KTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKIApAQCAtMzA5LDggKzMwOSw3IEBACiAJCXJldHVybiAtRUlPOwogCiAJaWYgKGxpa2VseShsZW4pKSB7Ci0JCWludCByZXQgPSBzcV9yZW1hcChiYXNlLCBsZW4sICJVc2Vyc3BhY2UiLAotCQkJCSAgIHBncHJvdF92YWwoUEFHRV9TSEFSRUQpKTsKKwkJaW50IHJldCA9IHNxX3JlbWFwKGJhc2UsIGxlbiwgIlVzZXJzcGFjZSIsIFBBR0VfU0hBUkVEKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQppbmRleCAzM2JhYjQ3Li5iMTQ0ZThhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQpAQCAtNDEsNyArNDEsOCBAQAogcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkJOj0gcGlubXV4LXNoNzc4NS5vCiBwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQk6PSBwaW5tdXgtc2g3Nzg2Lm8KIAotb2JqLXkJCQkJKz0gJChjbG9jay15KQotb2JqLSQoQ09ORklHX1NNUCkJCSs9ICQoc21wLXkpCi1vYmotJChDT05GSUdfR0VORVJJQ19HUElPKQkrPSAkKHBpbm11eC15KQotb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKQkrPSBwZXJmX2V2ZW50Lm8KK29iai15CQkJCQkrPSAkKGNsb2NrLXkpCitvYmotJChDT05GSUdfU01QKQkJCSs9ICQoc21wLXkpCitvYmotJChDT05GSUdfR0VORVJJQ19HUElPKQkJKz0gJChwaW5tdXgteSkKK29iai0kKENPTkZJR19QRVJGX0VWRU5UUykJCSs9IHBlcmZfZXZlbnQubworb2JqLSQoQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCkJKz0gdWJjLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzM0My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMKaW5kZXggMGVlM2VlOC4uMmMxNmRmMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzQzLmMKQEAgLTEwNywxMyArMTA3LDE3IEBACiBzdGF0aWMgaW50IG11bHRpcGxpZXJzW10gPSB7IDEsIDIsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEgfTsKIHN0YXRpYyBpbnQgZGl2aXNvcnNbXSA9IHsgMSwgMywgMiwgNSwgMywgNCwgNSwgNiwgOCwgMTAsIDEyLCAxNiwgMjAgfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF90YWJsZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfZGl2X211bHRfdGFibGUgPSB7CiAJLmRpdmlzb3JzID0gZGl2aXNvcnMsCiAJLm5yX2Rpdmlzb3JzID0gQVJSQVlfU0laRShkaXZpc29ycyksCiAJLm11bHRpcGxpZXJzID0gbXVsdGlwbGllcnMsCiAJLm5yX211bHRpcGxpZXJzID0gQVJSQVlfU0laRShtdWx0aXBsaWVycyksCiB9OwogCitzdGF0aWMgc3RydWN0IGNsa19kaXY0X3RhYmxlIGRpdjRfdGFibGUgPSB7CisJLmRpdl9tdWx0X3RhYmxlID0gJmRpdjRfZGl2X211bHRfdGFibGUsCit9OworCiBlbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9CMywgRElWNF9QLAogICAgICAgIERJVjRfU0lVQSwgRElWNF9TSVVCLCBESVY0X05SIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzM2Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzY2LmMKaW5kZXggYTk1ZWJhYi4uOTE1ODhkMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzY2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3MzY2LmMKQEAgLTExMCwxMyArMTEwLDE3IEBACiBzdGF0aWMgaW50IG11bHRpcGxpZXJzW10gPSB7IDEsIDIsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEgfTsKIHN0YXRpYyBpbnQgZGl2aXNvcnNbXSA9IHsgMSwgMywgMiwgNSwgMywgNCwgNSwgNiwgOCwgMTAsIDEyLCAxNiwgMjAgfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF90YWJsZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfZGl2X211bHRfdGFibGUgPSB7CiAJLmRpdmlzb3JzID0gZGl2aXNvcnMsCiAJLm5yX2Rpdmlzb3JzID0gQVJSQVlfU0laRShkaXZpc29ycyksCiAJLm11bHRpcGxpZXJzID0gbXVsdGlwbGllcnMsCiAJLm5yX211bHRpcGxpZXJzID0gQVJSQVlfU0laRShtdWx0aXBsaWVycyksCiB9OwogCitzdGF0aWMgc3RydWN0IGNsa19kaXY0X3RhYmxlIGRpdjRfdGFibGUgPSB7CisJLmRpdl9tdWx0X3RhYmxlID0gJmRpdjRfZGl2X211bHRfdGFibGUsCit9OworCiBlbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9CMywgRElWNF9QLAogICAgICAgIERJVjRfU0lVQSwgRElWNF9TSVVCLCBESVY0X05SIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIyLmMKaW5kZXggZWEzOGI1NS4uMTVkYjZkNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIyLmMKQEAgLTExMCwxOSArMTEwLDIyIEBACiBzdGF0aWMgaW50IG11bHRpcGxpZXJzW10gPSB7IDEsIDIsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEgfTsKIHN0YXRpYyBpbnQgZGl2aXNvcnNbXSA9IHsgMSwgMywgMiwgNSwgMywgNCwgNSwgNiwgOCwgMTAsIDEyLCAxNiwgMjAgfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF90YWJsZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfZGl2X211bHRfdGFibGUgPSB7CiAJLmRpdmlzb3JzID0gZGl2aXNvcnMsCiAJLm5yX2Rpdmlzb3JzID0gQVJSQVlfU0laRShkaXZpc29ycyksCiAJLm11bHRpcGxpZXJzID0gbXVsdGlwbGllcnMsCiAJLm5yX211bHRpcGxpZXJzID0gQVJSQVlfU0laRShtdWx0aXBsaWVycyksCiB9OwogCi1lbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9CMywgRElWNF9QLAotICAgICAgIERJVjRfU0lVQSwgRElWNF9TSVVCLCBESVY0X0lSREEsIERJVjRfTlIgfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgZGl2NF90YWJsZSA9IHsKKwkuZGl2X211bHRfdGFibGUgPSAmZGl2NF9kaXZfbXVsdF90YWJsZSwKK307CiAKICNkZWZpbmUgRElWNChfc3RyLCBfcmVnLCBfYml0LCBfbWFzaywgX2ZsYWdzKSBcCiAgIFNIX0NMS19ESVY0KF9zdHIsICZwbGxfY2xrLCBfcmVnLCBfYml0LCBfbWFzaywgX2ZsYWdzKQogCitlbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9CMywgRElWNF9QLCBESVY0X05SIH07CisKIHN0cnVjdCBjbGsgZGl2NF9jbGtzW0RJVjRfTlJdID0gewogCVtESVY0X0ldID0gRElWNCgiY3B1X2NsayIsIEZSUUNSLCAyMCwgMHgxZmVmLCBDTEtfRU5BQkxFX09OX0lOSVQpLAogCVtESVY0X1VdID0gRElWNCgidW1lbV9jbGsiLCBGUlFDUiwgMTYsIDB4MWZmZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKQEAgLTEzMCw5ICsxMzMsMTkgQEAKIAlbRElWNF9CXSA9IERJVjQoImJ1c19jbGsiLCBGUlFDUiwgOCwgMHgxZmZmLCBDTEtfRU5BQkxFX09OX0lOSVQpLAogCVtESVY0X0IzXSA9IERJVjQoImIzX2NsayIsIEZSUUNSLCA0LCAweDFmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfUF0gPSBESVY0KCJwZXJpcGhlcmFsX2NsayIsIEZSUUNSLCAwLCAweDFmZmYsIDApLAorfTsKKworZW51bSB7IERJVjRfSVJEQSwgRElWNF9FTkFCTEVfTlIgfTsKKworc3RydWN0IGNsayBkaXY0X2VuYWJsZV9jbGtzW0RJVjRfRU5BQkxFX05SXSA9IHsKKwlbRElWNF9JUkRBXSA9IERJVjQoImlyZGFfY2xrIiwgSVJEQUNMS0NSLCAwLCAweDFmZmYsIDApLAorfTsKKworZW51bSB7IERJVjRfU0lVQSwgRElWNF9TSVVCLCBESVY0X1JFUEFSRU5UX05SIH07CisKK3N0cnVjdCBjbGsgZGl2NF9yZXBhcmVudF9jbGtzW0RJVjRfUkVQQVJFTlRfTlJdID0gewogCVtESVY0X1NJVUFdID0gRElWNCgic2l1YV9jbGsiLCBTQ0xLQUNSLCAwLCAweDFmZmYsIDApLAogCVtESVY0X1NJVUJdID0gRElWNCgic2l1Yl9jbGsiLCBTQ0xLQkNSLCAwLCAweDFmZmYsIDApLAotCVtESVY0X0lSREFdID0gRElWNCgiaXJkYV9jbGsiLCBJUkRBQ0xLQ1IsIDAsIDB4MWZmZiwgMCksCiB9OwogCiBzdHJ1Y3QgY2xrIGRpdjZfY2xrc1tdID0gewpAQCAtMTg5LDYgKzIwMiwxNCBAQAogCQlyZXQgPSBzaF9jbGtfZGl2NF9yZWdpc3RlcihkaXY0X2Nsa3MsIERJVjRfTlIsICZkaXY0X3RhYmxlKTsKIAogCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2NF9lbmFibGVfcmVnaXN0ZXIoZGl2NF9lbmFibGVfY2xrcywKKwkJCQkJRElWNF9FTkFCTEVfTlIsICZkaXY0X3RhYmxlKTsKKworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2NF9yZXBhcmVudF9yZWdpc3RlcihkaXY0X3JlcGFyZW50X2Nsa3MsCisJCQkJCURJVjRfUkVQQVJFTlRfTlIsICZkaXY0X3RhYmxlKTsKKworCWlmICghcmV0KQogCQlyZXQgPSBzaF9jbGtfZGl2Nl9yZWdpc3RlcihkaXY2X2Nsa3MsIEFSUkFZX1NJWkUoZGl2Nl9jbGtzKSk7CiAKIAlpZiAoIXJldCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyMy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIzLmMKaW5kZXggMjBhMzFjMi4uNTBiYWJlMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzIzLmMKQEAgLTExMCwxNSArMTEwLDE4IEBACiBzdGF0aWMgaW50IG11bHRpcGxpZXJzW10gPSB7IDEsIDIsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEgfTsKIHN0YXRpYyBpbnQgZGl2aXNvcnNbXSA9IHsgMSwgMywgMiwgNSwgMywgNCwgNSwgNiwgOCwgMTAsIDEyLCAxNiwgMjAgfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF90YWJsZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfZGl2X211bHRfdGFibGUgPSB7CiAJLmRpdmlzb3JzID0gZGl2aXNvcnMsCiAJLm5yX2Rpdmlzb3JzID0gQVJSQVlfU0laRShkaXZpc29ycyksCiAJLm11bHRpcGxpZXJzID0gbXVsdGlwbGllcnMsCiAJLm5yX211bHRpcGxpZXJzID0gQVJSQVlfU0laRShtdWx0aXBsaWVycyksCiB9OwogCi1lbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9CMywgRElWNF9QLAotICAgICAgIERJVjRfU0lVQSwgRElWNF9TSVVCLCBESVY0X0lSREEsIERJVjRfTlIgfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgZGl2NF90YWJsZSA9IHsKKwkuZGl2X211bHRfdGFibGUgPSAmZGl2NF9kaXZfbXVsdF90YWJsZSwKK307CisKK2VudW0geyBESVY0X0ksIERJVjRfVSwgRElWNF9TSCwgRElWNF9CLCBESVY0X0IzLCBESVY0X1AsIERJVjRfTlIgfTsKIAogI2RlZmluZSBESVY0KF9zdHIsIF9yZWcsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpIFwKICAgU0hfQ0xLX0RJVjQoX3N0ciwgJnBsbF9jbGssIF9yZWcsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpCkBAIC0xMzAsMTEgKzEzMywyMCBAQAogCVtESVY0X0JdID0gRElWNCgiYnVzX2NsayIsIEZSUUNSLCA4LCAweDBkYmYsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfQjNdID0gRElWNCgiYjNfY2xrIiwgRlJRQ1IsIDQsIDB4MGRiNCwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKIAlbRElWNF9QXSA9IERJVjQoInBlcmlwaGVyYWxfY2xrIiwgRlJRQ1IsIDAsIDB4MGRiZiwgMCksCi0JW0RJVjRfU0lVQV0gPSBESVY0KCJzaXVhX2NsayIsIFNDTEtBQ1IsIDAsIDB4MGRiZiwgMCksCi0JW0RJVjRfU0lVQl0gPSBESVY0KCJzaXViX2NsayIsIFNDTEtCQ1IsIDAsIDB4MGRiZiwgMCksCit9OworCitlbnVtIHsgRElWNF9JUkRBLCBESVY0X0VOQUJMRV9OUiB9OworCitzdHJ1Y3QgY2xrIGRpdjRfZW5hYmxlX2Nsa3NbRElWNF9FTkFCTEVfTlJdID0gewogCVtESVY0X0lSREFdID0gRElWNCgiaXJkYV9jbGsiLCBJUkRBQ0xLQ1IsIDAsIDB4MGRiZiwgMCksCiB9OwogCitlbnVtIHsgRElWNF9TSVVBLCBESVY0X1NJVUIsIERJVjRfUkVQQVJFTlRfTlIgfTsKKworc3RydWN0IGNsayBkaXY0X3JlcGFyZW50X2Nsa3NbRElWNF9SRVBBUkVOVF9OUl0gPSB7CisJW0RJVjRfU0lVQV0gPSBESVY0KCJzaXVhX2NsayIsIFNDTEtBQ1IsIDAsIDB4MGRiZiwgMCksCisJW0RJVjRfU0lVQl0gPSBESVY0KCJzaXViX2NsayIsIFNDTEtCQ1IsIDAsIDB4MGRiZiwgMCksCit9Owogc3RydWN0IGNsayBkaXY2X2Nsa3NbXSA9IHsKIAlTSF9DTEtfRElWNigidmlkZW9fY2xrIiwgJnBsbF9jbGssIFZDTEtDUiwgMCksCiB9OwpAQCAtMjE2LDYgKzIyOCwxNCBAQAogCQlyZXQgPSBzaF9jbGtfZGl2NF9yZWdpc3RlcihkaXY0X2Nsa3MsIERJVjRfTlIsICZkaXY0X3RhYmxlKTsKIAogCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2NF9lbmFibGVfcmVnaXN0ZXIoZGl2NF9lbmFibGVfY2xrcywKKwkJCQkJRElWNF9FTkFCTEVfTlIsICZkaXY0X3RhYmxlKTsKKworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2NF9yZXBhcmVudF9yZWdpc3RlcihkaXY0X3JlcGFyZW50X2Nsa3MsCisJCQkJCURJVjRfUkVQQVJFTlRfTlIsICZkaXY0X3RhYmxlKTsKKworCWlmICghcmV0KQogCQlyZXQgPSBzaF9jbGtfZGl2Nl9yZWdpc3RlcihkaXY2X2Nsa3MsIEFSUkFZX1NJWkUoZGl2Nl9jbGtzKSk7CiAKIAlpZiAoIXJldCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzcyNC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzI0LmMKaW5kZXggOWRiNzQzOC4uNjcwNzA2MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzI0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzI0LmMKQEAgLTEyNywxMyArMTI3LDI4IEBACiAJJmRpdjNfY2xrLAogfTsKIAorc3RhdGljIHZvaWQgZGl2NF9raWNrKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCisJLyogc2V0IEtJQ0sgYml0IGluIEZSUUNSQSB0byB1cGRhdGUgaGFyZHdhcmUgc2V0dGluZyAqLworCXZhbHVlID0gX19yYXdfcmVhZGwoRlJRQ1JBKTsKKwl2YWx1ZSB8PSAoMSA8PCAzMSk7CisJX19yYXdfd3JpdGVsKHZhbHVlLCBGUlFDUkEpOworfQorCiBzdGF0aWMgaW50IGRpdmlzb3JzW10gPSB7IDIsIDMsIDQsIDYsIDgsIDEyLCAxNiwgMCwgMjQsIDMyLCAzNiwgNDgsIDAsIDcyIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfdGFibGUgPSB7CitzdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X2Rpdl9tdWx0X3RhYmxlID0gewogCS5kaXZpc29ycyA9IGRpdmlzb3JzLAogCS5ucl9kaXZpc29ycyA9IEFSUkFZX1NJWkUoZGl2aXNvcnMpLAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGtfZGl2NF90YWJsZSBkaXY0X3RhYmxlID0geworCS5kaXZfbXVsdF90YWJsZSA9ICZkaXY0X2Rpdl9tdWx0X3RhYmxlLAorCS5raWNrID0gZGl2NF9raWNrLAorfTsKKwogZW51bSB7IERJVjRfSSwgRElWNF9TSCwgRElWNF9CLCBESVY0X1AsIERJVjRfTTEsIERJVjRfTlIgfTsKIAogI2RlZmluZSBESVY0KF9zdHIsIF9yZWcsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpIFwKQEAgLTE0NCw3ICsxNTksNyBAQAogCVtESVY0X1NIXSA9IERJVjQoInNoeXdheV9jbGsiLCBGUlFDUkEsIDEyLCAweDJmN2MsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfQl0gPSBESVY0KCJidXNfY2xrIiwgRlJRQ1JBLCA4LCAweDJmN2MsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfUF0gPSBESVY0KCJwZXJpcGhlcmFsX2NsayIsIEZSUUNSQSwgMCwgMHgyZjdjLCAwKSwKLQlbRElWNF9NMV0gPSBESVY0KCJ2cHVfY2xrIiwgRlJRQ1JCLCA0LCAweDJmN2MsIDApLAorCVtESVY0X00xXSA9IERJVjQoInZwdV9jbGsiLCBGUlFDUkIsIDQsIDB4MmY3YywgQ0xLX0VOQUJMRV9PTl9JTklUKSwKIH07CiAKIHN0cnVjdCBjbGsgZGl2Nl9jbGtzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NTcuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc1Ny5jCmluZGV4IGRkYzIzNWMuLjg2YWFlNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc1Ny5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc1Ny5jCkBAIC0zNSw3ICszNSw3IEBACiAKIHN0YXRpYyB2b2lkIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gY3RybF9pbmwoRlJRQ1IpICYgMHgwMDAwMDAwZjsKKwlpbnQgaWR4ID0gX19yYXdfcmVhZGwoRlJRQ1IpICYgMHgwMDAwMDAwZjsKIAljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIHAxZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNDUsNyArNDUsNyBAQAogCiBzdGF0aWMgdm9pZCBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChGUlFDUikgPj4gOCkgJiAweDAwMDAwMDBmOworCWludCBpZHggPSAoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDgpICYgMHgwMDAwMDAwZjsKIAljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGJmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01NSw3ICs1NSw3IEBACiAKIHN0YXRpYyB2b2lkIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW5sKEZSUUNSKSA+PiAyMCkgJiAweDAwMDAwMDBmOworCWludCBpZHggPSAoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDIwKSAmIDB4MDAwMDAwMGY7CiAJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNzgsNyArNzgsNyBAQAogCiBzdGF0aWMgdm9pZCBzaHl3YXlfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChGUlFDUikgPj4gMTIpICYgMHgwMDAwMDAwZjsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiAxMikgJiAweDAwMDAwMDBmOwogCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gc2ZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc2My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzYzLmMKaW5kZXggMzcwY2Q0Ny4uOWY0MDExNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzYzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzYzLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgKj0gcDBmY19kaXZpc29yc1soY3RybF9pbmwoRlJRQ1IpID4+IDQpICYgMHgwN107CisJY2xrLT5yYXRlICo9IHAwZmNfZGl2aXNvcnNbKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiA0KSAmIDB4MDddOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NzYzX21hc3Rlcl9jbGtfb3BzID0gewpAQCAtMzEsNyArMzEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IDQpICYgMHgwNyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDQpICYgMHgwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcDBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC00MSw3ICs0MSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gMTYpICYgMHgwNyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDE2KSAmIDB4MDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGJmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC02OCw3ICs2OCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNoeXdheV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gMjApICYgMHgwNyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDIwKSAmIDB4MDcpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGNmY19kaXZpc29yc1tpZHhdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3NzAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc3MC5jCmluZGV4IGUwYjg5NjcuLjllMzM1NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc3MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc3MC5jCkBAIC0yMSw3ICsyMSw3IEBACiAKIHN0YXRpYyB2b2lkIG1hc3Rlcl9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1soY3RybF9pbmwoRlJRQ1IpID4+IDI4KSAmIDB4MDAwZl07CisJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1soX19yYXdfcmVhZGwoRlJRQ1IpID4+IDI4KSAmIDB4MDAwZl07CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3NzBfbWFzdGVyX2Nsa19vcHMgPSB7CkBAIC0zMCw3ICszMCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gMjgpICYgMHgwMDBmKTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkbChGUlFDUikgPj4gMjgpICYgMHgwMDBmKTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNDAsNyArNDAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChGUlFDUikgJiAweDAwMGYpOworCWludCBpZHggPSAoX19yYXdfcmVhZGwoRlJRQ1IpICYgMHgwMDBmKTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBiZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNTAsNyArNTAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IDI0KSAmIDB4MDAwZik7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDI0KSAmIDB4MDAwZik7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzgwLmMKaW5kZXggYTI0OWQ4Mi4uMTUwOTYzYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3NzgwLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2N0cmxfaW5sKEZSUUNSKSAmIDB4MDAwM107CisJY2xrLT5yYXRlICo9IHBmY19kaXZpc29yc1tfX3Jhd19yZWFkbChGUlFDUikgJiAweDAwMDNdOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NzgwX21hc3Rlcl9jbGtfb3BzID0gewpAQCAtMzEsNyArMzEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9IChjdHJsX2lubChGUlFDUikgJiAweDAwMDMpOworCWludCBpZHggPSAoX19yYXdfcmVhZGwoRlJRQ1IpICYgMHgwMDAzKTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNDEsNyArNDEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IDE2KSAmIDB4MDAwNyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IDE2KSAmIDB4MDAwNyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gYmZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTUxLDcgKzUxLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiAyNCkgJiAweDAwMDEpOworCWludCBpZHggPSAoKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiAyNCkgJiAweDAwMDEpOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC03NCw3ICs3NCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNoeXdheV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gMjApICYgMHgwMDA3KTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkbChGUlFDUikgPj4gMjApICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBjZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODUuYwppbmRleCA3M2FiZmJmLi5kOTk3ZjBhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODUuYwpAQCAtNTcsMTEgKzU3LDE1IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGRpdjJbXSA9IHsgMSwgMiwgNCwgNiwgOCwgMTIsIDE2LCAxOCwKIAkJCSAgICAgICAyNCwgMzIsIDM2LCA0OCB9OwogCi1zdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X3RhYmxlID0geworc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF9kaXZfbXVsdF90YWJsZSA9IHsKIAkuZGl2aXNvcnMgPSBkaXYyLAogCS5ucl9kaXZpc29ycyA9IEFSUkFZX1NJWkUoZGl2MiksCiB9OwogCitzdGF0aWMgc3RydWN0IGNsa19kaXY0X3RhYmxlIGRpdjRfdGFibGUgPSB7CisJLmRpdl9tdWx0X3RhYmxlID0gJmRpdjRfZGl2X211bHRfdGFibGUsCit9OworCiBlbnVtIHsgRElWNF9JLCBESVY0X1UsIERJVjRfU0gsIERJVjRfQiwgRElWNF9ERFIsIERJVjRfR0EsCiAJRElWNF9EVSwgRElWNF9QLCBESVY0X05SIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoNzc4Ni5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKaW5kZXggYTBlODg2OS4uYWY2OWZkNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKQEAgLTMsMTEgKzMsNyBAQAogICoKICAqIFNINzc4NiBzdXBwb3J0IGZvciB0aGUgY2xvY2sgZnJhbWV3b3JrCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgotICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgotICoKLSAqIEJhc2VkIG9uIFNINzc4NQotICogIENvcHlyaWdodCAoQykgMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAxMCAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xNSwxMjcgKzExLDEyNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2ZyZXEuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotc3RhdGljIGludCBpZmNfZGl2aXNvcnNbXSA9IHsgMSwgMiwgNCwgMSB9Owotc3RhdGljIGludCBzZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgNCwgMSB9Owotc3RhdGljIGludCBiZmNfZGl2aXNvcnNbXSA9IHsgMSwgMSwgMSwgMSwgMSwgMTIsIDE2LCAxLAotCQkJICAgICAyNCwgMzIsIDEsIDEsIDEsIDEsIDEsIDEgfTsKLXN0YXRpYyBpbnQgbWZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDQsIDEgfTsKLXN0YXRpYyBpbnQgcGZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDEsIDEsIDEsIDEsIDE2LCAxLAotCQkJICAgICAgMjQsIDMyLCAxLCA0OCwgMSwgMSwgMSwgMSB9OwotCi1zdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQotewotCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbY3RybF9pbmwoRlJRTVIxKSAmIDB4MDAwZl07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfbWFzdGVyX2Nsa19vcHMgPSB7Ci0JLmluaXQJCT0gbWFzdGVyX2Nsa19pbml0LAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCWludCBpZHggPSAoY3RybF9pbmwoRlJRTVIxKSAmIDB4MDAwZik7Ci0JcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfbW9kdWxlX2Nsa19vcHMgPSB7Ci0JLnJlY2FsYwkJPSBtb2R1bGVfY2xrX3JlY2FsYywKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDE2KSAmIDB4MDAwZik7Ci0JcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gYmZjX2Rpdmlzb3JzW2lkeF07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfYnVzX2Nsa19vcHMgPSB7Ci0JLnJlY2FsYwkJPSBidXNfY2xrX3JlY2FsYywKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDI4KSAmIDB4MDAwMyk7Ci0JcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfY3B1X2Nsa19vcHMgPSB7Ci0JLnJlY2FsYwkJPSBjcHVfY2xrX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX29wcyAqc2g3Nzg2X2Nsa19vcHNbXSA9IHsKLQkmc2g3Nzg2X21hc3Rlcl9jbGtfb3BzLAotCSZzaDc3ODZfbW9kdWxlX2Nsa19vcHMsCi0JJnNoNzc4Nl9idXNfY2xrX29wcywKLQkmc2g3Nzg2X2NwdV9jbGtfb3BzLAotfTsKLQotdm9pZCBfX2luaXQgYXJjaF9pbml0X2Nsa19vcHMoc3RydWN0IGNsa19vcHMgKipvcHMsIGludCBpZHgpCi17Ci0JaWYgKGlkeCA8IEFSUkFZX1NJWkUoc2g3Nzg2X2Nsa19vcHMpKQotCQkqb3BzID0gc2g3Nzg2X2Nsa19vcHNbaWR4XTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2h5d2F5X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUU1SMSkgPj4gMjApICYgMHgwMDAzKTsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBzZmNfZGl2aXNvcnNbaWR4XTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9zaHl3YXlfY2xrX29wcyA9IHsKLQkucmVjYWxjCQk9IHNoeXdheV9jbGtfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2g3Nzg2X3NoeXdheV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNoeXdheV9jbGsiLAotCS5mbGFncwkJPSBDTEtfRU5BQkxFX09OX0lOSVQsCi0JLm9wcwkJPSAmc2g3Nzg2X3NoeXdheV9jbGtfb3BzLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZGRyX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUU1SMSkgPj4gMTIpICYgMHgwMDAzKTsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBtZmNfZGl2aXNvcnNbaWR4XTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9kZHJfY2xrX29wcyA9IHsKLQkucmVjYWxjCQk9IGRkcl9jbGtfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2g3Nzg2X2Rkcl9jbGsgPSB7Ci0JLm5hbWUJCT0gImRkcl9jbGsiLAotCS5mbGFncwkJPSBDTEtfRU5BQkxFX09OX0lOSVQsCi0JLm9wcwkJPSAmc2g3Nzg2X2Rkcl9jbGtfb3BzLAotfTsKIAogLyoKLSAqIEFkZGl0aW9uYWwgU0g3Nzg2LXNwZWNpZmljIG9uLWNoaXAgY2xvY2tzIHRoYXQgYXJlbid0IGFscmVhZHkgcGFydCBvZiB0aGUKLSAqIGNsb2NrIGZyYW1ld29yaworICogRGVmYXVsdCByYXRlIGZvciB0aGUgcm9vdCBpbnB1dCBjbG9jaywgcmVzZXQgdGhpcyB3aXRoIGNsa19zZXRfcmF0ZSgpCisgKiBmcm9tIHRoZSBwbGF0Zm9ybSBjb2RlLgogICovCi1zdGF0aWMgc3RydWN0IGNsayAqc2g3Nzg2X29uY2hpcF9jbG9ja3NbXSA9IHsKLQkmc2g3Nzg2X3NoeXdheV9jbGssCi0JJnNoNzc4Nl9kZHJfY2xrLAorc3RhdGljIHN0cnVjdCBjbGsgZXh0YWxfY2xrID0geworCS5uYW1lCQk9ICJleHRhbCIsCisJLmlkCQk9IC0xLAorCS5yYXRlCQk9IDMzMzMzMzMzLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGxsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IG11bHRpcGxpZXI7CisKKwkvKgorCSAqIENsb2NrIG1vZGVzIDAsIDEsIGFuZCAyIHVzZSBhbiB4NjQgbXVsdGlwbGllciBhZ2FpbnN0IFBMTDEsCisJICogd2hpbGUgbW9kZXMgMywgNCwgYW5kIDUgdXNlIGFuIHgzMi4KKwkgKi8KKwltdWx0aXBsaWVyID0gKHNoX212Lm12X21vZGVfcGlucygpICYgMHhmKSA8IDMgPyA2NCA6IDMyOworCisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlICogbXVsdGlwbGllcjsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHBsbF9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gcGxsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbF9jbGsgPSB7CisJLm5hbWUJCT0gInBsbF9jbGsiLAorCS5pZAkJPSAtMSwKKwkub3BzCQk9ICZwbGxfY2xrX29wcywKKwkucGFyZW50CQk9ICZleHRhbF9jbGssCisJLmZsYWdzCQk9IENMS19FTkFCTEVfT05fSU5JVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzW10gPSB7CisJJmV4dGFsX2NsaywKKwkmcGxsX2NsaywKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGl2MltdID0geyAxLCAyLCA0LCA2LCA4LCAxMiwgMTYsIDE4LAorCQkJICAgICAgIDI0LCAzMiwgMzYsIDQ4IH07CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfZGl2X211bHRfdGFibGUgPSB7CisJLmRpdmlzb3JzID0gZGl2MiwKKwkubnJfZGl2aXNvcnMgPSBBUlJBWV9TSVpFKGRpdjIpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfZGl2NF90YWJsZSBkaXY0X3RhYmxlID0geworCS5kaXZfbXVsdF90YWJsZSA9ICZkaXY0X2Rpdl9tdWx0X3RhYmxlLAorfTsKKworZW51bSB7IERJVjRfSSwgRElWNF9TSCwgRElWNF9CLCBESVY0X0REUiwgRElWNF9EVSwgRElWNF9QLCBESVY0X05SIH07CisKKyNkZWZpbmUgRElWNChfc3RyLCBfYml0LCBfbWFzaywgX2ZsYWdzKSBcCisgIFNIX0NMS19ESVY0KF9zdHIsICZwbGxfY2xrLCBGUlFNUjEsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpCisKK3N0cnVjdCBjbGsgZGl2NF9jbGtzW0RJVjRfTlJdID0geworCVtESVY0X1BdID0gRElWNCgicGVyaXBoZXJhbF9jbGsiLCAwLCAweDBiNDAsIDApLAorCVtESVY0X0RVXSA9IERJVjQoImR1X2NsayIsIDQsIDB4MDAxMCwgMCksCisJW0RJVjRfRERSXSA9IERJVjQoImRkcl9jbGsiLCAxMiwgMHgwMDAyLCBDTEtfRU5BQkxFX09OX0lOSVQpLAorCVtESVY0X0JdID0gRElWNCgiYnVzX2NsayIsIDE2LCAweDAzNjAsIENMS19FTkFCTEVfT05fSU5JVCksCisJW0RJVjRfU0hdID0gRElWNCgic2h5d2F5X2NsayIsIDIwLCAweDAwMDIsIENMS19FTkFCTEVfT05fSU5JVCksCisJW0RJVjRfSV0gPSBESVY0KCJjcHVfY2xrIiwgMjgsIDB4MDAwNiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKK307CisKKyNkZWZpbmUgTVNUUENSMAkJMHhmZmM0MDAzMAorI2RlZmluZSBNU1RQQ1IxCQkweGZmYzQwMDM0CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1zdHBfY2xrc1tdID0geworCS8qIE1TVFBDUjAgKi8KKwlTSF9DTEtfTVNUUDMyKCJzY2lmX2ZjayIsIDUsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMjksIDApLAorCVNIX0NMS19NU1RQMzIoInNjaWZfZmNrIiwgNCwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyOCwgMCksCisJU0hfQ0xLX01TVFAzMigic2NpZl9mY2siLCAzLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDI3LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzY2lmX2ZjayIsIDIsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMjYsIDApLAorCVNIX0NMS19NU1RQMzIoInNjaWZfZmNrIiwgMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyNSwgMCksCisJU0hfQ0xLX01TVFAzMigic2NpZl9mY2siLCAwLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDI0LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzc2lfZmNrIiwgMywgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyMywgMCksCisJU0hfQ0xLX01TVFAzMigic3NpX2ZjayIsIDIsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMjIsIDApLAorCVNIX0NMS19NU1RQMzIoInNzaV9mY2siLCAxLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDIxLCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzc2lfZmNrIiwgMCwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAyMCwgMCksCisJU0hfQ0xLX01TVFAzMigiaGFjX2ZjayIsIDEsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMTcsIDApLAorCVNIX0NMS19NU1RQMzIoImhhY19mY2siLCAwLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDE2LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJpMmNfZmNrIiwgMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAxNSwgMCksCisJU0hfQ0xLX01TVFAzMigiaTJjX2ZjayIsIDAsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMTQsIDApLAorCVNIX0NMS19NU1RQMzIoInRtdTlfMTFfZmNrIiwgLTEsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMTEsIDApLAorCVNIX0NMS19NU1RQMzIoInRtdTY3OF9mY2siLCAtMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCAxMCwgMCksCisJU0hfQ0xLX01TVFAzMigidG11MzQ1X2ZjayIsIC0xLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDksIDApLAorCVNIX0NMS19NU1RQMzIoInRtdTAxMl9mY2siLCAtMSwgJmRpdjRfY2xrc1tESVY0X1BdLCBNU1RQQ1IwLCA4LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJzZGlmX2ZjayIsIDEsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgNSwgMCksCisJU0hfQ0xLX01TVFAzMigic2RpZl9mY2siLCAwLCAmZGl2NF9jbGtzW0RJVjRfUF0sIE1TVFBDUjAsIDQsIDApLAorCVNIX0NMS19NU1RQMzIoImhzcGlfZmNrIiwgLTEsICZkaXY0X2Nsa3NbRElWNF9QXSwgTVNUUENSMCwgMiwgMCksCisKKwkvKiBNU1RQQ1IxICovCisJU0hfQ0xLX01TVFAzMigidXNiX2ZjayIsIC0xLCBOVUxMLCBNU1RQQ1IxLCAxMiwgMCksCisJU0hfQ0xLX01TVFAzMigicGNpZV9mY2siLCAyLCBOVUxMLCBNU1RQQ1IxLCAxMCwgMCksCisJU0hfQ0xLX01TVFAzMigicGNpZV9mY2siLCAxLCBOVUxMLCBNU1RQQ1IxLCA5LCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJwY2llX2ZjayIsIDAsIE5VTEwsIE1TVFBDUjEsIDgsIDApLAorCVNIX0NMS19NU1RQMzIoImRtYWNfMTFfNl9mY2siLCAtMSwgTlVMTCwgTVNUUENSMSwgNSwgMCksCisJU0hfQ0xLX01TVFAzMigiZG1hY181XzBfZmNrIiwgLTEsIE5VTEwsIE1TVFBDUjEsIDQsIDApLAorCVNIX0NMS19NU1RQMzIoImR1X2ZjayIsIC0xLCBOVUxMLCBNU1RQQ1IxLCAzLCAwKSwKKwlTSF9DTEtfTVNUUDMyKCJldGhlcl9mY2siLCAtMSwgTlVMTCwgTVNUUENSMSwgMiwgMCksCiB9OwogCiBpbnQgX19pbml0IGFyY2hfY2xrX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgY2xrICpjbGs7CiAJaW50IGksIHJldCA9IDA7CiAKLQljcGdfY2xrX2luaXQoKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbGtzKTsgaSsrKQorCQlyZXQgfD0gY2xrX3JlZ2lzdGVyKGNsa3NbaV0pOwogCi0JY2xrID0gY2xrX2dldChOVUxMLCAibWFzdGVyX2NsayIpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNoNzc4Nl9vbmNoaXBfY2xvY2tzKTsgaSsrKSB7Ci0JCXN0cnVjdCBjbGsgKmNsa3AgPSBzaDc3ODZfb25jaGlwX2Nsb2Nrc1tpXTsKLQotCQljbGtwLT5wYXJlbnQgPSBjbGs7Ci0JCXJldCB8PSBjbGtfcmVnaXN0ZXIoY2xrcCk7Ci0JfQotCi0JY2xrX3B1dChjbGspOworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2NF9yZWdpc3RlcihkaXY0X2Nsa3MsIEFSUkFZX1NJWkUoZGl2NF9jbGtzKSwKKwkJCQkJICAgJmRpdjRfdGFibGUpOworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfbXN0cDMyX3JlZ2lzdGVyKG1zdHBfY2xrcywgQVJSQVlfU0laRShtc3RwX2Nsa3MpKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaHgzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaHgzLmMKaW5kZXggMjNjMjdkMy4uZTc1YzU3YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2h4My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL2Nsb2NrLXNoeDMuYwpAQCAtMzMsNyArMzMsNyBAQAogCiBzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbKGN0cmxfaW5sKEZSUUNSKSA+PiBQRkNfUE9TKSAmIFBGQ19NU0tdOworCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiBQRkNfUE9TKSAmIFBGQ19NU0tdOwogfQogCiBzdGF0aWMgc3RydWN0IGNsa19vcHMgc2h4M19tYXN0ZXJfY2xrX29wcyA9IHsKQEAgLTQyLDcgKzQyLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiBQRkNfUE9TKSAmIFBGQ19NU0spOworCWludCBpZHggPSAoKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiBQRkNfUE9TKSAmIFBGQ19NU0spOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIHBmY19kaXZpc29yc1tpZHhdOwogfQogCkBAIC01Miw3ICs1Miw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFDUikgPj4gQkZDX1BPUykgJiBCRkNfTVNLKTsKKwlpbnQgaWR4ID0gKChfX3Jhd19yZWFkbChGUlFDUikgPj4gQkZDX1BPUykgJiBCRkNfTVNLKTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBiZmNfZGl2aXNvcnNbaWR4XTsKIH0KIApAQCAtNjIsNyArNjIsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaW50IGlkeCA9ICgoY3RybF9pbmwoRlJRQ1IpID4+IElGQ19QT1MpICYgSUZDX01TSyk7CisJaW50IGlkeCA9ICgoX19yYXdfcmVhZGwoRlJRQ1IpID4+IElGQ19QT1MpICYgSUZDX01TSyk7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07CiB9CiAKQEAgLTg1LDcgKzg1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2h5d2F5X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUUNSKSA+PiBDRkNfUE9TKSAmIENGQ19NU0spOworCWludCBpZHggPSAoKF9fcmF3X3JlYWRsKEZSUUNSKSA+PiBDRkNfUE9TKSAmIENGQ19NU0spOwogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGNmY19kaXZpc29yc1tpZHhdOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3NzIyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3NzIyLmMKaW5kZXggY2I5ZDA3Yi4uMDY4OGE3NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzcyMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3MjIuYwpAQCAtMjc4LDYgKzI3OCw3IEBACiAJSElaQThfTENEQywgSElaQThfSElaLAogCUhJWkE3X0xDREMsIEhJWkE3X0hJWiwKIAlISVpBNl9MQ0RDLCBISVpBNl9ISVosCisJSElaQjRfU0lVQSwgSElaQjRfSElaLAogCUhJWkIxX1ZJTywgSElaQjFfSElaLAogCUhJWkIwX1ZJTywgSElaQjBfSElaLAogCUhJWkMxNV9JUlE3LCBISVpDMTVfSElaLApAQCAtNTQ2LDcgKzU0Nyw3IEBACiAJUElOTVVYX0RBVEEoVklPX1ZEMl9NQVJLLCBQU0UzX1ZJTywgTVNFTEI5X1ZJTzIsCiAJCSAgICBISVpCMF9WSU8sIEZPRV9WSU9fVkQyKSwKIAlQSU5NVVhfREFUQShWSU9fSEQyX01BUkssIFBTRTNfVklPLCBNU0VMQjlfVklPMiwKLQkJICAgIEhJWkIxX1ZJTywgSElaQjFfVklPLCBGQ0VfVklPX0hEMiksCisJCSAgICBISVpCMV9WSU8sIEZDRV9WSU9fSEQyKSwKIAlQSU5NVVhfREFUQShWSU9fQ0xLMl9NQVJLLCBQU0UzX1ZJTywgTVNFTEI5X1ZJTzIsCiAJCSAgICBISVpCMV9WSU8sIEZSQl9WSU9fQ0xLMiksCiAKQEAgLTY1OCwxNCArNjU5LDE0IEBACiAJUElOTVVYX0RBVEEoU0RISUNMS19NQVJLLCBTREhJQ0xLKSwKIAogCS8qIFNJVSAtIFBvcnQgQSAqLwotCVBJTk1VWF9EQVRBKFNJVUFPTFJfTUFSSywgUFNDMTNfU0lVQU9MUiwgU0lVQU9MUl9TSU9GMV9TWU5DKSwKLQlQSU5NVVhfREFUQShTSVVBT0JUX01BUkssIFBTQzE0X1NJVUFPQlQsIFNJVUFPQlRfU0lPRjFfU0NLKSwKLQlQSU5NVVhfREFUQShTSVVBSVNMRF9NQVJLLCBQU0MxNV9TSVVBSVNMRCwgU0lVQUlTTERfU0lPRjFfUlhEKSwKLQlQSU5NVVhfREFUQShTSVVBSUxSX01BUkssIFBTQzExX1NJVUFJTFIsIFNJVUFJTFJfU0lPRjFfU1MyKSwKLQlQSU5NVVhfREFUQShTSVVBSUJUX01BUkssIFBTQzEyX1NJVUFJQlQsIFNJVUFJQlRfU0lPRjFfU1MxKSwKLQlQSU5NVVhfREFUQShTSVVBT1NMRF9NQVJLLCBQU0IwX1NJVUFPU0xELCBTSVVBT1NMRF9TSU9GMV9UWEQpLAotCVBJTk1VWF9EQVRBKFNJVU1DS0FfTUFSSywgUFNFMTFfU0lVTUNLQV9TSU9GMV9NQ0ssIFBTQjFfU0lVTUNLQSwgUFRLMCksCi0JUElOTVVYX0RBVEEoU0lVRkNLQV9NQVJLLCBQU0UxMV9TSVVGQ0tBLCBQVEswKSwKKwlQSU5NVVhfREFUQShTSVVBT0xSX01BUkssIFBTQzEzX1NJVUFPTFIsIEhJWkI0X1NJVUEsIFNJVUFPTFJfU0lPRjFfU1lOQyksCisJUElOTVVYX0RBVEEoU0lVQU9CVF9NQVJLLCBQU0MxNF9TSVVBT0JULCBISVpCNF9TSVVBLCBTSVVBT0JUX1NJT0YxX1NDSyksCisJUElOTVVYX0RBVEEoU0lVQUlTTERfTUFSSywgUFNDMTVfU0lVQUlTTEQsIEhJWkI0X1NJVUEsIFNJVUFJU0xEX1NJT0YxX1JYRCksCisJUElOTVVYX0RBVEEoU0lVQUlMUl9NQVJLLCBQU0MxMV9TSVVBSUxSLCBISVpCNF9TSVVBLCBTSVVBSUxSX1NJT0YxX1NTMiksCisJUElOTVVYX0RBVEEoU0lVQUlCVF9NQVJLLCBQU0MxMl9TSVVBSUJULCBISVpCNF9TSVVBLCBTSVVBSUJUX1NJT0YxX1NTMSksCisJUElOTVVYX0RBVEEoU0lVQU9TTERfTUFSSywgUFNCMF9TSVVBT1NMRCwgSElaQjRfU0lVQSwgU0lVQU9TTERfU0lPRjFfVFhEKSwKKwlQSU5NVVhfREFUQShTSVVNQ0tBX01BUkssIFBTRTExX1NJVU1DS0FfU0lPRjFfTUNLLCBISVpCNF9TSVVBLCBQU0IxX1NJVU1DS0EsIFBUSzApLAorCVBJTk1VWF9EQVRBKFNJVUZDS0FfTUFSSywgUFNFMTFfU0lVRkNLQSwgSElaQjRfU0lVQSwgUFRLMCksCiAKIAkvKiBTSVUgLSBQb3J0IEIgKi8KIAlQSU5NVVhfREFUQShTSVVCT0xSX01BUkssIFBTQjExX1NJVUJPTFIsIFNJT1NUUkIxX1NJVUJPTFIpLApAQCAtMTYxMiw3ICsxNjEzLDcgQEAKIAkJMCwgMCwKIAkJMCwgMCwKIAkJMCwgMCwKLQkJMCwgMCwKKwkJSElaQjRfU0lVQSwgSElaQjRfSElaLAogCQkwLCAwLAogCQkwLCAwLAogCQlISVpCMV9WSU8sIEhJWkIxX0hJWiwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKaW5kZXggYjUzMzViNS4uZWYzZjk3OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKQEAgLTQ0Niw2ICs0NDYsOCBAQAogCiBlbnVtIHsKIAlVTlVTRUQ9MCwKKwlFTkFCTEVELAorCURJU0FCTEVELAogCiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LApAQCAtNDYxLDcgKzQ2Myw2IEBACiAJU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0lPRjAsIFNJT0YxLCBTSU8sCiAJRkxDVExfRkxTVEVJLCBGTENUTF9GTEVOREksIEZMQ1RMX0ZMVFJFUTBJLCBGTENUTF9GTFRSRVExSSwKIAlJMkNfQUxJLCBJMkNfVEFDS0ksIEkyQ19XQUlUSSwgSTJDX0RURUksCi0JU0RISTAsIFNESEkxLCBTREhJMiwgU0RISTMsCiAJQ01ULCBUU0lGLCBTSVUsIFRXT0RHLAogCVRNVTAsIFRNVTEsIFRNVTIsCiAJSVJEQSwgSlBVLCBMQ0RDLApAQCAtNDk0LDggKzQ5NSw4IEBACiAJSU5UQ19WRUNUKEZMQ1RMX0ZMVFJFUTBJLCAweGRjMCksIElOVENfVkVDVChGTENUTF9GTFRSRVExSSwgMHhkZTApLAogCUlOVENfVkVDVChJMkNfQUxJLCAweGUwMCksIElOVENfVkVDVChJMkNfVEFDS0ksIDB4ZTIwKSwKIAlJTlRDX1ZFQ1QoSTJDX1dBSVRJLCAweGU0MCksIElOVENfVkVDVChJMkNfRFRFSSwgMHhlNjApLAotCUlOVENfVkVDVChTREhJMCwgMHhlODApLCBJTlRDX1ZFQ1QoU0RISTEsIDB4ZWEwKSwKLQlJTlRDX1ZFQ1QoU0RISTIsIDB4ZWMwKSwgSU5UQ19WRUNUKFNESEkzLCAweGVlMCksCisJSU5UQ19WRUNUKFNESEksIDB4ZTgwKSwgSU5UQ19WRUNUKFNESEksIDB4ZWEwKSwKKwlJTlRDX1ZFQ1QoU0RISSwgMHhlYzApLCBJTlRDX1ZFQ1QoU0RISSwgMHhlZTApLAogCUlOVENfVkVDVChDTVQsIDB4ZjAwKSwgSU5UQ19WRUNUKFRTSUYsIDB4ZjIwKSwKIAlJTlRDX1ZFQ1QoU0lVLCAweGY4MCksIElOVENfVkVDVChUV09ERywgMHhmYTApLAogCUlOVENfVkVDVChUTVUwLCAweDQwMCksIElOVENfVkVDVChUTVUxLCAweDQyMCksCkBAIC01MTMsNyArNTE0LDYgQEAKIAlJTlRDX0dST1VQKEZMQ1RMLCBGTENUTF9GTFNURUksIEZMQ1RMX0ZMRU5ESSwKIAkJICAgRkxDVExfRkxUUkVRMEksIEZMQ1RMX0ZMVFJFUTFJKSwKIAlJTlRDX0dST1VQKEkyQywgSTJDX0FMSSwgSTJDX1RBQ0tJLCBJMkNfV0FJVEksIEkyQ19EVEVJKSwKLQlJTlRDX0dST1VQKFNESEksIFNESEkwLCBTREhJMSwgU0RISTIsIFNESEkzKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBtYXNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC01MzUsNyArNTM1LDcgQEAKIAkgIHsgSTJDX0RURUksIEkyQ19XQUlUSSwgSTJDX1RBQ0tJLCBJMkNfQUxJLAogCSAgICBGTENUTF9GTFRSRVExSSwgRkxDVExfRkxUUkVRMEksIEZMQ1RMX0ZMRU5ESSwgRkxDVExfRkxTVEVJIH0gfSwKIAl7IDB4YTQwODAwYTAsIDB4YTQwODAwZTAsIDgsIC8qIElNUjggLyBJTUNSOCAqLwotCSAgeyBTREhJMywgU0RISTIsIFNESEkxLCBTREhJMCwgMCwgMCwgVFdPREcsIFNJVSB9IH0sCisJICB7IERJU0FCTEVELCBESVNBQkxFRCwgRU5BQkxFRCwgRU5BQkxFRCwgMCwgMCwgVFdPREcsIFNJVSB9IH0sCiAJeyAweGE0MDgwMGE0LCAweGE0MDgwMGU0LCA4LCAvKiBJTVI5IC8gSU1DUjkgKi8KIAkgIHsgMCwgMCwgMCwgQ01ULCAwLCBVU0JfVVNCSTEsIFVTQl9VU0JJMCwgfSB9LAogCXsgMHhhNDA4MDBhOCwgMHhhNDA4MDBlOCwgOCwgLyogSU1SMTAgLyBJTUNSMTAgKi8KQEAgLTU3Myw5ICs1NzMsMTMgQEAKIAkgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0NfQUNLKGludGNfZGVzYywgInNoNzcyMiIsIHZlY3RvcnMsIGdyb3VwcywKLQkJCSAgICAgbWFza19yZWdpc3RlcnMsIHByaW9fcmVnaXN0ZXJzLCBzZW5zZV9yZWdpc3RlcnMsCi0JCQkgICAgIGFja19yZWdpc3RlcnMpOworc3RhdGljIHN0cnVjdCBpbnRjX2Rlc2MgaW50Y19kZXNjIF9faW5pdGRhdGEgPSB7CisJLm5hbWUgPSAic2g3NzIyIiwKKwkuZm9yY2VfZW5hYmxlID0gRU5BQkxFRCwKKwkuZm9yY2VfZGlzYWJsZSA9IERJU0FCTEVELAorCS5odyA9IElOVENfSFdfREVTQyh2ZWN0b3JzLCBncm91cHMsIG1hc2tfcmVnaXN0ZXJzLAorCQkJICAgcHJpb19yZWdpc3RlcnMsIHNlbnNlX3JlZ2lzdGVycywgYWNrX3JlZ2lzdGVycyksCit9OwogCiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYwppbmRleCA3NzJiOTI2Li44NWM2MWY2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYwpAQCAtNTkyLDE0ICs1OTIsMTcgQEAKICNkZWZpbmUgUkFNQ1JfQ0FDSEVfTDJGQwkweDAwMDIKICNkZWZpbmUgUkFNQ1JfQ0FDSEVfTDJFCQkweDAwMDEKICNkZWZpbmUgTDJfQ0FDSEVfRU5BQkxFCQkoUkFNQ1JfQ0FDSEVfTDJFfFJBTUNSX0NBQ0hFX0wyRkMpCi12b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIGwyX2NhY2hlX2luaXQodm9pZCkKKwordm9pZCBsMl9jYWNoZV9pbml0KHZvaWQpCiB7CiAJLyogRW5hYmxlIEwyIGNhY2hlICovCi0JY3RybF9vdXRsKEwyX0NBQ0hFX0VOQUJMRSwgUkFNQ1IpOworCV9fcmF3X3dyaXRlbChMMl9DQUNIRV9FTkFCTEUsIFJBTUNSKTsKIH0KIAogZW51bSB7CiAJVU5VU0VEPTAsCisJRU5BQkxFRCwKKwlESVNBQkxFRCwKIAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKQEAgLTYyMiw3ICs2MjUsNiBAQAogCVNDSUZBX1NDSUZBMSwKIAlGTENUTF9GTFNURUksRkxDVExfRkxURU5ESSxGTENUTF9GTFRSRVEwSSxGTENUTF9GTFRSRVExSSwKIAlJMkNfQUxJLEkyQ19UQUNLSSxJMkNfV0FJVEksSTJDX0RURUksCi0JU0RISTBfU0RISUkwLFNESEkwX1NESElJMSxTREhJMF9TREhJSTIsCiAJQ01UX0NNVEksCiAJVFNJRl9UU0lGSSwKIAlTSVVfU0lVSSwKQEAgLTYzMCw3ICs2MzIsNiBAQAogCVRNVTBfVFVOSTAsIFRNVTBfVFVOSTEsIFRNVTBfVFVOSTIsCiAJSVJEQV9JUkRBSSwKIAlBVEFQSV9BVEFQSUksCi0JU0RISTFfU0RISUkwLFNESEkxX1NESElJMSxTREhJMV9TREhJSTIsCiAJVkVVMkgxX1ZFVTJISSwKIAlMQ0RDX0xDRENJLAogCVRNVTFfVFVOSTAsVE1VMV9UVU5JMSxUTVUxX1RVTkkyLApAQCAtNzAxLDkgKzcwMiw5IEBACiAJSU5UQ19WRUNUKEkyQ19XQUlUSSwweEU0MCksCiAJSU5UQ19WRUNUKEkyQ19EVEVJLDB4RTYwKSwKIAotCUlOVENfVkVDVChTREhJMF9TREhJSTAsMHhFODApLAotCUlOVENfVkVDVChTREhJMF9TREhJSTEsMHhFQTApLAotCUlOVENfVkVDVChTREhJMF9TREhJSTIsMHhFQzApLAorCUlOVENfVkVDVChTREhJMCwgMHhFODApLAorCUlOVENfVkVDVChTREhJMCwgMHhFQTApLAorCUlOVENfVkVDVChTREhJMCwgMHhFQzApLAogCiAJSU5UQ19WRUNUKENNVF9DTVRJLDB4RjAwKSwKIAlJTlRDX1ZFQ1QoVFNJRl9UU0lGSSwweEYyMCksCkBAIC03MTcsOSArNzE4LDkgQEAKIAlJTlRDX1ZFQ1QoSVJEQV9JUkRBSSwweDQ4MCksCiAJSU5UQ19WRUNUKEFUQVBJX0FUQVBJSSwweDRBMCksCiAKLQlJTlRDX1ZFQ1QoU0RISTFfU0RISUkwLDB4NEUwKSwKLQlJTlRDX1ZFQ1QoU0RISTFfU0RISUkxLDB4NTAwKSwKLQlJTlRDX1ZFQ1QoU0RISTFfU0RISUkyLDB4NTIwKSwKKwlJTlRDX1ZFQ1QoU0RISTEsIDB4NEUwKSwKKwlJTlRDX1ZFQ1QoU0RISTEsIDB4NTAwKSwKKwlJTlRDX1ZFQ1QoU0RISTEsIDB4NTIwKSwKIAogCUlOVENfVkVDVChWRVUySDFfVkVVMkhJLDB4NTYwKSwKIAlJTlRDX1ZFQ1QoTENEQ19MQ0RDSSwweDU4MCksCkBAIC03MzgsMTUgKzczOSwxNCBAQAogCUlOVENfR1JPVVAoRkxDVEwsRkxDVExfRkxTVEVJLEZMQ1RMX0ZMVEVOREksRkxDVExfRkxUUkVRMEksRkxDVExfRkxUUkVRMUkpLAogCUlOVENfR1JPVVAoSTJDLEkyQ19BTEksSTJDX1RBQ0tJLEkyQ19XQUlUSSxJMkNfRFRFSSksCiAJSU5UQ19HUk9VUChfMkRHLCBfMkRHX1RSSSxfMkRHX0lOSSxfMkRHX0NFSSksCi0JSU5UQ19HUk9VUChTREhJMSwgU0RISTFfU0RISUkwLFNESEkxX1NESElJMSxTREhJMV9TREhJSTIpLAogCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLFJUQ19QUkksUlRDX0NVSSksCiAJSU5UQ19HUk9VUChETUFDMUIsIERNQUMxQl9ERUk0LERNQUMxQl9ERUk1LERNQUMxQl9EQURFUlIpLAotCUlOVENfR1JPVVAoU0RISTAsU0RISTBfU0RISUkwLFNESEkwX1NESElJMSxTREhJMF9TREhJSTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIG1hc2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKIAl7IDB4YTQwODAwODAsIDB4YTQwODAwYzAsIDgsIC8qIElNUjAgLyBJTUNSMCAqLwotCSAgeyAwLCAgVE1VMV9UVU5JMixUTVUxX1RVTkkxLFRNVTFfVFVOSTAsMCxTREhJMV9TREhJSTIsU0RISTFfU0RISUkxLFNESEkxX1NESElJMH0gfSwKKwkgIHsgMCwgVE1VMV9UVU5JMiwgVE1VMV9UVU5JMSwgVE1VMV9UVU5JMCwKKwkgICAgMCwgRElTQUJMRUQsIEVOQUJMRUQsIEVOQUJMRUQgfSB9LAogCXsgMHhhNDA4MDA4NCwgMHhhNDA4MDBjNCwgOCwgLyogSU1SMSAvIElNQ1IxICovCiAJICB7IFZJT19WT1VJLCBWSU9fVkVVMkhJLFZJT19CRVVJLFZJT19DRVVJLERNQUMwQV9ERUkzLERNQUMwQV9ERUkyLERNQUMwQV9ERUkxLERNQUMwQV9ERUkwIH0gfSwKIAl7IDB4YTQwODAwODgsIDB4YTQwODAwYzgsIDgsIC8qIElNUjIgLyBJTUNSMiAqLwpAQCAtNzYzLDcgKzc2Myw4IEBACiAJICB7IEkyQ19EVEVJLCBJMkNfV0FJVEksIEkyQ19UQUNLSSwgSTJDX0FMSSwKIAkgICAgRkxDVExfRkxUUkVRMUksIEZMQ1RMX0ZMVFJFUTBJLCBGTENUTF9GTFRFTkRJLCBGTENUTF9GTFNURUkgfSB9LAogCXsgMHhhNDA4MDBhMCwgMHhhNDA4MDBlMCwgOCwgLyogSU1SOCAvIElNQ1I4ICovCi0JICB7IDAsU0RISTBfU0RISUkyLFNESEkwX1NESElJMSxTREhJMF9TREhJSTAsMCwwLFNDSUZBX1NDSUZBMixTSVVfU0lVSSB9IH0sCisJICB7IDAsIERJU0FCTEVELCBFTkFCTEVELCBFTkFCTEVELAorCSAgICAwLCAwLCBTQ0lGQV9TQ0lGQTIsIFNJVV9TSVVJIH0gfSwKIAl7IDB4YTQwODAwYTQsIDB4YTQwODAwZTQsIDgsIC8qIElNUjkgLyBJTUNSOSAqLwogCSAgeyAwLCAwLCAwLCBDTVRfQ01USSwgMCwgMCwgVVNCX1VTSTAsMCB9IH0sCiAJeyAweGE0MDgwMGE4LCAweGE0MDgwMGU4LCA4LCAvKiBJTVIxMCAvIElNQ1IxMCAqLwpAQCAtODAzLDkgKzgwNCwxMyBAQAogCSAgeyBJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3IH0gfSwKIH07CiAKLXN0YXRpYyBERUNMQVJFX0lOVENfREVTQ19BQ0soaW50Y19kZXNjLCAic2g3NzIzIiwgdmVjdG9ycywgZ3JvdXBzLAotCQkJICAgICBtYXNrX3JlZ2lzdGVycywgcHJpb19yZWdpc3RlcnMsIHNlbnNlX3JlZ2lzdGVycywKLQkJCSAgICAgYWNrX3JlZ2lzdGVycyk7CitzdGF0aWMgc3RydWN0IGludGNfZGVzYyBpbnRjX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkubmFtZSA9ICJzaDc3MjMiLAorCS5mb3JjZV9lbmFibGUgPSBFTkFCTEVELAorCS5mb3JjZV9kaXNhYmxlID0gRElTQUJMRUQsCisJLmh3ID0gSU5UQ19IV19ERVNDKHZlY3RvcnMsIGdyb3VwcywgbWFza19yZWdpc3RlcnMsCisJCQkgICBwcmlvX3JlZ2lzdGVycywgc2Vuc2VfcmVnaXN0ZXJzLCBhY2tfcmVnaXN0ZXJzKSwKK307CiAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jCmluZGV4IGQzMmY5NmMuLjMxZTM0NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jCkBAIC03MTQsMTQgKzcxNCwxNyBAQAogI2RlZmluZSBSQU1DUl9DQUNIRV9MMkZDCTB4MDAwMgogI2RlZmluZSBSQU1DUl9DQUNIRV9MMkUJCTB4MDAwMQogI2RlZmluZSBMMl9DQUNIRV9FTkFCTEUJCShSQU1DUl9DQUNIRV9MMkV8UkFNQ1JfQ0FDSEVfTDJGQykKLXZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgbDJfY2FjaGVfaW5pdCh2b2lkKQorCit2b2lkIGwyX2NhY2hlX2luaXQodm9pZCkKIHsKIAkvKiBFbmFibGUgTDIgY2FjaGUgKi8KLQljdHJsX291dGwoTDJfQ0FDSEVfRU5BQkxFLCBSQU1DUik7CisJX19yYXdfd3JpdGVsKEwyX0NBQ0hFX0VOQUJMRSwgUkFNQ1IpOwogfQogCiBlbnVtIHsKIAlVTlVTRUQgPSAwLAorCUVOQUJMRUQsCisJRElTQUJMRUQsCiAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCkBAIC03NTAsMTQgKzc1MywxMiBAQAogCUVUSEksCiAJSTJDMV9BTEksIEkyQzFfVEFDS0ksIEkyQzFfV0FJVEksIEkyQzFfRFRFSSwKIAlJMkMwX0FMSSwgSTJDMF9UQUNLSSwgSTJDMF9XQUlUSSwgSTJDMF9EVEVJLAotCVNESEkwX1NESElJMCwgU0RISTBfU0RISUkxLCBTREhJMF9TREhJSTIsIFNESEkwX1NESElJMywKIAlDTVQsCiAJVFNJRiwKIAlGU0ksCiAJU0NJRkE1LAogCVRNVTBfVFVOSTAsIFRNVTBfVFVOSTEsIFRNVTBfVFVOSTIsCiAJSVJEQSwKLQlTREhJMV9TREhJSTAsIFNESEkxX1NESElJMSwgU0RISTFfU0RISUkyLAogCUpQVSwKIAlfMkRETUFDLAogCU1NQ19NTUMySSwgTU1DX01NQzNJLApAQCAtODM5LDEwICs4NDAsMTAgQEAKIAlJTlRDX1ZFQ1QoSTJDMF9XQUlUSSwgMHhFNDApLAogCUlOVENfVkVDVChJMkMwX0RURUksIDB4RTYwKSwKIAotCUlOVENfVkVDVChTREhJMF9TREhJSTAsIDB4RTgwKSwKLQlJTlRDX1ZFQ1QoU0RISTBfU0RISUkxLCAweEVBMCksCi0JSU5UQ19WRUNUKFNESEkwX1NESElJMiwgMHhFQzApLAotCUlOVENfVkVDVChTREhJMF9TREhJSTMsIDB4RUUwKSwKKwlJTlRDX1ZFQ1QoU0RISTAsIDB4RTgwKSwKKwlJTlRDX1ZFQ1QoU0RISTAsIDB4RUEwKSwKKwlJTlRDX1ZFQ1QoU0RISTAsIDB4RUMwKSwKKwlJTlRDX1ZFQ1QoU0RISTAsIDB4RUUwKSwKIAogCUlOVENfVkVDVChDTVQsICAgIDB4RjAwKSwKIAlJTlRDX1ZFQ1QoVFNJRiwgICAweEYyMCksCkBAIC04NTUsOSArODU2LDkgQEAKIAogCUlOVENfVkVDVChJUkRBLCAgICAweDQ4MCksCiAKLQlJTlRDX1ZFQ1QoU0RISTFfU0RISUkwLCAweDRFMCksCi0JSU5UQ19WRUNUKFNESEkxX1NESElJMSwgMHg1MDApLAotCUlOVENfVkVDVChTREhJMV9TREhJSTIsIDB4NTIwKSwKKwlJTlRDX1ZFQ1QoU0RISTEsIDB4NEUwKSwKKwlJTlRDX1ZFQ1QoU0RISTEsIDB4NTAwKSwKKwlJTlRDX1ZFQ1QoU0RISTEsIDB4NTIwKSwKIAogCUlOVENfVkVDVChKUFUsIDB4NTYwKSwKIAlJTlRDX1ZFQ1QoXzJERE1BQywgMHg0QTApLApAQCAtODgzLDggKzg4NCw2IEBACiAJSU5UQ19HUk9VUChETUFDMEIsIERNQUMwQl9ERUk0LCBETUFDMEJfREVJNSwgRE1BQzBCX0RBREVSUiksCiAJSU5UQ19HUk9VUChJMkMwLCBJMkMwX0FMSSwgSTJDMF9UQUNLSSwgSTJDMF9XQUlUSSwgSTJDMF9EVEVJKSwKIAlJTlRDX0dST1VQKEkyQzEsIEkyQzFfQUxJLCBJMkMxX1RBQ0tJLCBJMkMxX1dBSVRJLCBJMkMxX0RURUkpLAotCUlOVENfR1JPVVAoU0RISTAsIFNESEkwX1NESElJMCwgU0RISTBfU0RISUkxLCBTREhJMF9TREhJSTIsIFNESEkwX1NESElJMyksCi0JSU5UQ19HUk9VUChTREhJMSwgU0RISTFfU0RISUkwLCBTREhJMV9TREhJSTEsIFNESEkxX1NESElJMiksCiAJSU5UQ19HUk9VUChTUFUsIFNQVV9TUFVJMCwgU1BVX1NQVUkxKSwKIAlJTlRDX0dST1VQKE1NQ0lGLCBNTUNfTU1DMkksIE1NQ19NTUMzSSksCiB9OwpAQCAtODkyLDcgKzg5MSw3IEBACiBzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgbWFza19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewogCXsgMHhhNDA4MDA4MCwgMHhhNDA4MDBjMCwgOCwgLyogSU1SMCAvIElNQ1IwICovCiAJICB7IDAsIFRNVTFfVFVOSTIsIFRNVTFfVFVOSTEsIFRNVTFfVFVOSTAsCi0JICAgIDAsIFNESEkxX1NESElJMiwgU0RISTFfU0RISUkxLCBTREhJMV9TREhJSTAgfSB9LAorCSAgICAwLCBESVNBQkxFRCwgRU5BQkxFRCwgRU5BQkxFRCB9IH0sCiAJeyAweGE0MDgwMDg0LCAweGE0MDgwMGM0LCA4LCAvKiBJTVIxIC8gSU1DUjEgKi8KIAkgIHsgVklPX1ZPVSwgVklPX1ZFVTEsIFZJT19CRVUwLCBWSU9fQ0VVMCwKIAkgICAgRE1BQzBBX0RFSTMsIERNQUMwQV9ERUkyLCBETUFDMEFfREVJMSwgRE1BQzBBX0RFSTAgfSB9LApAQCAtOTE0LDcgKzkxMyw3IEBACiAJICB7IEkyQzBfRFRFSSwgSTJDMF9XQUlUSSwgSTJDMF9UQUNLSSwgSTJDMF9BTEksCiAJICAgIEkyQzFfRFRFSSwgSTJDMV9XQUlUSSwgSTJDMV9UQUNLSSwgSTJDMV9BTEkgfSB9LAogCXsgMHhhNDA4MDBhMCwgMHhhNDA4MDBlMCwgOCwgLyogSU1SOCAvIElNQ1I4ICovCi0JICB7IFNESEkwX1NESElJMywgU0RISTBfU0RISUkyLCBTREhJMF9TREhJSTEsIFNESEkwX1NESElJMCwKKwkgIHsgRElTQUJMRUQsIERJU0FCTEVELCBFTkFCTEVELCBFTkFCTEVELAogCSAgICAwLCAwLCBTQ0lGQTUsIEZTSSB9IH0sCiAJeyAweGE0MDgwMGE0LCAweGE0MDgwMGU0LCA4LCAvKiBJTVI5IC8gSU1DUjkgKi8KIAkgIHsgMCwgMCwgMCwgQ01ULCAwLCBVU0IxLCBVU0IwLCAwIH0gfSwKQEAgLTk2MSw5ICs5NjAsMTMgQEAKIAkgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0NfQUNLKGludGNfZGVzYywgInNoNzcyNCIsIHZlY3RvcnMsIGdyb3VwcywKLQkJCSAgICAgbWFza19yZWdpc3RlcnMsIHByaW9fcmVnaXN0ZXJzLCBzZW5zZV9yZWdpc3RlcnMsCi0JCQkgICAgIGFja19yZWdpc3RlcnMpOworc3RhdGljIHN0cnVjdCBpbnRjX2Rlc2MgaW50Y19kZXNjIF9faW5pdGRhdGEgPSB7CisJLm5hbWUgPSAic2g3NzI0IiwKKwkuZm9yY2VfZW5hYmxlID0gRU5BQkxFRCwKKwkuZm9yY2VfZGlzYWJsZSA9IERJU0FCTEVELAorCS5odyA9IElOVENfSFdfREVTQyh2ZWN0b3JzLCBncm91cHMsIG1hc2tfcmVnaXN0ZXJzLAorCQkJICAgcHJpb19yZWdpc3RlcnMsIHNlbnNlX3JlZ2lzdGVycywgYWNrX3JlZ2lzdGVycyksCit9OwogCiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzU3LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NTcuYwppbmRleCAzN2UzMmVmLi5lNzVlZGY1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NTcuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NTcuYwpAQCAtNDg3LDE3ICs0ODcsMTcgQEAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCiB7CiAJLyogZGlzYWJsZSBJUlEzLTAgKyBJUlE3LTQgKi8KLQljdHJsX291dGwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKKwlfX3Jhd193cml0ZWwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKIAogCS8qIGRpc2FibGUgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7Ci0JY3RybF9vdXRsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CisJX19yYXdfd3JpdGVsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7CisJX19yYXdfd3JpdGVsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CiAKIAkvKiBzZWxlY3QgSVJMIG1vZGUgZm9yIElSTDMtMCArIElSTDctNCAqLwotCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKIAogCS8qIGRpc2FibGUgaG9sZGluZyBmdW5jdGlvbiwgaWUgZW5hYmxlICJTSC00IE1vZGUiICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwMjAwMDAwLCBJTlRDX0lDUjApOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDIwMDAwMCwgSU5UQ19JQ1IwKTsKIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIH0KQEAgLTUwNywzMiArNTA3LDMyIEBACiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE3NjU0OgogCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDctNCAqLwotCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDA0MDAwMDAsIElOVENfSUNSMCk7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDQwMDAwMCwgSU5UQ19JQ1IwKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxNDU2Nyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJRMzIxMDoKIAkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkwzLTAgKi8KLQkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwODAwMDAwLCBJTlRDX0lDUjApOworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDA4MDAwMDAsIElOVENfSUNSMCk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTAxMjMpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTQ6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMDoKIAkJLyogZW5hYmxlIElSTDAtMyBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0X01BU0s6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lybDQ1NjcpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTBfTUFTSzoKIAkJLyogZW5hYmxlIElSTDAtMyBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsMDEyMyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NjMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCmluZGV4IDZhYmEyNmYuLjdmNmIwYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jCkBAIC01MzgsMTEgKzUzOCwxMSBAQAogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKIAkvKiBkaXNhYmxlIElSUTctMCAqLwotCWN0cmxfb3V0bCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOworCV9fcmF3X3dyaXRlbCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOwogCiAJLyogZGlzYWJsZSBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKLQljdHJsX291dGwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKKwlfX3Jhd193cml0ZWwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKKwlfX3Jhd193cml0ZWwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIH0KQEAgLTU1MiwyNyArNTUyLDI3IEBACiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE6CiAJCS8qIHNlbGVjdCBJUlEgbW9kZSBmb3IgSVJMMy0wICsgSVJMNy00ICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwYzAwMDAwLCBJTlRDX0lDUjApOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfaXJxX2Rlc2MpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTQ6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMDoKIAkJLyogZW5hYmxlIElSTDAtMyBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0X01BU0s6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19pcmw3NjU0X2Rlc2MpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTBfTUFTSzoKIAkJLyogZW5hYmxlIElSTDAtMyBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2lybDMyMTBfZGVzYyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3NzAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc3MC5jCmluZGV4IGMxNjQzYmMuLjg2ZDY4MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc3MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc3MC5jCkBAIC02OTQsMTcgKzY5NCwxNyBAQAogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKIAkvKiBkaXNhYmxlIElSUTctMCAqLwotCWN0cmxfb3V0bCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOworCV9fcmF3X3dyaXRlbCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOwogCiAJLyogZGlzYWJsZSBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKLQljdHJsX291dGwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKKwlfX3Jhd193cml0ZWwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKKwlfX3Jhd193cml0ZWwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKIAogCS8qIHNlbGVjdCBJUkwgbW9kZSBmb3IgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOwogCiAJLyogZGlzYWJsZSBob2xkaW5nIGZ1bmN0aW9uLCBpZSBlbmFibGUgIlNILTQgTW9kZSIgKi8KLQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDAyMDAwMDAsIElOVENfSUNSMCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwMjAwMDAwLCBJTlRDX0lDUjApOwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOwogfQpAQCAtNzE0LDI3ICs3MTQsMjcgQEAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIElSUV9NT0RFX0lSUToKIAkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkwzLTAgKyBJUkw3LTQgKi8KLQkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwYzAwMDAwLCBJTlRDX0lDUjApOworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDBjMDAwMDAsIElOVENfSUNSMCk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19pcnFfZGVzYyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMNzY1NDoKIAkJLyogZW5hYmxlIElSTDctNCBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkwzMjEwOgogCQkvKiBlbmFibGUgSVJMMC0zIGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwotCQljdHJsX291dGwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJX19yYXdfd3JpdGVsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTRfTUFTSzoKIAkJLyogZW5hYmxlIElSTDctNCBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2lybDc2NTRfZGVzYyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMF9NQVNLOgogCQkvKiBlbmFibGUgSVJMMC0zIGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KLQkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfaXJsMzIxMF9kZXNjKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKaW5kZXggYzMxMDU1OC4uZjhmMjE2MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKQEAgLTQ2MSwxNyArNDYxLDE3IEBACiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cCh2b2lkKQogewogCS8qIGRpc2FibGUgSVJRNy0wICovCi0JY3RybF9vdXRsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CisJX19yYXdfd3JpdGVsKDB4ZmYwMDAwMDAsIElOVENfSU5UTVNLMCk7CiAKIAkvKiBkaXNhYmxlIElSTDMtMCArIElSTDctNCAqLwotCWN0cmxfb3V0bCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOwotCWN0cmxfb3V0bCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOworCV9fcmF3X3dyaXRlbCgweGMwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOworCV9fcmF3X3dyaXRlbCgweGZmZmVmZmZlLCBJTlRDX0lOVE1TSzIpOwogCiAJLyogc2VsZWN0IElSTCBtb2RlIGZvciBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CiAKIAkvKiBkaXNhYmxlIGhvbGRpbmcgZnVuY3Rpb24sIGllIGVuYWJsZSAiU0gtNCBNb2RlIiAqLwotCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMDIwMDAwMCwgSU5UQ19JQ1IwKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDAyMDAwMDAsIElOVENfSUNSMCk7CiAKIAlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzYyk7CiB9CkBAIC00ODEsMjcgKzQ4MSwyNyBAQAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgSVJRX01PREVfSVJROgogCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDMtMCArIElSTDctNCAqLwotCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDBjMDAwMDAsIElOVENfSUNSMCk7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2lycV9kZXNjKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0OgogCQkvKiBlbmFibGUgSVJMNy00IGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCi0JCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwotCQljdHJsX291dGwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTA6CiAJCS8qIGVuYWJsZSBJUkwwLTMgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMNzY1NF9NQVNLOgogCQkvKiBlbmFibGUgSVJMNy00IGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfaXJsNzY1NF9kZXNjKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkwzMjEwX01BU0s6CiAJCS8qIGVuYWJsZSBJUkwwLTMgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19pcmwzMjEwX2Rlc2MpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwppbmRleCBmNjg1YjliLi4yMzQ0OGQ4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwpAQCAtNTQxLDE3ICs1NDEsMTcgQEAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCiB7CiAJLyogZGlzYWJsZSBJUlEzLTAgKyBJUlE3LTQgKi8KLQljdHJsX291dGwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKKwlfX3Jhd193cml0ZWwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKIAogCS8qIGRpc2FibGUgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7Ci0JY3RybF9vdXRsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CisJX19yYXdfd3JpdGVsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7CisJX19yYXdfd3JpdGVsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CiAKIAkvKiBzZWxlY3QgSVJMIG1vZGUgZm9yIElSTDMtMCArIElSTDctNCAqLwotCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKIAogCS8qIGRpc2FibGUgaG9sZGluZyBmdW5jdGlvbiwgaWUgZW5hYmxlICJTSC00IE1vZGUiICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwMjAwMDAwLCBJTlRDX0lDUjApOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDIwMDAwMCwgSU5UQ19JQ1IwKTsKIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjKTsKIH0KQEAgLTU2MSwzMiArNTYxLDMyIEBACiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBJUlFfTU9ERV9JUlE3NjU0OgogCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDctNCAqLwotCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDA0MDAwMDAsIElOVENfSUNSMCk7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDQwMDAwMCwgSU5UQ19JQ1IwKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxNDU2Nyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJRMzIxMDoKIAkJLyogc2VsZWN0IElSUSBtb2RlIGZvciBJUkwzLTAgKi8KLQkJY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgfCAweDAwODAwMDAwLCBJTlRDX0lDUjApOworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSB8IDB4MDA4MDAwMDAsIElOVENfSUNSMCk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTAxMjMpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTQ6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYnV0IGRvbid0IHByb3ZpZGUgYW55IG1hc2tpbmcgKi8KLQkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7Ci0JCWN0cmxfb3V0bCgweDAwMDBmZmZlLCBJTlRDX0lOVE1TS0NMUjIpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMDoKIAkJLyogZW5hYmxlIElSTDAtMyBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkw3NjU0X01BU0s6CiAJCS8qIGVuYWJsZSBJUkw3LTQgYW5kIG1hc2sgdXNpbmcgY3B1IGludGMgY29udHJvbGxlciAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJX19yYXdfd3JpdGVsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CiAJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lybDQ1NjcpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDMyMTBfTUFTSzoKIAkJLyogZW5hYmxlIElSTDAtMyBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsMDEyMyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jCmluZGV4IDcxNjczNDguLjdlNTg1MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4Ni5jCkBAIC04NjcsMTQgKzg2NywxNCBAQAogdm9pZCBfX2luaXQgcGxhdF9pcnFfc2V0dXAodm9pZCkKIHsKIAkvKiBkaXNhYmxlIElSUTMtMCArIElSUTctNCAqLwotCWN0cmxfb3V0bCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOworCV9fcmF3X3dyaXRlbCgweGZmMDAwMDAwLCBJTlRDX0lOVE1TSzApOwogCiAJLyogZGlzYWJsZSBJUkwzLTAgKyBJUkw3LTQgKi8KLQljdHJsX291dGwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKLQljdHJsX291dGwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKKwlfX3Jhd193cml0ZWwoMHhjMDAwMDAwMCwgSU5UQ19JTlRNU0sxKTsKKwlfX3Jhd193cml0ZWwoMHhmZmZlZmZmZSwgSU5UQ19JTlRNU0syKTsKIAogCS8qIHNlbGVjdCBJUkwgbW9kZSBmb3IgSVJMMy0wICsgSVJMNy00ICovCi0JY3RybF9vdXRsKGN0cmxfaW5sKElOVENfSUNSMCkgJiB+MHgwMGMwMDAwMCwgSU5UQ19JQ1IwKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19JQ1IwKSAmIH4weDAwYzAwMDAwLCBJTlRDX0lDUjApOwogCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2MpOwogfQpAQCAtODg0LDMyICs4ODQsMzIgQEAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIElSUV9NT0RFX0lSUTc2NTQ6CiAJCS8qIHNlbGVjdCBJUlEgbW9kZSBmb3IgSVJMNy00ICovCi0JCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMDQwMDAwMCwgSU5UQ19JQ1IwKTsKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfSUNSMCkgfCAweDAwNDAwMDAwLCBJTlRDX0lDUjApOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcnE0NTY3KTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUlEzMjEwOgogCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDMtMCAqLwotCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDA4MDAwMDAsIElOVENfSUNSMCk7CisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0lDUjApIHwgMHgwMDgwMDAwMCwgSU5UQ19JQ1IwKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxMDEyMyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMNzY1NDoKIAkJLyogZW5hYmxlIElSTDctNCBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLwotCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKLQkJY3RybF9vdXRsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CisJCV9fcmF3X3dyaXRlbCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0tDTFIyKTsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfTU9ERV9JUkwzMjEwOgogCQkvKiBlbmFibGUgSVJMMC0zIGJ1dCBkb24ndCBwcm92aWRlIGFueSBtYXNraW5nICovCi0JCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwotCQljdHJsX291dGwoMHhmZmZlMDAwMCwgSU5UQ19JTlRNU0tDTFIyKTsKKwkJX19yYXdfd3JpdGVsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweGZmZmUwMDAwLCBJTlRDX0lOVE1TS0NMUjIpOwogCQlicmVhazsKIAljYXNlIElSUV9NT0RFX0lSTDc2NTRfTUFTSzoKIAkJLyogZW5hYmxlIElSTDctNCBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCi0JCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlfX3Jhd193cml0ZWwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKIAkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJsNDU2Nyk7CiAJCWJyZWFrOwogCWNhc2UgSVJRX01PREVfSVJMMzIxMF9NQVNLOgogCQkvKiBlbmFibGUgSVJMMC0zIGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KLQkJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCV9fcmF3X3dyaXRlbCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmwwMTIzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NtcC1zaHgzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zbXAtc2h4My5jCmluZGV4IDU4NjNlMGMuLjExYmY0YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NtcC1zaHgzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc21wLXNoeDMuYwpAQCAtNzgsNyArNzgsMTAgQEAKIAogdm9pZCBwbGF0X3N0YXJ0X2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGVudHJ5X3BvaW50KQogewotCV9fcmF3X3dyaXRlbChlbnRyeV9wb2ludCwgUkVTRVRfUkVHKGNwdSkpOworCWlmIChfX2luXzI5Yml0X21vZGUoKSkKKwkJX19yYXdfd3JpdGVsKGVudHJ5X3BvaW50LCBSRVNFVF9SRUcoY3B1KSk7CisJZWxzZQorCQlfX3Jhd193cml0ZWwodmlydF90b19waHlzKGVudHJ5X3BvaW50KSwgUkVTRVRfUkVHKGNwdSkpOwogCiAJaWYgKCEoX19yYXdfcmVhZGwoU1RCQ1JfUkVHKGNwdSkpICYgU1RCQ1JfTVNUUCkpCiAJCV9fcmF3X3dyaXRlbChTVEJDUl9NU1RQLCBTVEJDUl9SRUcoY3B1KSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS91YmMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3ViYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYjI3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS91YmMuYwpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIGFyY2gvc2gva2VybmVsL2NwdS9zaDRhL3ViYy5jCisgKgorICogT24tY2hpcCBVQkMgc3VwcG9ydCBmb3IgU0gtNEEgQ1BVcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSAyMDEwICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vaHdfYnJlYWtwb2ludC5oPgorCisjZGVmaW5lIFVCQ19DQlIoaWR4KQkoMHhmZjIwMDAwMCArICgweDIwICogaWR4KSkKKyNkZWZpbmUgVUJDX0NSUihpZHgpCSgweGZmMjAwMDA0ICsgKDB4MjAgKiBpZHgpKQorI2RlZmluZSBVQkNfQ0FSKGlkeCkJKDB4ZmYyMDAwMDggKyAoMHgyMCAqIGlkeCkpCisjZGVmaW5lIFVCQ19DQU1SKGlkeCkJKDB4ZmYyMDAwMGMgKyAoMHgyMCAqIGlkeCkpCisKKyNkZWZpbmUgVUJDX0NDTUZSCTB4ZmYyMDA2MDAKKyNkZWZpbmUgVUJDX0NCQ1IJMHhmZjIwMDYyMAorCisvKiBDUlIgKi8KKyNkZWZpbmUgVUJDX0NSUl9QQ0IJKDEgPDwgMSkKKyNkZWZpbmUgVUJDX0NSUl9CSUUJKDEgPDwgMCkKKworLyogQ0JSICovCisjZGVmaW5lIFVCQ19DQlJfQ0UJKDEgPDwgMCkKKworc3RhdGljIHN0cnVjdCBzaF91YmMgc2g0YV91YmM7CisKK3N0YXRpYyB2b2lkIHNoNGFfdWJjX2VuYWJsZShzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvLCBpbnQgaWR4KQoreworCV9fcmF3X3dyaXRlbChVQkNfQ0JSX0NFIHwgaW5mby0+bGVuIHwgaW5mby0+dHlwZSwgVUJDX0NCUihpZHgpKTsKKwlfX3Jhd193cml0ZWwoaW5mby0+YWRkcmVzcywgVUJDX0NBUihpZHgpKTsKK30KKworc3RhdGljIHZvaWQgc2g0YV91YmNfZGlzYWJsZShzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvLCBpbnQgaWR4KQoreworCV9fcmF3X3dyaXRlbCgwLCBVQkNfQ0JSKGlkeCkpOworCV9fcmF3X3dyaXRlbCgwLCBVQkNfQ0FSKGlkeCkpOworfQorCitzdGF0aWMgdm9pZCBzaDRhX3ViY19lbmFibGVfYWxsKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaDRhX3ViYy5udW1fZXZlbnRzOyBpKyspCisJCWlmIChtYXNrICYgKDEgPDwgaSkpCisJCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoVUJDX0NCUihpKSkgfCBVQkNfQ0JSX0NFLAorCQkJCSAgICAgVUJDX0NCUihpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNoNGFfdWJjX2Rpc2FibGVfYWxsKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2g0YV91YmMubnVtX2V2ZW50czsgaSsrKQorCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoVUJDX0NCUihpKSkgJiB+VUJDX0NCUl9DRSwKKwkJCSAgICAgVUJDX0NCUihpKSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNoNGFfdWJjX2FjdGl2ZV9tYXNrKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBhY3RpdmUgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNoNGFfdWJjLm51bV9ldmVudHM7IGkrKykKKwkJaWYgKF9fcmF3X3JlYWRsKFVCQ19DQlIoaSkpICYgVUJDX0NCUl9DRSkKKwkJCWFjdGl2ZSB8PSAoMSA8PCBpKTsKKworCXJldHVybiBhY3RpdmU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNoNGFfdWJjX3RyaWdnZXJlZF9tYXNrKHZvaWQpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKFVCQ19DQ01GUik7Cit9CisKK3N0YXRpYyB2b2lkIHNoNGFfdWJjX2NsZWFyX3RyaWdnZXJlZF9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoVUJDX0NDTUZSKSAmIH5tYXNrLCBVQkNfQ0NNRlIpOworfQorCitzdGF0aWMgc3RydWN0IHNoX3ViYyBzaDRhX3ViYyA9IHsKKwkubmFtZQkJCT0gIlNILTRBIiwKKwkubnVtX2V2ZW50cwkJPSAyLAorCS50cmFwX25yCQk9IDB4MWUwLAorCS5lbmFibGUJCQk9IHNoNGFfdWJjX2VuYWJsZSwKKwkuZGlzYWJsZQkJPSBzaDRhX3ViY19kaXNhYmxlLAorCS5lbmFibGVfYWxsCQk9IHNoNGFfdWJjX2VuYWJsZV9hbGwsCisJLmRpc2FibGVfYWxsCQk9IHNoNGFfdWJjX2Rpc2FibGVfYWxsLAorCS5hY3RpdmVfbWFzawkJPSBzaDRhX3ViY19hY3RpdmVfbWFzaywKKwkudHJpZ2dlcmVkX21hc2sJCT0gc2g0YV91YmNfdHJpZ2dlcmVkX21hc2ssCisJLmNsZWFyX3RyaWdnZXJlZF9tYXNrCT0gc2g0YV91YmNfY2xlYXJfdHJpZ2dlcmVkX21hc2ssCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaDRhX3ViY19pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqdWJjX2ljbGsgPSBjbGtfZ2V0KE5VTEwsICJ1YmMwIik7CisJaW50IGk7CisKKwkvKgorCSAqIFRoZSBVQkMgTVNUUCBiaXQgaXMgb3B0aW9uYWwsIGFzIG5vdCBhbGwgcGxhdGZvcm1zIHdpbGwgaGF2ZQorCSAqIGl0LiBKdXN0IGlnbm9yZSBpdCBpZiB3ZSBjYW4ndCBmaW5kIGl0LgorCSAqLworCWlmIChJU19FUlIodWJjX2ljbGspKQorCQl1YmNfaWNsayA9IE5VTEw7CisKKwljbGtfZW5hYmxlKHViY19pY2xrKTsKKworCV9fcmF3X3dyaXRlbCgwLCBVQkNfQ0JDUik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2g0YV91YmMubnVtX2V2ZW50czsgaSsrKSB7CisJCV9fcmF3X3dyaXRlbCgwLCBVQkNfQ0FNUihpKSk7CisJCV9fcmF3X3dyaXRlbCgwLCBVQkNfQ0JSKGkpKTsKKworCQlfX3Jhd193cml0ZWwoVUJDX0NSUl9CSUUgfCBVQkNfQ1JSX1BDQiwgVUJDX0NSUihpKSk7CisKKwkJLyogZHVtbXkgcmVhZCBmb3Igd3JpdGUgcG9zdGluZyAqLworCQkodm9pZClfX3Jhd19yZWFkbChVQkNfQ1JSKGkpKTsKKwl9CisKKwljbGtfZGlzYWJsZSh1YmNfaWNsayk7CisKKwlzaDRhX3ViYy5jbGsgPSB1YmNfaWNsazsKKworCXJldHVybiByZWdpc3Rlcl9zaF91YmMoJnNoNGFfdWJjKTsKK30KK2FyY2hfaW5pdGNhbGwoc2g0YV91YmNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2Nsb2NrLXNoNS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9jbG9jay1zaDUuYwppbmRleCA3Zjg2NGViLi45Y2ZjMTliIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2Nsb2NrLXNoNS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvY2xvY2stc2g1LmMKQEAgLTI0LDcgKzI0LDcgQEAKIAogc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW5sKGNwcmNfYmFzZSArIDB4MDApID4+IDYpICYgMHgwMDA3OworCWludCBpZHggPSAoX19yYXdfcmVhZGwoY3ByY19iYXNlICsgMHgwMCkgPj4gNikgJiAweDAwMDc7CiAJY2xrLT5yYXRlICo9IGlmY190YWJsZVtpZHhdOwogfQogCkBAIC0zNCw3ICszNCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpbnQgaWR4ID0gKGN0cmxfaW53KGNwcmNfYmFzZSkgPj4gMTIpICYgMHgwMDA3OworCWludCBpZHggPSAoX19yYXdfcmVhZHcoY3ByY19iYXNlKSA+PiAxMikgJiAweDAwMDc7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX3RhYmxlW2lkeF07CiB9CiAKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoY3ByY19iYXNlKSA+PiAzKSAmIDB4MDAwNzsKKwlpbnQgaWR4ID0gKF9fcmF3X3JlYWR3KGNwcmNfYmFzZSkgPj4gMykgJiAweDAwMDc7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX3RhYmxlW2lkeF07CiB9CiAKQEAgLTU0LDcgKzU0LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBpZHggPSAoY3RybF9pbncoY3ByY19iYXNlKSAmIDB4MDAwNyk7CisJaW50IGlkeCA9IChfX3Jhd19yZWFkdyhjcHJjX2Jhc2UpICYgMHgwMDA3KTsKIAlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfdGFibGVbaWR4XTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9lbnRyeS5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9lbnRyeS5TCmluZGV4IDhmMTNmNzMuLjZiODAyOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvZW50cnkuUworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2VudHJ5LlMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCS5yZXB0IDYKIAkJLmxvbmcgZG9fZXhjZXB0aW9uX2Vycm9yCS8qIDB4ODgwIC0gMHg5MjAgKi8KIAkuZW5kcgotCS5sb25nCWRvX3NvZnR3YXJlX2JyZWFrX3BvaW50CS8qIDB4OTQwICovCisJLmxvbmcJYnJlYWtwb2ludF90cmFwX2hhbmRsZXIJLyogMHg5NDAgKi8KIAkubG9uZwlkb19leGNlcHRpb25fZXJyb3IJCS8qIDB4OTYwICovCiAJLmxvbmcJZG9fc2luZ2xlX3N0ZXAJCS8qIDB4OTgwICovCiAKQEAgLTExMjQsNyArMTEyNCw3IEBACiAJcHRhCWl0c19JUlEsIHRyMAogCWJlcWkvbAlyNCwgRVZFTlRfSU5URVJSVVBULCB0cjAKICNpZmRlZiBDT05GSUdfU0hfRlBVCi0JbW92aQlkb19mcHVfc3RhdGVfcmVzdG9yZSwgcjYKKwltb3ZpCWZwdV9zdGF0ZV9yZXN0b3JlX3RyYXBfaGFuZGxlciwgcjYKICNlbHNlCiAJbW92aQlkb19leGNlcHRpb25fZXJyb3IsIHI2CiAjZW5kaWYKQEAgLTExMzUsNyArMTEzNSw3IEBACiAJcHRhCWl0c19JUlEsIHRyMAogCWJlcWkvbAlyNCwgRVZFTlRfSU5URVJSVVBULCB0cjAKICNpZmRlZiBDT05GSUdfU0hfRlBVCi0JbW92aQlkb19mcHVfc3RhdGVfcmVzdG9yZSwgcjYKKwltb3ZpCWZwdV9zdGF0ZV9yZXN0b3JlX3RyYXBfaGFuZGxlciwgcjYKICNlbHNlCiAJbW92aQlkb19leGNlcHRpb25fZXJyb3IsIHI2CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvZnB1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2ZwdS5jCmluZGV4IDQ2NDhjY2UuLjRiM2JiMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvZnB1LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9mcHUuYwpAQCAtMTUsMjQgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vdXNlci5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9mcHUuaD4KLQotLyoKLSAqIEluaXRpYWxseSBsb2FkIHRoZSBGUFUgd2l0aCBzaWduYWxsaW5nIE5BTlMuICBUaGlzIGJpdCBwYXR0ZXJuCi0gKiBoYXMgdGhlIHByb3BlcnR5IHRoYXQgbm8gbWF0dGVyIHdoZXRoZXIgY29uc2lkZXJlZCBhcyBzaW5nbGUgb3IgYXMKLSAqIGRvdWJsZSBwcmVjaXNpb24sIGl0IHN0aWxsIHJlcHJlc2VudHMgYSBzaWduYWxsaW5nIE5BTi4KLSAqLwotI2RlZmluZSBzTkFONjQJCTB4RkZGRkZGRkZGRkZGRkZGRlVMTAotI2RlZmluZSBzTkFOMzIJCTB4RkZGRkZGRkZVTAotCi1zdGF0aWMgdW5pb24gc2hfZnB1X3VuaW9uIGluaXRfZnB1cmVncyA9IHsKLQkuaGFyZCA9IHsKLQkJLmZwX3JlZ3MgPSB7IFswIC4uLiA2M10gPSBzTkFOMzIgfSwKLQkJLmZwc2NyID0gRlBTQ1JfSU5JVAotCX0KLX07CiAKIHZvaWQgc2F2ZV9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CkBAIC03MiwxMiArNTQsMTEgQEAKIAkJICAgICAiZmdldHNjciAgIGZyNjNcblx0IgogCQkgICAgICJmc3QucyAgICAgJTAsICgzMio4KSwgZnI2M1xuXHQiCiAJCTogLyogbm8gb3V0cHV0ICovCi0JCTogInIiICgmdHNrLT50aHJlYWQuZnB1LmhhcmQpCisJCTogInIiICgmdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1KQogCQk6ICJtZW1vcnkiKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1mcGxvYWQoc3RydWN0IHNoX2ZwdV9oYXJkX3N0cnVjdCAqZnByZWdzKQordm9pZCByZXN0b3JlX2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlhc20gdm9sYXRpbGUoImZsZC5wICAgICAlMCwgKDAqOCksIGZwMFxuXHQiCiAJCSAgICAgImZsZC5wICAgICAlMCwgKDEqOCksIGZwMlxuXHQiCkBAIC0xMTYsMTYgKzk3LDExIEBACiAKIAkJICAgICAiZmxkLnAgICAgICUwLCAoMzEqOCksIGZwNjJcblx0IgogCQk6IC8qIG5vIG91dHB1dCAqLwotCQk6ICJyIiAoZnByZWdzKSApOworCQk6ICJyIiAoJnRzay0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSkKKwkJOiAibWVtb3J5Iik7CiB9CiAKLXZvaWQgZnBpbml0KHN0cnVjdCBzaF9mcHVfaGFyZF9zdHJ1Y3QgKmZwcmVncykKLXsKLQkqZnByZWdzID0gaW5pdF9mcHVyZWdzLmhhcmQ7Ci19Ci0KLWFzbWxpbmthZ2Ugdm9pZAotZG9fZnB1X2Vycm9yKHVuc2lnbmVkIGxvbmcgZXgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorYXNtbGlua2FnZSB2b2lkIGRvX2ZwdV9lcnJvcih1bnNpZ25lZCBsb25nIGV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAKQEAgLTEzMywzNSArMTA5LDYgQEAKIAogCXRzay0+dGhyZWFkLnRyYXBfbm8gPSAxMTsKIAl0c2stPnRocmVhZC5lcnJvcl9jb2RlID0gMDsKKwogCWZvcmNlX3NpZyhTSUdGUEUsIHRzayk7CiB9Ci0KLQotYXNtbGlua2FnZSB2b2lkCi1kb19mcHVfc3RhdGVfcmVzdG9yZSh1bnNpZ25lZCBsb25nIGV4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl2b2lkIGRpZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycik7Ci0KLQlpZiAoISB1c2VyX21vZGUocmVncykpCi0JCWRpZSgiRlBVIHVzZWQgaW4ga2VybmVsIiwgcmVncywgZXgpOwotCi0JcmVncy0+c3IgJj0gflNSX0ZEOwotCi0JaWYgKGxhc3RfdGFza191c2VkX21hdGggPT0gY3VycmVudCkKLQkJcmV0dXJuOwotCi0JZW5hYmxlX2ZwdSgpOwotCWlmIChsYXN0X3Rhc2tfdXNlZF9tYXRoICE9IE5VTEwpCi0JCS8qIE90aGVyIHByb2Nlc3NlcyBmcHUgc3RhdGUsIHNhdmUgYXdheSAqLwotCQlzYXZlX2ZwdShsYXN0X3Rhc2tfdXNlZF9tYXRoKTsKLQotICAgICAgICBsYXN0X3Rhc2tfdXNlZF9tYXRoID0gY3VycmVudDsKLSAgICAgICAgaWYgKHVzZWRfbWF0aCgpKSB7Ci0gICAgICAgICAgICAgICAgZnBsb2FkKCZjdXJyZW50LT50aHJlYWQuZnB1LmhhcmQpOwotICAgICAgICB9IGVsc2UgewotCQkvKiBGaXJzdCB0aW1lIEZQVSB1c2VyLiAgKi8KLQkJZnBsb2FkKCZpbml0X2ZwdXJlZ3MuaGFyZCk7Ci0gICAgICAgICAgICAgICAgc2V0X3VzZWRfbWF0aCgpOwotICAgICAgICB9Ci0JZGlzYWJsZV9mcHUoKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3BtLmMKaW5kZXggY2EwMjlhNC4uZTU1OTY4NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3BtLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3BtLmMKQEAgLTMzLDcgKzMzLDggQEAKICNkZWZpbmUgU1VTUF9NT0RFX1NMRUVQCQkoU1VTUF9TSF9TTEVFUCkKICNkZWZpbmUgU1VTUF9NT0RFX1NMRUVQX1NGCShTVVNQX1NIX1NMRUVQIHwgU1VTUF9TSF9TRikKICNkZWZpbmUgU1VTUF9NT0RFX1NUQU5EQllfU0YJKFNVU1BfU0hfU1RBTkRCWSB8IFNVU1BfU0hfU0YpCi0jZGVmaW5lIFNVU1BfTU9ERV9SU1RBTkRCWQkoU1VTUF9TSF9SU1RBTkRCWSB8IFNVU1BfU0hfTU1VIHwgU1VTUF9TSF9TRikKKyNkZWZpbmUgU1VTUF9NT0RFX1JTVEFOREJZX1NGIFwKKwkoU1VTUF9TSF9SU1RBTkRCWSB8IFNVU1BfU0hfTU1VIHwgU1VTUF9TSF9SRUdTIHwgU1VTUF9TSF9TRikKICAvKgogICAqIFUtc3RhbmRieSBtb2RlIGlzIHVuc3VwcG9ydGVkIHNpbmNlIGl0IG5lZWRzIGJvb3Rsb2FkZXIgaGFja3MKICAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9zbGVlcC5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMKaW5kZXggZTlkZDdmYS4uZTZhYWM2NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3NsZWVwLlMKQEAgLTQ4LDggKzQ4LDQ4IEBACiAJc3RjCXNyLCByMAogCW1vdi5sCXIwLCBAKFNIX1NMRUVQX1NSLCByNSkKIAotCS8qIHNhdmUgc3AgKi8KKwkvKiBzYXZlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgdG8gc3RhY2sgaWYgbmVlZGVkICovCisJbW92LmwJQChTSF9TTEVFUF9NT0RFLCByNSksIHIwCisJdHN0CSNTVVNQX1NIX1JFR1MsIHIwCisJYnQJc2tpcF9yZWdzX3NhdmUKKworCXN0cy5sCXByLCBALXIxNQorCW1vdi5sCXIxNCwgQC1yMTUKKwltb3YubAlyMTMsIEAtcjE1CisJbW92LmwJcjEyLCBALXIxNQorCW1vdi5sCXIxMSwgQC1yMTUKKwltb3YubAlyMTAsIEAtcjE1CisJbW92LmwJcjksIEAtcjE1CisJbW92LmwJcjgsIEAtcjE1CisKKwkvKiBtYWtlIHN1cmUgYmFuazAgaXMgc2VsZWN0ZWQsIHNhdmUgbG93IHJlZ2lzdGVycyAqLworCW1vdi5sCXJiX2JpdCwgcjkKKwlub3QJcjksIHI5CisJYnNyCXNldF9zcgorCSBtb3YJIzAsIHIxMAorCisJYnNyCXNhdmVfbG93X3JlZ3MKKwkgbm9wCisKKwkvKiBzd2l0Y2ggdG8gYmFuayAxLCBzYXZlIGxvdyByZWdpc3RlcnMgKi8KKwltb3YubAlyYl9iaXQsIHIxMAorCWJzcglzZXRfc3IKKwkgbW92CSMtMSwgcjkKKworCWJzcglzYXZlX2xvd19yZWdzCisJIG5vcAorCisJLyogc3dpdGNoIGJhY2sgdG8gYmFuayAwICovCisJbW92LmwJcmJfYml0LCByOQorCW5vdAlyOSwgcjkKKwlic3IJc2V0X3NyCisJIG1vdgkjMCwgcjEwCisKK3NraXBfcmVnc19zYXZlOgorCisJLyogc2F2ZSBzcCwgYWxzbyBzZXQgdG8gaW50ZXJuYWwgcmFtICovCiAJbW92LmwJcjE1LCBAKFNIX1NMRUVQX1NQLCByNSkKKwltb3YJcjUsIHIxNQogCiAJLyogc2F2ZSBzdGJjciAqLwogCWJzciAgICAgc2F2ZV9yZWdpc3RlcgpAQCAtNjAsNyArMTAwLDcgQEAKIAl0c3QJI1NVU1BfU0hfTU1VLCByMAogCWJ0CXNraXBfbW11X3NhdmVfZGlzYWJsZQogCi0gICAgICAgLyogc2F2ZSBtbXUgc3RhdGUgKi8KKwkvKiBzYXZlIG1tdSBzdGF0ZSAqLwogCWJzcglzYXZlX3JlZ2lzdGVyCiAJIG1vdgkjU0hfU0xFRVBfUkVHX1BURUgsIHIwCiAKQEAgLTE3Nyw2ICsyMTcsMjkgQEAKIAltb3YubAlAKHIwLCByNSksIHIwCiAJcnRzCiAJIG5vcAorCitzZXRfc3I6CisJc3RjCXNyLCByOAorCWFuZAlyOSwgcjgKKwlvcglyMTAsIHI4CisJbGRjCXI4LCBzcgorCXJ0cworCSBub3AKKworc2F2ZV9sb3dfcmVnczoKKwltb3YubAlyNywgQC1yMTUKKwltb3YubAlyNiwgQC1yMTUKKwltb3YubAlyNSwgQC1yMTUKKwltb3YubAlyNCwgQC1yMTUKKwltb3YubAlyMywgQC1yMTUKKwltb3YubAlyMiwgQC1yMTUKKwltb3YubAlyMSwgQC1yMTUKKwlydHMKKwkgbW92LmwJcjAsIEAtcjE1CisKKwkuYmFsaWduIDQKK3JiX2JpdDoJLmxvbmcJMHgyMDAwMDAwMCAhIFJCPTEKKwogRU5UUlkoc2hfbW9iaWxlX3NsZWVwX2VudGVyX2VuZCkKIAogCS5iYWxpZ24gNApAQCAtMjcwLDYgKzMzMyw0MCBAQAogCWljYmkJQHIwCiAKIHNraXBfcmVzdG9yZV9tbXU6CisKKwkvKiByZXN0b3JlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgaWYgbmVlZGVkICovCisJbW92LmwJQChTSF9TTEVFUF9NT0RFLCByNSksIHIwCisJdHN0CSNTVVNQX1NIX1JFR1MsIHIwCisJYnQJc2tpcF9yZXN0b3JlX3JlZ3MKKworCS8qIHN3aXRjaCB0byBiYW5rIDEsIHJlc3RvcmUgbG93IHJlZ2lzdGVycyAqLworCW1vdi5sCV9yYl9iaXQsIHIxMAorCWJzcglfc2V0X3NyCisJIG1vdgkjLTEsIHI5CisKKwlic3IJcmVzdG9yZV9sb3dfcmVncworCSBub3AKKworCS8qIHN3aXRjaCB0byBiYW5rMCwgcmVzdG9yZSBsb3cgcmVnaXN0ZXJzICovCisJbW92LmwJX3JiX2JpdCwgcjkKKwlub3QJcjksIHI5CisJYnNyCV9zZXRfc3IKKwkgbW92CSMwLCByMTAKKworCWJzcglyZXN0b3JlX2xvd19yZWdzCisJIG5vcAorCisJLyogcmVzdG9yZSB0aGUgcmVzdCBvZiB0aGUgcmVnaXN0ZXJzICovCisJbW92LmwJQHIxNSssIHI4CisJbW92LmwJQHIxNSssIHI5CisJbW92LmwJQHIxNSssIHIxMAorCW1vdi5sCUByMTUrLCByMTEKKwltb3YubAlAcjE1KywgcjEyCisJbW92LmwJQHIxNSssIHIxMworCW1vdi5sCUByMTUrLCByMTQKKwlsZHMubAlAcjE1KywgcHIKKworc2tpcF9yZXN0b3JlX3JlZ3M6CiAJcnRlCiAJIG5vcAogCkBAIC0yODMsNiArMzgwLDI2IEBACiAJcnRzCiAJIG5vcAogCitfc2V0X3NyOgorCXN0YwlzciwgcjgKKwlhbmQJcjksIHI4CisJb3IJcjEwLCByOAorCWxkYwlyOCwgc3IKKwlydHMKKwkgbm9wCisKK3Jlc3RvcmVfbG93X3JlZ3M6CisJbW92LmwJQHIxNSssIHIwCisJbW92LmwJQHIxNSssIHIxCisJbW92LmwJQHIxNSssIHIyCisJbW92LmwJQHIxNSssIHIzCisJbW92LmwJQHIxNSssIHI0CisJbW92LmwJQHIxNSssIHI1CisJbW92LmwJQHIxNSssIHI2CisJcnRzCisJIG1vdi5sCUByMTUrLCByNworCiAJLmJhbGlnbiA0CitfcmJfYml0OgkubG9uZwkweDIwMDAwMDAwICEgUkI9MQogMToJLmxvbmcJfjB4N2ZmCiBFTlRSWShzaF9tb2JpbGVfc2xlZXBfcmVzdW1lX2VuZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2RlYnVndHJhcHMuUyBiL2FyY2gvc2gva2VybmVsL2RlYnVndHJhcHMuUwppbmRleCA1OTE3NDEzLi43YTFiNDZmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9kZWJ1Z3RyYXBzLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZGVidWd0cmFwcy5TCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCiAjaWYgIWRlZmluZWQoQ09ORklHX0tHREIpCi0jZGVmaW5lIGJyZWFrcG9pbnRfdHJhcF9oYW5kbGVyCQlkZWJ1Z190cmFwX2hhbmRsZXIKICNkZWZpbmUgc2luZ2xlc3RlcF90cmFwX2hhbmRsZXIJCWRlYnVnX3RyYXBfaGFuZGxlcgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2R3YXJmLmMgYi9hcmNoL3NoL2tlcm5lbC9kd2FyZi5jCmluZGV4IGU1MTE2ODAuLmJkMWM0OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2R3YXJmLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZHdhcmYuYwpAQCAtMzksMTAgKzM5LDEwIEBACiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmR3YXJmX3JlZ19jYWNoZXA7CiBzdGF0aWMgbWVtcG9vbF90ICpkd2FyZl9yZWdfcG9vbDsKIAotc3RhdGljIExJU1RfSEVBRChkd2FyZl9jaWVfbGlzdCk7CitzdGF0aWMgc3RydWN0IHJiX3Jvb3QgY2llX3Jvb3Q7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGR3YXJmX2NpZV9sb2NrKTsKIAotc3RhdGljIExJU1RfSEVBRChkd2FyZl9mZGVfbGlzdCk7CitzdGF0aWMgc3RydWN0IHJiX3Jvb3QgZmRlX3Jvb3Q7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGR3YXJmX2ZkZV9sb2NrKTsKIAogc3RhdGljIHN0cnVjdCBkd2FyZl9jaWUgKmNhY2hlZF9jaWU7CkBAIC0zMDEsNyArMzAxLDggQEAKICAqLwogc3RhdGljIHN0cnVjdCBkd2FyZl9jaWUgKmR3YXJmX2xvb2t1cF9jaWUodW5zaWduZWQgbG9uZyBjaWVfcHRyKQogewotCXN0cnVjdCBkd2FyZl9jaWUgKmNpZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqKnJiX25vZGUgPSAmY2llX3Jvb3QucmJfbm9kZTsKKwlzdHJ1Y3QgZHdhcmZfY2llICpjaWUgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHdhcmZfY2llX2xvY2ssIGZsYWdzKTsKQEAgLTMxNSwxNiArMzE2LDI0IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2llLCAmZHdhcmZfY2llX2xpc3QsIGxpbmspIHsKLQkJaWYgKGNpZS0+Y2llX3BvaW50ZXIgPT0gY2llX3B0cikgewotCQkJY2FjaGVkX2NpZSA9IGNpZTsKLQkJCWJyZWFrOworCXdoaWxlICgqcmJfbm9kZSkgeworCQlzdHJ1Y3QgZHdhcmZfY2llICpjaWVfdG1wOworCisJCWNpZV90bXAgPSByYl9lbnRyeSgqcmJfbm9kZSwgc3RydWN0IGR3YXJmX2NpZSwgbm9kZSk7CisJCUJVR19PTighY2llX3RtcCk7CisKKwkJaWYgKGNpZV9wdHIgPT0gY2llX3RtcC0+Y2llX3BvaW50ZXIpIHsKKwkJCWNpZSA9IGNpZV90bXA7CisJCQljYWNoZWRfY2llID0gY2llX3RtcDsKKwkJCWdvdG8gb3V0OworCQl9IGVsc2UgeworCQkJaWYgKGNpZV9wdHIgPCBjaWVfdG1wLT5jaWVfcG9pbnRlcikKKwkJCQlyYl9ub2RlID0gJigqcmJfbm9kZSktPnJiX2xlZnQ7CisJCQllbHNlCisJCQkJcmJfbm9kZSA9ICYoKnJiX25vZGUpLT5yYl9yaWdodDsKIAkJfQogCX0KIAotCS8qIENvdWxkbid0IGZpbmQgdGhlIGVudHJ5IGluIHRoZSBsaXN0LiAqLwotCWlmICgmY2llLT5saW5rID09ICZkd2FyZl9jaWVfbGlzdCkKLQkJY2llID0gTlVMTDsKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd2FyZl9jaWVfbG9jaywgZmxhZ3MpOwogCXJldHVybiBjaWU7CkBAIC0zMzYsMjUgKzM0NSwzNCBAQAogICovCiBzdHJ1Y3QgZHdhcmZfZmRlICpkd2FyZl9sb29rdXBfZmRlKHVuc2lnbmVkIGxvbmcgcGMpCiB7Ci0Jc3RydWN0IGR3YXJmX2ZkZSAqZmRlOworCXN0cnVjdCByYl9ub2RlICoqcmJfbm9kZSA9ICZmZGVfcm9vdC5yYl9ub2RlOworCXN0cnVjdCBkd2FyZl9mZGUgKmZkZSA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkd2FyZl9mZGVfbG9jaywgZmxhZ3MpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShmZGUsICZkd2FyZl9mZGVfbGlzdCwgbGluaykgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CisJd2hpbGUgKCpyYl9ub2RlKSB7CisJCXN0cnVjdCBkd2FyZl9mZGUgKmZkZV90bXA7CisJCXVuc2lnbmVkIGxvbmcgdG1wX3N0YXJ0LCB0bXBfZW5kOwogCi0JCXN0YXJ0ID0gZmRlLT5pbml0aWFsX2xvY2F0aW9uOwotCQllbmQgPSBmZGUtPmluaXRpYWxfbG9jYXRpb24gKyBmZGUtPmFkZHJlc3NfcmFuZ2U7CisJCWZkZV90bXAgPSByYl9lbnRyeSgqcmJfbm9kZSwgc3RydWN0IGR3YXJmX2ZkZSwgbm9kZSk7CisJCUJVR19PTighZmRlX3RtcCk7CiAKLQkJaWYgKHBjID49IHN0YXJ0ICYmIHBjIDwgZW5kKQotCQkJYnJlYWs7CisJCXRtcF9zdGFydCA9IGZkZV90bXAtPmluaXRpYWxfbG9jYXRpb247CisJCXRtcF9lbmQgPSBmZGVfdG1wLT5pbml0aWFsX2xvY2F0aW9uICsgZmRlX3RtcC0+YWRkcmVzc19yYW5nZTsKKworCQlpZiAocGMgPCB0bXBfc3RhcnQpIHsKKwkJCXJiX25vZGUgPSAmKCpyYl9ub2RlKS0+cmJfbGVmdDsKKwkJfSBlbHNlIHsKKwkJCWlmIChwYyA8IHRtcF9lbmQpIHsKKwkJCQlmZGUgPSBmZGVfdG1wOworCQkJCWdvdG8gb3V0OworCQkJfSBlbHNlCisJCQkJcmJfbm9kZSA9ICYoKnJiX25vZGUpLT5yYl9yaWdodDsKKwkJfQogCX0KIAotCS8qIENvdWxkbid0IGZpbmQgdGhlIGVudHJ5IGluIHRoZSBsaXN0LiAqLwotCWlmICgmZmRlLT5saW5rID09ICZkd2FyZl9mZGVfbGlzdCkKLQkJZmRlID0gTlVMTDsKLQorb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR3YXJmX2ZkZV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gZmRlOwpAQCAtNTUyLDggKzU3MCw4IEBACiAgKglvbiB0aGUgY2FsbHN0YWNrLiBFYWNoIG9mIHRoZSBsb3dlciAob2xkZXIpIHN0YWNrIGZyYW1lcyBhcmUKICAqCWxpbmtlZCB2aWEgdGhlICJwcmV2IiBtZW1iZXIuCiAgKi8KLXN0cnVjdCBkd2FyZl9mcmFtZSAqIGR3YXJmX3Vud2luZF9zdGFjayh1bnNpZ25lZCBsb25nIHBjLAotCQkJCQlzdHJ1Y3QgZHdhcmZfZnJhbWUgKnByZXYpCitzdHJ1Y3QgZHdhcmZfZnJhbWUgKmR3YXJmX3Vud2luZF9zdGFjayh1bnNpZ25lZCBsb25nIHBjLAorCQkJCSAgICAgICBzdHJ1Y3QgZHdhcmZfZnJhbWUgKnByZXYpCiB7CiAJc3RydWN0IGR3YXJmX2ZyYW1lICpmcmFtZTsKIAlzdHJ1Y3QgZHdhcmZfY2llICpjaWU7CkBAIC03MDgsNiArNzI2LDggQEAKIHN0YXRpYyBpbnQgZHdhcmZfcGFyc2VfY2llKHZvaWQgKmVudHJ5LCB2b2lkICpwLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJCSAgIHVuc2lnbmVkIGNoYXIgKmVuZCwgc3RydWN0IG1vZHVsZSAqbW9kKQogeworCXN0cnVjdCByYl9ub2RlICoqcmJfbm9kZSA9ICZjaWVfcm9vdC5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQ7CiAJc3RydWN0IGR3YXJmX2NpZSAqY2llOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNvdW50OwpAQCAtODAyLDExICs4MjIsMzAgQEAKIAljaWUtPmluaXRpYWxfaW5zdHJ1Y3Rpb25zID0gcDsKIAljaWUtPmluc3RydWN0aW9uc19lbmQgPSBlbmQ7CiAKLQljaWUtPm1vZCA9IG1vZDsKLQogCS8qIEFkZCB0byBsaXN0ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmR3YXJmX2NpZV9sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbCgmY2llLT5saW5rLCAmZHdhcmZfY2llX2xpc3QpOworCisJd2hpbGUgKCpyYl9ub2RlKSB7CisJCXN0cnVjdCBkd2FyZl9jaWUgKmNpZV90bXA7CisKKwkJY2llX3RtcCA9IHJiX2VudHJ5KCpyYl9ub2RlLCBzdHJ1Y3QgZHdhcmZfY2llLCBub2RlKTsKKworCQlwYXJlbnQgPSAqcmJfbm9kZTsKKworCQlpZiAoY2llLT5jaWVfcG9pbnRlciA8IGNpZV90bXAtPmNpZV9wb2ludGVyKQorCQkJcmJfbm9kZSA9ICZwYXJlbnQtPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGNpZS0+Y2llX3BvaW50ZXIgPj0gY2llX3RtcC0+Y2llX3BvaW50ZXIpCisJCQlyYl9ub2RlID0gJnBhcmVudC0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCVdBUk5fT04oMSk7CisJfQorCisJcmJfbGlua19ub2RlKCZjaWUtPm5vZGUsIHBhcmVudCwgcmJfbm9kZSk7CisJcmJfaW5zZXJ0X2NvbG9yKCZjaWUtPm5vZGUsICZjaWVfcm9vdCk7CisKKwlpZiAobW9kICE9IE5VTEwpCisJCWxpc3RfYWRkX3RhaWwoJmNpZS0+bGluaywgJm1vZC0+YXJjaC5jaWVfbGlzdCk7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd2FyZl9jaWVfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC04MTYsNiArODU1LDggQEAKIAkJCSAgIHZvaWQgKnN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJCSAgIHVuc2lnbmVkIGNoYXIgKmVuZCwgc3RydWN0IG1vZHVsZSAqbW9kKQogeworCXN0cnVjdCByYl9ub2RlICoqcmJfbm9kZSA9ICZmZGVfcm9vdC5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQ7CiAJc3RydWN0IGR3YXJmX2ZkZSAqZmRlOwogCXN0cnVjdCBkd2FyZl9jaWUgKmNpZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtODYzLDExICs5MDQsMzggQEAKIAlmZGUtPmluc3RydWN0aW9ucyA9IHA7CiAJZmRlLT5lbmQgPSBlbmQ7CiAKLQlmZGUtPm1vZCA9IG1vZDsKLQogCS8qIEFkZCB0byBsaXN0LiAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZkd2FyZl9mZGVfbG9jaywgZmxhZ3MpOwotCWxpc3RfYWRkX3RhaWwoJmZkZS0+bGluaywgJmR3YXJmX2ZkZV9saXN0KTsKKworCXdoaWxlICgqcmJfbm9kZSkgeworCQlzdHJ1Y3QgZHdhcmZfZmRlICpmZGVfdG1wOworCQl1bnNpZ25lZCBsb25nIHRtcF9zdGFydCwgdG1wX2VuZDsKKwkJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOworCisJCWZkZV90bXAgPSByYl9lbnRyeSgqcmJfbm9kZSwgc3RydWN0IGR3YXJmX2ZkZSwgbm9kZSk7CisKKwkJc3RhcnQgPSBmZGUtPmluaXRpYWxfbG9jYXRpb247CisJCWVuZCA9IGZkZS0+aW5pdGlhbF9sb2NhdGlvbiArIGZkZS0+YWRkcmVzc19yYW5nZTsKKworCQl0bXBfc3RhcnQgPSBmZGVfdG1wLT5pbml0aWFsX2xvY2F0aW9uOworCQl0bXBfZW5kID0gZmRlX3RtcC0+aW5pdGlhbF9sb2NhdGlvbiArIGZkZV90bXAtPmFkZHJlc3NfcmFuZ2U7CisKKwkJcGFyZW50ID0gKnJiX25vZGU7CisKKwkJaWYgKHN0YXJ0IDwgdG1wX3N0YXJ0KQorCQkJcmJfbm9kZSA9ICZwYXJlbnQtPnJiX2xlZnQ7CisJCWVsc2UgaWYgKHN0YXJ0ID49IHRtcF9lbmQpCisJCQlyYl9ub2RlID0gJnBhcmVudC0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCVdBUk5fT04oMSk7CisJfQorCisJcmJfbGlua19ub2RlKCZmZGUtPm5vZGUsIHBhcmVudCwgcmJfbm9kZSk7CisJcmJfaW5zZXJ0X2NvbG9yKCZmZGUtPm5vZGUsICZmZGVfcm9vdCk7CisKKwlpZiAobW9kICE9IE5VTEwpCisJCWxpc3RfYWRkX3RhaWwoJmZkZS0+bGluaywgJm1vZC0+YXJjaC5mZGVfbGlzdCk7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkd2FyZl9mZGVfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC05MTIsMTkgKzk4MCwyOSBAQAogCiBzdGF0aWMgdm9pZCBkd2FyZl91bndpbmRlcl9jbGVhbnVwKHZvaWQpCiB7Ci0Jc3RydWN0IGR3YXJmX2NpZSAqY2llLCAqY2llX3RtcDsKLQlzdHJ1Y3QgZHdhcmZfZmRlICpmZGUsICpmZGVfdG1wOworCXN0cnVjdCByYl9ub2RlICoqZmRlX3JiX25vZGUgPSAmZmRlX3Jvb3QucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqKmNpZV9yYl9ub2RlID0gJmNpZV9yb290LnJiX25vZGU7CiAKIAkvKgogCSAqIERlYWxsb2NhdGUgYWxsIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgRFdBUkYgdW53aW5kZXIuCiAJICogVHJhdmVyc2UgYWxsIHRoZSBGREUvQ0lFIGxpc3RzIGFuZCByZW1vdmUgYW5kIGZyZWUgYWxsIHRoZQogCSAqIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhvc2UgZGF0YSBzdHJ1Y3R1cmVzLgogCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaWUsIGNpZV90bXAsICZkd2FyZl9jaWVfbGlzdCwgbGluaykKLQkJa2ZyZWUoY2llKTsKKwl3aGlsZSAoKmZkZV9yYl9ub2RlKSB7CisJCXN0cnVjdCBkd2FyZl9mZGUgKmZkZTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmZGUsIGZkZV90bXAsICZkd2FyZl9mZGVfbGlzdCwgbGluaykKKwkJZmRlID0gcmJfZW50cnkoKmZkZV9yYl9ub2RlLCBzdHJ1Y3QgZHdhcmZfZmRlLCBub2RlKTsKKwkJcmJfZXJhc2UoKmZkZV9yYl9ub2RlLCAmZmRlX3Jvb3QpOwogCQlrZnJlZShmZGUpOworCX0KKworCXdoaWxlICgqY2llX3JiX25vZGUpIHsKKwkJc3RydWN0IGR3YXJmX2NpZSAqY2llOworCisJCWNpZSA9IHJiX2VudHJ5KCpjaWVfcmJfbm9kZSwgc3RydWN0IGR3YXJmX2NpZSwgbm9kZSk7CisJCXJiX2VyYXNlKCpjaWVfcmJfbm9kZSwgJmNpZV9yb290KTsKKwkJa2ZyZWUoY2llKTsKKwl9CiAKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZHdhcmZfcmVnX2NhY2hlcCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGR3YXJmX2ZyYW1lX2NhY2hlcCk7CkBAIC0xMDI0LDYgKzExMDIsOCBAQAogCiAJLyogRGlkIHdlIGZpbmQgdGhlIC5laF9mcmFtZSBzZWN0aW9uPyAqLwogCWlmIChpICE9IGhkci0+ZV9zaG51bSkgeworCQlJTklUX0xJU1RfSEVBRCgmbWUtPmFyY2guY2llX2xpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmbWUtPmFyY2guZmRlX2xpc3QpOwogCQllcnIgPSBkd2FyZl9wYXJzZV9zZWN0aW9uKChjaGFyICopc3RhcnQsIChjaGFyICopZW5kLCBtZSk7CiAJCWlmIChlcnIpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmYWlsZWQgdG8gcGFyc2UgRFdBUkYgaW5mb1xuIiwKQEAgLTEwNDQsMzggKzExMjQsMjYgQEAKICAqLwogdm9pZCBtb2R1bGVfZHdhcmZfY2xlYW51cChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0Jc3RydWN0IGR3YXJmX2ZkZSAqZmRlOwotCXN0cnVjdCBkd2FyZl9jaWUgKmNpZTsKKwlzdHJ1Y3QgZHdhcmZfZmRlICpmZGUsICpmdG1wOworCXN0cnVjdCBkd2FyZl9jaWUgKmNpZSwgKmN0bXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkd2FyZl9jaWVfbG9jaywgZmxhZ3MpOwogCi1hZ2Fpbl9jaWU6Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjaWUsICZkd2FyZl9jaWVfbGlzdCwgbGluaykgewotCQlpZiAoY2llLT5tb2QgPT0gbW9kKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKCZjaWUtPmxpbmsgIT0gJmR3YXJmX2NpZV9saXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNpZSwgY3RtcCwgJm1vZC0+YXJjaC5jaWVfbGlzdCwgbGluaykgewogCQlsaXN0X2RlbCgmY2llLT5saW5rKTsKKwkJcmJfZXJhc2UoJmNpZS0+bm9kZSwgJmNpZV9yb290KTsKIAkJa2ZyZWUoY2llKTsKLQkJZ290byBhZ2Fpbl9jaWU7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdhcmZfY2llX2xvY2ssIGZsYWdzKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkd2FyZl9mZGVfbG9jaywgZmxhZ3MpOwogCi1hZ2Fpbl9mZGU6Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShmZGUsICZkd2FyZl9mZGVfbGlzdCwgbGluaykgewotCQlpZiAoZmRlLT5tb2QgPT0gbW9kKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKCZmZGUtPmxpbmsgIT0gJmR3YXJmX2ZkZV9saXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZkZSwgZnRtcCwgJm1vZC0+YXJjaC5mZGVfbGlzdCwgbGluaykgewogCQlsaXN0X2RlbCgmZmRlLT5saW5rKTsKKwkJcmJfZXJhc2UoJmZkZS0+bm9kZSwgJmZkZV9yb290KTsKIAkJa2ZyZWUoZmRlKTsKLQkJZ290byBhZ2Fpbl9mZGU7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHdhcmZfZmRlX2xvY2ssIGZsYWdzKTsKQEAgLTEwOTQsOCArMTE2Miw2IEBACiBzdGF0aWMgaW50IF9faW5pdCBkd2FyZl91bndpbmRlcl9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKLQlJTklUX0xJU1RfSEVBRCgmZHdhcmZfY2llX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZkd2FyZl9mZGVfbGlzdCk7CiAKIAlkd2FyZl9mcmFtZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZHdhcmZfZnJhbWVzIiwKIAkJCXNpemVvZihzdHJ1Y3QgZHdhcmZfZnJhbWUpLCAwLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL3NoL2tlcm5lbC9lYXJseV9wcmludGsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhiYjUwYy4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2tlcm5lbC9lYXJseV9wcmludGsuYworKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBhcmNoL3NoL2tlcm5lbC9lYXJseV9wcmludGsuYwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIE5paWJlIFl1dGFrYQotICogIENvcHlyaWdodCAoQykgMjAwMiAgTS4gUi4gQnJvd24KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA3ICBQYXVsIE11bmR0Ci0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotI2luY2x1ZGUgPGFzbS9zaF9iaW9zLmg+Ci0KLS8qCi0gKglQcmludCBhIHN0cmluZyB0aHJvdWdoIHRoZSBCSU9TCi0gKi8KLXN0YXRpYyB2b2lkIHNoX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzLAotCQkJCSB1bnNpZ25lZCBjb3VudCkKLXsKLQlzaF9iaW9zX2NvbnNvbGVfd3JpdGUocywgY291bnQpOwotfQotCi0vKgotICoJU2V0dXAgaW5pdGlhbCBiYXVkL2JpdHMvcGFyaXR5LiBXZSBkbyB0d28gdGhpbmdzIGhlcmU6Ci0gKgktIGNvbnN0cnVjdCBhIGNmbGFnIHNldHRpbmcgZm9yIHRoZSBmaXJzdCByc19vcGVuKCkKLSAqCS0gaW5pdGlhbGl6ZSB0aGUgc2VyaWFsIHBvcnQKLSAqCVJldHVybiBub24temVybyBpZiB3ZSBkaWRuJ3QgZmluZCBhIHNlcmlhbCBwb3J0LgotICovCi1zdGF0aWMgaW50IF9faW5pdCBzaF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKLXsKLQlpbnQJY2ZsYWcgPSBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOwotCi0JLyoKLQkgKglOb3cgY29uc3RydWN0IGEgY2ZsYWcgc2V0dGluZy4KLQkgKglUT0RPOiB0aGlzIGlzIGEgdG90YWxseSBib2d1cyBjZmxhZywgYXMgd2UgaGF2ZQotCSAqCW5vIGlkZWEgd2hhdCBzZXJpYWwgc2V0dGluZ3MgdGhlIEJJT1MgaXMgdXNpbmcsIG9yCi0JICoJZXZlbiBpZiBpdHMgdXNpbmcgdGhlIHNlcmlhbCBwb3J0IGF0IGFsbC4KLQkgKi8KLQljZmxhZyB8PSBCMTE1MjAwIHwgQ1M4IHwgLypubyBwYXJpdHkqLzA7Ci0KLQljby0+Y2ZsYWcgPSBjZmxhZzsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGNvbnNvbGUgYmlvc19jb25zb2xlID0gewotCS5uYW1lCQk9ICJiaW9zIiwKLQkud3JpdGUJCT0gc2hfY29uc29sZV93cml0ZSwKLQkuc2V0dXAJCT0gc2hfY29uc29sZV9zZXR1cCwKLQkuZmxhZ3MJCT0gQ09OX1BSSU5UQlVGRkVSLAotCS5pbmRleAkJPSAtMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY29uc29sZSAqZWFybHlfY29uc29sZTsKLQotc3RhdGljIGludCBfX2luaXQgc2V0dXBfZWFybHlfcHJpbnRrKGNoYXIgKmJ1ZikKLXsKLQlpbnQga2VlcF9lYXJseSA9IDA7Ci0KLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoc3Ryc3RyKGJ1ZiwgImtlZXAiKSkKLQkJa2VlcF9lYXJseSA9IDE7Ci0KLQlpZiAoIXN0cm5jbXAoYnVmLCAiYmlvcyIsIDQpKQotCQllYXJseV9jb25zb2xlID0gJmJpb3NfY29uc29sZTsKLQotCWlmIChsaWtlbHkoZWFybHlfY29uc29sZSkpIHsKLQkJaWYgKGtlZXBfZWFybHkpCi0JCQllYXJseV9jb25zb2xlLT5mbGFncyAmPSB+Q09OX0JPT1Q7Ci0JCWVsc2UKLQkJCWVhcmx5X2NvbnNvbGUtPmZsYWdzIHw9IENPTl9CT09UOwotCQlyZWdpc3Rlcl9jb25zb2xlKGVhcmx5X2NvbnNvbGUpOwotCX0KLQotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImVhcmx5cHJpbnRrIiwgc2V0dXBfZWFybHlfcHJpbnRrKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMKaW5kZXggYTQ4Y2RlZC4uMzBlMTMxOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMKQEAgLTM5OSwxMiArMzk5LDMgQEAKIAl9CiB9CiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLwotCi0jaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKnN5c19jYWxsX3RhYmxlOwotCi11bnNpZ25lZCBsb25nIF9faW5pdCBhcmNoX3N5c2NhbGxfYWRkcihpbnQgbnIpCi17Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nKXN5c19jYWxsX3RhYmxlW25yXTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfRlRSQUNFX1NZU0NBTExTICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3NoL2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggMTE1MWVjZC4uZmUwYjc0MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gvc2gva2VybmVsL2hlYWRfMzIuUwpAQCAtMyw2ICszLDcgQEAKICAqICBhcmNoL3NoL2tlcm5lbC9oZWFkLlMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBOaWliZSBZdXRha2EgJiBLYXogS29qaW1hCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwICBNYXR0IEZsZW1pbmcKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMTMsNiArMTQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGNwdS9tbXVfY29udGV4dC5oPgogCiAjaWZkZWYgQ09ORklHX0NQVV9TSDRBCiAjZGVmaW5lIFNZTkNPKCkJCXN5bmNvCkBAIC0zMyw3ICszNiw3IEBACiAJLmxvbmcJMQkJLyogTE9BREVSX1RZUEUgKi8KIAkubG9uZwkweDAwMDAwMDAwCS8qIElOSVRSRF9TVEFSVCAqLwogCS5sb25nCTB4MDAwMDAwMDAJLyogSU5JVFJEX1NJWkUgKi8KLSNpZiBkZWZpbmVkKENPTkZJR18zMkJJVCkgJiYgZGVmaW5lZChDT05GSUdfUE1CX0ZJWEVEKQorI2lmZGVmIENPTkZJR18zMkJJVAogCS5sb25nCTB4NTM0NTNmMDAgKyAzMgkvKiAiU0U/IiA9IDMyIGJpdCAqLwogI2Vsc2UKIAkubG9uZwkweDUzNDUzZjAwICsgMjkJLyogIlNFPyIgPSAyOSBiaXQgKi8KQEAgLTgyLDYgKzg1LDIwOSBAQAogCWxkYwlyMCwgcjdfYmFuawkhIC4uLiBhbmQgaW5pdGlhbCB0aHJlYWRfaW5mbwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUE1CCisvKgorICogUmVjb25maWd1cmUgdGhlIGluaXRpYWwgUE1CIG1hcHBpbmdzIHNldHVwIGJ5IHRoZSBoYXJkd2FyZS4KKyAqCisgKiBXaGVuIHdlIGJvb3QgaW4gMzItYml0IE1NVSBtb2RlIHRoZXJlIGFyZSAyIFBNQiBlbnRyaWVzIGFscmVhZHkKKyAqIHNldHVwIGZvciB1cy4KKyAqCisgKiBFbnRyeSAgICAgICBWUE4JICAgUFBOCSAgICBWCVNaCUMJVUIJV1QKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAwCSAgICAweDgwMDAwMDAwIDB4MDAwMDAwMDAgICAxICA1MTJNQgkxCTAJMQorICogICAxCSAgICAweEEwMDAwMDAwIDB4MDAwMDAwMDAgICAxICA1MTJNQgkwCTAJMAorICoKKyAqIEJ1dCB3ZSByZXByb2dyYW0gdGhlbSBoZXJlIGJlY2F1c2Ugd2Ugd2FudCBjb21wbGV0ZSBjb250cm9sIG92ZXIKKyAqIG91ciBhZGRyZXNzIHNwYWNlIGFuZCB0aGUgaW5pdGlhbCBtYXBwaW5ncyBtYXkgbm90IG1hcCBQQUdFX09GRlNFVAorICogdG8gX19NRU1PUllfU1RBUlQgKG9yIGV2ZW4gbWFwIGFsbCBvZiBvdXIgUkFNKS4KKyAqCisgKiBPbmNlIHdlJ3ZlIHNldHVwIGNhY2hlZCBhbmQgdW5jYWNoZWQgbWFwcGluZ3Mgd2UgY2xlYXIgdGhlIHJlc3Qgb2YgdGhlCisgKiBQTUIgZW50cmllcy4gVGhpcyBjbGVhcmluZyBhbHNvIGRlYWxzIHdpdGggdGhlIGZhY3QgdGhhdCBQTUIgZW50cmllcworICogY2FuIHBlcnNpc3QgYWNyb3NzIHJlYm9vdHMuIFRoZSBQTUIgY291bGQgaGF2ZSBiZWVuIGxlZnQgaW4gYW55IHN0YXRlCisgKiB3aGVuIHRoZSByZWJvb3Qgb2NjdXJyZWQsIHNvIHRvIGJlIHNhZmUgd2UgY2xlYXIgYWxsIGVudHJpZXMgYW5kIHN0YXJ0CisgKiB3aXRoIHdpdGggYSBjbGVhbiBzbGF0ZS4KKyAqCisgKiBUaGUgdW5jYWNoZWQgbWFwcGluZyBpcyBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgc21hbGxlc3QgcG9zc2libGUKKyAqIG1hcHBpbmcgd2l0aCBhIHNpbmdsZSB1bmJ1ZmZlcmFibGUgcGFnZS4gT25seSB0aGUga2VybmVsIHRleHQgbmVlZHMgdG8KKyAqIGJlIGNvdmVyZWQgdmlhIHRoZSB1bmNhY2hlZCBtYXBwaW5nIHNvIHRoYXQgY2VydGFpbiBmdW5jdGlvbnMgY2FuIGJlCisgKiBydW4gdW5jYWNoZWQuCisgKgorICogRHJpdmVycyBhbmQgdGhlIGxpa2UgdGhhdCBoYXZlIHByZXZpb3VzbHkgYWJ1c2VkIHRoZSAxOjEgaWRlbnRpdHkKKyAqIG1hcHBpbmcgYXJlIHVuc3VwcG9ydGVkIGluIDMyLWJpdCBtb2RlIGFuZCBtdXN0IHNwZWNpZnkgdGhlaXIgY2FjaGluZworICogcHJlZmVyZW5jZSB3aGVuIHBhZ2UgdGFibGVzIGFyZSBjb25zdHJ1Y3RlZC4KKyAqCisgKiBUaGlzIGZyZWVzIHVwIHRoZSBQMiBzcGFjZSBmb3IgbW9yZSBuZWZhcmlvdXMgcHVycG9zZXMuCisgKgorICogUmVnaXN0ZXIgdXRpbGl6YXRpb24gaXMgYXMgZm9sbG93czoKKyAqCisgKglyMCA9IFBNQl9EQVRBIGRhdGEgZmllbGQKKyAqCXIxID0gUE1CX0RBVEEgYWRkcmVzcyBmaWVsZAorICoJcjIgPSBQTUJfQUREUiBkYXRhIGZpZWxkCisgKglyMyA9IFBNQl9BRERSIGFkZHJlc3MgZmllbGQKKyAqCXI0ID0gUE1CX0VfU0hJRlQKKyAqCXI1ID0gcmVtYWluaW5nIGFtb3VudCBvZiBSQU0gdG8gbWFwCisgKglyNiA9IFBNQiBtYXBwaW5nIHNpemUgd2UncmUgdHJ5aW5nIHRvIHVzZQorICoJcjcgPSBjYWNoZWRfdG9fdW5jYWNoZWQKKyAqCXI4ID0gc2NyYXRjaCByZWdpc3RlcgorICoJcjkgPSBzY3JhdGNoIHJlZ2lzdGVyCisgKglyMTAgPSBudW1iZXIgb2YgUE1CIGVudHJpZXMgd2UndmUgc2V0dXAKKyAqLworCisJbW92LmwJLkxNTVVDUiwgcjEJLyogRmx1c2ggdGhlIFRMQiAqLworCW1vdi5sCUByMSwgcjAKKwlvcgkjTU1VQ1JfVEksIHIwCisJbW92LmwJcjAsIEByMQorCisJbW92LmwJLkxNRU1PUllfU0laRSwgcjUKKworCW1vdgkjUE1CX0VfU0hJRlQsIHIwCisJbW92CSMweDEsIHI0CisJc2hsZAlyMCwgcjQKKworCW1vdi5sCS5MRklSU1RfREFUQV9FTlRSWSwgcjAKKwltb3YubAkuTFBNQl9EQVRBLCByMQorCW1vdi5sCS5MRklSU1RfQUREUl9FTlRSWSwgcjIKKwltb3YubAkuTFBNQl9BRERSLCByMworCisJLyoKKwkgKiBGaXJzdCB3ZSBuZWVkIHRvIHdhbGsgdGhlIFBNQiBhbmQgZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55CisJICogZXhpc3RpbmcgbWFwcGluZ3MgdGhhdCBtYXRjaCB0aGUgaW5pdGlhbCBtYXBwaW5ncyBWUE4vUFBOLgorCSAqIElmIHRoZXNlIGhhdmUgYWxyZWFkeSBiZWVuIGVzdGFibGlzaGVkIGJ5IHRoZSBib290bG9hZGVyLCB3ZQorCSAqIGRvbid0IGJvdGhlciBzZXR0aW5nIHVwIG5ldyBlbnRyaWVzIGhlcmUsIGFuZCBsZXQgdGhlIGxhdGUgUE1CCisJICogaW5pdGlhbGl6YXRpb24gdGFrZSBjYXJlIG9mIHRoaW5ncyBpbnN0ZWFkLgorCSAqCisJICogTm90ZSB0aGF0IHdlIG1heSBuZWVkIHRvIGNvYWxlc2NlIGFuZCBtZXJnZSBlbnRyaWVzIGluIG9yZGVyCisJICogdG8gcmVjbGFpbSBtb3JlIGF2YWlsYWJsZSBQTUIgc2xvdHMsIHdoaWNoIGlzIG11Y2ggbW9yZSB0aGFuCisJICogd2Ugd2FudCB0byBkbyBhdCB0aGlzIGVhcmx5IHN0YWdlLgorCSAqLworCW1vdgkjMCwgcjEwCisJbW92CSNOUl9QTUJfRU5UUklFUywgcjkKKworCW1vdglyMSwgcjcJCS8qIHRlbXBvcmFyeSBQTUJfREFUQSBpdGVyICovCisKKy5MdmFsaWRhdGVfZXhpc3RpbmdfbWFwcGluZ3M6CisKKwltb3YubAlAcjcsIHI4CisJYW5kCXIwLCByOAorCWNtcC9lcQlyMCwgcjgJCS8qIENoZWNrIGZvciB2YWxpZCBfX01FTU9SWV9TVEFSVCBtYXBwaW5ncyAqLworCWJ0CS5McG1iX2RvbmUKKworCWFkZAkjMSwgcjEwCQkvKiBJbmNyZW1lbnQgdGhlIGxvb3AgY291bnRlciAqLworCWNtcC9lcQlyOSwgcjEwCisJYmYvcwkuTHZhbGlkYXRlX2V4aXN0aW5nX21hcHBpbmdzCisJIGFkZAlyNCwgcjcJCS8qIEluY3JlbWVudCB0byB0aGUgbmV4dCBQTUJfREFUQSBlbnRyeSAqLworCisJLyoKKwkgKiBJZiB3ZSd2ZSBmYWxsZW4gdGhyb3VnaCwgY29udGludWUgd2l0aCBzZXR0aW5nIHVwIHRoZSBpbml0aWFsCisJICogbWFwcGluZ3MuCisJICovCisKKwltb3YJcjUsIHI3CQkvKiBjYWNoZWRfdG9fdW5jYWNoZWQgKi8KKwltb3YJIzAsIHIxMAorCisjaWZkZWYgQ09ORklHX1VOQ0FDSEVEX01BUFBJTkcKKwkvKgorCSAqIFVuY2FjaGVkIG1hcHBpbmcKKwkgKi8KKwltb3YJIyhQTUJfU1pfMTZNID4+IDIpLCByOQorCXNobGwyCXI5CisKKwltb3YJIyhQTUJfVUIgPj4gOCksIHI4CisJc2hsbDgJcjgKKworCW9yCXIwLCByOAorCW9yCXI5LCByOAorCW1vdi5sCXI4LCBAcjEKKwltb3YJcjIsIHI4CisJYWRkCXI3LCByOAorCW1vdi5sCXI4LCBAcjMKKworCWFkZAlyNCwgcjEKKwlhZGQJcjQsIHIzCisJYWRkCSMxLCByMTAKKyNlbmRpZgorCisvKgorICogSXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUgYXZhaWxhYmxlIHNpemVzIGZyb20gbGFyZ2VzdCB0bworICogc21hbGxlc3QgZm9yIGNvbnN0cnVjdGluZyB0aGUgY2FjaGVkIG1hcHBpbmcuCisgKi8KKyNkZWZpbmUgX19QTUJfSVRFUl9CWV9TSVpFKHNpemUpCQkJXAorLkwjI3NpemU6CQkJCQkJXAorCW1vdgkjKHNpemUgPj4gNCksIHI2OwkJCVwKKwlzaGxsMTYJcjY7CQkJCQlcCisJc2hsbDgJcjY7CQkJCQlcCisJCQkJCQkJXAorCWNtcC9oaQlyNSwgcjY7CQkJCQlcCisJYnQJOTk5OWY7CQkJCQlcCisJCQkJCQkJXAorCW1vdgkjKFBNQl9TWl8jI3NpemUjI00gPj4gMiksIHI5OwkJXAorCXNobGwyCXI5OwkJCQkJXAorCQkJCQkJCVwKKwkvKgkJCQkJCVwKKwkgKiBDYWNoZWQgbWFwcGluZwkJCQlcCisJICovCQkJCQkJXAorCW1vdgkjUE1CX0MsIHI4OwkJCQlcCisJb3IJcjAsIHI4OwkJCQkJXAorCW9yCXI5LCByODsJCQkJCVwKKwltb3YubAlyOCwgQHIxOwkJCQlcCisJbW92LmwJcjIsIEByMzsJCQkJXAorCQkJCQkJCVwKKwkvKiBJbmNyZW1lbnQgdG8gdGhlIG5leHQgUE1CX0RBVEEgZW50cnkgKi8JXAorCWFkZAlyNCwgcjE7CQkJCQlcCisJLyogSW5jcmVtZW50IHRvIHRoZSBuZXh0IFBNQl9BRERSIGVudHJ5ICovCVwKKwlhZGQJcjQsIHIzOwkJCQkJXAorCS8qIEluY3JlbWVudCBudW1iZXIgb2YgUE1CIGVudHJpZXMgKi8JCVwKKwlhZGQJIzEsIHIxMDsJCQkJXAorCQkJCQkJCVwKKwlzdWIJcjYsIHI1OwkJCQkJXAorCWFkZAlyNiwgcjA7CQkJCQlcCisJYWRkCXI2LCByMjsJCQkJCVwKKwkJCQkJCQlcCisJYnJhCS5MIyNzaXplOwkJCQlcCis5OTk5OgorCisJX19QTUJfSVRFUl9CWV9TSVpFKDUxMikKKwlfX1BNQl9JVEVSX0JZX1NJWkUoMTI4KQorCV9fUE1CX0lURVJfQllfU0laRSg2NCkKKwlfX1BNQl9JVEVSX0JZX1NJWkUoMTYpCisKKyNpZmRlZiBDT05GSUdfVU5DQUNIRURfTUFQUElORworCS8qCisJICogTm93IHRoYXQgd2UgY2FuIGFjY2VzcyBpdCwgdXBkYXRlIGNhY2hlZF90b191bmNhY2hlZCBhbmQKKwkgKiB1bmNhY2hlZF9zaXplLgorCSAqLworCW1vdi5sCS5MY2FjaGVkX3RvX3VuY2FjaGVkLCByMAorCW1vdi5sCXI3LCBAcjAKKworCW1vdi5sCS5MdW5jYWNoZWRfc2l6ZSwgcjAKKwltb3YJIzEsIHI3CisJc2hsbDE2CXI3CisJc2hsbDgJcjcKKwltb3YubAlyNywgQHIwCisjZW5kaWYKKworCS8qCisJICogQ2xlYXIgdGhlIHJlbWFpbmluZyBQTUIgZW50cmllcy4KKwkgKgorCSAqIHIzID0gZW50cnkgdG8gYmVnaW4gY2xlYXJpbmcgZnJvbQorCSAqIHIxMCA9IG51bWJlciBvZiBlbnRyaWVzIHdlJ3ZlIHNldHVwIHNvIGZhcgorCSAqLworCW1vdgkjMCwgcjEKKwltb3YJI05SX1BNQl9FTlRSSUVTLCByMAorCisuTGFnYWluOgorCW1vdi5sCXIxLCBAcjMJCS8qIENsZWFyIFBNQl9BRERSIGVudHJ5ICovCisJYWRkCSMxLCByMTAJCS8qIEluY3JlbWVudCB0aGUgbG9vcCBjb3VudGVyICovCisJY21wL2VxCXIwLCByMTAKKwliZi9zCS5MYWdhaW4KKwkgYWRkCXI0LCByMwkJLyogSW5jcmVtZW50IHRvIHRoZSBuZXh0IFBNQl9BRERSIGVudHJ5ICovCisKKwltb3YubAk2ZiwgcjAKKwlpY2JpCUByMAorCisuTHBtYl9kb25lOgorI2VuZGlmIC8qIENPTkZJR19QTUIgKi8KKwogI2lmbmRlZiBDT05GSUdfU0hfTk9fQlNTX0lOSVQKIAkvKgogCSAqIERvbid0IGNsZWFyIEJTUyBpZiBydW5uaW5nIG9uIHNsb3cgcGxhdGZvcm1zIHN1Y2ggYXMgYW4gUlRMIHNpbXVsYXRpb24sCkBAIC0xMzEsMyArMzM3LDE2IEBACiA1OgkubG9uZwlzdGFydF9rZXJuZWwKIDY6CS5sb25nCXNoX2NwdV9pbml0CiA3OgkubG9uZwlpbml0X3RocmVhZF91bmlvbgorCisjaWZkZWYgQ09ORklHX1BNQgorLkxQTUJfQUREUjoJCS5sb25nCVBNQl9BRERSCisuTFBNQl9EQVRBOgkJLmxvbmcJUE1CX0RBVEEKKy5MRklSU1RfQUREUl9FTlRSWToJLmxvbmcJUEFHRV9PRkZTRVQgfCBQTUJfVgorLkxGSVJTVF9EQVRBX0VOVFJZOgkubG9uZwlfX01FTU9SWV9TVEFSVCB8IFBNQl9WCisuTE1NVUNSOgkJLmxvbmcJTU1VQ1IKKy5MTUVNT1JZX1NJWkU6CQkubG9uZwlfX01FTU9SWV9TSVpFCisjaWZkZWYgQ09ORklHX1VOQ0FDSEVEX01BUFBJTkcKKy5MY2FjaGVkX3RvX3VuY2FjaGVkOgkubG9uZwljYWNoZWRfdG9fdW5jYWNoZWQKKy5MdW5jYWNoZWRfc2l6ZToJLmxvbmcJdW5jYWNoZWRfc2l6ZQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2hlYWRfNjQuUyBiL2FyY2gvc2gva2VybmVsL2hlYWRfNjQuUwppbmRleCAzZWE3NjU4Li5kZWZkODUxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaGVhZF82NC5TCkBAIC0yMjAsNyArMjIwLDYgQEAKIAlhZGQubAlyMjIsIHI2MywgcjIyCQkvKiBTaWduIGV4dGVuZCAqLwogCXB1dGNmZwlyMjEsIDAsIHIyMgkJLyogU2V0IE1NVURSWzBdLlBURUggKi8KIAotI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEsKIAkvKgogCSAqIFNldHVwIGEgRFRMQiB0cmFuc2xhdGlvbiBmb3IgU0NJRiBwaHlzLgogCSAqLwpAQCAtMjMxLDcgKzIzMCw2IEBACiAJbW92aSAgICAweGZhMDMsIHIyMgkvKiAweGZhMDMwMDAwLCBmaXhlZCBTQ0lGIHZpcnQgKi8KIAlzaG9yaSAgIDB4MDAwMywgcjIyCiAJcHV0Y2ZnICByMjEsIDAsIHIyMgkvKiBQVEVIIGxhc3QgKi8KLSNlbmRpZgogCiAJLyoKIAkgKiBTZXQgY2FjaGUgYmVoYXZpb3Vycy4KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2h3X2JyZWFrcG9pbnQuYyBiL2FyY2gvc2gva2VybmVsL2h3X2JyZWFrcG9pbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmYxNzUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCkBAIC0wLDAgKzEsNDYzIEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCisgKgorICogVW5pZmllZCBrZXJuZWwvdXNlci1zcGFjZSBoYXJkd2FyZSBicmVha3BvaW50IGZhY2lsaXR5IGZvciB0aGUgb24tY2hpcCBVQkMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IC0gMjAxMCAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9od19icmVha3BvaW50Lmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGFzbS9od19icmVha3BvaW50Lmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisvKgorICogU3RvcmVzIHRoZSBicmVha3BvaW50cyBjdXJyZW50bHkgaW4gdXNlIG9uIGVhY2ggYnJlYWtwb2ludCBhZGRyZXNzCisgKiByZWdpc3RlciBmb3IgZWFjaCBjcHVzCisgKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyZl9ldmVudCAqLCBicF9wZXJfcmVnW0hCUF9OVU1dKTsKKworLyoKKyAqIEEgZHVtbXkgcGxhY2Vob2xkZXIgZm9yIGVhcmx5IGFjY2Vzc2VzIHVudGlsIHRoZSBDUFVzIGdldCBhIGNoYW5jZSB0bworICogcmVnaXN0ZXIgdGhlaXIgVUJDcyBsYXRlciBpbiB0aGUgYm9vdCBwcm9jZXNzLgorICovCitzdGF0aWMgc3RydWN0IHNoX3ViYyB1YmNfZHVtbXkgPSB7IC5udW1fZXZlbnRzID0gMCB9OworCitzdGF0aWMgc3RydWN0IHNoX3ViYyAqc2hfdWJjIF9fcmVhZF9tb3N0bHkgPSAmdWJjX2R1bW15OworCisvKgorICogSW5zdGFsbCBhIHBlcmYgY291bnRlciBicmVha3BvaW50LgorICoKKyAqIFdlIHNlZWsgYSBmcmVlIFVCQyBjaGFubmVsIGFuZCB1c2UgaXQgZm9yIHRoaXMgYnJlYWtwb2ludC4KKyAqCisgKiBBdG9taWM6IHdlIGhvbGQgdGhlIGNvdW50ZXItPmN0eC0+bG9jayBhbmQgd2Ugb25seSBoYW5kbGUgdmFyaWFibGVzCisgKiBhbmQgcmVnaXN0ZXJzIGxvY2FsIHRvIHRoaXMgY3B1LgorICovCitpbnQgYXJjaF9pbnN0YWxsX2h3X2JyZWFrcG9pbnQoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmluZm8gPSBjb3VudGVyX2FyY2hfYnAoYnApOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNoX3ViYy0+bnVtX2V2ZW50czsgaSsrKSB7CisJCXN0cnVjdCBwZXJmX2V2ZW50ICoqc2xvdCA9ICZfX2dldF9jcHVfdmFyKGJwX3Blcl9yZWdbaV0pOworCisJCWlmICghKnNsb3QpIHsKKwkJCSpzbG90ID0gYnA7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChXQVJOX09OQ0UoaSA9PSBzaF91YmMtPm51bV9ldmVudHMsICJDYW4ndCBmaW5kIGFueSBicmVha3BvaW50IHNsb3QiKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWNsa19lbmFibGUoc2hfdWJjLT5jbGspOworCXNoX3ViYy0+ZW5hYmxlKGluZm8sIGkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBVbmluc3RhbGwgdGhlIGJyZWFrcG9pbnQgY29udGFpbmVkIGluIHRoZSBnaXZlbiBjb3VudGVyLgorICoKKyAqIEZpcnN0IHdlIHNlYXJjaCB0aGUgZGVidWcgYWRkcmVzcyByZWdpc3RlciBpdCB1c2VzIGFuZCB0aGVuIHdlIGRpc2FibGUKKyAqIGl0LgorICoKKyAqIEF0b21pYzogd2UgaG9sZCB0aGUgY291bnRlci0+Y3R4LT5sb2NrIGFuZCB3ZSBvbmx5IGhhbmRsZSB2YXJpYWJsZXMKKyAqIGFuZCByZWdpc3RlcnMgbG9jYWwgdG8gdGhpcyBjcHUuCisgKi8KK3ZvaWQgYXJjaF91bmluc3RhbGxfaHdfYnJlYWtwb2ludChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqaW5mbyA9IGNvdW50ZXJfYXJjaF9icChicCk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2hfdWJjLT5udW1fZXZlbnRzOyBpKyspIHsKKwkJc3RydWN0IHBlcmZfZXZlbnQgKipzbG90ID0gJl9fZ2V0X2NwdV92YXIoYnBfcGVyX3JlZ1tpXSk7CisKKwkJaWYgKCpzbG90ID09IGJwKSB7CisJCQkqc2xvdCA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChXQVJOX09OQ0UoaSA9PSBzaF91YmMtPm51bV9ldmVudHMsICJDYW4ndCBmaW5kIGFueSBicmVha3BvaW50IHNsb3QiKSkKKwkJcmV0dXJuOworCisJc2hfdWJjLT5kaXNhYmxlKGluZm8sIGkpOworCWNsa19kaXNhYmxlKHNoX3ViYy0+Y2xrKTsKK30KKworc3RhdGljIGludCBnZXRfaGJwX2xlbih1MTYgaGJwX2xlbikKK3sKKwl1bnNpZ25lZCBpbnQgbGVuX2luX2J5dGVzID0gMDsKKworCXN3aXRjaCAoaGJwX2xlbikgeworCWNhc2UgU0hfQlJFQUtQT0lOVF9MRU5fMToKKwkJbGVuX2luX2J5dGVzID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTSF9CUkVBS1BPSU5UX0xFTl8yOgorCQlsZW5faW5fYnl0ZXMgPSAyOworCQlicmVhazsKKwljYXNlIFNIX0JSRUFLUE9JTlRfTEVOXzQ6CisJCWxlbl9pbl9ieXRlcyA9IDQ7CisJCWJyZWFrOworCWNhc2UgU0hfQlJFQUtQT0lOVF9MRU5fODoKKwkJbGVuX2luX2J5dGVzID0gODsKKwkJYnJlYWs7CisJfQorCXJldHVybiBsZW5faW5fYnl0ZXM7Cit9CisKKy8qCisgKiBDaGVjayBmb3IgdmlydHVhbCBhZGRyZXNzIGluIHVzZXIgc3BhY2UuCisgKi8KK2ludCBhcmNoX2NoZWNrX3ZhX2luX3VzZXJzcGFjZSh1bnNpZ25lZCBsb25nIHZhLCB1MTYgaGJwX2xlbikKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJbGVuID0gZ2V0X2hicF9sZW4oaGJwX2xlbik7CisKKwlyZXR1cm4gKHZhIDw9IFRBU0tfU0laRSAtIGxlbik7Cit9CisKKy8qCisgKiBDaGVjayBmb3IgdmlydHVhbCBhZGRyZXNzIGluIGtlcm5lbCBzcGFjZS4KKyAqLworc3RhdGljIGludCBhcmNoX2NoZWNrX3ZhX2luX2tlcm5lbHNwYWNlKHVuc2lnbmVkIGxvbmcgdmEsIHU4IGhicF9sZW4pCit7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWxlbiA9IGdldF9oYnBfbGVuKGhicF9sZW4pOworCisJcmV0dXJuICh2YSA+PSBUQVNLX1NJWkUpICYmICgodmEgKyBsZW4gLSAxKSA+PSBUQVNLX1NJWkUpOworfQorCisvKgorICogU3RvcmUgYSBicmVha3BvaW50J3MgZW5jb2RlZCBhZGRyZXNzLCBsZW5ndGgsIGFuZCB0eXBlLgorICovCitzdGF0aWMgaW50IGFyY2hfc3RvcmVfaW5mbyhzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqaW5mbyA9IGNvdW50ZXJfYXJjaF9icChicCk7CisKKwkvKgorCSAqIFVzZXItc3BhY2UgcmVxdWVzdHMgd2lsbCBhbHdheXMgaGF2ZSB0aGUgYWRkcmVzcyBmaWVsZCBwb3B1bGF0ZWQKKwkgKiBGb3Iga2VybmVsLWFkZHJlc3NlcywgZWl0aGVyIHRoZSBhZGRyZXNzIG9yIHN5bWJvbCBuYW1lIGNhbiBiZQorCSAqIHNwZWNpZmllZC4KKwkgKi8KKwlpZiAoaW5mby0+bmFtZSkKKwkJaW5mby0+YWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKWthbGxzeW1zX2xvb2t1cF9uYW1lKGluZm8tPm5hbWUpOworCWlmIChpbmZvLT5hZGRyZXNzKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAtRUlOVkFMOworfQorCitpbnQgYXJjaF9icF9nZW5lcmljX2ZpZWxkcyhpbnQgc2hfbGVuLCBpbnQgc2hfdHlwZSwKKwkJCSAgIGludCAqZ2VuX2xlbiwgaW50ICpnZW5fdHlwZSkKK3sKKwkvKiBMZW4gKi8KKwlzd2l0Y2ggKHNoX2xlbikgeworCWNhc2UgU0hfQlJFQUtQT0lOVF9MRU5fMToKKwkJKmdlbl9sZW4gPSBIV19CUkVBS1BPSU5UX0xFTl8xOworCQlicmVhazsKKwljYXNlIFNIX0JSRUFLUE9JTlRfTEVOXzI6CisJCSpnZW5fbGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fMjsKKwkJYnJlYWs7CisJY2FzZSBTSF9CUkVBS1BPSU5UX0xFTl80OgorCQkqZ2VuX2xlbiA9IEhXX0JSRUFLUE9JTlRfTEVOXzQ7CisJCWJyZWFrOworCWNhc2UgU0hfQlJFQUtQT0lOVF9MRU5fODoKKwkJKmdlbl9sZW4gPSBIV19CUkVBS1BPSU5UX0xFTl84OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUeXBlICovCisJc3dpdGNoIChzaF90eXBlKSB7CisJY2FzZSBTSF9CUkVBS1BPSU5UX1JFQUQ6CisJCSpnZW5fdHlwZSA9IEhXX0JSRUFLUE9JTlRfUjsKKwljYXNlIFNIX0JSRUFLUE9JTlRfV1JJVEU6CisJCSpnZW5fdHlwZSA9IEhXX0JSRUFLUE9JTlRfVzsKKwkJYnJlYWs7CisJY2FzZSBTSF9CUkVBS1BPSU5UX1JXOgorCQkqZ2VuX3R5cGUgPSBIV19CUkVBS1BPSU5UX1cgfCBIV19CUkVBS1BPSU5UX1I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFyY2hfYnVpbGRfYnBfaW5mbyhzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqaW5mbyA9IGNvdW50ZXJfYXJjaF9icChicCk7CisKKwlpbmZvLT5hZGRyZXNzID0gYnAtPmF0dHIuYnBfYWRkcjsKKworCS8qIExlbiAqLworCXN3aXRjaCAoYnAtPmF0dHIuYnBfbGVuKSB7CisJY2FzZSBIV19CUkVBS1BPSU5UX0xFTl8xOgorCQlpbmZvLT5sZW4gPSBTSF9CUkVBS1BPSU5UX0xFTl8xOworCQlicmVhazsKKwljYXNlIEhXX0JSRUFLUE9JTlRfTEVOXzI6CisJCWluZm8tPmxlbiA9IFNIX0JSRUFLUE9JTlRfTEVOXzI7CisJCWJyZWFrOworCWNhc2UgSFdfQlJFQUtQT0lOVF9MRU5fNDoKKwkJaW5mby0+bGVuID0gU0hfQlJFQUtQT0lOVF9MRU5fNDsKKwkJYnJlYWs7CisJY2FzZSBIV19CUkVBS1BPSU5UX0xFTl84OgorCQlpbmZvLT5sZW4gPSBTSF9CUkVBS1BPSU5UX0xFTl84OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUeXBlICovCisJc3dpdGNoIChicC0+YXR0ci5icF90eXBlKSB7CisJY2FzZSBIV19CUkVBS1BPSU5UX1I6CisJCWluZm8tPnR5cGUgPSBTSF9CUkVBS1BPSU5UX1JFQUQ7CisJCWJyZWFrOworCWNhc2UgSFdfQlJFQUtQT0lOVF9XOgorCQlpbmZvLT50eXBlID0gU0hfQlJFQUtQT0lOVF9XUklURTsKKwkJYnJlYWs7CisJY2FzZSBIV19CUkVBS1BPSU5UX1cgfCBIV19CUkVBS1BPSU5UX1I6CisJCWluZm8tPnR5cGUgPSBTSF9CUkVBS1BPSU5UX1JXOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFZhbGlkYXRlIHRoZSBhcmNoLXNwZWNpZmljIEhXIEJyZWFrcG9pbnQgcmVnaXN0ZXIgc2V0dGluZ3MKKyAqLworaW50IGFyY2hfdmFsaWRhdGVfaHdia3B0X3NldHRpbmdzKHN0cnVjdCBwZXJmX2V2ZW50ICpicCwKKwkJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgKmluZm8gPSBjb3VudGVyX2FyY2hfYnAoYnApOworCXVuc2lnbmVkIGludCBhbGlnbjsKKwlpbnQgcmV0OworCisJcmV0ID0gYXJjaF9idWlsZF9icF9pbmZvKGJwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gLUVJTlZBTDsKKworCXN3aXRjaCAoaW5mby0+bGVuKSB7CisJY2FzZSBTSF9CUkVBS1BPSU5UX0xFTl8xOgorCQlhbGlnbiA9IDA7CisJCWJyZWFrOworCWNhc2UgU0hfQlJFQUtQT0lOVF9MRU5fMjoKKwkJYWxpZ24gPSAxOworCQlicmVhazsKKwljYXNlIFNIX0JSRUFLUE9JTlRfTEVOXzQ6CisJCWFsaWduID0gMzsKKwkJYnJlYWs7CisJY2FzZSBTSF9CUkVBS1BPSU5UX0xFTl84OgorCQlhbGlnbiA9IDc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gYXJjaF9zdG9yZV9pbmZvKGJwKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBDaGVjayB0aGF0IHRoZSBsb3ctb3JkZXIgYml0cyBvZiB0aGUgYWRkcmVzcyBhcmUgYXBwcm9wcmlhdGUKKwkgKiBmb3IgdGhlIGFsaWdubWVudCBpbXBsaWVkIGJ5IGxlbi4KKwkgKi8KKwlpZiAoaW5mby0+YWRkcmVzcyAmIGFsaWduKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIENoZWNrIHRoYXQgdGhlIHZpcnR1YWwgYWRkcmVzcyBpcyBpbiB0aGUgcHJvcGVyIHJhbmdlICovCisJaWYgKHRzaykgeworCQlpZiAoIWFyY2hfY2hlY2tfdmFfaW5fdXNlcnNwYWNlKGluZm8tPmFkZHJlc3MsIGluZm8tPmxlbikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9IGVsc2UgeworCQlpZiAoIWFyY2hfY2hlY2tfdmFfaW5fa2VybmVsc3BhY2UoaW5mby0+YWRkcmVzcywgaW5mby0+bGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogUmVsZWFzZSB0aGUgdXNlciBicmVha3BvaW50cyB1c2VkIGJ5IHB0cmFjZQorICovCit2b2lkIGZsdXNoX3B0cmFjZV9od19icmVha3BvaW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWludCBpOworCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0ID0gJnRzay0+dGhyZWFkOworCisJZm9yIChpID0gMDsgaSA8IHNoX3ViYy0+bnVtX2V2ZW50czsgaSsrKSB7CisJCXVucmVnaXN0ZXJfaHdfYnJlYWtwb2ludCh0LT5wdHJhY2VfYnBzW2ldKTsKKwkJdC0+cHRyYWNlX2Jwc1tpXSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IF9fa3Byb2JlcyBod19icmVha3BvaW50X2hhbmRsZXIoc3RydWN0IGRpZV9hcmdzICphcmdzKQoreworCWludCBjcHUsIGksIHJjID0gTk9USUZZX1NUT1A7CisJc3RydWN0IHBlcmZfZXZlbnQgKmJwOworCXVuc2lnbmVkIGludCBjbWYsIHJlc3VtZV9tYXNrOworCisJLyoKKwkgKiBEbyBhbiBlYXJseSByZXR1cm4gaWYgbm9uZSBvZiB0aGUgY2hhbm5lbHMgdHJpZ2dlcmVkLgorCSAqLworCWNtZiA9IHNoX3ViYy0+dHJpZ2dlcmVkX21hc2soKTsKKwlpZiAodW5saWtlbHkoIWNtZikpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCS8qCisJICogQnkgZGVmYXVsdCwgcmVzdW1lIGFsbCBvZiB0aGUgYWN0aXZlIGNoYW5uZWxzLgorCSAqLworCXJlc3VtZV9tYXNrID0gc2hfdWJjLT5hY3RpdmVfbWFzaygpOworCisJLyoKKwkgKiBEaXNhYmxlIGJyZWFrcG9pbnRzIGR1cmluZyBleGNlcHRpb24gaGFuZGxpbmcuCisJICovCisJc2hfdWJjLT5kaXNhYmxlX2FsbCgpOworCisJY3B1ID0gZ2V0X2NwdSgpOworCWZvciAoaSA9IDA7IGkgPCBzaF91YmMtPm51bV9ldmVudHM7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIGV2ZW50X21hc2sgPSAoMSA8PCBpKTsKKworCQlpZiAobGlrZWx5KCEoY21mICYgZXZlbnRfbWFzaykpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogVGhlIGNvdW50ZXIgbWF5IGJlIGNvbmN1cnJlbnRseSByZWxlYXNlZCBidXQgdGhhdCBjYW4gb25seQorCQkgKiBvY2N1ciBmcm9tIGEgY2FsbF9yY3UoKSBwYXRoLiBXZSBjYW4gdGhlbiBzYWZlbHkgZmV0Y2gKKwkJICogdGhlIGJyZWFrcG9pbnQsIHVzZSBpdHMgY2FsbGJhY2ssIHRvdWNoIGl0cyBjb3VudGVyCisJCSAqIHdoaWxlIHdlIGFyZSBpbiBhbiByY3VfcmVhZF9sb2NrKCkgcGF0aC4KKwkJICovCisJCXJjdV9yZWFkX2xvY2soKTsKKworCQlicCA9IHBlcl9jcHUoYnBfcGVyX3JlZ1tpXSwgY3B1KTsKKwkJaWYgKGJwKQorCQkJcmMgPSBOT1RJRllfRE9ORTsKKworCQkvKgorCQkgKiBSZXNldCB0aGUgY29uZGl0aW9uIG1hdGNoIGZsYWcgdG8gZGVub3RlIGNvbXBsZXRpb24gb2YKKwkJICogZXhjZXB0aW9uIGhhbmRsaW5nLgorCQkgKi8KKwkJc2hfdWJjLT5jbGVhcl90cmlnZ2VyZWRfbWFzayhldmVudF9tYXNrKTsKKworCQkvKgorCQkgKiBicCBjYW4gYmUgTlVMTCBkdWUgdG8gY29uY3VycmVudCBwZXJmIGNvdW50ZXIKKwkJICogcmVtb3ZpbmcuCisJCSAqLworCQlpZiAoIWJwKSB7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogRG9uJ3QgcmVzdG9yZSB0aGUgY2hhbm5lbCBpZiB0aGUgYnJlYWtwb2ludCBpcyBmcm9tCisJCSAqIHB0cmFjZSwgYXMgaXQgYWx3YXlzIG9wZXJhdGVzIGluIG9uZS1zaG90IG1vZGUuCisJCSAqLworCQlpZiAoYnAtPm92ZXJmbG93X2hhbmRsZXIgPT0gcHRyYWNlX3RyaWdnZXJlZCkKKwkJCXJlc3VtZV9tYXNrICY9IH4oMSA8PCBpKTsKKworCQlwZXJmX2JwX2V2ZW50KGJwLCBhcmdzLT5yZWdzKTsKKworCQkvKiBEZWxpdmVyIHRoZSBzaWduYWwgdG8gdXNlcnNwYWNlICovCisJCWlmIChhcmNoX2NoZWNrX3ZhX2luX3VzZXJzcGFjZShicC0+YXR0ci5icF9hZGRyLAorCQkJCQkgICAgICAgYnAtPmF0dHIuYnBfbGVuKSkgeworCQkJc2lnaW5mb190IGluZm87CisKKwkJCWluZm8uc2lfc2lnbm8gPSBhcmdzLT5zaWducjsKKwkJCWluZm8uc2lfZXJybm8gPSBub3RpZmllcl90b19lcnJubyhyYyk7CisJCQlpbmZvLnNpX2NvZGUgPSBUUkFQX0hXQktQVDsKKworCQkJZm9yY2Vfc2lnX2luZm8oYXJncy0+c2lnbnIsICZpbmZvLCBjdXJyZW50KTsKKwkJfQorCisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KKworCWlmIChjbWYgPT0gMCkKKwkJcmMgPSBOT1RJRllfRE9ORTsKKworCXNoX3ViYy0+ZW5hYmxlX2FsbChyZXN1bWVfbWFzayk7CisKKwlwdXRfY3B1KCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK0JVSUxEX1RSQVBfSEFORExFUihicmVha3BvaW50KQoreworCXVuc2lnbmVkIGxvbmcgZXggPSBsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcigpOworCVRSQVBfSEFORExFUl9ERUNMOworCisJbm90aWZ5X2RpZShESUVfQlJFQUtQT0lOVCwgImJyZWFrcG9pbnQiLCByZWdzLCAwLCBleCwgU0lHVFJBUCk7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVidWcgZXhjZXB0aW9uIG5vdGlmaWNhdGlvbnMuCisgKi8KK2ludCBfX2twcm9iZXMgaHdfYnJlYWtwb2ludF9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRpZV9hcmdzICphcmdzID0gZGF0YTsKKworCWlmICh2YWwgIT0gRElFX0JSRUFLUE9JTlQpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCS8qCisJICogSWYgdGhlIGJyZWFrcG9pbnQgaGFzbid0IGJlZW4gdHJpZ2dlcmVkIGJ5IHRoZSBVQkMsIGl0J3MKKwkgKiBwcm9iYWJseSBmcm9tIGEgZGVidWdnZXIsIHNvIGRvbid0IGRvIGFueXRoaW5nIG1vcmUgaGVyZS4KKwkgKgorCSAqIFRoaXMgYWxzbyBwZXJtaXRzIHRoZSBVQkMgaW50ZXJmYWNlIGNsb2NrIHRvIHJlbWFpbiBvZmYgZm9yCisJICogbm9uLVVCQyBicmVha3BvaW50cywgYXMgd2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgdHJpZ2dlcmVkCisJICogb3IgYWN0aXZlIGNoYW5uZWwgbWFza3MuCisJICovCisJaWYgKGFyZ3MtPnRyYXBuciAhPSBzaF91YmMtPnRyYXBfbnIpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCXJldHVybiBod19icmVha3BvaW50X2hhbmRsZXIoZGF0YSk7Cit9CisKK3ZvaWQgaHdfYnJlYWtwb2ludF9wbXVfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCit7CisJLyogVE9ETyAqLworfQorCit2b2lkIGh3X2JyZWFrcG9pbnRfcG11X3VudGhyb3R0bGUoc3RydWN0IHBlcmZfZXZlbnQgKmJwKQoreworCS8qIFRPRE8gKi8KK30KKworaW50IHJlZ2lzdGVyX3NoX3ViYyhzdHJ1Y3Qgc2hfdWJjICp1YmMpCit7CisJLyogQmFpbCBpZiBpdCdzIGFscmVhZHkgYXNzaWduZWQgKi8KKwlpZiAoc2hfdWJjICE9ICZ1YmNfZHVtbXkpCisJCXJldHVybiAtRUJVU1k7CisJc2hfdWJjID0gdWJjOworCisJcHJfaW5mbygiSFcgQnJlYWtwb2ludHM6ICVzIFVCQyBzdXBwb3J0IHJlZ2lzdGVyZWRcbiIsIHViYy0+bmFtZSk7CisKKwlXQVJOX09OKHViYy0+bnVtX2V2ZW50cyA+IEhCUF9OVU0pOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pZGxlLmMgYi9hcmNoL3NoL2tlcm5lbC9pZGxlLmMKaW5kZXggNmIzZDcwNi4uMGZkN2I0MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaWRsZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lkbGUuYwpAQCAtMjAsMTAgKzIwLDkgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCi1zdGF0aWMgaW50IGhsdF9jb3VudGVyOwogdm9pZCAoKnBtX2lkbGUpKHZvaWQpID0gTlVMTDsKLXZvaWQgKCpwbV9wb3dlcl9vZmYpKHZvaWQpOwotRVhQT1JUX1NZTUJPTChwbV9wb3dlcl9vZmYpOworCitzdGF0aWMgaW50IGhsdF9jb3VudGVyOwogCiBzdGF0aWMgaW50IF9faW5pdCBub2hsdF9zZXR1cChjaGFyICpfX3VudXNlZCkKIHsKQEAgLTEzMSw2ICsxMzAsMTUgQEAKIHsKIH0KIAordm9pZCBzdG9wX3RoaXNfY3B1KHZvaWQgKnVudXNlZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKKworCWZvciAoOzspCisJCWNwdV9zbGVlcCgpOworfQorCiAvKgogICogY3B1X2lkbGVfd2FpdCAtIFVzZWQgdG8gZW5zdXJlIHRoYXQgYWxsIHRoZSBDUFVzIGRpc2NhcmQgb2xkIHZhbHVlIG9mCiAgKiBwbV9pZGxlIGFuZCB1cGRhdGUgdG8gbmV3IHBtX2lkbGUgdmFsdWUuIFJlcXVpcmVkIHdoaWxlIGNoYW5naW5nIHBtX2lkbGUKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lvX3RyYXBwZWQuYyBiL2FyY2gvc2gva2VybmVsL2lvX3RyYXBwZWQuYwppbmRleCA2OWJlNjAzLi40YThiYjRlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9pb190cmFwcGVkLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaW9fdHJhcHBlZC5jCkBAIC0xODQsMzEgKzE4NCwzMSBAQAogCiAJc3dpdGNoIChzcmNfbGVuKSB7CiAJY2FzZSAxOgotCQl0bXAgPSBjdHJsX2luYihzcmNfYWRkcik7CisJCXRtcCA9IF9fcmF3X3JlYWRiKHNyY19hZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQl0bXAgPSBjdHJsX2ludyhzcmNfYWRkcik7CisJCXRtcCA9IF9fcmF3X3JlYWR3KHNyY19hZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSA0OgotCQl0bXAgPSBjdHJsX2lubChzcmNfYWRkcik7CisJCXRtcCA9IF9fcmF3X3JlYWRsKHNyY19hZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSA4OgotCQl0bXAgPSBjdHJsX2lucShzcmNfYWRkcik7CisJCXRtcCA9IF9fcmF3X3JlYWRxKHNyY19hZGRyKTsKIAkJYnJlYWs7CiAJfQogCiAJc3dpdGNoIChkc3RfbGVuKSB7CiAJY2FzZSAxOgotCQljdHJsX291dGIodG1wLCBkc3RfYWRkcik7CisJCV9fcmF3X3dyaXRlYih0bXAsIGRzdF9hZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQljdHJsX291dHcodG1wLCBkc3RfYWRkcik7CisJCV9fcmF3X3dyaXRldyh0bXAsIGRzdF9hZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSA0OgotCQljdHJsX291dGwodG1wLCBkc3RfYWRkcik7CisJCV9fcmF3X3dyaXRlbCh0bXAsIGRzdF9hZGRyKTsKIAkJYnJlYWs7CiAJY2FzZSA4OgotCQljdHJsX291dHEodG1wLCBkc3RfYWRkcik7CisJCV9fcmF3X3dyaXRlcSh0bXAsIGRzdF9hZGRyKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yNzEsNiArMjcxLDggQEAKIAlpbnNuX3NpemVfdCBpbnN0cnVjdGlvbjsKIAlpbnQgdG1wOwogCisJaWYgKHRyYXBwZWRfaW9fZGlzYWJsZSkKKwkJcmV0dXJuIDA7CiAJaWYgKCFsb29rdXBfdGlvcChhZGRyZXNzKSkKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2tnZGIuYyBiL2FyY2gvc2gva2VybmVsL2tnZGIuYwppbmRleCAzZTUzMmQwLi43MGM2OTY1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9rZ2RiLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwva2dkYi5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFN1cGVySCBLR0RCIHN1cHBvcnQKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggIFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAwOCAtIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiBTaW5nbGUgc3RlcHBpbmcgdGFrZW4gZnJvbSB0aGUgb2xkIHN0dWIgYnkgSGVucnkgQmVsbCBhbmQgSmVyZW15IFNpZWdlbC4KICAqCkBAIC0yNTEsMjQgKzI1MSw2MCBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAorc3RhdGljIGludCBfX2tnZGJfbm90aWZ5KHN0cnVjdCBkaWVfYXJncyAqYXJncywgdW5zaWduZWQgbG9uZyBjbWQpCit7CisJaW50IHJldDsKIAotQlVJTERfVFJBUF9IQU5ETEVSKGJyZWFrcG9pbnQpCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIERJRV9CUkVBS1BPSU5UOgorCQkvKgorCQkgKiBUaGlzIG1lYW5zIGEgdXNlciB0aHJlYWQgaXMgc2luZ2xlIHN0ZXBwaW5nCisJCSAqIGEgc3lzdGVtIGNhbGwgd2hpY2ggc2hvdWxkIGJlIGlnbm9yZWQKKwkJICovCisJCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVTVEVQKSkKKwkJCXJldHVybiBOT1RJRllfRE9ORTsKKworCQlyZXQgPSBrZ2RiX2hhbmRsZV9leGNlcHRpb24oYXJncy0+dHJhcG5yICYgMHhmZiwgYXJncy0+c2lnbnIsCisJCQkJCSAgICBhcmdzLT5lcnIsIGFyZ3MtPnJlZ3MpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIE5PVElGWV9ET05FOworCisJCWJyZWFrOworCX0KKworCXJldHVybiBOT1RJRllfU1RPUDsKK30KKworc3RhdGljIGludAora2dkYl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqcHRyKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JVFJBUF9IQU5ETEVSX0RFQ0w7CisJaW50IHJldDsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlrZ2RiX2hhbmRsZV9leGNlcHRpb24odmVjID4+IDIsIFNJR1RSQVAsIDAsIHJlZ3MpOworCXJldCA9IF9fa2dkYl9ub3RpZnkocHRyLCBjbWQpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga2dkYl9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbAk9IGtnZGJfbm90aWZ5LAorCisJLyoKKwkgKiBMb3dlc3QtcHJpbyBub3RpZmllciBwcmlvcml0eSwgd2Ugd2FudCB0byBiZSBub3RpZmllZCBsYXN0OgorCSAqLworCS5wcmlvcml0eQk9IC1JTlRfTUFYLAorfTsKKwogaW50IGtnZGJfYXJjaF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJlZ2lzdGVyX2RpZV9ub3RpZmllcigma2dkYl9ub3RpZmllcik7CiB9CiAKIHZvaWQga2dkYl9hcmNoX2V4aXQodm9pZCkKIHsKKwl1bnJlZ2lzdGVyX2RpZV9ub3RpZmllcigma2dkYl9ub3RpZmllcik7CiB9CiAKIHN0cnVjdCBrZ2RiX2FyY2ggYXJjaF9rZ2RiX29wcyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYyBiL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYwppbmRleCA3NmYyODAyLi43NjcyMTQxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCkBAIC0yMSw2ICsyMSw4IEBACiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vc2hfYmlvcy5oPgorI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KIAogdHlwZWRlZiB2b2lkICgqcmVsb2NhdGVfbmV3X2tlcm5lbF90KSh1bnNpZ25lZCBsb25nIGluZGlyZWN0aW9uX3BhZ2UsCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyByZWJvb3RfY29kZV9idWZmZXIsCkBAIC0yOCwxNSArMzAsMTEgQEAKIAogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVsb2NhdGVfbmV3X2tlcm5lbFtdOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCByZWxvY2F0ZV9uZXdfa2VybmVsX3NpemU7Ci1leHRlcm4gdm9pZCAqZ2RiX3Zicl92ZWN0b3I7CiBleHRlcm4gdm9pZCAqdmJyX2Jhc2U7CiAKLXZvaWQgbWFjaGluZV9zaHV0ZG93bih2b2lkKQordm9pZCBuYXRpdmVfbWFjaGluZV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLX0KLQotdm9pZCBtYWNoaW5lX2NyYXNoX3NodXRkb3duKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoteworCS8qIE5vdGhpbmcgdG8gZG8gZm9yIFVQLCBidXQgZGVmaW5pdGVseSBicm9rZW4gZm9yIFNNUC4uICovCiB9CiAKIC8qCkBAIC0xMTcsMTEgKzExNSw3IEBACiAJa2V4ZWNfaW5mbyhpbWFnZSk7CiAJZmx1c2hfY2FjaGVfYWxsKCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKQotCWFzbSB2b2xhdGlsZSgibGRjICUwLCB2YnIiIDoKLQkJICAgICA6ICJyIiAoKCh1bnNpZ25lZCBsb25nKSBnZGJfdmJyX3ZlY3RvcikgLSAweDEwMCkKLQkJICAgICA6ICJtZW1vcnkiKTsKLSNlbmRpZgorCXNoX2Jpb3NfdmJyX3JlbG9hZCgpOwogCiAJLyogbm93IGNhbGwgaXQgKi8KIAlybmsgPSAocmVsb2NhdGVfbmV3X2tlcm5lbF90KSByZWJvb3RfY29kZV9idWZmZXI7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jIGIvYXJjaC9zaC9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYwppbmRleCAyNGVhODM3Li5hOWRkM2FiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3BlcmZfY2FsbGNoYWluLmMKQEAgLTY4LDkgKzY4LDYgQEAKIAogCWlzX3VzZXIgPSB1c2VyX21vZGUocmVncyk7CiAKLQlpZiAoIWN1cnJlbnQgfHwgY3VycmVudC0+cGlkID09IDApCi0JCXJldHVybjsKLQogCWlmIChpc191c2VyICYmIGN1cnJlbnQtPnN0YXRlICE9IFRBU0tfUlVOTklORykKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFhZGQ5YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYwpAQCAtMCwwICsxLDEwMCBAQAorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworc3RydWN0IGttZW1fY2FjaGUgKnRhc2tfeHN0YXRlX2NhY2hlcCA9IE5VTEw7Cit1bnNpZ25lZCBpbnQgeHN0YXRlX3NpemU7CisKK2ludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpCit7CisJKmRzdCA9ICpzcmM7CisKKwlpZiAoc3JjLT50aHJlYWQueHN0YXRlKSB7CisJCWRzdC0+dGhyZWFkLnhzdGF0ZSA9IGttZW1fY2FjaGVfYWxsb2ModGFza194c3RhdGVfY2FjaGVwLAorCQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghZHN0LT50aHJlYWQueHN0YXRlKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCW1lbWNweShkc3QtPnRocmVhZC54c3RhdGUsIHNyYy0+dGhyZWFkLnhzdGF0ZSwgeHN0YXRlX3NpemUpOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGZyZWVfdGhyZWFkX3hzdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAodHNrLT50aHJlYWQueHN0YXRlKSB7CisJCWttZW1fY2FjaGVfZnJlZSh0YXNrX3hzdGF0ZV9jYWNoZXAsIHRzay0+dGhyZWFkLnhzdGF0ZSk7CisJCXRzay0+dGhyZWFkLnhzdGF0ZSA9IE5VTEw7CisJfQorfQorCisjaWYgVEhSRUFEX1NISUZUIDwgUEFHRV9TSElGVAorc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp0aHJlYWRfaW5mb19jYWNoZTsKKworc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOworCisJdGkgPSBrbWVtX2NhY2hlX2FsbG9jKHRocmVhZF9pbmZvX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkodGkgPT0gTlVMTCkpCisJCXJldHVybiBOVUxMOworI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQorCW1lbXNldCh0aSwgMCwgVEhSRUFEX1NJWkUpOworI2VuZGlmCisJcmV0dXJuIHRpOworfQorCit2b2lkIGZyZWVfdGhyZWFkX2luZm8oc3RydWN0IHRocmVhZF9pbmZvICp0aSkKK3sKKwlmcmVlX3RocmVhZF94c3RhdGUodGktPnRhc2spOworCWttZW1fY2FjaGVfZnJlZSh0aHJlYWRfaW5mb19jYWNoZSwgdGkpOworfQorCit2b2lkIHRocmVhZF9pbmZvX2NhY2hlX2luaXQodm9pZCkKK3sKKwl0aHJlYWRfaW5mb19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJ0aHJlYWRfaW5mbyIsIFRIUkVBRF9TSVpFLAorCQkJCQkgICAgICBUSFJFQURfU0laRSwgU0xBQl9QQU5JQywgTlVMTCk7Cit9CisjZWxzZQorc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKyNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKKwlnZnBfdCBtYXNrID0gR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk87CisjZWxzZQorCWdmcF90IG1hc2sgPSBHRlBfS0VSTkVMOworI2VuZGlmCisJcmV0dXJuIChzdHJ1Y3QgdGhyZWFkX2luZm8gKilfX2dldF9mcmVlX3BhZ2VzKG1hc2ssIFRIUkVBRF9TSVpFX09SREVSKTsKK30KKwordm9pZCBmcmVlX3RocmVhZF9pbmZvKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGkpCit7CisJZnJlZV90aHJlYWRfeHN0YXRlKHRpLT50YXNrKTsKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXRpLCBUSFJFQURfU0laRV9PUkRFUik7Cit9CisjZW5kaWYgLyogVEhSRUFEX1NISUZUIDwgUEFHRV9TSElGVCAqLworCit2b2lkIGFyY2hfdGFza19jYWNoZV9pbml0KHZvaWQpCit7CisJaWYgKCF4c3RhdGVfc2l6ZSkKKwkJcmV0dXJuOworCisJdGFza194c3RhdGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoInRhc2tfeHN0YXRlIiwgeHN0YXRlX3NpemUsCisJCQkJCSAgICAgICBfX2FsaWdub2ZfXyh1bmlvbiB0aHJlYWRfeHN0YXRlKSwKKwkJCQkJICAgICAgIFNMQUJfUEFOSUMgfCBTTEFCX05PVFJBQ0ssIE5VTEwpOworfQorCisjaWZkZWYgQ09ORklHX1NIX0ZQVV9FTVUKKyMgZGVmaW5lIEhBVkVfU09GVEZQCTEKKyNlbHNlCisjIGRlZmluZSBIQVZFX1NPRlRGUAkwCisjZW5kaWYKKwordm9pZCBpbml0X3RocmVhZF94c3RhdGUodm9pZCkKK3sKKwlpZiAoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKQorCQl4c3RhdGVfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hfZnB1X2hhcmRfc3RydWN0KTsKKwllbHNlIGlmIChIQVZFX1NPRlRGUCkKKwkJeHN0YXRlX3NpemUgPSBzaXplb2Yoc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCk7CisJZWxzZQorCQl4c3RhdGVfc2l6ZSA9IDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggZDhhZjg4OS4uM2NiODhmMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYwpAQCAtMTYsNjUgKzE2LDE1IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+Ci0jaW5jbHVkZSA8bGludXgva2RlYnVnLmg+Ci0jaW5jbHVkZSA8bGludXgvdGljay5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgotI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS91YmMuaD4KICNpbmNsdWRlIDxhc20vZnB1Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8YXNtL3dhdGNoZG9nLmg+Ci0KLWludCB1YmNfdXNlcmNudCA9IDA7Ci0KLSNpZmRlZiBDT05GSUdfMzJCSVQKLXN0YXRpYyB2b2lkIHdhdGNoZG9nX3RyaWdnZXJfaW1tZWRpYXRlKHZvaWQpCi17Ci0Jc2hfd2R0X3dyaXRlX2NudCgweEZGKTsKLQlzaF93ZHRfd3JpdGVfY3NyKDB4QzIpOwotfQotCi12b2lkIG1hY2hpbmVfcmVzdGFydChjaGFyICogX191bnVzZWQpCi17Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQotCS8qIFVzZSB3YXRjaGRvZyB0aW1lciB0byB0cmlnZ2VyIHJlc2V0ICovCi0Jd2F0Y2hkb2dfdHJpZ2dlcl9pbW1lZGlhdGUoKTsKLQotCXdoaWxlICgxKQotCQljcHVfc2xlZXAoKTsKLX0KLSNlbHNlCi12b2lkIG1hY2hpbmVfcmVzdGFydChjaGFyICogX191bnVzZWQpCi17Ci0JLyogU1IuQkw9MSBhbmQgaW52b2tlIGFkZHJlc3MgZXJyb3IgdG8gbGV0IENQVSByZXNldCAobWFudWFsIHJlc2V0KSAqLwotCWFzbSB2b2xhdGlsZSgibGRjICUwLCBzclxuXHQiCi0JCSAgICAgIm1vdi5sIEAlMSwgJTAiIDogOiAiciIgKDB4MTAwMDAwMDApLCAiciIgKDB4ODAwMDAwMDEpKTsKLX0KLSNlbmRpZgotCi12b2lkIG1hY2hpbmVfaGFsdCh2b2lkKQotewotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0KLQl3aGlsZSAoMSkKLQkJY3B1X3NsZWVwKCk7Ci19Ci0KLXZvaWQgbWFjaGluZV9wb3dlcl9vZmYodm9pZCkKLXsKLQlpZiAocG1fcG93ZXJfb2ZmKQotCQlwbV9wb3dlcl9vZmYoKTsKLX0KIAogdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKiByZWdzKQogewpAQCAtOTEsNyArNDEsNyBAQAogCXByaW50aygiUEMgIDogJTA4bHggU1AgIDogJTA4bHggU1IgIDogJTA4bHggIiwKIAkgICAgICAgcmVncy0+cGMsIHJlZ3MtPnJlZ3NbMTVdLCByZWdzLT5zcik7CiAjaWZkZWYgQ09ORklHX01NVQotCXByaW50aygiVEVBIDogJTA4eFxuIiwgY3RybF9pbmwoTU1VX1RFQSkpOworCXByaW50aygiVEVBIDogJTA4eFxuIiwgX19yYXdfcmVhZGwoTU1VX1RFQSkpOwogI2Vsc2UKIAlwcmludGsoIlxuIik7CiAjZW5kaWYKQEAgLTE0NywyMSArOTcsMzQgQEAKIH0KIEVYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7CiAKK3ZvaWQgc3RhcnRfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIG5ld19wYywKKwkJICB1bnNpZ25lZCBsb25nIG5ld19zcCkKK3sKKwlzZXRfZnMoVVNFUl9EUyk7CisKKwlyZWdzLT5wciA9IDA7CisJcmVncy0+c3IgPSBTUl9GRDsKKwlyZWdzLT5wYyA9IG5ld19wYzsKKwlyZWdzLT5yZWdzWzE1XSA9IG5ld19zcDsKKworCWZyZWVfdGhyZWFkX3hzdGF0ZShjdXJyZW50KTsKK30KK0VYUE9SVF9TWU1CT0woc3RhcnRfdGhyZWFkKTsKKwogLyoKICAqIEZyZWUgY3VycmVudCB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVzIGV0Yy4uCiAgKi8KIHZvaWQgZXhpdF90aHJlYWQodm9pZCkKIHsKLQlpZiAoY3VycmVudC0+dGhyZWFkLnViY19wYykgewotCQljdXJyZW50LT50aHJlYWQudWJjX3BjID0gMDsKLQkJdWJjX3VzZXJjbnQgLT0gMTsKLQl9CiB9CiAKIHZvaWQgZmx1c2hfdGhyZWFkKHZvaWQpCiB7Ci0jaWYgZGVmaW5lZChDT05GSUdfU0hfRlBVKQogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKworCWZsdXNoX3B0cmFjZV9od19icmVha3BvaW50KHRzayk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9GUFUpCiAJLyogRm9yZ2V0IGxhenkgRlBVIHN0YXRlICovCiAJY2xlYXJfZnB1KHRzaywgdGFza19wdF9yZWdzKHRzaykpOwogCWNsZWFyX3VzZWRfbWF0aCgpOwpAQCAtMjA5LDExICsxNzIsMTAgQEAKIHsKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpID0gdGFza190aHJlYWRfaW5mbyhwKTsKIAlzdHJ1Y3QgcHRfcmVncyAqY2hpbGRyZWdzOwotI2lmIGRlZmluZWQoQ09ORklHX1NIX0RTUCkKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0jZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1NIX0RTUCkKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisKIAlpZiAoaXNfZHNwX2VuYWJsZWQodHNrKSkgewogCQkvKiBXZSBjYW4gdXNlIHRoZSBfX3NhdmVfZHNwIG9yIGp1c3QgY29weSB0aGUgc3RydWN0OgogCQkgKiBfX3NhdmVfZHNwKHApOwpAQCAtMjQ0LDUzICsyMDYsMTEgQEAKIAlwLT50aHJlYWQuc3AgPSAodW5zaWduZWQgbG9uZykgY2hpbGRyZWdzOwogCXAtPnRocmVhZC5wYyA9ICh1bnNpZ25lZCBsb25nKSByZXRfZnJvbV9mb3JrOwogCi0JcC0+dGhyZWFkLnViY19wYyA9IDA7CisJbWVtc2V0KHAtPnRocmVhZC5wdHJhY2VfYnBzLCAwLCBzaXplb2YocC0+dGhyZWFkLnB0cmFjZV9icHMpKTsKIAogCXJldHVybiAwOwogfQogCi0vKiBUcmFjaW5nIGJ5IHVzZXIgYnJlYWsgY29udHJvbGxlci4gICovCi1zdGF0aWMgdm9pZCB1YmNfc2V0X3RyYWNpbmcoaW50IGFzaWQsIHVuc2lnbmVkIGxvbmcgcGMpCi17Ci0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0JdW5zaWduZWQgbG9uZyB2YWw7Ci0KLQl2YWwgPSAoVUJDX0NCUl9JRF9JTlNUIHwgVUJDX0NCUl9SV19SRUFEIHwgVUJDX0NCUl9DRSk7Ci0JdmFsIHw9IChVQkNfQ0JSX0FJRSB8IFVCQ19DQlJfQUlWX1NFVChhc2lkKSk7Ci0KLQljdHJsX291dGwodmFsLCBVQkNfQ0JSMCk7Ci0JY3RybF9vdXRsKHBjLCAgVUJDX0NBUjApOwotCWN0cmxfb3V0bCgweDAsIFVCQ19DQU1SMCk7Ci0JY3RybF9vdXRsKDB4MCwgVUJDX0NCQ1IpOwotCi0JdmFsID0gKFVCQ19DUlJfUkVTIHwgVUJDX0NSUl9QQ0IgfCBVQkNfQ1JSX0JJRSk7Ci0JY3RybF9vdXRsKHZhbCwgVUJDX0NSUjApOwotCi0JLyogUmVhZCBVQkMgcmVnaXN0ZXIgdGhhdCB3ZSB3cm90ZSBsYXN0LCBmb3IgY2hlY2tpbmcgdXBkYXRlICovCi0JdmFsID0gY3RybF9pbmwoVUJDX0NSUjApOwotCi0jZWxzZQkvKiBDT05GSUdfQ1BVX1NINEEgKi8KLQljdHJsX291dGwocGMsIFVCQ19CQVJBKTsKLQotI2lmZGVmIENPTkZJR19NTVUKLQljdHJsX291dGIoYXNpZCwgVUJDX0JBU1JBKTsKLSNlbmRpZgotCi0JY3RybF9vdXRsKDAsIFVCQ19CQU1SQSk7Ci0KLQlpZiAoY3VycmVudF9jcHVfZGF0YS50eXBlID09IENQVV9TSDc3MjkgfHwKLQkgICAgY3VycmVudF9jcHVfZGF0YS50eXBlID09IENQVV9TSDc3MTAgfHwKLQkgICAgY3VycmVudF9jcHVfZGF0YS50eXBlID09IENQVV9TSDc3MTIgfHwKLQkgICAgY3VycmVudF9jcHVfZGF0YS50eXBlID09IENQVV9TSDcyMDMpewotCQljdHJsX291dHcoQkJSX0lOU1QgfCBCQlJfUkVBRCB8IEJCUl9DUFUsIFVCQ19CQlJBKTsKLQkJY3RybF9vdXRsKEJSQ1JfUENCQSB8IEJSQ1JfUENURSwgVUJDX0JSQ1IpOwotCX0gZWxzZSB7Ci0JCWN0cmxfb3V0dyhCQlJfSU5TVCB8IEJCUl9SRUFELCBVQkNfQkJSQSk7Ci0JCWN0cmxfb3V0dyhCUkNSX1BDQkEsIFVCQ19CUkNSKTsKLQl9Ci0jZW5kaWYJLyogQ09ORklHX0NQVV9TSDRBICovCi19Ci0KIC8qCiAgKglzd2l0Y2hfdG8oeCx5KSBzaG91bGQgc3dpdGNoIHRhc2tzIGZyb20geCB0byB5LgogICoKQEAgLTMwNCw3ICsyMjQsNyBAQAogCiAJLyogd2UncmUgZ29pbmcgdG8gdXNlIHRoaXMgc29vbiwgYWZ0ZXIgYSBmZXcgZXhwZW5zaXZlIHRoaW5ncyAqLwogCWlmIChuZXh0LT5mcHVfY291bnRlciA+IDUpCi0JCXByZWZldGNoKCZuZXh0X3QtPmZwdS5oYXJkKTsKKwkJcHJlZmV0Y2gobmV4dF90LT54c3RhdGUpOwogCiAjaWZkZWYgQ09ORklHX01NVQogCS8qCkBAIC0zMTYsMzIgKzIzNiwxMyBAQAogCQkgICAgIDogInIiICh0YXNrX3RocmVhZF9pbmZvKG5leHQpKSk7CiAjZW5kaWYKIAotCS8qIElmIG5vIHRhc2tzIGFyZSB1c2luZyB0aGUgVUJDLCB3ZSdyZSBkb25lICovCi0JaWYgKHViY191c2VyY250ID09IDApCi0JCS8qIElmIG5vIHRhc2tzIGFyZSB1c2luZyB0aGUgVUJDLCB3ZSdyZSBkb25lICovOwotCWVsc2UgaWYgKG5leHQtPnRocmVhZC51YmNfcGMgJiYgbmV4dC0+bW0pIHsKLQkJaW50IGFzaWQgPSAwOwotI2lmZGVmIENPTkZJR19NTVUKLQkJYXNpZCB8PSBjcHVfYXNpZChzbXBfcHJvY2Vzc29yX2lkKCksIG5leHQtPm1tKTsKLSNlbmRpZgotCQl1YmNfc2V0X3RyYWNpbmcoYXNpZCwgbmV4dC0+dGhyZWFkLnViY19wYyk7Ci0JfSBlbHNlIHsKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKLQkJY3RybF9vdXRsKFVCQ19DQlJfSU5JVCwgVUJDX0NCUjApOwotCQljdHJsX291dGwoVUJDX0NSUl9JTklULCBVQkNfQ1JSMCk7Ci0jZWxzZQotCQljdHJsX291dHcoMCwgVUJDX0JCUkEpOwotCQljdHJsX291dHcoMCwgVUJDX0JCUkIpOwotI2VuZGlmCi0JfQotCiAJLyoKIAkgKiBJZiB0aGUgdGFzayBoYXMgdXNlZCBmcHUgdGhlIGxhc3QgNSB0aW1lc2xpY2VzLCBqdXN0IGRvIGEgZnVsbAogCSAqIHJlc3RvcmUgb2YgdGhlIG1hdGggc3RhdGUgaW1tZWRpYXRlbHkgdG8gYXZvaWQgdGhlIHRyYXA7IHRoZQogCSAqIGNoYW5jZXMgb2YgbmVlZGluZyBGUFUgc29vbiBhcmUgb2J2aW91c2x5IGhpZ2ggbm93CiAJICovCiAJaWYgKG5leHQtPmZwdV9jb3VudGVyID4gNSkKLQkJZnB1X3N0YXRlX3Jlc3RvcmUodGFza19wdF9yZWdzKG5leHQpKTsKKwkJX19mcHVfc3RhdGVfcmVzdG9yZSgpOwogCiAJcmV0dXJuIHByZXY7CiB9CkBAIC00MzQsMjAgKzMzNSwzIEBACiAKIAlyZXR1cm4gcGM7CiB9Ci0KLWFzbWxpbmthZ2Ugdm9pZCBicmVha19wb2ludF90cmFwKHZvaWQpCi17Ci0JLyogQ2xlYXIgdHJhY2luZy4gICovCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0JY3RybF9vdXRsKFVCQ19DQlJfSU5JVCwgVUJDX0NCUjApOwotCWN0cmxfb3V0bChVQkNfQ1JSX0lOSVQsIFVCQ19DUlIwKTsKLSNlbHNlCi0JY3RybF9vdXR3KDAsIFVCQ19CQlJBKTsKLQljdHJsX291dHcoMCwgVUJDX0JCUkIpOwotCWN0cmxfb3V0bCgwLCBVQkNfQlJDUik7Ci0jZW5kaWYKLQljdXJyZW50LT50aHJlYWQudWJjX3BjID0gMDsKLQl1YmNfdXNlcmNudCAtPSAxOwotCi0JZm9yY2Vfc2lnKFNJR1RSQVAsIGN1cnJlbnQpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IGVjNzlmYWYuLmM5MDk1N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzY0LmMKQEAgLTMyLDMwICszMiw3IEBACiAKIHN0cnVjdCB0YXNrX3N0cnVjdCAqbGFzdF90YXNrX3VzZWRfbWF0aCA9IE5VTEw7CiAKLXZvaWQgbWFjaGluZV9yZXN0YXJ0KGNoYXIgKiBfX3VudXNlZCkKLXsKLQlleHRlcm4gdm9pZCBwaHlzX3N0ZXh0KHZvaWQpOwotCi0JcGh5c19zdGV4dCgpOwotfQotCi12b2lkIG1hY2hpbmVfaGFsdCh2b2lkKQotewotCWZvciAoOzspOwotfQotCi12b2lkIG1hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkic2xlZXBcblx0IgotCQkic3luY2lcblx0IgotCQkibm9wO25vcDtub3A7bm9wXG5cdCIKLQkpOwotCi0JcGFuaWMoIlVuZXhwZWN0ZWQgd2FrZXVwIVxuIik7Ci19Ci0KLXZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncykKK3ZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBhaCwgYWwsIGJoLCBibCwgY2gsIGNsOwogCkBAIC00MTAsNyArMzg3LDcgQEAKIAkJCXJlZ3MtPnNyIHw9IFNSX0ZEOwogCQl9CiAKLQkJbWVtY3B5KGZwdSwgJnRzay0+dGhyZWFkLmZwdS5oYXJkLCBzaXplb2YoKmZwdSkpOworCQltZW1jcHkoZnB1LCAmdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LCBzaXplb2YoKmZwdSkpOwogCX0KIAogCXJldHVybiBmcHZhbGlkOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYwppbmRleCA5YmUzNWYzLi5jNjI1Y2RhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYwpAQCAtMiw3ICsyLDcgQEAKICAqIFN1cGVySCBwcm9jZXNzIHRyYWNpbmcKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIEtheiBLb2ppbWEgJiBOaWliZSBZdXRha2EKLSAqIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDggIFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiBBdWRpdCBzdXBwb3J0IGJ5IFl1aWNoaSBOYWthbXVyYSA8eW5ha2FtQGhpdGFjaGlzb2Z0LmpwPgogICoKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KICNpbmNsdWRlIDxsaW51eC9yZWdzZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9od19icmVha3BvaW50Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTYzLDMzICs2NCw2NCBAQAogCXJldHVybiAwOwogfQogCit2b2lkIHB0cmFjZV90cmlnZ2VyZWQoc3RydWN0IHBlcmZfZXZlbnQgKmJwLCBpbnQgbm1pLAorCQkgICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOworCisJLyoKKwkgKiBEaXNhYmxlIHRoZSBicmVha3BvaW50IHJlcXVlc3QgaGVyZSBzaW5jZSBwdHJhY2UgaGFzIGRlZmluZWQgYQorCSAqIG9uZS1zaG90IGJlaGF2aW91ciBmb3IgYnJlYWtwb2ludCBleGNlcHRpb25zLgorCSAqLworCWF0dHIgPSBicC0+YXR0cjsKKwlhdHRyLmRpc2FibGVkID0gdHJ1ZTsKKwltb2RpZnlfdXNlcl9od19icmVha3BvaW50KGJwLCAmYXR0cik7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCA9ICZ0c2stPnRocmVhZDsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqYnA7CisJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOworCisJYnAgPSB0aHJlYWQtPnB0cmFjZV9icHNbMF07CisJaWYgKCFicCkgeworCQlod19icmVha3BvaW50X2luaXQoJmF0dHIpOworCisJCWF0dHIuYnBfYWRkciA9IGFkZHI7CisJCWF0dHIuYnBfbGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fMjsKKwkJYXR0ci5icF90eXBlID0gSFdfQlJFQUtQT0lOVF9SOworCisJCWJwID0gcmVnaXN0ZXJfdXNlcl9od19icmVha3BvaW50KCZhdHRyLCBwdHJhY2VfdHJpZ2dlcmVkLCB0c2spOworCQlpZiAoSVNfRVJSKGJwKSkKKwkJCXJldHVybiBQVFJfRVJSKGJwKTsKKworCQl0aHJlYWQtPnB0cmFjZV9icHNbMF0gPSBicDsKKwl9IGVsc2UgeworCQlpbnQgZXJyOworCisJCWF0dHIgPSBicC0+YXR0cjsKKwkJYXR0ci5icF9hZGRyID0gYWRkcjsKKwkJZXJyID0gbW9kaWZ5X3VzZXJfaHdfYnJlYWtwb2ludChicCwgJmF0dHIpOworCQlpZiAodW5saWtlbHkoZXJyKSkKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHZvaWQgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKIHsKLQkvKiBOZXh0IHNjaGVkdWxpbmcgd2lsbCBzZXQgdXAgVUJDICovCi0JaWYgKGNoaWxkLT50aHJlYWQudWJjX3BjID09IDApCi0JCXViY191c2VyY250ICs9IDE7Ci0KLQljaGlsZC0+dGhyZWFkLnViY19wYyA9IGdldF9zdGFja19sb25nKGNoaWxkLAotCQkJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBwYykpOworCXVuc2lnbmVkIGxvbmcgcGMgPSBnZXRfc3RhY2tfbG9uZyhjaGlsZCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSk7CiAKIAlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU0lOR0xFU1RFUCk7CisKKwlzZXRfc2luZ2xlX3N0ZXAoY2hpbGQsIHBjKTsKIH0KIAogdm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKIHsKIAljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TSU5HTEVTVEVQKTsKLQotCS8qCi0JICogRW5zdXJlIHRoZSBVQkMgaXMgbm90IHByb2dyYW1tZWQgYXQgdGhlIG5leHQgY29udGV4dCBzd2l0Y2guCi0JICoKLQkgKiBOb3JtYWxseSB0aGlzIGlzIG5vdCBuZWVkZWQgYnV0IHRoZXJlIGFyZSBzZXF1ZW5jZXMgc3VjaCBhcwotCSAqIHNpbmdsZXN0ZXAsIHNpZ25hbCBkZWxpdmVyeSwgYW5kIGNvbnRpbnVlIHRoYXQgbGVhdmUgdGhlCi0JICogdWJjX3BjIG5vbi16ZXJvIGxlYWRpbmcgdG8gc3B1cmlvdXMgU0lHVFJBUHMuCi0JICovCi0JaWYgKGNoaWxkLT50aHJlYWQudWJjX3BjICE9IDApIHsKLQkJdWJjX3VzZXJjbnQgLT0gMTsKLQkJY2hpbGQtPnRocmVhZC51YmNfcGMgPSAwOwotCX0KIH0KIAogLyoKQEAgLTE2MywxMCArMTk1LDEwIEBACiAKIAlpZiAoKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpCiAJCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAotCQkJCQkgICAmdGFyZ2V0LT50aHJlYWQuZnB1LmhhcmQsIDAsIC0xKTsKKwkJCQkJICAgJnRhcmdldC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSwgMCwgLTEpOwogCiAJcmV0dXJuIHVzZXJfcmVnc2V0X2NvcHlvdXQoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCi0JCQkJICAgJnRhcmdldC0+dGhyZWFkLmZwdS5zb2Z0LCAwLCAtMSk7CisJCQkJICAgJnRhcmdldC0+dGhyZWFkLnhzdGF0ZS0+c29mdGZwdSwgMCwgLTEpOwogfQogCiBzdGF0aWMgaW50IGZwcmVnc19zZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCkBAIC0xODQsMTAgKzIxNiwxMCBAQAogCiAJaWYgKChib290X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpKQogCQlyZXR1cm4gdXNlcl9yZWdzZXRfY29weWluKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAotCQkJCQkgICZ0YXJnZXQtPnRocmVhZC5mcHUuaGFyZCwgMCwgLTEpOworCQkJCQkgICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUsIDAsIC0xKTsKIAogCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCi0JCQkJICAmdGFyZ2V0LT50aHJlYWQuZnB1LnNvZnQsIDAsIC0xKTsKKwkJCQkgICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPnNvZnRmcHUsIDAsIC0xKTsKIH0KIAogc3RhdGljIGludCBmcHJlZ3NfYWN0aXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LApAQCAtMzMzLDcgKzM2NSw3IEBACiAJCQkJZWxzZQogCQkJCQl0bXAgPSAwOwogCQkJfSBlbHNlCi0JCQkJdG1wID0gKChsb25nICopJmNoaWxkLT50aHJlYWQuZnB1KQorCQkJCXRtcCA9ICgobG9uZyAqKWNoaWxkLT50aHJlYWQueHN0YXRlKQogCQkJCQlbKGFkZHIgLSAobG9uZykmZHVtbXktPmZwdSkgPj4gMl07CiAJCX0gZWxzZSBpZiAoYWRkciA9PSAobG9uZykgJmR1bW15LT51X2ZwdmFsaWQpCiAJCQl0bXAgPSAhIXRza191c2VkX21hdGgoY2hpbGQpOwpAQCAtMzYyLDcgKzM5NCw3IEBACiAJCWVsc2UgaWYgKGFkZHIgPj0gKGxvbmcpICZkdW1teS0+ZnB1ICYmCiAJCQkgYWRkciA8IChsb25nKSAmZHVtbXktPnVfZnB2YWxpZCkgewogCQkJc2V0X3N0b3BwZWRfY2hpbGRfdXNlZF9tYXRoKGNoaWxkKTsKLQkJCSgobG9uZyAqKSZjaGlsZC0+dGhyZWFkLmZwdSkKKwkJCSgobG9uZyAqKWNoaWxkLT50aHJlYWQueHN0YXRlKQogCQkJCVsoYWRkciAtIChsb25nKSZkdW1teS0+ZnB1KSA+PiAyXSA9IGRhdGE7CiAJCQlyZXQgPSAwOwogCQl9IGVsc2UgaWYgKGFkZHIgPT0gKGxvbmcpICZkdW1teS0+dV9mcHZhbGlkKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfNjQuYyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV82NC5jCmluZGV4IGIwNjNlYjguLjVmZDY0NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV82NC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV82NC5jCkBAIC04OCw3ICs4OCw3IEBACiAJCXJlZ3MtPnNyIHw9IFNSX0ZEOwogCX0KIAotCXRtcCA9ICgobG9uZyAqKSZ0YXNrLT50aHJlYWQuZnB1KVthZGRyIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKKwl0bXAgPSAoKGxvbmcgKil0YXNrLT50aHJlYWQueHN0YXRlKVthZGRyIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKIAlyZXR1cm4gdG1wOwogfQogCkBAIC0xMTQsOCArMTE0LDcgQEAKIAlyZWdzID0gKHN0cnVjdCBwdF9yZWdzKikoKHVuc2lnbmVkIGNoYXIgKil0YXNrICsgVEhSRUFEX1NJWkUpIC0gMTsKIAogCWlmICghdHNrX3VzZWRfbWF0aCh0YXNrKSkgewotCQlmcGluaXQoJnRhc2stPnRocmVhZC5mcHUuaGFyZCk7Ci0JCXNldF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aCh0YXNrKTsKKwkJaW5pdF9mcHUodGFzayk7CiAJfSBlbHNlIGlmIChsYXN0X3Rhc2tfdXNlZF9tYXRoID09IHRhc2spIHsKIAkJZW5hYmxlX2ZwdSgpOwogCQlzYXZlX2ZwdSh0YXNrKTsKQEAgLTEyNCw3ICsxMjMsNyBAQAogCQlyZWdzLT5zciB8PSBTUl9GRDsKIAl9CiAKLQkoKGxvbmcgKikmdGFzay0+dGhyZWFkLmZwdSlbYWRkciAvIHNpemVvZih1bnNpZ25lZCBsb25nKV0gPSBkYXRhOworCSgobG9uZyAqKXRhc2stPnRocmVhZC54c3RhdGUpW2FkZHIgLyBzaXplb2YodW5zaWduZWQgbG9uZyldID0gZGF0YTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI2LDcgKzIyNSw3IEBACiAJCXJldHVybiByZXQ7CiAKIAlyZXR1cm4gdXNlcl9yZWdzZXRfY29weW91dCgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKLQkJCQkgICAmdGFyZ2V0LT50aHJlYWQuZnB1LmhhcmQsIDAsIC0xKTsKKwkJCQkgICAmdGFyZ2V0LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LCAwLCAtMSk7CiB9CiAKIHN0YXRpYyBpbnQgZnByZWdzX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKQEAgLTI0Myw3ICsyNDIsNyBAQAogCXNldF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aCh0YXJnZXQpOwogCiAJcmV0dXJuIHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKLQkJCQkgICZ0YXJnZXQtPnRocmVhZC5mcHUuaGFyZCwgMCwgLTEpOworCQkJCSAgJnRhcmdldC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdSwgMCwgLTEpOwogfQogCiBzdGF0aWMgaW50IGZwcmVnc19hY3RpdmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCkBAIC00ODYsOSArNDg1LDEwIEBACiB9CiAKIC8qIENhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KLWFzbWxpbmthZ2Ugdm9pZCBkb19zb2Z0d2FyZV9icmVha19wb2ludCh1bnNpZ25lZCBsb25nIGxvbmcgdmVjLAotCQkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK0JVSUxEX1RSQVBfSEFORExFUihicmVha3BvaW50KQogeworCVRSQVBfSEFORExFUl9ERUNMOworCiAJLyogV2UgbmVlZCB0byBmb3J3YXJkIHN0ZXAgdGhlIFBDLCB0byBjb3VudGVyYWN0IHRoZSBiYWNrc3RlcCBkb25lCiAJICAgaW4gc2lnbmFsLmMuICovCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcmVib290LmMgYi9hcmNoL3NoL2tlcm5lbC9yZWJvb3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWZjYTY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvcmVib290LmMKQEAgLTAsMCArMSw5OCBAQAorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpZmRlZiBDT05GSUdfU1VQRVJIMzIKKyNpbmNsdWRlIDxhc20vd2F0Y2hkb2cuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCit2b2lkICgqcG1fcG93ZXJfb2ZmKSh2b2lkKTsKK0VYUE9SVF9TWU1CT0wocG1fcG93ZXJfb2ZmKTsKKworI2lmZGVmIENPTkZJR19TVVBFUkgzMgorc3RhdGljIHZvaWQgd2F0Y2hkb2dfdHJpZ2dlcl9pbW1lZGlhdGUodm9pZCkKK3sKKwlzaF93ZHRfd3JpdGVfY250KDB4RkYpOworCXNoX3dkdF93cml0ZV9jc3IoMHhDMik7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgbmF0aXZlX21hY2hpbmVfcmVzdGFydChjaGFyICogX191bnVzZWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCS8qIEFkZHJlc3MgZXJyb3Igd2l0aCBTUi5CTD0xIGZpcnN0LiAqLworCXRyaWdnZXJfYWRkcmVzc19lcnJvcigpOworCisjaWZkZWYgQ09ORklHX1NVUEVSSDMyCisJLyogSWYgdGhhdCBmYWlscyBvciBpcyB1bnN1cHBvcnRlZCwgZ28gZm9yIHRoZSB3YXRjaGRvZyBuZXh0LiAqLworCXdhdGNoZG9nX3RyaWdnZXJfaW1tZWRpYXRlKCk7CisjZW5kaWYKKworCS8qCisJICogR2l2ZSB1cCBhbmQgc2xlZXAuCisJICovCisJd2hpbGUgKDEpCisJCWNwdV9zbGVlcCgpOworfQorCitzdGF0aWMgdm9pZCBuYXRpdmVfbWFjaGluZV9zaHV0ZG93bih2b2lkKQoreworCXNtcF9zZW5kX3N0b3AoKTsKK30KKworc3RhdGljIHZvaWQgbmF0aXZlX21hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCit7CisJaWYgKHBtX3Bvd2VyX29mZikKKwkJcG1fcG93ZXJfb2ZmKCk7Cit9CisKK3N0YXRpYyB2b2lkIG5hdGl2ZV9tYWNoaW5lX2hhbHQodm9pZCkKK3sKKwkvKiBzdG9wIG90aGVyIGNwdXMgKi8KKwltYWNoaW5lX3NodXRkb3duKCk7CisKKwkvKiBzdG9wIHRoaXMgY3B1ICovCisJc3RvcF90aGlzX2NwdShOVUxMKTsKK30KKworc3RydWN0IG1hY2hpbmVfb3BzIG1hY2hpbmVfb3BzID0geworCS5wb3dlcl9vZmYJPSBuYXRpdmVfbWFjaGluZV9wb3dlcl9vZmYsCisJLnNodXRkb3duCT0gbmF0aXZlX21hY2hpbmVfc2h1dGRvd24sCisJLnJlc3RhcnQJPSBuYXRpdmVfbWFjaGluZV9yZXN0YXJ0LAorCS5oYWx0CQk9IG5hdGl2ZV9tYWNoaW5lX2hhbHQsCisjaWZkZWYgQ09ORklHX0tFWEVDCisJLmNyYXNoX3NodXRkb3duID0gbmF0aXZlX21hY2hpbmVfY3Jhc2hfc2h1dGRvd24sCisjZW5kaWYKK307CisKK3ZvaWQgbWFjaGluZV9wb3dlcl9vZmYodm9pZCkKK3sKKwltYWNoaW5lX29wcy5wb3dlcl9vZmYoKTsKK30KKwordm9pZCBtYWNoaW5lX3NodXRkb3duKHZvaWQpCit7CisJbWFjaGluZV9vcHMuc2h1dGRvd24oKTsKK30KKwordm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqY21kKQoreworCW1hY2hpbmVfb3BzLnJlc3RhcnQoY21kKTsKK30KKwordm9pZCBtYWNoaW5lX2hhbHQodm9pZCkKK3sKKwltYWNoaW5lX29wcy5oYWx0KCk7Cit9CisKKyNpZmRlZiBDT05GSUdfS0VYRUMKK3ZvaWQgbWFjaGluZV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwltYWNoaW5lX29wcy5jcmFzaF9zaHV0ZG93bihyZWdzKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKaW5kZXggOGIwZTY5Ny4uMzQ1OWU3MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCkBAIC00MjEsNiArNDIxLDggQEAKIAogCXBhcnNlX2Vhcmx5X3BhcmFtKCk7CiAKKwl1bmNhY2hlZF9pbml0KCk7CisKIAlwbGF0X2Vhcmx5X2RldmljZV9zZXR1cCgpOwogCiAJLyogTGV0IGVhcmx5cHJpbnRrIG91dHB1dCBlYXJseSBjb25zb2xlIG1lc3NhZ2VzICovCkBAIC00NDksMTcgKzQ1MSwxNSBAQAogI2lmZGVmIENPTkZJR19EVU1NWV9DT05TT0xFCiAJY29uc3dpdGNocCA9ICZkdW1teV9jb247CiAjZW5kaWYKKwlwYWdpbmdfaW5pdCgpOworCXBtYl9pbml0KCk7CisKKwlpb3JlbWFwX2ZpeGVkX2luaXQoKTsKIAogCS8qIFBlcmZvcm0gdGhlIG1hY2hpbmUgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb24gKi8KIAlpZiAobGlrZWx5KHNoX212Lm12X3NldHVwKSkKIAkJc2hfbXYubXZfc2V0dXAoY21kbGluZV9wKTsKIAotCXBhZ2luZ19pbml0KCk7Ci0KLSNpZmRlZiBDT05GSUdfUE1CX0VOQUJMRQotCXBtYl9pbml0KCk7Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19TTVAKIAlwbGF0X3NtcF9zZXR1cCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaF9iaW9zLmMgYi9hcmNoL3NoL2tlcm5lbC9zaF9iaW9zLmMKaW5kZXggYzg1MmY3OC4uNDc0NzVjYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2hfYmlvcy5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NoX2Jpb3MuYwpAQCAtMSwxOSArMSwzMCBAQAogLyoKLSAqICBsaW51eC9hcmNoL3NoL2tlcm5lbC9zaF9iaW9zLmMKICAqICBDIGludGVyZmFjZSBmb3IgdHJhcHBpbmcgaW50byB0aGUgc3RhbmRhcmQgTGludXhTSCBCSU9TLgogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDAgR3JlZyBCYW5rcywgTWl0Y2ggRGF2aXMKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIE5paWJlIFl1dGFrYQorICogIENvcHlyaWdodCAoQykgMjAwMiAgTS4gUi4gQnJvd24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDEwICBQYXVsIE11bmR0CiAgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vc2hfYmlvcy5oPgogCiAjZGVmaW5lIEJJT1NfQ0FMTF9DT05TT0xFX1dSSVRFCQkwCiAjZGVmaW5lIEJJT1NfQ0FMTF9FVEhfTk9ERV9BRERSCQkxMAogI2RlZmluZSBCSU9TX0NBTExfU0hVVERPV04JCTExCi0jZGVmaW5lIEJJT1NfQ0FMTF9DSEFSX09VVAkJMHgxZgkvKiBUT0RPOiBoYWNrICovCiAjZGVmaW5lIEJJT1NfQ0FMTF9HREJfREVUQUNICQkweGZmCiAKK3ZvaWQgKmdkYl92YnJfdmVjdG9yID0gTlVMTDsKKwogc3RhdGljIGlubGluZSBsb25nIHNoX2Jpb3NfY2FsbChsb25nIGZ1bmMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsCiAJCQkJICAgIGxvbmcgYXJnMykKIHsKQEAgLTIzLDYgKzM0LDkgQEAKIAlyZWdpc3RlciBsb25nIHI2IF9fYXNtX18oInI2IikgPSBhcmcyOwogCXJlZ2lzdGVyIGxvbmcgcjcgX19hc21fXygicjciKSA9IGFyZzM7CiAKKwlpZiAoIWdkYl92YnJfdmVjdG9yKQorCQlyZXR1cm4gLUVOT1NZUzsKKwogCV9fYXNtX18gX192b2xhdGlsZV9fKCJ0cmFwYQkjMHgzZiI6Ij16IihyMCkKIAkJCSAgICAgOiIwIihyMCksICJyIihyNCksICJyIihyNSksICJyIihyNiksICJyIihyNykKIAkJCSAgICAgOiJtZW1vcnkiKTsKQEAgLTM0LDExICs0OCw2IEBACiAJc2hfYmlvc19jYWxsKEJJT1NfQ0FMTF9DT05TT0xFX1dSSVRFLCAobG9uZylidWYsIChsb25nKWxlbiwgMCwgMCk7CiB9CiAKLXZvaWQgc2hfYmlvc19jaGFyX291dChjaGFyIGNoKQotewotCXNoX2Jpb3NfY2FsbChCSU9TX0NBTExfQ0hBUl9PVVQsIGNoLCAwLCAwLCAwKTsKLX0KLQogdm9pZCBzaF9iaW9zX2dkYl9kZXRhY2godm9pZCkKIHsKIAlzaF9iaW9zX2NhbGwoQklPU19DQUxMX0dEQl9ERVRBQ0gsIDAsIDAsIDAsIDApOwpAQCAtNTUsMyArNjQsMTA5IEBACiB7CiAJc2hfYmlvc19jYWxsKEJJT1NfQ0FMTF9TSFVURE9XTiwgaG93LCAwLCAwLCAwKTsKIH0KKworLyoKKyAqIFJlYWQgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgVkJSIHJlZ2lzdGVyIHRvIGluaXRpYWxpc2UgdGhlIHZlY3RvcgorICogdGhyb3VnaCB3aGljaCBkZWJ1ZyBhbmQgQklPUyB0cmFwcyBhcmUgZGVsZWdhdGVkIGJ5IHRoZSBMaW51eCB0cmFwCisgKiBoYW5kbGVyLgorICovCit2b2lkIHNoX2Jpb3NfdmJyX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZicjsKKworCWlmICh1bmxpa2VseShnZGJfdmJyX3ZlY3RvcikpCisJCXJldHVybjsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RjIHZiciwgJTAiIDogIj1yIiAodmJyKSk7CisKKwlpZiAodmJyKSB7CisJCWdkYl92YnJfdmVjdG9yID0gKHZvaWQgKikodmJyICsgMHgxMDApOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNldHRpbmcgR0RCIHRyYXAgdmVjdG9yIHRvICVwXG4iLAorCQkgICAgICAgZ2RiX3Zicl92ZWN0b3IpOworCX0gZWxzZQorCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNILUJJT1Mgbm90IGRldGVjdGVkXG4iKTsKK30KKworLyoqCisgKiBzaF9iaW9zX3Zicl9yZWxvYWQgLSBSZS1sb2FkIHRoZSBzeXN0ZW0gVkJSIGZyb20gdGhlIEJJT1MgdmVjdG9yLgorICoKKyAqIFRoaXMgY2FuIGJlIHVzZWQgYnkgc2F2ZS9yZXN0b3JlIGNvZGUgdG8gcmVpbml0aWFsaXplIHRoZSBzeXN0ZW0gVkJSCisgKiBmcm9tIHRoZSBmaXhlZCBCSU9TIFZCUi4gQSBuby1vcCBpZiBubyBCSU9TIFZCUiBpcyBrbm93bi4KKyAqLwordm9pZCBzaF9iaW9zX3Zicl9yZWxvYWQodm9pZCkKK3sKKwlpZiAoZ2RiX3Zicl92ZWN0b3IpCisJCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJCSJsZGMgJTAsIHZiciIKKwkJCToKKwkJCTogInIiICgoKHVuc2lnbmVkIGxvbmcpIGdkYl92YnJfdmVjdG9yKSAtIDB4MTAwKQorCQkJOiAibWVtb3J5IgorCQkpOworfQorCisvKgorICoJUHJpbnQgYSBzdHJpbmcgdGhyb3VnaCB0aGUgQklPUworICovCitzdGF0aWMgdm9pZCBzaF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywKKwkJCQkgdW5zaWduZWQgY291bnQpCit7CisJc2hfYmlvc19jb25zb2xlX3dyaXRlKHMsIGNvdW50KTsKK30KKworLyoKKyAqCVNldHVwIGluaXRpYWwgYmF1ZC9iaXRzL3Bhcml0eS4gV2UgZG8gdHdvIHRoaW5ncyBoZXJlOgorICoJLSBjb25zdHJ1Y3QgYSBjZmxhZyBzZXR0aW5nIGZvciB0aGUgZmlyc3QgcnNfb3BlbigpCisgKgktIGluaXRpYWxpemUgdGhlIHNlcmlhbCBwb3J0CisgKglSZXR1cm4gbm9uLXplcm8gaWYgd2UgZGlkbid0IGZpbmQgYSBzZXJpYWwgcG9ydC4KKyAqLworc3RhdGljIGludCBfX2luaXQgc2hfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCit7CisJaW50CWNmbGFnID0gQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKworCS8qCisJICoJTm93IGNvbnN0cnVjdCBhIGNmbGFnIHNldHRpbmcuCisJICoJVE9ETzogdGhpcyBpcyBhIHRvdGFsbHkgYm9ndXMgY2ZsYWcsIGFzIHdlIGhhdmUKKwkgKglubyBpZGVhIHdoYXQgc2VyaWFsIHNldHRpbmdzIHRoZSBCSU9TIGlzIHVzaW5nLCBvcgorCSAqCWV2ZW4gaWYgaXRzIHVzaW5nIHRoZSBzZXJpYWwgcG9ydCBhdCBhbGwuCisJICovCisJY2ZsYWcgfD0gQjExNTIwMCB8IENTOCB8IC8qbm8gcGFyaXR5Ki8wOworCisJY28tPmNmbGFnID0gY2ZsYWc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjb25zb2xlIGJpb3NfY29uc29sZSA9IHsKKwkubmFtZQkJPSAiYmlvcyIsCisJLndyaXRlCQk9IHNoX2NvbnNvbGVfd3JpdGUsCisJLnNldHVwCQk9IHNoX2NvbnNvbGVfc2V0dXAsCisJLmZsYWdzCQk9IENPTl9QUklOVEJVRkZFUiwKKwkuaW5kZXgJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgKmVhcmx5X2NvbnNvbGU7CisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2Vhcmx5X3ByaW50ayhjaGFyICpidWYpCit7CisJaW50IGtlZXBfZWFybHkgPSAwOworCisJaWYgKCFidWYpCisJCXJldHVybiAwOworCisJaWYgKHN0cnN0cihidWYsICJrZWVwIikpCisJCWtlZXBfZWFybHkgPSAxOworCisJaWYgKCFzdHJuY21wKGJ1ZiwgImJpb3MiLCA0KSkKKwkJZWFybHlfY29uc29sZSA9ICZiaW9zX2NvbnNvbGU7CisKKwlpZiAobGlrZWx5KGVhcmx5X2NvbnNvbGUpKSB7CisJCWlmIChrZWVwX2Vhcmx5KQorCQkJZWFybHlfY29uc29sZS0+ZmxhZ3MgJj0gfkNPTl9CT09UOworCQllbHNlCisJCQllYXJseV9jb25zb2xlLT5mbGFncyB8PSBDT05fQk9PVDsKKwkJcmVnaXN0ZXJfY29uc29sZShlYXJseV9jb25zb2xlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJlYXJseXByaW50ayIsIHNldHVwX2Vhcmx5X3ByaW50ayk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCmluZGV4IDEyODE1Y2UuLjU3OWNkMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlzZXRfdXNlZF9tYXRoKCk7Ci0JcmV0dXJuIF9fY29weV9mcm9tX3VzZXIoJnRzay0+dGhyZWFkLmZwdS5oYXJkLCAmc2MtPnNjX2ZwcmVnc1swXSwKKwlyZXR1cm4gX19jb3B5X2Zyb21fdXNlcigmdHNrLT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LCAmc2MtPnNjX2ZwcmVnc1swXSwKIAkJCQlzaXplb2YobG9uZykqKDE2KjIrMikpOwogfQogCkBAIC0xNzUsNyArMTc1LDcgQEAKIAljbGVhcl91c2VkX21hdGgoKTsKIAogCXVubGF6eV9mcHUodHNrLCByZWdzKTsKLQlyZXR1cm4gX19jb3B5X3RvX3VzZXIoJnNjLT5zY19mcHJlZ3NbMF0sICZ0c2stPnRocmVhZC5mcHUuaGFyZCwKKwlyZXR1cm4gX19jb3B5X3RvX3VzZXIoJnNjLT5zY19mcHJlZ3NbMF0sICZ0c2stPnRocmVhZC54c3RhdGUtPmhhcmRmcHUsCiAJCQkgICAgICBzaXplb2YobG9uZykqKDE2KjIrMikpOwogfQogI2VuZGlmIC8qIENPTkZJR19TSF9GUFUgKi8KQEAgLTUyOCw3ICs1MjgsNyBAQAogCQkvKiBmYWxsdGhyb3VnaCAqLwogCQljYXNlIC1FUkVTVEFSVE5PSU5UUjoKIAkJCXJlZ3MtPnJlZ3NbMF0gPSBzYXZlX3IwOwotCQkJcmVncy0+cGMgLT0gaW5zdHJ1Y3Rpb25fc2l6ZShjdHJsX2ludyhyZWdzLT5wYyAtIDQpKTsKKwkJCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoX19yYXdfcmVhZHcocmVncy0+cGMgLSA0KSk7CiAJCQlicmVhazsKIAl9CiB9CkBAIC02MjYsOSArNjI2LDkgQEAKIAkJICAgIHJlZ3MtPnJlZ3NbMF0gPT0gLUVSRVNUQVJUU1lTIHx8CiAJCSAgICByZWdzLT5yZWdzWzBdID09IC1FUkVTVEFSVE5PSU5UUikgewogCQkJcmVncy0+cmVnc1swXSA9IHNhdmVfcjA7Ci0JCQlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKGN0cmxfaW53KHJlZ3MtPnBjIC0gNCkpOworCQkJcmVncy0+cGMgLT0gaW5zdHJ1Y3Rpb25fc2l6ZShfX3Jhd19yZWFkdyhyZWdzLT5wYyAtIDQpKTsKIAkJfSBlbHNlIGlmIChyZWdzLT5yZWdzWzBdID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spIHsKLQkJCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoY3RybF9pbncocmVncy0+cGMgLSA0KSk7CisJCQlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKF9fcmF3X3JlYWR3KHJlZ3MtPnBjIC0gNCkpOwogCQkJcmVncy0+cmVnc1szXSA9IF9fTlJfcmVzdGFydF9zeXNjYWxsOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYwppbmRleCA1ODBlOTdkLi41YTlmMWYxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJCXJlZ3MtPnNyIHw9IFNSX0ZEOwogCX0KIAotCWVyciB8PSBfX2NvcHlfZnJvbV91c2VyKCZjdXJyZW50LT50aHJlYWQuZnB1LmhhcmQsICZzYy0+c2NfZnByZWdzWzBdLAorCWVyciB8PSBfX2NvcHlfZnJvbV91c2VyKCZjdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LCAmc2MtPnNjX2ZwcmVnc1swXSwKIAkJCQkoc2l6ZW9mKGxvbmcgbG9uZykgKiAzMikgKyAoc2l6ZW9mKGludCkgKiAxKSk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJCXJlZ3MtPnNyIHw9IFNSX0ZEOwogCX0KIAotCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmc2MtPnNjX2ZwcmVnc1swXSwgJmN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZCwKKwllcnIgfD0gX19jb3B5X3RvX3VzZXIoJnNjLT5zY19mcHJlZ3NbMF0sICZjdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LAogCQkJICAgICAgKHNpemVvZihsb25nIGxvbmcpICogMzIpICsgKHNpemVvZihpbnQpICogMSkpOwogCWNsZWFyX3VzZWRfbWF0aCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zbXAuYyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCmluZGV4IDk4M2UwNzkuLmUxMjRjZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCkBAIC0xNjEsMTUgKzE2MSw2IEBACiAJcGxhdF9zZW5kX2lwaShjcHUsIFNNUF9NU0dfUkVTQ0hFRFVMRSk7CiB9CiAKLXN0YXRpYyB2b2lkIHN0b3BfdGhpc19jcHUodm9pZCAqdW51c2VkKQotewotCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCi0JZm9yICg7OykKLQkJY3B1X3JlbGF4KCk7Ci19Ci0KIHZvaWQgc21wX3NlbmRfc3RvcCh2b2lkKQogewogCXNtcF9jYWxsX2Z1bmN0aW9uKHN0b3BfdGhpc19jcHUsIDAsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvc2gva2VybmVsL3RyYXBzLmMKaW5kZXggN2IwMzYzMy4uMDgzMGMyYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3NoL2tlcm5lbC90cmFwcy5jCkBAIC01OCw3ICs1OCw3IEBACiAJVFJBUF9IQU5ETEVSX0RFQ0w7CiAKIAkvKiBSZXdpbmQgKi8KLQlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKGN0cmxfaW53KHJlZ3MtPnBjIC0gNCkpOworCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoX19yYXdfcmVhZHcocmVncy0+cGMgLSA0KSk7CiAKIAlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgImRlYnVnIHRyYXAiLCByZWdzLCAwLCB2ZWMgJiAweGZmLAogCQkgICAgICAgU0lHVFJBUCkgPT0gTk9USUZZX1NUT1ApCkBAIC03NSw3ICs3NSw3IEBACiAJVFJBUF9IQU5ETEVSX0RFQ0w7CiAKIAkvKiBSZXdpbmQgKi8KLQlyZWdzLT5wYyAtPSBpbnN0cnVjdGlvbl9zaXplKGN0cmxfaW53KHJlZ3MtPnBjIC0gNCkpOworCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoX19yYXdfcmVhZHcocmVncy0+cGMgLSA0KSk7CiAKIAlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgImJ1ZyB0cmFwIiwgcmVncywgMCwgVFJBUEFfQlVHX09QQ09ERSAmIDB4ZmYsCiAJCSAgICAgICBTSUdUUkFQKSA9PSBOT1RJRllfU1RPUCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCmluZGV4IDg2NjM5YmUuLmMzZDg2ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYwpAQCAtMjQsMTEgKzI0LDEwIEBACiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KICNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vYWxpZ25tZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgogI2luY2x1ZGUgPGFzbS9rcHJvYmVzLmg+CiAKQEAgLTQ3LDczICs0Niw2IEBACiAjZGVmaW5lIFRSQVBfSUxMRUdBTF9TTE9UX0lOU1QJMTMKICNlbmRpZgogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZV91c2VyOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2Vfc3lzOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2VfaGFsZjsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlX3dvcmQ7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzZV9kd29yZDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlX211bHRpOwotLyogYml0ZmllbGQ6IDE6IHdhcm4gMjogZml4dXAgNDogc2lnbmFsIC0+IGNvbWJpbmF0aW9ucyAyfDQgJiYgMXwyfDQgYXJlIG5vdAotICAgdmFsaWQhICovCi1zdGF0aWMgaW50IHNlX3VzZXJtb2RlID0gMzsKLS8qIDA6IG5vIHdhcm5pbmcgMTogcHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UsIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KLXN0YXRpYyBpbnQgc2Vfa2Vybm1vZGVfd2FybjsKLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1zdGF0aWMgY29uc3QgY2hhciAqc2VfdXNlcm1vZGVfYWN0aW9uW10gPSB7Ci0JImlnbm9yZWQiLAotCSJ3YXJuIiwKLQkiZml4dXAiLAotCSJmaXh1cCt3YXJuIiwKLQkic2lnbmFsIiwKLQkic2lnbmFsK3dhcm4iCi19OwotCi1zdGF0aWMgaW50IGFsaWdubWVudF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQotewotCXNlcV9wcmludGYobSwgIlVzZXI6XHRcdCVsdVxuIiwgc2VfdXNlcik7Ci0Jc2VxX3ByaW50ZihtLCAiU3lzdGVtOlx0XHQlbHVcbiIsIHNlX3N5cyk7Ci0Jc2VxX3ByaW50ZihtLCAiSGFsZjpcdFx0JWx1XG4iLCBzZV9oYWxmKTsKLQlzZXFfcHJpbnRmKG0sICJXb3JkOlx0XHQlbHVcbiIsIHNlX3dvcmQpOwotCXNlcV9wcmludGYobSwgIkRXb3JkOlx0XHQlbHVcbiIsIHNlX2R3b3JkKTsKLQlzZXFfcHJpbnRmKG0sICJNdWx0aTpcdFx0JWx1XG4iLCBzZV9tdWx0aSk7Ci0Jc2VxX3ByaW50ZihtLCAiVXNlciBmYXVsdHM6XHQlaSAoJXMpXG4iLCBzZV91c2VybW9kZSwKLQkJCXNlX3VzZXJtb2RlX2FjdGlvbltzZV91c2VybW9kZV0pOwotCXNlcV9wcmludGYobSwgIktlcm5lbCBmYXVsdHM6XHQlaSAoZml4dXAlcylcbiIsIHNlX2tlcm5tb2RlX3dhcm4sCi0JCQlzZV9rZXJubW9kZV93YXJuID8gIit3YXJuIiA6ICIiKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhbGlnbm1lbnRfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBhbGlnbm1lbnRfcHJvY19zaG93LCBOVUxMKTsKLX0KLQotc3RhdGljIHNzaXplX3QgYWxpZ25tZW50X3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCi17Ci0JaW50ICpkYXRhID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5kYXRhOwotCWNoYXIgbW9kZTsKLQotCWlmIChjb3VudCA+IDApIHsKLQkJaWYgKGdldF91c2VyKG1vZGUsIGJ1ZmZlcikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKG1vZGUgPj0gJzAnICYmIG1vZGUgPD0gJzUnKQotCQkJKmRhdGEgPSBtb2RlIC0gJzAnOwotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFsaWdubWVudF9wcm9jX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IGFsaWdubWVudF9wcm9jX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKLQkud3JpdGUJCT0gYWxpZ25tZW50X3Byb2Nfd3JpdGUsCi19OwotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIGR1bXBfbWVtKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgbG9uZyBib3R0b20sIHVuc2lnbmVkIGxvbmcgdG9wKQogewogCXVuc2lnbmVkIGxvbmcgcDsKQEAgLTI2NSwxMCArMTk3LDEwIEBACiAJY291bnQgPSAxPDwoaW5zdHJ1Y3Rpb24mMyk7CiAKIAlzd2l0Y2ggKGNvdW50KSB7Ci0JY2FzZSAxOiBzZV9oYWxmICArPSAxOyBicmVhazsKLQljYXNlIDI6IHNlX3dvcmQgICs9IDE7IGJyZWFrOwotCWNhc2UgNDogc2VfZHdvcmQgKz0gMTsgYnJlYWs7Ci0JY2FzZSA4OiBzZV9tdWx0aSArPSAxOyBicmVhazsgLyogPz8/ICovCisJY2FzZSAxOiBpbmNfdW5hbGlnbmVkX2J5dGVfYWNjZXNzKCk7IGJyZWFrOworCWNhc2UgMjogaW5jX3VuYWxpZ25lZF93b3JkX2FjY2VzcygpOyBicmVhazsKKwljYXNlIDQ6IGluY191bmFsaWduZWRfZHdvcmRfYWNjZXNzKCk7IGJyZWFrOworCWNhc2UgODogaW5jX3VuYWxpZ25lZF9tdWx0aV9hY2Nlc3MoKTsgYnJlYWs7CiAJfQogCiAJcmV0ID0gLUVGQVVMVDsKQEAgLTQ1MiwxOCArMzg0LDggQEAKIAlybSA9IHJlZ3MtPnJlZ3NbaW5kZXhdOwogCiAJLyogc2hvdXQgYWJvdXQgZml4dXBzICovCi0JaWYgKCFleHBlY3RlZCkgewotCQlpZiAodXNlcl9tb2RlKHJlZ3MpICYmIChzZV91c2VybW9kZSAmIDEpICYmIHByaW50a19yYXRlbGltaXQoKSkKLQkJCXByX25vdGljZSgiRml4aW5nIHVwIHVuYWxpZ25lZCB1c2Vyc3BhY2UgYWNjZXNzICIKLQkJCQkgICJpbiBcIiVzXCIgcGlkPSVkIHBjPTB4JXAgaW5zPTB4JTA0aHhcbiIsCi0JCQkJICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwKLQkJCQkgICh2b2lkICopcmVncy0+cGMsIGluc3RydWN0aW9uKTsKLQkJZWxzZSBpZiAoc2Vfa2Vybm1vZGVfd2FybiAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCi0JCQlwcl9ub3RpY2UoIkZpeGluZyB1cCB1bmFsaWduZWQga2VybmVsIGFjY2VzcyAiCi0JCQkJICAiaW4gXCIlc1wiIHBpZD0lZCBwYz0weCVwIGlucz0weCUwNGh4XG4iLAotCQkJCSAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksCi0JCQkJICAodm9pZCAqKXJlZ3MtPnBjLCBpbnN0cnVjdGlvbik7Ci0JfQorCWlmICghZXhwZWN0ZWQpCisJCXVuYWxpZ25lZF9maXh1cHNfbm90aWZ5KGN1cnJlbnQsIGluc3RydWN0aW9uLCByZWdzKTsKIAogCXJldCA9IC1FRkFVTFQ7CiAJc3dpdGNoIChpbnN0cnVjdGlvbiYweEYwMDApIHsKQEAgLTYxNiwxMCArNTM4LDEwIEBACiAKIAlpZiAodXNlcl9tb2RlKHJlZ3MpKSB7CiAJCWludCBzaV9jb2RlID0gQlVTX0FEUkVSUjsKKwkJdW5zaWduZWQgaW50IHVzZXJfYWN0aW9uOwogCiAJCWxvY2FsX2lycV9lbmFibGUoKTsKLQotCQlzZV91c2VyICs9IDE7CisJCWluY191bmFsaWduZWRfdXNlcl9hY2Nlc3MoKTsKIAogCQlzZXRfZnMoVVNFUl9EUyk7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zdHJ1Y3Rpb24sIChpbnNuX3NpemVfdCAqKShyZWdzLT5wYyAmIH4xKSwKQEAgLTYzMCwxNiArNTUyLDEyIEBACiAJCXNldF9mcyhvbGRmcyk7CiAKIAkJLyogc2hvdXQgYWJvdXQgdXNlcnNwYWNlIGZpeHVwcyAqLwotCQlpZiAoc2VfdXNlcm1vZGUgJiAxKQotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJVbmFsaWduZWQgdXNlcnNwYWNlIGFjY2VzcyAiCi0JCQkgICAgICAgImluIFwiJXNcIiBwaWQ9JWQgcGM9MHglcCBpbnM9MHglMDRoeFxuIiwKLQkJCSAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsICh2b2lkICopcmVncy0+cGMsCi0JCQkgICAgICAgaW5zdHJ1Y3Rpb24pOworCQl1bmFsaWduZWRfZml4dXBzX25vdGlmeShjdXJyZW50LCBpbnN0cnVjdGlvbiwgcmVncyk7CiAKLQkJaWYgKHNlX3VzZXJtb2RlICYgMikKKwkJdXNlcl9hY3Rpb24gPSB1bmFsaWduZWRfdXNlcl9hY3Rpb24oKTsKKwkJaWYgKHVzZXJfYWN0aW9uICYgVU1fRklYVVApCiAJCQlnb3RvIGZpeHVwOwotCi0JCWlmIChzZV91c2VybW9kZSAmIDQpCisJCWlmICh1c2VyX2FjdGlvbiAmIFVNX1NJR05BTCkKIAkJCWdvdG8gdXNwYWNlX3NlZ3Y7CiAJCWVsc2UgewogCQkJLyogaWdub3JlICovCkBAIC02NTksNyArNTc3LDcgQEAKIAkJCQkJICAgICAgJnVzZXJfbWVtX2FjY2VzcywgMCk7CiAJCXNldF9mcyhvbGRmcyk7CiAKLQkJaWYgKHRtcD09MCkKKwkJaWYgKHRtcCA9PSAwKQogCQkJcmV0dXJuOyAvKiBzb3J0ZWQgKi8KIHVzcGFjZV9zZWd2OgogCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNlbmRpbmcgU0lHQlVTIHRvIFwiJXNcIiBkdWUgdG8gdW5hbGlnbmVkICIKQEAgLTY3Miw3ICs1OTAsNyBAQAogCQlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKilhZGRyZXNzOwogCQlmb3JjZV9zaWdfaW5mbyhTSUdCVVMsICZpbmZvLCBjdXJyZW50KTsKIAl9IGVsc2UgewotCQlzZV9zeXMgKz0gMTsKKwkJaW5jX3VuYWxpZ25lZF9rZXJuZWxfYWNjZXNzKCk7CiAKIAkJaWYgKHJlZ3MtPnBjICYgMSkKIAkJCWRpZSgidW5hbGlnbmVkIHByb2dyYW0gY291bnRlciIsIHJlZ3MsIGVycm9yX2NvZGUpOwpAQCAtNjg3LDExICs2MDUsNyBAQAogCQkJZGllKCJpbnNuIGZhdWx0aW5nIGluIGRvX2FkZHJlc3NfZXJyb3IiLCByZWdzLCAwKTsKIAkJfQogCi0JCWlmIChzZV9rZXJubW9kZV93YXJuKQotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJVbmFsaWduZWQga2VybmVsIGFjY2VzcyAiCi0JCQkgICAgICAgIm9uIGJlaGFsZiBvZiBcIiVzXCIgcGlkPSVkIHBjPTB4JXAgaW5zPTB4JTA0aHhcbiIsCi0JCQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCAodm9pZCAqKXJlZ3MtPnBjLAotCQkJICAgICAgIGluc3RydWN0aW9uKTsKKwkJdW5hbGlnbmVkX2ZpeHVwc19ub3RpZnkoY3VycmVudCwgaW5zdHJ1Y3Rpb24sIHJlZ3MpOwogCiAJCWhhbmRsZV91bmFsaWduZWRfYWNjZXNzKGluc3RydWN0aW9uLCByZWdzLAogCQkJCQkmdXNlcl9tZW1fYWNjZXNzLCAwKTsKQEAgLTg3NiwzNSArNzkwLDEwIEBACiAJZGllX2lmX2tlcm5lbCgiZXhjZXB0aW9uIiwgcmVncywgZXgpOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfU0hfU1RBTkRBUkRfQklPUykKLXZvaWQgKmdkYl92YnJfdmVjdG9yOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGdkYl92YnJfaW5pdCh2b2lkKQotewotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgdmJyOwotCi0JLyoKLQkgKiBSZWFkIHRoZSBvbGQgdmFsdWUgb2YgdGhlIFZCUiByZWdpc3RlciB0byBpbml0aWFsaXNlCi0JICogdGhlIHZlY3RvciB0aHJvdWdoIHdoaWNoIGRlYnVnIGFuZCBCSU9TIHRyYXBzIGFyZQotCSAqIGRlbGVnYXRlZCBieSB0aGUgTGludXggdHJhcCBoYW5kbGVyLgotCSAqLwotCWFzbSB2b2xhdGlsZSgic3RjIHZiciwgJTAiIDogIj1yIiAodmJyKSk7Ci0KLQlnZGJfdmJyX3ZlY3RvciA9ICh2b2lkICopKHZiciArIDB4MTAwKTsKLQlwcmludGsoIlNldHRpbmcgR0RCIHRyYXAgdmVjdG9yIHRvIDB4JTA4bHhcbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKWdkYl92YnJfdmVjdG9yKTsKLX0KLSNlbmRpZgotCiB2b2lkIF9fY3B1aW5pdCBwZXJfY3B1X3RyYXBfaW5pdCh2b2lkKQogewogCWV4dGVybiB2b2lkICp2YnJfYmFzZTsKIAotI2lmZGVmIENPTkZJR19TSF9TVEFOREFSRF9CSU9TCi0JaWYgKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgPT0gMCkKLQkJZ2RiX3Zicl9pbml0KCk7Ci0jZW5kaWYKLQogCS8qIE5PVEU6IFRoZSBWQlIgdmFsdWUgc2hvdWxkIGJlIGF0IFAxCiAJICAgKG9yIFAyLCB2aXJ0dXJhbCAiZml4ZWQiIGFkZHJlc3Mgc3BhY2UpLgogCSAgIEl0J3MgZGVmaW5pdGVseSBzaG91bGQgbm90IGluIHBoeXNpY2FsIGFkZHJlc3MuICAqLwpAQCAtOTU2LDExICs4NDUsOCBAQAogI2VuZGlmCiAKICNpZmRlZiBUUkFQX1VCQwotCXNldF9leGNlcHRpb25fdGFibGVfdmVjKFRSQVBfVUJDLCBicmVha19wb2ludF90cmFwKTsKKwlzZXRfZXhjZXB0aW9uX3RhYmxlX3ZlYyhUUkFQX1VCQywgYnJlYWtwb2ludF90cmFwX2hhbmRsZXIpOwogI2VuZGlmCi0KLQkvKiBTZXR1cCBWQlIgZm9yIGJvb3QgY3B1ICovCi0JcGVyX2NwdV90cmFwX2luaXQoKTsKIH0KIAogdm9pZCBzaG93X3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nICpzcCkKQEAgLTk4NSwzNCArODcxLDMgQEAKIAlzaG93X3N0YWNrKE5VTEwsIE5VTEwpOwogfQogRVhQT1JUX1NZTUJPTChkdW1wX3N0YWNrKTsKLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0vKgotICogVGhpcyBuZWVkcyB0byBiZSBkb25lIGFmdGVyIHN5c2N0bF9pbml0LCBvdGhlcndpc2Ugc3lzLyB3aWxsIGJlCi0gKiBvdmVyd3JpdHRlbi4gIEFjdHVhbGx5LCB0aGlzIHNob3VsZG4ndCBiZSBpbiBzeXMvIGF0IGFsbCBzaW5jZQotICogaXQgaXNuJ3QgYSBzeXNjdGwsIGFuZCBpdCBkb2Vzbid0IGNvbnRhaW4gc3lzY3RsIGluZm9ybWF0aW9uLgotICogV2Ugbm93IGxvY2F0ZSBpdCBpbiAvcHJvYy9jcHUvYWxpZ25tZW50IGluc3RlYWQuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGFsaWdubWVudF9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkaXIsICpyZXM7Ci0KLQlkaXIgPSBwcm9jX21rZGlyKCJjcHUiLCBOVUxMKTsKLQlpZiAoIWRpcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXMgPSBwcm9jX2NyZWF0ZV9kYXRhKCJhbGlnbm1lbnQiLCBTX0lXVVNSIHwgU19JUlVHTywgZGlyLAotCQkJICAgICAgICZhbGlnbm1lbnRfcHJvY19mb3BzLCAmc2VfdXNlcm1vZGUpOwotCWlmICghcmVzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotICAgICAgICByZXMgPSBwcm9jX2NyZWF0ZV9kYXRhKCJrZXJuZWxfYWxpZ25tZW50IiwgU19JV1VTUiB8IFNfSVJVR08sIGRpciwKLQkJCSAgICAgICAmYWxpZ25tZW50X3Byb2NfZm9wcywgJnNlX2tlcm5tb2RlX3dhcm4pOwotICAgICAgICBpZiAoIXJlcykKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLQotCXJldHVybiAwOwotfQotCi1mc19pbml0Y2FsbChhbGlnbm1lbnRfaW5pdCk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC90cmFwc182NC5jCmluZGV4IGQ4NmY1MzEuLmUzZjkyZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzY0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfNjQuYwpAQCAtNjExLDE5ICs2MTEsMTkgQEAKIAogCQlzd2l0Y2ggKHdpZHRoX3NoaWZ0KSB7CiAJCWNhc2UgMjoKLQkJCWN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW2Rlc3RyZWddID0gYnVmbG87CisJCQljdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbZGVzdHJlZ10gPSBidWZsbzsKIAkJCWJyZWFrOwogCQljYXNlIDM6CiAJCQlpZiAoZG9fcGFpcmVkX2xvYWQpIHsKLQkJCQljdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tkZXN0cmVnXSA9IGJ1ZmxvOwotCQkJCWN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW2Rlc3RyZWcrMV0gPSBidWZoaTsKKwkJCQljdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbZGVzdHJlZ10gPSBidWZsbzsKKwkJCQljdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbZGVzdHJlZysxXSA9IGJ1ZmhpOwogCQkJfSBlbHNlIHsKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfTElUVExFX0VORElBTikKLQkJCQljdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tkZXN0cmVnXSA9IGJ1ZmhpOwotCQkJCWN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW2Rlc3RyZWcrMV0gPSBidWZsbzsKKwkJCQljdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbZGVzdHJlZ10gPSBidWZoaTsKKwkJCQljdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbZGVzdHJlZysxXSA9IGJ1ZmxvOwogI2Vsc2UKLQkJCQljdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tkZXN0cmVnXSA9IGJ1ZmxvOwotCQkJCWN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW2Rlc3RyZWcrMV0gPSBidWZoaTsKKwkJCQljdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbZGVzdHJlZ10gPSBidWZsbzsKKwkJCQljdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3NbZGVzdHJlZysxXSA9IGJ1ZmhpOwogI2VuZGlmCiAJCQl9CiAJCQlicmVhazsKQEAgLTY4MSwxOSArNjgxLDE5IEBACiAKIAkJc3dpdGNoICh3aWR0aF9zaGlmdCkgewogCQljYXNlIDI6Ci0JCQlidWZsbyA9IGN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW3NyY3JlZ107CisJCQlidWZsbyA9IGN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tzcmNyZWddOwogCQkJYnJlYWs7CiAJCWNhc2UgMzoKIAkJCWlmIChkb19wYWlyZWRfbG9hZCkgewotCQkJCWJ1ZmxvID0gY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbc3JjcmVnXTsKLQkJCQlidWZoaSA9IGN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW3NyY3JlZysxXTsKKwkJCQlidWZsbyA9IGN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tzcmNyZWddOworCQkJCWJ1ZmhpID0gY3VycmVudC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW3NyY3JlZysxXTsKIAkJCX0gZWxzZSB7CiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4pCi0JCQkJYnVmaGkgPSBjdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tzcmNyZWddOwotCQkJCWJ1ZmxvID0gY3VycmVudC0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3Nbc3JjcmVnKzFdOworCQkJCWJ1ZmhpID0gY3VycmVudC0+dGhyZWFkLnhzdGF0ZS0+aGFyZGZwdS5mcF9yZWdzW3NyY3JlZ107CisJCQkJYnVmbG8gPSBjdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbc3JjcmVnKzFdOwogI2Vsc2UKLQkJCQlidWZsbyA9IGN1cnJlbnQtPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW3NyY3JlZ107Ci0JCQkJYnVmaGkgPSBjdXJyZW50LT50aHJlYWQuZnB1LmhhcmQuZnBfcmVnc1tzcmNyZWcrMV07CisJCQkJYnVmbG8gPSBjdXJyZW50LT50aHJlYWQueHN0YXRlLT5oYXJkZnB1LmZwX3JlZ3Nbc3JjcmVnXTsKKwkJCQlidWZoaSA9IGN1cnJlbnQtPnRocmVhZC54c3RhdGUtPmhhcmRmcHUuZnBfcmVnc1tzcmNyZWcrMV07CiAjZW5kaWYKIAkJCX0KIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvc2gva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggYTFlNGVjMi4uN2Y4YTcwOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3NoL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0zLDcgKzMsNyBAQAogICogV3JpdHRlbiBieSBOaWliZSBZdXRha2EgYW5kIFBhdWwgTXVuZHQKICAqLwogI2lmZGVmIENPTkZJR19TVVBFUkg2NAotI2RlZmluZSBMT0FEX09GRlNFVAlDT05GSUdfUEFHRV9PRkZTRVQKKyNkZWZpbmUgTE9BRF9PRkZTRVQJUEFHRV9PRkZTRVQKIE9VVFBVVF9BUkNIKHNoOnNoNSkKICNlbHNlCiAjZGVmaW5lIExPQURfT0ZGU0VUCTAKQEAgLTE0LDE3ICsxNCwxNiBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS92bWxpbnV4Lmxkcy5oPgogCisjaWZkZWYgQ09ORklHX1BNQgorICNkZWZpbmUgTUVNT1JZX09GRlNFVAkwCisjZWxzZQorICNkZWZpbmUgTUVNT1JZX09GRlNFVAlfX01FTU9SWV9TVEFSVAorI2VuZGlmCisKIEVOVFJZKF9zdGFydCkKIFNFQ1RJT05TCiB7Ci0jaWZkZWYgQ09ORklHX1BNQl9GSVhFRAotCS4gPSBDT05GSUdfUEFHRV9PRkZTRVQgKyAoQ09ORklHX01FTU9SWV9TVEFSVCAmIDB4MWZmZmZmZmYpICsKLQkgICAgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR18zMkJJVCkKLQkuID0gQ09ORklHX1BBR0VfT0ZGU0VUICsgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ7Ci0jZWxzZQotCS4gPSBDT05GSUdfUEFHRV9PRkZTRVQgKyBDT05GSUdfTUVNT1JZX1NUQVJUICsgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ7Ci0jZW5kaWYKKwkuID0gUEFHRV9PRkZTRVQgKyBNRU1PUllfT0ZGU0VUICsgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ7CiAKIAlfdGV4dCA9IC47CQkvKiBUZXh0IGFuZCByZWFkLW9ubHkgZGF0YSAqLwogCkBAIC0zNSwxMiArMzQsNyBAQAogCS50ZXh0IDogQVQoQUREUigudGV4dCkgLSBMT0FEX09GRlNFVCkgewogCQlIRUFEX1RFWFQKIAkJVEVYVF9URVhUCi0KLSNpZmRlZiBDT05GSUdfU1VQRVJINjQKLQkJKigudGV4dDY0KQotCQkqKC50ZXh0Li5TSG1lZGlhMzIpCi0jZW5kaWYKLQorCQlFWFRSQV9URVhUCiAJCVNDSEVEX1RFWFQKIAkJTE9DS19URVhUCiAJCUtQUk9CRVNfVEVYVApAQCAtNTEsMjQgKzQ1LDEyIEBACiAJfSA9IDB4MDAwOQogCiAJRVhDRVBUSU9OX1RBQkxFKDE2KQotCiAJTk9URVMKKworCV9zZGF0YSA9IC47CiAJUk9fREFUQShQQUdFX1NJWkUpCi0KLQkvKgotCSAqIENvZGUgd2hpY2ggbXVzdCBiZSBleGVjdXRlZCB1bmNhY2hlZCBhbmQgdGhlIGFzc29jaWF0ZWQgZGF0YQotCSAqLwotCS4gPSBBTElHTihQQUdFX1NJWkUpOwotCS51bmNhY2hlZCA6IEFUKEFERFIoLnVuY2FjaGVkKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9fdW5jYWNoZWRfc3RhcnQgPSAuOwotCQkqKC51bmNhY2hlZC50ZXh0KQotCQkqKC51bmNhY2hlZC5kYXRhKQotCQlfX3VuY2FjaGVkX2VuZCA9IC47Ci0JfQotCiAJUldfREFUQV9TRUNUSU9OKEwxX0NBQ0hFX0JZVEVTLCBQQUdFX1NJWkUsIFRIUkVBRF9TSVpFKQotCi0JX2VkYXRhID0gLjsJCQkvKiBFbmQgb2YgZGF0YSBzZWN0aW9uICovCisJX2VkYXRhID0gLjsKIAogCURXQVJGX0VIX0ZSQU1FCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbWF0aC1lbXUvbWF0aC5jIGIvYXJjaC9zaC9tYXRoLWVtdS9tYXRoLmMKaW5kZXggZDZjMTVjYS4uMWZjZGIxMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tYXRoLWVtdS9tYXRoLmMKKysrIGIvYXJjaC9zaC9tYXRoLWVtdS9tYXRoLmMKQEAgLTQ3MSwxMCArNDcxLDEwIEBACiAgKglkZW5vcm1hbF90b19kb3VibGUgLSBHaXZlbiBkZW5vcm1hbGl6ZWQgZmxvYXQgbnVtYmVyLAogICoJICAgICAgICAgICAgICAgICAgICAgc3RvcmUgZG91YmxlIGZsb2F0CiAgKgotICoJQGZwdTogUG9pbnRlciB0byBzaF9mcHVfaGFyZCBzdHJ1Y3R1cmUKKyAqCUBmcHU6IFBvaW50ZXIgdG8gc2hfZnB1X3NvZnQgc3RydWN0dXJlCiAgKglAbjogSW5kZXggdG8gRlAgcmVnaXN0ZXIKICAqLwotc3RhdGljIHZvaWQgZGVub3JtYWxfdG9fZG91YmxlKHN0cnVjdCBzaF9mcHVfaGFyZF9zdHJ1Y3QgKmZwdSwgaW50IG4pCitzdGF0aWMgdm9pZCBkZW5vcm1hbF90b19kb3VibGUoc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCAqZnB1LCBpbnQgbikKIHsKIAl1bnNpZ25lZCBsb25nIGR1LCBkbDsKIAl1bnNpZ25lZCBsb25nIHggPSBmcHUtPmZwdWw7CkBAIC01NTIsMTEgKzU1MiwxMSBAQAogCWlmICgoZmluc24gJiAweGYxZmYpID09IDB4ZjBhZCkgeyAvKiBmY252c2QgKi8KIAkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCi0JCWlmICgodHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJiAoMSA8PCAxNykpKSB7CisJCWlmICgodHNrLT50aHJlYWQueHN0YXRlLT5zb2Z0ZnB1LmZwc2NyICYgKDEgPDwgMTcpKSkgewogCQkJLyogRlBVIGVycm9yICovCi0JCQlkZW5vcm1hbF90b19kb3VibGUgKCZ0c2stPnRocmVhZC5mcHUuaGFyZCwKKwkJCWRlbm9ybWFsX3RvX2RvdWJsZSAoJnRzay0+dGhyZWFkLnhzdGF0ZS0+c29mdGZwdSwKIAkJCQkJICAgIChmaW5zbiA+PiA4KSAmIDB4Zik7Ci0JCQl0c2stPnRocmVhZC5mcHUuaGFyZC5mcHNjciAmPQorCQkJdHNrLT50aHJlYWQueHN0YXRlLT5zb2Z0ZnB1LmZwc2NyICY9CiAJCQkJfihGUFNDUl9DQVVTRV9NQVNLIHwgRlBTQ1JfRkxBR19NQVNLKTsKIAkJCXRhc2tfdGhyZWFkX2luZm8odHNrKS0+c3RhdHVzIHw9IFRTX1VTRURGUFU7CiAJCX0gZWxzZSB7CkBAIC02MTcsNyArNjE3LDcgQEAKIGludCBkb19mcHVfaW5zdCh1bnNpZ25lZCBzaG9ydCBpbnN0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0Jc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCAqZnB1ID0gJih0c2stPnRocmVhZC5mcHUuc29mdCk7CisJc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCAqZnB1ID0gJih0c2stPnRocmVhZC54c3RhdGUtPnNvZnRmcHUpOwogCiAJaWYgKCEodGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgJiBUU19VU0VERlBVKSkgewogCQkvKiBpbml0aWFsaXplIG9uY2UuICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL0tjb25maWcgYi9hcmNoL3NoL21tL0tjb25maWcKaW5kZXggOTg2YTcxYi4uMTQ0NWNhNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9LY29uZmlnCisrKyBiL2FyY2gvc2gvbW0vS2NvbmZpZwpAQCAtNzUsNTIgKzc1LDI1IEBACiBjb25maWcgMjlCSVQKIAlkZWZfYm9vbCAhMzJCSVQKIAlkZXBlbmRzIG9uIFNVUEVSSDMyCisJc2VsZWN0IFVOQ0FDSEVEX01BUFBJTkcKIAogY29uZmlnIDMyQklUCiAJYm9vbAogCWRlZmF1bHQgeSBpZiBDUFVfU0g1CiAKLWNvbmZpZyBQTUJfRU5BQkxFCitjb25maWcgUE1CCiAJYm9vbCAiU3VwcG9ydCAzMi1iaXQgcGh5c2ljYWwgYWRkcmVzc2luZyB0aHJvdWdoIFBNQiIKIAlkZXBlbmRzIG9uIE1NVSAmJiBFWFBFUklNRU5UQUwgJiYgQ1BVX1NINEEgJiYgIUNQVV9TSDRBTF9EU1AKLQloZWxwCi0JICBJZiB5b3Ugc2F5IFkgaGVyZSwgcGh5c2ljYWwgYWRkcmVzc2luZyB3aWxsIGJlIGV4dGVuZGVkIHRvCi0JICAzMi1iaXRzIHRocm91Z2ggdGhlIFNILTRBIFBNQi4gSWYgdGhpcyBpcyBub3Qgc2V0LCBsZWdhY3kKLQkgIDI5LWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgdXNlZC4KLQotY2hvaWNlCi0JcHJvbXB0ICJQTUIgaGFuZGxpbmcgdHlwZSIKLQlkZXBlbmRzIG9uIFBNQl9FTkFCTEUKLQlkZWZhdWx0IFBNQl9GSVhFRAotCi1jb25maWcgUE1CCi0JYm9vbCAiUE1CIgotCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiBDUFVfU0g0QSAmJiAhQ1BVX1NINEFMX0RTUAotCWhlbHAKLQkgIElmIHlvdSBzYXkgWSBoZXJlLCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgZXh0ZW5kZWQgdG8KLQkgIDMyLWJpdHMgdGhyb3VnaCB0aGUgU0gtNEEgUE1CLiBJZiB0aGlzIGlzIG5vdCBzZXQsIGxlZ2FjeQotCSAgMjktYml0IHBoeXNpY2FsIGFkZHJlc3Npbmcgd2lsbCBiZSB1c2VkLgotCi1jb25maWcgUE1CX0ZJWEVECi0JYm9vbCAiZml4ZWQgUE1CIgotCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiBDUFVfU0g0QSAmJiAhQ1BVX1NINEFMX0RTUAogCXNlbGVjdCAzMkJJVAorCXNlbGVjdCBVTkNBQ0hFRF9NQVBQSU5HCiAJaGVscAotCSAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgZml4ZWQgUE1CIG1hcHBpbmdzIGFyZSBpbmhlcml0ZWQKLQkgIGZyb20gdGhlIGJvb3QgbG9hZGVyLCBhbmQgdGhlIGtlcm5lbCBkb2VzIG5vdCBhdHRlbXB0IGR5bmFtaWMKLQkgIG1hbmFnZW1lbnQuIFRoaXMgaXMgdGhlIGNsb3Nlc3QgdG8gbGVnYWN5IDI5LWJpdCBwaHlzaWNhbCBtb2RlLAotCSAgYW5kIGFsbG93cyBzeXN0ZW1zIHRvIHN1cHBvcnQgdXAgdG8gNTEyTWlCIG9mIHN5c3RlbSBtZW1vcnkuCi0KLWVuZGNob2ljZQorCSAgSWYgeW91IHNheSBZIGhlcmUsIHBoeXNpY2FsIGFkZHJlc3Npbmcgd2lsbCBiZSBleHRlbmRlZCB0bworCSAgMzItYml0cyB0aHJvdWdoIHRoZSBTSC00QSBQTUIuIElmIHRoaXMgaXMgbm90IHNldCwgbGVnYWN5CisJICAyOS1iaXQgcGh5c2ljYWwgYWRkcmVzc2luZyB3aWxsIGJlIHVzZWQuCiAKIGNvbmZpZyBYMlRMQgotCWJvb2wgIkVuYWJsZSBleHRlbmRlZCBUTEIgbW9kZSIKLQlkZXBlbmRzIG9uIChDUFVfU0hYMiB8fCBDUFVfU0hYMykgJiYgTU1VICYmIEVYUEVSSU1FTlRBTAotCWhlbHAKLQkgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiB3aWxsIGVuYWJsZSB0aGUgZXh0ZW5kZWQgbW9kZSBvZiB0aGUgU0gtWDIKLQkgIFRMQi4gRm9yIGxlZ2FjeSBTSC1YIGJlaGF2aW91ciBhbmQgaW50ZXJvcGVyYWJpbGl0eSwgc2F5IE4uIEZvcgotCSAgYWxsIG9mIHRoZSBmdW4gbmV3IGZlYXR1cmVzIGFuZCBhIHdpbGxpbmdsZXNzIHRvIHN1Ym1pdCBidWcgcmVwb3J0cywKLQkgIHNheSBZLgorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIChDUFVfU0hYMiB8fCBDUFVfU0hYMykgJiYgTU1VCiAKIGNvbmZpZyBWU1lTQ0FMTAogCWJvb2wgIlN1cHBvcnQgdnN5c2NhbGwgcGFnZSIKQEAgLTE4OCwxNCArMTYxLDE5IEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUcKIAorY29uZmlnIElPUkVNQVBfRklYRUQKKyAgICAgICBkZWZfYm9vbCB5CisgICAgICAgZGVwZW5kcyBvbiBYMlRMQiB8fCBTVVBFUkg2NAorCitjb25maWcgVU5DQUNIRURfTUFQUElORworCWJvb2wKKwogY2hvaWNlCiAJcHJvbXB0ICJLZXJuZWwgcGFnZSBzaXplIgotCWRlZmF1bHQgUEFHRV9TSVpFXzhLQiBpZiBYMlRMQgogCWRlZmF1bHQgUEFHRV9TSVpFXzRLQgogCiBjb25maWcgUEFHRV9TSVpFXzRLQgogCWJvb2wgIjRrQiIKLQlkZXBlbmRzIG9uICFNTVUgfHwgIVgyVExCCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZGVmYXVsdCBwYWdlIHNpemUgdXNlZCBieSBhbGwgU3VwZXJIIENQVXMuCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vTWFrZWZpbGUgYi9hcmNoL3NoL21tL01ha2VmaWxlCmluZGV4IDhhNzA1MzUuLjNkYzhhOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9tbS9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eCBTdXBlckgtc3BlY2lmaWMgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VyLgogIwogCi1vYmoteQkJCTo9IGNhY2hlLm8gaW5pdC5vIGNvbnNpc3RlbnQubyBtbWFwLm8KK29iai15CQkJOj0gYWxpZ25tZW50Lm8gY2FjaGUubyBpbml0Lm8gY29uc2lzdGVudC5vIG1tYXAubwogCiBjYWNoZW9wcy0kKENPTkZJR19DUFVfU0gyKQkJOj0gY2FjaGUtc2gyLm8KIGNhY2hlb3BzLSQoQ09ORklHX0NQVV9TSDJBKQkJOj0gY2FjaGUtc2gyYS5vCkBAIC0xNSw3ICsxNSw3IEBACiAKIG1tdS15CQkJOj0gbm9tbXUubyBleHRhYmxlXzMyLm8KIG1tdS0kKENPTkZJR19NTVUpCTo9IGV4dGFibGVfJChCSVRTKS5vIGZhdWx0XyQoQklUUykubyBcCi0JCQkgICBpb3JlbWFwXyQoQklUUykubyBrbWFwLm8gdGxiZmx1c2hfJChCSVRTKS5vCisJCQkgICBpb3JlbWFwLm8ga21hcC5vIHBndGFibGUubyB0bGJmbHVzaF8kKEJJVFMpLm8KIAogb2JqLXkJCQkrPSAkKG1tdS15KQogb2JqLSQoQ09ORklHX0RFQlVHX0ZTKQkrPSBhc2lkcy1kZWJ1Z2ZzLm8KQEAgLTI2LDE1ICsyNiwxNyBAQAogCiBpZmRlZiBDT05GSUdfTU1VCiB0bGItJChDT05GSUdfQ1BVX1NIMykJCTo9IHRsYi1zaDMubwotdGxiLSQoQ09ORklHX0NQVV9TSDQpCQk6PSB0bGItc2g0Lm8KK3RsYi0kKENPTkZJR19DUFVfU0g0KQkJOj0gdGxiLXNoNC5vIHRsYi11cmIubwogdGxiLSQoQ09ORklHX0NQVV9TSDUpCQk6PSB0bGItc2g1Lm8KLXRsYi0kKENPTkZJR19DUFVfSEFTX1BURUFFWCkJOj0gdGxiLXB0ZWFleC5vCit0bGItJChDT05GSUdfQ1BVX0hBU19QVEVBRVgpCTo9IHRsYi1wdGVhZXgubyB0bGItdXJiLm8KIG9iai15CQkJCSs9ICQodGxiLXkpCiBlbmRpZgogCiBvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKQkrPSBodWdldGxicGFnZS5vCi1vYmotJChDT05GSUdfUE1CX0VOQUJMRSkJKz0gcG1iLm8KK29iai0kKENPTkZJR19QTUIpCQkrPSBwbWIubwogb2JqLSQoQ09ORklHX05VTUEpCQkrPSBudW1hLm8KK29iai0kKENPTkZJR19JT1JFTUFQX0ZJWEVEKQkrPSBpb3JlbWFwX2ZpeGVkLm8KK29iai0kKENPTkZJR19VTkNBQ0hFRF9NQVBQSU5HKQkrPSB1bmNhY2hlZC5vCiAKICMgU3BlY2lhbCBmbGFncyBmb3IgZmF1bHRfNjQuby4gIFRoaXMgcHV0cyByZXN0cmljdGlvbnMgb24gdGhlIG51bWJlciBvZgogIyBjYWxsZXItc2F2ZSByZWdpc3RlcnMgdGhhdCB0aGUgY29tcGlsZXIgY2FuIHRhcmdldCB3aGVuIGJ1aWxkaW5nIHRoaXMgZmlsZS4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vYWxpZ25tZW50LmMgYi9hcmNoL3NoL21tL2FsaWdubWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNTk1YjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL21tL2FsaWdubWVudC5jCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogQWxpZ25tZW50IGFjY2VzcyBjb3VudGVycyBhbmQgY29ycmVzcG9uZGluZyB1c2VyLXNwYWNlIGludGVyZmFjZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFNUIE1pY3JvZWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIDIwMTAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9hbGlnbm1lbnQuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNlX3VzZXI7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZV9zeXM7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZV9oYWxmOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2Vfd29yZDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNlX2R3b3JkOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2VfbXVsdGk7CisvKiBiaXRmaWVsZDogMTogd2FybiAyOiBmaXh1cCA0OiBzaWduYWwgLT4gY29tYmluYXRpb25zIDJ8NCAmJiAxfDJ8NCBhcmUgbm90CisgICB2YWxpZCEgKi8KK3N0YXRpYyBpbnQgc2VfdXNlcm1vZGUgPSBVTV9XQVJOIHwgVU1fRklYVVA7CisvKiAwOiBubyB3YXJuaW5nIDE6IHByaW50IGEgd2FybmluZyBtZXNzYWdlLCBkaXNhYmxlZCBieSBkZWZhdWx0ICovCitzdGF0aWMgaW50IHNlX2tlcm5tb2RlX3dhcm47CisKK2NvcmVfcGFyYW0oYWxpZ25tZW50LCBzZV91c2VybW9kZSwgaW50LCAwNjAwKTsKKwordm9pZCBpbmNfdW5hbGlnbmVkX2J5dGVfYWNjZXNzKHZvaWQpCit7CisJc2VfaGFsZisrOworfQorCit2b2lkIGluY191bmFsaWduZWRfd29yZF9hY2Nlc3Modm9pZCkKK3sKKwlzZV93b3JkKys7Cit9CisKK3ZvaWQgaW5jX3VuYWxpZ25lZF9kd29yZF9hY2Nlc3Modm9pZCkKK3sKKwlzZV9kd29yZCsrOworfQorCit2b2lkIGluY191bmFsaWduZWRfbXVsdGlfYWNjZXNzKHZvaWQpCit7CisJc2VfbXVsdGkrKzsKK30KKwordm9pZCBpbmNfdW5hbGlnbmVkX3VzZXJfYWNjZXNzKHZvaWQpCit7CisJc2VfdXNlcisrOworfQorCit2b2lkIGluY191bmFsaWduZWRfa2VybmVsX2FjY2Vzcyh2b2lkKQoreworCXNlX3N5cysrOworfQorCisvKgorICogVGhpcyBkZWZhdWx0cyB0byB0aGUgZ2xvYmFsIHBvbGljeSB3aGljaCBjYW4gYmUgc2V0IGZyb20gdGhlIGNvbW1hbmQKKyAqIGxpbmUsIHdoaWxlIHByb2Nlc3NlcyBjYW4gb3ZlcmxvYWQgdGhlaXIgcHJlZmVyZW5jZXMgdmlhIHByY3RsKCkuCisgKi8KK3Vuc2lnbmVkIGludCB1bmFsaWduZWRfdXNlcl9hY3Rpb24odm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgYWN0aW9uID0gc2VfdXNlcm1vZGU7CisKKwlpZiAoY3VycmVudC0+dGhyZWFkLmZsYWdzICYgU0hfVEhSRUFEX1VBQ19TSUdCVVMpIHsKKwkJYWN0aW9uICY9IH5VTV9GSVhVUDsKKwkJYWN0aW9uIHw9IFVNX1NJR05BTDsKKwl9CisKKwlpZiAoY3VycmVudC0+dGhyZWFkLmZsYWdzICYgU0hfVEhSRUFEX1VBQ19OT1BSSU5UKQorCQlhY3Rpb24gJj0gflVNX1dBUk47CisKKwlyZXR1cm4gYWN0aW9uOworfQorCitpbnQgZ2V0X3VuYWxpZ25fY3RsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIHB1dF91c2VyKHRzay0+dGhyZWFkLmZsYWdzICYgU0hfVEhSRUFEX1VBQ19NQVNLLAorCQkJKHVuc2lnbmVkIGludCBfX3VzZXIgKilhZGRyKTsKK30KKworaW50IHNldF91bmFsaWduX2N0bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl0c2stPnRocmVhZC5mbGFncyA9ICh0c2stPnRocmVhZC5mbGFncyAmIH5TSF9USFJFQURfVUFDX01BU0spIHwKKwkJCSAgICAodmFsICYgU0hfVEhSRUFEX1VBQ19NQVNLKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB1bmFsaWduZWRfZml4dXBzX25vdGlmeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW5zbl9zaXplX3QgaW5zbiwKKwkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKHVzZXJfbW9kZShyZWdzKSAmJiAoc2VfdXNlcm1vZGUgJiBVTV9XQVJOKSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCisJCXByX25vdGljZSgiRml4aW5nIHVwIHVuYWxpZ25lZCB1c2Vyc3BhY2UgYWNjZXNzICIKKwkJCSAgImluIFwiJXNcIiBwaWQ9JWQgcGM9MHglcCBpbnM9MHglMDRoeFxuIiwKKwkJCSAgdHNrLT5jb21tLCB0YXNrX3BpZF9ucih0c2spLAorCQkJICAodm9pZCAqKWluc3RydWN0aW9uX3BvaW50ZXIocmVncyksIGluc24pOworCWVsc2UgaWYgKHNlX2tlcm5tb2RlX3dhcm4gJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQorCQlwcl9ub3RpY2UoIkZpeGluZyB1cCB1bmFsaWduZWQga2VybmVsIGFjY2VzcyAiCisJCQkgICJpbiBcIiVzXCIgcGlkPSVkIHBjPTB4JXAgaW5zPTB4JTA0aHhcbiIsCisJCQkgIHRzay0+Y29tbSwgdGFza19waWRfbnIodHNrKSwKKwkJCSAgKHZvaWQgKilpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpLCBpbnNuKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNlX3VzZXJtb2RlX2FjdGlvbltdID0geworCSJpZ25vcmVkIiwKKwkid2FybiIsCisJImZpeHVwIiwKKwkiZml4dXArd2FybiIsCisJInNpZ25hbCIsCisJInNpZ25hbCt3YXJuIgorfTsKKworc3RhdGljIGludCBhbGlnbm1lbnRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzZXFfcHJpbnRmKG0sICJVc2VyOlx0XHQlbHVcbiIsIHNlX3VzZXIpOworCXNlcV9wcmludGYobSwgIlN5c3RlbTpcdFx0JWx1XG4iLCBzZV9zeXMpOworCXNlcV9wcmludGYobSwgIkhhbGY6XHRcdCVsdVxuIiwgc2VfaGFsZik7CisJc2VxX3ByaW50ZihtLCAiV29yZDpcdFx0JWx1XG4iLCBzZV93b3JkKTsKKwlzZXFfcHJpbnRmKG0sICJEV29yZDpcdFx0JWx1XG4iLCBzZV9kd29yZCk7CisJc2VxX3ByaW50ZihtLCAiTXVsdGk6XHRcdCVsdVxuIiwgc2VfbXVsdGkpOworCXNlcV9wcmludGYobSwgIlVzZXIgZmF1bHRzOlx0JWkgKCVzKVxuIiwgc2VfdXNlcm1vZGUsCisJCQlzZV91c2VybW9kZV9hY3Rpb25bc2VfdXNlcm1vZGVdKTsKKwlzZXFfcHJpbnRmKG0sICJLZXJuZWwgZmF1bHRzOlx0JWkgKGZpeHVwJXMpXG4iLCBzZV9rZXJubW9kZV93YXJuLAorCQkJc2Vfa2Vybm1vZGVfd2FybiA/ICIrd2FybiIgOiAiIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxpZ25tZW50X3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYWxpZ25tZW50X3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFsaWdubWVudF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQoreworCWludCAqZGF0YSA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKKwljaGFyIG1vZGU7CisKKwlpZiAoY291bnQgPiAwKSB7CisJCWlmIChnZXRfdXNlcihtb2RlLCBidWZmZXIpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChtb2RlID49ICcwJyAmJiBtb2RlIDw9ICc1JykKKwkJCSpkYXRhID0gbW9kZSAtICcwJzsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhbGlnbm1lbnRfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBhbGlnbm1lbnRfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLndyaXRlCQk9IGFsaWdubWVudF9wcm9jX3dyaXRlLAorfTsKKworLyoKKyAqIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhZnRlciBzeXNjdGxfaW5pdCwgb3RoZXJ3aXNlIHN5cy8gd2lsbCBiZQorICogb3ZlcndyaXR0ZW4uICBBY3R1YWxseSwgdGhpcyBzaG91bGRuJ3QgYmUgaW4gc3lzLyBhdCBhbGwgc2luY2UKKyAqIGl0IGlzbid0IGEgc3lzY3RsLCBhbmQgaXQgZG9lc24ndCBjb250YWluIHN5c2N0bCBpbmZvcm1hdGlvbi4KKyAqIFdlIG5vdyBsb2NhdGUgaXQgaW4gL3Byb2MvY3B1L2FsaWdubWVudCBpbnN0ZWFkLgorICovCitzdGF0aWMgaW50IF9faW5pdCBhbGlnbm1lbnRfaW5pdCh2b2lkKQoreworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyLCAqcmVzOworCisJZGlyID0gcHJvY19ta2RpcigiY3B1IiwgTlVMTCk7CisJaWYgKCFkaXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVzID0gcHJvY19jcmVhdGVfZGF0YSgiYWxpZ25tZW50IiwgU19JV1VTUiB8IFNfSVJVR08sIGRpciwKKwkJCSAgICAgICAmYWxpZ25tZW50X3Byb2NfZm9wcywgJnNlX3VzZXJtb2RlKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKyAgICAgICAgcmVzID0gcHJvY19jcmVhdGVfZGF0YSgia2VybmVsX2FsaWdubWVudCIsIFNfSVdVU1IgfCBTX0lSVUdPLCBkaXIsCisJCQkgICAgICAgJmFsaWdubWVudF9wcm9jX2ZvcHMsICZzZV9rZXJubW9kZV93YXJuKTsKKyAgICAgICAgaWYgKCFyZXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KK2ZzX2luaXRjYWxsKGFsaWdubWVudF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtZGVidWdmcy5jIGIvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMKaW5kZXggNWJhMDY3Yi4uNjkwZWQwMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMKQEAgLTIyLDggKzIyLDcgQEAKIAlDQUNIRV9UWVBFX1VOSUZJRUQsCiB9OwogCi1zdGF0aWMgaW50IF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIGNhY2hlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwKLQkJCQkJCSAgdm9pZCAqaXRlcikKK3N0YXRpYyBpbnQgY2FjaGVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICppdGVyKQogewogCXVuc2lnbmVkIGludCBjYWNoZV90eXBlID0gKHVuc2lnbmVkIGludClmaWxlLT5wcml2YXRlOwogCXN0cnVjdCBjYWNoZV9pbmZvICpjYWNoZTsKQEAgLTM3LDcgKzM2LDcgQEAKIAkgKi8KIAlqdW1wX3RvX3VuY2FjaGVkKCk7CiAKLQljY3IgPSBjdHJsX2lubChDQ1IpOworCWNjciA9IF9fcmF3X3JlYWRsKENDUik7CiAJaWYgKChjY3IgJiBDQ1JfQ0FDSEVfRU5BQkxFKSA9PSAwKSB7CiAJCWJhY2tfdG9fY2FjaGVkKCk7CiAKQEAgLTkwLDcgKzg5LDcgQEAKIAkJZm9yIChhZGRyID0gYWRkcnN0YXJ0LCBsaW5lID0gMDsKIAkJICAgICBhZGRyIDwgYWRkcnN0YXJ0ICsgd2F5c2l6ZTsKIAkJICAgICBhZGRyICs9IGNhY2hlLT5saW5lc3osIGxpbmUrKykgewotCQkJdW5zaWduZWQgbG9uZyBkYXRhID0gY3RybF9pbmwoYWRkcik7CisJCQl1bnNpZ25lZCBsb25nIGRhdGEgPSBfX3Jhd19yZWFkbChhZGRyKTsKIAogCQkJLyogQ2hlY2sgdGhlIFYgYml0LCBpZ25vcmUgaW52YWxpZCBjYWNoZWxpbmVzICovCiAJCQlpZiAoKGRhdGEgJiAxKSA9PSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1zaDIuYyBiL2FyY2gvc2gvbW0vY2FjaGUtc2gyLmMKaW5kZXggNjk5YTcxZi4uZGVmY2Y3MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1zaDIuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLXNoMi5jCkBAIC0yOCwxMCArMjgsMTAgQEAKIAkJdW5zaWduZWQgbG9uZyBhZGRyID0gQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8ICh2ICYgMHgwMDAwMGZmMCk7CiAJCWludCB3YXk7CiAJCWZvciAod2F5ID0gMDsgd2F5IDwgNDsgd2F5KyspIHsKLQkJCXVuc2lnbmVkIGxvbmcgZGF0YSA9ICBjdHJsX2lubChhZGRyIHwgKHdheSA8PCAxMikpOworCQkJdW5zaWduZWQgbG9uZyBkYXRhID0gIF9fcmF3X3JlYWRsKGFkZHIgfCAod2F5IDw8IDEyKSk7CiAJCQlpZiAoKGRhdGEgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSA9PSAodiAmIENBQ0hFX1BIWVNBRERSX01BU0spKSB7CiAJCQkJZGF0YSAmPSB+U0hfQ0FDSEVfVVBEQVRFRDsKLQkJCQljdHJsX291dGwoZGF0YSwgYWRkciB8ICh3YXkgPDwgMTIpKTsKKwkJCQlfX3Jhd193cml0ZWwoZGF0YSwgYWRkciB8ICh3YXkgPDwgMTIpKTsKIAkJCX0KIAkJfQogCX0KQEAgLTQ3LDcgKzQ3LDcgQEAKIAkJJiB+KEwxX0NBQ0hFX0JZVEVTLTEpOwogCiAJZm9yICh2ID0gYmVnaW47IHYgPCBlbmQ7IHYrPUwxX0NBQ0hFX0JZVEVTKQotCQljdHJsX291dGwoKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSwKKwkJX19yYXdfd3JpdGVsKCh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSyksCiAJCQkgIENBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCAodiAmIDB4MDAwMDBmZjApIHwgMHgwMDAwMDAwOCk7CiB9CiAKQEAgLTYzLDkgKzYzLDkgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJanVtcF90b191bmNhY2hlZCgpOwogCi0JY2NyID0gY3RybF9pbmwoQ0NSKTsKKwljY3IgPSBfX3Jhd19yZWFkbChDQ1IpOwogCWNjciB8PSBDQ1JfQ0FDSEVfSU5WQUxJREFURTsKLQljdHJsX291dGwoY2NyLCBDQ1IpOworCV9fcmF3X3dyaXRlbChjY3IsIENDUik7CiAKIAliYWNrX3RvX2NhY2hlZCgpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTc4LDcgKzc4LDcgQEAKIAkJJiB+KEwxX0NBQ0hFX0JZVEVTLTEpOwogCiAJZm9yICh2ID0gYmVnaW47IHYgPCBlbmQ7IHYrPUwxX0NBQ0hFX0JZVEVTKQotCQljdHJsX291dGwoKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSwKKwkJX19yYXdfd3JpdGVsKCh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSyksCiAJCQkgIENBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCAodiAmIDB4MDAwMDBmZjApIHwgMHgwMDAwMDAwOCk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2gyYS5jIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDJhLmMKaW5kZXggOTc1ODk5ZC4uMWY1MTIyNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1zaDJhLmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDJhLmMKQEAgLTMyLDEwICszMiwxMCBAQAogCQl1bnNpZ25lZCBsb25nIGFkZHIgPSBDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgKHYgJiAweDAwMDAwN2YwKTsKIAkJaW50IHdheTsKIAkJZm9yICh3YXkgPSAwOyB3YXkgPCA0OyB3YXkrKykgewotCQkJdW5zaWduZWQgbG9uZyBkYXRhID0gIGN0cmxfaW5sKGFkZHIgfCAod2F5IDw8IDExKSk7CisJCQl1bnNpZ25lZCBsb25nIGRhdGEgPSAgX19yYXdfcmVhZGwoYWRkciB8ICh3YXkgPDwgMTEpKTsKIAkJCWlmICgoZGF0YSAmIENBQ0hFX1BIWVNBRERSX01BU0spID09ICh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSykpIHsKIAkJCQlkYXRhICY9IH5TSF9DQUNIRV9VUERBVEVEOwotCQkJCWN0cmxfb3V0bChkYXRhLCBhZGRyIHwgKHdheSA8PCAxMSkpOworCQkJCV9fcmF3X3dyaXRlbChkYXRhLCBhZGRyIHwgKHdheSA8PCAxMSkpOwogCQkJfQogCQl9CiAJfQpAQCAtNTgsNyArNTgsNyBAQAogCWp1bXBfdG9fdW5jYWNoZWQoKTsKIAogCWZvciAodiA9IGJlZ2luOyB2IDwgZW5kOyB2Kz1MMV9DQUNIRV9CWVRFUykgewotCQljdHJsX291dGwoKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSwKKwkJX19yYXdfd3JpdGVsKCh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSyksCiAJCQkgIENBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCAodiAmIDB4MDAwMDA3ZjApIHwgMHgwMDAwMDAwOCk7CiAJfQogCWJhY2tfdG9fY2FjaGVkKCk7CkBAIC03OCwxNyArNzgsMTcgQEAKIAlqdW1wX3RvX3VuY2FjaGVkKCk7CiAKICNpZmRlZiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLCi0JY3RybF9vdXRsKGN0cmxfaW5sKENDUikgfCBDQ1JfT0NBQ0hFX0lOVkFMSURBVEUsIENDUik7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKENDUikgfCBDQ1JfT0NBQ0hFX0lOVkFMSURBVEUsIENDUik7CiAJLyogSS1jYWNoZSBpbnZhbGlkYXRlICovCiAJZm9yICh2ID0gYmVnaW47IHYgPCBlbmQ7IHYrPUwxX0NBQ0hFX0JZVEVTKSB7Ci0JCWN0cmxfb3V0bCgodiAmIENBQ0hFX1BIWVNBRERSX01BU0spLAorCQlfX3Jhd193cml0ZWwoKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSwKIAkJCSAgQ0FDSEVfSUNfQUREUkVTU19BUlJBWSB8ICh2ICYgMHgwMDAwMDdmMCkgfCAweDAwMDAwMDA4KTsKIAl9CiAjZWxzZQogCWZvciAodiA9IGJlZ2luOyB2IDwgZW5kOyB2Kz1MMV9DQUNIRV9CWVRFUykgewotCQljdHJsX291dGwoKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSwKKwkJX19yYXdfd3JpdGVsKCh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSyksCiAJCQkgIENBQ0hFX0lDX0FERFJFU1NfQVJSQVkgfCAodiAmIDB4MDAwMDA3ZjApIHwgMHgwMDAwMDAwOCk7Ci0JCWN0cmxfb3V0bCgodiAmIENBQ0hFX1BIWVNBRERSX01BU0spLAorCQlfX3Jhd193cml0ZWwoKHYgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSwKIAkJCSAgQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8ICh2ICYgMHgwMDAwMDdmMCkgfCAweDAwMDAwMDA4KTsKIAl9CiAjZW5kaWYKQEAgLTExNSwxNCArMTE1LDE0IEBACiAJCWludCB3YXk7CiAJCS8qIE8tQ2FjaGUgd3JpdGViYWNrICovCiAJCWZvciAod2F5ID0gMDsgd2F5IDwgNDsgd2F5KyspIHsKLQkJCXVuc2lnbmVkIGxvbmcgZGF0YSA9ICBjdHJsX2lubChDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgYWRkciB8ICh3YXkgPDwgMTEpKTsKKwkJCXVuc2lnbmVkIGxvbmcgZGF0YSA9ICBfX3Jhd19yZWFkbChDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgYWRkciB8ICh3YXkgPDwgMTEpKTsKIAkJCWlmICgoZGF0YSAmIENBQ0hFX1BIWVNBRERSX01BU0spID09ICh2ICYgQ0FDSEVfUEhZU0FERFJfTUFTSykpIHsKIAkJCQlkYXRhICY9IH5TSF9DQUNIRV9VUERBVEVEOwotCQkJCWN0cmxfb3V0bChkYXRhLCBDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgYWRkciB8ICh3YXkgPDwgMTEpKTsKKwkJCQlfX3Jhd193cml0ZWwoZGF0YSwgQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8IGFkZHIgfCAod2F5IDw8IDExKSk7CiAJCQl9CiAJCX0KIAkJLyogSS1DYWNoZSBpbnZhbGlkYXRlICovCi0JCWN0cmxfb3V0bChhZGRyLAorCQlfX3Jhd193cml0ZWwoYWRkciwKIAkJCSAgQ0FDSEVfSUNfQUREUkVTU19BUlJBWSB8IGFkZHIgfCAweDAwMDAwMDA4KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2gzLmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoMy5jCmluZGV4IGZhZWY4MGMuLmUzNzUyM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2gzLmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDMuYwpAQCAtNTAsMTIgKzUwLDEyIEBACiAJCQlwID0gX19wYSh2KTsKIAkJCWFkZHIgPSBhZGRyc3RhcnQgfCAodiAmIGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmVudHJ5X21hc2spOwogCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQkJZGF0YSA9IGN0cmxfaW5sKGFkZHIpOworCQkJZGF0YSA9IF9fcmF3X3JlYWRsKGFkZHIpOwogCiAJCQlpZiAoKGRhdGEgJiBDQUNIRV9QSFlTQUREUl9NQVNLKSA9PQogCQkJICAgIChwICYgQ0FDSEVfUEhZU0FERFJfTUFTSykpIHsKIAkJCQlkYXRhICY9IH5TSF9DQUNIRV9VUERBVEVEOwotCQkJCWN0cmxfb3V0bChkYXRhLCBhZGRyKTsKKwkJCQlfX3Jhd193cml0ZWwoZGF0YSwgYWRkcik7CiAJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtODYsNyArODYsNyBAQAogCQlkYXRhID0gKHYgJiAweGZmZmZmYzAwKTsgLyogX1ZpcnR1YWxfIGFkZHJlc3MsIH5VLCB+ViAqLwogCQlhZGRyID0gQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8CiAJCQkodiAmIGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmVudHJ5X21hc2spIHwgU0hfQ0FDSEVfQVNTT0M7Ci0JCWN0cmxfb3V0bChkYXRhLCBhZGRyKTsKKwkJX19yYXdfd3JpdGVsKGRhdGEsIGFkZHIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKaW5kZXggNTYwZGRiNi4uMmNmYWU4MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCkBAIC0zNiw3ICszNiw3IEBACiAgKiBDYWxsZWQgZnJvbSBrZXJuZWwvbW9kdWxlLmM6c3lzX2luaXRfbW9kdWxlIGFuZCByb3V0aW5lIGZvciBhLm91dCBmb3JtYXQsCiAgKiBzaWduYWwgaGFuZGxlciBjb2RlIGFuZCBrcHJvYmVzIGNvZGUKICAqLwotc3RhdGljIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgc2g0X2ZsdXNoX2ljYWNoZV9yYW5nZSh2b2lkICphcmdzKQorc3RhdGljIHZvaWQgc2g0X2ZsdXNoX2ljYWNoZV9yYW5nZSh2b2lkICphcmdzKQogewogCXN0cnVjdCBmbHVzaGVyX2RhdGEgKmRhdGEgPSBhcmdzOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKQEAgLTEwOSw2ICsxMDksNyBAQAogc3RhdGljIHZvaWQgc2g0X2ZsdXNoX2RjYWNoZV9wYWdlKHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFyZzsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSk7CiAjaWZuZGVmIENPTkZJR19TTVAKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKIApAQCAtMTE2LDIyICsxMTcsMTQgQEAKIAkJc2V0X2JpdChQR19kY2FjaGVfZGlydHksICZwYWdlLT5mbGFncyk7CiAJZWxzZQogI2VuZGlmCi0JewotCQl1bnNpZ25lZCBsb25nIHBoeXMgPSBwYWdlX3RvX3BoeXMocGFnZSk7Ci0JCXVuc2lnbmVkIGxvbmcgYWRkciA9IENBQ0hFX09DX0FERFJFU1NfQVJSQVk7Ci0JCWludCBpLCBuOwotCi0JCS8qIExvb3AgYWxsIHRoZSBELWNhY2hlICovCi0JCW4gPSBib290X2NwdV9kYXRhLmRjYWNoZS5uX2FsaWFzZXM7Ci0JCWZvciAoaSA9IDA7IGkgPCBuOyBpKyssIGFkZHIgKz0gUEFHRV9TSVpFKQotCQkJZmx1c2hfY2FjaGVfb25lKGFkZHIsIHBoeXMpOwotCX0KKwkJZmx1c2hfY2FjaGVfb25lKENBQ0hFX09DX0FERFJFU1NfQVJSQVkgfAorCQkJCShhZGRyICYgc2htX2FsaWduX21hc2spLCBwYWdlX3RvX3BoeXMocGFnZSkpOwogCiAJd21iKCk7CiB9CiAKIC8qIFRPRE86IFNlbGVjdGl2ZSBpY2FjaGUgaW52YWxpZGF0aW9uIHRocm91Z2ggSUMgYWRkcmVzcyBhcnJheS4uICovCi1zdGF0aWMgdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBmbHVzaF9pY2FjaGVfYWxsKHZvaWQpCitzdGF0aWMgdm9pZCBmbHVzaF9pY2FjaGVfYWxsKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgY2NyOwogCkBAIC0xMzksOSArMTMyLDkgQEAKIAlqdW1wX3RvX3VuY2FjaGVkKCk7CiAKIAkvKiBGbHVzaCBJLWNhY2hlICovCi0JY2NyID0gY3RybF9pbmwoQ0NSKTsKKwljY3IgPSBfX3Jhd19yZWFkbChDQ1IpOwogCWNjciB8PSBDQ1JfQ0FDSEVfSUNJOwotCWN0cmxfb3V0bChjY3IsIENDUik7CisJX19yYXdfd3JpdGVsKGNjciwgQ0NSKTsKIAogCS8qCiAJICogYmFja190b19jYWNoZWQoKSB3aWxsIHRha2UgY2FyZSBvZiB0aGUgYmFycmllciBmb3IgdXMsIGRvbid0IGFkZApAQCAtMzg0LDkgKzM3Nyw5IEBACiB2b2lkIF9faW5pdCBzaDRfY2FjaGVfaW5pdCh2b2lkKQogewogCXByaW50aygiUFZSPSUwOHggQ1ZSPSUwOHggUFJSPSUwOHhcbiIsCi0JCWN0cmxfaW5sKENDTl9QVlIpLAotCQljdHJsX2lubChDQ05fQ1ZSKSwKLQkJY3RybF9pbmwoQ0NOX1BSUikpOworCQlfX3Jhd19yZWFkbChDQ05fUFZSKSwKKwkJX19yYXdfcmVhZGwoQ0NOX0NWUiksCisJCV9fcmF3X3JlYWRsKENDTl9QUlIpKTsKIAogCWxvY2FsX2ZsdXNoX2ljYWNoZV9yYW5nZQk9IHNoNF9mbHVzaF9pY2FjaGVfcmFuZ2U7CiAJbG9jYWxfZmx1c2hfZGNhY2hlX3BhZ2UJCT0gc2g0X2ZsdXNoX2RjYWNoZV9wYWdlOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1zaDc3MDUuYyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g3NzA1LmMKaW5kZXggZjUyN2ZiNy4uZjQ5OGRhMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1zaDc3MDUuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLXNoNzcwNS5jCkBAIC00OCwxMCArNDgsMTAgQEAKIAkJCXVuc2lnbmVkIGxvbmcgZGF0YTsKIAkJCWludCB2ID0gU0hfQ0FDSEVfVVBEQVRFRCB8IFNIX0NBQ0hFX1ZBTElEOwogCi0JCQlkYXRhID0gY3RybF9pbmwoYWRkcik7CisJCQlkYXRhID0gX19yYXdfcmVhZGwoYWRkcik7CiAKIAkJCWlmICgoZGF0YSAmIHYpID09IHYpCi0JCQkJY3RybF9vdXRsKGRhdGEgJiB+diwgYWRkcik7CisJCQkJX19yYXdfd3JpdGVsKGRhdGEgJiB+diwgYWRkcik7CiAKIAkJfQogCkBAIC03OCw3ICs3OCw3IEBACiAvKgogICogV3JpdGViYWNrJkludmFsaWRhdGUgdGhlIEQtY2FjaGUgb2YgdGhlIHBhZ2UKICAqLwotc3RhdGljIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgX19mbHVzaF9kY2FjaGVfcGFnZSh1bnNpZ25lZCBsb25nIHBoeXMpCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2RjYWNoZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGh5cykKIHsKIAl1bnNpZ25lZCBsb25nIHdheXMsIHdheXNpemUsIGFkZHJzdGFydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTE1LDEwICsxMTUsMTAgQEAKIAkJICAgICBhZGRyICs9IGN1cnJlbnRfY3B1X2RhdGEuZGNhY2hlLmxpbmVzeikgewogCQkJdW5zaWduZWQgbG9uZyBkYXRhOwogCi0JCQlkYXRhID0gY3RybF9pbmwoYWRkcikgJiAoMHgxZmZmZkMwMCB8IFNIX0NBQ0hFX1ZBTElEKTsKKwkJCWRhdGEgPSBfX3Jhd19yZWFkbChhZGRyKSAmICgweDFmZmZmQzAwIHwgU0hfQ0FDSEVfVkFMSUQpOwogCQkgICAgICAgIGlmIChkYXRhID09IHBoeXMpIHsKIAkJCQlkYXRhICY9IH4oU0hfQ0FDSEVfVkFMSUQgfCBTSF9DQUNIRV9VUERBVEVEKTsKLQkJCQljdHJsX291dGwoZGF0YSwgYWRkcik7CisJCQkJX19yYXdfd3JpdGVsKGRhdGEsIGFkZHIpOwogCQkJfQogCQl9CiAKQEAgLTE0NCw3ICsxNDQsNyBAQAogCQlfX2ZsdXNoX2RjYWNoZV9wYWdlKF9fcGEocGFnZV9hZGRyZXNzKHBhZ2UpKSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIHNoNzcwNV9mbHVzaF9jYWNoZV9hbGwodm9pZCAqYXJncykKK3N0YXRpYyB2b2lkIHNoNzcwNV9mbHVzaF9jYWNoZV9hbGwodm9pZCAqYXJncykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLmMgYi9hcmNoL3NoL21tL2NhY2hlLmMKaW5kZXggYjg2MDdmYS4uMGY0MDk1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUuYwpAQCAtMiw3ICsyLDcgQEAKICAqIGFyY2gvc2gvbW0vY2FjaGUuYwogICoKICAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMiAgTmlpYmUgWXV0YWthCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA5ICBQYXVsIE11bmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDEwICBQYXVsIE11bmR0CiAgKgogICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCiAgKi8KQEAgLTQxLDggKzQxLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3YWl0KQogewogCXByZWVtcHRfZGlzYWJsZSgpOwotCXNtcF9jYWxsX2Z1bmN0aW9uKGZ1bmMsIGluZm8sIHdhaXQpOworCisJLyoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBnZXRzIGNhbGxlZCBlYXJseSBvbiB3aGVuIElSUXMgYXJlCisJICogc3RpbGwgZGlzYWJsZWQgZHVlIHRvIGlvcmVtYXBwaW5nIGJ5IHRoZSBib290IENQVSwgc28gZG9uJ3QKKwkgKiBldmVuIGF0dGVtcHQgSVBJcyB1bmxlc3MgdGhlcmUgYXJlIG90aGVyIENQVXMgb25saW5lLgorCSAqLworCWlmIChudW1fb25saW5lX2NwdXMoKSA+IDEpCisJCXNtcF9jYWxsX2Z1bmN0aW9uKGZ1bmMsIGluZm8sIHdhaXQpOworCiAJZnVuYyhpbmZvKTsKKwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vZmF1bHRfMzIuYyBiL2FyY2gvc2gvbW0vZmF1bHRfMzIuYwppbmRleCA0NzUzMDEwLi44YmY3OWUzIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2ZhdWx0XzMyLmMKKysrIGIvYXJjaC9zaC9tbS9mYXVsdF8zMi5jCkBAIC01Myw2ICs1Myw5IEBACiAJaWYgKCFwdWRfcHJlc2VudCgqcHVkX2spKQogCQlyZXR1cm4gTlVMTDsKIAorCWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpCisJICAgIHNldF9wdWQocHVkLCAqcHVkX2spOworCiAJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpOwogCXBtZF9rID0gcG1kX29mZnNldChwdWRfaywgYWRkcmVzcyk7CiAJaWYgKCFwbWRfcHJlc2VudCgqcG1kX2spKQpAQCAtMzcxLDcgKzM3NCw3IEBACiAJCWxvY2FsX2ZsdXNoX3RsYl9vbmUoZ2V0X2FzaWQoKSwgYWRkcmVzcyAmIFBBR0VfTUFTSyk7CiAjZW5kaWYKIAotCXVwZGF0ZV9tbXVfY2FjaGUoTlVMTCwgYWRkcmVzcywgZW50cnkpOworCXVwZGF0ZV9tbXVfY2FjaGUoTlVMTCwgYWRkcmVzcywgcHRlKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pbml0LmMgYi9hcmNoL3NoL21tL2luaXQuYwppbmRleCA0MzJhY2QwLi42ODAyOGU4IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2luaXQuYworKysgYi9hcmNoL3NoL21tL2luaXQuYwpAQCAtMjEsMjUgKzIxLDEzIEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07CiAKLSNpZmRlZiBDT05GSUdfU1VQRVJIMzIKLS8qCi0gKiBIYW5kbGUgdHJpdmlhbCB0cmFuc2l0aW9ucyBiZXR3ZWVuIGNhY2hlZCBhbmQgdW5jYWNoZWQKLSAqIHNlZ21lbnRzLCBtYWtpbmcgdXNlIG9mIHRoZSAxOjEgbWFwcGluZyByZWxhdGlvbnNoaXAgaW4KLSAqIDUxMk1CIGxvd21lbS4KLSAqCi0gKiBUaGlzIGlzIHRoZSBvZmZzZXQgb2YgdGhlIHVuY2FjaGVkIHNlY3Rpb24gZnJvbSBpdHMgY2FjaGVkIGFsaWFzLgotICogRGVmYXVsdCB2YWx1ZSBvbmx5IHZhbGlkIGluIDI5IGJpdCBtb2RlLCBpbiAzMmJpdCBtb2RlIHdpbGwgYmUKLSAqIG92ZXJyaWRkZW4gaW4gcG1iX2luaXQuCi0gKi8KLXVuc2lnbmVkIGxvbmcgY2FjaGVkX3RvX3VuY2FjaGVkID0gUDJTRUcgLSBQMVNFRzsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX01NVQotc3RhdGljIHZvaWQgc2V0X3B0ZV9waHlzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBwcm90KQorc3RhdGljIHB0ZV90ICpfX2dldF9wdGVfcGh5cyh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcGdkX3QgKnBnZDsKIAlwdWRfdCAqcHVkOwpAQCAtNDksMjIgKzM3LDMwIEBACiAJcGdkID0gcGdkX29mZnNldF9rKGFkZHIpOwogCWlmIChwZ2Rfbm9uZSgqcGdkKSkgewogCQlwZ2RfRVJST1IoKnBnZCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCiAJcHVkID0gcHVkX2FsbG9jKE5VTEwsIHBnZCwgYWRkcik7CiAJaWYgKHVubGlrZWx5KCFwdWQpKSB7CiAJCXB1ZF9FUlJPUigqcHVkKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlwbWQgPSBwbWRfYWxsb2MoTlVMTCwgcHVkLCBhZGRyKTsKIAlpZiAodW5saWtlbHkoIXBtZCkpIHsKIAkJcG1kX0VSUk9SKCpwbWQpOwotCQlyZXR1cm47CisJCXJldHVybiBOVUxMOwogCX0KIAogCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcik7CisJcmV0dXJuIHB0ZTsKK30KKworc3RhdGljIHZvaWQgc2V0X3B0ZV9waHlzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBwcm90KQoreworCXB0ZV90ICpwdGU7CisKKwlwdGUgPSBfX2dldF9wdGVfcGh5cyhhZGRyKTsKIAlpZiAoIXB0ZV9ub25lKCpwdGUpKSB7CiAJCXB0ZV9FUlJPUigqcHRlKTsKIAkJcmV0dXJuOwpAQCAtNzIsMjMgKzY4LDI0IEBACiAKIAlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwaHlzID4+IFBBR0VfU0hJRlQsIHByb3QpKTsKIAlsb2NhbF9mbHVzaF90bGJfb25lKGdldF9hc2lkKCksIGFkZHIpOworCisJaWYgKHBncHJvdF92YWwocHJvdCkgJiBfUEFHRV9XSVJFRCkKKwkJdGxiX3dpcmVfZW50cnkoTlVMTCwgYWRkciwgKnB0ZSk7CiB9CiAKLS8qCi0gKiBBcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgb3RoZXIgcGxhdGZvcm1zIHByZXNlcnZlIHRoZSBmaXhtYXAgbWFwcGluZwotICogYWNyb3NzIGEgY29udGV4dCBzd2l0Y2gsIHdlIGRvbid0IHByZXNlbnRseSBkbyB0aGlzLCBidXQgdGhpcyBjb3VsZCBiZSBkb25lCi0gKiBpbiBhIHNpbWlsYXIgZmFzaGlvbiBhcyB0byB0aGUgd2lyZWQgVExCIGludGVyZmFjZSB0aGF0IHNoNjQgdXNlcyAoYnkgd2F5Ci0gKiBvZiB0aGUgbWVtb3J5IG1hcHBlZCBVVExCIGNvbmZpZ3VyYXRpb24pIC0tIHRoaXMgdW5mb3J0dW5hdGVseSBmb3JjZXMgdXMgdG8KLSAqIGdpdmUgdXAgYSBUTEIgZW50cnkgZm9yIGVhY2ggbWFwcGluZyB3ZSB3YW50IHRvIHByZXNlcnZlLiBXaGlsZSB0aGlzIG1heSBiZQotICogdmlhYmxlIGZvciBhIHNtYWxsIG51bWJlciBvZiBmaXhtYXBzLCBpdCdzIG5vdCBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvcgotICogZXZlcnl0aGluZyBhbmQgbmVlZHMgdG8gYmUgY2FyZWZ1bGx5IGV2YWx1YXRlZC4gKGllLCB3ZSBtYXkgd2FudCB0aGlzIGZvcgotICogdGhlIHZzeXNjYWxsIHBhZ2UpLgotICoKLSAqIFhYWDogUGVyaGFwcyBhZGQgYSBfUEFHRV9XSVJFRCBmbGFnIG9yIHNvbWV0aGluZyBzaW1pbGFyIHRoYXQgd2UgY2FuIHBhc3MKLSAqIGluIGF0IF9fc2V0X2ZpeG1hcCgpIHRpbWUgdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBiZWhhdmlvciB0byBmb2xsb3cuCi0gKgotICoJCQkJCSAtLSBQRk0uCi0gKi8KK3N0YXRpYyB2b2lkIGNsZWFyX3B0ZV9waHlzKHVuc2lnbmVkIGxvbmcgYWRkciwgcGdwcm90X3QgcHJvdCkKK3sKKwlwdGVfdCAqcHRlOworCisJcHRlID0gX19nZXRfcHRlX3BoeXMoYWRkcik7CisKKwlpZiAocGdwcm90X3ZhbChwcm90KSAmIF9QQUdFX1dJUkVEKQorCQl0bGJfdW53aXJlX2VudHJ5KCk7CisKKwlzZXRfcHRlKHB0ZSwgcGZuX3B0ZSgwLCBfX3BncHJvdCgwKSkpOworCWxvY2FsX2ZsdXNoX3RsYl9vbmUoZ2V0X2FzaWQoKSwgYWRkcik7Cit9CisKIHZvaWQgX19zZXRfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBwcm90KQogewogCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IF9fZml4X3RvX3ZpcnQoaWR4KTsKQEAgLTEwMSw2ICs5OCwxOCBAQAogCXNldF9wdGVfcGh5cyhhZGRyZXNzLCBwaHlzLCBwcm90KTsKIH0KIAordm9pZCBfX2NsZWFyX2ZpeG1hcChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsIHBncHJvdF90IHByb3QpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gX19maXhfdG9fdmlydChpZHgpOworCisJaWYgKGlkeCA+PSBfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMpIHsKKwkJQlVHKCk7CisJCXJldHVybjsKKwl9CisKKwljbGVhcl9wdGVfcGh5cyhhZGRyZXNzLCBwcm90KTsKK30KKwogdm9pZCBfX2luaXQgcGFnZV90YWJsZV9yYW5nZV9pbml0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJCQkgcGdkX3QgKnBnZF9iYXNlKQogewpAQCAtMTIwLDcgKzEyOSwxMyBAQAogCWZvciAoIDsgKGkgPCBQVFJTX1BFUl9QR0QpICYmICh2YWRkciAhPSBlbmQpOyBwZ2QrKywgaSsrKSB7CiAJCXB1ZCA9IChwdWRfdCAqKXBnZDsKIAkJZm9yICggOyAoaiA8IFBUUlNfUEVSX1BVRCkgJiYgKHZhZGRyICE9IGVuZCk7IHB1ZCsrLCBqKyspIHsKKyNpZmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAJCQlwbWQgPSAocG1kX3QgKilwdWQ7CisjZWxzZQorCQkJcG1kID0gKHBtZF90ICopYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoUEFHRV9TSVpFKTsKKwkJCXB1ZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcHVkLCBwbWQpOworCQkJcG1kICs9IGs7CisjZW5kaWYKIAkJCWZvciAoOyAoayA8IFBUUlNfUEVSX1BNRCkgJiYgKHZhZGRyICE9IGVuZCk7IHBtZCsrLCBrKyspIHsKIAkJCQlpZiAocG1kX25vbmUoKnBtZCkpIHsKIAkJCQkJcHRlID0gKHB0ZV90ICopIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7CkBAIC0xODIsOSArMTk3LDYgQEAKIAl9CiAKIAlmcmVlX2FyZWFfaW5pdF9ub2RlcyhtYXhfem9uZV9wZm5zKTsKLQotCS8qIFNldCB1cCB0aGUgdW5jYWNoZWQgZml4bWFwICovCi0Jc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9VTkNBQ0hFRCwgX19wYSgmX191bmNhY2hlZF9zdGFydCkpOwogfQogCiAvKgpAQCAtMTk1LDYgKzIwNyw4IEBACiAJbm9faW9tbXVfaW5pdCgpOwogfQogCit1bnNpZ25lZCBpbnQgbWVtX2luaXRfZG9uZSA9IDA7CisKIHZvaWQgX19pbml0IG1lbV9pbml0KHZvaWQpCiB7CiAJaW50IGNvZGVzaXplLCBkYXRhc2l6ZSwgaW5pdHNpemU7CkBAIC0yMzEsNiArMjQ1LDggQEAKIAltZW1zZXQoZW1wdHlfemVyb19wYWdlLCAwLCBQQUdFX1NJWkUpOwogCV9fZmx1c2hfd2JhY2tfcmVnaW9uKGVtcHR5X3plcm9fcGFnZSwgUEFHRV9TSVpFKTsKIAorCXZzeXNjYWxsX2luaXQoKTsKKwogCWNvZGVzaXplID0gICh1bnNpZ25lZCBsb25nKSAmX2V0ZXh0IC0gKHVuc2lnbmVkIGxvbmcpICZfdGV4dDsKIAlkYXRhc2l6ZSA9ICAodW5zaWduZWQgbG9uZykgJl9lZGF0YSAtICh1bnNpZ25lZCBsb25nKSAmX2V0ZXh0OwogCWluaXRzaXplID0gICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2VuZCAtICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2JlZ2luOwpAQCAtMjQzLDggKzI1OSw0OCBAQAogCQlkYXRhc2l6ZSA+PiAxMCwKIAkJaW5pdHNpemUgPj4gMTApOwogCi0JLyogSW5pdGlhbGl6ZSB0aGUgdkRTTyAqLwotCXZzeXNjYWxsX2luaXQoKTsKKwlwcmludGsoS0VSTl9JTkZPICJ2aXJ0dWFsIGtlcm5lbCBtZW1vcnkgbGF5b3V0OlxuIgorCQkiICAgIGZpeG1hcCAgOiAweCUwOGx4IC0gMHglMDhseCAgICglNGxkIGtCKVxuIgorI2lmZGVmIENPTkZJR19ISUdITUVNCisJCSIgICAgcGttYXAgICA6IDB4JTA4bHggLSAweCUwOGx4ICAgKCU0bGQga0IpXG4iCisjZW5kaWYKKwkJIiAgICB2bWFsbG9jIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBNQilcbiIKKwkJIiAgICBsb3dtZW0gIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBNQikgKGNhY2hlZClcbiIKKyNpZmRlZiBDT05GSUdfVU5DQUNIRURfTUFQUElORworCQkiICAgICAgICAgICAgOiAweCUwOGx4IC0gMHglMDhseCAgICglNGxkIE1CKSAodW5jYWNoZWQpXG4iCisjZW5kaWYKKwkJIiAgICAgIC5pbml0IDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBrQilcbiIKKwkJIiAgICAgIC5kYXRhIDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBrQilcbiIKKwkJIiAgICAgIC50ZXh0IDogMHglMDhseCAtIDB4JTA4bHggICAoJTRsZCBrQilcbiIsCisJCUZJWEFERFJfU1RBUlQsIEZJWEFERFJfVE9QLAorCQkoRklYQUREUl9UT1AgLSBGSVhBRERSX1NUQVJUKSA+PiAxMCwKKworI2lmZGVmIENPTkZJR19ISUdITUVNCisJCVBLTUFQX0JBU0UsIFBLTUFQX0JBU0UrTEFTVF9QS01BUCpQQUdFX1NJWkUsCisJCShMQVNUX1BLTUFQKlBBR0VfU0laRSkgPj4gMTAsCisjZW5kaWYKKworCQkodW5zaWduZWQgbG9uZylWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwKKwkJKFZNQUxMT0NfRU5EIC0gVk1BTExPQ19TVEFSVCkgPj4gMjAsCisKKwkJKHVuc2lnbmVkIGxvbmcpbWVtb3J5X3N0YXJ0LCAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSwKKwkJKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5IC0gKHVuc2lnbmVkIGxvbmcpbWVtb3J5X3N0YXJ0KSA+PiAyMCwKKworI2lmZGVmIENPTkZJR19VTkNBQ0hFRF9NQVBQSU5HCisJCXVuY2FjaGVkX3N0YXJ0LCB1bmNhY2hlZF9lbmQsIHVuY2FjaGVkX3NpemUgPj4gMjAsCisjZW5kaWYKKworCQkodW5zaWduZWQgbG9uZykmX19pbml0X2JlZ2luLCAodW5zaWduZWQgbG9uZykmX19pbml0X2VuZCwKKwkJKCh1bnNpZ25lZCBsb25nKSZfX2luaXRfZW5kIC0KKwkJICh1bnNpZ25lZCBsb25nKSZfX2luaXRfYmVnaW4pID4+IDEwLAorCisJCSh1bnNpZ25lZCBsb25nKSZfZXRleHQsICh1bnNpZ25lZCBsb25nKSZfZWRhdGEsCisJCSgodW5zaWduZWQgbG9uZykmX2VkYXRhIC0gKHVuc2lnbmVkIGxvbmcpJl9ldGV4dCkgPj4gMTAsCisKKwkJKHVuc2lnbmVkIGxvbmcpJl90ZXh0LCAodW5zaWduZWQgbG9uZykmX2V0ZXh0LAorCQkoKHVuc2lnbmVkIGxvbmcpJl9ldGV4dCAtICh1bnNpZ25lZCBsb25nKSZfdGV4dCkgPj4gMTApOworCisJbWVtX2luaXRfZG9uZSA9IDE7CiB9CiAKIHZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCkBAIC0yNzcsMzUgKzMzMyw2IEBACiB9CiAjZW5kaWYKIAotI2lmIFRIUkVBRF9TSElGVCA8IFBBR0VfU0hJRlQKLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdGhyZWFkX2luZm9fY2FjaGU7Ci0KLXN0cnVjdCB0aHJlYWRfaW5mbyAqYWxsb2NfdGhyZWFkX2luZm8oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0Jc3RydWN0IHRocmVhZF9pbmZvICp0aTsKLQotCXRpID0ga21lbV9jYWNoZV9hbGxvYyh0aHJlYWRfaW5mb19jYWNoZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVubGlrZWx5KHRpID09IE5VTEwpKQotCQlyZXR1cm4gTlVMTDsKLSNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKLQltZW1zZXQodGksIDAsIFRIUkVBRF9TSVpFKTsKLSNlbmRpZgotCXJldHVybiB0aTsKLX0KLQotdm9pZCBmcmVlX3RocmVhZF9pbmZvKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGkpCi17Ci0Ja21lbV9jYWNoZV9mcmVlKHRocmVhZF9pbmZvX2NhY2hlLCB0aSk7Ci19Ci0KLXZvaWQgdGhyZWFkX2luZm9fY2FjaGVfaW5pdCh2b2lkKQotewotCXRocmVhZF9pbmZvX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInRocmVhZF9pbmZvIiwgVEhSRUFEX1NJWkUsCi0JCQkJCSAgICAgIFRIUkVBRF9TSVpFLCAwLCBOVUxMKTsKLQlCVUdfT04odGhyZWFkX2luZm9fY2FjaGUgPT0gTlVMTCk7Ci19Ci0jZW5kaWYgLyogVEhSRUFEX1NISUZUIDwgUEFHRV9TSElGVCAqLwotCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUpCiB7CkBAIC0zMzYsMTAgKzM2MywzIEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqLwotCi0jaWZkZWYgQ09ORklHX1BNQgotaW50IF9faW5fMjliaXRfbW9kZSh2b2lkKQotewotCXJldHVybiAhKGN0cmxfaW5sKFBNQl9QQVNDUikgJiBQQVNDUl9TRSk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1BNQiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pb3JlbWFwXzMyLmMgYi9hcmNoL3NoL21tL2lvcmVtYXAuYwpzaW1pbGFyaXR5IGluZGV4IDc4JQpyZW5hbWUgZnJvbSBhcmNoL3NoL21tL2lvcmVtYXBfMzIuYwpyZW5hbWUgdG8gYXJjaC9zaC9tbS9pb3JlbWFwLmMKaW5kZXggMjE0MWJlZi4uYzY4ZDJkNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9pb3JlbWFwXzMyLmMKKysrIGIvYXJjaC9zaC9tbS9pb3JlbWFwLmMKQEAgLTEsMTMgKzEsMTMgQEAKIC8qCiAgKiBhcmNoL3NoL21tL2lvcmVtYXAuYwogICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5NSAxOTk2IExpbnVzIFRvcnZhbGRzCisgKiAoQykgQ29weXJpZ2h0IDIwMDUgLSAyMDEwICBQYXVsIE11bmR0CisgKgogICogUmUtbWFwIElPIG1lbW9yeSB0byBrZXJuZWwgYWRkcmVzcyBzcGFjZSBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgaXQuCiAgKiBUaGlzIGlzIG5lZWRlZCBmb3IgaGlnaCBQQ0kgYWRkcmVzc2VzIHRoYXQgYXJlbid0IG1hcHBlZCBpbiB0aGUKICAqIDY0MGstMU1CIElPIG1lbW9yeSBhcmVhIG9uIFBDJ3MKICAqCi0gKiAoQykgQ29weXJpZ2h0IDE5OTUgMTk5NiBMaW51cyBUb3J2YWxkcwotICogKEMpIENvcHlyaWdodCAyMDA1LCAyMDA2IFBhdWwgTXVuZHQKLSAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCiAgKiBQdWJsaWMgTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcwogICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgpAQCAtMzMsMTIgKzMzLDEyIEBACiAgKiBoYXZlIHRvIGNvbnZlcnQgdGhlbSBpbnRvIGFuIG9mZnNldCBpbiBhIHBhZ2UtYWxpZ25lZCBtYXBwaW5nLCBidXQgdGhlCiAgKiBjYWxsZXIgc2hvdWxkbid0IG5lZWQgdG8ga25vdyB0aGF0IHNtYWxsIGRldGFpbC4KICAqLwotdm9pZCBfX2lvbWVtICpfX2lvcmVtYXBfY2FsbGVyKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCAqY2FsbGVyKQordm9pZCBfX2lvbWVtICogX19pbml0X3JlZm9rCitfX2lvcmVtYXBfY2FsbGVyKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCSBwZ3Byb3RfdCBwZ3Byb3QsIHZvaWQgKmNhbGxlcikKIHsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBsYXN0X2FkZHIsIGFkZHIsIG9yaWdfYWRkcjsKLQlwZ3Byb3RfdCBwZ3Byb3Q7CiAKIAkvKiBEb24ndCBhbGxvdyB3cmFwYXJvdW5kIG9yIHplcm8gc2l6ZSAqLwogCWxhc3RfYWRkciA9IHBoeXNfYWRkciArIHNpemUgLSAxOwpAQCAtNDYsMTggKzQ2LDYgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgotCSAqIElmIHdlJ3JlIGluIHRoZSBmaXhlZCBQQ0kgbWVtb3J5IHJhbmdlLCBtYXBwaW5nIHRocm91Z2ggcGFnZQotCSAqIHRhYmxlcyBpcyBub3Qgb25seSBwb2ludGxlc3MsIGJ1dCBhbHNvIGZ1bmRhbWVudGFsbHkgYnJva2VuLgotCSAqIEp1c3QgcmV0dXJuIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGluc3RlYWQuCi0JICoKLQkgKiBGb3IgYm9hcmRzIHRoYXQgbWFwIGEgc21hbGwgUENJIG1lbW9yeSBhcGVydHVyZSBzb21ld2hlcmUgaW4KLQkgKiBQMS9QMiBzcGFjZSwgaW9yZW1hcCgpIHdpbGwgYWxyZWFkeSBkbyB0aGUgcmlnaHQgdGhpbmcsCi0JICogYW5kIHdlJ2xsIG5ldmVyIGdldCB0aGlzIGZhci4KLQkgKi8KLQlpZiAoaXNfcGNpX21lbW9yeV9maXhlZF9yYW5nZShwaHlzX2FkZHIsIHNpemUpKQotCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBoeXNfYWRkcjsKLQotCS8qCiAJICogTWFwcGluZ3MgaGF2ZSB0byBiZSBwYWdlLWFsaWduZWQKIAkgKi8KIAlvZmZzZXQgPSBwaHlzX2FkZHIgJiB+UEFHRV9NQVNLOwpAQCAtNjUsNiArNTMsMTIgQEAKIAlzaXplID0gUEFHRV9BTElHTihsYXN0X2FkZHIrMSkgLSBwaHlzX2FkZHI7CiAKIAkvKgorCSAqIElmIHdlIGNhbid0IHlldCB1c2UgdGhlIHJlZ3VsYXIgYXBwcm9hY2gsIGdvIHRoZSBmaXhtYXAgcm91dGUuCisJICovCisJaWYgKCFtZW1faW5pdF9kb25lKQorCQlyZXR1cm4gaW9yZW1hcF9maXhlZChwaHlzX2FkZHIsIG9mZnNldCwgc2l6ZSwgcGdwcm90KTsKKworCS8qCiAJICogT2ssIGdvIGZvciBpdC4uCiAJICovCiAJYXJlYSA9IGdldF92bV9hcmVhX2NhbGxlcihzaXplLCBWTV9JT1JFTUFQLCBjYWxsZXIpOwpAQCAtODQsOCArNzgsOSBAQAogCSAqIFBNQiBlbnRyaWVzIGFyZSBhbGwgcHJlLWZhdWx0ZWQuCiAJICovCiAJaWYgKHVubGlrZWx5KHBoeXNfYWRkciA+PSBQMVNFRykpIHsKLQkJdW5zaWduZWQgbG9uZyBtYXBwZWQgPSBwbWJfcmVtYXAoYWRkciwgcGh5c19hZGRyLCBzaXplLCBmbGFncyk7CisJCXVuc2lnbmVkIGxvbmcgbWFwcGVkOwogCisJCW1hcHBlZCA9IHBtYl9yZW1hcChhZGRyLCBwaHlzX2FkZHIsIHNpemUsIHBncHJvdCk7CiAJCWlmIChsaWtlbHkobWFwcGVkKSkgewogCQkJYWRkcgkJKz0gbWFwcGVkOwogCQkJcGh5c19hZGRyCSs9IG1hcHBlZDsKQEAgLTk0LDcgKzg5LDYgQEAKIAl9CiAjZW5kaWYKIAotCXBncHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwoUEFHRV9LRVJORUxfTk9DQUNIRSkgfCBmbGFncyk7CiAJaWYgKGxpa2VseShzaXplKSkKIAkJaWYgKGlvcmVtYXBfcGFnZV9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZSwgcGh5c19hZGRyLCBwZ3Byb3QpKSB7CiAJCQl2dW5tYXAoKHZvaWQgKilvcmlnX2FkZHIpOwpAQCAtMTA1LDE1ICs5OSwzOCBAQAogfQogRVhQT1JUX1NZTUJPTChfX2lvcmVtYXBfY2FsbGVyKTsKIAorLyoKKyAqIFNpbXBsZSBjaGVja3MgZm9yIG5vbi10cmFuc2xhdGFibGUgbWFwcGluZ3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlvbWFwcGluZ19ub250cmFuc2xhdGFibGUodW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisjaWZkZWYgQ09ORklHXzI5QklUCisJLyoKKwkgKiBJbiAyOS1iaXQgbW9kZSB0aGlzIGluY2x1ZGVzIHRoZSBmaXhlZCBQMS9QMiBhcmVhcywgYXMgd2VsbCBhcworCSAqIHBhcnRzIG9mIFAzLgorCSAqLworCWlmIChQWFNFRyhvZmZzZXQpIDwgUDNTRUcgfHwgb2Zmc2V0ID49IFAzX0FERFJfTUFYKQorCQlyZXR1cm4gMTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKIHZvaWQgX19pb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIHZhZGRyID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyOwotCXVuc2lnbmVkIGxvbmcgc2VnID0gUFhTRUcodmFkZHIpOwogCXN0cnVjdCB2bV9zdHJ1Y3QgKnA7CiAKLQlpZiAoc2VnIDwgUDNTRUcgfHwgdmFkZHIgPj0gUDNfQUREUl9NQVgpCisJLyoKKwkgKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGlzIG5vIHRyYW5zbGF0YWJsZSBtYXBwaW5nLgorCSAqLworCWlmIChpb21hcHBpbmdfbm9udHJhbnNsYXRhYmxlKHZhZGRyKSkKIAkJcmV0dXJuOwotCWlmIChpc19wY2lfbWVtb3J5X2ZpeGVkX3JhbmdlKHZhZGRyLCAwKSkKKworCS8qCisJICogVGhlcmUncyBubyBWTUEgaWYgaXQncyBmcm9tIGFuIGVhcmx5IGZpeGVkIG1hcHBpbmcuCisJICovCisJaWYgKGlvdW5tYXBfZml4ZWQoYWRkcikgPT0gMCkKIAkJcmV0dXJuOwogCiAjaWZkZWYgQ09ORklHX1BNQgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pb3JlbWFwXzY0LmMgYi9hcmNoL3NoL21tL2lvcmVtYXBfNjQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY0MzQ2NS4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL21tL2lvcmVtYXBfNjQuYworKysgL2Rldi9udWxsCkBAIC0xLDMyNiArMCwwIEBACi0vKgotICogYXJjaC9zaC9tbS9pb3JlbWFwXzY0LmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgIFBhb2xvIEFsYmVyZWxsaQotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNyAgUGF1bCBNdW5kdAotICoKLSAqIE1vc3RseSBkZXJpdmVkIGZyb20gYXJjaC9zaC9tbS9pb3JlbWFwLmMgd2hpY2gsIGluIHR1cm4gaXMgbW9zdGx5Ci0gKiBkZXJpdmVkIGZyb20gYXJjaC9pMzg2L21tL2lvcmVtYXAuYyAuCi0gKgotICogICAoQykgQ29weXJpZ2h0IDE5OTUgMTk5NiBMaW51cyBUb3J2YWxkcwotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL21tdS5oPgotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNobWVkaWFfaW9tYXAgPSB7Ci0JLm5hbWUJPSAic2htZWRpYV9pb21hcCIsCi0JLnN0YXJ0CT0gSU9CQVNFX1ZBRERSICsgUEFHRV9TSVpFLAotCS5lbmQJPSBJT0JBU0VfRU5EIC0gMSwKLX07Ci0KLXN0YXRpYyB2b2lkIHNobWVkaWFfbWFwaW9hZGRyKHVuc2lnbmVkIGxvbmcgcGEsIHVuc2lnbmVkIGxvbmcgdmEsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLXN0YXRpYyB2b2lkIHNobWVkaWFfdW5tYXBpb2FkZHIodW5zaWduZWQgbG9uZyB2YWRkcik7Ci1zdGF0aWMgdm9pZCBfX2lvbWVtICpzaG1lZGlhX2lvcmVtYXAoc3RydWN0IHJlc291cmNlICpyZXMsIHUzMiBwYSwKLQkJCQkgICAgIGludCBzeiwgdW5zaWduZWQgbG9uZyBmbGFncyk7Ci0KLS8qCi0gKiBXZSBoYXZlIHRoZSBzYW1lIHByb2JsZW0gYXMgdGhlIFNQQVJDLCBzbyBsZXRzIGhhdmUgdGhlIHNhbWUgY29tbWVudDoKLSAqIE91ciBtaW5pLWFsbG9jYXRvci4uLgotICogQm95IHRoaXMgaXMgZ3Jvc3MhIFdlIG5lZWQgaXQgYmVjYXVzZSB3ZSBtdXN0IG1hcCBJL08gZm9yCi0gKiB0aW1lcnMgYW5kIGludGVycnVwdCBjb250cm9sbGVyIGJlZm9yZSB0aGUga21hbGxvYyBpcyBhdmFpbGFibGUuCi0gKi8KLQotI2RlZmluZSBYTk1MTiAgMTUKLSNkZWZpbmUgWE5SRVMgIDEwCi0KLXN0cnVjdCB4cmVzb3VyY2UgewotCXN0cnVjdCByZXNvdXJjZSB4cmVzOyAgIC8qIE11c3QgYmUgZmlyc3QgKi8KLQlpbnQgeGZsYWc7ICAgICAgICAgICAgICAvKiAxID09IHVzZWQgKi8KLQljaGFyIHhuYW1lW1hOTUxOKzFdOwotfTsKLQotc3RhdGljIHN0cnVjdCB4cmVzb3VyY2UgeHJlc3ZbWE5SRVNdOwotCi1zdGF0aWMgc3RydWN0IHhyZXNvdXJjZSAqeHJlc19hbGxvYyh2b2lkKQotewotCXN0cnVjdCB4cmVzb3VyY2UgKnhycDsKLQlpbnQgbjsKLQotCXhycCA9IHhyZXN2OwotCWZvciAobiA9IDA7IG4gPCBYTlJFUzsgbisrKSB7Ci0JCWlmICh4cnAtPnhmbGFnID09IDApIHsKLQkJCXhycC0+eGZsYWcgPSAxOwotCQkJcmV0dXJuIHhycDsKLQkJfQotCQl4cnArKzsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIHhyZXNfZnJlZShzdHJ1Y3QgeHJlc291cmNlICp4cnApCi17Ci0JeHJwLT54ZmxhZyA9IDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKnNobWVkaWFfZmluZF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdmFkZHIpCi17Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0KLQlmb3IgKHJlcyA9IHJvb3QtPmNoaWxkOyByZXM7IHJlcyA9IHJlcy0+c2libGluZykKLQkJaWYgKHJlcy0+c3RhcnQgPD0gdmFkZHIgJiYgcmVzLT5lbmQgPj0gdmFkZHIpCi0JCQlyZXR1cm4gcmVzOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW9tZW0gKnNobWVkaWFfYWxsb2NfaW8odW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQlzdHJ1Y3QgeHJlc291cmNlICp4cmVzOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWNoYXIgKnRhY2s7Ci0JaW50IHRsZW47Ci0KLQlpZiAobmFtZSA9PSBOVUxMKQotCQluYW1lID0gIj8/PyI7Ci0KLQl4cmVzID0geHJlc19hbGxvYygpOwotCWlmICh4cmVzICE9IDApIHsKLQkJdGFjayA9IHhyZXMtPnhuYW1lOwotCQlyZXMgPSAmeHJlcy0+eHJlczsKLQl9IGVsc2UgewotCQlwcmludGtfb25jZShLRVJOX05PVElDRSAiJXM6IGRvbmUgd2l0aCBzdGF0aWNzLCAiCi0JCQkgICAgICAgInN3aXRjaGluZyB0byBrbWFsbG9jXG4iLCBfX2Z1bmNfXyk7Ci0JCXRsZW4gPSBzdHJsZW4obmFtZSk7Ci0JCXRhY2sgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICsgdGxlbiArIDEsIEdGUF9LRVJORUwpOwotCQlpZiAoIXRhY2spCi0JCQlyZXR1cm4gTlVMTDsKLQkJbWVtc2V0KHRhY2ssIDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKLQkJcmVzID0gKHN0cnVjdCByZXNvdXJjZSAqKSB0YWNrOwotCQl0YWNrICs9IHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpOwotCX0KLQotCXN0cm5jcHkodGFjaywgbmFtZSwgWE5NTE4pOwotCXRhY2tbWE5NTE5dID0gMDsKLQlyZXMtPm5hbWUgPSB0YWNrOwotCi0JcmV0dXJuIHNobWVkaWFfaW9yZW1hcChyZXMsIHBoeXMsIHNpemUsIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgX19pb21lbSAqc2htZWRpYV9pb3JlbWFwKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgcGEsIGludCBzeiwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAoKHVuc2lnbmVkIGxvbmcpIHBhKSAmICh+UEFHRV9NQVNLKTsKLQl1bnNpZ25lZCBsb25nIHJvdW5kX3N6ID0gKG9mZnNldCArIHN6ICsgUEFHRV9TSVpFLTEpICYgUEFHRV9NQVNLOwotCXVuc2lnbmVkIGxvbmcgdmE7Ci0JdW5zaWduZWQgaW50IHBzejsKLQotCWlmIChhbGxvY2F0ZV9yZXNvdXJjZSgmc2htZWRpYV9pb21hcCwgcmVzLCByb3VuZF9zeiwKLQkJCSAgICAgIHNobWVkaWFfaW9tYXAuc3RhcnQsIHNobWVkaWFfaW9tYXAuZW5kLAotCQkJICAgICAgUEFHRV9TSVpFLCBOVUxMLCBOVUxMKSAhPSAwKSB7Ci0JCXBhbmljKCJhbGxvY19pb19yZXMoJXMpOiBjYW5ub3Qgb2NjdXB5XG4iLAotCQkgICAgICAocmVzLT5uYW1lICE9IE5VTEwpID8gcmVzLT5uYW1lIDogIj8/PyIpOwotCX0KLQotCXZhID0gcmVzLT5zdGFydDsKLQlwYSAmPSBQQUdFX01BU0s7Ci0KLQlwc3ogPSAocmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgKFBBR0VfU0laRSAtIDEpKSAvIFBBR0VfU0laRTsKLQotCWZvciAocHN6ID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsgcHN6ICE9IDA7IHBzeiAtPSBQQUdFX1NJWkUpIHsKLQkJc2htZWRpYV9tYXBpb2FkZHIocGEsIHZhLCBmbGFncyk7Ci0JCXZhICs9IFBBR0VfU0laRTsKLQkJcGEgKz0gUEFHRV9TSVpFOwotCX0KLQotCXJldHVybiAodm9pZCBfX2lvbWVtICopKHVuc2lnbmVkIGxvbmcpKHJlcy0+c3RhcnQgKyBvZmZzZXQpOwotfQotCi1zdGF0aWMgdm9pZCBzaG1lZGlhX2ZyZWVfaW8oc3RydWN0IHJlc291cmNlICpyZXMpCi17Ci0JdW5zaWduZWQgbG9uZyBsZW4gPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwotCi0JQlVHX09OKChsZW4gJiAoUEFHRV9TSVpFIC0gMSkpICE9IDApOwotCi0Jd2hpbGUgKGxlbikgewotCQlsZW4gLT0gUEFHRV9TSVpFOwotCQlzaG1lZGlhX3VubWFwaW9hZGRyKHJlcy0+c3RhcnQgKyBsZW4pOwotCX0KLQotCXJlbGVhc2VfcmVzb3VyY2UocmVzKTsKLX0KLQotc3RhdGljIF9faW5pdF9yZWZvayB2b2lkICpzaDY0X2dldF9wYWdlKHZvaWQpCi17Ci0Jdm9pZCAqcGFnZTsKLQotCWlmIChzbGFiX2lzX2F2YWlsYWJsZSgpKQotCQlwYWdlID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JZWxzZQotCQlwYWdlID0gYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUpOwotCi0JaWYgKCFwYWdlIHx8ICgodW5zaWduZWQgbG9uZylwYWdlICYgflBBR0VfTUFTSykpCi0JCXBhbmljKCJzaDY0X2dldF9wYWdlOiBPdXQgb2YgbWVtb3J5IGFscmVhZHk/XG4iKTsKLQotCXJldHVybiBwYWdlOwotfQotCi1zdGF0aWMgdm9pZCBzaG1lZGlhX21hcGlvYWRkcih1bnNpZ25lZCBsb25nIHBhLCB1bnNpZ25lZCBsb25nIHZhLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQlwZ2RfdCAqcGdkcDsKLQlwdWRfdCAqcHVkcDsKLQlwbWRfdCAqcG1kcDsKLQlwdGVfdCAqcHRlcCwgcHRlOwotCXBncHJvdF90IHByb3Q7Ci0KLQlwcl9kZWJ1Zygic2htZWRpYV9tYXBpb3BhZ2UgcGEgJTA4bHggdmEgJTA4bHhcbiIsICBwYSwgdmEpOwotCi0JaWYgKCFmbGFncykKLQkJZmxhZ3MgPSAxOyAvKiAxID0gQ0IwLTEgZGV2aWNlICovCi0KLQlwZ2RwID0gcGdkX29mZnNldF9rKHZhKTsKLQlpZiAocGdkX25vbmUoKnBnZHApIHx8ICFwZ2RfcHJlc2VudCgqcGdkcCkpIHsKLQkJcHVkcCA9IChwdWRfdCAqKXNoNjRfZ2V0X3BhZ2UoKTsKLQkJc2V0X3BnZChwZ2RwLCBfX3BnZCgodW5zaWduZWQgbG9uZylwdWRwIHwgX0tFUk5QR19UQUJMRSkpOwotCX0KLQotCXB1ZHAgPSBwdWRfb2Zmc2V0KHBnZHAsIHZhKTsKLQlpZiAocHVkX25vbmUoKnB1ZHApIHx8ICFwdWRfcHJlc2VudCgqcHVkcCkpIHsKLQkJcG1kcCA9IChwbWRfdCAqKXNoNjRfZ2V0X3BhZ2UoKTsKLQkJc2V0X3B1ZChwdWRwLCBfX3B1ZCgodW5zaWduZWQgbG9uZylwbWRwIHwgX0tFUk5QR19UQUJMRSkpOwotCX0KLQotCXBtZHAgPSBwbWRfb2Zmc2V0KHB1ZHAsIHZhKTsKLQlpZiAocG1kX25vbmUoKnBtZHApIHx8ICFwbWRfcHJlc2VudCgqcG1kcCkpIHsKLQkJcHRlcCA9IChwdGVfdCAqKXNoNjRfZ2V0X3BhZ2UoKTsKLQkJc2V0X3BtZChwbWRwLCBfX3BtZCgodW5zaWduZWQgbG9uZylwdGVwICsgX1BBR0VfVEFCTEUpKTsKLQl9Ci0KLQlwcm90ID0gX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgICAgIHwgX1BBR0VfV1JJVEUgIHwKLQkJCV9QQUdFX0RJUlRZICAgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1NIQVJFRCB8IGZsYWdzKTsKLQotCXB0ZSA9IHBmbl9wdGUocGEgPj4gUEFHRV9TSElGVCwgcHJvdCk7Ci0JcHRlcCA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIHZhKTsKLQotCWlmICghcHRlX25vbmUoKnB0ZXApICYmCi0JICAgIHB0ZV92YWwoKnB0ZXApICE9IHB0ZV92YWwocHRlKSkKLQkJcHRlX0VSUk9SKCpwdGVwKTsKLQotCXNldF9wdGUocHRlcCwgcHRlKTsKLQotCWZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodmEsIFBBR0VfU0laRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNobWVkaWFfdW5tYXBpb2FkZHIodW5zaWduZWQgbG9uZyB2YWRkcikKLXsKLQlwZ2RfdCAqcGdkcDsKLQlwdWRfdCAqcHVkcDsKLQlwbWRfdCAqcG1kcDsKLQlwdGVfdCAqcHRlcDsKLQotCXBnZHAgPSBwZ2Rfb2Zmc2V0X2sodmFkZHIpOwotCWlmIChwZ2Rfbm9uZSgqcGdkcCkgfHwgcGdkX2JhZCgqcGdkcCkpCi0JCXJldHVybjsKLQotCXB1ZHAgPSBwdWRfb2Zmc2V0KHBnZHAsIHZhZGRyKTsKLQlpZiAocHVkX25vbmUoKnB1ZHApIHx8IHB1ZF9iYWQoKnB1ZHApKQotCQlyZXR1cm47Ci0KLQlwbWRwID0gcG1kX29mZnNldChwdWRwLCB2YWRkcik7Ci0JaWYgKHBtZF9ub25lKCpwbWRwKSB8fCBwbWRfYmFkKCpwbWRwKSkKLQkJcmV0dXJuOwotCi0JcHRlcCA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIHZhZGRyKTsKLQotCWlmIChwdGVfbm9uZSgqcHRlcCkgfHwgIXB0ZV9wcmVzZW50KCpwdGVwKSkKLQkJcmV0dXJuOwotCi0JY2xlYXJfcGFnZSgodm9pZCAqKXB0ZXApOwotCXB0ZV9jbGVhcigmaW5pdF9tbSwgdmFkZHIsIHB0ZXApOwotfQotCi12b2lkIF9faW9tZW0gKl9faW9yZW1hcF9jYWxsZXIodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpCi17Ci0JY2hhciBuYW1lWzE0XTsKLQotCXNwcmludGYobmFtZSwgInBoeXNfJTA4eCIsICh1MzIpb2Zmc2V0KTsKLQlyZXR1cm4gc2htZWRpYV9hbGxvY19pbyhvZmZzZXQsIHNpemUsIG5hbWUsIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0woX19pb3JlbWFwX2NhbGxlcik7Ci0KLXZvaWQgX19pb3VubWFwKHZvaWQgX19pb21lbSAqdmlydHVhbCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhZGRyID0gKHVuc2lnbmVkIGxvbmcpdmlydHVhbCAmIFBBR0VfTUFTSzsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQl1bnNpZ25lZCBpbnQgcHN6OwotCi0JcmVzID0gc2htZWRpYV9maW5kX3Jlc291cmNlKCZzaG1lZGlhX2lvbWFwLCB2YWRkcik7Ci0JaWYgKCFyZXMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGZyZWUgMHglMDhseFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCB2YWRkcik7Ci0JCXJldHVybjsKLQl9Ci0KLQlwc3ogPSAocmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgKFBBR0VfU0laRSAtIDEpKSAvIFBBR0VfU0laRTsKLQotCXNobWVkaWFfZnJlZV9pbyhyZXMpOwotCi0JaWYgKChjaGFyICopcmVzID49IChjaGFyICopeHJlc3YgJiYKLQkgICAgKGNoYXIgKilyZXMgPCAgKGNoYXIgKikmeHJlc3ZbWE5SRVNdKSB7Ci0JCXhyZXNfZnJlZSgoc3RydWN0IHhyZXNvdXJjZSAqKXJlcyk7Ci0JfSBlbHNlIHsKLQkJa2ZyZWUocmVzKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MKF9faW91bm1hcCk7Ci0KLXN0YXRpYyBpbnQKLWlvcmVtYXBfcHJvY19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBmcG9zLCBpbnQgbGVuZ3RoLCBpbnQgKmVvZiwKLQkJICB2b2lkICpkYXRhKQotewotCWNoYXIgKnAgPSBidWYsICplID0gYnVmICsgbGVuZ3RoOwotCXN0cnVjdCByZXNvdXJjZSAqcjsKLQljb25zdCBjaGFyICpubTsKLQotCWZvciAociA9ICgoc3RydWN0IHJlc291cmNlICopZGF0YSktPmNoaWxkOyByICE9IE5VTEw7IHIgPSByLT5zaWJsaW5nKSB7Ci0JCWlmIChwICsgMzIgPj0gZSkgICAgICAgIC8qIEJldHRlciB0aGFuIG5vdGhpbmcgKi8KLQkJCWJyZWFrOwotCQlubSA9IHItPm5hbWU7Ci0JCWlmIChubSA9PSBOVUxMKQotCQkJbm0gPSAiPz8/IjsKLQotCQlwICs9IHNwcmludGYocCwgIiUwOGx4LSUwOGx4OiAlc1xuIiwKLQkJCSAgICAgKHVuc2lnbmVkIGxvbmcpci0+c3RhcnQsCi0JCQkgICAgICh1bnNpZ25lZCBsb25nKXItPmVuZCwgbm0pOwotCX0KLQotCXJldHVybiBwLWJ1ZjsKLX0KLQotc3RhdGljIGludCBfX2luaXQgcmVnaXN0ZXJfcHJvY19vbmNoaXAodm9pZCkKLXsKLQljcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJpb19tYXAiLCAwLCAwLCBpb3JlbWFwX3Byb2NfaW5mbywKLQkJCSAgICAgICAmc2htZWRpYV9pb21hcCk7Ci0JcmV0dXJuIDA7Ci19Ci1sYXRlX2luaXRjYWxsKHJlZ2lzdGVyX3Byb2Nfb25jaGlwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vaW9yZW1hcF9maXhlZC5jIGIvYXJjaC9zaC9tbS9pb3JlbWFwX2ZpeGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI3OGIxZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvbW0vaW9yZW1hcF9maXhlZC5jCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogUmUtbWFwIElPIG1lbW9yeSB0byBrZXJuZWwgYWRkcmVzcyBzcGFjZSBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgaXQuCisgKgorICogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBuZWNlc3NhcnkgdG8gbWFwIGEKKyAqIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UgYmVmb3JlIGlvcmVtYXAoKQorICogY2FuIGJlIHVzZWQsIGUuZy4gZWFybHkgaW4gYm9vdCBiZWZvcmUgcGFnaW5nX2luaXQoKS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIE1hdHQgRmxlbWluZworICovCisKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorCitzdHJ1Y3QgaW9yZW1hcF9tYXAgeworCXZvaWQgX19pb21lbSAqYWRkcjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgbG9uZyBmaXhtYXBfYWRkcjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW9yZW1hcF9tYXAgaW9yZW1hcF9tYXBzW0ZJWF9OX0lPUkVNQVBTXTsKKwordm9pZCBfX2luaXQgaW9yZW1hcF9maXhlZF9pbml0KHZvaWQpCit7CisJc3RydWN0IGlvcmVtYXBfbWFwICptYXA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRklYX05fSU9SRU1BUFM7IGkrKykgeworCQltYXAgPSAmaW9yZW1hcF9tYXBzW2ldOworCQltYXAtPmZpeG1hcF9hZGRyID0gX19maXhfdG9fdmlydChGSVhfSU9SRU1BUF9CRUdJTiArIGkpOworCX0KK30KKwordm9pZCBfX2luaXQgX19pb21lbSAqCitpb3JlbWFwX2ZpeGVkKHJlc291cmNlX3NpemVfdCBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCSAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKK3sKKwllbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgwLCBpZHg7CisJc3RydWN0IGlvcmVtYXBfbWFwICptYXA7CisJdW5zaWduZWQgaW50IG5ycGFnZXM7CisJaW50IGksIHNsb3Q7CisKKwlzbG90ID0gLTE7CisJZm9yIChpID0gMDsgaSA8IEZJWF9OX0lPUkVNQVBTOyBpKyspIHsKKwkJbWFwID0gJmlvcmVtYXBfbWFwc1tpXTsKKwkJaWYgKCFtYXAtPmFkZHIpIHsKKwkJCW1hcC0+c2l6ZSA9IHNpemU7CisJCQlzbG90ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHNsb3QgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogTWFwcGluZ3MgaGF2ZSB0byBmaXQgaW4gdGhlIEZJWF9JT1JFTUFQIGFyZWEuCisJICovCisJbnJwYWdlcyA9IHNpemUgPj4gUEFHRV9TSElGVDsKKwlpZiAobnJwYWdlcyA+IEZJWF9OX0lPUkVNQVBTKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogT2ssIGdvIGZvciBpdC4uCisJICovCisJaWR4MCA9IEZJWF9JT1JFTUFQX0JFR0lOICsgc2xvdDsKKwlpZHggPSBpZHgwOworCXdoaWxlIChucnBhZ2VzID4gMCkgeworCQlwZ3Byb3RfdmFsKHByb3QpIHw9IF9QQUdFX1dJUkVEOworCQlfX3NldF9maXhtYXAoaWR4LCBwaHlzX2FkZHIsIHByb3QpOworCQlwaHlzX2FkZHIgKz0gUEFHRV9TSVpFOworCQlpZHgrKzsKKwkJLS1ucnBhZ2VzOworCX0KKworCW1hcC0+YWRkciA9ICh2b2lkIF9faW9tZW0gKikob2Zmc2V0ICsgbWFwLT5maXhtYXBfYWRkcik7CisJcmV0dXJuIG1hcC0+YWRkcjsKK30KKworaW50IGlvdW5tYXBfZml4ZWQodm9pZCBfX2lvbWVtICphZGRyKQoreworCWVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeDsKKwlzdHJ1Y3QgaW9yZW1hcF9tYXAgKm1hcDsKKwl1bnNpZ25lZCBpbnQgbnJwYWdlczsKKwlpbnQgaSwgc2xvdDsKKworCXNsb3QgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgRklYX05fSU9SRU1BUFM7IGkrKykgeworCQltYXAgPSAmaW9yZW1hcF9tYXBzW2ldOworCQlpZiAobWFwLT5hZGRyID09IGFkZHIpIHsKKwkJCXNsb3QgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHdlIGRvbid0IG1hdGNoLCBpdCdzIG5vdCBmb3IgdXMuCisJICovCisJaWYgKHNsb3QgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW5ycGFnZXMgPSBtYXAtPnNpemUgPj4gUEFHRV9TSElGVDsKKworCWlkeCA9IEZJWF9JT1JFTUFQX0JFR0lOICsgc2xvdCArIG5ycGFnZXMgLSAxOworCXdoaWxlIChucnBhZ2VzID4gMCkgeworCQlfX2NsZWFyX2ZpeG1hcChpZHgsIF9fcGdwcm90KF9QQUdFX1dJUkVEKSk7CisJCS0taWR4OworCQktLW5ycGFnZXM7CisJfQorCisJbWFwLT5zaXplID0gMDsKKwltYXAtPmFkZHIgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL25vbW11LmMgYi9hcmNoL3NoL21tL25vbW11LmMKaW5kZXggYWMxNmMwNS4uNzY5NGY1MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9ub21tdS5jCisrKyBiL2FyY2gvc2gvbW0vbm9tbXUuYwpAQCAtOTQsMyArOTQsNyBAQAogdm9pZCBfX3NldF9maXhtYXAoZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4LCB1bnNpZ25lZCBsb25nIHBoeXMsIHBncHJvdF90IHByb3QpCiB7CiB9CisKK3ZvaWQgcGd0YWJsZV9jYWNoZV9pbml0KHZvaWQpCit7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3BndGFibGUuYyBiL2FyY2gvc2gvbW0vcGd0YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMjFmYjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL21tL3BndGFibGUuYwpAQCAtMCwwICsxLDU2IEBACisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2RlZmluZSBQR0FMTE9DX0dGUCBHRlBfS0VSTkVMIHwgX19HRlBfUkVQRUFUIHwgX19HRlBfWkVSTworCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBnZF9jYWNoZXA7CisjaWYgUEFHRVRBQkxFX0xFVkVMUyA+IDIKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcG1kX2NhY2hlcDsKKyNlbmRpZgorCit2b2lkIHBnZF9jdG9yKHZvaWQgKngpCit7CisJcGdkX3QgKnBnZCA9IHg7CisKKwltZW1jcHkocGdkICsgVVNFUl9QVFJTX1BFUl9QR0QsCisJICAgICAgIHN3YXBwZXJfcGdfZGlyICsgVVNFUl9QVFJTX1BFUl9QR0QsCisJICAgICAgIChQVFJTX1BFUl9QR0QgLSBVU0VSX1BUUlNfUEVSX1BHRCkgKiBzaXplb2YocGdkX3QpKTsKK30KKwordm9pZCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCkKK3sKKwlwZ2RfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoInBnZF9jYWNoZSIsCisJCQkJICAgICAgIFBUUlNfUEVSX1BHRCAqICgxPDxQVEVfTUFHTklUVURFKSwKKwkJCQkgICAgICAgUEFHRV9TSVpFLCBTTEFCX1BBTklDLCBwZ2RfY3Rvcik7CisjaWYgUEFHRVRBQkxFX0xFVkVMUyA+IDIKKwlwbWRfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoInBtZF9jYWNoZSIsCisJCQkJICAgICAgIFBUUlNfUEVSX1BNRCAqICgxPDxQVEVfTUFHTklUVURFKSwKKwkJCQkgICAgICAgUEFHRV9TSVpFLCBTTEFCX1BBTklDLCBOVUxMKTsKKyNlbmRpZgorfQorCitwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKHBnZF9jYWNoZXAsIFBHQUxMT0NfR0ZQKTsKK30KKwordm9pZCBwZ2RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUocGdkX2NhY2hlcCwgcGdkKTsKK30KKworI2lmIFBBR0VUQUJMRV9MRVZFTFMgPiAyCit2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZCwgcG1kX3QgKnBtZCkKK3sKKwlzZXRfcHVkKHB1ZCwgX19wdWQoKHVuc2lnbmVkIGxvbmcpcG1kKSk7Cit9CisKK3BtZF90ICpwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MocG1kX2NhY2hlcCwgUEdBTExPQ19HRlApOworfQorCit2b2lkIHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKQoreworCWttZW1fY2FjaGVfZnJlZShwbWRfY2FjaGVwLCBwbWQpOworfQorI2VuZGlmIC8qIFBBR0VUQUJMRV9MRVZFTFMgPiAyICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3BtYi5jIGIvYXJjaC9zaC9tbS9wbWIuYwppbmRleCAyODBmNmExLi4xOThiY2ZmIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3BtYi5jCisrKyBiL2FyY2gvc2gvbW0vcG1iLmMKQEAgLTMsMTEgKzMsOCBAQAogICoKICAqIFByaXZpbGVnZWQgU3BhY2UgTWFwcGluZyBCdWZmZXIgKFBNQikgU3VwcG9ydC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcgUGF1bCBNdW5kdAotICoKLSAqIFAxL1AyIFNlY3Rpb24gbWFwcGluZyBkZWZpbml0aW9ucyBmcm9tIG1hcDMyLmgsIHdoaWNoIHdhczoKLSAqCi0gKglDb3B5cmlnaHQgMjAwMyAoYykgTGluZW8gU29sdXRpb25zLEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgIFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgTWF0dCBGbGVtaW5nCiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTI0LDQ3ICsyMSw2NyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcndsb2NrLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIAotI2RlZmluZSBOUl9QTUJfRU5UUklFUwkxNgorc3RydWN0IHBtYl9lbnRyeTsKIAotc3RhdGljIHZvaWQgX19wbWJfdW5tYXAoc3RydWN0IHBtYl9lbnRyeSAqKTsKK3N0cnVjdCBwbWJfZW50cnkgeworCXVuc2lnbmVkIGxvbmcgdnBuOworCXVuc2lnbmVkIGxvbmcgcHBuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBzaXplOwogCisJc3BpbmxvY2tfdCBsb2NrOworCisJLyoKKwkgKiAwIC4uIE5SX1BNQl9FTlRSSUVTIGZvciBzcGVjaWZpYyBlbnRyeSBzZWxlY3Rpb24sIG9yCisJICogUE1CX05PX0VOVFJZIHRvIHNlYXJjaCBmb3IgYSBmcmVlIG9uZQorCSAqLworCWludCBlbnRyeTsKKworCS8qIEFkamFjZW50IGVudHJ5IGxpbmsgZm9yIGNvbnRpZ3VvdXMgbXVsdGktZW50cnkgbWFwcGluZ3MgKi8KKwlzdHJ1Y3QgcG1iX2VudHJ5ICpsaW5rOworfTsKKworc3RhdGljIHZvaWQgcG1iX3VubWFwX2VudHJ5KHN0cnVjdCBwbWJfZW50cnkgKiwgaW50IGRlcHRoKTsKKworc3RhdGljIERFRklORV9SV0xPQ0socG1iX3J3bG9jayk7CiBzdGF0aWMgc3RydWN0IHBtYl9lbnRyeSBwbWJfZW50cnlfbGlzdFtOUl9QTUJfRU5UUklFU107Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBwbWJfbWFwOworc3RhdGljIERFQ0xBUkVfQklUTUFQKHBtYl9tYXAsIE5SX1BNQl9FTlRSSUVTKTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1rX3BtYl9lbnRyeSh1bnNpZ25lZCBpbnQgZW50cnkpCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgbWtfcG1iX2VudHJ5KHVuc2lnbmVkIGludCBlbnRyeSkKIHsKIAlyZXR1cm4gKGVudHJ5ICYgUE1CX0VfTUFTSykgPDwgUE1CX0VfU0hJRlQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBta19wbWJfYWRkcih1bnNpZ25lZCBpbnQgZW50cnkpCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgbWtfcG1iX2FkZHIodW5zaWduZWQgaW50IGVudHJ5KQogewogCXJldHVybiBta19wbWJfZW50cnkoZW50cnkpIHwgUE1CX0FERFI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBta19wbWJfZGF0YSh1bnNpZ25lZCBpbnQgZW50cnkpCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgbWtfcG1iX2RhdGEodW5zaWduZWQgaW50IGVudHJ5KQogewogCXJldHVybiBta19wbWJfZW50cnkoZW50cnkpIHwgUE1CX0RBVEE7CiB9CiAKIHN0YXRpYyBpbnQgcG1iX2FsbG9jX2VudHJ5KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IHBvczsKKwlpbnQgcG9zOwogCi1yZXBlYXQ6Ci0JcG9zID0gZmluZF9maXJzdF96ZXJvX2JpdCgmcG1iX21hcCwgTlJfUE1CX0VOVFJJRVMpOwotCi0JaWYgKHVubGlrZWx5KHBvcyA+IE5SX1BNQl9FTlRSSUVTKSkKLQkJcmV0dXJuIC1FTk9TUEM7Ci0KLQlpZiAodGVzdF9hbmRfc2V0X2JpdChwb3MsICZwbWJfbWFwKSkKLQkJZ290byByZXBlYXQ7CisJcG9zID0gZmluZF9maXJzdF96ZXJvX2JpdChwbWJfbWFwLCBOUl9QTUJfRU5UUklFUyk7CisJaWYgKHBvcyA+PSAwICYmIHBvcyA8IE5SX1BNQl9FTlRSSUVTKQorCQlfX3NldF9iaXQocG9zLCBwbWJfbWFwKTsKKwllbHNlCisJCXBvcyA9IC1FTk9TUEM7CiAKIAlyZXR1cm4gcG9zOwogfQpAQCAtNzMsMjEgKzkwLDM0IEBACiAJCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IGVudHJ5KQogewogCXN0cnVjdCBwbWJfZW50cnkgKnBtYmU7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwl2b2lkICpyZXQgPSBOVUxMOwogCWludCBwb3M7CiAKKwl3cml0ZV9sb2NrX2lycXNhdmUoJnBtYl9yd2xvY2ssIGlycWZsYWdzKTsKKwogCWlmIChlbnRyeSA9PSBQTUJfTk9fRU5UUlkpIHsKIAkJcG9zID0gcG1iX2FsbG9jX2VudHJ5KCk7Ci0JCWlmIChwb3MgPCAwKQotCQkJcmV0dXJuIEVSUl9QVFIocG9zKTsKKwkJaWYgKHVubGlrZWx5KHBvcyA8IDApKSB7CisJCQlyZXQgPSBFUlJfUFRSKHBvcyk7CisJCQlnb3RvIG91dDsKKwkJfQogCX0gZWxzZSB7Ci0JCWlmICh0ZXN0X2JpdChlbnRyeSwgJnBtYl9tYXApKQotCQkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CisJCWlmIChfX3Rlc3RfYW5kX3NldF9iaXQoZW50cnksIHBtYl9tYXApKSB7CisJCQlyZXQgPSBFUlJfUFRSKC1FTk9TUEMpOworCQkJZ290byBvdXQ7CisJCX0KKwogCQlwb3MgPSBlbnRyeTsKIAl9CiAKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcG1iX3J3bG9jaywgaXJxZmxhZ3MpOworCiAJcG1iZSA9ICZwbWJfZW50cnlfbGlzdFtwb3NdOwotCWlmICghcG1iZSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwltZW1zZXQocG1iZSwgMCwgc2l6ZW9mKHN0cnVjdCBwbWJfZW50cnkpKTsKKworCXNwaW5fbG9ja19pbml0KCZwbWJlLT5sb2NrKTsKIAogCXBtYmUtPnZwbgk9IHZwbjsKIAlwbWJlLT5wcG4JPSBwcG47CkBAIC05NSwxMDEgKzEyNSwxMTMgQEAKIAlwbWJlLT5lbnRyeQk9IHBvczsKIAogCXJldHVybiBwbWJlOworCitvdXQ6CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnBtYl9yd2xvY2ssIGlycWZsYWdzKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBwbWJfZnJlZShzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlKQogewotCWludCBwb3MgPSBwbWJlLT5lbnRyeTsKKwlfX2NsZWFyX2JpdChwbWJlLT5lbnRyeSwgcG1iX21hcCk7CiAKLQlwbWJlLT52cG4JPSAwOwotCXBtYmUtPnBwbgk9IDA7Ci0JcG1iZS0+ZmxhZ3MJPSAwOwotCXBtYmUtPmVudHJ5CT0gMDsKLQotCWNsZWFyX2JpdChwb3MsICZwbWJfbWFwKTsKKwlwbWJlLT5lbnRyeQk9IFBNQl9OT19FTlRSWTsKKwlwbWJlLT5saW5rCT0gTlVMTDsKIH0KIAogLyoKLSAqIE11c3QgYmUgaW4gUDIgZm9yIF9fc2V0X3BtYl9lbnRyeSgpCisgKiBFbnN1cmUgdGhhdCB0aGUgUE1CIGVudHJpZXMgbWF0Y2ggb3VyIGNhY2hlIGNvbmZpZ3VyYXRpb24uCisgKgorICogV2hlbiB3ZSBhcmUgaW4gMzItYml0IGFkZHJlc3MgZXh0ZW5kZWQgbW9kZSwgQ0NSLkNCIGJlY29tZXMKKyAqIGludmFsaWQsIHNvIGNhcmUgbXVzdCBiZSB0YWtlbiB0byBtYW51YWxseSBhZGp1c3QgY2FjaGVhYmxlCisgKiB0cmFuc2xhdGlvbnMuCiAgKi8KLXN0YXRpYyB2b2lkIF9fc2V0X3BtYl9lbnRyeSh1bnNpZ25lZCBsb25nIHZwbiwgdW5zaWduZWQgbG9uZyBwcG4sCi0JCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBvcykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBwbWJfY2FjaGVfZmxhZ3Modm9pZCkKIHsKLQljdHJsX291dGwodnBuIHwgUE1CX1YsIG1rX3BtYl9hZGRyKHBvcykpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCi0jaWZkZWYgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSAotCS8qCi0JICogV2hlbiB3ZSBhcmUgaW4gMzItYml0IGFkZHJlc3MgZXh0ZW5kZWQgbW9kZSwgQ0NSLkNCIGJlY29tZXMKLQkgKiBpbnZhbGlkLCBzbyBjYXJlIG11c3QgYmUgdGFrZW4gdG8gbWFudWFsbHkgYWRqdXN0IGNhY2hlYWJsZQotCSAqIHRyYW5zbGF0aW9ucy4KLQkgKi8KLQlpZiAobGlrZWx5KGZsYWdzICYgUE1CX0MpKQotCQlmbGFncyB8PSBQTUJfV1Q7CisjaWYgZGVmaW5lZChDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIKQorCWZsYWdzIHw9IFBNQl9DIHwgUE1CX1dUIHwgUE1CX1VCOworI2VsaWYgZGVmaW5lZChDT05GSUdfQ0FDSEVfV1JJVEVCQUNLKQorCWZsYWdzIHw9IFBNQl9DOwogI2VuZGlmCiAKLQljdHJsX291dGwocHBuIHwgZmxhZ3MgfCBQTUJfViwgbWtfcG1iX2RhdGEocG9zKSk7CisJcmV0dXJuIGZsYWdzOwogfQogCi1zdGF0aWMgdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBzZXRfcG1iX2VudHJ5KHN0cnVjdCBwbWJfZW50cnkgKnBtYmUpCisvKgorICogTXVzdCBiZSBydW4gdW5jYWNoZWQuCisgKi8KK3N0YXRpYyB2b2lkIF9fc2V0X3BtYl9lbnRyeShzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlKQogewotCWp1bXBfdG9fdW5jYWNoZWQoKTsKLQlfX3NldF9wbWJfZW50cnkocG1iZS0+dnBuLCBwbWJlLT5wcG4sIHBtYmUtPmZsYWdzLCBwbWJlLT5lbnRyeSk7Ci0JYmFja190b19jYWNoZWQoKTsKKwl3cml0ZWxfdW5jYWNoZWQocG1iZS0+dnBuIHwgUE1CX1YsIG1rX3BtYl9hZGRyKHBtYmUtPmVudHJ5KSk7CisJd3JpdGVsX3VuY2FjaGVkKHBtYmUtPnBwbiB8IHBtYmUtPmZsYWdzIHwgUE1CX1YsCisJCQlta19wbWJfZGF0YShwbWJlLT5lbnRyeSkpOwogfQogCi1zdGF0aWMgdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBjbGVhcl9wbWJfZW50cnkoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSkKK3N0YXRpYyB2b2lkIF9fY2xlYXJfcG1iX2VudHJ5KHN0cnVjdCBwbWJfZW50cnkgKnBtYmUpCiB7Ci0JdW5zaWduZWQgaW50IGVudHJ5ID0gcG1iZS0+ZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgYWRkciwgZGF0YTsKKwl1bnNpZ25lZCBsb25nIGFkZHJfdmFsLCBkYXRhX3ZhbDsKIAotCWlmICh1bmxpa2VseShlbnRyeSA+PSBOUl9QTUJfRU5UUklFUykpCi0JCXJldHVybjsKKwlhZGRyID0gbWtfcG1iX2FkZHIocG1iZS0+ZW50cnkpOworCWRhdGEgPSBta19wbWJfZGF0YShwbWJlLT5lbnRyeSk7CiAKLQlqdW1wX3RvX3VuY2FjaGVkKCk7CisJYWRkcl92YWwgPSBfX3Jhd19yZWFkbChhZGRyKTsKKwlkYXRhX3ZhbCA9IF9fcmF3X3JlYWRsKGRhdGEpOwogCiAJLyogQ2xlYXIgVi1iaXQgKi8KLQlhZGRyID0gbWtfcG1iX2FkZHIoZW50cnkpOwotCWN0cmxfb3V0bChjdHJsX2lubChhZGRyKSAmIH5QTUJfViwgYWRkcik7Ci0KLQlhZGRyID0gbWtfcG1iX2RhdGEoZW50cnkpOwotCWN0cmxfb3V0bChjdHJsX2lubChhZGRyKSAmIH5QTUJfViwgYWRkcik7Ci0KLQliYWNrX3RvX2NhY2hlZCgpOworCXdyaXRlbF91bmNhY2hlZChhZGRyX3ZhbCAmIH5QTUJfViwgYWRkcik7CisJd3JpdGVsX3VuY2FjaGVkKGRhdGFfdmFsICYgflBNQl9WLCBkYXRhKTsKIH0KIAorc3RhdGljIHZvaWQgc2V0X3BtYl9lbnRyeShzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG1iZS0+bG9jaywgZmxhZ3MpOworCV9fc2V0X3BtYl9lbnRyeShwbWJlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWJlLT5sb2NrLCBmbGFncyk7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAlpbnQgZmxhZzsKIH0gcG1iX3NpemVzW10gPSB7Ci0JeyAuc2l6ZQk9IDB4MjAwMDAwMDAsIC5mbGFnID0gUE1CX1NaXzUxMk0sIH0sCi0JeyAuc2l6ZSA9IDB4MDgwMDAwMDAsIC5mbGFnID0gUE1CX1NaXzEyOE0sIH0sCi0JeyAuc2l6ZSA9IDB4MDQwMDAwMDAsIC5mbGFnID0gUE1CX1NaXzY0TSwgIH0sCi0JeyAuc2l6ZSA9IDB4MDEwMDAwMDAsIC5mbGFnID0gUE1CX1NaXzE2TSwgIH0sCisJeyAuc2l6ZQk9IFNaXzUxMk0sIC5mbGFnID0gUE1CX1NaXzUxMk0sIH0sCisJeyAuc2l6ZSA9IFNaXzEyOE0sIC5mbGFnID0gUE1CX1NaXzEyOE0sIH0sCisJeyAuc2l6ZSA9IFNaXzY0TSwgIC5mbGFnID0gUE1CX1NaXzY0TSwgIH0sCisJeyAuc2l6ZSA9IFNaXzE2TSwgIC5mbGFnID0gUE1CX1NaXzE2TSwgIH0sCiB9OwogCiBsb25nIHBtYl9yZW1hcCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKKwkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQogewogCXN0cnVjdCBwbWJfZW50cnkgKnBtYnAsICpwbWJlOwogCXVuc2lnbmVkIGxvbmcgd2FudGVkOwogCWludCBwbWJfZmxhZ3MsIGk7CiAJbG9uZyBlcnI7CisJdTY0IGZsYWdzOworCisJZmxhZ3MgPSBwZ3Byb3RfdmFsKHByb3QpOworCisJcG1iX2ZsYWdzID0gUE1CX1dUIHwgUE1CX1VCOwogCiAJLyogQ29udmVydCB0eXBpY2FsIHBncHJvdCB2YWx1ZSB0byB0aGUgUE1CIGVxdWl2YWxlbnQgKi8KIAlpZiAoZmxhZ3MgJiBfUEFHRV9DQUNIQUJMRSkgewotCQlpZiAoZmxhZ3MgJiBfUEFHRV9XVCkKLQkJCXBtYl9mbGFncyA9IFBNQl9XVDsKLQkJZWxzZQotCQkJcG1iX2ZsYWdzID0gUE1CX0M7Ci0JfSBlbHNlCi0JCXBtYl9mbGFncyA9IFBNQl9XVCB8IFBNQl9VQjsKKwkJcG1iX2ZsYWdzIHw9IFBNQl9DOworCisJCWlmICgoZmxhZ3MgJiBfUEFHRV9XVCkgPT0gMCkKKwkJCXBtYl9mbGFncyAmPSB+KFBNQl9XVCB8IFBNQl9VQik7CisJfQogCiAJcG1icCA9IE5VTEw7CiAJd2FudGVkID0gc2l6ZTsKIAogYWdhaW46CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX3NpemVzKTsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAkJaWYgKHNpemUgPCBwbWJfc2l6ZXNbaV0uc2l6ZSkKIAkJCWNvbnRpbnVlOwogCkBAIC0yMDAsMTggKzI0MiwyNSBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlzZXRfcG1iX2VudHJ5KHBtYmUpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG1iZS0+bG9jaywgZmxhZ3MpOworCisJCV9fc2V0X3BtYl9lbnRyeShwbWJlKTsKIAogCQlwaHlzCSs9IHBtYl9zaXplc1tpXS5zaXplOwogCQl2YWRkcgkrPSBwbWJfc2l6ZXNbaV0uc2l6ZTsKIAkJc2l6ZQktPSBwbWJfc2l6ZXNbaV0uc2l6ZTsKIAorCQlwbWJlLT5zaXplID0gcG1iX3NpemVzW2ldLnNpemU7CisKIAkJLyoKIAkJICogTGluayBhZGphY2VudCBlbnRyaWVzIHRoYXQgc3BhbiBtdWx0aXBsZSBQTUIgZW50cmllcwogCQkgKiBmb3IgZWFzaWVyIHRlYXItZG93bi4KIAkJICovCi0JCWlmIChsaWtlbHkocG1icCkpCisJCWlmIChsaWtlbHkocG1icCkpIHsKKwkJCXNwaW5fbG9jaygmcG1icC0+bG9jayk7CiAJCQlwbWJwLT5saW5rID0gcG1iZTsKKwkJCXNwaW5fdW5sb2NrKCZwbWJwLT5sb2NrKTsKKwkJfQogCiAJCXBtYnAgPSBwbWJlOwogCkBAIC0yMjEsMTYgKzI3MCwxNyBAQAogCQkgKiBwbWJfc2l6ZXNbaV0uc2l6ZSBhZ2Fpbi4KIAkJICovCiAJCWktLTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWJlLT5sb2NrLCBmbGFncyk7CiAJfQogCi0JaWYgKHNpemUgPj0gMHgxMDAwMDAwKQorCWlmIChzaXplID49IFNaXzE2TSkKIAkJZ290byBhZ2FpbjsKIAogCXJldHVybiB3YW50ZWQgLSBzaXplOwogCiBvdXQ6Ci0JaWYgKHBtYnApCi0JCV9fcG1iX3VubWFwKHBtYnApOworCXBtYl91bm1hcF9lbnRyeShwbWJwLCBOUl9QTUJfRU5UUklFUyk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjQwLDI0ICsyOTAsNTIgQEAKIAlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlID0gTlVMTDsKIAlpbnQgaTsKIAorCXJlYWRfbG9jaygmcG1iX3J3bG9jayk7CisKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfZW50cnlfbGlzdCk7IGkrKykgewotCQlpZiAodGVzdF9iaXQoaSwgJnBtYl9tYXApKSB7CisJCWlmICh0ZXN0X2JpdChpLCBwbWJfbWFwKSkgewogCQkJcG1iZSA9ICZwbWJfZW50cnlfbGlzdFtpXTsKIAkJCWlmIChwbWJlLT52cG4gPT0gYWRkcikKIAkJCQlicmVhazsKIAkJfQogCX0KIAotCWlmICh1bmxpa2VseSghcG1iZSkpCi0JCXJldHVybjsKKwlyZWFkX3VubG9jaygmcG1iX3J3bG9jayk7CiAKLQlfX3BtYl91bm1hcChwbWJlKTsKKwlwbWJfdW5tYXBfZW50cnkocG1iZSwgTlJfUE1CX0VOVFJJRVMpOwogfQogCi1zdGF0aWMgdm9pZCBfX3BtYl91bm1hcChzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlKQorc3RhdGljIGJvb2wgcG1iX2Nhbl9tZXJnZShzdHJ1Y3QgcG1iX2VudHJ5ICphLCBzdHJ1Y3QgcG1iX2VudHJ5ICpiKQogewotCUJVR19PTighdGVzdF9iaXQocG1iZS0+ZW50cnksICZwbWJfbWFwKSk7CisJcmV0dXJuIChiLT52cG4gPT0gKGEtPnZwbiArIGEtPnNpemUpKSAmJgorCSAgICAgICAoYi0+cHBuID09IChhLT5wcG4gKyBhLT5zaXplKSkgJiYKKwkgICAgICAgKGItPmZsYWdzID09IGEtPmZsYWdzKTsKK30KIAorc3RhdGljIGJvb2wgcG1iX3NpemVfdmFsaWQodW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX3NpemVzKTsgaSsrKQorCQlpZiAocG1iX3NpemVzW2ldLnNpemUgPT0gc2l6ZSkKKwkJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW50IHBtYl9zaXplX3RvX2ZsYWdzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtYl9zaXplcyk7IGkrKykKKwkJaWYgKHBtYl9zaXplc1tpXS5zaXplID09IHNpemUpCisJCQlyZXR1cm4gcG1iX3NpemVzW2ldLmZsYWc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19wbWJfdW5tYXBfZW50cnkoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSwgaW50IGRlcHRoKQorewogCWRvIHsKIAkJc3RydWN0IHBtYl9lbnRyeSAqcG1ibGluayA9IHBtYmU7CiAKQEAgLTI2OCwxMDIgKzM0NiwzMTIgQEAKIAkJICogdGhpcyBlbnRyeSBpbiBwbWJfYWxsb2MoKSAoZXZlbiBpZiB3ZSBoYXZlbid0IGZpbGxlZAogCQkgKiBpdCB5ZXQpLgogCQkgKgotCQkgKiBUaGVyZWZvcmUsIGNhbGxpbmcgY2xlYXJfcG1iX2VudHJ5KCkgaXMgc2FmZSBhcyBubworCQkgKiBUaGVyZWZvcmUsIGNhbGxpbmcgX19jbGVhcl9wbWJfZW50cnkoKSBpcyBzYWZlIGFzIG5vCiAJCSAqIG90aGVyIG1hcHBpbmcgY2FuIGJlIHVzaW5nIHRoYXQgc2xvdC4KIAkJICovCi0JCWNsZWFyX3BtYl9lbnRyeShwbWJlKTsKKwkJX19jbGVhcl9wbWJfZW50cnkocG1iZSk7CiAKIAkJcG1iZSA9IHBtYmxpbmstPmxpbms7CiAKIAkJcG1iX2ZyZWUocG1ibGluayk7Ci0JfSB3aGlsZSAocG1iZSk7CisJfSB3aGlsZSAocG1iZSAmJiAtLWRlcHRoKTsKIH0KIAotI2lmZGVmIENPTkZJR19QTUIKLWludCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBwbWJfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgcG1iX3VubWFwX2VudHJ5KHN0cnVjdCBwbWJfZW50cnkgKnBtYmUsIGludCBkZXB0aCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQlsb25nIHNpemUsIHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JanVtcF90b191bmNhY2hlZCgpOworCWlmICh1bmxpa2VseSghcG1iZSkpCisJCXJldHVybjsKIAotCS8qCi0JICogSW5zZXJ0IFBNQiBlbnRyaWVzIGZvciB0aGUgUDEgYW5kIFAyIGFyZWFzIHNvIHRoYXQsIGFmdGVyCi0JICogd2UndmUgc3dpdGNoZWQgdGhlIE1NVSB0byAzMi1iaXQgbW9kZSwgdGhlIHNlbWFudGljcyBvZiBQMQotCSAqIGFuZCBQMiBhcmUgdGhlIHNhbWUgYXMgaW4gMjktYml0IG1vZGUsIGUuZy4KLQkgKgotCSAqCVAxIC0gcHJvdmlkZXMgYSBjYWNoZWQgd2luZG93IG9udG8gcGh5c2ljYWwgbWVtb3J5Ci0JICoJUDIgLSBwcm92aWRlcyBhbiB1bmNhY2hlZCB3aW5kb3cgb250byBwaHlzaWNhbCBtZW1vcnkKLQkgKi8KLQlzaXplID0gX19NRU1PUllfU1RBUlQgKyBfX01FTU9SWV9TSVpFOwotCi0JcmV0ID0gcG1iX3JlbWFwKFAxU0VHLCAweDAwMDAwMDAwLCBzaXplLCBQTUJfQyk7Ci0JQlVHX09OKHJldCAhPSBzaXplKTsKLQotCXJldCA9IHBtYl9yZW1hcChQMlNFRywgMHgwMDAwMDAwMCwgc2l6ZSwgUE1CX1dUIHwgUE1CX1VCKTsKLQlCVUdfT04ocmV0ICE9IHNpemUpOwotCi0JY3RybF9vdXRsKDAsIFBNQl9JUk1DUik7Ci0KLQkvKiBQTUIuU0UgYW5kIFVCWzddICovCi0JY3RybF9vdXRsKFBBU0NSX1NFIHwgKDEgPDwgNyksIFBNQl9QQVNDUik7Ci0KLQkvKiBGbHVzaCBvdXQgdGhlIFRMQiAqLwotCWkgPSAgY3RybF9pbmwoTU1VQ1IpOwotCWkgfD0gTU1VQ1JfVEk7Ci0JY3RybF9vdXRsKGksIE1NVUNSKTsKLQotCWJhY2tfdG9fY2FjaGVkKCk7Ci0KLQlyZXR1cm4gMDsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJnBtYl9yd2xvY2ssIGZsYWdzKTsKKwlfX3BtYl91bm1hcF9lbnRyeShwbWJlLCBkZXB0aCk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnBtYl9yd2xvY2ssIGZsYWdzKTsKIH0KLSNlbHNlCi1pbnQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgcG1iX2luaXQodm9pZCkKKworc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQgcG1iX3Bwbl9pbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBwbikKK3sKKwlyZXR1cm4gcHBuID49IF9fcGEobWVtb3J5X3N0YXJ0KSAmJiBwcG4gPCBfX3BhKG1lbW9yeV9lbmQpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcG1iX25vdGlmeSh2b2lkKQogewogCWludCBpOwotCXVuc2lnbmVkIGxvbmcgYWRkciwgZGF0YTsKIAotCWp1bXBfdG9fdW5jYWNoZWQoKTsKKwlwcl9pbmZvKCJQTUI6IGJvb3QgbWFwcGluZ3M6XG4iKTsKIAotCWZvciAoaSA9IDA7IGkgPCBQTUJfRU5UUllfTUFYOyBpKyspIHsKKwlyZWFkX2xvY2soJnBtYl9yd2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX2VudHJ5X2xpc3QpOyBpKyspIHsKIAkJc3RydWN0IHBtYl9lbnRyeSAqcG1iZTsKLQkJdW5zaWduZWQgbG9uZyB2cG4sIHBwbiwgZmxhZ3M7CiAKLQkJYWRkciA9IFBNQl9EQVRBICsgKGkgPDwgUE1CX0VfU0hJRlQpOwotCQlkYXRhID0gY3RybF9pbmwoYWRkcik7Ci0JCWlmICghKGRhdGEgJiBQTUJfVikpCisJCWlmICghdGVzdF9iaXQoaSwgcG1iX21hcCkpCiAJCQljb250aW51ZTsKIAotCQlpZiAoZGF0YSAmIFBNQl9DKSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIKQotCQkJZGF0YSB8PSBQTUJfV1Q7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DQUNIRV9XUklURUJBQ0spCi0JCQlkYXRhICY9IH5QTUJfV1Q7Ci0jZWxzZQotCQkJZGF0YSAmPSB+KFBNQl9DIHwgUE1CX1dUKTsKLSNlbmRpZgotCQl9Ci0JCWN0cmxfb3V0bChkYXRhLCBhZGRyKTsKKwkJcG1iZSA9ICZwbWJfZW50cnlfbGlzdFtpXTsKIAotCQlwcG4gPSBkYXRhICYgUE1CX1BGTl9NQVNLOwotCi0JCWZsYWdzID0gZGF0YSAmIChQTUJfQyB8IFBNQl9XVCB8IFBNQl9VQik7Ci0JCWZsYWdzIHw9IGRhdGEgJiBQTUJfU1pfTUFTSzsKLQotCQlhZGRyID0gUE1CX0FERFIgKyAoaSA8PCBQTUJfRV9TSElGVCk7Ci0JCWRhdGEgPSBjdHJsX2lubChhZGRyKTsKLQotCQl2cG4gPSBkYXRhICYgUE1CX1BGTl9NQVNLOwotCi0JCXBtYmUgPSBwbWJfYWxsb2ModnBuLCBwcG4sIGZsYWdzLCBpKTsKLQkJV0FSTl9PTihJU19FUlIocG1iZSkpOworCQlwcl9pbmZvKCIgICAgICAgMHglMDhseCAtPiAweCUwOGx4IFsgJTRsZE1CICUyc2NhY2hlZCBdXG4iLAorCQkJcG1iZS0+dnBuID4+IFBBR0VfU0hJRlQsIHBtYmUtPnBwbiA+PiBQQUdFX1NISUZULAorCQkJcG1iZS0+c2l6ZSA+PiAyMCwgKHBtYmUtPmZsYWdzICYgUE1CX0MpID8gIiIgOiAidW4iKTsKIAl9CiAKLQliYWNrX3RvX2NhY2hlZCgpOwotCi0JcmV0dXJuIDA7CisJcmVhZF91bmxvY2soJnBtYl9yd2xvY2spOwogfQotI2VuZGlmIC8qIENPTkZJR19QTUIgKi8KKworLyoKKyAqIFN5bmMgb3VyIHNvZnR3YXJlIGNvcHkgb2YgdGhlIFBNQiBtYXBwaW5ncyB3aXRoIHRob3NlIGluIGhhcmR3YXJlLiBUaGUKKyAqIG1hcHBpbmdzIGluIHRoZSBoYXJkd2FyZSBQTUIgd2VyZSBlaXRoZXIgc2V0IHVwIGJ5IHRoZSBib290bG9hZGVyIG9yCisgKiB2ZXJ5IGVhcmx5IG9uIGJ5IHRoZSBrZXJuZWwuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBwbWJfc3luY2hyb25pemUodm9pZCkKK3sKKwlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJwID0gTlVMTDsKKwlpbnQgaSwgajsKKworCS8qCisJICogUnVuIHRocm91Z2ggdGhlIGluaXRpYWwgYm9vdCBtYXBwaW5ncywgbG9nIHRoZSBlc3RhYmxpc2hlZAorCSAqIG9uZXMsIGFuZCBibG93IGF3YXkgYW55dGhpbmcgdGhhdCBmYWxscyBvdXRzaWRlIG9mIHRoZSB2YWxpZAorCSAqIFBQTiByYW5nZS4gU3BlY2lmaWNhbGx5LCB3ZSBvbmx5IGNhcmUgYWJvdXQgZXhpc3RpbmcgbWFwcGluZ3MKKwkgKiB0aGF0IGltcGFjdCB0aGUgY2FjaGVkL3VuY2FjaGVkIHNlY3Rpb25zLgorCSAqCisJICogTm90ZSB0aGF0IHRvdWNoaW5nIHRoZXNlIGNhbiBiZSBhIGJpdCBvZiBhIG1pbmVmaWVsZDsgdGhlIGJvb3QKKwkgKiBsb2FkZXIgY2FuIGVzdGFibGlzaCBtdWx0aS1wYWdlIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgY2FjaGluZworCSAqIGF0dHJpYnV0ZXMsIHNvIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2UgYXJlbid0IG1vZGlmeWluZyBhCisJICogbWFwcGluZyB0aGF0IHdlJ3JlIHByZXNlbnRseSBleGVjdXRpbmcgZnJvbSwgb3IgbWF5IGV4ZWN1dGUKKwkgKiBmcm9tIGluIHRoZSBjYXNlIG9mIHN0cmFkZGxpbmcgcGFnZSBib3VuZGFyaWVzLgorCSAqCisJICogSW4gdGhlIGZ1dHVyZSB3ZSB3aWxsIGhhdmUgdG8gdGlkeSB1cCBhZnRlciB0aGUgYm9vdCBsb2FkZXIgYnkKKwkgKiBqdW1waW5nIGJldHdlZW4gdGhlIGNhY2hlZCBhbmQgdW5jYWNoZWQgbWFwcGluZ3MgYW5kIHRlYXJpbmcKKwkgKiBkb3duIGFsdGVybmF0aW5nIG1hcHBpbmdzIHdoaWxlIGV4ZWN1dGluZyBmcm9tIHRoZSBvdGhlci4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlJfUE1CX0VOVFJJRVM7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIGFkZHIsIGRhdGE7CisJCXVuc2lnbmVkIGxvbmcgYWRkcl92YWwsIGRhdGFfdmFsOworCQl1bnNpZ25lZCBsb25nIHBwbiwgdnBuLCBmbGFnczsKKwkJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwkJdW5zaWduZWQgaW50IHNpemU7CisJCXN0cnVjdCBwbWJfZW50cnkgKnBtYmU7CisKKwkJYWRkciA9IG1rX3BtYl9hZGRyKGkpOworCQlkYXRhID0gbWtfcG1iX2RhdGEoaSk7CisKKwkJYWRkcl92YWwgPSBfX3Jhd19yZWFkbChhZGRyKTsKKwkJZGF0YV92YWwgPSBfX3Jhd19yZWFkbChkYXRhKTsKKworCQkvKgorCQkgKiBTa2lwIG92ZXIgYW55IGJvZ3VzIGVudHJpZXMKKwkJICovCisJCWlmICghKGRhdGFfdmFsICYgUE1CX1YpIHx8ICEoYWRkcl92YWwgJiBQTUJfVikpCisJCQljb250aW51ZTsKKworCQlwcG4gPSBkYXRhX3ZhbCAmIFBNQl9QRk5fTUFTSzsKKwkJdnBuID0gYWRkcl92YWwgJiBQTUJfUEZOX01BU0s7CisKKwkJLyoKKwkJICogT25seSBwcmVzZXJ2ZSBpbi1yYW5nZSBtYXBwaW5ncy4KKwkJICovCisJCWlmICghcG1iX3Bwbl9pbl9yYW5nZShwcG4pKSB7CisJCQkvKgorCQkJICogSW52YWxpZGF0ZSBhbnl0aGluZyBvdXQgb2YgYm91bmRzLgorCQkJICovCisJCQl3cml0ZWxfdW5jYWNoZWQoYWRkcl92YWwgJiB+UE1CX1YsIGFkZHIpOworCQkJd3JpdGVsX3VuY2FjaGVkKGRhdGFfdmFsICYgflBNQl9WLCBkYXRhKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogVXBkYXRlIHRoZSBjYWNoaW5nIGF0dHJpYnV0ZXMgaWYgbmVjZXNzYXJ5CisJCSAqLworCQlpZiAoZGF0YV92YWwgJiBQTUJfQykgeworCQkJZGF0YV92YWwgJj0gflBNQl9DQUNIRV9NQVNLOworCQkJZGF0YV92YWwgfD0gcG1iX2NhY2hlX2ZsYWdzKCk7CisKKwkJCXdyaXRlbF91bmNhY2hlZChkYXRhX3ZhbCwgZGF0YSk7CisJCX0KKworCQlzaXplID0gZGF0YV92YWwgJiBQTUJfU1pfTUFTSzsKKwkJZmxhZ3MgPSBzaXplIHwgKGRhdGFfdmFsICYgUE1CX0NBQ0hFX01BU0spOworCisJCXBtYmUgPSBwbWJfYWxsb2ModnBuLCBwcG4sIGZsYWdzLCBpKTsKKwkJaWYgKElTX0VSUihwbWJlKSkgeworCQkJV0FSTl9PTl9PTkNFKDEpOworCQkJY29udGludWU7CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG1iZS0+bG9jaywgaXJxZmxhZ3MpOworCisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHBtYl9zaXplcyk7IGorKykKKwkJCWlmIChwbWJfc2l6ZXNbal0uZmxhZyA9PSBzaXplKQorCQkJCXBtYmUtPnNpemUgPSBwbWJfc2l6ZXNbal0uc2l6ZTsKKworCQlpZiAocG1icCkgeworCQkJc3Bpbl9sb2NrKCZwbWJwLT5sb2NrKTsKKworCQkJLyoKKwkJCSAqIENvbXBhcmUgdGhlIHByZXZpb3VzIGVudHJ5IGFnYWluc3QgdGhlIGN1cnJlbnQgb25lIHRvCisJCQkgKiBzZWUgaWYgdGhlIGVudHJpZXMgc3BhbiBhIGNvbnRpZ3VvdXMgbWFwcGluZy4gSWYgc28sCisJCQkgKiBzZXR1cCB0aGUgZW50cnkgbGlua3MgYWNjb3JkaW5nbHkuIENvbXBvdW5kIG1hcHBpbmdzCisJCQkgKiBhcmUgbGF0ZXIgY29hbGVzY2VkLgorCQkJICovCisJCQlpZiAocG1iX2Nhbl9tZXJnZShwbWJwLCBwbWJlKSkKKwkJCQlwbWJwLT5saW5rID0gcG1iZTsKKworCQkJc3Bpbl91bmxvY2soJnBtYnAtPmxvY2spOworCQl9CisKKwkJcG1icCA9IHBtYmU7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1iZS0+bG9jaywgaXJxZmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgX19pbml0IHBtYl9tZXJnZShzdHJ1Y3QgcG1iX2VudHJ5ICpoZWFkKQoreworCXVuc2lnbmVkIGxvbmcgc3BhbiwgbmV3c2l6ZTsKKwlzdHJ1Y3QgcG1iX2VudHJ5ICp0YWlsOworCWludCBpID0gMSwgZGVwdGggPSAwOworCisJc3BhbiA9IG5ld3NpemUgPSBoZWFkLT5zaXplOworCisJdGFpbCA9IGhlYWQtPmxpbms7CisJd2hpbGUgKHRhaWwpIHsKKwkJc3BhbiArPSB0YWlsLT5zaXplOworCisJCWlmIChwbWJfc2l6ZV92YWxpZChzcGFuKSkgeworCQkJbmV3c2l6ZSA9IHNwYW47CisJCQlkZXB0aCA9IGk7CisJCX0KKworCQkvKiBUaGlzIGlzIHRoZSBlbmQgb2YgdGhlIGxpbmUuLiAqLworCQlpZiAoIXRhaWwtPmxpbmspCisJCQlicmVhazsKKworCQl0YWlsID0gdGFpbC0+bGluazsKKwkJaSsrOworCX0KKworCS8qCisJICogVGhlIG1lcmdlZCBwYWdlIHNpemUgbXVzdCBiZSB2YWxpZC4KKwkgKi8KKwlpZiAoIXBtYl9zaXplX3ZhbGlkKG5ld3NpemUpKQorCQlyZXR1cm47CisKKwloZWFkLT5mbGFncyAmPSB+UE1CX1NaX01BU0s7CisJaGVhZC0+ZmxhZ3MgfD0gcG1iX3NpemVfdG9fZmxhZ3MobmV3c2l6ZSk7CisKKwloZWFkLT5zaXplID0gbmV3c2l6ZTsKKworCV9fcG1iX3VubWFwX2VudHJ5KGhlYWQtPmxpbmssIGRlcHRoKTsKKwlfX3NldF9wbWJfZW50cnkoaGVhZCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwbWJfY29hbGVzY2Uodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZwbWJfcndsb2NrLCBmbGFncyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfZW50cnlfbGlzdCk7IGkrKykgeworCQlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlOworCisJCWlmICghdGVzdF9iaXQoaSwgcG1iX21hcCkpCisJCQljb250aW51ZTsKKworCQlwbWJlID0gJnBtYl9lbnRyeV9saXN0W2ldOworCisJCS8qCisJCSAqIFdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBjb21wb3VuZCBtYXBwaW5ncworCQkgKi8KKwkJaWYgKCFwbWJlLT5saW5rKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogTm90aGluZyB0byBkbyBpZiBpdCBhbHJlYWR5IHVzZXMgdGhlIGxhcmdlc3QgcG9zc2libGUKKwkJICogcGFnZSBzaXplLgorCQkgKi8KKwkJaWYgKHBtYmUtPnNpemUgPT0gU1pfNTEyTSkKKwkJCWNvbnRpbnVlOworCisJCXBtYl9tZXJnZShwbWJlKTsKKwl9CisKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcG1iX3J3bG9jaywgZmxhZ3MpOworfQorCisjaWZkZWYgQ09ORklHX1VOQ0FDSEVEX01BUFBJTkcKK3N0YXRpYyB2b2lkIF9faW5pdCBwbWJfcmVzaXplKHZvaWQpCit7CisJaW50IGk7CisKKwkvKgorCSAqIElmIHRoZSB1bmNhY2hlZCBtYXBwaW5nIHdhcyBjb25zdHJ1Y3RlZCBieSB0aGUga2VybmVsLCBpdCB3aWxsCisJICogYWxyZWFkeSBiZSBhIHJlYXNvbmFibGUgc2l6ZS4KKwkgKi8KKwlpZiAodW5jYWNoZWRfc2l6ZSA9PSBTWl8xNk0pCisJCXJldHVybjsKKworCXJlYWRfbG9jaygmcG1iX3J3bG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfZW50cnlfbGlzdCk7IGkrKykgeworCQlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCWlmICghdGVzdF9iaXQoaSwgcG1iX21hcCkpCisJCQljb250aW51ZTsKKworCQlwbWJlID0gJnBtYl9lbnRyeV9saXN0W2ldOworCisJCWlmIChwbWJlLT52cG4gIT0gdW5jYWNoZWRfc3RhcnQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBGb3VuZCBpdCwgbm93IHJlc2l6ZSBpdC4KKwkJICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwbWJlLT5sb2NrLCBmbGFncyk7CisKKwkJcG1iZS0+c2l6ZSA9IFNaXzE2TTsKKwkJcG1iZS0+ZmxhZ3MgJj0gflBNQl9TWl9NQVNLOworCQlwbWJlLT5mbGFncyB8PSBwbWJfc2l6ZV90b19mbGFncyhwbWJlLT5zaXplKTsKKworCQl1bmNhY2hlZF9yZXNpemUocG1iZS0+c2l6ZSk7CisKKwkJX19zZXRfcG1iX2VudHJ5KHBtYmUpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYmUtPmxvY2ssIGZsYWdzKTsKKwl9CisKKwlyZWFkX2xvY2soJnBtYl9yd2xvY2spOworfQorI2VuZGlmCisKK3ZvaWQgX19pbml0IHBtYl9pbml0KHZvaWQpCit7CisJLyogU3luY2hyb25pemUgc29mdHdhcmUgc3RhdGUgKi8KKwlwbWJfc3luY2hyb25pemUoKTsKKworCS8qIEF0dGVtcHQgdG8gY29tYmluZSBjb21wb3VuZCBtYXBwaW5ncyAqLworCXBtYl9jb2FsZXNjZSgpOworCisjaWZkZWYgQ09ORklHX1VOQ0FDSEVEX01BUFBJTkcKKwkvKiBSZXNpemUgaW5pdGlhbCBtYXBwaW5ncywgaWYgbmVjZXNzYXJ5ICovCisJcG1iX3Jlc2l6ZSgpOworI2VuZGlmCisKKwkvKiBMb2cgdGhlbSAqLworCXBtYl9ub3RpZnkoKTsKKworCXdyaXRlbF91bmNhY2hlZCgwLCBQTUJfSVJNQ1IpOworCisJLyogRmx1c2ggb3V0IHRoZSBUTEIgKi8KKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoTU1VQ1IpIHwgTU1VQ1JfVEksIE1NVUNSKTsKKwljdHJsX2JhcnJpZXIoKTsKK30KKworYm9vbCBfX2luXzI5Yml0X21vZGUodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIChfX3Jhd19yZWFkbChQTUJfUEFTQ1IpICYgUEFTQ1JfU0UpID09IDA7Cit9CiAKIHN0YXRpYyBpbnQgcG1iX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgdm9pZCAqaXRlcikKIHsKQEAgLTM3OCw4ICs2NjYsOCBAQAogCQl1bnNpZ25lZCBpbnQgc2l6ZTsKIAkJY2hhciAqc3pfc3RyID0gTlVMTDsKIAotCQlhZGRyID0gY3RybF9pbmwobWtfcG1iX2FkZHIoaSkpOwotCQlkYXRhID0gY3RybF9pbmwobWtfcG1iX2RhdGEoaSkpOworCQlhZGRyID0gX19yYXdfcmVhZGwobWtfcG1iX2FkZHIoaSkpOworCQlkYXRhID0gX19yYXdfcmVhZGwobWtfcG1iX2RhdGEoaSkpOwogCiAJCXNpemUgPSBkYXRhICYgUE1CX1NaX01BU0s7CiAJCXN6X3N0ciA9IChzaXplID09IFBNQl9TWl8xNk0pICA/ICIgMTZNQiI6CkBAIC00MzcsMTQgKzcyNSwyMSBAQAogCWlmIChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9PTiAmJgogCSAgICBwcmV2X3N0YXRlLmV2ZW50ID09IFBNX0VWRU5UX0ZSRUVaRSkgewogCQlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlOworCisJCXJlYWRfbG9jaygmcG1iX3J3bG9jayk7CisKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX2VudHJ5X2xpc3QpOyBpKyspIHsKLQkJCWlmICh0ZXN0X2JpdChpLCAmcG1iX21hcCkpIHsKKwkJCWlmICh0ZXN0X2JpdChpLCBwbWJfbWFwKSkgewogCQkJCXBtYmUgPSAmcG1iX2VudHJ5X2xpc3RbaV07CiAJCQkJc2V0X3BtYl9lbnRyeShwbWJlKTsKIAkJCX0KIAkJfQorCisJCXJlYWRfdW5sb2NrKCZwbWJfcndsb2NrKTsKIAl9CisKIAlwcmV2X3N0YXRlID0gc3RhdGU7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDYyLDYgKzc1Nyw1IEBACiB7CiAJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJmNwdV9zeXNkZXZfY2xhc3MsICZwbWJfc3lzZGV2X2RyaXZlcik7CiB9Ci0KIHN1YnN5c19pbml0Y2FsbChwbWJfc3lzZGV2X2luaXQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3RsYi1wdGVhZXguYyBiL2FyY2gvc2gvbW0vdGxiLXB0ZWFleC5jCmluZGV4IDQwOWI3YzIuLjMyZGM2NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vdGxiLXB0ZWFleC5jCisrKyBiL2FyY2gvc2gvbW0vdGxiLXB0ZWFleC5jCkBAIC02OCw4ICs2OCw3IEBACiAgKiBpbiBleHRlbmRlZCBtb2RlLCB0aGUgbGVnYWN5IDgtYml0IEFTSUQgZmllbGQgaW4gYWRkcmVzcyBhcnJheSAxIGhhcwogICogdW5kZWZpbmVkIGJlaGF2aW91ci4KICAqLwotdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBsb2NhbF9mbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgYXNpZCwKLQkJCQkJCSB1bnNpZ25lZCBsb25nIHBhZ2UpCit2b2lkIGxvY2FsX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhc2lkLCB1bnNpZ25lZCBsb25nIHBhZ2UpCiB7CiAJanVtcF90b191bmNhY2hlZCgpOwogCV9fcmF3X3dyaXRlbChwYWdlLCBNTVVfVVRMQl9BRERSRVNTX0FSUkFZIHwgTU1VX1BBR0VfQVNTT0NfQklUKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiLXNoMy5jIGIvYXJjaC9zaC9tbS90bGItc2gzLmMKaW5kZXggYWNlOGU2ZC4uNGY1ZjdjYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS90bGItc2gzLmMKKysrIGIvYXJjaC9zaC9tbS90bGItc2gzLmMKQEAgLTQxLDE0ICs0MSwxNCBAQAogCiAJLyogU2V0IFBURUggcmVnaXN0ZXIgKi8KIAl2cG4gPSAoYWRkcmVzcyAmIE1NVV9WUE5fTUFTSykgfCBnZXRfYXNpZCgpOwotCWN0cmxfb3V0bCh2cG4sIE1NVV9QVEVIKTsKKwlfX3Jhd193cml0ZWwodnBuLCBNTVVfUFRFSCk7CiAKIAlwdGV2YWwgPSBwdGVfdmFsKHB0ZSk7CiAKIAkvKiBTZXQgUFRFTCByZWdpc3RlciAqLwogCXB0ZXZhbCAmPSBfUEFHRV9GTEFHU19IQVJEV0FSRV9NQVNLOyAvKiBkcm9wIHNvZnR3YXJlIGZsYWdzICovCiAJLyogY29udmVuaWVudGx5LCB3ZSB3YW50IGFsbCB0aGUgc29mdHdhcmUgZmxhZ3MgdG8gYmUgMCBhbnl3YXkgKi8KLQljdHJsX291dGwocHRldmFsLCBNTVVfUFRFTCk7CisJX19yYXdfd3JpdGVsKHB0ZXZhbCwgTU1VX1BURUwpOwogCiAJLyogTG9hZCB0aGUgVExCICovCiAJYXNtIHZvbGF0aWxlKCJsZHRsYiI6IC8qIG5vIG91dHB1dCAqLyA6IC8qIG5vIGlucHV0ICovIDogIm1lbW9yeSIpOwpAQCAtNzUsNSArNzUsNSBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCB3YXlzOyBpKyspCi0JCWN0cmxfb3V0bChkYXRhLCBhZGRyICsgKGkgPDwgOCkpOworCQlfX3Jhd193cml0ZWwoZGF0YSwgYWRkciArIChpIDw8IDgpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiLXNoNC5jIGIvYXJjaC9zaC9tbS90bGItc2g0LmMKaW5kZXggOGNmNTUwZS4uY2NhYzc3ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS90bGItc2g0LmMKKysrIGIvYXJjaC9zaC9tbS90bGItc2g0LmMKQEAgLTI5LDcgKzI5LDcgQEAKIAogCS8qIFNldCBQVEVIIHJlZ2lzdGVyICovCiAJdnBuID0gKGFkZHJlc3MgJiBNTVVfVlBOX01BU0spIHwgZ2V0X2FzaWQoKTsKLQljdHJsX291dGwodnBuLCBNTVVfUFRFSCk7CisJX19yYXdfd3JpdGVsKHZwbiwgTU1VX1BURUgpOwogCiAJcHRldmFsID0gcHRlLnB0ZV9sb3c7CiAKQEAgLTQxLDEzICs0MSwxMyBAQAogCSAqIHRoZSBwcm90ZWN0aW9uIGJpdHMgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgY29tcGF0LW1vZGUgU1oKIAkgKiBhbmQgUFIgYml0cywgd2hpY2ggYXJlIGNsZWFyZWQpIGJlaW5nIHdyaXR0ZW4gb3V0IGluIFBURUwuCiAJICovCi0JY3RybF9vdXRsKHB0ZS5wdGVfaGlnaCwgTU1VX1BURUEpOworCV9fcmF3X3dyaXRlbChwdGUucHRlX2hpZ2gsIE1NVV9QVEVBKTsKICNlbHNlCiAJaWYgKGNwdV9kYXRhLT5mbGFncyAmIENQVV9IQVNfUFRFQSkgewogCQkvKiBUaGUgbGFzdCAzIGJpdHMgYW5kIHRoZSBmaXJzdCBvbmUgb2YgcHRldmFsIGNvbnRhaW5zCiAJCSAqIHRoZSBQVEVBIHRpbWluZyBjb250cm9sIGFuZCBzcGFjZSBhdHRyaWJ1dGUgYml0cwogCQkgKi8KLQkJY3RybF9vdXRsKGNvcHlfcHRlYV9hdHRyaWJ1dGVzKHB0ZXZhbCksIE1NVV9QVEVBKTsKKwkJX19yYXdfd3JpdGVsKGNvcHlfcHRlYV9hdHRyaWJ1dGVzKHB0ZXZhbCksIE1NVV9QVEVBKTsKIAl9CiAjZW5kaWYKIApAQCAtNTcsMTUgKzU3LDE0IEBACiAJcHRldmFsIHw9IF9QQUdFX1dUOwogI2VuZGlmCiAJLyogY29udmVuaWVudGx5LCB3ZSB3YW50IGFsbCB0aGUgc29mdHdhcmUgZmxhZ3MgdG8gYmUgMCBhbnl3YXkgKi8KLQljdHJsX291dGwocHRldmFsLCBNTVVfUFRFTCk7CisJX19yYXdfd3JpdGVsKHB0ZXZhbCwgTU1VX1BURUwpOwogCiAJLyogTG9hZCB0aGUgVExCICovCiAJYXNtIHZvbGF0aWxlKCJsZHRsYiI6IC8qIG5vIG91dHB1dCAqLyA6IC8qIG5vIGlucHV0ICovIDogIm1lbW9yeSIpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBsb2NhbF9mbHVzaF90bGJfb25lKHVuc2lnbmVkIGxvbmcgYXNpZCwKLQkJCQkJCSB1bnNpZ25lZCBsb25nIHBhZ2UpCit2b2lkIGxvY2FsX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhc2lkLCB1bnNpZ25lZCBsb25nIHBhZ2UpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyLCBkYXRhOwogCkBAIC03OCw2ICs3Nyw2IEBACiAJYWRkciA9IE1NVV9VVExCX0FERFJFU1NfQVJSQVkgfCBNTVVfUEFHRV9BU1NPQ19CSVQ7CiAJZGF0YSA9IHBhZ2UgfCBhc2lkOyAvKiBWQUxJRCBiaXQgaXMgb2ZmICovCiAJanVtcF90b191bmNhY2hlZCgpOwotCWN0cmxfb3V0bChkYXRhLCBhZGRyKTsKKwlfX3Jhd193cml0ZWwoZGF0YSwgYWRkcik7CiAJYmFja190b19jYWNoZWQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiLXNoNS5jIGIvYXJjaC9zaC9tbS90bGItc2g1LmMKaW5kZXggZmRiNjRlNC4uZjI3ZGJlMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS90bGItc2g1LmMKKysrIGIvYXJjaC9zaC9tbS90bGItc2g1LmMKQEAgLTE0MywzICsxNDMsNDIgQEAKICAqLwogdm9pZCBzaDY0X3RlYXJkb3duX3RsYl9zbG90KHVuc2lnbmVkIGxvbmcgbG9uZyBjb25maWdfYWRkcikKIAlfX2F0dHJpYnV0ZV9fICgoYWxpYXMoIl9fZmx1c2hfdGxiX3Nsb3QiKSkpOworCitzdGF0aWMgaW50IGR0bGJfZW50cnk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGR0bGJfZW50cmllc1s2NF07CisKK3ZvaWQgdGxiX3dpcmVfZW50cnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeTsKKwl1bnNpZ25lZCBsb25nIHBhZGRyLCBmbGFnczsKKworCUJVR19PTihkdGxiX2VudHJ5ID09IEFSUkFZX1NJWkUoZHRsYl9lbnRyaWVzKSk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwllbnRyeSA9IHNoNjRfZ2V0X3dpcmVkX2R0bGJfZW50cnkoKTsKKwlkdGxiX2VudHJpZXNbZHRsYl9lbnRyeSsrXSA9IGVudHJ5OworCisJcGFkZHIgPSBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GTEFHU19IQVJEV0FSRV9NQVNLOworCXBhZGRyICY9IH5QQUdFX01BU0s7CisKKwlzaDY0X3NldHVwX3RsYl9zbG90KGVudHJ5LCBhZGRyLCBnZXRfYXNpZCgpLCBwYWRkcik7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3ZvaWQgdGxiX3Vud2lyZV9lbnRyeSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBlbnRyeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQlVHX09OKCFkdGxiX2VudHJ5KTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwllbnRyeSA9IGR0bGJfZW50cmllc1tkdGxiX2VudHJ5LS1dOworCisJc2g2NF90ZWFyZG93bl90bGJfc2xvdChlbnRyeSk7CisJc2g2NF9wdXRfd2lyZWRfZHRsYl9lbnRyeShlbnRyeSk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3RsYi11cmIuYyBiL2FyY2gvc2gvbW0vdGxiLXVyYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNWI5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL21tL3RsYi11cmIuYwpAQCAtMCwwICsxLDgxIEBACisvKgorICogYXJjaC9zaC9tbS90bGItdXJiLmMKKyAqCisgKiBUTEIgZW50cnkgd2lyaW5nIGhlbHBlcnMgZm9yIFVSQi1lcXVpcHBlZCBwYXJ0cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIE1hdHQgRmxlbWluZworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS90bGIuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKworLyoKKyAqIExvYWQgdGhlIGVudHJ5IGZvciAnYWRkcicgaW50byB0aGUgVExCIGFuZCB3aXJlIHRoZSBlbnRyeS4KKyAqLwordm9pZCB0bGJfd2lyZV9lbnRyeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyBzdGF0dXMsIGZsYWdzOworCWludCB1cmI7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBMb2FkIHRoZSBlbnRyeSBpbnRvIHRoZSBUTEIgKi8KKwlfX3VwZGF0ZV90bGIodm1hLCBhZGRyLCBwdGUpOworCisJLyogLi4uIGFuZCB3aXJlIGl0IHVwLiAqLworCXN0YXR1cyA9IF9fcmF3X3JlYWRsKE1NVUNSKTsKKwl1cmIgPSAoc3RhdHVzICYgTU1VQ1JfVVJCKSA+PiBNTVVDUl9VUkJfU0hJRlQ7CisJc3RhdHVzICY9IH5NTVVDUl9VUkI7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSdyZSBub3QgdHJ5aW5nIHRvIHdpcmUgdGhlIGxhc3QgVExCIGVudHJ5IHNsb3QuCisJICovCisJQlVHX09OKCEtLXVyYik7CisKKwl1cmIgPSB1cmIgJSBNTVVDUl9VUkJfTkVOVFJJRVM7CisKKwlzdGF0dXMgfD0gKHVyYiA8PCBNTVVDUl9VUkJfU0hJRlQpOworCV9fcmF3X3dyaXRlbChzdGF0dXMsIE1NVUNSKTsKKwljdHJsX2JhcnJpZXIoKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIFVud2lyZSB0aGUgbGFzdCB3aXJlZCBUTEIgZW50cnkuCisgKgorICogSXQgc2hvdWxkIGFsc28gYmUgbm90ZWQgdGhhdCBpdCBpcyBub3QgcG9zc2libGUgdG8gd2lyZSBhbmQgdW53aXJlCisgKiBUTEIgZW50cmllcyBpbiBhbiBhcmJpdHJhcnkgb3JkZXIuIElmIHlvdSB3aXJlIFRMQiBlbnRyeSBOLCBmb2xsb3dlZAorICogYnkgZW50cnkgTisxLCB5b3UgbXVzdCB1bndpcmUgZW50cnkgTisxIGZpcnN0LCB0aGVuIGVudHJ5IE4uIEluIHRoaXMKKyAqIHJlc3BlY3QsIGl0IHdvcmtzIGxpa2UgYSBzdGFjayBvciBMSUZPIHF1ZXVlLgorICovCit2b2lkIHRsYl91bndpcmVfZW50cnkodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXR1cywgZmxhZ3M7CisJaW50IHVyYjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXN0YXR1cyA9IF9fcmF3X3JlYWRsKE1NVUNSKTsKKwl1cmIgPSAoc3RhdHVzICYgTU1VQ1JfVVJCKSA+PiBNTVVDUl9VUkJfU0hJRlQ7CisJc3RhdHVzICY9IH5NTVVDUl9VUkI7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSdyZSBub3QgdHJ5aW5nIHRvIHVud2lyZSBhIFRMQiBlbnRyeSB3aGVuIG5vbmUKKwkgKiBoYXZlIGJlZW4gd2lyZWQuCisJICovCisJQlVHX09OKHVyYisrID09IE1NVUNSX1VSQl9ORU5UUklFUyk7CisKKwl1cmIgPSB1cmIgJSBNTVVDUl9VUkJfTkVOVFJJRVM7CisKKwlzdGF0dXMgfD0gKHVyYiA8PCBNTVVDUl9VUkJfU0hJRlQpOworCV9fcmF3X3dyaXRlbChzdGF0dXMsIE1NVUNSKTsKKwljdHJsX2JhcnJpZXIoKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiZmx1c2hfMzIuYyBiL2FyY2gvc2gvbW0vdGxiZmx1c2hfMzIuYwppbmRleCA2ZjQ1YzFmLi4wMDRiYjNmIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3RsYmZsdXNoXzMyLmMKKysrIGIvYXJjaC9zaC9tbS90bGJmbHVzaF8zMi5jCkBAIC0xMzIsOSArMTMyLDkgQEAKIAkgKiAgICAgIEl0J3Mgc2FtZSBwb3NpdGlvbiwgYml0ICMyLgogCSAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlzdGF0dXMgPSBjdHJsX2lubChNTVVDUik7CisJc3RhdHVzID0gX19yYXdfcmVhZGwoTU1VQ1IpOwogCXN0YXR1cyB8PSAweDA0OwotCWN0cmxfb3V0bChzdGF0dXMsIE1NVUNSKTsKKwlfX3Jhd193cml0ZWwoc3RhdHVzLCBNTVVDUik7CiAJY3RybF9iYXJyaWVyKCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS90bGJmbHVzaF82NC5jIGIvYXJjaC9zaC9tbS90bGJmbHVzaF82NC5jCmluZGV4IGRlMGIwZTg4Li43MDZkYTFkIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3RsYmZsdXNoXzY0LmMKKysrIGIvYXJjaC9zaC9tbS90bGJmbHVzaF82NC5jCkBAIC0zNiw3ICszNiw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwcmludF9wcm90cyhwZ3Byb3RfdCBwcm90KQogewotCXByaW50aygicHJvdCBpcyAweCUwOGx4XG4iLHBncHJvdF92YWwocHJvdCkpOworCXByaW50aygicHJvdCBpcyAweCUwMTZsbHhcbiIscGdwcm90X3ZhbChwcm90KSk7CiAKIAlwcmludGsoIiVzICVzICVzICVzICVzXG4iLFBQUk9UKF9QQUdFX1NIQVJFRCksUFBST1QoX1BBR0VfUkVBRCksCiAJICAgICAgIFBQUk9UKF9QQUdFX0VYRUNVVEUpLFBQUk9UKF9QQUdFX1dSSVRFKSxQUFJPVChfUEFHRV9VU0VSKSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3VuY2FjaGVkLmMgYi9hcmNoL3NoL21tL3VuY2FjaGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyMGE1YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvbW0vdW5jYWNoZWQuYwpAQCAtMCwwICsxLDM0IEBACisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKy8qCisgKiBUaGlzIGlzIHRoZSBvZmZzZXQgb2YgdGhlIHVuY2FjaGVkIHNlY3Rpb24gZnJvbSBpdHMgY2FjaGVkIGFsaWFzLgorICoKKyAqIExlZ2FjeSBwbGF0Zm9ybXMgaGFuZGxlIHRyaXZpYWwgdHJhbnNpdGlvbnMgYmV0d2VlbiBjYWNoZWQgYW5kCisgKiB1bmNhY2hlZCBzZWdtZW50cyBieSBtYWtpbmcgdXNlIG9mIHRoZSAxOjEgbWFwcGluZyByZWxhdGlvbnNoaXAgaW4KKyAqIDUxMk1CIGxvd21lbSwgb3RoZXJzIHZpYSBhIHNwZWNpYWwgdW5jYWNoZWQgbWFwcGluZy4KKyAqCisgKiBEZWZhdWx0IHZhbHVlIG9ubHkgdmFsaWQgaW4gMjkgYml0IG1vZGUsIGluIDMyYml0IG1vZGUgdGhpcyB3aWxsIGJlCisgKiB1cGRhdGVkIGJ5IHRoZSBlYXJseSBQTUIgaW5pdGlhbGl6YXRpb24gY29kZS4KKyAqLwordW5zaWduZWQgbG9uZyBjYWNoZWRfdG9fdW5jYWNoZWQgPSBTWl81MTJNOwordW5zaWduZWQgbG9uZyB1bmNhY2hlZF9zaXplID0gU1pfNTEyTTsKK3Vuc2lnbmVkIGxvbmcgdW5jYWNoZWRfc3RhcnQsIHVuY2FjaGVkX2VuZDsKKworaW50IHZpcnRfYWRkcl91bmNhY2hlZCh1bnNpZ25lZCBsb25nIGthZGRyKQoreworCXJldHVybiAoa2FkZHIgPj0gdW5jYWNoZWRfc3RhcnQpICYmIChrYWRkciA8IHVuY2FjaGVkX2VuZCk7Cit9CisKK3ZvaWQgX19pbml0IHVuY2FjaGVkX2luaXQodm9pZCkKK3sKKwl1bmNhY2hlZF9zdGFydCA9IG1lbW9yeV9lbmQ7CisJdW5jYWNoZWRfZW5kID0gdW5jYWNoZWRfc3RhcnQgKyB1bmNhY2hlZF9zaXplOworfQorCit2b2lkIF9faW5pdCB1bmNhY2hlZF9yZXNpemUodW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuY2FjaGVkX3NpemUgPSBzaXplOworCXVuY2FjaGVkX2VuZCA9IHVuY2FjaGVkX3N0YXJ0ICsgdW5jYWNoZWRfc2l6ZTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcyBiL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcwppbmRleCA2NjM5YjI1Li5iMjVhYTU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCkBAIC0zMiw2ICszMiw3IEBACiBTTkFQR0VBUgkJU0hfU0VDVVJFRURHRTU0MTAKIEVET1NLNzcwNQkJU0hfRURPU0s3NzA1CiBFRE9TSzc3NjAJCVNIX0VET1NLNzc2MAorU0RLNzc4NgkJCVNIX1NESzc3ODYKIFNINDIwMl9NSUNST0RFVgkJU0hfU0g0MjAyX01JQ1JPREVWCiBTSDAzCQkJU0hfU0gwMwogTEFORElTSwkJCVNIX0xBTkRJU0sKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKaW5kZXggZTBjYWJlNy4uNzdmOTA2ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKQEAgLTMzMCw5ICszMzAsOSBAQAogI2RlZmluZSBGQVVMVF9DT0RFX1dSSVRFICAgIDB4MgogI2RlZmluZSBGQVVMVF9DT0RFX1VTRVIgICAgIDB4NAogCi1CVEZJWFVQREVGX0NBTEwodm9pZCwgdXBkYXRlX21tdV9jYWNoZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90KQorQlRGSVhVUERFRl9DQUxMKHZvaWQsIHVwZGF0ZV9tbXVfY2FjaGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBwdGVfdCAqKQogCi0jZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLGFkZHIscHRlKSBCVEZJWFVQX0NBTEwodXBkYXRlX21tdV9jYWNoZSkodm1hLGFkZHIscHRlKQorI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSxhZGRyLHB0ZXApIEJURklYVVBfQ0FMTCh1cGRhdGVfbW11X2NhY2hlKSh2bWEsYWRkcixwdGVwKQogCiBCVEZJWFVQREVGX0NBTEwodm9pZCwgc3BhcmNfbWFwaW9yYW5nZSwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nLAogICAgIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGludCkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKaW5kZXggZjNjYjc5MC4uZjViNWZhNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKQEAgLTcwNiw3ICs3MDYsNyBAQAogI2RlZmluZSBtbXVfdW5sb2NrYXJlYSh2YWRkciwgbGVuKQkJZG8geyB9IHdoaWxlKDApCiAKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKLWV4dGVybiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90KTsKK2V4dGVybiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90ICopOwogCiAvKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5ICovCiAjZGVmaW5lIF9fc3dwX3R5cGUoZW50cnkpCSgoKGVudHJ5KS52YWwgPj4gUEFHRV9TSElGVCkgJiAweGZmVUwpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzY2FsbC5oCmluZGV4IDc0ODZjNjAuLjAyNWEwMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzY2FsbC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzY2FsbC5oCkBAIC01LDYgKzUsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAorLyoKKyAqIFRoZSBzeXNjYWxsIHRhYmxlIGFsd2F5cyBjb250YWlucyAzMiBiaXQgcG9pbnRlcnMgc2luY2Ugd2Uga25vdyB0aGF0IHRoZQorICogYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGlzICh3YXkpIGJlbG93IDRHQi4gIFNvIHRoZSAiaW50IgorICogdHlwZSBoZXJlIGlzIHdoYXQgd2Ugd2FudCBbbmVlZF0gZm9yIGJvdGggMzIgYml0IGFuZCA2NCBiaXQgc3lzdGVtcy4KKyAqLworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBzeXNfY2FsbF90YWJsZVtdOworCiAvKiBUaGUgc3lzdGVtIGNhbGwgbnVtYmVyIGlzIGdpdmVuIGJ5IHRoZSB1c2VyIGluICVnMSAqLwogc3RhdGljIGlubGluZSBsb25nIHN5c2NhbGxfZ2V0X25yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKIAkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvZGV2aWNlcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvZGV2aWNlcy5jCmluZGV4IGIxNzFhZTguLmIwNjJkZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2RldmljZXMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9kZXZpY2VzLmMKQEAgLTU5LDcgKzU5LDcgQEAKIAogCWN1cl9pbnN0ID0gMDsKIAlmb3JfZWFjaF9ub2RlX2J5X3R5cGUoZHAsICJjcHUiKSB7Ci0JCWludCBlcnIgPSBjaGVja19jcHVfbm9kZShkcC0+bm9kZSwgJmN1cl9pbnN0LAorCQlpbnQgZXJyID0gY2hlY2tfY3B1X25vZGUoZHAtPnBoYW5kbGUsICZjdXJfaW5zdCwKIAkJCQkJIGNvbXBhcmUsIGNvbXBhcmVfYXJnLAogCQkJCQkgcHJvbV9ub2RlLCBtaWQpOwogCQlpZiAoIWVycikgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYwppbmRleCAyOTk3M2RhLi45MTAzYTU2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYwpAQCAtOTEsMTQgKzkxLDMgQEAKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUwotCi1leHRlcm4gdW5zaWduZWQgaW50IHN5c19jYWxsX3RhYmxlW107Ci0KLXVuc2lnbmVkIGxvbmcgX19pbml0IGFyY2hfc3lzY2FsbF9hZGRyKGludCBucikKLXsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpc3lzX2NhbGxfdGFibGVbbnJdOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV8zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKaW5kZXggNTNhNThiMy4uZGE1MjdiMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKQEAgLTQzMyw3ICs0MzMsNyBAQAogCWlmICghcGFyZW50KQogCQlkZXZfc2V0X25hbWUoJm9wLT5kZXYsICJyb290Iik7CiAJZWxzZQotCQlkZXZfc2V0X25hbWUoJm9wLT5kZXYsICIlMDh4IiwgZHAtPm5vZGUpOworCQlkZXZfc2V0X25hbWUoJm9wLT5kZXYsICIlMDh4IiwgZHAtPnBoYW5kbGUpOwogCiAJaWYgKG9mX2RldmljZV9yZWdpc3RlcihvcCkpIHsKIAkJcHJpbnRrKCIlczogQ291bGQgbm90IHJlZ2lzdGVyIG9mIGRldmljZS5cbiIsCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9vZl9kZXZpY2VfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCmluZGV4IDBhNmYyZDEuLmIzZDRjYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV82NC5jCkBAIC02NzYsNyArNjc2LDcgQEAKIAlpZiAoIXBhcmVudCkKIAkJZGV2X3NldF9uYW1lKCZvcC0+ZGV2LCAicm9vdCIpOwogCWVsc2UKLQkJZGV2X3NldF9uYW1lKCZvcC0+ZGV2LCAiJTA4eCIsIGRwLT5ub2RlKTsKKwkJZGV2X3NldF9uYW1lKCZvcC0+ZGV2LCAiJTA4eCIsIGRwLT5waGFuZGxlKTsKIAogCWlmIChvZl9kZXZpY2VfcmVnaXN0ZXIob3ApKSB7CiAJCXByaW50aygiJXM6IENvdWxkIG5vdCByZWdpc3RlciBvZiBkZXZpY2UuXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2kuYwppbmRleCA1OTJiMDNkLi4zN2I2NmM2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2kuYwpAQCAtNzIyLDkgKzcyMiwxMCBAQAogewogfQogCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CisJcmV0dXJuIHJlcy0+c3RhcnQ7CiB9CiAKIGludCBwY2liaW9zX2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG1hc2spCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMKaW5kZXggNGUyNzI0ZS4uNzVlODhjMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaWMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMKQEAgLTc2OCw5ICs3NjgsMTAgQEAKIAlyZXR1cm4gc3RyOwogfQogCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKK3Jlc291cmNlX3NpemVfdCBwY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CisJcmV0dXJuIHJlcy0+c3RhcnQ7CiB9CiAKIGludCBwY2liaW9zX2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtYXNrKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IGU4NTY0NTYuLjlmMmIyYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTk4MCwxMCArOTgwLDEwIEBACiAJcmV0dXJuIG47CiB9CiAKLXN0YXRpYyB2b2lkIGV2ZW50X3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGNwdSkKK3N0YXRpYyB2b2lkIGV2ZW50X3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRTsKLQlldmVudC0+b25jcHUgPSBjcHU7CisJZXZlbnQtPm9uY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWV2ZW50LT50c3RhbXBfcnVubmluZyArPSBldmVudC0+Y3R4LT50aW1lIC0gZXZlbnQtPnRzdGFtcF9zdG9wcGVkOwogCWlmIChpc19zb2Z0d2FyZV9ldmVudChldmVudCkpCiAJCWV2ZW50LT5wbXUtPmVuYWJsZShldmVudCk7CkBAIC05OTEsNyArOTkxLDcgQEAKIAogaW50IGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmdyb3VwX2xlYWRlciwKIAkJCSAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCi0JCQkgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsIGludCBjcHUpCisJCQkgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCiB7CiAJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqc3ViOwpAQCAtMTAxNSwxMCArMTAxNSwxMCBAQAogCiAJY3B1Y3R4LT5hY3RpdmVfb25jcHUgKz0gbjsKIAluID0gMTsKLQlldmVudF9zY2hlZF9pbihncm91cF9sZWFkZXIsIGNwdSk7CisJZXZlbnRfc2NoZWRfaW4oZ3JvdXBfbGVhZGVyKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YiwgJmdyb3VwX2xlYWRlci0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgewogCQlpZiAoc3ViLT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX09GRikgewotCQkJZXZlbnRfc2NoZWRfaW4oc3ViLCBjcHUpOworCQkJZXZlbnRfc2NoZWRfaW4oc3ViKTsKIAkJCW4rKzsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb20uaCBiL2FyY2gvc3BhcmMva2VybmVsL3Byb20uaAppbmRleCA0NTMzOTdmLi5hODU5MWVmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tLmgKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbS5oCkBAIC00LDkgKzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KIAotZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWxsbm9kZXM7CS8qIHRlbXBvcmFyeSB3aGlsZSBtZXJnaW5nICovCi1leHRlcm4gcndsb2NrX3QgZGV2dHJlZV9sb2NrOwkvKiB0ZW1wb3Jhcnkgd2hpbGUgbWVyZ2luZyAqLwotCiBleHRlcm4gdm9pZCAqIHByb21fZWFybHlfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKTsKIGV4dGVybiB2b2lkIGlycV90cmFuc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYwppbmRleCBkODBhNjVkLi41N2FjOWUyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMKQEAgLTM3LDE4ICszNyw2IEBACiBjaGFyICpvZl9jb25zb2xlX29wdGlvbnM7CiBFWFBPUlRfU1lNQk9MKG9mX2NvbnNvbGVfb3B0aW9ucyk7CiAKLXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUocGhhbmRsZSBoYW5kbGUpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQotCWZvciAobnAgPSBhbGxub2RlczsgbnA7IG5wID0gbnAtPmFsbG5leHQpCi0JCWlmIChucC0+bm9kZSA9PSBoYW5kbGUpCi0JCQlicmVhazsKLQotCXJldHVybiBucDsKLX0KLUVYUE9SVF9TWU1CT0wob2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUpOwotCiBpbnQgb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBkZWYpCiB7CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOwpAQCAtODksNyArNzcsNyBAQAogCQkJdm9pZCAqb2xkX3ZhbCA9IHByb3AtPnZhbHVlOwogCQkJaW50IHJldDsKIAotCQkJcmV0ID0gcHJvbV9zZXRwcm9wKGRwLT5ub2RlLCBuYW1lLCB2YWwsIGxlbik7CisJCQlyZXQgPSBwcm9tX3NldHByb3AoZHAtPnBoYW5kbGUsIG5hbWUsIHZhbCwgbGVuKTsKIAogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWlmIChyZXQgPj0gMCkgewpAQCAtMjM2LDcgKzIyNCw3IEBACiAKIAlkcC0+bmFtZSA9IGdldF9vbmVfcHJvcGVydHkobm9kZSwgIm5hbWUiKTsKIAlkcC0+dHlwZSA9IGdldF9vbmVfcHJvcGVydHkobm9kZSwgImRldmljZV90eXBlIik7Ci0JZHAtPm5vZGUgPSBub2RlOworCWRwLT5waGFuZGxlID0gbm9kZTsKIAogCWRwLT5wcm9wZXJ0aWVzID0gYnVpbGRfcHJvcF9saXN0KG5vZGUpOwogCkBAIC0zMTMsNyArMzAxLDcgQEAKIAogCW5leHRwID0gJmFsbG5vZGVzLT5hbGxuZXh0OwogCWFsbG5vZGVzLT5jaGlsZCA9IHByb21fYnVpbGRfdHJlZShhbGxub2RlcywKLQkJCQkJICBwcm9tX2dldGNoaWxkKGFsbG5vZGVzLT5ub2RlKSwKKwkJCQkJICBwcm9tX2dldGNoaWxkKGFsbG5vZGVzLT5waGFuZGxlKSwKIAkJCQkJICAmbmV4dHApOwogCW9mX2NvbnNvbGVfaW5pdCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jCmluZGV4IGFhMzYyMjMuLmViMTQ4NDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jCkBAIC0zNzAsNyArMzcwLDcgQEAKIAl9IGVsc2UgewogCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gb2ZfZmluZF9ub2RlX2J5X2NwdWlkKGNwdSk7CiAKLQkJcHJvbV9zdGFydGNwdShkcC0+bm9kZSwgZW50cnksIGNvb2tpZSk7CisJCXByb21fc3RhcnRjcHUoZHAtPnBoYW5kbGUsIGVudHJ5LCBjb29raWUpOwogCX0KIAogCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCA1MDAwMDsgdGltZW91dCsrKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2ZhdWx0XzMyLmMgYi9hcmNoL3NwYXJjL21tL2ZhdWx0XzMyLmMKaW5kZXggYTM0MTNhYy4uM2ZhMDliYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9mYXVsdF8zMi5jCisrKyBiL2FyY2gvc3BhcmMvbW0vZmF1bHRfMzIuYwpAQCAtMzc4LDcgKzM3OCw3IEBACiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCWV4dGVybiB2b2lkIHN1bjRjX3VwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcscHRlX3QpOworCQkJCQkgICB1bnNpZ25lZCBsb25nLHB0ZV90ICopOwogCWV4dGVybiBwdGVfdCAqc3VuNGNfcHRlX29mZnNldF9rZXJuZWwocG1kX3QgKix1bnNpZ25lZCBsb25nKTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stPm1tOwpAQCAtNDU1LDcgKzQ1NSw3IEBACiAJCSAqICAgICAgIG9uIHRoZSBDUFUgYW5kIGRvaW5nIGEgc2hyaW5rX21tYXAoKSBvbiB0aGlzIHZtYS4KIAkJICovCiAJCXN1bjRjX3VwZGF0ZV9tbXVfY2FjaGUgKGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBhZGRyZXNzKSwgYWRkcmVzcywKLQkJCQkJKnB0ZXApOworCQkJCQlwdGVwKTsKIAllbHNlCiAJCWRvX3NwYXJjX2ZhdWx0KHJlZ3MsIHRleHRfZmF1bHQsIHdyaXRlLCBhZGRyZXNzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jIGIvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMKaW5kZXggMTg4NmQzNy4uOTI0NWE4MiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMKQEAgLTI4OSwxMiArMjg5LDEzIEBACiAJfQogfQogCi12b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQordm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQogewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCXN0cnVjdCB0c2IgKnRzYjsKIAl1bnNpZ25lZCBsb25nIHRhZywgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyB0c2JfaW5kZXgsIHRzYl9oYXNoX3NoaWZ0OworCXB0ZV90IHB0ZSA9ICpwdGVwOwogCiAJaWYgKHRsYl90eXBlICE9IGh5cGVydmlzb3IpIHsKIAkJdW5zaWduZWQgbG9uZyBwZm4gPSBwdGVfcGZuKHB0ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL25vc3VuNGMuYyBiL2FyY2gvc3BhcmMvbW0vbm9zdW40Yy5jCmluZGV4IDE5NjI2M2YuLjRlNjJjMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vbm9zdW40Yy5jCisrKyBiL2FyY2gvc3BhcmMvbW0vbm9zdW40Yy5jCkBAIC02Miw3ICs2Miw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXZvaWQgc3VuNGNfdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpCit2b2lkIHN1bjRjX3VwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vc3JtbXUuYyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwppbmRleCAzNjczMjFhLi5kZjQ5YjIwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL3NybW11LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCkBAIC02OTQsNyArNjk0LDcgQEAKICAqIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBhIGRlYWR3b29kIHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB3aGVuCiAgKiB3ZSBzdGFydCB0byBtYWtlIHByZWNpc2UgcGFnZSBmbHVzaGVzIGFnYWluLiAtLXphaXRjZXYKICAqLwotc3RhdGljIHZvaWQgc3dpZnRfdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQorc3RhdGljIHZvaWQgc3dpZnRfdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiB7CiAjaWYgMAogCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3Q7CkBAIC03MDMsMTAgKzcwMywxMCBAQAogCiAJaWYgKGFkZHJlc3MgPT0gbGFzdCkgewogCQl2YWwgPSBzcm1tdV9od3Byb2JlKGFkZHJlc3MpOwotCQlpZiAodmFsICE9IDAgJiYgcHRlX3ZhbChwdGUpICE9IHZhbCkgeworCQlpZiAodmFsICE9IDAgJiYgcHRlX3ZhbCgqcHRlcCkgIT0gdmFsKSB7CiAJCQlwcmludGsoInN3aWZ0X3VwZGF0ZV9tbXVfY2FjaGU6ICIKIAkJCSAgICAiYWRkciAlbHggcHV0ICUwOHggcHJvYmVkICUwOHggZnJvbSAlcFxuIiwKLQkJCSAgICBhZGRyZXNzLCBwdGVfdmFsKHB0ZSksIHZhbCwKKwkJCSAgICBhZGRyZXNzLCBwdGVfdmFsKCpwdGVwKSwgdmFsLAogCQkJICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJCQlzcm1tdV9mbHVzaF93aG9sZV90bGIoKTsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9zdW40Yy5jIGIvYXJjaC9zcGFyYy9tbS9zdW40Yy5jCmluZGV4IGE4OWJhZjAuLjE4NjUyNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vc3VuNGMuYworKysgYi9hcmNoL3NwYXJjL21tL3N1bjRjLmMKQEAgLTE4ODcsNyArMTg4Nyw3IEBACiAvKiBBbiBleHBlcmltZW50LCB0dXJuIG9mZiBieSBkZWZhdWx0IGZvciBub3cuLi4gLURhdmVNICovCiAjZGVmaW5lIFNVTjRDX1BSRUxPQURfUFNFRwogCi12b2lkIHN1bjRjX3VwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgcHRlKQordm9pZCBzdW40Y191cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHBzZWc7CkBAIC0xOTI5LDcgKzE5MjksNyBAQAogCQkJc3RhcnQgKz0gUEFHRV9TSVpFOwogCQl9CiAjaWZuZGVmIFNVTjRDX1BSRUxPQURfUFNFRwotCQlzdW40Y19wdXRfcHRlKGFkZHJlc3MsIHB0ZV92YWwocHRlKSk7CisJCXN1bjRjX3B1dF9wdGUoYWRkcmVzcywgcHRlX3ZhbCgqcHRlcCkpOwogI2VuZGlmCiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJcmV0dXJuOwpAQCAtMTk0MCw3ICsxOTQwLDcgQEAKIAkJYWRkX2xydShlbnRyeSk7CiAJfQogCi0Jc3VuNGNfcHV0X3B0ZShhZGRyZXNzLCBwdGVfdmFsKHB0ZSkpOworCXN1bjRjX3B1dF9wdGUoYWRkcmVzcywgcHRlX3ZhbCgqcHRlcCkpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYwppbmRleCA1ZmY1NTQ2Li5jMWZmNjkwIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYwpAQCAtNzQ3LDcgKzc0Nyw3IEBACiAJdWJkX2Rldi0+ZmQgPSBmZDsKIAogCWlmKHViZF9kZXYtPmNvdy5maWxlICE9IE5VTEwpewotCQlibGtfcXVldWVfbWF4X3NlY3RvcnModWJkX2Rldi0+cXVldWUsIDggKiBzaXplb2YobG9uZykpOworCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnModWJkX2Rldi0+cXVldWUsIDggKiBzaXplb2YobG9uZykpOwogCiAJCWVyciA9IC1FTk9NRU07CiAJCXViZF9kZXYtPmNvdy5iaXRtYXAgPSB2bWFsbG9jKHViZF9kZXYtPmNvdy5iaXRtYXBfbGVuKTsKQEAgLTg0OSw3ICs4NDksNyBAQAogCX0KIAl1YmRfZGV2LT5xdWV1ZS0+cXVldWVkYXRhID0gdWJkX2RldjsKIAotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHModWJkX2Rldi0+cXVldWUsIE1BWF9TRyk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyh1YmRfZGV2LT5xdWV1ZSwgTUFYX1NHKTsKIAllcnIgPSB1YmRfZGlza19yZWdpc3RlcihVQkRfTUFKT1IsIHViZF9kZXYtPnNpemUsIG4sICZ1YmRfZ2VuZGlza1tuXSk7CiAJaWYoZXJyKXsKIAkJKmVycm9yX291dCA9ICJGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2aWNlIjsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggOWNlM2YxNi4uYTlmNzI1MSAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTM0NSw3ICszNDUsNyBAQAogc3RydWN0IG1tX3N0cnVjdDsKIGV4dGVybiBwdGVfdCAqdmlydF90b19wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKLSNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsYWRkcmVzcyxwdGUpIGRvIDsgd2hpbGUgKDApCisjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLGFkZHJlc3MscHRlcCkgZG8gOyB3aGlsZSAoMCkKIAogLyogRW5jb2RlIGFuZCBkZS1jb2RlIGEgc3dhcCBlbnRyeSAqLwogI2RlZmluZSBfX3N3cF90eXBlKHgpCQkJKCgoeCkudmFsID4+IDQpICYgMHgzZikKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC9NYWtlZmlsZSBiL2FyY2gvdW0vc3lzLXg4Nl82NC9NYWtlZmlsZQppbmRleCAyMjAxZTljLi5jMWVhOWViIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy14ODZfNjQvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L01ha2VmaWxlCkBAIC04LDcgKzgsOCBAQAogCXNldGptcC5vIHNpZ25hbC5vIHN0dWIubyBzdHViX3NlZ3YubyBzeXNjYWxscy5vIHN5c2NhbGxfdGFibGUubyBcCiAJc3lzcnEubyBrc3ltcy5vIHRscy5vCiAKLXN1YmFyY2gtb2JqLXkgPSBsaWIvY3N1bS1wYXJ0aWFsXzY0Lm8gbGliL21lbWNweV82NC5vIGxpYi90aHVua182NC5vCitzdWJhcmNoLW9iai15ID0gbGliL2NzdW0tcGFydGlhbF82NC5vIGxpYi9tZW1jcHlfNjQubyBsaWIvdGh1bmtfNjQubyBcCisJCWxpYi9yd3NlbV82NC5vCiBzdWJhcmNoLW9iai0kKENPTkZJR19NT0RVTEVTKSArPSBrZXJuZWwvbW9kdWxlLm8KIAogbGR0LXkgPSAuLi9zeXMtaTM4Ni9sZHQubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggZWI0MDkyNS4uMDg5NjAwOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC00NSw2ICs0NSw3IEBACiAJc2VsZWN0IEhBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaWYgWDg2XzMyCiAJc2VsZWN0IEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MKIAlzZWxlY3QgVVNFUl9TVEFDS1RSQUNFX1NVUFBPUlQKKwlzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJCiAJc2VsZWN0IEhBVkVfRE1BX0FQSV9ERUJVRwogCXNlbGVjdCBIQVZFX0tFUk5FTF9HWklQCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnLmNwdSBiL2FyY2gveDg2L0tjb25maWcuY3B1CmluZGV4IGYyMGRkZjguLmExOTgyOTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuY3B1CisrKyBiL2FyY2gveDg2L0tjb25maWcuY3B1CkBAIC0zMTksNyArMzE5LDcgQEAKIAogY29uZmlnIFg4Nl9YQURECiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gWDg2XzMyICYmICFNMzg2CisJZGVwZW5kcyBvbiBYODZfNjQgfHwgIU0zODYKIAogY29uZmlnIFg4Nl9QUFJPX0ZFTkNFCiAJYm9vbCAiUGVudGl1bVBybyBtZW1vcnkgb3JkZXJpbmcgZXJyYXRhIHdvcmthcm91bmQiCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9NYWtlZmlsZSBiL2FyY2gveDg2L01ha2VmaWxlCmluZGV4IDc4YjMyYmUuLjBhNDNkYzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L01ha2VmaWxlCisrKyBiL2FyY2gveDg2L01ha2VmaWxlCkBAIC0xMzUsOSArMTM1LDcgQEAKICMgc3VzcGVuZCBhbmQgaGliZXJuYXRpb24gc3VwcG9ydAogZHJpdmVycy0kKENPTkZJR19QTSkgKz0gYXJjaC94ODYvcG93ZXIvCiAKLWlmZXEgKCQoQ09ORklHX1g4Nl8zMikseSkKIGRyaXZlcnMtJChDT05GSUdfRkIpICs9IGFyY2gveDg2L3ZpZGVvLwotZW5kaWYKIAogIyMjIwogIyBib290IGxvYWRlciBzdXBwb3J0LiBTZXZlcmFsIHRhcmdldHMgYXJlIGtlcHQgZm9yIGxlZ2FjeSBwdXJwb3NlcwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggM2IyMmZlOC4uNTFlMjQwNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC0xOSwxMSArMTksNiBAQAogI2RlZmluZSBfQVNNX1g4Nl9ERVNDX0ggMQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIF9MSU5VWF9TVFJJTkdfSF8gMQotI2RlZmluZSBfX0xJTlVYX0JJVE1BUF9IIDEKLSNlbmRpZgotCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjcmVlbl9pbmZvLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CkBAIC0xMzEsOCArMTI2LDggQEAKIHN0YXRpYyBzdHJ1Y3QgYm9vdF9wYXJhbXMgKnJlYWxfbW9kZTsJCS8qIFBvaW50ZXIgdG8gcmVhbC1tb2RlIGRhdGEgKi8KIHN0YXRpYyBpbnQgcXVpZXQ7CiAKLXN0YXRpYyB2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHVuc2lnbmVkIG4pOwotdm9pZCAqbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbik7Cit2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTsKK3ZvaWQgKm1lbWNweSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKTsKIAogc3RhdGljIHZvaWQgX19wdXRzdHIoaW50LCBjb25zdCBjaGFyICopOwogI2RlZmluZSBwdXRzdHIoX194KSAgX19wdXRzdHIoMCwgX194KQpAQCAtMTg1LDExICsxODAsOSBAQAogCQlyZXR1cm47CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YODZfMzIKIAlpZiAocmVhbF9tb2RlLT5zY3JlZW5faW5mby5vcmlnX3ZpZGVvX21vZGUgPT0gMCAmJgogCSAgICBsaW5lcyA9PSAwICYmIGNvbHMgPT0gMCkKIAkJcmV0dXJuOwotI2VuZGlmCiAKIAl4ID0gcmVhbF9tb2RlLT5zY3JlZW5faW5mby5vcmlnX3g7CiAJeSA9IHJlYWxfbW9kZS0+c2NyZWVuX2luZm8ub3JpZ195OwpAQCAtMjIzLDcgKzIxNiw3IEBACiAJb3V0YigweGZmICYgKHBvcyA+PiAxKSwgdmlkcG9ydCsxKTsKIH0KIAotc3RhdGljIHZvaWQgKm1lbXNldCh2b2lkICpzLCBpbnQgYywgdW5zaWduZWQgbikKK3ZvaWQgKm1lbXNldCh2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pCiB7CiAJaW50IGk7CiAJY2hhciAqc3MgPSBzOwpAQCAtMjMzLDcgKzIyNiw3IEBACiAJcmV0dXJuIHM7CiB9CiAKLXZvaWQgKm1lbWNweSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIG4pCit2b2lkICptZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikKIHsKIAlpbnQgaTsKIAljb25zdCBjaGFyICpzID0gc3JjOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9ta2NwdXN0ci5jIGIvYXJjaC94ODYvYm9vdC9ta2NwdXN0ci5jCmluZGV4IDhlZjYwZjIuLjkxOTI1N2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvbWtjcHVzdHIuYworKysgYi9hcmNoL3g4Ni9ib290L21rY3B1c3RyLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAlpbnQgaSwgajsKIAljb25zdCBjaGFyICpzdHI7CiAKLQlwcmludGYoInN0YXRpYyBjb25zdCBjaGFyIHg4Nl9jYXBfc3Ryc1tdID0gXG4iKTsKKwlwcmludGYoInN0YXRpYyBjb25zdCBjaGFyIHg4Nl9jYXBfc3Ryc1tdID1cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IE5DQVBJTlRTOyBpKyspIHsKIAkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmdhLmMgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLXZnYS5jCmluZGV4IDgxOWNhYTEuLmVkN2FlZmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmdhLmMKKysrIGIvYXJjaC94ODYvYm9vdC92aWRlby12Z2EuYwpAQCAtNDIsMjIgKzQyLDE1IEBACiB7CiAJc3RydWN0IGJpb3NyZWdzIGlyZWcsIG9yZWc7CiAJdTE2IGF4OwotCXU4IHJvd3M7CiAJdTggbW9kZTsKIAogCWluaXRyZWdzKCZpcmVnKTsKIAorCS8qIFF1ZXJ5IGN1cnJlbnQgbW9kZSAqLwogCWF4ID0gMHgwZjAwOwogCWludGNhbGwoMHgxMCwgJmlyZWcsICZvcmVnKTsKIAltb2RlID0gb3JlZy5hbDsKIAotCXNldF9mcygwKTsKLQlyb3dzID0gcmRmczgoMHg0ODQpOwkvKiByb3dzIG1pbnVzIG9uZSAqLwotCi0JaWYgKChvcmVnLmF4ID09IDB4NTAwMyB8fCBvcmVnLmF4ID09IDB4NTAwNykgJiYKLQkgICAgKHJvd3MgPT0gMCB8fCByb3dzID09IDI0KSkKLQkJcmV0dXJuIG1vZGU7Ci0KIAlpZiAobW9kZSAhPSAzICYmIG1vZGUgIT0gNykKIAkJbW9kZSA9IDM7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvdmlkZW8uYyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8uYwppbmRleCBmNzY3MTY0Li40M2VkYTI4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3ZpZGVvLmMKKysrIGIvYXJjaC94ODYvYm9vdC92aWRlby5jCkBAIC0yOTgsMTEgKzI5OCwxOCBAQAogCX0KIAogCS8qIFJlc3RvcmUgY3Vyc29yIHBvc2l0aW9uICovCisJaWYgKHNhdmVkLmN1cnggPj0geHMpCisJCXNhdmVkLmN1cnggPSB4cy0xOworCWlmIChzYXZlZC5jdXJ5ID49IHlzKQorCQlzYXZlZC5jdXJ5ID0geXMtMTsKKwogCWluaXRyZWdzKCZpcmVnKTsKIAlpcmVnLmFoID0gMHgwMjsJCS8qIFNldCBjdXJzb3IgcG9zaXRpb24gKi8KIAlpcmVnLmRoID0gc2F2ZWQuY3VyeTsKIAlpcmVnLmRsID0gc2F2ZWQuY3VyeDsKIAlpbnRjYWxsKDB4MTAsICZpcmVnLCBOVUxMKTsKKworCXN0b3JlX2N1cnNvcl9wb3NpdGlvbigpOwogfQogCiB2b2lkIHNldF92aWRlbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaWEzMi9pYTMyX2FvdXQuYyBiL2FyY2gveDg2L2lhMzIvaWEzMl9hb3V0LmMKaW5kZXggZjlmNDcyNC4uOTA0NmU0YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9pYTMyX2FvdXQuYworKysgYi9hcmNoL3g4Ni9pYTMyL2lhMzJfYW91dC5jCkBAIC0yOTcsNyArMjk3LDcgQEAKIAkgKiBzaXplIGxpbWl0cyBpbXBvc2VkIG9uIHRoZW0gYnkgY3JlYXRpbmcgcHJvZ3JhbXMgd2l0aCBsYXJnZQogCSAqIGFycmF5cyBpbiB0aGUgZGF0YSBvciBic3MuCiAJICovCi0JcmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfREFUQV0ucmxpbV9jdXI7CisJcmxpbSA9IHJsaW1pdChSTElNSVRfREFUQSk7CiAJaWYgKHJsaW0gPj0gUkxJTV9JTkZJTklUWSkKIAkJcmxpbSA9IH4wOwogCWlmIChleC5hX2RhdGEgKyBleC5hX2JzcyA+IHJsaW0pCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaAppbmRleCA2OWI3NGE3Li5mMWUyNTNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmgKQEAgLTY1LDEyICs2NSwxNyBAQAogCQkJCQl2b2lkICp0ZXh0LCB2b2lkICp0ZXh0X2VuZCk7CiBleHRlcm4gdm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9kZWwoc3RydWN0IG1vZHVsZSAqbW9kKTsKIGV4dGVybiB2b2lkIGFsdGVybmF0aXZlc19zbXBfc3dpdGNoKGludCBzbXApOworZXh0ZXJuIGludCBhbHRlcm5hdGl2ZXNfdGV4dF9yZXNlcnZlZCh2b2lkICpzdGFydCwgdm9pZCAqZW5kKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfYWRkKHN0cnVjdCBtb2R1bGUgKm1vZCwgY2hhciAqbmFtZSwKIAkJCQkJICAgICAgIHZvaWQgKmxvY2tzLCB2b2lkICpsb2Nrc19lbmQsCiAJCQkJCSAgICAgICB2b2lkICp0ZXh0LCB2b2lkICp0ZXh0X2VuZCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9kZWwoc3RydWN0IG1vZHVsZSAqbW9kKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGFsdGVybmF0aXZlc19zbXBfc3dpdGNoKGludCBzbXApIHt9CitzdGF0aWMgaW5saW5lIGludCBhbHRlcm5hdGl2ZXNfdGV4dF9yZXNlcnZlZCh2b2lkICpzdGFydCwgdm9pZCAqZW5kKQoreworCXJldHVybiAwOworfQogI2VuZGlmCS8qIENPTkZJR19TTVAgKi8KIAogLyogYWx0ZXJuYXRpdmUgYXNzZW1ibHkgcHJpbWl0aXZlOiAqLwpAQCAtMTI1LDExICsxMzAsMTYgQEAKIAlhc20gdm9sYXRpbGUgKEFMVEVSTkFUSVZFKG9sZGluc3RyLCBuZXdpbnN0ciwgZmVhdHVyZSkJCVwKIAkJOiBvdXRwdXQgOiAiaSIgKDApLCAjIyBpbnB1dCkKIAorLyogTGlrZSBhbHRlcm5hdGl2ZV9pbywgYnV0IGZvciByZXBsYWNpbmcgYSBkaXJlY3QgY2FsbCB3aXRoIGFub3RoZXIgb25lLiAqLworI2RlZmluZSBhbHRlcm5hdGl2ZV9jYWxsKG9sZGZ1bmMsIG5ld2Z1bmMsIGZlYXR1cmUsIG91dHB1dCwgaW5wdXQuLi4pCVwKKwlhc20gdm9sYXRpbGUgKEFMVEVSTkFUSVZFKCJjYWxsICVQW29sZF0iLCAiY2FsbCAlUFtuZXddIiwgZmVhdHVyZSkgXAorCQk6IG91dHB1dCA6IFtvbGRdICJpIiAob2xkZnVuYyksIFtuZXddICJpIiAobmV3ZnVuYyksICMjIGlucHV0KQorCiAvKgogICogdXNlIHRoaXMgbWFjcm8ocykgaWYgeW91IG5lZWQgbW9yZSB0aGFuIG9uZSBvdXRwdXQgcGFyYW1ldGVyCiAgKiBpbiBhbHRlcm5hdGl2ZV9pbwogICovCi0jZGVmaW5lIEFTTV9PVVRQVVQyKGEsIGIpIGEsIGIKKyNkZWZpbmUgQVNNX09VVFBVVDIoYS4uLikgYQogCiBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZTsKICNpZmRlZiBDT05GSUdfUEFSQVZJUlQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggNGUxYjg4Ny4uOGY4MjE3YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTEsNSArMSwzMDAgQEAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jIGluY2x1ZGUgImF0b21pY18zMi5oIgotI2Vsc2UKLSMgaW5jbHVkZSAiYXRvbWljXzY0LmgiCisjaWZuZGVmIF9BU01fWDg2X0FUT01JQ19ICisjZGVmaW5lIF9BU01fWDg2X0FUT01JQ19ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgorI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+CisKKy8qCisgKiBBdG9taWMgb3BlcmF0aW9ucyB0aGF0IEMgY2FuJ3QgZ3VhcmFudGVlIHVzLiAgVXNlZnVsIGZvcgorICogcmVzb3VyY2UgY291bnRpbmcgZXRjLi4KKyAqLworCisjZGVmaW5lIEFUT01JQ19JTklUKGkpCXsgKGkpIH0KKworLyoqCisgKiBhdG9taWNfcmVhZCAtIHJlYWQgYXRvbWljIHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSByZWFkcyB0aGUgdmFsdWUgb2YgQHYuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19yZWFkKGNvbnN0IGF0b21pY190ICp2KQoreworCXJldHVybiB2LT5jb3VudGVyOworfQorCisvKioKKyAqIGF0b21pY19zZXQgLSBzZXQgYXRvbWljIHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiBAaTogcmVxdWlyZWQgdmFsdWUKKyAqCisgKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEB2IHRvIEBpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3NldChhdG9taWNfdCAqdiwgaW50IGkpCit7CisJdi0+Y291bnRlciA9IGk7Cit9CisKKy8qKgorICogYXRvbWljX2FkZCAtIGFkZCBpbnRlZ2VyIHRvIGF0b21pYyB2YXJpYWJsZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2FkZChpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUxLCUwIgorCQkgICAgIDogIittIiAodi0+Y291bnRlcikKKwkJICAgICA6ICJpciIgKGkpKTsKK30KKworLyoqCisgKiBhdG9taWNfc3ViIC0gc3VidHJhY3QgaW50ZWdlciBmcm9tIGF0b21pYyB2YXJpYWJsZQorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3N1YihpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJsICUxLCUwIgorCQkgICAgIDogIittIiAodi0+Y291bnRlcikKKwkJICAgICA6ICJpciIgKGkpKTsKK30KKworLyoqCisgKiBhdG9taWNfc3ViX2FuZF90ZXN0IC0gc3VidHJhY3QgdmFsdWUgZnJvbSB2YXJpYWJsZSBhbmQgdGVzdCByZXN1bHQKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdiBhbmQgcmV0dXJucworICogdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfc3ViX2FuZF90ZXN0KGludCBpLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YmwgJTIsJTA7IHNldGUgJTEiCisJCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAiaXIiIChpKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYzsKK30KKworLyoqCisgKiBhdG9taWNfaW5jIC0gaW5jcmVtZW50IGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2luYyhhdG9taWNfdCAqdikKK3sKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY2wgJTAiCisJCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSk7Cit9CisKKy8qKgorICogYXRvbWljX2RlYyAtIGRlY3JlbWVudCBhdG9taWMgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19kZWMoYXRvbWljX3QgKnYpCit7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNsICUwIgorCQkgICAgIDogIittIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pY19kZWNfYW5kX3Rlc3QgLSBkZWNyZW1lbnQgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMSBhbmQKKyAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAsIG9yIGZhbHNlIGZvciBhbGwgb3RoZXIKKyAqIGNhc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfZGVjX2FuZF90ZXN0KGF0b21pY190ICp2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjbCAlMDsgc2V0ZSAlMSIKKwkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6IDogIm1lbW9yeSIpOworCXJldHVybiBjICE9IDA7Cit9CisKKy8qKgorICogYXRvbWljX2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxCisgKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19pbmNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgY2hhciBjOworCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNsICUwOyBzZXRlICUxIgorCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQorCQkgICAgIDogOiAibWVtb3J5Iik7CisJcmV0dXJuIGMgIT0gMDsKK30KKworLyoqCisgKiBhdG9taWNfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgdHJ1ZQorICogaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3IgZmFsc2Ugd2hlbgorICogcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX25lZ2F0aXZlKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZGwgJTIsJTA7IHNldHMgJTEiCisJCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAiaXIiIChpKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYzsKK30KKworLyoqCisgKiBhdG9taWNfYWRkX3JldHVybiAtIGFkZCBpbnRlZ2VyIGFuZCByZXR1cm4KKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyBAaSArIEB2CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlpbnQgX19pOworI2lmZGVmIENPTkZJR19NMzg2CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpZiAodW5saWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPD0gMykpCisJCWdvdG8gbm9feGFkZDsKICNlbmRpZgorCS8qIE1vZGVybiA0ODYrIHByb2Nlc3NvciAqLworCV9faSA9IGk7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJ4YWRkbCAlMCwgJTEiCisJCSAgICAgOiAiK3IiIChpKSwgIittIiAodi0+Y291bnRlcikKKwkJICAgICA6IDogIm1lbW9yeSIpOworCXJldHVybiBpICsgX19pOworCisjaWZkZWYgQ09ORklHX00zODYKK25vX3hhZGQ6IC8qIExlZ2FjeSAzODYgcHJvY2Vzc29yICovCisJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2kgPSBhdG9taWNfcmVhZCh2KTsKKwlhdG9taWNfc2V0KHYsIGkgKyBfX2kpOworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIGkgKyBfX2k7CisjZW5kaWYKK30KKworLyoqCisgKiBhdG9taWNfc3ViX3JldHVybiAtIHN1YnRyYWN0IGludGVnZXIgYW5kIHJldHVybgorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zIEB2IC0gQGkKKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQoreworCXJldHVybiBhdG9taWNfYWRkX3JldHVybigtaSwgdik7Cit9CisKKyNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikgIChhdG9taWNfYWRkX3JldHVybigxLCB2KSkKKyNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikgIChhdG9taWNfc3ViX3JldHVybigxLCB2KSkKKworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2NtcHhjaGcoYXRvbWljX3QgKnYsIGludCBvbGQsIGludCBuZXcpCit7CisJcmV0dXJuIGNtcHhjaGcoJnYtPmNvdW50ZXIsIG9sZCwgbmV3KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3hjaGcoYXRvbWljX3QgKnYsIGludCBuZXcpCit7CisJcmV0dXJuIHhjaGcoJnYtPmNvdW50ZXIsIG5ldyk7Cit9CisKKy8qKgorICogYXRvbWljX2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYWxyZWFkeSBhIGdpdmVuIHZhbHVlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gdi4uLgorICogQHU6IC4uLnVubGVzcyB2IGlzIGVxdWFsIHRvIHUuCisgKgorICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIEB2IHdhcyBub3QgYWxyZWFkeSBAdS4KKyAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQoreworCWludCBjLCBvbGQ7CisJYyA9IGF0b21pY19yZWFkKHYpOworCWZvciAoOzspIHsKKwkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKKwkJCWJyZWFrOworCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOworCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKKwkJCWJyZWFrOworCQljID0gb2xkOworCX0KKwlyZXR1cm4gYyAhPSAodSk7Cit9CisKKyNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCisKKy8qKgorICogYXRvbWljX2luY19zaG9ydCAtIGluY3JlbWVudCBvZiBhIHNob3J0IGludGVnZXIKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgaW50CisgKgorICogQXRvbWljYWxseSBhZGRzIDEgdG8gQHYKKyAqIFJldHVybnMgdGhlIG5ldyB2YWx1ZSBvZiBAdQorICovCitzdGF0aWMgaW5saW5lIHNob3J0IGludCBhdG9taWNfaW5jX3Nob3J0KHNob3J0IGludCAqdikKK3sKKwlhc20oTE9DS19QUkVGSVggImFkZHcgJDEsICUwIiA6ICIrbSIgKCp2KSk7CisJcmV0dXJuICp2OworfQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorLyoqCisgKiBhdG9taWNfb3JfbG9uZyAtIE9SIG9mIHR3byBsb25nIGludGVnZXJzCisgKiBAdjE6IHBvaW50ZXIgdG8gdHlwZSB1bnNpZ25lZCBsb25nCisgKiBAdjI6IHBvaW50ZXIgdG8gdHlwZSB1bnNpZ25lZCBsb25nCisgKgorICogQXRvbWljYWxseSBPUnMgQHYxIGFuZCBAdjIKKyAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgT1IKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19vcl9sb25nKHVuc2lnbmVkIGxvbmcgKnYxLCB1bnNpZ25lZCBsb25nIHYyKQoreworCWFzbShMT0NLX1BSRUZJWCAib3JxICUxLCAlMCIgOiAiK20iICgqdjEpIDogInIiICh2MikpOworfQorI2VuZGlmCisKKy8qIFRoZXNlIGFyZSB4ODYtc3BlY2lmaWMsIHVzZWQgYnkgc29tZSBoZWFkZXIgZmlsZXMgKi8KKyNkZWZpbmUgYXRvbWljX2NsZWFyX21hc2sobWFzaywgYWRkcikJCQkJXAorCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYW5kbCAlMCwlMSIJCQlcCisJCSAgICAgOiA6ICJyIiAofihtYXNrKSksICJtIiAoKihhZGRyKSkgOiAibWVtb3J5IikKKworI2RlZmluZSBhdG9taWNfc2V0X21hc2sobWFzaywgYWRkcikJCQkJXAorCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAib3JsICUwLCUxIgkJCVwKKwkJICAgICA6IDogInIiICgodW5zaWduZWQpKG1hc2spKSwgIm0iICgqKGFkZHIpKQlcCisJCSAgICAgOiAibWVtb3J5IikKKworLyogQXRvbWljIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc2VyaWFsaXppbmcgb24geDg2ICovCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGluY2x1ZGUgImF0b21pYzY0XzMyLmgiCisjZWxzZQorIyBpbmNsdWRlICJhdG9taWM2NF82NC5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdG9taWMtbG9uZy5oPgorI2VuZGlmIC8qIF9BU01fWDg2X0FUT01JQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWM2NF8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljNjRfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzAyN2JmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljNjRfMzIuaApAQCAtMCwwICsxLDE2MCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9BVE9NSUM2NF8zMl9ICisjZGVmaW5lIF9BU01fWDg2X0FUT01JQzY0XzMyX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisvLyNpbmNsdWRlIDxhc20vY21weGNoZy5oPgorCisvKiBBbiA2NGJpdCBhdG9taWMgdHlwZSAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdTY0IF9fYWxpZ25lZCg4KSBjb3VudGVyOworfSBhdG9taWM2NF90OworCisjZGVmaW5lIEFUT01JQzY0X0lOSVQodmFsKQl7ICh2YWwpIH0KKworZXh0ZXJuIHU2NCBhdG9taWM2NF9jbXB4Y2hnKGF0b21pYzY0X3QgKnB0ciwgdTY0IG9sZF92YWwsIHU2NCBuZXdfdmFsKTsKKworLyoqCisgKiBhdG9taWM2NF94Y2hnIC0geGNoZyBhdG9taWM2NCB2YXJpYWJsZQorICogQHB0cjogICAgICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICogQG5ld192YWw6ICB2YWx1ZSB0byBhc3NpZ24KKyAqCisgKiBBdG9taWNhbGx5IHhjaGdzIHRoZSB2YWx1ZSBvZiBAcHRyIHRvIEBuZXdfdmFsIGFuZCByZXR1cm5zCisgKiB0aGUgb2xkIHZhbHVlLgorICovCitleHRlcm4gdTY0IGF0b21pYzY0X3hjaGcoYXRvbWljNjRfdCAqcHRyLCB1NjQgbmV3X3ZhbCk7CisKKy8qKgorICogYXRvbWljNjRfc2V0IC0gc2V0IGF0b21pYzY0IHZhcmlhYmxlCisgKiBAcHRyOiAgICAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKiBAbmV3X3ZhbDogIHZhbHVlIHRvIGFzc2lnbgorICoKKyAqIEF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgQHB0ciB0byBAbmV3X3ZhbC4KKyAqLworZXh0ZXJuIHZvaWQgYXRvbWljNjRfc2V0KGF0b21pYzY0X3QgKnB0ciwgdTY0IG5ld192YWwpOworCisvKioKKyAqIGF0b21pYzY0X3JlYWQgLSByZWFkIGF0b21pYzY0IHZhcmlhYmxlCisgKiBAcHRyOiAgICAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSByZWFkcyB0aGUgdmFsdWUgb2YgQHB0ciBhbmQgcmV0dXJucyBpdC4KKyAqLworc3RhdGljIGlubGluZSB1NjQgYXRvbWljNjRfcmVhZChhdG9taWM2NF90ICpwdHIpCit7CisJdTY0IHJlczsKKworCS8qCisJICogTm90ZSwgd2UgaW5saW5lIHRoaXMgYXRvbWljNjRfdCBwcmltaXRpdmUgYmVjYXVzZQorCSAqIGl0IG9ubHkgY2xvYmJlcnMgRUFYL0VEWCBhbmQgbGVhdmVzIHRoZSBvdGhlcnMKKwkgKiB1bnRvdWNoZWQuIFdlIGFsc28gKHNvbWV3aGF0IHN1YnRseSkgcmVseSBvbiB0aGUKKwkgKiBmYWN0IHRoYXQgY21weGNoZzhiIHJldHVybnMgdGhlIGN1cnJlbnQgNjQtYml0IHZhbHVlCisJICogb2YgdGhlIG1lbW9yeSBsb2NhdGlvbiB3ZSBhcmUgdG91Y2hpbmc6CisJICovCisJYXNtIHZvbGF0aWxlKAorCQkibW92ICUlZWJ4LCAlJWVheFxuXHQiCisJCSJtb3YgJSVlY3gsICUlZWR4XG5cdCIKKwkJTE9DS19QUkVGSVggImNtcHhjaGc4YiAlMVxuIgorCQkJOiAiPSZBIiAocmVzKQorCQkJOiAibSIgKCpwdHIpCisJCSk7CisKKwlyZXR1cm4gcmVzOworfQorCitleHRlcm4gdTY0IGF0b21pYzY0X3JlYWQoYXRvbWljNjRfdCAqcHRyKTsKKworLyoqCisgKiBhdG9taWM2NF9hZGRfcmV0dXJuIC0gYWRkIGFuZCByZXR1cm4KKyAqIEBkZWx0YTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEBwdHI6ICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGRlbHRhIHRvIEBwdHIgYW5kIHJldHVybnMgQGRlbHRhICsgKkBwdHIKKyAqLworZXh0ZXJuIHU2NCBhdG9taWM2NF9hZGRfcmV0dXJuKHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKKworLyoKKyAqIE90aGVyIHZhcmlhbnRzIHdpdGggZGlmZmVyZW50IGFyaXRobWV0aWMgb3BlcmF0b3JzOgorICovCitleHRlcm4gdTY0IGF0b21pYzY0X3N1Yl9yZXR1cm4odTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOworZXh0ZXJuIHU2NCBhdG9taWM2NF9pbmNfcmV0dXJuKGF0b21pYzY0X3QgKnB0cik7CitleHRlcm4gdTY0IGF0b21pYzY0X2RlY19yZXR1cm4oYXRvbWljNjRfdCAqcHRyKTsKKworLyoqCisgKiBhdG9taWM2NF9hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWM2NCB2YXJpYWJsZQorICogQGRlbHRhOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICogQHB0cjogICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAZGVsdGEgdG8gQHB0ci4KKyAqLworZXh0ZXJuIHZvaWQgYXRvbWljNjRfYWRkKHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKKworLyoqCisgKiBhdG9taWM2NF9zdWIgLSBzdWJ0cmFjdCB0aGUgYXRvbWljNjQgdmFyaWFibGUKKyAqIEBkZWx0YTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHB0cjogICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBkZWx0YSBmcm9tIEBwdHIuCisgKi8KK2V4dGVybiB2b2lkIGF0b21pYzY0X3N1Yih1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7CisKKy8qKgorICogYXRvbWljNjRfc3ViX2FuZF90ZXN0IC0gc3VidHJhY3QgdmFsdWUgZnJvbSB2YXJpYWJsZSBhbmQgdGVzdCByZXN1bHQKKyAqIEBkZWx0YTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHB0cjogICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBkZWx0YSBmcm9tIEBwdHIgYW5kIHJldHVybnMKKyAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCisgKiBvdGhlciBjYXNlcy4KKyAqLworZXh0ZXJuIGludCBhdG9taWM2NF9zdWJfYW5kX3Rlc3QodTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOworCisvKioKKyAqIGF0b21pYzY0X2luYyAtIGluY3JlbWVudCBhdG9taWM2NCB2YXJpYWJsZQorICogQHB0cjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHB0ciBieSAxLgorICovCitleHRlcm4gdm9pZCBhdG9taWM2NF9pbmMoYXRvbWljNjRfdCAqcHRyKTsKKworLyoqCisgKiBhdG9taWM2NF9kZWMgLSBkZWNyZW1lbnQgYXRvbWljNjQgdmFyaWFibGUKKyAqIEBwdHI6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEBwdHIgYnkgMS4KKyAqLworZXh0ZXJuIHZvaWQgYXRvbWljNjRfZGVjKGF0b21pYzY0X3QgKnB0cik7CisKKy8qKgorICogYXRvbWljNjRfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0CisgKiBAcHRyOiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAcHRyIGJ5IDEgYW5kCisgKiByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyAwLCBvciBmYWxzZSBmb3IgYWxsIG90aGVyCisgKiBjYXNlcy4KKyAqLworZXh0ZXJuIGludCBhdG9taWM2NF9kZWNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqcHRyKTsKKworLyoqCisgKiBhdG9taWM2NF9pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKKyAqIEBwdHI6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEBwdHIgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCitleHRlcm4gaW50IGF0b21pYzY0X2luY19hbmRfdGVzdChhdG9taWM2NF90ICpwdHIpOworCisvKioKKyAqIGF0b21pYzY0X2FkZF9uZWdhdGl2ZSAtIGFkZCBhbmQgdGVzdCBpZiBuZWdhdGl2ZQorICogQGRlbHRhOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICogQHB0cjogICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAZGVsdGEgdG8gQHB0ciBhbmQgcmV0dXJucyB0cnVlCisgKiBpZiB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvciBmYWxzZSB3aGVuCisgKiByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uCisgKi8KK2V4dGVybiBpbnQgYXRvbWljNjRfYWRkX25lZ2F0aXZlKHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKKworI2VuZGlmIC8qIF9BU01fWDg2X0FUT01JQzY0XzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYzY0XzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWM2NF82NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYzViNDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWM2NF82NC5oCkBAIC0wLDAgKzEsMjI0IEBACisjaWZuZGVmIF9BU01fWDg2X0FUT01JQzY0XzY0X0gKKyNkZWZpbmUgX0FTTV9YODZfQVRPTUlDNjRfNjRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KKyNpbmNsdWRlIDxhc20vY21weGNoZy5oPgorCisvKiBUaGUgNjQtYml0IGF0b21pYyB0eXBlICovCisKKyNkZWZpbmUgQVRPTUlDNjRfSU5JVChpKQl7IChpKSB9CisKKy8qKgorICogYXRvbWljNjRfcmVhZCAtIHJlYWQgYXRvbWljNjQgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgcmVhZHMgdGhlIHZhbHVlIG9mIEB2LgorICogRG9lc24ndCBpbXBseSBhIHJlYWQgbWVtb3J5IGJhcnJpZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWM2NF9yZWFkKGNvbnN0IGF0b21pYzY0X3QgKnYpCit7CisJcmV0dXJuIHYtPmNvdW50ZXI7Cit9CisKKy8qKgorICogYXRvbWljNjRfc2V0IC0gc2V0IGF0b21pYzY0IHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqIEBpOiByZXF1aXJlZCB2YWx1ZQorICoKKyAqIEF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgQHYgdG8gQGkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9zZXQoYXRvbWljNjRfdCAqdiwgbG9uZyBpKQoreworCXYtPmNvdW50ZXIgPSBpOworfQorCisvKioKKyAqIGF0b21pYzY0X2FkZCAtIGFkZCBpbnRlZ2VyIHRvIGF0b21pYzY0IHZhcmlhYmxlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X2FkZChsb25nIGksIGF0b21pYzY0X3QgKnYpCit7CisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRxICUxLCUwIgorCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKKwkJICAgICA6ICJlciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKK30KKworLyoqCisgKiBhdG9taWM2NF9zdWIgLSBzdWJ0cmFjdCB0aGUgYXRvbWljNjQgdmFyaWFibGUKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0CisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfc3ViKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKK3sKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YnEgJTEsJTAiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQorCQkgICAgIDogImVyIiAoaSksICJtIiAodi0+Y291bnRlcikpOworfQorCisvKioKKyAqIGF0b21pYzY0X3N1Yl9hbmRfdGVzdCAtIHN1YnRyYWN0IHZhbHVlIGZyb20gdmFyaWFibGUgYW5kIHRlc3QgcmVzdWx0CisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdiBhbmQgcmV0dXJucworICogdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCitzdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9zdWJfYW5kX3Rlc3QobG9uZyBpLCBhdG9taWM2NF90ICp2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VicSAlMiwlMDsgc2V0ZSAlMSIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6ICJlciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOworCXJldHVybiBjOworfQorCisvKioKKyAqIGF0b21pYzY0X2luYyAtIGluY3JlbWVudCBhdG9taWM2NCB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9pbmMoYXRvbWljNjRfdCAqdikKK3sKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY3EgJTAiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQorCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSk7Cit9CisKKy8qKgorICogYXRvbWljNjRfZGVjIC0gZGVjcmVtZW50IGF0b21pYzY0IHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X2RlYyhhdG9taWM2NF90ICp2KQoreworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjcSAlMCIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCisJCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpKTsKK30KKworLyoqCisgKiBhdG9taWM2NF9kZWNfYW5kX3Rlc3QgLSBkZWNyZW1lbnQgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxIGFuZAorICogcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgMCwgb3IgZmFsc2UgZm9yIGFsbCBvdGhlcgorICogY2FzZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2RlY19hbmRfdGVzdChhdG9taWM2NF90ICp2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjcSAlMDsgc2V0ZSAlMSIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6ICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CisJcmV0dXJuIGMgIT0gMDsKK30KKworLyoqCisgKiBhdG9taWM2NF9pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxCisgKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2luY19hbmRfdGVzdChhdG9taWM2NF90ICp2KQoreworCXVuc2lnbmVkIGNoYXIgYzsKKworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jcSAlMDsgc2V0ZSAlMSIKKwkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKKwkJICAgICA6ICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CisJcmV0dXJuIGMgIT0gMDsKK30KKworLyoqCisgKiBhdG9taWM2NF9hZGRfbmVnYXRpdmUgLSBhZGQgYW5kIHRlc3QgaWYgbmVnYXRpdmUKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIHRydWUKKyAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KKyAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfYWRkX25lZ2F0aXZlKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZHEgJTIsJTA7IHNldHMgJTEiCisJCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCisJCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gYzsKK30KKworLyoqCisgKiBhdG9taWM2NF9hZGRfcmV0dXJuIC0gYWRkIGFuZCByZXR1cm4KKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIEBpICsgQHYKKyAqLworc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X2FkZF9yZXR1cm4obG9uZyBpLCBhdG9taWM2NF90ICp2KQoreworCWxvbmcgX19pID0gaTsKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInhhZGRxICUwLCAlMTsiCisJCSAgICAgOiAiK3IiIChpKSwgIittIiAodi0+Y291bnRlcikKKwkJICAgICA6IDogIm1lbW9yeSIpOworCXJldHVybiBpICsgX19pOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfc3ViX3JldHVybihsb25nIGksIGF0b21pYzY0X3QgKnYpCit7CisJcmV0dXJuIGF0b21pYzY0X2FkZF9yZXR1cm4oLWksIHYpOworfQorCisjZGVmaW5lIGF0b21pYzY0X2luY19yZXR1cm4odikgIChhdG9taWM2NF9hZGRfcmV0dXJuKDEsICh2KSkpCisjZGVmaW5lIGF0b21pYzY0X2RlY19yZXR1cm4odikgIChhdG9taWM2NF9zdWJfcmV0dXJuKDEsICh2KSkpCisKK3N0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWM2NF9jbXB4Y2hnKGF0b21pYzY0X3QgKnYsIGxvbmcgb2xkLCBsb25nIG5ldykKK3sKKwlyZXR1cm4gY21weGNoZygmdi0+Y291bnRlciwgb2xkLCBuZXcpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfeGNoZyhhdG9taWM2NF90ICp2LCBsb25nIG5ldykKK3sKKwlyZXR1cm4geGNoZygmdi0+Y291bnRlciwgbmV3KTsKK30KKworLyoqCisgKiBhdG9taWM2NF9hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGEgZ2l2ZW4gdmFsdWUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljNjRfdAorICogQGE6IHRoZSBhbW91bnQgdG8gYWRkIHRvIHYuLi4KKyAqIEB1OiAuLi51bmxlc3MgdiBpcyBlcXVhbCB0byB1LgorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAYSB0byBAdiwgc28gbG9uZyBhcyBpdCB3YXMgbm90IEB1LgorICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2FkZF91bmxlc3MoYXRvbWljNjRfdCAqdiwgbG9uZyBhLCBsb25nIHUpCit7CisJbG9uZyBjLCBvbGQ7CisJYyA9IGF0b21pYzY0X3JlYWQodik7CisJZm9yICg7OykgeworCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQorCQkJYnJlYWs7CisJCW9sZCA9IGF0b21pYzY0X2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCisJCQlicmVhazsKKwkJYyA9IG9sZDsKKwl9CisJcmV0dXJuIGMgIT0gKHUpOworfQorCisjZGVmaW5lIGF0b21pYzY0X2luY19ub3RfemVybyh2KSBhdG9taWM2NF9hZGRfdW5sZXNzKCh2KSwgMSwgMCkKKworI2VuZGlmIC8qIF9BU01fWDg2X0FUT01JQzY0XzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pY18zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljXzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNWE2NjcuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXRvbWljXzMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MTUgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1g4Nl9BVE9NSUNfMzJfSAotI2RlZmluZSBfQVNNX1g4Nl9BVE9NSUNfMzJfSAotCi0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vY21weGNoZy5oPgotCi0vKgotICogQXRvbWljIG9wZXJhdGlvbnMgdGhhdCBDIGNhbid0IGd1YXJhbnRlZSB1cy4gIFVzZWZ1bCBmb3IKLSAqIHJlc291cmNlIGNvdW50aW5nIGV0Yy4uCi0gKi8KLQotI2RlZmluZSBBVE9NSUNfSU5JVChpKQl7IChpKSB9Ci0KLS8qKgotICogYXRvbWljX3JlYWQgLSByZWFkIGF0b21pYyB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgcmVhZHMgdGhlIHZhbHVlIG9mIEB2LgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfcmVhZChjb25zdCBhdG9taWNfdCAqdikKLXsKLQlyZXR1cm4gdi0+Y291bnRlcjsKLX0KLQotLyoqCi0gKiBhdG9taWNfc2V0IC0gc2V0IGF0b21pYyB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogQGk6IHJlcXVpcmVkIHZhbHVlCi0gKgotICogQXRvbWljYWxseSBzZXRzIHRoZSB2YWx1ZSBvZiBAdiB0byBAaS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19zZXQoYXRvbWljX3QgKnYsIGludCBpKQotewotCXYtPmNvdW50ZXIgPSBpOwotfQotCi0vKioKLSAqIGF0b21pY19hZGQgLSBhZGQgaW50ZWdlciB0byBhdG9taWMgdmFyaWFibGUKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkbCAlMSwlMCIKLQkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiAiaXIiIChpKSk7Ci19Ci0KLS8qKgotICogYXRvbWljX3N1YiAtIHN1YnRyYWN0IGludGVnZXIgZnJvbSBhdG9taWMgdmFyaWFibGUKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0Ci0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19zdWIoaW50IGksIGF0b21pY190ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VibCAlMSwlMCIKLQkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiAiaXIiIChpKSk7Ci19Ci0KLS8qKgotICogYXRvbWljX3N1Yl9hbmRfdGVzdCAtIHN1YnRyYWN0IHZhbHVlIGZyb20gdmFyaWFibGUgYW5kIHRlc3QgcmVzdWx0Ci0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMKLSAqIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3N1Yl9hbmRfdGVzdChpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJzdWJsICUyLCUwOyBzZXRlICUxIgotCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogImlyIiAoaSkgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGM7Ci19Ci0KLS8qKgotICogYXRvbWljX2luYyAtIGluY3JlbWVudCBhdG9taWMgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19pbmMoYXRvbWljX3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJpbmNsICUwIgotCQkgICAgIDogIittIiAodi0+Y291bnRlcikpOwotfQotCi0vKioKLSAqIGF0b21pY19kZWMgLSBkZWNyZW1lbnQgYXRvbWljIHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfZGVjKGF0b21pY190ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjbCAlMCIKLQkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWNfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0Ci0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEgYW5kCi0gKiByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyAwLCBvciBmYWxzZSBmb3IgYWxsIG90aGVyCi0gKiBjYXNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2RlY19hbmRfdGVzdChhdG9taWNfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY2wgJTA7IHNldGUgJTEiCi0JCSAgICAgOiAiK20iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYyAhPSAwOwotfQotCi0vKioKLSAqIGF0b21pY19pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQotICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfaW5jX2FuZF90ZXN0KGF0b21pY190ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jbCAlMDsgc2V0ZSAlMSIKLQkJICAgICA6ICIrbSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6IDogIm1lbW9yeSIpOwotCXJldHVybiBjICE9IDA7Ci19Ci0KLS8qKgotICogYXRvbWljX2FkZF9uZWdhdGl2ZSAtIGFkZCBhbmQgdGVzdCBpZiBuZWdhdGl2ZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKgotICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIHRydWUKLSAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KLSAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9uZWdhdGl2ZShpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUyLCUwOyBzZXRzICUxIgotCQkgICAgIDogIittIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogImlyIiAoaSkgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGM7Ci19Ci0KLS8qKgotICogYXRvbWljX2FkZF9yZXR1cm4gLSBhZGQgaW50ZWdlciBhbmQgcmV0dXJuCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgQGkgKyBAdgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JaW50IF9faTsKLSNpZmRlZiBDT05GSUdfTTM4NgotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaWYgKHVubGlrZWx5KGJvb3RfY3B1X2RhdGEueDg2IDw9IDMpKQotCQlnb3RvIG5vX3hhZGQ7Ci0jZW5kaWYKLQkvKiBNb2Rlcm4gNDg2KyBwcm9jZXNzb3IgKi8KLQlfX2kgPSBpOwotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAieGFkZGwgJTAsICUxIgotCQkgICAgIDogIityIiAoaSksICIrbSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gaSArIF9faTsKLQotI2lmZGVmIENPTkZJR19NMzg2Ci1ub194YWRkOiAvKiBMZWdhY3kgMzg2IHByb2Nlc3NvciAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX2kgPSBhdG9taWNfcmVhZCh2KTsKLQlhdG9taWNfc2V0KHYsIGkgKyBfX2kpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4gaSArIF9faTsKLSNlbmRpZgotfQotCi0vKioKLSAqIGF0b21pY19zdWJfcmV0dXJuIC0gc3VidHJhY3QgaW50ZWdlciBhbmQgcmV0dXJuCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAotICoKLSAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMgQHYgLSBAaQotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfc3ViX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JcmV0dXJuIGF0b21pY19hZGRfcmV0dXJuKC1pLCB2KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2NtcHhjaGcoYXRvbWljX3QgKnYsIGludCBvbGQsIGludCBuZXcpCi17Ci0JcmV0dXJuIGNtcHhjaGcoJnYtPmNvdW50ZXIsIG9sZCwgbmV3KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3hjaGcoYXRvbWljX3QgKnYsIGludCBuZXcpCi17Ci0JcmV0dXJuIHhjaGcoJnYtPmNvdW50ZXIsIG5ldyk7Ci19Ci0KLS8qKgotICogYXRvbWljX2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYWxyZWFkeSBhIGdpdmVuIHZhbHVlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gdi4uLgotICogQHU6IC4uLnVubGVzcyB2IGlzIGVxdWFsIHRvIHUuCi0gKgotICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIEB2IHdhcyBub3QgYWxyZWFkeSBAdS4KLSAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQotewotCWludCBjLCBvbGQ7Ci0JYyA9IGF0b21pY19yZWFkKHYpOwotCWZvciAoOzspIHsKLQkJaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkKLQkJCWJyZWFrOwotCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOwotCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKLQkJCWJyZWFrOwotCQljID0gb2xkOwotCX0KLQlyZXR1cm4gYyAhPSAodSk7Ci19Ci0KLSNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCi0KLSNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikgIChhdG9taWNfYWRkX3JldHVybigxLCB2KSkKLSNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikgIChhdG9taWNfc3ViX3JldHVybigxLCB2KSkKLQotLyogVGhlc2UgYXJlIHg4Ni1zcGVjaWZpYywgdXNlZCBieSBzb21lIGhlYWRlciBmaWxlcyAqLwotI2RlZmluZSBhdG9taWNfY2xlYXJfbWFzayhtYXNrLCBhZGRyKQkJCQlcCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhbmRsICUwLCUxIgkJCVwKLQkJICAgICA6IDogInIiICh+KG1hc2spKSwgIm0iICgqKGFkZHIpKSA6ICJtZW1vcnkiKQotCi0jZGVmaW5lIGF0b21pY19zZXRfbWFzayhtYXNrLCBhZGRyKQkJCQlcCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJvcmwgJTAsJTEiCQkJCVwKLQkJICAgICA6IDogInIiIChtYXNrKSwgIm0iICgqKGFkZHIpKSA6ICJtZW1vcnkiKQotCi0vKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyBvbiB4ODYgKi8KLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpCWJhcnJpZXIoKQotI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLQotLyogQW4gNjRiaXQgYXRvbWljIHR5cGUgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXU2NCBfX2FsaWduZWQoOCkgY291bnRlcjsKLX0gYXRvbWljNjRfdDsKLQotI2RlZmluZSBBVE9NSUM2NF9JTklUKHZhbCkJeyAodmFsKSB9Ci0KLWV4dGVybiB1NjQgYXRvbWljNjRfY21weGNoZyhhdG9taWM2NF90ICpwdHIsIHU2NCBvbGRfdmFsLCB1NjQgbmV3X3ZhbCk7Ci0KLS8qKgotICogYXRvbWljNjRfeGNoZyAtIHhjaGcgYXRvbWljNjQgdmFyaWFibGUKLSAqIEBwdHI6ICAgICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqIEBuZXdfdmFsOiAgdmFsdWUgdG8gYXNzaWduCi0gKgotICogQXRvbWljYWxseSB4Y2hncyB0aGUgdmFsdWUgb2YgQHB0ciB0byBAbmV3X3ZhbCBhbmQgcmV0dXJucwotICogdGhlIG9sZCB2YWx1ZS4KLSAqLwotZXh0ZXJuIHU2NCBhdG9taWM2NF94Y2hnKGF0b21pYzY0X3QgKnB0ciwgdTY0IG5ld192YWwpOwotCi0vKioKLSAqIGF0b21pYzY0X3NldCAtIHNldCBhdG9taWM2NCB2YXJpYWJsZQotICogQHB0cjogICAgICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICogQG5ld192YWw6ICB2YWx1ZSB0byBhc3NpZ24KLSAqCi0gKiBBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIEBwdHIgdG8gQG5ld192YWwuCi0gKi8KLWV4dGVybiB2b2lkIGF0b21pYzY0X3NldChhdG9taWM2NF90ICpwdHIsIHU2NCBuZXdfdmFsKTsKLQotLyoqCi0gKiBhdG9taWM2NF9yZWFkIC0gcmVhZCBhdG9taWM2NCB2YXJpYWJsZQotICogQHB0cjogICAgICBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgcmVhZHMgdGhlIHZhbHVlIG9mIEBwdHIgYW5kIHJldHVybnMgaXQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTY0IGF0b21pYzY0X3JlYWQoYXRvbWljNjRfdCAqcHRyKQotewotCXU2NCByZXM7Ci0KLQkvKgotCSAqIE5vdGUsIHdlIGlubGluZSB0aGlzIGF0b21pYzY0X3QgcHJpbWl0aXZlIGJlY2F1c2UKLQkgKiBpdCBvbmx5IGNsb2JiZXJzIEVBWC9FRFggYW5kIGxlYXZlcyB0aGUgb3RoZXJzCi0JICogdW50b3VjaGVkLiBXZSBhbHNvIChzb21ld2hhdCBzdWJ0bHkpIHJlbHkgb24gdGhlCi0JICogZmFjdCB0aGF0IGNtcHhjaGc4YiByZXR1cm5zIHRoZSBjdXJyZW50IDY0LWJpdCB2YWx1ZQotCSAqIG9mIHRoZSBtZW1vcnkgbG9jYXRpb24gd2UgYXJlIHRvdWNoaW5nOgotCSAqLwotCWFzbSB2b2xhdGlsZSgKLQkJIm1vdiAlJWVieCwgJSVlYXhcblx0IgotCQkibW92ICUlZWN4LCAlJWVkeFxuXHQiCi0JCUxPQ0tfUFJFRklYICJjbXB4Y2hnOGIgJTFcbiIKLQkJCTogIj0mQSIgKHJlcykKLQkJCTogIm0iICgqcHRyKQotCQkpOwotCi0JcmV0dXJuIHJlczsKLX0KLQotZXh0ZXJuIHU2NCBhdG9taWM2NF9yZWFkKGF0b21pYzY0X3QgKnB0cik7Ci0KLS8qKgotICogYXRvbWljNjRfYWRkX3JldHVybiAtIGFkZCBhbmQgcmV0dXJuCi0gKiBAZGVsdGE6IGludGVnZXIgdmFsdWUgdG8gYWRkCi0gKiBAcHRyOiAgIHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBkZWx0YSB0byBAcHRyIGFuZCByZXR1cm5zIEBkZWx0YSArICpAcHRyCi0gKi8KLWV4dGVybiB1NjQgYXRvbWljNjRfYWRkX3JldHVybih1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7Ci0KLS8qCi0gKiBPdGhlciB2YXJpYW50cyB3aXRoIGRpZmZlcmVudCBhcml0aG1ldGljIG9wZXJhdG9yczoKLSAqLwotZXh0ZXJuIHU2NCBhdG9taWM2NF9zdWJfcmV0dXJuKHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKLWV4dGVybiB1NjQgYXRvbWljNjRfaW5jX3JldHVybihhdG9taWM2NF90ICpwdHIpOwotZXh0ZXJuIHU2NCBhdG9taWM2NF9kZWNfcmV0dXJuKGF0b21pYzY0X3QgKnB0cik7Ci0KLS8qKgotICogYXRvbWljNjRfYWRkIC0gYWRkIGludGVnZXIgdG8gYXRvbWljNjQgdmFyaWFibGUKLSAqIEBkZWx0YTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqIEBwdHI6ICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGRlbHRhIHRvIEBwdHIuCi0gKi8KLWV4dGVybiB2b2lkIGF0b21pYzY0X2FkZCh1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7Ci0KLS8qKgotICogYXRvbWljNjRfc3ViIC0gc3VidHJhY3QgdGhlIGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAZGVsdGE6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqIEBwdHI6ICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAZGVsdGEgZnJvbSBAcHRyLgotICovCi1leHRlcm4gdm9pZCBhdG9taWM2NF9zdWIodTY0IGRlbHRhLCBhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X3N1Yl9hbmRfdGVzdCAtIHN1YnRyYWN0IHZhbHVlIGZyb20gdmFyaWFibGUgYW5kIHRlc3QgcmVzdWx0Ci0gKiBAZGVsdGE6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqIEBwdHI6ICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAZGVsdGEgZnJvbSBAcHRyIGFuZCByZXR1cm5zCi0gKiB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAotICogb3RoZXIgY2FzZXMuCi0gKi8KLWV4dGVybiBpbnQgYXRvbWljNjRfc3ViX2FuZF90ZXN0KHU2NCBkZWx0YSwgYXRvbWljNjRfdCAqcHRyKTsKLQotLyoqCi0gKiBhdG9taWM2NF9pbmMgLSBpbmNyZW1lbnQgYXRvbWljNjQgdmFyaWFibGUKLSAqIEBwdHI6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEBwdHIgYnkgMS4KLSAqLwotZXh0ZXJuIHZvaWQgYXRvbWljNjRfaW5jKGF0b21pYzY0X3QgKnB0cik7Ci0KLS8qKgotICogYXRvbWljNjRfZGVjIC0gZGVjcmVtZW50IGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAcHRyOiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAcHRyIGJ5IDEuCi0gKi8KLWV4dGVybiB2b2lkIGF0b21pYzY0X2RlYyhhdG9taWM2NF90ICpwdHIpOwotCi0vKioKLSAqIGF0b21pYzY0X2RlY19hbmRfdGVzdCAtIGRlY3JlbWVudCBhbmQgdGVzdAotICogQHB0cjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHB0ciBieSAxIGFuZAotICogcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgMCwgb3IgZmFsc2UgZm9yIGFsbCBvdGhlcgotICogY2FzZXMuCi0gKi8KLWV4dGVybiBpbnQgYXRvbWljNjRfZGVjX2FuZF90ZXN0KGF0b21pYzY0X3QgKnB0cik7Ci0KLS8qKgotICogYXRvbWljNjRfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0Ci0gKiBAcHRyOiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAcHRyIGJ5IDEKLSAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLCBvciBmYWxzZSBmb3IgYWxsCi0gKiBvdGhlciBjYXNlcy4KLSAqLwotZXh0ZXJuIGludCBhdG9taWM2NF9pbmNfYW5kX3Rlc3QoYXRvbWljNjRfdCAqcHRyKTsKLQotLyoqCi0gKiBhdG9taWM2NF9hZGRfbmVnYXRpdmUgLSBhZGQgYW5kIHRlc3QgaWYgbmVnYXRpdmUKLSAqIEBkZWx0YTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqIEBwdHI6ICAgcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGRlbHRhIHRvIEBwdHIgYW5kIHJldHVybnMgdHJ1ZQotICogaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3IgZmFsc2Ugd2hlbgotICogcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgotICovCi1leHRlcm4gaW50IGF0b21pYzY0X2FkZF9uZWdhdGl2ZSh1NjQgZGVsdGEsIGF0b21pYzY0X3QgKnB0cik7Ci0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdG9taWMtbG9uZy5oPgotI2VuZGlmIC8qIF9BU01fWDg2X0FUT01JQ18zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hdG9taWNfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pY182NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjA1ZGMyLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pY182NC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDg1ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfQVRPTUlDXzY0X0gKLSNkZWZpbmUgX0FTTV9YODZfQVRPTUlDXzY0X0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+Ci0jaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KLQotLyoKLSAqIEF0b21pYyBvcGVyYXRpb25zIHRoYXQgQyBjYW4ndCBndWFyYW50ZWUgdXMuICBVc2VmdWwgZm9yCi0gKiByZXNvdXJjZSBjb3VudGluZyBldGMuLgotICovCi0KLSNkZWZpbmUgQVRPTUlDX0lOSVQoaSkJeyAoaSkgfQotCi0vKioKLSAqIGF0b21pY19yZWFkIC0gcmVhZCBhdG9taWMgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IHJlYWRzIHRoZSB2YWx1ZSBvZiBAdi4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3JlYWQoY29uc3QgYXRvbWljX3QgKnYpCi17Ci0JcmV0dXJuIHYtPmNvdW50ZXI7Ci19Ci0KLS8qKgotICogYXRvbWljX3NldCAtIHNldCBhdG9taWMgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqIEBpOiByZXF1aXJlZCB2YWx1ZQotICoKLSAqIEF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgQHYgdG8gQGkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc2V0KGF0b21pY190ICp2LCBpbnQgaSkKLXsKLQl2LT5jb3VudGVyID0gaTsKLX0KLQotLyoqCi0gKiBhdG9taWNfYWRkIC0gYWRkIGludGVnZXIgdG8gYXRvbWljIHZhcmlhYmxlCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfYWRkKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZGwgJTEsJTAiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQotCQkgICAgIDogImlyIiAoaSksICJtIiAodi0+Y291bnRlcikpOwotfQotCi0vKioKLSAqIGF0b21pY19zdWIgLSBzdWJ0cmFjdCB0aGUgYXRvbWljIHZhcmlhYmxlCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc3ViKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YmwgJTEsJTAiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQotCQkgICAgIDogImlyIiAoaSksICJtIiAodi0+Y291bnRlcikpOwotfQotCi0vKioKLSAqIGF0b21pY19zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAotICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zCi0gKiB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAotICogb3RoZXIgY2FzZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19zdWJfYW5kX3Rlc3QoaW50IGksIGF0b21pY190ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VibCAlMiwlMDsgc2V0ZSAlMSIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6ICJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwotCXJldHVybiBjOwotfQotCi0vKioKLSAqIGF0b21pY19pbmMgLSBpbmNyZW1lbnQgYXRvbWljIHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKgotICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfaW5jKGF0b21pY190ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jbCAlMCIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWNfZGVjIC0gZGVjcmVtZW50IGF0b21pYyB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2RlYyhhdG9taWNfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImRlY2wgJTAiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQotCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljX2RlY19hbmRfdGVzdCAtIGRlY3JlbWVudCBhbmQgdGVzdAotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICoKLSAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxIGFuZAotICogcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgMCwgb3IgZmFsc2UgZm9yIGFsbCBvdGhlcgotICogY2FzZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19kZWNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCi17Ci0JdW5zaWduZWQgY2hhciBjOwotCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJkZWNsICUwOyBzZXRlICUxIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQotCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYyAhPSAwOwotfQotCi0vKioKLSAqIGF0b21pY19pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQotICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfaW5jX2FuZF90ZXN0KGF0b21pY190ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jbCAlMDsgc2V0ZSAlMSIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6ICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGMgIT0gMDsKLX0KLQotLyoqCi0gKiBhdG9taWNfYWRkX25lZ2F0aXZlIC0gYWRkIGFuZCB0ZXN0IGlmIG5lZ2F0aXZlCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgdHJ1ZQotICogaWYgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgb3IgZmFsc2Ugd2hlbgotICogcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX25lZ2F0aXZlKGludCBpLCBhdG9taWNfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZGwgJTIsJTA7IHNldHMgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYzsKLX0KLQotLyoqCi0gKiBhdG9taWNfYWRkX3JldHVybiAtIGFkZCBhbmQgcmV0dXJuCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKLSAqCi0gKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYgYW5kIHJldHVybnMgQGkgKyBAdgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JaW50IF9faSA9IGk7Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJ4YWRkbCAlMCwgJTEiCi0JCSAgICAgOiAiK3IiIChpKSwgIittIiAodi0+Y291bnRlcikKLQkJICAgICA6IDogIm1lbW9yeSIpOwotCXJldHVybiBpICsgX19pOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWNfc3ViX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCi17Ci0JcmV0dXJuIGF0b21pY19hZGRfcmV0dXJuKC1pLCB2KTsKLX0KLQotI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KSAgKGF0b21pY19hZGRfcmV0dXJuKDEsIHYpKQotI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KSAgKGF0b21pY19zdWJfcmV0dXJuKDEsIHYpKQotCi0vKiBUaGUgNjQtYml0IGF0b21pYyB0eXBlICovCi0KLSNkZWZpbmUgQVRPTUlDNjRfSU5JVChpKQl7IChpKSB9Ci0KLS8qKgotICogYXRvbWljNjRfcmVhZCAtIHJlYWQgYXRvbWljNjQgdmFyaWFibGUKLSAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgcmVhZHMgdGhlIHZhbHVlIG9mIEB2LgotICogRG9lc24ndCBpbXBseSBhIHJlYWQgbWVtb3J5IGJhcnJpZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWM2NF9yZWFkKGNvbnN0IGF0b21pYzY0X3QgKnYpCi17Ci0JcmV0dXJuIHYtPmNvdW50ZXI7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfc2V0IC0gc2V0IGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqIEBpOiByZXF1aXJlZCB2YWx1ZQotICoKLSAqIEF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgQHYgdG8gQGkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9zZXQoYXRvbWljNjRfdCAqdiwgbG9uZyBpKQotewotCXYtPmNvdW50ZXIgPSBpOwotfQotCi0vKioKLSAqIGF0b21pYzY0X2FkZCAtIGFkZCBpbnRlZ2VyIHRvIGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X2FkZChsb25nIGksIGF0b21pYzY0X3QgKnYpCi17Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRxICUxLCUwIgotCQkgICAgIDogIj1tIiAodi0+Y291bnRlcikKLQkJICAgICA6ICJlciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWM2NF9zdWIgLSBzdWJ0cmFjdCB0aGUgYXRvbWljNjQgdmFyaWFibGUKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN1YnRyYWN0Ci0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljNjRfc3ViKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInN1YnEgJTEsJTAiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQotCQkgICAgIDogImVyIiAoaSksICJtIiAodi0+Y291bnRlcikpOwotfQotCi0vKioKLSAqIGF0b21pYzY0X3N1Yl9hbmRfdGVzdCAtIHN1YnRyYWN0IHZhbHVlIGZyb20gdmFyaWFibGUgYW5kIHRlc3QgcmVzdWx0Ci0gKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBzdWJ0cmFjdHMgQGkgZnJvbSBAdiBhbmQgcmV0dXJucwotICogdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKLSAqIG90aGVyIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhdG9taWM2NF9zdWJfYW5kX3Rlc3QobG9uZyBpLCBhdG9taWM2NF90ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAic3VicSAlMiwlMDsgc2V0ZSAlMSIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6ICJlciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwotCXJldHVybiBjOwotfQotCi0vKioKLSAqIGF0b21pYzY0X2luYyAtIGluY3JlbWVudCBhdG9taWM2NCB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9pbmMoYXRvbWljNjRfdCAqdikKLXsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImluY3EgJTAiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKQotCQkgICAgIDogIm0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLS8qKgotICogYXRvbWljNjRfZGVjIC0gZGVjcmVtZW50IGF0b21pYzY0IHZhcmlhYmxlCi0gKiBAdjogcG9pbnRlciB0byB0eXBlIGF0b21pYzY0X3QKLSAqCi0gKiBBdG9taWNhbGx5IGRlY3JlbWVudHMgQHYgYnkgMS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X2RlYyhhdG9taWM2NF90ICp2KQotewotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjcSAlMCIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpCi0JCSAgICAgOiAibSIgKHYtPmNvdW50ZXIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWM2NF9kZWNfYW5kX3Rlc3QgLSBkZWNyZW1lbnQgYW5kIHRlc3QKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxIGFuZAotICogcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgMCwgb3IgZmFsc2UgZm9yIGFsbCBvdGhlcgotICogY2FzZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2RlY19hbmRfdGVzdChhdG9taWM2NF90ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiZGVjcSAlMDsgc2V0ZSAlMSIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6ICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGMgIT0gMDsKLX0KLQotLyoqCi0gKiBhdG9taWM2NF9pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgYXRvbWljNjRfdAotICoKLSAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxCi0gKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAotICogb3RoZXIgY2FzZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF0b21pYzY0X2luY19hbmRfdGVzdChhdG9taWM2NF90ICp2KQotewotCXVuc2lnbmVkIGNoYXIgYzsKLQotCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jcSAlMDsgc2V0ZSAlMSIKLQkJICAgICA6ICI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKLQkJICAgICA6ICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7Ci0JcmV0dXJuIGMgIT0gMDsKLX0KLQotLyoqCi0gKiBhdG9taWM2NF9hZGRfbmVnYXRpdmUgLSBhZGQgYW5kIHRlc3QgaWYgbmVnYXRpdmUKLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIHRydWUKLSAqIGlmIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG9yIGZhbHNlIHdoZW4KLSAqIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfYWRkX25lZ2F0aXZlKGxvbmcgaSwgYXRvbWljNjRfdCAqdikKLXsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZHEgJTIsJTA7IHNldHMgJTEiCi0JCSAgICAgOiAiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCi0JCSAgICAgOiAiZXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gYzsKLX0KLQotLyoqCi0gKiBhdG9taWM2NF9hZGRfcmV0dXJuIC0gYWRkIGFuZCByZXR1cm4KLSAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAotICogQHY6IHBvaW50ZXIgdG8gdHlwZSBhdG9taWM2NF90Ci0gKgotICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIEBpICsgQHYKLSAqLwotc3RhdGljIGlubGluZSBsb25nIGF0b21pYzY0X2FkZF9yZXR1cm4obG9uZyBpLCBhdG9taWM2NF90ICp2KQotewotCWxvbmcgX19pID0gaTsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInhhZGRxICUwLCAlMTsiCi0JCSAgICAgOiAiK3IiIChpKSwgIittIiAodi0+Y291bnRlcikKLQkJICAgICA6IDogIm1lbW9yeSIpOwotCXJldHVybiBpICsgX19pOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfc3ViX3JldHVybihsb25nIGksIGF0b21pYzY0X3QgKnYpCi17Ci0JcmV0dXJuIGF0b21pYzY0X2FkZF9yZXR1cm4oLWksIHYpOwotfQotCi0jZGVmaW5lIGF0b21pYzY0X2luY19yZXR1cm4odikgIChhdG9taWM2NF9hZGRfcmV0dXJuKDEsICh2KSkpCi0jZGVmaW5lIGF0b21pYzY0X2RlY19yZXR1cm4odikgIChhdG9taWM2NF9zdWJfcmV0dXJuKDEsICh2KSkpCi0KLXN0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWM2NF9jbXB4Y2hnKGF0b21pYzY0X3QgKnYsIGxvbmcgb2xkLCBsb25nIG5ldykKLXsKLQlyZXR1cm4gY21weGNoZygmdi0+Y291bnRlciwgb2xkLCBuZXcpOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgYXRvbWljNjRfeGNoZyhhdG9taWM2NF90ICp2LCBsb25nIG5ldykKLXsKLQlyZXR1cm4geGNoZygmdi0+Y291bnRlciwgbmV3KTsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIGF0b21pY19jbXB4Y2hnKGF0b21pY190ICp2LCBpbnQgb2xkLCBpbnQgbmV3KQotewotCXJldHVybiBjbXB4Y2hnKCZ2LT5jb3VudGVyLCBvbGQsIG5ldyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBhdG9taWNfeGNoZyhhdG9taWNfdCAqdiwgaW50IG5ldykKLXsKLQlyZXR1cm4geGNoZygmdi0+Y291bnRlciwgbmV3KTsKLX0KLQotLyoqCi0gKiBhdG9taWNfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhIGdpdmVuIHZhbHVlCi0gKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190Ci0gKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gdi4uLgotICogQHU6IC4uLnVubGVzcyB2IGlzIGVxdWFsIHRvIHUuCi0gKgotICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIGl0IHdhcyBub3QgQHUuCi0gKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEB2IHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKLXsKLQlpbnQgYywgb2xkOwotCWMgPSBhdG9taWNfcmVhZCh2KTsKLQlmb3IgKDs7KSB7Ci0JCWlmICh1bmxpa2VseShjID09ICh1KSkpCi0JCQlicmVhazsKLQkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsKLQkJaWYgKGxpa2VseShvbGQgPT0gYykpCi0JCQlicmVhazsKLQkJYyA9IG9sZDsKLQl9Ci0JcmV0dXJuIGMgIT0gKHUpOwotfQotCi0jZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQotCi0vKioKLSAqIGF0b21pYzY0X2FkZF91bmxlc3MgLSBhZGQgdW5sZXNzIHRoZSBudW1iZXIgaXMgYSBnaXZlbiB2YWx1ZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWM2NF90Ci0gKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gdi4uLgotICogQHU6IC4uLnVubGVzcyB2IGlzIGVxdWFsIHRvIHUuCi0gKgotICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIGl0IHdhcyBub3QgQHUuCi0gKiBSZXR1cm5zIG5vbi16ZXJvIGlmIEB2IHdhcyBub3QgQHUsIGFuZCB6ZXJvIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYXRvbWljNjRfYWRkX3VubGVzcyhhdG9taWM2NF90ICp2LCBsb25nIGEsIGxvbmcgdSkKLXsKLQlsb25nIGMsIG9sZDsKLQljID0gYXRvbWljNjRfcmVhZCh2KTsKLQlmb3IgKDs7KSB7Ci0JCWlmICh1bmxpa2VseShjID09ICh1KSkpCi0JCQlicmVhazsKLQkJb2xkID0gYXRvbWljNjRfY21weGNoZygodiksIGMsIGMgKyAoYSkpOwotCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkKLQkJCWJyZWFrOwotCQljID0gb2xkOwotCX0KLQlyZXR1cm4gYyAhPSAodSk7Ci19Ci0KLS8qKgotICogYXRvbWljX2luY19zaG9ydCAtIGluY3JlbWVudCBvZiBhIHNob3J0IGludGVnZXIKLSAqIEB2OiBwb2ludGVyIHRvIHR5cGUgaW50Ci0gKgotICogQXRvbWljYWxseSBhZGRzIDEgdG8gQHYKLSAqIFJldHVybnMgdGhlIG5ldyB2YWx1ZSBvZiBAdQotICovCi1zdGF0aWMgaW5saW5lIHNob3J0IGludCBhdG9taWNfaW5jX3Nob3J0KHNob3J0IGludCAqdikKLXsKLQlhc20oTE9DS19QUkVGSVggImFkZHcgJDEsICUwIiA6ICIrbSIgKCp2KSk7Ci0JcmV0dXJuICp2OwotfQotCi0vKioKLSAqIGF0b21pY19vcl9sb25nIC0gT1Igb2YgdHdvIGxvbmcgaW50ZWdlcnMKLSAqIEB2MTogcG9pbnRlciB0byB0eXBlIHVuc2lnbmVkIGxvbmcKLSAqIEB2MjogcG9pbnRlciB0byB0eXBlIHVuc2lnbmVkIGxvbmcKLSAqCi0gKiBBdG9taWNhbGx5IE9ScyBAdjEgYW5kIEB2MgotICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBPUgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX29yX2xvbmcodW5zaWduZWQgbG9uZyAqdjEsIHVuc2lnbmVkIGxvbmcgdjIpCi17Ci0JYXNtKExPQ0tfUFJFRklYICJvcnEgJTEsICUwIiA6ICIrbSIgKCp2MSkgOiAiciIgKHYyKSk7Ci19Ci0KLSNkZWZpbmUgYXRvbWljNjRfaW5jX25vdF96ZXJvKHYpIGF0b21pYzY0X2FkZF91bmxlc3MoKHYpLCAxLCAwKQotCi0vKiBUaGVzZSBhcmUgeDg2LXNwZWNpZmljLCB1c2VkIGJ5IHNvbWUgaGVhZGVyIGZpbGVzICovCi0jZGVmaW5lIGF0b21pY19jbGVhcl9tYXNrKG1hc2ssIGFkZHIpCQkJCQlcCi0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhbmRsICUwLCUxIgkJCQlcCi0JCSAgICAgOiA6ICJyIiAofihtYXNrKSksICJtIiAoKihhZGRyKSkgOiAibWVtb3J5IikKLQotI2RlZmluZSBhdG9taWNfc2V0X21hc2sobWFzaywgYWRkcikJCQkJCVwKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggIm9ybCAlMCwlMSIJCQkJXAotCQkgICAgIDogOiAiciIgKCh1bnNpZ25lZCkobWFzaykpLCAibSIgKCooYWRkcikpCQlcCi0JCSAgICAgOiAibWVtb3J5IikKLQotLyogQXRvbWljIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc2VyaWFsaXppbmcgb24geDg2ICovCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCkJYmFycmllcigpCi0jZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKQliYXJyaWVyKCkKLSNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJYmFycmllcigpCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdG9taWMtbG9uZy5oPgotI2VuZGlmIC8qIF9BU01fWDg2X0FUT01JQ182NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKaW5kZXggNjM3ZTFlYy4uMGNkODJkMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaApAQCAtMTY4LDYgKzE2OCwxMCBAQAogI2RlZmluZSBYODZfRkVBVFVSRV9GTEVYUFJJT1JJVFkgKDgqMzIrIDIpIC8qIEludGVsIEZsZXhQcmlvcml0eSAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9FUFQgICAgICAgICAoOCozMisgMykgLyogSW50ZWwgRXh0ZW5kZWQgUGFnZSBUYWJsZSAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9WUElEICAgICAgICAoOCozMisgNCkgLyogSW50ZWwgVmlydHVhbCBQcm9jZXNzb3IgSUQgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTlBUCQkoOCozMis1KSAgLyogQU1EIE5lc3RlZCBQYWdlIFRhYmxlIHN1cHBvcnQgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTEJSVgkoOCozMis2KSAgLyogQU1EIExCUiBWaXJ0dWFsaXphdGlvbiBzdXBwb3J0ICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1NWTUwJKDgqMzIrNykgIC8qICJzdm1fbG9jayIgQU1EIFNWTSBsb2NraW5nIE1TUiAqLworI2RlZmluZSBYODZfRkVBVFVSRV9OUklQUwkoOCozMis4KSAgLyogIm5yaXBfc2F2ZSIgQU1EIFNWTSBuZXh0X3JpcCBzYXZlICovCiAKICNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVidWdyZWcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RlYnVncmVnLmgKaW5kZXggODI0MGY3Ni4uYjgxMDAyZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVidWdyZWcuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZWJ1Z3JlZy5oCkBAIC0xNCw2ICsxNCw5IEBACiAgICB3aGljaCBkZWJ1Z2dpbmcgcmVnaXN0ZXIgd2FzIHJlc3BvbnNpYmxlIGZvciB0aGUgdHJhcC4gIFRoZSBvdGhlciBiaXRzCiAgICBhcmUgZWl0aGVyIHJlc2VydmVkIG9yIG5vdCBvZiBpbnRlcmVzdCB0byB1cy4gKi8KIAorLyogRGVmaW5lIHJlc2VydmVkIGJpdHMgaW4gRFI2IHdoaWNoIGFyZSBhbHdheXMgc2V0IHRvIDEgKi8KKyNkZWZpbmUgRFI2X1JFU0VSVkVECSgweEZGRkYwRkYwKQorCiAjZGVmaW5lIERSX1RSQVAwCSgweDEpCQkvKiBkYjAgKi8KICNkZWZpbmUgRFJfVFJBUDEJKDB4MikJCS8qIGRiMSAqLwogI2RlZmluZSBEUl9UUkFQMgkoMHg0KQkJLyogZGIyICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mYi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZmIuaAppbmRleCA1MzAxODQ2Li4yNTE5ZDA2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mYi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZiLmgKQEAgLTEyLDEwICsxMiw2IEBACiAJCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpIHw9IF9QQUdFX1BDRDsKIH0KIAotI2lmZGVmIENPTkZJR19YODZfMzIKIGV4dGVybiBpbnQgZmJfaXNfcHJpbWFyeV9kZXZpY2Uoc3RydWN0IGZiX2luZm8gKmluZm8pOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGZiX2lzX3ByaW1hcnlfZGV2aWNlKHN0cnVjdCBmYl9pbmZvICppbmZvKSB7IHJldHVybiAwOyB9Ci0jZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fWDg2X0ZCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZpeG1hcC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZml4bWFwLmgKaW5kZXggMTRmOTg5MC4uNjM1ZjAzYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZml4bWFwLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZml4bWFwLmgKQEAgLTExOCwxNCArMTE4LDIwIEBACiAJICogMjU2IHRlbXBvcmFyeSBib290LXRpbWUgbWFwcGluZ3MsIHVzZWQgYnkgZWFybHlfaW9yZW1hcCgpLAogCSAqIGJlZm9yZSBpb3JlbWFwKCkgaXMgZnVuY3Rpb25hbC4KIAkgKgotCSAqIFdlIHJvdW5kIGl0IHVwIHRvIHRoZSBuZXh0IDI1NiBwYWdlcyBib3VuZGFyeSBzbyB0aGF0IHdlCi0JICogY2FuIGhhdmUgYSBzaW5nbGUgcGdkIGVudHJ5IGFuZCBhIHNpbmdsZSBwdGUgdGFibGU6CisJICogSWYgbmVjZXNzYXJ5IHdlIHJvdW5kIGl0IHVwIHRvIHRoZSBuZXh0IDI1NiBwYWdlcyBib3VuZGFyeSBzbworCSAqIHRoYXQgd2UgY2FuIGhhdmUgYSBzaW5nbGUgcGdkIGVudHJ5IGFuZCBhIHNpbmdsZSBwdGUgdGFibGU6CiAJICovCiAjZGVmaW5lIE5SX0ZJWF9CVE1BUFMJCTY0CiAjZGVmaW5lIEZJWF9CVE1BUFNfU0xPVFMJNAotCUZJWF9CVE1BUF9FTkQgPSBfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzICsgMjU2IC0KLQkJCShfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzICYgMjU1KSwKLQlGSVhfQlRNQVBfQkVHSU4gPSBGSVhfQlRNQVBfRU5EICsgTlJfRklYX0JUTUFQUypGSVhfQlRNQVBTX1NMT1RTIC0gMSwKKyNkZWZpbmUgVE9UQUxfRklYX0JUTUFQUwkoTlJfRklYX0JUTUFQUyAqIEZJWF9CVE1BUFNfU0xPVFMpCisJRklYX0JUTUFQX0VORCA9CisJIChfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzIF4KKwkgIChfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzICsgVE9UQUxfRklYX0JUTUFQUyAtIDEpKSAmCisJIC1QVFJTX1BFUl9QVEUKKwkgPyBfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzICsgVE9UQUxfRklYX0JUTUFQUyAtCisJICAgKF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMgJiAoVE9UQUxfRklYX0JUTUFQUyAtIDEpKQorCSA6IF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMsCisJRklYX0JUTUFQX0JFR0lOID0gRklYX0JUTUFQX0VORCArIFRPVEFMX0ZJWF9CVE1BUFMgLSAxLAogI2lmZGVmIENPTkZJR19QUk9WSURFX09IQ0kxMzk0X0RNQV9JTklUCiAJRklYX09IQ0kxMzk0X0JBU0UsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2kzODcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2kzODcuaAppbmRleCBlYmZiOGE5Li5kYTI5MzA5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaTM4Ny5oCkBAIC0zMyw4ICszMywxNiBAQAogZXh0ZXJuIGludCBkdW1wX2ZwdShzdHJ1Y3QgcHRfcmVncyAqLCBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCAqKTsKIAogZXh0ZXJuIHVzZXJfcmVnc2V0X2FjdGl2ZV9mbiBmcHJlZ3NfYWN0aXZlLCB4ZnByZWdzX2FjdGl2ZTsKLWV4dGVybiB1c2VyX3JlZ3NldF9nZXRfZm4gZnByZWdzX2dldCwgeGZwcmVnc19nZXQsIGZwcmVnc19zb2Z0X2dldDsKLWV4dGVybiB1c2VyX3JlZ3NldF9zZXRfZm4gZnByZWdzX3NldCwgeGZwcmVnc19zZXQsIGZwcmVnc19zb2Z0X3NldDsKK2V4dGVybiB1c2VyX3JlZ3NldF9nZXRfZm4gZnByZWdzX2dldCwgeGZwcmVnc19nZXQsIGZwcmVnc19zb2Z0X2dldCwKKwkJCQl4c3RhdGVyZWdzX2dldDsKK2V4dGVybiB1c2VyX3JlZ3NldF9zZXRfZm4gZnByZWdzX3NldCwgeGZwcmVnc19zZXQsIGZwcmVnc19zb2Z0X3NldCwKKwkJCQkgeHN0YXRlcmVnc19zZXQ7CisKKy8qCisgKiB4c3RhdGVyZWdzX2FjdGl2ZSA9PSBmcHJlZ3NfYWN0aXZlLiBQbGVhc2UgcmVmZXIgdG8gdGhlIGNvbW1lbnQKKyAqIGF0IHRoZSBkZWZpbml0aW9uIG9mIGZwcmVnc19hY3RpdmUuCisgKi8KKyNkZWZpbmUgeHN0YXRlcmVnc19hY3RpdmUJZnByZWdzX2FjdGl2ZQogCiBleHRlcm4gc3RydWN0IF9mcHhfc3dfYnl0ZXMgZnhfc3dfcmVzZXJ2ZWQ7CiAjaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaAppbmRleCA3MzczOTMyLi5hMWRjZmEzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmgKQEAgLTEsOCArMSw0MiBAQAogI2lmbmRlZiBfQVNNX1g4Nl9JT19ICiAjZGVmaW5lIF9BU01fWDg2X0lPX0gKIAorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSB4ODYgSU8gaW5zdHJ1Y3Rpb25zCisgKiBpbmIvaW53L2lubC9vdXRiL291dHcvb3V0bCBhbmQgdGhlICJzdHJpbmcgdmVyc2lvbnMiIG9mIHRoZSBzYW1lCisgKiAoaW5zYi9pbnN3L2luc2wvb3V0c2Ivb3V0c3cvb3V0c2wpLiBZb3UgY2FuIGFsc28gdXNlICJwYXVzaW5nIgorICogdmVyc2lvbnMgb2YgdGhlIHNpbmdsZS1JTyBpbnN0cnVjdGlvbnMgKGluYl9wL2lud19wLy4uKS4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbm90IG1lYW50IHRvIGJlIG9iZnVzY2F0aW5nOiBpdCdzIGp1c3QgY29tcGxpY2F0ZWQKKyAqIHRvIChhKSBoYW5kbGUgaXQgYWxsIGluIGEgd2F5IHRoYXQgbWFrZXMgZ2NjIGFibGUgdG8gb3B0aW1pemUgaXQKKyAqIGFzIHdlbGwgYXMgcG9zc2libGUgYW5kIChiKSB0cnlpbmcgdG8gYXZvaWQgd3JpdGluZyB0aGUgc2FtZSB0aGluZworICogb3ZlciBhbmQgb3ZlciBhZ2FpbiB3aXRoIHNsaWdodCB2YXJpYXRpb25zIGFuZCBwb3NzaWJseSBtYWtpbmcgYQorICogbWlzdGFrZSBzb21ld2hlcmUuCisgKi8KKworLyoKKyAqIFRoYW5rcyB0byBKYW1lcyB2YW4gQXJ0c2RhbGVuIGZvciBhIGJldHRlciB0aW1pbmctZml4IHRoYW4KKyAqIHRoZSB0d28gc2hvcnQganVtcHM6IHVzaW5nIG91dGIncyB0byBhIG5vbmV4aXN0ZW50IHBvcnQgc2VlbXMKKyAqIHRvIGd1YXJhbnRlZSBiZXR0ZXIgdGltaW5ncyBldmVuIG9uIGZhc3QgbWFjaGluZXMuCisgKgorICogT24gdGhlIG90aGVyIGhhbmQsIEknZCBsaWtlIHRvIGJlIHN1cmUgb2YgYSBub24tZXhpc3RlbnQgcG9ydDoKKyAqIEkgZmVlbCBhIGJpdCB1bnNhZmUgYWJvdXQgdXNpbmcgMHg4MCAoc2hvdWxkIGJlIHNhZmUsIHRob3VnaCkKKyAqCisgKgkJTGludXMKKyAqLworCisgLyoKKyAgKiAgQml0IHNpbXBsaWZpZWQgYW5kIG9wdGltaXplZCBieSBKYW4gSHViaWNrYQorICAqICBTdXBwb3J0IG9mIEJJR01FTSBhZGRlZCBieSBHZXJoYXJkIFdpY2hlcnQsIFNpZW1lbnMgQUcsIEp1bHkgMTk5OS4KKyAgKgorICAqICBpc2FfbWVtc2V0X2lvLCBpc2FfbWVtY3B5X2Zyb21pbywgaXNhX21lbWNweV90b2lvIGFkZGVkLAorICAqICBpc2FfcmVhZFt3bF0gYW5kIGlzYV93cml0ZVt3bF0gZml4ZWQKKyAgKiAgLSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KKyAgKi8KKwogI2RlZmluZSBBUkNIX0hBU19JT1JFTUFQX1dDCiAKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2ludC1sbDY0Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTE3MywxMSArMjA3LDEyNiBAQAogZXh0ZXJuIHZvaWQgaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOwogCiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jIGluY2x1ZGUgImlvXzMyLmgiCi0jZWxzZQotIyBpbmNsdWRlICJpb182NC5oIgorI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lvbWFwLmg+CisKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKy8qCisgKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCisgKi8KKyNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKKworc3RhdGljIGlubGluZSB2b2lkCittZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBjaGFyIHZhbCwgc2l6ZV90IGNvdW50KQoreworCW1lbXNldCgodm9pZCBfX2ZvcmNlICopYWRkciwgdmFsLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbWVtY3B5X2Zyb21pbyh2b2lkICpkc3QsIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqc3JjLCBzaXplX3QgY291bnQpCit7CisJbWVtY3B5KGRzdCwgKGNvbnN0IHZvaWQgX19mb3JjZSAqKXNyYywgY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK21lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjb3VudCkKK3sKKwltZW1jcHkoKHZvaWQgX19mb3JjZSAqKWRzdCwgc3JjLCBjb3VudCk7Cit9CisKKy8qCisgKiBJU0Egc3BhY2UgaXMgJ2Fsd2F5cyBtYXBwZWQnIG9uIGEgdHlwaWNhbCB4ODYgc3lzdGVtLCBubyBuZWVkIHRvCisgKiBleHBsaWNpdGx5IGlvcmVtYXAoKSBpdC4gVGhlIGZhY3QgdGhhdCB0aGUgSVNBIElPIHNwYWNlIGlzIG1hcHBlZAorICogdG8gUEFHRV9PRkZTRVQgaXMgcHVyZSBjb2luY2lkZW5jZSAtIGl0IGRvZXMgbm90IG1lYW4gSVNBIHZhbHVlcworICogYXJlIHBoeXNpY2FsIGFkZHJlc3Nlcy4gVGhlIGZvbGxvd2luZyBjb25zdGFudCBwb2ludGVyIGNhbiBiZQorICogdXNlZCBhcyB0aGUgSU8tYXJlYSBwb2ludGVyIChpdCBjYW4gYmUgaW91bm1hcHBlZCBhcyB3ZWxsLCBzbyB0aGUKKyAqIGFuYWxvZ3kgd2l0aCBQQ0kgaXMgcXVpdGUgbGFyZ2UpOgorICovCisjZGVmaW5lIF9fSVNBX0lPX2Jhc2UgKChjaGFyIF9faW9tZW0gKikoUEFHRV9PRkZTRVQpKQorCisvKgorICoJQ2FjaGUgbWFuYWdlbWVudAorICoKKyAqCVRoaXMgbmVlZGVkIGZvciB0d28gY2FzZXMKKyAqCTEuIE91dCBvZiBvcmRlciBhd2FyZSBwcm9jZXNzb3JzCisgKgkyLiBBY2NpZGVudGFsbHkgb3V0IG9mIG9yZGVyIHByb2Nlc3NvcnMgKFBQcm8gZXJyYXRhICM1MSkKKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfd3JpdGVfYnVmZmVycyh2b2lkKQoreworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9PT1NUT1JFKSB8fCBkZWZpbmVkKENPTkZJR19YODZfUFBST19GRU5DRSkKKwlhc20gdm9sYXRpbGUoImxvY2s7IGFkZGwgJDAsMCglJWVzcCkiOiA6IDoibWVtb3J5Iik7CiAjZW5kaWYKK30KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworZXh0ZXJuIHZvaWQgbmF0aXZlX2lvX2RlbGF5KHZvaWQpOworCitleHRlcm4gaW50IGlvX2RlbGF5X3R5cGU7CitleHRlcm4gdm9pZCBpb19kZWxheV9pbml0KHZvaWQpOworCisjaWYgZGVmaW5lZChDT05GSUdfUEFSQVZJUlQpCisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2xvd19kb3duX2lvKHZvaWQpCit7CisJbmF0aXZlX2lvX2RlbGF5KCk7CisjaWZkZWYgUkVBTExZX1NMT1dfSU8KKwluYXRpdmVfaW9fZGVsYXkoKTsKKwluYXRpdmVfaW9fZGVsYXkoKTsKKwluYXRpdmVfaW9fZGVsYXkoKTsKKyNlbmRpZgorfQorCisjZW5kaWYKKworI2RlZmluZSBCVUlMRElPKGJ3bCwgYncsIHR5cGUpCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIG91dCMjYndsKHVuc2lnbmVkIHR5cGUgdmFsdWUsIGludCBwb3J0KQkJXAorewkJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUoIm91dCIgI2J3bCAiICUiICNidyAiMCwgJXcxIgkJCVwKKwkJICAgICA6IDogImEiKHZhbHVlKSwgIk5kIihwb3J0KSk7CQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHlwZSBpbiMjYndsKGludCBwb3J0KQkJCQlcCit7CQkJCQkJCQkJXAorCXVuc2lnbmVkIHR5cGUgdmFsdWU7CQkJCQkJXAorCWFzbSB2b2xhdGlsZSgiaW4iICNid2wgIiAldzEsICUiICNidyAiMCIJCQlcCisJCSAgICAgOiAiPWEiKHZhbHVlKSA6ICJOZCIocG9ydCkpOwkJCVwKKwlyZXR1cm4gdmFsdWU7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wjI19wKHVuc2lnbmVkIHR5cGUgdmFsdWUsIGludCBwb3J0KQkJXAorewkJCQkJCQkJCVwKKwlvdXQjI2J3bCh2YWx1ZSwgcG9ydCk7CQkJCQkJXAorCXNsb3dfZG93bl9pbygpOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGlubGluZSB1bnNpZ25lZCB0eXBlIGluIyNid2wjI19wKGludCBwb3J0KQkJCVwKK3sJCQkJCQkJCQlcCisJdW5zaWduZWQgdHlwZSB2YWx1ZSA9IGluIyNid2wocG9ydCk7CQkJCVwKKwlzbG93X2Rvd25faW8oKTsJCQkJCQkJXAorCXJldHVybiB2YWx1ZTsJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRzIyNid2woaW50IHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpIFwKK3sJCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJyZXA7IG91dHMiICNid2wJCQkJCVwKKwkJICAgICA6ICIrUyIoYWRkciksICIrYyIoY291bnQpIDogImQiKHBvcnQpKTsJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgaW5zIyNid2woaW50IHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCVwKK3sJCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJyZXA7IGlucyIgI2J3bAkJCQkJXAorCQkgICAgIDogIitEIihhZGRyKSwgIitjIihjb3VudCkgOiAiZCIocG9ydCkpOwkJXAorfQorCitCVUlMRElPKGIsIGIsIGNoYXIpCitCVUlMRElPKHcsIHcsIHNob3J0KQorQlVJTERJTyhsLCAsIGludCkKIAogZXh0ZXJuIHZvaWQgKnhsYXRlX2Rldl9tZW1fcHRyKHVuc2lnbmVkIGxvbmcgcGh5cyk7CiBleHRlcm4gdm9pZCB1bnhsYXRlX2Rldl9tZW1fcHRyKHVuc2lnbmVkIGxvbmcgcGh5cywgdm9pZCAqYWRkcik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb18zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI5OTkwMC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb18zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfSU9fMzJfSAotI2RlZmluZSBfQVNNX1g4Nl9JT18zMl9ICi0KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIHg4NiBJTyBpbnN0cnVjdGlvbnMKLSAqIGluYi9pbncvaW5sL291dGIvb3V0dy9vdXRsIGFuZCB0aGUgInN0cmluZyB2ZXJzaW9ucyIgb2YgdGhlIHNhbWUKLSAqIChpbnNiL2luc3cvaW5zbC9vdXRzYi9vdXRzdy9vdXRzbCkuIFlvdSBjYW4gYWxzbyB1c2UgInBhdXNpbmciCi0gKiB2ZXJzaW9ucyBvZiB0aGUgc2luZ2xlLUlPIGluc3RydWN0aW9ucyAoaW5iX3AvaW53X3AvLi4pLgotICoKLSAqIFRoaXMgZmlsZSBpcyBub3QgbWVhbnQgdG8gYmUgb2JmdXNjYXRpbmc6IGl0J3MganVzdCBjb21wbGljYXRlZAotICogdG8gKGEpIGhhbmRsZSBpdCBhbGwgaW4gYSB3YXkgdGhhdCBtYWtlcyBnY2MgYWJsZSB0byBvcHRpbWl6ZSBpdAotICogYXMgd2VsbCBhcyBwb3NzaWJsZSBhbmQgKGIpIHRyeWluZyB0byBhdm9pZCB3cml0aW5nIHRoZSBzYW1lIHRoaW5nCi0gKiBvdmVyIGFuZCBvdmVyIGFnYWluIHdpdGggc2xpZ2h0IHZhcmlhdGlvbnMgYW5kIHBvc3NpYmx5IG1ha2luZyBhCi0gKiBtaXN0YWtlIHNvbWV3aGVyZS4KLSAqLwotCi0vKgotICogVGhhbmtzIHRvIEphbWVzIHZhbiBBcnRzZGFsZW4gZm9yIGEgYmV0dGVyIHRpbWluZy1maXggdGhhbgotICogdGhlIHR3byBzaG9ydCBqdW1wczogdXNpbmcgb3V0YidzIHRvIGEgbm9uZXhpc3RlbnQgcG9ydCBzZWVtcwotICogdG8gZ3VhcmFudGVlIGJldHRlciB0aW1pbmdzIGV2ZW4gb24gZmFzdCBtYWNoaW5lcy4KLSAqCi0gKiBPbiB0aGUgb3RoZXIgaGFuZCwgSSdkIGxpa2UgdG8gYmUgc3VyZSBvZiBhIG5vbi1leGlzdGVudCBwb3J0OgotICogSSBmZWVsIGEgYml0IHVuc2FmZSBhYm91dCB1c2luZyAweDgwIChzaG91bGQgYmUgc2FmZSwgdGhvdWdoKQotICoKLSAqCQlMaW51cwotICovCi0KLSAvKgotICAqICBCaXQgc2ltcGxpZmllZCBhbmQgb3B0aW1pemVkIGJ5IEphbiBIdWJpY2thCi0gICogIFN1cHBvcnQgb2YgQklHTUVNIGFkZGVkIGJ5IEdlcmhhcmQgV2ljaGVydCwgU2llbWVucyBBRywgSnVseSAxOTk5LgotICAqCi0gICogIGlzYV9tZW1zZXRfaW8sIGlzYV9tZW1jcHlfZnJvbWlvLCBpc2FfbWVtY3B5X3RvaW8gYWRkZWQsCi0gICogIGlzYV9yZWFkW3dsXSBhbmQgaXNhX3dyaXRlW3dsXSBmaXhlZAotICAqICAtIEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBjb25lY3RpdmEuY29tLmJyPgotICAqLwotCi0jZGVmaW5lIFhRVUFEX1BPUlRJT19CQVNFIDB4ZmU0MDAwMDAKLSNkZWZpbmUgWFFVQURfUE9SVElPX1FVQUQgMHg0MDAwMCAgLyogMjU2ayBwZXIgcXVhZC4gKi8KLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lvbWFwLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0KLS8qCi0gKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyCi0gKi8KLSNkZWZpbmUgeGxhdGVfZGV2X2ttZW1fcHRyKHApCXAKLQotc3RhdGljIGlubGluZSB2b2lkCi1tZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBjaGFyIHZhbCwgaW50IGNvdW50KQotewotCW1lbXNldCgodm9pZCBfX2ZvcmNlICopYWRkciwgdmFsLCBjb3VudCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbWVtY3B5X2Zyb21pbyh2b2lkICpkc3QsIGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqc3JjLCBpbnQgY291bnQpCi17Ci0JX19tZW1jcHkoZHN0LCAoY29uc3Qgdm9pZCBfX2ZvcmNlICopc3JjLCBjb3VudCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgaW50IGNvdW50KQotewotCV9fbWVtY3B5KCh2b2lkIF9fZm9yY2UgKilkc3QsIHNyYywgY291bnQpOwotfQotCi0vKgotICogSVNBIHNwYWNlIGlzICdhbHdheXMgbWFwcGVkJyBvbiBhIHR5cGljYWwgeDg2IHN5c3RlbSwgbm8gbmVlZCB0bwotICogZXhwbGljaXRseSBpb3JlbWFwKCkgaXQuIFRoZSBmYWN0IHRoYXQgdGhlIElTQSBJTyBzcGFjZSBpcyBtYXBwZWQKLSAqIHRvIFBBR0VfT0ZGU0VUIGlzIHB1cmUgY29pbmNpZGVuY2UgLSBpdCBkb2VzIG5vdCBtZWFuIElTQSB2YWx1ZXMKLSAqIGFyZSBwaHlzaWNhbCBhZGRyZXNzZXMuIFRoZSBmb2xsb3dpbmcgY29uc3RhbnQgcG9pbnRlciBjYW4gYmUKLSAqIHVzZWQgYXMgdGhlIElPLWFyZWEgcG9pbnRlciAoaXQgY2FuIGJlIGlvdW5tYXBwZWQgYXMgd2VsbCwgc28gdGhlCi0gKiBhbmFsb2d5IHdpdGggUENJIGlzIHF1aXRlIGxhcmdlKToKLSAqLwotI2RlZmluZSBfX0lTQV9JT19iYXNlICgoY2hhciBfX2lvbWVtICopKFBBR0VfT0ZGU0VUKSkKLQotLyoKLSAqCUNhY2hlIG1hbmFnZW1lbnQKLSAqCi0gKglUaGlzIG5lZWRlZCBmb3IgdHdvIGNhc2VzCi0gKgkxLiBPdXQgb2Ygb3JkZXIgYXdhcmUgcHJvY2Vzc29ycwotICoJMi4gQWNjaWRlbnRhbGx5IG91dCBvZiBvcmRlciBwcm9jZXNzb3JzIChQUHJvIGVycmF0YSAjNTEpCi0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9PT1NUT1JFKSB8fCBkZWZpbmVkKENPTkZJR19YODZfUFBST19GRU5DRSkKLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3dyaXRlX2J1ZmZlcnModm9pZCkKLXsKLQlhc20gdm9sYXRpbGUoImxvY2s7IGFkZGwgJDAsMCglJWVzcCkiOiA6IDoibWVtb3J5Iik7Ci19Ci0KLSNlbHNlCi0KLSNkZWZpbmUgZmx1c2hfd3JpdGVfYnVmZmVycygpIGRvIHsgfSB3aGlsZSAoMCkKLQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLWV4dGVybiB2b2lkIG5hdGl2ZV9pb19kZWxheSh2b2lkKTsKLQotZXh0ZXJuIGludCBpb19kZWxheV90eXBlOwotZXh0ZXJuIHZvaWQgaW9fZGVsYXlfaW5pdCh2b2lkKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1BBUkFWSVJUKQotI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIHNsb3dfZG93bl9pbyh2b2lkKQotewotCW5hdGl2ZV9pb19kZWxheSgpOwotI2lmZGVmIFJFQUxMWV9TTE9XX0lPCi0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0jZW5kaWYKLX0KLQotI2VuZGlmCi0KLSNkZWZpbmUgX19CVUlMRElPKGJ3bCwgYncsIHR5cGUpCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJXAotewkJCQkJCQkJXAotCW91dCMjYndsIyNfbG9jYWwodmFsdWUsIHBvcnQpOwkJCQlcCi19CQkJCQkJCQlcCi0JCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHlwZSBpbiMjYndsKGludCBwb3J0KQkJCVwKLXsJCQkJCQkJCVwKLQlyZXR1cm4gaW4jI2J3bCMjX2xvY2FsKHBvcnQpOwkJCQlcCi19Ci0KLSNkZWZpbmUgQlVJTERJTyhid2wsIGJ3LCB0eXBlKQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCMjX2xvY2FsKHVuc2lnbmVkIHR5cGUgdmFsdWUsIGludCBwb3J0KQlcCi17CQkJCQkJCQkJXAotCWFzbSB2b2xhdGlsZSgib3V0IiAjYndsICIgJSIgI2J3ICIwLCAldzEiCQlcCi0JCSAgICAgOiA6ICJhIih2YWx1ZSksICJOZCIocG9ydCkpOwkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bCMjX2xvY2FsKGludCBwb3J0KQkJCVwKLXsJCQkJCQkJCQlcCi0JdW5zaWduZWQgdHlwZSB2YWx1ZTsJCQkJCQlcCi0JYXNtIHZvbGF0aWxlKCJpbiIgI2J3bCAiICV3MSwgJSIgI2J3ICIwIgkJXAotCQkgICAgIDogIj1hIih2YWx1ZSkgOiAiTmQiKHBvcnQpKTsJCQlcCi0JcmV0dXJuIHZhbHVlOwkJCQkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkIG91dCMjYndsIyNfbG9jYWxfcCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJXAotewkJCQkJCQkJCVwKLQlvdXQjI2J3bCMjX2xvY2FsKHZhbHVlLCBwb3J0KTsJCQkJCVwKLQlzbG93X2Rvd25faW8oKTsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHlwZSBpbiMjYndsIyNfbG9jYWxfcChpbnQgcG9ydCkJCQlcCi17CQkJCQkJCQkJXAotCXVuc2lnbmVkIHR5cGUgdmFsdWUgPSBpbiMjYndsIyNfbG9jYWwocG9ydCk7CQkJXAotCXNsb3dfZG93bl9pbygpOwkJCQkJCQlcCi0JcmV0dXJuIHZhbHVlOwkJCQkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotX19CVUlMRElPKGJ3bCwgYncsIHR5cGUpCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkIG91dCMjYndsIyNfcCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkJCVwKLXsJCQkJCQkJCQlcCi0Jb3V0IyNid2wodmFsdWUsIHBvcnQpOwkJCQkJCVwKLQlzbG93X2Rvd25faW8oKTsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHlwZSBpbiMjYndsIyNfcChpbnQgcG9ydCkJCQlcCi17CQkJCQkJCQkJXAotCXVuc2lnbmVkIHR5cGUgdmFsdWUgPSBpbiMjYndsKHBvcnQpOwkJCQlcCi0Jc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKLQlyZXR1cm4gdmFsdWU7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0cyMjYndsKGludCBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSBcCi17CQkJCQkJCQkJXAotCWFzbSB2b2xhdGlsZSgicmVwOyBvdXRzIiAjYndsCQkJCQlcCi0JCSAgICAgOiAiK1MiKGFkZHIpLCAiK2MiKGNvdW50KSA6ICJkIihwb3J0KSk7CQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkIGlucyMjYndsKGludCBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQlcCi17CQkJCQkJCQkJXAotCWFzbSB2b2xhdGlsZSgicmVwOyBpbnMiICNid2wJCQkJCVwKLQkJICAgICA6ICIrRCIoYWRkciksICIrYyIoY291bnQpIDogImQiKHBvcnQpKTsJCVwKLX0KLQotQlVJTERJTyhiLCBiLCBjaGFyKQotQlVJTERJTyh3LCB3LCBzaG9ydCkKLUJVSUxESU8obCwgLCBpbnQpCi0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9JT18zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ0MDY3OC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb182NC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfSU9fNjRfSAotI2RlZmluZSBfQVNNX1g4Nl9JT182NF9ICi0KLQotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSB4ODYgSU8gaW5zdHJ1Y3Rpb25zCi0gKiBpbmIvaW53L2lubC9vdXRiL291dHcvb3V0bCBhbmQgdGhlICJzdHJpbmcgdmVyc2lvbnMiIG9mIHRoZSBzYW1lCi0gKiAoaW5zYi9pbnN3L2luc2wvb3V0c2Ivb3V0c3cvb3V0c2wpLiBZb3UgY2FuIGFsc28gdXNlICJwYXVzaW5nIgotICogdmVyc2lvbnMgb2YgdGhlIHNpbmdsZS1JTyBpbnN0cnVjdGlvbnMgKGluYl9wL2lud19wLy4uKS4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgbm90IG1lYW50IHRvIGJlIG9iZnVzY2F0aW5nOiBpdCdzIGp1c3QgY29tcGxpY2F0ZWQKLSAqIHRvIChhKSBoYW5kbGUgaXQgYWxsIGluIGEgd2F5IHRoYXQgbWFrZXMgZ2NjIGFibGUgdG8gb3B0aW1pemUgaXQKLSAqIGFzIHdlbGwgYXMgcG9zc2libGUgYW5kIChiKSB0cnlpbmcgdG8gYXZvaWQgd3JpdGluZyB0aGUgc2FtZSB0aGluZwotICogb3ZlciBhbmQgb3ZlciBhZ2FpbiB3aXRoIHNsaWdodCB2YXJpYXRpb25zIGFuZCBwb3NzaWJseSBtYWtpbmcgYQotICogbWlzdGFrZSBzb21ld2hlcmUuCi0gKi8KLQotLyoKLSAqIFRoYW5rcyB0byBKYW1lcyB2YW4gQXJ0c2RhbGVuIGZvciBhIGJldHRlciB0aW1pbmctZml4IHRoYW4KLSAqIHRoZSB0d28gc2hvcnQganVtcHM6IHVzaW5nIG91dGIncyB0byBhIG5vbmV4aXN0ZW50IHBvcnQgc2VlbXMKLSAqIHRvIGd1YXJhbnRlZSBiZXR0ZXIgdGltaW5ncyBldmVuIG9uIGZhc3QgbWFjaGluZXMuCi0gKgotICogT24gdGhlIG90aGVyIGhhbmQsIEknZCBsaWtlIHRvIGJlIHN1cmUgb2YgYSBub24tZXhpc3RlbnQgcG9ydDoKLSAqIEkgZmVlbCBhIGJpdCB1bnNhZmUgYWJvdXQgdXNpbmcgMHg4MCAoc2hvdWxkIGJlIHNhZmUsIHRob3VnaCkKLSAqCi0gKgkJTGludXMKLSAqLwotCi0gLyoKLSAgKiAgQml0IHNpbXBsaWZpZWQgYW5kIG9wdGltaXplZCBieSBKYW4gSHViaWNrYQotICAqICBTdXBwb3J0IG9mIEJJR01FTSBhZGRlZCBieSBHZXJoYXJkIFdpY2hlcnQsIFNpZW1lbnMgQUcsIEp1bHkgMTk5OS4KLSAgKgotICAqICBpc2FfbWVtc2V0X2lvLCBpc2FfbWVtY3B5X2Zyb21pbywgaXNhX21lbWNweV90b2lvIGFkZGVkLAotICAqICBpc2FfcmVhZFt3bF0gYW5kIGlzYV93cml0ZVt3bF0gZml4ZWQKLSAgKiAgLSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KLSAgKi8KLQotZXh0ZXJuIHZvaWQgbmF0aXZlX2lvX2RlbGF5KHZvaWQpOwotCi1leHRlcm4gaW50IGlvX2RlbGF5X3R5cGU7Ci1leHRlcm4gdm9pZCBpb19kZWxheV9pbml0KHZvaWQpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfUEFSQVZJUlQpCi0jaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+Ci0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2xvd19kb3duX2lvKHZvaWQpCi17Ci0JbmF0aXZlX2lvX2RlbGF5KCk7Ci0jaWZkZWYgUkVBTExZX1NMT1dfSU8KLQluYXRpdmVfaW9fZGVsYXkoKTsKLQluYXRpdmVfaW9fZGVsYXkoKTsKLQluYXRpdmVfaW9fZGVsYXkoKTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLS8qCi0gKiBUYWxrIGFib3V0IG1pc3VzaW5nIG1hY3Jvcy4uCi0gKi8KLSNkZWZpbmUgX19PVVQxKHMsIHgpCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI3ModW5zaWduZWQgeCB2YWx1ZSwgdW5zaWduZWQgc2hvcnQgcG9ydCkgewotCi0jZGVmaW5lIF9fT1VUMihzLCBzMSwgczIpCQkJCVwKLWFzbSB2b2xhdGlsZSAoIm91dCIgI3MgIiAlIiBzMSAiMCwlIiBzMiAiMSIKLQotI2lmbmRlZiBSRUFMTFlfU0xPV19JTwotI2RlZmluZSBSRUFMTFlfU0xPV19JTwotI2RlZmluZSBVTlNFVF9SRUFMTFlfU0xPV19JTwotI2VuZGlmCi0KLSNkZWZpbmUgX19PVVQocywgczEsIHgpCQkJCQkJCVwKLQlfX09VVDEocywgeCkgX19PVVQyKHMsIHMxLCAidyIpIDogOiAiYSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpOwlcCi0JfQkJCQkJCQkJXAotCV9fT1VUMShzIyNfcCwgeCkgX19PVVQyKHMsIHMxLCAidyIpIDogOiAiYSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpOyBcCi0Jc2xvd19kb3duX2lvKCk7CQkJCQkJCVwKLX0KLQotI2RlZmluZSBfX0lOMShzKQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIFJFVFVSTl9UWVBFIGluIyNzKHVuc2lnbmVkIHNob3J0IHBvcnQpCQkJXAotewkJCQkJCQkJCVwKLQlSRVRVUk5fVFlQRSBfdjsKLQotI2RlZmluZSBfX0lOMihzLCBzMSwgczIpCQkJCQkJXAotCWFzbSB2b2xhdGlsZSAoImluIiAjcyAiICUiIHMyICIxLCUiIHMxICIwIgotCi0jZGVmaW5lIF9fSU4ocywgczEsIGkuLi4pCQkJCQkJXAotCV9fSU4xKHMpIF9fSU4yKHMsIHMxLCAidyIpIDogIj1hIiAoX3YpIDogIk5kIiAocG9ydCksICMjaSk7CVwKLQlyZXR1cm4gX3Y7CQkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JX19JTjEocyMjX3ApIF9fSU4yKHMsIHMxLCAidyIpIDogIj1hIiAoX3YpIDogIk5kIiAocG9ydCksICMjaSk7CVwKLQlzbG93X2Rvd25faW8oKTsgXAotCXJldHVybiBfdjsgfQotCi0jaWZkZWYgVU5TRVRfUkVBTExZX1NMT1dfSU8KLSN1bmRlZiBSRUFMTFlfU0xPV19JTwotI2VuZGlmCi0KLSNkZWZpbmUgX19JTlMocykJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkIGlucyMjcyh1bnNpZ25lZCBzaG9ydCBwb3J0LCB2b2lkICphZGRyLAkJXAotCQkJICB1bnNpZ25lZCBsb25nIGNvdW50KQkJCQlcCi17CQkJCQkJCQkJXAotCWFzbSB2b2xhdGlsZSAoInJlcCA7IGlucyIgI3MJCQkJCVwKLQkJICAgICAgOiAiPUQiIChhZGRyKSwgIj1jIiAoY291bnQpCQkJXAotCQkgICAgICA6ICJkIiAocG9ydCksICIwIiAoYWRkciksICIxIiAoY291bnQpKTsJCVwKLX0KLQotI2RlZmluZSBfX09VVFMocykJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkIG91dHMjI3ModW5zaWduZWQgc2hvcnQgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwJXAotCQkJICAgdW5zaWduZWQgbG9uZyBjb3VudCkJCQkJXAotewkJCQkJCQkJCVwKLQlhc20gdm9sYXRpbGUgKCJyZXAgOyBvdXRzIiAjcwkJCQkJXAotCQkgICAgICA6ICI9UyIgKGFkZHIpLCAiPWMiIChjb3VudCkJCQlcCi0JCSAgICAgIDogImQiIChwb3J0KSwgIjAiIChhZGRyKSwgIjEiIChjb3VudCkpOwkJXAotfQotCi0jZGVmaW5lIFJFVFVSTl9UWVBFIHVuc2lnbmVkIGNoYXIKLV9fSU4oYiwgIiIpCi0jdW5kZWYgUkVUVVJOX1RZUEUKLSNkZWZpbmUgUkVUVVJOX1RZUEUgdW5zaWduZWQgc2hvcnQKLV9fSU4odywgIiIpCi0jdW5kZWYgUkVUVVJOX1RZUEUKLSNkZWZpbmUgUkVUVVJOX1RZUEUgdW5zaWduZWQgaW50Ci1fX0lOKGwsICIiKQotI3VuZGVmIFJFVFVSTl9UWVBFCi0KLV9fT1VUKGIsICJiIiwgY2hhcikKLV9fT1VUKHcsICJ3Iiwgc2hvcnQpCi1fX09VVChsLCAsIGludCkKLQotX19JTlMoYikKLV9fSU5TKHcpCi1fX0lOUyhsKQotCi1fX09VVFMoYikKLV9fT1VUUyh3KQotX19PVVRTKGwpCi0KLSNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmIGRlZmluZWQoX194ODZfNjRfXykKLQotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lvbWFwLmg+Ci0KLXZvaWQgX19tZW1jcHlfZnJvbWlvKHZvaWQgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQpOwotdm9pZCBfX21lbWNweV90b2lvKHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2Zyb21pbyh2b2lkICp0bywgY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpmcm9tLAotCQkJCSB1bnNpZ25lZCBsZW4pCi17Ci0JX19tZW1jcHlfZnJvbWlvKHRvLCAodW5zaWduZWQgbG9uZylmcm9tLCBsZW4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICp0bywgY29uc3Qgdm9pZCAqZnJvbSwKLQkJCSAgICAgICB1bnNpZ25lZCBsZW4pCi17Ci0JX19tZW1jcHlfdG9pbygodW5zaWduZWQgbG9uZyl0bywgZnJvbSwgbGVuKTsKLX0KLQotdm9pZCBtZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICphLCBpbnQgYiwgc2l6ZV90IGMpOwotCi0vKgotICogSVNBIHNwYWNlIGlzICdhbHdheXMgbWFwcGVkJyBvbiBhIHR5cGljYWwgeDg2IHN5c3RlbSwgbm8gbmVlZCB0bwotICogZXhwbGljaXRseSBpb3JlbWFwKCkgaXQuIFRoZSBmYWN0IHRoYXQgdGhlIElTQSBJTyBzcGFjZSBpcyBtYXBwZWQKLSAqIHRvIFBBR0VfT0ZGU0VUIGlzIHB1cmUgY29pbmNpZGVuY2UgLSBpdCBkb2VzIG5vdCBtZWFuIElTQSB2YWx1ZXMKLSAqIGFyZSBwaHlzaWNhbCBhZGRyZXNzZXMuIFRoZSBmb2xsb3dpbmcgY29uc3RhbnQgcG9pbnRlciBjYW4gYmUKLSAqIHVzZWQgYXMgdGhlIElPLWFyZWEgcG9pbnRlciAoaXQgY2FuIGJlIGlvdW5tYXBwZWQgYXMgd2VsbCwgc28gdGhlCi0gKiBhbmFsb2d5IHdpdGggUENJIGlzIHF1aXRlIGxhcmdlKToKLSAqLwotI2RlZmluZSBfX0lTQV9JT19iYXNlICgoY2hhciBfX2lvbWVtICopKFBBR0VfT0ZGU0VUKSkKLQotI2RlZmluZSBmbHVzaF93cml0ZV9idWZmZXJzKCkKLQotLyoKLSAqIENvbnZlcnQgYSB2aXJ0dWFsIGNhY2hlZCBwb2ludGVyIHRvIGFuIHVuY2FjaGVkIHBvaW50ZXIKLSAqLwotI2RlZmluZSB4bGF0ZV9kZXZfa21lbV9wdHIocCkJcAotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogX0FTTV9YODZfSU9fNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW16b25lXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXpvbmVfNjQuaAppbmRleCBhMjlmNDhjLi4yODhiOTZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXpvbmVfNjQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXpvbmVfNjQuaApAQCAtMzksMTEgKzM5LDUgQEAKICNkZWZpbmUgbm9kZV9zdGFydF9wZm4obmlkKQkoTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuKQogI2RlZmluZSBub2RlX2VuZF9wZm4obmlkKSAgICAgICAoTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuICsJXAogCQkJCSBOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzKQotCi0jaWZkZWYgQ09ORklHX05VTUFfRU1VCi0jZGVmaW5lIEZBS0VfTk9ERV9NSU5fU0laRQkoNjQgKiAxMDI0ICogMTAyNCkKLSNkZWZpbmUgRkFLRV9OT0RFX01JTl9IQVNIX01BU0sJKH4oRkFLRV9OT0RFX01JTl9TSVpFIC0gMVVMKSkKLSNlbmRpZgotCiAjZW5kaWYKICNlbmRpZiAvKiBfQVNNX1g4Nl9NTVpPTkVfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ubWkuaAppbmRleCAxMzlkNGMxLi45M2RhOWMzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ubWkuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ubWkuaApAQCAtMTksNyArMTksNiBAQAogZXh0ZXJuIGludCBjaGVja19ubWlfd2F0Y2hkb2codm9pZCk7CiBleHRlcm4gaW50IG5taV93YXRjaGRvZ19lbmFibGVkOwogZXh0ZXJuIGludCBhdmFpbF90b19yZXNydl9wZXJmY3RyX25taV9iaXQodW5zaWduZWQgaW50KTsKLWV4dGVybiBpbnQgYXZhaWxfdG9fcmVzcnZfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgcmVzZXJ2ZV9wZXJmY3RyX25taSh1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgcmVsZWFzZV9wZXJmY3RyX25taSh1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIGludCByZXNlcnZlX2V2bnRzZWxfbm1pKHVuc2lnbmVkIGludCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hXzY0LmgKaW5kZXggYzRhZTgyMi4uODIzZTA3MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFfNjQuaApAQCAtMzYsNiArMzYsMTEgQEAKIGV4dGVybiB2b2lkIF9fY3B1aW5pdCBudW1hX2NsZWFyX25vZGUoaW50IGNwdSk7CiBleHRlcm4gdm9pZCBfX2NwdWluaXQgbnVtYV9hZGRfY3B1KGludCBjcHUpOwogZXh0ZXJuIHZvaWQgX19jcHVpbml0IG51bWFfcmVtb3ZlX2NwdShpbnQgY3B1KTsKKworI2lmZGVmIENPTkZJR19OVU1BX0VNVQorI2RlZmluZSBGQUtFX05PREVfTUlOX1NJWkUJKCh1NjQpNjQgPDwgMjApCisjZGVmaW5lIEZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLCSh+KEZBS0VfTk9ERV9NSU5fU0laRSAtIDFVTCkpCisjZW5kaWYgLyogQ09ORklHX05VTUFfRU1VICovCiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGluaXRfY3B1X3RvX25vZGUodm9pZCkJCXsgfQogc3RhdGljIGlubGluZSB2b2lkIG51bWFfc2V0X25vZGUoaW50IGNwdSwgaW50IG5vZGUpCXsgfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxLmgKaW5kZXggOWYwYTVmNS4uMTMzNzBiOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS5oCkBAIC0zMyw2ICszMywxMCBAQAogCiBleHRlcm4gdm9pZCAqeHF1YWRfcG9ydGlvOwogCisjZGVmaW5lIFhRVUFEX1BPUlRJT19CQVNFIDB4ZmU0MDAwMDAKKyNkZWZpbmUgWFFVQURfUE9SVElPX1FVQUQgMHg0MDAwMCAgLyogMjU2ayBwZXIgcXVhZC4gKi8KKyNkZWZpbmUgWFFVQURfUE9SVF9BRERSKHBvcnQsIHF1YWQpICh4cXVhZF9wb3J0aW8gKyAoWFFVQURfUE9SVElPX1FVQUQqcXVhZCkgKyBwb3J0KQorCiAvKgogICogU1lTX0NGR19EQVRBX1BSSVZfQUREUiwgc3RydWN0IGVhY2hxdWFkbWVtLCBhbmQgc3RydWN0IHN5c19jZmdfZGF0YSBhcmUgdGhlCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfdHlwZXMuaAppbmRleCA2NDJmZTM0Li5hNjY3ZjI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlX3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV90eXBlcy5oCkBAIC00MCw3ICs0MCw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLWV4dGVybiBpbnQgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwYWdlbnIpOwogZXh0ZXJuIGludCBkZXZtZW1faXNfYWxsb3dlZCh1bnNpZ25lZCBsb25nIHBhZ2Vucik7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1heF9sb3dfcGZuX21hcHBlZDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV94ODYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV94ODYuaAppbmRleCBiNGJmOWE5Li4wNWI1OGNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfeDg2LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpX3g4Ni5oCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIFBDSV9DSEVDS19FTkFCTEVfQU1EX01NQ09ORgkweDIwMDAwCiAjZGVmaW5lIFBDSV9IQVNfSU9fRUNTCQkweDQwMDAwCiAjZGVmaW5lIFBDSV9OT0FTU0lHTl9ST01TCTB4ODAwMDAKKyNkZWZpbmUgUENJX1JPT1RfTk9fQ1JTCQkweDEwMDAwMAogCiBleHRlcm4gdW5zaWduZWQgaW50IHBjaV9wcm9iZTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHBpcnFfdGFibGVfYWRkcjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAppbmRleCAxMzgwMzY3Li5iZWZkMTcyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCkBAIC0yNyw3ICsyNywxNCBAQAogLyoKICAqIEluY2x1ZGVzIGV2ZW50c2VsIGFuZCB1bml0IG1hc2sgYXMgd2VsbDoKICAqLwotI2RlZmluZSBBUkNIX1BFUkZNT05fRVZFTlRfTUFTSwkJCQkgICAgMHhmZmZmCisKKworI2RlZmluZSBJTlRFTF9BUkNIX0VWVFNFTF9NQVNLCQkweDAwMDAwMEZGVUxMCisjZGVmaW5lIElOVEVMX0FSQ0hfVU5JVF9NQVNLCQkweDAwMDBGRjAwVUxMCisjZGVmaW5lIElOVEVMX0FSQ0hfRURHRV9NQVNLCQkweDAwMDQwMDAwVUxMCisjZGVmaW5lIElOVEVMX0FSQ0hfSU5WX01BU0sJCTB4MDA4MDAwMDBVTEwKKyNkZWZpbmUgSU5URUxfQVJDSF9DTlRfTUFTSwkJMHhGRjAwMDAwMFVMTAorI2RlZmluZSBJTlRFTF9BUkNIX0VWRU5UX01BU0sJKElOVEVMX0FSQ0hfVU5JVF9NQVNLfElOVEVMX0FSQ0hfRVZUU0VMX01BU0spCiAKIC8qCiAgKiBmaWx0ZXIgbWFzayB0byB2YWxpZGF0ZSBmaXhlZCBjb3VudGVyIGV2ZW50cy4KQEAgLTM4LDcgKzQ1LDEyIEBACiAgKiAgVGhlIG90aGVyIGZpbHRlcnMgYXJlIHN1cHBvcnRlZCBieSBmaXhlZCBjb3VudGVycy4KICAqICBUaGUgYW55LXRocmVhZCBvcHRpb24gaXMgc3VwcG9ydGVkIHN0YXJ0aW5nIHdpdGggdjMuCiAgKi8KLSNkZWZpbmUgQVJDSF9QRVJGTU9OX0VWRU5UX0ZJTFRFUl9NQVNLCQkJMHhmZjg0MDAwMAorI2RlZmluZSBJTlRFTF9BUkNIX0ZJWEVEX01BU0sgXAorCShJTlRFTF9BUkNIX0NOVF9NQVNLfCBcCisJIElOVEVMX0FSQ0hfSU5WX01BU0t8IFwKKwkgSU5URUxfQVJDSF9FREdFX01BU0t8XAorCSBJTlRFTF9BUkNIX1VOSVRfTUFTS3xcCisJIElOVEVMX0FSQ0hfRVZUU0VMX01BU0spCiAKICNkZWZpbmUgQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX1NFTAkJICAgICAgMHgzYwogI2RlZmluZSBBUkNIX1BFUkZNT05fVU5IQUxURURfQ09SRV9DWUNMRVNfVU1BU0sJCSgweDAwIDw8IDgpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKaW5kZXggMGU4YzJhMC4uMjcxZGU5NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGdhbGxvYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMjMsNiArMjMsMTEgQEAKICNlbmRpZgogCiAvKgorICogRmxhZ3MgdG8gdXNlIHdoZW4gYWxsb2NhdGluZyBhIHVzZXIgcGFnZSB0YWJsZSBwYWdlLgorICovCitleHRlcm4gZ2ZwX3QgX191c2VycHRlX2FsbG9jX2dmcDsKKworLyoKICAqIEFsbG9jYXRlIGFuZCBmcmVlIHBhZ2UgdGFibGVzLgogICovCiBleHRlcm4gcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICopOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCmluZGV4IDAxZmQ5NDYuLmEyODY2ODMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKQEAgLTgwLDcgKzgwLDcgQEAKICAqIFRoZSBpMzg2IGRvZXNuJ3QgaGF2ZSBhbnkgZXh0ZXJuYWwgTU1VIGluZm86IHRoZSBrZXJuZWwgcGFnZQogICogdGFibGVzIGNvbnRhaW4gYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uCiAgKi8KLSNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIHB0ZSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlcCkgZG8geyB9IHdoaWxlICgwKQogCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKaW5kZXggYzU3YTMwMS4uMTgxYmU1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaApAQCAtMTI5LDcgKzEyOSw3IEBACiAjZGVmaW5lIHB0ZV91bm1hcChwdGUpIC8qIE5PUCAqLwogI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkgLyogTk9QICovCiAKLSNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIHB0ZSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlcCkgZG8geyB9IHdoaWxlICgwKQogCiAvKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5ICovCiAjaWYgX1BBR0VfQklUX0ZJTEUgPCBfUEFHRV9CSVRfUFJPVE5PTkUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggOWQzNjlmNi4uMjAxMDI4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTI3NCwxMCArMjc0LDYgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLS8qIEdldCBOdGggYXJndW1lbnQgYXQgZnVuY3Rpb24gY2FsbCAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmVnc19nZXRfYXJndW1lbnRfbnRoKHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJCQkgICB1bnNpZ25lZCBpbnQgbik7Ci0KIC8qCiAgKiBUaGVzZSBhcmUgZGVmaW5lZCBhcyBwZXIgbGludXgvcHRyYWNlLmgsIHdoaWNoIHNlZS4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcndzZW0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3J3c2VtLmgKaW5kZXggY2E3NTE3ZC4uNjA2ZWRlMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcndzZW0uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yd3NlbS5oCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgorI2luY2x1ZGUgPGFzbS9hc20uaD4KIAogc3RydWN0IHJ3c2VtX3dhaXRlcjsKIApAQCAtNTUsMTcgKzU2LDI4IEBACiAKIC8qCiAgKiB0aGUgc2VtYXBob3JlIGRlZmluaXRpb24KKyAqCisgKiBUaGUgYmlhcyB2YWx1ZXMgYW5kIHRoZSBjb3VudGVyIHR5cGUgbGltaXRzIHRoZSBudW1iZXIgb2YKKyAqIHBvdGVudGlhbCByZWFkZXJzL3dyaXRlcnMgdG8gMzI3NjcgZm9yIDMyIGJpdHMgYW5kIDIxNDc0ODM2NDcKKyAqIGZvciA2NCBiaXRzLgogICovCiAKLSNkZWZpbmUgUldTRU1fVU5MT0NLRURfVkFMVUUJCTB4MDAwMDAwMDAKLSNkZWZpbmUgUldTRU1fQUNUSVZFX0JJQVMJCTB4MDAwMDAwMDEKLSNkZWZpbmUgUldTRU1fQUNUSVZFX01BU0sJCTB4MDAwMGZmZmYKLSNkZWZpbmUgUldTRU1fV0FJVElOR19CSUFTCQkoLTB4MDAwMTAwMDApCisjaWZkZWYgQ09ORklHX1g4Nl82NAorIyBkZWZpbmUgUldTRU1fQUNUSVZFX01BU0sJCTB4ZmZmZmZmZmZMCisjZWxzZQorIyBkZWZpbmUgUldTRU1fQUNUSVZFX01BU0sJCTB4MDAwMGZmZmZMCisjZW5kaWYKKworI2RlZmluZSBSV1NFTV9VTkxPQ0tFRF9WQUxVRQkJMHgwMDAwMDAwMEwKKyNkZWZpbmUgUldTRU1fQUNUSVZFX0JJQVMJCTB4MDAwMDAwMDFMCisjZGVmaW5lIFJXU0VNX1dBSVRJTkdfQklBUwkJKC1SV1NFTV9BQ1RJVkVfTUFTSy0xKQogI2RlZmluZSBSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTCQlSV1NFTV9BQ1RJVkVfQklBUwogI2RlZmluZSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUwkJKFJXU0VNX1dBSVRJTkdfQklBUyArIFJXU0VNX0FDVElWRV9CSUFTKQogCit0eXBlZGVmIHNpZ25lZCBsb25nIHJ3c2VtX2NvdW50X3Q7CisKIHN0cnVjdCByd19zZW1hcGhvcmUgewotCXNpZ25lZCBsb25nCQljb3VudDsKKwlyd3NlbV9jb3VudF90CQljb3VudDsKIAlzcGlubG9ja190CQl3YWl0X2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAl3YWl0X2xpc3Q7CiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKQEAgLTEwNSw3ICsxMTcsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fZG93bl9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIGRvd25fcmVhZFxuXHQiCi0JCSAgICAgTE9DS19QUkVGSVggIiAgaW5jbCAgICAgICglJWVheClcblx0IgorCQkgICAgIExPQ0tfUFJFRklYIF9BU01fSU5DICIoJTEpXG5cdCIKIAkJICAgICAvKiBhZGRzIDB4MDAwMDAwMDEsIHJldHVybnMgdGhlIG9sZCB2YWx1ZSAqLwogCQkgICAgICIgIGpucyAgICAgICAgMWZcbiIKIAkJICAgICAiICBjYWxsIGNhbGxfcndzZW1fZG93bl9yZWFkX2ZhaWxlZFxuIgpAQCAtMTIxLDE0ICsxMzMsMTQgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgX19kb3duX3JlYWRfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7Ci0JX19zMzIgcmVzdWx0LCB0bXA7CisJcndzZW1fY291bnRfdCByZXN1bHQsIHRtcDsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fZG93bl9yZWFkX3RyeWxvY2tcblx0IgotCQkgICAgICIgIG1vdmwgICAgICAlMCwlMVxuXHQiCisJCSAgICAgIiAgbW92ICAgICAgICAgICUwLCUxXG5cdCIKIAkJICAgICAiMTpcblx0IgotCQkgICAgICIgIG1vdmwJICAgICAlMSwlMlxuXHQiCi0JCSAgICAgIiAgYWRkbCAgICAgICUzLCUyXG5cdCIKKwkJICAgICAiICBtb3YgICAgICAgICAgJTEsJTJcblx0IgorCQkgICAgICIgIGFkZCAgICAgICAgICAlMywlMlxuXHQiCiAJCSAgICAgIiAgamxlCSAgICAgMmZcblx0IgotCQkgICAgIExPQ0tfUFJFRklYICIgIGNtcHhjaGdsICAlMiwlMFxuXHQiCisJCSAgICAgTE9DS19QUkVGSVggIiAgY21weGNoZyAgJTIsJTBcblx0IgogCQkgICAgICIgIGpuegkgICAgIDFiXG5cdCIKIAkJICAgICAiMjpcblx0IgogCQkgICAgICIjIGVuZGluZyBfX2Rvd25fcmVhZF90cnlsb2NrXG5cdCIKQEAgLTE0MywxMyArMTU1LDEzIEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25fd3JpdGVfbmVzdGVkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgaW50IHN1YmNsYXNzKQogewotCWludCB0bXA7CisJcndzZW1fY291bnRfdCB0bXA7CiAKIAl0bXAgPSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUzsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIGRvd25fd3JpdGVcblx0IgotCQkgICAgIExPQ0tfUFJFRklYICIgIHhhZGQgICAgICAlJWVkeCwoJSVlYXgpXG5cdCIKKwkJICAgICBMT0NLX1BSRUZJWCAiICB4YWRkICAgICAgJTEsKCUyKVxuXHQiCiAJCSAgICAgLyogc3VidHJhY3QgMHgwMDAwZmZmZiwgcmV0dXJucyB0aGUgb2xkIHZhbHVlICovCi0JCSAgICAgIiAgdGVzdGwgICAgICUlZWR4LCUlZWR4XG5cdCIKKwkJICAgICAiICB0ZXN0ICAgICAgJTEsJTFcblx0IgogCQkgICAgIC8qIHdhcyB0aGUgY291bnQgMCBiZWZvcmU/ICovCiAJCSAgICAgIiAganogICAgICAgIDFmXG4iCiAJCSAgICAgIiAgY2FsbCBjYWxsX3J3c2VtX2Rvd25fd3JpdGVfZmFpbGVkXG4iCkBAIC0xNzAsOSArMTgyLDkgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgX19kb3duX3dyaXRlX3RyeWxvY2soc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQogewotCXNpZ25lZCBsb25nIHJldCA9IGNtcHhjaGcoJnNlbS0+Y291bnQsCi0JCQkJICBSV1NFTV9VTkxPQ0tFRF9WQUxVRSwKLQkJCQkgIFJXU0VNX0FDVElWRV9XUklURV9CSUFTKTsKKwlyd3NlbV9jb3VudF90IHJldCA9IGNtcHhjaGcoJnNlbS0+Y291bnQsCisJCQkJICAgIFJXU0VNX1VOTE9DS0VEX1ZBTFVFLAorCQkJCSAgICBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUyk7CiAJaWYgKHJldCA9PSBSV1NFTV9VTkxPQ0tFRF9WQUxVRSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CkBAIC0xODMsOSArMTk1LDkgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fdXBfcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7Ci0JX19zMzIgdG1wID0gLVJXU0VNX0FDVElWRV9SRUFEX0JJQVM7CisJcndzZW1fY291bnRfdCB0bXAgPSAtUldTRU1fQUNUSVZFX1JFQURfQklBUzsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fdXBfcmVhZFxuXHQiCi0JCSAgICAgTE9DS19QUkVGSVggIiAgeGFkZCAgICAgICUlZWR4LCglJWVheClcblx0IgorCQkgICAgIExPQ0tfUFJFRklYICIgIHhhZGQgICAgICAlMSwoJTIpXG5cdCIKIAkJICAgICAvKiBzdWJ0cmFjdHMgMSwgcmV0dXJucyB0aGUgb2xkIHZhbHVlICovCiAJCSAgICAgIiAgam5zICAgICAgICAxZlxuXHQiCiAJCSAgICAgIiAgY2FsbCBjYWxsX3J3c2VtX3dha2VcbiIKQEAgLTIwMSwxOCArMjEzLDE4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKKwlyd3NlbV9jb3VudF90IHRtcDsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fdXBfd3JpdGVcblx0IgotCQkgICAgICIgIG1vdmwgICAgICAlMiwlJWVkeFxuXHQiCi0JCSAgICAgTE9DS19QUkVGSVggIiAgeGFkZGwgICAgICUlZWR4LCglJWVheClcblx0IgorCQkgICAgIExPQ0tfUFJFRklYICIgIHhhZGQgICAgICAlMSwoJTIpXG5cdCIKIAkJICAgICAvKiB0cmllcyB0byB0cmFuc2l0aW9uCiAJCQkweGZmZmYwMDAxIC0+IDB4MDAwMDAwMDAgKi8KIAkJICAgICAiICBqeiAgICAgICAxZlxuIgogCQkgICAgICIgIGNhbGwgY2FsbF9yd3NlbV93YWtlXG4iCiAJCSAgICAgIjE6XG5cdCIKIAkJICAgICAiIyBlbmRpbmcgX191cF93cml0ZVxuIgotCQkgICAgIDogIittIiAoc2VtLT5jb3VudCkKLQkJICAgICA6ICJhIiAoc2VtKSwgImkiICgtUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpCi0JCSAgICAgOiAibWVtb3J5IiwgImNjIiwgImVkeCIpOworCQkgICAgIDogIittIiAoc2VtLT5jb3VudCksICI9ZCIgKHRtcCkKKwkJICAgICA6ICJhIiAoc2VtKSwgIjEiICgtUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpCisJCSAgICAgOiAibWVtb3J5IiwgImNjIik7CiB9CiAKIC8qCkBAIC0yMjEsMzMgKzIzMywzOCBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fZG93bmdyYWRlX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fZG93bmdyYWRlX3dyaXRlXG5cdCIKLQkJICAgICBMT0NLX1BSRUZJWCAiICBhZGRsICAgICAgJTIsKCUlZWF4KVxuXHQiCi0JCSAgICAgLyogdHJhbnNpdGlvbnMgMHhaWlpaMDAwMSAtPiAweFlZWVkwMDAxICovCisJCSAgICAgTE9DS19QUkVGSVggX0FTTV9BREQgIiUyLCglMSlcblx0IgorCQkgICAgIC8qCisJCSAgICAgICogdHJhbnNpdGlvbnMgMHhaWlpaMDAwMSAtPiAweFlZWVkwMDAxIChpMzg2KQorCQkgICAgICAqICAgICAweFpaWlpaWlpaMDAwMDAwMDEgLT4gMHhZWVlZWVlZWTAwMDAwMDAxICh4ODZfNjQpCisJCSAgICAgICovCiAJCSAgICAgIiAgam5zICAgICAgIDFmXG5cdCIKIAkJICAgICAiICBjYWxsIGNhbGxfcndzZW1fZG93bmdyYWRlX3dha2VcbiIKIAkJICAgICAiMTpcblx0IgogCQkgICAgICIjIGVuZGluZyBfX2Rvd25ncmFkZV93cml0ZVxuIgogCQkgICAgIDogIittIiAoc2VtLT5jb3VudCkKLQkJICAgICA6ICJhIiAoc2VtKSwgImkiICgtUldTRU1fV0FJVElOR19CSUFTKQorCQkgICAgIDogImEiIChzZW0pLCAiZXIiICgtUldTRU1fV0FJVElOR19CSUFTKQogCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwogfQogCiAvKgogICogaW1wbGVtZW50IGF0b21pYyBhZGQgZnVuY3Rpb25hbGl0eQogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcndzZW1fYXRvbWljX2FkZChpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3N0YXRpYyBpbmxpbmUgdm9pZCByd3NlbV9hdG9taWNfYWRkKHJ3c2VtX2NvdW50X3QgZGVsdGEsCisJCQkJICAgIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKLQlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggImFkZGwgJTEsJTAiCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYIF9BU01fQUREICIlMSwlMCIKIAkJICAgICA6ICIrbSIgKHNlbS0+Y291bnQpCi0JCSAgICAgOiAiaXIiIChkZWx0YSkpOworCQkgICAgIDogImVyIiAoZGVsdGEpKTsKIH0KIAogLyoKICAqIGltcGxlbWVudCBleGNoYW5nZSBhbmQgYWRkIGZ1bmN0aW9uYWxpdHkKICAqLwotc3RhdGljIGlubGluZSBpbnQgcndzZW1fYXRvbWljX3VwZGF0ZShpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3N0YXRpYyBpbmxpbmUgcndzZW1fY291bnRfdCByd3NlbV9hdG9taWNfdXBkYXRlKHJ3c2VtX2NvdW50X3QgZGVsdGEsCisJCQkJCQlzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7Ci0JaW50IHRtcCA9IGRlbHRhOworCXJ3c2VtX2NvdW50X3QgdG1wID0gZGVsdGE7CiAKIAlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggInhhZGQgJTAsJTEiCiAJCSAgICAgOiAiK3IiICh0bXApLCAiK20iIChzZW0tPmNvdW50KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCAxZTc5Njc4Li40Y2ZjOTA4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaApAQCAtMTM1LDYgKzEzNSw4IEBACiB2b2lkIG5hdGl2ZV9jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpOwogdm9pZCBuYXRpdmVfcGxheV9kZWFkKHZvaWQpOwogdm9pZCBwbGF5X2RlYWRfY29tbW9uKHZvaWQpOwordm9pZCB3YmludmRfb25fY3B1KGludCBjcHUpOworaW50IHdiaW52ZF9vbl9hbGxfY3B1cyh2b2lkKTsKIAogdm9pZCBuYXRpdmVfc2VuZF9jYWxsX2Z1bmNfaXBpKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKTsKIHZvaWQgbmF0aXZlX3NlbmRfY2FsbF9mdW5jX3NpbmdsZV9pcGkoaW50IGNwdSk7CkBAIC0xNDcsNiArMTQ5LDEzIEBACiB7CiAJcmV0dXJuIGNwdW1hc2tfd2VpZ2h0KGNwdV9jYWxsb3V0X21hc2spOwogfQorI2Vsc2UgLyogIUNPTkZJR19TTVAgKi8KKyNkZWZpbmUgd2JpbnZkX29uX2NwdShjcHUpICAgICB3YmludmQoKQorc3RhdGljIGlubGluZSBpbnQgd2JpbnZkX29uX2FsbF9jcHVzKHZvaWQpCit7CisJd2JpbnZkKCk7CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiBleHRlcm4gdW5zaWduZWQgZGlzYWJsZWRfY3B1cyBfX2NwdWluaXRkYXRhOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oCmluZGV4IDM1ZTg5MTIuLjRkYWI3OGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKQEAgLTMsOCArMyw2IEBACiAKIGV4dGVybiBpbnQga3N0YWNrX2RlcHRoX3RvX3ByaW50OwogCi1pbnQgeDg2X2lzX3N0YWNrX2lkKGludCBpZCwgY2hhciAqbmFtZSk7Ci0KIHN0cnVjdCB0aHJlYWRfaW5mbzsKIHN0cnVjdCBzdGFja3RyYWNlX29wczsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbC5oCmluZGV4IDhkMzNiYzUuLmM0YTM0OGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTE2LDYgKzE2LDggQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCitleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBzeXNfY2FsbF90YWJsZVtdOworCiAvKgogICogT25seSB0aGUgbG93IDMyIGJpdHMgb2Ygb3JpZ19heCBhcmUgbWVhbmluZ2Z1bCwgc28gd2UgcmV0dXJuIGludC4KICAqIFRoaXMgaW1wb3J0YW50bHkgaWdub3JlcyB0aGUgaGlnaCBiaXRzIG9uIDY0LWJpdCwgc28gY29tcGFyaXNvbnMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaAppbmRleCA1MzVlNDIxNC4uMzE2NzA4ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaApAQCAtOCw2ICs4LDggQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgorI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogLyoKQEAgLTE2LDcgKzE4LDI0IEBACiAKIC8qIEhhbmRsZXMgZXhjZXB0aW9ucyBpbiBib3RoIHRvIGFuZCBmcm9tLCBidXQgZG9lc24ndCBkbyBhY2Nlc3Nfb2sgKi8KIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBsb25nCi1jb3B5X3VzZXJfZ2VuZXJpYyh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbGVuKTsKK2NvcHlfdXNlcl9nZW5lcmljX3N0cmluZyh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbGVuKTsKK19fbXVzdF9jaGVjayB1bnNpZ25lZCBsb25nCitjb3B5X3VzZXJfZ2VuZXJpY191bnJvbGxlZCh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbGVuKTsKKworc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgbG9uZworY29weV91c2VyX2dlbmVyaWModm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxlbikKK3sKKwl1bnNpZ25lZCByZXQ7CisKKwlhbHRlcm5hdGl2ZV9jYWxsKGNvcHlfdXNlcl9nZW5lcmljX3Vucm9sbGVkLAorCQkJIGNvcHlfdXNlcl9nZW5lcmljX3N0cmluZywKKwkJCSBYODZfRkVBVFVSRV9SRVBfR09PRCwKKwkJCSBBU01fT1VUUFVUMigiPWEiIChyZXQpLCAiPUQiICh0byksICI9UyIgKGZyb20pLAorCQkJCSAgICAgIj1kIiAobGVuKSksCisJCQkgIjEiICh0byksICIyIiAoZnJvbSksICIzIiAobGVuKQorCQkJIDogIm1lbW9yeSIsICJyY3giLCAicjgiLCAicjkiLCAicjEwIiwgInIxMSIpOworCXJldHVybiByZXQ7Cit9CiAKIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBsb25nCiBfY29weV90b191c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbGVuKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VzZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VzZXIuaAppbmRleCA5OTk4NzNiLi4yNDUzMmM3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91c2VyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXNlci5oCkBAIC0xLDUgKzEsNjMgQEAKKyNpZm5kZWYgX0FTTV9YODZfVVNFUl9ICisjZGVmaW5lIF9BU01fWDg2X1VTRVJfSAorCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogIyBpbmNsdWRlICJ1c2VyXzMyLmgiCiAjZWxzZQogIyBpbmNsdWRlICJ1c2VyXzY0LmgiCiAjZW5kaWYKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdHJ1Y3QgdXNlcl95bW1oX3JlZ3MgeworCS8qIDE2ICogMTYgYnl0ZXMgZm9yIGVhY2ggWU1NSC1yZWcgKi8KKwlfX3UzMiB5bW1oX3NwYWNlWzY0XTsKK307CisKK3N0cnVjdCB1c2VyX3hzYXZlX2hkciB7CisJX191NjQgeHN0YXRlX2J2OworCV9fdTY0IHJlc2VydmVkMVsyXTsKKwlfX3U2NCByZXNlcnZlZDJbNV07Cit9OworCisvKgorICogVGhlIHN0cnVjdHVyZSBsYXlvdXQgb2YgdXNlcl94c3RhdGVyZWdzLCB1c2VkIGZvciBleHBvcnRpbmcgdGhlCisgKiBleHRlbmRlZCByZWdpc3RlciBzdGF0ZSB0aHJvdWdoIHB0cmFjZSBhbmQgY29yZS1kdW1wIChOVF9YODZfWFNUQVRFIG5vdGUpCisgKiBpbnRlcmZhY2VzIHdpbGwgYmUgc2FtZSBhcyB0aGUgbWVtb3J5IGxheW91dCBvZiB4c2F2ZSB1c2VkIGJ5IHRoZSBwcm9jZXNzb3IKKyAqIChleGNlcHQgZm9yIHRoZSBieXRlcyA0NjQuLjUxMSwgd2hpY2ggY2FuIGJlIHVzZWQgYnkgdGhlIHNvZnR3YXJlKSBhbmQgaGVuY2UKKyAqIHRoZSBzaXplIG9mIHRoaXMgc3RydWN0dXJlIHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUKKyAqIHByb2Nlc3NvciBhbmQgT1MuIFRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgdGhhdCB1c2VycyBuZWVkIHRvIHVzZSBjYW4gYmUKKyAqIG9idGFpbmVkIGJ5IGRvaW5nOgorICogICAgIGNwdWlkX2NvdW50KDB4ZCwgMCwgJmVheCwgJnB0cmFjZV94c3RhdGVyZWdzX3N0cnVjdF9zaXplLCAmZWN4LCAmZWR4KTsKKyAqIGkuZS4sIGNwdWlkLihlYXg9MHhkLGVjeD0wKS5lYnggd2lsbCBiZSB0aGUgc2l6ZSB0aGF0IHVzZXIgKGRlYnVnZ2VycywgZXRjLikKKyAqIG5lZWQgdG8gdXNlLgorICoKKyAqIEZvciBub3csIG9ubHkgdGhlIGZpcnN0IDggYnl0ZXMgb2YgdGhlIHNvZnR3YXJlIHVzYWJsZSBieXRlc1s0NjQuLjQ3MV0gd2lsbAorICogYmUgdXNlZCBhbmQgd2lsbCBiZSBzZXQgdG8gT1MgZW5hYmxlZCB4c3RhdGUgbWFzayAod2hpY2ggaXMgc2FtZSBhcyB0aGUKKyAqIDY0Yml0IG1hc2sgcmV0dXJuZWQgYnkgdGhlIHhnZXRididzIHhDUjApLiAgVXNlcnMgKGFuYWx5emluZyBjb3JlIGR1bXAKKyAqIHJlbW90ZWx5LCBldGMuKSBjYW4gdXNlIHRoaXMgbWFzayBhcyB3ZWxsIGFzIHRoZSBtYXNrIHNhdmVkIGluIHRoZQorICogeHN0YXRlX2hkciBieXRlcyBhbmQgaW50ZXJwcmV0IHdoYXQgc3RhdGVzIHRoZSBwcm9jZXNzb3IvT1Mgc3VwcG9ydHMKKyAqIGFuZCB3aGF0IHN0YXRlcyBhcmUgaW4gbW9kaWZpZWQvaW5pdGlhbGl6ZWQgY29uZGl0aW9ucyBmb3IgdGhlCisgKiBwYXJ0aWN1bGFyIHByb2Nlc3MvdGhyZWFkLgorICoKKyAqIEFsc28gd2hlbiB0aGUgdXNlciBtb2RpZmllcyBjZXJ0YWluIHN0YXRlIEZQL1NTRS9ldGMgdGhyb3VnaCB0aGUKKyAqIHB0cmFjZSBpbnRlcmZhY2UsIHRoZXkgbXVzdCBlbnN1cmUgdGhhdCB0aGUgeHNhdmVfaGRyLnhzdGF0ZV9idgorICogYnl0ZXNbNTEyLi41MTldIG9mIHRoZSBtZW1vcnkgbGF5b3V0IGFyZSB1cGRhdGVkIGNvcnJlc3BvbmRpbmdseS4KKyAqIGkuZS4sIGZvciBleGFtcGxlIHdoZW4gRlAgc3RhdGUgaXMgbW9kaWZpZWQgdG8gYSBub24taW5pdCBzdGF0ZSwKKyAqIHhzYXZlX2hkci54c3RhdGVfYnYncyBiaXQgMCBtdXN0IGJlIHNldCB0byAnMScsIHdoZW4gU1NFIGlzIG1vZGlmaWVkIHRvCisgKiBub24taW5pdCBzdGF0ZSwgeHNhdmVfaGRyLnhzdGF0ZV9ididzIGJpdCAxIG11c3QgdG8gYmUgc2V0IHRvICcxJywgZXRjLgorICovCisjZGVmaW5lIFVTRVJfWFNUQVRFX0ZYX1NXX1dPUkRTIDYKKyNkZWZpbmUgVVNFUl9YU1RBVEVfWENSMF9XT1JECTAKKworc3RydWN0IHVzZXJfeHN0YXRlcmVncyB7CisJc3RydWN0IHsKKwkJX191NjQgZnB4X3NwYWNlWzU4XTsKKwkJX191NjQgeHN0YXRlX2Z4X3N3W1VTRVJfWFNUQVRFX0ZYX1NXX1dPUkRTXTsKKwl9IGkzODc7CisJc3RydWN0IHVzZXJfeHNhdmVfaGRyIHhzYXZlX2hkcjsKKwlzdHJ1Y3QgdXNlcl95bW1oX3JlZ3MgeW1taDsKKwkvKiBmdXJ0aGVyIHByb2Nlc3NvciBzdGF0ZSBleHRlbnNpb25zIGdvIGhlcmUgKi8KK307CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9VU0VSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L2Jpb3MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L2Jpb3MuaAppbmRleCAyNzUxZjMwLi43MTYwNWM3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di9iaW9zLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvYmlvcy5oCkBAIC0xOCw4ICsxOCw4IEBACiAgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKICAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0IChjKSBSdXNzIEFuZGVyc29uCisgKiAgQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKGMpIFJ1c3MgQW5kZXJzb24gPHJqYUBzZ2kuY29tPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KQEAgLTM2LDcgKzM2LDggQEAKIAlVVl9CSU9TX1dBVENITElTVF9BTExPQywKIAlVVl9CSU9TX1dBVENITElTVF9GUkVFLAogCVVWX0JJT1NfTUVNUFJPVEVDVCwKLQlVVl9CSU9TX0dFVF9QQVJUSVRJT05fQUREUgorCVVWX0JJT1NfR0VUX1BBUlRJVElPTl9BRERSLAorCVVWX0JJT1NfU0VUX0xFR0FDWV9WR0FfVEFSR0VUCiB9OwogCiAvKgpAQCAtODksMTMgKzkwLDE0IEBACiBleHRlcm4gczY0IHV2X2Jpb3NfY2FsbF9pcnFzYXZlKGVudW0gdXZfYmlvc19jbWQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0KTsKIGV4dGVybiBzNjQgdXZfYmlvc19jYWxsX3JlZW50cmFudChlbnVtIHV2X2Jpb3NfY21kLCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCk7CiAKLWV4dGVybiBzNjQgdXZfYmlvc19nZXRfc25faW5mbyhpbnQsIGludCAqLCBsb25nICosIGxvbmcgKiwgbG9uZyAqKTsKK2V4dGVybiBzNjQgdXZfYmlvc19nZXRfc25faW5mbyhpbnQsIGludCAqLCBsb25nICosIGxvbmcgKiwgbG9uZyAqLCBsb25nICopOwogZXh0ZXJuIHM2NCB1dl9iaW9zX2ZyZXFfYmFzZSh1NjQsIHU2NCAqKTsKIGV4dGVybiBpbnQgdXZfYmlvc19tcV93YXRjaGxpc3RfYWxsb2ModW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50LAogCQkJCQl1bnNpZ25lZCBsb25nICopOwogZXh0ZXJuIGludCB1dl9iaW9zX21xX3dhdGNobGlzdF9mcmVlKGludCwgaW50KTsKIGV4dGVybiBzNjQgdXZfYmlvc19jaGFuZ2VfbWVtcHJvdGVjdCh1NjQsIHU2NCwgZW51bSB1dl9tZW1wcm90ZWN0KTsKIGV4dGVybiBzNjQgdXZfYmlvc19yZXNlcnZlZF9wYWdlX3BhKHU2NCwgdTY0ICosIHU2NCAqLCB1NjQgKik7CitleHRlcm4gaW50IHV2X2Jpb3Nfc2V0X2xlZ2FjeV92Z2FfdGFyZ2V0KGJvb2wgZGVjb2RlLCBpbnQgZG9tYWluLCBpbnQgYnVzKTsKIAogZXh0ZXJuIHZvaWQgdXZfYmlvc19pbml0KHZvaWQpOwogCkBAIC0xMDQsNiArMTA2LDcgQEAKIGV4dGVybiBsb25nIHNuX3BhcnRpdGlvbl9pZDsKIGV4dGVybiBsb25nIHNuX2NvaGVyZW5jeV9pZDsKIGV4dGVybiBsb25nIHNuX3JlZ2lvbl9zaXplOworZXh0ZXJuIGxvbmcgc3lzdGVtX3NlcmlhbF9udW1iZXI7CiAjZGVmaW5lIHBhcnRpdGlvbl9jb2hlcmVuY2VfaWQoKQkoc25fY29oZXJlbmN5X2lkKQogCiBleHRlcm4gc3RydWN0IGtvYmplY3QgKnNnaV91dl9rb2JqOwkvKiAvc3lzL2Zpcm13YXJlL3NnaV91diAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2LmgKaW5kZXggYzBhMDFiNS4uM2JiOTQ5MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXYuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91di5oCkBAIC0xMSw2ICsxMSw3IEBACiBleHRlcm4gZW51bSB1dl9zeXN0ZW1fdHlwZSBnZXRfdXZfc3lzdGVtX3R5cGUodm9pZCk7CiBleHRlcm4gaW50IGlzX3V2X3N5c3RlbSh2b2lkKTsKIGV4dGVybiB2b2lkIHV2X2NwdV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgdXZfbm1pX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCB1dl9zeXN0ZW1faW5pdCh2b2lkKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqdXZfZmx1c2hfdGxiX290aGVycyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKIAkJCQkJCSBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKaW5kZXggNDBiZTgxMy4uMTRjYzc0YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKQEAgLTMyOSw3ICszMjksOCBAQAogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZfZ2xvYmFsX2dydV9tbXJfYWRkcmVzcyhpbnQgcG5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewotCXJldHVybiBVVl9HTE9CQUxfR1JVX01NUl9CQVNFIHwgb2Zmc2V0IHwgKHBub2RlIDw8IHV2X2h1Yl9pbmZvLT5tX3ZhbCk7CisJcmV0dXJuIFVWX0dMT0JBTF9HUlVfTU1SX0JBU0UgfCBvZmZzZXQgfAorCQkoKHVuc2lnbmVkIGxvbmcpcG5vZGUgPDwgdXZfaHViX2luZm8tPm1fdmFsKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHV2X3dyaXRlX2dsb2JhbF9tbXI4KGludCBwbm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGNoYXIgdmFsKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKaW5kZXggZWEwZThlYS4uNjBjYzM1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oCkBAIC0xMjYsNiArMTI2LDcgQEAKICAqIEBnZXRfd2FsbGNsb2NrOgkJZ2V0IHRpbWUgZnJvbSBIVyBjbG9jayBsaWtlIFJUQyBldGMuCiAgKiBAc2V0X3dhbGxjbG9jazoJCXNldCB0aW1lIGJhY2sgdG8gSFcgY2xvY2sKICAqIEBpc191bnRyYWNrZWRfcGF0X3JhbmdlCWV4Y2x1ZGUgZnJvbSBQQVQgbG9naWMKKyAqIEBubWlfaW5pdAkJCWVuYWJsZSBOTUkgb24gY3B1cwogICovCiBzdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB7CiAJdW5zaWduZWQgbG9uZyAoKmNhbGlicmF0ZV90c2MpKHZvaWQpOwpAQCAtMTMzLDYgKzEzNCw3IEBACiAJaW50ICgqc2V0X3dhbGxjbG9jaykodW5zaWduZWQgbG9uZyBub3d0aW1lKTsKIAl2b2lkICgqaW9tbXVfc2h1dGRvd24pKHZvaWQpOwogCWJvb2wgKCppc191bnRyYWNrZWRfcGF0X3JhbmdlKSh1NjQgc3RhcnQsIHU2NCBlbmQpOworCXZvaWQgKCpubWlfaW5pdCkodm9pZCk7CiB9OwogCiBleHRlcm4gc3RydWN0IHg4Nl9pbml0X29wcyB4ODZfaW5pdDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hzYXZlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94c2F2ZS5oCmluZGV4IDcyN2FjYzEuLmRkYzA0Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hzYXZlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veHNhdmUuaApAQCAtMjcsOSArMjcsMTEgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgeHN0YXRlX3NpemU7CiBleHRlcm4gdTY0IHBjbnR4dF9tYXNrOwogZXh0ZXJuIHN0cnVjdCB4c2F2ZV9zdHJ1Y3QgKmluaXRfeHN0YXRlX2J1ZjsKK2V4dGVybiB1NjQgeHN0YXRlX2Z4X3N3X2J5dGVzW1VTRVJfWFNUQVRFX0ZYX1NXX1dPUkRTXTsKIAogZXh0ZXJuIHZvaWQgeHNhdmVfY250eHRfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHhzYXZlX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB1cGRhdGVfcmVnc2V0X3hzdGF0ZV9pbmZvKHVuc2lnbmVkIGludCBzaXplLCB1NjQgeHN0YXRlX21hc2spOwogZXh0ZXJuIGludCBpbml0X2ZwdShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKIGV4dGVybiBpbnQgY2hlY2tfZm9yX3hzdGF0ZShzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0IF9fdXNlciAqYnVmLAogCQkJICAgIHZvaWQgX191c2VyICpmcHN0YXRlLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCmluZGV4IGFmMWM1ODMuLmY5NTcwMzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIAogI2lmZGVmCUNPTkZJR19YODZfNjQKICMgaW5jbHVkZSA8YXNtL3Byb3RvLmg+CisjIGluY2x1ZGUgPGFzbS9udW1hXzY0Lmg+CiAjZW5kaWYJCQkJLyogWDg2ICovCiAKICNkZWZpbmUgQkFEX01BRFRfRU5UUlkoZW50cnksIGVuZCkgKAkJCQkJICAgIFwKQEAgLTQ4Miw2ICs0ODMsMjUgQEAKICAqLwogI2lmZGVmIENPTkZJR19BQ1BJX0hPVFBMVUdfQ1BVCiAKK3N0YXRpYyB2b2lkIGFjcGlfbWFwX2NwdTJub2RlKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IGNwdSwgaW50IHBoeXNpZCkKK3sKKyNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCisJaW50IG5pZDsKKworCW5pZCA9IGFjcGlfZ2V0X25vZGUoaGFuZGxlKTsKKwlpZiAobmlkID09IC0xIHx8ICFub2RlX29ubGluZShuaWQpKQorCQlyZXR1cm47CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWFwaWNpZF90b19ub2RlW3BoeXNpZF0gPSBuaWQ7CisJbnVtYV9zZXRfbm9kZShjcHUsIG5pZCk7CisjZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCisJYXBpY2lkXzJfbm9kZVtwaHlzaWRdID0gbmlkOworCWNwdV90b19ub2RlX21hcFtjcHVdID0gbmlkOworI2VuZGlmCisKKyNlbmRpZgorfQorCiBzdGF0aWMgaW50IF9fY3B1aW5pdCBfYWNwaV9tYXBfbHNhcGljKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50ICpwY3B1KQogewogCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CkBAIC01NDAsNiArNTYwLDcgQEAKIAl9CiAKIAljcHUgPSBjcHVtYXNrX2ZpcnN0KG5ld19tYXApOworCWFjcGlfbWFwX2NwdTJub2RlKGhhbmRsZSwgY3B1LCBwaHlzaWQpOwogCiAJKnBjcHUgPSBjcHU7CiAJcmV0dmFsID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKaW5kZXggZGU3MzUzYy4uZTZlYTAzNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCQkJCQkgc3RydWN0IGFsdF9pbnN0ciAqZW5kKQogewogCXN0cnVjdCBhbHRfaW5zdHIgKmE7Ci0JY2hhciBpbnNuYnVmW01BWF9QQVRDSF9MRU5dOworCXU4IGluc25idWZbTUFYX1BBVENIX0xFTl07CiAKIAlEUFJJTlRLKCIlczogYWx0IHRhYmxlICVwIC0+ICVwXG4iLCBfX2Z1bmNfXywgc3RhcnQsIGVuZCk7CiAJZm9yIChhID0gc3RhcnQ7IGEgPCBlbmQ7IGErKykgewpAQCAtMjIzLDYgKzIyMyw4IEBACiAJCX0KICNlbmRpZgogCQltZW1jcHkoaW5zbmJ1ZiwgYS0+cmVwbGFjZW1lbnQsIGEtPnJlcGxhY2VtZW50bGVuKTsKKwkJaWYgKCppbnNuYnVmID09IDB4ZTggJiYgYS0+cmVwbGFjZW1lbnRsZW4gPT0gNSkKKwkJICAgICooczMyICopKGluc25idWYgKyAxKSArPSBhLT5yZXBsYWNlbWVudCAtIGEtPmluc3RyOwogCQlhZGRfbm9wcyhpbnNuYnVmICsgYS0+cmVwbGFjZW1lbnRsZW4sCiAJCQkgYS0+aW5zdHJsZW4gLSBhLT5yZXBsYWNlbWVudGxlbik7CiAJCXRleHRfcG9rZV9lYXJseShpbnN0ciwgaW5zbmJ1ZiwgYS0+aW5zdHJsZW4pOwpAQCAtMzkwLDYgKzM5MiwyNCBAQAogCW11dGV4X3VubG9jaygmc21wX2FsdCk7CiB9CiAKKy8qIFJldHVybiAxIGlmIHRoZSBhZGRyZXNzIHJhbmdlIGlzIHJlc2VydmVkIGZvciBzbXAtYWx0ZXJuYXRpdmVzICovCitpbnQgYWx0ZXJuYXRpdmVzX3RleHRfcmVzZXJ2ZWQodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKK3sKKwlzdHJ1Y3Qgc21wX2FsdF9tb2R1bGUgKm1vZDsKKwl1OCAqKnB0cjsKKwl1OCAqdGV4dF9zdGFydCA9IHN0YXJ0OworCXU4ICp0ZXh0X2VuZCA9IGVuZDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kLCAmc21wX2FsdF9tb2R1bGVzLCBuZXh0KSB7CisJCWlmIChtb2QtPnRleHQgPiB0ZXh0X2VuZCB8fCBtb2QtPnRleHRfZW5kIDwgdGV4dF9zdGFydCkKKwkJCWNvbnRpbnVlOworCQlmb3IgKHB0ciA9IG1vZC0+bG9ja3M7IHB0ciA8IG1vZC0+bG9ja3NfZW5kOyBwdHIrKykKKwkJCWlmICh0ZXh0X3N0YXJ0IDw9ICpwdHIgJiYgdGV4dF9lbmQgPj0gKnB0cikKKwkJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKaW5kZXggZGZjYTIxMC4uNmUyOWIyYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwpAQCAtNTgxLDcgKzU4MSw3IEBACiAJCXJlcyA9ICgoKHU2NCkoKmRlbHRhdHNjKSkgKiBwbV8xMDBtcyk7CiAJCWRvX2RpdihyZXMsIGRlbHRhcG0pOwogCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJUU0MgZGVsdGEgYWRqdXN0ZWQgdG8gIgotCQkJCQkgICJQTS1UaW1lcjogJWx1ICglbGQpIFxuIiwKKwkJCQkJICAiUE0tVGltZXI6ICVsdSAoJWxkKVxuIiwKIAkJCQkJKHVuc2lnbmVkIGxvbmcpcmVzLCAqZGVsdGF0c2MpOwogCQkqZGVsdGF0c2MgPSAobG9uZylyZXM7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCmluZGV4IDUzMjQzY2EuLjZiZGQyYzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKQEAgLTE2NDcsNyArMTY0Nyw3IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gSVJRIHJlZGlyZWN0aW9uIHRhYmxlOlxuIik7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiIE5SIERzdCBNYXNrIFRyaWcgSVJSIFBvbCIKLQkJCSAgIiBTdGF0IERtb2QgRGVsaSBWZWN0OiAgIFxuIik7CisJCQkgICIgU3RhdCBEbW9kIERlbGkgVmVjdDpcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8PSByZWdfMDEuYml0cy5lbnRyaWVzOyBpKyspIHsKIAkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9udW1hcV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYwppbmRleCA5OGM0NjY1Li40N2RkODU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9udW1hcV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL251bWFxXzMyLmMKQEAgLTIyNSw3ICsyMjUsNyBAQAogCiAJbXBjX3JlY29yZCA9IDA7CiAJcHJpbnRrKEtFUk5fSU5GTwotCQkiRm91bmQgYW4gT0VNIE1QQyB0YWJsZSBhdCAlOHAgLSBwYXJzaW5nIGl0IC4uLiBcbiIsIG9lbXRhYmxlKTsKKwkJIkZvdW5kIGFuIE9FTSBNUEMgdGFibGUgYXQgJThwIC0gcGFyc2luZyBpdC4uLlxuIiwgb2VtdGFibGUpOwogCiAJaWYgKG1lbWNtcChvZW10YWJsZS0+c2lnbmF0dXJlLCBNUENfT0VNX1NJR05BVFVSRSwgNCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKaW5kZXggMjFkYjNjYi4uMzc0MGM4YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIFNHSSBVViBBUElDIGZ1bmN0aW9ucyAobm90ZTogbm90IGFuIEludGVsIGNvbXBhdGlibGUgQVBJQykKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgpAQCAtMjAsNiArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL3V2L3V2X21tcnMuaD4KICNpbmNsdWRlIDxhc20vdXYvdXZfaHViLmg+CkBAIC0zNCwxMCArMzYsMTMgQEAKIAogREVGSU5FX1BFUl9DUFUoaW50LCB4MmFwaWNfZXh0cmFfYml0cyk7CiAKKyNkZWZpbmUgUFJfREVWRUwoZm10LCBhcmdzLi4uKQlwcl9kZXZlbCgiJXM6ICIgZm10LCBfX2Z1bmNfXywgYXJncykKKwogc3RhdGljIGVudW0gdXZfc3lzdGVtX3R5cGUgdXZfc3lzdGVtX3R5cGU7CiBzdGF0aWMgdTY0IGdydV9zdGFydF9wYWRkciwgZ3J1X2VuZF9wYWRkcjsKIGludCB1dl9taW5faHViX3JldmlzaW9uX2lkOwogRVhQT1JUX1NZTUJPTF9HUEwodXZfbWluX2h1Yl9yZXZpc2lvbl9pZCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHV2X25taV9sb2NrKTsKIAogc3RhdGljIGlubGluZSBib29sIGlzX0dSVV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBlbmQpCiB7CkBAIC03MSw2ICs3Niw3IEBACiAJaWYgKCFzdHJjbXAob2VtX2lkLCAiU0dJIikpIHsKIAkJbm9kZWlkID0gZWFybHlfZ2V0X25vZGVpZCgpOwogCQl4ODZfcGxhdGZvcm0uaXNfdW50cmFja2VkX3BhdF9yYW5nZSA9ICB1dl9pc191bnRyYWNrZWRfcGF0X3JhbmdlOworCQl4ODZfcGxhdGZvcm0ubm1pX2luaXQgPSB1dl9ubWlfaW5pdDsKIAkJaWYgKCFzdHJjbXAob2VtX3RhYmxlX2lkLCAiVVZMIikpCiAJCQl1dl9zeXN0ZW1fdHlwZSA9IFVWX0xFR0FDWV9BUElDOwogCQllbHNlIGlmICghc3RyY21wKG9lbV90YWJsZV9pZCwgIlVWWCIpKQpAQCAtNDgyLDcgKzQ4OCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCB1dl9oZWFydGJlYXRfZW5hYmxlKGludCBjcHUpCiB7Ci0JaWYgKCF1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci5lbmFibGVkKSB7CisJd2hpbGUgKCF1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci5lbmFibGVkKSB7CiAJCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciA9ICZ1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci50aW1lcjsKIAogCQl1dl9zZXRfY3B1X3NjaXJfYml0cyhjcHUsIFNDSVJfQ1BVX0hFQVJUQkVBVHxTQ0lSX0NQVV9BQ1RJVklUWSk7CkBAIC00OTAsMTEgKzQ5NiwxMCBAQAogCQl0aW1lci0+ZXhwaXJlcyA9IGppZmZpZXMgKyBTQ0lSX0NQVV9IQl9JTlRFUlZBTDsKIAkJYWRkX3RpbWVyX29uKHRpbWVyLCBjcHUpOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci5lbmFibGVkID0gMTsKLQl9CiAKLQkvKiBjaGVjayBib290IGNwdSAqLwotCWlmICghdXZfY3B1X2h1Yl9pbmZvKDApLT5zY2lyLmVuYWJsZWQpCi0JCXV2X2hlYXJ0YmVhdF9lbmFibGUoMCk7CisJCS8qIGFsc28gZW5zdXJlIHRoYXQgYm9vdCBjcHUgaXMgZW5hYmxlZCAqLworCQljcHUgPSAwOworCX0KIH0KIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQpAQCAtNTUzLDYgKzU1OCwzMCBAQAogCiAjZW5kaWYgLyogIUNPTkZJR19IT1RQTFVHX0NQVSAqLwogCisvKiBEaXJlY3QgTGVnYWN5IFZHQSBJL08gdHJhZmZpYyB0byBkZXNpZ25hdGVkIElPSCAqLworaW50IHV2X3NldF92Z2Ffc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgZGVjb2RlLAorCQkgICAgICB1bnNpZ25lZCBpbnQgY29tbWFuZF9iaXRzLCBib29sIGNoYW5nZV9icmlkZ2UpCit7CisJaW50IGRvbWFpbiwgYnVzLCByYzsKKworCVBSX0RFVkVMKCJkZXZmbiAleCBkZWNvZGUgJWQgY21kICV4IGNoZ19icmRnICVkXG4iLAorCQkJcGRldi0+ZGV2Zm4sIGRlY29kZSwgY29tbWFuZF9iaXRzLCBjaGFuZ2VfYnJpZGdlKTsKKworCWlmICghY2hhbmdlX2JyaWRnZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGNvbW1hbmRfYml0cyAmIFBDSV9DT01NQU5EX0lPKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWRvbWFpbiA9IHBjaV9kb21haW5fbnIocGRldi0+YnVzKTsKKwlidXMgPSBwZGV2LT5idXMtPm51bWJlcjsKKworCXJjID0gdXZfYmlvc19zZXRfbGVnYWN5X3ZnYV90YXJnZXQoZGVjb2RlLCBkb21haW4sIGJ1cyk7CisJUFJfREVWRUwoInZnYSBkZWNvZGUgJWQgJXg6JXgsIHJjOiAlZFxuIiwgZGVjb2RlLCBkb21haW4sIGJ1cywgcmMpOworCisJcmV0dXJuIHJjOworfQorCiAvKgogICogQ2FsbGVkIG9uIGVhY2ggY3B1IHRvIGluaXRpYWxpemUgdGhlIHBlcl9jcHUgVVYgZGF0YSBhcmVhLgogICogRklYTUU6IGhvdHBsdWcgbm90IHN1cHBvcnRlZCB5ZXQKQEAgLTU2OSw2ICs1OTgsNDYgQEAKIAkJc2V0X3gyYXBpY19leHRyYV9iaXRzKHV2X2h1Yl9pbmZvLT5wbm9kZSk7CiB9CiAKKy8qCisgKiBXaGVuIE5NSSBpcyByZWNlaXZlZCwgcHJpbnQgYSBzdGFjayB0cmFjZS4KKyAqLworaW50IHV2X2hhbmRsZV9ubWkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIHJlYXNvbiwgdm9pZCAqZGF0YSkKK3sKKwlpZiAocmVhc29uICE9IERJRV9OTUlfSVBJKQorCQlyZXR1cm4gTk9USUZZX09LOworCS8qCisJICogVXNlIGEgbG9jayBzbyBvbmx5IG9uZSBjcHUgcHJpbnRzIGF0IGEgdGltZQorCSAqIHRvIHByZXZlbnQgaW50ZXJtaXhlZCBvdXRwdXQuCisJICovCisJc3Bpbl9sb2NrKCZ1dl9ubWlfbG9jayk7CisJcHJfaW5mbygiTk1JIHN0YWNrIGR1bXAgY3B1ICV1OlxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlkdW1wX3N0YWNrKCk7CisJc3Bpbl91bmxvY2soJnV2X25taV9sb2NrKTsKKworCXJldHVybiBOT1RJRllfU1RPUDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB1dl9kdW1wX3N0YWNrX25taV9uYiA9IHsKKwkubm90aWZpZXJfY2FsbAk9IHV2X2hhbmRsZV9ubWkKK307CisKK3ZvaWQgdXZfcmVnaXN0ZXJfbm1pX25vdGlmaWVyKHZvaWQpCit7CisJaWYgKHJlZ2lzdGVyX2RpZV9ub3RpZmllcigmdXZfZHVtcF9zdGFja19ubWlfbmIpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJVViBOTUkgaGFuZGxlciBmYWlsZWQgdG8gcmVnaXN0ZXJcbiIpOworfQorCit2b2lkIHV2X25taV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJLyoKKwkgKiBVbm1hc2sgTk1JIG9uIGFsbCBjcHVzCisJICovCisJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlQxKSB8IEFQSUNfRE1fTk1JOworCXZhbHVlICY9IH5BUElDX0xWVF9NQVNLRUQ7CisJYXBpY193cml0ZShBUElDX0xWVDEsIHZhbHVlKTsKK30KIAogdm9pZCBfX2luaXQgdXZfc3lzdGVtX2luaXQodm9pZCkKIHsKQEAgLTYzNCw4ICs3MDMsOCBAQAogCX0KIAogCXV2X2Jpb3NfaW5pdCgpOwotCXV2X2Jpb3NfZ2V0X3NuX2luZm8oMCwgJnV2X3R5cGUsICZzbl9wYXJ0aXRpb25faWQsCi0JCQkgICAgJnNuX2NvaGVyZW5jeV9pZCwgJnNuX3JlZ2lvbl9zaXplKTsKKwl1dl9iaW9zX2dldF9zbl9pbmZvKDAsICZ1dl90eXBlLCAmc25fcGFydGl0aW9uX2lkLCAmc25fY29oZXJlbmN5X2lkLAorCQkJICAgICZzbl9yZWdpb25fc2l6ZSwgJnN5c3RlbV9zZXJpYWxfbnVtYmVyKTsKIAl1dl9ydGNfaW5pdCgpOwogCiAJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSB7CkBAIC02OTAsNSArNzU5LDkgQEAKIAogCXV2X2NwdV9pbml0KCk7CiAJdXZfc2Npcl9yZWdpc3Rlcl9jcHVfbm90aWZpZXIoKTsKKwl1dl9yZWdpc3Rlcl9ubWlfbm90aWZpZXIoKTsKIAlwcm9jX21rZGlyKCJzZ2lfdXYiLCBOVUxMKTsKKworCS8qIHJlZ2lzdGVyIExlZ2FjeSBWR0EgSS9PIHJlZGlyZWN0aW9uIGhhbmRsZXIgKi8KKwlwY2lfcmVnaXN0ZXJfc2V0X3ZnYV9zdGF0ZSh1dl9zZXRfdmdhX3N0YXRlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwppbmRleCBiNWI2YjIzLi4wMzFhYTg4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCkBAIC0xOTkyLDggKzE5OTIsOCBAQAogCQlhcG1faW5mby5kaXNhYmxlZCA9IDE7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzIG1hY2hpbmUgZGV0ZWN0ZWQuICIKIAkJICAgICAgICJEaXNhYmxpbmcgQVBNLlxuIiwgZC0+aWRlbnQpOwotCQlwcmludGsoS0VSTl9JTkZPICJUaGlzIGJ1ZyBpcyBmaXhlZCBpbiBiaW9zIFAxNSB3aGljaCBpcyBhdmFpbGFibGUgZm9yIFxuIik7Ci0JCXByaW50ayhLRVJOX0lORk8gImRvd25sb2FkIGZyb20gc3VwcG9ydC5pbnRlbC5jb20gXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVGhpcyBidWcgaXMgZml4ZWQgaW4gYmlvcyBQMTUgd2hpY2ggaXMgYXZhaWxhYmxlIGZvclxuIik7CisJCXByaW50ayhLRVJOX0lORk8gImRvd25sb2FkIGZyb20gc3VwcG9ydC5pbnRlbC5jb21cbiIpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9iaW9zX3V2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYmlvc191di5jCmluZGV4IGIwMjA2YTIuLjhiYzU3YmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9iaW9zX3V2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Jpb3NfdXYuYwpAQCAtMTUsOCArMTUsOCBAQAogICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKgotICogIENvcHlyaWdodCAoYykgMjAwOCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogIENvcHlyaWdodCAoYykgUnVzcyBBbmRlcnNvbgorICogIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChjKSBSdXNzIEFuZGVyc29uIDxyamFAc2dpLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CkBAIC0zMCw2ICszMCw3IEBACiBzNjQgdXZfYmlvc19jYWxsKGVudW0gdXZfYmlvc19jbWQgd2hpY2gsIHU2NCBhMSwgdTY0IGEyLCB1NjQgYTMsIHU2NCBhNCwgdTY0IGE1KQogewogCXN0cnVjdCB1dl9zeXN0YWIgKnRhYiA9ICZ1dl9zeXN0YWI7CisJczY0IHJldDsKIAogCWlmICghdGFiLT5mdW5jdGlvbikKIAkJLyoKQEAgLTM3LDkgKzM4LDExIEBACiAJCSAqLwogCQlyZXR1cm4gQklPU19TVEFUVVNfVU5JTVBMRU1FTlRFRDsKIAotCXJldHVybiBlZmlfY2FsbDYoKHZvaWQgKilfX3ZhKHRhYi0+ZnVuY3Rpb24pLAotCQkJCQkodTY0KXdoaWNoLCBhMSwgYTIsIGEzLCBhNCwgYTUpOworCXJldCA9IGVmaV9jYWxsNigodm9pZCAqKV9fdmEodGFiLT5mdW5jdGlvbiksICh1NjQpd2hpY2gsCisJCQlhMSwgYTIsIGEzLCBhNCwgYTUpOworCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1dl9iaW9zX2NhbGwpOwogCiBzNjQgdXZfYmlvc19jYWxsX2lycXNhdmUoZW51bSB1dl9iaW9zX2NtZCB3aGljaCwgdTY0IGExLCB1NjQgYTIsIHU2NCBhMywKIAkJCQkJdTY0IGE0LCB1NjQgYTUpCkBAIC03MywxMSArNzYsMTQgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHNuX2NvaGVyZW5jeV9pZCk7CiBsb25nIHNuX3JlZ2lvbl9zaXplOwogRVhQT1JUX1NZTUJPTF9HUEwoc25fcmVnaW9uX3NpemUpOworbG9uZyBzeXN0ZW1fc2VyaWFsX251bWJlcjsKK0VYUE9SVF9TWU1CT0xfR1BMKHN5c3RlbV9zZXJpYWxfbnVtYmVyKTsKIGludCB1dl90eXBlOworRVhQT1JUX1NZTUJPTF9HUEwodXZfdHlwZSk7CiAKIAogczY0IHV2X2Jpb3NfZ2V0X3NuX2luZm8oaW50IGZjLCBpbnQgKnV2dHlwZSwgbG9uZyAqcGFydGlkLCBsb25nICpjb2hlciwKLQkJbG9uZyAqcmVnaW9uKQorCQlsb25nICpyZWdpb24sIGxvbmcgKnNzbikKIHsKIAlzNjQgcmV0OwogCXU2NCB2MCwgdjE7CkBAIC05Nyw4ICsxMDMsMTEgQEAKIAkJKmNvaGVyID0gcGFydC5jb2hlcmVuY2VfaWQ7CiAJaWYgKHJlZ2lvbikKIAkJKnJlZ2lvbiA9IHBhcnQucmVnaW9uX3NpemU7CisJaWYgKHNzbikKKwkJKnNzbiA9IHYxOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1dl9iaW9zX2dldF9zbl9pbmZvKTsKIAogaW50CiB1dl9iaW9zX21xX3dhdGNobGlzdF9hbGxvYyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBtcV9zaXplLApAQCAtMTU0LDYgKzE2MywyNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodXZfYmlvc19mcmVxX2Jhc2UpOwogCisvKgorICogdXZfYmlvc19zZXRfbGVnYWN5X3ZnYV90YXJnZXQgLSBTZXQgTGVnYWN5IFZHQSBJL08gVGFyZ2V0CisgKiBAZGVjb2RlOiB0cnVlIHRvIGVuYWJsZSB0YXJnZXQsIGZhbHNlIHRvIGRpc2FibGUgdGFyZ2V0CisgKiBAZG9tYWluOiBQQ0kgZG9tYWluIG51bWJlcgorICogQGJ1czogUENJIGJ1cyBudW1iZXIKKyAqCisgKiBSZXR1cm5zOgorICogICAgMDogU3VjY2VzcworICogICAgLUVJTlZBTDogSW52YWxpZCBkb21haW4gb3IgYnVzIG51bWJlcgorICogICAgLUVOT1NZUzogQ2FwYWJpbGl0eSBub3QgYXZhaWxhYmxlCisgKiAgICAtRUJVU1k6IExlZ2FjeSBWR0EgSS9PIGNhbm5vdCBiZSByZXRhcmdldGVkIGF0IHRoaXMgdGltZQorICovCitpbnQgdXZfYmlvc19zZXRfbGVnYWN5X3ZnYV90YXJnZXQoYm9vbCBkZWNvZGUsIGludCBkb21haW4sIGludCBidXMpCit7CisJcmV0dXJuIHV2X2Jpb3NfY2FsbChVVl9CSU9TX1NFVF9MRUdBQ1lfVkdBX1RBUkdFVCwKKwkJCQkodTY0KWRlY29kZSwgKHU2NClkb21haW4sICh1NjQpYnVzLCAwLCAwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV2X2Jpb3Nfc2V0X2xlZ2FjeV92Z2FfdGFyZ2V0KTsKKwogCiAjaWZkZWYgQ09ORklHX0VGSQogdm9pZCB1dl9iaW9zX2luaXQodm9pZCkKQEAgLTE4NSw0ICsyMTMsMyBAQAogCiB2b2lkIHV2X2Jpb3NfaW5pdCh2b2lkKSB7IH0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMKaW5kZXggNDY4NDg5Yi4uOTdhZDc5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9hZGRvbl9jcHVpZF9mZWF0dXJlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYWRkb25fY3B1aWRfZmVhdHVyZXMuYwpAQCAtMzIsNiArMzIsMTAgQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkX2JpdCBfX2NwdWluaXRjb25zdCBjcHVpZF9iaXRzW10gPSB7CiAJCXsgWDg2X0ZFQVRVUkVfSURBLCBDUl9FQVgsIDEsIDB4MDAwMDAwMDYgfSwKIAkJeyBYODZfRkVBVFVSRV9BUkFULCBDUl9FQVgsIDIsIDB4MDAwMDAwMDYgfSwKKwkJeyBYODZfRkVBVFVSRV9OUFQsICAgQ1JfRURYLCAwLCAweDgwMDAwMDBhIH0sCisJCXsgWDg2X0ZFQVRVUkVfTEJSViwgIENSX0VEWCwgMSwgMHg4MDAwMDAwYSB9LAorCQl7IFg4Nl9GRUFUVVJFX1NWTUwsICBDUl9FRFgsIDIsIDB4ODAwMDAwMGEgfSwKKwkJeyBYODZfRkVBVFVSRV9OUklQUywgQ1JfRURYLCAzLCAweDgwMDAwMDBhIH0sCiAJCXsgMCwgMCwgMCwgMCB9CiAJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKaW5kZXggZmM2YzhlZi4uZWRkYjFiZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGFzbS9rOC5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAogI2RlZmluZSBMVkxfMV9JTlNUCTEKICNkZWZpbmUgTFZMXzFfREFUQQkyCkBAIC0zMSw2ICszMiw4IEBACiAJc2hvcnQgc2l6ZTsKIH07CiAKKyNkZWZpbmUgTUIoeCkJKCh4KSAqIDEwMjQpCisKIC8qIEFsbCB0aGUgY2FjaGUgZGVzY3JpcHRvciB0eXBlcyB3ZSBjYXJlIGFib3V0IChubyBUTEIgb3IKICAgIHRyYWNlIGNhY2hlIGVudHJpZXMpICovCiAKQEAgLTQ0LDkgKzQ3LDkgQEAKIAl7IDB4MGQsIExWTF8xX0RBVEEsIDE2IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MjEsIExWTF8yLCAgICAgIDI1NiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDIyLCBMVkxfMywgICAgICA1MTIgfSwJLyogNC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4MjMsIExWTF8zLCAgICAgIDEwMjQgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4MjUsIExWTF8zLCAgICAgIDIwNDggfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4MjksIExWTF8zLCAgICAgIDQwOTYgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4MjMsIExWTF8zLCAgICAgIE1CKDEpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDI1LCBMVkxfMywgICAgICBNQigyKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHgyOSwgTFZMXzMsICAgICAgTUIoNCkgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MmMsIExWTF8xX0RBVEEsIDMyIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MzAsIExWTF8xX0lOU1QsIDMyIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MzksIExWTF8yLCAgICAgIDEyOCB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwpAQCAtNTksMTYgKzYyLDE2IEBACiAJeyAweDQxLCBMVkxfMiwgICAgICAxMjggfSwJLyogNC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg0MiwgTFZMXzIsICAgICAgMjU2IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4NDMsIExWTF8yLCAgICAgIDUxMiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCi0JeyAweDQ0LCBMVkxfMiwgICAgICAxMDI0IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NDUsIExWTF8yLCAgICAgIDIwNDggfSwJLyogNC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg0NiwgTFZMXzMsICAgICAgNDA5NiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDQ3LCBMVkxfMywgICAgICA4MTkyIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NDksIExWTF8zLCAgICAgIDQwOTYgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NGEsIExWTF8zLCAgICAgIDYxNDQgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NGIsIExWTF8zLCAgICAgIDgxOTIgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NGMsIExWTF8zLCAgICAgMTIyODggfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NGQsIExWTF8zLCAgICAgMTYzODQgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NGUsIExWTF8yLCAgICAgIDYxNDQgfSwJLyogMjQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NDQsIExWTF8yLCAgICAgIE1CKDEpIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NDUsIExWTF8yLCAgICAgIE1CKDIpIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NDYsIExWTF8zLCAgICAgIE1CKDQpIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NDcsIExWTF8zLCAgICAgIE1CKDgpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NDksIExWTF8zLCAgICAgIE1CKDQpIH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDRhLCBMVkxfMywgICAgICBNQig2KSB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg0YiwgTFZMXzMsICAgICAgTUIoOCkgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4NGMsIExWTF8zLCAgICAgIE1CKDEyKSB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg0ZCwgTFZMXzMsICAgICAgTUIoMTYpIH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDRlLCBMVkxfMiwgICAgICBNQig2KSB9LAkvKiAyNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg2MCwgTFZMXzFfREFUQSwgMTYgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4NjYsIExWTF8xX0RBVEEsIDggfSwJLyogNC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4NjcsIExWTF8xX0RBVEEsIDE2IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCkBAIC03NywzNCArODAsMzQgQEAKIAl7IDB4NzEsIExWTF9UUkFDRSwgIDE2IH0sCS8qIDgtd2F5IHNldCBhc3NvYyAqLwogCXsgMHg3MiwgTFZMX1RSQUNFLCAgMzIgfSwJLyogOC13YXkgc2V0IGFzc29jICovCiAJeyAweDczLCBMVkxfVFJBQ0UsICA2NCB9LAkvKiA4LXdheSBzZXQgYXNzb2MgKi8KLQl7IDB4NzgsIExWTF8yLCAgICAxMDI0IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4NzksIExWTF8yLCAgICAgMTI4IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDdhLCBMVkxfMiwgICAgIDI1NiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHg3YiwgTFZMXzIsICAgICA1MTIgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4N2MsIExWTF8yLCAgICAxMDI0IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDdkLCBMVkxfMiwgICAgMjA0OCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDdmLCBMVkxfMiwgICAgIDUxMiB9LAkvKiAyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDgyLCBMVkxfMiwgICAgIDI1NiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCi0JeyAweDgzLCBMVkxfMiwgICAgIDUxMiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCi0JeyAweDg0LCBMVkxfMiwgICAgMTAyNCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCi0JeyAweDg1LCBMVkxfMiwgICAgMjA0OCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCi0JeyAweDg2LCBMVkxfMiwgICAgIDUxMiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweDg3LCBMVkxfMiwgICAgMTAyNCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGQwLCBMVkxfMywgICAgIDUxMiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGQxLCBMVkxfMywgICAgMTAyNCB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGQyLCBMVkxfMywgICAgMjA0OCB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGQ2LCBMVkxfMywgICAgMTAyNCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGQ3LCBMVkxfMywgICAgMjA0OCB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGQ4LCBMVkxfMywgICAgNDA5NiB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhkYywgTFZMXzMsICAgIDIwNDggfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZGQsIExWTF8zLCAgICA0MDk2IH0sCS8qIDEyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGRlLCBMVkxfMywgICAgODE5MiB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhlMiwgTFZMXzMsICAgIDIwNDggfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZTMsIExWTF8zLCAgICA0MDk2IH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGU0LCBMVkxfMywgICAgODE5MiB9LAkvKiAxNi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwotCXsgMHhlYSwgTFZMXzMsICAgIDEyMjg4IH0sCS8qIDI0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCi0JeyAweGViLCBMVkxfMywgICAgMTg0MzIgfSwJLyogMjQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KLQl7IDB4ZWMsIExWTF8zLCAgICAyNDU3NiB9LAkvKiAyNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg3OCwgTFZMXzIsICAgICAgTUIoMSkgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg3OSwgTFZMXzIsICAgICAgMTI4IH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDdhLCBMVkxfMiwgICAgICAyNTYgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4N2IsIExWTF8yLCAgICAgIDUxMiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg3YywgTFZMXzIsICAgICAgTUIoMSkgfSwJLyogOC13YXkgc2V0IGFzc29jLCBzZWN0b3JlZCBjYWNoZSwgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4N2QsIExWTF8yLCAgICAgIE1CKDIpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4N2YsIExWTF8yLCAgICAgIDUxMiB9LAkvKiAyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDgyLCBMVkxfMiwgICAgICAyNTYgfSwJLyogOC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg4MywgTFZMXzIsICAgICAgNTEyIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ODQsIExWTF8yLCAgICAgIE1CKDEpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ODUsIExWTF8yLCAgICAgIE1CKDIpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ODYsIExWTF8yLCAgICAgIDUxMiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDg3LCBMVkxfMiwgICAgICBNQigxKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGQwLCBMVkxfMywgICAgICA1MTIgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkMSwgTFZMXzMsICAgICAgTUIoMSkgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkMiwgTFZMXzMsICAgICAgTUIoMikgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkNiwgTFZMXzMsICAgICAgTUIoMSkgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkNywgTFZMXzMsICAgICAgTUIoMikgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkOCwgTFZMXzMsICAgICAgTUIoNCkgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZGMsIExWTF8zLCAgICAgIE1CKDIpIH0sCS8qIDEyLXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGRkLCBMVkxfMywgICAgICBNQig0KSB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhkZSwgTFZMXzMsICAgICAgTUIoOCkgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZTIsIExWTF8zLCAgICAgIE1CKDIpIH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGUzLCBMVkxfMywgICAgICBNQig0KSB9LAkvKiAxNi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhlNCwgTFZMXzMsICAgICAgTUIoOCkgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KKwl7IDB4ZWEsIExWTF8zLCAgICAgIE1CKDEyKSB9LAkvKiAyNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHhlYiwgTFZMXzMsICAgICAgTUIoMTgpIH0sCS8qIDI0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweGVjLCBMVkxfMywgICAgICBNQigyNCkgfSwJLyogMjQtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MDAsIDAsIDB9CiB9OwogCkBAIC0xNTAsNyArMTUzLDggQEAKIAl1bmlvbiBfY3B1aWQ0X2xlYWZfZWJ4IGVieDsKIAl1bmlvbiBfY3B1aWQ0X2xlYWZfZWN4IGVjeDsKIAl1bnNpZ25lZCBsb25nIHNpemU7Ci0JdW5zaWduZWQgbG9uZyBjYW5fZGlzYWJsZTsKKwlib29sIGNhbl9kaXNhYmxlOworCXVuc2lnbmVkIGludCBsM19pbmRpY2VzOwogCURFQ0xBUkVfQklUTUFQKHNoYXJlZF9jcHVfbWFwLCBOUl9DUFVTKTsKIH07CiAKQEAgLTE2MCw3ICsxNjQsOCBAQAogCXVuaW9uIF9jcHVpZDRfbGVhZl9lYnggZWJ4OwogCXVuaW9uIF9jcHVpZDRfbGVhZl9lY3ggZWN4OwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQl1bnNpZ25lZCBsb25nIGNhbl9kaXNhYmxlOworCWJvb2wgY2FuX2Rpc2FibGU7CisJdW5zaWduZWQgaW50IGwzX2luZGljZXM7CiB9OwogCiB1bnNpZ25lZCBzaG9ydAkJCW51bV9jYWNoZV9sZWF2ZXM7CkBAIC0yOTAsNiArMjk1LDM2IEBACiAJCShlYngtPnNwbGl0LndheXNfb2ZfYXNzb2NpYXRpdml0eSArIDEpIC0gMTsKIH0KIAorc3RydWN0IF9jYWNoZV9hdHRyIHsKKwlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBfY3B1aWQ0X2luZm8gKiwgY2hhciAqKTsKKwlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBfY3B1aWQ0X2luZm8gKiwgY29uc3QgY2hhciAqLCBzaXplX3QgY291bnQpOworfTsKKworI2lmZGVmIENPTkZJR19DUFVfU1VQX0FNRAorc3RhdGljIHVuc2lnbmVkIGludCBfX2NwdWluaXQgYW1kX2NhbGNfbDNfaW5kaWNlcyh2b2lkKQoreworCS8qCisJICogV2UncmUgY2FsbGVkIG92ZXIgc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKCkgYW5kIHRoZXJlZm9yZQorCSAqIGFyZSBvbiB0aGUgY29ycmVjdCBjcHUuCisJICovCisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IG5vZGVfdG9fazhfbmJfbWlzYyhub2RlKTsKKwl1bnNpZ25lZCBpbnQgc2MwLCBzYzEsIHNjMiwgc2MzOworCXUzMiB2YWwgPSAwOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHgxQzQsICZ2YWwpOworCisJLyogY2FsY3VsYXRlIHN1YmNhY2hlIHNpemVzICovCisJc2MwID0gISh2YWwgJiBCSVQoMCkpOworCXNjMSA9ICEodmFsICYgQklUKDQpKTsKKwlzYzIgPSAhKHZhbCAmIEJJVCg4KSkgICsgISh2YWwgJiBCSVQoOSkpOworCXNjMyA9ICEodmFsICYgQklUKDEyKSkgKyAhKHZhbCAmIEJJVCgxMykpOworCisJcmV0dXJuIChtYXgobWF4KG1heChzYzAsIHNjMSksIHNjMiksIHNjMykgPDwgMTApIC0gMTsKK30KKwogc3RhdGljIHZvaWQgX19jcHVpbml0CiBhbWRfY2hlY2tfbDNfZGlzYWJsZShpbnQgaW5kZXgsIHN0cnVjdCBfY3B1aWQ0X2luZm9fcmVncyAqdGhpc19sZWFmKQogewpAQCAtMjk5LDEzICszMzQsMTA0IEBACiAJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4MTEpCiAJCXJldHVybjsKIAotCS8qIHNlZSBlcnJhdHVtICMzODIgKi8KLQlpZiAoKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4MTApICYmIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCA8IDB4OCkpCisJLyogc2VlIGVycmF0YSAjMzgyIGFuZCAjMzg4ICovCisJaWYgKChib290X2NwdV9kYXRhLng4NiA9PSAweDEwKSAmJgorCSAgICAoKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsIDwgMHg4KSB8fAorCSAgICAgKGJvb3RfY3B1X2RhdGEueDg2X21hc2sgIDwgMHgxKSkpCiAJCXJldHVybjsKIAotCXRoaXNfbGVhZi0+Y2FuX2Rpc2FibGUgPSAxOworCXRoaXNfbGVhZi0+Y2FuX2Rpc2FibGUgPSB0cnVlOworCXRoaXNfbGVhZi0+bDNfaW5kaWNlcyAgPSBhbWRfY2FsY19sM19pbmRpY2VzKCk7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfY2FjaGVfZGlzYWJsZShzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsIGNoYXIgKmJ1ZiwKKwkJCQkgIHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlpbnQgY3B1ID0gY3B1bWFza19maXJzdCh0b19jcHVtYXNrKHRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApKTsKKwlpbnQgbm9kZSA9IGFtZF9nZXRfbmJfaWQoY3B1KTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gbm9kZV90b19rOF9uYl9taXNjKG5vZGUpOworCXVuc2lnbmVkIGludCByZWcgPSAwOworCisJaWYgKCF0aGlzX2xlYWYtPmNhbl9kaXNhYmxlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4MUJDICsgaW5kZXggKiA0LCAmcmVnKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOHhcbiIsIHJlZyk7Cit9CisKKyNkZWZpbmUgU0hPV19DQUNIRV9ESVNBQkxFKGluZGV4KQkJCQkJXAorc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKK3Nob3dfY2FjaGVfZGlzYWJsZV8jI2luZGV4KHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwgY2hhciAqYnVmKQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBzaG93X2NhY2hlX2Rpc2FibGUodGhpc19sZWFmLCBidWYsIGluZGV4KTsJCVwKK30KK1NIT1dfQ0FDSEVfRElTQUJMRSgwKQorU0hPV19DQUNIRV9ESVNBQkxFKDEpCisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2NhY2hlX2Rpc2FibGUoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLAorCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJaW50IGNwdSA9IGNwdW1hc2tfZmlyc3QodG9fY3B1bWFzayh0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwKSk7CisJaW50IG5vZGUgPSBhbWRfZ2V0X25iX2lkKGNwdSk7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IG5vZGVfdG9fazhfbmJfbWlzYyhub2RlKTsKKwl1bnNpZ25lZCBsb25nIHZhbCA9IDA7CisKKyNkZWZpbmUgU1VCQ0FDSEVfTUFTSwkoM1VMIDw8IDIwKQorI2RlZmluZSBTVUJDQUNIRV9JTkRFWAkweGZmZgorCisJaWYgKCF0aGlzX2xlYWYtPmNhbl9kaXNhYmxlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogZG8gbm90IGFsbG93IHdyaXRlcyBvdXRzaWRlIG9mIGFsbG93ZWQgYml0cyAqLworCWlmICgodmFsICYgfihTVUJDQUNIRV9NQVNLIHwgU1VCQ0FDSEVfSU5ERVgpKSB8fAorCSAgICAoKHZhbCAmIFNVQkNBQ0hFX0lOREVYKSA+IHRoaXNfbGVhZi0+bDNfaW5kaWNlcykpCisJCXJldHVybiAtRUlOVkFMOworCisJdmFsIHw9IEJJVCgzMCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4MUJDICsgaW5kZXggKiA0LCB2YWwpOworCS8qCisJICogV2UgbmVlZCB0byBXQklOVkQgb24gYSBjb3JlIG9uIHRoZSBub2RlIGNvbnRhaW5pbmcgdGhlIEwzIGNhY2hlIHdoaWNoCisJICogaW5kaWNlcyB3ZSBkaXNhYmxlIHRoZXJlZm9yZSBhIHNpbXBsZSB3YmludmQoKSBpcyBub3Qgc3VmZmljaWVudC4KKwkgKi8KKwl3YmludmRfb25fY3B1KGNwdSk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4MUJDICsgaW5kZXggKiA0LCB2YWwgfCBCSVQoMzEpKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKyNkZWZpbmUgU1RPUkVfQ0FDSEVfRElTQUJMRShpbmRleCkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCitzdG9yZV9jYWNoZV9kaXNhYmxlXyMjaW5kZXgoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLAkJXAorCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQkJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gc3RvcmVfY2FjaGVfZGlzYWJsZSh0aGlzX2xlYWYsIGJ1ZiwgY291bnQsIGluZGV4KTsJXAorfQorU1RPUkVfQ0FDSEVfRElTQUJMRSgwKQorU1RPUkVfQ0FDSEVfRElTQUJMRSgxKQorCitzdGF0aWMgc3RydWN0IF9jYWNoZV9hdHRyIGNhY2hlX2Rpc2FibGVfMCA9IF9fQVRUUihjYWNoZV9kaXNhYmxlXzAsIDA2NDQsCisJCXNob3dfY2FjaGVfZGlzYWJsZV8wLCBzdG9yZV9jYWNoZV9kaXNhYmxlXzApOworc3RhdGljIHN0cnVjdCBfY2FjaGVfYXR0ciBjYWNoZV9kaXNhYmxlXzEgPSBfX0FUVFIoY2FjaGVfZGlzYWJsZV8xLCAwNjQ0LAorCQlzaG93X2NhY2hlX2Rpc2FibGVfMSwgc3RvcmVfY2FjaGVfZGlzYWJsZV8xKTsKKworI2Vsc2UJLyogQ09ORklHX0NQVV9TVVBfQU1EICovCitzdGF0aWMgdm9pZCBfX2NwdWluaXQKK2FtZF9jaGVja19sM19kaXNhYmxlKGludCBpbmRleCwgc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzICp0aGlzX2xlYWYpCit7Cit9OworI2VuZGlmIC8qIENPTkZJR19DUFVfU1VQX0FNRCAqLworCiBzdGF0aWMgaW50CiBfX2NwdWluaXQgY3B1aWQ0X2NhY2hlX2xvb2t1cF9yZWdzKGludCBpbmRleCwKIAkJCQkgICBzdHJ1Y3QgX2NwdWlkNF9pbmZvX3JlZ3MgKnRoaXNfbGVhZikKQEAgLTcxMSw4MiArODM3LDYgQEAKICNkZWZpbmUgdG9fb2JqZWN0KGspCWNvbnRhaW5lcl9vZihrLCBzdHJ1Y3QgX2luZGV4X2tvYmplY3QsIGtvYmopCiAjZGVmaW5lIHRvX2F0dHIoYSkJY29udGFpbmVyX29mKGEsIHN0cnVjdCBfY2FjaGVfYXR0ciwgYXR0cikKIAotc3RhdGljIHNzaXplX3Qgc2hvd19jYWNoZV9kaXNhYmxlKHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwgY2hhciAqYnVmLAotCQkJCSAgdW5zaWduZWQgaW50IGluZGV4KQotewotCWludCBjcHUgPSBjcHVtYXNrX2ZpcnN0KHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCkpOwotCWludCBub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gbm9kZV90b19rOF9uYl9taXNjKG5vZGUpOwotCXVuc2lnbmVkIGludCByZWcgPSAwOwotCi0JaWYgKCF0aGlzX2xlYWYtPmNhbl9kaXNhYmxlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4MUJDICsgaW5kZXggKiA0LCAmcmVnKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIleFxuIiwgcmVnKTsKLX0KLQotI2RlZmluZSBTSE9XX0NBQ0hFX0RJU0FCTEUoaW5kZXgpCQkJCQlcCi1zdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc2hvd19jYWNoZV9kaXNhYmxlXyMjaW5kZXgoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLCBjaGFyICpidWYpICAJXAotewkJCQkJCQkJCVwKLQlyZXR1cm4gc2hvd19jYWNoZV9kaXNhYmxlKHRoaXNfbGVhZiwgYnVmLCBpbmRleCk7CQlcCi19Ci1TSE9XX0NBQ0hFX0RJU0FCTEUoMCkKLVNIT1dfQ0FDSEVfRElTQUJMRSgxKQotCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9jYWNoZV9kaXNhYmxlKHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwKLQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgaW50IGluZGV4KQotewotCWludCBjcHUgPSBjcHVtYXNrX2ZpcnN0KHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCkpOwotCWludCBub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gbm9kZV90b19rOF9uYl9taXNjKG5vZGUpOwotCXVuc2lnbmVkIGxvbmcgdmFsID0gMDsKLQl1bnNpZ25lZCBpbnQgc2NydWJiZXIgPSAwOwotCi0JaWYgKCF0aGlzX2xlYWYtPmNhbl9kaXNhYmxlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdmFsIHw9IDB4YzAwMDAwMDA7Ci0KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDU4LCAmc2NydWJiZXIpOwotCXNjcnViYmVyICY9IH4weDFmMDAwMDAwOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDU4LCBzY3J1YmJlcik7Ci0KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHgxQkMgKyBpbmRleCAqIDQsIHZhbCAmIH4weDQwMDAwMDAwKTsKLQl3YmludmQoKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHgxQkMgKyBpbmRleCAqIDQsIHZhbCk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi0jZGVmaW5lIFNUT1JFX0NBQ0hFX0RJU0FCTEUoaW5kZXgpCQkJCQlcCi1zdGF0aWMgc3NpemVfdAkJCQkJCQkJXAotc3RvcmVfY2FjaGVfZGlzYWJsZV8jI2luZGV4KHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwJICAgICAJXAotCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQkJXAotewkJCQkJCQkJCVwKLQlyZXR1cm4gc3RvcmVfY2FjaGVfZGlzYWJsZSh0aGlzX2xlYWYsIGJ1ZiwgY291bnQsIGluZGV4KTsJXAotfQotU1RPUkVfQ0FDSEVfRElTQUJMRSgwKQotU1RPUkVfQ0FDSEVfRElTQUJMRSgxKQotCi1zdHJ1Y3QgX2NhY2hlX2F0dHIgewotCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKLQlzc2l6ZV90ICgqc2hvdykoc3RydWN0IF9jcHVpZDRfaW5mbyAqLCBjaGFyICopOwotCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IF9jcHVpZDRfaW5mbyAqLCBjb25zdCBjaGFyICosIHNpemVfdCBjb3VudCk7Ci19OwotCiAjZGVmaW5lIGRlZmluZV9vbmVfcm8oX25hbWUpIFwKIHN0YXRpYyBzdHJ1Y3QgX2NhY2hlX2F0dHIgX25hbWUgPSBcCiAJX19BVFRSKF9uYW1lLCAwNDQ0LCBzaG93XyMjX25hbWUsIE5VTEwpCkBAIC04MDEsMjMgKzg1MSwyOCBAQAogZGVmaW5lX29uZV9ybyhzaGFyZWRfY3B1X21hcCk7CiBkZWZpbmVfb25lX3JvKHNoYXJlZF9jcHVfbGlzdCk7CiAKLXN0YXRpYyBzdHJ1Y3QgX2NhY2hlX2F0dHIgY2FjaGVfZGlzYWJsZV8wID0gX19BVFRSKGNhY2hlX2Rpc2FibGVfMCwgMDY0NCwKLQkJc2hvd19jYWNoZV9kaXNhYmxlXzAsIHN0b3JlX2NhY2hlX2Rpc2FibGVfMCk7Ci1zdGF0aWMgc3RydWN0IF9jYWNoZV9hdHRyIGNhY2hlX2Rpc2FibGVfMSA9IF9fQVRUUihjYWNoZV9kaXNhYmxlXzEsIDA2NDQsCi0JCXNob3dfY2FjaGVfZGlzYWJsZV8xLCBzdG9yZV9jYWNoZV9kaXNhYmxlXzEpOworI2RlZmluZSBERUZBVUxUX1NZU0ZTX0NBQ0hFX0FUVFJTCVwKKwkmdHlwZS5hdHRyLAkJCVwKKwkmbGV2ZWwuYXR0ciwJCQlcCisJJmNvaGVyZW5jeV9saW5lX3NpemUuYXR0ciwJXAorCSZwaHlzaWNhbF9saW5lX3BhcnRpdGlvbi5hdHRyLAlcCisJJndheXNfb2ZfYXNzb2NpYXRpdml0eS5hdHRyLAlcCisJJm51bWJlcl9vZl9zZXRzLmF0dHIsCQlcCisJJnNpemUuYXR0ciwJCQlcCisJJnNoYXJlZF9jcHVfbWFwLmF0dHIsCQlcCisJJnNoYXJlZF9jcHVfbGlzdC5hdHRyCiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWZhdWx0X2F0dHJzW10gPSB7Ci0JJnR5cGUuYXR0ciwKLQkmbGV2ZWwuYXR0ciwKLQkmY29oZXJlbmN5X2xpbmVfc2l6ZS5hdHRyLAotCSZwaHlzaWNhbF9saW5lX3BhcnRpdGlvbi5hdHRyLAotCSZ3YXlzX29mX2Fzc29jaWF0aXZpdHkuYXR0ciwKLQkmbnVtYmVyX29mX3NldHMuYXR0ciwKLQkmc2l6ZS5hdHRyLAotCSZzaGFyZWRfY3B1X21hcC5hdHRyLAotCSZzaGFyZWRfY3B1X2xpc3QuYXR0ciwKKwlERUZBVUxUX1NZU0ZTX0NBQ0hFX0FUVFJTLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWZhdWx0X2wzX2F0dHJzW10gPSB7CisJREVGQVVMVF9TWVNGU19DQUNIRV9BVFRSUywKKyNpZmRlZiBDT05GSUdfQ1BVX1NVUF9BTUQKIAkmY2FjaGVfZGlzYWJsZV8wLmF0dHIsCiAJJmNhY2hlX2Rpc2FibGVfMS5hdHRyLAorI2VuZGlmCiAJTlVMTAogfTsKIApAQCAtOTA4LDYgKzk2Myw3IEBACiAJdW5zaWduZWQgaW50IGNwdSA9IHN5c19kZXYtPmlkOwogCXVuc2lnbmVkIGxvbmcgaSwgajsKIAlzdHJ1Y3QgX2luZGV4X2tvYmplY3QgKnRoaXNfb2JqZWN0OworCXN0cnVjdCBfY3B1aWQ0X2luZm8gICAqdGhpc19sZWFmOwogCWludCByZXR2YWw7CiAKIAlyZXR2YWwgPSBjcHVpZDRfY2FjaGVfc3lzZnNfaW5pdChjcHUpOwpAQCAtOTI2LDYgKzk4MiwxNCBAQAogCQl0aGlzX29iamVjdCA9IElOREVYX0tPQkpFQ1RfUFRSKGNwdSwgaSk7CiAJCXRoaXNfb2JqZWN0LT5jcHUgPSBjcHU7CiAJCXRoaXNfb2JqZWN0LT5pbmRleCA9IGk7CisKKwkJdGhpc19sZWFmID0gQ1BVSUQ0X0lORk9fSURYKGNwdSwgaSk7CisKKwkJaWYgKHRoaXNfbGVhZi0+Y2FuX2Rpc2FibGUpCisJCQlrdHlwZV9jYWNoZS5kZWZhdWx0X2F0dHJzID0gZGVmYXVsdF9sM19hdHRyczsKKwkJZWxzZQorCQkJa3R5cGVfY2FjaGUuZGVmYXVsdF9hdHRycyA9IGRlZmF1bHRfYXR0cnM7CisKIAkJcmV0dmFsID0ga29iamVjdF9pbml0X2FuZF9hZGQoJih0aGlzX29iamVjdC0+a29iaiksCiAJCQkJCSAgICAgICZrdHlwZV9jYWNoZSwKIAkJCQkJICAgICAgcGVyX2NwdShpY2lfY2FjaGVfa29iamVjdCwgY3B1KSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9NYWtlZmlsZQppbmRleCBmNDM2MWI1Li5hZDllNWVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL01ha2VmaWxlCkBAIC0xLDMgKzEsMyBAQAotb2JqLXkJCTo9IG1haW4ubyBpZi5vIGdlbmVyaWMubyBzdGF0ZS5vIGNsZWFudXAubworb2JqLXkJCTo9IG1haW4ubyBpZi5vIGdlbmVyaWMubyBjbGVhbnVwLm8KIG9iai0kKENPTkZJR19YODZfMzIpICs9IGFtZC5vIGN5cml4Lm8gY2VudGF1ci5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9hbWQuYwppbmRleCAzM2FmMTQxLi45MmJhOWNkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2FtZC5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBtdHJyX29wcyBhbWRfbXRycl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG10cnJfb3BzIGFtZF9tdHJyX29wcyA9IHsKIAkudmVuZG9yICAgICAgICAgICAgPSBYODZfVkVORE9SX0FNRCwKIAkuc2V0ICAgICAgICAgICAgICAgPSBhbWRfc2V0X210cnIsCiAJLmdldCAgICAgICAgICAgICAgID0gYW1kX2dldF9tdHJyLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NlbnRhdXIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jZW50YXVyLmMKaW5kZXggZGU4OWYxNC4uMzE2ZmUzZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NlbnRhdXIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2VudGF1ci5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBtdHJyX29wcyBjZW50YXVyX210cnJfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBtdHJyX29wcyBjZW50YXVyX210cnJfb3BzID0gewogCS52ZW5kb3IgICAgICAgICAgICA9IFg4Nl9WRU5ET1JfQ0VOVEFVUiwKIAkuc2V0ICAgICAgICAgICAgICAgPSBjZW50YXVyX3NldF9tY3IsCiAJLmdldCAgICAgICAgICAgICAgID0gY2VudGF1cl9nZXRfbWNyLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2N5cml4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY3lyaXguYwppbmRleCAyMjhkOTgyLi42OGEzMzQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY3lyaXguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY3lyaXguYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJcG9zdF9zZXQoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBtdHJyX29wcyBjeXJpeF9tdHJyX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRycl9vcHMgY3lyaXhfbXRycl9vcHMgPSB7CiAJLnZlbmRvciAgICAgICAgICAgID0gWDg2X1ZFTkRPUl9DWVJJWCwKIAkuc2V0X2FsbAkgICA9IGN5cml4X3NldF9hbGwsCiAJLnNldCAgICAgICAgICAgICAgID0gY3lyaXhfc2V0X2FyciwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCmluZGV4IDU1ZGEwYzUuLjlhYTVkYzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAJCXRtcCB8PSB+KCgxPDwoaGkgLSAxKSkgLSAxKTsKIAogCQlpZiAodG1wICE9IG1hc2tfbG8pIHsKLQkJCVdBUk5fT05DRSgxLCBLRVJOX0lORk8gIm10cnI6IHlvdXIgQklPUyBoYXMgc2V0IHVwIGFuIGluY29ycmVjdCBtYXNrLCBmaXhpbmcgaXQgdXAuXG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm10cnI6IHlvdXIgQklPUyBoYXMgY29uZmlndXJlZCBhbiBpbmNvcnJlY3QgbWFzaywgZml4aW5nIGl0LlxuIik7CiAJCQltYXNrX2xvID0gdG1wOwogCQl9CiAJfQpAQCAtNTcwLDcgKzU3MCw3IEBACiAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3I0Owotc3RhdGljIERFRklORV9TUElOTE9DSyhzZXRfYXRvbWljaXR5X2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soc2V0X2F0b21pY2l0eV9sb2NrKTsKIAogLyoKICAqIFNpbmNlIHdlIGFyZSBkaXNhYmxpbmcgdGhlIGNhY2hlIGRvbid0IGFsbG93IGFueSBpbnRlcnJ1cHRzLApAQCAtNTkwLDcgKzU5MCw3IEBACiAJICogY2hhbmdlcyB0byB0aGUgd2F5IHRoZSBrZXJuZWwgYm9vdHMKIAkgKi8KIAotCXNwaW5fbG9jaygmc2V0X2F0b21pY2l0eV9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZzZXRfYXRvbWljaXR5X2xvY2spOwogCiAJLyogRW50ZXIgdGhlIG5vLWZpbGwgKENEPTEsIE5XPTApIGNhY2hlIG1vZGUgYW5kIGZsdXNoIGNhY2hlcy4gKi8KIAljcjAgPSByZWFkX2NyMCgpIHwgWDg2X0NSMF9DRDsKQEAgLTYyNyw3ICs2MjcsNyBAQAogCS8qIFJlc3RvcmUgdmFsdWUgb2YgQ1I0ICovCiAJaWYgKGNwdV9oYXNfcGdlKQogCQl3cml0ZV9jcjQoY3I0KTsKLQlzcGluX3VubG9jaygmc2V0X2F0b21pY2l0eV9sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnNldF9hdG9taWNpdHlfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGdlbmVyaWNfc2V0X2FsbCh2b2lkKQpAQCAtNzUyLDcgKzc1Miw3IEBACiAvKgogICogR2VuZXJpYyBzdHJ1Y3R1cmUuLi4KICAqLwotc3RydWN0IG10cnJfb3BzIGdlbmVyaWNfbXRycl9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgbXRycl9vcHMgZ2VuZXJpY19tdHJyX29wcyA9IHsKIAkudXNlX2ludGVsX2lmCQk9IDEsCiAJLnNldF9hbGwJCT0gZ2VuZXJpY19zZXRfYWxsLAogCS5nZXQJCQk9IGdlbmVyaWNfZ2V0X210cnIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYwppbmRleCA4NGU4M2RlLi5mZTQ2MjJlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKQEAgLTYwLDE0ICs2MCwxNCBAQAogdTY0IHNpemVfb3JfbWFzaywgc2l6ZV9hbmRfbWFzazsKIHN0YXRpYyBib29sIG10cnJfYXBzX2RlbGF5ZWRfaW5pdDsKIAotc3RhdGljIHN0cnVjdCBtdHJyX29wcyAqbXRycl9vcHNbWDg2X1ZFTkRPUl9OVU1dOworc3RhdGljIGNvbnN0IHN0cnVjdCBtdHJyX29wcyAqbXRycl9vcHNbWDg2X1ZFTkRPUl9OVU1dOwogCi1zdHJ1Y3QgbXRycl9vcHMgKm10cnJfaWY7Citjb25zdCBzdHJ1Y3QgbXRycl9vcHMgKm10cnJfaWY7CiAKIHN0YXRpYyB2b2lkIHNldF9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZSwKIAkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsIG10cnJfdHlwZSB0eXBlKTsKIAotdm9pZCBzZXRfbXRycl9vcHMoc3RydWN0IG10cnJfb3BzICpvcHMpCit2b2lkIHNldF9tdHJyX29wcyhjb25zdCBzdHJ1Y3QgbXRycl9vcHMgKm9wcykKIHsKIAlpZiAob3BzLT52ZW5kb3IgJiYgb3BzLT52ZW5kb3IgPCBYODZfVkVORE9SX05VTSkKIAkJbXRycl9vcHNbb3BzLT52ZW5kb3JdID0gb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL210cnIuaCBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tdHJyLmgKaW5kZXggYTUwMWRlZS4uZGY1ZTQxZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL210cnIuaAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oCkBAIC0zMiw3ICszMiw3IEBACiBleHRlcm4gaW50IGdlbmVyaWNfdmFsaWRhdGVfYWRkX3BhZ2UodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgdHlwZSk7CiAKLWV4dGVybiBzdHJ1Y3QgbXRycl9vcHMgZ2VuZXJpY19tdHJyX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbXRycl9vcHMgZ2VuZXJpY19tdHJyX29wczsKIAogZXh0ZXJuIGludCBwb3NpdGl2ZV9oYXZlX3dyY29tYih2b2lkKTsKIApAQCAtNTMsMTAgKzUzLDEwIEBACiAJCXUzMiBiYXNlX2xvLCB1MzIgYmFzZV9oaSwgdTMyIG1hc2tfbG8sIHUzMiBtYXNrX2hpKTsKIHZvaWQgZ2V0X210cnJfc3RhdGUodm9pZCk7CiAKLWV4dGVybiB2b2lkIHNldF9tdHJyX29wcyhzdHJ1Y3QgbXRycl9vcHMgKm9wcyk7CitleHRlcm4gdm9pZCBzZXRfbXRycl9vcHMoY29uc3Qgc3RydWN0IG10cnJfb3BzICpvcHMpOwogCiBleHRlcm4gdTY0IHNpemVfb3JfbWFzaywgc2l6ZV9hbmRfbWFzazsKLWV4dGVybiBzdHJ1Y3QgbXRycl9vcHMgKm10cnJfaWY7CitleHRlcm4gY29uc3Qgc3RydWN0IG10cnJfb3BzICptdHJyX2lmOwogCiAjZGVmaW5lIGlzX2NwdSh2bmQpCShtdHJyX2lmICYmIG10cnJfaWYtPnZlbmRvciA9PSBYODZfVkVORE9SXyMjdm5kKQogI2RlZmluZSB1c2VfaW50ZWwoKQkobXRycl9pZiAmJiBtdHJyX2lmLT51c2VfaW50ZWxfaWYgPT0gMSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9zdGF0ZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL3N0YXRlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmYzgwYjQuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL3N0YXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLQotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItY3lyaXguaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+Ci0jaW5jbHVkZSA8YXNtL210cnIuaD4KLSNpbmNsdWRlIDxhc20vbXNyLmg+Ci0KLSNpbmNsdWRlICJtdHJyLmgiCi0KLS8qIFB1dCB0aGUgcHJvY2Vzc29yIGludG8gYSBzdGF0ZSB3aGVyZSBNVFJScyBjYW4gYmUgc2FmZWx5IHNldCAqLwotdm9pZCBzZXRfbXRycl9wcmVwYXJlX3NhdmUoc3RydWN0IHNldF9tdHJyX2NvbnRleHQgKmN0eHQpCi17Ci0JdW5zaWduZWQgaW50IGNyMDsKLQotCS8qIERpc2FibGUgaW50ZXJydXB0cyBsb2NhbGx5ICovCi0JbG9jYWxfaXJxX3NhdmUoY3R4dC0+ZmxhZ3MpOwotCi0JaWYgKHVzZV9pbnRlbCgpIHx8IGlzX2NwdShDWVJJWCkpIHsKLQotCQkvKiBTYXZlIHZhbHVlIG9mIENSNCBhbmQgY2xlYXIgUGFnZSBHbG9iYWwgRW5hYmxlIChiaXQgNykgKi8KLQkJaWYgKGNwdV9oYXNfcGdlKSB7Ci0JCQljdHh0LT5jcjR2YWwgPSByZWFkX2NyNCgpOwotCQkJd3JpdGVfY3I0KGN0eHQtPmNyNHZhbCAmIH5YODZfQ1I0X1BHRSk7Ci0JCX0KLQotCQkvKgotCQkgKiBEaXNhYmxlIGFuZCBmbHVzaCBjYWNoZXMuIE5vdGUgdGhhdCB3YmludmQgZmx1c2hlcyB0aGUgVExCcwotCQkgKiBhcyBhIHNpZGUtZWZmZWN0Ci0JCSAqLwotCQljcjAgPSByZWFkX2NyMCgpIHwgWDg2X0NSMF9DRDsKLQkJd2JpbnZkKCk7Ci0JCXdyaXRlX2NyMChjcjApOwotCQl3YmludmQoKTsKLQotCQlpZiAodXNlX2ludGVsKCkpIHsKLQkJCS8qIFNhdmUgTVRSUiBzdGF0ZSAqLwotCQkJcmRtc3IoTVNSX01UUlJkZWZUeXBlLCBjdHh0LT5kZWZ0eXBlX2xvLCBjdHh0LT5kZWZ0eXBlX2hpKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBDeXJpeCBBUlJzIC0KLQkJCSAqIGV2ZXJ5dGhpbmcgZWxzZSB3ZXJlIGV4Y2x1ZGVkIGF0IHRoZSB0b3AKLQkJCSAqLwotCQkJY3R4dC0+Y2NyMyA9IGdldEN4ODYoQ1g4Nl9DQ1IzKTsKLQkJfQotCX0KLX0KLQotdm9pZCBzZXRfbXRycl9jYWNoZV9kaXNhYmxlKHN0cnVjdCBzZXRfbXRycl9jb250ZXh0ICpjdHh0KQotewotCWlmICh1c2VfaW50ZWwoKSkgewotCQkvKiBEaXNhYmxlIE1UUlJzLCBhbmQgc2V0IHRoZSBkZWZhdWx0IHR5cGUgdG8gdW5jYWNoZWQgKi8KLQkJbXRycl93cm1zcihNU1JfTVRSUmRlZlR5cGUsIGN0eHQtPmRlZnR5cGVfbG8gJiAweGYzMDBVTCwKLQkJICAgICAgY3R4dC0+ZGVmdHlwZV9oaSk7Ci0JfSBlbHNlIHsKLQkJaWYgKGlzX2NwdShDWVJJWCkpIHsKLQkJCS8qIEN5cml4IEFSUnMgLSBldmVyeXRoaW5nIGVsc2Ugd2VyZSBleGNsdWRlZCBhdCB0aGUgdG9wICovCi0JCQlzZXRDeDg2KENYODZfQ0NSMywgKGN0eHQtPmNjcjMgJiAweDBmKSB8IDB4MTApOwotCQl9Ci0JfQotfQotCi0vKiBSZXN0b3JlIHRoZSBwcm9jZXNzb3IgYWZ0ZXIgYSBzZXRfbXRycl9wcmVwYXJlICovCi12b2lkIHNldF9tdHJyX2RvbmUoc3RydWN0IHNldF9tdHJyX2NvbnRleHQgKmN0eHQpCi17Ci0JaWYgKHVzZV9pbnRlbCgpIHx8IGlzX2NwdShDWVJJWCkpIHsKLQotCQkvKiBGbHVzaCBjYWNoZXMgYW5kIFRMQnMgKi8KLQkJd2JpbnZkKCk7Ci0KLQkJLyogUmVzdG9yZSBNVFJSZGVmVHlwZSAqLwotCQlpZiAodXNlX2ludGVsKCkpIHsKLQkJCS8qIEludGVsIChQNikgc3RhbmRhcmQgTVRSUnMgKi8KLQkJCW10cnJfd3Jtc3IoTVNSX01UUlJkZWZUeXBlLCBjdHh0LT5kZWZ0eXBlX2xvLAotCQkJCSAgIGN0eHQtPmRlZnR5cGVfaGkpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIEN5cml4IEFSUnMgLQotCQkJICogZXZlcnl0aGluZyBlbHNlIHdhcyBleGNsdWRlZCBhdCB0aGUgdG9wCi0JCQkgKi8KLQkJCXNldEN4ODYoQ1g4Nl9DQ1IzLCBjdHh0LT5jY3IzKTsKLQkJfQotCi0JCS8qIEVuYWJsZSBjYWNoZXMgKi8KLQkJd3JpdGVfY3IwKHJlYWRfY3IwKCkgJiAweGJmZmZmZmZmKTsKLQotCQkvKiBSZXN0b3JlIHZhbHVlIG9mIENSNCAqLwotCQlpZiAoY3B1X2hhc19wZ2UpCi0JCQl3cml0ZV9jcjQoY3R4dC0+Y3I0dmFsKTsKLQl9Ci0JLyogUmUtZW5hYmxlIGludGVycnVwdHMgbG9jYWxseSAoaWYgZW5hYmxlZCBwcmV2aW91c2x5KSAqLwotCWxvY2FsX2lycV9yZXN0b3JlKGN0eHQtPmZsYWdzKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKaW5kZXggOGMxYzA3MC4uNjQxY2NiOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKQEAgLTcsNiArNyw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4sIFJvYmVydCBSaWNodGVyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEgPHB6aWpsc3RyQHJlZGhhdC5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLCA8bWFya3VzLnQubWV0emdlckBpbnRlbC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLiwgU3RlcGhhbmUgRXJhbmlhbgogICoKICAqICBGb3IgbGljZW5jaW5nIGRldGFpbHMgc2VlIGtlcm5lbC1iYXNlL0NPUFlJTkcKICAqLwpAQCAtMjIsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CkBAIC02OCwyNiArNzAsNTkgQEAKIAl1NjQJcGVic19ldmVudF9yZXNldFtNQVhfUEVCU19FVkVOVFNdOwogfTsKIAorc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgeworCXVuaW9uIHsKKwkJdW5zaWduZWQgbG9uZwlpZHhtc2tbQklUU19UT19MT05HUyhYODZfUE1DX0lEWF9NQVgpXTsKKwkJdTY0CQlpZHhtc2s2NFsxXTsKKwl9OworCWludAljb2RlOworCWludAljbWFzazsKKwlpbnQJd2VpZ2h0OworfTsKKworc3RydWN0IGFtZF9uYiB7CisJaW50IG5iX2lkOyAgLyogTm9ydGhCcmlkZ2UgaWQgKi8KKwlpbnQgcmVmY250OyAvKiByZWZlcmVuY2UgY291bnQgKi8KKwlzdHJ1Y3QgcGVyZl9ldmVudCAqb3duZXJzW1g4Nl9QTUNfSURYX01BWF07CisJc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgZXZlbnRfY29uc3RyYWludHNbWDg2X1BNQ19JRFhfTUFYXTsKK307CisKIHN0cnVjdCBjcHVfaHdfZXZlbnRzIHsKLQlzdHJ1Y3QgcGVyZl9ldmVudAkqZXZlbnRzW1g4Nl9QTUNfSURYX01BWF07Ci0JdW5zaWduZWQgbG9uZwkJdXNlZF9tYXNrW0JJVFNfVE9fTE9OR1MoWDg2X1BNQ19JRFhfTUFYKV07CisJc3RydWN0IHBlcmZfZXZlbnQJKmV2ZW50c1tYODZfUE1DX0lEWF9NQVhdOyAvKiBpbiBjb3VudGVyIG9yZGVyICovCiAJdW5zaWduZWQgbG9uZwkJYWN0aXZlX21hc2tbQklUU19UT19MT05HUyhYODZfUE1DX0lEWF9NQVgpXTsKIAl1bnNpZ25lZCBsb25nCQlpbnRlcnJ1cHRzOwogCWludAkJCWVuYWJsZWQ7CiAJc3RydWN0IGRlYnVnX3N0b3JlCSpkczsKKworCWludAkJCW5fZXZlbnRzOworCWludAkJCW5fYWRkZWQ7CisJaW50CQkJYXNzaWduW1g4Nl9QTUNfSURYX01BWF07IC8qIGV2ZW50IHRvIGNvdW50ZXIgYXNzaWdubWVudCAqLworCXU2NAkJCXRhZ3NbWDg2X1BNQ19JRFhfTUFYXTsKKwlzdHJ1Y3QgcGVyZl9ldmVudAkqZXZlbnRfbGlzdFtYODZfUE1DX0lEWF9NQVhdOyAvKiBpbiBlbmFibGVkIG9yZGVyICovCisJc3RydWN0IGFtZF9uYgkJKmFtZF9uYjsKIH07CiAKLXN0cnVjdCBldmVudF9jb25zdHJhaW50IHsKLQl1bnNpZ25lZCBsb25nCWlkeG1za1tCSVRTX1RPX0xPTkdTKFg4Nl9QTUNfSURYX01BWCldOwotCWludAkJY29kZTsKLX07CisjZGVmaW5lIF9fRVZFTlRfQ09OU1RSQUlOVChjLCBuLCBtLCB3KSB7XAorCXsgLmlkeG1zazY0WzBdID0gKG4pIH0sCQlcCisJLmNvZGUgPSAoYyksCQkJXAorCS5jbWFzayA9IChtKSwJCQlcCisJLndlaWdodCA9ICh3KSwJCQlcCit9CiAKLSNkZWZpbmUgRVZFTlRfQ09OU1RSQUlOVChjLCBtKSB7IC5jb2RlID0gKGMpLCAuaWR4bXNrWzBdID0gKG0pIH0KLSNkZWZpbmUgRVZFTlRfQ09OU1RSQUlOVF9FTkQgIHsgLmNvZGUgPSAwLCAuaWR4bXNrWzBdID0gMCB9CisjZGVmaW5lIEVWRU5UX0NPTlNUUkFJTlQoYywgbiwgbSkJXAorCV9fRVZFTlRfQ09OU1RSQUlOVChjLCBuLCBtLCBIV0VJR0hUKG4pKQogCi0jZGVmaW5lIGZvcl9lYWNoX2V2ZW50X2NvbnN0cmFpbnQoZSwgYykgXAotCWZvciAoKGUpID0gKGMpOyAoZSktPmlkeG1za1swXTsgKGUpKyspCisjZGVmaW5lIElOVEVMX0VWRU5UX0NPTlNUUkFJTlQoYywgbikJXAorCUVWRU5UX0NPTlNUUkFJTlQoYywgbiwgSU5URUxfQVJDSF9FVlRTRUxfTUFTSykKIAorI2RlZmluZSBGSVhFRF9FVkVOVF9DT05TVFJBSU5UKGMsIG4pCVwKKwlFVkVOVF9DT05TVFJBSU5UKGMsIG4sIElOVEVMX0FSQ0hfRklYRURfTUFTSykKKworI2RlZmluZSBFVkVOVF9DT05TVFJBSU5UX0VORAkJXAorCUVWRU5UX0NPTlNUUkFJTlQoMCwgMCwgMCkKKworI2RlZmluZSBmb3JfZWFjaF9ldmVudF9jb25zdHJhaW50KGUsIGMpCVwKKwlmb3IgKChlKSA9IChjKTsgKGUpLT5jbWFzazsgKGUpKyspCiAKIC8qCiAgKiBzdHJ1Y3QgeDg2X3BtdSAtIGdlbmVyaWMgeDg2IHBtdQpAQCAtMTE0LDggKzE0OSwxNCBAQAogCXU2NAkJaW50ZWxfY3RybDsKIAl2b2lkCQkoKmVuYWJsZV9idHMpKHU2NCBjb25maWcpOwogCXZvaWQJCSgqZGlzYWJsZV9idHMpKHZvaWQpOwotCWludAkJKCpnZXRfZXZlbnRfaWR4KShzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKLQkJCQkJIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpOworCisJc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKgorCQkJKCpnZXRfZXZlbnRfY29uc3RyYWludHMpKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLAorCQkJCQkJIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CisKKwl2b2lkCQkoKnB1dF9ldmVudF9jb25zdHJhaW50cykoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsCisJCQkJCQkgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKKwlzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqZXZlbnRfY29uc3RyYWludHM7CiB9OwogCiBzdGF0aWMgc3RydWN0IHg4Nl9wbXUgeDg2X3BtdSBfX3JlYWRfbW9zdGx5OwpAQCAtMTI0LDExMSArMTY1LDggQEAKIAkuZW5hYmxlZCA9IDEsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKmV2ZW50X2NvbnN0cmFpbnRzOwotCi0vKgotICogTm90IHN1cmUgYWJvdXQgc29tZSBvZiB0aGVzZQotICovCi1zdGF0aWMgY29uc3QgdTY0IHA2X3BlcmZtb25fZXZlbnRfbWFwW10gPQotewotICBbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkJPSAweDAwNzksCi0gIFtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JCT0gMHgwMGMwLAotICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXQk9IDB4MGYyZSwKLSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXQkJPSAweDAxMmUsCi0gIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdCT0gMHgwMGM0LAotICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXQkJPSAweDAwYzUsCi0gIFtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCQk9IDB4MDA2MiwKLX07Ci0KLXN0YXRpYyB1NjQgcDZfcG11X2V2ZW50X21hcChpbnQgaHdfZXZlbnQpCi17Ci0JcmV0dXJuIHA2X3BlcmZtb25fZXZlbnRfbWFwW2h3X2V2ZW50XTsKLX0KLQotLyoKLSAqIEV2ZW50IHNldHRpbmcgdGhhdCBpcyBzcGVjaWZpZWQgbm90IHRvIGNvdW50IGFueXRoaW5nLgotICogV2UgdXNlIHRoaXMgdG8gZWZmZWN0aXZlbHkgZGlzYWJsZSBhIGNvdW50ZXIuCi0gKgotICogTDJfUlFTVFMgd2l0aCAwIE1FU0kgdW5pdCBtYXNrLgotICovCi0jZGVmaW5lIFA2X05PUF9FVkVOVAkJCTB4MDAwMDAwMkVVTEwKLQotc3RhdGljIHU2NCBwNl9wbXVfcmF3X2V2ZW50KHU2NCBod19ldmVudCkKLXsKLSNkZWZpbmUgUDZfRVZOVFNFTF9FVkVOVF9NQVNLCQkweDAwMDAwMEZGVUxMCi0jZGVmaW5lIFA2X0VWTlRTRUxfVU5JVF9NQVNLCQkweDAwMDBGRjAwVUxMCi0jZGVmaW5lIFA2X0VWTlRTRUxfRURHRV9NQVNLCQkweDAwMDQwMDAwVUxMCi0jZGVmaW5lIFA2X0VWTlRTRUxfSU5WX01BU0sJCTB4MDA4MDAwMDBVTEwKLSNkZWZpbmUgUDZfRVZOVFNFTF9SRUdfTUFTSwkJMHhGRjAwMDAwMFVMTAotCi0jZGVmaW5lIFA2X0VWTlRTRUxfTUFTSwkJCVwKLQkoUDZfRVZOVFNFTF9FVkVOVF9NQVNLIHwJXAotCSBQNl9FVk5UU0VMX1VOSVRfTUFTSyAgfAlcCi0JIFA2X0VWTlRTRUxfRURHRV9NQVNLICB8CVwKLQkgUDZfRVZOVFNFTF9JTlZfTUFTSyAgIHwJXAotCSBQNl9FVk5UU0VMX1JFR19NQVNLKQotCi0JcmV0dXJuIGh3X2V2ZW50ICYgUDZfRVZOVFNFTF9NQVNLOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfcDZfZXZlbnRfY29uc3RyYWludHNbXSA9Ci17Ci0JRVZFTlRfQ09OU1RSQUlOVCgweGMxLCAweDEpLAkvKiBGTE9QUyAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHgxMCwgMHgxKSwJLyogRlBfQ09NUF9PUFNfRVhFICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDExLCAweDEpLAkvKiBGUF9BU1NJU1QgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4MTIsIDB4MiksCS8qIE1VTCAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHgxMywgMHgyKSwJLyogRElWICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDE0LCAweDEpLAkvKiBDWUNMRVNfRElWX0JVU1kgKi8KLQlFVkVOVF9DT05TVFJBSU5UX0VORAotfTsKLQotLyoKLSAqIEludGVsIFBlcmZNb24gdjMuIFVzZWQgb24gQ29yZTIgYW5kIGxhdGVyLgotICovCi1zdGF0aWMgY29uc3QgdTY0IGludGVsX3BlcmZtb25fZXZlbnRfbWFwW10gPQotewotICBbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkJPSAweDAwM2MsCi0gIFtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JCT0gMHgwMGMwLAotICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXQk9IDB4NGYyZSwKLSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXQkJPSAweDQxMmUsCi0gIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdCT0gMHgwMGM0LAotICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXQkJPSAweDAwYzUsCi0gIFtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCQk9IDB4MDEzYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9jb3JlX2V2ZW50X2NvbnN0cmFpbnRzW10gPQotewotCUVWRU5UX0NPTlNUUkFJTlQoMHgxMCwgMHgxKSwJLyogRlBfQ09NUF9PUFNfRVhFICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDExLCAweDIpLAkvKiBGUF9BU1NJU1QgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4MTIsIDB4MiksCS8qIE1VTCAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHgxMywgMHgyKSwJLyogRElWICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDE0LCAweDEpLAkvKiBDWUNMRVNfRElWX0JVU1kgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4MTgsIDB4MSksCS8qIElETEVfRFVSSU5HX0RJViAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHgxOSwgMHgyKSwJLyogREVMQVlFRF9CWVBBU1MgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4YTEsIDB4MSksCS8qIFJTX1VPUFNfRElTUEFUQ0hfQ1lDTEVTICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweGNiLCAweDEpLAkvKiBNRU1fTE9BRF9SRVRJUkVEICovCi0JRVZFTlRfQ09OU1RSQUlOVF9FTkQKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9uZWhhbGVtX2V2ZW50X2NvbnN0cmFpbnRzW10gPQotewotCUVWRU5UX0NPTlNUUkFJTlQoMHg0MCwgMHgzKSwJLyogTDFEX0NBQ0hFX0xEICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDQxLCAweDMpLAkvKiBMMURfQ0FDSEVfU1QgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4NDIsIDB4MyksCS8qIEwxRF9DQUNIRV9MT0NLICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDQzLCAweDMpLAkvKiBMMURfQUxMX1JFRiAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHg0ZSwgMHgzKSwJLyogTDFEX1BSRUZFVENIICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDRjLCAweDMpLAkvKiBMT0FEX0hJVF9QUkUgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4NTEsIDB4MyksCS8qIEwxRCAqLwotCUVWRU5UX0NPTlNUUkFJTlQoMHg1MiwgMHgzKSwJLyogTDFEX0NBQ0hFX1BSRUZFVENIX0xPQ0tfRkJfSElUICovCi0JRVZFTlRfQ09OU1RSQUlOVCgweDUzLCAweDMpLAkvKiBMMURfQ0FDSEVfTE9DS19GQl9ISVQgKi8KLQlFVkVOVF9DT05TVFJBSU5UKDB4YzUsIDB4MyksCS8qIENBQ0hFX0xPQ0tfQ1lDTEVTICovCi0JRVZFTlRfQ09OU1RSQUlOVF9FTkQKLX07Ci0KLXN0YXRpYyB1NjQgaW50ZWxfcG11X2V2ZW50X21hcChpbnQgaHdfZXZlbnQpCi17Ci0JcmV0dXJuIGludGVsX3BlcmZtb25fZXZlbnRfbWFwW2h3X2V2ZW50XTsKLX0KK3N0YXRpYyBpbnQgeDg2X3BlcmZfZXZlbnRfc2V0X3BlcmlvZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkgICAgIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpOwogCiAvKgogICogR2VuZXJhbGl6ZWQgaHcgY2FjaGluZyByZWxhdGVkIGh3X2V2ZW50IHRhYmxlLCBmaWxsZWQKQEAgLTI0NSw0MjQgKzE4Myw2IEBACiAJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQogCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdOwogCi1zdGF0aWMgX19pbml0Y29uc3QgdTY0IG5laGFsZW1faHdfY2FjaGVfZXZlbnRfaWRzCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Ci17Ci0gWyBDKEwxRCkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDAsIC8qIEwxRF9DQUNIRV9MRC5JX1NUQVRFICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDEsIC8qIEwxRF9DQUNIRV9TVC5JX1NUQVRFICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNGUsIC8qIEwxRF9QUkVGRVRDSC5SRVFVRVNUUyAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyNGUsIC8qIEwxRF9QUkVGRVRDSC5NSVNTICAgICAgICAgICAgKi8KLQl9LAotIH0sCi0gWyBDKEwxSSApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzgwLCAvKiBMMUkuUkVBRFMgICAgICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjgwLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MCwKLQl9LAotIH0sCi0gWyBDKExMICApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzI0LCAvKiBMMl9SUVNUUy5MT0FEUyAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjI0LCAvKiBMMl9SUVNUUy5MRF9NSVNTICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwYzI0LCAvKiBMMl9SUVNUUy5SRk9TICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwODI0LCAvKiBMMl9SUVNUUy5SRk9fTUlTUyAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjJlLCAvKiBMTEMgUmVmZXJlbmNlICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJlLCAvKiBMTEMgTWlzc2VzICAgICAgICAgICAgICAgICAgICovCi0JfSwKLSB9LAotIFsgQyhEVExCKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgICAoYWxpYXMpICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDEwOCwgLyogRFRMQl9MT0FEX01JU1NFUy5BTlkgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgICAoYWxpYXMpICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDEwYywgLyogTUVNX1NUT1JFX1JFVElSRUQuRFRMQl9NSVNTICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAsCi0JfSwKLSB9LAotIFsgQyhJVExCKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDFjMCwgLyogSU5TVF9SRVRJUkVELkFOWV9QICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MjBjOCwgLyogSVRMQl9NSVNTX1JFVElSRUQgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0gfSwKLSBbIEMoQlBVICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzQsIC8qIEJSX0lOU1RfUkVUSVJFRC5BTExfQlJBTkNIRVMgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAzZTgsIC8qIEJQVV9DTEVBUlMuQU5ZICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotIH0sCi19OwotCi1zdGF0aWMgX19pbml0Y29uc3QgdTY0IGNvcmUyX2h3X2NhY2hlX2V2ZW50X2lkcwotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPQotewotIFsgQyhMMUQpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MCwgLyogTDFEX0NBQ0hFX0xELklfU1RBVEUgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTQxLCAvKiBMMURfQ0FDSEVfU1QuSV9TVEFURSAgICAgICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MTA0ZSwgLyogTDFEX1BSRUZFVENILlJFUVVFU1RTICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoTDFJICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwODAsIC8qIEwxSS5SRUFEUyAgICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDgxLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKExMICApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjI5LCAvKiBMMl9MRC5NRVNJICAgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyOSwgLyogTDJfTEQuSVNUQVRFICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMkEsIC8qIEwyX1NULk1FU0kgICAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJBLCAvKiBMMl9TVC5JU1RBVEUgICAgICAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKERUTEIpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgKGFsaWFzKSAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDIwOCwgLyogRFRMQl9NSVNTRVMuTUlTU19MRCAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAoYWxpYXMpICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwODA4LCAvKiBEVExCX01JU1NFUy5NSVNTX1NUICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKElUTEIpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGMwLCAvKiBJTlNUX1JFVElSRUQuQU5ZX1AgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MTI4MiwgLyogSVRMQk1JU1NFUyAgICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotIH0sCi0gWyBDKEJQVSApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGM0LCAvKiBCUl9JTlNUX1JFVElSRUQuQU5ZICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDBjNSwgLyogQlBfSU5TVF9SRVRJUkVELk1JU1BSRUQgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotIH0sCi19OwotCi1zdGF0aWMgX19pbml0Y29uc3QgdTY0IGF0b21faHdfY2FjaGVfZXZlbnRfaWRzCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Ci17Ci0gWyBDKEwxRCkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDIxNDAsIC8qIEwxRF9DQUNIRS5MRCAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDIyNDAsIC8qIEwxRF9DQUNIRS5TVCAgICAgICAgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKEwxSSApIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzgwLCAvKiBMMUkuUkVBRFMgICAgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI4MCwgLyogTDFJLk1JU1NFUyAgICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhMTCAgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4NGYyOSwgLyogTDJfTEQuTUVTSSAgICAgICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMjksIC8qIEwyX0xELklTVEFURSAgICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjJBLCAvKiBMMl9TVC5NRVNJICAgICAgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyQSwgLyogTDJfU1QuSVNUQVRFICAgICAgICAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhEVExCKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MjE0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgIChhbGlhcykgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDA1MDgsIC8qIERUTEJfTUlTU0VTLk1JU1NfTEQgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgyMjQwLCAvKiBMMURfQ0FDSEVfU1QuTUVTSSAgKGFsaWFzKSAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDYwOCwgLyogRFRMQl9NSVNTRVMuTUlTU19TVCAgICAgICAgKi8KLQl9LAotCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLSB9LAotIFsgQyhJVExCKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjMCwgLyogSU5TVF9SRVRJUkVELkFOWV9QICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyODIsIC8qIElUTEIuTUlTU0VTICAgICAgICAgICAgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLSB9LAotIFsgQyhCUFUgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjNCwgLyogQlJfSU5TVF9SRVRJUkVELkFOWSAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwYzUsIC8qIEJQX0lOU1RfUkVUSVJFRC5NSVNQUkVEICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLSB9LAotfTsKLQotc3RhdGljIHU2NCBpbnRlbF9wbXVfcmF3X2V2ZW50KHU2NCBod19ldmVudCkKLXsKLSNkZWZpbmUgQ09SRV9FVk5UU0VMX0VWRU5UX01BU0sJCTB4MDAwMDAwRkZVTEwKLSNkZWZpbmUgQ09SRV9FVk5UU0VMX1VOSVRfTUFTSwkJMHgwMDAwRkYwMFVMTAotI2RlZmluZSBDT1JFX0VWTlRTRUxfRURHRV9NQVNLCQkweDAwMDQwMDAwVUxMCi0jZGVmaW5lIENPUkVfRVZOVFNFTF9JTlZfTUFTSwkJMHgwMDgwMDAwMFVMTAotI2RlZmluZSBDT1JFX0VWTlRTRUxfUkVHX01BU0sJCTB4RkYwMDAwMDBVTEwKLQotI2RlZmluZSBDT1JFX0VWTlRTRUxfTUFTSwkJXAotCShDT1JFX0VWTlRTRUxfRVZFTlRfTUFTSyB8CVwKLQkgQ09SRV9FVk5UU0VMX1VOSVRfTUFTSyAgfAlcCi0JIENPUkVfRVZOVFNFTF9FREdFX01BU0sgIHwJXAotCSBDT1JFX0VWTlRTRUxfSU5WX01BU0sgIHwJXAotCSBDT1JFX0VWTlRTRUxfUkVHX01BU0spCi0KLQlyZXR1cm4gaHdfZXZlbnQgJiBDT1JFX0VWTlRTRUxfTUFTSzsKLX0KLQotc3RhdGljIF9faW5pdGNvbnN0IHU2NCBhbWRfaHdfY2FjaGVfZXZlbnRfaWRzCi0JCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQotCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KLQkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Ci17Ci0gWyBDKEwxRCkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwNDAsIC8qIERhdGEgQ2FjaGUgQWNjZXNzZXMgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDQxLCAvKiBEYXRhIENhY2hlIE1pc3NlcyAgICAgICAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE0MiwgLyogRGF0YSBDYWNoZSBSZWZpbGxzIDpzeXN0ZW0gKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDI2NywgLyogRGF0YSBQcmVmZXRjaGVyIDphdHRlbXB0cyAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNjcsIC8qIERhdGEgUHJlZmV0Y2hlciA6Y2FuY2VsbGVkICovCi0JfSwKLSB9LAotIFsgQyhMMUkgKSBdID0gewotCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA4MCwgLyogSW5zdHJ1Y3Rpb24gY2FjaGUgZmV0Y2hlcyAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwODEsIC8qIEluc3RydWN0aW9uIGNhY2hlIG1pc3NlcyAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMTRCLCAvKiBQcmVmZXRjaCBJbnN0cnVjdGlvbnMgOkxvYWQgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoTEwgICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAzN0QsIC8qIFJlcXVlc3RzIHRvIEwyIENhY2hlIDpJQytEQyAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDM3RSwgLyogTDIgQ2FjaGUgTWlzc2VzIDogSUMrREMgICAgICovCi0JfSwKLQlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMTdGLCAvKiBMMiBGaWxsL1dyaXRlYmFjayAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKLQl9LAotIH0sCi0gWyBDKERUTEIpIF0gPSB7Ci0JWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMDQwLCAvKiBEYXRhIENhY2hlIEFjY2Vzc2VzICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDA0NiwgLyogTDEgRFRMQiBhbmQgTDIgRExUQiBNaXNzICAgKi8KLQl9LAotCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCi0JfSwKLQlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAotCX0sCi0gfSwKLSBbIEMoSVRMQikgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwODAsIC8qIEluc3RydWN0aW9uIGZlY3RoZXMgICAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDg1LCAvKiBJbnN0ci4gZmV0Y2ggSVRMQiBtaXNzZXMgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0gfSwKLSBbIEMoQlBVICkgXSA9IHsKLQlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzIsIC8qIFJldGlyZWQgQnJhbmNoIEluc3RyLiAgICAgICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMGMzLCAvKiBSZXRpcmVkIE1pc3ByZWRpY3RlZCBCSSAgICAqLwotCX0sCi0JWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0JWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAotCX0sCi0gfSwKLX07Ci0KLS8qCi0gKiBBTUQgUGVyZm9ybWFuY2UgTW9uaXRvciBLNyBhbmQgbGF0ZXIuCi0gKi8KLXN0YXRpYyBjb25zdCB1NjQgYW1kX3BlcmZtb25fZXZlbnRfbWFwW10gPQotewotICBbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkJPSAweDAwNzYsCi0gIFtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JCT0gMHgwMGMwLAotICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXQk9IDB4MDA4MCwKLSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXQkJPSAweDAwODEsCi0gIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdCT0gMHgwMGM0LAotICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXQkJPSAweDAwYzUsCi19OwotCi1zdGF0aWMgdTY0IGFtZF9wbXVfZXZlbnRfbWFwKGludCBod19ldmVudCkKLXsKLQlyZXR1cm4gYW1kX3BlcmZtb25fZXZlbnRfbWFwW2h3X2V2ZW50XTsKLX0KLQotc3RhdGljIHU2NCBhbWRfcG11X3Jhd19ldmVudCh1NjQgaHdfZXZlbnQpCi17Ci0jZGVmaW5lIEs3X0VWTlRTRUxfRVZFTlRfTUFTSwkweDcwMDAwMDBGRlVMTAotI2RlZmluZSBLN19FVk5UU0VMX1VOSVRfTUFTSwkweDAwMDAwRkYwMFVMTAotI2RlZmluZSBLN19FVk5UU0VMX0VER0VfTUFTSwkweDAwMDA0MDAwMFVMTAotI2RlZmluZSBLN19FVk5UU0VMX0lOVl9NQVNLCTB4MDAwODAwMDAwVUxMCi0jZGVmaW5lIEs3X0VWTlRTRUxfUkVHX01BU0sJMHgwRkYwMDAwMDBVTEwKLQotI2RlZmluZSBLN19FVk5UU0VMX01BU0sJCQlcCi0JKEs3X0VWTlRTRUxfRVZFTlRfTUFTSyB8CVwKLQkgSzdfRVZOVFNFTF9VTklUX01BU0sgIHwJXAotCSBLN19FVk5UU0VMX0VER0VfTUFTSyAgfAlcCi0JIEs3X0VWTlRTRUxfSU5WX01BU0sgICB8CVwKLQkgSzdfRVZOVFNFTF9SRUdfTUFTSykKLQotCXJldHVybiBod19ldmVudCAmIEs3X0VWTlRTRUxfTUFTSzsKLX0KLQogLyoKICAqIFByb3BhZ2F0ZSBldmVudCBlbGFwc2VkIHRpbWUgaW50byB0aGUgZ2VuZXJpYyBldmVudC4KICAqIENhbiBvbmx5IGJlIGV4ZWN1dGVkIG9uIHRoZSBDUFUgd2hlcmUgdGhlIGV2ZW50IGlzIGFjdGl2ZS4KQEAgLTkxNCw0MiArNDM0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfcG11X2VuYWJsZV9idHModTY0IGNvbmZpZykKLXsKLQl1bnNpZ25lZCBsb25nIGRlYnVnY3RsbXNyOwotCi0JZGVidWdjdGxtc3IgPSBnZXRfZGVidWdjdGxtc3IoKTsKLQotCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9UUjsKLQlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfQlRTOwotCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9CVElOVDsKLQotCWlmICghKGNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9PUykpCi0JCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX09TOwotCi0JaWYgKCEoY29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX1VTUikpCi0JCWRlYnVnY3RsbXNyIHw9IFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX1VTUjsKLQotCXVwZGF0ZV9kZWJ1Z2N0bG1zcihkZWJ1Z2N0bG1zcik7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX3BtdV9kaXNhYmxlX2J0cyh2b2lkKQotewotCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0JdW5zaWduZWQgbG9uZyBkZWJ1Z2N0bG1zcjsKLQotCWlmICghY3B1Yy0+ZHMpCi0JCXJldHVybjsKLQotCWRlYnVnY3RsbXNyID0gZ2V0X2RlYnVnY3RsbXNyKCk7Ci0KLQlkZWJ1Z2N0bG1zciAmPQotCQl+KFg4Nl9ERUJVR0NUTF9UUiB8IFg4Nl9ERUJVR0NUTF9CVFMgfCBYODZfREVCVUdDVExfQlRJTlQgfAotCQkgIFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX09TIHwgWDg2X0RFQlVHQ1RMX0JUU19PRkZfVVNSKTsKLQotCXVwZGF0ZV9kZWJ1Z2N0bG1zcihkZWJ1Z2N0bG1zcik7Ci19Ci0KIC8qCiAgKiBTZXR1cCB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBhdHRyX3R5cGUKICAqLwpAQCAtOTg4LDYgKzQ3Miw4IEBACiAJaHdjLT5jb25maWcgPSBBUkNIX1BFUkZNT05fRVZFTlRTRUxfSU5UOwogCiAJaHdjLT5pZHggPSAtMTsKKwlod2MtPmxhc3RfY3B1ID0gLTE7CisJaHdjLT5sYXN0X3RhZyA9IH4wVUxMOwogCiAJLyoKIAkgKiBDb3VudCB1c2VyIGFuZCBPUyBldmVudHMgdW5sZXNzIHJlcXVlc3RlZCBub3QgdG8uCkBAIC0xMDU2LDEyNiArNTQyLDQ2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHA2X3BtdV9kaXNhYmxlX2FsbCh2b2lkKQotewotCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0JdTY0IHZhbDsKLQotCWlmICghY3B1Yy0+ZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JY3B1Yy0+ZW5hYmxlZCA9IDA7Ci0JYmFycmllcigpOwotCi0JLyogcDYgb25seSBoYXMgb25lIGVuYWJsZSByZWdpc3RlciAqLwotCXJkbXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7Ci0JdmFsICY9IH5BUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRTsKLQl3cm1zcmwoTVNSX1A2X0VWTlRTRUwwLCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfZGlzYWJsZV9hbGwodm9pZCkKLXsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCi0JaWYgKCFjcHVjLT5lbmFibGVkKQotCQlyZXR1cm47Ci0KLQljcHVjLT5lbmFibGVkID0gMDsKLQliYXJyaWVyKCk7Ci0KLQl3cm1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgMCk7Ci0KLQlpZiAodGVzdF9iaXQoWDg2X1BNQ19JRFhfRklYRURfQlRTLCBjcHVjLT5hY3RpdmVfbWFzaykpCi0JCWludGVsX3BtdV9kaXNhYmxlX2J0cygpOwotfQotCi1zdGF0aWMgdm9pZCBhbWRfcG11X2Rpc2FibGVfYWxsKHZvaWQpCitzdGF0aWMgdm9pZCB4ODZfcG11X2Rpc2FibGVfYWxsKHZvaWQpCiB7CiAJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKIAlpbnQgaWR4OwogCi0JaWYgKCFjcHVjLT5lbmFibGVkKQotCQlyZXR1cm47Ci0KLQljcHVjLT5lbmFibGVkID0gMDsKLQkvKgotCSAqIGVuc3VyZSB3ZSB3cml0ZSB0aGUgZGlzYWJsZSBiZWZvcmUgd2Ugc3RhcnQgZGlzYWJsaW5nIHRoZQotCSAqIGV2ZW50cyBwcm9wZXIsIHNvIHRoYXQgYW1kX3BtdV9lbmFibGVfZXZlbnQoKSBkb2VzIHRoZQotCSAqIHJpZ2h0IHRoaW5nLgotCSAqLwotCWJhcnJpZXIoKTsKLQogCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpZHgrKykgewogCQl1NjQgdmFsOwogCiAJCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCiAJCQljb250aW51ZTsKLQkJcmRtc3JsKE1TUl9LN19FVk5UU0VMMCArIGlkeCwgdmFsKTsKKwkJcmRtc3JsKHg4Nl9wbXUuZXZlbnRzZWwgKyBpZHgsIHZhbCk7CiAJCWlmICghKHZhbCAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFKSkKIAkJCWNvbnRpbnVlOwogCQl2YWwgJj0gfkFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOwotCQl3cm1zcmwoTVNSX0s3X0VWTlRTRUwwICsgaWR4LCB2YWwpOworCQl3cm1zcmwoeDg2X3BtdS5ldmVudHNlbCArIGlkeCwgdmFsKTsKIAl9CiB9CiAKIHZvaWQgaHdfcGVyZl9kaXNhYmxlKHZvaWQpCiB7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwogCWlmICgheDg2X3BtdV9pbml0aWFsaXplZCgpKQogCQlyZXR1cm47Ci0JcmV0dXJuIHg4Nl9wbXUuZGlzYWJsZV9hbGwoKTsKLX0KIAotc3RhdGljIHZvaWQgcDZfcG11X2VuYWJsZV9hbGwodm9pZCkKLXsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCXVuc2lnbmVkIGxvbmcgdmFsOwotCi0JaWYgKGNwdWMtPmVuYWJsZWQpCisJaWYgKCFjcHVjLT5lbmFibGVkKQogCQlyZXR1cm47CiAKLQljcHVjLT5lbmFibGVkID0gMTsKKwljcHVjLT5uX2FkZGVkID0gMDsKKwljcHVjLT5lbmFibGVkID0gMDsKIAliYXJyaWVyKCk7CiAKLQkvKiBwNiBvbmx5IGhhcyBvbmUgZW5hYmxlIHJlZ2lzdGVyICovCi0JcmRtc3JsKE1TUl9QNl9FVk5UU0VMMCwgdmFsKTsKLQl2YWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7Ci0Jd3Jtc3JsKE1TUl9QNl9FVk5UU0VMMCwgdmFsKTsKKwl4ODZfcG11LmRpc2FibGVfYWxsKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGludGVsX3BtdV9lbmFibGVfYWxsKHZvaWQpCi17Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKLQotCWlmIChjcHVjLT5lbmFibGVkKQotCQlyZXR1cm47Ci0KLQljcHVjLT5lbmFibGVkID0gMTsKLQliYXJyaWVyKCk7Ci0KLQl3cm1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCwgeDg2X3BtdS5pbnRlbF9jdHJsKTsKLQotCWlmICh0ZXN0X2JpdChYODZfUE1DX0lEWF9GSVhFRF9CVFMsIGNwdWMtPmFjdGl2ZV9tYXNrKSkgewotCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPQotCQkJY3B1Yy0+ZXZlbnRzW1g4Nl9QTUNfSURYX0ZJWEVEX0JUU107Ci0KLQkJaWYgKFdBUk5fT05fT05DRSghZXZlbnQpKQotCQkJcmV0dXJuOwotCi0JCWludGVsX3BtdV9lbmFibGVfYnRzKGV2ZW50LT5ody5jb25maWcpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYW1kX3BtdV9lbmFibGVfYWxsKHZvaWQpCitzdGF0aWMgdm9pZCB4ODZfcG11X2VuYWJsZV9hbGwodm9pZCkKIHsKIAlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCWludCBpZHg7CiAKLQlpZiAoY3B1Yy0+ZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JY3B1Yy0+ZW5hYmxlZCA9IDE7Ci0JYmFycmllcigpOwotCiAJZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHM7IGlkeCsrKSB7CiAJCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tpZHhdOwogCQl1NjQgdmFsOwpAQCAtMTE4NSwzMiArNTkxLDI2NiBAQAogCiAJCXZhbCA9IGV2ZW50LT5ody5jb25maWc7CiAJCXZhbCB8PSBBUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRTsKLQkJd3Jtc3JsKE1TUl9LN19FVk5UU0VMMCArIGlkeCwgdmFsKTsKKwkJd3Jtc3JsKHg4Nl9wbXUuZXZlbnRzZWwgKyBpZHgsIHZhbCk7CiAJfQogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdSBwbXU7CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3g4Nl9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJcmV0dXJuIGV2ZW50LT5wbXUgPT0gJnBtdTsKK30KKworc3RhdGljIGludCB4ODZfc2NoZWR1bGVfZXZlbnRzKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBpbnQgbiwgaW50ICphc3NpZ24pCit7CisJc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKmMsICpjb25zdHJhaW50c1tYODZfUE1DX0lEWF9NQVhdOworCXVuc2lnbmVkIGxvbmcgdXNlZF9tYXNrW0JJVFNfVE9fTE9OR1MoWDg2X1BNQ19JRFhfTUFYKV07CisJaW50IGksIGosIHcsIHdtYXgsIG51bSA9IDA7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YzsKKworCWJpdG1hcF96ZXJvKHVzZWRfbWFzaywgWDg2X1BNQ19JRFhfTUFYKTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJY29uc3RyYWludHNbaV0gPQorCQkgIHg4Nl9wbXUuZ2V0X2V2ZW50X2NvbnN0cmFpbnRzKGNwdWMsIGNwdWMtPmV2ZW50X2xpc3RbaV0pOworCX0KKworCS8qCisJICogZmFzdHBhdGgsIHRyeSB0byByZXVzZSBwcmV2aW91cyByZWdpc3RlcgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJaHdjID0gJmNwdWMtPmV2ZW50X2xpc3RbaV0tPmh3OworCQljID0gY29uc3RyYWludHNbaV07CisKKwkJLyogbmV2ZXIgYXNzaWduZWQgKi8KKwkJaWYgKGh3Yy0+aWR4ID09IC0xKQorCQkJYnJlYWs7CisKKwkJLyogY29uc3RyYWludCBzdGlsbCBob25vcmVkICovCisJCWlmICghdGVzdF9iaXQoaHdjLT5pZHgsIGMtPmlkeG1zaykpCisJCQlicmVhazsKKworCQkvKiBub3QgYWxyZWFkeSB1c2VkICovCisJCWlmICh0ZXN0X2JpdChod2MtPmlkeCwgdXNlZF9tYXNrKSkKKwkJCWJyZWFrOworCisJCXNldF9iaXQoaHdjLT5pZHgsIHVzZWRfbWFzayk7CisJCWlmIChhc3NpZ24pCisJCQlhc3NpZ25baV0gPSBod2MtPmlkeDsKKwl9CisJaWYgKGkgPT0gbikKKwkJZ290byBkb25lOworCisJLyoKKwkgKiBiZWdpbiBzbG93IHBhdGgKKwkgKi8KKworCWJpdG1hcF96ZXJvKHVzZWRfbWFzaywgWDg2X1BNQ19JRFhfTUFYKTsKKworCS8qCisJICogd2VpZ2h0ID0gbnVtYmVyIG9mIHBvc3NpYmxlIGNvdW50ZXJzCisJICoKKwkgKiAxICAgID0gbW9zdCBjb25zdHJhaW5lZCwgb25seSB3b3JrcyBvbiBvbmUgY291bnRlcgorCSAqIHdtYXggPSBsZWFzdCBjb25zdHJhaW5lZCwgd29ya3Mgb24gYW55IGNvdW50ZXIKKwkgKgorCSAqIGFzc2lnbiBldmVudHMgdG8gY291bnRlcnMgc3RhcnRpbmcgd2l0aCBtb3N0CisJICogY29uc3RyYWluZWQgZXZlbnRzLgorCSAqLworCXdtYXggPSB4ODZfcG11Lm51bV9ldmVudHM7CisKKwkvKgorCSAqIHdoZW4gZml4ZWQgZXZlbnQgY291bnRlcnMgYXJlIHByZXNlbnQsCisJICogd21heCBpcyBpbmNyZW1lbnRlZCBieSAxIHRvIGFjY291bnQKKwkgKiBmb3Igb25lIG1vcmUgY2hvaWNlCisJICovCisJaWYgKHg4Nl9wbXUubnVtX2V2ZW50c19maXhlZCkKKwkJd21heCsrOworCisJZm9yICh3ID0gMSwgbnVtID0gbjsgbnVtICYmIHcgPD0gd21heDsgdysrKSB7CisJCS8qIGZvciBlYWNoIGV2ZW50ICovCisJCWZvciAoaSA9IDA7IG51bSAmJiBpIDwgbjsgaSsrKSB7CisJCQljID0gY29uc3RyYWludHNbaV07CisJCQlod2MgPSAmY3B1Yy0+ZXZlbnRfbGlzdFtpXS0+aHc7CisKKwkJCWlmIChjLT53ZWlnaHQgIT0gdykKKwkJCQljb250aW51ZTsKKworCQkJZm9yX2VhY2hfYml0KGosIGMtPmlkeG1zaywgWDg2X1BNQ19JRFhfTUFYKSB7CisJCQkJaWYgKCF0ZXN0X2JpdChqLCB1c2VkX21hc2spKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKGogPT0gWDg2X1BNQ19JRFhfTUFYKQorCQkJCWJyZWFrOworCisJCQlzZXRfYml0KGosIHVzZWRfbWFzayk7CisKKwkJCWlmIChhc3NpZ24pCisJCQkJYXNzaWduW2ldID0gajsKKwkJCW51bS0tOworCQl9CisJfQorZG9uZToKKwkvKgorCSAqIHNjaGVkdWxpbmcgZmFpbGVkIG9yIGlzIGp1c3QgYSBzaW11bGF0aW9uLAorCSAqIGZyZWUgcmVzb3VyY2VzIGlmIG5lY2Vzc2FyeQorCSAqLworCWlmICghYXNzaWduIHx8IG51bSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlpZiAoeDg2X3BtdS5wdXRfZXZlbnRfY29uc3RyYWludHMpCisJCQkJeDg2X3BtdS5wdXRfZXZlbnRfY29uc3RyYWludHMoY3B1YywgY3B1Yy0+ZXZlbnRfbGlzdFtpXSk7CisJCX0KKwl9CisJcmV0dXJuIG51bSA/IC1FTk9TUEMgOiAwOworfQorCisvKgorICogZG9ncnA6IHRydWUgaWYgbXVzdCBjb2xsZWN0IHNpYmxpbmdzIGV2ZW50cyAoZ3JvdXApCisgKiByZXR1cm5zIHRvdGFsIG51bWJlciBvZiBldmVudHMgYW5kIGVycm9yIGNvZGUKKyAqLworc3RhdGljIGludCBjb2xsZWN0X2V2ZW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IHBlcmZfZXZlbnQgKmxlYWRlciwgYm9vbCBkb2dycCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisJaW50IG4sIG1heF9jb3VudDsKKworCW1heF9jb3VudCA9IHg4Nl9wbXUubnVtX2V2ZW50cyArIHg4Nl9wbXUubnVtX2V2ZW50c19maXhlZDsKKworCS8qIGN1cnJlbnQgbnVtYmVyIG9mIGV2ZW50cyBhbHJlYWR5IGFjY2VwdGVkICovCisJbiA9IGNwdWMtPm5fZXZlbnRzOworCisJaWYgKGlzX3g4Nl9ldmVudChsZWFkZXIpKSB7CisJCWlmIChuID49IG1heF9jb3VudCkKKwkJCXJldHVybiAtRU5PU1BDOworCQljcHVjLT5ldmVudF9saXN0W25dID0gbGVhZGVyOworCQluKys7CisJfQorCWlmICghZG9ncnApCisJCXJldHVybiBuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmxlYWRlci0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgeworCQlpZiAoIWlzX3g4Nl9ldmVudChldmVudCkgfHwKKwkJICAgIGV2ZW50LT5zdGF0ZSA8PSBQRVJGX0VWRU5UX1NUQVRFX09GRikKKwkJCWNvbnRpbnVlOworCisJCWlmIChuID49IG1heF9jb3VudCkKKwkJCXJldHVybiAtRU5PU1BDOworCisJCWNwdWMtPmV2ZW50X2xpc3Rbbl0gPSBldmVudDsKKwkJbisrOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHg4Nl9hc3NpZ25faHdfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBpbnQgaSkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKworCWh3Yy0+aWR4ID0gY3B1Yy0+YXNzaWduW2ldOworCWh3Yy0+bGFzdF9jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaHdjLT5sYXN0X3RhZyA9ICsrY3B1Yy0+dGFnc1tpXTsKKworCWlmIChod2MtPmlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpIHsKKwkJaHdjLT5jb25maWdfYmFzZSA9IDA7CisJCWh3Yy0+ZXZlbnRfYmFzZQk9IDA7CisJfSBlbHNlIGlmIChod2MtPmlkeCA+PSBYODZfUE1DX0lEWF9GSVhFRCkgeworCQlod2MtPmNvbmZpZ19iYXNlID0gTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFJfQ1RSTDsKKwkJLyoKKwkJICogV2Ugc2V0IGl0IHNvIHRoYXQgZXZlbnRfYmFzZSArIGlkeCBpbiB3cm1zci9yZG1zciBtYXBzIHRvCisJCSAqIE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCAuLi4gQ1RSMjoKKwkJICovCisJCWh3Yy0+ZXZlbnRfYmFzZSA9CisJCQlNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAgLSBYODZfUE1DX0lEWF9GSVhFRDsKKwl9IGVsc2UgeworCQlod2MtPmNvbmZpZ19iYXNlID0geDg2X3BtdS5ldmVudHNlbDsKKwkJaHdjLT5ldmVudF9iYXNlICA9IHg4Nl9wbXUucGVyZmN0cjsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1hdGNoX3ByZXZfYXNzaWdubWVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLAorCQkJCQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywKKwkJCQkJaW50IGkpCit7CisJcmV0dXJuIGh3Yy0+aWR4ID09IGNwdWMtPmFzc2lnbltpXSAmJgorCQlod2MtPmxhc3RfY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSAmJgorCQlod2MtPmxhc3RfdGFnID09IGNwdWMtPnRhZ3NbaV07Cit9CisKK3N0YXRpYyB2b2lkIHg4Nl9wbXVfc3RvcChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworCiB2b2lkIGh3X3BlcmZfZW5hYmxlKHZvaWQpCiB7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YzsKKwlpbnQgaTsKKwogCWlmICgheDg2X3BtdV9pbml0aWFsaXplZCgpKQogCQlyZXR1cm47CisKKwlpZiAoY3B1Yy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKGNwdWMtPm5fYWRkZWQpIHsKKwkJLyoKKwkJICogYXBwbHkgYXNzaWdubWVudCBvYnRhaW5lZCBlaXRoZXIgZnJvbQorCQkgKiBod19wZXJmX2dyb3VwX3NjaGVkX2luKCkgb3IgeDg2X3BtdV9lbmFibGUoKQorCQkgKgorCQkgKiBzdGVwMTogc2F2ZSBldmVudHMgbW92aW5nIHRvIG5ldyBjb3VudGVycworCQkgKiBzdGVwMjogcmVwcm9ncmFtIG1vdmVkIGV2ZW50cyBpbnRvIG5ldyBjb3VudGVycworCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IGNwdWMtPm5fZXZlbnRzOyBpKyspIHsKKworCQkJZXZlbnQgPSBjcHVjLT5ldmVudF9saXN0W2ldOworCQkJaHdjID0gJmV2ZW50LT5odzsKKworCQkJLyoKKwkJCSAqIHdlIGNhbiBhdm9pZCByZXByb2dyYW1taW5nIGNvdW50ZXIgaWY6CisJCQkgKiAtIGFzc2lnbmVkIHNhbWUgY291bnRlciBhcyBsYXN0IHRpbWUKKwkJCSAqIC0gcnVubmluZyBvbiBzYW1lIENQVSBhcyBsYXN0IHRpbWUKKwkJCSAqIC0gbm8gb3RoZXIgZXZlbnQgaGFzIHVzZWQgdGhlIGNvdW50ZXIgc2luY2UKKwkJCSAqLworCQkJaWYgKGh3Yy0+aWR4ID09IC0xIHx8CisJCQkgICAgbWF0Y2hfcHJldl9hc3NpZ25tZW50KGh3YywgY3B1YywgaSkpCisJCQkJY29udGludWU7CisKKwkJCXg4Nl9wbXVfc3RvcChldmVudCk7CisKKwkJCWh3Yy0+aWR4ID0gLTE7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgY3B1Yy0+bl9ldmVudHM7IGkrKykgeworCisJCQlldmVudCA9IGNwdWMtPmV2ZW50X2xpc3RbaV07CisJCQlod2MgPSAmZXZlbnQtPmh3OworCisJCQlpZiAoaHdjLT5pZHggPT0gLTEpIHsKKwkJCQl4ODZfYXNzaWduX2h3X2V2ZW50KGV2ZW50LCBjcHVjLCBpKTsKKwkJCQl4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGh3Yy0+aWR4KTsKKwkJCX0KKwkJCS8qCisJCQkgKiBuZWVkIHRvIG1hcmsgYXMgYWN0aXZlIGJlY2F1c2UgeDg2X3BtdV9kaXNhYmxlKCkKKwkJCSAqIGNsZWFyIGFjdGl2ZV9tYXNrIGFuZCBldmVudHNbXSB5ZXQgaXQgcHJlc2VydmVzCisJCQkgKiBpZHgKKwkJCSAqLworCQkJc2V0X2JpdChod2MtPmlkeCwgY3B1Yy0+YWN0aXZlX21hc2spOworCQkJY3B1Yy0+ZXZlbnRzW2h3Yy0+aWR4XSA9IGV2ZW50OworCisJCQl4ODZfcG11LmVuYWJsZShod2MsIGh3Yy0+aWR4KTsKKwkJCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKKwkJfQorCQljcHVjLT5uX2FkZGVkID0gMDsKKwkJcGVyZl9ldmVudHNfbGFwaWNfaW5pdCgpOworCX0KKworCWNwdWMtPmVuYWJsZWQgPSAxOworCWJhcnJpZXIoKTsKKwogCXg4Nl9wbXUuZW5hYmxlX2FsbCgpOwogfQogCi1zdGF0aWMgaW5saW5lIHU2NCBpbnRlbF9wbXVfZ2V0X3N0YXR1cyh2b2lkKQotewotCXU2NCBzdGF0dXM7Ci0KLQlyZG1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTLCBzdGF0dXMpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGludGVsX3BtdV9hY2tfc3RhdHVzKHU2NCBhY2spCi17Ci0Jd3Jtc3JsKE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMLCBhY2spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgeDg2X3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3g4Nl9wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCiB7CiAJKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBpZHgsCiAJCQkgICAgICBod2MtPmNvbmZpZyB8IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFKTsKQEAgLTEyMjEsNTMgKzg2MSw2IEBACiAJKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBpZHgsIGh3Yy0+Y29uZmlnKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1pbnRlbF9wbXVfZGlzYWJsZV9maXhlZChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgX19pZHgpCi17Ci0JaW50IGlkeCA9IF9faWR4IC0gWDg2X1BNQ19JRFhfRklYRUQ7Ci0JdTY0IGN0cmxfdmFsLCBtYXNrOwotCi0JbWFzayA9IDB4ZlVMTCA8PCAoaWR4ICogNCk7Ci0KLQlyZG1zcmwoaHdjLT5jb25maWdfYmFzZSwgY3RybF92YWwpOwotCWN0cmxfdmFsICY9IH5tYXNrOwotCSh2b2lkKWNoZWNraW5nX3dybXNybChod2MtPmNvbmZpZ19iYXNlLCBjdHJsX3ZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotcDZfcG11X2Rpc2FibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKLXsKLQlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCXU2NCB2YWwgPSBQNl9OT1BfRVZFTlQ7Ci0KLQlpZiAoY3B1Yy0+ZW5hYmxlZCkKLQkJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOwotCi0JKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBpZHgsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaW50ZWxfcG11X2Rpc2FibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKLXsKLQlpZiAodW5saWtlbHkoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykpIHsKLQkJaW50ZWxfcG11X2Rpc2FibGVfYnRzKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAodW5saWtlbHkoaHdjLT5jb25maWdfYmFzZSA9PSBNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUl9DVFJMKSkgewotCQlpbnRlbF9wbXVfZGlzYWJsZV9maXhlZChod2MsIGlkeCk7Ci0JCXJldHVybjsKLQl9Ci0KLQl4ODZfcG11X2Rpc2FibGVfZXZlbnQoaHdjLCBpZHgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWFtZF9wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQotewotCXg4Nl9wbXVfZGlzYWJsZV9ldmVudChod2MsIGlkeCk7Ci19Ci0KIHN0YXRpYyBERUZJTkVfUEVSX0NQVSh1NjQgW1g4Nl9QTUNfSURYX01BWF0sIHBtY19wcmV2X2xlZnQpOwogCiAvKgpAQCAtMTMyNiwyMjAgKzkxOSw2MCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotaW50ZWxfcG11X2VuYWJsZV9maXhlZChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgX19pZHgpCi17Ci0JaW50IGlkeCA9IF9faWR4IC0gWDg2X1BNQ19JRFhfRklYRUQ7Ci0JdTY0IGN0cmxfdmFsLCBiaXRzLCBtYXNrOwotCWludCBlcnI7Ci0KLQkvKgotCSAqIEVuYWJsZSBJUlEgZ2VuZXJhdGlvbiAoMHg4KSwKLQkgKiBhbmQgZW5hYmxlIHJpbmctMyBjb3VudGluZyAoMHgyKSBhbmQgcmluZy0wIGNvdW50aW5nICgweDEpCi0JICogaWYgcmVxdWVzdGVkOgotCSAqLwotCWJpdHMgPSAweDhVTEw7Ci0JaWYgKGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX1VTUikKLQkJYml0cyB8PSAweDI7Ci0JaWYgKGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TKQotCQliaXRzIHw9IDB4MTsKLQotCS8qCi0JICogQU5ZIGJpdCBpcyBzdXBwb3J0ZWQgaW4gdjMgYW5kIHVwCi0JICovCi0JaWYgKHg4Nl9wbXUudmVyc2lvbiA+IDIgJiYgaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfQU5ZKQotCQliaXRzIHw9IDB4NDsKLQotCWJpdHMgPDw9IChpZHggKiA0KTsKLQltYXNrID0gMHhmVUxMIDw8IChpZHggKiA0KTsKLQotCXJkbXNybChod2MtPmNvbmZpZ19iYXNlLCBjdHJsX3ZhbCk7Ci0JY3RybF92YWwgJj0gfm1hc2s7Ci0JY3RybF92YWwgfD0gYml0czsKLQllcnIgPSBjaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSwgY3RybF92YWwpOwotfQotCi1zdGF0aWMgdm9pZCBwNl9wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCitzdGF0aWMgdm9pZCB4ODZfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0JdTY0IHZhbDsKLQotCXZhbCA9IGh3Yy0+Y29uZmlnOwogCWlmIChjcHVjLT5lbmFibGVkKQotCQl2YWwgfD0gQVJDSF9QRVJGTU9OX0VWRU5UU0VMMF9FTkFCTEU7Ci0KLQkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSArIGlkeCwgdmFsKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBpbnRlbF9wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCi17Ci0JaWYgKHVubGlrZWx5KGlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpKSB7Ci0JCWlmICghX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKS5lbmFibGVkKQotCQkJcmV0dXJuOwotCi0JCWludGVsX3BtdV9lbmFibGVfYnRzKGh3Yy0+Y29uZmlnKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh1bmxpa2VseShod2MtPmNvbmZpZ19iYXNlID09IE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSX0NUUkwpKSB7Ci0JCWludGVsX3BtdV9lbmFibGVfZml4ZWQoaHdjLCBpZHgpOwotCQlyZXR1cm47Ci0JfQotCi0JeDg2X3BtdV9lbmFibGVfZXZlbnQoaHdjLCBpZHgpOwotfQotCi1zdGF0aWMgdm9pZCBhbWRfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQotewotCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0KLQlpZiAoY3B1Yy0+ZW5hYmxlZCkKLQkJeDg2X3BtdV9lbmFibGVfZXZlbnQoaHdjLCBpZHgpOwotfQotCi1zdGF0aWMgaW50IGZpeGVkX21vZGVfaWR4KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpCi17Ci0JdW5zaWduZWQgaW50IGh3X2V2ZW50OwotCi0JaHdfZXZlbnQgPSBod2MtPmNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVF9NQVNLOwotCi0JaWYgKHVubGlrZWx5KChod19ldmVudCA9PQotCQkgICAgICB4ODZfcG11LmV2ZW50X21hcChQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMpKSAmJgotCQkgICAgIChod2MtPnNhbXBsZV9wZXJpb2QgPT0gMSkpKQotCQlyZXR1cm4gWDg2X1BNQ19JRFhfRklYRURfQlRTOwotCi0JaWYgKCF4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQpCi0JCXJldHVybiAtMTsKLQotCS8qCi0JICogZml4ZWQgY291bnRlcnMgZG8gbm90IHRha2UgYWxsIHBvc3NpYmxlIGZpbHRlcnMKLQkgKi8KLQlpZiAoaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRfRklMVEVSX01BU0spCi0JCXJldHVybiAtMTsKLQotCWlmICh1bmxpa2VseShod19ldmVudCA9PSB4ODZfcG11LmV2ZW50X21hcChQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUykpKQotCQlyZXR1cm4gWDg2X1BNQ19JRFhfRklYRURfSU5TVFJVQ1RJT05TOwotCWlmICh1bmxpa2VseShod19ldmVudCA9PSB4ODZfcG11LmV2ZW50X21hcChQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMpKSkKLQkJcmV0dXJuIFg4Nl9QTUNfSURYX0ZJWEVEX0NQVV9DWUNMRVM7Ci0JaWYgKHVubGlrZWx5KGh3X2V2ZW50ID09IHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFUykpKQotCQlyZXR1cm4gWDg2X1BNQ19JRFhfRklYRURfQlVTX0NZQ0xFUzsKLQotCXJldHVybiAtMTsKKwkJX194ODZfcG11X2VuYWJsZV9ldmVudChod2MsIGlkeCk7CiB9CiAKIC8qCi0gKiBnZW5lcmljIGNvdW50ZXIgYWxsb2NhdG9yOiBnZXQgbmV4dCBmcmVlIGNvdW50ZXIKLSAqLwotc3RhdGljIGludAotZ2VuX2dldF9ldmVudF9pZHgoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpCi17Ci0JaW50IGlkeDsKLQotCWlkeCA9IGZpbmRfZmlyc3RfemVyb19iaXQoY3B1Yy0+dXNlZF9tYXNrLCB4ODZfcG11Lm51bV9ldmVudHMpOwotCXJldHVybiBpZHggPT0geDg2X3BtdS5udW1fZXZlbnRzID8gLTEgOiBpZHg7Ci19Ci0KLS8qCi0gKiBpbnRlbC1zcGVjaWZpYyBjb3VudGVyIGFsbG9jYXRvcjogY2hlY2sgZXZlbnQgY29uc3RyYWludHMKLSAqLwotc3RhdGljIGludAotaW50ZWxfZ2V0X2V2ZW50X2lkeChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YykKLXsKLQljb25zdCBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqZXZlbnRfY29uc3RyYWludDsKLQlpbnQgaSwgY29kZTsKLQotCWlmICghZXZlbnRfY29uc3RyYWludHMpCi0JCWdvdG8gc2tpcDsKLQotCWNvZGUgPSBod2MtPmNvbmZpZyAmIENPUkVfRVZOVFNFTF9FVkVOVF9NQVNLOwotCi0JZm9yX2VhY2hfZXZlbnRfY29uc3RyYWludChldmVudF9jb25zdHJhaW50LCBldmVudF9jb25zdHJhaW50cykgewotCQlpZiAoY29kZSA9PSBldmVudF9jb25zdHJhaW50LT5jb2RlKSB7Ci0JCQlmb3JfZWFjaF9iaXQoaSwgZXZlbnRfY29uc3RyYWludC0+aWR4bXNrLCBYODZfUE1DX0lEWF9NQVgpIHsKLQkJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaSwgY3B1Yy0+dXNlZF9tYXNrKSkKLQkJCQkJcmV0dXJuIGk7Ci0JCQl9Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci1za2lwOgotCXJldHVybiBnZW5fZ2V0X2V2ZW50X2lkeChjcHVjLCBod2MpOwotfQotCi1zdGF0aWMgaW50Ci14ODZfc2NoZWR1bGVfZXZlbnQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpCi17Ci0JaW50IGlkeDsKLQotCWlkeCA9IGZpeGVkX21vZGVfaWR4KGh3Yyk7Ci0JaWYgKGlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpIHsKLQkJLyogQlRTIGlzIGFscmVhZHkgb2NjdXBpZWQuICovCi0JCWlmICh0ZXN0X2FuZF9zZXRfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKSkKLQkJCXJldHVybiAtRUFHQUlOOwotCi0JCWh3Yy0+Y29uZmlnX2Jhc2UJPSAwOwotCQlod2MtPmV2ZW50X2Jhc2UJCT0gMDsKLQkJaHdjLT5pZHgJCT0gaWR4OwotCX0gZWxzZSBpZiAoaWR4ID49IDApIHsKLQkJLyoKLQkJICogVHJ5IHRvIGdldCB0aGUgZml4ZWQgZXZlbnQsIGlmIHRoYXQgaXMgYWxyZWFkeSB0YWtlbgotCQkgKiB0aGVuIHRyeSB0byBnZXQgYSBnZW5lcmljIGV2ZW50OgotCQkgKi8KLQkJaWYgKHRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKQotCQkJZ290byB0cnlfZ2VuZXJpYzsKLQotCQlod2MtPmNvbmZpZ19iYXNlID0gTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFJfQ1RSTDsKLQkJLyoKLQkJICogV2Ugc2V0IGl0IHNvIHRoYXQgZXZlbnRfYmFzZSArIGlkeCBpbiB3cm1zci9yZG1zciBtYXBzIHRvCi0JCSAqIE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSMCAuLi4gQ1RSMjoKLQkJICovCi0JCWh3Yy0+ZXZlbnRfYmFzZSA9Ci0JCQlNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAgLSBYODZfUE1DX0lEWF9GSVhFRDsKLQkJaHdjLT5pZHggPSBpZHg7Ci0JfSBlbHNlIHsKLQkJaWR4ID0gaHdjLT5pZHg7Ci0JCS8qIFRyeSB0byBnZXQgdGhlIHByZXZpb3VzIGdlbmVyaWMgZXZlbnQgYWdhaW4gKi8KLQkJaWYgKGlkeCA9PSAtMSB8fCB0ZXN0X2FuZF9zZXRfYml0KGlkeCwgY3B1Yy0+dXNlZF9tYXNrKSkgewotdHJ5X2dlbmVyaWM6Ci0JCQlpZHggPSB4ODZfcG11LmdldF9ldmVudF9pZHgoY3B1YywgaHdjKTsKLQkJCWlmIChpZHggPT0gLTEpCi0JCQkJcmV0dXJuIC1FQUdBSU47Ci0KLQkJCXNldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spOwotCQkJaHdjLT5pZHggPSBpZHg7Ci0JCX0KLQkJaHdjLT5jb25maWdfYmFzZSA9IHg4Nl9wbXUuZXZlbnRzZWw7Ci0JCWh3Yy0+ZXZlbnRfYmFzZSAgPSB4ODZfcG11LnBlcmZjdHI7Ci0JfQotCi0JcmV0dXJuIGlkeDsKLX0KLQotLyoKLSAqIEZpbmQgYSBQTUMgc2xvdCBmb3IgdGhlIGZyZXNobHkgZW5hYmxlZCAvIHNjaGVkdWxlZCBpbiBldmVudDoKKyAqIGFjdGl2YXRlIGEgc2luZ2xlIGV2ZW50CisgKgorICogVGhlIGV2ZW50IGlzIGFkZGVkIHRvIHRoZSBncm91cCBvZiBlbmFibGVkIGV2ZW50cworICogYnV0IG9ubHkgaWYgaXQgY2FuIGJlIHNjZWhkdWxlZCB3aXRoIGV4aXN0aW5nIGV2ZW50cy4KKyAqCisgKiBDYWxsZWQgd2l0aCBQTVUgZGlzYWJsZWQuIElmIHN1Y2Nlc3NmdWwgYW5kIHJldHVybiB2YWx1ZSAxLAorICogdGhlbiBndWFyYW50ZWVkIHRvIGNhbGwgcGVyZl9lbmFibGUoKSBhbmQgaHdfcGVyZl9lbmFibGUoKQogICovCiBzdGF0aWMgaW50IHg4Nl9wbXVfZW5hYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2M7CisJaW50IGFzc2lnbltYODZfUE1DX0lEWF9NQVhdOworCWludCBuLCBuMCwgcmV0OworCisJaHdjID0gJmV2ZW50LT5odzsKKworCW4wID0gY3B1Yy0+bl9ldmVudHM7CisJbiA9IGNvbGxlY3RfZXZlbnRzKGNwdWMsIGV2ZW50LCBmYWxzZSk7CisJaWYgKG4gPCAwKQorCQlyZXR1cm4gbjsKKworCXJldCA9IHg4Nl9zY2hlZHVsZV9ldmVudHMoY3B1YywgbiwgYXNzaWduKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCS8qCisJICogY29weSBuZXcgYXNzaWdubWVudCwgbm93IHdlIGtub3cgaXQgaXMgcG9zc2libGUKKwkgKiB3aWxsIGJlIHVzZWQgYnkgaHdfcGVyZl9lbmFibGUoKQorCSAqLworCW1lbWNweShjcHVjLT5hc3NpZ24sIGFzc2lnbiwgbipzaXplb2YoaW50KSk7CisKKwljcHVjLT5uX2V2ZW50cyA9IG47CisJY3B1Yy0+bl9hZGRlZCAgPSBuIC0gbjA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4ODZfcG11X3N0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKLQlpbnQgaWR4OwogCi0JaWR4ID0geDg2X3NjaGVkdWxlX2V2ZW50KGNwdWMsIGh3Yyk7Ci0JaWYgKGlkeCA8IDApCi0JCXJldHVybiBpZHg7CisJaWYgKGh3Yy0+aWR4ID09IC0xKQorCQlyZXR1cm4gLUVBR0FJTjsKIAotCXBlcmZfZXZlbnRzX2xhcGljX2luaXQoKTsKLQotCXg4Nl9wbXUuZGlzYWJsZShod2MsIGlkeCk7Ci0KLQljcHVjLT5ldmVudHNbaWR4XSA9IGV2ZW50OwotCXNldF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzayk7Ci0KLQl4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCk7Ci0JeDg2X3BtdS5lbmFibGUoaHdjLCBpZHgpOwotCi0JcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOworCXg4Nl9wZXJmX2V2ZW50X3NldF9wZXJpb2QoZXZlbnQsIGh3YywgaHdjLT5pZHgpOworCXg4Nl9wbXUuZW5hYmxlKGh3YywgaHdjLT5pZHgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTgzLDcgKzEwMTYsNyBAQAogCQlwcl9pbmZvKCJDUFUjJWQ6IG92ZXJmbG93OiAgICUwMTZsbHhcbiIsIGNwdSwgb3ZlcmZsb3cpOwogCQlwcl9pbmZvKCJDUFUjJWQ6IGZpeGVkOiAgICAgICUwMTZsbHhcbiIsIGNwdSwgZml4ZWQpOwogCX0KLQlwcl9pbmZvKCJDUFUjJWQ6IHVzZWQ6ICAgICAgICUwMTZsbHhcbiIsIGNwdSwgKih1NjQgKiljcHVjLT51c2VkX21hc2spOworCXByX2luZm8oIkNQVSMlZDogYWN0aXZlOiAgICAgICAlMDE2bGx4XG4iLCBjcHUsICoodTY0ICopY3B1Yy0+YWN0aXZlX21hc2spOwogCiAJZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHM7IGlkeCsrKSB7CiAJCXJkbXNybCh4ODZfcG11LmV2ZW50c2VsICsgaWR4LCBwbWNfY3RybCk7CkBAIC0xNjA3LDY3ICsxMDQwLDcgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGludGVsX3BtdV9kcmFpbl9idHNfYnVmZmVyKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjKQotewotCXN0cnVjdCBkZWJ1Z19zdG9yZSAqZHMgPSBjcHVjLT5kczsKLQlzdHJ1Y3QgYnRzX3JlY29yZCB7Ci0JCXU2NAlmcm9tOwotCQl1NjQJdG87Ci0JCXU2NAlmbGFnczsKLQl9OwotCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tYODZfUE1DX0lEWF9GSVhFRF9CVFNdOwotCXN0cnVjdCBidHNfcmVjb3JkICphdCwgKnRvcDsKLQlzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlIGhhbmRsZTsKLQlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgaGVhZGVyOwotCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7Ci0Jc3RydWN0IHB0X3JlZ3MgcmVnczsKLQotCWlmICghZXZlbnQpCi0JCXJldHVybjsKLQotCWlmICghZHMpCi0JCXJldHVybjsKLQotCWF0ICA9IChzdHJ1Y3QgYnRzX3JlY29yZCAqKSh1bnNpZ25lZCBsb25nKWRzLT5idHNfYnVmZmVyX2Jhc2U7Ci0JdG9wID0gKHN0cnVjdCBidHNfcmVjb3JkICopKHVuc2lnbmVkIGxvbmcpZHMtPmJ0c19pbmRleDsKLQotCWlmICh0b3AgPD0gYXQpCi0JCXJldHVybjsKLQotCWRzLT5idHNfaW5kZXggPSBkcy0+YnRzX2J1ZmZlcl9iYXNlOwotCi0KLQlkYXRhLnBlcmlvZAk9IGV2ZW50LT5ody5sYXN0X3BlcmlvZDsKLQlkYXRhLmFkZHIJPSAwOwotCWRhdGEucmF3CT0gTlVMTDsKLQlyZWdzLmlwCQk9IDA7Ci0KLQkvKgotCSAqIFByZXBhcmUgYSBnZW5lcmljIHNhbXBsZSwgaS5lLiBmaWxsIGluIHRoZSBpbnZhcmlhbnQgZmllbGRzLgotCSAqIFdlIHdpbGwgb3ZlcndyaXRlIHRoZSBmcm9tIGFuZCB0byBhZGRyZXNzIGJlZm9yZSB3ZSBvdXRwdXQKLQkgKiB0aGUgc2FtcGxlLgotCSAqLwotCXBlcmZfcHJlcGFyZV9zYW1wbGUoJmhlYWRlciwgJmRhdGEsIGV2ZW50LCAmcmVncyk7Ci0KLQlpZiAocGVyZl9vdXRwdXRfYmVnaW4oJmhhbmRsZSwgZXZlbnQsCi0JCQkgICAgICBoZWFkZXIuc2l6ZSAqICh0b3AgLSBhdCksIDEsIDEpKQotCQlyZXR1cm47Ci0KLQlmb3IgKDsgYXQgPCB0b3A7IGF0KyspIHsKLQkJZGF0YS5pcAkJPSBhdC0+ZnJvbTsKLQkJZGF0YS5hZGRyCT0gYXQtPnRvOwotCi0JCXBlcmZfb3V0cHV0X3NhbXBsZSgmaGFuZGxlLCAmaGVhZGVyLCAmZGF0YSwgZXZlbnQpOwotCX0KLQotCXBlcmZfb3V0cHV0X2VuZCgmaGFuZGxlKTsKLQotCS8qIFRoZXJlJ3MgbmV3IGRhdGEgYXZhaWxhYmxlLiAqLwotCWV2ZW50LT5ody5pbnRlcnJ1cHRzKys7Ci0JZXZlbnQtPnBlbmRpbmdfa2lsbCA9IFBPTExfSU47Ci19Ci0KLXN0YXRpYyB2b2lkIHg4Nl9wbXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCitzdGF0aWMgdm9pZCB4ODZfcG11X3N0b3Aoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CkBAIC0xNjgxLDczICsxMDU0LDM4IEBACiAJeDg2X3BtdS5kaXNhYmxlKGh3YywgaWR4KTsKIAogCS8qCi0JICogTWFrZSBzdXJlIHRoZSBjbGVhcmVkIHBvaW50ZXIgYmVjb21lcyB2aXNpYmxlIGJlZm9yZSB3ZQotCSAqIChwb3RlbnRpYWxseSkgZnJlZSB0aGUgZXZlbnQ6Ci0JICovCi0JYmFycmllcigpOwotCi0JLyoKIAkgKiBEcmFpbiB0aGUgcmVtYWluaW5nIGRlbHRhIGNvdW50IG91dCBvZiBhIGV2ZW50CiAJICogdGhhdCB3ZSBhcmUgZGlzYWJsaW5nOgogCSAqLwogCXg4Nl9wZXJmX2V2ZW50X3VwZGF0ZShldmVudCwgaHdjLCBpZHgpOwogCi0JLyogRHJhaW4gdGhlIHJlbWFpbmluZyBCVFMgcmVjb3Jkcy4gKi8KLQlpZiAodW5saWtlbHkoaWR4ID09IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUykpCi0JCWludGVsX3BtdV9kcmFpbl9idHNfYnVmZmVyKGNwdWMpOwotCiAJY3B1Yy0+ZXZlbnRzW2lkeF0gPSBOVUxMOwotCWNsZWFyX2JpdChpZHgsIGNwdWMtPnVzZWRfbWFzayk7Cit9CiAKK3N0YXRpYyB2b2lkIHg4Nl9wbXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlpbnQgaTsKKworCXg4Nl9wbXVfc3RvcChldmVudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3B1Yy0+bl9ldmVudHM7IGkrKykgeworCQlpZiAoZXZlbnQgPT0gY3B1Yy0+ZXZlbnRfbGlzdFtpXSkgeworCisJCQlpZiAoeDg2X3BtdS5wdXRfZXZlbnRfY29uc3RyYWludHMpCisJCQkJeDg2X3BtdS5wdXRfZXZlbnRfY29uc3RyYWludHMoY3B1YywgZXZlbnQpOworCisJCQl3aGlsZSAoKytpIDwgY3B1Yy0+bl9ldmVudHMpCisJCQkJY3B1Yy0+ZXZlbnRfbGlzdFtpLTFdID0gY3B1Yy0+ZXZlbnRfbGlzdFtpXTsKKworCQkJLS1jcHVjLT5uX2V2ZW50czsKKwkJCWJyZWFrOworCQl9CisJfQogCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKIH0KIAotLyoKLSAqIFNhdmUgYW5kIHJlc3RhcnQgYW4gZXhwaXJlZCBldmVudC4gQ2FsbGVkIGJ5IE5NSSBjb250ZXh0cywKLSAqIHNvIGl0IGhhcyB0byBiZSBjYXJlZnVsIGFib3V0IHByZWVtcHRpbmcgbm9ybWFsIGV2ZW50IG9wczoKLSAqLwotc3RhdGljIGludCBpbnRlbF9wbXVfc2F2ZV9hbmRfcmVzdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCi17Ci0Jc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Ci0JaW50IGlkeCA9IGh3Yy0+aWR4OwotCWludCByZXQ7Ci0KLQl4ODZfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaWR4KTsKLQlyZXQgPSB4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50LCBod2MsIGlkeCk7Ci0KLQlpZiAoZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKQotCQlpbnRlbF9wbXVfZW5hYmxlX2V2ZW50KGh3YywgaWR4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX3BtdV9yZXNldCh2b2lkKQotewotCXN0cnVjdCBkZWJ1Z19zdG9yZSAqZHMgPSBfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpLmRzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGlkeDsKLQotCWlmICgheDg2X3BtdS5udW1fZXZlbnRzKQotCQlyZXR1cm47Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlwcmludGsoImNsZWFyaW5nIFBNVSBzdGF0ZSBvbiBDUFUjJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaWR4KyspIHsKLQkJY2hlY2tpbmdfd3Jtc3JsKHg4Nl9wbXUuZXZlbnRzZWwgKyBpZHgsIDB1bGwpOwotCQljaGVja2luZ193cm1zcmwoeDg2X3BtdS5wZXJmY3RyICArIGlkeCwgMHVsbCk7Ci0JfQotCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fZXZlbnRzX2ZpeGVkOyBpZHgrKykgewotCQljaGVja2luZ193cm1zcmwoTVNSX0FSQ0hfUEVSRk1PTl9GSVhFRF9DVFIwICsgaWR4LCAwdWxsKTsKLQl9Ci0JaWYgKGRzKQotCQlkcy0+YnRzX2luZGV4ID0gZHMtPmJ0c19idWZmZXJfYmFzZTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBwNl9wbXVfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpbnQgeDg2X3BtdV9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CiAJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWM7CkBAIC0xNzgyLDExNyArMTEyMCw3IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMSwgJmRhdGEsIHJlZ3MpKQotCQkJcDZfcG11X2Rpc2FibGVfZXZlbnQoaHdjLCBpZHgpOwotCX0KLQotCWlmIChoYW5kbGVkKQotCQlpbmNfaXJxX3N0YXQoYXBpY19wZXJmX2lycXMpOwotCi0JcmV0dXJuIGhhbmRsZWQ7Ci19Ci0KLS8qCi0gKiBUaGlzIGhhbmRsZXIgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBsb2NhbCBBUElDLCBzbyB0aGUgQVBJQyBJUlEgaGFuZGxpbmcKLSAqIHJ1bGVzIGFwcGx5OgotICovCi1zdGF0aWMgaW50IGludGVsX3BtdV9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWM7Ci0JaW50IGJpdCwgbG9vcHM7Ci0JdTY0IGFjaywgc3RhdHVzOwotCi0JZGF0YS5hZGRyID0gMDsKLQlkYXRhLnJhdyA9IE5VTEw7Ci0KLQljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Ci0KLQlwZXJmX2Rpc2FibGUoKTsKLQlpbnRlbF9wbXVfZHJhaW5fYnRzX2J1ZmZlcihjcHVjKTsKLQlzdGF0dXMgPSBpbnRlbF9wbXVfZ2V0X3N0YXR1cygpOwotCWlmICghc3RhdHVzKSB7Ci0JCXBlcmZfZW5hYmxlKCk7Ci0JCXJldHVybiAwOwotCX0KLQotCWxvb3BzID0gMDsKLWFnYWluOgotCWlmICgrK2xvb3BzID4gMTAwKSB7Ci0JCVdBUk5fT05DRSgxLCAicGVyZmV2ZW50czogaXJxIGxvb3Agc3R1Y2shXG4iKTsKLQkJcGVyZl9ldmVudF9wcmludF9kZWJ1ZygpOwotCQlpbnRlbF9wbXVfcmVzZXQoKTsKLQkJcGVyZl9lbmFibGUoKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaW5jX2lycV9zdGF0KGFwaWNfcGVyZl9pcnFzKTsKLQlhY2sgPSBzdGF0dXM7Ci0JZm9yX2VhY2hfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikmc3RhdHVzLCBYODZfUE1DX0lEWF9NQVgpIHsKLQkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3B1Yy0+ZXZlbnRzW2JpdF07Ci0KLQkJY2xlYXJfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikgJnN0YXR1cyk7Ci0JCWlmICghdGVzdF9iaXQoYml0LCBjcHVjLT5hY3RpdmVfbWFzaykpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIWludGVsX3BtdV9zYXZlX2FuZF9yZXN0YXJ0KGV2ZW50KSkKLQkJCWNvbnRpbnVlOwotCi0JCWRhdGEucGVyaW9kID0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOwotCi0JCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAxLCAmZGF0YSwgcmVncykpCi0JCQlpbnRlbF9wbXVfZGlzYWJsZV9ldmVudCgmZXZlbnQtPmh3LCBiaXQpOwotCX0KLQotCWludGVsX3BtdV9hY2tfc3RhdHVzKGFjayk7Ci0KLQkvKgotCSAqIFJlcGVhdCBpZiB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gYmUgZG9uZToKLQkgKi8KLQlzdGF0dXMgPSBpbnRlbF9wbXVfZ2V0X3N0YXR1cygpOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gYWdhaW47Ci0KLQlwZXJmX2VuYWJsZSgpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgYW1kX3BtdV9oYW5kbGVfaXJxKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWM7Ci0Jc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwotCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2M7Ci0JaW50IGlkeCwgaGFuZGxlZCA9IDA7Ci0JdTY0IHZhbDsKLQotCWRhdGEuYWRkciA9IDA7Ci0JZGF0YS5yYXcgPSBOVUxMOwotCi0JY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwotCi0JZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHM7IGlkeCsrKSB7Ci0JCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCi0JCQljb250aW51ZTsKLQotCQlldmVudCA9IGNwdWMtPmV2ZW50c1tpZHhdOwotCQlod2MgPSAmZXZlbnQtPmh3OwotCi0JCXZhbCA9IHg4Nl9wZXJmX2V2ZW50X3VwZGF0ZShldmVudCwgaHdjLCBpZHgpOwotCQlpZiAodmFsICYgKDFVTEwgPDwgKHg4Nl9wbXUuZXZlbnRfYml0cyAtIDEpKSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSAqIGV2ZW50IG92ZXJmbG93Ci0JCSAqLwotCQloYW5kbGVkCQk9IDE7Ci0JCWRhdGEucGVyaW9kCT0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOwotCi0JCWlmICgheDg2X3BlcmZfZXZlbnRfc2V0X3BlcmlvZChldmVudCwgaHdjLCBpZHgpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsICZkYXRhLCByZWdzKSkKLQkJCWFtZF9wbXVfZGlzYWJsZV9ldmVudChod2MsIGlkeCk7CisJCQl4ODZfcG11LmRpc2FibGUoaHdjLCBpZHgpOwogCX0KIAogCWlmIChoYW5kbGVkKQpAQCAtMTk3NSwxOTUgKzEyMDMsMTM4IEBACiAJLnByaW9yaXR5CQk9IDEKIH07CiAKLXN0YXRpYyBfX2luaXRjb25zdCBzdHJ1Y3QgeDg2X3BtdSBwNl9wbXUgPSB7Ci0JLm5hbWUJCQk9ICJwNiIsCi0JLmhhbmRsZV9pcnEJCT0gcDZfcG11X2hhbmRsZV9pcnEsCi0JLmRpc2FibGVfYWxsCQk9IHA2X3BtdV9kaXNhYmxlX2FsbCwKLQkuZW5hYmxlX2FsbAkJPSBwNl9wbXVfZW5hYmxlX2FsbCwKLQkuZW5hYmxlCQkJPSBwNl9wbXVfZW5hYmxlX2V2ZW50LAotCS5kaXNhYmxlCQk9IHA2X3BtdV9kaXNhYmxlX2V2ZW50LAotCS5ldmVudHNlbAkJPSBNU1JfUDZfRVZOVFNFTDAsCi0JLnBlcmZjdHIJCT0gTVNSX1A2X1BFUkZDVFIwLAotCS5ldmVudF9tYXAJCT0gcDZfcG11X2V2ZW50X21hcCwKLQkucmF3X2V2ZW50CQk9IHA2X3BtdV9yYXdfZXZlbnQsCi0JLm1heF9ldmVudHMJCT0gQVJSQVlfU0laRShwNl9wZXJmbW9uX2V2ZW50X21hcCksCi0JLmFwaWMJCQk9IDEsCi0JLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgMzEpIC0gMSwKLQkudmVyc2lvbgkJPSAwLAotCS5udW1fZXZlbnRzCQk9IDIsCi0JLyoKLQkgKiBFdmVudHMgaGF2ZSA0MCBiaXRzIGltcGxlbWVudGVkLiBIb3dldmVyIHRoZXkgYXJlIGRlc2lnbmVkIHN1Y2gKLQkgKiB0aGF0IGJpdHMgWzMyLTM5XSBhcmUgc2lnbiBleHRlbnNpb25zIG9mIGJpdCAzMS4gQXMgc3VjaCB0aGUKLQkgKiBlZmZlY3RpdmUgd2lkdGggb2YgYSBldmVudCBmb3IgUDYtbGlrZSBQTVUgaXMgMzIgYml0cyBvbmx5LgotCSAqCi0JICogU2VlIElBLTMyIEludGVsIEFyY2hpdGVjdHVyZSBTb2Z0d2FyZSBkZXZlbG9wZXIgbWFudWFsIFZvbCAzQgotCSAqLwotCS5ldmVudF9iaXRzCQk9IDMyLAotCS5ldmVudF9tYXNrCQk9ICgxVUxMIDw8IDMyKSAtIDEsCi0JLmdldF9ldmVudF9pZHgJCT0gaW50ZWxfZ2V0X2V2ZW50X2lkeCwKLX07CitzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgdW5jb25zdHJhaW5lZDsKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBlbXB0eWNvbnN0cmFpbnQ7CiAKLXN0YXRpYyBfX2luaXRjb25zdCBzdHJ1Y3QgeDg2X3BtdSBpbnRlbF9wbXUgPSB7Ci0JLm5hbWUJCQk9ICJJbnRlbCIsCi0JLmhhbmRsZV9pcnEJCT0gaW50ZWxfcG11X2hhbmRsZV9pcnEsCi0JLmRpc2FibGVfYWxsCQk9IGludGVsX3BtdV9kaXNhYmxlX2FsbCwKLQkuZW5hYmxlX2FsbAkJPSBpbnRlbF9wbXVfZW5hYmxlX2FsbCwKLQkuZW5hYmxlCQkJPSBpbnRlbF9wbXVfZW5hYmxlX2V2ZW50LAotCS5kaXNhYmxlCQk9IGludGVsX3BtdV9kaXNhYmxlX2V2ZW50LAotCS5ldmVudHNlbAkJPSBNU1JfQVJDSF9QRVJGTU9OX0VWRU5UU0VMMCwKLQkucGVyZmN0cgkJPSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwLAotCS5ldmVudF9tYXAJCT0gaW50ZWxfcG11X2V2ZW50X21hcCwKLQkucmF3X2V2ZW50CQk9IGludGVsX3BtdV9yYXdfZXZlbnQsCi0JLm1heF9ldmVudHMJCT0gQVJSQVlfU0laRShpbnRlbF9wZXJmbW9uX2V2ZW50X21hcCksCi0JLmFwaWMJCQk9IDEsCi0JLyoKLQkgKiBJbnRlbCBQTUNzIGNhbm5vdCBiZSBhY2Nlc3NlZCBzYW5lbHkgYWJvdmUgMzIgYml0IHdpZHRoLAotCSAqIHNvIHdlIGluc3RhbGwgYW4gYXJ0aWZpY2lhbCAxPDwzMSBwZXJpb2QgcmVnYXJkbGVzcyBvZgotCSAqIHRoZSBnZW5lcmljIGV2ZW50IHBlcmlvZDoKLQkgKi8KLQkubWF4X3BlcmlvZAkJPSAoMVVMTCA8PCAzMSkgLSAxLAotCS5lbmFibGVfYnRzCQk9IGludGVsX3BtdV9lbmFibGVfYnRzLAotCS5kaXNhYmxlX2J0cwkJPSBpbnRlbF9wbXVfZGlzYWJsZV9idHMsCi0JLmdldF9ldmVudF9pZHgJCT0gaW50ZWxfZ2V0X2V2ZW50X2lkeCwKLX07Ci0KLXN0YXRpYyBfX2luaXRjb25zdCBzdHJ1Y3QgeDg2X3BtdSBhbWRfcG11ID0gewotCS5uYW1lCQkJPSAiQU1EIiwKLQkuaGFuZGxlX2lycQkJPSBhbWRfcG11X2hhbmRsZV9pcnEsCi0JLmRpc2FibGVfYWxsCQk9IGFtZF9wbXVfZGlzYWJsZV9hbGwsCi0JLmVuYWJsZV9hbGwJCT0gYW1kX3BtdV9lbmFibGVfYWxsLAotCS5lbmFibGUJCQk9IGFtZF9wbXVfZW5hYmxlX2V2ZW50LAotCS5kaXNhYmxlCQk9IGFtZF9wbXVfZGlzYWJsZV9ldmVudCwKLQkuZXZlbnRzZWwJCT0gTVNSX0s3X0VWTlRTRUwwLAotCS5wZXJmY3RyCQk9IE1TUl9LN19QRVJGQ1RSMCwKLQkuZXZlbnRfbWFwCQk9IGFtZF9wbXVfZXZlbnRfbWFwLAotCS5yYXdfZXZlbnQJCT0gYW1kX3BtdV9yYXdfZXZlbnQsCi0JLm1heF9ldmVudHMJCT0gQVJSQVlfU0laRShhbWRfcGVyZm1vbl9ldmVudF9tYXApLAotCS5udW1fZXZlbnRzCQk9IDQsCi0JLmV2ZW50X2JpdHMJCT0gNDgsCi0JLmV2ZW50X21hc2sJCT0gKDFVTEwgPDwgNDgpIC0gMSwKLQkuYXBpYwkJCT0gMSwKLQkvKiB1c2UgaGlnaGVzdCBiaXQgdG8gZGV0ZWN0IG92ZXJmbG93ICovCi0JLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgNDcpIC0gMSwKLQkuZ2V0X2V2ZW50X2lkeAkJPSBnZW5fZ2V0X2V2ZW50X2lkeCwKLX07Ci0KLXN0YXRpYyBfX2luaXQgaW50IHA2X3BtdV9pbml0KHZvaWQpCitzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKgoreDg2X2dldF9ldmVudF9jb25zdHJhaW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewotCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwpIHsKLQljYXNlIDE6Ci0JY2FzZSAzOiAgLyogUGVudGl1bSBQcm8gKi8KLQljYXNlIDU6Ci0JY2FzZSA2OiAgLyogUGVudGl1bSBJSSAqLwotCWNhc2UgNzoKLQljYXNlIDg6Ci0JY2FzZSAxMTogLyogUGVudGl1bSBJSUkgKi8KLQkJZXZlbnRfY29uc3RyYWludHMgPSBpbnRlbF9wNl9ldmVudF9jb25zdHJhaW50czsKLQkJYnJlYWs7Ci0JY2FzZSA5OgotCWNhc2UgMTM6Ci0JCS8qIFBlbnRpdW0gTSAqLwotCQlldmVudF9jb25zdHJhaW50cyA9IGludGVsX3A2X2V2ZW50X2NvbnN0cmFpbnRzOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl9jb250KCJ1bnN1cHBvcnRlZCBwNiBDUFUgbW9kZWwgJWQgIiwKLQkJCWJvb3RfY3B1X2RhdGEueDg2X21vZGVsKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKmM7CisKKwlpZiAoeDg2X3BtdS5ldmVudF9jb25zdHJhaW50cykgeworCQlmb3JfZWFjaF9ldmVudF9jb25zdHJhaW50KGMsIHg4Nl9wbXUuZXZlbnRfY29uc3RyYWludHMpIHsKKwkJCWlmICgoZXZlbnQtPmh3LmNvbmZpZyAmIGMtPmNtYXNrKSA9PSBjLT5jb2RlKQorCQkJCXJldHVybiBjOworCQl9CiAJfQogCi0JeDg2X3BtdSA9IHA2X3BtdTsKLQotCXJldHVybiAwOworCXJldHVybiAmdW5jb25zdHJhaW5lZDsKIH0KIAotc3RhdGljIF9faW5pdCBpbnQgaW50ZWxfcG11X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgeDg2X2V2ZW50X3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCSAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCkKIHsKLQl1bmlvbiBjcHVpZDEwX2VkeCBlZHg7Ci0JdW5pb24gY3B1aWQxMF9lYXggZWF4OwotCXVuc2lnbmVkIGludCB1bnVzZWQ7Ci0JdW5zaWduZWQgaW50IGVieDsKLQlpbnQgdmVyc2lvbjsKKwlpbnQgcmV0ID0gMDsKIAotCWlmICghY3B1X2hhcygmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfQVJDSF9QRVJGTU9OKSkgewotCQkvKiBjaGVjayBmb3IgUDYgcHJvY2Vzc29yIGZhbWlseSAqLwotCSAgIGlmIChib290X2NwdV9kYXRhLng4NiA9PSA2KSB7Ci0JCXJldHVybiBwNl9wbXVfaW5pdCgpOwotCSAgIH0gZWxzZSB7Ci0JCXJldHVybiAtRU5PREVWOwotCSAgIH0KLQl9CisJZXZlbnQtPnN0YXRlID0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkU7CisJZXZlbnQtPm9uY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWV2ZW50LT50c3RhbXBfcnVubmluZyArPSBldmVudC0+Y3R4LT50aW1lIC0gZXZlbnQtPnRzdGFtcF9zdG9wcGVkOwogCi0JLyoKLQkgKiBDaGVjayB3aGV0aGVyIHRoZSBBcmNoaXRlY3R1cmFsIFBlcmZNb24gc3VwcG9ydHMKLQkgKiBCcmFuY2ggTWlzc2VzIFJldGlyZWQgaHdfZXZlbnQgb3Igbm90LgotCSAqLwotCWNwdWlkKDEwLCAmZWF4LmZ1bGwsICZlYngsICZ1bnVzZWQsICZlZHguZnVsbCk7Ci0JaWYgKGVheC5zcGxpdC5tYXNrX2xlbmd0aCA8PSBBUkNIX1BFUkZNT05fQlJBTkNIX01JU1NFU19SRVRJUkVEKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWlzX3g4Nl9ldmVudChldmVudCkpCisJCXJldCA9IGV2ZW50LT5wbXUtPmVuYWJsZShldmVudCk7CiAKLQl2ZXJzaW9uID0gZWF4LnNwbGl0LnZlcnNpb25faWQ7Ci0JaWYgKHZlcnNpb24gPCAyKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIXJldCAmJiAhaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQpKQorCQljcHVjdHgtPmFjdGl2ZV9vbmNwdSsrOwogCi0JeDg2X3BtdQkJCQk9IGludGVsX3BtdTsKLQl4ODZfcG11LnZlcnNpb24JCQk9IHZlcnNpb247Ci0JeDg2X3BtdS5udW1fZXZlbnRzCQk9IGVheC5zcGxpdC5udW1fZXZlbnRzOwotCXg4Nl9wbXUuZXZlbnRfYml0cwkJPSBlYXguc3BsaXQuYml0X3dpZHRoOwotCXg4Nl9wbXUuZXZlbnRfbWFzawkJPSAoMVVMTCA8PCBlYXguc3BsaXQuYml0X3dpZHRoKSAtIDE7CisJaWYgKCFyZXQgJiYgZXZlbnQtPmF0dHIuZXhjbHVzaXZlKQorCQljcHVjdHgtPmV4Y2x1c2l2ZSA9IDE7CiAKLQkvKgotCSAqIFF1aXJrOiB2MiBwZXJmbW9uIGRvZXMgbm90IHJlcG9ydCBmaXhlZC1wdXJwb3NlIGV2ZW50cywgc28KLQkgKiBhc3N1bWUgYXQgbGVhc3QgMyBldmVudHM6Ci0JICovCi0JeDg2X3BtdS5udW1fZXZlbnRzX2ZpeGVkCT0gbWF4KChpbnQpZWR4LnNwbGl0Lm51bV9ldmVudHNfZml4ZWQsIDMpOwotCi0JLyoKLQkgKiBJbnN0YWxsIHRoZSBody1jYWNoZS1ldmVudHMgdGFibGU6Ci0JICovCi0Jc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCkgewotCWNhc2UgMTU6IC8qIG9yaWdpbmFsIDY1IG5tIGNlbGVyb24vcGVudGl1bS9jb3JlMi94ZW9uLCAiTWVyb20iLyJDb25yb2UiICovCi0JY2FzZSAyMjogLyogc2luZ2xlLWNvcmUgNjUgbm0gY2VsZXJvbi9jb3JlMnNvbG8gIk1lcm9tLUwiLyJDb25yb2UtTCIgKi8KLQljYXNlIDIzOiAvKiBjdXJyZW50IDQ1IG5tIGNlbGVyb24vY29yZTIveGVvbiAiUGVucnluIi8iV29sZmRhbGUiICovCi0JY2FzZSAyOTogLyogc2l4LWNvcmUgNDUgbm0geGVvbiAiRHVubmluZ3RvbiIgKi8KLQkJbWVtY3B5KGh3X2NhY2hlX2V2ZW50X2lkcywgY29yZTJfaHdfY2FjaGVfZXZlbnRfaWRzLAotCQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOwotCi0JCXByX2NvbnQoIkNvcmUyIGV2ZW50cywgIik7Ci0JCWV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfY29yZV9ldmVudF9jb25zdHJhaW50czsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQljYXNlIDI2OgotCQltZW1jcHkoaHdfY2FjaGVfZXZlbnRfaWRzLCBuZWhhbGVtX2h3X2NhY2hlX2V2ZW50X2lkcywKLQkJICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKLQotCQlldmVudF9jb25zdHJhaW50cyA9IGludGVsX25laGFsZW1fZXZlbnRfY29uc3RyYWludHM7Ci0JCXByX2NvbnQoIk5laGFsZW0vQ29yZWk3IGV2ZW50cywgIik7Ci0JCWJyZWFrOwotCWNhc2UgMjg6Ci0JCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIGF0b21faHdfY2FjaGVfZXZlbnRfaWRzLAotCQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOwotCi0JCXByX2NvbnQoIkF0b20gZXZlbnRzLCAiKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBfX2luaXQgaW50IGFtZF9wbXVfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgeDg2X2V2ZW50X3NjaGVkX291dChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCkKIHsKLQkvKiBQZXJmb3JtYW5jZS1tb25pdG9yaW5nIHN1cHBvcnRlZCBmcm9tIEs3IGFuZCBsYXRlcjogKi8KLQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPCA2KQotCQlyZXR1cm4gLUVOT0RFVjsKKwlldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFOworCWV2ZW50LT5vbmNwdSA9IC0xOwogCi0JeDg2X3BtdSA9IGFtZF9wbXU7CisJaWYgKCFpc194ODZfZXZlbnQoZXZlbnQpKQorCQlldmVudC0+cG11LT5kaXNhYmxlKGV2ZW50KTsKIAotCS8qIEV2ZW50cyBhcmUgY29tbW9uIGZvciBhbGwgQU1EcyAqLwotCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIGFtZF9od19jYWNoZV9ldmVudF9pZHMsCi0JICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKKwlldmVudC0+dHN0YW1wX3J1bm5pbmcgLT0gZXZlbnQtPmN0eC0+dGltZSAtIGV2ZW50LT50c3RhbXBfc3RvcHBlZDsKIAotCXJldHVybiAwOworCWlmICghaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQpKQorCQljcHVjdHgtPmFjdGl2ZV9vbmNwdS0tOworCisJaWYgKGV2ZW50LT5hdHRyLmV4Y2x1c2l2ZSB8fCAhY3B1Y3R4LT5hY3RpdmVfb25jcHUpCisJCWNwdWN0eC0+ZXhjbHVzaXZlID0gMDsKIH0KIAorLyoKKyAqIENhbGxlZCB0byBlbmFibGUgYSB3aG9sZSBncm91cCBvZiBldmVudHMuCisgKiBSZXR1cm5zIDEgaWYgdGhlIGdyb3VwIHdhcyBlbmFibGVkLCBvciAtRUFHQUlOIGlmIGl0IGNvdWxkIG5vdCBiZS4KKyAqIEFzc3VtZXMgdGhlIGNhbGxlciBoYXMgZGlzYWJsZWQgaW50ZXJydXB0cyBhbmQgaGFzCisgKiBmcm96ZW4gdGhlIFBNVSB3aXRoIGh3X3BlcmZfc2F2ZV9kaXNhYmxlLgorICoKKyAqIGNhbGxlZCB3aXRoIFBNVSBkaXNhYmxlZC4gSWYgc3VjY2Vzc2Z1bCBhbmQgcmV0dXJuIHZhbHVlIDEsCisgKiB0aGVuIGd1YXJhbnRlZWQgdG8gY2FsbCBwZXJmX2VuYWJsZSgpIGFuZCBod19wZXJmX2VuYWJsZSgpCisgKi8KK2ludCBod19wZXJmX2dyb3VwX3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpsZWFkZXIsCisJICAgICAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCisJICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXN0cnVjdCBwZXJmX2V2ZW50ICpzdWI7CisJaW50IGFzc2lnbltYODZfUE1DX0lEWF9NQVhdOworCWludCBuMCwgbjEsIHJldDsKKworCS8qIG4wID0gdG90YWwgbnVtYmVyIG9mIGV2ZW50cyAqLworCW4wID0gY29sbGVjdF9ldmVudHMoY3B1YywgbGVhZGVyLCB0cnVlKTsKKwlpZiAobjAgPCAwKQorCQlyZXR1cm4gbjA7CisKKwlyZXQgPSB4ODZfc2NoZWR1bGVfZXZlbnRzKGNwdWMsIG4wLCBhc3NpZ24pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB4ODZfZXZlbnRfc2NoZWRfaW4obGVhZGVyLCBjcHVjdHgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwluMSA9IDE7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzdWIsICZsZWFkZXItPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJaWYgKHN1Yi0+c3RhdGUgPiBQRVJGX0VWRU5UX1NUQVRFX09GRikgeworCQkJcmV0ID0geDg2X2V2ZW50X3NjaGVkX2luKHN1YiwgY3B1Y3R4KTsKKwkJCWlmIChyZXQpCisJCQkJZ290byB1bmRvOworCQkJKytuMTsKKwkJfQorCX0KKwkvKgorCSAqIGNvcHkgbmV3IGFzc2lnbm1lbnQsIG5vdyB3ZSBrbm93IGl0IGlzIHBvc3NpYmxlCisJICogd2lsbCBiZSB1c2VkIGJ5IGh3X3BlcmZfZW5hYmxlKCkKKwkgKi8KKwltZW1jcHkoY3B1Yy0+YXNzaWduLCBhc3NpZ24sIG4wKnNpemVvZihpbnQpKTsKKworCWNwdWMtPm5fZXZlbnRzICA9IG4wOworCWNwdWMtPm5fYWRkZWQgICA9IG4xOworCWN0eC0+bnJfYWN0aXZlICs9IG4xOworCisJLyoKKwkgKiAxIG1lYW5zIHN1Y2Nlc3NmdWwgYW5kIGV2ZW50cyBhcmUgYWN0aXZlCisJICogVGhpcyBpcyBub3QgcXVpdGUgdHJ1ZSBiZWNhdXNlIHdlIGRlZmVyCisJICogYWN0dWFsIGFjdGl2YXRpb24gdW50aWwgaHdfcGVyZl9lbmFibGUoKSBidXQKKwkgKiB0aGlzIHdheSB3ZSogZW5zdXJlIGNhbGxlciB3b24ndCB0cnkgdG8gZW5hYmxlCisJICogaW5kaXZpZHVhbCBldmVudHMKKwkgKi8KKwlyZXR1cm4gMTsKK3VuZG86CisJeDg2X2V2ZW50X3NjaGVkX291dChsZWFkZXIsIGNwdWN0eCk7CisJbjAgID0gMTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YiwgJmxlYWRlci0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgeworCQlpZiAoc3ViLT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkgeworCQkJeDg2X2V2ZW50X3NjaGVkX291dChzdWIsIGNwdWN0eCk7CisJCQlpZiAoKytuMCA9PSBuMSkKKwkJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCisjaW5jbHVkZSAicGVyZl9ldmVudF9hbWQuYyIKKyNpbmNsdWRlICJwZXJmX2V2ZW50X3A2LmMiCisjaW5jbHVkZSAicGVyZl9ldmVudF9pbnRlbC5jIgorCiBzdGF0aWMgdm9pZCBfX2luaXQgcG11X2NoZWNrX2FwaWModm9pZCkKIHsKIAlpZiAoY3B1X2hhc19hcGljKQpAQCAtMjIyMCw2ICsxMzkxLDEwIEBACiAJcGVyZl9ldmVudHNfbGFwaWNfaW5pdCgpOwogCXJlZ2lzdGVyX2RpZV9ub3RpZmllcigmcGVyZl9ldmVudF9ubWlfbm90aWZpZXIpOwogCisJdW5jb25zdHJhaW5lZCA9IChzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCkKKwkJX19FVkVOVF9DT05TVFJBSU5UKDAsICgxVUxMIDw8IHg4Nl9wbXUubnVtX2V2ZW50cykgLSAxLAorCQkJCSAgIDAsIHg4Nl9wbXUubnVtX2V2ZW50cyk7CisKIAlwcl9pbmZvKCIuLi4gdmVyc2lvbjogICAgICAgICAgICAgICAgJWRcbiIsICAgICB4ODZfcG11LnZlcnNpb24pOwogCXByX2luZm8oIi4uLiBiaXQgd2lkdGg6ICAgICAgICAgICAgICAlZFxuIiwgICAgIHg4Nl9wbXUuZXZlbnRfYml0cyk7CiAJcHJfaW5mbygiLi4uIGdlbmVyaWMgcmVnaXN0ZXJzOiAgICAgICVkXG4iLCAgICAgeDg2X3BtdS5udW1fZXZlbnRzKTsKQEAgLTIyMzcsNTAgKzE0MTIsNzkgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcG11IHBtdSA9IHsKIAkuZW5hYmxlCQk9IHg4Nl9wbXVfZW5hYmxlLAogCS5kaXNhYmxlCT0geDg2X3BtdV9kaXNhYmxlLAorCS5zdGFydAkJPSB4ODZfcG11X3N0YXJ0LAorCS5zdG9wCQk9IHg4Nl9wbXVfc3RvcCwKIAkucmVhZAkJPSB4ODZfcG11X3JlYWQsCiAJLnVudGhyb3R0bGUJPSB4ODZfcG11X3VudGhyb3R0bGUsCiB9OwogCi1zdGF0aWMgaW50Ci12YWxpZGF0ZV9ldmVudChzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1Yywgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQotewotCXN0cnVjdCBod19wZXJmX2V2ZW50IGZha2VfZXZlbnQgPSBldmVudC0+aHc7Ci0KLQlpZiAoZXZlbnQtPnBtdSAmJiBldmVudC0+cG11ICE9ICZwbXUpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHg4Nl9zY2hlZHVsZV9ldmVudChjcHVjLCAmZmFrZV9ldmVudCkgPj0gMDsKLX0KLQorLyoKKyAqIHZhbGlkYXRlIGEgc2luZ2xlIGV2ZW50IGdyb3VwCisgKgorICogdmFsaWRhdGlvbiBpbmNsdWRlOgorICoJLSBjaGVjayBldmVudHMgYXJlIGNvbXBhdGlibGUgd2hpY2ggZWFjaCBvdGhlcgorICoJLSBldmVudHMgZG8gbm90IGNvbXBldGUgZm9yIHRoZSBzYW1lIGNvdW50ZXIKKyAqCS0gbnVtYmVyIG9mIGV2ZW50cyA8PSBudW1iZXIgb2YgY291bnRlcnMKKyAqCisgKiB2YWxpZGF0aW9uIGVuc3VyZXMgdGhlIGdyb3VwIGNhbiBiZSBsb2FkZWQgb250byB0aGUKKyAqIFBNVSBpZiBpdCB3YXMgdGhlIG9ubHkgZ3JvdXAgYXZhaWxhYmxlLgorICovCiBzdGF0aWMgaW50IHZhbGlkYXRlX2dyb3VwKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQlzdHJ1Y3QgcGVyZl9ldmVudCAqc2libGluZywgKmxlYWRlciA9IGV2ZW50LT5ncm91cF9sZWFkZXI7Ci0Jc3RydWN0IGNwdV9od19ldmVudHMgZmFrZV9wbXU7CisJc3RydWN0IHBlcmZfZXZlbnQgKmxlYWRlciA9IGV2ZW50LT5ncm91cF9sZWFkZXI7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmZha2VfY3B1YzsKKwlpbnQgcmV0LCBuOwogCi0JbWVtc2V0KCZmYWtlX3BtdSwgMCwgc2l6ZW9mKGZha2VfcG11KSk7CisJcmV0ID0gLUVOT01FTTsKKwlmYWtlX2NwdWMgPSBrbWFsbG9jKHNpemVvZigqZmFrZV9jcHVjKSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOworCWlmICghZmFrZV9jcHVjKQorCQlnb3RvIG91dDsKIAotCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBsZWFkZXIpKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkvKgorCSAqIHRoZSBldmVudCBpcyBub3QgeWV0IGNvbm5lY3RlZCB3aXRoIGl0cworCSAqIHNpYmxpbmdzIHRoZXJlZm9yZSB3ZSBtdXN0IGZpcnN0IGNvbGxlY3QKKwkgKiBleGlzdGluZyBzaWJsaW5ncywgdGhlbiBhZGQgdGhlIG5ldyBldmVudAorCSAqIGJlZm9yZSB3ZSBjYW4gc2ltdWxhdGUgdGhlIHNjaGVkdWxpbmcKKwkgKi8KKwlyZXQgPSAtRU5PU1BDOworCW4gPSBjb2xsZWN0X2V2ZW50cyhmYWtlX2NwdWMsIGxlYWRlciwgdHJ1ZSk7CisJaWYgKG4gPCAwKQorCQlnb3RvIG91dF9mcmVlOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzaWJsaW5nLCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KSB7Ci0JCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBzaWJsaW5nKSkKLQkJCXJldHVybiAtRU5PU1BDOwotCX0KKwlmYWtlX2NwdWMtPm5fZXZlbnRzID0gbjsKKwluID0gY29sbGVjdF9ldmVudHMoZmFrZV9jcHVjLCBldmVudCwgZmFsc2UpOworCWlmIChuIDwgMCkKKwkJZ290byBvdXRfZnJlZTsKIAotCWlmICghdmFsaWRhdGVfZXZlbnQoJmZha2VfcG11LCBldmVudCkpCi0JCXJldHVybiAtRU5PU1BDOworCWZha2VfY3B1Yy0+bl9ldmVudHMgPSBuOwogCi0JcmV0dXJuIDA7CisJcmV0ID0geDg2X3NjaGVkdWxlX2V2ZW50cyhmYWtlX2NwdWMsIG4sIE5VTEwpOworCitvdXRfZnJlZToKKwlrZnJlZShmYWtlX2NwdWMpOworb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIGNvbnN0IHN0cnVjdCBwbXUgKmh3X3BlcmZfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CisJY29uc3Qgc3RydWN0IHBtdSAqdG1wOwogCWludCBlcnI7CiAKIAllcnIgPSBfX2h3X3BlcmZfZXZlbnRfaW5pdChldmVudCk7CiAJaWYgKCFlcnIpIHsKKwkJLyoKKwkJICogd2UgdGVtcG9yYXJpbHkgY29ubmVjdCBldmVudCB0byBpdHMgcG11CisJCSAqIHN1Y2ggdGhhdCB2YWxpZGF0ZV9ncm91cCgpIGNhbiBjbGFzc2lmeQorCQkgKiBpdCBhcyBhbiB4ODYgZXZlbnQgdXNpbmcgaXNfeDg2X2V2ZW50KCkKKwkJICovCisJCXRtcCA9IGV2ZW50LT5wbXU7CisJCWV2ZW50LT5wbXUgPSAmcG11OworCiAJCWlmIChldmVudC0+Z3JvdXBfbGVhZGVyICE9IGV2ZW50KQogCQkJZXJyID0gdmFsaWRhdGVfZ3JvdXAoZXZlbnQpOworCisJCWV2ZW50LT5wbXUgPSB0bXA7CiAJfQogCWlmIChlcnIpIHsKIAkJaWYgKGV2ZW50LT5kZXN0cm95KQpAQCAtMjMwNCw3ICsxNTA4LDYgQEAKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSwgcG1jX2lycV9lbnRyeSk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5LCBwbWNfbm1pX2VudHJ5KTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGluX2lnbm9yZWRfZnJhbWUpOwogCiAKIHN0YXRpYyB2b2lkCkBAIC0yMzIwLDEwICsxNTIzLDYgQEAKIAogc3RhdGljIGludCBiYWNrdHJhY2Vfc3RhY2sodm9pZCAqZGF0YSwgY2hhciAqbmFtZSkKIHsKLQlwZXJfY3B1KGluX2lnbm9yZWRfZnJhbWUsIHNtcF9wcm9jZXNzb3JfaWQoKSkgPQotCQkJeDg2X2lzX3N0YWNrX2lkKE5NSV9TVEFDSywgbmFtZSkgfHwKLQkJCXg4Nl9pc19zdGFja19pZChERUJVR19TVEFDSywgbmFtZSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjMzMSw5ICsxNTMwLDYgQEAKIHsKIAlzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5ID0gZGF0YTsKIAotCWlmIChwZXJfY3B1KGluX2lnbm9yZWRfZnJhbWUsIHNtcF9wcm9jZXNzb3JfaWQoKSkpCi0JCXJldHVybjsKLQogCWlmIChyZWxpYWJsZSkKIAkJY2FsbGNoYWluX3N0b3JlKGVudHJ5LCBhZGRyKTsKIH0KQEAgLTI0NDAsOSArMTYzNiw2IEBACiAKIAlpc191c2VyID0gdXNlcl9tb2RlKHJlZ3MpOwogCi0JaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQtPnBpZCA9PSAwKQotCQlyZXR1cm47Ci0KIAlpZiAoaXNfdXNlciAmJiBjdXJyZW50LT5zdGF0ZSAhPSBUQVNLX1JVTk5JTkcpCiAJCXJldHVybjsKIApAQCAtMjQ3Miw0ICsxNjY1LDI1IEBACiB2b2lkIGh3X3BlcmZfZXZlbnRfc2V0dXBfb25saW5lKGludCBjcHUpCiB7CiAJaW5pdF9kZWJ1Z19zdG9yZV9vbl9jcHUoY3B1KTsKKworCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CisJY2FzZSBYODZfVkVORE9SX0FNRDoKKwkJYW1kX3BtdV9jcHVfb25saW5lKGNwdSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9Cit9CisKK3ZvaWQgaHdfcGVyZl9ldmVudF9zZXR1cF9vZmZsaW5lKGludCBjcHUpCit7CisJaW5pdF9kZWJ1Z19zdG9yZV9vbl9jcHUoY3B1KTsKKworCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CisJY2FzZSBYODZfVkVORE9SX0FNRDoKKwkJYW1kX3BtdV9jcHVfb2ZmbGluZShjcHUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2FtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmM2RiZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kLmMKQEAgLTAsMCArMSw0MTYgQEAKKyNpZmRlZiBDT05GSUdfQ1BVX1NVUF9BTUQKKworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soYW1kX25iX2xvY2spOworCitzdGF0aWMgX19pbml0Y29uc3QgdTY0IGFtZF9od19jYWNoZV9ldmVudF9pZHMKKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVhdID0KK3sKKyBbIEMoTDFEKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA0MCwgLyogRGF0YSBDYWNoZSBBY2Nlc3NlcyAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwNDEsIC8qIERhdGEgQ2FjaGUgTWlzc2VzICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMTQyLCAvKiBEYXRhIENhY2hlIFJlZmlsbHMgOnN5c3RlbSAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMjY3LCAvKiBEYXRhIFByZWZldGNoZXIgOmF0dGVtcHRzICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE2NywgLyogRGF0YSBQcmVmZXRjaGVyIDpjYW5jZWxsZWQgKi8KKwl9LAorIH0sCisgWyBDKEwxSSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMDgwLCAvKiBJbnN0cnVjdGlvbiBjYWNoZSBmZXRjaGVzICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDA4MSwgLyogSW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNEIsIC8qIFByZWZldGNoIEluc3RydWN0aW9ucyA6TG9hZCAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhMTCAgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDM3RCwgLyogUmVxdWVzdHMgdG8gTDIgQ2FjaGUgOklDK0RDICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMzdFLCAvKiBMMiBDYWNoZSBNaXNzZXMgOiBJQytEQyAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxN0YsIC8qIEwyIEZpbGwvV3JpdGViYWNrICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoRFRMQikgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwNDAsIC8qIERhdGEgQ2FjaGUgQWNjZXNzZXMgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDQ2LCAvKiBMMSBEVExCIGFuZCBMMiBETFRCIE1pc3MgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhJVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA4MCwgLyogSW5zdHJ1Y3Rpb24gZmVjdGhlcyAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwODUsIC8qIEluc3RyLiBmZXRjaCBJVExCIG1pc3NlcyAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorIFsgQyhCUFUgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjMiwgLyogUmV0aXJlZCBCcmFuY2ggSW5zdHIuICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwYzMsIC8qIFJldGlyZWQgTWlzcHJlZGljdGVkIEJJICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorfTsKKworLyoKKyAqIEFNRCBQZXJmb3JtYW5jZSBNb25pdG9yIEs3IGFuZCBsYXRlci4KKyAqLworc3RhdGljIGNvbnN0IHU2NCBhbWRfcGVyZm1vbl9ldmVudF9tYXBbXSA9Cit7CisgIFtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCQk9IDB4MDA3NiwKKyAgW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkJPSAweDAwYzAsCisgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdCT0gMHgwMDgwLAorICBbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCQk9IDB4MDA4MSwKKyAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10JPSAweDAwYzQsCisgIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCQk9IDB4MDBjNSwKK307CisKK3N0YXRpYyB1NjQgYW1kX3BtdV9ldmVudF9tYXAoaW50IGh3X2V2ZW50KQoreworCXJldHVybiBhbWRfcGVyZm1vbl9ldmVudF9tYXBbaHdfZXZlbnRdOworfQorCitzdGF0aWMgdTY0IGFtZF9wbXVfcmF3X2V2ZW50KHU2NCBod19ldmVudCkKK3sKKyNkZWZpbmUgSzdfRVZOVFNFTF9FVkVOVF9NQVNLCTB4RjAwMDAwMEZGVUxMCisjZGVmaW5lIEs3X0VWTlRTRUxfVU5JVF9NQVNLCTB4MDAwMDBGRjAwVUxMCisjZGVmaW5lIEs3X0VWTlRTRUxfRURHRV9NQVNLCTB4MDAwMDQwMDAwVUxMCisjZGVmaW5lIEs3X0VWTlRTRUxfSU5WX01BU0sJMHgwMDA4MDAwMDBVTEwKKyNkZWZpbmUgSzdfRVZOVFNFTF9SRUdfTUFTSwkweDBGRjAwMDAwMFVMTAorCisjZGVmaW5lIEs3X0VWTlRTRUxfTUFTSwkJCVwKKwkoSzdfRVZOVFNFTF9FVkVOVF9NQVNLIHwJXAorCSBLN19FVk5UU0VMX1VOSVRfTUFTSyAgfAlcCisJIEs3X0VWTlRTRUxfRURHRV9NQVNLICB8CVwKKwkgSzdfRVZOVFNFTF9JTlZfTUFTSyAgIHwJXAorCSBLN19FVk5UU0VMX1JFR19NQVNLKQorCisJcmV0dXJuIGh3X2V2ZW50ICYgSzdfRVZOVFNFTF9NQVNLOworfQorCisvKgorICogQU1ENjQgZXZlbnRzIGFyZSBkZXRlY3RlZCBiYXNlZCBvbiB0aGVpciBldmVudCBjb2Rlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYW1kX2lzX25iX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MpCit7CisJcmV0dXJuIChod2MtPmNvbmZpZyAmIDB4ZTApID09IDB4ZTA7Cit9CisKK3N0YXRpYyB2b2lkIGFtZF9wdXRfZXZlbnRfY29uc3RyYWludHMoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsCisJCQkJICAgICAgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCXN0cnVjdCBhbWRfbmIgKm5iID0gY3B1Yy0+YW1kX25iOworCWludCBpOworCisJLyoKKwkgKiBvbmx5IGNhcmUgYWJvdXQgTkIgZXZlbnRzCisJICovCisJaWYgKCEobmIgJiYgYW1kX2lzX25iX2V2ZW50KGh3YykpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIG5lZWQgdG8gc2NhbiB3aG9sZSBsaXN0IGJlY2F1c2UgZXZlbnQgbWF5IG5vdCBoYXZlCisJICogYmVlbiBhc3NpZ25lZCBkdXJpbmcgc2NoZWR1bGluZworCSAqCisJICogbm8gcmFjZSBjb25kaXRpb24gcG9zc2libGUgYmVjYXVzZSBldmVudCBjYW4gb25seQorCSAqIGJlIHJlbW92ZWQgb24gb25lIENQVSBhdCBhIHRpbWUgQU5EIFBNVSBpcyBkaXNhYmxlZAorCSAqIHdoZW4gd2UgY29tZSBoZXJlCisJICovCisJZm9yIChpID0gMDsgaSA8IHg4Nl9wbXUubnVtX2V2ZW50czsgaSsrKSB7CisJCWlmIChuYi0+b3duZXJzW2ldID09IGV2ZW50KSB7CisJCQljbXB4Y2hnKG5iLT5vd25lcnMraSwgZXZlbnQsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKyAvKgorICAqIEFNRDY0IE5vcnRoQnJpZGdlIGV2ZW50cyBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IGJlY2F1c2UKKyAgKiBjb3VudGVyIGFjY2VzcyBuZWVkcyB0byBiZSBzeW5jaHJvbml6ZWQgYWNyb3NzIGFsbCBjb3JlcworICAqIG9mIGEgcGFja2FnZS4gUmVmZXIgdG8gQktERyBzZWN0aW9uIDMuMTIKKyAgKgorICAqIE5CIGV2ZW50cyBhcmUgZXZlbnRzIG1lYXN1cmluZyBMMyBjYWNoZSwgSHlwZXJ0cmFuc3BvcnQKKyAgKiB0cmFmZmljLiBUaGV5IGFyZSBpZGVudGlmaWVkIGJ5IGFuIGV2ZW50IGNvZGUgPj0gMHhlMDAuCisgICogVGhleSBtZWFzdXJlIGV2ZW50cyBvbiB0aGUgTm9ydGhCcmlkZSB3aGljaCBpcyBzaGFyZWQKKyAgKiBieSBhbGwgY29yZXMgb24gYSBwYWNrYWdlLiBOQiBldmVudHMgYXJlIGNvdW50ZWQgb24gYQorICAqIHNoYXJlZCBzZXQgb2YgY291bnRlcnMuIFdoZW4gYSBOQiBldmVudCBpcyBwcm9ncmFtbWVkCisgICogaW4gYSBjb3VudGVyLCB0aGUgZGF0YSBhY3R1YWxseSBjb21lcyBmcm9tIGEgc2hhcmVkCisgICogY291bnRlci4gVGh1cywgYWNjZXNzIHRvIHRob3NlIGNvdW50ZXJzIG5lZWRzIHRvIGJlCisgICogc3luY2hyb25pemVkLgorICAqCisgICogV2UgaW1wbGVtZW50IHRoZSBzeW5jaHJvbml6YXRpb24gc3VjaCB0aGF0IG5vIHR3byBjb3JlcworICAqIGNhbiBiZSBtZWFzdXJpbmcgTkIgZXZlbnRzIHVzaW5nIHRoZSBzYW1lIGNvdW50ZXJzLiBUaHVzLAorICAqIHdlIG1haW50YWluIGEgcGVyLU5CIGFsbG9jYXRpb24gdGFibGUuIFRoZSBhdmFpbGFibGUgc2xvdAorICAqIGlzIHByb3BhZ2F0ZWQgdXNpbmcgdGhlIGV2ZW50X2NvbnN0cmFpbnQgc3RydWN0dXJlLgorICAqCisgICogV2UgcHJvdmlkZSBvbmx5IG9uZSBjaG9pY2UgZm9yIGVhY2ggTkIgZXZlbnQgYmFzZWQgb24KKyAgKiB0aGUgZmFjdCB0aGF0IG9ubHkgTkIgZXZlbnRzIGhhdmUgcmVzdHJpY3Rpb25zLiBDb25zZXF1ZW50bHksCisgICogaWYgYSBjb3VudGVyIGlzIGF2YWlsYWJsZSwgdGhlcmUgaXMgYSBndWFyYW50ZWUgdGhlIE5CIGV2ZW50CisgICogd2lsbCBiZSBhc3NpZ25lZCB0byBpdC4gSWYgbm8gc2xvdCBpcyBhdmFpbGFibGUsIGFuIGVtcHR5CisgICogY29uc3RyYWludCBpcyByZXR1cm5lZCBhbmQgc2NoZWR1bGluZyB3aWxsIGV2ZW50dWFsbHkgZmFpbAorICAqIGZvciB0aGlzIGV2ZW50LgorICAqCisgICogTm90ZSB0aGF0IGFsbCBjb3JlcyBhdHRhY2hlZCB0aGUgc2FtZSBOQiBjb21wZXRlIGZvciB0aGUgc2FtZQorICAqIGNvdW50ZXJzIHRvIGhvc3QgTkIgZXZlbnRzLCB0aGlzIGlzIHdoeSB3ZSB1c2UgYXRvbWljIG9wcy4gU29tZQorICAqIG11bHRpLWNoaXAgQ1BVcyBtYXkgaGF2ZSBtb3JlIHRoYW4gb25lIE5CLgorICAqCisgICogR2l2ZW4gdGhhdCByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCAoY21weGNoZyksIHRoZXkgbXVzdCBiZQorICAqIGV2ZW50dWFsbHkgZnJlZWQgZm9yIG90aGVycyB0byB1c2UuIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5CisgICogY2FsbGluZyBhbWRfcHV0X2V2ZW50X2NvbnN0cmFpbnRzKCkuCisgICoKKyAgKiBOb24gTkIgZXZlbnRzIGFyZSBub3QgaW1wYWN0ZWQgYnkgdGhpcyByZXN0cmljdGlvbi4KKyAgKi8KK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqCithbWRfZ2V0X2V2ZW50X2NvbnN0cmFpbnRzKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJc3RydWN0IGFtZF9uYiAqbmIgPSBjcHVjLT5hbWRfbmI7CisJc3RydWN0IHBlcmZfZXZlbnQgKm9sZCA9IE5VTEw7CisJaW50IG1heCA9IHg4Nl9wbXUubnVtX2V2ZW50czsKKwlpbnQgaSwgaiwgayA9IC0xOworCisJLyoKKwkgKiBpZiBub3QgTkIgZXZlbnQgb3Igbm8gTkIsIHRoZW4gbm8gY29uc3RyYWludHMKKwkgKi8KKwlpZiAoIShuYiAmJiBhbWRfaXNfbmJfZXZlbnQoaHdjKSkpCisJCXJldHVybiAmdW5jb25zdHJhaW5lZDsKKworCS8qCisJICogZGV0ZWN0IGlmIGFscmVhZHkgcHJlc2VudCwgaWYgc28gcmV1c2UKKwkgKgorCSAqIGNhbm5vdCBtZXJnZSB3aXRoIGFjdHVhbCBhbGxvY2F0aW9uCisJICogYmVjYXVzZSBvZiBwb3NzaWJsZSBob2xlcworCSAqCisJICogZXZlbnQgY2FuIGFscmVhZHkgYmUgcHJlc2VudCB5ZXQgbm90IGFzc2lnbmVkIChpbiBod2MtPmlkeCkKKwkgKiBiZWNhdXNlIG9mIHN1Y2Nlc3NpdmUgY2FsbHMgdG8geDg2X3NjaGVkdWxlX2V2ZW50cygpIGZyb20KKwkgKiBod19wZXJmX2dyb3VwX3NjaGVkX2luKCkgd2l0aG91dCBod19wZXJmX2VuYWJsZSgpCisJICovCisJZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7CisJCS8qCisJCSAqIGtlZXAgdHJhY2sgb2YgZmlyc3QgZnJlZSBzbG90CisJCSAqLworCQlpZiAoayA9PSAtMSAmJiAhbmItPm93bmVyc1tpXSkKKwkJCWsgPSBpOworCisJCS8qIGFscmVhZHkgcHJlc2VudCwgcmV1c2UgKi8KKwkJaWYgKG5iLT5vd25lcnNbaV0gPT0gZXZlbnQpCisJCQlnb3RvIGRvbmU7CisJfQorCS8qCisJICogbm90IHByZXNlbnQsIHNvIGdyYWIgYSBuZXcgc2xvdAorCSAqIHN0YXJ0aW5nIGVpdGhlciBhdDoKKwkgKi8KKwlpZiAoaHdjLT5pZHggIT0gLTEpIHsKKwkJLyogcHJldmlvdXMgYXNzaWdubWVudCAqLworCQlpID0gaHdjLT5pZHg7CisJfSBlbHNlIGlmIChrICE9IC0xKSB7CisJCS8qIHN0YXJ0IGZyb20gZnJlZSBzbG90IGZvdW5kICovCisJCWkgPSBrOworCX0gZWxzZSB7CisJCS8qCisJCSAqIGV2ZW50IG5vdCBmb3VuZCwgbm8gc2xvdCBmb3VuZCBpbgorCQkgKiBmaXJzdCBwYXNzLCB0cnkgYWdhaW4gZnJvbSB0aGUKKwkJICogYmVnaW5uaW5nCisJCSAqLworCQlpID0gMDsKKwl9CisJaiA9IGk7CisJZG8geworCQlvbGQgPSBjbXB4Y2hnKG5iLT5vd25lcnMraSwgTlVMTCwgZXZlbnQpOworCQlpZiAoIW9sZCkKKwkJCWJyZWFrOworCQlpZiAoKytpID09IG1heCkKKwkJCWkgPSAwOworCX0gd2hpbGUgKGkgIT0gaik7Citkb25lOgorCWlmICghb2xkKQorCQlyZXR1cm4gJm5iLT5ldmVudF9jb25zdHJhaW50c1tpXTsKKworCXJldHVybiAmZW1wdHljb25zdHJhaW50OworfQorCitzdGF0aWMgX19pbml0Y29uc3Qgc3RydWN0IHg4Nl9wbXUgYW1kX3BtdSA9IHsKKwkubmFtZQkJCT0gIkFNRCIsCisJLmhhbmRsZV9pcnEJCT0geDg2X3BtdV9oYW5kbGVfaXJxLAorCS5kaXNhYmxlX2FsbAkJPSB4ODZfcG11X2Rpc2FibGVfYWxsLAorCS5lbmFibGVfYWxsCQk9IHg4Nl9wbXVfZW5hYmxlX2FsbCwKKwkuZW5hYmxlCQkJPSB4ODZfcG11X2VuYWJsZV9ldmVudCwKKwkuZGlzYWJsZQkJPSB4ODZfcG11X2Rpc2FibGVfZXZlbnQsCisJLmV2ZW50c2VsCQk9IE1TUl9LN19FVk5UU0VMMCwKKwkucGVyZmN0cgkJPSBNU1JfSzdfUEVSRkNUUjAsCisJLmV2ZW50X21hcAkJPSBhbWRfcG11X2V2ZW50X21hcCwKKwkucmF3X2V2ZW50CQk9IGFtZF9wbXVfcmF3X2V2ZW50LAorCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUoYW1kX3BlcmZtb25fZXZlbnRfbWFwKSwKKwkubnVtX2V2ZW50cwkJPSA0LAorCS5ldmVudF9iaXRzCQk9IDQ4LAorCS5ldmVudF9tYXNrCQk9ICgxVUxMIDw8IDQ4KSAtIDEsCisJLmFwaWMJCQk9IDEsCisJLyogdXNlIGhpZ2hlc3QgYml0IHRvIGRldGVjdCBvdmVyZmxvdyAqLworCS5tYXhfcGVyaW9kCQk9ICgxVUxMIDw8IDQ3KSAtIDEsCisJLmdldF9ldmVudF9jb25zdHJhaW50cwk9IGFtZF9nZXRfZXZlbnRfY29uc3RyYWludHMsCisJLnB1dF9ldmVudF9jb25zdHJhaW50cwk9IGFtZF9wdXRfZXZlbnRfY29uc3RyYWludHMKK307CisKK3N0YXRpYyBzdHJ1Y3QgYW1kX25iICphbWRfYWxsb2NfbmIoaW50IGNwdSwgaW50IG5iX2lkKQoreworCXN0cnVjdCBhbWRfbmIgKm5iOworCWludCBpOworCisJbmIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYW1kX25iKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuYikKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQobmIsIDAsIHNpemVvZigqbmIpKTsKKwluYi0+bmJfaWQgPSBuYl9pZDsKKworCS8qCisJICogaW5pdGlhbGl6ZSBhbGwgcG9zc2libGUgTkIgY29uc3RyYWludHMKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpKyspIHsKKwkJc2V0X2JpdChpLCBuYi0+ZXZlbnRfY29uc3RyYWludHNbaV0uaWR4bXNrKTsKKwkJbmItPmV2ZW50X2NvbnN0cmFpbnRzW2ldLndlaWdodCA9IDE7CisJfQorCXJldHVybiBuYjsKK30KKworc3RhdGljIHZvaWQgYW1kX3BtdV9jcHVfb25saW5lKGludCBjcHUpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdTEsICpjcHUyOworCXN0cnVjdCBhbWRfbmIgKm5iID0gTlVMTDsKKwlpbnQgaSwgbmJfaWQ7CisKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODZfbWF4X2NvcmVzIDwgMikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIHRvbyBlYXJseSBpbiB0aGUKKwkgKiBib290IHByb2Nlc3MsIGluIHdoaWNoIGNhc2UgbmJfaWQgaXMgYm9ndXMKKwkgKi8KKwluYl9pZCA9IGFtZF9nZXRfbmJfaWQoY3B1KTsKKwlpZiAobmJfaWQgPT0gQkFEX0FQSUNJRCkKKwkJcmV0dXJuOworCisJY3B1MSA9ICZwZXJfY3B1KGNwdV9od19ldmVudHMsIGNwdSk7CisJY3B1MS0+YW1kX25iID0gTlVMTDsKKworCXJhd19zcGluX2xvY2soJmFtZF9uYl9sb2NrKTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgeworCQljcHUyID0gJnBlcl9jcHUoY3B1X2h3X2V2ZW50cywgaSk7CisJCW5iID0gY3B1Mi0+YW1kX25iOworCQlpZiAoIW5iKQorCQkJY29udGludWU7CisJCWlmIChuYi0+bmJfaWQgPT0gbmJfaWQpCisJCQlnb3RvIGZvdW5kOworCX0KKworCW5iID0gYW1kX2FsbG9jX25iKGNwdSwgbmJfaWQpOworCWlmICghbmIpIHsKKwkJcHJfZXJyKCJwZXJmX2V2ZW50czogZmFpbGVkIE5CIGFsbG9jYXRpb24gZm9yIENQVSVkXG4iLCBjcHUpOworCQlyYXdfc3Bpbl91bmxvY2soJmFtZF9uYl9sb2NrKTsKKwkJcmV0dXJuOworCX0KK2ZvdW5kOgorCW5iLT5yZWZjbnQrKzsKKwljcHUxLT5hbWRfbmIgPSBuYjsKKworCXJhd19zcGluX3VubG9jaygmYW1kX25iX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBhbWRfcG11X2NwdV9vZmZsaW5lKGludCBjcHUpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWh3OworCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2X21heF9jb3JlcyA8IDIpCisJCXJldHVybjsKKworCWNwdWh3ID0gJnBlcl9jcHUoY3B1X2h3X2V2ZW50cywgY3B1KTsKKworCXJhd19zcGluX2xvY2soJmFtZF9uYl9sb2NrKTsKKworCWlmICgtLWNwdWh3LT5hbWRfbmItPnJlZmNudCA9PSAwKQorCQlrZnJlZShjcHVody0+YW1kX25iKTsKKworCWNwdWh3LT5hbWRfbmIgPSBOVUxMOworCisJcmF3X3NwaW5fdW5sb2NrKCZhbWRfbmJfbG9jayk7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IGFtZF9wbXVfaW5pdCh2b2lkKQoreworCS8qIFBlcmZvcm1hbmNlLW1vbml0b3Jpbmcgc3VwcG9ydGVkIGZyb20gSzcgYW5kIGxhdGVyOiAqLworCWlmIChib290X2NwdV9kYXRhLng4NiA8IDYpCisJCXJldHVybiAtRU5PREVWOworCisJeDg2X3BtdSA9IGFtZF9wbXU7CisKKwkvKiBFdmVudHMgYXJlIGNvbW1vbiBmb3IgYWxsIEFNRHMgKi8KKwltZW1jcHkoaHdfY2FjaGVfZXZlbnRfaWRzLCBhbWRfaHdfY2FjaGVfZXZlbnRfaWRzLAorCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7CisKKwkvKgorCSAqIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSB0aGUgYm9vdCBjcHUsIG90aGVyIGNwdXMgd2lsbCBnZXQKKwkgKiB0aGUgY3B1IGhvdHBsdWcgY2FsbGJhY2tzIGZyb20gc21wX2luaXQoKQorCSAqLworCWFtZF9wbXVfY3B1X29ubGluZShzbXBfcHJvY2Vzc29yX2lkKCkpOworCXJldHVybiAwOworfQorCisjZWxzZSAvKiBDT05GSUdfQ1BVX1NVUF9BTUQgKi8KKworc3RhdGljIGludCBhbWRfcG11X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYW1kX3BtdV9jcHVfb25saW5lKGludCBjcHUpCit7Cit9CisKK3N0YXRpYyB2b2lkIGFtZF9wbXVfY3B1X29mZmxpbmUoaW50IGNwdSkKK3sKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNjU5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYwpAQCAtMCwwICsxLDk3MSBAQAorI2lmZGVmIENPTkZJR19DUFVfU1VQX0lOVEVMCisKKy8qCisgKiBJbnRlbCBQZXJmTW9uIHYzLiBVc2VkIG9uIENvcmUyIGFuZCBsYXRlci4KKyAqLworc3RhdGljIGNvbnN0IHU2NCBpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtdID0KK3sKKyAgW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10JCT0gMHgwMDNjLAorICBbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCQk9IDB4MDBjMCwKKyAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10JPSAweDRmMmUsCisgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JCT0gMHg0MTJlLAorICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXQk9IDB4MDBjNCwKKyAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JCT0gMHgwMGM1LAorICBbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkJPSAweDAxM2MsCit9OworCitzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfY29yZV9ldmVudF9jb25zdHJhaW50c1tdID0KK3sKKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTEsIDB4MiksIC8qIEZQX0FTU0lTVCAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxMiwgMHgyKSwgLyogTVVMICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEzLCAweDIpLCAvKiBESVYgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTQsIDB4MSksIC8qIENZQ0xFU19ESVZfQlVTWSAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxOSwgMHgyKSwgLyogREVMQVlFRF9CWVBBU1MgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzEsIDB4MSksIC8qIEZQX0NPTVBfSU5TVFJfUkVUICovCisJRVZFTlRfQ09OU1RSQUlOVF9FTkQKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9jb3JlMl9ldmVudF9jb25zdHJhaW50c1tdID0KK3sKKwlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4YzAsICgweDN8KDFVTEw8PDMyKSkpLCAvKiBJTlNUUlVDVElPTlNfUkVUSVJFRCAqLworCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHgzYywgKDB4M3woMVVMTDw8MzMpKSksIC8qIFVOSEFMVEVEX0NPUkVfQ1lDTEVTICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEwLCAweDEpLCAvKiBGUF9DT01QX09QU19FWEUgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTEsIDB4MiksIC8qIEZQX0FTU0lTVCAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxMiwgMHgyKSwgLyogTVVMICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEzLCAweDIpLCAvKiBESVYgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTQsIDB4MSksIC8qIENZQ0xFU19ESVZfQlVTWSAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxOCwgMHgxKSwgLyogSURMRV9EVVJJTkdfRElWICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDE5LCAweDIpLCAvKiBERUxBWUVEX0JZUEFTUyAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhhMSwgMHgxKSwgLyogUlNfVU9QU19ESVNQQVRDSF9DWUNMRVMgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4Y2IsIDB4MSksIC8qIE1FTV9MT0FEX1JFVElSRUQgKi8KKwlFVkVOVF9DT05TVFJBSU5UX0VORAorfTsKKworc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX25laGFsZW1fZXZlbnRfY29uc3RyYWludHNbXSA9Cit7CisJRklYRURfRVZFTlRfQ09OU1RSQUlOVCgweGMwLCAoMHhmfCgxVUxMPDwzMikpKSwgLyogSU5TVFJVQ1RJT05TX1JFVElSRUQgKi8KKwlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4M2MsICgweGZ8KDFVTEw8PDMzKSkpLCAvKiBVTkhBTFRFRF9DT1JFX0NZQ0xFUyAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHg0MCwgMHgzKSwgLyogTDFEX0NBQ0hFX0xEICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDQxLCAweDMpLCAvKiBMMURfQ0FDSEVfU1QgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NDIsIDB4MyksIC8qIEwxRF9DQUNIRV9MT0NLICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDQzLCAweDMpLCAvKiBMMURfQUxMX1JFRiAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHg0OCwgMHgzKSwgLyogTDFEX1BFTkRfTUlTUyAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHg0ZSwgMHgzKSwgLyogTDFEX1BSRUZFVENIICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDUxLCAweDMpLCAvKiBMMUQgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NjMsIDB4MyksIC8qIENBQ0hFX0xPQ0tfQ1lDTEVTICovCisJRVZFTlRfQ09OU1RSQUlOVF9FTkQKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF93ZXN0bWVyZV9ldmVudF9jb25zdHJhaW50c1tdID0KK3sKKwlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4YzAsICgweGZ8KDFVTEw8PDMyKSkpLCAvKiBJTlNUUlVDVElPTlNfUkVUSVJFRCAqLworCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHgzYywgKDB4ZnwoMVVMTDw8MzMpKSksIC8qIFVOSEFMVEVEX0NPUkVfQ1lDTEVTICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDUxLCAweDMpLCAvKiBMMUQgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NjAsIDB4MSksIC8qIE9GRkNPUkVfUkVRVUVTVFNfT1VUU1RBTkRJTkcgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4NjMsIDB4MyksIC8qIENBQ0hFX0xPQ0tfQ1lDTEVTICovCisJRVZFTlRfQ09OU1RSQUlOVF9FTkQKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9nZW5fZXZlbnRfY29uc3RyYWludHNbXSA9Cit7CisJRklYRURfRVZFTlRfQ09OU1RSQUlOVCgweGMwLCAoMHgzfCgxVUxMPDwzMikpKSwgLyogSU5TVFJVQ1RJT05TX1JFVElSRUQgKi8KKwlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4M2MsICgweDN8KDFVTEw8PDMzKSkpLCAvKiBVTkhBTFRFRF9DT1JFX0NZQ0xFUyAqLworCUVWRU5UX0NPTlNUUkFJTlRfRU5ECit9OworCitzdGF0aWMgdTY0IGludGVsX3BtdV9ldmVudF9tYXAoaW50IGh3X2V2ZW50KQoreworCXJldHVybiBpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtod19ldmVudF07Cit9CisKK3N0YXRpYyBfX2luaXRjb25zdCB1NjQgd2VzdG1lcmVfaHdfY2FjaGVfZXZlbnRfaWRzCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Cit7CisgWyBDKEwxRCkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxMGIsIC8qIE1FTV9JTlNUX1JFVElSRUQuTE9BRFMgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNTEsIC8qIEwxRC5SRVBMICAgICAgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAyMGIsIC8qIE1FTV9JTlNUX1JFVFVSRUQuU1RPUkVTICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyNTEsIC8qIEwxRC5NX1JFUEwgICAgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNGUsIC8qIEwxRF9QUkVGRVRDSC5SRVFVRVNUUyAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyNGUsIC8qIEwxRF9QUkVGRVRDSC5NSVNTICAgICAgICAgICAgKi8KKwl9LAorIH0sCisgWyBDKEwxSSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzgwLCAvKiBMMUkuUkVBRFMgICAgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjgwLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MCwKKwl9LAorIH0sCisgWyBDKExMICApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzI0LCAvKiBMMl9SUVNUUy5MT0FEUyAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjI0LCAvKiBMMl9SUVNUUy5MRF9NSVNTICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwYzI0LCAvKiBMMl9SUVNUUy5SRk9TICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwODI0LCAvKiBMMl9SUVNUUy5SRk9fTUlTUyAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjJlLCAvKiBMTEMgUmVmZXJlbmNlICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJlLCAvKiBMTEMgTWlzc2VzICAgICAgICAgICAgICAgICAgICovCisJfSwKKyB9LAorIFsgQyhEVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDEwYiwgLyogTUVNX0lOU1RfUkVUSVJFRC5MT0FEUyAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDEwOCwgLyogRFRMQl9MT0FEX01JU1NFUy5BTlkgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDIwYiwgLyogTUVNX0lOU1RfUkVUVVJFRC5TVE9SRVMgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDEwYywgLyogTUVNX1NUT1JFX1JFVElSRUQuRFRMQl9NSVNTICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAsCisJfSwKKyB9LAorIFsgQyhJVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDFjMCwgLyogSU5TVF9SRVRJUkVELkFOWV9QICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE4NSwgLyogSVRMQl9NSVNTRVMuQU5ZICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisgfSwKKyBbIEMoQlBVICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzQsIC8qIEJSX0lOU1RfUkVUSVJFRC5BTExfQlJBTkNIRVMgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAzZTgsIC8qIEJQVV9DTEVBUlMuQU5ZICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCit9OworCitzdGF0aWMgX19pbml0Y29uc3QgdTY0IG5laGFsZW1faHdfY2FjaGVfZXZlbnRfaWRzCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Cit7CisgWyBDKEwxRCkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDAsIC8qIEwxRF9DQUNIRV9MRC5JX1NUQVRFICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDEsIC8qIEwxRF9DQUNIRV9TVC5JX1NUQVRFICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNGUsIC8qIEwxRF9QUkVGRVRDSC5SRVFVRVNUUyAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyNGUsIC8qIEwxRF9QUkVGRVRDSC5NSVNTICAgICAgICAgICAgKi8KKwl9LAorIH0sCisgWyBDKEwxSSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzgwLCAvKiBMMUkuUkVBRFMgICAgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjgwLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MCwKKwl9LAorIH0sCisgWyBDKExMICApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzI0LCAvKiBMMl9SUVNUUy5MT0FEUyAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMjI0LCAvKiBMMl9SUVNUUy5MRF9NSVNTICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwYzI0LCAvKiBMMl9SUVNUUy5SRk9TICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwODI0LCAvKiBMMl9SUVNUUy5SRk9fTUlTUyAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjJlLCAvKiBMTEMgUmVmZXJlbmNlICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJlLCAvKiBMTEMgTWlzc2VzICAgICAgICAgICAgICAgICAgICovCisJfSwKKyB9LAorIFsgQyhEVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgICAoYWxpYXMpICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDEwOCwgLyogRFRMQl9MT0FEX01JU1NFUy5BTlkgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgICAoYWxpYXMpICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDEwYywgLyogTUVNX1NUT1JFX1JFVElSRUQuRFRMQl9NSVNTICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MCwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAsCisJfSwKKyB9LAorIFsgQyhJVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDFjMCwgLyogSU5TVF9SRVRJUkVELkFOWV9QICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MjBjOCwgLyogSVRMQl9NSVNTX1JFVElSRUQgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisgfSwKKyBbIEMoQlBVICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwYzQsIC8qIEJSX0lOU1RfUkVUSVJFRC5BTExfQlJBTkNIRVMgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAzZTgsIC8qIEJQVV9DTEVBUlMuQU5ZICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCit9OworCitzdGF0aWMgX19pbml0Y29uc3QgdTY0IGNvcmUyX2h3X2NhY2hlX2V2ZW50X2lkcworCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF0gPQoreworIFsgQyhMMUQpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MCwgLyogTDFEX0NBQ0hFX0xELklfU1RBVEUgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTQxLCAvKiBMMURfQ0FDSEVfU1QuSV9TVEFURSAgICAgICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MTA0ZSwgLyogTDFEX1BSRUZFVENILlJFUVVFU1RTICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAwLAorCX0sCisgfSwKKyBbIEMoTDFJICkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAwODAsIC8qIEwxSS5SRUFEUyAgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMDgxLCAvKiBMMUkuTUlTU0VTICAgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IC0xLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IC0xLAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKExMICApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjI5LCAvKiBMMl9MRC5NRVNJICAgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyOSwgLyogTDJfTEQuSVNUQVRFICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDRmMkEsIC8qIEwyX1NULk1FU0kgICAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHg0MTJBLCAvKiBMMl9TVC5JU1RBVEUgICAgICAgICAgICAgICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKERUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwZjQwLCAvKiBMMURfQ0FDSEVfTEQuTUVTSSAgKGFsaWFzKSAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDIwOCwgLyogRFRMQl9NSVNTRVMuTUlTU19MRCAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAoYWxpYXMpICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwODA4LCAvKiBEVExCX01JU1NFUy5NSVNTX1NUICAgICAgICAqLworCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKElUTEIpIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGMwLCAvKiBJTlNUX1JFVElSRUQuQU5ZX1AgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MTI4MiwgLyogSVRMQk1JU1NFUyAgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCisgWyBDKEJQVSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMGM0LCAvKiBCUl9JTlNUX1JFVElSRUQuQU5ZICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDBjNSwgLyogQlBfSU5TVF9SRVRJUkVELk1JU1BSRUQgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorIH0sCit9OworCitzdGF0aWMgX19pbml0Y29uc3QgdTY0IGF0b21faHdfY2FjaGVfZXZlbnRfaWRzCisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXSA9Cit7CisgWyBDKEwxRCkgXSA9IHsKKwlbIEMoT1BfUkVBRCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDIxNDAsIC8qIEwxRF9DQUNIRS5MRCAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDIyNDAsIC8qIEwxRF9DQUNIRS5TVCAgICAgICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMCwKKwl9LAorIH0sCisgWyBDKEwxSSApIF0gPSB7CisJWyBDKE9QX1JFQUQpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMzgwLCAvKiBMMUkuUkVBRFMgICAgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI4MCwgLyogTDFJLk1JU1NFUyAgICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAtMSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAtMSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhMTCAgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4NGYyOSwgLyogTDJfTEQuTUVTSSAgICAgICAgICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDQxMjksIC8qIEwyX0xELklTVEFURSAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHg0ZjJBLCAvKiBMMl9TVC5NRVNJICAgICAgICAgICAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4NDEyQSwgLyogTDJfU1QuSVNUQVRFICAgICAgICAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhEVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MjE0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgIChhbGlhcykgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDA1MDgsIC8qIERUTEJfTUlTU0VTLk1JU1NfTEQgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgyMjQwLCAvKiBMMURfQ0FDSEVfU1QuTUVTSSAgKGFsaWFzKSAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDYwOCwgLyogRFRMQl9NSVNTRVMuTUlTU19TVCAgICAgICAgKi8KKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAwLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDAsCisJfSwKKyB9LAorIFsgQyhJVExCKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjMCwgLyogSU5TVF9SRVRJUkVELkFOWV9QICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyODIsIC8qIElUTEIuTUlTU0VTICAgICAgICAgICAgICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorIFsgQyhCUFUgKSBdID0geworCVsgQyhPUF9SRUFEKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDBjNCwgLyogQlJfSU5TVF9SRVRJUkVELkFOWSAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwYzUsIC8qIEJQX0lOU1RfUkVUSVJFRC5NSVNQUkVEICAgICovCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gLTEsCisJfSwKKyB9LAorfTsKKworc3RhdGljIHU2NCBpbnRlbF9wbXVfcmF3X2V2ZW50KHU2NCBod19ldmVudCkKK3sKKyNkZWZpbmUgQ09SRV9FVk5UU0VMX0VWRU5UX01BU0sJCTB4MDAwMDAwRkZVTEwKKyNkZWZpbmUgQ09SRV9FVk5UU0VMX1VOSVRfTUFTSwkJMHgwMDAwRkYwMFVMTAorI2RlZmluZSBDT1JFX0VWTlRTRUxfRURHRV9NQVNLCQkweDAwMDQwMDAwVUxMCisjZGVmaW5lIENPUkVfRVZOVFNFTF9JTlZfTUFTSwkJMHgwMDgwMDAwMFVMTAorI2RlZmluZSBDT1JFX0VWTlRTRUxfUkVHX01BU0sJCTB4RkYwMDAwMDBVTEwKKworI2RlZmluZSBDT1JFX0VWTlRTRUxfTUFTSwkJXAorCShJTlRFTF9BUkNIX0VWVFNFTF9NQVNLIHwJXAorCSBJTlRFTF9BUkNIX1VOSVRfTUFTSyAgIHwJXAorCSBJTlRFTF9BUkNIX0VER0VfTUFTSyAgIHwJXAorCSBJTlRFTF9BUkNIX0lOVl9NQVNLICAgIHwJXAorCSBJTlRFTF9BUkNIX0NOVF9NQVNLKQorCisJcmV0dXJuIGh3X2V2ZW50ICYgQ09SRV9FVk5UU0VMX01BU0s7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3BtdV9lbmFibGVfYnRzKHU2NCBjb25maWcpCit7CisJdW5zaWduZWQgbG9uZyBkZWJ1Z2N0bG1zcjsKKworCWRlYnVnY3RsbXNyID0gZ2V0X2RlYnVnY3RsbXNyKCk7CisKKwlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfVFI7CisJZGVidWdjdGxtc3IgfD0gWDg2X0RFQlVHQ1RMX0JUUzsKKwlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfQlRJTlQ7CisKKwlpZiAoIShjb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfT1MpKQorCQlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfQlRTX09GRl9PUzsKKworCWlmICghKGNvbmZpZyAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTF9VU1IpKQorCQlkZWJ1Z2N0bG1zciB8PSBYODZfREVCVUdDVExfQlRTX09GRl9VU1I7CisKKwl1cGRhdGVfZGVidWdjdGxtc3IoZGVidWdjdGxtc3IpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZGlzYWJsZV9idHModm9pZCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXVuc2lnbmVkIGxvbmcgZGVidWdjdGxtc3I7CisKKwlpZiAoIWNwdWMtPmRzKQorCQlyZXR1cm47CisKKwlkZWJ1Z2N0bG1zciA9IGdldF9kZWJ1Z2N0bG1zcigpOworCisJZGVidWdjdGxtc3IgJj0KKwkJfihYODZfREVCVUdDVExfVFIgfCBYODZfREVCVUdDVExfQlRTIHwgWDg2X0RFQlVHQ1RMX0JUSU5UIHwKKwkJICBYODZfREVCVUdDVExfQlRTX09GRl9PUyB8IFg4Nl9ERUJVR0NUTF9CVFNfT0ZGX1VTUik7CisKKwl1cGRhdGVfZGVidWdjdGxtc3IoZGVidWdjdGxtc3IpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZGlzYWJsZV9hbGwodm9pZCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCisJd3Jtc3JsKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIDApOworCisJaWYgKHRlc3RfYml0KFg4Nl9QTUNfSURYX0ZJWEVEX0JUUywgY3B1Yy0+YWN0aXZlX21hc2spKQorCQlpbnRlbF9wbXVfZGlzYWJsZV9idHMoKTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfcG11X2VuYWJsZV9hbGwodm9pZCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCisJd3Jtc3JsKE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwsIHg4Nl9wbXUuaW50ZWxfY3RybCk7CisKKwlpZiAodGVzdF9iaXQoWDg2X1BNQ19JRFhfRklYRURfQlRTLCBjcHVjLT5hY3RpdmVfbWFzaykpIHsKKwkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0KKwkJCWNwdWMtPmV2ZW50c1tYODZfUE1DX0lEWF9GSVhFRF9CVFNdOworCisJCWlmIChXQVJOX09OX09OQ0UoIWV2ZW50KSkKKwkJCXJldHVybjsKKworCQlpbnRlbF9wbXVfZW5hYmxlX2J0cyhldmVudC0+aHcuY29uZmlnKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IGludGVsX3BtdV9nZXRfc3RhdHVzKHZvaWQpCit7CisJdTY0IHN0YXR1czsKKworCXJkbXNybChNU1JfQ09SRV9QRVJGX0dMT0JBTF9TVEFUVVMsIHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfcG11X2Fja19zdGF0dXModTY0IGFjaykKK3sKKwl3cm1zcmwoTVNSX0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkwsIGFjayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraW50ZWxfcG11X2Rpc2FibGVfZml4ZWQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IF9faWR4KQoreworCWludCBpZHggPSBfX2lkeCAtIFg4Nl9QTUNfSURYX0ZJWEVEOworCXU2NCBjdHJsX3ZhbCwgbWFzazsKKworCW1hc2sgPSAweGZVTEwgPDwgKGlkeCAqIDQpOworCisJcmRtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UsIGN0cmxfdmFsKTsKKwljdHJsX3ZhbCAmPSB+bWFzazsKKwkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSwgY3RybF92YWwpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZHJhaW5fYnRzX2J1ZmZlcih2b2lkKQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IGNwdWMtPmRzOworCXN0cnVjdCBidHNfcmVjb3JkIHsKKwkJdTY0CWZyb207CisJCXU2NAl0bzsKKwkJdTY0CWZsYWdzOworCX07CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3B1Yy0+ZXZlbnRzW1g4Nl9QTUNfSURYX0ZJWEVEX0JUU107CisJc3RydWN0IGJ0c19yZWNvcmQgKmF0LCAqdG9wOworCXN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgaGFuZGxlOworCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciBoZWFkZXI7CisJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKKwlzdHJ1Y3QgcHRfcmVncyByZWdzOworCisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCisJaWYgKCFkcykKKwkJcmV0dXJuOworCisJYXQgID0gKHN0cnVjdCBidHNfcmVjb3JkICopKHVuc2lnbmVkIGxvbmcpZHMtPmJ0c19idWZmZXJfYmFzZTsKKwl0b3AgPSAoc3RydWN0IGJ0c19yZWNvcmQgKikodW5zaWduZWQgbG9uZylkcy0+YnRzX2luZGV4OworCisJaWYgKHRvcCA8PSBhdCkKKwkJcmV0dXJuOworCisJZHMtPmJ0c19pbmRleCA9IGRzLT5idHNfYnVmZmVyX2Jhc2U7CisKKworCWRhdGEucGVyaW9kCT0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOworCWRhdGEuYWRkcgk9IDA7CisJZGF0YS5yYXcJPSBOVUxMOworCXJlZ3MuaXAJCT0gMDsKKworCS8qCisJICogUHJlcGFyZSBhIGdlbmVyaWMgc2FtcGxlLCBpLmUuIGZpbGwgaW4gdGhlIGludmFyaWFudCBmaWVsZHMuCisJICogV2Ugd2lsbCBvdmVyd3JpdGUgdGhlIGZyb20gYW5kIHRvIGFkZHJlc3MgYmVmb3JlIHdlIG91dHB1dAorCSAqIHRoZSBzYW1wbGUuCisJICovCisJcGVyZl9wcmVwYXJlX3NhbXBsZSgmaGVhZGVyLCAmZGF0YSwgZXZlbnQsICZyZWdzKTsKKworCWlmIChwZXJmX291dHB1dF9iZWdpbigmaGFuZGxlLCBldmVudCwKKwkJCSAgICAgIGhlYWRlci5zaXplICogKHRvcCAtIGF0KSwgMSwgMSkpCisJCXJldHVybjsKKworCWZvciAoOyBhdCA8IHRvcDsgYXQrKykgeworCQlkYXRhLmlwCQk9IGF0LT5mcm9tOworCQlkYXRhLmFkZHIJPSBhdC0+dG87CisKKwkJcGVyZl9vdXRwdXRfc2FtcGxlKCZoYW5kbGUsICZoZWFkZXIsICZkYXRhLCBldmVudCk7CisJfQorCisJcGVyZl9vdXRwdXRfZW5kKCZoYW5kbGUpOworCisJLyogVGhlcmUncyBuZXcgZGF0YSBhdmFpbGFibGUuICovCisJZXZlbnQtPmh3LmludGVycnVwdHMrKzsKKwlldmVudC0+cGVuZGluZ19raWxsID0gUE9MTF9JTjsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpbnRlbF9wbXVfZGlzYWJsZV9ldmVudChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQoreworCWlmICh1bmxpa2VseShpZHggPT0gWDg2X1BNQ19JRFhfRklYRURfQlRTKSkgeworCQlpbnRlbF9wbXVfZGlzYWJsZV9idHMoKTsKKwkJaW50ZWxfcG11X2RyYWluX2J0c19idWZmZXIoKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1bmxpa2VseShod2MtPmNvbmZpZ19iYXNlID09IE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSX0NUUkwpKSB7CisJCWludGVsX3BtdV9kaXNhYmxlX2ZpeGVkKGh3YywgaWR4KTsKKwkJcmV0dXJuOworCX0KKworCXg4Nl9wbXVfZGlzYWJsZV9ldmVudChod2MsIGlkeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraW50ZWxfcG11X2VuYWJsZV9maXhlZChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgX19pZHgpCit7CisJaW50IGlkeCA9IF9faWR4IC0gWDg2X1BNQ19JRFhfRklYRUQ7CisJdTY0IGN0cmxfdmFsLCBiaXRzLCBtYXNrOworCWludCBlcnI7CisKKwkvKgorCSAqIEVuYWJsZSBJUlEgZ2VuZXJhdGlvbiAoMHg4KSwKKwkgKiBhbmQgZW5hYmxlIHJpbmctMyBjb3VudGluZyAoMHgyKSBhbmQgcmluZy0wIGNvdW50aW5nICgweDEpCisJICogaWYgcmVxdWVzdGVkOgorCSAqLworCWJpdHMgPSAweDhVTEw7CisJaWYgKGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX1VTUikKKwkJYml0cyB8PSAweDI7CisJaWYgKGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX09TKQorCQliaXRzIHw9IDB4MTsKKworCS8qCisJICogQU5ZIGJpdCBpcyBzdXBwb3J0ZWQgaW4gdjMgYW5kIHVwCisJICovCisJaWYgKHg4Nl9wbXUudmVyc2lvbiA+IDIgJiYgaHdjLT5jb25maWcgJiBBUkNIX1BFUkZNT05fRVZFTlRTRUxfQU5ZKQorCQliaXRzIHw9IDB4NDsKKworCWJpdHMgPDw9IChpZHggKiA0KTsKKwltYXNrID0gMHhmVUxMIDw8IChpZHggKiA0KTsKKworCXJkbXNybChod2MtPmNvbmZpZ19iYXNlLCBjdHJsX3ZhbCk7CisJY3RybF92YWwgJj0gfm1hc2s7CisJY3RybF92YWwgfD0gYml0czsKKwllcnIgPSBjaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSwgY3RybF92YWwpOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCit7CisJaWYgKHVubGlrZWx5KGlkeCA9PSBYODZfUE1DX0lEWF9GSVhFRF9CVFMpKSB7CisJCWlmICghX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKS5lbmFibGVkKQorCQkJcmV0dXJuOworCisJCWludGVsX3BtdV9lbmFibGVfYnRzKGh3Yy0+Y29uZmlnKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1bmxpa2VseShod2MtPmNvbmZpZ19iYXNlID09IE1TUl9BUkNIX1BFUkZNT05fRklYRURfQ1RSX0NUUkwpKSB7CisJCWludGVsX3BtdV9lbmFibGVfZml4ZWQoaHdjLCBpZHgpOworCQlyZXR1cm47CisJfQorCisJX194ODZfcG11X2VuYWJsZV9ldmVudChod2MsIGlkeCk7Cit9CisKKy8qCisgKiBTYXZlIGFuZCByZXN0YXJ0IGFuIGV4cGlyZWQgZXZlbnQuIENhbGxlZCBieSBOTUkgY29udGV4dHMsCisgKiBzbyBpdCBoYXMgdG8gYmUgY2FyZWZ1bCBhYm91dCBwcmVlbXB0aW5nIG5vcm1hbCBldmVudCBvcHM6CisgKi8KK3N0YXRpYyBpbnQgaW50ZWxfcG11X3NhdmVfYW5kX3Jlc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCWludCBpZHggPSBod2MtPmlkeDsKKwlpbnQgcmV0OworCisJeDg2X3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCk7CisJcmV0ID0geDg2X3BlcmZfZXZlbnRfc2V0X3BlcmlvZChldmVudCwgaHdjLCBpZHgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfcG11X3Jlc2V0KHZvaWQpCit7CisJc3RydWN0IGRlYnVnX3N0b3JlICpkcyA9IF9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cykuZHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaWR4OworCisJaWYgKCF4ODZfcG11Lm51bV9ldmVudHMpCisJCXJldHVybjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXByaW50aygiY2xlYXJpbmcgUE1VIHN0YXRlIG9uIENQVSMlZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgeDg2X3BtdS5udW1fZXZlbnRzOyBpZHgrKykgeworCQljaGVja2luZ193cm1zcmwoeDg2X3BtdS5ldmVudHNlbCArIGlkeCwgMHVsbCk7CisJCWNoZWNraW5nX3dybXNybCh4ODZfcG11LnBlcmZjdHIgICsgaWR4LCAwdWxsKTsKKwl9CisJZm9yIChpZHggPSAwOyBpZHggPCB4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQ7IGlkeCsrKSB7CisJCWNoZWNraW5nX3dybXNybChNU1JfQVJDSF9QRVJGTU9OX0ZJWEVEX0NUUjAgKyBpZHgsIDB1bGwpOworCX0KKwlpZiAoZHMpCisJCWRzLT5idHNfaW5kZXggPSBkcy0+YnRzX2J1ZmZlcl9iYXNlOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogVGhpcyBoYW5kbGVyIGlzIHRyaWdnZXJlZCBieSB0aGUgbG9jYWwgQVBJQywgc28gdGhlIEFQSUMgSVJRIGhhbmRsaW5nCisgKiBydWxlcyBhcHBseToKKyAqLworc3RhdGljIGludCBpbnRlbF9wbXVfaGFuZGxlX2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjOworCWludCBiaXQsIGxvb3BzOworCXU2NCBhY2ssIHN0YXR1czsKKworCWRhdGEuYWRkciA9IDA7CisJZGF0YS5yYXcgPSBOVUxMOworCisJY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCisJcGVyZl9kaXNhYmxlKCk7CisJaW50ZWxfcG11X2RyYWluX2J0c19idWZmZXIoKTsKKwlzdGF0dXMgPSBpbnRlbF9wbXVfZ2V0X3N0YXR1cygpOworCWlmICghc3RhdHVzKSB7CisJCXBlcmZfZW5hYmxlKCk7CisJCXJldHVybiAwOworCX0KKworCWxvb3BzID0gMDsKK2FnYWluOgorCWlmICgrK2xvb3BzID4gMTAwKSB7CisJCVdBUk5fT05DRSgxLCAicGVyZmV2ZW50czogaXJxIGxvb3Agc3R1Y2shXG4iKTsKKwkJcGVyZl9ldmVudF9wcmludF9kZWJ1ZygpOworCQlpbnRlbF9wbXVfcmVzZXQoKTsKKwkJcGVyZl9lbmFibGUoKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaW5jX2lycV9zdGF0KGFwaWNfcGVyZl9pcnFzKTsKKwlhY2sgPSBzdGF0dXM7CisJZm9yX2VhY2hfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikmc3RhdHVzLCBYODZfUE1DX0lEWF9NQVgpIHsKKwkJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gY3B1Yy0+ZXZlbnRzW2JpdF07CisKKwkJY2xlYXJfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikgJnN0YXR1cyk7CisJCWlmICghdGVzdF9iaXQoYml0LCBjcHVjLT5hY3RpdmVfbWFzaykpCisJCQljb250aW51ZTsKKworCQlpZiAoIWludGVsX3BtdV9zYXZlX2FuZF9yZXN0YXJ0KGV2ZW50KSkKKwkJCWNvbnRpbnVlOworCisJCWRhdGEucGVyaW9kID0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOworCisJCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAxLCAmZGF0YSwgcmVncykpCisJCQlpbnRlbF9wbXVfZGlzYWJsZV9ldmVudCgmZXZlbnQtPmh3LCBiaXQpOworCX0KKworCWludGVsX3BtdV9hY2tfc3RhdHVzKGFjayk7CisKKwkvKgorCSAqIFJlcGVhdCBpZiB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gYmUgZG9uZToKKwkgKi8KKwlzdGF0dXMgPSBpbnRlbF9wbXVfZ2V0X3N0YXR1cygpOworCWlmIChzdGF0dXMpCisJCWdvdG8gYWdhaW47CisKKwlwZXJmX2VuYWJsZSgpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBidHNfY29uc3RyYWludCA9CisJRVZFTlRfQ09OU1RSQUlOVCgwLCAxVUxMIDw8IFg4Nl9QTUNfSURYX0ZJWEVEX0JUUywgMCk7CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqCitpbnRlbF9zcGVjaWFsX2NvbnN0cmFpbnRzKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwl1bnNpZ25lZCBpbnQgaHdfZXZlbnQ7CisKKwlod19ldmVudCA9IGV2ZW50LT5ody5jb25maWcgJiBJTlRFTF9BUkNIX0VWRU5UX01BU0s7CisKKwlpZiAodW5saWtlbHkoKGh3X2V2ZW50ID09CisJCSAgICAgIHg4Nl9wbXUuZXZlbnRfbWFwKFBFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OUykpICYmCisJCSAgICAgKGV2ZW50LT5ody5zYW1wbGVfcGVyaW9kID09IDEpKSkgeworCisJCXJldHVybiAmYnRzX2NvbnN0cmFpbnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKgoraW50ZWxfZ2V0X2V2ZW50X2NvbnN0cmFpbnRzKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgKmM7CisKKwljID0gaW50ZWxfc3BlY2lhbF9jb25zdHJhaW50cyhldmVudCk7CisJaWYgKGMpCisJCXJldHVybiBjOworCisJcmV0dXJuIHg4Nl9nZXRfZXZlbnRfY29uc3RyYWludHMoY3B1YywgZXZlbnQpOworfQorCitzdGF0aWMgX19pbml0Y29uc3Qgc3RydWN0IHg4Nl9wbXUgY29yZV9wbXUgPSB7CisJLm5hbWUJCQk9ICJjb3JlIiwKKwkuaGFuZGxlX2lycQkJPSB4ODZfcG11X2hhbmRsZV9pcnEsCisJLmRpc2FibGVfYWxsCQk9IHg4Nl9wbXVfZGlzYWJsZV9hbGwsCisJLmVuYWJsZV9hbGwJCT0geDg2X3BtdV9lbmFibGVfYWxsLAorCS5lbmFibGUJCQk9IHg4Nl9wbXVfZW5hYmxlX2V2ZW50LAorCS5kaXNhYmxlCQk9IHg4Nl9wbXVfZGlzYWJsZV9ldmVudCwKKwkuZXZlbnRzZWwJCT0gTVNSX0FSQ0hfUEVSRk1PTl9FVkVOVFNFTDAsCisJLnBlcmZjdHIJCT0gTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCwKKwkuZXZlbnRfbWFwCQk9IGludGVsX3BtdV9ldmVudF9tYXAsCisJLnJhd19ldmVudAkJPSBpbnRlbF9wbXVfcmF3X2V2ZW50LAorCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUoaW50ZWxfcGVyZm1vbl9ldmVudF9tYXApLAorCS5hcGljCQkJPSAxLAorCS8qCisJICogSW50ZWwgUE1DcyBjYW5ub3QgYmUgYWNjZXNzZWQgc2FuZWx5IGFib3ZlIDMyIGJpdCB3aWR0aCwKKwkgKiBzbyB3ZSBpbnN0YWxsIGFuIGFydGlmaWNpYWwgMTw8MzEgcGVyaW9kIHJlZ2FyZGxlc3Mgb2YKKwkgKiB0aGUgZ2VuZXJpYyBldmVudCBwZXJpb2Q6CisJICovCisJLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgMzEpIC0gMSwKKwkuZ2V0X2V2ZW50X2NvbnN0cmFpbnRzCT0gaW50ZWxfZ2V0X2V2ZW50X2NvbnN0cmFpbnRzLAorCS5ldmVudF9jb25zdHJhaW50cwk9IGludGVsX2NvcmVfZXZlbnRfY29uc3RyYWludHMsCit9OworCitzdGF0aWMgX19pbml0Y29uc3Qgc3RydWN0IHg4Nl9wbXUgaW50ZWxfcG11ID0geworCS5uYW1lCQkJPSAiSW50ZWwiLAorCS5oYW5kbGVfaXJxCQk9IGludGVsX3BtdV9oYW5kbGVfaXJxLAorCS5kaXNhYmxlX2FsbAkJPSBpbnRlbF9wbXVfZGlzYWJsZV9hbGwsCisJLmVuYWJsZV9hbGwJCT0gaW50ZWxfcG11X2VuYWJsZV9hbGwsCisJLmVuYWJsZQkJCT0gaW50ZWxfcG11X2VuYWJsZV9ldmVudCwKKwkuZGlzYWJsZQkJPSBpbnRlbF9wbXVfZGlzYWJsZV9ldmVudCwKKwkuZXZlbnRzZWwJCT0gTVNSX0FSQ0hfUEVSRk1PTl9FVkVOVFNFTDAsCisJLnBlcmZjdHIJCT0gTVNSX0FSQ0hfUEVSRk1PTl9QRVJGQ1RSMCwKKwkuZXZlbnRfbWFwCQk9IGludGVsX3BtdV9ldmVudF9tYXAsCisJLnJhd19ldmVudAkJPSBpbnRlbF9wbXVfcmF3X2V2ZW50LAorCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUoaW50ZWxfcGVyZm1vbl9ldmVudF9tYXApLAorCS5hcGljCQkJPSAxLAorCS8qCisJICogSW50ZWwgUE1DcyBjYW5ub3QgYmUgYWNjZXNzZWQgc2FuZWx5IGFib3ZlIDMyIGJpdCB3aWR0aCwKKwkgKiBzbyB3ZSBpbnN0YWxsIGFuIGFydGlmaWNpYWwgMTw8MzEgcGVyaW9kIHJlZ2FyZGxlc3Mgb2YKKwkgKiB0aGUgZ2VuZXJpYyBldmVudCBwZXJpb2Q6CisJICovCisJLm1heF9wZXJpb2QJCT0gKDFVTEwgPDwgMzEpIC0gMSwKKwkuZW5hYmxlX2J0cwkJPSBpbnRlbF9wbXVfZW5hYmxlX2J0cywKKwkuZGlzYWJsZV9idHMJCT0gaW50ZWxfcG11X2Rpc2FibGVfYnRzLAorCS5nZXRfZXZlbnRfY29uc3RyYWludHMJPSBpbnRlbF9nZXRfZXZlbnRfY29uc3RyYWludHMKK307CisKK3N0YXRpYyBfX2luaXQgaW50IGludGVsX3BtdV9pbml0KHZvaWQpCit7CisJdW5pb24gY3B1aWQxMF9lZHggZWR4OworCXVuaW9uIGNwdWlkMTBfZWF4IGVheDsKKwl1bnNpZ25lZCBpbnQgdW51c2VkOworCXVuc2lnbmVkIGludCBlYng7CisJaW50IHZlcnNpb247CisKKwlpZiAoIWNwdV9oYXMoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FSQ0hfUEVSRk1PTikpIHsKKwkJLyogY2hlY2sgZm9yIFA2IHByb2Nlc3NvciBmYW1pbHkgKi8KKwkgICBpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gNikgeworCQlyZXR1cm4gcDZfcG11X2luaXQoKTsKKwkgICB9IGVsc2UgeworCQlyZXR1cm4gLUVOT0RFVjsKKwkgICB9CisJfQorCisJLyoKKwkgKiBDaGVjayB3aGV0aGVyIHRoZSBBcmNoaXRlY3R1cmFsIFBlcmZNb24gc3VwcG9ydHMKKwkgKiBCcmFuY2ggTWlzc2VzIFJldGlyZWQgaHdfZXZlbnQgb3Igbm90LgorCSAqLworCWNwdWlkKDEwLCAmZWF4LmZ1bGwsICZlYngsICZ1bnVzZWQsICZlZHguZnVsbCk7CisJaWYgKGVheC5zcGxpdC5tYXNrX2xlbmd0aCA8PSBBUkNIX1BFUkZNT05fQlJBTkNIX01JU1NFU19SRVRJUkVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXZlcnNpb24gPSBlYXguc3BsaXQudmVyc2lvbl9pZDsKKwlpZiAodmVyc2lvbiA8IDIpCisJCXg4Nl9wbXUgPSBjb3JlX3BtdTsKKwllbHNlCisJCXg4Nl9wbXUgPSBpbnRlbF9wbXU7CisKKwl4ODZfcG11LnZlcnNpb24JCQk9IHZlcnNpb247CisJeDg2X3BtdS5udW1fZXZlbnRzCQk9IGVheC5zcGxpdC5udW1fZXZlbnRzOworCXg4Nl9wbXUuZXZlbnRfYml0cwkJPSBlYXguc3BsaXQuYml0X3dpZHRoOworCXg4Nl9wbXUuZXZlbnRfbWFzawkJPSAoMVVMTCA8PCBlYXguc3BsaXQuYml0X3dpZHRoKSAtIDE7CisKKwkvKgorCSAqIFF1aXJrOiB2MiBwZXJmbW9uIGRvZXMgbm90IHJlcG9ydCBmaXhlZC1wdXJwb3NlIGV2ZW50cywgc28KKwkgKiBhc3N1bWUgYXQgbGVhc3QgMyBldmVudHM6CisJICovCisJaWYgKHZlcnNpb24gPiAxKQorCQl4ODZfcG11Lm51bV9ldmVudHNfZml4ZWQgPSBtYXgoKGludCllZHguc3BsaXQubnVtX2V2ZW50c19maXhlZCwgMyk7CisKKwkvKgorCSAqIEluc3RhbGwgdGhlIGh3LWNhY2hlLWV2ZW50cyB0YWJsZToKKwkgKi8KKwlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsKSB7CisJY2FzZSAxNDogLyogNjUgbm0gY29yZSBzb2xvL2R1bywgIllvbmFoIiAqLworCQlwcl9jb250KCJDb3JlIGV2ZW50cywgIik7CisJCWJyZWFrOworCisJY2FzZSAxNTogLyogb3JpZ2luYWwgNjUgbm0gY2VsZXJvbi9wZW50aXVtL2NvcmUyL3hlb24sICJNZXJvbSIvIkNvbnJvZSIgKi8KKwljYXNlIDIyOiAvKiBzaW5nbGUtY29yZSA2NSBubSBjZWxlcm9uL2NvcmUyc29sbyAiTWVyb20tTCIvIkNvbnJvZS1MIiAqLworCWNhc2UgMjM6IC8qIGN1cnJlbnQgNDUgbm0gY2VsZXJvbi9jb3JlMi94ZW9uICJQZW5yeW4iLyJXb2xmZGFsZSIgKi8KKwljYXNlIDI5OiAvKiBzaXgtY29yZSA0NSBubSB4ZW9uICJEdW5uaW5ndG9uIiAqLworCQltZW1jcHkoaHdfY2FjaGVfZXZlbnRfaWRzLCBjb3JlMl9od19jYWNoZV9ldmVudF9pZHMsCisJCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7CisKKwkJeDg2X3BtdS5ldmVudF9jb25zdHJhaW50cyA9IGludGVsX2NvcmUyX2V2ZW50X2NvbnN0cmFpbnRzOworCQlwcl9jb250KCJDb3JlMiBldmVudHMsICIpOworCQlicmVhazsKKworCWNhc2UgMjY6IC8qIDQ1IG5tIG5laGFsZW0sICJCbG9vbWZpZWxkIiAqLworCWNhc2UgMzA6IC8qIDQ1IG5tIG5laGFsZW0sICJMeW5uZmllbGQiICovCisJCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIG5laGFsZW1faHdfY2FjaGVfZXZlbnRfaWRzLAorCQkgICAgICAgc2l6ZW9mKGh3X2NhY2hlX2V2ZW50X2lkcykpOworCisJCXg4Nl9wbXUuZXZlbnRfY29uc3RyYWludHMgPSBpbnRlbF9uZWhhbGVtX2V2ZW50X2NvbnN0cmFpbnRzOworCQlwcl9jb250KCJOZWhhbGVtL0NvcmVpNyBldmVudHMsICIpOworCQlicmVhazsKKwljYXNlIDI4OgorCQltZW1jcHkoaHdfY2FjaGVfZXZlbnRfaWRzLCBhdG9tX2h3X2NhY2hlX2V2ZW50X2lkcywKKwkJICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKKworCQl4ODZfcG11LmV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfZ2VuX2V2ZW50X2NvbnN0cmFpbnRzOworCQlwcl9jb250KCJBdG9tIGV2ZW50cywgIik7CisJCWJyZWFrOworCisJY2FzZSAzNzogLyogMzIgbm0gbmVoYWxlbSwgIkNsYXJrZGFsZSIgKi8KKwljYXNlIDQ0OiAvKiAzMiBubSBuZWhhbGVtLCAiR3VsZnRvd24iICovCisJCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIHdlc3RtZXJlX2h3X2NhY2hlX2V2ZW50X2lkcywKKwkJICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKKworCQl4ODZfcG11LmV2ZW50X2NvbnN0cmFpbnRzID0gaW50ZWxfd2VzdG1lcmVfZXZlbnRfY29uc3RyYWludHM7CisJCXByX2NvbnQoIldlc3RtZXJlIGV2ZW50cywgIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qCisJCSAqIGRlZmF1bHQgY29uc3RyYWludHMgZm9yIHYyIGFuZCB1cAorCQkgKi8KKwkJeDg2X3BtdS5ldmVudF9jb25zdHJhaW50cyA9IGludGVsX2dlbl9ldmVudF9jb25zdHJhaW50czsKKwkJcHJfY29udCgiZ2VuZXJpYyBhcmNoaXRlY3RlZCBwZXJmbW9uLCAiKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlIC8qIENPTkZJR19DUFVfU1VQX0lOVEVMICovCisKK3N0YXRpYyBpbnQgaW50ZWxfcG11X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIENPTkZJR19DUFVfU1VQX0lOVEVMICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDYuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYTViYTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDYuYwpAQCAtMCwwICsxLDE1NyBAQAorI2lmZGVmIENPTkZJR19DUFVfU1VQX0lOVEVMCisKKy8qCisgKiBOb3Qgc3VyZSBhYm91dCBzb21lIG9mIHRoZXNlCisgKi8KK3N0YXRpYyBjb25zdCB1NjQgcDZfcGVyZm1vbl9ldmVudF9tYXBbXSA9Cit7CisgIFtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCQk9IDB4MDA3OSwKKyAgW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkJPSAweDAwYzAsCisgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdCT0gMHgwZjJlLAorICBbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCQk9IDB4MDEyZSwKKyAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10JPSAweDAwYzQsCisgIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCQk9IDB4MDBjNSwKKyAgW1BFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFU10JCT0gMHgwMDYyLAorfTsKKworc3RhdGljIHU2NCBwNl9wbXVfZXZlbnRfbWFwKGludCBod19ldmVudCkKK3sKKwlyZXR1cm4gcDZfcGVyZm1vbl9ldmVudF9tYXBbaHdfZXZlbnRdOworfQorCisvKgorICogRXZlbnQgc2V0dGluZyB0aGF0IGlzIHNwZWNpZmllZCBub3QgdG8gY291bnQgYW55dGhpbmcuCisgKiBXZSB1c2UgdGhpcyB0byBlZmZlY3RpdmVseSBkaXNhYmxlIGEgY291bnRlci4KKyAqCisgKiBMMl9SUVNUUyB3aXRoIDAgTUVTSSB1bml0IG1hc2suCisgKi8KKyNkZWZpbmUgUDZfTk9QX0VWRU5UCQkJMHgwMDAwMDAyRVVMTAorCitzdGF0aWMgdTY0IHA2X3BtdV9yYXdfZXZlbnQodTY0IGh3X2V2ZW50KQoreworI2RlZmluZSBQNl9FVk5UU0VMX0VWRU5UX01BU0sJCTB4MDAwMDAwRkZVTEwKKyNkZWZpbmUgUDZfRVZOVFNFTF9VTklUX01BU0sJCTB4MDAwMEZGMDBVTEwKKyNkZWZpbmUgUDZfRVZOVFNFTF9FREdFX01BU0sJCTB4MDAwNDAwMDBVTEwKKyNkZWZpbmUgUDZfRVZOVFNFTF9JTlZfTUFTSwkJMHgwMDgwMDAwMFVMTAorI2RlZmluZSBQNl9FVk5UU0VMX1JFR19NQVNLCQkweEZGMDAwMDAwVUxMCisKKyNkZWZpbmUgUDZfRVZOVFNFTF9NQVNLCQkJXAorCShQNl9FVk5UU0VMX0VWRU5UX01BU0sgfAlcCisJIFA2X0VWTlRTRUxfVU5JVF9NQVNLICB8CVwKKwkgUDZfRVZOVFNFTF9FREdFX01BU0sgIHwJXAorCSBQNl9FVk5UU0VMX0lOVl9NQVNLICAgfAlcCisJIFA2X0VWTlRTRUxfUkVHX01BU0spCisKKwlyZXR1cm4gaHdfZXZlbnQgJiBQNl9FVk5UU0VMX01BU0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBwNl9ldmVudF9jb25zdHJhaW50c1tdID0KK3sKKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YzEsIDB4MSksCS8qIEZMT1BTICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEwLCAweDEpLAkvKiBGUF9DT01QX09QU19FWEUgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTEsIDB4MSksCS8qIEZQX0FTU0lTVCAqLworCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxMiwgMHgyKSwJLyogTVVMICovCisJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDEzLCAweDIpLAkvKiBESVYgKi8KKwlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTQsIDB4MSksCS8qIENZQ0xFU19ESVZfQlVTWSAqLworCUVWRU5UX0NPTlNUUkFJTlRfRU5ECit9OworCitzdGF0aWMgdm9pZCBwNl9wbXVfZGlzYWJsZV9hbGwodm9pZCkKK3sKKwl1NjQgdmFsOworCisJLyogcDYgb25seSBoYXMgb25lIGVuYWJsZSByZWdpc3RlciAqLworCXJkbXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7CisJdmFsICY9IH5BUkNIX1BFUkZNT05fRVZFTlRTRUwwX0VOQUJMRTsKKwl3cm1zcmwoTVNSX1A2X0VWTlRTRUwwLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBwNl9wbXVfZW5hYmxlX2FsbCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJLyogcDYgb25seSBoYXMgb25lIGVuYWJsZSByZWdpc3RlciAqLworCXJkbXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7CisJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOworCXdybXNybChNU1JfUDZfRVZOVFNFTDAsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcDZfcG11X2Rpc2FibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXU2NCB2YWwgPSBQNl9OT1BfRVZFTlQ7CisKKwlpZiAoY3B1Yy0+ZW5hYmxlZCkKKwkJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOworCisJKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBpZHgsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHA2X3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXU2NCB2YWw7CisKKwl2YWwgPSBod2MtPmNvbmZpZzsKKwlpZiAoY3B1Yy0+ZW5hYmxlZCkKKwkJdmFsIHw9IEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFOworCisJKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGh3Yy0+Y29uZmlnX2Jhc2UgKyBpZHgsIHZhbCk7Cit9CisKK3N0YXRpYyBfX2luaXRjb25zdCBzdHJ1Y3QgeDg2X3BtdSBwNl9wbXUgPSB7CisJLm5hbWUJCQk9ICJwNiIsCisJLmhhbmRsZV9pcnEJCT0geDg2X3BtdV9oYW5kbGVfaXJxLAorCS5kaXNhYmxlX2FsbAkJPSBwNl9wbXVfZGlzYWJsZV9hbGwsCisJLmVuYWJsZV9hbGwJCT0gcDZfcG11X2VuYWJsZV9hbGwsCisJLmVuYWJsZQkJCT0gcDZfcG11X2VuYWJsZV9ldmVudCwKKwkuZGlzYWJsZQkJPSBwNl9wbXVfZGlzYWJsZV9ldmVudCwKKwkuZXZlbnRzZWwJCT0gTVNSX1A2X0VWTlRTRUwwLAorCS5wZXJmY3RyCQk9IE1TUl9QNl9QRVJGQ1RSMCwKKwkuZXZlbnRfbWFwCQk9IHA2X3BtdV9ldmVudF9tYXAsCisJLnJhd19ldmVudAkJPSBwNl9wbXVfcmF3X2V2ZW50LAorCS5tYXhfZXZlbnRzCQk9IEFSUkFZX1NJWkUocDZfcGVyZm1vbl9ldmVudF9tYXApLAorCS5hcGljCQkJPSAxLAorCS5tYXhfcGVyaW9kCQk9ICgxVUxMIDw8IDMxKSAtIDEsCisJLnZlcnNpb24JCT0gMCwKKwkubnVtX2V2ZW50cwkJPSAyLAorCS8qCisJICogRXZlbnRzIGhhdmUgNDAgYml0cyBpbXBsZW1lbnRlZC4gSG93ZXZlciB0aGV5IGFyZSBkZXNpZ25lZCBzdWNoCisJICogdGhhdCBiaXRzIFszMi0zOV0gYXJlIHNpZ24gZXh0ZW5zaW9ucyBvZiBiaXQgMzEuIEFzIHN1Y2ggdGhlCisJICogZWZmZWN0aXZlIHdpZHRoIG9mIGEgZXZlbnQgZm9yIFA2LWxpa2UgUE1VIGlzIDMyIGJpdHMgb25seS4KKwkgKgorCSAqIFNlZSBJQS0zMiBJbnRlbCBBcmNoaXRlY3R1cmUgU29mdHdhcmUgZGV2ZWxvcGVyIG1hbnVhbCBWb2wgM0IKKwkgKi8KKwkuZXZlbnRfYml0cwkJPSAzMiwKKwkuZXZlbnRfbWFzawkJPSAoMVVMTCA8PCAzMikgLSAxLAorCS5nZXRfZXZlbnRfY29uc3RyYWludHMJPSB4ODZfZ2V0X2V2ZW50X2NvbnN0cmFpbnRzLAorCS5ldmVudF9jb25zdHJhaW50cwk9IHA2X2V2ZW50X2NvbnN0cmFpbnRzLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgcDZfcG11X2luaXQodm9pZCkKK3sKKwlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsKSB7CisJY2FzZSAxOgorCWNhc2UgMzogIC8qIFBlbnRpdW0gUHJvICovCisJY2FzZSA1OgorCWNhc2UgNjogIC8qIFBlbnRpdW0gSUkgKi8KKwljYXNlIDc6CisJY2FzZSA4OgorCWNhc2UgMTE6IC8qIFBlbnRpdW0gSUlJICovCisJY2FzZSA5OgorCWNhc2UgMTM6CisJCS8qIFBlbnRpdW0gTSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9jb250KCJ1bnN1cHBvcnRlZCBwNiBDUFUgbW9kZWwgJWQgIiwKKwkJCWJvb3RfY3B1X2RhdGEueDg2X21vZGVsKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJeDg2X3BtdSA9IHA2X3BtdTsKKworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX0NQVV9TVVBfSU5URUwgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKaW5kZXggODk4ZGY5Ny4uNzRmNGU4NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKQEAgLTExNSwxNyArMTE1LDYgQEAKIAogCXJldHVybiAhdGVzdF9iaXQoY291bnRlciwgcGVyZmN0cl9ubWlfb3duZXIpOwogfQotCi0vKiBjaGVja3MgdGhlIGFuIG1zciBmb3IgYXZhaWxhYmlsaXR5ICovCi1pbnQgYXZhaWxfdG9fcmVzcnZfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50IG1zcikKLXsKLQl1bnNpZ25lZCBpbnQgY291bnRlcjsKLQotCWNvdW50ZXIgPSBubWlfcGVyZmN0cl9tc3JfdG9fYml0KG1zcik7Ci0JQlVHX09OKGNvdW50ZXIgPiBOTUlfTUFYX0NPVU5URVJfQklUUyk7Ci0KLQlyZXR1cm4gIXRlc3RfYml0KGNvdW50ZXIsIHBlcmZjdHJfbm1pX293bmVyKTsKLX0KIEVYUE9SVF9TWU1CT0woYXZhaWxfdG9fcmVzcnZfcGVyZmN0cl9ubWlfYml0KTsKIAogaW50IHJlc2VydmVfcGVyZmN0cl9ubWkodW5zaWduZWQgaW50IG1zcikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYwppbmRleCBhZTc3NWNhLi4xMTU0MGExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jCkBAIC0xOCwxMSArMTgsNiBAQAogCiAjaW5jbHVkZSAiZHVtcHN0YWNrLmgiCiAKLS8qIEp1c3QgYSBzdHViIGZvciBub3cgKi8KLWludCB4ODZfaXNfc3RhY2tfaWQoaW50IGlkLCBjaGFyICpuYW1lKQotewotCXJldHVybiAwOwotfQogCiB2b2lkIGR1bXBfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKaW5kZXggMGFkOTU5Ny4uZGNlOTlhYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwpAQCAtMzMsMTEgKzMzLDYgQEAKICNlbmRpZgogfTsKIAotaW50IHg4Nl9pc19zdGFja19pZChpbnQgaWQsIGNoYXIgKm5hbWUpCi17Ci0JcmV0dXJuIHg4Nl9zdGFja19pZHNbaWQgLSAxXSA9PSBuYW1lOwotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyAqaW5fZXhjZXB0aW9uX3N0YWNrKHVuc2lnbmVkIGNwdSwgdW5zaWduZWQgbG9uZyBzdGFjaywKIAkJCQkJIHVuc2lnbmVkICp1c2VkcCwgY2hhciAqKmlkcCkKIHsKQEAgLTI5MSw2ICsyODYsNyBAQAogCiAJc3AgPSByZWdzLT5zcDsKIAlwcmludGsoIkNQVSAlZCAiLCBjcHUpOworCXByaW50X21vZHVsZXMoKTsKIAlfX3Nob3dfcmVncyhyZWdzLCAxKTsKIAlwcmludGsoIlByb2Nlc3MgJXMgKHBpZDogJWQsIHRocmVhZGluZm8gJXAsIHRhc2sgJXApXG4iLAogCQljdXItPmNvbW0sIGN1ci0+cGlkLCB0YXNrX3RocmVhZF9pbmZvKGN1ciksIGN1cik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwppbmRleCBhMWE3ODc2Li5hOTY2Yjc1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKQEAgLTUxNywxMSArNTE3LDE5IEBACiAJCQkgICAgIGludCBjaGVja3R5cGUpCiB7CiAJaW50IGk7CisJdTY0IGVuZDsKIAl1NjQgcmVhbF9yZW1vdmVkX3NpemUgPSAwOwogCiAJaWYgKHNpemUgPiAoVUxMT05HX01BWCAtIHN0YXJ0KSkKIAkJc2l6ZSA9IFVMTE9OR19NQVggLSBzdGFydDsKIAorCWVuZCA9IHN0YXJ0ICsgc2l6ZTsKKwlwcmludGsoS0VSTl9ERUJVRyAiZTgyMCByZW1vdmUgcmFuZ2U6ICUwMTZMeCAtICUwMTZMeCAiLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhcnQsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBlbmQpOworCWU4MjBfcHJpbnRfdHlwZShvbGRfdHlwZSk7CisJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwogCWZvciAoaSA9IDA7IGkgPCBlODIwLm5yX21hcDsgaSsrKSB7CiAJCXN0cnVjdCBlODIwZW50cnkgKmVpID0gJmU4MjAubWFwW2ldOwogCQl1NjQgZmluYWxfc3RhcnQsIGZpbmFsX2VuZDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lZmkuYyBiL2FyY2gveDg2L2tlcm5lbC9lZmkuYwppbmRleCBjZGNmYjEyLi5jMmZhOWI4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2VmaS5jCkBAIC0zNjIsNyArMzYyLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ291bGQgbm90IG1hcCB0aGUgZmlybXdhcmUgdmVuZG9yIVxuIik7CiAJZWFybHlfaW91bm1hcCh0bXAsIDIpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiRUZJIHYldS4lLjAydSBieSAlcyBcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiRUZJIHYldS4lLjAydSBieSAlc1xuIiwKIAkgICAgICAgZWZpLnN5c3RhYi0+aGRyLnJldmlzaW9uID4+IDE2LAogCSAgICAgICBlZmkuc3lzdGFiLT5oZHIucmV2aXNpb24gJiAweGZmZmYsIHZlbmRvcik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYwppbmRleCAzMDk2ODkyLi5jZDM3NDY5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCkBAIC0zMCwxNCArMzAsMzIgQEAKIAogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogCisvKgorICogbW9kaWZ5aW5nX2NvZGUgaXMgc2V0IHRvIG5vdGlmeSBOTUlzIHRoYXQgdGhleSBuZWVkIHRvIHVzZQorICogbWVtb3J5IGJhcnJpZXJzIHdoZW4gZW50ZXJpbmcgb3IgZXhpdGluZy4gQnV0IHdlIGRvbid0IHdhbnQKKyAqIHRvIGJ1cmRlbiBOTUlzIHdpdGggdW5uZWNlc3NhcnkgbWVtb3J5IGJhcnJpZXJzIHdoZW4gY29kZQorICogbW9kaWZpY2F0aW9uIGlzIG5vdCBiZWluZyBkb25lICh3aGljaCBpcyBtb3N0IG9mIHRoZSB0aW1lKS4KKyAqCisgKiBBIG11dGV4IGlzIGFscmVhZHkgaGVsZCB3aGVuIGZ0cmFjZV9hcmNoX2NvZGVfbW9kaWZ5X3ByZXBhcmUKKyAqIGFuZCBwb3N0X3Byb2Nlc3MgYXJlIGNhbGxlZC4gTm8gbG9ja3MgbmVlZCB0byBiZSB0YWtlbiBoZXJlLgorICoKKyAqIFN0b3AgbWFjaGluZSB3aWxsIG1ha2Ugc3VyZSBjdXJyZW50bHkgcnVubmluZyBOTUlzIGFyZSBkb25lCisgKiBhbmQgbmV3IE5NSXMgd2lsbCBzZWUgdGhlIHVwZGF0ZWQgdmFyaWFibGUgYmVmb3JlIHdlIG5lZWQKKyAqIHRvIHdvcnJ5IGFib3V0IE5NSXMgZG9pbmcgbWVtb3J5IGJhcnJpZXJzLgorICovCitzdGF0aWMgaW50IG1vZGlmeWluZ19jb2RlIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBzYXZlX21vZGlmeWluZ19jb2RlKTsKKwogaW50IGZ0cmFjZV9hcmNoX2NvZGVfbW9kaWZ5X3ByZXBhcmUodm9pZCkKIHsKIAlzZXRfa2VybmVsX3RleHRfcncoKTsKKwltb2RpZnlpbmdfY29kZSA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV9wb3N0X3Byb2Nlc3Modm9pZCkKIHsKKwltb2RpZnlpbmdfY29kZSA9IDA7CiAJc2V0X2tlcm5lbF90ZXh0X3JvKCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNDksNiArMTY3LDExIEBACiAKIHZvaWQgZnRyYWNlX25taV9lbnRlcih2b2lkKQogeworCV9fZ2V0X2NwdV92YXIoc2F2ZV9tb2RpZnlpbmdfY29kZSkgPSBtb2RpZnlpbmdfY29kZTsKKworCWlmICghX19nZXRfY3B1X3ZhcihzYXZlX21vZGlmeWluZ19jb2RlKSkKKwkJcmV0dXJuOworCiAJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZubWlfcnVubmluZykgJiBNT0RfQ09ERV9XUklURV9GTEFHKSB7CiAJCXNtcF9ybWIoKTsKIAkJZnRyYWNlX21vZF9jb2RlKCk7CkBAIC0xNjAsNiArMTgzLDkgQEAKIAogdm9pZCBmdHJhY2Vfbm1pX2V4aXQodm9pZCkKIHsKKwlpZiAoIV9fZ2V0X2NwdV92YXIoc2F2ZV9tb2RpZnlpbmdfY29kZSkpCisJCXJldHVybjsKKwogCS8qIEZpbmlzaCBhbGwgZXhlY3V0aW9ucyBiZWZvcmUgY2xlYXJpbmcgbm1pX3J1bm5pbmcgKi8KIAlzbXBfbWIoKTsKIAlhdG9taWNfZGVjKCZubWlfcnVubmluZyk7CkBAIC00ODQsMTMgKzUxMCwzIEBACiAJfQogfQogI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi8KLQotI2lmZGVmIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKnN5c19jYWxsX3RhYmxlOwotCi11bnNpZ25lZCBsb25nIF9faW5pdCBhcmNoX3N5c2NhbGxfYWRkcihpbnQgbnIpCi17Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nKSgmc3lzX2NhbGxfdGFibGUpW25yXTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hwZXQuYyBiL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKaW5kZXggYWQ4MGExYy4uZWU0ZmExYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hwZXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCkBAIC0yNjYsNyArMjY2LDcgQEAKIAlmb3JjZV9ocGV0X3Jlc3VtZSgpOwogfQogCi1zdGF0aWMgdm9pZCBocGV0X3Jlc3VtZV9jb3VudGVyKHZvaWQpCitzdGF0aWMgdm9pZCBocGV0X3Jlc3VtZV9jb3VudGVyKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJaHBldF9yZXN1bWVfZGV2aWNlKCk7CiAJaHBldF9yZXN0YXJ0X2NvdW50ZXIoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9od19icmVha3BvaW50LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCmluZGV4IGJiNjAwNmUuLmRjYTI4MDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9od19icmVha3BvaW50LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2h3X2JyZWFrcG9pbnQuYwpAQCAtNDg2LDggKzQ4Niw2IEBACiAJCXJjdV9yZWFkX2xvY2soKTsKIAogCQlicCA9IHBlcl9jcHUoYnBfcGVyX3JlZ1tpXSwgY3B1KTsKLQkJaWYgKGJwKQotCQkJcmMgPSBOT1RJRllfRE9ORTsKIAkJLyoKIAkJICogUmVzZXQgdGhlICdpJ3RoIFRSQVAgYml0IGluIGRyNiB0byBkZW5vdGUgY29tcGxldGlvbiBvZgogCQkgKiBleGNlcHRpb24gaGFuZGxpbmcKQEAgLTUwNiw3ICs1MDQsMTMgQEAKIAogCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9Ci0JaWYgKGRyNiAmICh+RFJfVFJBUF9CSVRTKSkKKwkvKgorCSAqIEZ1cnRoZXIgcHJvY2Vzc2luZyBpbiBkb19kZWJ1ZygpIGlzIG5lZWRlZCBmb3IgYSkgdXNlci1zcGFjZQorCSAqIGJyZWFrcG9pbnRzICh0byBnZW5lcmF0ZSBzaWduYWxzKSBhbmQgYikgd2hlbiB0aGUgc3lzdGVtIGhhcworCSAqIHRha2VuIGV4Y2VwdGlvbiBkdWUgdG8gbXVsdGlwbGUgY2F1c2VzCisJICovCisJaWYgKChjdXJyZW50LT50aHJlYWQuZGVidWdyZWc2ICYgRFJfVFJBUF9CSVRTKSB8fAorCSAgICAoZHI2ICYgKH5EUl9UUkFQX0JJVFMpKSkKIAkJcmMgPSBOT1RJRllfRE9ORTsKIAogCXNldF9kZWJ1Z3JlZyhkcjcsIDcpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2kzODcuYyBiL2FyY2gveDg2L2tlcm5lbC9pMzg3LmMKaW5kZXggZjJmODU0MC4uYzAxYTJiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2kzODcuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaTM4Ny5jCkBAIC0xNjQsNiArMTY0LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBUaGUgeHN0YXRlcmVnc19hY3RpdmUoKSByb3V0aW5lIGlzIHRoZSBzYW1lIGFzIHRoZSBmcHJlZ3NfYWN0aXZlKCkgcm91dGluZSwKKyAqIGFzIHRoZSAicmVnc2V0LT5uIiBmb3IgdGhlIHhzdGF0ZSByZWdzZXQgd2lsbCBiZSB1cGRhdGVkIGJhc2VkIG9uIHRoZSBmZWF0dXJlCisgKiBjYXBhYmlsaXRlcyBzdXBwb3J0ZWQgYnkgdGhlIHhzYXZlLgorICovCiBpbnQgZnByZWdzX2FjdGl2ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQpCiB7CiAJcmV0dXJuIHRza191c2VkX21hdGgodGFyZ2V0KSA/IHJlZ3NldC0+biA6IDA7CkBAIC0yMDQsOCArMjA5LDYgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0Jc2V0X3N0b3BwZWRfY2hpbGRfdXNlZF9tYXRoKHRhcmdldCk7Ci0KIAlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCiAJCQkJICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPmZ4c2F2ZSwgMCwgLTEpOwogCkBAIC0yMjQsNiArMjI3LDY4IEBACiAJcmV0dXJuIHJldDsKIH0KIAoraW50IHhzdGF0ZXJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQl2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwlpbnQgcmV0OworCisJaWYgKCFjcHVfaGFzX3hzYXZlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IGluaXRfZnB1KHRhcmdldCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogQ29weSB0aGUgNDhieXRlcyBkZWZpbmVkIGJ5IHRoZSBzb2Z0d2FyZSBmaXJzdCBpbnRvIHRoZSB4c3RhdGUKKwkgKiBtZW1vcnkgbGF5b3V0IGluIHRoZSB0aHJlYWQgc3RydWN0LCBzbyB0aGF0IHdlIGNhbiBjb3B5IHRoZSBlbnRpcmUKKwkgKiB4c3RhdGVyZWdzIHRvIHRoZSB1c2VyIHVzaW5nIG9uZSB1c2VyX3JlZ3NldF9jb3B5b3V0KCkuCisJICovCisJbWVtY3B5KCZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPmZ4c2F2ZS5zd19yZXNlcnZlZCwKKwkgICAgICAgeHN0YXRlX2Z4X3N3X2J5dGVzLCBzaXplb2YoeHN0YXRlX2Z4X3N3X2J5dGVzKSk7CisKKwkvKgorCSAqIENvcHkgdGhlIHhzdGF0ZSBtZW1vcnkgbGF5b3V0LgorCSAqLworCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlvdXQoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJICAmdGFyZ2V0LT50aHJlYWQueHN0YXRlLT54c2F2ZSwgMCwgLTEpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB4c3RhdGVyZWdzX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCSAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkgIGNvbnN0IHZvaWQgKmtidWYsIGNvbnN0IHZvaWQgX191c2VyICp1YnVmKQoreworCWludCByZXQ7CisJc3RydWN0IHhzYXZlX2hkcl9zdHJ1Y3QgKnhzYXZlX2hkcjsKKworCWlmICghY3B1X2hhc194c2F2ZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBpbml0X2ZwdSh0YXJnZXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJICZ0YXJnZXQtPnRocmVhZC54c3RhdGUtPnhzYXZlLCAwLCAtMSk7CisKKwkvKgorCSAqIG14Y3NyIHJlc2VydmVkIGJpdHMgbXVzdCBiZSBtYXNrZWQgdG8gemVybyBmb3Igc2VjdXJpdHkgcmVhc29ucy4KKwkgKi8KKwl0YXJnZXQtPnRocmVhZC54c3RhdGUtPmZ4c2F2ZS5teGNzciAmPSBteGNzcl9mZWF0dXJlX21hc2s7CisKKwl4c2F2ZV9oZHIgPSAmdGFyZ2V0LT50aHJlYWQueHN0YXRlLT54c2F2ZS54c2F2ZV9oZHI7CisKKwl4c2F2ZV9oZHItPnhzdGF0ZV9idiAmPSBwY250eHRfbWFzazsKKwkvKgorCSAqIFRoZXNlIGJpdHMgbXVzdCBiZSB6ZXJvLgorCSAqLworCXhzYXZlX2hkci0+cmVzZXJ2ZWQxWzBdID0geHNhdmVfaGRyLT5yZXNlcnZlZDFbMV0gPSAwOworCisJcmV0dXJuIHJldDsKK30KKwogI2lmIGRlZmluZWQgQ09ORklHX1g4Nl8zMiB8fCBkZWZpbmVkIENPTkZJR19JQTMyX0VNVUxBVElPTgogCiAvKgpAQCAtNDA0LDggKzQ2OSw2IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXNldF9zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aCh0YXJnZXQpOwotCiAJaWYgKCFIQVZFX0hXRlApCiAJCXJldHVybiBmcHJlZ3Nfc29mdF9zZXQodGFyZ2V0LCByZWdzZXQsIHBvcywgY291bnQsIGtidWYsIHVidWYpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYwppbmRleCA1YjhjNzUwLi41ZGU5ZjRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTMzNyw2ICszMzcsOSBAQAogCiBpbnQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKIHsKKwlpZiAoYWx0ZXJuYXRpdmVzX3RleHRfcmVzZXJ2ZWQocC0+YWRkciwgcC0+YWRkcikpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKCFjYW5fcHJvYmUoKHVuc2lnbmVkIGxvbmcpcC0+YWRkcikpCiAJCXJldHVybiAtRUlMU0VROwogCS8qIGluc246IG11c3QgYmUgb24gc3BlY2lhbCBleGVjdXRhYmxlIHBhZ2Ugb24geDg2LiAqLwpAQCAtNDI5LDcgKzQzMiw3IEBACiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2V0dXBfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCQkgICAgICAgc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKLSNpZiAhZGVmaW5lZChDT05GSUdfUFJFRU1QVCkgfHwgZGVmaW5lZChDT05GSUdfRlJFRVpFUikKKyNpZiAhZGVmaW5lZChDT05GSUdfUFJFRU1QVCkKIAlpZiAocC0+YWluc24uYm9vc3RhYmxlID09IDEgJiYgIXAtPnBvc3RfaGFuZGxlcikgewogCQkvKiBCb29zdCB1cCAtLSB3ZSBjYW4gZXhlY3V0ZSBjb3BpZWQgaW5zdHJ1Y3Rpb25zIGRpcmVjdGx5ICovCiAJCXJlc2V0X2N1cnJlbnRfa3Byb2JlKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2ludGVsLmMKaW5kZXggZWJkMTkzZS4uODVhMzQzZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfaW50ZWwuYwpAQCAtMzI4LDcgKzMyOCw3IEBACiAJCSAgICAgICBjcHVfbnVtLCBtY19pbnRlbC0+aGRyLnJldik7CiAJCXJldHVybiAtMTsKIAl9Ci0JcHJfaW5mbygiQ1BVJWQgdXBkYXRlZCB0byByZXZpc2lvbiAweCV4LCBkYXRlID0gJTA0eC0lMDJ4LSUwMnggXG4iLAorCXByX2luZm8oIkNQVSVkIHVwZGF0ZWQgdG8gcmV2aXNpb24gMHgleCwgZGF0ZSA9ICUwNHgtJTAyeC0lMDJ4XG4iLAogCQljcHVfbnVtLCB2YWxbMV0sCiAJCW1jX2ludGVsLT5oZHIuZGF0ZSAmIDB4ZmZmZiwKIAkJbWNfaW50ZWwtPmhkci5kYXRlID4+IDI0LApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYzliMzUyMi4uMDJkNjc4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC05Miw2ICs5MiwxMyBAQAogCX0KIH0KIAordm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc2hvd19yZWdpc3RlcnMocmVncyk7CisJc2hvd190cmFjZShOVUxMLCByZWdzLCAodW5zaWduZWQgbG9uZyAqKWtlcm5lbF9zdGFja19wb2ludGVyKHJlZ3MpLAorCQkgICByZWdzLT5icCk7Cit9CisKIHZvaWQgc2hvd19yZWdzX2NvbW1vbih2b2lkKQogewogCWNvbnN0IGNoYXIgKmJvYXJkLCAqcHJvZHVjdDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCmluZGV4IDM3YWQxZTAuLmY2YzYyNjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYwpAQCAtMTc0LDEyICsxNzQsNiBAQAogCQkJZDYsIGQ3KTsKIH0KIAotdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc2hvd19yZWdpc3RlcnMocmVncyk7Ci0Jc2hvd190cmFjZShOVUxMLCByZWdzLCAmcmVncy0+c3AsIHJlZ3MtPmJwKTsKLX0KLQogdm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRlYWRfdGFzaykKIHsKIAlCVUdfT04oZGVhZF90YXNrLT5tbSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwppbmRleCAxMjZmMGI0Li5kYzk2OTBiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKQEAgLTIxMSwxMiArMjExLDYgQEAKIAlwcmludGsoS0VSTl9ERUZBVUxUICJEUjM6ICUwMTZseCBEUjY6ICUwMTZseCBEUjc6ICUwMTZseFxuIiwgZDMsIGQ2LCBkNyk7CiB9CiAKLXZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXNob3dfcmVnaXN0ZXJzKHJlZ3MpOwotCXNob3dfdHJhY2UoTlVMTCwgcmVncywgKHZvaWQgKikocmVncyArIDEpLCByZWdzLT5icCk7Ci19Ci0KIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpkZWFkX3Rhc2spCiB7CiAJaWYgKGRlYWRfdGFzay0+bW0pIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwppbmRleCAwYzEwMzNkLi4yZDk2YWFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCkBAIC00OCw2ICs0OCw3IEBACiAJUkVHU0VUX0ZQLAogCVJFR1NFVF9YRlAsCiAJUkVHU0VUX0lPUEVSTTY0ID0gUkVHU0VUX1hGUCwKKwlSRUdTRVRfWFNUQVRFLAogCVJFR1NFVF9UTFMsCiAJUkVHU0VUX0lPUEVSTTMyLAogfTsKQEAgLTE0MCwzMCArMTQxLDYgQEAKICNlbmRpZgogfTsKIAotLyoqCi0gKiByZWdzX2dldF9hcmd1bWVudF9udGgoKSAtIGdldCBOdGggYXJndW1lbnQgYXQgZnVuY3Rpb24gY2FsbAotICogQHJlZ3M6CXB0X3JlZ3Mgd2hpY2ggY29udGFpbnMgcmVnaXN0ZXJzIGF0IGZ1bmN0aW9uIGVudHJ5LgotICogQG46CQlhcmd1bWVudCBudW1iZXIuCi0gKgotICogcmVnc19nZXRfYXJndW1lbnRfbnRoKCkgcmV0dXJucyBAbiB0aCBhcmd1bWVudCBvZiBhIGZ1bmN0aW9uIGNhbGwuCi0gKiBTaW5jZSB1c3VhbGx5IHRoZSBrZXJuZWwgc3RhY2sgd2lsbCBiZSBjaGFuZ2VkIHJpZ2h0IGFmdGVyIGZ1bmN0aW9uIGVudHJ5LAotICogeW91IG11c3QgdXNlIHRoaXMgYXQgZnVuY3Rpb24gZW50cnkuIElmIHRoZSBAbiB0aCBlbnRyeSBpcyBOT1QgaW4gdGhlCi0gKiBrZXJuZWwgc3RhY2sgb3IgcHRfcmVncywgdGhpcyByZXR1cm5zIDAuCi0gKi8KLXVuc2lnbmVkIGxvbmcgcmVnc19nZXRfYXJndW1lbnRfbnRoKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgbikKLXsKLQlpZiAobiA8IEFSUkFZX1NJWkUoYXJnX29mZnNfdGFibGUpKQotCQlyZXR1cm4gKih1bnNpZ25lZCBsb25nICopKChjaGFyICopcmVncyArIGFyZ19vZmZzX3RhYmxlW25dKTsKLQllbHNlIHsKLQkJLyoKLQkJICogVGhlIHR5cGljYWwgY2FzZTogYXJnIG4gaXMgb24gdGhlIHN0YWNrLgotCQkgKiAoTm90ZTogc3RhY2tbMF0gPSByZXR1cm4gYWRkcmVzcywgc28gc2tpcCBpdCkKLQkJICovCi0JCW4gLT0gQVJSQVlfU0laRShhcmdfb2Zmc190YWJsZSk7Ci0JCXJldHVybiByZWdzX2dldF9rZXJuZWxfc3RhY2tfbnRoKHJlZ3MsIDEgKyBuKTsKLQl9Ci19Ci0KIC8qCiAgKiBkb2VzIG5vdCB5ZXQgY2F0Y2ggc2lnbmFscyBzZW50IHdoZW4gdGhlIGNoaWxkIGRpZXMuCiAgKiBpbiBleGl0LmMgb3IgaW4gc2lnbmFsLmMuCkBAIC0xNTg3LDcgKzE1NjQsNyBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0IHg4Nl82NF9yZWdzZXRzW10gPSB7CitzdGF0aWMgc3RydWN0IHVzZXJfcmVnc2V0IHg4Nl82NF9yZWdzZXRzW10gX19yZWFkX21vc3RseSA9IHsKIAlbUkVHU0VUX0dFTkVSQUxdID0gewogCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9QUlNUQVRVUywKIAkJLm4gPSBzaXplb2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QpIC8gc2l6ZW9mKGxvbmcpLApAQCAtMTYwMCw2ICsxNTc3LDEyIEBACiAJCS5zaXplID0gc2l6ZW9mKGxvbmcpLCAuYWxpZ24gPSBzaXplb2YobG9uZyksCiAJCS5hY3RpdmUgPSB4ZnByZWdzX2FjdGl2ZSwgLmdldCA9IHhmcHJlZ3NfZ2V0LCAuc2V0ID0geGZwcmVnc19zZXQKIAl9LAorCVtSRUdTRVRfWFNUQVRFXSA9IHsKKwkJLmNvcmVfbm90ZV90eXBlID0gTlRfWDg2X1hTVEFURSwKKwkJLnNpemUgPSBzaXplb2YodTY0KSwgLmFsaWduID0gc2l6ZW9mKHU2NCksCisJCS5hY3RpdmUgPSB4c3RhdGVyZWdzX2FjdGl2ZSwgLmdldCA9IHhzdGF0ZXJlZ3NfZ2V0LAorCQkuc2V0ID0geHN0YXRlcmVnc19zZXQKKwl9LAogCVtSRUdTRVRfSU9QRVJNNjRdID0gewogCQkuY29yZV9ub3RlX3R5cGUgPSBOVF8zODZfSU9QRVJNLAogCQkubiA9IElPX0JJVE1BUF9MT05HUywKQEAgLTE2MjUsNyArMTYwOCw3IEBACiAjZW5kaWYJLyogQ09ORklHX1g4Nl82NCAqLwogCiAjaWYgZGVmaW5lZCBDT05GSUdfWDg2XzMyIHx8IGRlZmluZWQgQ09ORklHX0lBMzJfRU1VTEFUSU9OCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0IHg4Nl8zMl9yZWdzZXRzW10gPSB7CitzdGF0aWMgc3RydWN0IHVzZXJfcmVnc2V0IHg4Nl8zMl9yZWdzZXRzW10gX19yZWFkX21vc3RseSA9IHsKIAlbUkVHU0VUX0dFTkVSQUxdID0gewogCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9QUlNUQVRVUywKIAkJLm4gPSBzaXplb2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QzMikgLyBzaXplb2YodTMyKSwKQEAgLTE2NDQsNiArMTYyNywxMiBAQAogCQkuc2l6ZSA9IHNpemVvZih1MzIpLCAuYWxpZ24gPSBzaXplb2YodTMyKSwKIAkJLmFjdGl2ZSA9IHhmcHJlZ3NfYWN0aXZlLCAuZ2V0ID0geGZwcmVnc19nZXQsIC5zZXQgPSB4ZnByZWdzX3NldAogCX0sCisJW1JFR1NFVF9YU1RBVEVdID0geworCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9YODZfWFNUQVRFLAorCQkuc2l6ZSA9IHNpemVvZih1NjQpLCAuYWxpZ24gPSBzaXplb2YodTY0KSwKKwkJLmFjdGl2ZSA9IHhzdGF0ZXJlZ3NfYWN0aXZlLCAuZ2V0ID0geHN0YXRlcmVnc19nZXQsCisJCS5zZXQgPSB4c3RhdGVyZWdzX3NldAorCX0sCiAJW1JFR1NFVF9UTFNdID0gewogCQkuY29yZV9ub3RlX3R5cGUgPSBOVF8zODZfVExTLAogCQkubiA9IEdEVF9FTlRSWV9UTFNfRU5UUklFUywgLmJpYXMgPSBHRFRfRU5UUllfVExTX01JTiwKQEAgLTE2NjYsNiArMTY1NSwyMyBAQAogfTsKICNlbmRpZgogCisvKgorICogVGhpcyByZXByZXNlbnRzIGJ5dGVzIDQ2NC4uNTExIGluIHRoZSBtZW1vcnkgbGF5b3V0IGV4cG9ydGVkIHRocm91Z2gKKyAqIHRoZSBSRUdTRVRfWFNUQVRFIGludGVyZmFjZS4KKyAqLwordTY0IHhzdGF0ZV9meF9zd19ieXRlc1tVU0VSX1hTVEFURV9GWF9TV19XT1JEU107CisKK3ZvaWQgdXBkYXRlX3JlZ3NldF94c3RhdGVfaW5mbyh1bnNpZ25lZCBpbnQgc2l6ZSwgdTY0IHhzdGF0ZV9tYXNrKQoreworI2lmZGVmIENPTkZJR19YODZfNjQKKwl4ODZfNjRfcmVnc2V0c1tSRUdTRVRfWFNUQVRFXS5uID0gc2l6ZSAvIHNpemVvZih1NjQpOworI2VuZGlmCisjaWYgZGVmaW5lZCBDT05GSUdfWDg2XzMyIHx8IGRlZmluZWQgQ09ORklHX0lBMzJfRU1VTEFUSU9OCisJeDg2XzMyX3JlZ3NldHNbUkVHU0VUX1hTVEFURV0ubiA9IHNpemUgLyBzaXplb2YodTY0KTsKKyNlbmRpZgorCXhzdGF0ZV9meF9zd19ieXRlc1tVU0VSX1hTVEFURV9YQ1IwX1dPUkRdID0geHN0YXRlX21hc2s7Cit9CisKIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3ICp0YXNrX3VzZXJfcmVnc2V0X3ZpZXcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCA1ZDllNDBjLi5jYjQyMTA5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwpAQCAtMTIxLDcgKzEyMSw5IEBACiB1bnNpZ25lZCBsb25nIG1heF9sb3dfcGZuX21hcHBlZDsKIHVuc2lnbmVkIGxvbmcgbWF4X3Bmbl9tYXBwZWQ7CiAKKyNpZmRlZiBDT05GSUdfRE1JCiBSRVNFUlZFX0JSSyhkbWlfYWxsb2MsIDY1NTM2KTsKKyNlbmRpZgogCiB1bnNpZ25lZCBpbnQgYm9vdF9jcHVfaWQgX19yZWFkX21vc3RseTsKIApAQCAtNjY3LDYgKzY2OSwyMyBAQAogCXt9CiB9OwogCitzdGF0aWMgdm9pZCBfX2luaXQgdHJpbV9iaW9zX3JhbmdlKHZvaWQpCit7CisJLyoKKwkgKiBBIHNwZWNpYWwgY2FzZSBpcyB0aGUgZmlyc3QgNEtiIG9mIG1lbW9yeTsKKwkgKiBUaGlzIGlzIGEgQklPUyBvd25lZCBhcmVhLCBub3Qga2VybmVsIHJhbSwgYnV0IGdlbmVyYWxseQorCSAqIG5vdCBsaXN0ZWQgYXMgc3VjaCBpbiB0aGUgRTgyMCB0YWJsZS4KKwkgKi8KKwllODIwX3VwZGF0ZV9yYW5nZSgwLCBQQUdFX1NJWkUsIEU4MjBfUkFNLCBFODIwX1JFU0VSVkVEKTsKKwkvKgorCSAqIHNwZWNpYWwgY2FzZTogU29tZSBCSU9TZW4gcmVwb3J0IHRoZSBQQyBCSU9TCisJICogYXJlYSAoNjQwLT4xTWIpIGFzIHJhbSBldmVuIHRob3VnaCBpdCBpcyBub3QuCisJICogdGFrZSB0aGVtIG91dC4KKwkgKi8KKwllODIwX3JlbW92ZV9yYW5nZShCSU9TX0JFR0lOLCBCSU9TX0VORCAtIEJJT1NfQkVHSU4sIEU4MjBfUkFNLCAxKTsKKwlzYW5pdGl6ZV9lODIwX21hcChlODIwLm1hcCwgQVJSQVlfU0laRShlODIwLm1hcCksICZlODIwLm5yX21hcCk7Cit9CisKIC8qCiAgKiBEZXRlcm1pbmUgaWYgd2Ugd2VyZSBsb2FkZWQgYnkgYW4gRUZJIGxvYWRlci4gIElmIHNvLCB0aGVuIHdlIGhhdmUgYWxzbyBiZWVuCiAgKiBwYXNzZWQgdGhlIGVmaSBtZW1tYXAsIHN5c3RhYiwgZXRjLiwgc28gd2Ugc2hvdWxkIHVzZSB0aGVzZSBkYXRhIHN0cnVjdHVyZXMKQEAgLTgzMCw3ICs4NDksNyBAQAogCWluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZkYXRhX3Jlc291cmNlKTsKIAlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmYnNzX3Jlc291cmNlKTsKIAotCisJdHJpbV9iaW9zX3JhbmdlKCk7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWlmIChwcHJvX3dpdGhfcmFtX2J1ZygpKSB7CiAJCWU4MjBfdXBkYXRlX3JhbmdlKDB4NzAwMDAwMDBVTEwsIDB4NDAwMDBVTEwsIEU4MjBfUkFNLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKaW5kZXggYjRlODcwYy4uOWI0NDAxMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC0zMjAsNiArMzIwLDcgQEAKIAl1bmxvY2tfdmVjdG9yX2xvY2soKTsKIAlpcGlfY2FsbF91bmxvY2soKTsKIAlwZXJfY3B1KGNwdV9zdGF0ZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA9IENQVV9PTkxJTkU7CisJeDg2X3BsYXRmb3JtLm5taV9pbml0KCk7CiAKIAkvKiBlbmFibGUgbG9jYWwgaW50ZXJydXB0cyAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggMzMzOTkxNy4uMTE2OGU0NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTUzNCw2ICs1MzQsOSBAQAogCiAJZ2V0X2RlYnVncmVnKGRyNiwgNik7CiAKKwkvKiBGaWx0ZXIgb3V0IGFsbCB0aGUgcmVzZXJ2ZWQgYml0cyB3aGljaCBhcmUgcHJlc2V0IHRvIDEgKi8KKwlkcjYgJj0gfkRSNl9SRVNFUlZFRDsKKwogCS8qIENhdGNoIGttZW1jaGVjayBjb25kaXRpb25zIGZpcnN0IG9mIGFsbCEgKi8KIAlpZiAoKGRyNiAmIERSX1NURVApICYmIGttZW1jaGVja190cmFwKHJlZ3MpKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKaW5kZXggNTk3NjgzYS4uMjA4YTg1NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RzYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90c2MuYwpAQCAtNzQwLDcgKzc0MCw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgcmVzdW1lX3RzYyh2b2lkKQorc3RhdGljIHZvaWQgcmVzdW1lX3RzYyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewogCWNsb2Nrc291cmNlX3RzYy5jeWNsZV9sYXN0ID0gMDsKIH0KQEAgLTgwNiw3ICs4MDYsNyBAQAogCXVuc2lnbmVkIGxvbmcgcmVzX2xvdywgcmVzX2hpZ2g7CiAKIAlyZG1zcl9zYWZlKE1TUl9HRU9ERV9CVVNDT05UX0NPTkYwLCAmcmVzX2xvdywgJnJlc19oaWdoKTsKLQkvKiBHZW9kZV9MWCAtIHRoZSBPTFBDIENQVSBoYXMgYSBwb3NzaWJseSBhIHZlcnkgcmVsaWFibGUgVFNDICovCisJLyogR2VvZGVfTFggLSB0aGUgT0xQQyBDUFUgaGFzIGEgdmVyeSByZWxpYWJsZSBUU0MgKi8KIAlpZiAocmVzX2xvdyAmIFJUU0NfU1VTUCkKIAkJdHNjX2Nsb2Nrc291cmNlX3JlbGlhYmxlID0gMTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3V2X3N5c2ZzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdXZfc3lzZnMuYwppbmRleCAzNmFmYjk4Li4zMDljNzBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdXZfc3lzZnMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdXZfc3lzZnMuYwpAQCAtNTQsMTkgKzU0LDE5IEBACiAJaWYgKCFzZ2lfdXZfa29iaikKIAkJc2dpX3V2X2tvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKCJzZ2lfdXYiLCBmaXJtd2FyZV9rb2JqKTsKIAlpZiAoIXNnaV91dl9rb2JqKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImtvYmplY3RfY3JlYXRlX2FuZF9hZGQgc2dpX3V2IGZhaWxlZCBcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkIHNnaV91diBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShzZ2lfdXZfa29iaiwgJnBhcnRpdGlvbl9pZF9hdHRyLmF0dHIpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAic3lzZnNfY3JlYXRlX2ZpbGUgcGFydGl0aW9uX2lkIGZhaWxlZCBcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzeXNmc19jcmVhdGVfZmlsZSBwYXJ0aXRpb25faWQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShzZ2lfdXZfa29iaiwgJmNvaGVyZW5jZV9pZF9hdHRyLmF0dHIpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAic3lzZnNfY3JlYXRlX2ZpbGUgY29oZXJlbmNlX2lkIGZhaWxlZCBcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzeXNmc19jcmVhdGVfZmlsZSBjb2hlcmVuY2VfaWQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC94ODY2NF9rc3ltc182NC5jIGIvYXJjaC94ODYva2VybmVsL3g4NjY0X2tzeW1zXzY0LmMKaW5kZXggNjE5ZjdmOC4uNjkzOTIwYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3g4NjY0X2tzeW1zXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3g4NjY0X2tzeW1zXzY0LmMKQEAgLTI2LDcgKzI2LDggQEAKIEVYUE9SVF9TWU1CT0woX19wdXRfdXNlcl80KTsKIEVYUE9SVF9TWU1CT0woX19wdXRfdXNlcl84KTsKIAotRVhQT1JUX1NZTUJPTChjb3B5X3VzZXJfZ2VuZXJpYyk7CitFWFBPUlRfU1lNQk9MKGNvcHlfdXNlcl9nZW5lcmljX3N0cmluZyk7CitFWFBPUlRfU1lNQk9MKGNvcHlfdXNlcl9nZW5lcmljX3Vucm9sbGVkKTsKIEVYUE9SVF9TWU1CT0woX19jb3B5X3VzZXJfbm9jYWNoZSk7CiBFWFBPUlRfU1lNQk9MKF9jb3B5X2Zyb21fdXNlcik7CiBFWFBPUlRfU1lNQk9MKF9jb3B5X3RvX3VzZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMgYi9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYwppbmRleCBjY2QxNzlkLi5lZTU3NDZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYwpAQCAtNzYsMTAgKzc2LDEzIEBACiAJLnNldHVwX3BlcmNwdV9jbG9ja2V2CQk9IHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrLAogfTsKIAorc3RhdGljIHZvaWQgZGVmYXVsdF9ubWlfaW5pdCh2b2lkKSB7IH07CisKIHN0cnVjdCB4ODZfcGxhdGZvcm1fb3BzIHg4Nl9wbGF0Zm9ybSA9IHsKIAkuY2FsaWJyYXRlX3RzYwkJCT0gbmF0aXZlX2NhbGlicmF0ZV90c2MsCiAJLmdldF93YWxsY2xvY2sJCQk9IG1hY2hfZ2V0X2Ntb3NfdGltZSwKIAkuc2V0X3dhbGxjbG9jawkJCT0gbWFjaF9zZXRfcnRjX21tc3MsCiAJLmlvbW11X3NodXRkb3duCQkJPSBpb21tdV9zaHV0ZG93bl9ub29wLAogCS5pc191bnRyYWNrZWRfcGF0X3JhbmdlCQk9IGlzX0lTQV9yYW5nZSwKKwkubm1pX2luaXQJCQk9IGRlZmF1bHRfbm1pX2luaXQKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwveHNhdmUuYyBiL2FyY2gveDg2L2tlcm5lbC94c2F2ZS5jCmluZGV4IGM1ZWUxN2UuLjc4MmMzYTM2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwveHNhdmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwveHNhdmUuYwpAQCAtMzM3LDYgKzMzNyw3IEBACiAJY3B1aWRfY291bnQoMHhkLCAwLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKIAl4c3RhdGVfc2l6ZSA9IGVieDsKIAorCXVwZGF0ZV9yZWdzZXRfeHN0YXRlX2luZm8oeHN0YXRlX3NpemUsIHBjbnR4dF9tYXNrKTsKIAlwcmVwYXJlX2Z4X3N3X2ZyYW1lKCk7CiAKIAlzZXR1cF94c3RhdGVfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL01ha2VmaWxlIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCmluZGV4IGNmZmQ3NTRmLi40MTkzODZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCkBAIC0xNCw3ICsxNCw3IEBACiAKIGNsZWFuLWZpbGVzIDo9IGluYXQtdGFibGVzLmMKIAotb2JqLSQoQ09ORklHX1NNUCkgKz0gbXNyLXNtcC5vCitvYmotJChDT05GSUdfU01QKSArPSBtc3Itc21wLm8gY2FjaGUtc21wLm8KIAogbGliLXkgOj0gZGVsYXkubwogbGliLXkgKz0gdGh1bmtfJChCSVRTKS5vCkBAIC0zNCw5ICszNCwxMCBAQAogZW5kaWYKICAgICAgICAgbGliLSQoQ09ORklHX1g4Nl9VU0VfM0ROT1cpICs9IG1teF8zMi5vCiBlbHNlCi0gICAgICAgIG9iai15ICs9IGlvXzY0Lm8gaW9tYXBfY29weV82NC5vCisgICAgICAgIG9iai15ICs9IGlvbWFwX2NvcHlfNjQubwogICAgICAgICBsaWIteSArPSBjc3VtLXBhcnRpYWxfNjQubyBjc3VtLWNvcHlfNjQubyBjc3VtLXdyYXBwZXJzXzY0Lm8KICAgICAgICAgbGliLXkgKz0gdGh1bmtfNjQubyBjbGVhcl9wYWdlXzY0Lm8gY29weV9wYWdlXzY0Lm8KICAgICAgICAgbGliLXkgKz0gbWVtbW92ZV82NC5vIG1lbXNldF82NC5vCiAgICAgICAgIGxpYi15ICs9IGNvcHlfdXNlcl82NC5vIHJ3bG9ja182NC5vIGNvcHlfdXNlcl9ub2NhY2hlXzY0Lm8KKwlsaWItJChDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE0pICs9IHJ3c2VtXzY0Lm8KIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvY2FjaGUtc21wLmMgYi9hcmNoL3g4Ni9saWIvY2FjaGUtc21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjNjY4OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2xpYi9jYWNoZS1zbXAuYwpAQCAtMCwwICsxLDE5IEBACisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK3N0YXRpYyB2b2lkIF9fd2JpbnZkKHZvaWQgKmR1bW15KQoreworCXdiaW52ZCgpOworfQorCit2b2lkIHdiaW52ZF9vbl9jcHUoaW50IGNwdSkKK3sKKwlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBfX3diaW52ZCwgTlVMTCwgMSk7Cit9CitFWFBPUlRfU1lNQk9MKHdiaW52ZF9vbl9jcHUpOworCitpbnQgd2JpbnZkX29uX2FsbF9jcHVzKHZvaWQpCit7CisJcmV0dXJuIG9uX2VhY2hfY3B1KF9fd2JpbnZkLCBOVUxMLCAxKTsKK30KK0VYUE9SVF9TWU1CT0wod2JpbnZkX29uX2FsbF9jcHVzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9jb3B5X3VzZXJfNjQuUyBiL2FyY2gveDg2L2xpYi9jb3B5X3VzZXJfNjQuUwppbmRleCBjZjg4OWQ0Li43MTEwMGM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvY29weV91c2VyXzY0LlMKKysrIGIvYXJjaC94ODYvbGliL2NvcHlfdXNlcl82NC5TCkBAIC05MCwxMiArOTAsNiBAQAogCUNGSV9FTkRQUk9DCiBFTkRQUk9DKF9jb3B5X2Zyb21fdXNlcikKIAotRU5UUlkoY29weV91c2VyX2dlbmVyaWMpCi0JQ0ZJX1NUQVJUUFJPQwotCUFMVEVSTkFUSVZFX0pVTVAgWDg2X0ZFQVRVUkVfUkVQX0dPT0QsY29weV91c2VyX2dlbmVyaWNfdW5yb2xsZWQsY29weV91c2VyX2dlbmVyaWNfc3RyaW5nCi0JQ0ZJX0VORFBST0MKLUVORFBST0MoY29weV91c2VyX2dlbmVyaWMpCi0KIAkuc2VjdGlvbiAuZml4dXAsImF4IgogCS8qIG11c3QgemVybyBkZXN0ICovCiBFTlRSWShiYWRfZnJvbV91c2VyKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL2lvXzY0LmMgYi9hcmNoL3g4Ni9saWIvaW9fNjQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YxZWI1OS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9saWIvaW9fNjQuYworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotdm9pZCBfX21lbWNweV90b2lvKHVuc2lnbmVkIGxvbmcgZHN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxlbikKLXsKLQlfX2lubGluZV9tZW1jcHkoKHZvaWQgKilkc3QsIHNyYywgbGVuKTsKLX0KLUVYUE9SVF9TWU1CT0woX19tZW1jcHlfdG9pbyk7Ci0KLXZvaWQgX19tZW1jcHlfZnJvbWlvKHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBzcmMsIHVuc2lnbmVkIGxlbikKLXsKLQlfX2lubGluZV9tZW1jcHkoZHN0LCAoY29uc3Qgdm9pZCAqKXNyYywgbGVuKTsKLX0KLUVYUE9SVF9TWU1CT0woX19tZW1jcHlfZnJvbWlvKTsKLQotdm9pZCBtZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICphLCBpbnQgYiwgc2l6ZV90IGMpCi17Ci0JLyoKLQkgKiBUT0RPOiBtZW1zZXQgY2FuIG1hbmdsZSB0aGUgSU8gcGF0dGVybnMgcXVpdGUgYSBiaXQuCi0JICogcGVyaGFwcyBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gdXNlIGEgZHVtYiBvbmU6Ci0JICovCi0JbWVtc2V0KCh2b2lkICopYSwgYiwgYyk7Ci19Ci1FWFBPUlRfU1lNQk9MKG1lbXNldF9pbyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMgYi9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMKaW5kZXggYWQ1NDQxZS4uZjgyZTg4NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL21lbWNweV82NC5TCisrKyBiL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUwpAQCAtMjAsMTIgKzIwLDExIEBACiAvKgogICogbWVtY3B5X2MoKSAtIGZhc3Qgc3RyaW5nIG9wcyAoUkVQIE1PVlNRKSBiYXNlZCB2YXJpYW50LgogICoKLSAqIENhbGxzIHRvIHRoaXMgZ2V0IHBhdGNoZWQgaW50byB0aGUga2VybmVsIGltYWdlIHZpYSB0aGUKKyAqIFRoaXMgZ2V0cyBwYXRjaGVkIG92ZXIgdGhlIHVucm9sbGVkIHZhcmlhbnQgKGJlbG93KSB2aWEgdGhlCiAgKiBhbHRlcm5hdGl2ZSBpbnN0cnVjdGlvbnMgZnJhbWV3b3JrOgogICovCi0JQUxJR04KLW1lbWNweV9jOgotCUNGSV9TVEFSVFBST0MKKwkuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsICJheCIsIEBwcm9nYml0cworLkxtZW1jcHlfYzoKIAltb3ZxICVyZGksICVyYXgKIAogCW1vdmwgJWVkeCwgJWVjeApAQCAtMzUsOCArMzQsOCBAQAogCW1vdmwgJWVkeCwgJWVjeAogCXJlcCBtb3ZzYgogCXJldAotCUNGSV9FTkRQUk9DCi1FTkRQUk9DKG1lbWNweV9jKQorLkxtZW1jcHlfZToKKwkucHJldmlvdXMKIAogRU5UUlkoX19tZW1jcHkpCiBFTlRSWShtZW1jcHkpCkBAIC0xMjgsMTYgKzEyNywxMCBAQAogCSAqIEl0IGlzIGFsc28gYSBsb3Qgc2ltcGxlci4gVXNlIHRoaXMgd2hlbiBwb3NzaWJsZToKIAkgKi8KIAotCS5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwgImF4IgotMToJLmJ5dGUgMHhlYgkJCQkvKiBqbXAgPGRpc3A4PiAqLwotCS5ieXRlIChtZW1jcHlfYyAtIG1lbWNweSkgLSAoMmYgLSAxYikJLyogb2Zmc2V0ICovCi0yOgotCS5wcmV2aW91cwotCiAJLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucywgImEiCiAJLmFsaWduIDgKIAkucXVhZCBtZW1jcHkKLQkucXVhZCAxYgorCS5xdWFkIC5MbWVtY3B5X2MKIAkuYnl0ZSBYODZfRkVBVFVSRV9SRVBfR09PRAogCiAJLyoKQEAgLTE0NSw2ICsxMzgsNiBAQAogCSAqIHNvIGl0IGlzIHNpbGx5IHRvIG92ZXJ3cml0ZSBpdHNlbGYgd2l0aCBub3BzIC0gcmVib290IGlzIHRoZQogCSAqIG9ubHkgb3V0Y29tZS4uLgogCSAqLwotCS5ieXRlIDJiIC0gMWIKLQkuYnl0ZSAyYiAtIDFiCisJLmJ5dGUgLkxtZW1jcHlfZSAtIC5MbWVtY3B5X2MKKwkuYnl0ZSAuTG1lbWNweV9lIC0gLkxtZW1jcHlfYwogCS5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL21lbXNldF82NC5TIGIvYXJjaC94ODYvbGliL21lbXNldF82NC5TCmluZGV4IDJjNTk0ODEuLmU4OGQzYjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9tZW1zZXRfNjQuUworKysgYi9hcmNoL3g4Ni9saWIvbWVtc2V0XzY0LlMKQEAgLTEyLDkgKzEyLDggQEAKICAqIAogICogcmF4ICAgb3JpZ2luYWwgZGVzdGluYXRpb24KICAqLwkKLQlBTElHTgotbWVtc2V0X2M6Ci0JQ0ZJX1NUQVJUUFJPQworCS5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwgImF4IiwgQHByb2diaXRzCisuTG1lbXNldF9jOgogCW1vdnEgJXJkaSwlcjkKIAltb3ZsICVlZHgsJXI4ZAogCWFuZGwgJDcsJXI4ZApAQCAtMjksOCArMjgsOCBAQAogCXJlcCBzdG9zYgogCW1vdnEgJXI5LCVyYXgKIAlyZXQKLQlDRklfRU5EUFJPQwotRU5EUFJPQyhtZW1zZXRfYykKKy5MbWVtc2V0X2U6CisJLnByZXZpb3VzCiAKIEVOVFJZKG1lbXNldCkKIEVOVFJZKF9fbWVtc2V0KQpAQCAtMTE4LDE2ICsxMTcsMTEgQEAKIAogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CiAKLQkuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsImF4IgotMToJLmJ5dGUgMHhlYgkJCQkvKiBqbXAgPGRpc3A4PiAqLwotCS5ieXRlIChtZW1zZXRfYyAtIG1lbXNldCkgLSAoMmYgLSAxYikJLyogb2Zmc2V0ICovCi0yOgotCS5wcmV2aW91cwogCS5zZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsImEiCiAJLmFsaWduIDgKIAkucXVhZCBtZW1zZXQKLQkucXVhZCAxYgorCS5xdWFkIC5MbWVtc2V0X2MKIAkuYnl0ZSBYODZfRkVBVFVSRV9SRVBfR09PRAogCS5ieXRlIC5MZmluYWwgLSBtZW1zZXQKLQkuYnl0ZSAyYiAtIDFiCisJLmJ5dGUgLkxtZW1zZXRfZSAtIC5MbWVtc2V0X2MKIAkucHJldmlvdXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9yd3NlbV82NC5TIGIvYXJjaC94ODYvbGliL3J3c2VtXzY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVhY2VjZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2xpYi9yd3NlbV82NC5TCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiB4ODYtNjQgcndzZW0gd3JhcHBlcnMKKyAqCisgKiBUaGlzIGludGVyZmFjZXMgdGhlIGlubGluZSBhc20gY29kZSB0byB0aGUgc2xvdy1wYXRoCisgKiBDIHJvdXRpbmVzLiBXZSBuZWVkIHRvIHNhdmUgdGhlIGNhbGwtY2xvYmJlcmVkIHJlZ3MKKyAqIHRoYXQgdGhlIGFzbSBkb2VzIG5vdCBtYXJrIGFzIGNsb2JiZXJlZCwgYW5kIG1vdmUgdGhlCisgKiBhcmd1bWVudCBmcm9tICVyYXggdG8gJXJkaS4KKyAqCisgKiBOT1RFISBXZSBkb24ndCBuZWVkIHRvIHNhdmUgJXJheCwgYmVjYXVzZSB0aGUgZnVuY3Rpb25zCisgKiB3aWxsIGFsd2F5cyByZXR1cm4gdGhlIHNlbWFwaG9yZSBwb2ludGVyIGluICVyYXggKHdoaWNoCisgKiBpcyBhbHNvIHRoZSBpbnB1dCBhcmd1bWVudCB0byB0aGVzZSBoZWxwZXJzKQorICoKKyAqIFRoZSBmb2xsb3dpbmcgY2FuIGNsb2JiZXIgJXJkeCBiZWNhdXNlIHRoZSBhc20gY2xvYmJlcnMgaXQ6CisgKiAgIGNhbGxfcndzZW1fZG93bl93cml0ZV9mYWlsZWQKKyAqICAgY2FsbF9yd3NlbV93YWtlCisgKiBidXQgJXJkaSwgJXJzaSwgJXJjeCwgJXI4LXIxMSBhbHdheXMgbmVlZCBzYXZpbmcuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vcndsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLWFzbS5oPgorI2luY2x1ZGUgPGFzbS9mcmFtZS5oPgorI2luY2x1ZGUgPGFzbS9kd2FyZjIuaD4KKworI2RlZmluZSBzYXZlX2NvbW1vbl9yZWdzIFwKKwlwdXNocSAlcmRpOyBcCisJcHVzaHEgJXJzaTsgXAorCXB1c2hxICVyY3g7IFwKKwlwdXNocSAlcjg7IFwKKwlwdXNocSAlcjk7IFwKKwlwdXNocSAlcjEwOyBcCisJcHVzaHEgJXIxMQorCisjZGVmaW5lIHJlc3RvcmVfY29tbW9uX3JlZ3MgXAorCXBvcHEgJXIxMTsgXAorCXBvcHEgJXIxMDsgXAorCXBvcHEgJXI5OyBcCisJcG9wcSAlcjg7IFwKKwlwb3BxICVyY3g7IFwKKwlwb3BxICVyc2k7IFwKKwlwb3BxICVyZGkKKworLyogRml4IHVwIHNwZWNpYWwgY2FsbGluZyBjb252ZW50aW9ucyAqLworRU5UUlkoY2FsbF9yd3NlbV9kb3duX3JlYWRfZmFpbGVkKQorCXNhdmVfY29tbW9uX3JlZ3MKKwlwdXNocSAlcmR4CisJbW92cSAlcmF4LCVyZGkKKwljYWxsIHJ3c2VtX2Rvd25fcmVhZF9mYWlsZWQKKwlwb3BxICVyZHgKKwlyZXN0b3JlX2NvbW1vbl9yZWdzCisJcmV0CisJRU5EUFJPQyhjYWxsX3J3c2VtX2Rvd25fcmVhZF9mYWlsZWQpCisKK0VOVFJZKGNhbGxfcndzZW1fZG93bl93cml0ZV9mYWlsZWQpCisJc2F2ZV9jb21tb25fcmVncworCW1vdnEgJXJheCwlcmRpCisJY2FsbCByd3NlbV9kb3duX3dyaXRlX2ZhaWxlZAorCXJlc3RvcmVfY29tbW9uX3JlZ3MKKwlyZXQKKwlFTkRQUk9DKGNhbGxfcndzZW1fZG93bl93cml0ZV9mYWlsZWQpCisKK0VOVFJZKGNhbGxfcndzZW1fd2FrZSkKKwlkZWN3ICVkeCAgICAvKiBkbyBub3RoaW5nIGlmIHN0aWxsIG91dHN0YW5kaW5nIGFjdGl2ZSByZWFkZXJzICovCisJam56IDFmCisJc2F2ZV9jb21tb25fcmVncworCW1vdnEgJXJheCwlcmRpCisJY2FsbCByd3NlbV93YWtlCisJcmVzdG9yZV9jb21tb25fcmVncworMToJcmV0CisJRU5EUFJPQyhjYWxsX3J3c2VtX3dha2UpCisKKy8qIEZpeCB1cCBzcGVjaWFsIGNhbGxpbmcgY29udmVudGlvbnMgKi8KK0VOVFJZKGNhbGxfcndzZW1fZG93bmdyYWRlX3dha2UpCisJc2F2ZV9jb21tb25fcmVncworCXB1c2hxICVyZHgKKwltb3ZxICVyYXgsJXJkaQorCWNhbGwgcndzZW1fZG93bmdyYWRlX3dha2UKKwlwb3BxICVyZHgKKwlyZXN0b3JlX2NvbW1vbl9yZWdzCisJcmV0CisJRU5EUFJPQyhjYWxsX3J3c2VtX2Rvd25ncmFkZV93YWtlKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdC5jIGIvYXJjaC94ODYvbW0vaW5pdC5jCmluZGV4IGQ0MDZjNTIuLmU3MWM1Y2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0LmMKQEAgLTI2NiwxNiArMjY2LDkgQEAKIAlpZiAoIWFmdGVyX2Jvb3RtZW0pCiAJCWZpbmRfZWFybHlfdGFibGVfc3BhY2UoZW5kLCB1c2VfcHNlLCB1c2VfZ2JwYWdlcyk7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCi0JCWtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQobXJbaV0uc3RhcnQsIG1yW2ldLmVuZCwKLQkJCQkJICAgICBtcltpXS5wYWdlX3NpemVfbWFzayk7Ci0JcmV0ID0gZW5kOwotI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLwogCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQogCQlyZXQgPSBrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KG1yW2ldLnN0YXJ0LCBtcltpXS5lbmQsCiAJCQkJCQkgICBtcltpXS5wYWdlX3NpemVfbWFzayk7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19YODZfMzIKIAllYXJseV9pb3JlbWFwX3BhZ2VfdGFibGVfcmFuZ2VfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdF8zMi5jIGIvYXJjaC94ODYvbW0vaW5pdF8zMi5jCmluZGV4IDlhMGMyNTguLjIyMjZmMmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXRfMzIuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKQEAgLTI0MSw2ICsyNDEsNyBAQAogCQkJICAgICB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZV9tYXNrKQogewogCWludCB1c2VfcHNlID0gcGFnZV9zaXplX21hc2sgPT0gKDE8PFBHX0xFVkVMXzJNKTsKKwl1bnNpZ25lZCBsb25nIGxhc3RfbWFwX2FkZHIgPSBlbmQ7CiAJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47CiAJcGdkX3QgKnBnZF9iYXNlID0gc3dhcHBlcl9wZ19kaXI7CiAJaW50IHBnZF9pZHgsIHBtZF9pZHgsIHB0ZV9vZnM7CkBAIC0zNDEsOSArMzQyLDEwIEBACiAJCQkJCXByb3QgPSBQQUdFX0tFUk5FTF9FWEVDOwogCiAJCQkJcGFnZXNfNGsrKzsKLQkJCQlpZiAobWFwcGluZ19pdGVyID09IDEpCisJCQkJaWYgKG1hcHBpbmdfaXRlciA9PSAxKSB7CiAJCQkJCXNldF9wdGUocHRlLCBwZm5fcHRlKHBmbiwgaW5pdF9wcm90KSk7Ci0JCQkJZWxzZQorCQkJCQlsYXN0X21hcF9hZGRyID0gKHBmbiA8PCBQQUdFX1NISUZUKSArIFBBR0VfU0laRTsKKwkJCQl9IGVsc2UKIAkJCQkJc2V0X3B0ZShwdGUsIHBmbl9wdGUocGZuLCBwcm90KSk7CiAJCQl9CiAJCX0KQEAgLTM2OCw3ICszNzAsNyBAQAogCQltYXBwaW5nX2l0ZXIgPSAyOwogCQlnb3RvIHJlcGVhdDsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGxhc3RfbWFwX2FkZHI7CiB9CiAKIHB0ZV90ICprbWFwX3B0ZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2lvcmVtYXAuYyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwppbmRleCBjMjQ2ZDI1Li41ZWIxYmE3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCkBAIC0yNCw0MyArMjQsNiBAQAogCiAjaW5jbHVkZSAicGh5c2FkZHIuaCIKIAotaW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKQotewotCXJlc291cmNlX3NpemVfdCBhZGRyLCBlbmQ7Ci0JaW50IGk7Ci0KLQkvKgotCSAqIEEgc3BlY2lhbCBjYXNlIGlzIHRoZSBmaXJzdCA0S2Igb2YgbWVtb3J5OwotCSAqIFRoaXMgaXMgYSBCSU9TIG93bmVkIGFyZWEsIG5vdCBrZXJuZWwgcmFtLCBidXQgZ2VuZXJhbGx5Ci0JICogbm90IGxpc3RlZCBhcyBzdWNoIGluIHRoZSBFODIwIHRhYmxlLgotCSAqLwotCWlmIChwYWdlbnIgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIFNlY29uZCBzcGVjaWFsIGNhc2U6IFNvbWUgQklPU2VuIHJlcG9ydCB0aGUgUEMgQklPUwotCSAqIGFyZWEgKDY0MC0+MU1iKSBhcyByYW0gZXZlbiB0aG91Z2ggaXQgaXMgbm90LgotCSAqLwotCWlmIChwYWdlbnIgPj0gKEJJT1NfQkVHSU4gPj4gUEFHRV9TSElGVCkgJiYKLQkJICAgIHBhZ2VuciA8IChCSU9TX0VORCA+PiBQQUdFX1NISUZUKSkKLQkJcmV0dXJuIDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgewotCQkvKgotCQkgKiBOb3QgdXNhYmxlIG1lbW9yeToKLQkJICovCi0JCWlmIChlODIwLm1hcFtpXS50eXBlICE9IEU4MjBfUkFNKQotCQkJY29udGludWU7Ci0JCWFkZHIgPSAoZTgyMC5tYXBbaV0uYWRkciArIFBBR0VfU0laRS0xKSA+PiBQQUdFX1NISUZUOwotCQllbmQgPSAoZTgyMC5tYXBbaV0uYWRkciArIGU4MjAubWFwW2ldLnNpemUpID4+IFBBR0VfU0hJRlQ7Ci0KLQotCQlpZiAoKHBhZ2VuciA+PSBhZGRyKSAmJiAocGFnZW5yIDwgZW5kKSkKLQkJCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIEZpeCB1cCB0aGUgbGluZWFyIGRpcmVjdCBtYXBwaW5nIG9mIHRoZSBrZXJuZWwgdG8gYXZvaWQgY2FjaGUgYXR0cmlidXRlCiAgKiBjb25mbGljdHMuCkBAIC00MjIsNiArMzg1LDEwIEBACiAJICogVGhlIGJvb3QtaW9yZW1hcCByYW5nZSBzcGFucyBtdWx0aXBsZSBwbWRzLCBmb3Igd2hpY2gKIAkgKiB3ZSBhcmUgbm90IHByZXBhcmVkOgogCSAqLworI2RlZmluZSBfX0ZJWEFERFJfVE9QICgtUEFHRV9TSVpFKQorCUJVSUxEX0JVR19PTigoX19maXhfdG9fdmlydChGSVhfQlRNQVBfQkVHSU4pID4+IFBNRF9TSElGVCkKKwkJICAgICAhPSAoX19maXhfdG9fdmlydChGSVhfQlRNQVBfRU5EKSA+PiBQTURfU0hJRlQpKTsKKyN1bmRlZiBfX0ZJWEFERFJfVE9QCiAJaWYgKHBtZCAhPSBlYXJseV9pb3JlbWFwX3BtZChmaXhfdG9fdmlydChGSVhfQlRNQVBfRU5EKSkpIHsKIAkJV0FSTl9PTigxKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicG1kICVwICE9ICVwXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0va21lbWNoZWNrL2ttZW1jaGVjay5jIGIvYXJjaC94ODYvbW0va21lbWNoZWNrL2ttZW1jaGVjay5jCmluZGV4IDhjYzE4MzMuLmIzYjUzMWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9rbWVtY2hlY2suYworKysgYi9hcmNoL3g4Ni9tbS9rbWVtY2hlY2sva21lbWNoZWNrLmMKQEAgLTMzNyw3ICszMzcsNyBAQAogCWlmICghc2hhZG93KQogCQlyZXR1cm4gdHJ1ZTsKIAotCXN0YXR1cyA9IGttZW1jaGVja19zaGFkb3dfdGVzdChzaGFkb3csIHNpemUpOworCXN0YXR1cyA9IGttZW1jaGVja19zaGFkb3dfdGVzdF9hbGwoc2hhZG93LCBzaXplKTsKIAogCXJldHVybiBzdGF0dXMgPT0gS01FTUNIRUNLX1NIQURPV19JTklUSUFMSVpFRDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9zaGFkb3cuYyBiL2FyY2gveDg2L21tL2ttZW1jaGVjay9zaGFkb3cuYwppbmRleCAzZjY2YjgyLi5hZWMxMjQyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hhZG93LmMKKysrIGIvYXJjaC94ODYvbW0va21lbWNoZWNrL3NoYWRvdy5jCkBAIC0xMjUsMTIgKzEyNSwxMiBAQAogCiBlbnVtIGttZW1jaGVja19zaGFkb3cga21lbWNoZWNrX3NoYWRvd190ZXN0KHZvaWQgKnNoYWRvdywgdW5zaWduZWQgaW50IHNpemUpCiB7CisjaWZkZWYgQ09ORklHX0tNRU1DSEVDS19QQVJUSUFMX09LCiAJdWludDhfdCAqeDsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCXggPSBzaGFkb3c7CiAKLSNpZmRlZiBDT05GSUdfS01FTUNIRUNLX1BBUlRJQUxfT0sKIAkvKgogCSAqIE1ha2Ugc3VyZSBfc29tZV8gYnl0ZXMgYXJlIGluaXRpYWxpemVkLiBHY2MgZnJlcXVlbnRseSBnZW5lcmF0ZXMKIAkgKiBjb2RlIHRvIGFjY2VzcyBuZWlnaGJvcmluZyBieXRlcy4KQEAgLTEzOSwxMyArMTM5LDI1IEBACiAJCWlmICh4W2ldID09IEtNRU1DSEVDS19TSEFET1dfSU5JVElBTElaRUQpCiAJCQlyZXR1cm4geFtpXTsKIAl9CisKKwlyZXR1cm4geFswXTsKICNlbHNlCisJcmV0dXJuIGttZW1jaGVja19zaGFkb3dfdGVzdF9hbGwoc2hhZG93LCBzaXplKTsKKyNlbmRpZgorfQorCitlbnVtIGttZW1jaGVja19zaGFkb3cga21lbWNoZWNrX3NoYWRvd190ZXN0X2FsbCh2b2lkICpzaGFkb3csIHVuc2lnbmVkIGludCBzaXplKQoreworCXVpbnQ4X3QgKng7CisJdW5zaWduZWQgaW50IGk7CisKKwl4ID0gc2hhZG93OworCiAJLyogQWxsIGJ5dGVzIG11c3QgYmUgaW5pdGlhbGl6ZWQuICovCiAJZm9yIChpID0gMDsgaSA8IHNpemU7ICsraSkgewogCQlpZiAoeFtpXSAhPSBLTUVNQ0hFQ0tfU0hBRE9XX0lOSVRJQUxJWkVEKQogCQkJcmV0dXJuIHhbaV07CiAJfQotI2VuZGlmCiAKIAlyZXR1cm4geFswXTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ttZW1jaGVjay9zaGFkb3cuaCBiL2FyY2gveDg2L21tL2ttZW1jaGVjay9zaGFkb3cuaAppbmRleCBhZjQ2ZDlhLi5mZjBiMmY3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9rbWVtY2hlY2svc2hhZG93LmgKKysrIGIvYXJjaC94ODYvbW0va21lbWNoZWNrL3NoYWRvdy5oCkBAIC0xMSw2ICsxMSw4IEBACiB2b2lkICprbWVtY2hlY2tfc2hhZG93X2xvb2t1cCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogCiBlbnVtIGttZW1jaGVja19zaGFkb3cga21lbWNoZWNrX3NoYWRvd190ZXN0KHZvaWQgKnNoYWRvdywgdW5zaWduZWQgaW50IHNpemUpOworZW51bSBrbWVtY2hlY2tfc2hhZG93IGttZW1jaGVja19zaGFkb3dfdGVzdF9hbGwodm9pZCAqc2hhZG93LAorCQkJCQkJdW5zaWduZWQgaW50IHNpemUpOwogdm9pZCBrbWVtY2hlY2tfc2hhZG93X3NldCh2b2lkICpzaGFkb3csIHVuc2lnbmVkIGludCBzaXplKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9tbWFwLmMgYi9hcmNoL3g4Ni9tbS9tbWFwLmMKaW5kZXggYzgxOTFkZS4uMWRhYjUxOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbW1hcC5jCisrKyBiL2FyY2gveDg2L21tL21tYXAuYwpAQCAtNzEsNyArNzEsNyBAQAogCWlmIChjdXJyZW50LT5wZXJzb25hbGl0eSAmIEFERFJfQ09NUEFUX0xBWU9VVCkKIAkJcmV0dXJuIDE7CiAKLQlpZiAoY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXIgPT0gUkxJTV9JTkZJTklUWSkKKwlpZiAocmxpbWl0KFJMSU1JVF9TVEFDSykgPT0gUkxJTV9JTkZJTklUWSkKIAkJcmV0dXJuIDE7CiAKIAlyZXR1cm4gc3lzY3RsX2xlZ2FjeV92YV9sYXlvdXQ7CkBAIC05Niw3ICs5Niw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1tYXBfYmFzZSh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgZ2FwID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXI7CisJdW5zaWduZWQgbG9uZyBnYXAgPSBybGltaXQoUkxJTUlUX1NUQUNLKTsKIAogCWlmIChnYXAgPCBNSU5fR0FQKQogCQlnYXAgPSBNSU5fR0FQOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbnVtYV82NC5jIGIvYXJjaC94ODYvbW0vbnVtYV82NC5jCmluZGV4IDgzYmJjNzAuLjMzMDdlYTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL251bWFfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKQEAgLTQyNyw3ICs0MjcsNyBAQAogCSAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGJpZyBub2RlcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQgYXMgYSByZXN1bHQKIAkgKiBvZiBjb25zb2xpZGF0aW5nIHRoZSByZW1haW5kZXIuCiAJICovCi0JYmlnID0gKChzaXplICYgfkZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLKSAmIG5yX25vZGVzKSAvCisJYmlnID0gKChzaXplICYgfkZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLKSAqIG5yX25vZGVzKSAvCiAJCUZBS0VfTk9ERV9NSU5fU0laRTsKIAogCXNpemUgJj0gRkFLRV9OT0RFX01JTl9IQVNIX01BU0s7CkBAIC01MDIsNzcgKzUwMiw5OSBAQAogfQogCiAvKgotICogU3BsaXRzIG51bV9ub2RlcyBub2RlcyB1cCBlcXVhbGx5IHN0YXJ0aW5nIGF0IG5vZGVfc3RhcnQuICBUaGUgcmV0dXJuIHZhbHVlCi0gKiBpcyB0aGUgbnVtYmVyIG9mIG5vZGVzIHNwbGl0IHVwIGFuZCBhZGRyIGlzIGFkanVzdGVkIHRvIGJlIGF0IHRoZSBlbmQgb2YgdGhlCi0gKiBsYXN0IG5vZGUgYWxsb2NhdGVkLgorICogUmV0dXJucyB0aGUgZW5kIGFkZHJlc3Mgb2YgYSBub2RlIHNvIHRoYXQgdGhlcmUgaXMgYXQgbGVhc3QgYHNpemUnIGFtb3VudCBvZgorICogbm9uLXJlc2VydmVkIG1lbW9yeSBvciBgbWF4X2FkZHInIGlzIHJlYWNoZWQuCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHNwbGl0X25vZGVzX2VxdWFsbHkodTY0ICphZGRyLCB1NjQgbWF4X2FkZHIsIGludCBub2RlX3N0YXJ0LAotCQkJCSAgICAgIGludCBudW1fbm9kZXMpCitzdGF0aWMgdTY0IF9faW5pdCBmaW5kX2VuZF9vZl9ub2RlKHU2NCBzdGFydCwgdTY0IG1heF9hZGRyLCB1NjQgc2l6ZSkKIHsKLQl1bnNpZ25lZCBpbnQgYmlnOwotCXU2NCBzaXplOwotCWludCBpOworCXU2NCBlbmQgPSBzdGFydCArIHNpemU7CiAKLQlpZiAobnVtX25vZGVzIDw9IDApCi0JCXJldHVybiAtMTsKLQlpZiAobnVtX25vZGVzID4gTUFYX05VTU5PREVTKQotCQludW1fbm9kZXMgPSBNQVhfTlVNTk9ERVM7Ci0Jc2l6ZSA9IChtYXhfYWRkciAtICphZGRyIC0gZTgyMF9ob2xlX3NpemUoKmFkZHIsIG1heF9hZGRyKSkgLwotCSAgICAgICBudW1fbm9kZXM7Ci0JLyoKLQkgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBiaWcgbm9kZXMgdGhhdCBjYW4gYmUgYWxsb2NhdGVkIGFzIGEgcmVzdWx0Ci0JICogb2YgY29uc29saWRhdGluZyB0aGUgbGVmdG92ZXJzLgotCSAqLwotCWJpZyA9ICgoc2l6ZSAmIH5GQUtFX05PREVfTUlOX0hBU0hfTUFTSykgKiBudW1fbm9kZXMpIC8KLQkgICAgICBGQUtFX05PREVfTUlOX1NJWkU7Ci0KLQkvKiBSb3VuZCBkb3duIHRvIG5lYXJlc3QgRkFLRV9OT0RFX01JTl9TSVpFLiAqLwotCXNpemUgJj0gRkFLRV9OT0RFX01JTl9IQVNIX01BU0s7Ci0JaWYgKCFzaXplKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTm90IGVub3VnaCBtZW1vcnkgZm9yIGVhY2ggbm9kZS4gICIKLQkJICAgICAgICJOVU1BIGVtdWxhdGlvbiBkaXNhYmxlZC5cbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZm9yIChpID0gbm9kZV9zdGFydDsgaSA8IG51bV9ub2RlcyArIG5vZGVfc3RhcnQ7IGkrKykgewotCQl1NjQgZW5kID0gKmFkZHIgKyBzaXplOwotCi0JCWlmIChpIDwgYmlnKQotCQkJZW5kICs9IEZBS0VfTk9ERV9NSU5fU0laRTsKLQkJLyoKLQkJICogVGhlIGZpbmFsIG5vZGUgY2FuIGhhdmUgdGhlIHJlbWFpbmluZyBzeXN0ZW0gUkFNLiAgT3RoZXIKLQkJICogbm9kZXMgcmVjZWl2ZSByb3VnaGx5IHRoZSBzYW1lIGFtb3VudCBvZiBhdmFpbGFibGUgcGFnZXMuCi0JCSAqLwotCQlpZiAoaSA9PSBudW1fbm9kZXMgKyBub2RlX3N0YXJ0IC0gMSkKKwl3aGlsZSAoZW5kIC0gc3RhcnQgLSBlODIwX2hvbGVfc2l6ZShzdGFydCwgZW5kKSA8IHNpemUpIHsKKwkJZW5kICs9IEZBS0VfTk9ERV9NSU5fU0laRTsKKwkJaWYgKGVuZCA+IG1heF9hZGRyKSB7CiAJCQllbmQgPSBtYXhfYWRkcjsKLQkJZWxzZQotCQkJd2hpbGUgKGVuZCAtICphZGRyIC0gZTgyMF9ob2xlX3NpemUoKmFkZHIsIGVuZCkgPAotCQkJICAgICAgIHNpemUpIHsKLQkJCQllbmQgKz0gRkFLRV9OT0RFX01JTl9TSVpFOwotCQkJCWlmIChlbmQgPiBtYXhfYWRkcikgewotCQkJCQllbmQgPSBtYXhfYWRkcjsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQlpZiAoc2V0dXBfbm9kZV9yYW5nZShpLCBhZGRyLCBlbmQgLSAqYWRkciwgbWF4X2FkZHIpIDwgMCkKIAkJCWJyZWFrOworCQl9CiAJfQotCXJldHVybiBpIC0gbm9kZV9zdGFydCArIDE7CisJcmV0dXJuIGVuZDsKIH0KIAogLyoKLSAqIFNwbGl0cyB0aGUgcmVtYWluaW5nIHN5c3RlbSBSQU0gaW50byBjaHVua3Mgb2Ygc2l6ZS4gIFRoZSByZW1haW5pbmcgbWVtb3J5IGlzCi0gKiBhbHdheXMgYXNzaWduZWQgdG8gYSBmaW5hbCBub2RlIGFuZCBjYW4gYmUgYXN5bW1ldHJpYy4gIFJldHVybnMgdGhlIG51bWJlciBvZgotICogbm9kZXMgc3BsaXQuCisgKiBTZXRzIHVwIGZha2Ugbm9kZXMgb2YgYHNpemUnIGludGVybGVhdmVkIG92ZXIgcGh5c2ljYWwgbm9kZXMgcmFuZ2luZyBmcm9tCisgKiBgYWRkcicgdG8gYG1heF9hZGRyJy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBub2RlcyBhbGxvY2F0ZWQuCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHNwbGl0X25vZGVzX2J5X3NpemUodTY0ICphZGRyLCB1NjQgbWF4X2FkZHIsIGludCBub2RlX3N0YXJ0LAotCQkJCSAgICAgIHU2NCBzaXplKQorc3RhdGljIGludCBfX2luaXQgc3BsaXRfbm9kZXNfc2l6ZV9pbnRlcmxlYXZlKHU2NCBhZGRyLCB1NjQgbWF4X2FkZHIsIHU2NCBzaXplKQogewotCWludCBpID0gbm9kZV9zdGFydDsKLQlzaXplID0gKHNpemUgPDwgMjApICYgRkFLRV9OT0RFX01JTl9IQVNIX01BU0s7Ci0Jd2hpbGUgKCFzZXR1cF9ub2RlX3JhbmdlKGkrKywgYWRkciwgc2l6ZSwgbWF4X2FkZHIpKQotCQk7Ci0JcmV0dXJuIGkgLSBub2RlX3N0YXJ0OworCW5vZGVtYXNrX3QgcGh5c25vZGVfbWFzayA9IE5PREVfTUFTS19OT05FOworCXU2NCBtaW5fc2l6ZTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKworCWlmICghc2l6ZSkKKwkJcmV0dXJuIC0xOworCS8qCisJICogVGhlIGxpbWl0IG9uIGVtdWxhdGVkIG5vZGVzIGlzIE1BWF9OVU1OT0RFUywgc28gdGhlIHNpemUgcGVyIG5vZGUgaXMKKwkgKiBpbmNyZWFzZWQgYWNjb3JkaW5nbHkgaWYgdGhlIHJlcXVlc3RlZCBzaXplIGlzIHRvbyBzbWFsbC4gIFRoaXMKKwkgKiBjcmVhdGVzIGEgdW5pZm9ybSBkaXN0cmlidXRpb24gb2Ygbm9kZSBzaXplcyBhY3Jvc3MgdGhlIGVudGlyZQorCSAqIG1hY2hpbmUgKGJ1dCBub3QgbmVjZXNzYXJpbHkgb3ZlciBwaHlzaWNhbCBub2RlcykuCisJICovCisJbWluX3NpemUgPSAobWF4X2FkZHIgLSBhZGRyIC0gZTgyMF9ob2xlX3NpemUoYWRkciwgbWF4X2FkZHIpKSAvCisJCQkJCQlNQVhfTlVNTk9ERVM7CisJbWluX3NpemUgPSBtYXgobWluX3NpemUsIEZBS0VfTk9ERV9NSU5fU0laRSk7CisJaWYgKChtaW5fc2l6ZSAmIEZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLKSA8IG1pbl9zaXplKQorCQltaW5fc2l6ZSA9IChtaW5fc2l6ZSArIEZBS0VfTk9ERV9NSU5fU0laRSkgJgorCQkJCQkJRkFLRV9OT0RFX01JTl9IQVNIX01BU0s7CisJaWYgKHNpemUgPCBtaW5fc2l6ZSkgeworCQlwcl9lcnIoIkZha2Ugbm9kZSBzaXplICVMdU1CIHRvbyBzbWFsbCwgaW5jcmVhc2luZyB0byAlTHVNQlxuIiwKKwkJCXNpemUgPj4gMjAsIG1pbl9zaXplID4+IDIwKTsKKwkJc2l6ZSA9IG1pbl9zaXplOworCX0KKwlzaXplICY9IEZBS0VfTk9ERV9NSU5fSEFTSF9NQVNLOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1OT0RFUzsgaSsrKQorCQlpZiAocGh5c25vZGVzW2ldLnN0YXJ0ICE9IHBoeXNub2Rlc1tpXS5lbmQpCisJCQlub2RlX3NldChpLCBwaHlzbm9kZV9tYXNrKTsKKwkvKgorCSAqIEZpbGwgcGh5c2ljYWwgbm9kZXMgd2l0aCBmYWtlIG5vZGVzIG9mIHNpemUgdW50aWwgdGhlcmUgaXMgbm8gbWVtb3J5CisJICogbGVmdCBvbiBhbnkgb2YgdGhlbS4KKwkgKi8KKwl3aGlsZSAobm9kZXNfd2VpZ2h0KHBoeXNub2RlX21hc2spKSB7CisJCWZvcl9lYWNoX25vZGVfbWFzayhpLCBwaHlzbm9kZV9tYXNrKSB7CisJCQl1NjQgZG1hMzJfZW5kID0gTUFYX0RNQTMyX1BGTiA8PCBQQUdFX1NISUZUOworCQkJdTY0IGVuZDsKKworCQkJZW5kID0gZmluZF9lbmRfb2Zfbm9kZShwaHlzbm9kZXNbaV0uc3RhcnQsCisJCQkJCQlwaHlzbm9kZXNbaV0uZW5kLCBzaXplKTsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSB3b24ndCBiZSBhdCBsZWFzdCBGQUtFX05PREVfTUlOX1NJWkUgb2YKKwkJCSAqIG5vbi1yZXNlcnZlZCBtZW1vcnkgaW4gWk9ORV9ETUEzMiBmb3IgdGhlIG5leHQgbm9kZSwKKwkJCSAqIHRoaXMgb25lIG11c3QgZXh0ZW5kIHRvIHRoZSBib3VuZGFyeS4KKwkJCSAqLworCQkJaWYgKGVuZCA8IGRtYTMyX2VuZCAmJiBkbWEzMl9lbmQgLSBlbmQgLQorCQkJICAgIGU4MjBfaG9sZV9zaXplKGVuZCwgZG1hMzJfZW5kKSA8IEZBS0VfTk9ERV9NSU5fU0laRSkKKwkJCQllbmQgPSBkbWEzMl9lbmQ7CisKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSB3b24ndCBiZSBlbm91Z2ggbm9uLXJlc2VydmVkIG1lbW9yeSBmb3IgdGhlCisJCQkgKiBuZXh0IG5vZGUsIHRoaXMgb25lIG11c3QgZXh0ZW5kIHRvIHRoZSBlbmQgb2YgdGhlCisJCQkgKiBwaHlzaWNhbCBub2RlLgorCQkJICovCisJCQlpZiAocGh5c25vZGVzW2ldLmVuZCAtIGVuZCAtCisJCQkgICAgZTgyMF9ob2xlX3NpemUoZW5kLCBwaHlzbm9kZXNbaV0uZW5kKSA8IHNpemUpCisJCQkJZW5kID0gcGh5c25vZGVzW2ldLmVuZDsKKworCQkJLyoKKwkJCSAqIFNldHVwIHRoZSBmYWtlIG5vZGUgdGhhdCB3aWxsIGJlIGFsbG9jYXRlZCBhcyBib290bWVtCisJCQkgKiBsYXRlci4gIElmIHNldHVwX25vZGVfcmFuZ2UoKSByZXR1cm5zIG5vbi16ZXJvLCB0aGVyZQorCQkJICogaXMgbm8gbW9yZSBtZW1vcnkgYXZhaWxhYmxlIG9uIHRoaXMgcGh5c2ljYWwgbm9kZS4KKwkJCSAqLworCQkJaWYgKHNldHVwX25vZGVfcmFuZ2UocmV0KyssICZwaHlzbm9kZXNbaV0uc3RhcnQsCisJCQkJCQllbmQgLSBwaHlzbm9kZXNbaV0uc3RhcnQsCisJCQkJCQlwaHlzbm9kZXNbaV0uZW5kKSA8IDApCisJCQkJbm9kZV9jbGVhcihpLCBwaHlzbm9kZV9tYXNrKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtNTgyLDg3ICs2MDQsMzIgQEAKIHN0YXRpYyBpbnQgX19pbml0IG51bWFfZW11bGF0aW9uKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJdW5zaWduZWQgbG9uZyBsYXN0X3BmbiwgaW50IGFjcGksIGludCBrOCkKIHsKLQl1NjQgc2l6ZSwgYWRkciA9IHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZUOworCXU2NCBhZGRyID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7CiAJdTY0IG1heF9hZGRyID0gbGFzdF9wZm4gPDwgUEFHRV9TSElGVDsKLQlpbnQgbnVtX25vZGVzID0gMCwgbnVtID0gMCwgY29lZmZfZmxhZywgY29lZmYgPSAtMSwgaTsKIAlpbnQgbnVtX3BoeXNfbm9kZXM7CisJaW50IG51bV9ub2RlczsKKwlpbnQgaTsKIAogCW51bV9waHlzX25vZGVzID0gc2V0dXBfcGh5c25vZGVzKGFkZHIsIG1heF9hZGRyLCBhY3BpLCBrOCk7CiAJLyoKLQkgKiBJZiB0aGUgbnVtYT1mYWtlIGNvbW1hbmQtbGluZSBpcyBqdXN0IGEgc2luZ2xlIG51bWJlciBOLCBzcGxpdCB0aGUKLQkgKiBzeXN0ZW0gUkFNIGludG8gTiBmYWtlIG5vZGVzLgorCSAqIElmIHRoZSBudW1hPWZha2UgY29tbWFuZC1saW5lIGNvbnRhaW5zIGEgJ00nIG9yICdHJywgaXQgcmVwcmVzZW50cworCSAqIHRoZSBmaXhlZCBub2RlIHNpemUuICBPdGhlcndpc2UsIGlmIGl0IGlzIGp1c3QgYSBzaW5nbGUgbnVtYmVyIE4sCisJICogc3BsaXQgdGhlIHN5c3RlbSBSQU0gaW50byBOIGZha2Ugbm9kZXMuCiAJICovCi0JaWYgKCFzdHJjaHIoY21kbGluZSwgJyonKSAmJiAhc3RyY2hyKGNtZGxpbmUsICcsJykpIHsKLQkJbG9uZyBuID0gc2ltcGxlX3N0cnRvbChjbWRsaW5lLCBOVUxMLCAwKTsKKwlpZiAoc3RyY2hyKGNtZGxpbmUsICdNJykgfHwgc3RyY2hyKGNtZGxpbmUsICdHJykpIHsKKwkJdTY0IHNpemU7CiAKLQkJbnVtX25vZGVzID0gc3BsaXRfbm9kZXNfaW50ZXJsZWF2ZShhZGRyLCBtYXhfYWRkciwKLQkJCQkJCQludW1fcGh5c19ub2Rlcywgbik7Ci0JCWlmIChudW1fbm9kZXMgPCAwKQotCQkJcmV0dXJuIG51bV9ub2RlczsKLQkJZ290byBvdXQ7CisJCXNpemUgPSBtZW1wYXJzZShjbWRsaW5lLCAmY21kbGluZSk7CisJCW51bV9ub2RlcyA9IHNwbGl0X25vZGVzX3NpemVfaW50ZXJsZWF2ZShhZGRyLCBtYXhfYWRkciwgc2l6ZSk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBuOworCisJCW4gPSBzaW1wbGVfc3RydG91bChjbWRsaW5lLCBOVUxMLCAwKTsKKwkJbnVtX25vZGVzID0gc3BsaXRfbm9kZXNfaW50ZXJsZWF2ZShhZGRyLCBtYXhfYWRkciwgbnVtX3BoeXNfbm9kZXMsIG4pOwogCX0KIAotCS8qIFBhcnNlIHRoZSBjb21tYW5kIGxpbmUuICovCi0JZm9yIChjb2VmZl9mbGFnID0gMDsgOyBjbWRsaW5lKyspIHsKLQkJaWYgKCpjbWRsaW5lICYmIGlzZGlnaXQoKmNtZGxpbmUpKSB7Ci0JCQludW0gPSBudW0gKiAxMCArICpjbWRsaW5lIC0gJzAnOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCpjbWRsaW5lID09ICcqJykgewotCQkJaWYgKG51bSA+IDApCi0JCQkJY29lZmYgPSBudW07Ci0JCQljb2VmZl9mbGFnID0gMTsKLQkJfQotCQlpZiAoISpjbWRsaW5lIHx8ICpjbWRsaW5lID09ICcsJykgewotCQkJaWYgKCFjb2VmZl9mbGFnKQotCQkJCWNvZWZmID0gMTsKLQkJCS8qCi0JCQkgKiBSb3VuZCBkb3duIHRvIHRoZSBuZWFyZXN0IEZBS0VfTk9ERV9NSU5fU0laRS4KLQkJCSAqIENvbW1hbmQtbGluZSBjb2VmZmljaWVudHMgYXJlIGluIG1lZ2FieXRlcy4KLQkJCSAqLwotCQkJc2l6ZSA9ICgodTY0KW51bSA8PCAyMCkgJiBGQUtFX05PREVfTUlOX0hBU0hfTUFTSzsKLQkJCWlmIChzaXplKQotCQkJCWZvciAoaSA9IDA7IGkgPCBjb2VmZjsgaSsrLCBudW1fbm9kZXMrKykKLQkJCQkJaWYgKHNldHVwX25vZGVfcmFuZ2UobnVtX25vZGVzLCAmYWRkciwKLQkJCQkJCXNpemUsIG1heF9hZGRyKSA8IDApCi0JCQkJCQlnb3RvIGRvbmU7Ci0JCQlpZiAoISpjbWRsaW5lKQotCQkJCWJyZWFrOwotCQkJY29lZmZfZmxhZyA9IDA7Ci0JCQljb2VmZiA9IC0xOwotCQl9Ci0JCW51bSA9IDA7Ci0JfQotZG9uZToKLQlpZiAoIW51bV9ub2RlcykKLQkJcmV0dXJuIC0xOwotCS8qIEZpbGwgcmVtYWluZGVyIG9mIHN5c3RlbSBSQU0sIGlmIGFwcHJvcHJpYXRlLiAqLwotCWlmIChhZGRyIDwgbWF4X2FkZHIpIHsKLQkJaWYgKGNvZWZmX2ZsYWcgJiYgY29lZmYgPCAwKSB7Ci0JCQkvKiBTcGxpdCByZW1haW5pbmcgbm9kZXMgaW50byBudW0tc2l6ZWQgY2h1bmtzICovCi0JCQludW1fbm9kZXMgKz0gc3BsaXRfbm9kZXNfYnlfc2l6ZSgmYWRkciwgbWF4X2FkZHIsCi0JCQkJCQkJIG51bV9ub2RlcywgbnVtKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCXN3aXRjaCAoKihjbWRsaW5lIC0gMSkpIHsKLQkJY2FzZSAnKic6Ci0JCQkvKiBTcGxpdCByZW1haW5pbmcgbm9kZXMgaW50byBjb2VmZiBjaHVua3MgKi8KLQkJCWlmIChjb2VmZiA8PSAwKQotCQkJCWJyZWFrOwotCQkJbnVtX25vZGVzICs9IHNwbGl0X25vZGVzX2VxdWFsbHkoJmFkZHIsIG1heF9hZGRyLAotCQkJCQkJCSBudW1fbm9kZXMsIGNvZWZmKTsKLQkJCWJyZWFrOwotCQljYXNlICcsJzoKLQkJCS8qIERvIG5vdCBhbGxvY2F0ZSByZW1haW5pbmcgc3lzdGVtIFJBTSAqLwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBHaXZlIG9uZSBmaW5hbCBub2RlICovCi0JCQlzZXR1cF9ub2RlX3JhbmdlKG51bV9ub2RlcywgJmFkZHIsIG1heF9hZGRyIC0gYWRkciwKLQkJCQkJIG1heF9hZGRyKTsKLQkJCW51bV9ub2RlcysrOwotCQl9Ci0JfQotb3V0OgorCWlmIChudW1fbm9kZXMgPCAwKQorCQlyZXR1cm4gbnVtX25vZGVzOwogCW1lbW5vZGVfc2hpZnQgPSBjb21wdXRlX2hhc2hfc2hpZnQobm9kZXMsIG51bV9ub2RlcywgTlVMTCk7CiAJaWYgKG1lbW5vZGVfc2hpZnQgPCAwKSB7CiAJCW1lbW5vZGVfc2hpZnQgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jCmluZGV4IGVkMzRmNWUuLmM5YmE5ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BndGFibGUuYworKysgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMKQEAgLTYsNiArNiwxNCBAQAogCiAjZGVmaW5lIFBHQUxMT0NfR0ZQIEdGUF9LRVJORUwgfCBfX0dGUF9OT1RSQUNLIHwgX19HRlBfUkVQRUFUIHwgX19HRlBfWkVSTwogCisjaWZkZWYgQ09ORklHX0hJR0hQVEUKKyNkZWZpbmUgUEdBTExPQ19VU0VSX0dGUCBfX0dGUF9ISUdITUVNCisjZWxzZQorI2RlZmluZSBQR0FMTE9DX1VTRVJfR0ZQIDAKKyNlbmRpZgorCitnZnBfdCBfX3VzZXJwdGVfYWxsb2NfZ2ZwID0gUEdBTExPQ19HRlAgfCBQR0FMTE9DX1VTRVJfR0ZQOworCiBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlyZXR1cm4gKHB0ZV90ICopX19nZXRfZnJlZV9wYWdlKFBHQUxMT0NfR0ZQKTsKQEAgLTE1LDE2ICsyMywyOSBAQAogewogCXN0cnVjdCBwYWdlICpwdGU7CiAKLSNpZmRlZiBDT05GSUdfSElHSFBURQotCXB0ZSA9IGFsbG9jX3BhZ2VzKFBHQUxMT0NfR0ZQIHwgX19HRlBfSElHSE1FTSwgMCk7Ci0jZWxzZQotCXB0ZSA9IGFsbG9jX3BhZ2VzKFBHQUxMT0NfR0ZQLCAwKTsKLSNlbmRpZgorCXB0ZSA9IGFsbG9jX3BhZ2VzKF9fdXNlcnB0ZV9hbGxvY19nZnAsIDApOwogCWlmIChwdGUpCiAJCXBndGFibGVfcGFnZV9jdG9yKHB0ZSk7CiAJcmV0dXJuIHB0ZTsKIH0KIAorc3RhdGljIGludCBfX2luaXQgc2V0dXBfdXNlcnB0ZShjaGFyICphcmcpCit7CisJaWYgKCFhcmcpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiAidXNlcnB0ZT1ub2hpZ2giIGRpc2FibGVzIGFsbG9jYXRpb24gb2YgdXNlciBwYWdldGFibGVzIGluCisJICogaGlnaCBtZW1vcnkuCisJICovCisJaWYgKHN0cmNtcChhcmcsICJub2hpZ2giKSA9PSAwKQorCQlfX3VzZXJwdGVfYWxsb2NfZ2ZwICY9IH5fX0dGUF9ISUdITUVNOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgidXNlcnB0ZSIsIHNldHVwX3VzZXJwdGUpOworCiB2b2lkIF9fX3B0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcGFnZSAqcHRlKQogewogCXBndGFibGVfcGFnZV9kdG9yKHB0ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS90bGIuYyBiL2FyY2gveDg2L21tL3RsYi5jCmluZGV4IDY1YjU4ZTQuLjQyNmYzYTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3RsYi5jCisrKyBiL2FyY2gveDg2L21tL3RsYi5jCkBAIC00MSw3ICs0MSw3IEBACiAJc3RydWN0IHsKIAkJc3RydWN0IG1tX3N0cnVjdCAqZmx1c2hfbW07CiAJCXVuc2lnbmVkIGxvbmcgZmx1c2hfdmE7Ci0JCXNwaW5sb2NrX3QgdGxic3RhdGVfbG9jazsKKwkJcmF3X3NwaW5sb2NrX3QgdGxic3RhdGVfbG9jazsKIAkJREVDTEFSRV9CSVRNQVAoZmx1c2hfY3B1bWFzaywgTlJfQ1BVUyk7CiAJfTsKIAljaGFyIHBhZFtJTlRFUk5PREVfQ0FDSEVfQllURVNdOwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJICogbnVtX29ubGluZV9jcHVzKCkgPD0gTlVNX0lOVkFMSURBVEVfVExCX1ZFQ1RPUlMsIGJ1dCBpdCBpcwogCSAqIHByb2JhYmx5IG5vdCB3b3J0aCBjaGVja2luZyB0aGlzIGZvciBhIGNhY2hlLWhvdCBsb2NrLgogCSAqLwotCXNwaW5fbG9jaygmZi0+dGxic3RhdGVfbG9jayk7CisJcmF3X3NwaW5fbG9jaygmZi0+dGxic3RhdGVfbG9jayk7CiAKIAlmLT5mbHVzaF9tbSA9IG1tOwogCWYtPmZsdXNoX3ZhID0gdmE7CkBAIC0xOTksNyArMTk5LDcgQEAKIAogCWYtPmZsdXNoX21tID0gTlVMTDsKIAlmLT5mbHVzaF92YSA9IDA7Ci0Jc3Bpbl91bmxvY2soJmYtPnRsYnN0YXRlX2xvY2spOworCXJhd19zcGluX3VubG9jaygmZi0+dGxic3RhdGVfbG9jayk7CiB9CiAKIHZvaWQgbmF0aXZlX2ZsdXNoX3RsYl9vdGhlcnMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCkBAIC0yMjMsNyArMjIzLDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZsdXNoX3N0YXRlKTsgaSsrKQotCQlzcGluX2xvY2tfaW5pdCgmZmx1c2hfc3RhdGVbaV0udGxic3RhdGVfbG9jayk7CisJCXJhd19zcGluX2xvY2tfaW5pdCgmZmx1c2hfc3RhdGVbaV0udGxic3RhdGVfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL25taV9pbnQuYyBiL2FyY2gveDg2L29wcm9maWxlL25taV9pbnQuYwppbmRleCAzMzQ3ZjY5Li4yYzUwNWVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXBlcl9jcHUoY3B1X21zcnMsIGkpLm11bHRpcGxleCA9Ci0JCQlrbWFsbG9jKG11bHRpcGxleF9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCWt6YWxsb2MobXVsdGlwbGV4X3NpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoIXBlcl9jcHUoY3B1X21zcnMsIGkpLm11bHRpcGxleCkKIAkJCXJldHVybiAwOwogCX0KQEAgLTE3OSw3ICsxNzksNiBAQAogCQlpZiAoY291bnRlcl9jb25maWdbaV0uZW5hYmxlZCkgewogCQkJbXVsdGlwbGV4W2ldLnNhdmVkID0gLSh1NjQpY291bnRlcl9jb25maWdbaV0uY291bnQ7CiAJCX0gZWxzZSB7Ci0JCQltdWx0aXBsZXhbaV0uYWRkciAgPSAwOwogCQkJbXVsdGlwbGV4W2ldLnNhdmVkID0gMDsKIAkJfQogCX0KQEAgLTE4OSwyNSArMTg4LDI3IEBACiAKIHN0YXRpYyB2b2lkIG5taV9jcHVfc2F2ZV9tcHhfcmVnaXN0ZXJzKHN0cnVjdCBvcF9tc3JzICptc3JzKQogeworCXN0cnVjdCBvcF9tc3IgKmNvdW50ZXJzID0gbXNycy0+Y291bnRlcnM7CiAJc3RydWN0IG9wX21zciAqbXVsdGlwbGV4ID0gbXNycy0+bXVsdGlwbGV4OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG1vZGVsLT5udW1fY291bnRlcnM7ICsraSkgewogCQlpbnQgdmlydCA9IG9wX3g4Nl9waHlzX3RvX3ZpcnQoaSk7Ci0JCWlmIChtdWx0aXBsZXhbdmlydF0uYWRkcikKLQkJCXJkbXNybChtdWx0aXBsZXhbdmlydF0uYWRkciwgbXVsdGlwbGV4W3ZpcnRdLnNhdmVkKTsKKwkJaWYgKGNvdW50ZXJzW2ldLmFkZHIpCisJCQlyZG1zcmwoY291bnRlcnNbaV0uYWRkciwgbXVsdGlwbGV4W3ZpcnRdLnNhdmVkKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIG5taV9jcHVfcmVzdG9yZV9tcHhfcmVnaXN0ZXJzKHN0cnVjdCBvcF9tc3JzICptc3JzKQogeworCXN0cnVjdCBvcF9tc3IgKmNvdW50ZXJzID0gbXNycy0+Y291bnRlcnM7CiAJc3RydWN0IG9wX21zciAqbXVsdGlwbGV4ID0gbXNycy0+bXVsdGlwbGV4OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG1vZGVsLT5udW1fY291bnRlcnM7ICsraSkgewogCQlpbnQgdmlydCA9IG9wX3g4Nl9waHlzX3RvX3ZpcnQoaSk7Ci0JCWlmIChtdWx0aXBsZXhbdmlydF0uYWRkcikKLQkJCXdybXNybChtdWx0aXBsZXhbdmlydF0uYWRkciwgbXVsdGlwbGV4W3ZpcnRdLnNhdmVkKTsKKwkJaWYgKGNvdW50ZXJzW2ldLmFkZHIpCisJCQl3cm1zcmwoY291bnRlcnNbaV0uYWRkciwgbXVsdGlwbGV4W3ZpcnRdLnNhdmVkKTsKIAl9CiB9CiAKQEAgLTMwMywxMSArMzA0LDExIEBACiAKIAlpbnQgaTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQlwZXJfY3B1KGNwdV9tc3JzLCBpKS5jb3VudGVycyA9IGttYWxsb2MoY291bnRlcnNfc2l6ZSwKKwkJcGVyX2NwdShjcHVfbXNycywgaSkuY291bnRlcnMgPSBremFsbG9jKGNvdW50ZXJzX3NpemUsCiAJCQkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmICghcGVyX2NwdShjcHVfbXNycywgaSkuY291bnRlcnMpCiAJCQlyZXR1cm4gMDsKLQkJcGVyX2NwdShjcHVfbXNycywgaSkuY29udHJvbHMgPSBrbWFsbG9jKGNvbnRyb2xzX3NpemUsCisJCXBlcl9jcHUoY3B1X21zcnMsIGkpLmNvbnRyb2xzID0ga3phbGxvYyhjb250cm9sc19zaXplLAogCQkJCQkJCUdGUF9LRVJORUwpOwogCQlpZiAoIXBlcl9jcHUoY3B1X21zcnMsIGkpLmNvbnRyb2xzKQogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hbWQuYyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCmluZGV4IDM5Njg2YzIuLjZhNTgyNTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCkBAIC0yMiw2ICsyMiw5IEBACiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vbm1pLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KIAogI2luY2x1ZGUgIm9wX3g4Nl9tb2RlbC5oIgogI2luY2x1ZGUgIm9wX2NvdW50ZXIuaCIKQEAgLTQzLDE1ICs0NiwxMyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyByZXNldF92YWx1ZVtOVU1fVklSVF9DT1VOVEVSU107CiAKLSNpZmRlZiBDT05GSUdfT1BST0ZJTEVfSUJTCi0KIC8qIElic0ZldGNoQ3RsIGJpdHMvbWFza3MgKi8KICNkZWZpbmUgSUJTX0ZFVENIX1JBTkRfRU4JCSgxVUxMPDw1NykKICNkZWZpbmUgSUJTX0ZFVENIX1ZBTAkJCSgxVUxMPDw0OSkKICNkZWZpbmUgSUJTX0ZFVENIX0VOQUJMRQkJKDFVTEw8PDQ4KQogI2RlZmluZSBJQlNfRkVUQ0hfQ05UX01BU0sJCTB4RkZGRjAwMDBVTEwKIAotLypJYnNPcEN0bCBiaXRzICovCisvKiBJYnNPcEN0bCBiaXRzICovCiAjZGVmaW5lIElCU19PUF9DTlRfQ1RMCQkJKDFVTEw8PDE5KQogI2RlZmluZSBJQlNfT1BfVkFMCQkJKDFVTEw8PDE4KQogI2RlZmluZSBJQlNfT1BfRU5BQkxFCQkJKDFVTEw8PDE3KQpAQCAtNTksNyArNjAsNyBAQAogI2RlZmluZSBJQlNfRkVUQ0hfU0laRQkJCTYKICNkZWZpbmUgSUJTX09QX1NJWkUJCQkxMgogCi1zdGF0aWMgaW50IGhhc19pYnM7CS8qIEFNRCBGYW1pbHkxMGggYW5kIGxhdGVyICovCitzdGF0aWMgdTMyIGlic19jYXBzOwogCiBzdHJ1Y3Qgb3BfaWJzX2NvbmZpZyB7CiAJdW5zaWduZWQgbG9uZyBvcF9lbmFibGVkOwpAQCAtNzEsMjQgKzcyLDUyIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9wX2lic19jb25maWcgaWJzX2NvbmZpZzsKK3N0YXRpYyB1NjQgaWJzX29wX2N0bDsKIAotI2VuZGlmCisvKgorICogSUJTIGNwdWlkIGZlYXR1cmUgZGV0ZWN0aW9uCisgKi8KKworI2RlZmluZSBJQlNfQ1BVSURfRkVBVFVSRVMgICAgICAweDgwMDAwMDFiCisKKy8qCisgKiBTYW1lIGJpdCBtYXNrIGFzIGZvciBJQlMgY3B1aWQgZmVhdHVyZSBmbGFncyAoRm44MDAwXzAwMUJfRUFYKSwgYnV0CisgKiBiaXQgMCBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBleGlzdGVuY2Ugb2YgSUJTLgorICovCisjZGVmaW5lIElCU19DQVBTX0FWQUlMCQkJKDFMTDw8MCkKKyNkZWZpbmUgSUJTX0NBUFNfUkRXUk9QQ05UCQkoMUxMPDwzKQorI2RlZmluZSBJQlNfQ0FQU19PUENOVAkJCSgxTEw8PDQpCisKKy8qCisgKiBJQlMgcmFuZG9taXphdGlvbiBtYWNyb3MKKyAqLworI2RlZmluZSBJQlNfUkFORE9NX0JJVFMJCQkxMgorI2RlZmluZSBJQlNfUkFORE9NX01BU0sJCQkoKDFVTEwgPDwgSUJTX1JBTkRPTV9CSVRTKSAtIDEpCisjZGVmaW5lIElCU19SQU5ET01fTUFYQ05UX09GRlNFVAkoMVVMTCA8PCAoSUJTX1JBTkRPTV9CSVRTIC0gNSkpCisKK3N0YXRpYyB1MzIgZ2V0X2lic19jYXBzKHZvaWQpCit7CisJdTMyIGlic19jYXBzOworCXVuc2lnbmVkIGludCBtYXhfbGV2ZWw7CisKKwlpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlMpKQorCQlyZXR1cm4gMDsKKworCS8qIGNoZWNrIElCUyBjcHVpZCBmZWF0dXJlIGZsYWdzICovCisJbWF4X2xldmVsID0gY3B1aWRfZWF4KDB4ODAwMDAwMDApOworCWlmIChtYXhfbGV2ZWwgPCBJQlNfQ1BVSURfRkVBVFVSRVMpCisJCXJldHVybiBJQlNfQ0FQU19BVkFJTDsKKworCWlic19jYXBzID0gY3B1aWRfZWF4KElCU19DUFVJRF9GRUFUVVJFUyk7CisJaWYgKCEoaWJzX2NhcHMgJiBJQlNfQ0FQU19BVkFJTCkpCisJCS8qIGNwdWlkIGZsYWdzIG5vdCB2YWxpZCAqLworCQlyZXR1cm4gSUJTX0NBUFNfQVZBSUw7CisKKwlyZXR1cm4gaWJzX2NhcHM7Cit9CiAKICNpZmRlZiBDT05GSUdfT1BST0ZJTEVfRVZFTlRfTVVMVElQTEVYCiAKLXN0YXRpYyB2b2lkIG9wX211eF9maWxsX2luX2FkZHJlc3NlcyhzdHJ1Y3Qgb3BfbXNycyAqIGNvbnN0IG1zcnMpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX1ZJUlRfQ09VTlRFUlM7IGkrKykgewotCQlpbnQgaHdfY291bnRlciA9IG9wX3g4Nl92aXJ0X3RvX3BoeXMoaSk7Ci0JCWlmIChyZXNlcnZlX3BlcmZjdHJfbm1pKE1TUl9LN19QRVJGQ1RSMCArIGkpKQotCQkJbXNycy0+bXVsdGlwbGV4W2ldLmFkZHIgPSBNU1JfSzdfUEVSRkNUUjAgKyBod19jb3VudGVyOwotCQllbHNlCi0JCQltc3JzLT5tdWx0aXBsZXhbaV0uYWRkciA9IDA7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBvcF9tdXhfc3dpdGNoX2N0cmwoc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0ICptb2RlbCwKIAkJCSAgICAgICBzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCiB7CkBAIC05OCw3ICsxMjcsNyBAQAogCS8qIGVuYWJsZSBhY3RpdmUgY291bnRlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKIAkJaW50IHZpcnQgPSBvcF94ODZfcGh5c190b192aXJ0KGkpOwotCQlpZiAoIWNvdW50ZXJfY29uZmlnW3ZpcnRdLmVuYWJsZWQpCisJCWlmICghcmVzZXRfdmFsdWVbdmlydF0pCiAJCQljb250aW51ZTsKIAkJcmRtc3JsKG1zcnMtPmNvbnRyb2xzW2ldLmFkZHIsIHZhbCk7CiAJCXZhbCAmPSBtb2RlbC0+cmVzZXJ2ZWQ7CkBAIC0xMDcsMTAgKzEzNiw2IEBACiAJfQogfQogCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb3BfbXV4X2ZpbGxfaW5fYWRkcmVzc2VzKHN0cnVjdCBvcF9tc3JzICogY29uc3QgbXNycykgeyB9Ci0KICNlbmRpZgogCiAvKiBmdW5jdGlvbnMgZm9yIG9wX2FtZF9zcGVjICovCkBAIC0xMjIsMTggKzE0NywxMiBAQAogCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7IGkrKykgewogCQlpZiAocmVzZXJ2ZV9wZXJmY3RyX25taShNU1JfSzdfUEVSRkNUUjAgKyBpKSkKIAkJCW1zcnMtPmNvdW50ZXJzW2ldLmFkZHIgPSBNU1JfSzdfUEVSRkNUUjAgKyBpOwotCQllbHNlCi0JCQltc3JzLT5jb3VudGVyc1tpXS5hZGRyID0gMDsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPTlRST0xTOyBpKyspIHsKIAkJaWYgKHJlc2VydmVfZXZudHNlbF9ubWkoTVNSX0s3X0VWTlRTRUwwICsgaSkpCiAJCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gTVNSX0s3X0VWTlRTRUwwICsgaTsKLQkJZWxzZQotCQkJbXNycy0+Y29udHJvbHNbaV0uYWRkciA9IDA7CiAJfQotCi0Jb3BfbXV4X2ZpbGxfaW5fYWRkcmVzc2VzKG1zcnMpOwogfQogCiBzdGF0aWMgdm9pZCBvcF9hbWRfc2V0dXBfY3RycyhzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3QgKm1vZGVsLApAQCAtMTQ0LDcgKzE2Myw4IEBACiAKIAkvKiBzZXR1cCByZXNldF92YWx1ZSAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fVklSVF9DT1VOVEVSUzsgKytpKSB7Ci0JCWlmIChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkKQorCQlpZiAoY291bnRlcl9jb25maWdbaV0uZW5hYmxlZAorCQkgICAgJiYgbXNycy0+Y291bnRlcnNbb3BfeDg2X3ZpcnRfdG9fcGh5cyhpKV0uYWRkcikKIAkJCXJlc2V0X3ZhbHVlW2ldID0gY291bnRlcl9jb25maWdbaV0uY291bnQ7CiAJCWVsc2UKIAkJCXJlc2V0X3ZhbHVlW2ldID0gMDsKQEAgLTE1Miw5ICsxNzIsMTggQEAKIAogCS8qIGNsZWFyIGFsbCBjb3VudGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09OVFJPTFM7ICsraSkgewotCQlpZiAodW5saWtlbHkoIW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIpKQorCQlpZiAodW5saWtlbHkoIW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIpKSB7CisJCQlpZiAoY291bnRlcl9jb25maWdbaV0uZW5hYmxlZCAmJiAhc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJCS8qCisJCQkJICogY291bnRlciBpcyByZXNlcnZlZCwgdGhpcyBpcyBvbiBhbGwKKwkJCQkgKiBjcHVzLCBzbyByZXBvcnQgb25seSBmb3IgY3B1ICMwCisJCQkJICovCisJCQkJb3BfeDg2X3dhcm5fcmVzZXJ2ZWQoaSk7CiAJCQljb250aW51ZTsKKwkJfQogCQlyZG1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKKwkJaWYgKHZhbCAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFKQorCQkJb3BfeDg2X3dhcm5faW5fdXNlKGkpOwogCQl2YWwgJj0gbW9kZWwtPnJlc2VydmVkOwogCQl3cm1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKIAl9CkBAIC0xNjksOSArMTk4LDcgQEAKIAkvKiBlbmFibGUgYWN0aXZlIGNvdW50ZXJzICovCiAJZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7CiAJCWludCB2aXJ0ID0gb3BfeDg2X3BoeXNfdG9fdmlydChpKTsKLQkJaWYgKCFjb3VudGVyX2NvbmZpZ1t2aXJ0XS5lbmFibGVkKQotCQkJY29udGludWU7Ci0JCWlmICghbXNycy0+Y291bnRlcnNbaV0uYWRkcikKKwkJaWYgKCFyZXNldF92YWx1ZVt2aXJ0XSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIHNldHVwIGNvdW50ZXIgcmVnaXN0ZXJzICovCkBAIC0xODUsNyArMjEyLDYwIEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX09QUk9GSUxFX0lCUworLyoKKyAqIDE2LWJpdCBMaW5lYXIgRmVlZGJhY2sgU2hpZnQgUmVnaXN0ZXIgKExGU1IpCisgKgorICogICAgICAgICAgICAgICAgICAgICAgIDE2ICAgMTQgICAxMyAgICAxMQorICogRmVlZGJhY2sgcG9seW5vbWlhbCA9IFggICsgWCAgKyBYICArICBYICArIDEKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBsZnNyX3JhbmRvbSh2b2lkKQoreworCXN0YXRpYyB1bnNpZ25lZCBpbnQgbGZzcl92YWx1ZSA9IDB4RjAwRDsKKwl1bnNpZ25lZCBpbnQgYml0OworCisJLyogQ29tcHV0ZSBuZXh0IGJpdCB0byBzaGlmdCBpbiAqLworCWJpdCA9ICgobGZzcl92YWx1ZSA+PiAwKSBeCisJICAgICAgIChsZnNyX3ZhbHVlID4+IDIpIF4KKwkgICAgICAgKGxmc3JfdmFsdWUgPj4gMykgXgorCSAgICAgICAobGZzcl92YWx1ZSA+PiA1KSkgJiAweDAwMDE7CisKKwkvKiBBZHZhbmNlIHRvIG5leHQgcmVnaXN0ZXIgdmFsdWUgKi8KKwlsZnNyX3ZhbHVlID0gKGxmc3JfdmFsdWUgPj4gMSkgfCAoYml0IDw8IDE1KTsKKworCXJldHVybiBsZnNyX3ZhbHVlOworfQorCisvKgorICogSUJTIHNvZnR3YXJlIHJhbmRvbWl6YXRpb24KKyAqCisgKiBUaGUgSUJTIHBlcmlvZGljIG9wIGNvdW50ZXIgaXMgcmFuZG9taXplZCBpbiBzb2Z0d2FyZS4gVGhlIGxvd2VyIDEyCisgKiBiaXRzIG9mIHRoZSAyMCBiaXQgY291bnRlciBhcmUgcmFuZG9taXplZC4gSWJzT3BDdXJDbnQgaXMKKyAqIGluaXRpYWxpemVkIHdpdGggYSAxMiBiaXQgcmFuZG9tIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIHU2NCBvcF9hbWRfcmFuZG9taXplX2lic19vcCh1NjQgdmFsKQoreworCXVuc2lnbmVkIGludCByYW5kb20gPSBsZnNyX3JhbmRvbSgpOworCisJaWYgKCEoaWJzX2NhcHMgJiBJQlNfQ0FQU19SRFdST1BDTlQpKQorCQkvKgorCQkgKiBXb3JrIGFyb3VuZCBpZiB0aGUgaHcgY2FuIG5vdCB3cml0ZSB0byBJYnNPcEN1ckNudAorCQkgKgorCQkgKiBSYW5kb21pemUgdGhlIGxvd2VyIDggYml0cyBvZiB0aGUgMTYgYml0CisJCSAqIElic09wTWF4Q250IFsxNTowXSB2YWx1ZSBpbiB0aGUgcmFuZ2Ugb2YgLTEyOCB0bworCQkgKiArMTI3IGJ5IGFkZGluZy9zdWJ0cmFjdGluZyBhbiBvZmZzZXQgdG8gdGhlCisJCSAqIG1heGltdW0gY291bnQgKElic09wTWF4Q250KS4KKwkJICoKKwkJICogVG8gYXZvaWQgb3ZlciBvciB1bmRlcmZsb3dzIGFuZCBwcm90ZWN0IHVwcGVyIGJpdHMKKwkJICogc3RhcnRpbmcgYXQgYml0IDE2LCB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IKKwkJICogSWJzT3BNYXhDbnQgbXVzdCBmaXQgaW4gdGhlIHJhbmdlIGZyb20gMHgwMDgxIHRvCisJCSAqIDB4ZmY4MC4KKwkJICovCisJCXZhbCArPSAoczgpKHJhbmRvbSA+PiA0KTsKKwllbHNlCisJCXZhbCB8PSAodTY0KShyYW5kb20gJiBJQlNfUkFORE9NX01BU0spIDw8IDMyOworCisJcmV0dXJuIHZhbDsKK30KIAogc3RhdGljIGlubGluZSB2b2lkCiBvcF9hbWRfaGFuZGxlX2licyhzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MsCkBAIC0xOTQsNyArMjc0LDcgQEAKIAl1NjQgdmFsLCBjdGw7CiAJc3RydWN0IG9wX2VudHJ5IGVudHJ5OwogCi0JaWYgKCFoYXNfaWJzKQorCWlmICghaWJzX2NhcHMpCiAJCXJldHVybjsKIAogCWlmIChpYnNfY29uZmlnLmZldGNoX2VuYWJsZWQpIHsKQEAgLTIzNiw4ICszMTYsNyBAQAogCQkJb3Byb2ZpbGVfd3JpdGVfY29tbWl0KCZlbnRyeSk7CiAKIAkJCS8qIHJlZW5hYmxlIHRoZSBJUlEgKi8KLQkJCWN0bCAmPSB+SUJTX09QX1ZBTCAmIDB4RkZGRkZGRkY7Ci0JCQljdGwgfD0gSUJTX09QX0VOQUJMRTsKKwkJCWN0bCA9IG9wX2FtZF9yYW5kb21pemVfaWJzX29wKGlic19vcF9jdGwpOwogCQkJd3Jtc3JsKE1TUl9BTUQ2NF9JQlNPUENUTCwgY3RsKTsKIAkJfQogCX0KQEAgLTI0Niw0MSArMzI1LDU3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgb3BfYW1kX3N0YXJ0X2licyh2b2lkKQogewogCXU2NCB2YWw7Ci0JaWYgKGhhc19pYnMgJiYgaWJzX2NvbmZpZy5mZXRjaF9lbmFibGVkKSB7CisKKwlpZiAoIWlic19jYXBzKQorCQlyZXR1cm47CisKKwlpZiAoaWJzX2NvbmZpZy5mZXRjaF9lbmFibGVkKSB7CiAJCXZhbCA9IChpYnNfY29uZmlnLm1heF9jbnRfZmV0Y2ggPj4gNCkgJiAweEZGRkY7CiAJCXZhbCB8PSBpYnNfY29uZmlnLnJhbmRfZW4gPyBJQlNfRkVUQ0hfUkFORF9FTiA6IDA7CiAJCXZhbCB8PSBJQlNfRkVUQ0hfRU5BQkxFOwogCQl3cm1zcmwoTVNSX0FNRDY0X0lCU0ZFVENIQ1RMLCB2YWwpOwogCX0KIAotCWlmIChoYXNfaWJzICYmIGlic19jb25maWcub3BfZW5hYmxlZCkgewotCQl2YWwgPSAoaWJzX2NvbmZpZy5tYXhfY250X29wID4+IDQpICYgMHhGRkZGOwotCQl2YWwgfD0gaWJzX2NvbmZpZy5kaXNwYXRjaGVkX29wcyA/IElCU19PUF9DTlRfQ1RMIDogMDsKLQkJdmFsIHw9IElCU19PUF9FTkFCTEU7CisJaWYgKGlic19jb25maWcub3BfZW5hYmxlZCkgeworCQlpYnNfb3BfY3RsID0gaWJzX2NvbmZpZy5tYXhfY250X29wID4+IDQ7CisJCWlmICghKGlic19jYXBzICYgSUJTX0NBUFNfUkRXUk9QQ05UKSkgeworCQkJLyoKKwkJCSAqIElic09wQ3VyQ250IG5vdCBzdXBwb3J0ZWQuICBTZWUKKwkJCSAqIG9wX2FtZF9yYW5kb21pemVfaWJzX29wKCkgZm9yIGRldGFpbHMuCisJCQkgKi8KKwkJCWlic19vcF9jdGwgPSBjbGFtcChpYnNfb3BfY3RsLCAweDAwODFVTEwsIDB4RkY4MFVMTCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVGhlIHN0YXJ0IHZhbHVlIGlzIHJhbmRvbWl6ZWQgd2l0aCBhCisJCQkgKiBwb3NpdGl2ZSBvZmZzZXQsIHdlIG5lZWQgdG8gY29tcGVuc2F0ZSBpdAorCQkJICogd2l0aCB0aGUgaGFsZiBvZiB0aGUgcmFuZG9taXplZCByYW5nZS4gQWxzbworCQkJICogYXZvaWQgdW5kZXJmbG93cy4KKwkJCSAqLworCQkJaWJzX29wX2N0bCA9IG1pbihpYnNfb3BfY3RsICsgSUJTX1JBTkRPTV9NQVhDTlRfT0ZGU0VULAorCQkJCQkgMHhGRkZGVUxMKTsKKwkJfQorCQlpZiAoaWJzX2NhcHMgJiBJQlNfQ0FQU19PUENOVCAmJiBpYnNfY29uZmlnLmRpc3BhdGNoZWRfb3BzKQorCQkJaWJzX29wX2N0bCB8PSBJQlNfT1BfQ05UX0NUTDsKKwkJaWJzX29wX2N0bCB8PSBJQlNfT1BfRU5BQkxFOworCQl2YWwgPSBvcF9hbWRfcmFuZG9taXplX2lic19vcChpYnNfb3BfY3RsKTsKIAkJd3Jtc3JsKE1TUl9BTUQ2NF9JQlNPUENUTCwgdmFsKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIG9wX2FtZF9zdG9wX2licyh2b2lkKQogewotCWlmIChoYXNfaWJzICYmIGlic19jb25maWcuZmV0Y2hfZW5hYmxlZCkKKwlpZiAoIWlic19jYXBzKQorCQlyZXR1cm47CisKKwlpZiAoaWJzX2NvbmZpZy5mZXRjaF9lbmFibGVkKQogCQkvKiBjbGVhciBtYXggY291bnQgYW5kIGVuYWJsZSAqLwogCQl3cm1zcmwoTVNSX0FNRDY0X0lCU0ZFVENIQ1RMLCAwKTsKIAotCWlmIChoYXNfaWJzICYmIGlic19jb25maWcub3BfZW5hYmxlZCkKKwlpZiAoaWJzX2NvbmZpZy5vcF9lbmFibGVkKQogCQkvKiBjbGVhciBtYXggY291bnQgYW5kIGVuYWJsZSAqLwogCQl3cm1zcmwoTVNSX0FNRDY0X0lCU09QQ1RMLCAwKTsKIH0KIAotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIG9wX2FtZF9oYW5kbGVfaWJzKHN0cnVjdCBwdF9yZWdzICogY29uc3QgcmVncywKLQkJCQkgICAgc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvcF9hbWRfc3RhcnRfaWJzKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIG9wX2FtZF9zdG9wX2licyh2b2lkKSB7IH0KLQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgb3BfYW1kX2NoZWNrX2N0cnMoc3RydWN0IHB0X3JlZ3MgKiBjb25zdCByZWdzLAogCQkJICAgICBzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCiB7CkBAIC0zNTUsOCArNDUwLDYgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfT1BST0ZJTEVfSUJTCi0KIHN0YXRpYyB1OCBpYnNfZWlsdnRfb2ZmOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19pbml0X2lic19ubWlfcGVyX2NwdSh2b2lkICphcmcpCkBAIC00MDUsNDUgKzQ5OCwzNiBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfTlVNQQotCS8qIFNhbml0eSBjaGVjayAqLwotCS8qIFdvcmtzIG9ubHkgZm9yIDY0Yml0IHdpdGggcHJvcGVyIG51bWEgaW1wbGVtZW50YXRpb24uICovCi0JaWYgKG5vZGVzICE9IG51bV9wb3NzaWJsZV9ub2RlcygpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gc2V0dXAgQ1BVIG5vZGUocykgZm9yIElCUywgIgotCQkJImZvdW5kOiAlZCwgZXhwZWN0ZWQgJWQiLAotCQkJbm9kZXMsIG51bV9wb3NzaWJsZV9ub2RlcygpKTsKLQkJcmV0dXJuIDE7Ci0JfQotI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKIC8qIHVuaW5pdGlhbGl6ZSB0aGUgQVBJQyBmb3IgdGhlIElCUyBpbnRlcnJ1cHRzIGlmIG5lZWRlZCAqLwogc3RhdGljIHZvaWQgY2xlYXJfaWJzX25taSh2b2lkKQogewotCWlmIChoYXNfaWJzKQorCWlmIChpYnNfY2FwcykKIAkJb25fZWFjaF9jcHUoYXBpY19jbGVhcl9pYnNfbm1pX3Blcl9jcHUsIE5VTEwsIDEpOwogfQogCiAvKiBpbml0aWFsaXplIHRoZSBBUElDIGZvciB0aGUgSUJTIGludGVycnVwdHMgaWYgYXZhaWxhYmxlICovCiBzdGF0aWMgdm9pZCBpYnNfaW5pdCh2b2lkKQogewotCWhhc19pYnMgPSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSUJTKTsKKwlpYnNfY2FwcyA9IGdldF9pYnNfY2FwcygpOwogCi0JaWYgKCFoYXNfaWJzKQorCWlmICghaWJzX2NhcHMpCiAJCXJldHVybjsKIAogCWlmIChpbml0X2lic19ubWkoKSkgewotCQloYXNfaWJzID0gMDsKKwkJaWJzX2NhcHMgPSAwOwogCQlyZXR1cm47CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAib3Byb2ZpbGU6IEFNRCBJQlMgZGV0ZWN0ZWRcbiIpOworCXByaW50ayhLRVJOX0lORk8gIm9wcm9maWxlOiBBTUQgSUJTIGRldGVjdGVkICgweCUwOHgpXG4iLAorCSAgICAgICAodW5zaWduZWQpaWJzX2NhcHMpOwogfQogCiBzdGF0aWMgdm9pZCBpYnNfZXhpdCh2b2lkKQogewotCWlmICghaGFzX2licykKKwlpZiAoIWlic19jYXBzKQogCQlyZXR1cm47CiAKIAljbGVhcl9pYnNfbm1pKCk7CkBAIC00NjMsNyArNTQ3LDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKCFoYXNfaWJzKQorCWlmICghaWJzX2NhcHMpCiAJCXJldHVybiByZXQ7CiAKIAkvKiBtb2RlbCBzcGVjaWZpYyBmaWxlcyAqLwpAQCAtNDczLDcgKzU1Nyw3IEBACiAJaWJzX2NvbmZpZy5mZXRjaF9lbmFibGVkID0gMDsKIAlpYnNfY29uZmlnLm1heF9jbnRfb3AgPSAyNTAwMDA7CiAJaWJzX2NvbmZpZy5vcF9lbmFibGVkID0gMDsKLQlpYnNfY29uZmlnLmRpc3BhdGNoZWRfb3BzID0gMTsKKwlpYnNfY29uZmlnLmRpc3BhdGNoZWRfb3BzID0gMDsKIAogCWRpciA9IG9wcm9maWxlZnNfbWtkaXIoc2IsIHJvb3QsICJpYnNfZmV0Y2giKTsKIAlvcHJvZmlsZWZzX2NyZWF0ZV91bG9uZyhzYiwgZGlyLCAiZW5hYmxlIiwKQEAgLTQ4OCw4ICs1NzIsOSBAQAogCQkJCSZpYnNfY29uZmlnLm9wX2VuYWJsZWQpOwogCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJtYXhfY291bnQiLAogCQkJCSZpYnNfY29uZmlnLm1heF9jbnRfb3ApOwotCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJkaXNwYXRjaGVkX29wcyIsCi0JCQkJJmlic19jb25maWcuZGlzcGF0Y2hlZF9vcHMpOworCWlmIChpYnNfY2FwcyAmIElCU19DQVBTX09QQ05UKQorCQlvcHJvZmlsZWZzX2NyZWF0ZV91bG9uZyhzYiwgZGlyLCAiZGlzcGF0Y2hlZF9vcHMiLAorCQkJCQkmaWJzX2NvbmZpZy5kaXNwYXRjaGVkX29wcyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUwNywxOSArNTkyLDYgQEAKIAlpYnNfZXhpdCgpOwogfQogCi0jZWxzZQotCi0vKiBubyBJQlMgc3VwcG9ydCAqLwotCi1zdGF0aWMgaW50IG9wX2FtZF9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG9wX2FtZF9leGl0KHZvaWQpIHt9Ci0KLSNlbmRpZiAvKiBDT05GSUdfT1BST0ZJTEVfSUJTICovCi0KIHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBvcF9hbWRfc3BlYyA9IHsKIAkubnVtX2NvdW50ZXJzCQk9IE5VTV9DT1VOVEVSUywKIAkubnVtX2NvbnRyb2xzCQk9IE5VTV9DT05UUk9MUywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wNC5jCmluZGV4IGFjNmIzNTQuLmU2YTE2MGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYwpAQCAtMzk0LDEyICszOTQsNiBAQAogCXNldHVwX251bV9jb3VudGVycygpOwogCXN0YWcgPSBnZXRfc3RhZ2dlcigpOwogCi0JLyogaW5pdGlhbGl6ZSBzb21lIHJlZ2lzdGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkKLQkJbXNycy0+Y291bnRlcnNbaV0uYWRkciA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IG51bV9jb250cm9sczsgKytpKQotCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gMDsKLQogCS8qIHRoZSBjb3VudGVyICYgY2NjciByZWdpc3RlcnMgd2UgcGF5IGF0dGVudGlvbiB0byAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewogCQlhZGRyID0gcDRfY291bnRlcnNbVklSVF9DVFIoc3RhZywgaSldLmNvdW50ZXJfYWRkcmVzczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYwppbmRleCA4ZWIwNTg3Li41ZDE3MjdiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wcHJvLmMKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jCkBAIC0zNywxNSArMzcsMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyBpKyspIHsKIAkJaWYgKHJlc2VydmVfcGVyZmN0cl9ubWkoTVNSX1A2X1BFUkZDVFIwICsgaSkpCiAJCQltc3JzLT5jb3VudGVyc1tpXS5hZGRyID0gTVNSX1A2X1BFUkZDVFIwICsgaTsKLQkJZWxzZQotCQkJbXNycy0+Y291bnRlcnNbaV0uYWRkciA9IDA7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IG51bV9jb3VudGVyczsgaSsrKSB7CiAJCWlmIChyZXNlcnZlX2V2bnRzZWxfbm1pKE1TUl9QNl9FVk5UU0VMMCArIGkpKQogCQkJbXNycy0+Y29udHJvbHNbaV0uYWRkciA9IE1TUl9QNl9FVk5UU0VMMCArIGk7Ci0JCWVsc2UKLQkJCW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIgPSAwOwogCX0KIH0KIApAQCAtNTcsNyArNTMsNyBAQAogCWludCBpOwogCiAJaWYgKCFyZXNldF92YWx1ZSkgewotCQlyZXNldF92YWx1ZSA9IGttYWxsb2Moc2l6ZW9mKHJlc2V0X3ZhbHVlWzBdKSAqIG51bV9jb3VudGVycywKKwkJcmVzZXRfdmFsdWUgPSBremFsbG9jKHNpemVvZihyZXNldF92YWx1ZVswXSkgKiBudW1fY291bnRlcnMsCiAJCQkJCUdGUF9BVE9NSUMpOwogCQlpZiAoIXJlc2V0X3ZhbHVlKQogCQkJcmV0dXJuOwpAQCAtODIsOSArNzgsMTggQEAKIAogCS8qIGNsZWFyIGFsbCBjb3VudGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewotCQlpZiAodW5saWtlbHkoIW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIpKQorCQlpZiAodW5saWtlbHkoIW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIpKSB7CisJCQlpZiAoY291bnRlcl9jb25maWdbaV0uZW5hYmxlZCAmJiAhc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJCS8qCisJCQkJICogY291bnRlciBpcyByZXNlcnZlZCwgdGhpcyBpcyBvbiBhbGwKKwkJCQkgKiBjcHVzLCBzbyByZXBvcnQgb25seSBmb3IgY3B1ICMwCisJCQkJICovCisJCQkJb3BfeDg2X3dhcm5fcmVzZXJ2ZWQoaSk7CiAJCQljb250aW51ZTsKKwkJfQogCQlyZG1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKKwkJaWYgKHZhbCAmIEFSQ0hfUEVSRk1PTl9FVkVOVFNFTDBfRU5BQkxFKQorCQkJb3BfeDg2X3dhcm5faW5fdXNlKGkpOwogCQl2YWwgJj0gbW9kZWwtPnJlc2VydmVkOwogCQl3cm1zcmwobXNycy0+Y29udHJvbHNbaV0uYWRkciwgdmFsKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaCBiL2FyY2gveDg2L29wcm9maWxlL29wX3g4Nl9tb2RlbC5oCmluZGV4IDdiOGU3NWQuLmZmODJhNzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX3g4Nl9tb2RlbC5oCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX3g4Nl9tb2RlbC5oCkBAIC01Nyw2ICs1NywyNiBAQAogCiBzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWc7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBvcF94ODZfd2Fybl9pbl91c2UoaW50IGNvdW50ZXIpCit7CisJLyoKKwkgKiBUaGUgd2FybmluZyBpbmRpY2F0ZXMgYW4gYWxyZWFkeSBydW5uaW5nIGNvdW50ZXIuIElmCisJICogb3Byb2ZpbGUgZG9lc24ndCBjb2xsZWN0IGRhdGEsIHRoZW4gdHJ5IHVzaW5nIGEgZGlmZmVyZW50CisJICogcGVyZm9ybWFuY2UgY291bnRlciBvbiB5b3VyIHBsYXRmb3JtIHRvIG1vbml0b3IgdGhlIGRlc2lyZWQKKwkgKiBldmVudC4gRGVsZXRlIGNvdW50ZXIgIyVkIGZyb20gdGhlIGRlc2lyZWQgZXZlbnQgYnkgZWRpdGluZworCSAqIHRoZSAvdXNyL3NoYXJlL29wcm9maWxlLyVzLzxjcHU+L2V2ZW50cyBmaWxlLiBJZiB0aGUgZXZlbnQKKwkgKiBjYW5ub3QgYmUgbW9uaXRvcmVkIGJ5IGFueSBvdGhlciBjb3VudGVyLCBjb250YWN0IHlvdXIKKwkgKiBoYXJkd2FyZSBvciBCSU9TIHZlbmRvci4KKwkgKi8KKwlwcl93YXJuaW5nKCJvcHJvZmlsZTogY291bnRlciAjJWQgb24gY3B1ICMlZCBtYXkgYWxyZWFkeSBiZSB1c2VkXG4iLAorCQkgICBjb3VudGVyLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3BfeDg2X3dhcm5fcmVzZXJ2ZWQoaW50IGNvdW50ZXIpCit7CisJcHJfd2FybmluZygib3Byb2ZpbGU6IGNvdW50ZXIgIyVkIGlzIGFscmVhZHkgcmVzZXJ2ZWRcbiIsIGNvdW50ZXIpOworfQorCiBleHRlcm4gdTY0IG9wX3g4Nl9nZXRfY3RybChzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3QgKm1vZGVsLAogCQkJICAgc3RydWN0IG9wX2NvdW50ZXJfY29uZmlnICpjb3VudGVyX2NvbmZpZyk7CiBleHRlcm4gaW50IG9wX3g4Nl9waHlzX3RvX3ZpcnQoaW50IHBoeXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2FjcGkuYyBiL2FyY2gveDg2L3BjaS9hY3BpLmMKaW5kZXggOTU5ZTU0OC4uNWYxMWZmNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2FjcGkuYworKysgYi9hcmNoL3g4Ni9wY2kvYWNwaS5jCkBAIC0xNSw2ICsxNSw1MSBAQAogCWludCBidXNudW07CiB9OwogCitzdGF0aWMgYm9vbCBwY2lfdXNlX2NycyA9IHRydWU7CisKK3N0YXRpYyBpbnQgX19pbml0IHNldF91c2VfY3JzKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKK3sKKwlwY2lfdXNlX2NycyA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBwY2lfdXNlX2Nyc190YWJsZVtdIF9faW5pdGNvbnN0ID0geworCS8qIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4MyAqLworCXsKKwkJLmNhbGxiYWNrID0gc2V0X3VzZV9jcnMsCisJCS5pZGVudCA9ICJJQk0gU3lzdGVtIHgzODAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJJQk0iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAieDM4MDAiKSwKKwkJfSwKKwl9LAorCXt9Cit9OworCit2b2lkIF9faW5pdCBwY2lfYWNwaV9jcnNfcXVpcmtzKHZvaWQpCit7CisJaW50IHllYXI7CisKKwlpZiAoZG1pX2dldF9kYXRlKERNSV9CSU9TX0RBVEUsICZ5ZWFyLCBOVUxMLCBOVUxMKSAmJiB5ZWFyIDwgMjAwOCkKKwkJcGNpX3VzZV9jcnMgPSBmYWxzZTsKKworCWRtaV9jaGVja19zeXN0ZW0ocGNpX3VzZV9jcnNfdGFibGUpOworCisJLyoKKwkgKiBJZiB0aGUgdXNlciBzcGVjaWZpZXMgInBjaT11c2VfY3JzIiBvciAicGNpPW5vY3JzIiBleHBsaWNpdGx5LCB0aGF0CisJICogdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGFueXRoaW5nIHdlIGZpZ3VyZWQgb3V0IGFib3ZlLgorCSAqLworCWlmIChwY2lfcHJvYmUgJiBQQ0lfUk9PVF9OT19DUlMpCisJCXBjaV91c2VfY3JzID0gZmFsc2U7CisJZWxzZSBpZiAocGNpX3Byb2JlICYgUENJX1VTRV9fQ1JTKQorCQlwY2lfdXNlX2NycyA9IHRydWU7CisKKwlwcmludGsoS0VSTl9JTkZPICJQQ0k6ICVzIGhvc3QgYnJpZGdlIHdpbmRvd3MgZnJvbSBBQ1BJOyAiCisJICAgICAgICJpZiBuZWNlc3NhcnksIHVzZSBcInBjaT0lc1wiIGFuZCByZXBvcnQgYSBidWdcbiIsCisJICAgICAgIHBjaV91c2VfY3JzID8gIlVzaW5nIiA6ICJJZ25vcmluZyIsCisJICAgICAgIHBjaV91c2VfY3JzID8gIm5vY3JzIiA6ICJ1c2VfY3JzIik7Cit9CisKIHN0YXRpYyBhY3BpX3N0YXR1cwogcmVzb3VyY2VfdG9fYWRkcihzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2UsCiAJCQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzNjQgKmFkZHIpCkBAIC00NSwyMCArOTAsNiBAQAogCXJldHVybiBBRV9PSzsKIH0KIAotc3RhdGljIGludAotYnVzX2hhc190cmFuc3BhcmVudF9icmlkZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7Ci0JCXUxNiBjbGFzcyA9IGRldi0+Y2xhc3MgPj4gODsKLQotCQlpZiAoY2xhc3MgPT0gUENJX0NMQVNTX0JSSURHRV9QQ0kgJiYgZGV2LT50cmFuc3BhcmVudCkKLQkJCXJldHVybiB0cnVlOwotCX0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyB2b2lkCiBhbGlnbl9yZXNvdXJjZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmJyaWRnZSwgc3RydWN0IHJlc291cmNlICpyZXMpCiB7CkBAIC05MiwxMiArMTIzLDggQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJvb3Q7Ci0JaW50IG1heF9yb290X2J1c19yZXNvdXJjZXMgPSBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7CiAJdTY0IHN0YXJ0LCBlbmQ7CiAKLQlpZiAoYnVzX2hhc190cmFuc3BhcmVudF9icmlkZ2UoaW5mby0+YnVzKSkKLQkJbWF4X3Jvb3RfYnVzX3Jlc291cmNlcyAtPSAzOwotCiAJc3RhdHVzID0gcmVzb3VyY2VfdG9fYWRkcihhY3BpX3JlcywgJmFkZHIpOwogCWlmICghQUNQSV9TVUNDRVNTKHN0YXR1cykpCiAJCXJldHVybiBBRV9PSzsKQEAgLTExNSwxNSArMTQyLDYgQEAKIAogCXN0YXJ0ID0gYWRkci5taW5pbXVtICsgYWRkci50cmFuc2xhdGlvbl9vZmZzZXQ7CiAJZW5kID0gc3RhcnQgKyBhZGRyLmFkZHJlc3NfbGVuZ3RoIC0gMTsKLQlpZiAoaW5mby0+cmVzX251bSA+PSBtYXhfcm9vdF9idXNfcmVzb3VyY2VzKSB7Ci0JCWlmIChwY2lfcHJvYmUgJiBQQ0lfVVNFX19DUlMpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJQQ0k6IEZhaWxlZCB0byBhbGxvY2F0ZSAiCi0JCQkgICAgICAgIjB4JWx4LTB4JWx4IGZyb20gJXMgZm9yICVzIGR1ZSB0byBfQ1JTICIKLQkJCSAgICAgICAicmV0dXJuaW5nIG1vcmUgdGhhbiAlZCByZXNvdXJjZSBkZXNjcmlwdG9yc1xuIiwKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZykgc3RhcnQsICh1bnNpZ25lZCBsb25nKSBlbmQsCi0JCQkgICAgICAgcm9vdC0+bmFtZSwgaW5mby0+bmFtZSwgbWF4X3Jvb3RfYnVzX3Jlc291cmNlcyk7Ci0JCXJldHVybiBBRV9PSzsKLQl9CiAKIAlyZXMgPSAmaW5mby0+cmVzW2luZm8tPnJlc19udW1dOwogCXJlcy0+bmFtZSA9IGluZm8tPm5hbWU7CkBAIC0xMzMsNyArMTUxLDcgQEAKIAlyZXMtPmNoaWxkID0gTlVMTDsKIAlhbGlnbl9yZXNvdXJjZShpbmZvLT5icmlkZ2UsIHJlcyk7CiAKLQlpZiAoIShwY2lfcHJvYmUgJiBQQ0lfVVNFX19DUlMpKSB7CisJaWYgKCFwY2lfdXNlX2NycykgewogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZpbmZvLT5icmlkZ2UtPmRldiwKIAkJCSAgICJob3N0IGJyaWRnZSB3aW5kb3cgJXBSIChpZ25vcmVkKVxuIiwgcmVzKTsKIAkJcmV0dXJuIEFFX09LOwpAQCAtMTQzLDcgKzE2MSw3IEBACiAJCWRldl9lcnIoJmluZm8tPmJyaWRnZS0+ZGV2LAogCQkJImNhbid0IGFsbG9jYXRlIGhvc3QgYnJpZGdlIHdpbmRvdyAlcFJcbiIsIHJlcyk7CiAJfSBlbHNlIHsKLQkJaW5mby0+YnVzLT5yZXNvdXJjZVtpbmZvLT5yZXNfbnVtXSA9IHJlczsKKwkJcGNpX2J1c19hZGRfcmVzb3VyY2UoaW5mby0+YnVzLCByZXMsIDApOwogCQlpbmZvLT5yZXNfbnVtKys7CiAJCWlmIChhZGRyLnRyYW5zbGF0aW9uX29mZnNldCkKIAkJCWRldl9pbmZvKCZpbmZvLT5icmlkZ2UtPmRldiwgImhvc3QgYnJpZGdlIHdpbmRvdyAlcFIgIgpAQCAtMTY0LDEwICsxODIsOCBAQAogCXN0cnVjdCBwY2lfcm9vdF9pbmZvIGluZm87CiAJc2l6ZV90IHNpemU7CiAKLQlpZiAoIShwY2lfcHJvYmUgJiBQQ0lfVVNFX19DUlMpKQotCQlkZXZfaW5mbygmZGV2aWNlLT5kZXYsCi0JCQkgImlnbm9yaW5nIGhvc3QgYnJpZGdlIHdpbmRvd3MgZnJvbSBBQ1BJOyAiCi0JCQkgImJvb3Qgd2l0aCBcInBjaT11c2VfY3JzXCIgdG8gdXNlIHRoZW1cbiIpOworCWlmIChwY2lfdXNlX2NycykKKwkJcGNpX2J1c19yZW1vdmVfcmVzb3VyY2VzKGJ1cyk7CiAKIAlpbmZvLmJyaWRnZSA9IGRldmljZTsKIAlpbmZvLmJ1cyA9IGJ1czsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9idXNfbnVtYS5jIGIvYXJjaC94ODYvcGNpL2J1c19udW1hLmMKaW5kZXggZjkzOWQ2MC4uMTJkNTRmZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2J1c19udW1hLmMKKysrIGIvYXJjaC94ODYvcGNpL2J1c19udW1hLmMKQEAgLTM2LDEzICszNiwxNCBAQAogCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IHBlZXIgcm9vdCBidXMgJTAyeCByZXMgdXBkYXRlZCBmcm9tIHBjaSBjb25mXG4iLAogCQkJYi0+bnVtYmVyKTsKIAorCXBjaV9idXNfcmVtb3ZlX3Jlc291cmNlcyhiKTsKIAlpbmZvID0gJnBjaV9yb290X2luZm9baV07CiAJZm9yIChqID0gMDsgaiA8IGluZm8tPnJlc19udW07IGorKykgewogCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAkJc3RydWN0IHJlc291cmNlICpyb290OwogCiAJCXJlcyA9ICZpbmZvLT5yZXNbal07Ci0JCWItPnJlc291cmNlW2pdID0gcmVzOworCQlwY2lfYnVzX2FkZF9yZXNvdXJjZShiLCByZXMsIDApOwogCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCiAJCQlyb290ID0gJmlvcG9ydF9yZXNvdXJjZTsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2J1c19udW1hLmggYi9hcmNoL3g4Ni9wY2kvYnVzX251bWEuaAppbmRleCBhZGJjMjNmLi43MzFiNjRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvYnVzX251bWEuaAorKysgYi9hcmNoL3g4Ni9wY2kvYnVzX251bWEuaApAQCAtMiw4ICsyLDcgQEAKIAogLyoKICAqIHN1YiBidXMgKHRyYW5zcGFyZW50KSB3aWxsIHVzZSBlbnRyZXMgZnJvbSAzIHRvIHN0b3JlIGV4dHJhIGZyb20KLSAqIHJvb3QsIHNvIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHNsb3QgdGhlcmUsIFNob3VsZCB3ZQotICogaW5jcmVhc2UgUENJX0JVU19OVU1fUkVTT1VSQ0VTPworICogcm9vdCwgc28gbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggc2xvdCB0aGVyZS4KICAqLwogI2RlZmluZSBSRVNfTlVNIDE2CiBzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvY29tbW9uLmMgYi9hcmNoL3g4Ni9wY2kvY29tbW9uLmMKaW5kZXggZDI1NTJjNi4uMzczNjE3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L3BjaS9jb21tb24uYwpAQCAtNTIwLDYgKzUyMCw5IEBACiAJfSBlbHNlIGlmICghc3RyY21wKHN0ciwgInVzZV9jcnMiKSkgewogCQlwY2lfcHJvYmUgfD0gUENJX1VTRV9fQ1JTOwogCQlyZXR1cm4gTlVMTDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCAibm9jcnMiKSkgeworCQlwY2lfcHJvYmUgfD0gUENJX1JPT1RfTk9fQ1JTOworCQlyZXR1cm4gTlVMTDsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCAiZWFybHlkdW1wIikpIHsKIAkJcGNpX2Vhcmx5X2R1bXBfcmVncyA9IDE7CiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2kzODYuYyBiL2FyY2gveDg2L3BjaS9pMzg2LmMKaW5kZXggNWRjOWU4Yy4uNWE4ZmJmOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2kzODYuYworKysgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCkBAIC02MCwyMiArNjAsMjAgQEAKICAqIGJ1dCB3ZSB3YW50IHRvIHRyeSB0byBhdm9pZCBhbGxvY2F0aW5nIGF0IDB4MjkwMC0weDJiZmYKICAqIHdoaWNoIG1pZ2h0IGhhdmUgYmUgbWlycm9yZWQgYXQgMHgwMTAwLTB4MDNmZi4uCiAgKi8KLXZvaWQKLXBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCityZXNvdXJjZV9zaXplX3QKK3BjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkYXRhOworCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKLQogCQlpZiAoc2tpcF9pc2FfaW9yZXNvdXJjZV9hbGlnbihkZXYpKQotCQkJcmV0dXJuOwotCQlpZiAoc3RhcnQgJiAweDMwMCkgeworCQkJcmV0dXJuIHN0YXJ0OworCQlpZiAoc3RhcnQgJiAweDMwMCkKIAkJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwotCQkJcmVzLT5zdGFydCA9IHN0YXJ0OwotCQl9CiAJfQorCXJldHVybiBzdGFydDsKIH0KIEVYUE9SVF9TWU1CT0wocGNpYmlvc19hbGlnbl9yZXNvdXJjZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pcnEuYyBiL2FyY2gveDg2L3BjaS9pcnEuYwppbmRleCAwNjk2ZDUwLi5iMDJmNmQ4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvaXJxLmMKKysrIGIvYXJjaC94ODYvcGNpL2lycS5jCkBAIC01OTAsNiArNTkwLDggQEAKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfMToKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfMjoKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfMzoKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfQ1BUX0xQQzE6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NQVF9MUEMyOgogCQlyLT5uYW1lID0gIlBJSVgvSUNIIjsKIAkJci0+Z2V0ID0gcGlycV9waWl4X2dldDsKIAkJci0+c2V0ID0gcGlycV9waWl4X3NldDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9tbWNvbmZpZy1zaGFyZWQuYyBiL2FyY2gveDg2L3BjaS9tbWNvbmZpZy1zaGFyZWQuYwppbmRleCBiMTlkMWU1Li44ZjNmOWE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMKKysrIGIvYXJjaC94ODYvcGNpL21tY29uZmlnLXNoYXJlZC5jCkBAIC0zMDMsMjIgKzMwMywxNyBAQAogewogCXN0cnVjdCBwY2lfbW1jZmdfcmVnaW9uICpjZmcsICpjZmd4OwogCi0JLyogbGFzdCBvbmUqLwotCWNmZyA9IGxpc3RfZW50cnkocGNpX21tY2ZnX2xpc3QucHJldiwgdHlwZW9mKCpjZmcpLCBsaXN0KTsKLQlpZiAoY2ZnKQotCQlpZiAoY2ZnLT5lbmRfYnVzIDwgY2ZnLT5zdGFydF9idXMpCi0JCQljZmctPmVuZF9idXMgPSAyNTU7Ci0KLQlpZiAobGlzdF9pc19zaW5ndWxhcigmcGNpX21tY2ZnX2xpc3QpKQotCQlyZXR1cm47Ci0KLQkvKiBkb24ndCBvdmVybGFwIHBsZWFzZSAqLworCS8qIEZpeHVwIG92ZXJsYXBzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjZmcsICZwY2lfbW1jZmdfbGlzdCwgbGlzdCkgewogCQlpZiAoY2ZnLT5lbmRfYnVzIDwgY2ZnLT5zdGFydF9idXMpCiAJCQljZmctPmVuZF9idXMgPSAyNTU7CiAKKwkJLyogRG9uJ3QgYWNjZXNzIHRoZSBsaXN0IGhlYWQgISAqLworCQlpZiAoY2ZnLT5saXN0Lm5leHQgPT0gJnBjaV9tbWNmZ19saXN0KQorCQkJYnJlYWs7CisKIAkJY2ZneCA9IGxpc3RfZW50cnkoY2ZnLT5saXN0Lm5leHQsIHR5cGVvZigqY2ZnKSwgbGlzdCk7Ci0JCWlmIChjZmcgIT0gY2ZneCAmJiBjZmctPmVuZF9idXMgPj0gY2ZneC0+c3RhcnRfYnVzKQorCQlpZiAoY2ZnLT5lbmRfYnVzID49IGNmZ3gtPnN0YXJ0X2J1cykKIAkJCWNmZy0+ZW5kX2J1cyA9IGNmZ3gtPnN0YXJ0X2J1cyAtIDE7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL251bWFxXzMyLmMgYi9hcmNoL3g4Ni9wY2kvbnVtYXFfMzIuYwppbmRleCA4ZWIyOTVlLi44ODg0YTFjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvbnVtYXFfMzIuYworKysgYi9hcmNoL3g4Ni9wY2kvbnVtYXFfMzIuYwpAQCAtOCw5ICs4LDcgQEAKICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KICNpbmNsdWRlIDxhc20vcGNpX3g4Ni5oPgotCi0jZGVmaW5lIFhRVUFEX1BPUlRJT19CQVNFIDB4ZmU0MDAwMDAKLSNkZWZpbmUgWFFVQURfUE9SVElPX1FVQUQgMHg0MDAwMCAgLyogMjU2ayBwZXIgcXVhZC4gKi8KKyNpbmNsdWRlIDxhc20vbnVtYXEuaD4KIAogI2RlZmluZSBCVVMyUVVBRChnbG9iYWwpIChtcF9idXNfaWRfdG9fbm9kZVtnbG9iYWxdKQogCkBAIC0xOCw4ICsxNiw2IEBACiAKICNkZWZpbmUgUVVBRExPQ0FMMkJVUyhxdWFkLGxvY2FsKSAocXVhZF9sb2NhbF90b19tcF9idXNfaWRbcXVhZF1bbG9jYWxdKQogCi0jZGVmaW5lIFhRVUFEX1BPUlRfQUREUihwb3J0LCBxdWFkKSAoeHF1YWRfcG9ydGlvICsgKFhRVUFEX1BPUlRJT19RVUFEKnF1YWQpICsgcG9ydCkKLQogI2RlZmluZSBQQ0lfQ09ORjFfTVFfQUREUkVTUyhidXMsIGRldmZuLCByZWcpIFwKIAkoMHg4MDAwMDAwMCB8IChCVVMyTE9DQUwoYnVzKSA8PCAxNikgfCAoZGV2Zm4gPDwgOCkgfCAocmVnICYgfjMpKQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni90b29scy90ZXN0X2dldF9sZW4uYyBiL2FyY2gveDg2L3Rvb2xzL3Rlc3RfZ2V0X2xlbi5jCmluZGV4IGJlZThkNmEuLjEzNDAzZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Rvb2xzL3Rlc3RfZ2V0X2xlbi5jCisrKyBiL2FyY2gveDg2L3Rvb2xzL3Rlc3RfZ2V0X2xlbi5jCkBAIC00Myw3ICs0Myw3IEBACiBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQogewogCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IG9iamR1bXAgLWQgYS5vdXQgfCBhd2sgLWYgZGlzdGlsbC5hd2sgfCIKLQkJIiAlcyBbLXl8LW5dIFstdl0gXG4iLCBwcm9nKTsKKwkJIiAlcyBbLXl8LW5dIFstdl1cbiIsIHByb2cpOwogCWZwcmludGYoc3RkZXJyLCAiXHQteQk2NGJpdCBtb2RlXG4iKTsKIAlmcHJpbnRmKHN0ZGVyciwgIlx0LW4JMzJiaXQgbW9kZVxuIik7CiAJZnByaW50ZihzdGRlcnIsICJcdC12CXZlcmJvc2UgbW9kZVxuIik7CkBAIC02OSw3ICs2OSw3IEBACiAKIHN0YXRpYyB2b2lkIGR1bXBfaW5zbihGSUxFICpmcCwgc3RydWN0IGluc24gKmluc24pCiB7Ci0JZnByaW50ZihmcCwgIkluc3RydWN0aW9uID0geyBcbiIpOworCWZwcmludGYoZnAsICJJbnN0cnVjdGlvbiA9IHtcbiIpOwogCWR1bXBfZmllbGQoZnAsICJwcmVmaXhlcyIsICJcdCIsCSZpbnNuLT5wcmVmaXhlcyk7CiAJZHVtcF9maWVsZChmcCwgInJleF9wcmVmaXgiLCAiXHQiLAkmaW5zbi0+cmV4X3ByZWZpeCk7CiAJZHVtcF9maWVsZChmcCwgInZleF9wcmVmaXgiLCAiXHQiLAkmaW5zbi0+dmV4X3ByZWZpeCk7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYTEzODc3MC4uNzZiZjM1NSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMzk0LDcgKzM5NCw3IEBACiAjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQkoMSkKIAogZXh0ZXJuICB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpOworCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCk7CiAKIC8qCiAgKiByZW1hcCBhIHBoeXNpY2FsIHBhZ2UgYHBmbicgb2Ygc2l6ZSBgc2l6ZScgd2l0aCBwYWdlIHByb3RlY3Rpb24gYHByb3QnCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcGNpLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcGNpLmMKaW5kZXggYjdjMDczNC4uY2QxMDI2OSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3BjaS5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wY2kuYwpAQCAtNjksMjYgKzY5LDI1IEBACiAgKiBidXQgd2Ugd2FudCB0byB0cnkgdG8gYXZvaWQgYWxsb2NhdGluZyBhdCAweDI5MDAtMHgyYmZmCiAgKiB3aGljaCBtaWdodCBoYXZlIGJlIG1pcnJvcmVkIGF0IDB4MDEwMC0weDAzZmYuLgogICovCi12b2lkCi1wY2liaW9zX2FsaWduX3Jlc291cmNlKHZvaWQgKmRhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKLSAgICAJCSAgICAgICByZXNvdXJjZV9zaXplX3QgYWxpZ24pCityZXNvdXJjZV9zaXplX3QKK3BjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCisJCSAgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkYXRhOworCXJlc291cmNlX3NpemVfdCBzdGFydCA9IHJlcy0+c3RhcnQ7CiAKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gcmVzLT5zdGFydDsKLQogCQlpZiAoc2l6ZSA+IDB4MTAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIlBDSTogSS9PIFJlZ2lvbiAlcy8lZCB0b28gbGFyZ2UiCiAJCQkgICAgICAgIiAoJWxkIGJ5dGVzKVxuIiwgcGNpX25hbWUoZGV2KSwKIAkJCSAgICAgICBkZXYtPnJlc291cmNlIC0gcmVzLCBzaXplKTsKIAkJfQogCi0JCWlmIChzdGFydCAmIDB4MzAwKSB7CisJCWlmIChzdGFydCAmIDB4MzAwKQogCQkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JCX0KIAl9CisKKwlyZXR1cm4gc3RhcnQ7CiB9CiAKIGludApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvbW0vY2FjaGUuYyBiL2FyY2gveHRlbnNhL21tL2NhY2hlLmMKaW5kZXggM2JhOTkwYy4uODVkZjQ2NSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvbW0vY2FjaGUuYworKysgYi9hcmNoL3h0ZW5zYS9tbS9jYWNoZS5jCkBAIC0xNDcsOSArMTQ3LDkgQEAKICNlbmRpZgogCiB2b2lkCi11cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGUpCit1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKIHsKLQl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4oKnB0ZXApOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCiAJaWYgKCFwZm5fdmFsaWQocGZuKSkKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jZ3JvdXAuYyBiL2Jsb2NrL2Jsay1jZ3JvdXAuYwppbmRleCBlN2RiYmFmLi5jODVkNzRjIDEwMDY0NAotLS0gYS9ibG9jay9ibGstY2dyb3VwLmMKKysrIGIvYmxvY2svYmxrLWNncm91cC5jCkBAIC0yMywyMCArMjMsNiBAQAogc3RydWN0IGJsa2lvX2Nncm91cCBibGtpb19yb290X2Nncm91cCA9IHsgLndlaWdodCA9IDIqQkxLSU9fV0VJR0hUX0RFRkFVTFQgfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGJsa2lvX3Jvb3RfY2dyb3VwKTsKIAotYm9vbCBibGtpb2NnX2Nzc190cnlnZXQoc3RydWN0IGJsa2lvX2Nncm91cCAqYmxrY2cpCi17Ci0JaWYgKCFjc3NfdHJ5Z2V0KCZibGtjZy0+Y3NzKSkKLQkJcmV0dXJuIGZhbHNlOwotCXJldHVybiB0cnVlOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoYmxraW9jZ19jc3NfdHJ5Z2V0KTsKLQotdm9pZCBibGtpb2NnX2Nzc19wdXQoc3RydWN0IGJsa2lvX2Nncm91cCAqYmxrY2cpCi17Ci0JY3NzX3B1dCgmYmxrY2ctPmNzcyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChibGtpb2NnX2Nzc19wdXQpOwotCiBzdHJ1Y3QgYmxraW9fY2dyb3VwICpjZ3JvdXBfdG9fYmxraW9fY2dyb3VwKHN0cnVjdCBjZ3JvdXAgKmNncm91cCkKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKGNncm91cF9zdWJzeXNfc3RhdGUoY2dyb3VwLCBibGtpb19zdWJzeXNfaWQpLApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5oIGIvYmxvY2svYmxrLWNncm91cC5oCmluZGV4IDRkMzE2ZGYuLjg0YmY3NDUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuaAorKysgYi9ibG9jay9ibGstY2dyb3VwLmgKQEAgLTQzLDkgKzQzLDYgQEAKIAl1bnNpZ25lZCBsb25nIHNlY3RvcnM7CiB9OwogCi1leHRlcm4gYm9vbCBibGtpb2NnX2Nzc190cnlnZXQoc3RydWN0IGJsa2lvX2Nncm91cCAqYmxrY2cpOwotZXh0ZXJuIHZvaWQgYmxraW9jZ19jc3NfcHV0KHN0cnVjdCBibGtpb19jZ3JvdXAgKmJsa2NnKTsKLQogdHlwZWRlZiB2b2lkIChibGtpb191bmxpbmtfZ3JvdXBfZm4pICh2b2lkICprZXksIHN0cnVjdCBibGtpb19ncm91cCAqYmxrZyk7CiB0eXBlZGVmIHZvaWQgKGJsa2lvX3VwZGF0ZV9ncm91cF93ZWlnaHRfZm4pIChzdHJ1Y3QgYmxraW9fZ3JvdXAgKmJsa2csCiAJCQkJCQl1bnNpZ25lZCBpbnQgd2VpZ2h0KTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IGQxYTlhMGEuLjlmZTE3NGQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jb3JlLmMKKysrIGIvYmxvY2svYmxrLWNvcmUuYwpAQCAtMTQ5MCw5ICsxNDkwLDkgQEAKIC8qCiAgKiBXZSBvbmx5IHdhbnQgb25lIC0+bWFrZV9yZXF1ZXN0X2ZuIHRvIGJlIGFjdGl2ZSBhdCBhIHRpbWUsCiAgKiBlbHNlIHN0YWNrIHVzYWdlIHdpdGggc3RhY2tlZCBkZXZpY2VzIGNvdWxkIGJlIGEgcHJvYmxlbS4KLSAqIFNvIHVzZSBjdXJyZW50LT5iaW9fe2xpc3QsdGFpbH0gdG8ga2VlcCBhIGxpc3Qgb2YgcmVxdWVzdHMKKyAqIFNvIHVzZSBjdXJyZW50LT5iaW9fbGlzdCB0byBrZWVwIGEgbGlzdCBvZiByZXF1ZXN0cwogICogc3VibWl0ZWQgYnkgYSBtYWtlX3JlcXVlc3RfZm4gZnVuY3Rpb24uCi0gKiBjdXJyZW50LT5iaW9fdGFpbCBpcyBhbHNvIHVzZWQgYXMgYSBmbGFnIHRvIHNheSBpZgorICogY3VycmVudC0+YmlvX2xpc3QgaXMgYWxzbyB1c2VkIGFzIGEgZmxhZyB0byBzYXkgaWYKICAqIGdlbmVyaWNfbWFrZV9yZXF1ZXN0IGlzIGN1cnJlbnRseSBhY3RpdmUgaW4gdGhpcyB0YXNrIG9yIG5vdC4KICAqIElmIGl0IGlzIE5VTEwsIHRoZW4gbm8gbWFrZV9yZXF1ZXN0IGlzIGFjdGl2ZS4gIElmIGl0IGlzIG5vbi1OVUxMLAogICogdGhlbiBhIG1ha2VfcmVxdWVzdCBpcyBhY3RpdmUsIGFuZCBuZXcgcmVxdWVzdHMgc2hvdWxkIGJlIGFkZGVkCkBAIC0xNTAwLDExICsxNTAwLDExIEBACiAgKi8KIHZvaWQgZ2VuZXJpY19tYWtlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvKQogewotCWlmIChjdXJyZW50LT5iaW9fdGFpbCkgeworCXN0cnVjdCBiaW9fbGlzdCBiaW9fbGlzdF9vbl9zdGFjazsKKworCWlmIChjdXJyZW50LT5iaW9fbGlzdCkgewogCQkvKiBtYWtlX3JlcXVlc3QgaXMgYWN0aXZlICovCi0JCSooY3VycmVudC0+YmlvX3RhaWwpID0gYmlvOwotCQliaW8tPmJpX25leHQgPSBOVUxMOwotCQljdXJyZW50LT5iaW9fdGFpbCA9ICZiaW8tPmJpX25leHQ7CisJCWJpb19saXN0X2FkZChjdXJyZW50LT5iaW9fbGlzdCwgYmlvKTsKIAkJcmV0dXJuOwogCX0KIAkvKiBmb2xsb3dpbmcgbG9vcCBtYXkgYmUgYSBiaXQgbm9uLW9idmlvdXMsIGFuZCBzbyBkZXNlcnZlcyBzb21lCkBAIC0xNTEyLDMwICsxNTEyLDI3IEBACiAJICogQmVmb3JlIGVudGVyaW5nIHRoZSBsb29wLCBiaW8tPmJpX25leHQgaXMgTlVMTCAoYXMgYWxsIGNhbGxlcnMKIAkgKiBlbnN1cmUgdGhhdCkgc28gd2UgaGF2ZSBhIGxpc3Qgd2l0aCBhIHNpbmdsZSBiaW8uCiAJICogV2UgcHJldGVuZCB0aGF0IHdlIGhhdmUganVzdCB0YWtlbiBpdCBvZmYgYSBsb25nZXIgbGlzdCwgc28KLQkgKiB3ZSBhc3NpZ24gYmlvX2xpc3QgdG8gdGhlIG5leHQgKHdoaWNoIGlzIE5VTEwpIGFuZCBiaW9fdGFpbAotCSAqIHRvICZiaW9fbGlzdCwgdGh1cyBpbml0aWFsaXNpbmcgdGhlIGJpb19saXN0IG9mIG5ldyBiaW9zIHRvIGJlCisJICogd2UgYXNzaWduIGJpb19saXN0IHRvIGEgcG9pbnRlciB0byB0aGUgYmlvX2xpc3Rfb25fc3RhY2ssCisJICogdGh1cyBpbml0aWFsaXNpbmcgdGhlIGJpb19saXN0IG9mIG5ldyBiaW9zIHRvIGJlCiAJICogYWRkZWQuICBfX2dlbmVyaWNfbWFrZV9yZXF1ZXN0IG1heSBpbmRlZWQgYWRkIHNvbWUgbW9yZSBiaW9zCiAJICogdGhyb3VnaCBhIHJlY3Vyc2l2ZSBjYWxsIHRvIGdlbmVyaWNfbWFrZV9yZXF1ZXN0LiAgSWYgaXQKIAkgKiBkaWQsIHdlIGZpbmQgYSBub24tTlVMTCB2YWx1ZSBpbiBiaW9fbGlzdCBhbmQgcmUtZW50ZXIgdGhlIGxvb3AKIAkgKiBmcm9tIHRoZSB0b3AuICBJbiB0aGlzIGNhc2Ugd2UgcmVhbGx5IGRpZCBqdXN0IHRha2UgdGhlIGJpbwotCSAqIG9mIHRoZSB0b3Agb2YgdGhlIGxpc3QgKG5vIHByZXRlbmRpbmcpIGFuZCBzbyBmaXh1cCBiaW9fbGlzdCBhbmQKLQkgKiBiaW9fdGFpbCBvciBiaV9uZXh0LCBhbmQgY2FsbCBpbnRvIF9fZ2VuZXJpY19tYWtlX3JlcXVlc3QgYWdhaW4uCisJICogb2YgdGhlIHRvcCBvZiB0aGUgbGlzdCAobm8gcHJldGVuZGluZykgYW5kIHNvIHJlbW92ZSBpdCBmcm9tCisJICogYmlvX2xpc3QsIGFuZCBjYWxsIGludG8gX19nZW5lcmljX21ha2VfcmVxdWVzdCBhZ2Fpbi4KIAkgKgogCSAqIFRoZSBsb29wIHdhcyBzdHJ1Y3R1cmVkIGxpa2UgdGhpcyB0byBtYWtlIG9ubHkgb25lIGNhbGwgdG8KIAkgKiBfX2dlbmVyaWNfbWFrZV9yZXF1ZXN0ICh3aGljaCBpcyBpbXBvcnRhbnQgYXMgaXQgaXMgbGFyZ2UgYW5kCiAJICogaW5saW5lZCkgYW5kIHRvIGtlZXAgdGhlIHN0cnVjdHVyZSBzaW1wbGUuCiAJICovCiAJQlVHX09OKGJpby0+YmlfbmV4dCk7CisJYmlvX2xpc3RfaW5pdCgmYmlvX2xpc3Rfb25fc3RhY2spOworCWN1cnJlbnQtPmJpb19saXN0ID0gJmJpb19saXN0X29uX3N0YWNrOwogCWRvIHsKLQkJY3VycmVudC0+YmlvX2xpc3QgPSBiaW8tPmJpX25leHQ7Ci0JCWlmIChiaW8tPmJpX25leHQgPT0gTlVMTCkKLQkJCWN1cnJlbnQtPmJpb190YWlsID0gJmN1cnJlbnQtPmJpb19saXN0OwotCQllbHNlCi0JCQliaW8tPmJpX25leHQgPSBOVUxMOwogCQlfX2dlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7Ci0JCWJpbyA9IGN1cnJlbnQtPmJpb19saXN0OworCQliaW8gPSBiaW9fbGlzdF9wb3AoY3VycmVudC0+YmlvX2xpc3QpOwogCX0gd2hpbGUgKGJpbyk7Ci0JY3VycmVudC0+YmlvX3RhaWwgPSBOVUxMOyAvKiBkZWFjdGl2YXRlICovCisJY3VycmVudC0+YmlvX2xpc3QgPSBOVUxMOyAvKiBkZWFjdGl2YXRlICovCiB9CiBFWFBPUlRfU1lNQk9MKGdlbmVyaWNfbWFrZV9yZXF1ZXN0KTsKIApAQCAtMTYxNyw4ICsxNjE0LDcgQEAKIAkgKiBsaW1pdGF0aW9uLgogCSAqLwogCWJsa19yZWNhbGNfcnFfc2VnbWVudHMocnEpOwotCWlmIChycS0+bnJfcGh5c19zZWdtZW50cyA+IHF1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEpIHx8Ci0JICAgIHJxLT5ucl9waHlzX3NlZ21lbnRzID4gcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEpKSB7CisJaWYgKHJxLT5ucl9waHlzX3NlZ21lbnRzID4gcXVldWVfbWF4X3NlZ21lbnRzKHEpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IG92ZXIgbWF4IHNlZ21lbnRzIGxpbWl0LlxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTzsKIAl9CmRpZmYgLS1naXQgYS9ibG9jay9ibGstaW9jLmMgYi9ibG9jay9ibGstaW9jLmMKaW5kZXggOThlNmJmNi4uM2Y2NWM4YSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWlvYy5jCisrKyBiL2Jsb2NrL2Jsay1pb2MuYwpAQCAtOTEsNyArOTEsNyBAQAogCQlzcGluX2xvY2tfaW5pdCgmcmV0LT5sb2NrKTsKIAkJcmV0LT5pb3ByaW9fY2hhbmdlZCA9IDA7CiAJCXJldC0+aW9wcmlvID0gMDsKLQkJcmV0LT5sYXN0X3dhaXRlZCA9IGppZmZpZXM7IC8qIGRvZXNuJ3QgbWF0dGVyLi4uICovCisJCXJldC0+bGFzdF93YWl0ZWQgPSAwOyAvKiBkb2Vzbid0IG1hdHRlci4uLiAqLwogCQlyZXQtPm5yX2JhdGNoX3JlcXVlc3RzID0gMDsgLyogYmVjYXVzZSB0aGlzIGlzIDAgKi8KIAkJSU5JVF9SQURJWF9UUkVFKCZyZXQtPnJhZGl4X3Jvb3QsIEdGUF9BVE9NSUMgfCBfX0dGUF9ISUdIKTsKIAkJSU5JVF9ITElTVF9IRUFEKCZyZXQtPmNpY19saXN0KTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tZXJnZS5jIGIvYmxvY2svYmxrLW1lcmdlLmMKaW5kZXggOTljYjVjZi4uNWU3ZGM5OSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1lcmdlLmMKKysrIGIvYmxvY2svYmxrLW1lcmdlLmMKQEAgLTIwNiw4ICsyMDYsNyBAQAogewogCWludCBucl9waHlzX3NlZ3MgPSBiaW9fcGh5c19zZWdtZW50cyhxLCBiaW8pOwogCi0JaWYgKHJlcS0+bnJfcGh5c19zZWdtZW50cyArIG5yX3BoeXNfc2VncyA+IHF1ZXVlX21heF9od19zZWdtZW50cyhxKSB8fAotCSAgICByZXEtPm5yX3BoeXNfc2VnbWVudHMgKyBucl9waHlzX3NlZ3MgPiBxdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxKSkgeworCWlmIChyZXEtPm5yX3BoeXNfc2VnbWVudHMgKyBucl9waHlzX3NlZ3MgPiBxdWV1ZV9tYXhfc2VnbWVudHMocSkpIHsKIAkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX05PTUVSR0U7CiAJCWlmIChyZXEgPT0gcS0+bGFzdF9tZXJnZSkKIAkJCXEtPmxhc3RfbWVyZ2UgPSBOVUxMOwpAQCAtMzAwLDEwICsyOTksNyBAQAogCQl0b3RhbF9waHlzX3NlZ21lbnRzLS07CiAJfQogCi0JaWYgKHRvdGFsX3BoeXNfc2VnbWVudHMgPiBxdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAodG90YWxfcGh5c19zZWdtZW50cyA+IHF1ZXVlX21heF9od19zZWdtZW50cyhxKSkKKwlpZiAodG90YWxfcGh5c19zZWdtZW50cyA+IHF1ZXVlX21heF9zZWdtZW50cyhxKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBNZXJnZSBpcyBPSy4uLiAqLwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXNldHRpbmdzLmMgYi9ibG9jay9ibGstc2V0dGluZ3MuYwppbmRleCA1ZWViOWUwLi4zMWU3YTkzIDEwMDY0NAotLS0gYS9ibG9jay9ibGstc2V0dGluZ3MuYworKysgYi9ibG9jay9ibGstc2V0dGluZ3MuYwpAQCAtOTEsMTAgKzkxLDkgQEAKICAqLwogdm9pZCBibGtfc2V0X2RlZmF1bHRfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKIHsKLQlsaW0tPm1heF9waHlzX3NlZ21lbnRzID0gTUFYX1BIWVNfU0VHTUVOVFM7Ci0JbGltLT5tYXhfaHdfc2VnbWVudHMgPSBNQVhfSFdfU0VHTUVOVFM7CisJbGltLT5tYXhfc2VnbWVudHMgPSBCTEtfTUFYX1NFR01FTlRTOwogCWxpbS0+c2VnX2JvdW5kYXJ5X21hc2sgPSBCTEtfU0VHX0JPVU5EQVJZX01BU0s7Ci0JbGltLT5tYXhfc2VnbWVudF9zaXplID0gTUFYX1NFR01FTlRfU0laRTsKKwlsaW0tPm1heF9zZWdtZW50X3NpemUgPSBCTEtfTUFYX1NFR01FTlRfU0laRTsKIAlsaW0tPm1heF9zZWN0b3JzID0gQkxLX0RFRl9NQVhfU0VDVE9SUzsKIAlsaW0tPm1heF9od19zZWN0b3JzID0gSU5UX01BWDsKIAlsaW0tPm1heF9kaXNjYXJkX3NlY3RvcnMgPSAwOwpAQCAtMTU0LDcgKzE1Myw3IEBACiAJcS0+dW5wbHVnX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylxOwogCiAJYmxrX3NldF9kZWZhdWx0X2xpbWl0cygmcS0+bGltaXRzKTsKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMocSwgU0FGRV9NQVhfU0VDVE9SUyk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHEsIEJMS19TQUZFX01BWF9TRUNUT1JTKTsKIAogCS8qCiAJICogSWYgdGhlIGNhbGxlciBkaWRuJ3Qgc3VwcGx5IGEgbG9jaywgZmFsbCBiYWNrIHRvIG91ciBlbWJlZGRlZApAQCAtMjEwLDM3ICsyMDksMzIgQEAKIEVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX2JvdW5jZV9saW1pdCk7CiAKIC8qKgotICogYmxrX3F1ZXVlX21heF9zZWN0b3JzIC0gc2V0IG1heCBzZWN0b3JzIGZvciBhIHJlcXVlc3QgZm9yIHRoaXMgcXVldWUKKyAqIGJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyAtIHNldCBtYXggc2VjdG9ycyBmb3IgYSByZXF1ZXN0IGZvciB0aGlzIHF1ZXVlCiAgKiBAcTogIHRoZSByZXF1ZXN0IHF1ZXVlIGZvciB0aGUgZGV2aWNlCi0gKiBAbWF4X3NlY3RvcnM6ICBtYXggc2VjdG9ycyBpbiB0aGUgdXN1YWwgNTEyYiB1bml0CisgKiBAbWF4X2h3X3NlY3RvcnM6ICBtYXggaGFyZHdhcmUgc2VjdG9ycyBpbiB0aGUgdXN1YWwgNTEyYiB1bml0CiAgKgogICogRGVzY3JpcHRpb246Ci0gKiAgICBFbmFibGVzIGEgbG93IGxldmVsIGRyaXZlciB0byBzZXQgYW4gdXBwZXIgbGltaXQgb24gdGhlIHNpemUgb2YKLSAqICAgIHJlY2VpdmVkIHJlcXVlc3RzLgorICogICAgRW5hYmxlcyBhIGxvdyBsZXZlbCBkcml2ZXIgdG8gc2V0IGEgaGFyZCB1cHBlciBsaW1pdCwKKyAqICAgIG1heF9od19zZWN0b3JzLCBvbiB0aGUgc2l6ZSBvZiByZXF1ZXN0cy4gIG1heF9od19zZWN0b3JzIGlzIHNldCBieQorICogICAgdGhlIGRldmljZSBkcml2ZXIgYmFzZWQgdXBvbiB0aGUgY29tYmluZWQgY2FwYWJpbGl0aWVzIG9mIEkvTworICogICAgY29udHJvbGxlciBhbmQgc3RvcmFnZSBkZXZpY2UuCisgKgorICogICAgbWF4X3NlY3RvcnMgaXMgYSBzb2Z0IGxpbWl0IGltcG9zZWQgYnkgdGhlIGJsb2NrIGxheWVyIGZvcgorICogICAgZmlsZXN5c3RlbSB0eXBlIHJlcXVlc3RzLiAgVGhpcyB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBvbiBhCisgKiAgICBwZXItZGV2aWNlIGJhc2lzIGluIC9zeXMvYmxvY2svPGRldmljZT4vcXVldWUvbWF4X3NlY3RvcnNfa2IuCisgKiAgICBUaGUgc29mdCBsaW1pdCBjYW4gbm90IGV4Y2VlZCBtYXhfaHdfc2VjdG9ycy4KICAqKi8KLXZvaWQgYmxrX3F1ZXVlX21heF9zZWN0b3JzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgbWF4X3NlY3RvcnMpCit2b2lkIGJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgaW50IG1heF9od19zZWN0b3JzKQogewotCWlmICgobWF4X3NlY3RvcnMgPDwgOSkgPCBQQUdFX0NBQ0hFX1NJWkUpIHsKLQkJbWF4X3NlY3RvcnMgPSAxIDw8IChQQUdFX0NBQ0hFX1NISUZUIC0gOSk7CisJaWYgKChtYXhfaHdfc2VjdG9ycyA8PCA5KSA8IFBBR0VfQ0FDSEVfU0laRSkgeworCQltYXhfaHdfc2VjdG9ycyA9IDEgPDwgKFBBR0VfQ0FDSEVfU0hJRlQgLSA5KTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNldCB0byBtaW5pbXVtICVkXG4iLAotCQkgICAgICAgX19mdW5jX18sIG1heF9zZWN0b3JzKTsKKwkJICAgICAgIF9fZnVuY19fLCBtYXhfaHdfc2VjdG9ycyk7CiAJfQogCi0JaWYgKEJMS19ERUZfTUFYX1NFQ1RPUlMgPiBtYXhfc2VjdG9ycykKLQkJcS0+bGltaXRzLm1heF9od19zZWN0b3JzID0gcS0+bGltaXRzLm1heF9zZWN0b3JzID0gbWF4X3NlY3RvcnM7Ci0JZWxzZSB7Ci0JCXEtPmxpbWl0cy5tYXhfc2VjdG9ycyA9IEJMS19ERUZfTUFYX1NFQ1RPUlM7Ci0JCXEtPmxpbWl0cy5tYXhfaHdfc2VjdG9ycyA9IG1heF9zZWN0b3JzOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX21heF9zZWN0b3JzKTsKLQotdm9pZCBibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGludCBtYXhfc2VjdG9ycykKLXsKLQlpZiAoQkxLX0RFRl9NQVhfU0VDVE9SUyA+IG1heF9zZWN0b3JzKQotCQlxLT5saW1pdHMubWF4X2h3X3NlY3RvcnMgPSBCTEtfREVGX01BWF9TRUNUT1JTOwotCWVsc2UKLQkJcS0+bGltaXRzLm1heF9od19zZWN0b3JzID0gbWF4X3NlY3RvcnM7CisJcS0+bGltaXRzLm1heF9od19zZWN0b3JzID0gbWF4X2h3X3NlY3RvcnM7CisJcS0+bGltaXRzLm1heF9zZWN0b3JzID0gbWluX3QodW5zaWduZWQgaW50LCBtYXhfaHdfc2VjdG9ycywKKwkJCQkgICAgICBCTEtfREVGX01BWF9TRUNUT1JTKTsKIH0KIEVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKTsKIApAQCAtMjU3LDE3ICsyNTEsMTUgQEAKIEVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX21heF9kaXNjYXJkX3NlY3RvcnMpOwogCiAvKioKLSAqIGJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyAtIHNldCBtYXggcGh5cyBzZWdtZW50cyBmb3IgYSByZXF1ZXN0IGZvciB0aGlzIHF1ZXVlCisgKiBibGtfcXVldWVfbWF4X3NlZ21lbnRzIC0gc2V0IG1heCBodyBzZWdtZW50cyBmb3IgYSByZXF1ZXN0IGZvciB0aGlzIHF1ZXVlCiAgKiBAcTogIHRoZSByZXF1ZXN0IHF1ZXVlIGZvciB0aGUgZGV2aWNlCiAgKiBAbWF4X3NlZ21lbnRzOiAgbWF4IG51bWJlciBvZiBzZWdtZW50cwogICoKICAqIERlc2NyaXB0aW9uOgogICogICAgRW5hYmxlcyBhIGxvdyBsZXZlbCBkcml2ZXIgdG8gc2V0IGFuIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YKLSAqICAgIHBoeXNpY2FsIGRhdGEgc2VnbWVudHMgaW4gYSByZXF1ZXN0LiAgVGhpcyB3b3VsZCBiZSB0aGUgbGFyZ2VzdCBzaXplZAotICogICAgc2NhdHRlciBsaXN0IHRoZSBkcml2ZXIgY291bGQgaGFuZGxlLgorICogICAgaHcgZGF0YSBzZWdtZW50cyBpbiBhIHJlcXVlc3QuCiAgKiovCi12b2lkIGJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKLQkJCQkgdW5zaWduZWQgc2hvcnQgbWF4X3NlZ21lbnRzKQordm9pZCBibGtfcXVldWVfbWF4X3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1bnNpZ25lZCBzaG9ydCBtYXhfc2VnbWVudHMpCiB7CiAJaWYgKCFtYXhfc2VnbWVudHMpIHsKIAkJbWF4X3NlZ21lbnRzID0gMTsKQEAgLTI3NSwzMyArMjY3LDkgQEAKIAkJICAgICAgIF9fZnVuY19fLCBtYXhfc2VnbWVudHMpOwogCX0KIAotCXEtPmxpbWl0cy5tYXhfcGh5c19zZWdtZW50cyA9IG1heF9zZWdtZW50czsKKwlxLT5saW1pdHMubWF4X3NlZ21lbnRzID0gbWF4X3NlZ21lbnRzOwogfQotRVhQT1JUX1NZTUJPTChibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMpOwotCi0vKioKLSAqIGJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMgLSBzZXQgbWF4IGh3IHNlZ21lbnRzIGZvciBhIHJlcXVlc3QgZm9yIHRoaXMgcXVldWUKLSAqIEBxOiAgdGhlIHJlcXVlc3QgcXVldWUgZm9yIHRoZSBkZXZpY2UKLSAqIEBtYXhfc2VnbWVudHM6ICBtYXggbnVtYmVyIG9mIHNlZ21lbnRzCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiAgICBFbmFibGVzIGEgbG93IGxldmVsIGRyaXZlciB0byBzZXQgYW4gdXBwZXIgbGltaXQgb24gdGhlIG51bWJlciBvZgotICogICAgaHcgZGF0YSBzZWdtZW50cyBpbiBhIHJlcXVlc3QuICBUaGlzIHdvdWxkIGJlIHRoZSBsYXJnZXN0IG51bWJlciBvZgotICogICAgYWRkcmVzcy9sZW5ndGggcGFpcnMgdGhlIGhvc3QgYWRhcHRlciBjYW4gYWN0dWFsbHkgZ2l2ZSBhdCBvbmNlCi0gKiAgICB0byB0aGUgZGV2aWNlLgotICoqLwotdm9pZCBibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAotCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IG1heF9zZWdtZW50cykKLXsKLQlpZiAoIW1heF9zZWdtZW50cykgewotCQltYXhfc2VnbWVudHMgPSAxOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogc2V0IHRvIG1pbmltdW0gJWRcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgbWF4X3NlZ21lbnRzKTsKLQl9Ci0KLQlxLT5saW1pdHMubWF4X2h3X3NlZ21lbnRzID0gbWF4X3NlZ21lbnRzOwotfQotRVhQT1JUX1NZTUJPTChibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKTsKK0VYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX21heF9zZWdtZW50cyk7CiAKIC8qKgogICogYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUgLSBzZXQgbWF4IHNlZ21lbnQgc2l6ZSBmb3IgYmxrX3JxX21hcF9zZwpAQCAtNTA3LDcgKzQ3NSw3IEBACiAgKiBibGtfc3RhY2tfbGltaXRzIC0gYWRqdXN0IHF1ZXVlX2xpbWl0cyBmb3Igc3RhY2tlZCBkZXZpY2VzCiAgKiBAdDoJdGhlIHN0YWNraW5nIGRyaXZlciBsaW1pdHMgKHRvcCBkZXZpY2UpCiAgKiBAYjogIHRoZSB1bmRlcmx5aW5nIHF1ZXVlIGxpbWl0cyAoYm90dG9tLCBjb21wb25lbnQgZGV2aWNlKQotICogQG9mZnNldDogIG9mZnNldCB0byBiZWdpbm5pbmcgb2YgZGF0YSB3aXRoaW4gY29tcG9uZW50IGRldmljZQorICogQHN0YXJ0OiAgZmlyc3QgZGF0YSBzZWN0b3Igd2l0aGluIGNvbXBvbmVudCBkZXZpY2UKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBzdGFja2luZyBkcml2ZXJzIGxpa2UgTUQgYW5kIERNIHRvIGVuc3VyZQpAQCAtNTI1LDEwICs0OTMsOSBAQAogICogICAgdGhlIGFsaWdubWVudF9vZmZzZXQgaXMgdW5kZWZpbmVkLgogICovCiBpbnQgYmxrX3N0YWNrX2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICp0LCBzdHJ1Y3QgcXVldWVfbGltaXRzICpiLAotCQkgICAgIHNlY3Rvcl90IG9mZnNldCkKKwkJICAgICBzZWN0b3JfdCBzdGFydCkKIHsKLQlzZWN0b3JfdCBhbGlnbm1lbnQ7Ci0JdW5zaWduZWQgaW50IHRvcCwgYm90dG9tLCByZXQgPSAwOworCXVuc2lnbmVkIGludCB0b3AsIGJvdHRvbSwgYWxpZ25tZW50LCByZXQgPSAwOwogCiAJdC0+bWF4X3NlY3RvcnMgPSBtaW5fbm90X3plcm8odC0+bWF4X3NlY3RvcnMsIGItPm1heF9zZWN0b3JzKTsKIAl0LT5tYXhfaHdfc2VjdG9ycyA9IG1pbl9ub3RfemVybyh0LT5tYXhfaHdfc2VjdG9ycywgYi0+bWF4X2h3X3NlY3RvcnMpOwpAQCAtNTM3LDE4ICs1MDQsMTQgQEAKIAl0LT5zZWdfYm91bmRhcnlfbWFzayA9IG1pbl9ub3RfemVybyh0LT5zZWdfYm91bmRhcnlfbWFzaywKIAkJCQkJICAgIGItPnNlZ19ib3VuZGFyeV9tYXNrKTsKIAotCXQtPm1heF9waHlzX3NlZ21lbnRzID0gbWluX25vdF96ZXJvKHQtPm1heF9waHlzX3NlZ21lbnRzLAotCQkJCQkgICAgYi0+bWF4X3BoeXNfc2VnbWVudHMpOwotCi0JdC0+bWF4X2h3X3NlZ21lbnRzID0gbWluX25vdF96ZXJvKHQtPm1heF9od19zZWdtZW50cywKLQkJCQkJICBiLT5tYXhfaHdfc2VnbWVudHMpOworCXQtPm1heF9zZWdtZW50cyA9IG1pbl9ub3RfemVybyh0LT5tYXhfc2VnbWVudHMsIGItPm1heF9zZWdtZW50cyk7CiAKIAl0LT5tYXhfc2VnbWVudF9zaXplID0gbWluX25vdF96ZXJvKHQtPm1heF9zZWdtZW50X3NpemUsCiAJCQkJCSAgIGItPm1heF9zZWdtZW50X3NpemUpOwogCiAJdC0+bWlzYWxpZ25lZCB8PSBiLT5taXNhbGlnbmVkOwogCi0JYWxpZ25tZW50ID0gcXVldWVfbGltaXRfYWxpZ25tZW50X29mZnNldChiLCBvZmZzZXQpOworCWFsaWdubWVudCA9IHF1ZXVlX2xpbWl0X2FsaWdubWVudF9vZmZzZXQoYiwgc3RhcnQpOwogCiAJLyogQm90dG9tIGRldmljZSBoYXMgZGlmZmVyZW50IGFsaWdubWVudC4gIENoZWNrIHRoYXQgaXQgaXMKIAkgKiBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgdG9wIGFsaWdubWVudC4KQEAgLTYxMSwxMSArNTc0LDcgQEAKIAogCS8qIERpc2NhcmQgYWxpZ25tZW50IGFuZCBncmFudWxhcml0eSAqLwogCWlmIChiLT5kaXNjYXJkX2dyYW51bGFyaXR5KSB7Ci0JCXVuc2lnbmVkIGludCBncmFudWxhcml0eSA9IGItPmRpc2NhcmRfZ3JhbnVsYXJpdHk7Ci0JCW9mZnNldCAmPSBncmFudWxhcml0eSAtIDE7Ci0KLQkJYWxpZ25tZW50ID0gKGdyYW51bGFyaXR5ICsgYi0+ZGlzY2FyZF9hbGlnbm1lbnQgLSBvZmZzZXQpCi0JCQkmIChncmFudWxhcml0eSAtIDEpOworCQlhbGlnbm1lbnQgPSBxdWV1ZV9saW1pdF9kaXNjYXJkX2FsaWdubWVudChiLCBzdGFydCk7CiAKIAkJaWYgKHQtPmRpc2NhcmRfZ3JhbnVsYXJpdHkgIT0gMCAmJgogCQkgICAgdC0+ZGlzY2FyZF9hbGlnbm1lbnQgIT0gYWxpZ25tZW50KSB7CkBAIC02NTcsNyArNjE2LDcgQEAKIAogCXN0YXJ0ICs9IGdldF9zdGFydF9zZWN0KGJkZXYpOwogCi0JcmV0dXJuIGJsa19zdGFja19saW1pdHModCwgJmJxLT5saW1pdHMsIHN0YXJ0IDw8IDkpOworCXJldHVybiBibGtfc3RhY2tfbGltaXRzKHQsICZicS0+bGltaXRzLCBzdGFydCk7CiB9CiBFWFBPUlRfU1lNQk9MKGJkZXZfc3RhY2tfbGltaXRzKTsKIApAQCAtNjY4LDkgKzYyNyw4IEBACiAgKiBAb2Zmc2V0OiAgb2Zmc2V0IHRvIGJlZ2lubmluZyBvZiBkYXRhIHdpdGhpbiBjb21wb25lbnQgZGV2aWNlCiAgKgogICogRGVzY3JpcHRpb246Ci0gKiAgICBNZXJnZXMgdGhlIGxpbWl0cyBmb3IgdHdvIHF1ZXVlcy4gIFJldHVybnMgMCBpZiBhbGlnbm1lbnQKLSAqICAgIGRpZG4ndCBjaGFuZ2UuICBSZXR1cm5zIC0xIGlmIGFkZGluZyB0aGUgYm90dG9tIGRldmljZSBjYXVzZWQKLSAqICAgIG1pc2FsaWdubWVudC4KKyAqICAgIE1lcmdlcyB0aGUgbGltaXRzIGZvciBhIHRvcCBsZXZlbCBnZW5kaXNrIGFuZCBhIGJvdHRvbSBsZXZlbAorICogICAgYmxvY2tfZGV2aWNlLgogICovCiB2b2lkIGRpc2tfc3RhY2tfbGltaXRzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAogCQkgICAgICAgc2VjdG9yX3Qgb2Zmc2V0KQpAQCAtNjc4LDkgKzYzNiw3IEBACiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnQgPSBkaXNrLT5xdWV1ZTsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqYiA9IGJkZXZfZ2V0X3F1ZXVlKGJkZXYpOwogCi0Jb2Zmc2V0ICs9IGdldF9zdGFydF9zZWN0KGJkZXYpIDw8IDk7Ci0KLQlpZiAoYmxrX3N0YWNrX2xpbWl0cygmdC0+bGltaXRzLCAmYi0+bGltaXRzLCBvZmZzZXQpIDwgMCkgeworCWlmIChiZGV2X3N0YWNrX2xpbWl0cygmdC0+bGltaXRzLCBiZGV2LCBvZmZzZXQgPj4gOSkgPCAwKSB7CiAJCWNoYXIgdG9wW0JERVZOQU1FX1NJWkVdLCBib3R0b21bQkRFVk5BTUVfU0laRV07CiAKIAkJZGlza19uYW1lKGRpc2ssIDAsIHRvcCk7CkBAIC03NTIsMjIgKzcwOCwxOSBAQAogICogZG9lcyBpcyBhZGp1c3QgdGhlIHF1ZXVlIHNvIHRoYXQgdGhlIGJ1ZiBpcyBhbHdheXMgYXBwZW5kZWQKICAqIHNpbGVudGx5IHRvIHRoZSBzY2F0dGVybGlzdC4KICAqCi0gKiBOb3RlOiBUaGlzIHJvdXRpbmUgYWRqdXN0cyBtYXhfaHdfc2VnbWVudHMgdG8gbWFrZSByb29tIGZvcgotICogYXBwZW5kaW5nIHRoZSBkcmFpbiBidWZmZXIuICBJZiB5b3UgY2FsbAotICogYmxrX3F1ZXVlX21heF9od19zZWdtZW50cygpIG9yIGJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cygpIGFmdGVyCi0gKiBjYWxsaW5nIHRoaXMgcm91dGluZSwgeW91IG11c3Qgc2V0IHRoZSBsaW1pdCB0byBvbmUgZmV3ZXIgdGhhbiB5b3VyCi0gKiBkZXZpY2UgY2FuIHN1cHBvcnQgb3RoZXJ3aXNlIHRoZXJlIHdvbid0IGJlIHJvb20gZm9yIHRoZSBkcmFpbgotICogYnVmZmVyLgorICogTm90ZTogVGhpcyByb3V0aW5lIGFkanVzdHMgbWF4X2h3X3NlZ21lbnRzIHRvIG1ha2Ugcm9vbSBmb3IgYXBwZW5kaW5nCisgKiB0aGUgZHJhaW4gYnVmZmVyLiAgSWYgeW91IGNhbGwgYmxrX3F1ZXVlX21heF9zZWdtZW50cygpIGFmdGVyIGNhbGxpbmcKKyAqIHRoaXMgcm91dGluZSwgeW91IG11c3Qgc2V0IHRoZSBsaW1pdCB0byBvbmUgZmV3ZXIgdGhhbiB5b3VyIGRldmljZQorICogY2FuIHN1cHBvcnQgb3RoZXJ3aXNlIHRoZXJlIHdvbid0IGJlIHJvb20gZm9yIHRoZSBkcmFpbiBidWZmZXIuCiAgKi8KIGludCBibGtfcXVldWVfZG1hX2RyYWluKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCQkJICAgICAgIGRtYV9kcmFpbl9uZWVkZWRfZm4gKmRtYV9kcmFpbl9uZWVkZWQsCiAJCQkgICAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKLQlpZiAocXVldWVfbWF4X2h3X3NlZ21lbnRzKHEpIDwgMiB8fCBxdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxKSA8IDIpCisJaWYgKHF1ZXVlX21heF9zZWdtZW50cyhxKSA8IDIpCiAJCXJldHVybiAtRUlOVkFMOwogCS8qIG1ha2Ugcm9vbSBmb3IgYXBwZW5kaW5nIHRoZSBkcmFpbiAqLwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocSwgcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEpIC0gMSk7Ci0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEsIHF1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEpIC0gMSk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhxLCBxdWV1ZV9tYXhfc2VnbWVudHMocSkgLSAxKTsKIAlxLT5kbWFfZHJhaW5fbmVlZGVkID0gZG1hX2RyYWluX25lZWRlZDsKIAlxLT5kbWFfZHJhaW5fYnVmZmVyID0gYnVmOwogCXEtPmRtYV9kcmFpbl9zaXplID0gc2l6ZTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1zeXNmcy5jIGIvYmxvY2svYmxrLXN5c2ZzLmMKaW5kZXggODYwNmM5NS4uZTg1NDQyNCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXN5c2ZzLmMKKysrIGIvYmxvY2svYmxrLXN5c2ZzLmMKQEAgLTE4OSw3ICsxODksOCBAQAogCiBzdGF0aWMgc3NpemVfdCBxdWV1ZV9ub21lcmdlc19zaG93KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpwYWdlKQogewotCXJldHVybiBxdWV1ZV92YXJfc2hvdyhibGtfcXVldWVfbm9tZXJnZXMocSksIHBhZ2UpOworCXJldHVybiBxdWV1ZV92YXJfc2hvdygoYmxrX3F1ZXVlX25vbWVyZ2VzKHEpIDw8IDEpIHwKKwkJCSAgICAgICBibGtfcXVldWVfbm94bWVyZ2VzKHEpLCBwYWdlKTsKIH0KIAogc3RhdGljIHNzaXplX3QgcXVldWVfbm9tZXJnZXNfc3RvcmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNvbnN0IGNoYXIgKnBhZ2UsCkBAIC0xOTksMTAgKzIwMCwxMiBAQAogCXNzaXplX3QgcmV0ID0gcXVldWVfdmFyX3N0b3JlKCZubSwgcGFnZSwgY291bnQpOwogCiAJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKLQlpZiAobm0pCisJcXVldWVfZmxhZ19jbGVhcihRVUVVRV9GTEFHX05PTUVSR0VTLCBxKTsKKwlxdWV1ZV9mbGFnX2NsZWFyKFFVRVVFX0ZMQUdfTk9YTUVSR0VTLCBxKTsKKwlpZiAobm0gPT0gMikKIAkJcXVldWVfZmxhZ19zZXQoUVVFVUVfRkxBR19OT01FUkdFUywgcSk7Ci0JZWxzZQotCQlxdWV1ZV9mbGFnX2NsZWFyKFFVRVVFX0ZMQUdfTk9NRVJHRVMsIHEpOworCWVsc2UgaWYgKG5tKQorCQlxdWV1ZV9mbGFnX3NldChRVUVVRV9GTEFHX05PWE1FUkdFUywgcSk7CiAJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IDAyM2Y0ZTYuLmRlZTlkOTMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtMTksNyArMTksNyBAQAogICogdHVuYWJsZXMKICAqLwogLyogbWF4IHF1ZXVlIGluIG9uZSByb3VuZCBvZiBzZXJ2aWNlICovCi1zdGF0aWMgY29uc3QgaW50IGNmcV9xdWFudHVtID0gNDsKK3N0YXRpYyBjb25zdCBpbnQgY2ZxX3F1YW50dW0gPSA4Owogc3RhdGljIGNvbnN0IGludCBjZnFfZmlmb19leHBpcmVbMl0gPSB7IEhaIC8gNCwgSFogLyA4IH07CiAvKiBtYXhpbXVtIGJhY2t3YXJkcyBzZWVrLCBpbiBLaUIgKi8KIHN0YXRpYyBjb25zdCBpbnQgY2ZxX2JhY2tfbWF4ID0gMTYgKiAxMDI0OwpAQCAtNDYsOCArNDYsOSBAQAogI2RlZmluZSBDRlFfSFdfUVVFVUVfTUlOCSg1KQogI2RlZmluZSBDRlFfU0VSVklDRV9TSElGVCAgICAgICAxMgogCi0jZGVmaW5lIENGUVFfU0VFS19USFIJCTggKiAxMDI0Ci0jZGVmaW5lIENGUVFfU0VFS1koY2ZxcSkJKChjZnFxKS0+c2Vla19tZWFuID4gQ0ZRUV9TRUVLX1RIUikKKyNkZWZpbmUgQ0ZRUV9TRUVLX1RIUgkJKHNlY3Rvcl90KSg4ICogMTAwKQorI2RlZmluZSBDRlFRX1NFQ1RfVEhSX05PTlJPVAkoc2VjdG9yX3QpKDIgKiAzMikKKyNkZWZpbmUgQ0ZRUV9TRUVLWShjZnFxKQkoaHdlaWdodDMyKGNmcXEtPnNlZWtfaGlzdG9yeSkgPiAzMi84KQogCiAjZGVmaW5lIFJRX0NJQyhycSkJCVwKIAkoKHN0cnVjdCBjZnFfaW9fY29udGV4dCAqKSAocnEpLT5lbGV2YXRvcl9wcml2YXRlKQpAQCAtNzcsMTEgKzc4LDEyIEBACiAJc3RydWN0IHJiX3Jvb3QgcmI7CiAJc3RydWN0IHJiX25vZGUgKmxlZnQ7CiAJdW5zaWduZWQgY291bnQ7CisJdW5zaWduZWQgdG90YWxfd2VpZ2h0OwogCXU2NCBtaW5fdmRpc2t0aW1lOwogCXN0cnVjdCByYl9ub2RlICphY3RpdmU7Ci0JdW5zaWduZWQgdG90YWxfd2VpZ2h0OwogfTsKLSNkZWZpbmUgQ0ZRX1JCX1JPT1QJKHN0cnVjdCBjZnFfcmJfcm9vdCkgeyBSQl9ST09ULCBOVUxMLCAwLCAwLCB9CisjZGVmaW5lIENGUV9SQl9ST09UCShzdHJ1Y3QgY2ZxX3JiX3Jvb3QpIHsgLnJiID0gUkJfUk9PVCwgLmxlZnQgPSBOVUxMLCBcCisJCQkuY291bnQgPSAwLCAubWluX3ZkaXNrdGltZSA9IDAsIH0KIAogLyoKICAqIFBlciBwcm9jZXNzLWdyb3VwaW5nIHN0cnVjdHVyZQpAQCAtMTE1LDExICsxMTcsMTEgQEAKIAkvKiB0aW1lIHdoZW4gcXVldWUgZ290IHNjaGVkdWxlZCBpbiB0byBkaXNwYXRjaCBmaXJzdCByZXF1ZXN0LiAqLwogCXVuc2lnbmVkIGxvbmcgZGlzcGF0Y2hfc3RhcnQ7CiAJdW5zaWduZWQgaW50IGFsbG9jYXRlZF9zbGljZTsKKwl1bnNpZ25lZCBpbnQgc2xpY2VfZGlzcGF0Y2g7CiAJLyogdGltZSB3aGVuIGZpcnN0IHJlcXVlc3QgZnJvbSBxdWV1ZSBjb21wbGV0ZWQgYW5kIHNsaWNlIHN0YXJ0ZWQuICovCiAJdW5zaWduZWQgbG9uZyBzbGljZV9zdGFydDsKIAl1bnNpZ25lZCBsb25nIHNsaWNlX2VuZDsKIAlsb25nIHNsaWNlX3Jlc2lkOwotCXVuc2lnbmVkIGludCBzbGljZV9kaXNwYXRjaDsKIAogCS8qIHBlbmRpbmcgbWV0YWRhdGEgcmVxdWVzdHMgKi8KIAlpbnQgbWV0YV9wZW5kaW5nOwpAQCAtMTMwLDEzICsxMzIsMTEgQEAKIAl1bnNpZ25lZCBzaG9ydCBpb3ByaW8sIG9yZ19pb3ByaW87CiAJdW5zaWduZWQgc2hvcnQgaW9wcmlvX2NsYXNzLCBvcmdfaW9wcmlvX2NsYXNzOwogCi0JdW5zaWduZWQgaW50IHNlZWtfc2FtcGxlczsKLQl1NjQgc2Vla190b3RhbDsKLQlzZWN0b3JfdCBzZWVrX21lYW47Ci0Jc2VjdG9yX3QgbGFzdF9yZXF1ZXN0X3BvczsKLQogCXBpZF90IHBpZDsKIAorCXUzMiBzZWVrX2hpc3Rvcnk7CisJc2VjdG9yX3QgbGFzdF9yZXF1ZXN0X3BvczsKKwogCXN0cnVjdCBjZnFfcmJfcm9vdCAqc2VydmljZV90cmVlOwogCXN0cnVjdCBjZnFfcXVldWUgKm5ld19jZnFxOwogCXN0cnVjdCBjZnFfZ3JvdXAgKmNmcWc7CkBAIC0yMjMsOCArMjIzLDggQEAKIAogCXVuc2lnbmVkIGludCBidXN5X3F1ZXVlczsKIAotCWludCBycV9pbl9kcml2ZXJbMl07Ci0JaW50IHN5bmNfZmxpZ2h0OworCWludCBycV9pbl9kcml2ZXI7CisJaW50IHJxX2luX2ZsaWdodFsyXTsKIAogCS8qCiAJICogcXVldWUtZGVwdGggZGV0ZWN0aW9uCkBAIC00MTcsMTEgKzQxNyw2IEBACiBzdGF0aWMgc3RydWN0IGNmcV9pb19jb250ZXh0ICpjZnFfY2ljX2xvb2t1cChzdHJ1Y3QgY2ZxX2RhdGEgKiwKIAkJCQkJCXN0cnVjdCBpb19jb250ZXh0ICopOwogCi1zdGF0aWMgaW5saW5lIGludCBycV9pbl9kcml2ZXIoc3RydWN0IGNmcV9kYXRhICpjZnFkKQotewotCXJldHVybiBjZnFkLT5ycV9pbl9kcml2ZXJbMF0gKyBjZnFkLT5ycV9pbl9kcml2ZXJbMV07Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNmcV9xdWV1ZSAqY2ljX3RvX2NmcXEoc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMsCiAJCQkJCSAgICBib29sIGlzX3N5bmMpCiB7CkBAIC05NTEsMTAgKzk0Niw2IEBACiAJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSA9ICZjZnFkLT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mbzsKIAl1bnNpZ25lZCBpbnQgbWFqb3IsIG1pbm9yOwogCi0JLyogRG8gd2UgbmVlZCB0byB0YWtlIHRoaXMgcmVmZXJlbmNlICovCi0JaWYgKCFibGtpb2NnX2Nzc190cnlnZXQoYmxrY2cpKQotCQlyZXR1cm4gTlVMTDs7Ci0KIAljZnFnID0gY2ZxZ19vZl9ibGtnKGJsa2lvY2dfbG9va3VwX2dyb3VwKGJsa2NnLCBrZXkpKTsKIAlpZiAoY2ZxZyB8fCAhY3JlYXRlKQogCQlnb3RvIGRvbmU7CkBAIC05ODUsNyArOTc2LDYgQEAKIAlobGlzdF9hZGRfaGVhZCgmY2ZxZy0+Y2ZxZF9ub2RlLCAmY2ZxZC0+Y2ZxZ19saXN0KTsKIAogZG9uZToKLQlibGtpb2NnX2Nzc19wdXQoYmxrY2cpOwogCXJldHVybiBjZnFnOwogfQogCkBAIC0xNDIwLDkgKzE0MTAsOSBAQAogewogCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOwogCi0JY2ZxZC0+cnFfaW5fZHJpdmVyW3JxX2lzX3N5bmMocnEpXSsrOworCWNmcWQtPnJxX2luX2RyaXZlcisrOwogCWNmcV9sb2dfY2ZxcShjZnFkLCBSUV9DRlFRKHJxKSwgImFjdGl2YXRlIHJxLCBkcnY9JWQiLAotCQkJCQkJcnFfaW5fZHJpdmVyKGNmcWQpKTsKKwkJCQkJCWNmcWQtPnJxX2luX2RyaXZlcik7CiAKIAljZnFkLT5sYXN0X3Bvc2l0aW9uID0gYmxrX3JxX3BvcyhycSkgKyBibGtfcnFfc2VjdG9ycyhycSk7CiB9CkBAIC0xNDMwLDEyICsxNDIwLDExIEBACiBzdGF0aWMgdm9pZCBjZnFfZGVhY3RpdmF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7Ci0JY29uc3QgaW50IHN5bmMgPSBycV9pc19zeW5jKHJxKTsKIAotCVdBUk5fT04oIWNmcWQtPnJxX2luX2RyaXZlcltzeW5jXSk7Ci0JY2ZxZC0+cnFfaW5fZHJpdmVyW3N5bmNdLS07CisJV0FSTl9PTighY2ZxZC0+cnFfaW5fZHJpdmVyKTsKKwljZnFkLT5ycV9pbl9kcml2ZXItLTsKIAljZnFfbG9nX2NmcXEoY2ZxZCwgUlFfQ0ZRUShycSksICJkZWFjdGl2YXRlIHJxLCBkcnY9JWQiLAotCQkJCQkJcnFfaW5fZHJpdmVyKGNmcWQpKTsKKwkJCQkJCWNmcWQtPnJxX2luX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIGNmcV9yZW1vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpCkBAIC0xNjczLDE2ICsxNjYyLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGNmcV9ycV9jbG9zZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEsCiAJCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJxLCBib29sIGZvcl9wcmVlbXB0KQogewotCXNlY3Rvcl90IHNkaXN0ID0gY2ZxcS0+c2Vla19tZWFuOwotCi0JaWYgKCFzYW1wbGVfdmFsaWQoY2ZxcS0+c2Vla19zYW1wbGVzKSkKLQkJc2Rpc3QgPSBDRlFRX1NFRUtfVEhSOwotCi0JLyogaWYgc2Vla19tZWFuIGlzIGJpZywgdXNpbmcgaXQgYXMgY2xvc2UgY3JpdGVyaWEgaXMgbWVhbmluZ2xlc3MgKi8KLQlpZiAoc2Rpc3QgPiBDRlFRX1NFRUtfVEhSICYmICFmb3JfcHJlZW1wdCkKLQkJc2Rpc3QgPSBDRlFRX1NFRUtfVEhSOwotCi0JcmV0dXJuIGNmcV9kaXN0X2Zyb21fbGFzdChjZnFkLCBycSkgPD0gc2Rpc3Q7CisJcmV0dXJuIGNmcV9kaXN0X2Zyb21fbGFzdChjZnFkLCBycSkgPD0gQ0ZRUV9TRUVLX1RIUjsKIH0KIAogc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKmNmcXFfY2xvc2Uoc3RydWN0IGNmcV9kYXRhICpjZnFkLApAQCAtMTg3OCw4ICsxODU4LDcgQEAKIAljZnFxLT5kaXNwYXRjaGVkKys7CiAJZWx2X2Rpc3BhdGNoX3NvcnQocSwgcnEpOwogCi0JaWYgKGNmcV9jZnFxX3N5bmMoY2ZxcSkpCi0JCWNmcWQtPnN5bmNfZmxpZ2h0Kys7CisJY2ZxZC0+cnFfaW5fZmxpZ2h0W2NmcV9jZnFxX3N5bmMoY2ZxcSldKys7CiAJY2ZxcS0+bnJfc2VjdG9ycyArPSBibGtfcnFfc2VjdG9ycyhycSk7CiB9CiAKQEAgLTIyMTksNiArMjE5OCwxOSBAQAogCXJldHVybiBkaXNwYXRjaGVkOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgY2ZxX3NsaWNlX3VzZWRfc29vbihzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsCisJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKK3sKKwkvKiB0aGUgcXVldWUgaGFzbid0IGZpbmlzaGVkIGFueSByZXF1ZXN0LCBjYW4ndCBlc3RpbWF0ZSAqLworCWlmIChjZnFfY2ZxcV9zbGljZV9uZXcoY2ZxcSkpCisJCXJldHVybiAxOworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMgKyBjZnFkLT5jZnFfc2xpY2VfaWRsZSAqIGNmcXEtPmRpc3BhdGNoZWQsCisJCWNmcXEtPnNsaWNlX2VuZCkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBib29sIGNmcV9tYXlfZGlzcGF0Y2goc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQogewogCXVuc2lnbmVkIGludCBtYXhfZGlzcGF0Y2g7CkBAIC0yMjI2LDE2ICsyMjE4LDE2IEBACiAJLyoKIAkgKiBEcmFpbiBhc3luYyByZXF1ZXN0cyBiZWZvcmUgd2Ugc3RhcnQgc3luYyBJTwogCSAqLwotCWlmIChjZnFfc2hvdWxkX2lkbGUoY2ZxZCwgY2ZxcSkgJiYgY2ZxZC0+cnFfaW5fZHJpdmVyW0JMS19SV19BU1lOQ10pCisJaWYgKGNmcV9zaG91bGRfaWRsZShjZnFkLCBjZnFxKSAmJiBjZnFkLT5ycV9pbl9mbGlnaHRbQkxLX1JXX0FTWU5DXSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIGFuIGFzeW5jIHF1ZXVlIGFuZCB3ZSBoYXZlIHN5bmMgSU8gaW4gZmxpZ2h0LCBsZXQgaXQgd2FpdAogCSAqLwotCWlmIChjZnFkLT5zeW5jX2ZsaWdodCAmJiAhY2ZxX2NmcXFfc3luYyhjZnFxKSkKKwlpZiAoY2ZxZC0+cnFfaW5fZmxpZ2h0W0JMS19SV19TWU5DXSAmJiAhY2ZxX2NmcXFfc3luYyhjZnFxKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JbWF4X2Rpc3BhdGNoID0gY2ZxZC0+Y2ZxX3F1YW50dW07CisJbWF4X2Rpc3BhdGNoID0gbWF4X3QodW5zaWduZWQgaW50LCBjZnFkLT5jZnFfcXVhbnR1bSAvIDIsIDEpOwogCWlmIChjZnFfY2xhc3NfaWRsZShjZnFxKSkKIAkJbWF4X2Rpc3BhdGNoID0gMTsKIApAQCAtMjI1MiwxMyArMjI0NCwyMiBAQAogCQkvKgogCQkgKiBXZSBoYXZlIG90aGVyIHF1ZXVlcywgZG9uJ3QgYWxsb3cgbW9yZSBJTyBmcm9tIHRoaXMgb25lCiAJCSAqLwotCQlpZiAoY2ZxZC0+YnVzeV9xdWV1ZXMgPiAxKQorCQlpZiAoY2ZxZC0+YnVzeV9xdWV1ZXMgPiAxICYmIGNmcV9zbGljZV91c2VkX3Nvb24oY2ZxZCwgY2ZxcSkpCiAJCQlyZXR1cm4gZmFsc2U7CiAKIAkJLyoKIAkJICogU29sZSBxdWV1ZSB1c2VyLCBubyBsaW1pdAogCQkgKi8KLQkJbWF4X2Rpc3BhdGNoID0gLTE7CisJCWlmIChjZnFkLT5idXN5X3F1ZXVlcyA9PSAxKQorCQkJbWF4X2Rpc3BhdGNoID0gLTE7CisJCWVsc2UKKwkJCS8qCisJCQkgKiBOb3JtYWxseSB3ZSBzdGFydCB0aHJvdHRsaW5nIGNmcXEgd2hlbiBjZnFfcXVhbnR1bS8yCisJCQkgKiByZXF1ZXN0cyBoYXZlIGJlZW4gZGlzcGF0Y2hlZC4gQnV0IHdlIGNhbiBkcml2ZQorCQkJICogZGVlcGVyIHF1ZXVlIGRlcHRocyBhdCB0aGUgYmVnaW5uaW5nIG9mIHNsaWNlCisJCQkgKiBzdWJqZWN0ZWQgdG8gdXBwZXIgbGltaXQgb2YgY2ZxX3F1YW50dW0uCisJCQkgKiAqLworCQkJbWF4X2Rpc3BhdGNoID0gY2ZxZC0+Y2ZxX3F1YW50dW07CiAJfQogCiAJLyoKQEAgLTI5ODAsMzAgKzI5ODEsMjAgQEAKIGNmcV91cGRhdGVfaW9fc2Vla3RpbWUoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLAogCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCXNlY3Rvcl90IHNkaXN0OwotCXU2NCB0b3RhbDsKKwlzZWN0b3JfdCBzZGlzdCA9IDA7CisJc2VjdG9yX3Qgbl9zZWMgPSBibGtfcnFfc2VjdG9ycyhycSk7CisJaWYgKGNmcXEtPmxhc3RfcmVxdWVzdF9wb3MpIHsKKwkJaWYgKGNmcXEtPmxhc3RfcmVxdWVzdF9wb3MgPCBibGtfcnFfcG9zKHJxKSkKKwkJCXNkaXN0ID0gYmxrX3JxX3BvcyhycSkgLSBjZnFxLT5sYXN0X3JlcXVlc3RfcG9zOworCQllbHNlCisJCQlzZGlzdCA9IGNmcXEtPmxhc3RfcmVxdWVzdF9wb3MgLSBibGtfcnFfcG9zKHJxKTsKKwl9CiAKLQlpZiAoIWNmcXEtPmxhc3RfcmVxdWVzdF9wb3MpCi0JCXNkaXN0ID0gMDsKLQllbHNlIGlmIChjZnFxLT5sYXN0X3JlcXVlc3RfcG9zIDwgYmxrX3JxX3BvcyhycSkpCi0JCXNkaXN0ID0gYmxrX3JxX3BvcyhycSkgLSBjZnFxLT5sYXN0X3JlcXVlc3RfcG9zOworCWNmcXEtPnNlZWtfaGlzdG9yeSA8PD0gMTsKKwlpZiAoYmxrX3F1ZXVlX25vbnJvdChjZnFkLT5xdWV1ZSkpCisJCWNmcXEtPnNlZWtfaGlzdG9yeSB8PSAobl9zZWMgPCBDRlFRX1NFQ1RfVEhSX05PTlJPVCk7CiAJZWxzZQotCQlzZGlzdCA9IGNmcXEtPmxhc3RfcmVxdWVzdF9wb3MgLSBibGtfcnFfcG9zKHJxKTsKLQotCS8qCi0JICogRG9uJ3QgYWxsb3cgdGhlIHNlZWsgZGlzdGFuY2UgdG8gZ2V0IHRvbyBsYXJnZSBmcm9tIHRoZQotCSAqIG9kZCBmcmFnbWVudCwgcGFnZWluLCBldGMKLQkgKi8KLQlpZiAoY2ZxcS0+c2Vla19zYW1wbGVzIDw9IDYwKSAvKiBzZWNvbmQmdGhpcmQgc2VlayAqLwotCQlzZGlzdCA9IG1pbihzZGlzdCwgKGNmcXEtPnNlZWtfbWVhbiAqIDQpICsgMioxMDI0KjEwMjQpOwotCWVsc2UKLQkJc2Rpc3QgPSBtaW4oc2Rpc3QsIChjZnFxLT5zZWVrX21lYW4gKiA0KSArIDIqMTAyNCo2NCk7Ci0KLQljZnFxLT5zZWVrX3NhbXBsZXMgPSAoNypjZnFxLT5zZWVrX3NhbXBsZXMgKyAyNTYpIC8gODsKLQljZnFxLT5zZWVrX3RvdGFsID0gKDcqY2ZxcS0+c2Vla190b3RhbCArICh1NjQpMjU2KnNkaXN0KSAvIDg7Ci0JdG90YWwgPSBjZnFxLT5zZWVrX3RvdGFsICsgKGNmcXEtPnNlZWtfc2FtcGxlcy8yKTsKLQlkb19kaXYodG90YWwsIGNmcXEtPnNlZWtfc2FtcGxlcyk7Ci0JY2ZxcS0+c2Vla19tZWFuID0gKHNlY3Rvcl90KXRvdGFsOworCQljZnFxLT5zZWVrX2hpc3RvcnkgfD0gKHNkaXN0ID4gQ0ZRUV9TRUVLX1RIUik7CiB9CiAKIC8qCkBAIC0zMDI4LDggKzMwMTksNyBAQAogCQljZnFfbWFya19jZnFxX2RlZXAoY2ZxcSk7CiAKIAlpZiAoIWF0b21pY19yZWFkKCZjaWMtPmlvYy0+bnJfdGFza3MpIHx8ICFjZnFkLT5jZnFfc2xpY2VfaWRsZSB8fAotCSAgICAoIWNmcV9jZnFxX2RlZXAoY2ZxcSkgJiYgc2FtcGxlX3ZhbGlkKGNmcXEtPnNlZWtfc2FtcGxlcykKLQkgICAgICYmIENGUVFfU0VFS1koY2ZxcSkpKQorCSAgICAoIWNmcV9jZnFxX2RlZXAoY2ZxcSkgJiYgQ0ZRUV9TRUVLWShjZnFxKSkpCiAJCWVuYWJsZV9pZGxlID0gMDsKIAllbHNlIGlmIChzYW1wbGVfdmFsaWQoY2ljLT50dGltZV9zYW1wbGVzKSkgewogCQlpZiAoY2ljLT50dGltZV9tZWFuID4gY2ZxZC0+Y2ZxX3NsaWNlX2lkbGUpCkBAIC0zMjE1LDE0ICszMjA1LDE0IEBACiB7CiAJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSA9IGNmcWQtPmFjdGl2ZV9xdWV1ZTsKIAotCWlmIChycV9pbl9kcml2ZXIoY2ZxZCkgPiBjZnFkLT5od190YWdfZXN0X2RlcHRoKQotCQljZnFkLT5od190YWdfZXN0X2RlcHRoID0gcnFfaW5fZHJpdmVyKGNmcWQpOworCWlmIChjZnFkLT5ycV9pbl9kcml2ZXIgPiBjZnFkLT5od190YWdfZXN0X2RlcHRoKQorCQljZnFkLT5od190YWdfZXN0X2RlcHRoID0gY2ZxZC0+cnFfaW5fZHJpdmVyOwogCiAJaWYgKGNmcWQtPmh3X3RhZyA9PSAxKQogCQlyZXR1cm47CiAKIAlpZiAoY2ZxZC0+cnFfcXVldWVkIDw9IENGUV9IV19RVUVVRV9NSU4gJiYKLQkgICAgcnFfaW5fZHJpdmVyKGNmcWQpIDw9IENGUV9IV19RVUVVRV9NSU4pCisJICAgIGNmcWQtPnJxX2luX2RyaXZlciA8PSBDRlFfSFdfUVVFVUVfTUlOKQogCQlyZXR1cm47CiAKIAkvKgpAQCAtMzIzMiw3ICszMjIyLDcgQEAKIAkgKi8KIAlpZiAoY2ZxcSAmJiBjZnFfY2ZxcV9pZGxlX3dpbmRvdyhjZnFxKSAmJgogCSAgICBjZnFxLT5kaXNwYXRjaGVkICsgY2ZxcS0+cXVldWVkWzBdICsgY2ZxcS0+cXVldWVkWzFdIDwKLQkgICAgQ0ZRX0hXX1FVRVVFX01JTiAmJiBycV9pbl9kcml2ZXIoY2ZxZCkgPCBDRlFfSFdfUVVFVUVfTUlOKQorCSAgICBDRlFfSFdfUVVFVUVfTUlOICYmIGNmcWQtPnJxX2luX2RyaXZlciA8IENGUV9IV19RVUVVRV9NSU4pCiAJCXJldHVybjsKIAogCWlmIChjZnFkLT5od190YWdfc2FtcGxlcysrIDwgNTApCkBAIC0zMjg1LDEzICszMjc1LDEyIEBACiAKIAljZnFfdXBkYXRlX2h3X3RhZyhjZnFkKTsKIAotCVdBUk5fT04oIWNmcWQtPnJxX2luX2RyaXZlcltzeW5jXSk7CisJV0FSTl9PTighY2ZxZC0+cnFfaW5fZHJpdmVyKTsKIAlXQVJOX09OKCFjZnFxLT5kaXNwYXRjaGVkKTsKLQljZnFkLT5ycV9pbl9kcml2ZXJbc3luY10tLTsKKwljZnFkLT5ycV9pbl9kcml2ZXItLTsKIAljZnFxLT5kaXNwYXRjaGVkLS07CiAKLQlpZiAoY2ZxX2NmcXFfc3luYyhjZnFxKSkKLQkJY2ZxZC0+c3luY19mbGlnaHQtLTsKKwljZnFkLT5ycV9pbl9mbGlnaHRbY2ZxX2NmcXFfc3luYyhjZnFxKV0tLTsKIAogCWlmIChzeW5jKSB7CiAJCVJRX0NJQyhycSktPmxhc3RfZW5kX3JlcXVlc3QgPSBub3c7CkBAIC0zMzQ1LDcgKzMzMzQsNyBAQAogCQl9CiAJfQogCi0JaWYgKCFycV9pbl9kcml2ZXIoY2ZxZCkpCisJaWYgKCFjZnFkLT5ycV9pbl9kcml2ZXIpCiAJCWNmcV9zY2hlZHVsZV9kaXNwYXRjaChjZnFkKTsKIH0KIApkaWZmIC0tZ2l0IGEvYmxvY2svZWxldmF0b3IuYyBiL2Jsb2NrL2VsZXZhdG9yLmMKaW5kZXggOWFkNWNjYy4uZWUzYTg4MyAxMDA2NDQKLS0tIGEvYmxvY2svZWxldmF0b3IuYworKysgYi9ibG9jay9lbGV2YXRvci5jCkBAIC00NzQsNiArNDc0LDE1IEBACiAJaW50IHJldDsKIAogCS8qCisJICogTGV2ZWxzIG9mIG1lcmdlczoKKwkgKiAJbm9tZXJnZXM6ICBObyBtZXJnZXMgYXQgYWxsIGF0dGVtcHRlZAorCSAqIAlub3htZXJnZXM6IE9ubHkgc2ltcGxlIG9uZS1oaXQgY2FjaGUgdHJ5CisJICogCW1lcmdlczoJICAgQWxsIG1lcmdlIHRyaWVzIGF0dGVtcHRlZAorCSAqLworCWlmIChibGtfcXVldWVfbm9tZXJnZXMocSkpCisJCXJldHVybiBFTEVWQVRPUl9OT19NRVJHRTsKKworCS8qCiAJICogRmlyc3QgdHJ5IG9uZS1oaXQgY2FjaGUuCiAJICovCiAJaWYgKHEtPmxhc3RfbWVyZ2UpIHsKQEAgLTQ4NCw3ICs0OTMsNyBAQAogCQl9CiAJfQogCi0JaWYgKGJsa19xdWV1ZV9ub21lcmdlcyhxKSkKKwlpZiAoYmxrX3F1ZXVlX25veG1lcmdlcyhxKSkKIAkJcmV0dXJuIEVMRVZBVE9SX05PX01FUkdFOwogCiAJLyoKZGlmZiAtLWdpdCBhL2NyeXB0by9LY29uZmlnIGIvY3J5cHRvL0tjb25maWcKaW5kZXggODFjMTg1YS4uNmEyZTI5NSAxMDA2NDQKLS0tIGEvY3J5cHRvL0tjb25maWcKKysrIGIvY3J5cHRvL0tjb25maWcKQEAgLTExNCw2ICsxMTQsMTYgQEAKIAloZWxwCiAJICBUaGVzZSBhcmUgJ051bGwnIGFsZ29yaXRobXMsIHVzZWQgYnkgSVBzZWMsIHdoaWNoIGRvIG5vdGhpbmcuCiAKK2NvbmZpZyBDUllQVE9fUENSWVBUCisJdHJpc3RhdGUgIlBhcmFsbGVsIGNyeXB0byBlbmdpbmUgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBTTVAgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IFBBREFUQQorCXNlbGVjdCBDUllQVE9fTUFOQUdFUgorCXNlbGVjdCBDUllQVE9fQUVBRAorCWhlbHAKKwkgIFRoaXMgY29udmVydHMgYW4gYXJiaXRyYXJ5IGNyeXB0byBhbGdvcml0aG0gaW50byBhIHBhcmFsbGVsCisJICBhbGdvcml0aG0gdGhhdCBleGVjdXRlcyBpbiBrZXJuZWwgdGhyZWFkcy4KKwogY29uZmlnIENSWVBUT19XT1JLUVVFVUUKICAgICAgICB0cmlzdGF0ZQogCmRpZmYgLS1naXQgYS9jcnlwdG8vTWFrZWZpbGUgYi9jcnlwdG8vTWFrZWZpbGUKaW5kZXggOWU4ZjYxOS4uZDdlNjQ0MSAxMDA2NDQKLS0tIGEvY3J5cHRvL01ha2VmaWxlCisrKyBiL2NyeXB0by9NYWtlZmlsZQpAQCAtNTYsNiArNTYsNyBAQAogb2JqLSQoQ09ORklHX0NSWVBUT19DVFIpICs9IGN0ci5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0dDTSkgKz0gZ2NtLm8KIG9iai0kKENPTkZJR19DUllQVE9fQ0NNKSArPSBjY20ubworb2JqLSQoQ09ORklHX0NSWVBUT19QQ1JZUFQpICs9IHBjcnlwdC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0NSWVBURCkgKz0gY3J5cHRkLm8KIG9iai0kKENPTkZJR19DUllQVE9fREVTKSArPSBkZXNfZ2VuZXJpYy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0ZDUllQVCkgKz0gZmNyeXB0Lm8KZGlmZiAtLWdpdCBhL2NyeXB0by9hYmxrY2lwaGVyLmMgYi9jcnlwdG8vYWJsa2NpcGhlci5jCmluZGV4IGY2ZjA4MzMuLmZlOTgwZGEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hYmxrY2lwaGVyLmMKKysrIGIvY3J5cHRvL2FibGtjaXBoZXIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBBc3luY2hyb25vdXMgYmxvY2sgY2hhaW5pbmcgY2lwaGVyIG9wZXJhdGlvbnMuCi0gKiAKKyAqCiAgKiBUaGlzIGlzIHRoZSBhc3luY2hyb25vdXMgdmVyc2lvbiBvZiBibGtjaXBoZXIuYyBpbmRpY2F0aW5nIGNvbXBsZXRpb24KICAqIHZpYSBhIGNhbGxiYWNrLgogICoKQEAgLTgsNyArOCw3IEBACiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIAorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCmRpZmYgLS1naXQgYS9jcnlwdG8vYWVhZC5jIGIvY3J5cHRvL2FlYWQuYwppbmRleCAwYTU1ZGE3Li42NzI5ZThmIDEwMDY0NAotLS0gYS9jcnlwdG8vYWVhZC5jCisrKyBiL2NyeXB0by9hZWFkLmMKQEAgLTEsMTMgKzEsMTMgQEAKIC8qCiAgKiBBRUFEOiBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSAqIAorICoKICAqIFRoaXMgZmlsZSBwcm92aWRlcyBBUEkgc3VwcG9ydCBmb3IgQUVBRCBhbGdvcml0aG1zLgogICoKICAqIENvcHlyaWdodCAoYykgMjAwNyBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIAorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzX2dlbmVyaWMuYyBiL2NyeXB0by9hZXNfZ2VuZXJpYy5jCmluZGV4IGU3OGI3ZWUuLmE2OGM3M2QgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZXNfZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9hZXNfZ2VuZXJpYy5jCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICogQ3J5cHRvZ3JhcGhpYyBBUEkuCiAgKgogICogQUVTIENpcGhlciBBbGdvcml0aG0uCkBAIC0xMTI3LDcgKzExMjcsNyBAQAogCiAjZGVmaW5lIHN0YXJfeCh4KSAoKCh4KSAmIDB4N2Y3ZjdmN2YpIDw8IDEpIF4gKCgoKHgpICYgMHg4MDgwODA4MCkgPj4gNykgKiAweDFiKQogCi0jZGVmaW5lIGltaXhfY29sKHkseCkJZG8gewkJXAorI2RlZmluZSBpbWl4X2NvbCh5LCB4KQlkbyB7CQlcCiAJdQk9IHN0YXJfeCh4KTsJCVwKIAl2CT0gc3Rhcl94KHUpOwkJXAogCXcJPSBzdGFyX3godik7CQlcCmRpZmYgLS1naXQgYS9jcnlwdG8vYWxnYXBpLmMgYi9jcnlwdG8vYWxnYXBpLmMKaW5kZXggZjE0OWIxYy4uM2U0NTI0ZSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FsZ2FwaS5jCisrKyBiL2NyeXB0by9hbGdhcGkuYwpAQCAtMjMwLDcgKzIzMCw3IEBACiAJbGlzdF9hZGQoJmFsZy0+Y3JhX2xpc3QsICZjcnlwdG9fYWxnX2xpc3QpOwogCWxpc3RfYWRkKCZsYXJ2YWwtPmFsZy5jcmFfbGlzdCwgJmNyeXB0b19hbGdfbGlzdCk7CiAKLW91dDoJCitvdXQ6CiAJcmV0dXJuIGxhcnZhbDsKIAogZnJlZV9sYXJ2YWw6CkBAIC0zODgsNyArMzg4LDcgQEAKIHsKIAlpbnQgcmV0OwogCUxJU1RfSEVBRChsaXN0KTsKLQkKKwogCWRvd25fd3JpdGUoJmNyeXB0b19hbGdfc2VtKTsKIAlyZXQgPSBjcnlwdG9fcmVtb3ZlX2FsZyhhbGcsICZsaXN0KTsKIAl1cF93cml0ZSgmY3J5cHRvX2FsZ19zZW0pOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FudWJpcy5jIGIvY3J5cHRvL2FudWJpcy5jCmluZGV4IGU0MmMzYTguLjc3NTMwZDUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hbnViaXMuYworKysgYi9jcnlwdG8vYW51YmlzLmMKQEAgLTQ2OSwxNCArNDY5LDEzIEBACiAJdTMyIGthcHBhW0FOVUJJU19NQVhfTl07CiAJdTMyIGludGVyW0FOVUJJU19NQVhfTl07CiAKLQlzd2l0Y2ggKGtleV9sZW4pCi0JeworCXN3aXRjaCAoa2V5X2xlbikgewogCQljYXNlIDE2OiBjYXNlIDIwOiBjYXNlIDI0OiBjYXNlIDI4OgogCQljYXNlIDMyOiBjYXNlIDM2OiBjYXNlIDQwOgogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47Ci0JCQlyZXR1cm4gLSBFSU5WQUw7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAljdHgtPmtleV9sZW4gPSBrZXlfbGVuICogODsKQEAgLTUzMCwyMyArNTI5LDI0IEBACiAJCS8qCiAJCSAqIGNvbXB1dGUga2FwcGFee3IrMX0gZnJvbSBrYXBwYV5yOgogCQkgKi8KLQkJaWYgKHIgPT0gUikgeworCQlpZiAociA9PSBSKQogCQkJYnJlYWs7Ci0JCX0KIAkJZm9yIChpID0gMDsgaSA8IE47IGkrKykgewogCQkJaW50IGogPSBpOwogCQkJaW50ZXJbaV0gID0gVDBbKGthcHBhW2otLV0gPj4gMjQpICAgICAgIF07Ci0JCQlpZiAoaiA8IDApIGogPSBOIC0gMTsKKwkJCWlmIChqIDwgMCkKKwkJCQlqID0gTiAtIDE7CiAJCQlpbnRlcltpXSBePSBUMVsoa2FwcGFbai0tXSA+PiAxNikgJiAweGZmXTsKLQkJCWlmIChqIDwgMCkgaiA9IE4gLSAxOworCQkJaWYgKGogPCAwKQorCQkJCWogPSBOIC0gMTsKIAkJCWludGVyW2ldIF49IFQyWyhrYXBwYVtqLS1dID4+ICA4KSAmIDB4ZmZdOwotCQkJaWYgKGogPCAwKSBqID0gTiAtIDE7CisJCQlpZiAoaiA8IDApCisJCQkJaiA9IE4gLSAxOwogCQkJaW50ZXJbaV0gXj0gVDNbKGthcHBhW2ogIF0gICAgICApICYgMHhmZl07CiAJCX0KIAkJa2FwcGFbMF0gPSBpbnRlclswXSBeIHJjW3JdOwotCQlmb3IgKGkgPSAxOyBpIDwgTjsgaSsrKSB7CisJCWZvciAoaSA9IDE7IGkgPCBOOyBpKyspCiAJCQlrYXBwYVtpXSA9IGludGVyW2ldOwotCQl9CiAJfQogCiAJLyoKQEAgLTY5MCw3ICs2OTAsNyBAQAogc3RhdGljIGludCBfX2luaXQgYW51YmlzX21vZF9pbml0KHZvaWQpCiB7CiAJaW50IHJldCA9IDA7Ci0JCisKIAlyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbnViaXNfYWxnKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FwaS5jIGIvY3J5cHRvL2FwaS5jCmluZGV4IDc5ODUyNmQuLjAzM2E3MTQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hcGkuYworKysgYi9jcnlwdG8vYXBpLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KQEAgLTI4OCwxMSArMjg4LDExIEBACiAKIAljYXNlIENSWVBUT19BTEdfVFlQRV9DT01QUkVTUzoKIAkJcmV0dXJuIGNyeXB0b19pbml0X2NvbXByZXNzX29wcyh0Zm0pOwotCQorCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQotCQorCiAJQlVHKCk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0zMTUsMTAgKzMxNSw5IEBACiAJY2FzZSBDUllQVE9fQUxHX1RZUEVfQ09NUFJFU1M6CiAJCWNyeXB0b19leGl0X2NvbXByZXNzX29wcyh0Zm0pOwogCQlicmVhazsKLQkKKwogCWRlZmF1bHQ6CiAJCUJVRygpOwotCQkKIAl9CiB9CiAKQEAgLTU5MywxMiArNTkyLDEyIEBACiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGNyeXB0b19hbGcgKmFsZyA9IGNyeXB0b19hbGdfbW9kX2xvb2t1cChuYW1lLCB0eXBlLCBtYXNrKTsKLQkKKwogCWlmICghSVNfRVJSKGFsZykpIHsKIAkJY3J5cHRvX21vZF9wdXQoYWxnKTsKIAkJcmV0ID0gMTsKIAl9Ci0JCisKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2hhc19hbGcpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2F1dGhlbmMuYyBiL2NyeXB0by9hdXRoZW5jLmMKaW5kZXggNGQ2ZjQ5YS4uMTg4NzA5MCAxMDA2NDQKLS0tIGEvY3J5cHRvL2F1dGhlbmMuYworKysgYi9jcnlwdG8vYXV0aGVuYy5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIAlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkoaWhhc2gsIGFyZXFfY3R4LT5zZywgYXJlcV9jdHgtPmNyeXB0bGVuLAogCQkJCSBhdXRoc2l6ZSwgMCk7CiAKLQllcnIgPSBtZW1jbXAoaWhhc2gsIGFocmVxLT5yZXN1bHQsIGF1dGhzaXplKSA/IC1FQkFETVNHOiAwOworCWVyciA9IG1lbWNtcChpaGFzaCwgYWhyZXEtPnJlc3VsdCwgYXV0aHNpemUpID8gLUVCQURNU0cgOiAwOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0yMzEsNyArMjMxLDcgQEAKIAlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkoaWhhc2gsIGFyZXFfY3R4LT5zZywgYXJlcV9jdHgtPmNyeXB0bGVuLAogCQkJCSBhdXRoc2l6ZSwgMCk7CiAKLQllcnIgPSBtZW1jbXAoaWhhc2gsIGFocmVxLT5yZXN1bHQsIGF1dGhzaXplKSA/IC1FQkFETVNHOiAwOworCWVyciA9IG1lbWNtcChpaGFzaCwgYWhyZXEtPnJlc3VsdCwgYXV0aHNpemUpID8gLUVCQURNU0cgOiAwOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC00NjQsNyArNDY0LDcgQEAKIAlpaGFzaCA9IG9oYXNoICsgYXV0aHNpemU7CiAJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KGloYXNoLCBhcmVxX2N0eC0+c2csIGFyZXFfY3R4LT5jcnlwdGxlbiwKIAkJCQkgYXV0aHNpemUsIDApOwotCXJldHVybiBtZW1jbXAoaWhhc2gsIG9oYXNoLCBhdXRoc2l6ZSkgPyAtRUJBRE1TRzogMDsKKwlyZXR1cm4gbWVtY21wKGloYXNoLCBvaGFzaCwgYXV0aHNpemUpID8gLUVCQURNU0cgOiAwOwogfQogCiBzdGF0aWMgaW50IGNyeXB0b19hdXRoZW5jX2l2ZXJpZnkoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxLCB1OCAqaXYsCkBAIC01NTcsMTEgKzU1NywxMSBAQAogCiAJY3R4LT5hdXRoID0gYXV0aDsKIAljdHgtPmVuYyA9IGVuYzsKLQkKKwogCXRmbS0+Y3J0X2FlYWQucmVxc2l6ZSA9IG1heF90KHVuc2lnbmVkIGludCwKIAkJCQljcnlwdG9fYWhhc2hfcmVxc2l6ZShhdXRoKSArIGN0eC0+cmVxb2ZmICsKIAkJCQlzaXplb2Yoc3RydWN0IGF1dGhlbmNfcmVxdWVzdF9jdHgpICsKLQkJCQlzaXplb2Yoc3RydWN0IGFoYXNoX3JlcXVlc3QpLCAKKwkJCQlzaXplb2Yoc3RydWN0IGFoYXNoX3JlcXVlc3QpLAogCQkJCXNpemVvZihzdHJ1Y3Qgc2tjaXBoZXJfZ2l2Y3J5cHRfcmVxdWVzdCkgKwogCQkJCWNyeXB0b19hYmxrY2lwaGVyX3JlcXNpemUoZW5jKSArCiAJCQkJY3J5cHRvX2FibGtjaXBoZXJfaXZzaXplKGVuYykpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Jsb3dmaXNoLmMgYi9jcnlwdG8vYmxvd2Zpc2guYwppbmRleCA2ZjViNDg3Li5hNjdkNTJlIDEwMDY0NAotLS0gYS9jcnlwdG8vYmxvd2Zpc2guYworKysgYi9jcnlwdG8vYmxvd2Zpc2guYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIENyeXB0b2dyYXBoaWMgQVBJLgogICoKICAqIEJsb3dmaXNoIENpcGhlciBBbGdvcml0aG0sIGJ5IEJydWNlIFNjaG5laWVyLgpAQCAtMjk5LDcgKzI5OSw3IEBACiAJMHhiNzRlNjEzMiwgMHhjZTc3ZTI1YiwgMHg1NzhmZGZlMywgMHgzYWMzNzJlNiwKIH07CiAKLS8qIAorLyoKICAqIFJvdW5kIGxvb3AgdW5yb2xsaW5nIG1hY3JvcywgUyBpcyBhIHBvaW50ZXIgdG8gYSBTLUJveCBhcnJheQogICogb3JnYW5pemVkIGluIDQgdW5zaWduZWQgbG9uZ3MgYXQgYSByb3cuCiAgKi8KQEAgLTMxNSw3ICszMTUsNyBAQAogCiAvKgogICogVGhlIGJsb3dmaXNoIGVuY2lwaGVyLCBwcm9jZXNzZXMgNjQtYml0IGJsb2Nrcy4KLSAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gTVVTVE4nVCByZXNwZWN0IGVuZGlhbmVzcyAKKyAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gTVVTVE4nVCByZXNwZWN0IGVuZGlhbmVzcwogICovCiBzdGF0aWMgdm9pZCBlbmNyeXB0X2Jsb2NrKHN0cnVjdCBiZl9jdHggKmJjdHgsIHUzMiAqZHN0LCB1MzIgKnNyYykKIHsKQEAgLTM5NSw3ICszOTUsNyBAQAogCW91dF9ibGtbMV0gPSBjcHVfdG9fYmUzMih5bCk7CiB9CiAKLS8qIAorLyoKICAqIENhbGN1bGF0ZXMgdGhlIGJsb3dmaXNoIFMgYW5kIFAgYm94ZXMgZm9yIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24uCiAgKi8KIHN0YXRpYyBpbnQgYmZfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCkBAIC00MTcsMTAgKzQxNywxMCBAQAogCiAJLyogQWN0dWFsIHN1YmtleSBnZW5lcmF0aW9uICovCiAJZm9yIChqID0gMCwgaSA9IDA7IGkgPCAxNiArIDI7IGkrKykgewotCQl0ZW1wID0gKCgodTMyIClrZXlbal0gPDwgMjQpIHwKLQkJCSgodTMyIClrZXlbKGogKyAxKSAlIGtleWxlbl0gPDwgMTYpIHwKLQkJCSgodTMyIClrZXlbKGogKyAyKSAlIGtleWxlbl0gPDwgOCkgfAotCQkJKCh1MzIgKWtleVsoaiArIDMpICUga2V5bGVuXSkpOworCQl0ZW1wID0gKCgodTMyKWtleVtqXSA8PCAyNCkgfAorCQkJKCh1MzIpa2V5WyhqICsgMSkgJSBrZXlsZW5dIDw8IDE2KSB8CisJCQkoKHUzMilrZXlbKGogKyAyKSAlIGtleWxlbl0gPDwgOCkgfAorCQkJKCh1MzIpa2V5WyhqICsgMykgJSBrZXlsZW5dKSk7CiAKIAkJUFtpXSA9IFBbaV0gXiB0ZW1wOwogCQlqID0gKGogKyA0KSAlIGtleWxlbjsKQEAgLTQ0NCw3ICs0NDQsNyBAQAogCQkJU1tjb3VudCArIDFdID0gZGF0YVsxXTsKIAkJfQogCX0KLQkKKwogCS8qIEJydWNlIHNheXMgbm90IHRvIGJvdGhlciB3aXRoIHRoZSB3ZWFrIGtleSBjaGVjay4gKi8KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2NyeXB0by9jYW1lbGxpYS5jIGIvY3J5cHRvL2NhbWVsbGlhLmMKaW5kZXggOTY0NjM1ZC4uNjRjZmY0NiAxMDA2NDQKLS0tIGEvY3J5cHRvL2NhbWVsbGlhLmMKKysrIGIvY3J5cHRvL2NhbWVsbGlhLmMKQEAgLTM5LDI3MSArMzksMjcxIEBACiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiBzdGF0aWMgY29uc3QgdTMyIGNhbWVsbGlhX3NwMTExMFsyNTZdID0gewotCTB4NzA3MDcwMDAsMHg4MjgyODIwMCwweDJjMmMyYzAwLDB4ZWNlY2VjMDAsCi0JMHhiM2IzYjMwMCwweDI3MjcyNzAwLDB4YzBjMGMwMDAsMHhlNWU1ZTUwMCwKLQkweGU0ZTRlNDAwLDB4ODU4NTg1MDAsMHg1NzU3NTcwMCwweDM1MzUzNTAwLAotCTB4ZWFlYWVhMDAsMHgwYzBjMGMwMCwweGFlYWVhZTAwLDB4NDE0MTQxMDAsCi0JMHgyMzIzMjMwMCwweGVmZWZlZjAwLDB4NmI2YjZiMDAsMHg5MzkzOTMwMCwKLQkweDQ1NDU0NTAwLDB4MTkxOTE5MDAsMHhhNWE1YTUwMCwweDIxMjEyMTAwLAotCTB4ZWRlZGVkMDAsMHgwZTBlMGUwMCwweDRmNGY0ZjAwLDB4NGU0ZTRlMDAsCi0JMHgxZDFkMWQwMCwweDY1NjU2NTAwLDB4OTI5MjkyMDAsMHhiZGJkYmQwMCwKLQkweDg2ODY4NjAwLDB4YjhiOGI4MDAsMHhhZmFmYWYwMCwweDhmOGY4ZjAwLAotCTB4N2M3YzdjMDAsMHhlYmViZWIwMCwweDFmMWYxZjAwLDB4Y2VjZWNlMDAsCi0JMHgzZTNlM2UwMCwweDMwMzAzMDAwLDB4ZGNkY2RjMDAsMHg1ZjVmNWYwMCwKLQkweDVlNWU1ZTAwLDB4YzVjNWM1MDAsMHgwYjBiMGIwMCwweDFhMWExYTAwLAotCTB4YTZhNmE2MDAsMHhlMWUxZTEwMCwweDM5MzkzOTAwLDB4Y2FjYWNhMDAsCi0JMHhkNWQ1ZDUwMCwweDQ3NDc0NzAwLDB4NWQ1ZDVkMDAsMHgzZDNkM2QwMCwKLQkweGQ5ZDlkOTAwLDB4MDEwMTAxMDAsMHg1YTVhNWEwMCwweGQ2ZDZkNjAwLAotCTB4NTE1MTUxMDAsMHg1NjU2NTYwMCwweDZjNmM2YzAwLDB4NGQ0ZDRkMDAsCi0JMHg4YjhiOGIwMCwweDBkMGQwZDAwLDB4OWE5YTlhMDAsMHg2NjY2NjYwMCwKLQkweGZiZmJmYjAwLDB4Y2NjY2NjMDAsMHhiMGIwYjAwMCwweDJkMmQyZDAwLAotCTB4NzQ3NDc0MDAsMHgxMjEyMTIwMCwweDJiMmIyYjAwLDB4MjAyMDIwMDAsCi0JMHhmMGYwZjAwMCwweGIxYjFiMTAwLDB4ODQ4NDg0MDAsMHg5OTk5OTkwMCwKLQkweGRmZGZkZjAwLDB4NGM0YzRjMDAsMHhjYmNiY2IwMCwweGMyYzJjMjAwLAotCTB4MzQzNDM0MDAsMHg3ZTdlN2UwMCwweDc2NzY3NjAwLDB4MDUwNTA1MDAsCi0JMHg2ZDZkNmQwMCwweGI3YjdiNzAwLDB4YTlhOWE5MDAsMHgzMTMxMzEwMCwKLQkweGQxZDFkMTAwLDB4MTcxNzE3MDAsMHgwNDA0MDQwMCwweGQ3ZDdkNzAwLAotCTB4MTQxNDE0MDAsMHg1ODU4NTgwMCwweDNhM2EzYTAwLDB4NjE2MTYxMDAsCi0JMHhkZWRlZGUwMCwweDFiMWIxYjAwLDB4MTExMTExMDAsMHgxYzFjMWMwMCwKLQkweDMyMzIzMjAwLDB4MGYwZjBmMDAsMHg5YzljOWMwMCwweDE2MTYxNjAwLAotCTB4NTM1MzUzMDAsMHgxODE4MTgwMCwweGYyZjJmMjAwLDB4MjIyMjIyMDAsCi0JMHhmZWZlZmUwMCwweDQ0NDQ0NDAwLDB4Y2ZjZmNmMDAsMHhiMmIyYjIwMCwKLQkweGMzYzNjMzAwLDB4YjViNWI1MDAsMHg3YTdhN2EwMCwweDkxOTE5MTAwLAotCTB4MjQyNDI0MDAsMHgwODA4MDgwMCwweGU4ZThlODAwLDB4YThhOGE4MDAsCi0JMHg2MDYwNjAwMCwweGZjZmNmYzAwLDB4Njk2OTY5MDAsMHg1MDUwNTAwMCwKLQkweGFhYWFhYTAwLDB4ZDBkMGQwMDAsMHhhMGEwYTAwMCwweDdkN2Q3ZDAwLAotCTB4YTFhMWExMDAsMHg4OTg5ODkwMCwweDYyNjI2MjAwLDB4OTc5Nzk3MDAsCi0JMHg1NDU0NTQwMCwweDViNWI1YjAwLDB4MWUxZTFlMDAsMHg5NTk1OTUwMCwKLQkweGUwZTBlMDAwLDB4ZmZmZmZmMDAsMHg2NDY0NjQwMCwweGQyZDJkMjAwLAotCTB4MTAxMDEwMDAsMHhjNGM0YzQwMCwweDAwMDAwMDAwLDB4NDg0ODQ4MDAsCi0JMHhhM2EzYTMwMCwweGY3ZjdmNzAwLDB4NzU3NTc1MDAsMHhkYmRiZGIwMCwKLQkweDhhOGE4YTAwLDB4MDMwMzAzMDAsMHhlNmU2ZTYwMCwweGRhZGFkYTAwLAotCTB4MDkwOTA5MDAsMHgzZjNmM2YwMCwweGRkZGRkZDAwLDB4OTQ5NDk0MDAsCi0JMHg4Nzg3ODcwMCwweDVjNWM1YzAwLDB4ODM4MzgzMDAsMHgwMjAyMDIwMCwKLQkweGNkY2RjZDAwLDB4NGE0YTRhMDAsMHg5MDkwOTAwMCwweDMzMzMzMzAwLAotCTB4NzM3MzczMDAsMHg2NzY3NjcwMCwweGY2ZjZmNjAwLDB4ZjNmM2YzMDAsCi0JMHg5ZDlkOWQwMCwweDdmN2Y3ZjAwLDB4YmZiZmJmMDAsMHhlMmUyZTIwMCwKLQkweDUyNTI1MjAwLDB4OWI5YjliMDAsMHhkOGQ4ZDgwMCwweDI2MjYyNjAwLAotCTB4YzhjOGM4MDAsMHgzNzM3MzcwMCwweGM2YzZjNjAwLDB4M2IzYjNiMDAsCi0JMHg4MTgxODEwMCwweDk2OTY5NjAwLDB4NmY2ZjZmMDAsMHg0YjRiNGIwMCwKLQkweDEzMTMxMzAwLDB4YmViZWJlMDAsMHg2MzYzNjMwMCwweDJlMmUyZTAwLAotCTB4ZTllOWU5MDAsMHg3OTc5NzkwMCwweGE3YTdhNzAwLDB4OGM4YzhjMDAsCi0JMHg5ZjlmOWYwMCwweDZlNmU2ZTAwLDB4YmNiY2JjMDAsMHg4ZThlOGUwMCwKLQkweDI5MjkyOTAwLDB4ZjVmNWY1MDAsMHhmOWY5ZjkwMCwweGI2YjZiNjAwLAotCTB4MmYyZjJmMDAsMHhmZGZkZmQwMCwweGI0YjRiNDAwLDB4NTk1OTU5MDAsCi0JMHg3ODc4NzgwMCwweDk4OTg5ODAwLDB4MDYwNjA2MDAsMHg2YTZhNmEwMCwKLQkweGU3ZTdlNzAwLDB4NDY0NjQ2MDAsMHg3MTcxNzEwMCwweGJhYmFiYTAwLAotCTB4ZDRkNGQ0MDAsMHgyNTI1MjUwMCwweGFiYWJhYjAwLDB4NDI0MjQyMDAsCi0JMHg4ODg4ODgwMCwweGEyYTJhMjAwLDB4OGQ4ZDhkMDAsMHhmYWZhZmEwMCwKLQkweDcyNzI3MjAwLDB4MDcwNzA3MDAsMHhiOWI5YjkwMCwweDU1NTU1NTAwLAotCTB4ZjhmOGY4MDAsMHhlZWVlZWUwMCwweGFjYWNhYzAwLDB4MGEwYTBhMDAsCi0JMHgzNjM2MzYwMCwweDQ5NDk0OTAwLDB4MmEyYTJhMDAsMHg2ODY4NjgwMCwKLQkweDNjM2MzYzAwLDB4MzgzODM4MDAsMHhmMWYxZjEwMCwweGE0YTRhNDAwLAotCTB4NDA0MDQwMDAsMHgyODI4MjgwMCwweGQzZDNkMzAwLDB4N2I3YjdiMDAsCi0JMHhiYmJiYmIwMCwweGM5YzljOTAwLDB4NDM0MzQzMDAsMHhjMWMxYzEwMCwKLQkweDE1MTUxNTAwLDB4ZTNlM2UzMDAsMHhhZGFkYWQwMCwweGY0ZjRmNDAwLAotCTB4Nzc3Nzc3MDAsMHhjN2M3YzcwMCwweDgwODA4MDAwLDB4OWU5ZTllMDAsCisJMHg3MDcwNzAwMCwgMHg4MjgyODIwMCwgMHgyYzJjMmMwMCwgMHhlY2VjZWMwMCwKKwkweGIzYjNiMzAwLCAweDI3MjcyNzAwLCAweGMwYzBjMDAwLCAweGU1ZTVlNTAwLAorCTB4ZTRlNGU0MDAsIDB4ODU4NTg1MDAsIDB4NTc1NzU3MDAsIDB4MzUzNTM1MDAsCisJMHhlYWVhZWEwMCwgMHgwYzBjMGMwMCwgMHhhZWFlYWUwMCwgMHg0MTQxNDEwMCwKKwkweDIzMjMyMzAwLCAweGVmZWZlZjAwLCAweDZiNmI2YjAwLCAweDkzOTM5MzAwLAorCTB4NDU0NTQ1MDAsIDB4MTkxOTE5MDAsIDB4YTVhNWE1MDAsIDB4MjEyMTIxMDAsCisJMHhlZGVkZWQwMCwgMHgwZTBlMGUwMCwgMHg0ZjRmNGYwMCwgMHg0ZTRlNGUwMCwKKwkweDFkMWQxZDAwLCAweDY1NjU2NTAwLCAweDkyOTI5MjAwLCAweGJkYmRiZDAwLAorCTB4ODY4Njg2MDAsIDB4YjhiOGI4MDAsIDB4YWZhZmFmMDAsIDB4OGY4ZjhmMDAsCisJMHg3YzdjN2MwMCwgMHhlYmViZWIwMCwgMHgxZjFmMWYwMCwgMHhjZWNlY2UwMCwKKwkweDNlM2UzZTAwLCAweDMwMzAzMDAwLCAweGRjZGNkYzAwLCAweDVmNWY1ZjAwLAorCTB4NWU1ZTVlMDAsIDB4YzVjNWM1MDAsIDB4MGIwYjBiMDAsIDB4MWExYTFhMDAsCisJMHhhNmE2YTYwMCwgMHhlMWUxZTEwMCwgMHgzOTM5MzkwMCwgMHhjYWNhY2EwMCwKKwkweGQ1ZDVkNTAwLCAweDQ3NDc0NzAwLCAweDVkNWQ1ZDAwLCAweDNkM2QzZDAwLAorCTB4ZDlkOWQ5MDAsIDB4MDEwMTAxMDAsIDB4NWE1YTVhMDAsIDB4ZDZkNmQ2MDAsCisJMHg1MTUxNTEwMCwgMHg1NjU2NTYwMCwgMHg2YzZjNmMwMCwgMHg0ZDRkNGQwMCwKKwkweDhiOGI4YjAwLCAweDBkMGQwZDAwLCAweDlhOWE5YTAwLCAweDY2NjY2NjAwLAorCTB4ZmJmYmZiMDAsIDB4Y2NjY2NjMDAsIDB4YjBiMGIwMDAsIDB4MmQyZDJkMDAsCisJMHg3NDc0NzQwMCwgMHgxMjEyMTIwMCwgMHgyYjJiMmIwMCwgMHgyMDIwMjAwMCwKKwkweGYwZjBmMDAwLCAweGIxYjFiMTAwLCAweDg0ODQ4NDAwLCAweDk5OTk5OTAwLAorCTB4ZGZkZmRmMDAsIDB4NGM0YzRjMDAsIDB4Y2JjYmNiMDAsIDB4YzJjMmMyMDAsCisJMHgzNDM0MzQwMCwgMHg3ZTdlN2UwMCwgMHg3Njc2NzYwMCwgMHgwNTA1MDUwMCwKKwkweDZkNmQ2ZDAwLCAweGI3YjdiNzAwLCAweGE5YTlhOTAwLCAweDMxMzEzMTAwLAorCTB4ZDFkMWQxMDAsIDB4MTcxNzE3MDAsIDB4MDQwNDA0MDAsIDB4ZDdkN2Q3MDAsCisJMHgxNDE0MTQwMCwgMHg1ODU4NTgwMCwgMHgzYTNhM2EwMCwgMHg2MTYxNjEwMCwKKwkweGRlZGVkZTAwLCAweDFiMWIxYjAwLCAweDExMTExMTAwLCAweDFjMWMxYzAwLAorCTB4MzIzMjMyMDAsIDB4MGYwZjBmMDAsIDB4OWM5YzljMDAsIDB4MTYxNjE2MDAsCisJMHg1MzUzNTMwMCwgMHgxODE4MTgwMCwgMHhmMmYyZjIwMCwgMHgyMjIyMjIwMCwKKwkweGZlZmVmZTAwLCAweDQ0NDQ0NDAwLCAweGNmY2ZjZjAwLCAweGIyYjJiMjAwLAorCTB4YzNjM2MzMDAsIDB4YjViNWI1MDAsIDB4N2E3YTdhMDAsIDB4OTE5MTkxMDAsCisJMHgyNDI0MjQwMCwgMHgwODA4MDgwMCwgMHhlOGU4ZTgwMCwgMHhhOGE4YTgwMCwKKwkweDYwNjA2MDAwLCAweGZjZmNmYzAwLCAweDY5Njk2OTAwLCAweDUwNTA1MDAwLAorCTB4YWFhYWFhMDAsIDB4ZDBkMGQwMDAsIDB4YTBhMGEwMDAsIDB4N2Q3ZDdkMDAsCisJMHhhMWExYTEwMCwgMHg4OTg5ODkwMCwgMHg2MjYyNjIwMCwgMHg5Nzk3OTcwMCwKKwkweDU0NTQ1NDAwLCAweDViNWI1YjAwLCAweDFlMWUxZTAwLCAweDk1OTU5NTAwLAorCTB4ZTBlMGUwMDAsIDB4ZmZmZmZmMDAsIDB4NjQ2NDY0MDAsIDB4ZDJkMmQyMDAsCisJMHgxMDEwMTAwMCwgMHhjNGM0YzQwMCwgMHgwMDAwMDAwMCwgMHg0ODQ4NDgwMCwKKwkweGEzYTNhMzAwLCAweGY3ZjdmNzAwLCAweDc1NzU3NTAwLCAweGRiZGJkYjAwLAorCTB4OGE4YThhMDAsIDB4MDMwMzAzMDAsIDB4ZTZlNmU2MDAsIDB4ZGFkYWRhMDAsCisJMHgwOTA5MDkwMCwgMHgzZjNmM2YwMCwgMHhkZGRkZGQwMCwgMHg5NDk0OTQwMCwKKwkweDg3ODc4NzAwLCAweDVjNWM1YzAwLCAweDgzODM4MzAwLCAweDAyMDIwMjAwLAorCTB4Y2RjZGNkMDAsIDB4NGE0YTRhMDAsIDB4OTA5MDkwMDAsIDB4MzMzMzMzMDAsCisJMHg3MzczNzMwMCwgMHg2NzY3NjcwMCwgMHhmNmY2ZjYwMCwgMHhmM2YzZjMwMCwKKwkweDlkOWQ5ZDAwLCAweDdmN2Y3ZjAwLCAweGJmYmZiZjAwLCAweGUyZTJlMjAwLAorCTB4NTI1MjUyMDAsIDB4OWI5YjliMDAsIDB4ZDhkOGQ4MDAsIDB4MjYyNjI2MDAsCisJMHhjOGM4YzgwMCwgMHgzNzM3MzcwMCwgMHhjNmM2YzYwMCwgMHgzYjNiM2IwMCwKKwkweDgxODE4MTAwLCAweDk2OTY5NjAwLCAweDZmNmY2ZjAwLCAweDRiNGI0YjAwLAorCTB4MTMxMzEzMDAsIDB4YmViZWJlMDAsIDB4NjM2MzYzMDAsIDB4MmUyZTJlMDAsCisJMHhlOWU5ZTkwMCwgMHg3OTc5NzkwMCwgMHhhN2E3YTcwMCwgMHg4YzhjOGMwMCwKKwkweDlmOWY5ZjAwLCAweDZlNmU2ZTAwLCAweGJjYmNiYzAwLCAweDhlOGU4ZTAwLAorCTB4MjkyOTI5MDAsIDB4ZjVmNWY1MDAsIDB4ZjlmOWY5MDAsIDB4YjZiNmI2MDAsCisJMHgyZjJmMmYwMCwgMHhmZGZkZmQwMCwgMHhiNGI0YjQwMCwgMHg1OTU5NTkwMCwKKwkweDc4Nzg3ODAwLCAweDk4OTg5ODAwLCAweDA2MDYwNjAwLCAweDZhNmE2YTAwLAorCTB4ZTdlN2U3MDAsIDB4NDY0NjQ2MDAsIDB4NzE3MTcxMDAsIDB4YmFiYWJhMDAsCisJMHhkNGQ0ZDQwMCwgMHgyNTI1MjUwMCwgMHhhYmFiYWIwMCwgMHg0MjQyNDIwMCwKKwkweDg4ODg4ODAwLCAweGEyYTJhMjAwLCAweDhkOGQ4ZDAwLCAweGZhZmFmYTAwLAorCTB4NzI3MjcyMDAsIDB4MDcwNzA3MDAsIDB4YjliOWI5MDAsIDB4NTU1NTU1MDAsCisJMHhmOGY4ZjgwMCwgMHhlZWVlZWUwMCwgMHhhY2FjYWMwMCwgMHgwYTBhMGEwMCwKKwkweDM2MzYzNjAwLCAweDQ5NDk0OTAwLCAweDJhMmEyYTAwLCAweDY4Njg2ODAwLAorCTB4M2MzYzNjMDAsIDB4MzgzODM4MDAsIDB4ZjFmMWYxMDAsIDB4YTRhNGE0MDAsCisJMHg0MDQwNDAwMCwgMHgyODI4MjgwMCwgMHhkM2QzZDMwMCwgMHg3YjdiN2IwMCwKKwkweGJiYmJiYjAwLCAweGM5YzljOTAwLCAweDQzNDM0MzAwLCAweGMxYzFjMTAwLAorCTB4MTUxNTE1MDAsIDB4ZTNlM2UzMDAsIDB4YWRhZGFkMDAsIDB4ZjRmNGY0MDAsCisJMHg3Nzc3NzcwMCwgMHhjN2M3YzcwMCwgMHg4MDgwODAwMCwgMHg5ZTllOWUwMCwKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgY2FtZWxsaWFfc3AwMjIyWzI1Nl0gPSB7Ci0JMHgwMGUwZTBlMCwweDAwMDUwNTA1LDB4MDA1ODU4NTgsMHgwMGQ5ZDlkOSwKLQkweDAwNjc2NzY3LDB4MDA0ZTRlNGUsMHgwMDgxODE4MSwweDAwY2JjYmNiLAotCTB4MDBjOWM5YzksMHgwMDBiMGIwYiwweDAwYWVhZWFlLDB4MDA2YTZhNmEsCi0JMHgwMGQ1ZDVkNSwweDAwMTgxODE4LDB4MDA1ZDVkNWQsMHgwMDgyODI4MiwKLQkweDAwNDY0NjQ2LDB4MDBkZmRmZGYsMHgwMGQ2ZDZkNiwweDAwMjcyNzI3LAotCTB4MDA4YThhOGEsMHgwMDMyMzIzMiwweDAwNGI0YjRiLDB4MDA0MjQyNDIsCi0JMHgwMGRiZGJkYiwweDAwMWMxYzFjLDB4MDA5ZTllOWUsMHgwMDljOWM5YywKLQkweDAwM2EzYTNhLDB4MDBjYWNhY2EsMHgwMDI1MjUyNSwweDAwN2I3YjdiLAotCTB4MDAwZDBkMGQsMHgwMDcxNzE3MSwweDAwNWY1ZjVmLDB4MDAxZjFmMWYsCi0JMHgwMGY4ZjhmOCwweDAwZDdkN2Q3LDB4MDAzZTNlM2UsMHgwMDlkOWQ5ZCwKLQkweDAwN2M3YzdjLDB4MDA2MDYwNjAsMHgwMGI5YjliOSwweDAwYmViZWJlLAotCTB4MDBiY2JjYmMsMHgwMDhiOGI4YiwweDAwMTYxNjE2LDB4MDAzNDM0MzQsCi0JMHgwMDRkNGQ0ZCwweDAwYzNjM2MzLDB4MDA3MjcyNzIsMHgwMDk1OTU5NSwKLQkweDAwYWJhYmFiLDB4MDA4ZThlOGUsMHgwMGJhYmFiYSwweDAwN2E3YTdhLAotCTB4MDBiM2IzYjMsMHgwMDAyMDIwMiwweDAwYjRiNGI0LDB4MDBhZGFkYWQsCi0JMHgwMGEyYTJhMiwweDAwYWNhY2FjLDB4MDBkOGQ4ZDgsMHgwMDlhOWE5YSwKLQkweDAwMTcxNzE3LDB4MDAxYTFhMWEsMHgwMDM1MzUzNSwweDAwY2NjY2NjLAotCTB4MDBmN2Y3ZjcsMHgwMDk5OTk5OSwweDAwNjE2MTYxLDB4MDA1YTVhNWEsCi0JMHgwMGU4ZThlOCwweDAwMjQyNDI0LDB4MDA1NjU2NTYsMHgwMDQwNDA0MCwKLQkweDAwZTFlMWUxLDB4MDA2MzYzNjMsMHgwMDA5MDkwOSwweDAwMzMzMzMzLAotCTB4MDBiZmJmYmYsMHgwMDk4OTg5OCwweDAwOTc5Nzk3LDB4MDA4NTg1ODUsCi0JMHgwMDY4Njg2OCwweDAwZmNmY2ZjLDB4MDBlY2VjZWMsMHgwMDBhMGEwYSwKLQkweDAwZGFkYWRhLDB4MDA2ZjZmNmYsMHgwMDUzNTM1MywweDAwNjI2MjYyLAotCTB4MDBhM2EzYTMsMHgwMDJlMmUyZSwweDAwMDgwODA4LDB4MDBhZmFmYWYsCi0JMHgwMDI4MjgyOCwweDAwYjBiMGIwLDB4MDA3NDc0NzQsMHgwMGMyYzJjMiwKLQkweDAwYmRiZGJkLDB4MDAzNjM2MzYsMHgwMDIyMjIyMiwweDAwMzgzODM4LAotCTB4MDA2NDY0NjQsMHgwMDFlMWUxZSwweDAwMzkzOTM5LDB4MDAyYzJjMmMsCi0JMHgwMGE2YTZhNiwweDAwMzAzMDMwLDB4MDBlNWU1ZTUsMHgwMDQ0NDQ0NCwKLQkweDAwZmRmZGZkLDB4MDA4ODg4ODgsMHgwMDlmOWY5ZiwweDAwNjU2NTY1LAotCTB4MDA4Nzg3ODcsMHgwMDZiNmI2YiwweDAwZjRmNGY0LDB4MDAyMzIzMjMsCi0JMHgwMDQ4NDg0OCwweDAwMTAxMDEwLDB4MDBkMWQxZDEsMHgwMDUxNTE1MSwKLQkweDAwYzBjMGMwLDB4MDBmOWY5ZjksMHgwMGQyZDJkMiwweDAwYTBhMGEwLAotCTB4MDA1NTU1NTUsMHgwMGExYTFhMSwweDAwNDE0MTQxLDB4MDBmYWZhZmEsCi0JMHgwMDQzNDM0MywweDAwMTMxMzEzLDB4MDBjNGM0YzQsMHgwMDJmMmYyZiwKLQkweDAwYThhOGE4LDB4MDBiNmI2YjYsMHgwMDNjM2MzYywweDAwMmIyYjJiLAotCTB4MDBjMWMxYzEsMHgwMGZmZmZmZiwweDAwYzhjOGM4LDB4MDBhNWE1YTUsCi0JMHgwMDIwMjAyMCwweDAwODk4OTg5LDB4MDAwMDAwMDAsMHgwMDkwOTA5MCwKLQkweDAwNDc0NzQ3LDB4MDBlZmVmZWYsMHgwMGVhZWFlYSwweDAwYjdiN2I3LAotCTB4MDAxNTE1MTUsMHgwMDA2MDYwNiwweDAwY2RjZGNkLDB4MDBiNWI1YjUsCi0JMHgwMDEyMTIxMiwweDAwN2U3ZTdlLDB4MDBiYmJiYmIsMHgwMDI5MjkyOSwKLQkweDAwMGYwZjBmLDB4MDBiOGI4YjgsMHgwMDA3MDcwNywweDAwMDQwNDA0LAotCTB4MDA5YjliOWIsMHgwMDk0OTQ5NCwweDAwMjEyMTIxLDB4MDA2NjY2NjYsCi0JMHgwMGU2ZTZlNiwweDAwY2VjZWNlLDB4MDBlZGVkZWQsMHgwMGU3ZTdlNywKLQkweDAwM2IzYjNiLDB4MDBmZWZlZmUsMHgwMDdmN2Y3ZiwweDAwYzVjNWM1LAotCTB4MDBhNGE0YTQsMHgwMDM3MzczNywweDAwYjFiMWIxLDB4MDA0YzRjNGMsCi0JMHgwMDkxOTE5MSwweDAwNmU2ZTZlLDB4MDA4ZDhkOGQsMHgwMDc2NzY3NiwKLQkweDAwMDMwMzAzLDB4MDAyZDJkMmQsMHgwMGRlZGVkZSwweDAwOTY5Njk2LAotCTB4MDAyNjI2MjYsMHgwMDdkN2Q3ZCwweDAwYzZjNmM2LDB4MDA1YzVjNWMsCi0JMHgwMGQzZDNkMywweDAwZjJmMmYyLDB4MDA0ZjRmNGYsMHgwMDE5MTkxOSwKLQkweDAwM2YzZjNmLDB4MDBkY2RjZGMsMHgwMDc5Nzk3OSwweDAwMWQxZDFkLAotCTB4MDA1MjUyNTIsMHgwMGViZWJlYiwweDAwZjNmM2YzLDB4MDA2ZDZkNmQsCi0JMHgwMDVlNWU1ZSwweDAwZmJmYmZiLDB4MDA2OTY5NjksMHgwMGIyYjJiMiwKLQkweDAwZjBmMGYwLDB4MDAzMTMxMzEsMHgwMDBjMGMwYywweDAwZDRkNGQ0LAotCTB4MDBjZmNmY2YsMHgwMDhjOGM4YywweDAwZTJlMmUyLDB4MDA3NTc1NzUsCi0JMHgwMGE5YTlhOSwweDAwNGE0YTRhLDB4MDA1NzU3NTcsMHgwMDg0ODQ4NCwKLQkweDAwMTExMTExLDB4MDA0NTQ1NDUsMHgwMDFiMWIxYiwweDAwZjVmNWY1LAotCTB4MDBlNGU0ZTQsMHgwMDBlMGUwZSwweDAwNzM3MzczLDB4MDBhYWFhYWEsCi0JMHgwMGYxZjFmMSwweDAwZGRkZGRkLDB4MDA1OTU5NTksMHgwMDE0MTQxNCwKLQkweDAwNmM2YzZjLDB4MDA5MjkyOTIsMHgwMDU0NTQ1NCwweDAwZDBkMGQwLAotCTB4MDA3ODc4NzgsMHgwMDcwNzA3MCwweDAwZTNlM2UzLDB4MDA0OTQ5NDksCi0JMHgwMDgwODA4MCwweDAwNTA1MDUwLDB4MDBhN2E3YTcsMHgwMGY2ZjZmNiwKLQkweDAwNzc3Nzc3LDB4MDA5MzkzOTMsMHgwMDg2ODY4NiwweDAwODM4MzgzLAotCTB4MDAyYTJhMmEsMHgwMGM3YzdjNywweDAwNWI1YjViLDB4MDBlOWU5ZTksCi0JMHgwMGVlZWVlZSwweDAwOGY4ZjhmLDB4MDAwMTAxMDEsMHgwMDNkM2QzZCwKKwkweDAwZTBlMGUwLCAweDAwMDUwNTA1LCAweDAwNTg1ODU4LCAweDAwZDlkOWQ5LAorCTB4MDA2NzY3NjcsIDB4MDA0ZTRlNGUsIDB4MDA4MTgxODEsIDB4MDBjYmNiY2IsCisJMHgwMGM5YzljOSwgMHgwMDBiMGIwYiwgMHgwMGFlYWVhZSwgMHgwMDZhNmE2YSwKKwkweDAwZDVkNWQ1LCAweDAwMTgxODE4LCAweDAwNWQ1ZDVkLCAweDAwODI4MjgyLAorCTB4MDA0NjQ2NDYsIDB4MDBkZmRmZGYsIDB4MDBkNmQ2ZDYsIDB4MDAyNzI3MjcsCisJMHgwMDhhOGE4YSwgMHgwMDMyMzIzMiwgMHgwMDRiNGI0YiwgMHgwMDQyNDI0MiwKKwkweDAwZGJkYmRiLCAweDAwMWMxYzFjLCAweDAwOWU5ZTllLCAweDAwOWM5YzljLAorCTB4MDAzYTNhM2EsIDB4MDBjYWNhY2EsIDB4MDAyNTI1MjUsIDB4MDA3YjdiN2IsCisJMHgwMDBkMGQwZCwgMHgwMDcxNzE3MSwgMHgwMDVmNWY1ZiwgMHgwMDFmMWYxZiwKKwkweDAwZjhmOGY4LCAweDAwZDdkN2Q3LCAweDAwM2UzZTNlLCAweDAwOWQ5ZDlkLAorCTB4MDA3YzdjN2MsIDB4MDA2MDYwNjAsIDB4MDBiOWI5YjksIDB4MDBiZWJlYmUsCisJMHgwMGJjYmNiYywgMHgwMDhiOGI4YiwgMHgwMDE2MTYxNiwgMHgwMDM0MzQzNCwKKwkweDAwNGQ0ZDRkLCAweDAwYzNjM2MzLCAweDAwNzI3MjcyLCAweDAwOTU5NTk1LAorCTB4MDBhYmFiYWIsIDB4MDA4ZThlOGUsIDB4MDBiYWJhYmEsIDB4MDA3YTdhN2EsCisJMHgwMGIzYjNiMywgMHgwMDAyMDIwMiwgMHgwMGI0YjRiNCwgMHgwMGFkYWRhZCwKKwkweDAwYTJhMmEyLCAweDAwYWNhY2FjLCAweDAwZDhkOGQ4LCAweDAwOWE5YTlhLAorCTB4MDAxNzE3MTcsIDB4MDAxYTFhMWEsIDB4MDAzNTM1MzUsIDB4MDBjY2NjY2MsCisJMHgwMGY3ZjdmNywgMHgwMDk5OTk5OSwgMHgwMDYxNjE2MSwgMHgwMDVhNWE1YSwKKwkweDAwZThlOGU4LCAweDAwMjQyNDI0LCAweDAwNTY1NjU2LCAweDAwNDA0MDQwLAorCTB4MDBlMWUxZTEsIDB4MDA2MzYzNjMsIDB4MDAwOTA5MDksIDB4MDAzMzMzMzMsCisJMHgwMGJmYmZiZiwgMHgwMDk4OTg5OCwgMHgwMDk3OTc5NywgMHgwMDg1ODU4NSwKKwkweDAwNjg2ODY4LCAweDAwZmNmY2ZjLCAweDAwZWNlY2VjLCAweDAwMGEwYTBhLAorCTB4MDBkYWRhZGEsIDB4MDA2ZjZmNmYsIDB4MDA1MzUzNTMsIDB4MDA2MjYyNjIsCisJMHgwMGEzYTNhMywgMHgwMDJlMmUyZSwgMHgwMDA4MDgwOCwgMHgwMGFmYWZhZiwKKwkweDAwMjgyODI4LCAweDAwYjBiMGIwLCAweDAwNzQ3NDc0LCAweDAwYzJjMmMyLAorCTB4MDBiZGJkYmQsIDB4MDAzNjM2MzYsIDB4MDAyMjIyMjIsIDB4MDAzODM4MzgsCisJMHgwMDY0NjQ2NCwgMHgwMDFlMWUxZSwgMHgwMDM5MzkzOSwgMHgwMDJjMmMyYywKKwkweDAwYTZhNmE2LCAweDAwMzAzMDMwLCAweDAwZTVlNWU1LCAweDAwNDQ0NDQ0LAorCTB4MDBmZGZkZmQsIDB4MDA4ODg4ODgsIDB4MDA5ZjlmOWYsIDB4MDA2NTY1NjUsCisJMHgwMDg3ODc4NywgMHgwMDZiNmI2YiwgMHgwMGY0ZjRmNCwgMHgwMDIzMjMyMywKKwkweDAwNDg0ODQ4LCAweDAwMTAxMDEwLCAweDAwZDFkMWQxLCAweDAwNTE1MTUxLAorCTB4MDBjMGMwYzAsIDB4MDBmOWY5ZjksIDB4MDBkMmQyZDIsIDB4MDBhMGEwYTAsCisJMHgwMDU1NTU1NSwgMHgwMGExYTFhMSwgMHgwMDQxNDE0MSwgMHgwMGZhZmFmYSwKKwkweDAwNDM0MzQzLCAweDAwMTMxMzEzLCAweDAwYzRjNGM0LCAweDAwMmYyZjJmLAorCTB4MDBhOGE4YTgsIDB4MDBiNmI2YjYsIDB4MDAzYzNjM2MsIDB4MDAyYjJiMmIsCisJMHgwMGMxYzFjMSwgMHgwMGZmZmZmZiwgMHgwMGM4YzhjOCwgMHgwMGE1YTVhNSwKKwkweDAwMjAyMDIwLCAweDAwODk4OTg5LCAweDAwMDAwMDAwLCAweDAwOTA5MDkwLAorCTB4MDA0NzQ3NDcsIDB4MDBlZmVmZWYsIDB4MDBlYWVhZWEsIDB4MDBiN2I3YjcsCisJMHgwMDE1MTUxNSwgMHgwMDA2MDYwNiwgMHgwMGNkY2RjZCwgMHgwMGI1YjViNSwKKwkweDAwMTIxMjEyLCAweDAwN2U3ZTdlLCAweDAwYmJiYmJiLCAweDAwMjkyOTI5LAorCTB4MDAwZjBmMGYsIDB4MDBiOGI4YjgsIDB4MDAwNzA3MDcsIDB4MDAwNDA0MDQsCisJMHgwMDliOWI5YiwgMHgwMDk0OTQ5NCwgMHgwMDIxMjEyMSwgMHgwMDY2NjY2NiwKKwkweDAwZTZlNmU2LCAweDAwY2VjZWNlLCAweDAwZWRlZGVkLCAweDAwZTdlN2U3LAorCTB4MDAzYjNiM2IsIDB4MDBmZWZlZmUsIDB4MDA3ZjdmN2YsIDB4MDBjNWM1YzUsCisJMHgwMGE0YTRhNCwgMHgwMDM3MzczNywgMHgwMGIxYjFiMSwgMHgwMDRjNGM0YywKKwkweDAwOTE5MTkxLCAweDAwNmU2ZTZlLCAweDAwOGQ4ZDhkLCAweDAwNzY3Njc2LAorCTB4MDAwMzAzMDMsIDB4MDAyZDJkMmQsIDB4MDBkZWRlZGUsIDB4MDA5Njk2OTYsCisJMHgwMDI2MjYyNiwgMHgwMDdkN2Q3ZCwgMHgwMGM2YzZjNiwgMHgwMDVjNWM1YywKKwkweDAwZDNkM2QzLCAweDAwZjJmMmYyLCAweDAwNGY0ZjRmLCAweDAwMTkxOTE5LAorCTB4MDAzZjNmM2YsIDB4MDBkY2RjZGMsIDB4MDA3OTc5NzksIDB4MDAxZDFkMWQsCisJMHgwMDUyNTI1MiwgMHgwMGViZWJlYiwgMHgwMGYzZjNmMywgMHgwMDZkNmQ2ZCwKKwkweDAwNWU1ZTVlLCAweDAwZmJmYmZiLCAweDAwNjk2OTY5LCAweDAwYjJiMmIyLAorCTB4MDBmMGYwZjAsIDB4MDAzMTMxMzEsIDB4MDAwYzBjMGMsIDB4MDBkNGQ0ZDQsCisJMHgwMGNmY2ZjZiwgMHgwMDhjOGM4YywgMHgwMGUyZTJlMiwgMHgwMDc1NzU3NSwKKwkweDAwYTlhOWE5LCAweDAwNGE0YTRhLCAweDAwNTc1NzU3LCAweDAwODQ4NDg0LAorCTB4MDAxMTExMTEsIDB4MDA0NTQ1NDUsIDB4MDAxYjFiMWIsIDB4MDBmNWY1ZjUsCisJMHgwMGU0ZTRlNCwgMHgwMDBlMGUwZSwgMHgwMDczNzM3MywgMHgwMGFhYWFhYSwKKwkweDAwZjFmMWYxLCAweDAwZGRkZGRkLCAweDAwNTk1OTU5LCAweDAwMTQxNDE0LAorCTB4MDA2YzZjNmMsIDB4MDA5MjkyOTIsIDB4MDA1NDU0NTQsIDB4MDBkMGQwZDAsCisJMHgwMDc4Nzg3OCwgMHgwMDcwNzA3MCwgMHgwMGUzZTNlMywgMHgwMDQ5NDk0OSwKKwkweDAwODA4MDgwLCAweDAwNTA1MDUwLCAweDAwYTdhN2E3LCAweDAwZjZmNmY2LAorCTB4MDA3Nzc3NzcsIDB4MDA5MzkzOTMsIDB4MDA4Njg2ODYsIDB4MDA4MzgzODMsCisJMHgwMDJhMmEyYSwgMHgwMGM3YzdjNywgMHgwMDViNWI1YiwgMHgwMGU5ZTllOSwKKwkweDAwZWVlZWVlLCAweDAwOGY4ZjhmLCAweDAwMDEwMTAxLCAweDAwM2QzZDNkLAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBjYW1lbGxpYV9zcDMwMzNbMjU2XSA9IHsKLQkweDM4MDAzODM4LDB4NDEwMDQxNDEsMHgxNjAwMTYxNiwweDc2MDA3Njc2LAotCTB4ZDkwMGQ5ZDksMHg5MzAwOTM5MywweDYwMDA2MDYwLDB4ZjIwMGYyZjIsCi0JMHg3MjAwNzI3MiwweGMyMDBjMmMyLDB4YWIwMGFiYWIsMHg5YTAwOWE5YSwKLQkweDc1MDA3NTc1LDB4MDYwMDA2MDYsMHg1NzAwNTc1NywweGEwMDBhMGEwLAotCTB4OTEwMDkxOTEsMHhmNzAwZjdmNywweGI1MDBiNWI1LDB4YzkwMGM5YzksCi0JMHhhMjAwYTJhMiwweDhjMDA4YzhjLDB4ZDIwMGQyZDIsMHg5MDAwOTA5MCwKLQkweGY2MDBmNmY2LDB4MDcwMDA3MDcsMHhhNzAwYTdhNywweDI3MDAyNzI3LAotCTB4OGUwMDhlOGUsMHhiMjAwYjJiMiwweDQ5MDA0OTQ5LDB4ZGUwMGRlZGUsCi0JMHg0MzAwNDM0MywweDVjMDA1YzVjLDB4ZDcwMGQ3ZDcsMHhjNzAwYzdjNywKLQkweDNlMDAzZTNlLDB4ZjUwMGY1ZjUsMHg4ZjAwOGY4ZiwweDY3MDA2NzY3LAotCTB4MWYwMDFmMWYsMHgxODAwMTgxOCwweDZlMDA2ZTZlLDB4YWYwMGFmYWYsCi0JMHgyZjAwMmYyZiwweGUyMDBlMmUyLDB4ODUwMDg1ODUsMHgwZDAwMGQwZCwKLQkweDUzMDA1MzUzLDB4ZjAwMGYwZjAsMHg5YzAwOWM5YywweDY1MDA2NTY1LAotCTB4ZWEwMGVhZWEsMHhhMzAwYTNhMywweGFlMDBhZWFlLDB4OWUwMDllOWUsCi0JMHhlYzAwZWNlYywweDgwMDA4MDgwLDB4MmQwMDJkMmQsMHg2YjAwNmI2YiwKLQkweGE4MDBhOGE4LDB4MmIwMDJiMmIsMHgzNjAwMzYzNiwweGE2MDBhNmE2LAotCTB4YzUwMGM1YzUsMHg4NjAwODY4NiwweDRkMDA0ZDRkLDB4MzMwMDMzMzMsCi0JMHhmZDAwZmRmZCwweDY2MDA2NjY2LDB4NTgwMDU4NTgsMHg5NjAwOTY5NiwKLQkweDNhMDAzYTNhLDB4MDkwMDA5MDksMHg5NTAwOTU5NSwweDEwMDAxMDEwLAotCTB4NzgwMDc4NzgsMHhkODAwZDhkOCwweDQyMDA0MjQyLDB4Y2MwMGNjY2MsCi0JMHhlZjAwZWZlZiwweDI2MDAyNjI2LDB4ZTUwMGU1ZTUsMHg2MTAwNjE2MSwKLQkweDFhMDAxYTFhLDB4M2YwMDNmM2YsMHgzYjAwM2IzYiwweDgyMDA4MjgyLAotCTB4YjYwMGI2YjYsMHhkYjAwZGJkYiwweGQ0MDBkNGQ0LDB4OTgwMDk4OTgsCi0JMHhlODAwZThlOCwweDhiMDA4YjhiLDB4MDIwMDAyMDIsMHhlYjAwZWJlYiwKLQkweDBhMDAwYTBhLDB4MmMwMDJjMmMsMHgxZDAwMWQxZCwweGIwMDBiMGIwLAotCTB4NmYwMDZmNmYsMHg4ZDAwOGQ4ZCwweDg4MDA4ODg4LDB4MGUwMDBlMGUsCi0JMHgxOTAwMTkxOSwweDg3MDA4Nzg3LDB4NGUwMDRlNGUsMHgwYjAwMGIwYiwKLQkweGE5MDBhOWE5LDB4MGMwMDBjMGMsMHg3OTAwNzk3OSwweDExMDAxMTExLAotCTB4N2YwMDdmN2YsMHgyMjAwMjIyMiwweGU3MDBlN2U3LDB4NTkwMDU5NTksCi0JMHhlMTAwZTFlMSwweGRhMDBkYWRhLDB4M2QwMDNkM2QsMHhjODAwYzhjOCwKLQkweDEyMDAxMjEyLDB4MDQwMDA0MDQsMHg3NDAwNzQ3NCwweDU0MDA1NDU0LAotCTB4MzAwMDMwMzAsMHg3ZTAwN2U3ZSwweGI0MDBiNGI0LDB4MjgwMDI4MjgsCi0JMHg1NTAwNTU1NSwweDY4MDA2ODY4LDB4NTAwMDUwNTAsMHhiZTAwYmViZSwKLQkweGQwMDBkMGQwLDB4YzQwMGM0YzQsMHgzMTAwMzEzMSwweGNiMDBjYmNiLAotCTB4MmEwMDJhMmEsMHhhZDAwYWRhZCwweDBmMDAwZjBmLDB4Y2EwMGNhY2EsCi0JMHg3MDAwNzA3MCwweGZmMDBmZmZmLDB4MzIwMDMyMzIsMHg2OTAwNjk2OSwKLQkweDA4MDAwODA4LDB4NjIwMDYyNjIsMHgwMDAwMDAwMCwweDI0MDAyNDI0LAotCTB4ZDEwMGQxZDEsMHhmYjAwZmJmYiwweGJhMDBiYWJhLDB4ZWQwMGVkZWQsCi0JMHg0NTAwNDU0NSwweDgxMDA4MTgxLDB4NzMwMDczNzMsMHg2ZDAwNmQ2ZCwKLQkweDg0MDA4NDg0LDB4OWYwMDlmOWYsMHhlZTAwZWVlZSwweDRhMDA0YTRhLAotCTB4YzMwMGMzYzMsMHgyZTAwMmUyZSwweGMxMDBjMWMxLDB4MDEwMDAxMDEsCi0JMHhlNjAwZTZlNiwweDI1MDAyNTI1LDB4NDgwMDQ4NDgsMHg5OTAwOTk5OSwKLQkweGI5MDBiOWI5LDB4YjMwMGIzYjMsMHg3YjAwN2I3YiwweGY5MDBmOWY5LAotCTB4Y2UwMGNlY2UsMHhiZjAwYmZiZiwweGRmMDBkZmRmLDB4NzEwMDcxNzEsCi0JMHgyOTAwMjkyOSwweGNkMDBjZGNkLDB4NmMwMDZjNmMsMHgxMzAwMTMxMywKLQkweDY0MDA2NDY0LDB4OWIwMDliOWIsMHg2MzAwNjM2MywweDlkMDA5ZDlkLAotCTB4YzAwMGMwYzAsMHg0YjAwNGI0YiwweGI3MDBiN2I3LDB4YTUwMGE1YTUsCi0JMHg4OTAwODk4OSwweDVmMDA1ZjVmLDB4YjEwMGIxYjEsMHgxNzAwMTcxNywKLQkweGY0MDBmNGY0LDB4YmMwMGJjYmMsMHhkMzAwZDNkMywweDQ2MDA0NjQ2LAotCTB4Y2YwMGNmY2YsMHgzNzAwMzczNywweDVlMDA1ZTVlLDB4NDcwMDQ3NDcsCi0JMHg5NDAwOTQ5NCwweGZhMDBmYWZhLDB4ZmMwMGZjZmMsMHg1YjAwNWI1YiwKLQkweDk3MDA5Nzk3LDB4ZmUwMGZlZmUsMHg1YTAwNWE1YSwweGFjMDBhY2FjLAotCTB4M2MwMDNjM2MsMHg0YzAwNGM0YywweDAzMDAwMzAzLDB4MzUwMDM1MzUsCi0JMHhmMzAwZjNmMywweDIzMDAyMzIzLDB4YjgwMGI4YjgsMHg1ZDAwNWQ1ZCwKLQkweDZhMDA2YTZhLDB4OTIwMDkyOTIsMHhkNTAwZDVkNSwweDIxMDAyMTIxLAotCTB4NDQwMDQ0NDQsMHg1MTAwNTE1MSwweGM2MDBjNmM2LDB4N2QwMDdkN2QsCi0JMHgzOTAwMzkzOSwweDgzMDA4MzgzLDB4ZGMwMGRjZGMsMHhhYTAwYWFhYSwKLQkweDdjMDA3YzdjLDB4NzcwMDc3NzcsMHg1NjAwNTY1NiwweDA1MDAwNTA1LAotCTB4MWIwMDFiMWIsMHhhNDAwYTRhNCwweDE1MDAxNTE1LDB4MzQwMDM0MzQsCi0JMHgxZTAwMWUxZSwweDFjMDAxYzFjLDB4ZjgwMGY4ZjgsMHg1MjAwNTI1MiwKLQkweDIwMDAyMDIwLDB4MTQwMDE0MTQsMHhlOTAwZTllOSwweGJkMDBiZGJkLAotCTB4ZGQwMGRkZGQsMHhlNDAwZTRlNCwweGExMDBhMWExLDB4ZTAwMGUwZTAsCi0JMHg4YTAwOGE4YSwweGYxMDBmMWYxLDB4ZDYwMGQ2ZDYsMHg3YTAwN2E3YSwKLQkweGJiMDBiYmJiLDB4ZTMwMGUzZTMsMHg0MDAwNDA0MCwweDRmMDA0ZjRmLAorCTB4MzgwMDM4MzgsIDB4NDEwMDQxNDEsIDB4MTYwMDE2MTYsIDB4NzYwMDc2NzYsCisJMHhkOTAwZDlkOSwgMHg5MzAwOTM5MywgMHg2MDAwNjA2MCwgMHhmMjAwZjJmMiwKKwkweDcyMDA3MjcyLCAweGMyMDBjMmMyLCAweGFiMDBhYmFiLCAweDlhMDA5YTlhLAorCTB4NzUwMDc1NzUsIDB4MDYwMDA2MDYsIDB4NTcwMDU3NTcsIDB4YTAwMGEwYTAsCisJMHg5MTAwOTE5MSwgMHhmNzAwZjdmNywgMHhiNTAwYjViNSwgMHhjOTAwYzljOSwKKwkweGEyMDBhMmEyLCAweDhjMDA4YzhjLCAweGQyMDBkMmQyLCAweDkwMDA5MDkwLAorCTB4ZjYwMGY2ZjYsIDB4MDcwMDA3MDcsIDB4YTcwMGE3YTcsIDB4MjcwMDI3MjcsCisJMHg4ZTAwOGU4ZSwgMHhiMjAwYjJiMiwgMHg0OTAwNDk0OSwgMHhkZTAwZGVkZSwKKwkweDQzMDA0MzQzLCAweDVjMDA1YzVjLCAweGQ3MDBkN2Q3LCAweGM3MDBjN2M3LAorCTB4M2UwMDNlM2UsIDB4ZjUwMGY1ZjUsIDB4OGYwMDhmOGYsIDB4NjcwMDY3NjcsCisJMHgxZjAwMWYxZiwgMHgxODAwMTgxOCwgMHg2ZTAwNmU2ZSwgMHhhZjAwYWZhZiwKKwkweDJmMDAyZjJmLCAweGUyMDBlMmUyLCAweDg1MDA4NTg1LCAweDBkMDAwZDBkLAorCTB4NTMwMDUzNTMsIDB4ZjAwMGYwZjAsIDB4OWMwMDljOWMsIDB4NjUwMDY1NjUsCisJMHhlYTAwZWFlYSwgMHhhMzAwYTNhMywgMHhhZTAwYWVhZSwgMHg5ZTAwOWU5ZSwKKwkweGVjMDBlY2VjLCAweDgwMDA4MDgwLCAweDJkMDAyZDJkLCAweDZiMDA2YjZiLAorCTB4YTgwMGE4YTgsIDB4MmIwMDJiMmIsIDB4MzYwMDM2MzYsIDB4YTYwMGE2YTYsCisJMHhjNTAwYzVjNSwgMHg4NjAwODY4NiwgMHg0ZDAwNGQ0ZCwgMHgzMzAwMzMzMywKKwkweGZkMDBmZGZkLCAweDY2MDA2NjY2LCAweDU4MDA1ODU4LCAweDk2MDA5Njk2LAorCTB4M2EwMDNhM2EsIDB4MDkwMDA5MDksIDB4OTUwMDk1OTUsIDB4MTAwMDEwMTAsCisJMHg3ODAwNzg3OCwgMHhkODAwZDhkOCwgMHg0MjAwNDI0MiwgMHhjYzAwY2NjYywKKwkweGVmMDBlZmVmLCAweDI2MDAyNjI2LCAweGU1MDBlNWU1LCAweDYxMDA2MTYxLAorCTB4MWEwMDFhMWEsIDB4M2YwMDNmM2YsIDB4M2IwMDNiM2IsIDB4ODIwMDgyODIsCisJMHhiNjAwYjZiNiwgMHhkYjAwZGJkYiwgMHhkNDAwZDRkNCwgMHg5ODAwOTg5OCwKKwkweGU4MDBlOGU4LCAweDhiMDA4YjhiLCAweDAyMDAwMjAyLCAweGViMDBlYmViLAorCTB4MGEwMDBhMGEsIDB4MmMwMDJjMmMsIDB4MWQwMDFkMWQsIDB4YjAwMGIwYjAsCisJMHg2ZjAwNmY2ZiwgMHg4ZDAwOGQ4ZCwgMHg4ODAwODg4OCwgMHgwZTAwMGUwZSwKKwkweDE5MDAxOTE5LCAweDg3MDA4Nzg3LCAweDRlMDA0ZTRlLCAweDBiMDAwYjBiLAorCTB4YTkwMGE5YTksIDB4MGMwMDBjMGMsIDB4NzkwMDc5NzksIDB4MTEwMDExMTEsCisJMHg3ZjAwN2Y3ZiwgMHgyMjAwMjIyMiwgMHhlNzAwZTdlNywgMHg1OTAwNTk1OSwKKwkweGUxMDBlMWUxLCAweGRhMDBkYWRhLCAweDNkMDAzZDNkLCAweGM4MDBjOGM4LAorCTB4MTIwMDEyMTIsIDB4MDQwMDA0MDQsIDB4NzQwMDc0NzQsIDB4NTQwMDU0NTQsCisJMHgzMDAwMzAzMCwgMHg3ZTAwN2U3ZSwgMHhiNDAwYjRiNCwgMHgyODAwMjgyOCwKKwkweDU1MDA1NTU1LCAweDY4MDA2ODY4LCAweDUwMDA1MDUwLCAweGJlMDBiZWJlLAorCTB4ZDAwMGQwZDAsIDB4YzQwMGM0YzQsIDB4MzEwMDMxMzEsIDB4Y2IwMGNiY2IsCisJMHgyYTAwMmEyYSwgMHhhZDAwYWRhZCwgMHgwZjAwMGYwZiwgMHhjYTAwY2FjYSwKKwkweDcwMDA3MDcwLCAweGZmMDBmZmZmLCAweDMyMDAzMjMyLCAweDY5MDA2OTY5LAorCTB4MDgwMDA4MDgsIDB4NjIwMDYyNjIsIDB4MDAwMDAwMDAsIDB4MjQwMDI0MjQsCisJMHhkMTAwZDFkMSwgMHhmYjAwZmJmYiwgMHhiYTAwYmFiYSwgMHhlZDAwZWRlZCwKKwkweDQ1MDA0NTQ1LCAweDgxMDA4MTgxLCAweDczMDA3MzczLCAweDZkMDA2ZDZkLAorCTB4ODQwMDg0ODQsIDB4OWYwMDlmOWYsIDB4ZWUwMGVlZWUsIDB4NGEwMDRhNGEsCisJMHhjMzAwYzNjMywgMHgyZTAwMmUyZSwgMHhjMTAwYzFjMSwgMHgwMTAwMDEwMSwKKwkweGU2MDBlNmU2LCAweDI1MDAyNTI1LCAweDQ4MDA0ODQ4LCAweDk5MDA5OTk5LAorCTB4YjkwMGI5YjksIDB4YjMwMGIzYjMsIDB4N2IwMDdiN2IsIDB4ZjkwMGY5ZjksCisJMHhjZTAwY2VjZSwgMHhiZjAwYmZiZiwgMHhkZjAwZGZkZiwgMHg3MTAwNzE3MSwKKwkweDI5MDAyOTI5LCAweGNkMDBjZGNkLCAweDZjMDA2YzZjLCAweDEzMDAxMzEzLAorCTB4NjQwMDY0NjQsIDB4OWIwMDliOWIsIDB4NjMwMDYzNjMsIDB4OWQwMDlkOWQsCisJMHhjMDAwYzBjMCwgMHg0YjAwNGI0YiwgMHhiNzAwYjdiNywgMHhhNTAwYTVhNSwKKwkweDg5MDA4OTg5LCAweDVmMDA1ZjVmLCAweGIxMDBiMWIxLCAweDE3MDAxNzE3LAorCTB4ZjQwMGY0ZjQsIDB4YmMwMGJjYmMsIDB4ZDMwMGQzZDMsIDB4NDYwMDQ2NDYsCisJMHhjZjAwY2ZjZiwgMHgzNzAwMzczNywgMHg1ZTAwNWU1ZSwgMHg0NzAwNDc0NywKKwkweDk0MDA5NDk0LCAweGZhMDBmYWZhLCAweGZjMDBmY2ZjLCAweDViMDA1YjViLAorCTB4OTcwMDk3OTcsIDB4ZmUwMGZlZmUsIDB4NWEwMDVhNWEsIDB4YWMwMGFjYWMsCisJMHgzYzAwM2MzYywgMHg0YzAwNGM0YywgMHgwMzAwMDMwMywgMHgzNTAwMzUzNSwKKwkweGYzMDBmM2YzLCAweDIzMDAyMzIzLCAweGI4MDBiOGI4LCAweDVkMDA1ZDVkLAorCTB4NmEwMDZhNmEsIDB4OTIwMDkyOTIsIDB4ZDUwMGQ1ZDUsIDB4MjEwMDIxMjEsCisJMHg0NDAwNDQ0NCwgMHg1MTAwNTE1MSwgMHhjNjAwYzZjNiwgMHg3ZDAwN2Q3ZCwKKwkweDM5MDAzOTM5LCAweDgzMDA4MzgzLCAweGRjMDBkY2RjLCAweGFhMDBhYWFhLAorCTB4N2MwMDdjN2MsIDB4NzcwMDc3NzcsIDB4NTYwMDU2NTYsIDB4MDUwMDA1MDUsCisJMHgxYjAwMWIxYiwgMHhhNDAwYTRhNCwgMHgxNTAwMTUxNSwgMHgzNDAwMzQzNCwKKwkweDFlMDAxZTFlLCAweDFjMDAxYzFjLCAweGY4MDBmOGY4LCAweDUyMDA1MjUyLAorCTB4MjAwMDIwMjAsIDB4MTQwMDE0MTQsIDB4ZTkwMGU5ZTksIDB4YmQwMGJkYmQsCisJMHhkZDAwZGRkZCwgMHhlNDAwZTRlNCwgMHhhMTAwYTFhMSwgMHhlMDAwZTBlMCwKKwkweDhhMDA4YThhLCAweGYxMDBmMWYxLCAweGQ2MDBkNmQ2LCAweDdhMDA3YTdhLAorCTB4YmIwMGJiYmIsIDB4ZTMwMGUzZTMsIDB4NDAwMDQwNDAsIDB4NGYwMDRmNGYsCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGNhbWVsbGlhX3NwNDQwNFsyNTZdID0gewotCTB4NzA3MDAwNzAsMHgyYzJjMDAyYywweGIzYjMwMGIzLDB4YzBjMDAwYzAsCi0JMHhlNGU0MDBlNCwweDU3NTcwMDU3LDB4ZWFlYTAwZWEsMHhhZWFlMDBhZSwKLQkweDIzMjMwMDIzLDB4NmI2YjAwNmIsMHg0NTQ1MDA0NSwweGE1YTUwMGE1LAotCTB4ZWRlZDAwZWQsMHg0ZjRmMDA0ZiwweDFkMWQwMDFkLDB4OTI5MjAwOTIsCi0JMHg4Njg2MDA4NiwweGFmYWYwMGFmLDB4N2M3YzAwN2MsMHgxZjFmMDAxZiwKLQkweDNlM2UwMDNlLDB4ZGNkYzAwZGMsMHg1ZTVlMDA1ZSwweDBiMGIwMDBiLAotCTB4YTZhNjAwYTYsMHgzOTM5MDAzOSwweGQ1ZDUwMGQ1LDB4NWQ1ZDAwNWQsCi0JMHhkOWQ5MDBkOSwweDVhNWEwMDVhLDB4NTE1MTAwNTEsMHg2YzZjMDA2YywKLQkweDhiOGIwMDhiLDB4OWE5YTAwOWEsMHhmYmZiMDBmYiwweGIwYjAwMGIwLAotCTB4NzQ3NDAwNzQsMHgyYjJiMDAyYiwweGYwZjAwMGYwLDB4ODQ4NDAwODQsCi0JMHhkZmRmMDBkZiwweGNiY2IwMGNiLDB4MzQzNDAwMzQsMHg3Njc2MDA3NiwKLQkweDZkNmQwMDZkLDB4YTlhOTAwYTksMHhkMWQxMDBkMSwweDA0MDQwMDA0LAotCTB4MTQxNDAwMTQsMHgzYTNhMDAzYSwweGRlZGUwMGRlLDB4MTExMTAwMTEsCi0JMHgzMjMyMDAzMiwweDljOWMwMDljLDB4NTM1MzAwNTMsMHhmMmYyMDBmMiwKLQkweGZlZmUwMGZlLDB4Y2ZjZjAwY2YsMHhjM2MzMDBjMywweDdhN2EwMDdhLAotCTB4MjQyNDAwMjQsMHhlOGU4MDBlOCwweDYwNjAwMDYwLDB4Njk2OTAwNjksCi0JMHhhYWFhMDBhYSwweGEwYTAwMGEwLDB4YTFhMTAwYTEsMHg2MjYyMDA2MiwKLQkweDU0NTQwMDU0LDB4MWUxZTAwMWUsMHhlMGUwMDBlMCwweDY0NjQwMDY0LAotCTB4MTAxMDAwMTAsMHgwMDAwMDAwMCwweGEzYTMwMGEzLDB4NzU3NTAwNzUsCi0JMHg4YThhMDA4YSwweGU2ZTYwMGU2LDB4MDkwOTAwMDksMHhkZGRkMDBkZCwKLQkweDg3ODcwMDg3LDB4ODM4MzAwODMsMHhjZGNkMDBjZCwweDkwOTAwMDkwLAotCTB4NzM3MzAwNzMsMHhmNmY2MDBmNiwweDlkOWQwMDlkLDB4YmZiZjAwYmYsCi0JMHg1MjUyMDA1MiwweGQ4ZDgwMGQ4LDB4YzhjODAwYzgsMHhjNmM2MDBjNiwKLQkweDgxODEwMDgxLDB4NmY2ZjAwNmYsMHgxMzEzMDAxMywweDYzNjMwMDYzLAotCTB4ZTllOTAwZTksMHhhN2E3MDBhNywweDlmOWYwMDlmLDB4YmNiYzAwYmMsCi0JMHgyOTI5MDAyOSwweGY5ZjkwMGY5LDB4MmYyZjAwMmYsMHhiNGI0MDBiNCwKLQkweDc4NzgwMDc4LDB4MDYwNjAwMDYsMHhlN2U3MDBlNywweDcxNzEwMDcxLAotCTB4ZDRkNDAwZDQsMHhhYmFiMDBhYiwweDg4ODgwMDg4LDB4OGQ4ZDAwOGQsCi0JMHg3MjcyMDA3MiwweGI5YjkwMGI5LDB4ZjhmODAwZjgsMHhhY2FjMDBhYywKLQkweDM2MzYwMDM2LDB4MmEyYTAwMmEsMHgzYzNjMDAzYywweGYxZjEwMGYxLAotCTB4NDA0MDAwNDAsMHhkM2QzMDBkMywweGJiYmIwMGJiLDB4NDM0MzAwNDMsCi0JMHgxNTE1MDAxNSwweGFkYWQwMGFkLDB4Nzc3NzAwNzcsMHg4MDgwMDA4MCwKLQkweDgyODIwMDgyLDB4ZWNlYzAwZWMsMHgyNzI3MDAyNywweGU1ZTUwMGU1LAotCTB4ODU4NTAwODUsMHgzNTM1MDAzNSwweDBjMGMwMDBjLDB4NDE0MTAwNDEsCi0JMHhlZmVmMDBlZiwweDkzOTMwMDkzLDB4MTkxOTAwMTksMHgyMTIxMDAyMSwKLQkweDBlMGUwMDBlLDB4NGU0ZTAwNGUsMHg2NTY1MDA2NSwweGJkYmQwMGJkLAotCTB4YjhiODAwYjgsMHg4ZjhmMDA4ZiwweGViZWIwMGViLDB4Y2VjZTAwY2UsCi0JMHgzMDMwMDAzMCwweDVmNWYwMDVmLDB4YzVjNTAwYzUsMHgxYTFhMDAxYSwKLQkweGUxZTEwMGUxLDB4Y2FjYTAwY2EsMHg0NzQ3MDA0NywweDNkM2QwMDNkLAotCTB4MDEwMTAwMDEsMHhkNmQ2MDBkNiwweDU2NTYwMDU2LDB4NGQ0ZDAwNGQsCi0JMHgwZDBkMDAwZCwweDY2NjYwMDY2LDB4Y2NjYzAwY2MsMHgyZDJkMDAyZCwKLQkweDEyMTIwMDEyLDB4MjAyMDAwMjAsMHhiMWIxMDBiMSwweDk5OTkwMDk5LAotCTB4NGM0YzAwNGMsMHhjMmMyMDBjMiwweDdlN2UwMDdlLDB4MDUwNTAwMDUsCi0JMHhiN2I3MDBiNywweDMxMzEwMDMxLDB4MTcxNzAwMTcsMHhkN2Q3MDBkNywKLQkweDU4NTgwMDU4LDB4NjE2MTAwNjEsMHgxYjFiMDAxYiwweDFjMWMwMDFjLAotCTB4MGYwZjAwMGYsMHgxNjE2MDAxNiwweDE4MTgwMDE4LDB4MjIyMjAwMjIsCi0JMHg0NDQ0MDA0NCwweGIyYjIwMGIyLDB4YjViNTAwYjUsMHg5MTkxMDA5MSwKLQkweDA4MDgwMDA4LDB4YThhODAwYTgsMHhmY2ZjMDBmYywweDUwNTAwMDUwLAotCTB4ZDBkMDAwZDAsMHg3ZDdkMDA3ZCwweDg5ODkwMDg5LDB4OTc5NzAwOTcsCi0JMHg1YjViMDA1YiwweDk1OTUwMDk1LDB4ZmZmZjAwZmYsMHhkMmQyMDBkMiwKLQkweGM0YzQwMGM0LDB4NDg0ODAwNDgsMHhmN2Y3MDBmNywweGRiZGIwMGRiLAotCTB4MDMwMzAwMDMsMHhkYWRhMDBkYSwweDNmM2YwMDNmLDB4OTQ5NDAwOTQsCi0JMHg1YzVjMDA1YywweDAyMDIwMDAyLDB4NGE0YTAwNGEsMHgzMzMzMDAzMywKLQkweDY3NjcwMDY3LDB4ZjNmMzAwZjMsMHg3ZjdmMDA3ZiwweGUyZTIwMGUyLAotCTB4OWI5YjAwOWIsMHgyNjI2MDAyNiwweDM3MzcwMDM3LDB4M2IzYjAwM2IsCi0JMHg5Njk2MDA5NiwweDRiNGIwMDRiLDB4YmViZTAwYmUsMHgyZTJlMDAyZSwKLQkweDc5NzkwMDc5LDB4OGM4YzAwOGMsMHg2ZTZlMDA2ZSwweDhlOGUwMDhlLAotCTB4ZjVmNTAwZjUsMHhiNmI2MDBiNiwweGZkZmQwMGZkLDB4NTk1OTAwNTksCi0JMHg5ODk4MDA5OCwweDZhNmEwMDZhLDB4NDY0NjAwNDYsMHhiYWJhMDBiYSwKLQkweDI1MjUwMDI1LDB4NDI0MjAwNDIsMHhhMmEyMDBhMiwweGZhZmEwMGZhLAotCTB4MDcwNzAwMDcsMHg1NTU1MDA1NSwweGVlZWUwMGVlLDB4MGEwYTAwMGEsCi0JMHg0OTQ5MDA0OSwweDY4NjgwMDY4LDB4MzgzODAwMzgsMHhhNGE0MDBhNCwKLQkweDI4MjgwMDI4LDB4N2I3YjAwN2IsMHhjOWM5MDBjOSwweGMxYzEwMGMxLAotCTB4ZTNlMzAwZTMsMHhmNGY0MDBmNCwweGM3YzcwMGM3LDB4OWU5ZTAwOWUsCisJMHg3MDcwMDA3MCwgMHgyYzJjMDAyYywgMHhiM2IzMDBiMywgMHhjMGMwMDBjMCwKKwkweGU0ZTQwMGU0LCAweDU3NTcwMDU3LCAweGVhZWEwMGVhLCAweGFlYWUwMGFlLAorCTB4MjMyMzAwMjMsIDB4NmI2YjAwNmIsIDB4NDU0NTAwNDUsIDB4YTVhNTAwYTUsCisJMHhlZGVkMDBlZCwgMHg0ZjRmMDA0ZiwgMHgxZDFkMDAxZCwgMHg5MjkyMDA5MiwKKwkweDg2ODYwMDg2LCAweGFmYWYwMGFmLCAweDdjN2MwMDdjLCAweDFmMWYwMDFmLAorCTB4M2UzZTAwM2UsIDB4ZGNkYzAwZGMsIDB4NWU1ZTAwNWUsIDB4MGIwYjAwMGIsCisJMHhhNmE2MDBhNiwgMHgzOTM5MDAzOSwgMHhkNWQ1MDBkNSwgMHg1ZDVkMDA1ZCwKKwkweGQ5ZDkwMGQ5LCAweDVhNWEwMDVhLCAweDUxNTEwMDUxLCAweDZjNmMwMDZjLAorCTB4OGI4YjAwOGIsIDB4OWE5YTAwOWEsIDB4ZmJmYjAwZmIsIDB4YjBiMDAwYjAsCisJMHg3NDc0MDA3NCwgMHgyYjJiMDAyYiwgMHhmMGYwMDBmMCwgMHg4NDg0MDA4NCwKKwkweGRmZGYwMGRmLCAweGNiY2IwMGNiLCAweDM0MzQwMDM0LCAweDc2NzYwMDc2LAorCTB4NmQ2ZDAwNmQsIDB4YTlhOTAwYTksIDB4ZDFkMTAwZDEsIDB4MDQwNDAwMDQsCisJMHgxNDE0MDAxNCwgMHgzYTNhMDAzYSwgMHhkZWRlMDBkZSwgMHgxMTExMDAxMSwKKwkweDMyMzIwMDMyLCAweDljOWMwMDljLCAweDUzNTMwMDUzLCAweGYyZjIwMGYyLAorCTB4ZmVmZTAwZmUsIDB4Y2ZjZjAwY2YsIDB4YzNjMzAwYzMsIDB4N2E3YTAwN2EsCisJMHgyNDI0MDAyNCwgMHhlOGU4MDBlOCwgMHg2MDYwMDA2MCwgMHg2OTY5MDA2OSwKKwkweGFhYWEwMGFhLCAweGEwYTAwMGEwLCAweGExYTEwMGExLCAweDYyNjIwMDYyLAorCTB4NTQ1NDAwNTQsIDB4MWUxZTAwMWUsIDB4ZTBlMDAwZTAsIDB4NjQ2NDAwNjQsCisJMHgxMDEwMDAxMCwgMHgwMDAwMDAwMCwgMHhhM2EzMDBhMywgMHg3NTc1MDA3NSwKKwkweDhhOGEwMDhhLCAweGU2ZTYwMGU2LCAweDA5MDkwMDA5LCAweGRkZGQwMGRkLAorCTB4ODc4NzAwODcsIDB4ODM4MzAwODMsIDB4Y2RjZDAwY2QsIDB4OTA5MDAwOTAsCisJMHg3MzczMDA3MywgMHhmNmY2MDBmNiwgMHg5ZDlkMDA5ZCwgMHhiZmJmMDBiZiwKKwkweDUyNTIwMDUyLCAweGQ4ZDgwMGQ4LCAweGM4YzgwMGM4LCAweGM2YzYwMGM2LAorCTB4ODE4MTAwODEsIDB4NmY2ZjAwNmYsIDB4MTMxMzAwMTMsIDB4NjM2MzAwNjMsCisJMHhlOWU5MDBlOSwgMHhhN2E3MDBhNywgMHg5ZjlmMDA5ZiwgMHhiY2JjMDBiYywKKwkweDI5MjkwMDI5LCAweGY5ZjkwMGY5LCAweDJmMmYwMDJmLCAweGI0YjQwMGI0LAorCTB4Nzg3ODAwNzgsIDB4MDYwNjAwMDYsIDB4ZTdlNzAwZTcsIDB4NzE3MTAwNzEsCisJMHhkNGQ0MDBkNCwgMHhhYmFiMDBhYiwgMHg4ODg4MDA4OCwgMHg4ZDhkMDA4ZCwKKwkweDcyNzIwMDcyLCAweGI5YjkwMGI5LCAweGY4ZjgwMGY4LCAweGFjYWMwMGFjLAorCTB4MzYzNjAwMzYsIDB4MmEyYTAwMmEsIDB4M2MzYzAwM2MsIDB4ZjFmMTAwZjEsCisJMHg0MDQwMDA0MCwgMHhkM2QzMDBkMywgMHhiYmJiMDBiYiwgMHg0MzQzMDA0MywKKwkweDE1MTUwMDE1LCAweGFkYWQwMGFkLCAweDc3NzcwMDc3LCAweDgwODAwMDgwLAorCTB4ODI4MjAwODIsIDB4ZWNlYzAwZWMsIDB4MjcyNzAwMjcsIDB4ZTVlNTAwZTUsCisJMHg4NTg1MDA4NSwgMHgzNTM1MDAzNSwgMHgwYzBjMDAwYywgMHg0MTQxMDA0MSwKKwkweGVmZWYwMGVmLCAweDkzOTMwMDkzLCAweDE5MTkwMDE5LCAweDIxMjEwMDIxLAorCTB4MGUwZTAwMGUsIDB4NGU0ZTAwNGUsIDB4NjU2NTAwNjUsIDB4YmRiZDAwYmQsCisJMHhiOGI4MDBiOCwgMHg4ZjhmMDA4ZiwgMHhlYmViMDBlYiwgMHhjZWNlMDBjZSwKKwkweDMwMzAwMDMwLCAweDVmNWYwMDVmLCAweGM1YzUwMGM1LCAweDFhMWEwMDFhLAorCTB4ZTFlMTAwZTEsIDB4Y2FjYTAwY2EsIDB4NDc0NzAwNDcsIDB4M2QzZDAwM2QsCisJMHgwMTAxMDAwMSwgMHhkNmQ2MDBkNiwgMHg1NjU2MDA1NiwgMHg0ZDRkMDA0ZCwKKwkweDBkMGQwMDBkLCAweDY2NjYwMDY2LCAweGNjY2MwMGNjLCAweDJkMmQwMDJkLAorCTB4MTIxMjAwMTIsIDB4MjAyMDAwMjAsIDB4YjFiMTAwYjEsIDB4OTk5OTAwOTksCisJMHg0YzRjMDA0YywgMHhjMmMyMDBjMiwgMHg3ZTdlMDA3ZSwgMHgwNTA1MDAwNSwKKwkweGI3YjcwMGI3LCAweDMxMzEwMDMxLCAweDE3MTcwMDE3LCAweGQ3ZDcwMGQ3LAorCTB4NTg1ODAwNTgsIDB4NjE2MTAwNjEsIDB4MWIxYjAwMWIsIDB4MWMxYzAwMWMsCisJMHgwZjBmMDAwZiwgMHgxNjE2MDAxNiwgMHgxODE4MDAxOCwgMHgyMjIyMDAyMiwKKwkweDQ0NDQwMDQ0LCAweGIyYjIwMGIyLCAweGI1YjUwMGI1LCAweDkxOTEwMDkxLAorCTB4MDgwODAwMDgsIDB4YThhODAwYTgsIDB4ZmNmYzAwZmMsIDB4NTA1MDAwNTAsCisJMHhkMGQwMDBkMCwgMHg3ZDdkMDA3ZCwgMHg4OTg5MDA4OSwgMHg5Nzk3MDA5NywKKwkweDViNWIwMDViLCAweDk1OTUwMDk1LCAweGZmZmYwMGZmLCAweGQyZDIwMGQyLAorCTB4YzRjNDAwYzQsIDB4NDg0ODAwNDgsIDB4ZjdmNzAwZjcsIDB4ZGJkYjAwZGIsCisJMHgwMzAzMDAwMywgMHhkYWRhMDBkYSwgMHgzZjNmMDAzZiwgMHg5NDk0MDA5NCwKKwkweDVjNWMwMDVjLCAweDAyMDIwMDAyLCAweDRhNGEwMDRhLCAweDMzMzMwMDMzLAorCTB4Njc2NzAwNjcsIDB4ZjNmMzAwZjMsIDB4N2Y3ZjAwN2YsIDB4ZTJlMjAwZTIsCisJMHg5YjliMDA5YiwgMHgyNjI2MDAyNiwgMHgzNzM3MDAzNywgMHgzYjNiMDAzYiwKKwkweDk2OTYwMDk2LCAweDRiNGIwMDRiLCAweGJlYmUwMGJlLCAweDJlMmUwMDJlLAorCTB4Nzk3OTAwNzksIDB4OGM4YzAwOGMsIDB4NmU2ZTAwNmUsIDB4OGU4ZTAwOGUsCisJMHhmNWY1MDBmNSwgMHhiNmI2MDBiNiwgMHhmZGZkMDBmZCwgMHg1OTU5MDA1OSwKKwkweDk4OTgwMDk4LCAweDZhNmEwMDZhLCAweDQ2NDYwMDQ2LCAweGJhYmEwMGJhLAorCTB4MjUyNTAwMjUsIDB4NDI0MjAwNDIsIDB4YTJhMjAwYTIsIDB4ZmFmYTAwZmEsCisJMHgwNzA3MDAwNywgMHg1NTU1MDA1NSwgMHhlZWVlMDBlZSwgMHgwYTBhMDAwYSwKKwkweDQ5NDkwMDQ5LCAweDY4NjgwMDY4LCAweDM4MzgwMDM4LCAweGE0YTQwMGE0LAorCTB4MjgyODAwMjgsIDB4N2I3YjAwN2IsIDB4YzljOTAwYzksIDB4YzFjMTAwYzEsCisJMHhlM2UzMDBlMywgMHhmNGY0MDBmNCwgMHhjN2M3MDBjNywgMHg5ZTllMDA5ZSwKIH07CiAKIApAQCAtMzQ0LDcgKzM0NCw3IEBACiAJbHIgPSAobHIgPDwgYml0cykgKyAocmwgPj4gKDMyIC0gYml0cykpOwlcCiAJcmwgPSAocmwgPDwgYml0cykgKyAocnIgPj4gKDMyIC0gYml0cykpOwlcCiAJcnIgPSAocnIgPDwgYml0cykgKyAodzAgPj4gKDMyIC0gYml0cykpOwlcCi0gICAgfSB3aGlsZSgwKQorICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgUk9MRFFvMzIobGwsIGxyLCBybCwgcnIsIHcwLCB3MSwgYml0cykJCVwKICAgICBkbyB7CQkJCQkJXApAQCAtMzU0LDcgKzM1NCw3IEBACiAJbHIgPSAocmwgPDwgKGJpdHMgLSAzMikpICsgKHJyID4+ICg2NCAtIGJpdHMpKTsJXAogCXJsID0gKHJyIDw8IChiaXRzIC0gMzIpKSArICh3MCA+PiAoNjQgLSBiaXRzKSk7CVwKIAlyciA9ICh3MCA8PCAoYml0cyAtIDMyKSkgKyAodzEgPj4gKDY0IC0gYml0cykpOwlcCi0gICAgfSB3aGlsZSgwKQorICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgQ0FNRUxMSUFfRih4bCwgeHIsIGtsLCBrciwgeWwsIHlyLCBpbCwgaXIsIHQwLCB0MSkJXAogICAgIGRvIHsJCQkJCQkJXApAQCAtMzczLDcgKzM3Myw3IEBACiAJeWwgXj0geXI7CQkJCQkJXAogCXlyID0gcm9yMzIoeXIsIDgpOwkJCQkJXAogCXlyIF49IHlsOwkJCQkJCVwKLSAgICB9IHdoaWxlKDApCisgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBTVUJLRVlfTChJTkRFWCkgKHN1YmtleVsoSU5ERVgpKjJdKQogI2RlZmluZSBTVUJLRVlfUihJTkRFWCkgKHN1YmtleVsoSU5ERVgpKjIgKyAxXSkKQEAgLTgzNSw3ICs4MzUsNyBAQAogc3RhdGljIHZvaWQgY2FtZWxsaWFfc2V0dXAxOTIoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1MzIgKnN1YmtleSkKIHsKIAl1bnNpZ25lZCBjaGFyIGtrWzMyXTsKLQl1MzIga3JsbCwga3Jsciwga3JybCxrcnJyOworCXUzMiBrcmxsLCBrcmxyLCBrcnJsLCBrcnJyOwogCiAJbWVtY3B5KGtrLCBrZXksIDI0KTsKIAltZW1jcHkoKHVuc2lnbmVkIGNoYXIgKikma3JsbCwga2V5KzE2LCA0KTsKQEAgLTg2NSw3ICs4NjUsNyBAQAogCXQxIHw9IGxyOwkJCQkJCQlcCiAJbGwgXj0gdDE7CQkJCQkJCVwKIAlyciBePSByb2wzMih0MywgMSk7CQkJCQkJXAotICAgIH0gd2hpbGUoMCkKKyAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIENBTUVMTElBX1JPVU5EU00oeGwsIHhyLCBrbCwga3IsIHlsLCB5ciwgaWwsIGlyKQkJXAogICAgIGRvIHsJCQkJCQkJCVwKQEAgLTg4MSwxMiArODgxLDEyIEBACiAJaXIgXj0gaWwgXiBrcjsJCQkJCQkJXAogCXlsIF49IGlyOwkJCQkJCQlcCiAJeXIgXj0gcm9yMzIoaWwsIDgpIF4gaXI7CQkJCQkJXAotICAgIH0gd2hpbGUoMCkKKyAgICB9IHdoaWxlICgwKQogCiAvKiBtYXggPSAyNDogMTI4Yml0IGVuY3J5cHQsIG1heCA9IDMyOiAyNTZiaXQgZW5jcnlwdCAqLwogc3RhdGljIHZvaWQgY2FtZWxsaWFfZG9fZW5jcnlwdChjb25zdCB1MzIgKnN1YmtleSwgdTMyICppbywgdW5zaWduZWQgbWF4KQogewotCXUzMiBpbCxpcix0MCx0MTsgICAgICAgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGVzICovCisJdTMyIGlsLCBpciwgdDAsIHQxOyAgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZXMgKi8KIAogCS8qIHByZSB3aGl0ZW5pbmcgYnV0IGFic29yYiBrdzIgKi8KIAlpb1swXSBePSBTVUJLRVlfTCgwKTsKQEAgLTg5NCwzMCArODk0LDMwIEBACiAKIAkvKiBtYWluIGl0ZXJhdGlvbiAqLwogI2RlZmluZSBST1VORFMoaSkgZG8geyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwgXAotCQkJIFNVQktFWV9MKGkgKyAyKSxTVUJLRVlfUihpICsgMiksIFwKLQkJCSBpb1syXSxpb1szXSxpbCxpcik7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLCBcCi0JCQkgU1VCS0VZX0woaSArIDMpLFNVQktFWV9SKGkgKyAzKSwgXAotCQkJIGlvWzBdLGlvWzFdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sIFwKLQkJCSBTVUJLRVlfTChpICsgNCksU1VCS0VZX1IoaSArIDQpLCBcCi0JCQkgaW9bMl0saW9bM10saWwsaXIpOyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwgXAotCQkJIFNVQktFWV9MKGkgKyA1KSxTVUJLRVlfUihpICsgNSksIFwKLQkJCSBpb1swXSxpb1sxXSxpbCxpcik7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLCBcCi0JCQkgU1VCS0VZX0woaSArIDYpLFNVQktFWV9SKGkgKyA2KSwgXAotCQkJIGlvWzJdLGlvWzNdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sIFwKLQkJCSBTVUJLRVlfTChpICsgNyksU1VCS0VZX1IoaSArIDcpLCBcCi0JCQkgaW9bMF0saW9bMV0saWwsaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1swXSwgaW9bMV0sIFwKKwkJCSBTVUJLRVlfTChpICsgMiksIFNVQktFWV9SKGkgKyAyKSwgXAorCQkJIGlvWzJdLCBpb1szXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMl0sIGlvWzNdLCBcCisJCQkgU1VCS0VZX0woaSArIDMpLCBTVUJLRVlfUihpICsgMyksIFwKKwkJCSBpb1swXSwgaW9bMV0sIGlsLCBpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzBdLCBpb1sxXSwgXAorCQkJIFNVQktFWV9MKGkgKyA0KSwgU1VCS0VZX1IoaSArIDQpLCBcCisJCQkgaW9bMl0sIGlvWzNdLCBpbCwgaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1syXSwgaW9bM10sIFwKKwkJCSBTVUJLRVlfTChpICsgNSksIFNVQktFWV9SKGkgKyA1KSwgXAorCQkJIGlvWzBdLCBpb1sxXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMF0sIGlvWzFdLCBcCisJCQkgU1VCS0VZX0woaSArIDYpLCBTVUJLRVlfUihpICsgNiksIFwKKwkJCSBpb1syXSwgaW9bM10sIGlsLCBpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzJdLCBpb1szXSwgXAorCQkJIFNVQktFWV9MKGkgKyA3KSwgU1VCS0VZX1IoaSArIDcpLCBcCisJCQkgaW9bMF0sIGlvWzFdLCBpbCwgaXIpOyBcCiB9IHdoaWxlICgwKQogI2RlZmluZSBGTFMoaSkgZG8geyBcCi0JQ0FNRUxMSUFfRkxTKGlvWzBdLGlvWzFdLGlvWzJdLGlvWzNdLCBcCi0JCSAgICAgU1VCS0VZX0woaSArIDApLFNVQktFWV9SKGkgKyAwKSwgXAotCQkgICAgIFNVQktFWV9MKGkgKyAxKSxTVUJLRVlfUihpICsgMSksIFwKLQkJICAgICB0MCx0MSxpbCxpcik7IFwKKwlDQU1FTExJQV9GTFMoaW9bMF0sIGlvWzFdLCBpb1syXSwgaW9bM10sIFwKKwkJICAgICBTVUJLRVlfTChpICsgMCksIFNVQktFWV9SKGkgKyAwKSwgXAorCQkgICAgIFNVQktFWV9MKGkgKyAxKSwgU1VCS0VZX1IoaSArIDEpLCBcCisJCSAgICAgdDAsIHQxLCBpbCwgaXIpOyBcCiB9IHdoaWxlICgwKQogCiAJUk9VTkRTKDApOwpAQCAtOTQxLDcgKzk0MSw3IEBACiAKIHN0YXRpYyB2b2lkIGNhbWVsbGlhX2RvX2RlY3J5cHQoY29uc3QgdTMyICpzdWJrZXksIHUzMiAqaW8sIHVuc2lnbmVkIGkpCiB7Ci0JdTMyIGlsLGlyLHQwLHQxOyAgICAgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZXMgKi8KKwl1MzIgaWwsIGlyLCB0MCwgdDE7ICAgICAgICAgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlcyAqLwogCiAJLyogcHJlIHdoaXRlbmluZyBidXQgYWJzb3JiIGt3MiAqLwogCWlvWzBdIF49IFNVQktFWV9MKGkpOwpAQCAtOTQ5LDMwICs5NDksMzAgQEAKIAogCS8qIG1haW4gaXRlcmF0aW9uICovCiAjZGVmaW5lIFJPVU5EUyhpKSBkbyB7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzBdLGlvWzFdLCBcCi0JCQkgU1VCS0VZX0woaSArIDcpLFNVQktFWV9SKGkgKyA3KSwgXAotCQkJIGlvWzJdLGlvWzNdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMl0saW9bM10sIFwKLQkJCSBTVUJLRVlfTChpICsgNiksU1VCS0VZX1IoaSArIDYpLCBcCi0JCQkgaW9bMF0saW9bMV0saWwsaXIpOyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1swXSxpb1sxXSwgXAotCQkJIFNVQktFWV9MKGkgKyA1KSxTVUJLRVlfUihpICsgNSksIFwKLQkJCSBpb1syXSxpb1szXSxpbCxpcik7IFwKLQlDQU1FTExJQV9ST1VORFNNKGlvWzJdLGlvWzNdLCBcCi0JCQkgU1VCS0VZX0woaSArIDQpLFNVQktFWV9SKGkgKyA0KSwgXAotCQkJIGlvWzBdLGlvWzFdLGlsLGlyKTsgXAotCUNBTUVMTElBX1JPVU5EU00oaW9bMF0saW9bMV0sIFwKLQkJCSBTVUJLRVlfTChpICsgMyksU1VCS0VZX1IoaSArIDMpLCBcCi0JCQkgaW9bMl0saW9bM10saWwsaXIpOyBcCi0JQ0FNRUxMSUFfUk9VTkRTTShpb1syXSxpb1szXSwgXAotCQkJIFNVQktFWV9MKGkgKyAyKSxTVUJLRVlfUihpICsgMiksIFwKLQkJCSBpb1swXSxpb1sxXSxpbCxpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzBdLCBpb1sxXSwgXAorCQkJIFNVQktFWV9MKGkgKyA3KSwgU1VCS0VZX1IoaSArIDcpLCBcCisJCQkgaW9bMl0sIGlvWzNdLCBpbCwgaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1syXSwgaW9bM10sIFwKKwkJCSBTVUJLRVlfTChpICsgNiksIFNVQktFWV9SKGkgKyA2KSwgXAorCQkJIGlvWzBdLCBpb1sxXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMF0sIGlvWzFdLCBcCisJCQkgU1VCS0VZX0woaSArIDUpLCBTVUJLRVlfUihpICsgNSksIFwKKwkJCSBpb1syXSwgaW9bM10sIGlsLCBpcik7IFwKKwlDQU1FTExJQV9ST1VORFNNKGlvWzJdLCBpb1szXSwgXAorCQkJIFNVQktFWV9MKGkgKyA0KSwgU1VCS0VZX1IoaSArIDQpLCBcCisJCQkgaW9bMF0sIGlvWzFdLCBpbCwgaXIpOyBcCisJQ0FNRUxMSUFfUk9VTkRTTShpb1swXSwgaW9bMV0sIFwKKwkJCSBTVUJLRVlfTChpICsgMyksIFNVQktFWV9SKGkgKyAzKSwgXAorCQkJIGlvWzJdLCBpb1szXSwgaWwsIGlyKTsgXAorCUNBTUVMTElBX1JPVU5EU00oaW9bMl0sIGlvWzNdLCBcCisJCQkgU1VCS0VZX0woaSArIDIpLCBTVUJLRVlfUihpICsgMiksIFwKKwkJCSBpb1swXSwgaW9bMV0sIGlsLCBpcik7IFwKIH0gd2hpbGUgKDApCiAjZGVmaW5lIEZMUyhpKSBkbyB7IFwKLQlDQU1FTExJQV9GTFMoaW9bMF0saW9bMV0saW9bMl0saW9bM10sIFwKLQkJICAgICBTVUJLRVlfTChpICsgMSksU1VCS0VZX1IoaSArIDEpLCBcCi0JCSAgICAgU1VCS0VZX0woaSArIDApLFNVQktFWV9SKGkgKyAwKSwgXAotCQkgICAgIHQwLHQxLGlsLGlyKTsgXAorCUNBTUVMTElBX0ZMUyhpb1swXSwgaW9bMV0sIGlvWzJdLCBpb1szXSwgXAorCQkgICAgIFNVQktFWV9MKGkgKyAxKSwgU1VCS0VZX1IoaSArIDEpLCBcCisJCSAgICAgU1VCS0VZX0woaSArIDApLCBTVUJLRVlfUihpICsgMCksIFwKKwkJICAgICB0MCwgdDEsIGlsLCBpcik7IFwKIH0gd2hpbGUgKDApCiAKIAlpZiAoaSA9PSAzMikgewpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Nhc3Q1LmMgYi9jcnlwdG8vY2FzdDUuYwppbmRleCA4Y2JlMjhmLi5hMWQyMjk0IDEwMDY0NAotLS0gYS9jcnlwdG8vY2FzdDUuYworKysgYi9jcnlwdG8vY2FzdDUuYwpAQCAtNTY5LDEyICs1NjksMTIgQEAKIAkweGVhZWU2ODAxLCAweDhkYjJhMjgzLCAweGVhOGJmNTllCiB9OwogCi0jZGVmaW5lIEYxKEQsbSxyKSAgKCAgKEkgPSAoKG0pICsgKEQpKSksIChJPXJvbDMyKEksKHIpKSksICAgXAotICAgICgoKHMxW0kgPj4gMjRdIF4gczJbKEk+PjE2KSYweGZmXSkgLSBzM1soST4+OCkmMHhmZl0pICsgczRbSSYweGZmXSkgKQotI2RlZmluZSBGMihELG0scikgICggIChJID0gKChtKSBeIChEKSkpLCAoST1yb2wzMihJLChyKSkpLCAgIFwKLSAgICAoKChzMVtJID4+IDI0XSAtIHMyWyhJPj4xNikmMHhmZl0pICsgczNbKEk+PjgpJjB4ZmZdKSBeIHM0W0kmMHhmZl0pICkKLSNkZWZpbmUgRjMoRCxtLHIpICAoICAoSSA9ICgobSkgLSAoRCkpKSwgKEk9cm9sMzIoSSwocikpKSwgICBcCi0gICAgKCgoczFbSSA+PiAyNF0gKyBzMlsoST4+MTYpJjB4ZmZdKSBeIHMzWyhJPj44KSYweGZmXSkgLSBzNFtJJjB4ZmZdKSApCisjZGVmaW5lIEYxKEQsIG0sIHIpICAoKEkgPSAoKG0pICsgKEQpKSksIChJID0gcm9sMzIoSSwgKHIpKSksICAgXAorICAgICgoKHMxW0kgPj4gMjRdIF4gczJbKEk+PjE2KSYweGZmXSkgLSBzM1soST4+OCkmMHhmZl0pICsgczRbSSYweGZmXSkpCisjZGVmaW5lIEYyKEQsIG0sIHIpICAoKEkgPSAoKG0pIF4gKEQpKSksIChJID0gcm9sMzIoSSwgKHIpKSksICAgXAorICAgICgoKHMxW0kgPj4gMjRdIC0gczJbKEk+PjE2KSYweGZmXSkgKyBzM1soST4+OCkmMHhmZl0pIF4gczRbSSYweGZmXSkpCisjZGVmaW5lIEYzKEQsIG0sIHIpICAoKEkgPSAoKG0pIC0gKEQpKSksIChJID0gcm9sMzIoSSwgKHIpKSksICAgXAorICAgICgoKHMxW0kgPj4gMjRdICsgczJbKEk+PjE2KSYweGZmXSkgXiBzM1soST4+OCkmMHhmZl0pIC0gczRbSSYweGZmXSkpCiAKIAogc3RhdGljIHZvaWQgY2FzdDVfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0YnVmLCBjb25zdCB1OCAqaW5idWYpCkBAIC02OTQsNyArNjk0LDcgQEAKIAlkc3RbMV0gPSBjcHVfdG9fYmUzMihsKTsKIH0KIAotc3RhdGljIHZvaWQga2V5X3NjaGVkdWxlKHUzMiAqIHgsIHUzMiAqIHosIHUzMiAqIGspCitzdGF0aWMgdm9pZCBrZXlfc2NoZWR1bGUodTMyICp4LCB1MzIgKnosIHUzMiAqaykKIHsKIAogI2RlZmluZSB4aShpKSAgICgoeFsoaSkvNF0gPj4gKDgqKDMtKChpKSU0KSkpKSAmIDB4ZmYpCmRpZmYgLS1naXQgYS9jcnlwdG8vY2FzdDYuYyBiL2NyeXB0by9jYXN0Ni5jCmluZGV4IDAwN2QwMmIuLmUwYzE1YTYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jYXN0Ni5jCisrKyBiL2NyeXB0by9jYXN0Ni5jCkBAIC0xMSw3ICsxMSw3IEBACiAgKiB1bmRlciB0aGUgdGVybXMgb2YgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCiAgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQpAQCAtMzUsMTIgKzM1LDEyIEBACiAJdTggS3JbMTJdWzRdOwogfTsKIAotI2RlZmluZSBGMShELHIsbSkgICggIChJID0gKChtKSArIChEKSkpLCAoST1yb2wzMihJLChyKSkpLCAgIFwKLSAgICAoKChzMVtJID4+IDI0XSBeIHMyWyhJPj4xNikmMHhmZl0pIC0gczNbKEk+PjgpJjB4ZmZdKSArIHM0W0kmMHhmZl0pICkKLSNkZWZpbmUgRjIoRCxyLG0pICAoICAoSSA9ICgobSkgXiAoRCkpKSwgKEk9cm9sMzIoSSwocikpKSwgICBcCi0gICAgKCgoczFbSSA+PiAyNF0gLSBzMlsoST4+MTYpJjB4ZmZdKSArIHMzWyhJPj44KSYweGZmXSkgXiBzNFtJJjB4ZmZdKSApCi0jZGVmaW5lIEYzKEQscixtKSAgKCAgKEkgPSAoKG0pIC0gKEQpKSksIChJPXJvbDMyKEksKHIpKSksICAgXAotICAgICgoKHMxW0kgPj4gMjRdICsgczJbKEk+PjE2KSYweGZmXSkgXiBzM1soST4+OCkmMHhmZl0pIC0gczRbSSYweGZmXSkgKQorI2RlZmluZSBGMShELCByLCBtKSAgKChJID0gKChtKSArIChEKSkpLCAoSSA9IHJvbDMyKEksIChyKSkpLCAgIFwKKyAgICAoKChzMVtJID4+IDI0XSBeIHMyWyhJPj4xNikmMHhmZl0pIC0gczNbKEk+PjgpJjB4ZmZdKSArIHM0W0kmMHhmZl0pKQorI2RlZmluZSBGMihELCByLCBtKSAgKChJID0gKChtKSBeIChEKSkpLCAoSSA9IHJvbDMyKEksIChyKSkpLCAgIFwKKyAgICAoKChzMVtJID4+IDI0XSAtIHMyWyhJPj4xNikmMHhmZl0pICsgczNbKEk+PjgpJjB4ZmZdKSBeIHM0W0kmMHhmZl0pKQorI2RlZmluZSBGMyhELCByLCBtKSAgKChJID0gKChtKSAtIChEKSkpLCAoSSA9IHJvbDMyKEksIChyKSkpLCAgIFwKKyAgICAoKChzMVtJID4+IDI0XSArIHMyWyhJPj4xNikmMHhmZl0pIF4gczNbKEk+PjgpJjB4ZmZdKSAtIHM0W0kmMHhmZl0pKQogCiBzdGF0aWMgY29uc3QgdTMyIHMxWzI1Nl0gPSB7CiAJMHgzMGZiNDBkNCwgMHg5ZmEwZmYwYiwgMHg2YmVjY2QyZiwgMHgzZjI1OGM3YSwgMHgxZTIxM2YyZiwKQEAgLTMxMiw3ICszMTIsNyBAQAogCiBzdGF0aWMgY29uc3QgdTMyIFRtWzI0XVs4XSA9IHsKIAl7IDB4NWE4Mjc5OTksIDB4Yzk1YzY1M2EsIDB4MzgzNjUwZGIsIDB4YTcxMDNjN2MsIDB4MTVlYTI4MWQsCi0JCTB4ODRjNDEzYmUsIDB4ZjM5ZGZmNWYsIDB4NjI3N2ViMDAgfSAsIAorCQkweDg0YzQxM2JlLCAweGYzOWRmZjVmLCAweDYyNzdlYjAwIH0gLAogCXsgMHhkMTUxZDZhMSwgMHg0MDJiYzI0MiwgMHhhZjA1YWRlMywgMHgxZGRmOTk4NCwgMHg4Y2I5ODUyNSwKIAkJMHhmYjkzNzBjNiwgMHg2YTZkNWM2NywgMHhkOTQ3NDgwOCB9ICwKIAl7IDB4NDgyMTMzYTksIDB4YjZmYjFmNGEsIDB4MjVkNTBhZWIsIDB4OTRhZWY2OGMsIDB4MDM4OGUyMmQsCkBAIC0zNjksNyArMzY5LDggQEAKIH07CiAKIC8qIGZvcndhcmQgb2N0YXZlICovCi1zdGF0aWMgdm9pZCBXKHUzMiAqa2V5LCB1bnNpZ25lZCBpbnQgaSkgeworc3RhdGljIHZvaWQgVyh1MzIgKmtleSwgdW5zaWduZWQgaW50IGkpCit7CiAJdTMyIEk7CiAJa2V5WzZdIF49IEYxKGtleVs3XSwgVHJbaSAlIDRdWzBdLCBUbVtpXVswXSk7CiAJa2V5WzVdIF49IEYyKGtleVs2XSwgVHJbaSAlIDRdWzFdLCBUbVtpXVsxXSk7CkBAIC0zNzcsNyArMzc4LDcgQEAKIAlrZXlbM10gXj0gRjEoa2V5WzRdLCBUcltpICUgNF1bM10sIFRtW2ldWzNdKTsKIAlrZXlbMl0gXj0gRjIoa2V5WzNdLCBUcltpICUgNF1bNF0sIFRtW2ldWzRdKTsKIAlrZXlbMV0gXj0gRjMoa2V5WzJdLCBUcltpICUgNF1bNV0sIFRtW2ldWzVdKTsKLQlrZXlbMF0gXj0gRjEoa2V5WzFdLCBUcltpICUgNF1bNl0sIFRtW2ldWzZdKTsJCisJa2V5WzBdIF49IEYxKGtleVsxXSwgVHJbaSAlIDRdWzZdLCBUbVtpXVs2XSk7CiAJa2V5WzddIF49IEYyKGtleVswXSwgVHJbaSAlIDRdWzddLCBUbVtpXVs3XSk7CiB9CiAKQEAgLTM5MywxMSArMzk0LDExIEBACiAJaWYgKGtleV9sZW4gJSA0ICE9IDApIHsKIAkJKmZsYWdzIHw9IENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOOwogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CQorCX0KIAotCW1lbXNldCAocF9rZXksIDAsIDMyKTsKLQltZW1jcHkgKHBfa2V5LCBpbl9rZXksIGtleV9sZW4pOwotCQorCW1lbXNldChwX2tleSwgMCwgMzIpOworCW1lbWNweShwX2tleSwgaW5fa2V5LCBrZXlfbGVuKTsKKwogCWtleVswXSA9IGJlMzJfdG9fY3B1KHBfa2V5WzBdKTsJCS8qIEEgKi8KIAlrZXlbMV0gPSBiZTMyX3RvX2NwdShwX2tleVsxXSk7CQkvKiBCICovCiAJa2V5WzJdID0gYmUzMl90b19jcHUocF9rZXlbMl0pOwkJLyogQyAqLwpAQCAtNDA2LDE4ICs0MDcsMTYgQEAKIAlrZXlbNV0gPSBiZTMyX3RvX2NwdShwX2tleVs1XSk7CQkvKiBGICovCiAJa2V5WzZdID0gYmUzMl90b19jcHUocF9rZXlbNl0pOwkJLyogRyAqLwogCWtleVs3XSA9IGJlMzJfdG9fY3B1KHBfa2V5WzddKTsJCS8qIEggKi8KLQkKLQogCiAJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKLQkJVyAoa2V5LCAyICogaSk7Ci0JCVcgKGtleSwgMiAqIGkgKyAxKTsKLQkJCisJCVcoa2V5LCAyICogaSk7CisJCVcoa2V5LCAyICogaSArIDEpOworCiAJCWMtPktyW2ldWzBdID0ga2V5WzBdICYgMHgxZjsKIAkJYy0+S3JbaV1bMV0gPSBrZXlbMl0gJiAweDFmOwogCQljLT5LcltpXVsyXSA9IGtleVs0XSAmIDB4MWY7CiAJCWMtPktyW2ldWzNdID0ga2V5WzZdICYgMHgxZjsKLQkJCisKIAkJYy0+S21baV1bMF0gPSBrZXlbN107CiAJCWMtPkttW2ldWzFdID0ga2V5WzVdOwogCQljLT5LbVtpXVsyXSA9IGtleVszXTsKQEAgLTQyOCwyMSArNDI3LDIzIEBACiB9CiAKIC8qZm9yd2FyZCBxdWFkIHJvdW5kKi8KLXN0YXRpYyB2b2lkIFEgKHUzMiAqIGJsb2NrLCB1OCAqIEtyLCB1MzIgKiBLbSkgeworc3RhdGljIHZvaWQgUSh1MzIgKmJsb2NrLCB1OCAqS3IsIHUzMiAqS20pCit7CiAJdTMyIEk7CiAJYmxvY2tbMl0gXj0gRjEoYmxvY2tbM10sIEtyWzBdLCBLbVswXSk7CiAJYmxvY2tbMV0gXj0gRjIoYmxvY2tbMl0sIEtyWzFdLCBLbVsxXSk7CiAJYmxvY2tbMF0gXj0gRjMoYmxvY2tbMV0sIEtyWzJdLCBLbVsyXSk7Ci0JYmxvY2tbM10gXj0gRjEoYmxvY2tbMF0sIEtyWzNdLCBLbVszXSk7CQkKKwlibG9ja1szXSBePSBGMShibG9ja1swXSwgS3JbM10sIEttWzNdKTsKIH0KIAogLypyZXZlcnNlIHF1YWQgcm91bmQqLwotc3RhdGljIHZvaWQgUUJBUiAodTMyICogYmxvY2ssIHU4ICogS3IsIHUzMiAqIEttKSB7CitzdGF0aWMgdm9pZCBRQkFSKHUzMiAqYmxvY2ssIHU4ICpLciwgdTMyICpLbSkKK3sKIAl1MzIgSTsKLSAgICAgICAgYmxvY2tbM10gXj0gRjEoYmxvY2tbMF0sIEtyWzNdLCBLbVszXSk7Ci0gICAgICAgIGJsb2NrWzBdIF49IEYzKGJsb2NrWzFdLCBLclsyXSwgS21bMl0pOwotICAgICAgICBibG9ja1sxXSBePSBGMihibG9ja1syXSwgS3JbMV0sIEttWzFdKTsKLSAgICAgICAgYmxvY2tbMl0gXj0gRjEoYmxvY2tbM10sIEtyWzBdLCBLbVswXSk7CisJYmxvY2tbM10gXj0gRjEoYmxvY2tbMF0sIEtyWzNdLCBLbVszXSk7CisJYmxvY2tbMF0gXj0gRjMoYmxvY2tbMV0sIEtyWzJdLCBLbVsyXSk7CisJYmxvY2tbMV0gXj0gRjIoYmxvY2tbMl0sIEtyWzFdLCBLbVsxXSk7CisJYmxvY2tbMl0gXj0gRjEoYmxvY2tbM10sIEtyWzBdLCBLbVswXSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNhc3Q2X2VuY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dGJ1ZiwgY29uc3QgdTggKmluYnVmKQpAQCAtNDUxLDY0ICs0NTIsNjUgQEAKIAljb25zdCBfX2JlMzIgKnNyYyA9IChjb25zdCBfX2JlMzIgKilpbmJ1ZjsKIAlfX2JlMzIgKmRzdCA9IChfX2JlMzIgKilvdXRidWY7CiAJdTMyIGJsb2NrWzRdOwotCXUzMiAqIEttOyAKLQl1OCAqIEtyOworCXUzMiAqS207CisJdTggKktyOwogCiAJYmxvY2tbMF0gPSBiZTMyX3RvX2NwdShzcmNbMF0pOwogCWJsb2NrWzFdID0gYmUzMl90b19jcHUoc3JjWzFdKTsKIAlibG9ja1syXSA9IGJlMzJfdG9fY3B1KHNyY1syXSk7CiAJYmxvY2tbM10gPSBiZTMyX3RvX2NwdShzcmNbM10pOwogCi0JS20gPSBjLT5LbVswXTsgS3IgPSBjLT5LclswXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVsxXTsgS3IgPSBjLT5LclsxXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVsyXTsgS3IgPSBjLT5LclsyXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVszXTsgS3IgPSBjLT5LclszXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs0XTsgS3IgPSBjLT5Lcls0XTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs1XTsgS3IgPSBjLT5Lcls1XTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs2XTsgS3IgPSBjLT5Lcls2XTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs3XTsgS3IgPSBjLT5Lcls3XTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs4XTsgS3IgPSBjLT5Lcls4XTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVs5XTsgS3IgPSBjLT5Lcls5XTsgUUJBUiAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVsxMF07IEtyID0gYy0+S3JbMTBdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzExXTsgS3IgPSBjLT5LclsxMV07IFFCQVIgKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bMF07IEtyID0gYy0+S3JbMF07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVsxXTsgS3IgPSBjLT5LclsxXTsgUShibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzJdOyBLciA9IGMtPktyWzJdOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bM107IEtyID0gYy0+S3JbM107IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs0XTsgS3IgPSBjLT5Lcls0XTsgUShibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzVdOyBLciA9IGMtPktyWzVdOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bNl07IEtyID0gYy0+S3JbNl07IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs3XTsgS3IgPSBjLT5Lcls3XTsgUUJBUihibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzhdOyBLciA9IGMtPktyWzhdOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bOV07IEtyID0gYy0+S3JbOV07IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVsxMF07IEtyID0gYy0+S3JbMTBdOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bMTFdOyBLciA9IGMtPktyWzExXTsgUUJBUihibG9jaywgS3IsIEttKTsKIAogCWRzdFswXSA9IGNwdV90b19iZTMyKGJsb2NrWzBdKTsKIAlkc3RbMV0gPSBjcHVfdG9fYmUzMihibG9ja1sxXSk7CiAJZHN0WzJdID0gY3B1X3RvX2JlMzIoYmxvY2tbMl0pOwogCWRzdFszXSA9IGNwdV90b19iZTMyKGJsb2NrWzNdKTsKLX0JCit9CiAKLXN0YXRpYyB2b2lkIGNhc3Q2X2RlY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dGJ1ZiwgY29uc3QgdTggKmluYnVmKSB7Ci0Jc3RydWN0IGNhc3Q2X2N0eCAqIGMgPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworc3RhdGljIHZvaWQgY2FzdDZfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0YnVmLCBjb25zdCB1OCAqaW5idWYpCit7CisJc3RydWN0IGNhc3Q2X2N0eCAqYyA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAJY29uc3QgX19iZTMyICpzcmMgPSAoY29uc3QgX19iZTMyICopaW5idWY7CiAJX19iZTMyICpkc3QgPSAoX19iZTMyICopb3V0YnVmOwogCXUzMiBibG9ja1s0XTsKLQl1MzIgKiBLbTsgCi0JdTggKiBLcjsKKwl1MzIgKkttOworCXU4ICpLcjsKIAogCWJsb2NrWzBdID0gYmUzMl90b19jcHUoc3JjWzBdKTsKIAlibG9ja1sxXSA9IGJlMzJfdG9fY3B1KHNyY1sxXSk7CiAJYmxvY2tbMl0gPSBiZTMyX3RvX2NwdShzcmNbMl0pOwogCWJsb2NrWzNdID0gYmUzMl90b19jcHUoc3JjWzNdKTsKIAotCUttID0gYy0+S21bMTFdOyBLciA9IGMtPktyWzExXTsgUSAoYmxvY2ssIEtyLCBLbSk7Ci0JS20gPSBjLT5LbVsxMF07IEtyID0gYy0+S3JbMTBdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzldOyBLciA9IGMtPktyWzldOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzhdOyBLciA9IGMtPktyWzhdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzddOyBLciA9IGMtPktyWzddOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzZdOyBLciA9IGMtPktyWzZdOyBRIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzVdOyBLciA9IGMtPktyWzVdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzRdOyBLciA9IGMtPktyWzRdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzNdOyBLciA9IGMtPktyWzNdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzJdOyBLciA9IGMtPktyWzJdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzFdOyBLciA9IGMtPktyWzFdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQlLbSA9IGMtPkttWzBdOyBLciA9IGMtPktyWzBdOyBRQkFSIChibG9jaywgS3IsIEttKTsKLQkKKwlLbSA9IGMtPkttWzExXTsgS3IgPSBjLT5LclsxMV07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVsxMF07IEtyID0gYy0+S3JbMTBdOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bOV07IEtyID0gYy0+S3JbOV07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs4XTsgS3IgPSBjLT5Lcls4XTsgUShibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzddOyBLciA9IGMtPktyWzddOyBRKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bNl07IEtyID0gYy0+S3JbNl07IFEoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVs1XTsgS3IgPSBjLT5Lcls1XTsgUUJBUihibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzRdOyBLciA9IGMtPktyWzRdOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bM107IEtyID0gYy0+S3JbM107IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisJS20gPSBjLT5LbVsyXTsgS3IgPSBjLT5LclsyXTsgUUJBUihibG9jaywgS3IsIEttKTsKKwlLbSA9IGMtPkttWzFdOyBLciA9IGMtPktyWzFdOyBRQkFSKGJsb2NrLCBLciwgS20pOworCUttID0gYy0+S21bMF07IEtyID0gYy0+S3JbMF07IFFCQVIoYmxvY2ssIEtyLCBLbSk7CisKIAlkc3RbMF0gPSBjcHVfdG9fYmUzMihibG9ja1swXSk7CiAJZHN0WzFdID0gY3B1X3RvX2JlMzIoYmxvY2tbMV0pOwogCWRzdFsyXSA9IGNwdV90b19iZTMyKGJsb2NrWzJdKTsKIAlkc3RbM10gPSBjcHVfdG9fYmUzMihibG9ja1szXSk7Ci19CQorfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWxnID0gewogCS5jcmFfbmFtZSA9ICJjYXN0NiIsCmRpZmYgLS1naXQgYS9jcnlwdG8vY2lwaGVyLmMgYi9jcnlwdG8vY2lwaGVyLmMKaW5kZXggOWExYTczMS4uMzk1NDFlMCAxMDA2NDQKLS0tIGEvY3J5cHRvL2NpcGhlci5jCisrKyBiL2NyeXB0by9jaXBoZXIuYwpAQCAtOCw3ICs4LDcgQEAKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9jb21wcmVzcy5jIGIvY3J5cHRvL2NvbXByZXNzLmMKaW5kZXggMWVlMzU3MC4uYzMzZjA3NiAxMDA2NDQKLS0tIGEvY3J5cHRvL2NvbXByZXNzLmMKKysrIGIvY3J5cHRvL2NvbXByZXNzLmMKQEAgLTcsNyArNyw3IEBACiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIAorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCkBAIC0zOSw3ICszOSw3IEBACiAKIAlvcHMtPmNvdF9jb21wcmVzcyA9IGNyeXB0b19jb21wcmVzczsKIAlvcHMtPmNvdF9kZWNvbXByZXNzID0gY3J5cHRvX2RlY29tcHJlc3M7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyYzMyYy5jIGIvY3J5cHRvL2NyYzMyYy5jCmluZGV4IDk3M2JjMmMuLmRlOWU1NWMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jcmMzMmMuYworKysgYi9jcnlwdG8vY3JjMzJjLmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBDcnlwdG9ncmFwaGljIEFQSS4KICAqCiAgKiBDUkMzMkMgY2hrc3VtCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIAorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCkBAIC0xNDIsNyArMTQyLDcgQEAKIH0KIAogLyoKLSAqIFN0ZXBzIHRocm91Z2ggYnVmZmVyIG9uZSBieXRlIGF0IGF0IHRpbWUsIGNhbGN1bGF0ZXMgcmVmbGVjdGVkIAorICogU3RlcHMgdGhyb3VnaCBidWZmZXIgb25lIGJ5dGUgYXQgYXQgdGltZSwgY2FsY3VsYXRlcyByZWZsZWN0ZWQKICAqIGNyYyB1c2luZyB0YWJsZS4KICAqLwogCmRpZmYgLS1naXQgYS9jcnlwdG8vY3J5cHRvX251bGwuYyBiL2NyeXB0by9jcnlwdG9fbnVsbC5jCmluZGV4IGNiNzFjOTEuLjA3YThhOTYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jcnlwdG9fbnVsbC5jCisrKyBiL2NyeXB0by9jcnlwdG9fbnVsbC5jCkBAIC0xLDExICsxLDExIEBACi0vKiAKKy8qCiAgKiBDcnlwdG9ncmFwaGljIEFQSS4KICAqCiAgKiBOdWxsIGFsZ29yaXRobXMsIGFrYSBNdWNoIEFkbyBBYm91dCBOb3RoaW5nLgogICoKICAqIFRoZXNlIGFyZSBuZWVkZWQgZm9yIElQc2VjLCBhbmQgbWF5IGJlIHVzZWZ1bCBpbiBnZW5lcmFsIGZvcgogICogdGVzdGluZyAmIGRlYnVnZ2luZy4KLSAqIAorICoKICAqIFRoZSBudWxsIGNpcGhlciBpcyBjb21wbGlhbnQgd2l0aCBSRkMyNDEwLgogICoKICAqIENvcHlyaWdodCAoYykgMjAwMiBKYW1lcyBNb3JyaXMgPGptb3JyaXNAaW50ZXJjb2RlLmNvbS5hdT4KQEAgLTE2Myw3ICsxNjMsNyBAQAogc3RhdGljIGludCBfX2luaXQgY3J5cHRvX251bGxfbW9kX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKLQkKKwogCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmNpcGhlcl9udWxsKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CkBAIC0xODAsNyArMTgwLDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXRfdW5yZWdpc3Rlcl9kaWdlc3Q7CiAKLW91dDoJCitvdXQ6CiAJcmV0dXJuIHJldDsKIAogb3V0X3VucmVnaXN0ZXJfZGlnZXN0OgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2RlZmxhdGUuYyBiL2NyeXB0by9kZWZsYXRlLmMKaW5kZXggOTEyOGRhNC4uNDYzZGM4NSAxMDA2NDQKLS0tIGEvY3J5cHRvL2RlZmxhdGUuYworKysgYi9jcnlwdG8vZGVmbGF0ZS5jCkBAIC0xLDE0ICsxLDE0IEBACi0vKiAKKy8qCiAgKiBDcnlwdG9ncmFwaGljIEFQSS4KICAqCiAgKiBEZWZsYXRlIGFsZ29yaXRobSAoUkZDIDE5NTEpLCBpbXBsZW1lbnRlZCBoZXJlIHByaW1hcmlseSBmb3IgdXNlCiAgKiBieSBJUENPTVAgKFJGQyAzMTczICYgUkZDIDIzOTQpLgogICoKICAqIENvcHlyaWdodCAoYykgMjAwMyBKYW1lcyBNb3JyaXMgPGptb3JyaXNAaW50ZXJjb2RlLmNvbS5hdT4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSAKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqIEZJWE1FOiBkZWZsYXRlIHRyYW5zZm9ybXMgd2lsbCByZXF1aXJlIHVwIHRvIGEgdG90YWwgb2YgYWJvdXQgNDM2ayBvZiBrZXJuZWwKQEAgLTQ5LDcgKzQ5LDcgQEAKIAlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmN0eC0+Y29tcF9zdHJlYW07CiAKIAlzdHJlYW0tPndvcmtzcGFjZSA9IHZtYWxsb2MoemxpYl9kZWZsYXRlX3dvcmtzcGFjZXNpemUoKSk7Ci0JaWYgKCFzdHJlYW0tPndvcmtzcGFjZSApIHsKKwlpZiAoIXN0cmVhbS0+d29ya3NwYWNlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTYxLDcgKzYxLDcgQEAKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfZnJlZTsKIAl9Ci1vdXQ6CQorb3V0OgogCXJldHVybiByZXQ7CiBvdXRfZnJlZToKIAl2ZnJlZShzdHJlYW0tPndvcmtzcGFjZSk7CkBAIC03NCw3ICs3NCw3IEBACiAJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZjdHgtPmRlY29tcF9zdHJlYW07CiAKIAlzdHJlYW0tPndvcmtzcGFjZSA9IGt6YWxsb2MoemxpYl9pbmZsYXRlX3dvcmtzcGFjZXNpemUoKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzdHJlYW0tPndvcmtzcGFjZSApIHsKKwlpZiAoIXN0cmVhbS0+d29ya3NwYWNlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTEwNiw3ICsxMDYsNyBAQAogewogCXN0cnVjdCBkZWZsYXRlX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAlpbnQgcmV0OwotCQorCiAJcmV0ID0gZGVmbGF0ZV9jb21wX2luaXQoY3R4KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKQEAgLTE1MywxMSArMTUzLDExIEBACiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KLSAKKwogc3RhdGljIGludCBkZWZsYXRlX2RlY29tcHJlc3Moc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKnNyYywKIAkJCSAgICAgIHVuc2lnbmVkIGludCBzbGVuLCB1OCAqZHN0LCB1bnNpZ25lZCBpbnQgKmRsZW4pCiB7Ci0JCisKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgZGVmbGF0ZV9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmZGN0eC0+ZGVjb21wX3N0cmVhbTsKQEAgLTE4Miw3ICsxODIsNyBAQAogCWlmIChyZXQgPT0gWl9PSyAmJiAhc3RyZWFtLT5hdmFpbF9pbiAmJiBzdHJlYW0tPmF2YWlsX291dCkgewogCQl1OCB6ZXJvc3R1ZmYgPSAwOwogCQlzdHJlYW0tPm5leHRfaW4gPSAmemVyb3N0dWZmOwotCQlzdHJlYW0tPmF2YWlsX2luID0gMTsgCisJCXN0cmVhbS0+YXZhaWxfaW4gPSAxOwogCQlyZXQgPSB6bGliX2luZmxhdGUoc3RyZWFtLCBaX0ZJTklTSCk7CiAJfQogCWlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKSB7CmRpZmYgLS1naXQgYS9jcnlwdG8vZGVzX2dlbmVyaWMuYyBiL2NyeXB0by9kZXNfZ2VuZXJpYy5jCmluZGV4IDViZDNlZTMuLjI0OWY5MDMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kZXNfZ2VuZXJpYy5jCisrKyBiL2NyeXB0by9kZXNfZ2VuZXJpYy5jCkBAIC04NjksOCArODY5LDcgQEAKIAogCWlmICh1bmxpa2VseSghKChLWzBdIF4gS1syXSkgfCAoS1sxXSBeIEtbM10pKSB8fAogCQkgICAgICEoKEtbMl0gXiBLWzRdKSB8IChLWzNdIF4gS1s1XSkpKSAmJgotCQkgICAgICgqZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9XRUFLX0tFWSkpCi0JeworCQkgICAgICgqZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9XRUFLX0tFWSkpIHsKIAkJKmZsYWdzIHw9IENSWVBUT19URk1fUkVTX1dFQUtfS0VZOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9jcnlwdG8vZWNiLmMgYi9jcnlwdG8vZWNiLmMKaW5kZXggYTQ2ODM4ZS4uOTM1Y2ZlZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjYi5jCisrKyBiL2NyeXB0by9lY2IuYwpAQCAtNTUsNyArNTUsNyBAQAogCiAJCWRvIHsKIAkJCWZuKGNyeXB0b19jaXBoZXJfdGZtKHRmbSksIHdkc3QsIHdzcmMpOwotCQorCiAJCQl3c3JjICs9IGJzaXplOwogCQkJd2RzdCArPSBic2l6ZTsKIAkJfSB3aGlsZSAoKG5ieXRlcyAtPSBic2l6ZSkgPj0gYnNpemUpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2ZjcnlwdC5jIGIvY3J5cHRvL2ZjcnlwdC5jCmluZGV4IGI4MmQ2MWYuLmMzMzEwN2UgMTAwNjQ0Ci0tLSBhL2NyeXB0by9mY3J5cHQuYworKysgYi9jcnlwdG8vZmNyeXB0LmMKQEAgLTYwLDEzICs2MCwxMyBAQAogCXUzMiB0ID0gbG8gJiAoKDEgPDwgbikgLSAxKTsJCQkJXAogCWxvID0gKGxvID4+IG4pIHwgKChoaSAmICgoMSA8PCBuKSAtIDEpKSA8PCAoMzIgLSBuKSk7CVwKIAloaSA9IChoaSA+PiBuKSB8ICh0IDw8ICgyNC1uKSk7CQkJCVwKLX0gd2hpbGUoMCkKK30gd2hpbGUgKDApCiAKIC8qIFJvdGF0ZSByaWdodCBvbmUgNjQgYml0IG51bWJlciBhcyBhIDU2IGJpdCBudW1iZXIgKi8KICNkZWZpbmUgcm9yNTZfNjQoaywgbikJCQkJCQlcCiBkbyB7CQkJCQkJCQlcCiAJayA9IChrID4+IG4pIHwgKChrICYgKCgxIDw8IG4pIC0gMSkpIDw8ICg1NiAtIG4pKTsJXAotfSB3aGlsZSgwKQorfSB3aGlsZSAoMCkKIAogLyoKICAqIFNib3hlcyBmb3IgRmVpc3RlbCBuZXR3b3JrIGRlcml2ZWQgZnJvbQpAQCAtMjI4LDcgKzIyOCw3IEBACiAJdW5pb24gbGM0IHsgX19iZTMyIGw7IHU4IGNbNF07IH0gdTsJCQkJXAogCXUubCA9IHNjaGVkIF4gUjsJCQkJCQlcCiAJTCBePSBzYm94MFt1LmNbMF1dIF4gc2JveDFbdS5jWzFdXSBeIHNib3gyW3UuY1syXV0gXiBzYm94M1t1LmNbM11dOyBcCi19IHdoaWxlKDApCit9IHdoaWxlICgwKQogCiAvKgogICogZW5jcnlwdG9yCmRpZmYgLS1naXQgYS9jcnlwdG8vZ2NtLmMgYi9jcnlwdG8vZ2NtLmMKaW5kZXggYzY1NDcxMy4uMmY1ZmJiYSAxMDA2NDQKLS0tIGEvY3J5cHRvL2djbS5jCisrKyBiL2NyeXB0by9nY20uYwpAQCAtMzcsNiArMzcsMTkgQEAKIAl1OCBub25jZVs0XTsKIH07CiAKK3N0cnVjdCBjcnlwdG9fcmZjNDU0M19jdHggeworCXN0cnVjdCBjcnlwdG9fYWVhZCAqY2hpbGQ7CisJdTggbm9uY2VbNF07Cit9OworCitzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfcmVxX2N0eCB7CisJdTggYXV0aF90YWdbMTZdOworCXN0cnVjdCBzY2F0dGVybGlzdCBjaXBoZXJbMV07CisJc3RydWN0IHNjYXR0ZXJsaXN0IHBheWxvYWRbMl07CisJc3RydWN0IHNjYXR0ZXJsaXN0IGFzc29jWzJdOworCXN0cnVjdCBhZWFkX3JlcXVlc3Qgc3VicmVxOworfTsKKwogc3RydWN0IGNyeXB0b19nY21fZ2hhc2hfY3R4IHsKIAl1bnNpZ25lZCBpbnQgY3J5cHRsZW47CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmM7CkBAIC0xMDQ3LDYgKzEwNjAsMjcyIEBACiAJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfcmVxX2N0eCAqY3J5cHRvX3JmYzQ1NDNfcmVxY3R4KAorCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSkKK3sKKwl1bnNpZ25lZCBsb25nIGFsaWduID0gY3J5cHRvX2FlYWRfYWxpZ25tYXNrKGNyeXB0b19hZWFkX3JlcXRmbShyZXEpKTsKKworCXJldHVybiAodm9pZCAqKVBUUl9BTElHTigodTggKilhZWFkX3JlcXVlc3RfY3R4KHJlcSksIGFsaWduICsgMSk7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX3JmYzQ1NDNfc2V0a2V5KHN0cnVjdCBjcnlwdG9fYWVhZCAqcGFyZW50LCBjb25zdCB1OCAqa2V5LAorCQkJCSB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCXN0cnVjdCBjcnlwdG9fcmZjNDU0M19jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChwYXJlbnQpOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqY2hpbGQgPSBjdHgtPmNoaWxkOworCWludCBlcnI7CisKKwlpZiAoa2V5bGVuIDwgNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlrZXlsZW4gLT0gNDsKKwltZW1jcHkoY3R4LT5ub25jZSwga2V5ICsga2V5bGVuLCA0KTsKKworCWNyeXB0b19hZWFkX2NsZWFyX2ZsYWdzKGNoaWxkLCBDUllQVE9fVEZNX1JFUV9NQVNLKTsKKwljcnlwdG9fYWVhZF9zZXRfZmxhZ3MoY2hpbGQsIGNyeXB0b19hZWFkX2dldF9mbGFncyhwYXJlbnQpICYKKwkJCQkgICAgIENSWVBUT19URk1fUkVRX01BU0spOworCWVyciA9IGNyeXB0b19hZWFkX3NldGtleShjaGlsZCwga2V5LCBrZXlsZW4pOworCWNyeXB0b19hZWFkX3NldF9mbGFncyhwYXJlbnQsIGNyeXB0b19hZWFkX2dldF9mbGFncyhjaGlsZCkgJgorCQkJCSAgICAgIENSWVBUT19URk1fUkVTX01BU0spOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjcnlwdG9fcmZjNDU0M19zZXRhdXRoc2l6ZShzdHJ1Y3QgY3J5cHRvX2FlYWQgKnBhcmVudCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgYXV0aHNpemUpCit7CisJc3RydWN0IGNyeXB0b19yZmM0NTQzX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KHBhcmVudCk7CisKKwlpZiAoYXV0aHNpemUgIT0gMTYpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGNyeXB0b19hZWFkX3NldGF1dGhzaXplKGN0eC0+Y2hpbGQsIGF1dGhzaXplKTsKK30KKworLyogdGhpcyBpcyB0aGUgc2FtZSBhcyBjcnlwdG9fYXV0aGVuY19jaGFpbiAqLworc3RhdGljIHZvaWQgY3J5cHRvX3JmYzQ1NDNfY2hhaW4oc3RydWN0IHNjYXR0ZXJsaXN0ICpoZWFkLAorCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgY2hhaW4pCit7CisJaWYgKGNoYWluKSB7CisJCWhlYWQtPmxlbmd0aCArPSBzZy0+bGVuZ3RoOworCQlzZyA9IHNjYXR0ZXJ3YWxrX3NnX25leHQoc2cpOworCX0KKworCWlmIChzZykKKwkJc2NhdHRlcndhbGtfc2dfY2hhaW4oaGVhZCwgMiwgc2cpOworCWVsc2UKKwkJc2dfbWFya19lbmQoaGVhZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpjcnlwdG9fcmZjNDU0M19jcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEsCisJCQkJCQkgaW50IGVuYykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWQgPSBjcnlwdG9fYWVhZF9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgoYWVhZCk7CisJc3RydWN0IGNyeXB0b19yZmM0NTQzX3JlcV9jdHggKnJjdHggPSBjcnlwdG9fcmZjNDU0M19yZXFjdHgocmVxKTsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpzdWJyZXEgPSAmcmN0eC0+c3VicmVxOworCXN0cnVjdCBzY2F0dGVybGlzdCAqZHN0ID0gcmVxLT5kc3Q7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpjaXBoZXIgPSByY3R4LT5jaXBoZXI7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpwYXlsb2FkID0gcmN0eC0+cGF5bG9hZDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmFzc29jID0gcmN0eC0+YXNzb2M7CisJdW5zaWduZWQgaW50IGF1dGhzaXplID0gY3J5cHRvX2FlYWRfYXV0aHNpemUoYWVhZCk7CisJdW5zaWduZWQgaW50IGFzc29jbGVuID0gcmVxLT5hc3NvY2xlbjsKKwlzdHJ1Y3QgcGFnZSAqZHN0cDsKKwl1OCAqdmRzdDsKKwl1OCAqaXYgPSBQVFJfQUxJR04oKHU4ICopKHJjdHggKyAxKSArIGNyeXB0b19hZWFkX3JlcXNpemUoY3R4LT5jaGlsZCksCisJCQkgICBjcnlwdG9fYWVhZF9hbGlnbm1hc2soY3R4LT5jaGlsZCkgKyAxKTsKKworCW1lbWNweShpdiwgY3R4LT5ub25jZSwgNCk7CisJbWVtY3B5KGl2ICsgNCwgcmVxLT5pdiwgOCk7CisKKwkvKiBjb25zdHJ1Y3QgY2lwaGVyL3BsYWludGV4dCAqLworCWlmIChlbmMpCisJCW1lbXNldChyY3R4LT5hdXRoX3RhZywgMCwgYXV0aHNpemUpOworCWVsc2UKKwkJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KHJjdHgtPmF1dGhfdGFnLCBkc3QsCisJCQkJCSByZXEtPmNyeXB0bGVuIC0gYXV0aHNpemUsCisJCQkJCSBhdXRoc2l6ZSwgMCk7CisKKwlzZ19pbml0X29uZShjaXBoZXIsIHJjdHgtPmF1dGhfdGFnLCBhdXRoc2l6ZSk7CisKKwkvKiBjb25zdHJ1Y3QgdGhlIGFhZCAqLworCWRzdHAgPSBzZ19wYWdlKGRzdCk7CisJdmRzdCA9IFBhZ2VIaWdoTWVtKGRzdHApID8gTlVMTCA6IHBhZ2VfYWRkcmVzcyhkc3RwKSArIGRzdC0+b2Zmc2V0OworCisJc2dfaW5pdF90YWJsZShwYXlsb2FkLCAyKTsKKwlzZ19zZXRfYnVmKHBheWxvYWQsIHJlcS0+aXYsIDgpOworCWNyeXB0b19yZmM0NTQzX2NoYWluKHBheWxvYWQsIGRzdCwgdmRzdCA9PSByZXEtPml2ICsgOCk7CisJYXNzb2NsZW4gKz0gOCArIHJlcS0+Y3J5cHRsZW4gLSAoZW5jID8gMCA6IGF1dGhzaXplKTsKKworCXNnX2luaXRfdGFibGUoYXNzb2MsIDIpOworCXNnX3NldF9wYWdlKGFzc29jLCBzZ19wYWdlKHJlcS0+YXNzb2MpLCByZXEtPmFzc29jLT5sZW5ndGgsCisJCSAgICByZXEtPmFzc29jLT5vZmZzZXQpOworCWNyeXB0b19yZmM0NTQzX2NoYWluKGFzc29jLCBwYXlsb2FkLCAwKTsKKworCWFlYWRfcmVxdWVzdF9zZXRfdGZtKHN1YnJlcSwgY3R4LT5jaGlsZCk7CisJYWVhZF9yZXF1ZXN0X3NldF9jYWxsYmFjayhzdWJyZXEsIHJlcS0+YmFzZS5mbGFncywgcmVxLT5iYXNlLmNvbXBsZXRlLAorCQkJCSAgcmVxLT5iYXNlLmRhdGEpOworCWFlYWRfcmVxdWVzdF9zZXRfY3J5cHQoc3VicmVxLCBjaXBoZXIsIGNpcGhlciwgZW5jID8gMCA6IGF1dGhzaXplLCBpdik7CisJYWVhZF9yZXF1ZXN0X3NldF9hc3NvYyhzdWJyZXEsIGFzc29jLCBhc3NvY2xlbik7CisKKwlyZXR1cm4gc3VicmVxOworfQorCitzdGF0aWMgaW50IGNyeXB0b19yZmM0NTQzX2VuY3J5cHQoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOworCXN0cnVjdCBjcnlwdG9fcmZjNDU0M19yZXFfY3R4ICpyY3R4ID0gY3J5cHRvX3JmYzQ1NDNfcmVxY3R4KHJlcSk7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqc3VicmVxOworCWludCBlcnI7CisKKwlzdWJyZXEgPSBjcnlwdG9fcmZjNDU0M19jcnlwdChyZXEsIDEpOworCWVyciA9IGNyeXB0b19hZWFkX2VuY3J5cHQoc3VicmVxKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc2NhdHRlcndhbGtfbWFwX2FuZF9jb3B5KHJjdHgtPmF1dGhfdGFnLCByZXEtPmRzdCwgcmVxLT5jcnlwdGxlbiwKKwkJCQkgY3J5cHRvX2FlYWRfYXV0aHNpemUoYWVhZCksIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX3JmYzQ1NDNfZGVjcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCit7CisJcmVxID0gY3J5cHRvX3JmYzQ1NDNfY3J5cHQocmVxLCAwKTsKKworCXJldHVybiBjcnlwdG9fYWVhZF9kZWNyeXB0KHJlcSk7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX3JmYzQ1NDNfaW5pdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0ID0gKHZvaWQgKil0Zm0tPl9fY3J0X2FsZzsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWRfc3Bhd24gKnNwYXduID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKwlzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZDsKKwl1bnNpZ25lZCBsb25nIGFsaWduOworCisJYWVhZCA9IGNyeXB0b19zcGF3bl9hZWFkKHNwYXduKTsKKwlpZiAoSVNfRVJSKGFlYWQpKQorCQlyZXR1cm4gUFRSX0VSUihhZWFkKTsKKworCWN0eC0+Y2hpbGQgPSBhZWFkOworCisJYWxpZ24gPSBjcnlwdG9fYWVhZF9hbGlnbm1hc2soYWVhZCk7CisJYWxpZ24gJj0gfihjcnlwdG9fdGZtX2N0eF9hbGlnbm1lbnQoKSAtIDEpOworCXRmbS0+Y3J0X2FlYWQucmVxc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3J5cHRvX3JmYzQ1NDNfcmVxX2N0eCkgKworCQkJCUFMSUdOKGNyeXB0b19hZWFkX3JlcXNpemUoYWVhZCksCisJCQkJICAgICAgY3J5cHRvX3RmbV9jdHhfYWxpZ25tZW50KCkpICsKKwkJCQlhbGlnbiArIDE2OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0b19yZmM0NTQzX2V4aXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGNyeXB0b19yZmM0NTQzX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCWNyeXB0b19mcmVlX2FlYWQoY3R4LT5jaGlsZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpjcnlwdG9fcmZjNDU0M19hbGxvYyhzdHJ1Y3QgcnRhdHRyICoqdGIpCit7CisJc3RydWN0IGNyeXB0b19hdHRyX3R5cGUgKmFsZ3Q7CisJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdDsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWRfc3Bhd24gKnNwYXduOworCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CisJY29uc3QgY2hhciAqY2NtX25hbWU7CisJaW50IGVycjsKKworCWFsZ3QgPSBjcnlwdG9fZ2V0X2F0dHJfdHlwZSh0Yik7CisJZXJyID0gUFRSX0VSUihhbGd0KTsKKwlpZiAoSVNfRVJSKGFsZ3QpKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJaWYgKChhbGd0LT50eXBlIF4gQ1JZUFRPX0FMR19UWVBFX0FFQUQpICYgYWxndC0+bWFzaykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwljY21fbmFtZSA9IGNyeXB0b19hdHRyX2FsZ19uYW1lKHRiWzFdKTsKKwllcnIgPSBQVFJfRVJSKGNjbV9uYW1lKTsKKwlpZiAoSVNfRVJSKGNjbV9uYW1lKSkKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKworCWluc3QgPSBremFsbG9jKHNpemVvZigqaW5zdCkgKyBzaXplb2YoKnNwYXduKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnN0KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXNwYXduID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKwljcnlwdG9fc2V0X2FlYWRfc3Bhd24oc3Bhd24sIGluc3QpOworCWVyciA9IGNyeXB0b19ncmFiX2FlYWQoc3Bhd24sIGNjbV9uYW1lLCAwLAorCQkJICAgICAgIGNyeXB0b19yZXF1aXJlc19zeW5jKGFsZ3QtPnR5cGUsIGFsZ3QtPm1hc2spKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX2luc3Q7CisKKwlhbGcgPSBjcnlwdG9fYWVhZF9zcGF3bl9hbGcoc3Bhd24pOworCisJZXJyID0gLUVJTlZBTDsKKworCS8qIFdlIG9ubHkgc3VwcG9ydCAxNi1ieXRlIGJsb2Nrcy4gKi8KKwlpZiAoYWxnLT5jcmFfYWVhZC5pdnNpemUgIT0gMTYpCisJCWdvdG8gb3V0X2Ryb3BfYWxnOworCisJLyogTm90IGEgc3RyZWFtIGNpcGhlcj8gKi8KKwlpZiAoYWxnLT5jcmFfYmxvY2tzaXplICE9IDEpCisJCWdvdG8gb3V0X2Ryb3BfYWxnOworCisJZXJyID0gLUVOQU1FVE9PTE9ORzsKKwlpZiAoc25wcmludGYoaW5zdC0+YWxnLmNyYV9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FLAorCQkgICAgICJyZmM0NTQzKCVzKSIsIGFsZy0+Y3JhX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUgfHwKKwkgICAgc25wcmludGYoaW5zdC0+YWxnLmNyYV9kcml2ZXJfbmFtZSwgQ1JZUFRPX01BWF9BTEdfTkFNRSwKKwkJICAgICAicmZjNDU0MyglcykiLCBhbGctPmNyYV9kcml2ZXJfbmFtZSkgPj0KKwkgICAgQ1JZUFRPX01BWF9BTEdfTkFNRSkKKwkJZ290byBvdXRfZHJvcF9hbGc7CisKKwlpbnN0LT5hbGcuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19UWVBFX0FFQUQ7CisJaW5zdC0+YWxnLmNyYV9mbGFncyB8PSBhbGctPmNyYV9mbGFncyAmIENSWVBUT19BTEdfQVNZTkM7CisJaW5zdC0+YWxnLmNyYV9wcmlvcml0eSA9IGFsZy0+Y3JhX3ByaW9yaXR5OworCWluc3QtPmFsZy5jcmFfYmxvY2tzaXplID0gMTsKKwlpbnN0LT5hbGcuY3JhX2FsaWdubWFzayA9IGFsZy0+Y3JhX2FsaWdubWFzazsKKwlpbnN0LT5hbGcuY3JhX3R5cGUgPSAmY3J5cHRvX25pdmFlYWRfdHlwZTsKKworCWluc3QtPmFsZy5jcmFfYWVhZC5pdnNpemUgPSA4OworCWluc3QtPmFsZy5jcmFfYWVhZC5tYXhhdXRoc2l6ZSA9IDE2OworCisJaW5zdC0+YWxnLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBjcnlwdG9fcmZjNDU0M19jdHgpOworCisJaW5zdC0+YWxnLmNyYV9pbml0ID0gY3J5cHRvX3JmYzQ1NDNfaW5pdF90Zm07CisJaW5zdC0+YWxnLmNyYV9leGl0ID0gY3J5cHRvX3JmYzQ1NDNfZXhpdF90Zm07CisKKwlpbnN0LT5hbGcuY3JhX2FlYWQuc2V0a2V5ID0gY3J5cHRvX3JmYzQ1NDNfc2V0a2V5OworCWluc3QtPmFsZy5jcmFfYWVhZC5zZXRhdXRoc2l6ZSA9IGNyeXB0b19yZmM0NTQzX3NldGF1dGhzaXplOworCWluc3QtPmFsZy5jcmFfYWVhZC5lbmNyeXB0ID0gY3J5cHRvX3JmYzQ1NDNfZW5jcnlwdDsKKwlpbnN0LT5hbGcuY3JhX2FlYWQuZGVjcnlwdCA9IGNyeXB0b19yZmM0NTQzX2RlY3J5cHQ7CisKKwlpbnN0LT5hbGcuY3JhX2FlYWQuZ2VuaXYgPSAic2VxaXYiOworCitvdXQ6CisJcmV0dXJuIGluc3Q7CisKK291dF9kcm9wX2FsZzoKKwljcnlwdG9fZHJvcF9hZWFkKHNwYXduKTsKK291dF9mcmVlX2luc3Q6CisJa2ZyZWUoaW5zdCk7CisJaW5zdCA9IEVSUl9QVFIoZXJyKTsKKwlnb3RvIG91dDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvX3JmYzQ1NDNfZnJlZShzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0KQoreworCWNyeXB0b19kcm9wX3NwYXduKGNyeXB0b19pbnN0YW5jZV9jdHgoaW5zdCkpOworCWtmcmVlKGluc3QpOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b190ZW1wbGF0ZSBjcnlwdG9fcmZjNDU0M190bXBsID0geworCS5uYW1lID0gInJmYzQ1NDMiLAorCS5hbGxvYyA9IGNyeXB0b19yZmM0NTQzX2FsbG9jLAorCS5mcmVlID0gY3J5cHRvX3JmYzQ1NDNfZnJlZSwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBjcnlwdG9fZ2NtX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKQEAgLTEwNjcsOCArMTM0NiwxNCBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VuZG9fZ2NtOwogCisJZXJyID0gY3J5cHRvX3JlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdG9fcmZjNDU0M190bXBsKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF91bmRvX3JmYzQxMDY7CisKIAlyZXR1cm4gMDsKIAorb3V0X3VuZG9fcmZjNDEwNjoKKwljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX3JmYzQxMDZfdG1wbCk7CiBvdXRfdW5kb19nY206CiAJY3J5cHRvX3VucmVnaXN0ZXJfdGVtcGxhdGUoJmNyeXB0b19nY21fdG1wbCk7CiBvdXRfdW5kb19iYXNlOgpAQCAtMTA4MSw2ICsxMzY2LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjcnlwdG9fZ2NtX21vZHVsZV9leGl0KHZvaWQpCiB7CiAJa2ZyZWUoZ2NtX3plcm9lcyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfdGVtcGxhdGUoJmNyeXB0b19yZmM0NTQzX3RtcGwpOwogCWNyeXB0b191bnJlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdG9fcmZjNDEwNl90bXBsKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX2djbV90bXBsKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX2djbV9iYXNlX3RtcGwpOwpAQCAtMTA5NCwzICsxMzgwLDQgQEAKIE1PRFVMRV9BVVRIT1IoIk1pa2tvIEhlcnJhbmVuIDxtaDFAaWtpLmZpPiIpOwogTU9EVUxFX0FMSUFTKCJnY21fYmFzZSIpOwogTU9EVUxFX0FMSUFTKCJyZmM0MTA2Iik7CitNT0RVTEVfQUxJQVMoInJmYzQ1NDMiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9tZDUuYyBiL2NyeXB0by9tZDUuYwppbmRleCA4M2ViNTI5Li45ZmRhMjEzIDEwMDY0NAotLS0gYS9jcnlwdG8vbWQ1LmMKKysrIGIvY3J5cHRvL21kNS5jCkBAIC0xNiwxNyArMTYsMTMgQEAKICAqCiAgKi8KICNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgorI2luY2x1ZGUgPGNyeXB0by9tZDUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKLSNkZWZpbmUgTUQ1X0RJR0VTVF9TSVpFCQkxNgotI2RlZmluZSBNRDVfSE1BQ19CTE9DS19TSVpFCTY0Ci0jZGVmaW5lIE1ENV9CTE9DS19XT1JEUwkJMTYKLSNkZWZpbmUgTUQ1X0hBU0hfV09SRFMJCTQKLQogI2RlZmluZSBGMSh4LCB5LCB6KQkoeiBeICh4ICYgKHkgXiB6KSkpCiAjZGVmaW5lIEYyKHgsIHksIHopCUYxKHosIHgsIHkpCiAjZGVmaW5lIEYzKHgsIHksIHopCSh4IF4geSBeIHopCkBAIC0zNSwxMiArMzEsNiBAQAogI2RlZmluZSBNRDVTVEVQKGYsIHcsIHgsIHksIHosIGluLCBzKSBcCiAJKHcgKz0gZih4LCB5LCB6KSArIGluLCB3ID0gKHc8PHMgfCB3Pj4oMzItcykpICsgeCkKIAotc3RydWN0IG1kNV9jdHggewotCXUzMiBoYXNoW01ENV9IQVNIX1dPUkRTXTsKLQl1MzIgYmxvY2tbTUQ1X0JMT0NLX1dPUkRTXTsKLQl1NjQgYnl0ZV9jb3VudDsKLX07Ci0KIHN0YXRpYyB2b2lkIG1kNV90cmFuc2Zvcm0odTMyICpoYXNoLCB1MzIgY29uc3QgKmluKQogewogCXUzMiBhLCBiLCBjLCBkOwpAQCAtMTQxLDcgKzEzMSw3IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWQ1X3RyYW5zZm9ybV9oZWxwZXIoc3RydWN0IG1kNV9jdHggKmN0eCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZDVfdHJhbnNmb3JtX2hlbHBlcihzdHJ1Y3QgbWQ1X3N0YXRlICpjdHgpCiB7CiAJbGUzMl90b19jcHVfYXJyYXkoY3R4LT5ibG9jaywgc2l6ZW9mKGN0eC0+YmxvY2spIC8gc2l6ZW9mKHUzMikpOwogCW1kNV90cmFuc2Zvcm0oY3R4LT5oYXNoLCBjdHgtPmJsb2NrKTsKQEAgLTE0OSw3ICsxMzksNyBAQAogCiBzdGF0aWMgaW50IG1kNV9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewotCXN0cnVjdCBtZDVfY3R4ICptY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJc3RydWN0IG1kNV9zdGF0ZSAqbWN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCiAJbWN0eC0+aGFzaFswXSA9IDB4Njc0NTIzMDE7CiAJbWN0eC0+aGFzaFsxXSA9IDB4ZWZjZGFiODk7CkBAIC0xNjIsNyArMTUyLDcgQEAKIAogc3RhdGljIGludCBtZDVfdXBkYXRlKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKLQlzdHJ1Y3QgbWQ1X2N0eCAqbWN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCXN0cnVjdCBtZDVfc3RhdGUgKm1jdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAljb25zdCB1MzIgYXZhaWwgPSBzaXplb2YobWN0eC0+YmxvY2spIC0gKG1jdHgtPmJ5dGVfY291bnQgJiAweDNmKTsKIAogCW1jdHgtPmJ5dGVfY291bnQgKz0gbGVuOwpAQCAtMTk0LDcgKzE4NCw3IEBACiAKIHN0YXRpYyBpbnQgbWQ1X2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KQogewotCXN0cnVjdCBtZDVfY3R4ICptY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJc3RydWN0IG1kNV9zdGF0ZSAqbWN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCWNvbnN0IHVuc2lnbmVkIGludCBvZmZzZXQgPSBtY3R4LT5ieXRlX2NvdW50ICYgMHgzZjsKIAljaGFyICpwID0gKGNoYXIgKiltY3R4LT5ibG9jayArIG9mZnNldDsKIAlpbnQgcGFkZGluZyA9IDU2IC0gKG9mZnNldCArIDEpOwpAQCAtMjIwLDEyICsyMTAsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtZDVfZXhwb3J0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB2b2lkICpvdXQpCit7CisJc3RydWN0IG1kNV9zdGF0ZSAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisKKwltZW1jcHkob3V0LCBjdHgsIHNpemVvZigqY3R4KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWQ1X2ltcG9ydChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3Qgdm9pZCAqaW4pCit7CisJc3RydWN0IG1kNV9zdGF0ZSAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisKKwltZW1jcHkoY3R4LCBpbiwgc2l6ZW9mKCpjdHgpKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYWxnID0gewogCS5kaWdlc3RzaXplCT0JTUQ1X0RJR0VTVF9TSVpFLAogCS5pbml0CQk9CW1kNV9pbml0LAogCS51cGRhdGUJCT0JbWQ1X3VwZGF0ZSwKIAkuZmluYWwJCT0JbWQ1X2ZpbmFsLAotCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3QgbWQ1X2N0eCksCisJLmV4cG9ydAkJPQltZDVfZXhwb3J0LAorCS5pbXBvcnQJCT0JbWQ1X2ltcG9ydCwKKwkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IG1kNV9zdGF0ZSksCiAJLmJhc2UJCT0JewogCQkuY3JhX25hbWUJPQkibWQ1IiwKIAkJLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9TSEFTSCwKZGlmZiAtLWdpdCBhL2NyeXB0by9wY3J5cHQuYyBiL2NyeXB0by9wY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDIwMTI0Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3BjcnlwdC5jCkBAIC0wLDAgKzEsNDQ1IEBACisvKgorICogcGNyeXB0IC0gUGFyYWxsZWwgY3J5cHRvIHdyYXBwZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IHNlY3VuZXQgU2VjdXJpdHkgTmV0d29ya3MgQUcKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTdGVmZmVuIEtsYXNzZXJ0IDxzdGVmZmVuLmtsYXNzZXJ0QHNlY3VuZXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvYWVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8Y3J5cHRvL3BjcnlwdC5oPgorCitzdGF0aWMgc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGNyeXB0X2VuY19wYWRhdGE7CitzdGF0aWMgc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGNyeXB0X2RlY19wYWRhdGE7CitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmVuY3dxOworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkZWN3cTsKKworc3RydWN0IHBjcnlwdF9pbnN0YW5jZV9jdHggeworCXN0cnVjdCBjcnlwdG9fc3Bhd24gc3Bhd247CisJdW5zaWduZWQgaW50IHRmbV9jb3VudDsKK307CisKK3N0cnVjdCBwY3J5cHRfYWVhZF9jdHggeworCXN0cnVjdCBjcnlwdG9fYWVhZCAqY2hpbGQ7CisJdW5zaWduZWQgaW50IGNiX2NwdTsKK307CisKK3N0YXRpYyBpbnQgcGNyeXB0X2RvX3BhcmFsbGVsKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhLCB1bnNpZ25lZCBpbnQgKmNiX2NwdSwKKwkJCSAgICAgIHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KQoreworCXVuc2lnbmVkIGludCBjcHVfaW5kZXgsIGNwdSwgaTsKKworCWNwdSA9ICpjYl9jcHU7CisKKwlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9hY3RpdmVfbWFzaykpCisJCQlnb3RvIG91dDsKKworCWNwdV9pbmRleCA9IGNwdSAlIGNwdW1hc2tfd2VpZ2h0KGNwdV9hY3RpdmVfbWFzayk7CisKKwljcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdV9hY3RpdmVfbWFzayk7CisJZm9yIChpID0gMDsgaSA8IGNwdV9pbmRleDsgaSsrKQorCQljcHUgPSBjcHVtYXNrX25leHQoY3B1LCBjcHVfYWN0aXZlX21hc2spOworCisJKmNiX2NwdSA9IGNwdTsKKworb3V0OgorCXJldHVybiBwYWRhdGFfZG9fcGFyYWxsZWwocGluc3QsIHBhZGF0YSwgY3B1KTsKK30KKworc3RhdGljIGludCBwY3J5cHRfYWVhZF9zZXRrZXkoc3RydWN0IGNyeXB0b19hZWFkICpwYXJlbnQsCisJCQkgICAgICBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCXN0cnVjdCBwY3J5cHRfYWVhZF9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChwYXJlbnQpOworCisJcmV0dXJuIGNyeXB0b19hZWFkX3NldGtleShjdHgtPmNoaWxkLCBrZXksIGtleWxlbik7Cit9CisKK3N0YXRpYyBpbnQgcGNyeXB0X2FlYWRfc2V0YXV0aHNpemUoc3RydWN0IGNyeXB0b19hZWFkICpwYXJlbnQsCisJCQkJICAgdW5zaWduZWQgaW50IGF1dGhzaXplKQoreworCXN0cnVjdCBwY3J5cHRfYWVhZF9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChwYXJlbnQpOworCisJcmV0dXJuIGNyeXB0b19hZWFkX3NldGF1dGhzaXplKGN0eC0+Y2hpbGQsIGF1dGhzaXplKTsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfc2VyaWFsKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhKQoreworCXN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcHJlcSA9IHBjcnlwdF9wYWRhdGFfcmVxdWVzdChwYWRhdGEpOworCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSA9IHBjcnlwdF9yZXF1ZXN0X2N0eChwcmVxKTsKKworCWFlYWRfcmVxdWVzdF9jb21wbGV0ZShyZXEtPmJhc2UuZGF0YSwgcGFkYXRhLT5pbmZvKTsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfZ2l2X3NlcmlhbChzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSkKK3sKKwlzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnByZXEgPSBwY3J5cHRfcGFkYXRhX3JlcXVlc3QocGFkYXRhKTsKKwlzdHJ1Y3QgYWVhZF9naXZjcnlwdF9yZXF1ZXN0ICpyZXEgPSBwY3J5cHRfcmVxdWVzdF9jdHgocHJlcSk7CisKKwlhZWFkX3JlcXVlc3RfY29tcGxldGUocmVxLT5hcmVxLmJhc2UuZGF0YSwgcGFkYXRhLT5pbmZvKTsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfZG9uZShzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKmFyZXEsIGludCBlcnIpCit7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gYXJlcS0+ZGF0YTsKKwlzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnByZXEgPSBhZWFkX3JlcXVlc3RfY3R4KHJlcSk7CisJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEgPSBwY3J5cHRfcmVxdWVzdF9wYWRhdGEocHJlcSk7CisKKwlwYWRhdGEtPmluZm8gPSBlcnI7CisJcmVxLT5iYXNlLmZsYWdzICY9IH5DUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7CisKKwlwYWRhdGFfZG9fc2VyaWFsKHBhZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHBjcnlwdF9hZWFkX2VuYyhzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSkKK3sKKwlzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnByZXEgPSBwY3J5cHRfcGFkYXRhX3JlcXVlc3QocGFkYXRhKTsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEgPSBwY3J5cHRfcmVxdWVzdF9jdHgocHJlcSk7CisKKwlwYWRhdGEtPmluZm8gPSBjcnlwdG9fYWVhZF9lbmNyeXB0KHJlcSk7CisKKwlpZiAocGFkYXRhLT5pbmZvID09IC1FSU5QUk9HUkVTUykKKwkJcmV0dXJuOworCisJcGFkYXRhX2RvX3NlcmlhbChwYWRhdGEpOworfQorCitzdGF0aWMgaW50IHBjcnlwdF9hZWFkX2VuY3J5cHQoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxKQoreworCWludCBlcnI7CisJc3RydWN0IHBjcnlwdF9yZXF1ZXN0ICpwcmVxID0gYWVhZF9yZXF1ZXN0X2N0eChyZXEpOworCXN0cnVjdCBhZWFkX3JlcXVlc3QgKmNyZXEgPSBwY3J5cHRfcmVxdWVzdF9jdHgocHJlcSk7CisJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEgPSBwY3J5cHRfcmVxdWVzdF9wYWRhdGEocHJlcSk7CisJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gY3J5cHRvX2FlYWRfcmVxdGZtKHJlcSk7CisJc3RydWN0IHBjcnlwdF9hZWFkX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KGFlYWQpOworCXUzMiBmbGFncyA9IGFlYWRfcmVxdWVzdF9mbGFncyhyZXEpOworCisJbWVtc2V0KHBhZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwYWRhdGFfcHJpdikpOworCisJcGFkYXRhLT5wYXJhbGxlbCA9IHBjcnlwdF9hZWFkX2VuYzsKKwlwYWRhdGEtPnNlcmlhbCA9IHBjcnlwdF9hZWFkX3NlcmlhbDsKKworCWFlYWRfcmVxdWVzdF9zZXRfdGZtKGNyZXEsIGN0eC0+Y2hpbGQpOworCWFlYWRfcmVxdWVzdF9zZXRfY2FsbGJhY2soY3JlcSwgZmxhZ3MgJiB+Q1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQLAorCQkJCSAgcGNyeXB0X2FlYWRfZG9uZSwgcmVxKTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2NyeXB0KGNyZXEsIHJlcS0+c3JjLCByZXEtPmRzdCwKKwkJCSAgICAgICByZXEtPmNyeXB0bGVuLCByZXEtPml2KTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2Fzc29jKGNyZXEsIHJlcS0+YXNzb2MsIHJlcS0+YXNzb2NsZW4pOworCisJZXJyID0gcGNyeXB0X2RvX3BhcmFsbGVsKHBhZGF0YSwgJmN0eC0+Y2JfY3B1LCBwY3J5cHRfZW5jX3BhZGF0YSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllbHNlCisJCWVyciA9IGNyeXB0b19hZWFkX2VuY3J5cHQoY3JlcSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBwY3J5cHRfYWVhZF9kZWMoc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEpCit7CisJc3RydWN0IHBjcnlwdF9yZXF1ZXN0ICpwcmVxID0gcGNyeXB0X3BhZGF0YV9yZXF1ZXN0KHBhZGF0YSk7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gcGNyeXB0X3JlcXVlc3RfY3R4KHByZXEpOworCisJcGFkYXRhLT5pbmZvID0gY3J5cHRvX2FlYWRfZGVjcnlwdChyZXEpOworCisJaWYgKHBhZGF0YS0+aW5mbyA9PSAtRUlOUFJPR1JFU1MpCisJCXJldHVybjsKKworCXBhZGF0YV9kb19zZXJpYWwocGFkYXRhKTsKK30KKworc3RhdGljIGludCBwY3J5cHRfYWVhZF9kZWNyeXB0KHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcHJlcSA9IGFlYWRfcmVxdWVzdF9jdHgocmVxKTsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpjcmVxID0gcGNyeXB0X3JlcXVlc3RfY3R4KHByZXEpOworCXN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhID0gcGNyeXB0X3JlcXVlc3RfcGFkYXRhKHByZXEpOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOworCXN0cnVjdCBwY3J5cHRfYWVhZF9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChhZWFkKTsKKwl1MzIgZmxhZ3MgPSBhZWFkX3JlcXVlc3RfZmxhZ3MocmVxKTsKKworCW1lbXNldChwYWRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgcGFkYXRhX3ByaXYpKTsKKworCXBhZGF0YS0+cGFyYWxsZWwgPSBwY3J5cHRfYWVhZF9kZWM7CisJcGFkYXRhLT5zZXJpYWwgPSBwY3J5cHRfYWVhZF9zZXJpYWw7CisKKwlhZWFkX3JlcXVlc3Rfc2V0X3RmbShjcmVxLCBjdHgtPmNoaWxkKTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKGNyZXEsIGZsYWdzICYgfkNSWVBUT19URk1fUkVRX01BWV9TTEVFUCwKKwkJCQkgIHBjcnlwdF9hZWFkX2RvbmUsIHJlcSk7CisJYWVhZF9yZXF1ZXN0X3NldF9jcnlwdChjcmVxLCByZXEtPnNyYywgcmVxLT5kc3QsCisJCQkgICAgICAgcmVxLT5jcnlwdGxlbiwgcmVxLT5pdik7CisJYWVhZF9yZXF1ZXN0X3NldF9hc3NvYyhjcmVxLCByZXEtPmFzc29jLCByZXEtPmFzc29jbGVuKTsKKworCWVyciA9IHBjcnlwdF9kb19wYXJhbGxlbChwYWRhdGEsICZjdHgtPmNiX2NwdSwgcGNyeXB0X2RlY19wYWRhdGEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZWxzZQorCQllcnIgPSBjcnlwdG9fYWVhZF9kZWNyeXB0KGNyZXEpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfZ2l2ZW5jKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhKQoreworCXN0cnVjdCBwY3J5cHRfcmVxdWVzdCAqcHJlcSA9IHBjcnlwdF9wYWRhdGFfcmVxdWVzdChwYWRhdGEpOworCXN0cnVjdCBhZWFkX2dpdmNyeXB0X3JlcXVlc3QgKnJlcSA9IHBjcnlwdF9yZXF1ZXN0X2N0eChwcmVxKTsKKworCXBhZGF0YS0+aW5mbyA9IGNyeXB0b19hZWFkX2dpdmVuY3J5cHQocmVxKTsKKworCWlmIChwYWRhdGEtPmluZm8gPT0gLUVJTlBST0dSRVNTKQorCQlyZXR1cm47CisKKwlwYWRhdGFfZG9fc2VyaWFsKHBhZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgcGNyeXB0X2FlYWRfZ2l2ZW5jcnlwdChzdHJ1Y3QgYWVhZF9naXZjcnlwdF9yZXF1ZXN0ICpyZXEpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICphcmVxID0gJnJlcS0+YXJlcTsKKwlzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnByZXEgPSBhZWFkX3JlcXVlc3RfY3R4KGFyZXEpOworCXN0cnVjdCBhZWFkX2dpdmNyeXB0X3JlcXVlc3QgKmNyZXEgPSBwY3J5cHRfcmVxdWVzdF9jdHgocHJlcSk7CisJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEgPSBwY3J5cHRfcmVxdWVzdF9wYWRhdGEocHJlcSk7CisJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gYWVhZF9naXZjcnlwdF9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgcGNyeXB0X2FlYWRfY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgoYWVhZCk7CisJdTMyIGZsYWdzID0gYWVhZF9yZXF1ZXN0X2ZsYWdzKGFyZXEpOworCisJbWVtc2V0KHBhZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwYWRhdGFfcHJpdikpOworCisJcGFkYXRhLT5wYXJhbGxlbCA9IHBjcnlwdF9hZWFkX2dpdmVuYzsKKwlwYWRhdGEtPnNlcmlhbCA9IHBjcnlwdF9hZWFkX2dpdl9zZXJpYWw7CisKKwlhZWFkX2dpdmNyeXB0X3NldF90Zm0oY3JlcSwgY3R4LT5jaGlsZCk7CisJYWVhZF9naXZjcnlwdF9zZXRfY2FsbGJhY2soY3JlcSwgZmxhZ3MgJiB+Q1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQLAorCQkJCSAgIHBjcnlwdF9hZWFkX2RvbmUsIGFyZXEpOworCWFlYWRfZ2l2Y3J5cHRfc2V0X2NyeXB0KGNyZXEsIGFyZXEtPnNyYywgYXJlcS0+ZHN0LAorCQkJCWFyZXEtPmNyeXB0bGVuLCBhcmVxLT5pdik7CisJYWVhZF9naXZjcnlwdF9zZXRfYXNzb2MoY3JlcSwgYXJlcS0+YXNzb2MsIGFyZXEtPmFzc29jbGVuKTsKKwlhZWFkX2dpdmNyeXB0X3NldF9naXYoY3JlcSwgcmVxLT5naXYsIHJlcS0+c2VxKTsKKworCWVyciA9IHBjcnlwdF9kb19wYXJhbGxlbChwYWRhdGEsICZjdHgtPmNiX2NwdSwgcGNyeXB0X2VuY19wYWRhdGEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZWxzZQorCQllcnIgPSBjcnlwdG9fYWVhZF9naXZlbmNyeXB0KGNyZXEpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwY3J5cHRfYWVhZF9pbml0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCWludCBjcHUsIGNwdV9pbmRleDsKKwlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0ID0gY3J5cHRvX3RmbV9hbGdfaW5zdGFuY2UodGZtKTsKKwlzdHJ1Y3QgcGNyeXB0X2luc3RhbmNlX2N0eCAqaWN0eCA9IGNyeXB0b19pbnN0YW5jZV9jdHgoaW5zdCk7CisJc3RydWN0IHBjcnlwdF9hZWFkX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmNpcGhlcjsKKworCWljdHgtPnRmbV9jb3VudCsrOworCisJY3B1X2luZGV4ID0gaWN0eC0+dGZtX2NvdW50ICUgY3B1bWFza193ZWlnaHQoY3B1X2FjdGl2ZV9tYXNrKTsKKworCWN0eC0+Y2JfY3B1ID0gY3B1bWFza19maXJzdChjcHVfYWN0aXZlX21hc2spOworCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2luZGV4OyBjcHUrKykKKwkJY3R4LT5jYl9jcHUgPSBjcHVtYXNrX25leHQoY3R4LT5jYl9jcHUsIGNwdV9hY3RpdmVfbWFzayk7CisKKwljaXBoZXIgPSBjcnlwdG9fc3Bhd25fYWVhZChjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpKTsKKworCWlmIChJU19FUlIoY2lwaGVyKSkKKwkJcmV0dXJuIFBUUl9FUlIoY2lwaGVyKTsKKworCWN0eC0+Y2hpbGQgPSBjaXBoZXI7CisJdGZtLT5jcnRfYWVhZC5yZXFzaXplID0gc2l6ZW9mKHN0cnVjdCBwY3J5cHRfcmVxdWVzdCkKKwkJKyBzaXplb2Yoc3RydWN0IGFlYWRfZ2l2Y3J5cHRfcmVxdWVzdCkKKwkJKyBjcnlwdG9fYWVhZF9yZXFzaXplKGNpcGhlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2FlYWRfZXhpdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgcGNyeXB0X2FlYWRfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJY3J5cHRvX2ZyZWVfYWVhZChjdHgtPmNoaWxkKTsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKnBjcnlwdF9hbGxvY19pbnN0YW5jZShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQoreworCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CisJc3RydWN0IHBjcnlwdF9pbnN0YW5jZV9jdHggKmN0eDsKKwlpbnQgZXJyOworCisJaW5zdCA9IGt6YWxsb2Moc2l6ZW9mKCppbnN0KSArIHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnN0KSB7CisJCWluc3QgPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSAtRU5BTUVUT09MT05HOworCWlmIChzbnByaW50ZihpbnN0LT5hbGcuY3JhX2RyaXZlcl9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FLAorCQkgICAgICJwY3J5cHQoJXMpIiwgYWxnLT5jcmFfZHJpdmVyX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUpCisJCWdvdG8gb3V0X2ZyZWVfaW5zdDsKKworCW1lbWNweShpbnN0LT5hbGcuY3JhX25hbWUsIGFsZy0+Y3JhX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUpOworCisJY3R4ID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKwllcnIgPSBjcnlwdG9faW5pdF9zcGF3bigmY3R4LT5zcGF3biwgYWxnLCBpbnN0LAorCQkJCUNSWVBUT19BTEdfVFlQRV9NQVNLKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX2luc3Q7CisKKwlpbnN0LT5hbGcuY3JhX3ByaW9yaXR5ID0gYWxnLT5jcmFfcHJpb3JpdHkgKyAxMDA7CisJaW5zdC0+YWxnLmNyYV9ibG9ja3NpemUgPSBhbGctPmNyYV9ibG9ja3NpemU7CisJaW5zdC0+YWxnLmNyYV9hbGlnbm1hc2sgPSBhbGctPmNyYV9hbGlnbm1hc2s7CisKK291dDoKKwlyZXR1cm4gaW5zdDsKKworb3V0X2ZyZWVfaW5zdDoKKwlrZnJlZShpbnN0KTsKKwlpbnN0ID0gRVJSX1BUUihlcnIpOworCWdvdG8gb3V0OworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqcGNyeXB0X2FsbG9jX2FlYWQoc3RydWN0IHJ0YXR0ciAqKnRiKQoreworCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKKwlzdHJ1Y3QgY3J5cHRvX2F0dHJfdHlwZSAqYWxndDsKKworCWFsZ3QgPSBjcnlwdG9fZ2V0X2F0dHJfdHlwZSh0Yik7CisKKwlhbGcgPSBjcnlwdG9fZ2V0X2F0dHJfYWxnKHRiLCBhbGd0LT50eXBlLAorCQkJCSAgKGFsZ3QtPm1hc2sgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykpOworCWlmIChJU19FUlIoYWxnKSkKKwkJcmV0dXJuIEVSUl9DQVNUKGFsZyk7CisKKwlpbnN0ID0gcGNyeXB0X2FsbG9jX2luc3RhbmNlKGFsZyk7CisJaWYgKElTX0VSUihpbnN0KSkKKwkJZ290byBvdXRfcHV0X2FsZzsKKworCWluc3QtPmFsZy5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX1RZUEVfQUVBRCB8IENSWVBUT19BTEdfQVNZTkM7CisJaW5zdC0+YWxnLmNyYV90eXBlID0gJmNyeXB0b19hZWFkX3R5cGU7CisKKwlpbnN0LT5hbGcuY3JhX2FlYWQuaXZzaXplID0gYWxnLT5jcmFfYWVhZC5pdnNpemU7CisJaW5zdC0+YWxnLmNyYV9hZWFkLmdlbml2ID0gYWxnLT5jcmFfYWVhZC5nZW5pdjsKKwlpbnN0LT5hbGcuY3JhX2FlYWQubWF4YXV0aHNpemUgPSBhbGctPmNyYV9hZWFkLm1heGF1dGhzaXplOworCisJaW5zdC0+YWxnLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBwY3J5cHRfYWVhZF9jdHgpOworCisJaW5zdC0+YWxnLmNyYV9pbml0ID0gcGNyeXB0X2FlYWRfaW5pdF90Zm07CisJaW5zdC0+YWxnLmNyYV9leGl0ID0gcGNyeXB0X2FlYWRfZXhpdF90Zm07CisKKwlpbnN0LT5hbGcuY3JhX2FlYWQuc2V0a2V5ID0gcGNyeXB0X2FlYWRfc2V0a2V5OworCWluc3QtPmFsZy5jcmFfYWVhZC5zZXRhdXRoc2l6ZSA9IHBjcnlwdF9hZWFkX3NldGF1dGhzaXplOworCWluc3QtPmFsZy5jcmFfYWVhZC5lbmNyeXB0ID0gcGNyeXB0X2FlYWRfZW5jcnlwdDsKKwlpbnN0LT5hbGcuY3JhX2FlYWQuZGVjcnlwdCA9IHBjcnlwdF9hZWFkX2RlY3J5cHQ7CisJaW5zdC0+YWxnLmNyYV9hZWFkLmdpdmVuY3J5cHQgPSBwY3J5cHRfYWVhZF9naXZlbmNyeXB0OworCitvdXRfcHV0X2FsZzoKKwljcnlwdG9fbW9kX3B1dChhbGcpOworCXJldHVybiBpbnN0OworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqcGNyeXB0X2FsbG9jKHN0cnVjdCBydGF0dHIgKip0YikKK3sKKwlzdHJ1Y3QgY3J5cHRvX2F0dHJfdHlwZSAqYWxndDsKKworCWFsZ3QgPSBjcnlwdG9fZ2V0X2F0dHJfdHlwZSh0Yik7CisJaWYgKElTX0VSUihhbGd0KSkKKwkJcmV0dXJuIEVSUl9DQVNUKGFsZ3QpOworCisJc3dpdGNoIChhbGd0LT50eXBlICYgYWxndC0+bWFzayAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSB7CisJY2FzZSBDUllQVE9fQUxHX1RZUEVfQUVBRDoKKwkJcmV0dXJuIHBjcnlwdF9hbGxvY19hZWFkKHRiKTsKKwl9CisKKwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKK30KKworc3RhdGljIHZvaWQgcGNyeXB0X2ZyZWUoc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCkKK3sKKwlzdHJ1Y3QgcGNyeXB0X2luc3RhbmNlX2N0eCAqY3R4ID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKworCWNyeXB0b19kcm9wX3NwYXduKCZjdHgtPnNwYXduKTsKKwlrZnJlZShpbnN0KTsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgcGNyeXB0X3RtcGwgPSB7CisJLm5hbWUgPSAicGNyeXB0IiwKKwkuYWxsb2MgPSBwY3J5cHRfYWxsb2MsCisJLmZyZWUgPSBwY3J5cHRfZnJlZSwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwY3J5cHRfaW5pdCh2b2lkKQoreworCWVuY3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgicGVuY3J5cHQiKTsKKwlpZiAoIWVuY3dxKQorCQlnb3RvIGVycjsKKworCWRlY3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgicGRlY3J5cHQiKTsKKwlpZiAoIWRlY3dxKQorCQlnb3RvIGVycl9kZXN0cm95X2VuY3dxOworCisKKwlwY3J5cHRfZW5jX3BhZGF0YSA9IHBhZGF0YV9hbGxvYyhjcHVfcG9zc2libGVfbWFzaywgZW5jd3EpOworCWlmICghcGNyeXB0X2VuY19wYWRhdGEpCisJCWdvdG8gZXJyX2Rlc3Ryb3lfZGVjd3E7CisKKwlwY3J5cHRfZGVjX3BhZGF0YSA9IHBhZGF0YV9hbGxvYyhjcHVfcG9zc2libGVfbWFzaywgZGVjd3EpOworCWlmICghcGNyeXB0X2RlY19wYWRhdGEpCisJCWdvdG8gZXJyX2ZyZWVfcGFkYXRhOworCisJcGFkYXRhX3N0YXJ0KHBjcnlwdF9lbmNfcGFkYXRhKTsKKwlwYWRhdGFfc3RhcnQocGNyeXB0X2RlY19wYWRhdGEpOworCisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl90ZW1wbGF0ZSgmcGNyeXB0X3RtcGwpOworCitlcnJfZnJlZV9wYWRhdGE6CisJcGFkYXRhX2ZyZWUocGNyeXB0X2VuY19wYWRhdGEpOworCitlcnJfZGVzdHJveV9kZWN3cToKKwlkZXN0cm95X3dvcmtxdWV1ZShkZWN3cSk7CisKK2Vycl9kZXN0cm95X2VuY3dxOgorCWRlc3Ryb3lfd29ya3F1ZXVlKGVuY3dxKTsKKworZXJyOgorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcGNyeXB0X2V4aXQodm9pZCkKK3sKKwlwYWRhdGFfc3RvcChwY3J5cHRfZW5jX3BhZGF0YSk7CisJcGFkYXRhX3N0b3AocGNyeXB0X2RlY19wYWRhdGEpOworCisJZGVzdHJveV93b3JrcXVldWUoZW5jd3EpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGRlY3dxKTsKKworCXBhZGF0YV9mcmVlKHBjcnlwdF9lbmNfcGFkYXRhKTsKKwlwYWRhdGFfZnJlZShwY3J5cHRfZGVjX3BhZGF0YSk7CisKKwljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmcGNyeXB0X3RtcGwpOworfQorCittb2R1bGVfaW5pdChwY3J5cHRfaW5pdCk7Cittb2R1bGVfZXhpdChwY3J5cHRfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlN0ZWZmZW4gS2xhc3NlcnQgPHN0ZWZmZW4ua2xhc3NlcnRAc2VjdW5ldC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBhcmFsbGVsIGNyeXB0byB3cmFwcGVyIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vdGVzdG1nci5jIGIvY3J5cHRvL3Rlc3RtZ3IuYwppbmRleCA3NjIwYmZjLi5jNDk0ZDc2IDEwMDY0NAotLS0gYS9jcnlwdG8vdGVzdG1nci5jCisrKyBiL2NyeXB0by90ZXN0bWdyLmMKQEAgLTE0NzcsOSArMTQ3Nyw1NCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgYWxnX3Rlc3RfbnVsbChjb25zdCBzdHJ1Y3QgYWxnX3Rlc3RfZGVzYyAqZGVzYywKKwkJCSAgICAgY29uc3QgY2hhciAqZHJpdmVyLCB1MzIgdHlwZSwgdTMyIG1hc2spCit7CisJcmV0dXJuIDA7Cit9CisKIC8qIFBsZWFzZSBrZWVwIHRoaXMgbGlzdCBzb3J0ZWQgYnkgYWxnb3JpdGhtIG5hbWUuICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFsZ190ZXN0X2Rlc2MgYWxnX3Rlc3RfZGVzY3NbXSA9IHsKIAl7CisJCS5hbGcgPSAiX19kcml2ZXItY2JjLWFlcy1hZXNuaSIsCisJCS50ZXN0ID0gYWxnX3Rlc3RfbnVsbCwKKwkJLnN1aXRlID0geworCQkJLmNpcGhlciA9IHsKKwkJCQkuZW5jID0geworCQkJCQkudmVjcyA9IE5VTEwsCisJCQkJCS5jb3VudCA9IDAKKwkJCQl9LAorCQkJCS5kZWMgPSB7CisJCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkJLmNvdW50ID0gMAorCQkJCX0KKwkJCX0KKwkJfQorCX0sIHsKKwkJLmFsZyA9ICJfX2RyaXZlci1lY2ItYWVzLWFlc25pIiwKKwkJLnRlc3QgPSBhbGdfdGVzdF9udWxsLAorCQkuc3VpdGUgPSB7CisJCQkuY2lwaGVyID0geworCQkJCS5lbmMgPSB7CisJCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkJLmNvdW50ID0gMAorCQkJCX0sCisJCQkJLmRlYyA9IHsKKwkJCQkJLnZlY3MgPSBOVUxMLAorCQkJCQkuY291bnQgPSAwCisJCQkJfQorCQkJfQorCQl9CisJfSwgeworCQkuYWxnID0gIl9fZ2hhc2gtcGNsbXVscWRxbmkiLAorCQkudGVzdCA9IGFsZ190ZXN0X251bGwsCisJCS5zdWl0ZSA9IHsKKwkJCS5oYXNoID0geworCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkuY291bnQgPSAwCisJCQl9CisJCX0KKwl9LCB7CiAJCS5hbGcgPSAiYW5zaV9jcHJuZyIsCiAJCS50ZXN0ID0gYWxnX3Rlc3RfY3BybmcsCiAJCS5maXBzX2FsbG93ZWQgPSAxLApAQCAtMTYyMyw2ICsxNjY4LDMwIEBACiAJCQl9CiAJCX0KIAl9LCB7CisJCS5hbGcgPSAiY3J5cHRkKF9fZHJpdmVyLWVjYi1hZXMtYWVzbmkpIiwKKwkJLnRlc3QgPSBhbGdfdGVzdF9udWxsLAorCQkuc3VpdGUgPSB7CisJCQkuY2lwaGVyID0geworCQkJCS5lbmMgPSB7CisJCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkJLmNvdW50ID0gMAorCQkJCX0sCisJCQkJLmRlYyA9IHsKKwkJCQkJLnZlY3MgPSBOVUxMLAorCQkJCQkuY291bnQgPSAwCisJCQkJfQorCQkJfQorCQl9CisJfSwgeworCQkuYWxnID0gImNyeXB0ZChfX2doYXNoLXBjbG11bHFkcW5pKSIsCisJCS50ZXN0ID0gYWxnX3Rlc3RfbnVsbCwKKwkJLnN1aXRlID0geworCQkJLmhhc2ggPSB7CisJCQkJLnZlY3MgPSBOVUxMLAorCQkJCS5jb3VudCA9IDAKKwkJCX0KKwkJfQorCX0sIHsKIAkJLmFsZyA9ICJjdHIoYWVzKSIsCiAJCS50ZXN0ID0gYWxnX3Rlc3Rfc2tjaXBoZXIsCiAJCS5maXBzX2FsbG93ZWQgPSAxLApAQCAtMTY2OSw2ICsxNzM4LDIxIEBACiAJCQl9CiAJCX0KIAl9LCB7CisJCS5hbGcgPSAiZWNiKF9fYWVzLWFlc25pKSIsCisJCS50ZXN0ID0gYWxnX3Rlc3RfbnVsbCwKKwkJLnN1aXRlID0geworCQkJLmNpcGhlciA9IHsKKwkJCQkuZW5jID0geworCQkJCQkudmVjcyA9IE5VTEwsCisJCQkJCS5jb3VudCA9IDAKKwkJCQl9LAorCQkJCS5kZWMgPSB7CisJCQkJCS52ZWNzID0gTlVMTCwKKwkJCQkJLmNvdW50ID0gMAorCQkJCX0KKwkJCX0KKwkJfQorCX0sIHsKIAkJLmFsZyA9ICJlY2IoYWVzKSIsCiAJCS50ZXN0ID0gYWxnX3Rlc3Rfc2tjaXBoZXIsCiAJCS5maXBzX2FsbG93ZWQgPSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2V2ZW50cy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2V2ZW50cy5oCmluZGV4IDBiYmExNDguLjRjZWQ1NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNldmVudHMuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZXZlbnRzLmgKQEAgLTc2LDEyICs3Niw5IEBACiAgKiBldmdwZSAtIEdQRSBoYW5kbGluZyBhbmQgZGlzcGF0Y2gKICAqLwogYWNwaV9zdGF0dXMKLWFjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3Moc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvLAotCQkJCXU4IHR5cGUpOworYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8pOwogCi1hY3BpX3N0YXR1cwotYWNwaV9ldl9lbmFibGVfZ3BlKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbywKLQkJICAgdTggd3JpdGVfdG9faGFyZHdhcmUpOworYWNwaV9zdGF0dXMgYWNwaV9ldl9lbmFibGVfZ3BlKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbyk7CiAKIGFjcGlfc3RhdHVzIGFjcGlfZXZfZGlzYWJsZV9ncGUoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvKTsKIApAQCAtMTIyLDkgKzExOSw2IEBACiB1MzIgYWNwaV9ldl9ncGVfZGV0ZWN0KHN0cnVjdCBhY3BpX2dwZV94cnVwdF9pbmZvICpncGVfeHJ1cHRfbGlzdCk7CiAKIGFjcGlfc3RhdHVzCi1hY3BpX2V2X3NldF9ncGVfdHlwZShzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8sIHU4IHR5cGUpOwotCi1hY3BpX3N0YXR1cwogYWNwaV9ldl9jaGVja19mb3Jfd2FrZV9vbmx5X2dwZShzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8pOwogCiBhY3BpX3N0YXR1cyBhY3BpX2V2X2dwZV9pbml0aWFsaXplKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaAppbmRleCA4MWU2NGY0Li4xM2NiODBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaApAQCAtNDI2LDYgKzQyNiw4IEBACiAJc3RydWN0IGFjcGlfZ3BlX3JlZ2lzdGVyX2luZm8gKnJlZ2lzdGVyX2luZm87CS8qIEJhY2twb2ludGVyIHRvIHJlZ2lzdGVyIGluZm8gKi8KIAl1OCBmbGFnczsJCS8qIE1pc2MgaW5mbyBhYm91dCB0aGlzIEdQRSAqLwogCXU4IGdwZV9udW1iZXI7CQkvKiBUaGlzIEdQRSAqLworCXU4IHJ1bnRpbWVfY291bnQ7CisJdTggd2FrZXVwX2NvdW50OwogfTsKIAogLyogSW5mb3JtYXRpb24gYWJvdXQgYSBHUEUgcmVnaXN0ZXIgcGFpciwgb25lIHBlciBlYWNoIHN0YXR1cy9lbmFibGUgcGFpciBpbiBhbiBhcnJheSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY29iamVjdC5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY29iamVjdC5oCmluZGV4IDY0MDYyYjEuLjA3ZjZlMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmgKQEAgLTI4Nyw4ICsyODcsMTAgQEAKIAogc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyIHsKIAlBQ1BJX09CSkVDVF9DT01NT05fSEVBREVSIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOwkvKiBQYXJlbnQgZGV2aWNlICovCisJdTMyIGhhbmRsZXJfdHlwZTsKIAlhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXI7CiAJdm9pZCAqY29udGV4dDsKKwlzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKm5leHQ7CiB9OwogCiBzdHJ1Y3QgYWNwaV9vYmplY3RfYWRkcl9oYW5kbGVyIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYwppbmRleCBhZmFjZjQ0Li4wYjQ1MzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jCkBAIC01NCw1NCArNTQsOSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX2V2X3NldF9ncGVfdHlwZQotICoKLSAqIFBBUkFNRVRFUlM6ICBncGVfZXZlbnRfaW5mbyAgICAgICAgICAtIEdQRSB0byBzZXQKLSAqICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgICAgICAgICAtIE5ldyB0eXBlCi0gKgotICogUkVUVVJOOiAgICAgIFN0YXR1cwotICoKLSAqIERFU0NSSVBUSU9OOiBTZXRzIHRoZSBuZXcgdHlwZSBmb3IgdGhlIEdQRSAod2FrZSwgcnVuLCBvciB3YWtlL3J1bikKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1hY3BpX3N0YXR1cwotYWNwaV9ldl9zZXRfZ3BlX3R5cGUoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvLCB1OCB0eXBlKQotewotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQotCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfc2V0X2dwZV90eXBlKTsKLQotCS8qIFZhbGlkYXRlIHR5cGUgYW5kIHVwZGF0ZSByZWdpc3RlciBlbmFibGUgbWFza3MgKi8KLQotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgQUNQSV9HUEVfVFlQRV9XQUtFOgotCWNhc2UgQUNQSV9HUEVfVFlQRV9SVU5USU1FOgotCWNhc2UgQUNQSV9HUEVfVFlQRV9XQUtFX1JVTjoKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7Ci0JfQotCi0JLyogRGlzYWJsZSB0aGUgR1BFIGlmIGN1cnJlbnRseSBlbmFibGVkICovCi0KLQlzdGF0dXMgPSBhY3BpX2V2X2Rpc2FibGVfZ3BlKGdwZV9ldmVudF9pbmZvKTsKLQotCS8qIENsZWFyIHRoZSB0eXBlIGJpdHMgYW5kIGluc2VydCB0aGUgbmV3IFR5cGUgKi8KLQotCWdwZV9ldmVudF9pbmZvLT5mbGFncyAmPSB+QUNQSV9HUEVfVFlQRV9NQVNLOwotCWdwZV9ldmVudF9pbmZvLT5mbGFncyB8PSB0eXBlOwotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzCiAgKgogICogUEFSQU1FVEVSUzogIGdwZV9ldmVudF9pbmZvICAgICAgICAgIC0gR1BFIHRvIHVwZGF0ZQotICogICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICAgIC0gV2hhdCB0byBkbzogQUNQSV9HUEVfRElTQUJMRSBvcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSV9HUEVfRU5BQkxFCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKQEAgLTExMCw4ICs2NSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBhY3BpX3N0YXR1cwotYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8sCi0JCQkJdTggdHlwZSkKK2FjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3Moc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvKQogewogCXN0cnVjdCBhY3BpX2dwZV9yZWdpc3Rlcl9pbmZvICpncGVfcmVnaXN0ZXJfaW5mbzsKIAl1OCByZWdpc3Rlcl9iaXQ7CkBAIC0xMjcsMzcgKzgxLDE0IEBACiAJICAgICgxIDw8CiAJICAgICAoZ3BlX2V2ZW50X2luZm8tPmdwZV9udW1iZXIgLSBncGVfcmVnaXN0ZXJfaW5mby0+YmFzZV9ncGVfbnVtYmVyKSk7CiAKLQkvKiAxKSBEaXNhYmxlIGNhc2UuIFNpbXBseSBjbGVhciBhbGwgZW5hYmxlIGJpdHMgKi8KKwlBQ1BJX0NMRUFSX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl93YWtlLCByZWdpc3Rlcl9iaXQpOworCUFDUElfQ0xFQVJfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3J1biwgcmVnaXN0ZXJfYml0KTsKIAotCWlmICh0eXBlID09IEFDUElfR1BFX0RJU0FCTEUpIHsKLQkJQUNQSV9DTEVBUl9CSVQoZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9mb3Jfd2FrZSwKLQkJCSAgICAgICByZWdpc3Rlcl9iaXQpOwotCQlBQ1BJX0NMRUFSX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl9ydW4sIHJlZ2lzdGVyX2JpdCk7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7Ci0JfQotCi0JLyogMikgRW5hYmxlIGNhc2UuIFNldC9DbGVhciB0aGUgYXBwcm9wcmlhdGUgZW5hYmxlIGJpdHMgKi8KLQotCXN3aXRjaCAoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfVFlQRV9NQVNLKSB7Ci0JY2FzZSBBQ1BJX0dQRV9UWVBFX1dBS0U6Ci0JCUFDUElfU0VUX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl93YWtlLCByZWdpc3Rlcl9iaXQpOwotCQlBQ1BJX0NMRUFSX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl9ydW4sIHJlZ2lzdGVyX2JpdCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBBQ1BJX0dQRV9UWVBFX1JVTlRJTUU6Ci0JCUFDUElfQ0xFQVJfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3dha2UsCi0JCQkgICAgICAgcmVnaXN0ZXJfYml0KTsKKwlpZiAoZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQpCiAJCUFDUElfU0VUX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl9ydW4sIHJlZ2lzdGVyX2JpdCk7Ci0JCWJyZWFrOwogCi0JY2FzZSBBQ1BJX0dQRV9UWVBFX1dBS0VfUlVOOgorCWlmIChncGVfZXZlbnRfaW5mby0+d2FrZXVwX2NvdW50KQogCQlBQ1BJX1NFVF9CSVQoZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9mb3Jfd2FrZSwgcmVnaXN0ZXJfYml0KTsKLQkJQUNQSV9TRVRfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3J1biwgcmVnaXN0ZXJfYml0KTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7Ci0JfQogCiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KQEAgLTE2Nyw4ICs5OCw2IEBACiAgKiBGVU5DVElPTjogICAgYWNwaV9ldl9lbmFibGVfZ3BlCiAgKgogICogUEFSQU1FVEVSUzogIGdwZV9ldmVudF9pbmZvICAgICAgICAgIC0gR1BFIHRvIGVuYWJsZQotICogICAgICAgICAgICAgIHdyaXRlX3RvX2hhcmR3YXJlICAgICAgIC0gRW5hYmxlIG5vdywgb3IganVzdCBtYXJrIGRhdGEgc3RydWN0cwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdBS0UgR1BFcyBzaG91bGQgYmUgZGVmZXJyZWQpCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKQEAgLTE3Niw5ICsxMDUsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWFjcGlfc3RhdHVzCi1hY3BpX2V2X2VuYWJsZV9ncGUoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvLAotCQkgICB1OCB3cml0ZV90b19oYXJkd2FyZSkKK2FjcGlfc3RhdHVzIGFjcGlfZXZfZW5hYmxlX2dwZShzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8pCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCkBAIC0xODYsNDcgKzExMywyMCBAQAogCiAJLyogTWFrZSBzdXJlIEhXIGVuYWJsZSBtYXNrcyBhcmUgdXBkYXRlZCAqLwogCi0Jc3RhdHVzID0KLQkgICAgYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhncGVfZXZlbnRfaW5mbywgQUNQSV9HUEVfRU5BQkxFKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwlzdGF0dXMgPSBhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKGdwZV9ldmVudF9pbmZvKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCX0KIAogCS8qIE1hcmsgd2FrZS1lbmFibGVkIG9yIEhXIGVuYWJsZSwgb3IgYm90aCAqLwogCi0Jc3dpdGNoIChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9UWVBFX01BU0spIHsKLQljYXNlIEFDUElfR1BFX1RZUEVfV0FLRToKKwlpZiAoZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQpIHsKKwkJLyogQ2xlYXIgdGhlIEdQRSAob2Ygc3RhbGUgZXZlbnRzKSwgdGhlbiBlbmFibGUgaXQgKi8KKwkJc3RhdHVzID0gYWNwaV9od19jbGVhcl9ncGUoZ3BlX2V2ZW50X2luZm8pOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAotCQlBQ1BJX1NFVF9CSVQoZ3BlX2V2ZW50X2luZm8tPmZsYWdzLCBBQ1BJX0dQRV9XQUtFX0VOQUJMRUQpOwotCQlicmVhazsKLQotCWNhc2UgQUNQSV9HUEVfVFlQRV9XQUtFX1JVTjoKLQotCQlBQ1BJX1NFVF9CSVQoZ3BlX2V2ZW50X2luZm8tPmZsYWdzLCBBQ1BJX0dQRV9XQUtFX0VOQUJMRUQpOwotCi0JCS8qbGludCAtZmFsbHRocm91Z2ggKi8KLQotCWNhc2UgQUNQSV9HUEVfVFlQRV9SVU5USU1FOgotCi0JCUFDUElfU0VUX0JJVChncGVfZXZlbnRfaW5mby0+ZmxhZ3MsIEFDUElfR1BFX1JVTl9FTkFCTEVEKTsKLQotCQlpZiAod3JpdGVfdG9faGFyZHdhcmUpIHsKLQotCQkJLyogQ2xlYXIgdGhlIEdQRSAob2Ygc3RhbGUgZXZlbnRzKSwgdGhlbiBlbmFibGUgaXQgKi8KLQotCQkJc3RhdHVzID0gYWNwaV9od19jbGVhcl9ncGUoZ3BlX2V2ZW50X2luZm8pOwotCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JCQl9Ci0KLQkJCS8qIEVuYWJsZSB0aGUgcmVxdWVzdGVkIHJ1bnRpbWUgR1BFICovCi0KLQkJCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGVfZ3BlX2VuYWJsZV9yZWcoZ3BlX2V2ZW50X2luZm8pOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOworCQkvKiBFbmFibGUgdGhlIHJlcXVlc3RlZCBydW50aW1lIEdQRSAqLworCQlzdGF0dXMgPSBhY3BpX2h3X3dyaXRlX2dwZV9lbmFibGVfcmVnKGdwZV9ldmVudF9pbmZvKTsKIAl9CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwpAQCAtMjUyLDM0ICsxNTIsOSBAQAogCiAJLyogTWFrZSBzdXJlIEhXIGVuYWJsZSBtYXNrcyBhcmUgdXBkYXRlZCAqLwogCi0Jc3RhdHVzID0KLQkgICAgYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhncGVfZXZlbnRfaW5mbywgQUNQSV9HUEVfRElTQUJMRSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJc3RhdHVzID0gYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhncGVfZXZlbnRfaW5mbyk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQl9Ci0KLQkvKiBDbGVhciB0aGUgYXBwcm9wcmlhdGUgZW5hYmxlZCBmbGFncyBmb3IgdGhpcyBHUEUgKi8KLQotCXN3aXRjaCAoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfVFlQRV9NQVNLKSB7Ci0JY2FzZSBBQ1BJX0dQRV9UWVBFX1dBS0U6Ci0JCUFDUElfQ0xFQVJfQklUKGdwZV9ldmVudF9pbmZvLT5mbGFncywgQUNQSV9HUEVfV0FLRV9FTkFCTEVEKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEFDUElfR1BFX1RZUEVfV0FLRV9SVU46Ci0JCUFDUElfQ0xFQVJfQklUKGdwZV9ldmVudF9pbmZvLT5mbGFncywgQUNQSV9HUEVfV0FLRV9FTkFCTEVEKTsKLQotCQkvKiBmYWxsdGhyb3VnaCAqLwotCi0JY2FzZSBBQ1BJX0dQRV9UWVBFX1JVTlRJTUU6Ci0KLQkJLyogRGlzYWJsZSB0aGUgcmVxdWVzdGVkIHJ1bnRpbWUgR1BFICovCi0KLQkJQUNQSV9DTEVBUl9CSVQoZ3BlX2V2ZW50X2luZm8tPmZsYWdzLCBBQ1BJX0dQRV9SVU5fRU5BQkxFRCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQogCiAJLyoKIAkgKiBFdmVuIGlmIHdlIGRvbid0IGtub3cgdGhlIEdQRSB0eXBlLCBtYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMKQEAgLTUyMSw3ICszOTYsNyBAQAogCiAJLyogU2V0IHRoZSBHUEUgZmxhZ3MgZm9yIHJldHVybiB0byBlbmFibGVkIHN0YXRlICovCiAKLQkodm9pZClhY3BpX2V2X2VuYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8sIEZBTFNFKTsKKwkodm9pZClhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKGdwZV9ldmVudF9pbmZvKTsKIAogCS8qCiAJICogVGFrZSBhIHNuYXBzaG90IG9mIHRoZSBHUEUgaW5mbyBmb3IgdGhpcyBsZXZlbCAtIHdlIGNvcHkgdGhlIGluZm8gdG8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVibGsuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVibGsuYwppbmRleCAyNDc5MjA5Li4zZDRjNGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlYmxrLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWJsay5jCkBAIC0yNTgsNyArMjU4LDYgQEAKIAl1MzIgZ3BlX251bWJlcjsKIAljaGFyIG5hbWVbQUNQSV9OQU1FX1NJWkUgKyAxXTsKIAl1OCB0eXBlOwotCWFjcGlfc3RhdHVzIHN0YXR1czsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfc2F2ZV9tZXRob2RfaW5mbyk7CiAKQEAgLTMyNSwyNiArMzI0LDIwIEBACiAKIAkvKgogCSAqIE5vdyB3ZSBjYW4gYWRkIHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGdwZV9ldmVudF9pbmZvIGJsb2NrIGZvciB1c2UKLQkgKiBkdXJpbmcgZGlzcGF0Y2ggb2YgdGhpcyBHUEUuIERlZmF1bHQgdHlwZSBpcyBSVU5USU1FLCBhbHRob3VnaCB0aGlzIG1heQotCSAqIGNoYW5nZSB3aGVuIHRoZSBfUFJXIG1ldGhvZHMgYXJlIGV4ZWN1dGVkIGxhdGVyLgorCSAqIGR1cmluZyBkaXNwYXRjaCBvZiB0aGlzIEdQRS4KIAkgKi8KIAlncGVfZXZlbnRfaW5mbyA9CiAJICAgICZncGVfYmxvY2stPmV2ZW50X2luZm9bZ3BlX251bWJlciAtIGdwZV9ibG9jay0+YmxvY2tfYmFzZV9udW1iZXJdOwogCi0JZ3BlX2V2ZW50X2luZm8tPmZsYWdzID0gKHU4KQotCSAgICAodHlwZSB8IEFDUElfR1BFX0RJU1BBVENIX01FVEhPRCB8IEFDUElfR1BFX1RZUEVfUlVOVElNRSk7CisJZ3BlX2V2ZW50X2luZm8tPmZsYWdzID0gKHU4KSAodHlwZSB8IEFDUElfR1BFX0RJU1BBVENIX01FVEhPRCk7CiAKIAlncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2gubWV0aG9kX25vZGUgPQogCSAgICAoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKilvYmpfaGFuZGxlOwogCi0JLyogVXBkYXRlIGVuYWJsZSBtYXNrLCBidXQgZG9uJ3QgZW5hYmxlIHRoZSBIVyBHUEUgYXMgb2YgeWV0ICovCi0KLQlzdGF0dXMgPSBhY3BpX2V2X2VuYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8sIEZBTFNFKTsKLQogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTE9BRCwKIAkJCSAgIlJlZ2lzdGVyZWQgR1BFIG1ldGhvZCAlcyBhcyBHUEUgbnVtYmVyIDB4JS4yWFxuIiwKIAkJCSAgbmFtZSwgZ3BlX251bWJlcikpOwotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00NTQsMjAgKzQ0Nyw3IEBACiAJCQkJCQkJZ3BlX2Jsb2NrLT4KIAkJCQkJCQlibG9ja19iYXNlX251bWJlcl07CiAKLQkJLyogTWFyayBHUEUgZm9yIFdBS0UtT05MWSBidXQgV0FLRV9ESVNBQkxFRCAqLwotCi0JCWdwZV9ldmVudF9pbmZvLT5mbGFncyAmPQotCQkgICAgfihBQ1BJX0dQRV9XQUtFX0VOQUJMRUQgfCBBQ1BJX0dQRV9SVU5fRU5BQkxFRCk7Ci0KLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfZXZfc2V0X2dwZV90eXBlKGdwZV9ldmVudF9pbmZvLCBBQ1BJX0dQRV9UWVBFX1dBS0UpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWdvdG8gY2xlYW51cDsKLQkJfQotCi0JCXN0YXR1cyA9Ci0JCSAgICBhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKGdwZV9ldmVudF9pbmZvLAotCQkJCQkJICAgIEFDUElfR1BFX0RJU0FCTEUpOworCQlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgfD0gQUNQSV9HUEVfQ0FOX1dBS0U7CiAJfQogCiAgICAgICBjbGVhbnVwOgpAQCAtOTg5LDcgKzk2OSw2IEBACiBhY3BpX2V2X2luaXRpYWxpemVfZ3BlX2Jsb2NrKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpncGVfZGV2aWNlLAogCQkJICAgICBzdHJ1Y3QgYWNwaV9ncGVfYmxvY2tfaW5mbyAqZ3BlX2Jsb2NrKQogewotCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm87CiAJc3RydWN0IGFjcGlfZ3BlX3dhbGtfaW5mbyBncGVfaW5mbzsKIAl1MzIgd2FrZV9ncGVfY291bnQ7CkBAIC0xMDE5LDQyICs5OTgsNTAgQEAKIAkJZ3BlX2luZm8uZ3BlX2Jsb2NrID0gZ3BlX2Jsb2NrOwogCQlncGVfaW5mby5ncGVfZGV2aWNlID0gZ3BlX2RldmljZTsKIAotCQlzdGF0dXMgPQotCQkgICAgYWNwaV9uc193YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfREVWSUNFLCBBQ1BJX1JPT1RfT0JKRUNULAorCQlhY3BpX25zX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9ERVZJQ0UsIEFDUElfUk9PVF9PQkpFQ1QsCiAJCQkJCSAgIEFDUElfVUlOVDMyX01BWCwgQUNQSV9OU19XQUxLX1VOTE9DSywKIAkJCQkJICAgYWNwaV9ldl9tYXRjaF9wcndfYW5kX2dwZSwgTlVMTCwKIAkJCQkJICAgJmdwZV9pbmZvLCBOVUxMKTsKIAl9CiAKIAkvKgotCSAqIEVuYWJsZSBhbGwgR1BFcyBpbiB0aGlzIGJsb2NrIHRoYXQgaGF2ZSB0aGVzZSBhdHRyaWJ1dGVzOgotCSAqIDEpIGFyZSAicnVudGltZSIgb3IgInJ1bi93YWtlIiBHUEVzLCBhbmQKLQkgKiAyKSBoYXZlIGEgY29ycmVzcG9uZGluZyBfTHh4IG9yIF9FeHggbWV0aG9kCi0JICoKLQkgKiBBbnkgb3RoZXIgR1BFcyB3aXRoaW4gdGhpcyBibG9jayBtdXN0IGJlIGVuYWJsZWQgdmlhIHRoZQotCSAqIGFjcGlfZW5hYmxlX2dwZSgpIGV4dGVybmFsIGludGVyZmFjZS4KKwkgKiBFbmFibGUgYWxsIEdQRXMgdGhhdCBoYXZlIGEgY29ycmVzcG9uZGluZyBtZXRob2QgYW5kIGFyZW4ndAorCSAqIGNhcGFibGUgb2YgZ2VuZXJhdGluZyB3YWtldXBzLiBBbnkgb3RoZXIgR1BFcyB3aXRoaW4gdGhpcyBibG9jaworCSAqIG11c3QgYmUgZW5hYmxlZCB2aWEgdGhlIGFjcGlfZW5hYmxlX2dwZSgpIGludGVyZmFjZS4KIAkgKi8KIAl3YWtlX2dwZV9jb3VudCA9IDA7CiAJZ3BlX2VuYWJsZWRfY291bnQgPSAwOworCWlmIChncGVfZGV2aWNlID09IGFjcGlfZ2JsX2ZhZHRfZ3BlX2RldmljZSkKKwkJZ3BlX2RldmljZSA9IE5VTEw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9jb3VudDsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IEFDUElfR1BFX1JFR0lTVEVSX1dJRFRIOyBqKyspIHsKKwkJCWFjcGlfc3RhdHVzIHN0YXR1czsKKwkJCWFjcGlfc2l6ZSBncGVfaW5kZXg7CisJCQlpbnQgZ3BlX251bWJlcjsKIAogCQkJLyogR2V0IHRoZSBpbmZvIGJsb2NrIGZvciB0aGlzIHBhcnRpY3VsYXIgR1BFICovCisJCQlncGVfaW5kZXggPSAoYWNwaV9zaXplKWkgKiBBQ1BJX0dQRV9SRUdJU1RFUl9XSURUSCArIGo7CisJCQlncGVfZXZlbnRfaW5mbyA9ICZncGVfYmxvY2stPmV2ZW50X2luZm9bZ3BlX2luZGV4XTsKIAotCQkJZ3BlX2V2ZW50X2luZm8gPSAmZ3BlX2Jsb2NrLT5ldmVudF9pbmZvWygoYWNwaV9zaXplKSBpICoKLQkJCQkJCQkJIEFDUElfR1BFX1JFR0lTVEVSX1dJRFRIKQotCQkJCQkJCQkrIGpdOwotCi0JCQlpZiAoKChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLKSA9PQotCQkJICAgICBBQ1BJX0dQRV9ESVNQQVRDSF9NRVRIT0QpICYmCi0JCQkgICAgKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX1RZUEVfUlVOVElNRSkpIHsKLQkJCQlncGVfZW5hYmxlZF9jb3VudCsrOwotCQkJfQotCi0JCQlpZiAoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfVFlQRV9XQUtFKSB7CisJCQlpZiAoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfQ0FOX1dBS0UpIHsKIAkJCQl3YWtlX2dwZV9jb3VudCsrOworCQkJCWlmIChhY3BpX2dibF9sZWF2ZV93YWtlX2dwZXNfZGlzYWJsZWQpCisJCQkJCWNvbnRpbnVlOwogCQkJfQorCisJCQlpZiAoIShncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NRVRIT0QpKQorCQkJCWNvbnRpbnVlOworCisJCQlncGVfbnVtYmVyID0gZ3BlX2luZGV4ICsgZ3BlX2Jsb2NrLT5ibG9ja19iYXNlX251bWJlcjsKKwkJCXN0YXR1cyA9IGFjcGlfZW5hYmxlX2dwZShncGVfZGV2aWNlLCBncGVfbnVtYmVyLAorCQkJCQkJQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKKwkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAorCQkJCQkJIkZhaWxlZCB0byBlbmFibGUgR1BFICUwMlhcbiIsCisJCQkJCQlncGVfbnVtYmVyKSk7CisJCQllbHNlCisJCQkJZ3BlX2VuYWJsZWRfY291bnQrKzsKIAkJfQogCX0KIApAQCAtMTA2MiwxNSArMTA0OSw3IEBACiAJCQkgICJGb3VuZCAldSBXYWtlLCBFbmFibGVkICV1IFJ1bnRpbWUgR1BFcyBpbiB0aGlzIGJsb2NrXG4iLAogCQkJICB3YWtlX2dwZV9jb3VudCwgZ3BlX2VuYWJsZWRfY291bnQpKTsKIAotCS8qIEVuYWJsZSBhbGwgdmFsaWQgcnVudGltZSBHUEVzIGZvdW5kIGFib3ZlICovCi0KLQlzdGF0dXMgPSBhY3BpX2h3X2VuYWJsZV9ydW50aW1lX2dwZV9ibG9jayhOVUxMLCBncGVfYmxvY2ssIE5VTEwpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiQ291bGQgbm90IGVuYWJsZSBHUEVzIGluIEdwZUJsb2NrICVwIiwKLQkJCSAgICBncGVfYmxvY2spKTsKLQl9Ci0KLQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldm1pc2MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZtaXNjLmMKaW5kZXggY2UyMjRlMS4uOGYwZmFjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldm1pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2bWlzYy5jCkBAIC0yNTksOSArMjU5LDE1IEBACiAKIAloYW5kbGVyX29iaiA9IG5vdGlmeV9pbmZvLT5ub3RpZnkuaGFuZGxlcl9vYmo7CiAJaWYgKGhhbmRsZXJfb2JqKSB7Ci0JCWhhbmRsZXJfb2JqLT5ub3RpZnkuaGFuZGxlcihub3RpZnlfaW5mby0+bm90aWZ5Lm5vZGUsCi0JCQkJCSAgICBub3RpZnlfaW5mby0+bm90aWZ5LnZhbHVlLAotCQkJCQkgICAgaGFuZGxlcl9vYmotPm5vdGlmeS5jb250ZXh0KTsKKwkJc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyICpub3RpZmllcjsKKworCQlub3RpZmllciA9ICZoYW5kbGVyX29iai0+bm90aWZ5OworCQl3aGlsZSAobm90aWZpZXIpIHsKKwkJCW5vdGlmaWVyLT5oYW5kbGVyKG5vdGlmeV9pbmZvLT5ub3RpZnkubm9kZSwKKwkJCQkJICBub3RpZnlfaW5mby0+bm90aWZ5LnZhbHVlLAorCQkJCQkgIG5vdGlmaWVyLT5jb250ZXh0KTsKKwkJCW5vdGlmaWVyID0gbm90aWZpZXItPm5leHQ7CisJCX0KIAl9CiAKIAkvKiBBbGwgZG9uZSB3aXRoIHRoZSBpbmZvIG9iamVjdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmYWNlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZhY2UuYwppbmRleCAyZmUwODA5Li40NzRlMmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZhY2UuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZhY2UuYwpAQCAtMjE4LDYgKzIxOCw3MiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3BvcHVsYXRlX2hhbmRsZXJfb2JqZWN0CisgKgorICogUEFSQU1FVEVSUzogIGhhbmRsZXJfb2JqICAgICAgICAtIEhhbmRsZXIgb2JqZWN0IHRvIHBvcHVsYXRlCisgKiAgICAgICAgICAgICAgaGFuZGxlcl90eXBlICAgICAgIC0gVGhlIHR5cGUgb2YgaGFuZGxlcjoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDUElfU1lTVEVNX05PVElGWTogc3lzdGVtX2hhbmRsZXIgKDAwLTdmKQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSV9ERVZJQ0VfTk9USUZZOiBkcml2ZXJfaGFuZGxlciAoODAtZmYpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJX0FMTF9OT1RJRlk6ICBib3RoIHN5c3RlbSBhbmQgZGV2aWNlCisgKiAgICAgICAgICAgICAgaGFuZGxlciAgICAgICAgICAgIC0gQWRkcmVzcyBvZiB0aGUgaGFuZGxlcgorICogICAgICAgICAgICAgIGNvbnRleHQgICAgICAgICAgICAtIFZhbHVlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBvbiBlYWNoIEdQRQorICogICAgICAgICAgICAgIG5leHQgICAgICAgICAgICAgICAtIEFkZHJlc3Mgb2YgYSBoYW5kbGVyIG9iamVjdCB0byBsaW5rIHRvCisgKgorICogUkVUVVJOOiAgICAgIE5vbmUKKyAqCisgKiBERVNDUklQVElPTjogUG9wdWxhdGUgYSBoYW5kbGVyIG9iamVjdC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQKK2FjcGlfcG9wdWxhdGVfaGFuZGxlcl9vYmplY3Qoc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyICpoYW5kbGVyX29iaiwKKwkJCSAgICAgdTMyIGhhbmRsZXJfdHlwZSwKKwkJCSAgICAgYWNwaV9ub3RpZnlfaGFuZGxlciBoYW5kbGVyLCB2b2lkICpjb250ZXh0LAorCQkJICAgICBzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKm5leHQpCit7CisJaGFuZGxlcl9vYmotPmhhbmRsZXJfdHlwZSA9IGhhbmRsZXJfdHlwZTsKKwloYW5kbGVyX29iai0+aGFuZGxlciA9IGhhbmRsZXI7CisJaGFuZGxlcl9vYmotPmNvbnRleHQgPSBjb250ZXh0OworCWhhbmRsZXJfb2JqLT5uZXh0ID0gbmV4dDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV9hZGRfaGFuZGxlcl9vYmplY3QKKyAqCisgKiBQQVJBTUVURVJTOiAgcGFyZW50X29iaiAgICAgICAgIC0gUGFyZW50IG9mIHRoZSBuZXcgb2JqZWN0CisgKiAgICAgICAgICAgICAgaGFuZGxlciAgICAgICAgICAgIC0gQWRkcmVzcyBvZiB0aGUgaGFuZGxlcgorICogICAgICAgICAgICAgIGNvbnRleHQgICAgICAgICAgICAtIFZhbHVlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBvbiBlYWNoIEdQRQorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogQ3JlYXRlIGEgbmV3IGhhbmRsZXIgb2JqZWN0IGFuZCBwb3B1bGF0ZSBpdC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX2FkZF9oYW5kbGVyX29iamVjdChzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKnBhcmVudF9vYmosCisJCQlhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXIsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyICpoYW5kbGVyX29iajsKKworCS8qIFRoZSBwYXJlbnQgbXVzdCBub3QgYmUgYSBkZWZpY2Ugbm90aWZ5IGhhbmRsZXIgb2JqZWN0LiAqLworCWlmIChwYXJlbnRfb2JqLT5oYW5kbGVyX3R5cGUgJiBBQ1BJX0RFVklDRV9OT1RJRlkpCisJCXJldHVybiBBRV9CQURfUEFSQU1FVEVSOworCisJaGFuZGxlcl9vYmogPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzaXplb2YoKmhhbmRsZXJfb2JqKSk7CisJaWYgKCFoYW5kbGVyX29iaikKKwkJcmV0dXJuIEFFX05PX01FTU9SWTsKKworCWFjcGlfcG9wdWxhdGVfaGFuZGxlcl9vYmplY3QoaGFuZGxlcl9vYmosCisJCQkJCUFDUElfU1lTVEVNX05PVElGWSwKKwkJCQkJaGFuZGxlciwgY29udGV4dCwKKwkJCQkJcGFyZW50X29iai0+bmV4dCk7CisJcGFyZW50X29iai0+bmV4dCA9IGhhbmRsZXJfb2JqOworCisJcmV0dXJuIEFFX09LOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIKICAqCiAgKiBQQVJBTUVURVJTOiAgRGV2aWNlICAgICAgICAgIC0gVGhlIGRldmljZSBmb3Igd2hpY2ggbm90aWZpZXMgd2lsbCBiZSBoYW5kbGVkCkBAIC0zMTYsMTUgKzM4MiwzMiBAQAogCQlvYmpfZGVzYyA9IGFjcGlfbnNfZ2V0X2F0dGFjaGVkX29iamVjdChub2RlKTsKIAkJaWYgKG9ial9kZXNjKSB7CiAKLQkJCS8qIE9iamVjdCBleGlzdHMgLSBtYWtlIHN1cmUgdGhlcmUncyBubyBoYW5kbGVyICovCisJCQkvKiBPYmplY3QgZXhpc3RzLiAqLwogCi0JCQlpZiAoKChoYW5kbGVyX3R5cGUgJiBBQ1BJX1NZU1RFTV9OT1RJRlkpICYmCi0JCQkgICAgIG9ial9kZXNjLT5jb21tb25fbm90aWZ5LnN5c3RlbV9ub3RpZnkpIHx8Ci0JCQkgICAgKChoYW5kbGVyX3R5cGUgJiBBQ1BJX0RFVklDRV9OT1RJRlkpICYmCi0JCQkgICAgIG9ial9kZXNjLT5jb21tb25fbm90aWZ5LmRldmljZV9ub3RpZnkpKSB7CisJCQkvKiBGb3IgYSBkZXZpY2Ugbm90aWZ5LCBtYWtlIHN1cmUgdGhlcmUncyBubyBoYW5kbGVyLiAqLworCQkJaWYgKChoYW5kbGVyX3R5cGUgJiBBQ1BJX0RFVklDRV9OT1RJRlkpICYmCisJCQkgICAgIG9ial9kZXNjLT5jb21tb25fbm90aWZ5LmRldmljZV9ub3RpZnkpIHsKIAkJCQlzdGF0dXMgPSBBRV9BTFJFQURZX0VYSVNUUzsKIAkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAkJCX0KKworCQkJLyogU3lzdGVtIG5vdGlmaWVzIG1heSBoYXZlIG1vcmUgaGFuZGxlcnMgaW5zdGFsbGVkLiAqLworCQkJbm90aWZ5X29iaiA9IG9ial9kZXNjLT5jb21tb25fbm90aWZ5LnN5c3RlbV9ub3RpZnk7CisKKwkJCWlmICgoaGFuZGxlcl90eXBlICYgQUNQSV9TWVNURU1fTk9USUZZKSAmJiBub3RpZnlfb2JqKSB7CisJCQkJc3RydWN0IGFjcGlfb2JqZWN0X25vdGlmeV9oYW5kbGVyICpwYXJlbnRfb2JqOworCisJCQkJaWYgKGhhbmRsZXJfdHlwZSAmIEFDUElfREVWSUNFX05PVElGWSkgeworCQkJCQlzdGF0dXMgPSBBRV9BTFJFQURZX0VYSVNUUzsKKwkJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CisJCQkJfQorCisJCQkJcGFyZW50X29iaiA9ICZub3RpZnlfb2JqLT5ub3RpZnk7CisJCQkJc3RhdHVzID0gYWNwaV9hZGRfaGFuZGxlcl9vYmplY3QocGFyZW50X29iaiwKKwkJCQkJCQkJIGhhbmRsZXIsCisJCQkJCQkJCSBjb250ZXh0KTsKKwkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIENyZWF0ZSBhIG5ldyBvYmplY3QgKi8KIApAQCAtMzU2LDkgKzQzOSwxMCBAQAogCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCX0KIAotCQlub3RpZnlfb2JqLT5ub3RpZnkubm9kZSA9IG5vZGU7Ci0JCW5vdGlmeV9vYmotPm5vdGlmeS5oYW5kbGVyID0gaGFuZGxlcjsKLQkJbm90aWZ5X29iai0+bm90aWZ5LmNvbnRleHQgPSBjb250ZXh0OworCQlhY3BpX3BvcHVsYXRlX2hhbmRsZXJfb2JqZWN0KCZub3RpZnlfb2JqLT5ub3RpZnksCisJCQkJCQloYW5kbGVyX3R5cGUsCisJCQkJCQloYW5kbGVyLCBjb250ZXh0LAorCQkJCQkJTlVMTCk7CiAKIAkJaWYgKGhhbmRsZXJfdHlwZSAmIEFDUElfU1lTVEVNX05PVElGWSkgewogCQkJb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuc3lzdGVtX25vdGlmeSA9IG5vdGlmeV9vYmo7CkBAIC00MTgsNiArNTAyLDEwIEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKKworCS8qIE1ha2Ugc3VyZSBhbGwgZGVmZXJyZWQgdGFza3MgYXJlIGNvbXBsZXRlZCAqLworCWFjcGlfb3Nfd2FpdF9ldmVudHNfY29tcGxldGUoTlVMTCk7CisKIAlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJZ290byBleGl0OwpAQCAtNDQ1LDE1ICs1MzMsNiBAQAogCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCX0KIAotCQkvKiBNYWtlIHN1cmUgYWxsIGRlZmVycmVkIHRhc2tzIGFyZSBjb21wbGV0ZWQgKi8KLQotCQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKLQkJYWNwaV9vc193YWl0X2V2ZW50c19jb21wbGV0ZShOVUxMKTsKLQkJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJZ290byBleGl0OwotCQl9Ci0KIAkJaWYgKGhhbmRsZXJfdHlwZSAmIEFDUElfU1lTVEVNX05PVElGWSkgewogCQkJYWNwaV9nYmxfc3lzdGVtX25vdGlmeS5ub2RlID0gTlVMTDsKIAkJCWFjcGlfZ2JsX3N5c3RlbV9ub3RpZnkuaGFuZGxlciA9IE5VTEw7CkBAIC00ODgsMjggKzU2Nyw2MCBAQAogCQkvKiBPYmplY3QgZXhpc3RzIC0gbWFrZSBzdXJlIHRoZXJlJ3MgYW4gZXhpc3RpbmcgaGFuZGxlciAqLwogCiAJCWlmIChoYW5kbGVyX3R5cGUgJiBBQ1BJX1NZU1RFTV9OT1RJRlkpIHsKKwkJCXN0cnVjdCBhY3BpX29iamVjdF9ub3RpZnlfaGFuZGxlciAqaGFuZGxlcl9vYmo7CisJCQlzdHJ1Y3QgYWNwaV9vYmplY3Rfbm90aWZ5X2hhbmRsZXIgKnBhcmVudF9vYmo7CisKIAkJCW5vdGlmeV9vYmogPSBvYmpfZGVzYy0+Y29tbW9uX25vdGlmeS5zeXN0ZW1fbm90aWZ5OwogCQkJaWYgKCFub3RpZnlfb2JqKSB7CiAJCQkJc3RhdHVzID0gQUVfTk9UX0VYSVNUOwogCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCQkJfQogCi0JCQlpZiAobm90aWZ5X29iai0+bm90aWZ5LmhhbmRsZXIgIT0gaGFuZGxlcikgeworCQkJaGFuZGxlcl9vYmogPSAmbm90aWZ5X29iai0+bm90aWZ5OworCQkJcGFyZW50X29iaiA9IE5VTEw7CisJCQl3aGlsZSAoaGFuZGxlcl9vYmotPmhhbmRsZXIgIT0gaGFuZGxlcikgeworCQkJCWlmIChoYW5kbGVyX29iai0+bmV4dCkgeworCQkJCQlwYXJlbnRfb2JqID0gaGFuZGxlcl9vYmo7CisJCQkJCWhhbmRsZXJfb2JqID0gaGFuZGxlcl9vYmotPm5leHQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoaGFuZGxlcl9vYmotPmhhbmRsZXIgIT0gaGFuZGxlcikgewogCQkJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CiAJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCQl9Ci0JCQkvKiBNYWtlIHN1cmUgYWxsIGRlZmVycmVkIHRhc2tzIGFyZSBjb21wbGV0ZWQgKi8KIAotCQkJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCQlhY3BpX29zX3dhaXRfZXZlbnRzX2NvbXBsZXRlKE5VTEwpOwotCQkJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCQlnb3RvIGV4aXQ7CisJCQkvKgorCQkJICogUmVtb3ZlIHRoZSBoYW5kbGVyLiAgVGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIGNhc2VzLgorCQkJICogRmlyc3QsIHdlIG1heSBuZWVkIHRvIHJlbW92ZSBhIG5vbi1lbWJlZGRlZCBvYmplY3QuCisJCQkgKiBTZWNvbmQsIHdlIG1heSBuZWVkIHRvIHJlbW92ZSB0aGUgZW1iZWRkZWQgb2JqZWN0J3MKKwkJCSAqIGhhbmRsZXIgZGF0YSwgd2hpbGUgbm9uLWVtYmVkZGVkIG9iamVjdHMgZXhpc3QuCisJCQkgKiBGaW5hbGx5LCB3ZSBtYXkgbmVlZCB0byByZW1vdmUgdGhlIGVtYmVkZGVkIG9iamVjdAorCQkJICogZW50aXJlbHkgYWxvbmcgd2l0aCBpdHMgY29udGFpbmVyLgorCQkJICovCisJCQlpZiAocGFyZW50X29iaikgeworCQkJCS8qIE5vbi1lbWJlZGRlZCBvYmplY3QgaXMgYmVpbmcgcmVtb3ZlZC4gKi8KKwkJCQlwYXJlbnRfb2JqLT5uZXh0ID0gaGFuZGxlcl9vYmotPm5leHQ7CisJCQkJQUNQSV9GUkVFKGhhbmRsZXJfb2JqKTsKKwkJCX0gZWxzZSBpZiAobm90aWZ5X29iai0+bm90aWZ5Lm5leHQpIHsKKwkJCQkvKgorCQkJCSAqIFRoZSBoYW5kbGVyIG1hdGNoZXMgdGhlIGVtYmVkZGVkIG9iamVjdCwgYnV0CisJCQkJICogdGhlcmUgYXJlIG1vcmUgaGFuZGxlciBvYmplY3RzIGluIHRoZSBsaXN0LgorCQkJCSAqIFJlcGxhY2UgdGhlIGVtYmVkZGVkIG9iamVjdCdzIGRhdGEgd2l0aCB0aGUKKwkJCQkgKiBmaXJzdCBuZXh0IG9iamVjdCdzIGRhdGEgYW5kIHJlbW92ZSB0aGF0CisJCQkJICogb2JqZWN0LgorCQkJCSAqLworCQkJCXBhcmVudF9vYmogPSAmbm90aWZ5X29iai0+bm90aWZ5OworCQkJCWhhbmRsZXJfb2JqID0gbm90aWZ5X29iai0+bm90aWZ5Lm5leHQ7CisJCQkJKnBhcmVudF9vYmogPSAqaGFuZGxlcl9vYmo7CisJCQkJQUNQSV9GUkVFKGhhbmRsZXJfb2JqKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogTm8gbW9yZSBoYW5kbGVyIG9iamVjdHMgaW4gdGhlIGxpc3QuICovCisJCQkJb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuc3lzdGVtX25vdGlmeSA9IE5VTEw7CisJCQkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKG5vdGlmeV9vYmopOwogCQkJfQotCi0JCQkvKiBSZW1vdmUgdGhlIGhhbmRsZXIgKi8KLQkJCW9ial9kZXNjLT5jb21tb25fbm90aWZ5LnN5c3RlbV9ub3RpZnkgPSBOVUxMOwotCQkJYWNwaV91dF9yZW1vdmVfcmVmZXJlbmNlKG5vdGlmeV9vYmopOwogCQl9CiAKIAkJaWYgKGhhbmRsZXJfdHlwZSAmIEFDUElfREVWSUNFX05PVElGWSkgewpAQCAtNTIzLDE0ICs2MzQsNiBAQAogCQkJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CiAJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJCQl9Ci0JCQkvKiBNYWtlIHN1cmUgYWxsIGRlZmVycmVkIHRhc2tzIGFyZSBjb21wbGV0ZWQgKi8KLQotCQkJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCQlhY3BpX29zX3dhaXRfZXZlbnRzX2NvbXBsZXRlKE5VTEwpOwotCQkJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCQlnb3RvIGV4aXQ7Ci0JCQl9CiAKIAkJCS8qIFJlbW92ZSB0aGUgaGFuZGxlciAqLwogCQkJb2JqX2Rlc2MtPmNvbW1vbl9ub3RpZnkuZGV2aWNlX25vdGlmeSA9IE5VTEw7CkBAIC02MTcsMTMgKzcyMCw2IEBACiAJaGFuZGxlci0+Y29udGV4dCA9IGNvbnRleHQ7CiAJaGFuZGxlci0+bWV0aG9kX25vZGUgPSBncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2gubWV0aG9kX25vZGU7CiAKLQkvKiBEaXNhYmxlIHRoZSBHUEUgYmVmb3JlIGluc3RhbGxpbmcgdGhlIGhhbmRsZXIgKi8KLQotCXN0YXR1cyA9IGFjcGlfZXZfZGlzYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8pOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKLQl9Ci0KIAkvKiBJbnN0YWxsIHRoZSBoYW5kbGVyICovCiAKIAlmbGFncyA9IGFjcGlfb3NfYWNxdWlyZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrKTsKQEAgLTcwNywxMyArODAzLDYgQEAKIAkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJfQogCi0JLyogRGlzYWJsZSB0aGUgR1BFIGJlZm9yZSByZW1vdmluZyB0aGUgaGFuZGxlciAqLwotCi0Jc3RhdHVzID0gYWNwaV9ldl9kaXNhYmxlX2dwZShncGVfZXZlbnRfaW5mbyk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWdvdG8gdW5sb2NrX2FuZF9leGl0OwotCX0KLQogCS8qIE1ha2Ugc3VyZSBhbGwgZGVmZXJyZWQgdGFza3MgYXJlIGNvbXBsZXRlZCAqLwogCiAJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX0VWRU5UUyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMKaW5kZXggZWVkN2EzOC4uMTI0YzE1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZXZudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmV2bnQuYwpAQCAtMjAxLDY3ICsyMDEsMjUgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBGVU5DVElPTjogICAgYWNwaV9zZXRfZ3BlX3R5cGUKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3NldF9ncGUKICAqCiAgKiBQQVJBTUVURVJTOiAgZ3BlX2RldmljZSAgICAgIC0gUGFyZW50IEdQRSBEZXZpY2UKICAqICAgICAgICAgICAgICBncGVfbnVtYmVyICAgICAgLSBHUEUgbGV2ZWwgd2l0aGluIHRoZSBHUEUgYmxvY2sKLSAqICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgLSBOZXcgR1BFIHR5cGUKLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzCi0gKgotICogREVTQ1JJUFRJT046IFNldCB0aGUgdHlwZSBvZiBhbiBpbmRpdmlkdWFsIEdQRQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1hY3BpX3N0YXR1cyBhY3BpX3NldF9ncGVfdHlwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlciwgdTggdHlwZSkKLXsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKLQlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm87Ci0KLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfc2V0X2dwZV90eXBlKTsKLQotCS8qIEVuc3VyZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBHUEUgbnVtYmVyICovCi0KLQlncGVfZXZlbnRfaW5mbyA9IGFjcGlfZXZfZ2V0X2dwZV9ldmVudF9pbmZvKGdwZV9kZXZpY2UsIGdwZV9udW1iZXIpOwotCWlmICghZ3BlX2V2ZW50X2luZm8pIHsKLQkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKLQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7Ci0JfQotCi0JaWYgKChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9UWVBFX01BU0spID09IHR5cGUpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKLQl9Ci0KLQkvKiBTZXQgdGhlIG5ldyB0eXBlICh3aWxsIGRpc2FibGUgR1BFIGlmIGN1cnJlbnRseSBlbmFibGVkKSAqLwotCi0Jc3RhdHVzID0gYWNwaV9ldl9zZXRfZ3BlX3R5cGUoZ3BlX2V2ZW50X2luZm8sIHR5cGUpOwotCi0gICAgICB1bmxvY2tfYW5kX2V4aXQ6Ci0JcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci19Ci0KLUFDUElfRVhQT1JUX1NZTUJPTChhY3BpX3NldF9ncGVfdHlwZSkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBGVU5DVElPTjogICAgYWNwaV9lbmFibGVfZ3BlCi0gKgotICogUEFSQU1FVEVSUzogIGdwZV9kZXZpY2UgICAgICAtIFBhcmVudCBHUEUgRGV2aWNlCi0gKiAgICAgICAgICAgICAgZ3BlX251bWJlciAgICAgIC0gR1BFIGxldmVsIHdpdGhpbiB0aGUgR1BFIGJsb2NrCi0gKiAgICAgICAgICAgICAgRmxhZ3MgICAgICAgICAgIC0gSnVzdCBlbmFibGUsIG9yIGFsc28gd2FrZSBlbmFibGU/CisgKiAgICAgICAgICAgICAgYWN0aW9uICAgICAgICAgIC0gRW5hYmxlIG9yIGRpc2FibGUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsZWQgZnJvbSBJU1Igb3Igbm90CiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKLSAqIERFU0NSSVBUSU9OOiBFbmFibGUgYW4gQUNQSSBldmVudCAoZ2VuZXJhbCBwdXJwb3NlKQorICogREVTQ1JJUFRJT046IEVuYWJsZSBvciBkaXNhYmxlIGFuIEFDUEkgZXZlbnQgKGdlbmVyYWwgcHVycG9zZSkKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotYWNwaV9zdGF0dXMgYWNwaV9lbmFibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyKQorYWNwaV9zdGF0dXMgYWNwaV9zZXRfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCBhY3Rpb24pCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJYWNwaV9jcHVfZmxhZ3MgZmxhZ3M7CiAJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2VuYWJsZV9ncGUpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9zZXRfZ3BlKTsKIAogCWZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2spOwogCkBAIC0yNzMsMTUgKzIzMSw5MCBAQAogCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAl9CiAKLQkvKiBQZXJmb3JtIHRoZSBlbmFibGUgKi8KKwkvKiBQZXJmb3JtIHRoZSBhY3Rpb24gKi8KIAotCXN0YXR1cyA9IGFjcGlfZXZfZW5hYmxlX2dwZShncGVfZXZlbnRfaW5mbywgVFJVRSk7CisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIEFDUElfR1BFX0VOQUJMRToKKwkJc3RhdHVzID0gYWNwaV9ldl9lbmFibGVfZ3BlKGdwZV9ldmVudF9pbmZvKTsKKwkJYnJlYWs7CisKKwljYXNlIEFDUElfR1BFX0RJU0FCTEU6CisJCXN0YXR1cyA9IGFjcGlfZXZfZGlzYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUFDUElfRVJST1IoKEFFX0lORk8sICJJbnZhbGlkIGFjdGlvblxuIikpOworCQlzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOworCQlicmVhazsKKwl9CiAKICAgICAgIHVubG9ja19hbmRfZXhpdDoKIAlhY3BpX29zX3JlbGVhc2VfbG9jayhhY3BpX2dibF9ncGVfbG9jaywgZmxhZ3MpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9zZXRfZ3BlKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2VuYWJsZV9ncGUKKyAqCisgKiBQQVJBTUVURVJTOiAgZ3BlX2RldmljZSAgICAgIC0gUGFyZW50IEdQRSBEZXZpY2UKKyAqICAgICAgICAgICAgICBncGVfbnVtYmVyICAgICAgLSBHUEUgbGV2ZWwgd2l0aGluIHRoZSBHUEUgYmxvY2sKKyAqICAgICAgICAgICAgICB0eXBlICAgICAgICAgICAgLSBQdXJwb3NlIHRoZSBHUEUgd2lsbCBiZSB1c2VkIGZvcgorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogVGFrZSBhIHJlZmVyZW5jZSB0byBhIEdQRSBhbmQgZW5hYmxlIGl0IGlmIG5lY2Vzc2FyeQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCithY3BpX3N0YXR1cyBhY3BpX2VuYWJsZV9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHU4IHR5cGUpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CisJYWNwaV9jcHVfZmxhZ3MgZmxhZ3M7CisJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOworCisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2VuYWJsZV9ncGUpOworCisJaWYgKHR5cGUgJiB+QUNQSV9HUEVfVFlQRV9XQUtFX1JVTikKKwkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOworCisJZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9ncGVfbG9jayk7CisKKwkvKiBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgR1BFIG51bWJlciAqLworCisJZ3BlX2V2ZW50X2luZm8gPSBhY3BpX2V2X2dldF9ncGVfZXZlbnRfaW5mbyhncGVfZGV2aWNlLCBncGVfbnVtYmVyKTsKKwlpZiAoIWdwZV9ldmVudF9pbmZvKSB7CisJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CisJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCX0KKworCWlmICh0eXBlICYgQUNQSV9HUEVfVFlQRV9SVU5USU1FKSB7CisJCWlmICgrK2dwZV9ldmVudF9pbmZvLT5ydW50aW1lX2NvdW50ID09IDEpIHsKKwkJCXN0YXR1cyA9IGFjcGlfZXZfZW5hYmxlX2dwZShncGVfZXZlbnRfaW5mbyk7CisJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCQkJZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQtLTsKKwkJfQorCX0KKworCWlmICh0eXBlICYgQUNQSV9HUEVfVFlQRV9XQUtFKSB7CisJCWlmICghKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0NBTl9XQUtFKSkgeworCQkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKKwkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCQl9CisKKwkJLyoKKwkJICogV2FrZS11cCBHUEVzIGFyZSBvbmx5IGVuYWJsZWQgcmlnaHQgcHJpb3IgdG8gcHV0dGluZyB0aGUKKwkJICogc3lzdGVtIGludG8gYSBzbGVlcCBzdGF0ZS4KKwkJICovCisJCWlmICgrK2dwZV9ldmVudF9pbmZvLT53YWtldXBfY291bnQgPT0gMSkKKwkJCWFjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3MoZ3BlX2V2ZW50X2luZm8pOworCX0KKwordW5sb2NrX2FuZF9leGl0OgorCWFjcGlfb3NfcmVsZWFzZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Cit9CiBBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9lbmFibGVfZ3BlKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjkwLDE1ICszMjMsMTQgQEAKICAqCiAgKiBQQVJBTUVURVJTOiAgZ3BlX2RldmljZSAgICAgIC0gUGFyZW50IEdQRSBEZXZpY2UKICAqICAgICAgICAgICAgICBncGVfbnVtYmVyICAgICAgLSBHUEUgbGV2ZWwgd2l0aGluIHRoZSBHUEUgYmxvY2sKLSAqICAgICAgICAgICAgICBGbGFncyAgICAgICAgICAgLSBKdXN0IGRpc2FibGUsIG9yIGFsc28gd2FrZSBkaXNhYmxlPwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxlZCBmcm9tIElTUiBvciBub3QKKyAqICAgICAgICAgICAgICB0eXBlICAgICAgICAgICAgLSBQdXJwb3NlIHRoZSBHUEUgd29uJ3QgYmUgdXNlZCBmb3IgYW55IG1vcmUKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgotICogREVTQ1JJUFRJT046IERpc2FibGUgYW4gQUNQSSBldmVudCAoZ2VuZXJhbCBwdXJwb3NlKQorICogREVTQ1JJUFRJT046IFJlbGVhc2UgYSByZWZlcmVuY2UgdG8gYSBHUEUgYW5kIGRpc2FibGUgaXQgaWYgbmVjZXNzYXJ5CiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWFjcGlfc3RhdHVzIGFjcGlfZGlzYWJsZV9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIpCithY3BpX3N0YXR1cyBhY3BpX2Rpc2FibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCB0eXBlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOwpAQCAtMzA2LDYgKzMzOCw5IEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZGlzYWJsZV9ncGUpOwogCisJaWYgKHR5cGUgJiB+QUNQSV9HUEVfVFlQRV9XQUtFX1JVTikKKwkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOworCiAJZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9ncGVfbG9jayk7CiAJLyogRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIEdQRSBudW1iZXIgKi8KIApAQCAtMzE1LDEzICszNTAsMjQgQEAKIAkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJfQogCi0Jc3RhdHVzID0gYWNwaV9ldl9kaXNhYmxlX2dwZShncGVfZXZlbnRfaW5mbyk7CisJaWYgKCh0eXBlICYgQUNQSV9HUEVfVFlQRV9SVU5USU1FKSAmJiBncGVfZXZlbnRfaW5mby0+cnVudGltZV9jb3VudCkgeworCQlpZiAoLS1ncGVfZXZlbnRfaW5mby0+cnVudGltZV9jb3VudCA9PSAwKQorCQkJc3RhdHVzID0gYWNwaV9ldl9kaXNhYmxlX2dwZShncGVfZXZlbnRfaW5mbyk7CisJfQorCisJaWYgKCh0eXBlICYgQUNQSV9HUEVfVFlQRV9XQUtFKSAmJiBncGVfZXZlbnRfaW5mby0+d2FrZXVwX2NvdW50KSB7CisJCS8qCisJCSAqIFdha2UtdXAgR1BFcyBhcmUgbm90IGVuYWJsZWQgYWZ0ZXIgbGVhdmluZyBzeXN0ZW0gc2xlZXAKKwkJICogc3RhdGVzLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRpc2FibGUgdGhlbSBoZXJlLgorCQkgKi8KKwkJaWYgKC0tZ3BlX2V2ZW50X2luZm8tPndha2V1cF9jb3VudCA9PSAwKQorCQkJYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhncGVfZXZlbnRfaW5mbyk7CisJfQogCiB1bmxvY2tfYW5kX2V4aXQ6CiAJYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KLQogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZGlzYWJsZV9ncGUpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKaW5kZXggOGE5NWU4My4uZjUzZmJlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwpAQCAtNDIyLDExICs0MjIsMTAgQEAKIAogCWlmIChkZXZpY2UtPndha2V1cC5mbGFncy52YWxpZCkgewogCQkvKiBCdXR0b24ncyBHUEUgaXMgcnVuLXdha2UgR1BFICovCi0JCWFjcGlfc2V0X2dwZV90eXBlKGRldmljZS0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJICBkZXZpY2UtPndha2V1cC5ncGVfbnVtYmVyLAotCQkJCSAgQUNQSV9HUEVfVFlQRV9XQUtFX1JVTik7CiAJCWFjcGlfZW5hYmxlX2dwZShkZXZpY2UtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCWRldmljZS0+d2FrZXVwLmdwZV9udW1iZXIpOworCQkJCWRldmljZS0+d2FrZXVwLmdwZV9udW1iZXIsCisJCQkJQUNQSV9HUEVfVFlQRV9XQUtFX1JVTik7CisJCWRldmljZS0+d2FrZXVwLnJ1bl93YWtlX2NvdW50Kys7CiAJCWRldmljZS0+d2FrZXVwLnN0YXRlLmVuYWJsZWQgPSAxOwogCX0KIApAQCAtNDQ2LDYgKzQ0NSwxNCBAQAogewogCXN0cnVjdCBhY3BpX2J1dHRvbiAqYnV0dG9uID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCisJaWYgKGRldmljZS0+d2FrZXVwLmZsYWdzLnZhbGlkKSB7CisJCWFjcGlfZGlzYWJsZV9ncGUoZGV2aWNlLT53YWtldXAuZ3BlX2RldmljZSwKKwkJCQlkZXZpY2UtPndha2V1cC5ncGVfbnVtYmVyLAorCQkJCUFDUElfR1BFX1RZUEVfV0FLRV9SVU4pOworCQlkZXZpY2UtPndha2V1cC5ydW5fd2FrZV9jb3VudC0tOworCQlkZXZpY2UtPndha2V1cC5zdGF0ZS5lbmFibGVkID0gMDsKKwl9CisKIAlhY3BpX2J1dHRvbl9yZW1vdmVfZnMoZGV2aWNlKTsKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShidXR0b24tPmlucHV0KTsKIAlrZnJlZShidXR0b24pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2VjLmMgYi9kcml2ZXJzL2FjcGkvZWMuYwppbmRleCBkNjQ3MWJiLi4yN2UwYjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZWMuYworKysgYi9kcml2ZXJzL2FjcGkvZWMuYwpAQCAtMzA3LDcgKzMwNywxMSBAQAogCXByX2RlYnVnKFBSRUZJWCAidHJhbnNhY3Rpb24gc3RhcnRcbiIpOwogCS8qIGRpc2FibGUgR1BFIGR1cmluZyB0cmFuc2FjdGlvbiBpZiBzdG9ybSBpcyBkZXRlY3RlZCAqLwogCWlmICh0ZXN0X2JpdChFQ19GTEFHU19HUEVfU1RPUk0sICZlYy0+ZmxhZ3MpKSB7Ci0JCWFjcGlfZGlzYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSk7CisJCS8qCisJCSAqIEl0IGhhcyB0byBiZSBkaXNhYmxlZCBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwgcmVnYXJkbGVzcyBvZiB0aGUKKwkJICogR1BFIHJlZmVyZW5jZSBjb3VudGluZywgc28gdGhhdCBpdCBkb2Vzbid0IHRyaWdnZXIuCisJCSAqLworCQlhY3BpX3NldF9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9HUEVfRElTQUJMRSk7CiAJfQogCiAJc3RhdHVzID0gYWNwaV9lY190cmFuc2FjdGlvbl91bmxvY2tlZChlYywgdCk7CkBAIC0zMTYsOCArMzIwLDEyIEBACiAJZWNfY2hlY2tfc2NpX3N5bmMoZWMsIGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpKTsKIAlpZiAodGVzdF9iaXQoRUNfRkxBR1NfR1BFX1NUT1JNLCAmZWMtPmZsYWdzKSkgewogCQltc2xlZXAoMSk7Ci0JCS8qIGl0IGlzIHNhZmUgdG8gZW5hYmxlIEdQRSBvdXRzaWRlIG9mIHRyYW5zYWN0aW9uICovCi0JCWFjcGlfZW5hYmxlX2dwZShOVUxMLCBlYy0+Z3BlKTsKKwkJLyoKKwkJICogSXQgaXMgc2FmZSB0byBlbmFibGUgdGhlIEdQRSBvdXRzaWRlIG9mIHRoZSB0cmFuc2FjdGlvbi4gIFVzZQorCQkgKiBhY3BpX3NldF9ncGUoKSBmb3IgdGhhdCwgc2luY2Ugd2UgdXNlZCBpdCB0byBkaXNhYmxlIHRoZSBHUEUKKwkJICogYWJvdmUuCisJCSAqLworCQlhY3BpX3NldF9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9HUEVfRU5BQkxFKTsKIAl9IGVsc2UgaWYgKHQtPmlycV9jb3VudCA+IEFDUElfRUNfU1RPUk1fVEhSRVNIT0xEKSB7CiAJCXByX2luZm8oUFJFRklYICJHUEUgc3Rvcm0gZGV0ZWN0ZWQsICIKIAkJCSJ0cmFuc2FjdGlvbnMgd2lsbCB1c2UgcG9sbGluZyBtb2RlXG4iKTsKQEAgLTc4OCw4ICs3OTYsOCBAQAogCQkJCSAgJmFjcGlfZWNfZ3BlX2hhbmRsZXIsIGVjKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybiAtRU5PREVWOwotCWFjcGlfc2V0X2dwZV90eXBlKE5VTEwsIGVjLT5ncGUsIEFDUElfR1BFX1RZUEVfUlVOVElNRSk7Ci0JYWNwaV9lbmFibGVfZ3BlKE5VTEwsIGVjLT5ncGUpOworCisJYWNwaV9lbmFibGVfZ3BlKE5VTEwsIGVjLT5ncGUsIEFDUElfR1BFX1RZUEVfUlVOVElNRSk7CiAJc3RhdHVzID0gYWNwaV9pbnN0YWxsX2FkZHJlc3Nfc3BhY2VfaGFuZGxlcihlYy0+aGFuZGxlLAogCQkJCQkJICAgIEFDUElfQURSX1NQQUNFX0VDLAogCQkJCQkJICAgICZhY3BpX2VjX3NwYWNlX2hhbmRsZXIsCkBAIC04MDYsNiArODE0LDcgQEAKIAkJfSBlbHNlIHsKIAkJCWFjcGlfcmVtb3ZlX2dwZV9oYW5kbGVyKE5VTEwsIGVjLT5ncGUsCiAJCQkJJmFjcGlfZWNfZ3BlX2hhbmRsZXIpOworCQkJYWNwaV9kaXNhYmxlX2dwZShOVUxMLCBlYy0+Z3BlLCBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CkBAIC04MTYsNiArODI1LDcgQEAKIAogc3RhdGljIHZvaWQgZWNfcmVtb3ZlX2hhbmRsZXJzKHN0cnVjdCBhY3BpX2VjICplYykKIHsKKwlhY3BpX2Rpc2FibGVfZ3BlKE5VTEwsIGVjLT5ncGUsIEFDUElfR1BFX1RZUEVfUlVOVElNRSk7CiAJaWYgKEFDUElfRkFJTFVSRShhY3BpX3JlbW92ZV9hZGRyZXNzX3NwYWNlX2hhbmRsZXIoZWMtPmhhbmRsZSwKIAkJCQlBQ1BJX0FEUl9TUEFDRV9FQywgJmFjcGlfZWNfc3BhY2VfaGFuZGxlcikpKQogCQlwcl9lcnIoUFJFRklYICJmYWlsZWQgdG8gcmVtb3ZlIHNwYWNlIGhhbmRsZXJcbiIpOwpAQCAtMTA1NywxNiArMTA2NywxNiBAQAogc3RhdGljIGludCBhY3BpX2VjX3N1c3BlbmQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgYWNwaV9lYyAqZWMgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7Ci0JLyogU3RvcCB1c2luZyBHUEUgKi8KLQlhY3BpX2Rpc2FibGVfZ3BlKE5VTEwsIGVjLT5ncGUpOworCS8qIFN0b3AgdXNpbmcgdGhlIEdQRSwgYnV0IGtlZXAgaXQgcmVmZXJlbmNlIGNvdW50ZWQuICovCisJYWNwaV9zZXRfZ3BlKE5VTEwsIGVjLT5ncGUsIEFDUElfR1BFX0RJU0FCTEUpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfZWNfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBhY3BpX2VjICplYyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKLQkvKiBFbmFibGUgdXNlIG9mIEdQRSBiYWNrICovCi0JYWNwaV9lbmFibGVfZ3BlKE5VTEwsIGVjLT5ncGUpOworCS8qIEVuYWJsZSB0aGUgR1BFIGFnYWluLCBidXQgZG9uJ3QgcmVmZXJlbmNlIGNvdW50IGl0IG9uY2UgbW9yZS4gKi8KKwlhY3BpX3NldF9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9HUEVfRU5BQkxFKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2ludGVybmFsLmggYi9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaAppbmRleCBjYjI4ZTA1Li45YzRjOTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaApAQCAtMzYsOCArMzYsNiBAQAogaW50IGFjcGlfcG93ZXJfaW5pdCh2b2lkKTsKIGludCBhY3BpX2RldmljZV9zbGVlcF93YWtlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVuYWJsZSwgaW50IHNsZWVwX3N0YXRlLCBpbnQgZGV2X3N0YXRlKTsKLWludCBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LCBpbnQgc2xlZXBfc3RhdGUpOwotaW50IGFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2KTsKIGludCBhY3BpX3Bvd2VyX2dldF9pbmZlcnJlZF9zdGF0ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CiBpbnQgYWNwaV9wb3dlcl90cmFuc2l0aW9uKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgc3RhdGUpOwogZXh0ZXJuIGludCBhY3BpX3Bvd2VyX25vY2hlY2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGNpX2JpbmQuYyBiL2RyaXZlcnMvYWNwaS9wY2lfYmluZC5jCmluZGV4IGE1YTc3YjcuLjJlZjA0MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wY2lfYmluZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9wY2lfYmluZC5jCkBAIC0yNiw3ICsyNiw5IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKQEAgLTM4LDcgKzQwLDEzIEBACiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAogCWRldiA9IGFjcGlfZ2V0X3BjaV9kZXYoZGV2aWNlLT5oYW5kbGUpOwotCWlmICghZGV2IHx8ICFkZXYtPnN1Ym9yZGluYXRlKQorCWlmICghZGV2KQorCQlnb3RvIG91dDsKKworCWRldmljZV9zZXRfcnVuX3dha2UoJmRldi0+ZGV2LCBmYWxzZSk7CisJcGNpX2FjcGlfcmVtb3ZlX3BtX25vdGlmaWVyKGRldmljZSk7CisKKwlpZiAoIWRldi0+c3Vib3JkaW5hdGUpCiAJCWdvdG8gb3V0OwogCiAJYWNwaV9wY2lfaXJxX2RlbF9wcnQoZGV2LT5zdWJvcmRpbmF0ZSk7CkBAIC02Miw2ICs3MCwxMCBAQAogCWlmICghZGV2KQogCQlyZXR1cm4gMDsKIAorCXBjaV9hY3BpX2FkZF9wbV9ub3RpZmllcihkZXZpY2UsIGRldik7CisJaWYgKGRldmljZS0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlKQorCQlkZXZpY2Vfc2V0X3J1bl93YWtlKCZkZXYtPmRldiwgdHJ1ZSk7CisKIAkvKgogCSAqIEluc3RhbGwgdGhlICdiaW5kJyBmdW5jdGlvbiB0byBmYWNpbGl0YXRlIGNhbGxiYWNrcyBmb3IKIAkgKiBjaGlsZHJlbiBvZiB0aGUgUDJQIGJyaWRnZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKaW5kZXggNjRmNTViNi4uZDcyNDczNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KQEAgLTUyOCw2ICs1MjksMTAgQEAKIAlpZiAoZmxhZ3MgIT0gYmFzZV9mbGFncykKIAkJYWNwaV9wY2lfb3NjX3N1cHBvcnQocm9vdCwgZmxhZ3MpOwogCisJcGNpX2FjcGlfYWRkX2J1c19wbV9ub3RpZmllcihkZXZpY2UsIHJvb3QtPmJ1cyk7CisJaWYgKGRldmljZS0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlKQorCQlkZXZpY2Vfc2V0X3J1bl93YWtlKHJvb3QtPmJ1cy0+YnJpZGdlLCB0cnVlKTsKKwogCXJldHVybiAwOwogCiBlbmQ6CkBAIC01NDksNiArNTU0LDkgQEAKIHsKIAlzdHJ1Y3QgYWNwaV9wY2lfcm9vdCAqcm9vdCA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAorCWRldmljZV9zZXRfcnVuX3dha2Uocm9vdC0+YnVzLT5icmlkZ2UsIGZhbHNlKTsKKwlwY2lfYWNwaV9yZW1vdmVfYnVzX3BtX25vdGlmaWVyKGRldmljZSk7CisKIAlrZnJlZShyb290KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU1OCw2ICs1NjYsNyBAQAogCWlmIChhY3BpX3BjaV9kaXNhYmxlZCkKIAkJcmV0dXJuIDA7CiAKKwlwY2lfYWNwaV9jcnNfcXVpcmtzKCk7CiAJaWYgKGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9wY2lfcm9vdF9kcml2ZXIpIDwgMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zY2FuLmMgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCmluZGV4IDNlMDA5NjcuLmZiN2ZjMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zY2FuLmMKKysrIGIvZHJpdmVycy9hY3BpL3NjYW4uYwpAQCAtNzQxLDE5ICs3NDEsNDAgQEAKIAlyZXR1cm4gQUVfT0s7CiB9CiAKLXN0YXRpYyBpbnQgYWNwaV9idXNfZ2V0X3dha2V1cF9kZXZpY2VfZmxhZ3Moc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgdm9pZCBhY3BpX2J1c19zZXRfcnVuX3dha2VfZmxhZ3Moc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OwotCXVuaW9uIGFjcGlfb2JqZWN0ICpwYWNrYWdlID0gTlVMTDsKLQlpbnQgcHN3X2Vycm9yOwotCiAJc3RydWN0IGFjcGlfZGV2aWNlX2lkIGJ1dHRvbl9kZXZpY2VfaWRzW10gPSB7CiAJCXsiUE5QMEMwRCIsIDB9LAogCQl7IlBOUDBDMEMiLCAwfSwKIAkJeyJQTlAwQzBFIiwgMH0sCiAJCXsiIiwgMH0sCiAJfTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9ldmVudF9zdGF0dXMgZXZlbnRfc3RhdHVzOworCisJZGV2aWNlLT53YWtldXAucnVuX3dha2VfY291bnQgPSAwOworCWRldmljZS0+d2FrZXVwLmZsYWdzLm5vdGlmaWVyX3ByZXNlbnQgPSAwOworCisJLyogUG93ZXIgYnV0dG9uLCBMaWQgc3dpdGNoIGFsd2F5cyBlbmFibGUgd2FrZXVwICovCisJaWYgKCFhY3BpX21hdGNoX2RldmljZV9pZHMoZGV2aWNlLCBidXR0b25fZGV2aWNlX2lkcykpIHsKKwkJZGV2aWNlLT53YWtldXAuZmxhZ3MucnVuX3dha2UgPSAxOworCQlkZXZpY2UtPndha2V1cC5mbGFncy5hbHdheXNfZW5hYmxlZCA9IDE7CisJCXJldHVybjsKKwl9CisKKwlzdGF0dXMgPSBhY3BpX2dldF9ncGVfc3RhdHVzKE5VTEwsIGRldmljZS0+d2FrZXVwLmdwZV9udW1iZXIsCisJCQkJCUFDUElfTk9UX0lTUiwgJmV2ZW50X3N0YXR1cyk7CisJaWYgKHN0YXR1cyA9PSBBRV9PSykKKwkJZGV2aWNlLT53YWtldXAuZmxhZ3MucnVuX3dha2UgPQorCQkJCSEhKGV2ZW50X3N0YXR1cyAmIEFDUElfRVZFTlRfRkxBR19IQU5ETEUpOworfQorCitzdGF0aWMgaW50IGFjcGlfYnVzX2dldF93YWtldXBfZGV2aWNlX2ZsYWdzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKwl1bmlvbiBhY3BpX29iamVjdCAqcGFja2FnZSA9IE5VTEw7CisJaW50IHBzd19lcnJvcjsKIAogCS8qIF9QUlcgKi8KIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkZXZpY2UtPmhhbmRsZSwgIl9QUlciLCBOVUxMLCAmYnVmZmVyKTsKQEAgLTc3Myw2ICs3OTQsNyBAQAogCiAJZGV2aWNlLT53YWtldXAuZmxhZ3MudmFsaWQgPSAxOwogCWRldmljZS0+d2FrZXVwLnByZXBhcmVfY291bnQgPSAwOworCWFjcGlfYnVzX3NldF9ydW5fd2FrZV9mbGFncyhkZXZpY2UpOwogCS8qIENhbGwgX1BTVy9fRFNXIG9iamVjdCB0byBkaXNhYmxlIGl0cyBhYmlsaXR5IHRvIHdha2UgdGhlIHNsZWVwaW5nCiAJICogc3lzdGVtIGZvciB0aGUgQUNQSSBkZXZpY2Ugd2l0aCB0aGUgX1BSVyBvYmplY3QuCiAJICogVGhlIF9QU1cgb2JqZWN0IGlzIGRlcHJlY2lhdGVkIGluIEFDUEkgMy4wIGFuZCBpcyByZXBsYWNlZCBieSBfRFNXLgpAQCAtNzg0LDEwICs4MDYsNiBAQAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCiAJCQkJImVycm9yIGluIF9EU1cgb3IgX1BTVyBldmFsdWF0aW9uXG4iKSk7CiAKLQkvKiBQb3dlciBidXR0b24sIExpZCBzd2l0Y2ggYWx3YXlzIGVuYWJsZSB3YWtldXAgKi8KLQlpZiAoIWFjcGlfbWF0Y2hfZGV2aWNlX2lkcyhkZXZpY2UsIGJ1dHRvbl9kZXZpY2VfaWRzKSkKLQkJZGV2aWNlLT53YWtldXAuZmxhZ3MucnVuX3dha2UgPSAxOwotCiBlbmQ6CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlkZXZpY2UtPmZsYWdzLndha2VfY2FwYWJsZSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAuYyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCmluZGV4IDc5ZDMzZDkuLjNiZGU1OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCkBAIC03NDUsOSArNzQ1LDE4IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWVycm9yID0gZW5hYmxlID8KLQkJYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wb3dlcihhZGV2LCBhY3BpX3RhcmdldF9zbGVlcF9zdGF0ZSkgOgotCQlhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZV9wb3dlcihhZGV2KTsKKwlpZiAoZW5hYmxlKSB7CisJCWVycm9yID0gYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wb3dlcihhZGV2LAorCQkJCQkJYWNwaV90YXJnZXRfc2xlZXBfc3RhdGUpOworCQlpZiAoIWVycm9yKQorCQkJYWNwaV9lbmFibGVfZ3BlKGFkZXYtPndha2V1cC5ncGVfZGV2aWNlLAorCQkJCQlhZGV2LT53YWtldXAuZ3BlX251bWJlciwKKwkJCQkJQUNQSV9HUEVfVFlQRV9XQUtFKTsKKwl9IGVsc2UgeworCQlhY3BpX2Rpc2FibGVfZ3BlKGFkZXYtPndha2V1cC5ncGVfZGV2aWNlLCBhZGV2LT53YWtldXAuZ3BlX251bWJlciwKKwkJCQlBQ1BJX0dQRV9UWVBFX1dBS0UpOworCQllcnJvciA9IGFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKGFkZXYpOworCX0KIAlpZiAoIWVycm9yKQogCQlkZXZfaW5mbyhkZXYsICJ3YWtlLXVwIGNhcGFiaWxpdHkgJXMgYnkgQUNQSVxuIiwKIAkJCQllbmFibGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYyBiL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYwppbmRleCBkMTEyODI5Li5hMjA2YTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKKysrIGIvZHJpdmVycy9hY3BpL3N5c3RlbS5jCkBAIC0zODcsMTAgKzM4NywxMCBAQAogCWlmIChpbmRleCA8IG51bV9ncGVzKSB7CiAJCWlmICghc3RyY21wKGJ1ZiwgImRpc2FibGVcbiIpICYmCiAJCQkJKHN0YXR1cyAmIEFDUElfRVZFTlRfRkxBR19FTkFCTEVEKSkKLQkJCXJlc3VsdCA9IGFjcGlfZGlzYWJsZV9ncGUoaGFuZGxlLCBpbmRleCk7CisJCQlyZXN1bHQgPSBhY3BpX3NldF9ncGUoaGFuZGxlLCBpbmRleCwgQUNQSV9HUEVfRElTQUJMRSk7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiZW5hYmxlXG4iKSAmJgogCQkJCSEoc3RhdHVzICYgQUNQSV9FVkVOVF9GTEFHX0VOQUJMRUQpKQotCQkJcmVzdWx0ID0gYWNwaV9lbmFibGVfZ3BlKGhhbmRsZSwgaW5kZXgpOworCQkJcmVzdWx0ID0gYWNwaV9zZXRfZ3BlKGhhbmRsZSwgaW5kZXgsIEFDUElfR1BFX0VOQUJMRSk7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiY2xlYXJcbiIpICYmCiAJCQkJKHN0YXR1cyAmIEFDUElfRVZFTlRfRkxBR19TRVQpKQogCQkJcmVzdWx0ID0gYWNwaV9jbGVhcl9ncGUoaGFuZGxlLCBpbmRleCwgQUNQSV9OT1RfSVNSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS93YWtldXAuYyBiL2RyaXZlcnMvYWNwaS93YWtldXAuYwppbmRleCBlMGVlMGMwLi40YjlkMzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvd2FrZXVwLmMKKysrIGIvZHJpdmVycy9hY3BpL3dha2V1cC5jCkBAIC0yMSwxMiArMjEsMTIgQEAKIEFDUElfTU9EVUxFX05BTUUoIndha2V1cF9kZXZpY2VzIikKIAogLyoqCi0gKiBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlX3ByZXAgLSBwcmVwYXJlIHdha2V1cCBkZXZpY2VzCi0gKglAc2xlZXBfc3RhdGU6CUFDUEkgc3RhdGUKLSAqIEVuYWJsZSBhbGwgd2FrdXAgZGV2aWNlcyBwb3dlciBpZiB0aGUgZGV2aWNlcycgd2FrZXVwIGxldmVsCi0gKiBpcyBoaWdoZXIgdGhhbiByZXF1ZXN0ZWQgc2xlZXAgbGV2ZWwKKyAqIGFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcHJlcCAtIFByZXBhcmUgd2FrZS11cCBkZXZpY2VzLgorICogQHNsZWVwX3N0YXRlOiBBQ1BJIHN5c3RlbSBzbGVlcCBzdGF0ZS4KKyAqCisgKiBFbmFibGUgYWxsIHdha2UtdXAgZGV2aWNlcycgcG93ZXIsIHVubGVzcyB0aGUgcmVxdWVzdGVkIHN5c3RlbSBzbGVlcCBzdGF0ZSBpcworICogdG9vIGRlZXAuCiAgKi8KLQogdm9pZCBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlX3ByZXAodTggc2xlZXBfc3RhdGUpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqbm9kZSwgKm5leHQ7CkBAIC0zNiw5ICszNiw4IEBACiAJCQkJCQkgICAgICAgc3RydWN0IGFjcGlfZGV2aWNlLAogCQkJCQkJICAgICAgIHdha2V1cF9saXN0KTsKIAotCQlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLnZhbGlkIHx8Ci0JCSAgICAhZGV2LT53YWtldXAuc3RhdGUuZW5hYmxlZCB8fAotCQkgICAgKHNsZWVwX3N0YXRlID4gKHUzMikgZGV2LT53YWtldXAuc2xlZXBfc3RhdGUpKQorCQlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLnZhbGlkIHx8ICFkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkCisJCSAgICB8fCAoc2xlZXBfc3RhdGUgPiAodTMyKSBkZXYtPndha2V1cC5zbGVlcF9zdGF0ZSkpCiAJCQljb250aW51ZTsKIAogCQlhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKGRldiwgc2xlZXBfc3RhdGUpOwpAQCAtNDYsOSArNDUsMTIgQEAKIH0KIAogLyoqCi0gKiBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlIC0gZW5hYmxlIHdha2V1cCBkZXZpY2VzCi0gKglAc2xlZXBfc3RhdGU6CUFDUEkgc3RhdGUKLSAqIEVuYWJsZSBhbGwgd2FrdXAgZGV2aWNlcydzIEdQRQorICogYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZSAtIEVuYWJsZSB3YWtlLXVwIGRldmljZSBHUEVzLgorICogQHNsZWVwX3N0YXRlOiBBQ1BJIHN5c3RlbSBzbGVlcCBzdGF0ZS4KKyAqCisgKiBFbmFibGUgYWxsIHdha2UtdXAgZGV2aWNlcycgR1BFcywgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0CisgKiBhY3BpX2Rpc2FibGVfYWxsX2dwZXMoKSB3YXMgZXhlY3V0ZWQgYmVmb3JlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRpc2FibGUgYW55CisgKiBHUEVzIGhlcmUuCiAgKi8KIHZvaWQgYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZSh1OCBzbGVlcF9zdGF0ZSkKIHsKQEAgLTY1LDI5ICs2NywyMiBAQAogCQlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLnZhbGlkKQogCQkJY29udGludWU7CiAKLQkJLyogSWYgdXNlcnMgd2FudCB0byBkaXNhYmxlIHJ1bi13YWtlIEdQRSwKLQkJICogd2Ugb25seSBkaXNhYmxlIGl0IGZvciB3YWtlIGFuZCBsZWF2ZSBpdCBmb3IgcnVudGltZQotCQkgKi8KIAkJaWYgKCghZGV2LT53YWtldXAuc3RhdGUuZW5hYmxlZCAmJiAhZGV2LT53YWtldXAucHJlcGFyZV9jb3VudCkKLQkJICAgIHx8IHNsZWVwX3N0YXRlID4gKHUzMikgZGV2LT53YWtldXAuc2xlZXBfc3RhdGUpIHsKLQkJCWlmIChkZXYtPndha2V1cC5mbGFncy5ydW5fd2FrZSkgewotCQkJCS8qIHNldF9ncGVfdHlwZSB3aWxsIGRpc2FibGUgR1BFLCBsZWF2ZSBpdCBsaWtlIHRoYXQgKi8KLQkJCQlhY3BpX3NldF9ncGVfdHlwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCQkJICBkZXYtPndha2V1cC5ncGVfbnVtYmVyLAotCQkJCQkJICBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOwotCQkJfQorCQkgICAgfHwgc2xlZXBfc3RhdGUgPiAodTMyKSBkZXYtPndha2V1cC5zbGVlcF9zdGF0ZSkKIAkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghZGV2LT53YWtldXAuZmxhZ3MucnVuX3dha2UpCi0JCQlhY3BpX2VuYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKLQkJCQkJZGV2LT53YWtldXAuZ3BlX251bWJlcik7CisKKwkJLyogVGhlIHdha2UtdXAgcG93ZXIgc2hvdWxkIGhhdmUgYmVlbiBlbmFibGVkIGFscmVhZHkuICovCisJCWFjcGlfc2V0X2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLCBkZXYtPndha2V1cC5ncGVfbnVtYmVyLAorCQkJCUFDUElfR1BFX0VOQUJMRSk7CiAJfQogfQogCiAvKioKLSAqIGFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlIC0gZGlzYWJsZSBkZXZpY2VzJyB3YWtldXAgY2FwYWJpbGl0eQotICoJQHNsZWVwX3N0YXRlOglBQ1BJIHN0YXRlCi0gKiBEaXNhYmxlIGFsbCB3YWt1cCBkZXZpY2VzJ3MgR1BFIGFuZCB3YWtldXAgY2FwYWJpbGl0eQorICogYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2UgLSBEaXNhYmxlIGRldmljZXMnIHdha2V1cCBjYXBhYmlsaXR5LgorICogQHNsZWVwX3N0YXRlOiBBQ1BJIHN5c3RlbSBzbGVlcCBzdGF0ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG9ubHkgYWZmZWN0cyBkZXZpY2VzIHdpdGggd2FrZXVwLnN0YXRlLmVuYWJsZWQgc2V0LCB3aGljaCBtZWFucworICogdGhhdCBpdCByZXZlcnNlcyB0aGUgY2hhbmdlcyBtYWRlIGJ5IGFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcHJlcCgpLgogICovCiB2b2lkIGFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlKHU4IHNsZWVwX3N0YXRlKQogewpAQCAtOTcsMzAgKzkyLDExIEBACiAJCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2ID0KIAkJCWNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgYWNwaV9kZXZpY2UsIHdha2V1cF9saXN0KTsKIAotCQlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLnZhbGlkKQorCQlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLnZhbGlkIHx8ICFkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkCisJCSAgICB8fCAoc2xlZXBfc3RhdGUgPiAodTMyKSBkZXYtPndha2V1cC5zbGVlcF9zdGF0ZSkpCiAJCQljb250aW51ZTsKIAotCQlpZiAoKCFkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkICYmICFkZXYtPndha2V1cC5wcmVwYXJlX2NvdW50KQotCQkgICAgfHwgc2xlZXBfc3RhdGUgPiAodTMyKSBkZXYtPndha2V1cC5zbGVlcF9zdGF0ZSkgewotCQkJaWYgKGRldi0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlKSB7Ci0JCQkJYWNwaV9zZXRfZ3BlX3R5cGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKLQkJCQkJCSAgZGV2LT53YWtldXAuZ3BlX251bWJlciwKLQkJCQkJCSAgQUNQSV9HUEVfVFlQRV9XQUtFX1JVTik7Ci0JCQkJLyogUmUtZW5hYmxlIGl0LCBzaW5jZSBzZXRfZ3BlX3R5cGUgd2lsbCBkaXNhYmxlIGl0ICovCi0JCQkJYWNwaV9lbmFibGVfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJCQlkZXYtPndha2V1cC5ncGVfbnVtYmVyKTsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0KIAkJYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoZGV2KTsKLQkJLyogTmV2ZXIgZGlzYWJsZSBydW4td2FrZSBHUEUgKi8KLQkJaWYgKCFkZXYtPndha2V1cC5mbGFncy5ydW5fd2FrZSkgewotCQkJYWNwaV9kaXNhYmxlX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCQkgZGV2LT53YWtldXAuZ3BlX251bWJlcik7Ci0JCQlhY3BpX2NsZWFyX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCSAgICAgICBkZXYtPndha2V1cC5ncGVfbnVtYmVyLCBBQ1BJX05PVF9JU1IpOwotCQl9CiAJfQogfQogCkBAIC0xMzQsMTMgKzExMCwxMSBAQAogCQkJCQkJICAgICAgIHN0cnVjdCBhY3BpX2RldmljZSwKIAkJCQkJCSAgICAgICB3YWtldXBfbGlzdCk7CiAJCS8qIEluIGNhc2UgdXNlciBkb2Vzbid0IGxvYWQgYnV0dG9uIGRyaXZlciAqLwotCQlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlIHx8IGRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQpCisJCWlmICghZGV2LT53YWtldXAuZmxhZ3MuYWx3YXlzX2VuYWJsZWQgfHwKKwkJICAgIGRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQpCiAJCQljb250aW51ZTsKLQkJYWNwaV9zZXRfZ3BlX3R5cGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKLQkJCQkgIGRldi0+d2FrZXVwLmdwZV9udW1iZXIsCi0JCQkJICBBQ1BJX0dQRV9UWVBFX1dBS0VfUlVOKTsKLQkJYWNwaV9lbmFibGVfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJZGV2LT53YWtldXAuZ3BlX251bWJlcik7CisgCQlhY3BpX2VuYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwgZGV2LT53YWtldXAuZ3BlX251bWJlciwKKyAJCQkJQUNQSV9HUEVfVFlQRV9XQUtFKTsKIAkJZGV2LT53YWtldXAuc3RhdGUuZW5hYmxlZCA9IDE7CiAJfQogCW11dGV4X3VubG9jaygmYWNwaV9kZXZpY2VfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmMgYi9kcml2ZXJzL2F0YS9haGNpLmMKaW5kZXggYjM0MzkwMy4uYTZhNzM2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuYwpAQCAtMzA4Miw4ICszMDgyLDE2IEBACiAJYWhjaV9zYXZlX2luaXRpYWxfY29uZmlnKHBkZXYsIGhwcml2KTsKIAogCS8qIHByZXBhcmUgaG9zdCAqLwotCWlmIChocHJpdi0+Y2FwICYgSE9TVF9DQVBfTkNRKQotCQlwaS5mbGFncyB8PSBBVEFfRkxBR19OQ1EgfCBBVEFfRkxBR19GUERNQV9BQTsKKwlpZiAoaHByaXYtPmNhcCAmIEhPU1RfQ0FQX05DUSkgeworCQlwaS5mbGFncyB8PSBBVEFfRkxBR19OQ1E7CisJCS8qIEF1dG8tYWN0aXZhdGUgb3B0aW1pemF0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIHN1cHBvcnRlZCBvbgorCQkgICBhbGwgQUhDSSBjb250cm9sbGVycyBpbmRpY2F0aW5nIE5DUSBzdXBwb3J0LCBidXQgaXQgc2VlbXMKKwkJICAgdG8gYmUgYnJva2VuIGF0IGxlYXN0IG9uIHNvbWUgTlZJRElBIE1DUDc5IGNoaXBzZXRzLgorCQkgICBVbnRpbCB3ZSBnZXQgaW5mbyBvbiB3aGljaCBOVklESUEgY2hpcHNldHMgZG9uJ3QgaGF2ZSB0aGlzCisJCSAgIGlzc3VlLCBpZiBhbnksIGRpc2FibGUgQUEgb24gYWxsIE5WSURJQSBBSENJcy4gKi8KKwkJaWYgKHBkZXYtPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX05WSURJQSkKKwkJCXBpLmZsYWdzIHw9IEFUQV9GTEFHX0ZQRE1BX0FBOworCX0KIAogCWlmIChocHJpdi0+Y2FwICYgSE9TVF9DQVBfUE1QKQogCQlwaS5mbGFncyB8PSBBVEFfRkxBR19QTVA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwppbmRleCBkMDk2ZmJjLi5iZWEwMDNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKQEAgLTEwOTcsNyArMTA5Nyw3IEBACiAJCWRldi0+ZmxhZ3MgfD0gQVRBX0RGTEFHX05PX1VOTE9BRDsKIAogCS8qIGNvbmZpZ3VyZSBtYXggc2VjdG9ycyAqLwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBkZXYtPm1heF9zZWN0b3JzKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgZGV2LT5tYXhfc2VjdG9ycyk7CiAKIAlpZiAoZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQVBJKSB7CiAJCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gc2Rldi0+cmVxdWVzdF9xdWV1ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwppbmRleCAwYzgyZDMzLi42ODRmZTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX252LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCkBAIC03NzIsNyArNzcyLDcgQEAKIAl9CiAKIAlibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeShzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBzZWdtZW50X2JvdW5kYXJ5KTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHNkZXYtPnJlcXVlc3RfcXVldWUsIHNnX3RhYmxlc2l6ZSk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBzZ190YWJsZXNpemUpOwogCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9JTkZPLAogCQkiRE1BIG1hc2sgMHglbGxYLCBzZWdtZW50IGJvdW5kYXJ5IDB4JWxYLCBodyBzZWdzICVodVxuIiwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZykqYXAtPmhvc3QtPmRldi0+ZG1hX21hc2ssCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwppbmRleCBhNTE0MmJkLi4wZTI2YTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZXN1bWUtdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2FzeW5jLmg+CiAKICNpbmNsdWRlICIuLi9iYXNlLmgiCiAjaW5jbHVkZSAicG93ZXIuaCIKQEAgLTQyLDYgKzQzLDcgQEAKIExJU1RfSEVBRChkcG1fbGlzdCk7CiAKIHN0YXRpYyBERUZJTkVfTVVURVgoZHBtX2xpc3RfbXR4KTsKK3N0YXRpYyBwbV9tZXNzYWdlX3QgcG1fdHJhbnNpdGlvbjsKIAogLyoKICAqIFNldCBvbmNlIHRoZSBwcmVwYXJhdGlvbiBvZiBkZXZpY2VzIGZvciBhIFBNIHRyYW5zaXRpb24gaGFzIHN0YXJ0ZWQsIHJlc2V0CkBAIC01Niw2ICs1OCw3IEBACiB2b2lkIGRldmljZV9wbV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlkZXYtPnBvd2VyLnN0YXR1cyA9IERQTV9PTjsKKwlpbml0X2NvbXBsZXRpb24oJmRldi0+cG93ZXIuY29tcGxldGlvbik7CiAJcG1fcnVudGltZV9pbml0KGRldik7CiB9CiAKQEAgLTExMSw2ICsxMTQsNyBAQAogCXByX2RlYnVnKCJQTTogUmVtb3ZpbmcgaW5mbyBmb3IgJXM6JXNcbiIsCiAJCSBkZXYtPmJ1cyA/IGRldi0+YnVzLT5uYW1lIDogIk5vIEJ1cyIsCiAJCSBrb2JqZWN0X25hbWUoJmRldi0+a29iaikpOworCWNvbXBsZXRlX2FsbCgmZGV2LT5wb3dlci5jb21wbGV0aW9uKTsKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwogCWxpc3RfZGVsX2luaXQoJmRldi0+cG93ZXIuZW50cnkpOwogCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKQEAgLTE4OCw2ICsxOTIsMzEgQEAKIH0KIAogLyoqCisgKiBkcG1fd2FpdCAtIFdhaXQgZm9yIGEgUE0gb3BlcmF0aW9uIHRvIGNvbXBsZXRlLgorICogQGRldjogRGV2aWNlIHRvIHdhaXQgZm9yLgorICogQGFzeW5jOiBJZiB1bnNldCwgd2FpdCBvbmx5IGlmIHRoZSBkZXZpY2UncyBwb3dlci5hc3luY19zdXNwZW5kIGZsYWcgaXMgc2V0LgorICovCitzdGF0aWMgdm9pZCBkcG1fd2FpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgYXN5bmMpCit7CisJaWYgKCFkZXYpCisJCXJldHVybjsKKworCWlmIChhc3luYyB8fCAocG1fYXN5bmNfZW5hYmxlZCAmJiBkZXYtPnBvd2VyLmFzeW5jX3N1c3BlbmQpKQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkZXYtPnBvd2VyLmNvbXBsZXRpb24pOworfQorCitzdGF0aWMgaW50IGRwbV93YWl0X2ZuKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYXN5bmNfcHRyKQoreworCWRwbV93YWl0KGRldiwgKigoYm9vbCAqKWFzeW5jX3B0cikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkcG1fd2FpdF9mb3JfY2hpbGRyZW4oc3RydWN0IGRldmljZSAqZGV2LCBib29sIGFzeW5jKQoreworICAgICAgIGRldmljZV9mb3JfZWFjaF9jaGlsZChkZXYsICZhc3luYywgZHBtX3dhaXRfZm4pOworfQorCisvKioKICAqIHBtX29wIC0gRXhlY3V0ZSB0aGUgUE0gb3BlcmF0aW9uIGFwcHJvcHJpYXRlIGZvciBnaXZlbiBQTSBldmVudC4KICAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCiAgKiBAb3BzOiBQTSBvcGVyYXRpb25zIHRvIGNob29zZSBmcm9tLgpAQCAtMjcxLDggKzMwMCw5IEBACiAJa3RpbWVfdCBjYWxsdGltZSwgZGVsdGEsIHJldHRpbWU7CiAKIAlpZiAoaW5pdGNhbGxfZGVidWcpIHsKLQkJcHJfaW5mbygiY2FsbGluZyAgJXNfaSsgQCAlaVxuIiwKLQkJCQlkZXZfbmFtZShkZXYpLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CisJCXByX2luZm8oImNhbGxpbmcgICVzKyBAICVpLCBwYXJlbnQ6ICVzXG4iLAorCQkJCWRldl9uYW1lKGRldiksIHRhc2tfcGlkX25yKGN1cnJlbnQpLAorCQkJCWRldi0+cGFyZW50ID8gZGV2X25hbWUoZGV2LT5wYXJlbnQpIDogIm5vbmUiKTsKIAkJY2FsbHRpbWUgPSBrdGltZV9nZXQoKTsKIAl9CiAKQEAgLTQ2OCwxNiArNDk4LDIwIEBACiAgKiBkZXZpY2VfcmVzdW1lIC0gRXhlY3V0ZSAicmVzdW1lIiBjYWxsYmFja3MgZm9yIGdpdmVuIGRldmljZS4KICAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCiAgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KKyAqIEBhc3luYzogSWYgdHJ1ZSwgdGhlIGRldmljZSBpcyBiZWluZyByZXN1bWVkIGFzeW5jaHJvbm91c2x5LgogICovCi1zdGF0aWMgaW50IGRldmljZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGRldmljZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUsIGJvb2wgYXN5bmMpCiB7CiAJaW50IGVycm9yID0gMDsKIAogCVRSQUNFX0RFVklDRShkZXYpOwogCVRSQUNFX1JFU1VNRSgwKTsKIAorCWRwbV93YWl0KGRldi0+cGFyZW50LCBhc3luYyk7CiAJZG93bigmZGV2LT5zZW0pOwogCisJZGV2LT5wb3dlci5zdGF0dXMgPSBEUE1fUkVTVU1JTkc7CisKIAlpZiAoZGV2LT5idXMpIHsKIAkJaWYgKGRldi0+YnVzLT5wbSkgewogCQkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAiIik7CkBAIC01MTAsMTEgKzU0NCwyOSBAQAogCX0KICBFbmQ6CiAJdXAoJmRldi0+c2VtKTsKKwljb21wbGV0ZV9hbGwoJmRldi0+cG93ZXIuY29tcGxldGlvbik7CiAKIAlUUkFDRV9SRVNVTUUoZXJyb3IpOwogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIHZvaWQgYXN5bmNfcmVzdW1lKHZvaWQgKmRhdGEsIGFzeW5jX2Nvb2tpZV90IGNvb2tpZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAoc3RydWN0IGRldmljZSAqKWRhdGE7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBkZXZpY2VfcmVzdW1lKGRldiwgcG1fdHJhbnNpdGlvbiwgdHJ1ZSk7CisJaWYgKGVycm9yKQorCQlwbV9kZXZfZXJyKGRldiwgcG1fdHJhbnNpdGlvbiwgIiBhc3luYyIsIGVycm9yKTsKKwlwdXRfZGV2aWNlKGRldik7Cit9CisKK3N0YXRpYyBib29sIGlzX2FzeW5jKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2LT5wb3dlci5hc3luY19zdXNwZW5kICYmIHBtX2FzeW5jX2VuYWJsZWQKKwkJJiYgIXBtX3RyYWNlX2lzX2VuYWJsZWQoKTsKK30KKwogLyoqCiAgKiBkcG1fcmVzdW1lIC0gRXhlY3V0ZSAicmVzdW1lIiBjYWxsYmFja3MgZm9yIG5vbi1zeXNkZXYgZGV2aWNlcy4KICAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgpAQCAtNTI1LDIxICs1NzcsMzMgQEAKIHN0YXRpYyB2b2lkIGRwbV9yZXN1bWUocG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJa3RpbWVfdCBzdGFydHRpbWUgPSBrdGltZV9nZXQoKTsKIAogCUlOSVRfTElTVF9IRUFEKCZsaXN0KTsKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwotCXdoaWxlICghbGlzdF9lbXB0eSgmZHBtX2xpc3QpKSB7Ci0JCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShkcG1fbGlzdC5uZXh0KTsKKwlwbV90cmFuc2l0aW9uID0gc3RhdGU7CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmRwbV9saXN0LCBwb3dlci5lbnRyeSkgeworCQlpZiAoZGV2LT5wb3dlci5zdGF0dXMgPCBEUE1fT0ZGKQorCQkJY29udGludWU7CisKKwkJSU5JVF9DT01QTEVUSU9OKGRldi0+cG93ZXIuY29tcGxldGlvbik7CisJCWlmIChpc19hc3luYyhkZXYpKSB7CisJCQlnZXRfZGV2aWNlKGRldik7CisJCQlhc3luY19zY2hlZHVsZShhc3luY19yZXN1bWUsIGRldik7CisJCX0KKwl9CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRwbV9saXN0KSkgeworCQlkZXYgPSB0b19kZXZpY2UoZHBtX2xpc3QubmV4dCk7CiAJCWdldF9kZXZpY2UoZGV2KTsKLQkJaWYgKGRldi0+cG93ZXIuc3RhdHVzID49IERQTV9PRkYpIHsKKwkJaWYgKGRldi0+cG93ZXIuc3RhdHVzID49IERQTV9PRkYgJiYgIWlzX2FzeW5jKGRldikpIHsKIAkJCWludCBlcnJvcjsKIAotCQkJZGV2LT5wb3dlci5zdGF0dXMgPSBEUE1fUkVTVU1JTkc7CiAJCQltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CiAKLQkJCWVycm9yID0gZGV2aWNlX3Jlc3VtZShkZXYsIHN0YXRlKTsKKwkJCWVycm9yID0gZGV2aWNlX3Jlc3VtZShkZXYsIHN0YXRlLCBmYWxzZSk7CiAKIAkJCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7CiAJCQlpZiAoZXJyb3IpCkBAIC01NTQsNiArNjE4LDcgQEAKIAl9CiAJbGlzdF9zcGxpY2UoJmxpc3QsICZkcG1fbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOworCWFzeW5jX3N5bmNocm9uaXplX2Z1bGwoKTsKIAlkcG1fc2hvd190aW1lKHN0YXJ0dGltZSwgc3RhdGUsIE5VTEwpOwogfQogCkBAIC03MzEsMTcgKzc5NiwyNCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGludCBhc3luY19lcnJvcjsKKwogLyoqCiAgKiBkZXZpY2Vfc3VzcGVuZCAtIEV4ZWN1dGUgInN1c3BlbmQiIGNhbGxiYWNrcyBmb3IgZ2l2ZW4gZGV2aWNlLgogICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KICAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgorICogQGFzeW5jOiBJZiB0cnVlLCB0aGUgZGV2aWNlIGlzIGJlaW5nIHN1c3BlbmRlZCBhc3luY2hyb25vdXNseS4KICAqLwotc3RhdGljIGludCBkZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgX19kZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSwgYm9vbCBhc3luYykKIHsKIAlpbnQgZXJyb3IgPSAwOwogCisJZHBtX3dhaXRfZm9yX2NoaWxkcmVuKGRldiwgYXN5bmMpOwogCWRvd24oJmRldi0+c2VtKTsKIAorCWlmIChhc3luY19lcnJvcikKKwkJZ290byBFbmQ7CisKIAlpZiAoZGV2LT5jbGFzcykgewogCQlpZiAoZGV2LT5jbGFzcy0+cG0pIHsKIAkJCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgImNsYXNzICIpOwpAQCAtNzcyLDEyICs4NDQsNDQgQEAKIAkJCWVycm9yID0gbGVnYWN5X3N1c3BlbmQoZGV2LCBzdGF0ZSwgZGV2LT5idXMtPnN1c3BlbmQpOwogCQl9CiAJfQorCisJaWYgKCFlcnJvcikKKwkJZGV2LT5wb3dlci5zdGF0dXMgPSBEUE1fT0ZGOworCiAgRW5kOgogCXVwKCZkZXYtPnNlbSk7CisJY29tcGxldGVfYWxsKCZkZXYtPnBvd2VyLmNvbXBsZXRpb24pOwogCiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgdm9pZCBhc3luY19zdXNwZW5kKHZvaWQgKmRhdGEsIGFzeW5jX2Nvb2tpZV90IGNvb2tpZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAoc3RydWN0IGRldmljZSAqKWRhdGE7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBfX2RldmljZV9zdXNwZW5kKGRldiwgcG1fdHJhbnNpdGlvbiwgdHJ1ZSk7CisJaWYgKGVycm9yKSB7CisJCXBtX2Rldl9lcnIoZGV2LCBwbV90cmFuc2l0aW9uLCAiIGFzeW5jIiwgZXJyb3IpOworCQlhc3luY19lcnJvciA9IGVycm9yOworCX0KKworCXB1dF9kZXZpY2UoZGV2KTsKK30KKworc3RhdGljIGludCBkZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJSU5JVF9DT01QTEVUSU9OKGRldi0+cG93ZXIuY29tcGxldGlvbik7CisKKwlpZiAocG1fYXN5bmNfZW5hYmxlZCAmJiBkZXYtPnBvd2VyLmFzeW5jX3N1c3BlbmQpIHsKKwkJZ2V0X2RldmljZShkZXYpOworCQlhc3luY19zY2hlZHVsZShhc3luY19zdXNwZW5kLCBkZXYpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gX19kZXZpY2Vfc3VzcGVuZChkZXYsIHBtX3RyYW5zaXRpb24sIGZhbHNlKTsKK30KKwogLyoqCiAgKiBkcG1fc3VzcGVuZCAtIEV4ZWN1dGUgInN1c3BlbmQiIGNhbGxiYWNrcyBmb3IgYWxsIG5vbi1zeXNkZXYgZGV2aWNlcy4KICAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgpAQCAtNzkwLDEzICs4OTQsMTUgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZsaXN0KTsKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOworCXBtX3RyYW5zaXRpb24gPSBzdGF0ZTsKKwlhc3luY19lcnJvciA9IDA7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZkcG1fbGlzdCkpIHsKIAkJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKGRwbV9saXN0LnByZXYpOwogCiAJCWdldF9kZXZpY2UoZGV2KTsKIAkJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOwogCi0JCWVycm9yID0gZGV2aWNlX3N1c3BlbmQoZGV2LCBzdGF0ZSk7CisJCWVycm9yID0gZGV2aWNlX3N1c3BlbmQoZGV2KTsKIAogCQltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwogCQlpZiAoZXJyb3IpIHsKQEAgLTgwNCwxMyArOTEwLDE3IEBACiAJCQlwdXRfZGV2aWNlKGRldik7CiAJCQlicmVhazsKIAkJfQotCQlkZXYtPnBvd2VyLnN0YXR1cyA9IERQTV9PRkY7CiAJCWlmICghbGlzdF9lbXB0eSgmZGV2LT5wb3dlci5lbnRyeSkpCiAJCQlsaXN0X21vdmUoJmRldi0+cG93ZXIuZW50cnksICZsaXN0KTsKIAkJcHV0X2RldmljZShkZXYpOworCQlpZiAoYXN5bmNfZXJyb3IpCisJCQlicmVhazsKIAl9CiAJbGlzdF9zcGxpY2UoJmxpc3QsIGRwbV9saXN0LnByZXYpOwogCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKKwlhc3luY19zeW5jaHJvbml6ZV9mdWxsKCk7CisJaWYgKCFlcnJvcikKKwkJZXJyb3IgPSBhc3luY19lcnJvcjsKIAlpZiAoIWVycm9yKQogCQlkcG1fc2hvd190aW1lKHN0YXJ0dGltZSwgc3RhdGUsIE5VTEwpOwogCXJldHVybiBlcnJvcjsKQEAgLTkzNiwzICsxMDQ2LDE0IEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXMoKTogJXBGIHJldHVybnMgJWRcbiIsIGZ1bmN0aW9uLCBmbiwgcmV0KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fc3VzcGVuZF9yZXBvcnRfcmVzdWx0KTsKKworLyoqCisgKiBkZXZpY2VfcG1fd2FpdF9mb3JfZGV2IC0gV2FpdCBmb3Igc3VzcGVuZC9yZXN1bWUgb2YgYSBkZXZpY2UgdG8gY29tcGxldGUuCisgKiBAZGV2OiBEZXZpY2UgdG8gd2FpdCBmb3IuCisgKiBAc3Vib3JkaW5hdGU6IERldmljZSB0aGF0IG5lZWRzIHRvIHdhaXQgZm9yIEBkZXYuCisgKi8KK3ZvaWQgZGV2aWNlX3BtX3dhaXRfZm9yX2RldihzdHJ1Y3QgZGV2aWNlICpzdWJvcmRpbmF0ZSwgc3RydWN0IGRldmljZSAqZGV2KQoreworCWRwbV93YWl0KGRldiwgc3Vib3JkaW5hdGUtPnBvd2VyLmFzeW5jX3N1c3BlbmQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGV2aWNlX3BtX3dhaXRfZm9yX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaCBiL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oCmluZGV4IGI4ZmExYWEuLmMwYmQwM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oCkBAIC0xMiwxMCArMTIsMTAgQEAKIAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogCi0vKgotICogbWFpbi5jCi0gKi8KKy8qIGtlcm5lbC9wb3dlci9tYWluLmMgKi8KK2V4dGVybiBpbnQgcG1fYXN5bmNfZW5hYmxlZDsKIAorLyogZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYyAqLwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZHBtX2xpc3Q7CS8qIFRoZSBhY3RpdmUgZGV2aWNlIGxpc3QgKi8KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlICp0b19kZXZpY2Uoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYwppbmRleCBmOGIwNDRlLi42MjZkZDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKQEAgLTEwMTEsNiArMTAxMSw1MCBAQAogRVhQT1JUX1NZTUJPTF9HUEwocG1fcnVudGltZV9lbmFibGUpOwogCiAvKioKKyAqIHBtX3J1bnRpbWVfZm9yYmlkIC0gQmxvY2sgcnVuLXRpbWUgUE0gb2YgYSBkZXZpY2UuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICoKKyAqIEluY3JlYXNlIHRoZSBkZXZpY2UncyB1c2FnZSBjb3VudCBhbmQgY2xlYXIgaXRzIHBvd2VyLnJ1bnRpbWVfYXV0byBmbGFnLAorICogc28gdGhhdCBpdCBjYW5ub3QgYmUgc3VzcGVuZGVkIGF0IHJ1biB0aW1lIHVudGlsIHBtX3J1bnRpbWVfYWxsb3coKSBpcyBjYWxsZWQKKyAqIGZvciBpdC4KKyAqLwordm9pZCBwbV9ydW50aW1lX2ZvcmJpZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwlpZiAoIWRldi0+cG93ZXIucnVudGltZV9hdXRvKQorCQlnb3RvIG91dDsKKworCWRldi0+cG93ZXIucnVudGltZV9hdXRvID0gZmFsc2U7CisJYXRvbWljX2luYygmZGV2LT5wb3dlci51c2FnZV9jb3VudCk7CisJX19wbV9ydW50aW1lX3Jlc3VtZShkZXYsIGZhbHNlKTsKKworIG91dDoKKwlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbV9ydW50aW1lX2ZvcmJpZCk7CisKKy8qKgorICogcG1fcnVudGltZV9hbGxvdyAtIFVuYmxvY2sgcnVuLXRpbWUgUE0gb2YgYSBkZXZpY2UuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICoKKyAqIERlY3JlYXNlIHRoZSBkZXZpY2UncyB1c2FnZSBjb3VudCBhbmQgc2V0IGl0cyBwb3dlci5ydW50aW1lX2F1dG8gZmxhZy4KKyAqLwordm9pZCBwbV9ydW50aW1lX2FsbG93KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfYXV0bykKKwkJZ290byBvdXQ7CisKKwlkZXYtPnBvd2VyLnJ1bnRpbWVfYXV0byA9IHRydWU7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRldi0+cG93ZXIudXNhZ2VfY291bnQpKQorCQlfX3BtX3J1bnRpbWVfaWRsZShkZXYpOworCisgb3V0OgorCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtX3J1bnRpbWVfYWxsb3cpOworCisvKioKICAqIHBtX3J1bnRpbWVfaW5pdCAtIEluaXRpYWxpemUgcnVuLXRpbWUgUE0gZmllbGRzIGluIGdpdmVuIGRldmljZSBvYmplY3QuCiAgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IHRvIGluaXRpYWxpemUuCiAgKi8KQEAgLTEwMjgsNiArMTA3Miw3IEBACiAKIAlhdG9taWNfc2V0KCZkZXYtPnBvd2VyLmNoaWxkX2NvdW50LCAwKTsKIAlwbV9zdXNwZW5kX2lnbm9yZV9jaGlsZHJlbihkZXYsIGZhbHNlKTsKKwlkZXYtPnBvd2VyLnJ1bnRpbWVfYXV0byA9IHRydWU7CiAKIAlkZXYtPnBvd2VyLnJlcXVlc3RfcGVuZGluZyA9IGZhbHNlOwogCWRldi0+cG93ZXIucmVxdWVzdCA9IFJQTV9SRVFfTk9ORTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3N5c2ZzLmMKaW5kZXggNTk2YWVlYy4uODZmZDkzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3N5c2ZzLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3N5c2ZzLmMKQEAgLTQsOSArNCwyNSBAQAogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgInBvd2VyLmgiCiAKIC8qCisgKgljb250cm9sIC0gUmVwb3J0L2NoYW5nZSBjdXJyZW50IHJ1bnRpbWUgUE0gc2V0dGluZyBvZiB0aGUgZGV2aWNlCisgKgorICoJUnVudGltZSBwb3dlciBtYW5hZ2VtZW50IG9mIGEgZGV2aWNlIGNhbiBiZSBibG9ja2VkIHdpdGggdGhlIGhlbHAgb2YKKyAqCXRoaXMgYXR0cmlidXRlLiAgQWxsIGRldmljZXMgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0d28gdmFsdWVzIGZvcgorICoJdGhlIHBvd2VyL2NvbnRyb2wgZmlsZToKKyAqCisgKgkgKyAiYXV0b1xuIiB0byBhbGxvdyB0aGUgZGV2aWNlIHRvIGJlIHBvd2VyIG1hbmFnZWQgYXQgcnVuIHRpbWU7CisgKgkgKyAib25cbiIgdG8gcHJldmVudCB0aGUgZGV2aWNlIGZyb20gYmVpbmcgcG93ZXIgbWFuYWdlZCBhdCBydW4gdGltZTsKKyAqCisgKglUaGUgZGVmYXVsdCBmb3IgYWxsIGRldmljZXMgaXMgImF1dG8iLCB3aGljaCBtZWFucyB0aGF0IGRldmljZXMgbWF5IGJlCisgKglzdWJqZWN0IHRvIGF1dG9tYXRpYyBwb3dlciBtYW5hZ2VtZW50LCBkZXBlbmRpbmcgb24gdGhlaXIgZHJpdmVycy4KKyAqCUNoYW5naW5nIHRoaXMgYXR0cmlidXRlIHRvICJvbiIgcHJldmVudHMgdGhlIGRyaXZlciBmcm9tIHBvd2VyIG1hbmFnaW5nCisgKgl0aGUgZGV2aWNlIGF0IHJ1biB0aW1lLiAgRG9pbmcgdGhhdCB3aGlsZSB0aGUgZGV2aWNlIGlzIHN1c3BlbmRlZCBjYXVzZXMKKyAqCWl0IHRvIGJlIHdva2VuIHVwLgorICoKICAqCXdha2V1cCAtIFJlcG9ydC9jaGFuZ2UgY3VycmVudCB3YWtldXAgb3B0aW9uIGZvciBkZXZpY2UKICAqCiAgKglTb21lIGRldmljZXMgc3VwcG9ydCAid2FrZXVwIiBldmVudHMsIHdoaWNoIGFyZSBoYXJkd2FyZSBzaWduYWxzCkBAIC0zOCwxMSArNTQsNjEgQEAKICAqCXdha2V1cCBldmVudHMgaW50ZXJuYWxseSAodW5sZXNzIHRoZXkgYXJlIGRpc2FibGVkKSwga2VlcGluZwogICoJdGhlaXIgaGFyZHdhcmUgaW4gbG93IHBvd2VyIG1vZGVzIHdoZW5ldmVyIHRoZXkncmUgdW51c2VkLiAgVGhpcwogICoJc2F2ZXMgcnVudGltZSBwb3dlciwgd2l0aG91dCByZXF1aXJpbmcgc3lzdGVtLXdpZGUgc2xlZXAgc3RhdGVzLgorICoKKyAqCWFzeW5jIC0gUmVwb3J0L2NoYW5nZSBjdXJyZW50IGFzeW5jIHN1c3BlbmQgc2V0dGluZyBmb3IgdGhlIGRldmljZQorICoKKyAqCUFzeW5jaHJvbm91cyBzdXNwZW5kIGFuZCByZXN1bWUgb2YgdGhlIGRldmljZSBkdXJpbmcgc3lzdGVtLXdpZGUgcG93ZXIKKyAqCXN0YXRlIHRyYW5zaXRpb25zIGNhbiBiZSBlbmFibGVkIGJ5IHdyaXRpbmcgImVuYWJsZWQiIHRvIHRoaXMgZmlsZS4KKyAqCUFuYWxvZ291c2x5LCBpZiAiZGlzYWJsZWQiIGlzIHdyaXR0ZW4gdG8gdGhpcyBmaWxlLCB0aGUgZGV2aWNlIHdpbGwgYmUKKyAqCXN1c3BlbmRlZCBhbmQgcmVzdW1lZCBzeW5jaHJvbm91c2x5LgorICoKKyAqCUFsbCBkZXZpY2VzIGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdHdvIHZhbHVlcyBmb3IgcG93ZXIvYXN5bmM6CisgKgorICoJICsgImVuYWJsZWRcbiIgdG8gcGVybWl0IHRoZSBhc3luY2hyb25vdXMgc3VzcGVuZC9yZXN1bWUgb2YgdGhlIGRldmljZTsKKyAqCSArICJkaXNhYmxlZFxuIiB0byBmb3JiaWQgaXQ7CisgKgorICoJTk9URTogSXQgZ2VuZXJhbGx5IGlzIHVuc2FmZSB0byBwZXJtaXQgdGhlIGFzeW5jaHJvbm91cyBzdXNwZW5kL3Jlc3VtZQorICoJb2YgYSBkZXZpY2UgdW5sZXNzIGl0IGlzIGNlcnRhaW4gdGhhdCBhbGwgb2YgdGhlIFBNIGRlcGVuZGVuY2llcyBvZiB0aGUKKyAqCWRldmljZSBhcmUga25vd24gdG8gdGhlIFBNIGNvcmUuICBIb3dldmVyLCBmb3Igc29tZSBkZXZpY2VzIHRoaXMKKyAqCWF0dHJpYnV0ZSBpcyBzZXQgdG8gImVuYWJsZWQiIGJ5IGJ1cyB0eXBlIGNvZGUgb3IgZGV2aWNlIGRyaXZlcnMgYW5kIGluCisgKgl0aGF0IGNhc2VzIGl0IHNob3VsZCBiZSBzYWZlIHRvIGxlYXZlIHRoZSBkZWZhdWx0IHZhbHVlLgogICovCiAKIHN0YXRpYyBjb25zdCBjaGFyIGVuYWJsZWRbXSA9ICJlbmFibGVkIjsKIHN0YXRpYyBjb25zdCBjaGFyIGRpc2FibGVkW10gPSAiZGlzYWJsZWQiOwogCisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKK3N0YXRpYyBjb25zdCBjaGFyIGN0cmxfYXV0b1tdID0gImF1dG8iOworc3RhdGljIGNvbnN0IGNoYXIgY3RybF9vbltdID0gIm9uIjsKKworc3RhdGljIHNzaXplX3QgY29udHJvbF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLAorCQkJCWRldi0+cG93ZXIucnVudGltZV9hdXRvID8gY3RybF9hdXRvIDogY3RybF9vbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNvbnRyb2xfc3RvcmUoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKiBidWYsIHNpemVfdCBuKQoreworCWNoYXIgKmNwOworCWludCBsZW4gPSBuOworCisJY3AgPSBtZW1jaHIoYnVmLCAnXG4nLCBuKTsKKwlpZiAoY3ApCisJCWxlbiA9IGNwIC0gYnVmOworCWlmIChsZW4gPT0gc2l6ZW9mIGN0cmxfYXV0byAtIDEgJiYgc3RybmNtcChidWYsIGN0cmxfYXV0bywgbGVuKSA9PSAwKQorCQlwbV9ydW50aW1lX2FsbG93KGRldik7CisJZWxzZSBpZiAobGVuID09IHNpemVvZiBjdHJsX29uIC0gMSAmJiBzdHJuY21wKGJ1ZiwgY3RybF9vbiwgbGVuKSA9PSAwKQorCQlwbV9ydW50aW1lX2ZvcmJpZChkZXYpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihjb250cm9sLCAwNjQ0LCBjb250cm9sX3Nob3csIGNvbnRyb2xfc3RvcmUpOworI2VuZGlmCisKIHN0YXRpYyBzc2l6ZV90CiB3YWtlX3Nob3coc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKiBidWYpCiB7CkBAIC03Nyw5ICsxNDMsNDMgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKHdha2V1cCwgMDY0NCwgd2FrZV9zaG93LCB3YWtlX3N0b3JlKTsKIAorI2lmZGVmIENPTkZJR19QTV9TTEVFUF9BRFZBTkNFRF9ERUJVRworc3RhdGljIHNzaXplX3QgYXN5bmNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsCisJCQlkZXZpY2VfYXN5bmNfc3VzcGVuZF9lbmFibGVkKGRldikgPyBlbmFibGVkIDogZGlzYWJsZWQpOworfQorCitzdGF0aWMgc3NpemVfdCBhc3luY19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikKK3sKKwljaGFyICpjcDsKKwlpbnQgbGVuID0gbjsKKworCWNwID0gbWVtY2hyKGJ1ZiwgJ1xuJywgbik7CisJaWYgKGNwKQorCQlsZW4gPSBjcCAtIGJ1ZjsKKwlpZiAobGVuID09IHNpemVvZiBlbmFibGVkIC0gMSAmJiBzdHJuY21wKGJ1ZiwgZW5hYmxlZCwgbGVuKSA9PSAwKQorCQlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoZGV2KTsKKwllbHNlIGlmIChsZW4gPT0gc2l6ZW9mIGRpc2FibGVkIC0gMSAmJiBzdHJuY21wKGJ1ZiwgZGlzYWJsZWQsIGxlbikgPT0gMCkKKwkJZGV2aWNlX2Rpc2FibGVfYXN5bmNfc3VzcGVuZChkZXYpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihhc3luYywgMDY0NCwgYXN5bmNfc2hvdywgYXN5bmNfc3RvcmUpOworI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUF9BRFZBTkNFRF9ERUJVRyAqLwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIHBvd2VyX2F0dHJzW10gPSB7CisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKwkmZGV2X2F0dHJfY29udHJvbC5hdHRyLAorI2VuZGlmCiAJJmRldl9hdHRyX3dha2V1cC5hdHRyLAorI2lmZGVmIENPTkZJR19QTV9TTEVFUF9BRFZBTkNFRF9ERUJVRworCSZkZXZfYXR0cl9hc3luYy5hdHRyLAorI2VuZGlmCiAJTlVMTCwKIH07CiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwbV9hdHRyX2dyb3VwID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9EQUM5NjAuYyBiL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKaW5kZXggY2UxZmE5Mi4uNDU5ZjFiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9EQUM5NjAuYworKysgYi9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCkBAIC0yNTM0LDggKzI1MzQsOCBAQAogICAJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChSZXF1ZXN0UXVldWUsIENvbnRyb2xsZXItPkJvdW5jZUJ1ZmZlckxpbWl0KTsKICAgCVJlcXVlc3RRdWV1ZS0+cXVldWVkYXRhID0gQ29udHJvbGxlcjsKICAgCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMoUmVxdWVzdFF1ZXVlLCBDb250cm9sbGVyLT5Ecml2ZXJTY2F0dGVyR2F0aGVyTGltaXQpOwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhSZXF1ZXN0UXVldWUsIENvbnRyb2xsZXItPkRyaXZlclNjYXR0ZXJHYXRoZXJMaW1pdCk7Ci0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKFJlcXVlc3RRdWV1ZSwgQ29udHJvbGxlci0+TWF4QmxvY2tzUGVyQ29tbWFuZCk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhSZXF1ZXN0UXVldWUsIENvbnRyb2xsZXItPkRyaXZlclNjYXR0ZXJHYXRoZXJMaW1pdCk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKFJlcXVlc3RRdWV1ZSwgQ29udHJvbGxlci0+TWF4QmxvY2tzUGVyQ29tbWFuZCk7CiAJZGlzay0+cXVldWUgPSBSZXF1ZXN0UXVldWU7CiAJc3ByaW50ZihkaXNrLT5kaXNrX25hbWUsICJyZC9jJWRkJWQiLCBDb250cm9sbGVyLT5Db250cm9sbGVyTnVtYmVyLCBuKTsKIAlkaXNrLT5tYWpvciA9IE1ham9yTnVtYmVyOwpAQCAtNzEzNCw3ICs3MTM0LDcgQEAKIAkuTWVtb3J5V2luZG93U2l6ZSA9CURBQzk2MF9QRF9SZWdpc3RlcldpbmRvd1NpemUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgREFDOTYwX2lkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgREFDOTYwX2lkX3RhYmxlW10gPSB7CiAJewogCQkudmVuZG9yIAk9IFBDSV9WRU5ET1JfSURfTVlMRVgsCiAJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9NWUxFWF9EQUM5NjBfR0VNLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMgYi9kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYwppbmRleCBhNWFmMWQ2Li5lMzVjZjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYwpAQCAtMTQ3MCw4ICsxNDcwLDYgQEAKIAogdm9pZCBkb19mZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICogcSkKIHsKLSAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQogCURQUklOVCgoImRvX2ZkX3JlcXVlc3QgZm9yIHBpZCAlZFxuIixjdXJyZW50LT5waWQpKTsKIAl3aGlsZSggZmRjX2J1c3kgKSBzbGVlcF9vbiggJmZkY193YWl0ICk7CiAJZmRjX2J1c3kgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9icmQuYyBiL2RyaXZlcnMvYmxvY2svYnJkLmMKaW5kZXggNGY2ODg0My4uYzZkZGVhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9icmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL2JyZC5jCkBAIC00MzQsNyArNDM0LDcgQEAKIAkJZ290byBvdXRfZnJlZV9kZXY7CiAJYmxrX3F1ZXVlX21ha2VfcmVxdWVzdChicmQtPmJyZF9xdWV1ZSwgYnJkX21ha2VfcmVxdWVzdCk7CiAJYmxrX3F1ZXVlX29yZGVyZWQoYnJkLT5icmRfcXVldWUsIFFVRVVFX09SREVSRURfVEFHLCBOVUxMKTsKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMoYnJkLT5icmRfcXVldWUsIDEwMjQpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhicmQtPmJyZF9xdWV1ZSwgMTAyNCk7CiAJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChicmQtPmJyZF9xdWV1ZSwgQkxLX0JPVU5DRV9BTlkpOwogCiAJZGlzayA9IGJyZC0+YnJkX2Rpc2sgPSBhbGxvY19kaXNrKDEgPDwgcGFydF9zaGlmdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKaW5kZXggOTI5MTYxNC4uOWUzYWYzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzcy5jCisrKyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwpAQCAtMjU3LDYgKzI1Nyw3OSBAQAogCWhsaXN0X2RlbF9pbml0KCZjLT5saXN0KTsKIH0KIAorc3RhdGljIHZvaWQgY2Npc3NfZnJlZV9zZ19jaGFpbl9ibG9ja3MoU0dEZXNjcmlwdG9yX3N0cnVjdCAqKmNtZF9zZ19saXN0LAorCWludCBucl9jbWRzKQoreworCWludCBpOworCisJaWYgKCFjbWRfc2dfbGlzdCkKKwkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCBucl9jbWRzOyBpKyspIHsKKwkJa2ZyZWUoY21kX3NnX2xpc3RbaV0pOworCQljbWRfc2dfbGlzdFtpXSA9IE5VTEw7CisJfQorCWtmcmVlKGNtZF9zZ19saXN0KTsKK30KKworc3RhdGljIFNHRGVzY3JpcHRvcl9zdHJ1Y3QgKipjY2lzc19hbGxvY2F0ZV9zZ19jaGFpbl9ibG9ja3MoCisJY3Rscl9pbmZvX3QgKmgsIGludCBjaGFpbnNpemUsIGludCBucl9jbWRzKQoreworCWludCBqOworCVNHRGVzY3JpcHRvcl9zdHJ1Y3QgKipjbWRfc2dfbGlzdDsKKworCWlmIChjaGFpbnNpemUgPD0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwljbWRfc2dfbGlzdCA9IGttYWxsb2Moc2l6ZW9mKCpjbWRfc2dfbGlzdCkgKiBucl9jbWRzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZF9zZ19saXN0KQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEJ1aWxkIHVwIGNoYWluIGJsb2NrcyBmb3IgZWFjaCBjb21tYW5kICovCisJZm9yIChqID0gMDsgaiA8IG5yX2NtZHM7IGorKykgeworCQkvKiBOZWVkIGEgYmxvY2sgb2YgY2hhaW5zaXplZCBzL2cgZWxlbWVudHMuICovCisJCWNtZF9zZ19saXN0W2pdID0ga21hbGxvYygoY2hhaW5zaXplICoKKwkJCXNpemVvZigqY21kX3NnX2xpc3Rbal0pKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghY21kX3NnX2xpc3Rbal0pIHsKKwkJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgIkNhbm5vdCBnZXQgbWVtb3J5ICIKKwkJCQkiZm9yIHMvZyBjaGFpbnMuXG4iKTsKKwkJCWdvdG8gY2xlYW47CisJCX0KKwl9CisJcmV0dXJuIGNtZF9zZ19saXN0OworY2xlYW46CisJY2Npc3NfZnJlZV9zZ19jaGFpbl9ibG9ja3MoY21kX3NnX2xpc3QsIG5yX2NtZHMpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBjY2lzc191bm1hcF9zZ19jaGFpbl9ibG9jayhjdGxyX2luZm9fdCAqaCwgQ29tbWFuZExpc3Rfc3RydWN0ICpjKQoreworCVNHRGVzY3JpcHRvcl9zdHJ1Y3QgKmNoYWluX3NnOworCXU2NGJpdCB0ZW1wNjQ7CisKKwlpZiAoYy0+SGVhZGVyLlNHVG90YWwgPD0gaC0+bWF4X2NtZF9zZ2VudHJpZXMpCisJCXJldHVybjsKKworCWNoYWluX3NnID0gJmMtPlNHW2gtPm1heF9jbWRfc2dlbnRyaWVzIC0gMV07CisJdGVtcDY0LnZhbDMyLmxvd2VyID0gY2hhaW5fc2ctPkFkZHIubG93ZXI7CisJdGVtcDY0LnZhbDMyLnVwcGVyID0gY2hhaW5fc2ctPkFkZHIudXBwZXI7CisJcGNpX3VubWFwX3NpbmdsZShoLT5wZGV2LCB0ZW1wNjQudmFsLCBjaGFpbl9zZy0+TGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKK30KKworc3RhdGljIHZvaWQgY2Npc3NfbWFwX3NnX2NoYWluX2Jsb2NrKGN0bHJfaW5mb190ICpoLCBDb21tYW5kTGlzdF9zdHJ1Y3QgKmMsCisJU0dEZXNjcmlwdG9yX3N0cnVjdCAqY2hhaW5fYmxvY2ssIGludCBsZW4pCit7CisJU0dEZXNjcmlwdG9yX3N0cnVjdCAqY2hhaW5fc2c7CisJdTY0Yml0IHRlbXA2NDsKKworCWNoYWluX3NnID0gJmMtPlNHW2gtPm1heF9jbWRfc2dlbnRyaWVzIC0gMV07CisJY2hhaW5fc2ctPkV4dCA9IENDSVNTX1NHX0NIQUlOOworCWNoYWluX3NnLT5MZW4gPSBsZW47CisJdGVtcDY0LnZhbCA9IHBjaV9tYXBfc2luZ2xlKGgtPnBkZXYsIGNoYWluX2Jsb2NrLCBsZW4sCisJCQkJUENJX0RNQV9UT0RFVklDRSk7CisJY2hhaW5fc2ctPkFkZHIubG93ZXIgPSB0ZW1wNjQudmFsMzIubG93ZXI7CisJY2hhaW5fc2ctPkFkZHIudXBwZXIgPSB0ZW1wNjQudmFsMzIudXBwZXI7Cit9CisKICNpbmNsdWRlICJjY2lzc19zY3NpLmMiCQkvKiBGb3IgU0NTSSB0YXBlIHN1cHBvcnQgKi8KIAogc3RhdGljIGNvbnN0IGNoYXIgKnJhaWRfbGFiZWxbXSA9IHsgIjAiLCAiNCIsICIxKDErMCkiLCAiNSIsICI1KzEiLCAiQURHIiwKQEAgLTEzNDQsMjYgKzE0MTcsMjcgQEAKIAkJCQlrZnJlZShidWZmKTsKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCX0KLQkJCS8vIEZpbGwgaW4gdGhlIGNvbW1hbmQgdHlwZQorCQkJLyogRmlsbCBpbiB0aGUgY29tbWFuZCB0eXBlICovCiAJCQljLT5jbWRfdHlwZSA9IENNRF9JT0NUTF9QRU5EOwotCQkJLy8gRmlsbCBpbiBDb21tYW5kIEhlYWRlcgotCQkJYy0+SGVhZGVyLlJlcGx5UXVldWUgPSAwOwkvLyB1bnVzZWQgaW4gc2ltcGxlIG1vZGUKLQkJCWlmIChpb2NvbW1hbmQuYnVmX3NpemUgPiAwKQkvLyBidWZmZXIgdG8gZmlsbAorCQkJLyogRmlsbCBpbiBDb21tYW5kIEhlYWRlciAqLworCQkJYy0+SGVhZGVyLlJlcGx5UXVldWUgPSAwOyAgIC8qIHVudXNlZCBpbiBzaW1wbGUgbW9kZSAqLworCQkJaWYgKGlvY29tbWFuZC5idWZfc2l6ZSA+IDApIC8qIGJ1ZmZlciB0byBmaWxsICovCiAJCQl7CiAJCQkJYy0+SGVhZGVyLlNHTGlzdCA9IDE7CiAJCQkJYy0+SGVhZGVyLlNHVG90YWwgPSAxOwotCQkJfSBlbHNlCS8vIG5vIGJ1ZmZlcnMgdG8gZmlsbAorCQkJfSBlbHNlIC8qIG5vIGJ1ZmZlcnMgdG8gZmlsbCAqLwogCQkJewogCQkJCWMtPkhlYWRlci5TR0xpc3QgPSAwOwogCQkJCWMtPkhlYWRlci5TR1RvdGFsID0gMDsKIAkJCX0KIAkJCWMtPkhlYWRlci5MVU4gPSBpb2NvbW1hbmQuTFVOX2luZm87Ci0JCQljLT5IZWFkZXIuVGFnLmxvd2VyID0gYy0+YnVzYWRkcjsJLy8gdXNlIHRoZSBrZXJuZWwgYWRkcmVzcyB0aGUgY21kIGJsb2NrIGZvciB0YWcKKwkJCS8qIHVzZSB0aGUga2VybmVsIGFkZHJlc3MgdGhlIGNtZCBibG9jayBmb3IgdGFnICovCisJCQljLT5IZWFkZXIuVGFnLmxvd2VyID0gYy0+YnVzYWRkcjsKIAotCQkJLy8gRmlsbCBpbiBSZXF1ZXN0IGJsb2NrCisJCQkvKiBGaWxsIGluIFJlcXVlc3QgYmxvY2sgKi8KIAkJCWMtPlJlcXVlc3QgPSBpb2NvbW1hbmQuUmVxdWVzdDsKIAotCQkJLy8gRmlsbCBpbiB0aGUgc2NhdHRlciBnYXRoZXIgaW5mb3JtYXRpb24KKwkJCS8qIEZpbGwgaW4gdGhlIHNjYXR0ZXIgZ2F0aGVyIGluZm9ybWF0aW9uICovCiAJCQlpZiAoaW9jb21tYW5kLmJ1Zl9zaXplID4gMCkgewogCQkJCXRlbXA2NC52YWwgPSBwY2lfbWFwX3NpbmdsZShob3N0LT5wZGV2LCBidWZmLAogCQkJCQlpb2NvbW1hbmQuYnVmX3NpemUsCkBAIC0xMzcxLDcgKzE0NDUsNyBAQAogCQkJCWMtPlNHWzBdLkFkZHIubG93ZXIgPSB0ZW1wNjQudmFsMzIubG93ZXI7CiAJCQkJYy0+U0dbMF0uQWRkci51cHBlciA9IHRlbXA2NC52YWwzMi51cHBlcjsKIAkJCQljLT5TR1swXS5MZW4gPSBpb2NvbW1hbmQuYnVmX3NpemU7Ci0JCQkJYy0+U0dbMF0uRXh0ID0gMDsJLy8gd2UgYXJlIG5vdCBjaGFpbmluZworCQkJCWMtPlNHWzBdLkV4dCA9IDA7ICAvKiB3ZSBhcmUgbm90IGNoYWluaW5nICovCiAJCQl9CiAJCQljLT53YWl0aW5nID0gJndhaXQ7CiAKQEAgLTE2NzAsMTQgKzE3NDQsOSBAQAogCS8qIHVubWFwIHRoZSBETUEgbWFwcGluZyBmb3IgYWxsIHRoZSBzY2F0dGVyIGdhdGhlciBlbGVtZW50cyAqLwogCWZvciAoaSA9IDA7IGkgPCBjbWQtPkhlYWRlci5TR0xpc3Q7IGkrKykgewogCQlpZiAoY3Vycl9zZ1tzZ19pbmRleF0uRXh0ID09IENDSVNTX1NHX0NIQUlOKSB7Ci0JCQl0ZW1wNjQudmFsMzIubG93ZXIgPSBjbWQtPlNHW2ldLkFkZHIubG93ZXI7Ci0JCQl0ZW1wNjQudmFsMzIudXBwZXIgPSBjbWQtPlNHW2ldLkFkZHIudXBwZXI7Ci0JCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaC0+cGRldiwgdGVtcDY0LnZhbCwKLQkJCQkJCWNtZC0+U0dbaV0uTGVuLCBkZGlyKTsKLQkJCXBjaV91bm1hcF9zaW5nbGUoaC0+cGRldiwgdGVtcDY0LnZhbCwKLQkJCQkJCWNtZC0+U0dbaV0uTGVuLCBkZGlyKTsKKwkJCWNjaXNzX3VubWFwX3NnX2NoYWluX2Jsb2NrKGgsIGNtZCk7CiAJCQkvKiBQb2ludCB0byB0aGUgbmV4dCBibG9jayAqLwotCQkJY3Vycl9zZyA9IGgtPmNtZF9zZ19saXN0W2NtZC0+Y21kaW5kZXhdLT5zZ2NoYWluOworCQkJY3Vycl9zZyA9IGgtPmNtZF9zZ19saXN0W2NtZC0+Y21kaW5kZXhdOwogCQkJc2dfaW5kZXggPSAwOwogCQl9CiAJCXRlbXA2NC52YWwzMi5sb3dlciA9IGN1cnJfc2dbc2dfaW5kZXhdLkFkZHIubG93ZXI7CkBAIC0xNzk2LDEyICsxODY1LDkgQEAKIAlibGtfcXVldWVfYm91bmNlX2xpbWl0KGRpc2stPnF1ZXVlLCBoLT5wZGV2LT5kbWFfbWFzayk7CiAKIAkvKiBUaGlzIGlzIGEgaGFyZHdhcmUgaW1wb3NlZCBsaW1pdC4gKi8KLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKGRpc2stPnF1ZXVlLCBoLT5tYXhzZ2VudHJpZXMpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMoZGlzay0+cXVldWUsIGgtPm1heHNnZW50cmllcyk7CiAKLQkvKiBUaGlzIGlzIGEgbGltaXQgaW4gdGhlIGRyaXZlciBhbmQgY291bGQgYmUgZWxpbWluYXRlZC4gKi8KLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMoZGlzay0+cXVldWUsIGgtPm1heHNnZW50cmllcyk7Ci0KLQlibGtfcXVldWVfbWF4X3NlY3RvcnMoZGlzay0+cXVldWUsIGgtPmNjaXNzX21heF9zZWN0b3JzKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoZGlzay0+cXVldWUsIGgtPmNjaXNzX21heF9zZWN0b3JzKTsKIAogCWJsa19xdWV1ZV9zb2Z0aXJxX2RvbmUoZGlzay0+cXVldWUsIGNjaXNzX3NvZnRpcnFfZG9uZSk7CiAKQEAgLTI0MjUsNyArMjQ5MSw3IEBACiAJCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9SRUFEOwogCQkJYy0+UmVxdWVzdC5UaW1lb3V0ID0gMDsKIAkJCWMtPlJlcXVlc3QuQ0RCWzBdID0gY21kOwotCQkJYy0+UmVxdWVzdC5DREJbNl0gPSAoc2l6ZSA+PiAyNCkgJiAweEZGOwkvL01TQgorCQkJYy0+UmVxdWVzdC5DREJbNl0gPSAoc2l6ZSA+PiAyNCkgJiAweEZGOyAvKiBNU0IgKi8KIAkJCWMtPlJlcXVlc3QuQ0RCWzddID0gKHNpemUgPj4gMTYpICYgMHhGRjsKIAkJCWMtPlJlcXVlc3QuQ0RCWzhdID0gKHNpemUgPj4gOCkgJiAweEZGOwogCQkJYy0+UmVxdWVzdC5DREJbOV0gPSBzaXplICYgMHhGRjsKQEAgLTI2OTQsNyArMjc2MCw3IEBACiAJCQkgICAgICAgImNjaXNzOiByZWFkaW5nIGdlb21ldHJ5IGZhaWxlZCwgdm9sdW1lICIKIAkJCSAgICAgICAiZG9lcyBub3Qgc3VwcG9ydCByZWFkaW5nIGdlb21ldHJ5XG4iKTsKIAkJCWRydi0+aGVhZHMgPSAyNTU7Ci0JCQlkcnYtPnNlY3RvcnMgPSAzMjsJLy8gU2VjdG9ycyBwZXIgdHJhY2sKKwkJCWRydi0+c2VjdG9ycyA9IDMyOwkvKiBTZWN0b3JzIHBlciB0cmFjayAqLwogCQkJZHJ2LT5jeWxpbmRlcnMgPSB0b3RhbF9zaXplICsgMTsKIAkJCWRydi0+cmFpZF9sZXZlbCA9IFJBSURfVU5LTk9XTjsKIAkJfSBlbHNlIHsKQEAgLTMwODIsNyArMzE0OCw2IEBACiAJU0dEZXNjcmlwdG9yX3N0cnVjdCAqY3Vycl9zZzsKIAlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2OwogCWludCBpLCBkaXI7Ci0JaW50IG5zZWcgPSAwOwogCWludCBzZ19pbmRleCA9IDA7CiAJaW50IGNoYWluZWQgPSAwOwogCkBAIC0zMTEyLDE5ICszMTc3LDE5IEBACiAKIAkvKiBmaWxsIGluIHRoZSByZXF1ZXN0ICovCiAJZHJ2ID0gY3JlcS0+cnFfZGlzay0+cHJpdmF0ZV9kYXRhOwotCWMtPkhlYWRlci5SZXBseVF1ZXVlID0gMDsJLy8gdW51c2VkIGluIHNpbXBsZSBtb2RlCisJYy0+SGVhZGVyLlJlcGx5UXVldWUgPSAwOwkvKiB1bnVzZWQgaW4gc2ltcGxlIG1vZGUgKi8KIAkvKiBnb3QgY29tbWFuZCBmcm9tIHBvb2wsIHNvIHVzZSB0aGUgY29tbWFuZCBibG9jayBpbmRleCBpbnN0ZWFkICovCiAJLyogZm9yIGRpcmVjdCBsb29rdXBzLiAqLwogCS8qIFRoZSBmaXJzdCAyIGJpdHMgYXJlIHJlc2VydmVkIGZvciBjb250cm9sbGVyIGVycm9yIHJlcG9ydGluZy4gKi8KIAljLT5IZWFkZXIuVGFnLmxvd2VyID0gKGMtPmNtZGluZGV4IDw8IDMpOwogCWMtPkhlYWRlci5UYWcubG93ZXIgfD0gMHgwNDsJLyogZmxhZyBmb3IgZGlyZWN0IGxvb2t1cC4gKi8KIAltZW1jcHkoJmMtPkhlYWRlci5MVU4sIGRydi0+THVuSUQsIHNpemVvZihkcnYtPkx1bklEKSk7Ci0JYy0+UmVxdWVzdC5DREJMZW4gPSAxMDsJLy8gMTIgYnl0ZSBjb21tYW5kcyBub3QgaW4gRlcgeWV0OwotCWMtPlJlcXVlc3QuVHlwZS5UeXBlID0gVFlQRV9DTUQ7CS8vIEl0IGlzIGEgY29tbWFuZC4KKwljLT5SZXF1ZXN0LkNEQkxlbiA9IDEwOwkvKiAxMiBieXRlIGNvbW1hbmRzIG5vdCBpbiBGVyB5ZXQ7ICovCisJYy0+UmVxdWVzdC5UeXBlLlR5cGUgPSBUWVBFX0NNRDsJLyogSXQgaXMgYSBjb21tYW5kLiAqLwogCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKIAljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0KIAkgICAgKHJxX2RhdGFfZGlyKGNyZXEpID09IFJFQUQpID8gWEZFUl9SRUFEIDogWEZFUl9XUklURTsKLQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOwkvLyBEb24ndCB0aW1lIG91dAorCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7CS8qIERvbid0IHRpbWUgb3V0ICovCiAJYy0+UmVxdWVzdC5DREJbMF0gPQogCSAgICAocnFfZGF0YV9kaXIoY3JlcSkgPT0gUkVBRCkgPyBoLT5jY2lzc19yZWFkIDogaC0+Y2Npc3Nfd3JpdGU7CiAJc3RhcnRfYmxrID0gYmxrX3JxX3BvcyhjcmVxKTsKQEAgLTMxNDksMTMgKzMyMTQsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBzZWc7IGkrKykgewogCQlpZiAoKChzZ19pbmRleCsxKSA9PSAoaC0+bWF4X2NtZF9zZ2VudHJpZXMpKSAmJgogCQkJIWNoYWluZWQgJiYgKChzZWcgLSBpKSA+IDEpKSB7Ci0JCQluc2VnID0gc2VnIC0gaTsKLQkJCWN1cnJfc2dbc2dfaW5kZXhdLkxlbiA9IChuc2VnKSAqCi0JCQkJCXNpemVvZihTR0Rlc2NyaXB0b3Jfc3RydWN0KTsKLQkJCWN1cnJfc2dbc2dfaW5kZXhdLkV4dCA9IENDSVNTX1NHX0NIQUlOOwotCiAJCQkvKiBQb2ludCB0byBuZXh0IGNoYWluIGJsb2NrLiAqLwotCQkJY3Vycl9zZyA9IGgtPmNtZF9zZ19saXN0W2MtPmNtZGluZGV4XS0+c2djaGFpbjsKKwkJCWN1cnJfc2cgPSBoLT5jbWRfc2dfbGlzdFtjLT5jbWRpbmRleF07CiAJCQlzZ19pbmRleCA9IDA7CiAJCQljaGFpbmVkID0gMTsKIAkJfQpAQCAtMzE2NiwzMSArMzIyNiwxMiBAQAogCQljdXJyX3NnW3NnX2luZGV4XS5BZGRyLmxvd2VyID0gdGVtcDY0LnZhbDMyLmxvd2VyOwogCQljdXJyX3NnW3NnX2luZGV4XS5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOwogCQljdXJyX3NnW3NnX2luZGV4XS5FeHQgPSAwOyAgLyogd2UgYXJlIG5vdCBjaGFpbmluZyAqLwotCiAJCSsrc2dfaW5kZXg7CiAJfQotCi0JaWYgKGNoYWluZWQpIHsKLQkJaW50IGxlbjsKLQkJY3Vycl9zZyA9IGMtPlNHOwotCQlzZ19pbmRleCA9IGgtPm1heF9jbWRfc2dlbnRyaWVzIC0gMTsKLQkJbGVuID0gY3Vycl9zZ1tzZ19pbmRleF0uTGVuOwotCQkvKiBTZXR1cCBwb2ludGVyIHRvIG5leHQgY2hhaW4gYmxvY2suCi0JCSAqIEZpbGwgb3V0IGxhc3QgZWxlbWVudCBpbiBjdXJyZW50IGNoYWluCi0JCSAqIGJsb2NrIHdpdGggYWRkcmVzcyBvZiBuZXh0IGNoYWluIGJsb2NrLgotCQkgKi8KLQkJdGVtcDY0LnZhbCA9IHBjaV9tYXBfc2luZ2xlKGgtPnBkZXYsCi0JCQkJCWgtPmNtZF9zZ19saXN0W2MtPmNtZGluZGV4XS0+c2djaGFpbiwKLQkJCQkJbGVuLCBkaXIpOwotCi0JCWgtPmNtZF9zZ19saXN0W2MtPmNtZGluZGV4XS0+c2dfY2hhaW5fZG1hID0gdGVtcDY0LnZhbDsKLQkJY3Vycl9zZ1tzZ19pbmRleF0uQWRkci5sb3dlciA9IHRlbXA2NC52YWwzMi5sb3dlcjsKLQkJY3Vycl9zZ1tzZ19pbmRleF0uQWRkci51cHBlciA9IHRlbXA2NC52YWwzMi51cHBlcjsKLQotCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoaC0+cGRldiwKLQkJCQloLT5jbWRfc2dfbGlzdFtjLT5jbWRpbmRleF0tPnNnX2NoYWluX2RtYSwKLQkJCQlsZW4sIGRpcik7Ci0JfQorCWlmIChjaGFpbmVkKQorCQljY2lzc19tYXBfc2dfY2hhaW5fYmxvY2soaCwgYywgaC0+Y21kX3NnX2xpc3RbYy0+Y21kaW5kZXhdLAorCQkJKHNlZyAtIChoLT5tYXhfY21kX3NnZW50cmllcyAtIDEpKSAqCisJCQkJc2l6ZW9mKFNHRGVzY3JpcHRvcl9zdHJ1Y3QpKTsKIAogCS8qIHRyYWNrIGhvdyBtYW55IFNHIGVudHJpZXMgd2UgYXJlIHVzaW5nICovCiAJaWYgKHNlZyA+IGgtPm1heFNHKQpAQCAtMzIwOSwxMSArMzI1MCwxMSBAQAogCWlmIChsaWtlbHkoYmxrX2ZzX3JlcXVlc3QoY3JlcSkpKSB7CiAJCWlmKGgtPmNjaXNzX3JlYWQgPT0gQ0NJU1NfUkVBRF8xMCkgewogCQkJYy0+UmVxdWVzdC5DREJbMV0gPSAwOwotCQkJYy0+UmVxdWVzdC5DREJbMl0gPSAoc3RhcnRfYmxrID4+IDI0KSAmIDB4ZmY7CS8vTVNCCisJCQljLT5SZXF1ZXN0LkNEQlsyXSA9IChzdGFydF9ibGsgPj4gMjQpICYgMHhmZjsgLyogTVNCICovCiAJCQljLT5SZXF1ZXN0LkNEQlszXSA9IChzdGFydF9ibGsgPj4gMTYpICYgMHhmZjsKIAkJCWMtPlJlcXVlc3QuQ0RCWzRdID0gKHN0YXJ0X2JsayA+PiA4KSAmIDB4ZmY7CiAJCQljLT5SZXF1ZXN0LkNEQls1XSA9IHN0YXJ0X2JsayAmIDB4ZmY7Ci0JCQljLT5SZXF1ZXN0LkNEQls2XSA9IDA7CS8vIChzZWN0ID4+IDI0KSAmIDB4ZmY7IE1TQgorCQkJYy0+UmVxdWVzdC5DREJbNl0gPSAwOyAvKiAoc2VjdCA+PiAyNCkgJiAweGZmOyBNU0IgKi8KIAkJCWMtPlJlcXVlc3QuQ0RCWzddID0gKGJsa19ycV9zZWN0b3JzKGNyZXEpID4+IDgpICYgMHhmZjsKIAkJCWMtPlJlcXVlc3QuQ0RCWzhdID0gYmxrX3JxX3NlY3RvcnMoY3JlcSkgJiAweGZmOwogCQkJYy0+UmVxdWVzdC5DREJbOV0gPSBjLT5SZXF1ZXN0LkNEQlsxMV0gPSBjLT5SZXF1ZXN0LkNEQlsxMl0gPSAwOwpAQCAtMzIyMiw3ICszMjYzLDcgQEAKIAogCQkJYy0+UmVxdWVzdC5DREJMZW4gPSAxNjsKIAkJCWMtPlJlcXVlc3QuQ0RCWzFdPSAwOwotCQkJYy0+UmVxdWVzdC5DREJbMl09ICh1cHBlcjMyID4+IDI0KSAmIDB4ZmY7CS8vTVNCCisJCQljLT5SZXF1ZXN0LkNEQlsyXT0gKHVwcGVyMzIgPj4gMjQpICYgMHhmZjsgLyogTVNCICovCiAJCQljLT5SZXF1ZXN0LkNEQlszXT0gKHVwcGVyMzIgPj4gMTYpICYgMHhmZjsKIAkJCWMtPlJlcXVlc3QuQ0RCWzRdPSAodXBwZXIzMiA+PiAgOCkgJiAweGZmOwogCQkJYy0+UmVxdWVzdC5DREJbNV09IHVwcGVyMzIgJiAweGZmOwpAQCAtNDI0MCwzNyArNDI4MSwxMCBAQAogCQkJZ290byBjbGVhbjQ7CiAJCX0KIAl9Ci0JaGJhW2ldLT5jbWRfc2dfbGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBDbWRfc2dfbGlzdCAqKSAqCi0JCQkJCQloYmFbaV0tPm5yX2NtZHMsCi0JCQkJCQlHRlBfS0VSTkVMKTsKLQlpZiAoIWhiYVtpXS0+Y21kX3NnX2xpc3QpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjY2lzcyVkOiBDYW5ub3QgZ2V0IG1lbW9yeSBmb3IgIgotCQkJInMvZyBjaGFpbmluZy5cbiIsIGkpOworCWhiYVtpXS0+Y21kX3NnX2xpc3QgPSBjY2lzc19hbGxvY2F0ZV9zZ19jaGFpbl9ibG9ja3MoaGJhW2ldLAorCQloYmFbaV0tPmNoYWluc2l6ZSwgaGJhW2ldLT5ucl9jbWRzKTsKKwlpZiAoIWhiYVtpXS0+Y21kX3NnX2xpc3QgJiYgaGJhW2ldLT5jaGFpbnNpemUgPiAwKQogCQlnb3RvIGNsZWFuNDsKLQl9Ci0JLyogQnVpbGQgdXAgY2hhaW4gYmxvY2tzIGZvciBlYWNoIGNvbW1hbmQgKi8KLQlpZiAoaGJhW2ldLT5jaGFpbnNpemUgPiAwKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBoYmFbaV0tPm5yX2NtZHM7IGorKykgewotCQkJaGJhW2ldLT5jbWRfc2dfbGlzdFtqXSA9Ci0JCQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBDbWRfc2dfbGlzdCksCi0JCQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWhiYVtpXS0+Y21kX3NnX2xpc3Rbal0pIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgImNjaXNzJWQ6IENhbm5vdCBnZXQgbWVtb3J5ICIKLQkJCQkJImZvciBjaGFpbiBibG9jay5cbiIsIGkpOwotCQkJCWdvdG8gY2xlYW40OwotCQkJfQotCQkJLyogTmVlZCBhIGJsb2NrIG9mIGNoYWluc2l6ZWQgcy9nIGVsZW1lbnRzLiAqLwotCQkJaGJhW2ldLT5jbWRfc2dfbGlzdFtqXS0+c2djaGFpbiA9Ci0JCQkJCWttYWxsb2MoKGhiYVtpXS0+Y2hhaW5zaXplICoKLQkJCQkJCXNpemVvZihTR0Rlc2NyaXB0b3Jfc3RydWN0KSksCi0JCQkJCQlHRlBfS0VSTkVMKTsKLQkJCWlmICghaGJhW2ldLT5jbWRfc2dfbGlzdFtqXS0+c2djaGFpbikgewotCQkJCXByaW50ayhLRVJOX0VSUiAiY2Npc3MlZDogQ2Fubm90IGdldCBtZW1vcnkgIgotCQkJCQkiZm9yIHMvZyBjaGFpbnNcbiIsIGkpOwotCQkJCWdvdG8gY2xlYW40OwotCQkJfQotCQl9Ci0JfQogCiAJc3Bpbl9sb2NrX2luaXQoJmhiYVtpXS0+bG9jayk7CiAKQEAgLTQzMjksMTYgKzQzNDMsNyBAQAogCWZvciAoayA9IDA7IGsgPCBoYmFbaV0tPm5yX2NtZHM7IGsrKykKIAkJa2ZyZWUoaGJhW2ldLT5zY2F0dGVyX2xpc3Rba10pOwogCWtmcmVlKGhiYVtpXS0+c2NhdHRlcl9saXN0KTsKLQkvKiBPbmx5IGZyZWUgdXAgZXh0cmEgcy9nIGxpc3RzIGlmIGNvbnRyb2xsZXIgc3VwcG9ydHMgdGhlbSAqLwotCWlmIChoYmFbaV0tPmNoYWluc2l6ZSA+IDApIHsKLQkJZm9yIChqID0gMDsgaiA8IGhiYVtpXS0+bnJfY21kczsgaisrKSB7Ci0JCQlpZiAoaGJhW2ldLT5jbWRfc2dfbGlzdFtqXSkgewotCQkJCWtmcmVlKGhiYVtpXS0+Y21kX3NnX2xpc3Rbal0tPnNnY2hhaW4pOwotCQkJCWtmcmVlKGhiYVtpXS0+Y21kX3NnX2xpc3Rbal0pOwotCQkJfQotCQl9Ci0JCWtmcmVlKGhiYVtpXS0+Y21kX3NnX2xpc3QpOwotCX0KKwljY2lzc19mcmVlX3NnX2NoYWluX2Jsb2NrcyhoYmFbaV0tPmNtZF9zZ19saXN0LCBoYmFbaV0tPm5yX2NtZHMpOwogCWlmIChoYmFbaV0tPmNtZF9wb29sKQogCQlwY2lfZnJlZV9jb25zaXN0ZW50KGhiYVtpXS0+cGRldiwKIAkJCQkgICAgaGJhW2ldLT5ucl9jbWRzICogc2l6ZW9mKENvbW1hbmRMaXN0X3N0cnVjdCksCkBAIC00NDU2LDE2ICs0NDYxLDcgQEAKIAlmb3IgKGogPSAwOyBqIDwgaGJhW2ldLT5ucl9jbWRzOyBqKyspCiAJCWtmcmVlKGhiYVtpXS0+c2NhdHRlcl9saXN0W2pdKTsKIAlrZnJlZShoYmFbaV0tPnNjYXR0ZXJfbGlzdCk7Ci0JLyogT25seSBmcmVlIHVwIGV4dHJhIHMvZyBsaXN0cyBpZiBjb250cm9sbGVyIHN1cHBvcnRzIHRoZW0gKi8KLQlpZiAoaGJhW2ldLT5jaGFpbnNpemUgPiAwKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBoYmFbaV0tPm5yX2NtZHM7IGorKykgewotCQkJaWYgKGhiYVtpXS0+Y21kX3NnX2xpc3Rbal0pIHsKLQkJCQlrZnJlZShoYmFbaV0tPmNtZF9zZ19saXN0W2pdLT5zZ2NoYWluKTsKLQkJCQlrZnJlZShoYmFbaV0tPmNtZF9zZ19saXN0W2pdKTsKLQkJCX0KLQkJfQotCQlrZnJlZShoYmFbaV0tPmNtZF9zZ19saXN0KTsKLQl9CisJY2Npc3NfZnJlZV9zZ19jaGFpbl9ibG9ja3MoaGJhW2ldLT5jbWRfc2dfbGlzdCwgaGJhW2ldLT5ucl9jbWRzKTsKIAkvKgogCSAqIERlbGliZXJhdGVseSBvbWl0IHBjaV9kaXNhYmxlX2RldmljZSgpOiBpdCBkb2VzIHNvbWV0aGluZyBuYXN0eSB0bwogCSAqIFNtYXJ0IEFycmF5IGNvbnRyb2xsZXJzIHRoYXQgcGNpX2VuYWJsZV9kZXZpY2UgZG9lcyBub3QgdW5kbwpAQCAtNDQ5OCw3ICs0NDk0LDcgQEAKIAkgKiBib3VuZGFyeS4gR2l2ZW4gdGhhdCB3ZSB1c2UgcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSB0byBhbGxvY2F0ZSBhbgogCSAqIGFycmF5IG9mIHRoZW0sIHRoZSBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4IGJ5dGVzLgogCSAqLwotCUJVSUxEX0JVR19PTihzaXplb2YoQ29tbWFuZExpc3Rfc3RydWN0KSAlIDgpOworCUJVSUxEX0JVR19PTihzaXplb2YoQ29tbWFuZExpc3Rfc3RydWN0KSAlIENPTU1BTkRMSVNUX0FMSUdOTUVOVCk7CiAKIAlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICJcbiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmggYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmgKaW5kZXggMWQ5NWRiMi4uYzVkNDExMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzcy5oCisrKyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuaApAQCAtNTUsMTggKzU1LDEyIEBACiAJY2hhciBkZXZpY2VfaW5pdGlhbGl6ZWQ7ICAgICAvKiBpbmRpY2F0ZXMgd2hldGhlciBkZXYgaXMgaW5pdGlhbGl6ZWQgKi8KIH0gZHJpdmVfaW5mb19zdHJ1Y3Q7CiAKLXN0cnVjdCBDbWRfc2dfbGlzdCB7Ci0JU0dEZXNjcmlwdG9yX3N0cnVjdAkqc2djaGFpbjsKLQlkbWFfYWRkcl90CQlzZ19jaGFpbl9kbWE7Ci0JaW50CQkJY2hhaW5fYmxvY2tfc2l6ZTsKLX07Ci0KIHN0cnVjdCBjdGxyX2luZm8KIHsKIAlpbnQJY3RscjsKIAljaGFyCWRldm5hbWVbOF07CiAJY2hhciAgICAqcHJvZHVjdF9uYW1lOwotCWNoYXIJZmlybV92ZXJbNF07IC8vIEZpcm13YXJlIHZlcnNpb24gCisJY2hhcglmaXJtX3Zlcls0XTsgLyogRmlybXdhcmUgdmVyc2lvbiAqLwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCV9fdTMyCWJvYXJkX2lkOwogCXZvaWQgX19pb21lbSAqdmFkZHI7CkBAIC04OSw3ICs4Myw3IEBACiAJaW50CW1heHNnZW50cmllczsKIAlpbnQJY2hhaW5zaXplOwogCWludAltYXhfY21kX3NnZW50cmllczsKLQlzdHJ1Y3QgQ21kX3NnX2xpc3QgKipjbWRfc2dfbGlzdDsKKwlTR0Rlc2NyaXB0b3Jfc3RydWN0ICoqY21kX3NnX2xpc3Q7CiAKICMJZGVmaW5lIERPT1JCRUxMX0lOVAkwCiAjCWRlZmluZSBQRVJGX01PREVfSU5UCTEKQEAgLTEwMyw3ICs5Nyw3IEBACiAJQllURQljY2lzc193cml0ZTsKIAlCWVRFCWNjaXNzX3JlYWRfY2FwYWNpdHk7CiAKLQkvLyBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIGxvZ2ljYWwgdm9sdW1lCisJLyogaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBsb2dpY2FsIHZvbHVtZSAqLwogCWRyaXZlX2luZm9fc3RydWN0ICpkcnZbQ0lTU19NQVhfTFVOXTsKIAogCXN0cnVjdCBhY2Nlc3NfbWV0aG9kIGFjY2VzczsKQEAgLTExNiw3ICsxMTAsNyBAQAogCXVuc2lnbmVkIGludCBtYXhTRzsKIAlzcGlubG9ja190IGxvY2s7CiAKLQkvLyogcG9pbnRlcnMgdG8gY29tbWFuZCBhbmQgZXJyb3IgaW5mbyBwb29sICovIAorCS8qIHBvaW50ZXJzIHRvIGNvbW1hbmQgYW5kIGVycm9yIGluZm8gcG9vbCAqLwogCUNvbW1hbmRMaXN0X3N0cnVjdCAJKmNtZF9wb29sOwogCWRtYV9hZGRyX3QJCWNtZF9wb29sX2RoYW5kbGU7IAogCUVycm9ySW5mb19zdHJ1Y3QgCSplcnJpbmZvX3Bvb2w7CkBAIC0xMzQsMTIgKzEyOCwxMCBAQAogCSovCiAJaW50CQkJbmV4dF90b19ydW47CiAKLQkvLyBEaXNrIHN0cnVjdHVyZXMgd2UgbmVlZCB0byBwYXNzIGJhY2sKKwkvKiBEaXNrIHN0cnVjdHVyZXMgd2UgbmVlZCB0byBwYXNzIGJhY2sgKi8KIAlzdHJ1Y3QgZ2VuZGlzayAgICpnZW5kaXNrW0NJU1NfTUFYX0xVTl07CiAjaWZkZWYgQ09ORklHX0NJU1NfU0NTSV9UQVBFCi0Jdm9pZCAqc2NzaV9jdGxyOyAvKiBwdHIgdG8gc3RydWN0dXJlIGNvbnRhaW5pbmcgc2NzaSByZWxhdGVkIHN0dWZmICovCi0JLyogbGlzdCBvZiBibG9jayBzaWRlIGNvbW1hbmRzIHRoZSBzY3NpIGVycm9yIGhhbmRsaW5nIHN1Y2tlZCB1cCAqLwotCS8qIGFuZCBzYXZlZCBmb3IgbGF0ZXIgcHJvY2Vzc2luZyAqLworCXN0cnVjdCBjY2lzc19zY3NpX2FkYXB0ZXJfZGF0YV90ICpzY3NpX2N0bHI7CiAjZW5kaWYKIAl1bnNpZ25lZCBjaGFyIGFsaXZlOwogCXN0cnVjdCBsaXN0X2hlYWQgc2Nhbl9saXN0OwpAQCAtMzE1LDQgKzMwNywzIEBACiAjZGVmaW5lIENDSVNTX0xPQ0soaSkJKCZoYmFbaV0tPmxvY2spCiAKICNlbmRpZiAvKiBDQ0lTU19IICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3NfY21kLmggYi9kcml2ZXJzL2Jsb2NrL2NjaXNzX2NtZC5oCmluZGV4IDZhZmE3MDAuLmU2MjRmZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3NfY21kLmgKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzc19jbWQuaApAQCAtMSwzMSArMSwxNiBAQAogI2lmbmRlZiBDQ0lTU19DTURfSAogI2RlZmluZSBDQ0lTU19DTURfSAotLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLS8vREVGSU5FUwotLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworI2luY2x1ZGUgPGxpbnV4L2NjaXNzX2RlZnMuaD4KKworLyogREVGSU5FUyAqLwogI2RlZmluZSBDSVNTX1ZFUlNJT04gIjEuMDAiCiAKLS8vZ2VuZXJhbCBib3VuZGFyeSBkZWZpbml0aW9ucwotI2RlZmluZSBTRU5TRUlORk9CWVRFUyAgICAgICAgICAzMi8vbm90ZSB0aGF0IHRoaXMgdmFsdWUgbWF5IHZhcnkgYmV0d2VlbiBob3N0IGltcGxlbWVudGF0aW9ucworLyogZ2VuZXJhbCBib3VuZGFyeSBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBNQVhTR0VOVFJJRVMgICAgICAgICAgICAzMgogI2RlZmluZSBDQ0lTU19TR19DSEFJTiAgICAgICAgICAweDgwMDAwMDAwCiAjZGVmaW5lIE1BWFJFUExZUVMgICAgICAgICAgICAgIDI1NgogCi0vL0NvbW1hbmQgU3RhdHVzIHZhbHVlCi0jZGVmaW5lIENNRF9TVUNDRVNTICAgICAgICAgICAgIDB4MDAwMAotI2RlZmluZSBDTURfVEFSR0VUX1NUQVRVUyAgICAgICAweDAwMDEKLSNkZWZpbmUgQ01EX0RBVEFfVU5ERVJSVU4gICAgICAgMHgwMDAyCi0jZGVmaW5lIENNRF9EQVRBX09WRVJSVU4gICAgICAgIDB4MDAwMwotI2RlZmluZSBDTURfSU5WQUxJRCAgICAgICAgICAgICAweDAwMDQKLSNkZWZpbmUgQ01EX1BST1RPQ09MX0VSUiAgICAgICAgMHgwMDA1Ci0jZGVmaW5lIENNRF9IQVJEV0FSRV9FUlIgICAgICAgIDB4MDAwNgotI2RlZmluZSBDTURfQ09OTkVDVElPTl9MT1NUICAgICAweDAwMDcKLSNkZWZpbmUgQ01EX0FCT1JURUQgICAgICAgICAgICAgMHgwMDA4Ci0jZGVmaW5lIENNRF9BQk9SVF9GQUlMRUQgICAgICAgIDB4MDAwOQotI2RlZmluZSBDTURfVU5TT0xJQ0lURURfQUJPUlQgICAweDAwMEEKLSNkZWZpbmUgQ01EX1RJTUVPVVQgICAgICAgICAgICAgMHgwMDBCCi0jZGVmaW5lIENNRF9VTkFCT1JUQUJMRQkJMHgwMDBDCi0KIC8qIFVuaXQgQXR0ZW50aW9ucyBBU0MncyBhcyBkZWZpbmVkIGZvciB0aGUgTVNBMjAxMnNhICovCiAjZGVmaW5lIFBPV0VSX09SX1JFU0VUCQkJMHgyOQogI2RlZmluZSBTVEFURV9DSEFOR0VECQkJMHgyYQpAQCAtNDksMzAgKzM0LDEzIEBACiAjZGVmaW5lIEFTWU1fQUNDRVNTX0NIQU5HRUQJCTB4MDYKICNkZWZpbmUgTFVOX0NBUEFDSVRZX0NIQU5HRUQJCTB4MDkKIAotLy90cmFuc2ZlciBkaXJlY3Rpb24KLSNkZWZpbmUgWEZFUl9OT05FICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBYRkVSX1dSSVRFICAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIFhGRVJfUkVBRCAgICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgWEZFUl9SU1ZEICAgICAgICAgICAgICAgMHgwMwotCi0vL3Rhc2sgYXR0cmlidXRlCi0jZGVmaW5lIEFUVFJfVU5UQUdHRUQgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgQVRUUl9TSU1QTEUgICAgICAgICAgICAgMHgwNAotI2RlZmluZSBBVFRSX0hFQURPRlFVRVVFICAgICAgICAweDA1Ci0jZGVmaW5lIEFUVFJfT1JERVJFRCAgICAgICAgICAgIDB4MDYKLSNkZWZpbmUgQVRUUl9BQ0EgICAgICAgICAgICAgICAgMHgwNwotCi0vL2NkYiB0eXBlCi0jZGVmaW5lIFRZUEVfQ01ECQkJCTB4MDAKLSNkZWZpbmUgVFlQRV9NU0cJCQkJMHgwMQotCi0vL2NvbmZpZyBzcGFjZSByZWdpc3RlciBvZmZzZXRzCisvKiBjb25maWcgc3BhY2UgcmVnaXN0ZXIgb2Zmc2V0cyAqLwogI2RlZmluZSBDRkdfVkVORE9SSUQgICAgICAgICAgICAweDAwCiAjZGVmaW5lIENGR19ERVZJQ0VJRCAgICAgICAgICAgIDB4MDIKICNkZWZpbmUgQ0ZHX0kyT0JBUiAgICAgICAgICAgICAgMHgxMAogI2RlZmluZSBDRkdfTUVNMUJBUiAgICAgICAgICAgICAweDE0CiAKLS8vaTJvIHNwYWNlIHJlZ2lzdGVyIG9mZnNldHMKKy8qIGkybyBzcGFjZSByZWdpc3RlciBvZmZzZXRzICovCiAjZGVmaW5lIEkyT19JQkRCX1NFVCAgICAgICAgICAgIDB4MjAKICNkZWZpbmUgSTJPX0lCREJfQ0xFQVIgICAgICAgICAgMHg3MAogI2RlZmluZSBJMk9fSU5UX1NUQVRVUyAgICAgICAgICAweDMwCkBAIC04MSw3ICs0OSw3IEBACiAjZGVmaW5lIEkyT19PQlBPU1RfUSAgICAgICAgICAgIDB4NDQKICNkZWZpbmUgSTJPX0RNQTFfQ0ZHCQkweDIxNAogCi0vL0NvbmZpZ3VyYXRpb24gVGFibGUKKy8qIENvbmZpZ3VyYXRpb24gVGFibGUgKi8KICNkZWZpbmUgQ0ZHVEJMX0NoYW5nZVJlcSAgICAgICAgMHgwMDAwMDAwMWwKICNkZWZpbmUgQ0ZHVEJMX0FjY0NtZHMgICAgICAgICAgMHgwMDAwMDAwMWwKIApAQCAtMTAzLDI0ICs3MSwxNyBAQAogICAgX191NjQJdmFsOwogfSB1NjRiaXQ7CiAKLS8vIFR5cGUgZGVmcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgc3RydWN0cwotI2RlZmluZSBCWVRFIF9fdTgKLSNkZWZpbmUgV09SRCBfX3UxNgotI2RlZmluZSBIV09SRCBfX3UxNgotI2RlZmluZSBEV09SRCBfX3UzMgorLyogVHlwZSBkZWZzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBzdHJ1Y3RzICovCiAjZGVmaW5lIFFXT1JEIHZhbHMzMiAKIAotLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLS8vU1RSVUNUVVJFUwotLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSNkZWZpbmUgQ0lTU19NQVhfTFVOCTEwMjQKKy8qIFNUUlVDVFVSRVMgKi8KICNkZWZpbmUgQ0lTU19NQVhfUEhZU19MVU4JMTAyNAotLy8gU0NTSS0zIENtbWFuZHMgCisvKiBTQ1NJLTMgQ21tYW5kcyAqLwogCiAjcHJhZ21hIHBhY2soMSkJCiAKICNkZWZpbmUgQ0lTU19JTlFVSVJZIDB4MTIKLS8vRGF0ZSByZXR1cm5lZAorLyogRGF0ZSByZXR1cm5lZCAqLwogdHlwZWRlZiBzdHJ1Y3QgX0lucXVpcnlEYXRhX3N0cnVjdAogewogICBCWVRFIGRhdGFfYnl0ZVszNl07CkBAIC0xMjgsNyArODksNyBAQAogCiAjZGVmaW5lIENJU1NfUkVQT1JUX0xPRyAweGMyICAgIC8qIFJlcG9ydCBMb2dpY2FsIExVTnMgKi8KICNkZWZpbmUgQ0lTU19SRVBPUlRfUEhZUyAweGMzICAgLyogUmVwb3J0IFBoeXNpY2FsIExVTnMgKi8KLS8vIERhdGEgcmV0dXJuZWQKKy8qIERhdGEgcmV0dXJuZWQgKi8KIHR5cGVkZWYgc3RydWN0IF9SZXBvcnRMVU5kYXRhX3N0cnVjdAogewogICBCWVRFIExVTkxpc3RMZW5ndGhbNF07CkBAIC0xMzksOCArMTAwLDggQEAKICNkZWZpbmUgQ0NJU1NfUkVBRF9DQVBBQ0lUWSAweDI1IC8qIFJlYWQgQ2FwYWNpdHkgKi8gCiB0eXBlZGVmIHN0cnVjdCBfUmVhZENhcGRhdGFfc3RydWN0CiB7Ci0gIEJZVEUgdG90YWxfc2l6ZVs0XTsJLy8gVG90YWwgc2l6ZSBpbiBibG9ja3MKLSAgQllURSBibG9ja19zaXplWzRdOwkvLyBTaXplIG9mIGJsb2NrcyBpbiBieXRlcworICBCWVRFIHRvdGFsX3NpemVbNF07CS8qIFRvdGFsIHNpemUgaW4gYmxvY2tzICovCisgIEJZVEUgYmxvY2tfc2l6ZVs0XTsJLyogU2l6ZSBvZiBibG9ja3MgaW4gYnl0ZXMgKi8KIH0gUmVhZENhcGRhdGFfc3RydWN0OwogCiAjZGVmaW5lIENDSVNTX1JFQURfQ0FQQUNJVFlfMTYgMHg5ZSAvKiBSZWFkIENhcGFjaXR5IDE2ICovCkBAIC0xNzIsNTIgKzEzMywxMyBAQAogI2RlZmluZSBDREJfTEVOMTAJMTAKICNkZWZpbmUgQ0RCX0xFTjE2CTE2CiAKLS8vIEJNSUMgY29tbWFuZHMgCisvKiBCTUlDIGNvbW1hbmRzICovCiAjZGVmaW5lIEJNSUNfUkVBRCAweDI2CiAjZGVmaW5lIEJNSUNfV1JJVEUgMHgyNwogI2RlZmluZSBCTUlDX0NBQ0hFX0ZMVVNIIDB4YzIKLSNkZWZpbmUgQ0NJU1NfQ0FDSEVfRkxVU0ggMHgwMQkvL0MyIHdhcyBhbHJlYWR5IGJlaW5nIHVzZWQgYnkgQ0NJU1MKKyNkZWZpbmUgQ0NJU1NfQ0FDSEVfRkxVU0ggMHgwMQkvKiBDMiB3YXMgYWxyZWFkeSBiZWluZyB1c2VkIGJ5IENDSVNTICovCiAKLS8vQ29tbWFuZCBMaXN0IFN0cnVjdHVyZQotdHlwZWRlZiB1bmlvbiBfU0NTSTNBZGRyX3N0cnVjdCB7Ci0gICBzdHJ1Y3QgewotICAgIEJZVEUgRGV2OwotICAgIEJZVEUgQnVzOjY7Ci0gICAgQllURSBNb2RlOjI7ICAgICAgICAvLyBiMDAKLSAgfSBQZXJpcERldjsKLSAgIHN0cnVjdCB7Ci0gICAgQllURSBEZXZMU0I7Ci0gICAgQllURSBEZXZNU0I6NjsKLSAgICBCWVRFIE1vZGU6MjsgICAgICAgIC8vIGIwMQotICB9IExvZ0RldjsKLSAgIHN0cnVjdCB7Ci0gICAgQllURSBEZXY6NTsKLSAgICBCWVRFIEJ1czozOwotICAgIEJZVEUgVGFyZzo2OwotICAgIEJZVEUgTW9kZToyOyAgICAgICAgLy8gYjEwCi0gIH0gTG9nVW5pdDsKLX0gU0NTSTNBZGRyX3N0cnVjdDsKLQotdHlwZWRlZiBzdHJ1Y3QgX1BoeXNEZXZBZGRyX3N0cnVjdCB7Ci0gIERXT1JEICAgICAgICAgICAgIFRhcmdldElkOjI0OwotICBEV09SRCAgICAgICAgICAgICBCdXM6NjsKLSAgRFdPUkQgICAgICAgICAgICAgTW9kZToyOwotICBTQ1NJM0FkZHJfc3RydWN0ICBUYXJnZXRbMl07IC8vMiBsZXZlbCB0YXJnZXQgZGV2aWNlIGFkZHIKLX0gUGh5c0RldkFkZHJfc3RydWN0OwotICAKLXR5cGVkZWYgc3RydWN0IF9Mb2dEZXZBZGRyX3N0cnVjdCB7Ci0gIERXT1JEICAgICAgICAgICAgVm9sSWQ6MzA7Ci0gIERXT1JEICAgICAgICAgICAgTW9kZToyOwotICBCWVRFICAgICAgICAgICAgIHJlc2VydmVkWzRdOwotfSBMb2dEZXZBZGRyX3N0cnVjdDsKLQotdHlwZWRlZiB1bmlvbiBfTFVOQWRkcl9zdHJ1Y3QgewotICBCWVRFICAgICAgICAgICAgICAgTHVuQWRkckJ5dGVzWzhdOwotICBTQ1NJM0FkZHJfc3RydWN0ICAgU0NTSTNMdW5bNF07Ci0gIFBoeXNEZXZBZGRyX3N0cnVjdCBQaHlzRGV2OwotICBMb2dEZXZBZGRyX3N0cnVjdCAgTG9nRGV2OwotfSBMVU5BZGRyX3N0cnVjdDsKLQorLyogQ29tbWFuZCBMaXN0IFN0cnVjdHVyZSAqLwogI2RlZmluZSBDVExSX0xVTklEICJcMFwwXDBcMFwwXDBcMFwwIgogCiB0eXBlZGVmIHN0cnVjdCBfQ29tbWFuZExpc3RIZWFkZXJfc3RydWN0IHsKQEAgLTIyNywxNiArMTQ5LDYgQEAKICAgUVdPUkQgICAgICAgICAgICAgVGFnOwogICBMVU5BZGRyX3N0cnVjdCAgICBMVU47CiB9IENvbW1hbmRMaXN0SGVhZGVyX3N0cnVjdDsKLXR5cGVkZWYgc3RydWN0IF9SZXF1ZXN0QmxvY2tfc3RydWN0IHsKLSAgQllURSAgIENEQkxlbjsKLSAgc3RydWN0IHsKLSAgICBCWVRFIFR5cGU6MzsKLSAgICBCWVRFIEF0dHJpYnV0ZTozOwotICAgIEJZVEUgRGlyZWN0aW9uOjI7Ci0gIH0gVHlwZTsKLSAgSFdPUkQgIFRpbWVvdXQ7Ci0gIEJZVEUgICBDREJbMTZdOwotfSBSZXF1ZXN0QmxvY2tfc3RydWN0OwogdHlwZWRlZiBzdHJ1Y3QgX0VyckRlc2NyaXB0b3Jfc3RydWN0IHsKICAgUVdPUkQgIEFkZHI7CiAgIERXT1JEICBMZW47CkBAIC0yNDcsMjggKzE1OSw2IEBACiAgIERXT1JEICBFeHQ7CiB9IFNHRGVzY3JpcHRvcl9zdHJ1Y3Q7CiAKLXR5cGVkZWYgdW5pb24gX01vcmVFcnJJbmZvX3N0cnVjdHsKLSAgc3RydWN0IHsKLSAgICBCWVRFICBSZXNlcnZlZFszXTsKLSAgICBCWVRFICBUeXBlOwotICAgIERXT1JEIEVycm9ySW5mbzsKLSAgfUNvbW1vbl9JbmZvOwotICBzdHJ1Y3R7Ci0gICAgQllURSAgUmVzZXJ2ZWRbMl07Ci0gICAgQllURSAgb2ZmZW5zZV9zaXplOy8vc2l6ZSBvZiBvZmZlbmRpbmcgZW50cnkKLSAgICBCWVRFICBvZmZlbnNlX251bTsgLy9ieXRlICMgb2Ygb2ZmZW5zZSAwLWJhc2UKLSAgICBEV09SRCBvZmZlbnNlX3ZhbHVlOwotICB9SW52YWxpZF9DbWQ7Ci19TW9yZUVyckluZm9fc3RydWN0OwotdHlwZWRlZiBzdHJ1Y3QgX0Vycm9ySW5mb19zdHJ1Y3QgewotICBCWVRFICAgICAgICAgICAgICAgU2NzaVN0YXR1czsKLSAgQllURSAgICAgICAgICAgICAgIFNlbnNlTGVuOwotICBIV09SRCAgICAgICAgICAgICAgQ29tbWFuZFN0YXR1czsKLSAgRFdPUkQgICAgICAgICAgICAgIFJlc2lkdWFsQ250OwotICBNb3JlRXJySW5mb19zdHJ1Y3QgTW9yZUVyckluZm87Ci0gIEJZVEUgICAgICAgICAgICAgICBTZW5zZUluZm9bU0VOU0VJTkZPQllURVNdOwotfSBFcnJvckluZm9fc3RydWN0OwotCiAvKiBDb21tYW5kIHR5cGVzICovCiAjZGVmaW5lIENNRF9SV1JFUSAgICAgICAweDAwCiAjZGVmaW5lIENNRF9JT0NUTF9QRU5EICAweDAxCkBAIC0yNzcsMTAgKzE2NywxOCBAQAogI2RlZmluZSBDTURfTVNHX1RJTUVPVVQgMHgwNQogI2RlZmluZSBDTURfTVNHX1NUQUxFCTB4ZmYKIAotLyogVGhpcyBzdHJ1Y3R1cmUgbmVlZHMgdG8gYmUgZGl2aXNpYmxlIGJ5IDggZm9yIG5ldwotICogaW5kZXhpbmcgbWV0aG9kLgorLyogVGhpcyBzdHJ1Y3R1cmUgbmVlZHMgdG8gYmUgZGl2aXNpYmxlIGJ5IENPTU1BTkRMSVNUX0FMSUdOTUVOVAorICogYmVjYXVzZSBsb3cgYml0cyBvZiB0aGUgYWRkcmVzcyBhcmUgdXNlZCB0byB0byBpbmRpY2F0ZSB0aGF0CisgKiB3aGV0aGVyIHRoZSB0YWcgY29udGFpbnMgYW4gaW5kZXggb3IgYW4gYWRkcmVzcy4gIFBBRF8zMiBhbmQKKyAqIFBBRF82NCBjYW4gYmUgYWRqdXN0ZWQgaW5kZXBlbmRlbnRseSBhcyBuZWVkZWQgZm9yIDMyLWJpdAorICogYW5kIDY0LWJpdHMgc3lzdGVtcy4KICAqLwotI2RlZmluZSBQQURTSVpFIChzaXplb2YobG9uZykgLSA0KQorI2RlZmluZSBDT01NQU5ETElTVF9BTElHTk1FTlQgKDgpCisjZGVmaW5lIElTXzY0X0JJVCAoKHNpemVvZihsb25nKSAtIDQpLzQpCisjZGVmaW5lIElTXzMyX0JJVCAoIUlTXzY0X0JJVCkKKyNkZWZpbmUgUEFEXzMyICgwKQorI2RlZmluZSBQQURfNjQgKDQpCisjZGVmaW5lIFBBRFNJWkUgKElTXzMyX0JJVCAqIFBBRF8zMiArIElTXzY0X0JJVCAqIFBBRF82NCkKIHR5cGVkZWYgc3RydWN0IF9Db21tYW5kTGlzdF9zdHJ1Y3QgewogICBDb21tYW5kTGlzdEhlYWRlcl9zdHJ1Y3QgSGVhZGVyOwogICBSZXF1ZXN0QmxvY2tfc3RydWN0ICAgICAgUmVxdWVzdDsKQEAgLTMwMCw3ICsxOTgsNyBAQAogICBjaGFyICAgcGFkW1BBRFNJWkVdOwogfSBDb21tYW5kTGlzdF9zdHJ1Y3Q7CiAKLS8vQ29uZmlndXJhdGlvbiBUYWJsZSBTdHJ1Y3R1cmUKKy8qIENvbmZpZ3VyYXRpb24gVGFibGUgU3RydWN0dXJlICovCiB0eXBlZGVmIHN0cnVjdCBfSG9zdFdyaXRlX3N0cnVjdCB7CiAgIERXT1JEIFRyYW5zcG9ydFJlcXVlc3Q7CiAgIERXT1JEIFJlc2VydmVkOwpAQCAtMzI2LDQgKzIyNCw0IEBACiAgIERXT1JEICAgICAgICAgICAgTWF4UGh5c2ljYWxEcml2ZXNQZXJMb2dpY2FsVW5pdDsKIH0gQ2ZnVGFibGVfc3RydWN0OwogI3ByYWdtYSBwYWNrKCkJIAotI2VuZGlmIC8vIENDSVNTX0NNRF9ICisjZW5kaWYgLyogQ0NJU1NfQ01EX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3Nfc2NzaS5jIGIvZHJpdmVycy9ibG9jay9jY2lzc19zY3NpLmMKaW5kZXggNWQwZTQ2ZC4uZTFkMGUyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzc19zY3NpLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzc19zY3NpLmMKQEAgLTg0LDcgKzg0LDYgQEAKIAkucXVldWVjb21tYW5kCQk9IGNjaXNzX3Njc2lfcXVldWVfY29tbWFuZCwKIAkuY2FuX3F1ZXVlCQk9IFNDU0lfQ0NJU1NfQ0FOX1FVRVVFLAogCS50aGlzX2lkCQk9IDcsCi0JLnNnX3RhYmxlc2l6ZQkJPSBNQVhTR0VOVFJJRVMsCiAJLmNtZF9wZXJfbHVuCQk9IDEsCiAJLnVzZV9jbHVzdGVyaW5nCQk9IERJU0FCTEVfQ0xVU1RFUklORywKIAkvKiBDYW4ndCBoYXZlIGVoX2J1c19yZXNldF9oYW5kbGVyIG9yIGVoX2hvc3RfcmVzZXRfaGFuZGxlciBmb3IgY2Npc3MgKi8KQEAgLTkzLDExICs5MiwxNiBAQAogfTsKIAogI3ByYWdtYSBwYWNrKDEpCisKKyNkZWZpbmUgU0NTSV9QQURfMzIgMAorI2RlZmluZSBTQ1NJX1BBRF82NCAwCisKIHN0cnVjdCBjY2lzc19zY3NpX2NtZF9zdGFja19lbGVtX3QgewogCUNvbW1hbmRMaXN0X3N0cnVjdCBjbWQ7CiAJRXJyb3JJbmZvX3N0cnVjdCBFcnI7CiAJX191MzIgYnVzYWRkcjsKLQlfX3UzMiBwYWQ7CisJaW50IGNtZGluZGV4OworCXU4IHBhZFtJU18zMl9CSVQgKiBTQ1NJX1BBRF8zMiArIElTXzY0X0JJVCAqIFNDU0lfUEFEXzY0XTsKIH07CiAKICNwcmFnbWEgcGFjaygpCkBAIC0xMTgsMTYgKzEyMiwxNSBAQAogc3RydWN0IGNjaXNzX3Njc2lfYWRhcHRlcl9kYXRhX3QgewogCXN0cnVjdCBTY3NpX0hvc3QgKnNjc2lfaG9zdDsKIAlzdHJ1Y3QgY2Npc3Nfc2NzaV9jbWRfc3RhY2tfdCBjbWRfc3RhY2s7CisJU0dEZXNjcmlwdG9yX3N0cnVjdCAqKmNtZF9zZ19saXN0OwogCWludCByZWdpc3RlcmVkOwogCXNwaW5sb2NrX3QgbG9jazsgLy8gdG8gcHJvdGVjdCBjY2lzc3Njc2lbY3Rscl07IAogfTsKIAogI2RlZmluZSBDUFFfVEFQRV9MT0NLKGN0bHIsIGZsYWdzKSBzcGluX2xvY2tfaXJxc2F2ZSggXAotCSYoKChzdHJ1Y3QgY2Npc3Nfc2NzaV9hZGFwdGVyX2RhdGFfdCAqKSBcCi0JaGJhW2N0bHJdLT5zY3NpX2N0bHIpLT5sb2NrKSwgZmxhZ3MpOworCSZoYmFbY3Rscl0tPnNjc2lfY3Rsci0+bG9jaywgZmxhZ3MpOwogI2RlZmluZSBDUFFfVEFQRV9VTkxPQ0soY3RsciwgZmxhZ3MpIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoIFwKLQkmKCgoc3RydWN0IGNjaXNzX3Njc2lfYWRhcHRlcl9kYXRhX3QgKikgXAotCWhiYVtjdGxyXS0+c2NzaV9jdGxyKS0+bG9jayksIGZsYWdzKTsKKwkmaGJhW2N0bHJdLT5zY3NpX2N0bHItPmxvY2ssIGZsYWdzKTsKIAogc3RhdGljIENvbW1hbmRMaXN0X3N0cnVjdCAqCiBzY3NpX2NtZF9hbGxvYyhjdGxyX2luZm9fdCAqaCkKQEAgLTE0Myw3ICsxNDYsNyBAQAogCXN0cnVjdCBjY2lzc19zY3NpX2NtZF9zdGFja190ICpzdGs7CiAJdTY0Yml0IHRlbXA2NDsKIAotCXNhID0gKHN0cnVjdCBjY2lzc19zY3NpX2FkYXB0ZXJfZGF0YV90ICopIGgtPnNjc2lfY3RscjsKKwlzYSA9IGgtPnNjc2lfY3RscjsKIAlzdGsgPSAmc2EtPmNtZF9zdGFjazsgCiAKIAlpZiAoc3RrLT50b3AgPCAwKSAKQEAgLTE1NCw2ICsxNTcsNyBAQAogCW1lbXNldCgmYy0+RXJyLCAwLCBzaXplb2YoYy0+RXJyKSk7CiAJLyogc2V0IHBoeXNpY2FsIGFkZHIgb2YgY21kIGFuZCBhZGRyIG9mIHNjc2kgcGFyYW1ldGVycyAqLwogCWMtPmNtZC5idXNhZGRyID0gYy0+YnVzYWRkcjsgCisJYy0+Y21kLmNtZGluZGV4ID0gYy0+Y21kaW5kZXg7CiAJLyogKF9fdTMyKSAoc3RrLT5jbWRfcG9vbF9oYW5kbGUgKyAKIAkJKHNpemVvZihzdHJ1Y3QgY2Npc3Nfc2NzaV9jbWRfc3RhY2tfZWxlbV90KSpzdGstPnRvcCkpOyAqLwogCkBAIC0xODIsNyArMTg2LDcgQEAKIAlzdHJ1Y3QgY2Npc3Nfc2NzaV9hZGFwdGVyX2RhdGFfdCAqc2E7CiAJc3RydWN0IGNjaXNzX3Njc2lfY21kX3N0YWNrX3QgKnN0azsKIAotCXNhID0gKHN0cnVjdCBjY2lzc19zY3NpX2FkYXB0ZXJfZGF0YV90ICopIGgtPnNjc2lfY3RscjsKKwlzYSA9IGgtPnNjc2lfY3RscjsKIAlzdGsgPSAmc2EtPmNtZF9zdGFjazsgCiAJaWYgKHN0ay0+dG9wID49IENNRF9TVEFDS19TSVpFKSB7CiAJCXByaW50aygiY2Npc3M6IHNjc2lfY21kX2ZyZWUgY2FsbGVkIHRvbyBtYW55IHRpbWVzLlxuIik7CkBAIC0xOTksMjQgKzIwMywzMSBAQAogCXN0cnVjdCBjY2lzc19zY3NpX2NtZF9zdGFja190ICpzdGs7CiAJc2l6ZV90IHNpemU7CiAKKwlzYS0+Y21kX3NnX2xpc3QgPSBjY2lzc19hbGxvY2F0ZV9zZ19jaGFpbl9ibG9ja3MoaGJhW2N0bHJdLAorCQloYmFbY3Rscl0tPmNoYWluc2l6ZSwgQ01EX1NUQUNLX1NJWkUpOworCWlmICghc2EtPmNtZF9zZ19saXN0ICYmIGhiYVtjdGxyXS0+Y2hhaW5zaXplID4gMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlzdGsgPSAmc2EtPmNtZF9zdGFjazsgCiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY2Npc3Nfc2NzaV9jbWRfc3RhY2tfZWxlbV90KSAqIENNRF9TVEFDS19TSVpFOwogCi0JLy8gcGNpX2FsbG9jX2NvbnNpc3RlbnQgZ3VhcmFudGVlcyAzMi1iaXQgRE1BIGFkZHJlc3Mgd2lsbAotCS8vIGJlIHVzZWQKLQorCS8qIENoZWNrIGFsaWdubWVudCwgc2VlIGNjaXNzX2NtZC5oIG5lYXIgQ29tbWFuZExpc3Rfc3RydWN0IGRlZi4gKi8KKwlCVUlMRF9CVUdfT04oKHNpemVvZigqc3RrLT5wb29sKSAlIENPTU1BTkRMSVNUX0FMSUdOTUVOVCkgIT0gMCk7CisJLyogcGNpX2FsbG9jX2NvbnNpc3RlbnQgZ3VhcmFudGVlcyAzMi1iaXQgRE1BIGFkZHJlc3Mgd2lsbCBiZSB1c2VkICovCiAJc3RrLT5wb29sID0gKHN0cnVjdCBjY2lzc19zY3NpX2NtZF9zdGFja19lbGVtX3QgKikKIAkJcGNpX2FsbG9jX2NvbnNpc3RlbnQoaGJhW2N0bHJdLT5wZGV2LCBzaXplLCAmc3RrLT5jbWRfcG9vbF9oYW5kbGUpOwogCiAJaWYgKHN0ay0+cG9vbCA9PSBOVUxMKSB7Ci0JCXByaW50aygic3RrLT5wb29sIGlzIG51bGxcbiIpOwotCQlyZXR1cm4gLTE7CisJCWNjaXNzX2ZyZWVfc2dfY2hhaW5fYmxvY2tzKHNhLT5jbWRfc2dfbGlzdCwgQ01EX1NUQUNLX1NJWkUpOworCQlzYS0+Y21kX3NnX2xpc3QgPSBOVUxMOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlmb3IgKGk9MDsgaTxDTURfU1RBQ0tfU0laRTsgaSsrKSB7CiAJCXN0ay0+ZWxlbVtpXSA9ICZzdGstPnBvb2xbaV07CiAJCXN0ay0+ZWxlbVtpXS0+YnVzYWRkciA9IChfX3UzMikgKHN0ay0+Y21kX3Bvb2xfaGFuZGxlICsgCiAJCQkoc2l6ZW9mKHN0cnVjdCBjY2lzc19zY3NpX2NtZF9zdGFja19lbGVtX3QpICogaSkpOworCQlzdGstPmVsZW1baV0tPmNtZGluZGV4ID0gaTsKIAl9CiAJc3RrLT50b3AgPSBDTURfU1RBQ0tfU0laRS0xOwogCXJldHVybiAwOwpAQCAtMjI5LDcgKzI0MCw3IEBACiAJc3RydWN0IGNjaXNzX3Njc2lfY21kX3N0YWNrX3QgKnN0azsKIAlzaXplX3Qgc2l6ZTsKIAotCXNhID0gKHN0cnVjdCBjY2lzc19zY3NpX2FkYXB0ZXJfZGF0YV90ICopIGhiYVtjdGxyXS0+c2NzaV9jdGxyOworCXNhID0gaGJhW2N0bHJdLT5zY3NpX2N0bHI7CiAJc3RrID0gJnNhLT5jbWRfc3RhY2s7IAogCWlmIChzdGstPnRvcCAhPSBDTURfU1RBQ0tfU0laRS0xKSB7CiAJCXByaW50ayggImNjaXNzOiAlZCBzY3NpIGNvbW1hbmRzIGFyZSBzdGlsbCBvdXRzdGFuZGluZy5cbiIsCkBAIC0yNDEsNiArMjUyLDcgQEAKIAogCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGJhW2N0bHJdLT5wZGV2LCBzaXplLCBzdGstPnBvb2wsIHN0ay0+Y21kX3Bvb2xfaGFuZGxlKTsKIAlzdGstPnBvb2wgPSBOVUxMOworCWNjaXNzX2ZyZWVfc2dfY2hhaW5fYmxvY2tzKHNhLT5jbWRfc2dfbGlzdCwgQ01EX1NUQUNLX1NJWkUpOwogfQogCiAjaWYgMApAQCAtNTMwLDggKzU0Miw3IEBACiAJQ1BRX1RBUEVfTE9DSyhjdGxyLCBmbGFncyk7CiAKIAlpZiAoaG9zdG5vICE9IC0xKSAgLyogaWYgaXQncyBub3QgdGhlIGZpcnN0IHRpbWUuLi4gKi8KLQkJc2ggPSAoKHN0cnVjdCBjY2lzc19zY3NpX2FkYXB0ZXJfZGF0YV90ICopCi0JCQloYmFbY3Rscl0tPnNjc2lfY3RsciktPnNjc2lfaG9zdDsKKwkJc2ggPSBoYmFbY3Rscl0tPnNjc2lfY3Rsci0+c2NzaV9ob3N0OwogCiAJLyogZmluZCBhbnkgZGV2aWNlcyBpbiBjY2lzc3Njc2lbXSB0aGF0IGFyZSBub3QgaW4gCiAJICAgc2RbXSBhbmQgcmVtb3ZlIHRoZW0gZnJvbSBjY2lzc3Njc2lbXSAqLwpAQCAtNzAyLDcgKzcxMyw3IEBACiAJCWtmcmVlKHNoYmEpOwogCQlzaGJhID0gTlVMTDsKIAl9Ci0JaGJhW2NudGxfbnVtXS0+c2NzaV9jdGxyID0gKHZvaWQgKikgc2hiYTsKKwloYmFbY250bF9udW1dLT5zY3NpX2N0bHIgPSBzaGJhOwogCXJldHVybjsKIH0KIApAQCAtNzI1LDYgKzczNiw4IEBACiAJY3RsciA9IGhiYVtjcC0+Y3Rscl07CiAKIAlzY3NpX2RtYV91bm1hcChjbWQpOworCWlmIChjcC0+SGVhZGVyLlNHVG90YWwgPiBjdGxyLT5tYXhfY21kX3NnZW50cmllcykKKwkJY2Npc3NfdW5tYXBfc2dfY2hhaW5fYmxvY2soY3RsciwgY3ApOwogCiAJY21kLT5yZXN1bHQgPSAoRElEX09LIDw8IDE2KTsgCQkvKiBob3N0IGJ5dGUgKi8KIAljbWQtPnJlc3VsdCB8PSAoQ09NTUFORF9DT01QTEVURSA8PCA4KTsJLyogbXNnIGJ5dGUgKi8KQEAgLTg0Nyw5ICs4NjAsMTAgQEAKIAlzaC0+aW9fcG9ydCA9IDA7CS8vIGdvb2QgZW5vdWdoPyAgRklYTUUsIAogCXNoLT5uX2lvX3BvcnQgPSAwOwkvLyBJIGRvbid0IHRoaW5rIHdlIHVzZSB0aGVzZSB0d28uLi4KIAlzaC0+dGhpc19pZCA9IFNFTEZfU0NTSV9JRDsgIAorCXNoLT5zZ190YWJsZXNpemUgPSBoYmFbY3Rscl0tPm1heHNnZW50cmllczsKIAogCSgoc3RydWN0IGNjaXNzX3Njc2lfYWRhcHRlcl9kYXRhX3QgKikgCi0JCWhiYVtjdGxyXS0+c2NzaV9jdGxyKS0+c2NzaV9ob3N0ID0gKHZvaWQgKikgc2g7CisJCWhiYVtjdGxyXS0+c2NzaV9jdGxyKS0+c2NzaV9ob3N0ID0gc2g7CiAJc2gtPmhvc3RkYXRhWzBdID0gKHVuc2lnbmVkIGxvbmcpIGhiYVtjdGxyXTsKIAlzaC0+aXJxID0gaGJhW2N0bHJdLT5pbnRyW1NJTVBMRV9NT0RFX0lOVF07CiAJc2gtPnVuaXF1ZV9pZCA9IHNoLT5pcnE7CkBAIC0xMzY0LDM0ICsxMzc4LDU0IEBACiAgICBkbWEgbWFwcGluZyAgYW5kIGZpbGxzIGluIHRoZSBzY2F0dGVyIGdhdGhlciBlbnRyaWVzIG9mIHRoZSAKICAgIGNjaXNzIGNvbW1hbmQsIGNwLiAqLwogCi1zdGF0aWMgdm9pZAotY2Npc3Nfc2NhdHRlcl9nYXRoZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIAotCQlDb21tYW5kTGlzdF9zdHJ1Y3QgKmNwLAkKLQkJc3RydWN0IHNjc2lfY21uZCAqY21kKQorc3RhdGljIHZvaWQgY2Npc3Nfc2NhdHRlcl9nYXRoZXIoY3Rscl9pbmZvX3QgKmgsIENvbW1hbmRMaXN0X3N0cnVjdCAqY3AsCisJc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCXVuc2lnbmVkIGludCBsZW47CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAlfX3U2NCBhZGRyNjQ7Ci0JaW50IHVzZV9zZywgaTsKKwlpbnQgcmVxdWVzdF9uc2dzLCBpLCBjaGFpbmVkLCBzZ19pbmRleDsKKwlzdHJ1Y3QgY2Npc3Nfc2NzaV9hZGFwdGVyX2RhdGFfdCAqc2EgPSBoLT5zY3NpX2N0bHI7CisJU0dEZXNjcmlwdG9yX3N0cnVjdCAqY3Vycl9zZzsKIAotCUJVR19PTihzY3NpX3NnX2NvdW50KGNtZCkgPiBNQVhTR0VOVFJJRVMpOworCUJVR19PTihzY3NpX3NnX2NvdW50KGNtZCkgPiBoLT5tYXhzZ2VudHJpZXMpOwogCi0JdXNlX3NnID0gc2NzaV9kbWFfbWFwKGNtZCk7Ci0JaWYgKHVzZV9zZykgewkvKiBub3QgdG9vIG1hbnkgYWRkcnM/ICovCi0JCXNjc2lfZm9yX2VhY2hfc2coY21kLCBzZywgdXNlX3NnLCBpKSB7CisJY2hhaW5lZCA9IDA7CisJc2dfaW5kZXggPSAwOworCWN1cnJfc2cgPSBjcC0+U0c7CisJcmVxdWVzdF9uc2dzID0gc2NzaV9kbWFfbWFwKGNtZCk7CisJaWYgKHJlcXVlc3RfbnNncykgeworCQlzY3NpX2Zvcl9lYWNoX3NnKGNtZCwgc2csIHJlcXVlc3RfbnNncywgaSkgeworCQkJaWYgKHNnX2luZGV4ICsgMSA9PSBoLT5tYXhfY21kX3NnZW50cmllcyAmJgorCQkJCSFjaGFpbmVkICYmIHJlcXVlc3RfbnNncyAtIGkgPiAxKSB7CisJCQkJY2hhaW5lZCA9IDE7CisJCQkJc2dfaW5kZXggPSAwOworCQkJCWN1cnJfc2cgPSBzYS0+Y21kX3NnX2xpc3RbY3AtPmNtZGluZGV4XTsKKwkJCX0KIAkJCWFkZHI2NCA9IChfX3U2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOwogCQkJbGVuICA9IHNnX2RtYV9sZW4oc2cpOwotCQkJY3AtPlNHW2ldLkFkZHIubG93ZXIgPQotCQkJCShfX3UzMikgKGFkZHI2NCAmIChfX3U2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKLQkJCWNwLT5TR1tpXS5BZGRyLnVwcGVyID0KLQkJCQkoX191MzIpICgoYWRkcjY0ID4+IDMyKSAmIChfX3U2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKLQkJCWNwLT5TR1tpXS5MZW4gPSBsZW47Ci0JCQljcC0+U0dbaV0uRXh0ID0gMDsgIC8vIHdlIGFyZSBub3QgY2hhaW5pbmcKKwkJCWN1cnJfc2dbc2dfaW5kZXhdLkFkZHIubG93ZXIgPQorCQkJCShfX3UzMikgKGFkZHI2NCAmIDB4MEZGRkZGRkZGVUxMKTsKKwkJCWN1cnJfc2dbc2dfaW5kZXhdLkFkZHIudXBwZXIgPQorCQkJCShfX3UzMikgKChhZGRyNjQgPj4gMzIpICYgMHgwRkZGRkZGRkZVTEwpOworCQkJY3Vycl9zZ1tzZ19pbmRleF0uTGVuID0gbGVuOworCQkJY3Vycl9zZ1tzZ19pbmRleF0uRXh0ID0gMDsKKwkJCSsrc2dfaW5kZXg7CiAJCX0KKwkJaWYgKGNoYWluZWQpCisJCQljY2lzc19tYXBfc2dfY2hhaW5fYmxvY2soaCwgY3AsCisJCQkJc2EtPmNtZF9zZ19saXN0W2NwLT5jbWRpbmRleF0sCisJCQkJKHJlcXVlc3RfbnNncyAtIChoLT5tYXhfY21kX3NnZW50cmllcyAtIDEpKSAqCisJCQkJCXNpemVvZihTR0Rlc2NyaXB0b3Jfc3RydWN0KSk7CiAJfQotCi0JY3AtPkhlYWRlci5TR0xpc3QgPSAoX191OCkgdXNlX3NnOyAgIC8qIG5vLiBTR3MgY29udGlnIGluIHRoaXMgY21kICovCi0JY3AtPkhlYWRlci5TR1RvdGFsID0gKF9fdTE2KSB1c2Vfc2c7IC8qIHRvdGFsIHNncyBpbiB0aGlzIGNtZCBsaXN0ICovCisJLyogdHJhY2sgaG93IG1hbnkgU0cgZW50cmllcyB3ZSBhcmUgdXNpbmcgKi8KKwlpZiAocmVxdWVzdF9uc2dzID4gaC0+bWF4U0cpCisJCWgtPm1heFNHID0gcmVxdWVzdF9uc2dzOworCWNwLT5IZWFkZXIuU0dUb3RhbCA9IChfX3U4KSByZXF1ZXN0X25zZ3MgKyBjaGFpbmVkOworCWlmIChyZXF1ZXN0X25zZ3MgPiBoLT5tYXhfY21kX3NnZW50cmllcykKKwkJY3AtPkhlYWRlci5TR0xpc3QgPSBoLT5tYXhfY21kX3NnZW50cmllczsKKwllbHNlCisJCWNwLT5IZWFkZXIuU0dMaXN0ID0gY3AtPkhlYWRlci5TR1RvdGFsOwogCXJldHVybjsKIH0KIApAQCAtMTM5OSw3ICsxNDMzLDcgQEAKIHN0YXRpYyBpbnQKIGNjaXNzX3Njc2lfcXVldWVfY29tbWFuZCAoc3RydWN0IHNjc2lfY21uZCAqY21kLCB2b2lkICgqIGRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpCiB7Ci0JY3Rscl9pbmZvX3QgKipjOworCWN0bHJfaW5mb190ICpjOwogCWludCBjdGxyLCByYzsKIAl1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcls4XTsKIAlDb21tYW5kTGlzdF9zdHJ1Y3QgKmNwOwpAQCAtMTQwNyw4ICsxNDQxLDggQEAKIAogCS8vIEdldCB0aGUgcHRyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZSAoaGJhW2ldKSBvdXQgb2YgY21kLT5ob3N0LgogCS8vIFdlIHZpb2xhdGUgY21kLT5ob3N0IHByaXZhY3kgaGVyZS4gIChJcyB0aGVyZSBhbm90aGVyIHdheT8pCi0JYyA9IChjdGxyX2luZm9fdCAqKikgJmNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsJCi0JY3RsciA9ICgqYyktPmN0bHI7CisJYyA9IChjdGxyX2luZm9fdCAqKSBjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07CisJY3RsciA9IGMtPmN0bHI7CiAKIAlyYyA9IGxvb2t1cF9zY3NpM2FkZHIoY3RsciwgY21kLT5kZXZpY2UtPmNoYW5uZWwsIGNtZC0+ZGV2aWNlLT5pZCwgCiAJCQljbWQtPmRldmljZS0+bHVuLCBzY3NpM2FkZHIpOwpAQCAtMTQzMSw3ICsxNDY1LDcgQEAKICAgICAgICAgICAgc2VlIHdoYXQgdGhlIGRldmljZSB0aGlua3Mgb2YgaXQuICovCiAKIAlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGN0bHIpLCBmbGFncyk7Ci0JY3AgPSBzY3NpX2NtZF9hbGxvYygqYyk7CisJY3AgPSBzY3NpX2NtZF9hbGxvYyhjKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soY3RsciksIGZsYWdzKTsKIAlpZiAoY3AgPT0gTlVMTCkgewkJCS8qIHRyb3VibGUuLi4gKi8KIAkJcHJpbnRrKCJzY3NpX2NtZF9hbGxvYyByZXR1cm5lZCBOVUxMIVxuIik7CkBAIC0xNDg5LDE1ICsxNTIzLDE0IEBACiAJCUJVRygpOwogCQlicmVhazsKIAl9Ci0KLQljY2lzc19zY2F0dGVyX2dhdGhlcigoKmMpLT5wZGV2LCBjcCwgY21kKTsgLy8gRmlsbCB0aGUgU0cgbGlzdAorCWNjaXNzX3NjYXR0ZXJfZ2F0aGVyKGMsIGNwLCBjbWQpOwogCiAJLyogUHV0IHRoZSByZXF1ZXN0IG9uIHRoZSB0YWlsIG9mIHRoZSByZXF1ZXN0IHF1ZXVlICovCiAKIAlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGN0bHIpLCBmbGFncyk7Ci0JYWRkUSgmKCpjKS0+cmVxUSwgY3ApOwotCSgqYyktPlFkZXB0aCsrOwotCXN0YXJ0X2lvKCpjKTsKKwlhZGRRKCZjLT5yZXFRLCBjcCk7CisJYy0+UWRlcHRoKys7CisJc3RhcnRfaW8oYyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGN0bHIpLCBmbGFncyk7CiAKIAkvKiB0aGUgY21kJ2xsIGNvbWUgYmFjayB2aWEgaW50ciBoYW5kbGVyIGluIGNvbXBsZXRlX3Njc2lfY29tbWFuZCgpICAqLwpAQCAtMTUxNCw3ICsxNTQ3LDcgQEAKIAkvKiB3ZSBhcmUgYmVpbmcgZm9yY2libHkgdW5sb2FkZWQsIGFuZCBtYXkgbm90IHJlZnVzZS4gKi8KIAogCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soY3RsciksIGZsYWdzKTsKLQlzYSA9IChzdHJ1Y3QgY2Npc3Nfc2NzaV9hZGFwdGVyX2RhdGFfdCAqKSBoYmFbY3Rscl0tPnNjc2lfY3RscjsKKwlzYSA9IGhiYVtjdGxyXS0+c2NzaV9jdGxyOwogCXN0ayA9ICZzYS0+Y21kX3N0YWNrOyAKIAogCS8qIGlmIHdlIHdlcmVuJ3QgZXZlciBhY3R1YWxseSByZWdpc3RlcmVkLCBkb24ndCB1bnJlZ2lzdGVyICovIApAQCAtMTU0MSw3ICsxNTc0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOwotCXNhID0gKHN0cnVjdCBjY2lzc19zY3NpX2FkYXB0ZXJfZGF0YV90ICopIGhiYVtjdGxyXS0+c2NzaV9jdGxyOworCXNhID0gaGJhW2N0bHJdLT5zY3NpX2N0bHI7CiAJc3RrID0gJnNhLT5jbWRfc3RhY2s7IAogCiAJaWYgKHNhLT5yZWdpc3RlcmVkKSB7CkBAIC0xNjU0LDE0ICsxNjg3LDE0IEBACiAJaW50IHJjOwogCUNvbW1hbmRMaXN0X3N0cnVjdCAqY21kX2luX3Ryb3VibGU7CiAJdW5zaWduZWQgY2hhciBsdW5hZGRyWzhdOwotCWN0bHJfaW5mb190ICoqYzsKKwljdGxyX2luZm9fdCAqYzsKIAlpbnQgY3RscjsKIAogCS8qIGZpbmQgdGhlIGNvbnRyb2xsZXIgdG8gd2hpY2ggdGhlIGNvbW1hbmQgdG8gYmUgYWJvcnRlZCB3YXMgc2VudCAqLwotCWMgPSAoY3Rscl9pbmZvX3QgKiopICZzY3NpY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOwkKKwljID0gKGN0bHJfaW5mb190ICopIHNjc2ljbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07CiAJaWYgKGMgPT0gTlVMTCkgLyogcGFyYW5vaWEgKi8KIAkJcmV0dXJuIEZBSUxFRDsKLQljdGxyID0gKCpjKS0+Y3RscjsKKwljdGxyID0gYy0+Y3RscjsKIAlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzcyVkOiByZXNldHRpbmcgdGFwZSBkcml2ZSBvciBtZWRpdW0gY2hhbmdlci5cbiIsIGN0bHIpOwogCS8qIGZpbmQgdGhlIGNvbW1hbmQgdGhhdCdzIGdpdmluZyB1cyB0cm91YmxlICovCiAJY21kX2luX3Ryb3VibGUgPSAoQ29tbWFuZExpc3Rfc3RydWN0ICopIHNjc2ljbWQtPmhvc3Rfc2NyaWJibGU7CkBAIC0xNjcxLDcgKzE3MDQsNyBAQAogCS8qIHNlbmQgYSByZXNldCB0byB0aGUgU0NTSSBMVU4gd2hpY2ggdGhlIGNvbW1hbmQgd2FzIHNlbnQgdG8gKi8KIAlyYyA9IHNlbmRjbWRfd2l0aGlycShDQ0lTU19SRVNFVF9NU0csIGN0bHIsIE5VTEwsIDAsIDAsIGx1bmFkZHIsCiAJCVRZUEVfTVNHKTsKLQlpZiAocmMgPT0gMCAmJiB3YWl0X2Zvcl9kZXZpY2VfdG9fYmVjb21lX3JlYWR5KCpjLCBsdW5hZGRyKSA9PSAwKQorCWlmIChyYyA9PSAwICYmIHdhaXRfZm9yX2RldmljZV90b19iZWNvbWVfcmVhZHkoYywgbHVuYWRkcikgPT0gMCkKIAkJcmV0dXJuIFNVQ0NFU1M7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3MlZDogcmVzZXR0aW5nIGRldmljZSBmYWlsZWQuXG4iLCBjdGxyKTsKIAlyZXR1cm4gRkFJTEVEOwpAQCAtMTY4MiwxNCArMTcxNSwxNCBAQAogCWludCByYzsKIAlDb21tYW5kTGlzdF9zdHJ1Y3QgKmNtZF90b19hYm9ydDsKIAl1bnNpZ25lZCBjaGFyIGx1bmFkZHJbOF07Ci0JY3Rscl9pbmZvX3QgKipjOworCWN0bHJfaW5mb190ICpjOwogCWludCBjdGxyOwogCiAJLyogZmluZCB0aGUgY29udHJvbGxlciB0byB3aGljaCB0aGUgY29tbWFuZCB0byBiZSBhYm9ydGVkIHdhcyBzZW50ICovCi0JYyA9IChjdGxyX2luZm9fdCAqKikgJnNjc2ljbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07CQorCWMgPSAoY3Rscl9pbmZvX3QgKikgc2NzaWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKIAlpZiAoYyA9PSBOVUxMKSAvKiBwYXJhbm9pYSAqLwogCQlyZXR1cm4gRkFJTEVEOwotCWN0bHIgPSAoKmMpLT5jdGxyOworCWN0bHIgPSBjLT5jdGxyOwogCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IGFib3J0aW5nIHRhcmR5IFNDU0kgY21kXG4iLCBjdGxyKTsKIAogCS8qIGZpbmQgdGhlIGNvbW1hbmQgdG8gYmUgYWJvcnRlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzc19zY3NpLmggYi9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuaAppbmRleCA3Yjc1MDI0Li42ZDU4MjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuaAorKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuaApAQCAtMjUsMTYgKzI1LDE2IEBACiAKICNpbmNsdWRlIDxzY3NpL3Njc2ljYW0uaD4gLyogcG9zc2libHkgaXJyZWxldmFudCwgc2luY2Ugd2UgZG9uJ3Qgc2hvdyBkaXNrcyAqLwogCi0JCS8vIHRoZSBzY3NpIGlkIG9mIHRoZSBhZGFwdGVyLi4uCisJCS8qIHRoZSBzY3NpIGlkIG9mIHRoZSBhZGFwdGVyLi4uICovCiAjZGVmaW5lIFNFTEZfU0NTSV9JRCAxNQotCQkvLyAxNSBpcyBzb21ld2hhdCBhcmJpdHJhcnksIHNpbmNlIHRoZSBzY3NpLTIgYnVzCi0JCS8vIHRoYXQncyBwcmVzZW50ZWQgYnkgdGhlIGRyaXZlciB0byB0aGUgT1MgaXMKLQkJLy8gZmFicmljYXRlZC4gIFRoZSAicmVhbCIgc2NzaS0zIGJ1cyB0aGUgCi0JCS8vIGhhcmR3YXJlIHByZXNlbnRzIGlzIGZhYnJpY2F0ZWQgdG9vLgotCQkvLyBUaGUgYWN0dWFsLCBob25lc3QtdG8tZ29vZG5lc3MgcGh5c2ljYWwKLQkJLy8gYnVzIHRoYXQgdGhlIGRldmljZXMgYXJlIGF0dGFjaGVkIHRvIGlzIG5vdCAKLQkJLy8gYWRkcmVzc2libGUgbmF0aXZlbHksIGFuZCBtYXkgaW4gZmFjdCB0dXJuCi0JCS8vIG91dCB0byBiZSBub3Qgc2NzaSBhdCBhbGwuCisJCS8qIDE1IGlzIHNvbWV3aGF0IGFyYml0cmFyeSwgc2luY2UgdGhlIHNjc2ktMiBidXMKKwkJICAgdGhhdCdzIHByZXNlbnRlZCBieSB0aGUgZHJpdmVyIHRvIHRoZSBPUyBpcworCQkgICBmYWJyaWNhdGVkLiAgVGhlICJyZWFsIiBzY3NpLTMgYnVzIHRoZQorCQkgICBoYXJkd2FyZSBwcmVzZW50cyBpcyBmYWJyaWNhdGVkIHRvby4KKwkJICAgVGhlIGFjdHVhbCwgaG9uZXN0LXRvLWdvb2RuZXNzIHBoeXNpY2FsCisJCSAgIGJ1cyB0aGF0IHRoZSBkZXZpY2VzIGFyZSBhdHRhY2hlZCB0byBpcyBub3QKKwkJICAgYWRkcmVzc2libGUgbmF0aXZlbHksIGFuZCBtYXkgaW4gZmFjdCB0dXJuCisJCSAgIG91dCB0byBiZSBub3Qgc2NzaSBhdCBhbGwuICovCiAKICNkZWZpbmUgU0NTSV9DQ0lTU19DQU5fUVVFVUUgMgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMgYi9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKaW5kZXggNjQyMjY1MS4uOTFkMTE2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCisrKyBiL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYwpAQCAtNDQ4LDExICs0NDgsOCBAQAogCQlibGtfcXVldWVfYm91bmNlX2xpbWl0KHEsIGhiYVtpXS0+cGNpX2Rldi0+ZG1hX21hc2spOwogCiAJLyogVGhpcyBpcyBhIGhhcmR3YXJlIGltcG9zZWQgbGltaXQuICovCi0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhxLCBTR19NQVgpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocSwgU0dfTUFYKTsKIAotCS8qIFRoaXMgaXMgYSBkcml2ZXIgbGltaXQgYW5kIGNvdWxkIGJlIGVsaW1pbmF0ZWQuICovCi0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEsIFNHX01BWCk7Ci0JCiAJaW5pdF90aW1lcigmaGJhW2ldLT50aW1lcik7CiAJaGJhW2ldLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIElEQV9USU1FUjsKIAloYmFbaV0tPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyloYmFbaV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYwppbmRleCAxMjkyZTA2Li40ZGYzYjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jCisrKyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMKQEAgLTcwOSw5ICs3MDksOCBAQAogCiAJbWF4X3NlZ19zID0gbWluKHF1ZXVlX21heF9zZWN0b3JzKGIpICogcXVldWVfbG9naWNhbF9ibG9ja19zaXplKGIpLCBtYXhfc2VnX3MpOwogCi0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKHEsIG1heF9zZWdfcyA+PiA5KTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSwgbWF4X3NlZ21lbnRzID8gbWF4X3NlZ21lbnRzIDogTUFYX1BIWVNfU0VHTUVOVFMpOwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocSwgbWF4X3NlZ21lbnRzID8gbWF4X3NlZ21lbnRzIDogTUFYX0hXX1NFR01FTlRTKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocSwgbWF4X3NlZ19zID4+IDkpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocSwgbWF4X3NlZ21lbnRzID8gbWF4X3NlZ21lbnRzIDogQkxLX01BWF9TRUdNRU5UUyk7CiAJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUocSwgbWF4X3NlZ19zKTsKIAlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKHEsIDUxMik7CiAJYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkocSwgUEFHRV9TSVpFLTEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggMzI2NmI0Zi4uYjliMTE3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC00MjM0LDcgKzQyMzQsNyBAQAogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF91bnJlZ19kcml2ZXI7CiAJfQotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhmbG9wcHlfcXVldWUsIDY0KTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoZmxvcHB5X3F1ZXVlLCA2NCk7CiAKIAlibGtfcmVnaXN0ZXJfcmVnaW9uKE1LREVWKEZMT1BQWV9NQUpPUiwgMCksIDI1NiwgVEhJU19NT0RVTEUsCiAJCQkgICAgZmxvcHB5X2ZpbmQsIE5VTEwsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9oZC5jIGIvZHJpdmVycy9ibG9jay9oZC5jCmluZGV4IGQ1Y2RjZTAuLjUxMTZjNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svaGQuYworKysgYi9kcml2ZXJzL2Jsb2NrL2hkLmMKQEAgLTcxOSw3ICs3MTksNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMoaGRfcXVldWUsIDI1NSk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKGhkX3F1ZXVlLCAyNTUpOwogCWluaXRfdGltZXIoJmRldmljZV90aW1lcik7CiAJZGV2aWNlX3RpbWVyLmZ1bmN0aW9uID0gaGRfdGltZXNfb3V0OwogCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoaGRfcXVldWUsIDUxMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL21nX2Rpc2suYyBiL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jCmluZGV4IDAyYjI1ODMuLjU0MTZjOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jCisrKyBiL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jCkBAIC05ODAsNyArOTgwLDcgQEAKIAkJCQlfX2Z1bmNfXywgX19MSU5FX18pOwogCQlnb3RvIHByb2JlX2Vycl82OwogCX0KLQlibGtfcXVldWVfbWF4X3NlY3RvcnMoaG9zdC0+YnJlcSwgTUdfTUFYX1NFQ1RTKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoaG9zdC0+YnJlcSwgTUdfTUFYX1NFQ1RTKTsKIAlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKGhvc3QtPmJyZXEsIE1HX1NFQ1RPUl9TSVpFKTsKIAogCWluaXRfdGltZXIoJmhvc3QtPnRpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZC5jCmluZGV4IDU2OWUzOWUuLmU3MTJjZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGQuYwpAQCAtOTA2LDcgKzkwNiw3IEBACiAJaWYgKCFwZF9xdWV1ZSkKIAkJZ290byBvdXQxOwogCi0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKHBkX3F1ZXVlLCBjbHVzdGVyKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocGRfcXVldWUsIGNsdXN0ZXIpOwogCiAJaWYgKHJlZ2lzdGVyX2Jsa2RldihtYWpvciwgbmFtZSkpCiAJCWdvdG8gb3V0MjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jCmluZGV4IGVhNTRlYTMuLmRkYjRmOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYwpAQCAtOTU2LDggKzk1Niw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhwZl9xdWV1ZSwgY2x1c3Rlcik7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhwZl9xdWV1ZSwgY2x1c3Rlcik7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhwZl9xdWV1ZSwgY2x1c3Rlcik7CiAKIAlmb3IgKHBmID0gdW5pdHMsIHVuaXQgPSAwOyB1bml0IDwgUEZfVU5JVFM7IHBmKyssIHVuaXQrKykgewogCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHBmLT5kaXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwppbmRleCA2OGI1OTU3Li5iNzI5MzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwpAQCAtNTY5LDYgKzU2OSw3IEBACiAJfQogCiAJc3Bpbl9sb2NrX2luaXQoJnBrdC0+bG9jayk7CisJYmlvX2xpc3RfaW5pdCgmcGt0LT5vcmlnX2Jpb3MpOwogCiAJZm9yIChpID0gMDsgaSA8IGZyYW1lczsgaSsrKSB7CiAJCXN0cnVjdCBiaW8gKmJpbyA9IHBrdF9iaW9fYWxsb2MoMSk7CkBAIC03MjEsNDMgKzcyMiw2IEBACiB9CiAKIC8qCi0gKiBBZGQgYSBiaW8gdG8gYSBzaW5nbGUgbGlua2VkIGxpc3QgZGVmaW5lZCBieSBpdHMgaGVhZCBhbmQgdGFpbCBwb2ludGVycy4KLSAqLwotc3RhdGljIHZvaWQgcGt0X2FkZF9saXN0X2xhc3Qoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvICoqbGlzdF9oZWFkLCBzdHJ1Y3QgYmlvICoqbGlzdF90YWlsKQotewotCWJpby0+YmlfbmV4dCA9IE5VTEw7Ci0JaWYgKCpsaXN0X3RhaWwpIHsKLQkJQlVHX09OKCgqbGlzdF9oZWFkKSA9PSBOVUxMKTsKLQkJKCpsaXN0X3RhaWwpLT5iaV9uZXh0ID0gYmlvOwotCQkoKmxpc3RfdGFpbCkgPSBiaW87Ci0JfSBlbHNlIHsKLQkJQlVHX09OKCgqbGlzdF9oZWFkKSAhPSBOVUxMKTsKLQkJKCpsaXN0X2hlYWQpID0gYmlvOwotCQkoKmxpc3RfdGFpbCkgPSBiaW87Ci0JfQotfQotCi0vKgotICogUmVtb3ZlIGFuZCByZXR1cm4gdGhlIGZpcnN0IGJpbyBmcm9tIGEgc2luZ2xlIGxpbmtlZCBsaXN0IGRlZmluZWQgYnkgaXRzCi0gKiBoZWFkIGFuZCB0YWlsIHBvaW50ZXJzLgotICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBiaW8gKnBrdF9nZXRfbGlzdF9maXJzdChzdHJ1Y3QgYmlvICoqbGlzdF9oZWFkLCBzdHJ1Y3QgYmlvICoqbGlzdF90YWlsKQotewotCXN0cnVjdCBiaW8gKmJpbzsKLQotCWlmICgqbGlzdF9oZWFkID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JYmlvID0gKmxpc3RfaGVhZDsKLQkqbGlzdF9oZWFkID0gYmlvLT5iaV9uZXh0OwotCWlmICgqbGlzdF9oZWFkID09IE5VTEwpCi0JCSpsaXN0X3RhaWwgPSBOVUxMOwotCi0JYmlvLT5iaV9uZXh0ID0gTlVMTDsKLQlyZXR1cm4gYmlvOwotfQotCi0vKgogICogU2VuZCBhIHBhY2tldF9jb21tYW5kIHRvIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZSBhbmQKICAqIHdhaXQgZm9yIGNvbXBsZXRpb24uCiAgKi8KQEAgLTg3NiwxMyArODQwLDEwIEBACiBzdGF0aWMgdm9pZCBwa3RfcXVldWVfYmlvKHN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQsIHN0cnVjdCBiaW8gKmJpbykKIHsKIAlzcGluX2xvY2soJnBkLT5pb3NjaGVkLmxvY2spOwotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEKSB7Ci0JCXBrdF9hZGRfbGlzdF9sYXN0KGJpbywgJnBkLT5pb3NjaGVkLnJlYWRfcXVldWUsCi0JCQkJICAmcGQtPmlvc2NoZWQucmVhZF9xdWV1ZV90YWlsKTsKLQl9IGVsc2UgewotCQlwa3RfYWRkX2xpc3RfbGFzdChiaW8sICZwZC0+aW9zY2hlZC53cml0ZV9xdWV1ZSwKLQkJCQkgICZwZC0+aW9zY2hlZC53cml0ZV9xdWV1ZV90YWlsKTsKLQl9CisJaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQpCisJCWJpb19saXN0X2FkZCgmcGQtPmlvc2NoZWQucmVhZF9xdWV1ZSwgYmlvKTsKKwllbHNlCisJCWJpb19saXN0X2FkZCgmcGQtPmlvc2NoZWQud3JpdGVfcXVldWUsIGJpbyk7CiAJc3Bpbl91bmxvY2soJnBkLT5pb3NjaGVkLmxvY2spOwogCiAJYXRvbWljX3NldCgmcGQtPmlvc2NoZWQuYXR0ZW50aW9uLCAxKTsKQEAgLTkxNyw4ICs4NzgsOCBAQAogCQlpbnQgcmVhZHNfcXVldWVkLCB3cml0ZXNfcXVldWVkOwogCiAJCXNwaW5fbG9jaygmcGQtPmlvc2NoZWQubG9jayk7Ci0JCXJlYWRzX3F1ZXVlZCA9IChwZC0+aW9zY2hlZC5yZWFkX3F1ZXVlICE9IE5VTEwpOwotCQl3cml0ZXNfcXVldWVkID0gKHBkLT5pb3NjaGVkLndyaXRlX3F1ZXVlICE9IE5VTEwpOworCQlyZWFkc19xdWV1ZWQgPSAhYmlvX2xpc3RfZW1wdHkoJnBkLT5pb3NjaGVkLnJlYWRfcXVldWUpOworCQl3cml0ZXNfcXVldWVkID0gIWJpb19saXN0X2VtcHR5KCZwZC0+aW9zY2hlZC53cml0ZV9xdWV1ZSk7CiAJCXNwaW5fdW5sb2NrKCZwZC0+aW9zY2hlZC5sb2NrKTsKIAogCQlpZiAoIXJlYWRzX3F1ZXVlZCAmJiAhd3JpdGVzX3F1ZXVlZCkKQEAgLTkyNyw3ICs4ODgsNyBAQAogCQlpZiAocGQtPmlvc2NoZWQud3JpdGluZykgewogCQkJaW50IG5lZWRfd3JpdGVfc2VlayA9IDE7CiAJCQlzcGluX2xvY2soJnBkLT5pb3NjaGVkLmxvY2spOwotCQkJYmlvID0gcGQtPmlvc2NoZWQud3JpdGVfcXVldWU7CisJCQliaW8gPSBiaW9fbGlzdF9wZWVrKCZwZC0+aW9zY2hlZC53cml0ZV9xdWV1ZSk7CiAJCQlzcGluX3VubG9jaygmcGQtPmlvc2NoZWQubG9jayk7CiAJCQlpZiAoYmlvICYmIChiaW8tPmJpX3NlY3RvciA9PSBwZC0+aW9zY2hlZC5sYXN0X3dyaXRlKSkKIAkJCQluZWVkX3dyaXRlX3NlZWsgPSAwOwpAQCAtOTUwLDEzICs5MTEsMTAgQEAKIAkJfQogCiAJCXNwaW5fbG9jaygmcGQtPmlvc2NoZWQubG9jayk7Ci0JCWlmIChwZC0+aW9zY2hlZC53cml0aW5nKSB7Ci0JCQliaW8gPSBwa3RfZ2V0X2xpc3RfZmlyc3QoJnBkLT5pb3NjaGVkLndyaXRlX3F1ZXVlLAotCQkJCQkJICZwZC0+aW9zY2hlZC53cml0ZV9xdWV1ZV90YWlsKTsKLQkJfSBlbHNlIHsKLQkJCWJpbyA9IHBrdF9nZXRfbGlzdF9maXJzdCgmcGQtPmlvc2NoZWQucmVhZF9xdWV1ZSwKLQkJCQkJCSAmcGQtPmlvc2NoZWQucmVhZF9xdWV1ZV90YWlsKTsKLQkJfQorCQlpZiAocGQtPmlvc2NoZWQud3JpdGluZykKKwkJCWJpbyA9IGJpb19saXN0X3BvcCgmcGQtPmlvc2NoZWQud3JpdGVfcXVldWUpOworCQllbHNlCisJCQliaW8gPSBiaW9fbGlzdF9wb3AoJnBkLT5pb3NjaGVkLnJlYWRfcXVldWUpOwogCQlzcGluX3VubG9jaygmcGQtPmlvc2NoZWQubG9jayk7CiAKIAkJaWYgKCFiaW8pCkBAIC05OTIsMTQgKzk1MCwxNCBAQAogc3RhdGljIGludCBwa3Rfc2V0X3NlZ21lbnRfbWVyZ2luZyhzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKIAlpZiAoKHBkLT5zZXR0aW5ncy5zaXplIDw8IDkpIC8gQ0RfRlJBTUVTSVpFCi0JICAgIDw9IHF1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEpKSB7CisJICAgIDw9IHF1ZXVlX21heF9zZWdtZW50cyhxKSkgewogCQkvKgogCQkgKiBUaGUgY2Ryb20gZGV2aWNlIGNhbiBoYW5kbGUgb25lIHNlZ21lbnQvZnJhbWUKIAkJICovCiAJCWNsZWFyX2JpdChQQUNLRVRfTUVSR0VfU0VHUywgJnBkLT5mbGFncyk7CiAJCXJldHVybiAwOwogCX0gZWxzZSBpZiAoKHBkLT5zZXR0aW5ncy5zaXplIDw8IDkpIC8gUEFHRV9TSVpFCi0JCSAgIDw9IHF1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEpKSB7CisJCSAgIDw9IHF1ZXVlX21heF9zZWdtZW50cyhxKSkgewogCQkvKgogCQkgKiBXZSBjYW4gaGFuZGxlIHRoaXMgY2FzZSBhdCB0aGUgZXhwZW5zZSBvZiBzb21lIGV4dHJhIG1lbW9yeQogCQkgKiBjb3BpZXMgZHVyaW5nIHdyaXRlIG9wZXJhdGlvbnMKQEAgLTExMTQsNyArMTA3Miw3IEBACiAJaW50IGY7CiAJY2hhciB3cml0dGVuW1BBQ0tFVF9NQVhfU0laRV07CiAKLQlCVUdfT04oIXBrdC0+b3JpZ19iaW9zKTsKKwlCVUdfT04oYmlvX2xpc3RfZW1wdHkoJnBrdC0+b3JpZ19iaW9zKSk7CiAKIAlhdG9taWNfc2V0KCZwa3QtPmlvX3dhaXQsIDApOwogCWF0b21pY19zZXQoJnBrdC0+aW9fZXJyb3JzLCAwKTsKQEAgLTExMjQsNyArMTA4Miw3IEBACiAJICovCiAJbWVtc2V0KHdyaXR0ZW4sIDAsIHNpemVvZih3cml0dGVuKSk7CiAJc3Bpbl9sb2NrKCZwa3QtPmxvY2spOwotCWZvciAoYmlvID0gcGt0LT5vcmlnX2Jpb3M7IGJpbzsgYmlvID0gYmlvLT5iaV9uZXh0KSB7CisJYmlvX2xpc3RfZm9yX2VhY2goYmlvLCAmcGt0LT5vcmlnX2Jpb3MpIHsKIAkJaW50IGZpcnN0X2ZyYW1lID0gKGJpby0+Ymlfc2VjdG9yIC0gcGt0LT5zZWN0b3IpIC8gKENEX0ZSQU1FU0laRSA+PiA5KTsKIAkJaW50IG51bV9mcmFtZXMgPSBiaW8tPmJpX3NpemUgLyBDRF9GUkFNRVNJWkU7CiAJCXBkLT5zdGF0cy5zZWNzX3cgKz0gbnVtX2ZyYW1lcyAqIChDRF9GUkFNRVNJWkUgPj4gOSk7CkBAIC0xMzYzLDcgKzEzMjEsNyBAQAogCQkJYnJlYWs7CiAJCXBrdF9yYnRyZWVfZXJhc2UocGQsIG5vZGUpOwogCQlzcGluX2xvY2soJnBrdC0+bG9jayk7Ci0JCXBrdF9hZGRfbGlzdF9sYXN0KGJpbywgJnBrdC0+b3JpZ19iaW9zLCAmcGt0LT5vcmlnX2Jpb3NfdGFpbCk7CisJCWJpb19saXN0X2FkZCgmcGt0LT5vcmlnX2Jpb3MsIGJpbyk7CiAJCXBrdC0+d3JpdGVfc2l6ZSArPSBiaW8tPmJpX3NpemUgLyBDRF9GUkFNRVNJWkU7CiAJCXNwaW5fdW5sb2NrKCZwa3QtPmxvY2spOwogCX0KQEAgLTE0MDksNyArMTM2Nyw3IEBACiAJICovCiAJZnJhbWVzX3dyaXRlID0gMDsKIAlzcGluX2xvY2soJnBrdC0+bG9jayk7Ci0JZm9yIChiaW8gPSBwa3QtPm9yaWdfYmlvczsgYmlvOyBiaW8gPSBiaW8tPmJpX25leHQpIHsKKwliaW9fbGlzdF9mb3JfZWFjaChiaW8sICZwa3QtPm9yaWdfYmlvcykgewogCQlpbnQgc2VnbWVudCA9IGJpby0+YmlfaWR4OwogCQlpbnQgc3JjX29mZnMgPSAwOwogCQlpbnQgZmlyc3RfZnJhbWUgPSAoYmlvLT5iaV9zZWN0b3IgLSBwa3QtPnNlY3RvcikgLyAoQ0RfRlJBTUVTSVpFID4+IDkpOwpAQCAtMTQ3MiwyMCArMTQzMCwxNCBAQAogCiBzdGF0aWMgdm9pZCBwa3RfZmluaXNoX3BhY2tldChzdHJ1Y3QgcGFja2V0X2RhdGEgKnBrdCwgaW50IHVwdG9kYXRlKQogewotCXN0cnVjdCBiaW8gKmJpbywgKm5leHQ7CisJc3RydWN0IGJpbyAqYmlvOwogCiAJaWYgKCF1cHRvZGF0ZSkKIAkJcGt0LT5jYWNoZV92YWxpZCA9IDA7CiAKIAkvKiBGaW5pc2ggYWxsIGJpb3MgY29ycmVzcG9uZGluZyB0byB0aGlzIHBhY2tldCAqLwotCWJpbyA9IHBrdC0+b3JpZ19iaW9zOwotCXdoaWxlIChiaW8pIHsKLQkJbmV4dCA9IGJpby0+YmlfbmV4dDsKLQkJYmlvLT5iaV9uZXh0ID0gTlVMTDsKKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmcGt0LT5vcmlnX2Jpb3MpKSkKIAkJYmlvX2VuZGlvKGJpbywgdXB0b2RhdGUgPyAwIDogLUVJTyk7Ci0JCWJpbyA9IG5leHQ7Ci0JfQotCXBrdC0+b3JpZ19iaW9zID0gcGt0LT5vcmlnX2Jpb3NfdGFpbCA9IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIHBrdF9ydW5fc3RhdGVfbWFjaGluZShzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkLCBzdHJ1Y3QgcGFja2V0X2RhdGEgKnBrdCkKQEAgLTIzNjAsNyArMjMxMiw3IEBACiAJCSAqIGV2ZW4gaWYgdGhlIHNpemUgaXMgYSBtdWx0aXBsZSBvZiB0aGUgcGFja2V0IHNpemUuCiAJCSAqLwogCQlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwotCQlibGtfcXVldWVfbWF4X3NlY3RvcnMocSwgcGQtPnNldHRpbmdzLnNpemUpOworCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocSwgcGQtPnNldHRpbmdzLnNpemUpOwogCQlzcGluX3VubG9ja19pcnEocS0+cXVldWVfbG9jayk7CiAJCXNldF9iaXQoUEFDS0VUX1dSSVRBQkxFLCAmcGQtPmZsYWdzKTsKIAl9IGVsc2UgewpAQCAtMjU2Nyw4ICsyNTE5LDcgQEAKIAkJCXNwaW5fbG9jaygmcGt0LT5sb2NrKTsKIAkJCWlmICgocGt0LT5zdGF0ZSA9PSBQQUNLRVRfV0FJVElOR19TVEFURSkgfHwKIAkJCSAgICAocGt0LT5zdGF0ZSA9PSBQQUNLRVRfUkVBRF9XQUlUX1NUQVRFKSkgewotCQkJCXBrdF9hZGRfbGlzdF9sYXN0KGJpbywgJnBrdC0+b3JpZ19iaW9zLAotCQkJCQkJICAmcGt0LT5vcmlnX2Jpb3NfdGFpbCk7CisJCQkJYmlvX2xpc3RfYWRkKCZwa3QtPm9yaWdfYmlvcywgYmlvKTsKIAkJCQlwa3QtPndyaXRlX3NpemUgKz0gYmlvLT5iaV9zaXplIC8gQ0RfRlJBTUVTSVpFOwogCQkJCWlmICgocGt0LT53cml0ZV9zaXplID49IHBrdC0+ZnJhbWVzKSAmJgogCQkJCSAgICAocGt0LT5zdGF0ZSA9PSBQQUNLRVRfV0FJVElOR19TVEFURSkpIHsKQEAgLTI2NjIsNyArMjYxMyw3IEBACiAKIAlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KHEsIHBrdF9tYWtlX3JlcXVlc3QpOwogCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUocSwgQ0RfRlJBTUVTSVpFKTsKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMocSwgUEFDS0VUX01BWF9TRUNUT1JTKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocSwgUEFDS0VUX01BWF9TRUNUT1JTKTsKIAlibGtfcXVldWVfbWVyZ2VfYnZlYyhxLCBwa3RfbWVyZ2VfYnZlYyk7CiAJcS0+cXVldWVkYXRhID0gcGQ7CiB9CkBAIC0yODk4LDYgKzI4NDksOCBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJnBkLT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcGQtPmlvc2NoZWQubG9jayk7CisJYmlvX2xpc3RfaW5pdCgmcGQtPmlvc2NoZWQucmVhZF9xdWV1ZSk7CisJYmlvX2xpc3RfaW5pdCgmcGQtPmlvc2NoZWQud3JpdGVfcXVldWUpOwogCXNwcmludGYocGQtPm5hbWUsIERSSVZFUl9OQU1FIiVkIiwgaWR4KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwZC0+d3F1ZXVlKTsKIAlwZC0+YmlvX3F1ZXVlID0gUkJfUk9PVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcHMzZGlzay5jIGIvZHJpdmVycy9ibG9jay9wczNkaXNrLmMKaW5kZXggMDNhMTMwZC4uYmM5NTQ2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wczNkaXNrLmMKKysrIGIvZHJpdmVycy9ibG9jay9wczNkaXNrLmMKQEAgLTQ3NCw3ICs0NzQsNyBAQAogCiAJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChxdWV1ZSwgQkxLX0JPVU5DRV9ISUdIKTsKIAotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxdWV1ZSwgZGV2LT5ib3VuY2Vfc2l6ZSA+PiA5KTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocXVldWUsIGRldi0+Ym91bmNlX3NpemUgPj4gOSk7CiAJYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkocXVldWUsIC0xVUwpOwogCWJsa19xdWV1ZV9kbWFfYWxpZ25tZW50KHF1ZXVlLCBkZXYtPmJsa19zaXplLTEpOwogCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUocXVldWUsIGRldi0+YmxrX3NpemUpOwpAQCAtNDgyLDggKzQ4Miw3IEBACiAJYmxrX3F1ZXVlX29yZGVyZWQocXVldWUsIFFVRVVFX09SREVSRURfRFJBSU5fRkxVU0gsCiAJCQkgIHBzM2Rpc2tfcHJlcGFyZV9mbHVzaCk7CiAKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocXVldWUsIC0xKTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHF1ZXVlLCAtMSk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhxdWV1ZSwgLTEpOwogCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHF1ZXVlLCBkZXYtPmJvdW5jZV9zaXplKTsKIAogCWdlbmRpc2sgPSBhbGxvY19kaXNrKFBTM0RJU0tfTUlOT1JTKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcHMzdnJhbS5jIGIvZHJpdmVycy9ibG9jay9wczN2cmFtLmMKaW5kZXggMWZiNmMzMS4uZTQ0NjA4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wczN2cmFtLmMKKysrIGIvZHJpdmVycy9ibG9jay9wczN2cmFtLmMKQEAgLTc1MSwxMCArNzUxLDkgQEAKIAlwcml2LT5xdWV1ZSA9IHF1ZXVlOwogCXF1ZXVlLT5xdWV1ZWRhdGEgPSBkZXY7CiAJYmxrX3F1ZXVlX21ha2VfcmVxdWVzdChxdWV1ZSwgcHMzdnJhbV9tYWtlX3JlcXVlc3QpOwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxdWV1ZSwgTUFYX1BIWVNfU0VHTUVOVFMpOwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocXVldWUsIE1BWF9IV19TRUdNRU5UUyk7Ci0JYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUocXVldWUsIE1BWF9TRUdNRU5UX1NJWkUpOwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxdWV1ZSwgU0FGRV9NQVhfU0VDVE9SUyk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhxdWV1ZSwgQkxLX01BWF9TRUdNRU5UUyk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUocXVldWUsIEJMS19NQVhfU0VHTUVOVF9TSVpFKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocXVldWUsIEJMS19TQUZFX01BWF9TRUNUT1JTKTsKIAogCWdlbmRpc2sgPSBhbGxvY19kaXNrKDEpOwogCWlmICghZ2VuZGlzaykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zdW52ZGMuYyBiL2RyaXZlcnMvYmxvY2svc3VudmRjLmMKaW5kZXggNDExZjA2NC4uNDhlOGZlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zdW52ZGMuYworKysgYi9kcml2ZXJzL2Jsb2NrL3N1bnZkYy5jCkBAIC02OTEsOSArNjkxLDggQEAKIAogCXBvcnQtPmRpc2sgPSBnOwogCi0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhxLCBwb3J0LT5yaW5nX2Nvb2tpZXMpOwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxLCBwb3J0LT5yaW5nX2Nvb2tpZXMpOwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCBwb3J0LT5tYXhfeGZlcl9zaXplKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHEsIHBvcnQtPnJpbmdfY29va2llcyk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHEsIHBvcnQtPm1heF94ZmVyX3NpemUpOwogCWctPm1ham9yID0gdmRjX21ham9yOwogCWctPmZpcnN0X21pbm9yID0gcG9ydC0+dmlvLnZkZXYtPmRldl9ubyA8PCBQQVJUSVRJT05fU0hJRlQ7CiAJc3RyY3B5KGctPmRpc2tfbmFtZSwgcG9ydC0+ZGlza19uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3dpbS5jIGIvZHJpdmVycy9ibG9jay9zd2ltLmMKaW5kZXggOGY1NjllMy4uODIxYzI4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zd2ltLmMKKysrIGIvZHJpdmVycy9ibG9jay9zd2ltLmMKQEAgLTg2NCw3ICs4NjQsNyBAQAogCXN0cnVjdCBzd2ltX3ByaXYgKnN3ZDsKIAlpbnQgcmV0OwogCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAic3dpbS1yZWdzIik7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVzKSB7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwpAQCAtOTQyLDcgKzk0Miw3IEBACiAKIAlpb3VubWFwKHN3ZC0+YmFzZSk7CiAKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKGRldiwgSU9SRVNPVVJDRV9NRU0sICJzd2ltLXJlZ3MiKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKHJlcykKIAkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3g4LmMgYi9kcml2ZXJzL2Jsb2NrL3N4OC5jCmluZGV4IGE3YzQxODQuLmI3MGYwZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc3g4LmMKKysrIGIvZHJpdmVycy9ibG9jay9zeDguYwpAQCAtNDA5LDcgKzQwOSw3IEBACiBzdGF0aWMgdm9pZCBjYXJtX3JlbW92ZV9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIHN0YXRpYyBpbnQgY2FybV9iZGV2X2dldGdlbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbyk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjYXJtX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjYXJtX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfUFJPTUlTRSwgMHg4MDAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCB9LAogCXsgUENJX1ZFTkRPUl9JRF9QUk9NSVNFLCAweDgwMDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIH0sCiAJeyB9CS8qIHRlcm1pbmF0ZSBsaXN0ICovCkBAIC0xNTE4LDggKzE1MTgsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJZGlzay0+cXVldWUgPSBxOwotCQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEsIENBUk1fTUFYX1JFUV9TRyk7Ci0JCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxLCBDQVJNX01BWF9SRVFfU0cpOworCQlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHEsIENBUk1fTUFYX1JFUV9TRyk7CiAJCWJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5KHEsIENBUk1fU0dfQk9VTkRBUlkpOwogCiAJCXEtPnF1ZXVlZGF0YSA9IHBvcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ViLmMgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKaW5kZXggYzczOWIyMC4uMmU4ODk4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91Yi5jCisrKyBiL2RyaXZlcnMvYmxvY2svdWIuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAjZGVmaW5lIHViX3VzYl9pZHMgIHVzYl9zdG9yYWdlX3VzYl9pZHMKICNlbHNlCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1Yl91c2JfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdWJfdXNiX2lkc1tdID0gewogCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1NDU0ksIFVTX1BSX0JVTEspIH0sCiAJeyB9CiB9OwpAQCAtMjMyMCwxMCArMjMyMCw5IEBACiAJZGlzay0+cXVldWUgPSBxOwogCiAJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChxLCBCTEtfQk9VTkNFX0hJR0gpOwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocSwgVUJfTUFYX1JFUV9TRyk7Ci0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEsIFVCX01BWF9SRVFfU0cpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocSwgVUJfTUFYX1JFUV9TRyk7CiAJYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkocSwgMHhmZmZmZmZmZik7CS8qIER1YmlvdXMuICovCi0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKHEsIFVCX01BWF9TRUNUT1JTKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocSwgVUJfTUFYX1NFQ1RPUlMpOwogCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUocSwgbHVuLT5jYXBhY2l0eS5ic2l6ZSk7CiAKIAlsdW4tPmRpc2sgPSBkaXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay92aW9kYXNkLmMgYi9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYwppbmRleCBhOGM4YjU2Li43ODhkOTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYworKysgYi9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYwpAQCAtMjgsNiArMjgsOSBAQAogICogQWxsIGRpc2sgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIGJ5IHNlbmRpbmcgbWVzc2FnZXMgYmFjayBhbmQgZm9ydGggdG8KICAqIHRoZSBPUy80MDAgcGFydGl0aW9uLgogICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgInZpb2Q6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC02Myw5ICs2Niw2IEBACiAKICNkZWZpbmUgVklPRF9WRVJTCQkiMS42NCIKIAotI2RlZmluZSBWSU9EX0tFUk5fV0FSTklORwlLRVJOX1dBUk5JTkcgInZpb2Q6ICIKLSNkZWZpbmUgVklPRF9LRVJOX0lORk8JCUtFUk5fSU5GTyAidmlvZDogIgotCiBlbnVtIHsKIAlQQVJUSVRJT05fU0hJRlQgPSAzLAogCU1BWF9ESVNLTk8gPSBIVk1BWEFSQ0hJVEVDVEVEVklSVFVBTERJU0tTLApAQCAtMTU2LDcgKzE1Niw3IEBACiAJCQkoKHU2NClERVZJQ0VfTk8oZCkgPDwgNDgpIHwgKCh1NjQpZmxhZ3MgPDwgMzIpLAogCQkJMCwgMCwgMCk7CiAJaWYgKGh2cmMgIT0gMCkgewotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcgIkhWIG9wZW4gZmFpbGVkICVkXG4iLCAoaW50KWh2cmMpOworCQlwcl93YXJuaW5nKCJIViBvcGVuIGZhaWxlZCAlZFxuIiwgKGludClodnJjKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xNjcsOSArMTY3LDggQEAKIAkJY29uc3Qgc3RydWN0IHZpb19lcnJvcl9lbnRyeSAqZXJyID0KIAkJCXZpb19sb29rdXBfcmModmlvZGFzZF9lcnJfdGFibGUsIHdlLnN1Yl9yZXN1bHQpOwogCi0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORwotCQkJCSJiYWQgcmMgb3BlbmluZyBkaXNrOiAlZDoweCUwNHggKCVzKVxuIiwKLQkJCQkoaW50KXdlLnJjLCB3ZS5zdWJfcmVzdWx0LCBlcnItPm1zZyk7CisJCXByX3dhcm5pbmcoImJhZCByYyBvcGVuaW5nIGRpc2s6ICVkOjB4JTA0eCAoJXMpXG4iLAorCQkJICAgKGludCl3ZS5yYywgd2Uuc3ViX3Jlc3VsdCwgZXJyLT5tc2cpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTE5NSw4ICsxOTQsNyBAQAogCQkJKCh1NjQpREVWSUNFX05PKGQpIDw8IDQ4KSAvKiB8ICgodTY0KWZsYWdzIDw8IDMyKSAqLywKIAkJCTAsIDAsIDApOwogCWlmIChodnJjICE9IDApCi0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORyAiSFYgY2xvc2UgY2FsbCBmYWlsZWQgJWRcbiIsCi0JCQkJKGludClodnJjKTsKKwkJcHJfd2FybmluZygiSFYgY2xvc2UgY2FsbCBmYWlsZWQgJWRcbiIsIChpbnQpaHZyYyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4OCw4ICsyODYsNyBAQAogCQliZXZlbnQgPSAoc3RydWN0IHZpb2Jsb2NrbHBldmVudCAqKQogCQkJdmlvX2dldF9ldmVudF9idWZmZXIodmlvbWFqb3JzdWJ0eXBlX2Jsb2NraW8pOwogCQlpZiAoYmV2ZW50ID09IE5VTEwpIHsKLQkJCXByaW50ayhWSU9EX0tFUk5fV0FSTklORwotCQkJICAgICAgICJlcnJvciBhbGxvY2F0aW5nIGRpc2sgZXZlbnQgYnVmZmVyXG4iKTsKKwkJCXByX3dhcm5pbmcoImVycm9yIGFsbG9jYXRpbmcgZGlzayBldmVudCBidWZmZXJcbiIpOwogCQkJZ290byBlcnJvcl9yZXQ7CiAJCX0KIApAQCAtMzMzLDkgKzMzMCw4IEBACiAJfQogCiAJaWYgKGh2cmMgIT0gSHZMcEV2ZW50X1JjX0dvb2QpIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiZXJyb3Igc2VuZGluZyBkaXNrIGV2ZW50IHRvIE9TLzQwMCAocmMgJWQpXG4iLAotCQkgICAgICAgKGludClodnJjKTsKKwkJcHJfd2FybmluZygiZXJyb3Igc2VuZGluZyBkaXNrIGV2ZW50IHRvIE9TLzQwMCAocmMgJWQpXG4iLAorCQkJICAgKGludClodnJjKTsKIAkJZ290byBlcnJvcl9yZXQ7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpb2Rhc2Rfc3BpbmxvY2ssIGZsYWdzKTsKQEAgLTQwMiw3ICszOTgsNyBAQAogCQkJKCh1NjQpZGV2X25vIDw8IDQ4KSB8ICgodTY0KWZsYWdzPDwgMzIpLAogCQkJMCwgMCwgMCk7CiAJaWYgKGh2cmMgIT0gMCkgewotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcgImJhZCByYyBvbiBIViBvcGVuICVkXG4iLCAoaW50KWh2cmMpOworCQlwcl93YXJuaW5nKCJiYWQgcmMgb24gSFYgb3BlbiAlZFxuIiwgKGludClodnJjKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC00MTYsOSArNDEyLDggQEAKIAkJZ290byByZXRyeTsKIAl9CiAJaWYgKHdlLm1heF9kaXNrID4gKE1BWF9ESVNLTk8gLSAxKSkgewotCQlwcmludGtfb25jZShWSU9EX0tFUk5fSU5GTwotCQkJIk9ubHkgZXhhbWluaW5nIHRoZSBmaXJzdCAlZCBvZiAlZCBkaXNrcyBjb25uZWN0ZWRcbiIsCi0JCQlNQVhfRElTS05PLCB3ZS5tYXhfZGlzayArIDEpOworCQlwcmludGtfb25jZShLRVJOX0lORk8gcHJfZm10KCJPbmx5IGV4YW1pbmluZyB0aGUgZmlyc3QgJWQgb2YgJWQgZGlza3MgY29ubmVjdGVkXG4iKSwKKwkJCSAgICBNQVhfRElTS05PLCB3ZS5tYXhfZGlzayArIDEpOwogCX0KIAogCS8qIFNlbmQgdGhlIGNsb3NlIGV2ZW50IHRvIE9TLzQwMC4gIFdlIERPTidUIGV4cGVjdCBhIHJlc3BvbnNlICovCkBAIC00MzIsMTcgKzQyNywxNSBAQAogCQkJKCh1NjQpZGV2X25vIDw8IDQ4KSB8ICgodTY0KWZsYWdzIDw8IDMyKSwKIAkJCTAsIDAsIDApOwogCWlmIChodnJjICE9IDApIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiYmFkIHJjIHNlbmRpbmcgZXZlbnQgdG8gT1MvNDAwICVkXG4iLCAoaW50KWh2cmMpOworCQlwcl93YXJuaW5nKCJiYWQgcmMgc2VuZGluZyBldmVudCB0byBPUy80MDAgJWRcbiIsIChpbnQpaHZyYyk7CiAJCXJldHVybiAwOwogCX0KIAogCWlmIChkLT5kZXYgPT0gTlVMTCkgewogCQkvKiB0aGlzIGlzIHdoZW4gd2UgcmVwcm9iZSBmb3IgbmV3IGRpc2tzICovCiAJCWlmICh2aW9fY3JlYXRlX3Zpb2Rhc2QoZGV2X25vKSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcKLQkJCQkiY2Fubm90IGFsbG9jYXRlIHZpcnR1YWwgZGV2aWNlIGZvciBkaXNrICVkXG4iLAotCQkJCWRldl9ubyk7CisJCQlwcl93YXJuaW5nKCJjYW5ub3QgYWxsb2NhdGUgdmlydHVhbCBkZXZpY2UgZm9yIGRpc2sgJWRcbiIsCisJCQkJICAgZGV2X25vKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCS8qCkBAIC00NTcsMjMgKzQ1MCwyMCBAQAogCXNwaW5fbG9ja19pbml0KCZkLT5xX2xvY2spOwogCXEgPSBibGtfaW5pdF9xdWV1ZShkb192aW9kYXNkX3JlcXVlc3QsICZkLT5xX2xvY2spOwogCWlmIChxID09IE5VTEwpIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HICJjYW5ub3QgYWxsb2NhdGUgcXVldWUgZm9yIGRpc2sgJWRcbiIsCi0JCQkJZGV2X25vKTsKKwkJcHJfd2FybmluZygiY2Fubm90IGFsbG9jYXRlIHF1ZXVlIGZvciBkaXNrICVkXG4iLCBkZXZfbm8pOwogCQlyZXR1cm4gMDsKIAl9CiAJZyA9IGFsbG9jX2Rpc2soMSA8PCBQQVJUSVRJT05fU0hJRlQpOwogCWlmIChnID09IE5VTEwpIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HCi0JCQkJImNhbm5vdCBhbGxvY2F0ZSBkaXNrIHN0cnVjdHVyZSBmb3IgZGlzayAlZFxuIiwKLQkJCQlkZXZfbm8pOworCQlwcl93YXJuaW5nKCJjYW5ub3QgYWxsb2NhdGUgZGlzayBzdHJ1Y3R1cmUgZm9yIGRpc2sgJWRcbiIsCisJCQkgICBkZXZfbm8pOwogCQlibGtfY2xlYW51cF9xdWV1ZShxKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJZC0+ZGlzayA9IGc7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhxLCBWSU9NQVhCTE9DS0RNQSk7Ci0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEsIFZJT01BWEJMT0NLRE1BKTsKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMocSwgVklPREFTRF9NQVhTRUNUT1JTKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHEsIFZJT01BWEJMT0NLRE1BKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocSwgVklPREFTRF9NQVhTRUNUT1JTKTsKIAlnLT5tYWpvciA9IFZJT0RBU0RfTUFKT1I7CiAJZy0+Zmlyc3RfbWlub3IgPSBkZXZfbm8gPDwgUEFSVElUSU9OX1NISUZUOwogCWlmIChkZXZfbm8gPj0gMjYpCkBAIC00ODksMTMgKzQ3OSwxMiBAQAogCWctPmRyaXZlcmZzX2RldiA9IGQtPmRldjsKIAlzZXRfY2FwYWNpdHkoZywgZC0+c2l6ZSA+PiA5KTsKIAotCXByaW50ayhWSU9EX0tFUk5fSU5GTyAiZGlzayAlZDogJWx1IHNlY3RvcnMgKCVsdSBNQikgIgotCQkJIkNIUz0lZC8lZC8lZCBzZWN0b3Igc2l6ZSAlZCVzXG4iLAotCQkJZGV2X25vLCAodW5zaWduZWQgbG9uZykoZC0+c2l6ZSA+PiA5KSwKLQkJCSh1bnNpZ25lZCBsb25nKShkLT5zaXplID4+IDIwKSwKLQkJCShpbnQpZC0+Y3lsaW5kZXJzLCAoaW50KWQtPnRyYWNrcywKLQkJCShpbnQpZC0+c2VjdG9ycywgKGludClkLT5ieXRlc19wZXJfc2VjdG9yLAotCQkJZC0+cmVhZF9vbmx5ID8gIiAoUk8pIiA6ICIiKTsKKwlwcl9pbmZvKCJkaXNrICVkOiAlbHUgc2VjdG9ycyAoJWx1IE1CKSBDSFM9JWQvJWQvJWQgc2VjdG9yIHNpemUgJWQlc1xuIiwKKwkJZGV2X25vLCAodW5zaWduZWQgbG9uZykoZC0+c2l6ZSA+PiA5KSwKKwkJKHVuc2lnbmVkIGxvbmcpKGQtPnNpemUgPj4gMjApLAorCQkoaW50KWQtPmN5bGluZGVycywgKGludClkLT50cmFja3MsCisJCShpbnQpZC0+c2VjdG9ycywgKGludClkLT5ieXRlc19wZXJfc2VjdG9yLAorCQlkLT5yZWFkX29ubHkgPyAiIChSTykiIDogIiIpOwogCiAJLyogcmVnaXN0ZXIgdXMgaW4gdGhlIGdsb2JhbCBsaXN0ICovCiAJYWRkX2Rpc2soZyk7CkBAIC01ODAsOCArNTY5LDggQEAKIAlpZiAoZXJyb3IpIHsKIAkJY29uc3Qgc3RydWN0IHZpb19lcnJvcl9lbnRyeSAqZXJyOwogCQllcnIgPSB2aW9fbG9va3VwX3JjKHZpb2Rhc2RfZXJyX3RhYmxlLCBiZXZlbnQtPnN1Yl9yZXN1bHQpOwotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcgInJlYWQvd3JpdGUgZXJyb3IgJWQ6MHglMDR4ICglcylcbiIsCi0JCQkJZXZlbnQtPnhSYywgYmV2ZW50LT5zdWJfcmVzdWx0LCBlcnItPm1zZyk7CisJCXByX3dhcm5pbmcoInJlYWQvd3JpdGUgZXJyb3IgJWQ6MHglMDR4ICglcylcbiIsCisJCQkgICBldmVudC0+eFJjLCBiZXZlbnQtPnN1Yl9yZXN1bHQsIGVyci0+bXNnKTsKIAkJbnVtX3NlY3QgPSBibGtfcnFfc2VjdG9ycyhyZXEpOwogCX0KIAlxbG9jayA9IHJlcS0+cS0+cXVldWVfbG9jazsKQEAgLTYwNiw4ICs1OTUsNyBAQAogCQlyZXR1cm47CiAJLyogRmlyc3QsIHdlIHNob3VsZCBORVZFUiBnZXQgYW4gaW50IGhlcmUuLi5vbmx5IGFja3MgKi8KIAlpZiAoaHZscGV2ZW50X2lzX2ludChldmVudCkpIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiWWlrZXMhIGdvdCBhbiBpbnQgaW4gdmlvZGFzZCBldmVudCBoYW5kbGVyIVxuIik7CisJCXByX3dhcm5pbmcoIllpa2VzISBnb3QgYW4gaW50IGluIHZpb2Rhc2QgZXZlbnQgaGFuZGxlciFcbiIpOwogCQlpZiAoaHZscGV2ZW50X25lZWRfYWNrKGV2ZW50KSkgewogCQkJZXZlbnQtPnhSYyA9IEh2THBFdmVudF9SY19JbnZhbGlkU3VidHlwZTsKIAkJCUh2Q2FsbEV2ZW50X2Fja0xwRXZlbnQoZXZlbnQpOwpAQCAtNjUwLDcgKzYzOCw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HICJpbnZhbGlkIHN1YnR5cGUhIik7CisJCXByX3dhcm5pbmcoImludmFsaWQgc3VidHlwZSEiKTsKIAkJaWYgKGh2bHBldmVudF9uZWVkX2FjayhldmVudCkpIHsKIAkJCWV2ZW50LT54UmMgPSBIdkxwRXZlbnRfUmNfSW52YWxpZFN1YnR5cGU7CiAJCQlIdkNhbGxFdmVudF9hY2tMcEV2ZW50KGV2ZW50KTsKQEAgLTczOSwyOSArNzI3LDI2IEBACiAJCXZpb19zZXRfaG9zdGxwKCk7CiAKIAlpZiAodmlvcGF0aF9ob3N0THAgPT0gSHZMcEluZGV4SW52YWxpZCkgewotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcgImludmFsaWQgaG9zdGluZyBwYXJ0aXRpb25cbiIpOworCQlwcl93YXJuaW5nKCJpbnZhbGlkIGhvc3RpbmcgcGFydGl0aW9uXG4iKTsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIGVhcmx5X2ZhaWw7CiAJfQogCi0JcHJpbnRrKFZJT0RfS0VSTl9JTkZPICJ2ZXJzICIgVklPRF9WRVJTICIsIGhvc3RpbmcgcGFydGl0aW9uICVkXG4iLAotCQkJdmlvcGF0aF9ob3N0THApOworCXByX2luZm8oInZlcnMgIiBWSU9EX1ZFUlMgIiwgaG9zdGluZyBwYXJ0aXRpb24gJWRcbiIsIHZpb3BhdGhfaG9zdExwKTsKIAogICAgICAgICAvKiByZWdpc3RlciB0aGUgYmxvY2sgZGV2aWNlICovCiAJcmMgPSAgcmVnaXN0ZXJfYmxrZGV2KFZJT0RBU0RfTUFKT1IsIFZJT0RfR0VOSERfTkFNRSk7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhWSU9EX0tFUk5fV0FSTklORwotCQkJCSJVbmFibGUgdG8gZ2V0IG1ham9yIG51bWJlciAlZCBmb3IgJXNcbiIsCi0JCQkJVklPREFTRF9NQUpPUiwgVklPRF9HRU5IRF9OQU1FKTsKKwkJcHJfd2FybmluZygiVW5hYmxlIHRvIGdldCBtYWpvciBudW1iZXIgJWQgZm9yICVzXG4iLAorCQkJICAgVklPREFTRF9NQUpPUiwgVklPRF9HRU5IRF9OQU1FKTsKIAkJZ290byBlYXJseV9mYWlsOwogCX0KIAkvKiBBY3R1YWxseSBvcGVuIHRoZSBwYXRoIHRvIHRoZSBob3N0aW5nIHBhcnRpdGlvbiAqLwogCXJjID0gdmlvcGF0aF9vcGVuKHZpb3BhdGhfaG9zdExwLCB2aW9tYWpvcnN1YnR5cGVfYmxvY2tpbywKIAkJCQlWSU9NQVhSRVEgKyAyKTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKFZJT0RfS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiZXJyb3Igb3BlbmluZyBwYXRoIHRvIGhvc3QgcGFydGl0aW9uICVkXG4iLAotCQkgICAgICAgdmlvcGF0aF9ob3N0THApOworCQlwcl93YXJuaW5nKCJlcnJvciBvcGVuaW5nIHBhdGggdG8gaG9zdCBwYXJ0aXRpb24gJWRcbiIsCisJCQkgICB2aW9wYXRoX2hvc3RMcCk7CiAJCWdvdG8gdW5yZWdpc3Rlcl9ibGs7CiAJfQogCkBAIC03NzAsNyArNzU1LDcgQEAKIAogCXJjID0gdmlvX3JlZ2lzdGVyX2RyaXZlcigmdmlvZGFzZF9kcml2ZXIpOwogCWlmIChyYykgewotCQlwcmludGsoVklPRF9LRVJOX1dBUk5JTkcgInZpb19yZWdpc3Rlcl9kcml2ZXIgZmFpbGVkXG4iKTsKKwkJcHJfd2FybmluZygidmlvX3JlZ2lzdGVyX2RyaXZlciBmYWlsZWRcbiIpOwogCQlnb3RvIHVuc2V0X2hhbmRsZXI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCmluZGV4IDUxMDQyZjBiYTcuLjNjNjRhZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCisrKyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCkBAIC0yNDMsMTAgKzI0MywxMiBAQAogc3RhdGljIGludCBfX2RldmluaXQgdmlydGJsa19wcm9iZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIHsKIAlzdHJ1Y3QgdmlydGlvX2JsayAqdmJsazsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKIAlpbnQgZXJyOwogCXU2NCBjYXA7Ci0JdTMyIHY7Ci0JdTMyIGJsa19zaXplLCBzZ19lbGVtczsKKwl1MzIgdiwgYmxrX3NpemUsIHNnX2VsZW1zLCBvcHRfaW9fc2l6ZTsKKwl1MTYgbWluX2lvX3NpemU7CisJdTggcGh5c2ljYWxfYmxvY2tfZXhwLCBhbGlnbm1lbnRfb2Zmc2V0OwogCiAJaWYgKGluZGV4X3RvX21pbm9yKGluZGV4KSA+PSAxIDw8IE1JTk9SQklUUykKIAkJcmV0dXJuIC1FTk9TUEM7CkBAIC0yOTMsMTMgKzI5NSwxMyBAQAogCQlnb3RvIG91dF9tZW1wb29sOwogCX0KIAotCXZibGstPmRpc2stPnF1ZXVlID0gYmxrX2luaXRfcXVldWUoZG9fdmlydGJsa19yZXF1ZXN0LCAmdmJsay0+bG9jayk7Ci0JaWYgKCF2YmxrLT5kaXNrLT5xdWV1ZSkgeworCXEgPSB2YmxrLT5kaXNrLT5xdWV1ZSA9IGJsa19pbml0X3F1ZXVlKGRvX3ZpcnRibGtfcmVxdWVzdCwgJnZibGstPmxvY2spOworCWlmICghcSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9wdXRfZGlzazsKIAl9CiAKLQl2YmxrLT5kaXNrLT5xdWV1ZS0+cXVldWVkYXRhID0gdmJsazsKKwlxLT5xdWV1ZWRhdGEgPSB2YmxrOwogCiAJaWYgKGluZGV4IDwgMjYpIHsKIAkJc3ByaW50Zih2YmxrLT5kaXNrLT5kaXNrX25hbWUsICJ2ZCVjIiwgJ2EnICsgaW5kZXggJSAyNik7CkBAIC0zMjMsMTAgKzMyNSwxMCBAQAogCiAJLyogSWYgYmFycmllcnMgYXJlIHN1cHBvcnRlZCwgdGVsbCBibG9jayBsYXllciB0aGF0IHF1ZXVlIGlzIG9yZGVyZWQgKi8KIAlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19CTEtfRl9GTFVTSCkpCi0JCWJsa19xdWV1ZV9vcmRlcmVkKHZibGstPmRpc2stPnF1ZXVlLCBRVUVVRV9PUkRFUkVEX0RSQUlOX0ZMVVNILAorCQlibGtfcXVldWVfb3JkZXJlZChxLCBRVUVVRV9PUkRFUkVEX0RSQUlOX0ZMVVNILAogCQkJCSAgdmlydGJsa19wcmVwYXJlX2ZsdXNoKTsKIAllbHNlIGlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0JMS19GX0JBUlJJRVIpKQotCQlibGtfcXVldWVfb3JkZXJlZCh2YmxrLT5kaXNrLT5xdWV1ZSwgUVVFVUVfT1JERVJFRF9UQUcsIE5VTEwpOworCQlibGtfcXVldWVfb3JkZXJlZChxLCBRVUVVRV9PUkRFUkVEX1RBRywgTlVMTCk7CiAKIAkvKiBJZiBkaXNrIGlzIHJlYWQtb25seSBpbiB0aGUgaG9zdCwgdGhlIGd1ZXN0IHNob3VsZCBvYmV5ICovCiAJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fQkxLX0ZfUk8pKQpAQCAtMzQ1LDE0ICszNDcsMTQgQEAKIAlzZXRfY2FwYWNpdHkodmJsay0+ZGlzaywgY2FwKTsKIAogCS8qIFdlIGNhbiBoYW5kbGUgd2hhdGV2ZXIgdGhlIGhvc3QgdG9sZCB1cyB0byBoYW5kbGUuICovCi0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHZibGstPmRpc2stPnF1ZXVlLCB2YmxrLT5zZ19lbGVtcy0yKTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHZibGstPmRpc2stPnF1ZXVlLCB2YmxrLT5zZ19lbGVtcy0yKTsKKwlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSwgdmJsay0+c2dfZWxlbXMtMik7CisJYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhxLCB2YmxrLT5zZ19lbGVtcy0yKTsKIAogCS8qIE5vIG5lZWQgdG8gYm91bmNlIGFueSByZXF1ZXN0cyAqLwotCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQodmJsay0+ZGlzay0+cXVldWUsIEJMS19CT1VOQ0VfQU5ZKTsKKwlibGtfcXVldWVfYm91bmNlX2xpbWl0KHEsIEJMS19CT1VOQ0VfQU5ZKTsKIAogCS8qIE5vIHJlYWwgc2VjdG9yIGxpbWl0LiAqLwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyh2YmxrLT5kaXNrLT5xdWV1ZSwgLTFVKTsKKwlibGtfcXVldWVfbWF4X3NlY3RvcnMocSwgLTFVKTsKIAogCS8qIEhvc3QgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBtYXhpbXVtIHNlZ21lbnQgc2l6ZSBhbmQgbnVtYmVyIG9mCiAJICogc2VnbWVudHMuICovCkBAIC0zNjAsMTYgKzM2Miw0NSBAQAogCQkJCW9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZywgc2l6ZV9tYXgpLAogCQkJCSZ2KTsKIAlpZiAoIWVycikKLQkJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUodmJsay0+ZGlzay0+cXVldWUsIHYpOworCQlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShxLCB2KTsKIAllbHNlCi0JCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHZibGstPmRpc2stPnF1ZXVlLCAtMVUpOworCQlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShxLCAtMVUpOwogCiAJLyogSG9zdCBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IHRoZSBibG9jayBzaXplIG9mIHRoZSBkZXZpY2UgKi8KIAllcnIgPSB2aXJ0aW9fY29uZmlnX3ZhbCh2ZGV2LCBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUsCiAJCQkJb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19ibGtfY29uZmlnLCBibGtfc2l6ZSksCiAJCQkJJmJsa19zaXplKTsKIAlpZiAoIWVycikKLQkJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZSh2YmxrLT5kaXNrLT5xdWV1ZSwgYmxrX3NpemUpOworCQlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKHEsIGJsa19zaXplKTsKKwllbHNlCisJCWJsa19zaXplID0gcXVldWVfbG9naWNhbF9ibG9ja19zaXplKHEpOworCisJLyogVXNlIHRvcG9sb2d5IGluZm9ybWF0aW9uIGlmIGF2YWlsYWJsZSAqLworCWVyciA9IHZpcnRpb19jb25maWdfdmFsKHZkZXYsIFZJUlRJT19CTEtfRl9UT1BPTE9HWSwKKwkJCW9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZywgcGh5c2ljYWxfYmxvY2tfZXhwKSwKKwkJCSZwaHlzaWNhbF9ibG9ja19leHApOworCWlmICghZXJyICYmIHBoeXNpY2FsX2Jsb2NrX2V4cCkKKwkJYmxrX3F1ZXVlX3BoeXNpY2FsX2Jsb2NrX3NpemUocSwKKwkJCQlibGtfc2l6ZSAqICgxIDw8IHBoeXNpY2FsX2Jsb2NrX2V4cCkpOworCisJZXJyID0gdmlydGlvX2NvbmZpZ192YWwodmRldiwgVklSVElPX0JMS19GX1RPUE9MT0dZLAorCQkJb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19ibGtfY29uZmlnLCBhbGlnbm1lbnRfb2Zmc2V0KSwKKwkJCSZhbGlnbm1lbnRfb2Zmc2V0KTsKKwlpZiAoIWVyciAmJiBhbGlnbm1lbnRfb2Zmc2V0KQorCQlibGtfcXVldWVfYWxpZ25tZW50X29mZnNldChxLCBibGtfc2l6ZSAqIGFsaWdubWVudF9vZmZzZXQpOworCisJZXJyID0gdmlydGlvX2NvbmZpZ192YWwodmRldiwgVklSVElPX0JMS19GX1RPUE9MT0dZLAorCQkJb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19ibGtfY29uZmlnLCBtaW5faW9fc2l6ZSksCisJCQkmbWluX2lvX3NpemUpOworCWlmICghZXJyICYmIG1pbl9pb19zaXplKQorCQlibGtfcXVldWVfaW9fbWluKHEsIGJsa19zaXplICogbWluX2lvX3NpemUpOworCisJZXJyID0gdmlydGlvX2NvbmZpZ192YWwodmRldiwgVklSVElPX0JMS19GX1RPUE9MT0dZLAorCQkJb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19ibGtfY29uZmlnLCBvcHRfaW9fc2l6ZSksCisJCQkmb3B0X2lvX3NpemUpOworCWlmICghZXJyICYmIG9wdF9pb19zaXplKQorCQlibGtfcXVldWVfaW9fb3B0KHEsIGJsa19zaXplICogb3B0X2lvX3NpemUpOworCiAKIAlhZGRfZGlzayh2YmxrLT5kaXNrKTsKIAlyZXR1cm4gMDsKQEAgLTQwNCw3ICs0MzUsNyBAQAogCWtmcmVlKHZibGspOwogfQogCi1zdGF0aWMgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVklSVElPX0lEX0JMT0NLLCBWSVJUSU9fREVWX0FOWV9JRCB9LAogCXsgMCB9LAogfTsKQEAgLTQxMiw3ICs0NDMsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBmZWF0dXJlc1tdID0gewogCVZJUlRJT19CTEtfRl9CQVJSSUVSLCBWSVJUSU9fQkxLX0ZfU0VHX01BWCwgVklSVElPX0JMS19GX1NJWkVfTUFYLAogCVZJUlRJT19CTEtfRl9HRU9NRVRSWSwgVklSVElPX0JMS19GX1JPLCBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUsCi0JVklSVElPX0JMS19GX1NDU0ksIFZJUlRJT19CTEtfRl9GTFVTSAorCVZJUlRJT19CTEtfRl9TQ1NJLCBWSVJUSU9fQkxLX0ZfRkxVU0gsIFZJUlRJT19CTEtfRl9UT1BPTE9HWQogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveGQuYyBiL2RyaXZlcnMvYmxvY2sveGQuYwppbmRleCBkMWZkMDMyLi4xYTMyNWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hkLmMKKysrIGIvZHJpdmVycy9ibG9jay94ZC5jCkBAIC0yNDIsNyArMjQyLDcgQEAKIAl9CiAKIAkvKiB4ZF9tYXhzZWN0b3JzIGRlcGVuZHMgb24gY29udHJvbGxlciAtIHNvIHNldCBhZnRlciBkZXRlY3Rpb24gKi8KLQlibGtfcXVldWVfbWF4X3NlY3RvcnMoeGRfcXVldWUsIHhkX21heHNlY3RvcnMpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyh4ZF9xdWV1ZSwgeGRfbWF4c2VjdG9ycyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgeGRfZHJpdmVzOyBpKyspCiAJCWFkZF9kaXNrKHhkX2dlbmRpc2tbaV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYyBiL2RyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMKaW5kZXggMDVhMzFlNS4uOWMwOTY5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jCkBAIC0zNDYsMTUgKzM0NiwxNCBAQAogCiAJLyogSGFyZCBzZWN0b3Igc2l6ZSBhbmQgbWF4IHNlY3RvcnMgaW1wZXJzb25hdGUgdGhlIGVxdWl2LiBoYXJkd2FyZS4gKi8KIAlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKHJxLCBzZWN0b3Jfc2l6ZSk7Ci0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKHJxLCA1MTIpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhycSwgNTEyKTsKIAogCS8qIEVhY2ggc2VnbWVudCBpbiBhIHJlcXVlc3QgaXMgdXAgdG8gYW4gYWxpZ25lZCBwYWdlIGluIHNpemUuICovCiAJYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkocnEsIFBBR0VfU0laRSAtIDEpOwogCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHJxLCBQQUdFX1NJWkUpOwogCiAJLyogRW5zdXJlIGEgbWVyZ2VkIHJlcXVlc3Qgd2lsbCBmaXQgaW4gYSBzaW5nbGUgSS9PIHJpbmcgc2xvdC4gKi8KLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocnEsIEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVCk7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhycSwgQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHJxLCBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QpOwogCiAJLyogTWFrZSBzdXJlIGJ1ZmZlciBhZGRyZXNzZXMgYXJlIHNlY3Rvci1hbGlnbmVkLiAqLwogCWJsa19xdWV1ZV9kbWFfYWxpZ25tZW50KHJxLCA1MTEpOwpAQCAtMTA1MCw3ICsxMDQ5LDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCB4ZW5idXNfZGV2aWNlX2lkIGJsa2Zyb250X2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB4ZW5idXNfZGV2aWNlX2lkIGJsa2Zyb250X2lkc1tdID0gewogCXsgInZiZCIgfSwKIAl7ICIiIH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYyBiL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCmluZGV4IGU1YzU0MTUuLmUxYzk1ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCisrKyBiL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCkBAIC0xMjI3LDcgKzEyMjcsNyBAQAogfQogCiAvKiBNYXRjaCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0gYmluZGluZyAqLwotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgYWNlX29mX21hdGNoW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFjZV9vZl9tYXRjaFtdIF9fZGV2aW5pdGNvbnN0ID0gewogCXsgLmNvbXBhdGlibGUgPSAieGxueCxvcGItc3lzYWNlLTEuMDAuYiIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJ4bG54LG9wYi1zeXNhY2UtMS4wMC5jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInhsbngseHBzLXN5c2FjZS0xLjAwLmEiLCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9nZHJvbS5jIGIvZHJpdmVycy9jZHJvbS9nZHJvbS5jCmluZGV4IGU3ODllNmMuLjAzYzcxZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYworKysgYi9kcml2ZXJzL2Nkcm9tL2dkcm9tLmMKQEAgLTc0MSw3ICs3NDEsNyBAQAogewogCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoZ2QuZ2Ryb21fcnEsIEdEUk9NX0hBUkRfU0VDVE9SKTsKIAkvKiB1c2luZyBETUEgc28gbWVtb3J5IHdpbGwgbmVlZCB0byBiZSBjb250aWd1b3VzICovCi0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhnZC5nZHJvbV9ycSwgMSk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhnZC5nZHJvbV9ycSwgMSk7CiAJLyogc2V0IGEgbGFyZ2UgbWF4IHNpemUgdG8gZ2V0IG1vc3QgZnJvbSBETUEgKi8KIAlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShnZC5nZHJvbV9ycSwgMHg0MDAwMCk7CiAJZ2QuZGlzay0+cXVldWUgPSBnZC5nZHJvbV9ycTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vdmlvY2QuYyBiL2RyaXZlcnMvY2Ryb20vdmlvY2QuYwppbmRleCA1N2NhNjllLi5jYzQzNWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMKKysrIGIvZHJpdmVycy9jZHJvbS92aW9jZC5jCkBAIC02MTYsOSArNjE2LDggQEAKIAlnZW5kaXNrLT5maXJzdF9taW5vciA9IGRldmljZW5vOwogCXN0cm5jcHkoZ2VuZGlzay0+ZGlza19uYW1lLCBjLT5uYW1lLAogCQkJc2l6ZW9mKGdlbmRpc2stPmRpc2tfbmFtZSkpOwotCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocSwgMSk7Ci0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEsIDEpOwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCA0MDk2IC8gNTEyKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHEsIDEpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhxLCA0MDk2IC8gNTEyKTsKIAlnZW5kaXNrLT5xdWV1ZSA9IHE7CiAJZ2VuZGlzay0+Zm9wcyA9ICZ2aW9jZF9mb3BzOwogCWdlbmRpc2stPmZsYWdzID0gR0VOSERfRkxfQ0R8R0VOSERfRkxfUkVNT1ZBQkxFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwppbmRleCBlMDIzNjgyLi4zMTQxZGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwpAQCAtNjY2LDYgKzY2NiwxNCBAQAogCWhlbHAKIAkgIFZpcnRpbyBjb25zb2xlIGZvciB1c2Ugd2l0aCBsZ3Vlc3QgYW5kIG90aGVyIGh5cGVydmlzb3JzLgogCisJICBBbHNvIHNlcnZlcyBhcyBhIGdlbmVyYWwtcHVycG9zZSBzZXJpYWwgZGV2aWNlIGZvciBkYXRhCisJICB0cmFuc2ZlciBiZXR3ZWVuIHRoZSBndWVzdCBhbmQgaG9zdC4gIENoYXJhY3RlciBkZXZpY2VzIGF0CisJICAvZGV2L3Zwb3J0TnBuIHdpbGwgYmUgY3JlYXRlZCB3aGVuIGNvcnJlc3BvbmRpbmcgcG9ydHMgYXJlCisJICBmb3VuZCwgd2hlcmUgTiBpcyB0aGUgZGV2aWNlIG51bWJlciBhbmQgbiBpcyB0aGUgcG9ydCBudW1iZXIKKwkgIHdpdGhpbiB0aGF0IGRldmljZS4gIElmIHNwZWNpZmllZCBieSB0aGUgaG9zdCwgYSBzeXNmcworCSAgYXR0cmlidXRlIGNhbGxlZCAnbmFtZScgd2lsbCBiZSBwb3B1bGF0ZWQgd2l0aCBhIG5hbWUgZm9yCisJICB0aGUgcG9ydCB3aGljaCBjYW4gYmUgdXNlZCBieSB1ZGV2IHNjcmlwdHMgdG8gY3JlYXRlIGEKKwkgIHN5bWxpbmsgdG8gdGhlIGRldmljZS4KIAogY29uZmlnIEhWQ1MKIAl0cmlzdGF0ZSAiSUJNIEh5cGVydmlzb3IgVmlydHVhbCBDb25zb2xlIFNlcnZlciBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKaW5kZXggMzk5OWE1Zi4uOGE3MTNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9hZ3BfYmFja2VuZC5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlICJhZ3AuaCIKIAogLyoKQEAgLTgxNSwxMiArODE2LDYgQEAKIAkJaW50ZWxfaTgzMF9maW5pX2ZsdXNoKCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1kb193YmludmQodm9pZCAqbnVsbCkKLXsKLQl3YmludmQoKTsKLX0KLQogLyogVGhlIGNoaXBzZXRfZmx1c2ggaW50ZXJmYWNlIG5lZWRzIHRvIGdldCBkYXRhIHRoYXQgaGFzIGFscmVhZHkgYmVlbgogICogZmx1c2hlZCBvdXQgb2YgdGhlIENQVSBhbGwgdGhlIHdheSBvdXQgdG8gbWFpbiBtZW1vcnksIGJlY2F1c2UgdGhlIEdQVQogICogZG9lc24ndCBzbm9vcCB0aG9zZSBidWZmZXJzLgpAQCAtODM3LDEyICs4MzIsMTAgQEAKIAogCW1lbXNldChwZywgMCwgMTAyNCk7CiAKLQlpZiAoY3B1X2hhc19jbGZsdXNoKSB7CisJaWYgKGNwdV9oYXNfY2xmbHVzaCkKIAkJY2xmbHVzaF9jYWNoZV9yYW5nZShwZywgMTAyNCk7Ci0JfSBlbHNlIHsKLQkJaWYgKG9uX2VhY2hfY3B1KGRvX3diaW52ZCwgTlVMTCwgMSkgIT0gMCkKLQkJCXByaW50ayhLRVJOX0VSUiAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGNhY2hlIGZsdXNoLlxuIik7Ci0JfQorCWVsc2UgaWYgKHdiaW52ZF9vbl9hbGxfY3B1cygpICE9IDApCisJCXByaW50ayhLRVJOX0VSUiAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGNhY2hlIGZsdXNoLlxuIik7CiB9CiAKIC8qIFRoZSBpbnRlbCBpODMwIGF1dG9tYXRpY2FsbHkgaW5pdGlhbGl6ZXMgdGhlIGFncCBhcGVydHVyZSBkdXJpbmcgUE9TVC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfYmVhdC5jIGIvZHJpdmVycy9jaGFyL2h2Y19iZWF0LmMKaW5kZXggMGFmYzhiOC4uNWZlNDYzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19iZWF0LmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19iZWF0LmMKQEAgLTg0LDcgKzg0LDcgQEAKIAlyZXR1cm4gY250OwogfQogCi1zdGF0aWMgc3RydWN0IGh2X29wcyBodmNfYmVhdF9nZXRfcHV0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzIGh2Y19iZWF0X2dldF9wdXRfb3BzID0gewogCS5nZXRfY2hhcnMgPSBodmNfYmVhdF9nZXRfY2hhcnMsCiAJLnB1dF9jaGFycyA9IGh2Y19iZWF0X3B1dF9jaGFycywKIH07CkBAIC05OSw3ICs5OSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGh2Y19iZWF0X2NvbnNvbGVfaW5pdCh2b2lkKQogewotCWlmIChodmNfYmVhdF91c2VpdCAmJiBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkJlYXQiKSkgeworCWlmIChodmNfYmVhdF91c2VpdCAmJiBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkJlYXQiKSkgewogCQlodmNfaW5zdGFudGlhdGUoMCwgMCwgJmh2Y19iZWF0X2dldF9wdXRfb3BzKTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCmluZGV4IDQxNmQzNDIuLjRjM2I1OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCkBAIC0xMjUsNyArMTI1LDcgQEAKICAqIGNvbnNvbGUgaW50ZXJmYWNlcyBidXQgY2FuIHN0aWxsIGJlIHVzZWQgYXMgYSB0dHkgZGV2aWNlLiAgVGhpcyBoYXMgdG8gYmUKICAqIHN0YXRpYyBiZWNhdXNlIGttYWxsb2Mgd2lsbCBub3Qgd29yayBkdXJpbmcgZWFybHkgY29uc29sZSBpbml0LgogICovCi1zdGF0aWMgc3RydWN0IGh2X29wcyAqY29uc19vcHNbTUFYX05SX0hWQ19DT05TT0xFU107CitzdGF0aWMgY29uc3Qgc3RydWN0IGh2X29wcyAqY29uc19vcHNbTUFYX05SX0hWQ19DT05TT0xFU107CiBzdGF0aWMgdWludDMyX3QgdnRlcm1ub3NbTUFYX05SX0hWQ19DT05TT0xFU10gPQogCXtbMCAuLi4gTUFYX05SX0hWQ19DT05TT0xFUyAtIDFdID0gLTF9OwogCkBAIC0yNDcsNyArMjQ3LDcgQEAKICAqIHZ0eSBhZGFwdGVycyBkbyBOT1QgZ2V0IGFuIGh2Y19pbnN0YW50aWF0ZSgpIGNhbGxiYWNrIHNpbmNlIHRoZXkKICAqIGFwcGVhciBhZnRlciBlYXJseSBjb25zb2xlIGluaXQuCiAgKi8KLWludCBodmNfaW5zdGFudGlhdGUodWludDMyX3QgdnRlcm1ubywgaW50IGluZGV4LCBzdHJ1Y3QgaHZfb3BzICpvcHMpCitpbnQgaHZjX2luc3RhbnRpYXRlKHVpbnQzMl90IHZ0ZXJtbm8sIGludCBpbmRleCwgY29uc3Qgc3RydWN0IGh2X29wcyAqb3BzKQogewogCXN0cnVjdCBodmNfc3RydWN0ICpocDsKIApAQCAtNzQ4LDggKzc0OCw5IEBACiAJLmNoYXJzX2luX2J1ZmZlciA9IGh2Y19jaGFyc19pbl9idWZmZXIsCiB9OwogCi1zdHJ1Y3QgaHZjX3N0cnVjdCBfX2RldmluaXQgKmh2Y19hbGxvYyh1aW50MzJfdCB2dGVybW5vLCBpbnQgZGF0YSwKLQkJCQkJc3RydWN0IGh2X29wcyAqb3BzLCBpbnQgb3V0YnVmX3NpemUpCitzdHJ1Y3QgaHZjX3N0cnVjdCAqaHZjX2FsbG9jKHVpbnQzMl90IHZ0ZXJtbm8sIGludCBkYXRhLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaHZfb3BzICpvcHMsCisJCQkgICAgIGludCBvdXRidWZfc2l6ZSkKIHsKIAlzdHJ1Y3QgaHZjX3N0cnVjdCAqaHA7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaCBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5oCmluZGV4IDEwOTUwY2EuLjU0MzgxZWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaAorKysgYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaApAQCAtNTUsNyArNTUsNyBAQAogCWludCBvdXRidWZfc2l6ZTsKIAlpbnQgbl9vdXRidWY7CiAJdWludDMyX3QgdnRlcm1ubzsKLQlzdHJ1Y3QgaHZfb3BzICpvcHM7CisJY29uc3Qgc3RydWN0IGh2X29wcyAqb3BzOwogCWludCBpcnFfcmVxdWVzdGVkOwogCWludCBkYXRhOwogCXN0cnVjdCB3aW5zaXplIHdzOwpAQCAtNzYsMTEgKzc2LDEyIEBACiB9OwogCiAvKiBSZWdpc3RlciBhIHZ0ZXJtIGFuZCBhIHNsb3QgaW5kZXggZm9yIHVzZSBhcyBhIGNvbnNvbGUgKGNvbnNvbGVfaW5pdCkgKi8KLWV4dGVybiBpbnQgaHZjX2luc3RhbnRpYXRlKHVpbnQzMl90IHZ0ZXJtbm8sIGludCBpbmRleCwgc3RydWN0IGh2X29wcyAqb3BzKTsKK2V4dGVybiBpbnQgaHZjX2luc3RhbnRpYXRlKHVpbnQzMl90IHZ0ZXJtbm8sIGludCBpbmRleCwKKwkJCSAgIGNvbnN0IHN0cnVjdCBodl9vcHMgKm9wcyk7CiAKIC8qIHJlZ2lzdGVyIGEgdnRlcm0gZm9yIGh2YyB0dHkgb3BlcmF0aW9uIChtb2R1bGVfaW5pdCBvciBob3RwbHVnIGFkZCkgKi8KLWV4dGVybiBzdHJ1Y3QgaHZjX3N0cnVjdCAqIF9fZGV2aW5pdCBodmNfYWxsb2ModWludDMyX3QgdnRlcm1ubywgaW50IGRhdGEsCi0JCQkJc3RydWN0IGh2X29wcyAqb3BzLCBpbnQgb3V0YnVmX3NpemUpOworZXh0ZXJuIHN0cnVjdCBodmNfc3RydWN0ICogaHZjX2FsbG9jKHVpbnQzMl90IHZ0ZXJtbm8sIGludCBkYXRhLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGh2X29wcyAqb3BzLCBpbnQgb3V0YnVmX3NpemUpOwogLyogcmVtb3ZlIGEgdnRlcm0gZnJvbSBodmMgdHR5IG9wZXJhdGlvbiAobW9kdWxlX2V4aXQgb3IgaG90cGx1ZyByZW1vdmUpICovCiBleHRlcm4gaW50IGh2Y19yZW1vdmUoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19pc2VyaWVzLmMgYi9kcml2ZXJzL2NoYXIvaHZjX2lzZXJpZXMuYwppbmRleCA5MzZkMDViLi5mZDAyNDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2lzZXJpZXMuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2lzZXJpZXMuYwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJcmV0dXJuIHNlbnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaHZfb3BzIGh2Y19nZXRfcHV0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzIGh2Y19nZXRfcHV0X29wcyA9IHsKIAkuZ2V0X2NoYXJzID0gZ2V0X2NoYXJzLAogCS5wdXRfY2hhcnMgPSBwdXRfY2hhcnMsCiAJLm5vdGlmaWVyX2FkZCA9IG5vdGlmaWVyX2FkZF9pcnEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYyBiL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jCmluZGV4IGZlNjJiZDAuLjIxNjgxYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jCkBAIC05MjIsNyArOTIyLDcgQEAKIAogCiAvKiBIVkMgb3BlcmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCBodl9vcHMgaHZjX2l1Y3Zfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9vcHMgaHZjX2l1Y3Zfb3BzID0gewogCS5nZXRfY2hhcnMgPSBodmNfaXVjdl9nZXRfY2hhcnMsCiAJLnB1dF9jaGFycyA9IGh2Y19pdWN2X3B1dF9jaGFycywKIAkubm90aWZpZXJfYWRkID0gaHZjX2l1Y3Zfbm90aWZpZXJfYWRkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19ydGFzLmMgYi9kcml2ZXJzL2NoYXIvaHZjX3J0YXMuYwppbmRleCA4ODU5MGQwLi42MWM0YTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX3J0YXMuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX3J0YXMuYwpAQCAtNzEsNyArNzEsNyBAQAogCXJldHVybiBpOwogfQogCi1zdGF0aWMgc3RydWN0IGh2X29wcyBodmNfcnRhc19nZXRfcHV0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzIGh2Y19ydGFzX2dldF9wdXRfb3BzID0gewogCS5nZXRfY2hhcnMgPSBodmNfcnRhc19yZWFkX2NvbnNvbGUsCiAJLnB1dF9jaGFycyA9IGh2Y19ydGFzX3dyaXRlX2NvbnNvbGUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y191ZGJnLmMgYi9kcml2ZXJzL2NoYXIvaHZjX3VkYmcuYwppbmRleCBiZDYzYmE4Li5iMDk1N2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX3VkYmcuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX3VkYmcuYwpAQCAtNTgsNyArNTgsNyBAQAogCXJldHVybiBpOwogfQogCi1zdGF0aWMgc3RydWN0IGh2X29wcyBodmNfdWRiZ19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGh2X29wcyBodmNfdWRiZ19vcHMgPSB7CiAJLmdldF9jaGFycyA9IGh2Y191ZGJnX2dldCwKIAkucHV0X2NoYXJzID0gaHZjX3VkYmdfcHV0LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfdmlvLmMgYi9kcml2ZXJzL2NoYXIvaHZjX3Zpby5jCmluZGV4IDEwYmUzNDMuLjI3MzcwZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfdmlvLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y192aW8uYwpAQCAtNzcsNyArNzcsNyBAQAogCXJldHVybiBnb3Q7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaHZfb3BzIGh2Y19nZXRfcHV0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzIGh2Y19nZXRfcHV0X29wcyA9IHsKIAkuZ2V0X2NoYXJzID0gZmlsdGVyZWRfZ2V0X2NoYXJzLAogCS5wdXRfY2hhcnMgPSBodmNfcHV0X2NoYXJzLAogCS5ub3RpZmllcl9hZGQgPSBub3RpZmllcl9hZGRfaXJxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y194ZW4uYyBiL2RyaXZlcnMvY2hhci9odmNfeGVuLmMKaW5kZXggYjFhNzE2My4uNjA0NDZmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y194ZW4uYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX3hlbi5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAlyZXR1cm4gcmVjdjsKIH0KIAotc3RhdGljIHN0cnVjdCBodl9vcHMgaHZjX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzIGh2Y19vcHMgPSB7CiAJLmdldF9jaGFycyA9IHJlYWRfY29uc29sZSwKIAkucHV0X2NoYXJzID0gd3JpdGVfY29uc29sZSwKIAkubm90aWZpZXJfYWRkID0gbm90aWZpZXJfYWRkX2lycSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZwppbmRleCA4NzA2MDI2Li42ZWExMDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnCkBAIC0xODYsMyArMTg2LDE1IEBACiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbXhjLXJuZ2EuCiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBIV19SQU5ET01fTk9NQURJSworCXRyaXN0YXRlICJTVC1Fcmljc3NvbiBOb21hZGlrIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBIV19SQU5ET00gJiYgUExBVF9OT01BRElLCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMga2VybmVsLXNpZGUgc3VwcG9ydCBmb3IgdGhlIFJhbmRvbSBOdW1iZXIKKwkgIEdlbmVyYXRvciBoYXJkd2FyZSBmb3VuZCBvbiBTVC1Fcmljc3NvbiBTb0NzICg4ODE1IGFuZCA4NTAwKS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbm9tYWRpay1ybmcuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9NYWtlZmlsZQppbmRleCA1ZWViMTMwLi40MjczMzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vTWFrZWZpbGUKQEAgLTE4LDMgKzE4LDQgQEAKIG9iai0kKENPTkZJR19IV19SQU5ET01fVFg0OTM5KSArPSB0eDQ5Mzktcm5nLm8KIG9iai0kKENPTkZJR19IV19SQU5ET01fTVhDX1JOR0EpICs9IG14Yy1ybmdhLm8KIG9iai0kKENPTkZJR19IV19SQU5ET01fT0NURU9OKSArPSBvY3Rlb24tcm5nLm8KK29iai0kKENPTkZJR19IV19SQU5ET01fTk9NQURJSykgKz0gbm9tYWRpay1ybmcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9ub21hZGlrLXJuZy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9ub21hZGlrLXJuZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YjRjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL25vbWFkaWstcm5nLmMKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBOb21hZGlrIFJORyBzdXBwb3J0CisgKiAgQ29weXJpZ2h0IDIwMDkgQWxlc3NhbmRybyBSdWJpbmkKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CisjaW5jbHVkZSA8bGludXgvaHdfcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworc3RhdGljIGludCBubWtfcm5nX3JlYWQoc3RydWN0IGh3cm5nICpybmcsIHZvaWQgKmRhdGEsIHNpemVfdCBtYXgsIGJvb2wgd2FpdCkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopcm5nLT5wcml2OworCisJLyoKKwkgKiBUaGUgcmVnaXN0ZXIgaXMgMzIgYml0cyBhbmQgZ2l2ZXMgMTYgcmFuZG9tIGJpdHMgKGxvdyBoYWxmKS4KKwkgKiBBIHN1YnNlcXVlbnQgcmVhZCB3aWxsIGRlbGF5IHRoZSBjb3JlIGZvciA0MDBucywgc28gd2UganVzdCByZWFkCisJICogb25jZSBhbmQgYWNjZXB0IHRoZSB2ZXJ5IHVubGlrZWx5IHZlcnkgc21hbGwgZGVsYXksIGV2ZW4gaWYgd2FpdD09MC4KKwkgKi8KKwkqKHUxNiAqKWRhdGEgPSBfX3Jhd19yZWFkbChiYXNlICsgOCkgJiAweGZmZmY7CisJcmV0dXJuIDI7Cit9CisKKy8qIHdlIGhhdmUgYXQgbW9zdCBvbmUgUk5HIHBlciBtYWNoaW5lLCBncmFudGVkICovCitzdGF0aWMgc3RydWN0IGh3cm5nIG5ta19ybmcgPSB7CisJLm5hbWUJCT0gIm5vbWFkaWsiLAorCS5yZWFkCQk9IG5ta19ybmdfcmVhZCwKK307CisKK3N0YXRpYyBpbnQgbm1rX3JuZ19wcm9iZShzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldiwgc3RydWN0IGFtYmFfaWQgKmlkKQoreworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlpbnQgcmV0OworCisJcmV0ID0gYW1iYV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCBkZXYtPmRldi5pbml0X25hbWUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gLUVOT01FTTsKKwliYXNlID0gaW9yZW1hcChkZXYtPnJlcy5zdGFydCwgcmVzb3VyY2Vfc2l6ZSgmZGV2LT5yZXMpKTsKKwlpZiAoIWJhc2UpCisJCWdvdG8gb3V0X3JlbGVhc2U7CisJbm1rX3JuZy5wcml2ID0gKHVuc2lnbmVkIGxvbmcpYmFzZTsKKwlyZXQgPSBod3JuZ19yZWdpc3Rlcigmbm1rX3JuZyk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5tYXA7CisJcmV0dXJuIDA7CisKK291dF91bm1hcDoKKwlpb3VubWFwKGJhc2UpOworb3V0X3JlbGVhc2U6CisJYW1iYV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5ta19ybmdfcmVtb3ZlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2KQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilubWtfcm5nLnByaXY7CisJaHdybmdfdW5yZWdpc3Rlcigmbm1rX3JuZyk7CisJaW91bm1hcChiYXNlKTsKKwlhbWJhX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGFtYmFfaWQgbm1rX3JuZ19pZHNbXSA9IHsKKwl7CisJCS5pZAk9IDB4MDAwODA1ZTEsCisJCS5tYXNrCT0gMHgwMDBmZmZmZiwgLyogdG9wIGJpdHMgYXJlIHJldiBhbmQgY2ZnOiBhY2NlcHQgYWxsICovCisJfSwKKwl7MCwgMH0sCit9OworCitzdGF0aWMgc3RydWN0IGFtYmFfZHJpdmVyIG5ta19ybmdfZHJpdmVyID0geworCS5kcnYgPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9ICJybmciLAorCQl9LAorCS5wcm9iZSA9IG5ta19ybmdfcHJvYmUsCisJLnJlbW92ZSA9IG5ta19ybmdfcmVtb3ZlLAorCS5pZF90YWJsZSA9IG5ta19ybmdfaWRzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbm1rX3JuZ19pbml0KHZvaWQpCit7CisJcmV0dXJuIGFtYmFfZHJpdmVyX3JlZ2lzdGVyKCZubWtfcm5nX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBubWtfcm5nX2V4aXQodm9pZCkKK3sKKwlhbWJhX2RyaXZlcl91bnJlZ2lzdGVyKCZubWtfcm5nX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG5ta19ybmdfaW5pdCk7Cittb2R1bGVfZXhpdChubWtfcm5nX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbnZyYW0uYyBiL2RyaXZlcnMvY2hhci9udnJhbS5jCmluZGV4IGZkYmNjOWYuLjVlYjgzYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9udnJhbS5jCisrKyBiL2RyaXZlcnMvY2hhci9udnJhbS5jCkBAIC0zMzYsMTQgKzMzNiwxMiBAQAogCiBzdGF0aWMgaW50IG52cmFtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JbG9ja19rZXJuZWwoKTsKIAlzcGluX2xvY2soJm52cmFtX3N0YXRlX2xvY2spOwogCiAJaWYgKChudnJhbV9vcGVuX2NudCAmJiAoZmlsZS0+Zl9mbGFncyAmIE9fRVhDTCkpIHx8CiAJICAgIChudnJhbV9vcGVuX21vZGUgJiBOVlJBTV9FWENMKSB8fAogCSAgICAoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJiAobnZyYW1fb3Blbl9tb2RlICYgTlZSQU1fV1JJVEUpKSkgewogCQlzcGluX3VubG9jaygmbnZyYW1fc3RhdGVfbG9jayk7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTM1NCw3ICszNTIsNiBAQAogCW52cmFtX29wZW5fY250Kys7CiAKIAlzcGluX3VubG9jaygmbnZyYW1fc3RhdGVfbG9jayk7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwppbmRleCAyZGI0YzBhLi5jOWJjODk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKQEAgLTEwNDcsNyArMTA0Nyw3IEBACiBzdGF0aWMgc3NpemVfdCBjbW1fd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGNtNDAwMF9kZXYgKmRldiA9IChzdHJ1Y3QgY200MDAwX2RldiAqKSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNtNDAwMF9kZXYgKmRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxOwogCXVuc2lnbmVkIHNob3J0IHM7CiAJdW5zaWduZWQgY2hhciB0bXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCmluZGV4IGEwMzVhZTMuLjIxMzM3M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCisrKyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCkBAIC0xLDE4ICsxLDYgQEAKLS8qRDozMDAKLSAqIFRoZSBHdWVzdCBjb25zb2xlIGRyaXZlcgotICoKLSAqIFdyaXRpbmcgY29uc29sZSBkcml2ZXJzIGlzIG9uZSBvZiB0aGUgZmV3IHJlbWFpbmluZyBEYXJrIEFydHMgaW4gTGludXguCi0gKiBGb3J0dW5hdGVseSBmb3IgdXMsIHRoZSBwYXRoIG9mIHZpcnR1YWwgY29uc29sZXMgaGFzIGJlZW4gd2VsbC10cm9kZGVuIGJ5Ci0gKiB0aGUgUG93ZXJQQyBmb2xrcywgd2hvIHdyb3RlICJodmNfY29uc29sZS5jIiB0byBnZW5lcmljYWxseSBzdXBwb3J0IGFueQotICogdmlydHVhbCBjb25zb2xlLiAgV2UgdXNlIHRoYXQgaW5mcmFzdHJ1Y3R1cmUgd2hpY2ggb25seSByZXF1aXJlcyB1cyB0byB3cml0ZQotICogdGhlIGJhc2ljIHB1dF9jaGFycyBhbmQgZ2V0X2NoYXJzIGZ1bmN0aW9ucyBhbmQgY2FsbCB0aGUgcmlnaHQgcmVnaXN0ZXIKLSAqIGZ1bmN0aW9ucy4KLSA6Ki8KLQotLypNOjAwMiBUaGUgY29uc29sZSBjYW4gYmUgZmxvb2RlZDogd2hpbGUgdGhlIEd1ZXN0IGlzIHByb2Nlc3NpbmcgaW5wdXQgdGhlCi0gKiBIb3N0IGNhbiBzZW5kIG1vcmUuICBCdWZmZXJpbmcgaW4gdGhlIEhvc3QgY291bGQgYWxsZXZpYXRlIHRoaXMsIGJ1dCBpdCBpcyBhCi0gKiBkaWZmaWN1bHQgcHJvYmxlbSBpbiBnZW5lcmFsLiA6Ki8KLS8qIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBSdXN0eSBSdXNzZWxsLCBJQk0gQ29ycG9yYXRpb24KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgUnVzdHkgUnVzc2VsbCwgSUJNIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgUmVkIEhhdCwgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjgsMTQyICsxNiw2OTQgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgImh2Y19jb25zb2xlLmgiCiAKLS8qRDozNDAgVGhlc2UgcmVwcmVzZW50IG91ciBpbnB1dCBhbmQgb3V0cHV0IGNvbnNvbGUgcXVldWVzLCBhbmQgdGhlIHZpcnRpbwotICogb3BlcmF0aW9ucyBmb3IgdGhlbS4gKi8KLXN0YXRpYyBzdHJ1Y3QgdmlydHF1ZXVlICppbl92cSwgKm91dF92cTsKLXN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKLQotLyogVGhpcyBpcyBvdXIgaW5wdXQgYnVmZmVyLCBhbmQgaG93IG11Y2ggZGF0YSBpcyBsZWZ0IGluIGl0LiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBpbl9sZW47Ci1zdGF0aWMgY2hhciAqaW4sICppbmJ1ZjsKLQotLyogVGhlIG9wZXJhdGlvbnMgZm9yIG91ciBjb25zb2xlLiAqLwotc3RhdGljIHN0cnVjdCBodl9vcHMgdmlydGlvX2NvbnM7Ci0KLS8qIFRoZSBodmMgZGV2aWNlICovCi1zdGF0aWMgc3RydWN0IGh2Y19zdHJ1Y3QgKmh2YzsKLQotLypEOjMxMCBUaGUgcHV0X2NoYXJzKCkgY2FsbGJhY2sgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4KKy8qCisgKiBUaGlzIGlzIGEgZ2xvYmFsIHN0cnVjdCBmb3Igc3RvcmluZyBjb21tb24gZGF0YSBmb3IgYWxsIHRoZSBkZXZpY2VzCisgKiB0aGlzIGRyaXZlciBoYW5kbGVzLgogICoKLSAqIFdlIHR1cm4gdGhlIGNoYXJhY3RlcnMgaW50byBhIHNjYXR0ZXItZ2F0aGVyIGxpc3QsIGFkZCBpdCB0byB0aGUgb3V0cHV0Ci0gKiBxdWV1ZSBhbmQgdGhlbiBraWNrIHRoZSBIb3N0LiAgVGhlbiB3ZSBzaXQgaGVyZSB3YWl0aW5nIGZvciBpdCB0byBmaW5pc2g6Ci0gKiBpbmVmZmljaWVudCBpbiB0aGVvcnksIGJ1dCBpbiBwcmFjdGljZSBpbXBsZW1lbnRhdGlvbnMgd2lsbCBkbyBpdAotICogaW1tZWRpYXRlbHkgKGxndWVzdCdzIExhdW5jaGVyIGRvZXMpLiAqLwotc3RhdGljIGludCBwdXRfY2hhcnModTMyIHZ0ZXJtbm8sIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGNvdW50KQorICogTWFpbmx5LCBpdCBoYXMgYSBsaW5rZWQgbGlzdCBmb3IgYWxsIHRoZSBjb25zb2xlcyBpbiBvbmUgcGxhY2Ugc28KKyAqIHRoYXQgY2FsbGJhY2tzIGZyb20gaHZjIGZvciBnZXRfY2hhcnMoKSwgcHV0X2NoYXJzKCkgd29yayBwcm9wZXJseQorICogYWNyb3NzIG11bHRpcGxlIGRldmljZXMgYW5kIG11bHRpcGxlIHBvcnRzIHBlciBkZXZpY2UuCisgKi8KK3N0cnVjdCBwb3J0c19kcml2ZXJfZGF0YSB7CisJLyogVXNlZCBmb3IgcmVnaXN0ZXJpbmcgY2hhcmRldnMgKi8KKwlzdHJ1Y3QgY2xhc3MgKmNsYXNzOworCisJLyogVXNlZCBmb3IgZXhwb3J0aW5nIHBlci1wb3J0IGluZm9ybWF0aW9uIHRvIGRlYnVnZnMgKi8KKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RpcjsKKworCS8qIE51bWJlciBvZiBkZXZpY2VzIHRoaXMgZHJpdmVyIGlzIGhhbmRsaW5nICovCisJdW5zaWduZWQgaW50IGluZGV4OworCisJLyoKKwkgKiBUaGlzIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGh2YyBjb25zb2xlcworCSAqIHNwYXduZWQgYnkgdGhpcyBkcml2ZXIuICBUaGlzIG51bWJlciBpcyBnaXZlbiBhcyB0aGUgZmlyc3QKKwkgKiBhcmd1bWVudCB0byBodmNfYWxsb2MoKS4gIFRvIGNvcnJlY3RseSBtYXAgYW4gaW5pdGlhbAorCSAqIGNvbnNvbGUgc3Bhd25lZCB2aWEgaHZjX2luc3RhbnRpYXRlIHRvIHRoZSBjb25zb2xlIGJlaW5nCisJICogaG9va2VkIHVwIHZpYSBodmNfYWxsb2MsIHdlIG5lZWQgdG8gcGFzcyB0aGUgc2FtZSB2dGVybW5vLgorCSAqCisJICogV2UgYWxzbyBqdXN0IGFzc3VtZSB0aGUgZmlyc3QgY29uc29sZSBiZWluZyBpbml0aWFsaXNlZCB3YXMKKwkgKiB0aGUgZmlyc3Qgb25lIHRoYXQgZ290IHVzZWQgYXMgdGhlIGluaXRpYWwgY29uc29sZS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgbmV4dF92dGVybW5vOworCisJLyogQWxsIHRoZSBjb25zb2xlIGRldmljZXMgaGFuZGxlZCBieSB0aGlzIGRyaXZlciAqLworCXN0cnVjdCBsaXN0X2hlYWQgY29uc29sZXM7Cit9Oworc3RhdGljIHN0cnVjdCBwb3J0c19kcml2ZXJfZGF0YSBwZHJ2ZGF0YTsKKworREVGSU5FX1NQSU5MT0NLKHBkcnZkYXRhX2xvY2spOworCisvKiBUaGlzIHN0cnVjdCBob2xkcyBpbmZvcm1hdGlvbiB0aGF0J3MgcmVsZXZhbnQgb25seSBmb3IgY29uc29sZSBwb3J0cyAqLworc3RydWN0IGNvbnNvbGUgeworCS8qIFdlJ2xsIHBsYWNlIGFsbCBjb25zb2xlcyBpbiBhIGxpc3QgaW4gdGhlIHBkcnZkYXRhIHN0cnVjdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIFRoZSBodmMgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbnNvbGUgcG9ydCAqLworCXN0cnVjdCBodmNfc3RydWN0ICpodmM7CisKKwkvKgorCSAqIFRoaXMgbnVtYmVyIGlkZW50aWZpZXMgdGhlIG51bWJlciB0aGF0IHdlIHVzZWQgdG8gcmVnaXN0ZXIKKwkgKiB3aXRoIGh2YyBpbiBodmNfaW5zdGFudGlhdGUoKSBhbmQgaHZjX2FsbG9jKCk7IHRoaXMgaXMgdGhlCisJICogbnVtYmVyIHBhc3NlZCBvbiBieSB0aGUgaHZjIGNhbGxiYWNrcyB0byB1cyB0bworCSAqIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgb3RoZXIgY29uc29sZSBwb3J0cyBoYW5kbGVkIGJ5CisJICogdGhpcyBkcml2ZXIKKwkgKi8KKwl1MzIgdnRlcm1ubzsKK307CisKK3N0cnVjdCBwb3J0X2J1ZmZlciB7CisJY2hhciAqYnVmOworCisJLyogc2l6ZSBvZiB0aGUgYnVmZmVyIGluICpidWYgYWJvdmUgKi8KKwlzaXplX3Qgc2l6ZTsKKworCS8qIHVzZWQgbGVuZ3RoIG9mIHRoZSBidWZmZXIgKi8KKwlzaXplX3QgbGVuOworCS8qIG9mZnNldCBpbiB0aGUgYnVmIGZyb20gd2hpY2ggdG8gY29uc3VtZSBkYXRhICovCisJc2l6ZV90IG9mZnNldDsKK307CisKKy8qCisgKiBUaGlzIGlzIGEgcGVyLWRldmljZSBzdHJ1Y3QgdGhhdCBzdG9yZXMgZGF0YSBjb21tb24gdG8gYWxsIHRoZQorICogcG9ydHMgZm9yIHRoYXQgZGV2aWNlICh2ZGV2LT5wcml2KS4KKyAqLworc3RydWN0IHBvcnRzX2RldmljZSB7CisJLyoKKwkgKiBXb3JrcXVldWUgaGFuZGxlcnMgd2hlcmUgd2UgcHJvY2VzcyBkZWZlcnJlZCB3b3JrIGFmdGVyCisJICogbm90aWZpY2F0aW9uCisJICovCisJc3RydWN0IHdvcmtfc3RydWN0IGNvbnRyb2xfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY29uZmlnX3dvcms7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBvcnRzOworCisJLyogVG8gcHJvdGVjdCB0aGUgbGlzdCBvZiBwb3J0cyAqLworCXNwaW5sb2NrX3QgcG9ydHNfbG9jazsKKworCS8qIFRvIHByb3RlY3QgdGhlIHZxIG9wZXJhdGlvbnMgZm9yIHRoZSBjb250cm9sIGNoYW5uZWwgKi8KKwlzcGlubG9ja190IGN2cV9sb2NrOworCisJLyogVGhlIGN1cnJlbnQgY29uZmlnIHNwYWNlIGlzIHN0b3JlZCBoZXJlICovCisJc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZyBjb25maWc7CisKKwkvKiBUaGUgdmlydGlvIGRldmljZSB3ZSdyZSBhc3NvY2lhdGVkIHdpdGggKi8KKwlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKKworCS8qCisJICogQSBjb3VwbGUgb2YgdmlydHF1ZXVlcyBmb3IgdGhlIGNvbnRyb2wgY2hhbm5lbDogb25lIGZvcgorCSAqIGd1ZXN0LT5ob3N0IHRyYW5zZmVycywgb25lIGZvciBob3N0LT5ndWVzdCB0cmFuc2ZlcnMKKwkgKi8KKwlzdHJ1Y3QgdmlydHF1ZXVlICpjX2l2cSwgKmNfb3ZxOworCisJLyogQXJyYXkgb2YgcGVyLXBvcnQgSU8gdmlydHF1ZXVlcyAqLworCXN0cnVjdCB2aXJ0cXVldWUgKippbl92cXMsICoqb3V0X3ZxczsKKworCS8qIFVzZWQgZm9yIG51bWJlcmluZyBkZXZpY2VzIGZvciBzeXNmcyBhbmQgZGVidWdmcyAqLworCXVuc2lnbmVkIGludCBkcnZfaW5kZXg7CisKKwkvKiBNYWpvciBudW1iZXIgZm9yIHRoaXMgZGV2aWNlLiAgUG9ydHMgd2lsbCBiZSBjcmVhdGVkIGFzIG1pbm9ycy4gKi8KKwlpbnQgY2hyX21ham9yOworfTsKKworLyogVGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIHBlci1wb3J0IGRhdGEgKi8KK3N0cnVjdCBwb3J0IHsKKwkvKiBOZXh0IHBvcnQgaW4gdGhlIGxpc3QsIGhlYWQgaXMgaW4gdGhlIHBvcnRzX2RldmljZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIFBvaW50ZXIgdG8gdGhlIHBhcmVudCB2aXJ0aW9fY29uc29sZSBkZXZpY2UgKi8KKwlzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2OworCisJLyogVGhlIGN1cnJlbnQgYnVmZmVyIGZyb20gd2hpY2ggZGF0YSBoYXMgdG8gYmUgZmVkIHRvIHJlYWRlcnMgKi8KKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmluYnVmOworCisJLyoKKwkgKiBUbyBwcm90ZWN0IHRoZSBvcGVyYXRpb25zIG9uIHRoZSBpbl92cSBhc3NvY2lhdGVkIHdpdGggdGhpcworCSAqIHBvcnQuICBIYXMgdG8gYmUgYSBzcGlubG9jayBiZWNhdXNlIGl0IGNhbiBiZSBjYWxsZWQgZnJvbQorCSAqIGludGVycnVwdCBjb250ZXh0IChnZXRfY2hhcigpKS4KKwkgKi8KKwlzcGlubG9ja190IGluYnVmX2xvY2s7CisKKwkvKiBUaGUgSU8gdnFzIGZvciB0aGlzIHBvcnQgKi8KKwlzdHJ1Y3QgdmlydHF1ZXVlICppbl92cSwgKm91dF92cTsKKworCS8qIEZpbGUgaW4gdGhlIGRlYnVnZnMgZGlyZWN0b3J5IHRoYXQgZXhwb3NlcyB0aGlzIHBvcnQncyBpbmZvcm1hdGlvbiAqLworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZmlsZTsKKworCS8qCisJICogVGhlIGVudHJpZXMgaW4gdGhpcyBzdHJ1Y3Qgd2lsbCBiZSB2YWxpZCBpZiB0aGlzIHBvcnQgaXMKKwkgKiBob29rZWQgdXAgdG8gYW4gaHZjIGNvbnNvbGUKKwkgKi8KKwlzdHJ1Y3QgY29uc29sZSBjb25zOworCisJLyogRWFjaCBwb3J0IGFzc29jaWF0ZXMgd2l0aCBhIHNlcGFyYXRlIGNoYXIgZGV2aWNlICovCisJc3RydWN0IGNkZXYgY2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwkvKiBBIHdhaXRxdWV1ZSBmb3IgcG9sbCgpIG9yIGJsb2NraW5nIHJlYWQgb3BlcmF0aW9ucyAqLworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxdWV1ZTsKKworCS8qIFRoZSAnbmFtZScgb2YgdGhlIHBvcnQgdGhhdCB3ZSBleHBvc2UgdmlhIHN5c2ZzIHByb3BlcnRpZXMgKi8KKwljaGFyICpuYW1lOworCisJLyogVGhlICdpZCcgdG8gaWRlbnRpZnkgdGhlIHBvcnQgd2l0aCB0aGUgSG9zdCAqLworCXUzMiBpZDsKKworCS8qIElzIHRoZSBob3N0IGRldmljZSBvcGVuICovCisJYm9vbCBob3N0X2Nvbm5lY3RlZDsKKworCS8qIFdlIHNob3VsZCBhbGxvdyBvbmx5IG9uZSBwcm9jZXNzIHRvIG9wZW4gYSBwb3J0ICovCisJYm9vbCBndWVzdF9jb25uZWN0ZWQ7Cit9OworCisvKiBUaGlzIGlzIHRoZSB2ZXJ5IGVhcmx5IGFyY2gtc3BlY2lmaWVkIHB1dCBjaGFycyBmdW5jdGlvbi4gKi8KK3N0YXRpYyBpbnQgKCplYXJseV9wdXRfY2hhcnMpKHUzMiwgY29uc3QgY2hhciAqLCBpbnQpOworCitzdGF0aWMgc3RydWN0IHBvcnQgKmZpbmRfcG9ydF9ieV92dGVybW5vKHUzMiB2dGVybW5vKQogewotCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgY29uc29sZSAqY29uczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBkcnZkYXRhX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbnMsICZwZHJ2ZGF0YS5jb25zb2xlcywgbGlzdCkgeworCQlpZiAoY29ucy0+dnRlcm1ubyA9PSB2dGVybW5vKSB7CisJCQlwb3J0ID0gY29udGFpbmVyX29mKGNvbnMsIHN0cnVjdCBwb3J0LCBjb25zKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCXBvcnQgPSBOVUxMOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkcnZkYXRhX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcG9ydDsKK30KKworc3RhdGljIHN0cnVjdCBwb3J0ICpmaW5kX3BvcnRfYnlfaWQoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldiwgdTMyIGlkKQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydGRldi0+cG9ydHNfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJnBvcnRkZXYtPnBvcnRzLCBsaXN0KQorCQlpZiAocG9ydC0+aWQgPT0gaWQpCisJCQlnb3RvIG91dDsKKwlwb3J0ID0gTlVMTDsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0ZGV2LT5wb3J0c19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcG9ydDsKK30KKworc3RhdGljIHN0cnVjdCBwb3J0ICpmaW5kX3BvcnRfYnlfdnEoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldiwKKwkJCQkgICAgc3RydWN0IHZpcnRxdWV1ZSAqdnEpCit7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0ZGV2LT5wb3J0c19sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmcG9ydGRldi0+cG9ydHMsIGxpc3QpCisJCWlmIChwb3J0LT5pbl92cSA9PSB2cSB8fCBwb3J0LT5vdXRfdnEgPT0gdnEpCisJCQlnb3RvIG91dDsKKwlwb3J0ID0gTlVMTDsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0ZGV2LT5wb3J0c19sb2NrLCBmbGFncyk7CisJcmV0dXJuIHBvcnQ7Cit9CisKK3N0YXRpYyBib29sIGlzX2NvbnNvbGVfcG9ydChzdHJ1Y3QgcG9ydCAqcG9ydCkKK3sKKwlpZiAocG9ydC0+Y29ucy5odmMpCisJCXJldHVybiB0cnVlOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBib29sIHVzZV9tdWx0aXBvcnQoc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldikKK3sKKwkvKgorCSAqIFRoaXMgY29uZGl0aW9uIGNhbiBiZSB0cnVlIHdoZW4gcHV0X2NoYXJzIGlzIGNhbGxlZCBmcm9tCisJICogZWFybHlfaW5pdAorCSAqLworCWlmICghcG9ydGRldi0+dmRldikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBvcnRkZXYtPnZkZXYtPmZlYXR1cmVzWzBdICYgKDEgPDwgVklSVElPX0NPTlNPTEVfRl9NVUxUSVBPUlQpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2J1ZihzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZikKK3sKKwlrZnJlZShidWYtPmJ1Zik7CisJa2ZyZWUoYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCBwb3J0X2J1ZmZlciAqYWxsb2NfYnVmKHNpemVfdCBidWZfc2l6ZSkKK3sKKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZjsKKworCWJ1ZiA9IGttYWxsb2Moc2l6ZW9mKCpidWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBmYWlsOworCWJ1Zi0+YnVmID0ga3phbGxvYyhidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYtPmJ1ZikKKwkJZ290byBmcmVlX2J1ZjsKKwlidWYtPmxlbiA9IDA7CisJYnVmLT5vZmZzZXQgPSAwOworCWJ1Zi0+c2l6ZSA9IGJ1Zl9zaXplOworCXJldHVybiBidWY7CisKK2ZyZWVfYnVmOgorCWtmcmVlKGJ1Zik7CitmYWlsOgorCXJldHVybiBOVUxMOworfQorCisvKiBDYWxsZXJzIHNob3VsZCB0YWtlIGFwcHJvcHJpYXRlIGxvY2tzICovCitzdGF0aWMgdm9pZCAqZ2V0X2luYnVmKHN0cnVjdCBwb3J0ICpwb3J0KQoreworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCXN0cnVjdCB2aXJ0cXVldWUgKnZxOwogCXVuc2lnbmVkIGludCBsZW47CiAKLQkvKiBUaGlzIGlzIGEgY29udmVuaWVudCByb3V0aW5lIHRvIGluaXRpYWxpemUgYSBzaW5nbGUtZWxlbSBzZyBsaXN0ICovCi0Jc2dfaW5pdF9vbmUoc2csIGJ1ZiwgY291bnQpOwotCi0JLyogYWRkX2J1ZiB3YW50cyBhIHRva2VuIHRvIGlkZW50aWZ5IHRoaXMgYnVmZmVyOiB3ZSBoYW5kIGl0IGFueQotCSAqIG5vbi1OVUxMIHBvaW50ZXIsIHNpbmNlIHRoZXJlJ3Mgb25seSBldmVyIG9uZSBidWZmZXIuICovCi0JaWYgKG91dF92cS0+dnFfb3BzLT5hZGRfYnVmKG91dF92cSwgc2csIDEsIDAsICh2b2lkICopMSkgPj0gMCkgewotCQkvKiBUZWxsIEhvc3QgdG8gZ28hICovCi0JCW91dF92cS0+dnFfb3BzLT5raWNrKG91dF92cSk7Ci0JCS8qIENoaWxsIG91dCB1bnRpbCBpdCdzIGRvbmUgd2l0aCB0aGUgYnVmZmVyLiAqLwotCQl3aGlsZSAoIW91dF92cS0+dnFfb3BzLT5nZXRfYnVmKG91dF92cSwgJmxlbikpCi0JCQljcHVfcmVsYXgoKTsKKwl2cSA9IHBvcnQtPmluX3ZxOworCWJ1ZiA9IHZxLT52cV9vcHMtPmdldF9idWYodnEsICZsZW4pOworCWlmIChidWYpIHsKKwkJYnVmLT5sZW4gPSBsZW47CisJCWJ1Zi0+b2Zmc2V0ID0gMDsKIAl9Ci0KLQkvKiBXZSdyZSBleHBlY3RlZCB0byByZXR1cm4gdGhlIGFtb3VudCBvZiBkYXRhIHdlIHdyb3RlOiBhbGwgb2YgaXQuICovCi0JcmV0dXJuIGNvdW50OworCXJldHVybiBidWY7CiB9CiAKLS8qIENyZWF0ZSBhIHNjYXR0ZXItZ2F0aGVyIGxpc3QgcmVwcmVzZW50aW5nIG91ciBpbnB1dCBidWZmZXIgYW5kIHB1dCBpdCBpbiB0aGUKLSAqIHF1ZXVlLiAqLwotc3RhdGljIHZvaWQgYWRkX2luYnVmKHZvaWQpCisvKgorICogQ3JlYXRlIGEgc2NhdHRlci1nYXRoZXIgbGlzdCByZXByZXNlbnRpbmcgb3VyIGlucHV0IGJ1ZmZlciBhbmQgcHV0CisgKiBpdCBpbiB0aGUgcXVldWUuCisgKgorICogQ2FsbGVycyBzaG91bGQgdGFrZSBhcHByb3ByaWF0ZSBsb2Nrcy4KKyAqLworc3RhdGljIGludCBhZGRfaW5idWYoc3RydWN0IHZpcnRxdWV1ZSAqdnEsIHN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKLQlzZ19pbml0X29uZShzZywgaW5idWYsIFBBR0VfU0laRSk7CisJaW50IHJldDsKIAotCS8qIFdlIHNob3VsZCBhbHdheXMgYmUgYWJsZSB0byBhZGQgb25lIGJ1ZmZlciB0byBhbiBlbXB0eSBxdWV1ZS4gKi8KLQlpZiAoaW5fdnEtPnZxX29wcy0+YWRkX2J1Zihpbl92cSwgc2csIDAsIDEsIGluYnVmKSA8IDApCi0JCUJVRygpOwotCWluX3ZxLT52cV9vcHMtPmtpY2soaW5fdnEpOworCXNnX2luaXRfb25lKHNnLCBidWYtPmJ1ZiwgYnVmLT5zaXplKTsKKworCXJldCA9IHZxLT52cV9vcHMtPmFkZF9idWYodnEsIHNnLCAwLCAxLCBidWYpOworCXZxLT52cV9vcHMtPmtpY2sodnEpOworCXJldHVybiByZXQ7CiB9CiAKLS8qRDozNTAgZ2V0X2NoYXJzKCkgaXMgdGhlIGNhbGxiYWNrIGZyb20gdGhlIGh2Y19jb25zb2xlIGluZnJhc3RydWN0dXJlIHdoZW4KLSAqIGFuIGludGVycnVwdCBpcyByZWNlaXZlZC4KKy8qIERpc2NhcmQgYW55IHVucmVhZCBkYXRhIHRoaXMgcG9ydCBoYXMuIENhbGxlcnMgbG9ja2Vycy4gKi8KK3N0YXRpYyB2b2lkIGRpc2NhcmRfcG9ydF9kYXRhKHN0cnVjdCBwb3J0ICpwb3J0KQoreworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCXN0cnVjdCB2aXJ0cXVldWUgKnZxOworCXVuc2lnbmVkIGludCBsZW47CisJaW50IHJldDsKKworCXZxID0gcG9ydC0+aW5fdnE7CisJaWYgKHBvcnQtPmluYnVmKQorCQlidWYgPSBwb3J0LT5pbmJ1ZjsKKwllbHNlCisJCWJ1ZiA9IHZxLT52cV9vcHMtPmdldF9idWYodnEsICZsZW4pOworCisJcmV0ID0gMDsKKwl3aGlsZSAoYnVmKSB7CisJCWlmIChhZGRfaW5idWYodnEsIGJ1ZikgPCAwKSB7CisJCQlyZXQrKzsKKwkJCWZyZWVfYnVmKGJ1Zik7CisJCX0KKwkJYnVmID0gdnEtPnZxX29wcy0+Z2V0X2J1Zih2cSwgJmxlbik7CisJfQorCXBvcnQtPmluYnVmID0gTlVMTDsKKwlpZiAocmV0KQorCQlkZXZfd2Fybihwb3J0LT5kZXYsICJFcnJvcnMgYWRkaW5nICVkIGJ1ZmZlcnMgYmFjayB0byB2cVxuIiwKKwkJCSByZXQpOworfQorCitzdGF0aWMgYm9vbCBwb3J0X2hhc19kYXRhKHN0cnVjdCBwb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+aW5idWZfbG9jaywgZmxhZ3MpOworCWlmIChwb3J0LT5pbmJ1ZikgeworCQlyZXQgPSB0cnVlOworCQlnb3RvIG91dDsKKwl9CisJcG9ydC0+aW5idWYgPSBnZXRfaW5idWYocG9ydCk7CisJaWYgKHBvcnQtPmluYnVmKSB7CisJCXJldCA9IHRydWU7CisJCWdvdG8gb3V0OworCX0KKwlyZXQgPSBmYWxzZTsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5pbmJ1Zl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3Qgc2VuZF9jb250cm9sX21zZyhzdHJ1Y3QgcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGV2ZW50LAorCQkJCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07CisJc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbnRyb2wgY3BrdDsKKwlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKKwlpbnQgbGVuOworCisJaWYgKCF1c2VfbXVsdGlwb3J0KHBvcnQtPnBvcnRkZXYpKQorCQlyZXR1cm4gMDsKKworCWNwa3QuaWQgPSBwb3J0LT5pZDsKKwljcGt0LmV2ZW50ID0gZXZlbnQ7CisJY3BrdC52YWx1ZSA9IHZhbHVlOworCisJdnEgPSBwb3J0LT5wb3J0ZGV2LT5jX292cTsKKworCXNnX2luaXRfb25lKHNnLCAmY3BrdCwgc2l6ZW9mKGNwa3QpKTsKKwlpZiAodnEtPnZxX29wcy0+YWRkX2J1Zih2cSwgc2csIDEsIDAsICZjcGt0KSA+PSAwKSB7CisJCXZxLT52cV9vcHMtPmtpY2sodnEpOworCQl3aGlsZSAoIXZxLT52cV9vcHMtPmdldF9idWYodnEsICZsZW4pKQorCQkJY3B1X3JlbGF4KCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBzZW5kX2J1ZihzdHJ1Y3QgcG9ydCAqcG9ydCwgdm9pZCAqaW5fYnVmLCBzaXplX3QgaW5fY291bnQpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzFdOworCXN0cnVjdCB2aXJ0cXVldWUgKm91dF92cTsKKwlzc2l6ZV90IHJldDsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJb3V0X3ZxID0gcG9ydC0+b3V0X3ZxOworCisJc2dfaW5pdF9vbmUoc2csIGluX2J1ZiwgaW5fY291bnQpOworCXJldCA9IG91dF92cS0+dnFfb3BzLT5hZGRfYnVmKG91dF92cSwgc2csIDEsIDAsIGluX2J1Zik7CisKKwkvKiBUZWxsIEhvc3QgdG8gZ28hICovCisJb3V0X3ZxLT52cV9vcHMtPmtpY2sob3V0X3ZxKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWxlbiA9IDA7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKgorCSAqIFdhaXQgdGlsbCB0aGUgaG9zdCBhY2tub3dsZWRnZXMgaXQgcHVzaGVkIG91dCB0aGUgZGF0YSB3ZQorCSAqIHNlbnQuIEFsc28gZW5zdXJlIHdlIHJldHVybiB0byB1c2Vyc3BhY2UgdGhlIG51bWJlciBvZgorCSAqIGJ5dGVzIHRoYXQgd2VyZSBzdWNjZXNzZnVsbHkgY29uc3VtZWQgYnkgdGhlIGhvc3QuCisJICovCisJd2hpbGUgKCFvdXRfdnEtPnZxX29wcy0+Z2V0X2J1ZihvdXRfdnEsICZsZW4pKQorCQljcHVfcmVsYXgoKTsKK2ZhaWw6CisJLyogV2UncmUgZXhwZWN0ZWQgdG8gcmV0dXJuIHRoZSBhbW91bnQgb2YgZGF0YSB3ZSB3cm90ZSAqLworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBHaXZlIG91dCB0aGUgZGF0YSB0aGF0J3MgcmVxdWVzdGVkIGZyb20gdGhlIGJ1ZmZlciB0aGF0IHdlIGhhdmUKKyAqIHF1ZXVlZCB1cC4KKyAqLworc3RhdGljIHNzaXplX3QgZmlsbF9yZWFkYnVmKHN0cnVjdCBwb3J0ICpwb3J0LCBjaGFyICpvdXRfYnVmLCBzaXplX3Qgb3V0X2NvdW50LAorCQkJICAgIGJvb2wgdG9fdXNlcikKK3sKKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFvdXRfY291bnQgfHwgIXBvcnRfaGFzX2RhdGEocG9ydCkpCisJCXJldHVybiAwOworCisJYnVmID0gcG9ydC0+aW5idWY7CisJb3V0X2NvdW50ID0gbWluKG91dF9jb3VudCwgYnVmLT5sZW4gLSBidWYtPm9mZnNldCk7CisKKwlpZiAodG9fdXNlcikgeworCQlzc2l6ZV90IHJldDsKKworCQlyZXQgPSBjb3B5X3RvX3VzZXIob3V0X2J1ZiwgYnVmLT5idWYgKyBidWYtPm9mZnNldCwgb3V0X2NvdW50KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtRUZBVUxUOworCX0gZWxzZSB7CisJCW1lbWNweShvdXRfYnVmLCBidWYtPmJ1ZiArIGJ1Zi0+b2Zmc2V0LCBvdXRfY291bnQpOworCX0KKworCWJ1Zi0+b2Zmc2V0ICs9IG91dF9jb3VudDsKKworCWlmIChidWYtPm9mZnNldCA9PSBidWYtPmxlbikgeworCQkvKgorCQkgKiBXZSdyZSBkb25lIHVzaW5nIGFsbCB0aGUgZGF0YSBpbiB0aGlzIGJ1ZmZlci4KKwkJICogUmUtcXVldWUgc28gdGhhdCB0aGUgSG9zdCBjYW4gc2VuZCB1cyBtb3JlIGRhdGEuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+aW5idWZfbG9jaywgZmxhZ3MpOworCQlwb3J0LT5pbmJ1ZiA9IE5VTEw7CisKKwkJaWYgKGFkZF9pbmJ1Zihwb3J0LT5pbl92cSwgYnVmKSA8IDApCisJCQlkZXZfd2Fybihwb3J0LT5kZXYsICJmYWlsZWQgYWRkX2J1ZlxuIik7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+aW5idWZfbG9jaywgZmxhZ3MpOworCX0KKwkvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSBjb3BpZWQgKi8KKwlyZXR1cm4gb3V0X2NvdW50OworfQorCisvKiBUaGUgY29uZGl0aW9uIHRoYXQgbXVzdCBiZSB0cnVlIGZvciBwb2xsaW5nIHRvIGVuZCAqLworc3RhdGljIGJvb2wgd2FpdF9pc19vdmVyKHN0cnVjdCBwb3J0ICpwb3J0KQoreworCXJldHVybiBwb3J0X2hhc19kYXRhKHBvcnQpIHx8ICFwb3J0LT5ob3N0X2Nvbm5lY3RlZDsKK30KKworc3RhdGljIHNzaXplX3QgcG9ydF9mb3BzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAorCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnApCit7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisJc3NpemVfdCByZXQ7CisKKwlwb3J0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKCFwb3J0X2hhc19kYXRhKHBvcnQpKSB7CisJCS8qCisJCSAqIElmIG5vdGhpbmcncyBjb25uZWN0ZWQgb24gdGhlIGhvc3QganVzdCByZXR1cm4gMCBpbgorCQkgKiBjYXNlIG9mIGxpc3RfZW1wdHk7IHRoaXMgdGVsbHMgdGhlIHVzZXJzcGFjZSBhcHAKKwkJICogdGhhdCB0aGVyZSdzIG5vIGNvbm5lY3Rpb24KKwkJICovCisJCWlmICghcG9ydC0+aG9zdF9jb25uZWN0ZWQpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkJcmV0dXJuIC1FQUdBSU47CisKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBvcnQtPndhaXRxdWV1ZSwKKwkJCQkJICAgICAgIHdhaXRfaXNfb3Zlcihwb3J0KSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJLyoKKwkgKiBXZSBjb3VsZCd2ZSByZWNlaXZlZCBhIGRpc2Nvbm5lY3Rpb24gbWVzc2FnZSB3aGlsZSB3ZSB3ZXJlCisJICogd2FpdGluZyBmb3IgbW9yZSBkYXRhLgorCSAqCisJICogVGhpcyBjaGVjayBpcyBub3QgY2x1YmJlZCBpbiB0aGUgaWYoKSBzdGF0ZW1lbnQgYWJvdmUgYXMgd2UKKwkgKiBtaWdodCByZWNlaXZlIHNvbWUgZGF0YSBhcyB3ZWxsIGFzIHRoZSBob3N0IGNvdWxkIGdldAorCSAqIGRpc2Nvbm5lY3RlZCBhZnRlciB3ZSBnb3Qgd29rZW4gdXAgZnJvbSBvdXIgd2FpdC4gIFNvIHdlCisJICogcmVhbGx5IHdhbnQgdG8gZ2l2ZSBvZmYgd2hhdGV2ZXIgZGF0YSB3ZSBoYXZlIGFuZCBvbmx5IHRoZW4KKwkgKiBjaGVjayBmb3IgaG9zdF9jb25uZWN0ZWQuCisJICovCisJaWYgKCFwb3J0X2hhc19kYXRhKHBvcnQpICYmICFwb3J0LT5ob3N0X2Nvbm5lY3RlZCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZmlsbF9yZWFkYnVmKHBvcnQsIHVidWYsIGNvdW50LCB0cnVlKTsKK30KKworc3RhdGljIHNzaXplX3QgcG9ydF9mb3BzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmcCkKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKwljaGFyICpidWY7CisJc3NpemVfdCByZXQ7CisKKwlwb3J0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJY291bnQgPSBtaW4oKHNpemVfdCkoMzIgKiAxMDI0KSwgY291bnQpOworCisJYnVmID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gY29weV9mcm9tX3VzZXIoYnVmLCB1YnVmLCBjb3VudCk7CisJaWYgKHJldCkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGZyZWVfYnVmOworCX0KKworCXJldCA9IHNlbmRfYnVmKHBvcnQsIGJ1ZiwgY291bnQpOworZnJlZV9idWY6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBvcnRfZm9wc19wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCXVuc2lnbmVkIGludCByZXQ7CisKKwlwb3J0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXBvbGxfd2FpdChmaWxwLCAmcG9ydC0+d2FpdHF1ZXVlLCB3YWl0KTsKKworCXJldCA9IDA7CisJaWYgKHBvcnQtPmluYnVmKQorCQlyZXQgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKwlpZiAocG9ydC0+aG9zdF9jb25uZWN0ZWQpCisJCXJldCB8PSBQT0xMT1VUOworCWlmICghcG9ydC0+aG9zdF9jb25uZWN0ZWQpCisJCXJldCB8PSBQT0xMSFVQOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwb3J0X2ZvcHNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKworCXBvcnQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwkvKiBOb3RpZnkgaG9zdCBvZiBwb3J0IGJlaW5nIGNsb3NlZCAqLworCXNlbmRfY29udHJvbF9tc2cocG9ydCwgVklSVElPX0NPTlNPTEVfUE9SVF9PUEVOLCAwKTsKKworCXNwaW5fbG9ja19pcnEoJnBvcnQtPmluYnVmX2xvY2spOworCXBvcnQtPmd1ZXN0X2Nvbm5lY3RlZCA9IGZhbHNlOworCisJZGlzY2FyZF9wb3J0X2RhdGEocG9ydCk7CisKKwlzcGluX3VubG9ja19pcnEoJnBvcnQtPmluYnVmX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9ydF9mb3BzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGNkZXYgKmNkZXYgPSBpbm9kZS0+aV9jZGV2OworCXN0cnVjdCBwb3J0ICpwb3J0OworCisJcG9ydCA9IGNvbnRhaW5lcl9vZihjZGV2LCBzdHJ1Y3QgcG9ydCwgY2Rldik7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gcG9ydDsKKworCS8qCisJICogRG9uJ3QgYWxsb3cgb3BlbmluZyBvZiBjb25zb2xlIHBvcnQgZGV2aWNlcyAtLSB0aGF0J3MgZG9uZQorCSAqIHZpYSAvZGV2L2h2YworCSAqLworCWlmIChpc19jb25zb2xlX3BvcnQocG9ydCkpCisJCXJldHVybiAtRU5YSU87CisKKwkvKiBBbGxvdyBvbmx5IG9uZSBwcm9jZXNzIHRvIG9wZW4gYSBwYXJ0aWN1bGFyIHBvcnQgYXQgYSB0aW1lICovCisJc3Bpbl9sb2NrX2lycSgmcG9ydC0+aW5idWZfbG9jayk7CisJaWYgKHBvcnQtPmd1ZXN0X2Nvbm5lY3RlZCkgeworCQlzcGluX3VubG9ja19pcnEoJnBvcnQtPmluYnVmX2xvY2spOworCQlyZXR1cm4gLUVNRklMRTsKKwl9CisKKwlwb3J0LT5ndWVzdF9jb25uZWN0ZWQgPSB0cnVlOworCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+aW5idWZfbG9jayk7CisKKwkvKiBOb3RpZnkgaG9zdCBvZiBwb3J0IGJlaW5nIG9wZW5lZCAqLworCXNlbmRfY29udHJvbF9tc2coZmlscC0+cHJpdmF0ZV9kYXRhLCBWSVJUSU9fQ09OU09MRV9QT1JUX09QRU4sIDEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgZmlsZSBvcGVyYXRpb25zIHRoYXQgd2Ugc3VwcG9ydDogcHJvZ3JhbXMgaW4gdGhlIGd1ZXN0IGNhbiBvcGVuCisgKiBhIGNvbnNvbGUgZGV2aWNlLCByZWFkIGZyb20gaXQsIHdyaXRlIHRvIGl0LCBwb2xsIGZvciBkYXRhIGFuZAorICogY2xvc2UgaXQuICBUaGUgZGV2aWNlcyBhcmUgYXQKKyAqICAgL2Rldi92cG9ydDxkZXZpY2UgbnVtYmVyPnA8cG9ydCBudW1iZXI+CisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvcnRfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiAgPSBwb3J0X2ZvcHNfb3BlbiwKKwkucmVhZCAgPSBwb3J0X2ZvcHNfcmVhZCwKKwkud3JpdGUgPSBwb3J0X2ZvcHNfd3JpdGUsCisJLnBvbGwgID0gcG9ydF9mb3BzX3BvbGwsCisJLnJlbGVhc2UgPSBwb3J0X2ZvcHNfcmVsZWFzZSwKK307CisKKy8qCisgKiBUaGUgcHV0X2NoYXJzKCkgY2FsbGJhY2sgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4KICAqCi0gKiBNb3N0IG9mIHRoZSBjb2RlIGRlYWxzIHdpdGggdGhlIGZhY3QgdGhhdCB0aGUgaHZjX2NvbnNvbGUoKSBpbmZyYXN0cnVjdHVyZQotICogb25seSBhc2tzIHVzIGZvciAxNiBieXRlcyBhdCBhIHRpbWUuICBXZSBrZWVwIGluX29mZnNldCBhbmQgaW5fdXNlZCBmaWVsZHMKLSAqIGZvciBwYXJ0aWFsbHktZmlsbGVkIGJ1ZmZlcnMuICovCisgKiBXZSB0dXJuIHRoZSBjaGFyYWN0ZXJzIGludG8gYSBzY2F0dGVyLWdhdGhlciBsaXN0LCBhZGQgaXQgdG8gdGhlCisgKiBvdXRwdXQgcXVldWUgYW5kIHRoZW4ga2ljayB0aGUgSG9zdC4gIFRoZW4gd2Ugc2l0IGhlcmUgd2FpdGluZyBmb3IKKyAqIGl0IHRvIGZpbmlzaDogaW5lZmZpY2llbnQgaW4gdGhlb3J5LCBidXQgaW4gcHJhY3RpY2UKKyAqIGltcGxlbWVudGF0aW9ucyB3aWxsIGRvIGl0IGltbWVkaWF0ZWx5IChsZ3Vlc3QncyBMYXVuY2hlciBkb2VzKS4KKyAqLworc3RhdGljIGludCBwdXRfY2hhcnModTMyIHZ0ZXJtbm8sIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCisJcG9ydCA9IGZpbmRfcG9ydF9ieV92dGVybW5vKHZ0ZXJtbm8pOworCWlmICghcG9ydCkKKwkJcmV0dXJuIDA7CisKKwlpZiAodW5saWtlbHkoZWFybHlfcHV0X2NoYXJzKSkKKwkJcmV0dXJuIGVhcmx5X3B1dF9jaGFycyh2dGVybW5vLCBidWYsIGNvdW50KTsKKworCXJldHVybiBzZW5kX2J1Zihwb3J0LCAodm9pZCAqKWJ1ZiwgY291bnQpOworfQorCisvKgorICogZ2V0X2NoYXJzKCkgaXMgdGhlIGNhbGxiYWNrIGZyb20gdGhlIGh2Y19jb25zb2xlIGluZnJhc3RydWN0dXJlCisgKiB3aGVuIGFuIGludGVycnVwdCBpcyByZWNlaXZlZC4KKyAqCisgKiBXZSBjYWxsIG91dCB0byBmaWxsX3JlYWRidWYgdGhhdCBnZXRzIHVzIHRoZSByZXF1aXJlZCBkYXRhIGZyb20gdGhlCisgKiBidWZmZXJzIHRoYXQgYXJlIHF1ZXVlZCB1cC4KKyAqLwogc3RhdGljIGludCBnZXRfY2hhcnModTMyIHZ0ZXJtbm8sIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogeworCXN0cnVjdCBwb3J0ICpwb3J0OworCisJcG9ydCA9IGZpbmRfcG9ydF9ieV92dGVybW5vKHZ0ZXJtbm8pOworCWlmICghcG9ydCkKKwkJcmV0dXJuIDA7CisKIAkvKiBJZiB3ZSBkb24ndCBoYXZlIGFuIGlucHV0IHF1ZXVlIHlldCwgd2UgY2FuJ3QgZ2V0IGlucHV0LiAqLwotCUJVR19PTighaW5fdnEpOworCUJVR19PTighcG9ydC0+aW5fdnEpOwogCi0JLyogTm8gYnVmZmVyPyAgVHJ5IHRvIGdldCBvbmUuICovCi0JaWYgKCFpbl9sZW4pIHsKLQkJaW4gPSBpbl92cS0+dnFfb3BzLT5nZXRfYnVmKGluX3ZxLCAmaW5fbGVuKTsKLQkJaWYgKCFpbikKLQkJCXJldHVybiAwOwotCX0KLQotCS8qIFlvdSB3YW50IG1vcmUgdGhhbiB3ZSBoYXZlIHRvIGdpdmU/ICBXZWxsLCB0cnkgd2FudGluZyBsZXNzISAqLwotCWlmIChpbl9sZW4gPCBjb3VudCkKLQkJY291bnQgPSBpbl9sZW47Ci0KLQkvKiBDb3B5IGFjcm9zcyB0byB0aGVpciBidWZmZXIgYW5kIGluY3JlbWVudCBvZmZzZXQuICovCi0JbWVtY3B5KGJ1ZiwgaW4sIGNvdW50KTsKLQlpbiArPSBjb3VudDsKLQlpbl9sZW4gLT0gY291bnQ7Ci0KLQkvKiBGaW5pc2hlZD8gIFJlLXJlZ2lzdGVyIGJ1ZmZlciBzbyBIb3N0IHdpbGwgdXNlIGl0IGFnYWluLiAqLwotCWlmIChpbl9sZW4gPT0gMCkKLQkJYWRkX2luYnVmKCk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0vKjoqLwotCi0vKkQ6MzIwIENvbnNvbGUgZHJpdmVycyBhcmUgaW5pdGlhbGl6ZWQgdmVyeSBlYXJseSBzbyBib290IG1lc3NhZ2VzIGNhbiBnbyBvdXQsCi0gKiBzbyB3ZSBkbyB0aGluZ3Mgc2xpZ2h0bHkgZGlmZmVyZW50bHkgZnJvbSB0aGUgZ2VuZXJpYyB2aXJ0aW8gaW5pdGlhbGl6YXRpb24KLSAqIG9mIHRoZSBuZXQgYW5kIGJsb2NrIGRyaXZlcnMuCi0gKgotICogQXQgdGhpcyBzdGFnZSwgdGhlIGNvbnNvbGUgaXMgb3V0cHV0LW9ubHkuICBJdCdzIHRvbyBlYXJseSB0byBzZXQgdXAgYQotICogdmlydHF1ZXVlLCBzbyB3ZSBsZXQgdGhlIGRyaXZlcnMgZG8gc29tZSBib3V0aXF1ZSBlYXJseS1vdXRwdXQgdGhpbmcuICovCi1pbnQgX19pbml0IHZpcnRpb19jb25zX2Vhcmx5X2luaXQoaW50ICgqcHV0X2NoYXJzKSh1MzIsIGNvbnN0IGNoYXIgKiwgaW50KSkKLXsKLQl2aXJ0aW9fY29ucy5wdXRfY2hhcnMgPSBwdXRfY2hhcnM7Ci0JcmV0dXJuIGh2Y19pbnN0YW50aWF0ZSgwLCAwLCAmdmlydGlvX2NvbnMpOworCXJldHVybiBmaWxsX3JlYWRidWYocG9ydCwgYnVmLCBjb3VudCwgZmFsc2UpOwogfQogCi0vKgotICogdmlydGlvIGNvbnNvbGUgY29uZmlndXJhdGlvbi4gVGhpcyBzdXBwb3J0czoKLSAqIC0gY29uc29sZSByZXNpemUKLSAqLwotc3RhdGljIHZvaWQgdmlydGNvbnNfYXBwbHlfY29uZmlnKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCByZXNpemVfY29uc29sZShzdHJ1Y3QgcG9ydCAqcG9ydCkKIHsKKwlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldjsKIAlzdHJ1Y3Qgd2luc2l6ZSB3czsKIAotCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUoZGV2LCBWSVJUSU9fQ09OU09MRV9GX1NJWkUpKSB7Ci0JCWRldi0+Y29uZmlnLT5nZXQoZGV2LAotCQkJCSBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29uZmlnLCBjb2xzKSwKLQkJCQkgJndzLndzX2NvbCwgc2l6ZW9mKHUxNikpOwotCQlkZXYtPmNvbmZpZy0+Z2V0KGRldiwKLQkJCQkgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywgcm93cyksCi0JCQkJICZ3cy53c19yb3csIHNpemVvZih1MTYpKTsKLQkJaHZjX3Jlc2l6ZShodmMsIHdzKTsKKwl2ZGV2ID0gcG9ydC0+cG9ydGRldi0+dmRldjsKKwlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19DT05TT0xFX0ZfU0laRSkpIHsKKwkJdmRldi0+Y29uZmlnLT5nZXQodmRldiwKKwkJCQkgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb25maWcsIGNvbHMpLAorCQkJCSAgJndzLndzX2NvbCwgc2l6ZW9mKHUxNikpOworCQl2ZGV2LT5jb25maWctPmdldCh2ZGV2LAorCQkJCSAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywgcm93cyksCisJCQkJICAmd3Mud3Nfcm93LCBzaXplb2YodTE2KSk7CisJCWh2Y19yZXNpemUocG9ydC0+Y29ucy5odmMsIHdzKTsKIAl9CiB9CiAKLS8qCi0gKiB3ZSBzdXBwb3J0IG9ubHkgb25lIGNvbnNvbGUsIHRoZSBodmMgc3RydWN0IGlzIGEgZ2xvYmFsIHZhcgotICogV2Ugc2V0IHRoZSBjb25maWd1cmF0aW9uIGF0IHRoaXMgcG9pbnQsIHNpbmNlIHdlIG5vdyBoYXZlIGEgdHR5Ci0gKi8KKy8qIFdlIHNldCB0aGUgY29uZmlndXJhdGlvbiBhdCB0aGlzIHBvaW50LCBzaW5jZSB3ZSBub3cgaGF2ZSBhIHR0eSAqLwogc3RhdGljIGludCBub3RpZmllcl9hZGRfdmlvKHN0cnVjdCBodmNfc3RydWN0ICpocCwgaW50IGRhdGEpCiB7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisKKwlwb3J0ID0gZmluZF9wb3J0X2J5X3Z0ZXJtbm8oaHAtPnZ0ZXJtbm8pOworCWlmICghcG9ydCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlocC0+aXJxX3JlcXVlc3RlZCA9IDE7Ci0JdmlydGNvbnNfYXBwbHlfY29uZmlnKHZkZXYpOworCXJlc2l6ZV9jb25zb2xlKHBvcnQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzMsNzkgKzcxMyw3OTcgQEAKIAlocC0+aXJxX3JlcXVlc3RlZCA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGh2Y19oYW5kbGVfaW5wdXQoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCisvKiBUaGUgb3BlcmF0aW9ucyBmb3IgY29uc29sZSBwb3J0cy4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHZfb3BzIGh2X29wcyA9IHsKKwkuZ2V0X2NoYXJzID0gZ2V0X2NoYXJzLAorCS5wdXRfY2hhcnMgPSBwdXRfY2hhcnMsCisJLm5vdGlmaWVyX2FkZCA9IG5vdGlmaWVyX2FkZF92aW8sCisJLm5vdGlmaWVyX2RlbCA9IG5vdGlmaWVyX2RlbF92aW8sCisJLm5vdGlmaWVyX2hhbmd1cCA9IG5vdGlmaWVyX2RlbF92aW8sCit9OworCisvKgorICogQ29uc29sZSBkcml2ZXJzIGFyZSBpbml0aWFsaXplZCB2ZXJ5IGVhcmx5IHNvIGJvb3QgbWVzc2FnZXMgY2FuIGdvCisgKiBvdXQsIHNvIHdlIGRvIHRoaW5ncyBzbGlnaHRseSBkaWZmZXJlbnRseSBmcm9tIHRoZSBnZW5lcmljIHZpcnRpbworICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIG5ldCBhbmQgYmxvY2sgZHJpdmVycy4KKyAqCisgKiBBdCB0aGlzIHN0YWdlLCB0aGUgY29uc29sZSBpcyBvdXRwdXQtb25seS4gIEl0J3MgdG9vIGVhcmx5IHRvIHNldAorICogdXAgYSB2aXJ0cXVldWUsIHNvIHdlIGxldCB0aGUgZHJpdmVycyBkbyBzb21lIGJvdXRpcXVlIGVhcmx5LW91dHB1dAorICogdGhpbmcuCisgKi8KK2ludCBfX2luaXQgdmlydGlvX2NvbnNfZWFybHlfaW5pdChpbnQgKCpwdXRfY2hhcnMpKHUzMiwgY29uc3QgY2hhciAqLCBpbnQpKQogewotCWlmIChodmNfcG9sbChodmMpKQorCWVhcmx5X3B1dF9jaGFycyA9IHB1dF9jaGFyczsKKwlyZXR1cm4gaHZjX2luc3RhbnRpYXRlKDAsIDAsICZodl9vcHMpOworfQorCitpbnQgaW5pdF9wb3J0X2NvbnNvbGUoc3RydWN0IHBvcnQgKnBvcnQpCit7CisJaW50IHJldDsKKworCS8qCisJICogVGhlIEhvc3QncyB0ZWxsaW5nIHVzIHRoaXMgcG9ydCBpcyBhIGNvbnNvbGUgcG9ydC4gIEhvb2sgaXQKKwkgKiB1cCB3aXRoIGFuIGh2YyBjb25zb2xlLgorCSAqCisJICogVG8gc2V0IHVwIGFuZCBtYW5hZ2Ugb3VyIHZpcnR1YWwgY29uc29sZSwgd2UgY2FsbAorCSAqIGh2Y19hbGxvYygpLgorCSAqCisJICogVGhlIGZpcnN0IGFyZ3VtZW50IG9mIGh2Y19hbGxvYygpIGlzIHRoZSB2aXJ0dWFsIGNvbnNvbGUKKwkgKiBudW1iZXIuICBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBwYXJhbWV0ZXIgZm9yIHRoZQorCSAqIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20gKGxpa2UgaXJxIG51bWJlcikuICBXZSBjdXJyZW50bHkKKwkgKiBsZWF2ZSB0aGlzIGFzIHplcm8sIHZpcnRxdWV1ZXMgaGF2ZSBpbXBsaWNpdCBub3RpZmljYXRpb25zLgorCSAqCisJICogVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGEgInN0cnVjdCBodl9vcHMiIGNvbnRhaW5pbmcgdGhlCisJICogcHV0X2NoYXJzKCkgZ2V0X2NoYXJzKCksIG5vdGlmaWVyX2FkZCgpIGFuZCBub3RpZmllcl9kZWwoKQorCSAqIHBvaW50ZXJzLiAgVGhlIGZpbmFsIGFyZ3VtZW50IGlzIHRoZSBvdXRwdXQgYnVmZmVyIHNpemU6IHdlCisJICogY2FuIGRvIGFueSBzaXplLCBzbyB3ZSBwdXQgUEFHRV9TSVpFIGhlcmUuCisJICovCisJcG9ydC0+Y29ucy52dGVybW5vID0gcGRydmRhdGEubmV4dF92dGVybW5vOworCisJcG9ydC0+Y29ucy5odmMgPSBodmNfYWxsb2MocG9ydC0+Y29ucy52dGVybW5vLCAwLCAmaHZfb3BzLCBQQUdFX1NJWkUpOworCWlmIChJU19FUlIocG9ydC0+Y29ucy5odmMpKSB7CisJCXJldCA9IFBUUl9FUlIocG9ydC0+Y29ucy5odmMpOworCQlkZXZfZXJyKHBvcnQtPmRldiwKKwkJCSJlcnJvciAlZCBhbGxvY2F0aW5nIGh2YyBmb3IgcG9ydFxuIiwgcmV0KTsKKwkJcG9ydC0+Y29ucy5odmMgPSBOVUxMOworCQlyZXR1cm4gcmV0OworCX0KKwlzcGluX2xvY2tfaXJxKCZwZHJ2ZGF0YV9sb2NrKTsKKwlwZHJ2ZGF0YS5uZXh0X3Z0ZXJtbm8rKzsKKwlsaXN0X2FkZF90YWlsKCZwb3J0LT5jb25zLmxpc3QsICZwZHJ2ZGF0YS5jb25zb2xlcyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwZHJ2ZGF0YV9sb2NrKTsKKwlwb3J0LT5ndWVzdF9jb25uZWN0ZWQgPSB0cnVlOworCisJLyogTm90aWZ5IGhvc3Qgb2YgcG9ydCBiZWluZyBvcGVuZWQgKi8KKwlzZW5kX2NvbnRyb2xfbXNnKHBvcnQsIFZJUlRJT19DT05TT0xFX1BPUlRfT1BFTiwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19wb3J0X25hbWUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKworCXBvcnQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVzXG4iLCBwb3J0LT5uYW1lKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfcG9ydF9uYW1lLCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBvcnRfc3lzZnNfZW50cmllc1tdID0geworCSZkZXZfYXR0cl9uYW1lLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcG9ydF9hdHRyaWJ1dGVfZ3JvdXAgPSB7CisJLm5hbWUgPSBOVUxMLAkJLyogcHV0IGluIGRldmljZSBkaXJlY3RvcnkgKi8KKwkuYXR0cnMgPSBwb3J0X3N5c2ZzX2VudHJpZXMsCit9OworCitzdGF0aWMgaW50IGRlYnVnZnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBkZWJ1Z2ZzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAorCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZwKQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCWNoYXIgKmJ1ZjsKKwlzc2l6ZV90IHJldCwgb3V0X29mZnNldCwgb3V0X2NvdW50OworCisJb3V0X2NvdW50ID0gMTAyNDsKKwlidWYgPSBrbWFsbG9jKG91dF9jb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcG9ydCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlvdXRfb2Zmc2V0ID0gMDsKKwlvdXRfb2Zmc2V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dF9vZmZzZXQsIG91dF9jb3VudCwKKwkJCSAgICAgICAibmFtZTogJXNcbiIsIHBvcnQtPm5hbWUgPyBwb3J0LT5uYW1lIDogIiIpOworCW91dF9vZmZzZXQgKz0gc25wcmludGYoYnVmICsgb3V0X29mZnNldCwgb3V0X2NvdW50IC0gb3V0X29mZnNldCwKKwkJCSAgICAgICAiZ3Vlc3RfY29ubmVjdGVkOiAlZFxuIiwgcG9ydC0+Z3Vlc3RfY29ubmVjdGVkKTsKKwlvdXRfb2Zmc2V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dF9vZmZzZXQsIG91dF9jb3VudCAtIG91dF9vZmZzZXQsCisJCQkgICAgICAgImhvc3RfY29ubmVjdGVkOiAlZFxuIiwgcG9ydC0+aG9zdF9jb25uZWN0ZWQpOworCW91dF9vZmZzZXQgKz0gc25wcmludGYoYnVmICsgb3V0X29mZnNldCwgb3V0X2NvdW50IC0gb3V0X29mZnNldCwKKwkJCSAgICAgICAiaXNfY29uc29sZTogJXNcbiIsCisJCQkgICAgICAgaXNfY29uc29sZV9wb3J0KHBvcnQpID8gInllcyIgOiAibm8iKTsKKwlvdXRfb2Zmc2V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dF9vZmZzZXQsIG91dF9jb3VudCAtIG91dF9vZmZzZXQsCisJCQkgICAgICAgImNvbnNvbGVfdnRlcm1ubzogJXVcbiIsIHBvcnQtPmNvbnMudnRlcm1ubyk7CisKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjb3VudCwgb2ZmcCwgYnVmLCBvdXRfb2Zmc2V0KTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvcnRfZGVidWdmc19vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gID0gZGVidWdmc19vcGVuLAorCS5yZWFkICA9IGRlYnVnZnNfcmVhZCwKK307CisKKy8qIFJlbW92ZSBhbGwgcG9ydC1zcGVjaWZpYyBkYXRhLiAqLworc3RhdGljIGludCByZW1vdmVfcG9ydChzdHJ1Y3QgcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZjsKKworCXNwaW5fbG9ja19pcnEoJnBvcnQtPnBvcnRkZXYtPnBvcnRzX2xvY2spOworCWxpc3RfZGVsKCZwb3J0LT5saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJnBvcnQtPnBvcnRkZXYtPnBvcnRzX2xvY2spOworCisJaWYgKGlzX2NvbnNvbGVfcG9ydChwb3J0KSkgeworCQlzcGluX2xvY2tfaXJxKCZwZHJ2ZGF0YV9sb2NrKTsKKwkJbGlzdF9kZWwoJnBvcnQtPmNvbnMubGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycSgmcGRydmRhdGFfbG9jayk7CisJCWh2Y19yZW1vdmUocG9ydC0+Y29ucy5odmMpOworCX0KKwlpZiAocG9ydC0+Z3Vlc3RfY29ubmVjdGVkKQorCQlzZW5kX2NvbnRyb2xfbXNnKHBvcnQsIFZJUlRJT19DT05TT0xFX1BPUlRfT1BFTiwgMCk7CisKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBvcnQtPmRldi0+a29iaiwgJnBvcnRfYXR0cmlidXRlX2dyb3VwKTsKKwlkZXZpY2VfZGVzdHJveShwZHJ2ZGF0YS5jbGFzcywgcG9ydC0+ZGV2LT5kZXZ0KTsKKwljZGV2X2RlbCgmcG9ydC0+Y2Rldik7CisKKwkvKiBSZW1vdmUgdW51c2VkIGRhdGEgdGhpcyBwb3J0IG1pZ2h0IGhhdmUgcmVjZWl2ZWQuICovCisJZGlzY2FyZF9wb3J0X2RhdGEocG9ydCk7CisKKwkvKiBSZW1vdmUgYnVmZmVycyB3ZSBxdWV1ZWQgdXAgZm9yIHRoZSBIb3N0IHRvIHNlbmQgdXMgZGF0YSBpbi4gKi8KKwl3aGlsZSAoKGJ1ZiA9IHBvcnQtPmluX3ZxLT52cV9vcHMtPmRldGFjaF91bnVzZWRfYnVmKHBvcnQtPmluX3ZxKSkpCisJCWZyZWVfYnVmKGJ1Zik7CisKKwlrZnJlZShwb3J0LT5uYW1lKTsKKworCWRlYnVnZnNfcmVtb3ZlKHBvcnQtPmRlYnVnZnNfZmlsZSk7CisKKwlrZnJlZShwb3J0KTsKKwlyZXR1cm4gMDsKK30KKworLyogQW55IHByaXZhdGUgbWVzc2FnZXMgdGhhdCB0aGUgSG9zdCBhbmQgR3Vlc3Qgd2FudCB0byBzaGFyZSAqLworc3RhdGljIHZvaWQgaGFuZGxlX2NvbnRyb2xfbWVzc2FnZShzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2LAorCQkJCSAgIHN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb250cm9sICpjcGt0OworCXN0cnVjdCBwb3J0ICpwb3J0OworCXNpemVfdCBuYW1lX3NpemU7CisJaW50IGVycjsKKworCWNwa3QgPSAoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbnRyb2wgKikoYnVmLT5idWYgKyBidWYtPm9mZnNldCk7CisKKwlwb3J0ID0gZmluZF9wb3J0X2J5X2lkKHBvcnRkZXYsIGNwa3QtPmlkKTsKKwlpZiAoIXBvcnQpIHsKKwkJLyogTm8gdmFsaWQgaGVhZGVyIGF0IHN0YXJ0IG9mIGJ1ZmZlci4gIERyb3AgaXQuICovCisJCWRldl9kYmcoJnBvcnRkZXYtPnZkZXYtPmRldiwKKwkJCSJJbnZhbGlkIGluZGV4ICV1IGluIGNvbnRyb2wgcGFja2V0XG4iLCBjcGt0LT5pZCk7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGNwa3QtPmV2ZW50KSB7CisJY2FzZSBWSVJUSU9fQ09OU09MRV9DT05TT0xFX1BPUlQ6CisJCWlmICghY3BrdC0+dmFsdWUpCisJCQlicmVhazsKKwkJaWYgKGlzX2NvbnNvbGVfcG9ydChwb3J0KSkKKwkJCWJyZWFrOworCisJCWluaXRfcG9ydF9jb25zb2xlKHBvcnQpOworCQkvKgorCQkgKiBDb3VsZCByZW1vdmUgdGhlIHBvcnQgaGVyZSBpbiBjYXNlIGluaXQgZmFpbHMgLSBidXQKKwkJICogaGF2ZSB0byBub3RpZnkgdGhlIGhvc3QgZmlyc3QuCisJCSAqLworCQlicmVhazsKKwljYXNlIFZJUlRJT19DT05TT0xFX1JFU0laRToKKwkJaWYgKCFpc19jb25zb2xlX3BvcnQocG9ydCkpCisJCQlicmVhazsKKwkJcG9ydC0+Y29ucy5odmMtPmlycV9yZXF1ZXN0ZWQgPSAxOworCQlyZXNpemVfY29uc29sZShwb3J0KTsKKwkJYnJlYWs7CisJY2FzZSBWSVJUSU9fQ09OU09MRV9QT1JUX09QRU46CisJCXBvcnQtPmhvc3RfY29ubmVjdGVkID0gY3BrdC0+dmFsdWU7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+d2FpdHF1ZXVlKTsKKwkJYnJlYWs7CisJY2FzZSBWSVJUSU9fQ09OU09MRV9QT1JUX05BTUU6CisJCS8qCisJCSAqIFNraXAgdGhlIHNpemUgb2YgdGhlIGhlYWRlciBhbmQgdGhlIGNwa3QgdG8gZ2V0IHRoZSBzaXplCisJCSAqIG9mIHRoZSBuYW1lIHRoYXQgd2FzIHNlbnQKKwkJICovCisJCW5hbWVfc2l6ZSA9IGJ1Zi0+bGVuIC0gYnVmLT5vZmZzZXQgLSBzaXplb2YoKmNwa3QpICsgMTsKKworCQlwb3J0LT5uYW1lID0ga21hbGxvYyhuYW1lX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIXBvcnQtPm5hbWUpIHsKKwkJCWRldl9lcnIocG9ydC0+ZGV2LAorCQkJCSJOb3QgZW5vdWdoIHNwYWNlIHRvIHN0b3JlIHBvcnQgbmFtZVxuIik7CisJCQlicmVhazsKKwkJfQorCQlzdHJuY3B5KHBvcnQtPm5hbWUsIGJ1Zi0+YnVmICsgYnVmLT5vZmZzZXQgKyBzaXplb2YoKmNwa3QpLAorCQkJbmFtZV9zaXplIC0gMSk7CisJCXBvcnQtPm5hbWVbbmFtZV9zaXplIC0gMV0gPSAwOworCisJCS8qCisJCSAqIFNpbmNlIHdlIG9ubHkgaGF2ZSBvbmUgc3lzZnMgYXR0cmlidXRlLCAnbmFtZScsCisJCSAqIGNyZWF0ZSBpdCBvbmx5IGlmIHdlIGhhdmUgYSBuYW1lIGZvciB0aGUgcG9ydC4KKwkJICovCisJCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcG9ydC0+ZGV2LT5rb2JqLAorCQkJCQkgJnBvcnRfYXR0cmlidXRlX2dyb3VwKTsKKwkJaWYgKGVycikKKwkJCWRldl9lcnIocG9ydC0+ZGV2LAorCQkJCSJFcnJvciAlZCBjcmVhdGluZyBzeXNmcyBkZXZpY2UgYXR0cmlidXRlc1xuIiwKKwkJCQllcnIpOworCisJCWJyZWFrOworCWNhc2UgVklSVElPX0NPTlNPTEVfUE9SVF9SRU1PVkU6CisJCS8qCisJCSAqIEhvdCB1bnBsdWcgdGhlIHBvcnQuICBXZSBkb24ndCBkZWNyZW1lbnQgbnJfcG9ydHMKKwkJICogc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGggZXh0cmEgY29tcGxleGl0aWVzCisJCSAqIG9mIHVzaW5nIHRoZSBsb3dlc3QtYXZhaWxhYmxlIHBvcnQgaWQ6IFdlIGNhbiBqdXN0CisJCSAqIHBpY2sgdXAgdGhlIG5yX3BvcnRzIG51bWJlciBhcyB0aGUgaWQgYW5kIG5vdCBoYXZlCisJCSAqIHVzZXJzcGFjZSBzZW5kIGl0IHRvIHVzLiAgVGhpcyBoZWxwcyB1cyBpbiB0d28KKwkJICogd2F5czoKKwkJICoKKwkJICogLSBXZSBkb24ndCBuZWVkIHRvIGhhdmUgYSAncG9ydF9pZCcgZmllbGQgaW4gdGhlCisJCSAqICAgY29uZmlnIHNwYWNlIHdoZW4gYSBwb3J0IGlzIGhvdC1hZGRlZC4gIFRoaXMgaXMgYQorCQkgKiAgIGdvb2QgdGhpbmcgYXMgd2UgbWlnaHQgcXVldWUgdXAgbXVsdGlwbGUgaG90cGx1ZworCQkgKiAgIHJlcXVlc3RzIGlzc3VlZCBpbiBvdXIgd29ya3F1ZXVlLgorCQkgKgorCQkgKiAtIEFub3RoZXIgd2F5IHRvIGRlYWwgd2l0aCB0aGlzIHdvdWxkIGhhdmUgYmVlbiB0bworCQkgKiAgIHVzZSBhIGJpdG1hcCBvZiB0aGUgYWN0aXZlIHBvcnRzIGFuZCBzZWxlY3QgdGhlCisJCSAqICAgbG93ZXN0IG5vbi1hY3RpdmUgcG9ydCBmcm9tIHRoYXQgbWFwLiAgVGhhdAorCQkgKiAgIGJsb2F0cyB0aGUgYWxyZWFkeSB0aWdodCBjb25maWcgc3BhY2UgYW5kIHdlCisJCSAqICAgd291bGQgZW5kIHVwIGFydGlmaWNpYWxseSBsaW1pdGluZyB0aGUKKwkJICogICBtYXguIG51bWJlciBvZiBwb3J0cyB0byBzaXplb2YoYml0bWFwKS4gIFJpZ2h0CisJCSAqICAgbm93IHdlIGNhbiBzdXBwb3J0IDJeMzIgcG9ydHMgKGFzIHRoZSBwb3J0IGlkIGlzCisJCSAqICAgc3RvcmVkIGluIGEgdTMyIHR5cGUpLgorCQkgKgorCQkgKi8KKwkJcmVtb3ZlX3BvcnQocG9ydCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgY29udHJvbF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisJc3RydWN0IHZpcnRxdWV1ZSAqdnE7CisJc3RydWN0IHBvcnRfYnVmZmVyICpidWY7CisJdW5zaWduZWQgaW50IGxlbjsKKworCXBvcnRkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBvcnRzX2RldmljZSwgY29udHJvbF93b3JrKTsKKwl2cSA9IHBvcnRkZXYtPmNfaXZxOworCisJc3Bpbl9sb2NrKCZwb3J0ZGV2LT5jdnFfbG9jayk7CisJd2hpbGUgKChidWYgPSB2cS0+dnFfb3BzLT5nZXRfYnVmKHZxLCAmbGVuKSkpIHsKKwkJc3Bpbl91bmxvY2soJnBvcnRkZXYtPmN2cV9sb2NrKTsKKworCQlidWYtPmxlbiA9IGxlbjsKKwkJYnVmLT5vZmZzZXQgPSAwOworCisJCWhhbmRsZV9jb250cm9sX21lc3NhZ2UocG9ydGRldiwgYnVmKTsKKworCQlzcGluX2xvY2soJnBvcnRkZXYtPmN2cV9sb2NrKTsKKwkJaWYgKGFkZF9pbmJ1Zihwb3J0ZGV2LT5jX2l2cSwgYnVmKSA8IDApIHsKKwkJCWRldl93YXJuKCZwb3J0ZGV2LT52ZGV2LT5kZXYsCisJCQkJICJFcnJvciBhZGRpbmcgYnVmZmVyIHRvIHF1ZXVlXG4iKTsKKwkJCWZyZWVfYnVmKGJ1Zik7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJnBvcnRkZXYtPmN2cV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgaW5faW50cihzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcG9ydCA9IGZpbmRfcG9ydF9ieV92cSh2cS0+dmRldi0+cHJpdiwgdnEpOworCWlmICghcG9ydCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmluYnVmX2xvY2ssIGZsYWdzKTsKKwlpZiAoIXBvcnQtPmluYnVmKQorCQlwb3J0LT5pbmJ1ZiA9IGdldF9pbmJ1Zihwb3J0KTsKKworCS8qCisJICogRG9uJ3QgcXVldWUgdXAgZGF0YSB3aGVuIHBvcnQgaXMgY2xvc2VkLiAgVGhpcyBjb25kaXRpb24KKwkgKiBjYW4gYmUgcmVhY2hlZCB3aGVuIGEgY29uc29sZSBwb3J0IGlzIG5vdCB5ZXQgY29ubmVjdGVkIChubworCSAqIHR0eSBpcyBzcGF3bmVkKSBhbmQgdGhlIGhvc3Qgc2VuZHMgb3V0IGRhdGEgdG8gY29uc29sZQorCSAqIHBvcnRzLiAgRm9yIGdlbmVyaWMgc2VyaWFsIHBvcnRzLCB0aGUgaG9zdCB3b24ndAorCSAqIChzaG91bGRuJ3QpIHNlbmQgZGF0YSB0aWxsIHRoZSBndWVzdCBpcyBjb25uZWN0ZWQuCisJICovCisJaWYgKCFwb3J0LT5ndWVzdF9jb25uZWN0ZWQpCisJCWRpc2NhcmRfcG9ydF9kYXRhKHBvcnQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+aW5idWZfbG9jaywgZmxhZ3MpOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT53YWl0cXVldWUpOworCisJaWYgKGlzX2NvbnNvbGVfcG9ydChwb3J0KSAmJiBodmNfcG9sbChwb3J0LT5jb25zLmh2YykpCiAJCWh2Y19raWNrKCk7CiB9CiAKLS8qRDozNzAgT25jZSB3ZSdyZSBmdXJ0aGVyIGluIGJvb3QsIHdlIGdldCBwcm9iZWQgbGlrZSBhbnkgb3RoZXIgdmlydGlvIGRldmljZS4KLSAqIEF0IHRoaXMgc3RhZ2Ugd2Ugc2V0IHVwIHRoZSBvdXRwdXQgdmlydHF1ZXVlLgotICoKLSAqIFRvIHNldCB1cCBhbmQgbWFuYWdlIG91ciB2aXJ0dWFsIGNvbnNvbGUsIHdlIGNhbGwgaHZjX2FsbG9jKCkuICBTaW5jZSB3ZQotICogbmV2ZXIgcmVtb3ZlIHRoZSBjb25zb2xlIGRldmljZSB3ZSBuZXZlciBuZWVkIHRoaXMgcG9pbnRlciBhZ2Fpbi4KLSAqCi0gKiBGaW5hbGx5IHdlIHB1dCBvdXIgaW5wdXQgYnVmZmVyIGluIHRoZSBpbnB1dCBxdWV1ZSwgcmVhZHkgdG8gcmVjZWl2ZS4gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHZpcnRjb25zX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBjb250cm9sX2ludHIoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCiB7Ci0JdnFfY2FsbGJhY2tfdCAqY2FsbGJhY2tzW10gPSB7IGh2Y19oYW5kbGVfaW5wdXQsIE5VTEx9OwotCWNvbnN0IGNoYXIgKm5hbWVzW10gPSB7ICJpbnB1dCIsICJvdXRwdXQiIH07Ci0Jc3RydWN0IHZpcnRxdWV1ZSAqdnFzWzJdOworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisKKwlwb3J0ZGV2ID0gdnEtPnZkZXYtPnByaXY7CisJc2NoZWR1bGVfd29yaygmcG9ydGRldi0+Y29udHJvbF93b3JrKTsKK30KKworc3RhdGljIHZvaWQgY29uZmlnX2ludHIoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IHBvcnRzX2RldmljZSAqcG9ydGRldjsKKworCXBvcnRkZXYgPSB2ZGV2LT5wcml2OworCWlmICh1c2VfbXVsdGlwb3J0KHBvcnRkZXYpKSB7CisJCS8qIEhhbmRsZSBwb3J0IGhvdC1hZGQgKi8KKwkJc2NoZWR1bGVfd29yaygmcG9ydGRldi0+Y29uZmlnX3dvcmspOworCX0KKwkvKgorCSAqIFdlJ2xsIHVzZSB0aGlzIHdheSBvZiByZXNpemluZyBvbmx5IGZvciBsZWdhY3kgc3VwcG9ydC4KKwkgKiBGb3IgbmV3ZXIgdXNlcnNwYWNlIChWSVJUSU9fQ09OU09MRV9GX01VTFRQT1JUKyksIHVzZQorCSAqIGNvbnRyb2wgbWVzc2FnZXMgdG8gaW5kaWNhdGUgY29uc29sZSBzaXplIGNoYW5nZXMgc28gdGhhdAorCSAqIGl0IGNhbiBiZSBkb25lIHBlci1wb3J0CisJICovCisJcmVzaXplX2NvbnNvbGUoZmluZF9wb3J0X2J5X2lkKHBvcnRkZXYsIDApKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBmaWxsX3F1ZXVlKHN0cnVjdCB2aXJ0cXVldWUgKnZxLCBzcGlubG9ja190ICpsb2NrKQoreworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCXVuc2lnbmVkIGludCByZXQ7CiAJaW50IGVycjsKIAotCXZkZXYgPSBkZXY7CisJcmV0ID0gMDsKKwlkbyB7CisJCWJ1ZiA9IGFsbG9jX2J1ZihQQUdFX1NJWkUpOworCQlpZiAoIWJ1ZikKKwkJCWJyZWFrOwogCi0JLyogVGhpcyBpcyB0aGUgc2NyYXRjaCBwYWdlIHdlIHVzZSB0byByZWNlaXZlIGNvbnNvbGUgaW5wdXQgKi8KLQlpbmJ1ZiA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWluYnVmKSB7CisJCXNwaW5fbG9ja19pcnEobG9jayk7CisJCWVyciA9IGFkZF9pbmJ1Zih2cSwgYnVmKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXNwaW5fdW5sb2NrX2lycShsb2NrKTsKKwkJCWZyZWVfYnVmKGJ1Zik7CisJCQlicmVhazsKKwkJfQorCQlyZXQrKzsKKwkJc3Bpbl91bmxvY2tfaXJxKGxvY2spOworCX0gd2hpbGUgKGVyciA+IDApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZGRfcG9ydChzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2LCB1MzIgaWQpCit7CisJY2hhciBkZWJ1Z2ZzX25hbWVbMTZdOworCXN0cnVjdCBwb3J0ICpwb3J0OworCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOworCWRldl90IGRldnQ7CisJaW50IGVycjsKKworCXBvcnQgPSBrbWFsbG9jKHNpemVvZigqcG9ydCksIEdGUF9LRVJORUwpOworCWlmICghcG9ydCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CiAJfQogCi0JLyogRmluZCB0aGUgcXVldWVzLiAqLwotCS8qIEZJWE1FOiBUaGlzIGlzIHdoeSB3ZSB3YW50IHRvIHdlYW4gb2ZmIGh2Yzogd2UgZG8gbm90aGluZwotCSAqIHdoZW4gaW5wdXQgY29tZXMgaW4uICovCi0JZXJyID0gdmRldi0+Y29uZmlnLT5maW5kX3Zxcyh2ZGV2LCAyLCB2cXMsIGNhbGxiYWNrcywgbmFtZXMpOwotCWlmIChlcnIpCi0JCWdvdG8gZnJlZTsKKwlwb3J0LT5wb3J0ZGV2ID0gcG9ydGRldjsKKwlwb3J0LT5pZCA9IGlkOwogCi0JaW5fdnEgPSB2cXNbMF07Ci0Jb3V0X3ZxID0gdnFzWzFdOworCXBvcnQtPm5hbWUgPSBOVUxMOworCXBvcnQtPmluYnVmID0gTlVMTDsKKwlwb3J0LT5jb25zLmh2YyA9IE5VTEw7CiAKLQkvKiBTdGFydCB1c2luZyB0aGUgbmV3IGNvbnNvbGUgb3V0cHV0LiAqLwotCXZpcnRpb19jb25zLmdldF9jaGFycyA9IGdldF9jaGFyczsKLQl2aXJ0aW9fY29ucy5wdXRfY2hhcnMgPSBwdXRfY2hhcnM7Ci0JdmlydGlvX2NvbnMubm90aWZpZXJfYWRkID0gbm90aWZpZXJfYWRkX3ZpbzsKLQl2aXJ0aW9fY29ucy5ub3RpZmllcl9kZWwgPSBub3RpZmllcl9kZWxfdmlvOwotCXZpcnRpb19jb25zLm5vdGlmaWVyX2hhbmd1cCA9IG5vdGlmaWVyX2RlbF92aW87CisJcG9ydC0+aG9zdF9jb25uZWN0ZWQgPSBwb3J0LT5ndWVzdF9jb25uZWN0ZWQgPSBmYWxzZTsKIAotCS8qIFRoZSBmaXJzdCBhcmd1bWVudCBvZiBodmNfYWxsb2MoKSBpcyB0aGUgdmlydHVhbCBjb25zb2xlIG51bWJlciwgc28KLQkgKiB3ZSB1c2UgemVyby4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHBhcmFtZXRlciBmb3IgdGhlCi0JICogbm90aWZpY2F0aW9uIG1lY2hhbmlzbSAobGlrZSBpcnEgbnVtYmVyKS4gV2UgY3VycmVudGx5IGxlYXZlIHRoaXMKLQkgKiBhcyB6ZXJvLCB2aXJ0cXVldWVzIGhhdmUgaW1wbGljaXQgbm90aWZpY2F0aW9ucy4KLQkgKgotCSAqIFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhICJzdHJ1Y3QgaHZfb3BzIiBjb250YWluaW5nIHRoZSBwdXRfY2hhcnMoKQotCSAqIGdldF9jaGFycygpLCBub3RpZmllcl9hZGQoKSBhbmQgbm90aWZpZXJfZGVsKCkgcG9pbnRlcnMuCi0JICogVGhlIGZpbmFsIGFyZ3VtZW50IGlzIHRoZSBvdXRwdXQgYnVmZmVyIHNpemU6IHdlIGNhbiBkbyBhbnkgc2l6ZSwKLQkgKiBzbyB3ZSBwdXQgUEFHRV9TSVpFIGhlcmUuICovCi0JaHZjID0gaHZjX2FsbG9jKDAsIDAsICZ2aXJ0aW9fY29ucywgUEFHRV9TSVpFKTsKLQlpZiAoSVNfRVJSKGh2YykpIHsKLQkJZXJyID0gUFRSX0VSUihodmMpOwotCQlnb3RvIGZyZWVfdnFzOworCXBvcnQtPmluX3ZxID0gcG9ydGRldi0+aW5fdnFzW3BvcnQtPmlkXTsKKwlwb3J0LT5vdXRfdnEgPSBwb3J0ZGV2LT5vdXRfdnFzW3BvcnQtPmlkXTsKKworCWNkZXZfaW5pdCgmcG9ydC0+Y2RldiwgJnBvcnRfZm9wcyk7CisKKwlkZXZ0ID0gTUtERVYocG9ydGRldi0+Y2hyX21ham9yLCBpZCk7CisJZXJyID0gY2Rldl9hZGQoJnBvcnQtPmNkZXYsIGRldnQsIDEpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJnBvcnQtPnBvcnRkZXYtPnZkZXYtPmRldiwKKwkJCSJFcnJvciAlZCBhZGRpbmcgY2RldiBmb3IgcG9ydCAldVxuIiwgZXJyLCBpZCk7CisJCWdvdG8gZnJlZV9wb3J0OworCX0KKwlwb3J0LT5kZXYgPSBkZXZpY2VfY3JlYXRlKHBkcnZkYXRhLmNsYXNzLCAmcG9ydC0+cG9ydGRldi0+dmRldi0+ZGV2LAorCQkJCSAgZGV2dCwgcG9ydCwgInZwb3J0JXVwJXUiLAorCQkJCSAgcG9ydC0+cG9ydGRldi0+ZHJ2X2luZGV4LCBpZCk7CisJaWYgKElTX0VSUihwb3J0LT5kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIocG9ydC0+ZGV2KTsKKwkJZGV2X2VycigmcG9ydC0+cG9ydGRldi0+dmRldi0+ZGV2LAorCQkJIkVycm9yICVkIGNyZWF0aW5nIGRldmljZSBmb3IgcG9ydCAldVxuIiwKKwkJCWVyciwgaWQpOworCQlnb3RvIGZyZWVfY2RldjsKIAl9CiAKLQkvKiBSZWdpc3RlciB0aGUgaW5wdXQgYnVmZmVyIHRoZSBmaXJzdCB0aW1lLiAqLwotCWFkZF9pbmJ1ZigpOworCXNwaW5fbG9ja19pbml0KCZwb3J0LT5pbmJ1Zl9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT53YWl0cXVldWUpOworCisJLyogRmlsbCB0aGUgaW5fdnEgd2l0aCBidWZmZXJzIHNvIHRoZSBob3N0IGNhbiBzZW5kIHVzIGRhdGEuICovCisJZXJyID0gZmlsbF9xdWV1ZShwb3J0LT5pbl92cSwgJnBvcnQtPmluYnVmX2xvY2spOworCWlmICghZXJyKSB7CisJCWRldl9lcnIocG9ydC0+ZGV2LCAiRXJyb3IgYWxsb2NhdGluZyBpbmJ1ZnNcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfZGV2aWNlOworCX0KKworCS8qCisJICogSWYgd2UncmUgbm90IHVzaW5nIG11bHRpcG9ydCBzdXBwb3J0LCB0aGlzIGhhcyB0byBiZSBhIGNvbnNvbGUgcG9ydAorCSAqLworCWlmICghdXNlX211bHRpcG9ydChwb3J0LT5wb3J0ZGV2KSkgeworCQllcnIgPSBpbml0X3BvcnRfY29uc29sZShwb3J0KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZnJlZV9pbmJ1ZnM7CisJfQorCisJc3Bpbl9sb2NrX2lycSgmcG9ydGRldi0+cG9ydHNfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmcG9ydC0+bGlzdCwgJnBvcnQtPnBvcnRkZXYtPnBvcnRzKTsKKwlzcGluX3VubG9ja19pcnEoJnBvcnRkZXYtPnBvcnRzX2xvY2spOworCisJLyoKKwkgKiBUZWxsIHRoZSBIb3N0IHdlJ3JlIHNldCBzbyB0aGF0IGl0IGNhbiBzZW5kIHVzIHZhcmlvdXMKKwkgKiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHRoaXMgcG9ydCAoZWcsIHBvcnQgbmFtZSwKKwkgKiBjYWNoaW5nLCB3aGV0aGVyIHRoaXMgaXMgYSBjb25zb2xlIHBvcnQsIGV0Yy4pCisJICovCisJc2VuZF9jb250cm9sX21zZyhwb3J0LCBWSVJUSU9fQ09OU09MRV9QT1JUX1JFQURZLCAxKTsKKworCWlmIChwZHJ2ZGF0YS5kZWJ1Z2ZzX2RpcikgeworCQkvKgorCQkgKiBGaW5hbGx5LCBjcmVhdGUgdGhlIGRlYnVnZnMgZmlsZSB0aGF0IHdlIGNhbiB1c2UgdG8KKwkJICogaW5zcGVjdCBhIHBvcnQncyBzdGF0ZSBhdCBhbnkgdGltZQorCQkgKi8KKwkJc3ByaW50ZihkZWJ1Z2ZzX25hbWUsICJ2cG9ydCV1cCV1IiwKKwkJCXBvcnQtPnBvcnRkZXYtPmRydl9pbmRleCwgaWQpOworCQlwb3J0LT5kZWJ1Z2ZzX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGRlYnVnZnNfbmFtZSwgMDQ0NCwKKwkJCQkJCQkgcGRydmRhdGEuZGVidWdmc19kaXIsCisJCQkJCQkJIHBvcnQsCisJCQkJCQkJICZwb3J0X2RlYnVnZnNfb3BzKTsKKwl9CisJcmV0dXJuIDA7CisKK2ZyZWVfaW5idWZzOgorCXdoaWxlICgoYnVmID0gcG9ydC0+aW5fdnEtPnZxX29wcy0+ZGV0YWNoX3VudXNlZF9idWYocG9ydC0+aW5fdnEpKSkKKwkJZnJlZV9idWYoYnVmKTsKK2ZyZWVfZGV2aWNlOgorCWRldmljZV9kZXN0cm95KHBkcnZkYXRhLmNsYXNzLCBwb3J0LT5kZXYtPmRldnQpOworZnJlZV9jZGV2OgorCWNkZXZfZGVsKCZwb3J0LT5jZGV2KTsKK2ZyZWVfcG9ydDoKKwlrZnJlZShwb3J0KTsKK2ZhaWw6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFRoZSB3b3JraGFuZGxlciBmb3IgY29uZmlnLXNwYWNlIHVwZGF0ZXMuCisgKgorICogVGhpcyBpcyBjYWxsZWQgd2hlbiBwb3J0cyBhcmUgaG90LWFkZGVkLgorICovCitzdGF0aWMgdm9pZCBjb25maWdfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29uZmlnIHZpcnRjb25jb25mOworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisJc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXY7CisJaW50IGVycjsKKworCXBvcnRkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBvcnRzX2RldmljZSwgY29uZmlnX3dvcmspOworCisJdmRldiA9IHBvcnRkZXYtPnZkZXY7CisJdmRldi0+Y29uZmlnLT5nZXQodmRldiwKKwkJCSAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywgbnJfcG9ydHMpLAorCQkJICAmdmlydGNvbmNvbmYubnJfcG9ydHMsCisJCQkgIHNpemVvZih2aXJ0Y29uY29uZi5ucl9wb3J0cykpOworCisJaWYgKHBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cyA9PSB2aXJ0Y29uY29uZi5ucl9wb3J0cykgeworCQkvKgorCQkgKiBQb3J0IDAgZ290IGhvdC1hZGRlZC4gIFNpbmNlIHdlIGFscmVhZHkgZGlkIGFsbCB0aGUKKwkJICogb3RoZXIgaW5pdGlhbGlzYXRpb24gZm9yIGl0LCBqdXN0IHRlbGwgdGhlIEhvc3QKKwkJICogdGhhdCB0aGUgcG9ydCBpcyByZWFkeSBpZiB3ZSBmaW5kIHRoZSBwb3J0LiAgSW4KKwkJICogY2FzZSB0aGUgcG9ydCB3YXMgaG90LXJlbW92ZWQgZWFybGllciwgd2UgY2FsbAorCQkgKiBhZGRfcG9ydCB0byBhZGQgdGhlIHBvcnQuCisJCSAqLworCQlzdHJ1Y3QgcG9ydCAqcG9ydDsKKworCQlwb3J0ID0gZmluZF9wb3J0X2J5X2lkKHBvcnRkZXYsIDApOworCQlpZiAoIXBvcnQpCisJCQlhZGRfcG9ydChwb3J0ZGV2LCAwKTsKKwkJZWxzZQorCQkJc2VuZF9jb250cm9sX21zZyhwb3J0LCBWSVJUSU9fQ09OU09MRV9QT1JUX1JFQURZLCAxKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodmlydGNvbmNvbmYubnJfcG9ydHMgPiBwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzKSB7CisJCWRldl93YXJuKCZ2ZGV2LT5kZXYsCisJCQkgIk1vcmUgcG9ydHMgc3BlY2lmaWVkICgldSkgdGhhbiBhbGxvd2VkICgldSkiLAorCQkJIHBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cyArIDEsCisJCQkgcG9ydGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cyk7CisJCXJldHVybjsKKwl9CisJaWYgKHZpcnRjb25jb25mLm5yX3BvcnRzIDwgcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzKQorCQlyZXR1cm47CisKKwkvKiBIb3QtYWRkIHBvcnRzICovCisJd2hpbGUgKHZpcnRjb25jb25mLm5yX3BvcnRzIC0gcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzKSB7CisJCWVyciA9IGFkZF9wb3J0KHBvcnRkZXYsIHBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cyk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwkJcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzKys7CisJfQorfQorCitzdGF0aWMgaW50IGluaXRfdnFzKHN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXYpCit7CisJdnFfY2FsbGJhY2tfdCAqKmlvX2NhbGxiYWNrczsKKwljaGFyICoqaW9fbmFtZXM7CisJc3RydWN0IHZpcnRxdWV1ZSAqKnZxczsKKwl1MzIgaSwgaiwgbnJfcG9ydHMsIG5yX3F1ZXVlczsKKwlpbnQgZXJyOworCisJbnJfcG9ydHMgPSBwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzOworCW5yX3F1ZXVlcyA9IHVzZV9tdWx0aXBvcnQocG9ydGRldikgPyAobnJfcG9ydHMgKyAxKSAqIDIgOiAyOworCisJdnFzID0ga21hbGxvYyhucl9xdWV1ZXMgKiBzaXplb2Yoc3RydWN0IHZpcnRxdWV1ZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2cXMpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwlpb19jYWxsYmFja3MgPSBrbWFsbG9jKG5yX3F1ZXVlcyAqIHNpemVvZih2cV9jYWxsYmFja190ICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlvX2NhbGxiYWNrcykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfdnFzOworCX0KKwlpb19uYW1lcyA9IGttYWxsb2MobnJfcXVldWVzICogc2l6ZW9mKGNoYXIgKiksIEdGUF9LRVJORUwpOworCWlmICghaW9fbmFtZXMpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmcmVlX2NhbGxiYWNrczsKKwl9CisJcG9ydGRldi0+aW5fdnFzID0ga21hbGxvYyhucl9wb3J0cyAqIHNpemVvZihzdHJ1Y3QgdmlydHF1ZXVlICopLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3J0ZGV2LT5pbl92cXMpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmcmVlX25hbWVzOworCX0KKwlwb3J0ZGV2LT5vdXRfdnFzID0ga21hbGxvYyhucl9wb3J0cyAqIHNpemVvZihzdHJ1Y3QgdmlydHF1ZXVlICopLAorCQkJCSAgIEdGUF9LRVJORUwpOworCWlmICghcG9ydGRldi0+b3V0X3ZxcykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfaW52cXM7CisJfQorCisJLyoKKwkgKiBGb3IgYmFja3dhcmQgY29tcGF0IChuZXdlciBob3N0IGJ1dCBvbGRlciBndWVzdCksIHRoZSBob3N0CisJICogc3Bhd25zIGEgY29uc29sZSBwb3J0IGZpcnN0IGFuZCBhbHNvIGluaXRzIHRoZSB2cXMgZm9yIHBvcnQKKwkgKiAwIGJlZm9yZSBvdGhlcnMuCisJICovCisJaiA9IDA7CisJaW9fY2FsbGJhY2tzW2pdID0gaW5faW50cjsKKwlpb19jYWxsYmFja3NbaiArIDFdID0gTlVMTDsKKwlpb19uYW1lc1tqXSA9ICJpbnB1dCI7CisJaW9fbmFtZXNbaiArIDFdID0gIm91dHB1dCI7CisJaiArPSAyOworCisJaWYgKHVzZV9tdWx0aXBvcnQocG9ydGRldikpIHsKKwkJaW9fY2FsbGJhY2tzW2pdID0gY29udHJvbF9pbnRyOworCQlpb19jYWxsYmFja3NbaiArIDFdID0gTlVMTDsKKwkJaW9fbmFtZXNbal0gPSAiY29udHJvbC1pIjsKKwkJaW9fbmFtZXNbaiArIDFdID0gImNvbnRyb2wtbyI7CisKKwkJZm9yIChpID0gMTsgaSA8IG5yX3BvcnRzOyBpKyspIHsKKwkJCWogKz0gMjsKKwkJCWlvX2NhbGxiYWNrc1tqXSA9IGluX2ludHI7CisJCQlpb19jYWxsYmFja3NbaiArIDFdID0gTlVMTDsKKwkJCWlvX25hbWVzW2pdID0gImlucHV0IjsKKwkJCWlvX25hbWVzW2ogKyAxXSA9ICJvdXRwdXQiOworCQl9CisJfQorCS8qIEZpbmQgdGhlIHF1ZXVlcy4gKi8KKwllcnIgPSBwb3J0ZGV2LT52ZGV2LT5jb25maWctPmZpbmRfdnFzKHBvcnRkZXYtPnZkZXYsIG5yX3F1ZXVlcywgdnFzLAorCQkJCQkgICAgICBpb19jYWxsYmFja3MsCisJCQkJCSAgICAgIChjb25zdCBjaGFyICoqKWlvX25hbWVzKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfb3V0dnFzOworCisJaiA9IDA7CisJcG9ydGRldi0+aW5fdnFzWzBdID0gdnFzWzBdOworCXBvcnRkZXYtPm91dF92cXNbMF0gPSB2cXNbMV07CisJaiArPSAyOworCWlmICh1c2VfbXVsdGlwb3J0KHBvcnRkZXYpKSB7CisJCXBvcnRkZXYtPmNfaXZxID0gdnFzW2pdOworCQlwb3J0ZGV2LT5jX292cSA9IHZxc1tqICsgMV07CisKKwkJZm9yIChpID0gMTsgaSA8IG5yX3BvcnRzOyBpKyspIHsKKwkJCWogKz0gMjsKKwkJCXBvcnRkZXYtPmluX3Zxc1tpXSA9IHZxc1tqXTsKKwkJCXBvcnRkZXYtPm91dF92cXNbaV0gPSB2cXNbaiArIDFdOworCQl9CisJfQorCWtmcmVlKGlvX2NhbGxiYWNrcyk7CisJa2ZyZWUoaW9fbmFtZXMpOworCWtmcmVlKHZxcyk7CisKKwlyZXR1cm4gMDsKKworZnJlZV9uYW1lczoKKwlrZnJlZShpb19uYW1lcyk7CitmcmVlX2NhbGxiYWNrczoKKwlrZnJlZShpb19jYWxsYmFja3MpOworZnJlZV9vdXR2cXM6CisJa2ZyZWUocG9ydGRldi0+b3V0X3Zxcyk7CitmcmVlX2ludnFzOgorCWtmcmVlKHBvcnRkZXYtPmluX3Zxcyk7CitmcmVlX3ZxczoKKwlrZnJlZSh2cXMpOworZmFpbDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwb3J0ZGV2X2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCit9OworCisvKgorICogT25jZSB3ZSdyZSBmdXJ0aGVyIGluIGJvb3QsIHdlIGdldCBwcm9iZWQgbGlrZSBhbnkgb3RoZXIgdmlydGlvCisgKiBkZXZpY2UuCisgKgorICogSWYgdGhlIGhvc3QgYWxzbyBzdXBwb3J0cyBtdWx0aXBsZSBjb25zb2xlIHBvcnRzLCB3ZSBjaGVjayB0aGUKKyAqIGNvbmZpZyBzcGFjZSB0byBzZWUgaG93IG1hbnkgcG9ydHMgdGhlIGhvc3QgaGFzIHNwYXduZWQuICBXZQorICogaW5pdGlhbGl6ZSBlYWNoIHBvcnQgZm91bmQuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHZpcnRjb25zX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQoreworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisJdTMyIGk7CisJaW50IGVycjsKKwlib29sIG11bHRpcG9ydDsKKworCXBvcnRkZXYgPSBrbWFsbG9jKHNpemVvZigqcG9ydGRldiksIEdGUF9LRVJORUwpOworCWlmICghcG9ydGRldikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogQXR0YWNoIHRoaXMgcG9ydGRldiB0byB0aGlzIHZpcnRpb19kZXZpY2UsIGFuZCB2aWNlLXZlcnNhLiAqLworCXBvcnRkZXYtPnZkZXYgPSB2ZGV2OworCXZkZXYtPnByaXYgPSBwb3J0ZGV2OworCisJc3Bpbl9sb2NrX2lycSgmcGRydmRhdGFfbG9jayk7CisJcG9ydGRldi0+ZHJ2X2luZGV4ID0gcGRydmRhdGEuaW5kZXgrKzsKKwlzcGluX3VubG9ja19pcnEoJnBkcnZkYXRhX2xvY2spOworCisJcG9ydGRldi0+Y2hyX21ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsICJ2aXJ0aW8tcG9ydHNkZXYiLAorCQkJCQkgICAgICZwb3J0ZGV2X2ZvcHMpOworCWlmIChwb3J0ZGV2LT5jaHJfbWFqb3IgPCAwKSB7CisJCWRldl9lcnIoJnZkZXYtPmRldiwKKwkJCSJFcnJvciAlZCByZWdpc3RlcmluZyBjaHJkZXYgZm9yIGRldmljZSAldVxuIiwKKwkJCXBvcnRkZXYtPmNocl9tYWpvciwgcG9ydGRldi0+ZHJ2X2luZGV4KTsKKwkJZXJyID0gcG9ydGRldi0+Y2hyX21ham9yOworCQlnb3RvIGZyZWU7CisJfQorCisJbXVsdGlwb3J0ID0gZmFsc2U7CisJcG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzID0gMTsKKwlwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzID0gMTsKKwlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19DT05TT0xFX0ZfTVVMVElQT1JUKSkgeworCQltdWx0aXBvcnQgPSB0cnVlOworCQl2ZGV2LT5mZWF0dXJlc1swXSB8PSAxIDw8IFZJUlRJT19DT05TT0xFX0ZfTVVMVElQT1JUOworCisJCXZkZXYtPmNvbmZpZy0+Z2V0KHZkZXYsIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb25maWcsCisJCQkJCQkgbnJfcG9ydHMpLAorCQkJCSAgJnBvcnRkZXYtPmNvbmZpZy5ucl9wb3J0cywKKwkJCQkgIHNpemVvZihwb3J0ZGV2LT5jb25maWcubnJfcG9ydHMpKTsKKwkJdmRldi0+Y29uZmlnLT5nZXQodmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZywKKwkJCQkJCSBtYXhfbnJfcG9ydHMpLAorCQkJCSAgJnBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9ydHMsCisJCQkJICBzaXplb2YocG9ydGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cykpOworCQlpZiAocG9ydGRldi0+Y29uZmlnLm5yX3BvcnRzID4gcG9ydGRldi0+Y29uZmlnLm1heF9ucl9wb3J0cykgeworCQkJZGV2X3dhcm4oJnZkZXYtPmRldiwKKwkJCQkgIk1vcmUgcG9ydHMgKCV1KSBzcGVjaWZpZWQgdGhhbiBhbGxvd2VkICgldSkuIFdpbGwgaW5pdCAldSBwb3J0cy4iLAorCQkJCSBwb3J0ZGV2LT5jb25maWcubnJfcG9ydHMsCisJCQkJIHBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9ydHMsCisJCQkJIHBvcnRkZXYtPmNvbmZpZy5tYXhfbnJfcG9ydHMpOworCisJCQlwb3J0ZGV2LT5jb25maWcubnJfcG9ydHMgPSBwb3J0ZGV2LT5jb25maWcubWF4X25yX3BvcnRzOworCQl9CisJfQorCisJLyogTGV0IHRoZSBIb3N0IGtub3cgd2Ugc3VwcG9ydCBtdWx0aXBsZSBwb3J0cy4qLworCXZkZXYtPmNvbmZpZy0+ZmluYWxpemVfZmVhdHVyZXModmRldik7CisKKwllcnIgPSBpbml0X3Zxcyhwb3J0ZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZ2ZGV2LT5kZXYsICJFcnJvciAlZCBpbml0aWFsaXppbmcgdnFzXG4iLCBlcnIpOworCQlnb3RvIGZyZWVfY2hyZGV2OworCX0KKworCXNwaW5fbG9ja19pbml0KCZwb3J0ZGV2LT5wb3J0c19sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcG9ydGRldi0+cG9ydHMpOworCisJaWYgKG11bHRpcG9ydCkgeworCQlzcGluX2xvY2tfaW5pdCgmcG9ydGRldi0+Y3ZxX2xvY2spOworCQlJTklUX1dPUksoJnBvcnRkZXYtPmNvbnRyb2xfd29yaywgJmNvbnRyb2xfd29ya19oYW5kbGVyKTsKKwkJSU5JVF9XT1JLKCZwb3J0ZGV2LT5jb25maWdfd29yaywgJmNvbmZpZ193b3JrX2hhbmRsZXIpOworCisJCWVyciA9IGZpbGxfcXVldWUocG9ydGRldi0+Y19pdnEsICZwb3J0ZGV2LT5jdnFfbG9jayk7CisJCWlmICghZXJyKSB7CisJCQlkZXZfZXJyKCZ2ZGV2LT5kZXYsCisJCQkJIkVycm9yIGFsbG9jYXRpbmcgYnVmZmVycyBmb3IgY29udHJvbCBxdWV1ZVxuIik7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBmcmVlX3ZxczsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBwb3J0ZGV2LT5jb25maWcubnJfcG9ydHM7IGkrKykKKwkJYWRkX3BvcnQocG9ydGRldiwgaSk7CisKKwkvKiBTdGFydCB1c2luZyB0aGUgbmV3IGNvbnNvbGUgb3V0cHV0LiAqLworCWVhcmx5X3B1dF9jaGFycyA9IE5VTEw7CiAJcmV0dXJuIDA7CiAKIGZyZWVfdnFzOgogCXZkZXYtPmNvbmZpZy0+ZGVsX3Zxcyh2ZGV2KTsKKwlrZnJlZShwb3J0ZGV2LT5pbl92cXMpOworCWtmcmVlKHBvcnRkZXYtPm91dF92cXMpOworZnJlZV9jaHJkZXY6CisJdW5yZWdpc3Rlcl9jaHJkZXYocG9ydGRldi0+Y2hyX21ham9yLCAidmlydGlvLXBvcnRzZGV2Iik7CiBmcmVlOgotCWtmcmVlKGluYnVmKTsKKwlrZnJlZShwb3J0ZGV2KTsKIGZhaWw6CiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgdmlydGNvbnNfcmVtb3ZlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQoreworCXN0cnVjdCBwb3J0c19kZXZpY2UgKnBvcnRkZXY7CisJc3RydWN0IHBvcnQgKnBvcnQsICpwb3J0MjsKKwlzdHJ1Y3QgcG9ydF9idWZmZXIgKmJ1ZjsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJcG9ydGRldiA9IHZkZXYtPnByaXY7CisKKwljYW5jZWxfd29ya19zeW5jKCZwb3J0ZGV2LT5jb250cm9sX3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJnBvcnRkZXYtPmNvbmZpZ193b3JrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3J0LCBwb3J0MiwgJnBvcnRkZXYtPnBvcnRzLCBsaXN0KQorCQlyZW1vdmVfcG9ydChwb3J0KTsKKworCXVucmVnaXN0ZXJfY2hyZGV2KHBvcnRkZXYtPmNocl9tYWpvciwgInZpcnRpby1wb3J0c2RldiIpOworCisJd2hpbGUgKChidWYgPSBwb3J0ZGV2LT5jX2l2cS0+dnFfb3BzLT5nZXRfYnVmKHBvcnRkZXYtPmNfaXZxLCAmbGVuKSkpCisJCWZyZWVfYnVmKGJ1Zik7CisKKwl3aGlsZSAoKGJ1ZiA9IHBvcnRkZXYtPmNfaXZxLT52cV9vcHMtPmRldGFjaF91bnVzZWRfYnVmKHBvcnRkZXYtPmNfaXZxKSkpCisJCWZyZWVfYnVmKGJ1Zik7CisKKwl2ZGV2LT5jb25maWctPmRlbF92cXModmRldik7CisJa2ZyZWUocG9ydGRldi0+aW5fdnFzKTsKKwlrZnJlZShwb3J0ZGV2LT5vdXRfdnFzKTsKKworCWtmcmVlKHBvcnRkZXYpOworfQorCiBzdGF0aWMgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFZJUlRJT19JRF9DT05TT0xFLCBWSVJUSU9fREVWX0FOWV9JRCB9LAogCXsgMCB9LApAQCAtMjUzLDYgKzE1MTEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzW10gPSB7CiAJVklSVElPX0NPTlNPTEVfRl9TSVpFLAorCVZJUlRJT19DT05TT0xFX0ZfTVVMVElQT1JULAogfTsKIAogc3RhdGljIHN0cnVjdCB2aXJ0aW9fZHJpdmVyIHZpcnRpb19jb25zb2xlID0gewpAQCAtMjYyLDE0ICsxNTIxLDQxIEBACiAJLmRyaXZlci5vd25lciA9CVRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9CWlkX3RhYmxlLAogCS5wcm9iZSA9CXZpcnRjb25zX3Byb2JlLAotCS5jb25maWdfY2hhbmdlZCA9IHZpcnRjb25zX2FwcGx5X2NvbmZpZywKKwkucmVtb3ZlID0JdmlydGNvbnNfcmVtb3ZlLAorCS5jb25maWdfY2hhbmdlZCA9IGNvbmZpZ19pbnRyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQogeworCWludCBlcnI7CisKKwlwZHJ2ZGF0YS5jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInZpcnRpby1wb3J0cyIpOworCWlmIChJU19FUlIocGRydmRhdGEuY2xhc3MpKSB7CisJCWVyciA9IFBUUl9FUlIocGRydmRhdGEuY2xhc3MpOworCQlwcl9lcnIoIkVycm9yICVkIGNyZWF0aW5nIHZpcnRpby1wb3J0cyBjbGFzc1xuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwZHJ2ZGF0YS5kZWJ1Z2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigidmlydGlvLXBvcnRzIiwgTlVMTCk7CisJaWYgKCFwZHJ2ZGF0YS5kZWJ1Z2ZzX2RpcikgeworCQlwcl93YXJuaW5nKCJFcnJvciAlbGQgY3JlYXRpbmcgZGVidWdmcyBkaXIgZm9yIHZpcnRpby1wb3J0c1xuIiwKKwkJCSAgIFBUUl9FUlIocGRydmRhdGEuZGVidWdmc19kaXIpKTsKKwl9CisJSU5JVF9MSVNUX0hFQUQoJnBkcnZkYXRhLmNvbnNvbGVzKTsKKwogCXJldHVybiByZWdpc3Rlcl92aXJ0aW9fZHJpdmVyKCZ2aXJ0aW9fY29uc29sZSk7CiB9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCit7CisJdW5yZWdpc3Rlcl92aXJ0aW9fZHJpdmVyKCZ2aXJ0aW9fY29uc29sZSk7CisKKwljbGFzc19kZXN0cm95KHBkcnZkYXRhLmNsYXNzKTsKKwlpZiAocGRydmRhdGEuZGVidWdmc19kaXIpCisJCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShwZHJ2ZGF0YS5kZWJ1Z2ZzX2Rpcik7Cit9CiBtb2R1bGVfaW5pdChpbml0KTsKK21vZHVsZV9leGl0KGZpbmkpOwogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHZpcnRpbywgaWRfdGFibGUpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJWaXJ0aW8gY29uc29sZSBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92bWVfc2NjLmMgYi9kcml2ZXJzL2NoYXIvdm1lX3NjYy5jCmluZGV4IDk5NGUxYTUuLjhiMjQ3MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92bWVfc2NjLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZtZV9zY2MuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAgKiB2bWVfc2NjX2luaXQoKSBhbmQgc3VwcG9ydCBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBzY2NfaW5pdF9kcml2ZXJzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzY2NfaW5pdF9kcml2ZXJzKHZvaWQpCiB7CiAJaW50IGVycm9yOwogCkBAIC0xNzIsNyArMTcyLDcgQEAKIC8qIHBvcnRzW10gYXJyYXkgaXMgaW5kZXhlZCBieSBsaW5lIG5vIChpLmUuIFswXSBmb3IgdHR5UzAsIFsxXSBmb3IgdHR5UzEpLgogICovCiAKLXN0YXRpYyB2b2lkIHNjY19pbml0X3BvcnRzdHJ1Y3RzKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgc2NjX2luaXRfcG9ydHN0cnVjdHModm9pZCkKIHsKIAlzdHJ1Y3Qgc2NjX3BvcnQgKnBvcnQ7CiAJaW50IGk7CkBAIC0xOTUsNyArMTk1LDcgQEAKIAogCiAjaWZkZWYgQ09ORklHX01WTUUxNDdfU0NDCi1zdGF0aWMgaW50IG12bWUxNDdfc2NjX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG12bWUxNDdfc2NjX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3Qgc2NjX3BvcnQgKnBvcnQ7CiAJaW50IGVycm9yOwpAQCAtMjk4LDcgKzI5OCw3IEBACiAKIAogI2lmZGVmIENPTkZJR19NVk1FMTYyX1NDQwotc3RhdGljIGludCBtdm1lMTYyX3NjY19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBtdm1lMTYyX3NjY19pbml0KHZvaWQpCiB7CiAJc3RydWN0IHNjY19wb3J0ICpwb3J0OwogCWludCBlcnJvcjsKQEAgLTQwNCw3ICs0MDQsNyBAQAogCiAKICNpZmRlZiBDT05GSUdfQlZNRTYwMDBfU0NDCi1zdGF0aWMgaW50IGJ2bWU2MDAwX3NjY19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBidm1lNjAwMF9zY2NfaW5pdCh2b2lkKQogewogCXN0cnVjdCBzY2NfcG9ydCAqcG9ydDsKIAlpbnQgZXJyb3I7CkBAIC01MDMsNyArNTAzLDcgQEAKICNlbmRpZgogCiAKLXN0YXRpYyBpbnQgdm1lX3NjY19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB2bWVfc2NjX2luaXQodm9pZCkKIHsKIAlpbnQgcmVzID0gLUVOT0RFVjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMKaW5kZXggNmIzZTBjMi4uNTc4NTk1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jCkBAIC00MCw3ICs0MCw2IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBmbGFnc19zdXNwZW5kOwogCXVuc2lnbmVkIGxvbmcgbWF0Y2hfdmFsdWU7CiAJdW5zaWduZWQgbG9uZyBuZXh0X21hdGNoX3ZhbHVlOwogCXVuc2lnbmVkIGxvbmcgbWF4X21hdGNoX3ZhbHVlOwpAQCAtNDMyLDYgKzQzMSwxMSBAQAogCXNoX2NtdF9zdG9wKGNzX3RvX3NoX2NtdChjcyksIEZMQUdfQ0xPQ0tTT1VSQ0UpOwogfQogCitzdGF0aWMgdm9pZCBzaF9jbXRfY2xvY2tzb3VyY2VfcmVzdW1lKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCit7CisJc2hfY210X3N0YXJ0KGNzX3RvX3NoX2NtdChjcyksIEZMQUdfQ0xPQ0tTT1VSQ0UpOworfQorCiBzdGF0aWMgaW50IHNoX2NtdF9yZWdpc3Rlcl9jbG9ja3NvdXJjZShzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsCiAJCQkJICAgICAgIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgcmF0aW5nKQogewpAQCAtNDQyLDYgKzQ0Niw4IEBACiAJY3MtPnJlYWQgPSBzaF9jbXRfY2xvY2tzb3VyY2VfcmVhZDsKIAljcy0+ZW5hYmxlID0gc2hfY210X2Nsb2Nrc291cmNlX2VuYWJsZTsKIAljcy0+ZGlzYWJsZSA9IHNoX2NtdF9jbG9ja3NvdXJjZV9kaXNhYmxlOworCWNzLT5zdXNwZW5kID0gc2hfY210X2Nsb2Nrc291cmNlX2Rpc2FibGU7CisJY3MtPnJlc3VtZSA9IHNoX2NtdF9jbG9ja3NvdXJjZV9yZXN1bWU7CiAJY3MtPm1hc2sgPSBDTE9DS1NPVVJDRV9NQVNLKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDgpOwogCWNzLT5mbGFncyA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTOwogCXByX2luZm8oInNoX2NtdDogJXMgdXNlZCBhcyBjbG9jayBzb3VyY2VcbiIsIGNzLT5uYW1lKTsKQEAgLTYwMywxOCArNjA5LDEzIEBACiAJcC0+aXJxYWN0aW9uLmhhbmRsZXIgPSBzaF9jbXRfaW50ZXJydXB0OwogCXAtPmlycWFjdGlvbi5kZXZfaWQgPSBwOwogCXAtPmlycWFjdGlvbi5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMOwotCXJldCA9IHNldHVwX2lycShpcnEsICZwLT5pcnFhY3Rpb24pOwotCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJzaF9jbXQ6IGZhaWxlZCB0byByZXF1ZXN0IGlycSAlZFxuIiwgaXJxKTsKLQkJZ290byBlcnIxOwotCX0KIAogCS8qIGdldCBob2xkIG9mIGNsb2NrICovCiAJcC0+Y2xrID0gY2xrX2dldCgmcC0+cGRldi0+ZGV2LCBjZmctPmNsayk7CiAJaWYgKElTX0VSUihwLT5jbGspKSB7CiAJCXByX2Vycigic2hfY210OiBjYW5ub3QgZ2V0IGNsb2NrIFwiJXNcIlxuIiwgY2ZnLT5jbGspOwogCQlyZXQgPSBQVFJfRVJSKHAtPmNsayk7Ci0JCWdvdG8gZXJyMjsKKwkJZ290byBlcnIxOwogCX0KIAogCWlmIChyZXNvdXJjZV9zaXplKHJlcykgPT0gNikgewpAQCAtNjI3LDE0ICs2MjgsMjUgQEAKIAkJcC0+Y2xlYXJfYml0cyA9IH4weGMwMDA7CiAJfQogCi0JcmV0dXJuIHNoX2NtdF9yZWdpc3RlcihwLCBjZmctPm5hbWUsCi0JCQkgICAgICAgY2ZnLT5jbG9ja2V2ZW50X3JhdGluZywKLQkJCSAgICAgICBjZmctPmNsb2Nrc291cmNlX3JhdGluZyk7Ci0gZXJyMjoKLQlyZW1vdmVfaXJxKGlycSwgJnAtPmlycWFjdGlvbik7Ci0gZXJyMToKKwlyZXQgPSBzaF9jbXRfcmVnaXN0ZXIocCwgY2ZnLT5uYW1lLAorCQkJICAgICAgY2ZnLT5jbG9ja2V2ZW50X3JhdGluZywKKwkJCSAgICAgIGNmZy0+Y2xvY2tzb3VyY2VfcmF0aW5nKTsKKwlpZiAocmV0KSB7CisJCXByX2Vycigic2hfY210OiByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBlcnIxOworCX0KKworCXJldCA9IHNldHVwX2lycShpcnEsICZwLT5pcnFhY3Rpb24pOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJzaF9jbXQ6IGZhaWxlZCB0byByZXF1ZXN0IGlycSAlZFxuIiwgaXJxKTsKKwkJZ290byBlcnIxOworCX0KKworCXJldHVybiAwOworCitlcnIxOgogCWlvdW5tYXAocC0+bWFwYmFzZSk7Ci0gZXJyMDoKK2VycjA6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjY4LDM4ICs2ODAsMTEgQEAKIAlyZXR1cm4gLUVCVVNZOyAvKiBjYW5ub3QgdW5yZWdpc3RlciBjbG9ja2V2ZW50IGFuZCBjbG9ja3NvdXJjZSAqLwogfQogCi1zdGF0aWMgaW50IHNoX2NtdF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHNoX2NtdF9wcml2ICpwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0KLQkvKiBzYXZlIGZsYWcgc3RhdGUgYW5kIHN0b3AgQ01UIGNoYW5uZWwgKi8KLQlwLT5mbGFnc19zdXNwZW5kID0gcC0+ZmxhZ3M7Ci0Jc2hfY210X3N0b3AocCwgcC0+ZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNoX2NtdF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3Qgc2hfY210X3ByaXYgKnAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQotCS8qIHN0YXJ0IENNVCBjaGFubmVsIGZyb20gc2F2ZWQgc3RhdGUgKi8KLQlzaF9jbXRfc3RhcnQocCwgcC0+ZmxhZ3Nfc3VzcGVuZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzaF9jbXRfZGV2X3BtX29wcyA9IHsKLQkuc3VzcGVuZCA9IHNoX2NtdF9zdXNwZW5kLAotCS5yZXN1bWUgPSBzaF9jbXRfcmVzdW1lLAotfTsKLQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2hfY210X2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNoX2NtdF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNoX2NtdF9yZW1vdmUpLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJzaF9jbXQiLAotCQkucG0JPSAmc2hfY210X2Rldl9wbV9vcHMsCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9tdHUyLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX210dTIuYwppbmRleCA5NzNlNzE0Li40YzhhNzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX210dTIuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX210dTIuYwpAQCAtMjIxLDE1ICsyMjEsMTUgQEAKIAljZWQtPmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOwogCWNlZC0+c2V0X21vZGUgPSBzaF9tdHUyX2Nsb2NrX2V2ZW50X21vZGU7CiAKKwlwcl9pbmZvKCJzaF9tdHUyOiAlcyB1c2VkIGZvciBjbG9jayBldmVudHNcbiIsIGNlZC0+bmFtZSk7CisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNlZCk7CisKIAlyZXQgPSBzZXR1cF9pcnEocC0+aXJxYWN0aW9uLmlycSwgJnAtPmlycWFjdGlvbik7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoInNoX210dTI6IGZhaWxlZCB0byByZXF1ZXN0IGlycSAlZFxuIiwKIAkJICAgICAgIHAtPmlycWFjdGlvbi5pcnEpOwogCQlyZXR1cm47CiAJfQotCi0JcHJfaW5mbygic2hfbXR1MjogJXMgdXNlZCBmb3IgY2xvY2sgZXZlbnRzXG4iLCBjZWQtPm5hbWUpOwotCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjZWQpOwogfQogCiBzdGF0aWMgaW50IHNoX210dTJfcmVnaXN0ZXIoc3RydWN0IHNoX210dTJfcHJpdiAqcCwgY2hhciAqbmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfdG11LmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX3RtdS5jCmluZGV4IDkzYzIzMjIuLjk2MWY1YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfdG11LmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF90bXUuYwpAQCAtMzIzLDE1ICszMjMsMTUgQEAKIAljZWQtPnNldF9uZXh0X2V2ZW50ID0gc2hfdG11X2Nsb2NrX2V2ZW50X25leHQ7CiAJY2VkLT5zZXRfbW9kZSA9IHNoX3RtdV9jbG9ja19ldmVudF9tb2RlOwogCisJcHJfaW5mbygic2hfdG11OiAlcyB1c2VkIGZvciBjbG9jayBldmVudHNcbiIsIGNlZC0+bmFtZSk7CisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNlZCk7CisKIAlyZXQgPSBzZXR1cF9pcnEocC0+aXJxYWN0aW9uLmlycSwgJnAtPmlycWFjdGlvbik7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoInNoX3RtdTogZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkXG4iLAogCQkgICAgICAgcC0+aXJxYWN0aW9uLmlycSk7CiAJCXJldHVybjsKIAl9Ci0KLQlwcl9pbmZvKCJzaF90bXU6ICVzIHVzZWQgZm9yIGNsb2NrIGV2ZW50c1xuIiwgY2VkLT5uYW1lKTsKLQljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2VkKTsKIH0KIAogc3RhdGljIGludCBzaF90bXVfcmVnaXN0ZXIoc3RydWN0IHNoX3RtdV9wcml2ICpwLCBjaGFyICpuYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5jIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfY29yZS5jCmluZGV4IDQ2ZTg5OWEuLjFjMzg0OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuYworKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmMKQEAgLTEyNzQsNyArMTI3NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGNyeXB0bzR4eF9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgY3J5cHRvNHh4X21hdGNoW10gPSB7CiAJeyAuY29tcGF0aWJsZSAgICAgID0gImFtY2MscHBjNHh4LWNyeXB0byIsfSwKIAl7IH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vZ2VvZGUtYWVzLmMgYi9kcml2ZXJzL2NyeXB0by9nZW9kZS1hZXMuYwppbmRleCA0ODAxMTYyLi5jN2E1YTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9nZW9kZS1hZXMuYworKysgYi9kcml2ZXJzL2NyeXB0by9nZW9kZS1hZXMuYwpAQCAtMTM1LDEzICsxMzUsMTMgQEAKIAkvKgogCSAqIFRoZSByZXF1ZXN0ZWQga2V5IHNpemUgaXMgbm90IHN1cHBvcnRlZCBieSBIVywgZG8gYSBmYWxsYmFjawogCSAqLwotCW9wLT5mYWxsYmFjay5ibGstPmJhc2UuY3J0X2ZsYWdzICY9IH5DUllQVE9fVEZNX1JFUV9NQVNLOwotCW9wLT5mYWxsYmFjay5ibGstPmJhc2UuY3J0X2ZsYWdzIHw9ICh0Zm0tPmNydF9mbGFncyAmIENSWVBUT19URk1fUkVRX01BU0spOworCW9wLT5mYWxsYmFjay5jaXAtPmJhc2UuY3J0X2ZsYWdzICY9IH5DUllQVE9fVEZNX1JFUV9NQVNLOworCW9wLT5mYWxsYmFjay5jaXAtPmJhc2UuY3J0X2ZsYWdzIHw9ICh0Zm0tPmNydF9mbGFncyAmIENSWVBUT19URk1fUkVRX01BU0spOwogCiAJcmV0ID0gY3J5cHRvX2NpcGhlcl9zZXRrZXkob3AtPmZhbGxiYWNrLmNpcCwga2V5LCBsZW4pOwogCWlmIChyZXQpIHsKIAkJdGZtLT5jcnRfZmxhZ3MgJj0gfkNSWVBUT19URk1fUkVTX01BU0s7Ci0JCXRmbS0+Y3J0X2ZsYWdzIHw9IChvcC0+ZmFsbGJhY2suYmxrLT5iYXNlLmNydF9mbGFncyAmIENSWVBUT19URk1fUkVTX01BU0spOworCQl0Zm0tPmNydF9mbGFncyB8PSAob3AtPmZhbGxiYWNrLmNpcC0+YmFzZS5jcnRfZmxhZ3MgJiBDUllQVE9fVEZNX1JFU19NQVNLKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI2Myw3ICsyNjMsNyBAQAogCiAJaWYgKElTX0VSUihvcC0+ZmFsbGJhY2suY2lwKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGFsbG9jYXRpbmcgZmFsbGJhY2sgYWxnbyAlc1xuIiwgbmFtZSk7Ci0JCXJldHVybiBQVFJfRVJSKG9wLT5mYWxsYmFjay5ibGspOworCQlyZXR1cm4gUFRSX0VSUihvcC0+ZmFsbGJhY2suY2lwKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL3RhbGl0b3MuYyBiL2RyaXZlcnMvY3J5cHRvL3RhbGl0b3MuYwppbmRleCBjNDdmZmU4Li5mZDUyOWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by90YWxpdG9zLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vdGFsaXRvcy5jCkBAIC0xOTU4LDcgKzE5NTgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRhbGl0b3NfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRhbGl0b3NfbWF0Y2hbXSA9IHsKIAl7CiAJCS5jb21wYXRpYmxlID0gImZzbCxzZWMyLjAiLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zaGRtYS5jIGIvZHJpdmVycy9kbWEvc2hkbWEuYwppbmRleCBkMTBjYzg5Li5iNzVjZThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zaGRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL3NoZG1hLmMKQEAgLTQ4LDIzICs0OCwyMCBAQAogICovCiAjZGVmaW5lIFJTX0RFRkFVTFQgIChSU19EVUFMKQogCisvKiBBIGJpdG1hc2sgd2l0aCBiaXRzIGVub3VnaCBmb3IgZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNoX2RtYWVfc2xhdmVfdXNlZFtCSVRTX1RPX0xPTkdTKFNIRE1BX1NMQVZFX05VTUJFUildOworCiBzdGF0aWMgdm9pZCBzaF9kbWFlX2NoYW5fbGRfY2xlYW51cChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCBib29sIGFsbCk7CiAKICNkZWZpbmUgU0hfRE1BQ19DSEFOX0JBU0UoaWQpIChkbWFfYmFzZV9hZGRyW2lkXSkKIHN0YXRpYyB2b2lkIHNoX2RtYWVfd3JpdGVsKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2RjLCB1MzIgZGF0YSwgdTMyIHJlZykKIHsKLQljdHJsX291dGwoZGF0YSwgKFNIX0RNQUNfQ0hBTl9CQVNFKHNoX2RjLT5pZCkgKyByZWcpKTsKKwljdHJsX291dGwoZGF0YSwgU0hfRE1BQ19DSEFOX0JBU0Uoc2hfZGMtPmlkKSArIHJlZyk7CiB9CiAKIHN0YXRpYyB1MzIgc2hfZG1hZV9yZWFkbChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9kYywgdTMyIHJlZykKIHsKLQlyZXR1cm4gY3RybF9pbmwoKFNIX0RNQUNfQ0hBTl9CQVNFKHNoX2RjLT5pZCkgKyByZWcpKTsKLX0KLQotc3RhdGljIHZvaWQgZG1hZV9pbml0KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCi17Ci0JdTMyIGNoY3IgPSBSU19ERUZBVUxUOyAvKiBkZWZhdWx0IGlzIERVQUwgbW9kZSAqLwotCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGNoY3IsIENIQ1IpOworCXJldHVybiBjdHJsX2lubChTSF9ETUFDX0NIQU5fQkFTRShzaF9kYy0+aWQpICsgcmVnKTsKIH0KIAogLyoKQEAgLTk1LDI3ICs5MiwzMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRtYWVfaXNfYnVzeShzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuKQorc3RhdGljIGJvb2wgZG1hZV9pc19idXN5KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCiB7CiAJdTMyIGNoY3IgPSBzaF9kbWFlX3JlYWRsKHNoX2NoYW4sIENIQ1IpOwotCWlmIChjaGNyICYgQ0hDUl9ERSkgewotCQlpZiAoIShjaGNyICYgQ0hDUl9URSkpCi0JCQlyZXR1cm4gLUVCVVNZOyAvKiB3b3JraW5nICovCi0JfQotCXJldHVybiAwOyAvKiB3YWl0aW5nICovCisKKwlpZiAoKGNoY3IgJiAoQ0hDUl9ERSB8IENIQ1JfVEUpKSA9PSBDSENSX0RFKQorCQlyZXR1cm4gdHJ1ZTsgLyogd29ya2luZyAqLworCisJcmV0dXJuIGZhbHNlOyAvKiB3YWl0aW5nICovCiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNhbGNfeG1pdF9zaGlmdChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuKQorc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdID0gVFNfU0hJRlQ7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjYWxjX3htaXRfc2hpZnQodTMyIGNoY3IpCiB7Ci0JdTMyIGNoY3IgPSBzaF9kbWFlX3JlYWRsKHNoX2NoYW4sIENIQ1IpOwotCXJldHVybiB0c19zaGlmdFsoY2hjciAmIENIQ1JfVFNfTUFTSykgPj4gQ0hDUl9UU19TSElGVF07CisJaW50IGNudCA9ICgoY2hjciAmIENIQ1JfVFNfTE9XX01BU0spID4+IENIQ1JfVFNfTE9XX1NISUZUKSB8CisJCSgoY2hjciAmIENIQ1JfVFNfSElHSF9NQVNLKSA+PiBDSENSX1RTX0hJR0hfU0hJRlQpOworCisJcmV0dXJuIHRzX3NoaWZ0W2NudF07CiB9CiAKIHN0YXRpYyB2b2lkIGRtYWVfc2V0X3JlZyhzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCBzdHJ1Y3Qgc2hfZG1hZV9yZWdzICpodykKIHsKIAlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCBody0+c2FyLCBTQVIpOwogCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGh3LT5kYXIsIERBUik7Ci0Jc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgaHctPnRjciA+PiBjYWxjX3htaXRfc2hpZnQoc2hfY2hhbiksIFRDUik7CisJc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgaHctPnRjciA+PiBzaF9jaGFuLT54bWl0X3NoaWZ0LCBUQ1IpOwogfQogCiBzdGF0aWMgdm9pZCBkbWFlX3N0YXJ0KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCkBAIC0xMjMsNyArMTIzLDcgQEAKIAl1MzIgY2hjciA9IHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgQ0hDUik7CiAKIAljaGNyIHw9IENIQ1JfREUgfCBDSENSX0lFOwotCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGNoY3IsIENIQ1IpOworCXNoX2RtYWVfd3JpdGVsKHNoX2NoYW4sIGNoY3IgJiB+Q0hDUl9URSwgQ0hDUik7CiB9CiAKIHN0YXRpYyB2b2lkIGRtYWVfaGFsdChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuKQpAQCAtMTM0LDU1ICsxMzQsNTAgQEAKIAlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCBjaGNyLCBDSENSKTsKIH0KIAorc3RhdGljIHZvaWQgZG1hZV9pbml0KHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCit7CisJdTMyIGNoY3IgPSBSU19ERUZBVUxUOyAvKiBkZWZhdWx0IGlzIERVQUwgbW9kZSAqLworCXNoX2NoYW4tPnhtaXRfc2hpZnQgPSBjYWxjX3htaXRfc2hpZnQoY2hjcik7CisJc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgY2hjciwgQ0hDUik7Cit9CisKIHN0YXRpYyBpbnQgZG1hZV9zZXRfY2hjcihzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCB1MzIgdmFsKQogewotCWludCByZXQgPSBkbWFlX2lzX2J1c3koc2hfY2hhbik7CiAJLyogV2hlbiBETUEgd2FzIHdvcmtpbmcsIGNhbiBub3Qgc2V0IGRhdGEgdG8gQ0hDUiAqLwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJaWYgKGRtYWVfaXNfYnVzeShzaF9jaGFuKSkKKwkJcmV0dXJuIC1FQlVTWTsKIAorCXNoX2NoYW4tPnhtaXRfc2hpZnQgPSBjYWxjX3htaXRfc2hpZnQodmFsKTsKIAlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCB2YWwsIENIQ1IpOworCiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgRE1BUlMxX0FERFIJMHgwNAotI2RlZmluZSBETUFSUzJfQUREUgkweDA4Ci0jZGVmaW5lIERNQVJTX1NISUZUIDgKLSNkZWZpbmUgRE1BUlNfQ0hBTl9NU0sgMHgwMQorI2RlZmluZSBETUFSU19TSElGVAk4CisjZGVmaW5lIERNQVJTX0NIQU5fTVNLCTB4MDEKIHN0YXRpYyBpbnQgZG1hZV9zZXRfZG1hcnMoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgdTE2IHZhbCkKIHsKIAl1MzIgYWRkcjsKIAlpbnQgc2hpZnQgPSAwOwotCWludCByZXQgPSBkbWFlX2lzX2J1c3koc2hfY2hhbik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKworCWlmIChkbWFlX2lzX2J1c3koc2hfY2hhbikpCisJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoc2hfY2hhbi0+aWQgJiBETUFSU19DSEFOX01TSykKIAkJc2hpZnQgPSBETUFSU19TSElGVDsKIAotCXN3aXRjaCAoc2hfY2hhbi0+aWQpIHsKLQkvKiBETUFSUzAgKi8KLQljYXNlIDA6Ci0JY2FzZSAxOgotCQlhZGRyID0gU0hfRE1BUlNfQkFTRTsKLQkJYnJlYWs7Ci0JLyogRE1BUlMxICovCi0JY2FzZSAyOgotCWNhc2UgMzoKLQkJYWRkciA9IChTSF9ETUFSU19CQVNFICsgRE1BUlMxX0FERFIpOwotCQlicmVhazsKLQkvKiBETUFSUzIgKi8KLQljYXNlIDQ6Ci0JY2FzZSA1OgotCQlhZGRyID0gKFNIX0RNQVJTX0JBU0UgKyBETUFSUzJfQUREUik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6CisJaWYgKHNoX2NoYW4tPmlkIDwgNikKKwkJLyogRE1BMFJTMCAtIERNQTBSUzIgKi8KKwkJYWRkciA9IFNIX0RNQVJTX0JBU0UwICsgKHNoX2NoYW4tPmlkIC8gMikgKiA0OworI2lmZGVmIFNIX0RNQVJTX0JBU0UxCisJZWxzZSBpZiAoc2hfY2hhbi0+aWQgPCAxMikKKwkJLyogRE1BMVJTMCAtIERNQTFSUzIgKi8KKwkJYWRkciA9IFNIX0RNQVJTX0JBU0UxICsgKChzaF9jaGFuLT5pZCAtIDYpIC8gMikgKiA0OworI2VuZGlmCisJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKLQljdHJsX291dHcoKHZhbCA8PCBzaGlmdCkgfAotCQkoY3RybF9pbncoYWRkcikgJiAoc2hpZnQgPyAweEZGMDAgOiAweDAwRkYpKSwKLQkJYWRkcik7CisJY3RybF9vdXR3KCh2YWwgPDwgc2hpZnQpIHwgKGN0cmxfaW53KGFkZHIpICYgKDB4RkYwMCA+PiBzaGlmdCkpLCBhZGRyKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjUwLDEwICsyNDUsNTMgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHN0cnVjdCBzaF9kbWFlX3NsYXZlX2NvbmZpZyAqc2hfZG1hZV9maW5kX3NsYXZlKAorCXN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIGVudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkIHNsYXZlX2lkKQoreworCXN0cnVjdCBkbWFfZGV2aWNlICpkbWFfZGV2ID0gc2hfY2hhbi0+Y29tbW9uLmRldmljZTsKKwlzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2ID0gY29udGFpbmVyX29mKGRtYV9kZXYsCisJCQkJCXN0cnVjdCBzaF9kbWFlX2RldmljZSwgY29tbW9uKTsKKwlzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSAqcGRhdGEgPSAmc2hkZXYtPnBkYXRhOworCWludCBpOworCisJaWYgKCh1bnNpZ25lZClzbGF2ZV9pZCA+PSBTSERNQV9TTEFWRV9OVU1CRVIpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5jb25maWdfbnVtOyBpKyspCisJCWlmIChwZGF0YS0+Y29uZmlnW2ldLnNsYXZlX2lkID09IHNsYXZlX2lkKQorCQkJcmV0dXJuIHBkYXRhLT5jb25maWcgKyBpOworCisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgc2hfZG1hZV9hbGxvY19jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCiB7CiAJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiA9IHRvX3NoX2NoYW4oY2hhbik7CiAJc3RydWN0IHNoX2Rlc2MgKmRlc2M7CisJc3RydWN0IHNoX2RtYWVfc2xhdmUgKnBhcmFtID0gY2hhbi0+cHJpdmF0ZTsKKworCS8qCisJICogVGhpcyByZWxpZXMgb24gdGhlIGd1YXJhbnRlZSBmcm9tIGRtYWVuZ2luZSB0aGF0IGFsbG9jX2NoYW5fcmVzb3VyY2VzCisJICogbmV2ZXIgcnVucyBjb25jdXJyZW50bHkgd2l0aCBpdHNlbGYgb3IgZnJlZV9jaGFuX3Jlc291cmNlcy4KKwkgKi8KKwlpZiAocGFyYW0pIHsKKwkJc3RydWN0IHNoX2RtYWVfc2xhdmVfY29uZmlnICpjZmc7CisKKwkJY2ZnID0gc2hfZG1hZV9maW5kX3NsYXZlKHNoX2NoYW4sIHBhcmFtLT5zbGF2ZV9pZCk7CisJCWlmICghY2ZnKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQocGFyYW0tPnNsYXZlX2lkLCBzaF9kbWFlX3NsYXZlX3VzZWQpKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQlwYXJhbS0+Y29uZmlnID0gY2ZnOworCisJCWRtYWVfc2V0X2RtYXJzKHNoX2NoYW4sIGNmZy0+bWlkX3JpZCk7CisJCWRtYWVfc2V0X2NoY3Ioc2hfY2hhbiwgY2ZnLT5jaGNyKTsKKwl9IGVsc2UgeworCQlpZiAoKHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgQ0hDUikgJiAweDcwMCkgIT0gMHg0MDApCisJCQlkbWFlX3NldF9jaGNyKHNoX2NoYW4sIFJTX0RFRkFVTFQpOworCX0KIAogCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAl3aGlsZSAoc2hfY2hhbi0+ZGVzY3NfYWxsb2NhdGVkIDwgTlJfREVTQ1NfUEVSX0NIQU5ORUwpIHsKQEAgLTI4NiwxMCArMzI0LDE4IEBACiAJc3RydWN0IHNoX2Rlc2MgKmRlc2MsICpfZGVzYzsKIAlMSVNUX0hFQUQobGlzdCk7CiAKKwlkbWFlX2hhbHQoc2hfY2hhbik7CisKIAkvKiBQcmVwYXJlZCBhbmQgbm90IHN1Ym1pdHRlZCBkZXNjcmlwdG9ycyBjYW4gc3RpbGwgYmUgb24gdGhlIHF1ZXVlICovCiAJaWYgKCFsaXN0X2VtcHR5KCZzaF9jaGFuLT5sZF9xdWV1ZSkpCiAJCXNoX2RtYWVfY2hhbl9sZF9jbGVhbnVwKHNoX2NoYW4sIHRydWUpOwogCisJaWYgKGNoYW4tPnByaXZhdGUpIHsKKwkJLyogVGhlIGNhbGxlciBpcyBob2xkaW5nIGRtYV9saXN0X211dGV4ICovCisJCXN0cnVjdCBzaF9kbWFlX3NsYXZlICpwYXJhbSA9IGNoYW4tPnByaXZhdGU7CisJCWNsZWFyX2JpdChwYXJhbS0+c2xhdmVfaWQsIHNoX2RtYWVfc2xhdmVfdXNlZCk7CisJfQorCiAJc3Bpbl9sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOwogCiAJbGlzdF9zcGxpY2VfaW5pdCgmc2hfY2hhbi0+bGRfZnJlZSwgJmxpc3QpOwpAQCAtMzAxLDIzICszNDcsOTcgQEAKIAkJa2ZyZWUoZGVzYyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnNoX2RtYWVfcHJlcF9tZW1jcHkoCi0Jc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGRtYV9kZXN0LCBkbWFfYWRkcl90IGRtYV9zcmMsCi0Jc2l6ZV90IGxlbiwgdW5zaWduZWQgbG9uZyBmbGFncykKKy8qKgorICogc2hfZG1hZV9hZGRfZGVzYyAtIGdldCwgc2V0IHVwIGFuZCByZXR1cm4gb25lIHRyYW5zZmVyIGRlc2NyaXB0b3IKKyAqIEBzaF9jaGFuOglETUEgY2hhbm5lbAorICogQGZsYWdzOglETUEgdHJhbnNmZXIgZmxhZ3MKKyAqIEBkZXN0OglkZXN0aW5hdGlvbiBETUEgYWRkcmVzcywgaW5jcmVtZW50ZWQgd2hlbiBkaXJlY3Rpb24gZXF1YWxzCisgKgkJRE1BX0ZST01fREVWSUNFIG9yIERNQV9CSURJUkVDVElPTkFMCisgKiBAc3JjOglzb3VyY2UgRE1BIGFkZHJlc3MsIGluY3JlbWVudGVkIHdoZW4gZGlyZWN0aW9uIGVxdWFscworICoJCURNQV9UT19ERVZJQ0Ugb3IgRE1BX0JJRElSRUNUSU9OQUwKKyAqIEBsZW46CURNQSB0cmFuc2ZlciBsZW5ndGgKKyAqIEBmaXJzdDoJaWYgTlVMTCwgc2V0IHRvIHRoZSBjdXJyZW50IGRlc2NyaXB0b3IgYW5kIGNvb2tpZSBzZXQgdG8gLUVCVVNZCisgKiBAZGlyZWN0aW9uOgluZWVkZWQgZm9yIHNsYXZlIERNQSB0byBkZWNpZGUgd2hpY2ggYWRkcmVzcyB0byBrZWVwIGNvbnN0YW50LAorICoJCWVxdWFscyBETUFfQklESVJFQ1RJT05BTCBmb3IgTUVNQ1BZCisgKiBSZXR1cm5zIDAgb3IgYW4gZXJyb3IKKyAqIExvY2tzOiBjYWxsZWQgd2l0aCBkZXNjX2xvY2sgaGVsZAorICovCitzdGF0aWMgc3RydWN0IHNoX2Rlc2MgKnNoX2RtYWVfYWRkX2Rlc2Moc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBkbWFfYWRkcl90ICpkZXN0LCBkbWFfYWRkcl90ICpzcmMsIHNpemVfdCAqbGVuLAorCXN0cnVjdCBzaF9kZXNjICoqZmlyc3QsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLQlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuOwotCXN0cnVjdCBzaF9kZXNjICpmaXJzdCA9IE5VTEwsICpwcmV2ID0gTlVMTCwgKm5ldzsKKwlzdHJ1Y3Qgc2hfZGVzYyAqbmV3OwogCXNpemVfdCBjb3B5X3NpemU7CisKKwlpZiAoISpsZW4pCisJCXJldHVybiBOVUxMOworCisJLyogQWxsb2NhdGUgdGhlIGxpbmsgZGVzY3JpcHRvciBmcm9tIHRoZSBmcmVlIGxpc3QgKi8KKwluZXcgPSBzaF9kbWFlX2dldF9kZXNjKHNoX2NoYW4pOworCWlmICghbmV3KSB7CisJCWRldl9lcnIoc2hfY2hhbi0+ZGV2LCAiTm8gZnJlZSBsaW5rIGRlc2NyaXB0b3IgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJY29weV9zaXplID0gbWluKCpsZW4sIChzaXplX3QpU0hfRE1BX1RDUl9NQVggKyAxKTsKKworCW5ldy0+aHcuc2FyID0gKnNyYzsKKwluZXctPmh3LmRhciA9ICpkZXN0OworCW5ldy0+aHcudGNyID0gY29weV9zaXplOworCisJaWYgKCEqZmlyc3QpIHsKKwkJLyogRmlyc3QgZGVzYyAqLworCQluZXctPmFzeW5jX3R4LmNvb2tpZSA9IC1FQlVTWTsKKwkJKmZpcnN0ID0gbmV3OworCX0gZWxzZSB7CisJCS8qIE90aGVyIGRlc2MgLSBpbnZpc2libGUgdG8gdGhlIHVzZXIgKi8KKwkJbmV3LT5hc3luY190eC5jb29raWUgPSAtRUlOVkFMOworCX0KKworCWRldl9kYmcoc2hfY2hhbi0+ZGV2LAorCQkiY2hhaW5pbmcgKCV1LyV1KUAleCAtPiAleCB3aXRoICVwLCBjb29raWUgJWQsIHNoaWZ0ICVkXG4iLAorCQljb3B5X3NpemUsICpsZW4sICpzcmMsICpkZXN0LCAmbmV3LT5hc3luY190eCwKKwkJbmV3LT5hc3luY190eC5jb29raWUsIHNoX2NoYW4tPnhtaXRfc2hpZnQpOworCisJbmV3LT5tYXJrID0gREVTQ19QUkVQQVJFRDsKKwluZXctPmFzeW5jX3R4LmZsYWdzID0gZmxhZ3M7CisJbmV3LT5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CisKKwkqbGVuIC09IGNvcHlfc2l6ZTsKKwlpZiAoZGlyZWN0aW9uID09IERNQV9CSURJUkVDVElPTkFMIHx8IGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQorCQkqc3JjICs9IGNvcHlfc2l6ZTsKKwlpZiAoZGlyZWN0aW9uID09IERNQV9CSURJUkVDVElPTkFMIHx8IGRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCisJCSpkZXN0ICs9IGNvcHlfc2l6ZTsKKworCXJldHVybiBuZXc7Cit9CisKKy8qCisgKiBzaF9kbWFlX3ByZXBfc2cgLSBwcmVwYXJlIHRyYW5zZmVyIGRlc2NyaXB0b3JzIGZyb20gYW4gU0cgbGlzdAorICoKKyAqIENvbW1vbiByb3V0aW5lIGZvciBwdWJsaWMgKE1FTUNQWSkgYW5kIHNsYXZlIERNQS4gVGhlIE1FTUNQWSBjYXNlIGlzIGFsc28KKyAqIGNvbnZlcnRlZCB0byBzY2F0dGVyLWdhdGhlciB0byBndWFyYW50ZWUgY29uc2lzdGVudCBsb2NraW5nIGFuZCBhIGNvcnJlY3QKKyAqIGxpc3QgbWFuaXB1bGF0aW9uLiBGb3Igc2xhdmUgRE1BIGRpcmVjdGlvbiBjYXJyaWVzIHRoZSB1c3VhbCBtZWFuaW5nLCBhbmQsCisgKiBsb2dpY2FsbHksIHRoZSBTRyBsaXN0IGlzIFJBTSBhbmQgdGhlIGFkZHIgdmFyaWFibGUgY29udGFpbnMgc2xhdmUgYWRkcmVzcywKKyAqIGUuZy4sIHRoZSBGSUZPIEkvTyByZWdpc3Rlci4gRm9yIE1FTUNQWSBkaXJlY3Rpb24gZXF1YWxzIERNQV9CSURJUkVDVElPTkFMCisgKiBhbmQgdGhlIFNHIGxpc3QgY29udGFpbnMgb25seSBvbmUgZWxlbWVudCBhbmQgcG9pbnRzIGF0IHRoZSBzb3VyY2UgYnVmZmVyLgorICovCitzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpzaF9kbWFlX3ByZXBfc2coc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgdW5zaWduZWQgaW50IHNnX2xlbiwgZG1hX2FkZHJfdCAqYWRkciwKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlzdHJ1Y3Qgc2hfZGVzYyAqZmlyc3QgPSBOVUxMLCAqbmV3ID0gTlVMTCAvKiBjb21waWxlci4uLiAqLzsKIAlMSVNUX0hFQUQodHhfbGlzdCk7Ci0JaW50IGNodW5rcyA9IChsZW4gKyBTSF9ETUFfVENSX01BWCkgLyAoU0hfRE1BX1RDUl9NQVggKyAxKTsKKwlpbnQgY2h1bmtzID0gMDsKKwlpbnQgaTsKIAotCWlmICghY2hhbikKKwlpZiAoIXNnX2xlbikKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoIWxlbikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlzaF9jaGFuID0gdG9fc2hfY2hhbihjaGFuKTsKKwlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBzZ19sZW4sIGkpCisJCWNodW5rcyArPSAoc2dfZG1hX2xlbihzZykgKyBTSF9ETUFfVENSX01BWCkgLworCQkJKFNIX0RNQV9UQ1JfTUFYICsgMSk7CiAKIAkvKiBIYXZlIHRvIGxvY2sgdGhlIHdob2xlIGxvb3AgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgcmVsZWFzZSAqLwogCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKQEAgLTMzMyw0OSArNDUzLDMyIEBACiAJICoJb25seSBkdXJpbmcgdGhpcyBmdW5jdGlvbiwgdGhlbiB0aGV5IGFyZSBpbW1lZGlhdGVseSBzcGxpY2VkCiAJICoJYmFjayBvbnRvIHRoZSBmcmVlIGxpc3QgaW4gZm9ybSBvZiBhIGNoYWluCiAJICovCi0JZG8gewotCQkvKiBBbGxvY2F0ZSB0aGUgbGluayBkZXNjcmlwdG9yIGZyb20gdGhlIGZyZWUgbGlzdCAqLwotCQluZXcgPSBzaF9kbWFlX2dldF9kZXNjKHNoX2NoYW4pOwotCQlpZiAoIW5ldykgewotCQkJZGV2X2VycihzaF9jaGFuLT5kZXYsCi0JCQkJIk5vIGZyZWUgbWVtb3J5IGZvciBsaW5rIGRlc2NyaXB0b3JcbiIpOwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXcsICZ0eF9saXN0LCBub2RlKQotCQkJCW5ldy0+bWFyayA9IERFU0NfSURMRTsKLQkJCWxpc3Rfc3BsaWNlKCZ0eF9saXN0LCAmc2hfY2hhbi0+bGRfZnJlZSk7Ci0JCQlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKLQkJCXJldHVybiBOVUxMOwotCQl9CisJZm9yX2VhY2hfc2coc2dsLCBzZywgc2dfbGVuLCBpKSB7CisJCWRtYV9hZGRyX3Qgc2dfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJc2l6ZV90IGxlbiA9IHNnX2RtYV9sZW4oc2cpOwogCi0JCWNvcHlfc2l6ZSA9IG1pbihsZW4sIChzaXplX3QpU0hfRE1BX1RDUl9NQVggKyAxKTsKKwkJaWYgKCFsZW4pCisJCQlnb3RvIGVycl9nZXRfZGVzYzsKIAotCQluZXctPmh3LnNhciA9IGRtYV9zcmM7Ci0JCW5ldy0+aHcuZGFyID0gZG1hX2Rlc3Q7Ci0JCW5ldy0+aHcudGNyID0gY29weV9zaXplOwotCQlpZiAoIWZpcnN0KSB7Ci0JCQkvKiBGaXJzdCBkZXNjICovCi0JCQluZXctPmFzeW5jX3R4LmNvb2tpZSA9IC1FQlVTWTsKLQkJCWZpcnN0ID0gbmV3OwotCQl9IGVsc2UgewotCQkJLyogT3RoZXIgZGVzYyAtIGludmlzaWJsZSB0byB0aGUgdXNlciAqLwotCQkJbmV3LT5hc3luY190eC5jb29raWUgPSAtRUlOVkFMOwotCQl9CisJCWRvIHsKKwkJCWRldl9kYmcoc2hfY2hhbi0+ZGV2LCAiQWRkIFNHICMlZEAlcFslZF0sIGRtYSAlbGx4XG4iLAorCQkJCWksIHNnLCBsZW4sICh1bnNpZ25lZCBsb25nIGxvbmcpc2dfYWRkcik7CiAKLQkJZGV2X2RiZyhzaF9jaGFuLT5kZXYsCi0JCQkiY2hhaW5pbmcgJXUgb2YgJXUgd2l0aCAlcCwgZHN0ICV4LCBjb29raWUgJWRcbiIsCi0JCQljb3B5X3NpemUsIGxlbiwgJm5ldy0+YXN5bmNfdHgsIGRtYV9kZXN0LAotCQkJbmV3LT5hc3luY190eC5jb29raWUpOworCQkJaWYgKGRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCisJCQkJbmV3ID0gc2hfZG1hZV9hZGRfZGVzYyhzaF9jaGFuLCBmbGFncywKKwkJCQkJCSZzZ19hZGRyLCBhZGRyLCAmbGVuLCAmZmlyc3QsCisJCQkJCQlkaXJlY3Rpb24pOworCQkJZWxzZQorCQkJCW5ldyA9IHNoX2RtYWVfYWRkX2Rlc2Moc2hfY2hhbiwgZmxhZ3MsCisJCQkJCQlhZGRyLCAmc2dfYWRkciwgJmxlbiwgJmZpcnN0LAorCQkJCQkJZGlyZWN0aW9uKTsKKwkJCWlmICghbmV3KQorCQkJCWdvdG8gZXJyX2dldF9kZXNjOwogCi0JCW5ldy0+bWFyayA9IERFU0NfUFJFUEFSRUQ7Ci0JCW5ldy0+YXN5bmNfdHguZmxhZ3MgPSBmbGFnczsKLQkJbmV3LT5jaHVua3MgPSBjaHVua3MtLTsKLQotCQlwcmV2ID0gbmV3OwotCQlsZW4gLT0gY29weV9zaXplOwotCQlkbWFfc3JjICs9IGNvcHlfc2l6ZTsKLQkJZG1hX2Rlc3QgKz0gY29weV9zaXplOwotCQkvKiBJbnNlcnQgdGhlIGxpbmsgZGVzY3JpcHRvciB0byB0aGUgTEQgcmluZyAqLwotCQlsaXN0X2FkZF90YWlsKCZuZXctPm5vZGUsICZ0eF9saXN0KTsKLQl9IHdoaWxlIChsZW4pOworCQkJbmV3LT5jaHVua3MgPSBjaHVua3MtLTsKKwkJCWxpc3RfYWRkX3RhaWwoJm5ldy0+bm9kZSwgJnR4X2xpc3QpOworCQl9IHdoaWxlIChsZW4pOworCX0KIAogCWlmIChuZXcgIT0gZmlyc3QpCiAJCW5ldy0+YXN5bmNfdHguY29va2llID0gLUVOT1NQQzsKQEAgLTM4Niw2ICs0ODksNzcgQEAKIAlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAogCXJldHVybiAmZmlyc3QtPmFzeW5jX3R4OworCitlcnJfZ2V0X2Rlc2M6CisJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXcsICZ0eF9saXN0LCBub2RlKQorCQluZXctPm1hcmsgPSBERVNDX0lETEU7CisJbGlzdF9zcGxpY2UoJnR4X2xpc3QsICZzaF9jaGFuLT5sZF9mcmVlKTsKKworCXNwaW5fdW5sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnNoX2RtYWVfcHJlcF9tZW1jcHkoCisJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGRtYV9kZXN0LCBkbWFfYWRkcl90IGRtYV9zcmMsCisJc2l6ZV90IGxlbiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKworCWlmICghY2hhbiB8fCAhbGVuKQorCQlyZXR1cm4gTlVMTDsKKworCWNoYW4tPnByaXZhdGUgPSBOVUxMOworCisJc2hfY2hhbiA9IHRvX3NoX2NoYW4oY2hhbik7CisKKwlzZ19pbml0X3RhYmxlKCZzZywgMSk7CisJc2dfc2V0X3BhZ2UoJnNnLCBwZm5fdG9fcGFnZShQRk5fRE9XTihkbWFfc3JjKSksIGxlbiwKKwkJICAgIG9mZnNldF9pbl9wYWdlKGRtYV9zcmMpKTsKKwlzZ19kbWFfYWRkcmVzcygmc2cpID0gZG1hX3NyYzsKKwlzZ19kbWFfbGVuKCZzZykgPSBsZW47CisKKwlyZXR1cm4gc2hfZG1hZV9wcmVwX3NnKHNoX2NoYW4sICZzZywgMSwgJmRtYV9kZXN0LCBETUFfQklESVJFQ1RJT05BTCwKKwkJCSAgICAgICBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnNoX2RtYWVfcHJlcF9zbGF2ZV9zZygKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgc2dfbGVuLAorCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZSAqcGFyYW07CisJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbjsKKworCWlmICghY2hhbikKKwkJcmV0dXJuIE5VTEw7CisKKwlzaF9jaGFuID0gdG9fc2hfY2hhbihjaGFuKTsKKwlwYXJhbSA9IGNoYW4tPnByaXZhdGU7CisKKwkvKiBTb21lb25lIGNhbGxpbmcgc2xhdmUgRE1BIG9uIGEgcHVibGljIGNoYW5uZWw/ICovCisJaWYgKCFwYXJhbSB8fCAhc2dfbGVuKSB7CisJCWRldl93YXJuKHNoX2NoYW4tPmRldiwgIiVzOiBiYWQgcGFyYW1ldGVyOiAlcCwgJWQsICVkXG4iLAorCQkJIF9fZnVuY19fLCBwYXJhbSwgc2dfbGVuLCBwYXJhbSA/IHBhcmFtLT5zbGF2ZV9pZCA6IC0xKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBpZiAocGFyYW0gIT0gTlVMTCksIHRoaXMgaXMgYSBzdWNjZXNzZnVsbHkgcmVxdWVzdGVkIHNsYXZlIGNoYW5uZWwsCisJICogdGhlcmVmb3JlIHBhcmFtLT5jb25maWcgIT0gTlVMTCB0b28uCisJICovCisJcmV0dXJuIHNoX2RtYWVfcHJlcF9zZyhzaF9jaGFuLCBzZ2wsIHNnX2xlbiwgJnBhcmFtLT5jb25maWctPmFkZHIsCisJCQkgICAgICAgZGlyZWN0aW9uLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2RtYWVfdGVybWluYXRlX2FsbChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiA9IHRvX3NoX2NoYW4oY2hhbik7CisKKwlpZiAoIWNoYW4pCisJCXJldHVybjsKKworCXNoX2RtYWVfY2hhbl9sZF9jbGVhbnVwKHNoX2NoYW4sIHRydWUpOwogfQogCiBzdGF0aWMgZG1hX2FzeW5jX3R4X2NhbGxiYWNrIF9fbGRfY2xlYW51cChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCBib29sIGFsbCkKQEAgLTQxOSw3ICs1OTMsMTEgQEAKIAkJCWNvb2tpZSA9IHR4LT5jb29raWU7CiAKIAkJaWYgKGRlc2MtPm1hcmsgPT0gREVTQ19DT01QTEVURUQgJiYgZGVzYy0+Y2h1bmtzID09IDEpIHsKLQkJCUJVR19PTihzaF9jaGFuLT5jb21wbGV0ZWRfY29va2llICE9IGRlc2MtPmNvb2tpZSAtIDEpOworCQkJaWYgKHNoX2NoYW4tPmNvbXBsZXRlZF9jb29raWUgIT0gZGVzYy0+Y29va2llIC0gMSkKKwkJCQlkZXZfZGJnKHNoX2NoYW4tPmRldiwKKwkJCQkJIkNvbXBsZXRpbmcgY29va2llICVkLCBleHBlY3RlZCAlZFxuIiwKKwkJCQkJZGVzYy0+Y29va2llLAorCQkJCQlzaF9jaGFuLT5jb21wbGV0ZWRfY29va2llICsgMSk7CiAJCQlzaF9jaGFuLT5jb21wbGV0ZWRfY29va2llID0gZGVzYy0+Y29va2llOwogCQl9CiAKQEAgLTQ5Miw3ICs2NzAsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogRmluZCB0aGUgZmlyc3QgdW4tdHJhbnNmZXIgZGVzY2lwdG9yICovCisJLyogRmluZCB0aGUgZmlyc3Qgbm90IHRyYW5zZmVycmVkIGRlc2NpcHRvciAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2QsICZzaF9jaGFuLT5sZF9xdWV1ZSwgbm9kZSkKIAkJaWYgKHNkLT5tYXJrID09IERFU0NfU1VCTUlUVEVEKSB7CiAJCQkvKiBHZXQgdGhlIGxkIHN0YXJ0IGFkZHJlc3MgZnJvbSBsZF9xdWV1ZSAqLwpAQCAtNTU5LDcgKzczNyw3IEBACiAKIAkvKiBJUlEgTXVsdGkgKi8KIAlpZiAoc2hkZXYtPnBkYXRhLm1vZGUgJiBTSERNQV9NSVhfSVJRKSB7Ci0JCWludCBjbnQgPSAwOworCQlpbnQgX19tYXliZV91bnVzZWQgY250ID0gMDsKIAkJc3dpdGNoIChpcnEpIHsKICNpZiBkZWZpbmVkKERNVEU2X0lSUSkgJiYgZGVmaW5lZChETUFFMV9JUlEpCiAJCWNhc2UgRE1URTZfSVJROgpAQCAtNTk2LDExICs3NzQsMTQgQEAKIAlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuID0gKHN0cnVjdCBzaF9kbWFlX2NoYW4gKilkYXRhOwogCXN0cnVjdCBzaF9kZXNjICpkZXNjOwogCXUzMiBzYXJfYnVmID0gc2hfZG1hZV9yZWFkbChzaF9jaGFuLCBTQVIpOworCXUzMiBkYXJfYnVmID0gc2hfZG1hZV9yZWFkbChzaF9jaGFuLCBEQVIpOwogCiAJc3Bpbl9sb2NrKCZzaF9jaGFuLT5kZXNjX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgJnNoX2NoYW4tPmxkX3F1ZXVlLCBub2RlKSB7Ci0JCWlmICgoZGVzYy0+aHcuc2FyICsgZGVzYy0+aHcudGNyKSA9PSBzYXJfYnVmICYmCi0JCSAgICBkZXNjLT5tYXJrID09IERFU0NfU1VCTUlUVEVEKSB7CisJCWlmIChkZXNjLT5tYXJrID09IERFU0NfU1VCTUlUVEVEICYmCisJCSAgICAoKGRlc2MtPmRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UgJiYKKwkJICAgICAgKGRlc2MtPmh3LmRhciArIGRlc2MtPmh3LnRjcikgPT0gZGFyX2J1ZikgfHwKKwkJICAgICAoZGVzYy0+aHcuc2FyICsgZGVzYy0+aHcudGNyKSA9PSBzYXJfYnVmKSkgewogCQkJZGV2X2RiZyhzaF9jaGFuLT5kZXYsICJkb25lICMlZEAlcCBkc3QgJXVcbiIsCiAJCQkJZGVzYy0+YXN5bmNfdHguY29va2llLCAmZGVzYy0+YXN5bmNfdHgsCiAJCQkJZGVzYy0+aHcuZGFyKTsKQEAgLTY3Myw3ICs4NTQsNyBAQAogCX0KIAogCXNucHJpbnRmKG5ld19zaF9jaGFuLT5kZXZfaWQsIHNpemVvZihuZXdfc2hfY2hhbi0+ZGV2X2lkKSwKLQkJCSJzaC1kbWFlJWQiLCBuZXdfc2hfY2hhbi0+aWQpOworCQkgInNoLWRtYWUlZCIsIG5ld19zaF9jaGFuLT5pZCk7CiAKIAkvKiBzZXQgdXAgY2hhbm5lbCBpcnEgKi8KIAllcnIgPSByZXF1ZXN0X2lycShpcnEsICZzaF9kbWFlX2ludGVycnVwdCwgaXJxZmxhZ3MsCkBAIC02ODQsMTEgKzg2NSw2IEBACiAJCWdvdG8gZXJyX25vX2lycTsKIAl9CiAKLQkvKiBDSENSIHJlZ2lzdGVyIGNvbnRyb2wgZnVuY3Rpb24gKi8KLQluZXdfc2hfY2hhbi0+c2V0X2NoY3IgPSBkbWFlX3NldF9jaGNyOwotCS8qIERNQVJTIHJlZ2lzdGVyIGNvbnRyb2wgZnVuY3Rpb24gKi8KLQluZXdfc2hfY2hhbi0+c2V0X2RtYXJzID0gZG1hZV9zZXRfZG1hcnM7Ci0KIAlzaGRldi0+Y2hhbltpZF0gPSBuZXdfc2hfY2hhbjsKIAlyZXR1cm4gMDsKIApAQCAtNzU5LDEyICs5MzUsMTkgQEAKIAlJTklUX0xJU1RfSEVBRCgmc2hkZXYtPmNvbW1vbi5jaGFubmVscyk7CiAKIAlkbWFfY2FwX3NldChETUFfTUVNQ1BZLCBzaGRldi0+Y29tbW9uLmNhcF9tYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIHNoZGV2LT5jb21tb24uY2FwX21hc2spOworCiAJc2hkZXYtPmNvbW1vbi5kZXZpY2VfYWxsb2NfY2hhbl9yZXNvdXJjZXMKIAkJPSBzaF9kbWFlX2FsbG9jX2NoYW5fcmVzb3VyY2VzOwogCXNoZGV2LT5jb21tb24uZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSBzaF9kbWFlX2ZyZWVfY2hhbl9yZXNvdXJjZXM7CiAJc2hkZXYtPmNvbW1vbi5kZXZpY2VfcHJlcF9kbWFfbWVtY3B5ID0gc2hfZG1hZV9wcmVwX21lbWNweTsKIAlzaGRldi0+Y29tbW9uLmRldmljZV9pc190eF9jb21wbGV0ZSA9IHNoX2RtYWVfaXNfY29tcGxldGU7CiAJc2hkZXYtPmNvbW1vbi5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IHNoX2RtYWVfbWVtY3B5X2lzc3VlX3BlbmRpbmc7CisKKwkvKiBDb21wdWxzb3J5IGZvciBETUFfU0xBVkUgZmllbGRzICovCisJc2hkZXYtPmNvbW1vbi5kZXZpY2VfcHJlcF9zbGF2ZV9zZyA9IHNoX2RtYWVfcHJlcF9zbGF2ZV9zZzsKKwlzaGRldi0+Y29tbW9uLmRldmljZV90ZXJtaW5hdGVfYWxsID0gc2hfZG1hZV90ZXJtaW5hdGVfYWxsOworCiAJc2hkZXYtPmNvbW1vbi5kZXYgPSAmcGRldi0+ZGV2OwogCS8qIERlZmF1bHQgdHJhbnNmZXIgc2l6ZSBvZiAzMiBieXRlcyByZXF1aXJlcyAzMi1ieXRlIGFsaWdubWVudCAqLwogCXNoZGV2LT5jb21tb24uY29weV9hbGlnbiA9IDU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zaGRtYS5oIGIvZHJpdmVycy9kbWEvc2hkbWEuaAppbmRleCAxMDhmMWNmLi43ZTIyN2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zaGRtYS5oCisrKyBiL2RyaXZlcnMvZG1hL3NoZG1hLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAlzdHJ1Y3Qgc2hfZG1hZV9yZWdzIGh3OwogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgYXN5bmNfdHg7CisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uOwogCWRtYV9jb29raWVfdCBjb29raWU7CiAJaW50IGNodW5rczsKIAlpbnQgbWFyazsKQEAgLTQ1LDEzICs0Niw5IEBACiAJc3RydWN0IGRldmljZSAqZGV2OwkJLyogQ2hhbm5lbCBkZXZpY2UgKi8KIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsJLyogVGFza2xldCAqLwogCWludCBkZXNjc19hbGxvY2F0ZWQ7CQkvKiBkZXNjIGNvdW50ICovCisJaW50IHhtaXRfc2hpZnQ7CQkJLyogbG9nXzIoYnl0ZXNfcGVyX3hmZXIpICovCiAJaW50IGlkOwkJCQkvKiBSYXcgaWQgb2YgdGhpcyBjaGFubmVsICovCiAJY2hhciBkZXZfaWRbMTZdOwkJLyogdW5pcXVlIG5hbWUgcGVyIERNQUMgb2YgY2hhbm5lbCAqLwotCi0JLyogU2V0IGNoY3IgKi8KLQlpbnQgKCpzZXRfY2hjcikoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgdTMyIHJlZ3MpOwotCS8qIFNldCBETUEgcmVzb3VyY2UgKi8KLQlpbnQgKCpzZXRfZG1hcnMpKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIHUxNiByZXMpOwogfTsKIAogc3RydWN0IHNoX2RtYWVfZGV2aWNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvc2JwMi5jIGIvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKaW5kZXggZDQ4NWNkZC4uNzBmZWY0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKQEAgLTE1NzEsNyArMTU3MSw3IEBACiAJCXNkZXYtPnN0YXJ0X3N0b3BfcHdyX2NvbmQgPSAxOwogCiAJaWYgKGx1LT50Z3QtPndvcmthcm91bmRzICYgU0JQMl9XT1JLQVJPVU5EXzEyOEtfTUFYX1RSQU5TKQotCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgMTI4ICogMTAyNCAvIDUxMik7CisJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCAxMjggKiAxMDI0IC8gNTEyKTsKIAogCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHNkZXYtPnJlcXVlc3RfcXVldWUsIFNCUDJfTUFYX1NFR19TSVpFKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYwppbmRleCAwNTFkMWViLi5mODJiY2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYwpAQCAtMzgxLDcgKzM4MSw3IEBACiAJdm9pZCAqaWJmdF9sb2MgPSBlbnRyeS0+aGVhZGVyOwogCWNoYXIgKnN0ciA9IGJ1ZjsKIAljaGFyICptYWM7Ci0JaW50IHZhbDsKKwlfX2JlMzIgdmFsOwogCiAJaWYgKCFuaWMpCiAJCXJldHVybiAwOwpAQCAtMzk3LDEwICszOTcsOCBAQAogCQlzdHIgKz0gc3ByaW50Zl9pcGFkZHIoc3RyLCBuaWMtPmlwX2FkZHIpOwogCQlicmVhazsKIAljYXNlIGliZnRfZXRoX3N1Ym5ldF9tYXNrOgotCQl2YWwgPSB+KCgxIDw8ICgzMi1uaWMtPnN1Ym5ldF9tYXNrX3ByZWZpeCkpLTEpOwotCQlzdHIgKz0gc3ByaW50ZihzdHIsIE5JUFFVQURfRk1ULAotCQkJICAgICAgICh1OCkodmFsID4+IDI0KSwgKHU4KSh2YWwgPj4gMTYpLAotCQkJICAgICAgICh1OCkodmFsID4+IDgpLCAodTgpKHZhbCkpOworCQl2YWwgPSBjcHVfdG9fYmUzMih+KCgxIDw8ICgzMi1uaWMtPnN1Ym5ldF9tYXNrX3ByZWZpeCkpLTEpKTsKKwkJc3RyICs9IHNwcmludGYoc3RyLCAiJXBJNCIsICZ2YWwpOwogCQlicmVhazsKIAljYXNlIGliZnRfZXRoX29yaWdpbjoKIAkJc3RyICs9IHNwcmludGYoc3RyLCAiJWRcbiIsIG5pYy0+b3JpZ2luKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYwppbmRleCBlN2IxOTQ0Li4yMmQ0NzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCkBAIC0xMjc5LDQ3ICsxMjc5LDQ3IEBACiAJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IHJhZGVvbl9jb25uZWN0b3JfdGFibGU7CiAJaWYgKHJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPT0gQ1RfTk9ORSkgewogI2lmZGVmIENPTkZJR19QUENfUE1BQwotCQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDMiKSkgeworCQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDMiKSkgewogCQkJLyogcG93ZXJib29rIHdpdGggVkdBICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfUE9XRVJCT09LX1ZHQTsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsNCIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsNSIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDQiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDUiKSkgewogCQkJLyogcG93ZXJib29rIHdpdGggaW50ZXJuYWwgdG1kcyAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX1BPV0VSQk9PS19JTlRFUk5BTDsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsMSIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsMiIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsMyIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsNCIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsNSIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDEiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDIiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDMiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDQiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDUiKSkgewogCQkJLyogcG93ZXJib29rIHdpdGggZXh0ZXJuYWwgc2luZ2xlIGxpbmsgdG1kcyAoc2lsMTY0KSAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX1BPV0VSQk9PS19FWFRFUk5BTDsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsNiIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s1LDYiKSkgewogCQkJLyogcG93ZXJib29rIHdpdGggZXh0ZXJuYWwgZHVhbCBvciBzaW5nbGUgbGluayB0bWRzICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfUE9XRVJCT09LX0VYVEVSTkFMOwotCQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSw3IikgfHwKLQkJCSAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSw4IikgfHwKLQkJCSAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNSw5IikpIHsKKwkJfSBlbHNlIGlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsNyIpIHx8CisJCQkgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsOCIpIHx8CisJCQkgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazUsOSIpKSB7CiAJCQkvKiBQb3dlckJvb2s2LDIgPyAqLwogCQkJLyogcG93ZXJib29rIHdpdGggZXh0ZXJuYWwgZHVhbCBsaW5rIHRtZHMgKHNpbDExNzg/KSAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX1BPV0VSQk9PS19FWFRFUk5BTDsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMSIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMiIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMyIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsMyIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsNSIpIHx8Ci0JCQkgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsNyIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDIiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDMiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDMiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDUiKSB8fAorCQkJICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDciKSkgewogCQkJLyogaWJvb2sgKi8KIAkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9JQk9PSzsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCw0IikpIHsKKwkJfSBlbHNlIGlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCw0IikpIHsKIAkJCS8qIGVtYWMgKi8KIAkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9FTUFDOwotCQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMCwxIikpIHsKKwkJfSBlbHNlIGlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTAsMSIpKSB7CiAJCQkvKiBtaW5pIHdpdGggaW50ZXJuYWwgdG1kcyAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX01JTklfSU5URVJOQUw7Ci0JCX0gZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzEwLDIiKSkgeworCQl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMCwyIikpIHsKIAkJCS8qIG1pbmkgd2l0aCBleHRlcm5hbCB0bWRzICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfTUlOSV9FWFRFUk5BTDsKLQkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTIsMSIpKSB7CisJCX0gZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzEyLDEiKSkgewogCQkJLyogUG93ZXJNYWM4LDEgPyAqLwogCQkJLyogaW1hYyBnNSBpc2lnaHQgKi8KIAkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9JTUFDX0c1X0lTSUdIVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L3ZnYS9LY29uZmlnIGIvZHJpdmVycy9ncHUvdmdhL0tjb25maWcKaW5kZXggNzkwZTY3NS4uMDkyMDQ5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvdmdhL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvdmdhL0tjb25maWcKQEAgLTgsMyArOCwxMSBAQAogCSAgYXJlIGFjY2Vzc2VkIGF0IHNhbWUgdGltZSB0aGV5IG5lZWQgc29tZSBraW5kIG9mIGNvb3JkaW5hdGlvbi4gUGxlYXNlCiAJICBzZWUgRG9jdW1lbnRhdGlvbi92Z2FhcmJpdGVyLnR4dCBmb3IgbW9yZSBkZXRhaWxzLiBTZWxlY3QgdGhpcyB0bwogCSAgZW5hYmxlIFZHQSBhcmJpdGVyLgorCitjb25maWcgVkdBX0FSQl9NQVhfR1BVUworCWludCAiTWF4aW11bSBudW1iZXIgb2YgR1BVcyIKKwlkZWZhdWx0IDE2CisJZGVwZW5kcyBvbiBWR0FfQVJCCisJaGVscAorCSAgUmVzZXJ2ZXMgc3BhY2UgaW4gdGhlIGtlcm5lbCB0byBtYWludGFpbiByZXNvdXJjZSBsb2NraW5nIGZvcgorCSAgbXVsdGlwbGUgR1BVUy4gIFRoZSBvdmVyaGVhZCBmb3IgZWFjaCBHUFUgaXMgdmVyeSBzbWFsbC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYyBiL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYwppbmRleCAyZjZjZjY5Li44ODI3ODE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS92Z2EvdmdhYXJiLmMKKysrIGIvZHJpdmVycy9ncHUvdmdhL3ZnYWFyYi5jCkBAIC02ODgsNyArNjg4LDcgQEAKICAqIHRoZSBhcmJpdGVyLgogICovCiAKLSNkZWZpbmUgTUFYX1VTRVJfQ0FSRFMgICAgICAgICAxNgorI2RlZmluZSBNQVhfVVNFUl9DQVJEUyAgICAgICAgIENPTkZJR19WR0FfQVJCX01BWF9HUFVTCiAjZGVmaW5lIFBDSV9JTlZBTElEX0NBUkQgICAgICAgKChzdHJ1Y3QgcGNpX2RldiAqKS0xVUwpCiAKIC8qCkBAIC05NTQsNiArOTU0LDcgQEAKIAkJfQogCiAJfSBlbHNlIGlmIChzdHJuY21wKGN1cnJfcG9zLCAidGFyZ2V0ICIsIDcpID09IDApIHsKKwkJc3RydWN0IHBjaV9idXMgKnBidXM7CiAJCXVuc2lnbmVkIGludCBkb21haW4sIGJ1cywgZGV2Zm47CiAJCXN0cnVjdCB2Z2FfZGV2aWNlICp2Z2FkZXY7CiAKQEAgLTk2OSwxOCArOTcwLDMxIEBACiAJCQkJcmV0X3ZhbCA9IC1FUFJPVE87CiAJCQkJZ290byBkb25lOwogCQkJfQorCQkJcHJfZGV2ZWwoInZnYWFyYjogJXMgPT0+ICV4OiV4OiV4LiV4XG4iLCBjdXJyX3BvcywKKwkJCQlkb21haW4sIGJ1cywgUENJX1NMT1QoZGV2Zm4pLCBQQ0lfRlVOQyhkZXZmbikpOwogCi0JCQlwZGV2ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoYnVzLCBkZXZmbik7CisJCQlwYnVzID0gcGNpX2ZpbmRfYnVzKGRvbWFpbiwgYnVzKTsKKwkJCXByX2RldmVsKCJ2Z2FhcmI6IHBidXMgJXBcbiIsIHBidXMpOworCQkJaWYgKHBidXMgPT0gTlVMTCkgeworCQkJCXByX2VycigidmdhYXJiOiBpbnZhbGlkIFBDSSBkb21haW4gYW5kL29yIGJ1cyBhZGRyZXNzICV4OiV4XG4iLAorCQkJCQlkb21haW4sIGJ1cyk7CisJCQkJcmV0X3ZhbCA9IC1FTk9ERVY7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJcGRldiA9IHBjaV9nZXRfc2xvdChwYnVzLCBkZXZmbik7CisJCQlwcl9kZXZlbCgidmdhYXJiOiBwZGV2ICVwXG4iLCBwZGV2KTsKIAkJCWlmICghcGRldikgewotCQkJCXByX2luZm8oInZnYWFyYjogaW52YWxpZCBQQ0kgYWRkcmVzcyFcbiIpOworCQkJCXByX2VycigidmdhYXJiOiBpbnZhbGlkIFBDSSBhZGRyZXNzICV4OiV4XG4iLAorCQkJCQlidXMsIGRldmZuKTsKIAkJCQlyZXRfdmFsID0gLUVOT0RFVjsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAJCX0KIAogCQl2Z2FkZXYgPSB2Z2FkZXZfZmluZChwZGV2KTsKKwkJcHJfZGV2ZWwoInZnYWFyYjogdmdhZGV2ICVwXG4iLCB2Z2FkZXYpOwogCQlpZiAodmdhZGV2ID09IE5VTEwpIHsKLQkJCXByX2luZm8oInZnYWFyYjogdGhpcyBwY2kgZGV2aWNlIGlzIG5vdCBhIHZnYSBkZXZpY2VcbiIpOworCQkJcHJfZXJyKCJ2Z2FhcmI6IHRoaXMgcGNpIGRldmljZSBpcyBub3QgYSB2Z2EgZGV2aWNlXG4iKTsKIAkJCXBjaV9kZXZfcHV0KHBkZXYpOwogCQkJcmV0X3ZhbCA9IC1FTk9ERVY7CiAJCQlnb3RvIGRvbmU7CkBAIC05OTgsNyArMTAxMiw4IEBACiAJCQl9CiAJCX0KIAkJaWYgKGkgPT0gTUFYX1VTRVJfQ0FSRFMpIHsKLQkJCXByX2VycigidmdhYXJiOiBtYXhpbXVtIHVzZXIgY2FyZHMgbnVtYmVyIHJlYWNoZWQhXG4iKTsKKwkJCXByX2VycigidmdhYXJiOiBtYXhpbXVtIHVzZXIgY2FyZHMgKCVkKSBudW1iZXIgcmVhY2hlZCFcbiIsCisJCQkJTUFYX1VTRVJfQ0FSRFMpOwogCQkJcGNpX2Rldl9wdXQocGRldik7CiAJCQkvKiBYWFg6IHdoaWNoIHZhbHVlIHRvIHJldHVybj8gKi8KIAkJCXJldF92YWwgPSAgLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL0tjb25maWcgYi9kcml2ZXJzL2hpZC9LY29uZmlnCmluZGV4IDI0ZDkwZWEuLjcxZDRjMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL0tjb25maWcKKysrIGIvZHJpdmVycy9oaWQvS2NvbmZpZwpAQCAtNTUsNiArNTUsMTIgQEAKIG1lbnUgIlNwZWNpYWwgSElEIGRyaXZlcnMiCiAJZGVwZW5kcyBvbiBISUQKIAorY29uZmlnIEhJRF8zTV9QQ1QKKwl0cmlzdGF0ZSAiM00gUENUIgorCWRlcGVuZHMgb24gVVNCX0hJRAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciAzTSBQQ1QgdG91Y2ggc2NyZWVucy4KKwogY29uZmlnIEhJRF9BNFRFQ0gKIAl0cmlzdGF0ZSAiQTQgdGVjaCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKQEAgLTE4Myw2ICsxODksMjMgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIExvZ2l0ZWNoCiAJICBSdW1ibGVwYWQgMiBkZXZpY2VzLgogCitjb25maWcgTE9HSUc5NDBfRkYKKwlib29sICJMb2dpdGVjaCBGbGlnaHQgU3lzdGVtIEc5NDAgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhJRF9MT0dJVEVDSAorCXNlbGVjdCBJTlBVVF9GRl9NRU1MRVNTCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgTG9naXRlY2gKKwkgIEZsaWdodCBTeXN0ZW0gRzk0MCBkZXZpY2VzLgorCitjb25maWcgSElEX01BR0lDTU9VU0UKKwl0cmlzdGF0ZSAiQXBwbGUgTWFnaWNNb3VzZSBtdWx0aS10b3VjaCBzdXBwb3J0IgorCWRlcGVuZHMgb24gQlRfSElEUAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciB0aGUgQXBwbGUgTWFnaWMgTW91c2UgbXVsdGktdG91Y2guCisKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBtdWx0aS10b3VjaCBmZWF0dXJlcyBvZiB0aGUKKwlBcHBsZSBXaXJlbGVzcyAiTWFnaWMiIE1vdXNlLgorCiBjb25maWcgSElEX01JQ1JPU09GVAogCXRyaXN0YXRlICJNaWNyb3NvZnQiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECkBAIC0xOTAsNiArMjEzLDEyIEBACiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIE1pY3Jvc29mdCBkZXZpY2VzIHRoYXQgYXJlIG5vdCBmdWxseSBjb21wbGlhbnQgd2l0aCBISUQgc3RhbmRhcmQuCiAKK2NvbmZpZyBISURfTU9TQVJUCisJdHJpc3RhdGUgIk1vc0FydCIKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgTW9zQXJ0IGR1YWwtdG91Y2ggcGFuZWxzLgorCiBjb25maWcgSElEX01PTlRFUkVZCiAJdHJpc3RhdGUgIk1vbnRlcmV5IiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRApAQCAtMTk4LDExICsyMjcsMTcgQEAKIAlTdXBwb3J0IGZvciBNb250ZXJleSBHZW5pdXMgS0IyOUUuCiAKIGNvbmZpZyBISURfTlRSSUcKLQl0cmlzdGF0ZSAiTlRyaWciIGlmIEVNQkVEREVECisJdHJpc3RhdGUgIk5UcmlnIgorCWRlcGVuZHMgb24gVVNCX0hJRAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBOLVRyaWcgdG91Y2ggc2NyZWVuLgorCitjb25maWcgSElEX09SVEVLCisJdHJpc3RhdGUgIk9ydGVrIiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRAogCWRlZmF1bHQgIUVNQkVEREVECiAJLS0taGVscC0tLQotCVN1cHBvcnQgZm9yIE4tVHJpZyB0b3VjaCBzY3JlZW4uCisJU3VwcG9ydCBmb3IgT3J0ZWsgV0tCLTIwMDAgd2lyZWxlc3Mga2V5Ym9hcmQgKyBtb3VzZSB0cmFja3BhZC4KIAogY29uZmlnIEhJRF9QQU5USEVSTE9SRAogCXRyaXN0YXRlICJQYW50aGVybG9yZCBzdXBwb3J0IiBpZiBFTUJFRERFRApAQCAtMjI3LDYgKzI2MiwxMiBAQAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBQZXRhbHlueCBNYXh0ZXIgcmVtb3RlIGNvbnRyb2wuCiAKK2NvbmZpZyBISURfUVVBTlRBCisJdHJpc3RhdGUgIlF1YW50YSBPcHRpY2FsIFRvdWNoIgorCWRlcGVuZHMgb24gVVNCX0hJRAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBRdWFudGEgT3B0aWNhbCBUb3VjaCBkdWFsLXRvdWNoIHBhbmVscy4KKwogY29uZmlnIEhJRF9TQU1TVU5HCiAJdHJpc3RhdGUgIlNhbXN1bmciIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfSElECkBAIC0yNDEsNiArMjgyLDEyIEBACiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIFNvbnkgUFMzIGNvbnRyb2xsZXIuCiAKK2NvbmZpZyBISURfU1RBTlRVTQorCXRyaXN0YXRlICJTdGFudHVtIgorCWRlcGVuZHMgb24gVVNCX0hJRAorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBTdGFudHVtIG11bHRpdG91Y2ggcGFuZWwuCisKIGNvbmZpZyBISURfU1VOUExVUwogCXRyaXN0YXRlICJTdW5wbHVzIiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRApAQCAtMzA1LDkgKzM1Miw4IEBACiAJICBSdW1ibGUgRm9yY2Ugb3IgRm9yY2UgRmVlZGJhY2sgV2hlZWwuCiAKIGNvbmZpZyBISURfV0FDT00KLQl0cmlzdGF0ZSAiV2Fjb20gQmx1ZXRvb3RoIGRldmljZXMgc3VwcG9ydCIgaWYgRU1CRURERUQKKwl0cmlzdGF0ZSAiV2Fjb20gQmx1ZXRvb3RoIGRldmljZXMgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEJUX0hJRFAKLQlkZWZhdWx0ICFFTUJFRERFRAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBXYWNvbSBHcmFwaGlyZSBCbHVldG9vdGggdGFibGV0LgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9NYWtlZmlsZSBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCmluZGV4IDBkZTJkZmYuLjBiMjYxOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCkBAIC0xOCw3ICsxOCwxMSBAQAogaWZkZWYgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGCiAJaGlkLWxvZ2l0ZWNoLW9ianMJKz0gaGlkLWxnMmZmLm8KIGVuZGlmCitpZmRlZiBDT05GSUdfTE9HSUc5NDBfRkYKKwloaWQtbG9naXRlY2gtb2JqcwkrPSBoaWQtbGczZmYubworZW5kaWYKIAorb2JqLSQoQ09ORklHX0hJRF8zTV9QQ1QpCSs9IGhpZC0zbS1wY3Qubwogb2JqLSQoQ09ORklHX0hJRF9BNFRFQ0gpCSs9IGhpZC1hNHRlY2gubwogb2JqLSQoQ09ORklHX0hJRF9BUFBMRSkJCSs9IGhpZC1hcHBsZS5vCiBvYmotJChDT05GSUdfSElEX0JFTEtJTikJKz0gaGlkLWJlbGtpbi5vCkBAIC0zMSwxNCArMzUsMTkgQEAKIG9iai0kKENPTkZJR19ISURfS0VOU0lOR1RPTikJKz0gaGlkLWtlbnNpbmd0b24ubwogb2JqLSQoQ09ORklHX0hJRF9LWUUpCQkrPSBoaWQta3llLm8KIG9iai0kKENPTkZJR19ISURfTE9HSVRFQ0gpCSs9IGhpZC1sb2dpdGVjaC5vCitvYmotJChDT05GSUdfSElEX01BR0lDTU9VU0UpICAgICs9IGhpZC1tYWdpY21vdXNlLm8KIG9iai0kKENPTkZJR19ISURfTUlDUk9TT0ZUKQkrPSBoaWQtbWljcm9zb2Z0Lm8KIG9iai0kKENPTkZJR19ISURfTU9OVEVSRVkpCSs9IGhpZC1tb250ZXJleS5vCitvYmotJChDT05GSUdfSElEX01PU0FSVCkJKz0gaGlkLW1vc2FydC5vCiBvYmotJChDT05GSUdfSElEX05UUklHKQkJKz0gaGlkLW50cmlnLm8KK29iai0kKENPTkZJR19ISURfT1JURUspCQkrPSBoaWQtb3J0ZWsubworb2JqLSQoQ09ORklHX0hJRF9RVUFOVEEpCSs9IGhpZC1xdWFudGEubwogb2JqLSQoQ09ORklHX0hJRF9QQU5USEVSTE9SRCkJKz0gaGlkLXBsLm8KIG9iai0kKENPTkZJR19ISURfUEVUQUxZTlgpCSs9IGhpZC1wZXRhbHlueC5vCiBvYmotJChDT05GSUdfSElEX1NBTVNVTkcpCSs9IGhpZC1zYW1zdW5nLm8KIG9iai0kKENPTkZJR19ISURfU01BUlRKT1lQTFVTKQkrPSBoaWQtc2pveS5vCiBvYmotJChDT05GSUdfSElEX1NPTlkpCQkrPSBoaWQtc29ueS5vCitvYmotJChDT05GSUdfSElEX1NUQU5UVU0pCSs9IGhpZC1zdGFudHVtLm8KIG9iai0kKENPTkZJR19ISURfU1VOUExVUykJKz0gaGlkLXN1bnBsdXMubwogb2JqLSQoQ09ORklHX0hJRF9HUkVFTkFTSUEpCSs9IGhpZC1nYWZmLm8KIG9iai0kKENPTkZJR19ISURfVEhSVVNUTUFTVEVSKQkrPSBoaWQtdG1mZi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtM20tcGN0LmMgYi9kcml2ZXJzL2hpZC9oaWQtM20tcGN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM3MGFlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC0zbS1wY3QuYwpAQCAtMCwwICsxLDI5MCBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciAzTSBQQ1QgbXVsdGl0b3VjaCBwYW5lbHMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+CisgKgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworTU9EVUxFX0FVVEhPUigiU3RlcGhhbmUgQ2hhdHR5IDxjaGF0dHlAZW5hYy5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiM00gUENUIG11bHRpdG91Y2ggcGFuZWxzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0cnVjdCBtbW1fZmluZ2VyIHsKKwlfX3MzMiB4LCB5OworCV9fdTggcmFuazsKKwlib29sIHRvdWNoLCB2YWxpZDsKK307CisKK3N0cnVjdCBtbW1fZGF0YSB7CisJc3RydWN0IG1tbV9maW5nZXIgZlsxMF07CisJX191OCBjdXJpZCwgbnVtOworCWJvb2wgdG91Y2gsIHZhbGlkOworfTsKKworc3RhdGljIGludCBtbW1faW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKKworCWNhc2UgSElEX1VQX0JVVFRPTjoKKwkJcmV0dXJuIC0xOworCisJY2FzZSBISURfVVBfR0VOREVTSzoKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0dEX1g6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gpOworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19YLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0dEX1k6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1kpOworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19ZLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIEhJRF9VUF9ESUdJVElaRVI6CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQkvKiB3ZSBkbyBub3Qgd2FudCB0byBtYXAgdGhlc2U6IG5vIGlucHV0LW9yaWVudGVkIG1lYW5pbmcgKi8KKwkJY2FzZSAweDE0OgorCQljYXNlIDB4MjM6CisJCWNhc2UgSElEX0RHX0lOUFVUTU9ERToKKwkJY2FzZSBISURfREdfREVWSUNFSU5ERVg6CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKKwkJY2FzZSBISURfREdfQ09OVEFDVE1BWDoKKwkJY2FzZSBISURfREdfSU5SQU5HRToKKwkJY2FzZSBISURfREdfQ09ORklERU5DRToKKwkJCXJldHVybiAtMTsKKwkJY2FzZSBISURfREdfVElQU1dJVENIOgorCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsIEVWX0tFWSwgQlROX1RPVUNIKTsKKwkJCXJldHVybiAxOworCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1RSQUNLSU5HX0lEKTsKKwkJCXJldHVybiAxOworCQl9CisJCS8qIGxldCBoaWQtaW5wdXQgZGVjaWRlIGZvciB0aGUgb3RoZXJzICovCisJCXJldHVybiAwOworCisJY2FzZSAweGZmMDAwMDAwOgorCQkvKiB3ZSBkbyBub3Qgd2FudCB0byBtYXAgdGhlc2U6IG5vIGlucHV0LW9yaWVudGVkIG1lYW5pbmcgKi8KKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1tbV9pbnB1dF9tYXBwZWQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCWlmICh1c2FnZS0+dHlwZSA9PSBFVl9LRVkgfHwgdXNhZ2UtPnR5cGUgPT0gRVZfQUJTKQorCQljbGVhcl9iaXQodXNhZ2UtPmNvZGUsICpiaXQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgd2hvbGUgcGFja2V0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBwcm9jZXNzZWQsCisgKiBzbyB0aGF0IGl0IGNhbiBkZWNpZGUgd2hhdCB0byBzZW5kIHRvIHRoZSBpbnB1dCBsYXllci4KKyAqLworc3RhdGljIHZvaWQgbW1tX2ZpbHRlcl9ldmVudChzdHJ1Y3QgbW1tX2RhdGEgKm1kLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlzdHJ1Y3QgbW1tX2ZpbmdlciAqb2xkZXN0ID0gMDsKKwlib29sIHByZXNzZWQgPSBmYWxzZSwgcmVsZWFzZWQgPSBmYWxzZTsKKwlpbnQgaTsKKworCS8qCisJICogd2UgbmVlZCB0byBpdGVyYXRlIG9uIGFsbCBmaW5nZXJzIHRvIGRlY2lkZSBpZiB3ZSBoYXZlIGEgcHJlc3MKKwkgKiBvciBhIHJlbGVhc2UgZXZlbnQgaW4gb3VyIHRvdWNoc2NyZWVuIGVtdWxhdGlvbi4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkgeworCQlzdHJ1Y3QgbW1tX2ZpbmdlciAqZiA9ICZtZC0+ZltpXTsKKwkJaWYgKCFmLT52YWxpZCkgeworCQkJLyogdGhpcyBmaW5nZXIgaXMganVzdCBwbGFjZWhvbGRlciBkYXRhLCBpZ25vcmUgKi8KKwkJfSBlbHNlIGlmIChmLT50b3VjaCkgeworCQkJLyogdGhpcyBmaW5nZXIgaXMgb24gdGhlIHNjcmVlbiAqLworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1RSQUNLSU5HX0lELCBpKTsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YLCBmLT54KTsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9ZLCBmLT55KTsKKwkJCWlucHV0X210X3N5bmMoaW5wdXQpOworCQkJLyoKKwkJCSAqIHRvdWNoc2NyZWVuIGVtdWxhdGlvbjogbWFpbnRhaW4gdGhlIGFnZSByYW5rCisJCQkgKiBvZiB0aGlzIGZpbmdlciwgZGVjaWRlIGlmIHdlIGhhdmUgYSBwcmVzcworCQkJICovCisJCQlpZiAoZi0+cmFuayA9PSAwKSB7CisJCQkJZi0+cmFuayA9ICsrKG1kLT5udW0pOworCQkJCWlmIChmLT5yYW5rID09IDEpCisJCQkJCXByZXNzZWQgPSB0cnVlOworCQkJfQorCQkJaWYgKGYtPnJhbmsgPT0gMSkKKwkJCQlvbGRlc3QgPSBmOworCQl9IGVsc2UgeworCQkJLyogdGhpcyBmaW5nZXIgdG9vayBvZmYgdGhlIHNjcmVlbiAqLworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uOiBtYWludGFpbiBhZ2UgcmFuayBvZiBvdGhlcnMgKi8KKwkJCWludCBqOworCisJCQlmb3IgKGogPSAwOyBqIDwgMTA7ICsraikgeworCQkJCXN0cnVjdCBtbW1fZmluZ2VyICpnID0gJm1kLT5mW2pdOworCQkJCWlmIChnLT5yYW5rID4gZi0+cmFuaykgeworCQkJCQlnLT5yYW5rLS07CisJCQkJCWlmIChnLT5yYW5rID09IDEpCisJCQkJCQlvbGRlc3QgPSBnOworCQkJCX0KKwkJCX0KKwkJCWYtPnJhbmsgPSAwOworCQkJLS0obWQtPm51bSk7CisJCQlpZiAobWQtPm51bSA9PSAwKQorCQkJCXJlbGVhc2VkID0gdHJ1ZTsKKwkJfQorCQlmLT52YWxpZCA9IDA7CisJfQorCisJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJaWYgKG9sZGVzdCkgeworCQlpZiAocHJlc3NlZCkKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMSk7CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19YLCBvbGRlc3QtPngpOworCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWSwgb2xkZXN0LT55KTsKKwl9IGVsc2UgaWYgKHJlbGVhc2VkKSB7CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMCk7CisJfQorfQorCisvKgorICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdXBvbiBhbGwgcmVwb3J0cworICogc28gdGhhdCB3ZSBjYW4gYWNjdW11bGF0ZSBjb250YWN0IHBvaW50IGluZm9ybWF0aW9uLAorICogYW5kIGNhbGwgaW5wdXRfbXRfc3luYyBhZnRlciBlYWNoIHBvaW50LgorICovCitzdGF0aWMgaW50IG1tbV9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCit7CisJc3RydWN0IG1tbV9kYXRhICptZCA9IGhpZF9nZXRfZHJ2ZGF0YShoaWQpOworCS8qCisJICogc3RyYW5nZWx5LCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYmVmb3JlCisJICogZmllbGQtPmhpZGlucHV0IGlzIGluaXRpYWxpemVkIQorCSAqLworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkgeworCQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQ7CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9ER19USVBTV0lUQ0g6CisJCQltZC0+dG91Y2ggPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgorCQkJbWQtPnZhbGlkID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09OVEFDVElEOgorCQkJaWYgKG1kLT52YWxpZCkgeworCQkJCW1kLT5jdXJpZCA9IHZhbHVlOworCQkJCW1kLT5mW3ZhbHVlXS50b3VjaCA9IG1kLT50b3VjaDsKKwkJCQltZC0+Zlt2YWx1ZV0udmFsaWQgPSAxOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSElEX0dEX1g6CisJCQlpZiAobWQtPnZhbGlkKQorCQkJCW1kLT5mW21kLT5jdXJpZF0ueCA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0dEX1k6CisJCQlpZiAobWQtPnZhbGlkKQorCQkJCW1kLT5mW21kLT5jdXJpZF0ueSA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKKwkJCW1tbV9maWx0ZXJfZXZlbnQobWQsIGlucHV0KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogd2UgaGF2ZSBoYW5kbGVkIHRoZSBoaWRpbnB1dCBwYXJ0LCBub3cgcmVtYWlucyBoaWRkZXYgKi8KKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWICYmIGhpZC0+aGlkZGV2X2hpZF9ldmVudCkKKwkJaGlkLT5oaWRkZXZfaGlkX2V2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBtbW1fcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtbW1fZGF0YSAqbWQ7CisKKwltZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtbW1fZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghbWQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIDNNIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIG1kKTsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCisJaWYgKHJldCkKKwkJa2ZyZWUobWQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG1tbV9yZW1vdmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJaGlkX2h3X3N0b3AoaGRldik7CisJa2ZyZWUoaGlkX2dldF9kcnZkYXRhKGhkZXYpKTsKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBtbW1fZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF8zTSwgVVNCX0RFVklDRV9JRF8zTTE5NjgpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIG1tbV9kZXZpY2VzKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfdXNhZ2VfaWQgbW1tX2dyYWJiZWRfdXNhZ2VzW10gPSB7CisJeyBISURfQU5ZX0lELCBISURfQU5ZX0lELCBISURfQU5ZX0lEIH0sCisJeyBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxfQorfTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIG1tbV9kcml2ZXIgPSB7CisJLm5hbWUgPSAiM20tcGN0IiwKKwkuaWRfdGFibGUgPSBtbW1fZGV2aWNlcywKKwkucHJvYmUgPSBtbW1fcHJvYmUsCisJLnJlbW92ZSA9IG1tbV9yZW1vdmUsCisJLmlucHV0X21hcHBpbmcgPSBtbW1faW5wdXRfbWFwcGluZywKKwkuaW5wdXRfbWFwcGVkID0gbW1tX2lucHV0X21hcHBlZCwKKwkudXNhZ2VfdGFibGUgPSBtbW1fZ3JhYmJlZF91c2FnZXMsCisJLmV2ZW50ID0gbW1tX2V2ZW50LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbW1tX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmbW1tX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtbW1fZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmbW1tX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1tbV9pbml0KTsKK21vZHVsZV9leGl0KG1tbV9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWFwcGxlLmMgYi9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYwppbmRleCA1YjRkNjZkLi43ODI4NmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYwpAQCAtNDAsNiArNDAsMTEgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZm5tb2RlLCAiTW9kZSBvZiBmbiBrZXkgb24gQXBwbGUga2V5Ym9hcmRzICgwID0gZGlzYWJsZWQsICIKIAkJIlsxXSA9IGZrZXlzbGFzdCwgMiA9IGZrZXlzZmlyc3QpIik7CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXNvX2xheW91dCA9IDE7Cittb2R1bGVfcGFyYW0oaXNvX2xheW91dCwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlzb19sYXlvdXQsICJFbmFibGUvRGlzYWJsZSBoYXJkY29kZWQgSVNPLWxheW91dCBvZiB0aGUga2V5Ym9hcmQuICIKKwkJIigwID0gZGlzYWJsZWQsIFsxXSA9IGVuYWJsZWQpIik7CisKIHN0cnVjdCBhcHBsZV9zYyB7CiAJdW5zaWduZWQgbG9uZyBxdWlya3M7CiAJdW5zaWduZWQgaW50IGZuX29uOwpAQCAtMTk5LDExICsyMDQsMTMgQEAKIAkJfQogCX0KIAotCWlmIChhc2MtPnF1aXJrcyAmIEFQUExFX0lTT19LRVlCT0FSRCkgewotCQl0cmFucyA9IGFwcGxlX2ZpbmRfdHJhbnNsYXRpb24oYXBwbGVfaXNvX2tleWJvYXJkLCB1c2FnZS0+Y29kZSk7Ci0JCWlmICh0cmFucykgewotCQkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCB0cmFucy0+dG8sIHZhbHVlKTsKLQkJCXJldHVybiAxOworICAgICAgICBpZiAoaXNvX2xheW91dCkgeworCQlpZiAoYXNjLT5xdWlya3MgJiBBUFBMRV9JU09fS0VZQk9BUkQpIHsKKwkJCXRyYW5zID0gYXBwbGVfZmluZF90cmFuc2xhdGlvbihhcHBsZV9pc29fa2V5Ym9hcmQsIHVzYWdlLT5jb2RlKTsKKwkJCWlmICh0cmFucykgeworCQkJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdHJhbnMtPnRvLCB2YWx1ZSk7CisJCQkJcmV0dXJuIDE7CisJCQl9CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCmluZGV4IGVhYmU1ZjguLjM2OGZiYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpAQCAtNCw3ICs0LDcgQEAKICAqICBDb3B5cmlnaHQgKGMpIDE5OTkgQW5kcmVhcyBHYWwKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgogICogIENvcHlyaWdodCAoYykgMjAwNSBNaWNoYWVsIEhhYm91c3RhayA8bWlrZS1AY2luY2kucnIuY29tPiBmb3IgQ29uY2VwdDIsIEluYwotICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEppcmkgS29zaW5hCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMTAgSmlyaSBLb3NpbmEKICAqLwogCiAvKgpAQCAtNTEsNyArNTEsNyBAQAogICogUmVnaXN0ZXIgYSBuZXcgcmVwb3J0IGZvciBhIGRldmljZS4KICAqLwogCi1zdGF0aWMgc3RydWN0IGhpZF9yZXBvcnQgKmhpZF9yZWdpc3Rlcl9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZSwgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgaWQpCitzdHJ1Y3QgaGlkX3JlcG9ydCAqaGlkX3JlZ2lzdGVyX3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlLCB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCBpZCkKIHsKIAlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtICpyZXBvcnRfZW51bSA9IGRldmljZS0+cmVwb3J0X2VudW0gKyB0eXBlOwogCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CkBAIC03NSw2ICs3NSw3IEBACiAKIAlyZXR1cm4gcmVwb3J0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaGlkX3JlZ2lzdGVyX3JlcG9ydCk7CiAKIC8qCiAgKiBSZWdpc3RlciBhIG5ldyBmaWVsZCBmb3IgdGhpcyByZXBvcnQuCkBAIC0zODcsNyArMzg4LDggQEAKIAlfX3UzMiBkYXRhOwogCXVuc2lnbmVkIG47CiAKLQlpZiAoaXRlbS0+c2l6ZSA9PSAwKSB7CisJLyogTG9jYWwgZGVsaW1pdGVyIGNvdWxkIGhhdmUgdmFsdWUgMCwgd2hpY2ggYWxsb3dzIHNpemUgdG8gYmUgMCAqLworCWlmIChpdGVtLT5zaXplID09IDAgJiYgaXRlbS0+dGFnICE9IEhJRF9MT0NBTF9JVEVNX1RBR19ERUxJTUlURVIpIHsKIAkJZGJnX2hpZCgiaXRlbSBkYXRhIGV4cGVjdGVkIGZvciBsb2NhbCBpdGVtXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTEyNDgsMTEgKzEyNTAsMTMgQEAKIAogLyogYSBsaXN0IG9mIGRldmljZXMgZm9yIHdoaWNoIHRoZXJlIGlzIGEgc3BlY2lhbGl6ZWQgZHJpdmVyIG9uIEhJRCBidXMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBoaWRfYmxhY2tsaXN0W10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEXzNNLCBVU0JfREVWSUNFX0lEXzNNMTk2OCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQTRURUNILCBVU0JfREVWSUNFX0lEX0E0VEVDSF9XQ1AzMlBVKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BNFRFQ0gsIFVTQl9ERVZJQ0VfSURfQTRURUNIX1g1XzAwNUQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FUVl9JUkNPTlRST0wpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0lSQ09OVFJPTDQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX01JR0hUWU1PVVNFKSB9LAorCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9NQUdJQ01PVVNFKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9BTlNJKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9JU08pIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUl9BTlNJKSB9LApAQCAtMTMyNCw2ICsxMzI4LDcgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0lOR01BTl9GM0QpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1dJTkdNQU5fRkZHICkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfRk9SQ0UzRF9QUk8pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0ZMSUdIVF9TWVNURU1fRzk0MCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTU9NT19XSEVFTCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTU9NT19XSEVFTDIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0cyNV9XSEVFTCkgfSwKQEAgLTEzMzcsMTAgKzEzNDIsMTUgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZULCBVU0JfREVWSUNFX0lEX1dJUkVMRVNTX09QVElDQUxfREVTS1RPUF8zXzApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01PTlRFUkVZLCBVU0JfREVWSUNFX0lEX0dFTklVU19LQjI5RSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTlRSSUcsIFVTQl9ERVZJQ0VfSURfTlRSSUdfVE9VQ0hfU0NSRUVOKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PUlRFSywgVVNCX0RFVklDRV9JRF9PUlRFS19XS0IyMDAwKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9QRVRBTFlOWCwgVVNCX0RFVklDRV9JRF9QRVRBTFlOWF9NQVhURVJfUkVNT1RFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFOVEEsIFVTQl9ERVZJQ0VfSURfUVVBTlRBX09QVElDQUxfVE9VQ0gpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQU5UQSwgVVNCX0RFVklDRV9JRF9QSVhBUlRfSU1BR0lOR19JTkNfT1BUSUNBTF9UT1VDSF9TQ1JFRU4pIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NBTVNVTkcsIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19JUl9SRU1PVEUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPTlksIFVTQl9ERVZJQ0VfSURfU09OWV9QUzNfQ09OVFJPTExFUikgfSwKKwl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfU09OWSwgVVNCX0RFVklDRV9JRF9TT05ZX1BTM19DT05UUk9MTEVSKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT05ZLCBVU0JfREVWSUNFX0lEX1NPTllfVkFJT19WR1hfTU9VU0UpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NUQU5UVU0sIFVTQl9ERVZJQ0VfSURfTVRQKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TVU5QTFVTLCBVU0JfREVWSUNFX0lEX1NVTlBMVVNfV0RFU0tUT1ApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiMzAwKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjMwNCkgfSwKQEAgLTE1NDMsOCArMTU1Myw5IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUkNBQkxFLCBVU0JfREVWSUNFX0lEX0FJUkNBQkxFMSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQUxDT1IsIFVTQl9ERVZJQ0VfSURfQUxDT1JfVVNCUlMyMzIpIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FTVVMsIFVTQl9ERVZJQ0VfSURfQVNVU19MQ00pfSwKLQl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVNVUywgVVNCX0RFVklDRV9JRF9BU1VTX0xDTTIpfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVNVUywgVVNCX0RFVklDRV9JRF9BU1VTX1Q5MU1UKX0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FTVVNURUssIFVTQl9ERVZJQ0VfSURfQVNVU1RFS19MQ00pfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVNVU1RFSywgVVNCX0RFVklDRV9JRF9BU1VTVEVLX0xDTTIpfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVZFUk1FRElBLCBVU0JfREVWSUNFX0lEX0FWRVJfRk1fTVI4MDApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JFUktTSElSRSwgVVNCX0RFVklDRV9JRF9CRVJLU0hJUkVfUENXRCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ0lEQywgMHgwMTAzKSB9LApAQCAtMTY2MSw4ICsxNjcyLDYgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1BISUxJUFMsIFVTQl9ERVZJQ0VfSURfUEhJTElQU19JRUVFODAyMTU0X0RPTkdMRSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUE9XRVJDT00sIFVTQl9ERVZJQ0VfSURfUE9XRVJDT01fVVBTKSB9LAotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9URU5YLCBVU0JfREVWSUNFX0lEX1RFTlhfSUJVRERZMSkgfSwKLQl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEVOWCwgVVNCX0RFVklDRV9JRF9URU5YX0lCVUREWTIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9MQUJQUk8pIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9HT1RFTVApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9TS0lQKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWRlYnVnLmMgYi9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYwppbmRleCA2YWJkMDM2Li5jZDRlY2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYwpAQCAtODY0LDEzICs4NjQsMTMgQEAKIAlbRVZfU05EXSA9IHNvdW5kcywJCQlbRVZfUkVQXSA9IHJlcGVhdHMsCiB9OwogCi12b2lkIGhpZF9yZXNvbHZfZXZlbnQoX191OCB0eXBlLCBfX3UxNiBjb2RlLCBzdHJ1Y3Qgc2VxX2ZpbGUgKmYpIHsKLQorc3RhdGljIHZvaWQgaGlkX3Jlc29sdl9ldmVudChfX3U4IHR5cGUsIF9fdTE2IGNvZGUsIHN0cnVjdCBzZXFfZmlsZSAqZikKK3sKIAlzZXFfcHJpbnRmKGYsICIlcy4lcyIsIGV2ZW50c1t0eXBlXSA/IGV2ZW50c1t0eXBlXSA6ICI/IiwKIAkJbmFtZXNbdHlwZV0gPyAobmFtZXNbdHlwZV1bY29kZV0gPyBuYW1lc1t0eXBlXVtjb2RlXSA6ICI/IikgOiAiPyIpOwogfQogCi12b2lkIGhpZF9kdW1wX2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IHNlcV9maWxlICpmKQorc3RhdGljIHZvaWQgaGlkX2R1bXBfaW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3Qgc2VxX2ZpbGUgKmYpCiB7CiAJaW50IGksIGosIGs7CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaCBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAppbmRleCAwMTAzNjhlLi43MmMwNWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCkBAIC0xOCw2ICsxOCw5IEBACiAjaWZuZGVmIEhJRF9JRFNfSF9GSUxFCiAjZGVmaW5lIEhJRF9JRFNfSF9GSUxFCiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF8zTQkJMHgwNTk2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfM00xOTY4CQkweDA1MDAKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX0E0VEVDSAkJMHgwOWRhCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQTRURUNIX1dDUDMyUFUJMHgwMDA2CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQTRURUNIX1g1XzAwNUQJMHgwMDBhCkBAIC01Niw2ICs1OSw3IEBACiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BUFBMRQkJMHgwNWFjCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfTUlHSFRZTU9VU0UJMHgwMzA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfTUFHSUNNT1VTRQkweDAzMGQKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9BTlNJCTB4MDIwZQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0ZPVU5UQUlOX0lTTwkweDAyMGYKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVJfQU5TSQkweDAyMTQKQEAgLTk2LDkgKzEwMCwxMiBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0FUVl9JUkNPTlRST0wJMHg4MjQxCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfSVJDT05UUk9MNAkweDgyNDIKIAotI2RlZmluZSBVU0JfVkVORE9SX0lEX0FTVVMJCTB4MGIwNQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FTVVNfTENNCQkweDE3MjYKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BU1VTX0xDTTIJCTB4MTc1YgorI2RlZmluZSBVU0JfVkVORE9SX0lEX0FTVVMJCTB4MDQ4NgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FTVVNfVDkxTVQJMHgwMTg1CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BU1VTVEVLCQkweDBiMDUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BU1VTVEVLX0xDTQkweDE3MjYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BU1VTVEVLX0xDTTIJMHgxNzViCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BVEVOCQkweDA1NTcKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BVEVOX1VDMTAwS00JMHgyMDA0CkBAIC0xNjksNiArMTc2LDkgQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9FU1NFTlRJQUxfUkVBTElUWQkweDBkN2YKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9FU1NFTlRJQUxfUkVBTElUWV9QNSAweDAxMDAKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX0VUVVJCT1RPVUNICTB4MjJiOQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0VUVVJCT1RPVUNICTB4MDAwNgorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfRVRUCQkweDA2NjQKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9UQzVVSAkJMHgwMzA5CiAKQEAgLTMwMyw2ICszMTMsNyBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JVTUJMRVBBRDJfMgkweGMyMTkKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSU5HTUFOX0YzRAkweGMyODMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9GT1JDRTNEX1BSTwkweGMyODYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9GTElHSFRfU1lTVEVNX0c5NDAJMHhjMjg3CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0hFRUwJMHhjMjk0CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0lOR01BTl9GRkcJMHhjMjkzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTU9NT19XSEVFTAkweGMyOTUKQEAgLTM2NSw2ICszNzYsOSBAQAogI2RlZmluZSBVU0JfVkVORE9SX0lEX09OVFJBSwkJMHgwYTA3CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMAkweDAwNjQKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX09SVEVLCQkweDA1YTQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9PUlRFS19XS0IyMDAwCTB4MjAwMAorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfUEFOSklUCQkweDEzNGMKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1BBTlRIRVJMT1JECTB4MDgxMApAQCAtMzgyLDkgKzM5NiwxNiBAQAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1BPV0VSQ09NCQkweDBkOWYKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9QT1dFUkNPTV9VUFMJMHgwMDAyCiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9QUk9ESUdFCQkweDA1YWYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9QUk9ESUdFX0NPUkRMRVNTCTB4MzA2MgorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfU0FJVEVLCQkweDA2YTMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TQUlURUtfUlVNQkxFUEFECTB4ZmYxNwogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfUVVBTlRBCQkweDA0MDgKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9RVUFOVEFfT1BUSUNBTF9UT1VDSAkweDMwMDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9QSVhBUlRfSU1BR0lOR19JTkNfT1BUSUNBTF9UT1VDSF9TQ1JFRU4JMHgzMDAxCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TQU1TVU5HCQkweDA0MTkKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TQU1TVU5HX0lSX1JFTU9URQkweDAwMDEKIApAQCAtMzk2LDE4ICs0MTcsMjAgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fRklSU1QJMHgwMDM0CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xBU1QJMHgwMDQ2CiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TVEFOVFVNCQkweDFmODcKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NVFAJCTB4MDAwMgorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfU1VOCQkweDA0MzAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9SQVJJVEFOX0tWTV9ET05HTEUJMHhjZGFiCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TVU5QTFVTCQkweDA0ZmMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TVU5QTFVTX1dERVNLVE9QCTB4MDVkOAogCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfVEVOWAkJMHgxMTMwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfVEVOWF9JQlVERFkxCTB4MDAwMQotI2RlZmluZSBVU0JfREVWSUNFX0lEX1RFTlhfSUJVRERZMgkweDAwMDIKLQogI2RlZmluZSBVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUgkweDA0NGYKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX1RPVUNIUEFDSwkJMHgxYmZkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVE9VQ0hQQUNLX1JUUwkweDE2ODgKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX1RPUE1BWAkJMHgwNjYzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVE9QTUFYX0NPQlJBUEFECTB4MDEwMwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYyBiL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCmluZGV4IDU4NjJiMGYuLjc5ZDllZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSBWb2p0ZWNoIFBhdmxpawotICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEppcmkgS29zaW5hCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMTAgSmlyaSBLb3NpbmEKICAqCiAgKiAgSElEIHRvIExpbnV4IElucHV0IG1hcHBpbmcKICAqLwpAQCAtMTkzLDEyICsxOTMsMTcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEhJRF9VUF9CVVRUT046Ci0JCWNvZGUgPSAoKHVzYWdlLT5oaWQgLSAxKSAmIDB4Zik7CisJCWNvZGUgPSAoKHVzYWdlLT5oaWQgLSAxKSAmIEhJRF9VU0FHRSk7CiAKIAkJc3dpdGNoIChmaWVsZC0+YXBwbGljYXRpb24pIHsKIAkJY2FzZSBISURfR0RfTU9VU0U6CiAJCWNhc2UgSElEX0dEX1BPSU5URVI6ICBjb2RlICs9IDB4MTEwOyBicmVhazsKLQkJY2FzZSBISURfR0RfSk9ZU1RJQ0s6IGNvZGUgKz0gMHgxMjA7IGJyZWFrOworCQljYXNlIEhJRF9HRF9KT1lTVElDSzoKKwkJCQkgICAgICBpZiAoY29kZSA8PSAweGYpCisJCQkJCSAgICAgIGNvZGUgKz0gQlROX0pPWVNUSUNLOworCQkJCSAgICAgIGVsc2UKKwkJCQkJICAgICAgY29kZSArPSBCVE5fVFJJR0dFUl9IQVBQWTsKKwkJCQkgICAgICBicmVhazsKIAkJY2FzZSBISURfR0RfR0FNRVBBRDogIGNvZGUgKz0gMHgxMzA7IGJyZWFrOwogCQlkZWZhdWx0OgogCQkJc3dpdGNoIChmaWVsZC0+cGh5c2ljYWwpIHsKQEAgLTQwMCw2ICs0MDUsNyBAQAogCQljYXNlIDB4MTkyOiBtYXBfa2V5X2NsZWFyKEtFWV9DQUxDKTsJCWJyZWFrOwogCQljYXNlIDB4MTk0OiBtYXBfa2V5X2NsZWFyKEtFWV9GSUxFKTsJCWJyZWFrOwogCQljYXNlIDB4MTk2OiBtYXBfa2V5X2NsZWFyKEtFWV9XV1cpOwkJYnJlYWs7CisJCWNhc2UgMHgxOTk6IG1hcF9rZXlfY2xlYXIoS0VZX0NIQVQpOwkJYnJlYWs7CiAJCWNhc2UgMHgxOWM6IG1hcF9rZXlfY2xlYXIoS0VZX0xPR09GRik7CQlicmVhazsKIAkJY2FzZSAweDE5ZTogbWFwX2tleV9jbGVhcihLRVlfQ09GRkVFKTsJCWJyZWFrOwogCQljYXNlIDB4MWE2OiBtYXBfa2V5X2NsZWFyKEtFWV9IRUxQKTsJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnLmMgYi9kcml2ZXJzL2hpZC9oaWQtbGcuYwppbmRleCA5ZmNkM2QwLi4zNjc3YzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbGcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbGcuYwpAQCAtMzQsNiArMzQsNyBAQAogI2RlZmluZSBMR19GRgkJCTB4MjAwCiAjZGVmaW5lIExHX0ZGMgkJCTB4NDAwCiAjZGVmaW5lIExHX1JERVNDX1JFTF9BQlMJMHg4MDAKKyNkZWZpbmUgTEdfRkYzCQkJMHgxMDAwCiAKIC8qCiAgKiBDZXJ0YWluIExvZ2l0ZWNoIGtleWJvYXJkcyBzZW5kIGluIHJlcG9ydCAjMyBrZXlzIHdoaWNoIGFyZSBmYXIKQEAgLTI2Niw3ICsyNjcsNyBAQAogCQlnb3RvIGVycl9mcmVlOwogCX0KIAotCWlmIChxdWlya3MgJiAoTEdfRkYgfCBMR19GRjIpKQorCWlmIChxdWlya3MgJiAoTEdfRkYgfCBMR19GRjIgfCBMR19GRjMpKQogCQljb25uZWN0X21hc2sgJj0gfkhJRF9DT05ORUNUX0ZGOwogCiAJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIGNvbm5lY3RfbWFzayk7CkBAIC0yNzksNiArMjgwLDggQEAKIAkJbGdmZl9pbml0KGhkZXYpOwogCWlmIChxdWlya3MgJiBMR19GRjIpCiAJCWxnMmZmX2luaXQoaGRldik7CisJaWYgKHF1aXJrcyAmIExHX0ZGMykKKwkJbGczZmZfaW5pdChoZGV2KTsKIAogCXJldHVybiAwOwogZXJyX2ZyZWU6CkBAIC0zMzEsNiArMzM0LDggQEAKIAkJLmRyaXZlcl9kYXRhID0gTEdfRkYgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUlVNQkxFUEFEMiksCiAJCS5kcml2ZXJfZGF0YSA9IExHX0ZGMiB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9GTElHSFRfU1lTVEVNX0c5NDApLAorCQkuZHJpdmVyX2RhdGEgPSBMR19GRjMgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfU1BBQ0VOQVZJR0FUT1IpLAogCQkuZHJpdmVyX2RhdGEgPSBMR19SREVTQ19SRUxfQUJTIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX1NQQUNFVFJBVkVMTEVSKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1sZy5oIGIvZHJpdmVycy9oaWQvaGlkLWxnLmgKaW5kZXggYmYzMTU5Mi4uY2UyYWM4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWxnLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLWxnLmgKQEAgLTEzLDQgKzEzLDEwIEBACiBzdGF0aWMgaW5saW5lIGludCBsZzJmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KSB7IHJldHVybiAtMTsgfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTE9HSUc5NDBfRkYKK2ludCBsZzNmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBsZzNmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KSB7IHJldHVybiAtMTsgfQorI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnM2ZmLmMgYi9kcml2ZXJzL2hpZC9oaWQtbGczZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDAyODMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLWxnM2ZmLmMKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiAgRm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgTG9naXRlY2ggRmxpZ2h0IFN5c3RlbSBHOTQwCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBHYXJ5IFN0ZWluIDxMb3JkQ25pZGFyaWFuQGdtYWlsLmNvbT4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorCisjaW5jbHVkZSAidXNiaGlkL3VzYmhpZC5oIgorI2luY2x1ZGUgImhpZC1sZy5oIgorCisvKgorICogRzk0MCBUaGVvcnkgb2YgT3BlcmF0aW9uIChmcm9tIGV4cGVyaW1lbnRhdGlvbikKKyAqCisgKiBUaGVyZSBhcmUgNjMgZmllbGRzIChvbmx5IDMgb2YgdGhlbSBjdXJyZW50bHkgdXNlZCkKKyAqIDAgLSBzZWVtcyB0byBiZSBjb21tYW5kIGZpZWxkCisgKiAxIC0gMzAgZGVhbCB3aXRoIHRoZSB4IGF4aXMKKyAqIDMxIC02MCBkZWFsIHdpdGggdGhlIHkgYXhpcworICoKKyAqIEZpZWxkIDEgaXMgeCBheGlzIGNvbnN0YW50IGZvcmNlCisgKiBGaWVsZCAzMSBpcyB5IGF4aXMgY29uc3RhbnQgZm9yY2UKKyAqCisgKiBvdGhlciBpbnRlcmVzdGluZyBmaWVsZHMgMSwyLDMsNCBvbiB4IGF4aXMKKyAqIChzYW1lIGZvciAzMSwzMiwzMywzNCBvbiB5IGF4aXMpCisgKgorICogMCAwIDEyNyAxMjcgbWFrZXMgdGhlIGpveXN0aWNrIGF1dG9jZW50ZXIgaGFyZAorICoKKyAqIDEyNyAwIDEyNyAxMjcgbWFrZXMgdGhlIGpveXN0aWNrIGxvb3NlIG9uIHRoZSByaWdodCwKKyAqIGJ1dCBzdG9wcyBhbGwgbW92ZW1udCBsZWZ0CisgKgorICogLTEyNyAwIC0xMjcgLTEyNyBtYWtlcyB0aGUgam95c3RpY2sgbG9vc2Ugb24gdGhlIGxlZnQsCisgKiBidXQgc3RvcHMgYWxsIG1vdmVtZW50IHJpZ2h0CisgKgorICogMCAwIC0xMjcgLTEyNyBtYWtlcyB0aGUgam95c3RpY2sgcmF0dGxlIHZlcnkgaGFyZAorICoKKyAqIEknbSBzdXJlIHRoZXNlIGFyZSBlZmZlY3RzIHRoYXQgSSBkb24ndCBrbm93IGVub3VnaCBhYm91dCB0aGVtCisgKi8KKworc3RydWN0IGxnM2ZmX2RldmljZSB7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKK307CisKK3N0YXRpYyBpbnQgaGlkX2xnM2ZmX3BsYXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAorCQkJIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvcnRfbGlzdCA9ICZoaWQtPnJlcG9ydF9lbnVtW0hJRF9PVVRQVVRfUkVQT1JUXS5yZXBvcnRfbGlzdDsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0ID0gbGlzdF9lbnRyeShyZXBvcnRfbGlzdC0+bmV4dCwgc3RydWN0IGhpZF9yZXBvcnQsIGxpc3QpOworCWludCB4LCB5OworCisvKgorICogTWF4dXNhZ2Ugc2hvdWxkIGFsd2F5cyBiZSA2MyAobWF4aW11bSBmaWVsZHMpCisgKiBsaWtlbHkgYSBiZXR0ZXIgd2F5IHRvIGVuc3VyZSB0aGlzIGRhdGEgaXMgY2xlYW4KKyAqLworCW1lbXNldChyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZSwgMCwgc2l6ZW9mKF9fczMyKSpyZXBvcnQtPmZpZWxkWzBdLT5tYXh1c2FnZSk7CisKKwlzd2l0Y2ggKGVmZmVjdC0+dHlwZSkgeworCWNhc2UgRkZfQ09OU1RBTlQ6CisvKgorICogQWxyZWFkeSBjbGFtcGVkIGluIGZmX21lbWxlc3MKKyAqIDAgaXMgY2VudGVyIChkaWZmZXJlbnQgdGhlbiBvdGhlciBsb2dpdGVjaCkKKyAqLworCQl4ID0gZWZmZWN0LT51LnJhbXAuc3RhcnRfbGV2ZWw7CisJCXkgPSBlZmZlY3QtPnUucmFtcC5lbmRfbGV2ZWw7CisKKwkJLyogc2VuZCBjb21tYW5kIGJ5dGUgKi8KKwkJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMF0gPSAweDUxOworCisvKgorICogU2lnbiBiYWNrd2FyZHMgZnJvbSBvdGhlciBGb3JjZTNkIHBybworICogd2hpY2ggZ2V0IHJlY2FzdCBoZXJlIGluIHR3bydzIGNvbXBsZW1lbnQgOCBiaXRzCisgKi8KKwkJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMV0gPSAodW5zaWduZWQgY2hhcikoLXgpOworCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszMV0gPSAodW5zaWduZWQgY2hhcikoLXkpOworCisJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcmVwb3J0LCBVU0JfRElSX09VVCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIGhpZF9sZzNmZl9zZXRfYXV0b2NlbnRlcihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHUxNiBtYWduaXR1ZGUpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X2xpc3QgPSAmaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3Q7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCA9IGxpc3RfZW50cnkocmVwb3J0X2xpc3QtPm5leHQsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKKworLyoKKyAqIEF1dG8gQ2VudGVyaW5nIHByb2JlZCBmcm9tIGRldmljZQorICogTk9URTogZGVhZG1hbidzIHN3aXRjaCBvbiBHOTQwIG11c3QgYmUgY292ZXJlZAorICogZm9yIGVmZmVjdHMgdG8gd29yaworICovCisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMF0gPSAweDUxOworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHgwMDsKKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IDB4MDA7CisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbM10gPSAweDdGOworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzRdID0gMHg3RjsKKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszMV0gPSAweDAwOworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzMyXSA9IDB4MDA7CisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMzNdID0gMHg3RjsKKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszNF0gPSAweDdGOworCisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCByZXBvcnQsIFVTQl9ESVJfT1VUKTsKK30KKworCitzdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0IGZmM19qb3lzdGlja19hY1tdID0geworCUZGX0NPTlNUQU5ULAorCUZGX0FVVE9DRU5URVIsCisJLTEKK307CisKK2ludCBsZzNmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQgPSBsaXN0X2VudHJ5KGhpZC0+aW5wdXRzLm5leHQsIHN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOworCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0gJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGhpZGlucHV0LT5pbnB1dDsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkOworCWNvbnN0IHNpZ25lZCBzaG9ydCAqZmZfYml0cyA9IGZmM19qb3lzdGlja19hYzsKKwlpbnQgZXJyb3I7CisJaW50IGk7CisKKwkvKiBGaW5kIHRoZSByZXBvcnQgdG8gdXNlICovCisJaWYgKGxpc3RfZW1wdHkocmVwb3J0X2xpc3QpKSB7CisJCWVycl9oaWQoIk5vIG91dHB1dCByZXBvcnQgZm91bmQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIENoZWNrIHRoYXQgdGhlIHJlcG9ydCBsb29rcyBvayAqLworCXJlcG9ydCA9IGxpc3RfZW50cnkocmVwb3J0X2xpc3QtPm5leHQsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKKwlpZiAoIXJlcG9ydCkgeworCQllcnJfaGlkKCJOVUxMIG91dHB1dCByZXBvcnQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZpZWxkID0gcmVwb3J0LT5maWVsZFswXTsKKwlpZiAoIWZpZWxkKSB7CisJCWVycl9oaWQoIk5VTEwgZmllbGQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIEFzc3VtZSBzaW5nbGUgZml4ZWQgZGV2aWNlIEc5NDAgKi8KKwlmb3IgKGkgPSAwOyBmZl9iaXRzW2ldID49IDA7IGkrKykKKwkJc2V0X2JpdChmZl9iaXRzW2ldLCBkZXYtPmZmYml0KTsKKworCWVycm9yID0gaW5wdXRfZmZfY3JlYXRlX21lbWxlc3MoZGV2LCBOVUxMLCBoaWRfbGczZmZfcGxheSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlpZiAodGVzdF9iaXQoRkZfQVVUT0NFTlRFUiwgZGV2LT5mZmJpdCkpCisJCWRldi0+ZmYtPnNldF9hdXRvY2VudGVyID0gaGlkX2xnM2ZmX3NldF9hdXRvY2VudGVyOworCisJZGV2X2luZm8oJmhpZC0+ZGV2LCAiRm9yY2UgZmVlZGJhY2sgZm9yIExvZ2l0ZWNoIEZsaWdodCBTeXN0ZW0gRzk0MCBieSAiCisJCQkiR2FyeSBTdGVpbiA8TG9yZENuaWRhcmlhbkBnbWFpbC5jb20+XG4iKTsKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnZmYuYyBiL2RyaXZlcnMvaGlkL2hpZC1sZ2ZmLmMKaW5kZXggOTg3YWJlYi4uNjExNDJiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWxnZmYuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbGdmZi5jCkBAIC02Nyw2ICs2Nyw3IEBACiAJeyAweDA0NmQsIDB4YzIxOSwgZmZfcnVtYmxlIH0sCiAJeyAweDA0NmQsIDB4YzI4MywgZmZfam95c3RpY2sgfSwKIAl7IDB4MDQ2ZCwgMHhjMjg2LCBmZl9qb3lzdGlja19hYyB9LAorCXsgMHgwNDZkLCAweGMyODcsIGZmX2pveXN0aWNrX2FjIH0sCiAJeyAweDA0NmQsIDB4YzI5MywgZmZfam95c3RpY2sgfSwKIAl7IDB4MDQ2ZCwgMHhjMjk0LCBmZl93aGVlbCB9LAogCXsgMHgwNDZkLCAweGMyOTUsIGZmX2pveXN0aWNrIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbWFnaWNtb3VzZS5jIGIvZHJpdmVycy9oaWQvaGlkLW1hZ2ljbW91c2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTNhOTRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLW1hZ2ljbW91c2UuYwpAQCAtMCwwICsxLDQ0OSBAQAorLyoKKyAqICAgQXBwbGUgIk1hZ2ljIiBXaXJlbGVzcyBNb3VzZSBkcml2ZXIKKyAqCisgKiAgIENvcHlyaWdodCAoYykgMjAxMCBNaWNoYWVsIFBvb2xlIDxtZHBvb2xlQHRyb2lsdXMub3JnPgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworc3RhdGljIGJvb2wgZW11bGF0ZV8zYnV0dG9uID0gdHJ1ZTsKK21vZHVsZV9wYXJhbShlbXVsYXRlXzNidXR0b24sIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhlbXVsYXRlXzNidXR0b24sICJFbXVsYXRlIGEgbWlkZGxlIGJ1dHRvbiIpOworCitzdGF0aWMgaW50IG1pZGRsZV9idXR0b25fc3RhcnQgPSAtMzUwOworc3RhdGljIGludCBtaWRkbGVfYnV0dG9uX3N0b3AgPSArMzUwOworCitzdGF0aWMgYm9vbCBlbXVsYXRlX3Njcm9sbF93aGVlbCA9IHRydWU7Cittb2R1bGVfcGFyYW0oZW11bGF0ZV9zY3JvbGxfd2hlZWwsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhlbXVsYXRlX3Njcm9sbF93aGVlbCwgIkVtdWxhdGUgYSBzY3JvbGwgd2hlZWwiKTsKKworc3RhdGljIGJvb2wgcmVwb3J0X3RvdWNoZXMgPSB0cnVlOworbW9kdWxlX3BhcmFtKHJlcG9ydF90b3VjaGVzLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocmVwb3J0X3RvdWNoZXMsICJFbWl0IHRvdWNoIHJlY29yZHMgKG90aGVyd2lzZSwgb25seSB1c2UgdGhlbSBmb3IgZW11bGF0aW9uKSIpOworCitzdGF0aWMgYm9vbCByZXBvcnRfdW5kZWNpcGhlcmVkOworbW9kdWxlX3BhcmFtKHJlcG9ydF91bmRlY2lwaGVyZWQsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhyZXBvcnRfdW5kZWNpcGhlcmVkLCAiUmVwb3J0IHVuZGVjaXBoZXJlZCBtdWx0aS10b3VjaCBzdGF0ZSBmaWVsZCB1c2luZyBhIE1TQ19SQVcgZXZlbnQiKTsKKworI2RlZmluZSBUT1VDSF9SRVBPUlRfSUQgICAweDI5CisvKiBUaGVzZSBkZWZpbml0aW9ucyBhcmUgbm90IHByZWNpc2UsIGJ1dCB0aGV5J3JlIGNsb3NlIGVub3VnaC4gIChCaXRzCisgKiAweDAzIHNlZW0gdG8gaW5kaWNhdGUgdGhlIGFzcGVjdCByYXRpbyBvZiB0aGUgdG91Y2gsIGJpdHMgMHg3MCBzZWVtCisgKiB0byBiZSBzb21lIGtpbmQgb2YgYml0IG1hc2sgLS0gMHgyMCBtYXkgYmUgYSBuZWFyLWZpZWxkIHJlYWRpbmcsCisgKiBhbmQgMHg0MCBpcyBhY3R1YWwgY29udGFjdCwgYW5kIDB4MTAgbWF5IGJlIGEgc3RhcnQvc3RvcCBvciBjaGFuZ2UKKyAqIGluZGljYXRpb24uKQorICovCisjZGVmaW5lIFRPVUNIX1NUQVRFX01BU0sgIDB4ZjAKKyNkZWZpbmUgVE9VQ0hfU1RBVEVfTk9ORSAgMHgwMAorI2RlZmluZSBUT1VDSF9TVEFURV9TVEFSVCAweDMwCisjZGVmaW5lIFRPVUNIX1NUQVRFX0RSQUcgIDB4NDAKKworLyoqCisgKiBzdHJ1Y3QgbWFnaWNtb3VzZV9zYyAtIFRyYWNrcyBNYWdpYyBNb3VzZS1zcGVjaWZpYyBkYXRhLgorICogQGlucHV0OiBJbnB1dCBkZXZpY2UgdGhyb3VnaCB3aGljaCB3ZSByZXBvcnQgZXZlbnRzLgorICogQHF1aXJrczogQ3VycmVudGx5IHVudXNlZC4KKyAqIEBsYXN0X3RpbWVzdGFtcDogVGltZXN0YW1wIGZyb20gbW9zdCByZWNlbnQgKDE4LWJpdCkgdG91Y2ggcmVwb3J0CisgKiAgICAgKHVuaXRzIG9mIG1pbGxpc2Vjb25kcyBvdmVyIHNob3J0IHdpbmRvd3MsIGJ1dCBzZWVtcyB0bworICogICAgIGluY3JlYXNlIGZhc3RlciB3aGVuIHRoZXJlIGFyZSBubyB0b3VjaGVzKS4KKyAqIEBkZWx0YV90aW1lOiAxOC1iaXQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gbW9zdCByZWNlbnQgdG91Y2gKKyAqICAgICByZXBvcnRzIGZyb20gdGhlIG1vdXNlLgorICogQG50b3VjaGVzOiBOdW1iZXIgb2YgdG91Y2hlcyBpbiBtb3N0IHJlY2VudCB0b3VjaCByZXBvcnQuCisgKiBAc2Nyb2xsX2FjY2VsOiBOdW1iZXIgb2YgY29uc2VjdXRpdmUgc2Nyb2xsIG1vdGlvbnMuCisgKiBAc2Nyb2xsX2ppZmZpZXM6IFRpbWUgb2YgbGFzdCBzY3JvbGwgbW90aW9uLgorICogQHRvdWNoZXM6IE1vc3QgcmVjZW50IGRhdGEgZm9yIGEgdG91Y2gsIGluZGV4ZWQgYnkgdHJhY2tpbmcgSUQuCisgKiBAdHJhY2tpbmdfaWRzOiBNYXBwaW5nIG9mIGN1cnJlbnQgdG91Y2ggaW5wdXQgZGF0YSB0byBAdG91Y2hlcy4KKyAqLworc3RydWN0IG1hZ2ljbW91c2Vfc2MgeworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCXVuc2lnbmVkIGxvbmcgcXVpcmtzOworCisJaW50IGxhc3RfdGltZXN0YW1wOworCWludCBkZWx0YV90aW1lOworCWludCBudG91Y2hlczsKKwlpbnQgc2Nyb2xsX2FjY2VsOworCXVuc2lnbmVkIGxvbmcgc2Nyb2xsX2ppZmZpZXM7CisKKwlzdHJ1Y3QgeworCQlzaG9ydCB4OworCQlzaG9ydCB5OworCQlzaG9ydCBzY3JvbGxfeTsKKwkJdTggc2l6ZTsKKwl9IHRvdWNoZXNbMTZdOworCWludCB0cmFja2luZ19pZHNbMTZdOworfTsKKworc3RhdGljIGludCBtYWdpY21vdXNlX2Zpcm1fdG91Y2goc3RydWN0IG1hZ2ljbW91c2Vfc2MgKm1zYykKK3sKKwlpbnQgdG91Y2ggPSAtMTsKKwlpbnQgaWk7CisKKwkvKiBJZiB0aGVyZSBpcyBvbmx5IG9uZSAiZmlybSIgdG91Y2gsIHNldCB0b3VjaCB0byBpdHMKKwkgKiB0cmFja2luZyBJRC4KKwkgKi8KKwlmb3IgKGlpID0gMDsgaWkgPCBtc2MtPm50b3VjaGVzOyBpaSsrKSB7CisJCWludCBpZHggPSBtc2MtPnRyYWNraW5nX2lkc1tpaV07CisJCWlmIChtc2MtPnRvdWNoZXNbaWR4XS5zaXplIDwgOCkgeworCQkJLyogSWdub3JlIHRoaXMgdG91Y2guICovCisJCX0gZWxzZSBpZiAodG91Y2ggPj0gMCkgeworCQkJdG91Y2ggPSAtMTsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJdG91Y2ggPSBpZHg7CisJCX0KKwl9CisKKwlyZXR1cm4gdG91Y2g7Cit9CisKK3N0YXRpYyB2b2lkIG1hZ2ljbW91c2VfZW1pdF9idXR0b25zKHN0cnVjdCBtYWdpY21vdXNlX3NjICptc2MsIGludCBzdGF0ZSkKK3sKKwlpbnQgbGFzdF9zdGF0ZSA9IHRlc3RfYml0KEJUTl9MRUZULCBtc2MtPmlucHV0LT5rZXkpIDw8IDAgfAorCQl0ZXN0X2JpdChCVE5fUklHSFQsIG1zYy0+aW5wdXQtPmtleSkgPDwgMSB8CisJCXRlc3RfYml0KEJUTl9NSURETEUsIG1zYy0+aW5wdXQtPmtleSkgPDwgMjsKKworCWlmIChlbXVsYXRlXzNidXR0b24pIHsKKwkJaW50IGlkOworCisJCS8qIElmIHNvbWUgYnV0dG9uIHdhcyBwcmVzc2VkIGJlZm9yZSwga2VlcCBpdCBoZWxkCisJCSAqIGRvd24uICBPdGhlcndpc2UsIGlmIHRoZXJlJ3MgZXhhY3RseSBvbmUgZmlybQorCQkgKiB0b3VjaCwgdXNlIHRoYXQgdG8gb3ZlcnJpZGUgdGhlIG1vdXNlJ3MgZ3Vlc3MuCisJCSAqLworCQlpZiAoc3RhdGUgPT0gMCkgeworCQkJLyogVGhlIGJ1dHRvbiB3YXMgcmVsZWFzZWQuICovCisJCX0gZWxzZSBpZiAobGFzdF9zdGF0ZSAhPSAwKSB7CisJCQlzdGF0ZSA9IGxhc3Rfc3RhdGU7CisJCX0gZWxzZSBpZiAoKGlkID0gbWFnaWNtb3VzZV9maXJtX3RvdWNoKG1zYykpID49IDApIHsKKwkJCWludCB4ID0gbXNjLT50b3VjaGVzW2lkXS54OworCQkJaWYgKHggPCBtaWRkbGVfYnV0dG9uX3N0YXJ0KQorCQkJCXN0YXRlID0gMTsKKwkJCWVsc2UgaWYgKHggPiBtaWRkbGVfYnV0dG9uX3N0b3ApCisJCQkJc3RhdGUgPSAyOworCQkJZWxzZQorCQkJCXN0YXRlID0gNDsKKwkJfSAvKiBlbHNlOiB3ZSBrZWVwIHRoZSBtb3VzZSdzIGd1ZXNzICovCisKKwkJaW5wdXRfcmVwb3J0X2tleShtc2MtPmlucHV0LCBCVE5fTUlERExFLCBzdGF0ZSAmIDQpOworCX0KKworCWlucHV0X3JlcG9ydF9rZXkobXNjLT5pbnB1dCwgQlROX0xFRlQsIHN0YXRlICYgMSk7CisJaW5wdXRfcmVwb3J0X2tleShtc2MtPmlucHV0LCBCVE5fUklHSFQsIHN0YXRlICYgMik7CisKKwlpZiAoc3RhdGUgIT0gbGFzdF9zdGF0ZSkKKwkJbXNjLT5zY3JvbGxfYWNjZWwgPSAwOworfQorCitzdGF0aWMgdm9pZCBtYWdpY21vdXNlX2VtaXRfdG91Y2goc3RydWN0IG1hZ2ljbW91c2Vfc2MgKm1zYywgaW50IHJhd19pZCwgdTggKnRkYXRhKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gbXNjLT5pbnB1dDsKKwlfX3MzMiB4X3kgPSB0ZGF0YVswXSA8PCA4IHwgdGRhdGFbMV0gPDwgMTYgfCB0ZGF0YVsyXSA8PCAyNDsKKwlpbnQgbWlzYyA9IHRkYXRhWzVdIHwgdGRhdGFbNl0gPDwgODsKKwlpbnQgaWQgPSAobWlzYyA+PiA2KSAmIDE1OworCWludCB4ID0geF95IDw8IDEyID4+IDIwOworCWludCB5ID0gLSh4X3kgPj4gMjApOworCisJLyogU3RvcmUgdHJhY2tpbmcgSUQgYW5kIG90aGVyIGZpZWxkcy4gKi8KKwltc2MtPnRyYWNraW5nX2lkc1tyYXdfaWRdID0gaWQ7CisJbXNjLT50b3VjaGVzW2lkXS54ID0geDsKKwltc2MtPnRvdWNoZXNbaWRdLnkgPSB5OworCW1zYy0+dG91Y2hlc1tpZF0uc2l6ZSA9IG1pc2MgJiA2MzsKKworCS8qIElmIHJlcXVlc3RlZCwgZW11bGF0ZSBhIHNjcm9sbCB3aGVlbCBieSBkZXRlY3Rpbmcgc21hbGwKKwkgKiB2ZXJ0aWNhbCB0b3VjaCBtb3Rpb25zIGFsb25nIHRoZSBtaWRkbGUgb2YgdGhlIG1vdXNlLgorCSAqLworCWlmIChlbXVsYXRlX3Njcm9sbF93aGVlbCAmJgorCSAgICBtaWRkbGVfYnV0dG9uX3N0YXJ0IDwgeCAmJiB4IDwgbWlkZGxlX2J1dHRvbl9zdG9wKSB7CisJCXN0YXRpYyBjb25zdCBpbnQgYWNjZWxfcHJvZmlsZVtdID0geworCQkJMjU2LCAyMjgsIDE5MiwgMTYwLCAxMjgsIDk2LCA2NCwgMzIsCisJCX07CisJCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKKwkJaW50IHN0ZXAgPSBtc2MtPnRvdWNoZXNbaWRdLnNjcm9sbF95IC0geTsKKworCQkvKiBSZXNldCBhY2NlbGVyYXRpb24gYWZ0ZXIgaGFsZiBhIHNlY29uZC4gKi8KKwkJaWYgKHRpbWVfYWZ0ZXIobm93LCBtc2MtPnNjcm9sbF9qaWZmaWVzICsgSFogLyAyKSkKKwkJCW1zYy0+c2Nyb2xsX2FjY2VsID0gMDsKKworCQkvKiBDYWxjdWxhdGUgYW5kIGFwcGx5IHRoZSBzY3JvbGwgbW90aW9uLiAqLworCQlzd2l0Y2ggKHRkYXRhWzddICYgVE9VQ0hfU1RBVEVfTUFTSykgeworCQljYXNlIFRPVUNIX1NUQVRFX1NUQVJUOgorCQkJbXNjLT50b3VjaGVzW2lkXS5zY3JvbGxfeSA9IHk7CisJCQltc2MtPnNjcm9sbF9hY2NlbCA9IG1pbl90KGludCwgbXNjLT5zY3JvbGxfYWNjZWwgKyAxLAorCQkJCQkJQVJSQVlfU0laRShhY2NlbF9wcm9maWxlKSAtIDEpOworCQkJYnJlYWs7CisJCWNhc2UgVE9VQ0hfU1RBVEVfRFJBRzoKKwkJCXN0ZXAgPSBzdGVwIC8gYWNjZWxfcHJvZmlsZVttc2MtPnNjcm9sbF9hY2NlbF07CisJCQlpZiAoc3RlcCAhPSAwKSB7CisJCQkJbXNjLT50b3VjaGVzW2lkXS5zY3JvbGxfeSA9IHk7CisJCQkJbXNjLT5zY3JvbGxfamlmZmllcyA9IG5vdzsKKwkJCQlpbnB1dF9yZXBvcnRfcmVsKGlucHV0LCBSRUxfV0hFRUwsIHN0ZXApOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBHZW5lcmF0ZSB0aGUgaW5wdXQgZXZlbnRzIGZvciB0aGlzIHRvdWNoLiAqLworCWlmIChyZXBvcnRfdG91Y2hlcykgeworCQlpbnQgb3JpZW50YXRpb24gPSAobWlzYyA+PiAxMCkgLSAzMjsKKworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfVFJBQ0tJTkdfSUQsIGlkKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1RPVUNIX01BSk9SLCB0ZGF0YVszXSk7CisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9UT1VDSF9NSU5PUiwgdGRhdGFbNF0pOworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfT1JJRU5UQVRJT04sIG9yaWVudGF0aW9uKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1gsIHgpOworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWSwgeSk7CisKKwkJaWYgKHJlcG9ydF91bmRlY2lwaGVyZWQpCisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfTVNDLCBNU0NfUkFXLCB0ZGF0YVs3XSk7CisKKwkJaW5wdXRfbXRfc3luYyhpbnB1dCk7CisJfQorfQorCitzdGF0aWMgaW50IG1hZ2ljbW91c2VfcmF3X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LAorCQlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCB1OCAqZGF0YSwgaW50IHNpemUpCit7CisJc3RydWN0IG1hZ2ljbW91c2Vfc2MgKm1zYyA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IG1zYy0+aW5wdXQ7CisJaW50IHgsIHksIHRzLCBpaSwgY2xpY2tzOworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSAweDEwOgorCQlpZiAoc2l6ZSAhPSA2KQorCQkJcmV0dXJuIDA7CisJCXggPSAoX19zMTYpKGRhdGFbMl0gfCBkYXRhWzNdIDw8IDgpOworCQl5ID0gKF9fczE2KShkYXRhWzRdIHwgZGF0YVs1XSA8PCA4KTsKKwkJY2xpY2tzID0gZGF0YVsxXTsKKwkJYnJlYWs7CisJY2FzZSBUT1VDSF9SRVBPUlRfSUQ6CisJCS8qIEV4cGVjdCBzaXggYnl0ZXMgb2YgcHJlZml4LCBhbmQgTio4IGJ5dGVzIG9mIHRvdWNoIGRhdGEuICovCisJCWlmIChzaXplIDwgNiB8fCAoKHNpemUgLSA2KSAlIDgpICE9IDApCisJCQlyZXR1cm4gMDsKKwkJdHMgPSBkYXRhWzNdID4+IDYgfCBkYXRhWzRdIDw8IDIgfCBkYXRhWzVdIDw8IDEwOworCQltc2MtPmRlbHRhX3RpbWUgPSAodHMgLSBtc2MtPmxhc3RfdGltZXN0YW1wKSAmIDB4M2ZmZmY7CisJCW1zYy0+bGFzdF90aW1lc3RhbXAgPSB0czsKKwkJbXNjLT5udG91Y2hlcyA9IChzaXplIC0gNikgLyA4OworCQlmb3IgKGlpID0gMDsgaWkgPCBtc2MtPm50b3VjaGVzOyBpaSsrKQorCQkJbWFnaWNtb3VzZV9lbWl0X3RvdWNoKG1zYywgaWksIGRhdGEgKyBpaSAqIDggKyA2KTsKKwkJLyogV2hlbiBlbXVsYXRpbmcgdGhyZWUtYnV0dG9uIG1vZGUsIGl0IGlzIGltcG9ydGFudAorCQkgKiB0byBoYXZlIHRoZSBjdXJyZW50IHRvdWNoIGluZm9ybWF0aW9uIGJlZm9yZQorCQkgKiBnZW5lcmF0aW5nIGEgY2xpY2sgZXZlbnQuCisJCSAqLworCQl4ID0gKHNpZ25lZCBjaGFyKWRhdGFbMV07CisJCXkgPSAoc2lnbmVkIGNoYXIpZGF0YVsyXTsKKwkJY2xpY2tzID0gZGF0YVszXTsKKwkJYnJlYWs7CisJY2FzZSAweDIwOiAvKiBUaGVvcmV0aWNhbGx5IGJhdHRlcnkgc3RhdHVzICgwLTEwMCksIGJ1dCBJIGhhdmUKKwkJICAgICogbmV2ZXIgc2VlbiBpdCAtLSBtYXliZSBpdCBpcyBvbmx5IHVwb24gcmVxdWVzdC4KKwkJICAgICovCisJY2FzZSAweDYwOiAvKiBVbmtub3duLCBtYXliZSBsYXNlciBvbi9vZmYuICovCisJY2FzZSAweDYxOiAvKiBMYXNlciByZWZsZWN0aW9uIHN0YXR1cyBjaGFuZ2UuCisJCSAgICAqIGRhdGFbMV06IDAgPSBzcG90dGVkLCAxID0gbG9zdAorCQkgICAgKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwltYWdpY21vdXNlX2VtaXRfYnV0dG9ucyhtc2MsIGNsaWNrcyAmIDMpOworCWlucHV0X3JlcG9ydF9yZWwoaW5wdXQsIFJFTF9YLCB4KTsKKwlpbnB1dF9yZXBvcnRfcmVsKGlucHV0LCBSRUxfWSwgeSk7CisJaW5wdXRfc3luYyhpbnB1dCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbWFnaWNtb3VzZV9pbnB1dF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBoaWQtPmxsX2RyaXZlci0+b3BlbihoaWQpOworfQorCitzdGF0aWMgdm9pZCBtYWdpY21vdXNlX2lucHV0X2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKworCWhpZC0+bGxfZHJpdmVyLT5jbG9zZShoaWQpOworfQorCitzdGF0aWMgdm9pZCBtYWdpY21vdXNlX3NldHVwX2lucHV0KHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LCBzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dCwgaGRldik7CisJaW5wdXQtPmV2ZW50ID0gaGRldi0+bGxfZHJpdmVyLT5oaWRpbnB1dF9pbnB1dF9ldmVudDsKKwlpbnB1dC0+b3BlbiA9IG1hZ2ljbW91c2VfaW5wdXRfb3BlbjsKKwlpbnB1dC0+Y2xvc2UgPSBtYWdpY21vdXNlX2lucHV0X2Nsb3NlOworCisJaW5wdXQtPm5hbWUgPSBoZGV2LT5uYW1lOworCWlucHV0LT5waHlzID0gaGRldi0+cGh5czsKKwlpbnB1dC0+dW5pcSA9IGhkZXYtPnVuaXE7CisJaW5wdXQtPmlkLmJ1c3R5cGUgPSBoZGV2LT5idXM7CisJaW5wdXQtPmlkLnZlbmRvciA9IGhkZXYtPnZlbmRvcjsKKwlpbnB1dC0+aWQucHJvZHVjdCA9IGhkZXYtPnByb2R1Y3Q7CisJaW5wdXQtPmlkLnZlcnNpb24gPSBoZGV2LT52ZXJzaW9uOworCWlucHV0LT5kZXYucGFyZW50ID0gaGRldi0+ZGV2LnBhcmVudDsKKworCV9fc2V0X2JpdChFVl9LRVksIGlucHV0LT5ldmJpdCk7CisJX19zZXRfYml0KEJUTl9MRUZULCBpbnB1dC0+a2V5Yml0KTsKKwlfX3NldF9iaXQoQlROX1JJR0hULCBpbnB1dC0+a2V5Yml0KTsKKwlpZiAoZW11bGF0ZV8zYnV0dG9uKQorCQlfX3NldF9iaXQoQlROX01JRERMRSwgaW5wdXQtPmtleWJpdCk7CisJX19zZXRfYml0KEJUTl9UT09MX0ZJTkdFUiwgaW5wdXQtPmtleWJpdCk7CisKKwlfX3NldF9iaXQoRVZfUkVMLCBpbnB1dC0+ZXZiaXQpOworCV9fc2V0X2JpdChSRUxfWCwgaW5wdXQtPnJlbGJpdCk7CisJX19zZXRfYml0KFJFTF9ZLCBpbnB1dC0+cmVsYml0KTsKKwlpZiAoZW11bGF0ZV9zY3JvbGxfd2hlZWwpCisJCV9fc2V0X2JpdChSRUxfV0hFRUwsIGlucHV0LT5yZWxiaXQpOworCisJaWYgKHJlcG9ydF90b3VjaGVzKSB7CisJCV9fc2V0X2JpdChFVl9BQlMsIGlucHV0LT5ldmJpdCk7CisKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19NVF9UUkFDS0lOR19JRCwgMCwgMTUsIDAsIDApOworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1RPVUNIX01BSk9SLCAwLCAyNTUsIDQsIDApOworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1RPVUNIX01JTk9SLCAwLCAyNTUsIDQsIDApOworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX09SSUVOVEFUSU9OLCAtMzIsIDMxLCAxLCAwKTsKKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19NVF9QT1NJVElPTl9YLCAtMTEwMCwgMTM1OCwKKwkJCQk0LCAwKTsKKwkJLyogTm90ZTogVG91Y2ggWSBwb3NpdGlvbiBmcm9tIHRoZSBkZXZpY2UgaXMgaW52ZXJ0ZWQgcmVsYXRpdmUKKwkJICogdG8gaG93IHBvaW50ZXIgbW90aW9uIGlzIHJlcG9ydGVkIChhbmQgcmVsYXRpdmUgdG8gaG93IFVTQgorCQkgKiBISUQgcmVjb21tZW5kcyB0aGUgY29vcmRpbmF0ZXMgd29yaykuICBUaGlzIGRyaXZlciBrZWVwcworCQkgKiB0aGUgb3JpZ2luIGF0IHRoZSBzYW1lIHBvc2l0aW9uLCBhbmQganVzdCB1c2VzIHRoZSBhZGRpdGl2ZQorCQkgKiBpbnZlcnNlIG9mIHRoZSByZXBvcnRlZCBZLgorCQkgKi8KKwkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19NVF9QT1NJVElPTl9ZLCAtMTU4OSwgMjA0NywKKwkJCQk0LCAwKTsKKwl9CisKKwlpZiAocmVwb3J0X3VuZGVjaXBoZXJlZCkgeworCQlfX3NldF9iaXQoRVZfTVNDLCBpbnB1dC0+ZXZiaXQpOworCQlfX3NldF9iaXQoTVNDX1JBVywgaW5wdXQtPm1zY2JpdCk7CisJfQorfQorCitzdGF0aWMgaW50IG1hZ2ljbW91c2VfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCisJY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCV9fdTggZmVhdHVyZV8xW10gPSB7IDB4ZDcsIDB4MDEgfTsKKwlfX3U4IGZlYXR1cmVfMltdID0geyAweGY4LCAweDAxLCAweDMyIH07CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJc3RydWN0IG1hZ2ljbW91c2Vfc2MgKm1zYzsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCWludCByZXQ7CisKKwltc2MgPSBremFsbG9jKHNpemVvZigqbXNjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG1zYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbid0IGFsbG9jIG1hZ2ljbW91c2UgZGVzY3JpcHRvclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1zYy0+cXVpcmtzID0gaWQtPmRyaXZlcl9kYXRhOworCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBtc2MpOworCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAibWFnaWNtb3VzZSBoaWQgcGFyc2UgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJtYWdpY21vdXNlIGh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmVwb3J0ID0gaGlkX3JlZ2lzdGVyX3JlcG9ydChoZGV2LCBISURfSU5QVVRfUkVQT1JULCBUT1VDSF9SRVBPUlRfSUQpOworCWlmICghcmVwb3J0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInVuYWJsZSB0byByZWdpc3RlciB0b3VjaCByZXBvcnRcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9zdG9wX2h3OworCX0KKwlyZXBvcnQtPnNpemUgPSA2OworCisJcmV0ID0gaGRldi0+aGlkX291dHB1dF9yYXdfcmVwb3J0KGhkZXYsIGZlYXR1cmVfMSwgc2l6ZW9mKGZlYXR1cmVfMSksCisJCQlISURfRkVBVFVSRV9SRVBPUlQpOworCWlmIChyZXQgIT0gc2l6ZW9mKGZlYXR1cmVfMSkpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgdG91Y2ggZGF0YSAoMTolZClcbiIsCisJCQkJcmV0KTsKKwkJZ290byBlcnJfc3RvcF9odzsKKwl9CisJcmV0ID0gaGRldi0+aGlkX291dHB1dF9yYXdfcmVwb3J0KGhkZXYsIGZlYXR1cmVfMiwKKwkJCXNpemVvZihmZWF0dXJlXzIpLCBISURfRkVBVFVSRV9SRVBPUlQpOworCWlmIChyZXQgIT0gc2l6ZW9mKGZlYXR1cmVfMikpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgdG91Y2ggZGF0YSAoMjolZClcbiIsCisJCQkJcmV0KTsKKwkJZ290byBlcnJfc3RvcF9odzsKKwl9CisKKwlpbnB1dCA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaW5wdXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2FuJ3QgYWxsb2MgaW5wdXQgZGV2aWNlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfc3RvcF9odzsKKwl9CisJbWFnaWNtb3VzZV9zZXR1cF9pbnB1dChpbnB1dCwgaGRldik7CisKKwlyZXQgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaW5wdXQgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9pbnB1dDsKKwl9CisJbXNjLT5pbnB1dCA9IGlucHV0OworCisJcmV0dXJuIDA7CitlcnJfaW5wdXQ6CisJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXQpOworZXJyX3N0b3BfaHc6CisJaGlkX2h3X3N0b3AoaGRldik7CitlcnJfZnJlZToKKwlrZnJlZShtc2MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG1hZ2ljbW91c2VfcmVtb3ZlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCWhpZF9od19zdG9wKGhkZXYpOworCWtmcmVlKGhpZF9nZXRfZHJ2ZGF0YShoZGV2KSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBtYWdpY19taWNlW10gPSB7CisJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX01BR0lDTU9VU0UpLAorCQkuZHJpdmVyX2RhdGEgPSAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIG1hZ2ljX21pY2UpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgbWFnaWNtb3VzZV9kcml2ZXIgPSB7CisJLm5hbWUgPSAibWFnaWNtb3VzZSIsCisJLmlkX3RhYmxlID0gbWFnaWNfbWljZSwKKwkucHJvYmUgPSBtYWdpY21vdXNlX3Byb2JlLAorCS5yZW1vdmUgPSBtYWdpY21vdXNlX3JlbW92ZSwKKwkucmF3X2V2ZW50ID0gbWFnaWNtb3VzZV9yYXdfZXZlbnQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtYWdpY21vdXNlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaGlkX3JlZ2lzdGVyX2RyaXZlcigmbWFnaWNtb3VzZV9kcml2ZXIpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgcmVnaXN0ZXIgbWFnaWNtb3VzZSBkcml2ZXJcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1hZ2ljbW91c2VfZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmbWFnaWNtb3VzZV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtYWdpY21vdXNlX2luaXQpOworbW9kdWxlX2V4aXQobWFnaWNtb3VzZV9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1tb3NhcnQuYyBiL2RyaXZlcnMvaGlkL2hpZC1tb3NhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODcxODE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLW1vc2FydC5jCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIHRoZSBtdWx0aXRvdWNoIHBhbmVsIG9uIHRoZSBBU1VTIEVlZVBDIFQ5MU1UCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIFN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+CisgKiAgQ29weXJpZ2h0IChjKSAyMDEwIFRlZW11IFR1b21pbmVuIDx0ZWVtdS50dW9taW5lbkBjeWJlcmNvbS5jb20+CisgKgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJ1c2JoaWQvdXNiaGlkLmgiCisKK01PRFVMRV9BVVRIT1IoIlN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1vc0FydCBkdWFsLXRvdWNoIHBhbmVsIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0cnVjdCBtb3NhcnRfZGF0YSB7CisJX191MTYgeCwgeTsKKwlfX3U4IGlkOworCWJvb2wgdmFsaWQ7CQkvKiB2YWxpZCBmaW5nZXIgZGF0YSwgb3IganVzdCBwbGFjZWhvbGRlcj8gKi8KKwlib29sIGZpcnN0OwkJLyogaXMgdGhpcyB0aGUgZmlyc3QgZmluZ2VyIGluIHRoaXMgZnJhbWU/ICovCisJYm9vbCBhY3Rpdml0eV9ub3c7CS8qIGF0IGxlYXN0IG9uZSBhY3RpdmUgZmluZ2VyIGluIHRoaXMgZnJhbWU/ICovCisJYm9vbCBhY3Rpdml0eTsJCS8qIGF0IGxlYXN0IG9uZSBhY3RpdmUgZmluZ2VyIHByZXZpb3VzbHk/ICovCit9OworCitzdGF0aWMgaW50IG1vc2FydF9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgeworCisJY2FzZSBISURfVVBfR0VOREVTSzoKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0dEX1g6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gpOworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19YLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0dEX1k6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1kpOworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19ZLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIEhJRF9VUF9ESUdJVElaRVI6CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgorCQljYXNlIEhJRF9ER19USVBTV0lUQ0g6CisJCWNhc2UgSElEX0RHX0lOUFVUTU9ERToKKwkJY2FzZSBISURfREdfREVWSUNFSU5ERVg6CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKKwkJY2FzZSBISURfREdfQ09OVEFDVE1BWDoKKwkJY2FzZSBISURfREdfVElQUFJFU1NVUkU6CisJCWNhc2UgSElEX0RHX1dJRFRIOgorCQljYXNlIEhJRF9ER19IRUlHSFQ6CisJCQlyZXR1cm4gLTE7CisJCWNhc2UgSElEX0RHX0lOUkFOR0U6CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfS0VZLCBCVE5fVE9VQ0gpOworCQkJcmV0dXJuIDE7CisKKwkJY2FzZSBISURfREdfQ09OVEFDVElEOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCk7CisJCQlyZXR1cm4gMTsKKworCQl9CisJCXJldHVybiAwOworCisJY2FzZSAweGZmMDAwMDAwOgorCQkvKiBpZ25vcmUgSElEIGZlYXR1cmVzICovCisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtb3NhcnRfaW5wdXRfbWFwcGVkKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAodXNhZ2UtPnR5cGUgPT0gRVZfS0VZIHx8IHVzYWdlLT50eXBlID09IEVWX0FCUykKKwkJY2xlYXJfYml0KHVzYWdlLT5jb2RlLCAqYml0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHdob2xlIGZpbmdlciBoYXMgYmVlbiBwYXJzZWQsCisgKiBzbyB0aGF0IGl0IGNhbiBkZWNpZGUgd2hhdCB0byBzZW5kIHRvIHRoZSBpbnB1dCBsYXllci4KKyAqLworc3RhdGljIHZvaWQgbW9zYXJ0X2ZpbHRlcl9ldmVudChzdHJ1Y3QgbW9zYXJ0X2RhdGEgKnRkLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwl0ZC0+Zmlyc3QgPSAhdGQtPmZpcnN0OyAvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKworCWlmICghdGQtPnZhbGlkKSB7CisJCS8qCisJCSAqIHRvdWNoc2NyZWVuIGVtdWxhdGlvbjogaWYgbm8gZmluZ2VyIGluIHRoaXMgZnJhbWUgaXMgdmFsaWQKKwkJICogYW5kIHRoZXJlIHByZXZpb3VzbHkgd2FzIGZpbmdlciBhY3Rpdml0eSwgdGhpcyBpcyBhIHJlbGVhc2UKKwkJICovIAorCQlpZiAoIXRkLT5maXJzdCAmJiAhdGQtPmFjdGl2aXR5X25vdyAmJiB0ZC0+YWN0aXZpdHkpIHsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMCk7CisJCQl0ZC0+YWN0aXZpdHkgPSBmYWxzZTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1RSQUNLSU5HX0lELCB0ZC0+aWQpOworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9QT1NJVElPTl9YLCB0ZC0+eCk7CisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1ksIHRkLT55KTsKKworCWlucHV0X210X3N5bmMoaW5wdXQpOworCXRkLT52YWxpZCA9IGZhbHNlOworCisJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uOiBpZiBmaXJzdCBhY3RpdmUgZmluZ2VyIGluIHRoaXMgZnJhbWUuLi4gKi8KKwlpZiAoIXRkLT5hY3Rpdml0eV9ub3cpIHsKKwkJLyogaWYgdGhlcmUgd2FzIG5vIHByZXZpb3VzIGFjdGl2aXR5LCBlbWl0IHRvdWNoIGV2ZW50ICovCisJCWlmICghdGQtPmFjdGl2aXR5KSB7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfS0VZLCBCVE5fVE9VQ0gsIDEpOworCQkJdGQtPmFjdGl2aXR5ID0gdHJ1ZTsKKwkJfQorCQl0ZC0+YWN0aXZpdHlfbm93ID0gdHJ1ZTsKKwkJLyogYW5kIGluIGFueSBjYXNlIHRoaXMgaXMgb3VyIHByZWZlcnJlZCBmaW5nZXIgKi8KKwkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1gsIHRkLT54KTsKKwkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1ksIHRkLT55KTsKKwl9Cit9CisKKworc3RhdGljIGludCBtb3NhcnRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCisJCQkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQoreworCXN0cnVjdCBtb3NhcnRfZGF0YSAqdGQgPSBoaWRfZ2V0X2RydmRhdGEoaGlkKTsKKworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkgeworCQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQ7CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9ER19JTlJBTkdFOgorCQkJdGQtPnZhbGlkID0gISF2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9HRF9YOgorCQkJdGQtPnggPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9HRF9ZOgorCQkJdGQtPnkgPSB2YWx1ZTsKKwkJCW1vc2FydF9maWx0ZXJfZXZlbnQodGQsIGlucHV0KTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6CisJCQl0ZC0+aWQgPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05UQUNUQ09VTlQ6CisJCQkvKiB0b3VjaCBlbXVsYXRpb246IHRoaXMgaXMgdGhlIGxhc3QgZmllbGQgaW4gYSBmcmFtZSAqLworCQkJdGQtPmZpcnN0ID0gZmFsc2U7CisJCQl0ZC0+YWN0aXZpdHlfbm93ID0gZmFsc2U7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09ORklERU5DRToKKwkJY2FzZSBISURfREdfVElQU1dJVENIOgorCQkJLyogYXZvaWQgaW50ZXJmZXJlbmNlIGZyb20gZ2VuZXJpYyBoaWRpbnB1dCBoYW5kbGluZyAqLworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCS8qIGZhbGxiYWNrIHRvIHRoZSBnZW5lcmljIGhpZGlucHV0IGhhbmRsaW5nICovCisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qIHdlIGhhdmUgaGFuZGxlZCB0aGUgaGlkaW5wdXQgcGFydCwgbm93IHJlbWFpbnMgaGlkZGV2ICovCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRERFViAmJiBoaWQtPmhpZGRldl9oaWRfZXZlbnQpCisJCWhpZC0+aGlkZGV2X2hpZF9ldmVudChoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbW9zYXJ0X3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbW9zYXJ0X2RhdGEgKnRkOworCisKKwl0ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtb3NhcnRfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghdGQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIE1vc0FydCBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXRkLT52YWxpZCA9IGZhbHNlOworCXRkLT5hY3Rpdml0eSA9IGZhbHNlOworCXRkLT5hY3Rpdml0eV9ub3cgPSBmYWxzZTsKKwl0ZC0+Zmlyc3QgPSBmYWxzZTsKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgdGQpOworCisJLyogY3VycmVudGx5LCBpdCdzIGJldHRlciB0byBoYXZlIG9uZSBldmRldiBkZXZpY2Ugb25seSAqLworI2lmIDAKKwloZGV2LT5xdWlya3MgfD0gSElEX1FVSVJLX01VTFRJX0lOUFVUOworI2VuZGlmCisKKwlyZXQgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCk7CisKKwlpZiAocmV0ID09IDApIHsKKwkJc3RydWN0IGhpZF9yZXBvcnRfZW51bSAqcmUgPSBoZGV2LT5yZXBvcnRfZW51bQorCQkJCQkJKyBISURfRkVBVFVSRV9SRVBPUlQ7CisJCXN0cnVjdCBoaWRfcmVwb3J0ICpyID0gcmUtPnJlcG9ydF9pZF9oYXNoWzddOworCisJCXItPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4MDI7CisJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhkZXYsIHIsIFVTQl9ESVJfT1VUKTsKKwl9IGVsc2UgCisJCWtmcmVlKHRkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG1vc2FydF9yZW1vdmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJaGlkX2h3X3N0b3AoaGRldik7CisJa2ZyZWUoaGlkX2dldF9kcnZkYXRhKGhkZXYpKTsKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBtb3NhcnRfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BU1VTLCBVU0JfREVWSUNFX0lEX0FTVVNfVDkxTVQpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIG1vc2FydF9kZXZpY2VzKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfdXNhZ2VfaWQgbW9zYXJ0X2dyYWJiZWRfdXNhZ2VzW10gPSB7CisJeyBISURfQU5ZX0lELCBISURfQU5ZX0lELCBISURfQU5ZX0lEIH0sCisJeyBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxfQorfTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIG1vc2FydF9kcml2ZXIgPSB7CisJLm5hbWUgPSAibW9zYXJ0IiwKKwkuaWRfdGFibGUgPSBtb3NhcnRfZGV2aWNlcywKKwkucHJvYmUgPSBtb3NhcnRfcHJvYmUsCisJLnJlbW92ZSA9IG1vc2FydF9yZW1vdmUsCisJLmlucHV0X21hcHBpbmcgPSBtb3NhcnRfaW5wdXRfbWFwcGluZywKKwkuaW5wdXRfbWFwcGVkID0gbW9zYXJ0X2lucHV0X21hcHBlZCwKKwkudXNhZ2VfdGFibGUgPSBtb3NhcnRfZ3JhYmJlZF91c2FnZXMsCisJLmV2ZW50ID0gbW9zYXJ0X2V2ZW50LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbW9zYXJ0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmbW9zYXJ0X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtb3NhcnRfZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmbW9zYXJ0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1vc2FydF9pbml0KTsKK21vZHVsZV9leGl0KG1vc2FydF9leGl0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMgYi9kcml2ZXJzL2hpZC9oaWQtbnRyaWcuYwppbmRleCA0OWNlNjlkLi4zMjM0YzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbnRyaWcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbnRyaWcuYwpAQCAtMjUsMTEgKzI1LDE2IEBACiAJCQkJCUVWX0tFWSwgKGMpKQogCiBzdHJ1Y3QgbnRyaWdfZGF0YSB7Ci0JX19zMzIgeCwgeSwgaWQsIHcsIGg7Ci0JY2hhciByZWFkaW5nX2FfcG9pbnQsIGZvdW5kX2NvbnRhY3RfaWQ7Ci0JY2hhciBwZW5fYWN0aXZlOwotCWNoYXIgZmluZ2VyX2FjdGl2ZTsKLQljaGFyIGludmVydGVkOworCS8qIEluY29taW5nIHJhdyB2YWx1ZXMgZm9yIGEgc2luZ2xlIGNvbnRhY3QgKi8KKwlfX3UxNiB4LCB5LCB3LCBoOworCV9fdTE2IGlkOworCV9fdTggY29uZmlkZW5jZTsKKworCWJvb2wgcmVhZGluZ19tdDsKKwlfX3U4IGZpcnN0X2NvbnRhY3RfY29uZmlkZW5jZTsKKworCV9fdTggbXRfZm9vdGVyWzRdOworCV9fdTggbXRfZm9vdF9jb3VudDsKIH07CiAKIC8qCkBAIC00Miw4ICs0NywxMSBAQAogCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCiAJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQogewotCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSB7CisJLyogTm8gc3BlY2lhbCBtYXBwaW5ncyBuZWVkZWQgZm9yIHRoZSBwZW4gYW5kIHNpbmdsZSB0b3VjaCAqLworCWlmIChmaWVsZC0+cGh5c2ljYWwpCisJCXJldHVybiAwOwogCisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKIAljYXNlIEhJRF9VUF9HRU5ERVNLOgogCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKIAkJY2FzZSBISURfR0RfWDoKQEAgLTY2LDE4ICs3NCwxMiBAQAogCWNhc2UgSElEX1VQX0RJR0lUSVpFUjoKIAkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CiAJCS8qIHdlIGRvIG5vdCB3YW50IHRvIG1hcCB0aGVzZSBmb3Igbm93ICovCi0JCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDogLyogdmFsdWUgaXMgdXNlbGVzcyAqLworCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6IC8qIE5vdCB0cnVzdHdvcnRoeSwgc3F1ZWxjaCBmb3Igbm93ICovCiAJCWNhc2UgSElEX0RHX0lOUFVUTU9ERToKIAkJY2FzZSBISURfREdfREVWSUNFSU5ERVg6Ci0JCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKIAkJY2FzZSBISURfREdfQ09OVEFDVE1BWDoKIAkJCXJldHVybiAtMTsKIAotCQkvKiBvcmlnaW5hbCBtYXBwaW5nIGJ5IFJhZmkgUnViaW4gKi8KLQkJY2FzZSBISURfREdfQ09ORklERU5DRToKLQkJCW50X21hcF9rZXlfY2xlYXIoQlROX1RPT0xfRE9VQkxFVEFQKTsKLQkJCXJldHVybiAxOwotCiAJCS8qIHdpZHRoL2hlaWdodCBtYXBwZWQgb24gVG91Y2hNYWpvci9Ub3VjaE1pbm9yL09yaWVudGF0aW9uICovCiAJCWNhc2UgSElEX0RHX1dJRFRIOgogCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LApAQCAtMTA0LDYgKzEwNiwxMCBAQAogCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCiAJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQogeworCS8qIE5vIHNwZWNpYWwgbWFwcGluZ3MgbmVlZGVkIGZvciB0aGUgcGVuIGFuZCBzaW5nbGUgdG91Y2ggKi8KKwlpZiAoZmllbGQtPnBoeXNpY2FsKQorCQlyZXR1cm4gMDsKKwogCWlmICh1c2FnZS0+dHlwZSA9PSBFVl9LRVkgfHwgdXNhZ2UtPnR5cGUgPT0gRVZfUkVMCiAJCQl8fCB1c2FnZS0+dHlwZSA9PSBFVl9BQlMpCiAJCWNsZWFyX2JpdCh1c2FnZS0+Y29kZSwgKmJpdCk7CkBAIC0xMjMsMzEgKzEyOSwzMCBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKIAlzdHJ1Y3QgbnRyaWdfZGF0YSAqbmQgPSBoaWRfZ2V0X2RydmRhdGEoaGlkKTsKIAorCS8qIE5vIHNwZWNpYWwgaGFuZGxpbmcgbmVlZGVkIGZvciB0aGUgcGVuICovCisJaWYgKGZpZWxkLT5hcHBsaWNhdGlvbiA9PSBISURfREdfUEVOKQorCQlyZXR1cm4gMDsKKwogICAgICAgICBpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpIHsKIAkJc3dpdGNoICh1c2FnZS0+aGlkKSB7Ci0KLQkJY2FzZSBISURfREdfSU5SQU5HRToKLQkJCWlmIChmaWVsZC0+YXBwbGljYXRpb24gJiAweDMpCi0JCQkJbmQtPnBlbl9hY3RpdmUgPSAodmFsdWUgIT0gMCk7Ci0JCQllbHNlCi0JCQkJbmQtPmZpbmdlcl9hY3RpdmUgPSAodmFsdWUgIT0gMCk7Ci0JCQlyZXR1cm4gMDsKLQotCQljYXNlIEhJRF9ER19JTlZFUlQ6Ci0JCQluZC0+aW52ZXJ0ZWQgPSB2YWx1ZTsKLQkJCXJldHVybiAwOwotCisJCWNhc2UgMHhmZjAwMDAwMToKKwkJCS8qIFRhZyBpbmRpY2F0aW5nIHRoZSBzdGFydCBvZiBhIG11bHRpdG91Y2ggZ3JvdXAgKi8KKwkJCW5kLT5yZWFkaW5nX210ID0gMTsKKwkJCW5kLT5maXJzdF9jb250YWN0X2NvbmZpZGVuY2UgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6CisJCQluZC0+Y29uZmlkZW5jZSA9IHZhbHVlOworCQkJYnJlYWs7CiAJCWNhc2UgSElEX0dEX1g6CiAJCQluZC0+eCA9IHZhbHVlOwotCQkJbmQtPnJlYWRpbmdfYV9wb2ludCA9IDE7CisJCQkvKiBDbGVhciB0aGUgY29udGFjdCBmb290ZXIgKi8KKwkJCW5kLT5tdF9mb290X2NvdW50ID0gMDsKIAkJCWJyZWFrOwogCQljYXNlIEhJRF9HRF9ZOgogCQkJbmQtPnkgPSB2YWx1ZTsKIAkJCWJyZWFrOwogCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6CiAJCQluZC0+aWQgPSB2YWx1ZTsKLQkJCS8qIHdlIHJlY2VpdmUgdGhpcyBvbmx5IHdoZW4gaW4gbXVsdGl0b3VjaCBtb2RlICovCi0JCQluZC0+Zm91bmRfY29udGFjdF9pZCA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBISURfREdfV0lEVEg6CiAJCQluZC0+dyA9IHZhbHVlOwpAQCAtMTU5LDM1ICsxNjQsMTMgQEAKIAkJCSAqIHJlcG9ydCByZWNlaXZlZCBpbiBhIGZpbmdlciBldmVudC4gV2Ugd2FudAogCQkJICogdG8gZW1pdCBhIG5vcm1hbCAoWCwgWSkgcG9zaXRpb24KIAkJCSAqLwotCQkJaWYgKCFuZC0+Zm91bmRfY29udGFjdF9pZCkgewotCQkJCWlmIChuZC0+cGVuX2FjdGl2ZSAmJiBuZC0+ZmluZ2VyX2FjdGl2ZSkgewotCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9PTF9ET1VCTEVUQVAsIDApOwotCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9PTF9ET1VCTEVUQVAsIDEpOwotCQkJCX0KKwkJCWlmICghbmQtPnJlYWRpbmdfbXQpIHsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9PTF9ET1VCTEVUQVAsCisJCQkJCQkgKG5kLT5jb25maWRlbmNlICE9IDApKTsKIAkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWCwgbmQtPngpOwogCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19ZLCBuZC0+eSk7CiAJCQl9CiAJCQlicmVhazsKLQkJY2FzZSBISURfREdfVElQUFJFU1NVUkU6Ci0JCQkvKgotCQkJICogd2hlbiBpbiBzaW5nbGUgdG91Y2ggbW9kZSwgdGhpcyBpcyB0aGUgbGFzdAotCQkJICogcmVwb3J0IHJlY2VpdmVkIGluIGEgcGVuIGV2ZW50LiBXZSB3YW50Ci0JCQkgKiB0byBlbWl0IGEgbm9ybWFsIChYLCBZKSBwb3NpdGlvbgotCQkJICovCi0JCQlpZiAoISBuZC0+Zm91bmRfY29udGFjdF9pZCkgewotCQkJCWlmIChuZC0+cGVuX2FjdGl2ZSAmJiBuZC0+ZmluZ2VyX2FjdGl2ZSkgewotCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LAotCQkJCQkJCW5kLT5pbnZlcnRlZCA/IEJUTl9UT09MX1JVQkJFUiA6IEJUTl9UT09MX1BFTgotCQkJCQkJCSwgMCk7Ci0JCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCi0JCQkJCQkJbmQtPmludmVydGVkID8gQlROX1RPT0xfUlVCQkVSIDogQlROX1RPT0xfUEVOCi0JCQkJCQkJLCAxKTsKLQkJCQl9Ci0JCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1gsIG5kLT54KTsKLQkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWSwgbmQtPnkpOwotCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19QUkVTU1VSRSwgdmFsdWUpOwotCQkJfQotCQkJYnJlYWs7CiAJCWNhc2UgMHhmZjAwMDAwMjoKIAkJCS8qCiAJCQkgKiB3ZSByZWNlaXZlIHRoaXMgd2hlbiB0aGUgZGV2aWNlIGlzIGluIG11bHRpdG91Y2gKQEAgLTE5NSwxMCArMTc4LDM0IEBACiAJCQkgKiB0aGlzIHVzYWdlIHRlbGxzIGlmIHRoZSBjb250YWN0IHBvaW50IGlzIHJlYWwKIAkJCSAqIG9yIGEgcGxhY2Vob2xkZXIKIAkJCSAqLwotCQkJaWYgKCFuZC0+cmVhZGluZ19hX3BvaW50IHx8IHZhbHVlICE9IDEpCisKKwkJCS8qIFNob3VsZG4ndCBnZXQgbW9yZSB0aGFuIDQgZm9vdGVyIHBhY2tldHMsIHNvIHNraXAgKi8KKwkJCWlmIChuZC0+bXRfZm9vdF9jb3VudCA+PSA0KQogCQkJCWJyZWFrOworCisJCQluZC0+bXRfZm9vdGVyW25kLT5tdF9mb290X2NvdW50KytdID0gdmFsdWU7CisKKwkJCS8qIGlmIHRoZSBmb290ZXIgaXNuJ3QgY29tcGxldGUgYnJlYWsgKi8KKwkJCWlmIChuZC0+bXRfZm9vdF9jb3VudCAhPSA0KQorCQkJCWJyZWFrOworCisJCQkvKiBQZW4gYWN0aXZpdHkgc2lnbmFsLCB0cmlnZ2VyIGVuZCBvZiB0b3VjaC4gKi8KKwkJCWlmIChuZC0+bXRfZm9vdGVyWzJdKSB7CisJCQkJbmQtPmNvbmZpZGVuY2UgPSAwOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBJZiB0aGUgY29udGFjdCB3YXMgaW52YWxpZCAqLworCQkJaWYgKCEobmQtPmNvbmZpZGVuY2UgJiYgbmQtPm10X2Zvb3RlclswXSkKKwkJCQkJfHwgbmQtPncgPD0gMjUwCisJCQkJCXx8IG5kLT5oIDw9IDE5MCkgeworCQkJCW5kLT5jb25maWRlbmNlID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwogCQkJLyogZW1pdCBhIG5vcm1hbCAoWCwgWSkgZm9yIHRoZSBmaXJzdCBwb2ludCBvbmx5ICovCiAJCQlpZiAobmQtPmlkID09IDApIHsKKwkJCQluZC0+Zmlyc3RfY29udGFjdF9jb25maWRlbmNlID0gbmQtPmNvbmZpZGVuY2U7CiAJCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1gsIG5kLT54KTsKIAkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWSwgbmQtPnkpOwogCQkJfQpAQCAtMjIwLDggKzIyNywzOSBAQAogCQkJCQkJQUJTX01UX1RPVUNIX01JTk9SLCBuZC0+dyk7CiAJCQl9CiAJCQlpbnB1dF9tdF9zeW5jKGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQpOwotCQkJbmQtPnJlYWRpbmdfYV9wb2ludCA9IDA7Ci0JCQluZC0+Zm91bmRfY29udGFjdF9pZCA9IDA7CisJCQlicmVhazsKKworCQljYXNlIEhJRF9ER19DT05UQUNUQ09VTlQ6IC8qIEVuZCBvZiBhIG11bHRpdG91Y2ggZ3JvdXAgKi8KKwkJCWlmICghbmQtPnJlYWRpbmdfbXQpCisJCQkJYnJlYWs7CisKKwkJCW5kLT5yZWFkaW5nX210ID0gMDsKKworCQkJaWYgKG5kLT5maXJzdF9jb250YWN0X2NvbmZpZGVuY2UpIHsKKwkJCQlzd2l0Y2ggKHZhbHVlKSB7CisJCQkJY2FzZSAwOgkvKiBmb3Igc2luZ2xlIHRvdWNoIGRldmljZXMgKi8KKwkJCQljYXNlIDE6CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCisJCQkJCQkJQlROX1RPT0xfRE9VQkxFVEFQLCAxKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAyOgorCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LAorCQkJCQkJCUJUTl9UT09MX1RSSVBMRVRBUCwgMSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMzoKKwkJCQlkZWZhdWx0OgorCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LAorCQkJCQkJCUJUTl9UT09MX1FVQURUQVAsIDEpOworCQkJCX0KKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9VQ0gsIDEpOworCQkJfSBlbHNlIHsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LAorCQkJCQkJQlROX1RPT0xfRE9VQkxFVEFQLCAwKTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LAorCQkJCQkJQlROX1RPT0xfVFJJUExFVEFQLCAwKTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LAorCQkJCQkJQlROX1RPT0xfUVVBRFRBUCwgMCk7CisJCQl9CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgpAQCAtMjMxLDggKzI2OSw4IEBACiAJfQogCiAJLyogd2UgaGF2ZSBoYW5kbGVkIHRoZSBoaWRpbnB1dCBwYXJ0LCBub3cgcmVtYWlucyBoaWRkZXYgKi8KLSAgICAgICAgaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRERFViAmJiBoaWQtPmhpZGRldl9oaWRfZXZlbnQpCi0gICAgICAgICAgICAgICAgaGlkLT5oaWRkZXZfaGlkX2V2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSk7CisJaWYgKChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYpICYmIGhpZC0+aGlkZGV2X2hpZF9ldmVudCkKKwkJaGlkLT5oaWRkZXZfaGlkX2V2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTI0MSwyMyArMjc5LDY3IEBACiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgbnRyaWdfZGF0YSAqbmQ7CisJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQ7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisKKwlpZiAoaWQtPmRyaXZlcl9kYXRhKQorCQloZGV2LT5xdWlya3MgfD0gSElEX1FVSVJLX01VTFRJX0lOUFVUOwogCiAJbmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbnRyaWdfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghbmQpIHsKIAkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIE4tVHJpZyBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW5kLT5yZWFkaW5nX2FfcG9pbnQgPSAwOwotCW5kLT5mb3VuZF9jb250YWN0X2lkID0gMDsKKworCW5kLT5yZWFkaW5nX210ID0gMDsKIAloaWRfc2V0X2RydmRhdGEoaGRldiwgbmQpOwogCiAJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOwotCWlmICghcmV0KQotCQlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KIAotCWlmIChyZXQpCi0JCWtmcmVlIChuZCk7CisJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQgJiB+SElEX0NPTk5FQ1RfRkYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CiAKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaGlkaW5wdXQsICZoZGV2LT5pbnB1dHMsIGxpc3QpIHsKKwkJaW5wdXQgPSBoaWRpbnB1dC0+aW5wdXQ7CisJCXN3aXRjaCAoaGlkaW5wdXQtPnJlcG9ydC0+ZmllbGRbMF0tPmFwcGxpY2F0aW9uKSB7CisJCWNhc2UgSElEX0RHX1BFTjoKKwkJCWlucHV0LT5uYW1lID0gIk4tVHJpZyBQZW4iOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX1RPVUNIU0NSRUVOOgorCQkJX19jbGVhcl9iaXQoQlROX1RPT0xfUEVOLCBpbnB1dC0+a2V5Yml0KTsKKwkJCS8qCisJCQkgKiBBIGxpdHRsZSBzb21ldGhpbmcgc3BlY2lhbCB0byBlbmFibGUKKwkJCSAqIHR3byBhbmQgdGhyZWUgZmluZ2VyIHRhcHMuCisJCQkgKi8KKwkJCV9fc2V0X2JpdChCVE5fVE9PTF9ET1VCTEVUQVAsIGlucHV0LT5rZXliaXQpOworCQkJX19zZXRfYml0KEJUTl9UT09MX1RSSVBMRVRBUCwgaW5wdXQtPmtleWJpdCk7CisJCQlfX3NldF9iaXQoQlROX1RPT0xfUVVBRFRBUCwgaW5wdXQtPmtleWJpdCk7CisJCQkvKgorCQkJICogVGhlIHBoeXNpY2FsIHRvdWNoc2NyZWVuIChzaW5nbGUgdG91Y2gpCisJCQkgKiBpbnB1dCBoYXMgYSB2YWx1ZSBmb3IgcGh5c2ljYWwsIHdoZXJlYXMKKwkJCSAqIHRoZSBtdWx0aXRvdWNoIG9ubHkgaGFzIGxvZ2ljYWwgaW5wdXQKKwkJCSAqIGZpZWxkcy4KKwkJCSAqLworCQkJaW5wdXQtPm5hbWUgPQorCQkJCShoaWRpbnB1dC0+cmVwb3J0LT5maWVsZFswXQorCQkJCSAtPnBoeXNpY2FsKSA/CisJCQkJIk4tVHJpZyBUb3VjaHNjcmVlbiIgOgorCQkJCSJOLVRyaWcgTXVsdGlUb3VjaCI7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiAwOworZXJyX2ZyZWU6CisJa2ZyZWUobmQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI3Niw3ICszNTgsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF91c2FnZV9pZCBudHJpZ19ncmFiYmVkX3VzYWdlc1tdID0gewogCXsgSElEX0FOWV9JRCwgSElEX0FOWV9JRCwgSElEX0FOWV9JRCB9LAotCXsgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMX0KKwl7IEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDEgfQogfTsKIAogc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIG50cmlnX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1vcnRlay5jIGIvZHJpdmVycy9oaWQvaGlkLW9ydGVrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE5YTk2MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1vcnRlay5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiAgSElEIGRyaXZlciBmb3IgT3J0ZWsgV0tCLTIwMDAgKHdpcmVsZXNzIGtleWJvYXJkICsgbW91c2UgdHJhY2twYWQpLgorICogIEZpeGVzIExvZ2ljYWxNYXhpbXVtIGVycm9yIGluIFVTQiByZXBvcnQgZGVzY3JpcHRpb24sIHNlZQorICogIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc4NworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMTAgSm9obmF0aG9uIEhhcnJpcyA8am1oYXJyaXNAZ21haWwuY29tPgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworc3RhdGljIHZvaWQgb3J0ZWtfcmVwb3J0X2ZpeHVwKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBfX3U4ICpyZGVzYywKKwkJdW5zaWduZWQgaW50IHJzaXplKQoreworCWlmIChyc2l6ZSA+PSA1NiAmJiByZGVzY1s1NF0gPT0gMHgyNSAmJiByZGVzY1s1NV0gPT0gMHgwMSkgeworCQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiRml4aW5nIHVwIE9ydGVrIFdLQi0yMDAwICIKKwkJCQkicmVwb3J0IGRlc2NyaXB0b3IuXG4iKTsKKwkJcmRlc2NbNTVdID0gMHg5MjsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBvcnRla19kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX09SVEVLLCBVU0JfREVWSUNFX0lEX09SVEVLX1dLQjIwMDApIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIG9ydGVrX2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgb3J0ZWtfZHJpdmVyID0geworCS5uYW1lID0gIm9ydGVrIiwKKwkuaWRfdGFibGUgPSBvcnRla19kZXZpY2VzLAorCS5yZXBvcnRfZml4dXAgPSBvcnRla19yZXBvcnRfZml4dXAKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9ydGVrX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmb3J0ZWtfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9ydGVrX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJm9ydGVrX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG9ydGVrX2luaXQpOworbW9kdWxlX2V4aXQob3J0ZWtfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcXVhbnRhLmMgYi9kcml2ZXJzL2hpZC9oaWQtcXVhbnRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFkZDUxYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1xdWFudGEuYwpAQCAtMCwwICsxLDI2MCBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBRdWFudGEgT3B0aWNhbCBUb3VjaCBkdWFsLXRvdWNoIHBhbmVscworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPgorICoKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK01PRFVMRV9BVVRIT1IoIlN0ZXBoYW5lIENoYXR0eSA8Y2hhdHR5QGVuYWMuZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlF1YW50YSBkdWFsLXRvdWNoIHBhbmVsIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0cnVjdCBxdWFudGFfZGF0YSB7CisJX191MTYgeCwgeTsKKwlfX3U4IGlkOworCWJvb2wgdmFsaWQ7CQkvKiB2YWxpZCBmaW5nZXIgZGF0YSwgb3IganVzdCBwbGFjZWhvbGRlcj8gKi8KKwlib29sIGZpcnN0OwkJLyogaXMgdGhpcyB0aGUgZmlyc3QgZmluZ2VyIGluIHRoaXMgZnJhbWU/ICovCisJYm9vbCBhY3Rpdml0eV9ub3c7CS8qIGF0IGxlYXN0IG9uZSBhY3RpdmUgZmluZ2VyIGluIHRoaXMgZnJhbWU/ICovCisJYm9vbCBhY3Rpdml0eTsJCS8qIGF0IGxlYXN0IG9uZSBhY3RpdmUgZmluZ2VyIHByZXZpb3VzbHk/ICovCit9OworCitzdGF0aWMgaW50IHF1YW50YV9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgeworCisJY2FzZSBISURfVVBfR0VOREVTSzoKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0dEX1g6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gpOworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19YLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0dEX1k6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1kpOworCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoaS0+aW5wdXQsIEFCU19ZLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKKwkJCQkJCWZpZWxkLT5sb2dpY2FsX21heGltdW0sIDAsIDApOworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIEhJRF9VUF9ESUdJVElaRVI6CisJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgorCQljYXNlIEhJRF9ER19USVBTV0lUQ0g6CisJCWNhc2UgSElEX0RHX0lOUFVUTU9ERToKKwkJY2FzZSBISURfREdfREVWSUNFSU5ERVg6CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKKwkJY2FzZSBISURfREdfQ09OVEFDVE1BWDoKKwkJY2FzZSBISURfREdfVElQUFJFU1NVUkU6CisJCWNhc2UgSElEX0RHX1dJRFRIOgorCQljYXNlIEhJRF9ER19IRUlHSFQ6CisJCQlyZXR1cm4gLTE7CisJCWNhc2UgSElEX0RHX0lOUkFOR0U6CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfS0VZLCBCVE5fVE9VQ0gpOworCQkJcmV0dXJuIDE7CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RJRDoKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfVFJBQ0tJTkdfSUQpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIDB4ZmYwMDAwMDA6CisJCS8qIGlnbm9yZSB2ZW5kb3Itc3BlY2lmaWMgZmVhdHVyZXMgKi8KKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHF1YW50YV9pbnB1dF9tYXBwZWQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCWlmICh1c2FnZS0+dHlwZSA9PSBFVl9LRVkgfHwgdXNhZ2UtPnR5cGUgPT0gRVZfQUJTKQorCQljbGVhcl9iaXQodXNhZ2UtPmNvZGUsICpiaXQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgd2hvbGUgZmluZ2VyIGhhcyBiZWVuIHBhcnNlZCwKKyAqIHNvIHRoYXQgaXQgY2FuIGRlY2lkZSB3aGF0IHRvIHNlbmQgdG8gdGhlIGlucHV0IGxheWVyLgorICovCitzdGF0aWMgdm9pZCBxdWFudGFfZmlsdGVyX2V2ZW50KHN0cnVjdCBxdWFudGFfZGF0YSAqdGQsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworCQorCXRkLT5maXJzdCA9ICF0ZC0+Zmlyc3Q7IC8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCisJaWYgKCF0ZC0+dmFsaWQpIHsKKwkJLyoKKwkJICogdG91Y2hzY3JlZW4gZW11bGF0aW9uOiBpZiBubyBmaW5nZXIgaW4gdGhpcyBmcmFtZSBpcyB2YWxpZAorCQkgKiBhbmQgdGhlcmUgcHJldmlvdXNseSB3YXMgZmluZ2VyIGFjdGl2aXR5LCB0aGlzIGlzIGEgcmVsZWFzZQorCQkgKi8gCisJCWlmICghdGQtPmZpcnN0ICYmICF0ZC0+YWN0aXZpdHlfbm93ICYmIHRkLT5hY3Rpdml0eSkgeworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgQlROX1RPVUNILCAwKTsKKwkJCXRkLT5hY3Rpdml0eSA9IGZhbHNlOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfVFJBQ0tJTkdfSUQsIHRkLT5pZCk7CisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gsIHRkLT54KTsKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWSwgdGQtPnkpOworCisJaW5wdXRfbXRfc3luYyhpbnB1dCk7CisJdGQtPnZhbGlkID0gZmFsc2U7CisKKwkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb246IGlmIGZpcnN0IGFjdGl2ZSBmaW5nZXIgaW4gdGhpcyBmcmFtZS4uLiAqLworCWlmICghdGQtPmFjdGl2aXR5X25vdykgeworCQkvKiBpZiB0aGVyZSB3YXMgbm8gcHJldmlvdXMgYWN0aXZpdHksIGVtaXQgdG91Y2ggZXZlbnQgKi8KKwkJaWYgKCF0ZC0+YWN0aXZpdHkpIHsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMSk7CisJCQl0ZC0+YWN0aXZpdHkgPSB0cnVlOworCQl9CisJCXRkLT5hY3Rpdml0eV9ub3cgPSB0cnVlOworCQkvKiBhbmQgaW4gYW55IGNhc2UgdGhpcyBpcyBvdXIgcHJlZmVycmVkIGZpbmdlciAqLworCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWCwgdGQtPngpOworCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWSwgdGQtPnkpOworCX0KK30KKworCitzdGF0aWMgaW50IHF1YW50YV9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCit7CisJc3RydWN0IHF1YW50YV9kYXRhICp0ZCA9IGhpZF9nZXRfZHJ2ZGF0YShoaWQpOworCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKSB7CisJCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKKworCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJY2FzZSBISURfREdfSU5SQU5HRToKKwkJCXRkLT52YWxpZCA9ICEhdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfR0RfWDoKKwkJCXRkLT54ID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfR0RfWToKKwkJCXRkLT55ID0gdmFsdWU7CisJCQlxdWFudGFfZmlsdGVyX2V2ZW50KHRkLCBpbnB1dCk7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09OVEFDVElEOgorCQkJdGQtPmlkID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBISURfREdfQ09OVEFDVENPVU5UOgorCQkJLyogdG91Y2ggZW11bGF0aW9uOiB0aGlzIGlzIHRoZSBsYXN0IGZpZWxkIGluIGEgZnJhbWUgKi8KKwkJCXRkLT5maXJzdCA9IGZhbHNlOworCQkJdGQtPmFjdGl2aXR5X25vdyA9IGZhbHNlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6CisJCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKKwkJCS8qIGF2b2lkIGludGVyZmVyZW5jZSBmcm9tIGdlbmVyaWMgaGlkaW5wdXQgaGFuZGxpbmcgKi8KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKiBmYWxsYmFjayB0byB0aGUgZ2VuZXJpYyBoaWRpbnB1dCBoYW5kbGluZyAqLworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiB3ZSBoYXZlIGhhbmRsZWQgdGhlIGhpZGlucHV0IHBhcnQsIG5vdyByZW1haW5zIGhpZGRldiAqLworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYgJiYgaGlkLT5oaWRkZXZfaGlkX2V2ZW50KQorCQloaWQtPmhpZGRldl9oaWRfZXZlbnQoaGlkLCBmaWVsZCwgdXNhZ2UsIHZhbHVlKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHF1YW50YV9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisJc3RydWN0IHF1YW50YV9kYXRhICp0ZDsKKworCXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHF1YW50YV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0ZCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgUXVhbnRhIFRvdWNoIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJdGQtPnZhbGlkID0gZmFsc2U7CisJdGQtPmFjdGl2aXR5ID0gZmFsc2U7CisJdGQtPmFjdGl2aXR5X25vdyA9IGZhbHNlOworCXRkLT5maXJzdCA9IGZhbHNlOworCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCB0ZCk7CisKKwlyZXQgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKCFyZXQpCisJCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKKworCWlmIChyZXQpCisJCWtmcmVlKHRkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHF1YW50YV9yZW1vdmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJaGlkX2h3X3N0b3AoaGRldik7CisJa2ZyZWUoaGlkX2dldF9kcnZkYXRhKGhkZXYpKTsKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBxdWFudGFfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFOVEEsCisJCQlVU0JfREVWSUNFX0lEX1FVQU5UQV9PUFRJQ0FMX1RPVUNIKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFOVEEsCisJCQlVU0JfREVWSUNFX0lEX1BJWEFSVF9JTUFHSU5HX0lOQ19PUFRJQ0FMX1RPVUNIX1NDUkVFTikgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgcXVhbnRhX2RldmljZXMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF91c2FnZV9pZCBxdWFudGFfZ3JhYmJlZF91c2FnZXNbXSA9IHsKKwl7IEhJRF9BTllfSUQsIEhJRF9BTllfSUQsIEhJRF9BTllfSUQgfSwKKwl7IEhJRF9BTllfSUQgLSAxLCBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDF9Cit9OworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgcXVhbnRhX2RyaXZlciA9IHsKKwkubmFtZSA9ICJxdWFudGEtdG91Y2giLAorCS5pZF90YWJsZSA9IHF1YW50YV9kZXZpY2VzLAorCS5wcm9iZSA9IHF1YW50YV9wcm9iZSwKKwkucmVtb3ZlID0gcXVhbnRhX3JlbW92ZSwKKwkuaW5wdXRfbWFwcGluZyA9IHF1YW50YV9pbnB1dF9tYXBwaW5nLAorCS5pbnB1dF9tYXBwZWQgPSBxdWFudGFfaW5wdXRfbWFwcGVkLAorCS51c2FnZV90YWJsZSA9IHF1YW50YV9ncmFiYmVkX3VzYWdlcywKKwkuZXZlbnQgPSBxdWFudGFfZXZlbnQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBxdWFudGFfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZxdWFudGFfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHF1YW50YV9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZxdWFudGFfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocXVhbnRhX2luaXQpOworbW9kdWxlX2V4aXQocXVhbnRhX2V4aXQpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc29ueS5jIGIvZHJpdmVycy9oaWQvaGlkLXNvbnkuYwppbmRleCA0ZTg0NTAyLi45YmYwMGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtc29ueS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1zb255LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKICAqIHRvICJvcGVyYXRpb25hbCIuICBXaXRob3V0IHRoaXMsIHRoZSBwczMgY29udHJvbGxlciB3aWxsIG5vdCByZXBvcnQgYW55CiAgKiBldmVudHMuCiAgKi8KLXN0YXRpYyBpbnQgc29ueV9zZXRfb3BlcmF0aW9uYWwoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCitzdGF0aWMgaW50IHNvbnlfc2V0X29wZXJhdGlvbmFsX3VzYihzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKIHsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoaGRldi0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CkBAIC03Myw2ICs3MywxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgc29ueV9zZXRfb3BlcmF0aW9uYWxfYnQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJdW5zaWduZWQgY2hhciBidWZbXSA9IHsgMHg1MywgMHhmNCwgIDB4NDIsIDB4MDMsIDB4MDAsIDB4MDAgfTsKKwlyZXR1cm4gaGRldi0+aGlkX291dHB1dF9yYXdfcmVwb3J0KGhkZXYsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIEhJRF9GRUFUVVJFX1JFUE9SVCk7Cit9CisKIHN0YXRpYyBpbnQgc29ueV9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQogewogCWludCByZXQ7CkBAIC04MSw3ICs4Nyw3IEBACiAKIAlzYyA9IGt6YWxsb2Moc2l6ZW9mKCpzYyksIEdGUF9LRVJORUwpOwogCWlmIChzYyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbid0IGFsbG9jIGFwcGxlIGRlc2NyaXB0b3JcbiIpOworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW4ndCBhbGxvYyBzb255IGRlc2NyaXB0b3JcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTEwMSw3ICsxMDcsMTcgQEAKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKLQlyZXQgPSBzb255X3NldF9vcGVyYXRpb25hbChoZGV2KTsKKwlzd2l0Y2ggKGhkZXYtPmJ1cykgeworCWNhc2UgQlVTX1VTQjoKKwkJcmV0ID0gc29ueV9zZXRfb3BlcmF0aW9uYWxfdXNiKGhkZXYpOworCQlicmVhazsKKwljYXNlIEJVU19CTFVFVE9PVEg6CisJCXJldCA9IHNvbnlfc2V0X29wZXJhdGlvbmFsX2J0KGhkZXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAwOworCX0KKwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9zdG9wOwogCkBAIC0xMjEsNiArMTM3LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIHNvbnlfZGV2aWNlc1tdID0gewogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT05ZLCBVU0JfREVWSUNFX0lEX1NPTllfUFMzX0NPTlRST0xMRVIpIH0sCisJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX1NPTlksIFVTQl9ERVZJQ0VfSURfU09OWV9QUzNfQ09OVFJPTExFUikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU09OWSwgVVNCX0RFVklDRV9JRF9TT05ZX1ZBSU9fVkdYX01PVVNFKSwKIAkJLmRyaXZlcl9kYXRhID0gVkFJT19SREVTQ19DT05TVEFOVCB9LAogCXsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXN0YW50dW0uYyBiL2RyaXZlcnMvaGlkL2hpZC1zdGFudHVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU1OTJhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1zdGFudHVtLmMKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiAgSElEIGRyaXZlciBmb3IgU3RhbnR1bSBtdWx0aXRvdWNoIHBhbmVscworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgU3RlcGhhbmUgQ2hhdHR5IDxjaGF0dHlAZW5hYy5mcj4KKyAqCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCitNT0RVTEVfQVVUSE9SKCJTdGVwaGFuZSBDaGF0dHkgPGNoYXR0eUBlbmFjLmZyPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdGFudHVtIEhJRCBtdWx0aXRvdWNoIHBhbmVscyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorCitzdHJ1Y3Qgc3RhbnR1bV9kYXRhIHsKKwlfX3MzMiB4LCB5LCB6LCB3LCBoOwkvKiB4LCB5LCBwcmVzc3VyZSwgd2lkdGgsIGhlaWdodCAqLworCV9fdTE2IGlkOwkJLyogdG91Y2ggaWQgKi8KKwlib29sIHZhbGlkOwkJLyogdmFsaWQgZmluZ2VyIGRhdGEsIG9yIGp1c3QgcGxhY2Vob2xkZXI/ICovCisJYm9vbCBmaXJzdDsJCS8qIGZpcnN0IGZpbmdlciBpbiB0aGUgSElEIHBhY2tldD8gKi8KKwlib29sIGFjdGl2aXR5OwkJLyogYXQgbGVhc3Qgb25lIGFjdGl2ZSBmaW5nZXIgc28gZmFyPyAqLworfTsKKworc3RhdGljIGludCBzdGFudHVtX2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSB7CisKKwljYXNlIEhJRF9VUF9HRU5ERVNLOgorCQlzd2l0Y2ggKHVzYWdlLT5oaWQpIHsKKwkJY2FzZSBISURfR0RfWDoKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWCk7CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX1gsCisJCQkJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSwgMCwgMCk7CisJCQlyZXR1cm4gMTsKKwkJY2FzZSBISURfR0RfWToKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWSk7CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX1ksCisJCQkJCQlmaWVsZC0+bG9naWNhbF9taW5pbXVtLAorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWF4aW11bSwgMCwgMCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgSElEX1VQX0RJR0lUSVpFUjoKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0RHX0lOUkFOR0U6CisJCWNhc2UgSElEX0RHX0NPTkZJREVOQ0U6CisJCWNhc2UgSElEX0RHX0lOUFVUTU9ERToKKwkJY2FzZSBISURfREdfREVWSUNFSU5ERVg6CisJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKKwkJY2FzZSBISURfREdfQ09OVEFDVE1BWDoKKwkJCXJldHVybiAtMTsKKworCQljYXNlIEhJRF9ER19USVBTV0lUQ0g6CisJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfS0VZLCBCVE5fVE9VQ0gpOworCQkJcmV0dXJuIDE7CisKKwkJY2FzZSBISURfREdfV0lEVEg6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1RPVUNIX01BSk9SKTsKKwkJCXJldHVybiAxOworCQljYXNlIEhJRF9ER19IRUlHSFQ6CisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCisJCQkJCUVWX0FCUywgQUJTX01UX1RPVUNIX01JTk9SKTsKKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwgQUJTX01UX09SSUVOVEFUSU9OLAorCQkJCQkxLCAxLCAwLCAwKTsKKwkJCXJldHVybiAxOworCQljYXNlIEhJRF9ER19USVBQUkVTU1VSRToKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwKKwkJCQkJRVZfQUJTLCBBQlNfTVRfUFJFU1NVUkUpOworCQkJcmV0dXJuIDE7CisKKwkJY2FzZSBISURfREdfQ09OVEFDVElEOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LAorCQkJCQlFVl9BQlMsIEFCU19NVF9UUkFDS0lOR19JRCk7CisJCQlyZXR1cm4gMTsKKworCQl9CisJCXJldHVybiAwOworCisJY2FzZSAweGZmMDAwMDAwOgorCQkvKiBubyBpbnB1dC1vcmllbnRlZCBtZWFuaW5nICovCisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGFudHVtX2lucHV0X21hcHBlZChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJaWYgKHVzYWdlLT50eXBlID09IEVWX0tFWSB8fCB1c2FnZS0+dHlwZSA9PSBFVl9BQlMpCisJCWNsZWFyX2JpdCh1c2FnZS0+Y29kZSwgKmJpdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSB3aG9sZSBmaW5nZXIgaGFzIGJlZW4gcGFyc2VkLAorICogc28gdGhhdCBpdCBjYW4gZGVjaWRlIHdoYXQgdG8gc2VuZCB0byB0aGUgaW5wdXQgbGF5ZXIuCisgKi8KK3N0YXRpYyB2b2lkIHN0YW50dW1fZmlsdGVyX2V2ZW50KHN0cnVjdCBzdGFudHVtX2RhdGEgKnNkLAorCQkJCQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlib29sIHdpZGU7CisKKwlpZiAoIXNkLT52YWxpZCkgeworCQkvKgorCQkgKiB0b3VjaHNjcmVlbiBlbXVsYXRpb246IGlmIHRoZSBmaXJzdCBmaW5nZXIgaXMgbm90IHZhbGlkIGFuZAorCQkgKiB0aGVyZSBwcmV2aW91c2x5IHdhcyBmaW5nZXIgYWN0aXZpdHksIHRoaXMgaXMgYSByZWxlYXNlCisJCSAqLworCQlpZiAoc2QtPmZpcnN0ICYmIHNkLT5hY3Rpdml0eSkgeworCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgQlROX1RPVUNILCAwKTsKKwkJCXNkLT5hY3Rpdml0eSA9IGZhbHNlOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfVFJBQ0tJTkdfSUQsIHNkLT5pZCk7CisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BPU0lUSU9OX1gsIHNkLT54KTsKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfUE9TSVRJT05fWSwgc2QtPnkpOworCisJd2lkZSA9IChzZC0+dyA+IHNkLT5oKTsKKwlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfTVRfT1JJRU5UQVRJT04sIHdpZGUpOworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UT1VDSF9NQUpPUiwgd2lkZSA/IHNkLT53IDogc2QtPmgpOworCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19NVF9UT1VDSF9NSU5PUiwgd2lkZSA/IHNkLT5oIDogc2QtPncpOworCisJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX01UX1BSRVNTVVJFLCBzZC0+eik7CisKKwlpbnB1dF9tdF9zeW5jKGlucHV0KTsKKwlzZC0+dmFsaWQgPSBmYWxzZTsKKworCS8qIHRvdWNoc2NyZWVuIGVtdWxhdGlvbiAqLworCWlmIChzZC0+Zmlyc3QpIHsKKwkJaWYgKCFzZC0+YWN0aXZpdHkpIHsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCwgMSk7CisJCQlzZC0+YWN0aXZpdHkgPSB0cnVlOworCQl9CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19YLCBzZC0+eCk7CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19ZLCBzZC0+eSk7CisJfQorCXNkLT5maXJzdCA9IGZhbHNlOworfQorCisKK3N0YXRpYyBpbnQgc3RhbnR1bV9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCit7CisJc3RydWN0IHN0YW50dW1fZGF0YSAqc2QgPSBoaWRfZ2V0X2RydmRhdGEoaGlkKTsKKworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkgeworCQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQ7CisKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCWNhc2UgSElEX0RHX0lOUkFOR0U6CisJCQkvKiB0aGlzIGlzIHRoZSBsYXN0IGZpZWxkIGluIGEgZmluZ2VyICovCisJCQlzdGFudHVtX2ZpbHRlcl9ldmVudChzZCwgaW5wdXQpOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX1dJRFRIOgorCQkJc2QtPncgPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19IRUlHSFQ6CisJCQlzZC0+aCA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0dEX1g6CisJCQlzZC0+eCA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0dEX1k6CisJCQlzZC0+eSA9IHZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgSElEX0RHX1RJUFBSRVNTVVJFOgorCQkJc2QtPnogPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6CisJCQlzZC0+aWQgPSB2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9ER19DT05GSURFTkNFOgorCQkJc2QtPnZhbGlkID0gISF2YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIDB4ZmYwMDAwMDI6CisJCQkvKiB0aGlzIGNvbWVzIG9ubHkgYmVmb3JlIHRoZSBmaXJzdCBmaW5nZXIgKi8KKwkJCXNkLT5maXJzdCA9IHRydWU7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJLyogaWdub3JlIHRoZSBvdGhlcnMgKi8KKwkJCXJldHVybiAxOworCQl9CisJfQorCisJLyogd2UgaGF2ZSBoYW5kbGVkIHRoZSBoaWRpbnB1dCBwYXJ0LCBub3cgcmVtYWlucyBoaWRkZXYgKi8KKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWICYmIGhpZC0+aGlkZGV2X2hpZF9ldmVudCkKKwkJaGlkLT5oaWRkZXZfaGlkX2V2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBzdGFudHVtX3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LAorCQkJCWNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzdGFudHVtX2RhdGEgKnNkOworCisJc2QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RhbnR1bV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgU3RhbnR1bSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNkLT52YWxpZCA9IGZhbHNlOworCXNkLT5maXJzdCA9IGZhbHNlOworCXNkLT5hY3Rpdml0eSA9IGZhbHNlOworCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBzZCk7CisKKwlyZXQgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKCFyZXQpCisJCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKKworCWlmIChyZXQpCisJCWtmcmVlKHNkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHN0YW50dW1fcmVtb3ZlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCWhpZF9od19zdG9wKGhkZXYpOworCWtmcmVlKGhpZF9nZXRfZHJ2ZGF0YShoZGV2KSk7CisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgc3RhbnR1bV9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NUQU5UVU0sIFVTQl9ERVZJQ0VfSURfTVRQKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBzdGFudHVtX2RldmljZXMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF91c2FnZV9pZCBzdGFudHVtX2dyYWJiZWRfdXNhZ2VzW10gPSB7CisJeyBISURfQU5ZX0lELCBISURfQU5ZX0lELCBISURfQU5ZX0lEIH0sCisJeyBISURfQU5ZX0lEIC0gMSwgSElEX0FOWV9JRCAtIDEsIEhJRF9BTllfSUQgLSAxfQorfTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIHN0YW50dW1fZHJpdmVyID0geworCS5uYW1lID0gInN0YW50dW0iLAorCS5pZF90YWJsZSA9IHN0YW50dW1fZGV2aWNlcywKKwkucHJvYmUgPSBzdGFudHVtX3Byb2JlLAorCS5yZW1vdmUgPSBzdGFudHVtX3JlbW92ZSwKKwkuaW5wdXRfbWFwcGluZyA9IHN0YW50dW1faW5wdXRfbWFwcGluZywKKwkuaW5wdXRfbWFwcGVkID0gc3RhbnR1bV9pbnB1dF9tYXBwZWQsCisJLnVzYWdlX3RhYmxlID0gc3RhbnR1bV9ncmFiYmVkX3VzYWdlcywKKwkuZXZlbnQgPSBzdGFudHVtX2V2ZW50LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3RhbnR1bV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnN0YW50dW1fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHN0YW50dW1fZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmc3RhbnR1bV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzdGFudHVtX2luaXQpOworbW9kdWxlX2V4aXQoc3RhbnR1bV9leGl0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXdhY29tLmMgYi9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYwppbmRleCAxMmRjZGE1Li44ZDNiNDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYworKysgYi9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYwpAQCAtMTU2LDcgKzE1Niw5IEBACiAJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQ7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiAJc3RydWN0IHdhY29tX2RhdGEgKndkYXRhOworCWNoYXIgcmVwX2RhdGFbMl07CiAJaW50IHJldDsKKwlpbnQgbGltaXQ7CiAKIAl3ZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCp3ZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICh3ZGF0YSA9PSBOVUxMKSB7CkBAIC0xNjYsNiArMTY4LDcgQEAKIAogCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCB3ZGF0YSk7CiAKKwkvKiBQYXJzZSB0aGUgSElEIHJlcG9ydCBub3cgKi8KIAlyZXQgPSBoaWRfcGFyc2UoaGRldik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOwpAQCAtMTc4LDYgKzE4MSwzMSBAQAogCQlnb3RvIGVycl9mcmVlOwogCX0KIAorCS8qCisJICogTm90ZSB0aGF0IGlmIHRoZSByYXcgcXVlcmllcyBmYWlsLCBpdCdzIG5vdCBhIGhhcmQgZmFpbHVyZSBhbmQgaXQKKwkgKiBpcyBzYWZlIHRvIGNvbnRpbnVlCisJICovCisKKwkvKiBTZXQgV2Fjb20gbW9kZTIgKi8KKwlyZXBfZGF0YVswXSA9IDB4MDM7IHJlcF9kYXRhWzFdID0gMHgwMDsKKwlsaW1pdCA9IDM7CisJZG8geworCQlyZXQgPSBoZGV2LT5oaWRfb3V0cHV0X3Jhd19yZXBvcnQoaGRldiwgcmVwX2RhdGEsIDIsCisJCQkJSElEX0ZFQVRVUkVfUkVQT1JUKTsKKwl9IHdoaWxlIChyZXQgPCAwICYmIGxpbWl0LS0gPiAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X3dhcm4oJmhkZXYtPmRldiwgImZhaWxlZCB0byBwb2tlIGRldmljZSAjMSwgJWRcbiIsIHJldCk7CisKKwkvKiAweDA2IC0gaGlnaCByZXBvcnRpbmcgc3BlZWQsIDB4MDUgLSBsb3cgc3BlZWQgKi8KKwlyZXBfZGF0YVswXSA9IDB4MDY7IHJlcF9kYXRhWzFdID0gMHgwMDsKKwlsaW1pdCA9IDM7CisJZG8geworCQlyZXQgPSBoZGV2LT5oaWRfb3V0cHV0X3Jhd19yZXBvcnQoaGRldiwgcmVwX2RhdGEsIDIsCisJCQkJSElEX0ZFQVRVUkVfUkVQT1JUKTsKKwl9IHdoaWxlIChyZXQgPCAwICYmIGxpbWl0LS0gPiAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X3dhcm4oJmhkZXYtPmRldiwgImZhaWxlZCB0byBwb2tlIGRldmljZSAjMiwgJWRcbiIsIHJldCk7CisKIAloaWRpbnB1dCA9IGxpc3RfZW50cnkoaGRldi0+aW5wdXRzLm5leHQsIHN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOwogCWlucHV0ID0gaGlkaW5wdXQtPmlucHV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWRyYXcuYyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCmluZGV4IGNkZDEzNjkuLmQwNDQ3NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZHJhdy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gZGV2LT5oaWRfb3V0cHV0X3Jhd19yZXBvcnQoZGV2LCBidWYsIGNvdW50KTsKKwlyZXQgPSBkZXYtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydChkZXYsIGJ1ZiwgY291bnQsIEhJRF9PVVRQVVRfUkVQT1JUKTsKIG91dDoKIAlrZnJlZShidWYpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCmluZGV4IGUyOTk3YTguLjU2ZDA2Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCkBAIC01LDcgKzUsNyBAQAogICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CiAgKiAgQ29weXJpZ2h0IChjKSAyMDA1IE1pY2hhZWwgSGFib3VzdGFrIDxtaWtlLUBjaW5jaS5yci5jb20+IGZvciBDb25jZXB0MiwgSW5jCiAgKiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggT2xpdmVyIE5ldWt1bQotICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IEppcmkgS29zaW5hCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMTAgSmlyaSBLb3NpbmEKICAqLwogCiAvKgpAQCAtMzE2LDYgKzMxNiw3IEBACiAJCQllcnJfaGlkKCJ1c2Jfc3VibWl0X3VyYihvdXQpIGZhaWxlZCIpOwogCQkJcmV0dXJuIC0xOwogCQl9CisJCXVzYmhpZC0+bGFzdF9vdXQgPSBqaWZmaWVzOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIHF1ZXVlIHdvcmsgdG8gd2FrZSB1cCB0aGUgZGV2aWNlLgpAQCAtMzc3LDYgKzM3OCw3IEBACiAJCQllcnJfaGlkKCJ1c2Jfc3VibWl0X3VyYihjdHJsKSBmYWlsZWQiKTsKIAkJCXJldHVybiAtMTsKIAkJfQorCQl1c2JoaWQtPmxhc3RfY3RybCA9IGppZmZpZXM7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogcXVldWUgd29yayB0byB3YWtlIHVwIHRoZSBkZXZpY2UuCkBAIC01MTIsOSArNTE0LDIwIEBACiAJCXVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0aGVhZF0ucmVwb3J0ID0gcmVwb3J0OwogCQl1c2JoaWQtPm91dGhlYWQgPSBoZWFkOwogCi0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChISURfT1VUX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpKQorCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSElEX09VVF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKSkgewogCQkJaWYgKGhpZF9zdWJtaXRfb3V0KGhpZCkpCiAJCQkJY2xlYXJfYml0KEhJRF9PVVRfUlVOTklORywgJnVzYmhpZC0+aW9mbCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogdGhlIHF1ZXVlIGlzIGtub3duIHRvIHJ1bgorCQkJICogYnV0IGFuIGVhcmxpZXIgcmVxdWVzdCBtYXkgYmUgc3R1Y2sKKwkJCSAqIHdlIG1heSBuZWVkIHRvIHRpbWUgb3V0CisJCQkgKiBubyByYWNlIGJlY2F1c2UgdGhpcyBpcyBjYWxsZWQgdW5kZXIKKwkJCSAqIHNwaW5sb2NrCisJCQkgKi8KKwkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHVzYmhpZC0+bGFzdF9vdXQgKyBIWiAqIDUpKQorCQkJCXVzYl91bmxpbmtfdXJiKHVzYmhpZC0+dXJib3V0KTsKKwkJfQogCQlyZXR1cm47CiAJfQogCkBAIC01MzUsOSArNTQ4LDIwIEBACiAJdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLmRpciA9IGRpcjsKIAl1c2JoaWQtPmN0cmxoZWFkID0gaGVhZDsKIAotCWlmICghdGVzdF9hbmRfc2V0X2JpdChISURfQ1RSTF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKSkKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSElEX0NUUkxfUlVOTklORywgJnVzYmhpZC0+aW9mbCkpIHsKIAkJaWYgKGhpZF9zdWJtaXRfY3RybChoaWQpKQogCQkJY2xlYXJfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIHRoZSBxdWV1ZSBpcyBrbm93biB0byBydW4KKwkJICogYnV0IGFuIGVhcmxpZXIgcmVxdWVzdCBtYXkgYmUgc3R1Y2sKKwkJICogd2UgbWF5IG5lZWQgdG8gdGltZSBvdXQKKwkJICogbm8gcmFjZSBiZWNhdXNlIHRoaXMgaXMgY2FsbGVkIHVuZGVyCisJCSAqIHNwaW5sb2NrCisJCSAqLworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB1c2JoaWQtPmxhc3RfY3RybCArIEhaICogNSkpCisJCQl1c2JfdW5saW5rX3VyYih1c2JoaWQtPnVyYmN0cmwpOworCX0KIH0KIAogdm9pZCB1c2JoaWRfc3VibWl0X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCB1bnNpZ25lZCBjaGFyIGRpcikKQEAgLTc3NCw3ICs3OTgsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVzYmhpZF9vdXRwdXRfcmF3X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBfX3U4ICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBpbnQgdXNiaGlkX291dHB1dF9yYXdfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIF9fdTggKmJ1Ziwgc2l6ZV90IGNvdW50LAorCQl1bnNpZ25lZCBjaGFyIHJlcG9ydF90eXBlKQogewogCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBoaWRfdG9fdXNiX2RldihoaWQpOwpAQCAtNzg1LDcgKzgxMCw3IEBACiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCiAJCUhJRF9SRVFfU0VUX1JFUE9SVCwKIAkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCi0JCSgoSElEX09VVFBVVF9SRVBPUlQgKyAxKSA8PCA4KSB8ICpidWYsCisJCSgocmVwb3J0X3R5cGUgKyAxKSA8PCA4KSB8ICpidWYsCiAJCWludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCBidWYgKyAxLCBjb3VudCAtIDEsCiAJCVVTQl9DVFJMX1NFVF9USU1FT1VUKTsKIApAQCAtOTgxLDkgKzEwMDYsNiBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJnVzYmhpZC0+bG9jayk7CiAKLQl1c2JoaWQtPmludGYgPSBpbnRmOwotCXVzYmhpZC0+aWZudW0gPSBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKLQogCXVzYmhpZC0+dXJiY3RybCA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF1c2JoaWQtPnVyYmN0cmwpIHsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTExNTQsNiArMTE3Niw4IEBACiAKIAloaWQtPmRyaXZlcl9kYXRhID0gdXNiaGlkOwogCXVzYmhpZC0+aGlkID0gaGlkOworCXVzYmhpZC0+aW50ZiA9IGludGY7CisJdXNiaGlkLT5pZm51bSA9IGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwogCiAJcmV0ID0gaGlkX2FkZF9kZXZpY2UoaGlkKTsKIAlpZiAocmV0KSB7CkBAIC0xMzQyLDcgKzEzNjYsNyBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBoaWRfdXNiX2lkcyBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBoaWRfdXNiX2lkc1tdID0gewogCXsgLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MsCiAJCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfSU5URVJGQUNFX0NMQVNTX0hJRCB9LAogCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwppbmRleCAzODc3M2RjLi43ODQ0MjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKQEAgLTQzLDggKzQzLDEwIEBACiAKIAl7IFVTQl9WRU5ET1JfSURfQUZBVEVDSCwgVVNCX0RFVklDRV9JRF9BRkFURUNIX0FGOTAxNiwgSElEX1FVSVJLX0ZVTExTUEVFRF9JTlRFUlZBTCB9LAogCisJeyBVU0JfVkVORE9SX0lEX0VUVVJCT1RPVUNILCBVU0JfREVWSUNFX0lEX0VUVVJCT1RPVUNILCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfUEFOVEhFUkxPUkQsIFVTQl9ERVZJQ0VfSURfUEFOVEhFUkxPUkRfVFdJTl9VU0JfSk9ZU1RJQ0ssIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB8IEhJRF9RVUlSS19TS0lQX09VVFBVVF9SRVBPUlRTIH0sCiAJeyBVU0JfVkVORE9SX0lEX1BMQVlET1RDT00sIFVTQl9ERVZJQ0VfSURfUExBWURPVENPTV9FTVNfVVNCSUksIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9UT1VDSFBBQ0ssIFVTQl9ERVZJQ0VfSURfVE9VQ0hQQUNLX1JUUywgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAKIAl7IFVTQl9WRU5ET1JfSURfQVRFTiwgVVNCX0RFVklDRV9JRF9BVEVOX1VDMTAwS00sIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9BVEVOLCBVU0JfREVWSUNFX0lEX0FURU5fQ1MxMjRVLCBISURfUVVJUktfTk9HRVQgfSwKQEAgLTU3LDYgKzU5LDcgQEAKIAl7IFVTQl9WRU5ET1JfSURfQ0gsIFVTQl9ERVZJQ0VfSURfQ0hfM0FYSVNfNUJVVFRPTl9TVElDSywgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0RNSSwgVVNCX0RFVklDRV9JRF9ETUlfRU5DLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfRUxPLCBVU0JfREVWSUNFX0lEX0VMT19UUzI3MDAsIEhJRF9RVUlSS19OT0dFVCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9QUk9ESUdFLCBVU0JfREVWSUNFX0lEX1BST0RJR0VfQ09SRExFU1MsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9TVU4sIFVTQl9ERVZJQ0VfSURfUkFSSVRBTl9LVk1fRE9OR0xFLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfVFVSQk9YLCBVU0JfREVWSUNFX0lEX1RVUkJPWF9LRVlCT0FSRCwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX1VDTE9HSUMsIFVTQl9ERVZJQ0VfSURfVUNMT0dJQ19UQUJMRVRfUEYxMjA5LCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JoaWQuaCBiL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JoaWQuaAppbmRleCAwOGY1MDVjLi5lYzIwNDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvdXNiaGlkLmgKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmhpZC5oCkBAIC04MCwxMiArODAsMTQgQEAKIAl1bnNpZ25lZCBjaGFyIGN0cmxoZWFkLCBjdHJsdGFpbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBmaWZvIGhlYWQgJiB0YWlsICovCiAJY2hhciAqY3RybGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgYnVmZmVyICovCiAJZG1hX2FkZHJfdCBjdHJsYnVmX2RtYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgYnVmZmVyIGRtYSAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF9jdHJsOwkJCQkJCS8qIHJlY29yZCBvZiBsYXN0IG91dHB1dCBmb3IgdGltZW91dHMgKi8KIAogCXN0cnVjdCB1cmIgKnVyYm91dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgVVJCICovCiAJc3RydWN0IGhpZF9vdXRwdXRfZmlmbyBvdXRbSElEX0NPTlRST0xfRklGT19TSVpFXTsgICAgICAgICAgICAgIC8qIE91dHB1dCBwaXBlIGZpZm8gKi8KIAl1bnNpZ25lZCBjaGFyIG91dGhlYWQsIG91dHRhaWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IHBpcGUgZmlmbyBoZWFkICYgdGFpbCAqLwogCWNoYXIgKm91dGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgYnVmZmVyICovCiAJZG1hX2FkZHJfdCBvdXRidWZfZG1hOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBidWZmZXIgZG1hICovCisJdW5zaWduZWQgbG9uZyBsYXN0X291dDsJCQkJCQkJLyogcmVjb3JkIG9mIGxhc3Qgb3V0cHV0IGZvciB0aW1lb3V0cyAqLwogCiAJc3BpbmxvY2tfdCBsb2NrOwkJCQkJCS8qIGZpZm8gc3BpbmxvY2sgKi8KIAl1bnNpZ25lZCBsb25nIGlvZmw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSS9PIGZsYWdzIChDVFJMX1JVTk5JTkcsIE9VVF9SVU5OSU5HKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbXMvYW1zLWNvcmUuYyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1jb3JlLmMKaW5kZXggNmM5YWNlMS4uMmFkNjJjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hbXMvYW1zLWNvcmUuYworKysgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jCkBAIC0yMTMsNyArMjEzLDcgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotdm9pZCBhbXNfZXhpdCh2b2lkKQordm9pZCBhbXNfc2Vuc29yX2RldGFjaCh2b2lkKQogewogCS8qIFJlbW92ZSBpbnB1dCBkZXZpY2UgKi8KIAlhbXNfaW5wdXRfZXhpdCgpOwpAQCAtMjIxLDkgKzIyMSw2IEBACiAJLyogUmVtb3ZlIGF0dHJpYnV0ZXMgKi8KIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmFtc19pbmZvLm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfY3VycmVudCk7CiAKLQkvKiBTaHV0IGRvd24gaW1wbGVtZW50YXRpb24gKi8KLQlhbXNfaW5mby5leGl0KCk7Ci0KIAkvKiBGbHVzaCBpbnRlcnJ1cHQgd29ya2VyCiAJICoKIAkgKiBXZSBkbyB0aGlzIGFmdGVyIGFtc19pbmZvLmV4aXQoKSwgYmVjYXVzZSBhbiBpbnRlcnJ1cHQgbWlnaHQKQEAgLTIzOSw2ICsyMzYsMTIgQEAKIAlwbWZfdW5yZWdpc3Rlcl9pcnFfY2xpZW50KCZhbXNfZnJlZWZhbGxfY2xpZW50KTsKIH0KIAorc3RhdGljIHZvaWQgX19leGl0IGFtc19leGl0KHZvaWQpCit7CisJLyogU2h1dCBkb3duIGltcGxlbWVudGF0aW9uICovCisJYW1zX2luZm8uZXhpdCgpOworfQorCiBNT0RVTEVfQVVUSE9SKCJTdGVsaWFuIFBvcCwgTWljaGFlbCBIYW5zZWxtYW5uIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFwcGxlIE1vdGlvbiBTZW5zb3IgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaTJjLmMgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaTJjLmMKaW5kZXggMmNiZjhhNjUuLmFiZWVjZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pMmMuYworKysgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaTJjLmMKQEAgLTIzOCw2ICsyMzgsOCBAQAogc3RhdGljIGludCBhbXNfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCWlmIChhbXNfaW5mby5oYXNfZGV2aWNlKSB7CisJCWFtc19zZW5zb3JfZGV0YWNoKCk7CisKIAkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJCWFtc19pMmNfc2V0X2lycShBTVNfSVJRX0FMTCwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1wbXUuYyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1wbXUuYwppbmRleCBmYjE4YjNkLi40ZjYxYjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMKKysrIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLXBtdS5jCkBAIC0xMzMsNiArMTMzLDggQEAKIAogc3RhdGljIHZvaWQgYW1zX3BtdV9leGl0KHZvaWQpCiB7CisJYW1zX3NlbnNvcl9kZXRhY2goKTsKKwogCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwogCWFtc19wbXVfc2V0X2lycShBTVNfSVJRX0FMTCwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy5oIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLmgKaW5kZXggNWVkMzg3Yi4uYjI4ZDdlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hbXMvYW1zLmgKKysrIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLmgKQEAgLTYxLDYgKzYxLDcgQEAKIAogZXh0ZXJuIHZvaWQgYW1zX3NlbnNvcnMoczggKngsIHM4ICp5LCBzOCAqeik7CiBleHRlcm4gaW50IGFtc19zZW5zb3JfYXR0YWNoKHZvaWQpOworZXh0ZXJuIHZvaWQgYW1zX3NlbnNvcl9kZXRhY2godm9pZCk7CiAKIGV4dGVybiBpbnQgYW1zX3BtdV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOwogZXh0ZXJuIGludCBhbXNfaTJjX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IDVmMzE4Y2UuLjczN2YwNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC01NjQsNiArNTY0LDE2IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtdmVyc2F0aWxlLgogCitjb25maWcgSTJDX09DVEVPTgorCXRyaXN0YXRlICJDYXZpdW0gT0NURU9OIEkyQyBidXMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIENQVV9DQVZJVU1fT0NURU9OCisJaGVscAorCSAgU2F5IHllcyBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoZSBJMkMgc2VyaWFsIGJ1cyBvbiBDYXZpdW0KKwkgIE9DVEVPTiBTT0MuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGkyYy1vY3Rlb24uCisKIGNvbW1lbnQgIkV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMiCiAKIGNvbmZpZyBJMkNfUEFSUE9SVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCmluZGV4IDMwMmM1NTEuLmMyYzRlYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKQEAgLTU0LDYgKzU0LDcgQEAKIG9iai0kKENPTkZJR19JMkNfU0lNVEVDKQkrPSBpMmMtc2ltdGVjLm8KIG9iai0kKENPTkZJR19JMkNfU1RVMzAwKQkrPSBpMmMtc3R1MzAwLm8KIG9iai0kKENPTkZJR19JMkNfVkVSU0FUSUxFKQkrPSBpMmMtdmVyc2F0aWxlLm8KK29iai0kKENPTkZJR19JMkNfT0NURU9OKQkrPSBpMmMtb2N0ZW9uLm8KIAogIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCiBvYmotJChDT05GSUdfSTJDX1BBUlBPUlQpCSs9IGkyYy1wYXJwb3J0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb2N0ZW9uLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9jdGVvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMzc1NTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9jdGVvbi5jCkBAIC0wLDAgKzEsNjUxIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA5LTIwMTAKKyAqIE5va2lhIFNpZW1lbnMgTmV0d29ya3MsIG1pY2hhZWwubGF3bmljay5leHRAbnNuLmNvbQorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAxMCBDYXZpdW0gTmV0d29ya3MsIEluYy4KKyAqCisgKiBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgaTJjIGFkYXB0ZXIgaW4gQ2F2aXVtIE5ldHdvcmtzJyBPQ1RFT04gcHJvY2Vzc29ycy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9vY3Rlb24vb2N0ZW9uLmg+CisKKyNkZWZpbmUgRFJWX05BTUUgImkyYy1vY3Rlb24iCisKKy8qIFRoZSBwcmV2aW91cyBvdXQtb2YtdHJlZSB2ZXJzaW9uIHdhcyBpbXBsaWNpdGx5IHZlcnNpb24gMS4wLiAqLworI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4wIgorCisvKiByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIFNXX1RXU0kJIDB4MDAKKyNkZWZpbmUgVFdTSV9JTlQgMHgxMAorCisvKiBDb250cm9sbGVyIGNvbW1hbmQgcGF0dGVybnMgKi8KKyNkZWZpbmUgU1dfVFdTSV9WICAgICAgICAgICAgICAgMHg4MDAwMDAwMDAwMDAwMDAwdWxsCisjZGVmaW5lIFNXX1RXU0lfRU9QX1RXU0lfREFUQSAgIDB4MEMwMDAwMDEwMDAwMDAwMHVsbAorI2RlZmluZSBTV19UV1NJX0VPUF9UV1NJX0NUTCAgICAweDBDMDAwMDAyMDAwMDAwMDB1bGwKKyNkZWZpbmUgU1dfVFdTSV9FT1BfVFdTSV9DTEtDVEwgMHgwQzAwMDAwMzAwMDAwMDAwdWxsCisjZGVmaW5lIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCAgIDB4MEMwMDAwMDMwMDAwMDAwMHVsbAorI2RlZmluZSBTV19UV1NJX0VPUF9UV1NJX1JTVCAgICAweDBDMDAwMDA3MDAwMDAwMDB1bGwKKyNkZWZpbmUgU1dfVFdTSV9PUF9UV1NJX0NMSyAgICAgMHgwODAwMDAwMDAwMDAwMDAwdWxsCisjZGVmaW5lIFNXX1RXU0lfUiAgICAgICAgICAgICAgIDB4MDEwMDAwMDAwMDAwMDAwMHVsbAorCisvKiBDb250cm9sbGVyIGNvbW1hbmQgYW5kIHN0YXR1cyBiaXRzICovCisjZGVmaW5lIFRXU0lfQ1RMX0NFICAgMHg4MAorI2RlZmluZSBUV1NJX0NUTF9FTkFCIDB4NDAKKyNkZWZpbmUgVFdTSV9DVExfU1RBICAweDIwCisjZGVmaW5lIFRXU0lfQ1RMX1NUUCAgMHgxMAorI2RlZmluZSBUV1NJX0NUTF9JRkxHIDB4MDgKKyNkZWZpbmUgVFdTSV9DVExfQUFLICAweDA0CisKKy8qIFNvbWUgc3RhdHVzIHZhbHVlcyAqLworI2RlZmluZSBTVEFUX1NUQVJUICAgICAgMHgwOAorI2RlZmluZSBTVEFUX1JTVEFSVCAgICAgMHgxMAorI2RlZmluZSBTVEFUX1RYQUREUl9BQ0sgMHgxOAorI2RlZmluZSBTVEFUX1RYREFUQV9BQ0sgMHgyOAorI2RlZmluZSBTVEFUX1JYQUREUl9BQ0sgMHg0MAorI2RlZmluZSBTVEFUX1JYREFUQV9BQ0sgMHg1MAorI2RlZmluZSBTVEFUX0lETEUgICAgICAgMHhGOAorCitzdHJ1Y3Qgb2N0ZW9uX2kyYyB7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJc3RydWN0IGkyY19hZGFwdGVyIGFkYXA7CisJaW50IGlycTsKKwlpbnQgdHdzaV9mcmVxOworCWludCBzeXNfZnJlcTsKKwlyZXNvdXJjZV9zaXplX3QgdHdzaV9waHlzOworCXZvaWQgX19pb21lbSAqdHdzaV9iYXNlOworCXJlc291cmNlX3NpemVfdCByZWdzaXplOworCXN0cnVjdCBkZXZpY2UgKmRldjsKK307CisKKy8qKgorICogb2N0ZW9uX2kyY193cml0ZV9zdyAtIHdyaXRlIGFuIEkyQyBjb3JlIHJlZ2lzdGVyLgorICogQGkyYzogVGhlIHN0cnVjdCBvY3Rlb25faTJjLgorICogQGVvcF9yZWc6IFJlZ2lzdGVyIHNlbGVjdG9yLgorICogQGRhdGE6IFZhbHVlIHRvIGJlIHdyaXR0ZW4uCisgKgorICogVGhlIEkyQyBjb3JlIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgaW5kaXJlY3RseSB2aWEgdGhlIFNXX1RXU0kgQ1NSLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faTJjX3dyaXRlX3N3KHN0cnVjdCBvY3Rlb25faTJjICppMmMsCisJCQkJdTY0IGVvcF9yZWcsCisJCQkJdTggZGF0YSkKK3sKKwl1NjQgdG1wOworCisJX19yYXdfd3JpdGVxKFNXX1RXU0lfViB8IGVvcF9yZWcgfCBkYXRhLCBpMmMtPnR3c2lfYmFzZSArIFNXX1RXU0kpOworCWRvIHsKKwkJdG1wID0gX19yYXdfcmVhZHEoaTJjLT50d3NpX2Jhc2UgKyBTV19UV1NJKTsKKwl9IHdoaWxlICgodG1wICYgU1dfVFdTSV9WKSAhPSAwKTsKK30KKworLyoqCisgKiBvY3Rlb25faTJjX3JlYWRfc3cgLSB3cml0ZSBhbiBJMkMgY29yZSByZWdpc3Rlci4KKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqIEBlb3BfcmVnOiBSZWdpc3RlciBzZWxlY3Rvci4KKyAqCisgKiBSZXR1cm5zIHRoZSBkYXRhLgorICoKKyAqIFRoZSBJMkMgY29yZSByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkIGluZGlyZWN0bHkgdmlhIHRoZSBTV19UV1NJIENTUi4KKyAqLworc3RhdGljIHU4IG9jdGVvbl9pMmNfcmVhZF9zdyhzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjLCB1NjQgZW9wX3JlZykKK3sKKwl1NjQgdG1wOworCisJX19yYXdfd3JpdGVxKFNXX1RXU0lfViB8IGVvcF9yZWcgfCBTV19UV1NJX1IsIGkyYy0+dHdzaV9iYXNlICsgU1dfVFdTSSk7CisJZG8geworCQl0bXAgPSBfX3Jhd19yZWFkcShpMmMtPnR3c2lfYmFzZSArIFNXX1RXU0kpOworCX0gd2hpbGUgKCh0bXAgJiBTV19UV1NJX1YpICE9IDApOworCisJcmV0dXJuIHRtcCAmIDB4RkY7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY193cml0ZV9pbnQgLSB3cml0ZSB0aGUgVFdTSV9JTlQgcmVnaXN0ZXIKKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqIEBkYXRhOiBWYWx1ZSB0byBiZSB3cml0dGVuLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faTJjX3dyaXRlX2ludChzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjLCB1NjQgZGF0YSkKK3sKKwl1NjQgdG1wOworCisJX19yYXdfd3JpdGVxKGRhdGEsIGkyYy0+dHdzaV9iYXNlICsgVFdTSV9JTlQpOworCXRtcCA9IF9fcmF3X3JlYWRxKGkyYy0+dHdzaV9iYXNlICsgVFdTSV9JTlQpOworfQorCisvKioKKyAqIG9jdGVvbl9pMmNfaW50X2VuYWJsZSAtIGVuYWJsZSB0aGUgVFMgaW50ZXJydXB0LgorICogQGkyYzogVGhlIHN0cnVjdCBvY3Rlb25faTJjLgorICoKKyAqIFRoZSBpbnRlcnJ1cHQgd2lsbCBiZSBhc3NlcnRlZCB3aGVuIHRoZXJlIGlzIG5vbi1TVEFUX0lETEUgc3RhdGUgaW4KKyAqIHRoZSBTV19UV1NJX0VPUF9UV1NJX1NUQVQgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pMmNfaW50X2VuYWJsZShzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCW9jdGVvbl9pMmNfd3JpdGVfaW50KGkyYywgMHg0MCk7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY19pbnRfZGlzYWJsZSAtIGRpc2FibGUgdGhlIFRTIGludGVycnVwdC4KKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqLworc3RhdGljIHZvaWQgb2N0ZW9uX2kyY19pbnRfZGlzYWJsZShzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCW9jdGVvbl9pMmNfd3JpdGVfaW50KGkyYywgMCk7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY191bmJsb2NrIC0gdW5ibG9jayB0aGUgYnVzLgorICogQGkyYzogVGhlIHN0cnVjdCBvY3Rlb25faTJjLgorICoKKyAqIElmIHRoZXJlIHdhcyBhIHJlc2V0IHdoaWxlIGEgZGV2aWNlIHdhcyBkcml2aW5nIDAgdG8gYnVzLAorICogYnVzIGlzIGJsb2NrZWQuIFdlIHRvZ2dsZSBpdCBmcmVlIG1hbnVhbGx5IGJ5IHNvbWUgY2xvY2sKKyAqIGN5Y2xlcyBhbmQgc2VuZCBhIHN0b3AuCisgKi8KK3N0YXRpYyB2b2lkIG9jdGVvbl9pMmNfdW5ibG9jayhzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCWludCBpOworCisJZGV2X2RiZyhpMmMtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgeworCQlvY3Rlb25faTJjX3dyaXRlX2ludChpMmMsIDB4MCk7CisJCXVkZWxheSg1KTsKKwkJb2N0ZW9uX2kyY193cml0ZV9pbnQoaTJjLCAweDIwMCk7CisJCXVkZWxheSg1KTsKKwl9CisJb2N0ZW9uX2kyY193cml0ZV9pbnQoaTJjLCAweDMwMCk7CisJdWRlbGF5KDUpOworCW9jdGVvbl9pMmNfd3JpdGVfaW50KGkyYywgMHgxMDApOworCXVkZWxheSg1KTsKKwlvY3Rlb25faTJjX3dyaXRlX2ludChpMmMsIDB4MCk7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY19pc3IgLSB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KKyAqIEBpbnQ6IFRoZSBpcnEsIHVudXNlZC4KKyAqIEBkZXZfaWQ6IE91ciBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqLworc3RhdGljIGlycXJldHVybl90IG9jdGVvbl9pMmNfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjID0gZGV2X2lkOworCisJb2N0ZW9uX2kyY19pbnRfZGlzYWJsZShpMmMpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaTJjLT5xdWV1ZSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKworc3RhdGljIGludCBvY3Rlb25faTJjX3Rlc3RfaWZsZyhzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCXJldHVybiAob2N0ZW9uX2kyY19yZWFkX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9DVEwpICYgVFdTSV9DVExfSUZMRykgIT0gMDsKK30KKworLyoqCisgKiBvY3Rlb25faTJjX3dhaXQgLSB3YWl0IGZvciB0aGUgSUZMRyB0byBiZSBzZXQuCisgKiBAaTJjOiBUaGUgc3RydWN0IG9jdGVvbl9pMmMuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm5vLgorICovCitzdGF0aWMgaW50IG9jdGVvbl9pMmNfd2FpdChzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCWludCByZXN1bHQ7CisKKwlvY3Rlb25faTJjX2ludF9lbmFibGUoaTJjKTsKKworCXJlc3VsdCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGkyYy0+cXVldWUsCisJCQkJCQkgIG9jdGVvbl9pMmNfdGVzdF9pZmxnKGkyYyksCisJCQkJCQkgIGkyYy0+YWRhcC50aW1lb3V0KTsKKworCW9jdGVvbl9pMmNfaW50X2Rpc2FibGUoaTJjKTsKKworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9kYmcoaTJjLT5kZXYsICIlczogd2FpdCBpbnRlcnJ1cHRlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gcmVzdWx0OworCX0gZWxzZSBpZiAocmVzdWx0ID09IDApIHsKKwkJZGV2X2RiZyhpMmMtPmRldiwgIiVzOiB0aW1lb3V0XG4iLCBfX2Z1bmNfXyk7CisJCXJlc3VsdCA9IC1FVElNRURPVVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY19zdGFydCAtIHNlbmQgU1RBUlQgdG8gdGhlIGJ1cy4KKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJybm8uCisgKi8KK3N0YXRpYyBpbnQgb2N0ZW9uX2kyY19zdGFydChzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCXU4IGRhdGE7CisJaW50IHJlc3VsdDsKKworCW9jdGVvbl9pMmNfd3JpdGVfc3coaTJjLCBTV19UV1NJX0VPUF9UV1NJX0NUTCwKKwkJCQlUV1NJX0NUTF9FTkFCIHwgVFdTSV9DVExfU1RBKTsKKworCXJlc3VsdCA9IG9jdGVvbl9pMmNfd2FpdChpMmMpOworCWlmIChyZXN1bHQpIHsKKwkJaWYgKG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCkgPT0gU1RBVF9JRExFKSB7CisJCQkvKgorCQkJICogQ29udHJvbGxlciByZWZ1c2VkIHRvIHNlbmQgc3RhcnQgZmxhZyBNYXkKKwkJCSAqIGJlIGEgY2xpZW50IGlzIGhvbGRpbmcgU0RBIGxvdyAtIGxldCdzIHRyeQorCQkJICogdG8gZnJlZSBpdC4KKwkJCSAqLworCQkJb2N0ZW9uX2kyY191bmJsb2NrKGkyYyk7CisJCQlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9DVEwsCisJCQkJCSAgICBUV1NJX0NUTF9FTkFCIHwgVFdTSV9DVExfU1RBKTsKKworCQkJcmVzdWx0ID0gb2N0ZW9uX2kyY193YWl0KGkyYyk7CisJCX0KKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybiByZXN1bHQ7CisJfQorCisJZGF0YSA9IG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCk7CisJaWYgKChkYXRhICE9IFNUQVRfU1RBUlQpICYmIChkYXRhICE9IFNUQVRfUlNUQVJUKSkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAiJXM6IGJhZCBzdGF0dXMgKDB4JXgpXG4iLCBfX2Z1bmNfXywgZGF0YSk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIG9jdGVvbl9pMmNfc3RvcCAtIHNlbmQgU1RPUCB0byB0aGUgYnVzLgorICogQGkyYzogVGhlIHN0cnVjdCBvY3Rlb25faTJjLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJuby4KKyAqLworc3RhdGljIGludCBvY3Rlb25faTJjX3N0b3Aoc3RydWN0IG9jdGVvbl9pMmMgKmkyYykKK3sKKwl1OCBkYXRhOworCisJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfQ1RMLAorCQkJICAgIFRXU0lfQ1RMX0VOQUIgfCBUV1NJX0NUTF9TVFApOworCisJZGF0YSA9IG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCk7CisKKwlpZiAoZGF0YSAhPSBTVEFUX0lETEUpIHsKKwkJZGV2X2VycihpMmMtPmRldiwgIiVzOiBiYWQgc3RhdHVzKDB4JXgpXG4iLCBfX2Z1bmNfXywgZGF0YSk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBvY3Rlb25faTJjX3dyaXRlIC0gc2VuZCBkYXRhIHRvIHRoZSBidXMuCisgKiBAaTJjOiBUaGUgc3RydWN0IG9jdGVvbl9pMmMuCisgKiBAdGFyZ2V0OiBUYXJnZXQgYWRkcmVzcy4KKyAqIEBkYXRhOiBQb2ludGVyIHRvIHRoZSBkYXRhIHRvIGJlIHNlbnQuCisgKiBAbGVuZ3RoOiBMZW5ndGggb2YgdGhlIGRhdGEuCisgKgorICogVGhlIGFkZHJlc3MgaXMgc2VudCBvdmVyIHRoZSBidXMsIHRoZW4gdGhlIGRhdGEuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm5vLgorICovCitzdGF0aWMgaW50IG9jdGVvbl9pMmNfd3JpdGUoc3RydWN0IG9jdGVvbl9pMmMgKmkyYywgaW50IHRhcmdldCwKKwkJCSAgICBjb25zdCB1OCAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaSwgcmVzdWx0OworCXU4IHRtcDsKKworCXJlc3VsdCA9IG9jdGVvbl9pMmNfc3RhcnQoaTJjKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfREFUQSwgdGFyZ2V0IDw8IDEpOworCW9jdGVvbl9pMmNfd3JpdGVfc3coaTJjLCBTV19UV1NJX0VPUF9UV1NJX0NUTCwgVFdTSV9DVExfRU5BQik7CisKKwlyZXN1bHQgPSBvY3Rlb25faTJjX3dhaXQoaTJjKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCXRtcCA9IG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCk7CisJCWlmICgodG1wICE9IFNUQVRfVFhBRERSX0FDSykgJiYgKHRtcCAhPSBTVEFUX1RYREFUQV9BQ0spKSB7CisJCQlkZXZfZXJyKGkyYy0+ZGV2LAorCQkJCSIlczogYmFkIHN0YXR1cyBiZWZvcmUgd3JpdGUgKDB4JXgpXG4iLAorCQkJCV9fZnVuY19fLCB0bXApOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9EQVRBLCBkYXRhW2ldKTsKKwkJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfQ1RMLCBUV1NJX0NUTF9FTkFCKTsKKworCQlyZXN1bHQgPSBvY3Rlb25faTJjX3dhaXQoaTJjKTsKKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybiByZXN1bHQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY19yZWFkIC0gcmVjZWl2ZSBkYXRhIGZyb20gdGhlIGJ1cy4KKyAqIEBpMmM6IFRoZSBzdHJ1Y3Qgb2N0ZW9uX2kyYy4KKyAqIEB0YXJnZXQ6IFRhcmdldCBhZGRyZXNzLgorICogQGRhdGE6IFBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBkYXRhZSAuCisgKiBAbGVuZ3RoOiBMZW5ndGggb2YgdGhlIGRhdGEuCisgKgorICogVGhlIGFkZHJlc3MgaXMgc2VudCBvdmVyIHRoZSBidXMsIHRoZW4gdGhlIGRhdGEgaXMgcmVhZC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJybm8uCisgKi8KK3N0YXRpYyBpbnQgb2N0ZW9uX2kyY19yZWFkKHN0cnVjdCBvY3Rlb25faTJjICppMmMsIGludCB0YXJnZXQsCisJCQkgICB1OCAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaSwgcmVzdWx0OworCXU4IHRtcDsKKworCWlmIChsZW5ndGggPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlc3VsdCA9IG9jdGVvbl9pMmNfc3RhcnQoaTJjKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfREFUQSwgKHRhcmdldDw8MSkgfCAxKTsKKwlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9DVEwsIFRXU0lfQ1RMX0VOQUIpOworCisJcmVzdWx0ID0gb2N0ZW9uX2kyY193YWl0KGkyYyk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQl0bXAgPSBvY3Rlb25faTJjX3JlYWRfc3coaTJjLCBTV19UV1NJX0VPUF9UV1NJX1NUQVQpOworCQlpZiAoKHRtcCAhPSBTVEFUX1JYREFUQV9BQ0spICYmICh0bXAgIT0gU1RBVF9SWEFERFJfQUNLKSkgeworCQkJZGV2X2VycihpMmMtPmRldiwKKwkJCQkiJXM6IGJhZCBzdGF0dXMgYmVmb3JlIHJlYWQgKDB4JXgpXG4iLAorCQkJCV9fZnVuY19fLCB0bXApOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlpZiAoaSsxIDwgbGVuZ3RoKQorCQkJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfQ1RMLAorCQkJCQkJVFdTSV9DVExfRU5BQiB8IFRXU0lfQ1RMX0FBSyk7CisJCWVsc2UKKwkJCW9jdGVvbl9pMmNfd3JpdGVfc3coaTJjLCBTV19UV1NJX0VPUF9UV1NJX0NUTCwKKwkJCQkJCVRXU0lfQ1RMX0VOQUIpOworCisJCXJlc3VsdCA9IG9jdGVvbl9pMmNfd2FpdChpMmMpOworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuIHJlc3VsdDsKKworCQlkYXRhW2ldID0gb2N0ZW9uX2kyY19yZWFkX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9EQVRBKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb2N0ZW9uX2kyY194ZmVyIC0gVGhlIGRyaXZlcidzIG1hc3Rlcl94ZmVyIGZ1bmN0aW9uLgorICogQGFkYXA6IFBvaW50ZXIgdG8gdGhlIGkyY19hZGFwdGVyIHN0cnVjdHVyZS4KKyAqIEBtc2dzOiBQb2ludGVyIHRvIHRoZSBtZXNzYWdlcyB0byBiZSBwcm9jZXNzZWQuCisgKiBAbnVtOiBMZW5ndGggb2YgdGhlIE1TR1MgYXJyYXkuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHByb2Nlc3NlZCwgb3IgYSBuZWdhdGl2ZSBlcnJubyBvbgorICogZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBvY3Rlb25faTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLAorCQkJICAgc3RydWN0IGkyY19tc2cgKm1zZ3MsCisJCQkgICBpbnQgbnVtKQoreworCXN0cnVjdCBpMmNfbXNnICpwbXNnOworCWludCBpOworCWludCByZXQgPSAwOworCXN0cnVjdCBvY3Rlb25faTJjICppMmMgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCisJZm9yIChpID0gMDsgcmV0ID09IDAgJiYgaSA8IG51bTsgaSsrKSB7CisJCXBtc2cgPSAmbXNnc1tpXTsKKwkJZGV2X2RiZyhpMmMtPmRldiwKKwkJCSJEb2luZyAlcyAlZCBieXRlKHMpIHRvL2Zyb20gMHglMDJ4IC0gJWQgb2YgJWQgbWVzc2FnZXNcbiIsCisJCQkgcG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCA/ICJyZWFkIiA6ICJ3cml0ZSIsCisJCQkgcG1zZy0+bGVuLCBwbXNnLT5hZGRyLCBpICsgMSwgbnVtKTsKKwkJaWYgKHBtc2ctPmZsYWdzICYgSTJDX01fUkQpCisJCQlyZXQgPSBvY3Rlb25faTJjX3JlYWQoaTJjLCBwbXNnLT5hZGRyLCBwbXNnLT5idWYsCisJCQkJCQlwbXNnLT5sZW4pOworCQllbHNlCisJCQlyZXQgPSBvY3Rlb25faTJjX3dyaXRlKGkyYywgcG1zZy0+YWRkciwgcG1zZy0+YnVmLAorCQkJCQkJcG1zZy0+bGVuKTsKKwl9CisJb2N0ZW9uX2kyY19zdG9wKGkyYyk7CisKKwlyZXR1cm4gKHJldCAhPSAwKSA/IHJldCA6IG51bTsKK30KKworc3RhdGljIHUzMiBvY3Rlb25faTJjX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCXJldHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ19TTUJVU19FTVVMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gb2N0ZW9uX2kyY19hbGdvID0geworCS5tYXN0ZXJfeGZlciA9IG9jdGVvbl9pMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IG9jdGVvbl9pMmNfZnVuY3Rpb25hbGl0eSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgb2N0ZW9uX2kyY19vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAiT0NURU9OIGFkYXB0ZXIiLAorCS5hbGdvID0gJm9jdGVvbl9pMmNfYWxnbywKKwkudGltZW91dCA9IDIsCit9OworCisvKioKKyAqIG9jdGVvbl9pMmNfc2V0Y2xvY2sgLSBDYWxjdWxhdGUgYW5kIHNldCBjbG9jayBkaXZpc29ycy4KKyAqLworc3RhdGljIGludCBfX2luaXQgb2N0ZW9uX2kyY19zZXRjbG9jayhzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjKQoreworCWludCB0Y2xrLCB0aHBfYmFzZSwgaW5jLCB0aHBfaWR4LCBtZGl2X2lkeCwgbmRpdl9pZHgsIGZvc2NsLCBkaWZmOworCWludCB0aHAgPSAweDE4LCBtZGl2ID0gMiwgbmRpdiA9IDAsIGRlbHRhX2h6ID0gMTAwMDAwMDsKKworCWZvciAobmRpdl9pZHggPSAwOyBuZGl2X2lkeCA8IDggJiYgZGVsdGFfaHogIT0gMDsgbmRpdl9pZHgrKykgeworCQkvKgorCQkgKiBBbiBtZGl2IHZhbHVlIG9mIGxlc3MgdGhhbiAyIHNlZW1zIHRvIG5vdCB3b3JrIHdlbGwKKwkJICogd2l0aCBkczEzMzcgUlRDcywgc28gd2UgY29uc3RyYWluIGl0IHRvIGxhcmdlcgorCQkgKiB2YWx1ZXMuCisJCSAqLworCQlmb3IgKG1kaXZfaWR4ID0gMTU7IG1kaXZfaWR4ID49IDIgJiYgZGVsdGFfaHogIT0gMDsgbWRpdl9pZHgtLSkgeworCQkJLyoKKwkJCSAqIEZvciBnaXZlbiBuZGl2IGFuZCBtZGl2IHZhbHVlcyBjaGVjayB0aGUKKwkJCSAqIHR3byBjbG9zZXN0IHRocCB2YWx1ZXMuCisJCQkgKi8KKwkJCXRjbGsgPSBpMmMtPnR3c2lfZnJlcSAqIChtZGl2X2lkeCArIDEpICogMTA7CisJCQl0Y2xrICo9ICgxIDw8IG5kaXZfaWR4KTsKKwkJCXRocF9iYXNlID0gKGkyYy0+c3lzX2ZyZXEgLyAodGNsayAqIDIpKSAtIDE7CisJCQlmb3IgKGluYyA9IDA7IGluYyA8PSAxOyBpbmMrKykgeworCQkJCXRocF9pZHggPSB0aHBfYmFzZSArIGluYzsKKwkJCQlpZiAodGhwX2lkeCA8IDUgfHwgdGhwX2lkeCA+IDB4ZmYpCisJCQkJCWNvbnRpbnVlOworCisJCQkJZm9zY2wgPSBpMmMtPnN5c19mcmVxIC8gKDIgKiAodGhwX2lkeCArIDEpKTsKKwkJCQlmb3NjbCA9IGZvc2NsIC8gKDEgPDwgbmRpdl9pZHgpOworCQkJCWZvc2NsID0gZm9zY2wgLyAobWRpdl9pZHggKyAxKSAvIDEwOworCQkJCWRpZmYgPSBhYnMoZm9zY2wgLSBpMmMtPnR3c2lfZnJlcSk7CisJCQkJaWYgKGRpZmYgPCBkZWx0YV9oeikgeworCQkJCQlkZWx0YV9oeiA9IGRpZmY7CisJCQkJCXRocCA9IHRocF9pZHg7CisJCQkJCW1kaXYgPSBtZGl2X2lkeDsKKwkJCQkJbmRpdiA9IG5kaXZfaWR4OworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9PUF9UV1NJX0NMSywgdGhwKTsKKwlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9DTEtDVEwsIChtZGl2IDw8IDMpIHwgbmRpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgb2N0ZW9uX2kyY19pbml0bG93bGV2ZWwoc3RydWN0IG9jdGVvbl9pMmMgKmkyYykKK3sKKwl1OCBzdGF0dXM7CisJaW50IHRyaWVzOworCisJLyogZGlzYWJsZSBoaWdoIGxldmVsIGNvbnRyb2xsZXIsIGVuYWJsZSBidXMgYWNjZXNzICovCisJb2N0ZW9uX2kyY193cml0ZV9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfQ1RMLCBUV1NJX0NUTF9FTkFCKTsKKworCS8qIHJlc2V0IGNvbnRyb2xsZXIgKi8KKwlvY3Rlb25faTJjX3dyaXRlX3N3KGkyYywgU1dfVFdTSV9FT1BfVFdTSV9SU1QsIDApOworCisJZm9yICh0cmllcyA9IDEwOyB0cmllczsgdHJpZXMtLSkgeworCQl1ZGVsYXkoMSk7CisJCXN0YXR1cyA9IG9jdGVvbl9pMmNfcmVhZF9zdyhpMmMsIFNXX1RXU0lfRU9QX1RXU0lfU1RBVCk7CisJCWlmIChzdGF0dXMgPT0gU1RBVF9JRExFKQorCQkJcmV0dXJuIDA7CisJfQorCWRldl9lcnIoaTJjLT5kZXYsICIlczogVFdTSV9SU1QgZmFpbGVkISAoMHgleClcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvY3Rlb25faTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGlycSwgcmVzdWx0ID0gMDsKKwlzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjOworCXN0cnVjdCBvY3Rlb25faTJjX2RhdGEgKmkyY19kYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzX21lbTsKKworCS8qIEFsbCBhZGFwdG9ycyBoYXZlIGFuIGlycS4gICovCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuIGlycTsKKworCWkyYyA9IGt6YWxsb2Moc2l6ZW9mKCppMmMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWkyYykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJremFsbG9jIGZhaWxlZFxuIik7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlpMmMtPmRldiA9ICZwZGV2LT5kZXY7CisJaTJjX2RhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCXJlc19tZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCisJaWYgKHJlc19tZW0gPT0gTlVMTCkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAiZm91bmQgbm8gbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJcmVzdWx0ID0gLUVOWElPOworCQlnb3RvIGZhaWxfcmVnaW9uOworCX0KKworCWlmIChpMmNfZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoaTJjLT5kZXYsICJubyBJMkMgZnJlcXVlbmN5IGRhdGFcbiIpOworCQlyZXN1bHQgPSAtRU5YSU87CisJCWdvdG8gZmFpbF9yZWdpb247CisJfQorCisJaTJjLT50d3NpX3BoeXMgPSByZXNfbWVtLT5zdGFydDsKKwlpMmMtPnJlZ3NpemUgPSByZXNvdXJjZV9zaXplKHJlc19tZW0pOworCWkyYy0+dHdzaV9mcmVxID0gaTJjX2RhdGEtPmkyY19mcmVxOworCWkyYy0+c3lzX2ZyZXEgPSBpMmNfZGF0YS0+c3lzX2ZyZXE7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpMmMtPnR3c2lfcGh5cywgaTJjLT5yZWdzaXplLCByZXNfbWVtLT5uYW1lKSkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbF9yZWdpb247CisJfQorCWkyYy0+dHdzaV9iYXNlID0gaW9yZW1hcChpMmMtPnR3c2lfcGh5cywgaTJjLT5yZWdzaXplKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmkyYy0+cXVldWUpOworCisJaTJjLT5pcnEgPSBpcnE7CisKKwlyZXN1bHQgPSByZXF1ZXN0X2lycShpMmMtPmlycSwgb2N0ZW9uX2kyY19pc3IsIDAsIERSVl9OQU1FLCBpMmMpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoaTJjLT5kZXYsICJmYWlsZWQgdG8gYXR0YWNoIGludGVycnVwdFxuIik7CisJCWdvdG8gZmFpbF9pcnE7CisJfQorCisJcmVzdWx0ID0gb2N0ZW9uX2kyY19pbml0bG93bGV2ZWwoaTJjKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoaTJjLT5kZXYsICJpbml0IGxvdyBsZXZlbCBmYWlsZWRcbiIpOworCQlnb3RvICBmYWlsX2FkZDsKKwl9CisKKwlyZXN1bHQgPSBvY3Rlb25faTJjX3NldGNsb2NrKGkyYyk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAiY2xvY2sgaW5pdCBmYWlsZWRcbiIpOworCQlnb3RvICBmYWlsX2FkZDsKKwl9CisKKwlpMmMtPmFkYXAgPSBvY3Rlb25faTJjX29wczsKKwlpMmMtPmFkYXAuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJaTJjLT5hZGFwLm5yID0gcGRldi0+aWQgPj0gMCA/IHBkZXYtPmlkIDogMDsKKwlpMmNfc2V0X2FkYXBkYXRhKCZpMmMtPmFkYXAsIGkyYyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaTJjKTsKKworCXJlc3VsdCA9IGkyY19hZGRfbnVtYmVyZWRfYWRhcHRlcigmaTJjLT5hZGFwKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGkyYy0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBhZGFwdGVyXG4iKTsKKwkJZ290byBmYWlsX2FkZDsKKwl9CisKKwlkZXZfaW5mbyhpMmMtPmRldiwgInZlcnNpb24gJXNcbiIsIERSVl9WRVJTSU9OKTsKKworCXJldHVybiByZXN1bHQ7CisKK2ZhaWxfYWRkOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWZyZWVfaXJxKGkyYy0+aXJxLCBpMmMpOworZmFpbF9pcnE6CisJaW91bm1hcChpMmMtPnR3c2lfYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGkyYy0+dHdzaV9waHlzLCBpMmMtPnJlZ3NpemUpOworZmFpbF9yZWdpb246CisJa2ZyZWUoaTJjKTsKK291dDoKKwlyZXR1cm4gcmVzdWx0OworfTsKKworc3RhdGljIGludCBfX2RldmV4aXQgb2N0ZW9uX2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb2N0ZW9uX2kyYyAqaTJjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpMmNfZGVsX2FkYXB0ZXIoJmkyYy0+YWRhcCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJZnJlZV9pcnEoaTJjLT5pcnEsIGkyYyk7CisJaW91bm1hcChpMmMtPnR3c2lfYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGkyYy0+dHdzaV9waHlzLCBpMmMtPnJlZ3NpemUpOworCWtmcmVlKGkyYyk7CisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvY3Rlb25faTJjX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gb2N0ZW9uX2kyY19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG9jdGVvbl9pMmNfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gRFJWX05BTUUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9jdGVvbl9pMmNfaW5pdCh2b2lkKQoreworCWludCBydjsKKworCXJ2ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvY3Rlb25faTJjX2RyaXZlcik7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb2N0ZW9uX2kyY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9jdGVvbl9pMmNfZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBMYXduaWNrIDxtaWNoYWVsLmxhd25pY2suZXh0QG5zbi5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkkyQy1CdXMgYWRhcHRlciBmb3IgQ2F2aXVtIE9DVEVPTiBwcm9jZXNzb3JzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJWX05BTUUpOworCittb2R1bGVfaW5pdChvY3Rlb25faTJjX2luaXQpOworbW9kdWxlX2V4aXQob2N0ZW9uX2kyY19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG54LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBueC5jCmluZGV4IDVkMWMyNjAuLjJiMGJkMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG54LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYwpAQCAtMjAsMTUgKzIwLDE1IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLXBueC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9pMmMuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2RlZmluZSBJMkNfUE5YX1RJTUVPVVQJCTEwIC8qIG1zZWMgKi8KICNkZWZpbmUgSTJDX1BOWF9TUEVFRF9LSFoJMTAwCiAjZGVmaW5lIEkyQ19QTlhfUkVHSU9OX1NJWkUJMHgxMDAKLSNkZWZpbmUgUE5YX0RFRkFVTFRfRlJFUQkxMyAvKiBNSHogKi8KIAogc3RhdGljIGlubGluZSBpbnQgd2FpdF90aW1lb3V0KGxvbmcgdGltZW91dCwgc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICpkYXRhKQogewpAQCAtNTAsMjIgKzUwLDIxIEBACiAJcmV0dXJuICh0aW1lb3V0IDw9IDApOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaTJjX3BueF9hcm1fdGltZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQorc3RhdGljIGlubGluZSB2b2lkIGkyY19wbnhfYXJtX3RpbWVyKHN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEpCiB7Ci0Jc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICpkYXRhID0gYWRhcC0+YWxnb19kYXRhOwotCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciA9ICZkYXRhLT5taWYudGltZXI7Ci0JaW50IGV4cGlyZXMgPSBJMkNfUE5YX1RJTUVPVVQgLyAoMTAwMCAvIEhaKTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIgPSAmYWxnX2RhdGEtPm1pZi50aW1lcjsKKwl1bnNpZ25lZCBsb25nIGV4cGlyZXMgPSBtc2Vjc190b19qaWZmaWVzKEkyQ19QTlhfVElNRU9VVCk7CiAKIAlpZiAoZXhwaXJlcyA8PSAxKQogCQlleHBpcmVzID0gMjsKIAogCWRlbF90aW1lcl9zeW5jKHRpbWVyKTsKIAotCWRldl9kYmcoJmFkYXAtPmRldiwgIlRpbWVyIGFybWVkIGF0ICVsdSBwbHVzICV1IGppZmZpZXMuXG4iLAorCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwgIlRpbWVyIGFybWVkIGF0ICVsdSBwbHVzICVsdSBqaWZmaWVzLlxuIiwKIAkJamlmZmllcywgZXhwaXJlcyk7CiAKIAl0aW1lci0+ZXhwaXJlcyA9IGppZmZpZXMgKyBleHBpcmVzOwotCXRpbWVyLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYWRhcDsKKwl0aW1lci0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKSZhbGdfZGF0YTsKIAogCWFkZF90aW1lcih0aW1lcik7CiB9CkBAIC03NywzNCArNzYsMzQgQEAKICAqCiAgKiBHZW5lcmF0ZSBhIFNUQVJUIHNpZ25hbCBpbiB0aGUgZGVzaXJlZCBtb2RlLgogICovCi1zdGF0aWMgaW50IGkyY19wbnhfc3RhcnQodW5zaWduZWQgY2hhciBzbGF2ZV9hZGRyLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCitzdGF0aWMgaW50IGkyY19wbnhfc3RhcnQodW5zaWduZWQgY2hhciBzbGF2ZV9hZGRyLAorCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEpCiB7Ci0Jc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKLQotCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IGFkZHIgMHgleCBtb2RlICVkXG4iLCBfX2Z1bmNfXywKKwlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsICIlcygpOiBhZGRyIDB4JXggbW9kZSAlZFxuIiwgX19mdW5jX18sCiAJCXNsYXZlX2FkZHIsIGFsZ19kYXRhLT5taWYubW9kZSk7CiAKIAkvKiBDaGVjayBmb3IgNyBiaXQgc2xhdmUgYWRkcmVzc2VzIG9ubHkgKi8KIAlpZiAoc2xhdmVfYWRkciAmIH4weDdmKSB7Ci0JCWRldl9lcnIoJmFkYXAtPmRldiwgIiVzOiBJbnZhbGlkIHNsYXZlIGFkZHJlc3MgJXguICIKLQkJICAgICAgICJPbmx5IDctYml0IGFkZHJlc3NlcyBhcmUgc3VwcG9ydGVkXG4iLAotCQkgICAgICAgYWRhcC0+bmFtZSwgc2xhdmVfYWRkcik7CisJCWRldl9lcnIoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwKKwkJCSIlczogSW52YWxpZCBzbGF2ZSBhZGRyZXNzICV4LiBPbmx5IDctYml0IGFkZHJlc3NlcyBhcmUgc3VwcG9ydGVkXG4iLAorCQkJYWxnX2RhdGEtPmFkYXB0ZXIubmFtZSwgc2xhdmVfYWRkcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIEZpcnN0LCBtYWtlIHN1cmUgYnVzIGlzIGlkbGUgKi8KIAlpZiAod2FpdF90aW1lb3V0KEkyQ19QTlhfVElNRU9VVCwgYWxnX2RhdGEpKSB7CiAJCS8qIFNvbWVib2R5IGVsc2UgaXMgbW9ub3BvbGl6aW5nIHRoZSBidXMgKi8KLQkJZGV2X2VycigmYWRhcC0+ZGV2LCAiJXM6IEJ1cyBidXN5LiBTbGF2ZSBhZGRyID0gJTAyeCwgIgotCQkgICAgICAgImNudHJsID0gJXgsIHN0YXQgPSAleFxuIiwKLQkJICAgICAgIGFkYXAtPm5hbWUsIHNsYXZlX2FkZHIsCi0JCSAgICAgICBpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpLAotCQkgICAgICAgaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSk7CisJCWRldl9lcnIoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwKKwkJCSIlczogQnVzIGJ1c3kuIFNsYXZlIGFkZHIgPSAlMDJ4LCBjbnRybCA9ICV4LCBzdGF0ID0gJXhcbiIsCisJCQlhbGdfZGF0YS0+YWRhcHRlci5uYW1lLCBzbGF2ZV9hZGRyLAorCQkJaW9yZWFkMzIoSTJDX1JFR19DVEwoYWxnX2RhdGEpKSwKKwkJCWlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0gZWxzZSBpZiAoaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSAmIG1zdGF0dXNfYWZpKSB7CiAJCS8qIFNvcnJ5LCB3ZSBsb3N0IHRoZSBidXMgKi8KLQkJZGV2X2VycigmYWRhcC0+ZGV2LCAiJXM6IEFyYml0cmF0aW9uIGZhaWx1cmUuICIKLQkJICAgICAgICJTbGF2ZSBhZGRyID0gJTAyeFxuIiwgYWRhcC0+bmFtZSwgc2xhdmVfYWRkcik7CisJCWRldl9lcnIoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwKKwkJICAgICAgICAiJXM6IEFyYml0cmF0aW9uIGZhaWx1cmUuIFNsYXZlIGFkZHIgPSAlMDJ4XG4iLAorCQkJYWxnX2RhdGEtPmFkYXB0ZXIubmFtZSwgc2xhdmVfYWRkcik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTE1LDE0ICsxMTQsMTQgQEAKIAlpb3dyaXRlMzIoaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSB8IG1zdGF0dXNfdGRpIHwgbXN0YXR1c19hZmksCiAJCSAgSTJDX1JFR19TVFMoYWxnX2RhdGEpKTsKIAotCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IHNlbmRpbmcgJSN4XG4iLCBfX2Z1bmNfXywKKwlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsICIlcygpOiBzZW5kaW5nICUjeFxuIiwgX19mdW5jX18sCiAJCShzbGF2ZV9hZGRyIDw8IDEpIHwgc3RhcnRfYml0IHwgYWxnX2RhdGEtPm1pZi5tb2RlKTsKIAogCS8qIFdyaXRlIHRoZSBzbGF2ZSBhZGRyZXNzLCBTVEFSVCBiaXQgYW5kIFIvVyBiaXQgKi8KIAlpb3dyaXRlMzIoKHNsYXZlX2FkZHIgPDwgMSkgfCBzdGFydF9iaXQgfCBhbGdfZGF0YS0+bWlmLm1vZGUsCiAJCSAgSTJDX1JFR19UWChhbGdfZGF0YSkpOwogCi0JZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogZXhpdFxuIiwgX19mdW5jX18pOworCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwgIiVzKCk6IGV4aXRcbiIsIF9fZnVuY19fKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTMzLDEzICsxMzIsMTIgQEAKICAqCiAgKiBHZW5lcmF0ZSBhIFNUT1Agc2lnbmFsIHRvIHRlcm1pbmF0ZSB0aGUgbWFzdGVyIHRyYW5zYWN0aW9uLgogICovCi1zdGF0aWMgdm9pZCBpMmNfcG54X3N0b3Aoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQorc3RhdGljIHZvaWQgaTJjX3BueF9zdG9wKHN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEpCiB7Ci0Jc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKIAkvKiBPbmx5IDEgbXNlYyBtYXggdGltZW91dCBkdWUgdG8gaW50ZXJydXB0IGNvbnRleHQgKi8KIAlsb25nIHRpbWVvdXQgPSAxMDAwOwogCi0JZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogZW50ZXJpbmc6IHN0YXQgPSAlMDR4LlxuIiwKKwlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsICIlcygpOiBlbnRlcmluZzogc3RhdCA9ICUwNHguXG4iLAogCQlfX2Z1bmNfXywgaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSk7CiAKIAkvKiBXcml0ZSBhIFNUT1AgYml0IHRvIFRYIEZJRk8gKi8KQEAgLTE1Myw3ICsxNTEsNyBAQAogCQl0aW1lb3V0LS07CiAJfQogCi0JZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogZXhpdGluZzogc3RhdCA9ICUwNHguXG4iLAorCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwgIiVzKCk6IGV4aXRpbmc6IHN0YXQgPSAlMDR4LlxuIiwKIAkJX19mdW5jX18sIGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpOwogfQogCkBAIC0xNjMsMTIgKzE2MSwxMSBAQAogICoKICAqIFNlbmRzIG9uZSBieXRlIG9mIGRhdGEgdG8gdGhlIHNsYXZlCiAgKi8KLXN0YXRpYyBpbnQgaTJjX3BueF9tYXN0ZXJfeG1pdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCitzdGF0aWMgaW50IGkyY19wbnhfbWFzdGVyX3htaXQoc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSkKIHsKLQlzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKmFsZ19kYXRhID0gYWRhcC0+YWxnb19kYXRhOwogCXUzMiB2YWw7CiAKLQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBlbnRlcmluZzogc3RhdCA9ICUwNHguXG4iLAorCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwgIiVzKCk6IGVudGVyaW5nOiBzdGF0ID0gJTA0eC5cbiIsCiAJCV9fZnVuY19fLCBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpKTsKIAogCWlmIChhbGdfZGF0YS0+bWlmLmxlbiA+IDApIHsKQEAgLTE4NCwxNSArMTgxLDE1IEBACiAJCWFsZ19kYXRhLT5taWYubGVuLS07CiAJCWlvd3JpdGUzMih2YWwsIEkyQ19SRUdfVFgoYWxnX2RhdGEpKTsKIAotCQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiB4bWl0ICUjeCBbJWRdXG4iLCBfX2Z1bmNfXywKLQkJCXZhbCwgYWxnX2RhdGEtPm1pZi5sZW4gKyAxKTsKKwkJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LCAiJXMoKTogeG1pdCAlI3ggWyVkXVxuIiwKKwkJCV9fZnVuY19fLCB2YWwsIGFsZ19kYXRhLT5taWYubGVuICsgMSk7CiAKIAkJaWYgKGFsZ19kYXRhLT5taWYubGVuID09IDApIHsKIAkJCWlmIChhbGdfZGF0YS0+bGFzdCkgewogCQkJCS8qIFdhaXQgdW50aWwgdGhlIFNUT1AgaXMgc2Vlbi4gKi8KIAkJCQlpZiAod2FpdF90aW1lb3V0KEkyQ19QTlhfVElNRU9VVCwgYWxnX2RhdGEpKQotCQkJCQlkZXZfZXJyKCZhZGFwLT5kZXYsICJUaGUgYnVzIGlzIHN0aWxsICIKLQkJCQkJCSJhY3RpdmUgYWZ0ZXIgdGltZW91dFxuIik7CisJCQkJCWRldl9lcnIoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwKKwkJCQkJCSJUaGUgYnVzIGlzIHN0aWxsIGFjdGl2ZSBhZnRlciB0aW1lb3V0XG4iKTsKIAkJCX0KIAkJCS8qIERpc2FibGUgbWFzdGVyIGludGVycnVwdHMgKi8KIAkJCWlvd3JpdGUzMihpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpICYKQEAgLTIwMSwxNCArMTk4LDE1IEBACiAKIAkJCWRlbF90aW1lcl9zeW5jKCZhbGdfZGF0YS0+bWlmLnRpbWVyKTsKIAotCQkJZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogV2FraW5nIHVwIHhmZXIgcm91dGluZS5cbiIsCisJCQlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCisJCQkJIiVzKCk6IFdha2luZyB1cCB4ZmVyIHJvdXRpbmUuXG4iLAogCQkJCV9fZnVuY19fKTsKIAogCQkJY29tcGxldGUoJmFsZ19kYXRhLT5taWYuY29tcGxldGUpOwogCQl9CiAJfSBlbHNlIGlmIChhbGdfZGF0YS0+bWlmLmxlbiA9PSAwKSB7CiAJCS8qIHplcm8tc2l6ZWQgdHJhbnNmZXIgKi8KLQkJaTJjX3BueF9zdG9wKGFkYXApOworCQlpMmNfcG54X3N0b3AoYWxnX2RhdGEpOwogCiAJCS8qIERpc2FibGUgbWFzdGVyIGludGVycnVwdHMuICovCiAJCWlvd3JpdGUzMihpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpICYKQEAgLTIxNywxMyArMjE1LDE0IEBACiAKIAkJLyogU3RvcCB0aW1lci4gKi8KIAkJZGVsX3RpbWVyX3N5bmMoJmFsZ19kYXRhLT5taWYudGltZXIpOwotCQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBXYWtpbmcgdXAgeGZlciByb3V0aW5lIGFmdGVyICIKLQkJCSJ6ZXJvLXhmZXIuXG4iLCBfX2Z1bmNfXyk7CisJCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwKKwkJCSIlcygpOiBXYWtpbmcgdXAgeGZlciByb3V0aW5lIGFmdGVyIHplcm8teGZlci5cbiIsCisJCQlfX2Z1bmNfXyk7CiAKIAkJY29tcGxldGUoJmFsZ19kYXRhLT5taWYuY29tcGxldGUpOwogCX0KIAotCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IGV4aXRpbmc6IHN0YXQgPSAlMDR4LlxuIiwKKwlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsICIlcygpOiBleGl0aW5nOiBzdGF0ID0gJTA0eC5cbiIsCiAJCV9fZnVuY19fLCBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpKTsKIAogCXJldHVybiAwOwpAQCAtMjM1LDIxICsyMzQsMjEgQEAKICAqCiAgKiBSZWFkcyBvbmUgYnl0ZSBkYXRhIGZyb20gdGhlIHNsYXZlCiAgKi8KLXN0YXRpYyBpbnQgaTJjX3BueF9tYXN0ZXJfcmN2KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3N0YXRpYyBpbnQgaTJjX3BueF9tYXN0ZXJfcmN2KHN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEpCiB7Ci0Jc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKIAl1bnNpZ25lZCBpbnQgdmFsID0gMDsKIAl1MzIgY3RsID0gMDsKIAotCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IGVudGVyaW5nOiBzdGF0ID0gJTA0eC5cbiIsCisJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LCAiJXMoKTogZW50ZXJpbmc6IHN0YXQgPSAlMDR4LlxuIiwKIAkJX19mdW5jX18sIGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpOwogCiAJLyogQ2hlY2ssIHdoZXRoZXIgdGhlcmUgaXMgYWxyZWFkeSBkYXRhLAogCSAqIG9yIHdlIGRpZG4ndCAnYXNrJyBmb3IgaXQgeWV0LgogCSAqLwogCWlmIChpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpICYgbXN0YXR1c19yZmUpIHsKLQkJZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogV3JpdGUgZHVtbXkgZGF0YSB0byBmaWxsICIKLQkJCSJSeC1maWZvLi4uXG4iLCBfX2Z1bmNfXyk7CisJCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwKKwkJCSIlcygpOiBXcml0ZSBkdW1teSBkYXRhIHRvIGZpbGwgUngtZmlmby4uLlxuIiwKKwkJCV9fZnVuY19fKTsKIAogCQlpZiAoYWxnX2RhdGEtPm1pZi5sZW4gPT0gMSkgewogCQkJLyogTGFzdCBieXRlLCBkbyBub3QgYWNrbm93bGVkZ2UgbmV4dCByY3YuICovCkBAIC0yODEsMTYgKzI4MCwxNiBAQAogCWlmIChhbGdfZGF0YS0+bWlmLmxlbiA+IDApIHsKIAkJdmFsID0gaW9yZWFkMzIoSTJDX1JFR19SWChhbGdfZGF0YSkpOwogCQkqYWxnX2RhdGEtPm1pZi5idWYrKyA9ICh1OCkgKHZhbCAmIDB4ZmYpOwotCQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiByY3YgMHgleCBbJWRdXG4iLCBfX2Z1bmNfXywgdmFsLAotCQkJYWxnX2RhdGEtPm1pZi5sZW4pOworCQlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsICIlcygpOiByY3YgMHgleCBbJWRdXG4iLAorCQkJX19mdW5jX18sIHZhbCwgYWxnX2RhdGEtPm1pZi5sZW4pOwogCiAJCWFsZ19kYXRhLT5taWYubGVuLS07CiAJCWlmIChhbGdfZGF0YS0+bWlmLmxlbiA9PSAwKSB7CiAJCQlpZiAoYWxnX2RhdGEtPmxhc3QpCiAJCQkJLyogV2FpdCB1bnRpbCB0aGUgU1RPUCBpcyBzZWVuLiAqLwogCQkJCWlmICh3YWl0X3RpbWVvdXQoSTJDX1BOWF9USU1FT1VULCBhbGdfZGF0YSkpCi0JCQkJCWRldl9lcnIoJmFkYXAtPmRldiwgIlRoZSBidXMgaXMgc3RpbGwgIgotCQkJCQkJImFjdGl2ZSBhZnRlciB0aW1lb3V0XG4iKTsKKwkJCQkJZGV2X2VycigmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LAorCQkJCQkJIlRoZSBidXMgaXMgc3RpbGwgYWN0aXZlIGFmdGVyIHRpbWVvdXRcbiIpOwogCiAJCQkvKiBEaXNhYmxlIG1hc3RlciBpbnRlcnJ1cHRzICovCiAJCQljdGwgPSBpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpOwpAQCAtMzA0LDcgKzMwMyw3IEBACiAJCX0KIAl9CiAKLQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBleGl0aW5nOiBzdGF0ID0gJTA0eC5cbiIsCisJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LCAiJXMoKTogZXhpdGluZzogc3RhdCA9ICUwNHguXG4iLAogCQlfX2Z1bmNfXywgaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSk7CiAKIAlyZXR1cm4gMDsKQEAgLTMxMiwxMSArMzExLDExIEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpMmNfcG54X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CisJc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGRldl9pZDsKIAl1MzIgc3RhdCwgY3RsOwotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGRldl9pZDsKLQlzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKmFsZ19kYXRhID0gYWRhcC0+YWxnb19kYXRhOwogCi0JZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogbXN0YXQgPSAleCBtY3RybCA9ICV4LCBtb2RlID0gJWRcbiIsCisJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LAorCQkiJXMoKTogbXN0YXQgPSAleCBtY3RybCA9ICV4LCBtb2RlID0gJWRcbiIsCiAJCV9fZnVuY19fLAogCQlpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpLAogCQlpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpLApAQCAtMzM5LDEwICszMzgsMTAgQEAKIAkJY29tcGxldGUoJmFsZ19kYXRhLT5taWYuY29tcGxldGUpOwogCX0gZWxzZSBpZiAoc3RhdCAmIG1zdGF0dXNfbmFpKSB7CiAJCS8qIFNsYXZlIGRpZCBub3QgYWNrbm93bGVkZ2UsIGdlbmVyYXRlIGEgU1RPUCAqLwotCQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiAiCi0JCQkiU2xhdmUgZGlkIG5vdCBhY2tub3dsZWRnZSwgZ2VuZXJhdGluZyBhIFNUT1AuXG4iLAorCQlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCisJCQkiJXMoKTogU2xhdmUgZGlkIG5vdCBhY2tub3dsZWRnZSwgZ2VuZXJhdGluZyBhIFNUT1AuXG4iLAogCQkJX19mdW5jX18pOwotCQlpMmNfcG54X3N0b3AoYWRhcCk7CisJCWkyY19wbnhfc3RvcChhbGdfZGF0YSk7CiAKIAkJLyogRGlzYWJsZSBtYXN0ZXIgaW50ZXJydXB0cy4gKi8KIAkJY3RsID0gaW9yZWFkMzIoSTJDX1JFR19DVEwoYWxnX2RhdGEpKTsKQEAgLTM2OCw5ICszNjcsOSBAQAogCQkgKi8KIAkJaWYgKChzdGF0ICYgbXN0YXR1c19kcm1pKSB8fCAhKHN0YXQgJiBtc3RhdHVzX3JmZSkpIHsKIAkJCWlmIChhbGdfZGF0YS0+bWlmLm1vZGUgPT0gSTJDX1NNQlVTX1dSSVRFKSB7Ci0JCQkJaTJjX3BueF9tYXN0ZXJfeG1pdChhZGFwKTsKKwkJCQlpMmNfcG54X21hc3Rlcl94bWl0KGFsZ19kYXRhKTsKIAkJCX0gZWxzZSBpZiAoYWxnX2RhdGEtPm1pZi5tb2RlID09IEkyQ19TTUJVU19SRUFEKSB7Ci0JCQkJaTJjX3BueF9tYXN0ZXJfcmN2KGFkYXApOworCQkJCWkyY19wbnhfbWFzdGVyX3JjdihhbGdfZGF0YSk7CiAJCQl9CiAJCX0KIAl9CkBAIC0zNzksNyArMzc4LDggQEAKIAlzdGF0ID0gaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKTsKIAlpb3dyaXRlMzIoc3RhdCB8IG1zdGF0dXNfdGRpIHwgbXN0YXR1c19hZmksIEkyQ19SRUdfU1RTKGFsZ19kYXRhKSk7CiAKLQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBleGl0aW5nLCBzdGF0ID0gJXggY3RybCA9ICV4LlxuIiwKKwlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCisJCSIlcygpOiBleGl0aW5nLCBzdGF0ID0gJXggY3RybCA9ICV4LlxuIiwKIAkJIF9fZnVuY19fLCBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpLAogCQkgaW9yZWFkMzIoSTJDX1JFR19DVEwoYWxnX2RhdGEpKSk7CiAKQEAgLTM4OCwxNCArMzg4LDEzIEBACiAKIHN0YXRpYyB2b2lkIGkyY19wbnhfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gKHN0cnVjdCBpMmNfYWRhcHRlciAqKWRhdGE7Ci0Jc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKKwlzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKmFsZ19kYXRhID0gKHN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqKWRhdGE7CiAJdTMyIGN0bDsKIAotCWRldl9lcnIoJmFkYXAtPmRldiwgIk1hc3RlciB0aW1lZCBvdXQuIHN0YXQgPSAlMDR4LCBjbnRybCA9ICUwNHguICIKLQkgICAgICAgIlJlc2V0dGluZyBtYXN0ZXIuLi5cbiIsCi0JICAgICAgIGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSksCi0JICAgICAgIGlvcmVhZDMyKEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSkpOworCWRldl9lcnIoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwKKwkJIk1hc3RlciB0aW1lZCBvdXQuIHN0YXQgPSAlMDR4LCBjbnRybCA9ICUwNHguIFJlc2V0dGluZyBtYXN0ZXIuLi5cbiIsCisJCWlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSksCisJCWlvcmVhZDMyKEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSkpOwogCiAJLyogUmVzZXQgbWFzdGVyIGFuZCBkaXNhYmxlIGludGVycnVwdHMgKi8KIAljdGwgPSBpb3JlYWQzMihJMkNfUkVHX0NUTChhbGdfZGF0YSkpOwpAQCAtNDA5LDE1ICs0MDgsMTQgQEAKIAljb21wbGV0ZSgmYWxnX2RhdGEtPm1pZi5jb21wbGV0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBidXNfcmVzZXRfaWZfYWN0aXZlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBidXNfcmVzZXRfaWZfYWN0aXZlKHN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEpCiB7Ci0Jc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKIAl1MzIgc3RhdDsKIAogCWlmICgoc3RhdCA9IGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpICYgbXN0YXR1c19hY3RpdmUpIHsKLQkJZGV2X2VycigmYWRhcC0+ZGV2LAorCQlkZXZfZXJyKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCiAJCQkiJXM6IEJ1cyBpcyBzdGlsbCBhY3RpdmUgYWZ0ZXIgeGZlci4gUmVzZXQgaXQuLi5cbiIsCi0JCSAgICAgICBhZGFwLT5uYW1lKTsKKwkJCWFsZ19kYXRhLT5hZGFwdGVyLm5hbWUpOwogCQlpb3dyaXRlMzIoaW9yZWFkMzIoSTJDX1JFR19DVEwoYWxnX2RhdGEpKSB8IG1jbnRybF9yZXNldCwKIAkJCSAgSTJDX1JFR19DVEwoYWxnX2RhdGEpKTsKIAkJd2FpdF9yZXNldChJMkNfUE5YX1RJTUVPVVQsIGFsZ19kYXRhKTsKQEAgLTQ1MSwxMCArNDQ5LDExIEBACiAJc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKIAl1MzIgc3RhdCA9IGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSk7CiAKLQlkZXZfZGJnKCZhZGFwLT5kZXYsICIlcygpOiBlbnRlcmluZzogJWQgbWVzc2FnZXMsIHN0YXQgPSAlMDR4LlxuIiwKKwlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCisJCSIlcygpOiBlbnRlcmluZzogJWQgbWVzc2FnZXMsIHN0YXQgPSAlMDR4LlxuIiwKIAkJX19mdW5jX18sIG51bSwgaW9yZWFkMzIoSTJDX1JFR19TVFMoYWxnX2RhdGEpKSk7CiAKLQlidXNfcmVzZXRfaWZfYWN0aXZlKGFkYXApOworCWJ1c19yZXNldF9pZl9hY3RpdmUoYWxnX2RhdGEpOwogCiAJLyogUHJvY2VzcyB0cmFuc2FjdGlvbnMgaW4gYSBsb29wLiAqLwogCWZvciAoaSA9IDA7IHJjID49IDAgJiYgaSA8IG51bTsgaSsrKSB7CkBAIC00NjQsOSArNDYzLDkgQEAKIAkJYWRkciA9IHBtc2ctPmFkZHI7CiAKIAkJaWYgKHBtc2ctPmZsYWdzICYgSTJDX01fVEVOKSB7Ci0JCQlkZXZfZXJyKCZhZGFwLT5kZXYsCisJCQlkZXZfZXJyKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCiAJCQkJIiVzOiAxMCBiaXRzIGFkZHIgbm90IHN1cHBvcnRlZCFcbiIsCi0JCQkJYWRhcC0+bmFtZSk7CisJCQkJYWxnX2RhdGEtPmFkYXB0ZXIubmFtZSk7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQpAQCAtNDc4LDExICs0NzcsMTAgQEAKIAkJYWxnX2RhdGEtPm1pZi5yZXQgPSAwOwogCQlhbGdfZGF0YS0+bGFzdCA9IChpID09IG51bSAtIDEpOwogCi0JCWRldl9kYmcoJmFkYXAtPmRldiwgIiVzKCk6IG1vZGUgJWQsICVkIGJ5dGVzXG4iLCBfX2Z1bmNfXywKLQkJCWFsZ19kYXRhLT5taWYubW9kZSwKLQkJCWFsZ19kYXRhLT5taWYubGVuKTsKKwkJZGV2X2RiZygmYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LCAiJXMoKTogbW9kZSAlZCwgJWQgYnl0ZXNcbiIsCisJCQlfX2Z1bmNfXywgYWxnX2RhdGEtPm1pZi5tb2RlLCBhbGdfZGF0YS0+bWlmLmxlbik7CiAKLQkJaTJjX3BueF9hcm1fdGltZXIoYWRhcCk7CisJCWkyY19wbnhfYXJtX3RpbWVyKGFsZ19kYXRhKTsKIAogCQkvKiBpbml0aWFsaXplIHRoZSBjb21wbGV0aW9uIHZhciAqLwogCQlpbml0X2NvbXBsZXRpb24oJmFsZ19kYXRhLT5taWYuY29tcGxldGUpOwpAQCAtNDkzLDcgKzQ5MSw3IEBACiAJCQkgIEkyQ19SRUdfQ1RMKGFsZ19kYXRhKSk7CiAKIAkJLyogUHV0IHN0YXJ0LWNvZGUgYW5kIHNsYXZlLWFkZHJlc3Mgb24gdGhlIGJ1cy4gKi8KLQkJcmMgPSBpMmNfcG54X3N0YXJ0KGFkZHIsIGFkYXApOworCQlyYyA9IGkyY19wbnhfc3RhcnQoYWRkciwgYWxnX2RhdGEpOwogCQlpZiAocmMgPCAwKQogCQkJYnJlYWs7CiAKQEAgLTUwMiwzMSArNTAwLDMyIEBACiAKIAkJaWYgKCEocmMgPSBhbGdfZGF0YS0+bWlmLnJldCkpCiAJCQljb21wbGV0ZWQrKzsKLQkJZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogQ29tcGxldGUsIHJldHVybiBjb2RlID0gJWQuXG4iLAorCQlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCisJCQkiJXMoKTogQ29tcGxldGUsIHJldHVybiBjb2RlID0gJWQuXG4iLAogCQkJX19mdW5jX18sIHJjKTsKIAogCQkvKiBDbGVhciBUREkgYW5kIEFGSSBiaXRzIGluIGNhc2UgdGhleSBhcmUgc2V0LiAqLwogCQlpZiAoKHN0YXQgPSBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpKSAmIG1zdGF0dXNfdGRpKSB7Ci0JCQlkZXZfZGJnKCZhZGFwLT5kZXYsCisJCQlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCiAJCQkJIiVzOiBUREkgc3RpbGwgc2V0Li4uIGNsZWFyaW5nIG5vdy5cbiIsCi0JCQkgICAgICAgYWRhcC0+bmFtZSk7CisJCQkJYWxnX2RhdGEtPmFkYXB0ZXIubmFtZSk7CiAJCQlpb3dyaXRlMzIoc3RhdCwgSTJDX1JFR19TVFMoYWxnX2RhdGEpKTsKIAkJfQogCQlpZiAoKHN0YXQgPSBpb3JlYWQzMihJMkNfUkVHX1NUUyhhbGdfZGF0YSkpKSAmIG1zdGF0dXNfYWZpKSB7Ci0JCQlkZXZfZGJnKCZhZGFwLT5kZXYsCisJCQlkZXZfZGJnKCZhbGdfZGF0YS0+YWRhcHRlci5kZXYsCiAJCQkJIiVzOiBBRkkgc3RpbGwgc2V0Li4uIGNsZWFyaW5nIG5vdy5cbiIsCi0JCQkgICAgICAgYWRhcC0+bmFtZSk7CisJCQkJYWxnX2RhdGEtPmFkYXB0ZXIubmFtZSk7CiAJCQlpb3dyaXRlMzIoc3RhdCwgSTJDX1JFR19TVFMoYWxnX2RhdGEpKTsKIAkJfQogCX0KIAotCWJ1c19yZXNldF9pZl9hY3RpdmUoYWRhcCk7CisJYnVzX3Jlc2V0X2lmX2FjdGl2ZShhbGdfZGF0YSk7CiAKIAkvKiBDbGVhbnVwIHRvIGJlIHN1cmUuLi4gKi8KIAlhbGdfZGF0YS0+bWlmLmJ1ZiA9IE5VTEw7CiAJYWxnX2RhdGEtPm1pZi5sZW4gPSAwOwogCi0JZGV2X2RiZygmYWRhcC0+ZGV2LCAiJXMoKTogZXhpdGluZywgc3RhdCA9ICV4XG4iLAorCWRldl9kYmcoJmFsZ19kYXRhLT5hZGFwdGVyLmRldiwgIiVzKCk6IGV4aXRpbmcsIHN0YXQgPSAleFxuIiwKIAkJX19mdW5jX18sIGlvcmVhZDMyKEkyQ19SRUdfU1RTKGFsZ19kYXRhKSkpOwogCiAJaWYgKGNvbXBsZXRlZCAhPSBudW0pCkBAIC01NDUsNjkgKzU0NCw5MiBAQAogCS5mdW5jdGlvbmFsaXR5ID0gaTJjX3BueF9mdW5jLAogfTsKIAorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBpMmNfcG54X2NvbnRyb2xsZXJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJCSAgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgaTJjX3BueF9kYXRhICppMmNfcG54ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0JcmV0dXJuIGkyY19wbngtPnN1c3BlbmQocGRldiwgc3RhdGUpOworCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCS8qIEZJWE1FOiBzaG91bGRuJ3QgdGhpcyBiZSBjbGtfZGlzYWJsZT8gKi8KKwljbGtfZW5hYmxlKGFsZ19kYXRhLT5jbGspOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaTJjX3BueF9jb250cm9sbGVyX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBpMmNfcG54X2RhdGEgKmkyY19wbnggPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlyZXR1cm4gaTJjX3BueC0+cmVzdW1lKHBkZXYpOworCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXJldHVybiBjbGtfZW5hYmxlKGFsZ19kYXRhLT5jbGspOwogfQorI2Vsc2UKKyNkZWZpbmUgaTJjX3BueF9jb250cm9sbGVyX3N1c3BlbmQJTlVMTAorI2RlZmluZSBpMmNfcG54X2NvbnRyb2xsZXJfcmVzdW1lCU5VTEwKKyNlbmRpZgogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpMmNfcG54X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGkyY19wbnhfYWxnb19kYXRhICphbGdfZGF0YTsKLQlpbnQgZnJlcV9taHo7CisJdW5zaWduZWQgbG9uZyBmcmVxOwogCXN0cnVjdCBpMmNfcG54X2RhdGEgKmkyY19wbnggPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAotCWlmICghaTJjX3BueCB8fCAhaTJjX3BueC0+YWRhcHRlcikgeworCWlmICghaTJjX3BueCB8fCAhaTJjX3BueC0+bmFtZSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogbm8gcGxhdGZvcm0gZGF0YSBzdXBwbGllZFxuIiwKIAkJICAgICAgIF9fZnVuY19fKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaTJjX3BueCk7Ci0KLQlpZiAoaTJjX3BueC0+Y2FsY3VsYXRlX2lucHV0X2ZyZXEpCi0JCWZyZXFfbWh6ID0gaTJjX3BueC0+Y2FsY3VsYXRlX2lucHV0X2ZyZXEocGRldik7Ci0JZWxzZSB7Ci0JCWZyZXFfbWh6ID0gUE5YX0RFRkFVTFRfRlJFUTsKLQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIlNldHRpbmcgYnVzIGZyZXF1ZW5jeSB0byBkZWZhdWx0IHZhbHVlOiAiCi0JCSAgICAgICAiJWQgTUh6XG4iLCBmcmVxX21oeik7CisJYWxnX2RhdGEgPSBremFsbG9jKHNpemVvZigqYWxnX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFsZ19kYXRhKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2t6YWxsb2M7CiAJfQogCi0JaTJjX3BueC0+YWRhcHRlci0+YWxnbyA9ICZwbnhfYWxnb3JpdGhtOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGFsZ19kYXRhKTsKIAotCWFsZ19kYXRhID0gaTJjX3BueC0+YWRhcHRlci0+YWxnb19kYXRhOwotCWluaXRfdGltZXIoJmFsZ19kYXRhLT5taWYudGltZXIpOwotCWFsZ19kYXRhLT5taWYudGltZXIuZnVuY3Rpb24gPSBpMmNfcG54X3RpbWVvdXQ7Ci0JYWxnX2RhdGEtPm1pZi50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaTJjX3BueC0+YWRhcHRlcjsKKwlzdHJsY3B5KGFsZ19kYXRhLT5hZGFwdGVyLm5hbWUsIGkyY19wbngtPm5hbWUsCisJCXNpemVvZihhbGdfZGF0YS0+YWRhcHRlci5uYW1lKSk7CisJYWxnX2RhdGEtPmFkYXB0ZXIuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJYWxnX2RhdGEtPmFkYXB0ZXIuYWxnbyA9ICZwbnhfYWxnb3JpdGhtOworCWFsZ19kYXRhLT5hZGFwdGVyLmFsZ29fZGF0YSA9IGFsZ19kYXRhOworCWFsZ19kYXRhLT5hZGFwdGVyLm5yID0gcGRldi0+aWQ7CisJYWxnX2RhdGEtPmkyY19wbnggPSBpMmNfcG54OwogCi0JLyogUmVnaXN0ZXIgSS9PIHJlc291cmNlICovCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oYWxnX2RhdGEtPmJhc2UsIEkyQ19QTlhfUkVHSU9OX1NJWkUsCi0JCQkJcGRldi0+bmFtZSkpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkgICAgICAgIkkvTyByZWdpb24gMHglMDh4IGZvciBJMkMgYWxyZWFkeSBpbiB1c2UuXG4iLAotCQkgICAgICAgYWxnX2RhdGEtPmJhc2UpOwotCQlyZXQgPSAtRU5PREVWOworCWFsZ19kYXRhLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoYWxnX2RhdGEtPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihhbGdfZGF0YS0+Y2xrKTsKIAkJZ290byBvdXRfZHJ2ZGF0YTsKIAl9CiAKLQlpZiAoIShhbGdfZGF0YS0+aW9hZGRyID0KLQkJCSh1MzIpaW9yZW1hcChhbGdfZGF0YS0+YmFzZSwgSTJDX1BOWF9SRUdJT05fU0laRSkpKSB7CisJaW5pdF90aW1lcigmYWxnX2RhdGEtPm1pZi50aW1lcik7CisJYWxnX2RhdGEtPm1pZi50aW1lci5mdW5jdGlvbiA9IGkyY19wbnhfdGltZW91dDsKKwlhbGdfZGF0YS0+bWlmLnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylhbGdfZGF0YTsKKworCS8qIFJlZ2lzdGVyIEkvTyByZXNvdXJjZSAqLworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGkyY19wbngtPmJhc2UsIEkyQ19QTlhfUkVHSU9OX1NJWkUsCisJCQkJcGRldi0+bmFtZSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkgICAgICAgIkkvTyByZWdpb24gMHglMDh4IGZvciBJMkMgYWxyZWFkeSBpbiB1c2UuXG4iLAorCQkgICAgICAgaTJjX3BueC0+YmFzZSk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2Nsa2dldDsKKwl9CisKKwlhbGdfZGF0YS0+aW9hZGRyID0gaW9yZW1hcChpMmNfcG54LT5iYXNlLCBJMkNfUE5YX1JFR0lPTl9TSVpFKTsKKwlpZiAoIWFsZ19kYXRhLT5pb2FkZHIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGRuJ3QgaW9yZW1hcCBJMkMgSS9PIHJlZ2lvblxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X3JlbGVhc2U7CiAJfQogCi0JaTJjX3BueC0+c2V0X2Nsb2NrX3J1bihwZGV2KTsKKwlyZXQgPSBjbGtfZW5hYmxlKGFsZ19kYXRhLT5jbGspOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VubWFwOworCisJZnJlcSA9IGNsa19nZXRfcmF0ZShhbGdfZGF0YS0+Y2xrKTsKIAogCS8qCiAJICogQ2xvY2sgRGl2aXNvciBIaWdoIFRoaXMgdmFsdWUgaXMgdGhlIG51bWJlciBvZiBzeXN0ZW0gY2xvY2tzCkBAIC02MjAsNDUgKzY0Miw0NyBAQAogCSAqIHRoZSBkZWdsaXRjaGluZyBmaWx0ZXIgbGVuZ3RoLgogCSAqLwogCi0JdG1wID0gKChmcmVxX21oeiAqIDEwMDApIC8gSTJDX1BOWF9TUEVFRF9LSFopIC8gMiAtIDI7CisJdG1wID0gKChmcmVxIC8gMTAwMCkgLyBJMkNfUE5YX1NQRUVEX0tIWikgLyAyIC0gMjsKIAlpb3dyaXRlMzIodG1wLCBJMkNfUkVHX0NLSChhbGdfZGF0YSkpOwogCWlvd3JpdGUzMih0bXAsIEkyQ19SRUdfQ0tMKGFsZ19kYXRhKSk7CiAKIAlpb3dyaXRlMzIobWNudHJsX3Jlc2V0LCBJMkNfUkVHX0NUTChhbGdfZGF0YSkpOwogCWlmICh3YWl0X3Jlc2V0KEkyQ19QTlhfVElNRU9VVCwgYWxnX2RhdGEpKSB7CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X3VubWFwOworCQlnb3RvIG91dF9jbG9jazsKIAl9CiAJaW5pdF9jb21wbGV0aW9uKCZhbGdfZGF0YS0+bWlmLmNvbXBsZXRlKTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKGFsZ19kYXRhLT5pcnEsIGkyY19wbnhfaW50ZXJydXB0LAotCQkJMCwgcGRldi0+bmFtZSwgaTJjX3BueC0+YWRhcHRlcik7CisJcmV0ID0gcmVxdWVzdF9pcnEoaTJjX3BueC0+aXJxLCBpMmNfcG54X2ludGVycnVwdCwKKwkJCTAsIHBkZXYtPm5hbWUsIGFsZ19kYXRhKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9jbG9jazsKIAogCS8qIFJlZ2lzdGVyIHRoaXMgYWRhcHRlciB3aXRoIHRoZSBJMkMgc3Vic3lzdGVtICovCi0JaTJjX3BueC0+YWRhcHRlci0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7Ci0JaTJjX3BueC0+YWRhcHRlci0+bnIgPSBwZGV2LT5pZDsKLQlyZXQgPSBpMmNfYWRkX251bWJlcmVkX2FkYXB0ZXIoaTJjX3BueC0+YWRhcHRlcik7CisJcmV0ID0gaTJjX2FkZF9udW1iZXJlZF9hZGFwdGVyKCZhbGdfZGF0YS0+YWRhcHRlcik7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiSTJDOiBGYWlsZWQgdG8gYWRkIGJ1c1xuIik7CiAJCWdvdG8gb3V0X2lycTsKIAl9CiAKIAlkZXZfZGJnKCZwZGV2LT5kZXYsICIlczogTWFzdGVyIGF0ICUjOHgsIGlycSAlZC5cbiIsCi0JICAgICAgIGkyY19wbngtPmFkYXB0ZXItPm5hbWUsIGFsZ19kYXRhLT5iYXNlLCBhbGdfZGF0YS0+aXJxKTsKKwkgICAgICAgYWxnX2RhdGEtPmFkYXB0ZXIubmFtZSwgaTJjX3BueC0+YmFzZSwgaTJjX3BueC0+aXJxKTsKIAogCXJldHVybiAwOwogCiBvdXRfaXJxOgotCWZyZWVfaXJxKGFsZ19kYXRhLT5pcnEsIGkyY19wbngtPmFkYXB0ZXIpOworCWZyZWVfaXJxKGkyY19wbngtPmlycSwgYWxnX2RhdGEpOwogb3V0X2Nsb2NrOgotCWkyY19wbngtPnNldF9jbG9ja19zdG9wKHBkZXYpOworCWNsa19kaXNhYmxlKGFsZ19kYXRhLT5jbGspOwogb3V0X3VubWFwOgotCWlvdW5tYXAoKHZvaWQgKilhbGdfZGF0YS0+aW9hZGRyKTsKKwlpb3VubWFwKGFsZ19kYXRhLT5pb2FkZHIpOwogb3V0X3JlbGVhc2U6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGFsZ19kYXRhLT5iYXNlLCBJMkNfUE5YX1JFR0lPTl9TSVpFKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaTJjX3BueC0+YmFzZSwgSTJDX1BOWF9SRUdJT05fU0laRSk7CitvdXRfY2xrZ2V0OgorCWNsa19wdXQoYWxnX2RhdGEtPmNsayk7CiBvdXRfZHJ2ZGF0YToKKwlrZnJlZShhbGdfZGF0YSk7CitlcnJfa3phbGxvYzoKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtNjY2LDE1ICs2OTAsMTYgQEAKIAogc3RhdGljIGludCBfX2RldmV4aXQgaTJjX3BueF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgaTJjX3BueF9kYXRhICppMmNfcG54ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gaTJjX3BueC0+YWRhcHRlcjsKLQlzdHJ1Y3QgaTJjX3BueF9hbGdvX2RhdGEgKmFsZ19kYXRhID0gYWRhcC0+YWxnb19kYXRhOworCXN0cnVjdCBpMmNfcG54X2FsZ29fZGF0YSAqYWxnX2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgaTJjX3BueF9kYXRhICppMmNfcG54ID0gYWxnX2RhdGEtPmkyY19wbng7CiAKLQlmcmVlX2lycShhbGdfZGF0YS0+aXJxLCBpMmNfcG54LT5hZGFwdGVyKTsKLQlpMmNfZGVsX2FkYXB0ZXIoYWRhcCk7Ci0JaTJjX3BueC0+c2V0X2Nsb2NrX3N0b3AocGRldik7Ci0JaW91bm1hcCgodm9pZCAqKWFsZ19kYXRhLT5pb2FkZHIpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihhbGdfZGF0YS0+YmFzZSwgSTJDX1BOWF9SRUdJT05fU0laRSk7CisJZnJlZV9pcnEoaTJjX3BueC0+aXJxLCBhbGdfZGF0YSk7CisJaTJjX2RlbF9hZGFwdGVyKCZhbGdfZGF0YS0+YWRhcHRlcik7CisJY2xrX2Rpc2FibGUoYWxnX2RhdGEtPmNsayk7CisJaW91bm1hcChhbGdfZGF0YS0+aW9hZGRyKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaTJjX3BueC0+YmFzZSwgSTJDX1BOWF9SRUdJT05fU0laRSk7CisJY2xrX3B1dChhbGdfZGF0YS0+Y2xrKTsKKwlrZnJlZShhbGdfZGF0YSk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYyBiL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYwppbmRleCA4N2NlZjBjLi4zNDlhNjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jCkBAIC01Niw4ICs1Niw4IEBACiAJY2hhbl90YWJfdCAqY3RwOwogCWF1MXhfZGRtYV9kZXNjX3QgKmRwOwogCi0JaWYoIXB1dF9kZXN0X2ZsYWdzKGFod2lmLT5yeF9jaGFuLCAodm9pZCopYWRkciwgY291bnQgPDwgMSwgCi0JCQkgICBERE1BX0ZMQUdTX05PSUUpKSB7CisJaWYgKCFhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoYWh3aWYtPnJ4X2NoYW4sIHZpcnRfdG9fcGh5cyhhZGRyKSwKKwkJCQkgICBjb3VudCA8PCAxLCBERE1BX0ZMQUdTX05PSUUpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMgZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCQlyZXR1cm47CiAJfQpAQCAtNzQsOCArNzQsOCBAQAogCWNoYW5fdGFiX3QgKmN0cDsKIAlhdTF4X2RkbWFfZGVzY190ICpkcDsKIAotCWlmKCFwdXRfc291cmNlX2ZsYWdzKGFod2lmLT50eF9jaGFuLCAodm9pZCopYWRkciwKLQkJCSAgICAgY291bnQgPDwgMSwgRERNQV9GTEFHU19OT0lFKSkgeworCWlmICghYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoYWh3aWYtPnR4X2NoYW4sIHZpcnRfdG9fcGh5cyhhZGRyKSwKKwkJCQkgICAgIGNvdW50IDw8IDEsIERETUFfRkxBR1NfTk9JRSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgJWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCXJldHVybjsKIAl9CkBAIC0yNDYsMTcgKzI0NiwxNCBAQAogCQkJCWZsYWdzID0gRERNQV9GTEFHU19OT0lFOwogCiAJCQlpZiAoaXN3cml0ZSkgewotCQkJCWlmKCFwdXRfc291cmNlX2ZsYWdzKGFod2lmLT50eF9jaGFuLCAKLQkJCQkJCSAgICAgKHZvaWQqKSBzZ192aXJ0KHNnKSwKLQkJCQkJCSAgICAgdGMsIGZsYWdzKSkgeyAKKwkJCQlpZiAoIWF1MXh4eF9kYmRtYV9wdXRfc291cmNlKGFod2lmLT50eF9jaGFuLAorCQkJCQlzZ19waHlzKHNnKSwgdGMsIGZsYWdzKSkgewogCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzIGZhaWxlZCAlZFxuIiwgCiAJCQkJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18pOwogCQkJCX0KLQkJCX0gZWxzZSAKLQkJCXsKLQkJCQlpZighcHV0X2Rlc3RfZmxhZ3MoYWh3aWYtPnJ4X2NoYW4sIAotCQkJCQkJICAgKHZvaWQqKSBzZ192aXJ0KHNnKSwKLQkJCQkJCSAgIHRjLCBmbGFncykpIHsgCisJCQl9IGVsc2UgIHsKKwkJCQlpZiAoIWF1MXh4eF9kYmRtYV9wdXRfZGVzdChhaHdpZi0+cnhfY2hhbiwKKwkJCQkJc2dfcGh5cyhzZyksIHRjLCBmbGFncykpIHsKIAkJCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgJWRcbiIsIAogCQkJCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fKTsKIAkJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jIGIvZHJpdmVycy9pZGUvaWRlLWRpc2suYwppbmRleCA3Zjg3ODAxLi4zYjEyOGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKQEAgLTY3OSw3ICs2NzksNyBAQAogCQlpZiAobWF4X3MgPiBod2lmLT5ycXNpemUpCiAJCQltYXhfcyA9IGh3aWYtPnJxc2l6ZTsKIAotCQlibGtfcXVldWVfbWF4X3NlY3RvcnMocSwgbWF4X3MpOworCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocSwgbWF4X3MpOwogCX0KIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBtYXggcmVxdWVzdCBzaXplOiAlZEtpQlxuIiwgZHJpdmUtPm5hbWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKaW5kZXggZmVmYmRmYy4uZWZkOTA3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwpAQCAtNDg2LDcgKzQ4Niw3IEBACiAJCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfWklQX0RSSVZFOwogCQkvKiBUaGlzIHZhbHVlIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgL3Byb2MvaWRlL2hkeC9zZXR0aW5ncyAqLwogCQlkcml2ZS0+cGNfZGVsYXkgPSBJREVGTE9QUFlfUENfREVMQVk7Ci0JCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhkcml2ZS0+cXVldWUsIDY0KTsKKwkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKGRyaXZlLT5xdWV1ZSwgNjQpOwogCX0KIAogCS8qCkBAIC00OTQsNyArNDk0LDcgQEAKIAkgKiBuYXN0eSBjbGlja2luZyBub2lzZXMgd2l0aG91dCBpdCwgc28gcGxlYXNlIGRvbid0IHJlbW92ZSB0aGlzLgogCSAqLwogCWlmIChzdHJuY21wKChjaGFyICopJmlkW0FUQV9JRF9QUk9EXSwgIklPTUVHQSBDbGlrISIsIDExKSA9PSAwKSB7Ci0JCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhkcml2ZS0+cXVldWUsIDY0KTsKKwkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKGRyaXZlLT5xdWV1ZSwgNjQpOwogCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX0NMSUtfRFJJVkU7CiAJCS8qIElPTUVHQSBDbGlrISBkcml2ZXMgZG8gbm90IHN1cHBvcnQgbG9jay91bmxvY2sgY29tbWFuZHMgKi8KIAkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0RPT1JMT0NLSU5HOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwppbmRleCA0ZDc2YmE0Li5mOGMxYWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwpAQCAtNzc0LDcgKzc3NCw3IEBACiAKIAlpZiAoaHdpZi0+cnFzaXplIDwgbWF4X3NlY3RvcnMpCiAJCW1heF9zZWN0b3JzID0gaHdpZi0+cnFzaXplOwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhxLCBtYXhfc2VjdG9ycyk7CisJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHEsIG1heF9zZWN0b3JzKTsKIAogI2lmZGVmIENPTkZJR19QQ0kKIAkvKiBXaGVuIHdlIGhhdmUgYW4gSU9NTVUsIHdlIG1heSBoYXZlIGEgcHJvYmxlbSB3aGVyZSBwY2lfbWFwX3NnKCkKQEAgLTc5MCw4ICs3OTAsNyBAQAogCQltYXhfc2dfZW50cmllcyA+Pj0gMTsKICNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEsIG1heF9zZ19lbnRyaWVzKTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSwgbWF4X3NnX2VudHJpZXMpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocSwgbWF4X3NnX2VudHJpZXMpOwogCiAJLyogYXNzaWduIGRyaXZlIHF1ZXVlICovCiAJZHJpdmUtPnF1ZXVlID0gcTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKaW5kZXggZjE5OTg5Ni4uYzg4Njk2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKQEAgLTIwMjAsNyArMjAyMCw3IEBACiAJaWYgKGx1LT53b3JrYXJvdW5kcyAmIFNCUDJfV09SS0FST1VORF9QT1dFUl9DT05ESVRJT04pCiAJCXNkZXYtPnN0YXJ0X3N0b3BfcHdyX2NvbmQgPSAxOwogCWlmIChsdS0+d29ya2Fyb3VuZHMgJiBTQlAyX1dPUktBUk9VTkRfMTI4S19NQVhfVFJBTlMpCi0JCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCAxMjggKiAxMDI0IC8gNTEyKTsKKwkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIDEyOCAqIDEwMjQgLyA1MTIpOwogCiAJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgU0JQMl9NQVhfU0VHX1NJWkUpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L0tjb25maWcgYi9kcml2ZXJzL2lzZG4vaGlzYXgvS2NvbmZpZwppbmRleCAzNDY0ZWJjLi40NTJmZGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvS2NvbmZpZworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvS2NvbmZpZwpAQCAtMTA5LDcgKzEwOSw3IEBACiAKIGNvbmZpZyBISVNBWF9URUxFU1BDSQogCWJvb2wgIlRlbGVzIFBDSSIKLQlkZXBlbmRzIG9uIFBDSSAmJiBQQ0lfTEVHQUNZICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQorCWRlcGVuZHMgb24gUENJICYmIChCUk9LRU4gfHwgIShTUEFSQyB8fCBQUEMgfHwgUEFSSVNDIHx8IE02OEsgfHwgKE1JUFMgJiYgIUNQVV9MSVRUTEVfRU5ESUFOKSB8fCBGUlYpKQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBIaVNheCBzdXBwb3J0IGZvciB0aGUgVGVsZXMgUENJLgogCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuSGlTYXg+IG9uIGhvdyB0byBjb25maWd1cmUgaXQuCkBAIC0yMzcsNyArMjM3LDcgQEAKIAogY29uZmlnIEhJU0FYX05FVEpFVAogCWJvb2wgIk5FVGpldCBjYXJkIgotCWRlcGVuZHMgb24gUENJICYmIFBDSV9MRUdBQ1kgJiYgKEJST0tFTiB8fCAhKFNQQVJDIHx8IFBQQyB8fCBQQVJJU0MgfHwgTTY4SyB8fCAoTUlQUyAmJiAhQ1BVX0xJVFRMRV9FTkRJQU4pIHx8IEZSVikpCisJZGVwZW5kcyBvbiBQQ0kgJiYgKEJST0tFTiB8fCAhKFNQQVJDIHx8IFBQQyB8fCBQQVJJU0MgfHwgTTY4SyB8fCAoTUlQUyAmJiAhQ1BVX0xJVFRMRV9FTkRJQU4pIHx8IEZSVikpCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIEhpU2F4IHN1cHBvcnQgZm9yIHRoZSBOZXRKZXQgZnJvbSBUcmF2ZXJzZQogCSAgVGVjaG5vbG9naWVzLgpAQCAtMjQ4LDcgKzI0OCw3IEBACiAKIGNvbmZpZyBISVNBWF9ORVRKRVRfVQogCWJvb2wgIk5FVHNwaWRlciBVIGNhcmQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgUENJX0xFR0FDWSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKKwlkZXBlbmRzIG9uIFBDSSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgdGhlIE5ldHNwaWRlciBVIGludGVyZmFjZSBJU0ROIGNhcmQKIAkgIGZyb20gVHJhdmVyc2UgVGVjaG5vbG9naWVzLgpAQCAtMjg3LDcgKzI4Nyw3IEBACiAKIGNvbmZpZyBISVNBWF9CS01fQTRUCiAJYm9vbCAiVGVsZWtvbSBBNFQgY2FyZCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBQQ0lfTEVHQUNZCisJZGVwZW5kcyBvbiBQQ0kKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgdGhlIFRlbGVrb20gQTRUIGNhcmQuCiAKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCiBjb25maWcgSElTQVhfU0NUX1FVQURSTwogCWJvb2wgIlNjaXRlbCBRdWFkcm8gY2FyZCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBQQ0lfTEVHQUNZCisJZGVwZW5kcyBvbiBQQ0kKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgdGhlIFNjaXRlbCBRdWFkcm8gY2FyZC4KIApAQCAtMzE2LDcgKzMxNiw3IEBACiAKIGNvbmZpZyBISVNBWF9IRkNfUENJCiAJYm9vbCAiSEZDIFBDSS1CdXMgY2FyZHMiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgUENJX0xFR0FDWSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKKwlkZXBlbmRzIG9uIFBDSSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgSGlTYXggc3VwcG9ydCBmb3IgdGhlIEhGQy1TIFBDSSAyQkRTMCBiYXNlZCBjYXJkcy4KIApAQCAtMzI1LDcgKzMyNSw3IEBACiAKIGNvbmZpZyBISVNBWF9XNjY5MgogCWJvb2wgIldpbmJvbmQgVzY2OTIgYmFzZWQgY2FyZHMiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgUENJX0xFR0FDWQorCWRlcGVuZHMgb24gUENJCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIEhpU2F4IHN1cHBvcnQgZm9yIFdpbmJvbmQgVzY2OTIgYmFzZWQgUENJIElTRE4gY2FyZHMuCiAKQEAgLTM0MSw3ICszNDEsNyBAQAogCiBjb25maWcgSElTQVhfRU5URVJOT1dfUENJCiAJYm9vbCAiRm9ybXVsYS1uIGVudGVyOm5vdyBQQ0kgY2FyZCIKLQlkZXBlbmRzIG9uIEhJU0FYX05FVEpFVCAmJiBQQ0kgJiYgUENJX0xFR0FDWSAmJiAoQlJPS0VOIHx8ICEoU1BBUkMgfHwgUFBDIHx8IFBBUklTQyB8fCBNNjhLIHx8IChNSVBTICYmICFDUFVfTElUVExFX0VORElBTikgfHwgRlJWKSkKKwlkZXBlbmRzIG9uIEhJU0FYX05FVEpFVCAmJiBQQ0kgJiYgKEJST0tFTiB8fCAhKFNQQVJDIHx8IFBQQyB8fCBQQVJJU0MgfHwgTTY4SyB8fCAoTUlQUyAmJiAhQ1BVX0xJVFRMRV9FTkRJQU4pIHx8IEZSVikpCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIEhpU2F4IHN1cHBvcnQgZm9yIHRoZSBGb3JtdWxhLW4gZW50ZXI6bm93IFBDSQogCSAgSVNETiBjYXJkLgpAQCAtNDEyLDcgKzQxMiw3IEBACiAKIGNvbmZpZyBISVNBWF9GUklUWl9QQ0lQTlAKIAl0cmlzdGF0ZSAiQVZNIEZyaXR6IUNhcmQgUENJL1BDSXYyL1BuUCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gUENJICYmIFBDSV9MRUdBQ1kgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBQQ0kgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSBkcml2ZXIgZm9yIHRoZSBBVk0gRnJpdHohQ2FyZCBQQ0ksCiAJICBGcml0eiFDYXJkIFBDSSB2MiBhbmQgRnJpdHohQ2FyZCBQblAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtX3BjaS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2F2bV9wY2kuYwppbmRleCA3Y2FiYzVhLi4xNDI5NWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtX3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1fcGNpLmMKQEAgLTgyMiw3ICs4MjIsNyBAQAogCiAjZW5kaWYgLyogX19JU0FQTlBfXyAqLwogCi0jaWZuZGVmIENPTkZJR19QQ0lfTEVHQUNZCisjaWZuZGVmIENPTkZJR19QQ0kKIAogc3RhdGljIGludCBfX2RldmluaXQgYXZtX3BjaV9zZXR1cChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCiB7CkBAIC04MzUsNyArODM1LDcgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgYXZtX3BjaV9zZXR1cChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCiB7Ci0JaWYgKChkZXZfYXZtID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQVZNLAorCWlmICgoZGV2X2F2bSA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX0FWTSwKIAkJUENJX0RFVklDRV9JRF9BVk1fQTEsIGRldl9hdm0pKSkgewogCiAJCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXZfYXZtKSkKQEAgLTg2NCw3ICs4NjQsNyBAQAogCXJldHVybiAoMSk7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfUENJX0xFR0FDWSAqLworI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KIAogaW50IF9fZGV2aW5pdAogc2V0dXBfYXZtX3BjaXBucChzdHJ1Y3QgSXNkbkNhcmQgKmNhcmQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E0dC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2JrbV9hNHQuYwppbmRleCA5Y2EyZWU1Li45ZjIwMDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E0dC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTR0LmMKQEAgLTM0MCw3ICszNDAsNyBAQAogCX0gZWxzZQogCQlyZXR1cm4gKDApOwogCi0Jd2hpbGUgKChkZXZfYTR0ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfWk9SQU4sCisJd2hpbGUgKChkZXZfYTR0ID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfWk9SQU4sCiAJCVBDSV9ERVZJQ0VfSURfWk9SQU5fMzYxMjAsIGRldl9hNHQpKSkgewogCQlyZXQgPSBhNHRfcGNpX3Byb2JlKGRldl9hNHQsIGNzLCAmZm91bmQsICZwY2lfbWVtYWRkcik7CiAJCWlmICghcmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2JrbV9hOC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2JrbV9hOC5jCmluZGV4IGUxZmY0NzEuLmU3NzU3MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTguYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E4LmMKQEAgLTMwMSw3ICszMDEsNyBAQAogCQkoc3ViX3ZlbmRvcl9pZCAhPSBQQ0lfVkVORE9SX0lEX0JFUktPTSkpKQogCQlyZXR1cm4gKDApOwogCWlmIChjcy0+c3VidHlwID09IFNDVF8xKSB7Ci0JCXdoaWxlICgoZGV2X2E4ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfUExYLAorCQl3aGlsZSAoKGRldl9hOCA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX1BMWCwKIAkJCVBDSV9ERVZJQ0VfSURfUExYXzkwNTAsIGRldl9hOCkpKSB7CiAJCQkKIAkJCXN1Yl92ZW5kb3JfaWQgPSBkZXZfYTgtPnN1YnN5c3RlbV92ZW5kb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZGl2YS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2RpdmEuYwppbmRleCAwYjBjMmU1Li43ODBkYTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZGl2YS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9kaXZhLmMKQEAgLTExNDgsNyArMTE0OCw3IEBACiAKICNlbmRpZgkvKiBJU0FQTlAgKi8KIAotI2lmZGVmIENPTkZJR19QQ0lfTEVHQUNZCisjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpkZXZfZGl2YSBfX2RldmluaXRkYXRhID0gTlVMTDsKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqZGV2X2RpdmFfdSBfX2RldmluaXRkYXRhID0gTlVMTDsKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqZGV2X2RpdmEyMDEgX19kZXZpbml0ZGF0YSA9IE5VTEw7CkBAIC0xMTU5LDIxICsxMTU5LDIxIEBACiAJc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzID0gY2FyZC0+Y3M7CiAKIAljcy0+c3VidHlwID0gMDsKLQlpZiAoKGRldl9kaXZhID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfRUlDT04sCisJaWYgKChkZXZfZGl2YSA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX0VJQ09OLAogCQlQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMCwgZGV2X2RpdmEpKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X2RpdmEpKQogCQkJcmV0dXJuKDApOwogCQljcy0+c3VidHlwID0gRElWQV9QQ0k7CiAJCWNzLT5pcnEgPSBkZXZfZGl2YS0+aXJxOwogCQljcy0+aHcuZGl2YS5jZmdfcmVnID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldl9kaXZhLCAyKTsKLQl9IGVsc2UgaWYgKChkZXZfZGl2YV91ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfRUlDT04sCisJfSBlbHNlIGlmICgoZGV2X2RpdmFfdSA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX0VJQ09OLAogCQlQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMF9VLCBkZXZfZGl2YV91KSkpIHsKIAkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldl9kaXZhX3UpKQogCQkJcmV0dXJuKDApOwogCQljcy0+c3VidHlwID0gRElWQV9QQ0k7CiAJCWNzLT5pcnEgPSBkZXZfZGl2YV91LT5pcnE7CiAJCWNzLT5ody5kaXZhLmNmZ19yZWcgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2X2RpdmFfdSwgMik7Ci0JfSBlbHNlIGlmICgoZGV2X2RpdmEyMDEgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FSUNPTiwKKwl9IGVsc2UgaWYgKChkZXZfZGl2YTIwMSA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX0VJQ09OLAogCQlQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMDEsIGRldl9kaXZhMjAxKSkpIHsKIAkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldl9kaXZhMjAxKSkKIAkJCXJldHVybigwKTsKQEAgLTExODMsNyArMTE4Myw3IEBACiAJCQkodWxvbmcpIGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldl9kaXZhMjAxLCAwKSwgNDA5Nik7CiAJCWNzLT5ody5kaXZhLmNmZ19yZWcgPQogCQkJKHVsb25nKSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXZfZGl2YTIwMSwgMSksIDQwOTYpOwotCX0gZWxzZSBpZiAoKGRldl9kaXZhMjAyID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfRUlDT04sCisJfSBlbHNlIGlmICgoZGV2X2RpdmEyMDIgPSBoaXNheF9maW5kX3BjaV9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FSUNPTiwKIAkJUENJX0RFVklDRV9JRF9FSUNPTl9ESVZBMjAyLCBkZXZfZGl2YTIwMikpKSB7CiAJCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXZfZGl2YTIwMikpCiAJCQlyZXR1cm4oMCk7CkBAIC0xMjI5LDE0ICsxMjI5LDE0IEBACiAJcmV0dXJuICgxKTsJCS8qIGNhcmQgZm91bmQgKi8KIH0KIAotI2Vsc2UJLyogaWYgIUNPTkZJR19QQ0lfTEVHQUNZICovCisjZWxzZQkvKiBpZiAhQ09ORklHX1BDSSAqLwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzZXR1cF9kaXZhX3BjaShzdHJ1Y3QgSXNkbkNhcmQgKmNhcmQpCiB7CiAJcmV0dXJuICgtMSk7CS8qIGNhcmQgbm90IGZvdW5kOyBjb250aW51ZSBzZWFyY2ggKi8KIH0KIAotI2VuZGlmCS8qIENPTkZJR19QQ0lfTEVHQUNZICovCisjZW5kaWYJLyogQ09ORklHX1BDSSAqLwogCiBpbnQgX19kZXZpbml0CiBzZXR1cF9kaXZhKHN0cnVjdCBJc2RuQ2FyZCAqY2FyZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYS5jCmluZGV4IGFhMjlkMWMuLjIzYzQxZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2EuYwpAQCAtMTAyNSw3ICsxMDI1LDcgQEAKIAkgICAgICAgY3MtPmlycSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUENJX0xFR0FDWQorI2lmZGVmIENPTkZJR19QQ0kKIHN0YXRpYyAJc3RydWN0IHBjaV9kZXYgKmRldl9xczEwMDAgX19kZXZpbml0ZGF0YSA9IE5VTEw7CiBzdGF0aWMgCXN0cnVjdCBwY2lfZGV2ICpkZXZfcXMzMDAwIF9fZGV2aW5pdGRhdGEgPSBOVUxMOwogCkBAIC0xMDM1LDcgKzEwMzUsNyBAQAogCXN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcyA9IGNhcmQtPmNzOwogCiAJY3MtPnN1YnR5cCA9IDA7Ci0JaWYgKChkZXZfcXMxMDAwID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfRUxTQSwKKwlpZiAoKGRldl9xczEwMDAgPSBoaXNheF9maW5kX3BjaV9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FTFNBLAogCQlQQ0lfREVWSUNFX0lEX0VMU0FfTUlDUk9MSU5LLCBkZXZfcXMxMDAwKSkpIHsKIAkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldl9xczEwMDApKQogCQkJcmV0dXJuKDApOwpAQCAtMTA0Myw3ICsxMDQzLDcgQEAKIAkJY3MtPmlycSA9IGRldl9xczEwMDAtPmlycTsKIAkJY3MtPmh3LmVsc2EuY2ZnID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldl9xczEwMDAsIDEpOwogCQljcy0+aHcuZWxzYS5iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldl9xczEwMDAsIDMpOwotCX0gZWxzZSBpZiAoKGRldl9xczMwMDAgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FTFNBLAorCX0gZWxzZSBpZiAoKGRldl9xczMwMDAgPSBoaXNheF9maW5kX3BjaV9kZXZpY2UoUENJX1ZFTkRPUl9JRF9FTFNBLAogCQlQQ0lfREVWSUNFX0lEX0VMU0FfUVMzMDAwLCBkZXZfcXMzMDAwKSkpIHsKIAkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldl9xczMwMDApKQogCQkJcmV0dXJuKDApOwpAQCAtMTA5Myw3ICsxMDkzLDcgQEAKIHsKIAlyZXR1cm4gKDEpOwogfQotI2VuZGlmIC8qIENPTkZJR19QQ0lfTEVHQUNZICovCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdAogc2V0dXBfZWxzYV9jb21tb24oc3RydWN0IElzZG5DYXJkICpjYXJkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2VudGVybm93X3BjaS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2VudGVybm93X3BjaS5jCmluZGV4IDM5ZjQyMWUuLjI2MjY0YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbnRlcm5vd19wY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZW50ZXJub3dfcGNpLmMKQEAgLTQwNiw3ICs0MDYsNyBAQAogCiAJZm9yICggOzsgKQogCXsKLQkJaWYgKChkZXZfbmV0amV0ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfVElHRVJKRVQsCisJCWlmICgoZGV2X25ldGpldCA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX1RJR0VSSkVULAogCQkJUENJX0RFVklDRV9JRF9USUdFUkpFVF8zMDAsICBkZXZfbmV0amV0KSkpIHsKIAkJCXJldCA9IGVuX3BjaV9wcm9iZShkZXZfbmV0amV0LCBjcyk7CiAJCQlpZiAoIXJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9nYXplbC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2dhemVsLmMKaW5kZXggMGVhM2I0Ni4uMzUzOTgyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2dhemVsLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2dhemVsLmMKQEAgLTUzMSw3ICs1MzEsNyBAQAogCXJldHVybiAoMCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUENJX0xFR0FDWQorI2lmZGVmIENPTkZJR19QQ0kKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqZGV2X3RlbCBfX2RldmluaXRkYXRhID0gTlVMTDsKIAogc3RhdGljIGludCBfX2RldmluaXQKQEAgLTU0Niw3ICs1NDYsNyBAQAogCWZvdW5kID0gMDsKIAlzZWVrY2FyZCA9IFBDSV9ERVZJQ0VfSURfUExYX1I2ODU7CiAJZm9yIChuYnNlZWsgPSAwOyBuYnNlZWsgPCA0OyBuYnNlZWsrKykgewotCQlpZiAoKGRldl90ZWwgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9QTFgsCisJCWlmICgoZGV2X3RlbCA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX1BMWCwKIAkJCQkJc2Vla2NhcmQsIGRldl90ZWwpKSkgewogCQkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldl90ZWwpKQogCQkJCXJldHVybiAxOwpAQCAtNjIwLDcgKzYyMCw3IEBACiAKIAlyZXR1cm4gKDApOwogfQotI2VuZGlmIC8qIENPTkZJR19QQ0lfTEVHQUNZICovCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiBpbnQgX19kZXZpbml0CiBzZXR1cF9nYXplbChzdHJ1Y3QgSXNkbkNhcmQgKmNhcmQpCkBAIC02NDAsNyArNjQwLDcgQEAKIAkJCXJldHVybiAoMCk7CiAJfSBlbHNlIHsKIAotI2lmZGVmIENPTkZJR19QQ0lfTEVHQUNZCisjaWZkZWYgQ09ORklHX1BDSQogCQlpZiAoc2V0dXBfZ2F6ZWxwY2koY3MpKQogCQkJcmV0dXJuICgwKTsKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYwppbmRleCAxMDkxNDczLi45MTdjYzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKQEAgLTE2NTgsNyArMTY1OCw3IEBACiAKIAlpID0gMDsKIAl3aGlsZSAoaWRfbGlzdFtpXS52ZW5kb3JfaWQpIHsKLQkJdG1wX2hmY3BjaSA9IHBjaV9maW5kX2RldmljZShpZF9saXN0W2ldLnZlbmRvcl9pZCwKKwkJdG1wX2hmY3BjaSA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShpZF9saXN0W2ldLnZlbmRvcl9pZCwKIAkJCQkJICAgICBpZF9saXN0W2ldLmRldmljZV9pZCwKIAkJCQkJICAgICBkZXZfaGZjcGNpKTsKIAkJaSsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hpc2F4LmggYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaAppbmRleCAwNjg1YzE5Li44MzJhODc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaAorKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaApAQCAtMTMyMywzICsxMzIzLDI2IEBACiBjaGFyICpIaVNheF9nZXRyZXYoY29uc3QgY2hhciAqcmV2aXNpb24pOwogaW50IFRlaU5ldyh2b2lkKTsKIHZvaWQgVGVpRnJlZSh2b2lkKTsKKworI2lmZGVmIENPTkZJR19QQ0kKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCisvKiBhZGFwdGF0aW9uIHdyYXBwZXIgZm9yIG9sZCB1c2FnZQorICogV0FSTklORyEgVGhpcyBpcyB1bmZpdCBmb3IgdXNlIGluIGEgUENJIGhvdHBsdWcgZW52aXJvbm1lbnQsCisgKiBhcyB0aGUgcmV0dXJuZWQgUENJIGRldmljZSBjYW4gZGlzYXBwZWFyIGF0IGFueSBtb21lbnQgaW4gdGltZS4KKyAqIENhbGxlcnMgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byB1c2UgcGNpX2dldF9kZXZpY2UoKSBpbnN0ZWFkLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2ICpoaXNheF9maW5kX3BjaV9kZXZpY2UodW5zaWduZWQgaW50IHZlbmRvciwKKwkJCQkJCSAgICB1bnNpZ25lZCBpbnQgZGV2aWNlLAorCQkJCQkJICAgIHN0cnVjdCBwY2lfZGV2ICpmcm9tKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCisJcGNpX2Rldl9nZXQoZnJvbSk7CisJcGRldiA9IHBjaV9nZXRfc3Vic3lzKHZlbmRvciwgZGV2aWNlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBmcm9tKTsKKwlwY2lfZGV2X3B1dChwZGV2KTsKKwlyZXR1cm4gcGRldjsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvbmljY3kuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9uaWNjeS5jCmluZGV4IGVmMDA2MzMuLmNjYWE2ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9uaWNjeS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9uaWNjeS5jCkBAIC0yOTcsMTIgKzI5NywxMiBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAl9IGVsc2UgewotI2lmZGVmIENPTkZJR19QQ0lfTEVHQUNZCisjaWZkZWYgQ09ORklHX1BDSQogCQlzdGF0aWMgc3RydWN0IHBjaV9kZXYgKm5pY2N5X2RldiBfX2RldmluaXRkYXRhOwogCiAJCXVfaW50IHBjaV9pb2FkZHI7CiAJCWNzLT5zdWJ0eXAgPSAwOwotCQlpZiAoKG5pY2N5X2RldiA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX1NBVFNBR0VNLAorCQlpZiAoKG5pY2N5X2RldiA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX1NBVFNBR0VNLAogCQkJCQkJIFBDSV9ERVZJQ0VfSURfU0FUU0FHRU1fTklDQ1ksCiAJCQkJCQkgbmljY3lfZGV2KSkpIHsKIAkJCWlmIChwY2lfZW5hYmxlX2RldmljZShuaWNjeV9kZXYpKQpAQCAtMzU0LDcgKzM1NCw3IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5pY2N5OiBpbzAgMCBhbmQgTk9fUENJX0JJT1NcbiIpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJOaWNjeTogdW5hYmxlIHRvIGNvbmZpZyBOSUNDWSBQQ0lcbiIpOwogCQlyZXR1cm4gMDsKLSNlbmRpZgkJCQkvKiBDT05GSUdfUENJX0xFR0FDWSAqLworI2VuZGlmCQkJCS8qIENPTkZJR19QQ0kgKi8KIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyAiSGlTYXg6IE5JQ0NZICVzIGNvbmZpZyBpcnE6JWQgZGF0YToweCVYIGFsZToweCVYXG4iLAogCQkoY3MtPnN1YnR5cCA9PSAxKSA/ICJQblAiIDogIlBDSSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfcy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L25qX3MuYwppbmRleCA4ZDM2Y2NjLi4yMzQ0ZTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9ual9zLmMKQEAgLTI3Niw3ICsyNzYsNyBAQAogCiAJZm9yICggOzsgKQogCXsKLQkJaWYgKChkZXZfbmV0amV0ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfVElHRVJKRVQsCisJCWlmICgoZGV2X25ldGpldCA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX1RJR0VSSkVULAogCQkJUENJX0RFVklDRV9JRF9USUdFUkpFVF8zMDAsICBkZXZfbmV0amV0KSkpIHsKIAkJCXJldCA9IG5qc19wY2lfcHJvYmUoZGV2X25ldGpldCwgY3MpOwogCQkJaWYgKCFyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfdS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L25qX3UuYwppbmRleCBkMzA2Yzk0Li4wOTVlOTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfdS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9ual91LmMKQEAgLTI0MCw3ICsyNDAsNyBAQAogCiAJZm9yICggOzsgKQogCXsKLQkJaWYgKChkZXZfbmV0amV0ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfVElHRVJKRVQsCisJCWlmICgoZGV2X25ldGpldCA9IGhpc2F4X2ZpbmRfcGNpX2RldmljZShQQ0lfVkVORE9SX0lEX1RJR0VSSkVULAogCQkJUENJX0RFVklDRV9JRF9USUdFUkpFVF8zMDAsICBkZXZfbmV0amV0KSkpIHsKIAkJCXJldCA9IG5qdV9wY2lfcHJvYmUoZGV2X25ldGpldCwgY3MpOwogCQkJaWYgKCFyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMKaW5kZXggNTU2OWE1Mi4uNjlkZmM4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYwpAQCAtNTk4LDcgKzU5OCw3IEBACiB9CiAjZW5kaWYgLyogX19JU0FQTlBfXyAqLwogCi0jaWZkZWYgQ09ORklHX1BDSV9MRUdBQ1kKKyNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmRldl9zZWRsIF9fZGV2aW5pdGRhdGEgPSBOVUxMOwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdApAQCAtNjA3LDcgKzYwNyw3IEBACiAJc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzID0gY2FyZC0+Y3M7CiAJdTE2IHN1Yl92ZW5kb3JfaWQsIHN1Yl9pZDsKIAotCWlmICgoZGV2X3NlZGwgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9USUdFUkpFVCwKKwlpZiAoKGRldl9zZWRsID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlKFBDSV9WRU5ET1JfSURfVElHRVJKRVQsCiAJCQlQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzEwMCwgZGV2X3NlZGwpKSkgewogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X3NlZGwpKQogCQkJcmV0dXJuKDApOwpAQCAtNjczLDcgKzY3Myw3IEBACiAJcmV0dXJuICgxKTsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19QQ0lfTEVHQUNZICovCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiBpbnQgX19kZXZpbml0CiBzZXR1cF9zZWRsYmF1ZXIoc3RydWN0IElzZG5DYXJkICpjYXJkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNwY2kuYwppbmRleCAyOGIwOGRlLi5iODVjZWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNwY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNwY2kuYwpAQCAtMzAwLDcgKzMwMCw3IEBACiAJaWYgKGNzLT50eXAgIT0gSVNETl9DVFlQRV9URUxFU1BDSSkKIAkJcmV0dXJuICgwKTsKIAotCWlmICgoZGV2X3RlbCA9IHBjaV9maW5kX2RldmljZSAoUENJX1ZFTkRPUl9JRF9aT1JBTiwgUENJX0RFVklDRV9JRF9aT1JBTl8zNjEyMCwgZGV2X3RlbCkpKSB7CisJaWYgKChkZXZfdGVsID0gaGlzYXhfZmluZF9wY2lfZGV2aWNlIChQQ0lfVkVORE9SX0lEX1pPUkFOLCBQQ0lfREVWSUNFX0lEX1pPUkFOXzM2MTIwLCBkZXZfdGVsKSkpIHsKIAkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldl90ZWwpKQogCQkJcmV0dXJuKDApOwogCQljcy0+aXJxID0gZGV2X3RlbC0+aXJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3c2NjkyLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdzY2OTIuYwppbmRleCBjNGQ4NjJjLi45ZDZlODY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdzY2OTIuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdzY2OTIuYwpAQCAtMTAwNyw3ICsxMDA3LDcgQEAKIAkJcmV0dXJuICgwKTsKIAogCXdoaWxlIChpZF9saXN0W2lkX2lkeF0udmVuZG9yX2lkKSB7Ci0JCWRldl93NjY5MiA9IHBjaV9maW5kX2RldmljZShpZF9saXN0W2lkX2lkeF0udmVuZG9yX2lkLAorCQlkZXZfdzY2OTIgPSBoaXNheF9maW5kX3BjaV9kZXZpY2UoaWRfbGlzdFtpZF9pZHhdLnZlbmRvcl9pZCwKIAkJCQkJICAgIGlkX2xpc3RbaWRfaWR4XS5kZXZpY2VfaWQsCiAJCQkJCSAgICBkZXZfdzY2OTIpOwogCQlpZiAoZGV2X3c2NjkyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9hZGIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL2FkYi5jCmluZGV4IDIzNzQxY2UuLjFjNGVlNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL2FkYi5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL2FkYi5jCkBAIC0zMTcsMTMgKzMxNywxNSBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JaWYgKChhZGJfY29udHJvbGxlciA9PSBOVUxMKSB8fCBhZGJfY29udHJvbGxlci0+aW5pdCgpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IG5vIEFEQiBpbnRlcmZhY2UgZGV0ZWN0ZWRcbiIpOworCWlmIChhZGJfY29udHJvbGxlciAhPSBOVUxMICYmIGFkYl9jb250cm9sbGVyLT5pbml0ICYmCisJICAgIGFkYl9jb250cm9sbGVyLT5pbml0KCkpCiAJCWFkYl9jb250cm9sbGVyID0gTlVMTDsKKwlpZiAoYWRiX2NvbnRyb2xsZXIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nOiBubyBBREIgaW50ZXJmYWNlIGRldGVjdGVkXG4iKTsKIAl9IGVsc2UgewogI2lmZGVmIENPTkZJR19QUEMKLQkJaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxQb3dlckJvb2sxOTk4IikgfHwKLQkJCW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpCisJCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsUG93ZXJCb29rMTk5OCIpIHx8CisJCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazEsMSIpKQogCQkJc2xlZXB5X3RyYWNrcGFkID0gMTsKICNlbmRpZiAvKiBDT05GSUdfUFBDICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYwppbmRleCA1ZmY0N2JhLi5jNDJlZWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCkBAIC05MCw2ICs5MCw4IEBACiAKIHN0YXRpYyB2b2lkIHdyaXRlX2JvdGhfZmFuX3NwZWVkKHN0cnVjdCB0aGVybW9zdGF0ICp0aCwgaW50IHNwZWVkKTsKIHN0YXRpYyB2b2lkIHdyaXRlX2Zhbl9zcGVlZChzdHJ1Y3QgdGhlcm1vc3RhdCAqdGgsIGludCBzcGVlZCwgaW50IGZhbik7CitzdGF0aWMgdm9pZCB0aGVybW9zdGF0X2NyZWF0ZV9maWxlcyh2b2lkKTsKK3N0YXRpYyB2b2lkIHRoZXJtb3N0YXRfcmVtb3ZlX2ZpbGVzKHZvaWQpOwogCiBzdGF0aWMgaW50CiB3cml0ZV9yZWcoc3RydWN0IHRoZXJtb3N0YXQqIHRoLCBpbnQgcmVnLCB1OCBkYXRhKQpAQCAtMTYxLDYgKzE2Myw4IEBACiAJc3RydWN0IHRoZXJtb3N0YXQgKnRoID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IGk7CiAJCisJdGhlcm1vc3RhdF9yZW1vdmVfZmlsZXMoKTsKKwogCWlmICh0aHJlYWRfdGhlcm0gIT0gTlVMTCkgewogCQlrdGhyZWFkX3N0b3AodGhyZWFkX3RoZXJtKTsKIAl9CkBAIC0zMTIsNyArMzE2LDcgQEAKIAogCQkJaWYgKHZlcmJvc2UpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgImFkdDc0Nng6IFNldHRpbmcgZmFucyBzcGVlZCB0byAlZCAiCi0JCQkJCQkgIihsaW1pdCBleGNlZWRlZCBieSAlZCBvbiAlcykgXG4iLAorCQkJCQkJICIobGltaXQgZXhjZWVkZWQgYnkgJWQgb24gJXMpXG4iLAogCQkJCQkJbmV3X3NwZWVkLCB2YXIsCiAJCQkJCQlzZW5zb3JfbG9jYXRpb25bZmFuX251bWJlcisxXSk7CiAJCQl3cml0ZV9ib3RoX2Zhbl9zcGVlZCh0aCwgbmV3X3NwZWVkKTsKQEAgLTQ0OSw2ICs0NTMsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwl0aGVybW9zdGF0X2NyZWF0ZV9maWxlcygpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU2Niw3ICs1NzIsNiBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZSogbnA7CiAJY29uc3QgdTMyICpwcm9wOwogCWludCBpID0gMCwgb2Zmc2V0ID0gMDsKLQlpbnQgZXJyOwogCiAJbnAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiZmFuIik7CiAJaWYgKCFucCkKQEAgLTYzMyw2ICs2MzgsMTcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisjaWZuZGVmIENPTkZJR19JMkNfUE9XRVJNQUMKKwlyZXF1ZXN0X21vZHVsZSgiaTJjLXBvd2VybWFjIik7CisjZW5kaWYKKworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmdGhlcm1vc3RhdF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCB0aGVybW9zdGF0X2NyZWF0ZV9maWxlcyh2b2lkKQoreworCWludCBlcnI7CisKIAllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yMV90ZW1wZXJhdHVyZSk7CiAJZXJyIHw9IGRldmljZV9jcmVhdGVfZmlsZSgmb2ZfZGV2LT5kZXYsICZkZXZfYXR0cl9zZW5zb3IyX3RlbXBlcmF0dXJlKTsKIAllcnIgfD0gZGV2aWNlX2NyZWF0ZV9maWxlKCZvZl9kZXYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjFfbGltaXQpOwpAQCAtNjQ3LDE2ICs2NjMsOSBAQAogCWlmIChlcnIpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSJGYWlsZWQgdG8gY3JlYXRlIHRlbXBlcnRhdXJlIGF0dHJpYnV0ZSBmaWxlKHMpLlxuIik7Ci0KLSNpZm5kZWYgQ09ORklHX0kyQ19QT1dFUk1BQwotCXJlcXVlc3RfbW9kdWxlKCJpMmMtcG93ZXJtYWMiKTsKLSNlbmRpZgotCi0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0aGVybW9zdGF0X2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdAotdGhlcm1vc3RhdF9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCB0aGVybW9zdGF0X3JlbW92ZV9maWxlcyh2b2lkKQogewogCWlmIChvZl9kZXYpIHsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZvZl9kZXYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjFfdGVtcGVyYXR1cmUpOwpAQCAtNjczLDkgKzY4MiwxNCBAQAogCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZvZl9kZXYtPmRldiwKIAkJCQkJICAgJmRldl9hdHRyX3NlbnNvcjJfZmFuX3NwZWVkKTsKIAotCQlvZl9kZXZpY2VfdW5yZWdpc3RlcihvZl9kZXYpOwogCX0KK30KKworc3RhdGljIHZvaWQgX19leGl0Cit0aGVybW9zdGF0X2V4aXQodm9pZCkKK3sKIAlpMmNfZGVsX2RyaXZlcigmdGhlcm1vc3RhdF9kcml2ZXIpOworCW9mX2RldmljZV91bnJlZ2lzdGVyKG9mX2Rldik7CiB9CiAKIG1vZHVsZV9pbml0KHRoZXJtb3N0YXRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKaW5kZXggNDU0YmM1MC4uNTczOGQ4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwpAQCAtMTg5OSw3ICsxODk5LDcgQEAKIAkgKi8KIAlpZiAocmFja21hYykKIAkJY3B1X3BpZF90eXBlID0gQ1BVX1BJRF9UWVBFX1JBQ0tNQUM7Ci0JZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpCisJZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpCiAJICAgICYmIChjcHVfY291bnQgPiAxKQogCSAgICAmJiBmY3VfZmFuc1tDUFVBX1BVTVBfUlBNX0lOREVYXS5pZCAhPSBGQ1VfRkFOX0FCU0VOVF9JRAogCSAgICAmJiBmY3VfZmFuc1tDUFVCX1BVTVBfUlBNX0lOREVYXS5pZCAhPSBGQ1VfRkFOX0FCU0VOVF9JRCkgewpAQCAtMjIzNCwxMCArMjIzNCwxMCBAQAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAKLQlyYWNrbWFjID0gbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIik7CisJcmFja21hYyA9IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpOwogCi0JaWYgKCFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgJiYKLQkgICAgIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSAmJgorCWlmICghb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpICYmCisJICAgICFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgJiYKIAkgICAgIXJhY2ttYWMpCiAJICAgIAlyZXR1cm4gLUVOT0RFVjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jCmluZGV4IGJhNDhmZDcuLjdmYjhiNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3dpbmR0dW5uZWwuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV93aW5kdHVubmVsLmMKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCWluZm8gPSBvZl9nZXRfcHJvcGVydHkobnAsICJ0aGVybWFsLWluZm8iLCBOVUxMKTsKIAlvZl9ub2RlX3B1dChucCk7CiAKLQlpZiggIWluZm8gfHwgIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMzLDYiKSApCisJaWYoICFpbmZvIHx8ICFvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMyw2IikgKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmKCBpbmZvLT5pZCAhPSAzICkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLWN1ZGEuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1jdWRhLmMKaW5kZXggNjJkZDFmZC4uOTcxYmM5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLWN1ZGEuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtY3VkYS5jCkBAIC04OSw3ICs4OSw2IEBACiAKICNpZmRlZiBDT05GSUdfQURCCiBzdGF0aWMgaW50IGN1ZGFfcHJvYmUodm9pZCk7Ci1zdGF0aWMgaW50IGN1ZGFfaW5pdCh2b2lkKTsKIHN0YXRpYyBpbnQgY3VkYV9zZW5kX3JlcXVlc3Qoc3RydWN0IGFkYl9yZXF1ZXN0ICpyZXEsIGludCBzeW5jKTsKIHN0YXRpYyBpbnQgY3VkYV9hZGJfYXV0b3BvbGwoaW50IGRldnMpOwogc3RhdGljIGludCBjdWRhX3Jlc2V0X2FkYl9idXModm9pZCk7CkBAIC0xMDcsMTcgKzEwNiw0MiBAQAogCiAjaWZkZWYgQ09ORklHX0FEQgogc3RydWN0IGFkYl9kcml2ZXIgdmlhX2N1ZGFfZHJpdmVyID0gewotCSJDVURBIiwKLQljdWRhX3Byb2JlLAotCWN1ZGFfaW5pdCwKLQljdWRhX3NlbmRfcmVxdWVzdCwKLQljdWRhX2FkYl9hdXRvcG9sbCwKLQljdWRhX3BvbGwsCi0JY3VkYV9yZXNldF9hZGJfYnVzCisJLm5hbWUgICAgICAgICA9ICJDVURBIiwKKwkucHJvYmUgICAgICAgID0gY3VkYV9wcm9iZSwKKwkuc2VuZF9yZXF1ZXN0ID0gY3VkYV9zZW5kX3JlcXVlc3QsCisJLmF1dG9wb2xsICAgICA9IGN1ZGFfYWRiX2F1dG9wb2xsLAorCS5wb2xsICAgICAgICAgPSBjdWRhX3BvbGwsCisJLnJlc2V0X2J1cyAgICA9IGN1ZGFfcmVzZXRfYWRiX2J1cywKIH07CiAjZW5kaWYgLyogQ09ORklHX0FEQiAqLwogCi0jaWZkZWYgQ09ORklHX1BQQworI2lmZGVmIENPTkZJR19NQUMKK2ludCBfX2luaXQgZmluZF92aWFfY3VkYSh2b2lkKQoreworICAgIHN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CisgICAgaW50IGVycjsKKworICAgIGlmIChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSAhPSBNQUNfQURCX0NVREEpCisJcmV0dXJuIDA7CisKKyAgICB2aWEgPSB2aWExOworICAgIGN1ZGFfc3RhdGUgPSBpZGxlOworCisgICAgZXJyID0gY3VkYV9pbml0X3ZpYSgpOworICAgIGlmIChlcnIpIHsKKwlwcmludGsoS0VSTl9FUlIgImN1ZGFfaW5pdF92aWEoKSBmYWlsZWRcbiIpOworCXZpYSA9IE5VTEw7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogZW5hYmxlIGF1dG9wb2xsICovCisgICAgY3VkYV9yZXF1ZXN0KCZyZXEsIE5VTEwsIDMsIENVREFfUEFDS0VULCBDVURBX0FVVE9QT0xMLCAxKTsKKyAgICB3aGlsZSAoIXJlcS5jb21wbGV0ZSkKKwljdWRhX3BvbGwoKTsKKworICAgIHJldHVybiAxOworfQorI2Vsc2UKIGludCBfX2luaXQgZmluZF92aWFfY3VkYSh2b2lkKQogewogICAgIHN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CkBAIC0xNzUsNyArMTk5LDcgQEAKICAgICB2aWFzID0gTlVMTDsKICAgICByZXR1cm4gMDsKIH0KLSNlbmRpZiAvKiBDT05GSUdfUFBDICovCisjZW5kaWYgLyogIWRlZmluZWQgQ09ORklHX01BQyAqLwogCiBzdGF0aWMgaW50IF9faW5pdCB2aWFfY3VkYV9zdGFydCh2b2lkKQogewpAQCAtMTg0LDE0ICsyMDgsMTQgQEAKIAogI2lmZGVmIENPTkZJR19NQUMKICAgICBjdWRhX2lycSA9IElSUV9NQUNfQURCOwotI2Vsc2UgLyogQ09ORklHX01BQyAqLworI2Vsc2UKICAgICBjdWRhX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKHZpYXMsIDApOwogICAgIGlmIChjdWRhX2lycSA9PSBOT19JUlEpIHsKIAlwcmludGsoS0VSTl9FUlIgInZpYS1jdWRhOiBjYW4ndCBtYXAgaW50ZXJydXB0cyBmb3IgJXNcbiIsCiAJICAgICAgIHZpYXMtPmZ1bGxfbmFtZSk7CiAJcmV0dXJuIC1FTk9ERVY7CiAgICAgfQotI2VuZGlmIC8qIENPTkZJR19NQUMgKi8KKyNlbmRpZgogCiAgICAgaWYgKHJlcXVlc3RfaXJxKGN1ZGFfaXJxLCBjdWRhX2ludGVycnVwdCwgMCwgIkFEQiIsIGN1ZGFfaW50ZXJydXB0KSkgewogCXByaW50ayhLRVJOX0VSUiAidmlhLWN1ZGE6IGNhbid0IHJlcXVlc3QgaXJxICVkXG4iLCBjdWRhX2lycSk7CkBAIC0yMTYsMjggKzI0MCwxMCBAQAogI2Vsc2UKICAgICBpZiAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgIT0gTUFDX0FEQl9DVURBKQogCXJldHVybiAtRU5PREVWOwotICAgIHZpYSA9IHZpYTE7CiAjZW5kaWYKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQKLWN1ZGFfaW5pdCh2b2lkKQotewotI2lmZGVmIENPTkZJR19QUEMKICAgICBpZiAodmlhID09IE5VTEwpCiAJcmV0dXJuIC1FTk9ERVY7CiAgICAgcmV0dXJuIDA7Ci0jZWxzZSAKLSAgICBpbnQgZXJyID0gY3VkYV9pbml0X3ZpYSgpOwotICAgIGlmIChlcnIpIHsKLQlwcmludGsoS0VSTl9FUlIgImN1ZGFfaW5pdF92aWEoKSBmYWlsZWRcbiIpOwotCXJldHVybiAtRU5PREVWOwotICAgIH0KLSAgICBvdXRfOCgmdmlhW0lFUl0sIElFUl9TRVR8U1JfSU5UKTsgLyogZW5hYmxlIGludGVycnVwdCBmcm9tIFNSICovCi0KLSAgICByZXR1cm4gdmlhX2N1ZGFfc3RhcnQoKTsKLSNlbmRpZgogfQogI2VuZGlmIC8qIENPTkZJR19BREIgKi8KIApAQCAtNDMwLDkgKzQzNiwxMSBAQAogICAgIC8qIGN1ZGFfaW50ZXJydXB0IG9ubHkgdGFrZXMgYSBub3JtYWwgbG9jaywgd2UgZGlzYWJsZQogICAgICAqIGludGVycnVwdHMgaGVyZSB0byBhdm9pZCByZS1lbnRlcmluZyBhbmQgdGh1cyBkZWFkbG9ja2luZy4KICAgICAgKi8KLSAgICBkaXNhYmxlX2lycShjdWRhX2lycSk7CisgICAgaWYgKGN1ZGFfaXJxKQorCWRpc2FibGVfaXJxKGN1ZGFfaXJxKTsKICAgICBjdWRhX2ludGVycnVwdCgwLCBOVUxMKTsKLSAgICBlbmFibGVfaXJxKGN1ZGFfaXJxKTsKKyAgICBpZiAoY3VkYV9pcnEpCisJZW5hYmxlX2lycShjdWRhX2lycSk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdApAQCAtNDQ2LDcgKzQ1NCw3IEBACiAgICAgCiAgICAgc3Bpbl9sb2NrKCZjdWRhX2xvY2spOwogCi0gICAgLyogT24gcG93ZXJtYWNzLCB0aGlzIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlIFZJQSBJUlEuIEJ1dCBpdCB1c2VzCisgICAgLyogT24gcG93ZXJtYWNzLCB0aGlzIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlIFZJQSBJUlEuIEJ1dCB0aGV5IHVzZQogICAgICAqIGp1c3QgdGhlIHNoaWZ0IHJlZ2lzdGVyIElSUSAtLSBvdGhlciBWSUEgaW50ZXJydXB0IHNvdXJjZXMgYXJlIGRpc2FibGVkLgogICAgICAqIE9uIG02OGsgbWFjcywgdGhlIFZJQSBJUlEgc291cmNlcyBhcmUgZGlzcGF0Y2hlZCBpbmRpdmlkdWFsbHkuIFVubGVzcwogICAgICAqIHdlIGFyZSBwb2xsaW5nLCB0aGUgc2hpZnQgcmVnaXN0ZXIgSVJRIGZsYWcgaGFzIGFscmVhZHkgYmVlbiBjbGVhcmVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1iYWNrbGlnaHQuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtYmFja2xpZ2h0LmMKaW5kZXggYTM0OGJiMC4uNGYzYzQ0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1iYWNrbGlnaHQuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWJhY2tsaWdodC5jCkBAIC0xNTAsMTMgKzE1MCwxMyBAQAogCiAJLyogU3BlY2lhbCBjYXNlIGZvciB0aGUgb2xkIFBvd2VyQm9vayBzaW5jZSBJIGNhbid0IHRlc3Qgb24gaXQgKi8KIAlhdXRvc2F2ZSA9Ci0JCW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNDAwLzI0MDAiKSB8fAotCQltYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzUwMCIpOworCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzQwMC8yNDAwIikgfHwKKwkJb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDM1MDAiKTsKIAogCWlmICghYXV0b3NhdmUgJiYKIAkgICAgIXBtYWNfaGFzX2JhY2tsaWdodF90eXBlKCJwbXUiKSAmJgotCSAgICAhbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFBvd2VyQm9vazE5OTgiKSAmJgotCSAgICAhbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkKKwkgICAgIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxQb3dlckJvb2sxOTk4IikgJiYKKwkgICAgIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpCiAJCXJldHVybjsKIAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInBtdWJsIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKaW5kZXggZGIzNzljMy4uNDI3NjQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwpAQCAtNDYzLDggKzQ2Myw4IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUEMzMgotICAJaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNDAwLzI0MDAiKSB8fAotICAJCW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNTAwIikpIHsKKyAgCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzQwMC8yNDAwIikgfHwKKyAgCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzUwMCIpKSB7CiAJCWludCBtYiA9IHBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0dFVF9NQl9JTkZPLAogCQkJTlVMTCwgUE1BQ19NQl9JTkZPX01PREVMLCAwKTsKIAkJcG11X2JhdHRlcnlfY291bnQgPSAxOwpAQCAtNDcyLDggKzQ3Miw4IEBACiAJCQlwbXVfYmF0dGVyaWVzWzBdLmZsYWdzIHw9IFBNVV9CQVRUX1RZUEVfQ09NRVQ7CiAJCWVsc2UKIAkJCXBtdV9iYXR0ZXJpZXNbMF0uZmxhZ3MgfD0gUE1VX0JBVFRfVFlQRV9IT09QRVI7Ci0JfSBlbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsUG93ZXJCb29rMTk5OCIpIHx8Ci0JCW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpIHsKKwl9IGVsc2UgaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxQb3dlckJvb2sxOTk4IikgfHwKKwkJb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkgewogCQlwbXVfYmF0dGVyeV9jb3VudCA9IDI7CiAJCXBtdV9iYXR0ZXJpZXNbMF0uZmxhZ3MgfD0gUE1VX0JBVFRfVFlQRV9TTUFSVDsKIAkJcG11X2JhdHRlcmllc1sxXS5mbGFncyB8PSBQTVVfQkFUVF9UWVBFX1NNQVJUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY29yZS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY29yZS5jCmluZGV4IDA3NWI0ZDkuLjQzN2Y1NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2NvcmUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jb3JlLmMKQEAgLTQ2OCw5ICs0NjgsOSBAQAogCURCRygid2Y6IGNvcmUgbG9hZGVkXG4iKTsKIAogCS8qIERvbid0IHJlZ2lzdGVyIG9uIG9sZCBtYWNoaW5lcyB0aGF0IHVzZSB0aGVybV9wbTcyIGZvciBub3cgKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8Ci0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3Zl9wbGF0Zm9ybV9kZXZpY2UpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY3B1ZnJlcV9jbGFtcC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY3B1ZnJlcV9jbGFtcC5jCmluZGV4IDkwMGFhZGUuLjFhNzdhN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2NwdWZyZXFfY2xhbXAuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jcHVmcmVxX2NsYW1wLmMKQEAgLTc2LDkgKzc2LDkgQEAKIAlzdHJ1Y3Qgd2ZfY29udHJvbCAqY2xhbXA7CiAKIAkvKiBEb24ndCByZWdpc3RlciBvbiBvbGQgbWFjaGluZXMgdGhhdCB1c2UgdGhlcm1fcG03MiBmb3Igbm93ICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCiAJCXJldHVybiAtRU5PREVWOwogCiAJY2xhbXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2ZfY29udHJvbCksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2xtNzVfc2Vuc29yLmMKaW5kZXggZWQ2NDI2YS4uZDgyNTdkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9sbTc1X3NlbnNvci5jCkBAIC0yMzksOSArMjM5LDkgQEAKIHN0YXRpYyBpbnQgX19pbml0IHdmX2xtNzVfc2Vuc29yX2luaXQodm9pZCkKIHsKIAkvKiBEb24ndCByZWdpc3RlciBvbiBvbGQgbWFjaGluZXMgdGhhdCB1c2UgdGhlcm1fcG03MiBmb3Igbm93ICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCiAJCXJldHVybiAtRU5PREVWOwogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmd2ZfbG03NV9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbWF4NjY5MF9zZW5zb3IuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX21heDY2OTBfc2Vuc29yLmMKaW5kZXggYTY3YjM0OS4uYjQ4NmViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbWF4NjY5MF9zZW5zb3IuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9tYXg2NjkwX3NlbnNvci5jCkBAIC0xODgsOSArMTg4LDkgQEAKIHN0YXRpYyBpbnQgX19pbml0IHdmX21heDY2OTBfc2Vuc29yX2luaXQodm9pZCkKIHsKIAkvKiBEb24ndCByZWdpc3RlciBvbiBvbGQgbWFjaGluZXMgdGhhdCB1c2UgdGhlcm1fcG03MiBmb3Igbm93ICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAorCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCiAJCXJldHVybiAtRU5PREVWOwogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmd2ZfbWF4NjY5MF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG0xMTIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtMTEyLmMKaW5kZXggNzNkNjk1ZC4uZTBlZTgwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG0xMTIuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTExMi5jCkBAIC02NzYsNyArNjc2LDcgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdTsKIAotCWlmICghbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzExLDIiKSkKKwlpZiAoIW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMxMSwyIikpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogQ291bnQgdGhlIG51bWJlciBvZiBDUFUgY29yZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtMTIxLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTEyMS5jCmluZGV4IDY2ZWM0ZmIxLi45NDdkNGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTEyMS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtMTIxLmMKQEAgLTEwMDgsNyArMTAwOCw3IEBACiB7CiAJaW50IHJjID0gLUVOT0RFVjsKIAotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTIsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMTIsMSIpKQogCQlyYyA9IHBtMTIxX2luaXRfcG0oKTsKIAogCWlmIChyYyA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTgxLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTgxLmMKaW5kZXggYWJiZTIwNi4uNTY1ZDViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG04MS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtODEuYwpAQCAtNzc5LDggKzc3OSw4IEBACiB7CiAJaW50IHJjID0gLUVOT0RFVjsKIAotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwxIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMiIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwxIikgfHwKKwkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMiIpKQogCQlyYyA9IHdmX2luaXRfcG0oKTsKIAogCWlmIChyYyA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTkxLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTkxLmMKaW5kZXggNzY0YzUyNS4uYmVhOTkxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG05MS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtOTEuYwpAQCAtNzExLDcgKzcxMSw3IEBACiB7CiAJaW50IHJjID0gLUVOT0RFVjsKIAotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOSwxIikpCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM5LDEiKSkKIAkJcmMgPSB3Zl9pbml0X3BtKCk7CiAKIAlpZiAocmMgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NlbnNvcnMuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zZW5zb3JzLmMKaW5kZXggOWM1NjdiOS4uM2MxOTM1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NlbnNvcnMuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2Vuc29ycy5jCkBAIC0zNjMsOSArMzYzLDkgQEAKIAkgKiBJIHlldCBoYXZlIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIHVwIHdpdGggOCwyIGFuZCB3aWxsIGhhdmUgdG8KIAkgKiBhZGp1c3QgZm9yIGxhdGVyLCB1bmxlc3Mgd2UgY2FuIDEwMCUgdHJ1c3QgdGhlIFNEQiBwYXJ0aXRpb24uLi4KIAkgKi8KLQlpZiAoKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDEiKSB8fAotCSAgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzgsMiIpIHx8Ci0JICAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOSwxIikpICYmCisJaWYgKChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjOCwxIikgfHwKKwkgICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM4LDIiKSB8fAorCSAgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzksMSIpKSAmJgogCSAgICBjcHV2Y3BfdmVyc2lvbiA+PSAyKSB7CiAJCXBvdy0+cXVhZHJhdGljID0gMTsKIAkJREJHKCJ3aW5kZmFybTogQ1BVIFBvd2VyIHVzaW5nIHF1YWRyYXRpYyB0cmFuc2Zvcm1cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9saW5lYXIuYyBiL2RyaXZlcnMvbWQvbGluZWFyLmMKaW5kZXggMDA0MzViZC4uYWYyZDM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9saW5lYXIuYworKysgYi9kcml2ZXJzL21kL2xpbmVhci5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAkJICovCiAJCWlmIChyZGV2LT5iZGV2LT5iZF9kaXNrLT5xdWV1ZS0+bWVyZ2VfYnZlY19mbiAmJgogCQkgICAgcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlKSA+IChQQUdFX1NJWkU+PjkpKQotCQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKKwkJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CiAKIAkJY29uZi0+YXJyYXlfc2VjdG9ycyArPSByZGV2LT5zZWN0b3JzOwogCQljbnQrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCmluZGV4IDMyYTY2MmYuLjRiMzIzZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKKysrIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwpAQCAtMzA4LDcgKzMwOCw3IEBACiAJCSAqLwogCQkJaWYgKHEtPm1lcmdlX2J2ZWNfZm4gJiYKIAkJCSAgICBxdWV1ZV9tYXhfc2VjdG9ycyhxKSA+IChQQUdFX1NJWkU+PjkpKQotCQkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CisJCQkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKIAogCQkJY29uZi0+d29ya2luZ19kaXNrcysrOwogCQkJbWRkZXYtPmRlZ3JhZGVkLS07CkBAIC00NzgsNyArNDc4LDcgQEAKIAkJICogYSBtZXJnZV9idmVjX2ZuIHRvIGJlIGludm9sdmVkIGluIG11bHRpcGF0aCAqLwogCQlpZiAocmRldi0+YmRldi0+YmRfZGlzay0+cXVldWUtPm1lcmdlX2J2ZWNfZm4gJiYKIAkJICAgIHF1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSkgPiAoUEFHRV9TSVpFPj45KSkKLQkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CisJCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOwogCiAJCWlmICghdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKQogCQkJY29uZi0+d29ya2luZ19kaXNrcysrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMC5jIGIvZHJpdmVycy9tZC9yYWlkMC5jCmluZGV4IDc3NjA1Y2QuLmExZjcxNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDAuYworKysgYi9kcml2ZXJzL21kL3JhaWQwLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogCiAJCWlmIChyZGV2MS0+YmRldi0+YmRfZGlzay0+cXVldWUtPm1lcmdlX2J2ZWNfZm4gJiYKIAkJICAgIHF1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSkgPiAoUEFHRV9TSVpFPj45KSkKLQkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CisJCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOwogCiAJCWlmICghc21hbGxlc3QgfHwgKHJkZXYxLT5zZWN0b3JzIDwgc21hbGxlc3QtPnNlY3RvcnMpKQogCQkJc21hbGxlc3QgPSByZGV2MTsKQEAgLTMyNSw3ICszMjUsNyBAQAogCX0KIAlpZiAobWRfY2hlY2tfbm9fYml0bWFwKG1kZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgbWRkZXYtPmNodW5rX3NlY3RvcnMpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhtZGRldi0+cXVldWUsIG1kZGV2LT5jaHVua19zZWN0b3JzKTsKIAltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmbWRkZXYtPnF1ZXVlLT5fX3F1ZXVlX2xvY2s7CiAKIAlyZXQgPSBjcmVhdGVfc3RyaXBfem9uZXMobWRkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IDg1OWJkM2YuLjVhMDYxMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTExNTgsNyArMTE1OCw3IEBACiAJCQkgKi8KIAkJCWlmIChyZGV2LT5iZGV2LT5iZF9kaXNrLT5xdWV1ZS0+bWVyZ2VfYnZlY19mbiAmJgogCQkJICAgIHF1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSkgPiAoUEFHRV9TSVpFPj45KSkKLQkJCQlibGtfcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOworCQkJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CiAKIAkJCXAtPmhlYWRfcG9zaXRpb24gPSAwOwogCQkJcmRldi0+cmFpZF9kaXNrID0gbWlycm9yOwpAQCAtMjEwMyw3ICsyMTAzLDcgQEAKIAkJICovCiAJCWlmIChyZGV2LT5iZGV2LT5iZF9kaXNrLT5xdWV1ZS0+bWVyZ2VfYnZlY19mbiAmJgogCQkgICAgcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlKSA+IChQQUdFX1NJWkU+PjkpKQotCQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKKwkJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CiAJfQogCiAJbWRkZXYtPmRlZ3JhZGVkID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IGQxMTliN2IuLjc1ODRmOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMTAuYwpAQCAtMTE2MSw3ICsxMTYxLDcgQEAKIAkJCSAqLwogCQkJaWYgKHJkZXYtPmJkZXYtPmJkX2Rpc2stPnF1ZXVlLT5tZXJnZV9idmVjX2ZuICYmCiAJCQkgICAgcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlKSA+IChQQUdFX1NJWkU+PjkpKQotCQkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUsIFBBR0VfU0laRT4+OSk7CisJCQkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKIAogCQkJcC0+aGVhZF9wb3NpdGlvbiA9IDA7CiAJCQlyZGV2LT5yYWlkX2Rpc2sgPSBtaXJyb3I7CkBAIC0yMjYwLDcgKzIyNjAsNyBAQAogCQkgKi8KIAkJaWYgKHJkZXYtPmJkZXYtPmJkX2Rpc2stPnF1ZXVlLT5tZXJnZV9idmVjX2ZuICYmCiAJCSAgICBxdWV1ZV9tYXhfc2VjdG9ycyhtZGRldi0+cXVldWUpID4gKFBBR0VfU0laRT4+OSkpCi0JCQlibGtfcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOworCQkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKIAogCQlkaXNrLT5oZWFkX3Bvc2l0aW9uID0gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmMKaW5kZXggY2ViMjRhZi4uNTA5YzhmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuYwpAQCAtMzczOSw3ICszNzM5LDcgQEAKIAlpZiAoKGJpLT5iaV9zaXplPj45KSA+IHF1ZXVlX21heF9zZWN0b3JzKHEpKQogCQlyZXR1cm4gMDsKIAlibGtfcmVjb3VudF9zZWdtZW50cyhxLCBiaSk7Ci0JaWYgKGJpLT5iaV9waHlzX3NlZ21lbnRzID4gcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSkpCisJaWYgKGJpLT5iaV9waHlzX3NlZ21lbnRzID4gcXVldWVfbWF4X3NlZ21lbnRzKHEpKQogCQlyZXR1cm4gMDsKIAogCWlmIChxLT5tZXJnZV9idmVjX2ZuKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvSVIvTWFrZWZpbGUKaW5kZXggZGY1ZGRiNC4uMTcxODkwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL0lSL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogaXItY29tbW9uLW9ianMgIDo9IGlyLWZ1bmN0aW9ucy5vIGlyLWtleW1hcHMubwotaXItY29yZS1vYmpzCTo9IGlyLWtleXRhYmxlLm8KK2lyLWNvcmUtb2Jqcwk6PSBpci1rZXl0YWJsZS5vIGlyLXN5c2ZzLm8KIAogb2JqLSQoQ09ORklHX0lSX0NPUkUpICs9IGlyLWNvcmUubwogb2JqLSQoQ09ORklHX1ZJREVPX0lSKSArPSBpci1jb21tb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1mdW5jdGlvbnMuYyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItZnVuY3Rpb25zLmMKaW5kZXggNzc2YTEzNi4uYWIwNjkxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9pci1mdW5jdGlvbnMuYworKysgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWZ1bmN0aW9ucy5jCkBAIC01Miw3ICs1Miw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBpbnQgaXJfaW5wdXRfaW5pdChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIsCi0JCSAgIGludCBpcl90eXBlKQorCQkgIGNvbnN0IHU2NCBpcl90eXBlKQogewogCWlyLT5pcl90eXBlID0gaXJfdHlwZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1rZXltYXBzLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWtleW1hcHMuYwppbmRleCA5YmJlNmIxLi4wZWZkZWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2lyLWtleW1hcHMuYworKysgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWtleW1hcHMuYwpAQCAtMzM5MywzICszMzkzLDEwMiBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX25lY190ZXJyYXRlY19jaW5lcmd5X3hzX3RhYmxlKTsKIAorCisvKiBMZWFkdGVrIFdpbmZhc3QgVFYgVVNCIElJIERlbHV4ZSByZW1vdGUKKyAgIE1hZ251cyBBbG0gPG1hZ251cy5hbG1AZ21haWwuY29tPgorICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX3dpbmZhc3RfdXNiaWlfZGVsdXhlW10gPSB7CisJeyAweDYyLCBLRVlfMH0sCisJeyAweDc1LCBLRVlfMX0sCisJeyAweDc2LCBLRVlfMn0sCisJeyAweDc3LCBLRVlfM30sCisJeyAweDc5LCBLRVlfNH0sCisJeyAweDdhLCBLRVlfNX0sCisJeyAweDdiLCBLRVlfNn0sCisJeyAweDdkLCBLRVlfN30sCisJeyAweDdlLCBLRVlfOH0sCisJeyAweDdmLCBLRVlfOX0sCisKKwl7IDB4MzgsIEtFWV9DQU1FUkF9LAkJLyogU05BUFNIT1QgKi8KKwl7IDB4MzcsIEtFWV9SRUNPUkR9LAkJLyogUkVDT1JEICovCisJeyAweDM1LCBLRVlfVElNRX0sCQkvKiBUSU1FU0hJRlQgKi8KKworCXsgMHg3NCwgS0VZX1ZPTFVNRVVQfSwJCS8qIFZPTFVNRVVQICovCisJeyAweDc4LCBLRVlfVk9MVU1FRE9XTn0sCS8qIFZPTFVNRURPV04gKi8KKwl7IDB4NjQsIEtFWV9NVVRFfSwJCS8qIE1VVEUgKi8KKworCXsgMHgyMSwgS0VZX0NIQU5ORUx9LAkJLyogU1VSRiAqLworCXsgMHg3YywgS0VZX0NIQU5ORUxVUH0sCQkvKiBDSEFOTkVMVVAgKi8KKwl7IDB4NjAsIEtFWV9DSEFOTkVMRE9XTn0sCS8qIENIQU5ORUxET1dOICovCisJeyAweDYxLCBLRVlfTEFTVH0sCQkvKiBMQVNUIENIQU5ORUwgKFJFQ0FMTCkgKi8KKworCXsgMHg3MiwgS0VZX1ZJREVPfSwgCQkvKiBJTlBVVCBNT0RFUyAoVFYvRk0pICovCisKKwl7IDB4NzAsIEtFWV9QT1dFUjJ9LAkJLyogVFYgT04vT0ZGICovCisKKwl7IDB4MzksIEtFWV9DWUNMRVdJTkRPV1N9LAkvKiBNSU5JTUlaRSAoQk9TUykgKi8KKwl7IDB4M2EsIEtFWV9ORVd9LAkJLyogUElQICovCisJeyAweDczLCBLRVlfWk9PTX0sCQkvKiBGVUxMU0VDUkVFTiAqLworCisJeyAweDY2LCBLRVlfSU5GT30sCQkvKiBPU0QgKERJU1BMQVkpICovCisKKwl7IDB4MzEsIEtFWV9ET1R9LAkJLyogJy4nICovCisJeyAweDYzLCBLRVlfRU5URVJ9LAkJLyogRU5URVIgKi8KKworfTsKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc193aW5mYXN0X3VzYmlpX2RlbHV4ZV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX3dpbmZhc3RfdXNiaWlfZGVsdXhlLAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc193aW5mYXN0X3VzYmlpX2RlbHV4ZSksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfd2luZmFzdF91c2JpaV9kZWx1eGVfdGFibGUpOworCisvKiBLd29ybGQgMzE1VQorICovCitzdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGlyX2NvZGVzX2t3b3JsZF8zMTV1W10gPSB7CisJeyAweDYxNDMsIEtFWV9QT1dFUiB9LAorCXsgMHg2MTAxLCBLRVlfVFVORVIgfSwJCS8qIHNvdXJjZSAqLworCXsgMHg2MTBiLCBLRVlfWk9PTSB9LAorCXsgMHg2MTAzLCBLRVlfUE9XRVIyIH0sCQkvKiBzaHV0ZG93biAqLworCisJeyAweDYxMDQsIEtFWV8xIH0sCisJeyAweDYxMDgsIEtFWV8yIH0sCisJeyAweDYxMDIsIEtFWV8zIH0sCisJeyAweDYxMDksIEtFWV9DSEFOTkVMVVAgfSwKKworCXsgMHg2MTBmLCBLRVlfNCB9LAorCXsgMHg2MTA1LCBLRVlfNSB9LAorCXsgMHg2MTA2LCBLRVlfNiB9LAorCXsgMHg2MTA3LCBLRVlfQ0hBTk5FTERPV04gfSwKKworCXsgMHg2MTBjLCBLRVlfNyB9LAorCXsgMHg2MTBkLCBLRVlfOCB9LAorCXsgMHg2MTBhLCBLRVlfOSB9LAorCXsgMHg2MTBlLCBLRVlfVk9MVU1FVVAgfSwKKworCXsgMHg2MTEwLCBLRVlfTEFTVCB9LAorCXsgMHg2MTExLCBLRVlfMCB9LAorCXsgMHg2MTEyLCBLRVlfRU5URVIgfSwKKwl7IDB4NjExMywgS0VZX1ZPTFVNRURPV04gfSwKKworCXsgMHg2MTE0LCBLRVlfUkVDT1JEIH0sCisJeyAweDYxMTUsIEtFWV9TVE9QIH0sCisJeyAweDYxMTYsIEtFWV9QTEFZIH0sCisJeyAweDYxMTcsIEtFWV9NVVRFIH0sCisKKwl7IDB4NjExOCwgS0VZX1VQIH0sCisJeyAweDYxMTksIEtFWV9ET1dOIH0sCisJeyAweDYxMWEsIEtFWV9MRUZUIH0sCisJeyAweDYxMWIsIEtFWV9SSUdIVCB9LAorCisJeyAweDYxMWMsIEtFWV9SRUQgfSwKKwl7IDB4NjExZCwgS0VZX0dSRUVOIH0sCisJeyAweDYxMWUsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4NjExZiwgS0VZX0JMVUUgfSwKK307CisKK3N0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19rd29ybGRfMzE1dV90YWJsZSA9IHsKKwkuc2NhbiA9IGlyX2NvZGVzX2t3b3JsZF8zMTV1LAorCS5zaXplID0gQVJSQVlfU0laRShpcl9jb2Rlc19rd29ybGRfMzE1dSksCisJLmlyX3R5cGUgPSBJUl9UWVBFX05FQywKK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19rd29ybGRfMzE1dV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLWtleXRhYmxlLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWtleXRhYmxlLmMKaW5kZXggYjUyMWVkOS4uMDkwM2Y1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9pci1rZXl0YWJsZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXIta2V5dGFibGUuYwpAQCAtNjUsNyArNjUsNyBAQAogICogSW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBxdWFudGl0eSBvZiB0YWJsZSByZXNpemVzLCBpdCBoYXMgYSBtaW5pbXVtCiAgKiB0YWJsZSBzaXplIG9mIElSX1RBQl9NSU5fU0laRS4KICAqLwotaW50IGlyX3JvdW5kdXBfdGFibGVzaXplKGludCBuX2VsZW1zKQorc3RhdGljIGludCBpcl9yb3VuZHVwX3RhYmxlc2l6ZShpbnQgbl9lbGVtcykKIHsKIAlzaXplX3Qgc2l6ZTsKIApAQCAtODEsNyArODEsNiBAQAogCiAJcmV0dXJuIG5fZWxlbXM7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9yb3VuZHVwX3RhYmxlc2l6ZSk7CiAKIC8qKgogICogaXJfY29weV90YWJsZSgpIC0gY29waWVzIGEga2V5dGFibGUsIGRpc2NhcmRpbmcgdGhlIHVudXNlZCBlbnRyaWVzCkBAIC04OSw5ICs4OCwxMSBAQAogICogQG9yaWdpbjoJb3JpZ2luIHRhYmxlCiAgKgogICogQ29waWVzIGFsbCBlbnRyaWVzIHdoZXJlIHRoZSBrZXljb2RlIGlzIG5vdCBLRVlfVU5LTk9XTi9LRVlfUkVTRVJWRUQKKyAqIEFsc28gY29waWVzIHRhYmxlIHNpemUgYW5kIHRhYmxlIHByb3RvY29sLgorICogTk9URTogSXQgc2hvdWxkbid0IGNvcHkgdGhlIGxvY2sgZmllbGQKICAqLwogCi1pbnQgaXJfY29weV90YWJsZShzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmRlc3RpbiwKK3N0YXRpYyBpbnQgaXJfY29weV90YWJsZShzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmRlc3RpbiwKIAkJIGNvbnN0IHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqb3JpZ2luKQogewogCWludCBpLCBqID0gMDsKQEAgLTEwNSwxMiArMTA2LDEyIEBACiAJCWorKzsKIAl9CiAJZGVzdGluLT5zaXplID0gajsKKwlkZXN0aW4tPmlyX3R5cGUgPSBvcmlnaW4tPmlyX3R5cGU7CiAKIAlJUl9kcHJpbnRrKDEsICJDb3BpZWQgJWQgc2NhbmNvZGVzIHRvIHRoZSBuZXcga2V5Y29kZSB0YWJsZVxuIiwgZGVzdGluLT5zaXplKTsKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29weV90YWJsZSk7CiAKIC8qKgogICogaXJfZ2V0a2V5Y29kZSgpIC0gZ2V0IGEga2V5Y29kZSBhdCB0aGUgZXZkZXYgc2NhbmNvZGUgLT5rZXljb2RlIHRhYmxlCkBAIC0xODQsMTggKzE4NSwxNCBAQAogCWludCBuZXdzaXplID0gcmNfdGFiLT5zaXplIC0gMTsKIAlpbnQgcmVzaXplID0gaXJfaXNfcmVzaXplX25lZWRlZChyY190YWIsIG5ld3NpemUpOwogCXN0cnVjdCBpcl9zY2FuY29kZSAqb2xka2V5bWFwID0gcmNfdGFiLT5zY2FuOwotCXN0cnVjdCBpcl9zY2FuY29kZSAqbmV3a2V5bWFwOworCXN0cnVjdCBpcl9zY2FuY29kZSAqbmV3a2V5bWFwID0gTlVMTDsKIAotCWlmIChyZXNpemUpIHsKKwlpZiAocmVzaXplKQogCQluZXdrZXltYXAgPSBremFsbG9jKGlyX3JvdW5kdXBfdGFibGVzaXplKG5ld3NpemUpICoKIAkJCQkgICAgc2l6ZW9mKCpuZXdrZXltYXApLCBHRlBfQVRPTUlDKTsKIAotCQkvKiBUaGVyZSdzIG5vIG1lbW9yeSBmb3IgcmVzaXplLiBLZWVwIHRoZSBvbGQgdGFibGUgKi8KLQkJaWYgKCFuZXdrZXltYXApCi0JCQlyZXNpemUgPSAwOwotCX0KLQotCWlmICghcmVzaXplKSB7CisJLyogVGhlcmUncyBubyBtZW1vcnkgZm9yIHJlc2l6ZS4gS2VlcCB0aGUgb2xkIHRhYmxlICovCisJaWYgKCFyZXNpemUgfHwgIW5ld2tleW1hcCkgewogCQluZXdrZXltYXAgPSBvbGRrZXltYXA7CiAKIAkJLyogV2UnbGwgbW9kaWZ5IHRoZSBsaXZlIHRhYmxlLiBMb2NrIGl0ICovCkBAIC0zOTksMTIgKzM5NiwxNCBAQAogICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCiAgKiBAcmNfdGFiOgl0aGUgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIHRhYmxlIG9mIHNjYW5jb2RlL2tleW1hcAogICoKLSAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGlucHV0IGluZnJhc3RydWN0dXJlIHRvIHdvcmsgd2l0aAotICogYW4gSVIuCi0gKiBJdCBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSByZWdpc3RlcmluZyB0aGUgSVIgZGV2aWNlLgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgaW5wdXQgaW5mcmFzdHJ1Y3R1cmUKKyAqIHRvIHdvcmsgd2l0aCBhbiBJUi4KKyAqIEl0IHdpbGwgcmVnaXN0ZXIgdGhlIGlucHV0L2V2ZGV2IGludGVyZmFjZSBmb3IgdGhlIGRldmljZSBhbmQKKyAqIHJlZ2lzdGVyIHRoZSBzeWZzIGNvZGUgZm9yIElSIGNsYXNzCiAgKi8KIGludCBpcl9pbnB1dF9yZWdpc3RlcihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsCi0JCSAgICAgIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqcmNfdGFiKQorCQkgICAgICBjb25zdCBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYiwKKwkJICAgICAgY29uc3Qgc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHMpCiB7CiAJc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2OwogCXN0cnVjdCBpcl9zY2FuY29kZSAgKmtleW1hcCAgICA9IHJjX3RhYi0+c2NhbjsKQEAgLTQxNywxOSArNDE2LDIyIEBACiAJaWYgKCFpcl9kZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc3Bpbl9sb2NrX2luaXQoJnJjX3RhYi0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmlyX2Rldi0+cmNfdGFiLmxvY2spOwogCiAJaXJfZGV2LT5yY190YWIuc2l6ZSA9IGlyX3JvdW5kdXBfdGFibGVzaXplKHJjX3RhYi0+c2l6ZSk7CiAJaXJfZGV2LT5yY190YWIuc2NhbiA9IGt6YWxsb2MoaXJfZGV2LT5yY190YWIuc2l6ZSAqCiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgaXJfc2NhbmNvZGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWlyX2Rldi0+cmNfdGFiLnNjYW4pCisJaWYgKCFpcl9kZXYtPnJjX3RhYi5zY2FuKSB7CisJCWtmcmVlKGlyX2Rldik7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCUlSX2RwcmludGsoMSwgIkFsbG9jYXRlZCBzcGFjZSBmb3IgJWQga2V5Y29kZSBlbnRyaWVzICglemQgYnl0ZXMpXG4iLAogCQlpcl9kZXYtPnJjX3RhYi5zaXplLAogCQlpcl9kZXYtPnJjX3RhYi5zaXplICogc2l6ZW9mKGlyX2Rldi0+cmNfdGFiLnNjYW4pKTsKIAogCWlyX2NvcHlfdGFibGUoJmlyX2Rldi0+cmNfdGFiLCByY190YWIpOworCWlyX2Rldi0+cHJvcHMgPSBwcm9wczsKIAogCS8qIHNldCB0aGUgYml0cyBmb3IgdGhlIGtleXMgKi8KIAlJUl9kcHJpbnRrKDEsICJrZXkgbWFwIHNpemU6ICVkXG4iLCByY190YWItPnNpemUpOwpAQCAtNDQ3LDE2ICs0NDksMzEgQEAKIAlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIGlyX2Rldik7CiAKIAlyYyA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOworCisJcmMgPSBpcl9yZWdpc3Rlcl9jbGFzcyhpbnB1dF9kZXYpOwogCWlmIChyYyA8IDApIHsKLQkJa2ZyZWUocmNfdGFiLT5zY2FuKTsKLQkJa2ZyZWUoaXJfZGV2KTsKLQkJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBOVUxMKTsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKKwkJZ290byBlcnI7CiAJfQogCisJcmV0dXJuIDA7CisKK2VycjoKKwlrZnJlZShyY190YWItPnNjYW4pOworCWtmcmVlKGlyX2Rldik7CisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBOVUxMKTsKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcl9pbnB1dF9yZWdpc3Rlcik7CiAKKy8qKgorICogaXJfaW5wdXRfdW5yZWdpc3RlcigpIC0gdW5yZWdpc3RlcnMgSVIgYW5kIGZyZWVzIHJlc291cmNlcworICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCisKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGZyZWUgbWVtb3J5IGFuZCBkZS1yZWdpc3RlciBpbnRlcmZhY2VzLgorICovCiB2b2lkIGlyX2lucHV0X3VucmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqZGV2KQogewogCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CkBAIC00NzIsNiArNDg5LDggQEAKIAlrZnJlZShyY190YWItPnNjYW4pOwogCXJjX3RhYi0+c2NhbiA9IE5VTEw7CiAKKwlpcl91bnJlZ2lzdGVyX2NsYXNzKGRldik7CisKIAlrZnJlZShpcl9kZXYpOwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLXN5c2ZzLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLXN5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1ZmJjZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItc3lzZnMuYwpAQCAtMCwwICsxLDIxMSBAQAorLyogaXItcmVnaXN0ZXIuYyAtIGhhbmRsZSBJUiBzY2FuY29kZS0+a2V5Y29kZSB0YWJsZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL2lyLWNvcmUuaD4KKworI2RlZmluZSBJUlJDVl9OVU1fREVWSUNFUwkyNTYKKworLyogYml0IGFycmF5IHRvIHJlcHJlc2VudCBJUiBzeXNmcyBkZXZpY2UgbnVtYmVyICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpcl9jb3JlX2Rldl9udW1iZXI7CisKKy8qIGNsYXNzIGZvciAvc3lzL2NsYXNzL2lycmN2ICovCitzdGF0aWMgc3RydWN0IGNsYXNzICppcl9pbnB1dF9jbGFzczsKKworLyoqCisgKiBzaG93X3Byb3RvY29sKCkgLSBzaG93cyB0aGUgY3VycmVudCBJUiBwcm90b2NvbAorICogQGQ6CQl0aGUgZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEBtYXR0cjoJdGhlIGRldmljZSBhdHRyaWJ1dGUgc3RydWN0ICh1bnVzZWQpCisgKiBAYnVmOglhIHBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgYSBjYWxsYmFjayByb3V0aW5lIGZvciBpbnB1dCByZWFkIHRoZSBJUiBwcm90b2NvbCB0eXBlLgorICogaXQgaXMgdHJpZ2dlZCBieSByZWFkaW5nIC9zeXMvY2xhc3MvaXJyY3YvaXJyY3Y/L2N1cnJlbnRfcHJvdG9jb2wuCisgKiBJdCByZXR1cm5zIHRoZSBwcm90b2NvbCBuYW1lLCBhcyB1bmRlcnN0b29kIGJ5IHRoZSBkcml2ZXIuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfcHJvdG9jb2woc3RydWN0IGRldmljZSAqZCwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1hdHRyLCBjaGFyICpidWYpCit7CisJY2hhciAqczsKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJdTY0IGlyX3R5cGUgPSBpcl9kZXYtPnJjX3RhYi5pcl90eXBlOworCisJSVJfZHByaW50aygxLCAiQ3VycmVudCBwcm90b2NvbCBpcyAlbGxkXG4iLCAobG9uZyBsb25nKWlyX3R5cGUpOworCisJLyogRklYTUU6IGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZSBwcm90b2NvbHMgYXQgdGhlIHNhbWUgdGltZSAqLworCWlmIChpcl90eXBlID09IElSX1RZUEVfVU5LTk9XTikKKwkJcyA9ICJVbmtub3duIjsKKwllbHNlIGlmIChpcl90eXBlID09IElSX1RZUEVfUkM1KQorCQlzID0gIlJDLTUiOworCWVsc2UgaWYgKGlyX3R5cGUgPT0gSVJfVFlQRV9QRCkKKwkJcyA9ICJQdWxzZS9kaXN0YW5jZSI7CisJZWxzZSBpZiAoaXJfdHlwZSA9PSBJUl9UWVBFX05FQykKKwkJcyA9ICJORUMiOworCWVsc2UKKwkJcyA9ICJPdGhlciI7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgcyk7Cit9CisKKy8qKgorICogc3RvcmVfcHJvdG9jb2woKSAtIHNob3dzIHRoZSBjdXJyZW50IElSIHByb3RvY29sCisgKiBAZDoJCXRoZSBkZXZpY2UgZGVzY3JpcHRvcgorICogQG1hdHRyOgl0aGUgZGV2aWNlIGF0dHJpYnV0ZSBzdHJ1Y3QgKHVudXNlZCkKKyAqIEBidWY6CWEgcG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyCisgKiBAbGVuOglsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlcgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBhIGNhbGxiYWNrIHJvdXRpbmUgZm9yIGNoYW5naW5nIHRoZSBJUiBwcm90b2NvbCB0eXBlLgorICogaXQgaXMgdHJpZ2dlZCBieSByZWFkaW5nIC9zeXMvY2xhc3MvaXJyY3YvaXJyY3Y/L2N1cnJlbnRfcHJvdG9jb2wuCisgKiBJdCBjaGFuZ2VzIHRoZSBJUiB0aGUgcHJvdG9jb2wgbmFtZSwgaWYgdGhlIElSIHR5cGUgaXMgcmVjb2duaXplZAorICogYnkgdGhlIGRyaXZlci4KKyAqIElmIGFuIHVua25vd24gcHJvdG9jb2wgbmFtZSBpcyB1c2VkLCByZXR1cm5zIC1FSU5WQUwuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3Byb3RvY29sKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbWF0dHIsCisJCQkgICAgICBjb25zdCBjaGFyICpkYXRhLAorCQkJICAgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJdTY0IGlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV047CisJaW50IHJjID0gLUVJTlZBTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNoYXIgKmJ1ZjsKKworCWJ1ZiA9IHN0cnNlcCgoY2hhciAqKikgJmRhdGEsICJcbiIpOworCisJaWYgKCFzdHJjYXNlY21wKGJ1ZiwgInJjLTUiKSkKKwkJaXJfdHlwZSA9IElSX1RZUEVfUkM1OworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGJ1ZiwgInBkIikpCisJCWlyX3R5cGUgPSBJUl9UWVBFX1BEOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGJ1ZiwgIm5lYyIpKQorCQlpcl90eXBlID0gSVJfVFlQRV9ORUM7CisKKwlpZiAoaXJfdHlwZSA9PSBJUl9UWVBFX1VOS05PV04pIHsKKwkJSVJfZHByaW50aygxLCAiRXJyb3Igc2V0dGluZyBwcm90b2NvbCB0byAlbGxkXG4iLAorCQkJICAgKGxvbmcgbG9uZylpcl90eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGlyX2Rldi0+cHJvcHMgJiYgaXJfZGV2LT5wcm9wcy0+Y2hhbmdlX3Byb3RvY29sKQorCQlyYyA9IGlyX2Rldi0+cHJvcHMtPmNoYW5nZV9wcm90b2NvbChpcl9kZXYtPnByb3BzLT5wcml2LAorCQkJCQkJICAgIGlyX3R5cGUpOworCisJaWYgKHJjIDwgMCkgeworCQlJUl9kcHJpbnRrKDEsICJFcnJvciBzZXR0aW5nIHByb3RvY29sIHRvICVsbGRcbiIsCisJCQkgICAobG9uZyBsb25nKWlyX3R5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJfZGV2LT5yY190YWIubG9jaywgZmxhZ3MpOworCWlyX2Rldi0+cmNfdGFiLmlyX3R5cGUgPSBpcl90eXBlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlyX2Rldi0+cmNfdGFiLmxvY2ssIGZsYWdzKTsKKworCUlSX2RwcmludGsoMSwgIkN1cnJlbnQgcHJvdG9jb2wgaXMgJWxsZFxuIiwKKwkJICAgKGxvbmcgbG9uZylpcl90eXBlKTsKKworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBTdGF0aWMgZGV2aWNlIGF0dHJpYnV0ZSBzdHJ1Y3Qgd2l0aCB0aGUgc3lzZnMgYXR0cmlidXRlcyBmb3IgSVIncworICovCitzdGF0aWMgREVWSUNFX0FUVFIoY3VycmVudF9wcm90b2NvbCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgIHNob3dfcHJvdG9jb2wsIHN0b3JlX3Byb3RvY29sKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmlyX2Rldl9hdHRyc1tdID0geworCSZkZXZfYXR0cl9jdXJyZW50X3Byb3RvY29sLmF0dHIsCisJTlVMTCwKK307CisKKy8qKgorICogaXJfcmVnaXN0ZXJfY2xhc3MoKSAtIGNyZWF0ZXMgdGhlIHN5c2ZzIGZvciAvc3lzL2NsYXNzL2lycmN2L2lycmN2PworICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gcmVnaXN0ZXIgdGhlIHN5ZnMgY29kZSBmb3IgSVIgY2xhc3MKKyAqLworaW50IGlyX3JlZ2lzdGVyX2NsYXNzKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldikKK3sKKwlpbnQgcmM7CisJc3RydWN0IGtvYmplY3QgKmtvYmo7CisKKwlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXYgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOworCWludCBkZXZubyA9IGZpbmRfZmlyc3RfemVyb19iaXQoJmlyX2NvcmVfZGV2X251bWJlciwKKwkJCQkJSVJSQ1ZfTlVNX0RFVklDRVMpOworCisJaWYgKHVubGlrZWx5KGRldm5vIDwgMCkpCisJCXJldHVybiBkZXZubzsKKworCWlyX2Rldi0+YXR0ci5hdHRycyA9IGlyX2Rldl9hdHRyczsKKwlpcl9kZXYtPmNsYXNzX2RldiA9IGRldmljZV9jcmVhdGUoaXJfaW5wdXRfY2xhc3MsIE5VTEwsCisJCQkJCSAgaW5wdXRfZGV2LT5kZXYuZGV2dCwgaXJfZGV2LAorCQkJCQkgICJpcnJjdiVkIiwgZGV2bm8pOworCWtvYmogPSAmaXJfZGV2LT5jbGFzc19kZXYtPmtvYmo7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJDcmVhdGluZyBJUiBkZXZpY2UgJXNcbiIsIGtvYmplY3RfbmFtZShrb2JqKSk7CisJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoa29iaiwgJmlyX2Rldi0+YXR0cik7CisJaWYgKHVubGlrZWx5KHJjIDwgMCkpIHsKKwkJZGV2aWNlX2Rlc3Ryb3koaXJfaW5wdXRfY2xhc3MsIGlucHV0X2Rldi0+ZGV2LmRldnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpcl9kZXYtPmRldm5vID0gZGV2bm87CisJc2V0X2JpdChkZXZubywgJmlyX2NvcmVfZGV2X251bWJlcik7CisKKwlyZXR1cm4gMDsKK307CisKKy8qKgorICogaXJfdW5yZWdpc3Rlcl9jbGFzcygpIC0gcmVtb3ZlcyB0aGUgc3lzZnMgZm9yIHN5c2ZzIGZvcgorICoJCQkgICAvc3lzL2NsYXNzL2lycmN2L2lycmN2PworICogQGlucHV0X2RldjoJdGhlIHN0cnVjdCBpbnB1dF9kZXYgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gdW5yZWdpc3RlciB0aGUgc3lmcyBjb2RlIGZvciBJUiBjbGFzcworICovCit2b2lkIGlyX3VucmVnaXN0ZXJfY2xhc3Moc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQoreworCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldiA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0X2Rldik7CisJc3RydWN0IGtvYmplY3QgKmtvYmo7CisKKwljbGVhcl9iaXQoaXJfZGV2LT5kZXZubywgJmlyX2NvcmVfZGV2X251bWJlcik7CisKKwlrb2JqID0gJmlyX2Rldi0+Y2xhc3NfZGV2LT5rb2JqOworCisJc3lzZnNfcmVtb3ZlX2dyb3VwKGtvYmosICZpcl9kZXYtPmF0dHIpOworCWRldmljZV9kZXN0cm95KGlyX2lucHV0X2NsYXNzLCBpbnB1dF9kZXYtPmRldi5kZXZ0KTsKKworCWtmcmVlKGlyX2Rldi0+YXR0ci5uYW1lKTsKK30KKworLyoKKyAqIEluaXQvZXhpdCBjb2RlIGZvciB0aGUgbW9kdWxlLiBCYXNpY2FsbHksIGNyZWF0ZXMvcmVtb3ZlcyAvc3lzL2NsYXNzL2lycmN2CisgKi8KKworc3RhdGljIGludCBfX2luaXQgaXJfY29yZV9pbml0KHZvaWQpCit7CisJaXJfaW5wdXRfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJpcnJjdiIpOworCWlmIChJU19FUlIoaXJfaW5wdXRfY2xhc3MpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaXJfY29yZTogdW5hYmxlIHRvIHJlZ2lzdGVyIGlycmN2IGNsYXNzXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoaXJfaW5wdXRfY2xhc3MpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXJfY29yZV9leGl0KHZvaWQpCit7CisJY2xhc3NfZGVzdHJveShpcl9pbnB1dF9jbGFzcyk7Cit9CisKK21vZHVsZV9pbml0KGlyX2NvcmVfaW5pdCk7Cittb2R1bGVfZXhpdChpcl9jb3JlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYwppbmRleCA3MzY0Yjk2Li5mZDhlMWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYwpAQCAtNDIzLDE0ICs0MjMsMTUgQEAKIAl9CiB9CiAKK2ludCBzYWE3MTQ2X3Z2X2RldmluaXQoc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYpCit7CisJcmV0dXJuIHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPnBjaS0+ZGV2LCAmZGV2LT52NGwyX2Rldik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzYWE3MTQ2X3Z2X2RldmluaXQpOworCiBpbnQgc2FhNzE0Nl92dl9pbml0KHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9leHRfdnYgKmV4dF92dikKIHsKIAlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnY7Ci0JaW50IGVycjsKLQotCWVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPnBjaS0+ZGV2LCAmZGV2LT52NGwyX2Rldik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKIAogCXZ2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxNDZfdnYpLCBHRlBfS0VSTkVMKTsKIAlpZiAodnYgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXR5cGVzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYwppbmRleCAyYjg3NmYzLi5kOWFhYWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItdHlwZXMuYwpAQCAtMTMzNyw2ICsxMzM3LDIyIEBACiAJfSwKIH07CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVFVORVJfU09OWV9CVEZfUFhOMDFaIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3NvbnlfYnRmX3B4bjAxel9yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTM3LjI1IC8qTUh6Ki8sIDB4OGUsIDB4MDEsIH0sCisJeyAxNiAqIDM2Ny4yNSAvKk1IeiovLCAweDhlLCAweDAyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHg4ZSwgMHgwNCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3NvbnlfYnRmX3B4bjAxel9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCisJCS5yYW5nZXMgPSB0dW5lcl9zb255X2J0Zl9weG4wMXpfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9zb255X2J0Zl9weG4wMXpfcmFuZ2VzKSwKKwl9LAorfTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCB0dW5lcnR5cGUgdHVuZXJzW10gPSB7CkBAIC0xODA1LDYgKzE4MjEsMTEgQEAKIAkJLm5hbWUgICA9ICJOWFAgVERBMTgyNzEiLAogCQkvKiBzZWUgdGRhMTgyNzEtZmUuYyBmb3IgZGV0YWlscyAqLwogCX0sCisJW1RVTkVSX1NPTllfQlRGX1BYTjAxWl0gPSB7CisJCS5uYW1lICAgPSAiU29ueSBCVEYtUHhuMDFaIiwKKwkJLnBhcmFtcyA9IHR1bmVyX3NvbnlfYnRmX3B4bjAxel9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3NvbnlfYnRmX3B4bjAxel9wYXJhbXMpLAorCX0sCiB9OwogRVhQT1JUX1NZTUJPTCh0dW5lcnMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXIteGMyMDI4LmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXIteGMyMDI4LmMKaW5kZXggZjI3MGU2MC4uYmU1MWMyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXhjMjAyOC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci14YzIwMjguYwpAQCAtOTE3LDMwICs5MTcsNjggQEAKIAkgKiB0aGF0IHhjMjAyOCB3aWxsIGJlIGluIGEgc2FmZSBzdGF0ZS4KIAkgKiBNYXliZSB0aGlzIG1pZ2h0IGFsc28gYmUgbmVlZGVkIGZvciBEVFYuCiAJICovCi0JaWYgKG5ld19tb2RlID09IFRfQU5BTE9HX1RWKQorCWlmIChuZXdfbW9kZSA9PSBUX0FOQUxPR19UVikgewogCQlyYyA9IHNlbmRfc2VxKHByaXYsIHsweDAwLCAweDAwfSk7CiAKLQkvKgotCSAqIERpZ2l0YWwgbW9kZXMgcmVxdWlyZSBhbiBvZmZzZXQgdG8gYWRqdXN0IHRvIHRoZQotCSAqIHByb3BlciBmcmVxdWVuY3kuCi0JICogQW5hbG9nIG1vZGVzIHJlcXVpcmUgb2Zmc2V0ID0gMAotCSAqLwotCWlmIChuZXdfbW9kZSA9PSBUX0RJR0lUQUxfVFYpIHsKLQkJLyogU2V0cyB0aGUgb2Zmc2V0IGFjY29yZGluZyB3aXRoIGZpcm13YXJlICovCisJCS8qIEFuYWxvZyBtb2RlcyByZXF1aXJlIG9mZnNldCA9IDAgKi8KKwl9IGVsc2UgeworCQkvKgorCQkgKiBEaWdpdGFsIG1vZGVzIHJlcXVpcmUgYW4gb2Zmc2V0IHRvIGFkanVzdCB0byB0aGUKKwkJICogcHJvcGVyIGZyZXF1ZW5jeS4gVGhlIG9mZnNldCBkZXBlbmRzIG9uIHdoYXQKKwkJICogZmlybXdhcmUgdmVyc2lvbiBpcyB1c2VkLgorCQkgKi8KKworCQkvKgorCQkgKiBBZGp1c3QgdG8gdGhlIGNlbnRlciBmcmVxdWVuY3kuIFRoaXMgaXMgY2FsY3VsYXRlZCBieSB0aGUKKwkJICogZm9ybXVsYTogb2Zmc2V0ID0gMS4yNU1IeiAtIEJXLzIKKwkJICogRm9yIERUViA3LzgsIHRoZSBmaXJtd2FyZSB1c2VzIEJXID0gODAwMCwgc28gaXQgbmVlZHMgYQorCQkgKiBmdXJ0aGVyIGFkanVzdG1lbnQgdG8gZ2V0IHRoZSBmcmVxdWVuY3kgY2VudGVyIG9uIFZIRgorCQkgKi8KIAkJaWYgKHByaXYtPmN1cl9mdy50eXBlICYgRFRWNikKIAkJCW9mZnNldCA9IDE3NTAwMDA7CiAJCWVsc2UgaWYgKHByaXYtPmN1cl9mdy50eXBlICYgRFRWNykKIAkJCW9mZnNldCA9IDIyNTAwMDA7CiAJCWVsc2UJLyogRFRWOCBvciBEVFY3OCAqLwogCQkJb2Zmc2V0ID0gMjc1MDAwMDsKLQotCQkvKgotCQkgKiBXZSBtdXN0IGFkanVzdCB0aGUgb2Zmc2V0IGJ5IDUwMGtIeiAgd2hlbgotCQkgKiB0dW5pbmcgYSA3TUh6IFZIRiBjaGFubmVsIHdpdGggRFRWNzggZmlybXdhcmUKLQkJICogKHVzZWQgaW4gQXVzdHJhbGlhLCBJdGFseSBhbmQgR2VybWFueSkKLQkJICovCiAJCWlmICgocHJpdi0+Y3VyX2Z3LnR5cGUgJiBEVFY3OCkgJiYgZnJlcSA8IDQ3MDAwMDAwMCkKIAkJCW9mZnNldCAtPSA1MDAwMDA7CisKKwkJLyoKKwkJICogeGMzMDI4IGFkZGl0aW9uYWwgIm1hZ2ljIgorCQkgKiBEZXBlbmRpbmcgb24gdGhlIGZpcm13YXJlIHZlcnNpb24sIGl0IG5lZWRzIHNvbWUgYWRqdXN0bWVudHMKKwkJICogdG8gcHJvcGVybHkgY2VudHJhbGl6ZSB0aGUgZnJlcXVlbmN5LiBUaGlzIHNlZW1zIHRvIGJlCisJCSAqIG5lZWRlZCB0byBjb21wZW5zYXRlIHRoZSBTQ09ERSB0YWJsZSBhZGp1c3RtZW50cyBtYWRlIGJ5CisJCSAqIG5ld2VyIGZpcm13YXJlcworCQkgKi8KKworI2lmIDEKKwkJLyoKKwkJICogVGhlIHByb3BlciBhZGp1c3RtZW50IHdvdWxkIGJlIHRvIGRvIGl0IGF0IHMtY29kZSB0YWJsZS4KKwkJICogSG93ZXZlciwgdGhpcyBkaWRuJ3Qgd29yaywgYXMgcmVwb3J0ZWQgYnkKKwkJICogUm9iZXJ0IExvd2VyeSA8cmdsb3dlcnlAZXhlbWFpbC5jb20uYXU+CisJCSAqLworCisJCWlmIChwcml2LT5jdXJfZncudHlwZSAmIERUVjcpCisJCQlvZmZzZXQgKz0gNTAwMDAwOworCisjZWxzZQorCQkvKgorCQkgKiBTdGlsbCBuZWVkIHRlc3RzIGZvciBYQzMwMjhMIChmaXJtd2FyZSAzLjIgb3IgdXBwZXIpCisJCSAqIFNvLCBmb3Igbm93LCBsZXQncyBqdXN0IGNvbW1lbnQgdGhlIHBlci1maXJtd2FyZQorCQkgKiB2ZXJzaW9uIG9mIHRoaXMgY2hhbmdlLiBSZXBvcnRzIHdpdGggeGMzMDI4bCB3b3JraW5nCisJCSAqIHdpdGggYW5kIHdpdGhvdXQgdGhlIGxpbmVzIGJlbGxvdyBhcmUgd2VsY29tZQorCQkgKi8KKworCQlpZiAocHJpdi0+ZmlybV92ZXJzaW9uIDwgMHgwMzAyKSB7CisJCQlpZiAocHJpdi0+Y3VyX2Z3LnR5cGUgJiBEVFY3KQorCQkJCW9mZnNldCArPSA1MDAwMDA7CisJCX0gZWxzZSB7CisJCQlpZiAocHJpdi0+Y3VyX2Z3LnR5cGUgJiBEVFY3KQorCQkJCW9mZnNldCAtPSAzMDAwMDA7CisJCQllbHNlIGlmICh0eXBlICE9IEFUU0MpIC8qIERWQiBANk1IeiwgRFRWIDggYW5kIERUViA3LzggKi8KKwkJCQlvZmZzZXQgKz0gMjAwMDAwOworCQl9CisjZW5kaWYKIAl9CiAKIAlkaXYgPSAoZnJlcSAtIG9mZnNldCArIERJViAvIDIpIC8gRElWOwpAQCAtMTA5NywxNyArMTEzNSwyNCBAQAogCiAJLyogQWxsIFMtY29kZSB0YWJsZXMgbmVlZCBhIDIwMGtIeiBzaGlmdCAqLwogCWlmIChwcml2LT5jdHJsLmRlbW9kKSB7Ci0JCWRlbW9kID0gcHJpdi0+Y3RybC5kZW1vZCArIDIwMDsKKwkJZGVtb2QgPSBwcml2LT5jdHJsLmRlbW9kOworCisJCS8qCisJCSAqIE5ld2VyIGZpcm13YXJlcyByZXF1aXJlIGEgMjAwIGtIeiBvZmZzZXQgb25seSBmb3IgQVRTQworCQkgKi8KKwkJaWYgKHR5cGUgPT0gQVRTQyB8fCBwcml2LT5maXJtX3ZlcnNpb24gPCAweDAzMDIpCisJCQlkZW1vZCArPSAyMDA7CiAJCS8qCiAJCSAqIFRoZSBEVFY3IFMtY29kZSB0YWJsZSBuZWVkcyBhIDcwMCBrSHogc2hpZnQuCi0JCSAqIFRoYW5rcyB0byBUZXJyeSBXdSA8dGVycnl3dTIwMDlAZ21haWwuY29tPiBmb3IgcmVwb3J0aW5nIHRoaXMKIAkJICoKIAkJICogRFRWNyBpcyBvbmx5IHVzZWQgaW4gQXVzdHJhbGlhLiAgR2VybWFueSBvciBJdGFseSBtYXkgYWxzbwogCQkgKiB1c2UgdGhpcyBmaXJtd2FyZSBhZnRlciBpbml0aWFsaXphdGlvbiwgYnV0IGEgdHVuZSB0byBhIFVIRgogCQkgKiBjaGFubmVsIHNob3VsZCB0aGVuIGNhdXNlIERUVjc4IHRvIGJlIHVzZWQuCisJCSAqCisJCSAqIFVuZm9ydHVuYXRlbHksIG9uIHJlYWwtZmllbGQgdGVzdHMsIHRoZSBzLWNvZGUgb2Zmc2V0CisJCSAqIGRpZG4ndCB3b3JrIGFzIGV4cGVjdGVkLCBhcyByZXBvcnRlZCBieQorCQkgKiBSb2JlcnQgTG93ZXJ5IDxyZ2xvd2VyeUBleGVtYWlsLmNvbS5hdT4KIAkJICovCi0JCWlmICh0eXBlICYgRFRWNykKLQkJCWRlbW9kICs9IDUwMDsKIAl9CiAKIAlyZXR1cm4gZ2VuZXJpY19zZXRfZnJlcShmZSwgcC0+ZnJlcXVlbmN5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcKaW5kZXggY2Y4ZjY1Zi4uMTYxY2NmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnCkBAIC03Niw2ICs3NiwxMCBAQAogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQwogCXNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL0tjb25maWciCiAKK2NvbW1lbnQgIlN1cHBvcnRlZCBuR2VuZSBBZGFwdGVycyIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMKKwlzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL25nZW5lL0tjb25maWciCisKIGNvbW1lbnQgIlN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlCmluZGV4IGMxMjkyMmMuLmExYTA4NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL01ha2VmaWxlCkBAIC0xNCw2ICsxNCw3IEBACiAJCXNpYW5vLwkJXAogCQlkbTExMDUvCQlcCiAJCXB0MS8JCVwKLQkJbWFudGlzLworCQltYW50aXMvCQlcCisJCW5nZW5lLwogCiBvYmotJChDT05GSUdfRFZCX0ZJUkVEVFYpCSs9IGZpcmV3aXJlLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2J0ODc4LmMKaW5kZXggYTI0YzEyNS4uOTlkNjIwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9idDg3OC5jCkBAIC01NzYsNDMgKzU3NiwzMCBAQAogICAgICAgLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGJ0ODc4X3JlbW92ZSksCiB9OwogCi1zdGF0aWMgaW50IGJ0ODc4X3BjaV9kcml2ZXJfcmVnaXN0ZXJlZDsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBNb2R1bGUgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IGJ0ODc4X2luaXRfbW9kdWxlKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBidDg3OF9pbml0X21vZHVsZSh2b2lkKQogewogCWJ0ODc4X251bSA9IDA7Ci0JYnQ4NzhfcGNpX2RyaXZlcl9yZWdpc3RlcmVkID0gMDsKIAogCXByaW50ayhLRVJOX0lORk8gImJ0ODc4OiBBVURJTyBkcml2ZXIgdmVyc2lvbiAlZC4lZC4lZCBsb2FkZWRcbiIsCiAJICAgICAgIChCVDg3OF9WRVJTSU9OX0NPREUgPj4gMTYpICYgMHhmZiwKIAkgICAgICAgKEJUODc4X1ZFUlNJT05fQ09ERSA+PiA4KSAmIDB4ZmYsCiAJICAgICAgIEJUODc4X1ZFUlNJT05fQ09ERSAmIDB4ZmYpOwotLyoKLQlidDg3OF9jaGVja19jaGlwc2V0KCk7Ci0qLwotCS8qIGxhdGVyIHdlIHJlZ2lzdGVyIGluc2lkZSBvZiBidDg3OF9maW5kX2F1ZGlvX2RtYSgpCi0JICogYmVjYXVzZSB3ZSBtYXkgd2FudCB0byBpZ25vcmUgY2VydGFpbiBjYXJkcyAqLwotCWJ0ODc4X3BjaV9kcml2ZXJfcmVnaXN0ZXJlZCA9IDE7CisKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYnQ4NzhfcGNpX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGJ0ODc4X2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgYnQ4NzhfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLQlpZiAoYnQ4NzhfcGNpX2RyaXZlcl9yZWdpc3RlcmVkKSB7Ci0JCWJ0ODc4X3BjaV9kcml2ZXJfcmVnaXN0ZXJlZCA9IDA7Ci0JCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYnQ4NzhfcGNpX2RyaXZlcik7Ci0JfQotCXJldHVybjsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmJ0ODc4X3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChidDg3OF9pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChidDg3OF9jbGVhbnVwX21vZHVsZSk7CiAKLS8vTU9EVUxFX0FVVEhPUigiWFhYIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCmluZGV4IDkxMzUzYTYuLjhiMGNkZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCkBAIC0xMzUyLDggKzEzNTIsNyBAQAogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAlpZiAoKHN0YXRlLT50eXBlX2ZsYWdzICYgRFNUX1RZUEVfSEFTX1ZMRikgJiYKLQkJIShzdGF0ZS0+ZHN0X3R5cGUgPT0gRFNUX1RZUEVfSVNfQ0FCTEUpICYmCi0JCSEoc3RhdGUtPmRzdF90eXBlID09IERTVF9UWVBFX0lTX0FUU0MpKSB7CisJICAgIShzdGF0ZS0+ZHN0X3R5cGUgPT0gRFNUX1RZUEVfSVNfQVRTQykpIHsKIAogCQlpZiAoc3RhdGUtPnJ4X3R1bmFbOV0gIT0gZHN0X2NoZWNrX3N1bSgmc3RhdGUtPnJ4X3R1bmFbMF0sIDkpKSB7CiAJCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9JTkZPLCAxLCAiY2hlY2tzdW0gZmFpbHVyZSA/ICIpOwpAQCAtMTgyMCw4ICsxODE5LDEzIEBACiAJCS5mcmVxdWVuY3lfbWF4ID0gODU4MDAwMDAwLAogCQkuc3ltYm9sX3JhdGVfbWluID0gMTAwMDAwMCwKIAkJLnN5bWJvbF9yYXRlX21heCA9IDQ1MDAwMDAwLAotCS8qICAgICAuIHN5bWJvbF9yYXRlX3RvbGVyYW5jZQk9CT8/PywqLwotCQkuY2FwcyA9IEZFX0NBTl9GRUNfQVVUTyB8IEZFX0NBTl9RQU1fQVVUTworCQkuY2FwcyA9IEZFX0NBTl9GRUNfQVVUTyB8CisJCQlGRV9DQU5fUUFNX0FVVE8gfAorCQkJRkVfQ0FOX1FBTV8xNgl8CisJCQlGRV9DQU5fUUFNXzMyCXwKKwkJCUZFX0NBTl9RQU1fNjQJfAorCQkJRkVfQ0FOX1FBTV8xMjgJfAorCQkJRkVfQ0FOX1FBTV8yNTYKIAl9LAogCiAJLnJlbGVhc2UgPSBkc3RfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L0tjb25maWcKaW5kZXggZGUzZWViMC4uNjk1MjM5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L0tjb25maWcKQEAgLTgsNiArOCw3IEBACiAJc2VsZWN0IERWQl9TVEI2MDAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9DWDI0MTE2IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TSTIxWFggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0RTMzAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBWSURFT19JUgogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZSBTRE1DIERNMTEwNSBQQ0kgY2hpcCBsaWtlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMKaW5kZXggZjBmNDgzYS4uMzgzY2NhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgInNpMjF4eC5oIgogI2luY2x1ZGUgImN4MjQxMTYuaCIKICNpbmNsdWRlICJ6MDE5NGEuaCIKKyNpbmNsdWRlICJkczMwMDAuaCIKIAogI2RlZmluZSBVTlNFVCAoLTFVKQogCkBAIC0yNjksNyArMjcwLDcgQEAKIAl1MzIJCQlpcl9jb21tYW5kOwogfTsKIAotc3RydWN0IGRtMTEwNWR2YiB7CitzdHJ1Y3QgZG0xMTA1X2RldiB7CiAJLyogcGNpICovCiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJdTggX19pb21lbSAqaW9fbWVtOwpAQCAtMzA4LDMxICszMDksNDcgQEAKIAlzcGlubG9ja190IGxvY2s7CiB9OwogCi0jZGVmaW5lIGRtX2lvX21lbShyZWcpCSgodW5zaWduZWQgbG9uZykoJmRtMTEwNWR2Yi0+aW9fbWVtW3JlZ10pKQorI2RlZmluZSBkbV9pb19tZW0ocmVnKQkoKHVuc2lnbmVkIGxvbmcpKCZkZXYtPmlvX21lbVtyZWddKSkKKworI2RlZmluZSBkbV9yZWFkYihyZWcpCQlpbmIoZG1faW9fbWVtKHJlZykpCisjZGVmaW5lIGRtX3dyaXRlYihyZWcsIHZhbHVlKQlvdXRiKCh2YWx1ZSksIChkbV9pb19tZW0ocmVnKSkpCisKKyNkZWZpbmUgZG1fcmVhZHcocmVnKQkJaW53KGRtX2lvX21lbShyZWcpKQorI2RlZmluZSBkbV93cml0ZXcocmVnLCB2YWx1ZSkJb3V0dygodmFsdWUpLCAoZG1faW9fbWVtKHJlZykpKQorCisjZGVmaW5lIGRtX3JlYWRsKHJlZykJCWlubChkbV9pb19tZW0ocmVnKSkKKyNkZWZpbmUgZG1fd3JpdGVsKHJlZywgdmFsdWUpCW91dGwoKHZhbHVlKSwgKGRtX2lvX21lbShyZWcpKSkKKworI2RlZmluZSBkbV9hbmRvcmwocmVnLCBtYXNrLCB2YWx1ZSkgXAorCW91dGwoKGlubChkbV9pb19tZW0ocmVnKSkgJiB+KG1hc2spKSB8XAorCQkoKHZhbHVlKSAmIChtYXNrKSksIChkbV9pb19tZW0ocmVnKSkpCisKKyNkZWZpbmUgZG1fc2V0bChyZWcsIGJpdCkJZG1fYW5kb3JsKChyZWcpLCAoYml0KSwgKGJpdCkpCisjZGVmaW5lIGRtX2NsZWFybChyZWcsIGJpdCkJZG1fYW5kb3JsKChyZWcpLCAoYml0KSwgMCkKIAogc3RhdGljIGludCBkbTExMDVfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKIAkJCSAgICBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKIHsKLQlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgOworCXN0cnVjdCBkbTExMDVfZGV2ICpkZXYgOwogCiAJaW50IGFkZHIsIHJjLCBpLCBqLCBrLCBsZW4sIGJ5dGUsIGRhdGE7CiAJdTggc3RhdHVzOwogCi0JZG0xMTA1ZHZiID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKKwlkZXYgPSBpMmNfYWRhcC0+YWxnb19kYXRhOwogCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewotCQlvdXRiKDB4MDAsIGRtX2lvX21lbShETTExMDVfSTJDQ1RSKSk7CisJCWRtX3dyaXRlYihETTExMDVfSTJDQ1RSLCAweDAwKTsKIAkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgewogCQkJLyogcmVhZCBieXRlcyAqLwogCQkJYWRkciAgPSBtc2dzW2ldLmFkZHIgPDwgMTsKIAkJCWFkZHIgfD0gMTsKLQkJCW91dGIoYWRkciwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQpKTsKKwkJCWRtX3dyaXRlYihETTExMDVfSTJDREFULCBhZGRyKTsKIAkJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCBtc2dzW2ldLmxlbjsgYnl0ZSsrKQotCQkJCW91dGIoMCwgZG1faW9fbWVtKERNMTEwNV9JMkNEQVQgKyBieXRlICsgMSkpOworCQkJCWRtX3dyaXRlYihETTExMDVfSTJDREFUICsgYnl0ZSArIDEsIDApOwogCi0JCQlvdXRiKDB4ODEgKyBtc2dzW2ldLmxlbiwgZG1faW9fbWVtKERNMTEwNV9JMkNDVFIpKTsKKwkJCWRtX3dyaXRlYihETTExMDVfSTJDQ1RSLCAweDgxICsgbXNnc1tpXS5sZW4pOwogCQkJZm9yIChqID0gMDsgaiA8IDU1OyBqKyspIHsKIAkJCQltZGVsYXkoMTApOwotCQkJCXN0YXR1cyA9IGluYihkbV9pb19tZW0oRE0xMTA1X0kyQ1NUUykpOworCQkJCXN0YXR1cyA9IGRtX3JlYWRiKERNMTEwNV9JMkNTVFMpOwogCQkJCWlmICgoc3RhdHVzICYgMHhjMCkgPT0gMHg0MCkKIAkJCQkJYnJlYWs7CiAJCQl9CkBAIC0zNDAsNTYgKzM1Nyw1NCBAQAogCQkJCXJldHVybiAtMTsKIAogCQkJZm9yIChieXRlID0gMDsgYnl0ZSA8IG1zZ3NbaV0ubGVuOyBieXRlKyspIHsKLQkJCQlyYyA9IGluYihkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCArIGJ5dGUgKyAxKSk7CisJCQkJcmMgPSBkbV9yZWFkYihETTExMDVfSTJDREFUICsgYnl0ZSArIDEpOwogCQkJCWlmIChyYyA8IDApCiAJCQkJCWdvdG8gZXJyOwogCQkJCW1zZ3NbaV0uYnVmW2J5dGVdID0gcmM7CiAJCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKG1zZ3NbaV0uYnVmWzBdID09IDB4ZjcpICYmIChtc2dzW2ldLmFkZHIgPT0gMHg1NSkpIHsKLQkJCQkvKiBwcmVwYWlyZWQgZm9yIGN4MjQxMTYgZmlybXdhcmUgKi8KLQkJCQkvKiBXcml0ZSBpbiBzbWFsbCBibG9ja3MgKi8KLQkJCQlsZW4gPSBtc2dzW2ldLmxlbiAtIDE7Ci0JCQkJayA9IDE7Ci0JCQkJZG8gewotCQkJCQlvdXRiKG1zZ3NbaV0uYWRkciA8PCAxLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCkpOwotCQkJCQlvdXRiKDB4ZjcsIGRtX2lvX21lbShETTExMDVfSTJDREFUICsgMSkpOwotCQkJCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgKGxlbiA+IDQ4ID8gNDggOiBsZW4pOyBieXRlKyspIHsKLQkJCQkJCWRhdGEgPSBtc2dzW2ldLmJ1ZltrK2J5dGVdOwotCQkJCQkJb3V0YihkYXRhLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCArIGJ5dGUgKyAyKSk7Ci0JCQkJCX0KLQkJCQkJb3V0YigweDgyICsgKGxlbiA+IDQ4ID8gNDggOiBsZW4pLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0NUUikpOwotCQkJCQlmb3IgKGogPSAwOyBqIDwgMjU7IGorKykgewotCQkJCQkJbWRlbGF5KDEwKTsKLQkJCQkJCXN0YXR1cyA9IGluYihkbV9pb19tZW0oRE0xMTA1X0kyQ1NUUykpOwotCQkJCQkJaWYgKChzdGF0dXMgJiAweGMwKSA9PSAweDQwKQotCQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0KLQkJCQkJaWYgKGogPj0gMjUpCi0JCQkJCQlyZXR1cm4gLTE7Ci0KLQkJCQkJayArPSA0ODsKLQkJCQkJbGVuIC09IDQ4OwotCQkJCX0gd2hpbGUgKGxlbiA+IDApOwotCQkJfSBlbHNlIHsKLQkJCQkvKiB3cml0ZSBieXRlcyAqLwotCQkJCW91dGIobXNnc1tpXS5hZGRyPDwxLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCkpOwotCQkJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCBtc2dzW2ldLmxlbjsgYnl0ZSsrKSB7Ci0JCQkJCWRhdGEgPSBtc2dzW2ldLmJ1ZltieXRlXTsKLQkJCQkJb3V0YihkYXRhLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCArIGJ5dGUgKyAxKSk7CisJCX0gZWxzZSBpZiAoKG1zZ3NbaV0uYnVmWzBdID09IDB4ZjcpICYmIChtc2dzW2ldLmFkZHIgPT0gMHg1NSkpIHsKKwkJCS8qIHByZXBhaXJlZCBmb3IgY3gyNDExNiBmaXJtd2FyZSAqLworCQkJLyogV3JpdGUgaW4gc21hbGwgYmxvY2tzICovCisJCQlsZW4gPSBtc2dzW2ldLmxlbiAtIDE7CisJCQlrID0gMTsKKwkJCWRvIHsKKwkJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0RBVCwgbXNnc1tpXS5hZGRyIDw8IDEpOworCQkJCWRtX3dyaXRlYihETTExMDVfSTJDREFUICsgMSwgMHhmNyk7CisJCQkJZm9yIChieXRlID0gMDsgYnl0ZSA8IChsZW4gPiA0OCA/IDQ4IDogbGVuKTsgYnl0ZSsrKSB7CisJCQkJCWRhdGEgPSBtc2dzW2ldLmJ1ZltrICsgYnl0ZV07CisJCQkJCWRtX3dyaXRlYihETTExMDVfSTJDREFUICsgYnl0ZSArIDIsIGRhdGEpOwogCQkJCX0KLQkJCQlvdXRiKDB4ODEgKyBtc2dzW2ldLmxlbiwgZG1faW9fbWVtKERNMTEwNV9JMkNDVFIpKTsKKwkJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0NUUiwgMHg4MiArIChsZW4gPiA0OCA/IDQ4IDogbGVuKSk7CiAJCQkJZm9yIChqID0gMDsgaiA8IDI1OyBqKyspIHsKIAkJCQkJbWRlbGF5KDEwKTsKLQkJCQkJc3RhdHVzID0gaW5iKGRtX2lvX21lbShETTExMDVfSTJDU1RTKSk7CisJCQkJCXN0YXR1cyA9IGRtX3JlYWRiKERNMTEwNV9JMkNTVFMpOwogCQkJCQlpZiAoKHN0YXR1cyAmIDB4YzApID09IDB4NDApCiAJCQkJCQlicmVhazsKIAkJCQl9CiAKIAkJCQlpZiAoaiA+PSAyNSkKIAkJCQkJcmV0dXJuIC0xOworCisJCQkJayArPSA0ODsKKwkJCQlsZW4gLT0gNDg7CisJCQl9IHdoaWxlIChsZW4gPiAwKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHdyaXRlIGJ5dGVzICovCisJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0RBVCwgbXNnc1tpXS5hZGRyIDw8IDEpOworCQkJZm9yIChieXRlID0gMDsgYnl0ZSA8IG1zZ3NbaV0ubGVuOyBieXRlKyspIHsKKwkJCQlkYXRhID0gbXNnc1tpXS5idWZbYnl0ZV07CisJCQkJZG1fd3JpdGViKERNMTEwNV9JMkNEQVQgKyBieXRlICsgMSwgZGF0YSk7CiAJCQl9CisJCQlkbV93cml0ZWIoRE0xMTA1X0kyQ0NUUiwgMHg4MSArIG1zZ3NbaV0ubGVuKTsKKwkJCWZvciAoaiA9IDA7IGogPCAyNTsgaisrKSB7CisJCQkJbWRlbGF5KDEwKTsKKwkJCQlzdGF0dXMgPSBkbV9yZWFkYihETTExMDVfSTJDU1RTKTsKKwkJCQlpZiAoKHN0YXR1cyAmIDB4YzApID09IDB4NDApCisJCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoaiA+PSAyNSkKKwkJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CiAJcmV0dXJuIG51bTsKQEAgLTQwNywyMiArNDIyLDIyIEBACiAJLmZ1bmN0aW9uYWxpdHkgPSBmdW5jdGlvbmFsaXR5LAogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZG0xMTA1ZHZiICpmZWVkX3RvX2RtMTEwNWR2YihzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkbTExMDVfZGV2ICpmZWVkX3RvX2RtMTEwNV9kZXYoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmZWVkKQogewotCXJldHVybiBjb250YWluZXJfb2YoZmVlZC0+ZGVtdXgsIHN0cnVjdCBkbTExMDVkdmIsIGRlbXV4KTsKKwlyZXR1cm4gY29udGFpbmVyX29mKGZlZWQtPmRlbXV4LCBzdHJ1Y3QgZG0xMTA1X2RldiwgZGVtdXgpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkbTExMDVkdmIgKmZyb250ZW5kX3RvX2RtMTEwNWR2YihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRtMTEwNV9kZXYgKmZyb250ZW5kX3RvX2RtMTEwNV9kZXYoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihmZS0+ZHZiLCBzdHJ1Y3QgZG0xMTA1ZHZiLCBkdmJfYWRhcHRlcik7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihmZS0+ZHZiLCBzdHJ1Y3QgZG0xMTA1X2RldiwgZHZiX2FkYXB0ZXIpOwogfQogCi1zdGF0aWMgaW50IGRtMTEwNWR2Yl9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQorc3RhdGljIGludCBkbTExMDVfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKIHsKLQlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgPSBmcm9udGVuZF90b19kbTExMDVkdmIoZmUpOworCXN0cnVjdCBkbTExMDVfZGV2ICpkZXYgPSBmcm9udGVuZF90b19kbTExMDVfZGV2KGZlKTsKIAl1MzIgbG5iX21hc2ssIGxuYl8xM3YsIGxuYl8xOHYsIGxuYl9vZmY7CiAKLQlzd2l0Y2ggKGRtMTEwNWR2Yi0+Ym9hcmRucikgeworCXN3aXRjaCAoZGV2LT5ib2FyZG5yKSB7CiAJY2FzZSBETTExMDVfQk9BUkRfQVhFU1NfRE0wNToKIAkJbG5iX21hc2sgPSBETTA1X0xOQl9NQVNLOwogCQlsbmJfb2ZmID0gRE0wNV9MTkJfT0ZGOwpAQCAtNDM4LDYyICs0NTMsNjcgQEAKIAkJbG5iXzE4diA9IERNMTEwNV9MTkJfMThWOwogCX0KIAotCW91dGwobG5iX21hc2ssIGRtX2lvX21lbShETTExMDVfR1BJT0NUUikpOworCWRtX3dyaXRlbChETTExMDVfR1BJT0NUUiwgbG5iX21hc2spOwogCWlmICh2b2x0YWdlID09IFNFQ19WT0xUQUdFXzE4KQotCQlvdXRsKGxuYl8xOHYgLCBkbV9pb19tZW0oRE0xMTA1X0dQSU9WQUwpKTsKKwkJZG1fd3JpdGVsKERNMTEwNV9HUElPVkFMLCBsbmJfMTh2KTsKIAllbHNlIGlmICh2b2x0YWdlID09IFNFQ19WT0xUQUdFXzEzKQotCQlvdXRsKGxuYl8xM3YsIGRtX2lvX21lbShETTExMDVfR1BJT1ZBTCkpOworCQlkbV93cml0ZWwoRE0xMTA1X0dQSU9WQUwsIGxuYl8xM3YpOwogCWVsc2UKLQkJb3V0bChsbmJfb2ZmLCBkbV9pb19tZW0oRE0xMTA1X0dQSU9WQUwpKTsKKwkJZG1fd3JpdGVsKERNMTEwNV9HUElPVkFMLCBsbmJfb2ZmKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkbTExMDVkdmJfc2V0X2RtYV9hZGRyKHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YikKK3N0YXRpYyB2b2lkIGRtMTEwNV9zZXRfZG1hX2FkZHIoc3RydWN0IGRtMTEwNV9kZXYgKmRldikKIHsKLQlvdXRsKGNwdV90b19sZTMyKGRtMTEwNWR2Yi0+ZG1hX2FkZHIpLCBkbV9pb19tZW0oRE0xMTA1X1NUQURSKSk7CisJZG1fd3JpdGVsKERNMTEwNV9TVEFEUiwgY3B1X3RvX2xlMzIoZGV2LT5kbWFfYWRkcikpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBkbTExMDVkdmJfZG1hX21hcChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkbTExMDVfZG1hX21hcChzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2KQogewotCWRtMTEwNWR2Yi0+dHNfYnVmID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZG0xMTA1ZHZiLT5wZGV2LCA2KkRNMTEwNV9ETUFfQllURVMsICZkbTExMDVkdmItPmRtYV9hZGRyKTsKKwlkZXYtPnRzX2J1ZiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldi0+cGRldiwKKwkJCQkJNiAqIERNMTEwNV9ETUFfQllURVMsCisJCQkJCSZkZXYtPmRtYV9hZGRyKTsKIAotCXJldHVybiAhZG0xMTA1ZHZiLT50c19idWY7CisJcmV0dXJuICFkZXYtPnRzX2J1ZjsKIH0KIAotc3RhdGljIHZvaWQgZG0xMTA1ZHZiX2RtYV91bm1hcChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCitzdGF0aWMgdm9pZCBkbTExMDVfZG1hX3VubWFwKHN0cnVjdCBkbTExMDVfZGV2ICpkZXYpCiB7Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChkbTExMDVkdmItPnBkZXYsIDYqRE0xMTA1X0RNQV9CWVRFUywgZG0xMTA1ZHZiLT50c19idWYsIGRtMTEwNWR2Yi0+ZG1hX2FkZHIpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wZGV2LAorCQkJNiAqIERNMTEwNV9ETUFfQllURVMsCisJCQlkZXYtPnRzX2J1ZiwKKwkJCWRldi0+ZG1hX2FkZHIpOwogfQogCi1zdGF0aWMgdm9pZCBkbTExMDVkdmJfZW5hYmxlX2lycXMoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiKQorc3RhdGljIHZvaWQgZG0xMTA1X2VuYWJsZV9pcnFzKHN0cnVjdCBkbTExMDVfZGV2ICpkZXYpCiB7Ci0Jb3V0YihJTlRNQUtfQUxMTUFTSywgZG1faW9fbWVtKERNMTEwNV9JTlRNQUspKTsKLQlvdXRiKDEsIGRtX2lvX21lbShETTExMDVfQ1IpKTsKKwlkbV93cml0ZWIoRE0xMTA1X0lOVE1BSywgSU5UTUFLX0FMTE1BU0spOworCWRtX3dyaXRlYihETTExMDVfQ1IsIDEpOwogfQogCi1zdGF0aWMgdm9pZCBkbTExMDVkdmJfZGlzYWJsZV9pcnFzKHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YikKK3N0YXRpYyB2b2lkIGRtMTEwNV9kaXNhYmxlX2lycXMoc3RydWN0IGRtMTEwNV9kZXYgKmRldikKIHsKLQlvdXRiKElOVE1BS19JUk0sIGRtX2lvX21lbShETTExMDVfSU5UTUFLKSk7Ci0Jb3V0YigwLCBkbV9pb19tZW0oRE0xMTA1X0NSKSk7CisJZG1fd3JpdGViKERNMTEwNV9JTlRNQUssIElOVE1BS19JUk0pOworCWRtX3dyaXRlYihETTExMDVfQ1IsIDApOwogfQogCi1zdGF0aWMgaW50IGRtMTEwNWR2Yl9zdGFydF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZikKK3N0YXRpYyBpbnQgZG0xMTA1X3N0YXJ0X2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmKQogewotCXN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YiA9IGZlZWRfdG9fZG0xMTA1ZHZiKGYpOworCXN0cnVjdCBkbTExMDVfZGV2ICpkZXYgPSBmZWVkX3RvX2RtMTEwNV9kZXYoZik7CiAKLQlpZiAoZG0xMTA1ZHZiLT5mdWxsX3RzX3VzZXJzKysgPT0gMCkKLQkJZG0xMTA1ZHZiX2VuYWJsZV9pcnFzKGRtMTEwNWR2Yik7CisJaWYgKGRldi0+ZnVsbF90c191c2VycysrID09IDApCisJCWRtMTEwNV9lbmFibGVfaXJxcyhkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZG0xMTA1ZHZiX3N0b3BfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmYpCitzdGF0aWMgaW50IGRtMTEwNV9zdG9wX2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmKQogewotCXN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YiA9IGZlZWRfdG9fZG0xMTA1ZHZiKGYpOworCXN0cnVjdCBkbTExMDVfZGV2ICpkZXYgPSBmZWVkX3RvX2RtMTEwNV9kZXYoZik7CiAKLQlpZiAoLS1kbTExMDVkdmItPmZ1bGxfdHNfdXNlcnMgPT0gMCkKLQkJZG0xMTA1ZHZiX2Rpc2FibGVfaXJxcyhkbTExMDVkdmIpOworCWlmICgtLWRldi0+ZnVsbF90c191c2VycyA9PSAwKQorCQlkbTExMDVfZGlzYWJsZV9pcnFzKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUxNyw2OCArNTM3LDY0IEBACiAvKiB3b3JrIGhhbmRsZXIgKi8KIHN0YXRpYyB2b2lkIGRtMTEwNV9kbXhfYnVmZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgPQotCQkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZG0xMTA1ZHZiLCB3b3JrKTsKKwlzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkbTExMDVfZGV2LCB3b3JrKTsKIAl1bnNpZ25lZCBpbnQgbmJwYWNrZXRzOwotCXUzMiBvbGR3cnAgPSBkbTExMDVkdmItPndycDsKLQl1MzIgbmV4dHdycCA9IGRtMTEwNWR2Yi0+bmV4dHdycDsKKwl1MzIgb2xkd3JwID0gZGV2LT53cnA7CisJdTMyIG5leHR3cnAgPSBkZXYtPm5leHR3cnA7CiAKLQlpZiAoISgoZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwXSA9PSAweDQ3KSAmJgotCQkJKGRtMTEwNWR2Yi0+dHNfYnVmW29sZHdycCArIDE4OF0gPT0gMHg0NykgJiYKLQkJCShkbTExMDVkdmItPnRzX2J1ZltvbGR3cnAgKyAxODggKiAyXSA9PSAweDQ3KSkpIHsKLQkJZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50Kys7CisJaWYgKCEoKGRldi0+dHNfYnVmW29sZHdycF0gPT0gMHg0NykgJiYKKwkJCShkZXYtPnRzX2J1ZltvbGR3cnAgKyAxODhdID09IDB4NDcpICYmCisJCQkoZGV2LT50c19idWZbb2xkd3JwICsgMTg4ICogMl0gPT0gMHg0NykpKSB7CisJCWRldi0+UGFja2V0RXJyb3JDb3VudCsrOwogCQkvKiBiYWQgcGFja2V0IGZvdW5kICovCi0JCWlmICgoZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50ID49IDIpICYmCi0JCQkJKGRtMTEwNWR2Yi0+ZG1hcnN0ID09IDApKSB7Ci0JCQlvdXRiKDEsIGRtX2lvX21lbShETTExMDVfUlNUKSk7Ci0JCQlkbTExMDVkdmItPndycCA9IDA7Ci0JCQlkbTExMDVkdmItPlBhY2tldEVycm9yQ291bnQgPSAwOwotCQkJZG0xMTA1ZHZiLT5kbWFyc3QgPSAwOworCQlpZiAoKGRldi0+UGFja2V0RXJyb3JDb3VudCA+PSAyKSAmJgorCQkJCShkZXYtPmRtYXJzdCA9PSAwKSkgeworCQkJZG1fd3JpdGViKERNMTEwNV9SU1QsIDEpOworCQkJZGV2LT53cnAgPSAwOworCQkJZGV2LT5QYWNrZXRFcnJvckNvdW50ID0gMDsKKwkJCWRldi0+ZG1hcnN0ID0gMDsKIAkJCXJldHVybjsKIAkJfQogCX0KIAogCWlmIChuZXh0d3JwIDwgb2xkd3JwKSB7Ci0JCW1lbWNweShkbTExMDVkdmItPnRzX2J1ZiArIGRtMTEwNWR2Yi0+YnVmZmVyX3NpemUsCi0JCQkJCQlkbTExMDVkdmItPnRzX2J1ZiwgbmV4dHdycCk7Ci0JCW5icGFja2V0cyA9ICgoZG0xMTA1ZHZiLT5idWZmZXJfc2l6ZSAtIG9sZHdycCkgKyBuZXh0d3JwKSAvIDE4ODsKKwkJbWVtY3B5KGRldi0+dHNfYnVmICsgZGV2LT5idWZmZXJfc2l6ZSwgZGV2LT50c19idWYsIG5leHR3cnApOworCQluYnBhY2tldHMgPSAoKGRldi0+YnVmZmVyX3NpemUgLSBvbGR3cnApICsgbmV4dHdycCkgLyAxODg7CiAJfSBlbHNlCiAJCW5icGFja2V0cyA9IChuZXh0d3JwIC0gb2xkd3JwKSAvIDE4ODsKIAotCWRtMTEwNWR2Yi0+d3JwID0gbmV4dHdycDsKLQlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoJmRtMTEwNWR2Yi0+ZGVtdXgsCi0JCQkJCSZkbTExMDVkdmItPnRzX2J1ZltvbGR3cnBdLCBuYnBhY2tldHMpOworCWRldi0+d3JwID0gbmV4dHdycDsKKwlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoJmRldi0+ZGVtdXgsICZkZXYtPnRzX2J1ZltvbGR3cnBdLCBuYnBhY2tldHMpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgZG0xMTA1ZHZiX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgZG0xMTA1X2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiID0gZGV2X2lkOworCXN0cnVjdCBkbTExMDVfZGV2ICpkZXYgPSBkZXZfaWQ7CiAKIAkvKiBSZWFkLVdyaXRlIElOU1RTIEFjaydzIEludGVycnVwdCBmb3IgRE0xMTA1IGNoaXAgMTYuMDMuMjAwOCAqLwotCXVuc2lnbmVkIGludCBpbnRzdHMgPSBpbmIoZG1faW9fbWVtKERNMTEwNV9JTlRTVFMpKTsKLQlvdXRiKGludHN0cywgZG1faW9fbWVtKERNMTEwNV9JTlRTVFMpKTsKKwl1bnNpZ25lZCBpbnQgaW50c3RzID0gZG1fcmVhZGIoRE0xMTA1X0lOVFNUUyk7CisJZG1fd3JpdGViKERNMTEwNV9JTlRTVFMsIGludHN0cyk7CiAKIAlzd2l0Y2ggKGludHN0cykgewogCWNhc2UgSU5UU1RTX1RTSVJROgogCWNhc2UgKElOVFNUU19UU0lSUSB8IElOVFNUU19JUik6Ci0JCWRtMTEwNWR2Yi0+bmV4dHdycCA9IGlubChkbV9pb19tZW0oRE0xMTA1X1dSUCkpIC0KLQkJCQkJaW5sKGRtX2lvX21lbShETTExMDVfU1RBRFIpKTsKLQkJcXVldWVfd29yayhkbTExMDVkdmItPndxLCAmZG0xMTA1ZHZiLT53b3JrKTsKKwkJZGV2LT5uZXh0d3JwID0gZG1fcmVhZGwoRE0xMTA1X1dSUCkgLSBkbV9yZWFkbChETTExMDVfU1RBRFIpOworCQlxdWV1ZV93b3JrKGRldi0+d3EsICZkZXYtPndvcmspOwogCQlicmVhazsKIAljYXNlIElOVFNUU19JUjoKLQkJZG0xMTA1ZHZiLT5pci5pcl9jb21tYW5kID0gaW5sKGRtX2lvX21lbShETTExMDVfSVJDT0RFKSk7Ci0JCXNjaGVkdWxlX3dvcmsoJmRtMTEwNWR2Yi0+aXIud29yayk7CisJCWRldi0+aXIuaXJfY29tbWFuZCA9IGRtX3JlYWRsKERNMTEwNV9JUkNPREUpOworCQlzY2hlZHVsZV93b3JrKCZkZXYtPmlyLndvcmspOwogCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLWludCBfX2RldmluaXQgZG0xMTA1X2lyX2luaXQoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1KQoraW50IF9fZGV2aW5pdCBkbTExMDVfaXJfaW5pdChzdHJ1Y3QgZG0xMTA1X2RldiAqZG0xMTA1KQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzID0gJmlyX2NvZGVzX2RtMTEwNV9uZWNfdGFibGU7Ci0JaW50IGlyX3R5cGUgPSBJUl9UWVBFX09USEVSOworCXU2NCBpcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAogCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwpAQCAtNjExLDUxICs2MjcsNTEgQEAKIAogCUlOSVRfV09SSygmZG0xMTA1LT5pci53b3JrLCBkbTExMDVfZW1pdF9rZXkpOwogCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaW5wdXRfZGV2LCBpcl9jb2Rlcyk7CisJZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaW5wdXRfZGV2LCBpcl9jb2RlcywgTlVMTCk7CiAKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIF9fZGV2ZXhpdCBkbTExMDVfaXJfZXhpdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDUpCit2b2lkIF9fZGV2ZXhpdCBkbTExMDVfaXJfZXhpdChzdHJ1Y3QgZG0xMTA1X2RldiAqZG0xMTA1KQogewogCWlyX2lucHV0X3VucmVnaXN0ZXIoZG0xMTA1LT5pci5pbnB1dF9kZXYpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBkbTExMDVkdmJfaHdfaW5pdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkbTExMDVfaHdfaW5pdChzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2KQogewotCWRtMTEwNWR2Yl9kaXNhYmxlX2lycXMoZG0xMTA1ZHZiKTsKKwlkbTExMDVfZGlzYWJsZV9pcnFzKGRldik7CiAKLQlvdXRiKDAsIGRtX2lvX21lbShETTExMDVfSE9TVF9DVFIpKTsKKwlkbV93cml0ZWIoRE0xMTA1X0hPU1RfQ1RSLCAwKTsKIAogCS8qREFUQUxFTiAxODgsKi8KLQlvdXRiKDE4OCwgZG1faW9fbWVtKERNMTEwNV9EVEFMRU5USCkpOworCWRtX3dyaXRlYihETTExMDVfRFRBTEVOVEgsIDE4OCk7CiAJLypUU19TVFJUIFRTX1ZBTFAgTVNCRklSU1QgVFNfTU9ERSBBTFBBUyBUU1BFUyovCi0Jb3V0dygweGMxMGEsIGRtX2lvX21lbShETTExMDVfVFNDVFIpKTsKKwlkbV93cml0ZXcoRE0xMTA1X1RTQ1RSLCAweGMxMGEpOwogCiAJLyogbWFwIERNQSBhbmQgc2V0IGFkZHJlc3MgKi8KLQlkbTExMDVkdmJfZG1hX21hcChkbTExMDVkdmIpOwotCWRtMTEwNWR2Yl9zZXRfZG1hX2FkZHIoZG0xMTA1ZHZiKTsKKwlkbTExMDVfZG1hX21hcChkZXYpOworCWRtMTEwNV9zZXRfZG1hX2FkZHIoZGV2KTsKIAkvKiBiaWcgYnVmZmVyICovCi0Jb3V0bCg1KkRNMTEwNV9ETUFfQllURVMsIGRtX2lvX21lbShETTExMDVfUkxFTikpOwotCW91dGIoNDcsIGRtX2lvX21lbShETTExMDVfSU5UQ05UKSk7CisJZG1fd3JpdGVsKERNMTEwNV9STEVOLCA1ICogRE0xMTA1X0RNQV9CWVRFUyk7CisJZG1fd3JpdGViKERNMTEwNV9JTlRDTlQsIDQ3KTsKIAogCS8qIElSIE5FQyBtb2RlIGVuYWJsZSAqLwotCW91dGIoKERNMTEwNV9JUl9FTiB8IERNMTEwNV9TWVNfQ0hLKSwgZG1faW9fbWVtKERNMTEwNV9JUkNUUikpOwotCW91dGIoMCwgZG1faW9fbWVtKERNMTEwNV9JUk1PREUpKTsKLQlvdXR3KDAsIGRtX2lvX21lbShETTExMDVfU1lTVEVNQ09ERSkpOworCWRtX3dyaXRlYihETTExMDVfSVJDVFIsIChETTExMDVfSVJfRU4gfCBETTExMDVfU1lTX0NISykpOworCWRtX3dyaXRlYihETTExMDVfSVJNT0RFLCAwKTsKKwlkbV93cml0ZXcoRE0xMTA1X1NZU1RFTUNPREUsIDApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRtMTEwNWR2Yl9od19leGl0KHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YikKK3N0YXRpYyB2b2lkIGRtMTEwNV9od19leGl0KHN0cnVjdCBkbTExMDVfZGV2ICpkZXYpCiB7Ci0JZG0xMTA1ZHZiX2Rpc2FibGVfaXJxcyhkbTExMDVkdmIpOworCWRtMTEwNV9kaXNhYmxlX2lycXMoZGV2KTsKIAogCS8qIElSIGRpc2FibGUgKi8KLQlvdXRiKDAsIGRtX2lvX21lbShETTExMDVfSVJDVFIpKTsKLQlvdXRiKElOVE1BS19OT05FTUFTSywgZG1faW9fbWVtKERNMTEwNV9JTlRNQUspKTsKKwlkbV93cml0ZWIoRE0xMTA1X0lSQ1RSLCAwKTsKKwlkbV93cml0ZWIoRE0xMTA1X0lOVE1BSywgSU5UTUFLX05PTkVNQVNLKTsKIAotCWRtMTEwNWR2Yl9kbWFfdW5tYXAoZG0xMTA1ZHZiKTsKKwlkbTExMDVfZG1hX3VubWFwKGRldik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc3R2MDI5OV9jb25maWcgc2hhcnBfejAxOTRhX2NvbmZpZyA9IHsKQEAgLTY4NSw3MCArNzAxLDc5IEBACiAJLmRlbW9kX2FkZHJlc3MgPSAweDU1LAogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgZnJvbnRlbmRfaW5pdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCitzdGF0aWMgc3RydWN0IGRzMzAwMF9jb25maWcgZHZid29ybGRfZHMzMDAwX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBmcm9udGVuZF9pbml0KHN0cnVjdCBkbTExMDVfZGV2ICpkZXYpCiB7CiAJaW50IHJldDsKIAotCXN3aXRjaCAoZG0xMTA1ZHZiLT5ib2FyZG5yKSB7CisJc3dpdGNoIChkZXYtPmJvYXJkbnIpIHsKIAljYXNlIERNMTEwNV9CT0FSRF9EVkJXT1JMRF8yMDA0OgotCQlkbTExMDVkdmItPmZlID0gZHZiX2F0dGFjaCgKKwkJZGV2LT5mZSA9IGR2Yl9hdHRhY2goCiAJCQljeDI0MTE2X2F0dGFjaCwgJnNlcml0X3NwMjYzM19jb25maWcsCi0JCQkmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7Ci0JCWlmIChkbTExMDVkdmItPmZlKQotCQkJZG0xMTA1ZHZiLT5mZS0+b3BzLnNldF92b2x0YWdlID0gZG0xMTA1ZHZiX3NldF92b2x0YWdlOworCQkJJmRldi0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5mZSkgeworCQkJZGV2LT5mZS0+b3BzLnNldF92b2x0YWdlID0gZG0xMTA1X3NldF92b2x0YWdlOworCQkJYnJlYWs7CisJCX0KKworCQlkZXYtPmZlID0gZHZiX2F0dGFjaCgKKwkJCWRzMzAwMF9hdHRhY2gsICZkdmJ3b3JsZF9kczMwMDBfY29uZmlnLAorCQkJJmRldi0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5mZSkKKwkJCWRldi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGRtMTEwNV9zZXRfdm9sdGFnZTsKIAogCQlicmVhazsKIAljYXNlIERNMTEwNV9CT0FSRF9EVkJXT1JMRF8yMDAyOgogCWNhc2UgRE0xMTA1X0JPQVJEX0FYRVNTX0RNMDU6CiAJZGVmYXVsdDoKLQkJZG0xMTA1ZHZiLT5mZSA9IGR2Yl9hdHRhY2goCisJCWRldi0+ZmUgPSBkdmJfYXR0YWNoKAogCQkJc3R2MDI5OV9hdHRhY2gsICZzaGFycF96MDE5NGFfY29uZmlnLAotCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXApOwotCQlpZiAoZG0xMTA1ZHZiLT5mZSkgewotCQkJZG0xMTA1ZHZiLT5mZS0+b3BzLnNldF92b2x0YWdlID0KLQkJCQkJCQlkbTExMDVkdmJfc2V0X3ZvbHRhZ2U7Ci0JCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkbTExMDVkdmItPmZlLCAweDYwLAotCQkJCQkmZG0xMTA1ZHZiLT5pMmNfYWRhcCwgRFZCX1BMTF9PUEVSQTEpOworCQkJJmRldi0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5mZSkgeworCQkJZGV2LT5mZS0+b3BzLnNldF92b2x0YWdlID0gZG0xMTA1X3NldF92b2x0YWdlOworCQkJZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5mZSwgMHg2MCwKKwkJCQkJJmRldi0+aTJjX2FkYXAsIERWQl9QTExfT1BFUkExKTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJZG0xMTA1ZHZiLT5mZSA9IGR2Yl9hdHRhY2goCisJCWRldi0+ZmUgPSBkdmJfYXR0YWNoKAogCQkJc3R2MDI4OF9hdHRhY2gsICZlYXJkYV9jb25maWcsCi0JCQkmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7Ci0JCWlmIChkbTExMDVkdmItPmZlKSB7Ci0JCQlkbTExMDVkdmItPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPQotCQkJCQkJZG0xMTA1ZHZiX3NldF92b2x0YWdlOwotCQkJZHZiX2F0dGFjaChzdGI2MDAwX2F0dGFjaCwgZG0xMTA1ZHZiLT5mZSwgMHg2MSwKLQkJCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXApOworCQkJJmRldi0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5mZSkgeworCQkJZGV2LT5mZS0+b3BzLnNldF92b2x0YWdlID0gZG0xMTA1X3NldF92b2x0YWdlOworCQkJZHZiX2F0dGFjaChzdGI2MDAwX2F0dGFjaCwgZGV2LT5mZSwgMHg2MSwKKwkJCQkJJmRldi0+aTJjX2FkYXApOwogCQkJYnJlYWs7CiAJCX0KIAotCQlkbTExMDVkdmItPmZlID0gZHZiX2F0dGFjaCgKKwkJZGV2LT5mZSA9IGR2Yl9hdHRhY2goCiAJCQlzaTIxeHhfYXR0YWNoLCAmc2VyaXRfY29uZmlnLAotCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXApOwotCQlpZiAoZG0xMTA1ZHZiLT5mZSkKLQkJCWRtMTEwNWR2Yi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9Ci0JCQkJCQlkbTExMDVkdmJfc2V0X3ZvbHRhZ2U7CisJCQkmZGV2LT5pMmNfYWRhcCk7CisJCWlmIChkZXYtPmZlKQorCQkJZGV2LT5mZS0+b3BzLnNldF92b2x0YWdlID0gZG0xMTA1X3NldF92b2x0YWdlOwogCiAJfQogCi0JaWYgKCFkbTExMDVkdmItPmZlKSB7Ci0JCWRldl9lcnIoJmRtMTEwNWR2Yi0+cGRldi0+ZGV2LCAiY291bGQgbm90IGF0dGFjaCBmcm9udGVuZFxuIik7CisJaWYgKCFkZXYtPmZlKSB7CisJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiY291bGQgbm90IGF0dGFjaCBmcm9udGVuZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXJldCA9IGR2Yl9yZWdpc3Rlcl9mcm9udGVuZCgmZG0xMTA1ZHZiLT5kdmJfYWRhcHRlciwgZG0xMTA1ZHZiLT5mZSk7CisJcmV0ID0gZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKCZkZXYtPmR2Yl9hZGFwdGVyLCBkZXYtPmZlKTsKIAlpZiAocmV0IDwgMCkgewotCQlpZiAoZG0xMTA1ZHZiLT5mZS0+b3BzLnJlbGVhc2UpCi0JCQlkbTExMDVkdmItPmZlLT5vcHMucmVsZWFzZShkbTExMDVkdmItPmZlKTsKLQkJZG0xMTA1ZHZiLT5mZSA9IE5VTEw7CisJCWlmIChkZXYtPmZlLT5vcHMucmVsZWFzZSkKKwkJCWRldi0+ZmUtPm9wcy5yZWxlYXNlKGRldi0+ZmUpOworCQlkZXYtPmZlID0gTlVMTDsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IGRtMTEwNWR2Yl9yZWFkX21hYyhzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIsIHU4ICptYWMpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgZG0xMTA1X3JlYWRfbWFjKHN0cnVjdCBkbTExMDVfZGV2ICpkZXYsIHU4ICptYWMpCiB7CiAJc3RhdGljIHU4IGNvbW1hbmRbMV0gPSB7IDB4MjggfTsKIApAQCAtNzY2LDQ3ICs3OTEsNDcgQEAKIAkJfSwKIAl9OwogCi0JZG0xMTA1X2kyY194ZmVyKCZkbTExMDVkdmItPmkyY19hZGFwLCBtc2cgLCAyKTsKLQlkZXZfaW5mbygmZG0xMTA1ZHZiLT5wZGV2LT5kZXYsICJNQUMgJXBNXG4iLCBtYWMpOworCWRtMTEwNV9pMmNfeGZlcigmZGV2LT5pMmNfYWRhcCwgbXNnICwgMik7CisJZGV2X2luZm8oJmRldi0+cGRldi0+ZGV2LCAiTUFDICVwTVxuIiwgbWFjKTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgZG0xMTA1X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmI7CisJc3RydWN0IGRtMTEwNV9kZXYgKmRldjsKIAlzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmR2Yl9hZGFwdGVyOwogCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRlbXV4OwogCXN0cnVjdCBkbXhfZGVtdXggKmRteDsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAlpbnQgaTsKIAotCWRtMTEwNWR2YiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkbTExMDVkdmIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRtMTEwNWR2YikKKwlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG0xMTA1X2RldiksIEdGUF9LRVJORUwpOworCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIGJvYXJkIGNvbmZpZyAqLwotCWRtMTEwNWR2Yi0+bnIgPSBkbTExMDVfZGV2Y291bnQ7Ci0JZG0xMTA1ZHZiLT5ib2FyZG5yID0gVU5TRVQ7Ci0JaWYgKGNhcmRbZG0xMTA1ZHZiLT5ucl0gPCBBUlJBWV9TSVpFKGRtMTEwNV9ib2FyZHMpKQotCQlkbTExMDVkdmItPmJvYXJkbnIgPSBjYXJkW2RtMTEwNWR2Yi0+bnJdOwotCWZvciAoaSA9IDA7IFVOU0VUID09IGRtMTEwNWR2Yi0+Ym9hcmRuciAmJgorCWRldi0+bnIgPSBkbTExMDVfZGV2Y291bnQ7CisJZGV2LT5ib2FyZG5yID0gVU5TRVQ7CisJaWYgKGNhcmRbZGV2LT5ucl0gPCBBUlJBWV9TSVpFKGRtMTEwNV9ib2FyZHMpKQorCQlkZXYtPmJvYXJkbnIgPSBjYXJkW2Rldi0+bnJdOworCWZvciAoaSA9IDA7IFVOU0VUID09IGRldi0+Ym9hcmRuciAmJgogCQkJCWkgPCBBUlJBWV9TSVpFKGRtMTEwNV9zdWJpZHMpOyBpKyspCiAJCWlmIChwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09CiAJCQlkbTExMDVfc3ViaWRzW2ldLnN1YnZlbmRvciAmJgogCQkJCXBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0KIAkJCQkJZG0xMTA1X3N1Ymlkc1tpXS5zdWJkZXZpY2UpCi0JCQlkbTExMDVkdmItPmJvYXJkbnIgPSBkbTExMDVfc3ViaWRzW2ldLmNhcmQ7CisJCQlkZXYtPmJvYXJkbnIgPSBkbTExMDVfc3ViaWRzW2ldLmNhcmQ7CiAKLQlpZiAoVU5TRVQgPT0gZG0xMTA1ZHZiLT5ib2FyZG5yKSB7Ci0JCWRtMTEwNWR2Yi0+Ym9hcmRuciA9IERNMTEwNV9CT0FSRF9VTktOT1dOOworCWlmIChVTlNFVCA9PSBkZXYtPmJvYXJkbnIpIHsKKwkJZGV2LT5ib2FyZG5yID0gRE0xMTA1X0JPQVJEX1VOS05PV047CiAJCWRtMTEwNV9jYXJkX2xpc3QocGRldik7CiAJfQogCiAJZG0xMTA1X2RldmNvdW50Kys7Ci0JZG0xMTA1ZHZiLT5wZGV2ID0gcGRldjsKLQlkbTExMDVkdmItPmJ1ZmZlcl9zaXplID0gNSAqIERNMTEwNV9ETUFfQllURVM7Ci0JZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50ID0gMDsKLQlkbTExMDVkdmItPmRtYXJzdCA9IDA7CisJZGV2LT5wZGV2ID0gcGRldjsKKwlkZXYtPmJ1ZmZlcl9zaXplID0gNSAqIERNMTEwNV9ETUFfQllURVM7CisJZGV2LT5QYWNrZXRFcnJvckNvdW50ID0gMDsKKwlkZXYtPmRtYXJzdCA9IDA7CiAKIAlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmV0IDwgMCkKQEAgLTgyMiw0NyArODQ3LDQ3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX3BjaV9kaXNhYmxlX2RldmljZTsKIAotCWRtMTEwNWR2Yi0+aW9fbWVtID0gcGNpX2lvbWFwKHBkZXYsIDAsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOwotCWlmICghZG0xMTA1ZHZiLT5pb19tZW0pIHsKKwlkZXYtPmlvX21lbSA9IHBjaV9pb21hcChwZGV2LCAwLCBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKKwlpZiAoIWRldi0+aW9fbWVtKSB7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gZXJyX3BjaV9yZWxlYXNlX3JlZ2lvbnM7CiAJfQogCi0Jc3Bpbl9sb2NrX2luaXQoJmRtMTEwNWR2Yi0+bG9jayk7Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRtMTEwNWR2Yik7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+bG9jayk7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKLQlyZXQgPSBkbTExMDVkdmJfaHdfaW5pdChkbTExMDVkdmIpOworCXJldCA9IGRtMTEwNV9od19pbml0KGRldik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX3BjaV9pb3VubWFwOwogCiAJLyogaTJjICovCi0JaTJjX3NldF9hZGFwZGF0YSgmZG0xMTA1ZHZiLT5pMmNfYWRhcCwgZG0xMTA1ZHZiKTsKLQlzdHJjcHkoZG0xMTA1ZHZiLT5pMmNfYWRhcC5uYW1lLCBEUklWRVJfTkFNRSk7Ci0JZG0xMTA1ZHZiLT5pMmNfYWRhcC5vd25lciA9IFRISVNfTU9EVUxFOwotCWRtMTEwNWR2Yi0+aTJjX2FkYXAuY2xhc3MgPSBJMkNfQ0xBU1NfVFZfRElHSVRBTDsKLQlkbTExMDVkdmItPmkyY19hZGFwLmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwotCWRtMTEwNWR2Yi0+aTJjX2FkYXAuYWxnbyA9ICZkbTExMDVfYWxnbzsKLQlkbTExMDVkdmItPmkyY19hZGFwLmFsZ29fZGF0YSA9IGRtMTEwNWR2YjsKLQlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoJmRtMTEwNWR2Yi0+aTJjX2FkYXApOworCWkyY19zZXRfYWRhcGRhdGEoJmRldi0+aTJjX2FkYXAsIGRldik7CisJc3RyY3B5KGRldi0+aTJjX2FkYXAubmFtZSwgRFJJVkVSX05BTUUpOworCWRldi0+aTJjX2FkYXAub3duZXIgPSBUSElTX01PRFVMRTsKKwlkZXYtPmkyY19hZGFwLmNsYXNzID0gSTJDX0NMQVNTX1RWX0RJR0lUQUw7CisJZGV2LT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwlkZXYtPmkyY19hZGFwLmFsZ28gPSAmZG0xMTA1X2FsZ287CisJZGV2LT5pMmNfYWRhcC5hbGdvX2RhdGEgPSBkZXY7CisJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZkZXYtPmkyY19hZGFwKTsKIAogCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycl9kbTExMDVkdmJfaHdfZXhpdDsKKwkJZ290byBlcnJfZG0xMTA1X2h3X2V4aXQ7CiAKIAkvKiBkdmIgKi8KLQlyZXQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmZG0xMTA1ZHZiLT5kdmJfYWRhcHRlciwgRFJJVkVSX05BTUUsCisJcmV0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJmRldi0+ZHZiX2FkYXB0ZXIsIERSSVZFUl9OQU1FLAogCQkJCQlUSElTX01PRFVMRSwgJnBkZXYtPmRldiwgYWRhcHRlcl9ucik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX2kyY19kZWxfYWRhcHRlcjsKIAotCWR2Yl9hZGFwdGVyID0gJmRtMTEwNWR2Yi0+ZHZiX2FkYXB0ZXI7CisJZHZiX2FkYXB0ZXIgPSAmZGV2LT5kdmJfYWRhcHRlcjsKIAotCWRtMTEwNWR2Yl9yZWFkX21hYyhkbTExMDVkdmIsIGR2Yl9hZGFwdGVyLT5wcm9wb3NlZF9tYWMpOworCWRtMTEwNV9yZWFkX21hYyhkZXYsIGR2Yl9hZGFwdGVyLT5wcm9wb3NlZF9tYWMpOwogCi0JZHZiZGVtdXggPSAmZG0xMTA1ZHZiLT5kZW11eDsKKwlkdmJkZW11eCA9ICZkZXYtPmRlbXV4OwogCWR2YmRlbXV4LT5maWx0ZXJudW0gPSAyNTY7CiAJZHZiZGVtdXgtPmZlZWRudW0gPSAyNTY7Ci0JZHZiZGVtdXgtPnN0YXJ0X2ZlZWQgPSBkbTExMDVkdmJfc3RhcnRfZmVlZDsKLQlkdmJkZW11eC0+c3RvcF9mZWVkID0gZG0xMTA1ZHZiX3N0b3BfZmVlZDsKKwlkdmJkZW11eC0+c3RhcnRfZmVlZCA9IGRtMTEwNV9zdGFydF9mZWVkOworCWR2YmRlbXV4LT5zdG9wX2ZlZWQgPSBkbTExMDVfc3RvcF9mZWVkOwogCWR2YmRlbXV4LT5kbXguY2FwYWJpbGl0aWVzID0gKERNWF9UU19GSUxURVJJTkcgfAogCQkJRE1YX1NFQ1RJT05fRklMVEVSSU5HIHwgRE1YX01FTU9SWV9CQVNFRF9GSUxURVJJTkcpOwogCXJldCA9IGR2Yl9kbXhfaW5pdChkdmJkZW11eCk7CkBAIC04NzAsMTEzICs4OTUsMTEzIEBACiAJCWdvdG8gZXJyX2R2Yl91bnJlZ2lzdGVyX2FkYXB0ZXI7CiAKIAlkbXggPSAmZHZiZGVtdXgtPmRteDsKLQlkbTExMDVkdmItPmRteGRldi5maWx0ZXJudW0gPSAyNTY7Ci0JZG0xMTA1ZHZiLT5kbXhkZXYuZGVtdXggPSBkbXg7Ci0JZG0xMTA1ZHZiLT5kbXhkZXYuY2FwYWJpbGl0aWVzID0gMDsKKwlkZXYtPmRteGRldi5maWx0ZXJudW0gPSAyNTY7CisJZGV2LT5kbXhkZXYuZGVtdXggPSBkbXg7CisJZGV2LT5kbXhkZXYuY2FwYWJpbGl0aWVzID0gMDsKIAotCXJldCA9IGR2Yl9kbXhkZXZfaW5pdCgmZG0xMTA1ZHZiLT5kbXhkZXYsIGR2Yl9hZGFwdGVyKTsKKwlyZXQgPSBkdmJfZG14ZGV2X2luaXQoJmRldi0+ZG14ZGV2LCBkdmJfYWRhcHRlcik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX2R2Yl9kbXhfcmVsZWFzZTsKIAotCWRtMTEwNWR2Yi0+aHdfZnJvbnRlbmQuc291cmNlID0gRE1YX0ZST05URU5EXzA7CisJZGV2LT5od19mcm9udGVuZC5zb3VyY2UgPSBETVhfRlJPTlRFTkRfMDsKIAotCXJldCA9IGRteC0+YWRkX2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+aHdfZnJvbnRlbmQpOworCXJldCA9IGRteC0+YWRkX2Zyb250ZW5kKGRteCwgJmRldi0+aHdfZnJvbnRlbmQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9kdmJfZG14ZGV2X3JlbGVhc2U7CiAKLQlkbTExMDVkdmItPm1lbV9mcm9udGVuZC5zb3VyY2UgPSBETVhfTUVNT1JZX0ZFOworCWRldi0+bWVtX2Zyb250ZW5kLnNvdXJjZSA9IERNWF9NRU1PUllfRkU7CiAKLQlyZXQgPSBkbXgtPmFkZF9mcm9udGVuZChkbXgsICZkbTExMDVkdmItPm1lbV9mcm9udGVuZCk7CisJcmV0ID0gZG14LT5hZGRfZnJvbnRlbmQoZG14LCAmZGV2LT5tZW1fZnJvbnRlbmQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9yZW1vdmVfaHdfZnJvbnRlbmQ7CiAKLQlyZXQgPSBkbXgtPmNvbm5lY3RfZnJvbnRlbmQoZG14LCAmZG0xMTA1ZHZiLT5od19mcm9udGVuZCk7CisJcmV0ID0gZG14LT5jb25uZWN0X2Zyb250ZW5kKGRteCwgJmRldi0+aHdfZnJvbnRlbmQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9yZW1vdmVfbWVtX2Zyb250ZW5kOwogCi0JcmV0ID0gZnJvbnRlbmRfaW5pdChkbTExMDVkdmIpOworCXJldCA9IGZyb250ZW5kX2luaXQoZGV2KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfZGlzY29ubmVjdF9mcm9udGVuZDsKIAotCWR2Yl9uZXRfaW5pdChkdmJfYWRhcHRlciwgJmRtMTEwNWR2Yi0+ZHZibmV0LCBkbXgpOwotCWRtMTEwNV9pcl9pbml0KGRtMTEwNWR2Yik7CisJZHZiX25ldF9pbml0KGR2Yl9hZGFwdGVyLCAmZGV2LT5kdmJuZXQsIGRteCk7CisJZG0xMTA1X2lyX2luaXQoZGV2KTsKIAotCUlOSVRfV09SSygmZG0xMTA1ZHZiLT53b3JrLCBkbTExMDVfZG14X2J1ZmZlcik7Ci0Jc3ByaW50ZihkbTExMDVkdmItPndxbiwgIiVzLyVkIiwgZHZiX2FkYXB0ZXItPm5hbWUsIGR2Yl9hZGFwdGVyLT5udW0pOwotCWRtMTEwNWR2Yi0+d3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShkbTExMDVkdmItPndxbik7Ci0JaWYgKCFkbTExMDVkdmItPndxKQorCUlOSVRfV09SSygmZGV2LT53b3JrLCBkbTExMDVfZG14X2J1ZmZlcik7CisJc3ByaW50ZihkZXYtPndxbiwgIiVzLyVkIiwgZHZiX2FkYXB0ZXItPm5hbWUsIGR2Yl9hZGFwdGVyLT5udW0pOworCWRldi0+d3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShkZXYtPndxbik7CisJaWYgKCFkZXYtPndxKQogCQlnb3RvIGVycl9kdmJfbmV0OwogCi0JcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBkbTExMDVkdmJfaXJxLCBJUlFGX1NIQVJFRCwKLQkJCQkJCURSSVZFUl9OQU1FLCBkbTExMDVkdmIpOworCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgZG0xMTA1X2lycSwgSVJRRl9TSEFSRUQsCisJCQkJCQlEUklWRVJfTkFNRSwgZGV2KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfd29ya3F1ZXVlOwogCiAJcmV0dXJuIDA7CiAKIGVycl93b3JrcXVldWU6Ci0JZGVzdHJveV93b3JrcXVldWUoZG0xMTA1ZHZiLT53cSk7CisJZGVzdHJveV93b3JrcXVldWUoZGV2LT53cSk7CiBlcnJfZHZiX25ldDoKLQlkdmJfbmV0X3JlbGVhc2UoJmRtMTEwNWR2Yi0+ZHZibmV0KTsKKwlkdmJfbmV0X3JlbGVhc2UoJmRldi0+ZHZibmV0KTsKIGVycl9kaXNjb25uZWN0X2Zyb250ZW5kOgogCWRteC0+ZGlzY29ubmVjdF9mcm9udGVuZChkbXgpOwogZXJyX3JlbW92ZV9tZW1fZnJvbnRlbmQ6Ci0JZG14LT5yZW1vdmVfZnJvbnRlbmQoZG14LCAmZG0xMTA1ZHZiLT5tZW1fZnJvbnRlbmQpOworCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRldi0+bWVtX2Zyb250ZW5kKTsKIGVycl9yZW1vdmVfaHdfZnJvbnRlbmQ6Ci0JZG14LT5yZW1vdmVfZnJvbnRlbmQoZG14LCAmZG0xMTA1ZHZiLT5od19mcm9udGVuZCk7CisJZG14LT5yZW1vdmVfZnJvbnRlbmQoZG14LCAmZGV2LT5od19mcm9udGVuZCk7CiBlcnJfZHZiX2RteGRldl9yZWxlYXNlOgotCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZG0xMTA1ZHZiLT5kbXhkZXYpOworCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZGV2LT5kbXhkZXYpOwogZXJyX2R2Yl9kbXhfcmVsZWFzZToKIAlkdmJfZG14X3JlbGVhc2UoZHZiZGVtdXgpOwogZXJyX2R2Yl91bnJlZ2lzdGVyX2FkYXB0ZXI6CiAJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcihkdmJfYWRhcHRlcik7CiBlcnJfaTJjX2RlbF9hZGFwdGVyOgotCWkyY19kZWxfYWRhcHRlcigmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7Ci1lcnJfZG0xMTA1ZHZiX2h3X2V4aXQ6Ci0JZG0xMTA1ZHZiX2h3X2V4aXQoZG0xMTA1ZHZiKTsKKwlpMmNfZGVsX2FkYXB0ZXIoJmRldi0+aTJjX2FkYXApOworZXJyX2RtMTEwNV9od19leGl0OgorCWRtMTEwNV9od19leGl0KGRldik7CiBlcnJfcGNpX2lvdW5tYXA6Ci0JcGNpX2lvdW5tYXAocGRldiwgZG0xMTA1ZHZiLT5pb19tZW0pOworCXBjaV9pb3VubWFwKHBkZXYsIGRldi0+aW9fbWVtKTsKIGVycl9wY2lfcmVsZWFzZV9yZWdpb25zOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiBlcnJfcGNpX2Rpc2FibGVfZGV2aWNlOgogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIGVycl9rZnJlZToKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0Ja2ZyZWUoZG0xMTA1ZHZiKTsKKwlrZnJlZShkZXYpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkbTExMDVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmR2Yl9hZGFwdGVyID0gJmRtMTEwNWR2Yi0+ZHZiX2FkYXB0ZXI7Ci0Jc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXggPSAmZG0xMTA1ZHZiLT5kZW11eDsKKwlzdHJ1Y3QgZG0xMTA1X2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBkdmJfYWRhcHRlciAqZHZiX2FkYXB0ZXIgPSAmZGV2LT5kdmJfYWRhcHRlcjsKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eCA9ICZkZXYtPmRlbXV4OwogCXN0cnVjdCBkbXhfZGVtdXggKmRteCA9ICZkdmJkZW11eC0+ZG14OwogCi0JZG0xMTA1X2lyX2V4aXQoZG0xMTA1ZHZiKTsKKwlkbTExMDVfaXJfZXhpdChkZXYpOwogCWRteC0+Y2xvc2UoZG14KTsKLQlkdmJfbmV0X3JlbGVhc2UoJmRtMTEwNWR2Yi0+ZHZibmV0KTsKLQlpZiAoZG0xMTA1ZHZiLT5mZSkKLQkJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoZG0xMTA1ZHZiLT5mZSk7CisJZHZiX25ldF9yZWxlYXNlKCZkZXYtPmR2Ym5ldCk7CisJaWYgKGRldi0+ZmUpCisJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGRldi0+ZmUpOwogCiAJZG14LT5kaXNjb25uZWN0X2Zyb250ZW5kKGRteCk7Ci0JZG14LT5yZW1vdmVfZnJvbnRlbmQoZG14LCAmZG0xMTA1ZHZiLT5tZW1fZnJvbnRlbmQpOwotCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+aHdfZnJvbnRlbmQpOwotCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZG0xMTA1ZHZiLT5kbXhkZXYpOworCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRldi0+bWVtX2Zyb250ZW5kKTsKKwlkbXgtPnJlbW92ZV9mcm9udGVuZChkbXgsICZkZXYtPmh3X2Zyb250ZW5kKTsKKwlkdmJfZG14ZGV2X3JlbGVhc2UoJmRldi0+ZG14ZGV2KTsKIAlkdmJfZG14X3JlbGVhc2UoZHZiZGVtdXgpOwogCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoZHZiX2FkYXB0ZXIpOwotCWlmICgmZG0xMTA1ZHZiLT5pMmNfYWRhcCkKLQkJaTJjX2RlbF9hZGFwdGVyKCZkbTExMDVkdmItPmkyY19hZGFwKTsKKwlpZiAoJmRldi0+aTJjX2FkYXApCisJCWkyY19kZWxfYWRhcHRlcigmZGV2LT5pMmNfYWRhcCk7CiAKLQlkbTExMDVkdmJfaHdfZXhpdChkbTExMDVkdmIpOworCWRtMTEwNV9od19leGl0KGRldik7CiAJc3luY2hyb25pemVfaXJxKHBkZXYtPmlycSk7Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBkbTExMDVkdmIpOwotCXBjaV9pb3VubWFwKHBkZXYsIGRtMTEwNWR2Yi0+aW9fbWVtKTsKKwlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7CisJcGNpX2lvdW5tYXAocGRldiwgZGV2LT5pb19tZW0pOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlkbTExMDVfZGV2Y291bnQtLTsKLQlrZnJlZShkbTExMDVkdmIpOworCWtmcmVlKGRldik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBkbTExMDVfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCAwNzQ2MTIyLi41NWVhMjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwpAQCAtMTE5OSw4ICsxMTk5LDYgQEAKIHsKIAlpbnQgciA9IDA7CiAKLQlkdHZfcHJvcGVydHlfZHVtcCh0dnApOwotCiAJLyogQWxsb3cgdGhlIGZyb250ZW5kIHRvIHZhbGlkYXRlIGluY29taW5nIHByb3BlcnRpZXMgKi8KIAlpZiAoZmUtPm9wcy5nZXRfcHJvcGVydHkpCiAJCXIgPSBmZS0+b3BzLmdldF9wcm9wZXJ0eShmZSwgdHZwKTsKQEAgLTEzMjMsNiArMTMyMSw4IEBACiAJCXIgPSAtMTsKIAl9CiAKKwlkdHZfcHJvcGVydHlfZHVtcCh0dnApOworCiAJcmV0dXJuIHI7CiB9CiAKQEAgLTE0ODgsNyArMTQ4OCw3IEBACiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKIAlpbnQgZXJyID0gLUVPUE5PVFNVUFA7CiAKLQlkcHJpbnRrICgiJXNcbiIsIF9fZnVuY19fKTsKKwlkcHJpbnRrKCIlcyAoJWQpXG4iLCBfX2Z1bmNfXywgX0lPQ19OUihjbWQpKTsKIAogCWlmIChmZXByaXYtPmV4aXQpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTUzNiw4ICsxNTM2LDcgQEAKIAkJaWYgKCh0dnBzLT5udW0gPT0gMCkgfHwgKHR2cHMtPm51bSA+IERUVl9JT0NUTF9NQVhfTVNHUykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQl0dnAgPSAoc3RydWN0IGR0dl9wcm9wZXJ0eSAqKSBrbWFsbG9jKHR2cHMtPm51bSAqCi0JCQlzaXplb2Yoc3RydWN0IGR0dl9wcm9wZXJ0eSksIEdGUF9LRVJORUwpOworCQl0dnAgPSBrbWFsbG9jKHR2cHMtPm51bSAqIHNpemVvZihzdHJ1Y3QgZHR2X3Byb3BlcnR5KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghdHZwKSB7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBvdXQ7CkBAIC0xNTY5LDggKzE1NjgsNyBAQAogCQlpZiAoKHR2cHMtPm51bSA9PSAwKSB8fCAodHZwcy0+bnVtID4gRFRWX0lPQ1RMX01BWF9NU0dTKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCXR2cCA9IChzdHJ1Y3QgZHR2X3Byb3BlcnR5ICopIGttYWxsb2ModHZwcy0+bnVtICoKLQkJCXNpemVvZihzdHJ1Y3QgZHR2X3Byb3BlcnR5KSwgR0ZQX0tFUk5FTCk7CisJCXR2cCA9IGttYWxsb2ModHZwcy0+bnVtICogc2l6ZW9mKHN0cnVjdCBkdHZfcHJvcGVydHkpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF0dnApIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYwppbmRleCA4Yjg1NThmLi5iMTE1MzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCkBAIC01MDQsNiArNTA0LDcgQEAKIAkJCQkgICAgICAgImJ5dGVzIGxlZnQgaW4gVFMuICBSZXN5bmNpbmcuXG4iLCB0c19yZW1haW4pOwogCQkJCXByaXYtPnVsZV9zbmR1X2xlbiA9IDA7CiAJCQkJcHJpdi0+bmVlZF9wdXNpID0gMTsKKwkJCQl0cyArPSBUU19TWjsKIAkJCQljb250aW51ZTsKIAkJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX3JpbmdidWZmZXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9yaW5nYnVmZmVyLmMKaW5kZXggNTg0YmJkMS4uYTU3MTJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX3JpbmdidWZmZXIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfcmluZ2J1ZmZlci5jCkBAIC04OSw2ICs4OSw3IEBACiAJcmJ1Zi0+cHJlYWQgPSByYnVmLT5wd3JpdGU7CiAJcmJ1Zi0+ZXJyb3IgPSAwOwogfQorRVhQT1JUX1NZTUJPTChkdmJfcmluZ2J1ZmZlcl9mbHVzaCk7CiAKIHZvaWQgZHZiX3JpbmdidWZmZXJfcmVzZXQoc3RydWN0IGR2Yl9yaW5nYnVmZmVyICpyYnVmKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCmluZGV4IDQ2NTI5NWIuLmU1ZjkxZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKQEAgLTMzNiwzICszMzYsMTEgQEAKIAlzZWxlY3QgTUVESUFfVFVORVJfTVhMNTAwNVMgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgRTNDIEVDMTY4IERWQi1UIFVTQjIuMCByZWNlaXZlci4KKworY29uZmlnIERWQl9VU0JfQVo2MDI3CisJdHJpc3RhdGUgIkF6dXJld2F2ZSBEVkItUy9TMiBVU0IyLjAgQVo2MDI3IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBEVkJfVVNCCisJc2VsZWN0IERWQl9TVEIwODk5IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9TVEI2MTAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBBWjYwMjcgZGV2aWNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQppbmRleCA3MmM5MmNiLi4xYTE5MjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUKQEAgLTg1LDYgKzg1LDkgQEAKIGR2Yi11c2ItZWMxNjgtb2JqcyA9IGVjMTY4Lm8KIG9iai0kKENPTkZJR19EVkJfVVNCX0VDMTY4KSArPSBkdmItdXNiLWVjMTY4Lm8KIAorZHZiLXVzYi1hejYwMjctb2JqcyA9IGF6NjAyNy5vCitvYmotJChDT05GSUdfRFZCX1VTQl9BWjYwMjcpICs9IGR2Yi11c2ItYXo2MDI3Lm8KKwogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvIC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzLwogIyBkdWUgdG8gdHVuZXIteGMzMDI4CiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jCmluZGV4IDhiNjBhNjAuLmQ3OTc1MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYwpAQCAtMjEsNiArMjEsOCBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorCiAjaW5jbHVkZSAiYWY5MDE1LmgiCiAjaW5jbHVkZSAiYWY5MDEzLmgiCiAjaW5jbHVkZSAibXQyMDYwLmgiCkBAIC01NTMsMjYgKzU1NSw0NSBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIGR1bXAgZWVwcm9tICovCi1zdGF0aWMgaW50IGFmOTAxNV9lZXByb21fZHVtcChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCisvKiBoYXNoIChhbmQgZHVtcCkgZWVwcm9tICovCitzdGF0aWMgaW50IGFmOTAxNV9lZXByb21faGFzaChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKLQl1OCByZWcsIHZhbDsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVlcHJvbV9zaXplID0gMjU2OworCXVuc2lnbmVkIGludCByZWc7CisJaW50IHJldDsKKwl1OCB2YWwsICplZXByb207CisJc3RydWN0IHJlcV90IHJlcSA9IHtSRUFEX0kyQywgQUY5MDE1X0kyQ19FRVBST00sIDAsIDAsIDEsIDEsICZ2YWx9OwogCi0JZm9yIChyZWcgPSAwOyA7IHJlZysrKSB7Ci0JCWlmIChyZWcgJSAxNiA9PSAwKSB7Ci0JCQlpZiAocmVnKQotCQkJCWRlYl9pbmZvKEtFUk5fQ09OVCAiXG4iKTsKLQkJCWRlYl9pbmZvKEtFUk5fREVCVUcgIiUwMng6IiwgcmVnKTsKLQkJfQotCQlpZiAoYWY5MDE1X3JlYWRfcmVnX2kyYyhkLCBBRjkwMTVfSTJDX0VFUFJPTSwgcmVnLCAmdmFsKSA9PSAwKQotCQkJZGViX2luZm8oS0VSTl9DT05UICIgJTAyeCIsIHZhbCk7Ci0JCWVsc2UKLQkJCWRlYl9pbmZvKEtFUk5fQ09OVCAiIC0tIik7Ci0JCWlmIChyZWcgPT0gMHhmZikKLQkJCWJyZWFrOworCWVlcHJvbSA9IGttYWxsb2MoZWVwcm9tX3NpemUsIEdGUF9LRVJORUwpOworCWlmIChlZXByb20gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKHJlZyA9IDA7IHJlZyA8IGVlcHJvbV9zaXplOyByZWcrKykgeworCQlyZXEuYWRkciA9IHJlZzsKKwkJcmV0ID0gYWY5MDE1X3J3X3VkZXYodWRldiwgJnJlcSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZyZWU7CisJCWVlcHJvbVtyZWddID0gdmFsOwogCX0KLQlkZWJfaW5mbyhLRVJOX0NPTlQgIlxuIik7Ci0JcmV0dXJuIDA7CisKKwlpZiAoZHZiX3VzYl9hZjkwMTVfZGVidWcgJiAweDAxKQorCQlwcmludF9oZXhfZHVtcF9ieXRlcygiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCBlZXByb20sCisJCQkJZWVwcm9tX3NpemUpOworCisJQlVHX09OKGVlcHJvbV9zaXplICUgNCk7CisKKwlhZjkwMTVfY29uZmlnLmVlcHJvbV9zdW0gPSAwOworCWZvciAocmVnID0gMDsgcmVnIDwgZWVwcm9tX3NpemUgLyBzaXplb2YodTMyKTsgcmVnKyspIHsKKwkJYWY5MDE1X2NvbmZpZy5lZXByb21fc3VtICo9IEdPTERFTl9SQVRJT19QUklNRV8zMjsKKwkJYWY5MDE1X2NvbmZpZy5lZXByb21fc3VtICs9IGxlMzJfdG9fY3B1KCgodTMyICopZWVwcm9tKVtyZWddKTsKKwl9CisKKwlkZWJfaW5mbygiJXM6IGVlcHJvbSBzdW09JS44eFxuIiwgX19mdW5jX18sIGFmOTAxNV9jb25maWcuZWVwcm9tX3N1bSk7CisKKwlyZXQgPSAwOworZnJlZToKKwlrZnJlZShlZXByb20pOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYWY5MDE1X2Rvd25sb2FkX2lyX3RhYmxlKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKQEAgLTcxMSwxMiArNzMyLDEzMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0cnVjdCBhZjkwMTVfc2V0dXAgeworCXVuc2lnbmVkIGludCBpZDsKKwlzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKnJjX2tleV9tYXA7CisJdW5zaWduZWQgaW50IHJjX2tleV9tYXBfc2l6ZTsKKwl1OCAqaXJfdGFibGU7CisJdW5zaWduZWQgaW50IGlyX3RhYmxlX3NpemU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFmOTAxNV9zZXR1cCAqYWY5MDE1X3NldHVwX21hdGNoKHVuc2lnbmVkIGludCBpZCwKKwkJY29uc3Qgc3RydWN0IGFmOTAxNV9zZXR1cCAqdGFibGUpCit7CisJZm9yICg7IHRhYmxlLT5yY19rZXlfbWFwOyB0YWJsZSsrKQorCQlpZiAodGFibGUtPmlkID09IGlkKQorCQkJcmV0dXJuIHRhYmxlOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFmOTAxNV9zZXR1cCBhZjkwMTVfc2V0dXBfbW9kcGFyYW1bXSA9IHsKKwl7IEFGOTAxNV9SRU1PVEVfQV9MSU5LX0RUVV9NLAorCQlhZjkwMTVfcmNfa2V5c19hX2xpbmssIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfYV9saW5rKSwKKwkJYWY5MDE1X2lyX3RhYmxlX2FfbGluaywgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfYV9saW5rKSB9LAorCXsgQUY5MDE1X1JFTU9URV9NU0lfRElHSVZPWF9NSU5JX0lJX1YzLAorCQlhZjkwMTVfcmNfa2V5c19tc2ksIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXNpKSwKKwkJYWY5MDE1X2lyX3RhYmxlX21zaSwgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXNpKSB9LAorCXsgQUY5MDE1X1JFTU9URV9NWUdJQ1RWX1U3MTgsCisJCWFmOTAxNV9yY19rZXlzX215Z2ljdHYsIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXlnaWN0diksCisJCWFmOTAxNV9pcl90YWJsZV9teWdpY3R2LCBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9teWdpY3R2KSB9LAorCXsgQUY5MDE1X1JFTU9URV9ESUdJVFRSQURFX0RWQl9ULAorCQlhZjkwMTVfcmNfa2V5c19kaWdpdHRyYWRlLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2RpZ2l0dHJhZGUpLAorCQlhZjkwMTVfaXJfdGFibGVfZGlnaXR0cmFkZSwgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfZGlnaXR0cmFkZSkgfSwKKwl7IEFGOTAxNV9SRU1PVEVfQVZFUk1FRElBX0tTLAorCQlhZjkwMTVfcmNfa2V5c19hdmVybWVkaWEsIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhKSwKKwkJYWY5MDE1X2lyX3RhYmxlX2F2ZXJtZWRpYV9rcywgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhX2tzKSB9LAorCXsgfQorfTsKKworLyogZG9uJ3QgYWRkIG5ldyBlbnRyaWVzIGhlcmUgYW55bW9yZSwgdXNlIGhhc2hlcyBpbnN0ZWFkICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGFmOTAxNV9zZXR1cCBhZjkwMTVfc2V0dXBfdXNiaWRzW10gPSB7CisJeyBVU0JfVklEX0xFQURURUssCisJCWFmOTAxNV9yY19rZXlzX2xlYWR0ZWssIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbGVhZHRlayksCisJCWFmOTAxNV9pcl90YWJsZV9sZWFkdGVrLCBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9sZWFkdGVrKSB9LAorCXsgVVNCX1ZJRF9WSVNJT05QTFVTLAorCQlhZjkwMTVfcmNfa2V5c190d2luaGFuLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX3R3aW5oYW4pLAorCQlhZjkwMTVfaXJfdGFibGVfdHdpbmhhbiwgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfdHdpbmhhbikgfSwKKwl7IFVTQl9WSURfS1dPUkxEXzIsIC8qIFRPRE86IHVzZSBjb3JyZWN0IHJjIGtleXMgKi8KKwkJYWY5MDE1X3JjX2tleXNfdHdpbmhhbiwgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c190d2luaGFuKSwKKwkJYWY5MDE1X2lyX3RhYmxlX2t3b3JsZCwgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfa3dvcmxkKSB9LAorCXsgVVNCX1ZJRF9BVkVSTUVESUEsCisJCWFmOTAxNV9yY19rZXlzX2F2ZXJtZWRpYSwgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19hdmVybWVkaWEpLAorCQlhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhLCBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWEpIH0sCisJeyBVU0JfVklEX01TSV8yLAorCQlhZjkwMTVfcmNfa2V5c19tc2lfZGlnaXZveF9paWksIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXNpX2RpZ2l2b3hfaWlpKSwKKwkJYWY5MDE1X2lyX3RhYmxlX21zaV9kaWdpdm94X2lpaSwgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXNpX2RpZ2l2b3hfaWlpKSB9LAorCXsgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZjkwMTVfc2V0dXAgYWY5MDE1X3NldHVwX2hhc2hlc1tdID0geworCXsgMHhiOGZlYjcwOCwKKwkJYWY5MDE1X3JjX2tleXNfbXNpLCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX21zaSksCisJCWFmOTAxNV9pcl90YWJsZV9tc2ksIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX21zaSkgfSwKKwl7IDB4YTM3MDNkMDAsCisJCWFmOTAxNV9yY19rZXlzX2FfbGluaywgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19hX2xpbmspLAorCQlhZjkwMTVfaXJfdGFibGVfYV9saW5rLCBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9hX2xpbmspIH0sCisJeyAweDliN2RjNjRlLAorCQlhZjkwMTVfcmNfa2V5c19teWdpY3R2LCBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX215Z2ljdHYpLAorCQlhZjkwMTVfaXJfdGFibGVfbXlnaWN0diwgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXlnaWN0dikgfSwKKwl7IH0KK307CisKK3N0YXRpYyB2b2lkIGFmOTAxNV9zZXRfcmVtb3RlX2NvbmZpZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgKnByb3BzKQoreworCWNvbnN0IHN0cnVjdCBhZjkwMTVfc2V0dXAgKnRhYmxlID0gTlVMTDsKKworCWlmIChkdmJfdXNiX2FmOTAxNV9yZW1vdGUpIHsKKwkJLyogbG9hZCByZW1vdGUgZGVmaW5lZCBhcyBtb2R1bGUgcGFyYW0gKi8KKwkJdGFibGUgPSBhZjkwMTVfc2V0dXBfbWF0Y2goZHZiX3VzYl9hZjkwMTVfcmVtb3RlLAorCQkJCWFmOTAxNV9zZXR1cF9tb2RwYXJhbSk7CisJfSBlbHNlIHsKKwkJdTE2IHZlbmRvciA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCisJCXRhYmxlID0gYWY5MDE1X3NldHVwX21hdGNoKGFmOTAxNV9jb25maWcuZWVwcm9tX3N1bSwKKwkJCQlhZjkwMTVfc2V0dXBfaGFzaGVzKTsKKworCQlpZiAoIXRhYmxlICYmIHZlbmRvciA9PSBVU0JfVklEX0FGQVRFQ0gpIHsKKwkJCS8qIENoZWNrIFVTQiBtYW51ZmFjdHVyZXIgYW5kIHByb2R1Y3Qgc3RyaW5ncyBhbmQgdHJ5CisJCQkgICB0byBkZXRlcm1pbmUgY29ycmVjdCByZW1vdGUgaW4gY2FzZSBvZiBjaGlwIHZlbmRvcgorCQkJICAgcmVmZXJlbmNlIElEcyBhcmUgdXNlZC4KKwkJCSAgIERPIE5PVCBBREQgQU5ZVEhJTkcgTkVXIEhFUkUuIFVzZSBoYXNoZXMgaW5zdGVhZC4KKwkJCSAqLworCQkJY2hhciBtYW51ZmFjdHVyZXJbMTBdOworCQkJbWVtc2V0KG1hbnVmYWN0dXJlciwgMCwgc2l6ZW9mKG1hbnVmYWN0dXJlcikpOworCQkJdXNiX3N0cmluZyh1ZGV2LCB1ZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIsCisJCQkJbWFudWZhY3R1cmVyLCBzaXplb2YobWFudWZhY3R1cmVyKSk7CisJCQlpZiAoIXN0cmNtcCgiTVNJIiwgbWFudWZhY3R1cmVyKSkgeworCQkJCS8qIGlNYW51ZmFjdHVyZXIgMSBNU0kKKwkJCQkgICBpUHJvZHVjdCAgICAgIDIgTVNJIEstVk9YICovCisJCQkJdGFibGUgPSBhZjkwMTVfc2V0dXBfbWF0Y2goCisJCQkJCUFGOTAxNV9SRU1PVEVfTVNJX0RJR0lWT1hfTUlOSV9JSV9WMywKKwkJCQkJYWY5MDE1X3NldHVwX21vZHBhcmFtKTsKKwkJCX0gZWxzZSBpZiAodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgPT0KKwkJCQljcHVfdG9fbGUxNihVU0JfUElEX1RSRUtTVE9SX0RWQlQpKSB7CisJCQkJdGFibGUgPSAmKGNvbnN0IHN0cnVjdCBhZjkwMTVfc2V0dXApeyAwLAorCQkJCQlhZjkwMTVfcmNfa2V5c190cmVrc3RvciwKKwkJCQkJQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c190cmVrc3RvciksCisJCQkJCWFmOTAxNV9pcl90YWJsZV90cmVrc3RvciwKKwkJCQkJQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfdHJla3N0b3IpCisJCQkJfTsKKwkJCX0KKwkJfSBlbHNlIGlmICghdGFibGUpCisJCQl0YWJsZSA9IGFmOTAxNV9zZXR1cF9tYXRjaCh2ZW5kb3IsIGFmOTAxNV9zZXR1cF91c2JpZHMpOworCX0KKworCWlmICh0YWJsZSkgeworCQlwcm9wcy0+cmNfa2V5X21hcCA9IHRhYmxlLT5yY19rZXlfbWFwOworCQlwcm9wcy0+cmNfa2V5X21hcF9zaXplID0gdGFibGUtPnJjX2tleV9tYXBfc2l6ZTsKKwkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9IHRhYmxlLT5pcl90YWJsZTsKKwkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0gdGFibGUtPmlyX3RhYmxlX3NpemU7CisJfQorfQorCiBzdGF0aWMgaW50IGFmOTAxNV9yZWFkX2NvbmZpZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKIAlpbnQgcmV0OwogCXU4IHZhbCwgaSwgb2Zmc2V0ID0gMDsKIAlzdHJ1Y3QgcmVxX3QgcmVxID0ge1JFQURfSTJDLCBBRjkwMTVfSTJDX0VFUFJPTSwgMCwgMCwgMSwgMSwgJnZhbH07Ci0JY2hhciBtYW51ZmFjdHVyZXJbMTBdOwogCiAJLyogSVIgcmVtb3RlIGNvbnRyb2xsZXIgKi8KIAlyZXEuYWRkciA9IEFGOTAxNV9FRVBST01fSVJfTU9ERTsKQEAgLTcyOCwxNTggKzg2OSwxOCBAQAogCX0KIAlpZiAocmV0KQogCQlnb3RvIGVycm9yOworCisJcmV0ID0gYWY5MDE1X2VlcHJvbV9oYXNoKHVkZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKIAlkZWJfaW5mbygiJXM6IElSIG1vZGU6JWRcbiIsIF9fZnVuY19fLCB2YWwpOwogCWZvciAoaSA9IDA7IGkgPCBhZjkwMTVfcHJvcGVydGllc19jb3VudDsgaSsrKSB7CiAJCWlmICh2YWwgPT0gQUY5MDE1X0lSX01PREVfRElTQUJMRUQpIHsKIAkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPSBOVUxMOwogCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplICA9IDA7Ci0JCX0gZWxzZSBpZiAoZHZiX3VzYl9hZjkwMTVfcmVtb3RlKSB7Ci0JCQkvKiBsb2FkIHJlbW90ZSBkZWZpbmVkIGFzIG1vZHVsZSBwYXJhbSAqLwotCQkJc3dpdGNoIChkdmJfdXNiX2FmOTAxNV9yZW1vdGUpIHsKLQkJCWNhc2UgQUY5MDE1X1JFTU9URV9BX0xJTktfRFRVX006Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJICBhZjkwMTVfcmNfa2V5c19hX2xpbms7Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfYV9saW5rKTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0gYWY5MDE1X2lyX3RhYmxlX2FfbGluazsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfYV9saW5rKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUY5MDE1X1JFTU9URV9NU0lfRElHSVZPWF9NSU5JX0lJX1YzOgotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCSAgYWY5MDE1X3JjX2tleXNfbXNpOwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX21zaSk7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9IGFmOTAxNV9pcl90YWJsZV9tc2k7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX21zaSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFGOTAxNV9SRU1PVEVfTVlHSUNUVl9VNzE4OgotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCSAgYWY5MDE1X3JjX2tleXNfbXlnaWN0djsKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19teWdpY3R2KTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KLQkJCQkgIGFmOTAxNV9pcl90YWJsZV9teWdpY3R2OwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9teWdpY3R2KTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUY5MDE1X1JFTU9URV9ESUdJVFRSQURFX0RWQl9UOgotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCSAgYWY5MDE1X3JjX2tleXNfZGlnaXR0cmFkZTsKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19kaWdpdHRyYWRlKTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KLQkJCQkgIGFmOTAxNV9pcl90YWJsZV9kaWdpdHRyYWRlOwotCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9kaWdpdHRyYWRlKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUY5MDE1X1JFTU9URV9BVkVSTUVESUFfS1M6Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJICBhZjkwMTVfcmNfa2V5c19hdmVybWVkaWE7Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhKTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KLQkJCQkgIGFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWFfa3M7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2F2ZXJtZWRpYV9rcyk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpKSB7Ci0JCQljYXNlIFVTQl9WSURfTEVBRFRFSzoKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkgIGFmOTAxNV9yY19rZXlzX2xlYWR0ZWs7Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbGVhZHRlayk7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJICBhZjkwMTVfaXJfdGFibGVfbGVhZHRlazsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbGVhZHRlayk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFVTQl9WSURfVklTSU9OUExVUzoKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkgIGFmOTAxNV9yY19rZXlzX3R3aW5oYW47Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfdHdpbmhhbik7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJICBhZjkwMTVfaXJfdGFibGVfdHdpbmhhbjsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfdHdpbmhhbik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFVTQl9WSURfS1dPUkxEXzI6Ci0JCQkJLyogVE9ETzogdXNlIGNvcnJlY3QgcmMga2V5cyAqLwotCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCSAgYWY5MDE1X3JjX2tleXNfdHdpbmhhbjsKLQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c190d2luaGFuKTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0gYWY5MDE1X2lyX3RhYmxlX2t3b3JsZDsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfa3dvcmxkKTsKLQkJCQlicmVhazsKLQkJCS8qIENoZWNrIFVTQiBtYW51ZmFjdHVyZXIgYW5kIHByb2R1Y3Qgc3RyaW5ncyBhbmQgdHJ5Ci0JCQkgICB0byBkZXRlcm1pbmUgY29ycmVjdCByZW1vdGUgaW4gY2FzZSBvZiBjaGlwIHZlbmRvcgotCQkJICAgcmVmZXJlbmNlIElEcyBhcmUgdXNlZC4gKi8KLQkJCWNhc2UgVVNCX1ZJRF9BRkFURUNIOgotCQkJCW1lbXNldChtYW51ZmFjdHVyZXIsIDAsIHNpemVvZihtYW51ZmFjdHVyZXIpKTsKLQkJCQl1c2Jfc3RyaW5nKHVkZXYsIHVkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlciwKLQkJCQkJbWFudWZhY3R1cmVyLCBzaXplb2YobWFudWZhY3R1cmVyKSk7Ci0JCQkJaWYgKCFzdHJjbXAoIkdlbmlhdGVjaCIsIG1hbnVmYWN0dXJlcikpIHsKLQkJCQkJLyogaU1hbnVmYWN0dXJlciAxIEdlbmlhdGVjaAotCQkJCQkgICBpUHJvZHVjdCAgICAgIDIgQUY5MDE1ICovCi0JCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCQkgIGFmOTAxNV9yY19rZXlzX215Z2ljdHY7Ci0JCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19teWdpY3R2KTsKLQkJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9Ci0JCQkJCSAgYWY5MDE1X2lyX3RhYmxlX215Z2ljdHY7Ci0JCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXlnaWN0dik7Ci0JCQkJfSBlbHNlIGlmICghc3RyY21wKCJNU0kiLCBtYW51ZmFjdHVyZXIpKSB7Ci0JCQkJCS8qIGlNYW51ZmFjdHVyZXIgMSBNU0kKLQkJCQkJICAgaVByb2R1Y3QgICAgICAyIE1TSSBLLVZPWCAqLwotCQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KLQkJCQkJICBhZjkwMTVfcmNfa2V5c19tc2k7Ci0JCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9Ci0JCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19tc2kpOwotCQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KLQkJCQkJICBhZjkwMTVfaXJfdGFibGVfbXNpOwotCQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQotCQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX21zaSk7Ci0JCQkJfSBlbHNlIGlmICh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PQotCQkJCQljcHVfdG9fbGUxNihVU0JfUElEX1RSRUtTVE9SX0RWQlQpKSB7Ci0JCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQotCQkJCQkgIGFmOTAxNV9yY19rZXlzX3RyZWtzdG9yOwotCQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQotCQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfdHJla3N0b3IpOwotCQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KLQkJCQkJICBhZjkwMTVfaXJfdGFibGVfdHJla3N0b3I7Ci0JCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9Ci0JCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfdHJla3N0b3IpOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWNhc2UgVVNCX1ZJRF9BVkVSTUVESUE6Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJICBhZjkwMTVfcmNfa2V5c19hdmVybWVkaWE7Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhKTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KLQkJCQkgIGFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWE7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2F2ZXJtZWRpYSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFVTQl9WSURfTVNJXzI6Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9Ci0JCQkJICBhZjkwMTVfcmNfa2V5c19tc2lfZGlnaXZveF9paWk7Ci0JCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXNpX2RpZ2l2b3hfaWlpKTsKLQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KLQkJCQkgIGFmOTAxNV9pcl90YWJsZV9tc2lfZGlnaXZveF9paWk7Ci0JCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KLQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX21zaV9kaWdpdm94X2lpaSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KKwkJfSBlbHNlCisJCQlhZjkwMTVfc2V0X3JlbW90ZV9jb25maWcodWRldiwgJmFmOTAxNV9wcm9wZXJ0aWVzW2ldKTsKIAl9CiAKIAkvKiBUUyBtb2RlIC0gb25lIG9yIHR3byByZWNlaXZlcnMgKi8KQEAgLTEwMDEsNiArMTAwMiw5IEBACiAJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1tpXS5ncGlvWzFdID0gQUY5MDEzX0dQSU9fTE87CiAJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1tpXS5yZl9zcGVjX2ludiA9IDE7CiAJCQlicmVhazsKKwkJY2FzZSBBRjkwMTNfVFVORVJfVERBMTgyMTg6CisJCQl3YXJuKCJ0dW5lciBOWFAgVERBMTgyMTggbm90IHN1cHBvcnRlZCB5ZXQiKTsKKwkJCXJldHVybiAtRU5PREVWOwogCQlkZWZhdWx0OgogCQkJd2FybigidHVuZXIgaWQ6JWQgbm90IHN1cHBvcnRlZCwgcGxlYXNlIHJlcG9ydCEiLCB2YWwpOwogCQkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMTI1LDExICsxMTI5LDYgQEAKIAogCQlkZWJfaW5mbygiJXM6IGluaXQgSTJDXG4iLCBfX2Z1bmNfXyk7CiAJCXJldCA9IGFmOTAxNV9pMmNfaW5pdChhZGFwLT5kZXYpOwotCi0JCS8qIGR1bXAgZWVwcm9tIChkZWJ1ZykgKi8KLQkJcmV0ID0gYWY5MDE1X2VlcHJvbV9kdW1wKGFkYXAtPmRldik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwogCX0gZWxzZSB7CiAJCS8qIHNlbGVjdCBJMkMgYWRhcHRlciAqLwogCQlpMmNfYWRhcCA9ICZzdGF0ZS0+aTJjX2FkYXA7CkBAIC0xMjk1LDYgKzEyOTQsOCBAQAogLyogMjUgKi97VVNCX0RFVklDRShVU0JfVklEX0tXT1JMRF8yLCAgVVNCX1BJRF9LV09STERfMzk5VV8yKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9LV09STERfMiwgIFVTQl9QSURfS1dPUkxEX1BDMTYwX1QpfSwKIAl7VVNCX0RFVklDRShVU0JfVklEX0tXT1JMRF8yLCAgVVNCX1BJRF9TVkVPTl9TVFYyMCl9LAorCXtVU0JfREVWSUNFKFVTQl9WSURfS1dPUkxEXzIsICBVU0JfUElEX1RJTllUV0lOXzIpfSwKKwl7VVNCX0RFVklDRShVU0JfVklEX0xFQURURUssICAgVVNCX1BJRF9XSU5GQVNUX0RUVjIwMDBEUyl9LAogCXswfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYWY5MDE1X3VzYl90YWJsZSk7CkBAIC0xMzgxLDcgKzEzODIsOCBAQAogCQkJfSwKIAkJCXsKIAkJCQkubmFtZSA9ICJEaWdpdGFsTm93IFRpbnlUd2luIERWQi1UIFJlY2VpdmVyIiwKLQkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbNV0sIE5VTEx9LAorCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVs1XSwKKwkJCQkJICAgICAmYWY5MDE1X3VzYl90YWJsZVsyOF0sIE5VTEx9LAogCQkJCS53YXJtX2lkcyA9IHtOVUxMfSwKIAkJCX0sCiAJCQl7CkBAIC0xNTY2LDcgKzE1NjgsNyBAQAogCiAJCS5pMmNfYWxnbyA9ICZhZjkwMTVfaTJjX2FsZ28sCiAKLQkJLm51bV9kZXZpY2VfZGVzY3MgPSA2LCAvKiBtYXggOSAqLworCQkubnVtX2RldmljZV9kZXNjcyA9IDcsIC8qIG1heCA5ICovCiAJCS5kZXZpY2VzID0gewogCQkJewogCQkJCS5uYW1lID0gIkF2ZXJNZWRpYSBBVmVyVFYgVm9sYXIgR1BTIDgwNSAoQTgwNSkiLApAQCAtMTYwMCw2ICsxNjAyLDExIEBACiAJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzI3XSwgTlVMTH0sCiAJCQkJLndhcm1faWRzID0ge05VTEx9LAogCQkJfSwKKwkJCXsKKwkJCQkubmFtZSA9ICJMZWFkdGVrIFdpbkZhc3QgRFRWMjAwMERTIiwKKwkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbMjldLCBOVUxMfSwKKwkJCQkud2FybV9pZHMgPSB7TlVMTH0sCisJCQl9LAogCQl9CiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaAppbmRleCA5MzFjODUxLi5lZjM2YjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmgKQEAgLTEwNyw2ICsxMDcsNyBAQAogCXUxNiBtdDIwNjBfaWYxWzJdOwogCXUxNiBmaXJtd2FyZV9zaXplOwogCXUxNiBmaXJtd2FyZV9jaGVja3N1bTsKKwl1MzIgZWVwcm9tX3N1bTsKIAl1OCAgKmlyX3RhYmxlOwogCXUxNiBpcl90YWJsZV9zaXplOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYXo2MDI3LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F6NjAyNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MjkwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F6NjAyNy5jCkBAIC0wLDAgKzEsMTE1MSBAQAorLyogRFZCIFVTQiBjb21wbGlhbnQgTGludXggZHJpdmVyIGZvciB0aGUgQVpVUkVXQVZFIERWQi1TL1MyIFVTQjIuMCAoQVo2MDI3KQorICogcmVjZWl2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFkYW1zLlh1IDxhZGFtcy54dUBhendhdmUuY29tLmNuPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKgl1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICoJU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqIHNlZSBEb2N1bWVudGF0aW9uL2R2Yi9SRUFETUUuZHZiLXVzYiBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICovCisjaW5jbHVkZSAiYXo2MDI3LmgiCisKKyNpbmNsdWRlICJzdGIwODk5X2Rydi5oIgorI2luY2x1ZGUgInN0YjA4OTlfcmVnLmgiCisjaW5jbHVkZSAic3RiMDg5OV9jZmcuaCIKKworI2luY2x1ZGUgInN0YjYxMDAuaCIKKyNpbmNsdWRlICJzdGI2MTAwX2NmZy5oIgorI2luY2x1ZGUgImR2Yl9jYV9lbjUwMjIxLmgiCisKK2ludCBkdmJfdXNiX2F6NjAyN19kZWJ1ZzsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZHZiX3VzYl9hejYwMjdfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnZ2luZyBsZXZlbCAoMT1pbmZvLHhmZXI9MixyYz00IChvci1hYmxlKSkuIiBEVkJfVVNCX0RFQlVHX1NUQVRVUyk7CisKK0RWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOworCitzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSB7CisJc3RydWN0IGR2Yl9jYV9lbjUwMjIxIGNhOworCXN0cnVjdCBtdXRleCBjYV9tdXRleDsKKwl1OCBwb3dlcl9zdGF0ZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RiMDg5OV9zMV9yZWcgYXo2MDI3X3N0YjA4OTlfczFfaW5pdF8xW10gPSB7CisKKwkvKiAweDAwMDAwMDBiLCBTWVNSRUcgKi8KKwl7IFNUQjA4OTlfREVWX0lECQksIDB4MzAgfSwKKwl7IFNUQjA4OTlfRElTQ05UUkwxCQksIDB4MzIgfSwKKwl7IFNUQjA4OTlfRElTQ05UUkwyICAgICAJLCAweDgwIH0sCisJeyBTVEIwODk5X0RJU1JYX1NUMCAgICAgCSwgMHgwNCB9LAorCXsgU1RCMDg5OV9ESVNSWF9TVDEgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRElTUEFSSVRZICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X0RJU0ZJRk8gICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9ESVNTVEFUVVMJCSwgMHgyMCB9LAorCXsgU1RCMDg5OV9ESVNGMjIgICAgICAgIAksIDB4OTkgfSwKKwl7IFNUQjA4OTlfRElTRjIyUlggICAgICAJLCAweGE4IH0sCisJLyogU1lTUkVHID8gKi8KKwl7IFNUQjA4OTlfQUNSUFJFU0MgICAgICAJLCAweDExIH0sCisJeyBTVEIwODk5X0FDUkRJVjEgICAgICAgCSwgMHgwYSB9LAorCXsgU1RCMDg5OV9BQ1JESVYyICAgICAgIAksIDB4MDUgfSwKKwl7IFNUQjA4OTlfREFDUjEgICAgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X0RBQ1IyICAgICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9PVVRDRkcgICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfTU9ERUNGRyAgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X0lSUVNUQVRVU18zCQksIDB4ZmUgfSwKKwl7IFNUQjA4OTlfSVJRU1RBVFVTXzIJCSwgMHgwMyB9LAorCXsgU1RCMDg5OV9JUlFTVEFUVVNfMQkJLCAweDdjIH0sCisJeyBTVEIwODk5X0lSUVNUQVRVU18wCQksIDB4ZjQgfSwKKwl7IFNUQjA4OTlfSVJRTVNLXzMgICAgICAJLCAweGYzIH0sCisJeyBTVEIwODk5X0lSUU1TS18yICAgICAgCSwgMHhmYyB9LAorCXsgU1RCMDg5OV9JUlFNU0tfMSAgICAgIAksIDB4ZmYgfSwKKwl7IFNUQjA4OTlfSVJRTVNLXzAJCSwgMHhmZiB9LAorCXsgU1RCMDg5OV9JUlFDRkcJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9JMkNDRkcgICAgICAgIAksIDB4ODggfSwKKwl7IFNUQjA4OTlfSTJDUlBUICAgICAgICAJLCAweDU4IH0sCisJeyBTVEIwODk5X0lPUFZBTFVFNQkJLCAweDAwIH0sCisJeyBTVEIwODk5X0lPUFZBTFVFNAkJLCAweDMzIH0sCisJeyBTVEIwODk5X0lPUFZBTFVFMwkJLCAweDZkIH0sCisJeyBTVEIwODk5X0lPUFZBTFVFMgkJLCAweDkwIH0sCisJeyBTVEIwODk5X0lPUFZBTFVFMQkJLCAweDYwIH0sCisJeyBTVEIwODk5X0lPUFZBTFVFMAkJLCAweDAwIH0sCisJeyBTVEIwODk5X0dQSU8wMENGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMDFDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzAyQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8wM0NGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMDRDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzA1Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8wNkNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMDdDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzA4Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8wOUNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMTBDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzExQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xMkNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMTNDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzE0Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xNUNGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMTZDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzE3Q0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8xOENGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9HUElPMTlDRkcgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfR1BJTzIwQ0ZHICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X1NEQVRDRkcgICAgICAgCSwgMHhiOCB9LAorCXsgU1RCMDg5OV9TQ0xUQ0ZHICAgICAgIAksIDB4YmEgfSwKKwl7IFNUQjA4OTlfQUdDUkZDRkcgICAgICAJLCAweDFjIH0sIC8qIDB4MTEgKi8KKwl7IFNUQjA4OTlfR1BJTzIyICAgICAgICAJLCAweDgyIH0sIC8qIEFHQ0JCMkNGRyAqLworCXsgU1RCMDg5OV9HUElPMjEgICAgICAgIAksIDB4OTEgfSwgLyogQUdDQkIxQ0ZHICovCisJeyBTVEIwODk5X0RJUkNMS0NGRyAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9DTEtPVVQyN0NGRyAgIAksIDB4N2UgfSwKKwl7IFNUQjA4OTlfU1REQllDRkcgICAgICAJLCAweDgyIH0sCisJeyBTVEIwODk5X0NTMENGRyAgICAgICAgCSwgMHg4MiB9LAorCXsgU1RCMDg5OV9DUzFDRkcgICAgICAgIAksIDB4ODIgfSwKKwl7IFNUQjA4OTlfRElTRVFDT0NGRyAgICAJLCAweDIwIH0sCisJeyBTVEIwODk5X0dQSU8zMkNGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zM0NGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zNENGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zNUNGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zNkNGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zN0NGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zOENGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X0dQSU8zOUNGRwkJLCAweDgyIH0sCisJeyBTVEIwODk5X05DT0FSU0UgICAgICAgCSwgMHgxNyB9LCAvKiAweDE1ID0gMjcgTWh6IENsb2NrLCBGLzMgPSAxOThNSHosIEYvNiA9IDk5TUh6ICovCisJeyBTVEIwODk5X1NZTlRDVFJMICAgICAgCSwgMHgwMiB9LCAvKiAweDAwID0gQ0xLIGZyb20gQ0xLSSwgMHgwMiA9IENMSyBmcm9tIFhUQUxJICovCisJeyBTVEIwODk5X0ZJTFRDVFJMICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9TWVNDVFJMICAgICAgIAksIDB4MDEgfSwKKwl7IFNUQjA4OTlfU1RPUENMSzEgICAgICAJLCAweDIwIH0sCisJeyBTVEIwODk5X1NUT1BDTEsyICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9JTlRCVUZTVEFUVVMJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9JTlRCVUZDVFJMICAgIAksIDB4MGEgfSwKKwl7IDB4ZmZmZgkJCSwgMHhmZiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdGIwODk5X3MxX3JlZyBhejYwMjdfc3RiMDg5OV9zMV9pbml0XzNbXSA9IHsKKwl7IFNUQjA4OTlfREVNT0QgICAgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X1JDT01QQyAgICAgICAgCSwgMHhjOSB9LAorCXsgU1RCMDg5OV9BR0MxQ04gICAgICAgIAksIDB4MDEgfSwKKwl7IFNUQjA4OTlfQUdDMVJFRiAgICAgICAJLCAweDEwIH0sCisJeyBTVEIwODk5X1JUQwkgICAgICAgIAksIDB4MjMgfSwKKwl7IFNUQjA4OTlfVE1HQ0ZHICAgICAgICAJLCAweDRlIH0sCisJeyBTVEIwODk5X0FHQzJSRUYgICAgICAgCSwgMHgzNCB9LAorCXsgU1RCMDg5OV9UTFNSICAgICAgICAgIAksIDB4ODQgfSwKKwl7IFNUQjA4OTlfQ0ZEICAgICAgICAgICAJLCAweGY3IH0sCisJeyBTVEIwODk5X0FDTEMJICAgICAgICAJLCAweDg3IH0sCisJeyBTVEIwODk5X0JDTEMgICAgICAgICAgCSwgMHg5NCB9LAorCXsgU1RCMDg5OV9FUU9OICAgICAgICAgIAksIDB4NDEgfSwKKwl7IFNUQjA4OTlfTERUICAgICAgICAgICAJLCAweGYxIH0sCisJeyBTVEIwODk5X0xEVDIgICAgICAgICAgCSwgMHhlMyB9LAorCXsgU1RCMDg5OV9FUVVBTFJFRiAgICAgIAksIDB4YjQgfSwKKwl7IFNUQjA4OTlfVE1HUkFNUCAgICAgICAJLCAweDEwIH0sCisJeyBTVEIwODk5X1RNR1RIRCAgICAgICAgCSwgMHgzMCB9LAorCXsgU1RCMDg5OV9JRENDT01QCQksIDB4ZmQgfSwKKwl7IFNUQjA4OTlfUURDQ09NUAkJLCAweGZmIH0sCisJeyBTVEIwODk5X1BPV0VSSQkJLCAweDBjIH0sCisJeyBTVEIwODk5X1BPV0VSUQkJLCAweDBmIH0sCisJeyBTVEIwODk5X1JDT01QCQkJLCAweDZjIH0sCisJeyBTVEIwODk5X0FHQ0lRSU4JCSwgMHg4MCB9LAorCXsgU1RCMDg5OV9BR0MySTEJCSwgMHgwNiB9LAorCXsgU1RCMDg5OV9BR0MySTIJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UTElSCQkJLCAweDMwIH0sCisJeyBTVEIwODk5X1JURgkJCSwgMHg3ZiB9LAorCXsgU1RCMDg5OV9EU1RBVFVTCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfTERJCQkJLCAweGJjIH0sCisJeyBTVEIwODk5X0NGUk0JCQksIDB4ZWEgfSwKKwl7IFNUQjA4OTlfQ0ZSTAkJCSwgMHgzMSB9LAorCXsgU1RCMDg5OV9OSVJNCQkJLCAweDJiIH0sCisJeyBTVEIwODk5X05JUkwJCQksIDB4ODAgfSwKKwl7IFNUQjA4OTlfSVNZTUIJCQksIDB4MWQgfSwKKwl7IFNUQjA4OTlfUVNZTUIJCQksIDB4YTYgfSwKKwl7IFNUQjA4OTlfU0ZSSCAgICAgICAgICAJLCAweDJmIH0sCisJeyBTVEIwODk5X1NGUk0gICAgICAgICAgCSwgMHg2OCB9LAorCXsgU1RCMDg5OV9TRlJMICAgICAgICAgIAksIDB4NDAgfSwKKwl7IFNUQjA4OTlfU0ZSVVBIICAgICAgICAJLCAweDJmIH0sCisJeyBTVEIwODk5X1NGUlVQTSAgICAgICAgCSwgMHg2OCB9LAorCXsgU1RCMDg5OV9TRlJVUEwgICAgICAgIAksIDB4NDAgfSwKKwl7IFNUQjA4OTlfRVFVQUkxCQksIDB4MDIgfSwKKwl7IFNUQjA4OTlfRVFVQVExCQksIDB4ZmYgfSwKKwl7IFNUQjA4OTlfRVFVQUkyCQksIDB4MDQgfSwKKwl7IFNUQjA4OTlfRVFVQVEyCQksIDB4MDUgfSwKKwl7IFNUQjA4OTlfRVFVQUkzCQksIDB4MDIgfSwKKwl7IFNUQjA4OTlfRVFVQVEzCQksIDB4ZmQgfSwKKwl7IFNUQjA4OTlfRVFVQUk0CQksIDB4MDMgfSwKKwl7IFNUQjA4OTlfRVFVQVE0CQksIDB4MDcgfSwKKwl7IFNUQjA4OTlfRVFVQUk1CQksIDB4MDggfSwKKwl7IFNUQjA4OTlfRVFVQVE1CQksIDB4ZjUgfSwKKwl7IFNUQjA4OTlfRFNUQVRVUzIJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9WU1RBVFVTICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVkVSUk9SCQksIDB4ODYgfSwKKwl7IFNUQjA4OTlfSVFTV0FQCQksIDB4MmEgfSwKKwl7IFNUQjA4OTlfRUNOVDFNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRUNOVDFMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRUNOVDJNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRUNOVDJMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfRUNOVDNNCQksIDB4MGEgfSwKKwl7IFNUQjA4OTlfRUNOVDNMCQksIDB4YWQgfSwKKwl7IFNUQjA4OTlfRkVDQVVUTzEgICAgICAJLCAweDA2IH0sCisJeyBTVEIwODk5X0ZFQ00JICAgICAgICAJLCAweDAxIH0sCisJeyBTVEIwODk5X1ZUSDEyICAgICAgICAgCSwgMHhiMCB9LAorCXsgU1RCMDg5OV9WVEgyMyAgICAgICAgIAksIDB4N2EgfSwKKwl7IFNUQjA4OTlfVlRIMzQJICAgICAgICAJLCAweDU4IH0sCisJeyBTVEIwODk5X1ZUSDU2ICAgICAgICAgCSwgMHgzOCB9LAorCXsgU1RCMDg5OV9WVEg2NyAgICAgICAgIAksIDB4MzQgfSwKKwl7IFNUQjA4OTlfVlRINzggICAgICAgICAJLCAweDI0IH0sCisJeyBTVEIwODk5X1BSVklUICAgICAgICAgCSwgMHhmZiB9LAorCXsgU1RCMDg5OV9WSVRTWU5DICAgICAgIAksIDB4MTkgfSwKKwl7IFNUQjA4OTlfUlNVTEMgICAgICAgICAJLCAweGIxIH0sIC8qIERWQiA9IDB4YjEsIERTUyA9IDB4YTEgKi8KKwl7IFNUQjA4OTlfVFNVTEMgICAgICAgICAJLCAweDQyIH0sCisJeyBTVEIwODk5X1JTTExDICAgICAgICAgCSwgMHg0MSB9LAorCXsgU1RCMDg5OV9UU0xQTAkgICAgICAgIAksIDB4MTIgfSwKKwl7IFNUQjA4OTlfVFNDRkdIICAgICAgICAJLCAweDBjIH0sCisJeyBTVEIwODk5X1RTQ0ZHTSAgICAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU0NGR0wgICAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNPVVQJCQksIDB4NjkgfSwgLyogMHgwZCBmb3IgQ0FNICovCisJeyBTVEIwODk5X1JTU1lOQ0RFTCAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9UU0lOSERFTEggICAgIAksIDB4MDIgfSwKKwl7IFNUQjA4OTlfVFNJTkhERUxNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNJTkhERUxMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNMTFNUS00JCSwgMHgxYiB9LAorCXsgU1RCMDg5OV9UU0xMU1RLTAkJLCAweGIzIH0sCisJeyBTVEIwODk5X1RTVUxTVEtNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfVFNVTFNUS0wJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9QQ0tMRU5VTAkJLCAweGJjIH0sCisJeyBTVEIwODk5X1BDS0xFTkxMCQksIDB4Y2MgfSwKKwl7IFNUQjA4OTlfUlNQQ0tMRU4JCSwgMHhiZCB9LAorCXsgU1RCMDg5OV9UU1NUQVRVUwkJLCAweDkwIH0sCisJeyBTVEIwODk5X0VSUkNUUkwxICAgICAgCSwgMHhiNiB9LAorCXsgU1RCMDg5OV9FUlJDVFJMMiAgICAgIAksIDB4OTUgfSwKKwl7IFNUQjA4OTlfRVJSQ1RSTDMgICAgICAJLCAweDhkIH0sCisJeyBTVEIwODk5X0RNT05NU0sxCQksIDB4MjcgfSwKKwl7IFNUQjA4OTlfRE1PTk1TSzAJCSwgMHgwMyB9LAorCXsgU1RCMDg5OV9ERU1BUFZJVCAgICAgIAksIDB4NWMgfSwKKwl7IFNUQjA4OTlfUExQQVJNCQksIDB4MTkgfSwKKwl7IFNUQjA4OTlfUERFTENUUkwgICAgICAJLCAweDQ4IH0sCisJeyBTVEIwODk5X1BERUxDVFJMMiAgICAgCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9CQkhDVFJMMSAgICAgIAksIDB4MDAgfSwKKwl7IFNUQjA4OTlfQkJIQ1RSTDIgICAgICAJLCAweDAwIH0sCisJeyBTVEIwODk5X0hZU1RUSFJFU0ggICAgCSwgMHg3NyB9LAorCXsgU1RCMDg5OV9NQVRDU1RNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfTUFUQ1NUTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X1VQTENTVE0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9VUExDU1RMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfREZMQ1NUTQkJLCAweDAwIH0sCisJeyBTVEIwODk5X0RGTENTVEwJCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9TWU5DQ1NUCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfU1lOQ0RDU1RNCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfU1lOQ0RDU1RMCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSVNJX0VOVFJZCQksIDB4MDAgfSwKKwl7IFNUQjA4OTlfSVNJX0JJVF9FTgkJLCAweDAwIH0sCisJeyBTVEIwODk5X01BVFNUUk0JCSwgMHhmMCB9LAorCXsgU1RCMDg5OV9NQVRTVFJMCQksIDB4MDIgfSwKKwl7IFNUQjA4OTlfVVBMU1RSTQkJLCAweDQ1IH0sCisJeyBTVEIwODk5X1VQTFNUUkwJCSwgMHg2MCB9LAorCXsgU1RCMDg5OV9ERkxTVFJNCQksIDB4ZTMgfSwKKwl7IFNUQjA4OTlfREZMU1RSTAkJLCAweDAwIH0sCisJeyBTVEIwODk5X1NZTkNTVFIJCSwgMHg0NyB9LAorCXsgU1RCMDg5OV9TWU5DRFNUUk0JCSwgMHgwNSB9LAorCXsgU1RCMDg5OV9TWU5DRFNUUkwJCSwgMHgxOCB9LAorCXsgU1RCMDg5OV9DRkdQREVMU1RBVFVTMQksIDB4MTkgfSwKKwl7IFNUQjA4OTlfQ0ZHUERFTFNUQVRVUzIJLCAweDJiIH0sCisJeyBTVEIwODk5X0JCRkVSUk9STQkJLCAweDAwIH0sCisJeyBTVEIwODk5X0JCRkVSUk9STAkJLCAweDAxIH0sCisJeyBTVEIwODk5X1VQS1RFUlJPUk0JCSwgMHgwMCB9LAorCXsgU1RCMDg5OV9VUEtURVJST1JMCQksIDB4MDAgfSwKKwl7IDB4ZmZmZgkJCSwgMHhmZiB9LAorfTsKKworCisKK3N0cnVjdCBzdGIwODk5X2NvbmZpZyBhejYwMjdfc3RiMDg5OV9jb25maWcgPSB7CisJLmluaXRfZGV2CQk9IGF6NjAyN19zdGIwODk5X3MxX2luaXRfMSwKKwkuaW5pdF9zMl9kZW1vZAkJPSBzdGIwODk5X3MyX2luaXRfMiwKKwkuaW5pdF9zMV9kZW1vZAkJPSBhejYwMjdfc3RiMDg5OV9zMV9pbml0XzMsCisJLmluaXRfczJfZmVjCQk9IHN0YjA4OTlfczJfaW5pdF80LAorCS5pbml0X3RzdAkJPSBzdGIwODk5X3MxX2luaXRfNSwKKworCS5kZW1vZF9hZGRyZXNzIAkJPSAweGQwLCAvKiAweDY4LCAweGQwID4+IDEgKi8KKworCS54dGFsX2ZyZXEJCT0gMjcwMDAwMDAsCisJLmludmVyc2lvbgkJPSBJUV9TV0FQX09OLCAvKiAxICovCisKKwkubG9fY2xrCQkJPSA3NjUwMDAwMCwKKwkuaGlfY2xrCQkJPSA5OTAwMDAwMCwKKworCS5lc25vX2F2ZQkJPSBTVEIwODk5X0RWQlMyX0VTTk9fQVZFLAorCS5lc25vX3F1YW50CQk9IFNUQjA4OTlfRFZCUzJfRVNOT19RVUFOVCwKKwkuYXZmcmFtZXNfY29hcnNlCT0gU1RCMDg5OV9EVkJTMl9BVkZSQU1FU19DT0FSU0UsCisJLmF2ZnJhbWVzX2ZpbmUJCT0gU1RCMDg5OV9EVkJTMl9BVkZSQU1FU19GSU5FLAorCS5taXNzX3RocmVzaG9sZAkJPSBTVEIwODk5X0RWQlMyX01JU1NfVEhSRVNIT0xELAorCS51d3BfdGhyZXNob2xkX2FjcQk9IFNUQjA4OTlfRFZCUzJfVVdQX1RIUkVTSE9MRF9BQ1EsCisJLnV3cF90aHJlc2hvbGRfdHJhY2sJPSBTVEIwODk5X0RWQlMyX1VXUF9USFJFU0hPTERfVFJBQ0ssCisJLnV3cF90aHJlc2hvbGRfc29mCT0gU1RCMDg5OV9EVkJTMl9VV1BfVEhSRVNIT0xEX1NPRiwKKwkuc29mX3NlYXJjaF90aW1lb3V0CT0gU1RCMDg5OV9EVkJTMl9TT0ZfU0VBUkNIX1RJTUVPVVQsCisKKwkuYnRyX25jb19iaXRzCQk9IFNUQjA4OTlfRFZCUzJfQlRSX05DT19CSVRTLAorCS5idHJfZ2Fpbl9zaGlmdF9vZmZzZXQJPSBTVEIwODk5X0RWQlMyX0JUUl9HQUlOX1NISUZUX09GRlNFVCwKKwkuY3JsX25jb19iaXRzCQk9IFNUQjA4OTlfRFZCUzJfQ1JMX05DT19CSVRTLAorCS5sZHBjX21heF9pdGVyCQk9IFNUQjA4OTlfRFZCUzJfTERQQ19NQVhfSVRFUiwKKworCS50dW5lcl9nZXRfZnJlcXVlbmN5CT0gc3RiNjEwMF9nZXRfZnJlcXVlbmN5LAorCS50dW5lcl9zZXRfZnJlcXVlbmN5CT0gc3RiNjEwMF9zZXRfZnJlcXVlbmN5LAorCS50dW5lcl9zZXRfYmFuZHdpZHRoCT0gc3RiNjEwMF9zZXRfYmFuZHdpZHRoLAorCS50dW5lcl9nZXRfYmFuZHdpZHRoCT0gc3RiNjEwMF9nZXRfYmFuZHdpZHRoLAorCS50dW5lcl9zZXRfcmZzaWdnYWluCT0gTlVMTCwKK307CisKK3N0cnVjdCBzdGI2MTAwX2NvbmZpZyBhejYwMjdfc3RiNjEwMF9jb25maWcgPSB7CisJLnR1bmVyX2FkZHJlc3MJPSAweGMwLAorCS5yZWZjbG9jawk9IDI3MDAwMDAwLAorfTsKKworCisvKiBjaGVjayBmb3IgbXV0ZXggRklYTUUgKi8KK2ludCBhejYwMjdfdXNiX2luX29wKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggcmVxLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdTggKmIsIGludCBibGVuKQoreworCWludCByZXQgPSAtMTsKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT51c2JfbXV0ZXgpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkLT51ZGV2LAorCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKGQtPnVkZXYsIDApLAorCQkJICAgICAgcmVxLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiwKKwkJCSAgICAgIHZhbHVlLAorCQkJICAgICAgaW5kZXgsCisJCQkgICAgICBiLAorCQkJICAgICAgYmxlbiwKKwkJCSAgICAgIDIwMDApOworCisJaWYgKHJldCA8IDApIHsKKwkJd2FybigidXNiIGluIG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCQlyZXQgPSAtRUlPOworCX0gZWxzZQorCQlyZXQgPSAwOworCisJZGViX3hmZXIoImluOiByZXEuICUwMngsIHZhbDogJTA0eCwgaW5kOiAlMDR4LCBidWZmZXI6ICIsIHJlcSwgdmFsdWUsIGluZGV4KTsKKwlkZWJ1Z19kdW1wKGIsIGJsZW4sIGRlYl94ZmVyKTsKKworCW11dGV4X3VubG9jaygmZC0+dXNiX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF6NjAyN191c2Jfb3V0X29wKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwKKwkJCSAgICAgdTggcmVxLAorCQkJICAgICB1MTYgdmFsdWUsCisJCQkgICAgIHUxNiBpbmRleCwKKwkJCSAgICAgdTggKmIsCisJCQkgICAgIGludCBibGVuKQoreworCWludCByZXQ7CisKKwlkZWJfeGZlcigib3V0OiByZXEuICUwMngsIHZhbDogJTA0eCwgaW5kOiAlMDR4LCBidWZmZXI6ICIsIHJlcSwgdmFsdWUsIGluZGV4KTsKKwlkZWJ1Z19kdW1wKGIsIGJsZW4sIGRlYl94ZmVyKTsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPnVzYl9tdXRleCkpCisJCXJldHVybiAtRUFHQUlOOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGQtPnVkZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZC0+dWRldiwgMCksCisJCQkgICAgICByZXEsCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCwKKwkJCSAgICAgIHZhbHVlLAorCQkJICAgICAgaW5kZXgsCisJCQkgICAgICBiLAorCQkJICAgICAgYmxlbiwKKwkJCSAgICAgIDIwMDApOworCisJaWYgKHJldCAhPSBibGVuKSB7CisJCXdhcm4oInVzYiBvdXQgb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisJCW11dGV4X3VubG9jaygmZC0+dXNiX211dGV4KTsKKwkJcmV0dXJuIC1FSU87CisJfSBlbHNleworCQltdXRleF91bmxvY2soJmQtPnVzYl9tdXRleCk7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBhejYwMjdfc3RyZWFtaW5nX2N0cmwoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IG9ub2ZmKQoreworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisKKwlkZWJfaW5mbygiJXMgJWQiLCBfX2Z1bmNfXywgb25vZmYpOworCisJcmVxID0gMHhCQzsKKwl2YWx1ZSA9IG9ub2ZmOworCWluZGV4ID0gMDsKKwlibGVuID0gMDsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGFkYXAtPmRldiwgcmVxLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkKKwkJd2FybigidXNiIG91dCBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIGtleXMgZm9yIHRoZSBlbmNsb3NlZCByZW1vdGUgY29udHJvbCAqLworc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBhejYwMjdfcmNfa2V5c1tdID0geworCXsgMHgwMSwgS0VZXzEgfSwKKwl7IDB4MDIsIEtFWV8yIH0sCit9OworCisvKiByZW1vdGUgY29udHJvbCBzdHVmZiAoZG9lcyBub3Qgd29yayB3aXRoIG15IGJveCkgKi8KK3N0YXRpYyBpbnQgYXo2MDI3X3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwgaW50ICpzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKK2ludCBhejYwMjdfcG93ZXJfY3RybChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIGludCBvbm9mZikKK3sKKwl1OCB2ID0gb25vZmY7CisJcmV0dXJuIGF6NjAyN191c2Jfb3V0X29wKGQsMHhCQyx2LDMsTlVMTCwxKTsKK30KKyovCisKK3N0YXRpYyBpbnQgYXo2MDI3X2NpX3JlYWRfYXR0cmlidXRlX21lbShzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmNhLAorCQkJCQlpbnQgc2xvdCwKKwkJCQkJaW50IGFkZHJlc3MpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqKWNhLT5kYXRhOworCXN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqKWQtPnByaXY7CisKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWU7CisJdTE2IGluZGV4OworCWludCBibGVuOworCXU4IGJbMTJdOworCisJaWYgKHNsb3QgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCisJcmVxID0gMHhDMTsKKwl2YWx1ZSA9IGFkZHJlc3M7CisJaW5kZXggPSAwOworCWJsZW4gPSAxOworCisJcmV0ID0gYXo2MDI3X3VzYl9pbl9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgYiwgYmxlbik7CisJaWYgKHJldCA8IDApIHsKKwkJd2FybigidXNiIGluIG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCQlyZXQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCXJldCA9IGJbMF07CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXo2MDI3X2NpX3dyaXRlX2F0dHJpYnV0ZV9tZW0oc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjYSwKKwkJCQkJIGludCBzbG90LAorCQkJCQkgaW50IGFkZHJlc3MsCisJCQkJCSB1OCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICopY2EtPmRhdGE7CisJc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICopZC0+cHJpdjsKKworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTE7CisJdTE2IGluZGV4OworCWludCBibGVuOworCisJZGViX2luZm8oIiVzICVkIiwgX19mdW5jX18sIHNsb3QpOworCWlmIChzbG90ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXEgPSAweEMyOworCXZhbHVlMSA9IGFkZHJlc3M7CisJaW5kZXggPSB2YWx1ZTsKKwlibGVuID0gMDsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGQsIHJlcSwgdmFsdWUxLCBpbmRleCwgTlVMTCwgYmxlbik7CisJaWYgKHJldCAhPSAwKQorCQl3YXJuKCJ1c2Igb3V0IG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXo2MDI3X2NpX3JlYWRfY2FtX2NvbnRyb2woc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjYSwKKwkJCQkgICAgICBpbnQgc2xvdCwKKwkJCQkgICAgICB1OCBhZGRyZXNzKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiljYS0+ZGF0YTsKKwlzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKilkLT5wcml2OworCisJaW50IHJldDsKKwl1OCByZXE7CisJdTE2IHZhbHVlOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKwl1OCBiWzEyXTsKKworCWlmIChzbG90ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmc3RhdGUtPmNhX211dGV4KTsKKworCXJlcSA9IDB4QzM7CisJdmFsdWUgPSBhZGRyZXNzOworCWluZGV4ID0gMDsKKwlibGVuID0gMjsKKworCXJldCA9IGF6NjAyN191c2JfaW5fb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIGIsIGJsZW4pOworCWlmIChyZXQgPCAwKSB7CisJCXdhcm4oInVzYiBpbiBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlpZiAoYlswXSA9PSAwKQorCQkJd2FybigiUmVhZCBDSSBJTyBlcnJvciIpOworCisJCXJldCA9IGJbMV07CisJCWRlYl9pbmZvKCJyZWFkIGNhbSBkYXRhID0gJXggZnJvbSAweCV4IiwgYlsxXSwgdmFsdWUpOworCX0KKworCW11dGV4X3VubG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF6NjAyN19jaV93cml0ZV9jYW1fY29udHJvbChzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmNhLAorCQkJCSAgICAgICBpbnQgc2xvdCwKKwkJCQkgICAgICAgdTggYWRkcmVzcywKKwkJCQkgICAgICAgdTggdmFsdWUpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqKWNhLT5kYXRhOworCXN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqKWQtPnByaXY7CisKKwlpbnQgcmV0OworCXU4IHJlcTsKKwl1MTYgdmFsdWUxOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKworCWlmIChzbG90ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXEgPSAweEM0OworCXZhbHVlMSA9IGFkZHJlc3M7CisJaW5kZXggPSB2YWx1ZTsKKwlibGVuID0gMDsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGQsIHJlcSwgdmFsdWUxLCBpbmRleCwgTlVMTCwgYmxlbik7CisJaWYgKHJldCAhPSAwKSB7CisJCXdhcm4oInVzYiBvdXQgb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisJCWdvdG8gZmFpbGVkOworCX0KKworZmFpbGVkOgorCW11dGV4X3VubG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IENJX0NhbVJlYWR5KHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsIGludCBzbG90KQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiljYS0+ZGF0YTsKKworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisJdTggYlsxMl07CisKKwlyZXEgPSAweEM4OworCXZhbHVlID0gMDsKKwlpbmRleCA9IDA7CisJYmxlbiA9IDE7CisKKwlyZXQgPSBhejYwMjdfdXNiX2luX29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBiLCBibGVuKTsKKwlpZiAocmV0IDwgMCkgeworCQl3YXJuKCJ1c2IgaW4gb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisJCXJldCA9IC1FSU87CisJfSBlbHNleworCQlyZXQgPSBiWzBdOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF6NjAyN19jaV9zbG90X3Jlc2V0KHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsIGludCBzbG90KQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiljYS0+ZGF0YTsKKwlzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKilkLT5wcml2OworCisJaW50IHJldCwgaTsKKwl1OCByZXE7CisJdTE2IHZhbHVlOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKworCW11dGV4X2xvY2soJnN0YXRlLT5jYV9tdXRleCk7CisKKwlyZXEgPSAweEM2OworCXZhbHVlID0gMTsKKwlpbmRleCA9IDA7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgTlVMTCwgYmxlbik7CisJaWYgKHJldCAhPSAwKSB7CisJCXdhcm4oInVzYiBvdXQgb3BlcmF0aW9uIGZhaWxlZC4gKCVkKSIsIHJldCk7CisJCWdvdG8gZmFpbGVkOworCX0KKworCW1zbGVlcCg1MDApOworCXJlcSA9IDB4QzY7CisJdmFsdWUgPSAwOworCWluZGV4ID0gMDsKKwlibGVuID0gMDsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBOVUxMLCBibGVuKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJd2FybigidXNiIG91dCBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDE1OyBpKyspIHsKKwkJbXNsZWVwKDEwMCk7CisKKwkJaWYgKENJX0NhbVJlYWR5KGNhLCBzbG90KSkgeworCQkJZGViX2luZm8oIkNBTSBSZWFkeSIpOworCQkJYnJlYWs7CisJCX0KKwl9CisJbXNsZWVwKDUwMDApOworCitmYWlsZWQ6CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXo2MDI3X2NpX3Nsb3Rfc2h1dGRvd24oc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjYSwgaW50IHNsb3QpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXo2MDI3X2NpX3Nsb3RfdHNfZW5hYmxlKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqY2EsIGludCBzbG90KQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiljYS0+ZGF0YTsKKwlzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKilkLT5wcml2OworCisJaW50IHJldDsKKwl1OCByZXE7CisJdTE2IHZhbHVlOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKworCWRlYl9pbmZvKCIlcyIsIF9fZnVuY19fKTsKKwltdXRleF9sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCXJlcSA9IDB4Qzc7CisJdmFsdWUgPSAxOworCWluZGV4ID0gMDsKKwlibGVuID0gMDsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBOVUxMLCBibGVuKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJd2FybigidXNiIG91dCBvcGVyYXRpb24gZmFpbGVkLiAoJWQpIiwgcmV0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCitmYWlsZWQ6CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXo2MDI3X2NpX3BvbGxfc2xvdF9zdGF0dXMoc3RydWN0IGR2Yl9jYV9lbjUwMjIxICpjYSwgaW50IHNsb3QsIGludCBvcGVuKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiljYS0+ZGF0YTsKKwlzdHJ1Y3QgYXo2MDI3X2RldmljZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKilkLT5wcml2OworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisJdTggYlsxMl07CisKKwltdXRleF9sb2NrKCZzdGF0ZS0+Y2FfbXV0ZXgpOworCisJcmVxID0gMHhDNTsKKwl2YWx1ZSA9IDA7CisJaW5kZXggPSAwOworCWJsZW4gPSAxOworCisJcmV0ID0gYXo2MDI3X3VzYl9pbl9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgYiwgYmxlbik7CisJaWYgKHJldCA8IDApIHsKKwkJd2FybigidXNiIGluIG9wZXJhdGlvbiBmYWlsZWQuICglZCkiLCByZXQpOworCQlyZXQgPSAtRUlPOworCX0gZWxzZQorCQlyZXQgPSAwOworCisJaWYgKGJbMF0gPT0gMCkgeworCQlyZXQgPSAwOworCisJfSBlbHNlIGlmIChiWzBdID09IDEpIHsKKwkJcmV0ID0gRFZCX0NBX0VONTAyMjFfUE9MTF9DQU1fUFJFU0VOVCB8CisJCSAgICAgIERWQl9DQV9FTjUwMjIxX1BPTExfQ0FNX1JFQURZOworCX0KKworCW11dGV4X3VubG9jaygmc3RhdGUtPmNhX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyB2b2lkIGF6NjAyN19jaV91bmluaXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQoreworCXN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICpzdGF0ZTsKKworCWRlYl9pbmZvKCIlcyIsIF9fZnVuY19fKTsKKworCWlmIChOVUxMID09IGQpCisJCXJldHVybjsKKworCXN0YXRlID0gKHN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICopZC0+cHJpdjsKKwlpZiAoTlVMTCA9PSBzdGF0ZSkKKwkJcmV0dXJuOworCisJaWYgKE5VTEwgPT0gc3RhdGUtPmNhLmRhdGEpCisJCXJldHVybjsKKworCWR2Yl9jYV9lbjUwMjIxX3JlbGVhc2UoJnN0YXRlLT5jYSk7CisKKwltZW1zZXQoJnN0YXRlLT5jYSwgMCwgc2l6ZW9mKHN0YXRlLT5jYSkpOworfQorCisKK3N0YXRpYyBpbnQgYXo2MDI3X2NpX2luaXQoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYSkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBhLT5kZXY7CisJc3RydWN0IGF6NjAyN19kZXZpY2Vfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlICopZC0+cHJpdjsKKwlpbnQgcmV0OworCisJZGViX2luZm8oIiVzIiwgX19mdW5jX18pOworCisJbXV0ZXhfaW5pdCgmc3RhdGUtPmNhX211dGV4KTsKKworCXN0YXRlLT5jYS5vd25lcgkJCT0gVEhJU19NT0RVTEU7CisJc3RhdGUtPmNhLnJlYWRfYXR0cmlidXRlX21lbQk9IGF6NjAyN19jaV9yZWFkX2F0dHJpYnV0ZV9tZW07CisJc3RhdGUtPmNhLndyaXRlX2F0dHJpYnV0ZV9tZW0JPSBhejYwMjdfY2lfd3JpdGVfYXR0cmlidXRlX21lbTsKKwlzdGF0ZS0+Y2EucmVhZF9jYW1fY29udHJvbAk9IGF6NjAyN19jaV9yZWFkX2NhbV9jb250cm9sOworCXN0YXRlLT5jYS53cml0ZV9jYW1fY29udHJvbAk9IGF6NjAyN19jaV93cml0ZV9jYW1fY29udHJvbDsKKwlzdGF0ZS0+Y2Euc2xvdF9yZXNldAkJPSBhejYwMjdfY2lfc2xvdF9yZXNldDsKKwlzdGF0ZS0+Y2Euc2xvdF9zaHV0ZG93bgkJPSBhejYwMjdfY2lfc2xvdF9zaHV0ZG93bjsKKwlzdGF0ZS0+Y2Euc2xvdF90c19lbmFibGUJPSBhejYwMjdfY2lfc2xvdF90c19lbmFibGU7CisJc3RhdGUtPmNhLnBvbGxfc2xvdF9zdGF0dXMJPSBhejYwMjdfY2lfcG9sbF9zbG90X3N0YXR1czsKKwlzdGF0ZS0+Y2EuZGF0YQkJCT0gZDsKKworCXJldCA9IGR2Yl9jYV9lbjUwMjIxX2luaXQoJmEtPmR2Yl9hZGFwLAorCQkJCSAgJnN0YXRlLT5jYSwKKwkJCQkgIDAsIC8qIGZsYWdzICovCisJCQkJICAxKTsvKiBuX3Nsb3RzICovCisJaWYgKHJldCAhPSAwKSB7CisJCWVycigiQ2Fubm90IGluaXRpYWxpemUgQ0k6IEVycm9yICVkLiIsIHJldCk7CisJCW1lbXNldCgmc3RhdGUtPmNhLCAwLCBzaXplb2Yoc3RhdGUtPmNhKSk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGViX2luZm8oIkNJIGluaXRpYWxpemVkLiIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCitzdGF0aWMgaW50IGF6NjAyN19yZWFkX21hY19hZGRyKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggbWFjWzZdKQoreworCWF6NjAyN191c2JfaW5fb3AoZCwgMHhiNywgNiwgMCwgJm1hY1swXSwgNik7CisJcmV0dXJuIDA7Cit9CisqLworCitzdGF0aWMgaW50IGF6NjAyN19zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQoreworCisJdTggYnVmOworCWludCByZXQ7CisJc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCA9IGZlLT5kdmItPnByaXY7CisKKwlzdHJ1Y3QgaTJjX21zZyBpMmNfbXNnID0geworCQkuYWRkcgk9IDB4OTksCisJCS5mbGFncwk9IDAsCisJCS5idWYJPSAmYnVmLAorCQkubGVuCT0gMQorCX07CisKKwkvKgorCSAqIDIgICAtLTE4dgorCSAqIDEgICAtLTEzdgorCSAqIDAgICAtLW9mZgorCSAqLworCXN3aXRjaCAodm9sdGFnZSkgeworCWNhc2UgU0VDX1ZPTFRBR0VfMTM6CisJCWJ1ZiA9IDE7CisJCXJldCA9IGkyY190cmFuc2ZlcigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgJmkyY19tc2csIDEpOworCQlicmVhazsKKworCWNhc2UgU0VDX1ZPTFRBR0VfMTg6CisJCWJ1ZiA9IDI7CisJCXJldCA9IGkyY190cmFuc2ZlcigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgJmkyY19tc2csIDEpOworCQlicmVhazsKKworCWNhc2UgU0VDX1ZPTFRBR0VfT0ZGOgorCQlidWYgPSAwOworCQlyZXQgPSBpMmNfdHJhbnNmZXIoJmFkYXAtPmRldi0+aTJjX2FkYXAsICZpMmNfbXNnLCAxKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBhejYwMjdfZnJvbnRlbmRfcG93ZXJvbihzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisKKwlyZXEgPSAweEJDOworCXZhbHVlID0gMTsgLyogcG93ZXIgb24gKi8KKwlpbmRleCA9IDM7CisJYmxlbiA9IDA7CisKKwlyZXQgPSBhejYwMjdfdXNiX291dF9vcChhZGFwLT5kZXYsIHJlcSwgdmFsdWUsIGluZGV4LCBOVUxMLCBibGVuKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IGF6NjAyN19mcm9udGVuZF9yZXNldChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWludCByZXQ7CisJdTggcmVxOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJaW50IGJsZW47CisKKwkvKiByZXNldCBkZW1vZHVsYXRvciAqLworCXJlcSA9IDB4QzA7CisJdmFsdWUgPSAxOyAvKiBoaWdoICovCisJaW5kZXggPSAzOworCWJsZW4gPSAwOworCisJcmV0ID0gYXo2MDI3X3VzYl9vdXRfb3AoYWRhcC0+ZGV2LCByZXEsIHZhbHVlLCBpbmRleCwgTlVMTCwgYmxlbik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJlcSA9IDB4QzA7CisJdmFsdWUgPSAwOyAvKiBsb3cgKi8KKwlpbmRleCA9IDM7CisJYmxlbiA9IDA7CisJbXNsZWVwX2ludGVycnVwdGlibGUoMjAwKTsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGFkYXAtPmRldiwgcmVxLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIC1FSU87CisKKwltc2xlZXBfaW50ZXJydXB0aWJsZSgyMDApOworCisJcmVxID0gMHhDMDsKKwl2YWx1ZSA9IDE7IC8qaGlnaCAqLworCWluZGV4ID0gMzsKKwlibGVuID0gMDsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGFkYXAtPmRldiwgcmVxLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIC1FSU87CisKKwltc2xlZXBfaW50ZXJydXB0aWJsZSgyMDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF6NjAyN19mcm9udGVuZF90c2J5cGFzcyhzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwLCBpbnQgb25vZmYpCit7CisJaW50IHJldDsKKwl1OCByZXE7CisJdTE2IHZhbHVlOworCXUxNiBpbmRleDsKKwlpbnQgYmxlbjsKKworCS8qIFRTIHBhc3N0aHJvdWdoICovCisJcmVxID0gMHhDNzsKKwl2YWx1ZSA9IG9ub2ZmOworCWluZGV4ID0gMDsKKwlibGVuID0gMDsKKworCXJldCA9IGF6NjAyN191c2Jfb3V0X29wKGFkYXAtPmRldiwgcmVxLCB2YWx1ZSwgaW5kZXgsIE5VTEwsIGJsZW4pOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhejYwMjdfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisKKwlhejYwMjdfZnJvbnRlbmRfcG93ZXJvbihhZGFwKTsKKwlhejYwMjdfZnJvbnRlbmRfcmVzZXQoYWRhcCk7CisKKwlkZWJfaW5mbygiYWRhcCA9ICVwLCBkZXYgPSAlcFxuIiwgYWRhcCwgYWRhcC0+ZGV2KTsKKwlhZGFwLT5mZSA9IHN0YjA4OTlfYXR0YWNoKCZhejYwMjdfc3RiMDg5OV9jb25maWcsICZhZGFwLT5kZXYtPmkyY19hZGFwKTsKKworCWlmIChhZGFwLT5mZSkgeworCQlkZWJfaW5mbygiZm91bmQgU1RCMDg5OSBEVkItUy9EVkItUzIgZnJvbnRlbmQgQDB4JTAyeCIsIGF6NjAyN19zdGIwODk5X2NvbmZpZy5kZW1vZF9hZGRyZXNzKTsKKwkJaWYgKHN0YjYxMDBfYXR0YWNoKGFkYXAtPmZlLCAmYXo2MDI3X3N0YjYxMDBfY29uZmlnLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCkpIHsKKwkJCWRlYl9pbmZvKCJmb3VuZCBTVEI2MTAwIERWQi1TL0RWQi1TMiBmcm9udGVuZCBAMHglMDJ4IiwgYXo2MDI3X3N0YjYxMDBfY29uZmlnLnR1bmVyX2FkZHJlc3MpOworCQkJYWRhcC0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGF6NjAyN19zZXRfdm9sdGFnZTsKKwkJCWF6NjAyN19jaV9pbml0KGFkYXApOworCQl9IGVsc2UgeworCQkJYWRhcC0+ZmUgPSBOVUxMOworCQl9CisJfSBlbHNlCisJCXdhcm4oIm5vIGZyb250LWVuZCBhdHRhY2hlZFxuIik7CisKKwlhejYwMjdfZnJvbnRlbmRfdHNieXBhc3MoYWRhcCwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGF6NjAyN19wcm9wZXJ0aWVzOworCitzdGF0aWMgdm9pZCBhejYwMjdfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlhejYwMjdfY2lfdW5pbml0KGQpOworCWR2Yl91c2JfZGV2aWNlX2V4aXQoaW50Zik7Cit9CisKKworc3RhdGljIGludCBhejYwMjdfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLAorCQkJCSAgICZhejYwMjdfcHJvcGVydGllcywKKwkJCQkgICBUSElTX01PRFVMRSwKKwkJCQkgICBOVUxMLAorCQkJCSAgIGFkYXB0ZXJfbnIpOworfQorCisvKiBJMkMgKi8KK3N0YXRpYyBpbnQgYXo2MDI3X2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19tc2cgbXNnW10sIGludCBudW0pCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKKwlpbnQgaSA9IDAsIGogPSAwLCBsZW4gPSAwOworCWludCByZXQ7CisJdTE2IGluZGV4OworCXUxNiB2YWx1ZTsKKwlpbnQgbGVuZ3RoOworCXU4IHJlcTsKKwl1OCBkYXRhWzI1Nl07CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT5pMmNfbXV0ZXgpIDwgMCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlpZiAobnVtID4gMikKKwkJd2FybigibW9yZSB0aGFuIDIgaTJjIG1lc3NhZ2VzIGF0IGEgdGltZSBpcyBub3QgaGFuZGxlZCB5ZXQuIFRPRE8uIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKworCQlpZiAobXNnW2ldLmFkZHIgPT0gMHg5OSkgeworCQkJcmVxID0gMHhCRTsKKwkJCWluZGV4ID0gMDsKKwkJCXZhbHVlID0gbXNnW2ldLmJ1ZlswXSAmIDB4MDBmZjsKKwkJCWxlbmd0aCA9IDE7CisJCQlhejYwMjdfdXNiX291dF9vcChkLCByZXEsIHZhbHVlLCBpbmRleCwgZGF0YSwgbGVuZ3RoKTsKKwkJfQorCisJCWlmIChtc2dbaV0uYWRkciA9PSAweGQwKSB7CisJCQkvKiB3cml0ZS9yZWFkIHJlcXVlc3QgKi8KKwkJCWlmIChpICsgMSA8IG51bSAmJiAobXNnW2kgKyAxXS5mbGFncyAmIEkyQ19NX1JEKSkgeworCQkJCXJlcSA9IDB4Qjk7CisJCQkJaW5kZXggPSAoKChtc2dbaV0uYnVmWzBdIDw8IDgpICYgMHhmZjAwKSB8IChtc2dbaV0uYnVmWzFdICYgMHgwMGZmKSk7CisJCQkJdmFsdWUgPSBtc2dbaV0uYWRkciArIChtc2dbaV0ubGVuIDw8IDgpOworCQkJCWxlbmd0aCA9IG1zZ1tpICsgMV0ubGVuICsgNjsKKwkJCQlyZXQgPSBhejYwMjdfdXNiX2luX29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBkYXRhLCBsZW5ndGgpOworCQkJCWxlbiA9IG1zZ1tpICsgMV0ubGVuOworCQkJCWZvciAoaiA9IDA7IGogPCBsZW47IGorKykKKwkJCQkJbXNnW2kgKyAxXS5idWZbal0gPSBkYXRhW2ogKyA1XTsKKworCQkJCWkrKzsKKwkJCX0gZWxzZSB7CisKKwkJCQlpZiAobXNnW2ldLmFkZHIgPT0gMHhkMCkgeworCQkJCQkvKiBkZW1vZCAxNmJpdCBhZGRyICovCisJCQkJCXJlcSA9IDB4QkQ7CisJCQkJCWluZGV4ID0gKCgobXNnW2ldLmJ1ZlswXSA8PCA4KSAmIDB4ZmYwMCkgfCAobXNnW2ldLmJ1ZlsxXSAmIDB4MDBmZikpOworCQkJCQl2YWx1ZSA9IG1zZ1tpXS5hZGRyICsgKDIgPDwgOCk7CisJCQkJCWxlbmd0aCA9IG1zZ1tpXS5sZW4gLSAyOworCQkJCQlsZW4gPSBtc2dbaV0ubGVuIC0gMjsKKwkJCQkJZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKQorCQkJCQkJZGF0YVtqXSA9IG1zZ1tpXS5idWZbaiArIDJdOworCisJCQkJfQorCQkJCWF6NjAyN191c2Jfb3V0X29wKGQsIHJlcSwgdmFsdWUsIGluZGV4LCBkYXRhLCBsZW5ndGgpOworCQkJfQorCQl9CisKKwkJaWYgKG1zZ1tpXS5hZGRyID09IDB4YzApIHsKKwkJCWlmIChtc2dbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgeworCisJCQkJcmVxID0gMHhCOTsKKwkJCQlpbmRleCA9IDB4MDsKKwkJCQl2YWx1ZSA9IG1zZ1tpXS5hZGRyOworCQkJCWxlbmd0aCA9IG1zZ1tpXS5sZW4gKyA2OworCQkJCXJldCA9IGF6NjAyN191c2JfaW5fb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIGRhdGEsIGxlbmd0aCk7CisJCQkJbGVuID0gbXNnW2ldLmxlbjsKKwkJCQlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspCisJCQkJCW1zZ1tpXS5idWZbal0gPSBkYXRhW2ogKyA1XTsKKworCQkJfSBlbHNlIHsKKworCQkJCXJlcSA9IDB4QkQ7CisJCQkJaW5kZXggPSBtc2dbaV0uYnVmWzBdICYgMHgwMEZGOworCQkJCXZhbHVlID0gbXNnW2ldLmFkZHIgKyAoMSA8PCA4KTsKKwkJCQlsZW5ndGggPSBtc2dbaV0ubGVuIC0gMTsKKwkJCQlsZW4gPSBtc2dbaV0ubGVuIC0gMTsKKworCQkJCWZvciAoaiA9IDA7IGogPCBsZW47IGorKykKKwkJCQkJZGF0YVtqXSA9IG1zZ1tpXS5idWZbaiArIDFdOworCisJCQkJYXo2MDI3X3VzYl9vdXRfb3AoZCwgcmVxLCB2YWx1ZSwgaW5kZXgsIGRhdGEsIGxlbmd0aCk7CisJCQl9CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZkLT5pMmNfbXV0ZXgpOworCisJcmV0dXJuIGk7Cit9CisKKworc3RhdGljIHUzMiBhejYwMjdfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiBJMkNfRlVOQ19JMkM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBhejYwMjdfaTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyICAgPSBhejYwMjdfaTJjX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBhejYwMjdfaTJjX2Z1bmMsCit9OworCitpbnQgYXo2MDI3X2lkZW50aWZ5X3N0YXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJICBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyAqcHJvcHMsCisJCQkgIHN0cnVjdCBkdmJfdXNiX2RldmljZV9kZXNjcmlwdGlvbiAqKmRlc2MsCisJCQkgIGludCAqY29sZCkKK3sKKwl1OCBiWzE2XTsKKwlzMTYgcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkJICB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisJCQkJICAweGI3LAorCQkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiwKKwkJCQkgIDYsCisJCQkJICAwLAorCQkJCSAgYiwKKwkJCQkgIDYsCisJCQkJICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisKKwkqY29sZCA9IHJldCA8PSAwOworCisJZGViX2luZm8oImNvbGQ6ICVkXG4iLCAqY29sZCk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGF6NjAyN191c2JfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9BWlVSRVdBVkUsIFVTQl9QSURfQVpVUkVXQVZFX0FaNjAyNykgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9URVJSQVRFQywgIFVTQl9QSURfVEVSUkFURUNfRFZCUzJDSSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9URUNITklTQVQsIFVTQl9QSURfVEVDSE5JU0FUX1VTQjJfSERDSSkgfSwKKwl7IH0sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYXo2MDI3X3VzYl90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBhejYwMjdfcHJvcGVydGllcyA9IHsKKwkuY2FwcyA9IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCisJLnVzYl9jdHJsID0gQ1lQUkVTU19GWDIsCisJLmZpcm13YXJlICAgICAgICAgICAgPSAiZHZiLXVzYi1hejYwMjctMDMuZnciLAorCS5ub19yZWNvbm5lY3QgICAgICAgID0gMSwKKworCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBhejYwMjdfZGV2aWNlX3N0YXRlKSwKKwkuaWRlbnRpZnlfc3RhdGUJCT0gYXo2MDI3X2lkZW50aWZ5X3N0YXRlLAorCS5udW1fYWRhcHRlcnMgPSAxLAorCS5hZGFwdGVyID0geworCQl7CisJCQkuc3RyZWFtaW5nX2N0cmwgICA9IGF6NjAyN19zdHJlYW1pbmdfY3RybCwKKwkJCS5mcm9udGVuZF9hdHRhY2ggID0gYXo2MDI3X2Zyb250ZW5kX2F0dGFjaCwKKworCQkJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLworCQkJLnN0cmVhbSA9IHsKKwkJCQkudHlwZSA9IFVTQl9CVUxLLAorCQkJCS5jb3VudCA9IDEwLAorCQkJCS5lbmRwb2ludCA9IDB4MDIsCisJCQkJLnUgPSB7CisJCQkJCS5idWxrID0geworCQkJCQkJLmJ1ZmZlcnNpemUgPSA0MDk2LAorCQkJCQl9CisJCQkJfQorCQkJfSwKKwkJfQorCX0sCisvKgorCS5wb3dlcl9jdHJsICAgICAgID0gYXo2MDI3X3Bvd2VyX2N0cmwsCisJLnJlYWRfbWFjX2FkZHJlc3MgPSBhejYwMjdfcmVhZF9tYWNfYWRkciwKKyAqLworCS5yY19rZXlfbWFwICAgICAgID0gYXo2MDI3X3JjX2tleXMsCisJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGF6NjAyN19yY19rZXlzKSwKKwkucmNfaW50ZXJ2YWwgICAgICA9IDQwMCwKKwkucmNfcXVlcnkgICAgICAgICA9IGF6NjAyN19yY19xdWVyeSwKKwkuaTJjX2FsZ28gICAgICAgICA9ICZhejYwMjdfaTJjX2FsZ28sCisKKwkubnVtX2RldmljZV9kZXNjcyA9IDEsCisJLmRldmljZXMgPSB7CisJCXsKKwkJCS5uYW1lID0gIkFaVVJFV0FWRSBEVkItUy9TMiBVU0IyLjAgKEFaNjAyNykiLAorCQkJLmNvbGRfaWRzID0geyAmYXo2MDI3X3VzYl90YWJsZVswXSwgTlVMTCB9LAorCQkJLndhcm1faWRzID0geyBOVUxMIH0sCisJCX0sCisJCXsgTlVMTCB9LAorCX0KK307CisKKy8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhejYwMjdfdXNiX2RyaXZlciA9IHsKKwkubmFtZQkJPSAiZHZiX3VzYl9hejYwMjciLAorCS5wcm9iZSAJCT0gYXo2MDI3X3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCAJPSBhejYwMjdfdXNiX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlIAk9IGF6NjAyN191c2JfdGFibGUsCit9OworCisvKiBtb2R1bGUgc3R1ZmYgKi8KK3N0YXRpYyBpbnQgX19pbml0IGF6NjAyN191c2JfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZhejYwMjdfdXNiX2RyaXZlcik7CisJaWYgKHJlc3VsdCkgeworCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuICglZCkiLCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXo2MDI3X3VzYl9tb2R1bGVfZXhpdCh2b2lkKQoreworCS8qIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgZnJvbSB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXVzYl9kZXJlZ2lzdGVyKCZhejYwMjdfdXNiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGF6NjAyN191c2JfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoYXo2MDI3X3VzYl9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFkYW1zIFh1IDxBZGFtcy54dUBhendhdmUuY29tLmNuPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEFaVVJFV0FWRSBEVkItUy9TMiBVU0IyLjAgKEFaNjAyNykiKTsKK01PRFVMRV9WRVJTSU9OKCIxLjAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYXo2MDI3LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F6NjAyNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYWZlMTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2F6NjAyNy5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZm5kZWYgX0RWQl9VU0JfVlA2MDI3X0hfCisjZGVmaW5lIF9EVkJfVVNCX1ZQNjAyN19IXworCisjZGVmaW5lIERWQl9VU0JfTE9HX1BSRUZJWCAiYXo2MDI3IgorI2luY2x1ZGUgImR2Yi11c2IuaCIKKworCitleHRlcm4gaW50IGR2Yl91c2JfYXo2MDI3X2RlYnVnOworI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSBkcHJpbnRrKGR2Yl91c2JfYXo2MDI3X2RlYnVnLCAweDAxLCBhcmdzKQorI2RlZmluZSBkZWJfeGZlcihhcmdzLi4uKSBkcHJpbnRrKGR2Yl91c2JfYXo2MDI3X2RlYnVnLCAweDAyLCBhcmdzKQorI2RlZmluZSBkZWJfcmMoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfYXo2MDI3X2RlYnVnLCAweDA0LCBhcmdzKQorI2RlZmluZSBkZWJfZmUoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfYXo2MDI3X2RlYnVnLCAweDA4LCBhcmdzKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYwppbmRleCAwNWZiMjhlOS4uYTdiODQwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYwpAQCAtMTE4NCw2ICsxMTg0LDkgQEAKIAkub3NjX2Nsa19mcmVxID0gMzA0MDAsIC8qIGluIGtIeiAqLwogCS5pZl9mcmVxID0gMCwgLyogemVybyBJRiAqLwogCS56aWZfc3dhcF9pcSA9IDEsCisJLmFnY19taW4gPSAweDJFLAorCS5hZ2NfbWF4ID0gMHg5MCwKKwkuYWdjX2hvbGRfbG9vcCA9IDAsCiB9OwogCiBzdGF0aWMgaW50IGN4dXNiX215Z2ljYV9kNjg5X2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDAuaAppbmRleCA0OTVhOTA1Li44M2ZjMjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDAuaApAQCAtNDIsNyArNDIsNiBAQAogCXUxNiBtdDIwNjBfaWYxWzJdOwogCXU4IHJjX3RvZ2dsZTsKIAl1OCByY19jb3VudGVyOwotCXU4IHJjX2Z1bmNfdmVyc2lvbjsKIAl1OCBpc19kaWI3MDAwcGM7CiAJdTggZndfdXNlX25ld19pMmNfYXBpOwogCXU4IGRpc2FibGVfc3RyZWFtaW5nX21hc3Rlcl9tb2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMKaW5kZXggMGQzYzlhOS4uNGY5NjFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jCkBAIC00NzEsMTQgKzQ3MSwyMDkgQEAKIAlyZXR1cm4gZGliMDcwMF9jdHJsX3dyKGFkYXAtPmRldiwgYiwgNCk7CiB9CiAKKy8qIE51bWJlciBvZiBrZXlwcmVzc2VzIHRvIGlnbm9yZSBiZWZvcmUgc3RhcnQgcmVwZWF0aW5nICovCisjZGVmaW5lIFJDX1JFUEVBVF9ERUxBWV9WMV8yMCAxMAorCisvKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIFJDIHJlc3BvbnNlIHBhY2tldCBzdGFydGluZyBpbiBmaXJtd2FyZSAxLjIwICovCitzdHJ1Y3QgZGliMDcwMF9yY19yZXNwb25zZSB7CisJdTggcmVwb3J0X2lkOworCXU4IGRhdGFfc3RhdGU7CisJdTE2IHN5c3RlbTsKKwl1OCBkYXRhOworCXU4IG5vdF9kYXRhOworfTsKKyNkZWZpbmUgUkNfTVNHX1NJWkVfVjFfMjAgNgorCitzdGF0aWMgdm9pZCBkaWIwNzAwX3JjX3VyYl9jb21wbGV0aW9uKHN0cnVjdCB1cmIgKnB1cmIpCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gcHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKmtleW1hcDsKKwlzdHJ1Y3QgZGliMDcwMF9zdGF0ZSAqc3Q7CisJc3RydWN0IGRpYjA3MDBfcmNfcmVzcG9uc2UgcG9sbF9yZXBseTsKKwl1OCAqYnVmOworCWludCBmb3VuZCA9IDA7CisJdTMyIGV2ZW50OworCWludCBzdGF0ZTsKKwlpbnQgaTsKKworCWRlYl9pbmZvKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisJaWYgKGQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKGQtPnJjX2lucHV0X2RldiA9PSBOVUxMKSB7CisJCS8qIFRoaXMgd2lsbCBvY2N1ciBpZiBkaXNhYmxlX3JjX3BvbGxpbmc9MSAqLworCQl1c2JfZnJlZV91cmIocHVyYik7CisJCXJldHVybjsKKwl9CisKKwlrZXltYXAgPSBkLT5wcm9wcy5yY19rZXlfbWFwOworCXN0ID0gZC0+cHJpdjsKKwlidWYgPSAodTggKilwdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlpZiAocHVyYi0+c3RhdHVzIDwgMCkgeworCQlkZWJfaW5mbygiZGlzY29udGludWluZyBwb2xsaW5nXG4iKTsKKwkJdXNiX2ZyZWVfdXJiKHB1cmIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHB1cmItPmFjdHVhbF9sZW5ndGggIT0gUkNfTVNHX1NJWkVfVjFfMjApIHsKKwkJZGViX2luZm8oIm1hbGZvcm1lZCByYyBtc2cgc2l6ZT0lZFxuIiwgcHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCisJLyogU2V0IGluaXRpYWwgcmVzdWx0cyBpbiBjYXNlIHdlIGV4aXQgdGhlIGZ1bmN0aW9uIGVhcmx5ICovCisJZXZlbnQgPSAwOworCXN0YXRlID0gUkVNT1RFX05PX0tFWV9QUkVTU0VEOworCisJZGViX2RhdGEoIklSIHJhdyAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAobGVuICVkKVxuIiwgYnVmWzBdLAorCQkgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwgYnVmWzRdLCBidWZbNV0sIHB1cmItPmFjdHVhbF9sZW5ndGgpOworCisJc3dpdGNoIChkdmJfdXNiX2RpYjA3MDBfaXJfcHJvdG8pIHsKKwljYXNlIDA6CisJCS8qIE5FQyBQcm90b2NvbCAqLworCQlwb2xsX3JlcGx5LnJlcG9ydF9pZCAgPSAwOworCQlwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPSAxOworCQlwb2xsX3JlcGx5LnN5c3RlbSAgICAgPSBidWZbMl07CisJCXBvbGxfcmVwbHkuZGF0YSAgICAgICA9IGJ1Zls0XTsKKwkJcG9sbF9yZXBseS5ub3RfZGF0YSAgID0gYnVmWzVdOworCisJCS8qIE5FQyBwcm90b2NvbCBzZW5kcyByZXBlYXQgY29kZSBhcyAwIDAgMCBGRiAqLworCQlpZiAoKHBvbGxfcmVwbHkuc3lzdGVtID09IDB4MDApICYmIChwb2xsX3JlcGx5LmRhdGEgPT0gMHgwMCkKKwkJICAgICYmIChwb2xsX3JlcGx5Lm5vdF9kYXRhID09IDB4ZmYpKSB7CisJCQlwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPSAyOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogUkM1IFByb3RvY29sICovCisJCXBvbGxfcmVwbHkucmVwb3J0X2lkICA9IGJ1ZlswXTsKKwkJcG9sbF9yZXBseS5kYXRhX3N0YXRlID0gYnVmWzFdOworCQlwb2xsX3JlcGx5LnN5c3RlbSAgICAgPSAoYnVmWzJdIDw8IDgpIHwgYnVmWzNdOworCQlwb2xsX3JlcGx5LmRhdGEgICAgICAgPSBidWZbNF07CisJCXBvbGxfcmVwbHkubm90X2RhdGEgICA9IGJ1Zls1XTsKKwkJYnJlYWs7CisJfQorCisJaWYgKChwb2xsX3JlcGx5LmRhdGEgKyBwb2xsX3JlcGx5Lm5vdF9kYXRhKSAhPSAweGZmKSB7CisJCS8qIEtleSBmYWlsZWQgaW50ZWdyaXR5IGNoZWNrICovCisJCWVycigia2V5IGZhaWxlZCBpbnRlZ3JpdHkgY2hlY2s6ICUwNHggJTAyeCAlMDJ4IiwKKwkJICAgIHBvbGxfcmVwbHkuc3lzdGVtLAorCQkgICAgcG9sbF9yZXBseS5kYXRhLCBwb2xsX3JlcGx5Lm5vdF9kYXRhKTsKKwkJZ290byByZXN1Ym1pdDsKKwl9CisKKwlkZWJfZGF0YSgicmlkPSUwMnggZHM9JTAyeCBzbT0lMDR4IGQ9JTAyeCBuZD0lMDJ4XG4iLAorCQkgcG9sbF9yZXBseS5yZXBvcnRfaWQsIHBvbGxfcmVwbHkuZGF0YV9zdGF0ZSwKKwkJIHBvbGxfcmVwbHkuc3lzdGVtLCBwb2xsX3JlcGx5LmRhdGEsIHBvbGxfcmVwbHkubm90X2RhdGEpOworCisJLyogRmluZCB0aGUga2V5IGluIHRoZSBtYXAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspIHsKKwkJaWYgKHJjNV9jdXN0b20oJmtleW1hcFtpXSkgPT0gKHBvbGxfcmVwbHkuc3lzdGVtICYgMHhmZikgJiYKKwkJICAgIHJjNV9kYXRhKCZrZXltYXBbaV0pID09IHBvbGxfcmVwbHkuZGF0YSkgeworCQkJZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChmb3VuZCA9PSAwKSB7CisJCWVycigiVW5rbm93biByZW1vdGUgY29udHJvbGxlciBrZXk6ICUwNHggJTAyeCAlMDJ4IiwKKwkJICAgIHBvbGxfcmVwbHkuc3lzdGVtLCBwb2xsX3JlcGx5LmRhdGEsIHBvbGxfcmVwbHkubm90X2RhdGEpOworCQlkLT5sYXN0X2V2ZW50ID0gMDsKKwkJZ290byByZXN1Ym1pdDsKKwl9CisKKwlpZiAocG9sbF9yZXBseS5kYXRhX3N0YXRlID09IDEpIHsKKwkJLyogTmV3IGtleSBoaXQgKi8KKwkJc3QtPnJjX2NvdW50ZXIgPSAwOworCQlldmVudCA9IGtleW1hcFtpXS5ldmVudDsKKwkJc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7CisJCWQtPmxhc3RfZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7CisJfSBlbHNlIGlmIChwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPT0gMikgeworCQkvKiBLZXkgcmVwZWF0ZWQgKi8KKwkJc3QtPnJjX2NvdW50ZXIrKzsKKworCQkvKiBwcmV2ZW50cyB1bndhbnRlZCBkb3VibGUgaGl0cyAqLworCQlpZiAoc3QtPnJjX2NvdW50ZXIgPiBSQ19SRVBFQVRfREVMQVlfVjFfMjApIHsKKwkJCWV2ZW50ID0gZC0+bGFzdF9ldmVudDsKKwkJCXN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOworCQkJc3QtPnJjX2NvdW50ZXIgPSBSQ19SRVBFQVRfREVMQVlfVjFfMjA7CisJCX0KKwl9IGVsc2UgeworCQllcnIoIlVua25vd24gZGF0YSBzdGF0ZSBbJWRdIiwgcG9sbF9yZXBseS5kYXRhX3N0YXRlKTsKKwl9CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBSRU1PVEVfTk9fS0VZX1BSRVNTRUQ6CisJCWJyZWFrOworCWNhc2UgUkVNT1RFX0tFWV9QUkVTU0VEOgorCQlkZWJfaW5mbygia2V5IHByZXNzZWRcbiIpOworCQlkLT5sYXN0X2V2ZW50ID0gZXZlbnQ7CisJY2FzZSBSRU1PVEVfS0VZX1JFUEVBVDoKKwkJZGViX2luZm8oImtleSByZXBlYXRlZFxuIik7CisJCWlucHV0X2V2ZW50KGQtPnJjX2lucHV0X2RldiwgRVZfS0VZLCBldmVudCwgMSk7CisJCWlucHV0X3N5bmMoZC0+cmNfaW5wdXRfZGV2KTsKKwkJaW5wdXRfZXZlbnQoZC0+cmNfaW5wdXRfZGV2LCBFVl9LRVksIGQtPmxhc3RfZXZlbnQsIDApOworCQlpbnB1dF9zeW5jKGQtPnJjX2lucHV0X2Rldik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworcmVzdWJtaXQ6CisJLyogQ2xlYW4gdGhlIGJ1ZmZlciBiZWZvcmUgd2UgcmVxdWV1ZSAqLworCW1lbXNldChwdXJiLT50cmFuc2Zlcl9idWZmZXIsIDAsIFJDX01TR19TSVpFX1YxXzIwKTsKKworCS8qIFJlcXVldWUgVVJCICovCisJdXNiX3N1Ym1pdF91cmIocHVyYiwgR0ZQX0FUT01JQyk7Cit9CisKIGludCBkaWIwNzAwX3JjX3NldHVwKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKIHsKKwlzdHJ1Y3QgZGliMDcwMF9zdGF0ZSAqc3QgPSBkLT5wcml2OwogCXU4IHJjX3NldHVwWzNdID0ge1JFUVVFU1RfU0VUX1JDLCBkdmJfdXNiX2RpYjA3MDBfaXJfcHJvdG8sIDB9OwotCWludCBpID0gZGliMDcwMF9jdHJsX3dyKGQsIHJjX3NldHVwLCAzKTsKKwlzdHJ1Y3QgdXJiICpwdXJiOworCWludCByZXQ7CisJaW50IGk7CisKKwlpZiAoZC0+cHJvcHMucmNfa2V5X21hcCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCS8qIFNldCB0aGUgSVIgbW9kZSAqLworCWkgPSBkaWIwNzAwX2N0cmxfd3IoZCwgcmNfc2V0dXAsIDMpOwogCWlmIChpPDApIHsKIAkJZXJyKCJpciBwcm90b2NvbCBzZXR1cCBmYWlsZWQiKTsKIAkJcmV0dXJuIC0xOwogCX0KKworCWlmIChzdC0+ZndfdmVyc2lvbiA8IDB4MTAyMDApCisJCXJldHVybiAwOworCisJLyogU3RhcnRpbmcgaW4gZmlybXdhcmUgMS4yMCwgdGhlIFJDIGluZm8gaXMgcHJvdmlkZWQgb24gYSBidWxrIHBpcGUgKi8KKwlwdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAocHVyYiA9PSBOVUxMKSB7CisJCWVycigicmMgdXNiIGFsbG9jIHVyYiBmYWlsZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcHVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga3phbGxvYyhSQ19NU0dfU0laRV9WMV8yMCwgR0ZQX0tFUk5FTCk7CisJaWYgKHB1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CisJCWVycigicmMga3phbGxvYyBmYWlsZWRcbiIpOworCQl1c2JfZnJlZV91cmIocHVyYik7CisJCXJldHVybiAtMTsKKwl9CisKKwlwdXJiLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJdXNiX2ZpbGxfYnVsa191cmIocHVyYiwgZC0+dWRldiwgdXNiX3JjdmJ1bGtwaXBlKGQtPnVkZXYsIDEpLAorCQkJICBwdXJiLT50cmFuc2Zlcl9idWZmZXIsIFJDX01TR19TSVpFX1YxXzIwLAorCQkJICBkaWIwNzAwX3JjX3VyYl9jb21wbGV0aW9uLCBkKTsKKworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHB1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQgIT0gMCkgeworCQllcnIoInJjIHN1Ym1pdCB1cmIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwppbmRleCA0NDk3MmQwLi4zNGVhYjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKQEAgLTQ3MiwyMCArNDcyLDI1IEBACiAKIC8qIE51bWJlciBvZiBrZXlwcmVzc2VzIHRvIGlnbm9yZSBiZWZvcmUgc3RhcnQgcmVwZWF0aW5nICovCiAjZGVmaW5lIFJDX1JFUEVBVF9ERUxBWSA2Ci0jZGVmaW5lIFJDX1JFUEVBVF9ERUxBWV9WMV8yMCAxMAogCi0KLQotLyogVXNlZCBieSBmaXJtd2FyZSB2ZXJzaW9ucyA8IDEuMjAgKGRlcHJlY2F0ZWQpICovCi1zdGF0aWMgaW50IGRpYjA3MDBfcmNfcXVlcnlfbGVnYWN5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwKLQkJCQkgICBpbnQgKnN0YXRlKQorc3RhdGljIGludCBkaWIwNzAwX3JjX3F1ZXJ5KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwgaW50ICpzdGF0ZSkKIHsKIAl1OCBrZXlbNF07CiAJaW50IGk7CiAJc3RydWN0IGR2Yl91c2JfcmNfa2V5ICprZXltYXAgPSBkLT5wcm9wcy5yY19rZXlfbWFwOwogCXN0cnVjdCBkaWIwNzAwX3N0YXRlICpzdCA9IGQtPnByaXY7CisKIAkqZXZlbnQgPSAwOwogCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKKworCWlmIChzdC0+ZndfdmVyc2lvbiA+PSAweDEwMjAwKSB7CisJCS8qIEZvciAxLjIwIGZpcm13YXJlICwgV2UgbmVlZCB0byBrZWVwIHRoZSBSQyBwb2xsaW5nCisJCSAgIGNhbGxiYWNrIHNvIHdlIGNhbiByZXVzZSB0aGUgaW5wdXQgZGV2aWNlIHNldHVwIGluCisJCSAgIGR2Yi11c2ItcmVtb3RlLmMuICBIb3dldmVyLCB0aGUgYWN0dWFsIHdvcmsgaXMgYmVpbmcgZG9uZQorCQkgICBpbiB0aGUgYnVsayBVUkIgY29tcGxldGlvbiBoYW5kbGVyLiAqLworCQlyZXR1cm4gMDsKKwl9CisKIAlpPWRpYjA3MDBfY3RybF9yZChkLHJjX3JlcXVlc3QsMixrZXksNCk7CiAJaWYgKGk8PTApIHsKIAkJZXJyKCJSQyBRdWVyeSBGYWlsZWQiKTsKQEAgLTU1NywxNDkgKzU2Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgUkMgcmVzcG9uc2UgcGFja2V0IHN0YXJ0aW5nIGluIGZpcm13YXJlIDEuMjAgKi8KLXN0cnVjdCBkaWIwNzAwX3JjX3Jlc3BvbnNlIHsKLQl1OCByZXBvcnRfaWQ7Ci0JdTggZGF0YV9zdGF0ZTsKLQl1MTYgc3lzdGVtOwotCXU4IGRhdGE7Ci0JdTggbm90X2RhdGE7Ci19OwotCi0vKiBUaGlzIHN1cHBvcnRzIHRoZSBuZXcgSVIgcmVzcG9uc2UgZm9ybWF0IGZvciBmaXJtd2FyZSB2MS4yMCAqLwotc3RhdGljIGludCBkaWIwNzAwX3JjX3F1ZXJ5X3YxXzIwKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTMyICpldmVudCwKLQkJCQkgIGludCAqc3RhdGUpCi17Ci0Jc3RydWN0IGR2Yl91c2JfcmNfa2V5ICprZXltYXAgPSBkLT5wcm9wcy5yY19rZXlfbWFwOwotCXN0cnVjdCBkaWIwNzAwX3N0YXRlICpzdCA9IGQtPnByaXY7Ci0Jc3RydWN0IGRpYjA3MDBfcmNfcmVzcG9uc2UgcG9sbF9yZXBseTsKLQl1OCBidWZbNl07Ci0JaW50IGk7Ci0JaW50IHN0YXR1czsKLQlpbnQgYWN0bGVuOwotCWludCBmb3VuZCA9IDA7Ci0KLQkvKiBTZXQgaW5pdGlhbCByZXN1bHRzIGluIGNhc2Ugd2UgZXhpdCB0aGUgZnVuY3Rpb24gZWFybHkgKi8KLQkqZXZlbnQgPSAwOwotCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKLQotCS8qIEZpcm13YXJlIHYxLjIwIHByb3ZpZGVzIFJDIGRhdGEgdmlhIGJ1bGsgZW5kcG9pbnQgMSAqLwotCXN0YXR1cyA9IHVzYl9idWxrX21zZyhkLT51ZGV2LCB1c2JfcmN2YnVsa3BpcGUoZC0+dWRldiwgMSksIGJ1ZiwKLQkJCSAgICAgIHNpemVvZihidWYpLCAmYWN0bGVuLCA1MCk7Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJLyogTm8gZGF0YSBhdmFpbGFibGUgKG1lYW5pbmcgbm8ga2V5IHByZXNzKSAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQotCXN3aXRjaCAoZHZiX3VzYl9kaWIwNzAwX2lyX3Byb3RvKSB7Ci0JY2FzZSAwOgotCQlwb2xsX3JlcGx5LnJlcG9ydF9pZCAgPSAwOwotCQlwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPSAxOwotCQlwb2xsX3JlcGx5LnN5c3RlbSAgICAgPSBidWZbMl07Ci0JCXBvbGxfcmVwbHkuZGF0YSAgICAgICA9IGJ1Zls0XTsKLQkJcG9sbF9yZXBseS5ub3RfZGF0YSAgID0gYnVmWzVdOwotCi0JCS8qIE5FQyBwcm90b2NvbCBzZW5kcyByZXBlYXQgY29kZSBhcyAwIDAgMCBGRiAqLwotCQlpZiAoKHBvbGxfcmVwbHkuc3lzdGVtID09IDB4MDApICYmIChwb2xsX3JlcGx5LmRhdGEgPT0gMHgwMCkKLQkJICAgICYmIChwb2xsX3JlcGx5Lm5vdF9kYXRhID09IDB4ZmYpKSB7Ci0JCQlwb2xsX3JlcGx5LmRhdGFfc3RhdGUgPSAyOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQlpZiAoYWN0bGVuICE9IHNpemVvZihidWYpKSB7Ci0JCS8qIFdlIGRpZG4ndCBnZXQgYmFjayB0aGUgNiBieXRlIG1lc3NhZ2Ugd2UgZXhwZWN0ZWQgKi8KLQkJZXJyKCJVbmV4cGVjdGVkIFJDIHJlc3BvbnNlIHNpemUgWyVkXSIsIGFjdGxlbik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlwb2xsX3JlcGx5LnJlcG9ydF9pZCAgPSBidWZbMF07Ci0JcG9sbF9yZXBseS5kYXRhX3N0YXRlID0gYnVmWzFdOwotCQlwb2xsX3JlcGx5LnN5c3RlbSAgICAgPSAoYnVmWzJdIDw8IDgpIHwgYnVmWzNdOwotCXBvbGxfcmVwbHkuZGF0YSAgICAgICA9IGJ1Zls0XTsKLQlwb2xsX3JlcGx5Lm5vdF9kYXRhICAgPSBidWZbNV07Ci0KLQkJYnJlYWs7Ci0JfQotCi0JaWYgKChwb2xsX3JlcGx5LmRhdGEgKyBwb2xsX3JlcGx5Lm5vdF9kYXRhKSAhPSAweGZmKSB7Ci0JCS8qIEtleSBmYWlsZWQgaW50ZWdyaXR5IGNoZWNrICovCi0JCWVycigia2V5IGZhaWxlZCBpbnRlZ3JpdHkgY2hlY2s6ICUwNHggJTAyeCAlMDJ4IiwKLQkJICAgIHBvbGxfcmVwbHkuc3lzdGVtLAotCQkgICAgcG9sbF9yZXBseS5kYXRhLCBwb2xsX3JlcGx5Lm5vdF9kYXRhKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCi0JLyogRmluZCB0aGUga2V5IGluIHRoZSBtYXAgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspIHsKLQkJaWYgKHJjNV9jdXN0b20oJmtleW1hcFtpXSkgPT0gKHBvbGxfcmVwbHkuc3lzdGVtICYgMHhmZikgJiYKLQkJCXJjNV9kYXRhKCZrZXltYXBbaV0pID09IHBvbGxfcmVwbHkuZGF0YSkgewotCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OwotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoZm91bmQgPT0gMCkgewotCQllcnIoIlVua25vd24gcmVtb3RlIGNvbnRyb2xsZXIga2V5OiAlMDR4ICUwMnggJTAyeCIsCi0JCQlwb2xsX3JlcGx5LnN5c3RlbSwKLQkJCXBvbGxfcmVwbHkuZGF0YSwgcG9sbF9yZXBseS5ub3RfZGF0YSk7Ci0JCWQtPmxhc3RfZXZlbnQgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAocG9sbF9yZXBseS5kYXRhX3N0YXRlID09IDEpIHsKLQkJLyogTmV3IGtleSBoaXQgKi8KLQkJc3QtPnJjX2NvdW50ZXIgPSAwOwotCQkqZXZlbnQgPSBrZXltYXBbaV0uZXZlbnQ7Ci0JCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKLQkJZC0+bGFzdF9ldmVudCA9IGtleW1hcFtpXS5ldmVudDsKLQl9IGVsc2UgaWYgKHBvbGxfcmVwbHkuZGF0YV9zdGF0ZSA9PSAyKSB7Ci0JCS8qIEtleSByZXBlYXRlZCAqLwotCQlzdC0+cmNfY291bnRlcisrOwotCi0JCS8qIHByZXZlbnRzIHVud2FudGVkIGRvdWJsZSBoaXRzICovCi0JCWlmIChzdC0+cmNfY291bnRlciA+IFJDX1JFUEVBVF9ERUxBWV9WMV8yMCkgewotCQkJKmV2ZW50ID0gZC0+bGFzdF9ldmVudDsKLQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKLQkJCXN0LT5yY19jb3VudGVyID0gUkNfUkVQRUFUX0RFTEFZX1YxXzIwOwotCQl9Ci0JfSBlbHNlIHsKLQkJZXJyKCJVbmtub3duIGRhdGEgc3RhdGUgWyVkXSIsIHBvbGxfcmVwbHkuZGF0YV9zdGF0ZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZGliMDcwMF9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsIGludCAqc3RhdGUpCi17Ci0Jc3RydWN0IGRpYjA3MDBfc3RhdGUgKnN0ID0gZC0+cHJpdjsKLQotCS8qIEJlY2F1c2Ugc29tZSBwZW9wbGUgbWF5IGhhdmUgaW1wcm9wZXJseSBuYW1lZCBmaXJtd2FyZSBmaWxlcywKLQkgICBsZXQncyBmaWd1cmUgb3V0IHdoZXRoZXIgdG8gdXNlIHRoZSBuZXcgZmlybXdhcmUgY2FsbCBvciB0aGUgbGVnYWN5Ci0JICAgY2FsbCBiYXNlZCBvbiB0aGUgZmlybXdhcmUgdmVyc2lvbiBlbWJlZGRlZCBpbiB0aGUgZmlsZSAqLwotCWlmIChzdC0+cmNfZnVuY192ZXJzaW9uID09IDApIHsKLQkJdTMyIGh3dmVyLCByb212ZXIsIHJhbXZlciwgZnd0eXBlOwotCQlpbnQgcmV0ID0gZGliMDcwMF9nZXRfdmVyc2lvbihkLCAmaHd2ZXIsICZyb212ZXIsICZyYW12ZXIsCi0JCQkJCSAgICAgICZmd3R5cGUpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZXJyKCJDb3VsZCBub3QgZGV0ZXJtaW5lIHZlcnNpb24gaW5mbyIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWlmIChyYW12ZXIgPCAweDEwMjAwKQotCQkJc3QtPnJjX2Z1bmNfdmVyc2lvbiA9IDE7Ci0JCWVsc2UKLQkJCXN0LT5yY19mdW5jX3ZlcnNpb24gPSAyOwotCX0KLQotCWlmIChzdC0+cmNfZnVuY192ZXJzaW9uID09IDIpCi0JCXJldHVybiBkaWIwNzAwX3JjX3F1ZXJ5X3YxXzIwKGQsIGV2ZW50LCBzdGF0ZSk7Ci0JZWxzZQotCQlyZXR1cm4gZGliMDcwMF9yY19xdWVyeV9sZWdhY3koZCwgZXZlbnQsIHN0YXRlKTsKLX0KLQogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBkaWIwNzAwX3JjX2tleXNbXSA9IHsKIAkvKiBLZXkgY29kZXMgZm9yIHRoZSB0aW55IFBpbm5hY2xlIHJlbW90ZSovCiAJeyAweDA3MDAsIEtFWV9NVVRFIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKaW5kZXggYmMzNTgxZC4uYWU4YjU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaApAQCAtNjQsNiArNjQsOCBAQAogI2RlZmluZSBVU0JfVklEX0hVTUFYX0NPRVgJCQkweDEwYjkKICNkZWZpbmUgVVNCX1ZJRF83NzQJCQkJMHg3YTY5CiAjZGVmaW5lIFVTQl9WSURfRVZPTFVURVBDCQkJMHgxZTU5CisjZGVmaW5lIFVTQl9WSURfQVpVUkVXQVZFCQkJMHgxM2QzCisjZGVmaW5lIFVTQl9WSURfVEVDSE5JU0FUCQkJMHgxNGY3CiAKIC8qIFByb2R1Y3QgSURzICovCiAjZGVmaW5lIFVTQl9QSURfQURTVEVDSF9VU0IyX0NPTEQJCQkweGEzMzMKQEAgLTEzOCw2ICsxNDAsNyBAQAogI2RlZmluZSBVU0JfUElEX1RXSU5IQU5fVlA3MDIxX0NPTEQJCQkweDMyMDcKICNkZWZpbmUgVVNCX1BJRF9UV0lOSEFOX1ZQNzAyMV9XQVJNCQkJMHgzMjA4CiAjZGVmaW5lIFVTQl9QSURfVElOWVRXSU4JCQkJMHgzMjI2CisjZGVmaW5lIFVTQl9QSURfVElOWVRXSU5fMgkJCQkweGU0MDIKICNkZWZpbmUgVVNCX1BJRF9ETlRWX1RJTllVU0IyX0NPTEQJCQkweDMyMjMKICNkZWZpbmUgVVNCX1BJRF9ETlRWX1RJTllVU0IyX1dBUk0JCQkweDMyMjQKICNkZWZpbmUgVVNCX1BJRF9VTFRJTUFfVFZCT1hfQ09MRAkJCTB4ODEwNQpAQCAtMjA5LDYgKzIxMiw3IEBACiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjcxRQkJCTB4MDIyYgogI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY3MkUJCQkweDAyMzYKICNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWNzNFCQkJMHgwMjM3CisjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjMxMEUJCQkweDMyMTEKICNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWODAxRQkJCTB4MDIzYQogI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY4MDFFX1NFCQkJMHgwMjNiCiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjczQQkJCTB4MDI0MwpAQCAtMjQ4LDYgKzI1Miw3IEBACiAjZGVmaW5lIFVTQl9QSURfRElHSVZPWF9NSU5JX1NMX1dBUk0JCQkweGUzNjEKICNkZWZpbmUgVVNCX1BJRF9HUkFORFRFQ19EVkJUX1VTQjJfQ09MRAkJCTB4MGJjNgogI2RlZmluZSBVU0JfUElEX0dSQU5EVEVDX0RWQlRfVVNCMl9XQVJNCQkJMHgwYmM3CisjZGVmaW5lIFVTQl9QSURfV0lORkFTVF9EVFYyMDAwRFMJCQkweDZhMDQKICNkZWZpbmUgVVNCX1BJRF9XSU5GQVNUX0RUVl9ET05HTEVfQ09MRAkJCTB4NjAyNQogI2RlZmluZSBVU0JfUElEX1dJTkZBU1RfRFRWX0RPTkdMRV9XQVJNCQkJMHg2MDI2CiAjZGVmaW5lIFVTQl9QSURfV0lORkFTVF9EVFZfRE9OR0xFX1NUSzc3MDBQCQkweDZmMDAKQEAgLTI5MCw1ICsyOTUsNyBAQAogI2RlZmluZSBVU0JfUElEX0ZSSUlPX1dISVRFCQkJCTB4MDAwMQogI2RlZmluZSBVU0JfUElEX1RWV0FZX1BMVVMJCQkJMHgwMDAyCiAjZGVmaW5lIFVTQl9QSURfU1ZFT05fU1RWMjAJCQkJMHhlMzlkCi0KKyNkZWZpbmUgVVNCX1BJRF9BWlVSRVdBVkVfQVo2MDI3CQkJMHgzMjc1CisjZGVmaW5lIFVTQl9QSURfVEVSUkFURUNfRFZCUzJDSQkJCTB4MzI3NQorI2RlZmluZSBVU0JfUElEX1RFQ0hOSVNBVF9VU0IyX0hEQ0kJCQkweDAwMDIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWluaXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pbml0LmMKaW5kZXggZTMzMWRiOC4uNWQ5MWY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWluaXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaW5pdC5jCkBAIC0yNDMsNyArMjQzLDcgQEAKIAkJZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkdmJfdXNiX2RldmljZSksR0ZQX0tFUk5FTCk7CiAJaWYgKGQgPT0gTlVMTCkgewogCQllcnIoIm5vIG1lbW9yeSBmb3IgJ3N0cnVjdCBkdmJfdXNiX2RldmljZSciKTsKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZC0+dWRldiA9IHVkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMKaW5kZXggNmI1ZGVkOS4uYTAzZWY3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYwpAQCAtMTA3LDYgKzEwNyw3IEBACiAJCWNhc2UgUkVNT1RFX0tFWV9SRVBFQVQ6CiAJCQlkZWJfcmMoImtleSByZXBlYXRlZFxuIik7CiAJCQlpbnB1dF9ldmVudChkLT5yY19pbnB1dF9kZXYsIEVWX0tFWSwgZXZlbnQsIDEpOworCQkJaW5wdXRfc3luYyhkLT5yY19pbnB1dF9kZXYpOwogCQkJaW5wdXRfZXZlbnQoZC0+cmNfaW5wdXRfZGV2LCBFVl9LRVksIGQtPmxhc3RfZXZlbnQsIDApOwogCQkJaW5wdXRfc3luYyhkLT5yY19pbnB1dF9kZXYpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYwppbmRleCA2NDEzMmMwLi5hY2NjNjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMKQEAgLTEsNiArMSw3IEBACiAvKiBEVkIgVVNCIGZyYW1ld29yayBjb21wbGlhbnQgTGludXggZHJpdmVyIGZvciB0aGUKICoJRFZCV29ybGQgRFZCLVMgMjEwMSwgMjEwMiwgRFZCLVMyIDIxMDQsIERWQi1DIDMxMDEsCi0qCVRlVmlpIFM2MDAsIFM2MzAsIFM2NTAgQ2FyZHMKKyoJVGVWaWkgUzYwMCwgUzYzMCwgUzY1MCwKKyoJUHJvZiAxMTAwLCA3NTAwIENhcmRzCiAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5IElnb3IgTS4gTGlwbGlhbmluIChsaXBsaWFuaW5AbWUuYnkpCiAqCiAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC00NjksMTEgKzQ3MCwxMyBAQAogCQkJCQkJCQlpbnQgbnVtKQogewogCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CiAJaW50IHJldCA9IDA7CiAJaW50IGxlbiwgaSwgajsKIAogCWlmICghZCkKIAkJcmV0dXJuIC1FTk9ERVY7CisJdWRldiA9IGQtPnVkZXY7CiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCiAJCXJldHVybiAtRUFHQUlOOwogCkBAIC00ODgsOCArNDkxLDEzIEBACiAJCX0KIAkJY2FzZSAoRFcyMTAyX1ZPTFRBR0VfQ1RSTCk6IHsKIAkJCXU4IG9idWZbMl07CisKKwkJCW9idWZbMF0gPSAxOworCQkJb2J1ZlsxXSA9IG1zZ1tqXS5idWZbMV07Lyogb2ZmLW9uICovCisJCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHg4YSwgMCwgMCwKKwkJCQkJb2J1ZiwgMiwgRFcyMTBYX1dSSVRFX01TRyk7CiAJCQlvYnVmWzBdID0gMzsKLQkJCW9idWZbMV0gPSBtc2dbal0uYnVmWzBdOworCQkJb2J1ZlsxXSA9IG1zZ1tqXS5idWZbMF07LyogMTN2LTE4diAqLwogCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4OGEsIDAsIDAsCiAJCQkJCW9idWYsIDIsIERXMjEwWF9XUklURV9NU0cpOwogCQkJYnJlYWs7CkBAIC01MjcsNiArNTM1LDE3IEBACiAJCQkJCWkgKz0gMTY7CiAJCQkJCWxlbiAtPSAxNjsKIAkJCQl9IHdoaWxlIChsZW4gPiAwKTsKKwkJCX0gZWxzZSBpZiAoKHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IDB4NzUwMCkKKwkJCQkJJiYgKGogPCAobnVtIC0gMSkpKSB7CisJCQkJLyogd3JpdGUgcmVnaXN0ZXIgYWRkciBiZWZvcmUgcmVhZCAqLworCQkJCXU4IG9idWZbbXNnW2pdLmxlbiArIDJdOworCQkJCW9idWZbMF0gPSBtc2dbaiArIDFdLmxlbjsKKwkJCQlvYnVmWzFdID0gKG1zZ1tqXS5hZGRyIDw8IDEpOworCQkJCW1lbWNweShvYnVmICsgMiwgbXNnW2pdLmJ1ZiwgbXNnW2pdLmxlbik7CisJCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4OTIsIDAsIDAsCisJCQkJCQlvYnVmLCBtc2dbal0ubGVuICsgMiwKKwkJCQkJCURXMjEwWF9XUklURV9NU0cpOworCQkJCWJyZWFrOwogCQkJfSBlbHNlIHsKIAkJCQkvKiB3cml0ZSByZWdpc3RlcnMgKi8KIAkJCQl1OCBvYnVmW21zZ1tqXS5sZW4gKyAyXTsKQEAgLTY1MSwxOCArNjcwLDI1IEBACiAKIHN0YXRpYyBpbnQgZHcyMTB4X3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCiB7Ci0Jc3RhdGljIHU4IGNvbW1hbmRfMTN2WzFdID0gezB4MDB9OwotCXN0YXRpYyB1OCBjb21tYW5kXzE4dlsxXSA9IHsweDAxfTsKLQlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKLQkJey5hZGRyID0gRFcyMTAyX1ZPTFRBR0VfQ1RSTCwgLmZsYWdzID0gMCwKLQkJCS5idWYgPSBjb21tYW5kXzEzdiwgLmxlbiA9IDF9LAorCXN0YXRpYyB1OCBjb21tYW5kXzEzdltdID0gezB4MDAsIDB4MDF9OworCXN0YXRpYyB1OCBjb21tYW5kXzE4dltdID0gezB4MDEsIDB4MDF9OworCXN0YXRpYyB1OCBjb21tYW5kX29mZltdID0gezB4MDAsIDB4MDB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSBEVzIxMDJfVk9MVEFHRV9DVFJMLAorCQkuZmxhZ3MgPSAwLAorCQkuYnVmID0gY29tbWFuZF9vZmYsCisJCS5sZW4gPSAyLAogCX07CiAKIAlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICp1ZGV2X2FkYXAgPQogCQkoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqKShmZS0+ZHZiLT5wcml2KTsKIAlpZiAodm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xOCkKLQkJbXNnWzBdLmJ1ZiA9IGNvbW1hbmRfMTh2OwotCWkyY190cmFuc2ZlcigmdWRldl9hZGFwLT5kZXYtPmkyY19hZGFwLCBtc2csIDEpOworCQltc2cuYnVmID0gY29tbWFuZF8xOHY7CisJZWxzZSBpZiAodm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xMykKKwkJbXNnLmJ1ZiA9IGNvbW1hbmRfMTN2OworCisJaTJjX3RyYW5zZmVyKCZ1ZGV2X2FkYXAtPmRldi0+aTJjX2FkYXAsICZtc2csIDEpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTczNSw2ICs3NjEsMTggQEAKIAkuY2xrX2RpdiA9IDEsCiB9OwogCitzdGF0aWMgc3RydWN0IHN0djA5MDBfY29uZmlnIHByb2ZfNzUwMF9zdHYwOTAwX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NmEsCisJLmRlbW9kX21vZGUgPSAwLAorCS54dGFsID0gMjcwMDAwMDAsCisJLmNsa21vZGUgPSAzLC8qIDAtQ0xLSSwgMi1YVEFMSSwgZWxzZSBBVVRPICovCisJLmRpc2VxY19tb2RlID0gMiwvKiAyLzMgUFdNICovCisJLnR1bjFfbWFkZHJlc3MgPSAwLC8qIDB4NjAgKi8KKwkudHVuMV9hZGMgPSAwLC8qIDIgVnBwICovCisJLnBhdGgxX21vZGUgPSAzLAorCS50dW4xX3R5cGUgPSAzLAorfTsKKwogc3RhdGljIGludCBkdzIxMDRfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmQpCiB7CiAJc3RydWN0IGR2Yl90dW5lcl9vcHMgKnR1bmVyX29wcyA9IE5VTEw7CkBAIC04ODIsNiArOTIwLDE5IEBACiAJcmV0dXJuIC1FSU87CiB9CiAKK3N0YXRpYyBpbnQgcHJvZl83NTAwX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICpkKQoreworCWQtPmZlID0gZHZiX2F0dGFjaChzdHYwOTAwX2F0dGFjaCwgJnByb2ZfNzUwMF9zdHYwOTAwX2NvbmZpZywKKwkJCQkJJmQtPmRldi0+aTJjX2FkYXAsIDApOworCWlmIChkLT5mZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTzsKKwlkLT5mZS0+b3BzLnNldF92b2x0YWdlID0gZHcyMTB4X3NldF92b2x0YWdlOworCisJaW5mbygiQXR0YWNoZWQgU1RWMDkwMCtTVEI2MTAwQSFcbiIpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZHcyMTAyX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewogCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGFkYXAtPmZlLCAweDYwLApAQCAtMTA3Myw2ICsxMTI0LDcgQEAKIAl7VVNCX0RFVklDRSgweDkwMjIsIFVTQl9QSURfVEVWSUlfUzYzMCl9LAogCXtVU0JfREVWSUNFKDB4MzAxMSwgVVNCX1BJRF9QUk9GXzExMDApfSwKIAl7VVNCX0RFVklDRSgweDkwMjIsIFVTQl9QSURfVEVWSUlfUzY2MCl9LAorCXtVU0JfREVWSUNFKDB4MzAzNCwgMHg3NTAwKX0sCiAJeyB9CiB9OwogCkBAIC0xMzg3LDkgKzE0MzksMzAgQEAKIAl9CiB9OwogCitzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyAqcDc1MDA7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uIGQ3NTAwID0geworCSJQcm9mIDc1MDAgVVNCIERWQi1TMiIsCisJeyZkdzIxMDJfdGFibGVbOV0sIE5VTEx9LAorCXtOVUxMfSwKK307CisKIHN0YXRpYyBpbnQgZHcyMTAyX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CisKKwlwNzUwMCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwNzUwMCkKKwkJcmV0dXJuIC1FTk9NRU07CisJLyogY29weSBkZWZhdWx0IHN0cnVjdHVyZSAqLworCW1lbWNweShwNzUwMCwgJnM2eDBfcHJvcGVydGllcywKKwkJCXNpemVvZihzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcykpOworCS8qIGZpbGwgb25seSBkaWZmZXJlbnQgZmllbGRzICovCisJcDc1MDAtPmZpcm13YXJlID0gImR2Yi11c2ItcDc1MDAuZnciOworCXA3NTAwLT5kZXZpY2VzWzBdID0gZDc1MDA7CisJcDc1MDAtPnJjX2tleV9tYXAgPSB0YnNfcmNfa2V5czsKKwlwNzUwMC0+cmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRSh0YnNfcmNfa2V5cyk7CisJcDc1MDAtPmFkYXB0ZXItPmZyb250ZW5kX2F0dGFjaCA9IHByb2ZfNzUwMF9mcm9udGVuZF9hdHRhY2g7CisKIAlpZiAoMCA9PSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZkdzIxMDJfcHJvcGVydGllcywKIAkJCVRISVNfTU9EVUxFLCBOVUxMLCBhZGFwdGVyX25yKSB8fAogCSAgICAwID09IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmR3MjEwNF9wcm9wZXJ0aWVzLApAQCAtMTM5Nyw2ICsxNDcwLDggQEAKIAkgICAgMCA9PSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZkdzMxMDFfcHJvcGVydGllcywKIAkJCVRISVNfTU9EVUxFLCBOVUxMLCBhZGFwdGVyX25yKSB8fAogCSAgICAwID09IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJnM2eDBfcHJvcGVydGllcywKKwkJCVRISVNfTU9EVUxFLCBOVUxMLCBhZGFwdGVyX25yKSB8fAorCSAgICAwID09IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgcDc1MDAsCiAJCQlUSElTX01PRFVMRSwgTlVMTCwgYWRhcHRlcl9ucikpCiAJCXJldHVybiAwOwogCkBAIC0xNDMxLDYgKzE1MDYsNiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIERWQldvcmxkIERWQi1TIDIxMDEsIDIxMDIsIERWQi1TMiAyMTA0LCIKIAkJCQkiIERWQi1DIDMxMDEgVVNCMi4wLCIKIAkJCQkiIFRlVmlpIFM2MDAsIFM2MzAsIFM2NTAsIFM2NjAgVVNCMi4wLCIKLQkJCQkiIFByb2YgMTEwMCBVU0IyLjAgZGV2aWNlcyIpOworCQkJCSIgUHJvZiAxMTAwLCA3NTAwIFVTQjIuMCBkZXZpY2VzIik7CiBNT0RVTEVfVkVSU0lPTigiMC4xIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2ZyaWlvLWZlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2ZyaWlvLWZlLmMKaW5kZXggZWJiN2I5Zi4uZDE0YmQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9mcmlpby1mZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZnJpaW8tZmUuYwpAQCAtMzY2LDcgKzM2Niw3IEBACiAJezB4NzYsIDB4MEN9LAogfTsKIAotY29uc3Qgc3RhdGljIGludCBpbml0X2NvZGVfbGVuID0gc2l6ZW9mKGluaXRfY29kZSkgLyBzaXplb2YodThbMl0pOworc3RhdGljIGNvbnN0IGludCBpbml0X2NvZGVfbGVuID0gc2l6ZW9mKGluaXRfY29kZSkgLyBzaXplb2YodThbMl0pOwogCiBzdGF0aWMgaW50IGpkdmJ0OTA1MDJfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguYwppbmRleCBlZjliN2JlLi43MzdmZmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5jCkBAIC0xNiw2ICsxNiw5IEBACiAjaW5jbHVkZSAicXQxMDEwLmgiCiAjaW5jbHVkZSAidGRhMTAwNHguaCIKICNpbmNsdWRlICJ0ZGE4Mjd4LmgiCisKKyNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgorI2luY2x1ZGUgInR1bmVyLXNpbXBsZS5oIgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogLyogZGVidWcgKi8KQEAgLTE1OCwxMSArMTYxLDE0IEBACiAKIAkJCWNhc2UgMHg5MzoKIAkJCWNhc2UgMHg5MjoKKwkJCWNhc2UgMHg4MzogLyogcGlubmFjbGUgUENUVjMxMGUgKi8KKwkJCWNhc2UgMHg4MjoKIAkJCQltLT5yZXBfY291bnQgPSAwOwogCQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKIAkJCQlnb3RvIHVubG9jazsKIAogCQkJY2FzZSAweDkxOgorCQkJY2FzZSAweDgxOiAvKiBwaW5uYWNsZSBQQ1RWMzEwZSAqLwogCQkJCS8qIHByZXZlbnQgaW1tZWRpYXRlIGF1dG8tcmVwZWF0ICovCiAJCQkJaWYgKCsrbS0+cmVwX2NvdW50ID4gMikKIAkJCQkJKnN0YXRlID0gUkVNT1RFX0tFWV9SRVBFQVQ7CkBAIC01NDYsNiArNTUyLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbTkyMHhfZm1kMTIxNm1lX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgYWRhcC0+ZmUsCisJCSAgICZhZGFwLT5kZXYtPmkyY19hZGFwLCAweDYxLAorCQkgICBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpOworCXJldHVybiAwOworfQorCiAvKiBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KIHN0YXRpYyBzdHJ1Y3QgbTkyMHhfaW5pdHMgbWVnYXNreV9yY19pbml0IFtdID0gewogCXsgTTkyMDZfUkNfSU5JVDIsIDB4YTggfSwKQEAgLTU2Miw2ICs1NzYsMTggQEAKIAl7IH0gLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbTkyMHhfaW5pdHMgcGlubmFjbGUzMTBlX2luaXRbXSA9IHsKKwkvKiB3aXRob3V0IHRoZXNlIHRoZSB0dW5lciBkb24ndCB3b3JrICovCisJeyAweGZmMjAsICAgICAgICAgMHg5YiB9LAorCXsgMHhmZjIyLCAgICAgICAgIDB4NzAgfSwKKworCS8qIHJjIHNldHRpbmdzICovCisJeyAweGZmNTAsICAgICAgICAgMHg4MCB9LAorCXsgTTkyMDZfUkNfSU5JVDEsIDB4MDAgfSwKKwl7IE05MjA2X1JDX0lOSVQyLCAweGZmIH0sCisJeyB9IC8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCiAvKiBpciBrZXltYXBzICovCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IG1lZ2Fza3lfcmNfa2V5cyBbXSA9IHsKIAl7IDB4MDAxMiwgS0VZX1BPV0VSIH0sCkBAIC02MDIsMTEgKzYyOCw2OCBAQAogCXsgMHgwMDFlLCBLRVlfVk9MVU1FVVAgfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgcGlubmFjbGUzMTBlX3JjX2tleXNbXSA9IHsKKwl7IDB4MTYsIEtFWV9QT1dFUiB9LAorCXsgMHgxNywgS0VZX0ZBVk9SSVRFUyB9LAorCXsgMHgwZiwgS0VZX1RFWFQgfSwKKwl7IDB4NDgsIEtFWV9NRURJQSB9LAkJLyogcHJldmlldyAqLworCXsgMHgxYywgS0VZX0VQRyB9LAorCXsgMHgwNCwgS0VZX0xJU1QgfSwJCQkvKiByZWNvcmQgbGlzdCAqLworCXsgMHgwMywgS0VZXzEgfSwKKwl7IDB4MDEsIEtFWV8yIH0sCisJeyAweDA2LCBLRVlfMyB9LAorCXsgMHgwOSwgS0VZXzQgfSwKKwl7IDB4MWQsIEtFWV81IH0sCisJeyAweDFmLCBLRVlfNiB9LAorCXsgMHgwZCwgS0VZXzcgfSwKKwl7IDB4MTksIEtFWV84IH0sCisJeyAweDFiLCBLRVlfOSB9LAorCXsgMHgxNSwgS0VZXzAgfSwKKwl7IDB4MGMsIEtFWV9DQU5DRUwgfSwKKwl7IDB4NGEsIEtFWV9DTEVBUiB9LAorCXsgMHgxMywgS0VZX0JBQ0sgfSwKKwl7IDB4MDAsIEtFWV9UQUIgfSwKKwl7IDB4NGIsIEtFWV9VUCB9LAorCXsgMHg0ZSwgS0VZX0xFRlQgfSwKKwl7IDB4NTIsIEtFWV9SSUdIVCB9LAorCXsgMHg1MSwgS0VZX0RPV04gfSwKKwl7IDB4NGYsIEtFWV9FTlRFUiB9LAkJLyogY291bGQgYWxzbyBiZSBLRVlfT0sgKi8KKwl7IDB4MWUsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwYSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MDUsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDIsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgxMSwgS0VZX1JFQ09SRCB9LAorCXsgMHgxNCwgS0VZX1BMQVkgfSwKKwl7IDB4NGMsIEtFWV9QQVVTRSB9LAorCXsgMHgxYSwgS0VZX1NUT1AgfSwKKwl7IDB4NDAsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MTIsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHg0MSwgS0VZX1BSRVZJT1VTU09ORyB9LAkvKiBSZXBsYXkgKi8KKwl7IDB4NDIsIEtFWV9ORVhUU09ORyB9LAkJLyogU2tpcCAqLworCXsgMHg1NCwgS0VZX0NBTUVSQSB9LAkJLyogQ2FwdHVyZSAqLworLyoJeyAweDUwLCBLRVlfU0FQIH0sCSovCQkvKiBTYXAgKi8KKwl7IDB4NDcsIEtFWV9DWUNMRVdJTkRPV1MgfSwJLyogUGlwICovCisJeyAweDRkLCBLRVlfU0NSRUVOIH0sCQkvKiBGdWxsU2NyZWVuICovCisJeyAweDA4LCBLRVlfU1VCVElUTEUgfSwKKwl7IDB4MGUsIEtFWV9NVVRFIH0sCisvKgl7IDB4NDksIEtFWV9MUiB9LAkqLwkJLyogTC9SICovCisJeyAweDA3LCBLRVlfU0xFRVAgfSwJCS8qIEhpYmVybmF0ZSAqLworCXsgMHgwOCwgS0VZX01FRElBIH0sCQkvKiBBL1YgKi8KKwl7IDB4MGUsIEtFWV9NRU5VIH0sCQkJLyogUmVjYWxsICovCisJeyAweDQ1LCBLRVlfWk9PTUlOIH0sCisJeyAweDQ2LCBLRVlfWk9PTU9VVCB9LAorCXsgMHgxOCwgS0VZX1RWIH0sCQkJLyogUmVkICovCisJeyAweDUzLCBLRVlfVkNSIH0sCQkJLyogR3JlZW4gKi8KKwl7IDB4NWUsIEtFWV9TQVQgfSwJCQkvKiBZZWxsb3cgKi8KKwl7IDB4NWYsIEtFWV9QTEFZRVIgfSwJCS8qIEJsdWUgKi8KK307CisKIC8qIERWQiBVU0IgRHJpdmVyIHN0dWZmICovCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgbWVnYXNreV9wcm9wZXJ0aWVzOwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGRpZ2l2b3hfbWluaV9paV9wcm9wZXJ0aWVzOwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIHR2d2Fsa2VydHdpbl9wcm9wZXJ0aWVzOwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGRwb3NoX3Byb3BlcnRpZXM7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgcGlubmFjbGVfcGN0djMxMGVfcHJvcGVydGllczsKIAogc3RhdGljIGludCBtOTIweF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKQEAgLTY1Miw2ICs3MzUsMTMgQEAKIAkJCWdvdG8gZm91bmQ7CiAJCX0KIAorCQlyZXQgPSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZwaW5uYWNsZV9wY3R2MzEwZV9wcm9wZXJ0aWVzLAorCQkJCQkgIFRISVNfTU9EVUxFLCAmZCwgYWRhcHRlcl9ucik7CisJCWlmIChyZXQgPT0gMCkgeworCQkJcmNfaW5pdF9zZXEgPSBwaW5uYWNsZTMxMGVfaW5pdDsKKwkJCWdvdG8gZm91bmQ7CisJCX0KKwogCQlyZXR1cm4gcmV0OwogCX0gZWxzZSB7CiAJCS8qIEFub3RoZXIgaW50ZXJmYWNlIG9uIGEgbXVsdGktdHVuZXIgZGV2aWNlICovCkBAIC02ODIsNiArNzcyLDcgQEAKIAkJCSAgICAgVVNCX1BJRF9MSUZFVklFV19UVl9XQUxLRVJfVFdJTl9XQVJNKSB9LAogCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EUE9TSCwgVVNCX1BJRF9EUE9TSF9NOTIwNl9DT0xEKSB9LAogCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EUE9TSCwgVVNCX1BJRF9EUE9TSF9NOTIwNl9XQVJNKSB9LAorCQl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9WSVNJT05QTFVTLCBVU0JfUElEX1BJTk5BQ0xFX1BDVFYzMTBFKSB9LAogCQl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBtOTIweF90YWJsZSk7CkBAIC04OTUsNiArOTg2LDU2IEBACiAJIH0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBwaW5uYWNsZV9wY3R2MzEwZV9wcm9wZXJ0aWVzID0geworCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKKworCS51c2JfY3RybCA9IERFVklDRV9TUEVDSUZJQywKKwkuZG93bmxvYWRfZmlybXdhcmUgPSBOVUxMLAorCisJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCisJLnJjX2tleV9tYXAgICAgICAgPSBwaW5uYWNsZTMxMGVfcmNfa2V5cywKKwkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUocGlubmFjbGUzMTBlX3JjX2tleXMpLAorCS5yY19xdWVyeSAgICAgICAgID0gbTkyMHhfcmNfcXVlcnksCisKKwkuc2l6ZV9vZl9wcml2ICAgICA9IHNpemVvZihzdHJ1Y3QgbTkyMHhfc3RhdGUpLAorCisJLmlkZW50aWZ5X3N0YXRlICAgPSBtOTIweF9pZGVudGlmeV9zdGF0ZSwKKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuYWRhcHRlciA9IHt7CisJCS5jYXBzID0gRFZCX1VTQl9BREFQX0hBU19QSURfRklMVEVSIHwKKwkJCURWQl9VU0JfQURBUF9QSURfRklMVEVSX0NBTl9CRV9UVVJORURfT0ZGLAorCisJCS5waWRfZmlsdGVyX2NvdW50ID0gOCwKKwkJLnBpZF9maWx0ZXIgICAgICAgPSBtOTIweF9waWRfZmlsdGVyLAorCQkucGlkX2ZpbHRlcl9jdHJsICA9IG05MjB4X3BpZF9maWx0ZXJfY3RybCwKKworCQkuZnJvbnRlbmRfYXR0YWNoICA9IG05MjB4X210MzUyX2Zyb250ZW5kX2F0dGFjaCwKKwkJLnR1bmVyX2F0dGFjaCAgICAgPSBtOTIweF9mbWQxMjE2bWVfdHVuZXJfYXR0YWNoLAorCisJCS5zdHJlYW0gPSB7CisJCQkudHlwZSA9IFVTQl9JU09DLAorCQkJLmNvdW50ID0gNSwKKwkJCS5lbmRwb2ludCA9IDB4ODQsCisJCQkudSA9IHsKKwkJCQkuaXNvYyA9IHsKKwkJCQkJLmZyYW1lc3BlcnVyYiA9IDEyOCwKKwkJCQkJLmZyYW1lc2l6ZSA9IDU2NCwKKwkJCQkJLmludGVydmFsID0gMSwKKwkJCQl9CisJCQl9CisJCX0sCisJfSB9LAorCS5pMmNfYWxnbyAgICAgICAgID0gJm05MjB4X2kyY19hbGdvLAorCisJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAorCS5kZXZpY2VzID0geworCQl7ICAgIlBpbm5hY2xlIFBDVFYgMzEwZSIsCisJCQl7ICZtOTIweF90YWJsZVs2XSwgTlVMTCB9LAorCQkJeyBOVUxMIH0sCisJCX0KKwl9Cit9OworCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbTkyMHhfZHJpdmVyID0gewogCS5uYW1lCQk9ICJkdmJfdXNiX205MjB4IiwKIAkucHJvYmUJCT0gbTkyMHhfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL205MjB4LmgKaW5kZXggMzc1MzI4OS4uM2MwNjE1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9tOTIweC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvbTkyMHguaApAQCAtMTgsNyArMTgsNyBAQAogI2RlZmluZSBNOTIwNl9GVwkweDMwCiAKICNkZWZpbmUgTTkyMDZfTUFYX0ZJTFRFUlMgOAotI2RlZmluZSBNOTIwNl9NQVhfQURBUFRFUlMgMgorI2RlZmluZSBNOTIwNl9NQVhfQURBUFRFUlMgNAogCiAvKgogc2VxdWVuY2VzIGZvdW5kIGluIGxvZ3M6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL29wZXJhMS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9vcGVyYTEuYwppbmRleCBkNGUyMzA5Li44MzA1NTc2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9vcGVyYTEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL29wZXJhMS5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJCQkJKG1zZ1tpXS5hZGRyPDwxKXwobXNnW2ldLmZsYWdzJkkyQ19NX1JEPzB4MDE6MCksCiAJCQkJCW1zZ1tpXS5idWYsCiAJCQkJCW1zZ1tpXS5sZW4KLQkJCQkJKSE9IG1zZ1tpXS5sZW4pKSB7CisJCQkJCSkpICE9IG1zZ1tpXS5sZW4pIHsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChkdmJfdXNiX29wZXJhMV9kZWJ1ZyAmIDB4MTApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LTEzOTQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtMTM5NC5jCmluZGV4IDdjNTQ1OWMyLi5jM2UwZWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LTEzOTQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LTEzOTQuYwpAQCAtOTAsMTMgKzkwLDE0IEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihmZHR2LT5kZXZpY2UsIHN0cnVjdCB1bml0X2RpcmVjdG9yeSwgZGV2aWNlKS0+bmU7CiB9CiAKLXN0YXRpYyBpbnQgbm9kZV9sb2NrKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgX19iZTMyIGRhdGFbXSkKK3N0YXRpYyBpbnQgbm9kZV9sb2NrKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgdm9pZCAqZGF0YSkKIHsKKwlxdWFkbGV0X3QgKmQgPSBkYXRhOwogCWludCByZXQ7CiAKLQlyZXQgPSBocHNiX25vZGVfbG9jayhub2RlX29mKGZkdHYpLCBhZGRyLCBFWFRDT0RFX0NPTVBBUkVfU1dBUCwKLQkJKF9fZm9yY2UgcXVhZGxldF90ICopJmRhdGFbMV0sIChfX2ZvcmNlIHF1YWRsZXRfdClkYXRhWzBdKTsKLQlkYXRhWzBdID0gZGF0YVsxXTsKKwlyZXQgPSBocHNiX25vZGVfbG9jayhub2RlX29mKGZkdHYpLCBhZGRyLAorCQkJICAgICBFWFRDT0RFX0NPTVBBUkVfU1dBUCwgJmRbMV0sIGRbMF0pOworCWRbMF0gPSBkWzFdOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE5Miw5ICsxOTMsMTMgQEAKIAlpbnQga3ZfbGVuLCBlcnI7CiAJdm9pZCAqa3Zfc3RyOwogCi0Ja3ZfbGVuID0gKHVkLT5tb2RlbF9uYW1lX2t2LT52YWx1ZS5sZWFmLmxlbiAtIDIpICogc2l6ZW9mKHF1YWRsZXRfdCk7Ci0Ja3Zfc3RyID0gQ1NSMTIxMl9URVhUVUFMX0RFU0NSSVBUT1JfTEVBRl9EQVRBKHVkLT5tb2RlbF9uYW1lX2t2KTsKLQorCWlmICh1ZC0+bW9kZWxfbmFtZV9rdikgeworCQlrdl9sZW4gPSAodWQtPm1vZGVsX25hbWVfa3YtPnZhbHVlLmxlYWYubGVuIC0gMikgKiA0OworCQlrdl9zdHIgPSBDU1IxMjEyX1RFWFRVQUxfREVTQ1JJUFRPUl9MRUFGX0RBVEEodWQtPm1vZGVsX25hbWVfa3YpOworCX0gZWxzZSB7CisJCWt2X2xlbiA9IDA7CisJCWt2X3N0ciA9IE5VTEw7CisJfQogCWZkdHYgPSBmZHR2X2FsbG9jKGRldiwgJmZkdHZfMTM5NF9iYWNrZW5kLCBrdl9zdHIsIGt2X2xlbik7CiAJaWYgKCFmZHR2KQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCmluZGV4IDUwYzQyYTQuLjFiMzFiZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwpAQCAtNzQsNyArNzQsNiBAQAogI2RlZmluZSBFTjUwMjIxX1RBR19DQV9JTkZPCQkweDlmODAzMQogCiBzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgewotCWludCBsZW5ndGg7CiAJdTggY3R5cGU7CiAJdTggc3VidW5pdDsKIAl1OCBvcGNvZGU7CkBAIC04MiwxMyArODEsMjcgQEAKIH07CiAKIHN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgewotCWludCBsZW5ndGg7CiAJdTggcmVzcG9uc2U7CiAJdTggc3VidW5pdDsKIAl1OCBvcGNvZGU7CiAJdTggb3BlcmFuZFs1MDldOwogfTsKIAorI2RlZmluZSBMQVNUX09QRVJBTkQgKDUwOSAtIDEpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9vcGVyYW5kcyhzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMsIGludCBmcm9tLCBpbnQgdG8pCit7CisJbWVtc2V0KCZjLT5vcGVyYW5kW2Zyb21dLCAwLCB0byAtIGZyb20gKyAxKTsKK30KKworc3RhdGljIHZvaWQgcGFkX29wZXJhbmRzKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYywgaW50IGZyb20pCit7CisJaW50IHRvID0gQUxJR04oZnJvbSwgNCk7CisKKwlpZiAoZnJvbSA8PSB0byAmJiB0byA8PSBMQVNUX09QRVJBTkQpCisJCWNsZWFyX29wZXJhbmRzKGMsIGZyb20sIHRvKTsKK30KKwogI2RlZmluZSBBVkNfREVCVUdfUkVBRF9ERVNDUklQVE9SICAgICAgICAgICAgICAweDAwMDEKICNkZWZpbmUgQVZDX0RFQlVHX0RTSVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCiAjZGVmaW5lIEFWQ19ERUJVR19EU0QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNApAQCAtMjAyLDc4ICsyMTUsNjUgQEAKIAkJICAgICAgIDE2LCAxLCBtc2csIGxlbmd0aCwgZmFsc2UpOwogfQogCi1zdGF0aWMgaW50IF9fYXZjX3dyaXRlKHN0cnVjdCBmaXJlZHR2ICpmZHR2LAotCQljb25zdCBzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMsIHN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIpCitzdGF0aWMgaW50IGF2Y193cml0ZShzdHJ1Y3QgZmlyZWR0diAqZmR0dikKIHsKIAlpbnQgZXJyLCByZXRyeTsKIAotCWlmIChyKQotCQlmZHR2LT5hdmNfcmVwbHlfcmVjZWl2ZWQgPSBmYWxzZTsKKwlmZHR2LT5hdmNfcmVwbHlfcmVjZWl2ZWQgPSBmYWxzZTsKIAogCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDY7IHJldHJ5KyspIHsKIAkJaWYgKHVubGlrZWx5KGF2Y19kZWJ1ZykpCi0JCQlkZWJ1Z19mY3AoJmMtPmN0eXBlLCBjLT5sZW5ndGgpOworCQkJZGVidWdfZmNwKGZkdHYtPmF2Y19kYXRhLCBmZHR2LT5hdmNfZGF0YV9sZW5ndGgpOwogCiAJCWVyciA9IGZkdHYtPmJhY2tlbmQtPndyaXRlKGZkdHYsIEZDUF9DT01NQU5EX1JFR0lTVEVSLAotCQkJCQkgICAodm9pZCAqKSZjLT5jdHlwZSwgYy0+bGVuZ3RoKTsKKwkJCQlmZHR2LT5hdmNfZGF0YSwgZmR0di0+YXZjX2RhdGFfbGVuZ3RoKTsKIAkJaWYgKGVycikgewotCQkJZmR0di0+YXZjX3JlcGx5X3JlY2VpdmVkID0gdHJ1ZTsKIAkJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiRkNQIGNvbW1hbmQgd3JpdGUgZmFpbGVkXG4iKTsKKwogCQkJcmV0dXJuIGVycjsKIAkJfQogCi0JCWlmICghcikKLQkJCXJldHVybiAwOwotCiAJCS8qCiAJCSAqIEFWL0Mgc3BlY3Mgc2F5IHRoYXQgYW5zd2VycyBzaG91bGQgYmUgc2VudCB3aXRoaW4gMTUwIG1zLgogCQkgKiBUaW1lIG91dCBhZnRlciAyMDAgbXMuCiAJCSAqLwogCQlpZiAod2FpdF9ldmVudF90aW1lb3V0KGZkdHYtPmF2Y193YWl0LAogCQkJCSAgICAgICBmZHR2LT5hdmNfcmVwbHlfcmVjZWl2ZWQsCi0JCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMjAwKSkgIT0gMCkgewotCQkJci0+bGVuZ3RoID0gZmR0di0+cmVzcG9uc2VfbGVuZ3RoOwotCQkJbWVtY3B5KCZyLT5yZXNwb25zZSwgZmR0di0+cmVzcG9uc2UsIHItPmxlbmd0aCk7Ci0KKwkJCQkgICAgICAgbXNlY3NfdG9famlmZmllcygyMDApKSAhPSAwKQogCQkJcmV0dXJuIDA7Ci0JCX0KIAl9CiAJZGV2X2VycihmZHR2LT5kZXZpY2UsICJGQ1AgcmVzcG9uc2UgdGltZWQgb3V0XG4iKTsKKwogCXJldHVybiAtRVRJTUVET1VUOwogfQogCi1zdGF0aWMgaW50IGF2Y193cml0ZShzdHJ1Y3QgZmlyZWR0diAqZmR0diwKLQkJY29uc3Qgc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjLCBzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyKQorc3RhdGljIGJvb2wgaXNfcmVnaXN0ZXJfcmMoc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqcikKIHsKLQlpbnQgcmV0OwotCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZmR0di0+YXZjX211dGV4KSkKLQkJcmV0dXJuIC1FSU5UUjsKLQotCXJldCA9IF9fYXZjX3dyaXRlKGZkdHYsIGMsIHIpOwotCi0JbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIHItPm9wY29kZSAgICAgPT0gQVZDX09QQ09ERV9WRU5ET1IgJiYKKwkgICAgICAgci0+b3BlcmFuZFswXSA9PSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8wICYmCisJICAgICAgIHItPm9wZXJhbmRbMV0gPT0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMSAmJgorCSAgICAgICByLT5vcGVyYW5kWzJdID09IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzIgJiYKKwkgICAgICAgci0+b3BlcmFuZFszXSA9PSBTRkVfVkVORE9SX09QQ09ERV9SRUdJU1RFUl9SRU1PVEVfQ09OVFJPTDsKIH0KIAogaW50IGF2Y19yZWN2KHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoKQogewotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPQotCQkJZGF0YSAtIG9mZnNldG9mKHN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUsIHJlc3BvbnNlKTsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gZGF0YTsKIAogCWlmICh1bmxpa2VseShhdmNfZGVidWcpKQogCQlkZWJ1Z19mY3AoZGF0YSwgbGVuZ3RoKTsKIAotCWlmIChsZW5ndGggPj0gOCAmJgotCSAgICByLT5vcGVyYW5kWzBdID09IFNGRV9WRU5ET1JfREVfQ09NUEFOWUlEXzAgJiYKLQkgICAgci0+b3BlcmFuZFsxXSA9PSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8xICYmCi0JICAgIHItPm9wZXJhbmRbMl0gPT0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMiAmJgotCSAgICByLT5vcGVyYW5kWzNdID09IFNGRV9WRU5ET1JfT1BDT0RFX1JFR0lTVEVSX1JFTU9URV9DT05UUk9MKSB7Ci0JCWlmIChyLT5yZXNwb25zZSA9PSBBVkNfUkVTUE9OU0VfQ0hBTkdFRCkgewotCQkJZmR0dl9oYW5kbGVfcmMoZmR0diwKLQkJCSAgICByLT5vcGVyYW5kWzRdIDw8IDggfCByLT5vcGVyYW5kWzVdKTsKKwlpZiAobGVuZ3RoID49IDggJiYgaXNfcmVnaXN0ZXJfcmMocikpIHsKKwkJc3dpdGNoIChyLT5yZXNwb25zZSkgeworCQljYXNlIEFWQ19SRVNQT05TRV9DSEFOR0VEOgorCQkJZmR0dl9oYW5kbGVfcmMoZmR0diwgci0+b3BlcmFuZFs0XSA8PCA4IHwgci0+b3BlcmFuZFs1XSk7CiAJCQlzY2hlZHVsZV93b3JrKCZmZHR2LT5yZW1vdGVfY3RybF93b3JrKTsKLQkJfSBlbHNlIGlmIChyLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfSU5URVJJTSkgeworCQkJYnJlYWs7CisJCWNhc2UgQVZDX1JFU1BPTlNFX0lOVEVSSU06CisJCQlpZiAoaXNfcmVnaXN0ZXJfcmMoKHZvaWQgKilmZHR2LT5hdmNfZGF0YSkpCisJCQkJZ290byB3YWtlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CiAJCQlkZXZfaW5mbyhmZHR2LT5kZXZpY2UsCiAJCQkJICJyZW1vdGUgY29udHJvbCByZXN1bHQgPSAlZFxuIiwgci0+cmVzcG9uc2UpOwogCQl9CkBAIC0yODUsOSArMjg1LDkgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JbWVtY3B5KGZkdHYtPnJlc3BvbnNlLCBkYXRhLCBsZW5ndGgpOwotCWZkdHYtPnJlc3BvbnNlX2xlbmd0aCA9IGxlbmd0aDsKLQorCW1lbWNweShmZHR2LT5hdmNfZGF0YSwgZGF0YSwgbGVuZ3RoKTsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSBsZW5ndGg7Cit3YWtlOgogCWZkdHYtPmF2Y19yZXBseV9yZWNlaXZlZCA9IHRydWU7CiAJd2FrZV91cCgmZmR0di0+YXZjX3dhaXQpOwogCkBAIC0zMTgsMTAgKzMxOCwxMSBAQAogICogdHVuaW5nIGNvbW1hbmQgZm9yIHNldHRpbmcgdGhlIHJlbGF0aXZlIExOQiBmcmVxdWVuY3kKICAqIChub3Qgc3VwcG9ydGVkIGJ5IHRoZSBBVkMgc3RhbmRhcmQpCiAgKi8KLXN0YXRpYyB2b2lkIGF2Y190dW5lcl90dW5lcXBzayhzdHJ1Y3QgZmlyZWR0diAqZmR0diwKLQkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywKLQkJCSAgICAgICBzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMpCitzdGF0aWMgaW50IGF2Y190dW5lcl90dW5lcXBzayhzdHJ1Y3QgZmlyZWR0diAqZmR0diwKKwkJCSAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogeworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisKIAljLT5vcGNvZGUgPSBBVkNfT1BDT0RFX1ZFTkRPUjsKIAogCWMtPm9wZXJhbmRbMF0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8wOwpAQCAtMzcwLDE2ICszNzEsMTggQEAKIAkJYy0+b3BlcmFuZFsxM10gPSAweDE7CiAJCWMtPm9wZXJhbmRbMTRdID0gMHhmZjsKIAkJYy0+b3BlcmFuZFsxNV0gPSAweGZmOwotCQljLT5sZW5ndGggPSAyMDsKKworCQlyZXR1cm4gMTY7CiAJfSBlbHNlIHsKLQkJYy0+bGVuZ3RoID0gMTY7CisJCXJldHVybiAxMzsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGF2Y190dW5lcl9kc2RfZHZiX2Moc3RydWN0IGZpcmVkdHYgKmZkdHYsCi0JCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMsCi0JCQkJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjKQorc3RhdGljIGludCBhdmNfdHVuZXJfZHNkX2R2Yl9jKHN0cnVjdCBmaXJlZHR2ICpmZHR2LAorCQkJICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogeworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisKIAljLT5vcGNvZGUgPSBBVkNfT1BDT0RFX0RTRDsKIAogCWMtPm9wZXJhbmRbMF0gPSAwOyAgICAvKiBzb3VyY2UgcGx1ZyAqLwpAQCAtNDQwLDE1ICs0NDMsMTQgQEAKIAljLT5vcGVyYW5kWzIwXSA9IDB4MDA7CiAJYy0+b3BlcmFuZFsyMV0gPSAweDAwOwogCi0JLyogQWRkIFBJRHMgdG8gZmlsdGVyICovCi0JYy0+bGVuZ3RoID0gQUxJR04oMjIgKyBhZGRfcGlkX2ZpbHRlcihmZHR2LCAmYy0+b3BlcmFuZFsyMl0pICsgMywgNCk7CisJcmV0dXJuIDIyICsgYWRkX3BpZF9maWx0ZXIoZmR0diwgJmMtPm9wZXJhbmRbMjJdKTsKIH0KIAotc3RhdGljIHZvaWQgYXZjX3R1bmVyX2RzZF9kdmJfdChzdHJ1Y3QgZmlyZWR0diAqZmR0diwKLQkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywKLQkJCQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMpCitzdGF0aWMgaW50IGF2Y190dW5lcl9kc2RfZHZiX3Qoc3RydWN0IGZpcmVkdHYgKmZkdHYsCisJCQkgICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCiB7CiAJc3RydWN0IGR2Yl9vZmRtX3BhcmFtZXRlcnMgKm9mZG0gPSAmcGFyYW1zLT51Lm9mZG07CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKIAogCWMtPm9wY29kZSA9IEFWQ19PUENPREVfRFNEOwogCkBAIC01NDMsNTUgKzU0NSw1OCBAQAogCWMtPm9wZXJhbmRbMTVdID0gMHgwMDsgLyogbmV0d29ya19JRFswXSAqLwogCWMtPm9wZXJhbmRbMTZdID0gMHgwMDsgLyogbmV0d29ya19JRFsxXSAqLwogCi0JLyogQWRkIFBJRHMgdG8gZmlsdGVyICovCi0JYy0+bGVuZ3RoID0gQUxJR04oMTcgKyBhZGRfcGlkX2ZpbHRlcihmZHR2LCAmYy0+b3BlcmFuZFsxN10pICsgMywgNCk7CisJcmV0dXJuIDE3ICsgYWRkX3BpZF9maWx0ZXIoZmR0diwgJmMtPm9wZXJhbmRbMTddKTsKIH0KIAogaW50IGF2Y190dW5lcl9kc2Qoc3RydWN0IGZpcmVkdHYgKmZkdHYsCiAJCSAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsgLyogRklYTUU6IHVudXNlZCAqLworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHBvcywgcmV0OwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwogCiAJc3dpdGNoIChmZHR2LT50eXBlKSB7CiAJY2FzZSBGSVJFRFRWX0RWQl9TOgotCWNhc2UgRklSRURUVl9EVkJfUzI6IGF2Y190dW5lcl90dW5lcXBzayhmZHR2LCBwYXJhbXMsIGMpOyBicmVhazsKLQljYXNlIEZJUkVEVFZfRFZCX0M6IGF2Y190dW5lcl9kc2RfZHZiX2MoZmR0diwgcGFyYW1zLCBjKTsgYnJlYWs7Ci0JY2FzZSBGSVJFRFRWX0RWQl9UOiBhdmNfdHVuZXJfZHNkX2R2Yl90KGZkdHYsIHBhcmFtcywgYyk7IGJyZWFrOworCWNhc2UgRklSRURUVl9EVkJfUzI6IHBvcyA9IGF2Y190dW5lcl90dW5lcXBzayhmZHR2LCBwYXJhbXMpOyBicmVhazsKKwljYXNlIEZJUkVEVFZfRFZCX0M6IHBvcyA9IGF2Y190dW5lcl9kc2RfZHZiX2MoZmR0diwgcGFyYW1zKTsgYnJlYWs7CisJY2FzZSBGSVJFRFRWX0RWQl9UOiBwb3MgPSBhdmNfdHVuZXJfZHNkX2R2Yl90KGZkdHYsIHBhcmFtcyk7IGJyZWFrOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KKwlwYWRfb3BlcmFuZHMoYywgcG9zKTsKIAotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQotCW1zbGVlcCg1MDApOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IEFMSUdOKDMgKyBwb3MsIDQpOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKICNpZiAwCi0JLyogRklYTUU6ICovCi0JLyogdTggKnN0YXR1cyB3YXMgYW4gb3V0LXBhcmFtZXRlciBvZiBhdmNfdHVuZXJfZHNkLCB1bnVzZWQgYnkgY2FsbGVyICovCisJLyoKKwkgKiBGSVhNRToKKwkgKiB1OCAqc3RhdHVzIHdhcyBhbiBvdXQtcGFyYW1ldGVyIG9mIGF2Y190dW5lcl9kc2QsIHVudXNlZCBieSBjYWxsZXIuCisJICogQ2hlY2sgZm9yIEFWQ19SRVNQT05TRV9BQ0NFUFRFRCBoZXJlIGluc3RlYWQ/CisJICovCiAJaWYgKHN0YXR1cykKIAkJKnN0YXR1cyA9IHItPm9wZXJhbmRbMl07CiAjZW5kaWYKLQlyZXR1cm4gMDsKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKKwlpZiAocmV0ID09IDApCisJCW1zbGVlcCg1MDApOworCisJcmV0dXJuIHJldDsKIH0KIAogaW50IGF2Y190dW5lcl9zZXRfcGlkcyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdW5zaWduZWQgY2hhciBwaWRjLCB1MTYgcGlkW10pCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsgLyogRklYTUU6IHVudXNlZCAqLwotCWludCBwb3MsIGs7CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlpbnQgcmV0LCBwb3MsIGs7CiAKIAlpZiAocGlkYyA+IDE2ICYmIHBpZGMgIT0gMHhmZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC02MTQsMjQgKzYxOSwyNyBAQAogCQkJYy0+b3BlcmFuZFtwb3MrK10gPSAweDAwOyAvKiB0YWJsZUlEICovCiAJCQljLT5vcGVyYW5kW3BvcysrXSA9IDB4MDA7IC8qIGZpbHRlcl9sZW5ndGggKi8KIAkJfQorCXBhZF9vcGVyYW5kcyhjLCBwb3MpOwogCi0JYy0+bGVuZ3RoID0gQUxJR04oMyArIHBvcywgNCk7CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gQUxJR04oMyArIHBvcywgNCk7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOwogCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlPyAqLwogCi0JbXNsZWVwKDUwKTsKLQlyZXR1cm4gMDsKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKKwlpZiAocmV0ID09IDApCisJCW1zbGVlcCg1MCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX3R1bmVyX2dldF90cyhzdHJ1Y3QgZmlyZWR0diAqZmR0dikKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOyAvKiBGSVhNRTogdW51c2VkICovCi0JaW50IHNsOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldCwgc2w7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC02NDYsMjYgKzY1NCwzMyBAQAogCWMtPm9wZXJhbmRbNF0gPSAweDAwOwkvKiBhbnRlbm5hIG51bWJlciAqLwogCWMtPm9wZXJhbmRbNV0gPSAweDA7IAkvKiBzeXN0ZW1fc3BlY2lmaWNfc2VhcmNoX2ZsYWdzICovCiAJYy0+b3BlcmFuZFs2XSA9IHNsOwkvKiBzeXN0ZW1fc3BlY2lmaWNfbXVsdGlwbGV4IHNlbGVjdGlvbl9sZW5ndGggKi8KLQljLT5vcGVyYW5kWzddID0gMHgwMDsJLyogdmFsaWRfZmxhZ3MgWzBdICovCi0JYy0+b3BlcmFuZFs4XSA9IDB4MDA7CS8qIHZhbGlkX2ZsYWdzIFsxXSAqLwotCWMtPm9wZXJhbmRbNyArIHNsXSA9IDB4MDA7IC8qIG5yX29mX2RzaXRfc2VsX3NwZWNzIChhbHdheXMgMCkgKi8KKwkvKgorCSAqIG9wZXJhbmRbN106IHZhbGlkX2ZsYWdzWzBdCisJICogb3BlcmFuZFs4XTogdmFsaWRfZmxhZ3NbMV0KKwkgKiBvcGVyYW5kWzcgKyBzbF06IG5yX29mX2RzaXRfc2VsX3NwZWNzIChhbHdheXMgMCkKKwkgKi8KKwljbGVhcl9vcGVyYW5kcyhjLCA3LCAyNCk7CiAKLQljLT5sZW5ndGggPSBmZHR2LT50eXBlID09IEZJUkVEVFZfRFZCX1QgPyAyNCA6IDI4OworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IGZkdHYtPnR5cGUgPT0gRklSRURUVl9EVkJfVCA/IDI0IDogMjg7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOwogCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlPyAqLwogCi0JbXNsZWVwKDI1MCk7Ci0JcmV0dXJuIDA7CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCisJaWYgKHJldCA9PSAwKQorCQltc2xlZXAoMjUwKTsKKworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfaWRlbnRpZnlfc3VidW5pdChzdHJ1Y3QgZmlyZWR0diAqZmR0dikKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9DT05UUk9MOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTY3OCwzMSArNjkzLDM0IEBACiAJYy0+b3BlcmFuZFs0XSA9IDB4MDg7IC8qIGxlbmd0aCBsb3dieXRlICAqLwogCWMtPm9wZXJhbmRbNV0gPSAweDAwOyAvKiBvZmZzZXQgaGlnaGJ5dGUgKi8KIAljLT5vcGVyYW5kWzZdID0gMHgwZDsgLyogb2Zmc2V0IGxvd2J5dGUgICovCisJY2xlYXJfb3BlcmFuZHMoYywgNywgOCk7IC8qIHBhZGRpbmcgKi8KIAotCWMtPmxlbmd0aCA9IDEyOwotCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IDEyOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKIAlpZiAoKHItPnJlc3BvbnNlICE9IEFWQ19SRVNQT05TRV9TVEFCTEUgJiYKIAkgICAgIHItPnJlc3BvbnNlICE9IEFWQ19SRVNQT05TRV9BQ0NFUFRFRCkgfHwKIAkgICAgKHItPm9wZXJhbmRbM10gPDwgOCkgKyByLT5vcGVyYW5kWzRdICE9IDgpIHsKIAkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJjYW5ub3QgcmVhZCBzdWJ1bml0IGlkZW50aWZpZXJcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKIAl9Ci0JcmV0dXJuIDA7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0KIAogI2RlZmluZSBTSVpFT0ZfQU5URU5OQV9JTlBVVF9JTkZPIDIyCiAKIGludCBhdmNfdHVuZXJfc3RhdHVzKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCBzdHJ1Y3QgZmlyZWR0dl90dW5lcl9zdGF0dXMgKnN0YXQpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsKLQlpbnQgbGVuZ3RoOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IGxlbmd0aCwgcmV0OwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtNzEwLDI3ICs3MjgsMzAgQEAKIAogCWMtPm9wZXJhbmRbMF0gPSBERVNDUklQVE9SX1RVTkVSX1NUQVRVUzsKIAljLT5vcGVyYW5kWzFdID0gMHhmZjsJLyogcmVhZF9yZXN1bHRfc3RhdHVzICovCi0JYy0+b3BlcmFuZFsyXSA9IDB4MDA7CS8qIHJlc2VydmVkICovCi0JYy0+b3BlcmFuZFszXSA9IDA7CS8qIFNJWkVPRl9BTlRFTk5BX0lOUFVUX0lORk8gPj4gODsgKi8KLQljLT5vcGVyYW5kWzRdID0gMDsJLyogU0laRU9GX0FOVEVOTkFfSU5QVVRfSU5GTyAmIDB4ZmY7ICovCi0JYy0+b3BlcmFuZFs1XSA9IDB4MDA7Ci0JYy0+b3BlcmFuZFs2XSA9IDB4MDA7CisJLyoKKwkgKiBvcGVyYW5kWzJdOiByZXNlcnZlZAorCSAqIG9wZXJhbmRbM106IFNJWkVPRl9BTlRFTk5BX0lOUFVUX0lORk8gPj4gOAorCSAqIG9wZXJhbmRbNF06IFNJWkVPRl9BTlRFTk5BX0lOUFVUX0lORk8gJiAweGZmCisJICovCisJY2xlYXJfb3BlcmFuZHMoYywgMiwgMzEpOwogCi0JYy0+bGVuZ3RoID0gMTI7Ci0KLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gMTI7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAogCWlmIChyLT5yZXNwb25zZSAhPSBBVkNfUkVTUE9OU0VfU1RBQkxFICYmCiAJICAgIHItPnJlc3BvbnNlICE9IEFWQ19SRVNQT05TRV9BQ0NFUFRFRCkgewogCQlkZXZfZXJyKGZkdHYtPmRldmljZSwgImNhbm5vdCByZWFkIHR1bmVyIHN0YXR1c1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKIAl9CiAKIAlsZW5ndGggPSByLT5vcGVyYW5kWzldOwogCWlmIChyLT5vcGVyYW5kWzFdICE9IDB4MTAgfHwgbGVuZ3RoICE9IFNJWkVPRl9BTlRFTk5BX0lOUFVUX0lORk8pIHsKIAkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJnb3QgaW52YWxpZCB0dW5lciBzdGF0dXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCiAJc3RhdC0+YWN0aXZlX3N5c3RlbQkJPSByLT5vcGVyYW5kWzEwXTsKQEAgLTc2NiwyMCArNzg3LDIxIEBACiAJc3RhdC0+Y2FfZHZiX2ZsYWcJCT0gci0+b3BlcmFuZFszMV0gPj4gMyAmIDE7CiAJc3RhdC0+Y2FfZXJyb3JfZmxhZwkJPSByLT5vcGVyYW5kWzMxXSA+PiAyICYgMTsKIAlzdGF0LT5jYV9pbml0aWFsaXphdGlvbl9zdGF0dXMJPSByLT5vcGVyYW5kWzMxXSA+PiAxICYgMTsKK291dDoKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX2xuYl9jb250cm9sKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCBjaGFyIHZvbHRhZ2UsIGNoYXIgYnVyc3QsCiAJCSAgICBjaGFyIGNvbnR0b25lLCBjaGFyIG5yZGlzZXEsCiAJCSAgICBzdHJ1Y3QgZHZiX2Rpc2VxY19tYXN0ZXJfY21kICpkaXNlcWNtZCkKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOwotCWludCBpLCBqLCBrOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHBvcywgaiwgaywgcmV0OwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX0NPTlRST0w7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtNzg5LDQxICs4MTEsNDEgQEAKIAljLT5vcGVyYW5kWzFdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMTsKIAljLT5vcGVyYW5kWzJdID0gU0ZFX1ZFTkRPUl9ERV9DT01QQU5ZSURfMjsKIAljLT5vcGVyYW5kWzNdID0gU0ZFX1ZFTkRPUl9PUENPREVfTE5CX0NPTlRST0w7Ci0KIAljLT5vcGVyYW5kWzRdID0gdm9sdGFnZTsKIAljLT5vcGVyYW5kWzVdID0gbnJkaXNlcTsKIAotCWkgPSA2OwotCisJcG9zID0gNjsKIAlmb3IgKGogPSAwOyBqIDwgbnJkaXNlcTsgaisrKSB7Ci0JCWMtPm9wZXJhbmRbaSsrXSA9IGRpc2VxY21kW2pdLm1zZ19sZW47CisJCWMtPm9wZXJhbmRbcG9zKytdID0gZGlzZXFjbWRbal0ubXNnX2xlbjsKIAogCQlmb3IgKGsgPSAwOyBrIDwgZGlzZXFjbWRbal0ubXNnX2xlbjsgaysrKQotCQkJYy0+b3BlcmFuZFtpKytdID0gZGlzZXFjbWRbal0ubXNnW2tdOworCQkJYy0+b3BlcmFuZFtwb3MrK10gPSBkaXNlcWNtZFtqXS5tc2dba107CiAJfQorCWMtPm9wZXJhbmRbcG9zKytdID0gYnVyc3Q7CisJYy0+b3BlcmFuZFtwb3MrK10gPSBjb250dG9uZTsKKwlwYWRfb3BlcmFuZHMoYywgcG9zKTsKIAotCWMtPm9wZXJhbmRbaSsrXSA9IGJ1cnN0OwotCWMtPm9wZXJhbmRbaSsrXSA9IGNvbnR0b25lOwotCi0JYy0+bGVuZ3RoID0gQUxJR04oMyArIGksIDQpOwotCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IEFMSUdOKDMgKyBwb3MsIDQpOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKIAlpZiAoci0+cmVzcG9uc2UgIT0gQVZDX1JFU1BPTlNFX0FDQ0VQVEVEKSB7CiAJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiTE5CIGNvbnRyb2wgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CiAJfQorb3V0OgorCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfcmVnaXN0ZXJfcmVtb3RlX2NvbnRyb2woc3RydWN0IGZpcmVkdHYgKmZkdHYpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9OT1RJRlk7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVU5JVCB8IDc7CkBAIC04MzMsMTAgKzg1NSwxNiBAQAogCWMtPm9wZXJhbmRbMV0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8xOwogCWMtPm9wZXJhbmRbMl0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8yOwogCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9SRUdJU1RFUl9SRU1PVEVfQ09OVFJPTDsKKwljLT5vcGVyYW5kWzRdID0gMDsgLyogcGFkZGluZyAqLwogCi0JYy0+bGVuZ3RoID0gODsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSA4OworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKIAotCXJldHVybiBhdmNfd3JpdGUoZmR0diwgYywgTlVMTCk7CisJLyogRklYTUU6IGNoZWNrIHJlc3BvbnNlIGNvZGU/ICovCisKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiB2b2lkIGF2Y19yZW1vdGVfY3RybF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTg1MSwxMSArODc5LDEwIEBACiAjaWYgMCAvKiBGSVhNRTogdW51c2VkICovCiBpbnQgYXZjX3R1bmVyX2hvc3QyY2Eoc3RydWN0IGZpcmVkdHYgKmZkdHYpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsgLyogRklYTUU6IHVudXNlZCAqLworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9DT05UUk9MOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTg2NywxNSArODk0LDE2IEBACiAJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0hPU1QyQ0E7CiAJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KIAljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfQVBQTElDQVRJT05fSU5GTzsgLyogY2EgdGFnICovCi0JYy0+b3BlcmFuZFs2XSA9IDA7IC8qIG1vcmUvbGFzdCAqLwotCWMtPm9wZXJhbmRbN10gPSAwOyAvKiBsZW5ndGggKi8KKwljbGVhcl9vcGVyYW5kcyhjLCA2LCA4KTsKIAotCWMtPmxlbmd0aCA9IDEyOworCWZkdHYtPmF2Y19kYXRhX2xlbmd0aCA9IDEyOworCXJldCA9IGF2Y193cml0ZShmZHR2KTsKIAotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwkvKiBGSVhNRTogY2hlY2sgcmVzcG9uc2UgY29kZT8gKi8KIAotCXJldHVybiAwOworCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiAjZW5kaWYKIApAQCAtOTA2LDEyICs5MzQsMTEgQEAKIAogaW50IGF2Y19jYV9hcHBfaW5mbyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgY2hhciAqYXBwX2luZm8sIHVuc2lnbmVkIGludCAqbGVuKQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7Ci0JaW50IHBvczsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCBwb3MsIHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9TVEFUVVM7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtOTIzLDExICs5NTAsMTIgQEAKIAljLT5vcGVyYW5kWzNdID0gU0ZFX1ZFTkRPUl9PUENPREVfQ0EySE9TVDsKIAljLT5vcGVyYW5kWzRdID0gMDsgLyogc2xvdCAqLwogCWMtPm9wZXJhbmRbNV0gPSBTRkVfVkVORE9SX1RBR19DQV9BUFBMSUNBVElPTl9JTkZPOyAvKiBjYSB0YWcgKi8KKwljbGVhcl9vcGVyYW5kcyhjLCA2LCBMQVNUX09QRVJBTkQpOwogCi0JYy0+bGVuZ3RoID0gMTI7Ci0KLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gMTI7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAogCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlIGFuZCB2YWxpZGF0ZSByZXNwb25zZSBkYXRhICovCiAKQEAgLTkzOSwxOCArOTY3LDE5IEBACiAJYXBwX2luZm9bNF0gPSAweDAxOwogCW1lbWNweSgmYXBwX2luZm9bNV0sICZyLT5vcGVyYW5kW3Bvc10sIDUgKyByLT5vcGVyYW5kW3BvcyArIDRdKTsKIAkqbGVuID0gYXBwX2luZm9bM10gKyA0Oworb3V0OgorCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfY2FfaW5mbyhzdHJ1Y3QgZmlyZWR0diAqZmR0diwgY2hhciAqYXBwX2luZm8sIHVuc2lnbmVkIGludCAqbGVuKQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7Ci0JaW50IHBvczsKKwlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWZkdHYtPmF2Y19kYXRhOworCWludCBwb3MsIHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9TVEFUVVM7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtOTYyLDExICs5OTEsMTQgQEAKIAljLT5vcGVyYW5kWzNdID0gU0ZFX1ZFTkRPUl9PUENPREVfQ0EySE9TVDsKIAljLT5vcGVyYW5kWzRdID0gMDsgLyogc2xvdCAqLwogCWMtPm9wZXJhbmRbNV0gPSBTRkVfVkVORE9SX1RBR19DQV9BUFBMSUNBVElPTl9JTkZPOyAvKiBjYSB0YWcgKi8KKwljbGVhcl9vcGVyYW5kcyhjLCA2LCBMQVNUX09QRVJBTkQpOwogCi0JYy0+bGVuZ3RoID0gMTI7CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gMTI7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwkvKiBGSVhNRTogY2hlY2sgcmVzcG9uc2UgY29kZSBhbmQgdmFsaWRhdGUgcmVzcG9uc2UgZGF0YSAqLwogCiAJcG9zID0gZ2V0X2NhX29iamVjdF9wb3Mocik7CiAJYXBwX2luZm9bMF0gPSAoRU41MDIyMV9UQUdfQ0FfSU5GTyA+PiAxNikgJiAweGZmOwpAQCAtOTc2LDE3ICsxMDA4LDE4IEBACiAJYXBwX2luZm9bNF0gPSByLT5vcGVyYW5kW3BvcyArIDBdOwogCWFwcF9pbmZvWzVdID0gci0+b3BlcmFuZFtwb3MgKyAxXTsKIAkqbGVuID0gYXBwX2luZm9bM10gKyA0Oworb3V0OgorCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfY2FfcmVzZXQoc3RydWN0IGZpcmVkdHYgKmZkdHYpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSldOwotCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopYnVmZmVyOwotCXN0cnVjdCBhdmNfcmVzcG9uc2VfZnJhbWUgKnIgPSAodm9pZCAqKWJ1ZmZlcjsgLyogRklYTUU6IHVudXNlZCAqLworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9DT05UUk9MOwogCWMtPnN1YnVuaXQgPSBBVkNfU1VCVU5JVF9UWVBFX1RVTkVSIHwgZmR0di0+c3VidW5pdDsKQEAgLTEwMDIsMTkgKzEwMzUsMjAgQEAKIAljLT5vcGVyYW5kWzddID0gMTsgLyogbGVuZ3RoICovCiAJYy0+b3BlcmFuZFs4XSA9IDA7IC8qIGZvcmNlIGhhcmR3YXJlIHJlc2V0ICovCiAKLQljLT5sZW5ndGggPSAxMjsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSAxMjsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CiAKLQlpZiAoYXZjX3dyaXRlKGZkdHYsIGMsIHIpIDwgMCkKLQkJcmV0dXJuIC1FSU87CisJLyogRklYTUU6IGNoZWNrIHJlc3BvbnNlIGNvZGU/ICovCiAKLQlyZXR1cm4gMDsKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgYXZjX2NhX3BtdChzdHJ1Y3QgZmlyZWR0diAqZmR0diwgY2hhciAqbXNnLCBpbnQgbGVuZ3RoKQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKIAlpbnQgbGlzdF9tYW5hZ2VtZW50OwogCWludCBwcm9ncmFtX2luZm9fbGVuZ3RoOwogCWludCBwbXRfY21kX2lkOwpAQCAtMTAyMiwxMSArMTA1NiwxMiBAQAogCWludCB3cml0ZV9wb3M7CiAJaW50IGVzX2luZm9fbGVuZ3RoOwogCWludCBjcmMzMl9jc3VtOworCWludCByZXQ7CiAKIAlpZiAodW5saWtlbHkoYXZjX2RlYnVnICYgQVZDX0RFQlVHX0FQUExJQ0FUSU9OX1BNVCkpCiAJCWRlYnVnX3BtdChtc2csIGxlbmd0aCk7CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCWMtPmN0eXBlICAgPSBBVkNfQ1RZUEVfQ09OVFJPTDsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC0xMDU4LDcgKzEwOTMsNyBAQAogCiAJYy0+b3BlcmFuZFsxMl0gPSAweDAyOyAvKiBUYWJsZSBpZD0yICovCiAJYy0+b3BlcmFuZFsxM10gPSAweDgwOyAvKiBTZWN0aW9uIHN5bnRheCArIGxlbmd0aCAqLwotCS8qIGMtPm9wZXJhbmRbMTRdID0gWFhYcHJvZ3JhbV9pbmZvX2xlbmd0aCArIDEyOyAqLworCiAJYy0+b3BlcmFuZFsxNV0gPSBtc2dbMV07IC8qIFByb2dyYW0gbnVtYmVyICovCiAJYy0+b3BlcmFuZFsxNl0gPSBtc2dbMl07CiAJYy0+b3BlcmFuZFsxN10gPSAweDAxOyAvKiBWZXJzaW9uIG51bWJlcj0wICsgY3VycmVudC9uZXh0PTEgKi8KQEAgLTExMDYsMTIgKzExNDEsNyBAQAogCQkJd3JpdGVfcG9zICs9IGVzX2luZm9fbGVuZ3RoOwogCQl9CiAJfQotCi0JLyogQ1JDICovCi0JYy0+b3BlcmFuZFt3cml0ZV9wb3MrK10gPSAweDAwOwotCWMtPm9wZXJhbmRbd3JpdGVfcG9zKytdID0gMHgwMDsKLQljLT5vcGVyYW5kW3dyaXRlX3BvcysrXSA9IDB4MDA7Ci0JYy0+b3BlcmFuZFt3cml0ZV9wb3MrK10gPSAweDAwOworCXdyaXRlX3BvcyArPSA0OyAvKiBDUkMgKi8KIAogCWMtPm9wZXJhbmRbN10gPSAweDgyOwogCWMtPm9wZXJhbmRbOF0gPSAod3JpdGVfcG9zIC0gMTApID4+IDg7CkBAIC0xMTIzLDI4ICsxMTUzLDMxIEBACiAJYy0+b3BlcmFuZFt3cml0ZV9wb3MgLSAzXSA9IChjcmMzMl9jc3VtID4+IDE2KSAmIDB4ZmY7CiAJYy0+b3BlcmFuZFt3cml0ZV9wb3MgLSAyXSA9IChjcmMzMl9jc3VtID4+ICA4KSAmIDB4ZmY7CiAJYy0+b3BlcmFuZFt3cml0ZV9wb3MgLSAxXSA9IChjcmMzMl9jc3VtID4+ICAwKSAmIDB4ZmY7CisJcGFkX29wZXJhbmRzKGMsIHdyaXRlX3Bvcyk7CiAKLQljLT5sZW5ndGggPSBBTElHTigzICsgd3JpdGVfcG9zLCA0KTsKLQotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSBBTElHTigzICsgd3JpdGVfcG9zLCA0KTsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCiAJaWYgKHItPnJlc3BvbnNlICE9IEFWQ19SRVNQT05TRV9BQ0NFUFRFRCkgewogCQlkZXZfZXJyKGZkdHYtPmRldmljZSwKIAkJCSJDQSBQTVQgZmFpbGVkIHdpdGggcmVzcG9uc2UgMHgleFxuIiwgci0+cmVzcG9uc2UpOwotCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0ID0gLUVGQVVMVDsKIAl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogaW50IGF2Y19jYV9nZXRfdGltZV9kYXRlKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCBpbnQgKmludGVydmFsKQogewotCWNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUpXTsKLQlzdHJ1Y3QgYXZjX2NvbW1hbmRfZnJhbWUgKmMgPSAodm9pZCAqKWJ1ZmZlcjsKLQlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilidWZmZXI7CisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlzdHJ1Y3QgYXZjX3Jlc3BvbnNlX2ZyYW1lICpyID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlpbnQgcmV0OwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX1NUQVRVUzsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC0xMTU2LDI4ICsxMTg5LDI4IEBACiAJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0NBMkhPU1Q7CiAJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KIAljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfREFURV9USU1FOyAvKiBjYSB0YWcgKi8KLQljLT5vcGVyYW5kWzZdID0gMDsgLyogbW9yZS9sYXN0ICovCi0JYy0+b3BlcmFuZFs3XSA9IDA7IC8qIGxlbmd0aCAqLworCWNsZWFyX29wZXJhbmRzKGMsIDYsIExBU1RfT1BFUkFORCk7CiAKLQljLT5sZW5ndGggPSAxMjsKLQotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSAxMjsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCiAJLyogRklYTUU6IGNoZWNrIHJlc3BvbnNlIGNvZGUgYW5kIHZhbGlkYXRlIHJlc3BvbnNlIGRhdGEgKi8KIAogCSppbnRlcnZhbCA9IHItPm9wZXJhbmRbZ2V0X2NhX29iamVjdF9wb3MocildOworb3V0OgorCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIGludCBhdmNfY2FfZW50ZXJfbWVudShzdHJ1Y3QgZmlyZWR0diAqZmR0dikKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOyAvKiBGSVhNRTogdW51c2VkICovCisJc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilmZHR2LT5hdmNfZGF0YTsKKwlpbnQgcmV0OwogCi0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCW11dGV4X2xvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAljLT5jdHlwZSAgID0gQVZDX0NUWVBFX1NUQVRVUzsKIAljLT5zdWJ1bml0ID0gQVZDX1NVQlVOSVRfVFlQRV9UVU5FUiB8IGZkdHYtPnN1YnVuaXQ7CkBAIC0xMTg5LDI0ICsxMjIyLDI1IEBACiAJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX0hPU1QyQ0E7CiAJYy0+b3BlcmFuZFs0XSA9IDA7IC8qIHNsb3QgKi8KIAljLT5vcGVyYW5kWzVdID0gU0ZFX1ZFTkRPUl9UQUdfQ0FfRU5URVJfTUVOVTsKLQljLT5vcGVyYW5kWzZdID0gMDsgLyogbW9yZS9sYXN0ICovCi0JYy0+b3BlcmFuZFs3XSA9IDA7IC8qIGxlbmd0aCAqLworCWNsZWFyX29wZXJhbmRzKGMsIDYsIDgpOwogCi0JYy0+bGVuZ3RoID0gMTI7CisJZmR0di0+YXZjX2RhdGFfbGVuZ3RoID0gMTI7CisJcmV0ID0gYXZjX3dyaXRlKGZkdHYpOwogCi0JaWYgKGF2Y193cml0ZShmZHR2LCBjLCByKSA8IDApCi0JCXJldHVybiAtRUlPOworCS8qIEZJWE1FOiBjaGVjayByZXNwb25zZSBjb2RlPyAqLwogCi0JcmV0dXJuIDA7CisJbXV0ZXhfdW5sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0KIAogaW50IGF2Y19jYV9nZXRfbW1pKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCBjaGFyICptbWlfb2JqZWN0LCB1bnNpZ25lZCBpbnQgKmxlbikKIHsKLQljaGFyIGJ1ZmZlcltzaXplb2Yoc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lKV07Ci0Jc3RydWN0IGF2Y19jb21tYW5kX2ZyYW1lICpjID0gKHZvaWQgKilidWZmZXI7Ci0Jc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopYnVmZmVyOworCXN0cnVjdCBhdmNfY29tbWFuZF9mcmFtZSAqYyA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJc3RydWN0IGF2Y19yZXNwb25zZV9mcmFtZSAqciA9ICh2b2lkICopZmR0di0+YXZjX2RhdGE7CisJaW50IHJldDsKIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwogCiAJYy0+Y3R5cGUgICA9IEFWQ19DVFlQRV9TVEFUVVM7CiAJYy0+c3VidW5pdCA9IEFWQ19TVUJVTklUX1RZUEVfVFVORVIgfCBmZHR2LT5zdWJ1bml0OwpAQCAtMTIxOCwyMCArMTI1MiwyMSBAQAogCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9DQTJIT1NUOwogCWMtPm9wZXJhbmRbNF0gPSAwOyAvKiBzbG90ICovCiAJYy0+b3BlcmFuZFs1XSA9IFNGRV9WRU5ET1JfVEFHX0NBX01NSTsKLQljLT5vcGVyYW5kWzZdID0gMDsgLyogbW9yZS9sYXN0ICovCi0JYy0+b3BlcmFuZFs3XSA9IDA7IC8qIGxlbmd0aCAqLworCWNsZWFyX29wZXJhbmRzKGMsIDYsIExBU1RfT1BFUkFORCk7CiAKLQljLT5sZW5ndGggPSAxMjsKLQotCWlmIChhdmNfd3JpdGUoZmR0diwgYywgcikgPCAwKQotCQlyZXR1cm4gLUVJTzsKKwlmZHR2LT5hdmNfZGF0YV9sZW5ndGggPSAxMjsKKwlyZXQgPSBhdmNfd3JpdGUoZmR0dik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCiAJLyogRklYTUU6IGNoZWNrIHJlc3BvbnNlIGNvZGUgYW5kIHZhbGlkYXRlIHJlc3BvbnNlIGRhdGEgKi8KIAogCSpsZW4gPSBnZXRfY2Ffb2JqZWN0X2xlbmd0aChyKTsKIAltZW1jcHkobW1pX29iamVjdCwgJnItPm9wZXJhbmRbZ2V0X2NhX29iamVjdF9wb3MocildLCAqbGVuKTsKK291dDoKKwltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAjZGVmaW5lIENNUF9PVVRQVVRfUExVR19DT05UUk9MX1JFR18wCTB4ZmZmZmYwMDAwOTA0VUxMCkBAIC0xMjQwLDE0ICsxMjc1LDE0IEBACiB7CiAJaW50IHJldDsKIAotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmZkdHYtPmF2Y19tdXRleCkpCi0JCXJldHVybiAtRUlOVFI7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAogCXJldCA9IGZkdHYtPmJhY2tlbmQtPnJlYWQoZmR0diwgYWRkciwgZGF0YSk7CiAJaWYgKHJldCA8IDApCiAJCWRldl9lcnIoZmR0di0+ZGV2aWNlLCAiQ01QOiByZWFkIEkvTyBlcnJvclxuIik7CiAKIAltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjU1LDE0ICsxMjkwLDE5IEBACiB7CiAJaW50IHJldDsKIAotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmZkdHYtPmF2Y19tdXRleCkpCi0JCXJldHVybiAtRUlOVFI7CisJbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKIAotCXJldCA9IGZkdHYtPmJhY2tlbmQtPmxvY2soZmR0diwgYWRkciwgZGF0YSk7CisJLyogZGF0YVtdIGlzIHN0YWNrLWFsbG9jYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSBETUEtbWFwcGVkLiAqLworCW1lbWNweShmZHR2LT5hdmNfZGF0YSwgZGF0YSwgOCk7CisKKwlyZXQgPSBmZHR2LT5iYWNrZW5kLT5sb2NrKGZkdHYsIGFkZHIsIGZkdHYtPmF2Y19kYXRhKTsKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJDTVA6IGxvY2sgSS9PIGVycm9yXG4iKTsKKwllbHNlCisJCW1lbWNweShkYXRhLCBmZHR2LT5hdmNfZGF0YSwgOCk7CiAKIAltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CisKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1kdmIuYwppbmRleCBmYzk5OTZjLi4wNzllOGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZHZiLmMKQEAgLTI3Nyw3ICsyNzcsNiBAQAogCiAJbXV0ZXhfaW5pdCgmZmR0di0+YXZjX211dGV4KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZmZHR2LT5hdmNfd2FpdCk7Ci0JZmR0di0+YXZjX3JlcGx5X3JlY2VpdmVkID0gdHJ1ZTsKIAltdXRleF9pbml0KCZmZHR2LT5kZW11eF9tdXRleCk7CiAJSU5JVF9XT1JLKCZmZHR2LT5yZW1vdGVfY3RybF93b3JrLCBhdmNfcmVtb3RlX2N0cmxfd29yayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZncuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZncuYwppbmRleCA2MjIzYmYwLi43YTNkZTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZ3LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mdy5jCkBAIC00MSw3ICs0MSw3IEBACiAJcmV0dXJuIHJjb2RlICE9IFJDT0RFX0NPTVBMRVRFID8gLUVJTyA6IDA7CiB9CiAKLXN0YXRpYyBpbnQgbm9kZV9sb2NrKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgX19iZTMyIGRhdGFbXSkKK3N0YXRpYyBpbnQgbm9kZV9sb2NrKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgdm9pZCAqZGF0YSkKIHsKIAlyZXR1cm4gbm9kZV9yZXEoZmR0diwgYWRkciwgZGF0YSwgOCwgVENPREVfTE9DS19DT01QQVJFX1NXQVApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di5oCmluZGV4IDM1MDgwZGIuLjc4Y2MyOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LmgKQEAgLTczLDcgKzczLDcgQEAKIHN0cnVjdCBmaXJlZHR2OwogCiBzdHJ1Y3QgZmlyZWR0dl9iYWNrZW5kIHsKLQlpbnQgKCpsb2NrKShzdHJ1Y3QgZmlyZWR0diAqZmR0diwgdTY0IGFkZHIsIF9fYmUzMiBkYXRhW10pOworCWludCAoKmxvY2spKHN0cnVjdCBmaXJlZHR2ICpmZHR2LCB1NjQgYWRkciwgdm9pZCAqZGF0YSk7CiAJaW50ICgqcmVhZCkoc3RydWN0IGZpcmVkdHYgKmZkdHYsIHU2NCBhZGRyLCB2b2lkICpkYXRhKTsKIAlpbnQgKCp3cml0ZSkoc3RydWN0IGZpcmVkdHYgKmZkdHYsIHU2NCBhZGRyLCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKIAlpbnQgKCpzdGFydF9pc28pKHN0cnVjdCBmaXJlZHR2ICpmZHR2KTsKQEAgLTExNCw4ICsxMTQsOCBAQAogCXVuc2lnbmVkIGxvbmcJCWNoYW5uZWxfYWN0aXZlOwogCXUxNgkJCWNoYW5uZWxfcGlkWzE2XTsKIAotCXNpemVfdAkJCXJlc3BvbnNlX2xlbmd0aDsKLQl1OAkJCXJlc3BvbnNlWzUxMl07CisJaW50CQkJYXZjX2RhdGFfbGVuZ3RoOworCXU4CQkJYXZjX2RhdGFbNTEyXTsKIH07CiAKIC8qIGZpcmVkdHYtMTM5NC5jICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYWY5MDEzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYWY5MDEzLmgKaW5kZXggMjhiOTBjOS4uZTkwZmE5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuaApAQCAtNDQsNiArNDQsNyBAQAogCUFGOTAxM19UVU5FUl9NVDIwNjBfMiAgID0gMTQ3LCAvKiBNaWNyb3R1bmUgKi8KIAlBRjkwMTNfVFVORVJfVERBMTgyNzEgICA9IDE1NiwgLyogTlhQICovCiAJQUY5MDEzX1RVTkVSX1FUMTAxMEEgICAgPSAxNjIsIC8qIFF1YW50ZWsgKi8KKwlBRjkwMTNfVFVORVJfVERBMTgyMTggICA9IDE3OSwgLyogTlhQICovCiB9OwogCiAvKiBBRjkwMTMvNSBHUElPcyAobW9zdGx5IGd1ZXNzZWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXRibTg4MzAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdGJtODgzMC5jCmluZGV4IDU5ODgxYTUuLjQzYWFjMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdGJtODgzMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdGJtODgzMC5jCkBAIC0xNzAsNiArMTcwLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2V0X2FnY19jb25maWcoc3RydWN0IGF0Ym1fc3RhdGUgKnByaXYsCisJdTggbWluLCB1OCBtYXgsIHU4IGhvbGRfbG9vcCkKK3sKKwkvKiBubyBlZmZlY3QgaWYgYm90aCBtaW4gYW5kIG1heCBhcmUgemVybyAqLworCWlmICghbWluICYmICFtYXgpCisJICAgIHJldHVybiAwOworCisJYXRibTg4MzBfd3JpdGVfcmVnKHByaXYsIFJFR19BR0NfTUlOLCBtaW4pOworCWF0Ym04ODMwX3dyaXRlX3JlZyhwcml2LCBSRUdfQUdDX01BWCwgbWF4KTsKKwlhdGJtODgzMF93cml0ZV9yZWcocHJpdiwgUkVHX0FHQ19IT0xEX0xPT1AsIGhvbGRfbG9vcCk7CisKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIGludCBzZXRfc3RhdGljX2NoYW5uZWxfbW9kZShzdHJ1Y3QgYXRibV9zdGF0ZSAqcHJpdikKIHsKQEAgLTIyNyw2ICsyNDAsOSBAQAogCS8qU2V0IElGIGZyZXF1ZW5jeSovCiAJc2V0X2lmX2ZyZXEocHJpdiwgY2ZnLT5pZl9mcmVxKTsKIAorCS8qU2V0IEFHQyBDb25maWcqLworCXNldF9hZ2NfY29uZmlnKHByaXYsIGNmZy0+YWdjX21pbiwgY2ZnLT5hZ2NfbWF4LAorCQljZmctPmFnY19ob2xkX2xvb3ApOwogCiAJLypTZXQgc3RhdGljIGNoYW5uZWwgbW9kZSovCiAJc2V0X3N0YXRpY19jaGFubmVsX21vZGUocHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA5MC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwOTAuYwppbmRleCA2MTQ1NTI3Li43ZWFjMTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA5MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDkwLmMKQEAgLTI4Myw3ICsyODMsNyBAQAogCXJldHVybiAwOwogfQogCi1leHRlcm4gdm9pZCBkaWIwMDkwX2RjY19mcmVxKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCBmYXN0KQordm9pZCBkaWIwMDkwX2RjY19mcmVxKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCBmYXN0KQogewogCXN0cnVjdCBkaWIwMDkwX3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OwogCWlmIChmYXN0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjgwMDAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI4MDAwLmMKaW5kZXggNmY2ZmEyOS4uMmFhOTdkZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI4MDAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjgwMDAuYwpAQCAtMTk5OSw2ICsxOTk5LDggQEAKIAlzdHJ1Y3QgZGliODAwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgdGltZSwgcmV0OwogCisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfSVNEQlQ7CisKIAlkaWI4MDAwX3NldF9vdXRwdXRfbW9kZShzdGF0ZSwgT1VUTU9ERV9ISUdIX1opOwogCiAJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5jCmluZGV4IGU2ZjNkNzMuLjk4MGUwMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIEVYUE9SVF9TWU1CT0woZGlieDAwMF9leGl0X2kyY19tYXN0ZXIpOwogCiAKLXUzMiBzeXN0aW1lKCkKK3UzMiBzeXN0aW1lKHZvaWQpCiB7CiAgICAgc3RydWN0IHRpbWVzcGVjIHQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuYwppbmRleCBiMTgxYmYwLi4xMzQzNzI1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuYwpAQCAtMTU4LDcgKzE1OCw4IEBACiAJLyogb3ZlcnJpZGUgZnJvbnRlbmQgb3BzICovCiAJZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGxuYnAyMV9zZXRfdm9sdGFnZTsKIAlmZS0+b3BzLmVuYWJsZV9oaWdoX2xuYl92b2x0YWdlID0gbG5icDIxX2VuYWJsZV9oaWdoX2xuYl92b2x0YWdlOwotCWZlLT5vcHMuc2V0X3RvbmUgPSBsbmJwMjFfc2V0X3RvbmU7CisJaWYgKCEob3ZlcnJpZGVfY2xlYXIgJiBMTkJIMjRfVEVOKSkgLyoyMmtIeiBsb2dpYyBjb250cm9sbGVkIGJ5IGRlbW9kKi8KKwkJZmUtPm9wcy5zZXRfdG9uZSA9IGxuYnAyMV9zZXRfdG9uZTsKIAlwcmludGsoS0VSTl9JTkZPICJMTkJ4MnggYXR0YWNoZWQgb24gYWRkcj0leFxuIiwgbG5icDIxLT5pMmNfYWRkcik7CiAKIAlyZXR1cm4gZmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc2kyMXh4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc2kyMXh4LmMKaW5kZXggOTU1MmEyMi4uZDIxYTMyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NpMjF4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zaTIxeHguYwpAQCAtOTcsOCArOTcsNiBAQAogI2RlZmluZQlMTkJfU1VQUExZX0NUUkxfUkVHXzQJCTB4Y2UKICNkZWZpbmUJTE5CX1NVUFBMWV9TVEFUVVNfUkVHCQkweGNmCiAKLSNkZWZpbmUgRkFMU0UJMAotI2RlZmluZSBUUlVFCTEKICNkZWZpbmUgRkFJTAktMQogI2RlZmluZSBQQVNTCTAKIApAQCAtNzE4LDcgKzcxNiw3IEBACiAJaW50IGZpbmVfdHVuZV9mcmVxOwogCXVuc2lnbmVkIGNoYXIgc2FtcGxlX3JhdGUgPSAwOwogCS8qIGJvb2xlYW4gKi8KLQl1bnNpZ25lZCBpbnQgaW5iYW5kX2ludGVyZmVyZXJfaW5kOworCWJvb2wgaW5iYW5kX2ludGVyZmVyZXJfaW5kOwogCiAJLyogSU5URVJNRURJQVRFIFZBTFVFUyAqLwogCWludCBpY29hcnNlX3R1bmVfZnJlcTsgLyogTUh6ICovCkBAIC03MjgsMTUgKzcyNiw4IEBACiAJdW5zaWduZWQgaW50IHgxOwogCXVuc2lnbmVkIGludCB4MjsKIAlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgaW5iYW5kX2ludGVyZmVyZXJfZGl2MltBTExPV0FCTEVfRlNfQ09VTlRdID0gewotCQkJRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLAotCQkJRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFCi0JfTsKLQl1bnNpZ25lZCBpbnQgaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtBTExPV0FCTEVfRlNfQ09VTlRdID0gewotCQkJRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLAotCQkJRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFCi0JfTsKLQorCWJvb2wgaW5iYW5kX2ludGVyZmVyZXJfZGl2MltBTExPV0FCTEVfRlNfQ09VTlRdOworCWJvb2wgaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtBTExPV0FCTEVfRlNfQ09VTlRdOwogCWludCBzdGF0dXM7CiAKIAkvKiBhbGxvd2FibGUgc2FtcGxlIHJhdGVzIGZvciBBREMgaW4gTUh6ICovCkBAIC03NjIsNyArNzUzLDcgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQUxMT1dBQkxFX0ZTX0NPVU5UOyArK2kpCi0JCWluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gPSBpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldID0gRkFMU0U7CisJCWluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gPSBpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldID0gZmFsc2U7CiAKIAlpZl9saW1pdF9oaWdoID0gLTcwMDAwMDsKIAlpZl9saW1pdF9sb3cgPSAtMTAwMDAwOwpAQCAtNzk4LDcgKzc4OSw3IEBACiAKIAkJaWYgKCgoYmFuZF9sb3cgPCB4MSkgJiYgKHgxIDwgYmFuZF9oaWdoKSkgfHwKIAkJCQkJKChiYW5kX2xvdyA8IHgyKSAmJiAoeDIgPCBiYW5kX2hpZ2gpKSkKLQkJCQkJaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtpXSA9IFRSVUU7CisJCQkJCWluYmFuZF9pbnRlcmZlcmVyX2RpdjRbaV0gPSB0cnVlOwogCiAJfQogCkBAIC04MTEsMjUgKzgwMiwyOCBAQAogCiAJCWlmICgoKGJhbmRfbG93IDwgeDEpICYmICh4MSA8IGJhbmRfaGlnaCkpIHx8CiAJCQkJCSgoYmFuZF9sb3cgPCB4MikgJiYgKHgyIDwgYmFuZF9oaWdoKSkpCi0JCQkJCWluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gPSBUUlVFOworCQkJCQlpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldID0gdHJ1ZTsKIAl9CiAKLQlpbmJhbmRfaW50ZXJmZXJlcl9pbmQgPSBUUlVFOwotCWZvciAoaSA9IDA7IGkgPCBBTExPV0FCTEVfRlNfQ09VTlQ7ICsraSkKLQkJaW5iYW5kX2ludGVyZmVyZXJfaW5kICY9IGluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gfAotCQkJCQkJaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtpXTsKKwlpbmJhbmRfaW50ZXJmZXJlcl9pbmQgPSB0cnVlOworCWZvciAoaSA9IDA7IGkgPCBBTExPV0FCTEVfRlNfQ09VTlQ7ICsraSkgeworCQlpZiAoaW5iYW5kX2ludGVyZmVyZXJfZGl2MltpXSB8fCBpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldKSB7CisJCQlpbmJhbmRfaW50ZXJmZXJlcl9pbmQgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQogCiAJaWYgKGluYmFuZF9pbnRlcmZlcmVyX2luZCkgewogCQlmb3IgKGkgPSAwOyBpIDwgQUxMT1dBQkxFX0ZTX0NPVU5UOyArK2kpIHsKLQkJCWlmIChpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldID09IEZBTFNFKSB7CisJCQlpZiAoIWluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0pIHsKIAkJCQlzYW1wbGVfcmF0ZSA9ICh1OCkgYWZzW2ldOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJZm9yIChpID0gMDsgaSA8IEFMTE9XQUJMRV9GU19DT1VOVDsgKytpKSB7Ci0JCQlpZiAoKGluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gfAotCQkJCQlpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldKSA9PSBGQUxTRSkgeworCQkJaWYgKChpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldIHx8CisJCQkgICAgICFpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldKSkgewogCQkJCXNhbXBsZV9yYXRlID0gKHU4KSBhZnNbaV07CiAJCQkJYnJlYWs7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDAuaAppbmRleCAyOWMzZmE4Li5lM2UzNWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwLmgKQEAgLTQ5LDYgKzQ5LDggQEAKIAl1OCB0dW4yX21hZGRyZXNzOwogCXU4IHR1bjFfYWRjOy8qIDEgZm9yIHN0djYxMTAsIDIgZm9yIHN0YjYxMDAgKi8KIAl1OCB0dW4yX2FkYzsKKwl1OCB0dW4xX3R5cGU7LyogZm9yIG5vdyAzIGZvciBzdGI2MTAwIGF1dG8sIGVsc2UgLSBzb2Z0d2FyZSAqLworCXU4IHR1bjJfdHlwZTsKIAkvKiBTZXQgZGV2aWNlIHBhcmFtIHRvIHN0YXJ0IGRtYSAqLwogCWludCAoKnNldF90c19wYXJhbXMpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgaXNfcHVuY3R1cmVkKTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9jb3JlLmMKaW5kZXggODc2MmM4Ni4uMDFmOGYxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX2NvcmUuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJcmV0dXJuIGJ1ZjsKIH0KIAotdm9pZCBleHRyYWN0X21hc2tfcG9zKHUzMiBsYWJlbCwgdTggKm1hc2ssIHU4ICpwb3MpCitzdGF0aWMgdm9pZCBleHRyYWN0X21hc2tfcG9zKHUzMiBsYWJlbCwgdTggKm1hc2ssIHU4ICpwb3MpCiB7CiAJdTggcG9zaXRpb24gPSAwLCBpID0gMDsKIApAQCAtMjE4LDcgKzIxOCw3IEBACiAJcmV0dXJuIHZhbDsKIH0KIAotZW51bSBmZV9zdHYwOTAwX2Vycm9yIHN0djA5MDBfaW5pdGlhbGl6ZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCkKK3N0YXRpYyBlbnVtIGZlX3N0djA5MDBfZXJyb3Igc3R2MDkwMF9pbml0aWFsaXplKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwKQogewogCXMzMiBpOwogCkBAIC0yODIsNyArMjgyLDcgQEAKIAlyZXR1cm4gU1RWMDkwMF9OT19FUlJPUjsKIH0KIAotdTMyIHN0djA5MDBfZ2V0X21jbGtfZnJlcShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgdTMyIGV4dF9jbGspCitzdGF0aWMgdTMyIHN0djA5MDBfZ2V0X21jbGtfZnJlcShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgdTMyIGV4dF9jbGspCiB7CiAJdTMyIG1jbGsgPSA5MDAwMDAwMCwgZGl2ID0gMCwgYWRfZGl2ID0gMDsKIApAQCAtMjk2LDcgKzI5Niw3IEBACiAJcmV0dXJuIG1jbGs7CiB9CiAKLWVudW0gZmVfc3R2MDkwMF9lcnJvciBzdHYwOTAwX3NldF9tY2xrKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLCB1MzIgbWNsaykKK3N0YXRpYyBlbnVtIGZlX3N0djA5MDBfZXJyb3Igc3R2MDkwMF9zZXRfbWNsayhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgdTMyIG1jbGspCiB7CiAJdTMyIG1fZGl2LCBjbGtfc2VsOwogCkBAIC0zMzQsNyArMzM0LDcgQEAKIAlyZXR1cm4gU1RWMDkwMF9OT19FUlJPUjsKIH0KIAotdTMyIHN0djA5MDBfZ2V0X2Vycl9jb3VudChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgaW50IGNudHIsCitzdGF0aWMgdTMyIHN0djA5MDBfZ2V0X2Vycl9jb3VudChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgaW50IGNudHIsCiAJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCiB7CiAJdTMyIGxzYiwgbXNiLCBoc2IsIGVycl92YWw7CkBAIC01NjcsNiArNTY3LDQ2IEBACiAJfQogfQogCit1MzIgc3R2MDkwMF9nZXRfZnJlcV9hdXRvKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLCBpbnQgZGVtb2QpCit7CisJdTMyIGZyZXEsIHJvdW5kOworCS8qCUZvcm11bGF0IDoKKwlUdW5lcl9GcmVxdWVuY3koTUh6KQk9IFJlZ3MgLyA2NAorCVR1bmVyX2dyYW51bGFyaXR5KE1IeikJPSBSZWdzIC8gMjA0OAorCXJlYWxfVHVuZXJfRnJlcXVlbmN5CT0gVHVuZXJfRnJlcXVlbmN5KE1IeikgLSBUdW5lcl9ncmFudWxhcml0eShNSHopCisJKi8KKwlmcmVxID0gKHN0djA5MDBfZ2V0X2JpdHMoaW50cCwgVFVOX1JGRlJFUTIpIDw8IDEwKSArCisJCShzdHYwOTAwX2dldF9iaXRzKGludHAsIFRVTl9SRkZSRVExKSA8PCAyKSArCisJCXN0djA5MDBfZ2V0X2JpdHMoaW50cCwgVFVOX1JGRlJFUTApOworCisJZnJlcSA9IChmcmVxICogMTAwMCkgLyA2NDsKKworCXJvdW5kID0gKHN0djA5MDBfZ2V0X2JpdHMoaW50cCwgVFVOX1JGUkVTVEUxKSA+PiAyKSArCisJCXN0djA5MDBfZ2V0X2JpdHMoaW50cCwgVFVOX1JGUkVTVEUwKTsKKworCXJvdW5kID0gKHJvdW5kICogMTAwMCkgLyAyMDQ4OworCisJcmV0dXJuIGZyZXEgKyByb3VuZDsKK30KKwordm9pZCBzdHYwOTAwX3NldF90dW5lcl9hdXRvKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLCB1MzIgRnJlcXVlbmN5LAorCQkJCQkJdTMyIEJhbmR3aWR0aCwgaW50IGRlbW9kKQoreworCXUzMiB0dW5lckZyZXF1ZW5jeTsKKwkvKiBGb3JtdWxhdDoKKwlUdW5lcl9mcmVxdWVuY3lfcmVnPSBGcmVxdWVuY3koTUh6KSo2NAorCSovCisJdHVuZXJGcmVxdWVuY3kgPSAoRnJlcXVlbmN5ICogNjQpIC8gMTAwMDsKKworCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBUVU5fUkZGUkVRMiwgKHR1bmVyRnJlcXVlbmN5ID4+IDEwKSk7CisJc3R2MDkwMF93cml0ZV9iaXRzKGludHAsIFRVTl9SRkZSRVExLCAodHVuZXJGcmVxdWVuY3kgPj4gMikgJiAweGZmKTsKKwlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgVFVOX1JGRlJFUTAsICh0dW5lckZyZXF1ZW5jeSAmIDB4MDMpKTsKKwkvKiBMb3cgUGFzcyBGaWx0ZXIgPSBCVyAvMiAoTUh6KSovCisJc3R2MDkwMF93cml0ZV9iaXRzKGludHAsIFRVTl9CVywgQmFuZHdpZHRoIC8gMjAwMDAwMCk7CisJLyogVHVuZXIgV3JpdGUgdHJpZyAqLworCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFROUkxELCAxKTsKK30KKwogc3RhdGljIHMzMiBzdHYwOTAwX2dldF9yZl9sZXZlbChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwKIAkJCQljb25zdCBzdHJ1Y3Qgc3R2MDkwMF90YWJsZSAqbG9va3VwLAogCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCkBAIC0xMzI5LDcgKzEzNjksNiBAQAogCWVudW0gZmVfc3R2MDkwMF9lcnJvciBlcnJvciA9IFNUVjA5MDBfTk9fRVJST1I7CiAJZW51bSBmZV9zdHYwOTAwX2Vycm9yIGRlbW9kRXJyb3IgPSBTVFYwOTAwX05PX0VSUk9SOwogCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwID0gTlVMTDsKLQogCWludCBzZWxvc2NpLCBpOwogCiAJc3RydWN0IHN0djA5MDBfaW5vZGUgKnRlbXBfaW50ID0gZmluZF9pbm9kZShzdGF0ZS0+aTJjX2FkYXAsCkBAIC0xMzQ1LDcgKzEzODQsMTQgQEAKIAl9IGVsc2UgewogCQlzdGF0ZS0+aW50ZXJuYWwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCksCiAJCQkJCQkJCUdGUF9LRVJORUwpOworCQlpZiAoc3RhdGUtPmludGVybmFsID09IE5VTEwpCisJCQlyZXR1cm4gU1RWMDkwMF9JTlZBTElEX0hBTkRMRTsKIAkJdGVtcF9pbnQgPSBhcHBlbmRfaW50ZXJuYWwoc3RhdGUtPmludGVybmFsKTsKKwkJaWYgKHRlbXBfaW50ID09IE5VTEwpIHsKKwkJCWtmcmVlKHN0YXRlLT5pbnRlcm5hbCk7CisJCQlzdGF0ZS0+aW50ZXJuYWwgPSBOVUxMOworCQkJcmV0dXJuIFNUVjA5MDBfSU5WQUxJRF9IQU5ETEU7CisJCX0KIAkJc3RhdGUtPmludGVybmFsLT5kbWRzX3VzZWQgPSAxOwogCQlzdGF0ZS0+aW50ZXJuYWwtPmkyY19hZGFwID0gc3RhdGUtPmkyY19hZGFwOwogCQlzdGF0ZS0+aW50ZXJuYWwtPmkyY19hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKQEAgLTEzNzEsMTEgKzE0MTcsNiBAQAogCQlyZXR1cm4gZXJyb3I7CiAJfQogCi0JaWYgKHN0YXRlLT5pbnRlcm5hbCA9PSBOVUxMKSB7Ci0JCWVycm9yID0gU1RWMDkwMF9JTlZBTElEX0hBTkRMRTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQogCWludHAgPSBzdGF0ZS0+aW50ZXJuYWw7CiAKIAlpbnRwLT5kZW1vZF9tb2RlID0gcF9pbml0LT5kZW1vZF9tb2RlOwpAQCAtMTQwNCw2ICsxNDQ1LDI3IEBACiAJCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMV9SU1RfSFdBUkUsIDApOwogCX0KIAorCWludHAtPnR1bmVyX3R5cGVbMF0gPSBwX2luaXQtPnR1bmVyMV90eXBlOworCWludHAtPnR1bmVyX3R5cGVbMV0gPSBwX2luaXQtPnR1bmVyMl90eXBlOworCS8qIHR1bmVyIGluaXQgKi8KKwlzd2l0Y2ggKHBfaW5pdC0+dHVuZXIxX3R5cGUpIHsKKwljYXNlIDM6IC8qRkVfQVVUT19TVEI2MTAwOiovCisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AxX1ROUkNGRywgMHgzYyk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AxX1ROUkNGRzIsIDB4ODYpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMV9UTlJDRkczLCAweDE4KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDFfVE5SWFRBTCwgMjcpOyAvKiAyN01IeiAqLworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMV9UTlJTVEVQUywgMHgwNSk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AxX1ROUkdBSU4sIDB4MTcpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMV9UTlJBREosIDB4MWYpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMV9UTlJDVEwyLCAweDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgRjA5MDBfUDFfVFVOX1RZUEUsIDMpOworCQlicmVhazsKKwkvKiBjYXNlIEZFX1NXX1RVTkVSOiAqLworCWRlZmF1bHQ6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMV9UVU5fVFlQRSwgNik7CisJCWJyZWFrOworCX0KKwogCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMV9UVU5fTUFERFJFU1MsIHBfaW5pdC0+dHVuMV9tYWRkcmVzcyk7CiAJc3dpdGNoIChwX2luaXQtPnR1bmVyMV9hZGMpIHsKIAljYXNlIDE6CkBAIC0xNDEzLDYgKzE0NzUsMjcgQEAKIAkJYnJlYWs7CiAJfQogCisJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDFfVE5STEQsIDEpOyAvKiBodyB0dW5lciAqLworCisJLyogdHVuZXIgaW5pdCAqLworCXN3aXRjaCAocF9pbml0LT50dW5lcjJfdHlwZSkgeworCWNhc2UgMzogLypGRV9BVVRPX1NUQjYxMDA6Ki8KKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDJfVE5SQ0ZHLCAweDNjKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDJfVE5SQ0ZHMiwgMHg4Nik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUkNGRzMsIDB4MTgpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBSMDkwMF9QMl9UTlJYVEFMLCAyNyk7IC8qIDI3TUh6ICovCisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUlNURVBTLCAweDA1KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgUjA5MDBfUDJfVE5SR0FJTiwgMHgxNyk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUkFESiwgMHgxZik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUkNUTDIsIDB4MCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMl9UVU5fVFlQRSwgMyk7CisJCWJyZWFrOworCS8qIGNhc2UgRkVfU1dfVFVORVI6ICovCisJZGVmYXVsdDoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGludHAsIEYwOTAwX1AyX1RVTl9UWVBFLCA2KTsKKwkJYnJlYWs7CisJfQorCiAJc3R2MDkwMF93cml0ZV9iaXRzKGludHAsIEYwOTAwX1AyX1RVTl9NQUREUkVTUywgcF9pbml0LT50dW4yX21hZGRyZXNzKTsKIAlzd2l0Y2ggKHBfaW5pdC0+dHVuZXIyX2FkYykgewogCWNhc2UgMToKQEAgLTE0MjIsNiArMTUwNSw4IEBACiAJCWJyZWFrOwogCX0KIAorCXN0djA5MDBfd3JpdGVfcmVnKGludHAsIFIwOTAwX1AyX1ROUkxELCAxKTsgLyogaHcgdHVuZXIgKi8KKwogCXN0djA5MDBfd3JpdGVfYml0cyhpbnRwLCBGMDkwMF9QMV9UVU5fSVFTV0FQLCBwX2luaXQtPnR1bjFfaXFfaW52KTsKIAlzdHYwOTAwX3dyaXRlX2JpdHMoaW50cCwgRjA5MDBfUDJfVFVOX0lRU1dBUCwgcF9pbml0LT50dW4yX2lxX2ludik7CiAJc3R2MDkwMF9zZXRfbWNsayhpbnRwLCAxMzUwMDAwMDApOwpAQCAtMTgyNCwxMCArMTkwOSwxMiBAQAogCQlpbml0X3BhcmFtcy50dW4xX21hZGRyZXNzCT0gY29uZmlnLT50dW4xX21hZGRyZXNzOwogCQlpbml0X3BhcmFtcy50dW4xX2lxX2ludgkJPSBTVFYwOTAwX0lRX05PUk1BTDsKIAkJaW5pdF9wYXJhbXMudHVuZXIxX2FkYwkJPSBjb25maWctPnR1bjFfYWRjOworCQlpbml0X3BhcmFtcy50dW5lcjFfdHlwZQkJPSBjb25maWctPnR1bjFfdHlwZTsKIAkJaW5pdF9wYXJhbXMucGF0aDJfdHNfY2xvY2sJPSBjb25maWctPnBhdGgyX21vZGU7CiAJCWluaXRfcGFyYW1zLnRzX2NvbmZpZwkJPSBjb25maWctPnRzX2NvbmZpZ19yZWdzOwogCQlpbml0X3BhcmFtcy50dW4yX21hZGRyZXNzCT0gY29uZmlnLT50dW4yX21hZGRyZXNzOwogCQlpbml0X3BhcmFtcy50dW5lcjJfYWRjCQk9IGNvbmZpZy0+dHVuMl9hZGM7CisJCWluaXRfcGFyYW1zLnR1bmVyMl90eXBlCQk9IGNvbmZpZy0+dHVuMl90eXBlOwogCQlpbml0X3BhcmFtcy50dW4yX2lxX2ludgkJPSBTVFYwOTAwX0lRX1NXQVBQRUQ7CiAKIAkJZXJyX3N0djA5MDAgPSBzdHYwOTAwX2luaXRfaW50ZXJuYWwoJnN0YXRlLT5mcm9udGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3ByaXYuaAppbmRleCBkOGJhOGE5Li5iNjJiMGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcHJpdi5oCkBAIC0yNDcsNiArMjQ3LDcgQEAKIAogCXU4CXR1bjFfbWFkZHJlc3M7CiAJaW50CXR1bmVyMV9hZGM7CisJaW50IAl0dW5lcjFfdHlwZTsKIAogCS8qIElRIGZyb20gdGhlIHR1bmVyMSB0byB0aGUgZGVtb2QgKi8KIAllbnVtIHN0djA5MDBfaXFfaW52ZXJzaW9uCXR1bjFfaXFfaW52OwpAQCAtMjU0LDYgKzI1NSw3IEBACiAKIAl1OAl0dW4yX21hZGRyZXNzOwogCWludAl0dW5lcjJfYWRjOworCWludAl0dW5lcjJfdHlwZTsKIAogCS8qIElRIGZyb20gdGhlIHR1bmVyMiB0byB0aGUgZGVtb2QgKi8KIAllbnVtIHN0djA5MDBfaXFfaW52ZXJzaW9uCXR1bjJfaXFfaW52OwpAQCAtMzA5LDYgKzMxMSw4IEBACiAJczMyCWJ3WzJdOwogCXMzMglzeW1ib2xfcmF0ZVsyXTsKIAlzMzIJc3JjaF9yYW5nZVsyXTsKKwkvKiBmb3Igc29mdHdhcmUvYXV0byB0dW5lciAqLworCWludAl0dW5lcl90eXBlWzJdOwogCiAJLyogYWxnb3JpdGhtIGZvciBzZWFyY2ggQmxpbmQsIENvbGQgb3IgV2FybSovCiAJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9hbGdvCXNyY2hfYWxnb1syXTsKQEAgLTM5NCw0ICszOTgsMTEgQEAKIGZlX3N0djA5MDBfdHJhY2tpbmdfc3RhbmRhcmQgc3R2MDkwMF9nZXRfc3RhbmRhcmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCk7CiAKK2V4dGVybiB1MzIKK3N0djA5MDBfZ2V0X2ZyZXFfYXV0byhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwgaW50IGRlbW9kKTsKKworZXh0ZXJuIHZvaWQKK3N0djA5MDBfc2V0X3R1bmVyX2F1dG8oc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsIHUzMiBGcmVxdWVuY3ksCisJCQkJCQl1MzIgQmFuZHdpZHRoLCBpbnQgZGVtb2QpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3JlZy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcmVnLmgKaW5kZXggN2I4ZWRmMS4uNzMxYWZlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcmVnLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcmVnLmgKQEAgLTMxNzQsMTcgKzMxNzQsMjEgQEAKICNkZWZpbmUgUjA5MDBfUDFfVE5SUkYxIDB4ZjRlOQogI2RlZmluZSBUTlJSRjEgUkVHeChSMDkwMF9QMV9UTlJSRjEpCiAjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRkZSRVEyIDB4ZjRlOTAwZmYKKyNkZWZpbmUgVFVOX1JGRlJFUTIgRkxEeChGMDkwMF9QMV9UVU5fUkZGUkVRMikKIAogLypQMV9UTlJSRjAqLwogI2RlZmluZSBSMDkwMF9QMV9UTlJSRjAgMHhmNGVhCiAjZGVmaW5lIFROUlJGMCBSRUd4KFIwOTAwX1AxX1ROUlJGMCkKICNkZWZpbmUgRjA5MDBfUDFfVFVOX1JGRlJFUTEgMHhmNGVhMDBmZgorI2RlZmluZSBUVU5fUkZGUkVRMSBGTER4KEYwOTAwX1AxX1RVTl9SRkZSRVExKQogCiAvKlAxX1ROUkJXKi8KICNkZWZpbmUgUjA5MDBfUDFfVE5SQlcgMHhmNGViCiAjZGVmaW5lIFROUkJXIFJFR3goUjA5MDBfUDFfVE5SQlcpCiAjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRkZSRVEwIDB4ZjRlYjAwYzAKKyNkZWZpbmUgVFVOX1JGRlJFUTAgRkxEeChGMDkwMF9QMV9UVU5fUkZGUkVRMCkKICNkZWZpbmUgRjA5MDBfUDFfVFVOX0JXIDB4ZjRlYjAwM2YKKyNkZWZpbmUgVFVOX0JXIEZMRHgoRjA5MDBfUDFfVFVOX0JXKQogCiAvKlAxX1ROUkFESiovCiAjZGVmaW5lIFIwOTAwX1AxX1ROUkFESiAweGY0ZWMKQEAgLTMyMzQsMTEgKzMyMzgsMTMgQEAKICNkZWZpbmUgRjA5MDBfUDFfVFVOX0kyQ0xPQ0tFRCAweGY0ZjYwMDEwCiAjZGVmaW5lIEYwOTAwX1AxX1RVTl9QUk9HRE9ORSAweGY0ZjYwMDBjCiAjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRlJFU1RFMSAweGY0ZjYwMDAzCisjZGVmaW5lIFRVTl9SRlJFU1RFMSBGTER4KEYwOTAwX1AxX1RVTl9SRlJFU1RFMSkKIAogLypQMV9UTlJSRVNURSovCiAjZGVmaW5lIFIwOTAwX1AxX1ROUlJFU1RFIDB4ZjRmNwogI2RlZmluZSBUTlJSRVNURSBSRUd4KFIwOTAwX1AxX1ROUlJFU1RFKQogI2RlZmluZSBGMDkwMF9QMV9UVU5fUkZSRVNURTAgMHhmNGY3MDBmZgorI2RlZmluZSBUVU5fUkZSRVNURTAgRkxEeChGMDkwMF9QMV9UVU5fUkZSRVNURTApCiAKIC8qUDFfU01BUENPRUY3Ki8KICNkZWZpbmUgUjA5MDBfUDFfU01BUENPRUY3IDB4ZjUwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfc3cuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3N3LmMKaW5kZXggYjhkYTg3Zi4uYmEwNzA5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfc3cuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9zdy5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAlyZXR1cm4gbG9jazsKIH0KIAotaW50IHN0djA5MDBfc3dfYWxnbyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50cCwKK3N0YXRpYyBpbnQgc3R2MDkwMF9zd19hbGdvKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLAogCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCiB7CiAJaW50CWxvY2sgPSBGQUxTRSwKQEAgLTYwNiw3ICs2MDYsMTIgQEAKIAkJCXR1bmVyX2ZyZXEgLT0gKGN1cnJlbnRfc3RlcCAqIGN1cnJpZXJfc3RlcCk7CiAKIAkJaWYgKGludHAtPmNoaXBfaWQgPD0gMHgyMCkgewotCQkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIHR1bmVyX2ZyZXEsIGludHAtPmJ3W2RdKTsKKwkJCWlmIChpbnRwLT50dW5lcl90eXBlW2RdID09IDMpCisJCQkJc3R2MDkwMF9zZXRfdHVuZXJfYXV0byhpbnRwLCB0dW5lcl9mcmVxLAorCQkJCQkJaW50cC0+YndbZF0sIGRlbW9kKTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3NldF90dW5lcihmZSwgdHVuZXJfZnJlcSwgaW50cC0+YndbZF0pOworCiAJCQlzdHYwOTAwX3dyaXRlX3JlZyhpbnRwLCBETURJU1RBVEUsIDB4MWMpOwogCQkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgQ0ZSSU5JVDEsIDApOwogCQkJc3R2MDkwMF93cml0ZV9yZWcoaW50cCwgQ0ZSSU5JVDAsIDApOwpAQCAtNzkwLDcgKzc5NSw3IEBACiAJcmV0dXJuIHByYXRlOwogfQogCi12b2lkIHN0djA5MDBfc2V0X2R2YnMxX3RyYWNrX2Nhcl9sb29wKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRwLAorc3RhdGljIHZvaWQgc3R2MDkwMF9zZXRfZHZiczFfdHJhY2tfY2FyX2xvb3Aoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludHAsCiAJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QsCiAJCQkJCXUzMiBzcmF0ZSkKIHsKQEAgLTk3Niw4ICs5ODEsMTYgQEAKIAkJCQkJaW50cC0+cm9sbG9mZikgKyAxMDAwMDAwMDsKIAogCQlpZiAoKGludHAtPmNoaXBfaWQgPj0gMHgyMCkgfHwgKGJsaW5kX3R1bl9zdyA9PSAxKSkgewotCQkJaWYgKGludHAtPnNyY2hfYWxnb1tkZW1vZF0gIT0gU1RWMDkwMF9XQVJNX1NUQVJUKQotCQkJCXN0djA5MDBfc2V0X2JhbmR3aWR0aChmZSwgaW50cC0+YndbZGVtb2RdKTsKKwkJCWlmIChpbnRwLT5zcmNoX2FsZ29bZGVtb2RdICE9IFNUVjA5MDBfV0FSTV9TVEFSVCkgeworCQkJCWlmIChpbnRwLT50dW5lcl90eXBlW2RlbW9kXSA9PSAzKQorCQkJCQlzdHYwOTAwX3NldF90dW5lcl9hdXRvKGludHAsCisJCQkJCQkJaW50cC0+ZnJlcVtkZW1vZF0sCisJCQkJCQkJaW50cC0+YndbZGVtb2RdLAorCQkJCQkJCWRlbW9kKTsKKwkJCQllbHNlCisJCQkJCXN0djA5MDBfc2V0X2JhbmR3aWR0aChmZSwKKwkJCQkJCQlpbnRwLT5id1tkZW1vZF0pOworCQkJfQogCQl9CiAKIAkJaWYgKChpbnRwLT5zcmNoX2FsZ29bZGVtb2RdID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKSB8fApAQCAtMTIwMiw3ICsxMjE1LDExIEBACiAJfQogCiAJcmVzdWx0LT5zdGFuZGFyZCA9IHN0djA5MDBfZ2V0X3N0YW5kYXJkKGZlLCBkKTsKLQlyZXN1bHQtPmZyZXF1ZW5jeSA9IHN0djA5MDBfZ2V0X3R1bmVyX2ZyZXEoZmUpOworCWlmIChpbnRwLT50dW5lcl90eXBlW2RlbW9kXSA9PSAzKQorCQlyZXN1bHQtPmZyZXF1ZW5jeSA9IHN0djA5MDBfZ2V0X2ZyZXFfYXV0byhpbnRwLCBkKTsKKwllbHNlCisJCXJlc3VsdC0+ZnJlcXVlbmN5ID0gc3R2MDkwMF9nZXRfdHVuZXJfZnJlcShmZSk7CisKIAlvZmZzZXRGcmVxID0gc3R2MDkwMF9nZXRfY2Fycl9mcmVxKGludHAsIGludHAtPm1jbGssIGQpIC8gMTAwMDsKIAlyZXN1bHQtPmZyZXF1ZW5jeSArPSBvZmZzZXRGcmVxOwogCXJlc3VsdC0+c3ltYm9sX3JhdGUgPSBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShpbnRwLCBpbnRwLT5tY2xrLCBkKTsKQEAgLTEyMTMsNiArMTIzMCw5IEBACiAJcmVzdWx0LT5waWxvdCA9IHN0djA5MDBfZ2V0X2JpdHMoaW50cCwgREVNT0RfVFlQRSkgJiAweDAxOwogCXJlc3VsdC0+ZnJhbWVfbGVuID0gKCh1MzIpc3R2MDkwMF9nZXRfYml0cyhpbnRwLCBERU1PRF9UWVBFKSkgPj4gMTsKIAlyZXN1bHQtPnJvbGxvZmYgPSBzdHYwOTAwX2dldF9iaXRzKGludHAsIFJPTExPRkZfU1RBVFVTKTsKKworCWRwcmludGsoIiVzOiBtb2Rjb2RlPTB4JXggXG4iLCBfX2Z1bmNfXywgcmVzdWx0LT5tb2Rjb2RlKTsKKwogCXN3aXRjaCAocmVzdWx0LT5zdGFuZGFyZCkgewogCWNhc2UgU1RWMDkwMF9EVkJTMl9TVEFOREFSRDoKIAkJcmVzdWx0LT5zcGVjdHJ1bSA9IHN0djA5MDBfZ2V0X2JpdHMoaW50cCwgU1BFQ0lOVl9ERU1PRCk7CkBAIC0xMjM5LDcgKzEyNTksMTEgQEAKIAlpZiAoKGludHAtPnNyY2hfYWxnb1tkXSA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkgfHwKIAkJCQkoaW50cC0+c3ltYm9sX3JhdGVbZF0gPCAxMDAwMDAwMCkpIHsKIAkJb2Zmc2V0RnJlcSA9IHJlc3VsdC0+ZnJlcXVlbmN5IC0gaW50cC0+ZnJlcVtkXTsKLQkJaW50cC0+ZnJlcVtkXSA9IHN0djA5MDBfZ2V0X3R1bmVyX2ZyZXEoZmUpOworCQlpZiAoaW50cC0+dHVuZXJfdHlwZVtkZW1vZF0gPT0gMykKKwkJCWludHAtPmZyZXFbZF0gPSBzdHYwOTAwX2dldF9mcmVxX2F1dG8oaW50cCwgZCk7CisJCWVsc2UKKwkJCWludHAtPmZyZXFbZF0gPSBzdHYwOTAwX2dldF90dW5lcl9mcmVxKGZlKTsKKwogCQlpZiAoQUJTKG9mZnNldEZyZXEpIDw9ICgoaW50cC0+c3JjaF9yYW5nZVtkXSAvIDIwMDApICsgNTAwKSkKIAkJCXJhbmdlID0gU1RWMDkwMF9SQU5HRU9LOwogCQllbHNlIGlmIChBQlMob2Zmc2V0RnJlcSkgPD0KQEAgLTE0ODEsNyArMTUwNSwxMiBAQAogCQkJZWxzZQogCQkJCXR1bmVyX2ZyZXEgLT0gKGN1cnJlbnRfc3RlcCAqIGN1cnJpZXJfc3RlcCk7CiAKLQkJCXN0djA5MDBfc2V0X3R1bmVyKGZlLCB0dW5lcl9mcmVxLCBpbnRwLT5id1tkZW1vZF0pOworCQkJaWYgKGludHAtPnR1bmVyX3R5cGVbZGVtb2RdID09IDMpCisJCQkJc3R2MDkwMF9zZXRfdHVuZXJfYXV0byhpbnRwLCB0dW5lcl9mcmVxLAorCQkJCQkJaW50cC0+YndbZGVtb2RdLCBkZW1vZCk7CisJCQllbHNlCisJCQkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIHR1bmVyX2ZyZXEsCisJCQkJCQlpbnRwLT5id1tkZW1vZF0pOwogCQl9CiAJfQogCkBAIC0xNjA4LDcgKzE2MzcsOCBAQAogCiAJYWdjMl9pbnQgPSBzdHYwOTAwX2JsaW5kX2NoZWNrX2FnYzJfbWluX2xldmVsKGludHAsIGRlbW9kKTsKIAotCWlmIChhZ2MyX2ludCA+IFNUVjA5MDBfQkxJTkRfU0VBUkNIX0FHQzJfVEgpCisJZHByaW50aygiJXMgYWdjMl9pbnQ9JWQgYWdjMl90aD0lZCBcbiIsIF9fZnVuY19fLCBhZ2MyX2ludCwgYWdjMl90aCk7CisJaWYgKGFnYzJfaW50ID4gYWdjMl90aCkKIAkJcmV0dXJuIEZBTFNFOwogCiAJaWYgKGludHAtPmNoaXBfaWQgPT0gMHgxMCkKQEAgLTE4NzUsNyArMTkwNSwxMSBAQAogCiAJfQogCi0Jc3R2MDkwMF9zZXRfdHVuZXIoZmUsIGludHAtPmZyZXFbZGVtb2RdLCBpbnRwLT5id1tkZW1vZF0pOworCWlmIChpbnRwLT50dW5lcl90eXBlW2RlbW9kXSA9PSAzKQorCQlzdHYwOTAwX3NldF90dW5lcl9hdXRvKGludHAsIGludHAtPmZyZXFbZGVtb2RdLAorCQkJCWludHAtPmJ3W2RlbW9kXSwgZGVtb2QpOworCWVsc2UKKwkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIGludHAtPmZyZXFbZGVtb2RdLCBpbnRwLT5id1tkZW1vZF0pOwogCiAJYWdjMV9wb3dlciA9IE1BS0VXT1JEKHN0djA5MDBfZ2V0X2JpdHMoaW50cCwgQUdDSVFfVkFMVUUxKSwKIAkJCQlzdHYwOTAwX2dldF9iaXRzKGludHAsIEFHQ0lRX1ZBTFVFMCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmMKaW5kZXggMTU3MzQ2Ni4uYzUyYzMzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5jCkBAIC0zNyw3ICszNyw4MiBAQAogc3RhdGljIHVuc2lnbmVkIGludCB2ZXJib3NlOwogbW9kdWxlX3BhcmFtKHZlcmJvc2UsIGludCwgMDY0NCk7CiAKLXN0cnVjdCBtdXRleCBkZW1vZF9sb2NrOworLyogaW50ZXJuYWwgcGFyYW1zIG5vZGUgKi8KK3N0cnVjdCBzdHYwOTB4X2RldiB7CisJLyogcG9pbnRlciBmb3IgaW50ZXJuYWwgcGFyYW1zLCBvbmUgZm9yIGVhY2ggcGFpciBvZiBkZW1vZHMgKi8KKwlzdHJ1Y3Qgc3R2MDkweF9pbnRlcm5hbAkJKmludGVybmFsOworCXN0cnVjdCBzdHYwOTB4X2RldgkJKm5leHRfZGV2OworfTsKKworLyogZmlyc3QgaW50ZXJuYWwgcGFyYW1zICovCitzdGF0aWMgc3RydWN0IHN0djA5MHhfZGV2ICpzdHYwOTB4X2ZpcnN0X2RldjsKKworLyogZmluZCBjaGlwIGJ5IGkyYyBhZGFwdGVyIGFuZCBpMmMgYWRkcmVzcyAqLworc3RhdGljIHN0cnVjdCBzdHYwOTB4X2RldiAqZmluZF9kZXYoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCQkJdTggaTJjX2FkZHIpCit7CisJc3RydWN0IHN0djA5MHhfZGV2ICp0ZW1wX2RldiA9IHN0djA5MHhfZmlyc3RfZGV2OworCisJLyoKKwkgU2VhcmNoIG9mIHRoZSBsYXN0IHN0djA5MDAgY2hpcCBvcgorCSBmaW5kIGl0IGJ5IGkyYyBhZGFwdGVyIGFuZCBpMmMgYWRkcmVzcyAqLworCXdoaWxlICgodGVtcF9kZXYgIT0gTlVMTCkgJiYKKwkJKCh0ZW1wX2Rldi0+aW50ZXJuYWwtPmkyY19hZGFwICE9IGkyY19hZGFwKSB8fAorCQkodGVtcF9kZXYtPmludGVybmFsLT5pMmNfYWRkciAhPSBpMmNfYWRkcikpKSB7CisKKwkJdGVtcF9kZXYgPSB0ZW1wX2Rldi0+bmV4dF9kZXY7CisJfQorCisJcmV0dXJuIHRlbXBfZGV2OworfQorCisvKiBkZWFsbG9jYXRpbmcgY2hpcCAqLworc3RhdGljIHZvaWQgcmVtb3ZlX2RldihzdHJ1Y3Qgc3R2MDkweF9pbnRlcm5hbCAqaW50ZXJuYWwpCit7CisJc3RydWN0IHN0djA5MHhfZGV2ICpwcmV2X2RldiA9IHN0djA5MHhfZmlyc3RfZGV2OworCXN0cnVjdCBzdHYwOTB4X2RldiAqZGVsX2RldiA9IGZpbmRfZGV2KGludGVybmFsLT5pMmNfYWRhcCwKKwkJCQkJCWludGVybmFsLT5pMmNfYWRkcik7CisKKwlpZiAoZGVsX2RldiAhPSBOVUxMKSB7CisJCWlmIChkZWxfZGV2ID09IHN0djA5MHhfZmlyc3RfZGV2KSB7CisJCQlzdHYwOTB4X2ZpcnN0X2RldiA9IGRlbF9kZXYtPm5leHRfZGV2OworCQl9IGVsc2UgeworCQkJd2hpbGUgKHByZXZfZGV2LT5uZXh0X2RldiAhPSBkZWxfZGV2KQorCQkJCXByZXZfZGV2ID0gcHJldl9kZXYtPm5leHRfZGV2OworCisJCQlwcmV2X2Rldi0+bmV4dF9kZXYgPSBkZWxfZGV2LT5uZXh0X2RldjsKKwkJfQorCisJCWtmcmVlKGRlbF9kZXYpOworCX0KK30KKworLyogYWxsb2NhdGluZyBuZXcgY2hpcCAqLworc3RhdGljIHN0cnVjdCBzdHYwOTB4X2RldiAqYXBwZW5kX2ludGVybmFsKHN0cnVjdCBzdHYwOTB4X2ludGVybmFsICppbnRlcm5hbCkKK3sKKwlzdHJ1Y3Qgc3R2MDkweF9kZXYgKm5ld19kZXY7CisJc3RydWN0IHN0djA5MHhfZGV2ICp0ZW1wX2RldjsKKworCW5ld19kZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3R2MDkweF9kZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAobmV3X2RldiAhPSBOVUxMKSB7CisJCW5ld19kZXYtPmludGVybmFsID0gaW50ZXJuYWw7CisJCW5ld19kZXYtPm5leHRfZGV2ID0gTlVMTDsKKworCQkvKiBhcHBlbmQgdG8gbGlzdCAqLworCQlpZiAoc3R2MDkweF9maXJzdF9kZXYgPT0gTlVMTCkgeworCQkJc3R2MDkweF9maXJzdF9kZXYgPSBuZXdfZGV2OworCQl9IGVsc2UgeworCQkJdGVtcF9kZXYgPSBzdHYwOTB4X2ZpcnN0X2RldjsKKwkJCXdoaWxlICh0ZW1wX2Rldi0+bmV4dF9kZXYgIT0gTlVMTCkKKwkJCQl0ZW1wX2RldiA9IHRlbXBfZGV2LT5uZXh0X2RldjsKKworCQkJdGVtcF9kZXYtPm5leHRfZGV2ID0gbmV3X2RldjsKKwkJfQorCX0KKworCXJldHVybiBuZXdfZGV2OworfQorCiAKIC8qIERWQlMxIGFuZCBEU1MgQy9OIExvb2t1cCB0YWJsZSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzdHYwOTB4X3RhYiBzdHYwOTB4X3MxY25fdGFiW10gPSB7CkBAIC02ODMsNiArNzU4LDkgQEAKIAlzdHJ1Y3Qgc3R2MDkweF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1MzIgcmVnOwogCisJaWYgKGVuYWJsZSkKKwkJbXV0ZXhfbG9jaygmc3RhdGUtPmludGVybmFsLT50dW5lcl9sb2NrKTsKKwogCXJlZyA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgSTJDUlBUKTsKIAlpZiAoZW5hYmxlKSB7CiAJCWRwcmludGsoRkVfREVCVUcsIDEsICJFbmFibGUgR2F0ZSIpOwpAQCAtNjk2LDkgKzc3NCwxNCBAQAogCQlpZiAoKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEkyQ1JQVCwgcmVnKSkgPCAwKQogCQkJZ290byBlcnI7CiAJfQorCisJaWYgKCFlbmFibGUpCisJCW11dGV4X3VubG9jaygmc3RhdGUtPmludGVybmFsLT50dW5lcl9sb2NrKTsKKwogCXJldHVybiAwOwogZXJyOgogCWRwcmludGsoRkVfRVJST1IsIDEsICJJL08gZXJyb3IiKTsKKwltdXRleF91bmxvY2soJnN0YXRlLT5pbnRlcm5hbC0+dHVuZXJfbG9jayk7CiAJcmV0dXJuIC0xOwogfQogCkBAIC03NTUsMTMgKzgzOCwxMyBAQAogCiAJaWYgKHNyYXRlID4gNjAwMDAwMDApIHsKIAkJc3ltICA9IChzcmF0ZSA8PCA0KTsgLyogU1IgKiAyXjE2IC8gbWFzdGVyX2NsayAqLwotCQlzeW0gLz0gKHN0YXRlLT5tY2xrID4+IDEyKTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gMTIpOwogCX0gZWxzZSBpZiAoc3JhdGUgPiA2MDAwMDAwKSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgNik7Ci0JCXN5bSAvPSAoc3RhdGUtPm1jbGsgPj4gMTApOworCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayA+PiAxMCk7CiAJfSBlbHNlIHsKIAkJc3ltICA9IChzcmF0ZSA8PCA5KTsKLQkJc3ltIC89IChzdGF0ZS0+bWNsayA+PiA3KTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gNyk7CiAJfQogCiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUklOSVQxLCAoc3ltID4+IDgpICYgMHg3ZikgPCAwKSAvKiBNU0IgKi8KQEAgLTc4MiwxMyArODY1LDEzIEBACiAJc3JhdGUgPSAxMDUgKiAoc3JhdGUgLyAxMDApOwogCWlmIChzcmF0ZSA+IDYwMDAwMDAwKSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgNCk7IC8qIFNSICogMl4xNiAvIG1hc3Rlcl9jbGsgKi8KLQkJc3ltIC89IChzdGF0ZS0+bWNsayA+PiAxMik7CisJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrID4+IDEyKTsKIAl9IGVsc2UgaWYgKHNyYXRlID4gNjAwMDAwMCkgewogCQlzeW0gID0gKHNyYXRlIDw8IDYpOwotCQlzeW0gLz0gKHN0YXRlLT5tY2xrID4+IDEwKTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gMTApOwogCX0gZWxzZSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgOSk7Ci0JCXN5bSAvPSAoc3RhdGUtPm1jbGsgPj4gNyk7CisJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrID4+IDcpOwogCX0KIAogCWlmIChzeW0gPCAweDdmZmYpIHsKQEAgLTgxNiwxMyArODk5LDEzIEBACiAJc3JhdGUgPSA5NSAqIChzcmF0ZSAvIDEwMCk7CiAJaWYgKHNyYXRlID4gNjAwMDAwMDApIHsKIAkJc3ltICA9IChzcmF0ZSA8PCA0KTsgLyogU1IgKiAyXjE2IC8gbWFzdGVyX2NsayAqLwotCQlzeW0gLz0gKHN0YXRlLT5tY2xrID4+IDEyKTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gMTIpOwogCX0gZWxzZSBpZiAoc3JhdGUgPiA2MDAwMDAwKSB7CiAJCXN5bSAgPSAoc3JhdGUgPDwgNik7Ci0JCXN5bSAvPSAoc3RhdGUtPm1jbGsgPj4gMTApOworCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayA+PiAxMCk7CiAJfSBlbHNlIHsKIAkJc3ltICA9IChzcmF0ZSA8PCA5KTsKLQkJc3ltIC89IChzdGF0ZS0+bWNsayA+PiA3KTsKKwkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPj4gNyk7CiAJfQogCiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUkxPVzEsICgoc3ltID4+IDgpICYgMHg3ZikpIDwgMCkgLyogTVNCICovCkBAIC0xMTAzLDIxICsxMTg2LDIxIEBACiAKIAlzd2l0Y2ggKHN0YXRlLT5kZW1vZCkgewogCWNhc2UgU1RWMDkweF9ERU1PRFVMQVRPUl8wOgotCQltdXRleF9sb2NrKCZkZW1vZF9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmc3RhdGUtPmludGVybmFsLT5kZW1vZF9sb2NrKTsKIAkJcmVnID0gc3R2MDkweF9yZWFkX3JlZyhzdGF0ZSwgU1RWMDkweF9TVE9QQ0xLMik7CiAJCVNUVjA5MHhfU0VURklFTEQocmVnLCBTVE9QX0NMS1ZJVDFfRklFTEQsIGVuYWJsZSk7CiAJCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9TVE9QQ0xLMiwgcmVnKSA8IDApCiAJCQlnb3RvIGVycjsKLQkJbXV0ZXhfdW5sb2NrKCZkZW1vZF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+aW50ZXJuYWwtPmRlbW9kX2xvY2spOwogCQlicmVhazsKIAogCWNhc2UgU1RWMDkweF9ERU1PRFVMQVRPUl8xOgotCQltdXRleF9sb2NrKCZkZW1vZF9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmc3RhdGUtPmludGVybmFsLT5kZW1vZF9sb2NrKTsKIAkJcmVnID0gc3R2MDkweF9yZWFkX3JlZyhzdGF0ZSwgU1RWMDkweF9TVE9QQ0xLMik7CiAJCVNUVjA5MHhfU0VURklFTEQocmVnLCBTVE9QX0NMS1ZJVDJfRklFTEQsIGVuYWJsZSk7CiAJCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9TVE9QQ0xLMiwgcmVnKSA8IDApCiAJCQlnb3RvIGVycjsKLQkJbXV0ZXhfdW5sb2NrKCZkZW1vZF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+aW50ZXJuYWwtPmRlbW9kX2xvY2spOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xMTI2LDE0ICsxMjA5LDE0IEBACiAJfQogCXJldHVybiAwOwogZXJyOgotCW11dGV4X3VubG9jaygmZGVtb2RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+aW50ZXJuYWwtPmRlbW9kX2xvY2spOwogCWRwcmludGsoRkVfRVJST1IsIDEsICJJL08gZXJyb3IiKTsKIAlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBpbnQgc3R2MDkweF9kdmJzX3RyYWNrX2NybChzdHJ1Y3Qgc3R2MDkweF9zdGF0ZSAqc3RhdGUpCiB7Ci0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MzApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MzApIHsKIAkJLyogU2V0IEFDTEMgQkNMQyBvcHRpbWlzZWQgdmFsdWUgdnMgU1IgKi8KIAkJaWYgKHN0YXRlLT5zcmF0ZSA+PSAxNTAwMDAwMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEFDTEMsIDB4MmIpIDwgMCkKQEAgLTEyMTUsNyArMTI5OCw3IEBACiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBCQ0xDLCAweDA5KSA8IDApCiAJCQlnb3RvIGVycjsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPD0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDw9IDB4MjApIHsKIAkJCS8qIGVuYWJsZSBTMiBjYXJyaWVyIGxvb3AgKi8KIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVIyQ0ZHLCAweDI2KSA8IDApCiAJCQkJZ290byBlcnI7CkBAIC0xMjQ2LDYgKzEzMjksMTAgQEAKIAlkZWZhdWx0OgogCQkvKiBlbmFibGUgRFZCLVMyIGFuZCBEVkItUzIgaW4gQXV0byBNT0RFICovCiAJCXJlZyA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgRE1EQ0ZHTUQpOworCQlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgRFZCUzFfRU5BQkxFX0ZJRUxELCAwKTsKKwkJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIERWQlMyX0VOQUJMRV9GSUVMRCwgMCk7CisJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBETURDRkdNRCwgcmVnKSA8IDApCisJCQlnb3RvIGVycjsKIAkJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIERWQlMxX0VOQUJMRV9GSUVMRCwgMSk7CiAJCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBEVkJTMl9FTkFCTEVfRklFTEQsIDEpOwogCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgRE1EQ0ZHTUQsIHJlZykgPCAwKQpAQCAtMTI1Nyw3ICsxMzQ0LDcgQEAKIAkJaWYgKHN0djA5MHhfZHZic190cmFja19jcmwoc3RhdGUpIDwgMCkKIAkJCWdvdG8gZXJyOwogCi0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA8PSAweDIwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPD0gMHgyMCkgewogCQkJLyogZW5hYmxlIFMyIGNhcnJpZXIgbG9vcCAqLwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUjJDRkcsIDB4MjYpIDwgMCkKIAkJCQlnb3RvIGVycjsKQEAgLTEzMDQsNyArMTM5MSw3IEBACiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIERNRElTVEFURSwgcmVnKSA8IDApCiAJCWdvdG8gZXJyOwogCi0JaWYgKHN0YXRlLT5kZXZfdmVyIDw9IDB4MjApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDw9IDB4MjApIHsKIAkJaWYgKHN0YXRlLT5zcmF0ZSA8PSA1MDAwMDAwKSB7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ0FSQ0ZHLCAweDQ0KSA8IDApCiAJCQkJZ290byBlcnI7CkBAIC0xMzQ4LDcgKzE0MzUsNyBAQAogCQkJICogQ0ZSIG1heCA9ICsxTUh6CiAJCQkgKi8KIAkJCWZyZXFfYWJzICA9IDEwMDAgPDwgMTY7Ci0JCQlmcmVxX2FicyAvPSAoc3RhdGUtPm1jbGsgLyAxMDAwKTsKKwkJCWZyZXFfYWJzIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDAwKTsKIAkJCWZyZXEgICAgICA9IChzMTYpIGZyZXFfYWJzOwogCQl9IGVsc2UgewogCQkJLyogQ09MRCBTdGFydApAQCAtMTM1OCw3ICsxNDQ1LDcgQEAKIAkJCSAqLwogCQkJZnJlcV9hYnMgID0gKHN0YXRlLT5zZWFyY2hfcmFuZ2UgLyAyMDAwKSArIDYwMDsKIAkJCWZyZXFfYWJzICA9IGZyZXFfYWJzIDw8IDE2OwotCQkJZnJlcV9hYnMgLz0gKHN0YXRlLT5tY2xrIC8gMTAwMCk7CisJCQlmcmVxX2FicyAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwMCk7CiAJCQlmcmVxICAgICAgPSAoczE2KSBmcmVxX2FiczsKIAkJfQogCkBAIC0xMzgxLDcgKzE0NjgsNyBAQAogCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDRlJJTklUMCwgMCkgPCAwKQogCQlnb3RvIGVycjsKIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBFUVVBTENGRywgMHg0MSkgPCAwKQogCQkJZ290byBlcnI7CiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBGRkVDRkcsIDB4NDEpIDwgMCkKQEAgLTE0MTgsMTAgKzE1MDUsMTAgQEAKIAlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgUlRDLCAweDg4KSA8IDApCiAJCWdvdG8gZXJyOwogCi0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJLypGcmVxdWVuY3kgb2Zmc2V0IGRldGVjdG9yIHNldHRpbmcqLwogCQlpZiAoc3RhdGUtPnNyYXRlIDwgMjAwMDAwMCkgewotCQkJaWYgKHN0YXRlLT5kZXZfdmVyIDw9IDB4MjApIHsKKwkJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPD0gMHgyMCkgewogCQkJCS8qIEN1dCAyICovCiAJCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUkZSRVEsIDB4MzkpIDwgMCkKIAkJCQkJZ290byBlcnI7CkBAIC0xNTEyLDcgKzE1OTksNyBAQAogCQlzdGVwcyA9IDE7CiAKIAlkaXIgPSAxOwotCWZyZXFfc3RlcCA9ICgxMDAwMDAwICogMjU2KSAvIChzdGF0ZS0+bWNsayAvIDI1Nik7CisJZnJlcV9zdGVwID0gKDEwMDAwMDAgKiAyNTYpIC8gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDI1Nik7CiAJZnJlcV9pbml0ID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBzdGVwczsgaSsrKSB7CkBAIC0xNTgzLDcgKzE2NzAsNyBAQAogCXUzMiBzcmF0ZV9jb2Fyc2UgPSAwLCBhZ2MyID0gMCwgY2FyX3N0ZXAgPSAxMjAwLCByZWc7CiAJdTMyIGFnYzJ0aDsKIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDMwKQorCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgzMCkKIAkJYWdjMnRoID0gMHgyZTAwOwogCWVsc2UKIAkJYWdjMnRoID0gMHgxZjAwOwpAQCAtMTYxOSwxMyArMTcwNiwxMyBAQAogCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBBR0MyUkVGLCAweDUwKSA8IDApCiAJCWdvdG8gZXJyOwogCi0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MzApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MzApIHsKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUkZSRVEsIDB4OTkpIDwgMCkKIAkJCWdvdG8gZXJyOwogCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSU1RFUCwgMHg5OCkgPCAwKQogCQkJZ290byBlcnI7CiAKLQl9IGVsc2UgaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwl9IGVsc2UgaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDZhKSA8IDApCiAJCQlnb3RvIGVycjsKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUlNURVAsIDB4OTUpIDwgMCkKQEAgLTE2NzcsNyArMTc2NCw3IEBACiAJCQkJU1RWMDkweF9SRUFEX0RFTU9EKHN0YXRlLCBBR0MySTApOwogCQl9CiAJCWFnYzIgLz0gMTA7Ci0JCXNyYXRlX2NvYXJzZSA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+bWNsayk7CisJCXNyYXRlX2NvYXJzZSA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+aW50ZXJuYWwtPm1jbGspOwogCQljdXJfc3RlcCsrOwogCQlkaXIgKj0gLTE7CiAJCWlmICgodG1nX2NwdCA+PSA1KSAmJiAoYWdjMiA8IGFnYzJ0aCkgJiYKQEAgLTE2OTUsMTIgKzE3ODIsMTIgQEAKIAogCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9mcmVxdWVuY3kpIHsKIAkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2ZyZXF1ZW5jeShmZSwgZnJlcSkgPCAwKQotCQkJCQlnb3RvIGVycjsKKwkJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJCX0KIAogCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYW5kd2lkdGgpIHsKIAkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2JhbmR3aWR0aChmZSwgc3RhdGUtPnR1bmVyX2J3KSA8IDApCi0JCQkJCWdvdG8gZXJyOworCQkJCQlnb3RvIGVycl9nYXRlb2ZmOwogCQkJfQogCiAJCQlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKSA8IDApCkBAIC0xNzEzLDcgKzE4MDAsNyBAQAogCiAJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X3N0YXR1cykgewogCQkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9nZXRfc3RhdHVzKGZlLCAmcmVnKSA8IDApCi0JCQkJCWdvdG8gZXJyOworCQkJCQlnb3RvIGVycl9nYXRlb2ZmOwogCQkJfQogCiAJCQlpZiAocmVnKQpAQCAtMTcyOSw5ICsxODE2LDEyIEBACiAJaWYgKCF0bWdfbG9jaykKIAkJc3JhdGVfY29hcnNlID0gMDsKIAllbHNlCi0JCXNyYXRlX2NvYXJzZSA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+bWNsayk7CisJCXNyYXRlX2NvYXJzZSA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+aW50ZXJuYWwtPm1jbGspOwogCiAJcmV0dXJuIHNyYXRlX2NvYXJzZTsKKworZXJyX2dhdGVvZmY6CisJc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIGVycjoKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CiAJcmV0dXJuIC0xOwpAQCAtMTc0MSw3ICsxODMxLDcgQEAKIHsKIAl1MzIgc3JhdGVfY29hcnNlLCBmcmVxX2NvYXJzZSwgc3ltLCByZWc7CiAKLQlzcmF0ZV9jb2Fyc2UgPSBzdHYwOTB4X2dldF9zcmF0ZShzdGF0ZSwgc3RhdGUtPm1jbGspOworCXNyYXRlX2NvYXJzZSA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+aW50ZXJuYWwtPm1jbGspOwogCWZyZXFfY29hcnNlICA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgQ0ZSMikgPDwgODsKIAlmcmVxX2NvYXJzZSB8PSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIENGUjEpOwogCXN5bSA9IDEzICogKHNyYXRlX2NvYXJzZSAvIDEwKTsgLyogU0ZSVVAgPSBTRlIgKyAzMCUgKi8KQEAgLTE3NjcsMTAgKzE4NTcsMTAgQEAKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEFHQzJSRUYsIDB4MzgpIDwgMCkKIAkJCWdvdG8gZXJyOwogCi0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDMwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgzMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUkZSRVEsIDB4NzkpIDwgMCkKIAkJCQlnb3RvIGVycjsKLQkJfSBlbHNlIGlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJCX0gZWxzZSBpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDQ5KSA8IDApCiAJCQkJZ290byBlcnI7CiAJCX0KQEAgLTE3NzgsMjAgKzE4NjgsMjAgQEAKIAkJaWYgKHNyYXRlX2NvYXJzZSA+IDMwMDAwMDApIHsKIAkJCXN5bSAgPSAxMyAqIChzcmF0ZV9jb2Fyc2UgLyAxMCk7IC8qIFNGUlVQID0gU0ZSICsgMzAlICovCiAJCQlzeW0gID0gKHN5bSAvIDEwMDApICogNjU1MzY7Ci0JCQlzeW0gLz0gKHN0YXRlLT5tY2xrIC8gMTAwMCk7CisJCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDEwMDApOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUlVQMSwgKHN5bSA+PiA4KSAmIDB4N2YpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJVUDAsIHN5bSAmIDB4ZmYpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCXN5bSAgPSAxMCAqIChzcmF0ZV9jb2Fyc2UgLyAxMyk7IC8qIFNGUkxPVyA9IFNGUiAtIDMwJSAqLwogCQkJc3ltICA9IChzeW0gLyAxMDAwKSAqIDY1NTM2OwotCQkJc3ltIC89IChzdGF0ZS0+bWNsayAvIDEwMDApOworCQkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDAwKTsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJMT1cxLCAoc3ltID4+IDgpICYgMHg3ZikgPCAwKQogCQkJCWdvdG8gZXJyOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUkxPVzAsIHN5bSAmIDB4ZmYpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCXN5bSAgPSAoc3JhdGVfY29hcnNlIC8gMTAwMCkgKiA2NTUzNjsKLQkJCXN5bSAvPSAoc3RhdGUtPm1jbGsgLyAxMDAwKTsKKwkJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwMCk7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSSU5JVDEsIChzeW0gPj4gOCkgJiAweGZmKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSSU5JVDAsIHN5bSAmIDB4ZmYpIDwgMCkKQEAgLTE3OTksMjAgKzE4ODksMjAgQEAKIAkJfSBlbHNlIHsKIAkJCXN5bSAgPSAxMyAqIChzcmF0ZV9jb2Fyc2UgLyAxMCk7IC8qIFNGUlVQID0gU0ZSICsgMzAlICovCiAJCQlzeW0gID0gKHN5bSAvIDEwMCkgKiA2NTUzNjsKLQkJCXN5bSAvPSAoc3RhdGUtPm1jbGsgLyAxMDApOworCQkJc3ltIC89IChzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDApOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUlVQMSwgKHN5bSA+PiA4KSAmIDB4N2YpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJVUDAsIHN5bSAmIDB4ZmYpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCXN5bSAgPSAxMCAqIChzcmF0ZV9jb2Fyc2UgLyAxNCk7IC8qIFNGUkxPVyA9IFNGUiAtIDMwJSAqLwogCQkJc3ltICA9IChzeW0gLyAxMDApICogNjU1MzY7Ci0JCQlzeW0gLz0gKHN0YXRlLT5tY2xrIC8gMTAwKTsKKwkJCXN5bSAvPSAoc3RhdGUtPmludGVybmFsLT5tY2xrIC8gMTAwKTsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBTRlJMT1cxLCAoc3ltID4+IDgpICYgMHg3ZikgPCAwKQogCQkJCWdvdG8gZXJyOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFNGUkxPVzAsIHN5bSAmIDB4ZmYpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCXN5bSAgPSAoc3JhdGVfY29hcnNlIC8gMTAwKSAqIDY1NTM2OwotCQkJc3ltIC89IChzdGF0ZS0+bWNsayAvIDEwMCk7CisJCQlzeW0gLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDEwMCk7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSSU5JVDEsIChzeW0gPj4gOCkgJiAweGZmKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSSU5JVDAsIHN5bSAmIDB4ZmYpIDwgMCkKQEAgLTE4NzQsMTggKzE5NjQsMTkgQEAKIAl1MzIgYWdjMiwgcmVnLCBzcmF0ZV9jb2Fyc2U7CiAJczMyIGNwdF9mYWlsLCBhZ2MyX292Zmx3LCBpOwogCXU4IGtfcmVmLCBrX21heCwga19taW47Ci0JaW50IGNvYXJzZV9mYWlsLCBsb2NrOworCWludCBjb2Fyc2VfZmFpbCA9IDA7CisJaW50IGxvY2s7CiAKIAlrX21heCA9IDExMDsKIAlrX21pbiA9IDEwOwogCiAJYWdjMiA9IHN0djA5MHhfZ2V0X2FnYzJfbWluX2xldmVsKHN0YXRlKTsKIAotCWlmIChhZ2MyID4gU1RWMDkweF9TRUFSQ0hfQUdDMl9USChzdGF0ZS0+ZGV2X3ZlcikpIHsKKwlpZiAoYWdjMiA+IFNUVjA5MHhfU0VBUkNIX0FHQzJfVEgoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyKSkgewogCQlsb2NrID0gMDsKIAl9IGVsc2UgewogCi0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA8PSAweDIwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPD0gMHgyMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUkNGRywgMHhjNCkgPCAwKQogCQkJCWdvdG8gZXJyOwogCQl9IGVsc2UgewpAQCAtMTg5Nyw3ICsxOTg4LDcgQEAKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFJUQ1MyLCAweDQ0KSA8IDApCiAJCQlnb3RvIGVycjsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBFUVVBTENGRywgMHg0MSkgPCAwKQogCQkJCWdvdG8gZXJyOwogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEZGRUNGRywgMHg0MSkgPCAwKQpAQCAtMTk1Niw3ICsyMDQ3LDcgQEAKIAl1MzIgcmVnOwogCXMzMiB0bWdfY3B0ID0gMCwgaTsKIAl1OCBmcmVxLCB0bWdfdGhoLCB0bWdfdGhsOwotCWludCB0bWdfbG9jazsKKwlpbnQgdG1nX2xvY2sgPSAwOwogCiAJZnJlcSA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgQ0FSRlJFUSk7CiAJdG1nX3RoaCA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgVE1HVEhSSVNFKTsKQEAgLTIwODAsMTIgKzIxNzEsMTIgQEAKIAogCQkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2ZyZXF1ZW5jeSkgewogCQkJCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9mcmVxdWVuY3koZmUsIGZyZXEpIDwgMCkKLQkJCQkJCQlnb3RvIGVycjsKKwkJCQkJCQlnb3RvIGVycl9nYXRlb2ZmOwogCQkJCQl9CiAKIAkJCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYW5kd2lkdGgpIHsKIAkJCQkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmFuZHdpZHRoKGZlLCBzdGF0ZS0+dHVuZXJfYncpIDwgMCkKLQkJCQkJCQlnb3RvIGVycjsKKwkJCQkJCQlnb3RvIGVycl9nYXRlb2ZmOwogCQkJCQl9CiAKIAkJCQkJaWYgKHN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCkgPCAwKQpAQCAtMjA5OCw3ICsyMTg5LDcgQEAKIAogCQkJCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X3N0YXR1cykgewogCQkJCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9zdGF0dXMoZmUsICZyZWcpIDwgMCkKLQkJCQkJCQlnb3RvIGVycjsKKwkJCQkJCQlnb3RvIGVycl9nYXRlb2ZmOwogCQkJCQl9CiAKIAkJCQkJaWYgKHJlZykKQEAgLTIxMjksNiArMjIyMCw4IEBACiAKIAlyZXR1cm4gbG9jazsKIAorZXJyX2dhdGVvZmY6CisJc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIGVycjoKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CiAJcmV0dXJuIC0xOwpAQCAtMjE0MiwxMyArMjIzNSwxMyBAQAogCWNhcl9tYXggPSBzdGF0ZS0+c2VhcmNoX3JhbmdlIC8gMTAwMDsKIAljYXJfbWF4ICs9IGNhcl9tYXggLyAxMDsKIAljYXJfbWF4ICA9IDY1NTM2ICogKGNhcl9tYXggLyAyKTsKLQljYXJfbWF4IC89IChzdGF0ZS0+bWNsayAvIDEwMDApOworCWNhcl9tYXggLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDEwMDApOwogCiAJaWYgKGNhcl9tYXggPiAweDQwMDApCiAJCWNhcl9tYXggPSAweDQwMDAgOyAvKiBtYXhjYXJyaWVyIHNob3VsZCBiZTw9ICstMS80IE1jbGsgKi8KIAogCWluYyAgPSBzcmF0ZTsKLQlpbmMgLz0gc3RhdGUtPm1jbGsgLyAxMDAwOworCWluYyAvPSBzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDAwOwogCWluYyAqPSAyNTY7CiAJaW5jICo9IDI1NjsKIAlpbmMgLz0gMTAwMDsKQEAgLTIyMDksNyArMjMwMiw3IEBACiAKIAljYXJfbWF4ICs9IChjYXJfbWF4IC8gMTApOyAvKiAxMCUgbWFyZ2luICovCiAJY2FyX21heCAgPSAoNjU1MzYgKiBjYXJfbWF4IC8gMik7Ci0JY2FyX21heCAvPSBzdGF0ZS0+bWNsayAvIDEwMDA7CisJY2FyX21heCAvPSBzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyAxMDAwOwogCiAJaWYgKGNhcl9tYXggPiAweDQwMDApCiAJCWNhcl9tYXggPSAweDQwMDA7CkBAIC0yMjM0LDcgKzIzMjcsNyBAQAogCWNhcl9tYXggID0gc3RhdGUtPnNlYXJjaF9yYW5nZSAvIDEwMDA7CiAJY2FyX21heCArPSAoY2FyX21heCAvIDEwKTsKIAljYXJfbWF4ICA9ICg2NTUzNiAqIGNhcl9tYXggLyAyKTsKLQljYXJfbWF4IC89IChzdGF0ZS0+bWNsayAvIDEwMDApOworCWNhcl9tYXggLz0gKHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvIDEwMDApOwogCWlmIChjYXJfbWF4ID4gMHg0MDAwKQogCQljYXJfbWF4ID0gMHg0MDAwOwogCkBAIC0yMzA0LDcgKzIzOTcsNyBAQAogCWNhc2UgU1RWMDkweF9TRUFSQ0hfRFZCUzE6CiAJY2FzZSBTVFYwOTB4X1NFQVJDSF9EU1M6CiAJCS8qIGFjY2VsZXJhdGUgdGhlIGZyZXF1ZW5jeSBkZXRlY3RvciAqLwotCQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDNCKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCX0KQEAgLTIzMTUsNyArMjQwOCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTVFYwOTB4X1NFQVJDSF9EVkJTMjoKLQkJaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ09SUkVMQUJTLCAweDc5KSA8IDApCiAJCQkJZ290byBlcnI7CiAJCX0KQEAgLTIzMjgsNyArMjQyMSw3IEBACiAJY2FzZSBTVFYwOTB4X1NFQVJDSF9BVVRPOgogCWRlZmF1bHQ6CiAJCS8qIGFjY2VsZXJhdGUgdGhlIGZyZXF1ZW5jeSBkZXRlY3RvciAqLwotCQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDNiKSA8IDApCiAJCQkJZ290byBlcnI7CiAJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ09SUkVMQUJTLCAweDc5KSA8IDApCkBAIC0yMzUwLDcgKzI0NDMsNyBAQAogCQkvKnJ1biB0aGUgU1cgc2VhcmNoIDIgdGltZXMgbWF4aW11bSovCiAJCWlmIChsb2NrIHx8IG5vX3NpZ25hbCB8fCAodHJpYWxzID09IDIpKSB7CiAJCQkvKkNoZWNrIGlmIHRoZSBkZW1vZCBpcyBub3QgbG9zaW5nIGxvY2sgaW4gRFZCUzIqLwotCQkJaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwkJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDQVJGUkVRLCAweDQ5KSA8IDApCiAJCQkJCWdvdG8gZXJyOwogCQkJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDT1JSRUxBQlMsIDB4OWUpIDwgMCkKQEAgLTIzNzIsNyArMjQ2NSw3IEBACiAJCQkJCS8qRkFMU0UgbG9jaywgVGhlIGRlbW9kIGlzIGxvb3NpbmcgbG9jayAqLwogCQkJCQlsb2NrID0gMDsKIAkJCQkJaWYgKHRyaWFscyA8IDIpIHsKLQkJCQkJCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJCQkJCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJCQkJCQlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgQ09SUkVMQUJTLCAweDc5KSA8IDApCiAJCQkJCQkJCWdvdG8gZXJyOwogCQkJCQkJfQpAQCAtMjQyMiwxMSArMjUxNSwxMSBAQAogCWRlcm90IHw9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgQ0ZSMCk7CiAKIAlkZXJvdCA9IGNvbXAyKGRlcm90LCAyNCk7Ci0JaW50XzEgPSBzdGF0ZS0+bWNsayA+PiAxMjsKKwlpbnRfMSA9IG1jbGsgPj4gMTI7CiAJaW50XzIgPSBkZXJvdCA+PiAxMjsKIAogCS8qIGNhcnJpZXJfZnJlcXVlbmN5ID0gTWFzdGVyQ2xvY2sgKiBSZWcgLyAyXjI0ICovCi0JdG1wXzEgPSBzdGF0ZS0+bWNsayAlIDB4MTAwMDsKKwl0bXBfMSA9IG1jbGsgJSAweDEwMDA7CiAJdG1wXzIgPSBkZXJvdCAlIDB4MTAwMDsKIAogCWRlcm90ID0gKGludF8xICogaW50XzIpICsKQEAgLTI1MDIsMTMgKzI1OTUsMTMgQEAKIAogCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9nZXRfZnJlcXVlbmN5KSB7CiAJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9nZXRfZnJlcXVlbmN5KGZlLCAmc3RhdGUtPmZyZXF1ZW5jeSkgPCAwKQotCQkJZ290byBlcnI7CisJCQlnb3RvIGVycl9nYXRlb2ZmOwogCX0KIAogCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApIDwgMCkKIAkJZ290byBlcnI7CiAKLQlvZmZzdF9mcmVxID0gc3R2MDkweF9nZXRfY2FyX2ZyZXEoc3RhdGUsIHN0YXRlLT5tY2xrKSAvIDEwMDA7CisJb2Zmc3RfZnJlcSA9IHN0djA5MHhfZ2V0X2Nhcl9mcmVxKHN0YXRlLCBzdGF0ZS0+aW50ZXJuYWwtPm1jbGspIC8gMTAwMDsKIAlzdGF0ZS0+ZnJlcXVlbmN5ICs9IG9mZnN0X2ZyZXE7CiAKIAlpZiAoc3R2MDkweF9nZXRfdml0ZXJiaShzdGF0ZSkgPCAwKQpAQCAtMjUzMCw3ICsyNjIzLDcgQEAKIAogCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X2ZyZXF1ZW5jeSkgewogCQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9mcmVxdWVuY3koZmUsICZzdGF0ZS0+ZnJlcXVlbmN5KSA8IDApCi0JCQkJZ290byBlcnI7CisJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJfQogCiAJCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApIDwgMCkKQEAgLTI1NTAsNiArMjY0Myw5IEBACiAJfQogCiAJcmV0dXJuIFNUVjA5MHhfT1VUT0ZSQU5HRTsKKworZXJyX2dhdGVvZmY6CisJc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIGVycjoKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CiAJcmV0dXJuIC0xOwpAQCAtMjU3OSw3ICsyNjc1LDcgQEAKIAlzMzIgaTsKIAlzdHJ1Y3Qgc3R2MDkweF9sb25nX2ZyYW1lX2NybG9vcCAqY2FyX2xvb3AsICpjYXJfbG9vcF9xcHNrX2xvdywgKmNhcl9sb29wX2Fwc2tfbG93OwogCi0JaWYgKHN0YXRlLT5kZXZfdmVyID09IDB4MjApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID09IDB4MjApIHsKIAkJY2FyX2xvb3AJCT0gc3R2MDkweF9zMl9jcmxfY3V0MjA7CiAJCWNhcl9sb29wX3Fwc2tfbG93CT0gc3R2MDkweF9zMl9sb3dxcHNrX2NybF9jdXQyMDsKIAkJY2FyX2xvb3BfYXBza19sb3cJPSBzdHYwOTB4X3MyX2Fwc2tfY3JsX2N1dDIwOwpAQCAtMjcwMCw3ICsyNzk2LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MzApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MzApIHsKIAkJLyogQ3V0IDMuMCBhbmQgdXAgKi8KIAkJc2hvcnRfY3JsID0gc3R2MDkweF9zMl9zaG9ydF9jcmxfY3V0MzA7CiAJfSBlbHNlIHsKQEAgLTI3MzIsNyArMjgyOCw3IEBACiAJczMyIHNyYXRlLCBwaWxvdHMsIGFjbGMsIGZfMSwgZl8wLCBpID0gMCwgYmxpbmRfdHVuZSA9IDA7CiAJdTMyIHJlZzsKIAotCXNyYXRlICA9IHN0djA5MHhfZ2V0X3NyYXRlKHN0YXRlLCBzdGF0ZS0+bWNsayk7CisJc3JhdGUgID0gc3R2MDkweF9nZXRfc3JhdGUoc3RhdGUsIHN0YXRlLT5pbnRlcm5hbC0+bWNsayk7CiAJc3JhdGUgKz0gc3R2MDkweF9nZXRfdG1nb2Zmc3Qoc3RhdGUsIHNyYXRlKTsKIAogCXN3aXRjaCAoc3RhdGUtPmRlbHN5cykgewpAQCAtMjc1MSw3ICsyODQ3LDcgQEAKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIERFTU9ELCByZWcpIDwgMCkKIAkJCWdvdG8gZXJyOwogCi0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDMwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgzMCkgewogCQkJaWYgKHN0djA5MHhfZ2V0X3ZpdGVyYmkoc3RhdGUpIDwgMCkKIAkJCQlnb3RvIGVycjsKIApAQCAtMjg2OCw3ICsyOTY0LDcgQEAKIAkJCWdvdG8gZXJyOwogCX0KIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCWlmICgoc3RhdGUtPnNlYXJjaF9tb2RlID09IFNUVjA5MHhfU0VBUkNIX0RWQlMxKQl8fAogCQkgICAgKHN0YXRlLT5zZWFyY2hfbW9kZSA9PSBTVFYwOTB4X1NFQVJDSF9EU1MpCQl8fAogCQkgICAgKHN0YXRlLT5zZWFyY2hfbW9kZSA9PSBTVFYwOTB4X1NFQVJDSF9BVVRPKSkgewpAQCAtMjg5MCw3ICsyOTg2LDggQEAKIAlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgU0ZSTE9XMSwgMHg4MCkgPCAwKQogCQlnb3RvIGVycjsKIAotCWlmICgoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgfHwgKGJsaW5kX3R1bmUgPT0gMSkgfHwgKHN0YXRlLT5zcmF0ZSA8IDEwMDAwMDAwKSkgeworCWlmICgoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHx8IChibGluZF90dW5lID09IDEpIHx8CisJICAgIChzdGF0ZS0+c3JhdGUgPCAxMDAwMDAwMCkpIHsKIAkJLyogdXBkYXRlIGluaXRpYWwgY2FycmllciBmcmVxIHdpdGggdGhlIGZvdW5kIGZyZXEgb2Zmc2V0ICovCiAJCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBDRlJJTklUMSwgZl8xKSA8IDApCiAJCQlnb3RvIGVycjsKQEAgLTI4OTgsNyArMjk5NSw3IEBACiAJCQlnb3RvIGVycjsKIAkJc3RhdGUtPnR1bmVyX2J3ID0gc3R2MDkweF9jYXJfd2lkdGgoc3JhdGUsIHN0YXRlLT5yb2xsb2ZmKSArIDEwMDAwMDAwOwogCi0JCWlmICgoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgfHwgKGJsaW5kX3R1bmUgPT0gMSkpIHsKKwkJaWYgKChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgfHwgKGJsaW5kX3R1bmUgPT0gMSkpIHsKIAogCQkJaWYgKHN0YXRlLT5hbGdvICE9IFNUVjA5MHhfV0FSTV9TRUFSQ0gpIHsKIApAQCAtMjkwNyw3ICszMDA0LDcgQEAKIAogCQkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmFuZHdpZHRoKSB7CiAJCQkJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmFuZHdpZHRoKGZlLCBzdGF0ZS0+dHVuZXJfYncpIDwgMCkKLQkJCQkJCWdvdG8gZXJyOworCQkJCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAkJCQl9CiAKIAkJCQlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKSA8IDApCkBAIC0yOTUwLDcgKzMwNDcsNyBAQAogCiAJfQogCi0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID49IDB4MjApIHsKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENBUkZSRVEsIDB4NDkpIDwgMCkKIAkJCWdvdG8gZXJyOwogCX0KQEAgLTI5NTksNiArMzA1Niw5IEBACiAJCXN0djA5MHhfc2V0X3ZpdF90aHRyYWNxKHN0YXRlKTsKIAogCXJldHVybiAwOworCitlcnJfZ2F0ZW9mZjoKKwlzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApOwogZXJyOgogCWRwcmludGsoRkVfRVJST1IsIDEsICJJL08gZXJyb3IiKTsKIAlyZXR1cm4gLTE7CkBAIC0zMDI2LDcgKzMxMjYsNyBAQAogewogCXUzMiByZWc7CiAKLQlpZiAoc3RhdGUtPmRldl92ZXIgPD0gMHgyMCkgeworCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPD0gMHgyMCkgewogCQkvKiByb2xsb2ZmIHRvIGF1dG8gbW9kZSBpZiBEVkJTMiAqLwogCQlyZWcgPSBTVFYwOTB4X1JFQURfREVNT0Qoc3RhdGUsIERFTU9EKTsKIAkJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIE1BTlVBTF9TWFJPTExPRkZfRklFTEQsIDB4MDApOwpAQCAtMzA2Miw3ICszMTYyLDcgQEAKIAlpZiAoU1RWMDkweF9XUklURV9ERU1PRChzdGF0ZSwgRE1ESVNUQVRFLCAweDVjKSA8IDApIC8qIERlbW9kIHN0b3AgKi8KIAkJZ290byBlcnI7CiAKLQlpZiAoc3RhdGUtPmRldl92ZXIgPj0gMHgyMCkgeworCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQlpZiAoc3RhdGUtPnNyYXRlID4gNTAwMDAwMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIENPUlJFTEFCUywgMHg5ZSkgPCAwKQogCQkJCWdvdG8gZXJyOwpAQCAtMzEwMiw3ICszMjAyLDcgQEAKIAkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEFHQzJSRUYsIDB4MzgpIDwgMCkKIAkJCWdvdG8gZXJyOwogCi0JCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPj0gMHgyMCkgewogCQkJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEtSRUZUTUcsIDB4NWEpIDwgMCkKIAkJCQlnb3RvIGVycjsKIAkJCWlmIChzdGF0ZS0+YWxnbyA9PSBTVFYwOTB4X0NPTERfU0VBUkNIKQpAQCAtMzEyMCw5ICszMjIwLDExIEBACiAJCWlmIChzdHYwOTB4X3NldF9zcmF0ZShzdGF0ZSwgc3RhdGUtPnNyYXRlKSA8IDApCiAJCQlnb3RvIGVycjsKIAotCQlpZiAoc3R2MDkweF9zZXRfbWF4X3NyYXRlKHN0YXRlLCBzdGF0ZS0+bWNsaywgc3RhdGUtPnNyYXRlKSA8IDApCisJCWlmIChzdHYwOTB4X3NldF9tYXhfc3JhdGUoc3RhdGUsIHN0YXRlLT5pbnRlcm5hbC0+bWNsaywKKwkJCQkJICBzdGF0ZS0+c3JhdGUpIDwgMCkKIAkJCWdvdG8gZXJyOwotCQlpZiAoc3R2MDkweF9zZXRfbWluX3NyYXRlKHN0YXRlLCBzdGF0ZS0+bWNsaywgc3RhdGUtPnNyYXRlKSA8IDApCisJCWlmIChzdHYwOTB4X3NldF9taW5fc3JhdGUoc3RhdGUsIHN0YXRlLT5pbnRlcm5hbC0+bWNsaywKKwkJCQkJICBzdGF0ZS0+c3JhdGUpIDwgMCkKIAkJCWdvdG8gZXJyOwogCiAJCWlmIChzdGF0ZS0+c3JhdGUgPj0gMTAwMDAwMDApCkBAIC0zMTM2LDE4ICszMjM4LDIxIEBACiAJCWdvdG8gZXJyOwogCiAJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYmdhaW4pIHsKLQkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9iYmdhaW4oZmUsIDEwKSA8IDApIC8qIDEwZEIgKi8KLQkJCWdvdG8gZXJyOworCQlyZWcgPSBzdGF0ZS0+Y29uZmlnLT50dW5lcl9iYmdhaW47CisJCWlmIChyZWcgPT0gMCkKKwkJCXJlZyA9IDEwOyAvKiBkZWZhdWx0OiAxMGRCICovCisJCWlmIChzdGF0ZS0+Y29uZmlnLT50dW5lcl9zZXRfYmJnYWluKGZlLCByZWcpIDwgMCkKKwkJCWdvdG8gZXJyX2dhdGVvZmY7CiAJfQogCiAJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9mcmVxdWVuY3kpIHsKIAkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX3NldF9mcmVxdWVuY3koZmUsIHN0YXRlLT5mcmVxdWVuY3kpIDwgMCkKLQkJCWdvdG8gZXJyOworCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAl9CiAKIAlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2JhbmR3aWR0aCkgewogCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfc2V0X2JhbmR3aWR0aChmZSwgc3RhdGUtPnR1bmVyX2J3KSA8IDApCi0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZXJyX2dhdGVvZmY7CiAJfQogCiAJaWYgKHN0djA5MHhfaTJjX2dhdGVfY3RybChmZSwgMCkgPCAwKQpAQCAtMzE1NSwyMiArMzI2MCwyMiBAQAogCiAJbXNsZWVwKDUwKTsKIAotCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDEpIDwgMCkKLQkJZ290byBlcnI7Ci0KIAlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X3N0YXR1cykgewotCQlpZiAoc3RhdGUtPmNvbmZpZy0+dHVuZXJfZ2V0X3N0YXR1cyhmZSwgJnJlZykgPCAwKQorCQlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAxKSA8IDApCiAJCQlnb3RvIGVycjsKKwkJaWYgKHN0YXRlLT5jb25maWctPnR1bmVyX2dldF9zdGF0dXMoZmUsICZyZWcpIDwgMCkKKwkJCWdvdG8gZXJyX2dhdGVvZmY7CisJCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApIDwgMCkKKwkJCWdvdG8gZXJyOworCisJCWlmIChyZWcpCisJCQlkcHJpbnRrKEZFX0RFQlVHLCAxLCAiVHVuZXIgcGhhc2UgbG9ja2VkIik7CisJCWVsc2UgeworCQkJZHByaW50ayhGRV9ERUJVRywgMSwgIlR1bmVyIHVubG9ja2VkIik7CisJCQlyZXR1cm4gU1RWMDkweF9OT0NBUlJJRVI7CisJCX0KIAl9CiAKLQlpZiAocmVnKQotCQlkcHJpbnRrKEZFX0RFQlVHLCAxLCAiVHVuZXIgcGhhc2UgbG9ja2VkIik7Ci0JZWxzZQotCQlkcHJpbnRrKEZFX0RFQlVHLCAxLCAiVHVuZXIgdW5sb2NrZWQiKTsKLQotCWlmIChzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApIDwgMCkKLQkJZ290byBlcnI7Ci0KIAltc2xlZXAoMTApOwogCWFnYzFfcG93ZXIgPSBNQUtFV09SRDE2KFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgQUdDSVFJTjEpLAogCQkJCVNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgQUdDSVFJTjApKTsKQEAgLTMxOTQsNyArMzI5OSw3IEBACiAJCXJlZyA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgREVNT0QpOwogCQlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgU1BFQ0lOVl9DT05UUk9MX0ZJRUxELCBzdGF0ZS0+aW52ZXJzaW9uKTsKIAotCQlpZiAoc3RhdGUtPmRldl92ZXIgPD0gMHgyMCkgeworCQlpZiAoc3RhdGUtPmludGVybmFsLT5kZXZfdmVyIDw9IDB4MjApIHsKIAkJCS8qIHJvbGxvZmYgdG8gYXV0byBtb2RlIGlmIERWQlMyICovCiAJCQlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgTUFOVUFMX1NYUk9MTE9GRl9GSUVMRCwgMSk7CiAJCX0gZWxzZSB7CkBAIC0zMjM4LDcgKzMzNDMsNyBAQAogCWlmICgobG9jaykgJiYgKHNpZ25hbF9zdGF0ZSA9PSBTVFYwOTB4X1JBTkdFT0spKSB7IC8qIHNpZ25hbCB3aXRoaW4gUmFuZ2UgKi8KIAkJc3R2MDkweF9vcHRpbWl6ZV90cmFjayhzdGF0ZSk7CiAKLQkJaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCQkvKiA+PSBDdXQgMi4wIDpyZWxlYXNlIFRTIHJlc2V0IGFmdGVyCiAJCQkgKiBkZW1vZCBsb2NrIGFuZCBvcHRpbWl6ZWQgVHJhY2tpbmcKIAkJCSAqLwpAQCAtMzI5Myw2ICszMzk4LDggQEAKIAl9CiAJcmV0dXJuIHNpZ25hbF9zdGF0ZTsKIAorZXJyX2dhdGVvZmY6CisJc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIGVycjoKIAlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIGVycm9yIik7CiAJcmV0dXJuIC0xOwpAQCAtMzMwMyw2ICszNDEwLDkgQEAKIAlzdHJ1Y3Qgc3R2MDkweF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKnByb3BzID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CiAKKwlpZiAocC0+ZnJlcXVlbmN5ID09IDApCisJCXJldHVybiBEVkJGRV9BTEdPX1NFQVJDSF9JTlZBTElEOworCiAJc3RhdGUtPmRlbHN5cyA9IHByb3BzLT5kZWxpdmVyeV9zeXN0ZW07CiAJc3RhdGUtPmZyZXF1ZW5jeSA9IHAtPmZyZXF1ZW5jeTsKIAlzdGF0ZS0+c3JhdGUgPSBwLT51LnFwc2suc3ltYm9sX3JhdGU7CkBAIC0zMzUzLDcgKzM0NjMsOCBAQAogCQkJaWYgKFNUVjA5MHhfR0VURklFTERfUHgocmVnLCBQS1RERUxJTl9MT0NLX0ZJRUxEKSkgewogCQkJCXJlZyA9IFNUVjA5MHhfUkVBRF9ERU1PRChzdGF0ZSwgVFNTVEFUVVMpOwogCQkJCWlmIChTVFYwOTB4X0dFVEZJRUxEX1B4KHJlZywgVFNGSUZPX0xJTkVPS19GSUVMRCkpIHsKLQkJCQkJKnN0YXR1cyA9IEZFX0hBU19DQVJSSUVSIHwKKwkJCQkJKnN0YXR1cyA9IEZFX0hBU19TSUdOQUwgfAorCQkJCQkJICBGRV9IQVNfQ0FSUklFUiB8CiAJCQkJCQkgIEZFX0hBU19WSVRFUkJJIHwKIAkJCQkJCSAgRkVfSEFTX1NZTkMgfAogCQkJCQkJICBGRV9IQVNfTE9DSzsKQEAgLTMzNzAsNyArMzQ4MSwxMSBAQAogCQkJaWYgKFNUVjA5MHhfR0VURklFTERfUHgocmVnLCBMT0NLRURWSVRfRklFTEQpKSB7CiAJCQkJcmVnID0gU1RWMDkweF9SRUFEX0RFTU9EKHN0YXRlLCBUU1NUQVRVUyk7CiAJCQkJaWYgKFNUVjA5MHhfR0VURklFTERfUHgocmVnLCBUU0ZJRk9fTElORU9LX0ZJRUxEKSkgewotCQkJCQkqc3RhdHVzID0gRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfVklURVJCSSB8IEZFX0hBU19TWU5DIHwgRkVfSEFTX0xPQ0s7CisJCQkJCSpzdGF0dXMgPSBGRV9IQVNfU0lHTkFMIHwKKwkJCQkJCSAgRkVfSEFTX0NBUlJJRVIgfAorCQkJCQkJICBGRV9IQVNfVklURVJCSSB8CisJCQkJCQkgIEZFX0hBU19TWU5DIHwKKwkJCQkJCSAgRkVfSEFTX0xPQ0s7CiAJCQkJfQogCQkJfQogCQl9CkBAIC0zNzcwLDYgKzM4ODUsMTUgQEAKIHsKIAlzdHJ1Y3Qgc3R2MDkweF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAorCXN0YXRlLT5pbnRlcm5hbC0+bnVtX3VzZWQtLTsKKwlpZiAoc3RhdGUtPmludGVybmFsLT5udW1fdXNlZCA8PSAwKSB7CisKKwkJZHByaW50ayhGRV9FUlJPUiwgMSwgIkFjdHVhbGx5IHJlbW92aW5nIik7CisKKwkJcmVtb3ZlX2RldihzdGF0ZS0+aW50ZXJuYWwpOworCQlrZnJlZShzdGF0ZS0+aW50ZXJuYWwpOworCX0KKwogCWtmcmVlKHN0YXRlKTsKIH0KIApAQCAtMzkwMSwxMCArNDAyNSwxMCBAQAogCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9OQ09BUlNFLCByZWcpIDwgMCkKIAkJZ290byBlcnI7CiAKLQlzdGF0ZS0+bWNsayA9IHN0djA5MHhfZ2V0X21jbGsoc3RhdGUpOworCXN0YXRlLT5pbnRlcm5hbC0+bWNsayA9IHN0djA5MHhfZ2V0X21jbGsoc3RhdGUpOwogCiAJLypTZXQgdGhlIERpc2VxQyBmcmVxdWVuY3kgdG8gMjJLSHogKi8KLQlkaXYgPSBzdGF0ZS0+bWNsayAvIDcwNDAwMDsKKwlkaXYgPSBzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLyA3MDQwMDA7CiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEYyMlRYLCBkaXYpIDwgMCkKIAkJZ290byBlcnI7CiAJaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIEYyMlJYLCBkaXYpIDwgMCkKQEAgLTM5MjAsNyArNDA0NCw3IEBACiB7CiAJdTMyIHJlZzsKIAotCWlmIChzdGF0ZS0+ZGV2X3ZlciA+PSAweDIwKSB7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCXN3aXRjaCAoc3RhdGUtPmNvbmZpZy0+dHMxX21vZGUpIHsKIAkJY2FzZSBTVFYwOTB4X1RTTU9ERV9QQVJBTExFTF9QVU5DVFVSRUQ6CiAJCWNhc2UgU1RWMDkweF9UU01PREVfRFZCQ0k6CkBAIC00MDkyLDYgKzQyMTYsNzEgQEAKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CisKKwlpZiAoc3RhdGUtPmNvbmZpZy0+dHMxX2NsayA+IDApIHsKKwkJdTMyIHNwZWVkOworCisJCXN3aXRjaCAoc3RhdGUtPmNvbmZpZy0+dHMxX21vZGUpIHsKKwkJY2FzZSBTVFYwOTB4X1RTTU9ERV9QQVJBTExFTF9QVU5DVFVSRUQ6CisJCWNhc2UgU1RWMDkweF9UU01PREVfRFZCQ0k6CisJCWRlZmF1bHQ6CisJCQlzcGVlZCA9IHN0YXRlLT5pbnRlcm5hbC0+bWNsayAvCisJCQkJKHN0YXRlLT5jb25maWctPnRzMV9jbGsgLyA0KTsKKwkJCWlmIChzcGVlZCA8IDB4MDgpCisJCQkJc3BlZWQgPSAweDA4OworCQkJaWYgKHNwZWVkID4gMHhGRikKKwkJCQlzcGVlZCA9IDB4RkY7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTB4X1RTTU9ERV9TRVJJQUxfUFVOQ1RVUkVEOgorCQljYXNlIFNUVjA5MHhfVFNNT0RFX1NFUklBTF9DT05USU5VT1VTOgorCQkJc3BlZWQgPSBzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLworCQkJCShzdGF0ZS0+Y29uZmlnLT50czFfY2xrIC8gMzIpOworCQkJaWYgKHNwZWVkIDwgMHgyMCkKKwkJCQlzcGVlZCA9IDB4MjA7CisJCQlpZiAoc3BlZWQgPiAweEZGKQorCQkJCXNwZWVkID0gMHhGRjsKKwkJCWJyZWFrOworCQl9CisJCXJlZyA9IHN0djA5MHhfcmVhZF9yZWcoc3RhdGUsIFNUVjA5MHhfUDFfVFNDRkdNKTsKKwkJU1RWMDkweF9TRVRGSUVMRF9QeChyZWcsIFRTRklGT19NQU5TUEVFRF9GSUVMRCwgMyk7CisJCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9QMV9UU0NGR00sIHJlZykgPCAwKQorCQkJZ290byBlcnI7CisJCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9QMV9UU1NQRUVELCBzcGVlZCkgPCAwKQorCQkJZ290byBlcnI7CisJfQorCisJaWYgKHN0YXRlLT5jb25maWctPnRzMl9jbGsgPiAwKSB7CisJCXUzMiBzcGVlZDsKKworCQlzd2l0Y2ggKHN0YXRlLT5jb25maWctPnRzMl9tb2RlKSB7CisJCWNhc2UgU1RWMDkweF9UU01PREVfUEFSQUxMRUxfUFVOQ1RVUkVEOgorCQljYXNlIFNUVjA5MHhfVFNNT0RFX0RWQkNJOgorCQlkZWZhdWx0OgorCQkJc3BlZWQgPSBzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgLworCQkJCShzdGF0ZS0+Y29uZmlnLT50czJfY2xrIC8gNCk7CisJCQlpZiAoc3BlZWQgPCAweDA4KQorCQkJCXNwZWVkID0gMHgwODsKKwkJCWlmIChzcGVlZCA+IDB4RkYpCisJCQkJc3BlZWQgPSAweEZGOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkweF9UU01PREVfU0VSSUFMX1BVTkNUVVJFRDoKKwkJY2FzZSBTVFYwOTB4X1RTTU9ERV9TRVJJQUxfQ09OVElOVU9VUzoKKwkJCXNwZWVkID0gc3RhdGUtPmludGVybmFsLT5tY2xrIC8KKwkJCQkoc3RhdGUtPmNvbmZpZy0+dHMyX2NsayAvIDMyKTsKKwkJCWlmIChzcGVlZCA8IDB4MjApCisJCQkJc3BlZWQgPSAweDIwOworCQkJaWYgKHNwZWVkID4gMHhGRikKKwkJCQlzcGVlZCA9IDB4RkY7CisJCQlicmVhazsKKwkJfQorCQlyZWcgPSBzdHYwOTB4X3JlYWRfcmVnKHN0YXRlLCBTVFYwOTB4X1AyX1RTQ0ZHTSk7CisJCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBUU0ZJRk9fTUFOU1BFRURfRklFTEQsIDMpOworCQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDJfVFNDRkdNLCByZWcpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDJfVFNTUEVFRCwgc3BlZWQpIDwgMCkKKwkJCWdvdG8gZXJyOworCX0KKwogCXJlZyA9IHN0djA5MHhfcmVhZF9yZWcoc3RhdGUsIFNUVjA5MHhfUDJfVFNDRkdIKTsKIAlTVFYwOTB4X1NFVEZJRUxEX1B4KHJlZywgUlNUX0hXQVJFX0ZJRUxELCAweDAxKTsKIAlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDJfVFNDRkdILCByZWcpIDwgMCkKQEAgLTQxMjAsNiArNDMwOSwxNSBAQAogCWNvbnN0IHN0cnVjdCBzdHYwOTB4X2NvbmZpZyAqY29uZmlnID0gc3RhdGUtPmNvbmZpZzsKIAl1MzIgcmVnOwogCisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+bWNsayA9PSAwKSB7CisJCXN0djA5MHhfc2V0X21jbGsoc3RhdGUsIDEzNTAwMDAwMCwgY29uZmlnLT54dGFsKTsgLyogMTM1IE1oeiAqLworCQltc2xlZXAoNSk7CisJCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9TWU5UQ1RSTCwKKwkJCQkgICAgICAweDIwIHwgY29uZmlnLT5jbGtfbW9kZSkgPCAwKQorCQkJZ290byBlcnI7CisJCXN0djA5MHhfZ2V0X21jbGsoc3RhdGUpOworCX0KKwogCWlmIChzdHYwOTB4X3dha2V1cChmZSkgPCAwKSB7CiAJCWRwcmludGsoRkVfRVJST1IsIDEsICJFcnJvciB3YWtpbmcgZGV2aWNlIik7CiAJCWdvdG8gZXJyOwpAQCAtNDE0MiwxMiArNDM0MCwxMiBAQAogCiAJaWYgKGNvbmZpZy0+dHVuZXJfc2V0X21vZGUpIHsKIAkJaWYgKGNvbmZpZy0+dHVuZXJfc2V0X21vZGUoZmUsIFRVTkVSX1dBS0UpIDwgMCkKLQkJCWdvdG8gZXJyOworCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAl9CiAKIAlpZiAoY29uZmlnLT50dW5lcl9pbml0KSB7CiAJCWlmIChjb25maWctPnR1bmVyX2luaXQoZmUpIDwgMCkKLQkJCWdvdG8gZXJyOworCQkJZ290byBlcnJfZ2F0ZW9mZjsKIAl9CiAKIAlpZiAoc3R2MDkweF9pMmNfZ2F0ZV9jdHJsKGZlLCAwKSA8IDApCkBAIC00MTU3LDYgKzQzNTUsOSBAQAogCQlnb3RvIGVycjsKIAogCXJldHVybiAwOworCitlcnJfZ2F0ZW9mZjoKKwlzdHYwOTB4X2kyY19nYXRlX2N0cmwoZmUsIDApOwogZXJyOgogCWRwcmludGsoRkVfRVJST1IsIDEsICJJL08gZXJyb3IiKTsKIAlyZXR1cm4gLTE7CkBAIC00MTg4LDE2ICs0Mzg5LDI2IEBACiAJfQogCiAJLyogU1RWMDkweCBpbml0ICovCi0JaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIERNRElTVEFURSwgMHg1YykgPCAwKSAvKiBTdG9wIERlbW9kICovCisKKwkvKiBTdG9wIERlbW9kICovCisJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AxX0RNRElTVEFURSwgMHg1YykgPCAwKQorCQlnb3RvIGVycjsKKwlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDJfRE1ESVNUQVRFLCAweDVjKSA8IDApCiAJCWdvdG8gZXJyOwogCiAJbXNsZWVwKDUpOwogCi0JaWYgKFNUVjA5MHhfV1JJVEVfREVNT0Qoc3RhdGUsIFROUkNGRywgMHg2YykgPCAwKSAvKiBjaGVjayByZWdpc3RlciAhIChObyBUdW5lciBNb2RlKSAqLworCS8qIFNldCBObyBUdW5lciBNb2RlICovCisJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AxX1ROUkNGRywgMHg2YykgPCAwKQorCQlnb3RvIGVycjsKKwlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDJfVE5SQ0ZHLCAweDZjKSA8IDApCiAJCWdvdG8gZXJyOwogCisJLyogSTJDIHJlcGVhdGVyIE9GRiAqLwogCVNUVjA5MHhfU0VURklFTERfUHgocmVnLCBFTkFSUFRfTEVWRUxfRklFTEQsIGNvbmZpZy0+cmVwZWF0ZXJfbGV2ZWwpOwotCWlmIChTVFYwOTB4X1dSSVRFX0RFTU9EKHN0YXRlLCBJMkNSUFQsIHJlZykgPCAwKSAvKiByZXBlYXRlciBPRkYgKi8KKwlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfUDFfSTJDUlBULCByZWcpIDwgMCkKKwkJZ290byBlcnI7CisJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X1AyX0kyQ1JQVCwgcmVnKSA8IDApCiAJCWdvdG8gZXJyOwogCiAJaWYgKHN0djA5MHhfd3JpdGVfcmVnKHN0YXRlLCBTVFYwOTB4X05DT0FSU0UsIDB4MTMpIDwgMCkgLyogc2V0IFBMTCBkaXZpZGVyICovCkBAIC00MjE2LDggKzQ0MjcsOCBAQAogCQkJZ290byBlcnI7CiAJfQogCi0Jc3RhdGUtPmRldl92ZXIgPSBzdHYwOTB4X3JlYWRfcmVnKHN0YXRlLCBTVFYwOTB4X01JRCk7Ci0JaWYgKHN0YXRlLT5kZXZfdmVyID49IDB4MjApIHsKKwlzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPSBzdHYwOTB4X3JlYWRfcmVnKHN0YXRlLCBTVFYwOTB4X01JRCk7CisJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+PSAweDIwKSB7CiAJCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9UU0dFTkVSQUwsIDB4MGMpIDwgMCkKIAkJCWdvdG8gZXJyOwogCkBAIC00MjI4LDI4ICs0NDM5LDM2IEBACiAJCQkJZ290byBlcnI7CiAJCX0KIAotCX0gZWxzZSBpZiAoc3RhdGUtPmRldl92ZXIgPCAweDIwKSB7CisJfSBlbHNlIGlmIChzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIgPCAweDIwKSB7CiAJCWRwcmludGsoRkVfRVJST1IsIDEsICJFUlJPUjogVW5zdXBwb3J0ZWQgQ3V0OiAweCUwMnghIiwKLQkJCXN0YXRlLT5kZXZfdmVyKTsKKwkJCXN0YXRlLT5pbnRlcm5hbC0+ZGV2X3Zlcik7CiAKIAkJZ290byBlcnI7Ci0JfSBlbHNlIGlmIChzdGF0ZS0+ZGV2X3ZlciA+IDB4MzApIHsKKwl9IGVsc2UgaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZGV2X3ZlciA+IDB4MzApIHsKIAkJLyogd2Ugc2hvdWxkbid0IGJhaWwgb3V0IGZyb20gaGVyZSAqLwogCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSU5GTzogQ3V0OiAweCUwMnggcHJvYmFibHkgaW5jb21wbGV0ZSBzdXBwb3J0ISIsCi0JCQlzdGF0ZS0+ZGV2X3Zlcik7CisJCQlzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIpOwogCX0KIAorCS8qIEFEQzEgcmFuZ2UgKi8KKwlyZWcgPSBzdHYwOTB4X3JlYWRfcmVnKHN0YXRlLCBTVFYwOTB4X1RTVFROUjEpOworCVNUVjA5MHhfU0VURklFTEQocmVnLCBBREMxX0lOTU9ERV9GSUVMRCwKKwkJKGNvbmZpZy0+YWRjMV9yYW5nZSA9PSBTVFYwOTB4X0FEQ18xVnBwKSA/IDAgOiAxKTsKKwlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfVFNUVE5SMSwgcmVnKSA8IDApCisJCWdvdG8gZXJyOworCisJLyogQURDMiByYW5nZSAqLworCXJlZyA9IHN0djA5MHhfcmVhZF9yZWcoc3RhdGUsIFNUVjA5MHhfVFNUVE5SMyk7CisJU1RWMDkweF9TRVRGSUVMRChyZWcsIEFEQzJfSU5NT0RFX0ZJRUxELAorCQkoY29uZmlnLT5hZGMyX3JhbmdlID09IFNUVjA5MHhfQURDXzFWcHApID8gMCA6IDEpOworCWlmIChzdHYwOTB4X3dyaXRlX3JlZyhzdGF0ZSwgU1RWMDkweF9UU1RUTlIzLCByZWcpIDwgMCkKKwkJZ290byBlcnI7CisKIAlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfVFNUUkVTMCwgMHg4MCkgPCAwKQogCQlnb3RvIGVycjsKIAlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfVFNUUkVTMCwgMHgwMCkgPCAwKQogCQlnb3RvIGVycjsKIAotCXN0djA5MHhfc2V0X21jbGsoc3RhdGUsIDEzNTAwMDAwMCwgY29uZmlnLT54dGFsKTsgLyogMTM1IE1oeiAqLwotCW1zbGVlcCg1KTsKLQlpZiAoc3R2MDkweF93cml0ZV9yZWcoc3RhdGUsIFNUVjA5MHhfU1lOVENUUkwsIDB4MjAgfCBjb25maWctPmNsa19tb2RlKSA8IDApCi0JCWdvdG8gZXJyOwotCXN0djA5MHhfZ2V0X21jbGsoc3RhdGUpOwotCiAJcmV0dXJuIDA7CiBlcnI6CiAJZHByaW50ayhGRV9FUlJPUiwgMSwgIkkvTyBlcnJvciIpOwpAQCAtNDI5OSw2ICs0NTE4LDcgQEAKIAkJCQkgICAgZW51bSBzdHYwOTB4X2RlbW9kdWxhdG9yIGRlbW9kKQogewogCXN0cnVjdCBzdHYwOTB4X3N0YXRlICpzdGF0ZSA9IE5VTEw7CisJc3RydWN0IHN0djA5MHhfZGV2ICp0ZW1wX2ludDsKIAogCXN0YXRlID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBzdHYwOTB4X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlID09IE5VTEwpCkBAIC00MzE0LDggKzQ1MzQsMzIgQEAKIAlzdGF0ZS0+ZGV2aWNlCQkJCT0gY29uZmlnLT5kZXZpY2U7CiAJc3RhdGUtPnJvbGxvZmYJCQkJPSBTVFYwOTB4X1JPXzM1OyAvKiBkZWZhdWx0ICovCiAKLQlpZiAoc3RhdGUtPmRlbW9kID09IFNUVjA5MHhfREVNT0RVTEFUT1JfMCkKLQkJbXV0ZXhfaW5pdCgmZGVtb2RfbG9jayk7CisJdGVtcF9pbnQgPSBmaW5kX2RldihzdGF0ZS0+aTJjLAorCQkJCXN0YXRlLT5jb25maWctPmFkZHJlc3MpOworCisJaWYgKCh0ZW1wX2ludCAhPSBOVUxMKSAmJiAoc3RhdGUtPmRlbW9kX21vZGUgPT0gU1RWMDkweF9EVUFMKSkgeworCQlzdGF0ZS0+aW50ZXJuYWwgPSB0ZW1wX2ludC0+aW50ZXJuYWw7CisJCXN0YXRlLT5pbnRlcm5hbC0+bnVtX3VzZWQrKzsKKwkJZHByaW50ayhGRV9JTkZPLCAxLCAiRm91bmQgSW50ZXJuYWwgU3RydWN0dXJlISIpOworCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiQXR0YWNoaW5nICVzIGRlbW9kdWxhdG9yKCVkKSBDdXQ9MHglMDJ4IiwKKwkJCXN0YXRlLT5kZXZpY2UgPT0gU1RWMDkwMCA/ICJTVFYwOTAwIiA6ICJTVFYwOTAzIiwKKwkJCWRlbW9kLAorCQkJc3RhdGUtPmludGVybmFsLT5kZXZfdmVyKTsKKwkJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CisJfSBlbHNlIHsKKwkJc3RhdGUtPmludGVybmFsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN0djA5MHhfaW50ZXJuYWwpLAorCQkJCQkgIEdGUF9LRVJORUwpOworCQl0ZW1wX2ludCA9IGFwcGVuZF9pbnRlcm5hbChzdGF0ZS0+aW50ZXJuYWwpOworCQlzdGF0ZS0+aW50ZXJuYWwtPm51bV91c2VkID0gMTsKKwkJc3RhdGUtPmludGVybmFsLT5tY2xrID0gMDsKKwkJc3RhdGUtPmludGVybmFsLT5kZXZfdmVyID0gMDsKKwkJc3RhdGUtPmludGVybmFsLT5pMmNfYWRhcCA9IHN0YXRlLT5pMmM7CisJCXN0YXRlLT5pbnRlcm5hbC0+aTJjX2FkZHIgPSBzdGF0ZS0+Y29uZmlnLT5hZGRyZXNzOworCQlkcHJpbnRrKEZFX0lORk8sIDEsICJDcmVhdGUgTmV3IEludGVybmFsIFN0cnVjdHVyZSEiKTsKKwl9CisKKwltdXRleF9pbml0KCZzdGF0ZS0+aW50ZXJuYWwtPmRlbW9kX2xvY2spOworCW11dGV4X2luaXQoJnN0YXRlLT5pbnRlcm5hbC0+dHVuZXJfbG9jayk7CiAKIAlpZiAoc3R2MDkweF9zbGVlcCgmc3RhdGUtPmZyb250ZW5kKSA8IDApIHsKIAkJZHByaW50ayhGRV9FUlJPUiwgMSwgIkVycm9yIHB1dHRpbmcgZGV2aWNlIHRvIHNsZWVwIik7CkBAIC00MzMxLDEwICs0NTc1LDEwIEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JZHByaW50ayhGRV9FUlJPUiwgMSwgIkF0dGFjaGluZyAlcyBkZW1vZHVsYXRvciglZCkgQ3V0PTB4JTAyeFxuIiwKKwlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiQXR0YWNoaW5nICVzIGRlbW9kdWxhdG9yKCVkKSBDdXQ9MHglMDJ4IiwKIAkgICAgICAgc3RhdGUtPmRldmljZSA9PSBTVFYwOTAwID8gIlNUVjA5MDAiIDogIlNUVjA5MDMiLAogCSAgICAgICBkZW1vZCwKLQkgICAgICAgc3RhdGUtPmRldl92ZXIpOworCSAgICAgICBzdGF0ZS0+aW50ZXJuYWwtPmRldl92ZXIpOwogCiAJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweC5oCmluZGV4IGIxMzM4MDcuLjMwZjAxYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHguaApAQCAtNjAsNiArNjAsMTEgQEAKIAlTVFYwOTB4X1JQVExFVkVMXzIJPSA3LAogfTsKIAorZW51bSBzdHYwOTB4X2FkY19yYW5nZSB7CisJU1RWMDkweF9BRENfMlZwcAk9IDAsCisJU1RWMDkweF9BRENfMVZwcAk9IDEKK307CisKIHN0cnVjdCBzdHYwOTB4X2NvbmZpZyB7CiAJZW51bSBzdHYwOTB4X2RldmljZQlkZXZpY2U7CiAJZW51bSBzdHYwOTB4X21vZGUJZGVtb2RfbW9kZTsKQEAgLTY4LDEzICs3MywxNyBAQAogCXUzMiB4dGFsOyAvKiBkZWZhdWx0OiA4MDAwMDAwICovCiAJdTggYWRkcmVzczsgLyogZGVmYXVsdDogMHg2OCAqLwogCi0JdTMyIHJlZl9jbGs7IC8qIGRlZmF1bHQ6IDE2MDAwMDAwIEZJWE1FIHRvIHR1bmVyIGNvbmZpZyAqLwotCiAJdTggdHMxX21vZGU7CiAJdTggdHMyX21vZGU7CisJdTMyIHRzMV9jbGs7CisJdTMyIHRzMl9jbGs7CiAKIAllbnVtIHN0djA5MHhfaTJjcnB0CXJlcGVhdGVyX2xldmVsOwogCisJdTgJCQl0dW5lcl9iYmdhaW47IC8qIGRlZmF1bHQ6IDEwZGIgKi8KKwllbnVtIHN0djA5MHhfYWRjX3JhbmdlCWFkYzFfcmFuZ2U7IC8qIGRlZmF1bHQ6IDJWcHAgKi8KKwllbnVtIHN0djA5MHhfYWRjX3JhbmdlCWFkYzJfcmFuZ2U7IC8qIGRlZmF1bHQ6IDJWcHAgKi8KKwogCWJvb2wgZGlzZXFjX2VudmVsb3BlX21vZGU7CiAKIAlpbnQgKCp0dW5lcl9pbml0KSAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHhfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MHhfcHJpdi5oCmluZGV4IDU5MjFhOGQuLjViNzgwYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTB4X3ByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkweF9wcml2LmgKQEAgLTIzMCwxMSArMjMwLDIzIEBACiAJczMyIHJlYWQ7CiB9OwogCitzdHJ1Y3Qgc3R2MDkweF9pbnRlcm5hbCB7CisJc3RydWN0IGkyY19hZGFwdGVyIAkqaTJjX2FkYXA7CisJdTgJCQlpMmNfYWRkcjsKKworCXN0cnVjdCBtdXRleAkJZGVtb2RfbG9jazsgLyogTG9jayBhY2Nlc3MgdG8gc2hhcmVkIHJlZ2lzdGVyICovCisJc3RydWN0IG11dGV4CQl0dW5lcl9sb2NrOyAvKiBMb2NrIGFjY2VzcyB0byB0dW5lcnMgKi8KKwlzMzIJCQltY2xrOyAvKiBNYXN0ZXJjbG9jayBEaXZpZGVyIGZhY3RvciAqLworCXUzMgkJCWRldl92ZXI7CisKKwlpbnQJCQludW1fdXNlZDsKK307CisKIHN0cnVjdCBzdHYwOTB4X3N0YXRlIHsKIAllbnVtIHN0djA5MHhfZGV2aWNlCQlkZXZpY2U7CiAJZW51bSBzdHYwOTB4X2RlbW9kdWxhdG9yCWRlbW9kOwogCWVudW0gc3R2MDkweF9tb2RlCQlkZW1vZF9tb2RlOwotCXUzMgkJCQlkZXZfdmVyOworCXN0cnVjdCBzdHYwOTB4X2ludGVybmFsCQkqaW50ZXJuYWw7CiAKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIJCSppMmM7CiAJY29uc3Qgc3RydWN0IHN0djA5MHhfY29uZmlnCSpjb25maWc7CkBAIC0yNTYsMTEgKzI2OCw4IEBACiAJdTMyCQkJCWZyZXF1ZW5jeTsKIAl1MzIJCQkJc3JhdGU7CiAKLQlzMzIJCQkJbWNsazsgLyogTWFzdGVyY2xvY2sgRGl2aWRlciBmYWN0b3IgKi8KIAlzMzIJCQkJdHVuZXJfYnc7CiAKLQl1MzIJCQkJdHVuZXJfcmVmY2xrOwotCiAJczMyCQkJCXNlYXJjaF9yYW5nZTsKIAogCXMzMgkJCQlEZW1vZFRpbWVvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEweC5jCmluZGV4IGJjZmNiNjUuLmY5MzFlZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEweC5jCkBAIC0zNSw4ICszNSw2IEBACiBtb2R1bGVfcGFyYW0odmVyYm9zZSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModmVyYm9zZSwgIlNldCBWZXJib3NpdHkgbGV2ZWwiKTsKIAotc3RhdGljIHU4IHN0djYxMTB4X3JlZ3NbXSA9IHsweDA3LCAweDExLCAweGRjLCAweDg1LCAweDE3LCAweDAxLCAweGU2LCAweDFlfTsKLQogc3RhdGljIGludCBzdHY2MTEweF9yZWFkX3JlZyhzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgKnN0djYxMTB4LCB1OCByZWcsIHU4ICpkYXRhKQogewogCWludCByZXQ7CkBAIC01OCwxMiArNTYsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzdHY2MTEweF93cml0ZV9yZWcoc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweCwgdTggcmVnLCB1OCBkYXRhKQorc3RhdGljIGludCBzdHY2MTEweF93cml0ZV9yZWdzKHN0cnVjdCBzdHY2MTEweF9zdGF0ZSAqc3R2NjExMHgsIGludCBzdGFydCwgdTggZGF0YVtdLCBpbnQgbGVuKQogewogCWludCByZXQ7CiAJY29uc3Qgc3RydWN0IHN0djYxMTB4X2NvbmZpZyAqY29uZmlnID0gc3R2NjExMHgtPmNvbmZpZzsKLQl1OCBidWZbXSA9IHsgcmVnLCBkYXRhIH07Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IGNvbmZpZy0+YWRkciwgLmZsYWdzID0gMCwgLiBidWYgPSBidWYsIC5sZW4gPSAyIH07CisJdTggYnVmW2xlbiArIDFdOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSBjb25maWctPmFkZHIsCisJCS5mbGFncyA9IDAsCisJCS5idWYgPSBidWYsCisJCS5sZW4gPSBsZW4gKyAxCisJfTsKKworCWlmIChzdGFydCArIGxlbiA+IDgpCisJCXJldHVybiAtRUlOVkFMOworCisJYnVmWzBdID0gc3RhcnQ7CisJbWVtY3B5KCZidWZbMV0sIGRhdGEsIGxlbik7CiAKIAlyZXQgPSBpMmNfdHJhbnNmZXIoc3R2NjExMHgtPmkyYywgJm1zZywgMSk7CiAJaWYgKHJldCAhPSAxKSB7CkBAIC03NCwxOCArODMsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzdHY2MTEweF93cml0ZV9yZWcoc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweCwgdTggcmVnLCB1OCBkYXRhKQoreworCXJldHVybiBzdHY2MTEweF93cml0ZV9yZWdzKHN0djYxMTB4LCByZWcsICZkYXRhLCAxKTsKK30KKwogc3RhdGljIGludCBzdHY2MTEweF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCXN0cnVjdCBzdHY2MTEweF9zdGF0ZSAqc3R2NjExMHggPSBmZS0+dHVuZXJfcHJpdjsKIAlpbnQgcmV0OwotCXU4IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdHY2MTEweF9yZWdzKTsgaSsrKSB7Ci0JCXJldCA9IHN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgaSwgc3R2NjExMHhfcmVnc1tpXSk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSW5pdGlhbGl6YXRpb24gZmFpbGVkIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KKwlyZXQgPSBzdHY2MTEweF93cml0ZV9yZWdzKHN0djYxMTB4LCAwLCBzdHY2MTEweC0+cmVncywKKwkJCQkgIEFSUkFZX1NJWkUoc3R2NjExMHgtPnJlZ3MpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSW5pdGlhbGl6YXRpb24gZmFpbGVkIik7CisJCXJldHVybiAtMTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTk4LDIzICsxMTAsMjMgQEAKIAlzMzIgcFZhbCwgcENhbGMsIHJEaXZPcHQgPSAwLCBwQ2FsY09wdCA9IDEwMDA7CiAJdTggaTsKIAotCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9LLCAoUkVGQ0xPQ0tfTUh6IC0gMTYpKTsKKwlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX0ssIChSRUZDTE9DS19NSHogLSAxNikpOwogCiAJaWYgKGZyZXF1ZW5jeSA8PSAxMDIzMDAwKSB7Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfRElWNFNFTCwgMSk7Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfUFJFU0MzMl9PTiwgMCk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX0RJVjRTRUwsIDEpOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9QUkVTQzMyX09OLCAwKTsKIAkJcFZhbCA9IDQwOwogCX0gZWxzZSBpZiAoZnJlcXVlbmN5IDw9IDEzMDAwMDApIHsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9ESVY0U0VMLCAxKTsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9QUkVTQzMyX09OLCAxKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfRElWNFNFTCwgMSk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1BSRVNDMzJfT04sIDEpOwogCQlwVmFsID0gNDA7CiAJfSBlbHNlIGlmIChmcmVxdWVuY3kgPD0gMjA0NjAwMCkgewotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX0RJVjRTRUwsIDApOwotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1BSRVNDMzJfT04sIDApOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9ESVY0U0VMLCAwKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfUFJFU0MzMl9PTiwgMCk7CiAJCXBWYWwgPSAyMDsKIAl9IGVsc2UgewotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX0RJVjRTRUwsIDApOwotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1BSRVNDMzJfT04sIDEpOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSwgVE5HMV9ESVY0U0VMLCAwKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfUFJFU0MzMl9PTiwgMSk7CiAJCXBWYWwgPSAyMDsKIAl9CiAKQEAgLTEzMCwyMSArMTQyLDIxIEBACiAJZGl2aWRlciA9IChmcmVxdWVuY3kgKiBSX0RJVihyRGl2T3B0KSAqIHBWYWwpIC8gUkVGQ0xPQ0tfa0h6OwogCWRpdmlkZXIgPSAoZGl2aWRlciArIDUpIC8gMTA7CiAKLQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX1JfRElWLCByRGl2T3B0KTsKLQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX05fRElWXzExXzgsIE1TQihkaXZpZGVyKSk7Ci0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcwXSwgVE5HMF9OX0RJVl83XzAsIExTQihkaXZpZGVyKSk7CisJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0sIFRORzFfUl9ESVYsIHJEaXZPcHQpOworCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdLCBUTkcxX05fRElWXzExXzgsIE1TQihkaXZpZGVyKSk7CisJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMF0sIFRORzBfTl9ESVZfN18wLCBMU0IoZGl2aWRlcikpOwogCiAJLyogVkNPIEF1dG8gY2FsaWJyYXRpb24gKi8KLQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1NUQVQxXSwgU1RBVDFfQ0FMVkNPX1NUUlQsIDEpOworCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1NUQVQxXSwgU1RBVDFfQ0FMVkNPX1NUUlQsIDEpOwogCi0Jc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMSwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMV0pOwotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfVE5HMSwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSk7Ci0Jc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9UTkcwLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzBdKTsKLQlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1NUQVQxXSk7CisJc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMSwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdKTsKKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1RORzEsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdKTsKKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1RORzAsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzBdKTsKKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pOwogCiAJZm9yIChpID0gMDsgaSA8IFRSSUFMUzsgaSsrKSB7Ci0JCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9TVEFUMSwgJnN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdKTsKLQkJaWYgKCFTVFY2MTEweF9HRVRGSUVMRChTVEFUMV9DQUxWQ09fU1RSVCwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0pKQorCQlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfU1RBVDEsICZzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pOworCQlpZiAoIVNUVjYxMTB4X0dFVEZJRUxEKFNUQVQxX0NBTFZDT19TVFJULCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pKQogCQkJCWJyZWFrOwogCQltc2xlZXAoMSk7CiAJfQpAQCAtMTU2LDE0ICsxNjgsMTQgQEAKIHsKIAlzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgKnN0djYxMTB4ID0gZmUtPnR1bmVyX3ByaXY7CiAKLQlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfVE5HMSwgJnN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMV0pOwotCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9UTkcwLCAmc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcwXSk7CisJc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1RORzEsICZzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSk7CisJc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1RORzAsICZzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcwXSk7CiAKLQkqZnJlcXVlbmN5ID0gKE1BS0VXT1JEMTYoU1RWNjExMHhfR0VURklFTEQoVE5HMV9OX0RJVl8xMV84LCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdKSwKLQkJCQkgU1RWNjExMHhfR0VURklFTEQoVE5HMF9OX0RJVl83XzAsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfVE5HMF0pKSkgKiBSRUZDTE9DS19rSHo7CisJKmZyZXF1ZW5jeSA9IChNQUtFV09SRDE2KFNUVjYxMTB4X0dFVEZJRUxEKFRORzFfTl9ESVZfMTFfOCwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMV0pLAorCQkJCSBTVFY2MTEweF9HRVRGSUVMRChUTkcwX05fRElWXzdfMCwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfVE5HMF0pKSkgKiBSRUZDTE9DS19rSHo7CiAKLQkqZnJlcXVlbmN5IC89ICgxIDw8IChTVFY2MTEweF9HRVRGSUVMRChUTkcxX1JfRElWLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X1RORzFdKSArCi0JCQkgICAgIFNUVjYxMTB4X0dFVEZJRUxEKFRORzFfRElWNFNFTCwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9UTkcxXSkpKTsKKwkqZnJlcXVlbmN5IC89ICgxIDw8IChTVFY2MTEweF9HRVRGSUVMRChUTkcxX1JfRElWLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9UTkcxXSkgKworCQkJICAgICBTVFY2MTEweF9HRVRGSUVMRChUTkcxX0RJVjRTRUwsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1RORzFdKSkpOwogCiAJKmZyZXF1ZW5jeSA+Pj0gMjsKIApAQCAtMTc5LDI3ICsxOTEsMjcgQEAKIAloYWxmYncgPSBiYW5kd2lkdGggPj4gMTsKIAogCWlmIChoYWxmYncgPiAzNjAwMDAwMCkKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX0NGLCAzMSk7IC8qIExQRiAqLworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX0NGLCAzMSk7IC8qIExQRiAqLwogCWVsc2UgaWYgKGhhbGZidyA8IDUwMDAwMDApCi0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDNdLCBDVFJMM19DRiwgMCk7IC8qIExQRiAqLworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX0NGLCAwKTsgLyogTFBGICovCiAJZWxzZQotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwzXSwgQ1RSTDNfQ0YsICgoaGFsZmJ3IC8gMTAwMDAwMCkgLSA1KSk7IC8qIExQRiAqLworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX0NGLCAoKGhhbGZidyAvIDEwMDAwMDApIC0gNSkpOyAvKiBMUEYgKi8KIAogCi0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX1JDQ0xLX09GRiwgMHgwKTsgLyogY2FsLiBjbGsgYWN0aXZhdGVkICovCi0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0sIFNUQVQxX0NBTFJDX1NUUlQsIDB4MSk7IC8qIExQRiBhdXRvIGNhbCAqLworCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwzXSwgQ1RSTDNfUkNDTEtfT0ZGLCAweDApOyAvKiBjYWwuIGNsayBhY3RpdmF0ZWQgKi8KKwlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0sIFNUQVQxX0NBTFJDX1NUUlQsIDB4MSk7IC8qIExQRiBhdXRvIGNhbCAqLwogCi0Jc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMywgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10pOwotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfU1RBVDEsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdKTsKKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwzLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10pOworCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfU1RBVDEsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1NUQVQxXSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVFJJQUxTOyBpKyspIHsKLQkJc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCAmc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0pOwotCQlpZiAoIVNUVjYxMTB4X0dFVEZJRUxEKFNUQVQxX0NBTFJDX1NUUlQsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfU1RBVDFdKSkKKwkJc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCAmc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfU1RBVDFdKTsKKwkJaWYgKCFTVFY2MTEweF9HRVRGSUVMRChTVEFUMV9DQUxSQ19TVFJULCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pKQogCQkJYnJlYWs7CiAJCW1zbGVlcCgxKTsKIAl9Ci0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10sIENUUkwzX1JDQ0xLX09GRiwgMHgxKTsgLyogY2FsLiBkb25lICovCi0Jc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMywgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10pOworCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwzXSwgQ1RSTDNfUkNDTEtfT0ZGLCAweDEpOyAvKiBjYWwuIGRvbmUgKi8KKwlzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwzLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMM10pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMDgsOCArMjIwLDggQEAKIHsKIAlzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgKnN0djYxMTB4ID0gZmUtPnR1bmVyX3ByaXY7CiAKLQlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDMsICZzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwzXSk7Ci0JKmJhbmR3aWR0aCA9IChTVFY2MTEweF9HRVRGSUVMRChDVFJMM19DRiwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMM10pICsgNSkgKiAyMDAwMDAwOworCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMywgJnN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwzXSk7CisJKmJhbmR3aWR0aCA9IChTVFY2MTEweF9HRVRGSUVMRChDVFJMM19DRiwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDNdKSArIDUpICogMjAwMDAwMDsKIAogCXJldHVybiAwOwogfQpAQCAtMjIyLDIwICsyMzQsMjAgQEAKIAlzd2l0Y2ggKHJlZmNsb2NrKSB7CiAJZGVmYXVsdDoKIAljYXNlIDE6Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9DT19ESVYsIDApOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMCk7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMSk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAxKTsKIAkJYnJlYWs7CiAJY2FzZSA0OgotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAyKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9DT19ESVYsIDIpOwogCQlicmVhazsKIAljYXNlIDg6CiAJY2FzZSAwOgotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAzKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9DT19ESVYsIDMpOwogCQlicmVhazsKIAl9Ci0Jc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMiwgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMl0pOworCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDIsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI0NCw4ICsyNTYsOCBAQAogewogCXN0cnVjdCBzdHY2MTEweF9zdGF0ZSAqc3R2NjExMHggPSBmZS0+dHVuZXJfcHJpdjsKIAotCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMiwgJnN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDJdKTsKLQkqZ2FpbiA9IDIgKiBTVFY2MTEweF9HRVRGSUVMRChDVFJMMl9CQkdBSU4sIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDJdKTsKKwlzdHY2MTEweF9yZWFkX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDIsICZzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0pOworCSpnYWluID0gMiAqIFNUVjYxMTB4X0dFVEZJRUxEKENUUkwyX0JCR0FJTiwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjU0LDggKzI2Niw4IEBACiB7CiAJc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweCA9IGZlLT50dW5lcl9wcml2OwogCi0JU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0JCR0FJTiwgZ2FpbiAvIDIpOwotCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDIsIHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDJdKTsKKwlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0JCR0FJTiwgZ2FpbiAvIDIpOworCXN0djYxMTB4X3dyaXRlX3JlZyhzdHY2MTEweCwgU1RWNjExMHhfQ1RSTDIsIHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI2NywxOSArMjc5LDE5IEBACiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIFRVTkVSX1NMRUVQOgotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfU1lOLCAwKTsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX1JYLCAwKTsKLQkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHhfcmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX0xQVCwgMCk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfU1lOLCAwKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9SWCwgMCk7CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfTFBULCAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIFRVTkVSX1dBS0U6Ci0JCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4X3JlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9TWU4sIDEpOwotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfUlgsIDEpOwotCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwxXSwgQ1RSTDFfTFBULCAxKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9TWU4sIDEpOworCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMV0sIENUUkwxX1JYLCAxKTsKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdLCBDVFJMMV9MUFQsIDEpOwogCQlicmVhazsKIAl9CiAKLQlyZXQgPSBzdHY2MTEweF93cml0ZV9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X0NUUkwxLCBzdHY2MTEweF9yZWdzW1NUVjYxMTB4X0NUUkwxXSk7CisJcmV0ID0gc3R2NjExMHhfd3JpdGVfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9DVFJMMSwgc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDFdKTsKIAlpZiAocmV0IDwgMCkgewogCQlkcHJpbnRrKEZFX0VSUk9SLCAxLCAiSS9PIEVycm9yIik7CiAJCXJldHVybiAtRUlPOwpAQCAtMjk3LDkgKzMwOSw5IEBACiB7CiAJc3RydWN0IHN0djYxMTB4X3N0YXRlICpzdHY2MTEweCA9IGZlLT50dW5lcl9wcml2OwogCi0Jc3R2NjExMHhfcmVhZF9yZWcoc3R2NjExMHgsIFNUVjYxMTB4X1NUQVQxLCAmc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0pOworCXN0djYxMTB4X3JlYWRfcmVnKHN0djYxMTB4LCBTVFY2MTEweF9TVEFUMSwgJnN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X1NUQVQxXSk7CiAKLQlpZiAoU1RWNjExMHhfR0VURklFTEQoU1RBVDFfTE9DSywgc3R2NjExMHhfcmVnc1tTVFY2MTEweF9TVEFUMV0pKQorCWlmIChTVFY2MTEweF9HRVRGSUVMRChTVEFUMV9MT0NLLCBzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9TVEFUMV0pKQogCQkqc3RhdHVzID0gVFVORVJfUEhBU0VMT0NLRUQ7CiAJZWxzZQogCQkqc3RhdHVzID0gMDsKQEAgLTM0OSw2ICszNjEsOCBAQAogCQkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKIAlzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUgKnN0djYxMTB4OworCXU4IGRlZmF1bHRfcmVnc1tdID0gezB4MDcsIDB4MTEsIDB4ZGMsIDB4ODUsIDB4MTcsIDB4MDEsIDB4ZTYsIDB4MWV9OworCWludCByZXQ7CiAKIAlzdHY2MTEweCA9IGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3Qgc3R2NjExMHhfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3R2NjExMHggPT0gTlVMTCkKQEAgLTM1Nyw2ICszNzEsNDQgQEAKIAlzdHY2MTEweC0+aTJjCQk9IGkyYzsKIAlzdHY2MTEweC0+Y29uZmlnCT0gY29uZmlnOwogCXN0djYxMTB4LT5kZXZjdGwJPSAmc3R2NjExMHhfY3RsOworCW1lbWNweShzdHY2MTEweC0+cmVncywgZGVmYXVsdF9yZWdzLCA4KTsKKworCS8qIHNldHVwIGRpdmlkZXIgKi8KKwlzd2l0Y2ggKHN0djYxMTB4LT5jb25maWctPmNsa19kaXYpIHsKKwlkZWZhdWx0OgorCWNhc2UgMToKKwkJU1RWNjExMHhfU0VURklFTEQoc3R2NjExMHgtPnJlZ3NbU1RWNjExMHhfQ1RSTDJdLCBDVFJMMl9DT19ESVYsIDApOworCQlicmVhazsKKwljYXNlIDI6CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAxKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlTVFY2MTEweF9TRVRGSUVMRChzdHY2MTEweC0+cmVnc1tTVFY2MTEweF9DVFJMMl0sIENUUkwyX0NPX0RJViwgMik7CisJCWJyZWFrOworCWNhc2UgODoKKwljYXNlIDA6CisJCVNUVjYxMTB4X1NFVEZJRUxEKHN0djYxMTB4LT5yZWdzW1NUVjYxMTB4X0NUUkwyXSwgQ1RSTDJfQ09fRElWLCAzKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkgeworCQlyZXQgPSBmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJcmV0ID0gc3R2NjExMHhfd3JpdGVfcmVncyhzdHY2MTEweCwgMCwgc3R2NjExMHgtPnJlZ3MsCisJCQkJICBBUlJBWV9TSVpFKHN0djYxMTB4LT5yZWdzKSk7CisJaWYgKHJldCA8IDApIHsKKwkJZHByaW50ayhGRV9FUlJPUiwgMSwgIkluaXRpYWxpemF0aW9uIGZhaWxlZCIpOworCQlnb3RvIGVycm9yOworCX0KKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpIHsKKwkJcmV0ID0gZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycm9yOworCX0KIAogCWZlLT50dW5lcl9wcml2CQk9IHN0djYxMTB4OwogCWZlLT5vcHMudHVuZXJfb3BzCT0gc3R2NjExMHhfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTB4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHguaAppbmRleCBhMzgyNTcwLi4yNDI5YWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHguaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHguaApAQCAtMjYsNiArMjYsNyBAQAogc3RydWN0IHN0djYxMTB4X2NvbmZpZyB7CiAJdTgJYWRkcjsKIAl1MzIJcmVmY2xrOworCXU4CWNsa19kaXY7IC8qIGRpdmlzb3IgdmFsdWUgZm9yIHRoZSBvdXRwdXQgY2xvY2sgKi8KIH07CiAKIGVudW0gdHVuZXJfbW9kZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHhfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTB4X3ByaXYuaAppbmRleCA3MjYwZGE2Li4wZWM5MzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMHhfcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEweF9wcml2LmgKQEAgLTY4LDYgKzY4LDcgQEAKIHN0cnVjdCBzdHY2MTEweF9zdGF0ZSB7CiAJc3RydWN0IGkyY19hZGFwdGVyCQkqaTJjOwogCWNvbnN0IHN0cnVjdCBzdHY2MTEweF9jb25maWcJKmNvbmZpZzsKKwl1OCAJCQkJcmVnc1s4XTsKIAogCXN0cnVjdCBzdHY2MTEweF9kZXZjdGwJCSpkZXZjdGw7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTY2NXguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE2NjV4LmMKaW5kZXggODdkNTI3My4uYzQ0ZmVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTY2NXguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhNjY1eC5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAkJZnJlcXVlbmN5ICs9IGNvbmZpZy0+cmVmX2RpdmlkZXIgPj4gMTsKIAkJZnJlcXVlbmN5IC89IGNvbmZpZy0+cmVmX2RpdmlkZXI7CiAKLQkJYnVmWzBdID0gKHU4KSAoZnJlcXVlbmN5ICYgMHg3ZjAwKSA+PiA4OworCQlidWZbMF0gPSAodTgpICgoZnJlcXVlbmN5ICYgMHg3ZjAwKSA+PiA4KTsKIAkJYnVmWzFdID0gKHU4KSAoZnJlcXVlbmN5ICYgMHgwMGZmKSA+PiAwOwogCQlidWZbMl0gPSAweDgwIHwgMHg0MCB8IDB4MDI7CiAJCWJ1ZlszXSA9IDB4MDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODI2MS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgyNjEuYwppbmRleCAzMjBjM2MzLi42MTRhZmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODI2MS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MjYxLmMKQEAgLTM5LDcgKzM5LDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgdGRhODI2MV9jb25maWcgKmNvbmZpZyA9IHN0YXRlLT5jb25maWc7CiAJaW50IGVyciA9IDA7Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkcgk9IGNvbmZpZy0+YWRkciwgLmZsYWdzID0gSTJDX01fUkQsLmJ1ZiA9IGJ1ZiwgIC5sZW4gPSAyIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkcgk9IGNvbmZpZy0+YWRkciwgLmZsYWdzID0gSTJDX01fUkQsLmJ1ZiA9IGJ1ZiwgIC5sZW4gPSAxIH07CiAKIAlpZiAoKGVyciA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKSkgIT0gMSkKIAkJcHJpbnRrKCIlczogcmVhZCBlcnJvciwgZXJyPSVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzNi5jCmluZGV4IDRlODE0ZmYuLjM0YzVkZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzYuYwpAQCAtNDExLDcgKzQxMSw3IEBACiAJc3RhdGUtPmJmID0gMHhmZjsKIAogCWlmICghc3RhdGUtPmNvbmZpZy0+cmZfbG9vcF9lbmFibGUpCi0JCXpsMTAwMzZfaW5pdF90YWJbMV1bMl0gfD0gMHgwMTsKKwkJemwxMDAzNl9pbml0X3RhYlsxXVswXSB8PSAweDAxOwogCiAJZGViX2luZm8oIiVzXG4iLCBfX2Z1bmNfXyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM5LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzOS5jCmluZGV4IDExYjI5Y2IuLmMwODVlNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM5LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzkuYwpAQCAtMjg3LDcgKzI4Nyw2IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRwcmludGsoIkNoaXAgSUQ9JXggZG9lcyBub3QgbWF0Y2ggYSBrbm93biB0eXBlXG4iLCBzdGF0ZS0+aWQpOwotCQlicmVhazsKIAkJZ290byBlcnJvcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfaGlmLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2hpZi5jCmluZGV4IDc0NzdkYWMuLjU3NzJlYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfaGlmLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19oaWYuYwpAQCAtMjIsOCArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSAiZG14ZGV2LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2lucHV0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX2lucHV0LmMKaW5kZXggNmE5ZGY3Ny4uNDY3NWEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfaW5wdXQuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJcmMtPmlkLnZlcnNpb24JPSAxOwogCXJjLT5kZXYJCT0gbWFudGlzLT5wZGV2LT5kZXY7CiAKLQllcnIgPSBpcl9pbnB1dF9yZWdpc3RlcihyYywgJmlyX21hbnRpcyk7CisJZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIocmMsICZpcl9tYW50aXMsIE5VTEwpOwogCWlmIChlcnIpIHsKIAkJZHByaW50ayhNQU5USVNfRVJST1IsIDEsICJJUiBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZCwgcmV0ID0gJWQiLCBlcnIpOwogCQlpbnB1dF9mcmVlX2RldmljZShyYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3BjaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvbWFudGlzL21hbnRpc19wY2kuYwppbmRleCA2Yzc1MzRhLi41OWZlZWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9tYW50aXMvbWFudGlzX3BjaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL21hbnRpcy9tYW50aXNfcGNpLmMKQEAgLTQxLDExICs0MSw2IEBACiAjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCiAjaW5jbHVkZSAiZHZiX25ldC5oIgogCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0KICNpbmNsdWRlICJtYW50aXNfY29tbW9uLmgiCiAjaW5jbHVkZSAibWFudGlzX3JlZy5oIgogI2luY2x1ZGUgIm1hbnRpc19wY2kuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYzhlNmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9LY29uZmlnCkBAIC0wLDAgKzEsOSBAQAorY29uZmlnIERWQl9OR0VORQorCXRyaXN0YXRlICJNaWNyb25hcyBuR2VuZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQworCXNlbGVjdCBEVkJfTE5CUDIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9TVFY2MTEweCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDkweCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIE1pY3JvbmFzIFBDSSBleHByZXNzIGNhcmRzIHdpdGggbkdlbmUgYnJpZGdlLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNDM1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9NYWtlZmlsZQpAQCAtMCwwICsxLDExIEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbkdlbmUgZGV2aWNlIGRyaXZlcgorIworCituZ2VuZS1vYmpzIDo9IG5nZW5lLWNvcmUubworCitvYmotJChDT05GSUdfRFZCX05HRU5FKSArPSBuZ2VuZS5vCisKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlLworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE1MGRmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLWNvcmUuYwpAQCAtMCwwICsxLDIwMjQgQEAKKy8qCisgKiBuZ2VuZS5jOiBuR2VuZSBQQ0llIGJyaWRnZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBNaWNyb25hcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJhbHBoIE1ldHpsZXIgPHJqa21AbWV0emxlcmJyb3MuZGU+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICBNb2RpZmljYXRpb25zIGZvciBuZXcgbkdlbmUgZmlybXdhcmUsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciBFRVBST00tY29weWluZywKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIG5ldyBkdWFsIERWQi1TMiBjYXJkIHByb3RvdHlwZQorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIG9ubHksIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQQorICogT3IsIHBvaW50IHlvdXIgYnJvd3NlciB0byBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlICJuZ2VuZS5oIgorCisjaW5jbHVkZSAic3R2NjExMHguaCIKKyNpbmNsdWRlICJzdHYwOTB4LmgiCisjaW5jbHVkZSAibG5iaDI0LmgiCisKK3N0YXRpYyBpbnQgb25lX2FkYXB0ZXIgPSAxOworbW9kdWxlX3BhcmFtKG9uZV9hZGFwdGVyLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhvbmVfYWRhcHRlciwgIlVzZSBvbmx5IG9uZSBhZGFwdGVyLiIpOworCisKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiUHJpbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uLiIpOworCitEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKKworI2RlZmluZSBDT01NQU5EX1RJTUVPVVRfV09SS0FST1VORAorCisjZGVmaW5lIGRwcmludGsJaWYgKGRlYnVnKSBwcmludGsKKworI2RlZmluZSBERVZJQ0VfTkFNRSAibmdlbmUiCisKKyNkZWZpbmUgbmd3cml0ZWIoZGF0LCBhZHIpICAgICAgICAgd3JpdGViKChkYXQpLCAoY2hhciAqKShkZXYtPmlvbWVtICsgKGFkcikpKQorI2RlZmluZSBuZ3dyaXRlbChkYXQsIGFkcikgICAgICAgICB3cml0ZWwoKGRhdCksIChjaGFyICopKGRldi0+aW9tZW0gKyAoYWRyKSkpCisjZGVmaW5lIG5nd3JpdGViKGRhdCwgYWRyKSAgICAgICAgIHdyaXRlYigoZGF0KSwgKGNoYXIgKikoZGV2LT5pb21lbSArIChhZHIpKSkKKyNkZWZpbmUgbmdyZWFkbChhZHIpICAgICAgICAgICAgICAgcmVhZGwoZGV2LT5pb21lbSArIChhZHIpKQorI2RlZmluZSBuZ3JlYWRiKGFkcikgICAgICAgICAgICAgICByZWFkYihkZXYtPmlvbWVtICsgKGFkcikpCisjZGVmaW5lIG5nY3B5dG8oYWRyLCBzcmMsIGNvdW50KSAgIG1lbWNweV90b2lvKChjaGFyICopIFwKKwkJCQkgICAoZGV2LT5pb21lbSArIChhZHIpKSwgKHNyYyksIChjb3VudCkpCisjZGVmaW5lIG5nY3B5ZnJvbShkc3QsIGFkciwgY291bnQpIG1lbWNweV9mcm9taW8oKGRzdCksIChjaGFyICopIFwKKwkJCQkgICAoZGV2LT5pb21lbSArIChhZHIpKSwgKGNvdW50KSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBuR2VuZSBpbnRlcnJ1cHQgaGFuZGxlciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBldmVudF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbmdlbmUgKmRldiA9IChzdHJ1Y3QgbmdlbmUgKilkYXRhOworCisJd2hpbGUgKGRldi0+RXZlbnRRdWV1ZVJlYWRJbmRleCAhPSBkZXYtPkV2ZW50UXVldWVXcml0ZUluZGV4KSB7CisJCXN0cnVjdCBFVkVOVF9CVUZGRVIgRXZlbnQgPQorCQkJZGV2LT5FdmVudFF1ZXVlW2Rldi0+RXZlbnRRdWV1ZVJlYWRJbmRleF07CisJCWRldi0+RXZlbnRRdWV1ZVJlYWRJbmRleCA9CisJCQkoZGV2LT5FdmVudFF1ZXVlUmVhZEluZGV4ICsgMSkgJiAoRVZFTlRfUVVFVUVfU0laRSAtIDEpOworCisJCWlmICgoRXZlbnQuVUFSVFN0YXR1cyAmIDB4MDEpICYmIChkZXYtPlR4RXZlbnROb3RpZnkpKQorCQkJZGV2LT5UeEV2ZW50Tm90aWZ5KGRldiwgRXZlbnQuVGltZVN0YW1wKTsKKwkJaWYgKChFdmVudC5VQVJUU3RhdHVzICYgMHgwMikgJiYgKGRldi0+UnhFdmVudE5vdGlmeSkpCisJCQlkZXYtPlJ4RXZlbnROb3RpZnkoZGV2LCBFdmVudC5UaW1lU3RhbXAsCisJCQkJCSAgIEV2ZW50LlJYQ2hhcmFjdGVyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRlbXV4X3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuID0gKHN0cnVjdCBuZ2VuZV9jaGFubmVsICopZGF0YTsKKwlzdHJ1Y3QgU0J1ZmZlckhlYWRlciAqQ3VyID0gY2hhbi0+bmV4dEJ1ZmZlcjsKKworCXNwaW5fbG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCisJd2hpbGUgKEN1ci0+bmdlbmVCdWZmZXIuU1IuRmxhZ3MgJiAweDgwKSB7CisJCWlmIChjaGFuLT5tb2RlICYgTkdFTkVfSU9fVFNPVVQpIHsKKwkJCXUzMiBGbGFncyA9IGNoYW4tPkRhdGFGb3JtYXRGbGFnczsKKwkJCWlmIChDdXItPm5nZW5lQnVmZmVyLlNSLkZsYWdzICYgMHgyMCkKKwkJCQlGbGFncyB8PSBCRUZfT1ZFUkZMT1c7CisJCQlpZiAoY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlKSB7CisJCQkJaWYgKCFjaGFuLT5wQnVmZmVyRXhjaGFuZ2UoY2hhbiwKKwkJCQkJCQkgICBDdXItPkJ1ZmZlcjEsCisJCQkJCQkJICAgY2hhbi0+Q2FwdHVyZTFMZW5ndGgsCisJCQkJCQkJICAgQ3VyLT5uZ2VuZUJ1ZmZlci5TUi4KKwkJCQkJCQkgICBDbG9jaywgRmxhZ3MpKSB7CisJCQkJCS8qCisJCQkJCSAgIFdlIGRpZG4ndCBnZXQgZGF0YQorCQkJCQkgICBDbGVhciBpbiBzZXJ2aWNlIGZsYWcgdG8gbWFrZSBzdXJlIHdlCisJCQkJCSAgIGdldCBjYWxsZWQgb24gbmV4dCBpbnRlcnJ1cHQgYWdhaW4uCisJCQkJCSAgIGxlYXZlIGZpbGwvZW1wdHkgKDB4ODApIGZsYWcgYWxvbmUKKwkJCQkJICAgdG8gYXZvaWQgaGFyZHdhcmUgcnVubmluZyBvdXQgb2YKKwkJCQkJICAgYnVmZmVycyBkdXJpbmcgc3RhcnR1cCwgd2UgaG9sZCBvbmx5CisJCQkJCSAgIGluIHJ1biBzdGF0ZSAoIHRoZSBzb3VyY2UgbWF5IGJlIGxhdGUKKwkJCQkJICAgZGVsaXZlcmluZyBkYXRhICkKKwkJCQkJKi8KKworCQkJCQlpZiAoY2hhbi0+SFdTdGF0ZSA9PSBIV1NUQVRFX1JVTikgeworCQkJCQkJQ3VyLT5uZ2VuZUJ1ZmZlci5TUi5GbGFncyAmPQorCQkJCQkJCX4weDQwOworCQkJCQkJYnJlYWs7CisJCQkJCQkvKiBTdG9wIHByb2NjZXNzaW5nIHN0cmVhbSAqLworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogV2UgZ290IGEgdmFsaWQgYnVmZmVyLAorCQkJCQkgICBzbyBzd2l0Y2ggdG8gcnVuIHN0YXRlICovCisJCQkJCWNoYW4tPkhXU3RhdGUgPSBIV1NUQVRFX1JVTjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRSAiOiBPT1BTXG4iKTsKKwkJCQlpZiAoY2hhbi0+SFdTdGF0ZSA9PSBIV1NUQVRFX1JVTikgeworCQkJCQlDdXItPm5nZW5lQnVmZmVyLlNSLkZsYWdzICY9IH4weDQwOworCQkJCQlicmVhazsJLyogU3RvcCBwcm9jY2Vzc2luZyBzdHJlYW0gKi8KKwkJCQl9CisJCQl9CisJCQlpZiAoY2hhbi0+QXVkaW9EVE9VcGRhdGVkKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRQorCQkJCSAgICAgICAiOiBVcGRhdGUgQXVkaW9EVE8gPSAlZFxuIiwKKwkJCQkgICAgICAgY2hhbi0+QXVkaW9EVE9WYWx1ZSk7CisJCQkJQ3VyLT5uZ2VuZUJ1ZmZlci5TUi5EVE9VcGRhdGUgPQorCQkJCQljaGFuLT5BdWRpb0RUT1ZhbHVlOworCQkJCWNoYW4tPkF1ZGlvRFRPVXBkYXRlZCA9IDA7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoY2hhbi0+SFdTdGF0ZSA9PSBIV1NUQVRFX1JVTikgeworCQkJCXUzMiBGbGFncyA9IDA7CisJCQkJaWYgKEN1ci0+bmdlbmVCdWZmZXIuU1IuRmxhZ3MgJiAweDAxKQorCQkJCQlGbGFncyB8PSBCRUZfRVZFTl9GSUVMRDsKKwkJCQlpZiAoQ3VyLT5uZ2VuZUJ1ZmZlci5TUi5GbGFncyAmIDB4MjApCisJCQkJCUZsYWdzIHw9IEJFRl9PVkVSRkxPVzsKKwkJCQlpZiAoY2hhbi0+cEJ1ZmZlckV4Y2hhbmdlKQorCQkJCQljaGFuLT5wQnVmZmVyRXhjaGFuZ2UoY2hhbiwKKwkJCQkJCQkgICAgICBDdXItPkJ1ZmZlcjEsCisJCQkJCQkJICAgICAgY2hhbi0+CisJCQkJCQkJICAgICAgQ2FwdHVyZTFMZW5ndGgsCisJCQkJCQkJICAgICAgQ3VyLT5uZ2VuZUJ1ZmZlci4KKwkJCQkJCQkgICAgICBTUi5DbG9jaywgRmxhZ3MpOworCQkJCWlmIChjaGFuLT5wQnVmZmVyRXhjaGFuZ2UyKQorCQkJCQljaGFuLT5wQnVmZmVyRXhjaGFuZ2UyKGNoYW4sCisJCQkJCQkJICAgICAgIEN1ci0+QnVmZmVyMiwKKwkJCQkJCQkgICAgICAgY2hhbi0+CisJCQkJCQkJICAgICAgIENhcHR1cmUyTGVuZ3RoLAorCQkJCQkJCSAgICAgICBDdXItPm5nZW5lQnVmZmVyLgorCQkJCQkJCSAgICAgICBTUi5DbG9jaywgRmxhZ3MpOworCQkJfSBlbHNlIGlmIChjaGFuLT5IV1N0YXRlICE9IEhXU1RBVEVfU1RPUCkKKwkJCQljaGFuLT5IV1N0YXRlID0gSFdTVEFURV9SVU47CisJCX0KKwkJQ3VyLT5uZ2VuZUJ1ZmZlci5TUi5GbGFncyA9IDB4MDA7CisJCUN1ciA9IEN1ci0+TmV4dDsKKwl9CisJY2hhbi0+bmV4dEJ1ZmZlciA9IEN1cjsKKworCXNwaW5fdW5sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5nZW5lICpkZXYgPSAoc3RydWN0IG5nZW5lICopZGV2X2lkOworCXUzMiBpY291bnRzID0gMDsKKwlpcnFyZXR1cm5fdCByYyA9IElSUV9OT05FOworCXUzMiBpID0gTUFYX1NUUkVBTTsKKwl1OCAqdG1wQ21kRG9uZUJ5dGU7CisKKwlpZiAoZGV2LT5Cb290RmlybXdhcmUpIHsKKwkJaWNvdW50cyA9IG5ncmVhZGwoTkdFTkVfSU5UX0NPVU5UUyk7CisJCWlmIChpY291bnRzICE9IGRldi0+aWNvdW50cykgeworCQkJbmd3cml0ZWwoMCwgRk9SQ0VfTk1JKTsKKwkJCWRldi0+Y21kX2RvbmUgPSAxOworCQkJd2FrZV91cCgmZGV2LT5jbWRfd3EpOworCQkJZGV2LT5pY291bnRzID0gaWNvdW50czsKKwkJCXJjID0gSVJRX0hBTkRMRUQ7CisJCX0KKwkJcmV0dXJuIHJjOworCX0KKworCW5nd3JpdGVsKDAsIEZPUkNFX05NSSk7CisKKwlzcGluX2xvY2soJmRldi0+Y21kX2xvY2spOworCXRtcENtZERvbmVCeXRlID0gZGV2LT5DbWREb25lQnl0ZTsKKwlpZiAodG1wQ21kRG9uZUJ5dGUgJiYKKwkgICAgKCp0bXBDbWREb25lQnl0ZSB8fAorCSAgICAoZGV2LT5uZ2VuZXRvaG9zdFswXSA9PSAxICYmIGRldi0+bmdlbmV0b2hvc3RbMV0gIT0gMCkpKSB7CisJCWRldi0+Q21kRG9uZUJ5dGUgPSBOVUxMOworCQlkZXYtPmNtZF9kb25lID0gMTsKKwkJd2FrZV91cCgmZGV2LT5jbWRfd3EpOworCQlyYyA9IElSUV9IQU5ETEVEOworCX0KKwlzcGluX3VubG9jaygmZGV2LT5jbWRfbG9jayk7CisKKwlpZiAoZGV2LT5FdmVudEJ1ZmZlci0+RXZlbnRTdGF0dXMgJiAweDgwKSB7CisJCXU4IG5leHRXcml0ZUluZGV4ID0KKwkJCShkZXYtPkV2ZW50UXVldWVXcml0ZUluZGV4ICsgMSkgJgorCQkJKEVWRU5UX1FVRVVFX1NJWkUgLSAxKTsKKwkJaWYgKG5leHRXcml0ZUluZGV4ICE9IGRldi0+RXZlbnRRdWV1ZVJlYWRJbmRleCkgeworCQkJZGV2LT5FdmVudFF1ZXVlW2Rldi0+RXZlbnRRdWV1ZVdyaXRlSW5kZXhdID0KKwkJCQkqKGRldi0+RXZlbnRCdWZmZXIpOworCQkJZGV2LT5FdmVudFF1ZXVlV3JpdGVJbmRleCA9IG5leHRXcml0ZUluZGV4OworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICI6IGV2ZW50IG92ZXJmbG93XG4iKTsKKwkJCWRldi0+RXZlbnRRdWV1ZU92ZXJmbG93Q291bnQgKz0gMTsKKwkJCWRldi0+RXZlbnRRdWV1ZU92ZXJmbG93RmxhZyA9IDE7CisJCX0KKwkJZGV2LT5FdmVudEJ1ZmZlci0+RXZlbnRTdGF0dXMgJj0gfjB4ODA7CisJCXRhc2tsZXRfc2NoZWR1bGUoJmRldi0+ZXZlbnRfdGFza2xldCk7CisJCXJjID0gSVJRX0hBTkRMRUQ7CisJfQorCisJd2hpbGUgKGkgPiAwKSB7CisJCWktLTsKKwkJc3Bpbl9sb2NrKCZkZXYtPmNoYW5uZWxbaV0uc3RhdGVfbG9jayk7CisJCS8qIGlmIChkZXYtPmNoYW5uZWxbaV0uU3RhdGU+PUtTU1RBVEVfUlVOKSB7ICovCisJCWlmIChkZXYtPmNoYW5uZWxbaV0ubmV4dEJ1ZmZlcikgeworCQkJaWYgKChkZXYtPmNoYW5uZWxbaV0ubmV4dEJ1ZmZlci0+CisJCQkgICAgIG5nZW5lQnVmZmVyLlNSLkZsYWdzICYgMHhDMCkgPT0gMHg4MCkgeworCQkJCWRldi0+Y2hhbm5lbFtpXS5uZXh0QnVmZmVyLT4KKwkJCQkJbmdlbmVCdWZmZXIuU1IuRmxhZ3MgfD0gMHg0MDsKKwkJCQl0YXNrbGV0X3NjaGVkdWxlKAorCQkJCQkmZGV2LT5jaGFubmVsW2ldLmRlbXV4X3Rhc2tsZXQpOworCQkJCXJjID0gSVJRX0hBTkRMRUQ7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2soJmRldi0+Y2hhbm5lbFtpXS5zdGF0ZV9sb2NrKTsKKwl9CisKKwkvKiBSZXF1ZXN0IG1pZ2h0IGhhdmUgYmVlbiBwcm9jZXNzZWQgYnkgYSBwcmV2aW91cyBjYWxsLiAqLworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBuR2VuZSBjb21tYW5kIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBkdW1wX2NvbW1hbmRfaW8oc3RydWN0IG5nZW5lICpkZXYpCit7CisJdTggYnVmWzhdLCAqYjsKKworCW5nY3B5ZnJvbShidWYsIEhPU1RfVE9fTkdFTkUsIDgpOworCXByaW50ayhLRVJOX0VSUiAiaG9zdF90b19uZ2VuZSAoJTA0eCk6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJSE9TVF9UT19OR0VORSwgYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdLAorCQlidWZbNF0sIGJ1Zls1XSwgYnVmWzZdLCBidWZbN10pOworCisJbmdjcHlmcm9tKGJ1ZiwgTkdFTkVfVE9fSE9TVCwgOCk7CisJcHJpbnRrKEtFUk5fRVJSICJuZ2VuZV90b19ob3N0ICglMDR4KTogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQlOR0VORV9UT19IT1NULCBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10sCisJCWJ1Zls0XSwgYnVmWzVdLCBidWZbNl0sIGJ1Zls3XSk7CisKKwliID0gZGV2LT5ob3N0dG9uZ2VuZTsKKwlwcmludGsoS0VSTl9FUlIgImRldi0+aG9zdHRvbmdlbmUgKCVwKTogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQliLCBiWzBdLCBiWzFdLCBiWzJdLCBiWzNdLCBiWzRdLCBiWzVdLCBiWzZdLCBiWzddKTsKKworCWIgPSBkZXYtPm5nZW5ldG9ob3N0OworCXByaW50ayhLRVJOX0VSUiAiZGV2LT5uZ2VuZXRvaG9zdCAoJXApOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJCWIsIGJbMF0sIGJbMV0sIGJbMl0sIGJbM10sIGJbNF0sIGJbNV0sIGJbNl0sIGJbN10pOworfQorCitzdGF0aWMgaW50IG5nZW5lX2NvbW1hbmRfbXV0ZXgoc3RydWN0IG5nZW5lICpkZXYsIHN0cnVjdCBuZ2VuZV9jb21tYW5kICpjb20pCit7CisJaW50IHJldDsKKwl1OCAqdG1wQ21kRG9uZUJ5dGU7CisKKwlkZXYtPmNtZF9kb25lID0gMDsKKworCWlmIChjb20tPmNtZC5oZHIuT3Bjb2RlID09IENNRF9GV0xPQURfUFJFUEFSRSkgeworCQlkZXYtPkJvb3RGaXJtd2FyZSA9IDE7CisJCWRldi0+aWNvdW50cyA9IG5ncmVhZGwoTkdFTkVfSU5UX0NPVU5UUyk7CisJCW5nd3JpdGVsKDAsIE5HRU5FX0NPTU1BTkQpOworCQluZ3dyaXRlbCgwLCBOR0VORV9DT01NQU5EX0hJKTsKKwkJbmd3cml0ZWwoMCwgTkdFTkVfU1RBVFVTKTsKKwkJbmd3cml0ZWwoMCwgTkdFTkVfU1RBVFVTX0hJKTsKKwkJbmd3cml0ZWwoMCwgTkdFTkVfRVZFTlQpOworCQluZ3dyaXRlbCgwLCBOR0VORV9FVkVOVF9ISSk7CisJfSBlbHNlIGlmIChjb20tPmNtZC5oZHIuT3Bjb2RlID09IENNRF9GV0xPQURfRklOSVNIKSB7CisJCXU2NCBmd2lvID0gZGV2LT5QQUZXSW50ZXJmYWNlQnVmZmVyOworCisJCW5nd3JpdGVsKGZ3aW8gJiAweGZmZmZmZmZmLCBOR0VORV9DT01NQU5EKTsKKwkJbmd3cml0ZWwoZndpbyA+PiAzMiwgTkdFTkVfQ09NTUFORF9ISSk7CisJCW5nd3JpdGVsKChmd2lvICsgMjU2KSAmIDB4ZmZmZmZmZmYsIE5HRU5FX1NUQVRVUyk7CisJCW5nd3JpdGVsKChmd2lvICsgMjU2KSA+PiAzMiwgTkdFTkVfU1RBVFVTX0hJKTsKKwkJbmd3cml0ZWwoKGZ3aW8gKyA1MTIpICYgMHhmZmZmZmZmZiwgTkdFTkVfRVZFTlQpOworCQluZ3dyaXRlbCgoZndpbyArIDUxMikgPj4gMzIsIE5HRU5FX0VWRU5UX0hJKTsKKwl9CisKKwltZW1jcHkoZGV2LT5GV0ludGVyZmFjZUJ1ZmZlciwgY29tLT5jbWQucmF3OCwgY29tLT5pbl9sZW4gKyAyKTsKKworCWlmIChkZXYtPkJvb3RGaXJtd2FyZSkKKwkJbmdjcHl0byhIT1NUX1RPX05HRU5FLCBjb20tPmNtZC5yYXc4LCBjb20tPmluX2xlbiArIDIpOworCisJc3Bpbl9sb2NrX2lycSgmZGV2LT5jbWRfbG9jayk7CisJdG1wQ21kRG9uZUJ5dGUgPSBkZXYtPm5nZW5ldG9ob3N0ICsgY29tLT5vdXRfbGVuOworCWlmICghY29tLT5vdXRfbGVuKQorCQl0bXBDbWREb25lQnl0ZSsrOworCSp0bXBDbWREb25lQnl0ZSA9IDA7CisJZGV2LT5uZ2VuZXRvaG9zdFswXSA9IDA7CisJZGV2LT5uZ2VuZXRvaG9zdFsxXSA9IDA7CisJZGV2LT5DbWREb25lQnl0ZSA9IHRtcENtZERvbmVCeXRlOworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5jbWRfbG9jayk7CisKKwkvKiBOb3RpZnkgODA1MS4gKi8KKwluZ3dyaXRlbCgxLCBGT1JDRV9JTlQpOworCisJcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KGRldi0+Y21kX3dxLCBkZXYtPmNtZF9kb25lID09IDEsIDIgKiBIWik7CisJaWYgKCFyZXQpIHsKKwkJLypuZ3dyaXRlbCgwLCBGT1JDRV9OTUkpOyovCisKKwkJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FCisJCSAgICAgICAiOiBDb21tYW5kIHRpbWVvdXQgY21kPSUwMnggcHJldj0lMDJ4XG4iLAorCQkgICAgICAgY29tLT5jbWQuaGRyLk9wY29kZSwgZGV2LT5wcmV2X2NtZCk7CisJCWR1bXBfY29tbWFuZF9pbyhkZXYpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChjb20tPmNtZC5oZHIuT3Bjb2RlID09IENNRF9GV0xPQURfRklOSVNIKQorCQlkZXYtPkJvb3RGaXJtd2FyZSA9IDA7CisKKwlkZXYtPnByZXZfY21kID0gY29tLT5jbWQuaGRyLk9wY29kZTsKKworCWlmICghY29tLT5vdXRfbGVuKQorCQlyZXR1cm4gMDsKKworCW1lbWNweShjb20tPmNtZC5yYXc4LCBkZXYtPm5nZW5ldG9ob3N0LCBjb20tPm91dF9sZW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfY29tbWFuZChzdHJ1Y3QgbmdlbmUgKmRldiwgc3RydWN0IG5nZW5lX2NvbW1hbmQgKmNvbSkKK3sKKwlpbnQgcmVzdWx0OworCisJZG93bigmZGV2LT5jbWRfbXV0ZXgpOworCXJlc3VsdCA9IG5nZW5lX2NvbW1hbmRfbXV0ZXgoZGV2LCBjb20pOworCXVwKCZkZXYtPmNtZF9tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgaW50IG5nZW5lX2NvbW1hbmRfaTJjX3JlYWQoc3RydWN0IG5nZW5lICpkZXYsIHU4IGFkciwKKwkJCSAgIHU4ICpvdXQsIHU4IG91dGxlbiwgdTggKmluLCB1OCBpbmxlbiwgaW50IGZsYWcpCit7CisJc3RydWN0IG5nZW5lX2NvbW1hbmQgY29tOworCisJY29tLmNtZC5oZHIuT3Bjb2RlID0gQ01EX0kyQ19SRUFEOworCWNvbS5jbWQuaGRyLkxlbmd0aCA9IG91dGxlbiArIDM7CisJY29tLmNtZC5JMkNSZWFkLkRldmljZSA9IGFkciA8PCAxOworCW1lbWNweShjb20uY21kLkkyQ1JlYWQuRGF0YSwgb3V0LCBvdXRsZW4pOworCWNvbS5jbWQuSTJDUmVhZC5EYXRhW291dGxlbl0gPSBpbmxlbjsKKwljb20uY21kLkkyQ1JlYWQuRGF0YVtvdXRsZW4gKyAxXSA9IDA7CisJY29tLmluX2xlbiA9IG91dGxlbiArIDM7CisJY29tLm91dF9sZW4gPSBpbmxlbiArIDE7CisKKwlpZiAobmdlbmVfY29tbWFuZChkZXYsICZjb20pIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoKGNvbS5jbWQucmF3OFswXSA+PiAxKSAhPSBhZHIpCisJCXJldHVybiAtRUlPOworCisJaWYgKGZsYWcpCisJCW1lbWNweShpbiwgY29tLmNtZC5yYXc4LCBpbmxlbiArIDEpOworCWVsc2UKKwkJbWVtY3B5KGluLCBjb20uY21kLnJhdzggKyAxLCBpbmxlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfY29tbWFuZF9pMmNfd3JpdGUoc3RydWN0IG5nZW5lICpkZXYsIHU4IGFkciwKKwkJCQkgICB1OCAqb3V0LCB1OCBvdXRsZW4pCit7CisJc3RydWN0IG5nZW5lX2NvbW1hbmQgY29tOworCisKKwljb20uY21kLmhkci5PcGNvZGUgPSBDTURfSTJDX1dSSVRFOworCWNvbS5jbWQuaGRyLkxlbmd0aCA9IG91dGxlbiArIDE7CisJY29tLmNtZC5JMkNSZWFkLkRldmljZSA9IGFkciA8PCAxOworCW1lbWNweShjb20uY21kLkkyQ1JlYWQuRGF0YSwgb3V0LCBvdXRsZW4pOworCWNvbS5pbl9sZW4gPSBvdXRsZW4gKyAxOworCWNvbS5vdXRfbGVuID0gMTsKKworCWlmIChuZ2VuZV9jb21tYW5kKGRldiwgJmNvbSkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChjb20uY21kLnJhdzhbMF0gPT0gMSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZ2VuZV9jb21tYW5kX2xvYWRfZmlybXdhcmUoc3RydWN0IG5nZW5lICpkZXYsCisJCQkJICAgICAgIHU4ICpuZ2VuZV9mdywgdTMyIHNpemUpCit7CisjZGVmaW5lIEZJUlNUQ0hVTksgKDEwMjQpCisJdTMyIGNsZWZ0OworCXN0cnVjdCBuZ2VuZV9jb21tYW5kIGNvbTsKKworCWNvbS5jbWQuaGRyLk9wY29kZSA9IENNRF9GV0xPQURfUFJFUEFSRTsKKwljb20uY21kLmhkci5MZW5ndGggPSAwOworCWNvbS5pbl9sZW4gPSAwOworCWNvbS5vdXRfbGVuID0gMDsKKworCW5nZW5lX2NvbW1hbmQoZGV2LCAmY29tKTsKKworCWNsZWZ0ID0gKHNpemUgKyAzKSAmIH4zOworCWlmIChjbGVmdCA+IEZJUlNUQ0hVTkspIHsKKwkJbmdjcHl0byhQUk9HUkFNX1NSQU0gKyBGSVJTVENIVU5LLCBuZ2VuZV9mdyArIEZJUlNUQ0hVTkssCisJCQljbGVmdCAtIEZJUlNUQ0hVTkspOworCQljbGVmdCA9IEZJUlNUQ0hVTks7CisJfQorCW5nY3B5dG8oREFUQV9GSUZPX0FSRUEsIG5nZW5lX2Z3LCBjbGVmdCk7CisKKwltZW1zZXQoJmNvbSwgMCwgc2l6ZW9mKHN0cnVjdCBuZ2VuZV9jb21tYW5kKSk7CisJY29tLmNtZC5oZHIuT3Bjb2RlID0gQ01EX0ZXTE9BRF9GSU5JU0g7CisJY29tLmNtZC5oZHIuTGVuZ3RoID0gNDsKKwljb20uY21kLkZXTG9hZEZpbmlzaC5BZGRyZXNzID0gREFUQV9GSUZPX0FSRUE7CisJY29tLmNtZC5GV0xvYWRGaW5pc2guTGVuZ3RoID0gKHVuc2lnbmVkIHNob3J0KWNsZWZ0OworCWNvbS5pbl9sZW4gPSA0OworCWNvbS5vdXRfbGVuID0gMDsKKworCXJldHVybiBuZ2VuZV9jb21tYW5kKGRldiwgJmNvbSk7Cit9CisKKworc3RhdGljIGludCBuZ2VuZV9jb21tYW5kX2NvbmZpZ19idWYoc3RydWN0IG5nZW5lICpkZXYsIHU4IGNvbmZpZykKK3sKKwlzdHJ1Y3QgbmdlbmVfY29tbWFuZCBjb207CisKKwljb20uY21kLmhkci5PcGNvZGUgPSBDTURfQ09ORklHVVJFX0JVRkZFUjsKKwljb20uY21kLmhkci5MZW5ndGggPSAxOworCWNvbS5jbWQuQ29uZmlndXJlQnVmZmVycy5jb25maWcgPSBjb25maWc7CisJY29tLmluX2xlbiA9IDE7CisJY29tLm91dF9sZW4gPSAwOworCisJaWYgKG5nZW5lX2NvbW1hbmQoZGV2LCAmY29tKSA8IDApCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5nZW5lX2NvbW1hbmRfY29uZmlnX2ZyZWVfYnVmKHN0cnVjdCBuZ2VuZSAqZGV2LCB1OCAqY29uZmlnKQoreworCXN0cnVjdCBuZ2VuZV9jb21tYW5kIGNvbTsKKworCWNvbS5jbWQuaGRyLk9wY29kZSA9IENNRF9DT05GSUdVUkVfRlJFRV9CVUZGRVI7CisJY29tLmNtZC5oZHIuTGVuZ3RoID0gNjsKKwltZW1jcHkoJmNvbS5jbWQuQ29uZmlndXJlQnVmZmVycy5jb25maWcsIGNvbmZpZywgNik7CisJY29tLmluX2xlbiA9IDY7CisJY29tLm91dF9sZW4gPSAwOworCisJaWYgKG5nZW5lX2NvbW1hbmQoZGV2LCAmY29tKSA8IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfY29tbWFuZF9ncGlvX3NldChzdHJ1Y3QgbmdlbmUgKmRldiwgdTggc2VsZWN0LCB1OCBsZXZlbCkKK3sKKwlzdHJ1Y3QgbmdlbmVfY29tbWFuZCBjb207CisKKwljb20uY21kLmhkci5PcGNvZGUgPSBDTURfU0VUX0dQSU9fUElOOworCWNvbS5jbWQuaGRyLkxlbmd0aCA9IDE7CisJY29tLmNtZC5TZXRHcGlvUGluLnNlbGVjdCA9IHNlbGVjdCB8IChsZXZlbCA8PCA3KTsKKwljb20uaW5fbGVuID0gMTsKKwljb20ub3V0X2xlbiA9IDA7CisKKwlyZXR1cm4gbmdlbmVfY29tbWFuZChkZXYsICZjb20pOworfQorCisKKy8qCisgMDIwMDA2NDAgaXMgc2FtcGxlIG9uIHJpc2luZyBlZGdlLgorIDAyMDAwNzQwIGlzIHNhbXBsZSBvbiBmYWxsaW5nIGVkZ2UuCisgMDIwMDAwNDAgaXMgaWdub3JlICJ2YWxpZCIgc2lnbmFsCisKKyAwOiBGRF9DVEwxIEJpdCA3LDYgbXVzdCBiZSAwLDEKKyAgICA3ICAgZGlzYWJsZShmdyBjb250cm9sbGVkKQorICAgIDYgICAwLUFVWCwxLVRTCisgICAgNSAgIDAtcGFyLDEtc2VyCisgICAgNCAgIDAtbHNiLzEtbXNiCisgICAgMywyIHJlc2VydmVkCisgICAgMSwwIDAtbm8gc3luYywgMS11c2UgZXh0LiBzdGFydCwgMi11c2UgMHg0NywgMy1ib3RoCisgMTogRkRfQ1RMMiBoYXMgMy12YWxpZCBtdXN0IGJlIGhpLCAyLXVzZSB2YWxpZCwgMS1lZGdlCisgMjogRkRfU1RBIGlzIHJlYWQtb25seS4gMC1zeW5jCisgMzogRkRfSU5TWU5DIGlzIG51bWJlciBvZiA0N3MgdG8gdHJpZ2dlciAiaW4gc3luYyIuCisgNDogRkRfT1VUU1lOQyBpcyBudW1iZXIgb2YgNDdzIHRvIHRyaWdnZXIgIm91dCBvZiBzeW5jIi4KKyA1OiBGRF9NQVhCWVRFMSBpcyBsb3ctb3JkZXIgb2YgYnl0ZXMgcGVyIHBhY2tldC4KKyA2OiBGRF9NQVhCWVRFMiBpcyBoaWdoLW9yZGVyIG9mIGJ5dGVzIHBlciBwYWNrZXQuCisgNzogVG9wIGJ5dGUgaXMgdW51c2VkLgorKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB1OCBUU0ZlYXR1cmVEZWNvZGVyU2V0dXBbOCAqIDRdID0geworCTB4NDIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDIsIDB4YmMsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHgwNiwgMHgwMCwgMHgwMiwgMHgwMiwgMHhiYywgMHgwMCwgMHgwMCwJLyogRFJYSCAqLworCTB4NzEsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDIsIDB4YmMsIDB4MDAsIDB4MDAsCS8qIERSWEhzZXIgKi8KKwkweDcyLCAweDA2LCAweDAwLCAweDAyLCAweDAyLCAweGJjLCAweDAwLCAweDAwLAkvKiBTMnNlciAqLworfTsKKworLyogU2V0IE5HRU5FIEkyUyBDb25maWcgdG8gMTYgYml0IHBhY2tlZCAqLworc3RhdGljIHU4IEkyU0NvbmZpZ3VyYXRpb25bXSA9IHsKKwkweDAwLCAweDEwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MTAsIDB4MDAsIDB4MDAsCit9OworCitzdGF0aWMgdTggU1BESUZDb25maWd1cmF0aW9uWzEwXSA9IHsKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCit9OworCisvKiBTZXQgTkdFTkUgSTJTIENvbmZpZyB0byB0cmFuc3BvcnQgc3RyZWFtIGNvbXBhdGlibGUgbW9kZSAqLworCitzdGF0aWMgdTggVFNfSTJTQ29uZmlndXJhdGlvbls0XSA9IHsgMHgzRSwgMHgxQSwgMHgwMCwgMHgwMCB9OyAvKjNlIDE4IDAwIDAwID8qLworCitzdGF0aWMgdTggVFNfSTJTT3V0Q29uZmlndXJhdGlvbls0XSA9IHsgMHg4MCwgMHgyMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgdTggSVRVRGVjb2RlclNldHVwWzRdWzE2XSA9IHsKKwl7MHgxYywgMHgxMywgMHgwMSwgMHg2OCwgMHgzZCwgMHg5MCwgMHgxNCwgMHgyMCwgIC8qIFNEVFYgKi8KKwkgMHgwMCwgMHgwMCwgMHgwMSwgMHhiMCwgMHg5YywgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4OWMsIDB4MDMsIDB4MjMsIDB4QzAsIDB4NjAsIDB4MEUsIDB4MTMsIDB4MDAsCisJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDlmLCAweDAwLCAweDIzLCAweEMwLCAweDYwLCAweDBGLCAweDEzLCAweDAwLCAgLyogSERUViAxMDgwaTUwICovCisJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDljLCAweDAxLCAweDIzLCAweEMwLCAweDYwLCAweDBFLCAweDEzLCAweDAwLCAgLyogSERUViAxMDgwaTYwICovCisJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjAsIDB4MDAsIDB4MDAsIDB4MDB9LAorfTsKKworLyoKKyAqIDUwIDQ4IDYwIGdsZWljaAorICogMjdwNTAgOWYgMDAgMjIgODAgNDIgNjkgMTggLi4uCisgKiAyN3A2MCA5MyAwMCAyMiA4MCA4MiA2OSAxYyAuLi4KKyAqLworCisvKiBNYXhieXRlIHRvIDExNDQgKGZvciByYXcgZGF0YSkgKi8KK3N0YXRpYyB1OCBJVFVGZWF0dXJlRGVjb2RlclNldHVwWzhdID0geworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDQsIDB4MDAKK307CisKK3N0YXRpYyB2b2lkIEZpbGxUU0J1ZmZlcih2b2lkICpCdWZmZXIsIGludCBMZW5ndGgsIHUzMiBGbGFncykKK3sKKwl1MzIgKnB0ciA9IEJ1ZmZlcjsKKworCW1lbXNldChCdWZmZXIsIDB4ZmYsIExlbmd0aCk7CisJd2hpbGUgKExlbmd0aCA+IDApIHsKKwkJaWYgKEZsYWdzICYgREZfU1dBUDMyKQorCQkJKnB0ciA9IDB4NDcxRkZGMTA7CisJCWVsc2UKKwkJCSpwdHIgPSAweDEwRkYxRjQ3OworCQlwdHIgKz0gKDE4OCAvIDQpOworCQlMZW5ndGggLT0gMTg4OworCX0KK30KKworCitzdGF0aWMgdm9pZCBmbHVzaF9idWZmZXJzKHN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuKQoreworCXU4IHZhbDsKKworCWRvIHsKKwkJbXNsZWVwKDEpOworCQlzcGluX2xvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKwkJdmFsID0gY2hhbi0+bmV4dEJ1ZmZlci0+bmdlbmVCdWZmZXIuU1IuRmxhZ3MgJiAweDgwOworCQlzcGluX3VubG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCX0gd2hpbGUgKHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX2J1ZmZlcnMoc3RydWN0IG5nZW5lX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IFNCdWZmZXJIZWFkZXIgKkN1ciA9IGNoYW4tPm5leHRCdWZmZXI7CisKKwlkbyB7CisJCW1lbXNldCgmQ3VyLT5uZ2VuZUJ1ZmZlci5TUiwgMCwgc2l6ZW9mKEN1ci0+bmdlbmVCdWZmZXIuU1IpKTsKKwkJaWYgKGNoYW4tPm1vZGUgJiBOR0VORV9JT19UU09VVCkKKwkJCUZpbGxUU0J1ZmZlcihDdXItPkJ1ZmZlcjEsCisJCQkJICAgICBjaGFuLT5DYXB0dXJlMUxlbmd0aCwKKwkJCQkgICAgIGNoYW4tPkRhdGFGb3JtYXRGbGFncyk7CisJCUN1ciA9IEN1ci0+TmV4dDsKKwl9IHdoaWxlIChDdXIgIT0gY2hhbi0+bmV4dEJ1ZmZlcik7CisKKwlpZiAoY2hhbi0+bW9kZSAmIE5HRU5FX0lPX1RTT1VUKSB7CisJCWNoYW4tPm5leHRCdWZmZXItPm5nZW5lQnVmZmVyLlNSLkRUT1VwZGF0ZSA9CisJCQljaGFuLT5BdWRpb0RUT1ZhbHVlOworCQljaGFuLT5BdWRpb0RUT1VwZGF0ZWQgPSAwOworCisJCUN1ciA9IGNoYW4tPlRTSWRsZUJ1ZmZlci5IZWFkOworCisJCWRvIHsKKwkJCW1lbXNldCgmQ3VyLT5uZ2VuZUJ1ZmZlci5TUiwgMCwKKwkJCSAgICAgICBzaXplb2YoQ3VyLT5uZ2VuZUJ1ZmZlci5TUikpOworCQkJRmlsbFRTQnVmZmVyKEN1ci0+QnVmZmVyMSwKKwkJCQkgICAgIGNoYW4tPkNhcHR1cmUxTGVuZ3RoLAorCQkJCSAgICAgY2hhbi0+RGF0YUZvcm1hdEZsYWdzKTsKKwkJCUN1ciA9IEN1ci0+TmV4dDsKKwkJfSB3aGlsZSAoQ3VyICE9IGNoYW4tPlRTSWRsZUJ1ZmZlci5IZWFkKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfY29tbWFuZF9zdHJlYW1fY29udHJvbChzdHJ1Y3QgbmdlbmUgKmRldiwgdTggc3RyZWFtLAorCQkJCQl1OCBjb250cm9sLCB1OCBtb2RlLCB1OCBmbGFncykKK3sKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbiA9ICZkZXYtPmNoYW5uZWxbc3RyZWFtXTsKKwlzdHJ1Y3QgbmdlbmVfY29tbWFuZCBjb207CisJdTE2IEJzVVZJID0gKChzdHJlYW0gJiAxKSA/IDB4OTQwMCA6IDB4OTMwMCk7CisJdTE2IEJzU0RJID0gKChzdHJlYW0gJiAxKSA/IDB4OTYwMCA6IDB4OTUwMCk7CisJdTE2IEJzU1BJID0gKChzdHJlYW0gJiAxKSA/IDB4OTgwMCA6IDB4OTcwMCk7CisJdTE2IEJzU0RPID0gMHg5QjAwOworCisJLyogZG93bigmZGV2LT5zdHJlYW1fbXV0ZXgpOyAqLworCXdoaWxlIChkb3duX3RyeWxvY2soJmRldi0+c3RyZWFtX211dGV4KSkgeworCQlwcmludGsoS0VSTl9JTkZPIERFVklDRV9OQU1FICI6IFNDIGxvY2tlZFxuIik7CisJCW1zbGVlcCgxKTsKKwl9CisJbWVtc2V0KCZjb20sIDAsIHNpemVvZihjb20pKTsKKwljb20uY21kLmhkci5PcGNvZGUgPSBDTURfQ09OVFJPTDsKKwljb20uY21kLmhkci5MZW5ndGggPSBzaXplb2Yoc3RydWN0IEZXX1NUUkVBTV9DT05UUk9MKSAtIDI7CisJY29tLmNtZC5TdHJlYW1Db250cm9sLlN0cmVhbSA9IHN0cmVhbSB8IChjb250cm9sID8gOCA6IDApOworCWlmIChjaGFuLT5tb2RlICYgTkdFTkVfSU9fVFNPVVQpCisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TdHJlYW0gfD0gMHgwNzsKKwljb20uY21kLlN0cmVhbUNvbnRyb2wuQ29udHJvbCA9IGNvbnRyb2wgfAorCQkoZmxhZ3MgJiBTRkxBR19PUkRFUl9MVU1BX0NIUk9NQSk7CisJY29tLmNtZC5TdHJlYW1Db250cm9sLk1vZGUgPSBtb2RlOworCWNvbS5pbl9sZW4gPSBzaXplb2Yoc3RydWN0IEZXX1NUUkVBTV9DT05UUk9MKTsKKwljb20ub3V0X2xlbiA9IDA7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRQorCQkiOiBTdHJlYW09JTAyeCwgQ29udHJvbD0lMDJ4LCBNb2RlPSUwMnhcbiIsCisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TdHJlYW0sIGNvbS5jbWQuU3RyZWFtQ29udHJvbC5Db250cm9sLAorCQljb20uY21kLlN0cmVhbUNvbnRyb2wuTW9kZSk7CisKKwljaGFuLT5Nb2RlID0gbW9kZTsKKworCWlmICghKGNvbnRyb2wgJiAweDgwKSkgeworCQlzcGluX2xvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKwkJaWYgKGNoYW4tPlN0YXRlID09IEtTU1RBVEVfUlVOKSB7CisJCQljaGFuLT5TdGF0ZSA9IEtTU1RBVEVfQUNRVUlSRTsKKwkJCWNoYW4tPkhXU3RhdGUgPSBIV1NUQVRFX1NUT1A7CisJCQlzcGluX3VubG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCQkJaWYgKG5nZW5lX2NvbW1hbmQoZGV2LCAmY29tKSA8IDApIHsKKwkJCQl1cCgmZGV2LT5zdHJlYW1fbXV0ZXgpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCS8qIGNsZWFyX2J1ZmZlcnMoY2hhbik7ICovCisJCQlmbHVzaF9idWZmZXJzKGNoYW4pOworCQkJdXAoJmRldi0+c3RyZWFtX211dGV4KTsKKwkJCXJldHVybiAwOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7CisJCXVwKCZkZXYtPnN0cmVhbV9tdXRleCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChtb2RlICYgU01PREVfQVVESU9fQ0FQVFVSRSkgeworCQljb20uY21kLlN0cmVhbUNvbnRyb2wuQ2FwdHVyZUJsb2NrQ291bnQgPQorCQkJY2hhbi0+Q2FwdHVyZTFMZW5ndGggLyBBVURJT19CTE9DS19TSVpFOworCQljb20uY21kLlN0cmVhbUNvbnRyb2wuQnVmZmVyX0FkZHJlc3MgPSBjaGFuLT5SaW5nQnVmZmVyLlBBSGVhZDsKKwl9IGVsc2UgaWYgKG1vZGUgJiBTTU9ERV9UUkFOU1BPUlRfU1RSRUFNKSB7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5DYXB0dXJlQmxvY2tDb3VudCA9CisJCQljaGFuLT5DYXB0dXJlMUxlbmd0aCAvIFRTX0JMT0NLX1NJWkU7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5NYXhMaW5lc1BlckZpZWxkID0KKwkJCWNoYW4tPkNhcHR1cmUxTGVuZ3RoIC8gVFNfQkxPQ0tfU0laRTsKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLkJ1ZmZlcl9BZGRyZXNzID0KKwkJCWNoYW4tPlRTUmluZ0J1ZmZlci5QQUhlYWQ7CisJCWlmIChjaGFuLT5tb2RlICYgTkdFTkVfSU9fVFNPVVQpIHsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5CeXRlc1BlclZCSUxpbmUgPQorCQkJCWNoYW4tPkNhcHR1cmUxTGVuZ3RoIC8gVFNfQkxPQ0tfU0laRTsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TdHJlYW0gfD0gMHgwNzsKKwkJfQorCX0gZWxzZSB7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5CeXRlc1BlclZpZGVvTGluZSA9IGNoYW4tPm5CeXRlc1BlckxpbmU7CisJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5NYXhMaW5lc1BlckZpZWxkID0gY2hhbi0+bkxpbmVzOworCQljb20uY21kLlN0cmVhbUNvbnRyb2wuTWluTGluZXNQZXJGaWVsZCA9IDEwMDsKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLkJ1ZmZlcl9BZGRyZXNzID0gY2hhbi0+UmluZ0J1ZmZlci5QQUhlYWQ7CisKKwkJaWYgKG1vZGUgJiBTTU9ERV9WQklfQ0FQVFVSRSkgeworCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLk1heFZCSUxpbmVzUGVyRmllbGQgPQorCQkJCWNoYW4tPm5WQklMaW5lczsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5NaW5WQklMaW5lc1BlckZpZWxkID0gMDsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5CeXRlc1BlclZCSUxpbmUgPQorCQkJCWNoYW4tPm5CeXRlc1BlclZCSUxpbmU7CisJCX0KKwkJaWYgKGZsYWdzICYgU0ZMQUdfQ09MT1JCQVIpCisJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU3RyZWFtIHw9IDB4MDQ7CisJfQorCisJc3Bpbl9sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7CisJaWYgKG1vZGUgJiBTTU9ERV9BVURJT19DQVBUVVJFKSB7CisJCWNoYW4tPm5leHRCdWZmZXIgPSBjaGFuLT5SaW5nQnVmZmVyLkhlYWQ7CisJCWlmIChtb2RlICYgU01PREVfQVVESU9fU1BESUYpIHsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFMZW4gPQorCQkJCXNpemVvZihTUERJRkNvbmZpZ3VyYXRpb24pOworCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUFkZHIgPSBCc1NQSTsKKwkJCW1lbWNweShjb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhLAorCQkJICAgICAgIFNQRElGQ29uZmlndXJhdGlvbiwgc2l6ZW9mKFNQRElGQ29uZmlndXJhdGlvbikpOworCQl9IGVsc2UgeworCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUxlbiA9IDQ7CisJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhQWRkciA9IEJzU0RJOworCQkJbWVtY3B5KGNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGEsCisJCQkgICAgICAgSTJTQ29uZmlndXJhdGlvbiArCisJCQkgICAgICAgNCAqIGRldi0+Y2FyZF9pbmZvLT5pMnNbc3RyZWFtXSwgNCk7CisJCX0KKwl9IGVsc2UgaWYgKG1vZGUgJiBTTU9ERV9UUkFOU1BPUlRfU1RSRUFNKSB7CisJCWNoYW4tPm5leHRCdWZmZXIgPSBjaGFuLT5UU1JpbmdCdWZmZXIuSGVhZDsKKwkJaWYgKHN0cmVhbSA+PSBTVFJFQU1fQVVESU9JTjEpIHsKKwkJCWlmIChjaGFuLT5tb2RlICYgTkdFTkVfSU9fVFNPVVQpIHsKKwkJCQljb20uY21kLlN0cmVhbUNvbnRyb2wuU2V0dXBEYXRhTGVuID0KKwkJCQkJc2l6ZW9mKFRTX0kyU091dENvbmZpZ3VyYXRpb24pOworCQkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFBZGRyID0gQnNTRE87CisJCQkJbWVtY3B5KGNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGEsCisJCQkJICAgICAgIFRTX0kyU091dENvbmZpZ3VyYXRpb24sCisJCQkJICAgICAgIHNpemVvZihUU19JMlNPdXRDb25maWd1cmF0aW9uKSk7CisJCQl9IGVsc2UgeworCQkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFMZW4gPQorCQkJCQlzaXplb2YoVFNfSTJTQ29uZmlndXJhdGlvbik7CisJCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUFkZHIgPSBCc1NESTsKKwkJCQltZW1jcHkoY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YSwKKwkJCQkgICAgICAgVFNfSTJTQ29uZmlndXJhdGlvbiwKKwkJCQkgICAgICAgc2l6ZW9mKFRTX0kyU0NvbmZpZ3VyYXRpb24pKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGFMZW4gPSA4OworCQkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUFkZHIgPSBCc1VWSSArIDB4MTA7CisJCQltZW1jcHkoY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YSwKKwkJCSAgICAgICBUU0ZlYXR1cmVEZWNvZGVyU2V0dXAgKworCQkJICAgICAgIDggKiBkZXYtPmNhcmRfaW5mby0+dHNmW3N0cmVhbV0sIDgpOworCQl9CisJfSBlbHNlIHsKKwkJY2hhbi0+bmV4dEJ1ZmZlciA9IGNoYW4tPlJpbmdCdWZmZXIuSGVhZDsKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUxlbiA9CisJCQkxNiArIHNpemVvZihJVFVGZWF0dXJlRGVjb2RlclNldHVwKTsKKwkJY29tLmNtZC5TdHJlYW1Db250cm9sLlNldHVwRGF0YUFkZHIgPSBCc1VWSTsKKwkJbWVtY3B5KGNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGEsCisJCSAgICAgICBJVFVEZWNvZGVyU2V0dXBbY2hhbi0+aXR1bW9kZV0sIDE2KTsKKwkJbWVtY3B5KGNvbS5jbWQuU3RyZWFtQ29udHJvbC5TZXR1cERhdGEgKyAxNiwKKwkJICAgICAgIElUVUZlYXR1cmVEZWNvZGVyU2V0dXAsIHNpemVvZihJVFVGZWF0dXJlRGVjb2RlclNldHVwKSk7CisJfQorCWNsZWFyX2J1ZmZlcnMoY2hhbik7CisJY2hhbi0+U3RhdGUgPSBLU1NUQVRFX1JVTjsKKwlpZiAobW9kZSAmIFNNT0RFX1RSQU5TUE9SVF9TVFJFQU0pCisJCWNoYW4tPkhXU3RhdGUgPSBIV1NUQVRFX1JVTjsKKwllbHNlCisJCWNoYW4tPkhXU3RhdGUgPSBIV1NUQVRFX1NUQVJUVVA7CisJc3Bpbl91bmxvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKworCWlmIChuZ2VuZV9jb21tYW5kKGRldiwgJmNvbSkgPCAwKSB7CisJCXVwKCZkZXYtPnN0cmVhbV9tdXRleCk7CisJCXJldHVybiAtMTsKKwl9CisJdXAoJmRldi0+c3RyZWFtX211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEkyQyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIG5nZW5lX2kyY19zZXRfYnVzKHN0cnVjdCBuZ2VuZSAqZGV2LCBpbnQgYnVzKQoreworCWlmICghKGRldi0+Y2FyZF9pbmZvLT5pMmNfYWNjZXNzICYgMikpCisJCXJldHVybjsKKwlpZiAoZGV2LT5pMmNfY3VycmVudF9idXMgPT0gYnVzKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGJ1cykgeworCWNhc2UgMDoKKwkJbmdlbmVfY29tbWFuZF9ncGlvX3NldChkZXYsIDMsIDApOworCQluZ2VuZV9jb21tYW5kX2dwaW9fc2V0KGRldiwgMiwgMSk7CisJCWJyZWFrOworCisJY2FzZSAxOgorCQluZ2VuZV9jb21tYW5kX2dwaW9fc2V0KGRldiwgMiwgMCk7CisJCW5nZW5lX2NvbW1hbmRfZ3Bpb19zZXQoZGV2LCAzLCAxKTsKKwkJYnJlYWs7CisJfQorCWRldi0+aTJjX2N1cnJlbnRfYnVzID0gYnVzOworfQorCitzdGF0aWMgaW50IG5nZW5lX2kyY19tYXN0ZXJfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLCBpbnQgbnVtKQoreworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuID0KKwkJKHN0cnVjdCBuZ2VuZV9jaGFubmVsICopaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlzdHJ1Y3QgbmdlbmUgKmRldiA9IGNoYW4tPmRldjsKKworCWRvd24oJmRldi0+aTJjX3N3aXRjaF9tdXRleCk7CisJbmdlbmVfaTJjX3NldF9idXMoZGV2LCBjaGFuLT5udW1iZXIpOworCisJaWYgKG51bSA9PSAyICYmIG1zZ1sxXS5mbGFncyAmIEkyQ19NX1JEICYmICEobXNnWzBdLmZsYWdzICYgSTJDX01fUkQpKQorCQlpZiAoIW5nZW5lX2NvbW1hbmRfaTJjX3JlYWQoZGV2LCBtc2dbMF0uYWRkciwKKwkJCQkJICAgIG1zZ1swXS5idWYsIG1zZ1swXS5sZW4sCisJCQkJCSAgICBtc2dbMV0uYnVmLCBtc2dbMV0ubGVuLCAwKSkKKwkJCWdvdG8gZG9uZTsKKworCWlmIChudW0gPT0gMSAmJiAhKG1zZ1swXS5mbGFncyAmIEkyQ19NX1JEKSkKKwkJaWYgKCFuZ2VuZV9jb21tYW5kX2kyY193cml0ZShkZXYsIG1zZ1swXS5hZGRyLAorCQkJCQkgICAgIG1zZ1swXS5idWYsIG1zZ1swXS5sZW4pKQorCQkJZ290byBkb25lOworCWlmIChudW0gPT0gMSAmJiAobXNnWzBdLmZsYWdzICYgSTJDX01fUkQpKQorCQlpZiAoIW5nZW5lX2NvbW1hbmRfaTJjX3JlYWQoZGV2LCBtc2dbMF0uYWRkciwgMCwgMCwKKwkJCQkJICAgIG1zZ1swXS5idWYsIG1zZ1swXS5sZW4sIDApKQorCQkJZ290byBkb25lOworCisJdXAoJmRldi0+aTJjX3N3aXRjaF9tdXRleCk7CisJcmV0dXJuIC1FSU87CisKK2RvbmU6CisJdXAoJmRldi0+aTJjX3N3aXRjaF9tdXRleCk7CisJcmV0dXJuIG51bTsKK30KKworCitzdGF0aWMgdTMyIG5nZW5lX2kyY19mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIG5nZW5lX2kyY19hbGdvID0geworCS5tYXN0ZXJfeGZlciA9IG5nZW5lX2kyY19tYXN0ZXJfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IG5nZW5lX2kyY19mdW5jdGlvbmFsaXR5LAorfTsKKworc3RhdGljIGludCBuZ2VuZV9pMmNfaW5pdChzdHJ1Y3QgbmdlbmUgKmRldiwgaW50IGRldl9ucikKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSAmKGRldi0+Y2hhbm5lbFtkZXZfbnJdLmkyY19hZGFwdGVyKTsKKworCWkyY19zZXRfYWRhcGRhdGEoYWRhcCwgJihkZXYtPmNoYW5uZWxbZGV2X25yXSkpOworCWFkYXAtPmNsYXNzID0gSTJDX0NMQVNTX1RWX0RJR0lUQUwgfCBJMkNfQ0xBU1NfVFZfQU5BTE9HOworCisJc3RyY3B5KGFkYXAtPm5hbWUsICJuR2VuZSIpOworCisJYWRhcC0+YWxnbyA9ICZuZ2VuZV9pMmNfYWxnbzsKKwlhZGFwLT5hbGdvX2RhdGEgPSAodm9pZCAqKSYoZGV2LT5jaGFubmVsW2Rldl9ucl0pOworCWFkYXAtPmRldi5wYXJlbnQgPSAmZGV2LT5wY2lfZGV2LT5kZXY7CisKKwlyZXR1cm4gaTJjX2FkZF9hZGFwdGVyKGFkYXApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRFZCIGZ1bmN0aW9ucyBhbmQgQVBJIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgc3dhcF9idWZmZXIodTMyICpwLCB1MzIgbGVuKQoreworCXdoaWxlIChsZW4pIHsKKwkJKnAgPSBzd2FiMzIoKnApOworCQlwKys7CisJCWxlbiAtPSA0OworCX0KK30KKworCitzdGF0aWMgdm9pZCAqdHNpbl9leGNoYW5nZSh2b2lkICpwcml2LCB2b2lkICpidWYsIHUzMiBsZW4sIHUzMiBjbG9jaywgdTMyIGZsYWdzKQoreworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuID0gcHJpdjsKKworCisjaWZkZWYgQ09NTUFORF9USU1FT1VUX1dPUktBUk9VTkQKKwlpZiAoY2hhbi0+dXNlcnMgPiAwKQorI2VuZGlmCisJCWR2Yl9kbXhfc3dmaWx0ZXIoJmNoYW4tPmRlbXV4LCBidWYsIGxlbik7CisJcmV0dXJuIDA7Cit9CisKK3U4IGZpbGxfdHNbMTg4XSA9IHsgMHg0NywgMHgxZiwgMHhmZiwgMHgxMCB9OworCitzdGF0aWMgdm9pZCAqdHNvdXRfZXhjaGFuZ2Uodm9pZCAqcHJpdiwgdm9pZCAqYnVmLCB1MzIgbGVuLAorCQkJICAgIHUzMiBjbG9jaywgdTMyIGZsYWdzKQoreworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuID0gcHJpdjsKKwlzdHJ1Y3QgbmdlbmUgKmRldiA9IGNoYW4tPmRldjsKKwl1MzIgYWxlbjsKKworCWFsZW4gPSBkdmJfcmluZ2J1ZmZlcl9hdmFpbCgmZGV2LT50c291dF9yYnVmKTsKKwlhbGVuIC09IGFsZW4gJSAxODg7CisKKwlpZiAoYWxlbiA8IGxlbikKKwkJRmlsbFRTQnVmZmVyKGJ1ZiArIGFsZW4sIGxlbiAtIGFsZW4sIGZsYWdzKTsKKwllbHNlCisJCWFsZW4gPSBsZW47CisJZHZiX3JpbmdidWZmZXJfcmVhZCgmZGV2LT50c291dF9yYnVmLCBidWYsIGFsZW4pOworCWlmIChmbGFncyAmIERGX1NXQVAzMikKKwkJc3dhcF9idWZmZXIoKHUzMiAqKWJ1ZiwgYWxlbik7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPnRzb3V0X3JidWYucXVldWUpOworCXJldHVybiBidWY7Cit9CisKKworc3RhdGljIHZvaWQgc2V0X3RyYW5zZmVyKHN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuLCBpbnQgc3RhdGUpCit7CisJdTggY29udHJvbCA9IDAsIG1vZGUgPSAwLCBmbGFncyA9IDA7CisJc3RydWN0IG5nZW5lICpkZXYgPSBjaGFuLT5kZXY7CisJaW50IHJldDsKKworCS8qCisJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBzdCAlZFxuIiwgc3RhdGUpOworCW1zbGVlcCgxMDApOworCSovCisKKwlpZiAoc3RhdGUpIHsKKwkJaWYgKGNoYW4tPnJ1bm5pbmcpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogYWxyZWFkeSBydW5uaW5nXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghY2hhbi0+cnVubmluZykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBhbHJlYWR5IHN0b3BwZWRcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKGRldi0+Y2FyZF9pbmZvLT5zd2l0Y2hfY3RybCkKKwkJZGV2LT5jYXJkX2luZm8tPnN3aXRjaF9jdHJsKGNoYW4sIDEsIHN0YXRlIF4gMSk7CisKKwlpZiAoc3RhdGUpIHsKKwkJc3Bpbl9sb2NrX2lycSgmY2hhbi0+c3RhdGVfbG9jayk7CisKKwkJLyogcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBsb2NrPSUwOHhcbiIsCisJCQkgIG5ncmVhZGwoMHg5MzEwKSk7ICovCisJCWR2Yl9yaW5nYnVmZmVyX2ZsdXNoKCZkZXYtPnRzb3V0X3JidWYpOworCQljb250cm9sID0gMHg4MDsKKwkJaWYgKGNoYW4tPm1vZGUgJiAoTkdFTkVfSU9fVFNJTiB8IE5HRU5FX0lPX1RTT1VUKSkgeworCQkJY2hhbi0+Q2FwdHVyZTFMZW5ndGggPSA1MTIgKiAxODg7CisJCQltb2RlID0gU01PREVfVFJBTlNQT1JUX1NUUkVBTTsKKwkJfQorCQlpZiAoY2hhbi0+bW9kZSAmIE5HRU5FX0lPX1RTT1VUKSB7CisJCQljaGFuLT5wQnVmZmVyRXhjaGFuZ2UgPSB0c291dF9leGNoYW5nZTsKKwkJCS8qIDB4NjY2NjY2NjYgPSA1ME1IeiAqMl4zMyAvMjUwTUh6ICovCisJCQljaGFuLT5BdWRpb0RUT1ZhbHVlID0gMHg2NjY2NjY2NjsKKwkJCS8qIHNldF9kdG8oY2hhbiwgMzg4MTA3MDArMTAwMCk7ICovCisJCQkvKiBzZXRfZHRvKGNoYW4sIDE5MzkyNjU4KTsgKi8KKwkJfQorCQlpZiAoY2hhbi0+bW9kZSAmIE5HRU5FX0lPX1RTSU4pCisJCQljaGFuLT5wQnVmZmVyRXhjaGFuZ2UgPSB0c2luX2V4Y2hhbmdlOworCQkvKiBuZ3dyaXRlbCgwLCAweDkzMTApOyAqLworCQlzcGluX3VubG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCX0gZWxzZQorCQk7LyogcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBsb2NrPSUwOHhcbiIsCisJCQkgICBuZ3JlYWRsKDB4OTMxMCkpOyAqLworCisJcmV0ID0gbmdlbmVfY29tbWFuZF9zdHJlYW1fY29udHJvbChkZXYsIGNoYW4tPm51bWJlciwKKwkJCQkJICAgY29udHJvbCwgbW9kZSwgZmxhZ3MpOworCWlmICghcmV0KQorCQljaGFuLT5ydW5uaW5nID0gc3RhdGU7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgREVWSUNFX05BTUUgIjogc2V0X3RyYW5zZmVyICVkIGZhaWxlZFxuIiwKKwkJICAgICAgIHN0YXRlKTsKKwlpZiAoIXN0YXRlKSB7CisJCXNwaW5fbG9ja19pcnEoJmNoYW4tPnN0YXRlX2xvY2spOworCQljaGFuLT5wQnVmZmVyRXhjaGFuZ2UgPSAwOworCQlkdmJfcmluZ2J1ZmZlcl9mbHVzaCgmZGV2LT50c291dF9yYnVmKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjaGFuLT5zdGF0ZV9sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmdlbmVfc3RhcnRfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQpCit7CisJc3RydWN0IGR2Yl9kZW11eCAqZHZiZG14ID0gZHZiZG14ZmVlZC0+ZGVtdXg7CisJc3RydWN0IG5nZW5lX2NoYW5uZWwgKmNoYW4gPSBkdmJkbXgtPnByaXY7CisKKwlpZiAoY2hhbi0+dXNlcnMgPT0gMCkgeworI2lmZGVmIENPTU1BTkRfVElNRU9VVF9XT1JLQVJPVU5ECisJCWlmICghY2hhbi0+cnVubmluZykKKyNlbmRpZgorCQkJc2V0X3RyYW5zZmVyKGNoYW4sIDEpOworCQkvKiBtc2xlZXAoMTApOyAqLworCX0KKworCXJldHVybiArK2NoYW4tPnVzZXJzOworfQorCitzdGF0aWMgaW50IG5nZW5lX3N0b3BfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQpCit7CisJc3RydWN0IGR2Yl9kZW11eCAqZHZiZG14ID0gZHZiZG14ZmVlZC0+ZGVtdXg7CisJc3RydWN0IG5nZW5lX2NoYW5uZWwgKmNoYW4gPSBkdmJkbXgtPnByaXY7CisKKwlpZiAoLS1jaGFuLT51c2VycykKKwkJcmV0dXJuIGNoYW4tPnVzZXJzOworCisjaWZuZGVmIENPTU1BTkRfVElNRU9VVF9XT1JLQVJPVU5ECisJc2V0X3RyYW5zZmVyKGNoYW4sIDApOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbnQgbXlfZHZiX2RteF90c19jYXJkX2luaXQoc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXgsIGNoYXIgKmlkLAorCQkJCSAgIGludCAoKnN0YXJ0X2ZlZWQpKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqKSwKKwkJCQkgICBpbnQgKCpzdG9wX2ZlZWQpKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqKSwKKwkJCQkgICB2b2lkICpwcml2KQoreworCWR2YmRlbXV4LT5wcml2ID0gcHJpdjsKKworCWR2YmRlbXV4LT5maWx0ZXJudW0gPSAyNTY7CisJZHZiZGVtdXgtPmZlZWRudW0gPSAyNTY7CisJZHZiZGVtdXgtPnN0YXJ0X2ZlZWQgPSBzdGFydF9mZWVkOworCWR2YmRlbXV4LT5zdG9wX2ZlZWQgPSBzdG9wX2ZlZWQ7CisJZHZiZGVtdXgtPndyaXRlX3RvX2RlY29kZXIgPSAwOworCWR2YmRlbXV4LT5kbXguY2FwYWJpbGl0aWVzID0gKERNWF9UU19GSUxURVJJTkcgfAorCQkJCSAgICAgIERNWF9TRUNUSU9OX0ZJTFRFUklORyB8CisJCQkJICAgICAgRE1YX01FTU9SWV9CQVNFRF9GSUxURVJJTkcpOworCXJldHVybiBkdmJfZG14X2luaXQoZHZiZGVtdXgpOworfQorCitzdGF0aWMgaW50IG15X2R2Yl9kbXhkZXZfdHNfY2FyZF9pbml0KHN0cnVjdCBkbXhkZXYgKmRteGRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eCwKKwkJCQkgICAgICBzdHJ1Y3QgZG14X2Zyb250ZW5kICpod19mcm9udGVuZCwKKwkJCQkgICAgICBzdHJ1Y3QgZG14X2Zyb250ZW5kICptZW1fZnJvbnRlbmQsCisJCQkJICAgICAgc3RydWN0IGR2Yl9hZGFwdGVyICpkdmJfYWRhcHRlcikKK3sKKwlpbnQgcmV0OworCisJZG14ZGV2LT5maWx0ZXJudW0gPSAyNTY7CisJZG14ZGV2LT5kZW11eCA9ICZkdmJkZW11eC0+ZG14OworCWRteGRldi0+Y2FwYWJpbGl0aWVzID0gMDsKKwlyZXQgPSBkdmJfZG14ZGV2X2luaXQoZG14ZGV2LCBkdmJfYWRhcHRlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlod19mcm9udGVuZC0+c291cmNlID0gRE1YX0ZST05URU5EXzA7CisJZHZiZGVtdXgtPmRteC5hZGRfZnJvbnRlbmQoJmR2YmRlbXV4LT5kbXgsIGh3X2Zyb250ZW5kKTsKKwltZW1fZnJvbnRlbmQtPnNvdXJjZSA9IERNWF9NRU1PUllfRkU7CisJZHZiZGVtdXgtPmRteC5hZGRfZnJvbnRlbmQoJmR2YmRlbXV4LT5kbXgsIG1lbV9mcm9udGVuZCk7CisJcmV0dXJuIGR2YmRlbXV4LT5kbXguY29ubmVjdF9mcm9udGVuZCgmZHZiZGVtdXgtPmRteCwgaHdfZnJvbnRlbmQpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogbkdlbmUgaGFyZHdhcmUgaW5pdCBhbmQgcmVsZWFzZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgZnJlZV9yaW5nYnVmZmVyKHN0cnVjdCBuZ2VuZSAqZGV2LCBzdHJ1Y3QgU1JpbmdCdWZmZXJEZXNjcmlwdG9yICpyYikKK3sKKwlzdHJ1Y3QgU0J1ZmZlckhlYWRlciAqQ3VyID0gcmItPkhlYWQ7CisJdTMyIGo7CisKKwlpZiAoIUN1cikKKwkJcmV0dXJuOworCisJZm9yIChqID0gMDsgaiA8IHJiLT5OdW1CdWZmZXJzOyBqKyssIEN1ciA9IEN1ci0+TmV4dCkgeworCQlpZiAoQ3VyLT5CdWZmZXIxKQorCQkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaV9kZXYsCisJCQkJCSAgICByYi0+QnVmZmVyMUxlbmd0aCwKKwkJCQkJICAgIEN1ci0+QnVmZmVyMSwKKwkJCQkJICAgIEN1ci0+c2NMaXN0MS0+QWRkcmVzcyk7CisKKwkJaWYgKEN1ci0+QnVmZmVyMikKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wY2lfZGV2LAorCQkJCQkgICAgcmItPkJ1ZmZlcjJMZW5ndGgsCisJCQkJCSAgICBDdXItPkJ1ZmZlcjIsCisJCQkJCSAgICBDdXItPnNjTGlzdDItPkFkZHJlc3MpOworCX0KKworCWlmIChyYi0+U0NMaXN0TWVtKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpX2RldiwgcmItPlNDTGlzdE1lbVNpemUsCisJCQkJICAgIHJiLT5TQ0xpc3RNZW0sIHJiLT5QQVNDTGlzdE1lbSk7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGRldi0+cGNpX2RldiwgcmItPk1lbVNpemUsIHJiLT5IZWFkLCByYi0+UEFIZWFkKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9pZGxlYnVmZmVyKHN0cnVjdCBuZ2VuZSAqZGV2LAorCQkgICAgIHN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgKnJiLAorCQkgICAgIHN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgKnRiKQoreworCWludCBqOworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpDdXIgPSB0Yi0+SGVhZDsKKworCWlmICghcmItPkhlYWQpCisJCXJldHVybjsKKwlmcmVlX3JpbmdidWZmZXIoZGV2LCByYik7CisJZm9yIChqID0gMDsgaiA8IHRiLT5OdW1CdWZmZXJzOyBqKyssIEN1ciA9IEN1ci0+TmV4dCkgeworCQlDdXItPkJ1ZmZlcjIgPSAwOworCQlDdXItPnNjTGlzdDIgPSAwOworCQlDdXItPm5nZW5lQnVmZmVyLkFkZHJlc3Nfb2ZfZmlyc3RfZW50cnlfMiA9IDA7CisJCUN1ci0+bmdlbmVCdWZmZXIuTnVtYmVyX29mX2VudHJpZXNfMiA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBmcmVlX2NvbW1vbl9idWZmZXJzKHN0cnVjdCBuZ2VuZSAqZGV2KQoreworCXUzMiBpOworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuOworCisJZm9yIChpID0gU1RSRUFNX1ZJREVPSU4xOyBpIDwgTUFYX1NUUkVBTTsgaSsrKSB7CisJCWNoYW4gPSAmZGV2LT5jaGFubmVsW2ldOworCQlmcmVlX2lkbGVidWZmZXIoZGV2LCAmY2hhbi0+VFNJZGxlQnVmZmVyLCAmY2hhbi0+VFNSaW5nQnVmZmVyKTsKKwkJZnJlZV9yaW5nYnVmZmVyKGRldiwgJmNoYW4tPlJpbmdCdWZmZXIpOworCQlmcmVlX3JpbmdidWZmZXIoZGV2LCAmY2hhbi0+VFNSaW5nQnVmZmVyKTsKKwl9CisKKwlpZiAoZGV2LT5PdmVyZmxvd0J1ZmZlcikKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaV9kZXYsCisJCQkJICAgIE9WRVJGTE9XX0JVRkZFUl9TSVpFLAorCQkJCSAgICBkZXYtPk92ZXJmbG93QnVmZmVyLCBkZXYtPlBBT3ZlcmZsb3dCdWZmZXIpOworCisJaWYgKGRldi0+RldJbnRlcmZhY2VCdWZmZXIpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wY2lfZGV2LAorCQkJCSAgICA0MDk2LAorCQkJCSAgICBkZXYtPkZXSW50ZXJmYWNlQnVmZmVyLAorCQkJCSAgICBkZXYtPlBBRldJbnRlcmZhY2VCdWZmZXIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJpbmcgYnVmZmVyIGhhbmRsaW5nICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgY3JlYXRlX3JpbmdfYnVmZmVyKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAorCQkgICAgICAgc3RydWN0IFNSaW5nQnVmZmVyRGVzY3JpcHRvciAqZGVzY3IsIHUzMiBOdW1CdWZmZXJzKQoreworCWRtYV9hZGRyX3QgdG1wOworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpIZWFkOworCXUzMiBpOworCXUzMiBNZW1TaXplID0gU0laRU9GX1NCdWZmZXJIZWFkZXIgKiBOdW1CdWZmZXJzOworCXU2NCBQQVJpbmdCdWZmZXJIZWFkOworCXU2NCBQQVJpbmdCdWZmZXJDdXI7CisJdTY0IFBBUmluZ0J1ZmZlck5leHQ7CisJc3RydWN0IFNCdWZmZXJIZWFkZXIgKkN1ciwgKk5leHQ7CisKKwlkZXNjci0+SGVhZCA9IDA7CisJZGVzY3ItPk1lbVNpemUgPSAwOworCWRlc2NyLT5QQUhlYWQgPSAwOworCWRlc2NyLT5OdW1CdWZmZXJzID0gMDsKKworCWlmIChNZW1TaXplIDwgNDA5NikKKwkJTWVtU2l6ZSA9IDQwOTY7CisKKwlIZWFkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGNpX2RldiwgTWVtU2l6ZSwgJnRtcCk7CisJUEFSaW5nQnVmZmVySGVhZCA9IHRtcDsKKworCWlmICghSGVhZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoSGVhZCwgMCwgTWVtU2l6ZSk7CisKKwlQQVJpbmdCdWZmZXJDdXIgPSBQQVJpbmdCdWZmZXJIZWFkOworCUN1ciA9IEhlYWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgTnVtQnVmZmVycyAtIDE7IGkrKykgeworCQlOZXh0ID0gKHN0cnVjdCBTQnVmZmVySGVhZGVyICopCisJCQkoKCh1OCAqKSBDdXIpICsgU0laRU9GX1NCdWZmZXJIZWFkZXIpOworCQlQQVJpbmdCdWZmZXJOZXh0ID0gUEFSaW5nQnVmZmVyQ3VyICsgU0laRU9GX1NCdWZmZXJIZWFkZXI7CisJCUN1ci0+TmV4dCA9IE5leHQ7CisJCUN1ci0+bmdlbmVCdWZmZXIuTmV4dCA9IFBBUmluZ0J1ZmZlck5leHQ7CisJCUN1ciA9IE5leHQ7CisJCVBBUmluZ0J1ZmZlckN1ciA9IFBBUmluZ0J1ZmZlck5leHQ7CisJfQorCS8qIExhc3QgQnVmZmVyIHBvaW50cyBiYWNrIHRvIGZpcnN0IG9uZSAqLworCUN1ci0+TmV4dCA9IEhlYWQ7CisJQ3VyLT5uZ2VuZUJ1ZmZlci5OZXh0ID0gUEFSaW5nQnVmZmVySGVhZDsKKworCWRlc2NyLT5IZWFkICAgICAgID0gSGVhZDsKKwlkZXNjci0+TWVtU2l6ZSAgICA9IE1lbVNpemU7CisJZGVzY3ItPlBBSGVhZCAgICAgPSBQQVJpbmdCdWZmZXJIZWFkOworCWRlc2NyLT5OdW1CdWZmZXJzID0gTnVtQnVmZmVyczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IEFsbG9jYXRlUmluZ0J1ZmZlcnMoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCisJCQkgICAgICAgZG1hX2FkZHJfdCBvZiwKKwkJCSAgICAgICBzdHJ1Y3QgU1JpbmdCdWZmZXJEZXNjcmlwdG9yICpwUmluZ0J1ZmZlciwKKwkJCSAgICAgICB1MzIgQnVmZmVyMUxlbmd0aCwgdTMyIEJ1ZmZlcjJMZW5ndGgpCit7CisJZG1hX2FkZHJfdCB0bXA7CisJdTMyIGksIGo7CisJaW50IHN0YXR1cyA9IDA7CisJdTMyIFNDTGlzdE1lbVNpemUgPSBwUmluZ0J1ZmZlci0+TnVtQnVmZmVycworCQkqICgoQnVmZmVyMkxlbmd0aCAhPSAwKSA/IChOVU1fU0NBVFRFUl9HQVRIRVJfRU5UUklFUyAqIDIpIDoKKwkJICAgIE5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTKQorCQkqIHNpemVvZihzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCk7CisKKwl1NjQgUEFTQ0xpc3RNZW07CisJc3RydWN0IEhXX1NDQVRURVJfR0FUSEVSX0VMRU1FTlQgKlNDTGlzdEVudHJ5OworCXU2NCBQQVNDTGlzdEVudHJ5OworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpDdXI7CisJdm9pZCAqU0NMaXN0TWVtOworCisJaWYgKFNDTGlzdE1lbVNpemUgPCA0MDk2KQorCQlTQ0xpc3RNZW1TaXplID0gNDA5NjsKKworCVNDTGlzdE1lbSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBjaV9kZXYsIFNDTGlzdE1lbVNpemUsICZ0bXApOworCisJUEFTQ0xpc3RNZW0gPSB0bXA7CisJaWYgKFNDTGlzdE1lbSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChTQ0xpc3RNZW0sIDAsIFNDTGlzdE1lbVNpemUpOworCisJcFJpbmdCdWZmZXItPlNDTGlzdE1lbSA9IFNDTGlzdE1lbTsKKwlwUmluZ0J1ZmZlci0+UEFTQ0xpc3RNZW0gPSBQQVNDTGlzdE1lbTsKKwlwUmluZ0J1ZmZlci0+U0NMaXN0TWVtU2l6ZSA9IFNDTGlzdE1lbVNpemU7CisJcFJpbmdCdWZmZXItPkJ1ZmZlcjFMZW5ndGggPSBCdWZmZXIxTGVuZ3RoOworCXBSaW5nQnVmZmVyLT5CdWZmZXIyTGVuZ3RoID0gQnVmZmVyMkxlbmd0aDsKKworCVNDTGlzdEVudHJ5ID0gU0NMaXN0TWVtOworCVBBU0NMaXN0RW50cnkgPSBQQVNDTGlzdE1lbTsKKwlDdXIgPSBwUmluZ0J1ZmZlci0+SGVhZDsKKworCWZvciAoaSA9IDA7IGkgPCBwUmluZ0J1ZmZlci0+TnVtQnVmZmVyczsgaSArPSAxLCBDdXIgPSBDdXItPk5leHQpIHsKKwkJdTY0IFBBQnVmZmVyOworCisJCXZvaWQgKkJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBjaV9kZXYsIEJ1ZmZlcjFMZW5ndGgsCisJCQkJCQkgICAgJnRtcCk7CisJCVBBQnVmZmVyID0gdG1wOworCisJCWlmIChCdWZmZXIgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCUN1ci0+QnVmZmVyMSA9IEJ1ZmZlcjsKKworCQlTQ0xpc3RFbnRyeS0+QWRkcmVzcyA9IFBBQnVmZmVyOworCQlTQ0xpc3RFbnRyeS0+TGVuZ3RoICA9IEJ1ZmZlcjFMZW5ndGg7CisKKwkJQ3VyLT5zY0xpc3QxID0gU0NMaXN0RW50cnk7CisJCUN1ci0+bmdlbmVCdWZmZXIuQWRkcmVzc19vZl9maXJzdF9lbnRyeV8xID0gUEFTQ0xpc3RFbnRyeTsKKwkJQ3VyLT5uZ2VuZUJ1ZmZlci5OdW1iZXJfb2ZfZW50cmllc18xID0KKwkJCU5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTOworCisJCVNDTGlzdEVudHJ5ICs9IDE7CisJCVBBU0NMaXN0RW50cnkgKz0gc2l6ZW9mKHN0cnVjdCBIV19TQ0FUVEVSX0dBVEhFUl9FTEVNRU5UKTsKKworI2lmIE5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTID4gMQorCQlmb3IgKGogPSAwOyBqIDwgTlVNX1NDQVRURVJfR0FUSEVSX0VOVFJJRVMgLSAxOyBqICs9IDEpIHsKKwkJCVNDTGlzdEVudHJ5LT5BZGRyZXNzID0gb2Y7CisJCQlTQ0xpc3RFbnRyeS0+TGVuZ3RoID0gT1ZFUkZMT1dfQlVGRkVSX1NJWkU7CisJCQlTQ0xpc3RFbnRyeSArPSAxOworCQkJUEFTQ0xpc3RFbnRyeSArPQorCQkJCXNpemVvZihzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCk7CisJCX0KKyNlbmRpZgorCisJCWlmICghQnVmZmVyMkxlbmd0aCkKKwkJCWNvbnRpbnVlOworCisJCUJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBjaV9kZXYsIEJ1ZmZlcjJMZW5ndGgsICZ0bXApOworCQlQQUJ1ZmZlciA9IHRtcDsKKworCQlpZiAoQnVmZmVyID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlDdXItPkJ1ZmZlcjIgPSBCdWZmZXI7CisKKwkJU0NMaXN0RW50cnktPkFkZHJlc3MgPSBQQUJ1ZmZlcjsKKwkJU0NMaXN0RW50cnktPkxlbmd0aCAgPSBCdWZmZXIyTGVuZ3RoOworCisJCUN1ci0+c2NMaXN0MiA9IFNDTGlzdEVudHJ5OworCQlDdXItPm5nZW5lQnVmZmVyLkFkZHJlc3Nfb2ZfZmlyc3RfZW50cnlfMiA9IFBBU0NMaXN0RW50cnk7CisJCUN1ci0+bmdlbmVCdWZmZXIuTnVtYmVyX29mX2VudHJpZXNfMiA9CisJCQlOVU1fU0NBVFRFUl9HQVRIRVJfRU5UUklFUzsKKworCQlTQ0xpc3RFbnRyeSAgICs9IDE7CisJCVBBU0NMaXN0RW50cnkgKz0gc2l6ZW9mKHN0cnVjdCBIV19TQ0FUVEVSX0dBVEhFUl9FTEVNRU5UKTsKKworI2lmIE5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTID4gMQorCQlmb3IgKGogPSAwOyBqIDwgTlVNX1NDQVRURVJfR0FUSEVSX0VOVFJJRVMgLSAxOyBqKyspIHsKKwkJCVNDTGlzdEVudHJ5LT5BZGRyZXNzID0gb2Y7CisJCQlTQ0xpc3RFbnRyeS0+TGVuZ3RoID0gT1ZFUkZMT1dfQlVGRkVSX1NJWkU7CisJCQlTQ0xpc3RFbnRyeSArPSAxOworCQkJUEFTQ0xpc3RFbnRyeSArPQorCQkJCXNpemVvZihzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCk7CisJCX0KKyNlbmRpZgorCisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBGaWxsVFNJZGxlQnVmZmVyKHN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgKnBJZGxlQnVmZmVyLAorCQkJICAgIHN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgKnBSaW5nQnVmZmVyKQoreworCWludCBzdGF0dXMgPSAwOworCisJLyogQ29weSBwb2ludGVyIHRvIHNjYXR0ZXIgZ2F0aGVyIGxpc3QgaW4gVFNSaW5nYnVmZmVyCisJICAgc3RydWN0dXJlIGZvciBidWZmZXIgMgorCSAgIExvYWQgbnVtYmVyIG9mIGJ1ZmZlcgorCSovCisJdTMyIG4gPSBwUmluZ0J1ZmZlci0+TnVtQnVmZmVyczsKKworCS8qIFBvaW50IHRvIGZpcnN0IGJ1ZmZlciBlbnRyeSAqLworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpDdXIgPSBwUmluZ0J1ZmZlci0+SGVhZDsKKwlpbnQgaTsKKwkvKiBMb29wIHRocnUgYWxsIGJ1ZmZlciBhbmQgc2V0IEJ1ZmZlciAyIHBvaW50ZXJzIHRvIFRTSWRsZWJ1ZmZlciAqLworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJQ3VyLT5CdWZmZXIyID0gcElkbGVCdWZmZXItPkhlYWQtPkJ1ZmZlcjE7CisJCUN1ci0+c2NMaXN0MiA9IHBJZGxlQnVmZmVyLT5IZWFkLT5zY0xpc3QxOworCQlDdXItPm5nZW5lQnVmZmVyLkFkZHJlc3Nfb2ZfZmlyc3RfZW50cnlfMiA9CisJCQlwSWRsZUJ1ZmZlci0+SGVhZC0+bmdlbmVCdWZmZXIuCisJCQlBZGRyZXNzX29mX2ZpcnN0X2VudHJ5XzE7CisJCUN1ci0+bmdlbmVCdWZmZXIuTnVtYmVyX29mX2VudHJpZXNfMiA9CisJCQlwSWRsZUJ1ZmZlci0+SGVhZC0+bmdlbmVCdWZmZXIuTnVtYmVyX29mX2VudHJpZXNfMTsKKwkJQ3VyID0gQ3VyLT5OZXh0OworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdTMyIFJpbmdCdWZmZXJTaXplc1tNQVhfU1RSRUFNXSA9IHsKKwlSSU5HX1NJWkVfVklERU8sCisJUklOR19TSVpFX1ZJREVPLAorCVJJTkdfU0laRV9BVURJTywKKwlSSU5HX1NJWkVfQVVESU8sCisJUklOR19TSVpFX0FVRElPLAorfTsKKworc3RhdGljIHUzMiBCdWZmZXIxU2l6ZXNbTUFYX1NUUkVBTV0gPSB7CisJTUFYX1ZJREVPX0JVRkZFUl9TSVpFLAorCU1BWF9WSURFT19CVUZGRVJfU0laRSwKKwlNQVhfQVVESU9fQlVGRkVSX1NJWkUsCisJTUFYX0FVRElPX0JVRkZFUl9TSVpFLAorCU1BWF9BVURJT19CVUZGRVJfU0laRQorfTsKKworc3RhdGljIHUzMiBCdWZmZXIyU2l6ZXNbTUFYX1NUUkVBTV0gPSB7CisJTUFYX1ZCSV9CVUZGRVJfU0laRSwKKwlNQVhfVkJJX0JVRkZFUl9TSVpFLAorCTAsCisJMCwKKwkwCit9OworCisKK3N0YXRpYyBpbnQgQWxsb2NDb21tb25CdWZmZXJzKHN0cnVjdCBuZ2VuZSAqZGV2KQoreworCWludCBzdGF0dXMgPSAwLCBpOworCisJZGV2LT5GV0ludGVyZmFjZUJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldi0+cGNpX2RldiwgNDA5NiwKKwkJCQkJCSAgICAgJmRldi0+UEFGV0ludGVyZmFjZUJ1ZmZlcik7CisJaWYgKCFkZXYtPkZXSW50ZXJmYWNlQnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKwlkZXYtPmhvc3R0b25nZW5lID0gZGV2LT5GV0ludGVyZmFjZUJ1ZmZlcjsKKwlkZXYtPm5nZW5ldG9ob3N0ID0gZGV2LT5GV0ludGVyZmFjZUJ1ZmZlciArIDI1NjsKKwlkZXYtPkV2ZW50QnVmZmVyID0gZGV2LT5GV0ludGVyZmFjZUJ1ZmZlciArIDUxMjsKKworCWRldi0+T3ZlcmZsb3dCdWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBjaV9kZXYsCisJCQkJCQkgICBPVkVSRkxPV19CVUZGRVJfU0laRSwKKwkJCQkJCSAgICZkZXYtPlBBT3ZlcmZsb3dCdWZmZXIpOworCWlmICghZGV2LT5PdmVyZmxvd0J1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGRldi0+T3ZlcmZsb3dCdWZmZXIsIDAsIE9WRVJGTE9XX0JVRkZFUl9TSVpFKTsKKworCWZvciAoaSA9IFNUUkVBTV9WSURFT0lOMTsgaSA8IE1BWF9TVFJFQU07IGkrKykgeworCQlpbnQgdHlwZSA9IGRldi0+Y2FyZF9pbmZvLT5pb190eXBlW2ldOworCisJCWRldi0+Y2hhbm5lbFtpXS5TdGF0ZSA9IEtTU1RBVEVfU1RPUDsKKworCQlpZiAodHlwZSAmIChOR0VORV9JT19UViB8IE5HRU5FX0lPX0hEVFYgfCBOR0VORV9JT19BSU4pKSB7CisJCQlzdGF0dXMgPSBjcmVhdGVfcmluZ19idWZmZXIoZGV2LT5wY2lfZGV2LAorCQkJCQkJICAgICZkZXYtPmNoYW5uZWxbaV0uUmluZ0J1ZmZlciwKKwkJCQkJCSAgICBSaW5nQnVmZmVyU2l6ZXNbaV0pOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJYnJlYWs7CisKKwkJCWlmICh0eXBlICYgKE5HRU5FX0lPX1RWIHwgTkdFTkVfSU9fQUlOKSkgeworCQkJCXN0YXR1cyA9IEFsbG9jYXRlUmluZ0J1ZmZlcnMoZGV2LT5wY2lfZGV2LAorCQkJCQkJCSAgICAgZGV2LT4KKwkJCQkJCQkgICAgIFBBT3ZlcmZsb3dCdWZmZXIsCisJCQkJCQkJICAgICAmZGV2LT5jaGFubmVsW2ldLgorCQkJCQkJCSAgICAgUmluZ0J1ZmZlciwKKwkJCQkJCQkgICAgIEJ1ZmZlcjFTaXplc1tpXSwKKwkJCQkJCQkgICAgIEJ1ZmZlcjJTaXplc1tpXSk7CisJCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmICh0eXBlICYgTkdFTkVfSU9fSERUVikgeworCQkJCXN0YXR1cyA9IEFsbG9jYXRlUmluZ0J1ZmZlcnMoZGV2LT5wY2lfZGV2LAorCQkJCQkJCSAgICAgZGV2LT4KKwkJCQkJCQkgICAgIFBBT3ZlcmZsb3dCdWZmZXIsCisJCQkJCQkJICAgICAmZGV2LT5jaGFubmVsW2ldLgorCQkJCQkJCSAgICAgUmluZ0J1ZmZlciwKKwkJCQkJCQkgICBNQVhfSERUVl9CVUZGRVJfU0laRSwKKwkJCQkJCQkgICAgIDApOworCQkJCWlmIChzdGF0dXMgPCAwKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICh0eXBlICYgKE5HRU5FX0lPX1RTSU4gfCBOR0VORV9JT19UU09VVCkpIHsKKworCQkJc3RhdHVzID0gY3JlYXRlX3JpbmdfYnVmZmVyKGRldi0+cGNpX2RldiwKKwkJCQkJCSAgICAmZGV2LT5jaGFubmVsW2ldLgorCQkJCQkJICAgIFRTUmluZ0J1ZmZlciwgUklOR19TSVpFX1RTKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWJyZWFrOworCisJCQlzdGF0dXMgPSBBbGxvY2F0ZVJpbmdCdWZmZXJzKGRldi0+cGNpX2RldiwKKwkJCQkJCSAgICAgZGV2LT5QQU92ZXJmbG93QnVmZmVyLAorCQkJCQkJICAgICAmZGV2LT5jaGFubmVsW2ldLgorCQkJCQkJICAgICBUU1JpbmdCdWZmZXIsCisJCQkJCQkgICAgIE1BWF9UU19CVUZGRVJfU0laRSwgMCk7CisJCQlpZiAoc3RhdHVzKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHR5cGUgJiBOR0VORV9JT19UU09VVCkgeworCQkJc3RhdHVzID0gY3JlYXRlX3JpbmdfYnVmZmVyKGRldi0+cGNpX2RldiwKKwkJCQkJCSAgICAmZGV2LT5jaGFubmVsW2ldLgorCQkJCQkJICAgIFRTSWRsZUJ1ZmZlciwgMSk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlicmVhazsKKwkJCXN0YXR1cyA9IEFsbG9jYXRlUmluZ0J1ZmZlcnMoZGV2LT5wY2lfZGV2LAorCQkJCQkJICAgICBkZXYtPlBBT3ZlcmZsb3dCdWZmZXIsCisJCQkJCQkgICAgICZkZXYtPmNoYW5uZWxbaV0uCisJCQkJCQkgICAgIFRTSWRsZUJ1ZmZlciwKKwkJCQkJCSAgICAgTUFYX1RTX0JVRkZFUl9TSVpFLCAwKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJYnJlYWs7CisJCQlGaWxsVFNJZGxlQnVmZmVyKCZkZXYtPmNoYW5uZWxbaV0uVFNJZGxlQnVmZmVyLAorCQkJCQkgJmRldi0+Y2hhbm5lbFtpXS5UU1JpbmdCdWZmZXIpOworCQl9CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIG5nZW5lX3JlbGVhc2VfYnVmZmVycyhzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwlpZiAoZGV2LT5pb21lbSkKKwkJaW91bm1hcChkZXYtPmlvbWVtKTsKKwlmcmVlX2NvbW1vbl9idWZmZXJzKGRldik7CisJdmZyZWUoZGV2LT50c291dF9idWYpOworCXZmcmVlKGRldi0+YWluX2J1Zik7CisJdmZyZWUoZGV2LT52aW5fYnVmKTsKKwl2ZnJlZShkZXYpOworfQorCitzdGF0aWMgaW50IG5nZW5lX2dldF9idWZmZXJzKHN0cnVjdCBuZ2VuZSAqZGV2KQoreworCWlmIChBbGxvY0NvbW1vbkJ1ZmZlcnMoZGV2KSkKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGRldi0+Y2FyZF9pbmZvLT5pb190eXBlWzRdICYgTkdFTkVfSU9fVFNPVVQpIHsKKwkJZGV2LT50c291dF9idWYgPSB2bWFsbG9jKFRTT1VUX0JVRl9TSVpFKTsKKwkJaWYgKCFkZXYtPnRzb3V0X2J1ZikKKwkJCXJldHVybiAtRU5PTUVNOworCQlkdmJfcmluZ2J1ZmZlcl9pbml0KCZkZXYtPnRzb3V0X3JidWYsCisJCQkJICAgIGRldi0+dHNvdXRfYnVmLCBUU09VVF9CVUZfU0laRSk7CisJfQorCWlmIChkZXYtPmNhcmRfaW5mby0+aW9fdHlwZVsyXSAmIE5HRU5FX0lPX0FJTikgeworCQlkZXYtPmFpbl9idWYgPSB2bWFsbG9jKEFJTl9CVUZfU0laRSk7CisJCWlmICghZGV2LT5haW5fYnVmKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWR2Yl9yaW5nYnVmZmVyX2luaXQoJmRldi0+YWluX3JidWYsIGRldi0+YWluX2J1ZiwgQUlOX0JVRl9TSVpFKTsKKwl9CisJaWYgKGRldi0+Y2FyZF9pbmZvLT5pb190eXBlWzBdICYgTkdFTkVfSU9fSERUVikgeworCQlkZXYtPnZpbl9idWYgPSB2bWFsbG9jKFZJTl9CVUZfU0laRSk7CisJCWlmICghZGV2LT52aW5fYnVmKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWR2Yl9yaW5nYnVmZmVyX2luaXQoJmRldi0+dmluX3JidWYsIGRldi0+dmluX2J1ZiwgVklOX0JVRl9TSVpFKTsKKwl9CisJZGV2LT5pb21lbSA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpX2RldiwgMCksCisJCQkgICAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2lfZGV2LCAwKSk7CisJaWYgKCFkZXYtPmlvbWVtKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuZ2VuZV9pbml0KHN0cnVjdCBuZ2VuZSAqZGV2KQoreworCWludCBpOworCisJdGFza2xldF9pbml0KCZkZXYtPmV2ZW50X3Rhc2tsZXQsIGV2ZW50X3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKWRldik7CisKKwltZW1zZXRfaW8oZGV2LT5pb21lbSArIDB4YzAwMCwgMHgwMCwgMHgyMjApOworCW1lbXNldF9pbyhkZXYtPmlvbWVtICsgMHhjNDAwLCAweDAwLCAweDEwMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1NUUkVBTTsgaSsrKSB7CisJCWRldi0+Y2hhbm5lbFtpXS5kZXYgPSBkZXY7CisJCWRldi0+Y2hhbm5lbFtpXS5udW1iZXIgPSBpOworCX0KKworCWRldi0+ZndfaW50ZXJmYWNlX3ZlcnNpb24gPSAwOworCisJbmd3cml0ZWwoMCwgTkdFTkVfSU5UX0VOQUJMRSk7CisKKwlkZXYtPmljb3VudHMgPSBuZ3JlYWRsKE5HRU5FX0lOVF9DT1VOVFMpOworCisJZGV2LT5kZXZpY2VfdmVyc2lvbiA9IG5ncmVhZGwoREVWX1ZFUikgJiAweDBmOworCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUgIjogRGV2aWNlIHZlcnNpb24gJWRcbiIsCisJICAgICAgIGRldi0+ZGV2aWNlX3ZlcnNpb24pOworfQorCitzdGF0aWMgaW50IG5nZW5lX2xvYWRfZmlybShzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwl1MzIgc2l6ZTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKKwl1OCAqbmdlbmVfZnc7CisJY2hhciAqZndfbmFtZTsKKwlpbnQgZXJyLCB2ZXJzaW9uOworCisJdmVyc2lvbiA9IGRldi0+Y2FyZF9pbmZvLT5md192ZXJzaW9uOworCisJc3dpdGNoICh2ZXJzaW9uKSB7CisJZGVmYXVsdDoKKwljYXNlIDE1OgorCQl2ZXJzaW9uID0gMTU7CisJCXNpemUgPSAyMzQ2NjsKKwkJZndfbmFtZSA9ICJuZ2VuZV8xNS5mdyI7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXNpemUgPSAyMzQ5ODsKKwkJZndfbmFtZSA9ICJuZ2VuZV8xNi5mdyI7CisJCWJyZWFrOworCWNhc2UgMTc6CisJCXNpemUgPSAyNDQ0NjsKKwkJZndfbmFtZSA9ICJuZ2VuZV8xNy5mdyI7CisJCWJyZWFrOworCX0KKworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgJmRldi0+cGNpX2Rldi0+ZGV2KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FCisJCQkiOiBDb3VsZCBub3QgbG9hZCBmaXJtd2FyZSBmaWxlICVzLlxuIiwgZndfbmFtZSk7CisJCXByaW50ayhLRVJOX0lORk8gREVWSUNFX05BTUUKKwkJCSI6IENvcHkgJXMgdG8geW91ciBob3RwbHVnIGRpcmVjdG9yeSFcbiIsIGZ3X25hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChzaXplICE9IGZ3LT5zaXplKSB7CisJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRQorCQkJIjogRmlybXdhcmUgJXMgaGFzIGludmFsaWQgc2l6ZSEiLCBmd19uYW1lKTsKKwkJZXJyID0gLTE7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRQorCQkJIjogTG9hZGluZyBmaXJtd2FyZSBmaWxlICVzLlxuIiwgZndfbmFtZSk7CisJCW5nZW5lX2Z3ID0gKHU4ICopIGZ3LT5kYXRhOworCQllcnIgPSBuZ2VuZV9jb21tYW5kX2xvYWRfZmlybXdhcmUoZGV2LCBuZ2VuZV9mdywgc2l6ZSk7CisJfQorCisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBuZ2VuZV9zdG9wKHN0cnVjdCBuZ2VuZSAqZGV2KQoreworCWRvd24oJmRldi0+Y21kX211dGV4KTsKKwlpMmNfZGVsX2FkYXB0ZXIoJihkZXYtPmNoYW5uZWxbMF0uaTJjX2FkYXB0ZXIpKTsKKwlpMmNfZGVsX2FkYXB0ZXIoJihkZXYtPmNoYW5uZWxbMV0uaTJjX2FkYXB0ZXIpKTsKKwluZ3dyaXRlbCgwLCBOR0VORV9JTlRfRU5BQkxFKTsKKwluZ3dyaXRlbCgwLCBOR0VORV9DT01NQU5EKTsKKwluZ3dyaXRlbCgwLCBOR0VORV9DT01NQU5EX0hJKTsKKwluZ3dyaXRlbCgwLCBOR0VORV9TVEFUVVMpOworCW5nd3JpdGVsKDAsIE5HRU5FX1NUQVRVU19ISSk7CisJbmd3cml0ZWwoMCwgTkdFTkVfRVZFTlQpOworCW5nd3JpdGVsKDAsIE5HRU5FX0VWRU5UX0hJKTsKKwlmcmVlX2lycShkZXYtPnBjaV9kZXYtPmlycSwgZGV2KTsKK30KKworc3RhdGljIGludCBuZ2VuZV9zdGFydChzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwlpbnQgc3RhdDsKKwlpbnQgaTsKKworCXBjaV9zZXRfbWFzdGVyKGRldi0+cGNpX2Rldik7CisJbmdlbmVfaW5pdChkZXYpOworCisJc3RhdCA9IHJlcXVlc3RfaXJxKGRldi0+cGNpX2Rldi0+aXJxLCBpcnFfaGFuZGxlciwKKwkJCSAgIElSUUZfU0hBUkVELCAibkdlbmUiLAorCQkJICAgKHZvaWQgKilkZXYpOworCWlmIChzdGF0IDwgMCkKKwkJcmV0dXJuIHN0YXQ7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPmNtZF93cSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT50eF93cSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5yeF93cSk7CisJc2VtYV9pbml0KCZkZXYtPmNtZF9tdXRleCwgMSk7CisJc2VtYV9pbml0KCZkZXYtPnN0cmVhbV9tdXRleCwgMSk7CisJc2VtYV9pbml0KCZkZXYtPnBsbF9tdXRleCwgMSk7CisJc2VtYV9pbml0KCZkZXYtPmkyY19zd2l0Y2hfbXV0ZXgsIDEpOworCXNwaW5fbG9ja19pbml0KCZkZXYtPmNtZF9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1NUUkVBTTsgaSsrKQorCQlzcGluX2xvY2tfaW5pdCgmZGV2LT5jaGFubmVsW2ldLnN0YXRlX2xvY2spOworCW5nd3JpdGVsKDEsIFRJTUVTVEFNUFMpOworCisJbmd3cml0ZWwoMSwgTkdFTkVfSU5UX0VOQUJMRSk7CisKKwlzdGF0ID0gbmdlbmVfbG9hZF9maXJtKGRldik7CisJaWYgKHN0YXQgPCAwKQorCQlnb3RvIGZhaWw7CisKKwlzdGF0ID0gbmdlbmVfaTJjX2luaXQoZGV2LCAwKTsKKwlpZiAoc3RhdCA8IDApCisJCWdvdG8gZmFpbDsKKworCXN0YXQgPSBuZ2VuZV9pMmNfaW5pdChkZXYsIDEpOworCWlmIChzdGF0IDwgMCkKKwkJZ290byBmYWlsOworCisJaWYgKGRldi0+Y2FyZF9pbmZvLT5md192ZXJzaW9uID09IDE3KSB7CisJCXU4IHRzaW40X2NvbmZpZ1s2XSA9IHsKKwkJCTMwNzIgLyA2NCwgMzA3MiAvIDY0LCAwLCAzMDcyIC8gNjQsIDMwNzIgLyA2NCwgMH07CisJCXU4IGRlZmF1bHRfY29uZmlnWzZdID0geworCQkJNDA5NiAvIDY0LCA0MDk2IC8gNjQsIDAsIDIwNDggLyA2NCwgMjA0OCAvIDY0LCAwfTsKKwkJdTggKmJjb25mID0gZGVmYXVsdF9jb25maWc7CisKKwkJaWYgKGRldi0+Y2FyZF9pbmZvLT5pb190eXBlWzNdID09IE5HRU5FX0lPX1RTSU4pCisJCQliY29uZiA9IHRzaW40X2NvbmZpZzsKKwkJZHByaW50ayhLRVJOX0RFQlVHIERFVklDRV9OQU1FICI6IEZXIDE3IGJ1ZmZlciBjb25maWdcbiIpOworCQlzdGF0ID0gbmdlbmVfY29tbWFuZF9jb25maWdfZnJlZV9idWYoZGV2LCBiY29uZik7CisJfSBlbHNlIHsKKwkJaW50IGJjb25mID0gQlVGRkVSX0NPTkZJR180NDIyOworCQlpZiAoZGV2LT5jYXJkX2luZm8tPmlvX3R5cGVbM10gPT0gTkdFTkVfSU9fVFNJTikKKwkJCWJjb25mID0gQlVGRkVSX0NPTkZJR18zMzMzOworCQlzdGF0ID0gbmdlbmVfY29tbWFuZF9jb25maWdfYnVmKGRldiwgYmNvbmYpOworCX0KKwlyZXR1cm4gc3RhdDsKK2ZhaWw6CisJbmd3cml0ZWwoMCwgTkdFTkVfSU5UX0VOQUJMRSk7CisJZnJlZV9pcnEoZGV2LT5wY2lfZGV2LT5pcnEsIGRldik7CisJcmV0dXJuIHN0YXQ7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFN3aXRjaCBjb250cm9sIChJMkMgZ2F0ZXMsIGV0Yy4pICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZW1vZC90dW5lciBhdHRhY2htZW50ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHR1bmVyX2F0dGFjaF9zdHY2MTEwKHN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuKQoreworCXN0cnVjdCBzdHYwOTB4X2NvbmZpZyAqZmVjb25mID0gKHN0cnVjdCBzdHYwOTB4X2NvbmZpZyAqKQorCQljaGFuLT5kZXYtPmNhcmRfaW5mby0+ZmVfY29uZmlnW2NoYW4tPm51bWJlcl07CisJc3RydWN0IHN0djYxMTB4X2NvbmZpZyAqdHVuZXJjb25mID0gKHN0cnVjdCBzdHY2MTEweF9jb25maWcgKikKKwkJY2hhbi0+ZGV2LT5jYXJkX2luZm8tPnR1bmVyX2NvbmZpZ1tjaGFuLT5udW1iZXJdOworCXN0cnVjdCBzdHY2MTEweF9kZXZjdGwgKmN0bDsKKworCWN0bCA9IGR2Yl9hdHRhY2goc3R2NjExMHhfYXR0YWNoLCBjaGFuLT5mZSwgdHVuZXJjb25mLAorCQkJICZjaGFuLT5pMmNfYWRhcHRlcik7CisJaWYgKGN0bCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUglERVZJQ0VfTkFNRSAiOiBObyBTVFY2MTEwWCBmb3VuZCFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlmZWNvbmYtPnR1bmVyX2luaXQgICAgICAgICAgPSBjdGwtPnR1bmVyX2luaXQ7CisJZmVjb25mLT50dW5lcl9zZXRfbW9kZSAgICAgID0gY3RsLT50dW5lcl9zZXRfbW9kZTsKKwlmZWNvbmYtPnR1bmVyX3NldF9mcmVxdWVuY3kgPSBjdGwtPnR1bmVyX3NldF9mcmVxdWVuY3k7CisJZmVjb25mLT50dW5lcl9nZXRfZnJlcXVlbmN5ID0gY3RsLT50dW5lcl9nZXRfZnJlcXVlbmN5OworCWZlY29uZi0+dHVuZXJfc2V0X2JhbmR3aWR0aCA9IGN0bC0+dHVuZXJfc2V0X2JhbmR3aWR0aDsKKwlmZWNvbmYtPnR1bmVyX2dldF9iYW5kd2lkdGggPSBjdGwtPnR1bmVyX2dldF9iYW5kd2lkdGg7CisJZmVjb25mLT50dW5lcl9zZXRfYmJnYWluICAgID0gY3RsLT50dW5lcl9zZXRfYmJnYWluOworCWZlY29uZi0+dHVuZXJfZ2V0X2JiZ2FpbiAgICA9IGN0bC0+dHVuZXJfZ2V0X2JiZ2FpbjsKKwlmZWNvbmYtPnR1bmVyX3NldF9yZWZjbGsgICAgPSBjdGwtPnR1bmVyX3NldF9yZWZjbGs7CisJZmVjb25mLT50dW5lcl9nZXRfc3RhdHVzICAgID0gY3RsLT50dW5lcl9nZXRfc3RhdHVzOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBkZW1vZF9hdHRhY2hfc3R2MDkwMChzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3Qgc3R2MDkweF9jb25maWcgKmZlY29uZiA9IChzdHJ1Y3Qgc3R2MDkweF9jb25maWcgKikKKwkJY2hhbi0+ZGV2LT5jYXJkX2luZm8tPmZlX2NvbmZpZ1tjaGFuLT5udW1iZXJdOworCisJY2hhbi0+ZmUgPSBkdmJfYXR0YWNoKHN0djA5MHhfYXR0YWNoLAorCQkJZmVjb25mLAorCQkJJmNoYW4tPmkyY19hZGFwdGVyLAorCQkJY2hhbi0+bnVtYmVyID09IDAgPyBTVFYwOTB4X0RFTU9EVUxBVE9SXzAgOgorCQkJCQkgICAgU1RWMDkweF9ERU1PRFVMQVRPUl8xKTsKKwlpZiAoY2hhbi0+ZmUgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIJREVWSUNFX05BTUUgIjogTm8gU1RWMDkwMCBmb3VuZCFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIWR2Yl9hdHRhY2gobG5iaDI0X2F0dGFjaCwgY2hhbi0+ZmUsICZjaGFuLT5pMmNfYWRhcHRlciwgMCwKKwkJCTAsIGNoYW4tPmRldi0+Y2FyZF9pbmZvLT5sbmJbY2hhbi0+bnVtYmVyXSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICI6IE5vIExOQkgyNCBmb3VuZCFcbiIpOworCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGNoYW4tPmZlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgcmVsZWFzZV9jaGFubmVsKHN0cnVjdCBuZ2VuZV9jaGFubmVsICpjaGFuKQoreworCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRlbXV4ID0gJmNoYW4tPmRlbXV4OworCXN0cnVjdCBuZ2VuZSAqZGV2ID0gY2hhbi0+ZGV2OworCXN0cnVjdCBuZ2VuZV9pbmZvICpuaSA9IGRldi0+Y2FyZF9pbmZvOworCWludCBpbyA9IG5pLT5pb190eXBlW2NoYW4tPm51bWJlcl07CisKKyNpZmRlZiBDT01NQU5EX1RJTUVPVVRfV09SS0FST1VORAorCWlmIChjaGFuLT5ydW5uaW5nKQorCQlzZXRfdHJhbnNmZXIoY2hhbiwgMCk7CisjZW5kaWYKKworCXRhc2tsZXRfa2lsbCgmY2hhbi0+ZGVtdXhfdGFza2xldCk7CisKKwlpZiAoaW8gJiAoTkdFTkVfSU9fVFNJTiB8IE5HRU5FX0lPX1RTT1VUKSkgeworCQlpZiAoY2hhbi0+ZmUpIHsKKwkJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGNoYW4tPmZlKTsKKwkJCWR2Yl9mcm9udGVuZF9kZXRhY2goY2hhbi0+ZmUpOworCQkJY2hhbi0+ZmUgPSAwOworCQl9CisJCWR2YmRlbXV4LT5kbXguY2xvc2UoJmR2YmRlbXV4LT5kbXgpOworCQlkdmJkZW11eC0+ZG14LnJlbW92ZV9mcm9udGVuZCgmZHZiZGVtdXgtPmRteCwKKwkJCQkJICAgICAgJmNoYW4tPmh3X2Zyb250ZW5kKTsKKwkJZHZiZGVtdXgtPmRteC5yZW1vdmVfZnJvbnRlbmQoJmR2YmRlbXV4LT5kbXgsCisJCQkJCSAgICAgICZjaGFuLT5tZW1fZnJvbnRlbmQpOworCQlkdmJfZG14ZGV2X3JlbGVhc2UoJmNoYW4tPmRteGRldik7CisJCWR2Yl9kbXhfcmVsZWFzZSgmY2hhbi0+ZGVtdXgpOworCisJCWlmIChjaGFuLT5udW1iZXIgPT0gMCB8fCAhb25lX2FkYXB0ZXIpCisJCQlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZkZXYtPmFkYXB0ZXJbY2hhbi0+bnVtYmVyXSk7CisJfQorfQorCitzdGF0aWMgaW50IGluaXRfY2hhbm5lbChzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbikKK3sKKwlpbnQgcmV0ID0gMCwgbnIgPSBjaGFuLT5udW1iZXI7CisJc3RydWN0IGR2Yl9hZGFwdGVyICphZGFwdGVyID0gTlVMTDsKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eCA9ICZjaGFuLT5kZW11eDsKKwlzdHJ1Y3QgbmdlbmUgKmRldiA9IGNoYW4tPmRldjsKKwlzdHJ1Y3QgbmdlbmVfaW5mbyAqbmkgPSBkZXYtPmNhcmRfaW5mbzsKKwlpbnQgaW8gPSBuaS0+aW9fdHlwZVtucl07CisKKwl0YXNrbGV0X2luaXQoJmNoYW4tPmRlbXV4X3Rhc2tsZXQsIGRlbXV4X3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKWNoYW4pOworCWNoYW4tPnVzZXJzID0gMDsKKwljaGFuLT50eXBlID0gaW87CisJY2hhbi0+bW9kZSA9IGNoYW4tPnR5cGU7CS8qIGZvciBub3cgb25seSBvbmUgbW9kZSAqLworCisJaWYgKGlvICYgKE5HRU5FX0lPX1RTSU4gfCBOR0VORV9JT19UU09VVCkpIHsKKwkJaWYgKG5yID49IFNUUkVBTV9BVURJT0lOMSkKKwkJCWNoYW4tPkRhdGFGb3JtYXRGbGFncyA9IERGX1NXQVAzMjsKKwkJaWYgKG5yID09IDAgfHwgIW9uZV9hZGFwdGVyKSB7CisJCQlhZGFwdGVyID0gJmRldi0+YWRhcHRlcltucl07CisJCQlyZXQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcihhZGFwdGVyLCAibkdlbmUiLAorCQkJCQkJICAgVEhJU19NT0RVTEUsCisJCQkJCQkgICAmY2hhbi0+ZGV2LT5wY2lfZGV2LT5kZXYsCisJCQkJCQkgICBhZGFwdGVyX25yKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0gZWxzZSB7CisJCQlhZGFwdGVyID0gJmRldi0+YWRhcHRlclswXTsKKwkJfQorCisJCXJldCA9IG15X2R2Yl9kbXhfdHNfY2FyZF9pbml0KGR2YmRlbXV4LCAiU1cgZGVtdXgiLAorCQkJCQkgICAgICBuZ2VuZV9zdGFydF9mZWVkLAorCQkJCQkgICAgICBuZ2VuZV9zdG9wX2ZlZWQsIGNoYW4pOworCQlyZXQgPSBteV9kdmJfZG14ZGV2X3RzX2NhcmRfaW5pdCgmY2hhbi0+ZG14ZGV2LCAmY2hhbi0+ZGVtdXgsCisJCQkJCQkgJmNoYW4tPmh3X2Zyb250ZW5kLAorCQkJCQkJICZjaGFuLT5tZW1fZnJvbnRlbmQsIGFkYXB0ZXIpOworCX0KKworCWlmIChpbyAmIE5HRU5FX0lPX1RTSU4pIHsKKwkJY2hhbi0+ZmUgPSBOVUxMOworCQlpZiAobmktPmRlbW9kX2F0dGFjaFtucl0pCisJCQluaS0+ZGVtb2RfYXR0YWNoW25yXShjaGFuKTsKKwkJaWYgKGNoYW4tPmZlKSB7CisJCQlpZiAoZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKGFkYXB0ZXIsIGNoYW4tPmZlKSA8IDApIHsKKwkJCQlpZiAoY2hhbi0+ZmUtPm9wcy5yZWxlYXNlKQorCQkJCQljaGFuLT5mZS0+b3BzLnJlbGVhc2UoY2hhbi0+ZmUpOworCQkJCWNoYW4tPmZlID0gTlVMTDsKKwkJCX0KKwkJfQorCQlpZiAoY2hhbi0+ZmUgJiYgbmktPnR1bmVyX2F0dGFjaFtucl0pCisJCQlpZiAobmktPnR1bmVyX2F0dGFjaFtucl0gKGNoYW4pIDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRQorCQkJCSAgICAgICAiOiBUdW5lciBhdHRhY2ggZmFpbGVkIG9uIGNoYW5uZWwgJWQhXG4iLAorCQkJCSAgICAgICBucik7CisJCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9jaGFubmVscyhzdHJ1Y3QgbmdlbmUgKmRldikKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfU1RSRUFNOyBpKyspIHsKKwkJaWYgKGluaXRfY2hhbm5lbCgmZGV2LT5jaGFubmVsW2ldKSA8IDApIHsKKwkJCWZvciAoaiA9IGkgLSAxOyBqID49IDA7IGotLSkKKwkJCQlyZWxlYXNlX2NoYW5uZWwoJmRldi0+Y2hhbm5lbFtqXSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogZGV2aWNlIHByb2JlL3JlbW92ZSBjYWxscyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgX19kZXZleGl0IG5nZW5lX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmdlbmUgKmRldiA9IChzdHJ1Y3QgbmdlbmUgKilwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IGk7CisKKwl0YXNrbGV0X2tpbGwoJmRldi0+ZXZlbnRfdGFza2xldCk7CisJZm9yIChpID0gTUFYX1NUUkVBTSAtIDE7IGkgPj0gMDsgaS0tKQorCQlyZWxlYXNlX2NoYW5uZWwoJmRldi0+Y2hhbm5lbFtpXSk7CisJbmdlbmVfc3RvcChkZXYpOworCW5nZW5lX3JlbGVhc2VfYnVmZmVycyhkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCAwKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG5nZW5lX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAorCQkJCSBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IG5nZW5lICpkZXY7CisJaW50IHN0YXQgPSAwOworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXYgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgbmdlbmUpKTsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJc3RhdCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDA7CisJfQorCW1lbXNldChkZXYsIDAsIHNpemVvZihzdHJ1Y3QgbmdlbmUpKTsKKworCWRldi0+cGNpX2RldiA9IHBjaV9kZXY7CisJZGV2LT5jYXJkX2luZm8gPSAoc3RydWN0IG5nZW5lX2luZm8gKilpZC0+ZHJpdmVyX2RhdGE7CisJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBGb3VuZCAlc1xuIiwgZGV2LT5jYXJkX2luZm8tPm5hbWUpOworCisJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIGRldik7CisKKwkvKiBBbGxvYyBidWZmZXJzIGFuZCBzdGFydCBuR2VuZSAqLworCXN0YXQgPSBuZ2VuZV9nZXRfYnVmZmVycyhkZXYpOworCWlmIChzdGF0IDwgMCkKKwkJZ290byBmYWlsMTsKKwlzdGF0ID0gbmdlbmVfc3RhcnQoZGV2KTsKKwlpZiAoc3RhdCA8IDApCisJCWdvdG8gZmFpbDE7CisKKwlkZXYtPmkyY19jdXJyZW50X2J1cyA9IC0xOworCisJLyogUmVnaXN0ZXIgRFZCIGFkYXB0ZXJzIGFuZCBkZXZpY2VzIGZvciBib3RoIGNoYW5uZWxzICovCisJaWYgKGluaXRfY2hhbm5lbHMoZGV2KSA8IDApCisJCWdvdG8gZmFpbDI7CisKKwlyZXR1cm4gMDsKKworZmFpbDI6CisJbmdlbmVfc3RvcChkZXYpOworZmFpbDE6CisJbmdlbmVfcmVsZWFzZV9idWZmZXJzKGRldik7CitmYWlsMDoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2Rldik7CisJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIDApOworCXJldHVybiBzdGF0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENhcmQgY29uZmlncyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3Qgc3R2MDkweF9jb25maWcgZmVfY2luZVMyID0geworCS5kZXZpY2UgICAgICAgICA9IFNUVjA5MDAsCisJLmRlbW9kX21vZGUgICAgID0gU1RWMDkweF9EVUFMLAorCS5jbGtfbW9kZSAgICAgICA9IFNUVjA5MHhfQ0xLX0VYVCwKKworCS54dGFsICAgICAgICAgICA9IDI3MDAwMDAwLAorCS5hZGRyZXNzICAgICAgICA9IDB4NjgsCisKKwkudHMxX21vZGUgICAgICAgPSBTVFYwOTB4X1RTTU9ERV9TRVJJQUxfUFVOQ1RVUkVELAorCS50czJfbW9kZSAgICAgICA9IFNUVjA5MHhfVFNNT0RFX1NFUklBTF9QVU5DVFVSRUQsCisKKwkucmVwZWF0ZXJfbGV2ZWwgPSBTVFYwOTB4X1JQVExFVkVMXzE2LAorCisJLmFkYzFfcmFuZ2UJPSBTVFYwOTB4X0FEQ18xVnBwLAorCS5hZGMyX3JhbmdlCT0gU1RWMDkweF9BRENfMVZwcCwKKworCS5kaXNlcWNfZW52ZWxvcGVfbW9kZSA9IHRydWUsCit9OworCitzdGF0aWMgc3RydWN0IHN0djYxMTB4X2NvbmZpZyB0dW5lcl9jaW5lUzJfMCA9IHsKKwkuYWRkcgk9IDB4NjAsCisJLnJlZmNsawk9IDI3MDAwMDAwLAorCS5jbGtfZGl2ID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3R2NjExMHhfY29uZmlnIHR1bmVyX2NpbmVTMl8xID0geworCS5hZGRyCT0gMHg2MywKKwkucmVmY2xrCT0gMjcwMDAwMDAsCisJLmNsa19kaXYgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBuZ2VuZV9pbmZvIG5nZW5lX2luZm9fY2luZVMyID0geworCS50eXBlCQk9IE5HRU5FX1NJREVXSU5ERVIsCisJLm5hbWUJCT0gIkxpbnV4NE1lZGlhIGNpbmVTMiBEVkItUzIgVHdpbiBUdW5lciIsCisJLmlvX3R5cGUJPSB7TkdFTkVfSU9fVFNJTiwgTkdFTkVfSU9fVFNJTn0sCisJLmRlbW9kX2F0dGFjaAk9IHtkZW1vZF9hdHRhY2hfc3R2MDkwMCwgZGVtb2RfYXR0YWNoX3N0djA5MDB9LAorCS50dW5lcl9hdHRhY2gJPSB7dHVuZXJfYXR0YWNoX3N0djYxMTAsIHR1bmVyX2F0dGFjaF9zdHY2MTEwfSwKKwkuZmVfY29uZmlnCT0geyZmZV9jaW5lUzIsICZmZV9jaW5lUzJ9LAorCS50dW5lcl9jb25maWcJPSB7JnR1bmVyX2NpbmVTMl8wLCAmdHVuZXJfY2luZVMyXzF9LAorCS5sbmIJCT0gezB4MGIsIDB4MDh9LAorCS50c2YJCT0gezMsIDN9LAorCS5md192ZXJzaW9uCT0gMTUsCit9OworCitzdGF0aWMgc3RydWN0IG5nZW5lX2luZm8gbmdlbmVfaW5mb19zYXRpeHMyID0geworCS50eXBlCQk9IE5HRU5FX1NJREVXSU5ERVIsCisJLm5hbWUJCT0gIk15c3RpcXVlIFNhVGlYLVMyIER1YWwiLAorCS5pb190eXBlCT0ge05HRU5FX0lPX1RTSU4sIE5HRU5FX0lPX1RTSU59LAorCS5kZW1vZF9hdHRhY2gJPSB7ZGVtb2RfYXR0YWNoX3N0djA5MDAsIGRlbW9kX2F0dGFjaF9zdHYwOTAwfSwKKwkudHVuZXJfYXR0YWNoCT0ge3R1bmVyX2F0dGFjaF9zdHY2MTEwLCB0dW5lcl9hdHRhY2hfc3R2NjExMH0sCisJLmZlX2NvbmZpZwk9IHsmZmVfY2luZVMyLCAmZmVfY2luZVMyfSwKKwkudHVuZXJfY29uZmlnCT0geyZ0dW5lcl9jaW5lUzJfMCwgJnR1bmVyX2NpbmVTMl8xfSwKKwkubG5iCQk9IHsweDBiLCAweDA4fSwKKwkudHNmCQk9IHszLCAzfSwKKwkuZndfdmVyc2lvbgk9IDE1LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFBDSSBTdWJzeXN0ZW0gSUQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTkdFTkVfSUQoX3N1YnZlbmQsIF9zdWJkZXYsIF9kcml2ZXJkYXRhKSB7IFwKKwkudmVuZG9yID0gTkdFTkVfVklELCAuZGV2aWNlID0gTkdFTkVfUElELCBcCisJLnN1YnZlbmRvciA9IF9zdWJ2ZW5kLCAuc3ViZGV2aWNlID0gX3N1YmRldiwgXAorCS5kcml2ZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSAmX2RyaXZlcmRhdGEgfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5nZW5lX2lkX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CisJTkdFTkVfSUQoMHgxOGMzLCAweGFiYzMsIG5nZW5lX2luZm9fY2luZVMyKSwKKwlOR0VORV9JRCgweDE4YzMsIDB4YWJjNCwgbmdlbmVfaW5mb19jaW5lUzIpLAorCU5HRU5FX0lEKDB4MThjMywgMHhkYjAxLCBuZ2VuZV9pbmZvX3NhdGl4czIpLAorCXswfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuZ2VuZV9pZF90YmwpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEluaXQvRXhpdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IG5nZW5lX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgICAgZW51bSBwY2lfY2hhbm5lbF9zdGF0ZSBzdGF0ZSkKK3sKKwlwcmludGsoS0VSTl9FUlIgREVWSUNFX05BTUUgIjogUENJIGVycm9yXG4iKTsKKwlpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKQorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwlpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fZnJvemVuKQorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKKwlyZXR1cm4gUENJX0VSU19SRVNVTFRfQ0FOX1JFQ09WRVI7Cit9CisKK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IG5nZW5lX2xpbmtfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlwcmludGsoS0VSTl9JTkZPIERFVklDRV9OQU1FICI6IGxpbmsgcmVzZXRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBuZ2VuZV9zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiBzbG90IHJlc2V0XG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbmdlbmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcHJpbnRrKEtFUk5fSU5GTyBERVZJQ0VfTkFNRSAiOiByZXN1bWVcbiIpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBuZ2VuZV9lcnJvcnMgPSB7CisJLmVycm9yX2RldGVjdGVkID0gbmdlbmVfZXJyb3JfZGV0ZWN0ZWQsCisJLmxpbmtfcmVzZXQgPSBuZ2VuZV9saW5rX3Jlc2V0LAorCS5zbG90X3Jlc2V0ID0gbmdlbmVfc2xvdF9yZXNldCwKKwkucmVzdW1lID0gbmdlbmVfcmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5nZW5lX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgICAgICAgID0gIm5nZW5lIiwKKwkuaWRfdGFibGUgICAgPSBuZ2VuZV9pZF90YmwsCisJLnByb2JlICAgICAgID0gbmdlbmVfcHJvYmUsCisJLnJlbW92ZSAgICAgID0gX19kZXZleGl0X3AobmdlbmVfcmVtb3ZlKSwKKwkuZXJyX2hhbmRsZXIgPSAmbmdlbmVfZXJyb3JzLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgbW9kdWxlX2luaXRfbmdlbmUodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJuR2VuZSBQQ0lFIGJyaWRnZSBkcml2ZXIsIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IE1pY3JvbmFzXG4iKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbmdlbmVfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyBfX2V4aXQgdm9pZCBtb2R1bGVfZXhpdF9uZ2VuZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbmdlbmVfcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1vZHVsZV9pbml0X25nZW5lKTsKK21vZHVsZV9leGl0KG1vZHVsZV9leGl0X25nZW5lKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJuR2VuZSIpOworTU9EVUxFX0FVVEhPUigiTWljcm9uYXMsIFJhbHBoIE1ldHpsZXIsIE1hbmZyZWQgVm9lbGtlbCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvbmdlbmUuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdlYjI5OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLmgKQEAgLTAsMCArMSw4NTkgQEAKKy8qCisgKiBuZ2VuZS5oOiBuR2VuZSBQQ0llIGJyaWRnZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBNaWNyb25hcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgb25seSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKiBPciwgcG9pbnQgeW91ciBicm93c2VyIHRvIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICovCisKKyNpZm5kZWYgX05HRU5FX0hfCisjZGVmaW5lIF9OR0VORV9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorCisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisKKyNpbmNsdWRlICJkbXhkZXYuaCIKKyNpbmNsdWRlICJkdmJkZXYuaCIKKyNpbmNsdWRlICJkdmJfZGVtdXguaCIKKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKyNpbmNsdWRlICJkdmJfcmluZ2J1ZmZlci5oIgorCisjZGVmaW5lIE5HRU5FX1ZJRCAgICAgICAweDE4YzMKKyNkZWZpbmUgTkdFTkVfUElEICAgICAgIDB4MDcyMAorCisjaWZuZGVmIFZJREVPX0NBUF9WQzEKKyNkZWZpbmUgVklERU9fQ0FQX0FWQyAgIDEyOAorI2RlZmluZSBWSURFT19DQVBfSDI2NCAgMTI4CisjZGVmaW5lIFZJREVPX0NBUF9WQzEgICAyNTYKKyNkZWZpbmUgVklERU9fQ0FQX1dNVjkgIDI1NgorI2RlZmluZSBWSURFT19DQVBfTVBFRzQgNTEyCisjZW5kaWYKKworZW51bSBTVFJFQU0geworCVNUUkVBTV9WSURFT0lOMSA9IDAsICAgICAgICAvKiBJVFU2NTYgb3IgVFMgSW5wdXQgKi8KKwlTVFJFQU1fVklERU9JTjIsCisJU1RSRUFNX0FVRElPSU4xLCAgICAgICAgICAgIC8qIEkyUyBvciBTUEkgSW5wdXQgKi8KKwlTVFJFQU1fQVVESU9JTjIsCisJU1RSRUFNX0FVRElPT1VULAorCU1BWF9TVFJFQU0KK307CisKK2VudW0gU01PREVfQklUUyB7CisJU01PREVfQVVESU9fU1BESUYgPSAweDIwLAorCVNNT0RFX0FWU1lOQyA9IDB4MTAsCisJU01PREVfVFJBTlNQT1JUX1NUUkVBTSA9IDB4MDgsCisJU01PREVfQVVESU9fQ0FQVFVSRSA9IDB4MDQsCisJU01PREVfVkJJX0NBUFRVUkUgPSAweDAyLAorCVNNT0RFX1ZJREVPX0NBUFRVUkUgPSAweDAxCit9OworCitlbnVtIFNUUkVBTV9GTEFHX0JJVFMgeworCVNGTEFHX0NIUk9NQV9GT1JNQVRfMkNPTVAgID0gMHgwMSwgLyogQ2hyb21hIEZvcm1hdCA6IDIncyBjb21wbGVtZW50ICovCisJU0ZMQUdfQ0hST01BX0ZPUk1BVF9PRkZTRVQgPSAweDAwLCAvKiBDaHJvbWEgRm9ybWF0IDogQmluYXJ5IG9mZnNldCAqLworCVNGTEFHX09SREVSX0xVTUFfQ0hST01BICAgID0gMHgwMiwgLyogQnl0ZSBvcmRlcjogWSxDYixZLENyICovCisJU0ZMQUdfT1JERVJfQ0hST01BX0xVTUEgICAgPSAweDAwLCAvKiBCeXRlIG9yZGVyOiBDYixZLENyLFkgKi8KKwlTRkxBR19DT0xPUkJBUiAgICAgICAgICAgICA9IDB4MDQsIC8qIFNlbGVjdCBjb2xvcmJhciAqLworfTsKKworI2RlZmluZSBQUk9HUkFNX1JPTSAgICAgMHgwMDAwCisjZGVmaW5lIFBST0dSQU1fU1JBTSAgICAweDEwMDAKKyNkZWZpbmUgUEVSSVBIRVJBTFMwICAgIDB4ODAwMAorI2RlZmluZSBQRVJJUEhFUkFMUzEgICAgMHg5MDAwCisjZGVmaW5lIFNIQVJFRF9CVUZGRVIgICAweEMwMDAKKworI2RlZmluZSBIT1NUX1RPX05HRU5FICAgIChTSEFSRURfQlVGRkVSKzB4MDAwMCkKKyNkZWZpbmUgTkdFTkVfVE9fSE9TVCAgICAoU0hBUkVEX0JVRkZFUisweDAxMDApCisjZGVmaW5lIE5HRU5FX0NPTU1BTkQgICAgKFNIQVJFRF9CVUZGRVIrMHgwMjAwKQorI2RlZmluZSBOR0VORV9DT01NQU5EX0hJIChTSEFSRURfQlVGRkVSKzB4MDIwNCkKKyNkZWZpbmUgTkdFTkVfU1RBVFVTICAgICAoU0hBUkVEX0JVRkZFUisweDAyMDgpCisjZGVmaW5lIE5HRU5FX1NUQVRVU19ISSAgKFNIQVJFRF9CVUZGRVIrMHgwMjBDKQorI2RlZmluZSBOR0VORV9FVkVOVCAgICAgIChTSEFSRURfQlVGRkVSKzB4MDIxMCkKKyNkZWZpbmUgTkdFTkVfRVZFTlRfSEkgICAoU0hBUkVEX0JVRkZFUisweDAyMTQpCisjZGVmaW5lIFZBUklBQkxFUyAgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwMjEwKQorCisjZGVmaW5lIE5HRU5FX0lOVF9DT1VOVFMgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwMjYwKQorI2RlZmluZSBOR0VORV9JTlRfRU5BQkxFICAgICAgIChTSEFSRURfQlVGRkVSKzB4MDI2NCkKKyNkZWZpbmUgTkdFTkVfVkJJX0xJTkVfQ09VTlQgICAoU0hBUkVEX0JVRkZFUisweDAyNjgpCisKKyNkZWZpbmUgQlVGRkVSX0dQX1hNSVQgIChTSEFSRURfQlVGRkVSKzB4MDgwMCkKKyNkZWZpbmUgQlVGRkVSX0dQX1JFQ1YgIChTSEFSRURfQlVGRkVSKzB4MDkwMCkKKyNkZWZpbmUgRUVQUk9NX0FSRUEgICAgIChTSEFSRURfQlVGRkVSKzB4MEEwMCkKKworI2RlZmluZSBTR19WX0lOXzEgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwQTgwKQorI2RlZmluZSBTR19WQklfMSAgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwQjAwKQorI2RlZmluZSBTR19BX0lOXzEgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwQjgwKQorI2RlZmluZSBTR19WX0lOXzIgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwQzAwKQorI2RlZmluZSBTR19WQklfMiAgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwQzgwKQorI2RlZmluZSBTR19BX0lOXzIgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwRDAwKQorI2RlZmluZSBTR19WX09VVCAgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwRDgwKQorI2RlZmluZSBTR19BX09VVDIgICAgICAgKFNIQVJFRF9CVUZGRVIrMHgwRTAwKQorCisjZGVmaW5lIERBVEFfQV9JTl8xICAgICAoU0hBUkVEX0JVRkZFUisweDBFODApCisjZGVmaW5lIERBVEFfQV9JTl8yICAgICAoU0hBUkVEX0JVRkZFUisweDBGMDApCisjZGVmaW5lIERBVEFfQV9PVVQgICAgICAoU0hBUkVEX0JVRkZFUisweDBGODApCisjZGVmaW5lIERBVEFfVl9JTl8xICAgICAoU0hBUkVEX0JVRkZFUisweDEwMDApCisjZGVmaW5lIERBVEFfVl9JTl8yICAgICAoU0hBUkVEX0JVRkZFUisweDIwMDApCisjZGVmaW5lIERBVEFfVl9PVVQgICAgICAoU0hBUkVEX0JVRkZFUisweDMwMDApCisKKyNkZWZpbmUgREFUQV9GSUZPX0FSRUEgIChTSEFSRURfQlVGRkVSKzB4MTAwMCkKKworI2RlZmluZSBUSU1FU1RBTVBTICAgICAgMHhBMDAwCisjZGVmaW5lIFNDUkFUQ0hQQUQgICAgICAweEEwODAKKyNkZWZpbmUgRk9SQ0VfSU5UICAgICAgIDB4QTA4OAorI2RlZmluZSBGT1JDRV9OTUkgICAgICAgMHhBMDkwCisjZGVmaW5lIElOVF9TVEFUVVMgICAgICAweEEwQTAKKworI2RlZmluZSBERVZfVkVSICAgICAgICAgMHg5MDA0CisKKyNkZWZpbmUgRldfREVCVUdfREVGQVVMVCAoUFJPR1JBTV9TUkFNKzB4MDBGRikKKworc3RydWN0IFNHX0FERFIgeworCXU2NCBzdGFydDsKKwl1NjQgY3VycjsKKwl1MTYgY3Vycl9wdHI7CisJdTE2IGVsZW1lbnRzOworCXUzMiBwYWRbM107Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBTSEFSRURfTUVNT1JZIHsKKwkvKiBDMDAwICovCisJdTMyIEhvc3RUb05nZW5lWzY0XTsKKworCS8qIEMxMDAgKi8KKwl1MzIgTmdlbmVUb0hvc3RbNjRdOworCisJLyogQzIwMCAqLworCXU2NCBOZ2VuZUNvbW1hbmQ7CisJdTY0IE5nZW5lU3RhdHVzOworCXU2NCBOZ2VuZUV2ZW50OworCisJLyogQzIxMCAqLworCXU4IHBhZDFbMHhjMjYwIC0gMHhjMjE4XTsKKworCS8qIEMyNjAgKi8KKwl1MzIgSW50Q291bnRzOworCXUzMiBJbnRFbmFibGU7CisKKwkvKiBDMjY4ICovCisJdTggcGFkMlsweGQwMDAgLSAweGMyNjhdOworCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBCVUZGRVJfU1RSRUFNX1JFU1VMVFMgeworCXUzMiBDbG9jazsgICAgICAgICAgIC8qIFN0cmVhbSB0aW1lIGluIDEwMG5zIHVuaXRzICovCisJdTE2IFJlbWFpbmluZ0xpbmVzOyAgLyogUmVtYWluaW5nIGxpbmVzIGluIHRoaXMgZmllbGQuCisJCQkJMCBmb3IgY29tcGxldGUgZmllbGQgKi8KKwl1OCAgRmllbGRDb3VudDsgICAgICAvKiBWaWRlbyBmaWVsZCBudW1iZXIgKi8KKwl1OCAgRmxhZ3M7ICAgICAgICAgICAvKiBCaXQgNyA9IERvbmUsIEJpdCA2ID0gc2VlbiwgQml0IDUgPSBvdmVyZmxvdywKKwkJCQlCaXQgMCA9IEZpZWxkSUQgKi8KKwl1MTYgQmxvY2tDb3VudDsgICAgICAvKiBBdWRpbyBibG9jayBjb3VudCAodW51c2VkKSAqLworCXU4ICBSZXNlcnZlZFsyXTsKKwl1MzIgRFRPVXBkYXRlOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCB7CisJdTY0IEFkZHJlc3M7CisJdTMyIExlbmd0aDsKKwl1MzIgUmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBCVUZGRVJfSEVBREVSIHsKKwl1NjQgICAgTmV4dDsKKwlzdHJ1Y3QgQlVGRkVSX1NUUkVBTV9SRVNVTFRTIFNSOworCisJdTMyICAgIE51bWJlcl9vZl9lbnRyaWVzXzE7CisJdTMyICAgIFJlc2VydmVkNTsKKwl1NjQgICAgQWRkcmVzc19vZl9maXJzdF9lbnRyeV8xOworCisJdTMyICAgIE51bWJlcl9vZl9lbnRyaWVzXzI7CisJdTMyICAgIFJlc2VydmVkNzsKKwl1NjQgICAgQWRkcmVzc19vZl9maXJzdF9lbnRyeV8yOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRVZFTlRfQlVGRkVSIHsKKwl1MzIgICAgVGltZVN0YW1wOworCXU4ICAgICBHUElPU3RhdHVzOworCXU4ICAgICBVQVJUU3RhdHVzOworCXU4ICAgICBSWENoYXJhY3RlcjsKKwl1OCAgICAgRXZlbnRTdGF0dXM7CisJdTMyICAgIFJlc2VydmVkWzJdOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCisvKiBGaXJtd2FyZSBjb21tYW5kcy4gKi8KKworZW51bSBPUENPREVTIHsKKwlDTURfTk9QID0gMCwKKwlDTURfRldMT0FEX1BSRVBBUkUgID0gMHgwMSwKKwlDTURfRldMT0FEX0ZJTklTSCAgID0gMHgwMiwKKwlDTURfSTJDX1JFQUQgICAgICAgID0gMHgwMywKKwlDTURfSTJDX1dSSVRFICAgICAgID0gMHgwNCwKKworCUNNRF9JMkNfV1JJVEVfTk9TVE9QID0gMHgwNSwKKwlDTURfSTJDX0NPTlRJTlVFX1dSSVRFID0gMHgwNiwKKwlDTURfSTJDX0NPTlRJTlVFX1dSSVRFX05PU1RPUCA9IDB4MDcsCisKKwlDTURfREVCVUdfT1VUUFVUICAgID0gMHgwOSwKKworCUNNRF9DT05UUk9MICAgICAgICAgPSAweDEwLAorCUNNRF9DT05GSUdVUkVfQlVGRkVSID0gMHgxMSwKKwlDTURfQ09ORklHVVJFX0ZSRUVfQlVGRkVSID0gMHgxMiwKKworCUNNRF9TUElfUkVBRCAgICAgICAgPSAweDEzLAorCUNNRF9TUElfV1JJVEUgICAgICAgPSAweDE0LAorCisJQ01EX01FTV9SRUFEICAgICAgICA9IDB4MjAsCisJQ01EX01FTV9XUklURQkgICAgPSAweDIxLAorCUNNRF9TRlJfUkVBRAkgICAgPSAweDIyLAorCUNNRF9TRlJfV1JJVEUJICAgID0gMHgyMywKKwlDTURfSVJBTV9SRUFECSAgICA9IDB4MjQsCisJQ01EX0lSQU1fV1JJVEUJICAgID0gMHgyNSwKKwlDTURfU0VUX0dQSU9fUElOICAgID0gMHgyNiwKKwlDTURfU0VUX0dQSU9fSU5UICAgID0gMHgyNywKKwlDTURfQ09ORklHVVJFX1VBUlQgID0gMHgyOCwKKwlDTURfV1JJVEVfVUFSVCAgICAgID0gMHgyOSwKKwlNQVhfQ01ECit9OworCitlbnVtIFJFU1BPTlNFUyB7CisJT0sgPSAwLAorCUVSUk9SID0gMQorfTsKKworc3RydWN0IEZXX0hFQURFUiB7CisJdTggT3Bjb2RlOworCXU4IExlbmd0aDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX0kyQ19XUklURSB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggRGV2aWNlOworCXU4IERhdGFbMjUwXTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX0kyQ19DT05USU5VRV9XUklURSB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggRGF0YVsyNTBdOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfSTJDX1JFQUQgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4IERldmljZTsKKwl1OCBEYXRhWzI1Ml07ICAgIC8qIGZvbGxvd2VkIGJ5IHR3byBieXRlcyBvZiByZWFkIGRhdGEgY291bnQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX1NQSV9XUklURSB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggTW9kZVNlbGVjdDsKKwl1OCBEYXRhWzI1MF07Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19TUElfUkVBRCB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggTW9kZVNlbGVjdDsKKwl1OCBEYXRhWzI1Ml07ICAgIC8qIGZvbGxvd2VkIGJ5IHR3byBieXRlcyBvZiByZWFkIGRhdGEgY291bnQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX0ZXTE9BRF9QUkVQQVJFIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX0ZXTE9BRF9GSU5JU0ggeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXUxNiBBZGRyZXNzOyAgICAgLyogYWRkcmVzcyBvZiBmaW5hbCBibG9jayAqLworCXUxNiBMZW5ndGg7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKKy8qCisgKiBNZWFuaW5nIG9mIEZXX1NUUkVBTV9DT05UUk9MOjpNb2RlIGJpdHM6CisgKiAgQml0IDc6IExvb3BiYWNrIFBFWGluIHRvIFBFWG91dCB1c2luZyBUVk91dCBjaGFubmVsCisgKiAgQml0IDY6IEFWTE9PUAorICogIEJpdCA1OiBBdWRpbyBzZWxlY3Q7IDA9STJTLCAxPVNQRElGCisgKiAgQml0IDQ6IEFWU1lOQworICogIEJpdCAzOiBFbmFibGUgdHJhbnNwb3J0IHN0cmVhbQorICogIEJpdCAyOiBFbmFibGUgYXVkaW8gY2FwdHVyZQorICogIEJpdCAxOiBFbmFibGUgSVRVLVZpZGVvIFZCSSBjYXB0dXJlCisgKiAgQml0IDA6IEVuYWJsZSBJVFUtVmlkZW8gY2FwdHVyZQorICoKKyAqIE1lYW5pbmcgb2YgRldfU1RSRUFNX0NPTlRST0w6OkNvbnRyb2wgYml0cyAoc2VlIFVWSTFfQ1RMKQorICogIEJpdCA3OiBjb250aW51b3VzIGNhcHR1cmUKKyAqICBCaXQgNjogY2FwdHVyZSBvbmUgZmllbGQKKyAqICBCaXQgNTogY2FwdHVyZSBvbmUgZnJhbWUKKyAqICBCaXQgNDogdW51c2VkCisgKiAgQml0IDM6IHN0YXJ0aW5nIGZpZWxkOyAwPW9kZCwgMT1ldmVuCisgKiAgQml0IDI6IHNhbXBsZSBzaXplOyAwPTgtYml0LCAxPTEwLWJpdAorICogIEJpdCAxOiBkYXRhIGZvcm1hdDsgMD1VWVZZLCAxPVlVWTIKKyAqICBCaXQgMDogcmVzZXRzIGJ1ZmZlciBwb2ludGVycworKi8KKworZW51bSBGU0NfTU9ERV9CSVRTIHsKKwlTTU9ERV9MT09QQkFDSyAgICAgICAgICA9IDB4ODAsCisJU01PREVfQVZMT09QICAgICAgICAgICAgPSAweDQwLAorCV9TTU9ERV9BVURJT19TUERJRiAgICAgID0gMHgyMCwKKwlfU01PREVfQVZTWU5DICAgICAgICAgICA9IDB4MTAsCisJX1NNT0RFX1RSQU5TUE9SVF9TVFJFQU0gPSAweDA4LAorCV9TTU9ERV9BVURJT19DQVBUVVJFICAgID0gMHgwNCwKKwlfU01PREVfVkJJX0NBUFRVUkUgICAgICA9IDB4MDIsCisJX1NNT0RFX1ZJREVPX0NBUFRVUkUgICAgPSAweDAxCit9OworCisKKy8qIE1lYW5pbmcgb2YgRldfU1RSRUFNX0NPTlRST0w6OlN0cmVhbSBiaXRzOgorICogQml0IDM6IEF1ZGlvIHNhbXBsZSBjb3VudDogIDAgPSByZWxhdGl2ZSwgMSA9IGFic29sdXRlCisgKiBCaXQgMjogY29sb3IgYmFyIHNlbGVjdDsgMT1jb2xvciBiYXJzLCAwPUNWMyBkZWNvZGVyCisgKiBCaXRzIDEtMDogc3RyZWFtIHNlbGVjdCwgVVZJMSwgVVZJMiwgVFZPVVQKKyAqLworCitzdHJ1Y3QgRldfU1RSRUFNX0NPTlRST0wgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4ICAgICBTdHJlYW07ICAgICAgICAgICAgIC8qIFN0cmVhbSBudW1iZXIgKFVWSTEsIFVWSTIsIFRWT1VUKSAqLworCXU4ICAgICBDb250cm9sOyAgICAgICAgICAgIC8qIFZhbHVlIHdyaXR0ZW4gdG8gVVZJMV9DVEwgKi8KKwl1OCAgICAgTW9kZTsgICAgICAgICAgICAgICAvKiBDb250cm9scyBjbG9jayBzb3VyY2UgKi8KKwl1OCAgICAgU2V0dXBEYXRhTGVuOwkgICAvKiBMZW5ndGggb2Ygc2V0dXAgZGF0YSwgTVNCPTEgd3JpdGUKKwkJCQkgICAgICBiYWNrd2FyZHMgKi8KKwl1MTYgICAgQ2FwdHVyZUJsb2NrQ291bnQ7ICAvKiBCbG9ja3MgKGEgMjU2IEJ5dGVzKSB0byBjYXB0dXJlIHBlciBidWZmZXIKKwkJCQkgICAgICBmb3IgVFMgYW5kIEF1ZGlvICovCisJdTY0ICAgIEJ1ZmZlcl9BZGRyZXNzOwkgICAvKiBBZGRyZXNzIG9mIGZpcnN0IGJ1ZmZlciBoZWFkZXIgKi8KKwl1MTYgICAgQnl0ZXNQZXJWaWRlb0xpbmU7CisJdTE2ICAgIE1heExpbmVzUGVyRmllbGQ7CisJdTE2ICAgIE1pbkxpbmVzUGVyRmllbGQ7CisJdTE2ICAgIFJlc2VydmVkXzE7CisJdTE2ICAgIEJ5dGVzUGVyVkJJTGluZTsKKwl1MTYgICAgTWF4VkJJTGluZXNQZXJGaWVsZDsKKwl1MTYgICAgTWluVkJJTGluZXNQZXJGaWVsZDsKKwl1MTYgICAgU2V0dXBEYXRhQWRkcjsgICAgICAvKiBuZ2VuZSByZWxhdGl2ZSBhZGRyZXNzIG9mIHNldHVwIGRhdGEgKi8KKwl1OCAgICAgU2V0dXBEYXRhWzMyXTsgICAgICAvKiBzZXR1cCBkYXRhICovCit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworI2RlZmluZSBBVURJT19CTE9DS19TSVpFICAgIDI1NgorI2RlZmluZSBUU19CTE9DS19TSVpFICAgICAgIDI1NgorCitzdHJ1Y3QgRldfTUVNX1JFQUQgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXUxNiAgIGFkZHJlc3M7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19NRU1fV1JJVEUgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXUxNiAgIGFkZHJlc3M7CisJdTggICAgZGF0YTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX1NGUl9JUkFNX1JFQUQgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4ICAgIGFkZHJlc3M7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19TRlJfSVJBTV9XUklURSB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggICAgYWRkcmVzczsKKwl1OCAgICBkYXRhOworfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOworCitzdHJ1Y3QgRldfU0VUX0dQSU9fUElOIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCAgICBzZWxlY3Q7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19TRVRfR1BJT19JTlQgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4ICAgIHNlbGVjdDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX1NFVF9ERUJVR01PREUgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4ICAgZGVidWdfZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK3N0cnVjdCBGV19DT05GSUdVUkVfQlVGRkVSUyB7CisJc3RydWN0IEZXX0hFQURFUiBoZHI7CisJdTggICBjb25maWc7Cit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisKK2VudW0gX0JVRkZFUl9DT05GSUdTIHsKKwkvKiA0ayBVVkkxLCA0ayBVVkkyLCAyayBBVUQxLCAyayBBVUQyICAoc3RhbmRhcmQgdXNhZ2UpICovCisJQlVGRkVSX0NPTkZJR180NDIyID0gMCwKKwkvKiAzayBVVkkxLCAzayBVVkkyLCAzayBBVUQxLCAzayBBVUQyICAoNHggVFMgaW5wdXQgdXNhZ2UpICovCisJQlVGRkVSX0NPTkZJR18zMzMzID0gMSwKKwkvKiA4ayBVVkkxLCAwayBVVkkyLCAyayBBVUQxLCAyayBJMlNPdXQgIChIRFRWIGRlY29kZXIgdXNhZ2UpICovCisJQlVGRkVSX0NPTkZJR184MDIyID0gMiwKKwlCVUZGRVJfQ09ORklHX0ZXMTcgPSAyNTUsIC8qIFVzZSBuZXcgRlcgMTcgY29tbWFuZCAqLworfTsKKworc3RydWN0IEZXX0NPTkZJR1VSRV9GUkVFX0JVRkZFUlMgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4ICAgVVZJMV9CdWZmZXJMZW5ndGg7CisJdTggICBVVkkyX0J1ZmZlckxlbmd0aDsKKwl1OCAgIFRWT19CdWZmZXJMZW5ndGg7CisJdTggICBBVUQxX0J1ZmZlckxlbmd0aDsKKwl1OCAgIEFVRDJfQnVmZmVyTGVuZ3RoOworCXU4ICAgVFZBX0J1ZmZlckxlbmd0aDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworc3RydWN0IEZXX0NPTkZJR1VSRV9VQVJUIHsKKwlzdHJ1Y3QgRldfSEVBREVSIGhkcjsKKwl1OCBVYXJ0Q29udHJvbDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworZW51bSBfVUFSVF9DT05GSUcgeworCV9VQVJUX0JBVURSQVRFXzE5MjAwID0gMCwKKwlfVUFSVF9CQVVEUkFURV85NjAwICA9IDEsCisJX1VBUlRfQkFVRFJBVEVfNDgwMCAgPSAyLAorCV9VQVJUX0JBVURSQVRFXzI0MDAgID0gMywKKwlfVUFSVF9SWF9FTkFCTEUgICAgICA9IDB4NDAsCisJX1VBUlRfVFhfRU5BQkxFICAgICAgPSAweDgwLAorfTsKKworc3RydWN0IEZXX1dSSVRFX1VBUlQgeworCXN0cnVjdCBGV19IRUFERVIgaGRyOworCXU4IERhdGFbMjUyXTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworCitzdHJ1Y3QgbmdlbmVfY29tbWFuZCB7CisJdTMyIGluX2xlbjsKKwl1MzIgb3V0X2xlbjsKKwl1bmlvbiB7CisJCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd1s2NF07CisJCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdzhbMjU2XTsKKwkJc3RydWN0IEZXX0hFQURFUiAgICAgICAgICAgICAgICAgaGRyOworCQlzdHJ1Y3QgRldfSTJDX1dSSVRFICAgICAgICAgICAgICBJMkNXcml0ZTsKKwkJc3RydWN0IEZXX0kyQ19DT05USU5VRV9XUklURSAgICAgSTJDQ29udGludWVXcml0ZTsKKwkJc3RydWN0IEZXX0kyQ19SRUFEICAgICAgICAgICAgICAgSTJDUmVhZDsKKwkJc3RydWN0IEZXX1NUUkVBTV9DT05UUk9MICAgICAgICAgU3RyZWFtQ29udHJvbDsKKwkJc3RydWN0IEZXX0ZXTE9BRF9QUkVQQVJFICAgICAgICAgRldMb2FkUHJlcGFyZTsKKwkJc3RydWN0IEZXX0ZXTE9BRF9GSU5JU0ggICAgICAgICAgRldMb2FkRmluaXNoOworCQlzdHJ1Y3QgRldfTUVNX1JFQUQJCSBNZW1vcnlSZWFkOworCQlzdHJ1Y3QgRldfTUVNX1dSSVRFCQkgTWVtb3J5V3JpdGU7CisJCXN0cnVjdCBGV19TRlJfSVJBTV9SRUFECQkgU2ZySXJhbVJlYWQ7CisJCXN0cnVjdCBGV19TRlJfSVJBTV9XUklURSAgICAgICAgIFNmcklyYW1Xcml0ZTsKKwkJc3RydWN0IEZXX1NQSV9XUklURSAgICAgICAgICAgICAgU1BJV3JpdGU7CisJCXN0cnVjdCBGV19TUElfUkVBRCAgICAgICAgICAgICAgIFNQSVJlYWQ7CisJCXN0cnVjdCBGV19TRVRfR1BJT19QSU4gICAgICAgICAgIFNldEdwaW9QaW47CisJCXN0cnVjdCBGV19TRVRfR1BJT19JTlQgICAgICAgICAgIFNldEdwaW9JbnQ7CisJCXN0cnVjdCBGV19TRVRfREVCVUdNT0RFICAgICAgICAgIFNldERlYnVnTW9kZTsKKwkJc3RydWN0IEZXX0NPTkZJR1VSRV9CVUZGRVJTICAgICAgQ29uZmlndXJlQnVmZmVyczsKKwkJc3RydWN0IEZXX0NPTkZJR1VSRV9GUkVFX0JVRkZFUlMgQ29uZmlndXJlRnJlZUJ1ZmZlcnM7CisJCXN0cnVjdCBGV19DT05GSUdVUkVfVUFSVCAgICAgICAgIENvbmZpZ3VyZVVhcnQ7CisJCXN0cnVjdCBGV19XUklURV9VQVJUICAgICAgICAgICAgIFdyaXRlVWFydDsKKwl9IGNtZDsKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKworI2RlZmluZSBOR0VORV9JTlRFUkZBQ0VfVkVSU0lPTiAweDEwMworI2RlZmluZSBNQVhfVklERU9fQlVGRkVSX1NJWkUgICAoNDE3NzkyKSAvKiAyODgqMTQ0MCByb3VuZGVkIHVwIHRvIG5leHQgcGFnZSAqLworI2RlZmluZSBNQVhfQVVESU9fQlVGRkVSX1NJWkUgICAgICg4MTkyKSAvKiBHaXZlcyByb29tIGZvciBhYm91dCAyM21zZWNANDhLSHogKi8KKyNkZWZpbmUgTUFYX1ZCSV9CVUZGRVJfU0laRSAgICAgICgyODY3MikgLyogMTE0NCoxOCByb3VuZGVkIHVwIHRvIG5leHQgcGFnZSAqLworI2RlZmluZSBNQVhfVFNfQlVGRkVSX1NJWkUgICAgICAgKDk4MzA0KSAvKiA1MTIqMTg4IHJvdW5kZWQgdXAgdG8gbmV4dCBwYWdlICovCisjZGVmaW5lIE1BWF9IRFRWX0JVRkZFUl9TSVpFICAgKDIwODA3NjgpIC8qIDU0MSoxOTIwKjIgcm91bmRlZCB1cCB0byBuZXh0IHBhZ2UKKwkJCQkJICAgIE1heDogKDE5MjB4MTA4MGk2MCkgKi8KKworI2RlZmluZSBPVkVSRkxPV19CVUZGRVJfU0laRSAgICAoODE5MikKKworI2RlZmluZSBSSU5HX1NJWkVfVklERU8gICAgIDQKKyNkZWZpbmUgUklOR19TSVpFX0FVRElPICAgICA4CisjZGVmaW5lIFJJTkdfU0laRV9UUyAgICAgICAgOAorCisjZGVmaW5lIE5VTV9TQ0FUVEVSX0dBVEhFUl9FTlRSSUVTICA4CisKKyNkZWZpbmUgTUFYX0RNQV9MRU5HVEggKCgoTUFYX1ZJREVPX0JVRkZFUl9TSVpFICsgTUFYX1ZCSV9CVUZGRVJfU0laRSkgKiBcCisJCQlSSU5HX1NJWkVfVklERU8gKiAyKSArIFwKKwkJCShNQVhfQVVESU9fQlVGRkVSX1NJWkUgKiBSSU5HX1NJWkVfQVVESU8gKiAyKSArIFwKKwkJCShNQVhfVFNfQlVGRkVSX1NJWkUgKiBSSU5HX1NJWkVfVFMgKiA0KSArIFwKKwkJCShSSU5HX1NJWkVfVklERU8gKiBQQUdFX1NJWkUgKiAyKSArIFwKKwkJCShSSU5HX1NJWkVfQVVESU8gKiBQQUdFX1NJWkUgKiAyKSArIFwKKwkJCShSSU5HX1NJWkVfVFMgICAgKiBQQUdFX1NJWkUgKiA0KSArIFwKKwkJCSA4ICogUEFHRV9TSVpFICsgT1ZFUkZMT1dfQlVGRkVSX1NJWkUgKyBQQUdFX1NJWkUpCisKKyNkZWZpbmUgRVZFTlRfUVVFVUVfU0laRSAgICAxNgorCisvKiBHYXRoZXJzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgc2luZ2xlIGNoYW5uZWwuICovCisKK3N0cnVjdCBTQnVmZmVySGVhZGVyIHsKKwlzdHJ1Y3QgQlVGRkVSX0hFQURFUiAgIG5nZW5lQnVmZmVyOyAvKiBQaHlzaWNhbCBkZXNjcmlwdG9yICovCisJc3RydWN0IFNCdWZmZXJIZWFkZXIgICpOZXh0OworCXZvaWQgICAgICAgICAgICAgICAgICAqQnVmZmVyMTsKKwlzdHJ1Y3QgSFdfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCAqc2NMaXN0MTsKKwl2b2lkICAgICAgICAgICAgICAgICAgKkJ1ZmZlcjI7CisJc3RydWN0IEhXX1NDQVRURVJfR0FUSEVSX0VMRU1FTlQgKnNjTGlzdDI7Cit9OworCisvKiBTaXplb2YgU0J1ZmZlckhlYWRlciBhbGlnbmVkIHRvIG5leHQgNjQgQml0IGJvdW5kYXJ5IChodyByZXN0cmljdGlvbikgKi8KKyNkZWZpbmUgU0laRU9GX1NCdWZmZXJIZWFkZXIgKChzaXplb2Yoc3RydWN0IFNCdWZmZXJIZWFkZXIpICsgNjMpICYgfjYzKQorCitlbnVtIEhXU1RBVEUgeworCUhXU1RBVEVfU1RPUCwKKwlIV1NUQVRFX1NUQVJUVVAsCisJSFdTVEFURV9SVU4sCisJSFdTVEFURV9QQVVTRSwKK307CisKK2VudW0gS1NTVEFURSB7CisJS1NTVEFURV9TVE9QLAorCUtTU1RBVEVfQUNRVUlSRSwKKwlLU1NUQVRFX1BBVVNFLAorCUtTU1RBVEVfUlVOLAorfTsKKworc3RydWN0IFNSaW5nQnVmZmVyRGVzY3JpcHRvciB7CisJc3RydWN0IFNCdWZmZXJIZWFkZXIgKkhlYWQ7IC8qIFBvaW50cyB0byBmaXJzdCBidWZmZXIgaW4gcmluZyBidWZmZXIKKwkJCQkgICAgICAgc3RydWN0dXJlKi8KKwl1NjQgICBQQUhlYWQ7ICAgICAgICAgLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBmaXJzdCBidWZmZXIgKi8KKwl1MzIgICBNZW1TaXplOyAgICAgICAgLyogTWVtb3J5IHNpemUgb2YgYWxsb2NhdGVkIHJpbmcgYnVmZmVycworCQkJCSAobmVlZGVkIGZvciBmcmVlaW5nKSAqLworCXUzMiAgIE51bUJ1ZmZlcnM7ICAgICAvKiBOdW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgcmluZyAqLworCXUzMiAgIEJ1ZmZlcjFMZW5ndGg7ICAvKiBBbGxvY2F0ZWQgbGVuZ3RoIG9mIEJ1ZmZlciAxICovCisJdTMyICAgQnVmZmVyMkxlbmd0aDsgIC8qIEFsbG9jYXRlZCBsZW5ndGggb2YgQnVmZmVyIDIgKi8KKwl2b2lkICpTQ0xpc3RNZW07ICAgICAgLyogTWVtb3J5IHRvIGhvbGQgc2NhdHRlciBnYXRoZXIgbGlzdHMgZm9yIHRoaXMKKwkJCQkgcmluZyAqLworCXU2NCAgIFBBU0NMaXN0TWVtOyAgICAvKiBQaHlzaWNhbCBhZGRyZXNzICAuLiAqLworCXUzMiAgIFNDTGlzdE1lbVNpemU7ICAvKiBTaXplIG9mIHRoaXMgbWVtb3J5ICovCit9OworCitlbnVtIFNUUkVBTU1PREVGTEFHUyB7CisJU3RyZWFtTW9kZV9OT05FICAgPSAwLCAvKiBTdHJlYW0gbm90IHVzZWQgKi8KKwlTdHJlYW1Nb2RlX0FOQUxPRyA9IDEsIC8qIEFuYWxvZzogU3RyZWFtIDAsMSA9IFZpZGVvLCAyLDMgPSBBdWRpbyAqLworCVN0cmVhbU1vZGVfVFNJTiAgID0gMiwgLyogVHJhbnNwb3J0IHN0cmVhbSBpbnB1dCAoYWxsKSAqLworCVN0cmVhbU1vZGVfSERUViAgID0gNCwgLyogSERUVjogTWF4aW11bSAxOTIweDEwODBwMzAsMTkyMHgxMDgwaTYwCisJCQkJICAob25seSBzdHJlYW0gMCkgKi8KKwlTdHJlYW1Nb2RlX1RTT1VUICA9IDgsIC8qIFRyYW5zcG9ydCBzdHJlYW0gb3V0cHV0IChvbmx5IHN0cmVhbSAzKSAqLworfTsKKworCitlbnVtIEJ1ZmZlckV4Y2hhbmdlRmxhZ3MgeworCUJFRl9FVkVOX0ZJRUxEICAgPSAweDAwMDAwMDAxLAorCUJFRl9DT05USU5VQVRJT04gPSAweDAwMDAwMDAyLAorCUJFRl9NT1JFX0RBVEEgICAgPSAweDAwMDAwMDA0LAorCUJFRl9PVkVSRkxPVyAgICAgPSAweDAwMDAwMDA4LAorCURGX1NXQVAzMiAgICAgICAgPSAweDAwMDEwMDAwLAorfTsKKwordHlwZWRlZiB2b2lkICooSUJ1ZmZlckV4Y2hhbmdlKSh2b2lkICosIHZvaWQgKiwgdTMyLCB1MzIsIHUzMik7CisKK3N0cnVjdCBNSUNJX1NUUkVBTUlORk8geworCUlCdWZmZXJFeGNoYW5nZSAgICAqcEV4Y2hhbmdlOworCUlCdWZmZXJFeGNoYW5nZSAgICAqcEV4Y2hhbmdlVkJJOyAgICAgLyogU2Vjb25kYXJ5IChWQkksIGFuY2lsbGFyeSkgKi8KKwl1OCAgU3RyZWFtOworCXU4ICBGbGFnczsKKwl1OCAgTW9kZTsKKwl1OCAgUmVzZXJ2ZWQ7CisJdTE2IG5MaW5lc1ZpZGVvOworCXUxNiBuQnl0ZXNQZXJMaW5lVmlkZW87CisJdTE2IG5MaW5lc1ZCSTsKKwl1MTYgbkJ5dGVzUGVyTGluZVZCSTsKKwl1MzIgQ2FwdHVyZUxlbmd0aDsgICAgLyogVXNlZCBmb3IgYXVkaW8gYW5kIHRyYW5zcG9ydCBzdHJlYW0gKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU1RSVUNUUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogc291bmQgaGFyZHdhcmUgZGVmaW5pdGlvbiAqLworI2RlZmluZSBNSVhFUl9BRERSX1RWVFVORVIgICAgICAwCisjZGVmaW5lIE1JWEVSX0FERFJfTEFTVCAgICAgICAgIDAKKworc3RydWN0IG5nZW5lX2NoYW5uZWw7CisKKy8qc3RydWN0IHNvdW5kIGNoaXAqLworCitzdHJ1Y3QgbXljaGlwIHsKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqY2hhbjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHBjaV9kZXYgKnBjaTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCXVuc2lnbmVkIGxvbmcgcG9ydDsKKwlpbnQgaXJxOworCXNwaW5sb2NrX3QgbWl4ZXJfbG9jazsKKwlzcGlubG9ja190IGxvY2s7CisJaW50IG1peGVyX3ZvbHVtZVtNSVhFUl9BRERSX0xBU1QgKyAxXVsyXTsKKwlpbnQgY2FwdHVyZV9zb3VyY2VbTUlYRVJfQUREUl9MQVNUICsgMV1bMl07Cit9OworCisjaWZkZWYgTkdFTkVfVjRMCitzdHJ1Y3QgbmdlbmVfb3ZlcmxheSB7CisJaW50ICAgICAgICAgICAgICAgICAgICB0dm5vcm07CisJc3RydWN0IHY0bDJfcmVjdCAgICAgICB3OworCWVudW0gdjRsMl9maWVsZCAgICAgICAgZmllbGQ7CisJc3RydWN0IHY0bDJfY2xpcCAgICAgICAqY2xpcHM7CisJaW50ICAgICAgICAgICAgICAgICAgICBuY2xpcHM7CisJaW50ICAgICAgICAgICAgICAgICAgICBzZXR1cF9vazsKK307CisKK3N0cnVjdCBuZ2VuZV90dm5vcm0geworCWludCAgIHY0bDJfaWQ7CisJY2hhciAgKm5hbWU7CisJdTE2ICAgc3dpZHRoLCBzaGVpZ2h0OyAvKiBzY2FsZWQgc3RhbmRhcmQgd2lkdGgsIGhlaWdodCAqLworCWludCAgIHR1bmVyX25vcm07CisJaW50ICAgc291bmRzdGQ7Cit9OworCitzdHJ1Y3QgbmdlbmVfdm9wZW4geworCXN0cnVjdCBuZ2VuZV9jaGFubmVsICAgICAgKmNoOworCWVudW0gdjRsMl9wcmlvcml0eSAgICAgICAgIHByaW87CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OworCWludCAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoOworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAgICAgIHZidWZfcTsKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgICAgICB2Ymk7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgZm91cmNjOworCWludCAgICAgICAgICAgICAgICAgICAgICAgIHBpY3hjb3VudDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXM7CisJZW51bSB2NGwyX2J1Zl90eXBlICAgICAgICAgdHlwZTsKKwljb25zdCBzdHJ1Y3QgbmdlbmVfZm9ybWF0ICpmbXQ7CisKKwljb25zdCBzdHJ1Y3QgbmdlbmVfZm9ybWF0ICpvdmZtdDsKKwlzdHJ1Y3QgbmdlbmVfb3ZlcmxheSAgICAgICBvdjsKK307CisjZW5kaWYKKworc3RydWN0IG5nZW5lX2NoYW5uZWwgeworCXN0cnVjdCBkZXZpY2UgICAgICAgICBkZXZpY2U7CisJc3RydWN0IGkyY19hZGFwdGVyICAgIGkyY19hZGFwdGVyOworCisJc3RydWN0IG5nZW5lICAgICAgICAgKmRldjsKKwlpbnQgICAgICAgICAgICAgICAgICAgbnVtYmVyOworCWludCAgICAgICAgICAgICAgICAgICB0eXBlOworCWludCAgICAgICAgICAgICAgICAgICBtb2RlOworCisJc3RydWN0IGR2Yl9mcm9udGVuZCAgKmZlOworCXN0cnVjdCBkbXhkZXYgICAgICAgICBkbXhkZXY7CisJc3RydWN0IGR2Yl9kZW11eCAgICAgIGRlbXV4OworCXN0cnVjdCBkbXhfZnJvbnRlbmQgICBod19mcm9udGVuZDsKKwlzdHJ1Y3QgZG14X2Zyb250ZW5kICAgbWVtX2Zyb250ZW5kOworCWludCAgICAgICAgICAgICAgICAgICB1c2VyczsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICAqdjRsX2RldjsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgZGVtdXhfdGFza2xldDsKKworCXN0cnVjdCBTQnVmZmVySGVhZGVyICpuZXh0QnVmZmVyOworCWVudW0gS1NTVEFURSAgICAgICAgICBTdGF0ZTsKKwllbnVtIEhXU1RBVEUgICAgICAgICAgSFdTdGF0ZTsKKwl1OCAgICAgICAgICAgICAgICAgICAgU3RyZWFtOworCXU4ICAgICAgICAgICAgICAgICAgICBGbGFnczsKKwl1OCAgICAgICAgICAgICAgICAgICAgTW9kZTsKKwlJQnVmZmVyRXhjaGFuZ2UgICAgICAqcEJ1ZmZlckV4Y2hhbmdlOworCUlCdWZmZXJFeGNoYW5nZSAgICAgICpwQnVmZmVyRXhjaGFuZ2UyOworCisJc3BpbmxvY2tfdCAgICAgICAgICAgIHN0YXRlX2xvY2s7CisJdTE2ICAgICAgICAgICAgICAgICAgIG5MaW5lczsKKwl1MTYgICAgICAgICAgICAgICAgICAgbkJ5dGVzUGVyTGluZTsKKwl1MTYgICAgICAgICAgICAgICAgICAgblZCSUxpbmVzOworCXUxNiAgICAgICAgICAgICAgICAgICBuQnl0ZXNQZXJWQklMaW5lOworCXUxNiAgICAgICAgICAgICAgICAgICBpdHVtb2RlOworCXUzMiAgICAgICAgICAgICAgICAgICBDYXB0dXJlMUxlbmd0aDsKKwl1MzIgICAgICAgICAgICAgICAgICAgQ2FwdHVyZTJMZW5ndGg7CisJc3RydWN0IFNSaW5nQnVmZmVyRGVzY3JpcHRvciBSaW5nQnVmZmVyOworCXN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgVFNSaW5nQnVmZmVyOworCXN0cnVjdCBTUmluZ0J1ZmZlckRlc2NyaXB0b3IgVFNJZGxlQnVmZmVyOworCisJdTMyICAgICAgICAgICAgICAgICAgIERhdGFGb3JtYXRGbGFnczsKKworCWludCAgICAgICAgICAgICAgICAgICBBdWRpb0RUT1VwZGF0ZWQ7CisJdTMyICAgICAgICAgICAgICAgICAgIEF1ZGlvRFRPVmFsdWU7CisKKwlpbnQgKCpzZXRfdG9uZSkoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCBmZV9zZWNfdG9uZV9tb2RlX3QpOworCXU4IGxuYmg7CisKKwkvKiBzdHVmZiBmcm9tIGFuYWxvZyBkcml2ZXIgKi8KKworCWludCBtaW5vcjsKKwlzdHJ1Y3QgbXljaGlwICAgICAgICAqbXljaGlwOworCXN0cnVjdCBzbmRfY2FyZCAgICAgICpzb3VuZGNhcmQ7CisJdTggICAgICAgICAgICAgICAgICAgKmV2ZW5idWZmZXI7CisJdTggICAgICAgICAgICAgICAgICAgIGRtYV9vbjsKKwlpbnQgICAgICAgICAgICAgICAgICAgc291bmRzdHJlYW1vbjsKKwlpbnQgICAgICAgICAgICAgICAgICAgYXVkaW9tdXRlOworCWludCAgICAgICAgICAgICAgICAgICBzb3VuZGJ1ZmZpc2FsbG9jYXRlZDsKKwlpbnQgICAgICAgICAgICAgICAgICAgc25kYnVmZmZsYWc7CisJaW50ICAgICAgICAgICAgICAgICAgIHR1bl9yZHk7CisJaW50ICAgICAgICAgICAgICAgICAgIGRlY19yZHk7CisJaW50ICAgICAgICAgICAgICAgICAgIHR1bl9kZWNfcmR5OworCWludCAgICAgICAgICAgICAgICAgICBsYXN0YnVmZmVyZmxhZzsKKworCXN0cnVjdCBuZ2VuZV90dm5vcm0gICp0dm5vcm1zOworCWludCAgICAgICAgICAgICAgICAgICB0dm5vcm1fbnVtOworCWludCAgICAgICAgICAgICAgICAgICB0dm5vcm07CisKKyNpZmRlZiBOR0VORV9WNEwKKwlpbnQgICAgICAgICAgICAgICAgICAgdmlkZW91c2VyczsKKwlzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlIHByaW87CisJc3RydWN0IG5nZW5lX3ZvcGVuICAgIGluaXQ7CisJaW50ICAgICAgICAgICAgICAgICAgIHJlc291cmNlczsKKwlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciBmYnVmOworCXN0cnVjdCBuZ2VuZV9idWZmZXIgICpzY3JlZW47ICAgICAvKiBvdmVybGF5ICAgICAgICAgICAgICovCisJc3RydWN0IGxpc3RfaGVhZCAgICAgIGNhcHR1cmU7ICAgIC8qIHZpZGVvIGNhcHR1cmUgcXVldWUgKi8KKwlzcGlubG9ja190IHNfbG9jazsKKwlzdHJ1Y3Qgc2VtYXBob3JlIHJlc2xvY2s7CisjZW5kaWYKKworCWludCBydW5uaW5nOworfTsKKworc3RydWN0IG5nZW5lOworCit0eXBlZGVmIHZvaWQgKHJ4X2NiX3QpKHN0cnVjdCBuZ2VuZSAqLCB1MzIsIHU4KTsKK3R5cGVkZWYgdm9pZCAodHhfY2JfdCkoc3RydWN0IG5nZW5lICosIHUzMik7CisKK3N0cnVjdCBuZ2VuZSB7CisJaW50ICAgICAgICAgICAgICAgICAgIG5yOworCXN0cnVjdCBwY2lfZGV2ICAgICAgICpwY2lfZGV2OworCXVuc2lnbmVkIGNoYXIgICAgICAgICppb21lbTsKKworCS8qc3RydWN0IGkyY19hZGFwdGVyICBpMmNfYWRhcHRlcjsqLworCisJdTMyICAgICAgICAgICAgICAgICAgIGRldmljZV92ZXJzaW9uOworCXUzMiAgICAgICAgICAgICAgICAgICBmd19pbnRlcmZhY2VfdmVyc2lvbjsKKwl1MzIgICAgICAgICAgICAgICAgICAgaWNvdW50czsKKworCXU4ICAgICAgICAgICAgICAgICAgICpDbWREb25lQnl0ZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgQm9vdEZpcm13YXJlOworCXZvaWQgICAgICAgICAgICAgICAgICpPdmVyZmxvd0J1ZmZlcjsKKwlkbWFfYWRkcl90ICAgICAgICAgICAgUEFPdmVyZmxvd0J1ZmZlcjsKKwl2b2lkICAgICAgICAgICAgICAgICAqRldJbnRlcmZhY2VCdWZmZXI7CisJZG1hX2FkZHJfdCAgICAgICAgICAgIFBBRldJbnRlcmZhY2VCdWZmZXI7CisJdTggICAgICAgICAgICAgICAgICAgKm5nZW5ldG9ob3N0OworCXU4ICAgICAgICAgICAgICAgICAgICpob3N0dG9uZ2VuZTsKKworCXN0cnVjdCBFVkVOVF9CVUZGRVIgICBFdmVudFF1ZXVlW0VWRU5UX1FVRVVFX1NJWkVdOworCWludCAgICAgICAgICAgICAgICAgICBFdmVudFF1ZXVlT3ZlcmZsb3dDb3VudDsKKwlpbnQgICAgICAgICAgICAgICAgICAgRXZlbnRRdWV1ZU92ZXJmbG93RmxhZzsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgZXZlbnRfdGFza2xldDsKKwlzdHJ1Y3QgRVZFTlRfQlVGRkVSICAqRXZlbnRCdWZmZXI7CisJaW50ICAgICAgICAgICAgICAgICAgIEV2ZW50UXVldWVXcml0ZUluZGV4OworCWludCAgICAgICAgICAgICAgICAgICBFdmVudFF1ZXVlUmVhZEluZGV4OworCisJd2FpdF9xdWV1ZV9oZWFkX3QgICAgIGNtZF93cTsKKwlpbnQgICAgICAgICAgICAgICAgICAgY21kX2RvbmU7CisJc3RydWN0IHNlbWFwaG9yZSAgICAgIGNtZF9tdXRleDsKKwlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgc3RyZWFtX211dGV4OworCXN0cnVjdCBzZW1hcGhvcmUgICAgICBwbGxfbXV0ZXg7CisJc3RydWN0IHNlbWFwaG9yZSAgICAgIGkyY19zd2l0Y2hfbXV0ZXg7CisJaW50ICAgICAgICAgICAgICAgICAgIGkyY19jdXJyZW50X2NoYW5uZWw7CisJaW50ICAgICAgICAgICAgICAgICAgIGkyY19jdXJyZW50X2J1czsKKwlzcGlubG9ja190ICAgICAgICAgICAgY21kX2xvY2s7CisKKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIgICAgYWRhcHRlcltNQVhfU1RSRUFNXTsKKwlzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAgY2hhbm5lbFtNQVhfU1RSRUFNXTsKKworCXN0cnVjdCBuZ2VuZV9pbmZvICAgICpjYXJkX2luZm87CisKKwl0eF9jYl90ICAgICAgICAgICAgICAqVHhFdmVudE5vdGlmeTsKKwlyeF9jYl90ICAgICAgICAgICAgICAqUnhFdmVudE5vdGlmeTsKKwlpbnQgICAgICAgICAgICAgICAgICAgdHhfYnVzeTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgdHhfd3E7CisJd2FpdF9xdWV1ZV9oZWFkX3QgICAgIHJ4X3dxOworI2RlZmluZSBVQVJUX1JCVUZfTEVOIDQwOTYKKwl1OCAgICAgICAgICAgICAgICAgICAgdWFydF9yYnVmW1VBUlRfUkJVRl9MRU5dOworCWludCAgICAgICAgICAgICAgICAgICB1YXJ0X3JwLCB1YXJ0X3dwOworCisJdTggICAgICAgICAgICAgICAgICAgKnRzb3V0X2J1ZjsKKyNkZWZpbmUgVFNPVVRfQlVGX1NJWkUgKDUxMioxODgqOCkKKwlzdHJ1Y3QgZHZiX3JpbmdidWZmZXIgdHNvdXRfcmJ1ZjsKKworCXU4ICAgICAgICAgICAgICAgICAgICphaW5fYnVmOworI2RlZmluZSBBSU5fQlVGX1NJWkUgKDEyOCoxMDI0KQorCXN0cnVjdCBkdmJfcmluZ2J1ZmZlciBhaW5fcmJ1ZjsKKworCisJdTggICAgICAgICAgICAgICAgICAgKnZpbl9idWY7CisjZGVmaW5lIFZJTl9CVUZfU0laRSAoNCoxOTIwKjEwODApCisJc3RydWN0IGR2Yl9yaW5nYnVmZmVyIHZpbl9yYnVmOworCisJdW5zaWduZWQgbG9uZyAgICAgICAgIGV4cF92YWw7CisJaW50IHByZXZfY21kOworfTsKKworc3RydWN0IG5nZW5lX2luZm8geworCWludCAgIHR5cGU7CisjZGVmaW5lIE5HRU5FX0FQUCAgICAgICAgMAorI2RlZmluZSBOR0VORV9URVJSQVRFQyAgIDEKKyNkZWZpbmUgTkdFTkVfU0lERVdJTkRFUiAyCisjZGVmaW5lIE5HRU5FX1JBQ0VSICAgICAgMworI2RlZmluZSBOR0VORV9WSVBFUiAgICAgIDQKKyNkZWZpbmUgTkdFTkVfUFlUSE9OICAgICA1CisjZGVmaW5lIE5HRU5FX1ZCT1hfVjEJIDYKKyNkZWZpbmUgTkdFTkVfVkJPWF9WMgkgNworCisJaW50ICAgZndfdmVyc2lvbjsKKwljaGFyICpuYW1lOworCisJaW50ICAgaW9fdHlwZVtNQVhfU1RSRUFNXTsKKyNkZWZpbmUgTkdFTkVfSU9fTk9ORSAgICAwCisjZGVmaW5lIE5HRU5FX0lPX1RWICAgICAgMQorI2RlZmluZSBOR0VORV9JT19IRFRWICAgIDIKKyNkZWZpbmUgTkdFTkVfSU9fVFNJTiAgICA0CisjZGVmaW5lIE5HRU5FX0lPX1RTT1VUICAgOAorI2RlZmluZSBOR0VORV9JT19BSU4gICAgIDE2CisKKwl2b2lkICpmZV9jb25maWdbNF07CisJdm9pZCAqdHVuZXJfY29uZmlnWzRdOworCisJaW50ICgqZGVtb2RfYXR0YWNoWzRdKShzdHJ1Y3QgbmdlbmVfY2hhbm5lbCAqKTsKKwlpbnQgKCp0dW5lcl9hdHRhY2hbNF0pKHN0cnVjdCBuZ2VuZV9jaGFubmVsICopOworCisJdTggICAgYXZmWzRdOworCXU4ICAgIG1zcFs0XTsKKwl1OCAgICBkZW1vZGFbNF07CisJdTggICAgbG5iWzRdOworCWludCAgIGkyY19hY2Nlc3M7CisJdTggICAgbnRzYzsKKwl1OCAgICB0c2ZbNF07CisJdTggICAgaTJzWzRdOworCisJaW50ICgqZ2F0ZV9jdHJsKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIGludCk7CisJaW50ICgqc3dpdGNoX2N0cmwpKHN0cnVjdCBuZ2VuZV9jaGFubmVsICosIGludCwgaW50KTsKK307CisKKyNpZmRlZiBOR0VORV9WNEwKK3N0cnVjdCBuZ2VuZV9mb3JtYXR7CisJY2hhciAqbmFtZTsKKwlpbnQgICBmb3VyY2M7ICAgICAgICAgIC8qIHZpZGVvNGxpbnV4IDIgICAgICAqLworCWludCAgIGJ0Zm9ybWF0OyAgICAgICAgLyogQlQ4NDhfQ09MT1JfRk1UXyogICovCisJaW50ICAgZm9ybWF0OworCWludCAgIGJ0c3dhcDsgICAgICAgICAgLyogQlQ4NDhfQ09MT1JfQ1RMXyogICovCisJaW50ICAgZGVwdGg7ICAgICAgICAgICAvKiBiaXQvcGl4ZWwgICAgICAgICAgKi8KKwlpbnQgICBmbGFnczsKKwlpbnQgICBoc2hpZnQsIHZzaGlmdDsgIC8qIGZvciBwbGFuYXIgbW9kZXMgICAqLworCWludCAgIHBhbGV0dGU7Cit9OworCisjZGVmaW5lIFJFU09VUkNFX09WRVJMQVkgICAgICAgMQorI2RlZmluZSBSRVNPVVJDRV9WSURFTyAgICAgICAgIDIKKyNkZWZpbmUgUkVTT1VSQ0VfVkJJICAgICAgICAgICA0CisKK3N0cnVjdCBuZ2VuZV9idWZmZXIgeworCS8qIGNvbW1vbiB2NGwgYnVmZmVyIHN0dWZmIC0tIG11c3QgYmUgZmlyc3QgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICAgICB2YjsKKworCS8qIG5nZW5lIHNwZWNpZmljICovCisJY29uc3Qgc3RydWN0IG5nZW5lX2Zvcm1hdCAqZm10OworCWludCAgICAgICAgICAgICAgICAgICAgICAgIHR2bm9ybTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICBidGZvcm1hdDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICBidHN3YXA7Cit9OworI2VuZGlmCisKKworI2VuZGlmCisKKy8qICBMb2NhbFdvcmRzOiAgRW5kaWYKKyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwppbmRleCAxMDY3YjIyLi5jZmY3N2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwpAQCAtNjIsNiArNjIsNyBAQAogCVtTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNXSA9IHsKIAkJLm5hbWUJPSAiSGF1cHBhdWdlIFdpblRWIE1pbmlTdGljayIsCiAJCS50eXBlCT0gU01TX05PVkFfQjAsCisJCS5md1tERVZJQ0VfTU9ERV9JU0RCVF9CREFdID0gInNtczF4eHgtaGN3LTU1eHh4LWlzZGJ0LTAyLmZ3IiwKIAkJLmZ3W0RFVklDRV9NT0RFX0RWQlRfQkRBXSA9ICJzbXMxeHh4LWhjdy01NXh4eC1kdmJ0LTAyLmZ3IiwKIAkJLmJvYXJkX2NmZy5sZWRzX3Bvd2VyID0gMjYsCiAJCS5ib2FyZF9jZmcubGVkMCA9IDI3LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jCmluZGV4IGNhNzU4YmMuLjRiZmQzNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKQEAgLTE0NTksOCArMTQ1OSwxMCBAQAogCWlmICghKGNvcmVkZXYtPmRldmljZV9mbGFncyAmIFNNU19ERVZJQ0VfRkFNSUxZMikpIHsKIAkJcE1zZy0+eE1zZ0hlYWRlci5tc2dUeXBlID0gTVNHX1NNU19HUElPX0NPTkZJR19SRVE7CiAJCWlmIChHZXRHcGlvUGluUGFyYW1zKFBpbk51bSwgJlRyYW5zbGF0ZWRQaW5OdW0sICZHcm91cE51bSwKLQkJCQkmZ3JvdXBDZmcpICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQkmZ3JvdXBDZmcpICE9IDApIHsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gZnJlZTsKKwkJfQogCiAJCXBNc2ctPm1zZ0RhdGFbMV0gPSBUcmFuc2xhdGVkUGluTnVtOwogCQlwTXNnLT5tc2dEYXRhWzJdID0gR3JvdXBOdW07CkBAIC0xNDkwLDYgKzE0OTIsNyBAQAogCQllbHNlCiAJCQlzbXNfZXJyKCJzbXNjb3JlX2dwaW9fY29uZmlndXJlIGVycm9yIik7CiAJfQorZnJlZToKIAlrZnJlZShidWZmZXIpOwogCiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oCmluZGV4IGVlYzE4YWEuLjhlY2FkZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmgKQEAgLTIxMiw2ICsyMTIsOCBAQAogI2RlZmluZSBNU0dfU01TX0RBQl9DSEFOTkVMCQkJCTYwNwogI2RlZmluZSBNU0dfU01TX0dFVF9QSURfRklMVEVSX0xJU1RfUkVRCQkJNjA4CiAjZGVmaW5lIE1TR19TTVNfR0VUX1BJRF9GSUxURVJfTElTVF9SRVMJCQk2MDkKKyNkZWZpbmUgTVNHX1NNU19HRVRfU1RBVElTVElDU19SRVMJCQk2MTYKKyNkZWZpbmUgTVNHX1NNU19HRVRfU1RBVElTVElDU19SRVEJCQk2MTUKICNkZWZpbmUgTVNHX1NNU19IT19QRVJfU0xJQ0VTX0lORAkJCTYzMAogI2RlZmluZSBNU0dfU01TX1NFVF9BTlRFTk5BX0NPTkZJR19SRVEJCQk2NTEKICNkZWZpbmUgTVNHX1NNU19TRVRfQU5URU5OQV9DT05GSUdfUkVTCQkJNjUyCkBAIC0zMzksNyArMzQxLDcgQEAKIAogLyogU3RhdGlzdGljcyBpbmZvcm1hdGlvbiByZXR1cm5lZCBhcyByZXNwb25zZSBmb3IKICAqIFNtc0hvc3RBcGlHZXRTdGF0aXN0aWNzX1JlcSAqLwotc3RydWN0IFNNU0hPU1RMSUJfU1RBVElTVElDU19TIHsKK3N0cnVjdCBTTVNIT1NUTElCX1NUQVRJU1RJQ1NfU1QgewogCXUzMiBSZXNlcnZlZDsJCS8qIFJlc2VydmVkICovCiAKIAkvKiBDb21tb24gcGFyYW1ldGVycyAqLwpAQCAtNDI0LDYgKzQyNiw3OSBAQAogCXUzMiBSZXNlcnZlZEZpZWxkc1sxMF07CS8qIFJlc2VydmVkICovCiB9OwogCitzdHJ1Y3QgU21zTXNnU3RhdGlzdGljc0luZm9fU1QgeworCXUzMiBSZXF1ZXN0UmVzdWx0OworCisJc3RydWN0IFNNU0hPU1RMSUJfU1RBVElTVElDU19TVCBTdGF0OworCisJLyogU3BsaXQgdGhlIGNhbGMgb2YgdGhlIFNOUiBpbiBEQUIgKi8KKwl1MzIgU2lnbmFsOyAvKiBkQiAqLworCXUzMiBOb2lzZTsgLyogZEIgKi8KKworfTsKKworc3RydWN0IFNNU0hPU1RMSUJfSVNEQlRfTEFZRVJfU1RBVF9TVCB7CisJLyogUGVyLWxheWVyIGluZm9ybWF0aW9uICovCisJdTMyIENvZGVSYXRlOyAvKiBDb2RlIFJhdGUgZnJvbSBTTVNIT1NUTElCX0NPREVfUkFURV9FVCwKKwkJICAgICAgICogMjU1IG1lYW5zIGxheWVyIGRvZXMgbm90IGV4aXN0ICovCisJdTMyIENvbnN0ZWxsYXRpb247IC8qIENvbnN0ZWxsYXRpb24gZnJvbSBTTVNIT1NUTElCX0NPTlNURUxMQVRJT05fRVQsCisJCQkgICAgKiAyNTUgbWVhbnMgbGF5ZXIgZG9lcyBub3QgZXhpc3QgKi8KKwl1MzIgQkVSOyAvKiBQb3N0IFZpdGVyYmkgQkVSIFsxRS01XSwgMHhGRkZGRkZGRiBpbmRpY2F0ZSBOL0EgKi8KKwl1MzIgQkVSRXJyb3JDb3VudDsgLyogUG9zdCBWaXRlcmJpIEVycm9yIEJpdHMgQ291bnQgKi8KKwl1MzIgQkVSQml0Q291bnQ7IC8qIFBvc3QgVml0ZXJiaSBUb3RhbCBCaXRzIENvdW50ICovCisJdTMyIFByZUJFUjsgLyogUHJlIFZpdGVyYmkgQkVSIFsxRS01XSwgMHhGRkZGRkZGRiBpbmRpY2F0ZSBOL0EgKi8KKwl1MzIgVFNfUEVSOyAvKiBUcmFuc3BvcnQgc3RyZWFtIFBFUiBbJV0sIDB4RkZGRkZGRkYgaW5kaWNhdGUgTi9BICovCisJdTMyIEVycm9yVFNQYWNrZXRzOyAvKiBOdW1iZXIgb2YgZXJyb25lb3VzIHRyYW5zcG9ydC1zdHJlYW0gcGFja2V0cyAqLworCXUzMiBUb3RhbFRTUGFja2V0czsgLyogVG90YWwgbnVtYmVyIG9mIHRyYW5zcG9ydC1zdHJlYW0gcGFja2V0cyAqLworCXUzMiBUSUxkZXB0aEk7IC8qIFRpbWUgaW50ZXJsZWF2ZXIgZGVwdGggSSBwYXJhbWV0ZXIsCisJCQkqIDI1NSBtZWFucyBsYXllciBkb2VzIG5vdCBleGlzdCAqLworCXUzMiBOdW1iZXJPZlNlZ21lbnRzOyAvKiBOdW1iZXIgb2Ygc2VnbWVudHMgaW4gbGF5ZXIgQSwKKwkJCSAgICAgICAqIDI1NSBtZWFucyBsYXllciBkb2VzIG5vdCBleGlzdCAqLworCXUzMiBUTUNDRXJyb3JzOyAvKiBUTUNDIGVycm9ycyAqLworfTsKKworc3RydWN0IFNNU0hPU1RMSUJfU1RBVElTVElDU19JU0RCVF9TVCB7CisJdTMyIFN0YXRpc3RpY3NUeXBlOyAvKiBFbnVtZXJhdG9yIGlkZW50aWZ5aW5nIHRoZSB0eXBlIG9mIHRoZQorCQkJCSogc3RydWN0dXJlLiAgVmFsdWVzIGFyZSB0aGUgc2FtZSBhcworCQkJCSogU01TSE9TVExJQl9ERVZJQ0VfTU9ERVNfRQorCQkJCSoKKwkJCQkqIFRoaXMgZmllbGQgTVVTVCBhbHdheXMgYmUgZmlyc3QgaW4gYW55CisJCQkJKiBzdGF0aXN0aWNzIHN0cnVjdHVyZSAqLworCisJdTMyIEZ1bGxTaXplOyAvKiBUb3RhbCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuZWQgYnkgdGhlIG1vZGVtLgorCQkgICAgICAgKiBJZiB0aGUgc2l6ZSByZXF1ZXN0ZWQgYnkgdGhlIGhvc3QgaXMgc21hbGxlciB0aGFuCisJCSAgICAgICAqIEZ1bGxTaXplLCB0aGUgc3RydWN0IHdpbGwgYmUgdHJ1bmNhdGVkICovCisKKwkvKiBDb21tb24gcGFyYW1ldGVycyAqLworCXUzMiBJc1JmTG9ja2VkOyAvKiAwIC0gbm90IGxvY2tlZCwgMSAtIGxvY2tlZCAqLworCXUzMiBJc0RlbW9kTG9ja2VkOyAvKiAwIC0gbm90IGxvY2tlZCwgMSAtIGxvY2tlZCAqLworCXUzMiBJc0V4dGVybmFsTE5BT247IC8qIDAgLSBleHRlcm5hbCBMTkEgb2ZmLCAxIC0gZXh0ZXJuYWwgTE5BIG9uICovCisKKwkvKiBSZWNlcHRpb24gcXVhbGl0eSAqLworCXMzMiAgU05SOyAvKiBkQiAqLworCXMzMiAgUlNTSTsgLyogZEJtICovCisJczMyICBJbkJhbmRQd3I7IC8qIEluIGJhbmQgcG93ZXIgaW4gZEJNICovCisJczMyICBDYXJyaWVyT2Zmc2V0OyAvKiBDYXJyaWVyIE9mZnNldCBpbiBIeiAqLworCisJLyogVHJhbnNtaXNzaW9uIHBhcmFtZXRlcnMgKi8KKwl1MzIgRnJlcXVlbmN5OyAvKiBGcmVxdWVuY3kgaW4gSHogKi8KKwl1MzIgQmFuZHdpZHRoOyAvKiBCYW5kd2lkdGggaW4gTUh6ICovCisJdTMyIFRyYW5zbWlzc2lvbk1vZGU7IC8qIElTREItVCB0cmFuc21pc3Npb24gbW9kZSAqLworCXUzMiBNb2RlbVN0YXRlOyAvKiAwIC0gQWNxdWlzaXRpb24sIDEgLSBMb2NrZWQgKi8KKwl1MzIgR3VhcmRJbnRlcnZhbDsgLyogR3VhcmQgSW50ZXJ2YWwsIDEgZGl2aWRlZCBieSB2YWx1ZSAqLworCXUzMiBTeXN0ZW1UeXBlOyAvKiBJU0RCLVQgc3lzdGVtIHR5cGUgKElTREItVCAvIElTREItVHNiKSAqLworCXUzMiBQYXJ0aWFsUmVjZXB0aW9uOyAvKiBUUlVFIC0gcGFydGlhbCByZWNlcHRpb24sIEZBTFNFIG90aGVyd2lzZSAqLworCXUzMiBOdW1PZkxheWVyczsgLyogTnVtYmVyIG9mIElTREItVCBsYXllcnMgaW4gdGhlIG5ldHdvcmsgKi8KKworCS8qIFBlci1sYXllciBpbmZvcm1hdGlvbiAqLworCS8qIExheWVycyBBLCBCIGFuZCBDICovCisJc3RydWN0IFNNU0hPU1RMSUJfSVNEQlRfTEFZRVJfU1RBVF9TVAlMYXllckluZm9bM107CisJLyogUGVyLWxheWVyIHN0YXRpc3RpY3MsIHNlZSBTTVNIT1NUTElCX0lTREJUX0xBWUVSX1NUQVRfU1QgKi8KKworCS8qIEludGVyZmFjZSBpbmZvcm1hdGlvbiAqLworCXUzMiBTbXNUb0hvc3RUeEVycm9yczsgLyogVG90YWwgbnVtYmVyIG9mIHRyYW5zbWlzc2lvbiBlcnJvcnMuICovCit9OworCiBzdHJ1Y3QgUElEX1NUQVRJU1RJQ1NfREFUQV9TIHsKIAlzdHJ1Y3QgUElEX0JVUlNUX1MgewogCQl1MzIgc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2R2Yi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKaW5kZXggNjhiZjlmYi4uNWYzOTM5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKQEAgLTExNiw2ICsxMTYsMTE4IEBACiAJfQogfQogCisKK3N0YXRpYyB2b2lkIHNtc2R2Yl91cGRhdGVfZHZiX3N0YXRzKHN0cnVjdCBSRUNFUFRJT05fU1RBVElTVElDU19TICpwUmVjZXB0aW9uRGF0YSwKKwkJCQkgICBzdHJ1Y3QgU01TSE9TVExJQl9TVEFUSVNUSUNTX1NUICpwKQoreworCWlmIChzbXNfZGJnICYgMikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiUmVzZXJ2ZWQgPSAlZCIsIHAtPlJlc2VydmVkKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIklzUmZMb2NrZWQgPSAlZCIsIHAtPklzUmZMb2NrZWQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiSXNEZW1vZExvY2tlZCA9ICVkIiwgcC0+SXNEZW1vZExvY2tlZCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJJc0V4dGVybmFsTE5BT24gPSAlZCIsIHAtPklzRXh0ZXJuYWxMTkFPbik7CisJCXByaW50ayhLRVJOX0RFQlVHICJTTlIgPSAlZCIsIHAtPlNOUik7CisJCXByaW50ayhLRVJOX0RFQlVHICJCRVIgPSAlZCIsIHAtPkJFUik7CisJCXByaW50ayhLRVJOX0RFQlVHICJGSUJfQ1JDID0gJWQiLCBwLT5GSUJfQ1JDKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRTX1BFUiA9ICVkIiwgcC0+VFNfUEVSKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk1GRVIgPSAlZCIsIHAtPk1GRVIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUlNTSSA9ICVkIiwgcC0+UlNTSSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJJbkJhbmRQd3IgPSAlZCIsIHAtPkluQmFuZFB3cik7CisJCXByaW50ayhLRVJOX0RFQlVHICJDYXJyaWVyT2Zmc2V0ID0gJWQiLCBwLT5DYXJyaWVyT2Zmc2V0KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkZyZXF1ZW5jeSA9ICVkIiwgcC0+RnJlcXVlbmN5KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJhbmR3aWR0aCA9ICVkIiwgcC0+QmFuZHdpZHRoKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRyYW5zbWlzc2lvbk1vZGUgPSAlZCIsIHAtPlRyYW5zbWlzc2lvbk1vZGUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTW9kZW1TdGF0ZSA9ICVkIiwgcC0+TW9kZW1TdGF0ZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJHdWFyZEludGVydmFsID0gJWQiLCBwLT5HdWFyZEludGVydmFsKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNvZGVSYXRlID0gJWQiLCBwLT5Db2RlUmF0ZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJMUENvZGVSYXRlID0gJWQiLCBwLT5MUENvZGVSYXRlKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkhpZXJhcmNoeSA9ICVkIiwgcC0+SGllcmFyY2h5KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNvbnN0ZWxsYXRpb24gPSAlZCIsIHAtPkNvbnN0ZWxsYXRpb24pOworCQlwcmludGsoS0VSTl9ERUJVRyAiQnVyc3RTaXplID0gJWQiLCBwLT5CdXJzdFNpemUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQnVyc3REdXJhdGlvbiA9ICVkIiwgcC0+QnVyc3REdXJhdGlvbik7CisJCXByaW50ayhLRVJOX0RFQlVHICJCdXJzdEN5Y2xlVGltZSA9ICVkIiwgcC0+QnVyc3RDeWNsZVRpbWUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQ2FsY3VsYXRlZEJ1cnN0Q3ljbGVUaW1lID0gJWQiLCBwLT5DYWxjdWxhdGVkQnVyc3RDeWNsZVRpbWUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtT2ZSb3dzID0gJWQiLCBwLT5OdW1PZlJvd3MpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtT2ZQYWRkQ29scyA9ICVkIiwgcC0+TnVtT2ZQYWRkQ29scyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJOdW1PZlB1bmN0Q29scyA9ICVkIiwgcC0+TnVtT2ZQdW5jdENvbHMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRXJyb3JUU1BhY2tldHMgPSAlZCIsIHAtPkVycm9yVFNQYWNrZXRzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRvdGFsVFNQYWNrZXRzID0gJWQiLCBwLT5Ub3RhbFRTUGFja2V0cyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJOdW1PZlZhbGlkTXBlVGxicyA9ICVkIiwgcC0+TnVtT2ZWYWxpZE1wZVRsYnMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtT2ZJbnZhbGlkTXBlVGxicyA9ICVkIiwgcC0+TnVtT2ZJbnZhbGlkTXBlVGxicyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJOdW1PZkNvcnJlY3RlZE1wZVRsYnMgPSAlZCIsIHAtPk51bU9mQ29ycmVjdGVkTXBlVGxicyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJCRVJFcnJvckNvdW50ID0gJWQiLCBwLT5CRVJFcnJvckNvdW50KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJFUkJpdENvdW50ID0gJWQiLCBwLT5CRVJCaXRDb3VudCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJTbXNUb0hvc3RUeEVycm9ycyA9ICVkIiwgcC0+U21zVG9Ib3N0VHhFcnJvcnMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUHJlQkVSID0gJWQiLCBwLT5QcmVCRVIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiQ2VsbElkID0gJWQiLCBwLT5DZWxsSWQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRHZiaFNydkluZEhQID0gJWQiLCBwLT5EdmJoU3J2SW5kSFApOworCQlwcmludGsoS0VSTl9ERUJVRyAiRHZiaFNydkluZExQID0gJWQiLCBwLT5EdmJoU3J2SW5kTFApOworCQlwcmludGsoS0VSTl9ERUJVRyAiTnVtTVBFUmVjZWl2ZWQgPSAlZCIsIHAtPk51bU1QRVJlY2VpdmVkKTsKKwl9CisKKwlwUmVjZXB0aW9uRGF0YS0+SXNEZW1vZExvY2tlZCA9IHAtPklzRGVtb2RMb2NrZWQ7CisKKwlwUmVjZXB0aW9uRGF0YS0+U05SID0gcC0+U05SOworCXBSZWNlcHRpb25EYXRhLT5CRVIgPSBwLT5CRVI7CisJcFJlY2VwdGlvbkRhdGEtPkJFUkVycm9yQ291bnQgPSBwLT5CRVJFcnJvckNvdW50OworCXBSZWNlcHRpb25EYXRhLT5JbkJhbmRQd3IgPSBwLT5JbkJhbmRQd3I7CisJcFJlY2VwdGlvbkRhdGEtPkVycm9yVFNQYWNrZXRzID0gcC0+RXJyb3JUU1BhY2tldHM7Cit9OworCisKK3N0YXRpYyB2b2lkIHNtc2R2Yl91cGRhdGVfaXNkYnRfc3RhdHMoc3RydWN0IFJFQ0VQVElPTl9TVEFUSVNUSUNTX1MgKnBSZWNlcHRpb25EYXRhLAorCQkJCSAgICBzdHJ1Y3QgU01TSE9TVExJQl9TVEFUSVNUSUNTX0lTREJUX1NUICpwKQoreworCWludCBpOworCisJaWYgKHNtc19kYmcgJiAyKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJJc1JmTG9ja2VkID0gJWQiLCBwLT5Jc1JmTG9ja2VkKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIklzRGVtb2RMb2NrZWQgPSAlZCIsIHAtPklzRGVtb2RMb2NrZWQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiSXNFeHRlcm5hbExOQU9uID0gJWQiLCBwLT5Jc0V4dGVybmFsTE5BT24pOworCQlwcmludGsoS0VSTl9ERUJVRyAiU05SID0gJWQiLCBwLT5TTlIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUlNTSSA9ICVkIiwgcC0+UlNTSSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJJbkJhbmRQd3IgPSAlZCIsIHAtPkluQmFuZFB3cik7CisJCXByaW50ayhLRVJOX0RFQlVHICJDYXJyaWVyT2Zmc2V0ID0gJWQiLCBwLT5DYXJyaWVyT2Zmc2V0KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkZyZXF1ZW5jeSA9ICVkIiwgcC0+RnJlcXVlbmN5KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJhbmR3aWR0aCA9ICVkIiwgcC0+QmFuZHdpZHRoKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRyYW5zbWlzc2lvbk1vZGUgPSAlZCIsIHAtPlRyYW5zbWlzc2lvbk1vZGUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTW9kZW1TdGF0ZSA9ICVkIiwgcC0+TW9kZW1TdGF0ZSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJHdWFyZEludGVydmFsID0gJWQiLCBwLT5HdWFyZEludGVydmFsKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlN5c3RlbVR5cGUgPSAlZCIsIHAtPlN5c3RlbVR5cGUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUGFydGlhbFJlY2VwdGlvbiA9ICVkIiwgcC0+UGFydGlhbFJlY2VwdGlvbik7CisJCXByaW50ayhLRVJOX0RFQlVHICJOdW1PZkxheWVycyA9ICVkIiwgcC0+TnVtT2ZMYXllcnMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiU21zVG9Ib3N0VHhFcnJvcnMgPSAlZCIsIHAtPlNtc1RvSG9zdFR4RXJyb3JzKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IENvZGVSYXRlID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uQ29kZVJhdGUpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkOiBDb25zdGVsbGF0aW9uID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uQ29uc3RlbGxhdGlvbik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IEJFUiA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLkJFUik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IEJFUkVycm9yQ291bnQgPSAlZCIsIGksIHAtPkxheWVySW5mb1tpXS5CRVJFcnJvckNvdW50KTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlZDogQkVSQml0Q291bnQgPSAlZCIsIGksIHAtPkxheWVySW5mb1tpXS5CRVJCaXRDb3VudCk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IFByZUJFUiA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLlByZUJFUik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IFRTX1BFUiA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLlRTX1BFUik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJWQ6IEVycm9yVFNQYWNrZXRzID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uRXJyb3JUU1BhY2tldHMpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkOiBUb3RhbFRTUGFja2V0cyA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLlRvdGFsVFNQYWNrZXRzKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlZDogVElMZGVwdGhJID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uVElMZGVwdGhJKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlZDogTnVtYmVyT2ZTZWdtZW50cyA9ICVkIiwgaSwgcC0+TGF5ZXJJbmZvW2ldLk51bWJlck9mU2VnbWVudHMpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVkOiBUTUNDRXJyb3JzID0gJWQiLCBpLCBwLT5MYXllckluZm9baV0uVE1DQ0Vycm9ycyk7CisJCX0KKwl9CisKKwlwUmVjZXB0aW9uRGF0YS0+SXNEZW1vZExvY2tlZCA9IHAtPklzRGVtb2RMb2NrZWQ7CisKKwlwUmVjZXB0aW9uRGF0YS0+U05SID0gcC0+U05SOworCXBSZWNlcHRpb25EYXRhLT5JbkJhbmRQd3IgPSBwLT5JbkJhbmRQd3I7CisKKwlwUmVjZXB0aW9uRGF0YS0+RXJyb3JUU1BhY2tldHMgPSAwOworCXBSZWNlcHRpb25EYXRhLT5CRVIgPSAwOworCXBSZWNlcHRpb25EYXRhLT5CRVJFcnJvckNvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXBSZWNlcHRpb25EYXRhLT5CRVIgKz0gcC0+TGF5ZXJJbmZvW2ldLkJFUjsKKwkJcFJlY2VwdGlvbkRhdGEtPkJFUkVycm9yQ291bnQgKz0gcC0+TGF5ZXJJbmZvW2ldLkJFUkVycm9yQ291bnQ7CisJCXBSZWNlcHRpb25EYXRhLT5FcnJvclRTUGFja2V0cyArPSBwLT5MYXllckluZm9baV0uRXJyb3JUU1BhY2tldHM7CisJfQorfQorCiBzdGF0aWMgaW50IHNtc2R2Yl9vbnJlc3BvbnNlKHZvaWQgKmNvbnRleHQsIHN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90ICpjYikKIHsKIAlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQgPSAoc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqKSBjb250ZXh0OwpAQCAtMTM0LDYgKzI0Niw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBNU0dfU01TX1JGX1RVTkVfUkVTOgorCWNhc2UgTVNHX1NNU19JU0RCVF9UVU5FX1JFUzoKIAkJY29tcGxldGUoJmNsaWVudC0+dHVuZV9kb25lKTsKIAkJYnJlYWs7CiAKQEAgLTIxNyw2ICszMzAsNDAgQEAKIAkJaXNfc3RhdHVzX3VwZGF0ZSA9IHRydWU7CiAJCWJyZWFrOwogCX0KKwljYXNlIE1TR19TTVNfR0VUX1NUQVRJU1RJQ1NfUkVTOiB7CisJCXVuaW9uIHsKKwkJCXN0cnVjdCBTTVNIT1NUTElCX1NUQVRJU1RJQ1NfSVNEQlRfU1QgIGlzZGJ0OworCQkJc3RydWN0IFNtc01zZ1N0YXRpc3RpY3NJbmZvX1NUICAgICAgICAgZHZiOworCQl9ICpwID0gKHZvaWQgKikgKHBoZHIgKyAxKTsKKwkJc3RydWN0IFJFQ0VQVElPTl9TVEFUSVNUSUNTX1MgKnBSZWNlcHRpb25EYXRhID0KKwkJCQkmY2xpZW50LT5zbXNfc3RhdF9kdmIuUmVjZXB0aW9uRGF0YTsKKworCQlzbXNfaW5mbygiTVNHX1NNU19HRVRfU1RBVElTVElDU19SRVMiKTsKKworCQlpc19zdGF0dXNfdXBkYXRlID0gdHJ1ZTsKKworCQlzd2l0Y2ggKHNtc2NvcmVfZ2V0X2RldmljZV9tb2RlKGNsaWVudC0+Y29yZWRldikpIHsKKwkJY2FzZSBERVZJQ0VfTU9ERV9JU0RCVDoKKwkJY2FzZSBERVZJQ0VfTU9ERV9JU0RCVF9CREE6CisJCQlzbXNkdmJfdXBkYXRlX2lzZGJ0X3N0YXRzKHBSZWNlcHRpb25EYXRhLCAmcC0+aXNkYnQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzbXNkdmJfdXBkYXRlX2R2Yl9zdGF0cyhwUmVjZXB0aW9uRGF0YSwgJnAtPmR2Yi5TdGF0KTsKKwkJfQorCQlpZiAoIXBSZWNlcHRpb25EYXRhLT5Jc0RlbW9kTG9ja2VkKSB7CisJCQlwUmVjZXB0aW9uRGF0YS0+U05SID0gMDsKKwkJCXBSZWNlcHRpb25EYXRhLT5CRVIgPSAwOworCQkJcFJlY2VwdGlvbkRhdGEtPkJFUkVycm9yQ291bnQgPSAwOworCQkJcFJlY2VwdGlvbkRhdGEtPkluQmFuZFB3ciA9IDA7CisJCQlwUmVjZXB0aW9uRGF0YS0+RXJyb3JUU1BhY2tldHMgPSAwOworCQl9CisKKwkJY29tcGxldGUoJmNsaWVudC0+dHVuZV9kb25lKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXNtc19pbmZvKCJVbmhhbmRsZWQgbWVzc2FnZSAlZCIsIHBoZHItPm1zZ1R5cGUpOworCiAJfQogCXNtc2NvcmVfcHV0YnVmZmVyKGNsaWVudC0+Y29yZWRldiwgY2IpOwogCkBAIC0yMzMsMTAgKzM4MCwxMCBAQAogCQkJCQkJRFZCM19FVkVOVF9VTkNfRVJSKTsKIAogCQl9IGVsc2UgewotCQkJLypjbGllbnQtPmZlX3N0YXR1cyA9Ci0JCQkJKHBoZHItPm1zZ1R5cGUgPT0gTVNHX1NNU19OT19TSUdOQUxfSU5EKSA/Ci0JCQkJMCA6IEZFX0hBU19TSUdOQUw7Ki8KLQkJCWNsaWVudC0+ZmVfc3RhdHVzID0gMDsKKwkJCWlmIChjbGllbnQtPnNtc19zdGF0X2R2Yi5SZWNlcHRpb25EYXRhLklzUmZMb2NrZWQpCisJCQkJY2xpZW50LT5mZV9zdGF0dXMgPSBGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX0NBUlJJRVI7CisJCQllbHNlCisJCQkJY2xpZW50LT5mZV9zdGF0dXMgPSAwOwogCQkJc21zX2JvYXJkX2R2YjNfZXZlbnQoY2xpZW50LCBEVkIzX0VWRU5UX0ZFX1VOTE9DSyk7CiAJCX0KIAl9CkBAIC0zMjUsNiArNDcyLDIwIEBACiAJCQkJCQkwIDogLUVUSU1FOwogfQogCitzdGF0aWMgaW50IHNtc2R2Yl9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQpCit7CisJaW50IHJjOworCXN0cnVjdCBTbXNNc2dIZHJfU1QgTXNnID0geyBNU0dfU01TX0dFVF9TVEFUSVNUSUNTX1JFUSwKKwkJCQkgICAgRFZCVF9CREFfQ09OVFJPTF9NU0dfSUQsCisJCQkJICAgIEhJRl9UQVNLLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IFNtc01zZ0hkcl9TVCksIDAgfTsKKworCXJjID0gc21zZHZiX3NlbmRyZXF1ZXN0X2FuZF93YWl0KGNsaWVudCwgJk1zZywgc2l6ZW9mKE1zZyksCisJCQkJCSAgJmNsaWVudC0+dHVuZV9kb25lKTsKKworCXJldHVybiByYzsKK30KKwogc3RhdGljIGlubGluZSBpbnQgbGVkX2ZlZWRiYWNrKHN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudCkKIHsKIAlpZiAoY2xpZW50LT5mZV9zdGF0dXMgJiBGRV9IQVNfTE9DSykKQEAgLTMzNywzMyArNDk4LDQzIEBACiAKIHN0YXRpYyBpbnQgc21zZHZiX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdCkKIHsKKwlpbnQgcmM7CiAJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50OwogCWNsaWVudCA9IGNvbnRhaW5lcl9vZihmZSwgc3RydWN0IHNtc2R2Yl9jbGllbnRfdCwgZnJvbnRlbmQpOwogCisJcmMgPSBzbXNkdmJfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QoY2xpZW50KTsKKwogCSpzdGF0ID0gY2xpZW50LT5mZV9zdGF0dXM7CiAKIAlsZWRfZmVlZGJhY2soY2xpZW50KTsKIAotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBzbXNkdmJfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQogeworCWludCByYzsKIAlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQ7CiAJY2xpZW50ID0gY29udGFpbmVyX29mKGZlLCBzdHJ1Y3Qgc21zZHZiX2NsaWVudF90LCBmcm9udGVuZCk7CiAKKwlyYyA9IHNtc2R2Yl9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChjbGllbnQpOworCiAJKmJlciA9IGNsaWVudC0+c21zX3N0YXRfZHZiLlJlY2VwdGlvbkRhdGEuQkVSOwogCiAJbGVkX2ZlZWRiYWNrKGNsaWVudCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgc21zZHZiX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnN0cmVuZ3RoKQogeworCWludCByYzsKKwogCXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudDsKIAljbGllbnQgPSBjb250YWluZXJfb2YoZmUsIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QsIGZyb250ZW5kKTsKIAorCXJjID0gc21zZHZiX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KGNsaWVudCk7CisKIAlpZiAoY2xpZW50LT5zbXNfc3RhdF9kdmIuUmVjZXB0aW9uRGF0YS5JbkJhbmRQd3IgPCAtOTUpCiAJCSpzdHJlbmd0aCA9IDA7CiAJCWVsc2UgaWYgKGNsaWVudC0+c21zX3N0YXRfZHZiLlJlY2VwdGlvbkRhdGEuSW5CYW5kUHdyID4gLTI5KQpAQCAtMzc1LDMxICs1NDYsMzcgQEAKIAogCWxlZF9mZWVkYmFjayhjbGllbnQpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHNtc2R2Yl9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCiB7CisJaW50IHJjOwogCXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudDsKIAljbGllbnQgPSBjb250YWluZXJfb2YoZmUsIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QsIGZyb250ZW5kKTsKIAorCXJjID0gc21zZHZiX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KGNsaWVudCk7CisKIAkqc25yID0gY2xpZW50LT5zbXNfc3RhdF9kdmIuUmVjZXB0aW9uRGF0YS5TTlI7CiAKIAlsZWRfZmVlZGJhY2soY2xpZW50KTsKIAotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBzbXNkdmJfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKIHsKKwlpbnQgcmM7CiAJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50OwogCWNsaWVudCA9IGNvbnRhaW5lcl9vZihmZSwgc3RydWN0IHNtc2R2Yl9jbGllbnRfdCwgZnJvbnRlbmQpOwogCisJcmMgPSBzbXNkdmJfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QoY2xpZW50KTsKKwogCSp1Y2Jsb2NrcyA9IGNsaWVudC0+c21zX3N0YXRfZHZiLlJlY2VwdGlvbkRhdGEuRXJyb3JUU1BhY2tldHM7CiAKIAlsZWRfZmVlZGJhY2soY2xpZW50KTsKIAotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBzbXNkdmJfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCkBAIC00MTMsOSArNTkwLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc21zZHZiX3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKLQkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKK3N0YXRpYyBpbnQgc21zZHZiX2R2YnRfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7CisJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CiAJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50ID0KIAkJY29udGFpbmVyX29mKGZlLCBzdHJ1Y3Qgc21zZHZiX2NsaWVudF90LCBmcm9udGVuZCk7CiAKQEAgLTQyOSwyNCArNjA3LDMzIEBACiAJY2xpZW50LT5mZV9zdGF0dXMgPSBGRV9IQVNfU0lHTkFMOwogCWNsaWVudC0+ZXZlbnRfZmVfc3RhdGUgPSAtMTsKIAljbGllbnQtPmV2ZW50X3VuY19zdGF0ZSA9IC0xOworCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZGVsaXZlcnlfc3lzdGVtID0gU1lTX0RWQlQ7CiAKIAlNc2cuTXNnLm1zZ1NyY0lkID0gRFZCVF9CREFfQ09OVFJPTF9NU0dfSUQ7CiAJTXNnLk1zZy5tc2dEc3RJZCA9IEhJRl9UQVNLOwogCU1zZy5Nc2cubXNnRmxhZ3MgPSAwOwogCU1zZy5Nc2cubXNnVHlwZSA9IE1TR19TTVNfUkZfVFVORV9SRVE7CiAJTXNnLk1zZy5tc2dMZW5ndGggPSBzaXplb2YoTXNnKTsKLQlNc2cuRGF0YVswXSA9IGZlcC0+ZnJlcXVlbmN5OworCU1zZy5EYXRhWzBdID0gYy0+ZnJlcXVlbmN5OwogCU1zZy5EYXRhWzJdID0gMTIwMDAwMDA7CiAKLQlzbXNfZGVidWcoImZyZXEgJWQgYmFuZCAlZCIsCi0JCSAgZmVwLT5mcmVxdWVuY3ksIGZlcC0+dS5vZmRtLmJhbmR3aWR0aCk7CisJc21zX2luZm8oIiVzOiBmcmVxICVkIGJhbmQgJWQiLCBfX2Z1bmNfXywgYy0+ZnJlcXVlbmN5LAorCQkgYy0+YmFuZHdpZHRoX2h6KTsKIAotCXN3aXRjaCAoZmVwLT51Lm9mZG0uYmFuZHdpZHRoKSB7Ci0JY2FzZSBCQU5EV0lEVEhfOF9NSFo6IE1zZy5EYXRhWzFdID0gQldfOF9NSFo7IGJyZWFrOwotCWNhc2UgQkFORFdJRFRIXzdfTUhaOiBNc2cuRGF0YVsxXSA9IEJXXzdfTUhaOyBicmVhazsKLQljYXNlIEJBTkRXSURUSF82X01IWjogTXNnLkRhdGFbMV0gPSBCV182X01IWjsgYnJlYWs7Ci0JY2FzZSBCQU5EV0lEVEhfQVVUTzogcmV0dXJuIC1FT1BOT1RTVVBQOwotCWRlZmF1bHQ6IHJldHVybiAtRUlOVkFMOworCXN3aXRjaCAoYy0+YmFuZHdpZHRoX2h6IC8gMTAwMDAwMCkgeworCWNhc2UgODoKKwkJTXNnLkRhdGFbMV0gPSBCV184X01IWjsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlNc2cuRGF0YVsxXSA9IEJXXzdfTUhaOworCQlicmVhazsKKwljYXNlIDY6CisJCU1zZy5EYXRhWzFdID0gQldfNl9NSFo7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAkvKiBEaXNhYmxlIExOQSwgaWYgYW55LiBBbiBlcnJvciBpcyByZXR1cm5lZCBpZiBubyBMTkEgaXMgcHJlc2VudCAqLwogCXJldCA9IHNtc19ib2FyZF9sbmFfY29udHJvbChjbGllbnQtPmNvcmVkZXYsIDApOwpAQCAtNDcwLDYgKzY1Nyw5MCBAQAogCQkJCQkgICAmY2xpZW50LT50dW5lX2RvbmUpOwogfQogCitzdGF0aWMgaW50IHNtc2R2Yl9pc2RidF9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CisJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50ID0KKwkJY29udGFpbmVyX29mKGZlLCBzdHJ1Y3Qgc21zZHZiX2NsaWVudF90LCBmcm9udGVuZCk7CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgU21zTXNnSGRyX1NUCU1zZzsKKwkJdTMyCQlEYXRhWzRdOworCX0gTXNnOworCisJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfSVNEQlQ7CisKKwlNc2cuTXNnLm1zZ1NyY0lkICA9IERWQlRfQkRBX0NPTlRST0xfTVNHX0lEOworCU1zZy5Nc2cubXNnRHN0SWQgID0gSElGX1RBU0s7CisJTXNnLk1zZy5tc2dGbGFncyAgPSAwOworCU1zZy5Nc2cubXNnVHlwZSAgID0gTVNHX1NNU19JU0RCVF9UVU5FX1JFUTsKKwlNc2cuTXNnLm1zZ0xlbmd0aCA9IHNpemVvZihNc2cpOworCisJaWYgKGMtPmlzZGJ0X3NiX3NlZ21lbnRfaWR4ID09IC0xKQorCQljLT5pc2RidF9zYl9zZWdtZW50X2lkeCA9IDA7CisKKwlzd2l0Y2ggKGMtPmlzZGJ0X3NiX3NlZ21lbnRfY291bnQpIHsKKwljYXNlIDM6CisJCU1zZy5EYXRhWzFdID0gQldfSVNEQlRfM1NFRzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlNc2cuRGF0YVsxXSA9IEJXX0lTREJUXzFTRUc7CisJCWJyZWFrOworCWNhc2UgMDoJLyogQVVUTyAqLworCQlzd2l0Y2ggKGMtPmJhbmR3aWR0aF9oeiAvIDEwMDAwMDApIHsKKwkJY2FzZSA4OgorCQljYXNlIDc6CisJCQljLT5pc2RidF9zYl9zZWdtZW50X2NvdW50ID0gMzsKKwkJCU1zZy5EYXRhWzFdID0gQldfSVNEQlRfM1NFRzsKKwkJCWJyZWFrOworCQljYXNlIDY6CisJCQljLT5pc2RidF9zYl9zZWdtZW50X2NvdW50ID0gMTsKKwkJCU1zZy5EYXRhWzFdID0gQldfSVNEQlRfMVNFRzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OiAvKiBBc3N1bWVzIDYgTUhaIGJ3ICovCisJCQljLT5pc2RidF9zYl9zZWdtZW50X2NvdW50ID0gMTsKKwkJCWMtPmJhbmR3aWR0aF9oeiA9IDYwMDA7CisJCQlNc2cuRGF0YVsxXSA9IEJXX0lTREJUXzFTRUc7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlzbXNfaW5mbygiU2VnbWVudCBjb3VudCAlZCBub3Qgc3VwcG9ydGVkIiwgYy0+aXNkYnRfc2Jfc2VnbWVudF9jb3VudCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCU1zZy5EYXRhWzBdID0gYy0+ZnJlcXVlbmN5OworCU1zZy5EYXRhWzJdID0gMTIwMDAwMDA7CisJTXNnLkRhdGFbM10gPSBjLT5pc2RidF9zYl9zZWdtZW50X2lkeDsKKworCXNtc19pbmZvKCIlczogZnJlcSAlZCBzZWd3aWR0aCAlZCBzZWdpbmRleCAlZFxuIiwgX19mdW5jX18sCisJCSBjLT5mcmVxdWVuY3ksIGMtPmlzZGJ0X3NiX3NlZ21lbnRfY291bnQsCisJCSBjLT5pc2RidF9zYl9zZWdtZW50X2lkeCk7CisKKwlyZXR1cm4gc21zZHZiX3NlbmRyZXF1ZXN0X2FuZF93YWl0KGNsaWVudCwgJk1zZywgc2l6ZW9mKE1zZyksCisJCQkJCSAgICZjbGllbnQtPnR1bmVfZG9uZSk7Cit9CisKK3N0YXRpYyBpbnQgc21zZHZiX3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKK3sKKwlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQgPQorCQljb250YWluZXJfb2YoZmUsIHN0cnVjdCBzbXNkdmJfY2xpZW50X3QsIGZyb250ZW5kKTsKKwlzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiA9IGNsaWVudC0+Y29yZWRldjsKKworCXN3aXRjaCAoc21zY29yZV9nZXRfZGV2aWNlX21vZGUoY29yZWRldikpIHsKKwljYXNlIERFVklDRV9NT0RFX0RWQlQ6CisJY2FzZSBERVZJQ0VfTU9ERV9EVkJUX0JEQToKKwkJcmV0dXJuIHNtc2R2Yl9kdmJ0X3NldF9mcm9udGVuZChmZSwgZmVwKTsKKwljYXNlIERFVklDRV9NT0RFX0lTREJUOgorCWNhc2UgREVWSUNFX01PREVfSVNEQlRfQkRBOgorCQlyZXR1cm4gc21zZHZiX2lzZGJ0X3NldF9mcm9udGVuZChmZSwgZmVwKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKIHN0YXRpYyBpbnQgc21zZHZiX2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKIHsKQEAgLTU1NywxMyArODI4LDYgQEAKIAkvKiBkZXZpY2UgcmVtb3ZhbCBoYW5kbGVkIGJ5IG9ucmVtb3ZlIGNhbGxiYWNrICovCiAJaWYgKCFhcnJpdmFsKQogCQlyZXR1cm4gMDsKLQotCWlmIChzbXNjb3JlX2dldF9kZXZpY2VfbW9kZShjb3JlZGV2KSAhPSBERVZJQ0VfTU9ERV9EVkJUX0JEQSkgewotCQlzbXNfZXJyKCJTTVMgRGV2aWNlIG1vZGUgaXMgbm90IHNldCBmb3IgIgotCQkJIkRWQiBvcGVyYXRpb24uIik7Ci0JCXJldHVybiAwOwotCX0KLQogCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbXNkdmJfY2xpZW50X3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNsaWVudCkgewogCQlzbXNfZXJyKCJrbWFsbG9jKCkgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNpci5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zaXIuYwppbmRleCBlM2Q3NzZmLi5hNTZlYWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNpci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2lyLmMKQEAgLTg1LDkgKzg1LDkgQEAKIAkJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi11MzIgaXJfcG9zOwotdTMyCWlyX3dvcmQ7Ci11MzIgaXJfdG9nZ2xlOworc3RhdGljIHUzMiBpcl9wb3M7CitzdGF0aWMgdTMyIGlyX3dvcmQ7CitzdGF0aWMgdTMyIGlyX3RvZ2dsZTsKIAogI2RlZmluZSBSQzVfUFVTSF9CSVQoZHN0LCBiaXQsIHBvcykJXAogCXsgZHN0IDw8PSAxOyBkc3QgfD0gYml0OyBwb3MrKzsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2lyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYwppbmRleCAyM2ExYzYzLi5iMDcwZTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYwpAQCAtMjY4LDggKzI2OCw4IEBACiAKIAogLyogL3Byb2MvYXY3MTEwX2lyIGludGVyZmFjZSAqLwotc3RhdGljIGludCBhdjcxMTBfaXJfd3JpdGVfcHJvYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCQl1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIHNzaXplX3QgYXY3MTEwX2lyX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJY2hhciAqcGFnZTsKIAl1MzIgaXJfY29uZmlnOwpAQCAtMzA5LDYgKzMwOSwxMCBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXY3MTEwX2lyX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLndyaXRlCQk9IGF2NzExMF9pcl9wcm9jX3dyaXRlLAorfTsKIAogLyogaW50ZXJydXB0IGhhbmRsZXIgKi8KIHN0YXRpYyB2b2lkIGlyX2hhbmRsZXIoc3RydWN0IGF2NzExMCAqYXY3MTEwLCB1MzIgaXJjb20pCkBAIC0zNjgsMTEgKzM3Miw5IEBACiAJaW5wdXRfZGV2LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpICZhdjcxMTAtPmlyOwogCiAJaWYgKGF2X2NudCA9PSAxKSB7Ci0JCWUgPSBjcmVhdGVfcHJvY19lbnRyeSgiYXY3MTEwX2lyIiwgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLCBOVUxMKTsKLQkJaWYgKGUpIHsKLQkJCWUtPndyaXRlX3Byb2MgPSBhdjcxMTBfaXJfd3JpdGVfcHJvYzsKKwkJZSA9IHByb2NfY3JlYXRlKCJhdjcxMTBfaXIiLCBTX0lXVVNSLCBOVUxMLCAmYXY3MTEwX2lyX3Byb2NfZm9wcyk7CisJCWlmIChlKQogCQkJZS0+c2l6ZSA9IDQgKyAyNTYgKiBzaXplb2YodTE2KTsKLQkJfQogCX0KIAogCXRhc2tsZXRfaW5pdCgmYXY3MTEwLT5pci5pcl90YXNrbGV0LCBhdjcxMTBfZW1pdF9rZXksICh1bnNpZ25lZCBsb25nKSAmYXY3MTEwLT5pcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCmluZGV4IDk3ODJlMDUuLjQ5YzJhODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAlidWRnZXRfY2ktPmlyLnRpbWVyX2tleXVwLmZ1bmN0aW9uID0gbXNwNDMwX2lyX2tleXVwOwogCWJ1ZGdldF9jaS0+aXIudGltZXJfa2V5dXAuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSAmYnVkZ2V0X2NpLT5pcjsKIAlidWRnZXRfY2ktPmlyLmxhc3RfcmF3ID0gMHhmZmZmOyAvKiBBbiBpbXBvc3NpYmxlIHZhbHVlICovCi0JZXJyb3IgPSBpcl9pbnB1dF9yZWdpc3RlcihpbnB1dF9kZXYsIGlyX2NvZGVzKTsKKwllcnJvciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlucHV0X2RldiwgaXJfY29kZXMsIE5VTEwpOwogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgImJ1ZGdldF9jaTogY291bGQgbm90IGluaXQgZHJpdmVyIGZvciBJUiBkZXZpY2UgKGNvZGUgJWQpXG4iLCBlcnJvcik7CiAJCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKaW5kZXggZTQ4MzgwYy4uOWZkZjI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKQEAgLTQzMyw5ICs0MzMsOCBAQAogCS5kZW1vZF9tb2RlCQk9IFNUVjA5MHhfU0lOR0xFLAogCS5jbGtfbW9kZQkJPSBTVFYwOTB4X0NMS19FWFQsCiAKLQkueHRhbAkJCT0gMjcwMDAwMDAsCisJLnh0YWwJCQk9IDEzNTAwMDAwLAogCS5hZGRyZXNzCQk9IDB4NjgsCi0JLnJlZl9jbGsJCT0gMjcwMDAwMDAsCiAKIAkudHMxX21vZGUJCT0gU1RWMDkweF9UU01PREVfRFZCQ0ksCiAJLnRzMl9tb2RlCQk9IFNUVjA5MHhfVFNNT0RFX1NFUklBTF9DT05USU5VT1VTLApAQCAtNDU3LDYgKzQ1Niw3IEBACiBzdGF0aWMgc3RydWN0IHN0djYxMTB4X2NvbmZpZyB0dDE2MDBfc3R2NjExMHhfY29uZmlnID0gewogCS5hZGRyCQkJPSAweDYwLAogCS5yZWZjbGsJCQk9IDI3MDAwMDAwLAorCS5jbGtfZGl2CQk9IDIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlzbDY0MjNfY29uZmlnIHR0MTYwMF9pc2w2NDIzX2NvbmZpZyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZwppbmRleCAzZjQwZjM3Li44MzU2N2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCkBAIC00MTcsNiArNDE3LDE4IEBACiAJICBTYXkgWSBoZXJlIGlmIFRFQTU3NjQgaGF2ZSBhIDMyNzY4IEh6IGNyeXN0YWwgaW4gY2lyY3VpdCwgc2F5IE4KIAkgIGhlcmUgaWYgVEVBNTc2NCByZWZlcmVuY2UgZnJlcXVlbmN5IGlzIGNvbm5lY3RlZCBpbiBGUkVRSU4uCiAKK2NvbmZpZyBSQURJT19TQUE3NzA2SAorCXRyaXN0YXRlICJTQUE3NzA2SCBDYXIgUmFkaW8gRFNQIgorCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDIKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgU0FBNzcwNkggQ2FyIHJhZGlvIERpZ2l0YWwKKwkgIFNpZ25hbCBQcm9jZXNzb3IsIGZvdW5kIGZvciBpbnN0YW5jZSBvbiB0aGUgUnVzc2VsbHZpbGxlIGRldmVsb3BtZW50CisJICBib2FyZC4gT24gdGhlIHJ1c3NlbGx2aWxsZSB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCB0byBpbnRlcm5hbAorCSAgdGltYmVyZGFsZSBJMkMgYnVzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBTQUE3NzA2SC4KKwogY29uZmlnIFJBRElPX1RFRjY4NjIKIAl0cmlzdGF0ZSAiVEVGNjg2MiBDYXIgUmFkaW8gRW5oYW5jZWQgU2VsZWN0aXZpdHkgVHVuZXIiCiAJZGVwZW5kcyBvbiBJMkMgJiYgVklERU9fVjRMMgpAQCAtNDI5LDQgKzQ0MSwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgVEVGNjg2Mi4KIAorY29uZmlnIFJBRElPX1RJTUJFUkRBTEUKKwl0cmlzdGF0ZSAiRW5hYmxlIHRoZSBUaW1iZXJkYWxlIHJhZGlvIGRyaXZlciIKKwlkZXBlbmRzIG9uIE1GRF9USU1CRVJEQUxFICYmIFZJREVPX1Y0TDIKKwlkZXBlbmRzIG9uIEkyQwkjIGZvciBSQURJT19TQUE3NzA2SAorCXNlbGVjdCBSQURJT19URUY2ODYyCisJc2VsZWN0IFJBRElPX1NBQTc3MDZICisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIGtpbmQgb2YgdW1icmVsbGEgZHJpdmVyIGZvciB0aGUgUmFkaW8gVHVuZXIgYW5kIERTUAorCSAgZm91bmQgYmVoaW5kIHRoZSBUaW1iZXJkYWxlIEZQR0Egb24gdGhlIFJ1c3NlbGx2aWxsZSBib2FyZC4KKwkgIEVuYWJsaW5nIHRoaXMgZHJpdmVyIHdpbGwgYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIERTUCBhbmQgdHVuZXIuCisKIGVuZGlmICMgUkFESU9fQURBUFRFUlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3JhZGlvL01ha2VmaWxlCmluZGV4IDAxOTIyYWQuLmY2MTU1ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9NYWtlZmlsZQpAQCAtMjMsNiArMjMsOCBAQAogb2JqLSQoQ09ORklHX1JBRElPX1NJNDcwWCkgKz0gc2k0NzB4Lwogb2JqLSQoQ09ORklHX1VTQl9NUjgwMCkgKz0gcmFkaW8tbXI4MDAubwogb2JqLSQoQ09ORklHX1JBRElPX1RFQTU3NjQpICs9IHJhZGlvLXRlYTU3NjQubworb2JqLSQoQ09ORklHX1JBRElPX1NBQTc3MDZIKSArPSBzYWE3NzA2aC5vCiBvYmotJChDT05GSUdfUkFESU9fVEVGNjg2MikgKz0gdGVmNjg2Mi5vCitvYmotJChDT05GSUdfUkFESU9fVElNQkVSREFMRSkgKz0gcmFkaW8tdGltYi5vCiAKIEVYVFJBX0NGTEFHUyArPSAtSXNvdW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRpbWIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGltYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZTQ1N2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRpbWIuYwpAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAqIHJhZGlvLXRpbWIuYyBUaW1iZXJkYWxlIEZQR0EgUmFkaW8gZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvdGltYl9yYWRpby5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJ0aW1iLXJhZGlvIgorCitzdHJ1Y3QgdGltYnJhZGlvIHsKKwlzdHJ1Y3QgdGltYl9yYWRpb19wbGF0Zm9ybV9kYXRhCXBkYXRhOworCXN0cnVjdCB2NGwyX3N1YmRldgkqc2RfdHVuZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2CSpzZF9kc3A7CisJc3RydWN0IHZpZGVvX2RldmljZQl2aWRlb19kZXY7CisJc3RydWN0IHY0bDJfZGV2aWNlCXY0bDJfZGV2OworfTsKKworCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCit7CisJc3RybGNweSh2LT5kcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2Yodi0+ZHJpdmVyKSk7CisJc3RybGNweSh2LT5jYXJkLCAiVGltYmVyZGFsZSBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7CisJc25wcmludGYodi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbyksICJwbGF0Zm9ybToiRFJJVkVSX05BTUUpOworCXYtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTigwLCAwLCAxKTsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl90dW5lciAqdikKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX3R1bmVyLCB0dW5lciwgZ190dW5lciwgdik7Cit9CisKK3N0YXRpYyBpbnQgdGltYnJhZGlvX3ZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCXN0cnVjdCB2NGwyX3R1bmVyICp2KQoreworCXN0cnVjdCB0aW1icmFkaW8gKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh0ci0+c2RfdHVuZXIsIHR1bmVyLCBzX3R1bmVyLCB2KTsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJdW5zaWduZWQgaW50ICppKQoreworCSppID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJdW5zaWduZWQgaW50IGkpCit7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX3R1bmVyLCB0dW5lciwgc19mcmVxdWVuY3ksIGYpOworfQorCitzdGF0aWMgaW50IHRpbWJyYWRpb192aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCB0aW1icmFkaW8gKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh0ci0+c2RfdHVuZXIsIHR1bmVyLCBnX2ZyZXF1ZW5jeSwgZik7Cit9CisKK3N0YXRpYyBpbnQgdGltYnJhZGlvX3ZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX2RzcCwgY29yZSwgcXVlcnljdHJsLCBxYyk7Cit9CisKK3N0YXRpYyBpbnQgdGltYnJhZGlvX3ZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgdGltYnJhZGlvICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwodHItPnNkX2RzcCwgY29yZSwgZ19jdHJsLCBjdHJsKTsKK30KKworc3RhdGljIGludCB0aW1icmFkaW9fdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCB0aW1icmFkaW8gKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbCh0ci0+c2RfZHNwLCBjb3JlLCBzX2N0cmwsIGN0cmwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHRpbWJyYWRpb19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcAk9IHRpbWJyYWRpb192aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19nX3R1bmVyCQk9IHRpbWJyYWRpb192aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIJCT0gdGltYnJhZGlvX3ZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kJPSB0aW1icmFkaW9fdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kJPSB0aW1icmFkaW9fdmlkaW9jX3NfZnJlcXVlbmN5LAorCS52aWRpb2NfZ19pbnB1dAkJPSB0aW1icmFkaW9fdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0CQk9IHRpbWJyYWRpb192aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2dfYXVkaW8JCT0gdGltYnJhZGlvX3ZpZGlvY19nX2F1ZGlvLAorCS52aWRpb2Nfc19hdWRpbwkJPSB0aW1icmFkaW9fdmlkaW9jX3NfYXVkaW8sCisJLnZpZGlvY19xdWVyeWN0cmwJPSB0aW1icmFkaW9fdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybAkJPSB0aW1icmFkaW9fdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybAkJPSB0aW1icmFkaW9fdmlkaW9jX3NfY3RybAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB0aW1icmFkaW9fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRpbWJyYWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0aW1iX3JhZGlvX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHRpbWJyYWRpbyAqdHI7CisJaW50IGVycjsKKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiUGxhdGZvcm0gZGF0YSBtaXNzaW5nXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJdHIgPSBremFsbG9jKHNpemVvZigqdHIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRyKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCXRyLT5wZGF0YSA9ICpwZGF0YTsKKworCXN0cmxjcHkodHItPnZpZGVvX2Rldi5uYW1lLCAiVGltYmVyZGFsZSBSYWRpbyIsCisJCXNpemVvZih0ci0+dmlkZW9fZGV2Lm5hbWUpKTsKKwl0ci0+dmlkZW9fZGV2LmZvcHMgPSAmdGltYnJhZGlvX2ZvcHM7CisJdHItPnZpZGVvX2Rldi5pb2N0bF9vcHMgPSAmdGltYnJhZGlvX2lvY3RsX29wczsKKwl0ci0+dmlkZW9fZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl0ci0+dmlkZW9fZGV2Lm1pbm9yID0gLTE7CisKKwlzdHJsY3B5KHRyLT52NGwyX2Rldi5uYW1lLCBEUklWRVJfTkFNRSwgc2l6ZW9mKHRyLT52NGwyX2Rldi5uYW1lKSk7CisJZXJyID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgJnRyLT52NGwyX2Rldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfdjRsMl9kZXY7CisKKwl0ci0+dmlkZW9fZGV2LnY0bDJfZGV2ID0gJnRyLT52NGwyX2RldjsKKworCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdHItPnZpZGVvX2RldiwgVkZMX1RZUEVfUkFESU8sIC0xKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkVycm9yIHJlZyB2aWRlb1xuIik7CisJCWdvdG8gZXJyX3ZpZGVvX3JlcTsKKwl9CisKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmdHItPnZpZGVvX2RldiwgdHIpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdHIpOworCXJldHVybiAwOworCitlcnJfdmlkZW9fcmVxOgorCXZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5KCZ0ci0+dmlkZW9fZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ0ci0+djRsMl9kZXYpOworZXJyX3Y0bDJfZGV2OgorCWtmcmVlKHRyKTsKK2VycjoKKwlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXI6ICVkXG4iLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdGltYnJhZGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0aW1icmFkaW8gKnRyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmdHItPnZpZGVvX2Rldik7CisJdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHkoJnRyLT52aWRlb19kZXYpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdHItPnY0bDJfZGV2KTsKKworCWtmcmVlKHRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0aW1icmFkaW9fcGxhdGZvcm1fZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHRpbWJyYWRpb19wcm9iZSwKKwkucmVtb3ZlCQk9IHRpbWJyYWRpb19yZW1vdmUsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXQgdGltYnJhZGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0aW1icmFkaW9fcGxhdGZvcm1fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHRpbWJyYWRpb19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRpbWJyYWRpb19wbGF0Zm9ybV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0aW1icmFkaW9faW5pdCk7Cittb2R1bGVfZXhpdCh0aW1icmFkaW9fZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiVGltYmVyZGFsZSBSYWRpbyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1vY2VhbiBMYWJvcmF0b3JpZXMgPGluZm9AbW9jZWFuLWxhYnMuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiRFJJVkVSX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9zYWE3NzA2aC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zYWE3NzA2aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYjU1MjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NhYTc3MDZoLmMKQEAgLTAsMCArMSw0NTEgQEAKKy8qCisgKiBzYWE3NzA2LmMgUGhpbGlwcyBTQUE3NzA2SCBDYXIgUmFkaW8gRFNQIGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKworI2RlZmluZSBEUklWRVJfTkFNRSAic2FhNzcwNmgiCisKKy8qIHRoZSBJMkMgbWVtb3J5IG1hcCBsb29rcyBsaWtlIHRoaXMKKworCSQxQzAwIC0gJEZGRkYgTm90IFVzZWQKKwkkMjIwMCAtICQzRkZGIFJlc2VydmVkIFlSQU0gKERTUDIpIHNwYWNlCisJJDIwMDAgLSAkMjFGRiBZUkFNIChEU1AyKQorCSQxRkYwIC0gJDFGRkYgSGFyZHdhcmUgUmVnaXN0ZXJzCisJJDEyODAgLSAkMUZFRiBSZXNlcnZlZCBYUkFNIChEU1AyKSBzcGFjZQorCSQxMDAwIC0gJDEyN0YgWFJBTSAoRFNQMikKKwkkMEZGRiAgICAgICAgRFNQIENPTlRST0wKKwkkMEEwMCAtICQwRkZFIFJlc2VydmVkCisJJDA5ODAgLSAkMDlGRiBSZXNlcnZlZCBZUkFNIChEU1AxKSBzcGFjZQorCSQwODAwIC0gJDA5N0YgWVJBTSAoRFNQMSkKKwkkMDIwMCAtICQwN0ZGIE5vdCBVc2VkCisJJDAxODAgLSAkMDFGRiBSZXNlcnZlZCBYUkFNIChEU1AxKSBzcGFjZQorCSQwMDAwIC0gJDAxN0YgWFJBTSAoRFNQMSkKKyovCisKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX0NUUkwJCTB4MGZmZgorI2RlZmluZSBTQUE3NzA2SF9DVFJMX0JZUF9QTEwJCTB4MDAwMQorI2RlZmluZSBTQUE3NzA2SF9DVFJMX1BMTF9ESVZfTUFTSwkweDAwM2UKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9QTEwzXzYyOTc1TUhaCTB4MDAzZQorI2RlZmluZSBTQUE3NzA2SF9DVFJMX0RTUF9UVVJCTwkJMHgwMDQwCisjZGVmaW5lIFNBQTc3MDZIX0NUUkxfUENfUkVTRVRfRFNQMQkweDAwODAKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AyCTB4MDEwMAorI2RlZmluZSBTQUE3NzA2SF9DVFJMX0RTUDFfUk9NX0VOX01BU0sJMHgwNjAwCisjZGVmaW5lIFNBQTc3MDZIX0NUUkxfRFNQMV9GVU5DX1BST00JMHgwMDAwCisjZGVmaW5lIFNBQTc3MDZIX0NUUkxfRFNQMl9ST01fRU5fTUFTSwkweDE4MDAKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9EU1AyX0ZVTkNfUFJPTQkweDAwMDAKKyNkZWZpbmUgU0FBNzcwNkhfQ1RSTF9ESUdfU0lMX0lOVEVSUE9MCTB4ODAwMAorCisjZGVmaW5lIFNBQTc3MDZIX1JFR19FVkFMVUFUSU9OCQkJMHgxZmYwCisjZGVmaW5lIFNBQTc3MDZIX0VWQUxfRElTQUJMRV9DSEFSR0VfUFVNUAkweDAwMDAwMQorI2RlZmluZSBTQUE3NzA2SF9FVkFMX0RDU19DTE9DSwkJCTB4MDAwMDAyCisjZGVmaW5lIFNBQTc3MDZIX0VWQUxfR05EUkMxX0VOQUJMRQkJMHgwMDAwMDQKKyNkZWZpbmUgU0FBNzcwNkhfRVZBTF9HTkRSQzJfRU5BQkxFCQkweDAwMDAwOAorCisjZGVmaW5lIFNBQTc3MDZIX1JFR19DTF9HRU4xCQkJMHgxZmYzCisjZGVmaW5lIFNBQTc3MDZIX0NMX0dFTjFfTUlOX0xPT1BHQUlOX01BU0sJMHgwMDAwMGYKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMV9MT09QR0FJTl9NQVNLCQkweDAwMDBmMAorI2RlZmluZSBTQUE3NzA2SF9DTF9HRU4xX0NPQVJTRV9SQVRJT04JCTB4ZmZmZjAwCisKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX0NMX0dFTjIJCQkweDFmZjQKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMl9XU0VER0VfRkFMTElORwkJMHgwMDAwMDEKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMl9TVE9QX1ZDTwkJMHgwMDAwMDIKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VOMl9GUkVSVU4JCQkweDAwMDAwNAorI2RlZmluZSBTQUE3NzA2SF9DTF9HRU4yX0FEQVBUSVZFCQkweDAwMDAwOAorI2RlZmluZSBTQUE3NzA2SF9DTF9HRU4yX0ZJTkVfUkFUSU9fTUFTSwkweDBmZmZmMAorCisjZGVmaW5lIFNBQTc3MDZIX1JFR19DTF9HRU40CQkweDFmZjYKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VONF9CWVBBU1NfUExMMQkweDAwMTAwMAorI2RlZmluZSBTQUE3NzA2SF9DTF9HRU40X1BMTDFfRElWX01BU0sJMHgwM2UwMDAKKyNkZWZpbmUgU0FBNzcwNkhfQ0xfR0VONF9EU1AxX1RVUkJPCTB4MDQwMDAwCisKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX1NFTAkweDFmZjcKKyNkZWZpbmUgU0FBNzcwNkhfU0VMX0RTUDJfU1JDQV9NQVNLCTB4MDAwMDA3CisjZGVmaW5lIFNBQTc3MDZIX1NFTF9EU1AyX0ZNVEFfTUFTSwkweDAwMDAzMQorI2RlZmluZSBTQUE3NzA2SF9TRUxfRFNQMl9TUkNCX01BU0sJMHgwMDAxYzAKKyNkZWZpbmUgU0FBNzcwNkhfU0VMX0RTUDJfRk1UQl9NQVNLCTB4MDAwZTAwCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9EU1AxX1NSQ19NQVNLCTB4MDAzMDAwCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9EU1AxX0ZNVF9NQVNLCTB4MDFjMDAzCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9TUERJRjIJCTB4MDIwMDAwCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9IT1NUX0lPX0ZNVF9NQVNLCTB4MWMwMDAwCisjZGVmaW5lIFNBQTc3MDZIX1NFTF9FTl9IT1NUX0lPCQkweDIwMDAwMAorCisjZGVmaW5lIFNBQTc3MDZIX1JFR19JQUMJCTB4MWZmOAorI2RlZmluZSBTQUE3NzA2SF9SRUdfQ0xLX1NFVAkJMHgxZmY5CisjZGVmaW5lIFNBQTc3MDZIX1JFR19DTEtfQ09FRkYJCTB4MWZmYQorI2RlZmluZSBTQUE3NzA2SF9SRUdfSU5QVVRfU0VOUwkJMHgxZmZiCisjZGVmaW5lIFNBQTc3MDZIX0lOUFVUX1NFTlNfUkRTX1ZPTF9NQVNLCTB4MDAwM2YKKyNkZWZpbmUgU0FBNzcwNkhfSU5QVVRfU0VOU19GTV9WT0xfTUFTSwkJMHgwMGZjMAorI2RlZmluZSBTQUE3NzA2SF9JTlBVVF9TRU5TX0ZNX01QWAkJMHgwMTAwMAorI2RlZmluZSBTQUE3NzA2SF9JTlBVVF9TRU5TX09GRl9GSUxURVJfQV9FTgkweDAyMDAwCisjZGVmaW5lIFNBQTc3MDZIX0lOUFVUX1NFTlNfT0ZGX0ZJTFRFUl9CX0VOCTB4MDQwMDAKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX1BIT05FX05BVl9BVURJTwkweDFmZmMKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX0lPX0NPTkZfRFNQMgkweDFmZmQKKyNkZWZpbmUgU0FBNzcwNkhfUkVHX1NUQVRVU19EU1AyCTB4MWZmZQorI2RlZmluZSBTQUE3NzA2SF9SRUdfUENfRFNQMgkJMHgxZmZmCisKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMV9NT0QwCTB4MDgwMAorI2RlZmluZSBTQUE3NzA2SF9EU1AxX1JPTV9WRVIJMHgwOTdmCisjZGVmaW5lIFNBQTc3MDZIX0RTUDJfTVBUUjAJMHgxMDAwCisKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMV9NT0RQTlRSCTB4MDAwMAorCisjZGVmaW5lIFNBQTc3MDZIX0RTUDJfWE1FTV9DT05UTExDVwkweDExM2UKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMl9YTUVNX0JVU0FNUAkweDExNGEKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMl9YTUVNX0ZEQUNQTlRSCTB4MTFmOQorI2RlZmluZSBTQUE3NzA2SF9EU1AyX1hNRU1fSUlTMVBOVFIJMHgxMWZiCisKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMl9ZTUVNX1BWR0EJCTB4MjEyYQorI2RlZmluZSBTQUE3NzA2SF9EU1AyX1lNRU1fUFZBVDEJMHgyMTJiCisjZGVmaW5lIFNBQTc3MDZIX0RTUDJfWU1FTV9QVkFUCQkweDIxMmMKKyNkZWZpbmUgU0FBNzcwNkhfRFNQMl9ZTUVNX1JPTV9WRVIJMHgyMWZmCisKKyNkZWZpbmUgU1VQUE9SVEVEX0RTUDFfUk9NX1ZFUgkJMHg2NjcKKworc3RydWN0IHNhYTc3MDZoX3N0YXRlIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CisJdW5zaWduZWQgbXV0ZWQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWE3NzA2aF9zdGF0ZSAqdG9fc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgc2FhNzcwNmhfc3RhdGUsIHNkKTsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9pMmNfc2VuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgaW50IGxlbikKK3sKKwlpbnQgZXJyID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgZGF0YSwgbGVuKTsKKwlpZiAoZXJyID09IGxlbikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGVyciA+IDAgPyAtRUlPIDogZXJyOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX2kyY190cmFuc2ZlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCXN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQoreworCWludCBlcnIgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCBudW0pOworCWlmIChlcnIgPT0gbnVtKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyID4gMCA/IC1FSU8gOiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzcwNmhfc2V0X3JlZzI0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUxNiByZWcsIHUzMiB2YWwpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXU4IGJ1Zls1XTsKKwlpbnQgcG9zID0gMDsKKworCWJ1Zltwb3MrK10gPSByZWcgPj4gODsKKwlidWZbcG9zKytdID0gcmVnOworCWJ1Zltwb3MrK10gPSB2YWwgPj4gMTY7CisJYnVmW3BvcysrXSA9IHZhbCA+PiA4OworCWJ1Zltwb3MrK10gPSB2YWw7CisKKwlyZXR1cm4gc2FhNzcwNmhfaTJjX3NlbmQoY2xpZW50LCBidWYsIHBvcyk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MTYgcmVnLCB1MzIgdmFsLAorCWludCAqZXJyKQoreworCXJldHVybiAqZXJyID8gKmVyciA6IHNhYTc3MDZoX3NldF9yZWcyNChzZCwgcmVnLCB2YWwpOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX3NldF9yZWcxNihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MTYgcmVnLCB1MTYgdmFsKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1OCBidWZbNF07CisJaW50IHBvcyA9IDA7CisKKwlidWZbcG9zKytdID0gcmVnID4+IDg7CisJYnVmW3BvcysrXSA9IHJlZzsKKwlidWZbcG9zKytdID0gdmFsID4+IDg7CisJYnVmW3BvcysrXSA9IHZhbDsKKworCXJldHVybiBzYWE3NzA2aF9pMmNfc2VuZChjbGllbnQsIGJ1ZiwgcG9zKTsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUxNiByZWcsIHUxNiB2YWwsCisJaW50ICplcnIpCit7CisJcmV0dXJuICplcnIgPyAqZXJyIDogc2FhNzcwNmhfc2V0X3JlZzE2KHNkLCByZWcsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzcwNmhfZ2V0X3JlZzE2KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUxNiByZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXU4IGJ1ZlsyXTsKKwlpbnQgZXJyOworCXU4IHJlZ2FkZHJbXSA9IHtyZWcgPj4gOCwgcmVnfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsge2NsaWVudC0+YWRkciwgMCwgc2l6ZW9mKHJlZ2FkZHIpLCByZWdhZGRyfSwKKwkJCQl7Y2xpZW50LT5hZGRyLCBJMkNfTV9SRCwgc2l6ZW9mKGJ1ZiksIGJ1Zn0gfTsKKworCWVyciA9IHNhYTc3MDZoX2kyY190cmFuc2ZlcihjbGllbnQsIG1zZywgQVJSQVlfU0laRShtc2cpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIGJ1ZlswXSA8PCA4IHwgYnVmWzFdOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX3VubXV0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCBzYWE3NzA2aF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJaW50IGVyciA9IDA7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHNkLCBTQUE3NzA2SF9SRUdfQ1RSTCwKKwkJU0FBNzcwNkhfQ1RSTF9QTEwzXzYyOTc1TUhaIHwgU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AxIHwKKwkJU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AyLCAmZXJyKTsKKworCS8qIG5ld2VyIHZlcnNpb25zIG9mIHRoZSBjaGlwIHJlcXVpcmVzIGEgc21hbGwgc2xlZXAgYWZ0ZXIgcmVzZXQgKi8KKwltc2xlZXAoMSk7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHNkLCBTQUE3NzA2SF9SRUdfQ1RSTCwKKwkJU0FBNzcwNkhfQ1RSTF9QTEwzXzYyOTc1TUhaLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19FVkFMVUFUSU9OLCAwLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19DTF9HRU4xLCAweDA0MDAyMiwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfQ0xfR0VOMiwKKwkJU0FBNzcwNkhfQ0xfR0VOMl9XU0VER0VfRkFMTElORywgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfQ0xfR0VONCwgMHgwMjQwODAsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfUkVHX1NFTCwgMHgyMDAwODAsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfUkVHX0lBQywgMHhmNGNhZWQsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfUkVHX0NMS19TRVQsIDB4MTI0MzM0LCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19DTEtfQ09FRkYsIDB4MDA0YTFhLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19JTlBVVF9TRU5TLCAweDAwNzFjNywKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfUEhPTkVfTkFWX0FVRElPLAorCQkweDBlMjJmZiwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfSU9fQ09ORl9EU1AyLCAweDAwMWZmOCwKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9SRUdfU1RBVFVTX0RTUDIsIDB4MDgwMDAzLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX1JFR19QQ19EU1AyLCAweDAwMDAwNCwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHNkLCBTQUE3NzA2SF9EU1AxX01PRDAsIDB4MGM2YywgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9EU1AyX01QVFIwLCAweDAwMGI0YiwgJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9EU1AxX01PRFBOVFIsIDB4MDAwNjAwLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX0RTUDFfTU9EUE5UUiwgMHgwMDAwYzAsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfRFNQMl9YTUVNX0NPTlRMTENXLCAweDAwMDgxOSwKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMjRfZXJyKHNkLCBTQUE3NzA2SF9EU1AyX1hNRU1fQ09OVExMQ1csIDB4MDAwODVhLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWE1FTV9CVVNBTVAsIDB4N2ZmZmZmLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcyNF9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWE1FTV9GREFDUE5UUiwgMHgyMDAwY2IsCisJCSZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfRFNQMl9YTUVNX0lJUzFQTlRSLCAweDIwMDBjYiwKKwkJJmVycik7CisKKwllcnIgPSBzYWE3NzA2aF9zZXRfcmVnMTZfZXJyKHNkLCBTQUE3NzA2SF9EU1AyX1lNRU1fUFZHQSwgMHgwZjgwLCAmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcxNl9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWU1FTV9QVkFUMSwgMHgwODAwLAorCQkmZXJyKTsKKworCWVyciA9IHNhYTc3MDZoX3NldF9yZWcxNl9lcnIoc2QsIFNBQTc3MDZIX0RTUDJfWU1FTV9QVkFULCAweDA4MDAsICZlcnIpOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzI0X2VycihzZCwgU0FBNzcwNkhfRFNQMl9YTUVNX0NPTlRMTENXLCAweDAwMDkwNSwKKwkJJmVycik7CisJaWYgKCFlcnIpCisJCXN0YXRlLT5tdXRlZCA9IDA7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9tdXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IHNhYTc3MDZoX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlpbnQgZXJyOworCisJZXJyID0gc2FhNzcwNmhfc2V0X3JlZzE2KHNkLCBTQUE3NzA2SF9SRUdfQ1RSTCwKKwkJU0FBNzcwNkhfQ1RSTF9QTEwzXzYyOTc1TUhaIHwgU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AxIHwKKwkJU0FBNzcwNkhfQ1RSTF9QQ19SRVNFVF9EU1AyKTsKKwlpZiAoIWVycikKKwkJc3RhdGUtPm11dGVkID0gMTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHNhYTc3MDZoX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgc2FhNzcwNmhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+bXV0ZWQ7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAoY3RybC0+dmFsdWUpCisJCQlyZXR1cm4gc2FhNzcwNmhfbXV0ZShzZCk7CisJCXJldHVybiBzYWE3NzA2aF91bm11dGUoc2QpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBzYWE3NzA2aF9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1NBQTc3MDZILCAwKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzYWE3NzA2aF9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gc2FhNzcwNmhfZ19jaGlwX2lkZW50LAorCS5xdWVyeWN0cmwgPSBzYWE3NzA2aF9xdWVyeWN0cmwsCisJLmdfY3RybCA9IHNhYTc3MDZoX2dfY3RybCwKKwkuc19jdHJsID0gc2FhNzcwNmhfc19jdHJsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgc2FhNzcwNmhfb3BzID0geworCS5jb3JlID0gJnNhYTc3MDZoX2NvcmVfb3BzLAorfTsKKworLyoKKyAqIEdlbmVyaWMgaTJjIHByb2JlCisgKiBjb25jZXJuaW5nIHRoZSBhZGRyZXNzZXM6IGkyYyB3YW50cyA3IGJpdCAod2l0aG91dCB0aGUgci93IGJpdCksIHNvICc+PjEnCisgKi8KKworc3RhdGljIGludCBfX2RldmluaXQgc2FhNzcwNmhfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2FhNzcwNmhfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJaW50IGVycjsKKworCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FSU87CisKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHglMDJ4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKworCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNhYTc3MDZoX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXNkID0gJnN0YXRlLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmc2FhNzcwNmhfb3BzKTsKKworCS8qIGNoZWNrIHRoZSByb20gdmVyc2lvbnMgKi8KKwllcnIgPSBzYWE3NzA2aF9nZXRfcmVnMTYoc2QsIFNBQTc3MDZIX0RTUDFfUk9NX1ZFUik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyOworCWlmIChlcnIgIT0gU1VQUE9SVEVEX0RTUDFfUk9NX1ZFUikKKwkJdjRsMl93YXJuKHNkLCAiVW5rbm93biBEU1AxIFJPTSBjb2RlIHZlcnNpb246IDB4JXhcbiIsIGVycik7CisKKwlzdGF0ZS0+bXV0ZWQgPSAxOworCisJLyogc3RhcnR1cCBpbiBhIG11dGVkIHN0YXRlICovCisJZXJyID0gc2FhNzcwNmhfbXV0ZShzZCk7CisJaWYgKGVycikKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19zdGF0ZShzZCkpOworCisJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IEZhaWxlZCB0byBwcm9iZTogJWRcbiIsIGVycik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzYWE3NzA2aF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlzYWE3NzA2aF9tdXRlKHNkKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc3RhdGUoc2QpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTc3MDZoX2lkW10gPSB7CisJe0RSSVZFUl9OQU1FLCAwfSwKKwl7fSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzYWE3NzA2aF9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzYWE3NzA2aF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJfSwKKwkucHJvYmUJCT0gc2FhNzcwNmhfcHJvYmUsCisJLnJlbW92ZQkJPSBzYWE3NzA2aF9yZW1vdmUsCisJLmlkX3RhYmxlCT0gc2FhNzcwNmhfaWQsCit9OworCitzdGF0aWMgX19pbml0IGludCBzYWE3NzA2aF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZzYWE3NzA2aF9kcml2ZXIpOworfQorCitzdGF0aWMgX19leGl0IHZvaWQgc2FhNzcwNmhfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZzYWE3NzA2aF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzYWE3NzA2aF9pbml0KTsKK21vZHVsZV9leGl0KHNhYTc3MDZoX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNBQTc3MDZIIENhciBSYWRpbyBEU1AgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNb2NlYW4gTGFib3JhdG9yaWVzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtY29tbW9uLmMKaW5kZXggNGRhMGYxNS4uNDcwNzVmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC1jb21tb24uYwpAQCAtNzI0LDcgKzcyNCw3IEBACiAJCXR1bmVyLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CiAKIAkvKiBtaW4gaXMgd29yc3QsIG1heCBpcyBiZXN0OyBzaWduYWw6MC4uMHhmZmZmOyByc3NpOiAwLi4weGZmICovCi0JLyogbWVhc3VyZWQgaW4gdW5pdHMgb2YgZGLsqIlWIGluIDEgZGIgaW5jcmVtZW50cyAobWF4IGF0IH43NSBkYuyoiVYpICovCisJLyogbWVhc3VyZWQgaW4gdW5pdHMgb2YgZGLCtVYgaW4gMSBkYiBpbmNyZW1lbnRzIChtYXggYXQgfjc1IGRiwrVWKSAqLwogCXR1bmVyLT5zaWduYWwgPSAocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfUlNTSSk7CiAJLyogdGhlIGlkZWFsIGZhY3RvciBpcyAweGZmZmYvNzUgPSA4NzMsOCAqLwogCXR1bmVyLT5zaWduYWwgPSAodHVuZXItPnNpZ25hbCAqIDg3MykgKyAoOCAqIHR1bmVyLT5zaWduYWwgLyAxMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtdXNiLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NpNDcweC9yYWRpby1zaTQ3MHgtdXNiLmMKaW5kZXggYTk2ZTFiOS4uNmY2MDg0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9zaTQ3MHgvcmFkaW8tc2k0NzB4LXVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2k0NzB4L3JhZGlvLXNpNDcweC11c2IuYwpAQCAtNTkwLDggKzU5MCw5IEBACiAJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYpOwogCQkJa2ZyZWUocmFkaW8tPmludF9pbl9idWZmZXIpOwogCQkJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7CisJCQltdXRleF91bmxvY2soJnJhZGlvLT5kaXNjb25uZWN0X2xvY2spOwogCQkJa2ZyZWUocmFkaW8pOwotCQkJZ290byB1bmxvY2s7CisJCQlnb3RvIGRvbmU7CiAJCX0KIAogCQkvKiBjYW5jZWwgcmVhZCBwcm9jZXNzZXMgKi8KQEAgLTYwMSw3ICs2MDIsNiBAQAogCQlyZXR2YWwgPSBzaTQ3MHhfc3RvcChyYWRpbyk7CiAJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShyYWRpby0+aW50Zik7CiAJfQotdW5sb2NrOgogCW11dGV4X3VubG9jaygmcmFkaW8tPmRpc2Nvbm5lY3RfbG9jayk7CiBkb25lOgogCXJldHVybiByZXR2YWw7CkBAIC04NDIsOSArODQyLDExIEBACiAJCWtmcmVlKHJhZGlvLT5pbnRfaW5fYnVmZmVyKTsKIAkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2KTsKIAkJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7CisJCW11dGV4X3VubG9jaygmcmFkaW8tPmRpc2Nvbm5lY3RfbG9jayk7CiAJCWtmcmVlKHJhZGlvKTsKKwl9IGVsc2UgeworCQltdXRleF91bmxvY2soJnJhZGlvLT5kaXNjb25uZWN0X2xvY2spOwogCX0KLQltdXRleF91bmxvY2soJnJhZGlvLT5kaXNjb25uZWN0X2xvY2spOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwppbmRleCAyZjgzYmU3Li5mOGZjODY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCkBAIC0zODgsNiArMzg4LDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0dnA1MTUwLgogCitjb25maWcgVklERU9fVFZQNzAwMgorCXRyaXN0YXRlICJUZXhhcyBJbnN0cnVtZW50cyBUVlA3MDAyIHZpZGVvIGRlY29kZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQworCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBUVlA3MDAyIHZpZGVvIGRlY29kZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHR2cDcwMDIuCisKIGNvbmZpZyBWSURFT19WUFgzMjIwCiAJdHJpc3RhdGUgInZweDMyMjBhLCB2cHgzMjE2YiAmIHZweDMyMTRjIHZpZGVvIGRlY29kZXJzIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKQEAgLTU0OCw3ICs1NTcsNiBAQAogCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgdnBzcyBzeXN0ZW0gbW9kdWxlIGZvciB2aWRlbyBkcml2ZXIKLQlkZWZhdWx0IHkKIAogY29uZmlnIFZJREVPX1ZQRkVfQ0FQVFVSRQogCXRyaXN0YXRlICJWUEZFIFZpZGVvIENhcHR1cmUgRHJpdmVyIgpAQCAtNTkyLDYgKzYwMCwxOSBAQAogCSAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cGZlLgogCitjb25maWcgVklERU9fSVNJRgorCXRyaXN0YXRlICJJU0lGIEhXIG1vZHVsZSIKKwlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9ETTM2NSAmJiBWSURFT19WUEZFX0NBUFRVUkUKKwlzZWxlY3QgVklERU9fVlBTU19TWVNURU0KKwlkZWZhdWx0IHkKKwloZWxwCisJICAgRW5hYmxlcyBJU0lGIGh3IG1vZHVsZS4gVGhpcyBpcyB0aGUgaGFyZHdhcmUgbW9kdWxlIGZvcgorCSAgIGNvbmZpZ3VyaW5nIElTSUYgaW4gVlBGRSB0byBjYXB0dXJlIFJhdyBCYXllciBSR0IgZGF0YSAgZnJvbQorCSAgIGEgaW1hZ2Ugc2Vuc29yIG9yIFlVViBkYXRhIGZyb20gYSBZVVYgc291cmNlLgorCisJICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZwZmUuCisKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnIgogCiBjb25maWcgVklERU9fUE1TCkBAIC02MzgsOSArNjU5LDE0IEBACiAJICBpbmZvcm1hdGlvbi4KIAogY29uZmlnIFZJREVPX0NQSUEKLQl0cmlzdGF0ZSAiQ1BpQSBWaWRlbyBGb3IgTGludXgiCisJdHJpc3RhdGUgIkNQaUEgVmlkZW8gRm9yIExpbnV4IChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDEKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIGNwaWExIG1vZHVsZQorCSAgaW5zdGVhZC4gTm90ZSB0aGF0IHlvdSBuZWVkIGF0bGVhc3QgdmVyc2lvbiAwLjYuNCBvZiBsaWJ2NGwgZm9yCisJICB0aGUgY3BpYTEgZ3NwY2EgbW9kdWxlLgorCiAJICBUaGlzIGlzIHRoZSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIGNhbWVyYXMgYmFzZWQgb24gVmlzaW9uJ3MgQ1BpQQogCSAgKENvbG91ciBQcm9jZXNzb3IgSW50ZXJmYWNlIEFTSUMpLCBzdWNoIGFzIHRoZSBDcmVhdGl2ZSBMYWJzIFZpZGVvCiAJICBCbGFzdGVyIFdlYmNhbSBJSS4gSWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIGNhbWVyYXMsIHNheSBZIGhlcmUKQEAgLTk0NCw2ICs5NzAsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vS2NvbmZpZyIKQEAgLTk1NSw2ICs5ODMsNyBAQAogY29uZmlnIFZJREVPX09WQ0FNQ0hJUAogCXRyaXN0YXRlICJPbW5pVmlzaW9uIENhbWVyYSBDaGlwIHN1cHBvcnQgKERFUFJFQ0FURUQpIgogCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDEKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIG92NTE5IG1vZHVsZQogCSAgaW5zdGVhZC4gTm90ZSB0aGF0IGZvciB0aGUgb3Y1MTEgLyBvdjUxOCBzdXBwb3J0IG9mIHRoZSBnc3BjYSBtb2R1bGUKQEAgLTk3MSw2ICsxMDAwLDcgQEAKIGNvbmZpZyBVU0JfVzk5NjhDRgogCXRyaXN0YXRlICJVU0IgVzk5Nls4N11DRiBKUEVHIER1YWwgTW9kZSBDYW1lcmEgc3VwcG9ydCAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQyAmJiBWSURFT19PVkNBTUNISVAKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIG92NTE5IG1vZHVsZQogCSAgaW5zdGVhZC4gTm90ZSB0aGF0IGZvciB0aGUgdzk5NjhjZiBzdXBwb3J0IG9mIHRoZSBnc3BjYSBtb2R1bGUKQEAgLTk5Miw2ICsxMDIyLDcgQEAKIGNvbmZpZyBVU0JfT1Y1MTEKIAl0cmlzdGF0ZSAiVVNCIE9WNTExIENhbWVyYSBzdXBwb3J0IChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDEKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIG92NTE5IG1vZHVsZQogCSAgaW5zdGVhZC4gTm90ZSB0aGF0IGZvciB0aGUgb3Y1MTEgLyBvdjUxOCBzdXBwb3J0IG9mIHRoZSBnc3BjYSBtb2R1bGUKQEAgLTEwMjAsNiArMTA1MSw3IEBACiBjb25maWcgVVNCX1NUVjY4MAogCXRyaXN0YXRlICJVU0IgU1RWNjgwIChQZW5jYW0pIENhbWVyYSBzdXBwb3J0IChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDEKKwlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBpcyBERVBSRUNBVEVEIHBsZWFzZSB1c2UgdGhlIGdzcGNhIHN0djA2ODAgbW9kdWxlCiAJICBpbnN0ZWFkLiBOb3RlIHRoYXQgZm9yIHRoZSBnc3BjYSBzdHYwNjgwIG1vZHVsZSB5b3UgbmVlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKaW5kZXggMmFmNjhlZS4uYjg4YjYxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCkBAIC01Niw2ICs1Niw3IEBACiBvYmotJChDT05GSUdfVklERU9fVklOTykgKz0gaW5keWNhbS5vCiBvYmotJChDT05GSUdfVklERU9fVFZQNTE1MCkgKz0gdHZwNTE1MC5vCiBvYmotJChDT05GSUdfVklERU9fVFZQNTE0WCkgKz0gdHZwNTE0eC5vCitvYmotJChDT05GSUdfVklERU9fVFZQNzAwMikgKz0gdHZwNzAwMi5vCiBvYmotJChDT05GSUdfVklERU9fTVNQMzQwMCkgKz0gbXNwMzQwMC5vCiBvYmotJChDT05GSUdfVklERU9fQ1M1MzQ1KSArPSBjczUzNDUubwogb2JqLSQoQ09ORklHX1ZJREVPX0NTNTNMMzJBKSArPSBjczUzbDMyYS5vCkBAIC05OSw2ICsxMDAsNyBAQAogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMzQpICs9IHNhYTcxMzQvCiBvYmotJChDT05GSUdfVklERU9fQ1g4OCkgKz0gY3g4OC8KIG9iai0kKENPTkZJR19WSURFT19FTTI4WFgpICs9IGVtMjh4eC8KK29iai0kKENPTkZJR19WSURFT19UTEcyMzAwKSArPSB0bGcyMzAwLwogb2JqLSQoQ09ORklHX1ZJREVPX0NYMjMxWFgpICs9IGN4MjMxeHgvCiBvYmotJChDT05GSUdfVklERU9fVVNCVklTSU9OKSArPSB1c2J2aXNpb24vCiBvYmotJChDT05GSUdfVklERU9fUFZSVVNCMikgKz0gcHZydXNiMi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYwppbmRleCA1YmIwZjllLi41NDdlMWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAkJdjRsMl9lcnIoc2QsICJubyBub3RpZnkgZm91bmQhXG4iKTsKIAogCWlmIChzdGQgJiBWNEwyX1NURF9OVFNDKSB7Ci0JCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9MT1csIDApOworCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfTE9XLCBOVUxMKTsKIAkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MDEsIDAsIDEpOwogCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwMSwgMSwgMCk7CiAJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDAxLCA1LCAwKTsKQEAgLTI2Myw3ICsyNjMsNyBAQAogCQkvKiBidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgxYSwgIDUsIDEpOyAqLwogCQl0aW1pbmcgPSAmdGltaW5nX2RhdGFbMV07CiAJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUwpIHsKLQkJdjRsMl9zdWJkZXZfbm90aWZ5KHNkLCBCVDgxOV9GSUZPX1JFU0VUX0xPVywgMCk7CisJCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9MT1csIE5VTEwpOwogCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwMSwgMCwgMSk7CiAJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDAxLCAxLCAxKTsKIAkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MDEsIDUsIDEpOwpAQCAtMjg4LDcgKzI4OCw3IEBACiAJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwOCwgKHRpbWluZy0+aHNjYWxlID4+IDgpICYgMHhmZik7CiAJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwOSwgdGltaW5nLT5oc2NhbGUgJiAweGZmKTsKIAlkZWNvZGVyLT5ub3JtID0gc3RkOwotCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9ISUdILCAwKTsKKwl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfSElHSCwgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNiw3ICszMDYsNyBAQAogCQl2NGwyX2VycihzZCwgIm5vIG5vdGlmeSBmb3VuZCFcbiIpOwogCiAJaWYgKGRlY29kZXItPmlucHV0ICE9IGlucHV0KSB7Ci0JCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9MT1csIDApOworCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfTE9XLCBOVUxMKTsKIAkJZGVjb2Rlci0+aW5wdXQgPSBpbnB1dDsKIAkJLyogc2VsZWN0IG1vZGUgKi8KIAkJaWYgKGRlY29kZXItPmlucHV0ID09IDApIHsKQEAgLTMxNiw3ICszMTYsNyBAQAogCQkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MGIsIDYsIDEpOwogCQkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MWEsIDEsIDApOwogCQl9Ci0JCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9ISUdILCAwKTsKKwkJdjRsMl9zdWJkZXZfbm90aWZ5KHNkLCBCVDgxOV9GSUZPX1JFU0VUX0hJR0gsIE5VTEwpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwppbmRleCBhZTA4YjA3Li5jYjQ2ZThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCkBAIC04MSw2ICs4MSw3IEBACiBzdGF0aWMgaW50IHJhZGlvX25yW0JUVFZfTUFYXSA9IHsgWzAgLi4uIChCVFRWX01BWC0xKV0gPSAtMSB9Owogc3RhdGljIGludCB2YmlfbnJbQlRUVl9NQVhdID0geyBbMCAuLi4gKEJUVFZfTUFYLTEpXSA9IC0xIH07CiBzdGF0aWMgaW50IGRlYnVnX2xhdGVuY3k7CitzdGF0aWMgaW50IGRpc2FibGVfaXI7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmRzcjsKIApAQCAtMTA3LDYgKzEwOCw3IEBACiBtb2R1bGVfcGFyYW0oYnR0dl9kZWJ1ZywgICAgICAgIGludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0oaXJxX2RlYnVnLCAgICAgICAgIGludCwgMDY0NCk7CiBtb2R1bGVfcGFyYW0oZGVidWdfbGF0ZW5jeSwgICAgIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oZGlzYWJsZV9pciwgICAgICAgIGludCwgMDQ0NCk7CiAKIG1vZHVsZV9wYXJhbShmZHNyLCAgICAgICAgICAgICAgaW50LCAwNDQ0KTsKIG1vZHVsZV9wYXJhbShnYnVmZmVycywgICAgICAgICAgaW50LCAwNDQ0KTsKQEAgLTEzOSw2ICsxNDEsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhidHR2X2dwaW8sImxvZyBncGlvIGNoYW5nZXMsIGRlZmF1bHQgaXMgMCAobm8pIik7CiBNT0RVTEVfUEFSTV9ERVNDKGJ0dHZfZGVidWcsImRlYnVnIG1lc3NhZ2VzLCBkZWZhdWx0IGlzIDAgKG5vKSIpOwogTU9EVUxFX1BBUk1fREVTQyhpcnFfZGVidWcsImlycSBoYW5kbGVyIGRlYnVnIG1lc3NhZ2VzLCBkZWZhdWx0IGlzIDAgKG5vKSIpOworTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2lyLCAiZGlzYWJsZSBpbmZyYXJlZCByZW1vdGUgc3VwcG9ydCIpOwogTU9EVUxFX1BBUk1fREVTQyhnYnVmZmVycywibnVtYmVyIG9mIGNhcHR1cmUgYnVmZmVycy4gcmFuZ2UgMi0zMiwgZGVmYXVsdCA4Iik7CiBNT0RVTEVfUEFSTV9ERVNDKGdidWZzaXplLCJzaXplIG9mIHRoZSBjYXB0dXJlIGJ1ZmZlcnMsIGRlZmF1bHQgaXMgMHgyMDgwMDAiKTsKIE1PRFVMRV9QQVJNX0RFU0MocmVzZXRfY3JvcCwicmVzZXQgY3JvcHBpbmcgcGFyYW1ldGVycyBhdCBvcGVuKCksIGRlZmF1bHQgIgpAQCAtNDQ2MSw4ICs0NDY0LDEwIEBACiAJCXJlcXVlc3RfbW9kdWxlcyhidHYpOwogCX0KIAotCWluaXRfYnR0dl9pMmNfaXIoYnR2KTsKLQlidHR2X2lucHV0X2luaXQoYnR2KTsKKwlpZiAoIWRpc2FibGVfaXIpIHsKKwkJaW5pdF9idHR2X2kyY19pcihidHYpOworCQlidHR2X2lucHV0X2luaXQoYnR2KTsKKwl9CiAKIAkvKiBldmVyeXRoaW5nIGlzIGZpbmUgKi8KIAlidHR2X251bSsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYwppbmRleCAyNzdhMDkyLi5iMzIwZGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJc3RydWN0IGNhcmRfaXIgKmlyOwogCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqaXJfY29kZXMgPSBOVUxMOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKLQlpbnQgaXJfdHlwZSA9IElSX1RZUEVfT1RIRVI7CisJdTY0IGlyX3R5cGUgPSBJUl9UWVBFX09USEVSOwogCWludCBlcnIgPSAtRU5PTUVNOwogCiAJaWYgKCFidHYtPmhhc19yZW1vdGUpCkBAIC0zODksNyArMzg5LDcgQEAKIAlidHR2X2lyX3N0YXJ0KGJ0diwgaXIpOwogCiAJLyogYWxsIGRvbmUgKi8KLQllcnIgPSBpcl9pbnB1dF9yZWdpc3RlcihidHYtPnJlbW90ZS0+ZGV2LCBpcl9jb2Rlcyk7CisJZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoYnR2LT5yZW1vdGUtPmRldiwgaXJfY29kZXMsIE5VTEwpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9zdG9wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwppbmRleCA3YmI5YzFlLi5jYmJmN2U4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKQEAgLTE5MDcsNyArMTkwNyw2IEBACiAJCWdvdG8gb3V0X2ZyZWU7CiAKIAltdXRleF9pbml0KCZjYW0tPnNfbXV0ZXgpOwotCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhbS0+ZGV2X2xvY2spOwogCWNhbS0+c3RhdGUgPSBTX05PVFJFQURZOwogCWNhZmVfc2V0X2NvbmZpZ19uZWVkZWQoY2FtLCAxKTsKQEAgLTE5NDcsNyArMTk0Niw2IEBACiAJICogYmVjYXVzZSB0aGUgc2Vuc29yIGNvdWxkIGF0dGFjaCBpbiB0aGlzIGNhbGwgY2hhaW4sIGxlYWRpbmcgdG8KIAkgKiB1bnNpZ2h0bHkgZGVhZGxvY2tzLgogCSAqLwotCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsgIC8qIGF0dGFjaCBjYW4gZGVhZGxvY2sgKi8KIAlyZXQgPSBjYWZlX3NtYnVzX3NldHVwKGNhbSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfZnJlZWlycTsKQEAgLTE5NzMsNyArMTk3MSw3IEBACiAJY2FtLT52ZGV2LnY0bDJfZGV2ID0gJmNhbS0+djRsMl9kZXY7CiAJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZjYW0tPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF9zbWJ1czsKKwkJZ290byBvdXRfdW5sb2NrOwogCXZpZGVvX3NldF9kcnZkYXRhKCZjYW0tPnZkZXYsIGNhbSk7CiAKIAkvKgpAQCAtMTk4OCw2ICsxOTg2LDggQEAKIAltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CiAJcmV0dXJuIDA7CiAKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwogb3V0X3NtYnVzOgogCWNhZmVfc21idXNfc2h1dGRvd24oY2FtKTsKIG91dF9mcmVlaXJxOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwppbmRleCA1NTFkZGYyLi45MzNhZTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwpAQCAtMzczNyw5ICszNzM3LDYgQEAKIAlpZiAoc2l6ZSA+IEZSQU1FX05VTSpDUElBX01BWF9GUkFNRV9TSVpFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghY2FtIHx8ICFjYW0tPm9wcykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAkvKiBtYWtlIHRoaXMgX3JlYWxseV8gc21wLXNhZmUgKi8KIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmJ1c3lfbG9jaykpCiAJCXJldHVybiAtRUlOVFI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9LY29uZmlnCmluZGV4IGU4YTUwYTYuLmJhZjdlOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9LY29uZmlnCkBAIC0xOSwzICsxOSwxNCBAQAogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjeDE4LgorCitjb25maWcgVklERU9fQ1gxOF9BTFNBCisJdHJpc3RhdGUgIkNvbmV4YW50IDIzNDE4IERNQSBhdWRpbyBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fQ1gxOCAmJiBTTkQgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IFNORF9QQ00KKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBkaXJlY3QgKERNQSkgYXVkaW8gb24KKwkgIENvbmV4YW50IDIzNDE4IGJhc2VkIFRWIGNhcmRzIHVzaW5nIEFMU0EuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4MTgtYWxzYS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9NYWtlZmlsZQppbmRleCBmN2JmMGVkLi4yZmFkZDlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L01ha2VmaWxlCkBAIC0zLDggKzMsMTAgQEAKIAljeDE4LW1haWxib3gubyBjeDE4LXZiaS5vIGN4MTgtYXVkaW8ubyBjeDE4LXZpZGVvLm8gY3gxOC1pcnEubyBcCiAJY3gxOC1hdi1jb3JlLm8gY3gxOC1hdi1hdWRpby5vIGN4MTgtYXYtZmlybXdhcmUubyBjeDE4LWF2LXZiaS5vIGN4MTgtc2NiLm8gXAogCWN4MTgtZHZiLm8gY3gxOC1pby5vCitjeDE4LWFsc2Etb2JqcyA6PSBjeDE4LWFsc2EtbWFpbi5vIGN4MTgtYWxzYS1wY20ubwogCiBvYmotJChDT05GSUdfVklERU9fQ1gxOCkgKz0gY3gxOC5vCitvYmotJChDT05GSUdfVklERU9fQ1gxOF9BTFNBKSArPSBjeDE4LWFsc2EubwogCiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1haW4uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNDFkN2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1haW4uYwpAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqICBBTFNBIGludGVyZmFjZSB0byBjeDE4IFBDTSBjYXB0dXJlIHN0cmVhbXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBBbmR5IFdhbGxzIDxhd2FsbHNAcmFkaXgubmV0PgorICogIENvcHlyaWdodCAoQykgMjAwOSAgRGV2aW4gSGVpdG11ZWxsZXIgPGRoZWl0bXVlbGxlckBrZXJuZWxsYWJzLmNvbT4KKyAqCisgKiAgUG9ydGlvbnMgb2YgdGhpcyB3b3JrIHdlcmUgc3BvbnNvcmVkIGJ5IE9ORUxBTiBMaW1pdGVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAqICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKworI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCisjaW5jbHVkZSAiY3gxOC12ZXJzaW9uLmgiCisjaW5jbHVkZSAiY3gxOC1hbHNhLmgiCisjaW5jbHVkZSAiY3gxOC1hbHNhLW1peGVyLmgiCisjaW5jbHVkZSAiY3gxOC1hbHNhLXBjbS5oIgorCitpbnQgY3gxOF9hbHNhX2RlYnVnOworCisjZGVmaW5lIENYMThfREVCVUdfQUxTQV9JTkZPKGZtdCwgYXJnLi4uKSBcCisJZG8geyBcCisJCWlmIChjeDE4X2Fsc2FfZGVidWcgJiAyKSBcCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogIiBmbXQsICJjeDE4LWFsc2EiLCAjIyBhcmcpOyBcCisJfSB3aGlsZSAoMCk7CisKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgY3gxOF9hbHNhX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywKKwkJICJEZWJ1ZyBsZXZlbCAoYml0bWFzaykuIERlZmF1bHQ6IDBcbiIKKwkJICJcdFx0XHQgIDEvMHgwMDAxOiB3YXJuaW5nXG4iCisJCSAiXHRcdFx0ICAyLzB4MDAwMjogaW5mb1xuIik7CisKK01PRFVMRV9BVVRIT1IoIkFuZHkgV2FsbHMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ1gyMzQxOCBBTFNBIEludGVyZmFjZSIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIkNYMjM0MTggTVBFRzIgZW5jb2RlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitNT0RVTEVfVkVSU0lPTihDWDE4X1ZFUlNJT04pOworCitzdGF0aWMgaW5saW5lCitzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqdG9fc25kX2N4MThfY2FyZChzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQoreworCXJldHVybiB0b19jeDE4KHY0bDJfZGV2KS0+YWxzYTsKK30KKworc3RhdGljIGlubGluZQorc3RydWN0IHNuZF9jeDE4X2NhcmQgKnBfdG9fc25kX2N4MThfY2FyZChzdHJ1Y3QgdjRsMl9kZXZpY2UgKip2NGwyX2RldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3Qgc25kX2N4MThfY2FyZCwgdjRsMl9kZXYpOworfQorCitzdGF0aWMgdm9pZCBzbmRfY3gxOF9jYXJkX2ZyZWUoc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MpCit7CisJaWYgKGN4c2MgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKGN4c2MtPnY0bDJfZGV2ICE9IE5VTEwpCisJCXRvX2N4MTgoY3hzYy0+djRsMl9kZXYpLT5hbHNhID0gTlVMTDsKKworCS8qIEZJWE1FIC0gdGFrZSBhbnkgb3RoZXIgc3RvcHBpbmcgYWN0aW9ucyBuZWVkZWQgKi8KKworCWtmcmVlKGN4c2MpOworfQorCitzdGF0aWMgdm9pZCBzbmRfY3gxOF9jYXJkX3ByaXZhdGVfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKnNjKQoreworCWlmIChzYyA9PSBOVUxMKQorCQlyZXR1cm47CisJc25kX2N4MThfY2FyZF9mcmVlKHNjLT5wcml2YXRlX2RhdGEpOworCXNjLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXNjLT5wcml2YXRlX2ZyZWUgPSBOVUxMOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X2NhcmRfY3JlYXRlKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYsCisJCQkJICAgICAgIHN0cnVjdCBzbmRfY2FyZCAqc2MsCisJCQkJICAgICAgIHN0cnVjdCBzbmRfY3gxOF9jYXJkICoqY3hzYykKK3sKKwkqY3hzYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfY3gxOF9jYXJkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCpjeHNjID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJKCpjeHNjKS0+djRsMl9kZXYgPSB2NGwyX2RldjsKKwkoKmN4c2MpLT5zYyA9IHNjOworCisJc2MtPnByaXZhdGVfZGF0YSA9ICpjeHNjOworCXNjLT5wcml2YXRlX2ZyZWUgPSBzbmRfY3gxOF9jYXJkX3ByaXZhdGVfZnJlZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X2NhcmRfc2V0X25hbWVzKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgoY3hzYy0+djRsMl9kZXYpOworCXN0cnVjdCBzbmRfY2FyZCAqc2MgPSBjeHNjLT5zYzsKKworCS8qIHNjLT5kcml2ZXIgaXMgdXNlZCBieSBhbHNhLWxpYidzIGNvbmZpZ3VyYXRvcjogc2ltcGxlLCB1bmlxdWUgKi8KKwlzdHJsY3B5KHNjLT5kcml2ZXIsICJDWDIzNDE4Iiwgc2l6ZW9mKHNjLT5kcml2ZXIpKTsKKworCS8qIHNjLT5zaG9ydG5hbWUgaXMgYSBzeW1saW5rIGluIC9wcm9jL2Fzb3VuZDogQ1gxOC1NIC0+IGNhcmROICovCisJc25wcmludGYoc2MtPnNob3J0bmFtZSwgIHNpemVvZihzYy0+c2hvcnRuYW1lKSwgIkNYMTgtJWQiLAorCQkgY3gtPmluc3RhbmNlKTsKKworCS8qIHNjLT5sb25nbmFtZSBpcyByZWFkIGZyb20gL3Byb2MvYXNvdW5kL2NhcmRzICovCisJc25wcmludGYoc2MtPmxvbmduYW1lLCBzaXplb2Yoc2MtPmxvbmduYW1lKSwKKwkJICJDWDIzNDE4ICMlZCAlcyBUVi9GTSBSYWRpby9MaW5lLUluIENhcHR1cmUiLAorCQkgY3gtPmluc3RhbmNlLCBjeC0+Y2FyZF9uYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X2luaXQoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB0b19jeDE4KHY0bDJfZGV2KTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKnNjID0gTlVMTDsKKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYzsKKwlpbnQgcmV0OworCisJLyogTnVtYnJzIHN0ZXBzIGZyb20gIldyaXRpbmcgYW4gQUxTQSBEcml2ZXIiIGJ5IFRha2FzaGkgSXdhaSAqLworCisJLyogKDEpIENoZWNrIGFuZCBpbmNyZW1lbnQgdGhlIGRldmljZSBpbmRleCAqLworCS8qIFRoaXMgaXMgYSBuby1vcCBmb3IgdXMuICBXZSdsbCB1c2UgdGhlIGN4LT5pbnN0YW5jZSAqLworCisJLyogKDIpIENyZWF0ZSBhIGNhcmQgaW5zdGFuY2UgKi8KKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoU05EUlZfREVGQVVMVF9JRFgxLCAvKiB1c2UgZmlyc3QgYXZhaWxhYmxlIGlkICovCisJCQkgICAgICBTTkRSVl9ERUZBVUxUX1NUUjEsIC8qIHhpZCBmcm9tIGVuZCBvZiBzaG9ydG5hbWUqLworCQkJICAgICAgVEhJU19NT0RVTEUsIDAsICZzYyk7CisJaWYgKHJldCkgeworCQlDWDE4X0FMU0FfRVJSKCIlczogc25kX2NhcmRfY3JlYXRlKCkgZmFpbGVkIHdpdGggZXJyICVkXG4iLAorCQkJICAgICAgX19mdW5jX18sIHJldCk7CisJCWdvdG8gZXJyX2V4aXQ7CisJfQorCisJLyogKDMpIENyZWF0ZSBhIG1haW4gY29tcG9uZW50ICovCisJcmV0ID0gc25kX2N4MThfY2FyZF9jcmVhdGUodjRsMl9kZXYsIHNjLCAmY3hzYyk7CisJaWYgKHJldCkgeworCQlDWDE4X0FMU0FfRVJSKCIlczogc25kX2N4MThfY2FyZF9jcmVhdGUoKSBmYWlsZWQgd2l0aCBlcnIgJWRcbiIsCisJCQkgICAgICBfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBlcnJfZXhpdF9mcmVlOworCX0KKworCS8qICg0KSBTZXQgdGhlIGRyaXZlciBJRCBhbmQgbmFtZSBzdHJpbmdzICovCisJc25kX2N4MThfY2FyZF9zZXRfbmFtZXMoY3hzYyk7CisKKworCXJldCA9IHNuZF9jeDE4X3BjbV9jcmVhdGUoY3hzYyk7CisJaWYgKHJldCkgeworCQlDWDE4X0FMU0FfRVJSKCIlczogc25kX2N4MThfcGNtX2NyZWF0ZSgpIGZhaWxlZCB3aXRoIGVyciAlZFxuIiwKKwkJCSAgICAgIF9fZnVuY19fLCByZXQpOworCQlnb3RvIGVycl9leGl0X2ZyZWU7CisJfQorCS8qIEZJWE1FIC0gcHJvYyBmaWxlcyAqLworCisJLyogKDcpIFNldCB0aGUgZHJpdmVyIGRhdGEgYW5kIHJldHVybiAwICovCisJLyogV2UgZG8gdGhpcyBvdXQgb2Ygbm9ybWFsIG9yZGVyIGZvciBQQ0kgZHJpdmVycyB0byBhdm9pZCByYWNlcyAqLworCWN4LT5hbHNhID0gY3hzYzsKKworCS8qICg2KSBSZWdpc3RlciB0aGUgY2FyZCBpbnN0YW5jZSAqLworCXJldCA9IHNuZF9jYXJkX3JlZ2lzdGVyKHNjKTsKKwlpZiAocmV0KSB7CisJCWN4LT5hbHNhID0gTlVMTDsKKwkJQ1gxOF9BTFNBX0VSUigiJXM6IHNuZF9jYXJkX3JlZ2lzdGVyKCkgZmFpbGVkIHdpdGggZXJyICVkXG4iLAorCQkJICAgICAgX19mdW5jX18sIHJldCk7CisJCWdvdG8gZXJyX2V4aXRfZnJlZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2V4aXRfZnJlZToKKwlpZiAoc2MgIT0gTlVMTCkKKwkJc25kX2NhcmRfZnJlZShzYyk7CitlcnJfZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY3gxOF9hbHNhX2xvYWQoc3RydWN0IGN4MTggKmN4KQoreworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmY3gtPnY0bDJfZGV2OworCXN0cnVjdCBjeDE4X3N0cmVhbSAqczsKKworCWlmICh2NGwyX2RldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY3gxOC1hbHNhOiAlczogc3RydWN0IHY0bDJfZGV2aWNlICogaXMgTlVMTFxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY3ggPSB0b19jeDE4KHY0bDJfZGV2KTsKKwlpZiAoY3ggPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImN4MTgtYWxzYSBjeCBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9QQ01dOworCWlmIChzLT52aWRlb19kZXYgPT0gTlVMTCkgeworCQlDWDE4X0RFQlVHX0FMU0FfSU5GTygiJXM6IFBDTSBzdHJlYW0gZm9yIGNhcmQgaXMgZGlzYWJsZWQgLSAiCisJCQkJICAgICAic2tpcHBpbmdcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGN4LT5hbHNhICE9IE5VTEwpIHsKKwkJQ1gxOF9BTFNBX0VSUigiJXM6IHN0cnVjdCBzbmRfY3gxOF9jYXJkICogYWxyZWFkeSBleGlzdHNcbiIsCisJCQkgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzbmRfY3gxOF9pbml0KHY0bDJfZGV2KSkgeworCQlDWDE4X0FMU0FfRVJSKCIlczogZmFpbGVkIHRvIGNyZWF0ZSBzdHJ1Y3Qgc25kX2N4MThfY2FyZFxuIiwKKwkJCSAgICAgIF9fZnVuY19fKTsKKwl9IGVsc2UgeworCQlDWDE4X0RFQlVHX0FMU0FfSU5GTygiJXM6IGNyZWF0ZWQgY3gxOCBBTFNBIGludGVyZmFjZSBpbnN0YW5jZSAiCisJCQkJICAgICAiXG4iLCBfX2Z1bmNfXyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjeDE4X2Fsc2FfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gImN4MTgtYWxzYTogbW9kdWxlIGxvYWRpbmcuLi5cbiIpOworCWN4MThfZXh0X2luaXQgPSAmY3gxOF9hbHNhX2xvYWQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbmRfY3gxOF9leGl0KHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgoY3hzYy0+djRsMl9kZXYpOworCisJLyogRklYTUUgLSBwb2ludGVyIGNoZWNrcyAmIHNodXRkb3duIGN4c2MgKi8KKworCXNuZF9jYXJkX2ZyZWUoY3hzYy0+c2MpOworCWN4LT5hbHNhID0gTlVMTDsKK30KKworc3RhdGljIGludCBfX2V4aXQgY3gxOF9hbHNhX2V4aXRfY2FsbGJhY2soc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYzsKKworCWlmICh2NGwyX2RldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY3gxOC1hbHNhOiAlczogc3RydWN0IHY0bDJfZGV2aWNlICogaXMgTlVMTFxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY3hzYyA9IHRvX3NuZF9jeDE4X2NhcmQodjRsMl9kZXYpOworCWlmIChjeHNjID09IE5VTEwpIHsKKwkJQ1gxOF9BTFNBX1dBUk4oIiVzOiBzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqIGlzIE5VTExcbiIsCisJCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwlzbmRfY3gxOF9leGl0KGN4c2MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3gxOF9hbHNhX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2OworCWludCByZXQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJjeDE4LWFsc2E6IG1vZHVsZSB1bmxvYWRpbmcuLi5cbiIpOworCisJZHJ2ID0gZHJpdmVyX2ZpbmQoImN4MTgiLCAmcGNpX2J1c190eXBlKTsKKwlyZXQgPSBkcml2ZXJfZm9yX2VhY2hfZGV2aWNlKGRydiwgTlVMTCwgTlVMTCwgY3gxOF9hbHNhX2V4aXRfY2FsbGJhY2spOworCXB1dF9kcml2ZXIoZHJ2KTsKKworCWN4MThfZXh0X2luaXQgPSBOVUxMOworCXByaW50ayhLRVJOX0lORk8gImN4MTgtYWxzYTogbW9kdWxlIHVubG9hZCBjb21wbGV0ZVxuIik7Cit9CisKK21vZHVsZV9pbml0KGN4MThfYWxzYV9pbml0KTsKK21vZHVsZV9leGl0KGN4MThfYWxzYV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtbWl4ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtbWl4ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjIxMTE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1taXhlci5jCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogIEFMU0EgbWl4ZXIgY29udHJvbHMgZm9yIHRoZQorICogIEFMU0EgaW50ZXJmYWNlIHRvIGN4MTggUENNIGNhcHR1cmUgc3RyZWFtcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICogIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorCisjaW5jbHVkZSAiY3gxOC1hbHNhLmgiCisjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKKworLyoKKyAqIE5vdGUgdGhlIGN4MTgtYXYtY29yZSB2b2x1bWUgc2NhbGUgaXMgZnVubnksIGR1ZSB0byB0aGUgYWxpZ25tZW50IG9mIHRoZQorICogc2NhbGUgd2l0aCBhbm90aGVyIGNoaXAncyByYW5nZToKKyAqCisgKiB2NGwyX2NvbnRyb2wgdmFsdWUJLzUxMglpbmRpY2F0ZWQgZEIJYWN0dWFsIGRCCXJlZyAweDhkNAorICogMHgwMDAwIC0gMHgwMWZmCSAgMAktMTE5CQktOTYJCTIyOAorICogMHgwMjAwIC0gMHgwMmZmCSAgMQktMTE4CQktOTYJCTIyOAorICogLi4uCisgKiAweDJjMDAgLSAweDJkZmYJIDIyCSAtOTcJCS05NgkJMjI4CisgKiAweDJlMDAgLSAweDJmZmYJIDIzCSAtOTYJCS05NgkJMjI4CisgKiAweDMwMDAgLSAweDMxZmYJIDI0CSAtOTUJCS05NQkJMjI2CisgKiAuLi4KKyAqIDB4ZWUwMCAtIDB4ZWZmZgkxMTkJICAgMAkJICAwCQkgMzYKKyAqIC4uLgorICogMHhmZTAwIC0gMHhmZmZmCTEyNwkgICs4CQkgKzgJCSAyMAorICovCitzdGF0aWMgaW5saW5lIGludCBkQl90b19jeDE4X2F2X3ZvbChpbnQgZEIpCit7CisJaWYgKGRCIDwgLTk2KQorCQlkQiA9IC05NjsKKwllbHNlIGlmIChkQiA+IDgpCisJCWRCID0gODsKKwlyZXR1cm4gKGRCICsgMTE5KSA8PCA5OworfQorCitzdGF0aWMgaW5saW5lIGludCBjeDE4X2F2X3ZvbF90b19kQihpbnQgdikKK3sKKwlpZiAodiA8ICgyMyA8PCA5KSkKKwkJdiA9ICgyMyA8PCA5KTsKKwllbHNlIGlmICh2ID4gKDEyNyA8PCA5KSkKKwkJdiA9ICgxMjcgPDwgOSk7CisJcmV0dXJuICh2ID4+IDkpIC0gMTE5OworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X21peGVyX3R2X3ZvbF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gMTsKKwkvKiBXZSdyZSBhbHJlYWR5IHRyYW5zbGF0aW5nIHZhbHVlcywganVzdCBrZWVwIHRoaXMgY29udHJvbCBpbiBkQiAqLworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiAgPSAtOTY7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ICA9ICAgODsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5zdGVwID0gICAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X21peGVyX3R2X3ZvbF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwKKwkJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjdGwpCit7CisJc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MgPSBzbmRfa2NvbnRyb2xfY2hpcChrY3RsKTsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB0b19jeDE4KGN4c2MtPnY0bDJfZGV2KTsKKwlzdHJ1Y3QgdjRsMl9jb250cm9sIHZjdHJsOworCWludCByZXQ7CisKKwl2Y3RybC5pZCA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRTsKKwl2Y3RybC52YWx1ZSA9IGRCX3RvX2N4MThfYXZfdm9sKHVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOworCisJc25kX2N4MThfbG9jayhjeHNjKTsKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgZ19jdHJsLCAmdmN0cmwpOworCXNuZF9jeDE4X3VubG9jayhjeHNjKTsKKworCWlmICghcmV0KQorCQl1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gY3gxOF9hdl92b2xfdG9fZEIodmN0cmwudmFsdWUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfbWl4ZXJfdHZfdm9sX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLAorCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWN0bCkKK3sKKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjdGwpOworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgoY3hzYy0+djRsMl9kZXYpOworCXN0cnVjdCB2NGwyX2NvbnRyb2wgdmN0cmw7CisJaW50IHJldDsKKworCXZjdHJsLmlkID0gVjRMMl9DSURfQVVESU9fVk9MVU1FOworCXZjdHJsLnZhbHVlID0gZEJfdG9fY3gxOF9hdl92b2wodWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CisKKwlzbmRfY3gxOF9sb2NrKGN4c2MpOworCisJLyogRmV0Y2ggY3VycmVudCBzdGF0ZSAqLworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCBjb3JlLCBnX2N0cmwsICZ2Y3RybCk7CisKKwlpZiAocmV0IHx8CisJICAgIChjeDE4X2F2X3ZvbF90b19kQih2Y3RybC52YWx1ZSkgIT0gdWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkpIHsKKworCQkvKiBTZXQsIGlmIG5lZWRlZCAqLworCQl2Y3RybC52YWx1ZSA9IGRCX3RvX2N4MThfYXZfdm9sKHVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOworCQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgc19jdHJsLCAmdmN0cmwpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IDE7IC8qIEluZGljYXRlIGNvbnRyb2wgd2FzIGNoYW5nZWQgdy9vIGVycm9yICovCisJfQorCXNuZF9jeDE4X3VubG9jayhjeHNjKTsKKworCXJldHVybiByZXQ7Cit9CisKKworLyogVGhpcyBpcyBhIGJpdCBvZiBvdmVya2lsbCwgdGhlIHNsaWRlciBpcyBhbHJlYWR5IGluIGRCIGludGVybmFsbHkgKi8KK3N0YXRpYyBERUNMQVJFX1RMVl9EQl9TQ0FMRShzbmRfY3gxOF9taXhlcl90dl92b2xfZGJfc2NhbGUsIC05NjAwLCAxMDAsIDApOworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2N4MThfbWl4ZXJfdHZfdm9sIF9faW5pdGRhdGEgPSB7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUgPSAiQW5hbG9nIFRWIENhcHR1cmUgVm9sdW1lIiwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8CisJCSAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFELAorCS5pbmZvID0gc25kX2N4MThfbWl4ZXJfdHZfdm9sdW1lX2luZm8sCisJLmdldCA9IHNuZF9jeDE4X21peGVyX3R2X3ZvbHVtZV9nZXQsCisJLnB1dCA9IHNuZF9jeDE4X21peGVyX3R2X3ZvbHVtZV9wdXQsCisJLnRsdi5wID0gc25kX2N4MThfbWl4ZXJfdHZfdm9sX2RiX3NjYWxlCit9OworCisvKiBGSVhNRSAtIGFkZCBtdXRlIHN3aXRjaCBhbmQgYmFsYW5jZSwgYmFzcywgdHJlYmxlIHNsaWRlcnM6CisJVjRMMl9DSURfQVVESU9fTVVURQorCisJVjRMMl9DSURfQVVESU9fQkFMQU5DRQorCisJVjRMMl9DSURfQVVESU9fQkFTUworCVY0TDJfQ0lEX0FVRElPX1RSRUJMRQorKi8KKworLyogRklYTUUgLSBhZGQgc3RlcmVvLCBsYW5nMSwgbGFuZzIsIG1vbm8gbWVudSAqLworLyogRklYTUUgLSBhZGQgQ1M1MzQ1IEkyUyB2b2x1bWUgZm9yIEhWUi0xNjAwICovCisKK2ludCBfX2luaXQgc25kX2N4MThfbWl4ZXJfY3JlYXRlKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjKQoreworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBjeHNjLT52NGwyX2RldjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKnNjID0gY3hzYy0+c2M7CisJaW50IHJldDsKKworCXN0cmxjcHkoc2MtPm1peGVybmFtZSwgIkNYMjM0MTggTWl4ZXIiLCBzaXplb2Yoc2MtPm1peGVybmFtZSkpOworCisJcmV0ID0gc25kX2N0bF9hZGQoc2MsIHNuZF9jdGxfbmV3MShzbmRfY3gxOF9taXhlcl90dl92b2wsIGN4c2MpKTsKKwlpZiAocmV0KSB7CisJCUNYMThfQUxTQV9XQVJOKCIlczogZmFpbGVkIHRvIGFkZCAlcyBjb250cm9sLCBlcnIgJWRcbiIsCisJCQkJX19mdW5jX18sIHNuZF9jeDE4X21peGVyX3R2X3ZvbC5uYW1lLCByZXQpOworCX0KKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1taXhlci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1taXhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNDE4ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLW1peGVyLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqICBBTFNBIG1peGVyIGNvbnRyb2xzIGZvciB0aGUKKyAqICBBTFNBIGludGVyZmFjZSB0byBjeDE4IFBDTSBjYXB0dXJlIHN0cmVhbXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBBbmR5IFdhbGxzIDxhd2FsbHNAcmFkaXgubmV0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAqICAwMjExMS0xMzA3ICBVU0EKKyAqLworCitpbnQgX19pbml0IHNuZF9jeDE4X21peGVyX2NyZWF0ZShzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLXBjbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1wY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmQzMTJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYWxzYS1wY20uYwpAQCAtMCwwICsxLDM1NCBAQAorLyoKKyAqICBBTFNBIFBDTSBkZXZpY2UgZm9yIHRoZQorICogIEFMU0EgaW50ZXJmYWNlIHRvIGN4MTggUENNIGNhcHR1cmUgc3RyZWFtcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBEZXZpbiBIZWl0bXVlbGxlciA8ZGhlaXRtdWVsbGVyQGtlcm5lbGxhYnMuY29tPgorICoKKyAqICBQb3J0aW9ucyBvZiB0aGlzIHdvcmsgd2VyZSBzcG9uc29yZWQgYnkgT05FTEFOIExpbWl0ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICogIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKworI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCisjaW5jbHVkZSAiY3gxOC1xdWV1ZS5oIgorI2luY2x1ZGUgImN4MTgtc3RyZWFtcy5oIgorI2luY2x1ZGUgImN4MTgtZmlsZW9wcy5oIgorI2luY2x1ZGUgImN4MTgtYWxzYS5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IHBjbV9kZWJ1ZzsKK21vZHVsZV9wYXJhbShwY21fZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHBjbV9kZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBmb3IgcGNtIik7CisKKyNkZWZpbmUgZHByaW50ayhmbXQsIGFyZy4uLikgZG8gewkJCQkJXAorCSAgICBpZiAocGNtX2RlYnVnKQkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY3gxOC1hbHNhLXBjbSAlczogIiBmbXQsCQlcCisJCQkJICBfX2Z1bmNfXywgIyNhcmcpOyAJCQlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9jeDE4X2h3X2NhcHR1cmUgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCVNORFJWX1BDTV9JTkZPX01NQVAgICAgICAgICAgIHwKKwkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgICAgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElELAorCisJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKworCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAorCisJLnJhdGVfbWluID0gNDgwMDAsCisJLnJhdGVfbWF4ID0gNDgwMDAsCisJLmNoYW5uZWxzX21pbiA9IDIsCisJLmNoYW5uZWxzX21heCA9IDIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSA2MjcyMCAqIDgsCS8qIGp1c3QgYWJvdXQgdGhlIHZhbHVlIGluIHVzYmF1ZGlvLmMgKi8KKwkucGVyaW9kX2J5dGVzX21pbiA9IDY0LAkJLyogMTI1NDQvMiwgKi8KKwkucGVyaW9kX2J5dGVzX21heCA9IDEyNTQ0LAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gOTgsCQkvKiAxMjU0NCwgKi8KK307CisKK3ZvaWQgY3gxOF9hbHNhX2Fubm91bmNlX3BjbV9kYXRhKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjLCB1OCAqcGNtX2RhdGEsCisJCQkJIHNpemVfdCBudW1fYnl0ZXMpCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKKwl1bnNpZ25lZCBpbnQgb2xkcHRyOworCXVuc2lnbmVkIGludCBzdHJpZGU7CisJaW50IHBlcmlvZF9lbGFwc2VkID0gMDsKKwlpbnQgbGVuZ3RoOworCisJZHByaW50aygiY3gxOCBhbHNhIGFubm91bmNlIHB0cj0lcCBkYXRhPSVwIG51bV9ieXRlcz0lemRcbiIsIGN4c2MsCisJCXBjbV9kYXRhLCBudW1fYnl0ZXMpOworCisJc3Vic3RyZWFtID0gY3hzYy0+Y2FwdHVyZV9wY21fc3Vic3RyZWFtOworCWlmIChzdWJzdHJlYW0gPT0gTlVMTCkgeworCQlkcHJpbnRrKCJzdWJzdHJlYW0gd2FzIE5VTExcbiIpOworCQlyZXR1cm47CisJfQorCisJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlpZiAocnVudGltZSA9PSBOVUxMKSB7CisJCWRwcmludGsoInJ1bnRpbWUgd2FzIE5VTExcbiIpOworCQlyZXR1cm47CisJfQorCisJc3RyaWRlID0gcnVudGltZS0+ZnJhbWVfYml0cyA+PiAzOworCWlmIChzdHJpZGUgPT0gMCkgeworCQlkcHJpbnRrKCJzdHJpZGUgaXMgemVyb1xuIik7CisJCXJldHVybjsKKwl9CisKKwlsZW5ndGggPSBudW1fYnl0ZXMgLyBzdHJpZGU7CisJaWYgKGxlbmd0aCA9PSAwKSB7CisJCWRwcmludGsoIiVzOiBsZW5ndGggd2FzIHplcm9cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChydW50aW1lLT5kbWFfYXJlYSA9PSBOVUxMKSB7CisJCWRwcmludGsoImRtYSBhcmVhIHdhcyBOVUxMIC0gaWdub3JpbmdcbiIpOworCQlyZXR1cm47CisJfQorCisJb2xkcHRyID0gY3hzYy0+aHdwdHJfZG9uZV9jYXB0dXJlOworCWlmIChvbGRwdHIgKyBsZW5ndGggPj0gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKKwkJdW5zaWduZWQgaW50IGNudCA9CisJCQlydW50aW1lLT5idWZmZXJfc2l6ZSAtIG9sZHB0cjsKKwkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgb2xkcHRyICogc3RyaWRlLCBwY21fZGF0YSwKKwkJICAgICAgIGNudCAqIHN0cmlkZSk7CisJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSwgcGNtX2RhdGEgKyBjbnQgKiBzdHJpZGUsCisJCSAgICAgICBsZW5ndGggKiBzdHJpZGUgLSBjbnQgKiBzdHJpZGUpOworCX0gZWxzZSB7CisJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIG9sZHB0ciAqIHN0cmlkZSwgcGNtX2RhdGEsCisJCSAgICAgICBsZW5ndGggKiBzdHJpZGUpOworCX0KKwlzbmRfcGNtX3N0cmVhbV9sb2NrKHN1YnN0cmVhbSk7CisKKwljeHNjLT5od3B0cl9kb25lX2NhcHR1cmUgKz0gbGVuZ3RoOworCWlmIChjeHNjLT5od3B0cl9kb25lX2NhcHR1cmUgPj0KKwkgICAgcnVudGltZS0+YnVmZmVyX3NpemUpCisJCWN4c2MtPmh3cHRyX2RvbmVfY2FwdHVyZSAtPQorCQkJcnVudGltZS0+YnVmZmVyX3NpemU7CisKKwljeHNjLT5jYXB0dXJlX3RyYW5zZmVyX2RvbmUgKz0gbGVuZ3RoOworCWlmIChjeHNjLT5jYXB0dXJlX3RyYW5zZmVyX2RvbmUgPj0KKwkgICAgcnVudGltZS0+cGVyaW9kX3NpemUpIHsKKwkJY3hzYy0+Y2FwdHVyZV90cmFuc2Zlcl9kb25lIC09CisJCQlydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwkJcGVyaW9kX2VsYXBzZWQgPSAxOworCX0KKworCXNuZF9wY21fc3RyZWFtX3VubG9jayhzdWJzdHJlYW0pOworCisJaWYgKHBlcmlvZF9lbGFwc2VkKQorCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfcGNtX2NhcHR1cmVfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBjeHNjLT52NGwyX2RldjsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB0b19jeDE4KHY0bDJfZGV2KTsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnM7CisJc3RydWN0IGN4MThfb3Blbl9pZCBpdGVtOworCWludCByZXQ7CisKKwkvKiBJbnN0cnVjdCB0aGUgY3gxOCB0byBzdGFydCBzZW5kaW5nIHBhY2tldHMgKi8KKwlzbmRfY3gxOF9sb2NrKGN4c2MpOworCXMgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfUENNXTsKKworCWl0ZW0uY3ggPSBjeDsKKwlpdGVtLnR5cGUgPSBzLT50eXBlOworCWl0ZW0ub3Blbl9pZCA9IGN4LT5vcGVuX2lkKys7CisKKwkvKiBTZWUgaWYgdGhlIHN0cmVhbSBpcyBhdmFpbGFibGUgKi8KKwlpZiAoY3gxOF9jbGFpbV9zdHJlYW0oJml0ZW0sIGl0ZW0udHlwZSkpIHsKKwkJLyogTm8sIGl0J3MgYWxyZWFkeSBpbiB1c2UgKi8KKwkJc25kX2N4MThfdW5sb2NrKGN4c2MpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmICh0ZXN0X2JpdChDWDE4X0ZfU19TVFJFQU1PRkYsICZzLT5zX2ZsYWdzKSB8fAorCSAgICB0ZXN0X2FuZF9zZXRfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnMtPnNfZmxhZ3MpKSB7CisJCS8qIFdlJ3JlIGFscmVhZHkgc3RyZWFtaW5nLiAgTm8gYWRkaXRpb25hbCBhY3Rpb24gcmVxdWlyZWQgKi8KKwkJc25kX2N4MThfdW5sb2NrKGN4c2MpOworCQlyZXR1cm4gMDsKKwl9CisKKworCXJ1bnRpbWUtPmh3ID0gc25kX2N4MThfaHdfY2FwdHVyZTsKKwlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUyk7CisJY3hzYy0+Y2FwdHVyZV9wY21fc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGN4OworCisJY3gtPnBjbV9hbm5vdW5jZV9jYWxsYmFjayA9IGN4MThfYWxzYV9hbm5vdW5jZV9wY21fZGF0YTsKKworCS8qIE5vdCBjdXJyZW50bHkgc3RyZWFtaW5nLCBzbyBzdGFydCBpdCB1cCAqLworCXNldF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmcy0+c19mbGFncyk7CisJcmV0ID0gY3gxOF9zdGFydF92NGwyX2VuY29kZV9zdHJlYW0ocyk7CisJc25kX2N4MThfdW5sb2NrKGN4c2MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfcGNtX2NhcHR1cmVfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGN4c2MtPnY0bDJfZGV2OworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgodjRsMl9kZXYpOworCXN0cnVjdCBjeDE4X3N0cmVhbSAqczsKKwlpbnQgcmV0OworCisJLyogSW5zdHJ1Y3QgdGhlIGN4MTggdG8gc3RvcCBzZW5kaW5nIHBhY2tldHMgKi8KKwlzbmRfY3gxOF9sb2NrKGN4c2MpOworCXMgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfUENNXTsKKwlyZXQgPSBjeDE4X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKHMsIDApOworCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKTsKKworCWN4MThfcmVsZWFzZV9zdHJlYW0ocyk7CisKKwljeC0+cGNtX2Fubm91bmNlX2NhbGxiYWNrID0gTlVMTDsKKwlzbmRfY3gxOF91bmxvY2soY3hzYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9wY21faW9jdGwoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXJldHVybiBzbmRfcGNtX2xpYl9pb2N0bChzdWJzdHJlYW0sIGNtZCwgYXJnKTsKK30KKworCitzdGF0aWMgaW50IHNuZF9wY21fYWxsb2Nfdm1hbGxvY19idWZmZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzLAorCQkJCQlzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vicy0+cnVudGltZTsKKworCWRwcmludGsoIkFsbG9jYXRpbmcgdmJ1ZmZlclxuIik7CisJaWYgKHJ1bnRpbWUtPmRtYV9hcmVhKSB7CisJCWlmIChydW50aW1lLT5kbWFfYnl0ZXMgPiBzaXplKQorCQkJcmV0dXJuIDA7CisKKwkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOworCX0KKwlydW50aW1lLT5kbWFfYXJlYSA9IHZtYWxsb2Moc2l6ZSk7CisJaWYgKCFydW50aW1lLT5kbWFfYXJlYSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2N4MThfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlpbnQgcmV0OworCisJZHByaW50aygiJXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXQgPSBzbmRfcGNtX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSwKKwkJCQkJICAgcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9wY21faHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmN4c2MtPnNsb2NrLCBmbGFncyk7CisJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpIHsKKwkJZHByaW50aygiZnJlZWluZyBwY20gY2FwdHVyZSByZWdpb25cbiIpOworCQl2ZnJlZShzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhKTsKKwkJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSA9IE5VTEw7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN4c2MtPnNsb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfY3gxOF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWN4c2MtPmh3cHRyX2RvbmVfY2FwdHVyZSA9IDA7CisJY3hzYy0+Y2FwdHVyZV90cmFuc2Zlcl9kb25lID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9jeDE4X3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMKK3NuZF9wY21fdWZyYW1lc190IHNuZF9jeDE4X3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc25kX3BjbV91ZnJhbWVzX3QgaHdwdHJfZG9uZTsKKwlzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY3hzYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjeHNjLT5zbG9jaywgZmxhZ3MpOworCWh3cHRyX2RvbmUgPSBjeHNjLT5od3B0cl9kb25lX2NhcHR1cmU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3hzYy0+c2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBod3B0cl9kb25lOworfQorCitzdGF0aWMgc3RydWN0IHBhZ2UgKnNuZF9wY21fZ2V0X3ZtYWxsb2NfcGFnZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJdm9pZCAqcGFnZXB0ciA9IHN1YnMtPnJ1bnRpbWUtPmRtYV9hcmVhICsgb2Zmc2V0OworCisJcmV0dXJuIHZtYWxsb2NfdG9fcGFnZShwYWdlcHRyKTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfY3gxOF9wY21fY2FwdHVyZV9vcHMgPSB7CisJLm9wZW4JCT0gc25kX2N4MThfcGNtX2NhcHR1cmVfb3BlbiwKKwkuY2xvc2UJCT0gc25kX2N4MThfcGNtX2NhcHR1cmVfY2xvc2UsCisJLmlvY3RsCQk9IHNuZF9jeDE4X3BjbV9pb2N0bCwKKwkuaHdfcGFyYW1zCT0gc25kX2N4MThfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IHNuZF9jeDE4X3BjbV9od19mcmVlLAorCS5wcmVwYXJlCT0gc25kX2N4MThfcGNtX3ByZXBhcmUsCisJLnRyaWdnZXIJPSBzbmRfY3gxOF9wY21fdHJpZ2dlciwKKwkucG9pbnRlcgk9IHNuZF9jeDE4X3BjbV9wb2ludGVyLAorCS5wYWdlCQk9IHNuZF9wY21fZ2V0X3ZtYWxsb2NfcGFnZSwKK307CisKK2ludCBzbmRfY3gxOF9wY21fY3JlYXRlKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjKQoreworCXN0cnVjdCBzbmRfcGNtICpzcDsKKwlzdHJ1Y3Qgc25kX2NhcmQgKnNjID0gY3hzYy0+c2M7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGN4c2MtPnY0bDJfZGV2OworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgodjRsMl9kZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBzbmRfcGNtX25ldyhzYywgIkNYMjM0MTggUENNIiwKKwkJCSAgMCwgLyogUENNIGRldmljZSAwLCB0aGUgb25seSBvbmUgZm9yIHRoaXMgY2FyZCAqLworCQkJICAwLCAvKiAwIHBsYXliYWNrIHN1YnN0cmVhbXMgKi8KKwkJCSAgMSwgLyogMSBjYXB0dXJlIHN1YnN0cmVhbSAqLworCQkJICAmc3ApOworCWlmIChyZXQpIHsKKwkJQ1gxOF9BTFNBX0VSUigiJXM6IHNuZF9jeDE4X3BjbV9jcmVhdGUoKSBmYWlsZWQgd2l0aCBlcnIgJWRcbiIsCisJCQkgICAgICBfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBlcnJfZXhpdDsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmY3hzYy0+c2xvY2spOworCisJc25kX3BjbV9zZXRfb3BzKHNwLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCisJCQkmc25kX2N4MThfcGNtX2NhcHR1cmVfb3BzKTsKKwlzcC0+aW5mb19mbGFncyA9IDA7CisJc3AtPnByaXZhdGVfZGF0YSA9IGN4c2M7CisJc3RybGNweShzcC0+bmFtZSwgY3gtPmNhcmRfbmFtZSwgc2l6ZW9mKHNwLT5uYW1lKSk7CisKKwlyZXR1cm4gMDsKKworZXJyX2V4aXQ6CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EtcGNtLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLXBjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNTY2MmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLXBjbS5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiAgQUxTQSBQQ00gZGV2aWNlIGZvciB0aGUKKyAqICBBTFNBIGludGVyZmFjZSB0byBjeDE4IFBDTSBjYXB0dXJlIHN0cmVhbXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBBbmR5IFdhbGxzIDxhd2FsbHNAcmFkaXgubmV0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyAqICAwMjExMS0xMzA3ICBVU0EKKyAqLworCitpbnQgX19pbml0IHNuZF9jeDE4X3BjbV9jcmVhdGUoc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MpOworCisvKiBVc2VkIGJ5IGN4MTgtbWFpbGJveCB0byBhbm5vdW5jZSB0aGUgUENNIGRhdGEgdG8gdGhlIG1vZHVsZSAqLwordm9pZCBjeDE4X2Fsc2FfYW5ub3VuY2VfcGNtX2RhdGEoc3RydWN0IHNuZF9jeDE4X2NhcmQgKmNhcmQsIHU4ICpwY21fZGF0YSwKKwkJCQkgc2l6ZV90IG51bV9ieXRlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hbHNhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhhMWNkZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWFsc2EuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogIEFMU0EgaW50ZXJmYWNlIHRvIGN4MTggUENNIGNhcHR1cmUgc3RyZWFtcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICogIDAyMTExLTEzMDcgIFVTQQorICovCisKK3N0cnVjdCBzbmRfY2FyZDsKKworc3RydWN0IHNuZF9jeDE4X2NhcmQgeworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXY7CisJc3RydWN0IHNuZF9jYXJkICpzYzsKKwl1bnNpZ25lZCBpbnQgY2FwdHVyZV90cmFuc2Zlcl9kb25lOworCXVuc2lnbmVkIGludCBod3B0cl9kb25lX2NhcHR1cmU7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpjYXB0dXJlX3BjbV9zdWJzdHJlYW07CisJc3BpbmxvY2tfdCBzbG9jazsKK307CisKK2V4dGVybiBpbnQgY3gxOF9hbHNhX2RlYnVnOworCisvKgorICogRmlsZSBvcGVyYXRpb25zIHRoYXQgbWFuaXB1bGF0ZSB0aGUgZW5jb2RlciBvciB2aWRlbyBvciBhdWRpbyBzdWJkZXZpY2VzCisgKiBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQuICBVc2UgdGhlIHNhbWUgbG9jayB3ZSB1c2UgZm9yIHY0bDIgZmlsZSBvcHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmRfY3gxOF9sb2NrKHN0cnVjdCBzbmRfY3gxOF9jYXJkICpjeHNjKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgoY3hzYy0+djRsMl9kZXYpOworCW11dGV4X2xvY2soJmN4LT5zZXJpYWxpemVfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmRfY3gxOF91bmxvY2soc3RydWN0IHNuZF9jeDE4X2NhcmQgKmN4c2MpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdG9fY3gxOChjeHNjLT52NGwyX2Rldik7CisJbXV0ZXhfdW5sb2NrKCZjeC0+c2VyaWFsaXplX2xvY2spOworfQorCisjZGVmaW5lIENYMThfQUxTQV9EQkdGTEdfV0FSTiAgKDEgPDwgMCkKKyNkZWZpbmUgQ1gxOF9BTFNBX0RCR0ZMR19XQVJOICAoMSA8PCAwKQorI2RlZmluZSBDWDE4X0FMU0FfREJHRkxHX0lORk8gICgxIDw8IDEpCisKKyNkZWZpbmUgQ1gxOF9BTFNBX0RFQlVHKHgsIHR5cGUsIGZtdCwgYXJncy4uLikgXAorCWRvIHsgXAorCQlpZiAoKHgpICYgY3gxOF9hbHNhX2RlYnVnKSBcCisJCQlwcmludGsoS0VSTl9JTkZPICIlcy1hbHNhOiAiIHR5cGUgIjogIiBmbXQsIFwKKwkJCQl2NGwyX2Rldi0+bmFtZSAsICMjIGFyZ3MpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBDWDE4X0FMU0FfREVCVUdfV0FSTihmbXQsIGFyZ3MuLi4pIFwKKwlDWDE4X0FMU0FfREVCVUcoQ1gxOF9BTFNBX0RCR0ZMR19XQVJOLCAid2FybmluZyIsIGZtdCAsICMjIGFyZ3MpCisKKyNkZWZpbmUgQ1gxOF9BTFNBX0RFQlVHX0lORk8oZm10LCBhcmdzLi4uKSBcCisJQ1gxOF9BTFNBX0RFQlVHKENYMThfQUxTQV9EQkdGTEdfSU5GTywgImluZm8iLCBmbXQgLCAjIyBhcmdzKQorCisjZGVmaW5lIENYMThfQUxTQV9FUlIoZm10LCBhcmdzLi4uKSBcCisJcHJpbnRrKEtFUk5fRVJSICIlcy1hbHNhOiAiIGZtdCwgdjRsMl9kZXYtPm5hbWUgLCAjIyBhcmdzKQorCisjZGVmaW5lIENYMThfQUxTQV9XQVJOKGZtdCwgYXJncy4uLikgXAorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzLWFsc2E6ICIgZm10LCB2NGwyX2Rldi0+bmFtZSAsICMjIGFyZ3MpCisKKyNkZWZpbmUgQ1gxOF9BTFNBX0lORk8oZm10LCBhcmdzLi4uKSBcCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMtYWxzYTogIiBmbXQsIHY0bDJfZGV2LT5uYW1lICwgIyMgYXJncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jCmluZGV4IGYxMWU0N2EuLmY4MDhmYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJLmdwaW9faW5pdC5kaXJlY3Rpb24gPSAweDcsCiAJLmdwaW9fYXVkaW9faW5wdXQgPSB7IC5tYXNrICAgPSAweDcsCiAJCQkgICAgICAudHVuZXIgID0gMHg2LCAubGluZWluID0gMHgyLCAucmFkaW8gID0gMHgyIH0sCi0JLnhjZWl2ZV9waW4gPSAxNSwKKwkueGNlaXZlX3BpbiA9IDEsCiAJLnBjaV9saXN0ID0gY3gxOF9wY2lfbGVhZHRla19wdnIyMTAwLAogCS5pMmMgPSAmY3gxOF9pMmNfc3RkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKaW5kZXggN2Y2NWE0Ny4uYzk1YTg2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKQEAgLTQ3LDYgKzQ3LDEwIEBACiAgICBzZXR0aW5nIHRoaXMgdG8gMSB5b3UgZW5zdXJlIHRoYXQgcmFkaW8wIGlzIG5vdyBhbHNvIHJhZGlvMS4gKi8KIGludCBjeDE4X2ZpcnN0X21pbm9yOwogCisvKiBDYWxsYmFjayBmb3IgcmVnaXN0ZXJpbmcgZXh0ZW5zaW9ucyAqLworaW50ICgqY3gxOF9leHRfaW5pdCkoc3RydWN0IGN4MTggKik7CitFWFBPUlRfU1lNQk9MKGN4MThfZXh0X2luaXQpOworCiAvKiBhZGQgeW91ciByZXZpc2lvbiBhbmQgd2hhdG5vdCBoZXJlICovCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3gxOF9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9DWCwgUENJX0RFVklDRV9JRF9DWDIzNDE4LApAQCAtOTEsNyArOTUsNyBAQAogCiBzdGF0aWMgaW50IGVuY190c19idWZzID0gLTE7CiBzdGF0aWMgaW50IGVuY19tcGdfYnVmcyA9IC0xOwotc3RhdGljIGludCBlbmNfaWR4X2J1ZnMgPSAtMTsKK3N0YXRpYyBpbnQgZW5jX2lkeF9idWZzID0gQ1gxOF9NQVhfRldfTURMU19QRVJfU1RSRUFNOwogc3RhdGljIGludCBlbmNfeXV2X2J1ZnMgPSAtMTsKIHN0YXRpYyBpbnQgZW5jX3ZiaV9idWZzID0gLTE7CiBzdGF0aWMgaW50IGVuY19wY21fYnVmcyA9IC0xOwpAQCAtMTk2LDE0ICsyMDAsMTcgQEAKIAkJICJOdW1iZXIgb2YgZW5jb2RlciBNUEcgYnVmZmVyc1xuIgogCQkgIlx0XHRcdERlZmF1bHQgaXMgY29tcHV0ZWQgZnJvbSBvdGhlciBlbmNfbXBnXyogcGFyYW1ldGVycyIpOwogTU9EVUxFX1BBUk1fREVTQyhlbmNfaWR4X2J1ZmZlcnMsCi0JCSAiRW5jb2RlciBJRFggYnVmZmVyIG1lbW9yeSAoTUIpLiAoZW5jX2lkeF9idWZzIGNhbiBvdmVycmlkZSlcbiIKLQkJICJcdFx0XHREZWZhdWx0OiAiIF9fc3RyaW5naWZ5KENYMThfREVGQVVMVF9FTkNfSURYX0JVRkZFUlMpKTsKKwkJICIoRGVwcmVjYXRlZCkgRW5jb2RlciBJRFggYnVmZmVyIG1lbW9yeSAoTUIpXG4iCisJCSAiXHRcdFx0SWdub3JlZCwgZXhjZXB0IDAgZGlzYWJsZXMgSURYIGJ1ZmZlciBhbGxvY2F0aW9uc1xuIgorCQkgIlx0XHRcdERlZmF1bHQ6IDEgW0VuYWJsZWRdIik7CiBNT0RVTEVfUEFSTV9ERVNDKGVuY19pZHhfYnVmc2l6ZSwKIAkJICJTaXplIG9mIGFuIGVuY29kZXIgSURYIGJ1ZmZlciAoa0IpXG4iCi0JCSAiXHRcdFx0RGVmYXVsdDogIiBfX3N0cmluZ2lmeShDWDE4X0RFRkFVTFRfRU5DX0lEWF9CVUZTSVpFKSk7CisJCSAiXHRcdFx0QWxsb3dlZCB2YWx1ZXMgYXJlIG11bHRpcGxlcyBvZiAxLjUga0Igcm91bmRlZCB1cFxuIgorCQkgIlx0XHRcdChtdWx0aXBsZXMgb2Ygc2l6ZSByZXF1aXJlZCBmb3IgNjQgaW5kZXggZW50cmllcylcbiIKKwkJICJcdFx0XHREZWZhdWx0OiAyIik7CiBNT0RVTEVfUEFSTV9ERVNDKGVuY19pZHhfYnVmcywKIAkJICJOdW1iZXIgb2YgZW5jb2RlciBJRFggYnVmZmVyc1xuIgotCQkgIlx0XHRcdERlZmF1bHQgaXMgY29tcHV0ZWQgZnJvbSBvdGhlciBlbmNfaWR4XyogcGFyYW1ldGVycyIpOworCQkgIlx0XHRcdERlZmF1bHQ6ICIgX19zdHJpbmdpZnkoQ1gxOF9NQVhfRldfTURMU19QRVJfU1RSRUFNKSk7CiBNT0RVTEVfUEFSTV9ERVNDKGVuY195dXZfYnVmZmVycywKIAkJICJFbmNvZGVyIFlVViBidWZmZXIgbWVtb3J5IChNQikuIChlbmNfeXV2X2J1ZnMgY2FuIG92ZXJyaWRlKVxuIgogCQkgIlx0XHRcdERlZmF1bHQ6ICIgX19zdHJpbmdpZnkoQ1gxOF9ERUZBVUxUX0VOQ19ZVVZfQlVGRkVSUykpOwpAQCAtMjMxLDcgKzIzOCw4IEBACiAJCSAiTnVtYmVyIG9mIGVuY29kZXIgUENNIGJ1ZmZlcnNcbiIKIAkJICJcdFx0XHREZWZhdWx0IGlzIGNvbXB1dGVkIGZyb20gb3RoZXIgZW5jX3BjbV8qIHBhcmFtZXRlcnMiKTsKIAotTU9EVUxFX1BBUk1fREVTQyhjeDE4X2ZpcnN0X21pbm9yLCAiU2V0IGRldmljZSBub2RlIG51bWJlciBhc3NpZ25lZCB0byBmaXJzdCBjYXJkIik7CitNT0RVTEVfUEFSTV9ERVNDKGN4MThfZmlyc3RfbWlub3IsCisJCSAiU2V0IGRldmljZSBub2RlIG51bWJlciBhc3NpZ25lZCB0byBmaXJzdCBjYXJkIik7CiAKIE1PRFVMRV9BVVRIT1IoIkhhbnMgVmVya3VpbCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJDWDIzNDE4IGRyaXZlciIpOwpAQCAtMjQwLDYgKzI0OCwyOCBAQAogCiBNT0RVTEVfVkVSU0lPTihDWDE4X1ZFUlNJT04pOwogCisjaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFUykgJiYgZGVmaW5lZChNT0RVTEUpCitzdGF0aWMgdm9pZCByZXF1ZXN0X21vZHVsZV9hc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGN4MTggKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3gxOCwgcmVxdWVzdF9tb2R1bGVfd2spOworCisJLyogTWFrZSBzdXJlIGN4MTgtYWxzYSBtb2R1bGUgaXMgbG9hZGVkICovCisJcmVxdWVzdF9tb2R1bGUoImN4MTgtYWxzYSIpOworCisJLyogSW5pdGlhbGl6ZSBjeDE4LWFsc2EgZm9yIHRoaXMgaW5zdGFuY2Ugb2YgdGhlIGN4MTggZGV2aWNlICovCisJaWYgKGN4MThfZXh0X2luaXQgIT0gTlVMTCkKKwkJY3gxOF9leHRfaW5pdChkZXYpOworfQorCitzdGF0aWMgdm9pZCByZXF1ZXN0X21vZHVsZXMoc3RydWN0IGN4MTggKmRldikKK3sKKwlJTklUX1dPUksoJmRldi0+cmVxdWVzdF9tb2R1bGVfd2ssIHJlcXVlc3RfbW9kdWxlX2FzeW5jKTsKKwlzY2hlZHVsZV93b3JrKCZkZXYtPnJlcXVlc3RfbW9kdWxlX3drKTsKK30KKyNlbHNlCisjZGVmaW5lIHJlcXVlc3RfbW9kdWxlcyhkZXYpCisjZW5kaWYgLyogQ09ORklHX01PRFVMRVMgKi8KKwogLyogR2VuZXJpYyB1dGlsaXR5IGZ1bmN0aW9ucyAqLwogaW50IGN4MThfbXNsZWVwX3RpbWVvdXQodW5zaWduZWQgaW50IG1zZWNzLCBpbnQgaW50cikKIHsKQEAgLTUwMSw3ICs1MzEsMTIgQEAKIAkJLyoKIAkJICogWVVWIGlzIGEgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSBzdHJlYW1fYnVmX3NpemUgbmVlZHMgdG8gYmUKIAkJICogYW4gaW50ZWdyYWwgbXVsdGlwbGUgb2YgMzMuNzUga0IgKHN0b3JhZ2UgZm9yIDMyIHNjcmVlbnMKLQkJICogbGluZXMgdG8gbWFpbnRhaW4gYWxpZ25tZW50IGluIGNhc2Ugb2YgbG9zdCBidWZmZXJzCisJCSAqIGxpbmVzIHRvIG1haW50YWluIGFsaWdubWVudCBpbiBjYXNlIG9mIGxvc3QgYnVmZmVycykuCisJCSAqCisJCSAqIElEWCBpcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgc3RyZWFtX2J1Zl9zaXplIHNob3VsZCBiZQorCQkgKiBhbiBpbnRlZ3JhbCBtdWx0aXBsZSBvZiAxLjUga0IgKHN0b3JhZ2UgZm9yIDY0IGluZGV4IGVudHJpZXMKKwkJICogdG8gbWFpbnRhaW4gYWxpZ25tZW50IGluIGNhc2Ugb2YgbG9zdCBidWZmZXJzKS4KKwkJICoKIAkJICovCiAJCWlmIChpID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1lVVikgewogCQkJY3gtPnN0cmVhbV9idWZfc2l6ZVtpXSAqPSAxMDI0OwpAQCAtNTExLDE1ICs1NDYsMjQgQEAKIAkJCWlmIChjeC0+c3RyZWFtX2J1Zl9zaXplW2ldIDwgQ1gxOF9VTklUX0VOQ19ZVVZfQlVGU0laRSkKIAkJCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldID0KIAkJCQkJCUNYMThfVU5JVF9FTkNfWVVWX0JVRlNJWkU7CisJCX0gZWxzZSBpZiAoaSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFgpIHsKKwkJCWN4LT5zdHJlYW1fYnVmX3NpemVbaV0gKj0gMTAyNDsKKwkJCWN4LT5zdHJlYW1fYnVmX3NpemVbaV0gLT0KKwkJCSAgIChjeC0+c3RyZWFtX2J1Zl9zaXplW2ldICUgQ1gxOF9VTklUX0VOQ19JRFhfQlVGU0laRSk7CisKKwkJCWlmIChjeC0+c3RyZWFtX2J1Zl9zaXplW2ldIDwgQ1gxOF9VTklUX0VOQ19JRFhfQlVGU0laRSkKKwkJCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldID0KKwkJCQkJCUNYMThfVU5JVF9FTkNfSURYX0JVRlNJWkU7CiAJCX0KIAkJLyoKLQkJICogWVVWIGlzIGEgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSBzdHJlYW1fYnVmX3NpemUgaXMKKwkJICogWVVWIGFuZCBJRFggYXJlIHNwZWNpYWwgY2FzZXMgd2hlcmUgdGhlIHN0cmVhbV9idWZfc2l6ZSBpcwogCQkgKiBub3cgaW4gYnl0ZXMuCiAJCSAqIFZCSSBpcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgc3RyZWFtX2J1Zl9zaXplIGlzIGZpeGVkCiAJCSAqIGFuZCBhbHJlYWR5IGluIGJ5dGVzCiAJCSAqLwogCQlpZiAoaSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkkgfHwKLQkJICAgIGkgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfWVVWKSB7CisJCSAgICBpID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1lVViB8fAorCQkgICAgaSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFgpIHsKIAkJCWlmIChjeC0+c3RyZWFtX2J1ZmZlcnNbaV0gPCAwKSB7CiAJCQkJY3gtPnN0cmVhbV9idWZmZXJzW2ldID0KIAkJCQkJY3gtPm9wdGlvbnMubWVnYWJ5dGVzW2ldICogMTAyNCAqIDEwMjQKQEAgLTEwMzIsNiArMTA3NiwxMCBAQAogCX0KIAogCUNYMThfSU5GTygiSW5pdGlhbGl6ZWQgY2FyZDogJXNcbiIsIGN4LT5jYXJkX25hbWUpOworCisJLyogTG9hZCBjeDE4IHN1Ym1vZHVsZXMgKGN4MTgtYWxzYSkgKi8KKwlyZXF1ZXN0X21vZHVsZXMoY3gpOworCiAJcmV0dXJuIDA7CiAKIGZyZWVfc3RyZWFtczoKQEAgLTEyMjAsNiArMTI2OCw3IEBACiAJa2ZyZWUoY3gpOwogfQogCisKIC8qIGRlZmluZSBhIHBjaV9kcml2ZXIgZm9yIGNhcmQgZGV0ZWN0aW9uICovCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY3gxOF9wY2lfZHJpdmVyID0gewogICAgICAgLm5hbWUgPSAgICAgImN4MTgiLApAQCAtMTIzMCw3ICsxMjc5LDggQEAKIAogc3RhdGljIGludCBfX2luaXQgbW9kdWxlX3N0YXJ0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiY3gxODogIFN0YXJ0IGluaXRpYWxpemF0aW9uLCB2ZXJzaW9uICVzXG4iLCBDWDE4X1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gImN4MTg6ICBTdGFydCBpbml0aWFsaXphdGlvbiwgdmVyc2lvbiAlc1xuIiwKKwkgICAgICAgQ1gxOF9WRVJTSU9OKTsKIAogCS8qIFZhbGlkYXRlIHBhcmFtZXRlcnMgKi8KIAlpZiAoY3gxOF9maXJzdF9taW5vciA8IDAgfHwgY3gxOF9maXJzdF9taW5vciA+PSBDWDE4X01BWF9DQVJEUykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaAppbmRleCBlM2Y3OTExLi4yM2FkNmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaApAQCAtMTI2LDEwICsxMjYsMjIgQEAKICNkZWZpbmUgQ1gxOF82MjVfTElORV9FTkNfWVVWX0JVRlNJWkUJKENYMThfVU5JVF9FTkNfWVVWX0JVRlNJWkUgKiA1NzYvMzIpCiAjZGVmaW5lIENYMThfNTI1X0xJTkVfRU5DX1lVVl9CVUZTSVpFCShDWDE4X1VOSVRfRU5DX1lVVl9CVUZTSVpFICogNDgwLzMyKQogCisvKiBJRFggYnVmZmVyIHNpemUgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgdGhlIGluZGV4IGVudHJ5IHNpemUgZnJvbSB0aGUgY2hpcCAqLworc3RydWN0IGN4MThfZW5jX2lkeF9lbnRyeSB7CisJX19sZTMyIGxlbmd0aDsKKwlfX2xlMzIgb2Zmc2V0X2xvdzsKKwlfX2xlMzIgb2Zmc2V0X2hpZ2g7CisJX19sZTMyIGZsYWdzOworCV9fbGUzMiBwdHNfbG93OworCV9fbGUzMiBwdHNfaGlnaDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworI2RlZmluZSBDWDE4X1VOSVRfRU5DX0lEWF9CVUZTSVpFIFwKKwkoc2l6ZW9mKHN0cnVjdCBjeDE4X2VuY19pZHhfZW50cnkpICogVjRMMl9FTkNfSURYX0VOVFJJRVMpCisKIC8qIERNQSBidWZmZXIsIGRlZmF1bHQgc2l6ZSBpbiBrQiBhbGxvY2F0ZWQgKi8KICNkZWZpbmUgQ1gxOF9ERUZBVUxUX0VOQ19UU19CVUZTSVpFICAgMzIKICNkZWZpbmUgQ1gxOF9ERUZBVUxUX0VOQ19NUEdfQlVGU0laRSAgMzIKLSNkZWZpbmUgQ1gxOF9ERUZBVUxUX0VOQ19JRFhfQlVGU0laRSAgMzIKKyNkZWZpbmUgQ1gxOF9ERUZBVUxUX0VOQ19JRFhfQlVGU0laRSAgKENYMThfVU5JVF9FTkNfSURYX0JVRlNJWkUgKiAxIC8gMTAyNCArIDEpCiAjZGVmaW5lIENYMThfREVGQVVMVF9FTkNfWVVWX0JVRlNJWkUgIChDWDE4X1VOSVRfRU5DX1lVVl9CVUZTSVpFICogMyAvIDEwMjQgKyAxKQogI2RlZmluZSBDWDE4X0RFRkFVTFRfRU5DX1BDTV9CVUZTSVpFICAgNAogCkBAIC0yMzQsMTYgKzI0Niw4IEBACiAjZGVmaW5lIENYMThfV0FSTl9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pICAgICB2NGwyX3dhcm4oZGV2LCBmbXQgLCAjIyBhcmdzKQogI2RlZmluZSBDWDE4X0lORk9fREVWKGRldiwgZm10LCBhcmdzLi4uKSAgICAgdjRsMl9pbmZvKGRldiwgZm10ICwgIyMgYXJncykKIAotLyogVmFsdWVzIGZvciBDWDE4X0FQSV9ERUNfUExBWUJBQ0tfU1BFRUQgbXBlZ19mcmFtZV90eXBlX21hc2sgcGFyYW1ldGVyOiAqLwotI2RlZmluZSBNUEVHX0ZSQU1FX1RZUEVfSUZSQU1FIDEKLSNkZWZpbmUgTVBFR19GUkFNRV9UWVBFX0lGUkFNRV9QRlJBTUUgMwotI2RlZmluZSBNUEVHX0ZSQU1FX1RZUEVfQUxMIDcKLQotI2RlZmluZSBDWDE4X01BWF9QR01fSU5ERVggKDQwMCkKLQogZXh0ZXJuIGludCBjeDE4X2RlYnVnOwogCi0KIHN0cnVjdCBjeDE4X29wdGlvbnMgewogCWludCBtZWdhYnl0ZXNbQ1gxOF9NQVhfU1RSRUFNU107IC8qIFNpemUgaW4gbWVnYWJ5dGVzIG9mIGVhY2ggc3RyZWFtICovCiAJaW50IGNhcmR0eXBlOwkJLyogZm9yY2UgY2FyZCB0eXBlIG9uIGxvYWQgKi8KQEAgLTI3Niw2ICsyODAsMTggQEAKICNkZWZpbmUgQ1gxOF9TTElDRURfVFlQRV9XU1NfNjI1ICAgICAgICAoNSkKICNkZWZpbmUgQ1gxOF9TTElDRURfVFlQRV9WUFMgICAgICAgICAgICAoNykKIAorLyoqCisgKiBsaXN0X2VudHJ5X2lzX3Bhc3RfZW5kIC0gY2hlY2sgaWYgYSBwcmV2aW91cyBsb29wIGN1cnNvciBpcyBvZmYgbGlzdCBlbmQKKyAqIEBwb3M6CXRoZSB0eXBlICogcHJldmlvdXNseSB1c2VkIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqCisgKiBDaGVjayBpZiB0aGUgZW50cnkncyBsaXN0X2hlYWQgaXMgdGhlIGhlYWQgb2YgdGhlIGxpc3QsIHRodXMgaXQncyBub3QgYQorICogcmVhbCBlbnRyeSBidXQgd2FzIHRoZSBsb29wIGN1cnNvciB0aGF0IHdhbGtlZCBwYXN0IHRoZSBlbmQKKyAqLworI2RlZmluZSBsaXN0X2VudHJ5X2lzX3Bhc3RfZW5kKHBvcywgaGVhZCwgbWVtYmVyKSBcCisJKCZwb3MtPm1lbWJlciA9PSAoaGVhZCkpCisKIHN0cnVjdCBjeDE4X2J1ZmZlciB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKQEAgLTU1OCw2ICs1NzQsMTAgQEAKIAlpbnQgc3RyZWFtX2J1ZmZlcnNbQ1gxOF9NQVhfU1RSRUFNU107IC8qICMgb2YgYnVmZmVycyBmb3IgZWFjaCBzdHJlYW0gKi8KIAlpbnQgc3RyZWFtX2J1Zl9zaXplW0NYMThfTUFYX1NUUkVBTVNdOyAvKiBTdHJlYW0gYnVmZmVyIHNpemUgKi8KIAlzdHJ1Y3QgY3gxOF9zdHJlYW0gc3RyZWFtc1tDWDE4X01BWF9TVFJFQU1TXTsgCS8qIFN0cmVhbSBkYXRhICovCisJc3RydWN0IHNuZF9jeDE4X2NhcmQgKmFsc2E7IC8qIEFMU0EgaW50ZXJmYWNlIGZvciBQQ00gY2FwdHVyZSBzdHJlYW0gKi8KKwl2b2lkICgqcGNtX2Fubm91bmNlX2NhbGxiYWNrKShzdHJ1Y3Qgc25kX2N4MThfY2FyZCAqY2FyZCwgdTggKnBjbV9kYXRhLAorCQkJCSAgICAgIHNpemVfdCBudW1fYnl0ZXMpOworCiAJdW5zaWduZWQgbG9uZyBpX2ZsYWdzOyAgLyogZ2xvYmFsIGN4MTggZmxhZ3MgKi8KIAlhdG9taWNfdCBhbmFfY2FwdHVyaW5nOwkvKiBjb3VudCBudW1iZXIgb2YgYWN0aXZlIGFuYWxvZyBjYXB0dXJlIHN0cmVhbXMgKi8KIAlhdG9taWNfdCB0b3RfY2FwdHVyaW5nOwkvKiB0b3RhbCBjb3VudCBudW1iZXIgb2YgYWN0aXZlIGNhcHR1cmUgc3RyZWFtcyAqLwpAQCAtNTc1LDEyICs1OTUsNiBAQAogCiAJc3RydWN0IHZiaV9pbmZvIHZiaTsKIAotCXUzMiBwZ21faW5mb19vZmZzZXQ7Ci0JdTMyIHBnbV9pbmZvX251bTsKLQl1MzIgcGdtX2luZm9fd3JpdGVfaWR4OwotCXUzMiBwZ21faW5mb19yZWFkX2lkeDsKLQlzdHJ1Y3QgdjRsMl9lbmNfaWR4X2VudHJ5IHBnbV9pbmZvW0NYMThfTUFYX1BHTV9JTkRFWF07Ci0KIAl1NjQgbXBnX2RhdGFfcmVjZWl2ZWQ7CiAJdTY0IHZiaV9kYXRhX2luc2VydGVkOwogCkBAIC02MjMsNiArNjM3LDkgQEAKIAl1MzIgYWN0aXZlX2lucHV0OwogCXY0bDJfc3RkX2lkIHN0ZDsKIAl2NGwyX3N0ZF9pZCB0dW5lcl9zdGQ7CS8qIFRoZSBub3JtIG9mIHRoZSB0dW5lciAoZml4ZWQpICovCisKKwkvKiBVc2VkIGZvciBjeDE4LWFsc2EgbW9kdWxlIGxvYWRpbmcgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVxdWVzdF9tb2R1bGVfd2s7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjeDE4ICp0b19jeDE4KHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCkBAIC02MzAsNiArNjQ3LDkgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3QgY3gxOCwgdjRsMl9kZXYpOwogfQogCisvKiBjeDE4IGV4dGVuc2lvbnMgdG8gYmUgbG9hZGVkICovCitleHRlcm4gaW50ICgqY3gxOF9leHRfaW5pdCkoc3RydWN0IGN4MTggKik7CisKIC8qIEdsb2JhbHMgKi8KIGV4dGVybiBpbnQgY3gxOF9maXJzdF9taW5vcjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYwppbmRleCA3MWFkMmQxLi4wYWUyYzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYwpAQCAtMjEzLDEwICsyMTMsMTQgQEAKIHsKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eCA9IGZlZWQtPmRlbXV4OwogCXN0cnVjdCBjeDE4X3N0cmVhbSAqc3RyZWFtID0gKHN0cnVjdCBjeDE4X3N0cmVhbSAqKSBkZW11eC0+cHJpdjsKLQlzdHJ1Y3QgY3gxOCAqY3ggPSBzdHJlYW0tPmN4OworCXN0cnVjdCBjeDE4ICpjeDsKIAlpbnQgcmV0OwogCXUzMiB2OwogCisJaWYgKCFzdHJlYW0pCisJCXJldHVybiAtRUlOVkFMOworCisJY3ggPSBzdHJlYW0tPmN4OwogCUNYMThfREVCVUdfSU5GTygiU3RhcnQgZmVlZDogcGlkID0gMHgleCBpbmRleCA9ICVkXG4iLAogCQkJZmVlZC0+cGlkLCBmZWVkLT5pbmRleCk7CiAKQEAgLTI1MywxMiArMjU3LDEwIEBACiAJaWYgKCFkZW11eC0+ZG14LmZyb250ZW5kKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghc3RyZWFtKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCW11dGV4X2xvY2soJnN0cmVhbS0+ZHZiLmZlZWRsb2NrKTsKIAlpZiAoc3RyZWFtLT5kdmIuZmVlZGluZysrID09IDApIHsKIAkJQ1gxOF9ERUJVR19JTkZPKCJTdGFydGluZyBUcmFuc3BvcnQgRE1BXG4iKTsKKwkJbXV0ZXhfbG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAkJc2V0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzdHJlYW0tPnNfZmxhZ3MpOwogCQlyZXQgPSBjeDE4X3N0YXJ0X3Y0bDJfZW5jb2RlX3N0cmVhbShzdHJlYW0pOwogCQlpZiAocmV0IDwgMCkgewpAQCAtMjY3LDYgKzI2OSw3IEBACiAJCQlpZiAoc3RyZWFtLT5kdmIuZmVlZGluZyA9PSAwKQogCQkJCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzdHJlYW0tPnNfZmxhZ3MpOwogCQl9CisJCW11dGV4X3VubG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAl9IGVsc2UKIAkJcmV0ID0gMDsKIAltdXRleF91bmxvY2soJnN0cmVhbS0+ZHZiLmZlZWRsb2NrKTsKQEAgLTI3OSwxNyArMjgyLDIwIEBACiB7CiAJc3RydWN0IGR2Yl9kZW11eCAqZGVtdXggPSBmZWVkLT5kZW11eDsKIAlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnN0cmVhbSA9IChzdHJ1Y3QgY3gxOF9zdHJlYW0gKilkZW11eC0+cHJpdjsKLQlzdHJ1Y3QgY3gxOCAqY3ggPSBzdHJlYW0tPmN4OworCXN0cnVjdCBjeDE4ICpjeDsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAotCUNYMThfREVCVUdfSU5GTygiU3RvcCBmZWVkOiBwaWQgPSAweCV4IGluZGV4ID0gJWRcbiIsCi0JCQlmZWVkLT5waWQsIGZlZWQtPmluZGV4KTsKLQogCWlmIChzdHJlYW0pIHsKKwkJY3ggPSBzdHJlYW0tPmN4OworCQlDWDE4X0RFQlVHX0lORk8oIlN0b3AgZmVlZDogcGlkID0gMHgleCBpbmRleCA9ICVkXG4iLAorCQkJCWZlZWQtPnBpZCwgZmVlZC0+aW5kZXgpOworCiAJCW11dGV4X2xvY2soJnN0cmVhbS0+ZHZiLmZlZWRsb2NrKTsKIAkJaWYgKC0tc3RyZWFtLT5kdmIuZmVlZGluZyA9PSAwKSB7CiAJCQlDWDE4X0RFQlVHX0lORk8oIlN0b3BwaW5nIFRyYW5zcG9ydCBETUFcbiIpOworCQkJbXV0ZXhfbG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAkJCXJldCA9IGN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0oc3RyZWFtLCAwKTsKKwkJCW11dGV4X3VubG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAkJfSBlbHNlCiAJCQlyZXQgPSAwOwogCQltdXRleF91bmxvY2soJnN0cmVhbS0+ZHZiLmZlZWRsb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYwppbmRleCBjMDg4NWM2Li44NjNjZTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5jCkBAIC0zNywxNSArMzcsMjEgQEAKIAogLyogVGhpcyBmdW5jdGlvbiB0cmllcyB0byBjbGFpbSB0aGUgc3RyZWFtIGZvciBhIHNwZWNpZmljIGZpbGUgZGVzY3JpcHRvci4KICAgIElmIG5vIG9uZSBlbHNlIGlzIHVzaW5nIHRoaXMgc3RyZWFtIHRoZW4gdGhlIHN0cmVhbSBpcyBjbGFpbWVkIGFuZAotICAgYXNzb2NpYXRlZCBWQkkgc3RyZWFtcyBhcmUgYWxzbyBhdXRvbWF0aWNhbGx5IGNsYWltZWQuCisgICBhc3NvY2lhdGVkIFZCSSBhbmQgSURYIHN0cmVhbXMgYXJlIGFsc28gYXV0b21hdGljYWxseSBjbGFpbWVkLgogICAgUG9zc2libGUgZXJyb3IgcmV0dXJuczogLUVCVVNZIGlmIHNvbWVvbmUgZWxzZSBoYXMgY2xhaW1lZAogICAgdGhlIHN0cmVhbSBvciAwIG9uIHN1Y2Nlc3MuICovCi1zdGF0aWMgaW50IGN4MThfY2xhaW1fc3RyZWFtKHN0cnVjdCBjeDE4X29wZW5faWQgKmlkLCBpbnQgdHlwZSkKK2ludCBjeDE4X2NsYWltX3N0cmVhbShzdHJ1Y3QgY3gxOF9vcGVuX2lkICppZCwgaW50IHR5cGUpCiB7CiAJc3RydWN0IGN4MTggKmN4ID0gaWQtPmN4OwogCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1t0eXBlXTsKLQlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnNfdmJpOwotCWludCB2YmlfdHlwZTsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnNfYXNzb2M7CisKKwkvKiBOb3RoaW5nIHNob3VsZCBldmVyIHRyeSB0byBkaXJlY3RseSBjbGFpbSB0aGUgSURYIHN0cmVhbSAqLworCWlmICh0eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWCkgeworCQlDWDE4X1dBUk4oIk1QRUcgSW5kZXggc3RyZWFtIGNhbm5vdCBiZSBjbGFpbWVkICIKKwkJCSAgImRpcmVjdGx5LCBidXQgc29tZXRoaW5nIHRyaWVkLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KENYMThfRl9TX0NMQUlNRUQsICZzLT5zX2ZsYWdzKSkgewogCQkvKiBzb21lb25lIGFscmVhZHkgY2xhaW1lZCB0aGlzIHN0cmVhbSAqLwpAQCAtNjcsMzIgKzczLDQ3IEBACiAJfQogCXMtPmlkID0gaWQtPm9wZW5faWQ7CiAKLQkvKiBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgbmVlZHMgdG8gY2xhaW0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJCi0JICAgKHByb3ZpZGVkIFZCSSBpbnNlcnRpb24gaXMgb24gYW5kIHNsaWNlZCBWQkkgaXMgc2VsZWN0ZWQpLCBmb3IgYWxsCi0JICAgb3RoZXIgc3RyZWFtcyB3ZSdyZSBkb25lICovCi0JaWYgKHR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHICYmCi0JICAgIGN4LT52YmkuaW5zZXJ0X21wZWcgJiYgIWN4MThfcmF3X3ZiaShjeCkpIHsKLQkJdmJpX3R5cGUgPSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkk7Ci0JfSBlbHNlIHsKKwkvKgorCSAqIENYMThfRU5DX1NUUkVBTV9UWVBFX01QRyBuZWVkcyB0byBjbGFpbToKKwkgKiBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkksIGlmIFZCSSBpbnNlcnRpb24gaXMgb24gZm9yIHNsaWNlZCBWQkksIG9yCisJICogQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYLCBpZiBWQkkgaW5zZXJ0aW9uIGlzIG9mZiBmb3Igc2xpY2VkIFZCSQorCSAqIChXZSBkb24ndCB5ZXQgZml4IHVwIE1QRUcgSW5kZXggZW50cmllcyBmb3Igb3VyIGluc2VydGVkIHBhY2tldHMpLgorCSAqCisJICogRm9yIGFsbCBvdGhlciBzdHJlYW1zIHdlJ3JlIGRvbmUuCisJICovCisJaWYgKHR5cGUgIT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHKQogCQlyZXR1cm4gMDsKLQl9Ci0Jc192YmkgPSAmY3gtPnN0cmVhbXNbdmJpX3R5cGVdOwogCi0Jc2V0X2JpdChDWDE4X0ZfU19DTEFJTUVELCAmc192YmktPnNfZmxhZ3MpOworCXNfYXNzb2MgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYXTsKKwlpZiAoY3gtPnZiaS5pbnNlcnRfbXBlZyAmJiAhY3gxOF9yYXdfdmJpKGN4KSkKKwkJc19hc3NvYyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldOworCWVsc2UgaWYgKCFjeDE4X3N0cmVhbV9lbmFibGVkKHNfYXNzb2MpKQorCQlyZXR1cm4gMDsKKworCXNldF9iaXQoQ1gxOF9GX1NfQ0xBSU1FRCwgJnNfYXNzb2MtPnNfZmxhZ3MpOwogCiAJLyogbWFyayB0aGF0IGl0IGlzIHVzZWQgaW50ZXJuYWxseSAqLwotCXNldF9iaXQoQ1gxOF9GX1NfSU5URVJOQUxfVVNFLCAmc192YmktPnNfZmxhZ3MpOworCXNldF9iaXQoQ1gxOF9GX1NfSU5URVJOQUxfVVNFLCAmc19hc3NvYy0+c19mbGFncyk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGN4MThfY2xhaW1fc3RyZWFtKTsKIAogLyogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBhIHByZXZpb3VzbHkgY2xhaW1lZCBzdHJlYW0uIEl0IHdpbGwgdGFrZSBpbnRvCiAgICBhY2NvdW50IGFzc29jaWF0ZWQgVkJJIHN0cmVhbXMuICovCi1zdGF0aWMgdm9pZCBjeDE4X3JlbGVhc2Vfc3RyZWFtKHN0cnVjdCBjeDE4X3N0cmVhbSAqcykKK3ZvaWQgY3gxOF9yZWxlYXNlX3N0cmVhbShzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMpCiB7CiAJc3RydWN0IGN4MTggKmN4ID0gcy0+Y3g7Ci0Jc3RydWN0IGN4MThfc3RyZWFtICpzX3ZiaTsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnNfYXNzb2M7CiAKIAlzLT5pZCA9IC0xOworCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWCkgeworCQkvKgorCQkgKiBUaGUgSURYIHN0cmVhbSBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSwgYW5kIGNhbgorCQkgKiBvbmx5IGJlIGluZGlyZWN0bHkgdW5jbGFpbWVkIGJ5IHVuY2xhaW1pbmcgdGhlIE1QRyBzdHJlYW0uCisJCSAqLworCQlyZXR1cm47CisJfQorCiAJaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJICYmCiAJCXRlc3RfYml0KENYMThfRl9TX0lOVEVSTkFMX1VTRSwgJnMtPnNfZmxhZ3MpKSB7CiAJCS8qIHRoaXMgc3RyZWFtIGlzIHN0aWxsIGluIHVzZSBpbnRlcm5hbGx5ICovCkBAIC0xMDUsMjUgKzEyNiwzNiBAQAogCiAJY3gxOF9mbHVzaF9xdWV1ZXMocyk7CiAKLQkvKiBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgbmVlZHMgdG8gcmVsZWFzZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkksCi0JICAgZm9yIGFsbCBvdGhlciBzdHJlYW1zIHdlJ3JlIGRvbmUgKi8KLQlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcpCi0JCXNfdmJpID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV07Ci0JZWxzZQorCS8qCisJICogQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHIG5lZWRzIHRvIHJlbGVhc2UgdGhlCisJICogQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJIGFuZC9vciBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFggc3RyZWFtcy4KKwkgKgorCSAqIEZvciBhbGwgb3RoZXIgc3RyZWFtcyB3ZSdyZSBkb25lLgorCSAqLworCWlmIChzLT50eXBlICE9IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRykKIAkJcmV0dXJuOwogCi0JLyogY2xlYXIgaW50ZXJuYWwgdXNlIGZsYWcgKi8KLQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChDWDE4X0ZfU19JTlRFUk5BTF9VU0UsICZzX3ZiaS0+c19mbGFncykpIHsKLQkJLyogd2FzIGFscmVhZHkgY2xlYXJlZCAqLwotCQlyZXR1cm47CisJLyogVW5jbGFpbSB0aGUgYXNzb2NpYXRlZCBNUEVHIEluZGV4IHN0cmVhbSAqLworCXNfYXNzb2MgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYXTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KENYMThfRl9TX0lOVEVSTkFMX1VTRSwgJnNfYXNzb2MtPnNfZmxhZ3MpKSB7CisJCWNsZWFyX2JpdChDWDE4X0ZfU19DTEFJTUVELCAmc19hc3NvYy0+c19mbGFncyk7CisJCWN4MThfZmx1c2hfcXVldWVzKHNfYXNzb2MpOwogCX0KLQlpZiAoc192YmktPmlkICE9IC0xKSB7Ci0JCS8qIFZCSSBzdHJlYW0gc3RpbGwgY2xhaW1lZCBieSBhIGZpbGUgZGVzY3JpcHRvciAqLwotCQlyZXR1cm47CisKKwkvKiBVbmNsYWltIHRoZSBhc3NvY2lhdGVkIFZCSSBzdHJlYW0gKi8KKwlzX2Fzc29jID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV07CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDWDE4X0ZfU19JTlRFUk5BTF9VU0UsICZzX2Fzc29jLT5zX2ZsYWdzKSkgeworCQlpZiAoc19hc3NvYy0+aWQgPT0gLTEpIHsKKwkJCS8qCisJCQkgKiBUaGUgVkJJIHN0cmVhbSBpcyBub3Qgc3RpbGwgY2xhaW1lZCBieSBhIGZpbGUKKwkJCSAqIGRlc2NyaXB0b3IsIHNvIGNvbXBsZXRlbHkgdW5jbGFpbSBpdC4KKwkJCSAqLworCQkJY2xlYXJfYml0KENYMThfRl9TX0NMQUlNRUQsICZzX2Fzc29jLT5zX2ZsYWdzKTsKKwkJCWN4MThfZmx1c2hfcXVldWVzKHNfYXNzb2MpOworCQl9CiAJfQotCWNsZWFyX2JpdChDWDE4X0ZfU19DTEFJTUVELCAmc192YmktPnNfZmxhZ3MpOwotCWN4MThfZmx1c2hfcXVldWVzKHNfdmJpKTsKIH0KK0VYUE9SVF9TWU1CT0woY3gxOF9yZWxlYXNlX3N0cmVhbSk7CiAKIHN0YXRpYyB2b2lkIGN4MThfZHVhbHdhdGNoKHN0cnVjdCBjeDE4ICpjeCkKIHsKQEAgLTE3Nyw5ICsyMDksNyBAQAogCSplcnIgPSAwOwogCXdoaWxlICgxKSB7CiAJCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRykgewotCQkJLyogUHJvY2VzcyBwZW5kaW5nIHByb2dyYW0gaW5mbyB1cGRhdGVzIGFuZCBwZW5kaW5nCi0JCQkgICBWQkkgZGF0YSAqLwotCisJCQkvKiBQcm9jZXNzIHBlbmRpbmcgcHJvZ3JhbSB1cGRhdGVzIGFuZCBWQkkgZGF0YSAqLwogCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgY3gtPmR1YWx3YXRjaF9qaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDAwKSkpIHsKIAkJCQljeC0+ZHVhbHdhdGNoX2ppZmZpZXMgPSBqaWZmaWVzOwogCQkJCWN4MThfZHVhbHdhdGNoKGN4KTsKQEAgLTM2MiwxOCArMzkyLDYgQEAKIAlyZXR1cm4gbGVuOwogfQogCi0vKioKLSAqIGxpc3RfZW50cnlfaXNfcGFzdF9lbmQgLSBjaGVjayBpZiBhIHByZXZpb3VzIGxvb3AgY3Vyc29yIGlzIG9mZiBsaXN0IGVuZAotICogQHBvczoJdGhlIHR5cGUgKiBwcmV2aW91c2x5IHVzZWQgYXMgYSBsb29wIGN1cnNvci4KLSAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgotICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rfc3RydWN0IHdpdGhpbiB0aGUgc3RydWN0LgotICoKLSAqIENoZWNrIGlmIHRoZSBlbnRyeSdzIGxpc3RfaGVhZCBpcyB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgdGh1cyBpdCdzIG5vdCBhCi0gKiByZWFsIGVudHJ5IGJ1dCB3YXMgdGhlIGxvb3AgY3Vyc29yIHRoYXQgd2Fsa2VkIHBhc3QgdGhlIGVuZAotICovCi0jZGVmaW5lIGxpc3RfZW50cnlfaXNfcGFzdF9lbmQocG9zLCBoZWFkLCBtZW1iZXIpIFwKLQkoJnBvcy0+bWVtYmVyID09IChoZWFkKSkKLQogc3RhdGljIHNpemVfdCBjeDE4X2NvcHlfbWRsX3RvX3VzZXIoc3RydWN0IGN4MThfc3RyZWFtICpzLAogCQlzdHJ1Y3QgY3gxOF9tZGwgKm1kbCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCB1Y291bnQpCiB7CkBAIC00OTgsNiArNTE2LDcgQEAKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBpZC0+Y3g7CiAJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW2lkLT50eXBlXTsKIAlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnNfdmJpOworCXN0cnVjdCBjeDE4X3N0cmVhbSAqc19pZHg7CiAKIAlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9SQUQpIHsKIAkJLyogeW91IGNhbm5vdCByZWFkIGZyb20gdGhlc2Ugc3RyZWFtIHR5cGVzLiAqLwpAQCAtNTE2LDI1ICs1MzUsMzMgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogU3RhcnQgVkJJIGNhcHR1cmUgaWYgcmVxdWlyZWQgKi8KKwkvKiBTdGFydCBhc3NvY2lhdGVkIFZCSSBvciBJRFggc3RyZWFtIGNhcHR1cmUgaWYgcmVxdWlyZWQgKi8KIAlzX3ZiaSA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldOwotCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRyAmJgotCSAgICB0ZXN0X2JpdChDWDE4X0ZfU19JTlRFUk5BTF9VU0UsICZzX3ZiaS0+c19mbGFncykgJiYKLQkgICAgIXRlc3RfYW5kX3NldF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpKSB7Ci0JCS8qIE5vdGU6IHRoZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkkgaXMgY2xhaW1lZAotCQkgICBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIE1QRyBzdHJlYW0gaXMgY2xhaW1lZC4KLQkJICAgV2Ugb25seSBuZWVkIHRvIHN0YXJ0IHRoZSBWQkkgY2FwdHVyaW5nLiAqLwotCQlpZiAoY3gxOF9zdGFydF92NGwyX2VuY29kZV9zdHJlYW0oc192YmkpKSB7Ci0JCQlDWDE4X0RFQlVHX1dBUk4oIlZCSSBjYXB0dXJlIHN0YXJ0IGZhaWxlZFxuIik7Ci0KLQkJCS8qIEZhaWx1cmUsIGNsZWFuIHVwIGFuZCByZXR1cm4gYW4gZXJyb3IgKi8KLQkJCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX3ZiaS0+c19mbGFncyk7Ci0JCQljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmcy0+c19mbGFncyk7Ci0JCQkvKiBhbHNvIHJlbGVhc2VzIHRoZSBhc3NvY2lhdGVkIFZCSSBzdHJlYW0gKi8KLQkJCWN4MThfcmVsZWFzZV9zdHJlYW0ocyk7Ci0JCQlyZXR1cm4gLUVJTzsKKwlzX2lkeCA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhdOworCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRykgeworCQkvKgorCQkgKiBUaGUgVkJJIGFuZCBJRFggc3RyZWFtcyBzaG91bGQgaGF2ZSBiZWVuIGNsYWltZWQKKwkJICogYXV0b21hdGljYWxseSwgaWYgZm9yIGludGVybmFsIHVzZSwgd2hlbiB0aGUgTVBHIHN0cmVhbSB3YXMKKwkJICogY2xhaW1lZC4gIFdlIG9ubHkgbmVlZCB0byBzdGFydCB0aGVzZSBzdHJlYW1zIGNhcHR1cmluZy4KKwkJICovCisJCWlmICh0ZXN0X2JpdChDWDE4X0ZfU19JTlRFUk5BTF9VU0UsICZzX2lkeC0+c19mbGFncykgJiYKKwkJICAgICF0ZXN0X2FuZF9zZXRfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfaWR4LT5zX2ZsYWdzKSkgeworCQkJaWYgKGN4MThfc3RhcnRfdjRsMl9lbmNvZGVfc3RyZWFtKHNfaWR4KSkgeworCQkJCUNYMThfREVCVUdfV0FSTigiSURYIGNhcHR1cmUgc3RhcnQgZmFpbGVkXG4iKTsKKwkJCQljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc19pZHgtPnNfZmxhZ3MpOworCQkJCWdvdG8gc3RhcnRfZmFpbGVkOworCQkJfQorCQkJQ1gxOF9ERUJVR19JTkZPKCJJRFggY2FwdHVyZSBzdGFydGVkXG4iKTsKIAkJfQotCQlDWDE4X0RFQlVHX0lORk8oIlZCSSBpbnNlcnRpb24gc3RhcnRlZFxuIik7CisJCWlmICh0ZXN0X2JpdChDWDE4X0ZfU19JTlRFUk5BTF9VU0UsICZzX3ZiaS0+c19mbGFncykgJiYKKwkJICAgICF0ZXN0X2FuZF9zZXRfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfdmJpLT5zX2ZsYWdzKSkgeworCQkJaWYgKGN4MThfc3RhcnRfdjRsMl9lbmNvZGVfc3RyZWFtKHNfdmJpKSkgeworCQkJCUNYMThfREVCVUdfV0FSTigiVkJJIGNhcHR1cmUgc3RhcnQgZmFpbGVkXG4iKTsKKwkJCQljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpOworCQkJCWdvdG8gc3RhcnRfZmFpbGVkOworCQkJfQorCQkJQ1gxOF9ERUJVR19JTkZPKCJWQkkgaW5zZXJ0aW9uIHN0YXJ0ZWRcbiIpOworCQl9CiAJfQogCiAJLyogVGVsbCB0aGUgY2FyZCB0byBzdGFydCBjYXB0dXJpbmcgKi8KQEAgLTU0NywxOSArNTc0LDI5IEBACiAJCXJldHVybiAwOwogCX0KIAotCS8qIGZhaWx1cmUsIGNsZWFuIHVwICovCitzdGFydF9mYWlsZWQ6CiAJQ1gxOF9ERUJVR19XQVJOKCJGYWlsZWQgdG8gc3RhcnQgY2FwdHVyaW5nIGZvciBzdHJlYW0gJXNcbiIsIHMtPm5hbWUpOwogCi0JLyogTm90ZTogdGhlIENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSBpcyByZWxlYXNlZAotCSAgIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgTVBHIHN0cmVhbSBpcyByZWxlYXNlZC4KLQkgICBXZSBvbmx5IG5lZWQgdG8gc3RvcCB0aGUgVkJJIGNhcHR1cmluZy4gKi8KLQlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgJiYKLQkgICAgdGVzdF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpKSB7Ci0JCWN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0oc192YmksIDApOwotCQljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpOworCS8qCisJICogVGhlIGFzc29jaWF0ZWQgVkJJIGFuZCBJRFggc3RyZWFtcyBmb3IgaW50ZXJuYWwgdXNlIGFyZSByZWxlYXNlZAorCSAqIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgTVBHIHN0cmVhbSBpcyByZWxlYXNlZC4gIFdlIG9ubHkgbmVlZCB0byBzdG9wCisJICogdGhlIGFzc29jaWF0ZWQgc3RyZWFtLgorCSAqLworCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRykgeworCQkvKiBTdG9wIHRoZSBJRFggc3RyZWFtIHdoaWNoIGlzIGFsd2F5cyBmb3IgaW50ZXJuYWwgdXNlICovCisJCWlmICh0ZXN0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzX2lkeC0+c19mbGFncykpIHsKKwkJCWN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0oc19pZHgsIDApOworCQkJY2xlYXJfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfaWR4LT5zX2ZsYWdzKTsKKwkJfQorCQkvKiBTdG9wIHRoZSBWQkkgc3RyZWFtLCBpZiBvbmx5IHJ1bm5pbmcgZm9yIGludGVybmFsIHVzZSAqLworCQlpZiAodGVzdF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpICYmCisJCSAgICAhdGVzdF9iaXQoQ1gxOF9GX1NfQVBQTF9JTywgJnNfdmJpLT5zX2ZsYWdzKSkgeworCQkJY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbShzX3ZiaSwgMCk7CisJCQljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmc192YmktPnNfZmxhZ3MpOworCQl9CiAJfQogCWNsZWFyX2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKTsKLQljeDE4X3JlbGVhc2Vfc3RyZWFtKHMpOworCWN4MThfcmVsZWFzZV9zdHJlYW0ocyk7IC8qIEFsc28gcmVsZWFzZXMgYXNzb2NpYXRlZCBzdHJlYW1zICovCiAJcmV0dXJuIC1FSU87CiB9CiAKQEAgLTYxOCw2ICs2NTUsOCBAQAogewogCXN0cnVjdCBjeDE4ICpjeCA9IGlkLT5jeDsKIAlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbaWQtPnR5cGVdOworCXN0cnVjdCBjeDE4X3N0cmVhbSAqc192YmkgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXTsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnNfaWR4ID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF07CiAKIAlDWDE4X0RFQlVHX0lPQ1RMKCJjbG9zZSgpIG9mICVzXG4iLCBzLT5uYW1lKTsKIApAQCAtNjI1LDE3ICs2NjQsMTkgQEAKIAogCS8qIFN0b3AgY2FwdHVyaW5nICovCiAJaWYgKHRlc3RfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnMtPnNfZmxhZ3MpKSB7Ci0JCXN0cnVjdCBjeDE4X3N0cmVhbSAqc192YmkgPQotCQkJJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV07Ci0KIAkJQ1gxOF9ERUJVR19JTkZPKCJjbG9zZSBzdG9wcGluZyBjYXB0dXJlXG4iKTsKLQkJLyogU3BlY2lhbCBjYXNlOiBhIHJ1bm5pbmcgVkJJIGNhcHR1cmUgZm9yIFZCSSBpbnNlcnRpb24KLQkJICAgaW4gdGhlIG1wZWcgc3RyZWFtLiBOZWVkIHRvIHN0b3AgdGhhdCB0b28uICovCi0JCWlmIChpZC0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgJiYKLQkJICAgIHRlc3RfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfdmJpLT5zX2ZsYWdzKSAmJgotCQkgICAgIXRlc3RfYml0KENYMThfRl9TX0FQUExfSU8sICZzX3ZiaS0+c19mbGFncykpIHsKLQkJCUNYMThfREVCVUdfSU5GTygiY2xvc2Ugc3RvcHBpbmcgZW1iZWRkZWQgVkJJIGNhcHR1cmVcbiIpOwotCQkJY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbShzX3ZiaSwgMCk7CisJCWlmIChpZC0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcpIHsKKwkJCS8qIFN0b3AgaW50ZXJuYWwgdXNlIGFzc29jaWF0ZWQgVkJJIGFuZCBJRFggc3RyZWFtcyAqLworCQkJaWYgKHRlc3RfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfdmJpLT5zX2ZsYWdzKSAmJgorCQkJICAgICF0ZXN0X2JpdChDWDE4X0ZfU19BUFBMX0lPLCAmc192YmktPnNfZmxhZ3MpKSB7CisJCQkJQ1gxOF9ERUJVR19JTkZPKCJjbG9zZSBzdG9wcGluZyBlbWJlZGRlZCBWQkkgIgorCQkJCQkJImNhcHR1cmVcbiIpOworCQkJCWN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0oc192YmksIDApOworCQkJfQorCQkJaWYgKHRlc3RfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnNfaWR4LT5zX2ZsYWdzKSkgeworCQkJCUNYMThfREVCVUdfSU5GTygiY2xvc2Ugc3RvcHBpbmcgSURYIGNhcHR1cmVcbiIpOworCQkJCWN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0oc19pZHgsIDApOworCQkJfQogCQl9CiAJCWlmIChpZC0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkkgJiYKIAkJICAgIHRlc3RfYml0KENYMThfRl9TX0lOVEVSTkFMX1VTRSwgJnMtPnNfZmxhZ3MpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5oCmluZGV4IDkyZTJkNWQuLjVjOGZjYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmgKQEAgLTM0LDMgKzM0LDYgQEAKIHZvaWQgY3gxOF9tdXRlKHN0cnVjdCBjeDE4ICpjeCk7CiB2b2lkIGN4MThfdW5tdXRlKHN0cnVjdCBjeDE4ICpjeCk7CiAKKy8qIFNoYXJlZCB3aXRoIGN4MTgtYWxzYSBtb2R1bGUgKi8KK2ludCBjeDE4X2NsYWltX3N0cmVhbShzdHJ1Y3QgY3gxOF9vcGVuX2lkICppZCwgaW50IHR5cGUpOwordm9pZCBjeDE4X3JlbGVhc2Vfc3RyZWFtKHN0cnVjdCBjeDE4X3N0cmVhbSAqcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYwppbmRleCAzZTRmYzE5Li5iODFkZDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMKQEAgLTc3NSwxMCArNzc1LDE0MyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IF9jeDE4X3Byb2Nlc3NfaWR4X2RhdGEoc3RydWN0IGN4MThfYnVmZmVyICpidWYsCisJCQkJICBzdHJ1Y3QgdjRsMl9lbmNfaWR4ICppZHgpCit7CisJaW50IGNvbnN1bWVkLCByZW1haW5pbmc7CisJc3RydWN0IHY0bDJfZW5jX2lkeF9lbnRyeSAqZV9pZHg7CisJc3RydWN0IGN4MThfZW5jX2lkeF9lbnRyeSAqZV9idWY7CisKKwkvKiBGcmFtZSB0eXBlIGxvb2t1cDogMT1JLCAyPVAsIDQ9QiAqLworCWNvbnN0IGludCBtYXBwaW5nWzhdID0geworCQktMSwgVjRMMl9FTkNfSURYX0ZSQU1FX0ksIFY0TDJfRU5DX0lEWF9GUkFNRV9QLAorCQktMSwgVjRMMl9FTkNfSURYX0ZSQU1FX0IsIC0xLCAtMSwgLTEKKwl9OworCisJLyoKKwkgKiBBc3N1bXB0aW9uIGhlcmUgaXMgdGhhdCBhIGJ1ZiBob2xkcyBhbiBpbnRlZ3JhbCBudW1iZXIgb2YKKwkgKiBzdHJ1Y3QgY3gxOF9lbmNfaWR4X2VudHJ5IG9iamVjdHMgYW5kIGlzIHByb3Blcmx5IGFsaWduZWQuCisJICogVGhpcyBpcyBlbmZvcmNlZCBieSB0aGUgbW9kdWxlIG9wdGlvbnMgb24gSURYIGJ1ZmZlciBzaXplcy4KKwkgKi8KKwlyZW1haW5pbmcgPSBidWYtPmJ5dGVzdXNlZCAtIGJ1Zi0+cmVhZHBvczsKKwljb25zdW1lZCA9IDA7CisJZV9pZHggPSAmaWR4LT5lbnRyeVtpZHgtPmVudHJpZXNdOworCWVfYnVmID0gKHN0cnVjdCBjeDE4X2VuY19pZHhfZW50cnkgKikgJmJ1Zi0+YnVmW2J1Zi0+cmVhZHBvc107CisKKwl3aGlsZSAocmVtYWluaW5nID49IHNpemVvZihzdHJ1Y3QgY3gxOF9lbmNfaWR4X2VudHJ5KSAmJgorCSAgICAgICBpZHgtPmVudHJpZXMgPCBWNEwyX0VOQ19JRFhfRU5UUklFUykgeworCisJCWVfaWR4LT5vZmZzZXQgPSAoKCh1NjQpIGxlMzJfdG9fY3B1KGVfYnVmLT5vZmZzZXRfaGlnaCkpIDw8IDMyKQorCQkJCXwgbGUzMl90b19jcHUoZV9idWYtPm9mZnNldF9sb3cpOworCisJCWVfaWR4LT5wdHMgPSAoKCh1NjQpIChsZTMyX3RvX2NwdShlX2J1Zi0+cHRzX2hpZ2gpICYgMSkpIDw8IDMyKQorCQkJICAgICB8IGxlMzJfdG9fY3B1KGVfYnVmLT5wdHNfbG93KTsKKworCQllX2lkeC0+bGVuZ3RoID0gbGUzMl90b19jcHUoZV9idWYtPmxlbmd0aCk7CisKKwkJZV9pZHgtPmZsYWdzID0gbWFwcGluZ1tsZTMyX3RvX2NwdShlX2J1Zi0+ZmxhZ3MpICYgMHg3XTsKKworCQllX2lkeC0+cmVzZXJ2ZWRbMF0gPSAwOworCQllX2lkeC0+cmVzZXJ2ZWRbMV0gPSAwOworCisJCWlkeC0+ZW50cmllcysrOworCQllX2lkeCA9ICZpZHgtPmVudHJ5W2lkeC0+ZW50cmllc107CisJCWVfYnVmKys7CisKKwkJcmVtYWluaW5nIC09IHNpemVvZihzdHJ1Y3QgY3gxOF9lbmNfaWR4X2VudHJ5KTsKKwkJY29uc3VtZWQgKz0gc2l6ZW9mKHN0cnVjdCBjeDE4X2VuY19pZHhfZW50cnkpOworCX0KKworCS8qIFN3YWxsb3cgYW55IHBhcnRpYWwgZW50cmllcyBhdCB0aGUgZW5kLCBpZiB0aGVyZSBhcmUgYW55ICovCisJaWYgKHJlbWFpbmluZyA+IDAgJiYgcmVtYWluaW5nIDwgc2l6ZW9mKHN0cnVjdCBjeDE4X2VuY19pZHhfZW50cnkpKQorCQljb25zdW1lZCArPSByZW1haW5pbmc7CisKKwlidWYtPnJlYWRwb3MgKz0gY29uc3VtZWQ7CisJcmV0dXJuIGNvbnN1bWVkOworfQorCitzdGF0aWMgaW50IGN4MThfcHJvY2Vzc19pZHhfZGF0YShzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsIHN0cnVjdCBjeDE4X21kbCAqbWRsLAorCQkJCSBzdHJ1Y3QgdjRsMl9lbmNfaWR4ICppZHgpCit7CisJaWYgKHMtPnR5cGUgIT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtZGwtPmN1cnJfYnVmID09IE5VTEwpCisJCW1kbC0+Y3Vycl9idWYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZtZGwtPmJ1Zl9saXN0LAorCQkJCQkJIHN0cnVjdCBjeDE4X2J1ZmZlciwgbGlzdCk7CisKKwlpZiAobGlzdF9lbnRyeV9pc19wYXN0X2VuZChtZGwtPmN1cnJfYnVmLCAmbWRsLT5idWZfbGlzdCwgbGlzdCkpIHsKKwkJLyoKKwkJICogRm9yIHNvbWUgcmVhc29uIHdlJ3ZlIGV4aGF1c3RlZCB0aGUgYnVmZmVycywgYnV0IHRoZSBNREwKKwkJICogb2JqZWN0IHN0aWxsIHNhaWQgc29tZSBkYXRhIHdhcyB1bnJlYWQuCisJCSAqIEZpeCB0aGF0IGFuZCBiYWlsIG91dC4KKwkJICovCisJCW1kbC0+cmVhZHBvcyA9IG1kbC0+Ynl0ZXN1c2VkOworCQlyZXR1cm4gMDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20obWRsLT5jdXJyX2J1ZiwgJm1kbC0+YnVmX2xpc3QsIGxpc3QpIHsKKworCQkvKiBTa2lwIGFueSBlbXB0eSBidWZmZXJzIGluIHRoZSBNREwgKi8KKwkJaWYgKG1kbC0+Y3Vycl9idWYtPnJlYWRwb3MgPj0gbWRsLT5jdXJyX2J1Zi0+Ynl0ZXN1c2VkKQorCQkJY29udGludWU7CisKKwkJbWRsLT5yZWFkcG9zICs9IF9jeDE4X3Byb2Nlc3NfaWR4X2RhdGEobWRsLT5jdXJyX2J1ZiwgaWR4KTsKKworCQkvKiBleGl0IHdoZW4gTURMIGRyYWluZWQgb3IgcmVxdWVzdCBzYXRpc2ZpZWQgKi8KKwkJaWYgKGlkeC0+ZW50cmllcyA+PSBWNEwyX0VOQ19JRFhfRU5UUklFUyB8fAorCQkgICAgbWRsLT5jdXJyX2J1Zi0+cmVhZHBvcyA8IG1kbC0+Y3Vycl9idWYtPmJ5dGVzdXNlZCB8fAorCQkgICAgbWRsLT5yZWFkcG9zID49IG1kbC0+Ynl0ZXN1c2VkKQorCQkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGN4MThfZ19lbmNfaW5kZXgoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCXN0cnVjdCB2NGwyX2VuY19pZHggKmlkeCkKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OworCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhdOworCXMzMiB0bXA7CisJc3RydWN0IGN4MThfbWRsICptZGw7CisKKwlpZiAoIWN4MThfc3RyZWFtX2VuYWJsZWQocykpIC8qIE1vZHVsZSBvcHRpb25zIGluaGliaXRlZCBJRFggc3RyZWFtICovCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ29tcHV0ZSB0aGUgYmVzdCBjYXNlIG51bWJlciBvZiBlbnRyaWVzIHdlIGNhbiBidWZmZXIgKi8KKwl0bXAgPSBzLT5idWZmZXJzIC0KKwkJCSAgcy0+YnVmc19wZXJfbWRsICogQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYX0ZXX01ETF9NSU47CisJaWYgKHRtcCA8PSAwKQorCQl0bXAgPSAxOworCXRtcCA9IHRtcCAqIHMtPmJ1Zl9zaXplIC8gc2l6ZW9mKHN0cnVjdCBjeDE4X2VuY19pZHhfZW50cnkpOworCisJLyogRmlsbCBvdXQgdGhlIGhlYWRlciBvZiB0aGUgcmV0dXJuIHN0cnVjdHVyZSAqLworCWlkeC0+ZW50cmllcyA9IDA7CisJaWR4LT5lbnRyaWVzX2NhcCA9IHRtcDsKKwltZW1zZXQoaWR4LT5yZXNlcnZlZCwgMCwgc2l6ZW9mKGlkeC0+cmVzZXJ2ZWQpKTsKKworCS8qIFB1bGwgSURYIE1ETHMgYW5kIGJ1ZmZlcnMgZnJvbSBxX2Z1bGwgYW5kIHBvcHVsYXRlIHRoZSBlbnRyaWVzICovCisJZG8geworCQltZGwgPSBjeDE4X2RlcXVldWUocywgJnMtPnFfZnVsbCk7CisJCWlmIChtZGwgPT0gTlVMTCkgLyogTm8gbW9yZSBJRFggZGF0YSByaWdodCBub3cgKi8KKwkJCWJyZWFrOworCisJCS8qIEV4dHJhY3QgdGhlIEluZGV4IGVudHJ5IGRhdGEgZnJvbSB0aGUgTURMIGFuZCBidWZmZXJzICovCisJCWN4MThfcHJvY2Vzc19pZHhfZGF0YShzLCBtZGwsIGlkeCk7CisJCWlmIChtZGwtPnJlYWRwb3MgPCBtZGwtPmJ5dGVzdXNlZCkgeworCQkJLyogV2UgZmluaXNoZWQgd2l0aCBkYXRhIHJlbWFpbmluZywgcHVzaCB0aGUgTURMIGJhY2sgKi8KKwkJCWN4MThfcHVzaChzLCBtZGwsICZzLT5xX2Z1bGwpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBXZSBkcmFpbmVkIHRoaXMgTURMLCBzY2hlZHVsZSBpdCB0byBnbyB0byB0aGUgZmlybXdhcmUgKi8KKwkJY3gxOF9lbnF1ZXVlKHMsIG1kbCwgJnMtPnFfZnJlZSk7CisKKwl9IHdoaWxlIChpZHgtPmVudHJpZXMgPCBWNEwyX0VOQ19JRFhfRU5UUklFUyk7CisKKwkvKiBUZWxsIHRoZSB3b3JrIGhhbmRsZXIgdG8gc2VuZCBmcmVlIElEWCBNRExzIHRvIHRoZSBmaXJtd2FyZSAqLworCWN4MThfc3RyZWFtX2xvYWRfZndfcXVldWUocyk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY3gxOF9lbmNvZGVyX2NtZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMKaW5kZXggZjIzMWRkMC4uNmRjY2UyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtbWFpbGJveC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImN4MTgtbWFpbGJveC5oIgogI2luY2x1ZGUgImN4MTgtcXVldWUuaCIKICNpbmNsdWRlICJjeDE4LXN0cmVhbXMuaCIKKyNpbmNsdWRlICJjeDE4LWFsc2EtcGNtLmgiIC8qIEZJWE1FIG1ha2UgY29uZmlndXJhYmxlICovCiAKIHN0YXRpYyBjb25zdCBjaGFyICpycHVfc3RyW10gPSB7ICJBUFUiLCAiQ1BVIiwgIkVQVSIsICJIUFUiIH07CiAKQEAgLTE1Nyw2ICsxNTgsMzQgQEAKIAl9CiB9CiAKKworc3RhdGljIHZvaWQgY3gxOF9tZGxfc2VuZF90b19hbHNhKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IGN4MThfc3RyZWFtICpzLAorCQkJCSAgc3RydWN0IGN4MThfbWRsICptZGwpCit7CisJc3RydWN0IGN4MThfYnVmZmVyICpidWY7CisKKwlpZiAobWRsLT5ieXRlc3VzZWQgPT0gMCkKKwkJcmV0dXJuOworCisJLyogV2UgaWdub3JlIG1kbCBhbmQgYnVmIHJlYWRwb3MgYWNjb3VudGluZyBoZXJlIC0gaXQgZG9lc24ndCBtYXR0ZXIgKi8KKworCS8qIFRoZSBsaWtlbHkgY2FzZSAqLworCWlmIChsaXN0X2lzX3Npbmd1bGFyKCZtZGwtPmJ1Zl9saXN0KSkgeworCQlidWYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZtZGwtPmJ1Zl9saXN0LCBzdHJ1Y3QgY3gxOF9idWZmZXIsCisJCQkJICAgICAgIGxpc3QpOworCQlpZiAoYnVmLT5ieXRlc3VzZWQpCisJCQljeC0+cGNtX2Fubm91bmNlX2NhbGxiYWNrKGN4LT5hbHNhLCBidWYtPmJ1ZiwKKwkJCQkJCSAgYnVmLT5ieXRlc3VzZWQpOworCQlyZXR1cm47CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShidWYsICZtZGwtPmJ1Zl9saXN0LCBsaXN0KSB7CisJCWlmIChidWYtPmJ5dGVzdXNlZCA9PSAwKQorCQkJYnJlYWs7CisJCWN4LT5wY21fYW5ub3VuY2VfY2FsbGJhY2soY3gtPmFsc2EsIGJ1Zi0+YnVmLCBidWYtPmJ5dGVzdXNlZCk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBlcHVfZG1hX2RvbmUoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgY3gxOF9pbl93b3JrX29yZGVyICpvcmRlcikKIHsKIAl1MzIgaGFuZGxlLCBtZGxfYWNrX2NvdW50LCBpZDsKQEAgLTIyMywxMSArMjUyLDIxIEBACiAJCUNYMThfREVCVUdfSElfRE1BKCIlcyByZWN2IGJ5dGVzdXNlZCA9ICVkXG4iLAogCQkJCSAgcy0+bmFtZSwgbWRsLT5ieXRlc3VzZWQpOwogCi0JCWlmIChzLT50eXBlICE9IENYMThfRU5DX1NUUkVBTV9UWVBFX1RTKQotCQkJY3gxOF9lbnF1ZXVlKHMsIG1kbCwgJnMtPnFfZnVsbCk7Ci0JCWVsc2UgeworCQlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9UUykgewogCQkJY3gxOF9tZGxfc2VuZF90b19kdmIocywgbWRsKTsKIAkJCWN4MThfZW5xdWV1ZShzLCBtZGwsICZzLT5xX2ZyZWUpOworCQl9IGVsc2UgaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfUENNKSB7CisJCQkvKiBQYXNzIHRoZSBkYXRhIHRvIGN4MTgtYWxzYSAqLworCQkJaWYgKGN4LT5wY21fYW5ub3VuY2VfY2FsbGJhY2sgIT0gTlVMTCkgeworCQkJCWN4MThfbWRsX3NlbmRfdG9fYWxzYShjeCwgcywgbWRsKTsKKwkJCQljeDE4X2VucXVldWUocywgbWRsLCAmcy0+cV9mcmVlKTsKKwkJCX0gZWxzZSB7CisJCQkJY3gxOF9lbnF1ZXVlKHMsIG1kbCwgJnMtPnFfZnVsbCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQljeDE4X2VucXVldWUocywgbWRsLCAmcy0+cV9mdWxsKTsKKwkJCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWCkKKwkJCQljeDE4X3N0cmVhbV9yb3RhdGVfaWR4X21kbHMoY3gpOwogCQl9CiAJfQogCS8qIFB1dCBhcyBtYW55IE1ETHMgYXMgcG9zc2libGUgYmFjayBpbnRvIGZ3IHVzZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmMKaW5kZXggNjMzMDQ4Mi4uYWVmYzhjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5jCkBAIC00MTksNiArNDE5LDkgQEAKIHsKIAlzdHJ1Y3QgY3gxOF9tZGwgKm1kbDsKIAlzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZjsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSBzLT5jeDsKKworCUNYMThfREVCVUdfSU5GTygiRGVhbGxvY2F0aW5nIGJ1ZmZlcnMgZm9yICVzIHN0cmVhbVxuIiwgcy0+bmFtZSk7CiAKIAkvKiBtb3ZlIGFsbCBidWZmZXJzIHRvIGJ1Zl9wb29sIGFuZCBhbGwgTURMcyB0byBxX2lkbGUgKi8KIAljeDE4X3VubG9hZF9xdWV1ZXMocyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKaW5kZXggOTg3YTkzMC4uMDU0NDUwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYwpAQCAtMzE5LDExICszMTksMjcgQEAKIAogCS8qIFRlYXJkb3duIGFsbCBzdHJlYW1zICovCiAJZm9yICh0eXBlID0gMDsgdHlwZSA8IENYMThfTUFYX1NUUkVBTVM7IHR5cGUrKykgewotCQlpZiAoY3gtPnN0cmVhbXNbdHlwZV0uZHZiLmVuYWJsZWQpIHsKLQkJCWN4MThfZHZiX3VucmVnaXN0ZXIoJmN4LT5zdHJlYW1zW3R5cGVdKTsKLQkJCWN4LT5zdHJlYW1zW3R5cGVdLmR2Yi5lbmFibGVkID0gZmFsc2U7CisKKwkJLyogTm8gc3RydWN0IHZpZGVvX2RldmljZSwgYnV0IGNhbiBoYXZlIGJ1ZmZlcnMgYWxsb2NhdGVkICovCisJCWlmICh0eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1RTKSB7CisJCQlpZiAoY3gtPnN0cmVhbXNbdHlwZV0uZHZiLmVuYWJsZWQpIHsKKwkJCQljeDE4X2R2Yl91bnJlZ2lzdGVyKCZjeC0+c3RyZWFtc1t0eXBlXSk7CisJCQkJY3gtPnN0cmVhbXNbdHlwZV0uZHZiLmVuYWJsZWQgPSBmYWxzZTsKKwkJCQljeDE4X3N0cmVhbV9mcmVlKCZjeC0+c3RyZWFtc1t0eXBlXSk7CisJCQl9CisJCQljb250aW51ZTsKIAkJfQogCisJCS8qIE5vIHN0cnVjdCB2aWRlb19kZXZpY2UsIGJ1dCBjYW4gaGF2ZSBidWZmZXJzIGFsbG9jYXRlZCAqLworCQlpZiAodHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFgpIHsKKwkJCWlmIChjeC0+c3RyZWFtX2J1ZmZlcnNbdHlwZV0gIT0gMCkgeworCQkJCWN4LT5zdHJlYW1fYnVmZmVyc1t0eXBlXSA9IDA7CisJCQkJY3gxOF9zdHJlYW1fZnJlZSgmY3gtPnN0cmVhbXNbdHlwZV0pOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQkvKiBJZiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGV4aXN0cywgY2FuIGhhdmUgYnVmZmVycyBhbGxvY2F0ZWQgKi8KIAkJdmRldiA9IGN4LT5zdHJlYW1zW3R5cGVdLnZpZGVvX2RldjsKIAogCQljeC0+c3RyZWFtc1t0eXBlXS52aWRlb19kZXYgPSBOVUxMOwpAQCAtNDQ3LDYgKzQ2MywzMiBAQAogCWN4MThfYXBpKGN4LCBDWDE4X0NQVV9TRVRfUkFXX1ZCSV9QQVJBTSwgNiwgZGF0YSk7CiB9CiAKK3ZvaWQgY3gxOF9zdHJlYW1fcm90YXRlX2lkeF9tZGxzKHN0cnVjdCBjeDE4ICpjeCkKK3sKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYXTsKKwlzdHJ1Y3QgY3gxOF9tZGwgKm1kbDsKKworCWlmICghY3gxOF9zdHJlYW1fZW5hYmxlZChzKSkKKwkJcmV0dXJuOworCisJLyogUmV0dXJuIGlmIHRoZSBmaXJtd2FyZSBpcyBub3QgcnVubmluZyBsb3cgb24gTURMcyAqLworCWlmICgoYXRvbWljX3JlYWQoJnMtPnFfZnJlZS5kZXB0aCkgKyBhdG9taWNfcmVhZCgmcy0+cV9idXN5LmRlcHRoKSkgPj0KKwkJCQkJICAgIENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF9GV19NRExfTUlOKQorCQlyZXR1cm47CisKKwkvKiBSZXR1cm4gaWYgdGhlcmUgYXJlIG5vIE1ETHMgdG8gcm90YXRlIGJhY2sgdG8gdGhlIGZpcm13YXJlICovCisJaWYgKGF0b21pY19yZWFkKCZzLT5xX2Z1bGwuZGVwdGgpIDwgMikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBUYWtlIHRoZSBvbGRlc3QgSURYIE1ETCBzdGlsbCBob2xkaW5nIGRhdGEsIGFuZCBkaXNjYXJkIGl0cyBpbmRleAorCSAqIGVudHJpZXMgYnkgc2NoZWR1bGluZyB0aGUgTURMIHRvIGdvIGJhY2sgdG8gdGhlIGZpcm13YXJlCisJICovCisJbWRsID0gY3gxOF9kZXF1ZXVlKHMsICZzLT5xX2Z1bGwpOworCWlmIChtZGwgIT0gTlVMTCkKKwkJY3gxOF9lbnF1ZXVlKHMsIG1kbCwgJnMtPnFfZnJlZSk7Cit9CisKIHN0YXRpYwogc3RydWN0IGN4MThfcXVldWUgKl9jeDE4X3N0cmVhbV9wdXRfbWRsX2Z3KHN0cnVjdCBjeDE4X3N0cmVhbSAqcywKIAkJCQkJICAgc3RydWN0IGN4MThfbWRsICptZGwpCkBAIC01NDYsOCArNTg4LDkgQEAKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBzLT5jeDsKIAlpbnQgY2FwdHlwZSA9IDA7CiAJc3RydWN0IGN4MThfYXBpX2Z1bmNfcHJpdmF0ZSBwcml2OworCXN0cnVjdCBjeDE4X3N0cmVhbSAqc19pZHg7CiAKLQlpZiAocy0+dmlkZW9fZGV2ID09IE5VTEwgJiYgcy0+ZHZiLmVuYWJsZWQgPT0gMCkKKwlpZiAoIWN4MThfc3RyZWFtX2VuYWJsZWQocykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJQ1gxOF9ERUJVR19JTkZPKCJTdGFydCBlbmNvZGVyIHN0cmVhbSAlc1xuIiwgcy0+bmFtZSk7CkBAIC01NjEsNiArNjA0LDkgQEAKIAkJY3gtPnNlYXJjaF9wYWNrX2hlYWRlciA9IDA7CiAJCWJyZWFrOwogCisJY2FzZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFg6CisJCWNhcHR5cGUgPSBDQVBUVVJFX0NIQU5ORUxfVFlQRV9JTkRFWDsKKwkJYnJlYWs7CiAJY2FzZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9UUzoKIAkJY2FwdHlwZSA9IENBUFRVUkVfQ0hBTk5FTF9UWVBFX1RTOwogCQlicmVhazsKQEAgLTYzNSwxMSArNjgxLDEzIEBACiAJCQljeDE4X3ZiaV9zZXR1cChzKTsKIAogCQkvKgotCQkgKiBhc3NpZ24gcHJvZ3JhbSBpbmRleCBpbmZvLgotCQkgKiBNYXNrIDc6IHNlbGVjdCBJL1AvQiwgTnVtX3JlcTogNDAwIG1heAotCQkgKiBGSVhNRSAtIGN1cnJlbnRseSB3ZSBoYXZlIHRoaXMgaGFyZGNvZGVkIGFzIGRpc2FibGVkCisJCSAqIFNlbGVjdCB0byByZWNlaXZlIEksIFAsIGFuZCBCIGZyYW1lIGluZGV4IGVudHJpZXMsIGlmIHRoZQorCQkgKiBpbmRleCBzdHJlYW0gaXMgZW5hYmxlZC4gIE90aGVyd2lzZSBkaXNhYmxlIGluZGV4IGVudHJ5CisJCSAqIGdlbmVyYXRpb24uCiAJCSAqLwotCQljeDE4X3ZhcGlfcmVzdWx0KGN4LCBkYXRhLCBDWDE4X0NQVV9TRVRfSU5ERVhUQUJMRSwgMSwgMCk7CisJCXNfaWR4ID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX0lEWF07CisJCWN4MThfdmFwaV9yZXN1bHQoY3gsIGRhdGEsIENYMThfQ1BVX1NFVF9JTkRFWFRBQkxFLCAyLAorCQkJCSBzLT5oYW5kbGUsIGN4MThfc3RyZWFtX2VuYWJsZWQoc19pZHgpID8gNyA6IDApOwogCiAJCS8qIENhbGwgb3V0IHRvIHRoZSBjb21tb24gQ1gyMzQxeCBBUEkgc2V0dXAgZm9yIHVzZXIgY29udHJvbHMgKi8KIAkJcHJpdi5jeCA9IGN4OwpAQCAtNjk3LDYgKzc0NSw3IEBACiAJYXRvbWljX2luYygmY3gtPnRvdF9jYXB0dXJpbmcpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChjeDE4X3N0YXJ0X3Y0bDJfZW5jb2RlX3N0cmVhbSk7CiAKIHZvaWQgY3gxOF9zdG9wX2FsbF9jYXB0dXJlcyhzdHJ1Y3QgY3gxOCAqY3gpCiB7CkBAIC03MDUsNyArNzU0LDcgQEAKIAlmb3IgKGkgPSBDWDE4X01BWF9TVFJFQU1TIC0gMTsgaSA+PSAwOyBpLS0pIHsKIAkJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW2ldOwogCi0JCWlmIChzLT52aWRlb19kZXYgPT0gTlVMTCAmJiBzLT5kdmIuZW5hYmxlZCA9PSAwKQorCQlpZiAoIWN4MThfc3RyZWFtX2VuYWJsZWQocykpCiAJCQljb250aW51ZTsKIAkJaWYgKHRlc3RfYml0KENYMThfRl9TX1NUUkVBTUlORywgJnMtPnNfZmxhZ3MpKQogCQkJY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbShzLCAwKTsKQEAgLTcxNyw3ICs3NjYsNyBAQAogCXN0cnVjdCBjeDE4ICpjeCA9IHMtPmN4OwogCXVuc2lnbmVkIGxvbmcgdGhlbjsKIAotCWlmIChzLT52aWRlb19kZXYgPT0gTlVMTCAmJiBzLT5kdmIuZW5hYmxlZCA9PSAwKQorCWlmICghY3gxOF9zdHJlYW1fZW5hYmxlZChzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB5b3UgYXJlIGFsbG93ZWQgdG8gc3RvcCB0aGUgY2FwdHVyZQpAQCAtNzYyLDYgKzgxMSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woY3gxOF9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbSk7CiAKIHUzMiBjeDE4X2ZpbmRfaGFuZGxlKHN0cnVjdCBjeDE4ICpjeCkKIHsKQEAgLTc4OSw3ICs4MzksNyBAQAogCQlzID0gJmN4LT5zdHJlYW1zW2ldOwogCQlpZiAocy0+aGFuZGxlICE9IGhhbmRsZSkKIAkJCWNvbnRpbnVlOwotCQlpZiAocy0+dmlkZW9fZGV2IHx8IHMtPmR2Yi5lbmFibGVkKQorCQlpZiAoY3gxOF9zdHJlYW1fZW5hYmxlZChzKSkKIAkJCXJldHVybiBzOwogCX0KIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuaAppbmRleCA0YTAxZGI1Li4wYmZmMGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5oCkBAIC0yOCw2ICsyOCwxNiBAQAogaW50IGN4MThfc3RyZWFtc19yZWdpc3RlcihzdHJ1Y3QgY3gxOCAqY3gpOwogdm9pZCBjeDE4X3N0cmVhbXNfY2xlYW51cChzdHJ1Y3QgY3gxOCAqY3gsIGludCB1bnJlZ2lzdGVyKTsKIAorI2RlZmluZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhfRldfTURMX01JTiAoMykKK3ZvaWQgY3gxOF9zdHJlYW1fcm90YXRlX2lkeF9tZGxzKHN0cnVjdCBjeDE4ICpjeCk7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjeDE4X3N0cmVhbV9lbmFibGVkKHN0cnVjdCBjeDE4X3N0cmVhbSAqcykKK3sKKwlyZXR1cm4gcy0+dmlkZW9fZGV2IHx8IHMtPmR2Yi5lbmFibGVkIHx8CisJICAgICAgIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWCAmJgorCQlzLT5jeC0+c3RyZWFtX2J1ZmZlcnNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYXSAhPSAwKTsKK30KKwogLyogUmVsYXRlZCB0byBzdWJtaXNzaW9uIG9mIG1kbHMgdG8gZmlybXdhcmUgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBjeDE4X3N0cmVhbV9sb2FkX2Z3X3F1ZXVlKHN0cnVjdCBjeDE4X3N0cmVhbSAqcykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZlcnNpb24uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZlcnNpb24uaAppbmRleCA5YzBiNWJiLi4zZTFhZWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmVyc2lvbi5oCkBAIC0yNCw3ICsyNCw3IEBACiAKICNkZWZpbmUgQ1gxOF9EUklWRVJfTkFNRSAiY3gxOCIKICNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9NQUpPUiAxCi0jZGVmaW5lIENYMThfRFJJVkVSX1ZFUlNJT05fTUlOT1IgMworI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX01JTk9SIDQKICNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMIDAKIAogI2RlZmluZSBDWDE4X1ZFUlNJT04gX19zdHJpbmdpZnkoQ1gxOF9EUklWRVJfVkVSU0lPTl9NQUpPUikgIi4iIF9fc3RyaW5naWZ5KENYMThfRFJJVkVSX1ZFUlNJT05fTUlOT1IpICIuIiBfX3N0cmluZ2lmeShDWDE4X0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MjM0MTguaAppbmRleCA4Njg4MDZlLi4yYzAwOTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDIzNDE4LmgKQEAgLTE5MSw3ICsxOTEsOCBAQAogI2RlZmluZSBDWDE4X0NQVV9TRVRfTUVESUFOX0NPUklORyAgICAgICAgICAgCShDUFVfQ01EX01BU0tfQ0FQVFVSRSB8IDB4MDAwRSkKIAogLyogRGVzY3JpcHRpb246IFRoaXMgY29tbWFuZCBzZXQgdGhlIHBpY3R1cmUgdHlwZSBtYXNrIGZvciBpbmRleCBmaWxlCi0gICBJTlswXSAtIAkwID0gZGlzYWJsZSBpbmRleCBmaWxlIG91dHB1dAorICAgSU5bMF0gLSBUYXNrIGhhbmRsZSAoaWdub3JlZCBieSBmaXJtd2FyZSkKKyAgIElOWzFdIC0gCTAgPSBkaXNhYmxlIGluZGV4IGZpbGUgb3V0cHV0CiAJCQkxID0gb3V0cHV0IEkgcGljdHVyZQogCQkJMiA9IFAgcGljdHVyZQogCQkJNCA9IEIgcGljdHVyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1kdmIuYwppbmRleCBjNTA4MmE0Li42NGUwMjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1kdmIuYwpAQCAtNDY0LDkgKzQ2NCw5IEBACiAJCS8qIGRlZmluZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJhY2sgcG9pbnRlciAqLwogCQlkdmItPmZyb250ZW5kLT5jYWxsYmFjayA9IGN4MjMxeHhfdHVuZXJfY2FsbGJhY2s7CiAKLQkJaWYgKGR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZGV2LT5kdmItPmZyb250ZW5kLAorCQlpZiAoIWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZGV2LT5kdmItPmZyb250ZW5kLAogCQkJICAgICAgICZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsCi0JCQkgICAgICAgJmNueHRfcmRlMjUwX3R1bmVyY29uZmlnKSA8IDApIHsKKwkJCSAgICAgICAmY254dF9yZGUyNTBfdHVuZXJjb25maWcpKSB7CiAJCQlyZXN1bHQgPSAtRUlOVkFMOwogCQkJZ290byBvdXRfZnJlZTsKIAkJfQpAQCAtNDg2LDkgKzQ4Niw5IEBACiAJCS8qIGRlZmluZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJhY2sgcG9pbnRlciAqLwogCQlkdmItPmZyb250ZW5kLT5jYWxsYmFjayA9IGN4MjMxeHhfdHVuZXJfY2FsbGJhY2s7CiAKLQkJaWYgKGR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZGV2LT5kdmItPmZyb250ZW5kLAorCQlpZiAoIWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZGV2LT5kdmItPmZyb250ZW5kLAogCQkJICAgICAgICZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsCi0JCQkgICAgICAgJmNueHRfcmRlMjUwX3R1bmVyY29uZmlnKSA8IDApIHsKKwkJCSAgICAgICAmY254dF9yZGUyNTBfdHVuZXJjb25maWcpKSB7CiAJCQlyZXN1bHQgPSAtRUlOVkFMOwogCQkJZ290byBvdXRfZnJlZTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzF4eC9jeDIzMXh4LWlucHV0LmMKaW5kZXggMTU4MjZmOS4uYzU3NzFkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzMXh4L2N4MjMxeHgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjMxeHgvY3gyMzF4eC1pbnB1dC5jCkBAIC0yMTYsNyArMjE2LDcgQEAKIAljeDIzMXh4X2lyX3N0YXJ0KGlyKTsKIAogCS8qIGFsbCBkb25lICovCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmlucHV0LCBkZXYtPmJvYXJkLmlyX2NvZGVzKTsKKwllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+aW5wdXQsIGRldi0+Ym9hcmQuaXJfY29kZXMsIE5VTEwpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9zdG9wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LTQxNy5jCmluZGV4IDg4YzBkMjQuLjJhYjk3YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LTQxNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LTQxNy5jCkBAIC02ODEsNyArNjgxLDcgQEAKIAljYXNlIENYMjM0MVhfRU5DX1NFVF9WSURFT19JRDoKIAkJcmV0dXJuICAiU0VUX1ZJREVPX0lEIjsKIAljYXNlIENYMjM0MVhfRU5DX1NFVF9QQ1JfSUQ6Ci0JCXJldHVybiAgIlNFVF9QQ1JfUElEIjsKKwkJcmV0dXJuICAiU0VUX1BDUl9JRCI7CiAJY2FzZSBDWDIzNDFYX0VOQ19TRVRfRlJBTUVfUkFURToKIAkJcmV0dXJuICAiU0VUX0ZSQU1FX1JBVEUiOwogCWNhc2UgQ1gyMzQxWF9FTkNfU0VUX0ZSQU1FX1NJWkU6CkBAIC02OTMsNyArNjkzLDcgQEAKIAljYXNlIENYMjM0MVhfRU5DX1NFVF9BU1BFQ1RfUkFUSU86CiAJCXJldHVybiAgIlNFVF9BU1BFQ1RfUkFUSU8iOwogCWNhc2UgQ1gyMzQxWF9FTkNfU0VUX0ROUl9GSUxURVJfTU9ERToKLQkJcmV0dXJuICAiU0VUX0ROUl9GSUxURVJfUFJPUFMiOworCQlyZXR1cm4gICJTRVRfRE5SX0ZJTFRFUl9NT0RFIjsKIAljYXNlIENYMjM0MVhfRU5DX1NFVF9ETlJfRklMVEVSX1BST1BTOgogCQlyZXR1cm4gICJTRVRfRE5SX0ZJTFRFUl9QUk9QUyI7CiAJY2FzZSBDWDIzNDFYX0VOQ19TRVRfQ09SSU5HX0xFVkVMUzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCmluZGV4IDFlYzQ4MTYuLmQ2MzkxODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwpAQCAtMjc0LDYgKzI3NCwzMSBAQAogCQkucG9ydGIJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKIAkJLnBvcnRjCQk9IENYMjM4ODVfTVBFR19EVkIsCiAJfSwKKwlbQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhUVjEyMDBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiTEVBRFRFSyBXaW5GYXN0IFB4VFYxMjAwIiwKKwkJLnBvcnRhICAgICAgICAgID0gQ1gyMzg4NV9BTkFMT0dfVklERU8sCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1hDMjAyOCwKKwkJLnR1bmVyX2FkZHIgICAgID0gMHg2MSwKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgPSBDWDI1ODQwX1ZJTjJfQ0gxIHwKKwkJCQkgIENYMjU4NDBfVklONV9DSDIgfAorCQkJCSAgQ1gyNTg0MF9OT05FMF9DSDMsCisJCX0sIHsKKwkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgPSBDWDI1ODQwX0NPTVBPU0lURTEsCisJCX0sIHsKKwkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICA9IENYMjU4NDBfU1ZJREVPX0xVTUEzIHwKKwkJCQkgIENYMjU4NDBfU1ZJREVPX0NIUk9NQTQsCisJCX0sIHsKKwkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfQ09NUE9ORU5ULAorCQkJLnZtdXggICA9IENYMjU4NDBfVklON19DSDEgfAorCQkJCSAgQ1gyNTg0MF9WSU42X0NIMiB8CisJCQkJICBDWDI1ODQwX1ZJTjhfQ0gzIHwKKwkJCQkgIENYMjU4NDBfQ09NUE9ORU5UX09OLAorCQl9IH0sCisJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzg4NV9iY291bnQgPSBBUlJBWV9TSVpFKGN4MjM4ODVfYm9hcmRzKTsKIApAQCAtNDE3LDYgKzQ0MiwxMCBAQAogCQkuc3VidmVuZG9yID0gMHgxNGYxLAogCQkuc3ViZGV2aWNlID0gMHg4NTc4LAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9NWUdJQ0FfWDg1NThQUk8sCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgxMDdkLAorCQkuc3ViZGV2aWNlID0gMHg2ZjIyLAorCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhUVjEyMDAsCiAJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzg4NV9pZGNvdW50ID0gQVJSQVlfU0laRShjeDIzODg1X3N1Ymlkcyk7CkBAIC02MTcsNiArNjQ2LDcgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U2NTBGOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U4MDA6CisJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWFRWMTIwMDoKIAkJLyogVHVuZXIgUmVzZXQgQ29tbWFuZCAqLwogCQliaXRtYXNrID0gMHgwNDsKIAkJYnJlYWs7CkBAIC03NjksNiArNzk5LDcgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U2NTBGOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U4MDA6CisJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWFRWMTIwMDoKIAkJLyogR1BJTy0yICB4YzMwMjggdHVuZXIgcmVzZXQgKi8KIAogCQkvKiBUaGUgZm9sbG93aW5nIEdQSU8ncyBhcmUgb24gdGhlIGludGVybmFsIEFWQ29yZSAoY3gyNTg0MCkgKi8KQEAgLTEwNzYsNiArMTEwNyw3IEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX01ZR0lDQV9YODUwNjoKIAljYXNlIENYMjM4ODVfQk9BUkRfTUFHSUNQUk9fUFJPSERUVkUyOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI5MDoKKwljYXNlIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYVFYxMjAwOgogCQlkZXYtPnNkX2N4MjU4NDAgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LAogCQkJCSZkZXYtPmkyY19idXNbMl0uaTJjX2FkYXAsCiAJCQkJImN4MjU4NDAiLCAiY3gyNTg0MCIsIDB4ODggPj4gMSwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCmluZGV4IGU0NWQyZGYuLjkzOTA3OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCkBAIC01NDIsNiArNTQyLDkgQEAKIAkub3NjX2Nsa19mcmVxID0gMzA0MDAsIC8qIGluIGtIeiAqLwogCS5pZl9mcmVxID0gMCwgLyogemVybyBJRiAqLwogCS56aWZfc3dhcF9pcSA9IDEsCisJLmFnY19taW4gPSAweDJFLAorCS5hZ2NfbWF4ID0gMHhGRiwKKwkuYWdjX2hvbGRfbG9vcCA9IDAsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1heDIxNjVfY29uZmlnIG15Z2ljX3g4NTU4cHJvX21heDIxNjVfY2ZnMSA9IHsKQEAgLTU1OCw2ICs1NjEsOSBAQAogCS5vc2NfY2xrX2ZyZXEgPSAzMDQwMCwgLyogaW4ga0h6ICovCiAJLmlmX2ZyZXEgPSAwLCAvKiB6ZXJvIElGICovCiAJLnppZl9zd2FwX2lxID0gMSwKKwkuYWdjX21pbiA9IDB4MkUsCisJLmFnY19tYXggPSAweEZGLAorCS5hZ2NfaG9sZF9sb29wID0gMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWF4MjE2NV9jb25maWcgbXlnaWNfeDg1NThwcm9fbWF4MjE2NV9jZmcyID0gewpAQCAtOTk0LDE1ICsxMDAwLDggQEAKIAkJbmV0dXBfZ2V0X2NhcmRfaW5mbygmZGV2LT5pMmNfYnVzWzBdLmkyY19hZGFwLCAmY2luZm8pOwogCQltZW1jcHkocG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIucHJvcG9zZWRfbWFjLAogCQkJCWNpbmZvLnBvcnRbcG9ydC0+bnIgLSAxXS5tYWMsIDYpOwotCQlwcmludGsoS0VSTl9JTkZPICJOZXRVUCBEdWFsIERWQi1TMiBDSSBjYXJkIHBvcnQlZCBNQUM9IgotCQkJIiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYXG4iLAotCQkJcG9ydC0+bnIsCi0JCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbMF0sCi0JCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbMV0sCi0JCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbMl0sCi0JCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbM10sCi0JCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbNF0sCi0JCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbNV0pOworCQlwcmludGsoS0VSTl9JTkZPICJOZXRVUCBEdWFsIERWQi1TMiBDSSBjYXJkIHBvcnQlZCBNQUM9JXBNXG4iLAorCQkJcG9ydC0+bnIsIHBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hYyk7CiAKIAkJbmV0dXBfY2lfaW5pdChwb3J0KTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaW5wdXQuYwppbmRleCA3NjhlZWM5Li45YzY2MjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWlucHV0LmMKQEAgLTM5Nyw3ICszOTcsNyBAQAogCWRldi0+aXJfaW5wdXQgPSBpcjsKIAljeDIzODg1X2lucHV0X2lyX3N0YXJ0KGRldik7CiAKLQlyZXQgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+ZGV2LCBpcl9jb2Rlcyk7CisJcmV0ID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmRldiwgaXJfY29kZXMsIE5VTEwpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX291dF9zdG9wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYwppbmRleCA4OTM0ZDYxLi4yZDNhYzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlICJjeDIzODg1LWlvY3RsLmgiCisjaW5jbHVkZSAidHVuZXIteGMyMDI4LmgiCiAKIE1PRFVMRV9ERVNDUklQVElPTigidjRsMiBkcml2ZXIgbW9kdWxlIGZvciBjeDIzODg1IGJhc2VkIFRWIGNhcmRzIik7CiBNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+Iik7CkBAIC0xNTA1LDYgKzE1MDYsMTggQEAKIAkJCXR1bl9zZXR1cC50dW5lcl9jYWxsYmFjayA9IGN4MjM4ODVfdHVuZXJfY2FsbGJhY2s7CiAKIAkJCXY0bDJfc3ViZGV2X2NhbGwoc2QsIHR1bmVyLCBzX3R5cGVfYWRkciwgJnR1bl9zZXR1cCk7CisKKwkJCWlmIChkZXYtPmJvYXJkID09IENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYVFYxMjAwKSB7CisJCQkJc3RydWN0IHhjMjAyOF9jdHJsIGN0cmwgPSB7CisJCQkJCS5mbmFtZSA9IFhDMjAyOF9ERUZBVUxUX0ZJUk1XQVJFLAorCQkJCQkubWF4X2xlbiA9IDY0CisJCQkJfTsKKwkJCQlzdHJ1Y3QgdjRsMl9wcml2X3R1bl9jb25maWcgY2ZnID0geworCQkJCQkudHVuZXIgPSBkZXYtPnR1bmVyX3R5cGUsCisJCQkJCS5wcml2ID0gJmN0cmwKKwkJCQl9OworCQkJCXY0bDJfc3ViZGV2X2NhbGwoc2QsIHR1bmVyLCBzX2NvbmZpZywgJmNmZyk7CisJCQl9CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCmluZGV4IDA4YjNmNmIuLjBlM2E5OGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKQEAgLTgxLDYgKzgxLDcgQEAKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U4MDAgICAgMjUKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI5MCAgICAgICAgMjYKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9NWUdJQ0FfWDg1NThQUk8gICAgICAgICAgMjcKKyNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhUVjEyMDAgMjgKIAogI2RlZmluZSBHUElPXzAgMHgwMDAwMDAwMQogI2RlZmluZSBHUElPXzEgMHgwMDAwMDAwMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCmluZGV4IDM4NWVjZDUuLmYyNDYxY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKQEAgLTczNCwxMCArNzM0LDggQEAKIAkJdjRsX2RiZygxLCBjeDI1ODQwX2RlYnVnLCBjbGllbnQsICJ2aWRfaW5wdXQgMHgleFxuIiwKIAkJCXZpZF9pbnB1dCk7CiAJCXJlZyA9IHZpZF9pbnB1dCAmIDB4ZmY7Ci0JCWlmICgodmlkX2lucHV0ICYgQ1gyNTg0MF9TVklERU9fT04pID09IENYMjU4NDBfU1ZJREVPX09OKQotCQkJaXNfY29tcG9zaXRlID0gMDsKLQkJZWxzZSBpZiAoKHZpZF9pbnB1dCAmIENYMjU4NDBfQ09NUE9ORU5UX09OKSA9PSAwKQotCQkJaXNfY29tcG9zaXRlID0gMTsKKwkJaXNfY29tcG9zaXRlID0gIWlzX2NvbXBvbmVudCAmJgorCQkJKCh2aWRfaW5wdXQgJiBDWDI1ODQwX1NWSURFT19PTikgIT0gQ1gyNTg0MF9TVklERU9fT04pOwogCiAJCXY0bF9kYmcoMSwgY3gyNTg0MF9kZWJ1ZywgY2xpZW50LCAibXV4IGNmZyAweCV4IGNvbXA9JWRcbiIsCiAJCQlyZWcsIGlzX2NvbXBvc2l0ZSk7CkBAIC0xMzQ3LDMwICsxMzQ1LDU5IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGludCBjeDI1ODQwX3NfYXVkaW9fc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCit7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1OCB2OworCisJaWYgKGlzX2N4MjU4M3goc3RhdGUpIHx8IGlzX2N4MjM4OHgoc3RhdGUpIHx8IGlzX2N4MjMxeHgoc3RhdGUpKQorCQlyZXR1cm4gMDsKKworCXY0bF9kYmcoMSwgY3gyNTg0MF9kZWJ1ZywgY2xpZW50LCAiJXMgYXVkaW8gb3V0cHV0XG4iLAorCQkJZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOworCisJaWYgKGVuYWJsZSkgeworCQl2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHgxMTUpIHwgMHg4MDsKKwkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE1LCB2KTsKKwkJdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4MTE2KSB8IDB4MDM7CisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDExNiwgdik7CisJfSBlbHNlIHsKKwkJdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4MTE1KSAmIH4oMHg4MCk7CisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDExNSwgdik7CisJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDExNikgJiB+KDB4MDMpOworCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTYsIHYpOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBjeDI1ODQwX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCiB7CiAJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1OCB2OwogCi0JdjRsX2RiZygxLCBjeDI1ODQwX2RlYnVnLCBjbGllbnQsICIlcyBvdXRwdXRcbiIsCisJdjRsX2RiZygxLCBjeDI1ODQwX2RlYnVnLCBjbGllbnQsICIlcyB2aWRlbyBvdXRwdXRcbiIsCiAJCQllbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIik7CiAJaWYgKGVuYWJsZSkgewogCQlpZiAoaXNfY3gyMzg4eChzdGF0ZSkgfHwgaXNfY3gyMzF4eChzdGF0ZSkpIHsKLQkJCXU4IHYgPSAoY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjEpIHwgMHgwYik7CisJCQl2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjEpIHwgMHgwYjsKIAkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQyMSwgdik7CiAJCX0gZWxzZSB7Ci0JCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTUsCi0JCQkJCWlzX2N4MjU4M3goc3RhdGUpID8gMHgwYyA6IDB4OGMpOwotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE2LAotCQkJCQlpc19jeDI1ODN4KHN0YXRlKSA/IDB4MDQgOiAweDA3KTsKKwkJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDExNSkgfCAweDBjOworCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE1LCB2KTsKKwkJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDExNikgfCAweDA0OworCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE2LCB2KTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChpc19jeDIzODh4KHN0YXRlKSB8fCBpc19jeDIzMXh4KHN0YXRlKSkgewotCQkJdTggdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDIxKSAmIH4oMHgwYik7CisJCQl2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjEpICYgfigweDBiKTsKIAkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQyMSwgdik7CiAJCX0gZWxzZSB7Ci0JCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHgxMTUsIDB4MDApOwotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE2LCAweDAwKTsKKwkJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDExNSkgJiB+KDB4MGMpOworCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE1LCB2KTsKKwkJCXYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDExNikgJiB+KDB4MDQpOworCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTE2LCB2KTsKIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTE2MDEsNiArMTYyOCw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2F1ZGlvX29wcyBjeDI1ODQwX2F1ZGlvX29wcyA9IHsKIAkuc19jbG9ja19mcmVxID0gY3gyNTg0MF9zX2Nsb2NrX2ZyZXEsCiAJLnNfcm91dGluZyA9IGN4MjU4NDBfc19hdWRpb19yb3V0aW5nLAorCS5zX3N0cmVhbSA9IGN4MjU4NDBfc19hdWRpb19zdHJlYW0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBjeDI1ODQwX3ZpZGVvX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYwppbmRleCA1YTY3NDQ1Li42NGIzNTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCkBAIC01ODMsMTYgKzU4MywxOCBAQAogewogCXNuZF9jeDg4X2NhcmRfdCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlPWNoaXAtPmNvcmU7Ci0JaW50IHYsIGI7CisJaW50IGxlZnQsIHJpZ2h0LCB2LCBiOwogCWludCBjaGFuZ2VkID0gMDsKIAl1MzIgb2xkOwogCi0JYiA9IHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdIC0gdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisJbGVmdCA9IHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMHgzZjsKKwlyaWdodCA9IHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdICYgMHgzZjsKKwliID0gcmlnaHQgLSBsZWZ0OwogCWlmIChiIDwgMCkgewotCSAgICB2ID0gMHgzZiAtIHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCSAgICB2ID0gMHgzZiAtIGxlZnQ7CiAJICAgIGIgPSAoLWIpIHwgMHg0MDsKIAl9IGVsc2UgewotCSAgICB2ID0gMHgzZiAtIHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdOworCSAgICB2ID0gMHgzZiAtIHJpZ2h0OwogCX0KIAkvKiBEbyB3ZSByZWFsbHkga25vdyB0aGlzIHdpbGwgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIElSUXMgb24/ICovCiAJc3Bpbl9sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKaW5kZXggZDg0NGYyYS4uZWFmMGVlN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwpAQCAtMTQ2Niw2ICsxNDY2LDE4IEBACiAJCQkuYXVkaW9yb3V0ZSA9IDgsCiAJCX0sCiAJfSwKKwlbQ1g4OF9CT0FSRF9TQU1TVU5HX1NNVF83MDIwXSA9IHsKKwkJLm5hbWUJCT0gIlNhbXN1bmcgU01UIDcwMjAgRFZCLVMiLAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKKwkJLnJhZGlvX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5pbnB1dAkJPSB7IHsKKwkJCS50eXBlCT0gQ1g4OF9WTVVYX0RWQiwKKwkJCS52bXV4CT0gMCwKKwkJfSB9LAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAorCX0sCiAJW0NYODhfQk9BUkRfQURTVEVDSF9QVFZfMzkwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkFEUyBUZWNoIEluc3RhbnQgVmlkZW8gUENJIiwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULApAQCAtMjM1NSw2ICsyMzY3LDE0IEBACiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDE0MDQsCiAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIzMDAwLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MThhYywKKwkJLnN1YmRldmljZSA9IDB4ZGMwMCwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfU0FNU1VOR19TTVRfNzAyMCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDE4YWMsCisJCS5zdWJkZXZpY2UgPSAweGRjY2QsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1NBTVNVTkdfU01UXzcwMjAsCiAJfSx7CiAJCS5zdWJ2ZW5kb3IgPSAweDE0NjEsCiAJCS5zdWJkZXZpY2UgPSAweGMxMTEsIC8qIEF2ZXJNZWRpYSBNMTUwLUQgKi8KQEAgLTI2MzMsNiArMjY1Myw5IEBACiAJY2FzZSA5ODU1OTogLyogV2luVFYtSFZSMTEwMExQIChWaWRlbyBubyBJUiwgUmV0YWlsIC0gTG93IFByb2ZpbGUpICovCiAJCS8qIGtub3duICovCiAJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9TQU1TVU5HX1NNVF83MDIwOgorCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwODk4OUZGKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJd2Fybl9wcmludGsoY29yZSwgIndhcm5pbmc6IHVua25vd24gaGF1cHBhdWdlIG1vZGVsICMlZFxuIiwKIAkJCSAgICB0di5tb2RlbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jCmluZGV4IGIxNDI5NjkuLjk0YWI4NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jCkBAIC02NzQsNiArNjc0LDE5NCBAQAogCXJldHVybiAwOwogfQogCisKKworc3RhdGljIHU4IHNhbXN1bmdfc210XzcwMjBfaW5pdHRhYltdID0geworCSAgICAgMHgwMSwgMHgxNSwKKwkgICAgIDB4MDIsIDB4MDAsCisJICAgICAweDAzLCAweDAwLAorCSAgICAgMHgwNCwgMHg3RCwKKwkgICAgIDB4MDUsIDB4MEYsCisJICAgICAweDA2LCAweDAyLAorCSAgICAgMHgwNywgMHgwMCwKKwkgICAgIDB4MDgsIDB4NjAsCisKKwkgICAgIDB4MEEsIDB4QzIsCisJICAgICAweDBCLCAweDAwLAorCSAgICAgMHgwQywgMHgwMSwKKwkgICAgIDB4MEQsIDB4ODEsCisJICAgICAweDBFLCAweDQ0LAorCSAgICAgMHgwRiwgMHgwOSwKKwkgICAgIDB4MTAsIDB4M0MsCisJICAgICAweDExLCAweDg0LAorCSAgICAgMHgxMiwgMHhEQSwKKwkgICAgIDB4MTMsIDB4OTksCisJICAgICAweDE0LCAweDhELAorCSAgICAgMHgxNSwgMHhDRSwKKwkgICAgIDB4MTYsIDB4RTgsCisJICAgICAweDE3LCAweDQzLAorCSAgICAgMHgxOCwgMHgxQywKKwkgICAgIDB4MTksIDB4MUIsCisJICAgICAweDFBLCAweDFELAorCisJICAgICAweDFDLCAweDEyLAorCSAgICAgMHgxRCwgMHgwMCwKKwkgICAgIDB4MUUsIDB4MDAsCisJICAgICAweDFGLCAweDAwLAorCSAgICAgMHgyMCwgMHgwMCwKKwkgICAgIDB4MjEsIDB4MDAsCisJICAgICAweDIyLCAweDAwLAorCSAgICAgMHgyMywgMHgwMCwKKworCSAgICAgMHgyOCwgMHgwMiwKKwkgICAgIDB4MjksIDB4MjgsCisJICAgICAweDJBLCAweDE0LAorCSAgICAgMHgyQiwgMHgwRiwKKwkgICAgIDB4MkMsIDB4MDksCisJICAgICAweDJELCAweDA1LAorCisJICAgICAweDMxLCAweDFGLAorCSAgICAgMHgzMiwgMHgxOSwKKwkgICAgIDB4MzMsIDB4RkMsCisJICAgICAweDM0LCAweDEzLAorCSAgICAgMHhmZiwgMHhmZiwKK307CisKKworc3RhdGljIGludCBzYW1zdW5nX3NtdF83MDIwX3R1bmVyX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisJdTggYnVmWzRdOworCXUzMiBkaXY7CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IDB4NjEsCisJCS5mbGFncyA9IDAsCisJCS5idWYgPSBidWYsCisJCS5sZW4gPSBzaXplb2YoYnVmKSB9OworCisJZGl2ID0gcGFyYW1zLT5mcmVxdWVuY3kgLyAxMjU7CisKKwlidWZbMF0gPSAoZGl2ID4+IDgpICYgMHg3ZjsKKwlidWZbMV0gPSBkaXYgJiAweGZmOworCWJ1ZlsyXSA9IDB4ODQ7ICAvKiAweEM0ICovCisJYnVmWzNdID0gMHgwMDsKKworCWlmIChwYXJhbXMtPmZyZXF1ZW5jeSA8IDE1MDAwMDApCisJCWJ1ZlszXSB8PSAweDEwOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKworCWlmIChpMmNfdHJhbnNmZXIoJmRldi0+Y29yZS0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Ftc3VuZ19zbXRfNzAyMF9zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKK3sKKwlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKKwlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOworCisJY3hfc2V0KE1PX0dQMF9JTywgMHgwODAwKTsKKworCXN3aXRjaCAodG9uZSkgeworCWNhc2UgU0VDX1RPTkVfT046CisJCWN4X3NldChNT19HUDBfSU8sIDB4MDgpOworCQlicmVhazsKKwljYXNlIFNFQ19UT05FX09GRjoKKwkJY3hfY2xlYXIoTU9fR1AwX0lPLCAweDA4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Ftc3VuZ19zbXRfNzAyMF9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCit7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKKworCXU4IGRhdGE7CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IDgsCisJCS5mbGFncyA9IDAsCisJCS5idWYgPSAmZGF0YSwKKwkJLmxlbiA9IHNpemVvZihkYXRhKSB9OworCisJY3hfc2V0KE1PX0dQMF9JTywgMHg4MDAwKTsKKworCXN3aXRjaCAodm9sdGFnZSkgeworCWNhc2UgU0VDX1ZPTFRBR0VfT0ZGOgorCQlicmVhazsKKwljYXNlIFNFQ19WT0xUQUdFXzEzOgorCQlkYXRhID0gSVNMNjQyMV9FTjEgfCBJU0w2NDIxX0xMQzE7CisJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHg4MCk7CisJCWJyZWFrOworCWNhc2UgU0VDX1ZPTFRBR0VfMTg6CisJCWRhdGEgPSBJU0w2NDIxX0VOMSB8IElTTDY0MjFfTExDMSB8IElTTDY0MjFfVlNFTDE7CisJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHg4MCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX07CisKKwlyZXR1cm4gKGkyY190cmFuc2ZlcigmZGV2LT5jb3JlLT5pMmNfYWRhcCwgJm1zZywgMSkgPT0gMSkgPyAwIDogLUVJTzsKK30KKworc3RhdGljIGludCBzYW1zdW5nX3NtdF83MDIwX3N0djAyOTlfc2V0X3N5bWJvbF9yYXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXUzMiBzcmF0ZSwgdTMyIHJhdGlvKQoreworCXU4IGFjbGsgPSAwOworCXU4IGJjbGsgPSAwOworCisJaWYgKHNyYXRlIDwgMTUwMDAwMCkgeworCQlhY2xrID0gMHhiNzsKKwkJYmNsayA9IDB4NDc7CisJfSBlbHNlIGlmIChzcmF0ZSA8IDMwMDAwMDApIHsKKwkJYWNsayA9IDB4Yjc7CisJCWJjbGsgPSAweDRiOworCX0gZWxzZSBpZiAoc3JhdGUgPCA3MDAwMDAwKSB7CisJCWFjbGsgPSAweGI3OworCQliY2xrID0gMHg0ZjsKKwl9IGVsc2UgaWYgKHNyYXRlIDwgMTQwMDAwMDApIHsKKwkJYWNsayA9IDB4Yjc7CisJCWJjbGsgPSAweDUzOworCX0gZWxzZSBpZiAoc3JhdGUgPCAzMDAwMDAwMCkgeworCQlhY2xrID0gMHhiNjsKKwkJYmNsayA9IDB4NTM7CisJfSBlbHNlIGlmIChzcmF0ZSA8IDQ1MDAwMDAwKSB7CisJCWFjbGsgPSAweGI0OworCQliY2xrID0gMHg1MTsKKwl9CisKKwlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDEzLCBhY2xrKTsKKwlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDE0LCBiY2xrKTsKKwlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDFmLCAocmF0aW8gPj4gMTYpICYgMHhmZik7CisJc3R2MDI5OV93cml0ZXJlZyhmZSwgMHgyMCwgKHJhdGlvID4+ICA4KSAmIDB4ZmYpOworCXN0djAyOTlfd3JpdGVyZWcoZmUsIDB4MjEsIHJhdGlvICYgMHhmMCk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIHNhbXN1bmdfc3R2MDI5OV9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorCS5pbml0dGFiID0gc2Ftc3VuZ19zbXRfNzAyMF9pbml0dGFiLAorCS5tY2xrID0gODgwMDAwMDBVTCwKKwkuaW52ZXJ0ID0gMCwKKwkuc2tpcF9yZWluaXQgPSAwLAorCS5sb2NrX291dHB1dCA9IFNUVjAyOTlfTE9DS09VVFBVVF9MSywKKwkudm9sdDEzX29wMF9vcDEgPSBTVFYwMjk5X1ZPTFQxM19PUDEsCisJLm1pbl9kZWxheV9tcyA9IDEwMCwKKwkuc2V0X3N5bWJvbF9yYXRlID0gc2Ftc3VuZ19zbXRfNzAyMF9zdHYwMjk5X3NldF9zeW1ib2xfcmF0ZSwKK307CisKIHN0YXRpYyBpbnQgZHZiX3JlZ2lzdGVyKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKQEAgLTEyMDMsNiArMTM5MSwzMiBAQAogCQl9CiAJCWJyZWFrOwogCQl9CisJY2FzZSBDWDg4X0JPQVJEX1NBTVNVTkdfU01UXzcwMjA6CisJCWRldi0+dHNfZ2VuX2NudHJsID0gMHgwODsKKworCQljeF9zZXQoTU9fR1AwX0lPLCAweDAxMDEpOworCisJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMSk7CisJCW1kZWxheSgxMDApOworCQljeF9zZXQoTU9fR1AwX0lPLCAweDAxKTsKKwkJbWRlbGF5KDIwMCk7CisKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHN0djAyOTlfYXR0YWNoLAorCQkJCQkmc2Ftc3VuZ19zdHYwMjk5X2NvbmZpZywKKwkJCQkJJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPQorCQkJCXNhbXN1bmdfc210XzcwMjBfdHVuZXJfc2V0X3BhcmFtczsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT50dW5lcl9wcml2ID0KKwkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcDsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPQorCQkJCXNhbXN1bmdfc210XzcwMjBfc2V0X3ZvbHRhZ2U7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF90b25lID0KKwkJCQlzYW1zdW5nX3NtdF83MDIwX3NldF90b25lOworCQl9CisKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIiVzLzI6IFRoZSBmcm9udGVuZCBvZiB5b3VyIERWQi9BVFNDIGNhcmQgaXNuJ3Qgc3VwcG9ydGVkIHlldFxuIiwKIAkJICAgICAgIGNvcmUtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKaW5kZXggZjlmZGExOC4uZGUxODBkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCkBAIC0xOTIsNyArMTkyLDcgQEAKIAlzdHJ1Y3QgY3g4OF9JUiAqaXI7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwogCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqaXJfY29kZXMgPSBOVUxMOwotCWludCBpcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKKwl1NjQgaXJfdHlwZSA9IElSX1RZUEVfT1RIRVI7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKIAlpciA9IGt6YWxsb2Moc2l6ZW9mKCppciksIEdGUF9LRVJORUwpOwpAQCAtMzgzLDcgKzM4Myw3IEBACiAJY3g4OF9pcl9zdGFydChjb3JlLCBpcik7CiAKIAkvKiBhbGwgZG9uZSAqLwotCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5pbnB1dCwgaXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5pbnB1dCwgaXJfY29kZXMsIE5VTEwpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9zdG9wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKaW5kZXggYmI1MTA0OC4uMzM4YWY3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwpAQCAtMTEwLDYgKzExMCw5IEBACiAJCWNhc2UgQ1g4OF9CT0FSRF9QQ0hEVFZfSEQ1NTAwOgogCQkJY3hfd3JpdGUoVFNfU09QX1NUQVQsIDE8PDEzKTsKIAkJCWJyZWFrOworCQljYXNlIENYODhfQk9BUkRfU0FNU1VOR19TTVRfNzAyMDoKKwkJCWN4X3dyaXRlKFRTX1NPUF9TVEFULCAweDAwKTsKKwkJCWJyZWFrOwogCQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX05PVkFTUExVU19TMToKIAkJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9OT1ZBU0UyX1MxOgogCQkJY3hfd3JpdGUoTU9fUElOTVVYX0lPLCAweDg4KTsgLyogRW5hYmxlIE1QRUcgcGFyYWxsZWwgSU8gYW5kIHZpZGVvIHNpZ25hbCBwaW5zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAppbmRleCBiMTQ5OWJmLi40OGI2YzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKQEAgLTIzOSw2ICsyMzksNyBAQAogI2RlZmluZSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMTgwMEggICAgICAgIDgxCiAjZGVmaW5lIENYODhfQk9BUkRfV0lORkFTVF9EVFYyMDAwSF9KICAgICAgODIKICNkZWZpbmUgQ1g4OF9CT0FSRF9QUk9GXzczMDEgICAgICAgICAgICAgICA4MworI2RlZmluZSBDWDg4X0JPQVJEX1NBTVNVTkdfU01UXzcwMjAgICAgICAgIDg0CiAKIGVudW0gY3g4OF9pdHlwZSB7CiAJQ1g4OF9WTVVYX0NPTVBPU0lURTEgPSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKaW5kZXggZWU0Mzg3Ni4uOWI0MTNhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCkBAIC05MTMsNiArOTEzLDggQEAKIE1PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKIE1PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9GSVJNV0FSRSgiZGFidXNiL2Zpcm13YXJlLmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoImRhYnVzYi9iaXRzdHJlYW0uYmluIik7CiAKIG1vZHVsZV9wYXJhbShidWZmZXJzLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyAoYnVmZmVycywgIk51bWJlciBvZiBidWZmZXJzIChkZWZhdWx0PTI1NikiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9NYWtlZmlsZQppbmRleCAxYThiOGYzLi5hMzc5NTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL01ha2VmaWxlCkBAIC0xNSwzICsxNSw0IEBACiBvYmotJChDT05GSUdfVklERU9fVlBGRV9DQVBUVVJFKSArPSB2cGZlX2NhcHR1cmUubwogb2JqLSQoQ09ORklHX1ZJREVPX0RNNjQ0Nl9DQ0RDKSArPSBkbTY0NHhfY2NkYy5vCiBvYmotJChDT05GSUdfVklERU9fRE0zNTVfQ0NEQykgKz0gZG0zNTVfY2NkYy5vCitvYmotJChDT05GSUdfVklERU9fSVNJRikgKz0gaXNpZi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG0zNTVfY2NkYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtMzU1X2NjZGMuYwppbmRleCAzMTQzOTAwLi5jMjlhYzg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG0zNTVfY2NkYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9kbTM1NV9jY2RjLmMKQEAgLTM3LDggKzM3LDEyIEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCiAjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS9kbTM1NV9jY2RjLmg+CiAjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS92cHNzLmg+CisKICNpbmNsdWRlICJkbTM1NV9jY2RjX3JlZ3MuaCIKICNpbmNsdWRlICJjY2RjX2h3X2RldmljZS5oIgogCkBAIC00Niw2NyArNTAsNzUgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQ0NEQyBEcml2ZXIgZm9yIERNMzU1Iik7CiBNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyIpOwogCi1zdGF0aWMgc3RydWN0IGRldmljZSAqZGV2OwotCi0vKiBPYmplY3QgZm9yIENDREMgcmF3IG1vZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgY2NkY19wYXJhbXNfcmF3IGNjZGNfaHdfcGFyYW1zX3JhdyA9IHsKLQkucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVywKLQkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX1BST0dSRVNTSVZFLAotCS53aW4gPSBDQ0RDX1dJTl9WR0EsCi0JLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS5nYWluID0gewotCQkucl95ZSA9IDI1NiwKLQkJLmdiX2cgPSAyNTYsCi0JCS5ncl9jeSA9IDI1NiwKLQkJLmJfbWcgPSAyNTYKK3N0YXRpYyBzdHJ1Y3QgY2NkY19vcGVyX2NvbmZpZyB7CisJc3RydWN0IGRldmljZSAqZGV2OworCS8qIENDREMgaW50ZXJmYWNlIHR5cGUgKi8KKwllbnVtIHZwZmVfaHdfaWZfdHlwZSBpZl90eXBlOworCS8qIFJhdyBCYXllciBjb25maWd1cmF0aW9uICovCisJc3RydWN0IGNjZGNfcGFyYW1zX3JhdyBiYXllcjsKKwkvKiBZQ2JDciBjb25maWd1cmF0aW9uICovCisJc3RydWN0IGNjZGNfcGFyYW1zX3ljYmNyIHljYmNyOworCS8qIE1hc3RlciBjbG9jayAqLworCXN0cnVjdCBjbGsgKm1jbGs7CisJLyogc2xhdmUgY2xvY2sgKi8KKwlzdHJ1Y3QgY2xrICpzY2xrOworCS8qIGNjZGMgYmFzZSBhZGRyZXNzICovCisJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Cit9IGNjZGNfY2ZnID0geworCS8qIFJhdyBjb25maWd1cmF0aW9ucyAqLworCS5iYXllciA9IHsKKwkJLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVcsCisJCS5mcm1fZm10ID0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUsCisJCS53aW4gPSBDQ0RDX1dJTl9WR0EsCisJCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS52ZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuZ2FpbiA9IHsKKwkJCS5yX3llID0gMjU2LAorCQkJLmdiX2cgPSAyNTYsCisJCQkuZ3JfY3kgPSAyNTYsCisJCQkuYl9tZyA9IDI1NgorCQl9LAorCQkuY29uZmlnX3BhcmFtcyA9IHsKKwkJCS5kYXRhc2Z0ID0gMiwKKwkJCS5tZmlsdDEgPSBDQ0RDX05PX01FRElBTl9GSUxURVIxLAorCQkJLm1maWx0MiA9IENDRENfTk9fTUVESUFOX0ZJTFRFUjIsCisJCQkuYWxhdyA9IHsKKwkJCQkuZ2FtYV93ZCA9IDIsCisJCQl9LAorCQkJLmJsa19jbGFtcCA9IHsKKwkJCQkuc2FtcGxlX3BpeGVsID0gMSwKKwkJCQkuZGNfc3ViID0gMjUKKwkJCX0sCisJCQkuY29sX3BhdF9maWVsZDAgPSB7CisJCQkJLm9sb3AgPSBDQ0RDX0dSRUVOX0JMVUUsCisJCQkJLm9sZXAgPSBDQ0RDX0JMVUUsCisJCQkJLmVsb3AgPSBDQ0RDX1JFRCwKKwkJCQkuZWxlcCA9IENDRENfR1JFRU5fUkVECisJCQl9LAorCQkJLmNvbF9wYXRfZmllbGQxID0geworCQkJCS5vbG9wID0gQ0NEQ19HUkVFTl9CTFVFLAorCQkJCS5vbGVwID0gQ0NEQ19CTFVFLAorCQkJCS5lbG9wID0gQ0NEQ19SRUQsCisJCQkJLmVsZXAgPSBDQ0RDX0dSRUVOX1JFRAorCQkJfSwKKwkJfSwKIAl9LAotCS5jb25maWdfcGFyYW1zID0gewotCQkuZGF0YXNmdCA9IDIsCi0JCS5kYXRhX3N6ID0gQ0NEQ19EQVRBXzEwQklUUywKLQkJLm1maWx0MSA9IENDRENfTk9fTUVESUFOX0ZJTFRFUjEsCi0JCS5tZmlsdDIgPSBDQ0RDX05PX01FRElBTl9GSUxURVIyLAotCQkuYWxhdyA9IHsKLQkJCS5nYW1hX3dkID0gMiwKLQkJfSwKLQkJLmJsa19jbGFtcCA9IHsKLQkJCS5zYW1wbGVfcGl4ZWwgPSAxLAotCQkJLmRjX3N1YiA9IDI1Ci0JCX0sCi0JCS5jb2xfcGF0X2ZpZWxkMCA9IHsKLQkJCS5vbG9wID0gQ0NEQ19HUkVFTl9CTFVFLAotCQkJLm9sZXAgPSBDQ0RDX0JMVUUsCi0JCQkuZWxvcCA9IENDRENfUkVELAotCQkJLmVsZXAgPSBDQ0RDX0dSRUVOX1JFRAotCQl9LAotCQkuY29sX3BhdF9maWVsZDEgPSB7Ci0JCQkub2xvcCA9IENDRENfR1JFRU5fQkxVRSwKLQkJCS5vbGVwID0gQ0NEQ19CTFVFLAotCQkJLmVsb3AgPSBDQ0RDX1JFRCwKLQkJCS5lbGVwID0gQ0NEQ19HUkVFTl9SRUQKLQkJfSwKKwkvKiBZQ2JDciBjb25maWd1cmF0aW9uICovCisJLnljYmNyID0geworCQkud2luID0gQ0NEQ19XSU5fUEFMLAorCQkucGl4X2ZtdCA9IENDRENfUElYRk1UX1lDQkNSXzhCSVQsCisJCS5mcm1fZm10ID0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCwKKwkJLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuaGRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5idDY1Nl9lbmFibGUgPSAxLAorCQkucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlksCisJCS5idWZfdHlwZSA9IENDRENfQlVGVFlQRV9GTERfSU5URVJMRUFWRUQKIAl9LAogfTsKIAogCi0vKiBPYmplY3QgZm9yIENDREMgeWNiY3IgbW9kZSAqLwotc3RhdGljIHN0cnVjdCBjY2RjX3BhcmFtc195Y2JjciBjY2RjX2h3X3BhcmFtc195Y2JjciA9IHsKLQkud2luID0gQ0NEQ19XSU5fUEFMLAotCS5waXhfZm10ID0gQ0NEQ19QSVhGTVRfWUNCQ1JfOEJJVCwKLQkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX0lOVEVSTEFDRUQsCi0JLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS5idDY1Nl9lbmFibGUgPSAxLAotCS5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWSwKLQkuYnVmX3R5cGUgPSBDQ0RDX0JVRlRZUEVfRkxEX0lOVEVSTEVBVkVECi19OwotCi1zdGF0aWMgZW51bSB2cGZlX2h3X2lmX3R5cGUgY2NkY19pZl90eXBlOwotc3RhdGljIHZvaWQgKl9faW9tZW0gY2NkY19iYXNlX2FkZHI7Ci1zdGF0aWMgaW50IGNjZGNfYWRkcl9zaXplOwotCiAvKiBSYXcgQmF5ZXIgZm9ybWF0cyAqLwogc3RhdGljIHUzMiBjY2RjX3Jhd19iYXllcl9waXhfZm9ybWF0c1tdID0KIAkJe1Y0TDJfUElYX0ZNVF9TQkdHUjgsIFY0TDJfUElYX0ZNVF9TQkdHUjE2fTsKQEAgLTExOCwxOCArMTMwLDEyIEBACiAvKiByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMgKi8KIHN0YXRpYyBpbmxpbmUgdTMyIHJlZ3IodTMyIG9mZnNldCkKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGwoY2NkY19iYXNlX2FkZHIgKyBvZmZzZXQpOworCXJldHVybiBfX3Jhd19yZWFkbChjY2RjX2NmZy5iYXNlX2FkZHIgKyBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVndyh1MzIgdmFsLCB1MzIgb2Zmc2V0KQogewotCV9fcmF3X3dyaXRlbCh2YWwsIGNjZGNfYmFzZV9hZGRyICsgb2Zmc2V0KTsKLX0KLQotc3RhdGljIHZvaWQgY2NkY19zZXRfY2NkY19iYXNlKHZvaWQgKmFkZHIsIGludCBzaXplKQotewotCWNjZGNfYmFzZV9hZGRyID0gYWRkcjsKLQljY2RjX2FkZHJfc2l6ZSA9IHNpemU7CisJX19yYXdfd3JpdGVsKHZhbCwgY2NkY19jZmcuYmFzZV9hZGRyICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIHZvaWQgY2NkY19lbmFibGUoaW50IGVuKQpAQCAtMTUzLDEyICsxNTksMTIgQEAKIHN0YXRpYyB2b2lkIGNjZGNfY29uZmlnX2dhaW5fb2Zmc2V0KHZvaWQpCiB7CiAJLyogY29uZmlndXJlIGdhaW4gKi8KLQlyZWd3KGNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLnJfeWUsIFJZRUdBSU4pOwotCXJlZ3coY2NkY19od19wYXJhbXNfcmF3LmdhaW4uZ3JfY3ksIEdSQ1lHQUlOKTsKLQlyZWd3KGNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLmdiX2csIEdCR0dBSU4pOwotCXJlZ3coY2NkY19od19wYXJhbXNfcmF3LmdhaW4uYl9tZywgQk1HR0FJTik7CisJcmVndyhjY2RjX2NmZy5iYXllci5nYWluLnJfeWUsIFJZRUdBSU4pOworCXJlZ3coY2NkY19jZmcuYmF5ZXIuZ2Fpbi5ncl9jeSwgR1JDWUdBSU4pOworCXJlZ3coY2NkY19jZmcuYmF5ZXIuZ2Fpbi5nYl9nLCBHQkdHQUlOKTsKKwlyZWd3KGNjZGNfY2ZnLmJheWVyLmdhaW4uYl9tZywgQk1HR0FJTik7CiAJLyogY29uZmlndXJlIG9mZnNldCAqLwotCXJlZ3coY2NkY19od19wYXJhbXNfcmF3LmNjZGNfb2Zmc2V0LCBPRkZTRVQpOworCXJlZ3coY2NkY19jZmcuYmF5ZXIuY2NkY19vZmZzZXQsIE9GRlNFVCk7CiB9CiAKIC8qCkBAIC0xNjksNyArMTc1LDcgQEAKIHsKIAlpbnQgaTsKIAotCWRldl9kYmcoZGV2LCAiXG5zdGFydGluZyBjY2RjX3Jlc3RvcmVfZGVmYXVsdHMuLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuc3RhcnRpbmcgY2NkY19yZXN0b3JlX2RlZmF1bHRzLi4uIik7CiAJLyogc2V0IGFsbCByZWdpc3RlcnMgdG8gemVybyAqLwogCWZvciAoaSA9IDA7IGkgPD0gQ0NEQ19SRUdfTEFTVDsgaSArPSA0KQogCQlyZWd3KDAsIGkpOwpAQCAtMTgwLDMwICsxODYsMjkgQEAKIAlyZWd3KENVTEhfREVGQVVMVCwgQ1VMSCk7CiAJcmVndyhDVUxWX0RFRkFVTFQsIENVTFYpOwogCS8qIFNldCBkZWZhdWx0IEdhaW4gYW5kIE9mZnNldCAqLwotCWNjZGNfaHdfcGFyYW1zX3Jhdy5nYWluLnJfeWUgPSBHQUlOX0RFRkFVTFQ7Ci0JY2NkY19od19wYXJhbXNfcmF3LmdhaW4uZ2JfZyA9IEdBSU5fREVGQVVMVDsKLQljY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5ncl9jeSA9IEdBSU5fREVGQVVMVDsKLQljY2RjX2h3X3BhcmFtc19yYXcuZ2Fpbi5iX21nID0gR0FJTl9ERUZBVUxUOworCWNjZGNfY2ZnLmJheWVyLmdhaW4ucl95ZSA9IEdBSU5fREVGQVVMVDsKKwljY2RjX2NmZy5iYXllci5nYWluLmdiX2cgPSBHQUlOX0RFRkFVTFQ7CisJY2NkY19jZmcuYmF5ZXIuZ2Fpbi5ncl9jeSA9IEdBSU5fREVGQVVMVDsKKwljY2RjX2NmZy5iYXllci5nYWluLmJfbWcgPSBHQUlOX0RFRkFVTFQ7CiAJY2NkY19jb25maWdfZ2Fpbl9vZmZzZXQoKTsKIAlyZWd3KE9VVENMSVBfREVGQVVMVCwgT1VUQ0xJUCk7CiAJcmVndyhMU0NDRkcyX0RFRkFVTFQsIExTQ0NGRzIpOwogCS8qIHNlbGVjdCBjY2RjIGlucHV0ICovCiAJaWYgKHZwc3Nfc2VsZWN0X2NjZGNfc291cmNlKFZQU1NfQ0NEQ0lOKSkgewotCQlkZXZfZGJnKGRldiwgIlxuY291bGRuJ3Qgc2VsZWN0IGNjZGMgaW5wdXQgc291cmNlIik7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5jb3VsZG4ndCBzZWxlY3QgY2NkYyBpbnB1dCBzb3VyY2UiKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCS8qIHNlbGVjdCBjY2RjIGNsb2NrICovCiAJaWYgKHZwc3NfZW5hYmxlX2Nsb2NrKFZQU1NfQ0NEQ19DTE9DSywgMSkgPCAwKSB7Ci0JCWRldl9kYmcoZGV2LCAiXG5jb3VsZG4ndCBlbmFibGUgY2NkYyBjbG9jayIpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuY291bGRuJ3QgZW5hYmxlIGNjZGMgY2xvY2siKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQotCWRldl9kYmcoZGV2LCAiXG5FbmQgb2YgY2NkY19yZXN0b3JlX2RlZmF1bHRzLi4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbkVuZCBvZiBjY2RjX3Jlc3RvcmVfZGVmYXVsdHMuLi4iKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjY2RjX29wZW4oc3RydWN0IGRldmljZSAqZGV2aWNlKQogewotCWRldiA9IGRldmljZTsKIAlyZXR1cm4gY2NkY19yZXN0b3JlX2RlZmF1bHRzKCk7CiB9CiAKQEAgLTIyNiw3ICsyMzEsNyBAQAogCWludCB2ZXJ0X3N0YXJ0LCB2ZXJ0X25yX2xpbmVzOwogCWludCBtaWRfaW1nID0gMDsKIAotCWRldl9kYmcoZGV2LCAiXG5TdGFydGluZyBjY2RjX3NldHdpbi4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5TdGFydGluZyBjY2RjX3NldHdpbi4uLiIpOwogCiAJLyoKIAkgKiBwcGMgLSBwZXIgcGl4ZWwgY291bnQuIGluZGljYXRlcyBob3cgbWFueSBwaXhlbHMgcGVyIGNlbGwKQEAgLTI2MCw0NSArMjY1LDQ2IEBACiAJcmVndyh2ZXJ0X3N0YXJ0ICYgQ0NEQ19TVEFSVF9WRVJfT05FX01BU0ssIFNMVjApOwogCXJlZ3codmVydF9zdGFydCAmIENDRENfU1RBUlRfVkVSX1RXT19NQVNLLCBTTFYxKTsKIAlyZWd3KHZlcnRfbnJfbGluZXMgJiBDQ0RDX05VTV9MSU5FU19WRVIsIE5MVik7Ci0JZGV2X2RiZyhkZXYsICJcbkVuZCBvZiBjY2RjX3NldHdpbi4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5FbmQgb2YgY2NkY19zZXR3aW4uLi4iKTsKIH0KIAogc3RhdGljIGludCB2YWxpZGF0ZV9jY2RjX3BhcmFtKHN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjY2RjcGFyYW0pCiB7CiAJaWYgKGNjZGNwYXJhbS0+ZGF0YXNmdCA8IENDRENfREFUQV9OT19TSElGVCB8fAogCSAgICBjY2RjcGFyYW0tPmRhdGFzZnQgPiBDQ0RDX0RBVEFfU0hJRlRfNkJJVCkgewotCQlkZXZfZGJnKGRldiwgIkludmFsaWQgdmFsdWUgb2YgZGF0YSBzaGlmdFxuIik7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBkYXRhIHNoaWZ0XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGNjZGNwYXJhbS0+bWZpbHQxIDwgQ0NEQ19OT19NRURJQU5fRklMVEVSMSB8fAogCSAgICBjY2RjcGFyYW0tPm1maWx0MSA+IENDRENfTUVESUFOX0ZJTFRFUjEpIHsKLQkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIG1lZGlhbiBmaWx0ZXIxXG4iKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJJbnZhbGlkIHZhbHVlIG9mIG1lZGlhbiBmaWx0ZXIxXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGNjZGNwYXJhbS0+bWZpbHQyIDwgQ0NEQ19OT19NRURJQU5fRklMVEVSMiB8fAogCSAgICBjY2RjcGFyYW0tPm1maWx0MiA+IENDRENfTUVESUFOX0ZJTFRFUjIpIHsKLQkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIG1lZGlhbiBmaWx0ZXIyXG4iKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJJbnZhbGlkIHZhbHVlIG9mIG1lZGlhbiBmaWx0ZXIyXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKChjY2RjcGFyYW0tPm1lZF9maWx0X3RocmVzIDwgMCkgfHwKIAkgICAoY2NkY3BhcmFtLT5tZWRfZmlsdF90aHJlcyA+IENDRENfTUVEX0ZJTFRfVEhSRVNIKSkgewotCQlkZXZfZGJnKGRldiwgIkludmFsaWQgdmFsdWUgb2YgbWVkaWFuIGZpbHRlciB0aHJlc2hvbGRcbiIpOworCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwKKwkJCSJJbnZhbGlkIHZhbHVlIG9mIG1lZGlhbiBmaWx0ZXIgdGhyZXNvbGRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoY2NkY3BhcmFtLT5kYXRhX3N6IDwgQ0NEQ19EQVRBXzE2QklUUyB8fAogCSAgICBjY2RjcGFyYW0tPmRhdGFfc3ogPiBDQ0RDX0RBVEFfOEJJVFMpIHsKLQkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIGRhdGEgc2l6ZVxuIik7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBkYXRhIHNpemVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoY2NkY3BhcmFtLT5hbGF3LmVuYWJsZSkgewogCQlpZiAoY2NkY3BhcmFtLT5hbGF3LmdhbWFfd2QgPCBDQ0RDX0dBTU1BX0JJVFNfMTNfNCB8fAogCQkgICAgY2NkY3BhcmFtLT5hbGF3LmdhbWFfd2QgPiBDQ0RDX0dBTU1BX0JJVFNfMDlfMCkgewotCQkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIHZhbHVlIG9mIEFMQVdcbiIpOworCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJJbnZhbGlkIHZhbHVlIG9mIEFMQVdcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CkBAIC0zMDYsMTIgKzMxMiwxNCBAQAogCWlmIChjY2RjcGFyYW0tPmJsa19jbGFtcC5iX2NsYW1wX2VuYWJsZSkgewogCQlpZiAoY2NkY3BhcmFtLT5ibGtfY2xhbXAuc2FtcGxlX3BpeGVsIDwgQ0NEQ19TQU1QTEVfMVBJWEVMUyB8fAogCQkgICAgY2NkY3BhcmFtLT5ibGtfY2xhbXAuc2FtcGxlX3BpeGVsID4gQ0NEQ19TQU1QTEVfMTZQSVhFTFMpIHsKLQkJCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBzYW1wbGUgcGl4ZWxcbiIpOworCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsCisJCQkJIkludmFsaWQgdmFsdWUgb2Ygc2FtcGxlIHBpeGVsXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChjY2RjcGFyYW0tPmJsa19jbGFtcC5zYW1wbGVfbG4gPCBDQ0RDX1NBTVBMRV8xTElORVMgfHwKIAkJICAgIGNjZGNwYXJhbS0+YmxrX2NsYW1wLnNhbXBsZV9sbiA+IENDRENfU0FNUExFXzE2TElORVMpIHsKLQkJCWRldl9kYmcoZGV2LCAiSW52YWxpZCB2YWx1ZSBvZiBzYW1wbGUgbGluZXNcbiIpOworCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsCisJCQkJIkludmFsaWQgdmFsdWUgb2Ygc2FtcGxlIGxpbmVzXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtMzI1LDE4ICszMzMsMTggQEAKIAlpbnQgeDsKIAogCS8qIG9ubHkgcmF3IG1vZHVsZSBwYXJhbWV0ZXJzIGNhbiBiZSBzZXQgdGhyb3VnaCB0aGUgSU9DVEwgKi8KLQlpZiAoY2NkY19pZl90eXBlICE9IFZQRkVfUkFXX0JBWUVSKQorCWlmIChjY2RjX2NmZy5pZl90eXBlICE9IFZQRkVfUkFXX0JBWUVSKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXggPSBjb3B5X2Zyb21fdXNlcigmY2NkY19yYXdfcGFyYW1zLCBwYXJhbXMsIHNpemVvZihjY2RjX3Jhd19wYXJhbXMpKTsKIAlpZiAoeCkgewotCQlkZXZfZGJnKGRldiwgImNjZGNfc2V0X3BhcmFtczogZXJyb3IgaW4gY29weWluZyBjY2RjIgorCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgImNjZGNfc2V0X3BhcmFtczogZXJyb3IgaW4gY29weWluZyBjY2RjIgogCQkJInBhcmFtcywgJWRcbiIsIHgpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKIAlpZiAoIXZhbGlkYXRlX2NjZGNfcGFyYW0oJmNjZGNfcmF3X3BhcmFtcykpIHsKLQkJbWVtY3B5KCZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtcywKKwkJbWVtY3B5KCZjY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zLAogCQkJJmNjZGNfcmF3X3BhcmFtcywKIAkJCXNpemVvZihjY2RjX3Jhd19wYXJhbXMpKTsKIAkJcmV0dXJuIDA7CkBAIC0zNDcsMTEgKzM1NSwxMSBAQAogLyogVGhpcyBmdW5jdGlvbiB3aWxsIGNvbmZpZ3VyZSBDQ0RDIGZvciBZQ2JDciB2aWRlbyBjYXB0dXJlICovCiBzdGF0aWMgdm9pZCBjY2RjX2NvbmZpZ195Y2Jjcih2b2lkKQogewotCXN0cnVjdCBjY2RjX3BhcmFtc195Y2JjciAqcGFyYW1zID0gJmNjZGNfaHdfcGFyYW1zX3ljYmNyOworCXN0cnVjdCBjY2RjX3BhcmFtc195Y2JjciAqcGFyYW1zID0gJmNjZGNfY2ZnLnljYmNyOwogCXUzMiB0ZW1wOwogCiAJLyogZmlyc3Qgc2V0IHRoZSBDQ0RDIHBvd2VyIG9uIGRlZmF1bHRzIHZhbHVlcyBpbiBhbGwgcmVnaXN0ZXJzICovCi0JZGV2X2RiZyhkZXYsICJcblN0YXJ0aW5nIGNjZGNfY29uZmlnX3ljYmNyLi4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcblN0YXJ0aW5nIGNjZGNfY29uZmlnX3ljYmNyLi4uIik7CiAJY2NkY19yZXN0b3JlX2RlZmF1bHRzKCk7CiAKIAkvKiBjb25maWd1cmUgcGl4ZWwgZm9ybWF0ICYgdmlkZW8gZnJhbWUgZm9ybWF0ICovCkBAIC00MDMsNyArNDExLDcgQEAKIAkJcmVndyhDQ0RDX1NET0ZTVF9GSUVMRF9JTlRFUkxFQVZFRCwgU0RPRlNUKTsKIAl9CiAKLQlkZXZfZGJnKGRldiwgIlxuRW5kIG9mIGNjZGNfY29uZmlnX3ljYmNyLi4uXG4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuRW5kIG9mIGNjZGNfY29uZmlnX3ljYmNyLi4uXG4iKTsKIH0KIAogLyoKQEAgLTQ4Myw3ICs0OTEsNyBAQAogCSAqLwogCiAJaWYgKGNvdW50KSB7Ci0JCWRldl9lcnIoZGV2LCAiZGVmZWN0IHRhYmxlIHdyaXRlIHRpbWVvdXQgISEhXG4iKTsKKwkJZGV2X2VycihjY2RjX2NmZy5kZXYsICJkZWZlY3QgdGFibGUgd3JpdGUgdGltZW91dCAhISFcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCXJldHVybiAwOwpAQCAtNjA1LDEyICs2MTMsMTIgQEAKIC8qIFRoaXMgZnVuY3Rpb24gd2lsbCBjb25maWd1cmUgQ0NEQyBmb3IgUmF3IG1vZGUgaW1hZ2UgY2FwdHVyZSAqLwogc3RhdGljIGludCBjY2RjX2NvbmZpZ19yYXcodm9pZCkKIHsKLQlzdHJ1Y3QgY2NkY19wYXJhbXNfcmF3ICpwYXJhbXMgPSAmY2NkY19od19wYXJhbXNfcmF3OworCXN0cnVjdCBjY2RjX3BhcmFtc19yYXcgKnBhcmFtcyA9ICZjY2RjX2NmZy5iYXllcjsKIAlzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY29uZmlnX3BhcmFtcyA9Ci0JCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtczsKKwkJCQkJJmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXM7CiAJdW5zaWduZWQgaW50IHZhbDsKIAotCWRldl9kYmcoZGV2LCAiXG5TdGFydGluZyBjY2RjX2NvbmZpZ19yYXcuLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuU3RhcnRpbmcgY2NkY19jb25maWdfcmF3Li4uIik7CiAKIAkvKiByZXN0b3JlIHBvd2VyIG9uIGRlZmF1bHRzIHRvIHJlZ2lzdGVyICovCiAJY2NkY19yZXN0b3JlX2RlZmF1bHRzKCk7CkBAIC02NTksNyArNjY3LDcgQEAKIAl2YWwgfD0gKGNvbmZpZ19wYXJhbXMtPmRhdGFzZnQgJiBDQ0RDX0RBVEFTRlRfTUFTSykgPDwKIAkJQ0NEQ19EQVRBU0ZUX1NISUZUOwogCXJlZ3codmFsICwgTU9ERVNFVCk7Ci0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBNT0RFU0VULi4uXG4iLCB2YWwpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gTU9ERVNFVC4uLlxuIiwgdmFsKTsKIAogCS8qIENvbmZpZ3VyZSB0aGUgTWVkaWFuIEZpbHRlciB0aHJlc2hvbGQgKi8KIAlyZWd3KChjb25maWdfcGFyYW1zLT5tZWRfZmlsdF90aHJlcykgJiBDQ0RDX01FRF9GSUxUX1RIUkVTSCwgTUVERklMVCk7CkBAIC02ODEsNyArNjg5LDcgQEAKIAkJKGNvbmZpZ19wYXJhbXMtPm1maWx0MiA8PCBDQ0RDX01GSUxUMl9TSElGVCkpOwogCiAJcmVndyh2YWwsIEdBTU1BV0QpOwotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gR0FNTUFXRC4uLlxuIiwgdmFsKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIEdBTU1BV0QuLi5cbiIsIHZhbCk7CiAKIAkvKiBjb25maWd1cmUgdmlkZW8gd2luZG93ICovCiAJY2NkY19zZXR3aW4oJnBhcmFtcy0+d2luLCBwYXJhbXMtPmZybV9mbXQsIDEpOwpAQCAtNzA2LDcgKzcxNCw3IEBACiAJLyogQ29uZmlndXJlIHRoZSBHYWluICAmIG9mZnNldCBjb250cm9sICovCiAJY2NkY19jb25maWdfZ2Fpbl9vZmZzZXQoKTsKIAotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nICV4IHRvIENPTFBUTi4uLlxuIiwgdmFsKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAleCB0byBDT0xQVE4uLi5cbiIsIHZhbCk7CiAKIAkvKiBDb25maWd1cmUgREFUQU9GU1QgIHJlZ2lzdGVyICovCiAJdmFsID0gKGNvbmZpZ19wYXJhbXMtPmRhdGFfb2Zmc2V0Lmhvcnpfb2Zmc2V0ICYgQ0NEQ19EQVRBT0ZTVF9NQVNLKSA8PApAQCAtNzI2LDcgKzczNCw3IEBACiAJCQlDQ0RDX0hTSVpFX1ZBTF9NQVNLOwogCiAJCS8qIGFkanVzdCB0byBtdWx0aXBsZSBvZiAzMiAqLwotCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEhTSVpFLi4uXG4iLAorCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIEhTSVpFLi4uXG4iLAogCQkgICAgICAgKCgocGFyYW1zLT53aW4ud2lkdGgpICsgMzEpID4+IDUpICYKIAkJCUNDRENfSFNJWkVfVkFMX01BU0spOwogCX0gZWxzZSB7CkBAIC03MzQsNyArNzQyLDcgQEAKIAkJdmFsIHw9ICgoKHBhcmFtcy0+d2luLndpZHRoICogMikgKyAzMSkgPj4gNSkgJgogCQkJQ0NEQ19IU0laRV9WQUxfTUFTSzsKIAotCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEhTSVpFLi4uXG4iLAorCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIEhTSVpFLi4uXG4iLAogCQkgICAgICAgKCgocGFyYW1zLT53aW4ud2lkdGggKiAyKSArIDMxKSA+PiA1KSAmCiAJCQlDQ0RDX0hTSVpFX1ZBTF9NQVNLKTsKIAl9CkBAIC03NDUsMzQgKzc1MywzNCBAQAogCQlpZiAocGFyYW1zLT5pbWFnZV9pbnZlcnRfZW5hYmxlKSB7CiAJCQkvKiBGb3IgaW50ZXJsYWNlIGludmVyc2UgbW9kZSAqLwogCQkJcmVndyhDQ0RDX1NET0ZTVF9JTlRFUkxBQ0VfSU5WRVJTRSwgU0RPRlNUKTsKLQkJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nICV4IHRvIFNET0ZTVC4uLlxuIiwKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nICV4IHRvIFNET0ZTVC4uLlxuIiwKIAkJCQlDQ0RDX1NET0ZTVF9JTlRFUkxBQ0VfSU5WRVJTRSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBGb3IgaW50ZXJsYWNlIG5vbiBpbnZlcnNlIG1vZGUgKi8KIAkJCXJlZ3coQ0NEQ19TRE9GU1RfSU5URVJMQUNFX05PUk1BTCwgU0RPRlNUKTsKLQkJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nICV4IHRvIFNET0ZTVC4uLlxuIiwKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nICV4IHRvIFNET0ZTVC4uLlxuIiwKIAkJCQlDQ0RDX1NET0ZTVF9JTlRFUkxBQ0VfTk9STUFMKTsKIAkJfQogCX0gZWxzZSBpZiAocGFyYW1zLT5mcm1fZm10ID09IENDRENfRlJNRk1UX1BST0dSRVNTSVZFKSB7CiAJCWlmIChwYXJhbXMtPmltYWdlX2ludmVydF9lbmFibGUpIHsKIAkJCS8qIEZvciBwcm9nZXNzaXZlIGludmVyc2UgbW9kZSAqLwogCQkJcmVndyhDQ0RDX1NET0ZTVF9QUk9HUkVTU0lWRV9JTlZFUlNFLCBTRE9GU1QpOwotCQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgJXggdG8gU0RPRlNULi4uXG4iLAorCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgJXggdG8gU0RPRlNULi4uXG4iLAogCQkJCUNDRENfU0RPRlNUX1BST0dSRVNTSVZFX0lOVkVSU0UpOwogCQl9IGVsc2UgewogCQkJLyogRm9yIHByb2dlc3NpdmUgbm9uIGludmVyc2UgbW9kZSAqLwogCQkJcmVndyhDQ0RDX1NET0ZTVF9QUk9HUkVTU0lWRV9OT1JNQUwsIFNET0ZTVCk7Ci0JCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAleCB0byBTRE9GU1QuLi5cbiIsCisJCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAleCB0byBTRE9GU1QuLi5cbiIsCiAJCQkJQ0NEQ19TRE9GU1RfUFJPR1JFU1NJVkVfTk9STUFMKTsKIAkJfQogCX0KLQlkZXZfZGJnKGRldiwgIlxuZW5kIG9mIGNjZGNfY29uZmlnX3Jhdy4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5lbmQgb2YgY2NkY19jb25maWdfcmF3Li4uIik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY2NkY19jb25maWd1cmUodm9pZCkKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQogCQlyZXR1cm4gY2NkY19jb25maWdfcmF3KCk7CiAJZWxzZQogCQljY2RjX2NvbmZpZ195Y2JjcigpOwpAQCAtNzgxLDIzICs3ODksMjMgQEAKIAogc3RhdGljIGludCBjY2RjX3NldF9idWZ0eXBlKGVudW0gY2NkY19idWZ0eXBlIGJ1Zl90eXBlKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCWNjZGNfaHdfcGFyYW1zX3Jhdy5idWZfdHlwZSA9IGJ1Zl90eXBlOworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQljY2RjX2NmZy5iYXllci5idWZfdHlwZSA9IGJ1Zl90eXBlOwogCWVsc2UKLQkJY2NkY19od19wYXJhbXNfeWNiY3IuYnVmX3R5cGUgPSBidWZfdHlwZTsKKwkJY2NkY19jZmcueWNiY3IuYnVmX3R5cGUgPSBidWZfdHlwZTsKIAlyZXR1cm4gMDsKIH0KIHN0YXRpYyBlbnVtIGNjZGNfYnVmdHlwZSBjY2RjX2dldF9idWZ0eXBlKHZvaWQpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJcmV0dXJuIGNjZGNfaHdfcGFyYW1zX3Jhdy5idWZfdHlwZTsKLQlyZXR1cm4gY2NkY19od19wYXJhbXNfeWNiY3IuYnVmX3R5cGU7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCXJldHVybiBjY2RjX2NmZy5iYXllci5idWZfdHlwZTsKKwlyZXR1cm4gY2NkY19jZmcueWNiY3IuYnVmX3R5cGU7CiB9CiAKIHN0YXRpYyBpbnQgY2NkY19lbnVtX3BpeCh1MzIgKnBpeCwgaW50IGkpCiB7CiAJaW50IHJldCA9IC1FSU5WQUw7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CiAJCWlmIChpIDwgQVJSQVlfU0laRShjY2RjX3Jhd19iYXllcl9waXhfZm9ybWF0cykpIHsKIAkJCSpwaXggPSBjY2RjX3Jhd19iYXllcl9waXhfZm9ybWF0c1tpXTsKIAkJCXJldCA9IDA7CkBAIC04MTMsMjAgKzgyMSwxOSBAQAogCiBzdGF0aWMgaW50IGNjZGNfc2V0X3BpeGVsX2Zvcm1hdCh1MzIgcGl4Zm10KQogewotCXN0cnVjdCBjY2RjX2FfbGF3ICphbGF3ID0KLQkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zLmFsYXc7CisJc3RydWN0IGNjZGNfYV9sYXcgKmFsYXcgPSAmY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5hbGF3OwogCi0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgewotCQljY2RjX2h3X3BhcmFtc19yYXcucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVzsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCQljY2RjX2NmZy5iYXllci5waXhfZm10ID0gQ0NEQ19QSVhGTVRfUkFXOwogCQlpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9TQkdHUjgpCiAJCQlhbGF3LT5lbmFibGUgPSAxOwogCQllbHNlIGlmIChwaXhmbXQgIT0gVjRMMl9QSVhfRk1UX1NCR0dSMTYpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9IGVsc2UgewogCQlpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9ZVVlWKQotCQkJY2NkY19od19wYXJhbXNfeWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1I7CisJCQljY2RjX2NmZy55Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX1lDQllDUjsKIAkJZWxzZSBpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9VWVZZKQotCQkJY2NkY19od19wYXJhbXNfeWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlk7CisJCQljY2RjX2NmZy55Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWTsKIAkJZWxzZQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtODM0LDE3ICs4NDEsMTYgQEAKIH0KIHN0YXRpYyB1MzIgY2NkY19nZXRfcGl4ZWxfZm9ybWF0KHZvaWQpCiB7Ci0Jc3RydWN0IGNjZGNfYV9sYXcgKmFsYXcgPQotCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXMuYWxhdzsKKwlzdHJ1Y3QgY2NkY19hX2xhdyAqYWxhdyA9ICZjY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zLmFsYXc7CiAJdTMyIHBpeGZtdDsKIAotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCiAJCWlmIChhbGF3LT5lbmFibGUpCiAJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfU0JHR1I4OwogCQllbHNlCiAJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfU0JHR1IxNjsKIAllbHNlIHsKLQkJaWYgKGNjZGNfaHdfcGFyYW1zX3ljYmNyLnBpeF9vcmRlciA9PSBDQ0RDX1BJWE9SREVSX1lDQllDUikKKwkJaWYgKGNjZGNfY2ZnLnljYmNyLnBpeF9vcmRlciA9PSBDQ0RDX1BJWE9SREVSX1lDQllDUikKIAkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9ZVVlWOwogCQllbHNlCiAJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfVVlWWTsKQEAgLTg1Myw1MyArODU5LDUzIEBACiB9CiBzdGF0aWMgaW50IGNjZGNfc2V0X2ltYWdlX3dpbmRvdyhzdHJ1Y3QgdjRsMl9yZWN0ICp3aW4pCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJY2NkY19od19wYXJhbXNfcmF3LndpbiA9ICp3aW47CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWNjZGNfY2ZnLmJheWVyLndpbiA9ICp3aW47CiAJZWxzZQotCQljY2RjX2h3X3BhcmFtc195Y2Jjci53aW4gPSAqd2luOworCQljY2RjX2NmZy55Y2Jjci53aW4gPSAqd2luOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjY2RjX2dldF9pbWFnZV93aW5kb3coc3RydWN0IHY0bDJfcmVjdCAqd2luKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCSp3aW4gPSBjY2RjX2h3X3BhcmFtc19yYXcud2luOworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQkqd2luID0gY2NkY19jZmcuYmF5ZXIud2luOwogCWVsc2UKLQkJKndpbiA9IGNjZGNfaHdfcGFyYW1zX3ljYmNyLndpbjsKKwkJKndpbiA9IGNjZGNfY2ZnLnljYmNyLndpbjsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBjY2RjX2dldF9saW5lX2xlbmd0aCh2b2lkKQogewogCXN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjb25maWdfcGFyYW1zID0KLQkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zOworCQkJCSZjY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zOwogCXVuc2lnbmVkIGludCBsZW47CiAKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKIAkJaWYgKChjb25maWdfcGFyYW1zLT5hbGF3LmVuYWJsZSkgfHwKIAkJICAgIChjb25maWdfcGFyYW1zLT5kYXRhX3N6ID09IENDRENfREFUQV84QklUUykpCi0JCQlsZW4gPSBjY2RjX2h3X3BhcmFtc19yYXcud2luLndpZHRoOworCQkJbGVuID0gY2NkY19jZmcuYmF5ZXIud2luLndpZHRoOwogCQllbHNlCi0JCQlsZW4gPSBjY2RjX2h3X3BhcmFtc19yYXcud2luLndpZHRoICogMjsKKwkJCWxlbiA9IGNjZGNfY2ZnLmJheWVyLndpbi53aWR0aCAqIDI7CiAJfSBlbHNlCi0JCWxlbiA9IGNjZGNfaHdfcGFyYW1zX3ljYmNyLndpbi53aWR0aCAqIDI7CisJCWxlbiA9IGNjZGNfY2ZnLnljYmNyLndpbi53aWR0aCAqIDI7CiAJcmV0dXJuIEFMSUdOKGxlbiwgMzIpOwogfQogCiBzdGF0aWMgaW50IGNjZGNfc2V0X2ZyYW1lX2Zvcm1hdChlbnVtIGNjZGNfZnJtZm10IGZybV9mbXQpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJY2NkY19od19wYXJhbXNfcmF3LmZybV9mbXQgPSBmcm1fZm10OworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQljY2RjX2NmZy5iYXllci5mcm1fZm10ID0gZnJtX2ZtdDsKIAllbHNlCi0JCWNjZGNfaHdfcGFyYW1zX3ljYmNyLmZybV9mbXQgPSBmcm1fZm10OworCQljY2RjX2NmZy55Y2Jjci5mcm1fZm10ID0gZnJtX2ZtdDsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGVudW0gY2NkY19mcm1mbXQgY2NkY19nZXRfZnJhbWVfZm9ybWF0KHZvaWQpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJcmV0dXJuIGNjZGNfaHdfcGFyYW1zX3Jhdy5mcm1fZm10OworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gY2NkY19jZmcuYmF5ZXIuZnJtX2ZtdDsKIAllbHNlCi0JCXJldHVybiBjY2RjX2h3X3BhcmFtc195Y2Jjci5mcm1fZm10OworCQlyZXR1cm4gY2NkY19jZmcueWNiY3IuZnJtX2ZtdDsKIH0KIAogc3RhdGljIGludCBjY2RjX2dldGZpZCh2b2lkKQpAQCAtOTE2LDE0ICs5MjIsMTQgQEAKIAogc3RhdGljIGludCBjY2RjX3NldF9od19pZl9wYXJhbXMoc3RydWN0IHZwZmVfaHdfaWZfcGFyYW0gKnBhcmFtcykKIHsKLQljY2RjX2lmX3R5cGUgPSBwYXJhbXMtPmlmX3R5cGU7CisJY2NkY19jZmcuaWZfdHlwZSA9IHBhcmFtcy0+aWZfdHlwZTsKIAogCXN3aXRjaCAocGFyYW1zLT5pZl90eXBlKSB7CiAJY2FzZSBWUEZFX0JUNjU2OgogCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzE2OgogCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzg6Ci0JCWNjZGNfaHdfcGFyYW1zX3ljYmNyLnZkX3BvbCA9IHBhcmFtcy0+dmRwb2w7Ci0JCWNjZGNfaHdfcGFyYW1zX3ljYmNyLmhkX3BvbCA9IHBhcmFtcy0+aGRwb2w7CisJCWNjZGNfY2ZnLnljYmNyLnZkX3BvbCA9IHBhcmFtcy0+dmRwb2w7CisJCWNjZGNfY2ZnLnljYmNyLmhkX3BvbCA9IHBhcmFtcy0+aGRwb2w7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIFRPRE8gYWRkIHN1cHBvcnQgZm9yIHJhdyBiYXllciBoZXJlICovCkBAIC05MzgsNyArOTQ0LDYgQEAKIAkuaHdfb3BzID0gewogCQkub3BlbiA9IGNjZGNfb3BlbiwKIAkJLmNsb3NlID0gY2NkY19jbG9zZSwKLQkJLnNldF9jY2RjX2Jhc2UgPSBjY2RjX3NldF9jY2RjX2Jhc2UsCiAJCS5lbmFibGUgPSBjY2RjX2VuYWJsZSwKIAkJLmVuYWJsZV9vdXRfdG9fc2RyYW0gPSBjY2RjX2VuYWJsZV9vdXRwdXRfdG9fc2RyYW0sCiAJCS5zZXRfaHdfaWZfcGFyYW1zID0gY2NkY19zZXRfaHdfaWZfcGFyYW1zLApAQCAtOTU5LDE5ICs5NjQsMTE4IEBACiAJfSwKIH07CiAKK3N0YXRpYyBpbnQgX19pbml0IGRtMzU1X2NjZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwl2b2lkICgqc2V0dXBfcGlubXV4KSh2b2lkKTsKKwlzdHJ1Y3QgcmVzb3VyY2UJKnJlczsKKwlpbnQgc3RhdHVzID0gMDsKKworCS8qCisJICogZmlyc3QgdHJ5IHRvIHJlZ2lzdGVyIHdpdGggdnBmZS4gSWYgbm90IGNvcnJlY3QgcGxhdGZvcm0sIHRoZW4gd2UKKwkgKiBkb24ndCBoYXZlIHRvIGlvbWFwCisJICovCisJc3RhdHVzID0gdnBmZV9yZWdpc3Rlcl9jY2RjX2RldmljZSgmY2NkY19od19kZXYpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfbm9yZXM7CisJfQorCisJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcmVzLT5uYW1lKTsKKwlpZiAoIXJlcykgeworCQlzdGF0dXMgPSAtRUJVU1k7CisJCWdvdG8gZmFpbF9ub3JlczsKKwl9CisKKwljY2RjX2NmZy5iYXNlX2FkZHIgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIWNjZGNfY2ZnLmJhc2VfYWRkcikgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfbm9tZW07CisJfQorCisJLyogR2V0IGFuZCBlbmFibGUgTWFzdGVyIGNsb2NrICovCisJY2NkY19jZmcubWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1hc3RlciIpOworCWlmIChJU19FUlIoY2NkY19jZmcubWNsaykpIHsKKwkJc3RhdHVzID0gUFRSX0VSUihjY2RjX2NmZy5tY2xrKTsKKwkJZ290byBmYWlsX25vbWFwOworCX0KKwlpZiAoY2xrX2VuYWJsZShjY2RjX2NmZy5tY2xrKSkgeworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfbWNsazsKKwl9CisKKwkvKiBHZXQgYW5kIGVuYWJsZSBTbGF2ZSBjbG9jayAqLworCWNjZGNfY2ZnLnNjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJzbGF2ZSIpOworCWlmIChJU19FUlIoY2NkY19jZmcuc2NsaykpIHsKKwkJc3RhdHVzID0gUFRSX0VSUihjY2RjX2NmZy5zY2xrKTsKKwkJZ290byBmYWlsX21jbGs7CisJfQorCWlmIChjbGtfZW5hYmxlKGNjZGNfY2ZnLnNjbGspKSB7CisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9zY2xrOworCX0KKworCS8qIFBsYXRmb3JtIGRhdGEgaG9sZHMgc2V0dXBfcGlubXV4IGZ1bmN0aW9uIHB0ciAqLworCWlmIChOVUxMID09IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9zY2xrOworCX0KKwlzZXR1cF9waW5tdXggPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwkvKgorCSAqIHNldHVwIE11eCBjb25maWd1cmF0aW9uIGZvciBjY2RjIHdoaWNoIG1heSBiZSBkaWZmZXJlbnQgZm9yCisJICogZGlmZmVyZW50IFNvQ3MgdXNpbmcgdGhpcyBDQ0RDCisJICovCisJc2V0dXBfcGlubXV4KCk7CisJY2NkY19jZmcuZGV2ID0gJnBkZXYtPmRldjsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIiVzIGlzIHJlZ2lzdGVyZWQgd2l0aCB2cGZlLlxuIiwgY2NkY19od19kZXYubmFtZSk7CisJcmV0dXJuIDA7CitmYWlsX3NjbGs6CisJY2xrX3B1dChjY2RjX2NmZy5zY2xrKTsKK2ZhaWxfbWNsazoKKwljbGtfcHV0KGNjZGNfY2ZnLm1jbGspOworZmFpbF9ub21hcDoKKwlpb3VubWFwKGNjZGNfY2ZnLmJhc2VfYWRkcik7CitmYWlsX25vbWVtOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZmFpbF9ub3JlczoKKwl2cGZlX3VucmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGRtMzU1X2NjZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlCSpyZXM7CisKKwljbGtfcHV0KGNjZGNfY2ZnLm1jbGspOworCWNsa19wdXQoY2NkY19jZmcuc2Nsayk7CisJaW91bm1hcChjY2RjX2NmZy5iYXNlX2FkZHIpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHJlcykKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRtMzU1X2NjZGNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImRtMzU1X2NjZGMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChkbTM1NV9jY2RjX3JlbW92ZSksCisJLnByb2JlID0gZG0zNTVfY2NkY19wcm9iZSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGRtMzU1X2NjZGNfaW5pdCh2b2lkKQogewotCXByaW50ayhLRVJOX05PVElDRSAiZG0zNTVfY2NkY19pbml0XG4iKTsKLQlpZiAodnBmZV9yZWdpc3Rlcl9jY2RjX2RldmljZSgmY2NkY19od19kZXYpIDwgMCkKLQkJcmV0dXJuIC0xOwotCXByaW50ayhLRVJOX05PVElDRSAiJXMgaXMgcmVnaXN0ZXJlZCB3aXRoIHZwZmUuXG4iLAotCQljY2RjX2h3X2Rldi5uYW1lKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZkbTM1NV9jY2RjX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBkbTM1NV9jY2RjX2V4aXQodm9pZCkKIHsKLQl2cGZlX3VucmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZG0zNTVfY2NkY19kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChkbTM1NV9jY2RjX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2RtNjQ0eF9jY2RjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG02NDR4X2NjZGMuYwppbmRleCBkNWZhMTkzLi4wYzM5NGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG02NDR4X2NjZGMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvZG02NDR4X2NjZGMuYwpAQCAtMzcsOCArMzcsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKICNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL2RtNjQ0eF9jY2RjLmg+CiAjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS92cHNzLmg+CisKICNpbmNsdWRlICJkbTY0NHhfY2NkY19yZWdzLmgiCiAjaW5jbHVkZSAiY2NkY19od19kZXZpY2UuaCIKIApAQCAtNDYsMzIgKzUwLDQ0IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkNDREMgRHJpdmVyIGZvciBETTY0NDYiKTsKIE1PRFVMRV9BVVRIT1IoIlRleGFzIEluc3RydW1lbnRzIik7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0KLS8qIE9iamVjdCBmb3IgQ0NEQyByYXcgbW9kZSAqLwotc3RhdGljIHN0cnVjdCBjY2RjX3BhcmFtc19yYXcgY2NkY19od19wYXJhbXNfcmF3ID0gewotCS5waXhfZm10ID0gQ0NEQ19QSVhGTVRfUkFXLAotCS5mcm1fZm10ID0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUsCi0JLndpbiA9IENDRENfV0lOX1ZHQSwKLQkuZmlkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS52ZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkuaGRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLmNvbmZpZ19wYXJhbXMgPSB7Ci0JCS5kYXRhX3N6ID0gQ0NEQ19EQVRBXzEwQklUUywKK3N0YXRpYyBzdHJ1Y3QgY2NkY19vcGVyX2NvbmZpZyB7CisJc3RydWN0IGRldmljZSAqZGV2OworCS8qIENDREMgaW50ZXJmYWNlIHR5cGUgKi8KKwllbnVtIHZwZmVfaHdfaWZfdHlwZSBpZl90eXBlOworCS8qIFJhdyBCYXllciBjb25maWd1cmF0aW9uICovCisJc3RydWN0IGNjZGNfcGFyYW1zX3JhdyBiYXllcjsKKwkvKiBZQ2JDciBjb25maWd1cmF0aW9uICovCisJc3RydWN0IGNjZGNfcGFyYW1zX3ljYmNyIHljYmNyOworCS8qIE1hc3RlciBjbG9jayAqLworCXN0cnVjdCBjbGsgKm1jbGs7CisJLyogc2xhdmUgY2xvY2sgKi8KKwlzdHJ1Y3QgY2xrICpzY2xrOworCS8qIGNjZGMgYmFzZSBhZGRyZXNzICovCisJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7Cit9IGNjZGNfY2ZnID0geworCS8qIFJhdyBjb25maWd1cmF0aW9ucyAqLworCS5iYXllciA9IHsKKwkJLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVcsCisJCS5mcm1fZm10ID0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUsCisJCS53aW4gPSBDQ0RDX1dJTl9WR0EsCisJCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS52ZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuY29uZmlnX3BhcmFtcyA9IHsKKwkJCS5kYXRhX3N6ID0gQ0NEQ19EQVRBXzEwQklUUywKKwkJfSwKIAl9LAotfTsKLQotLyogT2JqZWN0IGZvciBDQ0RDIHljYmNyIG1vZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgY2NkY19od19wYXJhbXNfeWNiY3IgPSB7Ci0JLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9ZQ0JDUl84QklULAotCS5mcm1fZm10ID0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCwKLQkud2luID0gQ0NEQ19XSU5fUEFMLAotCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCi0JLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAotCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKLQkuYnQ2NTZfZW5hYmxlID0gMSwKLQkucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlksCi0JLmJ1Zl90eXBlID0gQ0NEQ19CVUZUWVBFX0ZMRF9JTlRFUkxFQVZFRAorCS55Y2JjciA9IHsKKwkJLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9ZQ0JDUl84QklULAorCQkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX0lOVEVSTEFDRUQsCisJCS53aW4gPSBDQ0RDX1dJTl9QQUwsCisJCS5maWRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS52ZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuYnQ2NTZfZW5hYmxlID0gMSwKKwkJLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZLAorCQkuYnVmX3R5cGUgPSBDQ0RDX0JVRlRZUEVfRkxEX0lOVEVSTEVBVkVECisJfSwKIH07CiAKICNkZWZpbmUgQ0NEQ19NQVhfUkFXX1lVVl9GT1JNQVRTCTIKQEAgLTg0LDI1ICsxMDAsMTUgQEAKIHN0YXRpYyB1MzIgY2NkY19yYXdfeXV2X3BpeF9mb3JtYXRzW10gPQogCXtWNEwyX1BJWF9GTVRfVVlWWSwgVjRMMl9QSVhfRk1UX1lVWVZ9OwogCi1zdGF0aWMgdm9pZCAqX19pb21lbSBjY2RjX2Jhc2VfYWRkcjsKLXN0YXRpYyBpbnQgY2NkY19hZGRyX3NpemU7Ci1zdGF0aWMgZW51bSB2cGZlX2h3X2lmX3R5cGUgY2NkY19pZl90eXBlOwotCiAvKiByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMgKi8KIHN0YXRpYyBpbmxpbmUgdTMyIHJlZ3IodTMyIG9mZnNldCkKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGwoY2NkY19iYXNlX2FkZHIgKyBvZmZzZXQpOworCXJldHVybiBfX3Jhd19yZWFkbChjY2RjX2NmZy5iYXNlX2FkZHIgKyBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVndyh1MzIgdmFsLCB1MzIgb2Zmc2V0KQogewotCV9fcmF3X3dyaXRlbCh2YWwsIGNjZGNfYmFzZV9hZGRyICsgb2Zmc2V0KTsKLX0KLQotc3RhdGljIHZvaWQgY2NkY19zZXRfY2NkY19iYXNlKHZvaWQgKmFkZHIsIGludCBzaXplKQotewotCWNjZGNfYmFzZV9hZGRyID0gYWRkcjsKLQljY2RjX2FkZHJfc2l6ZSA9IHNpemU7CisJX19yYXdfd3JpdGVsKHZhbCwgY2NkY19jZmcuYmFzZV9hZGRyICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIHZvaWQgY2NkY19lbmFibGUoaW50IGZsYWcpCkBAIC0xMzIsNyArMTM4LDcgQEAKIAlpbnQgdmVydF9zdGFydCwgdmVydF9ucl9saW5lczsKIAlpbnQgdmFsID0gMCwgbWlkX2ltZyA9IDA7CiAKLQlkZXZfZGJnKGRldiwgIlxuU3RhcnRpbmcgY2NkY19zZXR3aW4uLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuU3RhcnRpbmcgY2NkY19zZXR3aW4uLi4iKTsKIAkvKgogCSAqIHBwYyAtIHBlciBwaXhlbCBjb3VudC4gaW5kaWNhdGVzIGhvdyBtYW55IHBpeGVscyBwZXIgY2VsbAogCSAqIG91dHB1dCB0byBTRFJBTS4gZXhhbXBsZSwgZm9yIHljYmNyLCBpdCBpcyBvbmUgeSBhbmQgb25lIGMsIHNvIDIuCkBAIC0xNzEsNyArMTc3LDcgQEAKIAlyZWd3KCh2ZXJ0X3N0YXJ0IDw8IENDRENfVkVSVF9TVEFSVF9TTFYwX1NISUZUKSB8IHZlcnRfc3RhcnQsCiAJICAgICBDQ0RDX1ZFUlRfU1RBUlQpOwogCXJlZ3codmVydF9ucl9saW5lcywgQ0NEQ19WRVJUX0xJTkVTKTsKLQlkZXZfZGJnKGRldiwgIlxuRW5kIG9mIGNjZGNfc2V0d2luLi4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbkVuZCBvZiBjY2RjX3NldHdpbi4uLiIpOwogfQogCiBzdGF0aWMgdm9pZCBjY2RjX3JlYWRyZWdzKHZvaWQpCkBAIC0xNzksMzkgKzE4NSwzOSBAQAogCXVuc2lnbmVkIGludCB2YWwgPSAwOwogCiAJdmFsID0gcmVncihDQ0RDX0FMQVcpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gQUxBVy4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIEFMQVcuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0NMQU1QKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIENMQU1QLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gQ0xBTVAuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0RDU1VCKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIERDU1VCLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRENTVUIuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0JMS0NNUCk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBCTEtDTVAuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBCTEtDTVAuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0ZQQ19BRERSKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZQQ19BRERSLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRlBDX0FERFIuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0ZQQyk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBGUEMuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBGUEMuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0ZNVENGRyk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBGTVRDRkcuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBGTVRDRkcuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0NPTFBUTik7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBDT0xQVE4uLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBDT0xQVE4uLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0ZNVF9IT1JaKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZNVF9IT1JaLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRk1UX0hPUlouLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0ZNVF9WRVJUKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIEZNVF9WRVJULi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gRk1UX1ZFUlQuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0hTSVpFX09GRik7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBIU0laRV9PRkYuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBIU0laRV9PRkYuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX1NET0ZTVCk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBTRE9GU1QuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBTRE9GU1QuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX1ZQX09VVCk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBWUF9PVVQuLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBWUF9PVVQuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX1NZTl9NT0RFKTsKLQlkZXZfbm90aWNlKGRldiwgIlxuUmVhZGluZyAweCV4IHRvIFNZTl9NT0RFLi4uXG4iLCB2YWwpOworCWRldl9ub3RpY2UoY2NkY19jZmcuZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gU1lOX01PREUuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX0hPUlpfSU5GTyk7Ci0JZGV2X25vdGljZShkZXYsICJcblJlYWRpbmcgMHgleCB0byBIT1JaX0lORk8uLi5cbiIsIHZhbCk7CisJZGV2X25vdGljZShjY2RjX2NmZy5kZXYsICJcblJlYWRpbmcgMHgleCB0byBIT1JaX0lORk8uLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX1ZFUlRfU1RBUlQpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gVkVSVF9TVEFSVC4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIFZFUlRfU1RBUlQuLi5cbiIsIHZhbCk7CiAJdmFsID0gcmVncihDQ0RDX1ZFUlRfTElORVMpOwotCWRldl9ub3RpY2UoZGV2LCAiXG5SZWFkaW5nIDB4JXggdG8gVkVSVF9MSU5FUy4uLlxuIiwgdmFsKTsKKwlkZXZfbm90aWNlKGNjZGNfY2ZnLmRldiwgIlxuUmVhZGluZyAweCV4IHRvIFZFUlRfTElORVMuLi5cbiIsIHZhbCk7CiB9CiAKIHN0YXRpYyBpbnQgdmFsaWRhdGVfY2NkY19wYXJhbShzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY2NkY3BhcmFtKQpAQCAtMjIwLDcgKzIyNiw3IEBACiAJCWlmICgoY2NkY3BhcmFtLT5hbGF3LmdhbWFfd2QgPiBDQ0RDX0dBTU1BX0JJVFNfMDlfMCkgfHwKIAkJICAgIChjY2RjcGFyYW0tPmFsYXcuZ2FtYV93ZCA8IENDRENfR0FNTUFfQklUU18xNV82KSB8fAogCQkgICAgKGNjZGNwYXJhbS0+YWxhdy5nYW1hX3dkIDwgY2NkY3BhcmFtLT5kYXRhX3N6KSkgewotCQkJZGV2X2RiZyhkZXYsICJcbkludmFsaWQgZGF0YSBsaW5lIHNlbGVjdCIpOworCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbkludmFsaWQgZGF0YSBsaW5lIHNlbGVjdCIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJfQpAQCAtMjMwLDcgKzIzNiw3IEBACiBzdGF0aWMgaW50IGNjZGNfdXBkYXRlX3Jhd19wYXJhbXMoc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKnJhd19wYXJhbXMpCiB7CiAJc3RydWN0IGNjZGNfY29uZmlnX3BhcmFtc19yYXcgKmNvbmZpZ19wYXJhbXMgPQotCQkmY2NkY19od19wYXJhbXNfcmF3LmNvbmZpZ19wYXJhbXM7CisJCQkJJmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXM7CiAJdW5zaWduZWQgaW50ICpmcGNfdmlydGFkZHIgPSBOVUxMOwogCXVuc2lnbmVkIGludCAqZnBjX3BoeXNhZGRyID0gTlVMTDsKIApAQCAtMjY2LDcgKzI3Miw3IEBACiAJCQkJCQkJIEZQX05VTV9CWVRFUykpOwogCiAJCWlmIChmcGNfdmlydGFkZHIgPT0gTlVMTCkgewotCQkJZGV2X2RiZyhkZXYsCisJCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwKIAkJCQkiXG5VbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBGUEMiKTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CkBAIC0yNzksNyArMjg1LDcgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoZnBjX3ZpcnRhZGRyLAogCQkJKHZvaWQgX191c2VyICopcmF3X3BhcmFtcy0+ZmF1bHRfcHhsLmZwY190YWJsZV9hZGRyLAogCQkJY29uZmlnX3BhcmFtcy0+ZmF1bHRfcHhsLmZwX251bSAqIEZQX05VTV9CWVRFUykpIHsKLQkJZGV2X2RiZyhkZXYsICJcbiBjb3B5X2Zyb21fdXNlciBmYWlsZWQiKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbiBjb3B5X2Zyb21fdXNlciBmYWlsZWQiKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCWNvbmZpZ19wYXJhbXMtPmZhdWx0X3B4bC5mcGNfdGFibGVfYWRkciA9ICh1bnNpZ25lZCBpbnQpZnBjX3BoeXNhZGRyOwpAQCAtMjg5LDcgKzI5NSw3IEBACiBzdGF0aWMgaW50IGNjZGNfY2xvc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjb25maWdfcGFyYW1zID0KLQkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zOworCQkJCSZjY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zOwogCXVuc2lnbmVkIGludCAqZnBjX3BoeXNhZGRyID0gTlVMTCwgKmZwY192aXJ0YWRkciA9IE5VTEw7CiAKIAlmcGNfcGh5c2FkZHIgPSAodW5zaWduZWQgaW50ICopY29uZmlnX3BhcmFtcy0+ZmF1bHRfcHhsLmZwY190YWJsZV9hZGRyOwpAQCAtMzIzLDkgKzMyOSw4IEBACiAKIHN0YXRpYyBpbnQgY2NkY19vcGVuKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKLQlkZXYgPSBkZXZpY2U7CiAJY2NkY19yZXN0b3JlX2RlZmF1bHRzKCk7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKIAkJY2NkY19lbmFibGVfdnBvcnQoMSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zNDEsMTIgKzM0NiwxMiBAQAogCXN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3IGNjZGNfcmF3X3BhcmFtczsKIAlpbnQgeDsKIAotCWlmIChjY2RjX2lmX3R5cGUgIT0gVlBGRV9SQVdfQkFZRVIpCisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgIT0gVlBGRV9SQVdfQkFZRVIpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJeCA9IGNvcHlfZnJvbV91c2VyKCZjY2RjX3Jhd19wYXJhbXMsIHBhcmFtcywgc2l6ZW9mKGNjZGNfcmF3X3BhcmFtcykpOwogCWlmICh4KSB7Ci0JCWRldl9kYmcoZGV2LCAiY2NkY19zZXRfcGFyYW1zOiBlcnJvciBpbiBjb3B5aW5nIgorCQlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgImNjZGNfc2V0X3BhcmFtczogZXJyb3IgaW4gY29weWluZyIKIAkJCSAgICJjY2RjIHBhcmFtcywgJWRcbiIsIHgpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC0zNjQsMTAgKzM2OSwxMCBAQAogICovCiB2b2lkIGNjZGNfY29uZmlnX3ljYmNyKHZvaWQpCiB7Ci0Jc3RydWN0IGNjZGNfcGFyYW1zX3ljYmNyICpwYXJhbXMgPSAmY2NkY19od19wYXJhbXNfeWNiY3I7CisJc3RydWN0IGNjZGNfcGFyYW1zX3ljYmNyICpwYXJhbXMgPSAmY2NkY19jZmcueWNiY3I7CiAJdTMyIHN5bl9tb2RlOwogCi0JZGV2X2RiZyhkZXYsICJcblN0YXJ0aW5nIGNjZGNfY29uZmlnX3ljYmNyLi4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcblN0YXJ0aW5nIGNjZGNfY29uZmlnX3ljYmNyLi4uIik7CiAJLyoKIAkgKiBmaXJzdCByZXN0b3JlIHRoZSBDQ0RDIHJlZ2lzdGVycyB0byBkZWZhdWx0IHZhbHVlcwogCSAqIFRoaXMgaXMgaW1wb3J0YW50IHNpbmNlIHdlIGFzc3VtZSBkZWZhdWx0IHZhbHVlcyB0byBiZSBzZXQgaW4KQEAgLTQyOCw3ICs0MzMsNyBAQAogCQlyZWd3KENDRENfU0RPRlNUX0ZJRUxEX0lOVEVSTEVBVkVELCBDQ0RDX1NET0ZTVCk7CiAKIAljY2RjX3NibF9yZXNldCgpOwotCWRldl9kYmcoZGV2LCAiXG5FbmQgb2YgY2NkY19jb25maWdfeWNiY3IuLi5cbiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5FbmQgb2YgY2NkY19jb25maWdfeWNiY3IuLi5cbiIpOwogCWNjZGNfcmVhZHJlZ3MoKTsKIH0KIApAQCAtNDQwLDkgKzQ0NSw5IEBACiAJCS8qIGNvbmZpZ3VyZSBEQ1N1YiAqLwogCQl2YWwgPSAoYmNsYW1wLT5kY19zdWIpICYgQ0NEQ19CTEtfRENfU1VCX01BU0s7CiAJCXJlZ3codmFsLCBDQ0RDX0RDU1VCKTsKLQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBEQ1NVQi4uLlxuIiwgdmFsKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBEQ1NVQi4uLlxuIiwgdmFsKTsKIAkJcmVndyhDQ0RDX0NMQU1QX0RFRkFVTFRfVkFMLCBDQ0RDX0NMQU1QKTsKLQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgwMDAwIHRvIENMQU1QLi4uXG4iKTsKKwkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgwMDAwIHRvIENMQU1QLi4uXG4iKTsKIAkJcmV0dXJuOwogCX0KIAkvKgpAQCAtNDU3LDEwICs0NjIsMTAgQEAKIAkgICAgICAgKChiY2xhbXAtPnNhbXBsZV9waXhlbCAmIENDRENfQkxLX1NBTVBMRV9MTl9NQVNLKSA8PAogCQlDQ0RDX0JMS19TQU1QTEVfTE5fU0hJRlQpIHwgQ0NEQ19CTEtfQ0xBTVBfRU5BQkxFKTsKIAlyZWd3KHZhbCwgQ0NEQ19DTEFNUCk7Ci0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBDTEFNUC4uLlxuIiwgdmFsKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIENMQU1QLi4uXG4iLCB2YWwpOwogCS8qIElmIEJsYWNrIGNsYW1waW5nIGlzIGVuYWJsZSB0aGVuIG1ha2UgZGNzdWIgMCAqLwogCXJlZ3coQ0NEQ19EQ1NVQl9ERUZBVUxUX1ZBTCwgQ0NEQ19EQ1NVQik7Ci0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgwMDAwMDAwMCB0byBEQ1NVQi4uLlxuIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgwMDAwMDAwMCB0byBEQ1NVQi4uLlxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGNjZGNfY29uZmlnX2JsYWNrX2NvbXBlbnNlKHN0cnVjdCBjY2RjX2JsYWNrX2NvbXBlbnNhdGlvbiAqYmNvbXApCkBAIC00OTAsMTcgKzQ5NSwxNyBAQAogCiAJLyogQ29uZmlndXJlIEZhdWx0IHBpeGVsIGlmIG5lZWRlZCAqLwogCXJlZ3coZnBjLT5mcGNfdGFibGVfYWRkciwgQ0NEQ19GUENfQUREUik7Ci0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBGUENfQUREUi4uLlxuIiwKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZQQ19BRERSLi4uXG4iLAogCQkgICAgICAgKGZwYy0+ZnBjX3RhYmxlX2FkZHIpKTsKIAkvKiBXcml0ZSB0aGUgRlBDIHBhcmFtcyB3aXRoIEZQQyBkaXNhYmxlICovCiAJdmFsID0gZnBjLT5mcF9udW0gJiBDQ0RDX0ZQQ19GUENfTlVNX01BU0s7CiAJcmVndyh2YWwsIENDRENfRlBDKTsKIAotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRlBDLi4uXG4iLCB2YWwpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRlBDLi4uXG4iLCB2YWwpOwogCS8qIHJlYWQgdGhlIEZQQyByZWdpc3RlciAqLwogCXZhbCA9IHJlZ3IoQ0NEQ19GUEMpIHwgQ0NEQ19GUENfRU5BQkxFOwogCXJlZ3codmFsLCBDQ0RDX0ZQQyk7Ci0JZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgleCB0byBGUEMuLi5cbiIsIHZhbCk7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBGUEMuLi5cbiIsIHZhbCk7CiB9CiAKIC8qCkBAIC01MDksMTMgKzUxNCwxMyBAQAogICovCiB2b2lkIGNjZGNfY29uZmlnX3Jhdyh2b2lkKQogewotCXN0cnVjdCBjY2RjX3BhcmFtc19yYXcgKnBhcmFtcyA9ICZjY2RjX2h3X3BhcmFtc19yYXc7CisJc3RydWN0IGNjZGNfcGFyYW1zX3JhdyAqcGFyYW1zID0gJmNjZGNfY2ZnLmJheWVyOwogCXN0cnVjdCBjY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjb25maWdfcGFyYW1zID0KLQkJJmNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zOworCQkJCSZjY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zOwogCXVuc2lnbmVkIGludCBzeW5fbW9kZSA9IDA7CiAJdW5zaWduZWQgaW50IHZhbDsKIAotCWRldl9kYmcoZGV2LCAiXG5TdGFydGluZyBjY2RjX2NvbmZpZ19yYXcuLi4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuU3RhcnRpbmcgY2NkY19jb25maWdfcmF3Li4uIik7CiAKIAkvKiAgICAgIFJlc2V0IENDREMgKi8KIAljY2RjX3Jlc3RvcmVfZGVmYXVsdHMoKTsKQEAgLTU0NSw3ICs1NTAsNyBAQAogCQl2YWwgPSAoKGNvbmZpZ19wYXJhbXMtPmFsYXcuZ2FtYV93ZCAmCiAJCSAgICAgIENDRENfQUxBV19HQU1BX1dEX01BU0spIHwgQ0NEQ19BTEFXX0VOQUJMRSk7CiAJCXJlZ3codmFsLCBDQ0RDX0FMQVcpOwotCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEFMQVcuLi5cbiIsIHZhbCk7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gQUxBVy4uLlxuIiwgdmFsKTsKIAl9CiAKIAkvKiBDb25maWd1cmUgdmlkZW8gd2luZG93ICovCkBAIC01ODIsMTEgKzU4NywxMSBAQAogCS8qIFdyaXRlIHZhbHVlIGluIEZNVENGRyAqLwogCXJlZ3codmFsLCBDQ0RDX0ZNVENGRyk7CiAKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZNVENGRy4uLlxuIiwgdmFsKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZNVENGRy4uLlxuIiwgdmFsKTsKIAkvKiBDb25maWd1cmUgdGhlIGNvbG9yIHBhdHRlcm4gYWNjb3JkaW5nIHRvIG10OXQwMDEgc2Vuc29yICovCiAJcmVndyhDQ0RDX0NPTFBUTl9WQUwsIENDRENfQ09MUFROKTsKIAotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4QkIxMUJCMTEgdG8gQ09MUFROLi4uXG4iKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweEJCMTFCQjExIHRvIENPTFBUTi4uLlxuIik7CiAJLyoKIAkgKiBDb25maWd1cmUgRGF0YSBmb3JtYXR0ZXIoVmlkZW8gcG9ydCkgcGl4ZWwgc2VsZWN0aW9uCiAJICogKEZNVF9IT1JaLCBGTVRfVkVSVCkKQEAgLTU5Niw3ICs2MDEsNyBAQAogCSAgICAgIChwYXJhbXMtPndpbi53aWR0aCAmIENDRENfRk1UX0hPUlpfRk1UTE5IX01BU0spOwogCXJlZ3codmFsLCBDQ0RDX0ZNVF9IT1JaKTsKIAotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRk1UX0hPUlouLi5cbiIsIHZhbCk7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgleCB0byBGTVRfSE9SWi4uLlxuIiwgdmFsKTsKIAl2YWwgPSAocGFyYW1zLT53aW4udG9wICYgQ0NEQ19GTVRfVkVSVF9GTVRTTFZfTUFTSykKIAkgICAgPDwgQ0NEQ19GTVRfVkVSVF9GTVRTTFZfU0hJRlQ7CiAJaWYgKHBhcmFtcy0+ZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSkKQEAgLTYwNCwxMyArNjA5LDEzIEBACiAJZWxzZQogCQl2YWwgfD0gKHBhcmFtcy0+d2luLmhlaWdodCA+PiAxKSAmIENDRENfRk1UX1ZFUlRfRk1UTE5WX01BU0s7CiAKLQlkZXZfZGJnKGRldiwgIlxucGFyYW1zLT53aW4uaGVpZ2h0ICAweCV4IC4uLlxuIiwKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxucGFyYW1zLT53aW4uaGVpZ2h0ICAweCV4IC4uLlxuIiwKIAkgICAgICAgcGFyYW1zLT53aW4uaGVpZ2h0KTsKIAlyZWd3KHZhbCwgQ0NEQ19GTVRfVkVSVCk7CiAKLQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweCV4IHRvIEZNVF9WRVJULi4uXG4iLCB2YWwpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gRk1UX1ZFUlQuLi5cbiIsIHZhbCk7CiAKLQlkZXZfZGJnKGRldiwgIlxuYmVsb3cgcmVndyh2YWwsIEZNVF9WRVJUKS4uLiIpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5iZWxvdyByZWd3KHZhbCwgRk1UX1ZFUlQpLi4uIik7CiAKIAkvKgogCSAqIENvbmZpZ3VyZSBIb3Jpem9udGFsIG9mZnNldCByZWdpc3Rlci4gSWYgcGFjayA4IGlzIGVuYWJsZWQgdGhlbgpAQCAtNjMxLDE3ICs2MzYsMTcgQEAKIAkJaWYgKHBhcmFtcy0+aW1hZ2VfaW52ZXJ0X2VuYWJsZSkgewogCQkJLyogRm9yIGludGVsYWNlIGludmVyc2UgbW9kZSAqLwogCQkJcmVndyhDQ0RDX0lOVEVSTEFDRURfSU1BR0VfSU5WRVJULCBDQ0RDX1NET0ZTVCk7Ci0JCQlkZXZfZGJnKGRldiwgIlxuV3JpdGluZyAweDRCNkQgdG8gU0RPRlNULi4uXG4iKTsKKwkJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4NEI2RCB0byBTRE9GU1QuLlxuIik7CiAJCX0KIAogCQllbHNlIHsKIAkJCS8qIEZvciBpbnRlbGFjZSBub24gaW52ZXJzZSBtb2RlICovCiAJCQlyZWd3KENDRENfSU5URVJMQUNFRF9OT19JTUFHRV9JTlZFUlQsIENDRENfU0RPRlNUKTsKLQkJCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4MDI0OSB0byBTRE9GU1QuLi5cbiIpOworCQkJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbldyaXRpbmcgMHgwMjQ5IHRvIFNET0ZTVC4uXG4iKTsKIAkJfQogCX0gZWxzZSBpZiAocGFyYW1zLT5mcm1fZm10ID09IENDRENfRlJNRk1UX1BST0dSRVNTSVZFKSB7CiAJCXJlZ3coQ0NEQ19QUk9HUkVTU0lWRV9OT19JTUFHRV9JTlZFUlQsIENDRENfU0RPRlNUKTsKLQkJZGV2X2RiZyhkZXYsICJcbldyaXRpbmcgMHgwMDAwIHRvIFNET0ZTVC4uLlxuIik7CisJCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4MDAwMCB0byBTRE9GU1QuLi5cbiIpOwogCX0KIAogCS8qCkBAIC02NjIsMTggKzY2NywxOCBAQAogCXZhbCB8PSAocGFyYW1zLT53aW4ubGVmdCkgJiBDQ0RDX1ZQX09VVF9IT1JaX1NUX01BU0s7CiAJcmVndyh2YWwsIENDRENfVlBfT1VUKTsKIAotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gVlBfT1VULi4uXG4iLCB2YWwpOworCWRldl9kYmcoY2NkY19jZmcuZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gVlBfT1VULi4uXG4iLCB2YWwpOwogCXJlZ3coc3luX21vZGUsIENDRENfU1lOX01PREUpOwotCWRldl9kYmcoZGV2LCAiXG5Xcml0aW5nIDB4JXggdG8gU1lOX01PREUuLi5cbiIsIHN5bl9tb2RlKTsKKwlkZXZfZGJnKGNjZGNfY2ZnLmRldiwgIlxuV3JpdGluZyAweCV4IHRvIFNZTl9NT0RFLi4uXG4iLCBzeW5fbW9kZSk7CiAKIAljY2RjX3NibF9yZXNldCgpOwotCWRldl9kYmcoZGV2LCAiXG5lbmQgb2YgY2NkY19jb25maWdfcmF3Li4uIik7CisJZGV2X2RiZyhjY2RjX2NmZy5kZXYsICJcbmVuZCBvZiBjY2RjX2NvbmZpZ19yYXcuLi4iKTsKIAljY2RjX3JlYWRyZWdzKCk7CiB9CiAKIHN0YXRpYyBpbnQgY2NkY19jb25maWd1cmUodm9pZCkKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQogCQljY2RjX2NvbmZpZ19yYXcoKTsKIAllbHNlCiAJCWNjZGNfY29uZmlnX3ljYmNyKCk7CkBAIC02ODIsMjQgKzY4NywyNCBAQAogCiBzdGF0aWMgaW50IGNjZGNfc2V0X2J1ZnR5cGUoZW51bSBjY2RjX2J1ZnR5cGUgYnVmX3R5cGUpCiB7Ci0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKLQkJY2NkY19od19wYXJhbXNfcmF3LmJ1Zl90eXBlID0gYnVmX3R5cGU7CisJaWYgKGNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWNjZGNfY2ZnLmJheWVyLmJ1Zl90eXBlID0gYnVmX3R5cGU7CiAJZWxzZQotCQljY2RjX2h3X3BhcmFtc195Y2Jjci5idWZfdHlwZSA9IGJ1Zl90eXBlOworCQljY2RjX2NmZy55Y2Jjci5idWZfdHlwZSA9IGJ1Zl90eXBlOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgZW51bSBjY2RjX2J1ZnR5cGUgY2NkY19nZXRfYnVmdHlwZSh2b2lkKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCXJldHVybiBjY2RjX2h3X3BhcmFtc19yYXcuYnVmX3R5cGU7Ci0JcmV0dXJuIGNjZGNfaHdfcGFyYW1zX3ljYmNyLmJ1Zl90eXBlOworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gY2NkY19jZmcuYmF5ZXIuYnVmX3R5cGU7CisJcmV0dXJuIGNjZGNfY2ZnLnljYmNyLmJ1Zl90eXBlOwogfQogCiBzdGF0aWMgaW50IGNjZGNfZW51bV9waXgodTMyICpwaXgsIGludCBpKQogewogCWludCByZXQgPSAtRUlOVkFMOwotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgewogCQlpZiAoaSA8IEFSUkFZX1NJWkUoY2NkY19yYXdfYmF5ZXJfcGl4X2Zvcm1hdHMpKSB7CiAJCQkqcGl4ID0gY2NkY19yYXdfYmF5ZXJfcGl4X2Zvcm1hdHNbaV07CiAJCQlyZXQgPSAwOwpAQCAtNzE1LDE3ICs3MjAsMTcgQEAKIAogc3RhdGljIGludCBjY2RjX3NldF9waXhlbF9mb3JtYXQodTMyIHBpeGZtdCkKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7Ci0JCWNjZGNfaHdfcGFyYW1zX3Jhdy5waXhfZm10ID0gQ0NEQ19QSVhGTVRfUkFXOworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJCWNjZGNfY2ZnLmJheWVyLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVc7CiAJCWlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCkKLQkJCWNjZGNfaHdfcGFyYW1zX3Jhdy5jb25maWdfcGFyYW1zLmFsYXcuZW5hYmxlID0gMTsKKwkJCWNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuYWxhdy5lbmFibGUgPSAxOwogCQllbHNlIGlmIChwaXhmbXQgIT0gVjRMMl9QSVhfRk1UX1NCR0dSMTYpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9IGVsc2UgewogCQlpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9ZVVlWKQotCQkJY2NkY19od19wYXJhbXNfeWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1I7CisJCQljY2RjX2NmZy55Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX1lDQllDUjsKIAkJZWxzZSBpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9VWVZZKQotCQkJY2NkY19od19wYXJhbXNfeWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlk7CisJCQljY2RjX2NmZy55Y2Jjci5waXhfb3JkZXIgPSBDQ0RDX1BJWE9SREVSX0NCWUNSWTsKIAkJZWxzZQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNzM0LDE3ICs3MzksMTYgQEAKIAogc3RhdGljIHUzMiBjY2RjX2dldF9waXhlbF9mb3JtYXQodm9pZCkKIHsKLQlzdHJ1Y3QgY2NkY19hX2xhdyAqYWxhdyA9Ci0JCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtcy5hbGF3OworCXN0cnVjdCBjY2RjX2FfbGF3ICphbGF3ID0gJmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuYWxhdzsKIAl1MzIgcGl4Zm10OwogCi0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKIAkJaWYgKGFsYXctPmVuYWJsZSkKIAkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjg7CiAJCWVsc2UKIAkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjE2OwogCWVsc2UgewotCQlpZiAoY2NkY19od19wYXJhbXNfeWNiY3IucGl4X29yZGVyID09IENDRENfUElYT1JERVJfWUNCWUNSKQorCQlpZiAoY2NkY19jZmcueWNiY3IucGl4X29yZGVyID09IENDRENfUElYT1JERVJfWUNCWUNSKQogCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1lVWVY7CiAJCWVsc2UKIAkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9VWVZZOwpAQCAtNzU0LDUzICs3NTgsNTMgQEAKIAogc3RhdGljIGludCBjY2RjX3NldF9pbWFnZV93aW5kb3coc3RydWN0IHY0bDJfcmVjdCAqd2luKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCWNjZGNfaHdfcGFyYW1zX3Jhdy53aW4gPSAqd2luOworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQljY2RjX2NmZy5iYXllci53aW4gPSAqd2luOwogCWVsc2UKLQkJY2NkY19od19wYXJhbXNfeWNiY3Iud2luID0gKndpbjsKKwkJY2NkY19jZmcueWNiY3Iud2luID0gKndpbjsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgY2NkY19nZXRfaW1hZ2Vfd2luZG93KHN0cnVjdCB2NGwyX3JlY3QgKndpbikKIHsKLQlpZiAoY2NkY19pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQotCQkqd2luID0gY2NkY19od19wYXJhbXNfcmF3LndpbjsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJKndpbiA9IGNjZGNfY2ZnLmJheWVyLndpbjsKIAllbHNlCi0JCSp3aW4gPSBjY2RjX2h3X3BhcmFtc195Y2Jjci53aW47CisJCSp3aW4gPSBjY2RjX2NmZy55Y2Jjci53aW47CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2NkY19nZXRfbGluZV9sZW5ndGgodm9pZCkKIHsKIAlzdHJ1Y3QgY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY29uZmlnX3BhcmFtcyA9Ci0JCSZjY2RjX2h3X3BhcmFtc19yYXcuY29uZmlnX3BhcmFtczsKKwkJCQkmY2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtczsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCi0JaWYgKGNjZGNfaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCWlmIChjY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CiAJCWlmICgoY29uZmlnX3BhcmFtcy0+YWxhdy5lbmFibGUpIHx8CiAJCSAgICAoY29uZmlnX3BhcmFtcy0+ZGF0YV9zeiA9PSBDQ0RDX0RBVEFfOEJJVFMpKQotCQkJbGVuID0gY2NkY19od19wYXJhbXNfcmF3Lndpbi53aWR0aDsKKwkJCWxlbiA9IGNjZGNfY2ZnLmJheWVyLndpbi53aWR0aDsKIAkJZWxzZQotCQkJbGVuID0gY2NkY19od19wYXJhbXNfcmF3Lndpbi53aWR0aCAqIDI7CisJCQlsZW4gPSBjY2RjX2NmZy5iYXllci53aW4ud2lkdGggKiAyOwogCX0gZWxzZQotCQlsZW4gPSBjY2RjX2h3X3BhcmFtc195Y2Jjci53aW4ud2lkdGggKiAyOworCQlsZW4gPSBjY2RjX2NmZy55Y2Jjci53aW4ud2lkdGggKiAyOwogCXJldHVybiBBTElHTihsZW4sIDMyKTsKIH0KIAogc3RhdGljIGludCBjY2RjX3NldF9mcmFtZV9mb3JtYXQoZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10KQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCWNjZGNfaHdfcGFyYW1zX3Jhdy5mcm1fZm10ID0gZnJtX2ZtdDsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJY2NkY19jZmcuYmF5ZXIuZnJtX2ZtdCA9IGZybV9mbXQ7CiAJZWxzZQotCQljY2RjX2h3X3BhcmFtc195Y2Jjci5mcm1fZm10ID0gZnJtX2ZtdDsKKwkJY2NkY19jZmcueWNiY3IuZnJtX2ZtdCA9IGZybV9mbXQ7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBlbnVtIGNjZGNfZnJtZm10IGNjZGNfZ2V0X2ZyYW1lX2Zvcm1hdCh2b2lkKQogewotCWlmIChjY2RjX2lmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCi0JCXJldHVybiBjY2RjX2h3X3BhcmFtc19yYXcuZnJtX2ZtdDsKKwlpZiAoY2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJcmV0dXJuIGNjZGNfY2ZnLmJheWVyLmZybV9mbXQ7CiAJZWxzZQotCQlyZXR1cm4gY2NkY19od19wYXJhbXNfeWNiY3IuZnJtX2ZtdDsKKwkJcmV0dXJuIGNjZGNfY2ZnLnljYmNyLmZybV9mbXQ7CiB9CiAKIHN0YXRpYyBpbnQgY2NkY19nZXRmaWQodm9pZCkKQEAgLTgxNiwxNCArODIwLDE0IEBACiAKIHN0YXRpYyBpbnQgY2NkY19zZXRfaHdfaWZfcGFyYW1zKHN0cnVjdCB2cGZlX2h3X2lmX3BhcmFtICpwYXJhbXMpCiB7Ci0JY2NkY19pZl90eXBlID0gcGFyYW1zLT5pZl90eXBlOworCWNjZGNfY2ZnLmlmX3R5cGUgPSBwYXJhbXMtPmlmX3R5cGU7CiAKIAlzd2l0Y2ggKHBhcmFtcy0+aWZfdHlwZSkgewogCWNhc2UgVlBGRV9CVDY1NjoKIAljYXNlIFZQRkVfWUNCQ1JfU1lOQ18xNjoKIAljYXNlIFZQRkVfWUNCQ1JfU1lOQ184OgotCQljY2RjX2h3X3BhcmFtc195Y2Jjci52ZF9wb2wgPSBwYXJhbXMtPnZkcG9sOwotCQljY2RjX2h3X3BhcmFtc195Y2Jjci5oZF9wb2wgPSBwYXJhbXMtPmhkcG9sOworCQljY2RjX2NmZy55Y2Jjci52ZF9wb2wgPSBwYXJhbXMtPnZkcG9sOworCQljY2RjX2NmZy55Y2Jjci5oZF9wb2wgPSBwYXJhbXMtPmhkcG9sOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBUT0RPIGFkZCBzdXBwb3J0IGZvciByYXcgYmF5ZXIgaGVyZSAqLwpAQCAtODM4LDcgKzg0Miw2IEBACiAJLmh3X29wcyA9IHsKIAkJLm9wZW4gPSBjY2RjX29wZW4sCiAJCS5jbG9zZSA9IGNjZGNfY2xvc2UsCi0JCS5zZXRfY2NkY19iYXNlID0gY2NkY19zZXRfY2NkY19iYXNlLAogCQkucmVzZXQgPSBjY2RjX3NibF9yZXNldCwKIAkJLmVuYWJsZSA9IGNjZGNfZW5hYmxlLAogCQkuc2V0X2h3X2lmX3BhcmFtcyA9IGNjZGNfc2V0X2h3X2lmX3BhcmFtcywKQEAgLTg1OSwxOSArODYyLDEwNSBAQAogCX0sCiB9OwogCitzdGF0aWMgaW50IF9faW5pdCBkbTY0NHhfY2NkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZQkqcmVzOworCWludCBzdGF0dXMgPSAwOworCisJLyoKKwkgKiBmaXJzdCB0cnkgdG8gcmVnaXN0ZXIgd2l0aCB2cGZlLiBJZiBub3QgY29ycmVjdCBwbGF0Zm9ybSwgdGhlbiB3ZQorCSAqIGRvbid0IGhhdmUgdG8gaW9tYXAKKwkgKi8KKwlzdGF0dXMgPSB2cGZlX3JlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2Rldik7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9ub3JlczsKKwl9CisKKwlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCByZXMtPm5hbWUpOworCWlmICghcmVzKSB7CisJCXN0YXR1cyA9IC1FQlVTWTsKKwkJZ290byBmYWlsX25vcmVzOworCX0KKworCWNjZGNfY2ZnLmJhc2VfYWRkciA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghY2NkY19jZmcuYmFzZV9hZGRyKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9ub21lbTsKKwl9CisKKwkvKiBHZXQgYW5kIGVuYWJsZSBNYXN0ZXIgY2xvY2sgKi8KKwljY2RjX2NmZy5tY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibWFzdGVyIik7CisJaWYgKElTX0VSUihjY2RjX2NmZy5tY2xrKSkgeworCQlzdGF0dXMgPSBQVFJfRVJSKGNjZGNfY2ZnLm1jbGspOworCQlnb3RvIGZhaWxfbm9tYXA7CisJfQorCWlmIChjbGtfZW5hYmxlKGNjZGNfY2ZnLm1jbGspKSB7CisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9tY2xrOworCX0KKworCS8qIEdldCBhbmQgZW5hYmxlIFNsYXZlIGNsb2NrICovCisJY2NkY19jZmcuc2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInNsYXZlIik7CisJaWYgKElTX0VSUihjY2RjX2NmZy5zY2xrKSkgeworCQlzdGF0dXMgPSBQVFJfRVJSKGNjZGNfY2ZnLnNjbGspOworCQlnb3RvIGZhaWxfbWNsazsKKwl9CisJaWYgKGNsa19lbmFibGUoY2NkY19jZmcuc2NsaykpIHsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX3NjbGs7CisJfQorCWNjZGNfY2ZnLmRldiA9ICZwZGV2LT5kZXY7CisJcHJpbnRrKEtFUk5fTk9USUNFICIlcyBpcyByZWdpc3RlcmVkIHdpdGggdnBmZS5cbiIsIGNjZGNfaHdfZGV2Lm5hbWUpOworCXJldHVybiAwOworZmFpbF9zY2xrOgorCWNsa19wdXQoY2NkY19jZmcuc2Nsayk7CitmYWlsX21jbGs6CisJY2xrX3B1dChjY2RjX2NmZy5tY2xrKTsKK2ZhaWxfbm9tYXA6CisJaW91bm1hcChjY2RjX2NmZy5iYXNlX2FkZHIpOworZmFpbF9ub21lbToKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK2ZhaWxfbm9yZXM6CisJdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2Rldik7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBkbTY0NHhfY2NkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UJKnJlczsKKworCWNsa19wdXQoY2NkY19jZmcubWNsayk7CisJY2xrX3B1dChjY2RjX2NmZy5zY2xrKTsKKwlpb3VubWFwKGNjZGNfY2ZnLmJhc2VfYWRkcik7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAocmVzKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwl2cGZlX3VucmVnaXN0ZXJfY2NkY19kZXZpY2UoJmNjZGNfaHdfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZG02NDR4X2NjZGNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImRtNjQ0eF9jY2RjIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoZG02NDR4X2NjZGNfcmVtb3ZlKSwKKwkucHJvYmUgPSBkbTY0NHhfY2NkY19wcm9iZSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGRtNjQ0eF9jY2RjX2luaXQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9OT1RJQ0UgImRtNjQ0eF9jY2RjX2luaXRcbiIpOwotCWlmICh2cGZlX3JlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2RldikgPCAwKQotCQlyZXR1cm4gLTE7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIlcyBpcyByZWdpc3RlcmVkIHdpdGggdnBmZS5cbiIsCi0JCWNjZGNfaHdfZGV2Lm5hbWUpOwotCXJldHVybiAwOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRtNjQ0eF9jY2RjX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBkbTY0NHhfY2NkY19leGl0KHZvaWQpCiB7Ci0JdnBmZV91bnJlZ2lzdGVyX2NjZGNfZGV2aWNlKCZjY2RjX2h3X2Rldik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRtNjQ0eF9jY2RjX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGRtNjQ0eF9jY2RjX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL2lzaWYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9pc2lmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjljMjljNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9pc2lmLmMKQEAgLTAsMCArMSwxMTcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIEltYWdlIFNlbnNvciBJbnRlcmZhY2UgKElTSUYpIGRyaXZlcgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGZvciBjb25maWd1cmluZyB0aGUgSVNJRiBJUCBhdmFpbGFibGUgb24gRE0zNjUgb3IgYW55IG90aGVyCisgKiBUSSBTb0NzLiBUaGlzIGlzIHVzZWQgZm9yIGNhcHR1cmluZyB5dXYgb3IgYmF5ZXIgdmlkZW8gb3IgaW1hZ2UgZGF0YQorICogZnJvbSBhIGRlY29kZXIgb3Igc2Vuc29yLiBUaGlzIElQIGlzIHNpbWlsYXIgdG8gdGhlIENDREMgSVAgb24gRE0zNTUKKyAqIGFuZCBETTY0NDYsIGJ1dCB3aXRoIGVuaGFuY2VkIG9yIGFkZGl0aW9uYWwgaXAgYmxvY2tzLiBUaGUgZHJpdmVyCisgKiBjb25maWd1cmVzIHRoZSBJU0lGIHVwb24gY29tbWFuZHMgZnJvbSB0aGUgdnBmZSBicmlkZ2UgZHJpdmVyIHRocm91Z2gKKyAqIGNjZGNfaHdfZGV2aWNlIGludGVyZmFjZS4KKyAqCisgKiBUT0RPOiAxKSBSYXcgYmF5ZXIgcGFyYW1ldGVyIHNldHRpbmdzIGFuZCBiYXllciBjYXB0dXJlCisgKgkgMikgQWRkIHN1cHBvcnQgZm9yIGNvbnRyb2wgaW9jdGwKKyAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxtYWNoL211eC5oPgorCisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS9pc2lmLmg+CisjaW5jbHVkZSA8bWVkaWEvZGF2aW5jaS92cHNzLmg+CisKKyNpbmNsdWRlICJpc2lmX3JlZ3MuaCIKKyNpbmNsdWRlICJjY2RjX2h3X2RldmljZS5oIgorCisvKiBEZWZhdWx0cyBmb3IgbW9kdWxlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqLworc3RhdGljIHN0cnVjdCBpc2lmX2NvbmZpZ19wYXJhbXNfcmF3IGlzaWZfY29uZmlnX2RlZmF1bHRzID0geworCS5saW5lYXJpemUgPSB7CisJCS5lbiA9IDAsCisJCS5jb3JyX3NoZnQgPSBJU0lGX05PX1NISUZULAorCQkuc2NhbGVfZmFjdCA9IHsxLCAwfSwKKwl9LAorCS5kZl9jc2MgPSB7CisJCS5kZl9vcl9jc2MgPSAwLAorCQkuY3NjID0geworCQkJLmVuID0gMCwKKwkJfSwKKwl9LAorCS5kZmMgPSB7CisJCS5lbiA9IDAsCisJfSwKKwkuYmNsYW1wID0geworCQkuZW4gPSAwLAorCX0sCisJLmdhaW5fb2Zmc2V0ID0geworCQkuZ2FpbiA9IHsKKwkJCS5yX3llID0gezEsIDB9LAorCQkJLmdyX2N5ID0gezEsIDB9LAorCQkJLmdiX2cgPSB7MSwgMH0sCisJCQkuYl9tZyA9IHsxLCAwfSwKKwkJfSwKKwl9LAorCS5jdWxsaW5nID0geworCQkuaGNwYXRfb2RkID0gMHhmZiwKKwkJLmhjcGF0X2V2ZW4gPSAweGZmLAorCQkudmNwYXQgPSAweGZmLAorCX0sCisJLmNvbXByZXNzID0geworCQkuYWxnID0gSVNJRl9BTEFXLAorCX0sCit9OworCisvKiBJU0lGIG9wZXJhdGlvbiBjb25maWd1cmF0aW9uICovCitzdGF0aWMgc3RydWN0IGlzaWZfb3Blcl9jb25maWcgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwllbnVtIHZwZmVfaHdfaWZfdHlwZSBpZl90eXBlOworCXN0cnVjdCBpc2lmX3ljYmNyX2NvbmZpZyB5Y2JjcjsKKwlzdHJ1Y3QgaXNpZl9wYXJhbXNfcmF3IGJheWVyOworCWVudW0gaXNpZl9kYXRhX3BhY2sgZGF0YV9wYWNrOworCS8qIE1hc3RlciBjbG9jayAqLworCXN0cnVjdCBjbGsgKm1jbGs7CisJLyogSVNJRiBiYXNlIGFkZHJlc3MgKi8KKwl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKKwkvKiBJU0lGIExpbmVhciBUYWJsZSAwICovCisJdm9pZCBfX2lvbWVtICpsaW5lYXJfdGJsMF9hZGRyOworCS8qIElTSUYgTGluZWFyIFRhYmxlIDEgKi8KKwl2b2lkIF9faW9tZW0gKmxpbmVhcl90YmwxX2FkZHI7Cit9IGlzaWZfY2ZnID0geworCS55Y2JjciA9IHsKKwkJLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9ZQ0JDUl84QklULAorCQkuZnJtX2ZtdCA9IENDRENfRlJNRk1UX0lOVEVSTEFDRUQsCisJCS53aW4gPSBJU0lGX1dJTl9OVFNDLAorCQkuZmlkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkudmRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5oZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZLAorCQkuYnVmX3R5cGUgPSBDQ0RDX0JVRlRZUEVfRkxEX0lOVEVSTEVBVkVELAorCX0sCisJLmJheWVyID0geworCQkucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVywKKwkJLmZybV9mbXQgPSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSwKKwkJLndpbiA9IElTSUZfV0lOX1ZHQSwKKwkJLmZpZF9wb2wgPSBWUEZFX1BJTlBPTF9QT1NJVElWRSwKKwkJLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFLAorCQkuaGRfcG9sID0gVlBGRV9QSU5QT0xfUE9TSVRJVkUsCisJCS5nYWluID0geworCQkJLnJfeWUgPSB7MSwgMH0sCisJCQkuZ3JfY3kgPSB7MSwgMH0sCisJCQkuZ2JfZyA9IHsxLCAwfSwKKwkJCS5iX21nID0gezEsIDB9LAorCQl9LAorCQkuY2ZhX3BhdCA9IElTSUZfQ0ZBX1BBVF9NT1NBSUMsCisJCS5kYXRhX21zYiA9IElTSUZfQklUX01TQl8xMSwKKwkJLmNvbmZpZ19wYXJhbXMgPSB7CisJCQkuZGF0YV9zaGlmdCA9IElTSUZfTk9fU0hJRlQsCisJCQkuY29sX3BhdF9maWVsZDAgPSB7CisJCQkJLm9sb3AgPSBJU0lGX0dSRUVOX0JMVUUsCisJCQkJLm9sZXAgPSBJU0lGX0JMVUUsCisJCQkJLmVsb3AgPSBJU0lGX1JFRCwKKwkJCQkuZWxlcCA9IElTSUZfR1JFRU5fUkVELAorCQkJfSwKKwkJCS5jb2xfcGF0X2ZpZWxkMSA9IHsKKwkJCQkub2xvcCA9IElTSUZfR1JFRU5fQkxVRSwKKwkJCQkub2xlcCA9IElTSUZfQkxVRSwKKwkJCQkuZWxvcCA9IElTSUZfUkVELAorCQkJCS5lbGVwID0gSVNJRl9HUkVFTl9SRUQsCisJCQl9LAorCQkJLnRlc3RfcGF0X2dlbiA9IDAsCisJCX0sCisJfSwKKwkuZGF0YV9wYWNrID0gSVNJRl9EQVRBX1BBQ0s4LAorfTsKKworLyogUmF3IEJheWVyIGZvcm1hdHMgKi8KK3N0YXRpYyBjb25zdCB1MzIgaXNpZl9yYXdfYmF5ZXJfcGl4X2Zvcm1hdHNbXSA9IHsKKwlWNEwyX1BJWF9GTVRfU0JHR1I4LCBWNEwyX1BJWF9GTVRfU0JHR1IxNn07CisKKy8qIFJhdyBZVVYgZm9ybWF0cyAqLworc3RhdGljIGNvbnN0IHUzMiBpc2lmX3Jhd195dXZfcGl4X2Zvcm1hdHNbXSA9IHsKKwlWNEwyX1BJWF9GTVRfVVlWWSwgVjRMMl9QSVhfRk1UX1lVWVZ9OworCisvKiByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHJlZ3IodTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoaXNpZl9jZmcuYmFzZV9hZGRyICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlZ3codTMyIHZhbCwgdTMyIG9mZnNldCkKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBpc2lmX2NmZy5iYXNlX2FkZHIgKyBvZmZzZXQpOworfQorCisvKiByZWdfbW9kaWZ5KCkgLSByZWFkLCBtb2RpZnkgYW5kIHdyaXRlIHJlZ2lzdGVyICovCitzdGF0aWMgaW5saW5lIHUzMiByZWdfbW9kaWZ5KHUzMiBtYXNrLCB1MzIgdmFsLCB1MzIgb2Zmc2V0KQoreworCXUzMiBuZXdfdmFsID0gKHJlZ3Iob2Zmc2V0KSAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsKKworCXJlZ3cobmV3X3ZhbCwgb2Zmc2V0KTsKKwlyZXR1cm4gbmV3X3ZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlZ3dfbGluX3RibCh1MzIgdmFsLCB1MzIgb2Zmc2V0LCBpbnQgaSkKK3sKKwlpZiAoIWkpCisJCV9fcmF3X3dyaXRlbCh2YWwsIGlzaWZfY2ZnLmxpbmVhcl90YmwwX2FkZHIgKyBvZmZzZXQpOworCWVsc2UKKwkJX19yYXdfd3JpdGVsKHZhbCwgaXNpZl9jZmcubGluZWFyX3RibDFfYWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGlzaWZfZGlzYWJsZV9hbGxfbW9kdWxlcyh2b2lkKQoreworCS8qIGRpc2FibGUgQkMgKi8KKwlyZWd3KDAsIENMQU1QQ0ZHKTsKKwkvKiBkaXNhYmxlIHZkZmMgKi8KKwlyZWd3KDAsIERGQ0NUTCk7CisJLyogZGlzYWJsZSBDU0MgKi8KKwlyZWd3KDAsIENTQ0NUTCk7CisJLyogZGlzYWJsZSBsaW5lYXJpemF0aW9uICovCisJcmVndygwLCBMSU5DRkcwKTsKKwkvKiBkaXNhYmxlIG90aGVyIG1vZHVsZXMgaGVyZSBhcyB0aGV5IGFyZSBzdXBwb3J0ZWQgKi8KK30KKworc3RhdGljIHZvaWQgaXNpZl9lbmFibGUoaW50IGVuKQoreworCWlmICghZW4pIHsKKwkJLyogQmVmb3JlIGRpc2FibGUgaXNpZiwgZGlzYWJsZSBhbGwgSVNJRiBtb2R1bGVzICovCisJCWlzaWZfZGlzYWJsZV9hbGxfbW9kdWxlcygpOworCQkvKgorCQkgKiB3YWl0IGZvciBuZXh0IFZELiBBc3N1bWUgbG93ZXN0IHNjYW4gcmF0ZSBpcyAxMiBIei4gU28KKwkJICogMTAwIG1zZWMgZGVsYXkgaXMgZ29vZCBlbm91Z2gKKwkJICovCisJCW1zbGVlcCgxMDApOworCX0KKwlyZWdfbW9kaWZ5KElTSUZfU1lOQ0VOX1ZESERFTl9NQVNLLCBlbiwgU1lOQ0VOKTsKK30KKworc3RhdGljIHZvaWQgaXNpZl9lbmFibGVfb3V0cHV0X3RvX3NkcmFtKGludCBlbikKK3sKKwlyZWdfbW9kaWZ5KElTSUZfU1lOQ0VOX1dFTl9NQVNLLCBlbiA8PCBJU0lGX1NZTkNFTl9XRU5fU0hJRlQsIFNZTkNFTik7Cit9CisKK3N0YXRpYyB2b2lkIGlzaWZfY29uZmlnX2N1bGxpbmcoc3RydWN0IGlzaWZfY3VsICpjdWwpCit7CisJdTMyIHZhbDsKKworCS8qIEhvcml6b250YWwgcGF0dGVybiAqLworCXZhbCA9IChjdWwtPmhjcGF0X2V2ZW4gPDwgQ1VMTF9QQVRfRVZFTl9MSU5FX1NISUZUKSB8IGN1bC0+aGNwYXRfb2RkOworCXJlZ3codmFsLCBDVUxIKTsKKworCS8qIHZlcnRpY2FsIHBhdHRlcm4gKi8KKwlyZWd3KGN1bC0+dmNwYXQsIENVTFYpOworCisJLyogTFBGICovCisJcmVnX21vZGlmeShJU0lGX0xQRl9NQVNLIDw8IElTSUZfTFBGX1NISUZULAorCQkgIGN1bC0+ZW5fbHBmIDw8IElTSUZfTFBGX1NISUZULCBNT0RFU0VUKTsKK30KKworc3RhdGljIHZvaWQgaXNpZl9jb25maWdfZ2Fpbl9vZmZzZXQodm9pZCkKK3sKKwlzdHJ1Y3QgaXNpZl9nYWluX29mZnNldHNfYWRqICpnYWluX29mZl9wID0KKwkJJmlzaWZfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuZ2Fpbl9vZmZzZXQ7CisJdTMyIHZhbDsKKworCXZhbCA9ICghIWdhaW5fb2ZmX3AtPmdhaW5fc2RyYW1fZW4gPDwgR0FJTl9TRFJBTV9FTl9TSElGVCkgfAorCSAgICAgICghIWdhaW5fb2ZmX3AtPmdhaW5faXBpcGVfZW4gPDwgR0FJTl9JUElQRV9FTl9TSElGVCkgfAorCSAgICAgICghIWdhaW5fb2ZmX3AtPmdhaW5faDNhX2VuIDw8IEdBSU5fSDNBX0VOX1NISUZUKSB8CisJICAgICAgKCEhZ2Fpbl9vZmZfcC0+b2Zmc2V0X3NkcmFtX2VuIDw8IE9GU1RfU0RSQU1fRU5fU0hJRlQpIHwKKwkgICAgICAoISFnYWluX29mZl9wLT5vZmZzZXRfaXBpcGVfZW4gPDwgT0ZTVF9JUElQRV9FTl9TSElGVCkgfAorCSAgICAgICghIWdhaW5fb2ZmX3AtPm9mZnNldF9oM2FfZW4gPDwgT0ZTVF9IM0FfRU5fU0hJRlQpOworCisJcmVnX21vZGlmeShHQUlOX09GRlNFVF9FTl9NQVNLLCB2YWwsIENHQU1NQVdEKTsKKworCXZhbCA9IChnYWluX29mZl9wLT5nYWluLnJfeWUuaW50ZWdlciA8PCBHQUlOX0lOVEVHRVJfU0hJRlQpIHwKKwkgICAgICAgZ2Fpbl9vZmZfcC0+Z2Fpbi5yX3llLmRlY2ltYWw7CisJcmVndyh2YWwsIENSR0FJTik7CisKKwl2YWwgPSAoZ2Fpbl9vZmZfcC0+Z2Fpbi5ncl9jeS5pbnRlZ2VyIDw8IEdBSU5fSU5URUdFUl9TSElGVCkgfAorCSAgICAgICBnYWluX29mZl9wLT5nYWluLmdyX2N5LmRlY2ltYWw7CisJcmVndyh2YWwsIENHUkdBSU4pOworCisJdmFsID0gKGdhaW5fb2ZmX3AtPmdhaW4uZ2JfZy5pbnRlZ2VyIDw8IEdBSU5fSU5URUdFUl9TSElGVCkgfAorCSAgICAgICBnYWluX29mZl9wLT5nYWluLmdiX2cuZGVjaW1hbDsKKwlyZWd3KHZhbCwgQ0dCR0FJTik7CisKKwl2YWwgPSAoZ2Fpbl9vZmZfcC0+Z2Fpbi5iX21nLmludGVnZXIgPDwgR0FJTl9JTlRFR0VSX1NISUZUKSB8CisJICAgICAgIGdhaW5fb2ZmX3AtPmdhaW4uYl9tZy5kZWNpbWFsOworCXJlZ3codmFsLCBDQkdBSU4pOworCisJcmVndyhnYWluX29mZl9wLT5vZmZzZXQsIENPRlNUQSk7Cit9CisKK3N0YXRpYyB2b2lkIGlzaWZfcmVzdG9yZV9kZWZhdWx0cyh2b2lkKQoreworCWVudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgc291cmNlID0gVlBTU19DQ0RDSU47CisKKwlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIlxuc3RhcnRpbmcgaXNpZl9yZXN0b3JlX2RlZmF1bHRzLi4uIik7CisJaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcyA9IGlzaWZfY29uZmlnX2RlZmF1bHRzOworCS8qIEVuYWJsZSBjbG9jayB0byBJU0lGLCBJUElQRUlGIGFuZCBCTCAqLworCXZwc3NfZW5hYmxlX2Nsb2NrKFZQU1NfQ0NEQ19DTE9DSywgMSk7CisJdnBzc19lbmFibGVfY2xvY2soVlBTU19JUElQRUlGX0NMT0NLLCAxKTsKKwl2cHNzX2VuYWJsZV9jbG9jayhWUFNTX0JMX0NMT0NLLCAxKTsKKwkvKiBTZXQgZGVmYXVsdCBvZmZzZXQgYW5kIGdhaW4gKi8KKwlpc2lmX2NvbmZpZ19nYWluX29mZnNldCgpOworCXZwc3Nfc2VsZWN0X2NjZGNfc291cmNlKHNvdXJjZSk7CisJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJcbkVuZCBvZiBpc2lmX3Jlc3RvcmVfZGVmYXVsdHMuLi4iKTsKK30KKworc3RhdGljIGludCBpc2lmX29wZW4oc3RydWN0IGRldmljZSAqZGV2aWNlKQoreworCWlzaWZfcmVzdG9yZV9kZWZhdWx0cygpOworCXJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY29uZmlndXJlIHRoZSB3aW5kb3cgc2l6ZSB0byBiZSBjYXB0dXJlIGluIElTSUYgcmVnICovCitzdGF0aWMgdm9pZCBpc2lmX3NldHdpbihzdHJ1Y3QgdjRsMl9yZWN0ICppbWFnZV93aW4sCisJCQllbnVtIGNjZGNfZnJtZm10IGZybV9mbXQsIGludCBwcGMpCit7CisJaW50IGhvcnpfc3RhcnQsIGhvcnpfbnJfcGl4ZWxzOworCWludCB2ZXJ0X3N0YXJ0LCB2ZXJ0X25yX2xpbmVzOworCWludCBtaWRfaW1nID0gMDsKKworCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiXG5TdGFydGluZyBpc2lmX3NldHdpbi4uLiIpOworCS8qCisJICogcHBjIC0gcGVyIHBpeGVsIGNvdW50LiBpbmRpY2F0ZXMgaG93IG1hbnkgcGl4ZWxzIHBlciBjZWxsCisJICogb3V0cHV0IHRvIFNEUkFNLiBleGFtcGxlLCBmb3IgeWNiY3IsIGl0IGlzIG9uZSB5IGFuZCBvbmUgYywgc28gMi4KKwkgKiByYXcgY2FwdHVyZSB0aGlzIGlzIDEKKwkgKi8KKwlob3J6X3N0YXJ0ID0gaW1hZ2Vfd2luLT5sZWZ0IDw8IChwcGMgLSAxKTsKKwlob3J6X25yX3BpeGVscyA9ICgoaW1hZ2Vfd2luLT53aWR0aCkgPDwgKHBwYyAtIDEpKSAtIDE7CisKKwkvKiBXcml0aW5nIHRoZSBob3Jpem9udGFsIGluZm8gaW50byB0aGUgcmVnaXN0ZXJzICovCisJcmVndyhob3J6X3N0YXJ0ICYgU1RBUlRfUFhfSE9SX01BU0ssIFNQSCk7CisJcmVndyhob3J6X25yX3BpeGVscyAmIE5VTV9QWF9IT1JfTUFTSywgTE5IKTsKKwl2ZXJ0X3N0YXJ0ID0gaW1hZ2Vfd2luLT50b3A7CisKKwlpZiAoZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VEKSB7CisJCXZlcnRfbnJfbGluZXMgPSAoaW1hZ2Vfd2luLT5oZWlnaHQgPj4gMSkgLSAxOworCQl2ZXJ0X3N0YXJ0ID4+PSAxOworCQkvKiBUbyBhY2NvdW50IGZvciBWRCBzaW5jZSBsaW5lIDAgZG9lc24ndCBoYXZlIGFueSBkYXRhICovCisJCXZlcnRfc3RhcnQgKz0gMTsKKwl9IGVsc2UgeworCQkvKiBUbyBhY2NvdW50IGZvciBWRCBzaW5jZSBsaW5lIDAgZG9lc24ndCBoYXZlIGFueSBkYXRhICovCisJCXZlcnRfc3RhcnQgKz0gMTsKKwkJdmVydF9ucl9saW5lcyA9IGltYWdlX3dpbi0+aGVpZ2h0IC0gMTsKKwkJLyogY29uZmlndXJlIFZESU5UMCBhbmQgVkRJTlQxICovCisJCW1pZF9pbWcgPSB2ZXJ0X3N0YXJ0ICsgKGltYWdlX3dpbi0+aGVpZ2h0IC8gMik7CisJCXJlZ3cobWlkX2ltZywgVkRJTlQxKTsKKwl9CisKKwlyZWd3KDAsIFZESU5UMCk7CisJcmVndyh2ZXJ0X3N0YXJ0ICYgU1RBUlRfVkVSX09ORV9NQVNLLCBTTFYwKTsKKwlyZWd3KHZlcnRfc3RhcnQgJiBTVEFSVF9WRVJfVFdPX01BU0ssIFNMVjEpOworCXJlZ3codmVydF9ucl9saW5lcyAmIE5VTV9MSU5FU19WRVIsIExOVik7Cit9CisKK3N0YXRpYyB2b2lkIGlzaWZfY29uZmlnX2JjbGFtcChzdHJ1Y3QgaXNpZl9ibGFja19jbGFtcCAqYmMpCit7CisJdTMyIHZhbDsKKworCS8qCisJICogREMgT2Zmc2V0IGlzIGFsd2F5cyBhZGRlZCB0byBpbWFnZSBkYXRhIGlycmVzcGVjdGl2ZSBvZiBiYyBlbmFibGUKKwkgKiBzdGF0dXMKKwkgKi8KKwlyZWd3KGJjLT5kY19vZmZzZXQsIENMRENPRlNUKTsKKworCWlmIChiYy0+ZW4pIHsKKwkJdmFsID0gYmMtPmJjX21vZGVfY29sb3IgPDwgSVNJRl9CQ19NT0RFX0NPTE9SX1NISUZUOworCisJCS8qIEVuYWJsZSBCQyBhbmQgaG9yaXpvbnRhbCBjbGFtcCBjYWN1bGF0aW9uIHBhcmFtYXRlcnMgKi8KKwkJdmFsID0gdmFsIHwgMSB8IChiYy0+aG9yei5tb2RlIDw8IElTSUZfSE9SWl9CQ19NT0RFX1NISUZUKTsKKworCQlyZWd3KHZhbCwgQ0xBTVBDRkcpOworCisJCWlmIChiYy0+aG9yei5tb2RlICE9IElTSUZfSE9SWl9CQ19ESVNBQkxFKSB7CisJCQkvKgorCQkJICogV2luZG93IGNvdW50IGZvciBjYWxjdWxhdGlvbgorCQkJICogQmFzZSB3aW5kb3cgc2VsZWN0aW9uCisJCQkgKiBwaXhlbCBsaW1pdAorCQkJICogSG9yaXpvbnRhbCBzaXplIG9mIHdpbmRvdworCQkJICogdmVydGljYWwgc2l6ZSBvZiB0aGUgd2luZG93CisJCQkgKiBIb3Jpem9udGFsIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSB3aW5kb3cKKwkJCSAqIFZlcnRpY2FsIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSB3aW5kb3cKKwkJCSAqLworCQkJdmFsID0gYmMtPmhvcnoud2luX2NvdW50X2NhbGMgfAorCQkJICAgICAgKCghIWJjLT5ob3J6LmJhc2Vfd2luX3NlbF9jYWxjKSA8PAorCQkJCUlTSUZfSE9SWl9CQ19XSU5fU0VMX1NISUZUKSB8CisJCQkgICAgICAoKCEhYmMtPmhvcnouY2xhbXBfcGl4X2xpbWl0KSA8PAorCQkJCUlTSUZfSE9SWl9CQ19QSVhfTElNSVRfU0hJRlQpIHwKKwkJCSAgICAgIChiYy0+aG9yei53aW5faF9zel9jYWxjIDw8CisJCQkJSVNJRl9IT1JaX0JDX1dJTl9IX1NJWkVfU0hJRlQpIHwKKwkJCSAgICAgIChiYy0+aG9yei53aW5fdl9zel9jYWxjIDw8CisJCQkJSVNJRl9IT1JaX0JDX1dJTl9WX1NJWkVfU0hJRlQpOworCQkJcmVndyh2YWwsIENMSFdJTjApOworCisJCQlyZWd3KGJjLT5ob3J6Lndpbl9zdGFydF9oX2NhbGMsIENMSFdJTjEpOworCQkJcmVndyhiYy0+aG9yei53aW5fc3RhcnRfdl9jYWxjLCBDTEhXSU4yKTsKKwkJfQorCisJCS8qIHZlcnRpY2FsIGNsYW1wIGNhY3VsYXRpb24gcGFyYW1hdGVycyAqLworCisJCS8qIFJlc2V0IGNsYW1wIHZhbHVlIHNlbCBmb3IgcHJldmlvdXMgbGluZSAqLworCQl2YWwgfD0KKwkJKGJjLT52ZXJ0LnJlc2V0X3ZhbF9zZWwgPDwgSVNJRl9WRVJUX0JDX1JTVF9WQUxfU0VMX1NISUZUKSB8CisJCShiYy0+dmVydC5saW5lX2F2ZV9jb2VmIDw8IElTSUZfVkVSVF9CQ19MSU5FX0FWRV9DT0VGX1NISUZUKTsKKwkJcmVndyh2YWwsIENMVldJTjApOworCisJCS8qIE9wdGljYWwgQmxhY2sgaG9yaXpvbnRhbCBzdGFydCBwb3NpdGlvbiAqLworCQlyZWd3KGJjLT52ZXJ0Lm9iX3N0YXJ0X2gsIENMVldJTjEpOworCQkvKiBPcHRpY2FsIEJsYWNrIHZlcnRpY2FsIHN0YXJ0IHBvc2l0aW9uICovCisJCXJlZ3coYmMtPnZlcnQub2Jfc3RhcnRfdiwgQ0xWV0lOMik7CisJCS8qIE9wdGljYWwgQmxhY2sgdmVydGljYWwgc2l6ZSBmb3IgY2FsY3VsYXRpb24gKi8KKwkJcmVndyhiYy0+dmVydC5vYl92X3N6X2NhbGMsIENMVldJTjMpOworCQkvKiBWZXJ0aWNhbCBzdGFydCBwb3NpdGlvbiBmb3IgQkMgc3VidHJhY3Rpb24gKi8KKwkJcmVndyhiYy0+dmVydF9zdGFydF9zdWIsIENMU1YpOworCX0KK30KKworc3RhdGljIHZvaWQgaXNpZl9jb25maWdfbGluZWFyaXphdGlvbihzdHJ1Y3QgaXNpZl9saW5lYXJpemUgKmxpbmVhcml6ZSkKK3sKKwl1MzIgdmFsLCBpOworCisJaWYgKCFsaW5lYXJpemUtPmVuKSB7CisJCXJlZ3coMCwgTElOQ0ZHMCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBzaGlmdCB2YWx1ZSBmb3IgY29ycmVjdGlvbiAmIGVuYWJsZSBsaW5lYXJpemF0aW9uIChzZXQgbHNiKSAqLworCXZhbCA9IChsaW5lYXJpemUtPmNvcnJfc2hmdCA8PCBJU0lGX0xJTl9DT1JSU0ZUX1NISUZUKSB8IDE7CisJcmVndyh2YWwsIExJTkNGRzApOworCisJLyogU2NhbGUgZmFjdG9yICovCisJdmFsID0gKCghIWxpbmVhcml6ZS0+c2NhbGVfZmFjdC5pbnRlZ2VyKSA8PAorCSAgICAgICBJU0lGX0xJTl9TQ0FMRV9GQUNUX0lOVEVHX1NISUZUKSB8CisJICAgICAgIGxpbmVhcml6ZS0+c2NhbGVfZmFjdC5kZWNpbWFsOworCXJlZ3codmFsLCBMSU5DRkcxKTsKKworCWZvciAoaSA9IDA7IGkgPCBJU0lGX0xJTkVBUl9UQUJfU0laRTsgaSsrKSB7CisJCWlmIChpICUgMikKKwkJCXJlZ3dfbGluX3RibChsaW5lYXJpemUtPnRhYmxlW2ldLCAoKGkgPj4gMSkgPDwgMiksIDEpOworCQllbHNlCisJCQlyZWd3X2xpbl90YmwobGluZWFyaXplLT50YWJsZVtpXSwgKChpID4+IDEpIDw8IDIpLCAwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9jb25maWdfZGZjKHN0cnVjdCBpc2lmX2RmYyAqdmRmYykKK3sKKwkvKiBpbml0aWFsaXplIHJldHJpZXMgdG8gbG9vcCBmb3IgbWF4IH4gMjUwIHVzZWMgKi8KKwl1MzIgdmFsLCBjb3VudCwgcmV0cmllcyA9IGxvb3BzX3Blcl9qaWZmeSAvICg0MDAwL0haKTsKKwlpbnQgaTsKKworCWlmICghdmRmYy0+ZW4pCisJCXJldHVybiAwOworCisJLyogQ29ycmVjdGlvbiBtb2RlICovCisJdmFsID0gKHZkZmMtPmNvcnJfbW9kZSA8PCBJU0lGX1ZERkNfQ09SUl9NT0RfU0hJRlQpOworCisJLyogQ29ycmVjdCB3aG9sZSBsaW5lIG9yIHBhcnRpYWwgKi8KKwlpZiAodmRmYy0+Y29ycl93aG9sZV9saW5lKQorCQl2YWwgfD0gMSA8PCBJU0lGX1ZERkNfQ09SUl9XSE9MRV9MTl9TSElGVDsKKworCS8qIGxldmVsIHNoaWZ0IHZhbHVlICovCisJdmFsIHw9IHZkZmMtPmRlZl9sZXZlbF9zaGlmdCA8PCBJU0lGX1ZERkNfTEVWRUxfU0hGVF9TSElGVDsKKworCXJlZ3codmFsLCBERkNDVEwpOworCisJLyogRGVmZWN0IHNhdHVyYXRpb24gbGV2ZWwgKi8KKwlyZWd3KHZkZmMtPmRlZl9zYXRfbGV2ZWwsIFZERlNBVExWKTsKKworCXJlZ3codmRmYy0+dGFibGVbMF0ucG9zX3ZlcnQsIERGQ01FTTApOworCXJlZ3codmRmYy0+dGFibGVbMF0ucG9zX2hvcnosIERGQ01FTTEpOworCWlmICh2ZGZjLT5jb3JyX21vZGUgPT0gSVNJRl9WREZDX05PUk1BTCB8fAorCSAgICB2ZGZjLT5jb3JyX21vZGUgPT0gSVNJRl9WREZDX0hPUlpfSU5URVJQT0xfSUZfU0FUKSB7CisJCXJlZ3codmRmYy0+dGFibGVbMF0ubGV2ZWxfYXRfcG9zLCBERkNNRU0yKTsKKwkJcmVndyh2ZGZjLT50YWJsZVswXS5sZXZlbF91cF9waXhlbHMsIERGQ01FTTMpOworCQlyZWd3KHZkZmMtPnRhYmxlWzBdLmxldmVsX2xvd19waXhlbHMsIERGQ01FTTQpOworCX0KKworCS8qIHNldCBERkNNQVJTVCBhbmQgc2V0IERGQ01XUiAqLworCXZhbCA9IHJlZ3IoREZDTUVNQ1RMKSB8ICgxIDw8IElTSUZfREZDTUVNQ1RMX0RGQ01BUlNUX1NISUZUKSB8IDE7CisJcmVndyh2YWwsIERGQ01FTUNUTCk7CisKKwljb3VudCA9IHJldHJpZXM7CisJd2hpbGUgKGNvdW50ICYmIChyZWdyKERGQ01FTUNUTCkgJiAweDEpKQorCQljb3VudC0tOworCisJaWYgKCFjb3VudCkgeworCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgImRlZmVjdCB0YWJsZSB3cml0ZSB0aW1lb3V0ICEhIVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGkgPSAxOyBpIDwgdmRmYy0+bnVtX3ZkZWZlY3RzOyBpKyspIHsKKwkJcmVndyh2ZGZjLT50YWJsZVtpXS5wb3NfdmVydCwgREZDTUVNMCk7CisJCXJlZ3codmRmYy0+dGFibGVbaV0ucG9zX2hvcnosIERGQ01FTTEpOworCQlpZiAodmRmYy0+Y29ycl9tb2RlID09IElTSUZfVkRGQ19OT1JNQUwgfHwKKwkJICAgIHZkZmMtPmNvcnJfbW9kZSA9PSBJU0lGX1ZERkNfSE9SWl9JTlRFUlBPTF9JRl9TQVQpIHsKKwkJCXJlZ3codmRmYy0+dGFibGVbaV0ubGV2ZWxfYXRfcG9zLCBERkNNRU0yKTsKKwkJCXJlZ3codmRmYy0+dGFibGVbaV0ubGV2ZWxfdXBfcGl4ZWxzLCBERkNNRU0zKTsKKwkJCXJlZ3codmRmYy0+dGFibGVbaV0ubGV2ZWxfbG93X3BpeGVscywgREZDTUVNNCk7CisJCX0KKwkJdmFsID0gcmVncihERkNNRU1DVEwpOworCQkvKiBjbGVhciBERkNNQVJTVCBhbmQgc2V0IERGQ01XUiAqLworCQl2YWwgJj0gfkJJVChJU0lGX0RGQ01FTUNUTF9ERkNNQVJTVF9TSElGVCk7CisJCXZhbCB8PSAxOworCQlyZWd3KHZhbCwgREZDTUVNQ1RMKTsKKworCQljb3VudCA9IHJldHJpZXM7CisJCXdoaWxlIChjb3VudCAmJiAocmVncihERkNNRU1DVEwpICYgMHgxKSkKKwkJCWNvdW50LS07CisKKwkJaWYgKCFjb3VudCkgeworCQkJZGV2X2Vycihpc2lmX2NmZy5kZXYsCisJCQkJImRlZmVjdCB0YWJsZSB3cml0ZSB0aW1lb3V0ICEhIVxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJaWYgKHZkZmMtPm51bV92ZGVmZWN0cyA8IElTSUZfVkRGQ19UQUJMRV9TSVpFKSB7CisJCS8qIEV4dHJhIGN5Y2xlIG5lZWRlZCAqLworCQlyZWd3KDAsIERGQ01FTTApOworCQlyZWd3KDB4MUZGRiwgREZDTUVNMSk7CisJCXJlZ3coMSwgREZDTUVNQ1RMKTsKKwl9CisKKwkvKiBlbmFibGUgVkRGQyAqLworCXJlZ19tb2RpZnkoKDEgPDwgSVNJRl9WREZDX0VOX1NISUZUKSwgKDEgPDwgSVNJRl9WREZDX0VOX1NISUZUKSwKKwkJICAgREZDQ1RMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaXNpZl9jb25maWdfY3NjKHN0cnVjdCBpc2lmX2RmX2NzYyAqZGZfY3NjKQoreworCXUzMiB2YWwxID0gMCwgdmFsMiA9IDAsIGk7CisKKwlpZiAoIWRmX2NzYy0+Y3NjLmVuKSB7CisJCXJlZ3coMCwgQ1NDQ1RMKTsKKwkJcmV0dXJuOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgSVNJRl9DU0NfTlVNX0NPRUZGOyBpKyspIHsKKwkJaWYgKChpICUgMikgPT0gMCkgeworCQkJLyogQ1NDTSAtIExTQiAqLworCQkJdmFsMSA9IChkZl9jc2MtPmNzYy5jb2VmZltpXS5pbnRlZ2VyIDw8CisJCQkJSVNJRl9DU0NfQ09FRl9JTlRFR19TSElGVCkgfAorCQkJCWRmX2NzYy0+Y3NjLmNvZWZmW2ldLmRlY2ltYWw7CisJCX0gZWxzZSB7CisKKwkJCS8qIENTQ00gLSBNU0IgKi8KKwkJCXZhbDIgPSAoZGZfY3NjLT5jc2MuY29lZmZbaV0uaW50ZWdlciA8PAorCQkJCUlTSUZfQ1NDX0NPRUZfSU5URUdfU0hJRlQpIHwKKwkJCQlkZl9jc2MtPmNzYy5jb2VmZltpXS5kZWNpbWFsOworCQkJdmFsMiA8PD0gSVNJRl9DU0NNX01TQl9TSElGVDsKKwkJCXZhbDIgfD0gdmFsMTsKKwkJCXJlZ3codmFsMiwgKENTQ00wICsgKChpIC0gMSkgPDwgMSkpKTsKKwkJfQorCX0KKworCS8qIHByb2dyYW0gdGhlIGFjdGl2ZSBhcmVhICovCisJcmVndyhkZl9jc2MtPnN0YXJ0X3BpeCwgRk1UU1BIKTsKKwkvKgorCSAqIG9uZSBleHRyYSBwaXhlbCBhcyByZXF1aXJlZCBmb3IgQ1NDLiBBY3R1YWxseSBudW1iZXIgb2YKKwkgKiBwaXhlbCAtIDEgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgaW4gdGhpcyByZWdpc3Rlci4gU28gd2UKKwkgKiBuZWVkIHRvIHN1YnRyYWN0IDEgYmVmb3JlIHdyaXRpbmcgdG8gRk1UU1BILCBidXQgd2Ugd2lsbAorCSAqIG5vdCBkbyB0aGlzIHNpbmNlIGNzYyByZXF1aXJlcyBvbmUgZXh0cmEgcGl4ZWwKKwkgKi8KKwlyZWd3KGRmX2NzYy0+bnVtX3BpeGVscywgRk1UTE5IKTsKKwlyZWd3KGRmX2NzYy0+c3RhcnRfbGluZSwgRk1UU0xWKTsKKwkvKgorCSAqIG9uZSBleHRyYSBsaW5lIGFzIHJlcXVpcmVkIGZvciBDU0MuIFNlZSByZWFzb24gZG9jdW1lbnRlZCBmb3IKKwkgKiBudW1fcGl4ZWxzCisJICovCisJcmVndyhkZl9jc2MtPm51bV9saW5lcywgRk1UTE5WKTsKKworCS8qIEVuYWJsZSBDU0MgKi8KKwlyZWd3KDEsIENTQ0NUTCk7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9jb25maWdfcmF3KHZvaWQpCit7CisJc3RydWN0IGlzaWZfcGFyYW1zX3JhdyAqcGFyYW1zID0gJmlzaWZfY2ZnLmJheWVyOworCXN0cnVjdCBpc2lmX2NvbmZpZ19wYXJhbXNfcmF3ICptb2R1bGVfcGFyYW1zID0KKwkJJmlzaWZfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXM7CisJc3RydWN0IHZwc3NfcGdfZnJhbWVfc2l6ZSBmcmFtZV9zaXplOworCXN0cnVjdCB2cHNzX3N5bmNfcG9sIHN5bmM7CisJdTMyIHZhbDsKKworCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiXG5TdGFydGluZyBpc2lmX2NvbmZpZ19yYXcuLlxuIik7CisKKwkvKgorCSAqIENvbmZpZ3VyZSBDQ0RDRkcgcmVnaXN0ZXI6LQorCSAqIFNldCBDQ0QgTm90IHRvIHN3YXAgaW5wdXQgc2luY2UgaW5wdXQgaXMgUkFXIGRhdGEKKwkgKiBTZXQgRklEIGRldGVjdGlvbiBmdW5jdGlvbiB0byBMYXRjaCBhdCBWLVN5bmMKKwkgKiBTZXQgV0VOTE9HIC0gaXNpZiB2YWxpZCBhcmVhCisJICogU2V0IFRSR1NFTAorCSAqIFNldCBFWFRSRworCSAqIFBhY2tlZCB0byA4IG9yIDE2IGJpdHMKKwkgKi8KKworCXZhbCA9IElTSUZfWUNJTlNXUF9SQVcgfCBJU0lGX0NDRENGR19GSURNRF9MQVRDSF9WU1lOQyB8CisJCUlTSUZfQ0NEQ0ZHX1dFTkxPR19BTkQgfCBJU0lGX0NDRENGR19UUkdTRUxfV0VOIHwKKwkJSVNJRl9DQ0RDRkdfRVhUUkdfRElTQUJMRSB8IGlzaWZfY2ZnLmRhdGFfcGFjazsKKworCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiV3JpdGluZyAweCV4IHRvIC4uLkNDRENGRyBcbiIsIHZhbCk7CisJcmVndyh2YWwsIENDRENGRyk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSB0aGUgdmVydGljYWwgc3luYyBwb2xhcml0eShNT0RFU0VULlZEUE9MKQorCSAqIENvbmZpZ3VyZSB0aGUgaG9yaXpvbnRhbCBzeW5jIHBvbGFyaXR5IChNT0RFU0VULkhEUE9MKQorCSAqIENvbmZpZ3VyZSBmcmFtZSBpZCBwb2xhcml0eSAoTU9ERVNFVC5GTERQT0wpCisJICogQ29uZmlndXJlIGRhdGEgcG9sYXJpdHkKKwkgKiBDb25maWd1cmUgRXh0ZXJuYWwgV0VOIFNlbGVjdGlvbgorCSAqIENvbmZpZ3VyZSBmcmFtZSBmb3JtYXQocHJvZ3Jlc3NpdmUgb3IgaW50ZXJsYWNlKQorCSAqIENvbmZpZ3VyZSBwaXhlbCBmb3JtYXQgKElucHV0IG1vZGUpCisJICogQ29uZmlndXJlIHRoZSBkYXRhIHNoaWZ0CisJICovCisKKwl2YWwgPSBJU0lGX1ZESERPVVRfSU5QVVQgfCAocGFyYW1zLT52ZF9wb2wgPDwgSVNJRl9WRF9QT0xfU0hJRlQpIHwKKwkJKHBhcmFtcy0+aGRfcG9sIDw8IElTSUZfSERfUE9MX1NISUZUKSB8CisJCShwYXJhbXMtPmZpZF9wb2wgPDwgSVNJRl9GSURfUE9MX1NISUZUKSB8CisJCShJU0lGX0RBVEFQT0xfTk9STUFMIDw8IElTSUZfREFUQVBPTF9TSElGVCkgfAorCQkoSVNJRl9FWFdFTl9ESVNBQkxFIDw8IElTSUZfRVhXRU5fU0hJRlQpIHwKKwkJKHBhcmFtcy0+ZnJtX2ZtdCA8PCBJU0lGX0ZSTV9GTVRfU0hJRlQpIHwKKwkJKHBhcmFtcy0+cGl4X2ZtdCA8PCBJU0lGX0lOUFVUX1NISUZUKSB8CisJCShwYXJhbXMtPmNvbmZpZ19wYXJhbXMuZGF0YV9zaGlmdCA8PCBJU0lGX0RBVEFTRlRfU0hJRlQpOworCisJcmVndyh2YWwsIE1PREVTRVQpOworCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiV3JpdGluZyAweCV4IHRvIE1PREVTRVQuLi5cbiIsIHZhbCk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSBHQU1NQVdEIHJlZ2lzdGVyCisJICogQ0ZBIHBhdHRlcm4gc2V0dGluZworCSAqLworCXZhbCA9IHBhcmFtcy0+Y2ZhX3BhdCA8PCBJU0lGX0dBTU1BV0RfQ0ZBX1NISUZUOworCisJLyogR2FtbWEgbXNiICovCisJaWYgKG1vZHVsZV9wYXJhbXMtPmNvbXByZXNzLmFsZyA9PSBJU0lGX0FMQVcpCisJCXZhbCB8PSBJU0lGX0FMQVdfRU5BQkxFOworCisJdmFsIHw9IChwYXJhbXMtPmRhdGFfbXNiIDw8IElTSUZfQUxBV19HQU1BX1dEX1NISUZUKTsKKwlyZWd3KHZhbCwgQ0dBTU1BV0QpOworCisJLyogQ29uZmlndXJlIERQQ00gY29tcHJlc3Npb24gc2V0dGluZ3MgKi8KKwlpZiAobW9kdWxlX3BhcmFtcy0+Y29tcHJlc3MuYWxnID09IElTSUZfRFBDTSkgeworCQl2YWwgPSAgQklUKElTSUZfRFBDTV9FTl9TSElGVCkgfAorCQkgICAgICAgKG1vZHVsZV9wYXJhbXMtPmNvbXByZXNzLnByZWQgPDwKKwkJICAgICAgIElTSUZfRFBDTV9QUkVESUNUT1JfU0hJRlQpOworCX0KKworCXJlZ3codmFsLCBNSVNDKTsKKworCS8qIENvbmZpZ3VyZSBHYWluICYgT2Zmc2V0ICovCisJaXNpZl9jb25maWdfZ2Fpbl9vZmZzZXQoKTsKKworCS8qIENvbmZpZ3VyZSBDb2xvciBwYXR0ZXJuICovCisJdmFsID0gKHBhcmFtcy0+Y29uZmlnX3BhcmFtcy5jb2xfcGF0X2ZpZWxkMC5vbG9wKSB8CisJICAgICAgKHBhcmFtcy0+Y29uZmlnX3BhcmFtcy5jb2xfcGF0X2ZpZWxkMC5vbGVwIDw8IDIpIHwKKwkgICAgICAocGFyYW1zLT5jb25maWdfcGFyYW1zLmNvbF9wYXRfZmllbGQwLmVsb3AgPDwgNCkgfAorCSAgICAgIChwYXJhbXMtPmNvbmZpZ19wYXJhbXMuY29sX3BhdF9maWVsZDAuZWxlcCA8PCA2KSB8CisJICAgICAgKHBhcmFtcy0+Y29uZmlnX3BhcmFtcy5jb2xfcGF0X2ZpZWxkMS5vbG9wIDw8IDgpIHwKKwkgICAgICAocGFyYW1zLT5jb25maWdfcGFyYW1zLmNvbF9wYXRfZmllbGQxLm9sZXAgPDwgMTApIHwKKwkgICAgICAocGFyYW1zLT5jb25maWdfcGFyYW1zLmNvbF9wYXRfZmllbGQxLmVsb3AgPDwgMTIpIHwKKwkgICAgICAocGFyYW1zLT5jb25maWdfcGFyYW1zLmNvbF9wYXRfZmllbGQxLmVsZXAgPDwgMTQpOworCXJlZ3codmFsLCBDQ09MUCk7CisJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJXcml0aW5nICV4IHRvIENDT0xQIC4uLlxuIiwgdmFsKTsKKworCS8qIENvbmZpZ3VyZSBIU0laRSByZWdpc3RlciAgKi8KKwl2YWwgPSAoISFwYXJhbXMtPmhvcnpfZmxpcF9lbikgPDwgSVNJRl9IU0laRV9GTElQX1NISUZUOworCisJLyogY2FsY3VsYXRlIGxpbmUgb2Zmc2V0IGluIDMyIGJ5dGVzIGJhc2VkIG9uIHBhY2sgdmFsdWUgKi8KKwlpZiAoaXNpZl9jZmcuZGF0YV9wYWNrID09IElTSUZfUEFDS184QklUKQorCQl2YWwgfD0gKChwYXJhbXMtPndpbi53aWR0aCArIDMxKSA+PiA1KTsKKwllbHNlIGlmIChpc2lmX2NmZy5kYXRhX3BhY2sgPT0gSVNJRl9QQUNLXzEyQklUKQorCQl2YWwgfD0gKCgocGFyYW1zLT53aW4ud2lkdGggKworCQkgICAgICAgKHBhcmFtcy0+d2luLndpZHRoID4+IDIpKSArIDMxKSA+PiA1KTsKKwllbHNlCisJCXZhbCB8PSAoKChwYXJhbXMtPndpbi53aWR0aCAqIDIpICsgMzEpID4+IDUpOworCXJlZ3codmFsLCBIU0laRSk7CisKKwkvKiBDb25maWd1cmUgU0RPRlNUIHJlZ2lzdGVyICAqLworCWlmIChwYXJhbXMtPmZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCkgeworCQlpZiAocGFyYW1zLT5pbWFnZV9pbnZlcnRfZW4pIHsKKwkJCS8qIEZvciBpbnRlcmxhY2UgaW52ZXJzZSBtb2RlICovCisJCQlyZWd3KDB4NEI2RCwgU0RPRlNUKTsKKwkJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiV3JpdGluZyAweDRCNkQgdG8gU0RPRlNULi4uXG4iKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEZvciBpbnRlcmxhY2Ugbm9uIGludmVyc2UgbW9kZSAqLworCQkJcmVndygweDBCNkQsIFNET0ZTVCk7CisJCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIldyaXRpbmcgMHgwQjZEIHRvIFNET0ZTVC4uLlxuIik7CisJCX0KKwl9IGVsc2UgaWYgKHBhcmFtcy0+ZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSkgeworCQlpZiAocGFyYW1zLT5pbWFnZV9pbnZlcnRfZW4pIHsKKwkJCS8qIEZvciBwcm9ncmVzc2l2ZSBpbnZlcnNlIG1vZGUgKi8KKwkJCXJlZ3coMHg0MDAwLCBTRE9GU1QpOworCQkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJXcml0aW5nIDB4NDAwMCB0byBTRE9GU1QuLi5cbiIpOworCQl9IGVsc2UgeworCQkJLyogRm9yIHByb2dyZXNzaXZlIG5vbiBpbnZlcnNlIG1vZGUgKi8KKwkJCXJlZ3coMHgwMDAwLCBTRE9GU1QpOworCQkJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJXcml0aW5nIDB4MDAwMCB0byBTRE9GU1QuLi5cbiIpOworCQl9CisJfQorCisJLyogQ29uZmlndXJlIHZpZGVvIHdpbmRvdyAqLworCWlzaWZfc2V0d2luKCZwYXJhbXMtPndpbiwgcGFyYW1zLT5mcm1fZm10LCAxKTsKKworCS8qIENvbmZpZ3VyZSBCbGFjayBDbGFtcCAqLworCWlzaWZfY29uZmlnX2JjbGFtcCgmbW9kdWxlX3BhcmFtcy0+YmNsYW1wKTsKKworCS8qIENvbmZpZ3VyZSBWZXJ0aWNhbCBEZWZlY3Rpb24gUGl4ZWwgQ29ycmVjdGlvbiAqLworCWlmIChpc2lmX2NvbmZpZ19kZmMoJm1vZHVsZV9wYXJhbXMtPmRmYykgPCAwKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICghbW9kdWxlX3BhcmFtcy0+ZGZfY3NjLmRmX29yX2NzYykKKwkJLyogQ29uZmlndXJlIENvbG9yIFNwYWNlIENvbnZlcnNpb24gKi8KKwkJaXNpZl9jb25maWdfY3NjKCZtb2R1bGVfcGFyYW1zLT5kZl9jc2MpOworCisJaXNpZl9jb25maWdfbGluZWFyaXphdGlvbigmbW9kdWxlX3BhcmFtcy0+bGluZWFyaXplKTsKKworCS8qIENvbmZpZ3VyZSBDdWxsaW5nICovCisJaXNpZl9jb25maWdfY3VsbGluZygmbW9kdWxlX3BhcmFtcy0+Y3VsbGluZyk7CisKKwkvKiBDb25maWd1cmUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgb2Zmc2V0cyhERkMsTFNDLEdhaW4pICovCisJcmVndyhtb2R1bGVfcGFyYW1zLT5ob3J6X29mZnNldCwgREFUQUhPRlNUKTsKKwlyZWd3KG1vZHVsZV9wYXJhbXMtPnZlcnRfb2Zmc2V0LCBEQVRBVk9GU1QpOworCisJLyogU2V0dXAgdGVzdCBwYXR0ZXJuIGlmIGVuYWJsZWQgKi8KKwlpZiAocGFyYW1zLT5jb25maWdfcGFyYW1zLnRlc3RfcGF0X2dlbikgeworCQkvKiBVc2UgdGhlIEhEL1ZEIHBvbCBzZXR0aW5ncyBmcm9tIHVzZXIgKi8KKwkJc3luYy5jY2RwZ19oZHBvbCA9IHBhcmFtcy0+aGRfcG9sOworCQlzeW5jLmNjZHBnX3ZkcG9sID0gcGFyYW1zLT52ZF9wb2w7CisJCWRtMzY1X3Zwc3Nfc2V0X3N5bmNfcG9sKHN5bmMpOworCQlmcmFtZV9zaXplLmhscGZyID0gaXNpZl9jZmcuYmF5ZXIud2luLndpZHRoOworCQlmcmFtZV9zaXplLnBwbGVuID0gaXNpZl9jZmcuYmF5ZXIud2luLmhlaWdodDsKKwkJZG0zNjVfdnBzc19zZXRfcGdfZnJhbWVfc2l6ZShmcmFtZV9zaXplKTsKKwkJdnBzc19zZWxlY3RfY2NkY19zb3VyY2UoVlBTU19QR0xQQkspOworCX0KKworCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiXG5FbmQgb2YgaXNpZl9jb25maWdfeWNiY3IuLi5cbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzaWZfc2V0X2J1ZnR5cGUoZW51bSBjY2RjX2J1ZnR5cGUgYnVmX3R5cGUpCit7CisJaWYgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWlzaWZfY2ZnLmJheWVyLmJ1Zl90eXBlID0gYnVmX3R5cGU7CisJZWxzZQorCQlpc2lmX2NmZy55Y2Jjci5idWZfdHlwZSA9IGJ1Zl90eXBlOworCisJcmV0dXJuIDA7CisKK30KK3N0YXRpYyBlbnVtIGNjZGNfYnVmdHlwZSBpc2lmX2dldF9idWZ0eXBlKHZvaWQpCit7CisJaWYgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCXJldHVybiBpc2lmX2NmZy5iYXllci5idWZfdHlwZTsKKworCXJldHVybiBpc2lmX2NmZy55Y2Jjci5idWZfdHlwZTsKK30KKworc3RhdGljIGludCBpc2lmX2VudW1fcGl4KHUzMiAqcGl4LCBpbnQgaSkKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJCWlmIChpIDwgQVJSQVlfU0laRShpc2lmX3Jhd19iYXllcl9waXhfZm9ybWF0cykpIHsKKwkJCSpwaXggPSBpc2lmX3Jhd19iYXllcl9waXhfZm9ybWF0c1tpXTsKKwkJCXJldCA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoaSA8IEFSUkFZX1NJWkUoaXNpZl9yYXdfeXV2X3BpeF9mb3JtYXRzKSkgeworCQkJKnBpeCA9IGlzaWZfcmF3X3l1dl9waXhfZm9ybWF0c1tpXTsKKwkJCXJldCA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlzaWZfc2V0X3BpeGVsX2Zvcm1hdCh1bnNpZ25lZCBpbnQgcGl4Zm10KQoreworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJCWlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCkgeworCQkJaWYgKChpc2lmX2NmZy5iYXllci5jb25maWdfcGFyYW1zLmNvbXByZXNzLmFsZyAhPQorCQkJICAgICBJU0lGX0FMQVcpICYmCisJCQkgICAgKGlzaWZfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuY29tcHJlc3MuYWxnICE9CisJCQkgICAgIElTSUZfRFBDTSkpIHsKKwkJCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwKKwkJCQkJIkVpdGhlciBjb25maWd1cmUgQS1MYXcgb3IgRFBDTVxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpc2lmX2NmZy5kYXRhX3BhY2sgPSBJU0lGX1BBQ0tfOEJJVDsKKwkJfSBlbHNlIGlmIChwaXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSMTYpIHsKKwkJCWlzaWZfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuY29tcHJlc3MuYWxnID0KKwkJCQkJSVNJRl9OT19DT01QUkVTU0lPTjsKKwkJCWlzaWZfY2ZnLmRhdGFfcGFjayA9IElTSUZfUEFDS18xNkJJVDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaXNpZl9jZmcuYmF5ZXIucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVzsKKwl9IGVsc2UgeworCQlpZiAocGl4Zm10ID09IFY0TDJfUElYX0ZNVF9ZVVlWKQorCQkJaXNpZl9jZmcueWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1I7CisJCWVsc2UgaWYgKHBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfVVlWWSkKKwkJCWlzaWZfY2ZnLnljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZOworCQllbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaXNpZl9jZmcuZGF0YV9wYWNrID0gSVNJRl9QQUNLXzhCSVQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGlzaWZfZ2V0X3BpeGVsX2Zvcm1hdCh2b2lkKQoreworCXUzMiBwaXhmbXQ7CisKKwlpZiAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJaWYgKGlzaWZfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuY29tcHJlc3MuYWxnID09IElTSUZfQUxBVyB8fAorCQkgICAgaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5jb21wcmVzcy5hbGcgPT0gSVNJRl9EUENNKQorCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1NCR0dSODsKKwkJZWxzZQorCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1NCR0dSMTY7CisJZWxzZSB7CisJCWlmIChpc2lmX2NmZy55Y2Jjci5waXhfb3JkZXIgPT0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1IpCisJCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKKwkJZWxzZQorCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1VZVlk7CisJfQorCXJldHVybiBwaXhmbXQ7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9zZXRfaW1hZ2Vfd2luZG93KHN0cnVjdCB2NGwyX3JlY3QgKndpbikKK3sKKwlpZiAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCQlpc2lmX2NmZy5iYXllci53aW4udG9wID0gd2luLT50b3A7CisJCWlzaWZfY2ZnLmJheWVyLndpbi5sZWZ0ID0gd2luLT5sZWZ0OworCQlpc2lmX2NmZy5iYXllci53aW4ud2lkdGggPSB3aW4tPndpZHRoOworCQlpc2lmX2NmZy5iYXllci53aW4uaGVpZ2h0ID0gd2luLT5oZWlnaHQ7CisJfSBlbHNlIHsKKwkJaXNpZl9jZmcueWNiY3Iud2luLnRvcCA9IHdpbi0+dG9wOworCQlpc2lmX2NmZy55Y2Jjci53aW4ubGVmdCA9IHdpbi0+bGVmdDsKKwkJaXNpZl9jZmcueWNiY3Iud2luLndpZHRoID0gd2luLT53aWR0aDsKKwkJaXNpZl9jZmcueWNiY3Iud2luLmhlaWdodCA9IHdpbi0+aGVpZ2h0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaXNpZl9nZXRfaW1hZ2Vfd2luZG93KHN0cnVjdCB2NGwyX3JlY3QgKndpbikKK3sKKwlpZiAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJKndpbiA9IGlzaWZfY2ZnLmJheWVyLndpbjsKKwllbHNlCisJCSp3aW4gPSBpc2lmX2NmZy55Y2Jjci53aW47Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXNpZl9nZXRfbGluZV9sZW5ndGgodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJaWYgKGlzaWZfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwkJaWYgKGlzaWZfY2ZnLmRhdGFfcGFjayA9PSBJU0lGX1BBQ0tfOEJJVCkKKwkJCWxlbiA9ICgoaXNpZl9jZmcuYmF5ZXIud2luLndpZHRoKSk7CisJCWVsc2UgaWYgKGlzaWZfY2ZnLmRhdGFfcGFjayA9PSBJU0lGX1BBQ0tfMTJCSVQpCisJCQlsZW4gPSAoKChpc2lmX2NmZy5iYXllci53aW4ud2lkdGggKiAyKSArCisJCQkJIChpc2lmX2NmZy5iYXllci53aW4ud2lkdGggPj4gMikpKTsKKwkJZWxzZQorCQkJbGVuID0gKCgoaXNpZl9jZmcuYmF5ZXIud2luLndpZHRoICogMikpKTsKKwl9IGVsc2UKKwkJbGVuID0gKCgoaXNpZl9jZmcueWNiY3Iud2luLndpZHRoICogMikpKTsKKwlyZXR1cm4gQUxJR04obGVuLCAzMik7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9zZXRfZnJhbWVfZm9ybWF0KGVudW0gY2NkY19mcm1mbXQgZnJtX2ZtdCkKK3sKKwlpZiAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikKKwkJaXNpZl9jZmcuYmF5ZXIuZnJtX2ZtdCA9IGZybV9mbXQ7CisJZWxzZQorCQlpc2lmX2NmZy55Y2Jjci5mcm1fZm10ID0gZnJtX2ZtdDsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBlbnVtIGNjZGNfZnJtZm10IGlzaWZfZ2V0X2ZyYW1lX2Zvcm1hdCh2b2lkKQoreworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gaXNpZl9jZmcuYmF5ZXIuZnJtX2ZtdDsKKwlyZXR1cm4gaXNpZl9jZmcueWNiY3IuZnJtX2ZtdDsKK30KKworc3RhdGljIGludCBpc2lmX2dldGZpZCh2b2lkKQoreworCXJldHVybiAocmVncihNT0RFU0VUKSA+PiAxNSkgJiAweDE7Cit9CisKKy8qIG1pc2Mgb3BlcmF0aW9ucyAqLworc3RhdGljIHZvaWQgaXNpZl9zZXRmYmFkZHIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJlZ3coKGFkZHIgPj4gMjEpICYgMHgwN2ZmLCBDQURVKTsKKwlyZWd3KChhZGRyID4+IDUpICYgMHgwZmZmZiwgQ0FETCk7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9zZXRfaHdfaWZfcGFyYW1zKHN0cnVjdCB2cGZlX2h3X2lmX3BhcmFtICpwYXJhbXMpCit7CisJaXNpZl9jZmcuaWZfdHlwZSA9IHBhcmFtcy0+aWZfdHlwZTsKKworCXN3aXRjaCAocGFyYW1zLT5pZl90eXBlKSB7CisJY2FzZSBWUEZFX0JUNjU2OgorCWNhc2UgVlBGRV9CVDY1Nl8xMEJJVDoKKwljYXNlIFZQRkVfWUNCQ1JfU1lOQ184OgorCQlpc2lmX2NmZy55Y2Jjci5waXhfZm10ID0gQ0NEQ19QSVhGTVRfWUNCQ1JfOEJJVDsKKwkJaXNpZl9jZmcueWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlk7CisJCWJyZWFrOworCWNhc2UgVlBGRV9CVDExMjA6CisJY2FzZSBWUEZFX1lDQkNSX1NZTkNfMTY6CisJCWlzaWZfY2ZnLnljYmNyLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9ZQ0JDUl8xNkJJVDsKKwkJaXNpZl9jZmcueWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlk7CisJCWJyZWFrOworCWNhc2UgVlBGRV9SQVdfQkFZRVI6CisJCWlzaWZfY2ZnLmJheWVyLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiSW52YWxpZCBpbnRlcmZhY2UgdHlwZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY29uZmlndXJlIElTSUYgZm9yIFlDYkNyIHBhcmFtZXRlcnMuICovCitzdGF0aWMgaW50IGlzaWZfY29uZmlnX3ljYmNyKHZvaWQpCit7CisJc3RydWN0IGlzaWZfeWNiY3JfY29uZmlnICpwYXJhbXMgPSAmaXNpZl9jZmcueWNiY3I7CisJc3RydWN0IHZwc3NfcGdfZnJhbWVfc2l6ZSBmcmFtZV9zaXplOworCXUzMiBtb2Rlc2V0ID0gMCwgY2NkY2ZnID0gMDsKKwlzdHJ1Y3QgdnBzc19zeW5jX3BvbCBzeW5jOworCisJZGV2X2RiZyhpc2lmX2NmZy5kZXYsICJcblN0YXJ0aW5nIGlzaWZfY29uZmlnX3ljYmNyLi4uIik7CisKKwkvKiBjb25maWd1cmUgcGl4ZWwgZm9ybWF0IG9yIGlucHV0IG1vZGUgKi8KKwltb2Rlc2V0ID0gbW9kZXNldCB8IChwYXJhbXMtPnBpeF9mbXQgPDwgSVNJRl9JTlBVVF9TSElGVCkgfAorCQkgIChwYXJhbXMtPmZybV9mbXQgPDwgSVNJRl9GUk1fRk1UX1NISUZUKSB8CisJCSAgKHBhcmFtcy0+ZmlkX3BvbCA8PCBJU0lGX0ZJRF9QT0xfU0hJRlQpIHwKKwkJICAocGFyYW1zLT5oZF9wb2wgPDwgSVNJRl9IRF9QT0xfU0hJRlQpIHwKKwkJICAocGFyYW1zLT52ZF9wb2wgPDwgSVNJRl9WRF9QT0xfU0hJRlQpOworCisJLyogcGFjayB0aGUgZGF0YSB0byA4LWJpdCBJU0lGQ0ZHICovCisJc3dpdGNoIChpc2lmX2NmZy5pZl90eXBlKSB7CisJY2FzZSBWUEZFX0JUNjU2OgorCQlpZiAocGFyYW1zLT5waXhfZm10ICE9IENDRENfUElYRk1UX1lDQkNSXzhCSVQpIHsKKwkJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiSW52YWxpZCBwaXhfZm10KGlucHV0IG1vZGUpXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCW1vZGVzZXQgfD0gKFZQRkVfUElOUE9MX05FR0FUSVZFIDw8IElTSUZfVkRfUE9MX1NISUZUKTsKKwkJcmVndygzLCBSRUM2NTZJRik7CisJCWNjZGNmZyA9IGNjZGNmZyB8IElTSUZfREFUQV9QQUNLOCB8IElTSUZfWUNJTlNXUF9ZQ0JDUjsKKwkJYnJlYWs7CisJY2FzZSBWUEZFX0JUNjU2XzEwQklUOgorCQlpZiAocGFyYW1zLT5waXhfZm10ICE9IENDRENfUElYRk1UX1lDQkNSXzhCSVQpIHsKKwkJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiSW52YWxpZCBwaXhfZm10KGlucHV0IG1vZGUpXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCS8qIHNldHVwIEJULjY1NiwgZW1iZWRkZWQgc3luYyAgKi8KKwkJcmVndygzLCBSRUM2NTZJRik7CisJCS8qIGVuYWJsZSAxMCBiaXQgbW9kZSBpbiBjY2RjZmcgKi8KKwkJY2NkY2ZnID0gY2NkY2ZnIHwgSVNJRl9EQVRBX1BBQ0s4IHwgSVNJRl9ZQ0lOU1dQX1lDQkNSIHwKKwkJCUlTSUZfQlc2NTZfRU5BQkxFOworCQlicmVhazsKKwljYXNlIFZQRkVfQlQxMTIwOgorCQlpZiAocGFyYW1zLT5waXhfZm10ICE9IENDRENfUElYRk1UX1lDQkNSXzE2QklUKSB7CisJCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIkludmFsaWQgcGl4X2ZtdChpbnB1dCBtb2RlKVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlyZWd3KDMsIFJFQzY1NklGKTsKKwkJYnJlYWs7CisKKwljYXNlIFZQRkVfWUNCQ1JfU1lOQ184OgorCQljY2RjZmcgfD0gSVNJRl9EQVRBX1BBQ0s4OworCQljY2RjZmcgfD0gSVNJRl9ZQ0lOU1dQX1lDQkNSOworCQlpZiAocGFyYW1zLT5waXhfZm10ICE9IENDRENfUElYRk1UX1lDQkNSXzhCSVQpIHsKKwkJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiSW52YWxpZCBwaXhfZm10KGlucHV0IG1vZGUpXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzE2OgorCQlpZiAocGFyYW1zLT5waXhfZm10ICE9IENDRENfUElYRk1UX1lDQkNSXzE2QklUKSB7CisJCQlkZXZfZGJnKGlzaWZfY2ZnLmRldiwgIkludmFsaWQgcGl4X2ZtdChpbnB1dCBtb2RlKVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBzaG91bGQgbmV2ZXIgY29tZSBoZXJlICovCisJCWRldl9kYmcoaXNpZl9jZmcuZGV2LCAiSW52YWxpZCBpbnRlcmZhY2UgdHlwZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJlZ3cobW9kZXNldCwgTU9ERVNFVCk7CisKKwkvKiBTZXQgdXAgcGl4IG9yZGVyICovCisJY2NkY2ZnIHw9IHBhcmFtcy0+cGl4X29yZGVyIDw8IElTSUZfUElYX09SREVSX1NISUZUOworCisJcmVndyhjY2RjZmcsIENDRENGRyk7CisKKwkvKiBjb25maWd1cmUgdmlkZW8gd2luZG93ICovCisJaWYgKChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfQlQxMTIwKSB8fAorCSAgICAoaXNpZl9jZmcuaWZfdHlwZSA9PSBWUEZFX1lDQkNSX1NZTkNfMTYpKQorCQlpc2lmX3NldHdpbigmcGFyYW1zLT53aW4sIHBhcmFtcy0+ZnJtX2ZtdCwgMSk7CisJZWxzZQorCQlpc2lmX3NldHdpbigmcGFyYW1zLT53aW4sIHBhcmFtcy0+ZnJtX2ZtdCwgMik7CisKKwkvKgorCSAqIGNvbmZpZ3VyZSB0aGUgaG9yaXpvbnRhbCBsaW5lIG9mZnNldAorCSAqIHRoaXMgaXMgZG9uZSBieSByb3VuZGluZyB1cCB3aWR0aCB0byBhIG11bHRpcGxlIG9mIDE2IHBpeGVscworCSAqIGFuZCBtdWx0aXBseSBieSB0d28gdG8gYWNjb3VudCBmb3IgeTpjYjpjciA0OjI6MiBkYXRhCisJICovCisJcmVndygoKCgocGFyYW1zLT53aW4ud2lkdGggKiAyKSArIDMxKSAmIDB4ZmZmZmZmZTApID4+IDUpLCBIU0laRSk7CisKKwkvKiBjb25maWd1cmUgdGhlIG1lbW9yeSBsaW5lIG9mZnNldCAqLworCWlmICgocGFyYW1zLT5mcm1fZm10ID09IENDRENfRlJNRk1UX0lOVEVSTEFDRUQpICYmCisJICAgIChwYXJhbXMtPmJ1Zl90eXBlID09IENDRENfQlVGVFlQRV9GTERfSU5URVJMRUFWRUQpKQorCQkvKiB0d28gZmllbGRzIGFyZSBpbnRlcmxlYXZlZCBpbiBtZW1vcnkgKi8KKwkJcmVndygweDAwMDAwMjQ5LCBTRE9GU1QpOworCisJLyogU2V0dXAgdGVzdCBwYXR0ZXJuIGlmIGVuYWJsZWQgKi8KKwlpZiAoaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy50ZXN0X3BhdF9nZW4pIHsKKwkJc3luYy5jY2RwZ19oZHBvbCA9IHBhcmFtcy0+aGRfcG9sOworCQlzeW5jLmNjZHBnX3ZkcG9sID0gcGFyYW1zLT52ZF9wb2w7CisJCWRtMzY1X3Zwc3Nfc2V0X3N5bmNfcG9sKHN5bmMpOworCQlkbTM2NV92cHNzX3NldF9wZ19mcmFtZV9zaXplKGZyYW1lX3NpemUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc2lmX2NvbmZpZ3VyZSh2b2lkKQoreworCWlmIChpc2lmX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gaXNpZl9jb25maWdfcmF3KCk7CisJcmV0dXJuIGlzaWZfY29uZmlnX3ljYmNyKCk7Cit9CisKK3N0YXRpYyBpbnQgaXNpZl9jbG9zZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCit7CisJLyogY29weSBkZWZhdWx0cyB0byBtb2R1bGUgcGFyYW1zICovCisJaXNpZl9jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcyA9IGlzaWZfY29uZmlnX2RlZmF1bHRzOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNjZGNfaHdfZGV2aWNlIGlzaWZfaHdfZGV2ID0geworCS5uYW1lID0gIklTSUYiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5od19vcHMgPSB7CisJCS5vcGVuID0gaXNpZl9vcGVuLAorCQkuY2xvc2UgPSBpc2lmX2Nsb3NlLAorCQkuZW5hYmxlID0gaXNpZl9lbmFibGUsCisJCS5lbmFibGVfb3V0X3RvX3NkcmFtID0gaXNpZl9lbmFibGVfb3V0cHV0X3RvX3NkcmFtLAorCQkuc2V0X2h3X2lmX3BhcmFtcyA9IGlzaWZfc2V0X2h3X2lmX3BhcmFtcywKKwkJLmNvbmZpZ3VyZSA9IGlzaWZfY29uZmlndXJlLAorCQkuc2V0X2J1ZnR5cGUgPSBpc2lmX3NldF9idWZ0eXBlLAorCQkuZ2V0X2J1ZnR5cGUgPSBpc2lmX2dldF9idWZ0eXBlLAorCQkuZW51bV9waXggPSBpc2lmX2VudW1fcGl4LAorCQkuc2V0X3BpeGVsX2Zvcm1hdCA9IGlzaWZfc2V0X3BpeGVsX2Zvcm1hdCwKKwkJLmdldF9waXhlbF9mb3JtYXQgPSBpc2lmX2dldF9waXhlbF9mb3JtYXQsCisJCS5zZXRfZnJhbWVfZm9ybWF0ID0gaXNpZl9zZXRfZnJhbWVfZm9ybWF0LAorCQkuZ2V0X2ZyYW1lX2Zvcm1hdCA9IGlzaWZfZ2V0X2ZyYW1lX2Zvcm1hdCwKKwkJLnNldF9pbWFnZV93aW5kb3cgPSBpc2lmX3NldF9pbWFnZV93aW5kb3csCisJCS5nZXRfaW1hZ2Vfd2luZG93ID0gaXNpZl9nZXRfaW1hZ2Vfd2luZG93LAorCQkuZ2V0X2xpbmVfbGVuZ3RoID0gaXNpZl9nZXRfbGluZV9sZW5ndGgsCisJCS5zZXRmYmFkZHIgPSBpc2lmX3NldGZiYWRkciwKKwkJLmdldGZpZCA9IGlzaWZfZ2V0ZmlkLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpc2lmX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdm9pZCAoKnNldHVwX3Bpbm11eCkodm9pZCk7CisJc3RydWN0IHJlc291cmNlCSpyZXM7CisJdm9pZCAqX19pb21lbSBhZGRyOworCWludCBzdGF0dXMgPSAwLCBpOworCisJLyoKKwkgKiBmaXJzdCB0cnkgdG8gcmVnaXN0ZXIgd2l0aCB2cGZlLiBJZiBub3QgY29ycmVjdCBwbGF0Zm9ybSwgdGhlbiB3ZQorCSAqIGRvbid0IGhhdmUgdG8gaW9tYXAKKwkgKi8KKwlzdGF0dXMgPSB2cGZlX3JlZ2lzdGVyX2NjZGNfZGV2aWNlKCZpc2lmX2h3X2Rldik7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwkvKiBHZXQgYW5kIGVuYWJsZSBNYXN0ZXIgY2xvY2sgKi8KKwlpc2lmX2NmZy5tY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibWFzdGVyIik7CisJaWYgKElTX0VSUihpc2lmX2NmZy5tY2xrKSkgeworCQlzdGF0dXMgPSBQVFJfRVJSKGlzaWZfY2ZnLm1jbGspOworCQlnb3RvIGZhaWxfbWNsazsKKwl9CisJaWYgKGNsa19lbmFibGUoaXNpZl9jZmcubWNsaykpIHsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX21jbGs7CisJfQorCisJLyogUGxhdGZvcm0gZGF0YSBob2xkcyBzZXR1cF9waW5tdXggZnVuY3Rpb24gcHRyICovCisJaWYgKE5VTEwgPT0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsX21jbGs7CisJfQorCXNldHVwX3Bpbm11eCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCS8qCisJICogc2V0dXAgTXV4IGNvbmZpZ3VyYXRpb24gZm9yIGNjZGMgd2hpY2ggbWF5IGJlIGRpZmZlcmVudCBmb3IKKwkgKiBkaWZmZXJlbnQgU29DcyB1c2luZyB0aGlzIENDREMKKwkgKi8KKwlzZXR1cF9waW5tdXgoKTsKKworCWkgPSAwOworCS8qIEdldCB0aGUgSVNJRiBiYXNlIGFkZHJlc3MsIGxpbmVhcml6YXRpb24gdGFibGUwIGFuZCB0YWJsZTEgYWRkci4gKi8KKwl3aGlsZSAoaSA8IDMpIHsKKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBpKTsKKwkJaWYgKCFyZXMpIHsKKwkJCXN0YXR1cyA9IC1FTk9ERVY7CisJCQlnb3RvIGZhaWxfbm9iYXNlX3JlczsKKwkJfQorCQlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAorCQkJCQkgcmVzLT5uYW1lKTsKKwkJaWYgKCFyZXMpIHsKKwkJCXN0YXR1cyA9IC1FQlVTWTsKKwkJCWdvdG8gZmFpbF9ub2Jhc2VfcmVzOworCQl9CisJCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwkJaWYgKCFhZGRyKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBmYWlsX2Jhc2VfaW9tYXA7CisJCX0KKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgMDoKKwkJCS8qIElTSUYgYmFzZSBhZGRyZXNzICovCisJCQlpc2lmX2NmZy5iYXNlX2FkZHIgPSBhZGRyOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCS8qIElTSUYgbGluZWFyIHRibDAgYWRkcmVzcyAqLworCQkJaXNpZl9jZmcubGluZWFyX3RibDBfYWRkciA9IGFkZHI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIElTSUYgbGluZWFyIHRibDAgYWRkcmVzcyAqLworCQkJaXNpZl9jZmcubGluZWFyX3RibDFfYWRkciA9IGFkZHI7CisJCQlicmVhazsKKwkJfQorCQlpKys7CisJfQorCWlzaWZfY2ZnLmRldiA9ICZwZGV2LT5kZXY7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIiVzIGlzIHJlZ2lzdGVyZWQgd2l0aCB2cGZlLlxuIiwKKwkJaXNpZl9od19kZXYubmFtZSk7CisJcmV0dXJuIDA7CitmYWlsX2Jhc2VfaW9tYXA6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaS0tOworZmFpbF9ub2Jhc2VfcmVzOgorCWlmIChpc2lmX2NmZy5iYXNlX2FkZHIpCisJCWlvdW5tYXAoaXNpZl9jZmcuYmFzZV9hZGRyKTsKKwlpZiAoaXNpZl9jZmcubGluZWFyX3RibDBfYWRkcikKKwkJaW91bm1hcChpc2lmX2NmZy5saW5lYXJfdGJsMF9hZGRyKTsKKworCXdoaWxlIChpID49IDApIHsKKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBpKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJCWktLTsKKwl9CitmYWlsX21jbGs6CisJY2xrX3B1dChpc2lmX2NmZy5tY2xrKTsKKwl2cGZlX3VucmVnaXN0ZXJfY2NkY19kZXZpY2UoJmlzaWZfaHdfZGV2KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGlzaWZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlCSpyZXM7CisJaW50IGkgPSAwOworCisJaW91bm1hcChpc2lmX2NmZy5iYXNlX2FkZHIpOworCWlvdW5tYXAoaXNpZl9jZmcubGluZWFyX3RibDBfYWRkcik7CisJaW91bm1hcChpc2lmX2NmZy5saW5lYXJfdGJsMV9hZGRyKTsKKwl3aGlsZSAoaSA8IDMpIHsKKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBpKTsKKwkJaWYgKHJlcykKKwkJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCQlpKys7CisJfQorCXZwZmVfdW5yZWdpc3Rlcl9jY2RjX2RldmljZSgmaXNpZl9od19kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpc2lmX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJpc2lmIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoaXNpZl9yZW1vdmUpLAorCS5wcm9iZSA9IGlzaWZfcHJvYmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpc2lmX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpc2lmX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIGlzaWZfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpc2lmX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGlzaWZfaW5pdCk7Cittb2R1bGVfZXhpdChpc2lmX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvaXNpZl9yZWdzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvaXNpZl9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdiODg5MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS9pc2lmX3JlZ3MuaApAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfSVNJRl9SRUdTX0gKKyNkZWZpbmUgX0lTSUZfUkVHU19ICisKKy8qIElTSUYgcmVnaXN0ZXJzIHJlbGF0aXZlIG9mZnNldHMgKi8KKyNkZWZpbmUgU1lOQ0VOCQkJCQkweDAwCisjZGVmaW5lIE1PREVTRVQJCQkJCTB4MDQKKyNkZWZpbmUgSERXCQkJCQkweDA4CisjZGVmaW5lIFZEVwkJCQkJMHgwYworI2RlZmluZSBQUExOCQkJCQkweDEwCisjZGVmaW5lIExQRlIJCQkJCTB4MTQKKyNkZWZpbmUgU1BICQkJCQkweDE4CisjZGVmaW5lIExOSAkJCQkJMHgxYworI2RlZmluZSBTTFYwCQkJCQkweDIwCisjZGVmaW5lIFNMVjEJCQkJCTB4MjQKKyNkZWZpbmUgTE5WCQkJCQkweDI4CisjZGVmaW5lIENVTEgJCQkJCTB4MmMKKyNkZWZpbmUgQ1VMVgkJCQkJMHgzMAorI2RlZmluZSBIU0laRQkJCQkJMHgzNAorI2RlZmluZSBTRE9GU1QJCQkJCTB4MzgKKyNkZWZpbmUgQ0FEVQkJCQkJMHgzYworI2RlZmluZSBDQURMCQkJCQkweDQwCisjZGVmaW5lIExJTkNGRzAJCQkJCTB4NDQKKyNkZWZpbmUgTElOQ0ZHMQkJCQkJMHg0OAorI2RlZmluZSBDQ09MUAkJCQkJMHg0YworI2RlZmluZSBDUkdBSU4gCQkJCQkweDUwCisjZGVmaW5lIENHUkdBSU4JCQkJCTB4NTQKKyNkZWZpbmUgQ0dCR0FJTgkJCQkJMHg1OAorI2RlZmluZSBDQkdBSU4JCQkJCTB4NWMKKyNkZWZpbmUgQ09GU1RBCQkJCQkweDYwCisjZGVmaW5lIEZMU0hDRkcwCQkJCTB4NjQKKyNkZWZpbmUgRkxTSENGRzEJCQkJMHg2OAorI2RlZmluZSBGTFNIQ0ZHMgkJCQkweDZjCisjZGVmaW5lIFZESU5UMAkJCQkJMHg3MAorI2RlZmluZSBWRElOVDEJCQkJCTB4NzQKKyNkZWZpbmUgVkRJTlQyCQkJCQkweDc4CisjZGVmaW5lIE1JU0MgCQkJCQkweDdjCisjZGVmaW5lIENHQU1NQVdECQkJCTB4ODAKKyNkZWZpbmUgUkVDNjU2SUYJCQkJMHg4NAorI2RlZmluZSBDQ0RDRkcJCQkJCTB4ODgKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBEZWZlY3QgQ29ycmVjdGlvbiByZWdpc3RlcnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBERkNDVEwJCQkJCTB4OGMKKyNkZWZpbmUgVkRGU0FUTFYJCQkJMHg5MAorI2RlZmluZSBERkNNRU1DVEwJCQkJMHg5NAorI2RlZmluZSBERkNNRU0wCQkJCQkweDk4CisjZGVmaW5lIERGQ01FTTEJCQkJCTB4OWMKKyNkZWZpbmUgREZDTUVNMgkJCQkJMHhhMAorI2RlZmluZSBERkNNRU0zCQkJCQkweGE0CisjZGVmaW5lIERGQ01FTTQJCQkJCTB4YTgKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEJsYWNrIENsYW1wIHJlZ2lzdGVycworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ0xBTVBDRkcJCQkJMHhhYworI2RlZmluZSBDTERDT0ZTVAkJCQkweGIwCisjZGVmaW5lIENMU1YJCQkJCTB4YjQKKyNkZWZpbmUgQ0xIV0lOMAkJCQkJMHhiOAorI2RlZmluZSBDTEhXSU4xCQkJCQkweGJjCisjZGVmaW5lIENMSFdJTjIJCQkJCTB4YzAKKyNkZWZpbmUgQ0xWUlYJCQkJCTB4YzQKKyNkZWZpbmUgQ0xWV0lOMAkJCQkJMHhjOAorI2RlZmluZSBDTFZXSU4xCQkJCQkweGNjCisjZGVmaW5lIENMVldJTjIJCQkJCTB4ZDAKKyNkZWZpbmUgQ0xWV0lOMwkJCQkJMHhkNAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTGVuc2UgU2hhZGluZyBDb3JyZWN0aW9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBEQVRBSE9GU1QJCQkJMHhkOAorI2RlZmluZSBEQVRBVk9GU1QJCQkJMHhkYworI2RlZmluZSBMU0NIVkFMCQkJCQkweGUwCisjZGVmaW5lIExTQ1ZWQUwJCQkJCTB4ZTQKKyNkZWZpbmUgVFdPRExTQ0NGRwkJCQkweGU4CisjZGVmaW5lIFRXT0RMU0NPRlNUCQkJCTB4ZWMKKyNkZWZpbmUgVFdPRExTQ0lOSQkJCQkweGYwCisjZGVmaW5lIFRXT0RMU0NHUkJVCQkJCTB4ZjQKKyNkZWZpbmUgVFdPRExTQ0dSQkwJCQkJMHhmOAorI2RlZmluZSBUV09ETFNDR1JPRgkJCQkweGZjCisjZGVmaW5lIFRXT0RMU0NPUkJVCQkJCTB4MTAwCisjZGVmaW5lIFRXT0RMU0NPUkJMCQkJCTB4MTA0CisjZGVmaW5lIFRXT0RMU0NPUk9GCQkJCTB4MTA4CisjZGVmaW5lIFRXT0RMU0NJUlFFTgkJCQkweDEwYworI2RlZmluZSBUV09ETFNDSVJRU1QJCQkJMHgxMTAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIERhdGEgZm9ybWF0dGVyCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBGTVRDRkcJCQkJCTB4MTE0CisjZGVmaW5lIEZNVFBMRU4JCQkJCTB4MTE4CisjZGVmaW5lIEZNVFNQSAkJCQkJMHgxMWMKKyNkZWZpbmUgRk1UTE5ICQkJCQkweDEyMAorI2RlZmluZSBGTVRTTFYJCQkJCTB4MTI0CisjZGVmaW5lIEZNVExOVgkJCQkJMHgxMjgKKyNkZWZpbmUgRk1UUkxFTgkJCQkJMHgxMmMKKyNkZWZpbmUgRk1USENOVAkJCQkJMHgxMzAKKyNkZWZpbmUgRk1UQVBUUl9CQVNFCQkJCTB4MTM0CisvKiBCZWxvdyBtYWNybyBmb3IgYWRkcmVzc2VzIEZNVEFQVFIwIC0gRk1UQVBUUjE1ICovCisjZGVmaW5lIEZNVEFQVFIoaSkJCQkoRk1UQVBUUl9CQVNFICsgKGkgKiA0KSkKKyNkZWZpbmUgRk1UUEdNVkYwCQkJCTB4MTc0CisjZGVmaW5lIEZNVFBHTVZGMQkJCQkweDE3OAorI2RlZmluZSBGTVRQR01BUFUwCQkJCTB4MTdjCisjZGVmaW5lIEZNVFBHTUFQVTEJCQkJMHgxODAKKyNkZWZpbmUgRk1UUEdNQVBTMAkJCQkweDE4NAorI2RlZmluZSBGTVRQR01BUFMxCQkJCTB4MTg4CisjZGVmaW5lIEZNVFBHTUFQUzIJCQkJMHgxOGMKKyNkZWZpbmUgRk1UUEdNQVBTMwkJCQkweDE5MAorI2RlZmluZSBGTVRQR01BUFM0CQkJCTB4MTk0CisjZGVmaW5lIEZNVFBHTUFQUzUJCQkJMHgxOTgKKyNkZWZpbmUgRk1UUEdNQVBTNgkJCQkweDE5YworI2RlZmluZSBGTVRQR01BUFM3CQkJCTB4MWEwCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvbG9yIFNwYWNlIENvbnZlcnRlcgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBDU0NDVEwJCQkJCTB4MWE0CisjZGVmaW5lIENTQ00wCQkJCQkweDFhOAorI2RlZmluZSBDU0NNMQkJCQkJMHgxYWMKKyNkZWZpbmUgQ1NDTTIJCQkJCTB4MWIwCisjZGVmaW5lIENTQ00zCQkJCQkweDFiNAorI2RlZmluZSBDU0NNNAkJCQkJMHgxYjgKKyNkZWZpbmUgQ1NDTTUJCQkJCTB4MWJjCisjZGVmaW5lIENTQ002CQkJCQkweDFjMAorI2RlZmluZSBDU0NNNwkJCQkJMHgxYzQKKyNkZWZpbmUgT0JXSU4wCQkJCQkweDFjOAorI2RlZmluZSBPQldJTjEJCQkJCTB4MWNjCisjZGVmaW5lIE9CV0lOMgkJCQkJMHgxZDAKKyNkZWZpbmUgT0JXSU4zCQkJCQkweDFkNAorI2RlZmluZSBPQlZBTDAJCQkJCTB4MWQ4CisjZGVmaW5lIE9CVkFMMQkJCQkJMHgxZGMKKyNkZWZpbmUgT0JWQUwyCQkJCQkweDFlMAorI2RlZmluZSBPQlZBTDMJCQkJCTB4MWU0CisjZGVmaW5lIE9CVkFMNAkJCQkJMHgxZTgKKyNkZWZpbmUgT0JWQUw1CQkJCQkweDFlYworI2RlZmluZSBPQlZBTDYJCQkJCTB4MWYwCisjZGVmaW5lIE9CVkFMNwkJCQkJMHgxZjQKKyNkZWZpbmUgQ0xLQ1RMCQkJCQkweDFmOAorCisvKiBNYXNrcyAmIFNoaWZ0cyBiZWxvdyAqLworI2RlZmluZSBTVEFSVF9QWF9IT1JfTUFTSwkJCTB4N0ZGRgorI2RlZmluZSBOVU1fUFhfSE9SX01BU0sJCQkJMHg3RkZGCisjZGVmaW5lIFNUQVJUX1ZFUl9PTkVfTUFTSwkJCTB4N0ZGRgorI2RlZmluZSBTVEFSVF9WRVJfVFdPX01BU0sJCQkweDdGRkYKKyNkZWZpbmUgTlVNX0xJTkVTX1ZFUgkJCQkweDdGRkYKKworLyogZ2FpbiAtIG9mZnNldCBtYXNrcyAqLworI2RlZmluZSBHQUlOX0lOVEVHRVJfU0hJRlQJCQk5CisjZGVmaW5lIE9GRlNFVF9NQVNLCQkJICAJMHhGRkYKKyNkZWZpbmUgR0FJTl9TRFJBTV9FTl9TSElGVAkJCTEyCisjZGVmaW5lIEdBSU5fSVBJUEVfRU5fU0hJRlQJCQkxMworI2RlZmluZSBHQUlOX0gzQV9FTl9TSElGVAkJCTE0CisjZGVmaW5lIE9GU1RfU0RSQU1fRU5fU0hJRlQJCQk4CisjZGVmaW5lIE9GU1RfSVBJUEVfRU5fU0hJRlQJCQk5CisjZGVmaW5lIE9GU1RfSDNBX0VOX1NISUZUCQkJMTAKKyNkZWZpbmUgR0FJTl9PRkZTRVRfRU5fTUFTSwkJCTB4NzcwMAorCisvKiBDdWxsaW5nICovCisjZGVmaW5lIENVTExfUEFUX0VWRU5fTElORV9TSElGVAkJOAorCisvKiBDQ0RDRkcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVNJRl9ZQ0lOU1dQX1JBVwkJCSgweDAwIDw8IDQpCisjZGVmaW5lIElTSUZfWUNJTlNXUF9ZQ0JDUgkJCSgweDAxIDw8IDQpCisjZGVmaW5lIElTSUZfQ0NEQ0ZHX0ZJRE1EX0xBVENIX1ZTWU5DCQkoMHgwMCA8PCA2KQorI2RlZmluZSBJU0lGX0NDRENGR19XRU5MT0dfQU5ECQkJKDB4MDAgPDwgOCkKKyNkZWZpbmUgSVNJRl9DQ0RDRkdfVFJHU0VMX1dFTgkJCSgweDAwIDw8IDkpCisjZGVmaW5lIElTSUZfQ0NEQ0ZHX0VYVFJHX0RJU0FCTEUJCSgweDAwIDw8IDEwKQorI2RlZmluZSBJU0lGX0xBVENIX09OX1ZTWU5DX0RJU0FCTEUJCSgweDAxIDw8IDE1KQorI2RlZmluZSBJU0lGX0xBVENIX09OX1ZTWU5DX0VOQUJMRQkJKDB4MDAgPDwgMTUpCisjZGVmaW5lIElTSUZfREFUQV9QQUNLX01BU0sJCQkzCisjZGVmaW5lIElTSUZfREFUQV9QQUNLMTYJCQkwCisjZGVmaW5lIElTSUZfREFUQV9QQUNLMTIJCQkxCisjZGVmaW5lIElTSUZfREFUQV9QQUNLOAkJCQkyCisjZGVmaW5lIElTSUZfUElYX09SREVSX1NISUZUCQkJMTEKKyNkZWZpbmUgSVNJRl9CVzY1Nl9FTkFCTEUJCQkoMHgwMSA8PCA1KQorCisvKiBNT0RFU0VUIHJlZ2lzdGVycyAqLworI2RlZmluZSBJU0lGX1ZESERPVVRfSU5QVVQJCQkoMHgwMCA8PCAwKQorI2RlZmluZSBJU0lGX0lOUFVUX1NISUZUCQkJMTIKKyNkZWZpbmUgSVNJRl9SQVdfSU5QVVRfTU9ERQkJCTAKKyNkZWZpbmUgSVNJRl9GSURfUE9MX1NISUZUCQkJNAorI2RlZmluZSBJU0lGX0hEX1BPTF9TSElGVAkJCTMKKyNkZWZpbmUgSVNJRl9WRF9QT0xfU0hJRlQJCQkyCisjZGVmaW5lIElTSUZfREFUQVBPTF9OT1JNQUwJCQkwCisjZGVmaW5lIElTSUZfREFUQVBPTF9TSElGVAkJCTYKKyNkZWZpbmUgSVNJRl9FWFdFTl9ESVNBQkxFIAkJCTAKKyNkZWZpbmUgSVNJRl9FWFdFTl9TSElGVAkJCTUKKyNkZWZpbmUgSVNJRl9GUk1fRk1UX1NISUZUCQkJNworI2RlZmluZSBJU0lGX0RBVEFTRlRfU0hJRlQJCQk4CisjZGVmaW5lIElTSUZfTFBGX1NISUZUCQkJCTE0CisjZGVmaW5lIElTSUZfTFBGX01BU0sJCQkJMQorCisvKiBHQU1NQVdEIHJlZ2lzdGVycyAqLworI2RlZmluZSBJU0lGX0FMQVdfR0FNQV9XRF9NQVNLCQkJMHhGCisjZGVmaW5lIElTSUZfQUxBV19HQU1BX1dEX1NISUZUCQkJMQorI2RlZmluZSBJU0lGX0FMQVdfRU5BQkxFCQkJMQorI2RlZmluZSBJU0lGX0dBTU1BV0RfQ0ZBX1NISUZUCQkJNQorCisvKiBIU0laRSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVNJRl9IU0laRV9GTElQX01BU0sJCQkxCisjZGVmaW5lIElTSUZfSFNJWkVfRkxJUF9TSElGVAkJCTEyCisKKy8qIE1JU0MgcmVnaXN0ZXJzICovCisjZGVmaW5lIElTSUZfRFBDTV9FTl9TSElGVAkJCTEyCisjZGVmaW5lIElTSUZfRFBDTV9QUkVESUNUT1JfU0hJRlQJCTEzCisKKy8qIEJsYWNrIGNsYW1wIHJlbGF0ZWQgKi8KKyNkZWZpbmUgSVNJRl9CQ19NT0RFX0NPTE9SX1NISUZUCQk0CisjZGVmaW5lIElTSUZfSE9SWl9CQ19NT0RFX1NISUZUCQkJMQorI2RlZmluZSBJU0lGX0hPUlpfQkNfV0lOX1NFTF9TSElGVAkJNQorI2RlZmluZSBJU0lGX0hPUlpfQkNfUElYX0xJTUlUX1NISUZUCQk2CisjZGVmaW5lIElTSUZfSE9SWl9CQ19XSU5fSF9TSVpFX1NISUZUCQk4CisjZGVmaW5lIElTSUZfSE9SWl9CQ19XSU5fVl9TSVpFX1NISUZUCQkxMgorI2RlZmluZQlJU0lGX1ZFUlRfQkNfUlNUX1ZBTF9TRUxfU0hJRlQJCTQKKyNkZWZpbmUgSVNJRl9WRVJUX0JDX0xJTkVfQVZFX0NPRUZfU0hJRlQJOAorCisvKiBWREZDIHJlZ2lzdGVycyAqLworI2RlZmluZSBJU0lGX1ZERkNfRU5fU0hJRlQJCQk0CisjZGVmaW5lIElTSUZfVkRGQ19DT1JSX01PRF9TSElGVAkJNQorI2RlZmluZSBJU0lGX1ZERkNfQ09SUl9XSE9MRV9MTl9TSElGVAkJNworI2RlZmluZSBJU0lGX1ZERkNfTEVWRUxfU0hGVF9TSElGVAkJOAorI2RlZmluZSBJU0lGX1ZERkNfUE9TX01BU0sJCQkweDFGRkYKKyNkZWZpbmUgSVNJRl9ERkNNRU1DVExfREZDTUFSU1RfU0hJRlQJCTIKKworLyogQ1NDIHJlZ2lzdGVycyAqLworI2RlZmluZSBJU0lGX0NTQ19DT0VGX0lOVEVHX01BU0sJCTcKKyNkZWZpbmUgSVNJRl9DU0NfQ09FRl9ERUNJTUFMX01BU0sJCTB4MWYKKyNkZWZpbmUgSVNJRl9DU0NfQ09FRl9JTlRFR19TSElGVAkJNQorI2RlZmluZSBJU0lGX0NTQ01fTVNCX1NISUZUCQkJOAorI2RlZmluZSBJU0lGX0RGX0NTQ19TUEhfTUFTSwkJCTB4MUZGRgorI2RlZmluZSBJU0lGX0RGX0NTQ19MTkhfTUFTSwkJCTB4MUZGRgorI2RlZmluZSBJU0lGX0RGX0NTQ19TTFZfTUFTSwkJCTB4MUZGRgorI2RlZmluZSBJU0lGX0RGX0NTQ19MTlZfTUFTSwkJCTB4MUZGRgorI2RlZmluZSBJU0lGX0RGX05VTUxJTkVTCQkJMHg3RkZGCisjZGVmaW5lIElTSUZfREZfTlVNUElYCQkJCTB4MUZGRgorCisvKiBPZmZzZXRzIGZvciBMU0MvREZDL0dhaW4gKi8KKyNkZWZpbmUgSVNJRl9EQVRBX0hfT0ZGU0VUX01BU0sJCQkweDFGRkYKKyNkZWZpbmUgSVNJRl9EQVRBX1ZfT0ZGU0VUX01BU0sJCQkweDFGRkYKKworLyogTGluZWFyaXphdGlvbiAqLworI2RlZmluZSBJU0lGX0xJTl9DT1JSU0ZUX1NISUZUCQkJNAorI2RlZmluZSBJU0lGX0xJTl9TQ0FMRV9GQUNUX0lOVEVHX1NISUZUCQkxMAorCisKKy8qIFBhdHRlcm4gcmVnaXN0ZXJzICovCisjZGVmaW5lIElTSUZfUEdfRU4JCQkJKDEgPDwgMykKKyNkZWZpbmUgSVNJRl9TRUxfUEdfU1JDCQkJCSgzIDw8IDQpCisjZGVmaW5lIElTSUZfUEdfVkRfUE9MX1NISUZUCQkJMAorI2RlZmluZSBJU0lGX1BHX0hEX1BPTF9TSElGVAkJCTEKKworLypyYW5kb20gb3RoZXIganVuayovCisjZGVmaW5lIElTSUZfU1lOQ0VOX1ZESERFTl9NQVNLCQkJKDEgPDwgMCkKKyNkZWZpbmUgSVNJRl9TWU5DRU5fV0VOX01BU0sJCQkoMSA8PCAxKQorI2RlZmluZSBJU0lGX1NZTkNFTl9XRU5fU0hJRlQJCQkxCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5jCmluZGV4IGRlMjJiYzkuLjg4NWNkNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cGZlX2NhcHR1cmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBmZV9jYXB0dXJlLmMKQEAgLTEwNyw5ICsxMDcsNiBAQAogCWludCB2cGZlX3Byb2JlZDsKIAkvKiBuYW1lIG9mIGNjZGMgZGV2aWNlICovCiAJY2hhciBuYW1lWzMyXTsKLQkvKiBmb3Igc3RvcmluZyBtZW0gbWFwcyBmb3IgQ0NEQyAqLwotCWludCBjY2RjX2FkZHJfc2l6ZTsKLQl2b2lkICpfX2lvbWVtIGNjZGNfYWRkcjsKIH07CiAKIC8qIGRhdGEgc3RydWN0dXJlcyAqLwpAQCAtMjI5LDcgKzIyNiw2IEBACiAJQlVHX09OKCFkZXYtPmh3X29wcy5zZXRfaW1hZ2Vfd2luZG93KTsKIAlCVUdfT04oIWRldi0+aHdfb3BzLmdldF9pbWFnZV93aW5kb3cpOwogCUJVR19PTighZGV2LT5od19vcHMuZ2V0X2xpbmVfbGVuZ3RoKTsKLQlCVUdfT04oIWRldi0+aHdfb3BzLnNldGZiYWRkcik7CiAJQlVHX09OKCFkZXYtPmh3X29wcy5nZXRmaWQpOwogCiAJbXV0ZXhfbG9jaygmY2NkY19sb2NrKTsKQEAgLTI0MCwyNSArMjM2LDIzIEBACiAJCSAqIHdhbGsgdGhyb3VnaCBpdCBkdXJpbmcgdnBmZSBwcm9iZQogCQkgKi8KIAkJcHJpbnRrKEtFUk5fRVJSICJ2cGZlIGNhcHR1cmUgbm90IGluaXRpYWxpemVkXG4iKTsKLQkJcmV0ID0gLTE7CisJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gdW5sb2NrOwogCX0KIAogCWlmIChzdHJjbXAoZGV2LT5uYW1lLCBjY2RjX2NmZy0+bmFtZSkpIHsKIAkJLyogaWdub3JlIHRoaXMgY2NkYyAqLwotCQlyZXQgPSAtMTsKKwkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byB1bmxvY2s7CiAJfQogCiAJaWYgKGNjZGNfZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2NkYyBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIpOwotCQlyZXQgPSAtMTsKKwkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byB1bmxvY2s7CiAJfQogCiAJY2NkY19kZXYgPSBkZXY7Ci0JZGV2LT5od19vcHMuc2V0X2NjZGNfYmFzZShjY2RjX2NmZy0+Y2NkY19hZGRyLAotCQkJCSAgY2NkY19jZmctPmNjZGNfYWRkcl9zaXplKTsKIHVubG9jazoKIAltdXRleF91bmxvY2soJmNjZGNfbG9jayk7CiAJcmV0dXJuIHJldDsKQEAgLTE3ODYsNjEgKzE3ODAsNiBAQAogCXJldHVybiB2cGZlX2RldjsKIH0KIAotc3RhdGljIHZvaWQgdnBmZV9kaXNhYmxlX2Nsb2NrKHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYpCi17Ci0Jc3RydWN0IHZwZmVfY29uZmlnICp2cGZlX2NmZyA9IHZwZmVfZGV2LT5jZmc7Ci0KLQljbGtfZGlzYWJsZSh2cGZlX2NmZy0+dnBzc2Nsayk7Ci0JY2xrX3B1dCh2cGZlX2NmZy0+dnBzc2Nsayk7Ci0JY2xrX2Rpc2FibGUodnBmZV9jZmctPnNsYXZlY2xrKTsKLQljbGtfcHV0KHZwZmVfY2ZnLT5zbGF2ZWNsayk7Ci0JdjRsMl9pbmZvKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsCi0JCSAidnBmZSB2cHNzIG1hc3RlciAmIHNsYXZlIGNsb2NrcyBkaXNhYmxlZFxuIik7Ci19Ci0KLXN0YXRpYyBpbnQgdnBmZV9lbmFibGVfY2xvY2soc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlX2RldikKLXsKLQlzdHJ1Y3QgdnBmZV9jb25maWcgKnZwZmVfY2ZnID0gdnBmZV9kZXYtPmNmZzsKLQlpbnQgcmV0ID0gLUVOT0VOVDsKLQotCXZwZmVfY2ZnLT52cHNzY2xrID0gY2xrX2dldCh2cGZlX2Rldi0+cGRldiwgInZwc3NfbWFzdGVyIik7Ci0JaWYgKE5VTEwgPT0gdnBmZV9jZmctPnZwc3NjbGspIHsKLQkJdjRsMl9lcnIodnBmZV9kZXYtPnBkZXYtPmRyaXZlciwgIk5vIGNsb2NrIGRlZmluZWQgZm9yIgotCQkJICJ2cHNzX21hc3RlclxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKGNsa19lbmFibGUodnBmZV9jZmctPnZwc3NjbGspKSB7Ci0JCXY0bDJfZXJyKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsCi0JCQkidnBmZSB2cHNzIG1hc3RlciBjbG9jayBub3QgZW5hYmxlZFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQl2NGwyX2luZm8odnBmZV9kZXYtPnBkZXYtPmRyaXZlciwKLQkJICJ2cGZlIHZwc3MgbWFzdGVyIGNsb2NrIGVuYWJsZWRcbiIpOwotCi0JdnBmZV9jZmctPnNsYXZlY2xrID0gY2xrX2dldCh2cGZlX2Rldi0+cGRldiwgInZwc3Nfc2xhdmUiKTsKLQlpZiAoTlVMTCA9PSB2cGZlX2NmZy0+c2xhdmVjbGspIHsKLQkJdjRsMl9lcnIodnBmZV9kZXYtPnBkZXYtPmRyaXZlciwKLQkJCSJObyBjbG9jayBkZWZpbmVkIGZvciB2cHNzIHNsYXZlXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGNsa19lbmFibGUodnBmZV9jZmctPnNsYXZlY2xrKSkgewotCQl2NGwyX2Vycih2cGZlX2Rldi0+cGRldi0+ZHJpdmVyLAotCQkJICJ2cGZlIHZwc3Mgc2xhdmUgY2xvY2sgbm90IGVuYWJsZWRcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JdjRsMl9pbmZvKHZwZmVfZGV2LT5wZGV2LT5kcml2ZXIsICJ2cGZlIHZwc3Mgc2xhdmUgY2xvY2sgZW5hYmxlZFxuIik7Ci0JcmV0dXJuIDA7Ci1vdXQ6Ci0JaWYgKHZwZmVfY2ZnLT52cHNzY2xrKQotCQljbGtfcHV0KHZwZmVfY2ZnLT52cHNzY2xrKTsKLQlpZiAodnBmZV9jZmctPnNsYXZlY2xrKQotCQljbGtfcHV0KHZwZmVfY2ZnLT5zbGF2ZWNsayk7Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KIC8qCiAgKiB2cGZlX3Byb2JlIDogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGRldmljZSBlbnRyaWVzIGJ5IHJlZ2lzdGVyCiAgKiBpdHNlbGYgdG8gdGhlIFY0TDIgZHJpdmVyIGFuZCBpbml0aWFsaXplcyBmaWVsZHMgb2YgZWFjaApAQCAtMTg3MCw3ICsxODA5LDcgQEAKIAogCWlmIChOVUxMID09IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CiAJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsICJVbmFibGUgdG8gZ2V0IHZwZmUgY29uZmlnXG4iKTsKLQkJcmV0ID0gLUVOT0VOVDsKKwkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBwcm9iZV9mcmVlX2Rldl9tZW07CiAJfQogCkBAIC0xODg0LDE4ICsxODIzLDEzIEBACiAJCWdvdG8gcHJvYmVfZnJlZV9kZXZfbWVtOwogCX0KIAotCS8qIGVuYWJsZSB2cHNzIGNsb2NrcyAqLwotCXJldCA9IHZwZmVfZW5hYmxlX2Nsb2NrKHZwZmVfZGV2KTsKLQlpZiAocmV0KQotCQlnb3RvIHByb2JlX2ZyZWVfZGV2X21lbTsKLQogCW11dGV4X2xvY2soJmNjZGNfbG9jayk7CiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBjY2RjIGNvbmZpZ3VyYXRpb24gKi8KIAljY2RjX2NmZyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjY2RjX2NvbmZpZyksIEdGUF9LRVJORUwpOwogCWlmIChOVUxMID09IGNjZGNfY2ZnKSB7CiAJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCiAJCQkgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgY2NkY19jZmdcbiIpOwotCQlnb3RvIHByb2JlX2Rpc2FibGVfY2xvY2s7CisJCWdvdG8gcHJvYmVfZnJlZV9kZXZfbWVtOwogCX0KIAogCXN0cm5jcHkoY2NkY19jZmctPm5hbWUsIHZwZmVfY2ZnLT5jY2RjLCAzMik7CkBAIC0xOTA0LDYxICsxODM4LDM0IEBACiAJaWYgKCFyZXMxKSB7CiAJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCiAJCQkgIlVuYWJsZSB0byBnZXQgaW50ZXJydXB0IGZvciBWSU5UMFxuIik7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gcHJvYmVfZGlzYWJsZV9jbG9jazsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBwcm9iZV9mcmVlX2NjZGNfY2ZnX21lbTsKIAl9CiAJdnBmZV9kZXYtPmNjZGNfaXJxMCA9IHJlczEtPnN0YXJ0OwogCiAJLyogR2V0IFZJTlQxIGlycSByZXNvdXJjZSAqLwotCXJlczEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwKLQkJCQlJT1JFU09VUkNFX0lSUSwgMSk7CisJcmVzMSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMSk7CiAJaWYgKCFyZXMxKSB7CiAJCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCiAJCQkgIlVuYWJsZSB0byBnZXQgaW50ZXJydXB0IGZvciBWSU5UMVxuIik7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gcHJvYmVfZGlzYWJsZV9jbG9jazsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBwcm9iZV9mcmVlX2NjZGNfY2ZnX21lbTsKIAl9CiAJdnBmZV9kZXYtPmNjZGNfaXJxMSA9IHJlczEtPnN0YXJ0OwogCi0JLyogR2V0IGFkZHJlc3MgYmFzZSBvZiBDQ0RDICovCi0JcmVzMSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKCFyZXMxKSB7Ci0JCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsCi0JCQkiVW5hYmxlIHRvIGdldCByZWdpc3RlciBhZGRyZXNzIG1hcFxuIik7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gcHJvYmVfZGlzYWJsZV9jbG9jazsKLQl9Ci0KLQljY2RjX2NmZy0+Y2NkY19hZGRyX3NpemUgPSByZXMxLT5lbmQgLSByZXMxLT5zdGFydCArIDE7Ci0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzMS0+c3RhcnQsIGNjZGNfY2ZnLT5jY2RjX2FkZHJfc2l6ZSwKLQkJCQlwZGV2LT5kZXYuZHJpdmVyLT5uYW1lKSkgewotCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLAotCQkJIkZhaWxlZCByZXF1ZXN0X21lbV9yZWdpb24gZm9yIGNjZGMgYmFzZVxuIik7Ci0JCXJldCA9IC1FTlhJTzsKLQkJZ290byBwcm9iZV9kaXNhYmxlX2Nsb2NrOwotCX0KLQljY2RjX2NmZy0+Y2NkY19hZGRyID0gaW9yZW1hcF9ub2NhY2hlKHJlczEtPnN0YXJ0LAotCQkJCQkgICAgIGNjZGNfY2ZnLT5jY2RjX2FkZHJfc2l6ZSk7Ci0JaWYgKCFjY2RjX2NmZy0+Y2NkY19hZGRyKSB7Ci0JCXY0bDJfZXJyKHBkZXYtPmRldi5kcml2ZXIsICJVbmFibGUgdG8gaW9yZW1hcCBjY2RjIGFkZHJcbiIpOwotCQlyZXQgPSAtRU5YSU87Ci0JCWdvdG8gcHJvYmVfb3V0X3JlbGVhc2VfbWVtMTsKLQl9Ci0KIAlyZXQgPSByZXF1ZXN0X2lycSh2cGZlX2Rldi0+Y2NkY19pcnEwLCB2cGZlX2lzciwgSVJRRl9ESVNBQkxFRCwKIAkJCSAgInZwZmVfY2FwdHVyZTAiLCB2cGZlX2Rldik7CiAKIAlpZiAoMCAhPSByZXQpIHsKIAkJdjRsMl9lcnIocGRldi0+ZGV2LmRyaXZlciwgIlVuYWJsZSB0byByZXF1ZXN0IGludGVycnVwdFxuIik7Ci0JCWdvdG8gcHJvYmVfb3V0X3VubWFwMTsKKwkJZ290byBwcm9iZV9mcmVlX2NjZGNfY2ZnX21lbTsKIAl9CiAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHZpZGVvIGRldmljZSAqLwogCXZmZCA9IHZpZGVvX2RldmljZV9hbGxvYygpOwogCWlmIChOVUxMID09IHZmZCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLAotCQkJIlVuYWJsZSB0byBhbGxvYyB2aWRlbyBkZXZpY2VcbiIpOworCQl2NGwyX2VycihwZGV2LT5kZXYuZHJpdmVyLCAiVW5hYmxlIHRvIGFsbG9jIHZpZGVvIGRldmljZVxuIik7CiAJCWdvdG8gcHJvYmVfb3V0X3JlbGVhc2VfaXJxOwogCX0KIApAQCAtMjA3MywxMiArMTk4MCw3IEBACiAJCXZpZGVvX2RldmljZV9yZWxlYXNlKHZwZmVfZGV2LT52aWRlb19kZXYpOwogcHJvYmVfb3V0X3JlbGVhc2VfaXJxOgogCWZyZWVfaXJxKHZwZmVfZGV2LT5jY2RjX2lycTAsIHZwZmVfZGV2KTsKLXByb2JlX291dF91bm1hcDE6Ci0JaW91bm1hcChjY2RjX2NmZy0+Y2NkY19hZGRyKTsKLXByb2JlX291dF9yZWxlYXNlX21lbTE6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlczEtPnN0YXJ0LCByZXMxLT5lbmQgLSByZXMxLT5zdGFydCArIDEpOwotcHJvYmVfZGlzYWJsZV9jbG9jazoKLQl2cGZlX2Rpc2FibGVfY2xvY2sodnBmZV9kZXYpOworcHJvYmVfZnJlZV9jY2RjX2NmZ19tZW06CiAJbXV0ZXhfdW5sb2NrKCZjY2RjX2xvY2spOwogCWtmcmVlKGNjZGNfY2ZnKTsKIHByb2JlX2ZyZWVfZGV2X21lbToKQEAgLTIwOTIsNyArMTk5NCw2IEBACiBzdGF0aWMgaW50IF9fZGV2ZXhpdCB2cGZlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZV9kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAogCXY0bDJfaW5mbyhwZGV2LT5kZXYuZHJpdmVyLCAidnBmZV9yZW1vdmVcbiIpOwogCkBAIC0yMTAwLDEyICsyMDAxLDYgQEAKIAlrZnJlZSh2cGZlX2Rldi0+c2QpOwogCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnZwZmVfZGV2LT52NGwyX2Rldik7CiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodnBmZV9kZXYtPnZpZGVvX2Rldik7Ci0JbXV0ZXhfbG9jaygmY2NkY19sb2NrKTsKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKLQlpb3VubWFwKGNjZGNfY2ZnLT5jY2RjX2FkZHIpOwotCW11dGV4X3VubG9jaygmY2NkY19sb2NrKTsKLQl2cGZlX2Rpc2FibGVfY2xvY2sodnBmZV9kZXYpOwogCWtmcmVlKHZwZmVfZGV2KTsKIAlrZnJlZShjY2RjX2NmZyk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBzcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYXZpbmNpL3Zwc3MuYwppbmRleCA3ZWU3MmVjLi43OTE4NjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhdmluY2kvdnBzcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGF2aW5jaS92cHNzLmMKQEAgLTE1LDcgKzE1LDcgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqCi0gKiBjb21tb24gdnBzcyBkcml2ZXIgZm9yIGFsbCB2aWRlbyBkcml2ZXJzLgorICogY29tbW9uIHZwc3Mgc3lzdGVtIG1vZHVsZSBwbGF0Zm9ybSBkcml2ZXIgZm9yIGFsbCB2aWRlbyBkcml2ZXJzLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTM1LDEyICszNSw1MiBAQAogLyogRE02NDR4IGRlZmluZXMgKi8KICNkZWZpbmUgRE02NDRYX1NCTF9QQ1JfVlBTUwkJKDQpCiAKKyNkZWZpbmUgRE0zNTVfVlBTU0JMX0lOVFNFTAkJMHgxMAorI2RlZmluZSBETTM1NV9WUFNTQkxfRVZUU0VMCQkweDE0CiAvKiB2cHNzIEJMIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgRE0zNTVfVlBTU0JMX0NDRENNVVgJCTB4MWMKIC8qIHZwc3MgQ0xLIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgRE0zNTVfVlBTU0NMS19DTEtDVFJMCQkweDA0CiAvKiBtYXNrcyBhbmQgc2hpZnRzICovCiAjZGVmaW5lIFZQU1NfSFNTSVNFTF9TSElGVAkJNAorLyoKKyAqIFZESU5UMCAtIHZwc3NfaW50MCwgVkRJTlQxIC0gdnBzc19pbnQxLCBIM0EgLSB2cHNzX2ludDQsCisgKiBJUElQRV9JTlQxX1NEUiAtIHZwc3NfaW50NQorICovCisjZGVmaW5lIERNMzU1X1ZQU1NCTF9JTlRTRUxfREVGQVVMVAkweGZmODNmZjEwCisvKiBWRU5DSU5UIC0gdnBzc19pbnQ4ICovCisjZGVmaW5lIERNMzU1X1ZQU1NCTF9FVlRTRUxfREVGQVVMVAkweDQKKworI2RlZmluZSBETTM2NV9JU1A1X1BDQ1IgCQkweDA0CisjZGVmaW5lIERNMzY1X0lTUDVfSU5UU0VMMQkJMHgxMAorI2RlZmluZSBETTM2NV9JU1A1X0lOVFNFTDIJCTB4MTQKKyNkZWZpbmUgRE0zNjVfSVNQNV9JTlRTRUwzCQkweDE4CisjZGVmaW5lIERNMzY1X0lTUDVfQ0NEQ01VWCAJCTB4MjAKKyNkZWZpbmUgRE0zNjVfSVNQNV9QR19GUkFNRV9TSVpFIAkweDI4CisjZGVmaW5lIERNMzY1X1ZQQkVfQ0xLX0NUUkwgCQkweDAwCisvKgorICogdnBzcyBpbnRlcnJ1cHRzLiBWRElOVDAgLSB2cHNzX2ludDAsIFZESU5UMSAtIHZwc3NfaW50MSwKKyAqIEFGIC0gdnBzc19pbnQzCisgKi8KKyNkZWZpbmUgRE0zNjVfSVNQNV9JTlRTRUwxX0RFRkFVTFQJMHgwYjFmMDEwMAorLyogQUVXIC0gdnBzc19pbnQ2LCBSU1pfSU5UX0RNQSAtIHZwc3NfaW50NSAqLworI2RlZmluZSBETTM2NV9JU1A1X0lOVFNFTDJfREVGQVVMVAkweDFmMGEwZjFmCisvKiBWRU5DIC0gdnBzc19pbnQ4ICovCisjZGVmaW5lIERNMzY1X0lTUDVfSU5UU0VMM19ERUZBVUxUCTB4MDAwMDAwMTUKKworLyogbWFza3MgYW5kIHNoaWZ0cyBmb3IgRE0zNjUqLworI2RlZmluZSBETTM2NV9DQ0RDX1BHX1ZEX1BPTF9TSElGVCAJMAorI2RlZmluZSBETTM2NV9DQ0RDX1BHX0hEX1BPTF9TSElGVCAJMQorCisjZGVmaW5lIENDRF9TUkNfU0VMX01BU0sJCShCSVRfTUFTSyg1KSB8IEJJVF9NQVNLKDQpKQorI2RlZmluZSBDQ0RfU1JDX1NFTF9TSElGVAkJNAorCisvKiBEaWZmZXJlbnQgU29DIHBsYXRmb3JtcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgKi8KK2VudW0gdnBzc19wbGF0Zm9ybV90eXBlIHsKKwlETTY0NFgsCisJRE0zNTUsCisJRE0zNjUsCit9OwogCiAvKgogICogdnBzcyBvcGVyYXRpb25zLiBEZXBlbmRzIG9uIHBsYXRmb3JtLiBOb3QgYWxsIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlCkBAIC01OSwxMyArOTksOSBAQAogCiAvKiB2cHNzIGNvbmZpZ3VyYXRpb24gKi8KIHN0cnVjdCB2cHNzX29wZXJfY29uZmlnIHsKLQlfX2lvbWVtIHZvaWQgKnZwc3NfYmxfcmVnc19iYXNlOwotCV9faW9tZW0gdm9pZCAqdnBzc19yZWdzX2Jhc2U7Ci0Jc3RydWN0IHJlc291cmNlCQkqcjE7Ci0JcmVzb3VyY2Vfc2l6ZV90CQlsZW4xOwotCXN0cnVjdCByZXNvdXJjZQkJKnIyOwotCXJlc291cmNlX3NpemVfdAkJbGVuMjsKLQljaGFyIHZwc3NfbmFtZVszMl07CisJX19pb21lbSB2b2lkICp2cHNzX3JlZ3NfYmFzZTA7CisJX19pb21lbSB2b2lkICp2cHNzX3JlZ3NfYmFzZTE7CisJZW51bSB2cHNzX3BsYXRmb3JtX3R5cGUgcGxhdGZvcm07CiAJc3BpbmxvY2tfdCB2cHNzX2xvY2s7CiAJc3RydWN0IHZwc3NfaHdfb3BzIGh3X29wczsKIH07CkBAIC03NSwyMiArMTExLDQ2IEBACiAvKiByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMgKi8KIHN0YXRpYyBpbmxpbmUgdTMyIGJsX3JlZ3IodTMyIG9mZnNldCkKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGwob3Blcl9jZmcudnBzc19ibF9yZWdzX2Jhc2UgKyBvZmZzZXQpOworCXJldHVybiBfX3Jhd19yZWFkbChvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTAgKyBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYmxfcmVndyh1MzIgdmFsLCB1MzIgb2Zmc2V0KQogewotCV9fcmF3X3dyaXRlbCh2YWwsIG9wZXJfY2ZnLnZwc3NfYmxfcmVnc19iYXNlICsgb2Zmc2V0KTsKKwlfX3Jhd193cml0ZWwodmFsLCBvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTAgKyBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiB2cHNzX3JlZ3IodTMyIG9mZnNldCkKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGwob3Blcl9jZmcudnBzc19yZWdzX2Jhc2UgKyBvZmZzZXQpOworCXJldHVybiBfX3Jhd19yZWFkbChvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTEgKyBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdnBzc19yZWd3KHUzMiB2YWwsIHUzMiBvZmZzZXQpCiB7Ci0JX19yYXdfd3JpdGVsKHZhbCwgb3Blcl9jZmcudnBzc19yZWdzX2Jhc2UgKyBvZmZzZXQpOworCV9fcmF3X3dyaXRlbCh2YWwsIG9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMSArIG9mZnNldCk7Cit9CisKKy8qIEZvciBETTM2NSBvbmx5ICovCitzdGF0aWMgaW5saW5lIHUzMiBpc3A1X3JlYWQodTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwob3Blcl9jZmcudnBzc19yZWdzX2Jhc2UwICsgb2Zmc2V0KTsKK30KKworLyogRm9yIERNMzY1IG9ubHkgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpc3A1X3dyaXRlKHUzMiB2YWwsIHUzMiBvZmZzZXQpCit7CisJX19yYXdfd3JpdGVsKHZhbCwgb3Blcl9jZmcudnBzc19yZWdzX2Jhc2UwICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgZG0zNjVfc2VsZWN0X2NjZGNfc291cmNlKGVudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgc3JjX3NlbCkKK3sKKwl1MzIgdGVtcCA9IGlzcDVfcmVhZChETTM2NV9JU1A1X0NDRENNVVgpICYgfkNDRF9TUkNfU0VMX01BU0s7CisKKwkvKiBpZiB3ZSBhcmUgdXNpbmcgcGF0dGVybiBnZW5lcmF0b3IsIGVuYWJsZSBpdCAqLworCWlmIChzcmNfc2VsID09IFZQU1NfUEdMUEJLIHx8IHNyY19zZWwgPT0gVlBTU19DQ0RDUEcpCisJCXRlbXAgfD0gMHgwODsKKworCXRlbXAgfD0gKHNyY19zZWwgPDwgQ0NEX1NSQ19TRUxfU0hJRlQpOworCWlzcDVfd3JpdGUodGVtcCwgRE0zNjVfSVNQNV9DQ0RDTVVYKTsKIH0KIAogc3RhdGljIHZvaWQgZG0zNTVfc2VsZWN0X2NjZGNfc291cmNlKGVudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgc3JjX3NlbCkKQEAgLTEwMSw5ICsxNjEsOSBAQAogaW50IHZwc3Nfc2VsZWN0X2NjZGNfc291cmNlKGVudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgc3JjX3NlbCkKIHsKIAlpZiAoIW9wZXJfY2ZnLmh3X29wcy5zZWxlY3RfY2NkY19zb3VyY2UpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkbTM1NV9zZWxlY3RfY2NkY19zb3VyY2Uoc3JjX3NlbCk7CisJb3Blcl9jZmcuaHdfb3BzLnNlbGVjdF9jY2RjX3NvdXJjZShzcmNfc2VsKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wodnBzc19zZWxlY3RfY2NkY19zb3VyY2UpOwpAQCAtMTE0LDcgKzE3NCw3IEBACiAKIAlpZiAod2JsX3NlbCA8IFZQU1NfUENSX0FFV19XQkxfMCB8fAogCSAgICB3Ymxfc2VsID4gVlBTU19QQ1JfQ0NEQ19XQkxfTykKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIHdyaXRpbmcgYSAwIGNsZWFyIHRoZSBvdmVyZmxvdyAqLwogCW1hc2sgPSB+KG1hc2sgPDwgd2JsX3NlbCk7CkBAIC0xMjYsNyArMTg2LDcgQEAKIGludCB2cHNzX2NsZWFyX3dibF9vdmVyZmxvdyhlbnVtIHZwc3Nfd2JsX3NlbCB3Ymxfc2VsKQogewogCWlmICghb3Blcl9jZmcuaHdfb3BzLmNsZWFyX3dibF9vdmVyZmxvdykKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiBvcGVyX2NmZy5od19vcHMuY2xlYXJfd2JsX292ZXJmbG93KHdibF9zZWwpOwogfQpAQCAtMTY2LDcgKzIyNiw3IEBACiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICJkbTM1NV9lbmFibGVfY2xvY2s6IgogCQkJCSIgSW52YWxpZCBzZWxlY3RvcjogJWRcbiIsIGNsb2NrX3NlbCk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm9wZXJfY2ZnLnZwc3NfbG9jaywgZmxhZ3MpOwpAQCAtMTgxLDEwMCArMjQxLDIyMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGRtMzY1X2VuYWJsZV9jbG9jayhlbnVtIHZwc3NfY2xvY2tfc2VsIGNsb2NrX3NlbCwgaW50IGVuKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHV0ZW1wLCBtYXNrID0gMHgxLCBzaGlmdCA9IDAsIG9mZnNldCA9IERNMzY1X0lTUDVfUENDUjsKKwl1MzIgKCpyZWFkKSh1MzIgb2Zmc2V0KSA9IGlzcDVfcmVhZDsKKwl2b2lkKCp3cml0ZSkodTMyIHZhbCwgdTMyIG9mZnNldCkgPSBpc3A1X3dyaXRlOworCisJc3dpdGNoIChjbG9ja19zZWwpIHsKKwljYXNlIFZQU1NfQkxfQ0xPQ0s6CisJCWJyZWFrOworCWNhc2UgVlBTU19DQ0RDX0NMT0NLOgorCQlzaGlmdCA9IDE7CisJCWJyZWFrOworCWNhc2UgVlBTU19IM0FfQ0xPQ0s6CisJCXNoaWZ0ID0gMjsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX1JTWl9DTE9DSzoKKwkJc2hpZnQgPSAzOworCQlicmVhazsKKwljYXNlIFZQU1NfSVBJUEVfQ0xPQ0s6CisJCXNoaWZ0ID0gNDsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX0lQSVBFSUZfQ0xPQ0s6CisJCXNoaWZ0ID0gNTsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX1BDTEtfSU5URVJOQUw6CisJCXNoaWZ0ID0gNjsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX1BTWU5DX0NMT0NLX1NFTDoKKwkJc2hpZnQgPSA3OworCQlicmVhazsKKwljYXNlIFZQU1NfVlBCRV9DTE9DSzoKKwkJcmVhZCA9IHZwc3NfcmVncjsKKwkJd3JpdGUgPSB2cHNzX3JlZ3c7CisJCW9mZnNldCA9IERNMzY1X1ZQQkVfQ0xLX0NUUkw7CisJCWJyZWFrOworCWNhc2UgVlBTU19WRU5DX0NMT0NLX1NFTDoKKwkJc2hpZnQgPSAyOworCQlyZWFkID0gdnBzc19yZWdyOworCQl3cml0ZSA9IHZwc3NfcmVndzsKKwkJb2Zmc2V0ID0gRE0zNjVfVlBCRV9DTEtfQ1RSTDsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX0xEQ19DTE9DSzoKKwkJc2hpZnQgPSAzOworCQlyZWFkID0gdnBzc19yZWdyOworCQl3cml0ZSA9IHZwc3NfcmVndzsKKwkJb2Zmc2V0ID0gRE0zNjVfVlBCRV9DTEtfQ1RSTDsKKwkJYnJlYWs7CisJY2FzZSBWUFNTX0ZESUZfQ0xPQ0s6CisJCXNoaWZ0ID0gNDsKKwkJcmVhZCA9IHZwc3NfcmVncjsKKwkJd3JpdGUgPSB2cHNzX3JlZ3c7CisJCW9mZnNldCA9IERNMzY1X1ZQQkVfQ0xLX0NUUkw7CisJCWJyZWFrOworCWNhc2UgVlBTU19PU0RfQ0xPQ0tfU0VMOgorCQlzaGlmdCA9IDY7CisJCXJlYWQgPSB2cHNzX3JlZ3I7CisJCXdyaXRlID0gdnBzc19yZWd3OworCQlvZmZzZXQgPSBETTM2NV9WUEJFX0NMS19DVFJMOworCQlicmVhazsKKwljYXNlIFZQU1NfTERDX0NMT0NLX1NFTDoKKwkJc2hpZnQgPSA3OworCQlyZWFkID0gdnBzc19yZWdyOworCQl3cml0ZSA9IHZwc3NfcmVndzsKKwkJb2Zmc2V0ID0gRE0zNjVfVlBCRV9DTEtfQ1RSTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJkbTM2NV9lbmFibGVfY2xvY2s6IEludmFsaWQgc2VsZWN0b3I6ICVkXG4iLAorCQkgICAgICAgY2xvY2tfc2VsKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZvcGVyX2NmZy52cHNzX2xvY2ssIGZsYWdzKTsKKwl1dGVtcCA9IHJlYWQob2Zmc2V0KTsKKwlpZiAoIWVuKSB7CisJCW1hc2sgPSB+bWFzazsKKwkJdXRlbXAgJj0gKG1hc2sgPDwgc2hpZnQpOworCX0gZWxzZQorCQl1dGVtcCB8PSAobWFzayA8PCBzaGlmdCk7CisKKwl3cml0ZSh1dGVtcCwgb2Zmc2V0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcGVyX2NmZy52cHNzX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCiBpbnQgdnBzc19lbmFibGVfY2xvY2soZW51bSB2cHNzX2Nsb2NrX3NlbCBjbG9ja19zZWwsIGludCBlbikKIHsKIAlpZiAoIW9wZXJfY2ZnLmh3X29wcy5lbmFibGVfY2xvY2spCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gb3Blcl9jZmcuaHdfb3BzLmVuYWJsZV9jbG9jayhjbG9ja19zZWwsIGVuKTsKIH0KIEVYUE9SVF9TWU1CT0wodnBzc19lbmFibGVfY2xvY2spOwogCit2b2lkIGRtMzY1X3Zwc3Nfc2V0X3N5bmNfcG9sKHN0cnVjdCB2cHNzX3N5bmNfcG9sIHN5bmMpCit7CisJaW50IHZhbCA9IDA7CisJdmFsID0gaXNwNV9yZWFkKERNMzY1X0lTUDVfQ0NEQ01VWCk7CisKKwl2YWwgfD0gKHN5bmMuY2NkcGdfaGRwb2wgPDwgRE0zNjVfQ0NEQ19QR19IRF9QT0xfU0hJRlQpOworCXZhbCB8PSAoc3luYy5jY2RwZ192ZHBvbCA8PCBETTM2NV9DQ0RDX1BHX1ZEX1BPTF9TSElGVCk7CisKKwlpc3A1X3dyaXRlKHZhbCwgRE0zNjVfSVNQNV9DQ0RDTVVYKTsKK30KK0VYUE9SVF9TWU1CT0woZG0zNjVfdnBzc19zZXRfc3luY19wb2wpOworCit2b2lkIGRtMzY1X3Zwc3Nfc2V0X3BnX2ZyYW1lX3NpemUoc3RydWN0IHZwc3NfcGdfZnJhbWVfc2l6ZSBmcmFtZV9zaXplKQoreworCWludCBjdXJyZW50X3JlZyA9ICgoZnJhbWVfc2l6ZS5obHBmciA+PiAxKSAtIDEpIDw8IDE2OworCisJY3VycmVudF9yZWcgfD0gKGZyYW1lX3NpemUucHBsZW4gLSAxKTsKKwlpc3A1X3dyaXRlKGN1cnJlbnRfcmVnLCBETTM2NV9JU1A1X1BHX0ZSQU1FX1NJWkUpOworfQorRVhQT1JUX1NZTUJPTChkbTM2NV92cHNzX3NldF9wZ19mcmFtZV9zaXplKTsKKwogc3RhdGljIGludCBfX2luaXQgdnBzc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCWludCBzdGF0dXMsIGRtMzU1ID0gMDsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyMSwgKnIyOworCWNoYXIgKnBsYXRmb3JtX25hbWU7CisJaW50IHN0YXR1czsKIAogCWlmICghcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YVxuIik7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQlzdHJjcHkob3Blcl9jZmcudnBzc19uYW1lLCBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSk7CiAKLQlpZiAoIXN0cmNtcChvcGVyX2NmZy52cHNzX25hbWUsICJkbTM1NV92cHNzIikpCi0JCWRtMzU1ID0gMTsKLQllbHNlIGlmIChzdHJjbXAob3Blcl9jZmcudnBzc19uYW1lLCAiZG02NDR4X3Zwc3MiKSkgeworCXBsYXRmb3JtX25hbWUgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXN0cmNtcChwbGF0Zm9ybV9uYW1lLCAiZG0zNTVfdnBzcyIpKQorCQlvcGVyX2NmZy5wbGF0Zm9ybSA9IERNMzU1OworCWVsc2UgaWYgKCFzdHJjbXAocGxhdGZvcm1fbmFtZSwgImRtMzY1X3Zwc3MiKSkKKwkJb3Blcl9jZmcucGxhdGZvcm0gPSBETTM2NTsKKwllbHNlIGlmICghc3RyY21wKHBsYXRmb3JtX25hbWUsICJkbTY0NHhfdnBzcyIpKQorCQlvcGVyX2NmZy5wbGF0Zm9ybSA9IERNNjQ0WDsKKwllbHNlIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAidnBzcyBkcml2ZXIgbm90IHN1cHBvcnRlZCBvbiIKIAkJCSIgdGhpcyBwbGF0Zm9ybVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlcyB2cHNzIHByb2JlZFxuIiwgb3Blcl9jZmcudnBzc19uYW1lKTsKLQlvcGVyX2NmZy5yMSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKCFvcGVyX2NmZy5yMSkKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgdnBzcyBwcm9iZWRcbiIsIHBsYXRmb3JtX25hbWUpOworCXIxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXIxKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCW9wZXJfY2ZnLmxlbjEgPSBvcGVyX2NmZy5yMS0+ZW5kIC0gb3Blcl9jZmcucjEtPnN0YXJ0ICsgMTsKLQotCW9wZXJfY2ZnLnIxID0gcmVxdWVzdF9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIxLT5zdGFydCwgb3Blcl9jZmcubGVuMSwKLQkJCQkJIG9wZXJfY2ZnLnIxLT5uYW1lKTsKLQlpZiAoIW9wZXJfY2ZnLnIxKQorCXIxID0gcmVxdWVzdF9tZW1fcmVnaW9uKHIxLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyMSksIHIxLT5uYW1lKTsKKwlpZiAoIXIxKQogCQlyZXR1cm4gLUVCVVNZOwogCi0Jb3Blcl9jZmcudnBzc19ibF9yZWdzX2Jhc2UgPSBpb3JlbWFwKG9wZXJfY2ZnLnIxLT5zdGFydCwgb3Blcl9jZmcubGVuMSk7Ci0JaWYgKCFvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSkgeworCW9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMCA9IGlvcmVtYXAocjEtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIxKSk7CisJaWYgKCFvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTApIHsKIAkJc3RhdHVzID0gLUVCVVNZOwogCQlnb3RvIGZhaWwxOwogCX0KIAotCWlmIChkbTM1NSkgewotCQlvcGVyX2NmZy5yMiA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7Ci0JCWlmICghb3Blcl9jZmcucjIpIHsKKwlpZiAob3Blcl9jZmcucGxhdGZvcm0gPT0gRE0zNTUgfHwgb3Blcl9jZmcucGxhdGZvcm0gPT0gRE0zNjUpIHsKKwkJcjIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCQlpZiAoIXIyKSB7CiAJCQlzdGF0dXMgPSAtRU5PRU5UOwogCQkJZ290byBmYWlsMjsKIAkJfQotCQlvcGVyX2NmZy5sZW4yID0gb3Blcl9jZmcucjItPmVuZCAtIG9wZXJfY2ZnLnIyLT5zdGFydCArIDE7Ci0JCW9wZXJfY2ZnLnIyID0gcmVxdWVzdF9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIyLT5zdGFydCwKLQkJCQkJCSBvcGVyX2NmZy5sZW4yLAotCQkJCQkJIG9wZXJfY2ZnLnIyLT5uYW1lKTsKLQkJaWYgKCFvcGVyX2NmZy5yMikgeworCQlyMiA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyMi0+c3RhcnQsIHJlc291cmNlX3NpemUocjIpLCByMi0+bmFtZSk7CisJCWlmICghcjIpIHsKIAkJCXN0YXR1cyA9IC1FQlVTWTsKIAkJCWdvdG8gZmFpbDI7CiAJCX0KIAotCQlvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZSA9IGlvcmVtYXAob3Blcl9jZmcucjItPnN0YXJ0LAotCQkJCQkJICBvcGVyX2NmZy5sZW4yKTsKLQkJaWYgKCFvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZSkgeworCQlvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTEgPSBpb3JlbWFwKHIyLT5zdGFydCwKKwkJCQkJCSAgIHJlc291cmNlX3NpemUocjIpKTsKKwkJaWYgKCFvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTEpIHsKIAkJCXN0YXR1cyA9IC1FQlVTWTsKIAkJCWdvdG8gZmFpbDM7CiAJCX0KIAl9CiAKLQlpZiAoZG0zNTUpIHsKKwlpZiAob3Blcl9jZmcucGxhdGZvcm0gPT0gRE0zNTUpIHsKIAkJb3Blcl9jZmcuaHdfb3BzLmVuYWJsZV9jbG9jayA9IGRtMzU1X2VuYWJsZV9jbG9jazsKIAkJb3Blcl9jZmcuaHdfb3BzLnNlbGVjdF9jY2RjX3NvdXJjZSA9IGRtMzU1X3NlbGVjdF9jY2RjX3NvdXJjZTsKKwkJLyogU2V0dXAgdnBzcyBpbnRlcnJ1cHRzICovCisJCWJsX3JlZ3coRE0zNTVfVlBTU0JMX0lOVFNFTF9ERUZBVUxULCBETTM1NV9WUFNTQkxfSU5UU0VMKTsKKwkJYmxfcmVndyhETTM1NV9WUFNTQkxfRVZUU0VMX0RFRkFVTFQsIERNMzU1X1ZQU1NCTF9FVlRTRUwpOworCX0gZWxzZSBpZiAob3Blcl9jZmcucGxhdGZvcm0gPT0gRE0zNjUpIHsKKwkJb3Blcl9jZmcuaHdfb3BzLmVuYWJsZV9jbG9jayA9IGRtMzY1X2VuYWJsZV9jbG9jazsKKwkJb3Blcl9jZmcuaHdfb3BzLnNlbGVjdF9jY2RjX3NvdXJjZSA9IGRtMzY1X3NlbGVjdF9jY2RjX3NvdXJjZTsKKwkJLyogU2V0dXAgdnBzcyBpbnRlcnJ1cHRzICovCisJCWlzcDVfd3JpdGUoRE0zNjVfSVNQNV9JTlRTRUwxX0RFRkFVTFQsIERNMzY1X0lTUDVfSU5UU0VMMSk7CisJCWlzcDVfd3JpdGUoRE0zNjVfSVNQNV9JTlRTRUwyX0RFRkFVTFQsIERNMzY1X0lTUDVfSU5UU0VMMik7CisJCWlzcDVfd3JpdGUoRE0zNjVfSVNQNV9JTlRTRUwzX0RFRkFVTFQsIERNMzY1X0lTUDVfSU5UU0VMMyk7CiAJfSBlbHNlCiAJCW9wZXJfY2ZnLmh3X29wcy5jbGVhcl93Ymxfb3ZlcmZsb3cgPSBkbTY0NHhfY2xlYXJfd2JsX292ZXJmbG93OwogCiAJc3Bpbl9sb2NrX2luaXQoJm9wZXJfY2ZnLnZwc3NfbG9jayk7Ci0JZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzIHZwc3MgcHJvYmUgc3VjY2Vzc1xuIiwgb3Blcl9jZmcudnBzc19uYW1lKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgdnBzcyBwcm9iZSBzdWNjZXNzXG4iLCBwbGF0Zm9ybV9uYW1lKTsKIAlyZXR1cm4gMDsKIAogZmFpbDM6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIyLT5zdGFydCwgb3Blcl9jZmcubGVuMik7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHIyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyMikpOwogZmFpbDI6Ci0JaW91bm1hcChvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSk7CisJaW91bm1hcChvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTApOwogZmFpbDE6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIxLT5zdGFydCwgb3Blcl9jZmcubGVuMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHIxLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyMSkpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IHZwc3NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JaW91bm1hcChvcGVyX2NmZy52cHNzX2JsX3JlZ3NfYmFzZSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKG9wZXJfY2ZnLnIxLT5zdGFydCwgb3Blcl9jZmcubGVuMSk7Ci0JaWYgKCFzdHJjbXAob3Blcl9jZmcudnBzc19uYW1lLCAiZG0zNTVfdnBzcyIpKSB7Ci0JCWlvdW5tYXAob3Blcl9jZmcudnBzc19yZWdzX2Jhc2UpOwotCQlyZWxlYXNlX21lbV9yZWdpb24ob3Blcl9jZmcucjItPnN0YXJ0LCBvcGVyX2NmZy5sZW4yKTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXM7CisKKwlpb3VubWFwKG9wZXJfY2ZnLnZwc3NfcmVnc19iYXNlMCk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAob3Blcl9jZmcucGxhdGZvcm0gPT0gRE0zNTUgfHwgb3Blcl9jZmcucGxhdGZvcm0gPT0gRE0zNjUpIHsKKwkJaW91bm1hcChvcGVyX2NmZy52cHNzX3JlZ3NfYmFzZTEpOworCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCmluZGV4IDI1MTAwMDAuLmVjYmNlZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCkBAIC0yMzIsNiArMjMyLDEyIEBACiAJewktMSwJCS0xLAktMSwJCS0xfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEgZGlrb21fZGszMDBfZGlnaXRhbFtdID0geworCXtFTTI4WFhfUjA4X0dQSU8sCTB4NmUsCX5FTV9HUElPXzQsCTEwfSwKKwl7RU0yODgwX1IwNF9HUE8sCTB4MDgsCTB4ZmYsCQkxMH0sCisJeyAtMSwJCQktMSwJLTEsCQktMX0sCit9OworCiAKIC8qCiAgKiAgQm9hcmQgZGVmaW5pdGlvbnMKQEAgLTQ2MSwyMSArNDY3LDMwIEBACiAJCS5uYW1lICAgICAgICAgPSAiTGVhZHRlayBXaW5mYXN0IFVTQiBJSSBEZWx1eGUiLAogCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKLQkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmhhc19pcl9pMmMgICA9IDEsCisJCS50dmF1ZGlvX2FkZHIgPSAweDU4LAorCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5UIHwKKwkJCQlUREE5ODg3X1BPUlQyX0FDVElWRSB8CisJCQkJVERBOTg4N19RU1MsCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExWCwKKwkJLmFkZWNvZGVyICAgICA9IEVNMjhYWF9UVkFVRElPLAogCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAotCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUyLAotCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCisJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTQsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9BVVgsCiAJCX0sIHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCi0JCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCisJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTUsCiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCi0JCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCisJCQkudm11eCAgICAgPSBTQUE3MTE1X1NWSURFTzMsCiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCisJCQkucmFkaW8JICA9IHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9SQURJTywKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0FVWCwKKwkJCX0KIAl9LAogCVtFTTI4MjBfQk9BUkRfVklERU9MT0dZXzIwSzE0WFVTQl0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiVmlkZW9sb2d5IDIwSzE0WFVTQiBVU0IyLjAiLApAQCAtNzMwLDExICs3NDUsMTIgQEAKIAogCVtFTTI4ODBfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTX0ZSXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJUZXJyYXRlYyBIeWJyaWQgWFMgU2VjYW0iLAotCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCiAJCS5oYXNfbXNwMzR4eCAgPSAxLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAogCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAogCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCisJCS5oYXNfZHZiICAgICAgPSAxLAorCQkuZHZiX2dwaW8gICAgID0gZGVmYXVsdF9kaWdpdGFsLAogCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLApAQCAtMTI2NSw2ICsxMjgxLDcgQEAKIAkJLmRlY29kZXIJPSBFTTI4WFhfU0FBNzExWCwKIAkJLmhhc19kdmIJPSAxLAogCQkuZHZiX2dwaW8JPSBlbTI4ODJfa3dvcmxkXzMxNXVfZGlnaXRhbCwKKwkJLmlyX2NvZGVzCT0gJmlyX2NvZGVzX2t3b3JsZF8zMTV1X3RhYmxlLAogCQkueGNsawkJPSBFTTI4WFhfWENMS19GUkVRVUVOQ1lfMTJNSFosCiAJCS5pMmNfc3BlZWQJPSBFTTI4WFhfSTJDX0NMS19XQUlUX0VOQUJMRSwKIAkJLyogQW5hbG9nIG1vZGUgLSBzdGlsbCBub3QgcmVhZHkgKi8KQEAgLTE0MzEsNiArMTQ0OCwyMSBAQAogCQkJLmdwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfYW5hbG9nLAogCQl9IH0sCiAJfSwKKwlbRU0yODgyX0JPQVJEX0RJS09NX0RLMzAwXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJEaWtvbSBESzMwMCIsCisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9YQzIwMjgsCisJCS50dW5lcl9ncGlvICAgPSBkZWZhdWx0X3R1bmVyX2dwaW8sCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKKwkJLm10c19maXJtd2FyZSA9IDEsCisJCS5oYXNfZHZiICAgICAgPSAxLAorCQkuZHZiX2dwaW8gICAgID0gZGlrb21fZGszMDBfZGlnaXRhbCwKKwkJLmlucHV0ICAgICAgICA9IHsgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCQkJLmdwaW8gICAgID0gZGVmYXVsdF9hbmFsb2csCisJCX0gfSwKKwl9LAogCVtFTTI4ODNfQk9BUkRfS1dPUkxEX0hZQlJJRF8zMzBVXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJLd29ybGQgUGx1c1RWIEhEIEh5YnJpZCAzMzAiLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LApAQCAtMTc1MSw2ICsxNzgzLDcgQEAKIAl7MHhjZWU0NGE5OSwgRU0yODgyX0JPQVJEX0VWR0FfSU5EVFVCRSwgVFVORVJfWEMyMDI4fSwKIAl7MHhiODg0NmIyMCwgRU0yODgxX0JPQVJEX1BJTk5BQ0xFX0hZQlJJRF9QUk8sIFRVTkVSX1hDMjAyOH0sCiAJezB4NjNmNjUzYmQsIEVNMjg3MF9CT0FSRF9SRURET19EVkJfQ19VU0JfQk9YLCBUVU5FUl9BQlNFTlR9LAorCXsweDRlOTEzNDQyLCBFTTI4ODJfQk9BUkRfRElLT01fREszMDAsIFRVTkVSX1hDMjAyOH0sCiB9OwogCiAvKiBJMkMgZGV2aWNlbGlzdCBoYXNoIHRhYmxlIGZvciBkZXZpY2VzIHdpdGggZ2VuZXJpYyBVU0IgSURzICovCkBAIC0yMTAzLDYgKzIxMzYsNyBAQAogCQljdGwtPmRlbW9kID0gWEMzMDI4X0ZFX0RFRkFVTFQ7CiAJCWJyZWFrOwogCWNhc2UgRU0yODgzX0JPQVJEX0tXT1JMRF9IWUJSSURfMzMwVToKKwljYXNlIEVNMjg4Ml9CT0FSRF9ESUtPTV9ESzMwMDoKIAkJY3RsLT5kZW1vZCA9IFhDMzAyOF9GRV9DSElOQTsKIAkJY3RsLT5mbmFtZSA9IFhDMjAyOF9ERUZBVUxUX0ZJUk1XQVJFOwogCQlicmVhazsKQEAgLTIyNTksOSArMjI5MywxMiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHZvaWQgZW0yOHh4X3JlZ2lzdGVyX2kyY19pcihzdHJ1Y3QgZW0yOHh4ICpkZXYpCiB7CisJLyogTGVhZHRlayB3aW5mYXN0IHR2IFVTQklJIGRlbHV4ZSBjYW4gZmluZCBhIG5vbiB3b3JraW5nIElSLWRldmljZSAqLworCS8qIGF0IGFkZHJlc3MgMHgxOCwgc28gaWYgdGhhdCBhZGRyZXNzIGlzIG5lZWRlZCBmb3IgYW5vdGhlciBib2FyZCBpbiAqLworCS8qIHRoZSBmdXR1cmUsIHBsZWFzZSBwdXQgaXQgYWZ0ZXIgMHgxZi4gKi8KIAlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKIAljb25zdCB1bnNpZ25lZCBzaG9ydCBhZGRyX2xpc3RbXSA9IHsKLQkJIDB4MzAsIDB4NDcsIEkyQ19DTElFTlRfRU5ECisJCSAweDFmLCAweDMwLCAweDQ3LCBJMkNfQ0xJRU5UX0VORAogCX07CiAKIAlpZiAoZGlzYWJsZV9pcikKQEAgLTIyODgsNiArMjMyNSwxMCBAQAogCQlkZXYtPmluaXRfZGF0YS5pcl9jb2RlcyA9ICZpcl9jb2Rlc19yYzVfaGF1cHBhdWdlX25ld190YWJsZTsKIAkJZGV2LT5pbml0X2RhdGEuZ2V0X2tleSA9IGVtMjh4eF9nZXRfa2V5X2VtX2hhdXA7CiAJCWRldi0+aW5pdF9kYXRhLm5hbWUgPSAiaTJjIElSIChFTTI4NDAgSGF1cHBhdWdlKSI7CisJY2FzZSBFTTI4MjBfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1VTQklJX0RFTFVYRToKKwkJZGV2LT5pbml0X2RhdGEuaXJfY29kZXMgPSAmaXJfY29kZXNfd2luZmFzdF91c2JpaV9kZWx1eGVfdGFibGU7OworCQlkZXYtPmluaXRfZGF0YS5nZXRfa2V5ID0gZW0yOHh4X2dldF9rZXlfd2luZmFzdF91c2JpaV9kZWx1eGU7CisJCWRldi0+aW5pdF9kYXRhLm5hbWUgPSAiaTJjIElSIChFTTI4MjAgV2luZmFzdCBUViBVU0JJSSBEZWx1eGUpIjsKIAkJYnJlYWs7CiAJfQogCkBAIC0yMzgxLDYgKzI0MjIsMzEgQEAKIAkJZW0yOHh4X2dwaW9fc2V0KGRldiwgZGV2LT5ib2FyZC50dW5lcl9ncGlvKTsKIAkJZW0yOHh4X3NldF9tb2RlKGRldiwgRU0yOFhYX0FOQUxPR19NT0RFKTsKIAkJYnJlYWs7CisKKy8qCisJCSAqIFRoZSBEaWtvbSBESzMwMCBpcyBkZXRlY3RlZCBhcyBhbiBLd29ybGQgVlMtRFZCLVQgMzIzVVIuCisJCSAqCisJCSAqIFRoaXMgb2NjdXJzIGJlY2F1c2UgdGhleSBzaGFyZSBpZGVudGljYWwgVVNCIHZlbmRvciBhbmQKKwkJICogcHJvZHVjdCBJRHMuCisJCSAqCisJCSAqIFdoYXQgd2UgZG8gaGVyZSBpcyBsb29rIHVwIHRoZSBFRVBST00gaGFzaCBvZiB0aGUgRGlrb20KKwkJICogYW5kIGlmIGl0IGlzIGZvdW5kIHRoZW4gd2UgZGVjaWRlIHRoYXQgd2UgZG8gbm90IGhhdmUKKwkJICogYSBLd29ybGQgYW5kIHJlc2V0IHRoZSBkZXZpY2UgdG8gdGhlIERpa29tIGluc3RlYWQuCisJCSAqCisJCSAqIFRoaXMgc29sdXRpb24gaXMgb25seSB2YWxpZCBpZiB0aGV5IGRvIG5vdCBzaGFyZSBlZXByb20KKwkJICogaGFzaCBpZGVudGl0aWVzIHdoaWNoIGhhcyBub3QgYmVlbiBkZXRlcm1pbmVkIGFzIHlldC4KKwkJICovCisJY2FzZSBFTTI4ODJfQk9BUkRfS1dPUkxEX1ZTX0RWQlQ6CisJCWlmICghZW0yOHh4X2hpbnRfYm9hcmQoZGV2KSkKKwkJCWVtMjh4eF9zZXRfbW9kZWwoZGV2KTsKKworCQkvKiBJbiBjYXNlcyB3aGVyZSB3ZSBoYWQgdG8gdXNlIGEgYm9hcmQgaGludCwgdGhlIGNhbGwgdG8KKwkJICAgZW0yOHh4X3NldF9tb2RlKCkgaW4gZW0yOHh4X3ByZV9jYXJkX3NldHVwKCkgd2FzIGEgbm8tb3AsCisJCSAgIHNvIG1ha2UgdGhlIGNhbGwgbm93IHNvIHRoZSBhbmFsb2cgR1BJT3MgYXJlIHNldCBwcm9wZXJseQorCQkgICBiZWZvcmUgcHJvYmluZyB0aGUgaTJjIGJ1cy4gKi8KKwkJZW0yOHh4X2dwaW9fc2V0KGRldiwgZGV2LT5ib2FyZC50dW5lcl9ncGlvKTsKKwkJZW0yOHh4X3NldF9tb2RlKGRldiwgRU0yOFhYX0FOQUxPR19NT0RFKTsKKwkJYnJlYWs7CiAJfQogCiAjaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFUykgJiYgZGVmaW5lZChNT0RVTEUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYwppbmRleCBiMzExZDQ1Li41YTM3ZWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKQEAgLTY5MSw5ICs2OTEsMTUgQEAKIAlpZiAoZW0yOHh4X3ZiaV9zdXBwb3J0ZWQoZGV2KSA9PSAxKSB7CiAJCXZpbmN0cmwgfD0gRU0yOFhYX1ZJTkNUUkxfVkJJX1JBVzsKIAkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMzRfVkJJX1NUQVJUX0gsIDB4MDApOwotCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzNV9WQklfU1RBUlRfViwgMHgwOSk7Ci0JCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjM2X1ZCSV9XSURUSCwgMHhiNCk7Ci0JCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjM3X1ZCSV9IRUlHSFQsIDB4MGMpOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzNl9WQklfV0lEVEgsIGRldi0+dmJpX3dpZHRoLzQpOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzN19WQklfSEVJR0hULCBkZXYtPnZiaV9oZWlnaHQpOworCQlpZiAoZGV2LT5ub3JtICYgVjRMMl9TVERfNTI1XzYwKSB7CisJCQkvKiBOVFNDICovCisJCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IzNV9WQklfU1RBUlRfViwgMHgwOSk7CisJCX0gZWxzZSBpZiAoZGV2LT5ub3JtICYgVjRMMl9TVERfNjI1XzUwKSB7CisJCQkvKiBQQUwgKi8KKwkJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjM1X1ZCSV9TVEFSVF9WLCAweDA3KTsKKwkJfQogCX0KIAogCXJldHVybiBlbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IxMV9WSU5DVFJMLCB2aW5jdHJsKTsKQEAgLTc2MCw2ICs3NjYsMTMgQEAKIAl3aWR0aCA9IG5vcm1fbWF4dyhkZXYpOwogCWhlaWdodCA9IG5vcm1fbWF4aChkZXYpOwogCisJLyogUHJvcGVybHkgc2V0dXAgVkJJICovCisJZGV2LT52Ymlfd2lkdGggPSA3MjA7CisJaWYgKGRldi0+bm9ybSAmIFY0TDJfU1REXzUyNV82MCkKKwkJZGV2LT52YmlfaGVpZ2h0ID0gMTI7CisJZWxzZQorCQlkZXYtPnZiaV9oZWlnaHQgPSAxODsKKwogCWlmICghZGV2LT5wcm9ncmVzc2l2ZSkKIAkJaGVpZ2h0ID4+PSBub3JtX21heGgoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jCmluZGV4IGNjMDUwNWUuLjFiOTYzNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMKQEAgLTUwMiw3ICs1MDIsOSBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgRU0yODgwX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9YUzoKKwljYXNlIEVNMjg4MF9CT0FSRF9URVJSQVRFQ19IWUJSSURfWFNfRlI6CiAJY2FzZSBFTTI4ODFfQk9BUkRfUElOTkFDTEVfSFlCUklEX1BSTzoKKwljYXNlIEVNMjg4Ml9CT0FSRF9ESUtPTV9ESzMwMDoKIAkJZHZiLT5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCiAJCQkJCSAgICZlbTI4eHhfemwxMDM1M194YzMwMjhfbm9faTJjX2dhdGUsCiAJCQkJCSAgICZkZXYtPmkyY19hZGFwKTsKQEAgLTYwNiw2ICs2MDgsNyBAQAogCiAJaWYgKGRldi0+ZHZiKSB7CiAJCXVucmVnaXN0ZXJfZHZiKGRldi0+ZHZiKTsKKwkJa2ZyZWUoZGV2LT5kdmIpOwogCQlkZXYtPmR2YiA9IE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCmluZGV4IGFmMGQ5MzUuLjFmYjc1NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jCkBAIC03NSw2ICs3NSwxMCBAQAogCXVuc2lnbmVkIGludCByZXBlYXRfaW50ZXJ2YWw7CiAKIAlpbnQgICgqZ2V0X2tleSkoc3RydWN0IGVtMjh4eF9JUiAqLCBzdHJ1Y3QgZW0yOHh4X2lyX3BvbGxfcmVzdWx0ICopOworCisJLyogSVIgZGV2aWNlIHByb3BlcnRpZXMgKi8KKworCXN0cnVjdCBpcl9kZXZfcHJvcHMgcHJvcHM7CiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTgwLDYgKzE4NCwzNiBAQAogCXJldHVybiAxOwogfQogCitpbnQgZW0yOHh4X2dldF9rZXlfd2luZmFzdF91c2JpaV9kZWx1eGUoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKK3sKKwl1bnNpZ25lZCBjaGFyIHN1YmFkZHIsIGtleWRldGVjdCwga2V5OworCisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7IHsgLmFkZHIgPSBpci0+Yy0+YWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9ICZzdWJhZGRyLCAubGVuID0gMX0sCisKKwkJCQl7IC5hZGRyID0gaXItPmMtPmFkZHIsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gJmtleWRldGVjdCwgLmxlbiA9IDF9IH07CisKKwlzdWJhZGRyID0gMHgxMDsKKwlpZiAoMiAhPSBpMmNfdHJhbnNmZXIoaXItPmMtPmFkYXB0ZXIsIG1zZywgMikpIHsKKwkJaTJjZHByaW50aygicmVhZCBlcnJvclxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoa2V5ZGV0ZWN0ID09IDB4MDApCisJCXJldHVybiAwOworCisJc3ViYWRkciA9IDB4MDA7CisJbXNnWzFdLmJ1ZiA9ICZrZXk7CisJaWYgKDIgIT0gaTJjX3RyYW5zZmVyKGlyLT5jLT5hZGFwdGVyLCBtc2csIDIpKSB7CisJCWkyY2RwcmludGsoInJlYWQgZXJyb3JcbiIpOworCXJldHVybiAtRUlPOworCX0KKwlpZiAoa2V5ID09IDB4MDApCisJCXJldHVybiAwOworCisJKmlyX2tleSA9IGtleTsKKwkqaXJfcmF3ID0ga2V5OworCXJldHVybiAxOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogIFBvbGwgYmFzZWQgZ2V0IGtleWNvZGUgZnVuY3Rpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTMzNiwzNSArMzcwLDI4IEBACiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZpci0+d29yayk7CiB9CiAKLWludCBlbTI4eHhfaXJfaW5pdChzdHJ1Y3QgZW0yOHh4ICpkZXYpCitpbnQgZW0yOHh4X2lyX2NoYW5nZV9wcm90b2NvbCh2b2lkICpwcml2LCB1NjQgaXJfdHlwZSkKIHsKLQlzdHJ1Y3QgZW0yOHh4X0lSICppcjsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JdTggaXJfY29uZmlnOwotCWludCBlcnIgPSAtRU5PTUVNOwotCi0JaWYgKGRldi0+Ym9hcmQuaXJfY29kZXMgPT0gTlVMTCkgewotCQkvKiBObyByZW1vdGUgY29udHJvbCBzdXBwb3J0ICovCi0JCXJldHVybiAwOwotCX0KLQotCWlyID0ga3phbGxvYyhzaXplb2YoKmlyKSwgR0ZQX0tFUk5FTCk7Ci0JaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFpciB8fCAhaW5wdXRfZGV2KQotCQlnb3RvIGVycl9vdXRfZnJlZTsKLQotCWlyLT5pbnB1dCA9IGlucHV0X2RldjsKLQlpcl9jb25maWcgPSBFTTI4NzRfSVJfUkM1OworCWludCByYyA9IDA7CisJc3RydWN0IGVtMjh4eF9JUiAqaXIgPSBwcml2OworCXN0cnVjdCBlbTI4eHggKmRldiA9IGlyLT5kZXY7CisJdTggaXJfY29uZmlnID0gRU0yODc0X0lSX1JDNTsKIAogCS8qIEFkanVzdCB4Y2xrIGJhc2VkIG8gSVIgdGFibGUgZm9yIFJDNS9ORUMgdGFibGVzICovCi0JaWYgKGRldi0+Ym9hcmQuaXJfY29kZXMtPmlyX3R5cGUgPT0gSVJfVFlQRV9SQzUpIHsKKworCWRldi0+Ym9hcmQuaXJfY29kZXMtPmlyX3R5cGUgPSBJUl9UWVBFX09USEVSOworCWlmIChpcl90eXBlID09IElSX1RZUEVfUkM1KSB7CiAJCWRldi0+Ym9hcmQueGNsayB8PSBFTTI4WFhfWENMS19JUl9SQzVfTU9ERTsKIAkJaXItPmZ1bGxfY29kZSA9IDE7Ci0JfSBlbHNlICBpZiAoZGV2LT5ib2FyZC5pcl9jb2Rlcy0+aXJfdHlwZSA9PSBJUl9UWVBFX05FQykgeworCX0gZWxzZSBpZiAoaXJfdHlwZSA9PSBJUl9UWVBFX05FQykgewogCQlkZXYtPmJvYXJkLnhjbGsgJj0gfkVNMjhYWF9YQ0xLX0lSX1JDNV9NT0RFOwogCQlpcl9jb25maWcgPSBFTTI4NzRfSVJfTkVDOwogCQlpci0+ZnVsbF9jb2RlID0gMTsKLQl9CisJfSBlbHNlCisJCXJjID0gLUVJTlZBTDsKKworCWRldi0+Ym9hcmQuaXJfY29kZXMtPmlyX3R5cGUgPSBpcl90eXBlOworCiAJZW0yOHh4X3dyaXRlX3JlZ19iaXRzKGRldiwgRU0yOFhYX1IwRl9YQ0xLLCBkZXYtPmJvYXJkLnhjbGssCiAJCQkgICAgICBFTTI4WFhfWENMS19JUl9SQzVfTU9ERSk7CiAKQEAgLTM4MCw5ICs0MDcsNDIgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKCJVbnJlY29nbml6ZWQgZW0yOHh4IGNoaXAgaWQ6IElSIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlnb3RvIGVycl9vdXRfZnJlZTsKKwkJcmMgPSAtRUlOVkFMOwogCX0KIAorCXJldHVybiByYzsKK30KKworaW50IGVtMjh4eF9pcl9pbml0KHN0cnVjdCBlbTI4eHggKmRldikKK3sKKwlzdHJ1Y3QgZW0yOHh4X0lSICppcjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwlpZiAoZGV2LT5ib2FyZC5pcl9jb2RlcyA9PSBOVUxMKSB7CisJCS8qIE5vIHJlbW90ZSBjb250cm9sIHN1cHBvcnQgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJaXIgPSBremFsbG9jKHNpemVvZigqaXIpLCBHRlBfS0VSTkVMKTsKKwlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlyIHx8ICFpbnB1dF9kZXYpCisJCWdvdG8gZXJyX291dF9mcmVlOworCisJLyogcmVjb3JkIGhhbmRsZXMgdG8gb3Vyc2VsZiAqLworCWlyLT5kZXYgPSBkZXY7CisJZGV2LT5pciA9IGlyOworCisJaXItPmlucHV0ID0gaW5wdXRfZGV2OworCisJLyoKKwkgKiBlbTI4NzQgc3VwcG9ydHMgbW9yZSBwcm90b2NvbHMuIEZvciBub3csIGxldCdzIGp1c3QgYW5ub3VuY2UKKwkgKiB0aGUgdHdvIHByb3RvY29scyB0aGF0IHdlcmUgYWxyZWFkeSB0ZXN0ZWQKKwkgKi8KKwlpci0+cHJvcHMuYWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX1JDNSB8IElSX1RZUEVfTkVDOworCWlyLT5wcm9wcy5wcml2ID0gaXI7CisJaXItPnByb3BzLmNoYW5nZV9wcm90b2NvbCA9IGVtMjh4eF9pcl9jaGFuZ2VfcHJvdG9jb2w7CisKIAkvKiBUaGlzIGlzIGhvdyBvZnRlbiB3ZSBhc2sgdGhlIGNoaXAgZm9yIElSIGluZm9ybWF0aW9uICovCiAJaXItPnBvbGxpbmcgPSAxMDA7IC8qIG1zICovCiAKQEAgLTM5Myw2ICs0NTMsOCBAQAogCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBpci0+cGh5cywgc2l6ZW9mKGlyLT5waHlzKSk7CiAJc3RybGNhdChpci0+cGh5cywgIi9pbnB1dDAiLCBzaXplb2YoaXItPnBoeXMpKTsKIAorCS8qIFNldCBJUiBwcm90b2NvbCAqLworCWVtMjh4eF9pcl9jaGFuZ2VfcHJvdG9jb2woaXIsIGRldi0+Ym9hcmQuaXJfY29kZXMtPmlyX3R5cGUpOwogCWVyciA9IGlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmaXItPmlyLCBJUl9UWVBFX09USEVSKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJfb3V0X2ZyZWU7CkBAIC00MDUsMTQgKzQ2NywxMyBAQAogCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwogCiAJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmRldi0+dWRldi0+ZGV2OwotCS8qIHJlY29yZCBoYW5kbGVzIHRvIG91cnNlbGYgKi8KLQlpci0+ZGV2ID0gZGV2OwotCWRldi0+aXIgPSBpcjsKKwogCiAJZW0yOHh4X2lyX3N0YXJ0KGlyKTsKIAogCS8qIGFsbCBkb25lICovCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmlucHV0LCBkZXYtPmJvYXJkLmlyX2NvZGVzKTsKKwllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+aW5wdXQsIGRldi0+Ym9hcmQuaXJfY29kZXMsCisJCQkJJmlyLT5wcm9wcyk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X3N0b3A7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1yZWcuaAppbmRleCAwNThhYzg3Li45MWU5MDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtcmVnLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXJlZy5oCkBAIC0xNzMsOCArMTczLDggQEAKIC8qIGVtMjg3NCBJUiBjb25maWcgcmVnaXN0ZXIgKDB4NTApICovCiAjZGVmaW5lIEVNMjg3NF9JUl9ORUMgICAgICAgICAgIDB4MDAKICNkZWZpbmUgRU0yODc0X0lSX1JDNSAgICAgICAgICAgMHgwNAotI2RlZmluZSBFTTI4NzRfSVJfUkM1X01PREVfMCAgICAweDA4Ci0jZGVmaW5lIEVNMjg3NF9JUl9SQzVfTU9ERV82QSAgIDB4MGIKKyNkZWZpbmUgRU0yODc0X0lSX1JDNl9NT0RFXzAgICAgMHgwOAorI2RlZmluZSBFTTI4NzRfSVJfUkM2X01PREVfNkEgICAweDBiCiAKIC8qIGVtMjg3NCBUcmFuc3BvcnQgU3RyZWFtIEVuYWJsZSBSZWdpc3RlciAoMHg1ZikgKi8KICNkZWZpbmUgRU0yODc0X1RTMV9DQVBUVVJFX0VOQUJMRSAoMSA8PCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZiaS5jCmluZGV4IDk0OTQzZTUuLmM3ZGNlMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmJpLmMKQEAgLTcxLDcgKzcxLDExIEBACiBzdGF0aWMgaW50CiB2Ymlfc2V0dXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgKmNvdW50LCB1bnNpZ25lZCBpbnQgKnNpemUpCiB7Ci0JKnNpemUgPSA3MjAgKiAxMiAqIDI7CisJc3RydWN0IGVtMjh4eF9maCAgICAgKmZoICA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgZW0yOHh4ICAgICAgICAqZGV2ID0gZmgtPmRldjsKKworCSpzaXplID0gZGV2LT52Ymlfd2lkdGggKiBkZXYtPnZiaV9oZWlnaHQgKiAyOworCiAJaWYgKDAgPT0gKmNvdW50KQogCQkqY291bnQgPSB2YmlidWZzOwogCWlmICgqY291bnQgPCAyKQpAQCAtODUsMTkgKzg5LDE4IEBACiB2YmlfcHJlcGFyZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAogCSAgICBlbnVtIHY0bDJfZmllbGQgZmllbGQpCiB7CisJc3RydWN0IGVtMjh4eF9maCAgICAgKmZoICA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgZW0yOHh4ICAgICAgICAqZGV2ID0gZmgtPmRldjsKIAlzdHJ1Y3QgZW0yOHh4X2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgZW0yOHh4X2J1ZmZlciwgdmIpOwogCWludCAgICAgICAgICAgICAgICAgIHJjID0gMDsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKIAotCXNpemUgPSA3MjAgKiAxMiAqIDI7Ci0KLQlidWYtPnZiLnNpemUgPSBzaXplOworCWJ1Zi0+dmIuc2l6ZSA9IGRldi0+dmJpX3dpZHRoICogZGV2LT52YmlfaGVpZ2h0ICogMjsKIAogCWlmICgwICE9IGJ1Zi0+dmIuYmFkZHIgICYmICBidWYtPnZiLmJzaXplIDwgYnVmLT52Yi5zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWJ1Zi0+dmIud2lkdGggID0gNzIwOwotCWJ1Zi0+dmIuaGVpZ2h0ID0gMTI7CisJYnVmLT52Yi53aWR0aCAgPSBkZXYtPnZiaV93aWR0aDsKKwlidWYtPnZiLmhlaWdodCA9IGRldi0+dmJpX2hlaWdodDsKIAlidWYtPnZiLmZpZWxkICA9IGZpZWxkOwogCiAJaWYgKFZJREVPQlVGX05FRURTX0lOSVQgPT0gYnVmLT52Yi5zdGF0ZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwppbmRleCA4NDliMThjLi5hYzJiZDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwpAQCAtMjgyLDcgKzI4Miw3IEBACiB7CiAJdm9pZCAqc3RhcnR3cml0ZSwgKnN0YXJ0cmVhZDsKIAlpbnQgIG9mZnNldDsKLQlpbnQgYnl0ZXNwZXJsaW5lID0gNzIwOworCWludCBieXRlc3BlcmxpbmUgPSBkZXYtPnZiaV93aWR0aDsKIAogCWlmIChkZXYgPT0gTlVMTCkgewogCQllbTI4eHhfaXNvY2RiZygiZGV2IGlzIG51bGxcbiIpOwpAQCAtMzIzLDggKzMyMyw4IEBACiAKIAkvKiBNYWtlIHN1cmUgdGhlIGJvdHRvbSBmaWVsZCBwb3B1bGF0ZXMgdGhlIHNlY29uZCBoYWxmIG9mIHRoZSBmcmFtZSAqLwogCWlmIChidWYtPnRvcF9maWVsZCA9PSAwKSB7Ci0JCXN0YXJ0d3JpdGUgKz0gYnl0ZXNwZXJsaW5lICogMHgwYzsKLQkJb2Zmc2V0ICs9IGJ5dGVzcGVybGluZSAqIDB4MGM7CisJCXN0YXJ0d3JpdGUgKz0gYnl0ZXNwZXJsaW5lICogZGV2LT52YmlfaGVpZ2h0OworCQlvZmZzZXQgKz0gYnl0ZXNwZXJsaW5lICogZGV2LT52YmlfaGVpZ2h0OwogCX0KIAogCW1lbWNweShzdGFydHdyaXRlLCBzdGFydHJlYWQsIGxlbik7CkBAIC01NzgsOCArNTc4LDcgQEAKIAkJCWRldi0+Y3VyX2ZpZWxkID0gcFsyXTsKIAkJfQogCi0JCS8qIEZJWE1FOiBnZXQgcmlkIG9mIGhhcmQtY29kZWQgdmFsdWUgKi8KLQkJdmJpX3NpemUgPSA3MjAgKiAweDBjOworCQl2Ymlfc2l6ZSA9IGRldi0+dmJpX3dpZHRoICogZGV2LT52YmlfaGVpZ2h0OwogCiAJCWlmIChkZXYtPmNhcHR1cmVfdHlwZSA9PSAwKSB7CiAJCQlpZiAoZGV2LT52YmlfcmVhZCA+PSB2Ymlfc2l6ZSkgewpAQCAtMTg1MCwxOCArMTg0OSwyNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZvcm1hdCkKIHsKLQlmb3JtYXQtPmZtdC52Ymkuc2FtcGxlc19wZXJfbGluZSA9IDcyMDsKKwlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAgKmZoICA9IHByaXY7CisJc3RydWN0IGVtMjh4eCAgICAgICAgICpkZXYgPSBmaC0+ZGV2OworCisJZm9ybWF0LT5mbXQudmJpLnNhbXBsZXNfcGVyX2xpbmUgPSBkZXYtPnZiaV93aWR0aDsKIAlmb3JtYXQtPmZtdC52Ymkuc2FtcGxlX2Zvcm1hdCA9IFY0TDJfUElYX0ZNVF9HUkVZOwogCWZvcm1hdC0+Zm10LnZiaS5vZmZzZXQgPSAwOwogCWZvcm1hdC0+Zm10LnZiaS5mbGFncyA9IDA7CisJZm9ybWF0LT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgPSA2NzUwMDAwICogNCAvIDI7CisJZm9ybWF0LT5mbXQudmJpLmNvdW50WzBdID0gZGV2LT52YmlfaGVpZ2h0OworCWZvcm1hdC0+Zm10LnZiaS5jb3VudFsxXSA9IGRldi0+dmJpX2hlaWdodDsKIAogCS8qIFZhcmllcyBieSB2aWRlbyBzdGFuZGFyZCAoTlRTQywgUEFMLCBldGMuKSAqLwotCS8qIEZJWE1FOiBoYXJkLWNvZGVkIGZvciBOVFNDIHN1cHBvcnQgKi8KLQlmb3JtYXQtPmZtdC52Ymkuc2FtcGxpbmdfcmF0ZSA9IDY3NTAwMDAgKiA0IC8gMjsgLyogRklYTUU6ID8/PyAqLwotCWZvcm1hdC0+Zm10LnZiaS5jb3VudFswXSA9IDEyOwotCWZvcm1hdC0+Zm10LnZiaS5jb3VudFsxXSA9IDEyOwotCWZvcm1hdC0+Zm10LnZiaS5zdGFydFswXSA9IDEwOwotCWZvcm1hdC0+Zm10LnZiaS5zdGFydFsxXSA9IDI3MzsKKwlpZiAoZGV2LT5ub3JtICYgVjRMMl9TVERfNTI1XzYwKSB7CisJCS8qIE5UU0MgKi8KKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzBdID0gMTA7CisJCWZvcm1hdC0+Zm10LnZiaS5zdGFydFsxXSA9IDI3MzsKKwl9IGVsc2UgaWYgKGRldi0+bm9ybSAmIFY0TDJfU1REXzYyNV81MCkgeworCQkvKiBQQUwgKi8KKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzBdID0gNjsKKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzFdID0gMzE4OworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTg2OSwxOCArMTg3NywyNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZvcm1hdCkKIHsKLQlmb3JtYXQtPmZtdC52Ymkuc2FtcGxlc19wZXJfbGluZSA9IDcyMDsKKwlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAgKmZoICA9IHByaXY7CisJc3RydWN0IGVtMjh4eCAgICAgICAgICpkZXYgPSBmaC0+ZGV2OworCisJZm9ybWF0LT5mbXQudmJpLnNhbXBsZXNfcGVyX2xpbmUgPSBkZXYtPnZiaV93aWR0aDsKIAlmb3JtYXQtPmZtdC52Ymkuc2FtcGxlX2Zvcm1hdCA9IFY0TDJfUElYX0ZNVF9HUkVZOwogCWZvcm1hdC0+Zm10LnZiaS5vZmZzZXQgPSAwOwogCWZvcm1hdC0+Zm10LnZiaS5mbGFncyA9IDA7CisJZm9ybWF0LT5mbXQudmJpLnNhbXBsaW5nX3JhdGUgPSA2NzUwMDAwICogNCAvIDI7CisJZm9ybWF0LT5mbXQudmJpLmNvdW50WzBdID0gZGV2LT52YmlfaGVpZ2h0OworCWZvcm1hdC0+Zm10LnZiaS5jb3VudFsxXSA9IGRldi0+dmJpX2hlaWdodDsKIAogCS8qIFZhcmllcyBieSB2aWRlbyBzdGFuZGFyZCAoTlRTQywgUEFMLCBldGMuKSAqLwotCS8qIEZJWE1FOiBoYXJkLWNvZGVkIGZvciBOVFNDIHN1cHBvcnQgKi8KLQlmb3JtYXQtPmZtdC52Ymkuc2FtcGxpbmdfcmF0ZSA9IDY3NTAwMDAgKiA0IC8gMjsgLyogRklYTUU6ID8/PyAqLwotCWZvcm1hdC0+Zm10LnZiaS5jb3VudFswXSA9IDEyOwotCWZvcm1hdC0+Zm10LnZiaS5jb3VudFsxXSA9IDEyOwotCWZvcm1hdC0+Zm10LnZiaS5zdGFydFswXSA9IDEwOwotCWZvcm1hdC0+Zm10LnZiaS5zdGFydFsxXSA9IDI3MzsKKwlpZiAoZGV2LT5ub3JtICYgVjRMMl9TVERfNTI1XzYwKSB7CisJCS8qIE5UU0MgKi8KKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzBdID0gMTA7CisJCWZvcm1hdC0+Zm10LnZiaS5zdGFydFsxXSA9IDI3MzsKKwl9IGVsc2UgaWYgKGRldi0+bm9ybSAmIFY0TDJfU1REXzYyNV81MCkgeworCQkvKiBQQUwgKi8KKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzBdID0gNjsKKwkJZm9ybWF0LT5mbXQudmJpLnN0YXJ0WzFdID0gMzE4OworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTkyMiw3ICsxOTM5LDggQEAKIAkJICAgQXQgYSBtaW5pbXVtLCBpdCBjYXVzZXMgYSBjcmFzaCBpbiB6dmJpIHNpbmNlIGl0IGRvZXMKIAkJICAgYSBtZW1jcHkgYmFzZWQgb24gdGhlIHNvdXJjZSBidWZmZXIgbGVuZ3RoICovCiAJCWludCByZXN1bHQgPSB2aWRlb2J1Zl9xdWVyeWJ1ZigmZmgtPnZiX3ZiaXEsIGIpOwotCQliLT5sZW5ndGggPSAxNzI4MDsKKwkJYi0+bGVuZ3RoID0gZGV2LT52Ymlfd2lkdGggKiBkZXYtPnZiaV9oZWlnaHQgKiAyOworCiAJCXJldHVybiByZXN1bHQ7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaAppbmRleCA4MGQ5YjRmLi5iYTZmZTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaApAQCAtMTExLDYgKzExMSw3IEBACiAjZGVmaW5lIEVNMjg2MV9CT0FSRF9HQURNRUlfVVRWMzMwUExVUyAgICAgICAgICAgNzIKICNkZWZpbmUgRU0yODcwX0JPQVJEX1JFRERPX0RWQl9DX1VTQl9CT1ggICAgICAgICAgNzMKICNkZWZpbmUgRU0yODAwX0JPQVJEX1ZDMjExQQkJCSAgNzQKKyNkZWZpbmUgRU0yODgyX0JPQVJEX0RJS09NX0RLMzAwCQkgIDc1CiAKIC8qIExpbWl0cyBtaW5pbXVtIGFuZCBkZWZhdWx0IG51bWJlciBvZiBidWZmZXJzICovCiAjZGVmaW5lIEVNMjhYWF9NSU5fQlVGIDQKQEAgLTU1Miw3ICs1NTMsOCBAQAogCWludCBjYXB0dXJlX3R5cGU7CiAJaW50IHZiaV9yZWFkOwogCXVuc2lnbmVkIGNoYXIgY3VyX2ZpZWxkOwotCisJdW5zaWduZWQgaW50IHZiaV93aWR0aDsKKwl1bnNpZ25lZCBpbnQgdmJpX2hlaWdodDsgLyogbGluZXMgcGVyIGZpZWxkICovCiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICAgICByZXF1ZXN0X21vZHVsZV93azsKIApAQCAtNjkzLDYgKzY5NSw4IEBACiBpbnQgZW0yOHh4X2dldF9rZXlfZW1faGF1cChzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KTsKIGludCBlbTI4eHhfZ2V0X2tleV9waW5uYWNsZV91c2JfZ3JleShzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksCiAJCQkJICAgICB1MzIgKmlyX3Jhdyk7CitpbnQgZW0yOHh4X2dldF9rZXlfd2luZmFzdF91c2JpaV9kZWx1eGUoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LAorCQkJCSAgICAgdTMyICppcl9yYXcpOwogdm9pZCBlbTI4eHhfcmVnaXN0ZXJfc25hcHNob3RfYnV0dG9uKHN0cnVjdCBlbTI4eHggKmRldik7CiB2b2lkIGVtMjh4eF9kZXJlZ2lzdGVyX3NuYXBzaG90X2J1dHRvbihzdHJ1Y3QgZW0yOHh4ICpkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL0tjb25maWcKaW5kZXggZGNjMWEwMy4uODc5ODFiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvS2NvbmZpZwpAQCAtMSw3ICsxLDExIEBACiBjb25maWcgVVNCX0VUNjFYMjUxCi0JdHJpc3RhdGUgIlVTQiBFVDYxWFsxMl01MSBQQyBDYW1lcmEgQ29udHJvbGxlciBzdXBwb3J0IgorCXRyaXN0YXRlICJVU0IgRVQ2MVhbMTJdNTEgUEMgQ2FtZXJhIENvbnRyb2xsZXIgc3VwcG9ydCAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyCisJZGVmYXVsdCBuCiAJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaXMgREVQUkVDQVRFRCBwbGVhc2UgdXNlIHRoZSBnc3BjYSB6YzN4eCBtb2R1bGUKKwkgIGluc3RlYWQuCisKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiBFdG9tcyBFVDYxWDE1MQogCSAgb3IgRVQ2MVgyNTEgUEMgQ2FtZXJhIENvbnRyb2xsZXJzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcKaW5kZXggNjA5ZDY1Yi4uZTAwNjBjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZwpAQCAtMjEsNiArMjEsMTUgQEAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvS2NvbmZpZyIKIAorY29uZmlnIFVTQl9HU1BDQV9CRU5RCisJdHJpc3RhdGUgIkJlbnEgVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIEJlbnEgREMgRTMwMCBjYW1lcmEuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX2JlbnEuCisKIGNvbmZpZyBVU0JfR1NQQ0FfQ09ORVgKIAl0cmlzdGF0ZSAiQ29uZXhhbnQgQ2FtZXJhIERyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCkBAIC0zMCw2ICszOSwxNyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfY29uZXguCiAKK2NvbmZpZyBVU0JfR1NQQ0FfQ1BJQTEKKwl0cmlzdGF0ZSAiY3BpYSBDUGlBICh2ZXJzaW9uIDEpIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgVVNCIGNhbWVyYXMgYmFzZWQgb24gdGhlIGNwaWEKKwkgIENQaUEgY2hpcC4gTm90ZSB0aGF0IHlvdSBuZWVkIGF0bGVhc3QgdmVyc2lvbiAwLjYuNCBvZiBsaWJ2NGwgZm9yCisJICBhcHBsaWNhdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgdmlkZW9mb3JtYXQgZ2VuZXJhdGVkIGJ5IHRoaXMgZHJpdmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9jcGlhMS4KKwogY29uZmlnIFVTQl9HU1BDQV9FVE9NUwogCXRyaXN0YXRlICJFdG9tcyBVU0IgQ2FtZXJhIERyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCkBAIC04NiwxNSArMTA2LDI1IEBACiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2Ffb3Y1MTkuCiAKIGNvbmZpZyBVU0JfR1NQQ0FfT1Y1MzQKLQl0cmlzdGF0ZSAiT1Y1MzQgVVNCIENhbWVyYSBEcml2ZXIiCisJdHJpc3RhdGUgIk9WNTM0IE9WNzcyeCBVU0IgQ2FtZXJhIERyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCiAJaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBPVjUzNCBjaGlwLgotCSAgKGUuZy4gU29ueSBQbGF5c3RhdGlvbiBFWUUpCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIE9WNTM0IGNoaXAKKwkgIGFuZCBzZW5zb3IgT1Y3NzJ4IChlLmcuIFNvbnkgUGxheXN0YXRpb24gRVlFKQogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9vdjUzNC4KIAorY29uZmlnIFVTQl9HU1BDQV9PVjUzNF85CisJdHJpc3RhdGUgIk9WNTM0IE9WOTY1eCBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBPVjUzNCBjaGlwCisJICBhbmQgc2Vuc29yIE9WOTY1eCAoZS5nLiBIZXJjdWxlcyBEdWFscGl4KQorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9vdjUzNF85LgorCiBjb25maWcgVVNCX0dTUENBX1BBQzIwNwogCXRyaXN0YXRlICJQaXhhcnQgUEFDMjA3IFVTQiBDYW1lcmEgRHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKQEAgLTEyMiw2ICsxNTIsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3BhYzczMTEuCiAKK2NvbmZpZyBVU0JfR1NQQ0FfU045QzIwMjgKKwl0cmlzdGF0ZSAiU09OSVggRHVhbC1Nb2RlIFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN0cmVhbWluZyBzdXBwb3J0IGZvciBTb25peCBTTjlDMjAyOCBjYW1lcmFzLgorCSAgVGhlc2UgYXJlIHN1cHBvcnRlZCBhcyBzdGlsbGNhbXMgaW4gbGliZ3Bob3RvMi9jYW1saWJzL3Nvbml4LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zbjljMjAyOC4KKwogY29uZmlnIFVTQl9HU1BDQV9TTjlDMjBYCiAJdHJpc3RhdGUgIlNOOUMyMFggVVNCIENhbWVyYSBEcml2ZXIiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUKaW5kZXggZmYyYzcyNy4uNmU0Y2YxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlCkBAIC0xLDUgKzEsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9HU1BDQSkgICAgICAgICAgKz0gZ3NwY2FfbWFpbi5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX0JFTlEpICAgICArPSBnc3BjYV9iZW5xLm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfQ09ORVgpICAgICs9IGdzcGNhX2NvbmV4Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfQ1BJQTEpICAgICs9IGdzcGNhX2NwaWExLm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfRVRPTVMpICAgICs9IGdzcGNhX2V0b21zLm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfRklORVBJWCkgICs9IGdzcGNhX2ZpbmVwaXgubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9KRUlMSU5KKSAgKz0gZ3NwY2FfamVpbGluai5vCkBAIC03LDkgKzksMTEgQEAKIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfTVI5NzMxMEEpICs9IGdzcGNhX21yOTczMTBhLm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfT1Y1MTkpICAgICs9IGdzcGNhX292NTE5Lm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfT1Y1MzQpICAgICs9IGdzcGNhX292NTM0Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfT1Y1MzRfOSkgICs9IGdzcGNhX292NTM0Xzkubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcpICAgKz0gZ3NwY2FfcGFjMjA3Lm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfUEFDNzMwMikgICs9IGdzcGNhX3BhYzczMDIubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9QQUM3MzExKSAgKz0gZ3NwY2FfcGFjNzMxMS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NOOUMyMDI4KSArPSBnc3BjYV9zbjljMjAyOC5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX1NOOUMyMFgpICArPSBnc3BjYV9zbjljMjB4Lm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfU09OSVhCKSAgICs9IGdzcGNhX3Nvbml4Yi5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX1NPTklYSikgICArPSBnc3BjYV9zb25peGoubwpAQCAtMzAsNyArMzQsOSBAQAogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9aQzNYWCkgICAgKz0gZ3NwY2FfemMzeHgubwogCiBnc3BjYV9tYWluLW9ianMgICAgIDo9IGdzcGNhLm8KK2dzcGNhX2JlbnEtb2JqcyAgICAgOj0gYmVucS5vCiBnc3BjYV9jb25leC1vYmpzICAgIDo9IGNvbmV4Lm8KK2dzcGNhX2NwaWExLW9ianMgICAgOj0gY3BpYTEubwogZ3NwY2FfZXRvbXMtb2JqcyAgICA6PSBldG9tcy5vCiBnc3BjYV9maW5lcGl4LW9ianMgIDo9IGZpbmVwaXgubwogZ3NwY2FfamVpbGluai1vYmpzICA6PSBqZWlsaW5qLm8KQEAgLTM4LDkgKzQ0LDExIEBACiBnc3BjYV9tcjk3MzEwYS1vYmpzIDo9IG1yOTczMTBhLm8KIGdzcGNhX292NTE5LW9ianMgICAgOj0gb3Y1MTkubwogZ3NwY2Ffb3Y1MzQtb2JqcyAgICA6PSBvdjUzNC5vCitnc3BjYV9vdjUzNF85LW9ianMgIDo9IG92NTM0XzkubwogZ3NwY2FfcGFjMjA3LW9ianMgICA6PSBwYWMyMDcubwogZ3NwY2FfcGFjNzMwMi1vYmpzICA6PSBwYWM3MzAyLm8KIGdzcGNhX3BhYzczMTEtb2JqcyAgOj0gcGFjNzMxMS5vCitnc3BjYV9zbjljMjAyOC1vYmpzIDo9IHNuOWMyMDI4Lm8KIGdzcGNhX3NuOWMyMHgtb2JqcyAgOj0gc245YzIweC5vCiBnc3BjYV9zb25peGItb2JqcyAgIDo9IHNvbml4Yi5vCiBnc3BjYV9zb25peGotb2JqcyAgIDo9IHNvbml4ai5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2JlbnEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvYmVucS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYWM0YWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2JlbnEuYwpAQCAtMCwwICsxLDMyMiBAQAorLyoKKyAqIEJlbnEgREMgRTMwMCBzdWJkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmVhbi1GcmFuY29pcyBNb2luZSAoaHR0cDovL21vaW5lamYuZnJlZS5mcikKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNkZWZpbmUgTU9EVUxFX05BTUUgImJlbnEiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorCitNT0RVTEVfQVVUSE9SKCJKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJCZW5xIERDIEUzMDAgVVNCIENhbWVyYSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogc3BlY2lmaWMgd2ViY2FtIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCit9OworCitzdGF0aWMgdm9pZCBzZF9pc29jX2lycShzdHJ1Y3QgdXJiICp1cmIpOworCisvKiAtLSB3cml0ZSBhIHJlZ2lzdGVyIC0tICovCitzdGF0aWMgdm9pZCByZWdfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1MTYgdmFsdWUsIHUxNiBpbmRleCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJaW50IHJldDsKKworCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIgPCAwKQorCQlyZXR1cm47CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkweDAyLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJdmFsdWUsCisJCQlpbmRleCwKKwkJCU5VTEwsCisJCQkwLAorCQkJNTAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICJyZWdfdyBlcnIgJWQiLCByZXQpOworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQorfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGUgPSB2Z2FfbW9kZTsKKwlnc3BjYV9kZXYtPmNhbS5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKKwlnc3BjYV9kZXYtPmNhbS5ub191cmJfY3JlYXRlID0gMTsKKwlnc3BjYV9kZXYtPmNhbS5yZXZlcnNlX2FsdHMgPSAxOworCXJldHVybiAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfaXNvY19pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UsCisJCWdzcGNhX2Rldi0+bmJhbHQgLSAxKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoInVzYl9zZXRfaW50ZXJmYWNlIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKy8qCXJlZ193KGdzcGNhX2RldiwgMHgwMDAzLCAweDAwMDIpOyAqLworCXJldHVybiAwOworfQorCisvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGksIG47CisKKwkvKiBjcmVhdGUgNCBVUkJzIC0gMiBvbiBlbmRwb2ludCAweDgzIGFuZCAyIG9uIDB4MDgyICovCisjaWYgTUFYX05VUkJTIDwgNAorI2Vycm9yICJOb3QgZW5vdWdoIFVSQnMgaW4gdGhlIGdzcGNhIHRhYmxlIgorI2VuZGlmCisjZGVmaW5lIFNEX1BLVF9TWiA2NAorI2RlZmluZSBTRF9OUEtUIDMyCisJZm9yIChuID0gMDsgbiA8IDQ7IG4rKykgeworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKFNEX05QS1QsIEdGUF9LRVJORUwpOworCQlpZiAoIXVyYikgeworCQkJZXJyKCJ1c2JfYWxsb2NfdXJiIGZhaWxlZCIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJZ3NwY2FfZGV2LT51cmJbbl0gPSB1cmI7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyhnc3BjYV9kZXYtPmRldiwKKwkJCQkJCVNEX1BLVF9TWiAqIFNEX05QS1QsCisJCQkJCQlHRlBfS0VSTkVMLAorCQkJCQkJJnVyYi0+dHJhbnNmZXJfZG1hKTsKKworCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgeworCQkJZXJyKCJ1c2JfYnVmZmVyX2FsbG9jIGZhaWxlZCIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJdXJiLT5kZXYgPSBnc3BjYV9kZXYtPmRldjsKKwkJdXJiLT5jb250ZXh0ID0gZ3NwY2FfZGV2OworCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBTRF9QS1RfU1ogKiBTRF9OUEtUOworCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoZ3NwY2FfZGV2LT5kZXYsCisJCQkJCW4gJiAxID8gMHg4MiA6IDB4ODMpOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQCisJCQkJCXwgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJCXVyYi0+aW50ZXJ2YWwgPSAxOworCQl1cmItPmNvbXBsZXRlID0gc2RfaXNvY19pcnE7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBTRF9OUEtUOworCQlmb3IgKGkgPSAwOyBpIDwgU0RfTlBLVDsgaSsrKSB7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9IFNEX1BLVF9TWjsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ID0gU0RfUEtUX1NaICogaTsKKwkJfQorCX0KKworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAzYywgMHgwMDAzKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAzYywgMHgwMDA0KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAzYywgMHgwMDA1KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAzYywgMHgwMDA2KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAzYywgMHgwMDA3KTsKKwl1c2Jfc2V0X2ludGVyZmFjZShnc3BjYV9kZXYtPmRldiwgZ3NwY2FfZGV2LT5pZmFjZSwgZ3NwY2FfZGV2LT5uYmFsdCAtIDEpOworfQorCitzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCAqZGF0YSwJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJLyogaXNvIHBhY2tldCBsZW5ndGggKi8KK3sKKwkvKiB1bnVzZWQgKi8KK30KKworLyogcmVjZXB0aW9uIG9mIGFuIFVSQiAqLworc3RhdGljIHZvaWQgc2RfaXNvY19pcnEoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IChzdHJ1Y3QgZ3NwY2FfZGV2ICopIHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXJiICp1cmIwOworCXU4ICpkYXRhOworCWludCBpLCBzdDsKKworCVBERUJVRyhEX1BBQ0ssICJzZCBpc29jIGlycSIpOworCWlmICghZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXJldHVybjsKKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkgeworCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikKKwkJCXJldHVybjsJCS8qIGRpc2Nvbm5lY3Rpb24gKi8KKyNpZmRlZiBDT05GSUdfUE0KKwkJaWYgKGdzcGNhX2Rldi0+ZnJvemVuKQorCQkJcmV0dXJuOworI2VuZGlmCisJCVBERUJVRyhEX0VSUnxEX1BBQ0ssICJ1cmIgc3RhdHVzOiAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGlmIHRoaXMgaXMgYSBjb250cm9sIFVSTiAoZXAgMHg4MyksIHdhaXQgKi8KKwlpZiAodXJiID09IGdzcGNhX2Rldi0+dXJiWzBdIHx8IHVyYiA9PSBnc3BjYV9kZXYtPnVyYlsyXSkKKwkJcmV0dXJuOworCisJLyogc2NhbiBib3RoIHJlY2VpdmVkIFVSQnMgKi8KKwlpZiAodXJiID09IGdzcGNhX2Rldi0+dXJiWzFdKQorCQl1cmIwID0gZ3NwY2FfZGV2LT51cmJbMF07CisJZWxzZQorCQl1cmIwID0gZ3NwY2FfZGV2LT51cmJbMl07CisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCisJCS8qIGNoZWNrIHRoZSBwYWNrZXQgc3RhdHVzIGFuZCBsZW5ndGggKi8KKwkJaWYgKHVyYjAtPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggIT0gU0RfUEtUX1NaCisJCSAgICB8fCB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggIT0gU0RfUEtUX1NaKSB7CisJCQlQREVCVUcoRF9FUlIsICJJU09DIGJhZCBsZW5ndGhzICVkIC8gJWQiLAorCQkJCXVyYjAtPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgsCisJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoKTsKKwkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCQkJY29udGludWU7CisJCX0KKwkJc3QgPSB1cmIwLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CisJCWlmIChzdCA9PSAwKQorCQkJc3QgPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1czsKKwkJaWYgKHN0KSB7CisJCQlQREVCVUcoRF9FUlIsCisJCQkJIklTT0MgZGF0YSBlcnJvcjogWyVkXSBzdGF0dXM9JWQiLAorCQkJCWksIHN0KTsKKwkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBUaGUgaW1hZ2VzIGFyZSByZWNlaXZlZCBpbiBVUkJzIG9mIGRpZmZlcmVudCBlbmRwb2ludHMKKwkJICogKDB4ODMgYW5kIDB4ODIpLgorCQkgKiBJbWFnZSBwaWVjZXMgaW4gVVJCcyBvZiBlcCAweDgzIGFyZSBjb250aW51YXRlZCBpbiBVUkJzIG9mCisJCSAqIGVwIDB4ODIgb2YgdGhlIHNhbWUgaW5kZXguCisJCSAqIFRoZSBwYWNrZXRzIGluIHRoZSBVUkJzIG9mIGVuZHBvaW50IDB4ODMgc3RhcnQgd2l0aDoKKwkJICoJLSA4MCBiYS9iYiAwMCAwMCA9IHN0YXJ0IG9mIGltYWdlIGZvbGxvd2VkIGJ5ICdmZiBkOCcKKwkJICoJLSAwNCBiYS9iYiBvbyBvbyA9IGltYWdlIHBpZWNlCisJCSAqCQl3aGVyZSAnb28gb28nIGlzIHRoZSBpbWFnZSBvZmZzZXQKKwkJCQkJCShub3QgY2hla2VkKQorCQkgKgktIChvdGhlciAtPiBiYWQgZnJhbWUpCisJCSAqIFRoZSBpbWFnZXMgYXJlIEpQRUcgZW5jb2RlZCB3aXRoIGZ1bGwgaGVhZGVyIGFuZAorCQkgKiBub3JtYWwgZmYgZXNjYXBlLgorCQkgKiBUaGUgZW5kIG9mIGltYWdlICgnZmYgZDknKSBtYXkgb2NjdXIgaW4gYW55IFVSQi4KKwkJICogKG5vdCBjaGVrZWQpCisJCSAqLworCQlkYXRhID0gKHU4ICopIHVyYjAtPnRyYW5zZmVyX2J1ZmZlcgorCQkJCQkrIHVyYjAtPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKwkJaWYgKGRhdGFbMF0gPT0gMHg4MCAmJiAoZGF0YVsxXSAmIDB4ZmUpID09IDB4YmEpIHsKKworCQkJLyogbmV3IGltYWdlICovCisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwKKwkJCQkJTlVMTCwgMCk7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCisJCQkJCWRhdGEgKyA0LCBTRF9QS1RfU1ogLSA0KTsKKwkJfSBlbHNlIGlmIChkYXRhWzBdID09IDB4MDQgJiYgKGRhdGFbMV0gJiAweGZlKSA9PSAweGJhKSB7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsCisJCQkJCWRhdGEgKyA0LCBTRF9QS1RfU1ogLSA0KTsKKwkJfSBlbHNlIHsKKwkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCQkJY29udGludWU7CisJCX0KKwkJZGF0YSA9ICh1OCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcgorCQkJCQkrIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULAorCQkJCQlkYXRhLCBTRF9QS1RfU1opOworCX0KKworCS8qIHJlc3VibWl0IHRoZSBVUkJzICovCisJc3QgPSB1c2Jfc3VibWl0X3VyYih1cmIwLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3QgPCAwKQorCQlQREVCVUcoRF9FUlJ8RF9QQUNLLCAidXNiX3N1Ym1pdF91cmIoMCkgcmV0ICVkIiwgc3QpOworCXN0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3QgPCAwKQorCQlQREVCVUcoRF9FUlJ8RF9QQUNLLCAidXNiX3N1Ym1pdF91cmIoKSByZXQgJWQiLCBzdCk7Cit9CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmN0cmxzID0gc2RfY3RybHMsCisJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgPSBzZF9jb25maWcsCisJLmluaXQgPSBzZF9pbml0LAorCS5pc29jX2luaXQgPSBzZF9pc29jX2luaXQsCisJLnN0YXJ0ID0gc2Rfc3RhcnQsCisJLnN0b3BOID0gc2Rfc3RvcE4sCisJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCit9OworCisvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KK3N0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDRhNSwgMHgzMDM1KX0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKKworLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJCVRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSA9IGRldmljZV90YWJsZSwKKwkucHJvYmUgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgPSBnc3BjYV9yZXN1bWUsCisjZW5kaWYKK307CisKKy8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KK3N0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpbmZvKCJyZWdpc3RlcmVkIik7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpbmZvKCJkZXJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb2Fyc2VfZXhwb19hdXRvZ2Fpbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb2Fyc2VfZXhwb19hdXRvZ2Fpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYjlkOTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvYXJzZV9leHBvX2F1dG9nYWluLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBBdXRvIGdhaW4gYWxnb3JpdGhtIGZvciBjYW1lcmEncyB3aXRoIGEgY29hcnNlIGV4cG9zdXJlIGNvbnRyb2wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyogQXV0b2dhaW4gKyBleHBvc3VyZSBhbGdvcml0aG0gZm9yIGNhbWVyYXMgd2l0aCBhIGNvYXJzZSBleHBvc3VyZSBjb250cm9sCisgICAodXN1YWxseSB0aGlzIG1lYW5zIHdlIGNhbiBvbmx5IGNvbnRyb2wgdGhlIGNsb2NrZGl2IHRvIGNoYW5nZSBleHBvc3VyZSkKKyAgIEFzIGNoYW5naW5nIHRoZSBjbG9ja2RpdiBzbyB0aGF0IHRoZSBmcHMgZHJvcHMgZnJvbSAzMCB0byAxNSBmcHMgZm9yCisgICBleGFtcGxlLCB3aWxsIGxlYWQgdG8gYSBodWdlIGV4cG9zdXJlIGNoYW5nZSAoaXQgZWZmZWN0aXZlbHkgZG91YmxlcyksCisgICB0aGlzIGFsZ29yaXRobSBub3JtYWxseSB0cmllcyB0byBvbmx5IGFkanVzdCB0aGUgZ2FpbiAoYmV0d2VlbiA0MCBhbmQKKyAgIDgwICUpIGFuZCBpZiB0aGF0IGRvZXMgbm90IGhlbHAsIG9ubHkgdGhlbiBjaGFuZ2VzIGV4cG9zdXJlLiBUaGlzIGxlYWRzCisgICB0byBhIG11Y2ggbW9yZSBzdGFibGUgaW1hZ2UgdGhlbiB1c2luZyB0aGUga25lZSBhbGdvcml0aG0gd2hpY2ggYXQKKyAgIGNlcnRhaW4gcG9pbnRzIG9mIHRoZSBrbmVlIGdyYXBoIHdpbGwgb25seSB0cnkgdG8gYWRqdXN0IGV4cG9zdXJlLAorICAgd2hpY2ggbGVhZHMgdG8gb3NjaWxhdGluZyBhcyBvbmUgZXhwb3N1cmUgc3RlcCBpcyBodWdlLgorCisgICBOb3RlIHRoaXMgYXNzdW1lcyB0aGF0IHRoZSBzZCBzdHJ1Y3QgZm9yIHRoZSBjYW0gaW4gcXVlc3Rpb24gaGFzCisgICBleHBfdG9vX2hpZ2hfY250IGFuZCBleHBfdG9vX2hpZ2hfY250IGludCBtZW1iZXJzIGZvciB1c2UgYnkgdGhpcyBmdW5jdGlvbi4KKworICAgUmV0dXJucyAwIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLCAxIGlmIHRoZSBnYWluIGFuZCBvciBleHBvc3VyZSBzZXR0aW5ncworICAgd2hlcmUgY2hhbmdlZC4gKi8KK3N0YXRpYyBpbnQgZ3NwY2FfY29hcnNlX2dyYWluZWRfZXhwb19hdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJaW50IGF2Z19sdW0sIGludCBkZXNpcmVkX2F2Z19sdW0sIGludCBkZWFkem9uZSkKK3sKKwlpbnQgaSwgc3RlcHMsIGdhaW4sIG9yaWdfZ2FpbiwgZXhwb3N1cmUsIG9yaWdfZXhwb3N1cmU7CisJaW50IGdhaW5fbG93LCBnYWluX2hpZ2g7CisJY29uc3Qgc3RydWN0IGN0cmwgKmdhaW5fY3RybCA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGN0cmwgKmV4cG9zdXJlX2N0cmwgPSBOVUxMOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcmV0dmFsID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBnc3BjYV9kZXYtPnNkX2Rlc2MtPm5jdHJsczsgaSsrKSB7CisJCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgaSkpCisJCQljb250aW51ZTsKKwkJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV0ucWN0cmwuaWQgPT0gVjRMMl9DSURfR0FJTikKKwkJCWdhaW5fY3RybCA9ICZnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldOworCQlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXS5xY3RybC5pZCA9PSBWNEwyX0NJRF9FWFBPU1VSRSkKKwkJCWV4cG9zdXJlX2N0cmwgPSAmZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXTsKKwl9CisJaWYgKCFnYWluX2N0cmwgfHwgIWV4cG9zdXJlX2N0cmwpIHsKKwkJUERFQlVHKERfRVJSLCAiRXJyb3I6IGdzcGNhX2NvYXJzZV9ncmFpbmVkX2V4cG9fYXV0b2dhaW4gIgorCQkJImNhbGxlZCBvbiBjYW0gd2l0aG91dCBnYWluIG9yIGV4cG9zdXJlIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChnYWluX2N0cmwtPmdldChnc3BjYV9kZXYsICZnYWluKSB8fAorCSAgICBleHBvc3VyZV9jdHJsLT5nZXQoZ3NwY2FfZGV2LCAmZXhwb3N1cmUpKQorCQlyZXR1cm4gMDsKKworCW9yaWdfZ2FpbiA9IGdhaW47CisJb3JpZ19leHBvc3VyZSA9IGV4cG9zdXJlOworCWdhaW5fbG93ID0KKwkJKGdhaW5fY3RybC0+cWN0cmwubWF4aW11bSAtIGdhaW5fY3RybC0+cWN0cmwubWluaW11bSkgLyA1ICogMjsKKwlnYWluX2xvdyArPSBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW07CisJZ2Fpbl9oaWdoID0KKwkJKGdhaW5fY3RybC0+cWN0cmwubWF4aW11bSAtIGdhaW5fY3RybC0+cWN0cmwubWluaW11bSkgLyA1ICogNDsKKwlnYWluX2hpZ2ggKz0gZ2Fpbl9jdHJsLT5xY3RybC5taW5pbXVtOworCisJLyogSWYgd2UgYXJlIG9mIGEgbXVsdGlwbGUgb2YgZGVhZHpvbmUsIGRvIG11bHRpcGxlIHN0ZXBzIHRvIHJlYWNoIHRoZQorCSAgIGRlc2lyZWQgbHVtaW5hdGlvbiBmYXN0ICh3aXRoIHRoZSByaXNjIG9mIGEgc2xpZ2h0IG92ZXJzaG9vdCkgKi8KKwlzdGVwcyA9IChkZXNpcmVkX2F2Z19sdW0gLSBhdmdfbHVtKSAvIGRlYWR6b25lOworCisJUERFQlVHKERfRlJBTSwgImF1dG9nYWluOiBsdW06ICVkLCBkZXNpcmVkOiAlZCwgc3RlcHM6ICVkIiwKKwkJYXZnX2x1bSwgZGVzaXJlZF9hdmdfbHVtLCBzdGVwcyk7CisKKwlpZiAoKGdhaW4gKyBzdGVwcykgPiBnYWluX2hpZ2ggJiYKKwkgICAgc2QtPmV4cG9zdXJlIDwgZXhwb3N1cmVfY3RybC0+cWN0cmwubWF4aW11bSkgeworCQlnYWluID0gZ2Fpbl9oaWdoOworCQlzZC0+ZXhwX3Rvb19sb3dfY250Kys7CisJfSBlbHNlIGlmICgoZ2FpbiArIHN0ZXBzKSA8IGdhaW5fbG93ICYmCisJCSAgIHNkLT5leHBvc3VyZSA+IGV4cG9zdXJlX2N0cmwtPnFjdHJsLm1pbmltdW0pIHsKKwkJZ2FpbiA9IGdhaW5fbG93OworCQlzZC0+ZXhwX3Rvb19oaWdoX2NudCsrOworCX0gZWxzZSB7CisJCWdhaW4gKz0gc3RlcHM7CisJCWlmIChnYWluID4gZ2Fpbl9jdHJsLT5xY3RybC5tYXhpbXVtKQorCQkJZ2FpbiA9IGdhaW5fY3RybC0+cWN0cmwubWF4aW11bTsKKwkJZWxzZSBpZiAoZ2FpbiA8IGdhaW5fY3RybC0+cWN0cmwubWluaW11bSkKKwkJCWdhaW4gPSBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW07CisJCXNkLT5leHBfdG9vX2hpZ2hfY250ID0gMDsKKwkJc2QtPmV4cF90b29fbG93X2NudCA9IDA7CisJfQorCisJaWYgKHNkLT5leHBfdG9vX2hpZ2hfY250ID4gMykgeworCQlleHBvc3VyZS0tOworCQlzZC0+ZXhwX3Rvb19oaWdoX2NudCA9IDA7CisJfSBlbHNlIGlmIChzZC0+ZXhwX3Rvb19sb3dfY250ID4gMykgeworCQlleHBvc3VyZSsrOworCQlzZC0+ZXhwX3Rvb19sb3dfY250ID0gMDsKKwl9CisKKwlpZiAoZ2FpbiAhPSBvcmlnX2dhaW4pIHsKKwkJZ2Fpbl9jdHJsLT5zZXQoZ3NwY2FfZGV2LCBnYWluKTsKKwkJcmV0dmFsID0gMTsKKwl9CisJaWYgKGV4cG9zdXJlICE9IG9yaWdfZXhwb3N1cmUpIHsKKwkJZXhwb3N1cmVfY3RybC0+c2V0KGdzcGNhX2RldiwgZXhwb3N1cmUpOworCQlyZXR2YWwgPSAxOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMKaW5kZXggYzk4YjVkNi4uMTlmZTZiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYwpAQCAtNTIsNyArNTIsNyBAQAogc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKIAl7CiAJICAgIHsKIAkJLmlkCSA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC0xMDMyLDcgKzEwMzIsNyBAQAogfQogCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCiAJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jcGlhMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jcGlhMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTQ1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NwaWExLmMKQEAgLTAsMCArMSwyMDIyIEBACisvKgorICogY3BpYSBDUGlBICgxKSBnc3BjYSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSGFucyBkZSBHb2VkZSA8aGRnb2VkZUByZWRoYXQuY29tPgorICoKKyAqIFRoaXMgbW9kdWxlIGlzIGFkYXB0ZWQgZnJvbSB0aGUgaW4ga2VybmVsIHY0bDEgY3BpYSBkcml2ZXIgd2hpY2ggaXMgOgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OS0yMDAwIFBldGVyIFByZWdsZXIKKyAqIChDKSBDb3B5cmlnaHQgMTk5OS0yMDAwIFNjb3R0IEouIEJlcnRpbgorICogKEMpIENvcHlyaWdodCAxOTk5LTIwMDAgSm9oYW5uZXMgRXJkZmVsdCA8am9oYW5uZXNAZXJkZmVsdC5jb20+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAgU1RNaWNyb2VsZWN0cm9uaWNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJjcGlhMSIKKworI2luY2x1ZGUgImdzcGNhLmgiCisKK01PRFVMRV9BVVRIT1IoIkhhbnMgZGUgR29lZGUgPGhkZ29lZGVAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVmlzaW9uIENQaUEiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogY29uc3RhbnQgdmFsdWUncyAqLworI2RlZmluZSBNQUdJQ18wCQkweDE5CisjZGVmaW5lIE1BR0lDXzEJCTB4NjgKKyNkZWZpbmUgREFUQV9JTgkJMHhDMAorI2RlZmluZSBEQVRBX09VVAkweDQwCisjZGVmaW5lIFZJREVPU0laRV9RQ0lGCTAJLyogMTc2eDE0NCAqLworI2RlZmluZSBWSURFT1NJWkVfQ0lGCTEJLyogMzUyeDI4OCAqLworI2RlZmluZSBTVUJTQU1QTEVfNDIwCTAKKyNkZWZpbmUgU1VCU0FNUExFXzQyMgkxCisjZGVmaW5lIFlVVk9SREVSX1lVWVYJMAorI2RlZmluZSBZVVZPUkRFUl9VWVZZCTEKKyNkZWZpbmUgTk9UX0NPTVBSRVNTRUQJMAorI2RlZmluZSBDT01QUkVTU0VECTEKKyNkZWZpbmUgTk9fREVDSU1BVElPTgkwCisjZGVmaW5lIERFQ0lNQVRJT05fRU5BQgkxCisjZGVmaW5lIEVPSQkJMHhmZgkvKiBFbmQgT2YgSW1hZ2UgKi8KKyNkZWZpbmUgRU9MCQkweGZkCS8qIEVuZCBPZiBMaW5lICovCisjZGVmaW5lIEZSQU1FX0hFQURFUl9TSVpFCTY0CisKKy8qIEltYWdlIGdyYWIgbW9kZXMgKi8KKyNkZWZpbmUgQ1BJQV9HUkFCX1NJTkdMRQkwCisjZGVmaW5lIENQSUFfR1JBQl9DT05USU5FT1VTCTEKKworLyogQ29tcHJlc3Npb24gcGFyYW1ldGVycyAqLworI2RlZmluZSBDUElBX0NPTVBSRVNTSU9OX05PTkUJMAorI2RlZmluZSBDUElBX0NPTVBSRVNTSU9OX0FVVE8JMQorI2RlZmluZSBDUElBX0NPTVBSRVNTSU9OX01BTlVBTAkyCisjZGVmaW5lIENQSUFfQ09NUFJFU1NJT05fVEFSR0VUX1FVQUxJVFkgICAgICAgICAwCisjZGVmaW5lIENQSUFfQ09NUFJFU1NJT05fVEFSR0VUX0ZSQU1FUkFURSAgICAgICAxCisKKy8qIFJldHVybiBvZmZzZXRzIGZvciBHZXRDYW1lcmFTdGF0ZSAqLworI2RlZmluZSBTWVNURU1TVEFURQkwCisjZGVmaW5lIEdSQUJTVEFURQkxCisjZGVmaW5lIFNUUkVBTVNUQVRFCTIKKyNkZWZpbmUgRkFUQUxFUlJPUgkzCisjZGVmaW5lIENNREVSUk9SCTQKKyNkZWZpbmUgREVCVUdGTEFHUwk1CisjZGVmaW5lIFZQU1RBVFVTCTYKKyNkZWZpbmUgRVJST1JDT0RFCTcKKworLyogU3lzdGVtU3RhdGUgKi8KKyNkZWZpbmUgVU5JTklUSUFMSVNFRF9TVEFURQkwCisjZGVmaW5lIFBBU1NfVEhST1VHSF9TVEFURQkxCisjZGVmaW5lIExPX1BPV0VSX1NUQVRFCQkyCisjZGVmaW5lIEhJX1BPV0VSX1NUQVRFCQkzCisjZGVmaW5lIFdBUk1fQk9PVF9TVEFURQkJNAorCisvKiBHcmFiU3RhdGUgKi8KKyNkZWZpbmUgR1JBQl9JRExFCQkwCisjZGVmaW5lIEdSQUJfQUNUSVZFCQkxCisjZGVmaW5lIEdSQUJfRE9ORQkJMgorCisvKiBTdHJlYW1TdGF0ZSAqLworI2RlZmluZSBTVFJFQU1fTk9UX1JFQURZCTAKKyNkZWZpbmUgU1RSRUFNX1JFQURZCQkxCisjZGVmaW5lIFNUUkVBTV9PUEVOCQkyCisjZGVmaW5lIFNUUkVBTV9QQVVTRUQJCTMKKyNkZWZpbmUgU1RSRUFNX0ZJTklTSEVECQk0CisKKy8qIEZhdGFsIEVycm9yLCBDbWRFcnJvciwgYW5kIERlYnVnRmxhZ3MgKi8KKyNkZWZpbmUgQ1BJQV9GTEFHCSAgMQorI2RlZmluZSBTWVNURU1fRkxBRwkgIDIKKyNkZWZpbmUgSU5UX0NUUkxfRkxBRwkgIDQKKyNkZWZpbmUgUFJPQ0VTU19GTEFHCSAgOAorI2RlZmluZSBDT01fRkxBRwkgMTYKKyNkZWZpbmUgVlBfQ1RSTF9GTEFHCSAzMgorI2RlZmluZSBDQVBUVVJFX0ZMQUcJIDY0CisjZGVmaW5lIERFQlVHX0ZMQUcJMTI4CisKKy8qIFZQU3RhdHVzICovCisjZGVmaW5lIFZQX1NUQVRFX09LCQkJMHgwMAorCisjZGVmaW5lIFZQX1NUQVRFX0ZBSUxFRF9WSURFT0lOSVQJMHgwMQorI2RlZmluZSBWUF9TVEFURV9GQUlMRURfQUVDQUNCSU5JVAkweDAyCisjZGVmaW5lIFZQX1NUQVRFX0FFQ19NQVgJCTB4MDQKKyNkZWZpbmUgVlBfU1RBVEVfQUNCX0JNQVgJCTB4MDgKKworI2RlZmluZSBWUF9TVEFURV9BQ0JfUk1JTgkJMHgxMAorI2RlZmluZSBWUF9TVEFURV9BQ0JfR01JTgkJMHgyMAorI2RlZmluZSBWUF9TVEFURV9BQ0JfUk1BWAkJMHg0MAorI2RlZmluZSBWUF9TVEFURV9BQ0JfR01BWAkJMHg4MAorCisvKiBkZWZhdWx0IChtaW5pbXVtKSBjb21wZW5zYXRpb24gdmFsdWVzICovCisjZGVmaW5lIENPTVBfUkVEICAgICAgICAyMjAKKyNkZWZpbmUgQ09NUF9HUkVFTjEgICAgIDIxNAorI2RlZmluZSBDT01QX0dSRUVOMiAgICAgQ09NUF9HUkVFTjEKKyNkZWZpbmUgQ09NUF9CTFVFICAgICAgIDIzMAorCisvKiBleHBvc3VyZSBzdGF0dXMgKi8KKyNkZWZpbmUgRVhQT1NVUkVfVkVSWV9MSUdIVCAwCisjZGVmaW5lIEVYUE9TVVJFX0xJR0hUICAgICAgMQorI2RlZmluZSBFWFBPU1VSRV9OT1JNQUwgICAgIDIKKyNkZWZpbmUgRVhQT1NVUkVfREFSSyAgICAgICAzCisjZGVmaW5lIEVYUE9TVVJFX1ZFUllfREFSSyAgNAorCisjZGVmaW5lIENQSUFfTU9EVUxFX0NQSUEJCQkoMCA8PCA1KQorI2RlZmluZSBDUElBX01PRFVMRV9TWVNURU0JCQkoMSA8PCA1KQorI2RlZmluZSBDUElBX01PRFVMRV9WUF9DVFJMCQkJKDUgPDwgNSkKKyNkZWZpbmUgQ1BJQV9NT0RVTEVfQ0FQVFVSRQkJCSg2IDw8IDUpCisjZGVmaW5lIENQSUFfTU9EVUxFX0RFQlVHCQkJKDcgPDwgNSkKKworI2RlZmluZSBJTlBVVCAoREFUQV9JTiA8PCA4KQorI2RlZmluZSBPVVRQVVQgKERBVEFfT1VUIDw8IDgpCisKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dldENQSUFWZXJzaW9uCShJTlBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCAxKQorI2RlZmluZSBDUElBX0NPTU1BTkRfR2V0UG5QSUQJCShJTlBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCAyKQorI2RlZmluZSBDUElBX0NPTU1BTkRfR2V0Q2FtZXJhU3RhdHVzCShJTlBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCAzKQorI2RlZmluZSBDUElBX0NPTU1BTkRfR290b0hpUG93ZXIJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCA0KQorI2RlZmluZSBDUElBX0NPTU1BTkRfR290b0xvUG93ZXIJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCA1KQorI2RlZmluZSBDUElBX0NPTU1BTkRfR290b1N1c3BlbmQJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NQSUEgfCA3KQorI2RlZmluZSBDUElBX0NPTU1BTkRfR290b1Bhc3NUaHJvdWdoCShPVVRQVVQgfCBDUElBX01PRFVMRV9DUElBIHwgOCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX01vZGlmeUNhbWVyYVN0YXR1cwkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ1BJQSB8IDEwKQorCisjZGVmaW5lIENQSUFfQ09NTUFORF9SZWFkVkNSZWdzCQkoSU5QVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCAxKQorI2RlZmluZSBDUElBX0NPTU1BTkRfV3JpdGVWQ1JlZwkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDIpCisjZGVmaW5lIENQSUFfQ09NTUFORF9SZWFkTUNQb3J0cwkoSU5QVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCAzKQorI2RlZmluZSBDUElBX0NPTU1BTkRfV3JpdGVNQ1BvcnQJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDQpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRCYXVkUmF0ZQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgNSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldEVDUFRpbWluZwkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgNikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1JlYWRJREFUQQkJKElOUFVUIHwgQ1BJQV9NT0RVTEVfU1lTVEVNIHwgNykKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1dyaXRlSURBVEEJCShPVVRQVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCA4KQorI2RlZmluZSBDUElBX0NPTU1BTkRfR2VuZXJpY0NhbGwJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDkpCisjZGVmaW5lIENQSUFfQ09NTUFORF9JMkNTdGFydAkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDEwKQorI2RlZmluZSBDUElBX0NPTU1BTkRfSTJDU3RvcAkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDExKQorI2RlZmluZSBDUElBX0NPTU1BTkRfSTJDV3JpdGUJCShPVVRQVVQgfCBDUElBX01PRFVMRV9TWVNURU0gfCAxMikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0kyQ1JlYWQJCShJTlBVVCB8IENQSUFfTU9EVUxFX1NZU1RFTSB8IDEzKQorCisjZGVmaW5lIENQSUFfQ09NTUFORF9HZXRWUFZlcnNpb24JKElOUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDEpCisjZGVmaW5lIENQSUFfQ09NTUFORF9SZXNldEZyYW1lQ291bnRlcgkoSU5QVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldENvbG91clBhcmFtcwkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDMpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRFeHBvc3VyZQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDQpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRDb2xvdXJCYWxhbmNlCShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgNikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldFNlbnNvckZQUwkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDcpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRWUERlZmF1bHRzCShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgOCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldEFwY29yCQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDkpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRGbGlja2VyQ3RybAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDEwKQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0VkxPZmZzZXQJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAxMSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dldENvbG91clBhcmFtcwkoSU5QVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMTYpCisjZGVmaW5lIENQSUFfQ09NTUFORF9HZXRDb2xvdXJCYWxhbmNlCShJTlBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAxNykKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dldEV4cG9zdXJlCShJTlBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAxOCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldFNlbnNvck1hdHJpeAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfVlBfQ1RSTCB8IDE5KQorI2RlZmluZSBDUElBX0NPTU1BTkRfQ29sb3VyQmFycwkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAyNSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1JlYWRWUFJlZ3MJCShJTlBVVCB8IENQSUFfTU9EVUxFX1ZQX0NUUkwgfCAzMCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1dyaXRlVlBSZWcJCShPVVRQVVQgfCBDUElBX01PRFVMRV9WUF9DVFJMIHwgMzEpCisKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dyYWJGcmFtZQkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAxKQorI2RlZmluZSBDUElBX0NPTU1BTkRfVXBsb2FkRnJhbWUJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAyKQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0R3JhYk1vZGUJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAzKQorI2RlZmluZSBDUElBX0NPTU1BTkRfSW5pdFN0cmVhbUNhcAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDQpCisjZGVmaW5lIENQSUFfQ09NTUFORF9GaW5pU3RyZWFtQ2FwCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgNSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1N0YXJ0U3RyZWFtQ2FwCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgNikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0VuZFN0cmVhbUNhcAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfQ0FQVFVSRSB8IDcpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRGb3JtYXQJCShPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgOCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldFJPSQkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCA5KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0Q29tcHJlc3Npb24JKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAxMCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uVGFyZ2V0IChPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMTEpCisjZGVmaW5lIENQSUFfQ09NTUFORF9TZXRZVVZUaHJlc2gJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAxMikKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uUGFyYW1zIChPVVRQVVQgfCBDUElBX01PRFVMRV9DQVBUVVJFIHwgMTMpCisjZGVmaW5lIENQSUFfQ09NTUFORF9EaXNjYXJkRnJhbWUJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAxNCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0dyYWJSZXNldAkJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0NBUFRVUkUgfCAxNSkKKworI2RlZmluZSBDUElBX0NPTU1BTkRfT3V0cHV0UlMyMzIJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0RFQlVHIHwgMSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0Fib3J0UHJvY2VzcwkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfREVCVUcgfCA0KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU2V0RHJhbVBhZ2UJKE9VVFBVVCB8IENQSUFfTU9EVUxFX0RFQlVHIHwgNSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX1N0YXJ0RHJhbVVwbG9hZAkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfREVCVUcgfCA2KQorI2RlZmluZSBDUElBX0NPTU1BTkRfU3RhcnREdW1teUR0cmVhbQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfREVCVUcgfCA4KQorI2RlZmluZSBDUElBX0NPTU1BTkRfQWJvcnRTdHJlYW0JKE9VVFBVVCB8IENQSUFfTU9EVUxFX0RFQlVHIHwgOSkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX0Rvd25sb2FkRFJBTQkoT1VUUFVUIHwgQ1BJQV9NT0RVTEVfREVCVUcgfCAxMCkKKyNkZWZpbmUgQ1BJQV9DT01NQU5EX051bGwJCShPVVRQVVQgfCBDUElBX01PRFVMRV9ERUJVRyB8IDExKQorCisjZGVmaW5lIFJPVU5EX1VQX0VYUF9GT1JfRkxJQ0tFUiAxNQorCisvKiBDb25zdGFudHMgZm9yIGF1dG9tYXRpYyBmcmFtZSByYXRlIGFkanVzdG1lbnQgKi8KKyNkZWZpbmUgTUFYX0VYUCAgICAgICAzMDIKKyNkZWZpbmUgTUFYX0VYUF8xMDIgICAyNTUKKyNkZWZpbmUgTE9XX0VYUCAgICAgICAxNDAKKyNkZWZpbmUgVkVSWV9MT1dfRVhQICAgNzAKKyNkZWZpbmUgVEMgICAgICAgICAgICAgOTQKKyNkZWZpbmUJRVhQX0FDQ19EQVJLICAgNTAKKyNkZWZpbmUJRVhQX0FDQ19MSUdIVCAgOTAKKyNkZWZpbmUgSElHSF9DT01QXzEwMiAxNjAKKyNkZWZpbmUgTUFYX0NPTVAgICAgICAyMzkKKyNkZWZpbmUgREFSS19USU1FICAgICAgIDMKKyNkZWZpbmUgTElHSFRfVElNRSAgICAgIDMKKworI2RlZmluZSBGSVJNV0FSRV9WRVJTSU9OKHgsIHkpIChzZC0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVWZXJzaW9uID09ICh4KSAmJiBcCisJCQkJc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24gPT0gKHkpKQorCisvKiBEZXZlbG9wZXIncyBHdWlkZSBUYWJsZSA1IHAgMy0zNAorICogaW5kZXhlZCBieSBbbWFpbnNdW3NlbnNvckZwcy5iYXNlcmF0ZV1bc2Vuc29yRnBzLmRpdmlzb3JdKi8KK3N0YXRpYyB1OCBmbGlja2VyX2p1bXBzWzJdWzJdWzRdID0KK3sgeyB7IDc2LCAzOCwgMTksIDkgfSwgeyA5MiwgNDYsIDIzLCAxMSB9IH0sCisgIHsgeyA2NCwgMzIsIDE2LCA4IH0sIHsgNzYsIDM4LCAxOSwgOX0gfQorfTsKKworc3RydWN0IGNhbV9wYXJhbXMgeworCXN0cnVjdCB7CisJCXU4IGZpcm13YXJlVmVyc2lvbjsKKwkJdTggZmlybXdhcmVSZXZpc2lvbjsKKwkJdTggdmNWZXJzaW9uOworCQl1OCB2Y1JldmlzaW9uOworCX0gdmVyc2lvbjsKKwlzdHJ1Y3QgeworCQl1MTYgdmVuZG9yOworCQl1MTYgcHJvZHVjdDsKKwkJdTE2IGRldmljZVJldmlzaW9uOworCX0gcG5wSUQ7CisJc3RydWN0IHsKKwkJdTggdnBWZXJzaW9uOworCQl1OCB2cFJldmlzaW9uOworCQl1MTYgY2FtZXJhSGVhZElEOworCX0gdnBWZXJzaW9uOworCXN0cnVjdCB7CisJCXU4IHN5c3RlbVN0YXRlOworCQl1OCBncmFiU3RhdGU7CisJCXU4IHN0cmVhbVN0YXRlOworCQl1OCBmYXRhbEVycm9yOworCQl1OCBjbWRFcnJvcjsKKwkJdTggZGVidWdGbGFnczsKKwkJdTggdnBTdGF0dXM7CisJCXU4IGVycm9yQ29kZTsKKwl9IHN0YXR1czsKKwlzdHJ1Y3QgeworCQl1OCBicmlnaHRuZXNzOworCQl1OCBjb250cmFzdDsKKwkJdTggc2F0dXJhdGlvbjsKKwl9IGNvbG91clBhcmFtczsKKwlzdHJ1Y3QgeworCQl1OCBnYWluTW9kZTsKKwkJdTggZXhwTW9kZTsKKwkJdTggY29tcE1vZGU7CisJCXU4IGNlbnRyZVdlaWdodDsKKwkJdTggZ2FpbjsKKwkJdTggZmluZUV4cDsKKwkJdTggY29hcnNlRXhwTG87CisJCXU4IGNvYXJzZUV4cEhpOworCQl1OCByZWRDb21wOworCQl1OCBncmVlbjFDb21wOworCQl1OCBncmVlbjJDb21wOworCQl1OCBibHVlQ29tcDsKKwl9IGV4cG9zdXJlOworCXN0cnVjdCB7CisJCXU4IGJhbGFuY2VNb2RlOworCQl1OCByZWRHYWluOworCQl1OCBncmVlbkdhaW47CisJCXU4IGJsdWVHYWluOworCX0gY29sb3VyQmFsYW5jZTsKKwlzdHJ1Y3QgeworCQl1OCBkaXZpc29yOworCQl1OCBiYXNlcmF0ZTsKKwl9IHNlbnNvckZwczsKKwlzdHJ1Y3QgeworCQl1OCBnYWluMTsKKwkJdTggZ2FpbjI7CisJCXU4IGdhaW40OworCQl1OCBnYWluODsKKwl9IGFwY29yOworCXN0cnVjdCB7CisJCXU4IGRpc2FibGVkOworCQl1OCBmbGlja2VyTW9kZTsKKwkJdTggY29hcnNlSnVtcDsKKwkJdTggYWxsb3dhYmxlT3ZlckV4cG9zdXJlOworCX0gZmxpY2tlckNvbnRyb2w7CisJc3RydWN0IHsKKwkJdTggZ2FpbjE7CisJCXU4IGdhaW4yOworCQl1OCBnYWluNDsKKwkJdTggZ2Fpbjg7CisJfSB2bE9mZnNldDsKKwlzdHJ1Y3QgeworCQl1OCBtb2RlOworCQl1OCBkZWNpbWF0aW9uOworCX0gY29tcHJlc3Npb247CisJc3RydWN0IHsKKwkJdTggZnJUYXJnZXRpbmc7CisJCXU4IHRhcmdldEZSOworCQl1OCB0YXJnZXRROworCX0gY29tcHJlc3Npb25UYXJnZXQ7CisJc3RydWN0IHsKKwkJdTggeVRocmVzaG9sZDsKKwkJdTggdXZUaHJlc2hvbGQ7CisJfSB5dXZUaHJlc2hvbGQ7CisJc3RydWN0IHsKKwkJdTggaHlzdGVyZXNpczsKKwkJdTggdGhyZXNoTWF4OworCQl1OCBzbWFsbFN0ZXA7CisJCXU4IGxhcmdlU3RlcDsKKwkJdTggZGVjaW1hdGlvbkh5c3RlcmVzaXM7CisJCXU4IGZyRGlmZlN0ZXBUaHJlc2g7CisJCXU4IHFEaWZmU3RlcFRocmVzaDsKKwkJdTggZGVjaW1hdGlvblRocmVzaE1vZDsKKwl9IGNvbXByZXNzaW9uUGFyYW1zOworCXN0cnVjdCB7CisJCXU4IHZpZGVvU2l6ZTsJCS8qIENJRi9RQ0lGICovCisJCXU4IHN1YlNhbXBsZTsKKwkJdTggeXV2T3JkZXI7CisJfSBmb3JtYXQ7CisJc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlbCBRWDMgc3BlY2lmaWMgZGF0YSAqLworCQl1OCBxeDNfZGV0ZWN0ZWQ7ICAgICAgICAvKiBhIFFYMyBpcyBwcmVzZW50ICovCisJCXU4IHRvcGxpZ2h0OyAgICAgICAgICAgIC8qIHRvcCBsaWdodCBsaXQgLCBSL1cgKi8KKwkJdTggYm90dG9tbGlnaHQ7ICAgICAgICAgLyogYm90dG9tIGxpZ2h0IGxpdCwgUi9XICovCisJCXU4IGJ1dHRvbjsgICAgICAgICAgICAgIC8qIHNuYXBzaG90IGJ1dHRvbiBwcmVzc2VkIChSL08pICovCisJCXU4IGNyYWRsZWQ7ICAgICAgICAgICAgIC8qIG1pY3Jvc2NvcGUgaXMgaW4gY3JhZGxlIChSL08pICovCisJfSBxeDM7CisJc3RydWN0IHsKKwkJdTggY29sU3RhcnQ7CQkvKiBza2lwIGZpcnN0IDgqY29sU3RhcnQgcGl4ZWxzICovCisJCXU4IGNvbEVuZDsJCS8qIGZpbmlzaCBhdCA4KmNvbEVuZCBwaXhlbHMgKi8KKwkJdTggcm93U3RhcnQ7CQkvKiBza2lwIGZpcnN0IDQqcm93U3RhcnQgbGluZXMgKi8KKwkJdTggcm93RW5kOwkJLyogZmluaXNoIGF0IDQqcm93RW5kIGxpbmVzICovCisJfSByb2k7CisJdTggZWNwVGltaW5nOworCXU4IHN0cmVhbVN0YXJ0TGluZTsKK307CisKKy8qIHNwZWNpZmljIHdlYmNhbSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCXN0cnVjdCBjYW1fcGFyYW1zIHBhcmFtczsJCS8qIGNhbWVyYSBzZXR0aW5ncyAqLworCisJYXRvbWljX3QgY2FtX2V4cG9zdXJlOworCWF0b21pY190IGZwczsKKwlpbnQgZXhwb3N1cmVfY291bnQ7CisJdTggZXhwb3N1cmVfc3RhdHVzOworCXU4IG1haW5zRnJlcTsJCQkJLyogMCA9IDUwaHosIDEgPSA2MGh6ICovCisJdTggZmlyc3RfZnJhbWU7CisJdTggZnJlcTsKK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRzYXR1cmF0aW9uKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0c2F0dXJhdGlvbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb21wdGFyZ2V0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0Y29tcHRhcmdldChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworCitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkJyaWdodG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMTAwLAorCQkuc3RlcCA9IDEsCisjZGVmaW5lIEJSSUdIVE5FU1NfREVGIDUwCisJCS5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCisJCS5mbGFncyA9IDAsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAorCSAgICAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKKwl9LAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkNvbnRyYXN0IiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDk2LAorCQkuc3RlcCAgICA9IDgsCisjZGVmaW5lIENPTlRSQVNUX0RFRiA0OAorCQkuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGNvbnRyYXN0LAorCSAgICAuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCisJfSwKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIlNhdHVyYXRpb24iLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMTAwLAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIFNBVFVSQVRJT05fREVGIDUwCisJCS5kZWZhdWx0X3ZhbHVlID0gU0FUVVJBVElPTl9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRzYXR1cmF0aW9uLAorCSAgICAuZ2V0ID0gc2RfZ2V0c2F0dXJhdGlvbiwKKwl9LAorCXsKKwkJeworCQkJLmlkCSA9IFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZLAorCQkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9NRU5VLAorCQkJLm5hbWUgICAgPSAiTGlnaHQgZnJlcXVlbmN5IGZpbHRlciIsCisJCQkubWluaW11bSA9IDAsCisJCQkubWF4aW11bSA9IDIsCS8qIDA6IDAsIDE6IDUwSHosIDI6NjBIeiAqLworCQkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBGUkVRX0RFRiAxCisJCQkuZGVmYXVsdF92YWx1ZSA9IEZSRVFfREVGLAorCQl9LAorCQkuc2V0ID0gc2Rfc2V0ZnJlcSwKKwkJLmdldCA9IHNkX2dldGZyZXEsCisJfSwKKwl7CisJCXsKKyNkZWZpbmUgVjRMMl9DSURfQ09NUF9UQVJHRVQgVjRMMl9DSURfUFJJVkFURV9CQVNFCisJCQkuaWQJID0gVjRMMl9DSURfQ09NUF9UQVJHRVQsCisJCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX01FTlUsCisJCQkubmFtZSAgICA9ICJDb21wcmVzc2lvbiBUYXJnZXQiLAorCQkJLm1pbmltdW0gPSAwLAorCQkJLm1heGltdW0gPSAxLAorCQkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBDT01QX1RBUkdFVF9ERUYgQ1BJQV9DT01QUkVTU0lPTl9UQVJHRVRfUVVBTElUWQorCQkJLmRlZmF1bHRfdmFsdWUgPSBDT01QX1RBUkdFVF9ERUYsCisJCX0sCisJCS5zZXQgPSBzZF9zZXRjb21wdGFyZ2V0LAorCQkuZ2V0ID0gc2RfZ2V0Y29tcHRhcmdldCwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgbW9kZVtdID0geworCXsxNjAsIDEyMCwgVjRMMl9QSVhfRk1UX0NQSUExLCBWNEwyX0ZJRUxEX05PTkUsCisJCS8qIFRoZSBzaXplaW1hZ2UgaXMgdHJpYWwgYW5kIGVycm9yLCBhcyB3aXRoIGxvdyBmcmFtZXJhdGVzCisJCSAgIHRoZSBjYW1lcmEgd2lsbCBwYWQgb3V0IHVzYiBmcmFtZXMsIG1ha2luZyB0aGUgaW1hZ2UKKwkJICAgZGF0YSBsYXJnZXIgdGhlbiBzdHJpY3RseSBuZWNlc3NhcnkgKi8KKwkJLmJ5dGVzcGVybGluZSA9IDE2MCwKKwkJLnNpemVpbWFnZSA9IDY1NTM2LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDN9LAorCXsxNzYsIDE0NCwgVjRMMl9QSVhfRk1UX0NQSUExLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxNzIsCisJCS5zaXplaW1hZ2UgPSA2NTUzNiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAyfSwKKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9DUElBMSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMjYyMTQ0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDF9LAorCXszNTIsIDI4OCwgVjRMMl9QSVhfRk1UX0NQSUExLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzNTIsCisJCS5zaXplaW1hZ2UgPSAyNjIxNDQsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMH0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEdlbmVyYWwgZnVuY3Rpb25zCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgY3BpYV91c2JfdHJhbnNmZXJDbWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1OCAqY29tbWFuZCkKK3sKKwl1OCByZXF1ZXN0dHlwZTsKKwl1bnNpZ25lZCBpbnQgcGlwZTsKKwlpbnQgcmV0LCBkYXRhYnl0ZXMgPSBjb21tYW5kWzZdIHwgKGNvbW1hbmRbN10gPDwgOCk7CisJLyogU29tZXRpbWVzIHdlIHNlZSBzcHVyaW91cyBFUElQRSBlcnJvcnMgKi8KKwlpbnQgcmV0cmllcyA9IDM7CisKKwlpZiAoY29tbWFuZFswXSA9PSBEQVRBX0lOKSB7CisJCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApOworCQlyZXF1ZXN0dHlwZSA9IFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFOworCX0gZWxzZSBpZiAoY29tbWFuZFswXSA9PSBEQVRBX09VVCkgeworCQlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKTsKKwkJcmVxdWVzdHR5cGUgPSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFOworCX0gZWxzZSB7CisJCVBERUJVRyhEX0VSUiwgIlVuZXhwZWN0ZWQgZmlyc3QgYnl0ZSBvZiBjb21tYW5kOiAleCIsCisJCSAgICAgICBjb21tYW5kWzBdKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCityZXRyeToKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsIHBpcGUsCisJCQkgICAgICBjb21tYW5kWzFdLAorCQkJICAgICAgcmVxdWVzdHR5cGUsCisJCQkgICAgICBjb21tYW5kWzJdIHwgKGNvbW1hbmRbM10gPDwgOCksCisJCQkgICAgICBjb21tYW5kWzRdIHwgKGNvbW1hbmRbNV0gPDwgOCksCisJCQkgICAgICBnc3BjYV9kZXYtPnVzYl9idWYsIGRhdGFieXRlcywgMTAwMCk7CisKKwlpZiAocmV0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAidXNiX2NvbnRyb2xfbXNnICUwMngsIGVycm9yICVkIiwgY29tbWFuZFsxXSwKKwkJICAgICAgIHJldCk7CisKKwlpZiAocmV0ID09IC1FUElQRSAmJiByZXRyaWVzID4gMCkgeworCQlyZXRyaWVzLS07CisJCWdvdG8gcmV0cnk7CisJfQorCisJcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6IDA7Cit9CisKKy8qIHNlbmQgYW4gYXJiaXRyYXJ5IGNvbW1hbmQgdG8gdGhlIGNhbWVyYSAqLworc3RhdGljIGludCBkb19jb21tYW5kKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IGNvbW1hbmQsCisJCSAgICAgIHU4IGEsIHU4IGIsIHU4IGMsIHU4IGQpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQsIGRhdGFzaXplOworCXU4IGNtZFs4XTsKKworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgQ1BJQV9DT01NQU5EX0dldENQSUFWZXJzaW9uOgorCWNhc2UgQ1BJQV9DT01NQU5EX0dldFBuUElEOgorCWNhc2UgQ1BJQV9DT01NQU5EX0dldENhbWVyYVN0YXR1czoKKwljYXNlIENQSUFfQ09NTUFORF9HZXRWUFZlcnNpb246CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0Q29sb3VyUGFyYW1zOgorCWNhc2UgQ1BJQV9DT01NQU5EX0dldENvbG91ckJhbGFuY2U6CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0RXhwb3N1cmU6CisJCWRhdGFzaXplID0gODsKKwkJYnJlYWs7CisJY2FzZSBDUElBX0NPTU1BTkRfUmVhZE1DUG9ydHM6CisJY2FzZSBDUElBX0NPTU1BTkRfUmVhZFZDUmVnczoKKwkJZGF0YXNpemUgPSA0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkYXRhc2l6ZSA9IDA7CisJCWJyZWFrOworCX0KKworCWNtZFswXSA9IGNvbW1hbmQgPj4gODsKKwljbWRbMV0gPSBjb21tYW5kICYgMHhmZjsKKwljbWRbMl0gPSBhOworCWNtZFszXSA9IGI7CisJY21kWzRdID0gYzsKKwljbWRbNV0gPSBkOworCWNtZFs2XSA9IGRhdGFzaXplOworCWNtZFs3XSA9IDA7CisKKwlyZXQgPSBjcGlhX3VzYl90cmFuc2ZlckNtZChnc3BjYV9kZXYsIGNtZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgQ1BJQV9DT01NQU5EX0dldENQSUFWZXJzaW9uOgorCQlzZC0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVWZXJzaW9uID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQlzZC0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVSZXZpc2lvbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsxXTsKKwkJc2QtPnBhcmFtcy52ZXJzaW9uLnZjVmVyc2lvbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsyXTsKKwkJc2QtPnBhcmFtcy52ZXJzaW9uLnZjUmV2aXNpb24gPSBnc3BjYV9kZXYtPnVzYl9idWZbM107CisJCWJyZWFrOworCWNhc2UgQ1BJQV9DT01NQU5EX0dldFBuUElEOgorCQlzZC0+cGFyYW1zLnBucElELnZlbmRvciA9CisJCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gfCAoZ3NwY2FfZGV2LT51c2JfYnVmWzFdIDw8IDgpOworCQlzZC0+cGFyYW1zLnBucElELnByb2R1Y3QgPQorCQkJZ3NwY2FfZGV2LT51c2JfYnVmWzJdIHwgKGdzcGNhX2Rldi0+dXNiX2J1ZlszXSA8PCA4KTsKKwkJc2QtPnBhcmFtcy5wbnBJRC5kZXZpY2VSZXZpc2lvbiA9CisJCQlnc3BjYV9kZXYtPnVzYl9idWZbNF0gfCAoZ3NwY2FfZGV2LT51c2JfYnVmWzVdIDw8IDgpOworCQlicmVhazsKKwljYXNlIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXM6CisJCXNkLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQlzZC0+cGFyYW1zLnN0YXR1cy5ncmFiU3RhdGUgPSBnc3BjYV9kZXYtPnVzYl9idWZbMV07CisJCXNkLT5wYXJhbXMuc3RhdHVzLnN0cmVhbVN0YXRlID0gZ3NwY2FfZGV2LT51c2JfYnVmWzJdOworCQlzZC0+cGFyYW1zLnN0YXR1cy5mYXRhbEVycm9yID0gZ3NwY2FfZGV2LT51c2JfYnVmWzNdOworCQlzZC0+cGFyYW1zLnN0YXR1cy5jbWRFcnJvciA9IGdzcGNhX2Rldi0+dXNiX2J1Zls0XTsKKwkJc2QtPnBhcmFtcy5zdGF0dXMuZGVidWdGbGFncyA9IGdzcGNhX2Rldi0+dXNiX2J1Zls1XTsKKwkJc2QtPnBhcmFtcy5zdGF0dXMudnBTdGF0dXMgPSBnc3BjYV9kZXYtPnVzYl9idWZbNl07CisJCXNkLT5wYXJhbXMuc3RhdHVzLmVycm9yQ29kZSA9IGdzcGNhX2Rldi0+dXNiX2J1Zls3XTsKKwkJYnJlYWs7CisJY2FzZSBDUElBX0NPTU1BTkRfR2V0VlBWZXJzaW9uOgorCQlzZC0+cGFyYW1zLnZwVmVyc2lvbi52cFZlcnNpb24gPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJCXNkLT5wYXJhbXMudnBWZXJzaW9uLnZwUmV2aXNpb24gPSBnc3BjYV9kZXYtPnVzYl9idWZbMV07CisJCXNkLT5wYXJhbXMudnBWZXJzaW9uLmNhbWVyYUhlYWRJRCA9CisJCQlnc3BjYV9kZXYtPnVzYl9idWZbMl0gfCAoZ3NwY2FfZGV2LT51c2JfYnVmWzNdIDw8IDgpOworCQlicmVhazsKKwljYXNlIENQSUFfQ09NTUFORF9HZXRDb2xvdXJQYXJhbXM6CisJCXNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJCXNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0ID0gZ3NwY2FfZGV2LT51c2JfYnVmWzFdOworCQlzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5zYXR1cmF0aW9uID0gZ3NwY2FfZGV2LT51c2JfYnVmWzJdOworCQlicmVhazsKKwljYXNlIENQSUFfQ09NTUFORF9HZXRDb2xvdXJCYWxhbmNlOgorCQlzZC0+cGFyYW1zLmNvbG91ckJhbGFuY2UucmVkR2FpbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKKwkJc2QtPnBhcmFtcy5jb2xvdXJCYWxhbmNlLmdyZWVuR2FpbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsxXTsKKwkJc2QtPnBhcmFtcy5jb2xvdXJCYWxhbmNlLmJsdWVHYWluID0gZ3NwY2FfZGV2LT51c2JfYnVmWzJdOworCQlicmVhazsKKwljYXNlIENQSUFfQ09NTUFORF9HZXRFeHBvc3VyZToKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmZpbmVFeHAgPSBnc3BjYV9kZXYtPnVzYl9idWZbMV07CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8gPSBnc3BjYV9kZXYtPnVzYl9idWZbMl07CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgPSBnc3BjYV9kZXYtPnVzYl9idWZbM107CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUucmVkQ29tcCA9IGdzcGNhX2Rldi0+dXNiX2J1Zls0XTsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5ncmVlbjFDb21wID0gZ3NwY2FfZGV2LT51c2JfYnVmWzVdOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMkNvbXAgPSBnc3BjYV9kZXYtPnVzYl9idWZbNl07CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXAgPSBnc3BjYV9kZXYtPnVzYl9idWZbN107CisJCWJyZWFrOworCisJY2FzZSBDUElBX0NPTU1BTkRfUmVhZE1DUG9ydHM6CisJCWlmICghc2QtPnBhcmFtcy5xeDMucXgzX2RldGVjdGVkKQorCQkJYnJlYWs7CisJCS8qIHRlc3QgYnV0dG9uIHByZXNzICovCisJCXNkLT5wYXJhbXMucXgzLmJ1dHRvbiA9ICgoZ3NwY2FfZGV2LT51c2JfYnVmWzFdICYgMHgwMikgPT0gMCk7CisJCWlmIChzZC0+cGFyYW1zLnF4My5idXR0b24pIHsKKwkJCS8qIGJ1dHRvbiBwcmVzc2VkIC0gdW5sb2NrIHRoZSBsYXRjaCAqLworCQkJZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9Xcml0ZU1DUG9ydCwKKwkJCQkgICAzLCAweERGLCAweERGLCAwKTsKKwkJCWRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfV3JpdGVNQ1BvcnQsCisJCQkJICAgMywgMHhGRiwgMHhGRiwgMCk7CisJCX0KKworCQkvKiB0ZXN0IHdoZXRoZXIgbWljcm9zY29wZSBpcyBjcmFkbGVkICovCisJCXNkLT5wYXJhbXMucXgzLmNyYWRsZWQgPSAoKGdzcGNhX2Rldi0+dXNiX2J1ZlsyXSAmIDB4NDApID09IDApOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogc2VuZCBhIGNvbW1hbmQgdG8gdGhlIGNhbWVyYSB3aXRoIGFuIGFkZGl0aW9uYWwgZGF0YSB0cmFuc2FjdGlvbiAqLworc3RhdGljIGludCBkb19jb21tYW5kX2V4dGVuZGVkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IGNvbW1hbmQsCisJCQkgICAgICAgdTggYSwgdTggYiwgdTggYywgdTggZCwKKwkJCSAgICAgICB1OCBlLCB1OCBmLCB1OCBnLCB1OCBoLAorCQkJICAgICAgIHU4IGksIHU4IGosIHU4IGssIHU4IGwpCit7CisJdTggY21kWzhdOworCisJY21kWzBdID0gY29tbWFuZCA+PiA4OworCWNtZFsxXSA9IGNvbW1hbmQgJiAweGZmOworCWNtZFsyXSA9IGE7CisJY21kWzNdID0gYjsKKwljbWRbNF0gPSBjOworCWNtZFs1XSA9IGQ7CisJY21kWzZdID0gODsKKwljbWRbN10gPSAwOworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IGU7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gZjsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMl0gPSBnOworCWdzcGNhX2Rldi0+dXNiX2J1ZlszXSA9IGg7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzRdID0gaTsKKwlnc3BjYV9kZXYtPnVzYl9idWZbNV0gPSBqOworCWdzcGNhX2Rldi0+dXNiX2J1Zls2XSA9IGs7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzddID0gbDsKKworCXJldHVybiBjcGlhX3VzYl90cmFuc2ZlckNtZChnc3BjYV9kZXYsIGNtZCk7Cit9CisKKy8qICBmaW5kX292ZXJfZXhwb3N1cmUKKyAqICBGaW5kcyBhIHN1aXRhYmxlIHZhbHVlIG9mIE92ZXJFeHBvc3VyZSBmb3IgdXNlIHdpdGggU2V0RmxpY2tlckN0cmwKKyAqICBTb21lIGNhbGN1bGF0aW9uIGlzIHJlcXVpcmVkIGJlY2F1c2UgdGhpcyB2YWx1ZSBjaGFuZ2VzIHdpdGggdGhlIGJyaWdodG5lc3MKKyAqICBzZXQgd2l0aCBTZXRDb2xvdXJQYXJhbWV0ZXJzCisgKgorICogIFBhcmFtZXRlcnM6IEJyaWdodG5lc3MgLSBsYXN0IGJyaWdodG5lc3MgdmFsdWUgc2V0IHdpdGggU2V0Q29sb3VyUGFyYW1ldGVycworICoKKyAqICBSZXR1cm5zOiBPdmVyRXhwb3N1cmUgdmFsdWUgdG8gdXNlIHdpdGggU2V0RmxpY2tlckN0cmwKKyAqLworI2RlZmluZSBGTElDS0VSX01BWF9FWFBPU1VSRSAgICAgICAgICAgICAgICAgICAgMjUwCisjZGVmaW5lIEZMSUNLRVJfQUxMT1dBQkxFX09WRVJfRVhQT1NVUkUgICAgICAgICAxNDYKKyNkZWZpbmUgRkxJQ0tFUl9CUklHSFRORVNTX0NPTlNUQU5UICAgICAgICAgICAgIDU5CitzdGF0aWMgaW50IGZpbmRfb3Zlcl9leHBvc3VyZShpbnQgYnJpZ2h0bmVzcykKK3sKKwlpbnQgTWF4QWxsb3dhYmxlT3ZlckV4cG9zdXJlLCBPdmVyRXhwb3N1cmU7CisKKwlNYXhBbGxvd2FibGVPdmVyRXhwb3N1cmUgPSBGTElDS0VSX01BWF9FWFBPU1VSRSAtIGJyaWdodG5lc3MgLQorCQkJCSAgIEZMSUNLRVJfQlJJR0hUTkVTU19DT05TVEFOVDsKKworCWlmIChNYXhBbGxvd2FibGVPdmVyRXhwb3N1cmUgPCBGTElDS0VSX0FMTE9XQUJMRV9PVkVSX0VYUE9TVVJFKQorCQlPdmVyRXhwb3N1cmUgPSBNYXhBbGxvd2FibGVPdmVyRXhwb3N1cmU7CisJZWxzZQorCQlPdmVyRXhwb3N1cmUgPSBGTElDS0VSX0FMTE9XQUJMRV9PVkVSX0VYUE9TVVJFOworCisJcmV0dXJuIE92ZXJFeHBvc3VyZTsKK30KKyN1bmRlZiBGTElDS0VSX01BWF9FWFBPU1VSRQorI3VuZGVmIEZMSUNLRVJfQUxMT1dBQkxFX09WRVJfRVhQT1NVUkUKKyN1bmRlZiBGTElDS0VSX0JSSUdIVE5FU1NfQ09OU1RBTlQKKworLyogaW5pdGlhbGlzZSBjYW1fZGF0YSBzdHJ1Y3R1cmUgICovCitzdGF0aWMgdm9pZCByZXNldF9jYW1lcmFfcGFyYW1zKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IGNhbV9wYXJhbXMgKnBhcmFtcyA9ICZzZC0+cGFyYW1zOworCisJLyogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgdmFsdWVzIGFyZSB0aGUgZGVmYXVsdHMgZnJvbQorCSAqICJTb2Z0d2FyZSBEZXZlbG9wZXIncyBHdWlkZSBmb3IgQ1BpQSBDYW1lcmFzIi4gIEFueSBjaGFuZ2VzCisJICogdG8gdGhlIGRlZmF1bHRzIGFyZSBub3RlZCBpbiBjb21tZW50cy4gKi8KKwlwYXJhbXMtPmNvbG91clBhcmFtcy5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CisJcGFyYW1zLT5jb2xvdXJQYXJhbXMuY29udHJhc3QgPSBDT05UUkFTVF9ERUY7CisJcGFyYW1zLT5jb2xvdXJQYXJhbXMuc2F0dXJhdGlvbiA9IFNBVFVSQVRJT05fREVGOworCXBhcmFtcy0+ZXhwb3N1cmUuZ2Fpbk1vZGUgPSA0OworCXBhcmFtcy0+ZXhwb3N1cmUuZXhwTW9kZSA9IDI7CQkvKiBBRUMgKi8KKwlwYXJhbXMtPmV4cG9zdXJlLmNvbXBNb2RlID0gMTsKKwlwYXJhbXMtPmV4cG9zdXJlLmNlbnRyZVdlaWdodCA9IDE7CisJcGFyYW1zLT5leHBvc3VyZS5nYWluID0gMDsKKwlwYXJhbXMtPmV4cG9zdXJlLmZpbmVFeHAgPSAwOworCXBhcmFtcy0+ZXhwb3N1cmUuY29hcnNlRXhwTG8gPSAxODU7CisJcGFyYW1zLT5leHBvc3VyZS5jb2Fyc2VFeHBIaSA9IDA7CisJcGFyYW1zLT5leHBvc3VyZS5yZWRDb21wID0gQ09NUF9SRUQ7CisJcGFyYW1zLT5leHBvc3VyZS5ncmVlbjFDb21wID0gQ09NUF9HUkVFTjE7CisJcGFyYW1zLT5leHBvc3VyZS5ncmVlbjJDb21wID0gQ09NUF9HUkVFTjI7CisJcGFyYW1zLT5leHBvc3VyZS5ibHVlQ29tcCA9IENPTVBfQkxVRTsKKwlwYXJhbXMtPmNvbG91ckJhbGFuY2UuYmFsYW5jZU1vZGUgPSAyOwkvKiBBQ0IgKi8KKwlwYXJhbXMtPmNvbG91ckJhbGFuY2UucmVkR2FpbiA9IDMyOworCXBhcmFtcy0+Y29sb3VyQmFsYW5jZS5ncmVlbkdhaW4gPSA2OworCXBhcmFtcy0+Y29sb3VyQmFsYW5jZS5ibHVlR2FpbiA9IDkyOworCXBhcmFtcy0+YXBjb3IuZ2FpbjEgPSAweDE4OworCXBhcmFtcy0+YXBjb3IuZ2FpbjIgPSAweDE2OworCXBhcmFtcy0+YXBjb3IuZ2FpbjQgPSAweDI0OworCXBhcmFtcy0+YXBjb3IuZ2FpbjggPSAweDM0OworCXBhcmFtcy0+ZmxpY2tlckNvbnRyb2wuZmxpY2tlck1vZGUgPSAwOworCXBhcmFtcy0+ZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgPSAxOworCisJcGFyYW1zLT5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wID0KKwkJZmxpY2tlcl9qdW1wc1tzZC0+bWFpbnNGcmVxXQorCQkJICAgICBbcGFyYW1zLT5zZW5zb3JGcHMuYmFzZXJhdGVdCisJCQkgICAgIFtwYXJhbXMtPnNlbnNvckZwcy5kaXZpc29yXTsKKwlwYXJhbXMtPmZsaWNrZXJDb250cm9sLmFsbG93YWJsZU92ZXJFeHBvc3VyZSA9CisJCWZpbmRfb3Zlcl9leHBvc3VyZShwYXJhbXMtPmNvbG91clBhcmFtcy5icmlnaHRuZXNzKTsKKwlwYXJhbXMtPnZsT2Zmc2V0LmdhaW4xID0gMjA7CisJcGFyYW1zLT52bE9mZnNldC5nYWluMiA9IDI0OworCXBhcmFtcy0+dmxPZmZzZXQuZ2FpbjQgPSAyNjsKKwlwYXJhbXMtPnZsT2Zmc2V0LmdhaW44ID0gMjY7CisJcGFyYW1zLT5jb21wcmVzc2lvblBhcmFtcy5oeXN0ZXJlc2lzID0gMzsKKwlwYXJhbXMtPmNvbXByZXNzaW9uUGFyYW1zLnRocmVzaE1heCA9IDExOworCXBhcmFtcy0+Y29tcHJlc3Npb25QYXJhbXMuc21hbGxTdGVwID0gMTsKKwlwYXJhbXMtPmNvbXByZXNzaW9uUGFyYW1zLmxhcmdlU3RlcCA9IDM7CisJcGFyYW1zLT5jb21wcmVzc2lvblBhcmFtcy5kZWNpbWF0aW9uSHlzdGVyZXNpcyA9IDI7CisJcGFyYW1zLT5jb21wcmVzc2lvblBhcmFtcy5mckRpZmZTdGVwVGhyZXNoID0gNTsKKwlwYXJhbXMtPmNvbXByZXNzaW9uUGFyYW1zLnFEaWZmU3RlcFRocmVzaCA9IDM7CisJcGFyYW1zLT5jb21wcmVzc2lvblBhcmFtcy5kZWNpbWF0aW9uVGhyZXNoTW9kID0gMjsKKwkvKiBFbmQgb2YgZGVmYXVsdCB2YWx1ZXMgZnJvbSBTb2Z0d2FyZSBEZXZlbG9wZXIncyBHdWlkZSAqLworCisJLyogU2V0IFNlbnNvciBGUFMgdG8gMTVmcHMuIFRoaXMgc2VlbXMgYmV0dGVyIHRoYW4gMzBmcHMKKwkgKiBmb3IgaW5kb29yIGxpZ2h0aW5nLiAqLworCXBhcmFtcy0+c2Vuc29yRnBzLmRpdmlzb3IgPSAxOworCXBhcmFtcy0+c2Vuc29yRnBzLmJhc2VyYXRlID0gMTsKKworCXBhcmFtcy0+eXV2VGhyZXNob2xkLnlUaHJlc2hvbGQgPSA2OyAvKiBGcm9tIHdpbmRvd3MgZHJpdmVyICovCisJcGFyYW1zLT55dXZUaHJlc2hvbGQudXZUaHJlc2hvbGQgPSA2OyAvKiBGcm9tIHdpbmRvd3MgZHJpdmVyICovCisKKwlwYXJhbXMtPmZvcm1hdC5zdWJTYW1wbGUgPSBTVUJTQU1QTEVfNDIwOworCXBhcmFtcy0+Zm9ybWF0Lnl1dk9yZGVyID0gWVVWT1JERVJfWVVZVjsKKworCXBhcmFtcy0+Y29tcHJlc3Npb24ubW9kZSA9IENQSUFfQ09NUFJFU1NJT05fQVVUTzsKKwlwYXJhbXMtPmNvbXByZXNzaW9uLmRlY2ltYXRpb24gPSBOT19ERUNJTUFUSU9OOworCisJcGFyYW1zLT5jb21wcmVzc2lvblRhcmdldC5mclRhcmdldGluZyA9IENPTVBfVEFSR0VUX0RFRjsKKwlwYXJhbXMtPmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldEZSID0gMTU7IC8qIEZyb20gd2luZG93cyBkcml2ZXIgKi8KKwlwYXJhbXMtPmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldFEgPSA1OyAvKiBGcm9tIHdpbmRvd3MgZHJpdmVyICovCisKKwlwYXJhbXMtPnF4My5xeDNfZGV0ZWN0ZWQgPSAwOworCXBhcmFtcy0+cXgzLnRvcGxpZ2h0ID0gMDsKKwlwYXJhbXMtPnF4My5ib3R0b21saWdodCA9IDA7CisJcGFyYW1zLT5xeDMuYnV0dG9uID0gMDsKKwlwYXJhbXMtPnF4My5jcmFkbGVkID0gMDsKK30KKworc3RhdGljIHZvaWQgcHJpbnRzdGF0dXMoc3RydWN0IGNhbV9wYXJhbXMgKnBhcmFtcykKK3sKKwlQREVCVUcoRF9QUk9CRSwgInN0YXR1czogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IiwKKwkgICAgICAgcGFyYW1zLT5zdGF0dXMuc3lzdGVtU3RhdGUsIHBhcmFtcy0+c3RhdHVzLmdyYWJTdGF0ZSwKKwkgICAgICAgcGFyYW1zLT5zdGF0dXMuc3RyZWFtU3RhdGUsIHBhcmFtcy0+c3RhdHVzLmZhdGFsRXJyb3IsCisJICAgICAgIHBhcmFtcy0+c3RhdHVzLmNtZEVycm9yLCBwYXJhbXMtPnN0YXR1cy5kZWJ1Z0ZsYWdzLAorCSAgICAgICBwYXJhbXMtPnN0YXR1cy52cFN0YXR1cywgcGFyYW1zLT5zdGF0dXMuZXJyb3JDb2RlKTsKK30KKworc3RhdGljIGludCBnb3RvX2xvd19wb3dlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dvdG9Mb1Bvd2VyLCAwLCAwLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXMsIDAsIDAsIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoc2QtPnBhcmFtcy5zdGF0dXMuc3lzdGVtU3RhdGUgIT0gTE9fUE9XRVJfU1RBVEUpIHsKKwkJaWYgKHNkLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlICE9IFdBUk1fQk9PVF9TVEFURSkgeworCQkJUERFQlVHKERfRVJSLAorCQkJICAgICAgICJ1bmV4cGVjdGVkIHN0YXRlIGFmdGVyIGxvIHBvd2VyIGNtZDogJTAyeCIsCisJCQkgICAgICAgc2QtPnBhcmFtcy5zdGF0dXMuc3lzdGVtU3RhdGUpOworCQkJcHJpbnRzdGF0dXMoJnNkLT5wYXJhbXMpOworCQl9CisJCXJldHVybiAtRUlPOworCX0KKworCVBERUJVRyhEX0NPTkYsICJjYW1lcmEgbm93IGluIExPVyBwb3dlciBzdGF0ZSIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdvdG9faGlnaF9wb3dlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dvdG9IaVBvd2VyLCAwLCAwLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbXNsZWVwX2ludGVycnVwdGlibGUoNDApOwkvKiB3aW5kb3dzIGRyaXZlciBkb2VzIGl0IHRvbyAqLworCisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQlyZXR1cm4gLUVJTlRSOworCisJZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXMsIDAsIDAsIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoc2QtPnBhcmFtcy5zdGF0dXMuc3lzdGVtU3RhdGUgIT0gSElfUE9XRVJfU1RBVEUpIHsKKwkJUERFQlVHKERfRVJSLCAidW5leHBlY3RlZCBzdGF0ZSBhZnRlciBoaSBwb3dlciBjbWQ6ICUwMngiLAorCQkJICAgICAgIHNkLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlKTsKKwkJcHJpbnRzdGF0dXMoJnNkLT5wYXJhbXMpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlQREVCVUcoRF9DT05GLCAiY2FtZXJhIG5vdyBpbiBISUdIIHBvd2VyIHN0YXRlIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3ZlcnNpb25faW5mb3JtYXRpb24oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCByZXQ7CisKKwkvKiBHZXRDUElBVmVyc2lvbiAqLworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfR2V0Q1BJQVZlcnNpb24sIDAsIDAsIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBHZXRQblBJRCAqLworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dldFBuUElELCAwLCAwLCAwLCAwKTsKK30KKworc3RhdGljIGludCBzYXZlX2NhbWVyYV9zdGF0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfR2V0Q29sb3VyQmFsYW5jZSwgMCwgMCwgMCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dldEV4cG9zdXJlLCAwLCAwLCAwLCAwKTsKK30KKworaW50IGNvbW1hbmRfc2V0Zm9ybWF0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0Rm9ybWF0LAorCQkJIHNkLT5wYXJhbXMuZm9ybWF0LnZpZGVvU2l6ZSwKKwkJCSBzZC0+cGFyYW1zLmZvcm1hdC5zdWJTYW1wbGUsCisJCQkgc2QtPnBhcmFtcy5mb3JtYXQueXV2T3JkZXIsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRST0ksCisJCQkgIHNkLT5wYXJhbXMucm9pLmNvbFN0YXJ0LCBzZC0+cGFyYW1zLnJvaS5jb2xFbmQsCisJCQkgIHNkLT5wYXJhbXMucm9pLnJvd1N0YXJ0LCBzZC0+cGFyYW1zLnJvaS5yb3dFbmQpOworfQorCitpbnQgY29tbWFuZF9zZXRjb2xvdXJwYXJhbXMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRDb2xvdXJQYXJhbXMsCisJCQkgIHNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MsCisJCQkgIHNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0LAorCQkJICBzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5zYXR1cmF0aW9uLCAwKTsKK30KKworaW50IGNvbW1hbmRfc2V0YXBjb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRBcGNvciwKKwkJCSAgc2QtPnBhcmFtcy5hcGNvci5nYWluMSwKKwkJCSAgc2QtPnBhcmFtcy5hcGNvci5nYWluMiwKKwkJCSAgc2QtPnBhcmFtcy5hcGNvci5nYWluNCwKKwkJCSAgc2QtPnBhcmFtcy5hcGNvci5nYWluOCk7Cit9CisKK2ludCBjb21tYW5kX3NldHZsb2Zmc2V0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0VkxPZmZzZXQsCisJCQkgIHNkLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjEsCisJCQkgIHNkLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjIsCisJCQkgIHNkLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjQsCisJCQkgIHNkLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjgpOworfQorCitpbnQgY29tbWFuZF9zZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBkb19jb21tYW5kX2V4dGVuZGVkKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldEV4cG9zdXJlLAorCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluTW9kZSwKKwkJCQkgIDEsCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmNvbXBNb2RlLAorCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5jZW50cmVXZWlnaHQsCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW4sCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmZpbmVFeHAsCisJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cExvLAorCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSwKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUucmVkQ29tcCwKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4xQ29tcCwKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4yQ29tcCwKKwkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoc2QtPnBhcmFtcy5leHBvc3VyZS5leHBNb2RlICE9IDEpIHsKKwkJcmV0ID0gZG9fY29tbWFuZF9leHRlbmRlZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRFeHBvc3VyZSwKKwkJCQkJICAwLAorCQkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZXhwTW9kZSwKKwkJCQkJICAwLCAwLAorCQkJCQkgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbiwKKwkJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmZpbmVFeHAsCisJCQkJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbywKKwkJCQkJICBzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cEhpLAorCQkJCQkgIDAsIDAsIDAsIDApOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCBjb21tYW5kX3NldGNvbG91cmJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChzZC0+cGFyYW1zLmNvbG91ckJhbGFuY2UuYmFsYW5jZU1vZGUgPT0gMSkgeworCQlpbnQgcmV0OworCisJCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0Q29sb3VyQmFsYW5jZSwKKwkJCQkgMSwKKwkJCQkgc2QtPnBhcmFtcy5jb2xvdXJCYWxhbmNlLnJlZEdhaW4sCisJCQkJIHNkLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5ncmVlbkdhaW4sCisJCQkJIHNkLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5ibHVlR2Fpbik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldENvbG91ckJhbGFuY2UsCisJCQkJICAzLCAwLCAwLCAwKTsKKwl9CisJaWYgKHNkLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5iYWxhbmNlTW9kZSA9PSAyKSB7CisJCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldENvbG91ckJhbGFuY2UsCisJCQkJICAyLCAwLCAwLCAwKTsKKwl9CisJaWYgKHNkLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5iYWxhbmNlTW9kZSA9PSAzKSB7CisJCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldENvbG91ckJhbGFuY2UsCisJCQkJICAzLCAwLCAwLCAwKTsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworaW50IGNvbW1hbmRfc2V0Y29tcHJlc3Npb250YXJnZXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uVGFyZ2V0LAorCQkJICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LmZyVGFyZ2V0aW5nLAorCQkJICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldEZSLAorCQkJICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldFEsIDApOworfQorCitpbnQgY29tbWFuZF9zZXR5dXZ0cmVzaChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0WVVWVGhyZXNoLAorCQkJICBzZC0+cGFyYW1zLnl1dlRocmVzaG9sZC55VGhyZXNob2xkLAorCQkJICBzZC0+cGFyYW1zLnl1dlRocmVzaG9sZC51dlRocmVzaG9sZCwgMCwgMCk7Cit9CisKK2ludCBjb21tYW5kX3NldGNvbXByZXNzaW9ucGFyYW1zKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZXR1cm4gZG9fY29tbWFuZF9leHRlbmRlZChnc3BjYV9kZXYsCisJCQkgICAgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uUGFyYW1zLAorCQkJICAgIDAsIDAsIDAsIDAsCisJCQkgICAgc2QtPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5oeXN0ZXJlc2lzLAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMudGhyZXNoTWF4LAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuc21hbGxTdGVwLAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMubGFyZ2VTdGVwLAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuZGVjaW1hdGlvbkh5c3RlcmVzaXMsCisJCQkgICAgc2QtPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5mckRpZmZTdGVwVGhyZXNoLAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMucURpZmZTdGVwVGhyZXNoLAorCQkJICAgIHNkLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuZGVjaW1hdGlvblRocmVzaE1vZCk7Cit9CisKK2ludCBjb21tYW5kX3NldGNvbXByZXNzaW9uKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRDb21wcmVzc2lvbiwKKwkJCSAgc2QtPnBhcmFtcy5jb21wcmVzc2lvbi5tb2RlLAorCQkJICBzZC0+cGFyYW1zLmNvbXByZXNzaW9uLmRlY2ltYXRpb24sIDAsIDApOworfQorCitpbnQgY29tbWFuZF9zZXRzZW5zb3JmcHMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldFNlbnNvckZQUywKKwkJCSAgc2QtPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvciwKKwkJCSAgc2QtPnBhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGUsIDAsIDApOworfQorCitpbnQgY29tbWFuZF9zZXRmbGlja2VyY3RybChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfU2V0RmxpY2tlckN0cmwsCisJCQkgIHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZmxpY2tlck1vZGUsCisJCQkgIHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCwKKwkJCSAgc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5hbGxvd2FibGVPdmVyRXhwb3N1cmUsCisJCQkgIDApOworfQorCitpbnQgY29tbWFuZF9zZXRlY3B0aW1pbmcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXJldHVybiBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldEVDUFRpbWluZywKKwkJCSAgc2QtPnBhcmFtcy5lY3BUaW1pbmcsIDAsIDAsIDApOworfQorCitpbnQgY29tbWFuZF9wYXVzZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfRW5kU3RyZWFtQ2FwLCAwLCAwLCAwLCAwKTsKK30KKworaW50IGNvbW1hbmRfcmVzdW1lKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlyZXR1cm4gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9Jbml0U3RyZWFtQ2FwLAorCQkJICAwLCBzZC0+cGFyYW1zLnN0cmVhbVN0YXJ0TGluZSwgMCwgMCk7Cit9CisKK2ludCBjb21tYW5kX3NldGxpZ2h0cyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQsIHAxLCBwMjsKKworCWlmICghc2QtPnBhcmFtcy5xeDMucXgzX2RldGVjdGVkKQorCQlyZXR1cm4gMDsKKworCXAxID0gKHNkLT5wYXJhbXMucXgzLmJvdHRvbWxpZ2h0ID09IDApIDw8IDE7CisJcDIgPSAoc2QtPnBhcmFtcy5xeDMudG9wbGlnaHQgPT0gMCkgPDwgMzsKKworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfV3JpdGVWQ1JlZywKKwkJCSAweDkwLCAweDhGLCAweDUwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfV3JpdGVNQ1BvcnQsIDIsIDAsCisJCQkgIHAxIHwgcDIgfCAweEUwLCAwKTsKK30KKworc3RhdGljIGludCBzZXRfZmxpY2tlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIGludCBvbiwgaW50IGFwcGx5KQoreworCS8qIEV2ZXJ5dGhpbmcgaW4gaGVyZSBpcyBmcm9tIHRoZSBXaW5kb3dzIGRyaXZlciAqLworLyogZGVmaW5lIGZvciBjb21wZ2FpbiBjYWxjdWxhdGlvbiAqLworI2lmIDAKKyNkZWZpbmUgQ09NUEdBSU4oYmFzZSwgY3VyZXhwLCBuZXdleHApIFwKKyAgICAodTgpICgoKChmbG9hdCkgYmFzZSAtIDEyOC4wKSAqICgoZmxvYXQpIGN1cmV4cCAvIChmbG9hdCkgbmV3ZXhwKSkgKyAxMjguNSkKKyNkZWZpbmUgRVhQX0ZST01fQ09NUChiYXNlY29tcCwgY3VyY29tcCwgY3VyZXhwKSBcCisgICAgKHUxNikoKGZsb2F0KWN1cmV4cCAqIChmbG9hdCkodTgpKGN1cmNvbXAgKyAxMjgpIC8gXAorICAgIChmbG9hdCkodTgpKGJhc2Vjb21wIC0gMTI4KSkKKyNlbHNlCisgIC8qIGVxdWl2YWxlbnQgZnVuY3Rpb25zIHdpdGhvdXQgZmxvYXRpbmcgcG9pbnQgbWF0aCAqLworI2RlZmluZSBDT01QR0FJTihiYXNlLCBjdXJleHAsIG5ld2V4cCkgXAorICAgICh1OCkoMTI4ICsgKCgodTMyKSgyKihiYXNlLTEyOCkqY3VyZXhwICsgbmV3ZXhwKSkgLyAoMiAqIG5ld2V4cCkpKQorI2RlZmluZSBFWFBfRlJPTV9DT01QKGJhc2Vjb21wLCBjdXJjb21wLCBjdXJleHApIFwKKyAgICAodTE2KSgoKHUzMikoY3VyZXhwICogKHU4KShjdXJjb21wICsgMTI4KSkgLyAodTgpKGJhc2Vjb21wIC0gMTI4KSkpCisjZW5kaWYKKworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgY3VycmVudGV4cCA9IHNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8gKworCQkJIHNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgKiAyNTY7CisJaW50IHJldCwgc3RhcnRleHA7CisKKwlpZiAob24pIHsKKwkJaW50IGNqID0gc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wOworCQlzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlID0gMTsKKwkJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCA9IDA7CisJCWlmIChzZC0+cGFyYW1zLmV4cG9zdXJlLmV4cE1vZGUgIT0gMikgeworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5leHBNb2RlID0gMjsKKwkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7CisJCX0KKwkJY3VycmVudGV4cCA9IGN1cnJlbnRleHAgPDwgc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW4gPSAwOworCQkvKiByb3VuZCBkb3duIGN1cnJlbnQgZXhwb3N1cmUgdG8gbmVhcmVzdCB2YWx1ZSAqLworCQlzdGFydGV4cCA9IChjdXJyZW50ZXhwICsgUk9VTkRfVVBfRVhQX0ZPUl9GTElDS0VSKSAvIGNqOworCQlpZiAoc3RhcnRleHAgPCAxKQorCQkJc3RhcnRleHAgPSAxOworCQlzdGFydGV4cCA9IChzdGFydGV4cCAqIGNqKSAtIDE7CisJCWlmIChGSVJNV0FSRV9WRVJTSU9OKDEsIDIpKQorCQkJd2hpbGUgKHN0YXJ0ZXhwID4gTUFYX0VYUF8xMDIpCisJCQkJc3RhcnRleHAgLT0gY2o7CisJCWVsc2UKKwkJCXdoaWxlIChzdGFydGV4cCA+IE1BWF9FWFApCisJCQkJc3RhcnRleHAgLT0gY2o7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8gPSBzdGFydGV4cCAmIDB4ZmY7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgPSBzdGFydGV4cCA+PiA4OworCQlpZiAoY3VycmVudGV4cCA+IHN0YXJ0ZXhwKSB7CisJCQlpZiAoY3VycmVudGV4cCA+ICgyICogc3RhcnRleHApKQorCQkJCWN1cnJlbnRleHAgPSAyICogc3RhcnRleHA7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLnJlZENvbXAgPQorCQkJCUNPTVBHQUlOKENPTVBfUkVELCBjdXJyZW50ZXhwLCBzdGFydGV4cCk7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMUNvbXAgPQorCQkJCUNPTVBHQUlOKENPTVBfR1JFRU4xLCBjdXJyZW50ZXhwLCBzdGFydGV4cCk7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMkNvbXAgPQorCQkJCUNPTVBHQUlOKENPTVBfR1JFRU4yLCBjdXJyZW50ZXhwLCBzdGFydGV4cCk7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmJsdWVDb21wID0KKwkJCQlDT01QR0FJTihDT01QX0JMVUUsIGN1cnJlbnRleHAsIHN0YXJ0ZXhwKTsKKwkJfSBlbHNlIHsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUucmVkQ29tcCA9IENPTVBfUkVEOworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5ncmVlbjFDb21wID0gQ09NUF9HUkVFTjE7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMkNvbXAgPSBDT01QX0dSRUVOMjsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXAgPSBDT01QX0JMVUU7CisJCX0KKwkJaWYgKEZJUk1XQVJFX1ZFUlNJT04oMSwgMikpCisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmNvbXBNb2RlID0gMDsKKwkJZWxzZQorCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb21wTW9kZSA9IDE7CisKKwkJc2QtPnBhcmFtcy5hcGNvci5nYWluMSA9IDB4MTg7CisJCXNkLT5wYXJhbXMuYXBjb3IuZ2FpbjIgPSAweDE4OworCQlzZC0+cGFyYW1zLmFwY29yLmdhaW40ID0gMHgxNjsKKwkJc2QtPnBhcmFtcy5hcGNvci5nYWluOCA9IDB4MTQ7CisJfSBlbHNlIHsKKwkJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSA9IDA7CisJCXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgPSAxOworCQkvKiBBdmVyYWdlIGVxdWl2YWxlbnQgY29hcnNlIGZvciBlYWNoIGNvbXAgY2hhbm5lbCAqLworCQlzdGFydGV4cCA9IEVYUF9GUk9NX0NPTVAoQ09NUF9SRUQsCisJCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5yZWRDb21wLCBjdXJyZW50ZXhwKTsKKwkJc3RhcnRleHAgKz0gRVhQX0ZST01fQ09NUChDT01QX0dSRUVOMSwKKwkJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMUNvbXAsIGN1cnJlbnRleHApOworCQlzdGFydGV4cCArPSBFWFBfRlJPTV9DT01QKENPTVBfR1JFRU4yLAorCQkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4yQ29tcCwgY3VycmVudGV4cCk7CisJCXN0YXJ0ZXhwICs9IEVYUF9GUk9NX0NPTVAoQ09NUF9CTFVFLAorCQkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXAsIGN1cnJlbnRleHApOworCQlzdGFydGV4cCA9IHN0YXJ0ZXhwID4+IDI7CisJCXdoaWxlIChzdGFydGV4cCA+IE1BWF9FWFAgJiYgc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluIDwKKwkJICAgICAgIHNkLT5wYXJhbXMuZXhwb3N1cmUuZ2Fpbk1vZGUgLSAxKSB7CisJCQlzdGFydGV4cCA9IHN0YXJ0ZXhwID4+IDE7CisJCQkrK3NkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbjsKKwkJfQorCQlpZiAoRklSTVdBUkVfVkVSU0lPTigxLCAyKSAmJiBzdGFydGV4cCA+IE1BWF9FWFBfMTAyKQorCQkJc3RhcnRleHAgPSBNQVhfRVhQXzEwMjsKKwkJaWYgKHN0YXJ0ZXhwID4gTUFYX0VYUCkKKwkJCXN0YXJ0ZXhwID0gTUFYX0VYUDsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbyA9IHN0YXJ0ZXhwICYgMHhmZjsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSA9IHN0YXJ0ZXhwID4+IDg7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUucmVkQ29tcCA9IENPTVBfUkVEOworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMUNvbXAgPSBDT01QX0dSRUVOMTsKKwkJc2QtPnBhcmFtcy5leHBvc3VyZS5ncmVlbjJDb21wID0gQ09NUF9HUkVFTjI7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXAgPSBDT01QX0JMVUU7CisJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29tcE1vZGUgPSAxOworCQlzZC0+cGFyYW1zLmFwY29yLmdhaW4xID0gMHgxODsKKwkJc2QtPnBhcmFtcy5hcGNvci5nYWluMiA9IDB4MTY7CisJCXNkLT5wYXJhbXMuYXBjb3IuZ2FpbjQgPSAweDI0OworCQlzZC0+cGFyYW1zLmFwY29yLmdhaW44ID0gMHgzNDsKKwl9CisJc2QtPnBhcmFtcy52bE9mZnNldC5nYWluMSA9IDIwOworCXNkLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjIgPSAyNDsKKwlzZC0+cGFyYW1zLnZsT2Zmc2V0LmdhaW40ID0gMjY7CisJc2QtPnBhcmFtcy52bE9mZnNldC5nYWluOCA9IDI2OworCisJaWYgKGFwcGx5KSB7CisJCXJldCA9IGNvbW1hbmRfc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gY29tbWFuZF9zZXRhcGNvcihnc3BjYV9kZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBjb21tYW5kX3NldHZsb2Zmc2V0KGdzcGNhX2Rldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGNvbW1hbmRfc2V0ZmxpY2tlcmN0cmwoZ3NwY2FfZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7CisjdW5kZWYgRVhQX0ZST01fQ09NUAorI3VuZGVmIENPTVBHQUlOCit9CisKKy8qIG1vbml0b3IgdGhlIGV4cG9zdXJlIGFuZCBhZGp1c3QgdGhlIHNlbnNvciBmcmFtZSByYXRlIGlmIG5lZWRlZCAqLworc3RhdGljIHZvaWQgbW9uaXRvcl9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGV4cF9hY2MsIGJjb21wLCBnYWluLCBjb2Fyc2VMLCBjbWRbOF07CisJaW50IHJldCwgbGlnaHRfZXhwLCBkYXJrX2V4cCwgdmVyeV9kYXJrX2V4cDsKKwlpbnQgb2xkX2V4cG9zdXJlLCBuZXdfZXhwb3N1cmUsIGZyYW1lcmF0ZTsKKwlpbnQgc2V0ZnBzID0gMCwgc2V0ZXhwID0gMCwgc2V0ZmxpY2tlciA9IDA7CisKKwkvKiBnZXQgbmVjZXNzYXJ5IHN0YXRzIGFuZCByZWdpc3RlciBzZXR0aW5ncyBmcm9tIGNhbWVyYSAqLworCS8qIGRvX2NvbW1hbmQgY2FuJ3QgaGFuZGxlIHRoaXMsIHNvIGRvIGl0IG91cnNlbHZlcyAqLworCWNtZFswXSA9IENQSUFfQ09NTUFORF9SZWFkVlBSZWdzID4+IDg7CisJY21kWzFdID0gQ1BJQV9DT01NQU5EX1JlYWRWUFJlZ3MgJiAweGZmOworCWNtZFsyXSA9IDMwOworCWNtZFszXSA9IDQ7CisJY21kWzRdID0gOTsKKwljbWRbNV0gPSA4OworCWNtZFs2XSA9IDg7CisJY21kWzddID0gMDsKKwlyZXQgPSBjcGlhX3VzYl90cmFuc2ZlckNtZChnc3BjYV9kZXYsIGNtZCk7CisJaWYgKHJldCkgeworCQlQREVCVUcoRF9FUlIsICJSZWFkVlBSZWdzKDMwLDQsOSw4KSAtIGZhaWxlZDogJWQiLCByZXQpOworCQlyZXR1cm47CisJfQorCWV4cF9hY2MgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CisJYmNvbXAgPSBnc3BjYV9kZXYtPnVzYl9idWZbMV07CisJZ2FpbiA9IGdzcGNhX2Rldi0+dXNiX2J1ZlsyXTsKKwljb2Fyc2VMID0gZ3NwY2FfZGV2LT51c2JfYnVmWzNdOworCisJbGlnaHRfZXhwID0gc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyArCisJCSAgICBUQyAtIDUwICsgRVhQX0FDQ19MSUdIVDsKKwlpZiAobGlnaHRfZXhwID4gMjU1KQorCQlsaWdodF9leHAgPSAyNTU7CisJZGFya19leHAgPSBzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5icmlnaHRuZXNzICsKKwkJICAgVEMgLSA1MCAtIEVYUF9BQ0NfREFSSzsKKwlpZiAoZGFya19leHAgPCAwKQorCQlkYXJrX2V4cCA9IDA7CisJdmVyeV9kYXJrX2V4cCA9IGRhcmtfZXhwIC8gMjsKKworCW9sZF9leHBvc3VyZSA9IHNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgKiAyNTYgKworCQkgICAgICAgc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbzsKKworCWlmICghc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCkgeworCQkvKiBGbGlja2VyIGNvbnRyb2wgb24gKi8KKwkJaW50IG1heF9jb21wID0gRklSTVdBUkVfVkVSU0lPTigxLCAyKSA/IE1BWF9DT01QIDoKKwkJCQkJCQlISUdIX0NPTVBfMTAyOworCQliY29tcCArPSAxMjg7CS8qIGRlY29kZSAqLworCQlpZiAoYmNvbXAgPj0gbWF4X2NvbXAgJiYgZXhwX2FjYyA8IGRhcmtfZXhwKSB7CisJCQkvKiBkYXJrICovCisJCQlpZiAoZXhwX2FjYyA8IHZlcnlfZGFya19leHApIHsKKwkJCQkvKiB2ZXJ5IGRhcmsgKi8KKwkJCQlpZiAoc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9WRVJZX0RBUkspCisJCQkJCSsrc2QtPmV4cG9zdXJlX2NvdW50OworCQkJCWVsc2UgeworCQkJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0KKwkJCQkJCUVYUE9TVVJFX1ZFUllfREFSSzsKKwkJCQkJc2QtPmV4cG9zdXJlX2NvdW50ID0gMTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIGp1c3QgZGFyayAqLworCQkJCWlmIChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX0RBUkspCisJCQkJCSsrc2QtPmV4cG9zdXJlX2NvdW50OworCQkJCWVsc2UgeworCQkJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfREFSSzsKKwkJCQkJc2QtPmV4cG9zdXJlX2NvdW50ID0gMTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAob2xkX2V4cG9zdXJlIDw9IExPV19FWFAgfHwgZXhwX2FjYyA+IGxpZ2h0X2V4cCkgeworCQkJLyogbGlnaHQgKi8KKwkJCWlmIChvbGRfZXhwb3N1cmUgPD0gVkVSWV9MT1dfRVhQKSB7CisJCQkJLyogdmVyeSBsaWdodCAqLworCQkJCWlmIChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfTElHSFQpCisJCQkJCSsrc2QtPmV4cG9zdXJlX2NvdW50OworCQkJCWVsc2UgeworCQkJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0KKwkJCQkJCUVYUE9TVVJFX1ZFUllfTElHSFQ7CisJCQkJCXNkLT5leHBvc3VyZV9jb3VudCA9IDE7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBqdXN0IGxpZ2h0ICovCisJCQkJaWYgKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfTElHSFQpCisJCQkJCSsrc2QtPmV4cG9zdXJlX2NvdW50OworCQkJCWVsc2UgeworCQkJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTElHSFQ7CisJCQkJCXNkLT5leHBvc3VyZV9jb3VudCA9IDE7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJLyogbm90IGRhcmsgb3IgbGlnaHQgKi8KKwkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7CisJCX0KKwl9IGVsc2UgeworCQkvKiBGbGlja2VyIGNvbnRyb2wgb2ZmICovCisJCWlmIChvbGRfZXhwb3N1cmUgPj0gTUFYX0VYUCAmJiBleHBfYWNjIDwgZGFya19leHApIHsKKwkJCS8qIGRhcmsgKi8KKwkJCWlmIChleHBfYWNjIDwgdmVyeV9kYXJrX2V4cCkgeworCQkJCS8qIHZlcnkgZGFyayAqLworCQkJCWlmIChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfREFSSykKKwkJCQkJKytzZC0+ZXhwb3N1cmVfY291bnQ7CisJCQkJZWxzZSB7CisJCQkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPQorCQkJCQkJRVhQT1NVUkVfVkVSWV9EQVJLOworCQkJCQlzZC0+ZXhwb3N1cmVfY291bnQgPSAxOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyoganVzdCBkYXJrICovCisJCQkJaWYgKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfREFSSykKKwkJCQkJKytzZC0+ZXhwb3N1cmVfY291bnQ7CisJCQkJZWxzZSB7CisJCQkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9EQVJLOworCQkJCQlzZC0+ZXhwb3N1cmVfY291bnQgPSAxOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChvbGRfZXhwb3N1cmUgPD0gTE9XX0VYUCB8fCBleHBfYWNjID4gbGlnaHRfZXhwKSB7CisJCQkvKiBsaWdodCAqLworCQkJaWYgKG9sZF9leHBvc3VyZSA8PSBWRVJZX0xPV19FWFApIHsKKwkJCQkvKiB2ZXJ5IGxpZ2h0ICovCisJCQkJaWYgKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfVkVSWV9MSUdIVCkKKwkJCQkJKytzZC0+ZXhwb3N1cmVfY291bnQ7CisJCQkJZWxzZSB7CisJCQkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPQorCQkJCQkJRVhQT1NVUkVfVkVSWV9MSUdIVDsKKwkJCQkJc2QtPmV4cG9zdXJlX2NvdW50ID0gMTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIGp1c3QgbGlnaHQgKi8KKwkJCQlpZiAoc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9MSUdIVCkKKwkJCQkJKytzZC0+ZXhwb3N1cmVfY291bnQ7CisJCQkJZWxzZSB7CisJCQkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9MSUdIVDsKKwkJCQkJc2QtPmV4cG9zdXJlX2NvdW50ID0gMTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBub3QgZGFyayBvciBsaWdodCAqLworCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX05PUk1BTDsKKwkJfQorCX0KKworCWZyYW1lcmF0ZSA9IGF0b21pY19yZWFkKCZzZC0+ZnBzKTsKKwlpZiAoZnJhbWVyYXRlID4gMzAgfHwgZnJhbWVyYXRlIDwgMSkKKwkJZnJhbWVyYXRlID0gMTsKKworCWlmICghc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCkgeworCQkvKiBGbGlja2VyIGNvbnRyb2wgb24gKi8KKwkJaWYgKChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfREFSSyB8fAorCQkgICAgIHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfREFSSykgJiYKKwkJICAgIHNkLT5leHBvc3VyZV9jb3VudCA+PSBEQVJLX1RJTUUgKiBmcmFtZXJhdGUgJiYKKwkJICAgIHNkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3IgPCAzKSB7CisKKwkJCS8qIGRhcmsgZm9yIHRvbyBsb25nICovCisJCQkrK3NkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3I7CisJCQlzZXRmcHMgPSAxOworCisJCQlzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAgPQorCQkJCWZsaWNrZXJfanVtcHNbc2QtPm1haW5zRnJlcV0KKwkJCQkJICAgICBbc2QtPnBhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGVdCisJCQkJCSAgICAgW3NkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3JdOworCQkJc2V0ZmxpY2tlciA9IDE7CisKKwkJCW5ld19leHBvc3VyZSA9IHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcC0xOworCQkJd2hpbGUgKG5ld19leHBvc3VyZSA8IG9sZF9leHBvc3VyZSAvIDIpCisJCQkJbmV3X2V4cG9zdXJlICs9CisJCQkJCXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcDsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8gPSBuZXdfZXhwb3N1cmUgJiAweGZmOworCQkJc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSA9IG5ld19leHBvc3VyZSA+PiA4OworCQkJc2V0ZXhwID0gMTsKKwkJCXNkLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7CisJCQlQREVCVUcoRF9DT05GLCAiQXV0b21hdGljYWxseSBkZWNyZWFzaW5nIHNlbnNvcl9mcHMiKTsKKworCQl9IGVsc2UgaWYgKChzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfTElHSFQgfHwKKwkJCSAgICBzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX0xJR0hUKSAmJgorCQkJICAgc2QtPmV4cG9zdXJlX2NvdW50ID49IExJR0hUX1RJTUUgKiBmcmFtZXJhdGUgJiYKKwkJCSAgIHNkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3IgPiAwKSB7CisKKwkJCS8qIGxpZ2h0IGZvciB0b28gbG9uZyAqLworCQkJaW50IG1heF9leHAgPSBGSVJNV0FSRV9WRVJTSU9OKDEsIDIpID8gTUFYX0VYUF8xMDIgOgorCQkJCQkJCSAgICAgICBNQVhfRVhQOworCQkJLS1zZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yOworCQkJc2V0ZnBzID0gMTsKKworCQkJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wID0KKwkJCQlmbGlja2VyX2p1bXBzW3NkLT5tYWluc0ZyZXFdCisJCQkJCSAgICAgW3NkLT5wYXJhbXMuc2Vuc29yRnBzLmJhc2VyYXRlXQorCQkJCQkgICAgIFtzZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yXTsKKwkJCXNldGZsaWNrZXIgPSAxOworCisJCQluZXdfZXhwb3N1cmUgPSBzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAtMTsKKwkJCXdoaWxlIChuZXdfZXhwb3N1cmUgPCAyICogb2xkX2V4cG9zdXJlICYmCisJCQkgICAgICAgbmV3X2V4cG9zdXJlICsKKwkJCSAgICAgICBzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAgPCBtYXhfZXhwKQorCQkJCW5ld19leHBvc3VyZSArPQorCQkJCQlzZC0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXA7CisJCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cExvID0gbmV3X2V4cG9zdXJlICYgMHhmZjsKKwkJCXNkLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkgPSBuZXdfZXhwb3N1cmUgPj4gODsKKwkJCXNldGV4cCA9IDE7CisJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOworCQkJUERFQlVHKERfQ09ORiwgIkF1dG9tYXRpY2FsbHkgaW5jcmVhc2luZyBzZW5zb3JfZnBzIik7CisJCX0KKwl9IGVsc2UgeworCQkvKiBGbGlja2VyIGNvbnRyb2wgb2ZmICovCisJCWlmICgoc2QtPmV4cG9zdXJlX3N0YXR1cyA9PSBFWFBPU1VSRV9WRVJZX0RBUksgfHwKKwkJICAgICBzZC0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX0RBUkspICYmCisJCSAgICBzZC0+ZXhwb3N1cmVfY291bnQgPj0gREFSS19USU1FICogZnJhbWVyYXRlICYmCisJCSAgICBzZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yIDwgMykgeworCisJCQkvKiBkYXJrIGZvciB0b28gbG9uZyAqLworCQkJKytzZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yOworCQkJc2V0ZnBzID0gMTsKKworCQkJaWYgKHNkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbiA+IDApIHsKKwkJCQktLXNkLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbjsKKwkJCQlzZXRleHAgPSAxOworCQkJfQorCQkJc2QtPmV4cG9zdXJlX3N0YXR1cyA9IEVYUE9TVVJFX05PUk1BTDsKKwkJCVBERUJVRyhEX0NPTkYsICJBdXRvbWF0aWNhbGx5IGRlY3JlYXNpbmcgc2Vuc29yX2ZwcyIpOworCisJCX0gZWxzZSBpZiAoKHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfVkVSWV9MSUdIVCB8fAorCQkJICAgIHNkLT5leHBvc3VyZV9zdGF0dXMgPT0gRVhQT1NVUkVfTElHSFQpICYmCisJCQkgICBzZC0+ZXhwb3N1cmVfY291bnQgPj0gTElHSFRfVElNRSAqIGZyYW1lcmF0ZSAmJgorCQkJICAgc2QtPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvciA+IDApIHsKKworCQkJLyogbGlnaHQgZm9yIHRvbyBsb25nICovCisJCQktLXNkLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3I7CisJCQlzZXRmcHMgPSAxOworCisJCQlpZiAoc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluIDwKKwkJCSAgICBzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW5Nb2RlIC0gMSkgeworCQkJCSsrc2QtPnBhcmFtcy5leHBvc3VyZS5nYWluOworCQkJCXNldGV4cCA9IDE7CisJCQl9CisJCQlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOworCQkJUERFQlVHKERfQ09ORiwgIkF1dG9tYXRpY2FsbHkgaW5jcmVhc2luZyBzZW5zb3JfZnBzIik7CisJCX0KKwl9CisKKwlpZiAoc2V0ZXhwKQorCQljb21tYW5kX3NldGV4cG9zdXJlKGdzcGNhX2Rldik7CisKKwlpZiAoc2V0ZnBzKQorCQljb21tYW5kX3NldHNlbnNvcmZwcyhnc3BjYV9kZXYpOworCisJaWYgKHNldGZsaWNrZXIpCisJCWNvbW1hbmRfc2V0ZmxpY2tlcmN0cmwoZ3NwY2FfZGV2KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBpZiBmbGlja2VyIGlzIHN3aXRjaGVkIG9mZiwgdGhpcyBmdW5jdGlvbiBzd2l0Y2hlcyBpdCBiYWNrIG9uLkl0IGNoZWNrcywKKyAgIGhvd2V2ZXIsIHRoYXQgY29uZGl0aW9ucyBhcmUgc3VpdGFibGUgYmVmb3JlIHJlc3RhcnRpbmcgaXQuCisgICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmb3IgZmlybXdhcmUgdmVyc2lvbiAxLjIuCisKKyAgIEl0IGFsc28gYWRqdXN0IHRoZSBjb2xvdXIgYmFsYW5jZSB3aGVuIGFuIGV4cG9zdXJlIHN0ZXAgaXMgZGV0ZWN0ZWQgLSBhcworICAgbG9uZyBhcyBmbGlja2VyIGlzIHJ1bm5pbmcKKyovCitzdGF0aWMgdm9pZCByZXN0YXJ0X2ZsaWNrZXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgY2FtX2V4cG9zdXJlLCBvbGRfZXhwOworCisJaWYgKCFGSVJNV0FSRV9WRVJTSU9OKDEsIDIpKQorCQlyZXR1cm47CisKKwljYW1fZXhwb3N1cmUgPSBhdG9taWNfcmVhZCgmc2QtPmNhbV9leHBvc3VyZSk7CisKKwlpZiAoc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSA9PSAwIHx8CisJICAgIGNhbV9leHBvc3VyZSA9PSAwKQorCQlyZXR1cm47CisKKwlvbGRfZXhwID0gc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbyArCisJCSAgc2QtPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSoyNTY7CisJLyoKKwkgIHNlZSBob3cgZmFyIGF3YXkgY2FtZXJhIGV4cG9zdXJlIGlzIGZyb20gYSB2YWxpZAorCSAgZmxpY2tlciBleHBvc3VyZSB2YWx1ZQorCSovCisJY2FtX2V4cG9zdXJlICU9IHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcDsKKwlpZiAoIXNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgJiYKKwkgICAgY2FtX2V4cG9zdXJlIDw9IHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCAtIDMpIHsKKwkJLyogRmxpY2tlciBjb250cm9sIGF1dG8tZGlzYWJsZWQgKi8KKwkJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCA9IDE7CisJfQorCisJaWYgKHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgJiYKKwkgICAgb2xkX2V4cCA+IHNkLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCArCisJCSAgICAgIFJPVU5EX1VQX0VYUF9GT1JfRkxJQ0tFUikgeworCQkvKiBleHBvc3VyZSBpcyBub3cgaGlnaCBlbm91Z2ggdG8gc3dpdGNoCisJCSAgIGZsaWNrZXIgY29udHJvbCBiYWNrIG9uICovCisJCXNldF9mbGlja2VyKGdzcGNhX2RldiwgMSwgMSk7CisJfQorfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGNhbSAqY2FtOworCisJcmVzZXRfY2FtZXJhX3BhcmFtcyhnc3BjYV9kZXYpOworCisJUERFQlVHKERfUFJPQkUsICJjcGlhIENQaUEgY2FtZXJhIGRldGVjdGVkICh2aWQvcGlkIDB4JTA0WDoweCUwNFgpIiwKKwkgICAgICAgaWQtPmlkVmVuZG9yLCBpZC0+aWRQcm9kdWN0KTsKKworCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKKwljYW0tPmNhbV9tb2RlID0gbW9kZTsKKwljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUobW9kZSk7CisKKwlzZF9zZXRmcmVxKGdzcGNhX2RldiwgRlJFUV9ERUYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tIHN0YXJ0IHRoZSBjYW1lcmEgLS0gKi8KK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcHJpdiwgcmV0OworCisJLyogU3RhcnQgdGhlIGNhbWVyYSBpbiBsb3cgcG93ZXIgbW9kZSAqLworCWlmIChnb3RvX2xvd19wb3dlcihnc3BjYV9kZXYpKSB7CisJCWlmIChzZC0+cGFyYW1zLnN0YXR1cy5zeXN0ZW1TdGF0ZSAhPSBXQVJNX0JPT1RfU1RBVEUpIHsKKwkJCVBERUJVRyhEX0VSUiwgInVuZXhwZWN0ZWQgc3lzdGVtc3RhdGU6ICUwMngiLAorCQkJICAgICAgIHNkLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlKTsKKwkJCXByaW50c3RhdHVzKCZzZC0+cGFyYW1zKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJLyogRklYTUU6IHRoaXMgaXMganVzdCBkaXJ0eSB0cmlhbCBhbmQgZXJyb3IgKi8KKwkJcmV0ID0gZ290b19oaWdoX3Bvd2VyKGdzcGNhX2Rldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfRGlzY2FyZEZyYW1lLAorCQkJCSAwLCAwLCAwLCAwKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gZ290b19sb3dfcG93ZXIoZ3NwY2FfZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyogcHJvY2VkdXJlIGRlc2NyaWJlZCBpbiBkZXZlbG9wZXIncyBndWlkZSBwMy0yOCAqLworCisJLyogQ2hlY2sgdGhlIGZpcm13YXJlIHZlcnNpb24uICovCisJc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbiA9IDA7CisJZ2V0X3ZlcnNpb25faW5mb3JtYXRpb24oZ3NwY2FfZGV2KTsKKwlpZiAoc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbiAhPSAxKSB7CisJCVBERUJVRyhEX0VSUiwgIm9ubHkgZmlybXdhcmUgdmVyc2lvbiAxIGlzIHN1cHBvcnRlZCAoZ290OiAlZCkiLAorCQkgICAgICAgc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIEEgYnVnIGluIGZpcm13YXJlIDEtMDIgbGltaXRzIGdhaW5Nb2RlIHRvIDIgKi8KKwlpZiAoc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24gPD0gMiAmJgorCSAgICBzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW5Nb2RlID4gMikgeworCQlzZC0+cGFyYW1zLmV4cG9zdXJlLmdhaW5Nb2RlID0gMjsKKwl9CisKKwkvKiBzZXQgUVgzIGRldGVjdGVkIGZsYWcgKi8KKwlzZC0+cGFyYW1zLnF4My5xeDNfZGV0ZWN0ZWQgPSAoc2QtPnBhcmFtcy5wbnBJRC52ZW5kb3IgPT0gMHgwODEzICYmCisJCQkJICAgICAgIHNkLT5wYXJhbXMucG5wSUQucHJvZHVjdCA9PSAweDAwMDEpOworCisJLyogVGhlIGZhdGFsIGVycm9yIGNoZWNraW5nIHNob3VsZCBiZSBkb25lIGFmdGVyCisJICogdGhlIGNhbWVyYSBwb3dlcnMgdXAgKGRldmVsb3BlcidzIGd1aWRlIHAgMy0zOCkgKi8KKworCS8qIFNldCBzdHJlYW1TdGF0ZSBiZWZvcmUgdHJhbnNpdGlvbiB0byBoaWdoIHBvd2VyIHRvIGF2b2lkIGJ1ZworCSAqIGluIGZpcm13YXJlIDEtMDIgKi8KKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX01vZGlmeUNhbWVyYVN0YXR1cywKKwkJCSBTVFJFQU1TVEFURSwgMCwgU1RSRUFNX05PVF9SRUFEWSwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEdvdG9IaVBvd2VyICovCisJcmV0ID0gZ290b19oaWdoX3Bvd2VyKGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIENoZWNrIHRoZSBjYW1lcmEgc3RhdHVzICovCisJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXMsIDAsIDAsIDAsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoc2QtPnBhcmFtcy5zdGF0dXMuZmF0YWxFcnJvcikgeworCQlQREVCVUcoRF9FUlIsICJmYXRhbF9lcnJvcjogJTA0eCwgdnBfc3RhdHVzOiAlMDR4IiwKKwkJICAgICAgIHNkLT5wYXJhbXMuc3RhdHVzLmZhdGFsRXJyb3IsCisJCSAgICAgICBzZC0+cGFyYW1zLnN0YXR1cy52cFN0YXR1cyk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIFZQVmVyc2lvbiBjYW4ndCBiZSByZXRyaWV2ZWQgYmVmb3JlIHRoZSBjYW1lcmEgaXMgaW4gSGlQb3dlciwKKwkgKiBzbyBnZXQgaXQgaGVyZSBpbnN0ZWFkIG9mIGluIGdldF92ZXJzaW9uX2luZm9ybWF0aW9uLiAqLworCXJldCA9IGRvX2NvbW1hbmQoZ3NwY2FfZGV2LCBDUElBX0NPTU1BTkRfR2V0VlBWZXJzaW9uLCAwLCAwLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogRGV0ZXJtaW5lIHZpZGVvIG1vZGUgc2V0dGluZ3MgKi8KKwlzZC0+cGFyYW1zLnN0cmVhbVN0YXJ0TGluZSA9IDEyMDsKKworCXByaXYgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKKwlpZiAocHJpdiAmIDB4MDEpIHsgLyogY3JvcCAqLworCQlzZC0+cGFyYW1zLnJvaS5jb2xTdGFydCA9IDI7CisJCXNkLT5wYXJhbXMucm9pLnJvd1N0YXJ0ID0gNjsKKwl9IGVsc2UgeworCQlzZC0+cGFyYW1zLnJvaS5jb2xTdGFydCA9IDA7CisJCXNkLT5wYXJhbXMucm9pLnJvd1N0YXJ0ID0gMDsKKwl9CisKKwlpZiAocHJpdiAmIDB4MDIpIHsgLyogcXVhcnRlciAqLworCQlzZC0+cGFyYW1zLmZvcm1hdC52aWRlb1NpemUgPSBWSURFT1NJWkVfUUNJRjsKKwkJc2QtPnBhcmFtcy5yb2kuY29sU3RhcnQgLz0gMjsKKwkJc2QtPnBhcmFtcy5yb2kucm93U3RhcnQgLz0gMjsKKwkJc2QtPnBhcmFtcy5zdHJlYW1TdGFydExpbmUgLz0gMjsKKwl9IGVsc2UKKwkJc2QtPnBhcmFtcy5mb3JtYXQudmlkZW9TaXplID0gVklERU9TSVpFX0NJRjsKKworCXNkLT5wYXJhbXMucm9pLmNvbEVuZCA9IHNkLT5wYXJhbXMucm9pLmNvbFN0YXJ0ICsKKwkJCQkoZ3NwY2FfZGV2LT53aWR0aCA+PiAzKTsKKwlzZC0+cGFyYW1zLnJvaS5yb3dFbmQgPSBzZC0+cGFyYW1zLnJvaS5yb3dTdGFydCArCisJCQkJKGdzcGNhX2Rldi0+aGVpZ2h0ID4+IDIpOworCisJLyogQW5kIG5vdyBzZXQgdGhlIGNhbWVyYSB0byBhIGtub3duIHN0YXRlICovCisJcmV0ID0gZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9TZXRHcmFiTW9kZSwKKwkJCSBDUElBX0dSQUJfQ09OVElORU9VUywgMCwgMCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwkvKiBXZSBzdGFydCB3aXRoIGNvbXByZXNzaW9uIGRpc2FibGVkLCBhcyB3ZSBuZWVkIG9uZSB1bmNvbXByZXNzZWQKKwkgICBmcmFtZSB0byBoYW5kbGUgbGF0ZXIgY29tcHJlc3NlZCBmcmFtZXMgKi8KKwlyZXQgPSBkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uLAorCQkJIENQSUFfQ09NUFJFU1NJT05fTk9ORSwKKwkJCSBOT19ERUNJTUFUSU9OLCAwLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0Y29tcHJlc3Npb250YXJnZXQoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0Y29sb3VycGFyYW1zKGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBjb21tYW5kX3NldGZvcm1hdChnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gY29tbWFuZF9zZXR5dXZ0cmVzaChnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gY29tbWFuZF9zZXRlY3B0aW1pbmcoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0Y29tcHJlc3Npb25wYXJhbXMoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0Y29sb3VyYmFsYW5jZShnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gY29tbWFuZF9zZXRzZW5zb3JmcHMoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0YXBjb3IoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0ZmxpY2tlcmN0cmwoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGNvbW1hbmRfc2V0dmxvZmZzZXQoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogU3RhcnQgc3RyZWFtICovCisJcmV0ID0gY29tbWFuZF9yZXN1bWUoZ3NwY2FfZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogV2FpdCA2IGZyYW1lcyBiZWZvcmUgdHVybmluZyBjb21wcmVzc2lvbiBvbiBmb3IgdGhlIHNlbnNvciB0byBnZXQKKwkgICBhbGwgc2V0dGluZ3MgYW5kIEFFQy9BQ0IgdG8gc2V0dGxlICovCisJc2QtPmZpcnN0X2ZyYW1lID0gNjsKKwlzZC0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOworCXNkLT5leHBvc3VyZV9jb3VudCA9IDA7CisJYXRvbWljX3NldCgmc2QtPmNhbV9leHBvc3VyZSwgMCk7CisJYXRvbWljX3NldCgmc2QtPmZwcywgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWNvbW1hbmRfcGF1c2UoZ3NwY2FfZGV2KTsKKworCS8qIHNhdmUgY2FtZXJhIHN0YXRlIGZvciBsYXRlciBvcGVuIChkZXZlbG9wZXJzIGd1aWRlIGNoIDMuNS4zKSAqLworCXNhdmVfY2FtZXJhX3N0YXRlKGdzcGNhX2Rldik7CisKKwkvKiBHb3RvTG9Qb3dlciAqLworCWdvdG9fbG93X3Bvd2VyKGdzcGNhX2Rldik7CisKKwkvKiBVcGRhdGUgdGhlIGNhbWVyYSBzdGF0dXMgKi8KKwlkb19jb21tYW5kKGdzcGNhX2RldiwgQ1BJQV9DT01NQU5EX0dldENhbWVyYVN0YXR1cywgMCwgMCwgMCwgMCk7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKworCS8qIFN0YXJ0IC8gU3RvcCB0aGUgY2FtZXJhIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgdGFsa2luZyB0bworCSAgIGEgc3VwcG9ydGVkIGNhbWVyYSwgYW5kIHRvIGdldCBzb21lIGluZm9ybWF0aW9uIGZyb20gaXQKKwkgICB0byBwcmludC4gKi8KKwlyZXQgPSBzZF9zdGFydChnc3BjYV9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzZF9zdG9wTihnc3BjYV9kZXYpOworCisJUERFQlVHKERfUFJPQkUsICJDUElBIFZlcnNpb246ICAgICAgICAgICAgICVkLiUwMmQgKCVkLiVkKSIsCisJCQlzZC0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVWZXJzaW9uLAorCQkJc2QtPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24sCisJCQlzZC0+cGFyYW1zLnZlcnNpb24udmNWZXJzaW9uLAorCQkJc2QtPnBhcmFtcy52ZXJzaW9uLnZjUmV2aXNpb24pOworCVBERUJVRyhEX1BST0JFLCAiQ1BJQSBQblAtSUQ6ICAgICAgICAgICAgICAlMDR4OiUwNHg6JTA0eCIsCisJCQlzZC0+cGFyYW1zLnBucElELnZlbmRvciwgc2QtPnBhcmFtcy5wbnBJRC5wcm9kdWN0LAorCQkJc2QtPnBhcmFtcy5wbnBJRC5kZXZpY2VSZXZpc2lvbik7CisJUERFQlVHKERfUFJPQkUsICJWUC1WZXJzaW9uOiAgICAgICAgICAgICAgICVkLiVkICUwNHgiLAorCQkJc2QtPnBhcmFtcy52cFZlcnNpb24udnBWZXJzaW9uLAorCQkJc2QtPnBhcmFtcy52cFZlcnNpb24udnBSZXZpc2lvbiwKKwkJCXNkLT5wYXJhbXMudnBWZXJzaW9uLmNhbWVyYUhlYWRJRCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsCisJCQlpbnQgbGVuKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCS8qIENoZWNrIGZvciBTT0YgKi8KKwlpZiAobGVuID49IDY0ICYmCisJICAgIGRhdGFbMF0gPT0gTUFHSUNfMCAmJiBkYXRhWzFdID09IE1BR0lDXzEgJiYKKwkgICAgZGF0YVsxNl0gPT0gc2QtPnBhcmFtcy5mb3JtYXQudmlkZW9TaXplICYmCisJICAgIGRhdGFbMTddID09IHNkLT5wYXJhbXMuZm9ybWF0LnN1YlNhbXBsZSAmJgorCSAgICBkYXRhWzE4XSA9PSBzZC0+cGFyYW1zLmZvcm1hdC55dXZPcmRlciAmJgorCSAgICBkYXRhWzI0XSA9PSBzZC0+cGFyYW1zLnJvaS5jb2xTdGFydCAmJgorCSAgICBkYXRhWzI1XSA9PSBzZC0+cGFyYW1zLnJvaS5jb2xFbmQgJiYKKwkgICAgZGF0YVsyNl0gPT0gc2QtPnBhcmFtcy5yb2kucm93U3RhcnQgJiYKKwkgICAgZGF0YVsyN10gPT0gc2QtPnBhcmFtcy5yb2kucm93RW5kKSB7CisJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUgPSBnc3BjYV9nZXRfaV9mcmFtZShnc3BjYV9kZXYpOworCisJCWF0b21pY19zZXQoJnNkLT5jYW1fZXhwb3N1cmUsIGRhdGFbMzldICogMik7CisJCWF0b21pY19zZXQoJnNkLT5mcHMsIGRhdGFbNDFdKTsKKworCQlpZiAoZnJhbWUgPT0gTlVMTCkgeworCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBDaGVjayBmb3IgcHJvcGVyIEVPRiBmb3IgbGFzdCBmcmFtZSAqLworCQlpZiAoKGZyYW1lLT5kYXRhX2VuZCAtIGZyYW1lLT5kYXRhKSA+IDQgJiYKKwkJICAgIGZyYW1lLT5kYXRhX2VuZFstNF0gPT0gMHhmZiAmJgorCQkgICAgZnJhbWUtPmRhdGFfZW5kWy0zXSA9PSAweGZmICYmCisJCSAgICBmcmFtZS0+ZGF0YV9lbmRbLTJdID09IDB4ZmYgJiYKKwkJICAgIGZyYW1lLT5kYXRhX2VuZFstMV0gPT0gMHhmZikKKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULAorCQkJCQkJTlVMTCwgMCk7CisKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBkYXRhLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBkYXRhLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBzZF9kcV9jYWxsYmFjayhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJLyogU2V0IHRoZSBub3JtYWwgY29tcHJlc3Npb24gc2V0dGluZ3Mgb25jZSB3ZSBoYXZlIGNhcHR1cmVkIGEKKwkgICBmZXcgdW5jb21wcmVzc2VkIGZyYW1lcyAoYW5kIEFFQyBoYXMgaG9wZWZ1bGx5IHNldHRsZWQpICovCisJaWYgKHNkLT5maXJzdF9mcmFtZSkgeworCQlzZC0+Zmlyc3RfZnJhbWUtLTsKKwkJaWYgKHNkLT5maXJzdF9mcmFtZSA9PSAwKQorCQkJY29tbWFuZF9zZXRjb21wcmVzc2lvbihnc3BjYV9kZXYpOworCX0KKworCS8qIFN3aXRjaCBmbGlja2VyIGNvbnRyb2wgYmFjayBvbiBpZiBpdCBnb3QgdHVybmVkIG9mZiAqLworCXJlc3RhcnRfZmxpY2tlcihnc3BjYV9kZXYpOworCisJLyogSWYgQUVDIGlzIGVuYWJsZWQsIG1vbml0b3IgdGhlIGV4cG9zdXJlIGFuZAorCSAgIGFkanVzdCB0aGUgc2Vuc29yIGZyYW1lIHJhdGUgaWYgbmVlZGVkICovCisJaWYgKHNkLT5wYXJhbXMuZXhwb3N1cmUuZXhwTW9kZSA9PSAyKQorCQltb25pdG9yX2V4cG9zdXJlKGdzcGNhX2Rldik7CisKKwkvKiBVcGRhdGUgb3VyIGtub3dsZWRnZSBvZiB0aGUgY2FtZXJhIHN0YXRlICovCisJZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9HZXRFeHBvc3VyZSwgMCwgMCwgMCwgMCk7CisJaWYgKHNkLT5wYXJhbXMucXgzLnF4M19kZXRlY3RlZCkKKwkJZG9fY29tbWFuZChnc3BjYV9kZXYsIENQSUFfQ09NTUFORF9SZWFkTUNQb3J0cywgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKworCXNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MgPSB2YWw7CisJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5hbGxvd2FibGVPdmVyRXhwb3N1cmUgPQorCQlmaW5kX292ZXJfZXhwb3N1cmUoc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyk7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CisJCXJldCA9IGNvbW1hbmRfc2V0Y29sb3VycGFyYW1zKGdzcGNhX2Rldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gY29tbWFuZF9zZXRmbGlja2VyY3RybChnc3BjYV9kZXYpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5jb250cmFzdCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXJldHVybiBjb21tYW5kX3NldGNvbG91cnBhcmFtcyhnc3BjYV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5jb250cmFzdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRzYXR1cmF0aW9uKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5wYXJhbXMuY29sb3VyUGFyYW1zLnNhdHVyYXRpb24gPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlyZXR1cm4gY29tbWFuZF9zZXRjb2xvdXJwYXJhbXMoZ3NwY2FfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldHNhdHVyYXRpb24oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+cGFyYW1zLmNvbG91clBhcmFtcy5zYXR1cmF0aW9uOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBvbjsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAwOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfRElTQUJMRUQgKi8KKwkJb24gPSAwOworCQlicmVhazsKKwljYXNlIDE6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV81MEhaICovCisJCW9uID0gMTsKKwkJc2QtPm1haW5zRnJlcSA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFogKi8KKwkJb24gPSAxOworCQlzZC0+bWFpbnNGcmVxID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc2QtPmZyZXEgPSB2YWw7CisJc2QtPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wID0KKwkJZmxpY2tlcl9qdW1wc1tzZC0+bWFpbnNGcmVxXQorCQkJICAgICBbc2QtPnBhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGVdCisJCQkgICAgIFtzZC0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yXTsKKworCXJldHVybiBzZXRfZmxpY2tlcihnc3BjYV9kZXYsIG9uLCBnc3BjYV9kZXYtPnN0cmVhbWluZyk7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5mcmVxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGNvbXB0YXJnZXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPnBhcmFtcy5jb21wcmVzc2lvblRhcmdldC5mclRhcmdldGluZyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXJldHVybiBjb21tYW5kX3NldGNvbXByZXNzaW9udGFyZ2V0KGdzcGNhX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRjb21wdGFyZ2V0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPnBhcmFtcy5jb21wcmVzc2lvblRhcmdldC5mclRhcmdldGluZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9xdWVyeW1lbnUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfcXVlcnltZW51ICptZW51KQoreworCXN3aXRjaCAobWVudS0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZOgorCQlzd2l0Y2ggKG1lbnUtPmluZGV4KSB7CisJCWNhc2UgMDoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZX0RJU0FCTEVEICovCisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIk5vRmxpa2VyIik7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAxOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNTBIWiAqLworCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICI1MCBIeiIpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgMjoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFogKi8KKwkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNjAgSHoiKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09NUF9UQVJHRVQ6CisJCXN3aXRjaCAobWVudS0+aW5kZXgpIHsKKwkJY2FzZSBDUElBX0NPTVBSRVNTSU9OX1RBUkdFVF9RVUFMSVRZOgorCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICJRdWFsaXR5Iik7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSBDUElBX0NPTVBSRVNTSU9OX1RBUkdFVF9GUkFNRVJBVEU6CisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIkZyYW1lcmF0ZSIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyA9IHNkX2N0cmxzLAorCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5pbml0ID0gc2RfaW5pdCwKKwkuc3RhcnQgPSBzZF9zdGFydCwKKwkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuZHFfY2FsbGJhY2sgPSBzZF9kcV9jYWxsYmFjaywKKwkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKKwkucXVlcnltZW51ID0gc2RfcXVlcnltZW51LAorfTsKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA1NTMsIDB4MDAwMil9LAorCXtVU0JfREVWSUNFKDB4MDgxMywgMHgwMDAxKX0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKKworLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJCVRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSA9IGRldmljZV90YWJsZSwKKwkucHJvYmUgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgPSBnc3BjYV9yZXN1bWUsCisjZW5kaWYKK307CisKKy8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KK3N0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMKaW5kZXggZmRmNGMwZS4uZWNkNGQ3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZXRvbXMuYwpAQCAtNTIsNyArNTIsNyBAQAogc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtODUxLDcgKzg1MSw3IEBACiB9CiAKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgPSBzZF9jdHJscywKIAkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dsODYwL2dsODYwLmMKaW5kZXggNDg3OGM4Zi4uOWU0MjQ3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nbDg2MC9nbDg2MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ2w4NjAvZ2w4NjAuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT0gc3VkLWRyaXZlciBzdHJ1Y3R1cmUgaW5pdGlhbGlzYXRpb24gPT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19taTEzMjAgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19taTEzMjAgPSB7CiAJLm5hbWUgICAgICAgID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzICAgICAgID0gc2RfY3RybHNfbWkxMzIwLAogCS5uY3RybHMgICAgICA9IEdMODYwX05DVFJMUywKQEAgLTE3NCw3ICsxNzQsNyBAQAogCS5kcV9jYWxsYmFjayA9IHNkX2NhbGxiYWNrLAogfTsKIAotc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2NfbWkyMDIwID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2NfbWkyMDIwID0gewogCS5uYW1lICAgICAgICA9IE1PRFVMRV9OQU1FLAogCS5jdHJscyAgICAgICA9IHNkX2N0cmxzX21pMjAyMCwKIAkubmN0cmxzICAgICAgPSBHTDg2MF9OQ1RSTFMsCkBAIC0xODcsNyArMTg3LDcgQEAKIAkuZHFfY2FsbGJhY2sgPSBzZF9jYWxsYmFjaywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX21pMjAyMGIgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19taTIwMjBiID0gewogCS5uYW1lICAgICAgICA9IE1PRFVMRV9OQU1FLAogCS5jdHJscyAgICAgICA9IHNkX2N0cmxzX21pMjAyMGIsCiAJLm5jdHJscyAgICAgID0gR0w4NjBfTkNUUkxTLApAQCAtMjAwLDcgKzIwMCw3IEBACiAJLmRxX2NhbGxiYWNrID0gc2RfY2FsbGJhY2ssCiB9OwogCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19vdjI2NDAgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzY19vdjI2NDAgPSB7CiAJLm5hbWUgICAgICAgID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzICAgICAgID0gc2RfY3RybHNfb3YyNjQwLAogCS5uY3RybHMgICAgICA9IEdMODYwX05DVFJMUywKQEAgLTIxMyw3ICsyMTMsNyBAQAogCS5kcV9jYWxsYmFjayA9IHNkX2NhbGxiYWNrLAogfTsKIAotc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2Nfb3Y5NjU1ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2Nfb3Y5NjU1ID0gewogCS5uYW1lICAgICAgICA9IE1PRFVMRV9OQU1FLAogCS5jdHJscyAgICAgICA9IHNkX2N0cmxzX292OTY1NSwKIAkubmN0cmxzICAgICAgPSBHTDg2MF9OQ1RSTFMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKaW5kZXggYmQ2MjE0ZC4uMjIyYWY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYwpAQCAtMyw2ICszLDkgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBKZWFuLUZyYW5jb2lzIE1vaW5lIChodHRwOi8vbW9pbmVqZi5mcmVlLmZyKQogICoKKyAqIENhbWVyYSBidXR0b24gaW5wdXQgaGFuZGxpbmcgYnkgTcOhcnRvbiBOw6ltZXRoCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBNw6FydG9uIE7DqW1ldGggPG5tMTI3QGZyZWVtYWlsLmh1PgorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKICAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKQEAgLTM3LDYgKzQwLDExIEBACiAKICNpbmNsdWRlICJnc3BjYS5oIgogCisjaWZkZWYgQ09ORklHX0lOUFVUCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvaW5wdXQuaD4KKyNlbmRpZgorCiAvKiBnbG9iYWwgdmFsdWVzICovCiAjZGVmaW5lIERFRl9OVVJCUyAzCQkvKiBkZWZhdWx0IG51bWJlciBvZiBVUkJzICovCiAjaWYgREVGX05VUkJTID4gTUFYX05VUkJTCkBAIC00Nyw3ICs1NSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkdTUENBIFVTQiBDYW1lcmEgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDgsIDApCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OX05VTUJFUglLRVJORUxfVkVSU0lPTigyLCA5LCAwKQogCiAjaWZkZWYgR1NQQ0FfREVCVUcKIGludCBnc3BjYV9kZWJ1ZyA9IERfRVJSIHwgRF9QUk9CRTsKQEAgLTEwNCwxNSArMTEyLDE4NSBAQAogCS5jbG9zZQkJPSBnc3BjYV92bV9jbG9zZSwKIH07CiAKKy8qCisgKiBJbnB1dCBhbmQgaW50ZXJydXB0IGVuZHBvaW50IGhhbmRsaW5nIGZ1bmN0aW9ucworICovCisjaWZkZWYgQ09ORklHX0lOUFVUCitzdGF0aWMgdm9pZCBpbnRfaXJxKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSAoc3RydWN0IGdzcGNhX2RldiAqKSB1cmItPmNvbnRleHQ7CisJaW50IHJldDsKKworCXJldCA9IHVyYi0+c3RhdHVzOworCXN3aXRjaCAocmV0KSB7CisJY2FzZSAwOgorCQlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5pbnRfcGt0X3NjYW4oZ3NwY2FfZGV2LAorCQkgICAgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCkgPCAwKSB7CisJCQlQREVCVUcoRF9FUlIsICJVbmtub3duIHBhY2tldCByZWNlaXZlZCIpOworCQl9CisJCWJyZWFrOworCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PREVWOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogU3RvcCBpcyByZXF1ZXN0ZWQgZWl0aGVyIGJ5IHNvZnR3YXJlIG9yIGhhcmR3YXJlIGlzIGdvbmUsCisJCSAqIGtlZXAgdGhlIHJldCB2YWx1ZSBub24temVybyBhbmQgZG9uJ3QgcmVzdWJtaXQgbGF0ZXIuCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCVBERUJVRyhEX0VSUiwgIlVSQiBlcnJvciAlaSwgcmVzdWJtaXR0aW5nIiwgdXJiLT5zdGF0dXMpOworCQl1cmItPnN0YXR1cyA9IDA7CisJCXJldCA9IDA7CisJfQorCisJaWYgKHJldCA9PSAwKSB7CisJCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXQgPCAwKQorCQkJUERFQlVHKERfRVJSLCAiUmVzdWJtaXQgVVJCIGZhaWxlZCB3aXRoIGVycm9yICVpIiwgcmV0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ3NwY2FfaW5wdXRfY29ubmVjdChzdHJ1Y3QgZ3NwY2FfZGV2ICpkZXYpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCWludCBlcnIgPSAwOworCisJZGV2LT5pbnB1dF9kZXYgPSBOVUxMOworCWlmIChkZXYtPnNkX2Rlc2MtPmludF9wa3Rfc2NhbiB8fCBkZXYtPnNkX2Rlc2MtPm90aGVyX2lucHV0KSAgeworCQlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwkJaWYgKCFpbnB1dF9kZXYpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQl1c2JfbWFrZV9wYXRoKGRldi0+ZGV2LCBkZXYtPnBoeXMsIHNpemVvZihkZXYtPnBoeXMpKTsKKwkJc3RybGNhdChkZXYtPnBoeXMsICIvaW5wdXQwIiwgc2l6ZW9mKGRldi0+cGh5cykpOworCisJCWlucHV0X2Rldi0+bmFtZSA9IGRldi0+c2RfZGVzYy0+bmFtZTsKKwkJaW5wdXRfZGV2LT5waHlzID0gZGV2LT5waHlzOworCisJCXVzYl90b19pbnB1dF9pZChkZXYtPmRldiwgJmlucHV0X2Rldi0+aWQpOworCisJCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpOworCQlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChLRVlfQ0FNRVJBKV0gPSBCSVRfTUFTSyhLRVlfQ0FNRVJBKTsKKwkJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmRldi0+ZGV2LT5kZXY7CisKKwkJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJCWlmIChlcnIpIHsKKwkJCVBERUJVRyhEX0VSUiwgIklucHV0IGRldmljZSByZWdpc3RyYXRpb24gZmFpbGVkICIKKwkJCQkid2l0aCBlcnJvciAlaSIsIGVycik7CisJCQlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSBOVUxMOworCQkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwkJfSBlbHNlIHsKKwkJCWRldi0+aW5wdXRfZGV2ID0gaW5wdXRfZGV2OworCQl9CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhbGxvY19hbmRfc3VibWl0X2ludF91cmIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJICBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwKQoreworCXVuc2lnbmVkIGludCBidWZmZXJfbGVuOworCWludCBpbnRlcnZhbDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwl2b2lkICpidWZmZXIgPSBOVUxMOworCWludCByZXQgPSAtRUlOVkFMOworCisJYnVmZmVyX2xlbiA9IGVwLT53TWF4UGFja2V0U2l6ZTsKKwlpbnRlcnZhbCA9IGVwLT5iSW50ZXJ2YWw7CisJUERFQlVHKERfUFJPQkUsICJmb3VuZCBpbnQgaW4gZW5kcG9pbnQ6IDB4JXgsICIKKwkJImJ1ZmZlcl9sZW49JXUsIGludGVydmFsPSV1IiwKKwkJZXAtPmJFbmRwb2ludEFkZHJlc3MsIGJ1ZmZlcl9sZW4sIGludGVydmFsKTsKKworCWRldiA9IGdzcGNhX2Rldi0+ZGV2OworCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVyYikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCWJ1ZmZlciA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCBlcC0+d01heFBhY2tldFNpemUsCisJCQkJR0ZQX0tFUk5FTCwgJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX2J1ZmZlcjsKKwl9CisJdXNiX2ZpbGxfaW50X3VyYih1cmIsIGRldiwKKwkJdXNiX3JjdmludHBpcGUoZGV2LCBlcC0+YkVuZHBvaW50QWRkcmVzcyksCisJCWJ1ZmZlciwgYnVmZmVyX2xlbiwKKwkJaW50X2lycSwgKHZvaWQgKilnc3BjYV9kZXYsIGludGVydmFsKTsKKwlnc3BjYV9kZXYtPmludF91cmIgPSB1cmI7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICJzdWJtaXQgVVJCIGZhaWxlZCB3aXRoIGVycm9yICVpIiwgcmV0KTsKKwkJZ290byBlcnJvcl9zdWJtaXQ7CisJfQorCXJldHVybiByZXQ7CisKK2Vycm9yX3N1Ym1pdDoKKwl1c2JfYnVmZmVyX2ZyZWUoZGV2LAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQl1cmItPnRyYW5zZmVyX2RtYSk7CitlcnJvcl9idWZmZXI6CisJdXNiX2ZyZWVfdXJiKHVyYik7CitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBnc3BjYV9pbnB1dF9jcmVhdGVfdXJiKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRmX2Rlc2M7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcDsKKwlpbnQgaTsKKworCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPmludF9wa3Rfc2NhbikgIHsKKwkJaW50ZiA9IHVzYl9pZm51bV90b19pZihnc3BjYV9kZXYtPmRldiwgZ3NwY2FfZGV2LT5pZmFjZSk7CisJCWludGZfZGVzYyA9IGludGYtPmN1cl9hbHRzZXR0aW5nOworCQlmb3IgKGkgPSAwOyBpIDwgaW50Zl9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykgeworCQkJZXAgPSAmaW50Zl9kZXNjLT5lbmRwb2ludFtpXS5kZXNjOworCQkJaWYgKHVzYl9lbmRwb2ludF9kaXJfaW4oZXApICYmCisJCQkgICAgdXNiX2VuZHBvaW50X3hmZXJfaW50KGVwKSkgeworCisJCQkJYWxsb2NfYW5kX3N1Ym1pdF9pbnRfdXJiKGdzcGNhX2RldiwgZXApOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBnc3BjYV9pbnB1dF9kZXN0cm95X3VyYihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHVyYiAqdXJiOworCisJdXJiID0gZ3NwY2FfZGV2LT5pbnRfdXJiOworCWlmICh1cmIpIHsKKwkJZ3NwY2FfZGV2LT5pbnRfdXJiID0gTlVMTDsKKwkJdXNiX2tpbGxfdXJiKHVyYik7CisJCXVzYl9idWZmZXJfZnJlZShnc3BjYV9kZXYtPmRldiwKKwkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJdXJiLT50cmFuc2Zlcl9kbWEpOworCQl1c2JfZnJlZV91cmIodXJiKTsKKwl9Cit9CisjZWxzZQorI2RlZmluZSBnc3BjYV9pbnB1dF9jb25uZWN0KGdzcGNhX2RldikJCTAKKyNkZWZpbmUgZ3NwY2FfaW5wdXRfY3JlYXRlX3VyYihnc3BjYV9kZXYpCisjZGVmaW5lIGdzcGNhX2lucHV0X2Rlc3Ryb3lfdXJiKGdzcGNhX2RldikKKyNlbmRpZgorCiAvKiBnZXQgdGhlIGN1cnJlbnQgaW5wdXQgZnJhbWUgYnVmZmVyICovCiBzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmdzcGNhX2dldF9pX2ZyYW1lKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOwotCWludCBpOwogCi0JaSA9IGdzcGNhX2Rldi0+ZnJfaTsKLQlpID0gZ3NwY2FfZGV2LT5mcl9xdWV1ZVtpXTsKLQlmcmFtZSA9ICZnc3BjYV9kZXYtPmZyYW1lW2ldOworCWZyYW1lID0gZ3NwY2FfZGV2LT5jdXJfZnJhbWU7CiAJaWYgKChmcmFtZS0+djRsMl9idWYuZmxhZ3MgJiBCVUZfQUxMX0ZMQUdTKQogCQkJCSE9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEKQogCQlyZXR1cm4gTlVMTDsKQEAgLTQ4NiwxMSArNjY0LDEzIEBACiAJCQlpLCBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKIAlnc3BjYV9kZXYtPmFsdCA9IGk7CQkvKiBtZW1vcml6ZSB0aGUgY3VycmVudCBhbHQgc2V0dGluZyAqLwogCWlmIChnc3BjYV9kZXYtPm5iYWx0ID4gMSkgeworCQlnc3BjYV9pbnB1dF9kZXN0cm95X3VyYihnc3BjYV9kZXYpOwogCQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShnc3BjYV9kZXYtPmRldiwgZ3NwY2FfZGV2LT5pZmFjZSwgaSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQllcnIoInNldCBhbHQgJWQgZXJyICVkIiwgaSwgcmV0KTsKLQkJCXJldHVybiBOVUxMOworCQkJZXAgPSBOVUxMOwogCQl9CisJCWdzcGNhX2lucHV0X2NyZWF0ZV91cmIoZ3NwY2FfZGV2KTsKIAl9CiAJcmV0dXJuIGVwOwogfQpAQCAtNTM0LDI2ICs3MTQsMjIgQEAKIAkJCW51cmJzID0gMTsKIAl9CiAKLQlnc3BjYV9kZXYtPm51cmJzID0gbnVyYnM7CiAJZm9yIChuID0gMDsgbiA8IG51cmJzOyBuKyspIHsKIAkJdXJiID0gdXNiX2FsbG9jX3VyYihucGt0LCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF1cmIpIHsKIAkJCWVycigidXNiX2FsbG9jX3VyYiBmYWlsZWQiKTsKLQkJCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KKwkJZ3NwY2FfZGV2LT51cmJbbl0gPSB1cmI7CiAJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyhnc3BjYV9kZXYtPmRldiwKIAkJCQkJCWJzaXplLAogCQkJCQkJR0ZQX0tFUk5FTCwKIAkJCQkJCSZ1cmItPnRyYW5zZmVyX2RtYSk7CiAKIAkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKLQkJCXVzYl9mcmVlX3VyYih1cmIpOwotCQkJZXJyKCJ1c2JfYnVmZmVyX3VyYiBmYWlsZWQiKTsKLQkJCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOworCQkJZXJyKCJ1c2JfYnVmZmVyX2FsbG9jIGZhaWxlZCIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJZ3NwY2FfZGV2LT51cmJbbl0gPSB1cmI7CiAJCXVyYi0+ZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJCXVyYi0+Y29udGV4dCA9IGdzcGNhX2RldjsKIAkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gYnNpemU7CkBAIC01ODUsNiArNzYxLDcgQEAKIHN0YXRpYyBpbnQgZ3NwY2FfaW5pdF90cmFuc2ZlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwlzdHJ1Y3QgdXJiICp1cmI7CiAJaW50IG4sIHJldDsKIAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQpAQCAtNTk1LDYgKzc3Miw4IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWdzcGNhX2Rldi0+dXNiX2VyciA9IDA7CisKIAkvKiBzZXQgdGhlIGhpZ2hlciBhbHRlcm5hdGUgc2V0dGluZyBhbmQKIAkgKiBsb29wIHVudGlsIHVyYiBzdWJtaXQgc3VjY2VlZHMgKi8KIAlpZiAoZ3NwY2FfZGV2LT5jYW0ucmV2ZXJzZV9hbHRzKQpAQCAtNjEzLDEwICs3OTIsMTUgQEAKIAkJZ290byBvdXQ7CiAJfQogCWZvciAoOzspIHsKLQkJUERFQlVHKERfU1RSRUFNLCAiaW5pdCB0cmFuc2ZlciBhbHQgJWQiLCBnc3BjYV9kZXYtPmFsdCk7Ci0JCXJldCA9IGNyZWF0ZV91cmJzKGdzcGNhX2RldiwgZXApOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OworCQlpZiAoIWdzcGNhX2Rldi0+Y2FtLm5vX3VyYl9jcmVhdGUpIHsKKwkJCVBERUJVRyhEX1NUUkVBTSwgImluaXQgdHJhbnNmZXIgYWx0ICVkIiwKKwkJCQlnc3BjYV9kZXYtPmFsdCk7CisJCQlyZXQgPSBjcmVhdGVfdXJicyhnc3BjYV9kZXYsIGVwKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJZGVzdHJveV91cmJzKGdzcGNhX2Rldik7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KIAogCQkvKiBjbGVhciB0aGUgYnVsayBlbmRwb2ludCAqLwogCQlpZiAoZ3NwY2FfZGV2LT5jYW0uYnVsaykKQEAgLTYzNiw4ICs4MjAsMTEgQEAKIAkJCWJyZWFrOwogCiAJCS8qIHN1Ym1pdCB0aGUgVVJCcyAqLwotCQlmb3IgKG4gPSAwOyBuIDwgZ3NwY2FfZGV2LT5udXJiczsgbisrKSB7Ci0JCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihnc3BjYV9kZXYtPnVyYltuXSwgR0ZQX0tFUk5FTCk7CisJCWZvciAobiA9IDA7IG4gPCBNQVhfTlVSQlM7IG4rKykgeworCQkJdXJiID0gZ3NwY2FfZGV2LT51cmJbbl07CisJCQlpZiAodXJiID09IE5VTEwpCisJCQkJYnJlYWs7CisJCQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTY5NCw3ICs4ODEsOSBAQAogCQlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5zdG9wTikKIAkJCWdzcGNhX2Rldi0+c2RfZGVzYy0+c3RvcE4oZ3NwY2FfZGV2KTsKIAkJZGVzdHJveV91cmJzKGdzcGNhX2Rldik7CisJCWdzcGNhX2lucHV0X2Rlc3Ryb3lfdXJiKGdzcGNhX2Rldik7CiAJCWdzcGNhX3NldF9hbHQwKGdzcGNhX2Rldik7CisJCWdzcGNhX2lucHV0X2NyZWF0ZV91cmIoZ3NwY2FfZGV2KTsKIAl9CiAKIAkvKiBhbHdheXMgY2FsbCBzdG9wMCB0byBmcmVlIHRoZSBzdWJkcml2ZXIncyByZXNvdXJjZXMgKi8KQEAgLTIwNjAsMTEgKzIyNDksMTIgQEAKIAkJUERFQlVHKERfRVJSLCAiVG9vIG1hbnkgY29uZmlnIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KKworCS8qIHRoZSBVU0IgdmlkZW8gaW50ZXJmYWNlIG11c3QgYmUgdGhlIGZpcnN0IG9uZSAqLwogCWludGVyZmFjZSA9ICZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYzsKLQlpZiAoaW50ZXJmYWNlLT5iSW50ZXJmYWNlTnVtYmVyID4gMCkgewotCQlQREVCVUcoRF9FUlIsICJpbnRmICE9IDAiKTsKKwlpZiAoZGV2LT5jb25maWctPmRlc2MuYk51bUludGVyZmFjZXMgIT0gMSAmJgorCSAgICBpbnRlcmZhY2UtPmJJbnRlcmZhY2VOdW1iZXIgIT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCiAJLyogY3JlYXRlIHRoZSBkZXZpY2UgKi8KIAlpZiAoZGV2X3NpemUgPCBzaXplb2YgKmdzcGNhX2RldikKQEAgLTIwOTYsNiArMjI4NiwxMCBAQAogCQlnb3RvIG91dDsKIAlnc3BjYV9zZXRfZGVmYXVsdF9tb2RlKGdzcGNhX2Rldik7CiAKKwlyZXQgPSBnc3BjYV9pbnB1dF9jb25uZWN0KGdzcGNhX2Rldik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKIAltdXRleF9pbml0KCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAltdXRleF9pbml0KCZnc3BjYV9kZXYtPnJlYWRfbG9jayk7CiAJbXV0ZXhfaW5pdCgmZ3NwY2FfZGV2LT5xdWV1ZV9sb2NrKTsKQEAgLTIxMTYsOCArMjMxMCwxNSBAQAogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBnc3BjYV9kZXYpOwogCVBERUJVRyhEX1BST0JFLCAiJXMgY3JlYXRlZCIsIHZpZGVvX2RldmljZV9ub2RlX25hbWUoJmdzcGNhX2Rldi0+dmRldikpOworCisJZ3NwY2FfaW5wdXRfY3JlYXRlX3VyYihnc3BjYV9kZXYpOworCiAJcmV0dXJuIDA7CiBvdXQ6CisjaWZkZWYgQ09ORklHX0lOUFVUCisJaWYgKGdzcGNhX2Rldi0+aW5wdXRfZGV2KQorCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShnc3BjYV9kZXYtPmlucHV0X2Rldik7CisjZW5kaWYKIAlrZnJlZShnc3BjYV9kZXYtPnVzYl9idWYpOwogCWtmcmVlKGdzcGNhX2Rldik7CiAJcmV0dXJuIHJldDsKQEAgLTIxMzMsNiArMjMzNCw5IEBACiB2b2lkIGdzcGNhX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKyNpZmRlZiBDT05GSUdfSU5QVVQKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisjZW5kaWYKIAogCVBERUJVRyhEX1BST0JFLCAiJXMgZGlzY29ubmVjdCIsCiAJCXZpZGVvX2RldmljZV9ub2RlX25hbWUoJmdzcGNhX2Rldi0+dmRldikpOwpAQCAtMjE0NCw2ICsyMzQ4LDE1IEBACiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT53cSk7CiAJfQogCisjaWZkZWYgQ09ORklHX0lOUFVUCisJZ3NwY2FfaW5wdXRfZGVzdHJveV91cmIoZ3NwY2FfZGV2KTsKKwlpbnB1dF9kZXYgPSBnc3BjYV9kZXYtPmlucHV0X2RldjsKKwlpZiAoaW5wdXRfZGV2KSB7CisJCWdzcGNhX2Rldi0+aW5wdXRfZGV2ID0gTlVMTDsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKKwl9CisjZW5kaWYKKwogCS8qIHRoZSBkZXZpY2UgaXMgZnJlZWQgYXQgZXhpdCBvZiB0aGlzIGZ1bmN0aW9uICovCiAJZ3NwY2FfZGV2LT5kZXYgPSBOVUxMOwogCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CkBAIC0yMTY5LDYgKzIzODIsNyBAQAogCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3BOKQogCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3BOKGdzcGNhX2Rldik7CiAJZGVzdHJveV91cmJzKGdzcGNhX2Rldik7CisJZ3NwY2FfaW5wdXRfZGVzdHJveV91cmIoZ3NwY2FfZGV2KTsKIAlnc3BjYV9zZXRfYWx0MChnc3BjYV9kZXYpOwogCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3AwKQogCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3AwKGdzcGNhX2Rldik7CkBAIC0yMTgyLDYgKzIzOTYsNyBAQAogCiAJZ3NwY2FfZGV2LT5mcm96ZW4gPSAwOwogCWdzcGNhX2Rldi0+c2RfZGVzYy0+aW5pdChnc3BjYV9kZXYpOworCWdzcGNhX2lucHV0X2NyZWF0ZV91cmIoZ3NwY2FfZGV2KTsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXJldHVybiBnc3BjYV9pbml0X3RyYW5zZmVyKGdzcGNhX2Rldik7CiAJcmV0dXJuIDA7CkBAIC0yMjA1LDYgKzI0MjAsOCBAQAogCWludCByZXR2YWwgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IGdzcGNhX2Rldi0+c2RfZGVzYy0+bmN0cmxzOyBpKyspIHsKKwkJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBpKSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXS5xY3RybC5pZCA9PSBWNEwyX0NJRF9HQUlOKQogCQkJZ2Fpbl9jdHJsID0gJmdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV07CiAJCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldLnFjdHJsLmlkID09IFY0TDJfQ0lEX0VYUE9TVVJFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCmluZGV4IDU5Yzc5NDFkLi4wMmM2OTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCkBAIC00OCwyNiArNDgsMjcgQEAKIAogLyogdXNlZCB0byBsaXN0IGZyYW1lcmF0ZXMgc3VwcG9ydGVkIGJ5IGEgY2FtZXJhIG1vZGUgKHJlc29sdXRpb24pICovCiBzdHJ1Y3QgZnJhbWVyYXRlcyB7Ci0JaW50ICpyYXRlczsKKwljb25zdCB1OCAqcmF0ZXM7CiAJaW50IG5yYXRlczsKIH07CiAKIC8qIGRldmljZSBpbmZvcm1hdGlvbiAtIHNldCBhdCBwcm9iZSB0aW1lICovCiBzdHJ1Y3QgY2FtIHsKLQlpbnQgYnVsa19zaXplOwkJLyogYnVmZmVyIHNpemUgd2hlbiBpbWFnZSB0cmFuc2ZlciBieSBidWxrICovCiAJY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqY2FtX21vZGU7CS8qIHNpemUgbm1vZGVzICovCi0JY2hhciBubW9kZXM7CiAJY29uc3Qgc3RydWN0IGZyYW1lcmF0ZXMgKm1vZGVfZnJhbWVyYXRlczsgLyogbXVzdCBoYXZlIHNpemUgbm1vZGUsCiAJCQkJCQkgICAqIGp1c3QgbGlrZSBjYW1fbW9kZSAqLwotCV9fdTggYnVsa19udXJiczsJLyogbnVtYmVyIG9mIFVSQnMgaW4gYnVsayBtb2RlCisJdTMyIGJ1bGtfc2l6ZTsJCS8qIGJ1ZmZlciBzaXplIHdoZW4gaW1hZ2UgdHJhbnNmZXIgYnkgYnVsayAqLworCXUzMiBpbnB1dF9mbGFnczsJLyogdmFsdWUgZm9yIEVOVU1fSU5QVVQgc3RhdHVzIGZsYWdzICovCisJdTggbm1vZGVzOwkJLyogc2l6ZSBvZiBjYW1fbW9kZSAqLworCXU4IG5vX3VyYl9jcmVhdGU7CS8qIGRvbid0IGNyZWF0ZSB0cmFuc2ZlciBVUkJzICovCisJdTggYnVsa19udXJiczsJCS8qIG51bWJlciBvZiBVUkJzIGluIGJ1bGsgbW9kZQogCQkJCSAqIC0gY2Fubm90IGJlID4gTUFYX05VUkJTCiAJCQkJICogLSB3aGVuIDAgYW5kIGJ1bGtfc2l6ZSAhPSAwIG1lYW5zCiAJCQkJICogICAxIFVSQiBhbmQgc3VibWl0IGRvbmUgYnkgc3ViZHJpdmVyICovCiAJdTggYnVsazsJCS8qIGltYWdlIHRyYW5zZmVyIGJ5IDA6aXNvYyAvIDE6YnVsayAqLwogCXU4IG5wa3Q7CQkvKiBudW1iZXIgb2YgcGFja2V0cyBpbiBhbiBJU09DIG1lc3NhZ2UKIAkJCQkgKiAwIGlzIHRoZSBkZWZhdWx0IHZhbHVlOiAzMiBwYWNrZXRzICovCi0JdTMyIGlucHV0X2ZsYWdzOwkvKiB2YWx1ZSBmb3IgRU5VTV9JTlBVVCBzdGF0dXMgZmxhZ3MgKi8KLQljaGFyIHJldmVyc2VfYWx0czsJLyogQWx0IHNldHRpbmdzIGFyZSBpbiBoaWdoIHRvIGxvdyBvcmRlciAqLworCXU4IHJldmVyc2VfYWx0czsJLyogQWx0IHNldHRpbmdzIGFyZSBpbiBoaWdoIHRvIGxvdyBvcmRlciAqLwogfTsKIAogc3RydWN0IGdzcGNhX2RldjsKQEAgLTkwLDYgKzkxLDkgQEAKIHR5cGVkZWYgdm9pZCAoKmNhbV9wa3Rfb3ApIChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQkJdTggKmRhdGEsCiAJCQkJaW50IGxlbik7Cit0eXBlZGVmIGludCAoKmNhbV9pbnRfcGt0X29wKSAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJCXU4ICpkYXRhLAorCQkJCWludCBsZW4pOwogCiBzdHJ1Y3QgY3RybCB7CiAJc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjdHJsOwpAQCAtMTI1LDYgKzEyOSwxMiBAQAogCWNhbV9yZWdfb3AgZ2V0X3JlZ2lzdGVyOwogI2VuZGlmCiAJY2FtX2lkZW50X29wIGdldF9jaGlwX2lkZW50OworI2lmZGVmIENPTkZJR19JTlBVVAorCWNhbV9pbnRfcGt0X29wIGludF9wa3Rfc2NhbjsKKwkvKiBvdGhlcl9pbnB1dCBtYWtlcyB0aGUgZ3NwY2EgY29yZSBjcmVhdGUgZ3NwY2FfZGV2LT5pbnB1dCBldmVuIHdoZW4KKwkgICBpbnRfcGt0X3NjYW4gaXMgTlVMTCwgZm9yIGNhbXMgd2l0aCBub24gaW50ZXJydXB0IGRyaXZlbiBidXR0b25zICovCisJdTggb3RoZXJfaW5wdXQ7CisjZW5kaWYKIH07CiAKIC8qIHBhY2tldCB0eXBlcyB3aGVuIG1vdmluZyBmcm9tIGlzbyBidWYgdG8gZnJhbWUgYnVmICovCkBAIC0xNDcsNiArMTU3LDEwIEBACiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwkJLyogc3ViZHJpdmVyIGhhbmRsaW5nIHRoZSBkZXZpY2UgKi8KIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OwogCXN0cnVjdCBmaWxlICpjYXB0X2ZpbGU7CQkvKiBmaWxlIGRvaW5nIHZpZGVvIGNhcHR1cmUgKi8KKyNpZmRlZiBDT05GSUdfSU5QVVQKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJY2hhciBwaHlzWzY0XTsJCQkvKiBwaHlzaWNhbCBkZXZpY2UgcGF0aCAqLworI2VuZGlmCiAKIAlzdHJ1Y3QgY2FtIGNhbTsJCQkJLyogZGV2aWNlIGluZm9ybWF0aW9uICovCiAJY29uc3Qgc3RydWN0IHNkX2Rlc2MgKnNkX2Rlc2M7CQkvKiBzdWJkcml2ZXIgZGVzY3JpcHRpb24gKi8KQEAgLTE1Niw2ICsxNzAsOSBAQAogI2RlZmluZSBVU0JfQlVGX1NaIDY0CiAJX191OCAqdXNiX2J1ZjsJCQkJLyogYnVmZmVyIGZvciBVU0IgZXhjaGFuZ2VzICovCiAJc3RydWN0IHVyYiAqdXJiW01BWF9OVVJCU107CisjaWZkZWYgQ09ORklHX0lOUFVUCisJc3RydWN0IHVyYiAqaW50X3VyYjsKKyNlbmRpZgogCiAJX191OCAqZnJidWY7CQkJCS8qIGJ1ZmZlciBmb3IgbmZyYW1lcyAqLwogCXN0cnVjdCBnc3BjYV9mcmFtZSBmcmFtZVtHU1BDQV9NQVhfRlJBTUVTXTsKQEAgLTE4Nyw3ICsyMDQsNiBAQAogCWNoYXIgdXNlcnM7CQkJLyogbnVtYmVyIG9mIG9wZW5zICovCiAJY2hhciBwcmVzZW50OwkJCS8qIGRldmljZSBjb25uZWN0ZWQgKi8KIAljaGFyIG5idWZyZWFkOwkJCS8qIG51bWJlciBvZiBidWZmZXJzIGZvciByZWFkKCkgKi8KLQljaGFyIG51cmJzOwkJCS8qIG51bWJlciBvZiBhbGxvY2F0ZWQgVVJCcyAqLwogCWNoYXIgbWVtb3J5OwkJCS8qIG1lbW9yeSB0eXBlIChWNEwyX01FTU9SWV94eHgpICovCiAJX191OCBpZmFjZTsJCQkvKiBVU0IgaW50ZXJmYWNlIG51bWJlciAqLwogCV9fdTggYWx0OwkJCS8qIFVTQiBhbHRlcm5hdGUgc2V0dGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYwppbmRleCA4ZDA3MWRmLi5jMDcyMmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYwpAQCAtNDgsNyArNDgsNyBAQAogCX0KIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgY3RybCBtdDltMTExX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgbXQ5bTExMV9jdHJsc1tdID0gewogI2RlZmluZSBWRkxJUF9JRFggMAogCXsKIAkJewpAQCAtMTcxLDcgKzE3MSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWluZm8oIlByb2JpbmcgZm9yIGEgbXQ5bTExMSBzZW5zb3IiKTsKKwlQREVCVUcoRF9QUk9CRSwgIlByb2JpbmcgZm9yIGEgbXQ5bTExMSBzZW5zb3IiKTsKIAogCS8qIERvIHRoZSBwcmVpbml0ICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJlaW5pdF9tdDltMTExKTsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuYwppbmRleCAyYTI4Yjc0Li42MmMxY2JmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y3NjYwLmMKQEAgLTMzLDcgKzMzLDcgQEAKIHN0YXRpYyBpbnQgb3Y3NjYwX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBvdjc2NjBfc2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCBjdHJsIG92NzY2MF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIG92NzY2MF9jdHJsc1tdID0gewogI2RlZmluZSBHQUlOX0lEWCAxCiAJewogCQl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjc2NjAuaAppbmRleCBmNTU4OGViLi40ZDlkY2YyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292NzY2MC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y3NjYwLmgKQEAgLTk0LDcgKzk0LDcgQEAKIGludCBvdjc2NjBfc3RvcChzdHJ1Y3Qgc2QgKnNkKTsKIHZvaWQgb3Y3NjYwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNkICpzZCk7CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgbTU2MDJfc2Vuc29yIG92NzY2MCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbTU2MDJfc2Vuc29yIG92NzY2MCA9IHsKIAkubmFtZSA9ICJvdjc2NjAiLAogCS5pMmNfc2xhdmVfaWQgPSAweDQyLAogCS5pMmNfcmVnVyA9IDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuYwppbmRleCA5MjNjZGQ1Li4wNjliYTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmMKQEAgLTMwNyw3ICszMDcsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpbmZvKCJQcm9iaW5nIGZvciBhbiBvdjk2NTAgc2Vuc29yIik7CisJUERFQlVHKERfUFJPQkUsICJQcm9iaW5nIGZvciBhbiBvdjk2NTAgc2Vuc29yIik7CiAKIAkvKiBSdW4gdGhlIHByZS1pbml0IGJlZm9yZSBwcm9iaW5nIHRoZSBzZW5zb3IgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVpbml0X292OTY1MCkgJiYgIWVycjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuYwppbmRleCA4ZDc0ZDgwLi45MjViODdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpbmZvKCJQcm9iaW5nIGZvciBhIHBvMTAzMCBzZW5zb3IiKTsKKwlQREVCVUcoRF9QUk9CRSwgIlByb2JpbmcgZm9yIGEgcG8xMDMwIHNlbnNvciIpOwogCiAJLyogUnVuIHRoZSBwcmUtaW5pdCB0byBhY3R1YWxseSBwcm9iZSB0aGUgdW5pdCAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByZWluaXRfcG8xMDMwKTsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYwppbmRleCAxYjUzNmY3ZC4uZGEwYTM4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaW5mbygiUHJvYmluZyBmb3IgYSBzNWs0YWEgc2Vuc29yIik7CisJUERFQlVHKERfUFJPQkUsICJQcm9iaW5nIGZvciBhIHM1azRhYSBzZW5zb3IiKTsKIAogCS8qIFByZWluaXQgdGhlIHNlbnNvciAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByZWluaXRfczVrNGFhKSAmJiAhZXJyOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5jCmluZGV4IDZiODlmMzMuLmZiZDkxNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWluZm8oIlByb2JpbmcgZm9yIGEgczVrODNhIHNlbnNvciIpOworCVBERUJVRyhEX1BST0JFLCAiUHJvYmluZyBmb3IgYSBzNWs4M2Egc2Vuc29yIik7CiAKIAkvKiBQcmVpbml0IHRoZSBzZW5zb3IgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVpbml0X3M1azgzYSkgJiYgIWVycjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCmluZGV4IDljZjhkNjguLjNkOTIyOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCkBAIC01NCw3ICs1NCw3IEBACiBzdGF0aWMgaW50IHNkX3NldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKaW5kZXggOTE1NDg3MC4uMzM3NDRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYwpAQCAtNTcsNiArNTcsMTQgQEAKICNkZWZpbmUgTVI5NzMxMEFfR0FJTl9NQVgJCTMxCiAjZGVmaW5lIE1SOTczMTBBX0dBSU5fREVGQVVMVAkJMjUKIAorI2RlZmluZSBNUjk3MzEwQV9DT05UUkFTVF9NSU4JCTAKKyNkZWZpbmUgTVI5NzMxMEFfQ09OVFJBU1RfTUFYCQkzMQorI2RlZmluZSBNUjk3MzEwQV9DT05UUkFTVF9ERUZBVUxUCTIzCisKKyNkZWZpbmUgTVI5NzMxMEFfQ1NfR0FJTl9NSU4JCTAKKyNkZWZpbmUgTVI5NzMxMEFfQ1NfR0FJTl9NQVgJCTB4N2ZmCisjZGVmaW5lIE1SOTczMTBBX0NTX0dBSU5fREVGQVVMVAkweDExMAorCiAjZGVmaW5lIE1SOTczMTBBX01JTl9DTE9DS0RJVl9NSU4JMwogI2RlZmluZSBNUjk3MzEwQV9NSU5fQ0xPQ0tESVZfTUFYCTgKICNkZWZpbmUgTVI5NzMxMEFfTUlOX0NMT0NLRElWX0RFRkFVTFQJMwpAQCAtODIsNyArOTAsOCBAQAogCiAJaW50IGJyaWdodG5lc3M7CiAJdTE2IGV4cG9zdXJlOwotCXU4IGdhaW47CisJdTMyIGdhaW47CisJdTggY29udHJhc3Q7CiAJdTggbWluX2Nsb2NrZGl2OwogfTsKIApAQCAtOTgsNiArMTA3LDggQEAKIHN0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0bWluX2Nsb2NrZGl2KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKQEAgLTEwNSwxMSArMTE2LDEzIEBACiBzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2Rldik7CiBzdGF0aWMgdm9pZCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOwogc3RhdGljIHZvaWQgc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpOworc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKIC8qIFNlcGFyYXRlIGJyaWdodG5lc3MgY29udHJvbCBkZXNjcmlwdGlvbiBmb3IgQXJndXMgUXVpY2tDbGl4IGFzIGl0IGhhcwotICAgZGlmZmVyZW50IGxpbWl0cyBmcm9tIHRoZSBvdGhlciBtcjk3MzEwYSBjYW1lcmFzICovCisgKiBkaWZmZXJlbnQgbGltaXRzIGZyb20gdGhlIG90aGVyIG1yOTczMTBhIGNhbWVyYXMsIGFuZCBzZXBhcmF0ZSBnYWluCisgKiBjb250cm9sIGZvciBTYWthciBDeWJlclBpeCBjYW1lcmEuICovCiAJewogI2RlZmluZSBOT1JNX0JSSUdIVE5FU1NfSURYIDAKIAkJewpAQCAtMTcxLDcgKzE4NCwzNyBAQAogCQkuZ2V0ID0gc2RfZ2V0Z2FpbiwKIAl9LAogCXsKLSNkZWZpbmUgTUlOX0NMT0NLRElWX0lEWCA0CisjZGVmaW5lIFNBS0FSX0NTX0dBSU5fSURYIDQKKwkJeworCQkJLmlkID0gVjRMMl9DSURfR0FJTiwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gIkdhaW4iLAorCQkJLm1pbmltdW0gPSBNUjk3MzEwQV9DU19HQUlOX01JTiwKKwkJCS5tYXhpbXVtID0gTVI5NzMxMEFfQ1NfR0FJTl9NQVgsCisJCQkuc3RlcCA9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IE1SOTczMTBBX0NTX0dBSU5fREVGQVVMVCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCS5zZXQgPSBzZF9zZXRnYWluLAorCQkuZ2V0ID0gc2RfZ2V0Z2FpbiwKKwl9LAorCXsKKyNkZWZpbmUgQ09OVFJBU1RfSURYIDUKKwkJeworCQkJLmlkID0gVjRMMl9DSURfQ09OVFJBU1QsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJDb250cmFzdCIsCisJCQkubWluaW11bSA9IE1SOTczMTBBX0NPTlRSQVNUX01JTiwKKwkJCS5tYXhpbXVtID0gTVI5NzMxMEFfQ09OVFJBU1RfTUFYLAorCQkJLnN0ZXAgPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSBNUjk3MzEwQV9DT05UUkFTVF9ERUZBVUxULAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJLnNldCA9IHNkX3NldGNvbnRyYXN0LAorCQkuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCisJfSwKKwl7CisjZGVmaW5lIE1JTl9DTE9DS0RJVl9JRFggNgogCQl7CiAJCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UsCiAJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCkBAIC0zMjcsNyArMzcwLDYgQEAKIAlpZiAoZXJyX2NvZGUgPCAwKQogCQlyZXR1cm4gZXJyX2NvZGU7CiAKLQllcnJfY29kZSA9IG1yX3dyaXRlKGdzcGNhX2RldiwgMSk7CiAJZGF0YVswXSA9IDB4MTk7CiAJZGF0YVsxXSA9IDB4NTE7CiAJZXJyX2NvZGUgPSBtcl93cml0ZShnc3BjYV9kZXYsIDIpOwpAQCAtNDM3LDYgKzQ3OSw3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCBjYW0gKmNhbTsKKwlpbnQgZ2Fpbl9kZWZhdWx0ID0gTVI5NzMxMEFfR0FJTl9ERUZBVUxUOwogCWludCBlcnJfY29kZTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKQEAgLTQ2MCwxMiArNTAzLDE0IEBACiAJaWYgKGVycl9jb2RlIDwgMCkKIAkJcmV0dXJuIGVycl9jb2RlOwogCisJLyogTm93LCB0aGUgcXVlcnkgZm9yIHNlbnNvciB0eXBlLiAqLworCWVycl9jb2RlID0gY2FtX2dldF9yZXNwb25zZTE2KGdzcGNhX2RldiwgMHgwNywgMSk7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCiAJaWYgKGlkLT5pZFByb2R1Y3QgPT0gMHgwMTEwIHx8IGlkLT5pZFByb2R1Y3QgPT0gMHgwMTBlKSB7CiAJCXNkLT5jYW1fdHlwZSA9IENBTV9UWVBFX0NJRjsKIAkJY2FtLT5ubW9kZXMtLTsKLQkJZXJyX2NvZGUgPSBjYW1fZ2V0X3Jlc3BvbnNlMTYoZ3NwY2FfZGV2LCAweDA2LCAxKTsKLQkJaWYgKGVycl9jb2RlIDwgMCkKLQkJCXJldHVybiBlcnJfY29kZTsKIAkJLyoKIAkJICogQWxsIGJ1dCBvbmUgb2YgdGhlIGtub3duIENJRiBjYW1lcmFzIHNoYXJlIHRoZSBzYW1lIFVTQiBJRCwKIAkJICogYnV0IHR3byBkaWZmZXJlbnQgaW5pdCByb3V0aW5lcyBhcmUgaW4gdXNlLCBhbmQgdGhlIGNvbnRyb2wKQEAgLTQ3MywxMiArNTE4LDEyIEBACiAJCSAqIG9mIHRoZSB0d28ga25vd24gdmFyaWV0aWVzIGlzIGNvbm5lY3RlZCEKIAkJICoKIAkJICogQSBsaXN0IG9mIGtub3duIENJRiBjYW1lcmFzIGZvbGxvd3MuIFRoZXkgYWxsIHJlcG9ydCBlaXRoZXIKLQkJICogMDAwMiBmb3IgdHlwZSAwIG9yIDAwMDMgZm9yIHR5cGUgMS4KKwkJICogMDIwMCBmb3IgdHlwZSAwIG9yIDAzMDAgZm9yIHR5cGUgMS4KIAkJICogSWYgeW91IGhhdmUgYW5vdGhlciB0byByZXBvcnQsIHBsZWFzZSBkbwogCQkgKgogCQkgKiBOYW1lCQlzZC0+c2Vuc29yX3R5cGUJCXJlcG9ydGVkIGJ5CiAJCSAqCi0JCSAqIFNha2FyIFNweS1zaG90CTAJCVQuIEtpbGdvcmUKKwkJICogU2FrYXIgNTYzNzkgU3B5LXNob3QJMAkJVC4gS2lsZ29yZQogCQkgKiBJbm5vdmFnZQkJMAkJVC4gS2lsZ29yZQogCQkgKiBWaXZpdGFyIE1pbmkJCTAJCUguIERlIEdvZWRlCiAJCSAqIFZpdml0YXIgTWluaQkJMAkJRS4gUm9kcmlndWV6CkBAIC00ODcsNyArNTMyLDcgQEAKIAkJICogUGhpbGlwcyBkaWcuIGtleWNoLgkxCQlULiBLaWxnb3JlCiAJCSAqIFRydXN0IFNweWNAbSAxMDAJMQkJQS4gSmFjb2JzCiAJCSAqLwotCQlzd2l0Y2ggKGdzcGNhX2Rldi0+dXNiX2J1ZlsxXSkgeworCQlzd2l0Y2ggKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSkgewogCQljYXNlIDI6CiAJCQlzZC0+c2Vuc29yX3R5cGUgPSAwOwogCQkJYnJlYWs7CkBAIC01MDQsMjAgKzU0OSwxOSBAQAogCX0gZWxzZSB7CiAJCXNkLT5jYW1fdHlwZSA9IENBTV9UWVBFX1ZHQTsKIAotCQllcnJfY29kZSA9IGNhbV9nZXRfcmVzcG9uc2UxNihnc3BjYV9kZXYsIDB4MDcsIDEpOwotCQlpZiAoZXJyX2NvZGUgPCAwKQotCQkJcmV0dXJuIGVycl9jb2RlOwotCiAJCS8qCi0JCSAqIEhlcmUgaXMgYSB0YWJsZSBvZiB0aGUgcmVzcG9uc2VzIHRvIHRoZSBwcmV2aW91cyBjb21tYW5kCi0JCSAqIGZyb20gdGhlIGtub3duIE1SOTczMTBBIFZHQSBjYW1lcmFzLgorCQkgKiBIZXJlIGlzIGEgdGFibGUgb2YgdGhlIHJlc3BvbnNlcyB0byB0aGUgcXVlcnkgZm9yIHNlbnNvcgorCQkgKiB0eXBlLCBmcm9tIHRoZSBrbm93biBNUjk3MzEwQSBWR0EgY2FtZXJhcy4gU2l4IGRpZmZlcmVudAorCQkgKiBjYW1lcmFzIG9mIHdoaWNoIGZpdmUgc2hhcmUgdGhlIHNhbWUgVVNCIElELgogCQkgKgogCQkgKiBOYW1lCQkJZ3NwY2FfZGV2LT51c2JfYnVmW10Jc2QtPnNlbnNvcl90eXBlCiAJCSAqCQkJCXNkLT5kb19sY2Rfc3RvcAogCQkgKiBBaXB0ZWsgUGVuY2FtIFZHQSsJMDMwMAkJMAkJMQotCQkgKiBJT04gZGlnaXRhbAkJMDM1MAkJMAkJMQorCQkgKiBJT04gZGlnaXRhbAkJMDMwMAkJMAkJMQogCQkgKiBBcmd1cyBEQy0xNjIwCTA0NTAJCTEJCTAKIAkJICogQXJndXMgUXVpY2tDbGl4CTA0MjAJCTEJCTEKKwkJICogU2FrYXIgNzczNzkgRGlnaXRhbAkwMzUwCQkwCQkxCisJCSAqIFNha2FyIDE2Mzh4IEN5YmVyUGl4CTAxMjAJCTAJCTIKIAkJICoKIAkJICogQmFzZWQgdXBvbiB0aGVzZSByZXN1bHRzLCB3ZSBhc3N1bWUgZGVmYXVsdCBzZXR0aW5ncwogCQkgKiBhbmQgdGhlbiBjb3JyZWN0IGFzIG5lY2Vzc2FyeSwgYXMgZm9sbG93cy4KQEAgLTUyNywxMCArNTcxLDEyIEBACiAJCXNkLT5zZW5zb3JfdHlwZSA9IDE7CiAJCXNkLT5kb19sY2Rfc3RvcCA9IDA7CiAJCXNkLT5hZGpfY29sb3JzID0gMDsKLQkJaWYgKChnc3BjYV9kZXYtPnVzYl9idWZbMF0gIT0gMHgwMykgJiYKKwkJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAweDAxKSB7CisJCQlzZC0+c2Vuc29yX3R5cGUgPSAyOworCQl9IGVsc2UgaWYgKChnc3BjYV9kZXYtPnVzYl9idWZbMF0gIT0gMHgwMykgJiYKIAkJCQkJKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSAhPSAweDA0KSkgewogCQkJUERFQlVHKERfRVJSLCAiVW5rbm93biBWR0EgU2Vuc29yIGlkIEJ5dGUgMDogJTAyeCIsCi0JCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSk7CisJCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7CiAJCQlQREVCVUcoRF9FUlIsICJEZWZhdWx0cyBhc3N1bWVkLCBtYXkgbm90IHdvcmsiKTsKIAkJCVBERUJVRyhEX0VSUiwgIlBsZWFzZSByZXBvcnQgdGhpcyIpOwogCQl9CkBAIC01NjAsNyArNjA2LDcgQEAKIAkJUERFQlVHKERfUFJPQkUsICJNUjk3MzEwQSBWR0EgY2FtZXJhIGRldGVjdGVkLCBzZW5zb3I6ICVkIiwKIAkJICAgICAgIHNkLT5zZW5zb3JfdHlwZSk7CiAJfQotCS8qIFN0b3Agc3RyZWFtaW5nIGFzIHdlJ3ZlIHN0YXJ0ZWQgaXQgdG8gcHJvYmUgdGhlIHNlbnNvciB0eXBlLiAqLworCS8qIFN0b3Agc3RyZWFtaW5nIGFzIHdlJ3ZlIHN0YXJ0ZWQgaXQgb25seSB0byBwcm9iZSB0aGUgc2Vuc29yIHR5cGUuICovCiAJc2Rfc3RvcE4oZ3NwY2FfZGV2KTsKIAogCWlmIChmb3JjZV9zZW5zb3JfdHlwZSAhPSAtMSkgewpAQCAtNTc0LDkgKzYyMCwxMyBAQAogCQkvKiBObyBicmlnaHRuZXNzIGZvciBzZW5zb3JfdHlwZSAwICovCiAJCWlmIChzZC0+c2Vuc29yX3R5cGUgPT0gMCkKIAkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBOT1JNX0JSSUdIVE5FU1NfSURYKSB8Ci0JCQkJCSAgICAgICgxIDw8IEFSR1VTX1FDX0JSSUdIVE5FU1NfSURYKTsKKwkJCQkJICAgICAgKDEgPDwgQVJHVVNfUUNfQlJJR0hUTkVTU19JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgQ09OVFJBU1RfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IFNBS0FSX0NTX0dBSU5fSURYKTsKIAkJZWxzZQogCQkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IEFSR1VTX1FDX0JSSUdIVE5FU1NfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IENPTlRSQVNUX0lEWCkgfAorCQkJCQkgICAgICAoMSA8PCBTQUtBUl9DU19HQUlOX0lEWCkgfAogCQkJCQkgICAgICAoMSA8PCBNSU5fQ0xPQ0tESVZfSURYKTsKIAl9IGVsc2UgewogCQkvKiBBbGwgY29udHJvbHMgbmVlZCB0byBiZSBkaXNhYmxlZCBpZiBWR0Egc2Vuc29yX3R5cGUgaXMgMCAqLwpAQCAtNTg1LDE3ICs2MzUsMzAgQEAKIAkJCQkJICAgICAgKDEgPDwgQVJHVVNfUUNfQlJJR0hUTkVTU19JRFgpIHwKIAkJCQkJICAgICAgKDEgPDwgRVhQT1NVUkVfSURYKSB8CiAJCQkJCSAgICAgICgxIDw8IEdBSU5fSURYKSB8CisJCQkJCSAgICAgICgxIDw8IENPTlRSQVNUX0lEWCkgfAorCQkJCQkgICAgICAoMSA8PCBTQUtBUl9DU19HQUlOX0lEWCkgfAogCQkJCQkgICAgICAoMSA8PCBNSU5fQ0xPQ0tESVZfSURYKTsKLQkJZWxzZSBpZiAoc2QtPmRvX2xjZF9zdG9wKQorCQllbHNlIGlmIChzZC0+c2Vuc29yX3R5cGUgPT0gMikgeworCQkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IE5PUk1fQlJJR0hUTkVTU19JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgQVJHVVNfUUNfQlJJR0hUTkVTU19JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgR0FJTl9JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgTUlOX0NMT0NLRElWX0lEWCk7CisJCQlnYWluX2RlZmF1bHQgPSBNUjk3MzEwQV9DU19HQUlOX0RFRkFVTFQ7CisJCX0gZWxzZSBpZiAoc2QtPmRvX2xjZF9zdG9wKQogCQkJLyogQXJndXMgUXVpY2tDbGl4IGhhcyBkaWZmZXJlbnQgYnJpZ2h0bmVzcyBsaW1pdHMgKi8KLQkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBOT1JNX0JSSUdIVE5FU1NfSURYKTsKKwkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBOT1JNX0JSSUdIVE5FU1NfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IENPTlRSQVNUX0lEWCkgfAorCQkJCQkgICAgICAoMSA8PCBTQUtBUl9DU19HQUlOX0lEWCk7CiAJCWVsc2UKLQkJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBBUkdVU19RQ19CUklHSFRORVNTX0lEWCk7CisJCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgQVJHVVNfUUNfQlJJR0hUTkVTU19JRFgpIHwKKwkJCQkJICAgICAgKDEgPDwgQ09OVFJBU1RfSURYKSB8CisJCQkJCSAgICAgICgxIDw8IFNBS0FSX0NTX0dBSU5fSURYKTsKIAl9CiAKIAlzZC0+YnJpZ2h0bmVzcyA9IE1SOTczMTBBX0JSSUdIVE5FU1NfREVGQVVMVDsKIAlzZC0+ZXhwb3N1cmUgPSBNUjk3MzEwQV9FWFBPU1VSRV9ERUZBVUxUOwotCXNkLT5nYWluID0gTVI5NzMxMEFfR0FJTl9ERUZBVUxUOworCXNkLT5nYWluID0gZ2Fpbl9kZWZhdWx0OworCXNkLT5jb250cmFzdCA9IE1SOTczMTBBX0NPTlRSQVNUX0RFRkFVTFQ7CiAJc2QtPm1pbl9jbG9ja2RpdiA9IE1SOTczMTBBX01JTl9DTE9DS0RJVl9ERUZBVUxUOwogCiAJcmV0dXJuIDA7CkBAIC02OTcsNiArNzYwLDEyIEBACiAJCQl7MHgxMywgMHgwMCwgezB4MDF9LCAxfSwKIAkJCXswLCAwLCB7MH0sIDB9CiAJCX07CisJCS8qIFdpdGhvdXQgdGhpcyBjb21tYW5kIHRoZSBjYW0gd29uJ3Qgd29yayB3aXRoIFVTQi1VSENJICovCisJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4MGE7CisJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9IDB4MDA7CisJCWVycl9jb2RlID0gbXJfd3JpdGUoZ3NwY2FfZGV2LCAyKTsKKwkJaWYgKGVycl9jb2RlIDwgMCkKKwkJCXJldHVybiBlcnJfY29kZTsKIAkJZXJyX2NvZGUgPSBzZW5zb3Jfd3JpdGVfcmVncyhnc3BjYV9kZXYsIGNpZl9zZW5zb3IxX2luaXRfZGF0YSwKIAkJCQkJIEFSUkFZX1NJWkUoY2lmX3NlbnNvcjFfaW5pdF9kYXRhKSk7CiAJfQpAQCAtNzE3LDYgKzc4NiwxMCBAQAogCQlkYXRhWzVdICA9IDB4MDA7CiAJCWRhdGFbMTBdID0gMHg5MTsKIAl9CisJaWYgKHNkLT5zZW5zb3JfdHlwZSA9PSAyKSB7CisJCWRhdGFbNV0gID0gMHgwMDsKKwkJZGF0YVsxMF0gPSAweDE4OworCX0KIAogCXN3aXRjaCAoZ3NwY2FfZGV2LT53aWR0aCkgewogCWNhc2UgMTYwOgpAQCAtNzMxLDYgKzgwNCwxMCBAQAogCQlkYXRhWzRdID0gMHg3ODsgIC8qIHJlZyAzLCBWIHNpemUvNCAqLwogCQlkYXRhWzZdID0gMHgwNDsgIC8qIHJlZyA1LCBIIHN0YXJ0ICovCiAJCWRhdGFbOF0gPSAweDAzOyAgLyogcmVnIDcsIFYgc3RhcnQgKi8KKwkJaWYgKHNkLT5zZW5zb3JfdHlwZSA9PSAyKSB7CisJCQlkYXRhWzZdID0gMjsKKwkJCWRhdGFbOF0gPSAxOworCQl9CiAJCWlmIChzZC0+ZG9fbGNkX3N0b3ApCiAJCQlkYXRhWzhdID0gMHgwNDsgIC8qIEJheWVyIHRpbGUgc2hpZnRlZCAqLwogCQlicmVhazsKQEAgLTc1Myw3ICs4MzAsNiBAQAogCQlyZXR1cm4gZXJyX2NvZGU7CiAKIAlpZiAoIXNkLT5zZW5zb3JfdHlwZSkgewotCQkvKiBUaGUgb25seSBrbm93biBzZW5zb3JfdHlwZSAwIGNhbSBpcyB0aGUgQXJndXMgREMtMTYyMCAqLwogCQljb25zdCBzdHJ1Y3Qgc2Vuc29yX3dfZGF0YSB2Z2Ffc2Vuc29yMF9pbml0X2RhdGFbXSA9IHsKIAkJCXsweDAxLCAweDAwLCB7MHgwYywgMHgwMCwgMHgwNH0sIDN9LAogCQkJezB4MTQsIDB4MDAsIHsweDAxLCAweGU0LCAweDAyLCAweDg0fSwgNH0sCkBAIC03NjQsNyArODQwLDcgQEAKIAkJfTsKIAkJZXJyX2NvZGUgPSBzZW5zb3Jfd3JpdGVfcmVncyhnc3BjYV9kZXYsIHZnYV9zZW5zb3IwX2luaXRfZGF0YSwKIAkJCQkJIEFSUkFZX1NJWkUodmdhX3NlbnNvcjBfaW5pdF9kYXRhKSk7Ci0JfSBlbHNlIHsJLyogc2QtPnNlbnNvcl90eXBlID0gMSAqLworCX0gZWxzZSBpZiAoc2QtPnNlbnNvcl90eXBlID09IDEpIHsKIAkJY29uc3Qgc3RydWN0IHNlbnNvcl93X2RhdGEgY29sb3JfYWRqW10gPSB7CiAJCQl7MHgwMiwgMHgwMCwgezB4MDYsIDB4NTksIDB4MGMsIDB4MTYsIDB4MDAsCiAJCQkJLyogYWRqdXN0ZWQgYmx1ZSwgZ3JlZW4sIHJlZCBnYWluIGNvcnJlY3QKQEAgLTgwMiw2ICs4NzgsNDggQEAKIAogCQllcnJfY29kZSA9IHNlbnNvcl93cml0ZV9yZWdzKGdzcGNhX2RldiwgdmdhX3NlbnNvcjFfaW5pdF9kYXRhLAogCQkJCQkgQVJSQVlfU0laRSh2Z2Ffc2Vuc29yMV9pbml0X2RhdGEpKTsKKwl9IGVsc2UgewkvKiBzZW5zb3IgdHlwZSA9PSAyICovCisJCWNvbnN0IHN0cnVjdCBzZW5zb3Jfd19kYXRhIHZnYV9zZW5zb3IyX2luaXRfZGF0YVtdID0geworCisJCQl7MHgwMSwgMHgwMCwgezB4NDh9LCAxfSwKKwkJCXsweDAyLCAweDAwLCB7MHgyMn0sIDF9LAorCQkJLyogUmVnIDMgbXNiIGFuZCA0IGlzIGxzYiBvZiB0aGUgZXhwb3N1cmUgc2V0dGluZyovCisJCQl7MHgwNSwgMHgwMCwgezB4MTB9LCAxfSwKKwkJCXsweDA2LCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezB4MDcsIDB4MDAsIHsweDAwfSwgMX0sCisJCQl7MHgwOCwgMHgwMCwgezB4MDB9LCAxfSwKKwkJCXsweDA5LCAweDAwLCB7MHgwMH0sIDF9LAorCQkJLyogVGhlIGZvbGxvd2luZyBhcmUgdXNlZCBpbiB0aGUgZ2FpbiBjb250cm9sCisJCQkgKiB3aGljaCBpcyBCVFcgY29tcGxldGVseSBib3JrZWQgaW4gdGhlIE9FTSBkcml2ZXIKKwkJCSAqIFRoZSB2YWx1ZXMgZm9yIGVhY2ggY29sb3IgZ28gZnJvbSAwIHRvIDB4N2ZmCisJCQkgKnsweDBhLCAweDAwLCB7MHgwMX0sIDF9LCAgZ3JlZW4xIGdhaW4gbXNiCisJCQkgKnsweDBiLCAweDAwLCB7MHgxMH0sIDF9LCAgZ3JlZW4xIGdhaW4gbHNiCisJCQkgKnsweDBjLCAweDAwLCB7MHgwMX0sIDF9LCAgcmVkIGdhaW4gbXNiCisJCQkgKnsweDBkLCAweDAwLCB7MHgxMH0sIDF9LCAgcmVkIGdhaW4gbHNiCisJCQkgKnsweDBlLCAweDAwLCB7MHgwMX0sIDF9LCAgYmx1ZSBnYWluIG1zYgorCQkJICp7MHgwZiwgMHgwMCwgezB4MTB9LCAxfSwgIGJsdWUgZ2FpbiBsc2IKKwkJCSAqezB4MTAsIDB4MDAsIHsweDAxfSwgMX0sIGdyZWVuMiBnYWluIG1zYgorCQkJICp7MHgxMSwgMHgwMCwgezB4MTB9LCAxfSwgZ3JlZW4yIGdhaW4gbHNiCisJCQkgKi8KKwkJCXsweDEyLCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezB4MTMsIDB4MDAsIHsweDA0fSwgMX0sIC8qIHdlaXJkIGVmZmVjdCBvbiBjb2xvcnMgKi8KKwkJCXsweDE0LCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezB4MTUsIDB4MDAsIHsweDA2fSwgMX0sCisJCQl7MHgxNiwgMHgwMCwgezB4MDF9LCAxfSwKKwkJCXsweDE3LCAweDAwLCB7MHhlMn0sIDF9LCAvKiB2ZXJ0aWNhbCBhbGlnbm1lbnQgKi8KKwkJCXsweDE4LCAweDAwLCB7MHgwMn0sIDF9LAorCQkJezB4MTksIDB4MDAsIHsweDgyfSwgMX0sIC8qIGRvbid0IG1lc3Mgd2l0aCAqLworCQkJezB4MWEsIDB4MDAsIHsweDAwfSwgMX0sCisJCQl7MHgxYiwgMHgwMCwgezB4MjB9LCAxfSwKKwkJCS8qIHsweDFjLCAweDAwLCB7MHgxN30sIDF9LCBjb250cmFzdCBjb250cm9sICovCisJCQl7MHgxZCwgMHgwMCwgezB4ODB9LCAxfSwgLyogbW92aW5nIGNhdXNlcyBhIG1lc3MgKi8KKwkJCXsweDFlLCAweDAwLCB7MHgwOH0sIDF9LCAvKiBtb3ZpbmcgamFtcyB0aGUgY2FtZXJhICovCisJCQl7MHgxZiwgMHgwMCwgezB4MGN9LCAxfSwKKwkJCXsweDIwLCAweDAwLCB7MHgwMH0sIDF9LAorCQkJezAsIDAsIHswfSwgMH0KKwkJfTsKKwkJZXJyX2NvZGUgPSBzZW5zb3Jfd3JpdGVfcmVncyhnc3BjYV9kZXYsIHZnYV9zZW5zb3IyX2luaXRfZGF0YSwKKwkJCQkJIEFSUkFZX1NJWkUodmdhX3NlbnNvcjJfaW5pdF9kYXRhKSk7CiAJfQogCXJldHVybiBlcnJfY29kZTsKIH0KQEAgLTgzNCw2ICs5NTIsNyBAQAogCQlyZXR1cm4gZXJyX2NvZGU7CiAKIAlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAlzZXRleHBvc3VyZShnc3BjYV9kZXYpOwogCXNldGdhaW4oZ3NwY2FfZGV2KTsKIApAQCAtODkzLDcgKzEwMTIsNyBAQAogc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgZXhwb3N1cmU7CisJaW50IGV4cG9zdXJlID0gTVI5NzMxMEFfRVhQT1NVUkVfREVGQVVMVDsKIAl1OCBidWZbMl07CiAKIAlpZiAoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IEVYUE9TVVJFX0lEWCkpCkBAIC05MDUsNiArMTAyNCwxMSBAQAogCQlleHBvc3VyZSA9IChzZC0+ZXhwb3N1cmUgKiA5MjY3KSAvIDEwMDAwICsgMzAwOwogCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMywgZXhwb3N1cmUgPj4gNCk7CiAJCXNlbnNvcl93cml0ZTEoZ3NwY2FfZGV2LCA0LCBleHBvc3VyZSAmIDB4MGYpOworCX0gZWxzZSBpZiAoc2QtPnNlbnNvcl90eXBlID09IDIpIHsKKwkJZXhwb3N1cmUgPSBzZC0+ZXhwb3N1cmU7CisJCWV4cG9zdXJlID4+PSAzOworCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMywgZXhwb3N1cmUgPj4gOCk7CisJCXNlbnNvcl93cml0ZTEoZ3NwY2FfZGV2LCA0LCBleHBvc3VyZSAmIDB4ZmYpOwogCX0gZWxzZSB7CiAJCS8qIFdlIGhhdmUgYm90aCBhIGNsb2NrIGRpdmlkZXIgYW5kIGFuIGV4cG9zdXJlIHJlZ2lzdGVyLgogCQkgICBXZSBmaXJzdCBjYWxjdWxhdGUgdGhlIGNsb2NrIGRpdmlkZXIsIGFzIHRoYXQgZGV0ZXJtaW5lcwpAQCAtOTQzLDE3ICsxMDY3LDM0IEBACiBzdGF0aWMgdm9pZCBzZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggZ2FpbnJlZzsKIAotCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgR0FJTl9JRFgpKQorCWlmICgoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IEdBSU5fSURYKSkgJiYKKwkgICAgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBTQUtBUl9DU19HQUlOX0lEWCkpKQogCQlyZXR1cm47CiAKLQlpZiAoc2QtPmNhbV90eXBlID09IENBTV9UWVBFX0NJRiAmJiBzZC0+c2Vuc29yX3R5cGUgPT0gMSkgeworCWlmIChzZC0+Y2FtX3R5cGUgPT0gQ0FNX1RZUEVfQ0lGICYmIHNkLT5zZW5zb3JfdHlwZSA9PSAxKQogCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMHgwZSwgc2QtPmdhaW4pOwotCX0gZWxzZSB7CisJZWxzZSBpZiAoc2QtPmNhbV90eXBlID09IENBTV9UWVBFX1ZHQSAmJiBzZC0+c2Vuc29yX3R5cGUgPT0gMikKKwkJZm9yIChnYWlucmVnID0gMHgwYTsgZ2FpbnJlZyA8IDB4MTE7IGdhaW5yZWcgKz0gMikgeworCQkJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIGdhaW5yZWcsIHNkLT5nYWluID4+IDgpOworCQkJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIGdhaW5yZWcgKyAxLCBzZC0+Z2FpbiAmIDB4ZmYpOworCQl9CisJZWxzZQogCQlzZW5zb3Jfd3JpdGUxKGdzcGNhX2RldiwgMHgxMCwgc2QtPmdhaW4pOwotCX0KIH0KIAorc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgQ09OVFJBU1RfSURYKSkKKwkJcmV0dXJuOworCisJc2Vuc29yX3dyaXRlMShnc3BjYV9kZXYsIDB4MWMsIHNkLT5jb250cmFzdCk7Cit9CisKKwogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTEwMDgsNiArMTE0OSwyNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb250cmFzdCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5jb250cmFzdDsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzZF9zZXRtaW5fY2xvY2tkaXYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCmluZGV4IGI0Zjk2NTcuLmJjNGNlZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKQEAgLTM4LDYgKzM4LDcgQEAKICAqLwogI2RlZmluZSBNT0RVTEVfTkFNRSAib3Y1MTkiCiAKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgImdzcGNhLmgiCiAKIE1PRFVMRV9BVVRIT1IoIkplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+Iik7CkBAIC03MCw2ICs3MSw5IEBACiAJY2hhciBpbnZlcnRfbGVkOwogI2RlZmluZSBCUklER0VfSU5WRVJUX0xFRAk4CiAKKwljaGFyIHNuYXBzaG90X3ByZXNzZWQ7CisJY2hhciBzbmFwc2hvdF9uZWVkc19yZXNldDsKKwogCS8qIERldGVybWluZWQgYnkgc2Vuc29yIHR5cGUgKi8KIAlfX3U4IHNpZjsKIApAQCAtOTksMTAgKzEwMywxMiBAQAogI2RlZmluZSBTRU5fT1Y2NjMwOEFGIDUKICNkZWZpbmUgU0VOX09WNzYxMCA2CiAjZGVmaW5lIFNFTl9PVjc2MjAgNwotI2RlZmluZSBTRU5fT1Y3NjQwIDgKLSNkZWZpbmUgU0VOX09WNzY3MCA5Ci0jZGVmaW5lIFNFTl9PVjc2QkUgMTAKLSNkZWZpbmUgU0VOX09WODYxMCAxMQorI2RlZmluZSBTRU5fT1Y3NjIwQUUgOAorI2RlZmluZSBTRU5fT1Y3NjQwIDkKKyNkZWZpbmUgU0VOX09WNzY0OCAxMAorI2RlZmluZSBTRU5fT1Y3NjcwIDExCisjZGVmaW5lIFNFTl9PVjc2QkUgMTIKKyNkZWZpbmUgU0VOX09WODYxMCAxMwogCiAJdTggc2Vuc29yX2FkZHI7CiAJaW50IHNlbnNvcl93aWR0aDsKQEAgLTEzOSw2ICsxNDUsNyBAQAogc3RhdGljIHZvaWQgc2V0ZnJlcShzdHJ1Y3Qgc2QgKnNkKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisjZGVmaW5lIEJSSUdIVE5FU1NfSURYIDAKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtMTUzLDYgKzE2MCw3IEBACiAJICAgIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAogCSAgICAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKIAl9LAorI2RlZmluZSBDT05UUkFTVF9JRFggMQogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULApAQCAtMTY3LDYgKzE3NSw3IEBACiAJICAgIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKIAkgICAgLmdldCA9IHNkX2dldGNvbnRyYXN0LAogCX0sCisjZGVmaW5lIENPTE9SX0lEWCAyCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKQEAgLTI1NTQsNyArMjU2Myw3IEBACiAJCS8qIEkgZG9uJ3Qga25vdyB3aGF0J3MgZGlmZmVyZW50IGFib3V0IHRoZSA3NkJFIHlldC4gKi8KIAkJaWYgKGkyY19yKHNkLCAweDE1KSAmIDEpIHsKIAkJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIGlzIGFuIE9WNzYyMEFFIik7Ci0JCQlzZC0+c2Vuc29yID0gU0VOX09WNzYyMDsKKwkJCXNkLT5zZW5zb3IgPSBTRU5fT1Y3NjIwQUU7CiAJCX0gZWxzZSB7CiAJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhbiBPVjc2QkUiKTsKIAkJCXNkLT5zZW5zb3IgPSBTRU5fT1Y3NkJFOwpAQCAtMjU4OCw3ICsyNTk3LDcgQEAKIAkJCQlicmVhazsKIAkJCWNhc2UgMHg0ODoKIAkJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBpcyBhbiBPVjc2NDgiKTsKLQkJCQlzZC0+c2Vuc29yID0gU0VOX09WNzY0MDsgLyogRklYTUUgKi8KKwkJCQlzZC0+c2Vuc29yID0gU0VOX09WNzY0ODsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJUERFQlVHKERfUFJPQkUsICJVbmtub3duIHNlbnNvcjogMHg3NiV4IiwgbG93KTsKQEAgLTI2ODAsNiArMjY4OSwzNiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgc2RfcmVzZXRfc25hcHNob3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmICghc2QtPnNuYXBzaG90X25lZWRzX3Jlc2V0KQorCQlyZXR1cm47CisKKwkvKiBOb3RlIGl0IGlzIGltcG9ydGFudCB0aGF0IHdlIGNsZWFyIHNkLT5zbmFwc2hvdF9uZWVkc19yZXNldCwKKwkgICBiZWZvcmUgYWN0dWFsbHkgY2xlYXJpbmcgdGhlIHNuYXBzaG90IHN0YXRlIGluIHRoZSBicmlkZ2UKKwkgICBvdGhlcndpc2Ugd2UgbWlnaHQgcmFjZSB3aXRoIHRoZSBwa3Rfc2NhbiBpbnRlcnJ1cHQgaGFuZGxlciAqLworCXNkLT5zbmFwc2hvdF9uZWVkc19yZXNldCA9IDA7CisKKwlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwljYXNlIEJSSURHRV9PVjUxMToKKwljYXNlIEJSSURHRV9PVjUxMVBMVVM6CisJCXJlZ193KHNkLCBSNTF4X1NZU19TTkFQLCAweDAyKTsKKwkJcmVnX3coc2QsIFI1MXhfU1lTX1NOQVAsIDB4MDApOworCQlicmVhazsKKwljYXNlIEJSSURHRV9PVjUxODoKKwljYXNlIEJSSURHRV9PVjUxOFBMVVM6CisJCXJlZ193KHNkLCBSNTF4X1NZU19TTkFQLCAweDAyKTsgLyogUmVzZXQgKi8KKwkJcmVnX3coc2QsIFI1MXhfU1lTX1NOQVAsIDB4MDEpOyAvKiBFbmFibGUgKi8KKwkJYnJlYWs7CisJY2FzZSBCUklER0VfT1Y1MTk6CisJCXJlZ193KHNkLCBSNTF4X1NZU19SRVNFVCwgMHg0MCk7CisJCXJlZ193KHNkLCBSNTF4X1NZU19SRVNFVCwgMHgwMCk7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGludCBvdjUxeF91cGxvYWRfcXVhbl90YWJsZXMoc3RydWN0IHNkICpzZCkKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyIHlRdWFuVGFibGU1MTFbXSA9IHsKQEAgLTMxMTUsNyArMzE1NCwxMSBAQAogCQkJCSAgICAgICgxIDw8IE9WNzY3MF9GUkVRX0lEWCk7CiAJfQogCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7Ci0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCB8fCBzZC0+c2Vuc29yID09IFNFTl9PVjc2NzApCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCB8fAorCSAgICBzZC0+c2Vuc29yID09IFNFTl9PVjc2NDgpCisJCWdzcGNhX2Rldi0+Y3RybF9kaXMgfD0gKDEgPDwgQVVUT0JSSUdIVF9JRFgpIHwKKwkJCQkgICAgICAgKDEgPDwgQ09OVFJBU1RfSURYKTsKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwKQogCQlnc3BjYV9kZXYtPmN0cmxfZGlzIHw9IDEgPDwgQVVUT0JSSUdIVF9JRFg7CiAJLyogT1Y4NjEwIEZyZXF1ZW5jeSBmaWx0ZXIgY29udHJvbCBzaG91bGQgd29yayBidXQgbmVlZHMgdGVzdGluZyAqLwogCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjg2MTApCkBAIC0zMTY5LDEwICszMjEyLDEyIEBACiAJCQlyZXR1cm4gLUVJTzsKIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzYyMEFFOgogCQlpZiAod3JpdGVfaTJjX3JlZ3ZhbHMoc2QsIG5vcm1fNzYyMCwgQVJSQVlfU0laRShub3JtXzc2MjApKSkKIAkJCXJldHVybiAtRUlPOwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NDA6CisJY2FzZSBTRU5fT1Y3NjQ4OgogCQlpZiAod3JpdGVfaTJjX3JlZ3ZhbHMoc2QsIG5vcm1fNzY0MCwgQVJSQVlfU0laRShub3JtXzc2NDApKSkKIAkJCXJldHVybiAtRUlPOwogCQlicmVhazsKQEAgLTMyNDYsNyArMzI5MSw5IEBACiAJLyogTm90ZSBvbmNlIHRoZSBGSVhNRSdzIGluIG1vZGVfaW5pdF9vdl9zZW5zb3JfcmVncygpIGFyZSBmaXhlZAogCSAgIGZvciBtb3JlIHNlbnNvcnMgd2UgbmVlZCB0byBkbyB0aGlzIGZvciB0aGVtIHRvbyAqLwogCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2MjBBRToKIAljYXNlIFNFTl9PVjc2NDA6CisJY2FzZSBTRU5fT1Y3NjQ4OgogCWNhc2UgU0VOX09WNzZCRToKIAkJaWYgKHNkLT5nc3BjYV9kZXYud2lkdGggPT0gMzIwKQogCQkJaW50ZXJsYWNlZCA9IDE7CkBAIC0zMzc3LDcgKzM0MjQsNyBAQAogCiAJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX09WNTE4UExVUykgewogCQlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKLQkJY2FzZSBTRU5fT1Y3NjIwOgorCQljYXNlIFNFTl9PVjc2MjBBRToKIAkJCWlmIChzZC0+Z3NwY2FfZGV2LndpZHRoID09IDMyMCkgewogCQkJCXJlZ193KHNkLCAweDIwLCAweDAwKTsKIAkJCQlyZWdfdyhzZCwgMHgyMSwgMHgxOSk7CkBAIC0zMzg2LDYgKzM0MzMsMTAgQEAKIAkJCQlyZWdfdyhzZCwgMHgyMSwgMHgxZik7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBTRU5fT1Y3NjIwOgorCQkJcmVnX3coc2QsIDB4MjAsIDB4MDApOworCQkJcmVnX3coc2QsIDB4MjEsIDB4MTkpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZWdfdyhzZCwgMHgyMSwgMHgxOSk7CiAJCX0KQEAgLTM0ODgsNyArMzUzOSw4IEBACiAJCWlmICh3cml0ZV9yZWd2YWxzKHNkLCBtb2RlX2luaXRfNTE5LAogCQkJCSAgQVJSQVlfU0laRShtb2RlX2luaXRfNTE5KSkpCiAJCQlyZXR1cm4gLUVJTzsKLQkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCkgeworCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjQwIHx8CisJCSAgICBzZC0+c2Vuc29yID09IFNFTl9PVjc2NDgpIHsKIAkJCS8qIFNlbGVjdCA4LWJpdCBpbnB1dCBtb2RlICovCiAJCQlyZWdfd19tYXNrKHNkLCBPVjUxOV9SMjBfREZSLCAweDEwLCAweDEwKTsKIAkJfQpAQCAtMzUwMyw2ICszNTU1LDkgQEAKIAlpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwICYmCiAJICAgIHNkLT5nc3BjYV9kZXYuY2FtLmNhbV9tb2RlW3NkLT5nc3BjYV9kZXYuY3Vycl9tb2RlXS5wcml2KQogCQlyZWdfdyhzZCwgT1Y1MTlfUjEyX1hfT0ZGU0VUTCwgMHgwNCk7CisJZWxzZSBpZiAoc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjQ4ICYmCisJICAgIHNkLT5nc3BjYV9kZXYuY2FtLmNhbV9tb2RlW3NkLT5nc3BjYV9kZXYuY3Vycl9tb2RlXS5wcml2KQorCQlyZWdfdyhzZCwgT1Y1MTlfUjEyX1hfT0ZGU0VUTCwgMHgwMSk7CiAJZWxzZQogCQlyZWdfdyhzZCwgT1Y1MTlfUjEyX1hfT0ZGU0VUTCwgMHgwMCk7CiAJcmVnX3coc2QsIE9WNTE5X1IxM19YX09GRlNFVEgsCTB4MDApOwpAQCAtMzUyMCw2ICszNTc1LDcgQEAKIAlzZC0+Y2xvY2tkaXYgPSAwOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOX09WNzY0MDoKKwljYXNlIFNFTl9PVjc2NDg6CiAJCXN3aXRjaCAoc2QtPmZyYW1lX3JhdGUpIHsKIAkJZGVmYXVsdDoKIC8qCQljYXNlIDMwOiAqLwpAQCAtMzY0OSw2ICszNzA1LDcgQEAKIAkJaTJjX3dfbWFzayhzZCwgMHgxMiwgMHgwNCwgMHgwNik7IC8qIEFXQjogMSBUZXN0IHBhdHRlcm46IDAgKi8KIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzYyMEFFOgogCWNhc2UgU0VOX09WNzZCRToKIAkJaTJjX3dfbWFzayhzZCwgMHgxNCwgcXZnYSA/IDB4MjAgOiAweDAwLCAweDIwKTsKIAkJaTJjX3dfbWFzayhzZCwgMHgyOCwgcXZnYSA/IDB4MDAgOiAweDIwLCAweDIwKTsKQEAgLTM2NjMsMTMgKzM3MjAsMTYgQEAKIAkJCWkyY193KHNkLCAweDM1LCBxdmdhID8gMHgxZSA6IDB4OWUpOwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NDA6CisJY2FzZSBTRU5fT1Y3NjQ4OgogCQlpMmNfd19tYXNrKHNkLCAweDE0LCBxdmdhID8gMHgyMCA6IDB4MDAsIDB4MjApOwogCQlpMmNfd19tYXNrKHNkLCAweDI4LCBxdmdhID8gMHgwMCA6IDB4MjAsIDB4MjApOwotLyoJCWkyY193KHNkLCAweDI0LCBxdmdhID8gMHgyMCA6IDB4M2EpOyAqLwotLyoJCWkyY193KHNkLCAweDI1LCBxdmdhID8gMHgzMCA6IDB4NjApOyAqLwotLyoJCWkyY193X21hc2soc2QsIDB4MmQsIHF2Z2EgPyAweDQwIDogMHgwMCwgMHg0MCk7ICovCi0vKgkJaTJjX3dfbWFzayhzZCwgMHg2NywgcXZnYSA/IDB4ZjAgOiAweDkwLCAweGYwKTsgKi8KLS8qCQlpMmNfd19tYXNrKHNkLCAweDc0LCBxdmdhID8gMHgyMCA6IDB4MDAsIDB4MjApOyAqLworCQkvKiBTZXR0aW5nIHRoaXMgdW5kb2N1bWVudGVkIGJpdCBpbiBxdmdhIG1vZGUgcmVtb3ZlcyBhIHZlcnkKKwkJICAgYW5ub3lpbmcgdmVydGljYWwgc2hha2luZyBvZiB0aGUgaW1hZ2UgKi8KKwkJaTJjX3dfbWFzayhzZCwgMHgyZCwgcXZnYSA/IDB4NDAgOiAweDAwLCAweDQwKTsKKwkJLyogVW5rbm93biAqLworCQlpMmNfd19tYXNrKHNkLCAweDY3LCBxdmdhID8gMHhmMCA6IDB4OTAsIDB4ZjApOworCQkvKiBBbGxvdyBoaWdoZXIgYXV0b21hdGljIGdhaW4gKHRvIGFsbG93IGhpZ2hlciBmcmFtZXJhdGVzKSAqLworCQlpMmNfd19tYXNrKHNkLCAweDc0LCBxdmdhID8gMHgyMCA6IDB4MDAsIDB4MjApOwogCQlpMmNfd19tYXNrKHNkLCAweDEyLCAweDA0LCAweDA0KTsgLyogQVdCOiAxICovCiAJCWJyZWFrOwogCWNhc2UgU0VOX09WNzY3MDoKQEAgLTM3OTUsMTEgKzM4NTUsMTMgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2MjA6CisJY2FzZSBTRU5fT1Y3NjIwQUU6CiAJCWh3c2Jhc2UgPSAweDJmOwkJLyogRnJvbSA3NjIwLlNFVCAoc3BlYyBpcyB3cm9uZykgKi8KIAkJaHdlYmFzZSA9IDB4MmY7CiAJCXZ3c2Jhc2UgPSB2d2ViYXNlID0gMHgwNTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjQwOgorCWNhc2UgU0VOX09WNzY0ODoKIAkJaHdzYmFzZSA9IDB4MWE7CiAJCWh3ZWJhc2UgPSAweDFhOwogCQl2d3NiYXNlID0gdndlYmFzZSA9IDB4MDM7CkBAIC0zODkzLDYgKzM5NTUsMTIgQEAKIAlzZXRhdXRvYnJpZ2h0bmVzcyhzZCk7CiAJc2V0ZnJlcShzZCk7CiAKKwkvKiBGb3JjZSBjbGVhciBzbmFwc2hvdCBzdGF0ZSBpbiBjYXNlIHRoZSBzbmFwc2hvdCBidXR0b24gd2FzCisJICAgcHJlc3NlZCB3aGlsZSB3ZSB3ZXJlbid0IHN0cmVhbWluZyAqLworCXNkLT5zbmFwc2hvdF9uZWVkc19yZXNldCA9IDE7CisJc2RfcmVzZXRfc25hcHNob3QoZ3NwY2FfZGV2KTsKKwlzZC0+c25hcHNob3RfcHJlc3NlZCA9IDA7CisKIAlyZXQgPSBvdjUxeF9yZXN0YXJ0KHNkKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CkBAIC0zOTE5LDYgKzM5ODcsMzQgQEAKIAkJdzk5NjhjZl9zdG9wMChzZCk7CiB9CiAKK3N0YXRpYyB2b2lkIG92NTF4X2hhbmRsZV9idXR0b24oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1OCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoc2QtPnNuYXBzaG90X3ByZXNzZWQgIT0gc3RhdGUpIHsKKyNpZmRlZiBDT05GSUdfSU5QVVQKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgc3RhdGUpOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKyNlbmRpZgorCQlpZiAoc3RhdGUpCisJCQlzZC0+c25hcHNob3RfbmVlZHNfcmVzZXQgPSAxOworCisJCXNkLT5zbmFwc2hvdF9wcmVzc2VkID0gc3RhdGU7CisJfSBlbHNlIHsKKwkJLyogT24gdGhlIG92NTExIC8gb3Y1MTkgd2UgbmVlZCB0byByZXNldCB0aGUgYnV0dG9uIHN0YXRlCisJCSAgIG11bHRpcGxlIHRpbWVzLCBhcyByZXNldHRpbmcgZG9lcyBub3Qgd29yayBhcyBsb25nIGFzIHRoZQorCQkgICBidXR0b24gc3RheXMgcHJlc3NlZCAqLworCQlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKKwkJY2FzZSBCUklER0VfT1Y1MTE6CisJCWNhc2UgQlJJREdFX09WNTExUExVUzoKKwkJY2FzZSBCUklER0VfT1Y1MTk6CisJCQlpZiAoc3RhdGUpCisJCQkJc2QtPnNuYXBzaG90X25lZWRzX3Jlc2V0ID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCiBzdGF0aWMgdm9pZCBvdjUxMV9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQl1OCAqaW4sCQkJLyogaXNvYyBwYWNrZXQgKi8KIAkJCWludCBsZW4pCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLwpAQCAtMzk0MCw2ICs0MDM2LDcgQEAKIAkgKi8KIAlpZiAoIShpblswXSB8IGluWzFdIHwgaW5bMl0gfCBpblszXSB8IGluWzRdIHwgaW5bNV0gfCBpbls2XSB8IGluWzddKSAmJgogCSAgICAoaW5bOF0gJiAweDA4KSkgeworCQlvdjUxeF9oYW5kbGVfYnV0dG9uKGdzcGNhX2RldiwgKGluWzhdID4+IDIpICYgMSk7CiAJCWlmIChpbls4XSAmIDB4ODApIHsKIAkJCS8qIEZyYW1lIGVuZCAqLwogCQkJaWYgKChpbls5XSArIDEpICogOCAhPSBnc3BjYV9kZXYtPndpZHRoIHx8CkBAIC0zOTc3LDYgKzQwNzQsNyBAQAogCS8qIEEgZmFsc2UgcG9zaXRpdmUgaGVyZSBpcyBsaWtlbHksIHVudGlsIE9WVCBnaXZlcyBtZQogCSAqIHRoZSBkZWZpbml0aXZlIFNPRi9FT0YgZm9ybWF0ICovCiAJaWYgKCghKGRhdGFbMF0gfCBkYXRhWzFdIHwgZGF0YVsyXSB8IGRhdGFbM10gfCBkYXRhWzVdKSkgJiYgZGF0YVs2XSkgeworCQlvdjUxeF9oYW5kbGVfYnV0dG9uKGdzcGNhX2RldiwgKGRhdGFbNl0gPj4gMSkgJiAxKTsKIAkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIE5VTEwsIDApOwogCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIE5VTEwsIDApOwogCQlzZC0+cGFja2V0X25yID0gMDsKQEAgLTQwMjQsNiArNDEyMiw5IEBACiAJaWYgKGRhdGFbMF0gPT0gMHhmZiAmJiBkYXRhWzFdID09IDB4ZmYgJiYgZGF0YVsyXSA9PSAweGZmKSB7CiAJCXN3aXRjaCAoZGF0YVszXSkgewogCQljYXNlIDB4NTA6CQkvKiBzdGFydCBvZiBmcmFtZSAqLworCQkJLyogRG9uJ3QgY2hlY2sgdGhlIGJ1dHRvbiBzdGF0ZSBoZXJlLCBhcyB0aGUgc3RhdGUKKwkJCSAgIHVzdWFsbHkgKGFsd2F5cyA/KSBjaGFuZ2VzIGF0IEVPRiBhbmQgY2hlY2tpbmcgaXQKKwkJCSAgIGhlcmUgbGVhZHMgdG8gdW5uZWNlc3Nhcnkgc25hcHNob3Qgc3RhdGUgcmVzZXRzLiAqLwogI2RlZmluZSBIRFJTWiAxNgogCQkJZGF0YSArPSBIRFJTWjsKIAkJCWxlbiAtPSBIRFJTWjsKQEAgLTQwMzUsNiArNDEzNiw3IEBACiAJCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CiAJCQlyZXR1cm47CiAJCWNhc2UgMHg1MToJCS8qIGVuZCBvZiBmcmFtZSAqLworCQkJb3Y1MXhfaGFuZGxlX2J1dHRvbihnc3BjYV9kZXYsIGRhdGFbMTFdICYgMSk7CiAJCQlpZiAoZGF0YVs5XSAhPSAwKQogCQkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOwogCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCkBAIC00MTAzLDkgKzQyMDUsMTEgQEAKIAljYXNlIFNFTl9PVjY2MzA6CiAJY2FzZSBTRU5fT1Y2NjMwOEFGOgogCWNhc2UgU0VOX09WNzY0MDoKKwljYXNlIFNFTl9PVjc2NDg6CiAJCWkyY193KHNkLCBPVjc2MTBfUkVHX0JSVCwgdmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzYyMEFFOgogCQkvKiA3NjIwIGRvZXNuJ3QgbGlrZSBtYW51YWwgY2hhbmdlcyB3aGVuIGluIGF1dG8gbW9kZSAqLwogCQlpZiAoIXNkLT5hdXRvYnJpZ2h0bmVzcykKIAkJCWkyY193KHNkLCBPVjc2MTBfUkVHX0JSVCwgdmFsKTsKQEAgLTQxNDIsNyArNDI0Niw4IEBACiAJCWkyY193KHNkLCAweDY0LCBjdGFiW3ZhbCA+PiA1XSk7CiAJCWJyZWFrOwogCSAgICB9Ci0JY2FzZSBTRU5fT1Y3NjIwOiB7CisJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzYyMEFFOiB7CiAJCXN0YXRpYyBjb25zdCBfX3U4IGN0YWJbXSA9IHsKIAkJCTB4MDEsIDB4MDUsIDB4MDksIDB4MTEsIDB4MTUsIDB4MzUsIDB4MzcsIDB4NTcsCiAJCQkweDViLCAweGE1LCAweGE3LCAweGM3LCAweGM5LCAweGNmLCAweGVmLCAweGZmCkBAIC00MTUyLDEwICs0MjU3LDYgQEAKIAkJaTJjX3coc2QsIDB4NjQsIGN0YWJbdmFsID4+IDRdKTsKIAkJYnJlYWs7CiAJICAgIH0KLQljYXNlIFNFTl9PVjc2NDA6Ci0JCS8qIFVzZSBnYWluIGNvbnRyb2wgaW5zdGVhZC4gKi8KLQkJaTJjX3coc2QsIE9WNzYxMF9SRUdfR0FJTiwgdmFsID4+IDIpOwotCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NzA6CiAJCS8qIGNoZWNrIHRoYXQgdGhpcyBpc24ndCBqdXN0IHRoZSBzYW1lIGFzIG92NzYxMCAqLwogCQlpMmNfdyhzZCwgT1Y3NjcwX1JFR19DT05UUkFTLCB2YWwgPj4gMSk7CkBAIC00MTc5LDYgKzQyODAsNyBAQAogCQlpMmNfdyhzZCwgT1Y3NjEwX1JFR19TQVQsIHZhbCk7CiAJCWJyZWFrOwogCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2MjBBRToKIAkJLyogVXNlIFVWIGdhbW1hIGNvbnRyb2wgaW5zdGVhZC4gQml0cyAwICYgNyBhcmUgcmVzZXJ2ZWQuICovCiAvKgkJcmMgPSBvdl9pMmNfd3JpdGUoc2QtPmRldiwgMHg2MiwgKHZhbCA+PiA5KSAmIDB4N2UpOwogCQlpZiAocmMgPCAwKQpAQCAtNDE4Niw2ICs0Mjg4LDcgQEAKIAkJaTJjX3coc2QsIE9WNzYxMF9SRUdfU0FULCB2YWwpOwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NDA6CisJY2FzZSBTRU5fT1Y3NjQ4OgogCQlpMmNfdyhzZCwgT1Y3NjEwX1JFR19TQVQsIHZhbCAmIDB4ZjApOwogCQlicmVhazsKIAljYXNlIFNFTl9PVjc2NzA6CkBAIC00MTk4LDcgKzQzMDEsOCBAQAogCiBzdGF0aWMgdm9pZCBzZXRhdXRvYnJpZ2h0bmVzcyhzdHJ1Y3Qgc2QgKnNkKQogewotCWlmIChzZC0+c2Vuc29yID09IFNFTl9PVjc2NDAgfHwgc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwIHx8CisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOX09WNzY0MCB8fCBzZC0+c2Vuc29yID09IFNFTl9PVjc2NDggfHwKKwkgICAgc2QtPnNlbnNvciA9PSBTRU5fT1Y3NjcwIHx8CiAJICAgIHNkLT5zZW5zb3IgPT0gU0VOX09WMjYxMCB8fCBzZC0+c2Vuc29yID09IFNFTl9PVjM2MTApCiAJCXJldHVybjsKIApAQCAtNDQ3NSw5ICs0NTc5LDEzIEBACiAJLnN0b3BOID0gc2Rfc3RvcE4sCiAJLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCisJLmRxX2NhbGxiYWNrID0gc2RfcmVzZXRfc25hcHNob3QsCiAJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKIAkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAogCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCisjaWZkZWYgQ09ORklHX0lOUFVUCisJLm90aGVyX2lucHV0ID0gMSwKKyNlbmRpZgogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCkBAIC00NDk0LDcgKzQ2MDIsOCBAQAogCSAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfCBCUklER0VfSU5WRVJUX0xFRCB9LAogCXtVU0JfREVWSUNFKDB4MDQ1ZSwgMHgwMjhjKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IH0sCiAJe1VTQl9ERVZJQ0UoMHgwNTRjLCAweDAxNTQpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfSwKLQl7VVNCX0RFVklDRSgweDA1NGMsIDB4MDE1NSksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxOSB9LAorCXtVU0JfREVWSUNFKDB4MDU0YywgMHgwMTU1KSwKKwkgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE5IHwgQlJJREdFX0lOVkVSVF9MRUQgfSwKIAl7VVNCX0RFVklDRSgweDA1YTksIDB4MDUxMSksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9PVjUxMSB9LAogCXtVU0JfREVWSUNFKDB4MDVhOSwgMHgwNTE4KSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX09WNTE4IH0sCiAJe1VTQl9ERVZJQ0UoMHgwNWE5LCAweDA1MTkpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfT1Y1MTkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYwppbmRleCAwYTZiOGYwLi45NTdlMDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIG92NTM0IGdzcGNhIGRyaXZlcgorICogb3Y1MzQtb3Y3NzJ4IGdzcGNhIGRyaXZlcgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbnRvbmlvIE9zcGl0ZSA8b3NwaXRlQHN0dWRlbnRpLnVuaW5hLml0PgogICogQ29weXJpZ2h0IChDKSAyMDA4IEppbSBQYXJpcyA8amltQGp0YW4uY29tPgpAQCAtNjgsMTIgKzY4LDcgQEAKIAlzOCBzaGFycG5lc3M7CiAJdTggaGZsaXA7CiAJdTggdmZsaXA7Ci0JdTggc2F0dXI7Ci0JdTggbGlnaHRmcmVxOwogCi0JdTggc2Vuc29yOwotI2RlZmluZSBTRU5TT1JfT1Y3NzJYIDAKLSNkZWZpbmUgU0VOU09SX09WOTY1WCAxCiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC0xMDEsMTIgKzk2LDggQEAKIHN0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7Ci1zdGF0aWMgaW50IHNkX3NldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKLXN0YXRpYyBpbnQgc2RfZ2V0c2F0dXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKLXN0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7Ci1zdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzX292NzcyeFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAgICAgewkJCQkJCQkvKiAwICovCiAJewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC0xMTUsOCArMTA2LDggQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDI1NSwKIAkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBCUklHSFRORVNTXzc3X0RFRiAyMAotCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfNzdfREVGLAorI2RlZmluZSBCUklHSFRORVNTX0RFRiAyMAorCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAogCX0sCiAJLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCiAJLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCkBAIC0xMjksOCArMTIwLDggQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDI1NSwKIAkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBDT05UUkFTVF83N19ERUYgMzcKLQkJLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF83N19ERUYsCisjZGVmaW5lIENPTlRSQVNUX0RFRiAzNworCQkuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKIAl9LAogCS5zZXQgPSBzZF9zZXRjb250cmFzdCwKIAkuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCkBAIC0xNTcsOCArMTQ4LDggQEAKIAkgICAgLm1pbmltdW0gPSAwLAogCSAgICAubWF4aW11bSA9IDI1NSwKIAkgICAgLnN0ZXAgICAgPSAxLAotI2RlZmluZSBFWFBPXzc3X0RFRiAxMjAKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSBFWFBPXzc3X0RFRiwKKyNkZWZpbmUgRVhQT19ERUYgMTIwCisJICAgIC5kZWZhdWx0X3ZhbHVlID0gRVhQT19ERUYsCiAJfSwKIAkuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCiAJLmdldCA9IHNkX2dldGV4cG9zdXJlLApAQCAtMjEzLDEzICsyMDQsMTMgQEAKIAkgICAgLm1pbmltdW0gPSAwLAogCSAgICAubWF4aW11bSA9IDEsCiAJICAgIC5zdGVwICAgID0gMSwKLSNkZWZpbmUgQVVUT0dBSU5fNzdfREVGIDAKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSBBVVRPR0FJTl83N19ERUYsCisjZGVmaW5lIEFVVE9HQUlOX0RFRiAwCisJICAgIC5kZWZhdWx0X3ZhbHVlID0gQVVUT0dBSU5fREVGLAogCX0sCiAJLnNldCA9IHNkX3NldGF1dG9nYWluLAogCS5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKICAgICB9LAotI2RlZmluZSBBV0JfNzdfSURYIDgKKyNkZWZpbmUgQVdCX0lEWCA4CiAgICAgewkJCQkJCQkvKiA4ICovCiAJewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRSwKQEAgLTI0Miw4ICsyMzMsOCBAQAogCSAgICAubWluaW11bSA9IDAsCiAJICAgIC5tYXhpbXVtID0gNjMsCiAJICAgIC5zdGVwICAgID0gMSwKLSNkZWZpbmUgU0hBUlBORVNTXzc3X0RFRiAwCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTXzc3X0RFRiwKKyNkZWZpbmUgU0hBUlBORVNTX0RFRiAwCisJICAgIC5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTX0RFRiwKIAl9LAogCS5zZXQgPSBzZF9zZXRzaGFycG5lc3MsCiAJLmdldCA9IHNkX2dldHNoYXJwbmVzcywKQEAgLTI3NywxMDcgKzI2OCw2IEBACiAJLmdldCA9IHNkX2dldHZmbGlwLAogICAgIH0sCiB9Owotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzX292OTY1eFtdID0gewotICAgIHsJCQkJCQkJLyogMCAqLwotCXsKLQkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAotCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCS5uYW1lICAgID0gIkJyaWdodG5lc3MiLAotCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gMTUsCi0JCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgQlJJR0hUTkVTU185Nl9ERUYgNwotCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfOTZfREVGLAotCX0sCi0JLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCi0JLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCi0gICAgfSwKLSAgICB7CQkJCQkJCS8qIDEgKi8KLQl7Ci0JCS5pZCAgICAgID0gVjRMMl9DSURfQ09OVFJBU1QsCi0JCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUgICAgPSAiQ29udHJhc3QiLAotCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gMTUsCi0JCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgQ09OVFJBU1RfOTZfREVGIDMKLQkJLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF85Nl9ERUYsCi0JfSwKLQkuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCi0JLmdldCA9IHNkX2dldGNvbnRyYXN0LAotICAgIH0sCi0gICAgewkJCQkJCQkvKiAyICovCi0JewotCSAgICAuaWQgICAgICA9IFY0TDJfQ0lEX0FVVE9HQUlOLAotCSAgICAudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JICAgIC5uYW1lICAgID0gIkF1dG9nYWluIiwKLQkgICAgLm1pbmltdW0gPSAwLAotCSAgICAubWF4aW11bSA9IDEsCi0JICAgIC5zdGVwICAgID0gMSwKLSNkZWZpbmUgQVVUT0dBSU5fOTZfREVGIDEKLQkgICAgLmRlZmF1bHRfdmFsdWUgPSBBVVRPR0FJTl85Nl9ERUYsCi0JfSwKLQkuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCi0JLmdldCA9IHNkX2dldGF1dG9nYWluLAotICAgIH0sCi0jZGVmaW5lIEVYUE9fOTZfSURYIDMKLSAgICB7CQkJCQkJCS8qIDMgKi8KLQl7Ci0JICAgIC5pZCAgICAgID0gVjRMMl9DSURfRVhQT1NVUkUsCi0JICAgIC50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkgICAgLm5hbWUgICAgPSAiRXhwb3N1cmUiLAotCSAgICAubWluaW11bSA9IDAsCi0JICAgIC5tYXhpbXVtID0gMywKLQkgICAgLnN0ZXAgICAgPSAxLAotI2RlZmluZSBFWFBPXzk2X0RFRiAwCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gRVhQT185Nl9ERUYsCi0JfSwKLQkuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCi0JLmdldCA9IHNkX2dldGV4cG9zdXJlLAotICAgIH0sCi0gICAgewkJCQkJCQkvKiA0ICovCi0JewotCSAgICAuaWQgICAgICA9IFY0TDJfQ0lEX1NIQVJQTkVTUywKLQkgICAgLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCSAgICAubmFtZSAgICA9ICJTaGFycG5lc3MiLAotCSAgICAubWluaW11bSA9IC0xLAkJLyogLTEgPSBhdXRvICovCi0JICAgIC5tYXhpbXVtID0gNCwKLQkgICAgLnN0ZXAgICAgPSAxLAotI2RlZmluZSBTSEFSUE5FU1NfOTZfREVGIC0xCi0JICAgIC5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTXzk2X0RFRiwKLQl9LAotCS5zZXQgPSBzZF9zZXRzaGFycG5lc3MsCi0JLmdldCA9IHNkX2dldHNoYXJwbmVzcywKLSAgICB9LAotICAgIHsJCQkJCQkJLyogNSAqLwotCXsKLQkJLmlkICAgICAgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAotCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCS5uYW1lICAgID0gIlNhdHVyYXRpb24iLAotCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gNCwKLQkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBTQVRVUl9ERUYgMgotCQkuZGVmYXVsdF92YWx1ZSA9IFNBVFVSX0RFRiwKLQl9LAotCS5zZXQgPSBzZF9zZXRzYXR1ciwKLQkuZ2V0ID0gc2RfZ2V0c2F0dXIsCi0gICAgfSwKLSAgICB7Ci0JewotCQkuaWQJID0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCi0JCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfTUVOVSwKLQkJLm5hbWUgICAgPSAiTGlnaHQgZnJlcXVlbmN5IGZpbHRlciIsCi0JCS5taW5pbXVtID0gMCwKLQkJLm1heGltdW0gPSAyLAkvKiAwOiAwLCAxOiA1MEh6LCAyOjYwSHogKi8KLQkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBGUkVRX0RFRiAwCi0JCS5kZWZhdWx0X3ZhbHVlID0gRlJFUV9ERUYsCi0JfSwKLQkuc2V0ID0gc2Rfc2V0ZnJlcSwKLQkuZ2V0ID0gc2RfZ2V0ZnJlcSwKLSAgICB9LAotfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgb3Y3NzJ4X21vZGVbXSA9IHsKIAl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9ZVVlWLCBWNEwyX0ZJRUxEX05PTkUsCkBAIC0zOTIsMzUgKzI4MiwyMSBAQAogCSAucHJpdiA9IDB9LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgb3Y5NjV4X21vZGVbXSA9IHsKLQl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCi0JIC5ieXRlc3BlcmxpbmUgPSAzMjAsCi0JIC5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU5MCwKLQkgLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkgLnByaXYgPSA0fSwKLQl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCi0JIC5ieXRlc3BlcmxpbmUgPSA2NDAsCi0JIC5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAzIC8gOCArIDU5MCwKLQkgLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkgLnByaXYgPSAzfSwKLQl7ODAwLCA2MDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCi0JIC5ieXRlc3BlcmxpbmUgPSA4MDAsCi0JIC5zaXplaW1hZ2UgPSA4MDAgKiA2MDAgKiAzIC8gOCArIDU5MCwKLQkgLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkgLnByaXYgPSAyfSwKLQl7MTAyNCwgNzY4LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAotCSAuYnl0ZXNwZXJsaW5lID0gMTAyNCwKLQkgLnNpemVpbWFnZSA9IDEwMjQgKiA3NjggKiAzIC8gOCArIDU5MCwKLQkgLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkgLnByaXYgPSAxfSwKLQl7MTI4MCwgMTAyNCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKLQkgLmJ5dGVzcGVybGluZSA9IDEyODAsCi0JIC5zaXplaW1hZ2UgPSAxMjgwICogMTAyNCAqIDMgLyA4ICsgNTkwLAotCSAuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAotCSAucHJpdiA9IDB9LAorc3RhdGljIGNvbnN0IHU4IHF2Z2FfcmF0ZXNbXSA9IHsxMjUsIDEwMCwgNzUsIDYwLCA1MCwgNDAsIDMwfTsKK3N0YXRpYyBjb25zdCB1OCB2Z2FfcmF0ZXNbXSA9IHs2MCwgNTAsIDQwLCAzMCwgMTV9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZyYW1lcmF0ZXMgb3Y3NzJ4X2ZyYW1lcmF0ZXNbXSA9IHsKKwl7IC8qIDMyMHgyNDAgKi8KKwkJLnJhdGVzID0gcXZnYV9yYXRlcywKKwkJLm5yYXRlcyA9IEFSUkFZX1NJWkUocXZnYV9yYXRlcyksCisJfSwKKwl7IC8qIDY0MHg0ODAgKi8KKwkJLnJhdGVzID0gdmdhX3JhdGVzLAorCQkubnJhdGVzID0gQVJSQVlfU0laRSh2Z2FfcmF0ZXMpLAorCX0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRfb3Y3NzJ4W11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRbXVsyXSA9IHsKIAl7IDB4YzIsIDB4MGMgfSwKIAl7IDB4ODgsIDB4ZjggfSwKIAl7IDB4YzMsIDB4NjkgfSwKQEAgLTQ3OCw3ICszNTQsNyBAQAogCXsgMHhjMSwgMHgzYyB9LAogCXsgMHhjMiwgMHgwYyB9LAogfTsKLXN0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdF9vdjc3MnhbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdFtdWzJdID0gewogCXsgMHgxMiwgMHg4MCB9LAogCXsgMHgxMSwgMHgwMSB9LAogLypmaXhtZTogYmV0dGVyIGhhdmUgYSBkZWxheT8qLwpAQCAtNTcxLDcgKzQ0Nyw3IEBACiAJeyAweDhlLCAweDAwIH0sCQkvKiBEZS1ub2lzZSB0aHJlc2hvbGQgKi8KIAl7IDB4MGMsIDB4ZDAgfQogfTsKLXN0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfb3Y3NzJ4X3ZnYVtdWzJdID0geworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF92Z2FbXVsyXSA9IHsKIAl7MHgxYywgMHgwMH0sCiAJezB4MWQsIDB4NDB9LAogCXsweDFkLCAweDAyfSwKQEAgLTU4Miw3ICs0NTgsNyBAQAogCXsweGMwLCAweDUwfSwKIAl7MHhjMSwgMHgzY30sCiB9Owotc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9vdjc3MnhfdmdhW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X3ZnYVtdWzJdID0gewogCXsweDEyLCAweDAwfSwKIAl7MHgxNywgMHgyNn0sCiAJezB4MTgsIDB4YTB9LApAQCAtNTkyLDcgKzQ2OCw3IEBACiAJezB4MmMsIDB4ZjB9LAogCXsweDY1LCAweDIwfSwKIH07Ci1zdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X292NzcyeF9xdmdhW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X3F2Z2FbXVsyXSA9IHsKIAl7MHgxYywgMHgwMH0sCiAJezB4MWQsIDB4NDB9LAogCXsweDFkLCAweDAyfSwKQEAgLTYwMyw3ICs0NzksNyBAQAogCXsweGMwLCAweDI4fSwKIAl7MHhjMSwgMHgxZX0sCiB9Owotc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9vdjc3MnhfcXZnYVtdWzJdID0geworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9xdmdhW11bMl0gPSB7CiAJezB4MTIsIDB4NDB9LAogCXsweDE3LCAweDNmfSwKIAl7MHgxOCwgMHg1MH0sCkBAIC02MTQsNTcxICs0OTAsNiBAQAogCXsweDY1LCAweDJmfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1OCBicmlkZ2VfaW5pdF9vdjk2NXhbXVsyXSA9IHsKLQl7MHg4OCwgMHhmOH0sCi0JezB4ODksIDB4ZmZ9LAotCXsweDc2LCAweDAzfSwKLQl7MHg5MiwgMHgwM30sCi0JezB4OTUsIDB4MTB9LAotCXsweGUyLCAweDAwfSwKLQl7MHhlNywgMHgzZX0sCi0JezB4OGQsIDB4MWN9LAotCXsweDhlLCAweDAwfSwKLQl7MHg4ZiwgMHgwMH0sCi0JezB4MWYsIDB4MDB9LAotCXsweGMzLCAweGY5fSwKLQl7MHg4OSwgMHhmZn0sCi0JezB4ODgsIDB4Zjh9LAotCXsweDc2LCAweDAzfSwKLQl7MHg5MiwgMHgwMX0sCi0JezB4OTMsIDB4MTh9LAotCXsweDFjLCAweDBhfSwKLQl7MHgxZCwgMHg0OH0sCi0JezB4YzAsIDB4NTB9LAotCXsweGMxLCAweDNjfSwKLQl7MHgzNCwgMHgwNX0sCi0JezB4YzIsIDB4MGN9LAotCXsweGMzLCAweGY5fSwKLQl7MHgzNCwgMHgwNX0sCi0JezB4ZTcsIDB4MmV9LAotCXsweDMxLCAweGY5fSwKLQl7MHgzNSwgMHgwMn0sCi0JezB4ZDksIDB4MTB9LAotCXsweDI1LCAweDQyfSwKLQl7MHg5NCwgMHgxMX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRfb3Y5NjV4W11bMl0gPSB7Ci0JezB4MTIsIDB4ODB9LAkvKiBjb203IC0gU1NDQiByZXNldCAqLwotCXsweDAwLCAweDAwfSwJLyogZ2FpbiAqLwotCXsweDAxLCAweDgwfSwJLyogYmx1ZSAqLwotCXsweDAyLCAweDgwfSwJLyogcmVkICovCi0JezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCi0JezB4MDQsIDB4MDN9LAkvKiBjb20xIC0gZXhwb3N1cmUgbG93IGJpdHMgKi8KLQl7MHgwYiwgMHg1N30sCS8qIHZlciAqLwotCXsweDBlLCAweDYxfSwJLyogY29tNSAqLwotCXsweDBmLCAweDQyfSwJLyogY29tNiAqLwotCXsweDExLCAweDAwfSwJLyogY2xrcmMgKi8KLQl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgLSAxNWZwcyBWR0EgWVVZViAqLwotCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCi0JezB4MTQsIDB4Mjh9LAkvKiBjb205ICovCi0JezB4MTYsIDB4MjR9LAkvKiByZWcxNiAqLwotCXsweDE3LCAweDFkfSwJLyogaHN0YXJ0Ki8KLQl7MHgxOCwgMHhiZH0sCS8qIGhzdG9wICovCi0JezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLwotCXsweDFhLCAweDgxfSwJLyogdnN0b3AqLwotCXsweDFlLCAweDA0fSwJLyogbXZmcCAqLwotCXsweDI0LCAweDNjfSwJLyogYWV3ICovCi0JezB4MjUsIDB4MzZ9LAkvKiBhZWIgKi8KLQl7MHgyNiwgMHg3MX0sCS8qIHZwdCAqLwotCXsweDI3LCAweDA4fSwJLyogYmJpYXMgKi8KLQl7MHgyOCwgMHgwOH0sCS8qIGdiYmlhcyAqLwotCXsweDI5LCAweDE1fSwJLyogZ3IgY29tICovCi0JezB4MmEsIDB4MDB9LAkvKiBleGhjaCAqLwotCXsweDJiLCAweDAwfSwJLyogZXhoY2wgKi8KLQl7MHgyYywgMHgwOH0sCS8qIHJiaWFzICovCi0JezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCi0JezB4MzMsIDB4MDB9LAkvKiBjaGxmICovCi0JezB4MzQsIDB4M2Z9LAkvKiBhcmVmMSAqLwotCXsweDM1LCAweDAwfSwJLyogYXJlZjIgKi8KLQl7MHgzNiwgMHhmOH0sCS8qIGFyZWYzICovCi0JezB4MzgsIDB4NzJ9LAkvKiBhZGMyICovCi0JezB4MzksIDB4NTd9LAkvKiBhcmVmNCAqLwotCXsweDNhLCAweDgwfSwJLyogdHNsYiAtIHl1eXYgKi8KLQl7MHgzYiwgMHhjNH0sCS8qIGNvbTExIC0gbmlnaHQgbW9kZSAxLzQgZnJhbWUgcmF0ZSAqLwotCXsweDNkLCAweDk5fSwJLyogY29tMTMgKi8KLQl7MHgzZiwgMHhjMX0sCS8qIGVkZ2UgKi8KLQl7MHg0MCwgMHhjMH0sCS8qIGNvbTE1ICovCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCXsweDQyLCAweGMwfSwJLyogY29tMTcgKi8KLQl7MHg0MywgMHgwYX0sCS8qIHJzdmQgKi8KLQl7MHg0NCwgMHhmMH0sCi0JezB4NDUsIDB4NDZ9LAotCXsweDQ2LCAweDYyfSwKLQl7MHg0NywgMHgyYX0sCi0JezB4NDgsIDB4M2N9LAotCXsweDRhLCAweGZjfSwKLQl7MHg0YiwgMHhmY30sCi0JezB4NGMsIDB4N2Z9LAotCXsweDRkLCAweDdmfSwKLQl7MHg0ZSwgMHg3Zn0sCi0JezB4NGYsIDB4OTh9LAkvKiBtYXRyaXggKi8KLQl7MHg1MCwgMHg5OH0sCi0JezB4NTEsIDB4MDB9LAotCXsweDUyLCAweDI4fSwKLQl7MHg1MywgMHg3MH0sCi0JezB4NTQsIDB4OTh9LAotCXsweDU4LCAweDFhfSwJLyogbWF0cml4IGNvZWYgc2lnbiAqLwotCXsweDU5LCAweDg1fSwJLyogQVdCIGNvbnRyb2wgKi8KLQl7MHg1YSwgMHhhOX0sCi0JezB4NWIsIDB4NjR9LAotCXsweDVjLCAweDg0fSwKLQl7MHg1ZCwgMHg1M30sCi0JezB4NWUsIDB4MGV9LAotCXsweDVmLCAweGYwfSwJLyogQVdCIGJsdWUgbGltaXQgKi8KLQl7MHg2MCwgMHhmMH0sCS8qIEFXQiByZWQgbGltaXQgKi8KLQl7MHg2MSwgMHhmMH0sCS8qIEFXQiBncmVlbiBsaW1pdCAqLwotCXsweDYyLCAweDAwfSwJLyogbGNjMSAqLwotCXsweDYzLCAweDAwfSwJLyogbGNjMiAqLwotCXsweDY0LCAweDAyfSwJLyogbGNjMyAqLwotCXsweDY1LCAweDE2fSwJLyogbGNjNCAqLwotCXsweDY2LCAweDAxfSwJLyogbGNjNSAqLwotCXsweDY5LCAweDAyfSwJLyogaHYgKi8KLQl7MHg2YiwgMHg1YX0sCS8qIGRidmwgKi8KLQl7MHg2YywgMHgwNH0sCi0JezB4NmQsIDB4NTV9LAotCXsweDZlLCAweDAwfSwKLQl7MHg2ZiwgMHg5ZH0sCi0JezB4NzAsIDB4MjF9LAkvKiBkbnN0aCAqLwotCXsweDcxLCAweDc4fSwKLQl7MHg3MiwgMHgwMH0sCS8qIHBvaWR4ICovCi0JezB4NzMsIDB4MDF9LAkvKiBwY2tkdiAqLwotCXsweDc0LCAweDNhfSwJLyogeGluZHggKi8KLQl7MHg3NSwgMHgzNX0sCS8qIHlpbmR4ICovCi0JezB4NzYsIDB4MDF9LAotCXsweDc3LCAweDAyfSwKLQl7MHg3YSwgMHgxMn0sCS8qIGdhbW1hIGN1cnZlICovCi0JezB4N2IsIDB4MDh9LAotCXsweDdjLCAweDE2fSwKLQl7MHg3ZCwgMHgzMH0sCi0JezB4N2UsIDB4NWV9LAotCXsweDdmLCAweDcyfSwKLQl7MHg4MCwgMHg4Mn0sCi0JezB4ODEsIDB4OGV9LAotCXsweDgyLCAweDlhfSwKLQl7MHg4MywgMHhhNH0sCi0JezB4ODQsIDB4YWN9LAotCXsweDg1LCAweGI4fSwKLQl7MHg4NiwgMHhjM30sCi0JezB4ODcsIDB4ZDZ9LAotCXsweDg4LCAweGU2fSwKLQl7MHg4OSwgMHhmMn0sCi0JezB4OGEsIDB4MDN9LAotCXsweDhjLCAweDg5fSwJLyogY29tMTkgKi8KLQl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KLQl7MHg5MCwgMHg3ZH0sCi0JezB4OTEsIDB4N2J9LAotCXsweDlkLCAweDAzfSwJLyogbGNjNiAqLwotCXsweDllLCAweDA0fSwJLyogbGNjNyAqLwotCXsweDlmLCAweDdhfSwKLQl7MHhhMCwgMHg3OX0sCi0JezB4YTEsIDB4NDB9LAkvKiBhZWNobSAqLwotCXsweGE0LCAweDUwfSwJLyogY29tMjEgKi8KLQl7MHhhNSwgMHg2OH0sCS8qIGNvbTI2ICovCi0JezB4YTYsIDB4NGF9LAkvKiBBV0IgZ3JlZW4gKi8KLQl7MHhhOCwgMHhjMX0sCS8qIHJlZmE4ICovCi0JezB4YTksIDB4ZWZ9LAkvKiByZWZhOSAqLwotCXsweGFhLCAweDkyfSwKLQl7MHhhYiwgMHgwNH0sCi0JezB4YWMsIDB4ODB9LAkvKiBibGFjayBsZXZlbCBjb250cm9sICovCi0JezB4YWQsIDB4ODB9LAotCXsweGFlLCAweDgwfSwKLQl7MHhhZiwgMHg4MH0sCi0JezB4YjIsIDB4ZjJ9LAotCXsweGIzLCAweDIwfSwKLQl7MHhiNCwgMHgyMH0sCS8qIGN0cmxiNCAqLwotCXsweGI1LCAweDAwfSwKLQl7MHhiNiwgMHhhZn0sCi0JezB4YmIsIDB4YWV9LAotCXsweGJjLCAweDdmfSwJLyogQURDIGNoYW5uZWwgb2Zmc2V0cyAqLwotCXsweGRiLCAweDdmfSwKLQl7MHhiZSwgMHg3Zn0sCi0JezB4YmYsIDB4N2Z9LAotCXsweGMwLCAweGUyfSwKLQl7MHhjMSwgMHhjMH0sCi0JezB4YzIsIDB4MDF9LAotCXsweGMzLCAweDRlfSwKLQl7MHhjNiwgMHg4NX0sCi0JezB4YzcsIDB4ODB9LAkvKiBjb20yNCAqLwotCXsweGM5LCAweGUwfSwKLQl7MHhjYSwgMHhlOH0sCi0JezB4Y2IsIDB4ZjB9LAotCXsweGNjLCAweGQ4fSwKLQl7MHhjZCwgMHhmMX0sCi0JezB4NGYsIDB4OTh9LAkvKiBtYXRyaXggKi8KLQl7MHg1MCwgMHg5OH0sCi0JezB4NTEsIDB4MDB9LAotCXsweDUyLCAweDI4fSwKLQl7MHg1MywgMHg3MH0sCi0JezB4NTQsIDB4OTh9LAotCXsweDU4LCAweDFhfSwKLQl7MHhmZiwgMHg0MX0sCS8qIHJlYWQgNDEsIHdyaXRlIGZmIDAwICovCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCi0JezB4YzUsIDB4MDN9LAkvKiA2MCBIeiBiYW5kaW5nIGZpbHRlciAqLwotCXsweDZhLCAweDAyfSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQotCXsweDEyLCAweDYyfSwJLyogY29tNyAtIDMwZnBzIFZHQSBZVVYgKi8KLQl7MHgzNiwgMHhmYX0sCS8qIGFyZWYzICovCi0JezB4NjksIDB4MGF9LAkvKiBodiAqLwotCXsweDhjLCAweDg5fSwJLyogY29tMjIgKi8KLQl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KLQl7MHgzZSwgMHgwY30sCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCXsweDcyLCAweDAwfSwKLQl7MHg3MywgMHgwMH0sCi0JezB4NzQsIDB4M2F9LAotCXsweDc1LCAweDM1fSwKLQl7MHg3NiwgMHgwMX0sCi0JezB4YzcsIDB4ODB9LAotCXsweDAzLCAweDEyfSwJLyogdnJlZiAqLwotCXsweDE3LCAweDE2fSwJLyogaHN0YXJ0ICovCi0JezB4MTgsIDB4MDJ9LAkvKiBoc3RvcCAqLwotCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KLQl7MHgxYSwgMHgzZH0sCS8qIHZzdG9wICovCi0JezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCi0JezB4YzAsIDB4YWF9LAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9pbml0X292OTY1eF8yW11bMl0gPSB7Ci0JezB4OTQsIDB4YWF9LAotCXsweGYxLCAweDYwfSwKLQl7MHhlNSwgMHgwNH0sCi0JezB4YzAsIDB4NTB9LAotCXsweGMxLCAweDNjfSwKLQl7MHg4YywgMHgwMH0sCi0JezB4OGQsIDB4MWN9LAotCXsweDM0LCAweDA1fSwKLQotCXsweGMyLCAweDBjfSwKLQl7MHhjMywgMHhmOX0sCi0JezB4ZGEsIDB4MDF9LAotCXsweDUwLCAweDAwfSwKLQl7MHg1MSwgMHhhMH0sCi0JezB4NTIsIDB4M2N9LAotCXsweDUzLCAweDAwfSwKLQl7MHg1NCwgMHgwMH0sCi0JezB4NTUsIDB4MDB9LAotCXsweDU3LCAweDAwfSwKLQl7MHg1YywgMHgwMH0sCi0JezB4NWEsIDB4YTB9LAotCXsweDViLCAweDc4fSwKLQl7MHgzNSwgMHgwMn0sCi0JezB4ZDksIDB4MTB9LAotCXsweDk0LCAweDExfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdF9vdjk2NXhfMltdWzJdID0gewotCXsweDNiLCAweGM0fSwKLQl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KLQl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KLQl7MHgwMCwgMHgwMH0sCS8qIGdhaW4gKi8KLQl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLwotCXsweDExLCAweDAzfSwJLyogY2xrcmMgKi8KLQl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KLQl7MHg2YSwgMHgwNX0sCi0JezB4YzUsIDB4MDd9LAotCXsweGEyLCAweDRifSwKLQl7MHhhMywgMHgzZX0sCi0JezB4MmQsIDB4MDB9LAotCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KLQl7MHg0MiwgMHhjMH0sCS8qIGNvbTE3ICovCi0JezB4MmQsIDB4MDB9LAotCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KLQl7MHg0MiwgMHhjMX0sCS8qIGNvbTE3ICovCi0vKiBzaGFycG5lc3MgKi8KLQl7MHgzZiwgMHgwMX0sCi0JezB4ZmYsIDB4NDJ9LAkvKiByZWFkIDQyLCB3cml0ZSBmZiAwMCAqLwotCXsweDQyLCAweGMxfSwJLyogY29tMTcgKi8KLS8qIHNhdHVyYXRpb24gKi8KLQl7MHg0ZiwgMHg5OH0sCS8qIG1hdHJpeCAqLwotCXsweDUwLCAweDk4fSwKLQl7MHg1MSwgMHgwMH0sCi0JezB4NTIsIDB4Mjh9LAotCXsweDUzLCAweDcwfSwKLQl7MHg1NCwgMHg5OH0sCi0JezB4NTgsIDB4MWF9LAotCXsweGZmLCAweDQxfSwJLyogcmVhZCA0MSwgd3JpdGUgZmYgMDAgKi8KLQl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCi0vKiBjb250cmFzdCAqLwotCXsweDU2LCAweDQwfSwKLS8qIGJyaWdodG5lc3MgKi8KLQl7MHg1NSwgMHg4Zn0sCi0vKiBleHBvICovCi0JezB4MTAsIDB4MjV9LAkvKiBhZWNoIC0gZXhwb3N1cmUgaGlnaCBiaXRzICovCi0JezB4ZmYsIDB4MTN9LAkvKiByZWFkIDEzLCB3cml0ZSBmZiAwMCAqLwotCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8xX3ZnYVtdWzJdID0gewkvKiBzYW1lIGZvciBxdmdhICovCi0JezB4MTIsIDB4NjJ9LAkvKiBjb203IC0gMzBmcHMgVkdBIFlVViAqLwotCXsweDM2LCAweGZhfSwJLyogYXJlZjMgKi8KLQl7MHg2OSwgMHgwYX0sCS8qIGh2ICovCi0JezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLwotCXsweDE0LCAweDI4fSwJLyogY29tOSAqLwotCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KLQl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCi0JezB4NzIsIDB4MDB9LAotCXsweDczLCAweDAwfSwKLQl7MHg3NCwgMHgzYX0sCi0JezB4NzUsIDB4MzV9LAotCXsweDc2LCAweDAxfSwKLQl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCi0JezB4MDMsIDB4MTJ9LAkvKiB2cmVmICovCi0JezB4MTcsIDB4MTZ9LAkvKiBoc3RhcnQgKi8KLQl7MHgxOCwgMHgwMn0sCS8qIGhzdG9wICovCi0JezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLwotCXsweDFhLCAweDNkfSwJLyogdnN0b3AgKi8KLQl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KLQl7MHhjMCwgMHhhYX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8xX3N2Z2FbXVsyXSA9IHsKLQl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgLSBZVVlWIC0gVkdBIDE1IGZ1bGwgcmVzb2x1dGlvbiAqLwotCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KLQl7MHg2OSwgMHgwMn0sCS8qIGh2ICovCi0JezB4OGMsIDB4MGR9LAkvKiBjb20yMiAqLwotCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KLQl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCi0JezB4NzIsIDB4MDB9LAotCXsweDczLCAweDAxfSwKLQl7MHg3NCwgMHgzYX0sCi0JezB4NzUsIDB4MzV9LAotCXsweDc2LCAweDAxfSwKLQl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCi0JezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCi0JezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQgKi8KLQl7MHgxOCwgMHhiZH0sCS8qIGhzdG9wICovCi0JezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLwotCXsweDFhLCAweDgxfSwJLyogdnN0b3AgKi8KLQl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KLQl7MHhjMCwgMHhlMn0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8xX3hnYVtdWzJdID0gewotCXsweDEyLCAweDAyfSwJLyogY29tNyAqLwotCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KLQl7MHg2OSwgMHgwMn0sCS8qIGh2ICovCi0JezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLwotCXsweDE0LCAweDI4fSwJLyogY29tOSAqLwotCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KLQl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCi0JezB4NzIsIDB4MDB9LAotCXsweDczLCAweDAxfSwKLQl7MHg3NCwgMHgzYX0sCi0JezB4NzUsIDB4MzV9LAotCXsweDc2LCAweDAxfSwKLQl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCi0JezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCi0JezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQgKi8KLQl7MHgxOCwgMHhiZH0sCS8qIGhzdG9wICovCi0JezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLwotCXsweDFhLCAweDgxfSwJLyogdnN0b3AgKi8KLQl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KLQl7MHhjMCwgMHhlMn0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8xX3N4Z2FbXVsyXSA9IHsKLQl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgKi8KLQl7MHgzNiwgMHhmOH0sCS8qIGFyZWYzICovCi0JezB4NjksIDB4MDJ9LAkvKiBodiAqLwotCXsweDhjLCAweDg5fSwJLyogY29tMjIgKi8KLQl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KLQl7MHgzZSwgMHgwY30sCS8qIGNvbTE0ICovCi0JezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLwotCXsweDcyLCAweDAwfSwKLQl7MHg3MywgMHgwMX0sCi0JezB4NzQsIDB4M2F9LAotCXsweDc1LCAweDM1fSwKLQl7MHg3NiwgMHgwMX0sCi0JezB4YzcsIDB4ODB9LAkvKiBjb20yNCAqLwotCXsweDAzLCAweDFifSwJLyogdnJlZiAqLwotCXsweDE3LCAweDFkfSwJLyogaHN0YXJ0ICovCi0JezB4MTgsIDB4MDJ9LAkvKiBoc3RvcCAqLwotCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KLQl7MHgxYSwgMHg4MX0sCS8qIHZzdG9wICovCi0JezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCi0JezB4YzAsIDB4ZTJ9LAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF9vdjk2NXhfcXZnYVtdWzJdID0gewotCXsweDk0LCAweGFhfSwKLQl7MHhmMSwgMHg2MH0sCi0JezB4ZTUsIDB4MDR9LAotCXsweGMwLCAweDUwfSwKLQl7MHhjMSwgMHgzY30sCi0JezB4OGMsIDB4MDB9LAotCXsweDhkLCAweDFjfSwKLQl7MHgzNCwgMHgwNX0sCi0KLQl7MHhjMiwgMHg0Y30sCi0JezB4YzMsIDB4Zjl9LAotCXsweGRhLCAweDAwfSwKLQl7MHg1MCwgMHgwMH0sCi0JezB4NTEsIDB4YTB9LAotCXsweDUyLCAweDc4fSwKLQl7MHg1MywgMHgwMH0sCi0JezB4NTQsIDB4MDB9LAotCXsweDU1LCAweDAwfSwKLQl7MHg1NywgMHgwMH0sCi0JezB4NWMsIDB4MDB9LAotCXsweDVhLCAweDUwfSwKLQl7MHg1YiwgMHgzY30sCi0JezB4MzUsIDB4MDJ9LAotCXsweGQ5LCAweDEwfSwKLQl7MHg5NCwgMHgxMX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X292OTY1eF92Z2FbXVsyXSA9IHsKLQl7MHg5NCwgMHhhYX0sCi0JezB4ZjEsIDB4NjB9LAotCXsweGU1LCAweDA0fSwKLQl7MHhjMCwgMHg1MH0sCi0JezB4YzEsIDB4M2N9LAotCXsweDhjLCAweDAwfSwKLQl7MHg4ZCwgMHgxY30sCi0JezB4MzQsIDB4MDV9LAotCXsweGMyLCAweDBjfSwKLQl7MHhjMywgMHhmOX0sCi0JezB4ZGEsIDB4MDF9LAotCXsweDUwLCAweDAwfSwKLQl7MHg1MSwgMHhhMH0sCi0JezB4NTIsIDB4M2N9LAotCXsweDUzLCAweDAwfSwKLQl7MHg1NCwgMHgwMH0sCi0JezB4NTUsIDB4MDB9LAotCXsweDU3LCAweDAwfSwKLQl7MHg1YywgMHgwMH0sCi0JezB4NWEsIDB4YTB9LAotCXsweDViLCAweDc4fSwKLQl7MHgzNSwgMHgwMn0sCi0JezB4ZDksIDB4MTB9LAotCXsweDk0LCAweDExfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3N2Z2FbXVsyXSA9IHsKLQl7MHg5NCwgMHhhYX0sCi0JezB4ZjEsIDB4NjB9LAotCXsweGU1LCAweDA0fSwKLQl7MHhjMCwgMHhhMH0sCi0JezB4YzEsIDB4ODB9LAotCXsweDhjLCAweDAwfSwKLQl7MHg4ZCwgMHgxY30sCi0JezB4MzQsIDB4MDV9LAotCXsweGMyLCAweDRjfSwKLQl7MHhjMywgMHhmOX0sCi0JezB4NTAsIDB4MDB9LAotCXsweDUxLCAweDQwfSwKLQl7MHg1MiwgMHgwMH0sCi0JezB4NTMsIDB4MDB9LAotCXsweDU0LCAweDAwfSwKLQl7MHg1NSwgMHg4OH0sCi0JezB4NTcsIDB4MDB9LAotCXsweDVjLCAweDAwfSwKLQl7MHg1YSwgMHhjOH0sCi0JezB4NWIsIDB4OTZ9LAotCXsweDM1LCAweDAyfSwKLQl7MHhkOSwgMHgxMH0sCi0JezB4ZGEsIDB4MDB9LAotCXsweDk0LCAweDExfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3hnYVtdWzJdID0gewotCXsweDk0LCAweGFhfSwKLQl7MHhmMSwgMHg2MH0sCi0JezB4ZTUsIDB4MDR9LAotCXsweGMwLCAweGEwfSwKLQl7MHhjMSwgMHg4MH0sCi0JezB4OGMsIDB4MDB9LAotCXsweDhkLCAweDFjfSwKLQl7MHgzNCwgMHgwNX0sCi0JezB4YzIsIDB4NGN9LAotCXsweGMzLCAweGY5fSwKLQl7MHg1MCwgMHgwMH0sCi0JezB4NTEsIDB4NDB9LAotCXsweDUyLCAweDAwfSwKLQl7MHg1MywgMHgwMH0sCi0JezB4NTQsIDB4MDB9LAotCXsweDU1LCAweDg4fSwKLQl7MHg1NywgMHgwMH0sCi0JezB4NWMsIDB4MDF9LAotCXsweDVhLCAweDAwfSwKLQl7MHg1YiwgMHhjMH0sCi0JezB4MzUsIDB4MDJ9LAotCXsweGQ5LCAweDEwfSwKLQl7MHhkYSwgMHgwMX0sCi0JezB4OTQsIDB4MTF9LAotfTsKLQotc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF9vdjk2NXhfc3hnYVtdWzJdID0gewotCXsweDk0LCAweGFhfSwKLQl7MHhmMSwgMHg2MH0sCi0JezB4ZTUsIDB4MDR9LAotCXsweGMwLCAweGEwfSwKLQl7MHhjMSwgMHg4MH0sCi0JezB4OGMsIDB4MDB9LAotCXsweDhkLCAweDFjfSwKLQl7MHgzNCwgMHgwNX0sCi0JezB4YzIsIDB4MGN9LAotCXsweGMzLCAweGY5fSwKLQl7MHhkYSwgMHgwMH0sCi0JezB4MzUsIDB4MDJ9LAotCXsweGQ5LCAweDEwfSwKLQl7MHg5NCwgMHgxMX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8yX3F2Z2FbXVsyXSA9IHsKLQl7MHgzYiwgMHhlNH0sCS8qIGNvbTExIC0gbmlnaHQgbW9kZSAxLzQgZnJhbWUgcmF0ZSAqLwotCXsweDFlLCAweDA0fSwJLyogbXZmcCAqLwotCXsweDEzLCAweGUwfSwJLyogY29tOCAqLwotCXsweDAwLCAweDAwfSwKLQl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLwotCXsweDExLCAweDAxfSwJLyogY2xrcmMgKi8KLQl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KLQl7MHg2YSwgMHgwMn0sCS8qIDUwIEh6IGJhbmRpbmcgZmlsdGVyICovCi0JezB4YzUsIDB4MDN9LAkvKiA2MCBIeiBiYW5kaW5nIGZpbHRlciAqLwotCXsweGEyLCAweDk2fSwJLyogYmQ1MCAqLwotCXsweGEzLCAweDdkfSwJLyogYmQ2MCAqLwotCi0JezB4ZmYsIDB4MTN9LAkvKiByZWFkIDEzLCB3cml0ZSBmZiAwMCAqLwotCXsweDEzLCAweGU3fSwKLQl7MHgzYSwgMHg4MH0sCS8qIHRzbGIgLSB5dXl2ICovCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8yX3ZnYVtdWzJdID0gewotCXsweDNiLCAweGM0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCi0JezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCi0JezB4MTMsIDB4ZTB9LAkvKiBjb204ICovCi0JezB4MDAsIDB4MDB9LAotCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCi0JezB4MTEsIDB4MDN9LAkvKiBjbGtyYyAqLwotCXsweDZiLCAweDVhfSwJLyogZGJsdiAqLwotCXsweDZhLCAweDA1fSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQl7MHhjNSwgMHgwN30sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCi0JezB4YTIsIDB4NGJ9LAkvKiBiZDUwICovCi0JezB4YTMsIDB4M2V9LAkvKiBiZDYwICovCi0KLQl7MHgyZCwgMHgwMH0sCS8qIGFkdmZsICovCi19OwotCi1zdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eF8yX3N2Z2FbXVsyXSA9IHsJLyogc2FtZSBmb3IgeGdhICovCi0JezB4M2IsIDB4YzR9LAkvKiBjb20xMSAtIG5pZ2h0IG1vZGUgMS80IGZyYW1lIHJhdGUgKi8KLQl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KLQl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KLQl7MHgwMCwgMHgwMH0sCi0JezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KLQl7MHgxMSwgMHgwMX0sCS8qIGNsa3JjICovCi0JezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCi0JezB4NmEsIDB4MGN9LAkvKiA1MCBIeiBiYW5kaW5nIGZpbHRlciAqLwotCXsweGM1LCAweDBmfSwJLyogNjAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQl7MHhhMiwgMHg0ZX0sCS8qIGJkNTAgKi8KLQl7MHhhMywgMHg0MX0sCS8qIGJkNjAgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfc3hnYVtdWzJdID0gewotCXsweDEzLCAweGUwfSwJLyogY29tOCAqLwotCXsweDAwLCAweDAwfSwKLQl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLwotCXsweDNiLCAweGM0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCi0JezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCi0JezB4MTEsIDB4MDF9LAkvKiBjbGtyYyAqLwotCXsweDZiLCAweDVhfSwJLyogZGJsdiAqLwotCXsweDZhLCAweDBjfSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KLQl7MHhjNSwgMHgwZn0sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCi0JezB4YTIsIDB4NGV9LAkvKiBiZDUwICovCi0JezB4YTMsIDB4NDF9LAkvKiBiZDYwICovCi19OwotCiBzdGF0aWMgdm9pZCBvdjUzNF9yZWdfd3JpdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnLCB1OCB2YWwpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBnc3BjYV9kZXYtPmRldjsKQEAgLTEzNjAsMTQgKzY3MSwxNCBAQAogCVBERUJVRyhEX1BST0JFLCAiZnJhbWVfcmF0ZTogJWQiLCByLT5mcHMpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzXzc3KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg5Qiwgc2QtPmJyaWdodG5lc3MpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRjb250cmFzdF83NyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCkBAIC0xNDAxLDcgKzcxMiw3IEBACiAJc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDAwLCB2YWwpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRleHBvc3VyZV83NyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXU4IHZhbDsKQEAgLTE0MzIsNyArNzQzLDcgQEAKIAlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MDEsIHNkLT5odWUpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRhdXRvZ2Fpbl83NyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCkBAIC0xNDU3LDcgKzc2OCw3IEBACiAJCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg2MywgMHhhYSk7CS8qIEFXQiBvZmYgKi8KIH0KIAotc3RhdGljIHZvaWQgc2V0c2hhcnBuZXNzXzc3KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXU4IHZhbDsKQEAgLTE0OTEsMTMyICs4MDIsNiBAQAogCQkJCXNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDBjKSAmIDB4N2YpOwogfQogCi0vKiBvdjk2NXggc3BlY2lmaWMgY29udHJvbHMgKi8KLXN0YXRpYyB2b2lkIHNldGJyaWdodG5lc3NfOTYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQl1OCB2YWw7Ci0KLQl2YWwgPSBzZC0+YnJpZ2h0bmVzczsKLQlpZiAodmFsIDwgOCkKLQkJdmFsID0gMTUgLSB2YWw7CQkvKiBmIC4uIDggKi8KLQllbHNlCi0JCXZhbCA9IHZhbCAtIDg7CQkvKiAwIC4uIDcgKi8KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NTUsCS8qIGJydG4gLSBicmlnaHRuZXNzIGFkanVzdG1lbnQgKi8KLQkJCTB4MGYgfCAodmFsIDw8IDQpKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0Y29udHJhc3RfOTYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg1NiwJLyogY25zdDEgLSBjb250cmFzdCAxIGN0cmwgY29lZmYgKi8KLQkJCXNkLT5jb250cmFzdCA8PCA0KTsKLX0KLQotc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmVfOTYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQl1OCB2YWw7Ci0Jc3RhdGljIGNvbnN0IHU4IGV4cG9bNF0gPSB7MHgwMCwgMHgyNSwgMHgzOCwgMHg1ZX07Ci0KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MTAsCQkJLyogYWVjWzk6Ml0gKi8KLQkJCWV4cG9bc2QtPmV4cG9zdXJlXSk7Ci0JdmFsID0gc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MTMpOwkJLyogY29tOCAqLwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDEzLCB2YWwpOwotCXZhbCA9IHNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweGExKTsJCS8qIGFlY2ggKi8KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhhMSwgdmFsICYgMHhlMCk7CS8qIGFlY1sxNToxMF0gPSAwICovCi19Ci0KLXN0YXRpYyB2b2lkIHNldHNoYXJwbmVzc185NihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXM4IHZhbDsKLQotCXZhbCA9IHNkLT5zaGFycG5lc3M7Ci0JaWYgKHZhbCA8IDApIHsJCQkJLyogYXV0byAqLwotCQl2YWwgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHg0Mik7CS8qIGNvbTE3ICovCi0JCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7Ci0JCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg0MiwgdmFsIHwgMHg0MCk7Ci0JCQkJLyogRWRnZSBlbmhhbmNlbWVudCBzdHJlbmd0aCBhdXRvIGFkanVzdCAqLwotCQlyZXR1cm47Ci0JfQotCWlmICh2YWwgIT0gMCkKLQkJdmFsID0gMSA8PCAodmFsIC0gMSk7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDNmLAkvKiBlZGdlIC0gZWRnZSBlbmhhbmNlLiBmYWN0b3IgKi8KLQkJCXZhbCk7Ci0JdmFsID0gc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4NDIpOwkJLyogY29tMTcgKi8KLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg0MiwgdmFsICYgMHhiZik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldGF1dG9nYWluXzk2KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JdTggdmFsOwotCi0vKmZpeG1lOiBzaG91bGQgYWRqdXN0IGFnYy9hd2IvYWVjIGJ5IGRpZmZlcmVudCBjb250cm9scyAqLwotCXZhbCA9IHNkLT5hdXRvZ2FpbjsKLQl2YWwgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHgxMyk7CQkvKiBjb204ICovCi0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKLQlpZiAoc2QtPmF1dG9nYWluKQotCQl2YWwgfD0gMHgwNTsJCS8qIGFnYyAmIGFlYyAqLwotCWVsc2UKLQkJdmFsICY9IDB4ZmE7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDEzLCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRzYXR1cihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXU4IHZhbDEsIHZhbDIsIHZhbDM7Ci0Jc3RhdGljIGNvbnN0IHU4IG1hdHJpeFs1XVsyXSA9IHsKLQkJezB4MTQsIDB4Mzh9LAotCQl7MHgxZSwgMHg1NH0sCi0JCXsweDI4LCAweDcwfSwKLQkJezB4MzIsIDB4OGN9LAotCQl7MHg0OCwgMHg5MH0KLQl9OwotCi0JdmFsMSA9IG1hdHJpeFtzZC0+c2F0dXJdWzBdOwotCXZhbDIgPSBtYXRyaXhbc2QtPnNhdHVyXVsxXTsKLQl2YWwzID0gdmFsMSArIHZhbDI7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDRmLCB2YWwzKTsJLyogbWF0cml4IGNvZWZmICovCi0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDUwLCB2YWwzKTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NTEsIDB4MDApOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg1MiwgdmFsMSk7Ci0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDUzLCB2YWwyKTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NTQsIHZhbDMpOwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHg1OCwgMHgxYSk7CS8qIG10eHMgLSBjb2VmZiBzaWducyAqLwotCXZhbDEgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHg0MSk7CS8qIGNvbTE2ICovCi0Jc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NDEsIHZhbDEpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JdTggdmFsOwotCi0JdmFsID0gc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MTMpOwkJLyogY29tOCAqLwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7Ci0JaWYgKHNkLT5saWdodGZyZXEgPT0gMCkgewotCQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MTMsIHZhbCAmIDB4ZGYpOwotCQlyZXR1cm47Ci0JfQotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgxMywgdmFsIHwgMHgyMCk7Ci0KLQl2YWwgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHg0Mik7CQkvKiBjb20xNyAqLwotCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7Ci0JaWYgKHNkLT5saWdodGZyZXEgPT0gMSkKLQkJdmFsIHw9IDB4MDE7Ci0JZWxzZQotCQl2YWwgJj0gMHhmZTsKLQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4NDIsIHZhbCk7Ci19Ci0KIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC0xNjI0LDc3ICs4MDksNTAgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtOwogCi0Jc2QtPnNlbnNvciA9IGlkLT5kcml2ZXJfaW5mbzsKLQogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKIAotCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpIHsKLQkJY2FtLT5jYW1fbW9kZSA9IG92NzcyeF9tb2RlOwotCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUob3Y3NzJ4X21vZGUpOworCWNhbS0+Y2FtX21vZGUgPSBvdjc3MnhfbW9kZTsKKwljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUob3Y3NzJ4X21vZGUpOworCWNhbS0+bW9kZV9mcmFtZXJhdGVzID0gb3Y3NzJ4X2ZyYW1lcmF0ZXM7CiAKLQkJY2FtLT5idWxrID0gMTsKLQkJY2FtLT5idWxrX3NpemUgPSAxNjM4NDsKLQkJY2FtLT5idWxrX251cmJzID0gMjsKLQl9IGVsc2UgewkJLyogb3Y5NjV4ICovCi0JCWNhbS0+Y2FtX21vZGUgPSBvdjk2NXhfbW9kZTsKLQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG92OTY1eF9tb2RlKTsKLQl9CisJY2FtLT5idWxrID0gMTsKKwljYW0tPmJ1bGtfc2l6ZSA9IDE2Mzg0OworCWNhbS0+YnVsa19udXJicyA9IDI7CiAKIAlzZC0+ZnJhbWVfcmF0ZSA9IDMwOwogCi0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzcyWCkgewotCQlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfNzdfREVGOwotCQlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF83N19ERUY7Ci0JCXNkLT5nYWluID0gR0FJTl9ERUY7Ci0JCXNkLT5leHBvc3VyZSA9IEVYUE9fNzdfREVGOwotCQlzZC0+cmVkYmxjID0gUkVEX0JBTEFOQ0VfREVGOwotCQlzZC0+Ymx1ZWJsYyA9IEJMVUVfQkFMQU5DRV9ERUY7Ci0JCXNkLT5odWUgPSBIVUVfREVGOwotI2lmIEFVVE9HQUlOXzc3X0RFRiAhPSAwCi0JCXNkLT5hdXRvZ2FpbiA9IEFVVE9HQUlOXzc3X0RFRjsKKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOworCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKKwlzZC0+Z2FpbiA9IEdBSU5fREVGOworCXNkLT5leHBvc3VyZSA9IEVYUE9fREVGOworCXNkLT5yZWRibGMgPSBSRURfQkFMQU5DRV9ERUY7CisJc2QtPmJsdWVibGMgPSBCTFVFX0JBTEFOQ0VfREVGOworCXNkLT5odWUgPSBIVUVfREVGOworI2lmIEFVVE9HQUlOX0RFRiAhPSAwCisJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOwogI2Vsc2UKLQkJZ3NwY2FfZGV2LT5jdHJsX2luYWMgfD0gKDEgPDwgQVdCXzc3X0lEWCk7CisJZ3NwY2FfZGV2LT5jdHJsX2luYWMgfD0gKDEgPDwgQVdCX0lEWCk7CiAjZW5kaWYKICNpZiBBV0JfREVGICE9IDAKLQkJc2QtPmF3YiA9IEFXQl9ERUYKKwlzZC0+YXdiID0gQVdCX0RFRgogI2VuZGlmCi0jaWYgU0hBUlBORVNTXzc3X0RFRiAhPSAwCi0JCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfNzdfREVGOworI2lmIFNIQVJQTkVTU19ERUYgIT0gMAorCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfREVGOwogI2VuZGlmCiAjaWYgSEZMSVBfREVGICE9IDAKLQkJc2QtPmhmbGlwID0gSEZMSVBfREVGOworCXNkLT5oZmxpcCA9IEhGTElQX0RFRjsKICNlbmRpZgogI2lmIFZGTElQX0RFRiAhPSAwCi0JCXNkLT52ZmxpcCA9IFZGTElQX0RFRjsKKwlzZC0+dmZsaXAgPSBWRkxJUF9ERUY7CiAjZW5kaWYKLQl9IGVsc2UgewotCQlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfOTZfREVGOwotCQlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF85Nl9ERUY7Ci0jaWYgQVVUT0dBSU5fOTZfREVGICE9IDAKLQkJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fOTZfREVGOwotCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyB8PSAoMSA8PCBFWFBPXzk2X0lEWCk7Ci0jZW5kaWYKLSNpZiBFWFBPXzk2X0RFRiAhPSAwCi0JCXNkLT5leHBvc3VyZSA9IEVYUE9fOTZfREVGOwotI2VuZGlmCi0jaWYgU0hBUlBORVNTXzk2X0RFRiAhPSAwCi0JCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfOTZfREVGOwotI2VuZGlmCi0JCXNkLT5zYXR1ciA9IFNBVFVSX0RFRjsKLQkJc2QtPmxpZ2h0ZnJlcSA9IEZSRVFfREVGOwotCX0KKwogCXJldHVybiAwOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXUxNiBzZW5zb3JfaWQ7Ci0Jc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9hZGRyWzJdID0gewotCQkweDQyLAkJCS8qIDAgU0VOU09SX09WNzcyWCAqLwotCQkweDYwLAkJCS8qIDEgU0VOU09SX09WOTY1WCAqLwotCX07CiAKIAkvKiByZXNldCBicmlkZ2UgKi8KIAlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGU3LCAweDNhKTsKQEAgLTE3MDIsOCArODYwLDcgQEAKIAltc2xlZXAoMTAwKTsKIAogCS8qIGluaXRpYWxpemUgdGhlIHNlbnNvciBhZGRyZXNzICovCi0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX0FERFJFU1MsCi0JCQkJc2Vuc29yX2FkZHJbc2QtPnNlbnNvcl0pOworCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIE9WNTM0X1JFR19BRERSRVNTLCAweDQyKTsKIAogCS8qIHJlc2V0IHNlbnNvciAqLwogCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgxMiwgMHg4MCk7CkBAIC0xNzE3LDY0ICs4NzQsNDYgQEAKIAlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBJRDogJTA0eCIsIHNlbnNvcl9pZCk7CiAKIAkvKiBpbml0aWFsaXplICovCi0Jc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfT1Y3NzJYOgotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0X292NzcyeCwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292NzcyeCkpOwotCQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMSk7Ci0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9pbml0X292NzcyeCwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9pbml0X292NzcyeCkpOwotCQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDA5KTsKLQkJb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOwotCQlzZXRfZnJhbWVfcmF0ZShnc3BjYV9kZXYpOwotCQlicmVhazsKLQlkZWZhdWx0OgotLyoJY2FzZSBTRU5TT1JfT1Y5NjVYOiAqLwotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0X292OTY1eCwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292OTY1eCkpOwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdF9vdjk2NXgsCi0JCQkJQVJSQVlfU0laRShzZW5zb3JfaW5pdF9vdjk2NXgpKTsKLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2VfaW5pdF9vdjk2NXhfMiwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292OTY1eF8yKSk7Ci0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9pbml0X292OTY1eF8yLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX2luaXRfb3Y5NjV4XzIpKTsKLQkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7Ci0JCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDEpOwotCQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7Ci0JCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOwotCX0KKwlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0LAorCQkJQVJSQVlfU0laRShicmlkZ2VfaW5pdCkpOworCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAxKTsKKwlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdCwKKwkJCUFSUkFZX1NJWkUoc2Vuc29yX2luaXQpKTsKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDA5KTsKKwlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7CisJc2V0X2ZyYW1lX3JhdGUoZ3NwY2FfZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNkX3N0YXJ0X292NzcyeChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgbW9kZTsKIAogCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKIAlpZiAobW9kZSAhPSAwKSB7CS8qIDMyMHgyNDAgKi8KLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y3NzJ4X3F2Z2EsCi0JCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfb3Y3NzJ4X3F2Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292NzcyeF9xdmdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292NzcyeF9xdmdhKSk7CisJCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX3N0YXJ0X3F2Z2EsCisJCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfcXZnYSkpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfcXZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9xdmdhKSk7CiAJfSBlbHNlIHsJCS8qIDY0MHg0ODAgKi8KLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y3NzJ4X3ZnYSwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF9vdjc3MnhfdmdhKSk7Ci0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF9vdjc3MnhfdmdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292NzcyeF92Z2EpKTsKKwkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfdmdhLAorCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X3ZnYSkpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfdmdhLAorCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X3ZnYSkpOwogCX0KIAlzZXRfZnJhbWVfcmF0ZShnc3BjYV9kZXYpOwogCi0Jc2V0YXV0b2dhaW5fNzcoZ3NwY2FfZGV2KTsKKwlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOwogCXNldGF3Yihnc3BjYV9kZXYpOwogCXNldGdhaW4oZ3NwY2FfZGV2KTsKIAlzZXRyZWRibGMoZ3NwY2FfZGV2KTsKIAlzZXRibHVlYmxjKGdzcGNhX2Rldik7CiAJc2V0aHVlKGdzcGNhX2Rldik7Ci0Jc2V0ZXhwb3N1cmVfNzcoZ3NwY2FfZGV2KTsKLQlzZXRicmlnaHRuZXNzXzc3KGdzcGNhX2Rldik7Ci0Jc2V0Y29udHJhc3RfNzcoZ3NwY2FfZGV2KTsKLQlzZXRzaGFycG5lc3NfNzcoZ3NwY2FfZGV2KTsKKwlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOwogCXNldHZmbGlwKGdzcGNhX2Rldik7CiAJc2V0aGZsaXAoZ3NwY2FfZGV2KTsKIApAQCAtMTc4Myw4MSArOTIyLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2Rfc3RhcnRfb3Y5NjV4KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlpbnQgbW9kZTsKLQotCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKLQlzd2l0Y2ggKG1vZGUpIHsKLQlkZWZhdWx0OgotLyoJY2FzZSA0OgkJCSAqIDMyMHgyNDAgKi8KLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8xX3ZnYSwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjk2NXhfMV92Z2EpKTsKLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3F2Z2EsCi0JCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfb3Y5NjV4X3F2Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8yX3F2Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfcXZnYSkpOwotCQlicmVhazsKLQljYXNlIDM6CQkJLyogNjQweDQ4MCAqLwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfb3Y5NjV4XzFfdmdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292OTY1eF8xX3ZnYSkpOwotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9vdjk2NXhfdmdhLAotCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X292OTY1eF92Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8yX3ZnYSwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjk2NXhfMl92Z2EpKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgkJCS8qIDgwMHg2MDAgKi8KLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8xX3N2Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzFfc3ZnYSkpOwotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9vdjk2NXhfc3ZnYSwKLQkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF9vdjk2NXhfc3ZnYSkpOwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfc3ZnYSwKLQkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjk2NXhfMl9zdmdhKSk7Ci0JCWJyZWFrOwotCWNhc2UgMToJCQkvKiAxMDI0eDc2OCAqLwotCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfb3Y5NjV4XzFfeGdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292OTY1eF8xX3hnYSkpOwotCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9vdjk2NXhfeGdhLAotCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X292OTY1eF94Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8yX3N2Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfc3ZnYSkpOwotCQlicmVhazsKLQljYXNlIDA6CQkJLyogMTI4MHgxMDI0ICovCi0JCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF9vdjk2NXhfMV9zeGdhLAotCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0X292OTY1eF8xX3N4Z2EpKTsKLQkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfb3Y5NjV4X3N4Z2EsCi0JCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfb3Y5NjV4X3N4Z2EpKTsKLQkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eF8yX3N4Z2EsCi0JCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4XzJfc3hnYSkpOwotCQlicmVhazsKLQl9Ci0Jc2V0ZnJlcShnc3BjYV9kZXYpOwotCXNldGF1dG9nYWluXzk2KGdzcGNhX2Rldik7Ci0Jc2V0YnJpZ2h0bmVzc185Nihnc3BjYV9kZXYpOwotCXNldGNvbnRyYXN0Xzk2KGdzcGNhX2Rldik7Ci0Jc2V0ZXhwb3N1cmVfOTYoZ3NwY2FfZGV2KTsKLQlzZXRzaGFycG5lc3NfOTYoZ3NwY2FfZGV2KTsKLQlzZXRzYXR1cihnc3BjYV9kZXYpOwotCi0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7Ci0Jb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzZF9zdG9wTl9vdjc3Mngoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDkpOwogCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAwKTsKIH0KIAotc3RhdGljIHZvaWQgc2Rfc3RvcE5fb3Y5NjV4KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDAxKTsKLQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7Ci19Ci0KIC8qIFZhbHVlcyBmb3IgYm1IZWFkZXJJbmZvIChWaWRlbyBhbmQgU3RpbGwgSW1hZ2UgUGF5bG9hZCBIZWFkZXJzLCAyLjQuMy4zKSAqLwogI2RlZmluZSBVVkNfU1RSRUFNX0VPSAkoMSA8PCA3KQogI2RlZmluZSBVVkNfU1RSRUFNX0VSUgkoMSA8PCA2KQpAQCAtMTg3NSwxMSArOTQ1LDkgQEAKIAlfX3UzMiB0aGlzX3B0czsKIAl1MTYgdGhpc19maWQ7CiAJaW50IHJlbWFpbmluZ19sZW4gPSBsZW47Ci0JaW50IHBheWxvYWRfbGVuOwogCi0JcGF5bG9hZF9sZW4gPSBnc3BjYV9kZXYtPmNhbS5idWxrID8gMjA0OCA6IDIwNDA7CiAJZG8gewotCQlsZW4gPSBtaW4ocmVtYWluaW5nX2xlbiwgcGF5bG9hZF9sZW4pOworCQlsZW4gPSBtaW4ocmVtYWluaW5nX2xlbiwgMjA0OCk7CiAKIAkJLyogUGF5bG9hZHMgYXJlIHByZWZpeGVkIHdpdGggYSBVVkMtc3R5bGUgaGVhZGVyLiAgV2UKIAkJICAgY29uc2lkZXIgYSBmcmFtZSB0byBzdGFydCB3aGVuIHRoZSBGSUQgdG9nZ2xlcywgb3IgdGhlIFBUUwpAQCAtMTkxOCw3ICs5ODYsMTcgQEAKIAkJCQkJZGF0YSArIDEyLCBsZW4gLSAxMik7CiAJCS8qIElmIHRoaXMgcGFja2V0IGlzIG1hcmtlZCBhcyBFT0YsIGVuZCB0aGUgZnJhbWUgKi8KIAkJfSBlbHNlIGlmIChkYXRhWzFdICYgVVZDX1NUUkVBTV9FT0YpIHsKKwkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWU7CisKIAkJCXNkLT5sYXN0X3B0cyA9IDA7CisJCQlmcmFtZSA9IGdzcGNhX2dldF9pX2ZyYW1lKGdzcGNhX2Rldik7CisJCQlpZiAoZnJhbWUgPT0gTlVMTCkKKwkJCQlnb3RvIGRpc2NhcmQ7CisJCQlpZiAoZnJhbWUtPmRhdGFfZW5kIC0gZnJhbWUtPmRhdGEgKyAobGVuIC0gMTIpICE9CisJCQkgICAgZ3NwY2FfZGV2LT53aWR0aCAqIGdzcGNhX2Rldi0+aGVpZ2h0ICogMikgeworCQkJCVBERUJVRyhEX1BBQ0ssICJ3cm9uZyBzaXplZCBmcmFtZSIpOworCQkJCWdvdG8gZGlzY2FyZDsKKwkJCX0KIAkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULAogCQkJCQlkYXRhICsgMTIsIGxlbiAtIDEyKTsKIAkJfSBlbHNlIHsKQEAgLTE5NjUsMTIgKzEwNDMsOCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXNkLT5leHBvc3VyZSA9IHZhbDsKLQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKLQkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzcyWCkKLQkJCXNldGV4cG9zdXJlXzc3KGdzcGNhX2Rldik7Ci0JCWVsc2UKLQkJCXNldGV4cG9zdXJlXzk2KGdzcGNhX2Rldik7Ci0JfQorCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk4NywxMiArMTA2MSw4IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJc2QtPmJyaWdodG5lc3MgPSB2YWw7Ci0JaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7Ci0JCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpCi0JCQlzZXRicmlnaHRuZXNzXzc3KGdzcGNhX2Rldik7Ci0JCWVsc2UKLQkJCXNldGJyaWdodG5lc3NfOTYoZ3NwY2FfZGV2KTsKLQl9CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwMDksMTIgKzEwNzksOCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXNkLT5jb250cmFzdCA9IHZhbDsKLQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKLQkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzcyWCkKLQkJCXNldGNvbnRyYXN0Xzc3KGdzcGNhX2Rldik7Ci0JCWVsc2UKLQkJCXNldGNvbnRyYXN0Xzk2KGdzcGNhX2Rldik7Ci0JfQorCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjAyNiw0MSArMTA5Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2Rfc2V0c2F0dXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0Jc2QtPnNhdHVyID0gdmFsOwotCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKLQkJc2V0c2F0dXIoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzZF9nZXRzYXR1cihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0JKnZhbCA9IHNkLT5zYXR1cjsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlzZC0+bGlnaHRmcmVxID0gdmFsOwotCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKLQkJc2V0ZnJlcShnc3BjYV9kZXYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCSp2YWwgPSBzZC0+bGlnaHRmcmVxOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHNkX3NldHJlZGJsYyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0yMTIyLDIyICsxMTUzLDE0IEBACiAJc2QtPmF1dG9nYWluID0gdmFsOwogCiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7Ci0JCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpIHsKIAotCQkJLyogdGhlIGF1dG8gd2hpdGUgYmFsYW5jZSBjb250cm9sIHdvcmtzIG9ubHkKLQkJCSAqIHdoZW4gYXV0byBnYWluIGlzIHNldCAqLwotCQkJaWYgKHZhbCkKLQkJCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyAmPSB+KDEgPDwgQVdCXzc3X0lEWCk7Ci0JCQllbHNlCi0JCQkJZ3NwY2FfZGV2LT5jdHJsX2luYWMgfD0gKDEgPDwgQVdCXzc3X0lEWCk7Ci0JCQlzZXRhdXRvZ2Fpbl83Nyhnc3BjYV9kZXYpOwotCQl9IGVsc2UgewotCQkJaWYgKHZhbCkKLQkJCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyB8PSAoMSA8PCBFWFBPXzk2X0lEWCk7Ci0JCQllbHNlCi0JCQkJZ3NwY2FfZGV2LT5jdHJsX2luYWMgJj0gfigxIDw8IEVYUE9fOTZfSURYKTsKLQkJCXNldGF1dG9nYWluXzk2KGdzcGNhX2Rldik7Ci0JCX0KKwkJLyogdGhlIGF1dG8gd2hpdGUgYmFsYW5jZSBjb250cm9sIHdvcmtzIG9ubHkKKwkJICogd2hlbiBhdXRvIGdhaW4gaXMgc2V0ICovCisJCWlmICh2YWwpCisJCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyAmPSB+KDEgPDwgQVdCX0lEWCk7CisJCWVsc2UKKwkJCWdzcGNhX2Rldi0+Y3RybF9pbmFjIHw9ICgxIDw8IEFXQl9JRFgpOworCQlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIxNzMsMTIgKzExOTYsOCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCXNkLT5zaGFycG5lc3MgPSB2YWw7Ci0JaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7Ci0JCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpCi0JCQlzZXRzaGFycG5lc3NfNzcoZ3NwY2FfZGV2KTsKLQkJZWxzZQotCQkJc2V0c2hhcnBuZXNzXzk2KGdzcGNhX2Rldik7Ci0JfQorCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0c2hhcnBuZXNzKGdzcGNhX2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyNTcsNyArMTI3Niw3IEBACiAKIAkvKiBTZXQgcmVxdWVzdGVkIGZyYW1lcmF0ZSAqLwogCXNkLT5mcmFtZV9yYXRlID0gdHBmLT5kZW5vbWluYXRvciAvIHRwZi0+bnVtZXJhdG9yOwotCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZyAmJiBzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc3MlgpCisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRfZnJhbWVfcmF0ZShnc3BjYV9kZXYpOwogCiAJLyogUmV0dXJuIHRoZSBhY3R1YWwgZnJhbWVyYXRlICovCkBAIC0yMjY3LDU3ICsxMjg2LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2RfcXVlcnltZW51KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqbWVudSkKLXsKLQlzd2l0Y2ggKG1lbnUtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWToKLQkJc3dpdGNoIChtZW51LT5pbmRleCkgewotCQljYXNlIDA6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV9ESVNBQkxFRCAqLwotCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICJOb0ZsaWtlciIpOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgMToJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzUwSFogKi8KLQkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNTAgSHoiKTsKLQkJCXJldHVybiAwOwotCQljYXNlIDI6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV82MEhaICovCi0JCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIjYwIEh6Iik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlicmVhazsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX292NzcyeCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lICAgICA9IE1PRFVMRV9OQU1FLAotCS5jdHJscyAgICA9IHNkX2N0cmxzX292NzcyeCwKLQkubmN0cmxzICAgPSBBUlJBWV9TSVpFKHNkX2N0cmxzX292NzcyeCksCisJLmN0cmxzICAgID0gc2RfY3RybHMsCisJLm5jdHJscyAgID0gQVJSQVlfU0laRShzZF9jdHJscyksCiAJLmNvbmZpZyAgID0gc2RfY29uZmlnLAogCS5pbml0ICAgICA9IHNkX2luaXQsCi0JLnN0YXJ0ICAgID0gc2Rfc3RhcnRfb3Y3NzJ4LAotCS5zdG9wTiAgICA9IHNkX3N0b3BOX292NzcyeCwKKwkuc3RhcnQgICAgPSBzZF9zdGFydCwKKwkuc3RvcE4gICAgPSBzZF9zdG9wTiwKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKIAkuZ2V0X3N0cmVhbXBhcm0gPSBzZF9nZXRfc3RyZWFtcGFybSwKIAkuc2V0X3N0cmVhbXBhcm0gPSBzZF9zZXRfc3RyZWFtcGFybSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjX292OTY1eCA9IHsKLQkubmFtZSAgICAgPSBNT0RVTEVfTkFNRSwKLQkuY3RybHMgICAgPSBzZF9jdHJsc19vdjk2NXgsCi0JLm5jdHJscyAgID0gQVJSQVlfU0laRShzZF9jdHJsc19vdjk2NXgpLAotCS5jb25maWcgICA9IHNkX2NvbmZpZywKLQkuaW5pdCAgICAgPSBzZF9pbml0LAotCS5zdGFydCAgICA9IHNkX3N0YXJ0X292OTY1eCwKLQkuc3RvcE4gICAgPSBzZF9zdG9wTl9vdjk2NXgsCi0JLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCi0JLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKLX07Ci0KIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwogc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7Ci0Je1VTQl9ERVZJQ0UoMHgwNmY4LCAweDMwMDMpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfT1Y5NjVYfSwKLQl7VVNCX0RFVklDRSgweDE0MTUsIDB4MjAwMCksIC5kcml2ZXJfaW5mbyA9IFNFTlNPUl9PVjc3Mlh9LAorCXtVU0JfREVWSUNFKDB4MTQxNSwgMHgyMDAwKX0sCiAJe30KIH07CiAKQEAgLTIzMjYsMTEgKzEzMTEsNyBAQAogLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KIHN0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLAotCQkJCWlkLT5kcml2ZXJfaW5mbyA9PSBTRU5TT1JfT1Y3NzJYCi0JCQkJCT8gJnNkX2Rlc2Nfb3Y3NzJ4Ci0JCQkJCTogJnNkX2Rlc2Nfb3Y5NjV4LAotCQkJCXNpemVvZihzdHJ1Y3Qgc2QpLAorCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKIAkJCQlUSElTX01PRFVMRSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzRfOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNF85LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJlNWEwMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzRfOS5jCkBAIC0wLDAgKzEsMTQ3NyBAQAorLyoKKyAqIG92NTM0LW92OTY1eCBnc3BjYSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBKZWFuLUZyYW5jb2lzIE1vaW5lIGh0dHA6Ly9tb2luZWpmLmZyZWUuZnIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbnRvbmlvIE9zcGl0ZSA8b3NwaXRlQHN0dWRlbnRpLnVuaW5hLml0PgorICogQ29weXJpZ2h0IChDKSAyMDA4IEppbSBQYXJpcyA8amltQGp0YW4uY29tPgorICoKKyAqIEJhc2VkIG9uIGEgcHJvdG90eXBlIHdyaXR0ZW4gYnkgTWFyayBGZXJyZWxsIDxtYWpvcnRyaXBzQGdtYWlsLmNvbT4KKyAqIFVTQiBwcm90b2NvbCByZXZlcnNlIGVuZ2luZWVyZWQgYnkgSmltIFBhcmlzIDxqaW1AanRhbi5jb20+CisgKiBodHRwczovL2ppbS5zaC9zdm4vamltL2RldmwvcGxheXN0YXRpb24vcHMzL2V5ZS90ZXN0LworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAib3Y1MzRfOSIKKworI2luY2x1ZGUgImdzcGNhLmgiCisKKyNkZWZpbmUgT1Y1MzRfUkVHX0FERFJFU1MJMHhmMQkvKiBzZW5zb3IgYWRkcmVzcyAqLworI2RlZmluZSBPVjUzNF9SRUdfU1VCQUREUgkweGYyCisjZGVmaW5lIE9WNTM0X1JFR19XUklURQkJMHhmMworI2RlZmluZSBPVjUzNF9SRUdfUkVBRAkJMHhmNAorI2RlZmluZSBPVjUzNF9SRUdfT1BFUkFUSU9OCTB4ZjUKKyNkZWZpbmUgT1Y1MzRfUkVHX1NUQVRVUwkweGY2CisKKyNkZWZpbmUgT1Y1MzRfT1BfV1JJVEVfMwkweDM3CisjZGVmaW5lIE9WNTM0X09QX1dSSVRFXzIJMHgzMworI2RlZmluZSBPVjUzNF9PUF9SRUFEXzIJCTB4ZjkKKworI2RlZmluZSBDVFJMX1RJTUVPVVQgNTAwCisKK01PRFVMRV9BVVRIT1IoIkplYW4tRnJhbmNvaXMgTW9pbmUgPG1vaW5lamZAZnJlZS5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EvT1Y1MzRfOSBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCV9fdTMyIGxhc3RfcHRzOworCXU4IGxhc3RfZmlkOworCisJdTggYnJpZ2h0bmVzczsKKwl1OCBjb250cmFzdDsKKwl1OCBhdXRvZ2FpbjsKKwl1OCBleHBvc3VyZTsKKwlzOCBzaGFycG5lc3M7CisJdTggc2F0dXI7CisJdTggZnJlcTsKK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0c2F0dXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisgICAgewkJCQkJCQkvKiAwICovCisJeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQnJpZ2h0bmVzcyIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxNSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBCUklHSFRORVNTX0RFRiA3CisJCS5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCisJfSwKKwkuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKKwkuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKKyAgICB9LAorICAgIHsJCQkJCQkJLyogMSAqLworCXsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJDb250cmFzdCIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxNSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBDT05UUkFTVF9ERUYgMworCQkuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKKwl9LAorCS5zZXQgPSBzZF9zZXRjb250cmFzdCwKKwkuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCisgICAgfSwKKyAgICB7CQkJCQkJCS8qIDIgKi8KKwl7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQVVUT0dBSU4sCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUgICAgPSAiQXV0b2dhaW4iLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMSwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBBVVRPR0FJTl9ERUYgMQorCQkuZGVmYXVsdF92YWx1ZSA9IEFVVE9HQUlOX0RFRiwKKwl9LAorCS5zZXQgPSBzZF9zZXRhdXRvZ2FpbiwKKwkuZ2V0ID0gc2RfZ2V0YXV0b2dhaW4sCisgICAgfSwKKyNkZWZpbmUgRVhQT19JRFggMworICAgIHsJCQkJCQkJLyogMyAqLworCXsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJFeHBvc3VyZSIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAzLAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEVYUE9fREVGIDAKKwkJLmRlZmF1bHRfdmFsdWUgPSBFWFBPX0RFRiwKKwl9LAorCS5zZXQgPSBzZF9zZXRleHBvc3VyZSwKKwkuZ2V0ID0gc2RfZ2V0ZXhwb3N1cmUsCisgICAgfSwKKyAgICB7CQkJCQkJCS8qIDQgKi8KKwl7CisJCS5pZCAgICAgID0gVjRMMl9DSURfU0hBUlBORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIlNoYXJwbmVzcyIsCisJCS5taW5pbXVtID0gLTEsCQkvKiAtMSA9IGF1dG8gKi8KKwkJLm1heGltdW0gPSA0LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIFNIQVJQTkVTU19ERUYgLTEKKwkJLmRlZmF1bHRfdmFsdWUgPSBTSEFSUE5FU1NfREVGLAorCX0sCisJLnNldCA9IHNkX3NldHNoYXJwbmVzcywKKwkuZ2V0ID0gc2RfZ2V0c2hhcnBuZXNzLAorICAgIH0sCisgICAgewkJCQkJCQkvKiA1ICovCisJeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiU2F0dXJhdGlvbiIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSA0LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIFNBVFVSX0RFRiAyCisJCS5kZWZhdWx0X3ZhbHVlID0gU0FUVVJfREVGLAorCX0sCisJLnNldCA9IHNkX3NldHNhdHVyLAorCS5nZXQgPSBzZF9nZXRzYXR1ciwKKyAgICB9LAorICAgIHsKKwl7CisJCS5pZAkgPSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9NRU5VLAorCQkubmFtZSAgICA9ICJMaWdodCBmcmVxdWVuY3kgZmlsdGVyIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDIsCS8qIDA6IDAsIDE6IDUwSHosIDI6NjBIeiAqLworCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEZSRVFfREVGIDAKKwkJLmRlZmF1bHRfdmFsdWUgPSBGUkVRX0RFRiwKKwl9LAorCS5zZXQgPSBzZF9zZXRmcmVxLAorCS5nZXQgPSBzZF9nZXRmcmVxLAorICAgIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBvdjk2NXhfbW9kZVtdID0geworI2RlZmluZSBRVkdBX01PREUgMAorCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDMyMCwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHfSwKKyNkZWZpbmUgVkdBX01PREUgMQorCXs2NDAsIDQ4MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCAqIDMgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHfSwKKyNkZWZpbmUgU1ZHQV9NT0RFIDIKKwl7ODAwLCA2MDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA4MDAsCisJCS5zaXplaW1hZ2UgPSA4MDAgKiA2MDAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCisjZGVmaW5lIFhHQV9NT0RFIDMKKwl7MTAyNCwgNzY4LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTAyNCwKKwkJLnNpemVpbWFnZSA9IDEwMjQgKiA3NjggKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCisjZGVmaW5lIFNYR0FfTU9ERSA0CisJezEyODAsIDEwMjQsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxMjgwLAorCQkuc2l6ZWltYWdlID0gMTI4MCAqIDEwMjQgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFR30sCit9OworCitzdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRbXVsyXSA9IHsKKwl7MHg4OCwgMHhmOH0sCisJezB4ODksIDB4ZmZ9LAorCXsweDc2LCAweDAzfSwKKwl7MHg5MiwgMHgwM30sCisJezB4OTUsIDB4MTB9LAorCXsweGUyLCAweDAwfSwKKwl7MHhlNywgMHgzZX0sCisJezB4OGQsIDB4MWN9LAorCXsweDhlLCAweDAwfSwKKwl7MHg4ZiwgMHgwMH0sCisJezB4MWYsIDB4MDB9LAorCXsweGMzLCAweGY5fSwKKwl7MHg4OSwgMHhmZn0sCisJezB4ODgsIDB4Zjh9LAorCXsweDc2LCAweDAzfSwKKwl7MHg5MiwgMHgwMX0sCisJezB4OTMsIDB4MTh9LAorCXsweDFjLCAweDBhfSwKKwl7MHgxZCwgMHg0OH0sCisJezB4YzAsIDB4NTB9LAorCXsweGMxLCAweDNjfSwKKwl7MHgzNCwgMHgwNX0sCisJezB4YzIsIDB4MGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHgzNCwgMHgwNX0sCisJezB4ZTcsIDB4MmV9LAorCXsweDMxLCAweGY5fSwKKwl7MHgzNSwgMHgwMn0sCisJezB4ZDksIDB4MTB9LAorCXsweDI1LCAweDQyfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRbXVsyXSA9IHsKKwl7MHgxMiwgMHg4MH0sCS8qIGNvbTcgLSBTU0NCIHJlc2V0ICovCisJezB4MDAsIDB4MDB9LAkvKiBnYWluICovCisJezB4MDEsIDB4ODB9LAkvKiBibHVlICovCisJezB4MDIsIDB4ODB9LAkvKiByZWQgKi8KKwl7MHgwMywgMHgxYn0sCS8qIHZyZWYgKi8KKwl7MHgwNCwgMHgwM30sCS8qIGNvbTEgLSBleHBvc3VyZSBsb3cgYml0cyAqLworCXsweDBiLCAweDU3fSwJLyogdmVyICovCisJezB4MGUsIDB4NjF9LAkvKiBjb201ICovCisJezB4MGYsIDB4NDJ9LAkvKiBjb202ICovCisJezB4MTEsIDB4MDB9LAkvKiBjbGtyYyAqLworCXsweDEyLCAweDAyfSwJLyogY29tNyAtIDE1ZnBzIFZHQSBZVVlWICovCisJezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KKwl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KKwl7MHgxNiwgMHgyNH0sCS8qIHJlZzE2ICovCisJezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQqLworCXsweDE4LCAweGJkfSwJLyogaHN0b3AgKi8KKwl7MHgxOSwgMHgwMX0sCS8qIHZzdHJ0ICovCisJezB4MWEsIDB4ODF9LAkvKiB2c3RvcCovCisJezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCisJezB4MjQsIDB4M2N9LAkvKiBhZXcgKi8KKwl7MHgyNSwgMHgzNn0sCS8qIGFlYiAqLworCXsweDI2LCAweDcxfSwJLyogdnB0ICovCisJezB4MjcsIDB4MDh9LAkvKiBiYmlhcyAqLworCXsweDI4LCAweDA4fSwJLyogZ2JiaWFzICovCisJezB4MjksIDB4MTV9LAkvKiBnciBjb20gKi8KKwl7MHgyYSwgMHgwMH0sCS8qIGV4aGNoICovCisJezB4MmIsIDB4MDB9LAkvKiBleGhjbCAqLworCXsweDJjLCAweDA4fSwJLyogcmJpYXMgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHgzMywgMHgwMH0sCS8qIGNobGYgKi8KKwl7MHgzNCwgMHgzZn0sCS8qIGFyZWYxICovCisJezB4MzUsIDB4MDB9LAkvKiBhcmVmMiAqLworCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KKwl7MHgzOCwgMHg3Mn0sCS8qIGFkYzIgKi8KKwl7MHgzOSwgMHg1N30sCS8qIGFyZWY0ICovCisJezB4M2EsIDB4ODB9LAkvKiB0c2xiIC0geXV5diAqLworCXsweDNiLCAweGM0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCisJezB4M2QsIDB4OTl9LAkvKiBjb20xMyAqLworCXsweDNmLCAweGMxfSwJLyogZWRnZSAqLworCXsweDQwLCAweGMwfSwJLyogY29tMTUgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NDIsIDB4YzB9LAkvKiBjb20xNyAqLworCXsweDQzLCAweDBhfSwJLyogcnN2ZCAqLworCXsweDQ0LCAweGYwfSwKKwl7MHg0NSwgMHg0Nn0sCisJezB4NDYsIDB4NjJ9LAorCXsweDQ3LCAweDJhfSwKKwl7MHg0OCwgMHgzY30sCisJezB4NGEsIDB4ZmN9LAorCXsweDRiLCAweGZjfSwKKwl7MHg0YywgMHg3Zn0sCisJezB4NGQsIDB4N2Z9LAorCXsweDRlLCAweDdmfSwKKwl7MHg0ZiwgMHg5OH0sCS8qIG1hdHJpeCAqLworCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAkvKiBtYXRyaXggY29lZiBzaWduICovCisJezB4NTksIDB4ODV9LAkvKiBBV0IgY29udHJvbCAqLworCXsweDVhLCAweGE5fSwKKwl7MHg1YiwgMHg2NH0sCisJezB4NWMsIDB4ODR9LAorCXsweDVkLCAweDUzfSwKKwl7MHg1ZSwgMHgwZX0sCisJezB4NWYsIDB4ZjB9LAkvKiBBV0IgYmx1ZSBsaW1pdCAqLworCXsweDYwLCAweGYwfSwJLyogQVdCIHJlZCBsaW1pdCAqLworCXsweDYxLCAweGYwfSwJLyogQVdCIGdyZWVuIGxpbWl0ICovCisJezB4NjIsIDB4MDB9LAkvKiBsY2MxICovCisJezB4NjMsIDB4MDB9LAkvKiBsY2MyICovCisJezB4NjQsIDB4MDJ9LAkvKiBsY2MzICovCisJezB4NjUsIDB4MTZ9LAkvKiBsY2M0ICovCisJezB4NjYsIDB4MDF9LAkvKiBsY2M1ICovCisJezB4NjksIDB4MDJ9LAkvKiBodiAqLworCXsweDZiLCAweDVhfSwJLyogZGJ2bCAqLworCXsweDZjLCAweDA0fSwKKwl7MHg2ZCwgMHg1NX0sCisJezB4NmUsIDB4MDB9LAorCXsweDZmLCAweDlkfSwKKwl7MHg3MCwgMHgyMX0sCS8qIGRuc3RoICovCisJezB4NzEsIDB4Nzh9LAorCXsweDcyLCAweDAwfSwJLyogcG9pZHggKi8KKwl7MHg3MywgMHgwMX0sCS8qIHBja2R2ICovCisJezB4NzQsIDB4M2F9LAkvKiB4aW5keCAqLworCXsweDc1LCAweDM1fSwJLyogeWluZHggKi8KKwl7MHg3NiwgMHgwMX0sCisJezB4NzcsIDB4MDJ9LAorCXsweDdhLCAweDEyfSwJLyogZ2FtbWEgY3VydmUgKi8KKwl7MHg3YiwgMHgwOH0sCisJezB4N2MsIDB4MTZ9LAorCXsweDdkLCAweDMwfSwKKwl7MHg3ZSwgMHg1ZX0sCisJezB4N2YsIDB4NzJ9LAorCXsweDgwLCAweDgyfSwKKwl7MHg4MSwgMHg4ZX0sCisJezB4ODIsIDB4OWF9LAorCXsweDgzLCAweGE0fSwKKwl7MHg4NCwgMHhhY30sCisJezB4ODUsIDB4Yjh9LAorCXsweDg2LCAweGMzfSwKKwl7MHg4NywgMHhkNn0sCisJezB4ODgsIDB4ZTZ9LAorCXsweDg5LCAweGYyfSwKKwl7MHg4YSwgMHgwM30sCisJezB4OGMsIDB4ODl9LAkvKiBjb20xOSAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDkwLCAweDdkfSwKKwl7MHg5MSwgMHg3Yn0sCisJezB4OWQsIDB4MDN9LAkvKiBsY2M2ICovCisJezB4OWUsIDB4MDR9LAkvKiBsY2M3ICovCisJezB4OWYsIDB4N2F9LAorCXsweGEwLCAweDc5fSwKKwl7MHhhMSwgMHg0MH0sCS8qIGFlY2htICovCisJezB4YTQsIDB4NTB9LAkvKiBjb20yMSAqLworCXsweGE1LCAweDY4fSwJLyogY29tMjYgKi8KKwl7MHhhNiwgMHg0YX0sCS8qIEFXQiBncmVlbiAqLworCXsweGE4LCAweGMxfSwJLyogcmVmYTggKi8KKwl7MHhhOSwgMHhlZn0sCS8qIHJlZmE5ICovCisJezB4YWEsIDB4OTJ9LAorCXsweGFiLCAweDA0fSwKKwl7MHhhYywgMHg4MH0sCS8qIGJsYWNrIGxldmVsIGNvbnRyb2wgKi8KKwl7MHhhZCwgMHg4MH0sCisJezB4YWUsIDB4ODB9LAorCXsweGFmLCAweDgwfSwKKwl7MHhiMiwgMHhmMn0sCisJezB4YjMsIDB4MjB9LAorCXsweGI0LCAweDIwfSwJLyogY3RybGI0ICovCisJezB4YjUsIDB4MDB9LAorCXsweGI2LCAweGFmfSwKKwl7MHhiYiwgMHhhZX0sCisJezB4YmMsIDB4N2Z9LAkvKiBBREMgY2hhbm5lbCBvZmZzZXRzICovCisJezB4ZGIsIDB4N2Z9LAorCXsweGJlLCAweDdmfSwKKwl7MHhiZiwgMHg3Zn0sCisJezB4YzAsIDB4ZTJ9LAorCXsweGMxLCAweGMwfSwKKwl7MHhjMiwgMHgwMX0sCisJezB4YzMsIDB4NGV9LAorCXsweGM2LCAweDg1fSwKKwl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCisJezB4YzksIDB4ZTB9LAorCXsweGNhLCAweGU4fSwKKwl7MHhjYiwgMHhmMH0sCisJezB4Y2MsIDB4ZDh9LAorCXsweGNkLCAweGYxfSwKKwl7MHg0ZiwgMHg5OH0sCS8qIG1hdHJpeCAqLworCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAorCXsweGZmLCAweDQxfSwJLyogcmVhZCA0MSwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisKKwl7MHhjNSwgMHgwM30sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCisJezB4NmEsIDB4MDJ9LAkvKiA1MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCisJezB4MTIsIDB4NjJ9LAkvKiBjb203IC0gMzBmcHMgVkdBIFlVViAqLworCXsweDM2LCAweGZhfSwJLyogYXJlZjMgKi8KKwl7MHg2OSwgMHgwYX0sCS8qIGh2ICovCisJezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDNlLCAweDBjfSwKKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NzIsIDB4MDB9LAorCXsweDczLCAweDAwfSwKKwl7MHg3NCwgMHgzYX0sCisJezB4NzUsIDB4MzV9LAorCXsweDc2LCAweDAxfSwKKwl7MHhjNywgMHg4MH0sCisJezB4MDMsIDB4MTJ9LAkvKiB2cmVmICovCisJezB4MTcsIDB4MTZ9LAkvKiBoc3RhcnQgKi8KKwl7MHgxOCwgMHgwMn0sCS8qIGhzdG9wICovCisJezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLworCXsweDFhLCAweDNkfSwJLyogdnN0b3AgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHhjMCwgMHhhYX0sCit9OworCitzdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRfMltdWzJdID0geworCXsweDk0LCAweGFhfSwKKwl7MHhmMSwgMHg2MH0sCisJezB4ZTUsIDB4MDR9LAorCXsweGMwLCAweDUwfSwKKwl7MHhjMSwgMHgzY30sCisJezB4OGMsIDB4MDB9LAorCXsweDhkLCAweDFjfSwKKwl7MHgzNCwgMHgwNX0sCisKKwl7MHhjMiwgMHgwY30sCisJezB4YzMsIDB4Zjl9LAorCXsweGRhLCAweDAxfSwKKwl7MHg1MCwgMHgwMH0sCisJezB4NTEsIDB4YTB9LAorCXsweDUyLCAweDNjfSwKKwl7MHg1MywgMHgwMH0sCisJezB4NTQsIDB4MDB9LAorCXsweDU1LCAweDAwfSwKKwl7MHg1NywgMHgwMH0sCisJezB4NWMsIDB4MDB9LAorCXsweDVhLCAweGEwfSwKKwl7MHg1YiwgMHg3OH0sCisJezB4MzUsIDB4MDJ9LAorCXsweGQ5LCAweDEwfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRfMltdWzJdID0geworCXsweDNiLCAweGM0fSwKKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KKwl7MHgwMCwgMHgwMH0sCS8qIGdhaW4gKi8KKwl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLworCXsweDExLCAweDAzfSwJLyogY2xrcmMgKi8KKwl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KKwl7MHg2YSwgMHgwNX0sCisJezB4YzUsIDB4MDd9LAorCXsweGEyLCAweDRifSwKKwl7MHhhMywgMHgzZX0sCisJezB4MmQsIDB4MDB9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMH0sCS8qIGNvbTE3ICovCisJezB4MmQsIDB4MDB9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMX0sCS8qIGNvbTE3ICovCisvKiBzaGFycG5lc3MgKi8KKwl7MHgzZiwgMHgwMX0sCisJezB4ZmYsIDB4NDJ9LAkvKiByZWFkIDQyLCB3cml0ZSBmZiAwMCAqLworCXsweDQyLCAweGMxfSwJLyogY29tMTcgKi8KKy8qIHNhdHVyYXRpb24gKi8KKwl7MHg0ZiwgMHg5OH0sCS8qIG1hdHJpeCAqLworCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAorCXsweGZmLCAweDQxfSwJLyogcmVhZCA0MSwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisvKiBjb250cmFzdCAqLworCXsweDU2LCAweDQwfSwKKy8qIGJyaWdodG5lc3MgKi8KKwl7MHg1NSwgMHg4Zn0sCisvKiBleHBvICovCisJezB4MTAsIDB4MjV9LAkvKiBhZWNoIC0gZXhwb3N1cmUgaGlnaCBiaXRzICovCisJezB4ZmYsIDB4MTN9LAkvKiByZWFkIDEzLCB3cml0ZSBmZiAwMCAqLworCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0XzFfdmdhW11bMl0gPSB7CS8qIHNhbWUgZm9yIHF2Z2EgKi8KKwl7MHgxMiwgMHg2Mn0sCS8qIGNvbTcgLSAzMGZwcyBWR0EgWVVWICovCisJezB4MzYsIDB4ZmF9LAkvKiBhcmVmMyAqLworCXsweDY5LCAweDBhfSwJLyogaHYgKi8KKwl7MHg4YywgMHg4OX0sCS8qIGNvbTIyICovCisJezB4MTQsIDB4Mjh9LAkvKiBjb205ICovCisJezB4M2UsIDB4MGN9LAkvKiBjb20xNCAqLworCXsweDQxLCAweDQwfSwJLyogY29tMTYgKi8KKwl7MHg3MiwgMHgwMH0sCisJezB4NzMsIDB4MDB9LAorCXsweDc0LCAweDNhfSwKKwl7MHg3NSwgMHgzNX0sCisJezB4NzYsIDB4MDF9LAorCXsweGM3LCAweDgwfSwJLyogY29tMjQgKi8KKwl7MHgwMywgMHgxMn0sCS8qIHZyZWYgKi8KKwl7MHgxNywgMHgxNn0sCS8qIGhzdGFydCAqLworCXsweDE4LCAweDAyfSwJLyogaHN0b3AgKi8KKwl7MHgxOSwgMHgwMX0sCS8qIHZzdHJ0ICovCisJezB4MWEsIDB4M2R9LAkvKiB2c3RvcCAqLworCXsweDMyLCAweGZmfSwJLyogaHJlZiAqLworCXsweGMwLCAweGFhfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfMV9zdmdhW11bMl0gPSB7CisJezB4MTIsIDB4MDJ9LAkvKiBjb203IC0gWVVZViAtIFZHQSAxNSBmdWxsIHJlc29sdXRpb24gKi8KKwl7MHgzNiwgMHhmOH0sCS8qIGFyZWYzICovCisJezB4NjksIDB4MDJ9LAkvKiBodiAqLworCXsweDhjLCAweDBkfSwJLyogY29tMjIgKi8KKwl7MHgzZSwgMHgwY30sCS8qIGNvbTE0ICovCisJezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLworCXsweDcyLCAweDAwfSwKKwl7MHg3MywgMHgwMX0sCisJezB4NzQsIDB4M2F9LAorCXsweDc1LCAweDM1fSwKKwl7MHg3NiwgMHgwMX0sCisJezB4YzcsIDB4ODB9LAkvKiBjb20yNCAqLworCXsweDAzLCAweDFifSwJLyogdnJlZiAqLworCXsweDE3LCAweDFkfSwJLyogaHN0YXJ0ICovCisJezB4MTgsIDB4YmR9LAkvKiBoc3RvcCAqLworCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KKwl7MHgxYSwgMHg4MX0sCS8qIHZzdG9wICovCisJezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCisJezB4YzAsIDB4ZTJ9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF8xX3hnYVtdWzJdID0geworCXsweDEyLCAweDAyfSwJLyogY29tNyAqLworCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KKwl7MHg2OSwgMHgwMn0sCS8qIGh2ICovCisJezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NzIsIDB4MDB9LAorCXsweDczLCAweDAxfSwKKwl7MHg3NCwgMHgzYX0sCisJezB4NzUsIDB4MzV9LAorCXsweDc2LCAweDAxfSwKKwl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCisJezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCisJezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQgKi8KKwl7MHgxOCwgMHhiZH0sCS8qIGhzdG9wICovCisJezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLworCXsweDFhLCAweDgxfSwJLyogdnN0b3AgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHhjMCwgMHhlMn0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0XzFfc3hnYVtdWzJdID0geworCXsweDEyLCAweDAyfSwJLyogY29tNyAqLworCXsweDM2LCAweGY4fSwJLyogYXJlZjMgKi8KKwl7MHg2OSwgMHgwMn0sCS8qIGh2ICovCisJezB4OGMsIDB4ODl9LAkvKiBjb20yMiAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDNlLCAweDBjfSwJLyogY29tMTQgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NzIsIDB4MDB9LAorCXsweDczLCAweDAxfSwKKwl7MHg3NCwgMHgzYX0sCisJezB4NzUsIDB4MzV9LAorCXsweDc2LCAweDAxfSwKKwl7MHhjNywgMHg4MH0sCS8qIGNvbTI0ICovCisJezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCisJezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQgKi8KKwl7MHgxOCwgMHgwMn0sCS8qIGhzdG9wICovCisJezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLworCXsweDFhLCAweDgxfSwJLyogdnN0b3AgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHhjMCwgMHhlMn0sCit9OworCitzdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X3F2Z2FbXVsyXSA9IHsKKwl7MHg5NCwgMHhhYX0sCisJezB4ZjEsIDB4NjB9LAorCXsweGU1LCAweDA0fSwKKwl7MHhjMCwgMHg1MH0sCisJezB4YzEsIDB4M2N9LAorCXsweDhjLCAweDAwfSwKKwl7MHg4ZCwgMHgxY30sCisJezB4MzQsIDB4MDV9LAorCisJezB4YzIsIDB4NGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHhkYSwgMHgwMH0sCisJezB4NTAsIDB4MDB9LAorCXsweDUxLCAweGEwfSwKKwl7MHg1MiwgMHg3OH0sCisJezB4NTMsIDB4MDB9LAorCXsweDU0LCAweDAwfSwKKwl7MHg1NSwgMHgwMH0sCisJezB4NTcsIDB4MDB9LAorCXsweDVjLCAweDAwfSwKKwl7MHg1YSwgMHg1MH0sCisJezB4NWIsIDB4M2N9LAorCXsweDM1LCAweDAyfSwKKwl7MHhkOSwgMHgxMH0sCisJezB4OTQsIDB4MTF9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF92Z2FbXVsyXSA9IHsKKwl7MHg5NCwgMHhhYX0sCisJezB4ZjEsIDB4NjB9LAorCXsweGU1LCAweDA0fSwKKwl7MHhjMCwgMHg1MH0sCisJezB4YzEsIDB4M2N9LAorCXsweDhjLCAweDAwfSwKKwl7MHg4ZCwgMHgxY30sCisJezB4MzQsIDB4MDV9LAorCXsweGMyLCAweDBjfSwKKwl7MHhjMywgMHhmOX0sCisJezB4ZGEsIDB4MDF9LAorCXsweDUwLCAweDAwfSwKKwl7MHg1MSwgMHhhMH0sCisJezB4NTIsIDB4M2N9LAorCXsweDUzLCAweDAwfSwKKwl7MHg1NCwgMHgwMH0sCisJezB4NTUsIDB4MDB9LAorCXsweDU3LCAweDAwfSwKKwl7MHg1YywgMHgwMH0sCisJezB4NWEsIDB4YTB9LAorCXsweDViLCAweDc4fSwKKwl7MHgzNSwgMHgwMn0sCisJezB4ZDksIDB4MTB9LAorCXsweDk0LCAweDExfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfc3ZnYVtdWzJdID0geworCXsweDk0LCAweGFhfSwKKwl7MHhmMSwgMHg2MH0sCisJezB4ZTUsIDB4MDR9LAorCXsweGMwLCAweGEwfSwKKwl7MHhjMSwgMHg4MH0sCisJezB4OGMsIDB4MDB9LAorCXsweDhkLCAweDFjfSwKKwl7MHgzNCwgMHgwNX0sCisJezB4YzIsIDB4NGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHg1MCwgMHgwMH0sCisJezB4NTEsIDB4NDB9LAorCXsweDUyLCAweDAwfSwKKwl7MHg1MywgMHgwMH0sCisJezB4NTQsIDB4MDB9LAorCXsweDU1LCAweDg4fSwKKwl7MHg1NywgMHgwMH0sCisJezB4NWMsIDB4MDB9LAorCXsweDVhLCAweGM4fSwKKwl7MHg1YiwgMHg5Nn0sCisJezB4MzUsIDB4MDJ9LAorCXsweGQ5LCAweDEwfSwKKwl7MHhkYSwgMHgwMH0sCisJezB4OTQsIDB4MTF9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9zdGFydF94Z2FbXVsyXSA9IHsKKwl7MHg5NCwgMHhhYX0sCisJezB4ZjEsIDB4NjB9LAorCXsweGU1LCAweDA0fSwKKwl7MHhjMCwgMHhhMH0sCisJezB4YzEsIDB4ODB9LAorCXsweDhjLCAweDAwfSwKKwl7MHg4ZCwgMHgxY30sCisJezB4MzQsIDB4MDV9LAorCXsweGMyLCAweDRjfSwKKwl7MHhjMywgMHhmOX0sCisJezB4NTAsIDB4MDB9LAorCXsweDUxLCAweDQwfSwKKwl7MHg1MiwgMHgwMH0sCisJezB4NTMsIDB4MDB9LAorCXsweDU0LCAweDAwfSwKKwl7MHg1NSwgMHg4OH0sCisJezB4NTcsIDB4MDB9LAorCXsweDVjLCAweDAxfSwKKwl7MHg1YSwgMHgwMH0sCisJezB4NWIsIDB4YzB9LAorCXsweDM1LCAweDAyfSwKKwl7MHhkOSwgMHgxMH0sCisJezB4ZGEsIDB4MDF9LAorCXsweDk0LCAweDExfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfc3hnYVtdWzJdID0geworCXsweDk0LCAweGFhfSwKKwl7MHhmMSwgMHg2MH0sCisJezB4ZTUsIDB4MDR9LAorCXsweGMwLCAweGEwfSwKKwl7MHhjMSwgMHg4MH0sCisJezB4OGMsIDB4MDB9LAorCXsweDhkLCAweDFjfSwKKwl7MHgzNCwgMHgwNX0sCisJezB4YzIsIDB4MGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHhkYSwgMHgwMH0sCisJezB4MzUsIDB4MDJ9LAorCXsweGQ5LCAweDEwfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0XzJfcXZnYVtdWzJdID0geworCXsweDNiLCAweGU0fSwJLyogY29tMTEgLSBuaWdodCBtb2RlIDEvNCBmcmFtZSByYXRlICovCisJezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCisJezB4MTMsIDB4ZTB9LAkvKiBjb204ICovCisJezB4MDAsIDB4MDB9LAorCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCisJezB4MTEsIDB4MDF9LAkvKiBjbGtyYyAqLworCXsweDZiLCAweDVhfSwJLyogZGJsdiAqLworCXsweDZhLCAweDAyfSwJLyogNTAgSHogYmFuZGluZyBmaWx0ZXIgKi8KKwl7MHhjNSwgMHgwM30sCS8qIDYwIEh6IGJhbmRpbmcgZmlsdGVyICovCisJezB4YTIsIDB4OTZ9LAkvKiBiZDUwICovCisJezB4YTMsIDB4N2R9LAkvKiBiZDYwICovCisKKwl7MHhmZiwgMHgxM30sCS8qIHJlYWQgMTMsIHdyaXRlIGZmIDAwICovCisJezB4MTMsIDB4ZTd9LAorCXsweDNhLCAweDgwfSwJLyogdHNsYiAtIHl1eXYgKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfMl92Z2FbXVsyXSA9IHsKKwl7MHgzYiwgMHhjNH0sCS8qIGNvbTExIC0gbmlnaHQgbW9kZSAxLzQgZnJhbWUgcmF0ZSAqLworCXsweDFlLCAweDA0fSwJLyogbXZmcCAqLworCXsweDEzLCAweGUwfSwJLyogY29tOCAqLworCXsweDAwLCAweDAwfSwKKwl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLworCXsweDExLCAweDAzfSwJLyogY2xrcmMgKi8KKwl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KKwl7MHg2YSwgMHgwNX0sCS8qIDUwIEh6IGJhbmRpbmcgZmlsdGVyICovCisJezB4YzUsIDB4MDd9LAkvKiA2MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCXsweGEyLCAweDRifSwJLyogYmQ1MCAqLworCXsweGEzLCAweDNlfSwJLyogYmQ2MCAqLworCisJezB4MmQsIDB4MDB9LAkvKiBhZHZmbCAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF8yX3N2Z2FbXVsyXSA9IHsJLyogc2FtZSBmb3IgeGdhICovCisJezB4M2IsIDB4YzR9LAkvKiBjb20xMSAtIG5pZ2h0IG1vZGUgMS80IGZyYW1lIHJhdGUgKi8KKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KKwl7MHgwMCwgMHgwMH0sCisJezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KKwl7MHgxMSwgMHgwMX0sCS8qIGNsa3JjICovCisJezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCisJezB4NmEsIDB4MGN9LAkvKiA1MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCXsweGM1LCAweDBmfSwJLyogNjAgSHogYmFuZGluZyBmaWx0ZXIgKi8KKwl7MHhhMiwgMHg0ZX0sCS8qIGJkNTAgKi8KKwl7MHhhMywgMHg0MX0sCS8qIGJkNjAgKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3Jfc3RhcnRfMl9zeGdhW11bMl0gPSB7CisJezB4MTMsIDB4ZTB9LAkvKiBjb204ICovCisJezB4MDAsIDB4MDB9LAorCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCisJezB4M2IsIDB4YzR9LAkvKiBjb20xMSAtIG5pZ2h0IG1vZGUgMS80IGZyYW1lIHJhdGUgKi8KKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMSwgMHgwMX0sCS8qIGNsa3JjICovCisJezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCisJezB4NmEsIDB4MGN9LAkvKiA1MCBIeiBiYW5kaW5nIGZpbHRlciAqLworCXsweGM1LCAweDBmfSwJLyogNjAgSHogYmFuZGluZyBmaWx0ZXIgKi8KKwl7MHhhMiwgMHg0ZX0sCS8qIGJkNTAgKi8KKwl7MHhhMywgMHg0MX0sCS8qIGJkNjAgKi8KK307CisKK3N0YXRpYyB2b2lkIHJlZ193X2koc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnLCB1OCB2YWwpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgcmV0OworCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWw7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICAweDAxLAorCQkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgMHgwMCwgcmVnLCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsIENUUkxfVElNRU9VVCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAicmVnX3cgZmFpbGVkICVkIiwgcmV0KTsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OworCX0KK30KKworc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnLCB1OCB2YWwpCit7CisJUERFQlVHKERfVVNCTywgInJlZ193IFslMDR4XSA9ICUwMngiLCByZWcsIHZhbCk7CisJcmVnX3dfaShnc3BjYV9kZXYsIHJlZywgdmFsKTsKK30KKworc3RhdGljIHU4IHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHJlZykKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCByZXQ7CisKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICAweDAxLAorCQkJICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAweDAwLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgQ1RSTF9USU1FT1VUKTsKKwlQREVCVUcoRF9VU0JJLCAicmVnX3IgWyUwNHhdIC0+ICUwMngiLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAicmVnX3IgZXJyICVkIiwgcmV0KTsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OworCX0KKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworfQorCitzdGF0aWMgaW50IHNjY2JfY2hlY2tfc3RhdHVzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwl1OCBkYXRhOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlkYXRhID0gcmVnX3IoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfU1RBVFVTKTsKKworCQlzd2l0Y2ggKGRhdGEpIHsKKwkJY2FzZSAweDAwOgorCQkJcmV0dXJuIDE7CisJCWNhc2UgMHgwNDoKKwkJCXJldHVybiAwOworCQljYXNlIDB4MDM6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVBERUJVRyhEX1VTQkl8RF9VU0JPLAorCQkJCSJzY2NiIHN0YXR1cyAweCUwMngsIGF0dGVtcHQgJWQvNSIsCisJCQkJZGF0YSwgaSArIDEpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzY2NiX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggcmVnLCB1OCB2YWwpCit7CisJUERFQlVHKERfVVNCTywgInNjY2Jfd3JpdGUgWyUwMnhdID0gJTAyeCIsIHJlZywgdmFsKTsKKwlyZWdfd19pKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NVQkFERFIsIHJlZyk7CisJcmVnX3dfaShnc3BjYV9kZXYsIE9WNTM0X1JFR19XUklURSwgdmFsKTsKKwlyZWdfd19pKGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfV1JJVEVfMyk7CisKKwlpZiAoIXNjY2JfY2hlY2tfc3RhdHVzKGdzcGNhX2RldikpCisJCVBERUJVRyhEX0VSUiwgInNjY2Jfd3JpdGUgZmFpbGVkIik7Cit9CisKK3N0YXRpYyB1OCBzY2NiX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnKQoreworCXJlZ193KGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NVQkFERFIsIHJlZyk7CisJcmVnX3coZ3NwY2FfZGV2LCBPVjUzNF9SRUdfT1BFUkFUSU9OLCBPVjUzNF9PUF9XUklURV8yKTsKKwlpZiAoIXNjY2JfY2hlY2tfc3RhdHVzKGdzcGNhX2RldikpCisJCVBERUJVRyhEX0VSUiwgInNjY2JfcmVhZCBmYWlsZWQgMSIpOworCisJcmVnX3coZ3NwY2FfZGV2LCBPVjUzNF9SRUdfT1BFUkFUSU9OLCBPVjUzNF9PUF9SRUFEXzIpOworCWlmICghc2NjYl9jaGVja19zdGF0dXMoZ3NwY2FfZGV2KSkKKwkJUERFQlVHKERfRVJSLCAic2NjYl9yZWFkIGZhaWxlZCAyIik7CisKKwlyZXR1cm4gcmVnX3IoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfUkVBRCk7Cit9CisKKy8qIG91dHB1dCBhIGJyaWRnZSBzZXF1ZW5jZSAocmVnIC0gdmFsKSAqLworc3RhdGljIHZvaWQgcmVnX3dfYXJyYXkoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJY29uc3QgdTggKCpkYXRhKVsyXSwgaW50IGxlbikKK3sKKwl3aGlsZSAoLS1sZW4gPj0gMCkgeworCQlyZWdfdyhnc3BjYV9kZXYsICgqZGF0YSlbMF0sICgqZGF0YSlbMV0pOworCQlkYXRhKys7CisJfQorfQorCisvKiBvdXRwdXQgYSBzZW5zb3Igc2VxdWVuY2UgKHJlZyAtIHZhbCkgKi8KK3N0YXRpYyB2b2lkIHNjY2Jfd19hcnJheShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCB1OCAoKmRhdGEpWzJdLCBpbnQgbGVuKQoreworCXdoaWxlICgtLWxlbiA+PSAwKSB7CisJCWlmICgoKmRhdGEpWzBdICE9IDB4ZmYpIHsKKwkJCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAoKmRhdGEpWzBdLCAoKmRhdGEpWzFdKTsKKwkJfSBlbHNlIHsKKwkJCXNjY2JfcmVhZChnc3BjYV9kZXYsICgqZGF0YSlbMV0pOworCQkJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOworCQl9CisJCWRhdGErKzsKKwl9Cit9CisKKy8qIFR3byBiaXRzIGNvbnRyb2wgTEVEOiAweDIxIGJpdCA3IGFuZCAweDIzIGJpdCA3LgorICogKGRpcmVjdGlvbiBhbmQgb3V0cHV0KT8gKi8KK3N0YXRpYyB2b2lkIHNldF9sZWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBpbnQgc3RhdHVzKQoreworCXU4IGRhdGE7CisKKwlQREVCVUcoRF9DT05GLCAibGVkIHN0YXR1czogJWQiLCBzdGF0dXMpOworCisJZGF0YSA9IHJlZ19yKGdzcGNhX2RldiwgMHgyMSk7CisJZGF0YSB8PSAweDgwOworCXJlZ193KGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisKKwlkYXRhID0gcmVnX3IoZ3NwY2FfZGV2LCAweDIzKTsKKwlpZiAoc3RhdHVzKQorCQlkYXRhIHw9IDB4ODA7CisJZWxzZQorCQlkYXRhICY9IH4weDgwOworCisJcmVnX3coZ3NwY2FfZGV2LCAweDIzLCBkYXRhKTsKKworCWlmICghc3RhdHVzKSB7CisJCWRhdGEgPSByZWdfcihnc3BjYV9kZXYsIDB4MjEpOworCQlkYXRhICY9IH4weDgwOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MjEsIGRhdGEpOworCX0KK30KKworc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IHZhbDsKKworCXZhbCA9IHNkLT5icmlnaHRuZXNzOworCWlmICh2YWwgPCA4KQorCQl2YWwgPSAxNSAtIHZhbDsJCS8qIGYgLi4gOCAqLworCWVsc2UKKwkJdmFsID0gdmFsIC0gODsJCS8qIDAgLi4gNyAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDU1LAkvKiBicnRuIC0gYnJpZ2h0bmVzcyBhZGp1c3RtZW50ICovCisJCQkweDBmIHwgKHZhbCA8PCA0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg1NiwJLyogY25zdDEgLSBjb250cmFzdCAxIGN0cmwgY29lZmYgKi8KKwkJCXNkLT5jb250cmFzdCA8PCA0KTsKK30KKworc3RhdGljIHZvaWQgc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCB2YWw7CisKKy8qZml4bWU6IHNob3VsZCBhZGp1c3QgYWdjL2F3Yi9hZWMgYnkgZGlmZmVyZW50IGNvbnRyb2xzICovCisJdmFsID0gc2QtPmF1dG9nYWluOworCXZhbCA9IHNjY2JfcmVhZChnc3BjYV9kZXYsIDB4MTMpOwkJLyogY29tOCAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKKwlpZiAoc2QtPmF1dG9nYWluKQorCQl2YWwgfD0gMHgwNTsJCS8qIGFnYyAmIGFlYyAqLworCWVsc2UKKwkJdmFsICY9IDB4ZmE7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4MTMsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggdmFsOworCXN0YXRpYyBjb25zdCB1OCBleHBvWzRdID0gezB4MDAsIDB4MjUsIDB4MzgsIDB4NWV9OworCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4MTAsCQkJLyogYWVjWzk6Ml0gKi8KKwkJCWV4cG9bc2QtPmV4cG9zdXJlXSk7CisKKwl2YWwgPSBzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweDEzKTsJCS8qIGNvbTggKi8KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4MTMsIHZhbCk7CisKKwl2YWwgPSBzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweGExKTsJCS8qIGFlY2ggKi8KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4YTEsIHZhbCAmIDB4ZTApOwkvKiBhZWNbMTU6MTBdID0gMCAqLworfQorCitzdGF0aWMgdm9pZCBzZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzOCB2YWw7CisKKwl2YWwgPSBzZC0+c2hhcnBuZXNzOworCWlmICh2YWwgPCAwKSB7CQkJCS8qIGF1dG8gKi8KKwkJdmFsID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHg0Mik7CS8qIGNvbTE3ICovCisJCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKKwkJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NDIsIHZhbCB8IDB4NDApOworCQkJCS8qIEVkZ2UgZW5oYW5jZW1lbnQgc3RyZW5ndGggYXV0byBhZGp1c3QgKi8KKwkJcmV0dXJuOworCX0KKwlpZiAodmFsICE9IDApCisJCXZhbCA9IDEgPDwgKHZhbCAtIDEpOworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDNmLAkvKiBlZGdlIC0gZWRnZSBlbmhhbmNlLiBmYWN0b3IgKi8KKwkJCXZhbCk7CisJdmFsID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHg0Mik7CQkvKiBjb20xNyAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg0MiwgdmFsICYgMHhiZik7Cit9CisKK3N0YXRpYyB2b2lkIHNldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggdmFsMSwgdmFsMiwgdmFsMzsKKwlzdGF0aWMgY29uc3QgdTggbWF0cml4WzVdWzJdID0geworCQl7MHgxNCwgMHgzOH0sCisJCXsweDFlLCAweDU0fSwKKwkJezB4MjgsIDB4NzB9LAorCQl7MHgzMiwgMHg4Y30sCisJCXsweDQ4LCAweDkwfQorCX07CisKKwl2YWwxID0gbWF0cml4W3NkLT5zYXR1cl1bMF07CisJdmFsMiA9IG1hdHJpeFtzZC0+c2F0dXJdWzFdOworCXZhbDMgPSB2YWwxICsgdmFsMjsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg0ZiwgdmFsMyk7CS8qIG1hdHJpeCBjb2VmZiAqLworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDUwLCB2YWwzKTsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg1MSwgMHgwMCk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NTIsIHZhbDEpOworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDUzLCB2YWwyKTsKKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHg1NCwgdmFsMyk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NTgsIDB4MWEpOwkvKiBtdHhzIC0gY29lZmYgc2lnbnMgKi8KKworCXZhbDEgPSBzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweDQxKTsJLyogY29tMTYgKi8KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4NDEsIHZhbDEpOworfQorCitzdGF0aWMgdm9pZCBzZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggdmFsOworCisJdmFsID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHgxMyk7CQkvKiBjb204ICovCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOworCWlmIChzZC0+ZnJlcSA9PSAwKSB7CisJCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDEzLCB2YWwgJiAweGRmKTsKKwkJcmV0dXJuOworCX0KKwlzY2NiX3dyaXRlKGdzcGNhX2RldiwgMHgxMywgdmFsIHwgMHgyMCk7CisKKwl2YWwgPSBzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweDQyKTsJCS8qIGNvbTE3ICovCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOworCWlmIChzZC0+ZnJlcSA9PSAxKQorCQl2YWwgfD0gMHgwMTsKKwllbHNlCisJCXZhbCAmPSAweGZlOworCXNjY2Jfd3JpdGUoZ3NwY2FfZGV2LCAweDQyLCB2YWwpOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW07CisKKwljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisKKwljYW0tPmNhbV9tb2RlID0gb3Y5NjV4X21vZGU7CisJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKG92OTY1eF9tb2RlKTsKKworCXNkLT5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CisJc2QtPmNvbnRyYXN0ID0gQ09OVFJBU1RfREVGOworI2lmIEFVVE9HQUlOX0RFRiAhPSAwCisJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOworCWdzcGNhX2Rldi0+Y3RybF9pbmFjIHw9ICgxIDw8IEVYUE9fSURYKTsKKyNlbmRpZgorI2lmIEVYUE9fREVGICE9IDAKKwlzZC0+ZXhwb3N1cmUgPSBFWFBPX0RFRjsKKyNlbmRpZgorI2lmIFNIQVJQTkVTU19ERUYgIT0gMAorCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfREVGOworI2VuZGlmCisJc2QtPnNhdHVyID0gU0FUVVJfREVGOworCXNkLT5mcmVxID0gRlJFUV9ERUY7CisKKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXUxNiBzZW5zb3JfaWQ7CisKKwkvKiByZXNldCBicmlkZ2UgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTcsIDB4M2EpOworCXJlZ193KGdzcGNhX2RldiwgMHhlMCwgMHgwOCk7CisJbXNsZWVwKDEwMCk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBzZW5zb3IgYWRkcmVzcyAqLworCXJlZ193KGdzcGNhX2RldiwgT1Y1MzRfUkVHX0FERFJFU1MsIDB4NjApOworCisJLyogcmVzZXQgc2Vuc29yICovCisJc2NjYl93cml0ZShnc3BjYV9kZXYsIDB4MTIsIDB4ODApOworCW1zbGVlcCgxMCk7CisKKwkvKiBwcm9iZSB0aGUgc2Vuc29yICovCisJc2NjYl9yZWFkKGdzcGNhX2RldiwgMHgwYSk7CisJc2Vuc29yX2lkID0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHgwYSkgPDwgODsKKwlzY2NiX3JlYWQoZ3NwY2FfZGV2LCAweDBiKTsKKwlzZW5zb3JfaWQgfD0gc2NjYl9yZWFkKGdzcGNhX2RldiwgMHgwYik7CisJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgSUQ6ICUwNHgiLCBzZW5zb3JfaWQpOworCisJLyogaW5pdGlhbGl6ZSAqLworCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX2luaXQsCisJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0KSk7CisJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX2luaXQsCisJCQlBUlJBWV9TSVpFKHNlbnNvcl9pbml0KSk7CisJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2VfaW5pdF8yLAorCQkJQVJSQVlfU0laRShicmlkZ2VfaW5pdF8yKSk7CisJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX2luaXRfMiwKKwkJCUFSUkFZX1NJWkUoc2Vuc29yX2luaXRfMikpOworCXJlZ193KGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGUwLCAweDAxKTsKKwlzZXRfbGVkKGdzcGNhX2RldiwgMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGUwLCAweDAwKTsKKworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN3aXRjaCAoZ3NwY2FfZGV2LT5jdXJyX21vZGUpIHsKKwljYXNlIFFWR0FfTU9ERToJCQkvKiAzMjB4MjQwICovCisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8xX3ZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8xX3ZnYSkpOworCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9xdmdhLAorCQkJCUFSUkFZX1NJWkUoYnJpZGdlX3N0YXJ0X3F2Z2EpKTsKKwkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0XzJfcXZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8yX3F2Z2EpKTsKKwkJYnJlYWs7CisJY2FzZSBWR0FfTU9ERToJCQkvKiA2NDB4NDgwICovCisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8xX3ZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8xX3ZnYSkpOworCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF92Z2EsCisJCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfdmdhKSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8yX3ZnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8yX3ZnYSkpOworCQlicmVhazsKKwljYXNlIFNWR0FfTU9ERToJCQkvKiA4MDB4NjAwICovCisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8xX3N2Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfMV9zdmdhKSk7CisJCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX3N0YXJ0X3N2Z2EsCisJCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfc3ZnYSkpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3Jfc3RhcnRfMl9zdmdhLAorCQkJCUFSUkFZX1NJWkUoc2Vuc29yX3N0YXJ0XzJfc3ZnYSkpOworCQlicmVhazsKKwljYXNlIFhHQV9NT0RFOgkJCS8qIDEwMjR4NzY4ICovCisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8xX3hnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8xX3hnYSkpOworCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF94Z2EsCisJCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfeGdhKSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8yX3N2Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfMl9zdmdhKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNYR0FfTU9ERToJCQkgKiAxMjgweDEwMjQgKi8KKwkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0XzFfc3hnYSwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF8xX3N4Z2EpKTsKKwkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2Vfc3RhcnRfc3hnYSwKKwkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF9zeGdhKSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF8yX3N4Z2EsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfMl9zeGdhKSk7CisJCWJyZWFrOworCX0KKwlzZXRmcmVxKGdzcGNhX2Rldik7CisJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2KTsKKwlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKwlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOworCXNldHNhdHVyKGdzcGNhX2Rldik7CisKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOworCXJlZ193KGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJc2V0X2xlZChnc3BjYV9kZXYsIDEpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTAsIDB4MDEpOworCXNldF9sZWQoZ3NwY2FfZGV2LCAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOworfQorCisvKiBWYWx1ZXMgZm9yIGJtSGVhZGVySW5mbyAoVmlkZW8gYW5kIFN0aWxsIEltYWdlIFBheWxvYWQgSGVhZGVycywgMi40LjMuMykgKi8KKyNkZWZpbmUgVVZDX1NUUkVBTV9FT0gJKDEgPDwgNykKKyNkZWZpbmUgVVZDX1NUUkVBTV9FUlIJKDEgPDwgNikKKyNkZWZpbmUgVVZDX1NUUkVBTV9TVEkJKDEgPDwgNSkKKyNkZWZpbmUgVVZDX1NUUkVBTV9SRVMJKDEgPDwgNCkKKyNkZWZpbmUgVVZDX1NUUkVBTV9TQ1IJKDEgPDwgMykKKyNkZWZpbmUgVVZDX1NUUkVBTV9QVFMJKDEgPDwgMikKKyNkZWZpbmUgVVZDX1NUUkVBTV9FT0YJKDEgPDwgMSkKKyNkZWZpbmUgVVZDX1NUUkVBTV9GSUQJKDEgPDwgMCkKKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTMyIHRoaXNfcHRzOworCXU4IHRoaXNfZmlkOworCWludCByZW1haW5pbmdfbGVuID0gbGVuOworCisJZG8geworCQlsZW4gPSBtaW4ocmVtYWluaW5nX2xlbiwgMjA0MCk7CisKKwkJLyogUGF5bG9hZHMgYXJlIHByZWZpeGVkIHdpdGggYSBVVkMtc3R5bGUgaGVhZGVyLiAgV2UKKwkJICAgY29uc2lkZXIgYSBmcmFtZSB0byBzdGFydCB3aGVuIHRoZSBGSUQgdG9nZ2xlcywgb3IgdGhlIFBUUworCQkgICBjaGFuZ2VzLiAgQSBmcmFtZSBlbmRzIHdoZW4gRU9GIGlzIHNldCwgYW5kIHdlJ3ZlIHJlY2VpdmVkCisJCSAgIHRoZSBjb3JyZWN0IG51bWJlciBvZiBieXRlcy4gKi8KKworCQkvKiBWZXJpZnkgVVZDIGhlYWRlci4gIEhlYWRlciBsZW5ndGggaXMgYWx3YXlzIDEyICovCisJCWlmIChkYXRhWzBdICE9IDEyIHx8IGxlbiA8IDEyKSB7CisJCQlQREVCVUcoRF9QQUNLLCAiYmFkIGhlYWRlciIpOworCQkJZ290byBkaXNjYXJkOworCQl9CisKKwkJLyogQ2hlY2sgZXJyb3JzICovCisJCWlmIChkYXRhWzFdICYgVVZDX1NUUkVBTV9FUlIpIHsKKwkJCVBERUJVRyhEX1BBQ0ssICJwYXlsb2FkIGVycm9yIik7CisJCQlnb3RvIGRpc2NhcmQ7CisJCX0KKworCQkvKiBFeHRyYWN0IFBUUyBhbmQgRklEICovCisJCWlmICghKGRhdGFbMV0gJiBVVkNfU1RSRUFNX1BUUykpIHsKKwkJCVBERUJVRyhEX1BBQ0ssICJQVFMgbm90IHByZXNlbnQiKTsKKwkJCWdvdG8gZGlzY2FyZDsKKwkJfQorCQl0aGlzX3B0cyA9IChkYXRhWzVdIDw8IDI0KSB8IChkYXRhWzRdIDw8IDE2KQorCQkJCQkJfCAoZGF0YVszXSA8PCA4KSB8IGRhdGFbMl07CisJCXRoaXNfZmlkID0gZGF0YVsxXSAmIFVWQ19TVFJFQU1fRklEOworCisJCS8qIElmIFBUUyBvciBGSUQgaGFzIGNoYW5nZWQsIHN0YXJ0IGEgbmV3IGZyYW1lLiAqLworCQlpZiAodGhpc19wdHMgIT0gc2QtPmxhc3RfcHRzIHx8IHRoaXNfZmlkICE9IHNkLT5sYXN0X2ZpZCkgeworCQkJaWYgKGdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9PSBJTlRFUl9QQUNLRVQpCisJCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCisJCQkJCQlOVUxMLCAwKTsKKwkJCXNkLT5sYXN0X3B0cyA9IHRoaXNfcHRzOworCQkJc2QtPmxhc3RfZmlkID0gdGhpc19maWQ7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCisJCQkJCWRhdGEgKyAxMiwgbGVuIC0gMTIpOworCQkvKiBJZiB0aGlzIHBhY2tldCBpcyBtYXJrZWQgYXMgRU9GLCBlbmQgdGhlIGZyYW1lICovCisJCX0gZWxzZSBpZiAoZGF0YVsxXSAmIFVWQ19TVFJFQU1fRU9GKSB7CisJCQlzZC0+bGFzdF9wdHMgPSAwOworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCisJCQkJCWRhdGEgKyAxMiwgbGVuIC0gMTIpOworCQl9IGVsc2UgeworCisJCQkvKiBBZGQgdGhlIGRhdGEgZnJvbSB0aGlzIHBheWxvYWQgKi8KKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwKKwkJCQkJZGF0YSArIDEyLCBsZW4gLSAxMik7CisJCX0KKworCQkvKiBEb25lIHRoaXMgcGF5bG9hZCAqLworCQlnb3RvIHNjYW5fbmV4dDsKKworZGlzY2FyZDoKKwkJLyogRGlzY2FyZCBkYXRhIHVudGlsIGEgbmV3IGZyYW1lIHN0YXJ0cy4gKi8KKwkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CisKK3NjYW5fbmV4dDoKKwkJcmVtYWluaW5nX2xlbiAtPSBsZW47CisJCWRhdGEgKz0gbGVuOworCX0gd2hpbGUgKHJlbWFpbmluZ19sZW4gPiAwKTsKK30KKworLyogY29udHJvbHMgKi8KK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YnJpZ2h0bmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Y29udHJhc3QgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Y29udHJhc3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmF1dG9nYWluID0gdmFsOworCisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CisJCWlmICh2YWwpCisJCQlnc3BjYV9kZXYtPmN0cmxfaW5hYyB8PSAoMSA8PCBFWFBPX0lEWCk7CisJCWVsc2UKKwkJCWdzcGNhX2Rldi0+Y3RybF9pbmFjICY9IH4oMSA8PCBFWFBPX0lEWCk7CisJCXNldGF1dG9nYWluKGdzcGNhX2Rldik7CisJfQorCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YXV0b2dhaW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmV4cG9zdXJlID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX2dldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmV4cG9zdXJlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+c2hhcnBuZXNzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0c2hhcnBuZXNzKGdzcGNhX2Rldik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKK30KKworc3RhdGljIGludCBzZF9nZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+c2hhcnBuZXNzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldHNhdHVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5zYXR1ciA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldHNhdHVyKGdzcGNhX2Rldik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKK30KKworc3RhdGljIGludCBzZF9nZXRzYXR1cihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5zYXR1cjsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+ZnJlcSA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGZyZXEoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+ZnJlcTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9xdWVyeW1lbnUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfcXVlcnltZW51ICptZW51KQoreworCXN3aXRjaCAobWVudS0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZOgorCQlzd2l0Y2ggKG1lbnUtPmluZGV4KSB7CisJCWNhc2UgMDoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZX0RJU0FCTEVEICovCisJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIk5vRmxpa2VyIik7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAxOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNTBIWiAqLworCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICI1MCBIeiIpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgMjoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFogKi8KKwkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNjAgSHoiKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CisJLm5hbWUgICAgID0gTU9EVUxFX05BTUUsCisJLmN0cmxzICAgID0gc2RfY3RybHMsCisJLm5jdHJscyAgID0gQVJSQVlfU0laRShzZF9jdHJscyksCisJLmNvbmZpZyAgID0gc2RfY29uZmlnLAorCS5pbml0ICAgICA9IHNkX2luaXQsCisJLnN0YXJ0ICAgID0gc2Rfc3RhcnQsCisJLnN0b3BOICAgID0gc2Rfc3RvcE4sCisJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCisJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKK307CisKKy8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLworc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwNmY4LCAweDMwMDMpfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGdzcGNhX2Rldl9wcm9iZShpbnRmLCBpZCwgJnNkX2Rlc2MsIHNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJCVRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSAgID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSAgICAgID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kICAgID0gZ3NwY2Ffc3VzcGVuZCwKKwkucmVzdW1lICAgICA9IGdzcGNhX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYwppbmRleCA0NzA2YTgyLi4wYzg3YzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2RlZmluZSBNT0RVTEVfTkFNRSAicGFjMjA3IgogCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogCiBNT0RVTEVfQVVUSE9SKCJIYW5zIGRlIEdvZWRlIDxoZGdvZWRlQHJlZGhhdC5jb20+Iik7CkBAIC03Nyw3ICs3OCw3IEBACiBzdGF0aWMgaW50IHNkX3NldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAjZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAogCXsKIAkgICAgewpAQCAtNDk1LDYgKzQ5NiwyNSBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX0lOUFVUCitzdGF0aWMgaW50IHNkX2ludF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCAqZGF0YSwJCS8qIGludGVycnVwdCBwYWNrZXQgZGF0YSAqLworCQkJaW50IGxlbikJCS8qIGludGVycnB1dCBwYWNrZXQgbGVuZ3RoICovCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAobGVuID09IDIgJiYgZGF0YVswXSA9PSAweDVhICYmIGRhdGFbMV0gPT0gMHg1YSkgeworCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCAxKTsKKwkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDApOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCkBAIC01MDYsNiArNTI2LDkgQEAKIAkuc3RvcE4gPSBzZF9zdG9wTiwKIAkuZHFfY2FsbGJhY2sgPSBwYWMyMDdfZG9fYXV0b19nYWluLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorI2lmZGVmIENPTkZJR19JTlBVVAorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzAyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMDIuYwppbmRleCBkZTBiNjZjLi4yYTY4MjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMDIuYwpAQCAtNCw3ICs0LDkgQEAKICAqCiAgKiBWNEwyIGJ5IEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CiAgKgotICogU2VwYXJhdGVkIGZyb20gUGl4YXJ0IFBBQzczMTEgbGlicmFyeSBieSBN4XJ0b24gTultZXRoIDxubTEyN0BmcmVlbWFpbC5odT4KKyAqIFNlcGFyYXRlZCBmcm9tIFBpeGFydCBQQUM3MzExIGxpYnJhcnkgYnkgTcOhcnRvbiBOw6ltZXRoCisgKiBDYW1lcmEgYnV0dG9uIGlucHV0IGhhbmRsaW5nIGJ5IE3DoXJ0b24gTsOpbWV0aCA8bm0xMjdAZnJlZW1haWwuaHU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBNw6FydG9uIE7DqW1ldGggPG5tMTI3QGZyZWVtYWlsLmh1PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjIsMzMgKzI0LDI2IEBACiAgKi8KIAogLyogU29tZSBkb2N1bWVudGF0aW9uIGFib3V0IHZhcmlvdXMgcmVnaXN0ZXJzIGFzIGRldGVybWluZWQgYnkgdHJpYWwgYW5kIGVycm9yLgotICAgV2hlbiB0aGUgcmVnaXN0ZXIgYWRkcmVzc2VzIGRpZmZlciBiZXR3ZWVuIHRoZSA3MjAyIGFuZCB0aGUgNzMxMSB0aGUgMgotICAgZGlmZmVyZW50IGFkZHJlc3NlcyBhcmUgd3JpdHRlbiBhcyA3MzAyYWRkci83MzExYWRkciwgd2hlbiBvbmUgb2YgdGhlIDIKLSAgIGFkZHJlc3NlcyBpcyBhIC0gc2lnbiB0aGF0IHJlZ2lzdGVyIGRlc2NyaXB0aW9uIGlzIG5vdCB2YWxpZCBmb3IgdGhlCi0gICBtYXRjaGluZyBJQy4KIAogICAgUmVnaXN0ZXIgcGFnZSAxOgogCiAgICBBZGRyZXNzCURlc2NyaXB0aW9uCi0gICAtLzB4MDgJVW5rbm93biBjb21wcmVzc29yIHJlbGF0ZWQsIG11c3QgYWx3YXlzIGJlIDggZXhjZXB0IHdoZW4gbm90Ci0JCWluIDY0MHg0ODAgcmVzb2x1dGlvbiBhbmQgcGFnZSA0IHJlZyAyIDw9IDMgdGhlbiBzZXQgaXQgdG8gOSAhCi0gICAtLzB4MWIJQXV0byB3aGl0ZSBiYWxhbmNlIHJlbGF0ZWQsIGJpdCAwIGlzIEFXQiBlbmFibGUgKGludmVydGVkKQotCQliaXRzIDM0NSBzZWVtIHRvIHRvZ2dsZSBwZXIgY29sb3IgZ2FpbnMgb24vb2ZmIChpbnZlcnRlZCkKICAgIDB4NzgJCUdsb2JhbCBjb250cm9sLCBiaXQgNiBjb250cm9scyB0aGUgTEVEIChpbnZlcnRlZCkKLSAgIC0vMHg4MAlKUEVHIGNvbXByZXNzaW9uIHJhdGlvID8gQmVzdCBub3QgdG91Y2hlZAogCi0gICBSZWdpc3RlciBwYWdlIDMvNDoKKyAgIFJlZ2lzdGVyIHBhZ2UgMzoKIAogICAgQWRkcmVzcwlEZXNjcmlwdGlvbgotICAgMHgwMgkJQ2xvY2sgZGl2aWRlciAyLTYzLCBmcHMgPX4gNjAgLyB2YWwuIE11c3QgYmUgYSBtdWx0aXBsZSBvZiAzIG9uCisgICAweDAyCQlDbG9jayBkaXZpZGVyIDMtNjMsIGZwcyA9IDkwIC8gdmFsLiBNdXN0IGJlIGEgbXVsdGlwbGUgb2YgMyBvbgogCQl0aGUgNzMwMiwgc28gb25lIG9mIDMsIDYsIDksIC4uLiwgZXhjZXB0IHdoZW4gYmV0d2VlbiA2IGFuZCAxMj8KLSAgIC0vMHgwZglNYXN0ZXIgZ2FpbiAxLTI0NSwgbG93IHZhbHVlID0gaGlnaCBnYWluCi0gICAweDEwLy0JTWFzdGVyIGdhaW4gMC0zMQotICAgLS8weDEwCUFub3RoZXIgZ2FpbiAwLTE1LCBsaW1pdGVkIGluZmx1ZW5jZSAoMS0yeCBnYWluIEkgZ3Vlc3MpCisgICAweDAzCQlWYXJpYWJsZSBmcmFtZXJhdGUgY3RybCByZWcyPT0zOiAwIC0+IH4zMCBmcHMsIDI1NSAtPiB+MjJmcHMKKyAgIDB4MDQJCUFub3RoZXIgdmFyIGZyYW1lcmF0ZSBjdHJsIHJlZzI9PTMsIHJlZzM9PTA6IDAgLT4gfjMwIGZwcywKKwkJNjMgLT4gfjI3IGZwcywgdGhlIDIgbXNiJ3MgbXVzdCBhbHdheXMgYmUgMSAhIQorICAgMHgwNQkJQW5vdGhlciB2YXIgZnJhbWVyYXRlIGN0cmwgcmVnMj09MywgcmVnMz09MCwgcmVnND09MHhjMDoKKwkJMSAtPiB+MzAgZnBzLCAyIC0+IH4yMCBmcHMKKyAgIDB4MGUJCUV4cG9zdXJlIGJpdHMgMC03LCAwLTQ0OCwgMCA9IHVzZSBmdWxsIGZyYW1lIHRpbWUKKyAgIDB4MGYJCUV4cG9zdXJlIGJpdCA4LCAwLTQ0OCwgNDQ4ID0gbm8gZXhwb3N1cmUgYXQgYWxsCisgICAweDEwCQlNYXN0ZXIgZ2FpbiAwLTMxCiAgICAweDIxCQlCaXRmaWVsZDogMC0xIHVudXNlZCwgMi0zIHZmbGlwL2hmbGlwLCA0LTUgdW5rbm93biwgNi03IHVudXNlZAotICAgLS8weDI3CVNlZW1zIHRvIHRvZ2dsZSB2YXJpb3VzIGdhaW5zIG9uIC8gb2ZmLCBTZXR0aW5nIGJpdCA3IHNlZW1zIHRvCi0JCWNvbXBsZXRlbHkgZGlzYWJsZSB0aGUgYW5hbG9nIGFtcGxpZmljYXRpb24gYmxvY2suIFNldCB0byAweDY4Ci0JCWZvciBtYXggZ2FpbiwgMHgxNCBmb3IgbWluaW1hbCBnYWluLgogCiAgICBUaGUgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCBpbiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKIApAQCAtNjgsNiArNjMsNyBAQAogCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJwYWM3MzAyIgogCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogCkBAIC04Niw4ICs4Miw4IEBACiAJdW5zaWduZWQgY2hhciByZWRfYmFsYW5jZTsKIAl1bnNpZ25lZCBjaGFyIGJsdWVfYmFsYW5jZTsKIAl1bnNpZ25lZCBjaGFyIGdhaW47Ci0JdW5zaWduZWQgY2hhciBleHBvc3VyZTsKIAl1bnNpZ25lZCBjaGFyIGF1dG9nYWluOworCXVuc2lnbmVkIHNob3J0IGV4cG9zdXJlOwogCV9fdTggaGZsaXA7CiAJX191OCB2ZmxpcDsKIAl1OCBmbGFnczsKQEAgLTEyNCw4ICsxMjAsNyBAQAogc3RhdGljIGludCBzZF9zZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewotLyogVGhpcyBjb250cm9sIGlzIHBhYzczMDIgb25seSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTE0MSw3ICsxMzYsNiBAQAogCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKIAkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCiAJfSwKLS8qIFRoaXMgY29udHJvbCBpcyBmb3IgYm90aCB0aGUgNzMwMiBhbmQgdGhlIDczMTEgKi8KIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKQEAgLTE1Nyw3ICsxNTEsNiBAQAogCSAgICAuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCiAJICAgIC5nZXQgPSBzZF9nZXRjb250cmFzdCwKIAl9LAotLyogVGhpcyBjb250cm9sIGlzIHBhYzczMDIgb25seSAqLwogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCkBAIC0yMTUsNyArMjA4LDYgQEAKIAkgICAgLnNldCA9IHNkX3NldGJsdWViYWxhbmNlLAogCSAgICAuZ2V0ID0gc2RfZ2V0Ymx1ZWJhbGFuY2UsCiAJfSwKLS8qIEFsbCBjb250cm9scyBiZWxvdyBhcmUgZm9yIGJvdGggdGhlIDczMDIgYW5kIHRoZSA3MzExICovCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfR0FJTiwKQEAgLTIzOCwxMSArMjMwLDEwIEBACiAJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgICAgPSAiRXhwb3N1cmUiLAogCQkubWluaW11bSA9IDAsCi0jZGVmaW5lIEVYUE9TVVJFX01BWCAyNTUKLQkJLm1heGltdW0gPSBFWFBPU1VSRV9NQVgsCisJCS5tYXhpbXVtID0gMTAyMywKIAkJLnN0ZXAgICAgPSAxLAotI2RlZmluZSBFWFBPU1VSRV9ERUYgIDE2IC8qICAzMiBtcyAvIDMwIGZwcyAqLwotI2RlZmluZSBFWFBPU1VSRV9LTkVFIDUwIC8qIDEwMCBtcyAvIDEwIGZwcyAqLworI2RlZmluZSBFWFBPU1VSRV9ERUYgIDY2ICAvKiAgMzMgbXMgLyAzMCBmcHMgKi8KKyNkZWZpbmUgRVhQT1NVUkVfS05FRSAxMzMgLyogIDY2IG1zIC8gMTUgZnBzICovCiAJCS5kZWZhdWx0X3ZhbHVlID0gRVhQT1NVUkVfREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCkBAIC0zMDEsNyArMjkyLDYgQEAKIH07CiAKICNkZWZpbmUgTE9BRF9QQUdFMwkJMjU1Ci0jZGVmaW5lIExPQURfUEFHRTQJCTI1NAogI2RlZmluZSBFTkRfT0ZfU0VRVUVOQ0UJCTAKIAogLyogcGFjIDczMDIgKi8KQEAgLTM3OSw3ICszNjksNyBAQAogI2RlZmluZSBTS0lQCQkweGFhCiAvKiBwYWdlIDMgLSB0aGUgdmFsdWUgU0tJUCBzYXlzIHNraXAgdGhlIGluZGV4IC0gc2VlIHJlZ193X3BhZ2UoKSAqLwogc3RhdGljIGNvbnN0IF9fdTggcGFnZTNfNzMwMltdID0gewotCTB4OTAsIDB4NDAsIDB4MDMsIDB4NTAsIDB4YzIsIDB4MDEsIDB4MTQsIDB4MTYsCisJMHg5MCwgMHg0MCwgMHgwMywgMHgwMCwgMHhjMCwgMHgwMSwgMHgxNCwgMHgxNiwKIAkweDE0LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDMzLCAweDAwLAogCTB4MGYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgwMSwgMHhiMywgMHgwMSwgMHgwMCwKQEAgLTM4OCw3ICszNzgsNyBAQAogCTB4YTQsIDB4YjgsIDB4ZTAsIDB4MmEsIDB4ZjYsIDB4MDAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIAkweDAwLCAweGZjLCAweDAwLCAweGYyLCAweDFmLCAweDA0LCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YzAsIDB4MTAsIDB4MDAsIDB4MDAsCisJU0tJUCwgMHgwMCwgMHgwMCwgMHhjMCwgMHhjMCwgMHgxMCwgMHgwMCwgMHgwMCwKIAkweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4NDAsIDB4ZmYsIDB4MDMsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKQEAgLTQwMSwxMiArMzkxLDE0IEBACiAJMHgwMAogfTsKIAotc3RhdGljIGludCByZWdfd19idWYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3dfYnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICBfX3U4IGluZGV4LAogCQkgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgaW50IGxlbikKIHsKIAlpbnQgcmV0OwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBidWZmZXIsIGxlbik7CiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKQEAgLTQxNSwyMCArNDA3LDIzIEBACiAJCQkwLAkJLyogdmFsdWUgKi8KIAkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwKIAkJCTUwMCk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCA8IDApIHsKIAkJUERFQlVHKERfRVJSLCAicmVnX3dfYnVmKCk6ICIKIAkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlcnMgdG8gaW5kZXggMHgleCwgZXJyb3IgJWkiLAogCQlpbmRleCwgcmV0KTsKLQlyZXR1cm4gcmV0OworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCiAKLXN0YXRpYyBpbnQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkgIF9fdTggaW5kZXgsCiAJCSAgX191OCB2YWx1ZSkKIHsKIAlpbnQgcmV0OwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWx1ZTsKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLApAQCAtNDM2LDMyICs0MzEsMzIgQEAKIAkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCTAsIGluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsCiAJCQk1MDApOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQgPCAwKSB7CiAJCVBERUJVRyhEX0VSUiwgInJlZ193KCk6ICIKIAkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlciB0byBpbmRleCAweCV4LCB2YWx1ZSAweCV4LCBlcnJvciAlaSIsCiAJCWluZGV4LCB2YWx1ZSwgcmV0KTsKLQlyZXR1cm4gcmV0OworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCi1zdGF0aWMgaW50IHJlZ193X3NlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdm9pZCByZWdfd19zZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQljb25zdCBfX3U4ICpzZXEsIGludCBsZW4pCiB7Ci0JaW50IHJldCA9IDA7CiAJd2hpbGUgKC0tbGVuID49IDApIHsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCBzZXFbMF0sIHNlcVsxXSk7CisJCXJlZ193KGdzcGNhX2Rldiwgc2VxWzBdLCBzZXFbMV0pOwogCQlzZXEgKz0gMjsKIAl9Ci0JcmV0dXJuIHJldDsKIH0KIAogLyogbG9hZCB0aGUgYmVnaW5uaW5nIG9mIGEgcGFnZSAqLwotc3RhdGljIGludCByZWdfd19wYWdlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X3BhZ2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJY29uc3QgX191OCAqcGFnZSwgaW50IGxlbikKIHsKIAlpbnQgaW5kZXg7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykgewogCQlpZiAocGFnZVtpbmRleF0gPT0gU0tJUCkJCS8qIHNraXAgdGhpcyBpbmRleCAqLwogCQkJY29udGludWU7CkBAIC00NzcsNTYgKzQ3Miw0NyBAQAogCQkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlciB0byBpbmRleCAweCV4LCAiCiAJCQkidmFsdWUgMHgleCwgZXJyb3IgJWkiLAogCQkJaW5kZXgsIHBhZ2VbaW5kZXhdLCByZXQpOworCQkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmV0dXJuIHJldDsKIH0KIAogLyogb3V0cHV0IGEgdmFyaWFibGUgc2VxdWVuY2UgKi8KLXN0YXRpYyBpbnQgcmVnX3dfdmFyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X3ZhcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQljb25zdCBfX3U4ICpzZXEsCi0JCQljb25zdCBfX3U4ICpwYWdlMywgdW5zaWduZWQgaW50IHBhZ2UzX2xlbiwKLQkJCWNvbnN0IF9fdTggKnBhZ2U0LCB1bnNpZ25lZCBpbnQgcGFnZTRfbGVuKQorCQkJY29uc3QgX191OCAqcGFnZTMsIHVuc2lnbmVkIGludCBwYWdlM19sZW4pCiB7CiAJaW50IGluZGV4LCBsZW47Ci0JaW50IHJldCA9IDA7CiAKIAlmb3IgKDs7KSB7CiAJCWluZGV4ID0gKnNlcSsrOwogCQlsZW4gPSAqc2VxKys7CiAJCXN3aXRjaCAobGVuKSB7CiAJCWNhc2UgRU5EX09GX1NFUVVFTkNFOgotCQkJcmV0dXJuIHJldDsKLQkJY2FzZSBMT0FEX1BBR0U0OgotCQkJcmV0ID0gcmVnX3dfcGFnZShnc3BjYV9kZXYsIHBhZ2U0LCBwYWdlNF9sZW4pOwotCQkJYnJlYWs7CisJCQlyZXR1cm47CiAJCWNhc2UgTE9BRF9QQUdFMzoKLQkJCXJldCA9IHJlZ193X3BhZ2UoZ3NwY2FfZGV2LCBwYWdlMywgcGFnZTNfbGVuKTsKKwkJCXJlZ193X3BhZ2UoZ3NwY2FfZGV2LCBwYWdlMywgcGFnZTNfbGVuKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJaWYgKGxlbiA+IFVTQl9CVUZfU1opIHsKIAkJCQlQREVCVUcoRF9FUlJ8RF9TVFJFQU0sCiAJCQkJCSJJbmNvcnJlY3QgdmFyaWFibGUgc2VxdWVuY2UiKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQlyZXR1cm47CiAJCQl9CiAJCQl3aGlsZSAobGVuID4gMCkgewogCQkJCWlmIChsZW4gPCA4KSB7Ci0JCQkJCXJldCA9IHJlZ193X2J1Zihnc3BjYV9kZXYsCisJCQkJCXJlZ193X2J1Zihnc3BjYV9kZXYsCiAJCQkJCQlpbmRleCwgc2VxLCBsZW4pOwotCQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJCXJldHVybiByZXQ7CiAJCQkJCXNlcSArPSBsZW47CiAJCQkJCWJyZWFrOwogCQkJCX0KLQkJCQlyZXQgPSByZWdfd19idWYoZ3NwY2FfZGV2LCBpbmRleCwgc2VxLCA4KTsKKwkJCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBpbmRleCwgc2VxLCA4KTsKIAkJCQlzZXEgKz0gODsKIAkJCQlpbmRleCArPSA4OwogCQkJCWxlbiAtPSA4OwogCQkJfQogCQl9Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKIAl9CiAJLyogbm90IHJlYWNoZWQgKi8KIH0KQEAgLTU2MCwxMSArNTQ2LDEwIEBACiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBwYWM3MzAyIG9ubHkgKi8KLXN0YXRpYyBpbnQgc2V0YnJpZ2h0Y29udChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRicmlnaHRjb250KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGksIHY7Ci0JaW50IHJldDsKIAlzdGF0aWMgY29uc3QgX191OCBtYXhbMTBdID0KIAkJezB4MjksIDB4MzMsIDB4NDIsIDB4NWEsIDB4NmUsIDB4ODAsIDB4OWYsIDB4YmIsCiAJCSAweGQ0LCAweGVjfTsKQEAgLTU3Miw3ICs1NTcsNyBAQAogCQl7MHgzNSwgMHgzMywgMHgzMywgMHgyZiwgMHgyYSwgMHgyNSwgMHgxZSwgMHgxNywKIAkJIDB4MTEsIDB4MGJ9OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJCS8qIHBhZ2UgMCAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAJCXYgPSBtYXhbaV07CiAJCXYgKz0gKHNkLT5icmlnaHRuZXNzIC0gQlJJR0hUTkVTU19NQVgpCkBAIC01ODIsMTM2ICs1NjcsMTIxIEBACiAJCQl2ID0gMDsKIAkJZWxzZSBpZiAodiA+IDB4ZmYpCiAJCQl2ID0gMHhmZjsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGEyICsgaSwgdik7CisJCXJlZ193KGdzcGNhX2RldiwgMHhhMiArIGksIHYpOwogCX0KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhkYywgMHgwMSk7Ci0JcmV0dXJuIHJldDsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZGMsIDB4MDEpOwogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgcGFjNzMwMiBvbmx5ICovCi1zdGF0aWMgaW50IHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgaSwgdjsKLQlpbnQgcmV0OwogCXN0YXRpYyBjb25zdCBpbnQgYVs5XSA9CiAJCXsyMTcsIC0yMTIsIDAsIC0xMDEsIDE3MCwgLTY3LCAtMzgsIC0zMTUsIDM1NX07CiAJc3RhdGljIGNvbnN0IGludCBiWzldID0KIAkJezE5LCAxMDYsIDAsIDE5LCAxMDYsIDEsIDE5LCAxMDYsIDF9OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAzKTsJLyogcGFnZSAzICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAzKTsJCQkvKiBwYWdlIDMgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CQkJLyogcGFnZSAwICovCiAJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgewogCQl2ID0gYVtpXSAqIHNkLT5jb2xvcnMgLyBDT0xPUl9NQVggKyBiW2ldOwotCQlpZiAoMCA8PSByZXQpCi0JCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MGYgKyAyICogaSwgKHYgPj4gOCkgJiAweDA3KTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDBmICsgMiAqIGkgKyAxLCB2KTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDBmICsgMiAqIGksICh2ID4+IDgpICYgMHgwNyk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwZiArIDIgKiBpICsgMSwgdik7CiAJfQotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZGMsIDB4MDEpOwogCVBERUJVRyhEX0NPTkZ8RF9TVFJFQU0sICJjb2xvcjogJWkiLCBzZC0+Y29sb3JzKTsKLQlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXR3aGl0ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4YzYsIHNkLT53aGl0ZV9iYWxhbmNlKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOwkJLyogcGFnZSAwICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGM2LCBzZC0+d2hpdGVfYmFsYW5jZSk7CiAKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhkYywgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKIAlQREVCVUcoRF9DT05GfERfU1RSRUFNLCAid2hpdGVfYmFsYW5jZTogJWkiLCBzZC0+d2hpdGVfYmFsYW5jZSk7Ci0JcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzZXRyZWRiYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldHJlZGJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4YzUsIHNkLT5yZWRfYmFsYW5jZSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJCS8qIHBhZ2UgMCAqLworCXJlZ193KGdzcGNhX2RldiwgMHhjNSwgc2QtPnJlZF9iYWxhbmNlKTsKIAotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZGMsIDB4MDEpOwogCVBERUJVRyhEX0NPTkZ8RF9TVFJFQU0sICJyZWRfYmFsYW5jZTogJWkiLCBzZC0+cmVkX2JhbGFuY2UpOwotCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc2V0Ymx1ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0Ymx1ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4YzcsIHNkLT5ibHVlX2JhbGFuY2UpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CQkJLyogcGFnZSAwICovCisJcmVnX3coZ3NwY2FfZGV2LCAweGM3LCBzZC0+Ymx1ZV9iYWxhbmNlKTsKIAotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZGMsIDB4MDEpOwogCVBERUJVRyhEX0NPTkZ8RF9TVFJFQU0sICJibHVlX2JhbGFuY2U6ICVpIiwgc2QtPmJsdWVfYmFsYW5jZSk7Ci0JcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAzKTsJCS8qIHBhZ2UgMyAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDEwLCBzZC0+Z2FpbiA+PiAzKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDMpOwkJCS8qIHBhZ2UgMyAqLworCXJlZ193KGdzcGNhX2RldiwgMHgxMCwgc2QtPmdhaW4gPj4gMyk7CiAKIAkvKiBsb2FkIHJlZ2lzdGVycyB0byBzZW5zb3IgKEJpdCAwLCBhdXRvIGNsZWFyKSAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKLQlyZXR1cm4gcmV0OworCXJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7CiB9CiAKLXN0YXRpYyBpbnQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwotCV9fdTggcmVnOworCV9fdTggY2xvY2tkaXY7CisJX191MTYgZXhwb3N1cmU7CiAKLQkvKiByZWdpc3RlciAyIG9mIGZyYW1lIDMvNCBjb250YWlucyB0aGUgY2xvY2sgZGl2aWRlciBjb25maWd1cmluZyB0aGUKLQkgICBubyBmcHMgYWNjb3JkaW5nIHRvIHRoZSBmb3JtdWxhOiA2MCAvIHJlZy4gc2QtPmV4cG9zdXJlIGlzIHRoZQotCSAgIGRlc2lyZWQgZXhwb3N1cmUgdGltZSBpbiBtcy4gKi8KLQlyZWcgPSAxMjAgKiBzZC0+ZXhwb3N1cmUgLyAxMDAwOwotCWlmIChyZWcgPCAyKQotCQlyZWcgPSAyOwotCWVsc2UgaWYgKHJlZyA+IDYzKQotCQlyZWcgPSA2MzsKKwkvKiByZWdpc3RlciAyIG9mIGZyYW1lIDMgY29udGFpbnMgdGhlIGNsb2NrIGRpdmlkZXIgY29uZmlndXJpbmcgdGhlCisJICAgbm8gZnBzIGFjY29yZGluZyB0byB0aGUgZm9ybXVsYTogOTAgLyByZWcuIHNkLT5leHBvc3VyZSBpcyB0aGUKKwkgICBkZXNpcmVkIGV4cG9zdXJlIHRpbWUgaW4gMC41IG1zLiAqLworCWNsb2NrZGl2ID0gKDkwICogc2QtPmV4cG9zdXJlICsgMTk5OSkgLyAyMDAwOwogCi0JLyogT24gdGhlIHBhYzczMDIgcmVnMiBNVVNUIGJlIGEgbXVsdGlwbGUgb2YgMywgc28gcm91bmQgaXQgdG8KLQkgICB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiAzLCBleGNlcHQgd2hlbiBiZXR3ZWVuIDYgYW5kIDEyPyAqLwotCWlmIChyZWcgPCA2IHx8IHJlZyA+IDEyKQotCQlyZWcgPSAoKHJlZyArIDEpIC8gMykgKiAzOwotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMyk7CQkvKiBwYWdlIDMgKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgwMiwgcmVnKTsKKwkvKiBOb3RlIGNsb2NrZGl2ID0gMyBhbHNvIHdvcmtzLCBidXQgd2hlbiBydW5uaW5nIGF0IDMwIGZwcywgZGVwZW5kaW5nCisJICAgb24gdGhlIHNjZW5lIGJlaW5nIHJlY29yZGVkLCB0aGUgY2FtZXJhIHN3aXRjaGVzIHRvIGFub3RoZXIKKwkgICBxdWFudGl6YXRpb24gdGFibGUgZm9yIGNlcnRhaW4gSlBFRyBibG9ja3MsIGFuZCB3ZSBkb24ndCBrbm93IGhvdworCSAgIHRvIGRlY29tcHJlc3MgdGhlc2UgYmxvY2tzLiBTbyB3ZSBjYXAgdGhlIGZyYW1lcmF0ZSBhdCAxNSBmcHMgKi8KKwlpZiAoY2xvY2tkaXYgPCA2KQorCQljbG9ja2RpdiA9IDY7CisJZWxzZSBpZiAoY2xvY2tkaXYgPiA2MykKKwkJY2xvY2tkaXYgPSA2MzsKKworCS8qIHJlZzIgTVVTVCBiZSBhIG11bHRpcGxlIG9mIDMsIGV4Y2VwdCB3aGVuIGJldHdlZW4gNiBhbmQgMTI/CisJICAgQWx3YXlzIHJvdW5kIHVwLCBvdGhlcndpc2Ugd2UgY2Fubm90IGdldCB0aGUgZGVzaXJlZCBmcmFtZXRpbWUKKwkgICB1c2luZyB0aGUgcGFydGlhbCBmcmFtZSB0aW1lIGV4cG9zdXJlIGNvbnRyb2wgKi8KKwlpZiAoY2xvY2tkaXYgPCA2IHx8IGNsb2NrZGl2ID4gMTIpCisJCWNsb2NrZGl2ID0gKChjbG9ja2RpdiArIDIpIC8gMykgKiAzOworCisJLyogZnJhbWUgZXhwb3N1cmUgdGltZSBpbiBtcyA9IDEwMDAgKiBjbG9ja2RpdiAvIDkwICAgIC0+CisJZXhwb3N1cmUgPSAoc2QtPmV4cG9zdXJlIC8gMikgKiA0NDggLyAoMTAwMCAqIGNsb2NrZGl2IC8gOTApICovCisJZXhwb3N1cmUgPSAoc2QtPmV4cG9zdXJlICogNDUgKiA0NDgpIC8gKDEwMDAgKiBjbG9ja2Rpdik7CisJLyogMCA9IHVzZSBmdWxsIGZyYW1ldGltZSwgNDQ4ID0gbm8gZXhwb3N1cmUsIHJldmVyc2UgaXQgKi8KKwlleHBvc3VyZSA9IDQ0OCAtIGV4cG9zdXJlOworCisJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAzKTsJCQkvKiBwYWdlIDMgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDIsIGNsb2NrZGl2KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MGUsIGV4cG9zdXJlICYgMHhmZik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDBmLCBleHBvc3VyZSA+PiA4KTsKIAogCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCXJldHVybiByZXQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKIH0KIAotc3RhdGljIGludCBzZXRodmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0aHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKIAl1OCBkYXRhLCBoZmxpcCwgdmZsaXA7CiAKIAloZmxpcCA9IHNkLT5oZmxpcDsKQEAgLTcyMSw0OCArNjkxLDM3IEBACiAJaWYgKHNkLT5mbGFncyAmIEZMX1ZGTElQKQogCQl2ZmxpcCA9ICF2ZmxpcDsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMyk7CQkvKiBwYWdlIDMgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDMpOwkJCS8qIHBhZ2UgMyAqLwogCWRhdGEgPSAoaGZsaXAgPyAweDA4IDogMHgwMCkgfCAodmZsaXAgPyAweDA0IDogMHgwMCk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MjEsIGRhdGEpOworCXJlZ193KGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisKIAkvKiBsb2FkIHJlZ2lzdGVycyB0byBzZW5zb3IgKEJpdCAwLCBhdXRvIGNsZWFyKSAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKLQlyZXR1cm4gcmV0OworCXJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7CiB9CiAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSBmb3IgcGFjNzMwMiAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlyZXR1cm4gcmVnX3dfc2VxKGdzcGNhX2RldiwgaW5pdF83MzAyLCBzaXplb2YoaW5pdF83MzAyKS8yKTsKKwlyZWdfd19zZXEoZ3NwY2FfZGV2LCBpbml0XzczMDIsIHNpemVvZihpbml0XzczMDIpLzIpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0ID0gMDsKIAogCXNkLT5zb2ZfcmVhZCA9IDA7CiAKLQlyZXQgPSByZWdfd192YXIoZ3NwY2FfZGV2LCBzdGFydF83MzAyLAotCQlwYWdlM183MzAyLCBzaXplb2YocGFnZTNfNzMwMiksCi0JCU5VTEwsIDApOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0YnJpZ2h0Y29udChnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0Y29sb3JzKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXR3aGl0ZWJhbGFuY2UoZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldHJlZGJhbGFuY2UoZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldGJsdWViYWxhbmNlKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXRnYWluKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXRleHBvc3VyZShnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0aHZmbGlwKGdzcGNhX2Rldik7CisJcmVnX3dfdmFyKGdzcGNhX2Rldiwgc3RhcnRfNzMwMiwKKwkJcGFnZTNfNzMwMiwgc2l6ZW9mKHBhZ2UzXzczMDIpKTsKKwlzZXRicmlnaHRjb250KGdzcGNhX2Rldik7CisJc2V0Y29sb3JzKGdzcGNhX2Rldik7CisJc2V0d2hpdGViYWxhbmNlKGdzcGNhX2Rldik7CisJc2V0cmVkYmFsYW5jZShnc3BjYV9kZXYpOworCXNldGJsdWViYWxhbmNlKGdzcGNhX2Rldik7CisJc2V0Z2Fpbihnc3BjYV9kZXYpOworCXNldGV4cG9zdXJlKGdzcGNhX2Rldik7CisJc2V0aHZmbGlwKGdzcGNhX2Rldik7CiAKIAkvKiBvbmx5IHJlc29sdXRpb24gNjQweDQ4MCBpcyBzdXBwb3J0ZWQgZm9yIHBhYzczMDIgKi8KIApAQCAtNzcxLDM0ICs3MzAsMjcgQEAKIAlhdG9taWNfc2V0KCZzZC0+YXZnX2x1bSwgLTEpOwogCiAJLyogc3RhcnQgc3RyZWFtICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHgwMSk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlpbnQgcmV0OwogCiAJLyogc3RvcCBzdHJlYW0gKi8KLQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHgwMCk7CiB9CiAKIC8qIGNhbGxlZCBvbiBzdHJlYW1vZmYgd2l0aCBhbHQgMCBhbmQgb24gZGlzY29ubmVjdCBmb3IgcGFjNzMwMiAqLwogc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCWludCByZXQ7Ci0KIAlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKIAkJcmV0dXJuOwotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4NDApOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDQwKTsKIH0KIAogLyogSW5jbHVkZSBwYWMgY29tbW9uIHNvZiBkZXRlY3Rpb24gZnVuY3Rpb25zICovCkBAIC04MDgsMjIgKzc2MCwxMyBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgYXZnX2x1bSA9IGF0b21pY19yZWFkKCZzZC0+YXZnX2x1bSk7Ci0JaW50IGRlc2lyZWRfbHVtLCBkZWFkem9uZTsKKwlpbnQgZGVzaXJlZF9sdW07CisJY29uc3QgaW50IGRlYWR6b25lID0gMzA7CiAKIAlpZiAoYXZnX2x1bSA9PSAtMSkKIAkJcmV0dXJuOwogCi0JZGVzaXJlZF9sdW0gPSAyNzAgKyBzZC0+YnJpZ2h0bmVzcyAqIDQ7Ci0JLyogSGFjayBoYWNrLCB3aXRoIHRoZSA3MjAyIHRoZSBmaXJzdCBleHBvc3VyZSBzdGVwIGlzCi0JICAgcHJldHR5IGxhcmdlLCBzbyBpZiB3ZSdyZSBhYm91dCB0byBtYWtlIHRoZSBmaXJzdAotCSAgIGV4cG9zdXJlIGluY3JlYXNlIG1ha2UgdGhlIGRlYWR6b25lIGxhcmdlIHRvIGF2b2lkCi0JICAgb3NjaWxhdGluZyAqLwotCWlmIChkZXNpcmVkX2x1bSA+IGF2Z19sdW0gJiYgc2QtPmdhaW4gPT0gR0FJTl9ERUYgJiYKLQkJCXNkLT5leHBvc3VyZSA+IEVYUE9TVVJFX0RFRiAmJgotCQkJc2QtPmV4cG9zdXJlIDwgNDIpCi0JCWRlYWR6b25lID0gOTA7Ci0JZWxzZQotCQlkZWFkem9uZSA9IDMwOworCWRlc2lyZWRfbHVtID0gMjcwICsgc2QtPmJyaWdodG5lc3M7CiAKIAlpZiAoc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMgPiAwKQogCQlzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcy0tOwpAQCAtOTQ3LDcgKzg5MCw3IEBACiAJc2QtPmJyaWdodG5lc3MgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRicmlnaHRjb250KGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTk2Niw3ICs5MDksNyBAQAogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgewogCQlzZXRicmlnaHRjb250KGdzcGNhX2Rldik7CiAJfQotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtOTg0LDcgKzkyNyw3IEBACiAJc2QtPmNvbG9ycyA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGNvbG9ycyhnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTk5OCwxNCArOTQxLDExIEBACiBzdGF0aWMgaW50IHNkX3NldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldCA9IDA7CiAKIAlzZC0+d2hpdGVfYmFsYW5jZSA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCi0JCXJldCA9IHNldHdoaXRlYmFsYW5jZShnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gMDsKLQlyZXR1cm4gcmV0OworCQlzZXR3aGl0ZWJhbGFuY2UoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0xMDE5LDE0ICs5NTksMTEgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0cmVkYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldCA9IDA7CiAKIAlzZC0+cmVkX2JhbGFuY2UgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlyZXQgPSBzZXRyZWRiYWxhbmNlKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSAwOwotCXJldHVybiByZXQ7CisJCXNldHJlZGJhbGFuY2UoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldHJlZGJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMTA0MCwxNCArOTc3LDExIEBACiBzdGF0aWMgaW50IHNkX3NldGJsdWViYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0ID0gMDsKIAogCXNkLT5ibHVlX2JhbGFuY2UgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlyZXQgPSBzZXRibHVlYmFsYW5jZShnc3BjYV9kZXYpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gMDsKLQlyZXR1cm4gcmV0OworCQlzZXRibHVlYmFsYW5jZShnc3BjYV9kZXYpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Ymx1ZWJhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMTA2NSw3ICs5OTksNyBAQAogCXNkLT5nYWluID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0Z2Fpbihnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0xMDgzLDcgKzEwMTcsNyBAQAogCXNkLT5leHBvc3VyZSA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGV4cG9zdXJlKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0xMTE0LDcgKzEwNDgsNyBAQAogCQl9CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC0xMTMyLDcgKzEwNjYsNyBAQAogCXNkLT5oZmxpcCA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGh2ZmxpcChnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0aGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtMTE1MCw3ICsxMDg0LDcgQEAKIAlzZC0+dmZsaXAgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRodmZsaXAoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTExNjUsNyArMTA5OSw2IEBACiBzdGF0aWMgaW50IHNkX2RiZ19zX3JlZ2lzdGVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQogewotCWludCByZXQgPSAtRUlOVkFMOwogCV9fdTggaW5kZXg7CiAJX191OCB2YWx1ZTsKIApAQCAtMTE4NSwxNCArMTExOCwxMiBAQAogCQkvKiBOb3RlIHRoYXQgdGhlcmUgc2hhbGwgYmUgbm8gYWNjZXNzIHRvIG90aGVyIHBhZ2UKIAkJICAgYnkgYW55IG90aGVyIGZ1bmN0aW9uIGJldHdlZW4gdGhlIHBhZ2Ugc3dpdGggYW5kCiAJCSAgIHRoZSBhY3R1YWwgcmVnaXN0ZXIgd3JpdGUgKi8KLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJLyogcGFnZSAwICovCi0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgaW5kZXgsIHZhbHVlKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAwKTsJCS8qIHBhZ2UgMCAqLworCQlyZWdfdyhnc3BjYV9kZXYsIGluZGV4LCB2YWx1ZSk7CiAKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGRjLCAweDAxKTsKIAl9Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2NoaXBfaWRlbnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LApAQCAtMTIxMCw4ICsxMTQxLDM5IEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19JTlBVVAorc3RhdGljIGludCBzZF9pbnRfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsCQkvKiBpbnRlcnJ1cHQgcGFja2V0IGRhdGEgKi8KKwkJCWludCBsZW4pCQkvKiBpbnRlcnJwdXQgcGFja2V0IGxlbmd0aCAqLworeworCWludCByZXQgPSAtRUlOVkFMOworCXU4IGRhdGEwLCBkYXRhMTsKKworCWlmIChsZW4gPT0gMikgeworCQlkYXRhMCA9IGRhdGFbMF07CisJCWRhdGExID0gZGF0YVsxXTsKKwkJaWYgKChkYXRhMCA9PSAweDAwICYmIGRhdGExID09IDB4MTEpIHx8CisJCSAgICAoZGF0YTAgPT0gMHgyMiAmJiBkYXRhMSA9PSAweDMzKSB8fAorCQkgICAgKGRhdGEwID09IDB4NDQgJiYgZGF0YTEgPT0gMHg1NSkgfHwKKwkJICAgIChkYXRhMCA9PSAweDY2ICYmIGRhdGExID09IDB4NzcpIHx8CisJCSAgICAoZGF0YTAgPT0gMHg4OCAmJiBkYXRhMSA9PSAweDk5KSB8fAorCQkgICAgKGRhdGEwID09IDB4YWEgJiYgZGF0YTEgPT0gMHhiYikgfHwKKwkJICAgIChkYXRhMCA9PSAweGNjICYmIGRhdGExID09IDB4ZGQpIHx8CisJCSAgICAoZGF0YTAgPT0gMHhlZSAmJiBkYXRhMSA9PSAweGZmKSkgeworCQkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDApOworCQkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCQlyZXQgPSAwOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uIGZvciBwYWM3MzAyICovCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCiAJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLApAQCAtMTIyNiw2ICsxMTg4LDkgQEAKIAkuc2V0X3JlZ2lzdGVyID0gc2RfZGJnX3NfcmVnaXN0ZXIsCiAJLmdldF9jaGlwX2lkZW50ID0gc2RfY2hpcF9pZGVudCwKICNlbmRpZgorI2lmZGVmIENPTkZJR19JTlBVVAorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYwppbmRleCA0MmNmY2RmLi40NGZlZDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYwpAQCAtNTEsNiArNTEsNyBAQAogCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJwYWM3MzExIgogCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogCiBNT0RVTEVfQVVUSE9SKCJUaG9tYXMgS2Fpc2VyIHRob21hc0BrYWlzZXItbGludXgubGkiKTsKQEAgLTg4LDcgKzg5LDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogLyogVGhpcyBjb250cm9sIGlzIGZvciBib3RoIHRoZSA3MzAyIGFuZCB0aGUgNzMxMSAqLwogCXsKIAkgICAgewpAQCAtMjAwLDcgKzIwMSw2IEBACiAJCS5wcml2ID0gMH0sCiB9OwogCi0jZGVmaW5lIExPQURfUEFHRTMJCTI1NQogI2RlZmluZSBMT0FEX1BBR0U0CQkyNTQKICNkZWZpbmUgRU5EX09GX1NFUVVFTkNFCQkwCiAKQEAgLTI1OSwxMiArMjU5LDE0IEBACiAJMHgyMywgMHgyOCwgMHgwNCwgMHgxMSwgMHgwMCwgMHgwMAogfTsKIAotc3RhdGljIGludCByZWdfd19idWYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3dfYnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICBfX3U4IGluZGV4LAogCQkgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgaW50IGxlbikKIHsKIAlpbnQgcmV0OwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBidWZmZXIsIGxlbik7CiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKQEAgLTI3MywyMCArMjc1LDIzIEBACiAJCQkwLAkJLyogdmFsdWUgKi8KIAkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwKIAkJCTUwMCk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCA8IDApIHsKIAkJUERFQlVHKERfRVJSLCAicmVnX3dfYnVmKCk6ICIKIAkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlcnMgdG8gaW5kZXggMHgleCwgZXJyb3IgJWkiLAogCQlpbmRleCwgcmV0KTsKLQlyZXR1cm4gcmV0OworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCiAKLXN0YXRpYyBpbnQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkgIF9fdTggaW5kZXgsCiAJCSAgX191OCB2YWx1ZSkKIHsKIAlpbnQgcmV0OwogCisJaWYgKGdzcGNhX2Rldi0+dXNiX2VyciA8IDApCisJCXJldHVybjsKIAlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWx1ZTsKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLApAQCAtMjk0LDMyICsyOTksMzIgQEAKIAkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCTAsIGluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsCiAJCQk1MDApOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQgPCAwKSB7CiAJCVBERUJVRyhEX0VSUiwgInJlZ193KCk6ICIKIAkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlciB0byBpbmRleCAweCV4LCB2YWx1ZSAweCV4LCBlcnJvciAlaSIsCiAJCWluZGV4LCB2YWx1ZSwgcmV0KTsKLQlyZXR1cm4gcmV0OworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByZXQ7CisJfQogfQogCi1zdGF0aWMgaW50IHJlZ193X3NlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdm9pZCByZWdfd19zZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQljb25zdCBfX3U4ICpzZXEsIGludCBsZW4pCiB7Ci0JaW50IHJldCA9IDA7CiAJd2hpbGUgKC0tbGVuID49IDApIHsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCBzZXFbMF0sIHNlcVsxXSk7CisJCXJlZ193KGdzcGNhX2Rldiwgc2VxWzBdLCBzZXFbMV0pOwogCQlzZXEgKz0gMjsKIAl9Ci0JcmV0dXJuIHJldDsKIH0KIAogLyogbG9hZCB0aGUgYmVnaW5uaW5nIG9mIGEgcGFnZSAqLwotc3RhdGljIGludCByZWdfd19wYWdlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X3BhZ2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJY29uc3QgX191OCAqcGFnZSwgaW50IGxlbikKIHsKIAlpbnQgaW5kZXg7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykgewogCQlpZiAocGFnZVtpbmRleF0gPT0gU0tJUCkJCS8qIHNraXAgdGhpcyBpbmRleCAqLwogCQkJY29udGludWU7CkBAIC0zMzUsNTYgKzM0MCw0NyBAQAogCQkJIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlciB0byBpbmRleCAweCV4LCAiCiAJCQkidmFsdWUgMHgleCwgZXJyb3IgJWkiLAogCQkJaW5kZXgsIHBhZ2VbaW5kZXhdLCByZXQpOworCQkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmV0dXJuIHJldDsKIH0KIAogLyogb3V0cHV0IGEgdmFyaWFibGUgc2VxdWVuY2UgKi8KLXN0YXRpYyBpbnQgcmVnX3dfdmFyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB2b2lkIHJlZ193X3ZhcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQljb25zdCBfX3U4ICpzZXEsCi0JCQljb25zdCBfX3U4ICpwYWdlMywgdW5zaWduZWQgaW50IHBhZ2UzX2xlbiwKIAkJCWNvbnN0IF9fdTggKnBhZ2U0LCB1bnNpZ25lZCBpbnQgcGFnZTRfbGVuKQogewogCWludCBpbmRleCwgbGVuOwotCWludCByZXQgPSAwOwogCiAJZm9yICg7OykgewogCQlpbmRleCA9ICpzZXErKzsKIAkJbGVuID0gKnNlcSsrOwogCQlzd2l0Y2ggKGxlbikgewogCQljYXNlIEVORF9PRl9TRVFVRU5DRToKLQkJCXJldHVybiByZXQ7CisJCQlyZXR1cm47CiAJCWNhc2UgTE9BRF9QQUdFNDoKLQkJCXJldCA9IHJlZ193X3BhZ2UoZ3NwY2FfZGV2LCBwYWdlNCwgcGFnZTRfbGVuKTsKLQkJCWJyZWFrOwotCQljYXNlIExPQURfUEFHRTM6Ci0JCQlyZXQgPSByZWdfd19wYWdlKGdzcGNhX2RldiwgcGFnZTMsIHBhZ2UzX2xlbik7CisJCQlyZWdfd19wYWdlKGdzcGNhX2RldiwgcGFnZTQsIHBhZ2U0X2xlbik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWlmIChsZW4gPiBVU0JfQlVGX1NaKSB7CiAJCQkJUERFQlVHKERfRVJSfERfU1RSRUFNLAogCQkJCQkiSW5jb3JyZWN0IHZhcmlhYmxlIHNlcXVlbmNlIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJcmV0dXJuOwogCQkJfQogCQkJd2hpbGUgKGxlbiA+IDApIHsKIAkJCQlpZiAobGVuIDwgOCkgewotCQkJCQlyZXQgPSByZWdfd19idWYoZ3NwY2FfZGV2LAorCQkJCQlyZWdfd19idWYoZ3NwY2FfZGV2LAogCQkJCQkJaW5kZXgsIHNlcSwgbGVuKTsKLQkJCQkJaWYgKHJldCA8IDApCi0JCQkJCQlyZXR1cm4gcmV0OwogCQkJCQlzZXEgKz0gbGVuOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJcmV0ID0gcmVnX3dfYnVmKGdzcGNhX2RldiwgaW5kZXgsIHNlcSwgOCk7CisJCQkJcmVnX3dfYnVmKGdzcGNhX2RldiwgaW5kZXgsIHNlcSwgOCk7CiAJCQkJc2VxICs9IDg7CiAJCQkJaW5kZXggKz0gODsKIAkJCQlsZW4gLT0gODsKIAkJCX0KIAkJfQotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7CiAJfQogCS8qIG5vdCByZWFjaGVkICovCiB9CkBAIC00MTIsNDYgKzQwOCwzNiBAQAogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgcGFjNzMxMSBvbmx5ICovCi1zdGF0aWMgaW50IHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTAsIHNkLT5jb250cmFzdCA+PiA0KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOworCXJlZ193KGdzcGNhX2RldiwgMHgxMCwgc2QtPmNvbnRyYXN0ID4+IDQpOwogCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCXJldHVybiByZXQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKIH0KIAotc3RhdGljIGludCBzZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyB2b2lkIHNldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgZ2FpbiA9IEdBSU5fTUFYIC0gc2QtPmdhaW47Ci0JaW50IHJldDsKIAogCWlmIChnYWluIDwgMSkKIAkJZ2FpbiA9IDE7CiAJZWxzZSBpZiAoZ2FpbiA+IDI0NSkKIAkJZ2FpbiA9IDI0NTsKLQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwkJLyogcGFnZSA0ICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MGUsIDB4MDApOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDBmLCBnYWluKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwkJCS8qIHBhZ2UgNCAqLworCXJlZ193KGdzcGNhX2RldiwgMHgwZSwgMHgwMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDBmLCBnYWluKTsKIAogCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCXJldHVybiByZXQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKIH0KIAotc3RhdGljIGludCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXQ7CiAJX191OCByZWc7CiAKIAkvKiByZWdpc3RlciAyIG9mIGZyYW1lIDMvNCBjb250YWlucyB0aGUgY2xvY2sgZGl2aWRlciBjb25maWd1cmluZyB0aGUKQEAgLTQ2Myw5NCArNDQ5LDcyIEBACiAJZWxzZSBpZiAocmVnID4gNjMpCiAJCXJlZyA9IDYzOwogCi0JcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDA0KTsJCS8qIHBhZ2UgNCAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDAyLCByZWcpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7CQkJLyogcGFnZSA0ICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDAyLCByZWcpOworCiAJLyogUGFnZSAxIHJlZ2lzdGVyIDggbXVzdCBhbHdheXMgYmUgMHgwOCBleGNlcHQgd2hlbiBub3QgaW4KIAkgICA2NDB4NDgwIG1vZGUgYW5kIFBhZ2UzLzQgcmVnIDIgPD0gMyB0aGVuIGl0IG11c3QgYmUgOSAqLwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOwogCWlmIChnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KWdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2ICYmCiAJCQlyZWcgPD0gMykgewotCQlpZiAoMCA8PSByZXQpCi0JCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MDgsIDB4MDkpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDgsIDB4MDkpOwogCX0gZWxzZSB7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgwOCwgMHgwOCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwOCwgMHgwOCk7CiAJfQogCiAJLyogbG9hZCByZWdpc3RlcnMgdG8gc2Vuc29yIChCaXQgMCwgYXV0byBjbGVhcikgKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgxMSwgMHgwMSk7Ci0JcmV0dXJuIHJldDsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwogfQogCi1zdGF0aWMgaW50IHNldGh2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRodmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwogCV9fdTggZGF0YTsKIAotCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7CQkvKiBwYWdlIDQgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwkJCS8qIHBhZ2UgNCAqLwogCWRhdGEgPSAoc2QtPmhmbGlwID8gMHgwNCA6IDB4MDApIHwgKHNkLT52ZmxpcCA/IDB4MDggOiAweDAwKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDIxLCBkYXRhKTsKKwogCS8qIGxvYWQgcmVnaXN0ZXJzIHRvIHNlbnNvciAoQml0IDAsIGF1dG8gY2xlYXIpICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MTEsIDB4MDEpOwotCXJldHVybiByZXQ7CisJcmVnX3coZ3NwY2FfZGV2LCAweDExLCAweDAxKTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lIGZvciBwYWM3MzExICovCiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCXJldHVybiByZWdfd19zZXEoZ3NwY2FfZGV2LCBpbml0XzczMTEsIHNpemVvZihpbml0XzczMTEpLzIpOworCXJlZ193X3NlcShnc3BjYV9kZXYsIGluaXRfNzMxMSwgc2l6ZW9mKGluaXRfNzMxMSkvMik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXQ7CiAKIAlzZC0+c29mX3JlYWQgPSAwOwogCi0JcmV0ID0gcmVnX3dfdmFyKGdzcGNhX2Rldiwgc3RhcnRfNzMxMSwKLQkJTlVMTCwgMCwKKwlyZWdfd192YXIoZ3NwY2FfZGV2LCBzdGFydF83MzExLAogCQlwYWdlNF83MzExLCBzaXplb2YocGFnZTRfNzMxMSkpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldGdhaW4oZ3NwY2FfZGV2KTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHNldGV4cG9zdXJlKGdzcGNhX2Rldik7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSBzZXRodmZsaXAoZ3NwY2FfZGV2KTsKKwlzZXRjb250cmFzdChnc3BjYV9kZXYpOworCXNldGdhaW4oZ3NwY2FfZGV2KTsKKwlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCXNldGh2ZmxpcChnc3BjYV9kZXYpOwogCiAJLyogc2V0IGNvcnJlY3QgcmVzb2x1dGlvbiAqLwogCXN3aXRjaCAoZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXYpIHsKIAljYXNlIDI6CQkJCQkvKiAxNjB4MTIwIHBhYzczMTEgKi8KLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAweDIwKTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDg3LCAweDEwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAweDIwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDg3LCAweDEwKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgkJCQkJLyogMzIweDI0MCBwYWM3MzExICovCi0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgxNywgMHgzMCk7Ci0JCWlmICgwIDw9IHJldCkKLQkJCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHg4NywgMHgxMSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgxNywgMHgzMCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHg4NywgMHgxMSk7CiAJCWJyZWFrOwogCWNhc2UgMDoJCQkJCS8qIDY0MHg0ODAgKi8KLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAweDAwKTsKLQkJaWYgKDAgPD0gcmV0KQotCQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDg3LCAweDEyKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGZmLCAweDAxKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDE3LCAweDAwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDg3LCAweDEyKTsKIAkJYnJlYWs7CiAJfQogCkBAIC01NTksMzcgKzUyMywyNCBAQAogCWF0b21pY19zZXQoJnNkLT5hdmdfbHVtLCAtMSk7CiAKIAkvKiBzdGFydCBzdHJlYW0gKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4MDUpOworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDA1KTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCWludCByZXQ7Ci0KLQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDQpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDI3LCAweDgwKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHgyOCwgMHhjYSk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4MjksIDB4NTMpOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDJhLCAweDBlKTsKLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwMSk7Ci0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4M2UsIDB4MjApOwotCWlmICgwIDw9IHJldCkKLQkJcmV0ID0gcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDQ0KTsgLyogQml0XzA9c3RhcnQgc3RyZWFtLCBCaXRfNj1MRUQgKi8KLQlpZiAoMCA8PSByZXQpCi0JCXJldCA9IHJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHg0NCk7IC8qIEJpdF8wPXN0YXJ0IHN0cmVhbSwgQml0XzY9TEVEICovCi0JaWYgKDAgPD0gcmV0KQotCQlyZXQgPSByZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4NDQpOyAvKiBCaXRfMD1zdGFydCBzdHJlYW0sIEJpdF82PUxFRCAqLworCXJlZ193KGdzcGNhX2RldiwgMHhmZiwgMHgwNCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDI3LCAweDgwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MjgsIDB4Y2EpOworCXJlZ193KGdzcGNhX2RldiwgMHgyOSwgMHg1Myk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDJhLCAweDBlKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZmYsIDB4MDEpOworCXJlZ193KGdzcGNhX2RldiwgMHgzZSwgMHgyMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDQ0KTsgLyogQml0XzA9c3RhcnQgc3RyZWFtLCBCaXRfNj1MRUQgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4NDQpOyAvKiBCaXRfMD1zdGFydCBzdHJlYW0sIEJpdF82PUxFRCAqLworCXJlZ193KGdzcGNhX2RldiwgMHg3OCwgMHg0NCk7IC8qIEJpdF8wPXN0YXJ0IHN0cmVhbSwgQml0XzY9TEVEICovCiB9CiAKIC8qIGNhbGxlZCBvbiBzdHJlYW1vZmYgd2l0aCBhbHQgMCBhbmQgb24gZGlzY29ubmVjdCBmb3IgNzMxMSAqLwpAQCAtNzM0LDcgKzY4NSw3IEBACiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CiAJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJfQotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtNzUyLDcgKzcwMyw3IEBACiAJc2QtPmdhaW4gPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRnYWluKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTc3MCw3ICs3MjEsNyBAQAogCXNkLT5leHBvc3VyZSA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldGV4cG9zdXJlKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC04MDEsNyArNzUyLDcgQEAKIAkJfQogCX0KIAotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtODE5LDcgKzc3MCw3IEBACiAJc2QtPmhmbGlwID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0aHZmbGlwKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRoZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCkBAIC04MzcsNyArNzg4LDcgQEAKIAlzZC0+dmZsaXAgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRodmZsaXAoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTg0OCw4ICs3OTksMzkgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19JTlBVVAorc3RhdGljIGludCBzZF9pbnRfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsCQkvKiBpbnRlcnJ1cHQgcGFja2V0IGRhdGEgKi8KKwkJCWludCBsZW4pCQkvKiBpbnRlcnJ1cHQgcGFja2V0IGxlbmd0aCAqLworeworCWludCByZXQgPSAtRUlOVkFMOworCXU4IGRhdGEwLCBkYXRhMTsKKworCWlmIChsZW4gPT0gMikgeworCQlkYXRhMCA9IGRhdGFbMF07CisJCWRhdGExID0gZGF0YVsxXTsKKwkJaWYgKChkYXRhMCA9PSAweDAwICYmIGRhdGExID09IDB4MTEpIHx8CisJCSAgICAoZGF0YTAgPT0gMHgyMiAmJiBkYXRhMSA9PSAweDMzKSB8fAorCQkgICAgKGRhdGEwID09IDB4NDQgJiYgZGF0YTEgPT0gMHg1NSkgfHwKKwkJICAgIChkYXRhMCA9PSAweDY2ICYmIGRhdGExID09IDB4NzcpIHx8CisJCSAgICAoZGF0YTAgPT0gMHg4OCAmJiBkYXRhMSA9PSAweDk5KSB8fAorCQkgICAgKGRhdGEwID09IDB4YWEgJiYgZGF0YTEgPT0gMHhiYikgfHwKKwkJICAgIChkYXRhMCA9PSAweGNjICYmIGRhdGExID09IDB4ZGQpIHx8CisJCSAgICAoZGF0YTAgPT0gMHhlZSAmJiBkYXRhMSA9PSAweGZmKSkgeworCQkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDApOworCQkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCQlyZXQgPSAwOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uIGZvciBwYWM3MzExICovCi1zdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCiAJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLApAQCAtODYwLDYgKzg0Miw5IEBACiAJLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCiAJLmRxX2NhbGxiYWNrID0gZG9fYXV0b2dhaW4sCisjaWZkZWYgQ09ORklHX0lOUFVUCisJLmludF9wa3Rfc2NhbiA9IHNkX2ludF9wa3Rfc2NhbiwKKyNlbmRpZgogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhY19jb21tb24uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjX2NvbW1vbi5oCmluZGV4IDIwZjY3ZDkuLjg0NjJhN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjX2NvbW1vbi5oCkBAIC0yNCwxMSArMjQsMTAgQEAKICAqLwogCiAvKiBXZSBjYWxjdWxhdGUgdGhlIGF1dG9nYWluIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zZmVyIG9mIGEgZnJhbWUsIGF0IHRoaXMKLSAgIG1vbWVudCBhIGZyYW1lIHdpdGggdGhlIG9sZCBzZXR0aW5ncyBpcyBiZWluZyB0cmFuc21pdHRlZCwgYW5kIGEgZnJhbWUgaXMKLSAgIGJlaW5nIGNhcHR1cmVkIHdpdGggdGhlIG9sZCBzZXR0aW5ncy4gU28gaWYgd2UgYWRqdXN0IHRoZSBhdXRvZ2FpbiB3ZSBtdXN0Ci0gICBpZ25vcmUgYXRsZWFzdCB0aGUgMiBuZXh0IGZyYW1lcyBmb3IgdGhlIG5ldyBzZXR0aW5ncyB0byBjb21lIGludG8gZWZmZWN0Ci0gICBiZWZvcmUgZG9pbmcgYW55IG90aGVyIGFkanVzdG1lbnRzICovCi0jZGVmaW5lIFBBQ19BVVRPR0FJTl9JR05PUkVfRlJBTUVTCTMKKyAgIG1vbWVudCBhIGZyYW1lIHdpdGggdGhlIG9sZCBzZXR0aW5ncyBpcyBiZWluZyBjYXB0dXJlZCBhbmQgdHJhbnNtaXR0ZWQuIFNvCisgICBpZiB3ZSBhZGp1c3QgdGhlIGdhaW4gb3IgZXhwb3N1cmUgd2UgbXVzdCBpZ25vcmUgYXRsZWFzdCB0aGUgbmV4dCBmcmFtZSBmb3IKKyAgIHRoZSBuZXcgc2V0dGluZ3MgdG8gY29tZSBpbnRvIGVmZmVjdCBiZWZvcmUgZG9pbmcgYW55IG90aGVyIGFkanVzdG1lbnRzLiAqLworI2RlZmluZSBQQUNfQVVUT0dBSU5fSUdOT1JFX0ZSQU1FUwkyCiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBhY19zb2ZfbWFya2VyWzVdID0KIAkJeyAweGZmLCAweGZmLCAweDAwLCAweGZmLCAweDk2IH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhNWZkNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIwMjguYwpAQCAtMCwwICsxLDc1NyBAQAorLyoKKyAqIFNOOUMyMDI4IGxpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlb2RvcmUgS2lsZ29yZSA8a2lsZ290YUBhdWJ1cm4uZWR1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAic245YzIwMjgiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorCitNT0RVTEVfQVVUSE9SKCJUaGVvZG9yZSBLaWxnb3JlIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNvbml4IFNOOUMyMDI4IFVTQiBDYW1lcmEgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIHNwZWNpZmljIHdlYmNhbSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OyAgLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCXU4IHNvZl9yZWFkOworCXUxNiBtb2RlbDsKK307CisKK3N0cnVjdCBpbml0X2NvbW1hbmQgeworCXVuc2lnbmVkIGNoYXIgaW5zdHJ1Y3Rpb25bNl07CisJdW5zaWduZWQgY2hhciB0b19yZWFkOyAvKiBsZW5ndGggdG8gcmVhZC4gMCBtZWFucyBubyByZXBseSByZXF1ZXN0ZWQgKi8KK307CisKKy8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworfTsKKworLyogSG93IHRvIGNoYW5nZSB0aGUgcmVzb2x1dGlvbiBvZiBhbnkgb2YgdGhlIFZHQSBjYW1zIGlzIHVua25vd24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfU045QzIwMjgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCAqIDMgLyA0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKKworLyogTm8gd2F5IHRvIGNoYW5nZSB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgQ0lGIGNhbXMgaXMga25vd24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGNpZl9tb2RlW10gPSB7CisJezM1MiwgMjg4LCBWNEwyX1BJWF9GTVRfU045QzIwMjgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDM1MiwKKwkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCAqIDMgLyA0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKKworLyogdGhlIGJ5dGVzIHRvIHdyaXRlIGFyZSBpbiBnc3BjYV9kZXYtPnVzYl9idWYgKi8KK3N0YXRpYyBpbnQgc245YzIwMjhfY29tbWFuZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4ICpjb21tYW5kKQoreworCWludCByYzsKKworCVBERUJVRyhEX1VTQk8sICJzZW5kaW5nIGNvbW1hbmQgJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4IiwgY29tbWFuZFswXSwKKwkgICAgICAgY29tbWFuZFsxXSwgY29tbWFuZFsyXSwgY29tbWFuZFszXSwgY29tbWFuZFs0XSwgY29tbWFuZFs1XSk7CisKKwltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBjb21tYW5kLCA2KTsKKwlyYyA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQlVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJMiwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCA2LCA1MDApOworCWlmIChyYyA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiY29tbWFuZCB3cml0ZSBbJTAyeF0gZXJyb3IgJWQiLAorCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc245YzIwMjhfcmVhZDEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCByYzsKKworCXJjID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJMSwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLCA1MDApOworCWlmIChyYyAhPSAxKSB7CisJCVBERUJVRyhEX0VSUiwgInJlYWQxIGVycm9yICVkIiwgcmMpOworCQlyZXR1cm4gKHJjIDwgMCkgPyByYyA6IC1FSU87CisJfQorCVBERUJVRyhEX1VTQkksICJyZWFkMSByZXNwb25zZSAlMDJ4IiwgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOworfQorCitzdGF0aWMgaW50IHNuOWMyMDI4X3JlYWQ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggKnJlYWRpbmcpCit7CisJaW50IHJjOworCXJjID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJNCwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCA0LCA1MDApOworCWlmIChyYyAhPSA0KSB7CisJCVBERUJVRyhEX0VSUiwgInJlYWQ0IGVycm9yICVkIiwgcmMpOworCQlyZXR1cm4gKHJjIDwgMCkgPyByYyA6IC1FSU87CisJfQorCW1lbWNweShyZWFkaW5nLCBnc3BjYV9kZXYtPnVzYl9idWYsIDQpOworCVBERUJVRyhEX1VTQkksICJyZWFkNCByZXNwb25zZSAlMDJ4JTAyeCUwMnglMDJ4IiwgcmVhZGluZ1swXSwKKwkgICAgICAgcmVhZGluZ1sxXSwgcmVhZGluZ1syXSwgcmVhZGluZ1szXSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHNuOWMyMDI4X2xvbmdfY29tbWFuZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4ICpjb21tYW5kKQoreworCWludCBpLCBzdGF0dXM7CisJX191OCByZWFkaW5nWzRdOworCisJc3RhdHVzID0gc245YzIwMjhfY29tbWFuZChnc3BjYV9kZXYsIGNvbW1hbmQpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJc3RhdHVzID0gLTE7CisJZm9yIChpID0gMDsgaSA8IDI1NiAmJiBzdGF0dXMgPCAyOyBpKyspCisJCXN0YXR1cyA9IHNuOWMyMDI4X3JlYWQxKGdzcGNhX2Rldik7CisJaWYgKHN0YXR1cyAhPSAyKSB7CisJCVBERUJVRyhEX0VSUiwgImxvbmcgY29tbWFuZCBzdGF0dXMgcmVhZCBlcnJvciAlZCIsIHN0YXR1cyk7CisJCXJldHVybiAoc3RhdHVzIDwgMCkgPyBzdGF0dXMgOiAtRUlPOworCX0KKworCW1lbXNldChyZWFkaW5nLCAwLCA0KTsKKwlzdGF0dXMgPSBzbjljMjAyOF9yZWFkNChnc3BjYV9kZXYsIHJlYWRpbmcpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJLyogaW4gZ2VuZXJhbCwgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHJlc3BvbnNlIGlzIHRoZSBmaXJzdCBieXRlIG9mCisJICogdGhlIGNvbW1hbmQsIG9yJ2VkIHdpdGggOCAqLworCXN0YXR1cyA9IHNuOWMyMDI4X3JlYWQxKGdzcGNhX2Rldik7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbjljMjAyOF9zaG9ydF9jb21tYW5kKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggKmNvbW1hbmQpCit7CisJaW50IGVycl9jb2RlOworCisJZXJyX2NvZGUgPSBzbjljMjAyOF9jb21tYW5kKGdzcGNhX2RldiwgY29tbWFuZCk7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZXJyX2NvZGUgPSBzbjljMjAyOF9yZWFkMShnc3BjYV9kZXYpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCXJldHVybiAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisKKwlQREVCVUcoRF9QUk9CRSwgIlNOOUMyMDI4IGNhbWVyYSBkZXRlY3RlZCAodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsCisJICAgICAgIGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CisKKwlzZC0+bW9kZWwgPSBpZC0+aWRQcm9kdWN0OworCisJc3dpdGNoIChzZC0+bW9kZWwpIHsKKwljYXNlIDB4NzAwNToKKwkJUERFQlVHKERfUFJPQkUsICJHZW5pdXMgU21hcnQgMzAwIGNhbWVyYSIpOworCQlicmVhazsKKwljYXNlIDB4ODAwMDoKKwkJUERFQlVHKERfUFJPQkUsICJEQzMxVkMiKTsKKwkJYnJlYWs7CisJY2FzZSAweDgwMDE6CisJCVBERUJVRyhEX1BST0JFLCAiU3B5IGNhbWVyYSIpOworCQlicmVhazsKKwljYXNlIDB4ODAwMzoKKwkJUERFQlVHKERfUFJPQkUsICJDSUYgY2FtZXJhIik7CisJCWJyZWFrOworCWNhc2UgMHg4MDA4OgorCQlQREVCVUcoRF9QUk9CRSwgIk1pbmktU2hvdHogbXMtMzUwIGNhbWVyYSIpOworCQlicmVhazsKKwljYXNlIDB4ODAwYToKKwkJUERFQlVHKERfUFJPQkUsICJWaXZpdGFyIDMzNTBiIHR5cGUgY2FtZXJhIik7CisJCWNhbS0+aW5wdXRfZmxhZ3MgPSBWNEwyX0lOX1NUX1ZGTElQIHwgVjRMMl9JTl9TVF9IRkxJUDsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChzZC0+bW9kZWwpIHsKKwljYXNlIDB4ODAwMDoKKwljYXNlIDB4ODAwMToKKwljYXNlIDB4ODAwMzoKKwkJY2FtLT5jYW1fbW9kZSA9IGNpZl9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoY2lmX21vZGUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CisJfQorCXJldHVybiAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IHN0YXR1cyA9IC0xOworCisJc245YzIwMjhfcmVhZDEoZ3NwY2FfZGV2KTsKKwlzbjljMjAyOF9yZWFkMShnc3BjYV9kZXYpOworCXN0YXR1cyA9IHNuOWMyMDI4X3JlYWQxKGdzcGNhX2Rldik7CisKKwlyZXR1cm4gKHN0YXR1cyA8IDApID8gc3RhdHVzIDogMDsKK30KKworc3RhdGljIGludCBydW5fc3RhcnRfY29tbWFuZHMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJICAgICAgc3RydWN0IGluaXRfY29tbWFuZCAqY2FtX2NvbW1hbmRzLCBpbnQgbikKK3sKKwlpbnQgaSwgZXJyX2NvZGUgPSAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJc3dpdGNoIChjYW1fY29tbWFuZHNbaV0udG9fcmVhZCkgeworCQljYXNlIDQ6CisJCQllcnJfY29kZSA9IHNuOWMyMDI4X2xvbmdfY29tbWFuZChnc3BjYV9kZXYsCisJCQkJCWNhbV9jb21tYW5kc1tpXS5pbnN0cnVjdGlvbik7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZXJyX2NvZGUgPSBzbjljMjAyOF9zaG9ydF9jb21tYW5kKGdzcGNhX2RldiwKKwkJCQkJY2FtX2NvbW1hbmRzW2ldLmluc3RydWN0aW9uKTsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCQllcnJfY29kZSA9IHNuOWMyMDI4X2NvbW1hbmQoZ3NwY2FfZGV2LAorCQkJCQljYW1fY29tbWFuZHNbaV0uaW5zdHJ1Y3Rpb24pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGVycl9jb2RlIDwgMCkKKwkJCXJldHVybiBlcnJfY29kZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfc3B5X2NhbShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IGluaXRfY29tbWFuZCBzcHlfc3RhcnRfY29tbWFuZHNbXSA9IHsKKwkJe3sweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIyLCAweDAxLCAweDA0LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMywgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDE2LCAweDAwLCAweDAwfSwgNH0sIC8qIHdpZHRoICAzNTIgKi8KKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDEyLCAweDAwLCAweDAwfSwgNH0sIC8qIGhlaWdodCAyODggKi8KKwkJLyoge3sweDEzLCAweDI3LCAweDAxLCAweDI4LCAweDAwLCAweDAwfSwgNH0sICovCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHg2OCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjgsIDB4MDEsIDB4MDksIDB4MDAsIDB4MDB9LCA0fSwgLyogcmVkIGdhaW4gPyovCisJCS8qIHt7MHgxMywgMHgyOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCAqLworCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoge3sweDEzLCAweDI5LCAweDAxLCAweDBjLCAweDAwLCAweDAwfSwgNH0sICovCisJCXt7MHgxMywgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoge3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sICovCisJCXt7MHgxMywgMHgyYywgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmQsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoge3sweDEzLCAweDJlLCAweDAxLCAweDA5LCAweDAwLCAweDAwfSwgNH0sICovCisJCXt7MHgxMywgMHgyZSwgMHgwMSwgMHgwOSwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmYsIDB4MDEsIDB4MDcsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEyLCAweDM0LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgzNCwgMHgwMSwgMHhhMSwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MzUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDAyLCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwMywgMHgxMywgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCAvKmRvbid0IG1lc3Mgd2l0aCovCisJCS8qe3sweDExLCAweDA0LCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgNH0sIG9ic2VydmVkICovCisJCXt7MHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCAvKiBicmlnaHRlciAqLworCQkvKnt7MHgxMSwgMHgwNSwgMHg2NSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCBvYnNlcnZlZCAqLworCQl7ezB4MTEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwgLyogYnJpZ2h0ZXIgKi8KKwkJe3sweDExLCAweDA2LCAweGIxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sIC8qIG9ic2VydmVkICovCisJCXt7MHgxMSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQkvKnt7MHgxMSwgMHgwOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LCBvYnNlcnZlZCAqLworCQl7ezB4MTEsIDB4MDgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDA5LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoge3sweDExLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sICovCisJCS8qIGJyaWdodG5lc3Mgb3IgZ2Fpbi4gMCBpcyBkZWZhdWx0LiA0IGlzIGdvb2QKKwkJICogaW5kb29ycyBhdCBuaWdodCB3aXRoIGluY2FuZGVzY2VudCBsaWdodGluZyAqLworCQl7ezB4MTEsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDEwLCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgNH0sIC8qaHN0YXJ0IG9yIGhvZmZzKi8KKwkJe3sweDExLCAweDExLCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDEzLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCS8qIHt7MHgxYiwgMHgwMiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LCBvYnNlcnZlZCAqLworCQl7ezB4MWIsIDB4MDIsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwgLyogYnJpZ2h0ZXIgKi8KKwkJLyoge3sweDFiLCAweDEzLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgMX0sIG9ic2VydmVkICovCisJCXt7MHgxYiwgMHgxMywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MjAsIDB4MzQsIDB4YTEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwgLyogY29tcHJlc3NlcyAqLworCQkvKiBDYW1lcmEgc2hvdWxkIHN0YXJ0IHRvIGNhcHR1cmUgbm93LiAqLworCX07CisKKwlyZXR1cm4gcnVuX3N0YXJ0X2NvbW1hbmRzKGdzcGNhX2Rldiwgc3B5X3N0YXJ0X2NvbW1hbmRzLAorCQkJCSAgQVJSQVlfU0laRShzcHlfc3RhcnRfY29tbWFuZHMpKTsKK30KKworc3RhdGljIGludCBzdGFydF9jaWZfY2FtKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgaW5pdF9jb21tYW5kIGNpZl9zdGFydF9jb21tYW5kc1tdID0geworCQl7ezB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyogVGhlIGVudGlyZSBzZXF1ZW5jZSBiZWxvdyBzZWVtcyByZWR1bmRhbnQgKi8KKwkJLyoge3sweDEzLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjIsIDB4MDEsIDB4MDYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIzLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MTYsIDB4MDAsIDB4MDB9LCA0fSwgd2lkdGg/CisJCXt7MHgxMywgMHgyNiwgMHgwMSwgMHgxMiwgMHgwMCwgMHgwMH0sIDR9LCBoZWlnaHQ/CisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHg2OCwgMHgwMCwgMHgwMH0sIDR9LCBzdWJzYW1wbGU/CisJCXt7MHgxMywgMHgyOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJhLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmMsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJkLCAweDAxLCAweDAzLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZSwgMHgwMSwgMHgwZiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmYsIDB4MDEsIDB4MGMsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEyLCAweDM0LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgzNCwgMHgwMSwgMHhhMSwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MzUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwqLworCQl7ezB4MWIsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDIsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDAzLCAweDVhLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwNCwgMHgyNywgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDEyLCAweDE0LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDE1LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NzcsIDB4YTIsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDA2LCAweDBmLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDgsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDA5LCAweDEwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDE2LCAweDAwLCAweDAwfSwgMX0sIC8qIHdpZHRoLzggKi8KKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDEyLCAweDAwLCAweDAwfSwgMX0sIC8qIGhlaWdodC84ICovCisJCS8qIHt7MHgxMywgMHgyNywgMHgwMSwgMHg2OCwgMHgwMCwgMHgwMH0sIDR9LCBzdWJzYW1wbGU/CisJCSAqIHt7MHgxMywgMHgyOCwgMHgwMSwgMHgxZSwgMHgwMCwgMHgwMH0sIDR9LCBkb2VzIG5vdGhpbmcKKwkJICoge3sweDEzLCAweDI3LCAweDAxLCAweDIwLCAweDAwLCAweDAwfSwgNH0sICovCisJCS8qIHt7MHgxMywgMHgyOSwgMHgwMSwgMHgyMiwgMHgwMCwgMHgwMH0sIDR9LAorCQkgKiBjYXVzZXMgc3Vic2FtcGxpbmcKKwkJICogYnV0IG5vdCBhIGNoYW5nZSBpbiB0aGUgcmVzb2x1dGlvbiBzZXR0aW5nISAqLworCQl7ezB4MTMsIDB4MmMsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJkLCAweDAxLCAweDAxLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZSwgMHgwMSwgMHgwOCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmYsIDB4MDEsIDB4MDYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI4LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxYiwgMHgwNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDUsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDIwLCAweDM2LCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MTIsIDB4MjcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDFiLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgyMCwgMHgzNiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDAyLCAweDA2LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MjAsIDB4MzQsIDB4YTEsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwvKiB1c2UgY29tcHJlc3Npb24gKi8KKwkJLyogQ2FtZXJhIHNob3VsZCBzdGFydCB0byBjYXB0dXJlIG5vdy4gKi8KKwl9OworCisJcmV0dXJuIHJ1bl9zdGFydF9jb21tYW5kcyhnc3BjYV9kZXYsIGNpZl9zdGFydF9jb21tYW5kcywKKwkJCQkgIEFSUkFZX1NJWkUoY2lmX3N0YXJ0X2NvbW1hbmRzKSk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfbXMzNTBfY2FtKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgaW5pdF9jb21tYW5kIG1zMzUwX3N0YXJ0X2NvbW1hbmRzW10gPSB7CisJCXt7MHgwYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjIsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIzLCAweDAxLCAweDAzLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MTYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDEyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyOCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjgsIDB4MDEsIDB4MDksIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI5LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MGYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDBjLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMiwgMHgzNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MzQsIDB4MDEsIDB4YTEsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDM1LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MDEsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDAyLCAweDA1LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwMywgMHg1ZCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MDQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDA1LCAweDI1LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MDcsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDBiLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MGQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDBlLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTMsIDB4NjMsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE1LCAweDcwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDI4LCAweDAwLCAweDAwfSwgNH0sIC8qIHdpZHRoICAqLworCQl7ezB4MTMsIDB4MjYsIDB4MDEsIDB4MWUsIDB4MDAsIDB4MDB9LCA0fSwgLyogaGVpZ2h0ICovCisJCXt7MHgxMywgMHgyOCwgMHgwMSwgMHgwOSwgMHgwMCwgMHgwMH0sIDR9LCAvKiB2c3RhcnQ/ICovCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyOCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4NDAsIDB4MDAsIDB4MDB9LCA0fSwgLyogaHN0YXJ0PyAqLworCQl7ezB4MTMsIDB4MmMsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJkLCAweDAxLCAweDAzLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZSwgMHgwMSwgMHgwZiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmYsIDB4MDEsIDB4MGMsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDFiLCAweDAyLCAweDA1LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MjAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDAyLCAweDBhLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDB9LAorCQkvKiBDYW1lcmEgc2hvdWxkIHN0YXJ0IHRvIGNhcHR1cmUgbm93LiAqLworCX07CisKKwlyZXR1cm4gcnVuX3N0YXJ0X2NvbW1hbmRzKGdzcGNhX2RldiwgbXMzNTBfc3RhcnRfY29tbWFuZHMsCisJCQkJICBBUlJBWV9TSVpFKG1zMzUwX3N0YXJ0X2NvbW1hbmRzKSk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfZ2VuaXVzX2NhbShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IGluaXRfY29tbWFuZCBnZW5pdXNfc3RhcnRfY29tbWFuZHNbXSA9IHsKKwkJe3sweDBjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxNiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI1LCAweDAxLCAweDE2LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNiwgMHgwMSwgMHgxMiwgMHgwMCwgMHgwMH0sIDR9LAorCQkvKiAicHJlbGltaW5hcnkiIHdpZHRoIGFuZCBoZWlnaHQgc2V0dGluZ3MgKi8KKwkJe3sweDEzLCAweDI4LCAweDAxLCAweDBlLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4MjIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MDksIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDA3LCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjEsIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDExLCAweDY0LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTMsIDB4OTEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxNSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE3LCAweDYwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjEsIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDI2LCAweDAyLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyNywgMHg4OCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MzAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDMxLCAweDJhLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgzMiwgMHgyYSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MzMsIDB4MmEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDM0LCAweDAyLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHg1YiwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MjgsIDB4MDAsIDB4MDB9LCA0fSwgLyogcmVhbCB3aWR0aCAqLworCQl7ezB4MTMsIDB4MjYsIDB4MDEsIDB4MWUsIDB4MDAsIDB4MDB9LCA0fSwgLyogcmVhbCBoZWlnaHQgKi8KKwkJe3sweDEzLCAweDI4LCAweDAxLCAweDBlLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjksIDB4MDEsIDB4NjIsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MGYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDBjLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MjEsIDB4MmEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgyMywgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMSwgMHgxNSwgMHhlMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTEsIDB4MTYsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDExLCAweDE3LCAweDgwLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxYywgMHgyMCwgMHgwMCwgMHgyYSwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWMsIDB4MjAsIDB4MDAsIDB4MmEsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDIwLCAweDM0LCAweGExLCAweDAwLCAweDAwLCAweDAwfSwgMH0KKwkJLyogQ2FtZXJhIHNob3VsZCBzdGFydCB0byBjYXB0dXJlIG5vdy4gKi8KKwl9OworCisJcmV0dXJuIHJ1bl9zdGFydF9jb21tYW5kcyhnc3BjYV9kZXYsIGdlbml1c19zdGFydF9jb21tYW5kcywKKwkJCQkgIEFSUkFZX1NJWkUoZ2VuaXVzX3N0YXJ0X2NvbW1hbmRzKSk7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfdml2aXRhcl9jYW0oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBpbml0X2NvbW1hbmQgdml2aXRhcl9zdGFydF9jb21tYW5kc1tdID0geworCQl7ezB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDIzLCAweDAxLCAweDAxLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MjgsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDFlLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyNywgMHgwMSwgMHgyMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MjgsIDB4MDEsIDB4MGEsIDB4MDAsIDB4MDB9LCA0fSwKKwkJLyoKKwkJICogQWJvdmUgaXMgY2hhbmdlZCBmcm9tIE9FTSAweDBiLiBGaXhlcyBCYXllciB0aWxpbmcuCisJCSAqIFByZXN1bWFibHkgZ2l2ZXMgYSB2ZXJ0aWNhbCBzaGlmdCBvZiBvbmUgcm93LgorCQkgKi8KKwkJe3sweDEzLCAweDI5LCAweDAxLCAweDIwLCAweDAwLCAweDAwfSwgNH0sCisJCS8qIEFib3ZlIHNlZW1zIHRvIGRvIGhvcml6b250YWwgc2hpZnQuICovCisJCXt7MHgxMywgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJjLCAweDAxLCAweDAyLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyZCwgMHgwMSwgMHgwMywgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MmUsIDB4MDEsIDB4MGYsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDJmLCAweDAxLCAweDBjLCAweDAwLCAweDAwfSwgNH0sCisJCS8qIEFib3ZlIHRocmVlIGNvbW1hbmRzIHNlZW0gdG8gcmVsYXRlIHRvIGJyaWdodG5lc3MuICovCisJCXt7MHgxMiwgMHgzNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MTMsIDB4MzQsIDB4MDEsIDB4YTEsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDM1LCAweDAxLCAweDAwLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxYiwgMHgxMiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MDEsIDB4NzcsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDAyLCAweDNhLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxMiwgMHg3OCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDE0LCAweDgwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxNSwgMHgzNCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MWIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDIwLCAweDQ0LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgyMywgMHhlZSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MjYsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDI3LCAweDlhLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgyOCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MjksIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDJhLCAweDgwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgyYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MmYsIDB4M2QsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDMwLCAweDI0LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgzMiwgMHg4NiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NjAsIDB4YTksIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDYxLCAweDQyLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHg2NSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NjksIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDZmLCAweDg4LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHg3MCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDc0LCAweDIxLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHg3NSwgMHg4NiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4NzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDdkLCAweGYzLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxNywgMHgxYywgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQl7ezB4MWIsIDB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDE5LCAweDA1LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgxYSwgMHhmNiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQkvKiB7ezB4MTMsIDB4MjUsIDB4MDEsIDB4MjgsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDEzLCAweDI2LCAweDAxLCAweDFlLCAweDAwLCAweDAwfSwgNH0sCisJCXt7MHgxMywgMHgyOCwgMHgwMSwgMHgwYiwgMHgwMCwgMHgwMH0sIDR9LCAqLworCQl7ezB4MjAsIDB4MzYsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDFiLCAweDEwLCAweDI2LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxMiwgMHgyNywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDR9LAorCQl7ezB4MWIsIDB4NzYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9LCAxfSwKKwkJe3sweDIwLCAweDM2LCAweDA1LCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgxYiwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9LAorCQkvKiBBYm92ZSBpcyBicmlnaHRuZXNzOyBPRU0gZHJpdmVyIHNldHRpbmcgaXMgMHgxMCAqLworCQl7ezB4MTIsIDB4MjcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDB9LCA0fSwKKwkJe3sweDIwLCAweDI5LCAweDMwLCAweDAwLCAweDAwLCAweDAwfSwgMX0sCisJCXt7MHgyMCwgMHgzNCwgMHhhMSwgMHgwMCwgMHgwMCwgMHgwMH0sIDF9CisJfTsKKworCXJldHVybiBydW5fc3RhcnRfY29tbWFuZHMoZ3NwY2FfZGV2LCB2aXZpdGFyX3N0YXJ0X2NvbW1hbmRzLAorCQkJCSAgQVJSQVlfU0laRSh2aXZpdGFyX3N0YXJ0X2NvbW1hbmRzKSk7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgZXJyX2NvZGU7CisKKwlzZC0+c29mX3JlYWQgPSAwOworCisJc3dpdGNoIChzZC0+bW9kZWwpIHsKKwljYXNlIDB4NzAwNToKKwkJZXJyX2NvZGUgPSBzdGFydF9nZW5pdXNfY2FtKGdzcGNhX2Rldik7CisJCWJyZWFrOworCWNhc2UgMHg4MDAxOgorCQllcnJfY29kZSA9IHN0YXJ0X3NweV9jYW0oZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSAweDgwMDM6CisJCWVycl9jb2RlID0gc3RhcnRfY2lmX2NhbShnc3BjYV9kZXYpOworCQlicmVhazsKKwljYXNlIDB4ODAwODoKKwkJZXJyX2NvZGUgPSBzdGFydF9tczM1MF9jYW0oZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSAweDgwMGE6CisJCWVycl9jb2RlID0gc3RhcnRfdml2aXRhcl9jYW0oZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUERFQlVHKERfRVJSLCAiU3RhcnRpbmcgdW5rbm93biBjYW1lcmEsIHBsZWFzZSByZXBvcnQgdGhpcyIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXJldHVybiBlcnJfY29kZTsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCByZXN1bHQ7CisJX191OCBkYXRhWzZdOworCisJcmVzdWx0ID0gc245YzIwMjhfcmVhZDEoZ3NwY2FfZGV2KTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAiQ2FtZXJhIFN0b3AgcmVhZCBmYWlsZWQiKTsKKworCW1lbXNldChkYXRhLCAwLCA2KTsKKwlkYXRhWzBdID0gMHgxNDsKKwlyZXN1bHQgPSBzbjljMjAyOF9jb21tYW5kKGdzcGNhX2RldiwgZGF0YSk7CisJaWYgKHJlc3VsdCA8IDApCisJCVBERUJVRyhEX0VSUiwgIkNhbWVyYSBTdG9wIGNvbW1hbmQgZmFpbGVkIik7Cit9CisKKy8qIEluY2x1ZGUgc245YzIwMjggc29mIGRldGVjdGlvbiBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlICJzbjljMjAyOC5oIgorCitzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCit7CisJdW5zaWduZWQgY2hhciAqc29mOworCisJc29mID0gc245YzIwMjhfZmluZF9zb2YoZ3NwY2FfZGV2LCBkYXRhLCBsZW4pOworCWlmIChzb2YpIHsKKwkJaW50IG47CisKKwkJLyogZmluaXNoIGRlY29kaW5nIGN1cnJlbnQgZnJhbWUgKi8KKwkJbiA9IHNvZiAtIGRhdGE7CisJCWlmIChuID4gc2l6ZW9mIHNuOWMyMDI4X3NvZl9tYXJrZXIpCisJCQluIC09IHNpemVvZiBzbjljMjAyOF9zb2ZfbWFya2VyOworCQllbHNlCisJCQluID0gMDsKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGRhdGEsIG4pOworCQkvKiBTdGFydCBuZXh0IGZyYW1lLiAqLworCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCisJCQlzbjljMjAyOF9zb2ZfbWFya2VyLCBzaXplb2Ygc245YzIwMjhfc29mX21hcmtlcik7CisJCWxlbiAtPSBzb2YgLSBkYXRhOworCQlkYXRhID0gc29mOworCX0KKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGRhdGEsIGxlbik7Cit9CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmN0cmxzID0gc2RfY3RybHMsCisJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgPSBzZF9jb25maWcsCisJLmluaXQgPSBzZF9pbml0LAorCS5zdGFydCA9IHNkX3N0YXJ0LAorCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorfTsKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA0NTgsIDB4NzAwNSl9LCAvKiBHZW5pdXMgU21hcnQgMzAwLCB2ZXJzaW9uIDIgKi8KKwkvKiBUaGUgR2VuaXVzIFNtYXJ0IGlzIHVudGVzdGVkLiBJIGNhbid0IGZpbmQgYW4gb3duZXIgISAqLworCS8qIHtVU0JfREVWSUNFKDB4MGM0NSwgMHg4MDAwKX0sIERDMzFWQywgRG9uJ3Qga25vdyB0aGlzIGNhbWVyYSAqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg4MDAxKX0sIC8qIFdpbGQgUGxhbmV0IGRpZ2l0YWwgc3B5IGNhbSAqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg4MDAzKX0sIC8qIFNldmVyYWwgc21hbGwgQ0lGIGNhbWVyYXMgKi8KKwkvKiB7VVNCX0RFVklDRSgweDBjNDUsIDB4ODAwNil9LCBVbmtub3duIFZHQSBjYW1lcmEgKi8KKwl7VVNCX0RFVklDRSgweDBjNDUsIDB4ODAwOCl9LCAvKiBNaW5pLVNob3R6IG1zLTM1MCAqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg4MDBhKX0sIC8qIFZpdmljYW0gMzM1MEIgKi8KKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCisJCQkgICAgICAgVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZ3NwY2FfZGlzY29ubmVjdCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IGdzcGNhX3N1c3BlbmQsCisJLnJlc3VtZSA9IGdzcGNhX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMDI4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZkMWQzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc245YzIwMjguaApAQCAtMCwwICsxLDUxIEBACisvKgorICogU045QzIwMjggY29tbW9uIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGVvZG9yZSBLaWxnb3JlIDxraWxnb3RhQGF1YnVybixlZHU+CisgKgorICogQmFzZWQgY2xvc2VseSB1cG9uIHRoZSBmaWxlIGdzcGNhL3BhY19jb21tb24uaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc245YzIwMjhfc29mX21hcmtlcls1XSA9CisJeyAweGZmLCAweGZmLCAweDAwLCAweGM0LCAweGM0IH07CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpzbjljMjAyOF9maW5kX3NvZihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkJCXVuc2lnbmVkIGNoYXIgKm0sIGludCBsZW4pCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBpOworCisJLyogU2VhcmNoIGZvciB0aGUgU09GIG1hcmtlciAoZml4ZWQgcGFydCkgaW4gdGhlIGhlYWRlciAqLworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAobVtpXSA9PSBzbjljMjAyOF9zb2ZfbWFya2VyW3NkLT5zb2ZfcmVhZF0pIHsKKwkJCXNkLT5zb2ZfcmVhZCsrOworCQkJaWYgKHNkLT5zb2ZfcmVhZCA9PSBzaXplb2Yoc245YzIwMjhfc29mX21hcmtlcikpIHsKKwkJCQlQREVCVUcoRF9GUkFNLAorCQkJCQkiU09GIGZvdW5kLCBieXRlcyB0byBhbmFseXplOiAldS4iCisJCQkJCSIgRnJhbWUgc3RhcnRzIGF0IGJ5dGUgIyV1IiwKKwkJCQkJbGVuLCBpICsgMSk7CisJCQkJc2QtPnNvZl9yZWFkID0gMDsKKwkJCQlyZXR1cm4gbSArIGkgKyAxOworCQkJfQorCQl9IGVsc2UgeworCQkJc2QtPnNvZl9yZWFkID0gMDsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zbjljMjB4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMHguYwppbmRleCAwY2ExYzA2Li40YTFiYzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NuOWMyMHguYwpAQCAtMTI5LDcgKzEyOSw3IEBACiBzdGF0aWMgaW50IHNkX3NldGF1dG9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHMzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRhdXRvZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBzMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogI2RlZmluZSBCUklHSFRORVNTX0lEWCAwCiAJICAgIHsKQEAgLTE1MDYsMzYgKzE1MDYsMzYgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJczMyIGh1ZV9jb29yZCwgaHVlX2luZGV4ID0gMTgwICsgc2QtPmh1ZTsKIAl1OCBjbWF0cml4WzIxXTsKLQltZW1zZXQoY21hdHJpeCwgMCwgMjEpOwogCisJbWVtc2V0KGNtYXRyaXgsIDAsIHNpemVvZiBjbWF0cml4KTsKIAljbWF0cml4WzJdID0gKHNkLT5jb250cmFzdCAqIDB4MjUgLyAweDEwMCkgKyAweDI2OwogCWNtYXRyaXhbMF0gPSAweDEzICsgKGNtYXRyaXhbMl0gLSAweDI2KSAqIDB4MTMgLyAweDI1OwogCWNtYXRyaXhbNF0gPSAweDA3ICsgKGNtYXRyaXhbMl0gLSAweDI2KSAqIDB4MDcgLyAweDI1OwogCWNtYXRyaXhbMThdID0gc2QtPmJyaWdodG5lc3MgLSAweDgwOwogCiAJaHVlX2Nvb3JkID0gKGhzdl9yZWRfeFtodWVfaW5kZXhdICogc2QtPnNhdHVyYXRpb24pID4+IDg7Ci0JY21hdHJpeFs2XSA9ICh1bnNpZ25lZCBjaGFyKShodWVfY29vcmQgJiAweGZmKTsKLQljbWF0cml4WzddID0gKHVuc2lnbmVkIGNoYXIpKChodWVfY29vcmQgPj4gOCkgJiAweDBmKTsKKwljbWF0cml4WzZdID0gaHVlX2Nvb3JkOworCWNtYXRyaXhbN10gPSAoaHVlX2Nvb3JkID4+IDgpICYgMHgwZjsKIAogCWh1ZV9jb29yZCA9IChoc3ZfcmVkX3lbaHVlX2luZGV4XSAqIHNkLT5zYXR1cmF0aW9uKSA+PiA4OwotCWNtYXRyaXhbOF0gPSAodW5zaWduZWQgY2hhcikoaHVlX2Nvb3JkICYgMHhmZik7Ci0JY21hdHJpeFs5XSA9ICh1bnNpZ25lZCBjaGFyKSgoaHVlX2Nvb3JkID4+IDgpICYgMHgwZik7CisJY21hdHJpeFs4XSA9IGh1ZV9jb29yZDsKKwljbWF0cml4WzldID0gKGh1ZV9jb29yZCA+PiA4KSAmIDB4MGY7CiAKIAlodWVfY29vcmQgPSAoaHN2X2dyZWVuX3hbaHVlX2luZGV4XSAqIHNkLT5zYXR1cmF0aW9uKSA+PiA4OwotCWNtYXRyaXhbMTBdID0gKHVuc2lnbmVkIGNoYXIpKGh1ZV9jb29yZCAmIDB4ZmYpOwotCWNtYXRyaXhbMTFdID0gKHVuc2lnbmVkIGNoYXIpKChodWVfY29vcmQgPj4gOCkgJiAweDBmKTsKKwljbWF0cml4WzEwXSA9IGh1ZV9jb29yZDsKKwljbWF0cml4WzExXSA9IChodWVfY29vcmQgPj4gOCkgJiAweDBmOwogCiAJaHVlX2Nvb3JkID0gKGhzdl9ncmVlbl95W2h1ZV9pbmRleF0gKiBzZC0+c2F0dXJhdGlvbikgPj4gODsKLQljbWF0cml4WzEyXSA9ICh1bnNpZ25lZCBjaGFyKShodWVfY29vcmQgJiAweGZmKTsKLQljbWF0cml4WzEzXSA9ICh1bnNpZ25lZCBjaGFyKSgoaHVlX2Nvb3JkID4+IDgpICYgMHgwZik7CisJY21hdHJpeFsxMl0gPSBodWVfY29vcmQ7CisJY21hdHJpeFsxM10gPSAoaHVlX2Nvb3JkID4+IDgpICYgMHgwZjsKIAogCWh1ZV9jb29yZCA9IChoc3ZfYmx1ZV94W2h1ZV9pbmRleF0gKiBzZC0+c2F0dXJhdGlvbikgPj4gODsKLQljbWF0cml4WzE0XSA9ICh1bnNpZ25lZCBjaGFyKShodWVfY29vcmQgJiAweGZmKTsKLQljbWF0cml4WzE1XSA9ICh1bnNpZ25lZCBjaGFyKSgoaHVlX2Nvb3JkID4+IDgpICYgMHgwZik7CisJY21hdHJpeFsxNF0gPSBodWVfY29vcmQ7CisJY21hdHJpeFsxNV0gPSAoaHVlX2Nvb3JkID4+IDgpICYgMHgwZjsKIAogCWh1ZV9jb29yZCA9IChoc3ZfYmx1ZV95W2h1ZV9pbmRleF0gKiBzZC0+c2F0dXJhdGlvbikgPj4gODsKLQljbWF0cml4WzE2XSA9ICh1bnNpZ25lZCBjaGFyKShodWVfY29vcmQgJiAweGZmKTsKLQljbWF0cml4WzE3XSA9ICh1bnNpZ25lZCBjaGFyKSgoaHVlX2Nvb3JkID4+IDgpICYgMHgwZik7CisJY21hdHJpeFsxNl0gPSBodWVfY29vcmQ7CisJY21hdHJpeFsxN10gPSAoaHVlX2Nvb3JkID4+IDgpICYgMHgwZjsKIAogCXJldHVybiByZWdfdyhnc3BjYV9kZXYsIDB4MTBlMSwgY21hdHJpeCwgMjEpOwogfQpAQCAtMjAxNSw2ICsyMDE1LDcgQEAKIAlkZWZhdWx0OgogCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CiAJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CisJCWJyZWFrOwogCX0KIAogCXNkLT5vbGRfc3RlcCA9IDA7CkBAIC0yMzE5LDcgKzIzMjAsNyBAQAogCQl9CiAJfQogCWlmIChhdmdfbHVtID4gTUFYX0FWR19MVU0pIHsKLQkJaWYgKHNkLT5nYWluID49IDEpIHsKKwkJaWYgKHNkLT5nYWluID4gMCkgewogCQkJc2QtPmdhaW4tLTsKIAkJCXNldF9nYWluKGdzcGNhX2Rldik7CiAJCX0KQEAgLTIzNDcsNyArMjM0OCw3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBhdmdfbHVtOwotCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGZyYW1lX2hlYWRlcltdID0KKwlzdGF0aWMgdTggZnJhbWVfaGVhZGVyW10gPQogCQl7MHhmZiwgMHhmZiwgMHgwMCwgMHhjNCwgMHhjNCwgMHg5Nn07CiAJaWYgKGxlbiA9PSA2NCAmJiBtZW1jbXAoZGF0YSwgZnJhbWVfaGVhZGVyLCA2KSA9PSAwKSB7CiAJCWF2Z19sdW0gPSAoKGRhdGFbMzVdID4+IDIpICYgMykgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKaW5kZXggZGRmZjJiNS4uNzg1ZWViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jCkBAIC00Miw2ICs0Miw3IEBACiAKICNkZWZpbmUgTU9EVUxFX05BTUUgInNvbml4YiIKIAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSAiZ3NwY2EuaCIKIAogTU9EVUxFX0FVVEhPUigiTWljaGVsIFhoYWFyZCA8bXhoYWFyZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Iik7CkBAIC01Myw5ICs1NCwxMSBAQAogCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAJYXRvbWljX3QgYXZnX2x1bTsKIAlpbnQgcHJldl9hdmdfbHVtOworCWludCBleHBfdG9vX2xvd19jbnQ7CisJaW50IGV4cF90b29faGlnaF9jbnQ7CiAKKwl1bnNpZ25lZCBzaG9ydCBleHBvc3VyZTsKIAl1bnNpZ25lZCBjaGFyIGdhaW47Ci0JdW5zaWduZWQgY2hhciBleHBvc3VyZTsKIAl1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7CiAJdW5zaWduZWQgY2hhciBhdXRvZ2FpbjsKIAl1bnNpZ25lZCBjaGFyIGF1dG9nYWluX2lnbm9yZV9mcmFtZXM7CkBAIC03Myw4ICs3Niw5IEBACiAjZGVmaW5lIFNFTlNPUl9PVjc2MzAgMgogI2RlZmluZSBTRU5TT1JfUEFTMTA2IDMKICNkZWZpbmUgU0VOU09SX1BBUzIwMiA0Ci0jZGVmaW5lIFNFTlNPUl9UQVM1MTEwIDUKLSNkZWZpbmUgU0VOU09SX1RBUzUxMzBDWFggNgorI2RlZmluZSBTRU5TT1JfVEFTNTExMEMgNQorI2RlZmluZSBTRU5TT1JfVEFTNTExMEQgNgorI2RlZmluZSBTRU5TT1JfVEFTNTEzMENYWCA3CiAJX191OCByZWcxMTsKIH07CiAKQEAgLTk1LDEzICs5OSwxNSBAQAogLyogc2Vuc29yX2RhdGEgZmxhZ3MgKi8KICNkZWZpbmUgRl9HQUlOIDB4MDEJCS8qIGhhcyBnYWluICovCiAjZGVmaW5lIEZfU0lGICAweDAyCQkvKiBzaWYgb3IgdmdhICovCisjZGVmaW5lIEZfQ09BUlNFX0VYUE8gMHgwNAkvKiBleHBvc3VyZSBjb250cm9sIGlzIGNvYXJzZSAqLwogCiAvKiBwcml2IGZpZWxkIG9mIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgZmxhZ3MgKGRvIG5vdCB1c2UgbG93IG5pYmJsZSEpICovCiAjZGVmaW5lIE1PREVfUkFXIDB4MTAJCS8qIHJhdyBiYXllciBtb2RlICovCiAjZGVmaW5lIE1PREVfUkVEVUNFRF9TSUYgMHgyMAkvKiB2Z2EgbW9kZSAoMzIweDI0MCAvIDE2MHgxMjApIG9uIHNpZiBjYW0gKi8KIAogLyogY3RybF9kaXMgaGVscGVyIG1hY3JvcyAqLwotI2RlZmluZSBOT19FWFBPICgoMSA8PCBFWFBPU1VSRV9JRFgpIHwgKDEgPDwgQVVUT0dBSU5fSURYKSkKKyNkZWZpbmUgTk9fRVhQTyAoKDEgPDwgRVhQT1NVUkVfSURYKSB8ICgxIDw8IENPQVJTRV9FWFBPU1VSRV9JRFgpIHwgXAorCQkgKDEgPDwgQVVUT0dBSU5fSURYKSkKICNkZWZpbmUgTk9fRlJFUSAoMSA8PCBGUkVRX0lEWCkKICNkZWZpbmUgTk9fQlJJR0hUTkVTUyAoMSA8PCBCUklHSFRORVNTX0lEWCkKIApAQCAtMTI3LDExICsxMzMsMTAgQEAKIH0KIAogLyogV2UgY2FsY3VsYXRlIHRoZSBhdXRvZ2FpbiBhdCB0aGUgZW5kIG9mIHRoZSB0cmFuc2ZlciBvZiBhIGZyYW1lLCBhdCB0aGlzCi0gICBtb21lbnQgYSBmcmFtZSB3aXRoIHRoZSBvbGQgc2V0dGluZ3MgaXMgYmVpbmcgdHJhbnNtaXR0ZWQsIGFuZCBhIGZyYW1lIGlzCi0gICBiZWluZyBjYXB0dXJlZCB3aXRoIHRoZSBvbGQgc2V0dGluZ3MuIFNvIGlmIHdlIGFkanVzdCB0aGUgYXV0b2dhaW4gd2UgbXVzdAotICAgaWdub3JlIGF0bGVhc3QgdGhlIDIgbmV4dCBmcmFtZXMgZm9yIHRoZSBuZXcgc2V0dGluZ3MgdG8gY29tZSBpbnRvIGVmZmVjdAotICAgYmVmb3JlIGRvaW5nIGFueSBvdGhlciBhZGp1c3RtZW50cyAqLwotI2RlZmluZSBBVVRPR0FJTl9JR05PUkVfRlJBTUVTIDMKKyAgIG1vbWVudCBhIGZyYW1lIHdpdGggdGhlIG9sZCBzZXR0aW5ncyBpcyBiZWluZyBjYXB0dXJlZCBhbmQgdHJhbnNtaXR0ZWQuIFNvCisgICBpZiB3ZSBhZGp1c3QgdGhlIGdhaW4gb3IgZXhwb3N1cmUgd2UgbXVzdCBpZ25vcmUgYXRsZWFzdCB0aGUgbmV4dCBmcmFtZSBmb3IKKyAgIHRoZSBuZXcgc2V0dGluZ3MgdG8gY29tZSBpbnRvIGVmZmVjdCBiZWZvcmUgZG9pbmcgYW55IG90aGVyIGFkanVzdG1lbnRzLiAqLworI2RlZmluZSBBVVRPR0FJTl9JR05PUkVfRlJBTUVTIDEKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKQEAgLTE0NSw3ICsxNTAsNyBAQAogc3RhdGljIGludCBzZF9zZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogI2RlZmluZSBCUklHSFRORVNTX0lEWCAwCiAJewogCSAgICB7CkBAIC0xNzEsNyArMTc2LDcgQEAKIAkJLm1heGltdW0gPSAyNTUsCiAJCS5zdGVwICAgID0gMSwKICNkZWZpbmUgR0FJTl9ERUYgMTI3Ci0jZGVmaW5lIEdBSU5fS05FRSAyMDAKKyNkZWZpbmUgR0FJTl9LTkVFIDIzMAogCQkuZGVmYXVsdF92YWx1ZSA9IEdBSU5fREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0Z2FpbiwKQEAgLTE4MywxMCArMTg4LDEwIEBACiAJCQkuaWQgPSBWNEwyX0NJRF9FWFBPU1VSRSwKIAkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJCS5uYW1lID0gIkV4cG9zdXJlIiwKLSNkZWZpbmUgRVhQT1NVUkVfREVGICAxNiAvKiAgMzIgbXMgLyAzMCBmcHMgKi8KLSNkZWZpbmUgRVhQT1NVUkVfS05FRSA1MCAvKiAxMDAgbXMgLyAxMCBmcHMgKi8KKyNkZWZpbmUgRVhQT1NVUkVfREVGICA2NiAvKiAgMzMgbXMgLyAzMCBmcHMgKGV4Y2VwdCBvbiBQQVNYWFgpICovCisjZGVmaW5lIEVYUE9TVVJFX0tORUUgMjAwIC8qIDEwMCBtcyAvIDEwIGZwcyAoZXhjZXB0IG9uIFBBU1hYWCkgKi8KIAkJCS5taW5pbXVtID0gMCwKLQkJCS5tYXhpbXVtID0gMjU1LAorCQkJLm1heGltdW0gPSAxMDIzLAogCQkJLnN0ZXAgPSAxLAogCQkJLmRlZmF1bHRfdmFsdWUgPSBFWFBPU1VSRV9ERUYsCiAJCQkuZmxhZ3MgPSAwLApAQCAtMTk0LDcgKzE5OSwyMyBAQAogCQkuc2V0ID0gc2Rfc2V0ZXhwb3N1cmUsCiAJCS5nZXQgPSBzZF9nZXRleHBvc3VyZSwKIAl9LAotI2RlZmluZSBBVVRPR0FJTl9JRFggMworI2RlZmluZSBDT0FSU0VfRVhQT1NVUkVfSURYIDMKKwl7CisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiRXhwb3N1cmUiLAorI2RlZmluZSBDT0FSU0VfRVhQT1NVUkVfREVGICAyIC8qIDMwIGZwcyAqLworCQkJLm1pbmltdW0gPSAyLAorCQkJLm1heGltdW0gPSAxNSwKKwkJCS5zdGVwID0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gQ09BUlNFX0VYUE9TVVJFX0RFRiwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCS5zZXQgPSBzZF9zZXRleHBvc3VyZSwKKwkJLmdldCA9IHNkX2dldGV4cG9zdXJlLAorCX0sCisjZGVmaW5lIEFVVE9HQUlOX0lEWCA0CiAJewogCQl7CiAJCQkuaWQgPSBWNEwyX0NJRF9BVVRPR0FJTiwKQEAgLTIxMCw3ICsyMzEsNyBAQAogCQkuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCiAJCS5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKIAl9LAotI2RlZmluZSBGUkVRX0lEWCA0CisjZGVmaW5lIEZSRVFfSURYIDUKIAl7CiAJCXsKIAkJCS5pZAkgPSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKQEAgLTIxOSw3ICsyNDAsNyBAQAogCQkJLm1pbmltdW0gPSAwLAogCQkJLm1heGltdW0gPSAyLAkvKiAwOiAwLCAxOiA1MEh6LCAyOjYwSHogKi8KIAkJCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgRlJFUV9ERUYgMQorI2RlZmluZSBGUkVRX0RFRiAwCiAJCQkuZGVmYXVsdF92YWx1ZSA9IEZSRVFfREVGLAogCQl9LAogCQkuc2V0ID0gc2Rfc2V0ZnJlcSwKQEAgLTM0NSw3ICszNjYsNyBAQAogfTsKIHN0YXRpYyBjb25zdCBfX3U4IGluaXRPdjc2MzBfM1tdID0gewogCTB4NDQsIDB4NDQsIDB4MDAsIDB4MWEsIDB4MjAsIDB4MjAsIDB4MjAsIDB4ODAsCS8qIHIwMSAuLiByMDggKi8KLQkweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAkvKiByMDkgLi4gcjEwICovCisJMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwJLyogcjA5IC4uIHIxMCAqLwogCTB4MDAsIDB4MDIsIDB4MDEsIDB4MGEsCQkJCS8qIHIxMSAuLiByMTQgKi8KIAkweDI4LCAweDFlLAkJCS8qIEggJiBWIHNpemVzICAgICByMTUgLi4gcjE2ICovCiAJMHg2OCwgMHg4ZiwgTUNLX0lOSVQxLAkJCQkvKiByMTcgLi4gcjE5ICovCkBAIC0zODcsNiArNDA4LDMwIEBACiAJMHgxOCwgMHgxMCwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwNwogfTsKIC8qIGNvbXByZXNzaW9uIDB4ODYgbWNraW5pdDEgMHgyYiAqLworCisvKiAiS25vd24iIFBBUzEwNkIgcmVnaXN0ZXJzOgorICAweDAyIGNsb2NrIGRpdmlkZXIKKyAgMHgwMyBWYXJpYWJsZSBmcmFtZXJhdGUgYml0cyA0LTExCisgIDB4MDQgVmFyIGZyYW1lcmF0ZSBiaXRzIDAtMywgb25lIG11c3QgbGVhdmUgdGhlIDQgbXNiJ3MgYXQgMCAhIQorICAgICAgIFRoZSB2YXJpYWJsZSBmcmFtZXJhdGUgY29udHJvbCBtdXN0IG5ldmVyIGJlIHNldCBsb3dlciB0aGVuIDMwMCwKKyAgICAgICB3aGljaCBzZXRzIHRoZSBmcmFtZXJhdGUgYXQgOTAgLyByZWcwMiwgb3RoZXJ3aXNlIHZzeW5jIGlzIGxvc3QuCisgIDB4MDUgU2h1dHRlciBUaW1lIExpbmUgT2Zmc2V0LCB0aGlzIGNhbiBiZSB1c2VkIGFzIGFuIGV4cG9zdXJlIGNvbnRyb2w6CisgICAgICAgMCA9IHVzZSBmdWxsIGZyYW1lIHRpbWUsIDI1NSA9IG5vIGV4cG9zdXJlIGF0IGFsbAorICAgICAgIE5vdGUgdGhpcyBtYXkgbmV2ZXIgYmUgbGFyZ2VyIHRoZW4gInZhci1mcmFtZXJhdGUgY29udHJvbCIgLyAyIC0gMi4KKyAgICAgICBXaGVuIHZhci1mcmFtZXJhdGUgY29udHJvbCBpcyA8IDUxNCwgbm8gZXhwb3N1cmUgaXMgcmVhY2hlZCBhdCB0aGUgbWF4CisgICAgICAgYWxsb3dlZCB2YWx1ZSBmb3IgdGhlIGZyYW1lcmF0ZSBjb250cm9sIHZhbHVlLCByYXRoZXIgdGhlbiBhdCAyNTUuCisgIDB4MDYgU2h1dHRlciBUaW1lIFBpeGVsIE9mZnNldCwgbGlrZSByZWcwNSB0aGlzIGluZmx1ZW5jZXMgZXhwb3N1cmUsIGJ1dAorICAgICAgIG9ubHkgYSB2ZXJ5IGxpdHRsZSBiaXQsIGxlYXZlIGF0IDB4Y2QKKyAgMHgwNyBvZmZzZXQgc2lnbiBiaXQgKGJpdDAgMSA+IG5lZ2F0aXZlIG9mZnNldCkKKyAgMHgwOCBvZmZzZXQKKyAgMHgwOSBCbHVlIEdhaW4KKyAgMHgwYSBHcmVlbjEgR2FpbgorICAweDBiIEdyZWVuMiBHYWluCisgIDB4MGMgUmVkIEdhaW4KKyAgMHgwZSBHbG9iYWwgZ2FpbgorICAweDEzIFdyaXRlIDEgdG8gY29tbWl0IHNldHRpbmdzIHRvIHNlbnNvcgorKi8KKwogc3RhdGljIGNvbnN0IF9fdTggcGFzMTA2X3NlbnNvcl9pbml0W11bOF0gPSB7CiAJLyogUGl4ZWwgQ2xvY2sgRGl2aWRlciA2ICovCiAJeyAweGExLCAweDQwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDE0IH0sCkBAIC00MzMsMzcgKzQ3OCw1NSBAQAogCTB4NDQsIDB4NDQsIDB4MjEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHgwMCwKIAkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAzLCAweDBhLAotCTB4MjgsIDB4MWUsIDB4MjgsIDB4ODksIDB4MjAsCisJMHgyOCwgMHgxZSwgMHgyMCwgMHg4OSwgMHgyMCwKIAkweDAwLCAweDAwLCAweDAyLCAweDAzLCAweDBmLCAweDBjCiB9OworCisvKiAiS25vd24iIFBBUzIwMkJDQiByZWdpc3RlcnM6CisgIDB4MDIgY2xvY2sgZGl2aWRlcgorICAweDA0IFZhcmlhYmxlIGZyYW1lcmF0ZSBiaXRzIDYtMTEgKCopCisgIDB4MDUgVmFyIGZyYW1lcmF0ZSAgYml0cyAwLTUsIG9uZSBtdXN0IGxlYXZlIHRoZSAyIG1zYidzIGF0IDAgISEKKyAgMHgwNyBCbHVlIEdhaW4KKyAgMHgwOCBHcmVlbiBHYWluCisgIDB4MDkgUmVkIEdhaW4KKyAgMHgwYiBvZmZzZXQgc2lnbiBiaXQgKGJpdDAgMSA+IG5lZ2F0aXZlIG9mZnNldCkKKyAgMHgwYyBvZmZzZXQKKyAgMHgwZSBVbmtub3duIGltYWdlIGlzIHNsaWdodGx5IGJyaWdodGVyIHdoZW4gYml0IDAgaXMgMCwgaWYgcmVnMGYgaXMgMCB0b28sCisgICAgICAgbGVhdmUgYXQgMSBvdGhlcndpc2Ugd2UgZ2V0IGEganVtcCBpbiBvdXIgZXhwb3N1cmUgY29udHJvbAorICAweDBmIEV4cG9zdXJlIDAtMjU1LCAwID0gdXNlIGZ1bGwgZnJhbWUgdGltZSwgMjU1ID0gbm8gZXhwb3N1cmUgYXQgYWxsCisgIDB4MTAgTWFzdGVyIGdhaW4gMCAtIDMxCisgIDB4MTEgd3JpdGUgMSB0byBhcHBseSBjaGFuZ2VzCisgICgqKSBUaGUgdmFyaWFibGUgZnJhbWVyYXRlIGNvbnRyb2wgbXVzdCBuZXZlciBiZSBzZXQgbG93ZXIgdGhlbiA1MDAKKyAgICAgIHdoaWNoIHNldHMgdGhlIGZyYW1lcmF0ZSBhdCAzMCAvIHJlZzAyLCBvdGhlcndpc2UgdnN5bmMgaXMgbG9zdC4KKyovCiBzdGF0aWMgY29uc3QgX191OCBwYXMyMDJfc2Vuc29yX2luaXRbXVs4XSA9IHsKLQl7MHhhMCwgMHg0MCwgMHgwMiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJLyogU2V0IHRoZSBjbG9jayBkaXZpZGVyIHRvIDQgLT4gMzAgLyA0ID0gNy41IGZwcywgd2Ugd291bGQgbGlrZQorCSAgIHRvIHNldCBpdCBsb3dlciwgYnV0IGZvciBzb21lIHJlYXNvbiB0aGUgYnJpZGdlIHN0YXJ0cyBtaXNzaW5nCisJICAgdnN5bmMncyB0aGVuICovCisJezB4YTAsIDB4NDAsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXsweGQwLCAweDQwLCAweDA0LCAweDA3LCAweDM0LCAweDAwLCAweDA5LCAweDEwfSwKIAl7MHhkMCwgMHg0MCwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMH0sCi0JezB4ZDAsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzIsIDB4MTB9LAorCXsweGQwLCAweDQwLCAweDBDLCAweDAwLCAweDBDLCAweDAxLCAweDMyLCAweDEwfSwKIAl7MHhkMCwgMHg0MCwgMHgxMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHgxMH0sCiAJezB4YTAsIDB4NDAsIDB4MTUsIDB4NzAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MTB9LAogCXsweGEwLCAweDQwLCAweDE4LCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweDEwfSwKIAl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgwMSwgMHgwMCwgMHg2MywgMHgxMH0sCiAJezB4YTAsIDB4NDAsIDB4MDMsIDB4NTYsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MTB9LAogCXsweGEwLCAweDQwLCAweDExLCAweDAxLCAweDAxLCAweDAwLCAweDYzLCAweDEwfSwKLQl7MHhiMCwgMHg0MCwgMHgwNCwgMHgwNywgMHgyYSwgMHgwMCwgMHg2MywgMHgxMH0sCi0JezB4YjAsIDB4NDAsIDB4MGUsIDB4MDAsIDB4M2QsIDB4MDAsIDB4NjMsIDB4MTB9LAotCi0JezB4YTAsIDB4NDAsIDB4MTEsIDB4MDEsIDB4M2QsIDB4MDAsIDB4NjMsIDB4MTZ9LAotCXsweGEwLCAweDQwLCAweDEwLCAweDA4LCAweDNkLCAweDAwLCAweDYzLCAweDE1fSwKLQl7MHhhMCwgMHg0MCwgMHgwMiwgMHgwNCwgMHgzZCwgMHgwMCwgMHg2MywgMHgxNn0sCi0JezB4YTAsIDB4NDAsIDB4MTEsIDB4MDEsIDB4M2QsIDB4MDAsIDB4NjMsIDB4MTZ9LAotCXsweGIwLCAweDQwLCAweDBlLCAweDAwLCAweDMxLCAweDAwLCAweDYzLCAweDE2fSwKLQl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgzMSwgMHgwMCwgMHg2MywgMHgxNn0sCi0JezB4YTAsIDB4NDAsIDB4MTAsIDB4MGUsIDB4MzEsIDB4MDAsIDB4NjMsIDB4MTV9LAotCXsweGEwLCAweDQwLCAweDExLCAweDAxLCAweDMxLCAweDAwLCAweDYzLCAweDE2fSwKIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IGluaXRUYXM1MTEwW10gPSB7CitzdGF0aWMgY29uc3QgX191OCBpbml0VGFzNTExMGNbXSA9IHsKIAkweDQ0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDExLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMSwgMHgwMCwgMHg0NSwgMHgwOSwgMHgwYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDA5LCAweDBhLAorCTB4MTYsIDB4MTIsIDB4NjAsIDB4ODYsIDB4MmIsCisJMHgxNCwgMHgwYSwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwNworfTsKKy8qIFNhbWUgYXMgYWJvdmUsIGV4Y2VwdCBhIGRpZmZlcmVudCBoc3RhcnQgKi8KK3N0YXRpYyBjb25zdCBfX3U4IGluaXRUYXM1MTEwZFtdID0geworCTB4NDQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA5LCAweDBhLAogCTB4MTYsIDB4MTIsIDB4NjAsIDB4ODYsIDB4MmIsCiAJMHgxNCwgMHgwYSwgMHgwMiwgMHgwMiwgMHgwOSwgMHgwNwogfTsKQEAgLTQ3Niw3ICs1MzksNyBAQAogc3RhdGljIGNvbnN0IF9fdTggaW5pdFRhczUxMzBbXSA9IHsKIAkweDA0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDExLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwYywgMHgwYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBjLCAweDBhLAogCTB4MjgsIDB4MWUsIDB4NjAsIENPTVAsIE1DS19JTklULAogCTB4MTgsIDB4MTAsIDB4MDQsIDB4MDMsIDB4MTEsIDB4MGMKIH07CkBAIC00OTMsMTIgKzU1NiwxNCBAQAogU0VOUyhpbml0T3Y2NjUwLCBOVUxMLCBvdjY2NTBfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfR0FJTnxGX1NJRiwgMCwgMHg2MCksCiBTRU5TKGluaXRPdjc2MzAsIGluaXRPdjc2MzBfMywgb3Y3NjMwX3NlbnNvcl9pbml0LCBOVUxMLCBvdjc2MzBfc2Vuc29yX2luaXRfMywKIAlGX0dBSU4sIDAsIDB4MjEpLAotU0VOUyhpbml0UGFzMTA2LCBOVUxMLCBwYXMxMDZfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfU0lGLCBOT19FWFBPfE5PX0ZSRVEsCitTRU5TKGluaXRQYXMxMDYsIE5VTEwsIHBhczEwNl9zZW5zb3JfaW5pdCwgTlVMTCwgTlVMTCwgRl9HQUlOfEZfU0lGLCBOT19GUkVRLAogCTApLAotU0VOUyhpbml0UGFzMjAyLCBpbml0UGFzMjAyLCBwYXMyMDJfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIDAsCi0JTk9fRVhQT3xOT19GUkVRLCAwKSwKLVNFTlMoaW5pdFRhczUxMTAsIE5VTEwsIHRhczUxMTBfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfR0FJTnxGX1NJRiwKLQlOT19CUklHSFRORVNTfE5PX0ZSRVEsIDApLAorU0VOUyhpbml0UGFzMjAyLCBpbml0UGFzMjAyLCBwYXMyMDJfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfR0FJTiwKKwlOT19GUkVRLCAwKSwKK1NFTlMoaW5pdFRhczUxMTBjLCBOVUxMLCB0YXM1MTEwX3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLAorCUZfR0FJTnxGX1NJRnxGX0NPQVJTRV9FWFBPLCBOT19CUklHSFRORVNTfE5PX0ZSRVEsIDApLAorU0VOUyhpbml0VGFzNTExMGQsIE5VTEwsIHRhczUxMTBfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsCisJRl9HQUlOfEZfU0lGfEZfQ09BUlNFX0VYUE8sIE5PX0JSSUdIVE5FU1N8Tk9fRlJFUSwgMCksCiBTRU5TKGluaXRUYXM1MTMwLCBOVUxMLCB0YXM1MTMwX3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLCAwLCBOT19FWFBPfE5PX0ZSRVEsCiAJMCksCiB9OwpAQCAtNTg3LDQyICs2NTIsMjggQEAKIAkJCWdvdG8gZXJyOwogCQlicmVhazsKIAkgICAgfQotCWNhc2UgU0VOU09SX1BBUzEwNjogewotCQlfX3U4IGkyYzFbXSA9Ci0JCQl7MHhhMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNH07Ci0KLQkJaTJjMVszXSA9IHNkLT5icmlnaHRuZXNzID4+IDM7Ci0JCWkyYzFbMl0gPSAweDBlOwotCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmMxKSA8IDApCi0JCQlnb3RvIGVycjsKLQkJaTJjMVszXSA9IDB4MDE7Ci0JCWkyYzFbMl0gPSAweDEzOwotCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmMxKSA8IDApCi0JCQlnb3RvIGVycjsKLQkJYnJlYWs7Ci0JICAgIH0KKwljYXNlIFNFTlNPUl9QQVMxMDY6CiAJY2FzZSBTRU5TT1JfUEFTMjAyOiB7Ci0JCS8qIF9fdTggaTJjcGV4cG8xW10gPQotCQkJezB4YjAsIDB4NDAsIDB4MDQsIDB4MDcsIDB4MmEsIDB4MDAsIDB4NjMsIDB4MTZ9OyAqLwotCQlfX3U4IGkyY3BleHBvW10gPQotCQkJezB4YjAsIDB4NDAsIDB4MGUsIDB4MDEsIDB4YWIsIDB4MDAsIDB4NjMsIDB4MTZ9OwotCQlfX3U4IGkyY3AyMDJbXSA9Ci0JCQl7MHhhMCwgMHg0MCwgMHgxMCwgMHgwZSwgMHgzMSwgMHgwMCwgMHg2MywgMHgxNX07Ci0JCXN0YXRpYyBfX3U4IGkyY3Bkb2l0W10gPQotCQkJezB4YTAsIDB4NDAsIDB4MTEsIDB4MDEsIDB4MzEsIDB4MDAsIDB4NjMsIDB4MTZ9OworCQlfX3U4IGkyY3BicmlnaHRbXSA9CisJCQl7MHhiMCwgMHg0MCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn07CisJCV9fdTggaTJjcGRvaXRbXSA9CisJCQl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn07CiAKLQkJLyogY2hhbmdlIHJlZyAweDEwICovCi0JCWkyY3BleHBvWzRdID0gMHhmZiAtIHNkLT5icmlnaHRuZXNzOwotLyoJCWlmKGkyY193KGdzcGNhX2RldixpMmNwZXhwbzEpIDwgMCkKLQkJCWdvdG8gZXJyOyAqLwotLyoJCWlmKGkyY193KGdzcGNhX2RldixpMmNwZG9pdCkgPCAwKQotCQkJZ290byBlcnI7ICovCi0JCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3BleHBvKSA8IDApCi0JCQlnb3RvIGVycjsKLQkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGRvaXQpIDwgMCkKLQkJCWdvdG8gZXJyOwotCQlpMmNwMjAyWzNdID0gc2QtPmJyaWdodG5lc3MgPj4gMzsKLQkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcDIwMikgPCAwKQorCQkvKiBQQVMxMDYgdXNlcyByZWcgNyBhbmQgOCBpbnN0ZWFkIG9mIGIgYW5kIGMgKi8KKwkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1BBUzEwNikgeworCQkJaTJjcGJyaWdodFsyXSA9IDc7CisJCQlpMmNwZG9pdFsyXSA9IDB4MTM7CisJCX0KKworCQlpZiAoc2QtPmJyaWdodG5lc3MgPCAxMjcpIHsKKwkJCS8qIGNoYW5nZSByZWcgMHgwYiwgc2lnbnJlZyAqLworCQkJaTJjcGJyaWdodFszXSA9IDB4MDE7CisJCQkvKiBzZXQgcmVnIDB4MGMsIG9mZnNldCAqLworCQkJaTJjcGJyaWdodFs0XSA9IDEyNyAtIHNkLT5icmlnaHRuZXNzOworCQl9IGVsc2UKKwkJCWkyY3BicmlnaHRbNF0gPSBzZC0+YnJpZ2h0bmVzcyAtIDEyNzsKKworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmNwYnJpZ2h0KSA8IDApCiAJCQlnb3RvIGVycjsKIAkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGRvaXQpIDwgMCkKIAkJCWdvdG8gZXJyOwpAQCAtNjUyLDcgKzcwMyw4IEBACiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAotCWNhc2UgU0VOU09SX1RBUzUxMTA6IHsKKwljYXNlIFNFTlNPUl9UQVM1MTEwQzoKKwljYXNlIFNFTlNPUl9UQVM1MTEwRDogewogCQlfX3U4IGkyY1tdID0KIAkJCXsweDMwLCAweDExLCAweDAyLCAweDIwLCAweDcwLCAweDAwLCAweDAwLCAweDEwfTsKIApAQCAtNjc0LDYgKzcyNiwzNyBAQAogCQkJZ290byBlcnI7CiAJCWJyZWFrOwogCSAgICB9CisJY2FzZSBTRU5TT1JfUEFTMTA2OgorCWNhc2UgU0VOU09SX1BBUzIwMjogeworCQlfX3U4IGkyY3BnYWluW10gPQorCQkJezB4YTAsIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTV9OworCQlfX3U4IGkyY3Bjb2xvcmdhaW5bXSA9CisJCQl7MHhjMCwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNX07CisJCV9fdTggaTJjcGRvaXRbXSA9CisJCQl7MHhhMCwgMHg0MCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNn07CisKKwkJLyogUEFTMTA2IHVzZXMgZGlmZmVyZW50IHJlZ3MgKGFuZCBoYXMgc3BsaXQgZ3JlZW4gZ2FpbnMpICovCisJCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9QQVMxMDYpIHsKKwkJCWkyY3BnYWluWzJdID0gMHgwZTsKKwkJCWkyY3Bjb2xvcmdhaW5bMF0gPSAweGQwOworCQkJaTJjcGNvbG9yZ2FpblsyXSA9IDB4MDk7CisJCQlpMmNwZG9pdFsyXSA9IDB4MTM7CisJCX0KKworCQlpMmNwZ2FpblszXSA9IHNkLT5nYWluID4+IDM7CisJCWkyY3Bjb2xvcmdhaW5bM10gPSBzZC0+Z2FpbiA+PiA0OworCQlpMmNwY29sb3JnYWluWzRdID0gc2QtPmdhaW4gPj4gNDsKKwkJaTJjcGNvbG9yZ2Fpbls1XSA9IHNkLT5nYWluID4+IDQ7CisJCWkyY3Bjb2xvcmdhaW5bNl0gPSBzZC0+Z2FpbiA+PiA0OworCisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3BnYWluKSA8IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGNvbG9yZ2FpbikgPCAwKQorCQkJZ290byBlcnI7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3Bkb2l0KSA8IDApCisJCQlnb3RvIGVycjsKKwkJYnJlYWs7CisJICAgIH0KIAl9CiAJcmV0dXJuOwogZXJyOgpAQCAtNjg0LDE5ICs3NjcsMjEgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJX191OCBnYWluOwotCV9fdTggcmdiX3ZhbHVlOworCV9fdTggYnVmWzJdID0geyAwLCAwIH07CisKKwlpZiAoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX0dBSU4pIHsKKwkJLyogVXNlIHRoZSBzZW5zb3IgZ2FpbiB0byBkbyB0aGUgYWN0dWFsIGdhaW4gKi8KKwkJc2V0c2Vuc29yZ2Fpbihnc3BjYV9kZXYpOworCQlyZXR1cm47CisJfQogCiAJZ2FpbiA9IHNkLT5nYWluID4+IDQ7CiAKIAkvKiByZWQgYW5kIGJsdWUgZ2FpbiAqLwotCXJnYl92YWx1ZSA9IGdhaW4gPDwgNCB8IGdhaW47Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDEwLCAmcmdiX3ZhbHVlLCAxKTsKKwlidWZbMF0gPSBnYWluIDw8IDQgfCBnYWluOwogCS8qIGdyZWVuIGdhaW4gKi8KLQlyZ2JfdmFsdWUgPSBnYWluOwotCXJlZ193KGdzcGNhX2RldiwgMHgxMSwgJnJnYl92YWx1ZSwgMSk7Ci0KLQlpZiAoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX0dBSU4pCi0JCXNldHNlbnNvcmdhaW4oZ3NwY2FfZGV2KTsKKwlidWZbMV0gPSBnYWluOworCXJlZ193KGdzcGNhX2RldiwgMHgxMCwgYnVmLCAyKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtNzA0LDE3ICs3ODksMTIgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKLQljYXNlIFNFTlNPUl9UQVM1MTEwOiB7Ci0JCV9fdTggcmVnOwotCisJY2FzZSBTRU5TT1JfVEFTNTExMEM6CisJY2FzZSBTRU5TT1JfVEFTNTExMEQ6IHsKIAkJLyogcmVnaXN0ZXIgMTkncyBoaWdoIG5pYmJsZSBjb250YWlucyB0aGUgc245YzEweCBjbG9jayBkaXZpZGVyCiAJCSAgIFRoZSBoaWdoIG5pYmJsZSBjb25maWd1cmVzIHRoZSBubyBmcHMgYWNjb3JkaW5nIHRvIHRoZQogCQkgICBmb3JtdWxhOiA2MCAvIGhpZ2hfbmliYmxlLiBXaXRoIGEgbWF4aW11bSBvZiAzMCBmcHMgKi8KLQkJcmVnID0gMTIwICogc2QtPmV4cG9zdXJlIC8gMTAwMDsKLQkJaWYgKHJlZyA8IDIpCi0JCQlyZWcgPSAyOwotCQllbHNlIGlmIChyZWcgPiAxNSkKLQkJCXJlZyA9IDE1OworCQlfX3U4IHJlZyA9IHNkLT5leHBvc3VyZTsKIAkJcmVnID0gKHJlZyA8PCA0KSB8IDB4MGI7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgxOSwgJnJlZywgMSk7CiAJCWJyZWFrOwpAQCAtNzUwLDIwICs4MzAsMjEgQEAKIAkJfSBlbHNlCiAJCQlyZWcxMF9tYXggPSAweDQxOwogCi0JCXJlZzExID0gKDYwICogc2QtPmV4cG9zdXJlICsgOTk5KSAvIDEwMDA7CisJCXJlZzExID0gKDE1ICogc2QtPmV4cG9zdXJlICsgOTk5KSAvIDEwMDA7CiAJCWlmIChyZWcxMSA8IDEpCiAJCQlyZWcxMSA9IDE7CiAJCWVsc2UgaWYgKHJlZzExID4gMTYpCiAJCQlyZWcxMSA9IDE2OwogCi0JCS8qIEluIDY0MHg0ODAsIGlmIHRoZSByZWcxMSBoYXMgbGVzcyB0aGFuIDMsIHRoZSBpbWFnZSBpcwotCQkgICB1bnN0YWJsZSAobm90IGVub3VnaCBiYW5kd2lkdGgpLiAqLwotCQlpZiAoZ3NwY2FfZGV2LT53aWR0aCA9PSA2NDAgJiYgcmVnMTEgPCAzKQotCQkJcmVnMTEgPSAzOworCQkvKiBJbiA2NDB4NDgwLCBpZiB0aGUgcmVnMTEgaGFzIGxlc3MgdGhhbiA0LCB0aGUgaW1hZ2UgaXMKKwkJICAgdW5zdGFibGUgKHRoZSBicmlkZ2UgZ29lcyBpbnRvIGEgaGlnaGVyIGNvbXByZXNzaW9uIG1vZGUKKwkJICAgd2hpY2ggd2UgaGF2ZSBub3QgcmV2ZXJzZSBlbmdpbmVlcmVkIHlldCkuICovCisJCWlmIChnc3BjYV9kZXYtPndpZHRoID09IDY0MCAmJiByZWcxMSA8IDQpCisJCQlyZWcxMSA9IDQ7CiAKIAkJLyogZnJhbWUgZXhwb3N1cmUgdGltZSBpbiBtcyA9IDEwMDAgKiByZWcxMSAvIDMwICAgIC0+Ci0JCXJlZzEwID0gc2QtPmV4cG9zdXJlICogMiAqIHJlZzEwX21heCAvICgxMDAwICogcmVnMTEgLyAzMCkgKi8KLQkJcmVnMTAgPSAoc2QtPmV4cG9zdXJlICogNjAgKiByZWcxMF9tYXgpIC8gKDEwMDAgKiByZWcxMSk7CisJCXJlZzEwID0gKHNkLT5leHBvc3VyZSAvIDIpICogcmVnMTBfbWF4IC8gKDEwMDAgKiByZWcxMSAvIDMwKSAqLworCQlyZWcxMCA9IChzZC0+ZXhwb3N1cmUgKiAxNSAqIHJlZzEwX21heCkgLyAoMTAwMCAqIHJlZzExKTsKIAogCQkvKiBEb24ndCBhbGxvdyB0aGlzIHRvIGdldCBiZWxvdyAxMCB3aGVuIHVzaW5nIGF1dG9nYWluLCB0aGUKIAkJICAgc3RlcHMgYmVjb21lIHZlcnkgbGFyZ2UgKHJlbGF0aXZlbHkpIHdoZW4gYmVsb3cgMTAgY2F1c2luZwpAQCAtNzg2LDEwICs4NjcsODUgQEAKIAkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjKSA9PSAwKQogCQkJc2QtPnJlZzExID0gcmVnMTE7CiAJCWVsc2UKLQkJCVBERUJVRyhEX0VSUiwgImkyYyBlcnJvciBleHBvc3VyZSIpOworCQkJZ290byBlcnI7CisJCWJyZWFrOworCSAgICB9CisJY2FzZSBTRU5TT1JfUEFTMjAyOiB7CisJCV9fdTggaTJjcGZyYW1lcmF0ZVtdID0KKwkJCXsweGIwLCAweDQwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2fTsKKwkJX191OCBpMmNwZXhwb1tdID0KKwkJCXsweGEwLCAweDQwLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2fTsKKwkJY29uc3QgX191OCBpMmNwZG9pdFtdID0KKwkJCXsweGEwLCAweDQwLCAweDExLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE2fTsKKwkJaW50IGZyYW1lcmF0ZV9jdHJsOworCisJCS8qIFRoZSBleHBvc3VyZSBrbmVlIGZvciB0aGUgYXV0b2dhaW4gYWxnb3JpdGhtIGlzIDIwMAorCQkgICAoMTAwIG1zIC8gMTAgZnBzIG9uIG90aGVyIHNlbnNvcnMpLCBmb3IgdmFsdWVzIGJlbG93IHRoaXMKKwkJICAgdXNlIHRoZSBjb250cm9sIGZvciBzZXR0aW5nIHRoZSBwYXJ0aWFsIGZyYW1lIGV4cG9zZSB0aW1lLAorCQkgICBhYm92ZSB0aGF0IHVzZSB2YXJpYWJsZSBmcmFtZXJhdGUuIFRoaXMgd2F5IHdlIHJ1biBhdCBtYXgKKwkJICAgZnJhbWVyYXRlICg2NDB4NDgwQDcuNSBmcHMsIDMyMHgyNDBAMTBmcHMpIHVudGlsIHRoZSBrbmVlCisJCSAgIGlzIHJlYWNoZWQuIFVzaW5nIHRoZSB2YXJpYWJsZSBmcmFtZXJhdGUgY29udHJvbCBhYm92ZSAyMDAKKwkJICAgaXMgYmV0dGVyIHRoZW4gcGxheWluZyBhcm91bmQgd2l0aCBib3RoIGNsb2NrZGl2ICsgcGFydGlhbAorCQkgICBmcmFtZSBleHBvc3VyZSB0aW1lcyAobGlrZSB3ZSBhcmUgZG9pbmcgd2l0aCB0aGUgb3YgY2hpcHMpLAorCQkgICBhcyB0aGF0IHNvbWV0aW1lcyBsZWFkcyB0byBqdW1wcyBpbiB0aGUgZXhwb3N1cmUgY29udHJvbCwKKwkJICAgd2hpY2ggYXJlIGJhZCBmb3IgYXV0byBleHBvc3VyZS4gKi8KKwkJaWYgKHNkLT5leHBvc3VyZSA8IDIwMCkgeworCQkJaTJjcGV4cG9bM10gPSAyNTUgLSAoc2QtPmV4cG9zdXJlICogMjU1KSAvIDIwMDsKKwkJCWZyYW1lcmF0ZV9jdHJsID0gNTAwOworCQl9IGVsc2UgeworCQkJLyogVGhlIFBBUzIwMidzIGV4cG9zdXJlIGNvbnRyb2wgZ29lcyBmcm9tIDAgLSA0MDk1LAorCQkJICAgYnV0IGFueXRoaW5nIGJlbG93IDUwMCBjYXVzZXMgdnN5bmMgaXNzdWVzLCBzbyBzY2FsZQorCQkJICAgb3VyIDIwMC0xMDIzIHRvIDUwMC00MDk1ICovCisJCQlmcmFtZXJhdGVfY3RybCA9IChzZC0+ZXhwb3N1cmUgLSAyMDApICogMTAwMCAvIDIyOSArCisJCQkJCSA1MDA7CisJCX0KKworCQlpMmNwZnJhbWVyYXRlWzNdID0gZnJhbWVyYXRlX2N0cmwgPj4gNjsKKwkJaTJjcGZyYW1lcmF0ZVs0XSA9IGZyYW1lcmF0ZV9jdHJsICYgMHgzZjsKKwkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGZyYW1lcmF0ZSkgPCAwKQorCQkJZ290byBlcnI7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3BleHBvKSA8IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKGkyY193KGdzcGNhX2RldiwgaTJjcGRvaXQpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlicmVhazsKKwkgICAgfQorCWNhc2UgU0VOU09SX1BBUzEwNjogeworCQlfX3U4IGkyY3BmcmFtZXJhdGVbXSA9CisJCQl7MHhiMSwgMHg0MCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNH07CisJCV9fdTggaTJjcGV4cG9bXSA9CisJCQl7MHhhMSwgMHg0MCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNH07CisJCWNvbnN0IF9fdTggaTJjcGRvaXRbXSA9CisJCQl7MHhhMSwgMHg0MCwgMHgxMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNH07CisJCWludCBmcmFtZXJhdGVfY3RybDsKKworCQkvKiBGb3IgdmFsdWVzIGJlbG93IDE1MCB1c2UgcGFydGlhbCBmcmFtZSBleHBvc3VyZSwgYWJvdmUKKwkJICAgdGhhdCB1c2UgZnJhbWVyYXRlIGN0cmwgKi8KKwkJaWYgKHNkLT5leHBvc3VyZSA8IDE1MCkgeworCQkJaTJjcGV4cG9bM10gPSAxNTAgLSBzZC0+ZXhwb3N1cmU7CisJCQlmcmFtZXJhdGVfY3RybCA9IDMwMDsKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBQQVMxMDYncyBleHBvc3VyZSBjb250cm9sIGdvZXMgZnJvbSAwIC0gNDA5NSwKKwkJCSAgIGJ1dCBhbnl0aGluZyBiZWxvdyAzMDAgY2F1c2VzIHZzeW5jIGlzc3Vlcywgc28gc2NhbGUKKwkJCSAgIG91ciAxNTAtMTAyMyB0byAzMDAtNDA5NSAqLworCQkJZnJhbWVyYXRlX2N0cmwgPSAoc2QtPmV4cG9zdXJlIC0gMTUwKSAqIDEwMDAgLyAyMzAgKworCQkJCQkgMzAwOworCQl9CisKKwkJaTJjcGZyYW1lcmF0ZVszXSA9IGZyYW1lcmF0ZV9jdHJsID4+IDQ7CisJCWkyY3BmcmFtZXJhdGVbNF0gPSBmcmFtZXJhdGVfY3RybCAmIDB4MGY7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3BmcmFtZXJhdGUpIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoaTJjX3coZ3NwY2FfZGV2LCBpMmNwZXhwbykgPCAwKQorCQkJZ290byBlcnI7CisJCWlmIChpMmNfdyhnc3BjYV9kZXYsIGkyY3Bkb2l0KSA8IDApCisJCQlnb3RvIGVycjsKIAkJYnJlYWs7CiAJICAgIH0KIAl9CisJcmV0dXJuOworZXJyOgorCVBERUJVRyhEX0VSUiwgImkyYyBlcnJvciBleHBvc3VyZSIpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTgyMywzMCArOTc5LDQzIEBACiAJfQogfQogCisjaW5jbHVkZSAiY29hcnNlX2V4cG9fYXV0b2dhaW4uaCIKKwogc3RhdGljIHZvaWQgZG9fYXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCWludCBkZWFkem9uZSwgZGVzaXJlZF9hdmdfbHVtOworCWludCBkZWFkem9uZSwgZGVzaXJlZF9hdmdfbHVtLCByZXN1bHQ7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBhdmdfbHVtID0gYXRvbWljX3JlYWQoJnNkLT5hdmdfbHVtKTsKIAotCWlmIChhdmdfbHVtID09IC0xKQorCWlmIChhdmdfbHVtID09IC0xIHx8ICFzZC0+YXV0b2dhaW4pCiAJCXJldHVybjsKIAorCWlmIChzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcyA+IDApIHsKKwkJc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMtLTsKKwkJcmV0dXJuOworCX0KKwogCS8qIFNJRiAvIFZHQSBzZW5zb3JzIGhhdmUgYSBkaWZmZXJlbnQgYXV0b2V4cG9zdXJlIGFyZWEgYW5kIHRodXMKIAkgICBkaWZmZXJlbnQgYXZnX2x1bSB2YWx1ZXMgZm9yIHRoZSBzYW1lIHBpY3R1cmUgYnJpZ2h0bmVzcyAqLwogCWlmIChzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5mbGFncyAmIEZfU0lGKSB7Ci0JCWRlYWR6b25lID0gMTAwMDsKLQkJZGVzaXJlZF9hdmdfbHVtID0gNzAwMDsKKwkJZGVhZHpvbmUgPSA1MDA7CisJCS8qIFNJRiBzZW5zb3JzIHRlbmQgdG8gb3ZlcmV4cG9zZSwgc28ga2VlcCB0aGlzIHNtYWxsICovCisJCWRlc2lyZWRfYXZnX2x1bSA9IDUwMDA7CiAJfSBlbHNlIHsKLQkJZGVhZHpvbmUgPSAzMDAwOwotCQlkZXNpcmVkX2F2Z19sdW0gPSAyMzAwMDsKKwkJZGVhZHpvbmUgPSAxNTAwOworCQlkZXNpcmVkX2F2Z19sdW0gPSAxODAwMDsKIAl9CiAKLQlpZiAoc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMgPiAwKQotCQlzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcy0tOwotCWVsc2UgaWYgKGdzcGNhX2F1dG9fZ2Fpbl9uX2V4cG9zdXJlKGdzcGNhX2RldiwgYXZnX2x1bSwKLQkJCXNkLT5icmlnaHRuZXNzICogZGVzaXJlZF9hdmdfbHVtIC8gMTI3LAotCQkJZGVhZHpvbmUsIEdBSU5fS05FRSwgRVhQT1NVUkVfS05FRSkpIHsKKwlpZiAoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX0NPQVJTRV9FWFBPKQorCQlyZXN1bHQgPSBnc3BjYV9jb2Fyc2VfZ3JhaW5lZF9leHBvX2F1dG9nYWluKGdzcGNhX2RldiwgYXZnX2x1bSwKKwkJCQlzZC0+YnJpZ2h0bmVzcyAqIGRlc2lyZWRfYXZnX2x1bSAvIDEyNywKKwkJCQlkZWFkem9uZSk7CisJZWxzZQorCQlyZXN1bHQgPSBnc3BjYV9hdXRvX2dhaW5fbl9leHBvc3VyZShnc3BjYV9kZXYsIGF2Z19sdW0sCisJCQkJc2QtPmJyaWdodG5lc3MgKiBkZXNpcmVkX2F2Z19sdW0gLyAxMjcsCisJCQkJZGVhZHpvbmUsIEdBSU5fS05FRSwgRVhQT1NVUkVfS05FRSk7CisKKwlpZiAocmVzdWx0KSB7CiAJCVBERUJVRyhEX0ZSQU0sICJhdXRvZ2FpbjogZ2FpbiBjaGFuZ2VkOiBnYWluOiAlZCBleHBvOiAlZCIsCiAJCQkoaW50KXNkLT5nYWluLCAoaW50KXNkLT5leHBvc3VyZSk7CiAJCXNkLT5hdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzID0gQVVUT0dBSU5fSUdOT1JFX0ZSQU1FUzsKQEAgLTg4MSw3ICsxMDUwLDEzIEBACiAKIAlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwogCXNkLT5nYWluID0gR0FJTl9ERUY7Ci0Jc2QtPmV4cG9zdXJlID0gRVhQT1NVUkVfREVGOworCWlmIChzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5mbGFncyAmIEZfQ09BUlNFX0VYUE8pIHsKKwkJc2QtPmV4cG9zdXJlID0gQ09BUlNFX0VYUE9TVVJFX0RFRjsKKwkJZ3NwY2FfZGV2LT5jdHJsX2RpcyB8PSAoMSA8PCBFWFBPU1VSRV9JRFgpOworCX0gZWxzZSB7CisJCXNkLT5leHBvc3VyZSA9IEVYUE9TVVJFX0RFRjsKKwkJZ3NwY2FfZGV2LT5jdHJsX2RpcyB8PSAoMSA8PCBDT0FSU0VfRVhQT1NVUkVfSURYKTsKKwl9CiAJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBBVVRPR0FJTl9JRFgpKQogCQlzZC0+YXV0b2dhaW4gPSAwOyAvKiBEaXNhYmxlIGRvX2F1dG9nYWluIGNhbGxiYWNrICovCiAJZWxzZQpAQCAtOTE3LDkgKzEwOTIsNiBAQAogCXJlZzEyXzE5WzZdID0gc245YzEweFsweDE4IC0gMV0gfCAobW9kZSA8PCA0KTsKIAkvKiBTcGVjaWFsIGNhc2VzIHdoZXJlIHJlZyAxNyBhbmQgb3IgMTkgdmFsdWUgZGVwZW5kcyBvbiBtb2RlICovCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfUEFTMjAyOgotCQlyZWcxMl8xOVs1XSA9IG1vZGUgPyAweDI0IDogMHgyMDsKLQkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfVEFTNTEzMENYWDoKIAkJLyogcHJvYmFibHkgbm90IG1vZGUgc3BlY2lmaWMgYXQgYWxsIG1vc3QgbGlrZWx5IHRoZSB1cHBlcgogCQkgICBuaWJibGUgb2YgMHgxOSBpcyBleHBvc3VyZSAoY2xvY2sgZGl2aWRlcikganVzdCBhcyB3aXRoCkBAIC05NTUsNiArMTEyNywxNiBAQAogCQkJc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc2Vuc29yX2JyaWRnZV9pbml0X3NpemVbCiAJCQkJc2QtPmJyaWRnZV0pOwogCisJLyogTW9kZSBzcGVjaWZpYyBzZW5zb3Igc2V0dXAgKi8KKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9QQVMyMDI6IHsKKwkJY29uc3QgX191OCBpMmNwY2xvY2tkaXZbXSA9CisJCQl7MHhhMCwgMHg0MCwgMHgwMiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH07CisJCS8qIGNsb2NrZGl2IGZyb20gNCB0byAzICg3LjUgLT4gMTAgZnBzKSB3aGVuIGluIGxvdyByZXMgbW9kZSAqLworCQlpZiAobW9kZSkKKwkJCWkyY193KGdzcGNhX2RldiwgaTJjcGNsb2NrZGl2KTsKKwkgICAgfQorCX0KIAkvKiBIX3NpemUgVl9zaXplIDB4MjgsIDB4MWUgLT4gNjQweDQ4MC4gMHgxNiwgMHgxMiAtPiAzNTJ4Mjg4ICovCiAJcmVnX3coZ3NwY2FfZGV2LCAweDE1LCAmcmVnMTJfMTlbM10sIDIpOwogCS8qIGNvbXByZXNzaW9uIHJlZ2lzdGVyICovCkBAIC05ODUsNiArMTE2Nyw4IEBACiAKIAlzZC0+ZnJhbWVzX3RvX2Ryb3AgPSAwOwogCXNkLT5hdXRvZ2Fpbl9pZ25vcmVfZnJhbWVzID0gMDsKKwlzZC0+ZXhwX3Rvb19oaWdoX2NudCA9IDA7CisJc2QtPmV4cF90b29fbG93X2NudCA9IDA7CiAJYXRvbWljX3NldCgmc2QtPmF2Z19sdW0sIC0xKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExNDMsMTEgKzEzMjcsMTQgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlzZC0+YXV0b2dhaW4gPSB2YWw7CisJc2QtPmV4cF90b29faGlnaF9jbnQgPSAwOworCXNkLT5leHBfdG9vX2xvd19jbnQgPSAwOworCiAJLyogd2hlbiBzd2l0Y2hpbmcgdG8gYXV0b2dhaW4gc2V0IGRlZmF1bHRzIHRvIG1ha2Ugc3VyZQogCSAgIHdlIGFyZSBvbiBhIHZhbGlkIHBvaW50IG9mIHRoZSBhdXRvZ2FpbiBnYWluIC8KIAkgICBleHBvc3VyZSBrbmVlIGdyYXBoLCBhbmQgZ2l2ZSB0aGlzIGNoYW5nZSB0aW1lIHRvCiAJICAgdGFrZSBlZmZlY3QgYmVmb3JlIGRvaW5nIGF1dG9nYWluLiAqLwotCWlmIChzZC0+YXV0b2dhaW4pIHsKKwlpZiAoc2QtPmF1dG9nYWluICYmICEoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX0NPQVJTRV9FWFBPKSkgewogCQlzZC0+ZXhwb3N1cmUgPSBFWFBPU1VSRV9ERUY7CiAJCXNkLT5nYWluID0gR0FJTl9ERUY7CiAJCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgewpAQCAtMTIwNyw2ICsxMzk0LDI1IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKKyNpZmRlZiBDT05GSUdfSU5QVVQKK3N0YXRpYyBpbnQgc2RfaW50X3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAkJLyogaW50ZXJydXB0IHBhY2tldCBkYXRhICovCisJCQlpbnQgbGVuKQkJLyogaW50ZXJydXB0IHBhY2tldCBsZW5ndGggKi8KK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChsZW4gPT0gMSAmJiBkYXRhWzBdID09IDEpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCAwKTsKKwkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCXJldCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLApAQCAtMTIxOSw2ICsxNDI1LDkgQEAKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKIAkucXVlcnltZW51ID0gc2RfcXVlcnltZW51LAogCS5kcV9jYWxsYmFjayA9IGRvX2F1dG9nYWluLAorI2lmZGVmIENPTkZJR19JTlBVVAorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpAQCAtMTIyNywyMSArMTQzNiwyMSBAQAogCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSBfX2RldmluaXRjb25zdCA9IHsKLQl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAwMSksIFNCKFRBUzUxMTAsIDEwMil9LCAvKiBUQVM1MTEwQzFCICovCi0Je1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDUpLCBTQihUQVM1MTEwLCAxMDEpfSwgLyogVEFTNTExMEMxQiAqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDAxKSwgU0IoVEFTNTExMEMsIDEwMil9LCAvKiBUQVM1MTEwQzFCICovCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDUpLCBTQihUQVM1MTEwQywgMTAxKX0sIC8qIFRBUzUxMTBDMUIgKi8KICNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyX01PRFVMRQotCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA3KSwgU0IoVEFTNTExMCwgMTAxKX0sIC8qIFRBUzUxMTBEICovCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDcpLCBTQihUQVM1MTEwRCwgMTAxKX0sIC8qIFRBUzUxMTBEICovCisjZW5kaWYKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAwOSksIFNCKFBBUzEwNiwgMTAxKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMGQpLCBTQihQQVMxMDYsIDEwMSl9LAotI2VuZGlmCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMTEpLCBTQihPVjY2NTAsIDEwMSl9LAogI2lmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMiAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDJfTU9EVUxFCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMTkpLCBTQihPVjc2MzAsIDEwMSl9LAogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI0KSwgU0IoVEFTNTEzMENYWCwgMTAyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjUpLCBTQihUQVM1MTMwQ1hYLCAxMDIpfSwKKyNlbmRpZgogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI4KSwgU0IoUEFTMjAyLCAxMDIpfSwKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyOSksIFNCKFBBUzEwNiwgMTAyKX0sCi0jZW5kaWYKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYyksIFNCKE9WNzYzMCwgMTAyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmQpLCBTQihIVjcxMzFSLCAxMDIpfSwKICNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyX01PRFVMRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKaW5kZXggMGJkMzZhMC4uODNkNTc3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCkBAIC0yMSw2ICsyMSw3IEBACiAKICNkZWZpbmUgTU9EVUxFX05BTUUgInNvbml4aiIKIAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSAiZ3NwY2EuaCIKICNpbmNsdWRlICJqcGVnLmgiCiAKQEAgLTQ1LDYgKzQ2LDcgQEAKIAl1OCByZWQ7CiAJdTggZ2FtbWE7CiAJdTggdmZsaXA7CQkJLyogb3Y3NjMwL292NzY0OCBvbmx5ICovCisJdTggc2hhcnBuZXNzOwogCXU4IGluZnJhcmVkOwkJCS8qIG10OXYxMTEgb25seSAqLwogCXU4IGZyZXE7CQkJLyogb3Y3Nnh4IG9ubHkgKi8KIAl1OCBxdWFsaXR5OwkJCS8qIGltYWdlIHF1YWxpdHkgKi8KQEAgLTY0LDE2ICs2NiwxNyBAQAogI2RlZmluZSBCUklER0VfU045QzExMCAyCiAjZGVmaW5lIEJSSURHRV9TTjlDMTIwIDMKIAl1OCBzZW5zb3I7CQkJLyogVHlwZSBvZiBpbWFnZSBzZW5zb3IgY2hpcCAqLwotI2RlZmluZSBTRU5TT1JfSFY3MTMxUiAwCi0jZGVmaW5lIFNFTlNPUl9NSTAzNjAgMQotI2RlZmluZSBTRU5TT1JfTU80MDAwIDIKLSNkZWZpbmUgU0VOU09SX01UOVYxMTEgMwotI2RlZmluZSBTRU5TT1JfT002ODAyIDQKLSNkZWZpbmUgU0VOU09SX09WNzYzMCA1Ci0jZGVmaW5lIFNFTlNPUl9PVjc2NDggNgotI2RlZmluZSBTRU5TT1JfT1Y3NjYwIDcKLSNkZWZpbmUgU0VOU09SX1BPMTAzMCA4Ci0jZGVmaW5lIFNFTlNPUl9TUDgwNzA4IDkKKyNkZWZpbmUgU0VOU09SX0FEQ00xNzAwIDAKKyNkZWZpbmUgU0VOU09SX0hWNzEzMVIgMQorI2RlZmluZSBTRU5TT1JfTUkwMzYwIDIKKyNkZWZpbmUgU0VOU09SX01PNDAwMCAzCisjZGVmaW5lIFNFTlNPUl9NVDlWMTExIDQKKyNkZWZpbmUgU0VOU09SX09NNjgwMiA1CisjZGVmaW5lIFNFTlNPUl9PVjc2MzAgNgorI2RlZmluZSBTRU5TT1JfT1Y3NjQ4IDcKKyNkZWZpbmUgU0VOU09SX09WNzY2MCA4CisjZGVmaW5lIFNFTlNPUl9QTzEwMzAgOQorI2RlZmluZSBTRU5TT1JfU1A4MDcwOCAxMAogCXU4IGkyY19hZGRyOwogCiAJdTggKmpwZWdfaGRyOwpAQCAtOTYsMTIgKzk5LDE0IEBACiBzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0dmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldGluZnJhcmVkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0aW5mcmFyZWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKICNkZWZpbmUgQlJJR0hUTkVTU19JRFggMAogCXsKIAkgICAgewpAQCAtMjI1LDggKzIzMCwyMyBAQAogCSAgICAuc2V0ID0gc2Rfc2V0dmZsaXAsCiAJICAgIC5nZXQgPSBzZF9nZXR2ZmxpcCwKIAl9LAorI2RlZmluZSBTSEFSUE5FU1NfSURYIDgKKwl7CisJICAgIHsKKwkJLmlkCSA9IFY0TDJfQ0lEX1NIQVJQTkVTUywKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJTaGFycG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMjU1LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIFNIQVJQTkVTU19ERUYgOTAKKwkJLmRlZmF1bHRfdmFsdWUgPSBTSEFSUE5FU1NfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0c2hhcnBuZXNzLAorCSAgICAuZ2V0ID0gc2RfZ2V0c2hhcnBuZXNzLAorCX0sCiAvKiBtdDl2MTExIG9ubHkgKi8KLSNkZWZpbmUgSU5GUkFSRURfSURYIDgKKyNkZWZpbmUgSU5GUkFSRURfSURYIDkKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9JTkZSQVJFRCwKQEAgLTI0Miw3ICsyNjIsNyBAQAogCSAgICAuZ2V0ID0gc2RfZ2V0aW5mcmFyZWQsCiAJfSwKIC8qIG92NzYzMC9vdjc2NDgvb3Y3NjYwIG9ubHkgKi8KLSNkZWZpbmUgRlJFUV9JRFggOQorI2RlZmluZSBGUkVRX0lEWCAxMAogCXsKIAkgICAgewogCQkuaWQJID0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCkBAIC0yNjEsMjggKzI4MSwzNyBAQAogCiAvKiB0YWJsZSBvZiB0aGUgZGlzYWJsZWQgY29udHJvbHMgKi8KIHN0YXRpYyBfX3UzMiBjdHJsX2Rpc1tdID0geworCSgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgRlJFUV9JRFgpIHwKKwkJCSgxIDw8IEFVVE9HQUlOX0lEWCksCS8qIFNFTlNPUl9BRENNMTcwMCAwICovCisJKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IEZSRVFfSURYKSwKKwkJCQkJCS8qIFNFTlNPUl9IVjcxMzFSIDEgKi8KIAkoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSB8ICgxIDw8IEZSRVFfSURYKSwKLQkJCQkJCS8qIFNFTlNPUl9IVjcxMzFSIDAgKi8KKwkJCQkJCS8qIFNFTlNPUl9NSTAzNjAgMiAqLwogCSgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgRlJFUV9JRFgpLAotCQkJCQkJLyogU0VOU09SX01JMDM2MCAxICovCi0JKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBGUkVRX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfTU80MDAwIDIgKi8KKwkJCQkJCS8qIFNFTlNPUl9NTzQwMDAgMyAqLwogCSgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBGUkVRX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfTVQ5VjExMSAzICovCisJCQkJCQkvKiBTRU5TT1JfTVQ5VjExMSA0ICovCiAJKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBGUkVRX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT002ODAyIDQgKi8KKwkJCQkJCS8qIFNFTlNPUl9PTTY4MDIgNSAqLwogCSgxIDw8IElORlJBUkVEX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT1Y3NjMwIDUgKi8KKwkJCQkJCS8qIFNFTlNPUl9PVjc2MzAgNiAqLwogCSgxIDw8IElORlJBUkVEX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT1Y3NjQ4IDYgKi8KKwkJCQkJCS8qIFNFTlNPUl9PVjc2NDggNyAqLwogCSgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSwKLQkJCQkJCS8qIFNFTlNPUl9PVjc2NjAgNyAqLworCQkJCQkJLyogU0VOU09SX09WNzY2MCA4ICovCiAJKDEgPDwgQVVUT0dBSU5fSURYKSB8ICgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwKLQkJCSAgICAgICgxIDw8IEZSRVFfSURYKSwJLyogU0VOU09SX1BPMTAzMCA4ICovCisJCQkgICAgICAoMSA8PCBGUkVRX0lEWCksCS8qIFNFTlNPUl9QTzEwMzAgOSAqLwogCSgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSB8Ci0JCQkgICAgICAoMSA8PCBGUkVRX0lEWCksCS8qIFNFTlNPUl9TUDgwNzA4IDkgKi8KKwkJCSAgICAgICgxIDw8IEZSRVFfSURYKSwJLyogU0VOU09SX1NQODA3MDggMTAgKi8KIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGNpZl9tb2RlW10gPSB7CisJezM1MiwgMjg4LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzUyLAorCQkuc2l6ZWltYWdlID0gMzUyICogMjg4ICogNCAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMH0sCit9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKIAl7MTYwLCAxMjAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCkBAIC0zMDIsNiArMzMxLDE3IEBACiAJCS5wcml2ID0gMH0sCiB9OwogCitzdGF0aWMgY29uc3QgdTggc25fYWRjbTE3MDBbMHgxY10gPSB7CisvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KKwkweDAwLAkweDQzLAkweDYwLAkweDAwLAkweDFhLAkweDAwLAkweDAwLAkweDAwLAorLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCisJMHg4MCwJMHg1MSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwKKy8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCisJMHgwMywJMHgwMCwJMHgwNSwJMHgwMSwJMHgwNSwJMHgxNiwJMHgxMiwJMHg0MiwKKy8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiICovCisJMHgwNiwJMHgwMCwJMHgwMCwJMHgwMAorfTsKKwogLypEYXRhIGZyb20gc245YzEwMnAraHY3MTMxciAqLwogc3RhdGljIGNvbnN0IHU4IHNuX2h2NzEzMVsweDFjXSA9IHsKIC8qCXJlZzAJcmVnMQlyZWcyCXJlZzMJcmVnNAlyZWc1CXJlZzYJcmVnNyAqLwpAQCAtNDE1LDYgKzQ1NSw3IEBACiAKIC8qIHNlcXVlbmNlIHNwZWNpZmljIHRvIHRoZSBzZW5zb3JzIC0gISEgaW5kZXggPSBTRU5TT1JfeHh4ICovCiBzdGF0aWMgY29uc3QgdTggKnNuX3RiW10gPSB7CisJc25fYWRjbTE3MDAsCiAJc25faHY3MTMxLAogCXNuX21pMDM2MCwKIAlzbl9tbzQwMDAsCkBAIC00MzIsNiArNDczLDExIEBACiAJMHgwMCwgMHgyZCwgMHg0NiwgMHg1YSwgMHg2YywgMHg3YywgMHg4YiwgMHg5OSwKIAkweGE2LCAweGIyLCAweGJmLCAweGNhLCAweGQ1LCAweGUwLCAweGViLCAweGY1LCAweGZmCiB9OworLyogZ2FtbWEgZm9yIHNlbnNvciBBRENNMTcwMCAqLworc3RhdGljIGNvbnN0IHU4IGdhbW1hX3NwZWNfMFsxN10gPSB7CisJMHgwZiwgMHgzOSwgMHg1YSwgMHg3NCwgMHg4NiwgMHg5NSwgMHhhNiwgMHhiNCwKKwkweGJkLCAweGM0LCAweGNjLCAweGQ0LCAweGQ1LCAweGRlLCAweGU0LCAweGVkLCAweGY1Cit9OwogLyogZ2FtbWEgZm9yIHNlbnNvcnMgSFY3MTMxUiBhbmQgTVQ5VjExMSAqLwogc3RhdGljIGNvbnN0IHU4IGdhbW1hX3NwZWNfMVsxN10gPSB7CiAJMHgwOCwgMHgzYSwgMHg1MiwgMHg2NSwgMHg3NSwgMHg4MywgMHg5MSwgMHg5ZCwKQEAgLTQ1MCw2ICs0OTYsNDIgQEAKIAkweDNlLCAweDAwLCAweGNkLCAweDBmLCAweGY3LCAweDBmLAkvKiBWUiBWRyBWQiAqLwogCTB4MDAsIDB4MDAsIDB4MDAJCQkvKiBZVVYgb2Zmc2V0cyAqLwogfTsKK3N0YXRpYyBjb25zdCB1OCBhZGNtMTcwMF9zZW5zb3JfaW5pdFtdWzhdID0geworCXsweGEwLCAweDUxLCAweGZlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgwNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCS8qIHJlc2V0ICovCisJezB4ZGQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweGIwLCAweDUxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkZCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4YjAsIDB4NTEsIDB4MGMsIDB4ZTAsIDB4MmUsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDEwLCAweDAyLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgxNCwgMHgwZSwgMHgwZSwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjAsIDB4NTEsIDB4MWMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkZCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4YjAsIDB4NTEsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGRkLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHhiMCwgMHg1MSwgMHgwNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTAsIDB4NTEsIDB4ZmUsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJe30KK307CitzdGF0aWMgY29uc3QgdTggYWRjbTE3MDBfc2Vuc29yX3BhcmFtMVtdWzhdID0geworCXsweGIwLCAweDUxLCAweDI2LCAweGY5LCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwJLyogZXhwb3N1cmU/ICovCisJezB4ZDAsIDB4NTEsIDB4MWUsIDB4OGUsIDB4OGUsIDB4OGUsIDB4OGUsIDB4MTB9LAorCisJezB4YTAsIDB4NTEsIDB4ZmUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIwLCAweDUxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMCwgMHg1MSwgMHhmZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjAsIDB4NTEsIDB4MzIsIDB4MDAsIDB4NzIsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQwLCAweDUxLCAweDFlLCAweGJlLCAweGQ3LCAweGU4LCAweGJlLCAweDEwfSwJLyogZXhwb3N1cmU/ICovCisKKwl7MHhhMCwgMHg1MSwgMHhmZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjAsIDB4NTEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGEwLCAweDUxLCAweGZlLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMCwgMHg1MSwgMHgzMiwgMHgwMCwgMHhhMiwgMHgwMCwgMHgwMCwgMHgxMH0sCisJe30KK307CiBzdGF0aWMgY29uc3QgdTggaHY3MTMxcl9zZW5zb3JfaW5pdFtdWzhdID0gewogCXsweGMxLCAweDExLCAweDAxLCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKIAl7MHhiMSwgMHgxMSwgMHgzNCwgMHgxNywgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxMH0sCkBAIC05ODYsMTcgKzEwNjgsMTggQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHU4ICgqc2Vuc29yX2luaXRbMTBdKVs4XSA9IHsKLQlodjcxMzFyX3NlbnNvcl9pbml0LAkvKiBIVjcxMzFSIDAgKi8KLQltaTAzNjBfc2Vuc29yX2luaXQsCS8qIE1JMDM2MCAxICovCi0JbW80MDAwX3NlbnNvcl9pbml0LAkvKiBNTzQwMDAgMiAqLwotCW10OXYxMTFfc2Vuc29yX2luaXQsCS8qIE1UOVYxMTEgMyAqLwotCW9tNjgwMl9zZW5zb3JfaW5pdCwJLyogT002ODAyIDQgKi8KLQlvdjc2MzBfc2Vuc29yX2luaXQsCS8qIE9WNzYzMCA1ICovCi0Jb3Y3NjQ4X3NlbnNvcl9pbml0LAkvKiBPVjc2NDggNiAqLwotCW92NzY2MF9zZW5zb3JfaW5pdCwJLyogT1Y3NjYwIDcgKi8KLQlwbzEwMzBfc2Vuc29yX2luaXQsCS8qIFBPMTAzMCA4ICovCi0Jc3A4MDcwOF9zZW5zb3JfaW5pdCwJLyogU1A4MDcwOCA5ICovCitzdGF0aWMgY29uc3QgdTggKCpzZW5zb3JfaW5pdFsxMV0pWzhdID0geworCWFkY20xNzAwX3NlbnNvcl9pbml0LAkvKiBBRENNMTcwMCAwICovCisJaHY3MTMxcl9zZW5zb3JfaW5pdCwJLyogSFY3MTMxUiAxICovCisJbWkwMzYwX3NlbnNvcl9pbml0LAkvKiBNSTAzNjAgMiAqLworCW1vNDAwMF9zZW5zb3JfaW5pdCwJLyogTU80MDAwIDMgKi8KKwltdDl2MTExX3NlbnNvcl9pbml0LAkvKiBNVDlWMTExIDQgKi8KKwlvbTY4MDJfc2Vuc29yX2luaXQsCS8qIE9NNjgwMiA1ICovCisJb3Y3NjMwX3NlbnNvcl9pbml0LAkvKiBPVjc2MzAgNiAqLworCW92NzY0OF9zZW5zb3JfaW5pdCwJLyogT1Y3NjQ4IDcgKi8KKwlvdjc2NjBfc2Vuc29yX2luaXQsCS8qIE9WNzY2MCA4ICovCisJcG8xMDMwX3NlbnNvcl9pbml0LAkvKiBQTzEwMzAgOSAqLworCXNwODA3MDhfc2Vuc29yX2luaXQsCS8qIFNQODA3MDggMTAgKi8KIH07CiAKIC8qIHJlYWQgPGxlbj4gYnl0ZXMgdG8gZ3NwY2FfZGV2LT51c2JfYnVmICovCkBAIC0xMDY0LDYgKzExNDcsNyBAQAogCiAJUERFQlVHKERfVVNCTywgImkyY193MiBbJTAyeF0gPSAlMDJ4IiwgcmVnLCB2YWwpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0FEQ00xNzAwOgogCWNhc2UgU0VOU09SX09NNjgwMjoJCS8qIGkyYyBjb21tYW5kID0gYTAgKDEwMCBrSHopICovCiAJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4ODAgfCAoMiA8PCA0KTsKIAkJYnJlYWs7CkBAIC0xMTEwLDYgKzExOTQsNyBAQAogCXU4IG1vZGVbOF07CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKIAljYXNlIFNFTlNPUl9PTTY4MDI6CQkvKiBpMmMgY29tbWFuZCA9IDkwICgxMDAga0h6KSAqLwogCQltb2RlWzBdID0gMHg4MCB8IDB4MTA7CiAJCWJyZWFrOwpAQCAtMTI2MCw3ICsxMzQ1LDggQEAKIAkJezB4MDAsIDB4NDAsIDB4MzgsIDB4MzAsIDB4MDAsIDB4MjB9OwogCXN0YXRpYyBjb25zdCB1OCByZWdkNFtdID0gezB4NjAsIDB4MDAsIDB4MDB9OwogCi0JcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMCk7CisJLyogc2Vuc29yIGNsb2NrIGFscmVhZHkgZW5hYmxlZCBpbiBzZF9pbml0ICovCisJLyogcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMCk7ICovCiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgc245YzF4eFsxXSk7CiAKIAkvKiBjb25maWd1cmUgZ3BpbyAqLwpAQCAtMTI4NCw2ICsxMzcwLDEyIEBACiAJcmVnX3coZ3NwY2FfZGV2LCAweDAzLCAmc245YzF4eFszXSwgMHgwZik7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg0Myk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MTcsIDB4NjIpOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDQyKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg0Mik7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX01UOVYxMTE6CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NjEpOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCAweDYxKTsKQEAgLTEzNTcsMTQgKzE0NDksMTkgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtOwogCi0JY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKLQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOwotCWNhbS0+bnBrdCA9IDI0OwkJCS8qIDI0IHBhY2tldHMgcGVyIElTT0MgbWVzc2FnZSAqLwotCiAJc2QtPmJyaWRnZSA9IGlkLT5kcml2ZXJfaW5mbyA+PiAxNjsKIAlzZC0+c2Vuc29yID0gaWQtPmRyaXZlcl9pbmZvOwogCisJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9BRENNMTcwMCkgeworCQljYW0tPmNhbV9tb2RlID0gY2lmX21vZGU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShjaWZfbW9kZSk7CisJfSBlbHNlIHsKKwkJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOworCX0KKwljYW0tPm5wa3QgPSAyNDsJCQkvKiAyNCBwYWNrZXRzIHBlciBJU09DIG1lc3NhZ2UgKi8KKwogCXNkLT5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CiAJc2QtPmNvbnRyYXN0ID0gQ09OVFJBU1RfREVGOwogCXNkLT5jb2xvcnMgPSBDT0xPUl9ERUY7CkBAIC0xMzc0LDYgKzE0NzEsMTQgQEAKIAlzZC0+YXV0b2dhaW4gPSBBVVRPR0FJTl9ERUY7CiAJc2QtPmFnX2NudCA9IC0xOwogCXNkLT52ZmxpcCA9IFZGTElQX0RFRjsKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9PTTY4MDI6CisJCXNkLT5zaGFycG5lc3MgPSAweDEwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTX0RFRjsKKwkJYnJlYWs7CisJfQogCXNkLT5pbmZyYXJlZCA9IElORlJBUkVEX0RFRjsKIAlzZC0+ZnJlcSA9IEZSRVFfREVGOwogCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CkBAIC0xNDMzLDcgKzE1MzgsOSBAQAogCQlicmVhazsKIAl9CiAKLQlyZWdfdzEoZ3NwY2FfZGV2LCAweGYxLCAweDAxKTsKKwkvKiBOb3RlIHdlIGRvIG5vdCBkaXNhYmxlIHRoZSBzZW5zb3IgY2xvY2sgaGVyZSAocG93ZXIgc2F2aW5nIG1vZGUpLAorCSAgIGFzIHRoYXQgYWxzbyBkaXNhYmxlcyB0aGUgYnV0dG9uIG9uIHRoZSBjYW0uICovCisJcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMCk7CiAKIAkvKiBzZXQgdGhlIGkyYyBhZGRyZXNzICovCiAJc245YzF4eCA9IHNuX3RiW3NkLT5zZW5zb3JdOwpAQCAtMTU0Myw2ICsxNjUwLDEwIEBACiAKIAlrMiA9ICgoaW50KSBzZC0+YnJpZ2h0bmVzcyAtIDB4ODAwMCkgPj4gMTA7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTE3MDA6CisJCWlmIChrMiA+IDB4MWYpCisJCQlrMiA9IDA7CQkvKiBvbmx5IHBvc2l0aXZlIFkgb2Zmc2V0ICovCisJCWJyZWFrOwogCWNhc2UgU0VOU09SX0hWNzEzMVI6CiAJCWV4cG8gPSBzZC0+YnJpZ2h0bmVzcyA8PCA0OwogCQlpZiAoZXhwbyA+IDB4MDAyZGM2YzApCkBAIC0xNjI1LDYgKzE3MzYsOSBAQAogCX07CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKKwkJZ2FtbWFfYmFzZSA9IGdhbW1hX3NwZWNfMDsKKwkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfSFY3MTMxUjoKIAljYXNlIFNFTlNPUl9NVDlWMTExOgogCQlnYW1tYV9iYXNlID0gZ2FtbWFfc3BlY18xOwpAQCAtMTY3MCwyMyArMTc4NCwzOSBAQAogCQlzZC0+YWdfY250ID0gLTE7CiB9CiAKLS8qIG92NzYzMC9vdjc2NDggb25seSAqLworLyogaHY3MTMxci9vdjc2MzAvb3Y3NjQ4IG9ubHkgKi8KIHN0YXRpYyB2b2lkIHNldHZmbGlwKHN0cnVjdCBzZCAqc2QpCiB7CiAJdTggY29tbjsKIAogCWlmIChzZC0+Z3NwY2FfZGV2LmN0cmxfZGlzICYgKDEgPDwgVkZMSVBfSURYKSkKIAkJcmV0dXJuOwotCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc2MzApIHsKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgorCQljb21uID0gMHgxODsJCQkvKiBjbGtkaXYgPSAxLCBhYmxjZW4gPSAxICovCisJCWlmIChzZC0+dmZsaXApCisJCQljb21uIHw9IDB4MDE7CisJCWkyY193MSgmc2QtPmdzcGNhX2RldiwgMHgwMSwgY29tbik7CS8qIHNjdHJhICovCisJCWJyZWFrOworCWNhc2UgU0VOU09SX09WNzYzMDoKIAkJY29tbiA9IDB4MDI7CiAJCWlmICghc2QtPnZmbGlwKQogCQkJY29tbiB8PSAweDgwOwotCX0gZWxzZSB7CisJCWkyY193MSgmc2QtPmdzcGNhX2RldiwgMHg3NSwgY29tbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNFTlNPUl9PVjc2NDg6ICovCiAJCWNvbW4gPSAweDA2OwogCQlpZiAoc2QtPnZmbGlwKQogCQkJY29tbiB8PSAweDgwOworCQlpMmNfdzEoJnNkLT5nc3BjYV9kZXYsIDB4NzUsIGNvbW4pOworCQlicmVhazsKIAl9Ci0JaTJjX3cxKCZzZC0+Z3NwY2FfZGV2LCAweDc1LCBjb21uKTsKK30KKworc3RhdGljIHZvaWQgc2V0c2hhcnBuZXNzKHN0cnVjdCBzZCAqc2QpCit7CisJcmVnX3cxKCZzZC0+Z3NwY2FfZGV2LCAweDk5LCBzZC0+c2hhcnBuZXNzKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0aW5mcmFyZWQoc3RydWN0IHNkICpzZCkKQEAgLTE4MDQsNiArMTkzNCw4IEBACiAJaW50IG1vZGU7CiAJc3RhdGljIGNvbnN0IHU4IEMwW10gPSB7IDB4MmQsIDB4MmQsIDB4M2EsIDB4MDUsIDB4MDQsIDB4M2YgfTsKIAlzdGF0aWMgY29uc3QgdTggQ0FbXSA9IHsgMHgyOCwgMHhkOCwgMHgxNCwgMHhlYyB9OworCXN0YXRpYyBjb25zdCB1OCBDQV9hZGNtMTcwMFtdID0KKwkJCQl7IDB4MTQsIDB4ZWMsIDB4MGEsIDB4ZjYgfTsKIAlzdGF0aWMgY29uc3QgdTggQ0VbXSA9IHsgMHgzMiwgMHhkZCwgMHgyZCwgMHhkZCB9OwkvKiBNSTAzNjAgKi8KIAlzdGF0aWMgY29uc3QgdTggQ0Vfb3Y3Nnh4W10gPQogCQkJCXsgMHgzMiwgMHhkZCwgMHgzMiwgMHhkZCB9OwpAQCAtMTgyNCw2ICsxOTU2LDkgQEAKIAlpMmNfd19zZXEoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdFtzZC0+c2Vuc29yXSk7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKKwkJcmVnMiA9IDB4NjA7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX09NNjgwMjoKIAkJcmVnMiA9IDB4NzE7CiAJCWJyZWFrOwpAQCAtMTg0MiwxNyArMTk3NywyOCBAQAogCXJlZ193MShnc3BjYV9kZXYsIDB4MTIsIHNuOWMxeHhbMHgxMl0pOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MTMsIHNuOWMxeHhbMHgxM10pOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MTgsIHNuOWMxeHhbMHgxOF0pOwotCXJlZ193MShnc3BjYV9kZXYsIDB4ZDIsIDB4NmEpOwkJLyogREMyOSAqLwotCXJlZ193MShnc3BjYV9kZXYsIDB4ZDMsIDB4NTApOworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9BRENNMTcwMCkgeworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweGQyLCAweDNhKTsJLyogQUVfSF9TSVpFID0gMTE2ICovCisJCXJlZ193MShnc3BjYV9kZXYsIDB4ZDMsIDB4MzApOwkvKiBBRV9WX1NJWkUgPSA5NiAqLworCX0gZWxzZSB7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4ZDIsIDB4NmEpOwkvKiBBRV9IX1NJWkUgPSAyMTIgKi8KKwkJcmVnX3cxKGdzcGNhX2RldiwgMHhkMywgMHg1MCk7CS8qIEFFX1ZfU0laRSA9IDE2MCAqLworCX0KIAlyZWdfdzEoZ3NwY2FfZGV2LCAweGM2LCAweDAwKTsKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweGM3LCAweDAwKTsKLQlyZWdfdzEoZ3NwY2FfZGV2LCAweGM4LCAweDUwKTsKLQlyZWdfdzEoZ3NwY2FfZGV2LCAweGM5LCAweDNjKTsKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfQURDTTE3MDApIHsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHhjOCwgMHgyYyk7CS8qIEFXX0hfU1RPUCA9IDM1MiAqLworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweGM5LCAweDI0KTsJLyogQVdfVl9TVE9QID0gMjg4ICovCisJfSBlbHNlIHsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHhjOCwgMHg1MCk7CS8qIEFXX0hfU1RPUCA9IDY0MCAqLworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweGM5LCAweDNjKTsJLyogQVdfVl9TVE9QID0gNDgwICovCisJfQogCXJlZ193MShnc3BjYV9kZXYsIDB4MTgsIHNuOWMxeHhbMHgxOF0pOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX01UOVYxMTE6CiAJCXJlZzE3ID0gMHhlMDsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfQURDTTE3MDA6CiAJY2FzZSBTRU5TT1JfT1Y3NjMwOgogCQlyZWcxNyA9IDB4ZTI7CiAJCWJyZWFrOwpAQCAtMTg3MCw0NCArMjAxNiwzOSBAQAogCQlicmVhazsKIAl9CiAJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgcmVnMTcpOwotLyogc2V0IHJlZzEgd2FzIGhlcmUgKi8KLQlyZWdfdzEoZ3NwY2FfZGV2LCAweDA1LCBzbjljMXh4WzVdKTsJLyogcmVkICovCi0JcmVnX3cxKGdzcGNhX2RldiwgMHgwNywgc245YzF4eFs3XSk7CS8qIGdyZWVuICovCi0JcmVnX3cxKGdzcGNhX2RldiwgMHgwNiwgc245YzF4eFs2XSk7CS8qIGJsdWUgKi8KKworCXJlZ193MShnc3BjYV9kZXYsIDB4MDUsIDB4MDApOwkJLyogcmVkICovCisJcmVnX3cxKGdzcGNhX2RldiwgMHgwNywgMHgwMCk7CQkvKiBncmVlbiAqLworCXJlZ193MShnc3BjYV9kZXYsIDB4MDYsIDB4MDApOwkJLyogYmx1ZSAqLwogCXJlZ193MShnc3BjYV9kZXYsIDB4MTQsIHNuOWMxeHhbMHgxNF0pOwogCiAJc2V0Z2FtbWEoZ3NwY2FfZGV2KTsKIAorLypmaXhtZTogOCB0aW1lcyB3aXRoIGFsbCB6ZXJvZXMgYW5kIDEgb3IgMiB0aW1lcyB3aXRoIG5vcm1hbCB2YWx1ZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQlyZWdfdyhnc3BjYV9kZXYsIDB4ODQsIHJlZzg0LCBzaXplb2YgcmVnODQpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewotCWNhc2UgU0VOU09SX01UOVYxMTE6Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4OWEsIDB4MDcpOwotCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk5LCAweDU5KTsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5TT1JfT002ODAyOgotCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDA4KTsKLQkJcmVnX3cxKGdzcGNhX2RldiwgMHg5OSwgMHgxMCk7Ci0JCWJyZWFrOwotCWNhc2UgU0VOU09SX09WNzY0ODoKLQkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwYSk7Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NjApOwotCQlicmVhazsKKwljYXNlIFNFTlNPUl9BRENNMTcwMDoKIAljYXNlIFNFTlNPUl9PVjc2NjA6CiAJY2FzZSBTRU5TT1JfU1A4MDcwODoKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwNSk7Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NTkpOworCQlicmVhazsKKwljYXNlIFNFTlNPUl9NVDlWMTExOgorCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDA3KTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfT1Y3NjQ4OgorCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDBhKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwOCk7Ci0JCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NTkpOwogCQlicmVhazsKIAl9CisJc2V0c2hhcnBuZXNzKHNkKTsKIAogCXJlZ193KGdzcGNhX2RldiwgMHg4NCwgcmVnODQsIHNpemVvZiByZWc4NCk7Ci0JcmVnX3cxKGdzcGNhX2RldiwgMHgwNSwgc245YzF4eFs1XSk7CS8qIHJlZCAqLwotCXJlZ193MShnc3BjYV9kZXYsIDB4MDcsIHNuOWMxeHhbN10pOwkvKiBncmVlbiAqLwotCXJlZ193MShnc3BjYV9kZXYsIDB4MDYsIHNuOWMxeHhbNl0pOwkvKiBibHVlICovCisJcmVnX3cxKGdzcGNhX2RldiwgMHgwNSwgMHgyMCk7CQkvKiByZWQgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCAweDA3LCAweDIwKTsJCS8qIGdyZWVuICovCisJcmVnX3cxKGdzcGNhX2RldiwgMHgwNiwgMHgyMCk7CQkvKiBibHVlICovCiAKIAlpbml0ID0gTlVMTDsKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CkBAIC0xOTE3LDYgKzIwNTgsMTEgQEAKIAkJcmVnMSA9IDB4MDY7CS8qIDY0MHg0ODA6IGNsayAyNE1oeiwgdmlkZW8gdHJmIGVuYWJsZSAqLwogCXJlZzE3ID0gMHg2MTsJCS8qIDB4OjIwOiBlbmFibGUgc2Vuc29yIGNsb2NrICovCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTE3MDA6CisJCWluaXQgPSBhZGNtMTcwMF9zZW5zb3JfcGFyYW0xOworCQlyZWcxID0gMHg0NjsKKwkJcmVnMTcgPSAweGUyOworCQlicmVhazsKIAljYXNlIFNFTlNPUl9NTzQwMDA6CiAJCWlmIChtb2RlKSB7CiAvKgkJCXJlZzEgPSAweDQ2OwkgKiAzMjAgY2xrIDQ4TWh6IDYwZnAvcyAqLwpAQCAtMTk0MCw3ICsyMDg2LDYgQEAKIAkJcmVnMTcgPSAweDY0OwkJLyogNjQwIE1DS1NJWkUgKi8KIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT1Y3NjMwOgotCQlzZXR2ZmxpcChzZCk7CiAJCXJlZzE3ID0gMHhlMjsKIAkJcmVnMSA9IDB4NDQ7CiAJCWJyZWFrOwpAQCAtMTk4Niw4ICsyMTMxLDEyIEBACiAJfQogCiAJcmVnX3coZ3NwY2FfZGV2LCAweGMwLCBDMCwgNik7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweGNhLCBDQSwgNCk7CisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX0FEQ00xNzAwKQorCQlyZWdfdyhnc3BjYV9kZXYsIDB4Y2EsIENBX2FkY20xNzAwLCA0KTsKKwllbHNlCisJCXJlZ193KGdzcGNhX2RldiwgMHhjYSwgQ0EsIDQpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0FEQ00xNzAwOgogCWNhc2UgU0VOU09SX09WNzYzMDoKIAljYXNlIFNFTlNPUl9PVjc2NDg6CiAJY2FzZSBTRU5TT1JfT1Y3NjYwOgpAQCAtMjAwOCwxMSArMjE1Nyw3IEBACiAJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgcmVnMTcpOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIHJlZzEpOwogCi0Jc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfT1Y3NjMwOgotCQlzZXR2ZmxpcChzZCk7Ci0JCWJyZWFrOwotCX0KKwlzZXR2ZmxpcChzZCk7CiAJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwogCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2KTsKQEAgLTIwNTYsNyArMjIwMSw4IEBACiAJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgc245YzF4eFsweDE3XSk7CiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgc245YzF4eFsxXSk7CiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgZGF0YSk7Ci0JcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMCk7CisJLyogRG9uJ3QgZGlzYWJsZSBzZW5zb3IgY2xvY2sgYXMgdGhhdCBkaXNhYmxlcyB0aGUgYnV0dG9uIG9uIHRoZSBjYW0gKi8KKwkvKiByZWdfdzEoZ3NwY2FfZGV2LCAweGYxLCAweDAxKTsgKi8KIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtMjI4OCw2ICsyNDM0LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5zaGFycG5lc3MgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRzaGFycG5lc3Moc2QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5zaGFycG5lc3M7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc2Rfc2V0dmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMjM5MSw2ICsyNTU1LDI1IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKKyNpZmRlZiBDT05GSUdfSU5QVVQKK3N0YXRpYyBpbnQgc2RfaW50X3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAkJLyogaW50ZXJydXB0IHBhY2tldCBkYXRhICovCisJCQlpbnQgbGVuKQkJLyogaW50ZXJydXB0IHBhY2tldCBsZW5ndGggKi8KK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChsZW4gPT0gMSAmJiBkYXRhWzBdID09IDEpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlpbnB1dF9yZXBvcnRfa2V5KGdzcGNhX2Rldi0+aW5wdXRfZGV2LCBLRVlfQ0FNRVJBLCAwKTsKKwkJaW5wdXRfc3luYyhnc3BjYV9kZXYtPmlucHV0X2Rldik7CisJCXJldCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLApAQCAtMjQwNiw2ICsyNTg5LDkgQEAKIAkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAogCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCiAJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKKyNpZmRlZiBDT05GSUdfSU5QVVQKKwkuaW50X3BrdF9zY2FuID0gc2RfaW50X3BrdF9zY2FuLAorI2VuZGlmCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KQEAgLTI0NzIsNiArMjY1OCw3IEBACiAvKgl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjE0MiksIEJTKFNOOUMxMjAsIFBPMjAzME4pfSwJICpzbjljMTIwYiovCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxNDMpLCBCUyhTTjlDMTIwLCBTUDgwNzA4KX0sCS8qc245YzEyMGIqLwogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTQ4KSwgQlMoU045QzEyMCwgT002ODAyKX0sCS8qc245YzEyMGIqLworCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTRhKSwgQlMoU045QzEyMCwgQURDTTE3MDApfSwJLypzbjljMTIwYiovCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKaW5kZXggZmU0Njg2OC4uYjg2NmM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKQEAgLTY4LDcgKzY4LDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTEwNDcsNyArMTA0Nyw3IEBACiB9CiAKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgPSBzZF9jdHJscywKIAkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCmluZGV4IDY3NjFhMzAuLmM5OTMzMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCkBAIC01OSw3ICs1OSw3IEBACiBzdGF0aWMgaW50IHNkX3NldHJlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0cmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKICNkZWZpbmUgTVlfQlJJR0hUTkVTUyAwCiAJewogCSAgICB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jCmluZGV4IDBmOTIzMmYuLmM1NzZlZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jCkBAIC00Miw3ICs0Miw3IEBACiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMKaW5kZXggMzkyNTdlNC4uODlmZWM0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMKQEAgLTUxLDcgKzUxLDcgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0aHVlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0aHVlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAjZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAogCXsKIAkgICAgewpAQCAtNjczLDcgKzY3Myw3IEBACiB9CiAKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKIAkuY3RybHMgPSBzZF9jdHJscywKIAkubmN0cmxzID0gQVJSQVlfU0laRShzZF9jdHJscyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCmluZGV4IDRkOGU2Y2YuLjE1YjJlZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCkBAIC00NSw3ICs0NSw3IEBACiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKaW5kZXggNThjMmYwMC4uZGM3ZjJiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKQEAgLTkyMiw3ICs5MjIsNyBAQAogfQogCiAvKiBjb250cm9sIHRhYmxlcyAqLwotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzXzEyYVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzXzEyYVtdID0gewogCXsKIAkgICAgewogCQkuaWQgPSBWNEwyX0NJRF9IVUUsCkBAIC05NjQsNyArOTY0LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzXzcyYVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzXzcyYVtdID0gewogCXsKIAkgICAgewogCQkuaWQgPSBWNEwyX0NJRF9IVUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1Yy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkwNWMuYwppbmRleCBkNzBiMTU2Li5lNjQ2NjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MDVjLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKIAogLyogQ29tbWFuZHMuIFRoZXNlIGdvIGluIHRoZSAidmFsdWUiIHNsb3QuICovCiAjZGVmaW5lIFNROTA1Q19DTEVBUiAgIDB4YTAJCS8qIGNsZWFyIGV2ZXJ5dGhpbmcgKi8KKyNkZWZpbmUgU1E5MDVDX0dFVF9JRCAgMHgxNGY0CQkvKiBSZWFkIHZlcnNpb24gbnVtYmVyICovCiAjZGVmaW5lIFNROTA1Q19DQVBUVVJFX0xPVyAweGEwNDAJLyogU3RhcnRzIGNhcHR1cmUgYXQgMTYweDEyMCAqLwogI2RlZmluZSBTUTkwNUNfQ0FQVFVSRV9NRUQgMHgxNDQwCS8qIFN0YXJ0cyBjYXB0dXJlIGF0IDMyMHgyNDAgKi8KICNkZWZpbmUgU1E5MDVDX0NBUFRVUkVfSEkgMHgyODQwCS8qIFN0YXJ0cyBjYXB0dXJlIGF0IDMyMHgyNDAgKi8KQEAgLTEwMSw2ICsxMDIsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzcTkwNWNfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiBjb21tYW5kLCB1MTYgaW5kZXgsCisJCSAgICAgICBpbnQgc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCSAgICAgIFVTQl9SRVFfU1lOQ0hfRlJBTUUsCQkvKiByZXF1ZXN0ICovCisJCQkgICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIGNvbW1hbmQsIGluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIHNpemUsCisJCQkgICAgICBTUTkwNUNfQ01EX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIiVzOiB1c2JfY29udHJvbF9tc2cgZmFpbGVkICglZCkiLAorCQkgICAgICAgX19mdW5jX18sIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uIGFuZCBydW5zIHdoZW5ldmVyIHRoZSBjYW1lcmEKICAqIGlzIHN0cmVhbWluZyBkYXRhLiBCZWNhdXNlIGl0IGlzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uIGl0IGlzIGFsbG93ZWQgdG8gc2xlZXAKICAqIHNvIHdlIGNhbiB1c2Ugc3luY2hyb25vdXMgVVNCIGNhbGxzLiBUbyBhdm9pZCBwb3NzaWJsZSBjb2xsaXNpb25zIHdpdGggb3RoZXIKQEAgLTE4MywxMyArMjA0LDM0IEBACiB7CiAJc3RydWN0IGNhbSAqY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwogCXN0cnVjdCBzZCAqZGV2ID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKIAogCVBERUJVRyhEX1BST0JFLAogCQkiU1E5MDUwIGNhbWVyYSBkZXRlY3RlZCIKIAkJIiAodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsIGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CisKKwlyZXQgPSBzcTkwNWNfY29tbWFuZChnc3BjYV9kZXYsIFNROTA1Q19HRVRfSUQsIDApOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIkdldCB2ZXJzaW9uIGNvbW1hbmQgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc3E5MDVjX3JlYWQoZ3NwY2FfZGV2LCAweGY1LCAwLCAyMCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiUmVhZGluZyB2ZXJzaW9uIGNvbW1hbmQgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCS8qIE5vdGUgd2UgbGVhdmUgb3V0IHRoZSB1c2IgaWQgYW5kIHRoZSBtYW51ZmFjdHVyaW5nIGRhdGUgKi8KKwlQREVCVUcoRF9QUk9CRSwKKwkgICAgICAgIlNROTA1MCBJRCBzdHJpbmc6ICUwMnggLSAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIsCisJCWdzcGNhX2Rldi0+dXNiX2J1ZlszXSwKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzE0XSwgZ3NwY2FfZGV2LT51c2JfYnVmWzE1XSwKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzE2XSwgZ3NwY2FfZGV2LT51c2JfYnVmWzE3XSwKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzE4XSwgZ3NwY2FfZGV2LT51c2JfYnVmWzE5XSk7CisKIAljYW0tPmNhbV9tb2RlID0gc3E5MDVjX21vZGU7CiAJY2FtLT5ubW9kZXMgPSAyOwotCWlmIChpZC0+aWRQcm9kdWN0ID09IDB4OTA1MCkKKwlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzE1XSA9PSAwKQogCQljYW0tPm5tb2RlcyA9IDE7CiAJLyogV2UgZG9uJ3QgdXNlIHRoZSBidWZmZXIgZ3NwY2EgYWxsb2NhdGVzIHNvIG1ha2UgaXQgc21hbGwuICovCiAJY2FtLT5idWxrX3NpemUgPSAzMjsKQEAgLTI1OCw2ICszMDAsNyBAQAogc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkwNWMpfSwKIAl7VVNCX0RFVklDRSgweDI3NzAsIDB4OTA1MCl9LAorCXtVU0JfREVWSUNFKDB4Mjc3MCwgMHg5MDUyKX0sCiAJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkxM2QpfSwKIAl7fQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jCmluZGV4IDJlMjkzNTUuLjBmYjUzNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdGswMTQuYwpAQCAtNTMsNyArNTMsNyBAQAogc3RhdGljIGludCBzZF9zZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2ODAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDY4MC5jCmluZGV4IDJhNjlkN2MuLmU1MGRkNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDY4MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDY4MC5jCkBAIC00NSw3ICs0NSw3IEBACiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewogfTsKIAogc3RhdGljIGludCBzdHZfc25kY3RybChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIGludCBzZXQsIHU4IHJlcSwgdTE2IHZhbCwKQEAgLTUzLDI0ICs1MywyOCBAQAogewogCWludCByZXQgPSAtMTsKIAl1OCByZXFfdHlwZSA9IDA7CisJdW5zaWduZWQgaW50IHBpcGUgPSAwOwogCiAJc3dpdGNoIChzZXQpIHsKIAljYXNlIDA6IC8qICAweGMxICAqLwogCQlyZXFfdHlwZSA9IFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQ7CisJCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApOwogCQlicmVhazsKIAljYXNlIDE6IC8qICAweDQxICAqLwogCQlyZXFfdHlwZSA9IFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UOworCQlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKTsKIAkJYnJlYWs7CiAJY2FzZSAyOgkvKiAgMHg4MCAgKi8KIAkJcmVxX3R5cGUgPSBVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0RFVklDRTsKKwkJcGlwZSA9IHVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCk7CiAJCWJyZWFrOwogCWNhc2UgMzoJLyogIDB4NDAgICovCiAJCXJlcV90eXBlID0gVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFOworCQlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKTsKIAkJYnJlYWs7CiAJfQogCi0JcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAotCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsIHBpcGUsCiAJCQkgICAgICByZXEsIHJlcV90eXBlLAogCQkJICAgICAgdmFsLCAwLCBnc3BjYV9kZXYtPnVzYl9idWYsIHNpemUsIDUwMCk7CiAKQEAgLTEzOCw2ICsxNDIsMTAgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwogCisJLyogR2l2ZSB0aGUgY2FtZXJhIHNvbWUgdGltZSB0byBzZXR0bGUsIG90aGVyd2lzZSBpbml0YWxpemF0aW9uIHdpbGwKKwkgICBmYWlsIG9uIGhvdHBsdWcsIGFuZCB5ZXMgaXQgcmVhbGx5IG5lZWRzIGEgZnVsbCBzZWNvbmQuICovCisJbXNsZWVwKDEwMDApOworCiAJLyogcGluZyBjYW1lcmEgdG8gYmUgc3VyZSBTVFYwNjgwIGlzIHByZXNlbnQgKi8KIAlpZiAoc3R2X3NuZGN0cmwoZ3NwY2FfZGV2LCAwLCAweDg4LCAweDU2NzgsIDB4MDIpICE9IDB4MDIgfHwKIAkgICAgZ3NwY2FfZGV2LT51c2JfYnVmWzBdICE9IDB4NTYgfHwgZ3NwY2FfZGV2LT51c2JfYnVmWzFdICE9IDB4NzgpIHsKQEAgLTE2OSw2ICsxNzcsOCBAQAogCQlQREVCVUcoRF9QUk9CRSwgIkNhbWVyYSBzdXBwb3J0cyBDSUYgbW9kZSIpOwogCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbN10gJiAweDAyKQogCQlQREVCVUcoRF9QUk9CRSwgIkNhbWVyYSBzdXBwb3J0cyBWR0EgbW9kZSIpOworCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbN10gJiAweDA0KQorCQlQREVCVUcoRF9QUk9CRSwgIkNhbWVyYSBzdXBwb3J0cyBRQ0lGIG1vZGUiKTsKIAlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzddICYgMHgwOCkKIAkJUERFQlVHKERfUFJPQkUsICJDYW1lcmEgc3VwcG9ydHMgUVZHQSBtb2RlIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCmluZGV4IDVkMDI0MWIuLmFmNzNkYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYwpAQCAtMjcsNiArMjcsNyBAQAogICogUC9OIDg2MTA0MC0wMDAwOiBTZW5zb3IgU1QgVlY2NDEwICAgICAgIEFTSUMgU1RWMDYxMCAgIC0gUXVpY2tDYW0gV2ViCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSAic3R2MDZ4eF9zZW5zb3IuaCIKIAogTU9EVUxFX0FVVEhPUigiRXJpayBBbmRyw6luIik7CkBAIC0yMTksNiArMjIwLDcgQEAKIAkJaW5mbygiUmVhZCAweCV4IGZyb20gYWRkcmVzcyAweCV4IiwgZGF0YSwgaSk7CiAJfQogCisJaW5mbygiVGVzdGluZyBzdHYwNnh4IGJyaWRnZSByZWdpc3RlcnMgZm9yIHdyaXRhYmlsaXR5Iik7CiAJZm9yIChpID0gMHgxNDAwOyBpIDwgMHgxNjBmOyBpKyspIHsKIAkJc3R2MDZ4eF9yZWFkX2JyaWRnZShzZCwgaSwgJmRhdGEpOwogCQlidWYgPSBkYXRhOwpAQCAtMjI5LDcgKzIzMSw3IEBACiAJCQlpbmZvKCJSZWdpc3RlciAweCV4IGlzIHJlYWQvd3JpdGUiLCBpKTsKIAkJZWxzZSBpZiAoZGF0YSAhPSBidWYpCiAJCQlpbmZvKCJSZWdpc3RlciAweCV4IGlzIHJlYWQvd3JpdGUsIgotCQkJICAgICAiYnV0IG9ubHkgcGFydGlhbGx5IiwgaSk7CisJCQkgICAgICIgYnV0IG9ubHkgcGFydGlhbGx5IiwgaSk7CiAJCWVsc2UKIAkJCWluZm8oIlJlZ2lzdGVyIDB4JXggaXMgcmVhZC1vbmx5IiwgaSk7CiAKQEAgLTQyNiw2ICs0MjgsMjkgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfSU5QVVQKK3N0YXRpYyBpbnQgc2RfaW50X3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAkJLyogaW50ZXJydXB0IHBhY2tldCBkYXRhICovCisJCQlpbnQgbGVuKQkJLyogaW50ZXJydXB0IHBhY2tldCBsZW5ndGggKi8KK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChsZW4gPT0gMSAmJiBkYXRhWzBdID09IDB4ODApIHsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlyZXQgPSAwOworCX0KKworCWlmIChsZW4gPT0gMSAmJiBkYXRhWzBdID09IDB4ODgpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMCk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCQlyZXQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBzdHYwNnh4X2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQkgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CiAKQEAgLTQzNiw3ICs0NjEsMTAgQEAKIAkuaW5pdCA9IHN0djA2eHhfaW5pdCwKIAkuc3RhcnQgPSBzdHYwNnh4X3N0YXJ0LAogCS5zdG9wTiA9IHN0djA2eHhfc3RvcE4sCi0JLnBrdF9zY2FuID0gc3R2MDZ4eF9wa3Rfc2NhbgorCS5wa3Rfc2NhbiA9IHN0djA2eHhfcGt0X3NjYW4sCisjaWZkZWYgQ09ORklHX0lOUFVUCisJLmludF9wa3Rfc2NhbiA9IHNkX2ludF9wa3Rfc2NhbiwKKyNlbmRpZgogfTsKIAogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwppbmRleCAzMDZiN2Q3Li4wYzc4NmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwpAQCAtNjcsNyArNjcsNyBAQAogc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTI2NywxNDIgKzI2Nyw2IEBACiAJezB4MDYsIDB4MDAwMCwgMHgwMDAwfSwKIAl7MHgwMCwgMHgwMDA0LCAweDI4ODB9LAogCXsweDAwLCAweDAwMDEsIDB4Mjg4MX0sCi0vKiBsb29rIGxpa2Ugc2V0dGluZyBhIHFUYWJsZSAqLwotCXsweDAwLCAweDAwMDYsIDB4MjgwMH0sCi0JezB4MDAsIDB4MDAwNCwgMHgyODAxfSwKLQl7MHgwMCwgMHgwMDA0LCAweDI4MDJ9LAotCXsweDAwLCAweDAwMDYsIDB4MjgwM30sCi0JezB4MDAsIDB4MDAwYSwgMHgyODA0fSwKLQl7MHgwMCwgMHgwMDEwLCAweDI4MDV9LAotCXsweDAwLCAweDAwMTQsIDB4MjgwNn0sCi0JezB4MDAsIDB4MDAxOCwgMHgyODA3fSwKLQl7MHgwMCwgMHgwMDA1LCAweDI4MDh9LAotCXsweDAwLCAweDAwMDUsIDB4MjgwOX0sCi0JezB4MDAsIDB4MDAwNiwgMHgyODBhfSwKLQl7MHgwMCwgMHgwMDA4LCAweDI4MGJ9LAotCXsweDAwLCAweDAwMGEsIDB4MjgwY30sCi0JezB4MDAsIDB4MDAxNywgMHgyODBkfSwKLQl7MHgwMCwgMHgwMDE4LCAweDI4MGV9LAotCXsweDAwLCAweDAwMTYsIDB4MjgwZn0sCi0KLQl7MHgwMCwgMHgwMDA2LCAweDI4MTB9LAotCXsweDAwLCAweDAwMDUsIDB4MjgxMX0sCi0JezB4MDAsIDB4MDAwNiwgMHgyODEyfSwKLQl7MHgwMCwgMHgwMDBhLCAweDI4MTN9LAotCXsweDAwLCAweDAwMTAsIDB4MjgxNH0sCi0JezB4MDAsIDB4MDAxNywgMHgyODE1fSwKLQl7MHgwMCwgMHgwMDFjLCAweDI4MTZ9LAotCXsweDAwLCAweDAwMTYsIDB4MjgxN30sCi0JezB4MDAsIDB4MDAwNiwgMHgyODE4fSwKLQl7MHgwMCwgMHgwMDA3LCAweDI4MTl9LAotCXsweDAwLCAweDAwMDksIDB4MjgxYX0sCi0JezB4MDAsIDB4MDAwYywgMHgyODFifSwKLQl7MHgwMCwgMHgwMDE0LCAweDI4MWN9LAotCXsweDAwLCAweDAwMjMsIDB4MjgxZH0sCi0JezB4MDAsIDB4MDAyMCwgMHgyODFlfSwKLQl7MHgwMCwgMHgwMDE5LCAweDI4MWZ9LAotCi0JezB4MDAsIDB4MDAwNywgMHgyODIwfSwKLQl7MHgwMCwgMHgwMDA5LCAweDI4MjF9LAotCXsweDAwLCAweDAwMGYsIDB4MjgyMn0sCi0JezB4MDAsIDB4MDAxNiwgMHgyODIzfSwKLQl7MHgwMCwgMHgwMDFiLCAweDI4MjR9LAotCXsweDAwLCAweDAwMmMsIDB4MjgyNX0sCi0JezB4MDAsIDB4MDAyOSwgMHgyODI2fSwKLQl7MHgwMCwgMHgwMDFmLCAweDI4Mjd9LAotCXsweDAwLCAweDAwMGEsIDB4MjgyOH0sCi0JezB4MDAsIDB4MDAwZSwgMHgyODI5fSwKLQl7MHgwMCwgMHgwMDE2LCAweDI4MmF9LAotCXsweDAwLCAweDAwMWEsIDB4MjgyYn0sCi0JezB4MDAsIDB4MDAyMCwgMHgyODJjfSwKLQl7MHgwMCwgMHgwMDJhLCAweDI4MmR9LAotCXsweDAwLCAweDAwMmQsIDB4MjgyZX0sCi0JezB4MDAsIDB4MDAyNSwgMHgyODJmfSwKLQotCXsweDAwLCAweDAwMTQsIDB4MjgzMH0sCi0JezB4MDAsIDB4MDAxYSwgMHgyODMxfSwKLQl7MHgwMCwgMHgwMDFmLCAweDI4MzJ9LAotCXsweDAwLCAweDAwMjMsIDB4MjgzM30sCi0JezB4MDAsIDB4MDAyOSwgMHgyODM0fSwKLQl7MHgwMCwgMHgwMDMwLCAweDI4MzV9LAotCXsweDAwLCAweDAwMzAsIDB4MjgzNn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODM3fSwKLQl7MHgwMCwgMHgwMDFkLCAweDI4Mzh9LAotCXsweDAwLCAweDAwMjUsIDB4MjgzOX0sCi0JezB4MDAsIDB4MDAyNiwgMHgyODNhfSwKLQl7MHgwMCwgMHgwMDI3LCAweDI4M2J9LAotCXsweDAwLCAweDAwMmQsIDB4MjgzY30sCi0JezB4MDAsIDB4MDAyOCwgMHgyODNkfSwKLQl7MHgwMCwgMHgwMDI5LCAweDI4M2V9LAotCXsweDAwLCAweDAwMjgsIDB4MjgzZn0sCi0KLQl7MHgwMCwgMHgwMDA3LCAweDI4NDB9LAotCXsweDAwLCAweDAwMDcsIDB4Mjg0MX0sCi0JezB4MDAsIDB4MDAwYSwgMHgyODQyfSwKLQl7MHgwMCwgMHgwMDEzLCAweDI4NDN9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg0NH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODQ1fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NDZ9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg0N30sCi0JezB4MDAsIDB4MDAwNywgMHgyODQ4fSwKLQl7MHgwMCwgMHgwMDA4LCAweDI4NDl9LAotCXsweDAwLCAweDAwMGEsIDB4Mjg0YX0sCi0JezB4MDAsIDB4MDAxYSwgMHgyODRifSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NGN9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg0ZH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODRlfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NGZ9LAotCi0JezB4MDAsIDB4MDAwYSwgMHgyODUwfSwKLQl7MHgwMCwgMHgwMDBhLCAweDI4NTF9LAotCXsweDAwLCAweDAwMTYsIDB4Mjg1Mn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODUzfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NTR9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg1NX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODU2fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NTd9LAotCXsweDAwLCAweDAwMTMsIDB4Mjg1OH0sCi0JezB4MDAsIDB4MDAxYSwgMHgyODU5fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NWF9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg1Yn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODVjfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NWR9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg1ZX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODVmfSwKLQotCXsweDAwLCAweDAwMjgsIDB4Mjg2MH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODYxfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NjJ9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2M30sCi0JezB4MDAsIDB4MDAyOCwgMHgyODY0fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NjV9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2Nn0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODY3fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4Njh9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2OX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODZhfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NmJ9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2Y30sCi0JezB4MDAsIDB4MDAyOCwgMHgyODZkfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NmV9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg2Zn0sCi0KLQl7MHgwMCwgMHgwMDI4LCAweDI4NzB9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3MX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODcyfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NzN9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3NH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODc1fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4NzZ9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3N30sCi0JezB4MDAsIDB4MDAyOCwgMHgyODc4fSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4Nzl9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3YX0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODdifSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4N2N9LAotCXsweDAwLCAweDAwMjgsIDB4Mjg3ZH0sCi0JezB4MDAsIDB4MDAyOCwgMHgyODdlfSwKLQl7MHgwMCwgMHgwMDI4LCAweDI4N2Z9LAogCiAJezB4YTAsIDB4MDAwMCwgMHgwNTAzfSwKIH07CkBAIC02MjIsNiArNDg2LDIwIEBACiAJUERFQlVHKERfRlJBTSwgImFmdGVyIHdhaXQgMHglMDR4Iiwgbm90ZG9uZSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNwY2E1MDRfcmVhZF9pbmZvKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgaTsKKwl1OCBpbmZvWzZdOworCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJaW5mb1tpXSA9IHJlZ19yXzEoZ3NwY2FfZGV2LCBpKTsKKwlQREVCVUcoRF9TVFJFQU0sCisJCSJSZWFkIGluZm86ICVkICVkICVkICVkICVkICVkLiIKKwkJIiBTaG91bGQgYmUgMSwwLDIsMiwwLDAiLAorCQlpbmZvWzBdLCBpbmZvWzFdLCBpbmZvWzJdLAorCQlpbmZvWzNdLCBpbmZvWzRdLCBpbmZvWzVdKTsKK30KKwogc3RhdGljIHZvaWQgc3BjYTUwNEFfYWNrbm93bGVkZ2VkX2NvbW1hbmQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJdTggcmVxLAogCQkJdTE2IGlkeCwgdTE2IHZhbCwgdTE2IGVuZGNvZGUsIHU4IGNvdW50KQpAQCAtODgxLDggKzc1OSw2IEBACiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgaTsKLQl1OCBpbmZvWzZdOwogCiAJc3dpdGNoIChzZC0+YnJpZGdlKSB7CiAJY2FzZSBCUklER0VfU1BDQTUwNEI6CkBAIC05MjQsMTUgKzgwMCw4IEBACiAvKgljYXNlIEJSSURHRV9TUENBNTA0OiAqLwogCQlQREVCVUcoRF9TVFJFQU0sICJPcGVuaW5nIFNQQ0E1MDQiKTsKIAkJaWYgKHNkLT5zdWJ0eXBlID09IEFpcHRla01pbmlQZW5DYW0xMykgewotCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJCQlpbmZvW2ldID0gcmVnX3JfMShnc3BjYV9kZXYsIGkpOwotCQkJUERFQlVHKERfU1RSRUFNLAotCQkJCSJSZWFkIGluZm86ICVkICVkICVkICVkICVkICVkLiIKLQkJCQkiIFNob3VsZCBiZSAxLDAsMiwyLDAsMCIsCi0JCQkJaW5mb1swXSwgaW5mb1sxXSwgaW5mb1syXSwKLQkJCQlpbmZvWzNdLCBpbmZvWzRdLCBpbmZvWzVdKTsKLQkJCS8qIHNwY2E1MDRhIGFpcHRlayAqLworCQkJc3BjYTUwNF9yZWFkX2luZm8oZ3NwY2FfZGV2KTsKKwogCQkJLyogU2V0IEFFIEFXQiBCYW5kaW5nIFR5cGUgMy0+IDUwSHogMi0+IDYwSHogKi8KIAkJCXNwY2E1MDRBX2Fja25vd2xlZGdlZF9jb21tYW5kKGdzcGNhX2RldiwgMHgyNCwKIAkJCQkJCQk4LCAzLCAweDllLCAxKTsKQEAgLTk3MSw4ICs4NDAsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgZW5hYmxlOwotCWludCBpOwotCXU4IGluZm9bNl07CiAKIAkvKiBjcmVhdGUgdGhlIEpQRUcgaGVhZGVyICovCiAJc2QtPmpwZWdfaGRyID0ga21hbGxvYyhKUEVHX0hEUl9TWiwgR0ZQX0tFUk5FTCk7CkBAIC0xMDA4LDE0ICs4NzUsOCBAQAogCQlicmVhazsKIAljYXNlIEJSSURHRV9TUENBNTA0OgogCQlpZiAoc2QtPnN1YnR5cGUgPT0gQWlwdGVrTWluaVBlbkNhbTEzKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQkJCWluZm9baV0gPSByZWdfcl8xKGdzcGNhX2RldiwgaSk7Ci0JCQlQREVCVUcoRF9TVFJFQU0sCi0JCQkJIlJlYWQgaW5mbzogJWQgJWQgJWQgJWQgJWQgJWQuIgotCQkJCSIgU2hvdWxkIGJlIDEsMCwyLDIsMCwwIiwKLQkJCQlpbmZvWzBdLCBpbmZvWzFdLCBpbmZvWzJdLAotCQkJCWluZm9bM10sIGluZm9bNF0sIGluZm9bNV0pOwotCQkJLyogc3BjYTUwNGEgYWlwdGVrICovCisJCQlzcGNhNTA0X3JlYWRfaW5mbyhnc3BjYV9kZXYpOworCiAJCQkvKiBTZXQgQUUgQVdCIEJhbmRpbmcgVHlwZSAzLT4gNTBIeiAyLT4gNjBIeiAqLwogCQkJc3BjYTUwNEFfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LAogCQkJCQkJCTgsIDMsIDB4OWUsIDEpOwpAQCAtMTAyNiwxMyArODg3LDcgQEAKIAkJCQkJCQkwLCAwLCAweDlkLCAxKTsKIAkJfSBlbHNlIHsKIAkJCXNwY2E1MDRfYWNrbm93bGVkZ2VkX2NvbW1hbmQoZ3NwY2FfZGV2LCAweDI0LCA4LCAzKTsKLQkJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCQkJaW5mb1tpXSA9IHJlZ19yXzEoZ3NwY2FfZGV2LCBpKTsKLQkJCVBERUJVRyhEX1NUUkVBTSwKLQkJCQkiUmVhZCBpbmZvOiAlZCAlZCAlZCAlZCAlZCAlZC4iCi0JCQkJIiBTaG91bGQgYmUgMSwwLDIsMiwwLDAiLAotCQkJCWluZm9bMF0sIGluZm9bMV0sIGluZm9bMl0sCi0JCQkJaW5mb1szXSwgaW5mb1s0XSwgaW5mb1s1XSk7CisJCQlzcGNhNTA0X3JlYWRfaW5mbyhnc3BjYV9kZXYpOwogCQkJc3BjYTUwNF9hY2tub3dsZWRnZWRfY29tbWFuZChnc3BjYV9kZXYsIDB4MjQsIDgsIDMpOwogCQkJc3BjYTUwNF9hY2tub3dsZWRnZWRfY29tbWFuZChnc3BjYV9kZXYsIDB4MjQsIDAsIDApOwogCQl9CkBAIC0xMzM2LDYgKzExOTEsNyBAQAogCXtVU0JfREVWSUNFKDB4MDRmYywgMHg1MzMwKSwgQlMoU1BDQTUzMywgMCl9LAogCXtVU0JfREVWSUNFKDB4MDRmYywgMHg1MzYwKSwgQlMoU1BDQTUzNiwgMCl9LAogCXtVU0JfREVWSUNFKDB4MDRmYywgMHhmZmZmKSwgQlMoU1BDQTUwNEIsIDApfSwKKwl7VVNCX0RFVklDRSgweDA1MmIsIDB4MTUwNyksIEJTKFNQQ0E1MzMsIE1lZ2FwaXhWNCl9LAogCXtVU0JfREVWSUNFKDB4MDUyYiwgMHgxNTEzKSwgQlMoU1BDQTUzMywgTWVnYXBpeFY0KX0sCiAJe1VTQl9ERVZJQ0UoMHgwNTJiLCAweDE4MDMpLCBCUyhTUENBNTMzLCBNZWdhSW1hZ2VWSSl9LAogCXtVU0JfREVWSUNFKDB4MDU0NiwgMHgzMTU1KSwgQlMoU1BDQTUzMywgMCl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYwppbmRleCA1NWVmNmE3Li42NjhhNzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYwpAQCAtNTIsNiArNTIsNyBAQAogI2RlZmluZSBTRU5TT1JfT002ODAyIDAKICNkZWZpbmUgU0VOU09SX09USEVSIDEKICNkZWZpbmUgU0VOU09SX1RBUzUxMzBBIDIKKyNkZWZpbmUgU0VOU09SX0xUMTY4RyAzICAgICAvKiBtdXN0IHZlcmlmeSBpZiB0aGlzIGlzIHRoZSBhY3R1YWwgbW9kZWwgKi8KIH07CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KQEAgLTc4LDcgKzc5LDcgQEAKIHN0YXRpYyBpbnQgc2RfcXVlcnltZW51KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqbWVudSk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtMzA2LDYgKzMwNywxNyBAQAogCTB4YmUsIDB4MzYsIDB4YmYsIDB4ZmYsIDB4YzIsIDB4ODgsIDB4YzUsIDB4YzgsCiAJMHhjNiwgMHhkYQogfTsKK3N0YXRpYyBjb25zdCB1OCBuNF9sdDE2OGdbXSA9IHsKKwkweDY2LCAweDAxLCAweDdmLCAweDAwLCAweDgwLCAweDdjLCAweDgxLCAweDI4LAorCTB4ODMsIDB4NDQsIDB4ODQsIDB4MjAsIDB4ODYsIDB4MjAsIDB4OGEsIDB4NzAsCisJMHg4YiwgMHg1OCwgMHg4YywgMHg4OCwgMHg4ZCwgMHhhMCwgMHg4ZSwgMHhiMywKKwkweDhmLCAweDI0LCAweGExLCAweGIwLCAweGEyLCAweDM4LCAweGE1LCAweDIwLAorCTB4YTYsIDB4NGEsIDB4YTgsIDB4ZTgsIDB4YWYsIDB4MzgsIDB4YjAsIDB4NjgsCisJMHhiMSwgMHg0NCwgMHhiMiwgMHg4OCwgMHhiYiwgMHg4NiwgMHhiZCwgMHg0MCwKKwkweGJlLCAweDI2LCAweGMxLCAweDA1LCAweGMyLCAweDg4LCAweGM1LCAweGMwLAorCTB4ZGEsIDB4OGUsIDB4ZGIsIDB4Y2EsIDB4ZGMsIDB4YTgsIDB4ZGQsIDB4OGMsCisJMHhkZSwgMHg0NCwgMHhkZiwgMHgwYywgMHhlOSwgMHg4MAorfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRpdGlvbmFsX3NlbnNvcl9kYXRhIHNlbnNvcl9kYXRhW10gPSB7CiAgICAgewkJCQkvKiAwOiBPTTY4MDIgKi8KQEAgLTM4MCw2ICszOTIsMjMgQEAKIAkuc3RyZWFtID0KIAkJezB4MGIsIDB4MDQsIDB4MGEsIDB4NDB9LAogICAgIH0sCisgICAgewkJCQkvKiAzOiBMVDE2OEcgKi8KKwkubjMgPSB7MHg2MSwgMHhjMiwgMHg2NSwgMHg2OCwgMHg2MCwgMHgwMH0sCisJLm40ID0gbjRfbHQxNjhnLAorCS5uNHN6ID0gc2l6ZW9mIG40X2x0MTY4ZywKKwkucmVnODAgPSAweDdjLAorCS5yZWc4ZSA9IDB4YjMsCisJLm5zZXQ4ID0gezB4YTgsIDB4ZjAsIDB4YzYsIDB4YmEsIDB4YzAsIDB4MDB9LAorCS5kYXRhMSA9IHsweGMwLCAweDM4LCAweDA4LCAweDEwLCAweGMwLCAweDMwLCAweDEwLCAweDQwLAorCQkgMHhiMCwgMHhmNH0sCisJLmRhdGEyID0gezB4NDAsIDB4ODAsIDB4YzAsIDB4NTAsIDB4YTAsIDB4ZjAsIDB4NTMsIDB4YTYsCisJCSAweGZmfSwKKwkuZGF0YTMgPSB7MHg0MCwgMHg4MCwgMHhjMCwgMHg1MCwgMHhhMCwgMHhmMCwgMHg1MywgMHhhNiwKKwkJIDB4ZmZ9LAorCS5kYXRhNCA9IHsweDY2LCAweDQxLCAweGE4LCAweGYwfSwKKwkuZGF0YTUgPSB7MHgwYywgMHgwMywgMHhhYiwgMHg0YiwgMHg4MSwgMHgyYn0sCisJLnN0cmVhbSA9IHsweDBiLCAweDA0LCAweDBhLCAweDI4fSwKKyAgICB9LAogfTsKIAogI2RlZmluZSBNQVhfRUZGRUNUUyA3CkBAIC03MTYsNiArNzQ1LDEwIEBACiAJCVBERUJVRyhEX1BST0JFLCAic2Vuc29yIHRhczUxMzBhIik7CiAJCXNkLT5zZW5zb3IgPSBTRU5TT1JfVEFTNTEzMEE7CiAJCWJyZWFrOworCWNhc2UgMHgwODAyOgorCQlQREVCVUcoRF9QUk9CRSwgInNlbnNvciBsdDE2OGciKTsKKwkJc2QtPnNlbnNvciA9IFNFTlNPUl9MVDE2OEc7CisJCWJyZWFrOwogCWNhc2UgMHgwODAzOgogCQlQREVCVUcoRF9QUk9CRSwgInNlbnNvciAnb3RoZXInIik7CiAJCXNkLT5zZW5zb3IgPSBTRU5TT1JfT1RIRVI7CkBAIC03NTgsNiArNzkxLDEzIEBACiAJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yLT5uMywgc2l6ZW9mIHNlbnNvci0+bjMpOwogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvci0+bjQsIHNlbnNvci0+bjRzeik7CiAKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfTFQxNjhHKSB7CisJCXRlc3RfYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHg4MCk7CisJCVBERUJVRyhEX1NUUkVBTSwgIlJlZyAweCUwMnggPSAweCUwMngiLCAweDgwLAorCQkgICAgICAgdGVzdF9ieXRlKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDZjODApOworCX0KKwogCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhkMCwgc2Vuc29yLT5kYXRhMSwgc2l6ZW9mIHNlbnNvci0+ZGF0YTEpOwogCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhjNywgc2Vuc29yLT5kYXRhMiwgc2l6ZW9mIHNlbnNvci0+ZGF0YTIpOwogCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhlMCwgc2Vuc29yLT5kYXRhMywgc2l6ZW9mIHNlbnNvci0+ZGF0YTMpOwpAQCAtNzgyLDYgKzgyMiwxMyBAQAogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvci0+bnNldDgsIHNpemVvZiBzZW5zb3ItPm5zZXQ4KTsKIAlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3ItPnN0cmVhbSwgc2l6ZW9mIHNlbnNvci0+c3RyZWFtKTsKIAorCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9MVDE2OEcpIHsKKwkJdGVzdF9ieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDgwKTsKKwkJUERFQlVHKERfU1RSRUFNLCAiUmVnIDB4JTAyeCA9IDB4JTAyeCIsIDB4ODAsCisJCSAgICAgICB0ZXN0X2J5dGUpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4NmM4MCk7CisJfQorCiAJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGQwLCBzZW5zb3ItPmRhdGExLCBzaXplb2Ygc2Vuc29yLT5kYXRhMSk7CiAJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGM3LCBzZW5zb3ItPmRhdGEyLCBzaXplb2Ygc2Vuc29yLT5kYXRhMik7CiAJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGUwLCBzZW5zb3ItPmRhdGEzLCBzaXplb2Ygc2Vuc29yLT5kYXRhMyk7CkBAIC04ODgsNiArOTM1LDggQEAKIAljYXNlIFNFTlNPUl9PTTY4MDI6CiAJCW9tNjgwMl9zZW5zb3JfaW5pdChnc3BjYV9kZXYpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9MVDE2OEc6CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX09USEVSOgogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMKaW5kZXggYjc0YTNiNi4uYzdiNmViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jCkBAIC0zOSw3ICszOSw3IEBACiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKaW5kZXggNzE5MjFjOC4uNDk4OWY5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCkBAIC0zMiwxMCArMzIsMTMgQEAKIHN0cnVjdCBzZCB7CiAJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAorCXU4IGJyaWdodG5lc3M7CisJdTggY29udHJhc3Q7CisJdTggY29sb3JzOwogCXU4IGhmbGlwOwogCXU4IHZmbGlwOwogCXU4IGxpZ2h0ZnJlcTsKLQl1OCBzaGFycG5lc3M7CisJczggc2hhcnBuZXNzOwogCiAJdTggaW1hZ2Vfb2Zmc2V0OwogCkBAIC01Miw2ICs1NSw3IEBACiAjZGVmaW5lIFNFTlNPUl9PVjc2NzAgNgogI2RlZmluZSBTRU5TT1JfUE8xMjAwIDcKICNkZWZpbmUgU0VOU09SX1BPMzEzME5DIDgKKyNkZWZpbmUgU0VOU09SX1BPeHh4eCA5CiAJdTggZmxhZ3M7CiAjZGVmaW5lIEZMX1NBTVNVTkcgMHgwMQkJLyogU2Ftc3VuZ1ExICgyIHNlbnNvcnMpICovCiAjZGVmaW5lIEZMX0hGTElQIDB4MDIJCS8qIG1pcnJvcmVkIGJ5IGRlZmF1bHQgKi8KQEAgLTU5LDYgKzYzLDEyIEBACiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldGhmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0aGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0dmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwpAQCAtNjgsOSArNzgsNTQgQEAKIHN0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisjZGVmaW5lIEJSSUdIVE5FU1NfSURYIDAKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkJyaWdodG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMjU1LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEJSSUdIVE5FU1NfREVGIDEyOAorCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKKwkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCisJfSwKKyNkZWZpbmUgQ09OVFJBU1RfSURYIDEKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJDb250cmFzdCIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAyNTUsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQ09OVFJBU1RfREVGIDEyNworCQkuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGNvbnRyYXN0LAorCSAgICAuZ2V0ID0gc2RfZ2V0Y29udHJhc3QsCisJfSwKKyNkZWZpbmUgQ09MT1JTX0lEWCAyCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJTYXR1cmF0aW9uIiwKKwkJLm1pbmltdW0gPSAxLAorCQkubWF4aW11bSA9IDEyNywKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBDT0xPUl9ERUYgNjMKKwkJLmRlZmF1bHRfdmFsdWUgPSBDT0xPUl9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRjb2xvcnMsCisJICAgIC5nZXQgPSBzZF9nZXRjb2xvcnMsCisJfSwKIC8qIG5leHQgMiBjb250cm9scyB3b3JrIHdpdGggc29tZSBzZW5zb3JzIG9ubHkgKi8KLSNkZWZpbmUgSEZMSVBfSURYIDAKKyNkZWZpbmUgSEZMSVBfSURYIDMKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9IRkxJUCwKQEAgLTg1LDcgKzE0MCw3IEBACiAJICAgIC5zZXQgPSBzZF9zZXRoZmxpcCwKIAkgICAgLmdldCA9IHNkX2dldGhmbGlwLAogCX0sCi0jZGVmaW5lIFZGTElQX0lEWCAxCisjZGVmaW5lIFZGTElQX0lEWCA0CiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfVkZMSVAsCkBAIC0xMDAsNyArMTU1LDcgQEAKIAkgICAgLnNldCA9IHNkX3NldHZmbGlwLAogCSAgICAuZ2V0ID0gc2RfZ2V0dmZsaXAsCiAJfSwKLSNkZWZpbmUgTElHSFRGUkVRX0lEWCAyCisjZGVmaW5lIExJR0hURlJFUV9JRFggNQogCXsKIAkgICAgewogCQkuaWQJID0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCkBAIC0xMTUsMTcgKzE3MCwxNiBAQAogCSAgICAuc2V0ID0gc2Rfc2V0ZnJlcSwKIAkgICAgLmdldCA9IHNkX2dldGZyZXEsCiAJfSwKLS8qIHBvMTIwMCBvbmx5ICovCi0jZGVmaW5lIFNIQVJQTkVTU19JRFggMworI2RlZmluZSBTSEFSUE5FU1NfSURYIDYKIAl7CiAJIHsKIAkgIC5pZCA9IFY0TDJfQ0lEX1NIQVJQTkVTUywKIAkgIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkgIC5uYW1lID0gIlNoYXJwbmVzcyIsCi0JICAubWluaW11bSA9IDAsCisJICAubWluaW11bSA9IC0xLAogCSAgLm1heGltdW0gPSAyLAogCSAgLnN0ZXAgPSAxLAotI2RlZmluZSBTSEFSUE5FU1NfREVGIDEKKyNkZWZpbmUgU0hBUlBORVNTX0RFRiAtMQogCSAgLmRlZmF1bHRfdmFsdWUgPSBTSEFSUE5FU1NfREVGLAogCSAgfSwKIAkgLnNldCA9IHNkX3NldHNoYXJwbmVzcywKQEAgLTEzMyw2ICsxODcsNDIgQEAKIAkgfSwKIH07CiAKKy8qIHRhYmxlIG9mIHRoZSBkaXNhYmxlZCBjb250cm9scyAqLworc3RhdGljIHUzMiBjdHJsX2Rpc1tdID0geworLyogU0VOU09SX0hWNzEzMVIgMCAqLworCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQorCQl8ICgxIDw8IEhGTElQX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgTElHSFRGUkVRX0lEWCkKKwkJfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKy8qIFNFTlNPUl9NSTAzNjAgMSAqLworCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQorCQl8ICgxIDw8IEhGTElQX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgTElHSFRGUkVRX0lEWCkKKwkJfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKy8qIFNFTlNPUl9NSTEzMTBfU09DIDIgKi8KKwkoMSA8PCBCUklHSFRORVNTX0lEWCkgfCAoMSA8PCBDT05UUkFTVF9JRFgpIHwgKDEgPDwgQ09MT1JTX0lEWCkKKwkJfCAoMSA8PCBMSUdIVEZSRVFfSURYKSB8ICgxIDw8IFNIQVJQTkVTU19JRFgpLAorLyogU0VOU09SX01JMTMyMCAzICovCisJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCisJCXwgKDEgPDwgTElHSFRGUkVRX0lEWCkgfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKy8qIFNFTlNPUl9NSTEzMjBfU09DIDQgKi8KKwkoMSA8PCBCUklHSFRORVNTX0lEWCkgfCAoMSA8PCBDT05UUkFTVF9JRFgpIHwgKDEgPDwgQ09MT1JTX0lEWCkKKwkJfCAoMSA8PCBMSUdIVEZSRVFfSURYKSB8ICgxIDw8IFNIQVJQTkVTU19JRFgpLAorLyogU0VOU09SX09WNzY2MCA1ICovCisJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCisJCXwgKDEgPDwgTElHSFRGUkVRX0lEWCkgfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKy8qIFNFTlNPUl9PVjc2NzAgNiAqLworCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQorCQl8ICgxIDw8IFNIQVJQTkVTU19JRFgpLAorLyogU0VOU09SX1BPMTIwMCA3ICovCisJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCisJCXwgKDEgPDwgTElHSFRGUkVRX0lEWCksCisvKiBTRU5TT1JfUE8zMTMwTkMgOCAqLworCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQorCQl8ICgxIDw8IEhGTElQX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgTElHSFRGUkVRX0lEWCkKKwkJfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKy8qIFNFTlNPUl9QT3h4eHggOSAqLworCSgxIDw8IEhGTElQX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgTElHSFRGUkVRX0lEWCksCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB2YzAzMjFfbW9kZVtdID0gewogCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX1lWWVUsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDMyMCwKQEAgLTIxNSw3ICszMDUsNyBAQAogCXsweGIzLCAweDE1LCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCiAJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAotCXsweGIzLCAweDM1LCAweGRkLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhkZCwgMHhjY30sCS8qIGkyYyBhZGQ6IDVkICovCiAJezB4YjMsIDB4MzQsIDB4MDIsIDB4Y2N9LAogCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwKIAl7MHhiYywgMHgwMCwgMHg3MSwgMHhjY30sCkBAIC00MzUsNyArNTI1LDcgQEAKIAl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAogCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKLQl7MHhiMywgMHgzNSwgMHhkZCwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4ZGQsIDB4Y2N9LAkvKiBpMmMgYWRkOiA1ZCAqLwogCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCiAJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LApAQCAtODYwLDcgKzk1MCw4IEBACiAJezB4YjAsIDB4MTYsIDB4MDMsIDB4Y2N9LAl7MHhiMywgMHgwNSwgMHgwMCwgMHhjY30sCiAJezB4YjMsIDB4MDYsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCi0JezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAl7MHhiMywgMHgwMiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAkvKiBpMmMgYWRkOiA0OCAqLworCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCXsweGIzLCAweDA0LCAweDA1LCAweGNjfSwKIAl7MHhiMywgMHgyMCwgMHgwMCwgMHhjY30sCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgyMiwgMHgwMywgMHhjY30sCXsweGIzLCAweDIzLCAweGMwLCAweGNjfSwKQEAgLTkwMSw3ICs5OTIsOCBAQAogCXsweGMzLCAweDAxLCAweDAzLCAweGJifSwJezB4YzQsIDB4MDAsIDB4MDQsIDB4YmJ9LAogCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwJezB4MDUsIDB4MDEsIDB4MTMsIDB4YmJ9LAogCXsweDA2LCAweDAwLCAweDExLCAweGJifSwJezB4MDcsIDB4MDAsIDB4ODUsIDB4YmJ9LAotCXsweDA4LCAweDAwLCAweDI3LCAweGJifSwJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDI3LCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMCwgMHhiYn0sCS8qIGgvdiBmbGlwcyAtIHdhcyAwMyAqLwogCXsweDIxLCAweDgwLCAweDAwLCAweGJifSwJezB4MjIsIDB4MGQsIDB4MGYsIDB4YmJ9LAogCXsweDI0LCAweDgwLCAweDAwLCAweGJifSwJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAogCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwJezB4MzksIDB4MDMsIDB4MGQsIDB4YmJ9LApAQCAtMTAxMiw3ICsxMTA0LDcgQEAKIAl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAogCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKLQl7MHhiMywgMHgzNSwgMHhjOCwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAkvKiBpMmMgYWRkOiA0OCAqLwogCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCiAJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LApAQCAtMTM1OSw3ICsxNDUxLDggQEAKIAl7MHhiMywgMHgyMywgMHhlOCwgMHhjY30sCXsweGI4LCAweDA4LCAweGU4LCAweGNjfSwKIAl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCXsweGIzLCAweDE1LCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwKLQl7MHhiMywgMHgzNCwgMHgwMSwgMHhjY30sCXsweGIzLCAweDM1LCAweGY2LCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4ZjYsIDB4Y2N9LAkvKiBpMmMgYWRkOiA3NiAqLwogCXsweGIzLCAweDAwLCAweDI3LCAweGNjfSwJezB4YmMsIDB4MDAsIDB4NzEsIDB4Y2N9LAogCXsweGI4LCAweDAwLCAweDIxLCAweGNjfSwJezB4YjgsIDB4MjcsIDB4MjAsIDB4Y2N9LAogCXsweGI4LCAweDAxLCAweDc5LCAweGNjfSwJezB4YjgsIDB4ODEsIDB4MDksIDB4Y2N9LApAQCAtMTU2MSw3ICsxNjU0LDcgQEAKIAl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCiAJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAogCXsweGIzLCAweDM0LCAweDAxLCAweGNjfSwKLQl7MHhiMywgMHgzNSwgMHg5MSwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4OTEsIDB4Y2N9LAkvKiBpMmMgYWRkOiAxMSAqLwogCXsweGIzLCAweDAwLCAweDI3LCAweGNjfSwKIAl7MHhiYywgMHgwMCwgMHg3MywgMHhjY30sCiAJezB4YjgsIDB4MDAsIDB4MjMsIDB4Y2N9LApAQCAtMTc0Nyw3ICsxODQwLDggQEAKIAl7MHhiMywgMHgyMywgMHhlMCwgMHhjY30sCXsweGIzLCAweDFkLCAweDAxLCAweGNjfSwKIAl7MHhiMywgMHgxZiwgMHgwMiwgMHhjY30sCiAJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAotCXsweGIzLCAweDM1LCAweGExLCAweGNjfSwJezB4YjMsIDB4MDAsIDB4MjYsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGExLCAweGNjfSwJLyogaTJjIGFkZDogMjEgKi8KKwl7MHhiMywgMHgwMCwgMHgyNiwgMHhjY30sCiAJezB4YjgsIDB4MDAsIDB4MzMsIDB4Y2N9LCAvKiAxMyAqLwogCXsweGI4LCAweDAxLCAweDdkLCAweGNjfSwKIAl7MHhiYywgMHgwMCwgMHg3MywgMHhjY30sCXsweGI4LCAweDgxLCAweDA5LCAweGNjfSwKQEAgLTE4ODMsNyArMTk3Nyw4IEBACiAJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAogCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAogCXsweGIzLCAweDAwLCAweDY2LCAweGNjfSwJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAotCXsweGIzLCAweDM1LCAweGExLCAweGNjfSwJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGExLCAweGNjfSwJLyogaTJjIGFkZDogMjEgKi8KKwl7MHhiMywgMHgzNCwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDUsIDB4MDEsIDB4Y2N9LAl7MHhiMywgMHgwNiwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCiAJezB4YjMsIDB4MDIsIDB4MDIsIDB4Y2N9LAl7MHhiMywgMHgwMywgMHgxZiwgMHhjY30sCkBAIC0yMTgxLDcgKzIyNzYsNyBAQAogCXsweGIwLCAweDU0LCAweDEzLCAweGNjfSwKIAl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCiAJezB4YjMsIDB4MzQsIDB4MDEsIDB4Y2N9LAotCXsweGIzLCAweDM1LCAweGRjLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhkYywgMHhjY30sCS8qIGkyYyBhZGQ6IDVjICovCiAJezB4MDAsIDB4MDMsIDB4MDAsIDB4YWF9LAogCXsweDAwLCAweDEyLCAweDA1LCAweGFhfSwKIAl7MHgwMCwgMHgxMywgMHgwMiwgMHhhYX0sCkBAIC0yNDA4LDYgKzI1MDMsMjUxIEBACiAJezB4MDAsIDB4YjYsIDB4MzksIDB4YWF9LAogCXsweDAwLCAweGI3LCAweDI0LCAweGFhfSwKIC8qd3JpdGUgODkgMDQwMCAxNDE1Ki8KKwl7fQorfTsKKworc3RhdGljIGNvbnN0IHU4IHBveHh4eF9pbml0X2NvbW1vbltdWzRdID0geworCXsweGIzLCAweDAwLCAweDA0LCAweGNjfSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4YjMsIDB4MDAsIDB4NjQsIDB4Y2N9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHhiMywgMHgwMCwgMHg2NSwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweGIzLCAweDAwLCAweDY3LCAweGNjfSwKKwl7MHhiMCwgMHgwMywgMHgwOSwgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4ZjYsIDB4Y2N9LAkvKiBpMmMgYWRkOiA3NiAqLworCXsweGIzLCAweDAyLCAweGIwLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgxOCwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MTUsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDA0LCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHhmZiwgMHhjY30sCisJezB4YjMsIDB4MmMsIDB4MDMsIDB4Y2N9LAorCXsweGIzLCAweDJkLCAweDU2LCAweGNjfSwKKwl7MHhiMywgMHgyZSwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MmYsIDB4MGEsIDB4Y2N9LAorCXsweGIzLCAweDQwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHg0MSwgMHgzNCwgMHhjY30sCisJezB4YjMsIDB4NDIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDQzLCAweGUwLCAweGNjfSwKKwl7MHhiYywgMHgwMCwgMHg3MSwgMHhjY30sCisJezB4YmMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwKKwl7MHhiMywgMHg0ZCwgMHgwMCwgMHhjY30sCisJezB4MDAsIDB4MGIsIDB4MmEsIDB4YWF9LAorCXsweDAwLCAweDBlLCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHgwZiwgMHhlYSwgMHhhYX0sCisJezB4MDAsIDB4MTIsIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweDFlLCAweDA2LCAweGFhfSwKKwl7MHgwMCwgMHgyMSwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4MzEsIDB4MWYsIDB4YWF9LAorCXsweDAwLCAweDMzLCAweDM4LCAweGFhfSwKKwl7MHgwMCwgMHgzNiwgMHhjMCwgMHhhYX0sCisJezB4MDAsIDB4MzcsIDB4YzgsIDB4YWF9LAorCXsweDAwLCAweDNiLCAweDM2LCAweGFhfSwKKwl7MHgwMCwgMHg0YiwgMHhmZSwgMHhhYX0sCisJezB4MDAsIDB4NGQsIDB4MmUsIDB4YWF9LAorCXsweDAwLCAweDUxLCAweDFjLCAweGFhfSwKKwl7MHgwMCwgMHg1MiwgMHgwMSwgMHhhYX0sCisJezB4MDAsIDB4NTUsIDB4MGEsIDB4YWF9LAorCXsweDAwLCAweDU2LCAweDBhLCAweGFhfSwKKwl7MHgwMCwgMHg1NywgMHgwNywgMHhhYX0sCisJezB4MDAsIDB4NTgsIDB4MDcsIDB4YWF9LAorCXsweDAwLCAweDU5LCAweDA0LCAweGFhfSwKKwl7MHgwMCwgMHg3MCwgMHg2OCwgMHhhYX0sCisJezB4MDAsIDB4NzEsIDB4MDQsIDB4YWF9LAorCXsweDAwLCAweDcyLCAweDEwLCAweGFhfSwKKwl7MHgwMCwgMHg4MCwgMHg3MSwgMHhhYX0sCisJezB4MDAsIDB4ODEsIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweDgyLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg4MywgMHg1NSwgMHhhYX0sCisJezB4MDAsIDB4ODQsIDB4MDYsIDB4YWF9LAorCXsweDAwLCAweDg1LCAweDA2LCAweGFhfSwKKwl7MHgwMCwgMHg4YiwgMHgyNSwgMHhhYX0sCisJezB4MDAsIDB4OGMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDhkLCAweDg2LCAweGFhfSwKKwl7MHgwMCwgMHg4ZSwgMHg4MiwgMHhhYX0sCisJezB4MDAsIDB4OGYsIDB4MmQsIDB4YWF9LAorCXsweDAwLCAweDkwLCAweDhiLCAweGFhfSwKKwl7MHgwMCwgMHg5MSwgMHg4MSwgMHhhYX0sCisJezB4MDAsIDB4OTIsIDB4ODEsIDB4YWF9LAorCXsweDAwLCAweDkzLCAweDIzLCAweGFhfSwKKwl7MHgwMCwgMHhhMywgMHgyYSwgMHhhYX0sCisJezB4MDAsIDB4YTQsIDB4MDMsIDB4YWF9LAorCXsweDAwLCAweGE1LCAweGVhLCAweGFhfSwKKwl7MHgwMCwgMHhiMCwgMHg2OCwgMHhhYX0sCisJezB4MDAsIDB4YmMsIDB4MDQsIDB4YWF9LAorCXsweDAwLCAweGJlLCAweDNiLCAweGFhfSwKKwl7MHgwMCwgMHg0ZSwgMHg0MCwgMHhhYX0sCisJezB4MDAsIDB4MDYsIDB4MDQsIDB4YWF9LAorCXsweDAwLCAweDA3LCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHhjZCwgMHgxOCwgMHhhYX0sCisJezB4MDAsIDB4MjgsIDB4MDMsIDB4YWF9LAorCXsweDAwLCAweDI5LCAweGVmLCAweGFhfSwKKy8qIHJlaW5pdCBvbiBhbHQgMiAocXZnYSkgb3IgYWx0NyAodmdhKSAqLworCXsweGIzLCAweDA1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MDAsIDB4MDEsIDB4Y2N9LAorCisJezB4MDAsIDB4MWQsIDB4ODUsIDB4YWF9LAorCXsweDAwLCAweDFlLCAweGM2LCAweGFhfSwKKwl7MHgwMCwgMHgwMCwgMHg0MCwgMHhkZH0sCisJezB4MDAsIDB4MWQsIDB4MDUsIDB4YWF9LAorCisJezB4MDAsIDB4ZDYsIDB4MjIsIDB4YWF9LAkvKiBnYW1tYSAwICovCisJezB4MDAsIDB4NzMsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDc0LCAweDBhLCAweGFhfSwKKwl7MHgwMCwgMHg3NSwgMHgxNiwgMHhhYX0sCisJezB4MDAsIDB4NzYsIDB4MjUsIDB4YWF9LAorCXsweDAwLCAweDc3LCAweDM0LCAweGFhfSwKKwl7MHgwMCwgMHg3OCwgMHg0OSwgMHhhYX0sCisJezB4MDAsIDB4NzksIDB4NWEsIDB4YWF9LAorCXsweDAwLCAweDdhLCAweDdmLCAweGFhfSwKKwl7MHgwMCwgMHg3YiwgMHg5YiwgMHhhYX0sCisJezB4MDAsIDB4N2MsIDB4YmEsIDB4YWF9LAorCXsweDAwLCAweDdkLCAweGQ0LCAweGFhfSwKKwl7MHgwMCwgMHg3ZSwgMHhlYSwgMHhhYX0sCisKKwl7MHgwMCwgMHhkNiwgMHg2MiwgMHhhYX0sCS8qIGdhbW1hIDEgKi8KKwl7MHgwMCwgMHg3MywgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4NzQsIDB4MGEsIDB4YWF9LAorCXsweDAwLCAweDc1LCAweDE2LCAweGFhfSwKKwl7MHgwMCwgMHg3NiwgMHgyNSwgMHhhYX0sCisJezB4MDAsIDB4NzcsIDB4MzQsIDB4YWF9LAorCXsweDAwLCAweDc4LCAweDQ5LCAweGFhfSwKKwl7MHgwMCwgMHg3OSwgMHg1YSwgMHhhYX0sCisJezB4MDAsIDB4N2EsIDB4N2YsIDB4YWF9LAorCXsweDAwLCAweDdiLCAweDliLCAweGFhfSwKKwl7MHgwMCwgMHg3YywgMHhiYSwgMHhhYX0sCisJezB4MDAsIDB4N2QsIDB4ZDQsIDB4YWF9LAorCXsweDAwLCAweDdlLCAweGVhLCAweGFhfSwKKworCXsweDAwLCAweGQ2LCAweGEyLCAweGFhfSwJLyogZ2FtbWEgMiAqLworCXsweDAwLCAweDczLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg3NCwgMHgwYSwgMHhhYX0sCisJezB4MDAsIDB4NzUsIDB4MTYsIDB4YWF9LAorCXsweDAwLCAweDc2LCAweDI1LCAweGFhfSwKKwl7MHgwMCwgMHg3NywgMHgzNCwgMHhhYX0sCisJezB4MDAsIDB4NzgsIDB4NDksIDB4YWF9LAorCXsweDAwLCAweDc5LCAweDVhLCAweGFhfSwKKwl7MHgwMCwgMHg3YSwgMHg3ZiwgMHhhYX0sCisJezB4MDAsIDB4N2IsIDB4OWIsIDB4YWF9LAorCXsweDAwLCAweDdjLCAweGJhLCAweGFhfSwKKwl7MHgwMCwgMHg3ZCwgMHhkNCwgMHhhYX0sCisJezB4MDAsIDB4N2UsIDB4ZWEsIDB4YWF9LAorCisJezB4MDAsIDB4YWEsIDB4ZmYsIDB4YWF9LAkvKiBiYWNrIGxpZ2h0IGNvbXAgKi8KKwl7MHgwMCwgMHhjNCwgMHgwMywgMHhhYX0sCisJezB4MDAsIDB4YzUsIDB4MTksIDB4YWF9LAorCXsweDAwLCAweGM2LCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHhjNywgMHg5MSwgMHhhYX0sCisJezB4MDAsIDB4YzgsIDB4MDEsIDB4YWF9LAorCXsweDAwLCAweGM5LCAweGRkLCAweGFhfSwKKwl7MHgwMCwgMHhjYSwgMHgwMiwgMHhhYX0sCisJezB4MDAsIDB4Y2IsIDB4MzcsIDB4YWF9LAorCisvKiByZWFkIGQxICovCisJezB4MDAsIDB4ZDEsIDB4M2MsIDB4YWF9LAorCXsweDAwLCAweGI4LCAweDI4LCAweGFhfSwKKwl7MHgwMCwgMHhiOSwgMHgxZSwgMHhhYX0sCisJezB4MDAsIDB4YjYsIDB4MTQsIDB4YWF9LAorCXsweDAwLCAweGI3LCAweDBmLCAweGFhfSwKKwl7MHgwMCwgMHg1YywgMHgxMCwgMHhhYX0sCisJezB4MDAsIDB4NWQsIDB4MTgsIDB4YWF9LAorCXsweDAwLCAweDVlLCAweDI0LCAweGFhfSwKKwl7MHgwMCwgMHg1ZiwgMHgyNCwgMHhhYX0sCisJezB4MDAsIDB4ODYsIDB4MWEsIDB4YWF9LAorCXsweDAwLCAweDYwLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHg2MSwgMHgxYiwgMHhhYX0sCisJezB4MDAsIDB4NjIsIDB4MzAsIDB4YWF9LAorCXsweDAwLCAweDYzLCAweDQwLCAweGFhfSwKKwl7MHgwMCwgMHg4NywgMHgxYSwgMHhhYX0sCisJezB4MDAsIDB4NjQsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweDY1LCAweDA4LCAweGFhfSwKKwl7MHgwMCwgMHg2NiwgMHgxMCwgMHhhYX0sCisJezB4MDAsIDB4NjcsIDB4MjAsIDB4YWF9LAorCXsweDAwLCAweDg4LCAweDEwLCAweGFhfSwKKwl7MHgwMCwgMHg2OCwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4NjksIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweDZhLCAweDBmLCAweGFhfSwKKwl7MHgwMCwgMHg2YiwgMHgwZiwgMHhhYX0sCisJezB4MDAsIDB4ODksIDB4MDcsIDB4YWF9LAorCXsweDAwLCAweGQ1LCAweDRjLCAweGFhfSwKKwl7MHgwMCwgMHgwYSwgMHgwMCwgMHhhYX0sCisJezB4MDAsIDB4MGIsIDB4MmEsIDB4YWF9LAorCXsweDAwLCAweDBlLCAweDAzLCAweGFhfSwKKwl7MHgwMCwgMHgwZiwgMHhlYSwgMHhhYX0sCisJezB4MDAsIDB4YTIsIDB4MDAsIDB4YWF9LAorCXsweDAwLCAweGEzLCAweDJhLCAweGFhfSwKKwl7MHgwMCwgMHhhNCwgMHgwMywgMHhhYX0sCisJezB4MDAsIDB4YTUsIDB4ZWEsIDB4YWF9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IHU4IHBveHh4eF9pbml0VkdBW11bNF0gPSB7CisJezB4MDAsIDB4MjAsIDB4MTEsIDB4YWF9LAorCXsweDAwLCAweDMzLCAweDM4LCAweGFhfSwKKwl7MHgwMCwgMHhiYiwgMHgwZCwgMHhhYX0sCisJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwKKwl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAorCXsweGIzLCAweDAyLCAweGIwLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweDAwLCAweDA0LCAweDA2LCAweGFhfSwKKwl7MHgwMCwgMHgwNSwgMHgzZiwgMHhhYX0sCisJezB4MDAsIDB4MDQsIDB4MDAsIDB4ZGR9LAkvKiBkZWxheSAxcyAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHU4IHBveHh4eF9pbml0UVZHQVtdWzRdID0geworCXsweDAwLCAweDIwLCAweDMzLCAweGFhfSwKKwl7MHgwMCwgMHgzMywgMHgzOCwgMHhhYX0sCisJezB4MDAsIDB4YmIsIDB4MGQsIDB4YWF9LAorCXsweGIzLCAweDIyLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMywgMHhmMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweDNmLCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHhiMCwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAwLCAweGNjfSwKKwl7MHgwMCwgMHgwNCwgMHgwNiwgMHhhYX0sCisJezB4MDAsIDB4MDUsIDB4M2YsIDB4YWF9LAorCXsweDAwLCAweDA0LCAweDAwLCAweGRkfSwJLyogZGVsYXkgMXMgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCB1OCBwb3h4eHhfaW5pdF9lbmRfMVtdWzRdID0geworCXsweDAwLCAweDQ3LCAweDI1LCAweGFhfSwKKwl7MHgwMCwgMHg0OCwgMHg4MCwgMHhhYX0sCisJezB4MDAsIDB4NDksIDB4MWYsIDB4YWF9LAorCXsweDAwLCAweDRhLCAweDQwLCAweGFhfSwKKwl7MHgwMCwgMHg0NCwgMHg0MCwgMHhhYX0sCisJezB4MDAsIDB4YWIsIDB4NGEsIDB4YWF9LAorCXsweDAwLCAweGIxLCAweDAwLCAweGFhfSwKKwl7MHgwMCwgMHhiMiwgMHgwNCwgMHhhYX0sCisJezB4MDAsIDB4YjMsIDB4MDgsIDB4YWF9LAorCXsweDAwLCAweGI0LCAweDBiLCAweGFhfSwKKwl7MHgwMCwgMHhiNSwgMHgwZCwgMHhhYX0sCisJezB4MDAsIDB4NTksIDB4N2UsIDB4YWF9LAkvKiBzaGFycG5lc3MgKi8KKwl7MHgwMCwgMHgxNiwgMHgwMCwgMHhhYX0sCS8qIHdoaXRlIGJhbGFuY2UgKi8KKwl7MHgwMCwgMHgxOCwgMHgwMCwgMHhhYX0sCisJe30KK307CitzdGF0aWMgY29uc3QgdTggcG94eHh4X2luaXRfZW5kXzJbXVs0XSA9IHsKKwl7MHgwMCwgMHgxZCwgMHg4NSwgMHhhYX0sCisJezB4MDAsIDB4MWUsIDB4MDYsIDB4YWF9LAorCXsweDAwLCAweDFkLCAweDA1LCAweGFhfSwKKwl7fQogfTsKIAogc3RydWN0IHNlbnNvcl9pbmZvIHsKQEAgLTI0MjAsMzMgKzI3NjAsODkgQEAKIAl1OCBvcDsKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Vuc29yX2luZm8gc2Vuc29yX2luZm9fZGF0YVtdID0gewotLyogICAgICBzZW5zb3JJZCwgICAgICAgICBJMmNBZGQsCUlkQWRkLCAgVnBJZCwgIG0xLCAgICBtMiwgIG9wICovCisvKiBwcm9iZSB2YWx1ZXMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Vuc29yX2luZm8gdmMwMzIxX3Byb2JlX2RhdGFbXSA9IHsKKy8qICAgICAgc2Vuc29ySWQsCSAgIEkyY0FkZCwJSWRBZGQsICBWcElkLCAgbTEsICAgIG0yLCAgb3AgKi8KKy8qIDAgT1Y5NjQwICovCiAJey0xLAkJICAgIDB4ODAgfCAweDMwLCAweDBhLCAweDAwMDAsIDB4MjUsIDB4MjQsIDB4MDV9LAorLyogMSBJQ00xMDhUIChtYXkgcmVzcG9uZCBvbiBJZEFkZCA9PSAweDgzIC0gdGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpICovCiAJey0xLAkJICAgIDB4ODAgfCAweDIwLCAweDgyLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAotLyogKHRlc3RlZCBpbiB2YzAzMnhfcHJvYmVfc2Vuc29yKSAqLwotLyoJey0xLAkJICAgIDB4ODAgfCAweDIwLCAweDgzLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LCAqLwotCXtTRU5TT1JfUE8zMTMwTkMsICAgMHg4MCB8IDB4NzYsIDB4MDAsIDB4MzEzMCwgMHgyNCwgMHgyNSwgMHgwMX0sCi0Je1NFTlNPUl9NSTEzMTBfU09DLCAweDgwIHwgMHg1ZCwgMHgwMCwgMHgxNDNhLCAweDI0LCAweDI1LCAweDAxfSwKLS8qICh0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvcikgKi8KKy8qIDIgUE8yMTMwIChtYXkgZGV0ZWN0IFBPMzEzME5DIC0gdGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4NzYsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiAzIE1JMTMxMCAqLworCXstMSwJCSAgICAweDgwIHwgMHg1ZCwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDQgTUkzNjAgLSB0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvciAqLwogLyoJe1NFTlNPUl9NSTAzNjAsCSAgICAweDgwIHwgMHg1ZCwgMHgwMCwgMHg4MjQzLCAweDI0LCAweDI1LCAweDAxfSwgKi8KKy8qIDUgNzEzMVIgKi8KIAl7U0VOU09SX0hWNzEzMVIsICAgIDB4ODAgfCAweDExLCAweDAwLCAweDAyMDksIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogNiBPVjc2NDkgKi8KIAl7LTEsCQkgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4MDAwMCwgMHgyMSwgMHgyMCwgMHgwNX0sCisvKiA3IFBBUzMwMkJDVyAqLwogCXstMSwJCSAgICAweDgwIHwgMHg0MCwgMHgwMCwgMHgwMDAwLCAweDIwLCAweDIyLCAweDA1fSwKKy8qIDggT1Y3NjYwICovCiAJe1NFTlNPUl9PVjc2NjAsICAgICAweDgwIHwgMHgyMSwgMHgwYSwgMHg3NjYwLCAweDI2LCAweDI2LCAweDA1fSwKLS8qCXtTRU5TT1JfUE8zMTMwTkMsICAgMHg4MCB8IDB4NzYsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sICovCisvKiA5IFBPMzEzME5DIC0gKHRlc3RlZCBpbiB2YzAzMnhfcHJvYmVfc2Vuc29yKSAqLworLyoJe1NFTlNPUl9QTzMxMzBOQywgICAweDgwIHwgMHg3NiwgMHgwMCwgMHgzMTMwLCAweDI0LCAweDI1LCAweDAxfSwgKi8KKy8qIDEwIFBPMTAzMEtDICovCiAJey0xLAkJICAgIDB4ODAgfCAweDZlLCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAotLyoJe1NFTlNPUl9NSTEzMTBfU09DLCAweDgwIHwgMHg1ZCwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwgKi8KLS8qCXstMSwJCSAgICAweDgwIHwgMHgzMCwgMHgwYSwgMHgwMDAwLCAweDI1LCAweDI0LCAweDA1fSwgKi8KKy8qIDExIE1JMTMxMF9TT0MgKi8KKwl7U0VOU09SX01JMTMxMF9TT0MsIDB4ODAgfCAweDVkLCAweDAwLCAweDE0M2EsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogMTIgT1Y5NjUwICovCisJey0xLAkJICAgIDB4ODAgfCAweDMwLCAweDBhLCAweDAwMDAsIDB4MjUsIDB4MjQsIDB4MDV9LAorLyogMTMgUzVLNTMyICovCiAJey0xLAkJICAgIDB4ODAgfCAweDExLCAweDM5LCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogMTQgTUkzNjBfU09DIC0gPz8/ICovCisvKiAxNSBQTzEyMDBOICovCiAJe1NFTlNPUl9QTzEyMDAsICAgICAweDgwIHwgMHg1YywgMHgwMCwgMHgxMjAwLCAweDY3LCAweDY3LCAweDAxfSwKLQl7LTEsCQkgICAgMHg4MCB8IDB4MmQsIDB4MDAsIDB4MDAwMCwgMHg2NSwgMHg2NywgMHgwMX0sCisvKiAxNiBQTzMwMzBLICovCisJey0xLAkJICAgIDB4ODAgfCAweDE4LCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogMTcgUE8yMDMwICovCiAJey0xLAkJICAgIDB4ODAgfCAweDZlLCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogPz8gKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4NTYsIDB4MDEsIDB4MDAwMCwgMHg2NCwgMHg2NywgMHgwMX0sCisJe1NFTlNPUl9NSTEzMjAsICAgICAweDgwIHwgMHg0OCwgMHgwMCwgMHgxNDhjLCAweDY0LCAweDY1LCAweDAxfSwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlbnNvcl9pbmZvIHZjMDMyM19wcm9iZV9kYXRhW10gPSB7CisvKiAgICAgIHNlbnNvcklkLAkgICBJMmNBZGQsCUlkQWRkLCAgVnBJZCwgIG0xLCAgICBtMiwgIG9wICovCisvKiAwIE9WOTY0MCAqLworCXstMSwJCSAgICAweDgwIHwgMHgzMCwgMHgwYSwgMHgwMDAwLCAweDI1LCAweDI0LCAweDA1fSwKKy8qIDEgSUNNMTA4VCAobWF5IHJlc3BvbmQgb24gSWRBZGQgPT0gMHg4MyAtIHRlc3RlZCBpbiB2YzAzMnhfcHJvYmVfc2Vuc29yKSAqLworCXstMSwJCSAgICAweDgwIHwgMHgyMCwgMHg4MiwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDIgUE8yMTMwIChtYXkgZGV0ZWN0IFBPMzEzME5DIC0gdGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4NzYsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiAzIE1JMTMxMCAqLworCXstMSwJCSAgICAweDgwIHwgMHg1ZCwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDQgTUkzNjAgLSB0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvciAqLworLyoJe1NFTlNPUl9NSTAzNjAsCSAgICAweDgwIHwgMHg1ZCwgMHgwMCwgMHg4MjQzLCAweDI0LCAweDI1LCAweDAxfSwgKi8KKy8qIDUgNzEzMVIgKi8KKwl7U0VOU09SX0hWNzEzMVIsICAgIDB4ODAgfCAweDExLCAweDAwLCAweDAyMDksIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogNiBPVjc2NDkgKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4MDAwMCwgMHgyMSwgMHgyMCwgMHgwNX0sCisvKiA3IFBBUzMwMkJDVyAqLworCXstMSwJCSAgICAweDgwIHwgMHg0MCwgMHgwMCwgMHgwMDAwLCAweDIwLCAweDIyLCAweDA1fSwKKy8qIDggT1Y3NjYwICovCisJe1NFTlNPUl9PVjc2NjAsICAgICAweDgwIHwgMHgyMSwgMHgwYSwgMHg3NjYwLCAweDI2LCAweDI2LCAweDA1fSwKKy8qIDkgUE8zMTMwTkMgLSAodGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpICovCisvKgl7U0VOU09SX1BPMzEzME5DLCAgIDB4ODAgfCAweDc2LCAweDAwLCAweDMxMzAsIDB4MjQsIDB4MjUsIDB4MDF9LCAqLworLyogMTAgUE8xMDMwS0MgKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4NmUsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiAxMSBNSTEzMTBfU09DICovCisJe1NFTlNPUl9NSTEzMTBfU09DLCAweDgwIHwgMHg1ZCwgMHgwMCwgMHgxNDNhLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDEyIE9WOTY1MCAqLworCXstMSwJCSAgICAweDgwIHwgMHgzMCwgMHgwYSwgMHgwMDAwLCAweDI1LCAweDI0LCAweDA1fSwKKy8qIDEzIFM1SzUzMiAqLworCXstMSwJCSAgICAweDgwIHwgMHgxMSwgMHgzOSwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qIDE0IE1JMzYwX1NPQyAtID8/PyAqLworLyogMTUgUE8xMjAwTiAqLworCXtTRU5TT1JfUE8xMjAwLCAgICAgMHg4MCB8IDB4NWMsIDB4MDAsIDB4MTIwMCwgMHg2NywgMHg2NywgMHgwMX0sCisvKiAxNiA/PyAqLworCXstMSwJCSAgICAweDgwIHwgMHgyZCwgMHgwMCwgMHgwMDAwLCAweDY1LCAweDY3LCAweDAxfSwKKy8qIDE3IFBPMjAzMCAqLworCXstMSwJCSAgICAweDgwIHwgMHg2ZSwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qID8/ICovCiAJey0xLAkJICAgIDB4ODAgfCAweDU2LCAweDAxLCAweDAwMDAsIDB4NjQsIDB4NjcsIDB4MDF9LAogCXtTRU5TT1JfTUkxMzIwX1NPQywgMHg4MCB8IDB4NDgsIDB4MDAsIDB4MTQ4YywgMHg2NCwgMHg2NywgMHgwMX0sCi0vKmZpeG1lOiBwcmV2aW91c2x5IGRldGVjdGVkPyovCi0Je1NFTlNPUl9NSTEzMjAsICAgICAweDgwIHwgMHg0OCwgMHgwMCwgMHgxNDhjLCAweDY0LCAweDY1LCAweDAxfSwKLS8qZml4bWU6IG5vdCBpbiB0aGUgbXMtd2luIHByb2JlIC0gbWF5IGJlIGZvdW5kIGJlZm9yZT8qLworLypmaXhtZTogbm90IGluIHRoZSBtcy13aW4gcHJvYmUgLSBtYXkgYmUgZm91bmQgYmVmb3JlPyAqLwogCXtTRU5TT1JfT1Y3NjcwLCAgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4NzY3MywgMHg2NiwgMHg2NywgMHgwNX0sCiB9OwogCkBAIC0yNTIwLDcgKzI5MTYsNyBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7Ci0JaW50IGk7CisJaW50IGksIG47CiAJdTE2IHZhbHVlOwogCWNvbnN0IHN0cnVjdCBzZW5zb3JfaW5mbyAqcHRzZW5zb3JfaW5mbzsKIApAQCAtMjUzMSw5ICsyOTI3LDE2IEBACiAJfQogCiAJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGJmY2YsIDEpOwotCVBERUJVRyhEX1BST0JFLCAiY2hlY2sgc2Vuc29yIGhlYWRlciAlMDJ4IiwgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZW5zb3JfaW5mb19kYXRhKTsgaSsrKSB7Ci0JCXB0c2Vuc29yX2luZm8gPSAmc2Vuc29yX2luZm9fZGF0YVtpXTsKKwlQREVCVUcoRF9QUk9CRSwgInZjMDMyJWQgY2hlY2sgc2Vuc29yIGhlYWRlciAlMDJ4IiwKKwkJc2QtPmJyaWRnZSA9PSBCUklER0VfVkMwMzIxID8gMSA6IDMsIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7CisJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1ZDMDMyMSkgeworCQlwdHNlbnNvcl9pbmZvID0gdmMwMzIxX3Byb2JlX2RhdGE7CisJCW4gPSBBUlJBWV9TSVpFKHZjMDMyMV9wcm9iZV9kYXRhKTsKKwl9IGVsc2UgeworCQlwdHNlbnNvcl9pbmZvID0gdmMwMzIzX3Byb2JlX2RhdGE7CisJCW4gPSBBUlJBWV9TSVpFKHZjMDMyM19wcm9iZV9kYXRhKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogCQlyZWdfdyhkZXYsIDB4YTAsIDB4MDIsIDB4YjMzNCk7CiAJCXJlZ193KGRldiwgMHhhMCwgcHRzZW5zb3JfaW5mby0+bTEsIDB4YjMwMCk7CiAJCXJlZ193KGRldiwgMHhhMCwgcHRzZW5zb3JfaW5mby0+bTIsIDB4YjMwMCk7CkBAIC0yNTUxLDEzICsyOTU0LDE1IEBACiAJCQkJcmV0dXJuIHB0c2Vuc29yX2luZm8tPnNlbnNvcklkOwogCiAJCQlzd2l0Y2ggKHZhbHVlKSB7CisJCQljYXNlIDB4MzEzMDoKKwkJCQlyZXR1cm4gU0VOU09SX1BPMzEzME5DOwogCQkJY2FzZSAweDc2NzM6CiAJCQkJcmV0dXJuIFNFTlNPUl9PVjc2NzA7CiAJCQljYXNlIDB4ODI0MzoKIAkJCQlyZXR1cm4gU0VOU09SX01JMDM2MDsKIAkJCX0KLS8qZml4bWU6IHNob3VsZCByZXR1cm4gaGVyZSovCiAJCX0KKwkJcHRzZW5zb3JfaW5mbysrOwogCX0KIAlyZXR1cm4gLTE7CiB9CkBAIC0yNjE5LDcgKzMwMjQsNyBAQAogCQkJaTJjX3dyaXRlKGdzcGNhX2RldiwgZGF0YVtpXVswXSwgJmRhdGFbaV1bMV0sIDIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHhkZDoKLQkJCW1zbGVlcChkYXRhW2ldWzJdICsgMTApOworCQkJbXNsZWVwKGRhdGFbaV1bMV0gKiAyNTYgKyBkYXRhW2ldWzJdICsgMTApOwogCQkJYnJlYWs7CiAJCX0KIAkJaSsrOwpAQCAtMjY0NiwxMiArMzA1MSwxNyBAQAogCQk2NCwJCS8qIE9WNzY3MCA2ICovCiAJCTEyOCwJCS8qIFBPMTIwMCA3ICovCiAJCTEyOCwJCS8qIFBPMzEzME5DIDggKi8KKwkJMTI4LAkJLyogUE94eHh4IDkgKi8KIAl9OwogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwogCXNkLT5icmlkZ2UgPSBpZC0+ZHJpdmVyX2luZm8gPj4gODsKIAlzZC0+ZmxhZ3MgPSBpZC0+ZHJpdmVyX2luZm8gJiAweGZmOwotCXNlbnNvciA9IHZjMDMyeF9wcm9iZV9zZW5zb3IoZ3NwY2FfZGV2KTsKKwlpZiAoaWQtPmlkVmVuZG9yID09IDB4MDQ2ZCAmJgorCSAgICAoaWQtPmlkUHJvZHVjdCA9PSAweDA4OTIgfHwgaWQtPmlkUHJvZHVjdCA9PSAweDA4OTYpKQorCQlzZW5zb3IgPSBTRU5TT1JfUE94eHh4OworCWVsc2UKKwkJc2Vuc29yID0gdmMwMzJ4X3Byb2JlX3NlbnNvcihnc3BjYV9kZXYpOwogCXN3aXRjaCAoc2Vuc29yKSB7CiAJY2FzZSAtMToKIAkJUERFQlVHKERfUFJPQkUsICJVbmtub3duIHNlbnNvci4uLiIpOwpAQCAtMjY4NCw2ICszMDk0LDkgQEAKIAljYXNlIFNFTlNPUl9QTzMxMzBOQzoKIAkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBQTzMxMzBOQyIpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9QT3h4eHg6CisJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIFBPeHh4eCIpOworCQlicmVhazsKIAl9CiAJc2QtPnNlbnNvciA9IHNlbnNvcjsKIApAQCAtMjcxMiwyNyArMzEyNSwxOCBAQAogCX0KIAljYW0tPm5wa3QgPSBucGt0W3NkLT5zZW5zb3JdOwogCisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKKwlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CisJc2QtPmNvbG9ycyA9IENPTE9SX0RFRjsKIAlzZC0+aGZsaXAgPSBIRkxJUF9ERUY7CiAJc2QtPnZmbGlwID0gVkZMSVBfREVGOworCXNkLT5saWdodGZyZXEgPSBGUkVRX0RFRjsKKwlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTX0RFRjsKKworCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSBjdHJsX2Rpc1tzZC0+c2Vuc29yXTsKKwogCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc2NzApCiAJCXNkLT5mbGFncyB8PSBGTF9IRkxJUCB8IEZMX1ZGTElQOwotCXNkLT5saWdodGZyZXEgPSBGUkVRX0RFRjsKLQlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfT1Y3NjcwKQotCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgTElHSFRGUkVRX0lEWCk7Ci0Jc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfTUkxMzEwX1NPQzoKLQljYXNlIFNFTlNPUl9NSTEzMjBfU09DOgotCWNhc2UgU0VOU09SX09WNzY2MDoKLQljYXNlIFNFTlNPUl9PVjc2NzA6Ci0JY2FzZSBTRU5TT1JfUE8xMjAwOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlnc3BjYV9kZXYtPmN0cmxfZGlzID0gKDEgPDwgSEZMSVBfSURYKQotCQkJCQl8ICgxIDw8IFZGTElQX0lEWCk7Ci0JCWJyZWFrOwotCX0KLQotCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfREVGOwogCiAJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1ZDMDMyMSkgewogCQlyZWdfcihnc3BjYV9kZXYsIDB4OGEsIDAsIDMpOwpAQCAtMjc0NywxMCArMzE1MSw1NSBAQAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogeworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9QT3h4eHgpIHsKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzMDAsIDEpOworCQlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzBdICE9IDApIHsKKwkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDI2LCAweGIzMDApOworCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4MDQsIDB4YjMwMCk7CisJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgwMCwgMHhiMzAwKTsKKwkJfQorCX0KIAlyZXR1cm4gMDsKIH0KIAotLyogc29tZSBzZW5zb3JzIG9ubHkgKi8KK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBkYXRhOworCisJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBCUklHSFRORVNTX0lEWCkpCisJCXJldHVybjsKKwlkYXRhID0gc2QtPmJyaWdodG5lc3M7CisJaWYgKGRhdGEgPj0gMHg4MCkKKwkJZGF0YSAmPSAweDdmOworCWVsc2UKKwkJZGF0YSA9IDB4ZmYgXiBkYXRhOworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4OTgsICZkYXRhLCAxKTsKK30KKworc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgQ09OVFJBU1RfSURYKSkKKwkJcmV0dXJuOworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4OTksICZzZC0+Y29udHJhc3QsIDEpOworfQorCitzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBkYXRhOworCisJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBDT0xPUlNfSURYKSkKKwkJcmV0dXJuOworCWRhdGEgPSBzZC0+Y29sb3JzIC0gKHNkLT5jb2xvcnMgPj4gMykgLSAxOworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4OTQsICZkYXRhLCAxKTsKKwlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDk1LCAmc2QtPmNvbG9ycywgMSk7Cit9CisKIHN0YXRpYyB2b2lkIHNldGh2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMjc2NCw2ICszMjEzLDcgQEAKIAkJdmZsaXAgPSAhdmZsaXA7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfTUkxMzEwX1NPQzoKKwljYXNlIFNFTlNPUl9NSTEzMjA6CiAJY2FzZSBTRU5TT1JfTUkxMzIwX1NPQzoKIAkJZGF0YVswXSA9IGRhdGFbMV0gPSAwOwkJLyogc2VsZWN0IHBhZ2UgMCAqLwogCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweGYwLCBkYXRhLCAyKTsKQEAgLTI4MDEsMTggKzMyNTEsMjkgQEAKIAl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBvdjc2NjBfZnJlcV90YltzZC0+bGlnaHRmcmVxXSk7CiB9CiAKLS8qIHBvMTIwMCBvbmx5ICovCiBzdGF0aWMgdm9pZCBzZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAl1OCBkYXRhOwogCi0JaWYgKHNkLT5zZW5zb3IgIT0gU0VOU09SX1BPMTIwMCkKLQkJcmV0dXJuOwotCWRhdGEgPSAwOwotCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MDMsICZkYXRhLCAxKTsKLQlkYXRhID0gMHhiNSArIHNkLT5zaGFycG5lc3MgKiAzOwotCWkyY193cml0ZShnc3BjYV9kZXYsIDB4NjEsICZkYXRhLCAxKTsKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9QTzEyMDA6CisJCWRhdGEgPSAwOworCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAzLCAmZGF0YSwgMSk7CisJCWlmIChzZC0+c2hhcnBuZXNzIDwgMCkKKwkJCWRhdGEgPSAweDZhOworCQllbHNlCisJCQlkYXRhID0gMHhiNSArIHNkLT5zaGFycG5lc3MgKiAzOworCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDYxLCAmZGF0YSwgMSk7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX1BPeHh4eDoKKwkJaWYgKHNkLT5zaGFycG5lc3MgPCAwKQorCQkJZGF0YSA9IDB4N2U7CS8qIGRlZiA9IG1heCAqLworCQllbHNlCisJCQlkYXRhID0gMHg2MCArIHNkLT5zaGFycG5lc3MgKiAweDBmOworCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDU5LCAmZGF0YSwgMSk7CisJCWJyZWFrOworCX0KIH0KIAogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC0yOTIyLDEyICszMzgzLDI3IEBACiAJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIGluaXQpOwogCQlpbml0ID0gcG8zMTMwX3J1bmRhdGE7CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0vKgljYXNlIFNFTlNPUl9QTzEyMDA6ICovCisJY2FzZSBTRU5TT1JfUE8xMjAwOgogCQlHYW1tYVQgPSBwbzEyMDBfZ2FtbWE7CiAJCU1hdHJpeFQgPSBwbzEyMDBfbWF0cml4OwogCQlpbml0ID0gcG8xMjAwX2luaXRWR0FfZGF0YTsKIAkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgU0VOU09SX1BPeHh4eDogKi8KKwkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG94eHh4X2luaXRfY29tbW9uKTsKKwkJaWYgKG1vZGUpCisJCQlpbml0ID0gcG94eHh4X2luaXRRVkdBOworCQllbHNlCisJCQlpbml0ID0gcG94eHh4X2luaXRWR0E7CisJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIGluaXQpOworCQlyZWdfcihnc3BjYV9kZXYsIDB4OGMsIDB4MDAwMCwgMyk7CisJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLAorCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlsyXSAmIDEgPyAwIDogMSwKKwkJCQkweGIzNWMpOworCQltc2xlZXAoMzAwKTsKKy8qZml4bWU6IGkyYyByZWFkIDA0IGFuZCAwNSovCisJCWluaXQgPSBwb3h4eHhfaW5pdF9lbmRfMTsKKwkJYnJlYWs7CiAJfQogCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIGluaXQpOwogCWlmIChHYW1tYVQgJiYgTWF0cml4VCkgewpAQCAtMjkzNiw3ICszNDEyLDYgQEAKIAkJcHV0X3RhYl90b19yZWcoZ3NwY2FfZGV2LCBHYW1tYVQsIDE3LCAweGI4NmMpOwogCQlwdXRfdGFiX3RvX3JlZyhnc3BjYV9kZXYsIE1hdHJpeFQsIDksIDB4YjgyYyk7CiAKLQkJLyogc2V0IHRoZSBsZWQgb24gMHgwODkyIDB4MDg5NiAqLwogCQlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAkJY2FzZSBTRU5TT1JfUE8xMjAwOgogCQljYXNlIFNFTlNPUl9IVjcxMzFSOgpAQCAtMjk0NSwxNiArMzQyMCwyMiBAQAogCQljYXNlIFNFTlNPUl9NSTEzMTBfU09DOgogCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4ODksIDB4MDU4YywgMHgwMDAwKTsKIAkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJaWYgKCEoc2QtPmZsYWdzICYgRkxfU0FNU1VORykpCi0JCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4ODksIDB4ZmZmZiwgMHhmZGZmKTsKLQkJCWJyZWFrOwogCQl9CiAJCW1zbGVlcCgxMDApOwogCQlzZXRzaGFycG5lc3MoZ3NwY2FfZGV2KTsKIAkJc2V0aHZmbGlwKGdzcGNhX2Rldik7CiAJCXNldGxpZ2h0ZnJlcShnc3BjYV9kZXYpOwogCX0KKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfUE94eHh4KSB7CisJCXNldGNvbG9ycyhnc3BjYV9kZXYpOworCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisKKwkJLyogbGVkIG9uICovCisJCW1zbGVlcCg4MCk7CisJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDg5LCAweGZmZmYsIDB4ZmRmZik7CisJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHBveHh4eF9pbml0X2VuZF8yKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5NjMsMTAgKzM0NDQsMTcgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX01JMTMxMF9TT0MpCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfTUkxMzEwX1NPQzoKIAkJcmVnX3coZGV2LCAweDg5LCAweDA1OGMsIDB4MDBmZik7Ci0JZWxzZSBpZiAoIShzZC0+ZmxhZ3MgJiBGTF9TQU1TVU5HKSkKLQkJcmVnX3coZGV2LCAweDg5LCAweGZmZmYsIDB4ZmZmZik7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX1BPeHh4eDoKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWlmICghKHNkLT5mbGFncyAmIEZMX1NBTVNVTkcpKQorCQkJcmVnX3coZGV2LCAweDg5LCAweGZmZmYsIDB4ZmZmZik7CisJCWJyZWFrOworCX0KIAlyZWdfdyhkZXYsIDB4YTAsIDB4MDEsIDB4YjMwMSk7CiAJcmVnX3coZGV2LCAweGEwLCAweDA5LCAweGIwMDMpOwogfQpAQCAtMjk4NCw2ICszNDcyLDEyIEBACiAJCXJlZ193KGRldiwgMHg4OSwgMHgwNThjLCAweDAwZmYpOwogCWVsc2UgaWYgKCEoc2QtPmZsYWdzICYgRkxfU0FNU1VORykpCiAJCXJlZ193KGRldiwgMHg4OSwgMHhmZmZmLCAweGZmZmYpOworCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1BPeHh4eCkgeworCQlyZWdfdyhkZXYsIDB4YTAsIDB4MjYsIDB4YjMwMCk7CisJCXJlZ193KGRldiwgMHhhMCwgMHgwNCwgMHhiMzAwKTsKKwkJcmVnX3coZGV2LCAweGEwLCAweDAwLCAweGIzMDApOworCX0KIH0KIAogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LApAQCAtMzAyMCw2ICszNTE0LDYwIEBACiAJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBkYXRhLCBsZW4pOwogfQogCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmJyaWdodG5lc3MgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5icmlnaHRuZXNzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb250cmFzdCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Y29udHJhc3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb2xvcnMgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRjb2xvcnMoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Y29sb3JzOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNkX3NldGhmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYwppbmRleCAxYTgwMGZjLi41MDk4NmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCkBAIC0xLDkgKzEsOCBAQAogLyoKLSAqCVotU3Rhci9WaW1pY3JvIHpjMzAxL3pjMzAycC92YzMweCBsaWJyYXJ5Ci0gKglDb3B5cmlnaHQgKEMpIDIwMDQgMjAwNSAyMDA2IE1pY2hlbCBYaGFhcmQKLSAqCQlteGhhYXJkQG1hZ2ljLmZyCisgKiBaLVN0YXIvVmltaWNybyB6YzMwMS96YzMwMnAvdmMzMHggbGlicmFyeQogICoKLSAqIFY0TDIgYnkgSmVhbi1GcmFuY29pcyBNb2luZSA8aHR0cDovL21vaW5lamYuZnJlZS5mcj4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgMjAwNSAyMDA2IE1pY2hlbCBYaGFhcmQgbXhoYWFyZEBtYWdpYy5mcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjIsMTAgKzIxLDExIEBACiAKICNkZWZpbmUgTU9EVUxFX05BTUUgInpjM3h4IgogCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlICJnc3BjYS5oIgogI2luY2x1ZGUgImpwZWcuaCIKIAotTU9EVUxFX0FVVEhPUigiTWljaGVsIFhoYWFyZCA8bXhoYWFyZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LCAiCitNT0RVTEVfQVVUSE9SKCJKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPiwgIgogCQkiU2VyZ2UgQS4gU3VjaGtvdiA8U2VyZ2UuQS5TQHRvY2hrYS5ydT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EgWkMwM3h4L1ZDM3h4IFVTQiBDYW1lcmEgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC0zOSwxOCArMzksMTggQEAKIHN0cnVjdCBzZCB7CiAJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAotCV9fdTggYnJpZ2h0bmVzczsKLQlfX3U4IGNvbnRyYXN0OwotCV9fdTggZ2FtbWE7Ci0JX191OCBhdXRvZ2FpbjsKLQlfX3U4IGxpZ2h0ZnJlcTsKLQlfX3U4IHNoYXJwbmVzczsKKwl1OCBicmlnaHRuZXNzOworCXU4IGNvbnRyYXN0OworCXU4IGdhbW1hOworCXU4IGF1dG9nYWluOworCXU4IGxpZ2h0ZnJlcTsKKwl1OCBzaGFycG5lc3M7CiAJdTggcXVhbGl0eTsJCQkvKiBpbWFnZSBxdWFsaXR5ICovCiAjZGVmaW5lIFFVQUxJVFlfTUlOIDQwCiAjZGVmaW5lIFFVQUxJVFlfTUFYIDYwCiAjZGVmaW5lIFFVQUxJVFlfREVGIDUwCiAKLQlzaWduZWQgY2hhciBzZW5zb3I7CQkvKiBUeXBlIG9mIGltYWdlIHNlbnNvciBjaGlwICovCisJdTggc2Vuc29yOwkJLyogVHlwZSBvZiBpbWFnZSBzZW5zb3IgY2hpcCAqLwogLyogISEgdmFsdWVzIHVzZWQgaW4gZGlmZmVyZW50IHRhYmxlcyAqLwogI2RlZmluZSBTRU5TT1JfQURDTTI3MDAgMAogI2RlZmluZSBTRU5TT1JfQ1MyMTAyIDEKQEAgLTkyLDkgKzkyLDggQEAKIHN0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAjZGVmaW5lIEJSSUdIVE5FU1NfSURYIDAKLSNkZWZpbmUgU0RfQlJJR0hUTkVTUyAwCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTEwMywyNiArMTAyLDI2IEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAyNTUsCiAJCS5zdGVwICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxMjgsCisjZGVmaW5lIEJSSUdIVE5FU1NfREVGIDEyOAorCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKIAkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCiAJfSwKLSNkZWZpbmUgU0RfQ09OVFJBU1QgMQogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAogCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lICAgID0gIkNvbnRyYXN0IiwKIAkJLm1pbmltdW0gPSAwLAotCQkubWF4aW11bSA9IDI1NiwKKwkJLm1heGltdW0gPSAyNTUsCiAJCS5zdGVwICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxMjgsCisjZGVmaW5lIENPTlRSQVNUX0RFRiAxMjgKKwkJLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF9ERUYsCiAJICAgIH0sCiAJICAgIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKIAkgICAgLmdldCA9IHNkX2dldGNvbnRyYXN0LAogCX0sCi0jZGVmaW5lIFNEX0dBTU1BIDIKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9HQU1NQSwKQEAgLTEzNiw3ICsxMzUsNiBAQAogCSAgICAuc2V0ID0gc2Rfc2V0Z2FtbWEsCiAJICAgIC5nZXQgPSBzZF9nZXRnYW1tYSwKIAl9LAotI2RlZmluZSBTRF9BVVRPR0FJTiAzCiAJewogCSAgICB7CiAJCS5pZCAgICAgID0gVjRMMl9DSURfQVVUT0dBSU4sCkBAIC0xNDUsMTMgKzE0MywxMyBAQAogCQkubWluaW11bSA9IDAsCiAJCS5tYXhpbXVtID0gMSwKIAkJLnN0ZXAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisjZGVmaW5lIEFVVE9HQUlOX0RFRiAxCisJCS5kZWZhdWx0X3ZhbHVlID0gQVVUT0dBSU5fREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCiAJICAgIC5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKIAl9LAogI2RlZmluZSBMSUdIVEZSRVFfSURYIDQKLSNkZWZpbmUgU0RfRlJFUSA0CiAJewogCSAgICB7CiAJCS5pZAkgPSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKQEAgLTE2MCwxMiArMTU4LDEyIEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAyLAkvKiAwOiAwLCAxOiA1MEh6LCAyOjYwSHogKi8KIAkJLnN0ZXAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisjZGVmaW5lIEZSRVFfREVGIDAKKwkJLmRlZmF1bHRfdmFsdWUgPSBGUkVRX0RFRiwKIAkgICAgfSwKIAkgICAgLnNldCA9IHNkX3NldGZyZXEsCiAJICAgIC5nZXQgPSBzZF9nZXRmcmVxLAogCX0sCi0jZGVmaW5lIFNEX1NIQVJQTkVTUyA1CiAJewogCSAgICB7CiAJCS5pZAkgPSBWNEwyX0NJRF9TSEFSUE5FU1MsCkBAIC0xNzQsNyArMTcyLDggQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDMsCiAJCS5zdGVwICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAyLAorI2RlZmluZSBTSEFSUE5FU1NfREVGIDIKKwkJLmRlZmF1bHRfdmFsdWUgPSBTSEFSUE5FU1NfREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0c2hhcnBuZXNzLAogCSAgICAuZ2V0ID0gc2RfZ2V0c2hhcnBuZXNzLApAQCAtMTk0LDYgKzE5MywxOSBAQAogCQkucHJpdiA9IDB9LAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgYnJva2VuX3ZnYV9tb2RlW10gPSB7CisJezMyMCwgMjMyLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjMyICogNCAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMX0sCisJezY0MCwgNDcyLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDcyICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMH0sCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzaWZfbW9kZVtdID0gewogCXsxNzYsIDE0NCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDE3NiwKQEAgLTIwOSw5ICsyMjEsOSBAQAogCiAvKiB1c2IgZXhjaGFuZ2VzICovCiBzdHJ1Y3QgdXNiX2FjdGlvbiB7Ci0JX191OAlyZXE7Ci0JX191OAl2YWw7Ci0JX191MTYJaWR4OworCXU4CXJlcTsKKwl1OAl2YWw7CisJdTE2CWlkeDsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBhZGNtMjcwMF9Jbml0aWFsW10gPSB7CkBAIC00MjEsNyArNDMzLDcgQEAKIAl7MHhhYSwgMHhmZSwgMHgwMDEwfSwJCQkJLyogMDAsZmUsMTAsYWEgKi8KIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfSW5pdGlhbFtdID0gewkvKiAzMjB4MjQwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyX0luaXRpYWxTY2FsZVtdID0gewkvKiAzMjB4MjQwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LApAQCAtNDczLDcgKzQ4NSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfSW5pdGlhbFNjYWxlW10gPSB7CS8qIDY0MHg0ODAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfSW5pdGlhbFtdID0gewkvKiA2NDB4NDgwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LApAQCAtNTI0LDcgKzUzNiw3IEBACiAJezB4YTAsIDB4MDAsIDB4MDFhZH0sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyXzUwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfNTBIWlNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCiAJezB4YWEsIDB4MjMsIDB4MDAwMX0sCiAJezB4YWEsIDB4MjQsIDB4MDA1Zn0sCkBAIC01NDYsNyArNTU4LDcgQEAKIAl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfNTBIWlNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyXzUwSFpbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKIAl7MHhhYSwgMHgyMywgMHgwMDAwfSwKIAl7MHhhYSwgMHgyNCwgMHgwMGFmfSwKQEAgLTU2OCw3ICs1ODAsNyBAQAogCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl82MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyXzYwSFpTY2FsZVtdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAogCXsweGFhLCAweDIzLCAweDAwMDF9LAogCXsweGFhLCAweDI0LCAweDAwNTV9LApAQCAtNTkwLDcgKzYwMiw3IEBACiAJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyXzYwSFpTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl82MEhaW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCiAJezB4YWEsIDB4MjMsIDB4MDAwMH0sCiAJezB4YWEsIDB4MjQsIDB4MDBhYX0sCkBAIC02MTIsNyArNjI0LDcgQEAKIAl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfTm9GbGlrZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfTm9GbGlrZXJTY2FsZVtdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAogCXsweGFhLCAweDIzLCAweDAwMDF9LAogCXsweGFhLCAweDI0LCAweDAwNWZ9LApAQCAtNjM0LDcgKzY0Niw3IEBACiAJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyX05vRmxpa2VyU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfTm9GbGlrZXJbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKIAl7MHhhYSwgMHgyMywgMHgwMDAwfSwKIAl7MHhhYSwgMHgyNCwgMHgwMGFmfSwKQEAgLTY1OCw3ICs2NzAsNyBAQAogfTsKIAogLyogQ1MyMTAyX0tPQ09NICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyS19Jbml0aWFsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyS19Jbml0aWFsU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgxMSwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKIAl7MHhhMCwgMHgwOCwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKQEAgLTkxNyw3ICs5MjksNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyS19Jbml0aWFsU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJLX0luaXRpYWxbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKQEAgLTE0OTUsNyArMTUwNyw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBoZGNzMjAyMHhiX0luaXRpYWxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBoZGNzMjAyMGJfSW5pdGlhbFNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MTEsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIHF0YWJsZSAweDA1ICovCkBAIC0xNjI3LDcgKzE2MzksNyBAQAogCXsweGEwLCAweDQwLCBaQzNYWF9SMTE4X0JHQUlOfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBoZGNzMjAyMHhiX0luaXRpYWxTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGhkY3MyMDIwYl9Jbml0aWFsW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCkBAIC0xODE5LDcgKzE4MzEsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxYnh4X0luaXRpYWxbXSA9IHsJCS8qIDMyMHgyNDAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBodjcxMzFiX0luaXRpYWxTY2FsZVtdID0gewkvKiAzMjB4MjQwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LApAQCAtMTg2Niw3ICsxODc4LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMWJ4eF9Jbml0aWFsU2NhbGVbXSA9IHsJLyogNjQweDQ4MCovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxYl9Jbml0aWFsW10gPSB7CS8qIDY0MHg0ODAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKQEAgLTIwNjMsNyArMjA3NSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBodjcxMzFjeHhfSW5pdGlhbFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMXJfSW5pdGlhbFNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LApAQCAtMjE1Nyw3ICsyMTY5LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMWN4eF9Jbml0aWFsU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBodjcxMzFyX0luaXRpYWxbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwJLyogZGlmZiAqLwpAQCAtMjI1OSw3ICsyMjcxLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWF4eF9Jbml0aWFsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV9Jbml0aWFsU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKQEAgLTI0MzYsNyArMjQ0OCw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVheHhfSW5pdGlhbFNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV9Jbml0aWFsW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCkBAIC0yNjE1LDcgKzI2MjcsNyBAQAogCXsweGEwLCAweDQwLCBaQzNYWF9SMTE4X0JHQUlOfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhXzUwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhXzUwSFpTY2FsZVtdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLwogCXsweGFhLCAweDBkLCAweDAwMDN9LCAvKiAwMCwwZCwwMyxhYSAqLwogCXsweGFhLCAweDBjLCAweDAwMjB9LCAvKiAwMCwwYywyMCxhYSAqLwpAQCAtMjY0Niw3ICsyNjU4LDcgQEAKIAl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwgLyogMDAsMjAsZmYsY2MgKi8KIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhXzUwSFpTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfNTBIWltdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLwogCXsweGFhLCAweDBkLCAweDAwMDN9LCAvKiAwMCwwZCwwMyxhYSAqLwogCXsweGFhLCAweDBjLCAweDAwOGN9LCAvKiAwMCwwYyw4YyxhYSAqLwpAQCAtMjY3OSw3ICsyNjkxLDcgQEAKIAl7MHhhMCwgMHhjMCwgWkMzWFhfUjFBOF9ESUdJVEFMR0FJTn0sIC8qIDAxLGE4LGMwLGNjICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV82MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV82MEhaU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhYSwgMHgwZCwgMHgwMDAzfSwgLyogMDAsMGQsMDMsYWEgKi8KIAl7MHhhYSwgMHgwYywgMHgwMDA0fSwgLyogMDAsMGMsMDQsYWEgKi8KQEAgLTI3MTAsNyArMjcyMiw3IEBACiAJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sIC8qIDAwLDIwLGZmLGNjICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV82MEhaU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhXzYwSFpbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhYSwgMHgwZCwgMHgwMDAzfSwgLyogMDAsMGQsMDMsYWEgKi8KIAl7MHhhYSwgMHgwYywgMHgwMDA4fSwgLyogMDAsMGMsMDgsYWEgKi8KQEAgLTI3NDMsNyArMjc1NSw3IEBACiAJezB4YTAsIDB4YzAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LCAvKiAwMSxhOCxjMCxjYyAqLwogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGljbTEwNWFfTm9GbGlrZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBpY20xMDVhX05vRmxpa2VyU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhYSwgMHgwZCwgMHgwMDAzfSwgLyogMDAsMGQsMDMsYWEgKi8KIAl7MHhhYSwgMHgwYywgMHgwMDA0fSwgLyogMDAsMGMsMDQsYWEgKi8KQEAgLTI3NzQsNyArMjc4Niw3IEBACiAJezB4YTAsIDB4ZmYsIFpDM1hYX1IwMjBfSFNZTkNfM30sIC8qIDAwLDIwLGZmLGNjICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV9Ob0ZsaWtlclNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaWNtMTA1YV9Ob0ZsaWtlcltdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLwogCXsweGFhLCAweDBkLCAweDAwMDN9LCAvKiAwMCwwZCwwMyxhYSAqLwogCXsweGFhLCAweDBjLCAweDAwMDR9LCAvKiAwMCwwYywwNCxhYSAqLwpAQCAtMjgwOCw3ICsyODIwLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfSW5pdGlhbFNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbWM1MDFjYl9Jbml0aWFsW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sIC8qIDAwLDAwLDAxLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LCAvKiAwMCwwMiwwMCxjYyAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LCAvKiAwMCwxMCwwMSxjYyAqLwpAQCAtMjkyOCw3ICsyOTQwLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfSW5pdGlhbFtdID0gewkgLyogMzIweDI0MCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1jNTAxY2JfSW5pdGlhbFNjYWxlW10gPSB7CSAvKiAzMjB4MjQwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sIC8qIDAwLDAwLDAxLGNjICovCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LCAvKiAwMCwwMiwxMCxjYyAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LCAvKiAwMCwxMCwwMSxjYyAqLwpAQCAtMzA0Nyw3ICszMDU5LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfNTBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1jNTAxY2JfNTBIWlNjYWxlW10gPSB7CiAJezB4YWEsIDB4MDMsIDB4MDAwM30sIC8qIDAwLDAzLDAzLGFhICovCiAJezB4YWEsIDB4MTAsIDB4MDBmY30sIC8qIDAwLDEwLGZjLGFhICovCiAJezB4YWEsIDB4MzYsIDB4MDAxZH0sIC8qIDAwLDM2LDFELGFhICovCkBAIC0zMDY0LDcgKzMwNzYsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gTUM1MDFDQl81MEhaU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBtYzUwMWNiXzUwSFpbXSA9IHsKIAl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KIAl7MHhhYSwgMHgxMCwgMHgwMGZjfSwgLyogMDAsMTAsZmMsYWEgKi8KIAl7MHhhYSwgMHgzNiwgMHgwMDNhfSwgLyogMDAsMzYsM0EsYWEgKi8KQEAgLTMwODEsNyArMzA5Myw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBNQzUwMUNCXzYwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBtYzUwMWNiXzYwSFpTY2FsZVtdID0gewogCXsweGFhLCAweDAzLCAweDAwMDN9LCAvKiAwMCwwMywwMyxhYSAqLwogCXsweGFhLCAweDEwLCAweDAwZmN9LCAvKiAwMCwxMCxmYyxhYSAqLwogCXsweGFhLCAweDM2LCAweDAwMTh9LCAvKiAwMCwzNiwxOCxhYSAqLwpAQCAtMzA5OCw3ICszMTEwLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfNjBIWlNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbWM1MDFjYl82MEhaW10gPSB7CiAJezB4YWEsIDB4MDMsIDB4MDAwM30sIC8qIDAwLDAzLDAzLGFhICovCiAJezB4YWEsIDB4MTAsIDB4MDBmY30sIC8qIDAwLDEwLGZjLGFhICovCiAJezB4YWEsIDB4MzYsIDB4MDAzMH0sIC8qIDAwLDM2LDMwLGFhICovCkBAIC0zMTE1LDcgKzMxMjcsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gTUM1MDFDQl9Ob0ZsaWtlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1jNTAxY2JfTm9GbGlrZXJTY2FsZVtdID0gewogCXsweGFhLCAweDAzLCAweDAwMDN9LCAvKiAwMCwwMywwMyxhYSAqLwogCXsweGFhLCAweDEwLCAweDAwZmN9LCAvKiAwMCwxMCxmYyxhYSAqLwogCXsweGFhLCAweDM2LCAweDAwMTh9LCAvKiAwMCwzNiwxOCxhYSAqLwpAQCAtMzEzMiw3ICszMTQ0LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE1DNTAxQ0JfTm9GbGlrZXJTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1jNTAxY2JfTm9GbGlrZXJbXSA9IHsKIAl7MHhhYSwgMHgwMywgMHgwMDAzfSwgLyogMDAsMDMsMDMsYWEgKi8KIAl7MHhhYSwgMHgxMCwgMHgwMGZjfSwgLyogMDAsMTAsZmMsYWEgKi8KIAl7MHhhYSwgMHgzNiwgMHgwMDMwfSwgLyogMDAsMzYsMzAsYWEgKi8KQEAgLTMxNDQsOCArMzE1Niw4IEBACiAJe30KIH07CiAKLS8qIGZyb20genMyMTEuaW5mIC0gSEtSLCVPVjc2MjAlLEluaXRpYWwgLSA2NDB4NDgwICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gT1Y3NjIwX21vZGUwW10gPSB7CisvKiBmcm9tIHpzMjExLmluZiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG92NzYyMF9Jbml0aWFsW10gPSB7CS8qIDY0MHg0ODAgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwgLyogMDAsMDAsMDEsY2MgKi8KIAl7MHhhMCwgMHg0MCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sIC8qIDAwLDAyLDQwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwgLyogMDAsMDgsMDAsY2MgKi8KQEAgLTMyMTQsOSArMzIyNiw3IEBACiAJezB4YTAsIDB4NTAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LCAvKiAwMSxhOCw1MCxjYyAqLwogCXt9CiB9OwotCi0vKiBmcm9tIHpzMjExLmluZiAtIEhLUiwlT1Y3NjIwJSxJbml0aWFsU2NhbGUgLSAzMjB4MjQwICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gT1Y3NjIwX21vZGUxW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjIwX0luaXRpYWxTY2FsZVtdID0gewkvKiAzMjB4MjQwICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sIC8qIDAwLDAwLDAxLGNjICovCiAJezB4YTAsIDB4NTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAkvKiAwMCwwMiw1MCxjYyAqLwogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIDAwLDA4LDAwLGNjICovCkBAIC0zMjg3LDkgKzMyOTcsNyBAQAogCXsweGEwLCAweDUwLCBaQzNYWF9SMUE4X0RJR0lUQUxHQUlOfSwJLyogMDEsYTgsNTAsY2MgKi8KIAl7fQogfTsKLQotLyogZnJvbSB6czIxMS5pbmYgLSBIS1IsJU9WNzYyMCVcQUUsNTBIWiAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIE9WNzYyMF81MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjIwXzUwSFpbXSA9IHsKIAl7MHhhYSwgMHgxMywgMHgwMGEzfSwJLyogMDAsMTMsYTMsYWEgKi8KIAl7MHhkZCwgMHgwMCwgMHgwMTAwfSwJLyogMDAsMDEsMDAsZGQgKi8KIAl7MHhhYSwgMHgyYiwgMHgwMDk2fSwJLyogMDAsMmIsOTYsYWEgKi8KQEAgLTMzMDcsOSArMzMxNSw3IEBACiAJCQkJCQkJIGlmIG1vZGUwICg2NDB4NDgwKSAqLwogCXt9CiB9OwotCi0vKiBmcm9tIHpzMjExLmluZiAtIEhLUiwlT1Y3NjIwJVxBRSw2MEhaICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gT1Y3NjIwXzYwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBvdjc2MjBfNjBIWltdID0gewogCXsweGFhLCAweDEzLCAweDAwYTN9LAkJCS8qIDAwLDEzLGEzLGFhICovCiAJCQkJCQkvKiAoYnVnIGluIHpzMjExLmluZikgKi8KIAl7MHhkZCwgMHgwMCwgMHgwMTAwfSwJCQkvKiAwMCwwMSwwMCxkZCAqLwpAQCAtMzMzMSw5ICszMzM3LDcgQEAKIAl7MHhhMSwgMHgwMSwgMHgwMDM3fSwJCSovCiAJe30KIH07Ci0KLS8qIGZyb20genMyMTEuaW5mIC0gSEtSLCVPVjc2MjAlXEFFLE5vRmxpa2VyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gT1Y3NjIwX05vRmxpa2VyW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjIwX05vRmxpa2VyW10gPSB7CiAJezB4YWEsIDB4MTMsIDB4MDBhM30sCQkJLyogMDAsMTMsYTMsYWEgKi8KIAkJCQkJCS8qIChidWcgaW4genMyMTEuaW5mKSAqLwogCXsweGRkLCAweDAwLCAweDAxMDB9LAkJCS8qIDAwLDAxLDAwLGRkICovCkBAIC0zMzU0LDcgKzMzNTgsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjMwY19Jbml0aWFsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjMwY19Jbml0aWFsU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCkBAIC0zNTExLDcgKzM1MTUsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gb3Y3NjMwY19Jbml0aWFsU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBvdjc2MzBjX0luaXRpYWxbXSA9IHsKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKQEAgLTM2ODIsNyArMzY4Niw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwYXMxMDZiX0luaXRpYWxbXSA9IHsJLyogMTc2eDE0NCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBhczEwNmJfSW5pdGlhbFNjYWxlW10gPSB7CS8qIDE3NngxNDQgKi8KIC8qIEpQRUcgY29udHJvbCAqLwogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCiAvKiBTcmVhbSBhbmQgU2Vuc29yIHNwZWNpZmljICovCkBAIC0zODAwLDcgKzM4MDQsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGFzMTA2Yl9Jbml0aWFsU2NhbGVbXSA9IHsJLyogMzUyeDI4OCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBhczEwNmJfSW5pdGlhbFtdID0gewkvKiAzNTJ4Mjg4ICovCiAvKiBKUEVHIGNvbnRyb2wgKi8KIAl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAogLyogU3JlYW0gYW5kIFNlbnNvciBzcGVjaWZpYyAqLwpAQCAtMzk3MiwxMCArMzk3NiwxMCBAQAogCXt9CiB9OwogCi0vKiBmcm9tIHVzYnZtMzFiLmluZiAqLworLyogZnJvbSBsdldJTXYuaW5mIDA0NmQ6MDhhMi86MDhhYSAyMDA3LzA2LzAzICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGFzMjAyYl9Jbml0aWFsW10gPSB7CS8qIDY0MHg0ODAgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwJCS8qIDAwLDAwLDAxLGNjICovCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJCS8qIDAwLDA4LDAwLGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKIAl7MHhhMCwgMHgwZSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGUsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCQkvKiAwMCwwMiwwMCxjYyAqLwogCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwJLyogMDAsMDMsMDIsY2MgKi8KQEAgLTQwMDAsNyArNDAwNCw3IEBACiAJezB4YWEsIDB4MDksIDB4MDAwNn0sCQkJCS8qIDAwLDA5LDA2LGFhICovCiAJezB4YWEsIDB4MGEsIDB4MDAwMX0sCQkJCS8qIDAwLDBhLDAxLGFhICovCiAJezB4YWEsIDB4MGIsIDB4MDAwMX0sCQkJCS8qIDAwLDBiLDAxLGFhICovCi0JezB4YWEsIDB4MGMsIDB4MDAwOH0sCQkJCS8qIDAwLDBjLDA4LGFhICovCisJezB4YWEsIDB4MGMsIDB4MDAwNn0sCiAJezB4YWEsIDB4MGQsIDB4MDAwMH0sCQkJCS8qIDAwLDBkLDAwLGFhICovCiAJezB4YWEsIDB4MTAsIDB4MDAwMH0sCQkJCS8qIDAwLDEwLDAwLGFhICovCiAJezB4YWEsIDB4MTIsIDB4MDAwNX0sCQkJCS8qIDAwLDEyLDA1LGFhICovCkBAIC00MDE5LDEzICs0MDIzLDEzIEBACiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBhczIwMmJfSW5pdGlhbFNjYWxlW10gPSB7CS8qIDMyMHgyNDAgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwJCS8qIDAwLDAwLDAxLGNjICovCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJCS8qIDAwLDA4LDAwLGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKIAl7MHhhMCwgMHgwZSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGUsY2MgKi8KIAl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCQkvKiAwMCwwMiwxMCxjYyAqLwogCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwJLyogMDAsMDMsMDIsY2MgKi8KIAl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwJCS8qIDAwLDA0LDgwLGNjICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDVfRlJBTUVIRUlHSFRISUdIfSwJLyogMDAsMDUsMDEsY2MgKi8KLQl7MHhhMCwgMHhkMCwgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPV30sCS8qIDAwLDA2LGQwLGNjICovCisJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCS8qIDAwLDAxLDAxLGNjICovCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDAzLGNjICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDAxLGNjICovCkBAIC00MDM1LDcgKzQwMzksNyBAQAogCXsweGEwLCAweDA4LCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCQkvKiAwMSwxYSwwOCxjYyAqLwogCXsweGEwLCAweDAyLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCQkvKiAwMSwxYywwMixjYyAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDlCX1dJTkhFSUdIVEhJR0h9LAkJLyogMDAsOWIsMDEsY2MgKi8KLQl7MHhhMCwgMHhkOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAkJLyogMDAsOWMsZDgsY2MgKi8KKwl7MHhhMCwgMHhlOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAogCXsweGEwLCAweDAyLCBaQzNYWF9SMDlEX1dJTldJRFRISElHSH0sCQkvKiAwMCw5ZCwwMixjYyAqLwogCXsweGEwLCAweDg4LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwJCS8qIDAwLDllLDg4LGNjICovCiAJezB4YWEsIDB4MDIsIDB4MDAwMn0sCQkJCS8qIDAwLDAyLDAyLGFhICovCkBAIC00MDQ0LDcgKzQwNDgsNyBAQAogCXsweGFhLCAweDA5LCAweDAwMDZ9LAkJCQkvKiAwMCwwOSwwNixhYSAqLwogCXsweGFhLCAweDBhLCAweDAwMDF9LAkJCQkvKiAwMCwwYSwwMSxhYSAqLwogCXsweGFhLCAweDBiLCAweDAwMDF9LAkJCQkvKiAwMCwwYiwwMSxhYSAqLwotCXsweGFhLCAweDBjLCAweDAwMDh9LAkJCQkvKiAwMCwwYywwOCxhYSAqLworCXsweGFhLCAweDBjLCAweDAwMDZ9LAogCXsweGFhLCAweDBkLCAweDAwMDB9LAkJCQkvKiAwMCwwZCwwMCxhYSAqLwogCXsweGFhLCAweDEwLCAweDAwMDB9LAkJCQkvKiAwMCwxMCwwMCxhYSAqLwogCXsweGFhLCAweDEyLCAweDAwMDV9LAkJCQkvKiAwMCwxMiwwNSxhYSAqLwpAQCAtNDA1OSw2ICs0MDYzLDggQEAKIAl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCS8qIDAyLDUwLDA4LGNjICovCiAJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwJCS8qIDAzLDAxLDA4LGNjICovCiAJezB4YTAsIDB4NzAsIFpDM1hYX1IxOERfWVRBUkdFVH0sCQkvKiAwMSw4ZCw3MCxjYyAqLworCXsweGEwLCAweGZmLCBaQzNYWF9SMDk3X1dJTllTVEFSVEhJR0h9LAorCXsweGEwLCAweGZlLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCiAJe30KIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcGFzMjAyYl81MEhaW10gPSB7CkBAIC00MDY2LDIyICs0MDcyLDIyIEBACiAJezB4YTAsIDB4MjAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCQkvKiAwMCw4NywyMCxjYyAqLwogCXsweGEwLCAweDIxLCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LAkJLyogMDAsODgsMjEsY2MgKi8KIAl7MHhhYSwgMHgyMCwgMHgwMDAyfSwJCQkJLyogMDAsMjAsMDIsYWEgKi8KLQl7MHhhYSwgMHgyMSwgMHgwMDY4fSwJCQkJLyogMDAsMjEsNjgsYWEgKi8KKwl7MHhhYSwgMHgyMSwgMHgwMDFifSwKIAl7MHhhYSwgMHgwMywgMHgwMDQ0fSwJCQkJLyogMDAsMDMsNDQsYWEgKi8KLQl7MHhhYSwgMHgwNCwgMHgwMDA5fSwJCQkJLyogMDAsMDQsMDksYWEgKi8KLQl7MHhhYSwgMHgwNSwgMHgwMDI4fSwJCQkJLyogMDAsMDUsMjgsYWEgKi8KKwl7MHhhYSwgMHgwNCwgMHgwMDA4fSwKKwl7MHhhYSwgMHgwNSwgMHgwMDFifSwKIAl7MHhhYSwgMHgwZSwgMHgwMDAxfSwJCQkJLyogMDAsMGUsMDEsYWEgKi8KIAl7MHhhYSwgMHgwZiwgMHgwMDAwfSwJCQkJLyogMDAsMGYsMDAsYWEgKi8KLQl7MHhhMCwgMHgxNCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogMDEsYTksMTQsY2MgKi8KKwl7MHhhMCwgMHgxYywgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKIAl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAkvKiAwMSxhYSwyNCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMDAsY2MgKi8KLQl7MHhhMCwgMHgwNywgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsMDcsY2MgKi8KLQl7MHhhMCwgMHhkMiwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsZDIsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHgxYiwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDAsY2MgKi8KIAl7MHhhMCwgMHg0ZCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDRkLGNjICovCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogMDEsOGMsMTAsY2MgKi8KLQl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MGUsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDFiLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAogCXsweGEwLCAweDQ0LCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNDQsY2MgKi8KIAl7MHhhMCwgMHg2ZiwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJCS8qIDAwLDFlLDZmLGNjICovCiAJezB4YTAsIDB4YWQsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCQkvKiAwMCwxZixhZCxjYyAqLwpAQCAtNDA5NCwyMyArNDEwMCwyMyBAQAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAkJLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhMCwgMHgyMCwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwJCS8qIDAwLDg3LDIwLGNjICovCiAJezB4YTAsIDB4MjEsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCQkvKiAwMCw4OCwyMSxjYyAqLwotCXsweGFhLCAweDIwLCAweDAwMDJ9LAkJCQkvKiAwMCwyMCwwMixhYSAqLwotCXsweGFhLCAweDIxLCAweDAwNmN9LAkJCQkvKiAwMCwyMSw2YyxhYSAqLworCXsweGFhLCAweDIwLCAweDAwMDR9LAorCXsweGFhLCAweDIxLCAweDAwM2R9LAogCXsweGFhLCAweDAzLCAweDAwNDF9LAkJCQkvKiAwMCwwMyw0MSxhYSAqLwotCXsweGFhLCAweDA0LCAweDAwMDl9LAkJCQkvKiAwMCwwNCwwOSxhYSAqLwotCXsweGFhLCAweDA1LCAweDAwMmN9LAkJCQkvKiAwMCwwNSwyYyxhYSAqLworCXsweGFhLCAweDA0LCAweDAwMTB9LAorCXsweGFhLCAweDA1LCAweDAwM2R9LAogCXsweGFhLCAweDBlLCAweDAwMDF9LAkJCQkvKiAwMCwwZSwwMSxhYSAqLwogCXsweGFhLCAweDBmLCAweDAwMDB9LAkJCQkvKiAwMCwwZiwwMCxhYSAqLwotCXsweGEwLCAweDE0LCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAkvKiAwMSxhOSwxNCxjYyAqLworCXsweGEwLCAweDFjLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAogCXsweGEwLCAweDI0LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCS8qIDAxLGFhLDI0LGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAkvKiAwMSw5MCwwMCxjYyAqLwotCXsweGEwLCAweDBmLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAkvKiAwMSw5MSwwZixjYyAqLwotCXsweGEwLCAweGJlLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAkvKiAwMSw5MixiZSxjYyAqLworCXsweGEwLCAweDA0LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDNkLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCS8qIDAxLDk1LDAwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAkvKiAwMSw5NiwwMCxjYyAqLwogCXsweGEwLCAweDliLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwJLyogMDEsOTcsOWIsY2MgKi8KLQl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCQkvKiAwMSw4YywxMCxjYyAqLwotCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAkJLyogMDEsOGYsMjAsY2MgKi8KKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MWIsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCiAJezB4YTAsIDB4NDEsIFpDM1hYX1IwMURfSFNZTkNfMH0sCQkvKiAwMCwxZCw0MSxjYyAqLwogCXsweGEwLCAweDZmLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAkJLyogMDAsMWUsNmYsY2MgKi8KIAl7MHhhMCwgMHhhZCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwJCS8qIDAwLDFmLGFkLGNjICovCkBAIC00MTMwLDE2ICs0MTM2LDE2IEBACiAJezB4YWEsIDB4MDUsIDB4MDAwMH0sCQkJCS8qIDAwLDA1LDAwLGFhICovCiAJezB4YWEsIDB4MGUsIDB4MDAwMX0sCQkJCS8qIDAwLDBlLDAxLGFhICovCiAJezB4YWEsIDB4MGYsIDB4MDAwMH0sCQkJCS8qIDAwLDBmLDAwLGFhICovCi0JezB4YTAsIDB4MTQsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDAxLGE5LDE0LGNjICovCisJezB4YTAsIDB4MWMsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCiAJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogMDEsYWEsMjQsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDAxLDkwLDAwLGNjICovCi0JezB4YTAsIDB4MDcsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDAxLDkxLDA3LGNjICovCi0JezB4YTAsIDB4YzAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDAxLDkyLGMwLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwJLyogMDEsOTUsMDAsY2MgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCS8qIDAxLDk2LDAwLGNjICovCiAJezB4YTAsIDB4NDAsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAkvKiAwMSw5Nyw0MCxjYyAqLwotCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwJCS8qIDAxLDhjLDEwLGNjICovCi0JezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCQkvKiAwMSw4ZiwyMCxjYyAqLworCXsweGEwLCAweDBlLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgxYiwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKIAl7MHhhMCwgMHg0NSwgWkMzWFhfUjAxRF9IU1lOQ18wfSwJCS8qIDAwLDFkLDQ1LGNjICovCiAJezB4YTAsIDB4OGUsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCQkvKiAwMCwxZSw4ZSxjYyAqLwogCXsweGEwLCAweGMxLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAkJLyogMDAsMWYsYzEsY2MgKi8KQEAgLTQxNTIsMjMgKzQxNTgsMjMgQEAKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwJCS8qIDAwLDE5LDAwLGNjICovCiAJezB4YTAsIDB4MjAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCQkvKiAwMCw4NywyMCxjYyAqLwogCXsweGEwLCAweDIxLCBaQzNYWF9SMDg4X0VYUFRJTUVMT1d9LAkJLyogMDAsODgsMjEsY2MgKi8KLQl7MHhhYSwgMHgyMCwgMHgwMDAyfSwJCQkJLyogMDAsMjAsMDIsYWEgKi8KLQl7MHhhYSwgMHgyMSwgMHgwMDA0fSwJCQkJLyogMDAsMjEsMDQsYWEgKi8KKwl7MHhhYSwgMHgyMCwgMHgwMDA0fSwKKwl7MHhhYSwgMHgyMSwgMHgwMDA4fSwKIAl7MHhhYSwgMHgwMywgMHgwMDQyfSwJCQkJLyogMDAsMDMsNDIsYWEgKi8KLQl7MHhhYSwgMHgwNCwgMHgwMDA4fSwJCQkJLyogMDAsMDQsMDgsYWEgKi8KLQl7MHhhYSwgMHgwNSwgMHgwMDA0fSwJCQkJLyogMDAsMDUsMDQsYWEgKi8KKwl7MHhhYSwgMHgwNCwgMHgwMDEwfSwKKwl7MHhhYSwgMHgwNSwgMHgwMDA4fSwKIAl7MHhhYSwgMHgwZSwgMHgwMDAxfSwJCQkJLyogMDAsMGUsMDEsYWEgKi8KIAl7MHhhYSwgMHgwZiwgMHgwMDAwfSwJCQkJLyogMDAsMGYsMDAsYWEgKi8KLQl7MHhhMCwgMHgxNCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwJLyogMDEsYTksMTQsY2MgKi8KKwl7MHhhMCwgMHgxYywgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKIAl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAkvKiAwMSxhYSwyNCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMDAsY2MgKi8KLQl7MHhhMCwgMHgwZiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsMGYsY2MgKi8KLQl7MHhhMCwgMHg5ZiwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsOWYsY2MgKi8KKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDAsY2MgKi8KIAl7MHhhMCwgMHg4MSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDgxLGNjICovCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogMDEsOGMsMTAsY2MgKi8KLQl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLDhmLDIwLGNjICovCisJezB4YTAsIDB4MGUsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDFiLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAogCXsweGEwLCAweDQyLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNDIsY2MgKi8KIAl7MHhhMCwgMHg2ZiwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJCS8qIDAwLDFlLDZmLGNjICovCiAJezB4YTAsIDB4YWYsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCQkvKiAwMCwxZixhZixjYyAqLwpAQCAtNDE4MiwyMiArNDE4OCwyMiBAQAogCXsweGEwLCAweDIwLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAkJLyogMDAsODcsMjAsY2MgKi8KIAl7MHhhMCwgMHgyMSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwJCS8qIDAwLDg4LDIxLGNjICovCiAJezB4YWEsIDB4MjAsIDB4MDAwMn0sCQkJCS8qIDAwLDIwLDAyLGFhICovCi0JezB4YWEsIDB4MjEsIDB4MDAyMH0sCQkJCS8qIDAwLDIxLDIwLGFhICovCisJezB4YWEsIDB4MjEsIDB4MDAwNn0sCiAJezB4YWEsIDB4MDMsIDB4MDA0MH0sCQkJCS8qIDAwLDAzLDQwLGFhICovCiAJezB4YWEsIDB4MDQsIDB4MDAwOH0sCQkJCS8qIDAwLDA0LDA4LGFhICovCi0JezB4YWEsIDB4MDUsIDB4MDAyMH0sCQkJCS8qIDAwLDA1LDIwLGFhICovCisJezB4YWEsIDB4MDUsIDB4MDAwNn0sCiAJezB4YWEsIDB4MGUsIDB4MDAwMX0sCQkJCS8qIDAwLDBlLDAxLGFhICovCiAJezB4YWEsIDB4MGYsIDB4MDAwMH0sCQkJCS8qIDAwLDBmLDAwLGFhICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAkvKiAwMSw5MCwwMCxjYyAqLwotCXsweGEwLCAweDA3LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAkvKiAwMSw5MSwwNyxjYyAqLwotCXsweGEwLCAweGYwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAkvKiAwMSw5MixmMCxjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCS8qIDAxLDk1LDAwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAkvKiAwMSw5NiwwMCxjYyAqLwotCXsweGEwLCAweDAyLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwJLyogMDEsOTcsMDIsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogMDEsOGMsMTAsY2MgKi8KIAl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLDhmLDIwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDAxLGE5LDAwLGNjICovCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogMDEsYWEsMDAsY2MgKi8KKwl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAogCXsweGEwLCAweDQwLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNDAsY2MgKi8KIAl7MHhhMCwgMHg2MCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJCS8qIDAwLDFlLDYwLGNjICovCiAJezB4YTAsIDB4OTAsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCQkvKiAwMCwxZiw5MCxjYyAqLwpAQCAtNDIxMCwyMyArNDIxNiwyMyBAQAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAkJLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhMCwgMHgyMCwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwJCS8qIDAwLDg3LDIwLGNjICovCiAJezB4YTAsIDB4MjEsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCQkvKiAwMCw4OCwyMSxjYyAqLwotCXsweGFhLCAweDIwLCAweDAwMDJ9LAkJCQkvKiAwMCwyMCwwMixhYSAqLwotCXsweGFhLCAweDIxLCAweDAwMTB9LAkJCQkvKiAwMCwyMSwxMCxhYSAqLworCXsweGFhLCAweDIwLCAweDAwMDR9LAorCXsweGFhLCAweDIxLCAweDAwMGN9LAogCXsweGFhLCAweDAzLCAweDAwNDB9LAkJCQkvKiAwMCwwMyw0MCxhYSAqLwotCXsweGFhLCAweDA0LCAweDAwMDh9LAkJCQkvKiAwMCwwNCwwOCxhYSAqLwotCXsweGFhLCAweDA1LCAweDAwMTB9LAkJCQkvKiAwMCwwNSwxMCxhYSAqLworCXsweGFhLCAweDA0LCAweDAwMTB9LAorCXsweGFhLCAweDA1LCAweDAwMGN9LAogCXsweGFhLCAweDBlLCAweDAwMDF9LAkJCQkvKiAwMCwwZSwwMSxhYSAqLwogCXsweGFhLCAweDBmLCAweDAwMDB9LAkJCQkvKiAwMCwwZiwwMCxhYSAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwJLyogMDEsOTAsMDAsY2MgKi8KLQl7MHhhMCwgMHgwZiwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwJLyogMDEsOTEsMGYsY2MgKi8KLQl7MHhhMCwgMHhmMCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwJLyogMDEsOTIsZjAsY2MgKi8KKwl7MHhhMCwgMHgwNCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHgwYywgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAkvKiAwMSw5NSwwMCxjYyAqLwogCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwJLyogMDEsOTYsMDAsY2MgKi8KIAl7MHhhMCwgMHgwMiwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCS8qIDAxLDk3LDAyLGNjICovCiAJezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAkJLyogMDEsOGMsMTAsY2MgKi8KIAl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwJCS8qIDAxLDhmLDIwLGNjICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCS8qIDAxLGE5LDAwLGNjICovCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwJLyogMDEsYWEsMDAsY2MgKi8KKwl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAogCXsweGEwLCAweDQwLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAkJLyogMDAsMWQsNDAsY2MgKi8KIAl7MHhhMCwgMHg2MCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwJCS8qIDAwLDFlLDYwLGNjICovCiAJezB4YTAsIDB4OTAsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCQkvKiAwMCwxZiw5MCxjYyAqLwpAQCAtNDcxMyw4ICs0NzE5LDggQEAKIAl7fQogfTsKIAotLyogZnJvbSBvZW05LmluZiAtIEhLUiwlUE8yMDMwJSxJbml0aWFsIC0gNjQweDQ4MCAtIChjbG9zZSB0byBDUzIxMDIpICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gUE8yMDMwX21vZGUwW10gPSB7CisvKiBmcm9tIG9lbTkuaW5mICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gcG8yMDMwX0luaXRpYWxbXSA9IHsJLyogNjQweDQ4MCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LCAvKiAwMCwwMCwwMSxjYyAqLwogCXsweGEwLCAweDA0LCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwJLyogMDAsMDIsMDQsY2MgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwgLyogMDAsMTAsMDEsY2MgKi8KQEAgLTQ3OTAsOCArNDc5Niw4IEBACiAJe30KIH07CiAKLS8qIGZyb20gb2VtOS5pbmYgLSBIS1IsJVBPMjAzMCUsSW5pdGlhbFNjYWxlIC0gMzIweDI0MCAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIFBPMjAzMF9tb2RlMVtdID0geworLyogZnJvbSBvZW05LmluZiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBvMjAzMF9Jbml0aWFsU2NhbGVbXSA9IHsJLyogMzIweDI0MCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LCAvKiAwMCwwMCwwMSxjYyAqLwogCXsweGEwLCAweDEwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwgLyogMDAsMDIsMTAsY2MgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwgLyogMDAsMTAsMDEsY2MgKi8KQEAgLTQ4NjcsNyArNDg3Myw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBQTzIwMzBfNTBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBvMjAzMF81MEhaW10gPSB7CiAJezB4YWEsIDB4OGQsIDB4MDAwOH0sIC8qIDAwLDhkLDA4LGFhICovCiAJezB4YWEsIDB4MWEsIDB4MDAwMX0sIC8qIDAwLDFhLDAxLGFhICovCiAJezB4YWEsIDB4MWIsIDB4MDAwYX0sIC8qIDAwLDFiLDBhLGFhICovCkBAIC00ODg5LDcgKzQ4OTUsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gUE8yMDMwXzYwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBwbzIwMzBfNjBIWltdID0gewogCXsweGFhLCAweDhkLCAweDAwMDh9LCAvKiAwMCw4ZCwwOCxhYSAqLwogCXsweGFhLCAweDFhLCAweDAwMDB9LCAvKiAwMCwxYSwwMCxhYSAqLwogCXsweGFhLCAweDFiLCAweDAwZGV9LCAvKiAwMCwxYixkZSxhYSAqLwpAQCAtNDkxMiw3ICs0OTE4LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIFBPMjAzMF9Ob0ZsaWtlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBvMjAzMF9Ob0ZsaWtlcltdID0gewogCXsweGEwLCAweDAyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwgLyogMDEsODAsMDIsY2MgKi8KIAl7MHhhYSwgMHg4ZCwgMHgwMDBkfSwgLyogMDAsOGQsMGQsYWEgKi8KIAl7MHhhYSwgMHgxYSwgMHgwMDAwfSwgLyogMDAsMWEsMDAsYWEgKi8KQEAgLTQ5MjQsNyArNDkzMCw3IEBACiB9OwogCiAvKiBURVNUICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMENLX0luaXRpYWxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY0tfSW5pdGlhbFNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDEsIDB4MDAzYn0sCiAJezB4YTAsIDB4MGUsIDB4MDAzYX0sCkBAIC01MTI3LDcgKzUxMzMsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMENLX0luaXRpYWxTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjS19Jbml0aWFsW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDEsIDB4MDAzYn0sCiAJezB4YTAsIDB4MGUsIDB4MDAzYX0sCkBAIC01NTYwLDcgKzU1NjYsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwX0luaXRpYWxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfSW5pdGlhbFNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCQkvKiAwMCwwMCwwMSxjYywgKi8KIAl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkJLyogMDAsMDgsMDIsY2MsICovCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjLCAqLwpAQCAtNTYyNyw3ICs1NjMzLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF9Jbml0aWFsU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfSW5pdGlhbFtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAkJLyogMDAsMDAsMDEsY2MsICovCiAJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJCS8qIDAwLDA4LDAyLGNjLCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYywgKi8KQEAgLTU2OTIsOCArNTY5OCw3IEBACiAJezB4YTAsIDB4NjUsIFpDM1hYX1IxMThfQkdBSU59LAkJLyogMDEsMTgsNjUsY2MgKi8KIAl7fQogfTsKLS8qICI1MEhaIiBsaWdodCBmcmVxdWVuY3kgYmFuZGluZyBmaWx0ZXIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfNTBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF81MEhaU2NhbGVbXSA9IHsKIAl7MHhhYSwgMHg4MiwgMHgwMDAwfSwJCS8qIDAwLDgyLDAwLGFhICovCiAJezB4YWEsIDB4ODMsIDB4MDAwMX0sCQkvKiAwMCw4MywwMSxhYSAqLwogCXsweGFhLCAweDg0LCAweDAwYWF9LAkJLyogMDAsODQsYWEsYWEgKi8KQEAgLTU3MTcsOCArNTcyMiw3IEBACiAJe30KIH07CiAKLS8qICI1MEhaU2NhbGUiIGxpZ2h0IGZyZXF1ZW5jeSBiYW5kaW5nIGZpbHRlciAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF81MEhaU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfNTBIWltdID0gewogCXsweGFhLCAweDgyLCAweDAwMDB9LAkJLyogMDAsODIsMDAsYWEgKi8KIAl7MHhhYSwgMHg4MywgMHgwMDAzfSwJCS8qIDAwLDgzLDAzLGFhICovCiAJezB4YWEsIDB4ODQsIDB4MDA1NH0sCQkvKiAwMCw4NCw1NCxhYSAqLwpAQCAtNTc0Miw4ICs1NzQ2LDcgQEAKIAl7fQogfTsKIAotLyogIjYwSFoiIGxpZ2h0IGZyZXF1ZW5jeSBiYW5kaW5nIGZpbHRlciAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF82MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwXzYwSFpTY2FsZVtdID0gewogCXsweGFhLCAweDgyLCAweDAwMDB9LAkJLyogMDAsODIsMDAsYWEgKi8KIAl7MHhhYSwgMHg4MywgMHgwMDAxfSwJCS8qIDAwLDgzLDAxLGFhICovCiAJezB4YWEsIDB4ODQsIDB4MDA2Mn0sCQkvKiAwMCw4NCw2MixhYSAqLwpAQCAtNTc2Nyw4ICs1NzcwLDcgQEAKIAl7fQogfTsKIAotLyogIjYwSFpTY2FsZSIgbGlnaHQgZnJlcXVlbmN5IGJhbmRpbmcgaWx0ZXIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfNjBIWlNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfdmYwMjUwXzYwSFpbXSA9IHsKIAl7MHhhYSwgMHg4MiwgMHgwMDAwfSwJCS8qIDAwLDgyLDAwLGFhICovCiAJezB4YWEsIDB4ODMsIDB4MDAwMn0sCQkvKiAwMCw4MywwMixhYSAqLwogCXsweGFhLCAweDg0LCAweDAwYzR9LAkJLyogMDAsODQsYzQsYWEgKi8KQEAgLTU3OTIsOCArNTc5NCw3IEBACiAJe30KIH07CiAKLS8qICJOb0ZsaWtlciIgbGlnaHQgZnJlcXVlbmN5IGJhbmRpbmcgZmx0ZXIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXJTY2FsZVtdID0gewogCXsweGEwLCAweDBjLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAkJLyogMDEsMDAsMGMsY2MsICovCiAJezB4YWEsIDB4ODIsIDB4MDAwMH0sCQkvKiAwMCw4MiwwMCxhYSAqLwogCXsweGFhLCAweDgzLCAweDAwMDB9LAkJLyogMDAsODMsMDAsYWEgKi8KQEAgLTU4MTUsOCArNTgxNiw3IEBACiAJe30KIH07CiAKLS8qICJOb0ZsaWtlclNjYWxlIiBsaWdodCBmcmVxdWVuY3kgYmFuZGluZyBmaWx0ZXIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXJTY2FsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX3ZmMDI1MF9Ob0ZsaWtlcltdID0gewogCXsweGEwLCAweDBjLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAkJLyogMDEsMDAsMGMsY2MsICovCiAJezB4YWEsIDB4ODIsIDB4MDAwMH0sCQkvKiAwMCw4MiwwMCxhYSAqLwogCXsweGFhLCAweDgzLCAweDAwMDB9LAkJLyogMDAsODMsMDAsYWEgKi8KQEAgLTU4MzksNyArNTgzOSw3IEBACiB9OwogCiBzdGF0aWMgdTggcmVnX3JfaShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCV9fdTE2IGluZGV4KQorCQl1MTYgaW5kZXgpCiB7CiAJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKQEAgLTU4NTIsNyArNTg1Miw3IEBACiB9CiAKIHN0YXRpYyB1OCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCV9fdTE2IGluZGV4KQorCQl1MTYgaW5kZXgpCiB7CiAJdTggcmV0OwogCkBAIC01ODYyLDggKzU4NjIsOCBAQAogfQogCiBzdGF0aWMgdm9pZCByZWdfd19pKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCi0JCQlfX3U4IHZhbHVlLAotCQkJX191MTYgaW5kZXgpCisJCQl1OCB2YWx1ZSwKKwkJCXUxNiBpbmRleCkKIHsKIAl1c2JfY29udHJvbF9tc2coZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCkBAIC01ODc0LDE4ICs1ODc0LDE4IEBACiB9CiAKIHN0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCi0JCQlfX3U4IHZhbHVlLAotCQkJX191MTYgaW5kZXgpCisJCQl1OCB2YWx1ZSwKKwkJCXUxNiBpbmRleCkKIHsKIAlQREVCVUcoRF9VU0JPLCAicmVnIHcgWyUwNHhdID0gJTAyeCIsIGluZGV4LCB2YWx1ZSk7CiAJcmVnX3dfaShkZXYsIHZhbHVlLCBpbmRleCk7CiB9CiAKLXN0YXRpYyBfX3UxNiBpMmNfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQlfX3U4IHJlZykKK3N0YXRpYyB1MTYgaTJjX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggcmVnKQogewotCV9fdTggcmV0Ynl0ZTsKLQlfX3UxNiByZXR2YWw7CisJdTggcmV0Ynl0ZTsKKwl1MTYgcmV0dmFsOwogCiAJcmVnX3dfaShnc3BjYV9kZXYtPmRldiwgcmVnLCAweDAwOTIpOwogCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIDB4MDIsIDB4MDA5MCk7CQkvKiA8LSByZWFkIGNvbW1hbmQgKi8KQEAgLTU5MDAsMTIgKzU5MDAsMTIgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgX191OCBpMmNfd3JpdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJX191OCByZWcsCi0JCQlfX3U4IHZhbEwsCi0JCQlfX3U4IHZhbEgpCitzdGF0aWMgdTggaTJjX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4IHJlZywKKwkJCXU4IHZhbEwsCisJCQl1OCB2YWxIKQogewotCV9fdTggcmV0Ynl0ZTsKKwl1OCByZXRieXRlOwogCiAJcmVnX3dfaShnc3BjYV9kZXYtPmRldiwgcmVnLCAweDkyKTsKIAlyZWdfd19pKGdzcGNhX2Rldi0+ZGV2LCB2YWxMLCAweDkzKTsKQEAgLTU5NTcsMjQgKzU5NTcsMjQgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGk7Ci0JY29uc3QgX191OCAqbWF0cml4OworCWNvbnN0IHU4ICptYXRyaXg7CiAJc3RhdGljIGNvbnN0IHU4IGFkY20yNzAwX21hdHJpeFs5XSA9CiAvKgkJezB4NjYsIDB4ZWQsIDB4ZWQsIDB4ZWQsIDB4NjYsIDB4ZWQsIDB4ZWQsIDB4ZWQsIDB4NjZ9OyAqLwogLyptcy13aW4qLwogCQl7MHg3NCwgMHhlZCwgMHhlZCwgMHhlZCwgMHg3NCwgMHhlZCwgMHhlZCwgMHhlZCwgMHg3NH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggZ2MwMzA1X21hdHJpeFs5XSA9CisJc3RhdGljIGNvbnN0IHU4IGdjMDMwNV9tYXRyaXhbOV0gPQogCQl7MHg1MCwgMHhmOCwgMHhmOCwgMHhmOCwgMHg1MCwgMHhmOCwgMHhmOCwgMHhmOCwgMHg1MH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggb3Y3NjIwX21hdHJpeFs5XSA9CisJc3RhdGljIGNvbnN0IHU4IG92NzYyMF9tYXRyaXhbOV0gPQogCQl7MHg1OCwgMHhmNCwgMHhmNCwgMHhmNCwgMHg1OCwgMHhmNCwgMHhmNCwgMHhmNCwgMHg1OH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggcGFzMjAyYl9tYXRyaXhbOV0gPQorCXN0YXRpYyBjb25zdCB1OCBwYXMyMDJiX21hdHJpeFs5XSA9CiAJCXsweDRjLCAweGY1LCAweGZmLCAweGY5LCAweDUxLCAweGY1LCAweGZiLCAweGVkLCAweDVmfTsKLQlzdGF0aWMgY29uc3QgX191OCBwbzIwMzBfbWF0cml4WzldID0KKwlzdGF0aWMgY29uc3QgdTggcG8yMDMwX21hdHJpeFs5XSA9CiAJCXsweDYwLCAweGYwLCAweGYwLCAweGYwLCAweDYwLCAweGYwLCAweGYwLCAweGYwLCAweDYwfTsKIAlzdGF0aWMgY29uc3QgdTggdGFzNTEzMGNfbWF0cml4WzldID0KIAkJezB4NjgsIDB4ZWMsIDB4ZWMsIDB4ZWMsIDB4NjgsIDB4ZWMsIDB4ZWMsIDB4ZWMsIDB4Njh9OwotCXN0YXRpYyBjb25zdCBfX3U4IHZmMDI1MF9tYXRyaXhbOV0gPQorCXN0YXRpYyBjb25zdCB1OCB2ZjAyNTBfbWF0cml4WzldID0KIAkJezB4N2IsIDB4ZWEsIDB4ZWEsIDB4ZWEsIDB4N2IsIDB4ZWEsIDB4ZWEsIDB4ZWEsIDB4N2J9OwotCXN0YXRpYyBjb25zdCBfX3U4ICptYXRyaXhfdGJbU0VOU09SX01BWF0gPSB7CisJc3RhdGljIGNvbnN0IHU4ICptYXRyaXhfdGJbU0VOU09SX01BWF0gPSB7CiAJCWFkY20yNzAwX21hdHJpeCwgLyogU0VOU09SX0FEQ00yNzAwIDAgKi8KIAkJb3Y3NjIwX21hdHJpeCwJLyogU0VOU09SX0NTMjEwMiAxICovCiAJCU5VTEwsCQkvKiBTRU5TT1JfQ1MyMTAySyAyICovCkBAIC02MDA2LDExICs2MDA2LDEyIEBACiBzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191OCBicmlnaHRuZXNzOworCXU4IGJyaWdodG5lc3M7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9HQzAzMDU6CiAJY2FzZSBTRU5TT1JfT1Y3NjIwOgorCWNhc2UgU0VOU09SX1BBUzIwMkI6CiAJY2FzZSBTRU5TT1JfUE8yMDMwOgogCQlyZXR1cm47CiAJfQpAQCAtNjAzNCw3ICs2MDM1LDcgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCBzaGFycG5lc3M7Ci0Jc3RhdGljIGNvbnN0IF9fdTggc2hhcnBuZXNzX3RiW11bMl0gPSB7CisJc3RhdGljIGNvbnN0IHU4IHNoYXJwbmVzc190YltdWzJdID0gewogCQl7MHgwMiwgMHgwM30sCiAJCXsweDA0LCAweDA3fSwKIAkJezB4MDgsIDB4MGZ9LApAQCAtNjA1MywxMTggKzYwNTQsNjkgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCWNvbnN0IF9fdTggKlRnYW1tYSwgKlRncmFkaWVudDsKLQlpbnQgZywgaSwgazsKLQlzdGF0aWMgY29uc3QgX191OCBrZ2FtbWFfdGJbMTZdID0JLyogZGVsdGEgZm9yIGNvbnRyYXN0ICovCisJY29uc3QgdTggKlRnYW1tYTsKKwlpbnQgZywgaSwgaywgYWRqLCBncDsKKwl1OCBnclsxNl07CisJc3RhdGljIGNvbnN0IHU4IGRlbHRhX3RiWzE2XSA9CQkvKiBkZWx0YSBmb3IgY29udHJhc3QgKi8KIAkJezB4MTUsIDB4MGQsIDB4MGEsIDB4MDksIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsCiAJCSAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4fTsKLQlzdGF0aWMgY29uc3QgX191OCBrZ3JhZF90YlsxNl0gPQotCQl7MHgxYiwgMHgwNiwgMHgwMywgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDYsIDB4MDR9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV8xWzE2XSA9CisJc3RhdGljIGNvbnN0IHU4IGdhbW1hX3RiWzZdWzE2XSA9IHsKIAkJezB4MDAsIDB4MDAsIDB4MDMsIDB4MGQsIDB4MWIsIDB4MmUsIDB4NDUsIDB4NWYsCi0JCSAweDc5LCAweDkzLCAweGFiLCAweGMxLCAweGQ0LCAweGU1LCAweGYzLCAweGZmfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ3JhZGllbnRfMVsxNl0gPQotCQl7MHgwMCwgMHgwMSwgMHgwNSwgMHgwYiwgMHgxMCwgMHgxNSwgMHgxOCwgMHgxYSwKLQkJIDB4MWEsIDB4MTgsIDB4MTYsIDB4MTQsIDB4MTIsIDB4MGYsIDB4MGQsIDB4MDZ9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV8yWzE2XSA9CisJCSAweDc5LCAweDkzLCAweGFiLCAweGMxLCAweGQ0LCAweGU1LCAweGYzLCAweGZmfSwKIAkJezB4MDEsIDB4MGMsIDB4MWYsIDB4M2EsIDB4NTMsIDB4NmQsIDB4ODUsIDB4OWMsCi0JCSAweGIwLCAweGMyLCAweGQxLCAweGRlLCAweGU5LCAweGYyLCAweGY5LCAweGZmfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ3JhZGllbnRfMlsxNl0gPQotCQl7MHgwNSwgMHgwZiwgMHgxNiwgMHgxYSwgMHgxOSwgMHgxOSwgMHgxNywgMHgxNSwKLQkJIDB4MTIsIDB4MTAsIDB4MGUsIDB4MGIsIDB4MDksIDB4MDgsIDB4MDYsIDB4MDN9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV8zWzE2XSA9CisJCSAweGIwLCAweGMyLCAweGQxLCAweGRlLCAweGU5LCAweGYyLCAweGY5LCAweGZmfSwKIAkJezB4MDQsIDB4MTYsIDB4MzAsIDB4NGUsIDB4NjgsIDB4ODEsIDB4OTgsIDB4YWMsCi0JCSAweGJlLCAweGNkLCAweGRhLCAweGU0LCAweGVkLCAweGY1LCAweGZiLCAweGZmfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ3JhZGllbnRfM1sxNl0gPQotCQl7MHgwYywgMHgxNiwgMHgxYiwgMHgxYywgMHgxOSwgMHgxOCwgMHgxNSwgMHgxMiwKLQkJIDB4MTAsIDB4MGQsIDB4MGIsIDB4MDksIDB4MDgsIDB4MDYsIDB4MDUsIDB4MDN9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV80WzE2XSA9CisJCSAweGJlLCAweGNkLCAweGRhLCAweGU0LCAweGVkLCAweGY1LCAweGZiLCAweGZmfSwKIAkJezB4MTMsIDB4MzgsIDB4NTksIDB4NzksIDB4OTIsIDB4YTcsIDB4YjksIDB4YzgsCi0JCSAweGQ0LCAweGRmLCAweGU3LCAweGVlLCAweGY0LCAweGY5LCAweGZjLCAweGZmfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ3JhZGllbnRfNFsxNl0gPQotCQl7MHgyNiwgMHgyMiwgMHgyMCwgMHgxYywgMHgxNiwgMHgxMywgMHgxMCwgMHgwZCwKLQkJIDB4MGIsIDB4MDksIDB4MDcsIDB4MDYsIDB4MDUsIDB4MDQsIDB4MDMsIDB4MDJ9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV81WzE2XSA9CisJCSAweGQ0LCAweGRmLCAweGU3LCAweGVlLCAweGY0LCAweGY5LCAweGZjLCAweGZmfSwKIAkJezB4MjAsIDB4NGIsIDB4NmUsIDB4OGQsIDB4YTMsIDB4YjUsIDB4YzUsIDB4ZDIsCi0JCSAweGRjLCAweGU1LCAweGVjLCAweGYyLCAweGY2LCAweGZhLCAweGZkLCAweGZmfTsKLQlzdGF0aWMgY29uc3QgX191OCBUZ3JhZGllbnRfNVsxNl0gPQotCQl7MHgzNywgMHgyNiwgMHgyMCwgMHgxYSwgMHgxNCwgMHgxMCwgMHgwZSwgMHgwYiwKLQkJIDB4MDksIDB4MDcsIDB4MDYsIDB4MDUsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MDJ9OwotCXN0YXRpYyBjb25zdCBfX3U4IFRnYW1tYV82WzE2XSA9CQkvKiA/PyB3YXMgZ2FtbWEgNSAqLworCQkgMHhkYywgMHhlNSwgMHhlYywgMHhmMiwgMHhmNiwgMHhmYSwgMHhmZCwgMHhmZn0sCiAJCXsweDI0LCAweDQ0LCAweDY0LCAweDg0LCAweDlkLCAweGIyLCAweGM0LCAweGQzLAotCQkgMHhlMCwgMHhlYiwgMHhmNCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07Ci0Jc3RhdGljIGNvbnN0IF9fdTggVGdyYWRpZW50XzZbMTZdID0KLQkJezB4MTgsIDB4MjAsIDB4MjAsIDB4MWMsIDB4MTYsIDB4MTMsIDB4MTAsIDB4MGUsCi0JCSAweDBiLCAweDA5LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxfTsKLQlzdGF0aWMgY29uc3QgX191OCAqZ2FtbWFfdGJbXSA9IHsKLQkJTlVMTCwgVGdhbW1hXzEsIFRnYW1tYV8yLAotCQlUZ2FtbWFfMywgVGdhbW1hXzQsIFRnYW1tYV81LCBUZ2FtbWFfNgorCQkgMHhlMCwgMHhlYiwgMHhmNCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn0sCiAJfTsKLQlzdGF0aWMgY29uc3QgX191OCAqZ3JhZGllbnRfdGJbXSA9IHsKLQkJTlVMTCwgVGdyYWRpZW50XzEsIFRncmFkaWVudF8yLAotCQlUZ3JhZGllbnRfMywgVGdyYWRpZW50XzQsIFRncmFkaWVudF81LCBUZ3JhZGllbnRfNgotCX07Ci0jaWZkZWYgR1NQQ0FfREVCVUcKLQlfX3U4IHZbMTZdOwotI2VuZGlmCiAKLQlUZ2FtbWEgPSBnYW1tYV90YltzZC0+Z2FtbWFdOwotCVRncmFkaWVudCA9IGdyYWRpZW50X3RiW3NkLT5nYW1tYV07CisJVGdhbW1hID0gZ2FtbWFfdGJbc2QtPmdhbW1hIC0gMV07CiAKLQlrID0gKHNkLT5jb250cmFzdCAtIDEyOCkJCS8qIC0xMjggLyAxMjggKi8KLQkJCSogVGdhbW1hWzBdOwotCVBERUJVRyhEX0NPTkYsICJnYW1tYTolZCBjb250cmFzdDolZCBnYW1tYSBjb2VmZjogJWQvMTI4IiwKLQkJc2QtPmdhbW1hLCBzZC0+Y29udHJhc3QsIGspOworCWsgPSAoKGludCkgc2QtPmNvbnRyYXN0IC0gMTI4KTsJCS8qIC0xMjggLyAxMjggKi8KKwlhZGogPSAwOworCWdwID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlnID0gVGdhbW1hW2ldICsga2dhbW1hX3RiW2ldICogayAvIDEyODsKKwkJZyA9IFRnYW1tYVtpXSAtIGRlbHRhX3RiW2ldICogayAvIDEyOCAtIGFkaiAvIDI7CiAJCWlmIChnID4gMHhmZikKIAkJCWcgPSAweGZmOwogCQllbHNlIGlmIChnIDw9IDApCiAJCQlnID0gMTsKIAkJcmVnX3coZGV2LCBnLCAweDAxMjAgKyBpKTsJLyogZ2FtbWEgKi8KLSNpZmRlZiBHU1BDQV9ERUJVRwotCQlpZiAoZ3NwY2FfZGVidWcgJiBEX0NPTkYpCi0JCQl2W2ldID0gZzsKLSNlbmRpZgotCX0KLQlQREVCVUcoRF9DT05GLCAidGI6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIsCi0JCXZbMF0sIHZbMV0sIHZbMl0sIHZbM10sIHZbNF0sIHZbNV0sIHZbNl0sIHZbN10pOwotCVBERUJVRyhEX0NPTkYsICIgICAgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IiwKLQkJdls4XSwgdls5XSwgdlsxMF0sIHZbMTFdLCB2WzEyXSwgdlsxM10sIHZbMTRdLCB2WzE1XSk7Ci0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJZyA9IFRncmFkaWVudFtpXSAtIGtncmFkX3RiW2ldICogayAvIDEyODsKLQkJaWYgKGcgPiAweGZmKQotCQkJZyA9IDB4ZmY7Ci0JCWVsc2UgaWYgKGcgPD0gMCkgewotCQkJaWYgKGkgIT0gMTUpCi0JCQkJZyA9IDA7CisJCWlmIChrID4gMCkKKwkJCWFkai0tOworCQllbHNlCisJCQlhZGorKzsKKworCQlpZiAoaSAhPSAwKSB7CisJCQlpZiAoZ3AgPT0gMCkKKwkJCQlncltpIC0gMV0gPSAwOwogCQkJZWxzZQotCQkJCWcgPSAxOworCQkJCWdyW2kgLSAxXSA9IGcgLSBncDsKIAkJfQotCQlyZWdfdyhkZXYsIGcsIDB4MDEzMCArIGkpOwkvKiBncmFkaWVudCAqLwotI2lmZGVmIEdTUENBX0RFQlVHCi0JCWlmIChnc3BjYV9kZWJ1ZyAmIERfQ09ORikKLQkJCXZbaV0gPSBnOwotI2VuZGlmCisJCWdwID0gZzsKIAl9Ci0JUERFQlVHKERfQ09ORiwgIiAgICAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngiLAotCQl2WzBdLCB2WzFdLCB2WzJdLCB2WzNdLCB2WzRdLCB2WzVdLCB2WzZdLCB2WzddKTsKLQlQREVCVUcoRF9DT05GLCAiICAgICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIsCi0JCXZbOF0sIHZbOV0sIHZbMTBdLCB2WzExXSwgdlsxMl0sIHZbMTNdLCB2WzE0XSwgdlsxNV0pOworCWdyWzE1XSA9IGdyWzE0XSAvIDI7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCXJlZ193KGRldiwgZ3JbaV0sIDB4MDEzMCArIGkpOwkvKiBncmFkaWVudCAqLwogfQogCiBzdGF0aWMgdm9pZCBzZXRxdWFsaXR5KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCV9fdTggZnJ4dDsKKwl1OCBmcnh0OwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfQURDTTI3MDA6CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgogCWNhc2UgU0VOU09SX0hWNzEzMUI6CiAJY2FzZSBTRU5TT1JfT1Y3NjIwOgorCWNhc2UgU0VOU09SX1BBUzIwMkI6CiAJY2FzZSBTRU5TT1JfUE8yMDMwOgogCQlyZXR1cm47CiAJfQpAQCAtNjIxOCw5ICs2MTcwLDkgQEAKIAkJIGhkY3MyMDIwYl81MEhaLCBoZGNzMjAyMGJfNTBIWiwKIAkJIGhkY3MyMDIwYl82MEhaLCBoZGNzMjAyMGJfNjBIWn0sCiAvKiBTRU5TT1JfSFY3MTMxQiA1ICovCi0JCXtodjcxMzFiX05vRmxpa2VyU2NhbGUsIGh2NzEzMWJfTm9GbGlrZXIsCi0JCSBodjcxMzFiXzUwSFpTY2FsZSwgaHY3MTMxYl81MEhaLAotCQkgaHY3MTMxYl82MEhaU2NhbGUsIGh2NzEzMWJfNjBIWn0sCisJCXtodjcxMzFiX05vRmxpa2VyLCBodjcxMzFiX05vRmxpa2VyU2NhbGUsCisJCSBodjcxMzFiXzUwSFosIGh2NzEzMWJfNTBIWlNjYWxlLAorCQkgaHY3MTMxYl82MEhaLCBodjcxMzFiXzYwSFpTY2FsZX0sCiAvKiBTRU5TT1JfSFY3MTMxQyA2ICovCiAJCXtOVUxMLCBOVUxMLAogCQkgTlVMTCwgTlVMTCwKQEAgLTYyMzAsMTcgKzYxODIsMTcgQEAKIAkJIGljbTEwNWFfNTBIWiwgaWNtMTA1YV81MEhaU2NhbGUsCiAJCSBpY20xMDVhXzYwSFosIGljbTEwNWFfNjBIWlNjYWxlfSwKIC8qIFNFTlNPUl9NQzUwMUNCIDggKi8KLQkJe01DNTAxQ0JfTm9GbGlrZXIsIE1DNTAxQ0JfTm9GbGlrZXJTY2FsZSwKLQkJIE1DNTAxQ0JfNTBIWiwgTUM1MDFDQl81MEhaU2NhbGUsCi0JCSBNQzUwMUNCXzYwSFosIE1DNTAxQ0JfNjBIWlNjYWxlfSwKKwkJe21jNTAxY2JfTm9GbGlrZXIsIG1jNTAxY2JfTm9GbGlrZXJTY2FsZSwKKwkJIG1jNTAxY2JfNTBIWiwgbWM1MDFjYl81MEhaU2NhbGUsCisJCSBtYzUwMWNiXzYwSFosIG1jNTAxY2JfNjBIWlNjYWxlfSwKIC8qIFNFTlNPUl9NSTAzNjBTT0MgOSAqLwotCQl7bWkzNjBzb2NfQUVOb0ZsaWtlclNjYWxlLCBtaTM2MHNvY19BRU5vRmxpa2VyLAotCQkgbWkzNjBzb2NfQUU1MEhaU2NhbGUsIG1pMzYwc29jX0FFNTBIWiwKLQkJIG1pMzYwc29jX0FFNjBIWlNjYWxlLCBtaTM2MHNvY19BRTYwSFp9LAorCQl7bWkzNjBzb2NfQUVOb0ZsaWtlciwgbWkzNjBzb2NfQUVOb0ZsaWtlclNjYWxlLAorCQkgbWkzNjBzb2NfQUU1MEhaLCBtaTM2MHNvY19BRTUwSFpTY2FsZSwKKwkJIG1pMzYwc29jX0FFNjBIWiwgbWkzNjBzb2NfQUU2MEhaU2NhbGV9LAogLyogU0VOU09SX09WNzYyMCAxMCAqLwotCQl7T1Y3NjIwX05vRmxpa2VyLCBPVjc2MjBfTm9GbGlrZXIsCi0JCSBPVjc2MjBfNTBIWiwgT1Y3NjIwXzUwSFosCi0JCSBPVjc2MjBfNjBIWiwgT1Y3NjIwXzYwSFp9LAorCQl7b3Y3NjIwX05vRmxpa2VyLCBvdjc2MjBfTm9GbGlrZXIsCisJCSBvdjc2MjBfNTBIWiwgb3Y3NjIwXzUwSFosCisJCSBvdjc2MjBfNjBIWiwgb3Y3NjIwXzYwSFp9LAogLyogU0VOU09SX09WNzYzMEMgMTEgKi8KIAkJe05VTEwsIE5VTEwsCiAJCSBOVUxMLCBOVUxMLApAQCAtNjI1OCwxNyArNjIxMCwxNyBAQAogCQkgcGIwMzMwXzUwSFpTY2FsZSwgcGIwMzMwXzUwSFosCiAJCSBwYjAzMzBfNjBIWlNjYWxlLCBwYjAzMzBfNjBIWn0sCiAvKiBTRU5TT1JfUE8yMDMwIDE1ICovCi0JCXtQTzIwMzBfTm9GbGlrZXIsIFBPMjAzMF9Ob0ZsaWtlciwKLQkJIFBPMjAzMF81MEhaLCBQTzIwMzBfNTBIWiwKLQkJIFBPMjAzMF82MEhaLCBQTzIwMzBfNjBIWn0sCisJCXtwbzIwMzBfTm9GbGlrZXIsIHBvMjAzMF9Ob0ZsaWtlciwKKwkJIHBvMjAzMF81MEhaLCBwbzIwMzBfNTBIWiwKKwkJIHBvMjAzMF82MEhaLCBwbzIwMzBfNjBIWn0sCiAvKiBTRU5TT1JfVEFTNTEzMENLIDE2ICovCi0JCXt0YXM1MTMwY3h4X05vRmxpa2VyU2NhbGUsIHRhczUxMzBjeHhfTm9GbGlrZXIsCi0JCSB0YXM1MTMwY3h4XzUwSFpTY2FsZSwgdGFzNTEzMGN4eF81MEhaLAotCQkgdGFzNTEzMGN4eF82MEhaU2NhbGUsIHRhczUxMzBjeHhfNjBIWn0sCisJCXt0YXM1MTMwY3h4X05vRmxpa2VyLCB0YXM1MTMwY3h4X05vRmxpa2VyU2NhbGUsCisJCSB0YXM1MTMwY3h4XzUwSFosIHRhczUxMzBjeHhfNTBIWlNjYWxlLAorCQkgdGFzNTEzMGN4eF82MEhaLCB0YXM1MTMwY3h4XzYwSFpTY2FsZX0sCiAvKiBTRU5TT1JfVEFTNTEzMENYWCAxNyAqLwotCQl7dGFzNTEzMGN4eF9Ob0ZsaWtlclNjYWxlLCB0YXM1MTMwY3h4X05vRmxpa2VyLAotCQkgdGFzNTEzMGN4eF81MEhaU2NhbGUsIHRhczUxMzBjeHhfNTBIWiwKLQkJIHRhczUxMzBjeHhfNjBIWlNjYWxlLCB0YXM1MTMwY3h4XzYwSFp9LAorCQl7dGFzNTEzMGN4eF9Ob0ZsaWtlciwgdGFzNTEzMGN4eF9Ob0ZsaWtlclNjYWxlLAorCQkgdGFzNTEzMGN4eF81MEhaLCB0YXM1MTMwY3h4XzUwSFpTY2FsZSwKKwkJIHRhczUxMzBjeHhfNjBIWiwgdGFzNTEzMGN4eF82MEhaU2NhbGV9LAogLyogU0VOU09SX1RBUzUxMzBDX1ZGMDI1MCAxOCAqLwogCQl7dGFzNTEzMGNfdmYwMjUwX05vRmxpa2VyLCB0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXJTY2FsZSwKIAkJIHRhczUxMzBjX3ZmMDI1MF81MEhaLCB0YXM1MTMwY192ZjAyNTBfNTBIWlNjYWxlLApAQCAtNjI3Nyw5ICs2MjI5LDkgQEAKIAogCWkgPSBzZC0+bGlnaHRmcmVxICogMjsKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7Ci0JaWYgKCFtb2RlKQotCQlpKys7CQkJLyogNjQweDQ4MCAqLwotCXpjM19mcmVxID0gZnJlcV90YlsoaW50KSBzZC0+c2Vuc29yXVtpXTsKKwlpZiAobW9kZSkKKwkJaSsrOwkJCS8qIDMyMHgyNDAgKi8KKwl6YzNfZnJlcSA9IGZyZXFfdGJbc2QtPnNlbnNvcl1baV07CiAJaWYgKHpjM19mcmVxICE9IE5VTEwpIHsKIAkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgemMzX2ZyZXEpOwogCQlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKQEAgLTYyOTcsNiArNjI0OSw5IEBACiAJCQkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDQ0LCAweDAwMDIpOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgU0VOU09SX1BBUzIwMkI6CisJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwMCwgMHgwMWE3KTsKKwkJCWJyZWFrOwogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtNjMwNSw3ICs2MjYwLDcgQEAKIHN0YXRpYyB2b2lkIHNldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191OCBhdXRvdmFsOworCXU4IGF1dG92YWw7CiAKIAlpZiAoc2QtPmF1dG9nYWluKQogCQlhdXRvdmFsID0gMHg0MjsKQEAgLTYzMzMsNiArNjI4OCwxMiBAQAogCQlyZWdfdyhkZXYsIDB4MDIsIDB4MDAzYik7CiAJCXJlZ193KGRldiwgMHgwMCwgMHgwMDM4KTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfUEFTMjAyQjoKKwkJcmVnX3coZGV2LCAweDAzLCAweDAwM2IpOworCQlyZWdfdyhkZXYsIDB4MGMsIDB4MDAzYSk7CisJCXJlZ193KGRldiwgMHgwYiwgMHgwMDM5KTsKKwkJcmVnX3coZGV2LCAweDBiLCAweDAwMzgpOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTYzNDksNyArNjMxMCw3IEBACiAKIHN0YXRpYyBpbnQgc2lmX3Byb2JlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlfX3UxNiBjaGVja3dvcmQ7CisJdTE2IGNoZWNrd29yZDsKIAogCXN0YXJ0XzJ3cl9wcm9iZShnc3BjYV9kZXYtPmRldiwgMHgwZik7CQkvKiBQQVMxMDYgKi8KIAlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwOCwgMHgwMDhkKTsKQEAgLTYzOTIsNiArNjM1Myw3IEBACiAJfQogCiAJc3RhcnRfMndyX3Byb2JlKGRldiwgMHgwOCk7CQkvKiBIRENTMjAyMCAqLworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MWMsIDB4MDAsIDB4MDApOwogCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MTUsIDB4YWEsIDB4MDApOwogCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTUpOwogCWlmIChyZXR3b3JkICE9IDApCkBAIC02NDIwLDggKzYzODIsMTAgQEAKIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAzLCAweGFhLCAweDAwKTsKIAltc2xlZXAoNTApOwogCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDMpOwotCWlmIChyZXR3b3JkICE9IDApCisJaWYgKHJldHdvcmQgIT0gMCkgeworCQlzZW5kX3Vua25vd24oZGV2LCBTRU5TT1JfUEFTMjAyQik7CiAJCXJldHVybiAweDBlOwkJCS8qIFBBUzIwMkJDQiAqLworCX0KIAogCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MDIpOwkJLyogVEFTNTEzMEMgKi8KIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAxLCAweGFhLCAweDAwKTsKQEAgLTY0NTcsOCArNjQyMSw4IEBACiB9CiAKIHN0cnVjdCBzZW5zb3JfYnlfY2hpcHNldF9yZXZpc2lvbiB7Ci0JX191MTYgcmV2aXNpb247Ci0JX191OCBpbnRlcm5hbF9zZW5zb3JfaWQ7CisJdTE2IHJldmlzaW9uOworCXU4IGludGVybmFsX3NlbnNvcl9pZDsKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlbnNvcl9ieV9jaGlwc2V0X3JldmlzaW9uIGNoaXBzZXRfcmV2aXNpb25fc2Vuc29yW10gPSB7CiAJezB4YzAwMCwgMHgxMn0sCQkvKiBUQVM1MTMwQyAqLwpAQCAtNjQ2Nyw2ICs2NDMxLDcgQEAKIAl7MHg4MDAxLCAweDEzfSwKIAl7MHg4MDAwLCAweDE0fSwJCS8qIENTMjEwMksgKi8KIAl7MHg4NDAwLCAweDE1fSwJCS8qIFRBUzUxMzBLICovCisJezB4ZTQwMCwgMHgxNX0sCiB9OwogCiBzdGF0aWMgaW50IHZnYV8zd3JfcHJvYmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtNjQ3NCw3ICs2NDM5LDcgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCBpOwotCV9fdTggcmV0Ynl0ZTsKKwl1OCByZXRieXRlOwogCXUxNiByZXR3b3JkOwogCiAvKmZpeG1lOiBsYWNrIG9mIDhiPWIzICgxMSwxMiktPiAxMCwgOGI9ZTAgKDE0LDE1LDE2KS0+IDEyIGZvdW5kIGluIGdzcGNhdjEqLwpAQCAtNjYyMiw4ICs2NTg3LDcgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtOwogCWludCBzZW5zb3I7Ci0JaW50IHZnYSA9IDE7CQkvKiAxOiB2Z2EsIDA6IHNpZiAqLwotCXN0YXRpYyBjb25zdCBfX3U4IGdhbW1hW1NFTlNPUl9NQVhdID0geworCXN0YXRpYyBjb25zdCB1OCBnYW1tYVtTRU5TT1JfTUFYXSA9IHsKIAkJNCwJLyogU0VOU09SX0FEQ00yNzAwIDAgKi8KIAkJNCwJLyogU0VOU09SX0NTMjEwMiAxICovCiAJCTUsCS8qIFNFTlNPUl9DUzIxMDJLIDIgKi8KQEAgLTY2NDQsOSArNjYwOCwzMCBAQAogCQkzLAkvKiBTRU5TT1JfVEFTNTEzMENYWCAxNyAqLwogCQkzLAkvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE4ICovCiAJfTsKKwlzdGF0aWMgY29uc3QgdTggbW9kZV90YltTRU5TT1JfTUFYXSA9IHsKKwkJMiwJLyogU0VOU09SX0FEQ00yNzAwIDAgKi8KKwkJMSwJLyogU0VOU09SX0NTMjEwMiAxICovCisJCTEsCS8qIFNFTlNPUl9DUzIxMDJLIDIgKi8KKwkJMSwJLyogU0VOU09SX0dDMDMwNSAzICovCisJCTEsCS8qIFNFTlNPUl9IRENTMjAyMGIgNCAqLworCQkxLAkvKiBTRU5TT1JfSFY3MTMxQiA1ICovCisJCTEsCS8qIFNFTlNPUl9IVjcxMzFDIDYgKi8KKwkJMSwJLyogU0VOU09SX0lDTTEwNUEgNyAqLworCQkyLAkvKiBTRU5TT1JfTUM1MDFDQiA4ICovCisJCTEsCS8qIFNFTlNPUl9NSTAzNjBTT0MgOSAqLworCQkyLAkvKiBTRU5TT1JfT1Y3NjIwIDEwICovCisJCTEsCS8qIFNFTlNPUl9PVjc2MzBDIDExICovCisJCTAsCS8qIFNFTlNPUl9QQVMxMDYgMTIgKi8KKwkJMSwJLyogU0VOU09SX1BBUzIwMkIgMTMgKi8KKwkJMSwJLyogU0VOU09SX1BCMDMzMCAxNCAqLworCQkxLAkvKiBTRU5TT1JfUE8yMDMwIDE1ICovCisJCTEsCS8qIFNFTlNPUl9UQVM1MTMwQ0sgMTYgKi8KKwkJMSwJLyogU0VOU09SX1RBUzUxMzBDWFggMTcgKi8KKwkJMSwJLyogU0VOU09SX1RBUzUxMzBDX1ZGMDI1MCAxOCAqLworCX07CiAKIAkvKiBkZWZpbmUgc29tZSBzZW5zb3JzIGZyb20gdGhlIHZlbmRvci9wcm9kdWN0ICovCi0Jc2QtPnNoYXJwbmVzcyA9IDI7CisJc2QtPnNoYXJwbmVzcyA9IFNIQVJQTkVTU19ERUY7CiAJc2QtPnNlbnNvciA9IGlkLT5kcml2ZXJfaW5mbzsKIAlzZW5zb3IgPSB6Y3h4X3Byb2JlU2Vuc29yKGdzcGNhX2Rldik7CiAJaWYgKHNlbnNvciA+PSAwKQpAQCAtNjY3MSw4ICs2NjU2LDIxIEBACiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSAwOgotCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBIVjcxMzFCIik7Ci0JCQlzZC0+c2Vuc29yID0gU0VOU09SX0hWNzEzMUI7CisJCQkvKiBjaGVjayB0aGUgc2Vuc29yIHR5cGUgKi8KKwkJCXNlbnNvciA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMCk7CisJCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBodjcxMzEgdHlwZSAlZCIsIHNlbnNvcik7CisJCQlzd2l0Y2ggKHNlbnNvcikgeworCQkJY2FzZSAwOgkJCS8qIGh2NzEzMWIgKi8KKwkJCWNhc2UgMToJCQkvKiBodjcxMzFlICovCisJCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBIVjcxMzFCIik7CisJCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9IVjcxMzFCOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKy8qCQkJY2FzZSAyOgkJCSAqIGh2NzEzMXIgKi8KKwkJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIEhWNzEzMVIoYykiKTsKKwkJCQlzZC0+c2Vuc29yID0gU0VOU09SX0hWNzEzMUM7CisJCQkJYnJlYWs7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSAweDAyOgogCQkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgVEFTNTEzMEMiKTsKQEAgLTY2OTksMTIgKzY2OTcsMTEgQEAKIAkJY2FzZSAweDBlOgogCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBQQVMyMDJCIik7CiAJCQlzZC0+c2Vuc29yID0gU0VOU09SX1BBUzIwMkI7Ci0JCQlzZC0+c2hhcnBuZXNzID0gMTsKKy8qCQkJc2QtPnNoYXJwbmVzcyA9IDE7ICovCiAJCQlicmVhazsKIAkJY2FzZSAweDBmOgogCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBQQVMxMDYiKTsKIAkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfUEFTMTA2OwotCQkJdmdhID0gMDsJCS8qIFNJRiAqLwogCQkJYnJlYWs7CiAJCWNhc2UgMHgxMDoKIAkJY2FzZSAweDEyOgpAQCAtNjc3MCwzMSArNjc2NywzOCBAQAogCWlmIChzZW5zb3IgPCAweDIwKSB7CiAJCWlmIChzZW5zb3IgPT0gLTEgfHwgc2Vuc29yID09IDB4MTAgfHwgc2Vuc29yID09IDB4MTIpCiAJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwMiwgMHgwMDEwKTsKLQkJZWxzZQotCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIHNlbnNvciAmIDB4MGYsIDB4MDAxMCk7CiAJCXJlZ19yKGdzcGNhX2RldiwgMHgwMDEwKTsKIAl9CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CiAvKmZpeG1lOnRlc3QqLwogCWdzcGNhX2Rldi0+bmJhbHQtLTsKLQlpZiAodmdhKSB7Ci0JCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKLQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKLQl9IGVsc2UgeworCXN3aXRjaCAobW9kZV90YltzZC0+c2Vuc29yXSkgeworCWNhc2UgMDoKIAkJY2FtLT5jYW1fbW9kZSA9IHNpZl9tb2RlOwogCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc2lmX21vZGUpOworCQlicmVhazsKKwljYXNlIDE6CisJCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKKwkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgMjogKi8KKwkJY2FtLT5jYW1fbW9kZSA9IGJyb2tlbl92Z2FfbW9kZTsKKwkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKGJyb2tlbl92Z2FfbW9kZSk7CisJCWJyZWFrOwogCX0KLQlzZC0+YnJpZ2h0bmVzcyA9IHNkX2N0cmxzW1NEX0JSSUdIVE5FU1NdLnFjdHJsLmRlZmF1bHRfdmFsdWU7Ci0Jc2QtPmNvbnRyYXN0ID0gc2RfY3RybHNbU0RfQ09OVFJBU1RdLnFjdHJsLmRlZmF1bHRfdmFsdWU7Ci0Jc2QtPmdhbW1hID0gZ2FtbWFbKGludCkgc2QtPnNlbnNvcl07Ci0Jc2QtPmF1dG9nYWluID0gc2RfY3RybHNbU0RfQVVUT0dBSU5dLnFjdHJsLmRlZmF1bHRfdmFsdWU7Ci0Jc2QtPmxpZ2h0ZnJlcSA9IHNkX2N0cmxzW1NEX0ZSRVFdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKKwlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CisJc2QtPmdhbW1hID0gZ2FtbWFbc2QtPnNlbnNvcl07CisJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOworCXNkLT5saWdodGZyZXEgPSBGUkVRX0RFRjsKIAlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgogCWNhc2UgU0VOU09SX09WNzYyMDoKKwljYXNlIFNFTlNPUl9QQVMyMDJCOgogCWNhc2UgU0VOU09SX1BPMjAzMDoKIAkJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9ICgxIDw8IEJSSUdIVE5FU1NfSURYKTsKIAkJYnJlYWs7CkBAIC02ODA1LDE0ICs2ODA5LDEzIEBACiAJCWJyZWFrOwogCX0KIAotCS8qIHN3aXRjaCB0aGUgbGVkIG9mZiAqLwotCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDAxLCAweDAwMDApOwogCXJldHVybiAwOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CisJLyogc3dpdGNoIG9mZiB0aGUgbGVkICovCiAJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4MDEsIDB4MDAwMCk7CiAJcmV0dXJuIDA7CiB9CkBAIC02ODIxLDI4ICs2ODI0LDI3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQljb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiAqemMzX2luaXQ7CiAJaW50IG1vZGU7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uICppbml0X3RiW1NFTlNPUl9NQVhdWzJdID0gewogCQl7YWRjbTI3MDBfSW5pdGlhbCwgYWRjbTI3MDBfSW5pdGlhbFNjYWxlfSwJLyogMCAqLwotCQl7Y3MyMTAyX0luaXRpYWxTY2FsZSwgY3MyMTAyX0luaXRpYWx9LAkJLyogMSAqLwotCQl7Y3MyMTAyS19Jbml0aWFsU2NhbGUsIGNzMjEwMktfSW5pdGlhbH0sCS8qIDIgKi8KKwkJe2NzMjEwMl9Jbml0aWFsLCBjczIxMDJfSW5pdGlhbFNjYWxlfSwJCS8qIDEgKi8KKwkJe2NzMjEwMktfSW5pdGlhbCwgY3MyMTAyS19Jbml0aWFsU2NhbGV9LAkvKiAyICovCiAJCXtnYzAzMDVfSW5pdGlhbCwgZ2MwMzA1X0luaXRpYWxTY2FsZX0sCQkvKiAzICovCi0JCXtoZGNzMjAyMHhiX0luaXRpYWxTY2FsZSwgaGRjczIwMjB4Yl9Jbml0aWFsfSwJLyogNCAqLwotCQl7aHY3MTMxYnh4X0luaXRpYWxTY2FsZSwgaHY3MTMxYnh4X0luaXRpYWx9LAkvKiA1ICovCi0JCXtodjcxMzFjeHhfSW5pdGlhbFNjYWxlLCBodjcxMzFjeHhfSW5pdGlhbH0sCS8qIDYgKi8KLQkJe2ljbTEwNWF4eF9Jbml0aWFsU2NhbGUsIGljbTEwNWF4eF9Jbml0aWFsfSwJLyogNyAqLwotCQl7TUM1MDFDQl9Jbml0aWFsU2NhbGUsIE1DNTAxQ0JfSW5pdGlhbH0sCS8qIDggKi8KKwkJe2hkY3MyMDIwYl9Jbml0aWFsLCBoZGNzMjAyMGJfSW5pdGlhbFNjYWxlfSwJLyogNCAqLworCQl7aHY3MTMxYl9Jbml0aWFsLCBodjcxMzFiX0luaXRpYWxTY2FsZX0sCS8qIDUgKi8KKwkJe2h2NzEzMXJfSW5pdGlhbCwgaHY3MTMxcl9Jbml0aWFsU2NhbGV9LAkvKiA2ICovCisJCXtpY20xMDVhX0luaXRpYWwsIGljbTEwNWFfSW5pdGlhbFNjYWxlfSwJLyogNyAqLworCQl7bWM1MDFjYl9Jbml0aWFsLCBtYzUwMWNiX0luaXRpYWxTY2FsZX0sCS8qIDggKi8KIAkJe21pMDM2MHNvY19Jbml0aWFsLCBtaTAzNjBzb2NfSW5pdGlhbFNjYWxlfSwJLyogOSAqLwotCQl7T1Y3NjIwX21vZGUwLCBPVjc2MjBfbW9kZTF9LAkJCS8qIDEwICovCi0JCXtvdjc2MzBjX0luaXRpYWxTY2FsZSwgb3Y3NjMwY19Jbml0aWFsfSwJLyogMTEgKi8KLQkJe3BhczEwNmJfSW5pdGlhbFNjYWxlLCBwYXMxMDZiX0luaXRpYWx9LAkvKiAxMiAqLworCQl7b3Y3NjIwX0luaXRpYWwsIG92NzYyMF9Jbml0aWFsU2NhbGV9LAkJLyogMTAgKi8KKwkJe292NzYzMGNfSW5pdGlhbCwgb3Y3NjMwY19Jbml0aWFsU2NhbGV9LAkvKiAxMSAqLworCQl7cGFzMTA2Yl9Jbml0aWFsLCBwYXMxMDZiX0luaXRpYWxTY2FsZX0sCS8qIDEyICovCiAJCXtwYXMyMDJiX0luaXRpYWwsIHBhczIwMmJfSW5pdGlhbFNjYWxlfSwJLyogMTMgKi8KIAkJe3BiMDMzMF9Jbml0aWFsLCBwYjAzMzBfSW5pdGlhbFNjYWxlfSwJCS8qIDE0ICovCi0JCXtQTzIwMzBfbW9kZTAsIFBPMjAzMF9tb2RlMX0sCQkJLyogMTUgKi8KLQkJe3RhczUxMzBDS19Jbml0aWFsU2NhbGUsIHRhczUxMzBDS19Jbml0aWFsfSwJLyogMTYgKi8KKwkJe3BvMjAzMF9Jbml0aWFsLCBwbzIwMzBfSW5pdGlhbFNjYWxlfSwJCS8qIDE1ICovCisJCXt0YXM1MTMwY0tfSW5pdGlhbCwgdGFzNTEzMGNLX0luaXRpYWxTY2FsZX0sCS8qIDE2ICovCiAJCXt0YXM1MTMwY3h4X0luaXRpYWwsIHRhczUxMzBjeHhfSW5pdGlhbFNjYWxlfSwJLyogMTcgKi8KLQkJe3RhczUxMzBjX3ZmMDI1MF9Jbml0aWFsU2NhbGUsIHRhczUxMzBjX3ZmMDI1MF9Jbml0aWFsfSwKKwkJe3RhczUxMzBjX3ZmMDI1MF9Jbml0aWFsLCB0YXM1MTMwY192ZjAyNTBfSW5pdGlhbFNjYWxlfSwKIAkJCQkJCQkJLyogMTggKi8KIAl9OwogCkBAIC02ODU0LDggKzY4NTYsNyBAQAogCQkJMHgyMSk7CQkvKiBKUEVHIDQyMiAqLwogCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CiAKLQltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7Ci0JemMzX2luaXQgPSBpbml0X3RiWyhpbnQpIHNkLT5zZW5zb3JdW21vZGVdOworCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9IVjcxMzFDOgogCQl6Y3h4X3Byb2JlU2Vuc29yKGdzcGNhX2Rldik7CkBAIC02ODY0LDcgKzY4NjUsNyBAQAogCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBwYXMxMDZiX0luaXRpYWxfY29tKTsKIAkJYnJlYWs7CiAJfQotCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHpjM19pbml0KTsKKwl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBpbml0X3RiW3NkLT5zZW5zb3JdW21vZGVdKTsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX0FEQ00yNzAwOgpAQCAtNjg4Myw2ICs2ODg0LDExIEBACiAJCXJlZ193KGRldiwgMHgwMiwgMHgwMDNiKTsKIAkJcmVnX3coZGV2LCAweDAwLCAweDAwMzgpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9QQVMyMDJCOgorCQlyZWdfdyhkZXYsIDB4MDMsIDB4MDAzYik7CisJCXJlZ193KGRldiwgMHgwYywgMHgwMDNhKTsKKwkJcmVnX3coZGV2LCAweDBiLCAweDAwMzkpOworCQlicmVhazsKIAl9CiAKIAlzZXRtYXRyaXgoZ3NwY2FfZGV2KTsKQEAgLTY5NjEsMTMgKzY5NjcsMTMgQEAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9QTzIwMzA6CiAJCW1zbGVlcCg1MCk7Ci0JCXJlZ19yKGdzcGNhX2RldiwgMHgwMDA4KTsKLQkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMDcpOwotCQkvKmZhbGwgdGhydSovCi0JY2FzZSBTRU5TT1JfUEFTMjAyQjoKIAkJcmVnX3coZGV2LCAweDAwLCAweDAwMDcpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLwogCQlyZWdfdyhkZXYsIDB4MDIsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HKTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfUEFTMjAyQjoKKwkJcmVnX3coZGV2LCAweDMyLCAweDAwMDcpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLworCQlyZWdfdyhkZXYsIDB4MDIsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HKTsKKwkJYnJlYWs7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNzE2NSw2ICs3MTcxLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfSU5QVVQKK3N0YXRpYyBpbnQgc2RfaW50X3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4ICpkYXRhLAkJLyogaW50ZXJydXB0IHBhY2tldCBkYXRhICovCisJCQlpbnQgbGVuKQkJLyogaW50ZXJycHV0IHBhY2tldCBsZW5ndGggKi8KK3sKKwlpZiAobGVuID09IDggJiYgZGF0YVs0XSA9PSAxKSB7CisJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDEpOworCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKKwkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMCk7CisJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOworCX0KKworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCkBAIC03MTc3LDYgKzcxOTksOSBAQAogCS5xdWVyeW1lbnUgPSBzZF9xdWVyeW1lbnUsCiAJLmdldF9qY29tcCA9IHNkX2dldF9qY29tcCwKIAkuc2V0X2pjb21wID0gc2Rfc2V0X2pjb21wLAorI2lmZGVmIENPTkZJR19JTlBVVAorCS5pbnRfcGt0X3NjYW4gPSBzZF9pbnRfcGt0X3NjYW4sCisjZW5kaWYKIH07CiAKIHN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwppbmRleCA1MWYzOTNkLi4yZmM5ODY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwpAQCAtMzksMTIgKzM5LDEyIEBACiBtb2R1bGVfcGFyYW0oaGRwdnJfZGVidWcsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoaGRwdnJfZGVidWcsICJlbmFibGUgZGVidWdnaW5nIG91dHB1dCIpOwogCi11aW50IGRlZmF1bHRfdmlkZW9faW5wdXQgPSBIRFBWUl9WSURFT19JTlBVVFM7CitzdGF0aWMgdWludCBkZWZhdWx0X3ZpZGVvX2lucHV0ID0gSERQVlJfVklERU9fSU5QVVRTOwogbW9kdWxlX3BhcmFtKGRlZmF1bHRfdmlkZW9faW5wdXQsIHVpbnQsIFNfSVJVR098U19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfdmlkZW9faW5wdXQsICJkZWZhdWx0IHZpZGVvIGlucHV0OiAwPUNvbXBvbmVudCAvICIKIAkJICIxPVMtVmlkZW8gLyAyPUNvbXBvc2l0ZSIpOwogCi11aW50IGRlZmF1bHRfYXVkaW9faW5wdXQgPSBIRFBWUl9BVURJT19JTlBVVFM7CitzdGF0aWMgdWludCBkZWZhdWx0X2F1ZGlvX2lucHV0ID0gSERQVlJfQVVESU9fSU5QVVRTOwogbW9kdWxlX3BhcmFtKGRlZmF1bHRfYXVkaW9faW5wdXQsIHVpbnQsIFNfSVJVR098U19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfYXVkaW9faW5wdXQsICJkZWZhdWx0IGF1ZGlvIGlucHV0OiAwPVJDQSBiYWNrIC8gIgogCQkgIjE9UkNBIGZyb250IC8gMj1TL1BESUYiKTsKQEAgLTU5LDYgKzU5LDcgQEAKIAl7IFVTQl9ERVZJQ0UoSERfUFZSX1ZFTkRPUl9JRCwgSERfUFZSX1BST0RVQ1RfSUQpIH0sCiAJeyBVU0JfREVWSUNFKEhEX1BWUl9WRU5ET1JfSUQsIEhEX1BWUl9QUk9EVUNUX0lEMSkgfSwKIAl7IFVTQl9ERVZJQ0UoSERfUFZSX1ZFTkRPUl9JRCwgSERfUFZSX1BST0RVQ1RfSUQyKSB9LAorCXsgVVNCX0RFVklDRShIRF9QVlJfVkVORE9SX0lELCBIRF9QVlJfUFJPRFVDVF9JRDMpIH0sCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBoZHB2cl90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLXZpZGVvLmMKaW5kZXggZmRkNzgyMC4uMTk2ZjgyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYwpAQCAtMzAyLDcgKzMwMiw4IEBACiAvKiBmdW5jdGlvbiBleHBlY3RzIGRldi0+aW9fbXV0ZXggdG8gYmUgaG9sZCBieSBjYWxsZXIgKi8KIHN0YXRpYyBpbnQgaGRwdnJfc3RvcF9zdHJlYW1pbmcoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQogewotCXVpbnQgYWN0dWFsX2xlbmd0aCwgYyA9IDA7CisJaW50IGFjdHVhbF9sZW5ndGg7CisJdWludCBjID0gMDsKIAl1OCAqYnVmOwogCiAJaWYgKGRldi0+c3RhdHVzID09IFNUQVRVU19JRExFKQpAQCAtNTcyLDcgKzU3Myw3IEBACiAJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN0cmNweShjYXAtPmRyaXZlciwgImhkcHZyIik7Ci0Jc3RyY3B5KGNhcC0+Y2FyZCwgIkhhdXBhdWdlIEhEIFBWUiIpOworCXN0cmNweShjYXAtPmNhcmQsICJIYXVwcGF1Z2UgSEQgUFZSIik7CiAJdXNiX21ha2VfcGF0aChkZXYtPnVkZXYsIGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CiAJY2FwLT52ZXJzaW9uID0gSERQVlJfVkVSU0lPTjsKIAljYXAtPmNhcGFiaWxpdGllcyA9ICAgICBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaAppbmRleCAxZWRkODc1Li40OWFlMjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oCkBAIC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIEhEX1BWUl9QUk9EVUNUX0lECTB4NDkwMAogI2RlZmluZSBIRF9QVlJfUFJPRFVDVF9JRDEJMHg0OTAxCiAjZGVmaW5lIEhEX1BWUl9QUk9EVUNUX0lEMgkweDQ5MDIKKyNkZWZpbmUgSERfUFZSX1BST0RVQ1RfSUQzCTB4NDk4MgogCiAjZGVmaW5lIFVOU0VUICAgICgtMVUpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fZ2VtaW5pLmMKaW5kZXggNjBkOTkyZS4uZTYyMGEzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fZ2VtaW5pLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fZ2VtaW5pLmMKQEAgLTM1Miw5ICszNTIsMTMgQEAKIHN0YXRpYyBpbnQgaGV4aXVtX2F0dGFjaChzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgc3RydWN0IHNhYTcxNDZfcGNpX2V4dGVuc2lvbl9kYXRhICppbmZvKQogewogCXN0cnVjdCBoZXhpdW0gKmhleGl1bSA9IChzdHJ1Y3QgaGV4aXVtICopIGRldi0+ZXh0X3ByaXY7CisJaW50IHJldDsKIAogCURFQl9FRSgoIi5cbiIpKTsKIAorCXJldCA9IHNhYTcxNDZfdnZfZGV2aW5pdChkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAJaGV4aXVtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhleGl1bSksIEdGUF9LRVJORUwpOwogCWlmIChOVUxMID09IGhleGl1bSkgewogCQlwcmludGsoImhleGl1bV9nZW1pbmk6IG5vdCBlbm91Z2gga2VybmVsIG1lbW9yeSBpbiBoZXhpdW1fYXR0YWNoKCkuXG4iKTsKQEAgLTQwMCw5ICs0MDQsMTAgQEAKIAl2dl9kYXRhLm9wcy52aWRpb2NfZW51bV9pbnB1dCA9IHZpZGlvY19lbnVtX2lucHV0OwogCXZ2X2RhdGEub3BzLnZpZGlvY19nX2lucHV0ID0gdmlkaW9jX2dfaW5wdXQ7CiAJdnZfZGF0YS5vcHMudmlkaW9jX3NfaW5wdXQgPSB2aWRpb2Nfc19pbnB1dDsKLQlpZiAoMCAhPSBzYWE3MTQ2X3JlZ2lzdGVyX2RldmljZSgmaGV4aXVtLT52aWRlb19kZXYsIGRldiwgImhleGl1bSBnZW1pbmkiLCBWRkxfVFlQRV9HUkFCQkVSKSkgeworCXJldCA9IHNhYTcxNDZfcmVnaXN0ZXJfZGV2aWNlKCZoZXhpdW0tPnZpZGVvX2RldiwgZGV2LCAiaGV4aXVtIGdlbWluaSIsIFZGTF9UWVBFX0dSQUJCRVIpOworCWlmIChyZXQgPCAwKSB7CiAJCXByaW50aygiaGV4aXVtX2dlbWluaTogY2Fubm90IHJlZ2lzdGVyIGNhcHR1cmUgdjRsMiBkZXZpY2UuIHNraXBwaW5nLlxuIik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlwcmludGsoImhleGl1bV9nZW1pbmk6IGZvdW5kICdoZXhpdW0gZ2VtaW5pJyBmcmFtZSBncmFiYmVyLSVkLlxuIiwgaGV4aXVtX251bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9vcmlvbi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fb3Jpb24uYwppbmRleCA5MzhhMWY4Li5mZTU5NmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9vcmlvbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX29yaW9uLmMKQEAgLTIxNiw2ICsyMTYsMTAgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCisJZXJyID0gc2FhNzE0Nl92dl9kZXZpbml0KGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCWhleGl1bSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoZXhpdW0pLCBHRlBfS0VSTkVMKTsKIAlpZiAoTlVMTCA9PSBoZXhpdW0pIHsKIAkJcHJpbnRrKCJoZXhpdW1fb3Jpb246IGhleGl1bV9wcm9iZTogbm90IGVub3VnaCBrZXJuZWwgbWVtb3J5LlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCmluZGV4IGI4NmUzNTMuLmRhMThkNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCkBAIC0yOTksNyArMjk5LDcgQEAKIHsKIAlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzID0gTlVMTDsKIAljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKLQlpbnQgaXJfdHlwZSA9IDA7CisJdTY0IGlyX3R5cGUgPSAwOwogCXN0cnVjdCBJUl9pMmMgKmlyOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBjbGllbnQtPmFkYXB0ZXI7CkBAIC0zMzEsNiArMzMxLDcgQEAKIAkJaXJfY29kZXMgICAgPSAmaXJfY29kZXNfcHY5NTFfdGFibGU7CiAJCWJyZWFrOwogCWNhc2UgMHgxODoKKwljYXNlIDB4MWY6CiAJY2FzZSAweDFhOgogCQluYW1lICAgICAgICA9ICJIYXVwcGF1Z2UiOwogCQlpci0+Z2V0X2tleSA9IGdldF9rZXlfaGF1cDsKQEAgLTQ0Niw3ICs0NDcsNyBAQAogCWlucHV0X2Rldi0+bmFtZSAgICAgICA9IGlyLT5uYW1lOwogCWlucHV0X2Rldi0+cGh5cyAgICAgICA9IGlyLT5waHlzOwogCi0JZXJyID0gaXJfaW5wdXRfcmVnaXN0ZXIoaXItPmlucHV0LCBpci0+aXJfY29kZXMpOworCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5pbnB1dCwgaXItPmlyX2NvZGVzLCBOVUxMKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfZnJlZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmMKaW5kZXggNzlkMGZlNC4uY2ExZmQzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5jCkBAIC0xMjEwLDYgKzEyMTAsNTMgQEAKIAkuaTJjID0gJml2dHZfaTJjX3N0ZCwKIH07CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFNvbnkgS2lreW91ICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXZ0dl9jYXJkX3BjaV9pbmZvIGl2dHZfcGNpX2tpa3lvdVtdID0geworCXsgUENJX0RFVklDRV9JRF9JVlRWMTYsIElWVFZfUENJX0lEX1NPTlksIDB4ODEzZCB9LAorCXsgMCwgMCwgMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGl2dHZfY2FyZCBpdnR2X2NhcmRfa2lreW91ID0geworCS50eXBlID0gSVZUVl9DQVJEX0tJS1lPVSwKKwkubmFtZSA9ICJTb255IFZBSU8gR2lnYSBQb2NrZXQgKEVOWCBLaWt5b3UpIiwKKwkudjRsMl9jYXBhYmlsaXRpZXMgPSBJVlRWX0NBUF9FTkNPREVSLAorCS5od192aWRlbyA9IElWVFZfSFdfU0FBNzExNSwKKwkuaHdfYXVkaW8gPSBJVlRWX0hXX0dQSU8sCisJLmh3X2F1ZGlvX2N0cmwgPSBJVlRWX0hXX0dQSU8sCisJLmh3X2FsbCA9IElWVFZfSFdfR1BJTyB8IElWVFZfSFdfU0FBNzExNSB8IElWVFZfSFdfVFVORVIsCisJLnZpZGVvX2lucHV0cyA9IHsKKwl7IElWVFZfQ0FSRF9JTlBVVF9WSURfVFVORVIsICAwLCBJVlRWX1NBQTcxWFhfQ09NUE9TSVRFMSB9LAorCXsgSVZUVl9DQVJEX0lOUFVUX0NPTVBPU0lURTEsIDEsIElWVFZfU0FBNzFYWF9DT01QT1NJVEUxIH0sCisJeyBJVlRWX0NBUkRfSU5QVVRfU1ZJREVPMSwgICAgMSwgSVZUVl9TQUE3MVhYX1NWSURFTzEgfSwKKwl9LAorCS5hdWRpb19pbnB1dHMgPSB7CisJICAgICB7IElWVFZfQ0FSRF9JTlBVVF9BVURfVFVORVIsICBJVlRWX0dQSU9fVFVORVIgfSwKKwkgICAgIHsgSVZUVl9DQVJEX0lOUFVUX0xJTkVfSU4xLCAgIElWVFZfR1BJT19MSU5FX0lOIH0sCisJICAgICB7IElWVFZfQ0FSRF9JTlBVVF9MSU5FX0lOMiwgICBJVlRWX0dQSU9fTElORV9JTiB9LAorCX0sCisJLmdwaW9faW5pdCA9IHsgLmRpcmVjdGlvbiA9IDB4MDNlMSwgLmluaXRpYWxfdmFsdWUgPSAweDAzMjAgfSwKKwkuZ3Bpb19hdWRpb19pbnB1dCA9IHsgLm1hc2sgICA9IDB4MDA2MCwKKwkJCSAgICAgIC50dW5lciAgPSAweDAwMjAsCisJCQkgICAgICAubGluZWluID0gMHgwMDAwLAorCQkJICAgICAgLnJhZGlvICA9IDB4MDA2MCB9LAorCS5ncGlvX2F1ZGlvX211dGUgID0geyAubWFzayA9IDB4MDAwMCwKKwkJCSAgICAgIC5tdXRlID0gMHgwMDAwIH0sIC8qIDB4MjAwPyBEaXNhYmxlIGZvciBub3cuICovCisJLmdwaW9fYXVkaW9fbW9kZSAgPSB7IC5tYXNrICAgPSAweDAwODAsCisJCQkgICAgICAubW9ubyAgID0gMHgwMDAwLAorCQkJICAgICAgLnN0ZXJlbyA9IDB4MDAwMCwgLyogU0FQICovCisJCQkgICAgICAubGFuZzEgID0gMHgwMDgwLAorCQkJICAgICAgLmxhbmcyICA9IDB4MDAwMCwKKwkJCSAgICAgIC5ib3RoICAgPSAweDAwODAgfSwKKwkudHVuZXJzID0geworCSAgICAgeyAuc3RkID0gVjRMMl9TVERfQUxMLCAudHVuZXIgPSBUVU5FUl9TT05ZX0JURl9QWE4wMVogfSwKKwl9LAorCS5wY2lfbGlzdCA9IGl2dHZfcGNpX2tpa3lvdSwKKwkuaTJjID0gJml2dHZfaTJjX3N0ZCwKK307CisKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpdnR2X2NhcmQgKml2dHZfY2FyZF9saXN0W10gPSB7CiAJJml2dHZfY2FyZF9wdnIyNTAsCiAJJml2dHZfY2FyZF9wdnIzNTAsCkBAIC0xMjM4LDYgKzEyODUsNyBAQAogCSZpdnR2X2NhcmRfYXZlcl9tMTA0LAogCSZpdnR2X2NhcmRfYnVmZmFsbywKIAkmaXZ0dl9jYXJkX2F2ZXJfdWx0cmExNTAwbWNlLAorCSZpdnR2X2NhcmRfa2lreW91LAogCiAJLyogVmFyaWF0aW9ucyBvZiBzdGFuZGFyZCBjYXJkcyBidXQgd2l0aCB0aGUgc2FtZSBQQ0kgSURzLgogCSAgIFRoZXNlIGNhcmRzIG11c3QgY29tZSBsYXN0IGluIHRoaXMgbGlzdC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5oCmluZGV4IDYxNDg4MjcuLjc4ZWNhOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuaApAQCAtNTEsNyArNTEsOCBAQAogI2RlZmluZSBJVlRWX0NBUkRfQVZFUl9NMTA0ICAgICAgICAgIDI0IC8qIEF2ZXJNZWRpYSBNMTA0IG1pbmlQQ0kgY2FyZCAqLwogI2RlZmluZSBJVlRWX0NBUkRfQlVGRkFMT19NVjVMICAgICAgIDI1IC8qIEJ1ZmZhbG8gUEMtTVY1TC9QQ0kgY2FyZCAqLwogI2RlZmluZSBJVlRWX0NBUkRfQVZFUl9VTFRSQTE1MDBNQ0UgIDI2IC8qIEFWZXJNZWRpYSBVbHRyYVRWIDE1MDAgTUNFICovCi0jZGVmaW5lIElWVFZfQ0FSRF9MQVNUIAkJICAgICAyNgorI2RlZmluZSBJVlRWX0NBUkRfS0lLWU9VICAgICAgICAgICAgIDI3IC8qIFNvbnkgVkFJTyBHaWdhIFBvY2tldCAoRU5YIEtpa3lvdSkgKi8KKyNkZWZpbmUgSVZUVl9DQVJEX0xBU1QgCQkgICAgIDI3CiAKIC8qIFZhcmlhbnRzIG9mIGV4aXN0aW5nIGNhcmRzIGJ1dCB3aXRoIHRoZSBzYW1lIFBDSSBJRHMuIFRoZSBkcml2ZXIKICAgIGRldGVjdHMgdGhlc2UgYmFzZWQgb24gb3RoZXIgZGV2aWNlIGluZm9ybWF0aW9uLgpAQCAtODYsNiArODcsNyBAQAogI2RlZmluZSBJVlRWX1BDSV9JRF9NRUxDTyAJCTB4MTE1NAogI2RlZmluZSBJVlRWX1BDSV9JRF9HT1RWSUVXMQkJMHhmZmFjCiAjZGVmaW5lIElWVFZfUENJX0lEX0dPVFZJRVcyIAkJMHhmZmFkCisjZGVmaW5lIElWVFZfUENJX0lEX1NPTlkgCQkweDEwNGQKIAogLyogaGFyZHdhcmUgZmxhZ3MsIG5vIGdhcHMgYWxsb3dlZCAqLwogI2RlZmluZSBJVlRWX0hXX0NYMjU4NDAJCQkoMSA8PCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYwppbmRleCAzNDdjMzM0Li45YTI1MDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYwpAQCAtMTkzLDYgKzE5Myw3IEBACiAJCSAiXHRcdFx0MjUgPSBBdmVyTWVkaWEgTTEwNCAobm90IHlldCB3b3JraW5nKVxuIgogCQkgIlx0XHRcdDI2ID0gQnVmZmFsbyBQQy1NVjVML1BDSVxuIgogCQkgIlx0XHRcdDI3ID0gQVZlck1lZGlhIFVsdHJhVFYgMTUwMCBNQ0VcbiIKKwkJICJcdFx0XHQyOCA9IFNvbnkgVkFJTyBHaWdhIFBvY2tldCAoRU5YIEtpa3lvdSlcbiIKIAkJICJcdFx0XHQgMCA9IEF1dG9kZXRlY3QgKGRlZmF1bHQpXG4iCiAJCSAiXHRcdFx0LTEgPSBJZ25vcmUgdGhpcyBjYXJkXG5cdFx0Iik7CiBNT0RVTEVfUEFSTV9ERVNDKHBhbCwgIlNldCBQQUwgc3RhbmRhcmQ6IEJHSCwgREssIEksIE0sIE4sIE5jLCA2MCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKaW5kZXggYzFiN2VjNC4uYTcxZThiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCkBAIC0yNTgsNyArMjU4LDcgQEAKIAkJSVZUVl9FUlIoIml2dHZfaW5pdF9tcGVnX2RlY29kZXIgZmFpbGVkIHRvIHN0YXJ0IHBsYXliYWNrXG4iKTsKIAkJcmV0dXJuOwogCX0KLQlpdnR2X2FwaV9nZXRfZGF0YSgmaXR2LT5kZWNfbWJveCwgSVZUVl9NQk9YX0RNQSwgZGF0YSk7CisJaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZGVjX21ib3gsIElWVFZfTUJPWF9ETUEsIDIsIGRhdGEpOwogCW1lbV9vZmZzZXQgPSBpdHYtPmRlY19tZW0gKyBkYXRhWzFdOwogCiAJaWYgKChyZWFkYnl0ZXMgPSBsb2FkX2Z3X2RpcmVjdChJVlRWX0RFQ09ERV9JTklUX01QRUdfRklMRU5BTUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pcnEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlycS5jCmluZGV4IGNkOWRiMGIuLjEyZDM2Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlycS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlycS5jCkBAIC01NjIsNyArNTYyLDcgQEAKIAl1MzIgZGF0YVtDWDIzNDFYX01CT1hfTUFYX0RBVEFdOwogCXN0cnVjdCBpdnR2X3N0cmVhbSAqczsKIAotCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmVuY19tYm94LCBJVlRWX01CT1hfRE1BX0VORCwgZGF0YSk7CisJaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZW5jX21ib3gsIElWVFZfTUJPWF9ETUFfRU5ELCAyLCBkYXRhKTsKIAlJVlRWX0RFQlVHX0hJX0lSUSgiRU5DIERNQSBDT01QTEVURSAleCAlZCAoJWQpXG4iLCBkYXRhWzBdLCBkYXRhWzFdLCBpdHYtPmN1cl9kbWFfc3RyZWFtKTsKIAogCWRlbF90aW1lcigmaXR2LT5kbWFfdGltZXIpOwpAQCAtNjM4LDcgKzYzOCw3IEBACiAJdTMyIGRhdGFbQ1gyMzQxWF9NQk9YX01BWF9EQVRBXTsKIAogCWRlbF90aW1lcigmaXR2LT5kbWFfdGltZXIpOwotCWl2dHZfYXBpX2dldF9kYXRhKCZpdHYtPmVuY19tYm94LCBJVlRWX01CT1hfRE1BX0VORCwgZGF0YSk7CisJaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZW5jX21ib3gsIElWVFZfTUJPWF9ETUFfRU5ELCAyLCBkYXRhKTsKIAlJVlRWX0RFQlVHX1dBUk4oIkRNQSBFUlJPUiAlMDh4ICUwOHggJTA4eCAlZFxuIiwgZGF0YVswXSwgZGF0YVsxXSwKIAkJCQlyZWFkX3JlZyhJVlRWX1JFR19ETUFTVEFUVVMpLCBpdHYtPmN1cl9kbWFfc3RyZWFtKTsKIAl3cml0ZV9yZWcocmVhZF9yZWcoSVZUVl9SRUdfRE1BU1RBVFVTKSAmIDMsIElWVFZfUkVHX0RNQVNUQVRVUyk7CkBAIC02NjksNyArNjY5LDcgQEAKIAlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnM7CiAKIAkvKiBHZXQgRE1BIGRlc3RpbmF0aW9uIGFuZCBzaXplIGFyZ3VtZW50cyBmcm9tIGNhcmQgKi8KLQlpdnR2X2FwaV9nZXRfZGF0YSgmaXR2LT5lbmNfbWJveCwgSVZUVl9NQk9YX0RNQSwgZGF0YSk7CisJaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZW5jX21ib3gsIElWVFZfTUJPWF9ETUEsIDcsIGRhdGEpOwogCUlWVFZfREVCVUdfSElfSVJRKCJFTkMgU1RBUlQgQ0FQICVkOiAlMDh4ICUwOHhcbiIsIGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0pOwogCiAJaWYgKGRhdGFbMF0gPiAyIHx8IGRhdGFbMV0gPT0gMCB8fCBkYXRhWzJdID09IDApIHsKQEAgLTcxMyw5ICs3MTMsOSBAQAogCXN0cnVjdCBpdnR2X3N0cmVhbSAqczsKIAogCS8qIFlVViBvciBNUEcgKi8KLQlpdnR2X2FwaV9nZXRfZGF0YSgmaXR2LT5kZWNfbWJveCwgSVZUVl9NQk9YX0RNQSwgZGF0YSk7CiAKIAlpZiAodGVzdF9iaXQoSVZUVl9GX0lfREVDX1lVViwgJml0di0+aV9mbGFncykpIHsKKwkJaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZGVjX21ib3gsIElWVFZfTUJPWF9ETUEsIDIsIGRhdGEpOwogCQlpdHYtPmRtYV9kYXRhX3JlcV9zaXplID0KIAkJCQkgMTA4MCAqICgoaXR2LT55dXZfaW5mby52NGwyX3NyY19oICsgMzEpICYgfjMxKTsKIAkJaXR2LT5kbWFfZGF0YV9yZXFfb2Zmc2V0ID0gZGF0YVsxXTsKQEAgLTcyNCw2ICs3MjQsNyBAQAogCQlzID0gJml0di0+c3RyZWFtc1tJVlRWX0RFQ19TVFJFQU1fVFlQRV9ZVVZdOwogCX0KIAllbHNlIHsKKwkJaXZ0dl9hcGlfZ2V0X2RhdGEoJml0di0+ZGVjX21ib3gsIElWVFZfTUJPWF9ETUEsIDMsIGRhdGEpOwogCQlpdHYtPmRtYV9kYXRhX3JlcV9zaXplID0gbWluX3QodTMyLCBkYXRhWzJdLCAweDEwMDAwKTsKIAkJaXR2LT5kbWFfZGF0YV9yZXFfb2Zmc2V0ID0gZGF0YVsxXTsKIAkJcyA9ICZpdHYtPnN0cmVhbXNbSVZUVl9ERUNfU1RSRUFNX1RZUEVfTVBHXTsKQEAgLTk0MCw5ICs5NDEsMTAgQEAKIAkJCQlpdnR2X2RtYV9lbmNfc3RhcnQocyk7CiAJCQlicmVhazsKIAkJfQotCQlpZiAoaSA9PSBJVlRWX01BWF9TVFJFQU1TICYmIHRlc3RfYW5kX2NsZWFyX2JpdChJVlRWX0ZfSV9VRE1BX1BFTkRJTkcsICZpdHYtPmlfZmxhZ3MpKSB7CisKKwkJaWYgKGkgPT0gSVZUVl9NQVhfU1RSRUFNUyAmJgorCQkgICAgdGVzdF9iaXQoSVZUVl9GX0lfVURNQV9QRU5ESU5HLCAmaXR2LT5pX2ZsYWdzKSkKIAkJCWl2dHZfdWRtYV9zdGFydChpdHYpOwotCQl9CiAJfQogCiAJaWYgKChjb21ibyAmIElWVFZfSVJRX0RNQSkgJiYgIXRlc3RfYml0KElWVFZfRl9JX1BJTywgJml0di0+aV9mbGFncykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LW1haWxib3guYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LW1haWxib3guYwppbmRleCAxYjVjMGFjLi44NDU3N2Y2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1tYWlsYm94LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtbWFpbGJveC5jCkBAIC0zNjksMTAgKzM2OSwxMSBAQAogfQogCiAvKiBUaGlzIG9uZSBpcyBmb3Igc3R1ZmYgdGhhdCBjYW4ndCBzbGVlcC4uIGlycSBoYW5kbGVycywgZXRjLi4gKi8KLXZvaWQgaXZ0dl9hcGlfZ2V0X2RhdGEoc3RydWN0IGl2dHZfbWFpbGJveF9kYXRhICptYmRhdGEsIGludCBtYiwgdTMyIGRhdGFbXSkKK3ZvaWQgaXZ0dl9hcGlfZ2V0X2RhdGEoc3RydWN0IGl2dHZfbWFpbGJveF9kYXRhICptYmRhdGEsIGludCBtYiwKKwkJICAgICAgIGludCBhcmdjLCB1MzIgZGF0YVtdKQogeworCXZvbGF0aWxlIHUzMiBfX2lvbWVtICpwID0gbWJkYXRhLT5tYm94W21iXS5kYXRhOwogCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IENYMjM0MVhfTUJPWF9NQVhfREFUQTsgaSsrKQotCQlkYXRhW2ldID0gcmVhZGwoJm1iZGF0YS0+bWJveFttYl0uZGF0YVtpXSk7CisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKywgcCsrKQorCQlkYXRhW2ldID0gcmVhZGwocCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1tYWlsYm94LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1tYWlsYm94LmgKaW5kZXggNmVmMTIwOS4uODI0NzY2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtbWFpbGJveC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LW1haWxib3guaApAQCAtMjQsNyArMjQsOCBAQAogI2RlZmluZSBJVlRWX01CT1hfRE1BX0VORCAgICAgICAgIDgKICNkZWZpbmUgSVZUVl9NQk9YX0RNQSAgICAgICAgICAgICA5CiAKLXZvaWQgaXZ0dl9hcGlfZ2V0X2RhdGEoc3RydWN0IGl2dHZfbWFpbGJveF9kYXRhICptYm94LCBpbnQgbWIsIHUzMiBkYXRhW10pOwordm9pZCBpdnR2X2FwaV9nZXRfZGF0YShzdHJ1Y3QgaXZ0dl9tYWlsYm94X2RhdGEgKm1iZGF0YSwgaW50IG1iLAorCQkgICAgICAgaW50IGFyZ2MsIHUzMiBkYXRhW10pOwogaW50IGl2dHZfYXBpKHN0cnVjdCBpdnR2ICppdHYsIGludCBjbWQsIGludCBhcmdzLCB1MzIgZGF0YVtdKTsKIGludCBpdnR2X3ZhcGlfcmVzdWx0KHN0cnVjdCBpdnR2ICppdHYsIHUzMiBkYXRhW0NYMjM0MVhfTUJPWF9NQVhfREFUQV0sIGludCBjbWQsIGludCBhcmdzLCAuLi4pOwogaW50IGl2dHZfdmFwaShzdHJ1Y3QgaXZ0diAqaXR2LCBpbnQgY21kLCBpbnQgYXJncywgLi4uKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYwppbmRleCBlMTJjNjAyLi4xZjkzODdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCkBAIC01NzcsMTAgKzU3NywxNCBAQAogCQljbGVhcl9iaXQoSVZUVl9GX0lfRU9TLCAmaXR2LT5pX2ZsYWdzKTsKIAogCQkvKiBJbml0aWFsaXplIERpZ2l0aXplciBmb3IgQ2FwdHVyZSAqLworCQkvKiBBdm9pZCB0aW5ueSBhdWRpbyBwcm9ibGVtIC0gZW5zdXJlIGF1ZGlvIGNsb2NrcyBhcmUgZ29pbmcgKi8KKwkJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX2F1ZGlvLCBhdWRpbywgc19zdHJlYW0sIDEpOworCQkvKiBBdm9pZCB1bnByZWRpY3RhYmxlIFBDSSBidXMgaGFuZyAtIGRpc2FibGUgdmlkZW8gY2xvY2tzICovCiAJCXY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgdmlkZW8sIHNfc3RyZWFtLCAwKTsKLQkJaXZ0dl9tc2xlZXBfdGltZW91dCgzMDAsIDEpOworCQlpdnR2X21zbGVlcF90aW1lb3V0KDE1MCwgMSk7CiAJCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfRU5DX0lOSVRJQUxJWkVfSU5QVVQsIDApOwogCQl2NGwyX3N1YmRldl9jYWxsKGl0di0+c2RfdmlkZW8sIHZpZGVvLCBzX3N0cmVhbSwgMSk7CisJCWl2dHZfbXNsZWVwX3RpbWVvdXQoMTUwLCAxKTsKIAl9CiAKIAkvKiBiZWdpbl9jYXB0dXJlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmMKaW5kZXggZDA3YWQ2Yy4uMWRhZjFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdWRtYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXVkbWEuYwpAQCAtMjEzLDYgKzIxMyw3IEBACiAJd3JpdGVfcmVnX3N5bmMocmVhZF9yZWcoSVZUVl9SRUdfRE1BWEZFUikgfCAweDAxLCBJVlRWX1JFR19ETUFYRkVSKTsKIAlzZXRfYml0KElWVFZfRl9JX0RNQSwgJml0di0+aV9mbGFncyk7CiAJc2V0X2JpdChJVlRWX0ZfSV9VRE1BLCAmaXR2LT5pX2ZsYWdzKTsKKwljbGVhcl9iaXQoSVZUVl9GX0lfVURNQV9QRU5ESU5HLCAmaXR2LT5pX2ZsYWdzKTsKIH0KIAogdm9pZCBpdnR2X3VkbWFfcHJlcGFyZShzdHJ1Y3QgaXZ0diAqaXR2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDIyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYwppbmRleCA5MWRmN2VjLi4xYTM0ZDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYwpAQCAtMjU3LDE5ICsyNTcsMTggQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG10OXYwMjJfcXVlcnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwotCXVuc2lnbmVkIGludCB3aWR0aF9mbGFnOwotCi0JaWYgKGljbC0+cXVlcnlfYnVzX3BhcmFtKQotCQl3aWR0aF9mbGFnID0gaWNsLT5xdWVyeV9idXNfcGFyYW0oaWNsKSAmCi0JCQlTT0NBTV9EQVRBV0lEVEhfTUFTSzsKLQllbHNlCi0JCXdpZHRoX2ZsYWcgPSBTT0NBTV9EQVRBV0lEVEhfMTA7Ci0KLQlyZXR1cm4gU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwgU09DQU1fUENMS19TQU1QTEVfRkFMTElORyB8CisJdW5zaWduZWQgaW50IGZsYWdzID0gU09DQU1fTUFTVEVSIHwgU09DQU1fU0xBVkUgfAorCQlTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfCBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HIHwKIAkJU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9IU1lOQ19BQ1RJVkVfTE9XIHwKIAkJU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9WU1lOQ19BQ1RJVkVfTE9XIHwKLQkJU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8IFNPQ0FNX01BU1RFUiB8IFNPQ0FNX1NMQVZFIHwKLQkJd2lkdGhfZmxhZzsKKwkJU09DQU1fREFUQV9BQ1RJVkVfSElHSDsKKworCWlmIChpY2wtPnF1ZXJ5X2J1c19wYXJhbSkKKwkJZmxhZ3MgfD0gaWNsLT5xdWVyeV9idXNfcGFyYW0oaWNsKSAmIFNPQ0FNX0RBVEFXSURUSF9NQVNLOworCWVsc2UKKwkJZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzEwOworCisJcmV0dXJuIHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKGljbCwgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IG10OXYwMjJfc19jcm9wKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Nyb3AgKmEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYwppbmRleCBjMWZjNmRjLi45ZjAxZjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMKQEAgLTE2OSw3ICsxNjksMTEgQEAKIHN0YXRpYyBpbnQgbXhiX3Byb2JlKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2KQogewogCXN0cnVjdCBteGIgKm14YiA9IE5VTEw7CisJaW50IGVycjsKIAorCWVyciA9IHNhYTcxNDZfdnZfZGV2aW5pdChkZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAJbXhiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG14YiksIEdGUF9LRVJORUwpOwogCWlmIChteGIgPT0gTlVMTCkgewogCQlERUJfRCgoIm5vdCBlbm91Z2gga2VybmVsIG1lbW9yeS5cbiIpKTsKQEAgLTI5NCw3ICsyOTgsNyBAQAogCS8qIHNlbGVjdCB0dW5lci1vdXRwdXQgb24gc2FhNzExMWEgKi8KIAlpID0gMDsKIAlzYWE3MTExYV9jYWxsKG14YiwgdmlkZW8sIHNfcm91dGluZywgU0FBNzExNV9DT01QT1NJVEUwLAotCQlTQUE3MTExX0ZNVF9DQ0lSIHwgU0FBNzExMV9WQklfQllQQVNTLCAwKTsKKwkJU0FBNzExMV9GTVRfQ0NJUiwgMCk7CiAKIAkvKiBzZWxlY3QgYSB0dW5lciB0eXBlICovCiAJdHVuX3NldHVwLm1vZGVfbWFzayA9IFRfQU5BTE9HX1RWOwpAQCAtNTE4LDggKzUyMiw4IEBACiAJCXJldHVybiBlcnI7CiAKIAkvKiBzd2l0Y2ggdmlkZW8gaW4gc2FhNzExMWEgKi8KLQlpZiAoc2FhNzExMWFfY2FsbChteGIsIHZpZGVvLCBzX3JvdXRpbmcsIGksIDAsIDApKQotCQlwcmludGsoS0VSTl9FUlIgIlZJRElPQ19TX0lOUFVUOiBjb3VsZCBub3QgYWRkcmVzcyBzYWE3MTExYSAjMS5cbiIpOworCWlmIChzYWE3MTExYV9jYWxsKG14YiwgdmlkZW8sIHNfcm91dGluZywgaSwgU0FBNzExMV9GTVRfQ0NJUiwgMCkpCisJCXByaW50ayhLRVJOX0VSUiAiVklESU9DX1NfSU5QVVQ6IGNvdWxkIG5vdCBhZGRyZXNzIHNhYTcxMTFhLlxuIik7CiAKIAkvKiBzd2l0Y2ggdGhlIGF1ZGlvLXNvdXJjZSBvbmx5IGlmIG5lY2Vzc2FyeSAqLwogCWlmICgwID09IG14Yi0+Y3VyX211dGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYwppbmRleCAzYTQ1ZTk0Li43ZjhlY2UzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMKQEAgLTU0Nyw3ICs1NDcsNiBAQAogCX0sCiB9OwogCi0KIC8qCiAgKiBnZW5lcmFsIGZ1bmN0aW9uCiAgKi8KQEAgLTYzNCw3ICs2MzMsMTIgQEAKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSB0b19zb2NfY2FtZXJhX2xpbmsoaWNkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwgU09DQU1fTUFTVEVSIHwKIAkJU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8Ci0JCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBwcml2LT5pbmZvLT5idXN3aWR0aDsKKwkJU09DQU1fREFUQV9BQ1RJVkVfSElHSDsKKworCWlmIChwcml2LT5pbmZvLT5mbGFncyAmIE9WNzcyWF9GTEFHXzhCSVQpCisJCWZsYWdzIHw9IFNPQ0FNX0RBVEFXSURUSF84OworCWVsc2UKKwkJZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzEwOwogCiAJcmV0dXJuIHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKGljbCwgZmxhZ3MpOwogfQpAQCAtMTA0MCwxNSArMTA0NCw2IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJLyoKLQkgKiBvdjc3Mnggb25seSB1c2UgOCBvciAxMCBiaXQgYnVzIHdpZHRoCi0JICovCi0JaWYgKFNPQ0FNX0RBVEFXSURUSF8xMCAhPSBwcml2LT5pbmZvLT5idXN3aWR0aCAmJgotCSAgICBTT0NBTV9EQVRBV0lEVEhfOCAgIT0gcHJpdi0+aW5mby0+YnVzd2lkdGgpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJidXMgd2lkdGggZXJyb3JcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKgogCSAqIGNoZWNrIGFuZCBzaG93IHByb2R1Y3QgSUQgYW5kIG1hbnVmYWN0dXJlciBJRAogCSAqLwogCXBpZCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFBJRCk7CkBAIC0xMTMwLDcgKzExMjUsNiBAQAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmRpZCkKIHsKIAlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgICAgICAgICpwcml2OwotCXN0cnVjdCBvdjc3MnhfY2FtZXJhX2luZm8gKmluZm87CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICAqaWNkID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgICAgICAgICphZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICAgICppY2w7CkBAIC0xMTQ1LDggKzExMzksNiBAQAogCWlmICghaWNsIHx8ICFpY2wtPnByaXYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaW5mbyA9IGljbC0+cHJpdjsKLQogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkgewogCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsCiAJCQkiSTJDLUFkYXB0ZXIgZG9lc24ndCBzdXBwb3J0ICIKQEAgLTExNTgsNyArMTE1MCw3IEBACiAJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXByaXYtPmluZm8gPSBpbmZvOworCXByaXYtPmluZm8gPSBpY2wtPnByaXY7CiAKIAl2NGwyX2kyY19zdWJkZXZfaW5pdCgmcHJpdi0+c3ViZGV2LCBjbGllbnQsICZvdjc3Mnhfc3ViZGV2X29wcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmgKaW5kZXggZGU1NDg1Zi4uY2I0MDU3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmgKQEAgLTIzMyw4ICsyMzMsOSBAQAogCWludCBzdGF0ZV9lbmNvZGVyX3dhaXRvazsgICAgIC8qIEVuY29kZXIgcHJlLXdhaXQgZG9uZSAqLwogCWludCBzdGF0ZV9lbmNvZGVyX3J1bm9rOyAgICAgIC8qIEVuY29kZXIgaGFzIHJ1biBmb3IgPj0gLjI1IHNlYyAqLwogCWludCBzdGF0ZV9kZWNvZGVyX3J1bjsgICAgICAgIC8qIERlY29kZXIgaXMgcnVubmluZyAqLworCWludCBzdGF0ZV9kZWNvZGVyX3JlYWR5OyAgICAgIC8qIERlY29kZXIgaXMgc3RhYmlsaXplZCAmIHN0cmVhbWFibGUgKi8KIAlpbnQgc3RhdGVfdXNic3RyZWFtX3J1bjsgICAgICAvKiBGWDIgaXMgc3RyZWFtaW5nICovCi0JaW50IHN0YXRlX2RlY29kZXJfcXVpZXNjZW50OyAgLyogRGVjb2RlciBpZGxlIGZvciA+IDUwbXNlYyAqLworCWludCBzdGF0ZV9kZWNvZGVyX3F1aWVzY2VudDsgIC8qIERlY29kZXIgaWRsZSBmb3IgbWluaW1hbCBpbnRlcnZhbCAqLwogCWludCBzdGF0ZV9waXBlbGluZV9jb25maWc7ICAgIC8qIFBpcGVsaW5lIGlzIGNvbmZpZ3VyZWQgKi8KIAlpbnQgc3RhdGVfcGlwZWxpbmVfcmVxOyAgICAgICAvKiBTb21lYm9keSB3YW50cyB0byBzdHJlYW0gKi8KIAlpbnQgc3RhdGVfcGlwZWxpbmVfcGF1c2U7ICAgICAvKiBQaXBlbGluZSBtdXN0IGJlIHBhdXNlZCAqLwpAQCAtMjU1LDkgKzI1NiwxNiBAQAogCXZvaWQgKCpzdGF0ZV9mdW5jKSh2b2lkICopOwogCXZvaWQgKnN0YXRlX2RhdGE7CiAKLQkvKiBUaW1lciBmb3IgbWVhc3VyaW5nIGRlY29kZXIgc2V0dGxpbmcgdGltZSAqLworCS8qIFRpbWVyIGZvciBtZWFzdXJpbmcgcmVxdWlyZWQgZGVjb2RlciBzZXR0bGluZyB0aW1lIGJlZm9yZSB3ZSdyZQorCSAgIGFsbG93ZWQgdG8gZmlyZSBpdCB1cCBhZ2Fpbi4gKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCBxdWllc2NlbnRfdGltZXI7CiAKKwkvKiBUaW1lciBmb3IgbWVhc3VyaW5nIGRlY29kZXIgc3RhYmlsaXphdGlvbiB0aW1lLCB3aGljaCBpcyB0aGUKKwkgICBhbW91bnQgb2YgdGltZSB3ZSBuZWVkIHRvIGxldCB0aGUgZGVjb2RlciBydW4gYmVmb3JlIHdlIGNhbgorCSAgIHRydXN0IGl0cyBvdXRwdXQgKG90aGVyd2lzZSB0aGUgZW5jb2RlciBtaWdodCBzZWUgZ2FyYmFnZSBhbmQKKwkgICB0aGVuIGZhaWwgdG8gc3RhcnQgY29ycmVjdGx5KS4gKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCBkZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXI7CisKIAkvKiBUaW1lciBmb3IgbWVhc3VyaW5nIGVuY29kZXIgcHJlLXdhaXQgdGltZSAqLwogCXN0cnVjdCB0aW1lcl9saXN0IGVuY29kZXJfd2FpdF90aW1lcjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYwppbmRleCAxYmJkYWIwLi43MTJiMzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYwpAQCAtNDgsMTEgKzQ4LDEzIEBACiAgICBiZWZvcmUgd2UgYXJlIGFsbG93ZWQgdG8gc3RhcnQgaXQgcnVubmluZy4gKi8KICNkZWZpbmUgVElNRV9NU0VDX0RFQ09ERVJfV0FJVCA1MAogCisvKiBUaGlzIGRlZmluZXMgYSBtaW5pbXVtIGludGVydmFsIHRoYXQgdGhlIGRlY29kZXIgbXVzdCBiZSBhbGxvd2VkIHRvIHJ1bgorICAgYmVmb3JlIHdlIGNhbiBzYWZlbHkgYmVnaW4gdXNpbmcgaXRzIHN0cmVhbWluZyBvdXRwdXQuICovCisjZGVmaW5lIFRJTUVfTVNFQ19ERUNPREVSX1NUQUJJTElaQVRJT05fV0FJVCAzMDAKKwogLyogVGhpcyBkZWZpbmVzIGEgbWluaW11bSBpbnRlcnZhbCB0aGF0IHRoZSBlbmNvZGVyIG11c3QgcmVtYWluIHF1aWV0Ci0gICBiZWZvcmUgd2UgYXJlIGFsbG93ZWQgdG8gY29uZmlndXJlIGl0LiAgSSBoYWQgdGhpcyBvcmlnaW5hbGx5IHNldCB0bwotICAgNTBtc2VjLCBidXQgTWFydGluIERhdXNrYXJkdCA8bWFydGluLmRhdXNrYXJkdEBnbXguZGU+IHJlcG9ydHMgdGhhdAotICAgdGhpbmdzIHdvcmsgYmV0dGVyIHdoZW4gaXQncyBzZXQgdG8gMTAwbXNlYy4gKi8KLSNkZWZpbmUgVElNRV9NU0VDX0VOQ09ERVJfV0FJVCAxMDAKKyAgIGJlZm9yZSB3ZSBhcmUgYWxsb3dlZCB0byBjb25maWd1cmUgaXQuICovCisjZGVmaW5lIFRJTUVfTVNFQ19FTkNPREVSX1dBSVQgNTAKIAogLyogVGhpcyBkZWZpbmVzIHRoZSBtaW5pbXVtIGludGVydmFsIHRoYXQgdGhlIGVuY29kZXIgbXVzdCBzdWNjZXNzZnVsbHkgcnVuCiAgICBiZWZvcmUgd2UgY29uc2lkZXIgdGhhdCB0aGUgZW5jb2RlciBoYXMgcnVuIGF0IGxlYXN0IG9uY2Ugc2luY2UgaXRzCkBAIC0zMzQsNiArMzM2LDcgQEAKIHN0YXRpYyB2b2lkIHB2cjJfaGR3X2ludGVybmFsX2ZpbmRfc3RkZW51bShzdHJ1Y3QgcHZyMl9oZHcgKmhkdyk7CiBzdGF0aWMgdm9pZCBwdnIyX2hkd19pbnRlcm5hbF9zZXRfc3RkX2F2YWlsKHN0cnVjdCBwdnIyX2hkdyAqaGR3KTsKIHN0YXRpYyB2b2lkIHB2cjJfaGR3X3F1aWVzY2VudF90aW1lb3V0KHVuc2lnbmVkIGxvbmcpOworc3RhdGljIHZvaWQgcHZyMl9oZHdfZGVjb2Rlcl9zdGFiaWxpemF0aW9uX3RpbWVvdXQodW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgdm9pZCBwdnIyX2hkd19lbmNvZGVyX3dhaXRfdGltZW91dCh1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyB2b2lkIHB2cjJfaGR3X2VuY29kZXJfcnVuX3RpbWVvdXQodW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgaW50IHB2cjJfaXNzdWVfc2ltcGxlX2NtZChzdHJ1Y3QgcHZyMl9oZHcgKix1MzIpOwpAQCAtMTcwNSw2ICsxNzA4LDcgQEAKIAlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgdjRsMiBzdHJlYW09JXMiLAogCQkgICAoZW5hYmxlZmwgPyAib24iIDogIm9mZiIpKTsKIAl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwgdmlkZW8sIHNfc3RyZWFtLCBlbmFibGVmbCk7CisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIDAsIGF1ZGlvLCBzX3N0cmVhbSwgZW5hYmxlZmwpOwogCWlmIChoZHctPmRlY29kZXJfY2xpZW50X2lkKSB7CiAJCS8qIFdlIGdldCBoZXJlIGlmIHRoZSBlbmNvZGVyIGhhcyBiZWVuIG5vdGljZWQuICBPdGhlcndpc2UKIAkJICAgd2UnbGwgaXNzdWUgYSB3YXJuaW5nIHRvIHRoZSB1c2VyICh3aGljaCBzaG91bGQKQEAgLTI0NjEsNiArMjQ2NSwxMSBAQAogCWhkdy0+cXVpZXNjZW50X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyloZHc7CiAJaGR3LT5xdWllc2NlbnRfdGltZXIuZnVuY3Rpb24gPSBwdnIyX2hkd19xdWllc2NlbnRfdGltZW91dDsKIAorCWluaXRfdGltZXIoJmhkdy0+ZGVjb2Rlcl9zdGFiaWxpemF0aW9uX3RpbWVyKTsKKwloZHctPmRlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaGR3OworCWhkdy0+ZGVjb2Rlcl9zdGFiaWxpemF0aW9uX3RpbWVyLmZ1bmN0aW9uID0KKwkJcHZyMl9oZHdfZGVjb2Rlcl9zdGFiaWxpemF0aW9uX3RpbWVvdXQ7CisKIAlpbml0X3RpbWVyKCZoZHctPmVuY29kZXJfd2FpdF90aW1lcik7CiAJaGR3LT5lbmNvZGVyX3dhaXRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWhkdzsKIAloZHctPmVuY29kZXJfd2FpdF90aW1lci5mdW5jdGlvbiA9IHB2cjJfaGR3X2VuY29kZXJfd2FpdF90aW1lb3V0OwpAQCAtMjY3NCw2ICsyNjgzLDcgQEAKICBmYWlsOgogCWlmIChoZHcpIHsKIAkJZGVsX3RpbWVyX3N5bmMoJmhkdy0+cXVpZXNjZW50X3RpbWVyKTsKKwkJZGVsX3RpbWVyX3N5bmMoJmhkdy0+ZGVjb2Rlcl9zdGFiaWxpemF0aW9uX3RpbWVyKTsKIAkJZGVsX3RpbWVyX3N5bmMoJmhkdy0+ZW5jb2Rlcl9ydW5fdGltZXIpOwogCQlkZWxfdGltZXJfc3luYygmaGR3LT5lbmNvZGVyX3dhaXRfdGltZXIpOwogCQlpZiAoaGR3LT53b3JrcXVldWUpIHsKQEAgLTI3NDEsNiArMjc1MSw3IEBACiAJCWhkdy0+d29ya3F1ZXVlID0gTlVMTDsKIAl9CiAJZGVsX3RpbWVyX3N5bmMoJmhkdy0+cXVpZXNjZW50X3RpbWVyKTsKKwlkZWxfdGltZXJfc3luYygmaGR3LT5kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXIpOwogCWRlbF90aW1lcl9zeW5jKCZoZHctPmVuY29kZXJfcnVuX3RpbWVyKTsKIAlkZWxfdGltZXJfc3luYygmaGR3LT5lbmNvZGVyX3dhaXRfdGltZXIpOwogCWlmIChoZHctPmZ3X2J1ZmZlcikgewpAQCAtNDQ1Miw3ICs0NDYzLDcgQEAKIAogCXN3aXRjaCAoaGR3LT5wYXRod2F5X3N0YXRlKSB7CiAJY2FzZSBQVlIyX1BBVEhXQVlfQU5BTE9HOgotCQlpZiAoaGR3LT5zdGF0ZV9kZWNvZGVyX3J1bikgeworCQlpZiAoaGR3LT5zdGF0ZV9kZWNvZGVyX3J1biAmJiBoZHctPnN0YXRlX2RlY29kZXJfcmVhZHkpIHsKIAkJCS8qIEluIGFuYWxvZyBtb2RlLCBpZiB0aGUgZGVjb2RlciBpcyBydW5uaW5nLCB0aGVuCiAJCQkgICBydW4gdGhlIGVuY29kZXIuICovCiAJCQlyZXR1cm4gITA7CkBAIC00NTE5LDYgKzQ1MzAsMTcgQEAKIH0KIAogCisvKiBUaW1lb3V0IGZ1bmN0aW9uIGZvciBkZWNvZGVyIHN0YWJpbGl6YXRpb24gdGltZXIuICovCitzdGF0aWMgdm9pZCBwdnIyX2hkd19kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSAoc3RydWN0IHB2cjJfaGR3ICopZGF0YTsKKwloZHctPnN0YXRlX2RlY29kZXJfcmVhZHkgPSAhMDsKKwl0cmFjZV9zdGJpdCgic3RhdGVfZGVjb2Rlcl9yZWFkeSIsIGhkdy0+c3RhdGVfZGVjb2Rlcl9yZWFkeSk7CisJaGR3LT5zdGF0ZV9zdGFsZSA9ICEwOworCXF1ZXVlX3dvcmsoaGR3LT53b3JrcXVldWUsICZoZHctPndvcmtwb2xsKTsKK30KKworCiAvKiBUaW1lb3V0IGZ1bmN0aW9uIGZvciBlbmNvZGVyIHdhaXQgdGltZXIuICovCiBzdGF0aWMgdm9pZCBwdnIyX2hkd19lbmNvZGVyX3dhaXRfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CkBAIC00NTU3LDggKzQ1NzksMTMgQEAKIAkJfQogCQloZHctPnN0YXRlX2RlY29kZXJfcXVpZXNjZW50ID0gMDsKIAkJaGR3LT5zdGF0ZV9kZWNvZGVyX3J1biA9IDA7Ci0JCS8qIHBhcmFub2lhIC0gc29sdmUgcmFjZSBpZiB0aW1lciBqdXN0IGNvbXBsZXRlZCAqLworCQkvKiBwYXJhbm9pYSAtIHNvbHZlIHJhY2UgaWYgdGltZXIocykganVzdCBjb21wbGV0ZWQgKi8KIAkJZGVsX3RpbWVyX3N5bmMoJmhkdy0+cXVpZXNjZW50X3RpbWVyKTsKKwkJLyogS2lsbCB0aGUgc3RhYmlsaXphdGlvbiB0aW1lciwgaW4gY2FzZSB3ZSdyZSBraWxsaW5nIHRoZQorCQkgICBlbmNvZGVyIGJlZm9yZSB0aGUgcHJldmlvdXMgc3RhYmlsaXphdGlvbiBpbnRlcnZhbCBoYXMKKwkJICAgYmVlbiBwcm9wZXJseSB0aW1lZC4gKi8KKwkJZGVsX3RpbWVyX3N5bmMoJmhkdy0+ZGVjb2Rlcl9zdGFiaWxpemF0aW9uX3RpbWVyKTsKKwkJaGR3LT5zdGF0ZV9kZWNvZGVyX3JlYWR5ID0gMDsKIAl9IGVsc2UgewogCQlpZiAoIWhkdy0+c3RhdGVfZGVjb2Rlcl9xdWllc2NlbnQpIHsKIAkJCWlmICghdGltZXJfcGVuZGluZygmaGR3LT5xdWllc2NlbnRfdGltZXIpKSB7CkBAIC00NTk2LDEwICs0NjIzLDIxIEBACiAJCWlmIChoZHctPmZsYWdfZGVjb2Rlcl9taXNzZWQpIHJldHVybiAwOwogCQlpZiAocHZyMl9kZWNvZGVyX2VuYWJsZShoZHcsITApIDwgMCkgcmV0dXJuIDA7CiAJCWhkdy0+c3RhdGVfZGVjb2Rlcl9xdWllc2NlbnQgPSAwOworCQloZHctPnN0YXRlX2RlY29kZXJfcmVhZHkgPSAwOwogCQloZHctPnN0YXRlX2RlY29kZXJfcnVuID0gITA7CisJCWlmIChoZHctPmRlY29kZXJfY2xpZW50X2lkID09IFBWUjJfQ0xJRU5UX0lEX1NBQTcxMTUpIHsKKwkJCWhkdy0+ZGVjb2Rlcl9zdGFiaWxpemF0aW9uX3RpbWVyLmV4cGlyZXMgPQorCQkJCWppZmZpZXMgKworCQkJCShIWiAqIFRJTUVfTVNFQ19ERUNPREVSX1NUQUJJTElaQVRJT05fV0FJVCAvCisJCQkJIDEwMDApOworCQkJYWRkX3RpbWVyKCZoZHctPmRlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lcik7CisJCX0gZWxzZSB7CisJCQloZHctPnN0YXRlX2RlY29kZXJfcmVhZHkgPSAhMDsKKwkJfQogCX0KIAl0cmFjZV9zdGJpdCgic3RhdGVfZGVjb2Rlcl9xdWllc2NlbnQiLGhkdy0+c3RhdGVfZGVjb2Rlcl9xdWllc2NlbnQpOwogCXRyYWNlX3N0Yml0KCJzdGF0ZV9kZWNvZGVyX3J1biIsaGR3LT5zdGF0ZV9kZWNvZGVyX3J1bik7CisJdHJhY2Vfc3RiaXQoInN0YXRlX2RlY29kZXJfcmVhZHkiLCBoZHctPnN0YXRlX2RlY29kZXJfcmVhZHkpOwogCXJldHVybiAhMDsKIH0KIApAQCAtNDc5Nyw3ICs0ODM1LDggQEAKIAkJCWJ1ZixhY250LAogCQkJIndvcmtlcjolcyVzJXMlcyVzJXMlcyIsCiAJCQkoaGR3LT5zdGF0ZV9kZWNvZGVyX3J1biA/Ci0JCQkgIiA8ZGVjb2RlOnJ1bj4iIDoKKwkJCSAoaGR3LT5zdGF0ZV9kZWNvZGVyX3JlYWR5ID8KKwkJCSAgIjxkZWNvZGU6cnVuPiIgOiAiIDxkZWNvZGU6c3RhcnQ+IikgOgogCQkJIChoZHctPnN0YXRlX2RlY29kZXJfcXVpZXNjZW50ID8KIAkJCSAgIiIgOiAiIDxkZWNvZGU6c3RvcD4iKSksCiAJCQkoaGR3LT5zdGF0ZV9kZWNvZGVyX3F1aWVzY2VudCA/CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oCmluZGV4IDU2ZTcwZWEuLjUxZDMwMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oCkBAIC0zMDYsNiArMzA2LDcgQEAKIAlpbnQgc3RhdGVfZW5jb2Rlcl9vazsKIAlpbnQgc3RhdGVfZW5jb2Rlcl9ydW47CiAJaW50IHN0YXRlX2RlY29kZXJfcnVuOworCWludCBzdGF0ZV9kZWNvZGVyX3JlYWR5OwogCWludCBzdGF0ZV91c2JzdHJlYW1fcnVuOwogCWludCBzdGF0ZV9kZWNvZGVyX3F1aWVzY2VudDsKIAlpbnQgc3RhdGVfcGlwZWxpbmVfY29uZmlnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwppbmRleCAyOTRmODYwLi4zMjJhYzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwpAQCAtODk4LDE4ICs4OTgsOCBAQAogCiBzdGF0aWMgdm9pZCBweGFfY2FtZXJhX2FjdGl2YXRlKHN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYpCiB7Ci0Jc3RydWN0IHB4YWNhbWVyYV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBjZGV2LT5wZGF0YTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwY2Rldi0+c29jX2hvc3QudjRsMl9kZXYuZGV2OwogCXUzMiBjaWNyNCA9IDA7CiAKLQlkZXZfZGJnKGRldiwgIlJlZ2lzdGVyZWQgcGxhdGZvcm0gZGV2aWNlIGF0ICVwIGRhdGEgJXBcbiIsCi0JCXBjZGV2LCBwZGF0YSk7Ci0KLQlpZiAocGRhdGEgJiYgcGRhdGEtPmluaXQpIHsKLQkJZGV2X2RiZyhkZXYsICIlczogSW5pdCBncGlvc1xuIiwgX19mdW5jX18pOwotCQlwZGF0YS0+aW5pdChkZXYpOwotCX0KLQogCS8qIGRpc2FibGUgYWxsIGludGVycnVwdHMgKi8KIAlfX3Jhd193cml0ZWwoMHgzZmYsIHBjZGV2LT5iYXNlICsgQ0lDUjApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3JqNTRuMWNiMGMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcmo1NG4xY2IwYy5jCmluZGV4IDgwNTIyNmUuLjkyNzcxOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcmo1NG4xY2IwYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcmo1NG4xY2IwYy5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIAl1OCB2YWw7CiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IHJqNTRuMV9yZWdfdmFsIGJhbmtfNFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzRbXSA9IHsKIAl7MHg0MTcsIDB9LAogCXsweDQyYywgMH0sCiAJezB4NDJkLCAweGYwfSwKQEAgLTE4Niw3ICsxODYsNyBAQAogCXsweDRmZSwgMn0sCiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IHJqNTRuMV9yZWdfdmFsIGJhbmtfNVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzVbXSA9IHsKIAl7MHg1MTQsIDB9LAogCXsweDUxNiwgMH0sCiAJezB4NTE4LCAwfSwKQEAgLTIwNyw3ICsyMDcsNyBAQAogCXsweDVmZSwgMn0sCiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IHJqNTRuMV9yZWdfdmFsIGJhbmtfN1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzdbXSA9IHsKIAl7MHg3MGEsIDB9LAogCXsweDcxNCwgMHhmZn0sCiAJezB4NzE1LCAweGZmfSwKQEAgLTIxNSw3ICsyMTUsNyBAQAogCXsweDdGRSwgMn0sCiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IHJqNTRuMV9yZWdfdmFsIGJhbmtfOFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzhbXSA9IHsKIAl7MHg4MDAsIDB4MDB9LAogCXsweDgwMSwgMHgwMX0sCiAJezB4ODAyLCAweDYxfSwKQEAgLTQwMywxMiArNDAzLDEyIEBACiAJezB4OEZFLCAyfSwKIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3Qgcmo1NG4xX3JlZ192YWwgYmFua18xMFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByajU0bjFfcmVnX3ZhbCBiYW5rXzEwW10gPSB7CiAJezB4MTBiZiwgMHg2OX0KIH07CiAKIC8qIENsb2NrIGRpdmlkZXJzIC0gdGhlc2UgYXJlIGRlZmF1bHQgcmVnaXN0ZXIgdmFsdWVzLCBkaXZpZGVyID0gcmVnaXN0ZXIgKyAxICovCi1jb25zdCBzdGF0aWMgc3RydWN0IHJqNTRuMV9jbG9ja19kaXYgY2xrX2RpdiA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgcmo1NG4xX2Nsb2NrX2RpdiBjbGtfZGl2ID0gewogCS5yYXRpb190Zwk9IDMgLyogZGVmYXVsdDogNSAqLywKIAkucmF0aW9fdAk9IDQgLyogZGVmYXVsdDogMSAqLywKIAkucmF0aW9fcgk9IDQgLyogZGVmYXVsdDogMCAqLywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKaW5kZXggNDQ4NzNhMC4uYzBhN2Y4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKQEAgLTEwNCw2ICsxMDQsMTAgQEAKIAlpZiAoaWQgPT0gVjRMMl9JREVOVF9TQUE3MTExKQogCQlyZXR1cm4gcmVnIDwgMHgyMCAmJiByZWcgIT0gMHgwMSAmJiByZWcgIT0gMHgwZiAmJgogCQkgICAgICAgKHJlZyA8IDB4MTMgfHwgcmVnID4gMHgxOSkgJiYgcmVnICE9IDB4MWQgJiYgcmVnICE9IDB4MWU7CisJaWYgKGlkID09IFY0TDJfSURFTlRfU0FBNzExMUEpCisJCXJldHVybiByZWcgPCAweDIwICYmIHJlZyAhPSAweDAxICYmIHJlZyAhPSAweDBmICYmCisJCSAgICAgICByZWcgIT0gMHgxNCAmJiByZWcgIT0gMHgxOCAmJiByZWcgIT0gMHgxOSAmJgorCQkgICAgICAgcmVnICE9IDB4MWQgJiYgcmVnICE9IDB4MWU7CiAKIAkvKiBjb21tb24gZm9yIHNhYTcxMTMvNC81LzggKi8KIAlpZiAodW5saWtlbHkoKHJlZyA+PSAweDNiICYmIHJlZyA8PSAweDNmKSB8fCByZWcgPT0gMHg1YyB8fCByZWcgPT0gMHg1ZiB8fApAQCAtOTU0LDggKzk1OCw3IEBACiAJMDExIE5UU0MgTiAoMy41OE1IeikgICAgICAgICAgICBQQUwgTSAoMy41OE1IeikKIAkxMDAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgIE5UU0MtSmFwYW4gKDMuNThNSHopCiAJKi8KLQlpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMSB8fAotCSAgICBzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTEzKSB7CisJaWYgKHN0YXRlLT5pZGVudCA8PSBWNEwyX0lERU5UX1NBQTcxMTMpIHsKIAkJdTggcmVnID0gc2FhNzExeF9yZWFkKHNkLCBSXzBFX0NIUk9NQV9DTlRMXzEpICYgMHg4ZjsKIAogCQlpZiAoc3RkID09IFY0TDJfU1REX1BBTF9NKSB7CkBAIC0xMjMyLDIyICsxMjM1LDE5IEBACiAJCQkgICAgIHUzMiBpbnB1dCwgdTMyIG91dHB1dCwgdTMyIGNvbmZpZykKIHsKIAlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7Ci0JdTggbWFzayA9IChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTExKSA/IDB4ZjggOiAweGYwOworCXU4IG1hc2sgPSAoc3RhdGUtPmlkZW50IDw9IFY0TDJfSURFTlRfU0FBNzExMUEpID8gMHhmOCA6IDB4ZjA7CiAKIAl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJkZWNvZGVyIHNldCBpbnB1dCAlZCBvdXRwdXQgJWRcbiIsCiAJCWlucHV0LCBvdXRwdXQpOwogCiAJLyogc2FhNzExMS8zIGRvZXMgbm90IGhhdmUgdGhlc2UgaW5wdXRzICovCi0JaWYgKChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTEzIHx8Ci0JICAgICBzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTExKSAmJgorCWlmIChzdGF0ZS0+aWRlbnQgPD0gVjRMMl9JREVOVF9TQUE3MTEzICYmCiAJICAgIChpbnB1dCA9PSBTQUE3MTE1X0NPTVBPU0lURTQgfHwKIAkgICAgIGlucHV0ID09IFNBQTcxMTVfQ09NUE9TSVRFNSkpIHsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChpbnB1dCA+IFNBQTcxMTVfU1ZJREVPMykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKG91dHB1dCA+IFNBQTcxMTVfSVBPUlRfT04pCi0JCXJldHVybiAtRUlOVkFMOwogCWlmIChzdGF0ZS0+aW5wdXQgPT0gaW5wdXQgJiYgc3RhdGUtPm91dHB1dCA9PSBvdXRwdXQpCiAJCXJldHVybiAwOwogCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIm5vdyBzZXR0aW5nICVzIGlucHV0ICVzIG91dHB1dFxuIiwKQEAgLTEyNTYsNyArMTI1Niw3IEBACiAJc3RhdGUtPmlucHV0ID0gaW5wdXQ7CiAKIAkvKiBzYWE3MTExIGhhcyBzbGlnaHRseSBkaWZmZXJlbnQgaW5wdXQgbnVtYmVyaW5nICovCi0JaWYgKHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTEpIHsKKwlpZiAoc3RhdGUtPmlkZW50IDw9IFY0TDJfSURFTlRfU0FBNzExMUEpIHsKIAkJaWYgKGlucHV0ID49IFNBQTcxMTVfQ09NUE9TSVRFNCkKIAkJCWlucHV0IC09IDI7CiAJCS8qIHNhYTcxMTEgc3BlY2lmaWMgKi8KQEAgLTEyOTIsNyArMTI5Miw3IEBACiB7CiAJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCi0JaWYgKHN0YXRlLT5pZGVudCAhPSBWNEwyX0lERU5UX1NBQTcxMTEpCisJaWYgKHN0YXRlLT5pZGVudCA+IFY0TDJfSURFTlRfU0FBNzExMUEpCiAJCXJldHVybiAtRUlOVkFMOwogCXNhYTcxMXhfd3JpdGUoc2QsIDB4MTEsIChzYWE3MTF4X3JlYWQoc2QsIDB4MTEpICYgMHg3ZikgfAogCQkodmFsID8gMHg4MCA6IDApKTsKQEAgLTE1OTYsNiArMTU5NiwxMCBAQAogCXN3aXRjaCAoY2hpcF9pZCkgewogCWNhc2UgJzEnOgogCQlzdGF0ZS0+aWRlbnQgPSBWNEwyX0lERU5UX1NBQTcxMTE7CisJCWlmIChzYWE3MTF4X3JlYWQoc2QsIFJfMDBfQ0hJUF9WRVJTSU9OKSAmIDB4ZjApIHsKKwkJCXY0bF9pbmZvKGNsaWVudCwgInNhYTcxMTFhIHZhcmlhbnQgZm91bmRcbiIpOworCQkJc3RhdGUtPmlkZW50ID0gVjRMMl9JREVOVF9TQUE3MTExQTsKKwkJfQogCQlicmVhazsKIAljYXNlICczJzoKIAkJc3RhdGUtPmlkZW50ID0gVjRMMl9JREVOVF9TQUE3MTEzOwpAQCAtMTYxMiw3ICsxNjE2LDcgQEAKIAlkZWZhdWx0OgogCQlzdGF0ZS0+aWRlbnQgPSBWNEwyX0lERU5UX1NBQTcxMTE7CiAJCXY0bDJfaW5mbyhzZCwgIldBUk5JTkc6IENoaXAgaXMgbm90IGtub3duIC0gRmFsbGluZyBiYWNrIHRvIHNhYTcxMTFcbiIpOwotCisJCWJyZWFrOwogCX0KIAogCXN0YXRlLT5hdWRjbGtfZnJlcSA9IDQ4MDAwOwpAQCAtMTYyMyw2ICsxNjI3LDcgQEAKIAlzdGF0ZS0+Y3J5c3RhbF9mcmVxID0gU0FBNzExNV9GUkVRXzI0XzU3Nl9NSFo7CiAJc3dpdGNoIChzdGF0ZS0+aWRlbnQpIHsKIAljYXNlIFY0TDJfSURFTlRfU0FBNzExMToKKwljYXNlIFY0TDJfSURFTlRfU0FBNzExMUE6CiAJCXNhYTcxMXhfd3JpdGVyZWdzKHNkLCBzYWE3MTExX2luaXQpOwogCQlicmVhazsKIAljYXNlIFY0TDJfSURFTlRfU0FBNzExMzoKQEAgLTE2MzIsNyArMTYzNyw3IEBACiAJCXN0YXRlLT5jcnlzdGFsX2ZyZXEgPSBTQUE3MTE1X0ZSRVFfMzJfMTFfTUhaOwogCQlzYWE3MTF4X3dyaXRlcmVncyhzZCwgc2FhNzExNV9pbml0X2F1dG9faW5wdXQpOwogCX0KLQlpZiAoc3RhdGUtPmlkZW50ICE9IFY0TDJfSURFTlRfU0FBNzExMSkKKwlpZiAoc3RhdGUtPmlkZW50ID4gVjRMMl9JREVOVF9TQUE3MTExQSkKIAkJc2FhNzExeF93cml0ZXJlZ3Moc2QsIHNhYTcxMTVfaW5pdF9taXNjKTsKIAlzYWE3MTF4X3NldF92NGxzdGQoc2QsIFY0TDJfU1REX05UU0MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jCmluZGV4IDJmZTdhNzAuLjI1MGVmODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jCkBAIC0xODEsNyArMTgxLDcgQEAKICNkZWZpbmUgU0FBNzEyN182MEhaX0RBQ19DT05UUk9MIDB4MTUKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSBzYWE3MTI3X2luaXRfY29uZmlnXzYwaHpbXSA9IHsKIAl7IFNBQTcxMjdfUkVHX0JVUlNUX1NUQVJULCAJCQkweDE5IH0sCi0JLyogQlVSU1RfRU5EIGlzIGFsc28gdXNlZCBhcyBhIGNoaXAgSUQgaW4gc2FhNzEyN19kZXRlY3RfY2xpZW50ICovCisJLyogQlVSU1RfRU5EIGlzIGFsc28gdXNlZCBhcyBhIGNoaXAgSUQgaW4gc2FhNzEyN19wcm9iZSAqLwogCXsgU0FBNzEyN19SRUdfQlVSU1RfRU5ELCAJCQkweDFkIH0sCiAJeyBTQUE3MTI3X1JFR19DSFJPTUFfUEhBU0UsIAkJCTB4YTMgfSwKIAl7IFNBQTcxMjdfUkVHX0dBSU5VLCAJCQkJMHg5OCB9LApAQCAtMjAwLDEwICsyMDAsMTAgQEAKIAl7IDAsIDAgfQogfTsKIAotI2RlZmluZSBTQUE3MTI3XzUwSFpfREFDX0NPTlRST0wgMHgwMgotc3RhdGljIHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHNhYTcxMjdfaW5pdF9jb25maWdfNTBoeltdID0geworI2RlZmluZSBTQUE3MTI3XzUwSFpfUEFMX0RBQ19DT05UUk9MIDB4MDIKK3N0YXRpYyBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSBzYWE3MTI3X2luaXRfY29uZmlnXzUwaHpfcGFsW10gPSB7CiAJeyBTQUE3MTI3X1JFR19CVVJTVF9TVEFSVCwgCQkJMHgyMSB9LAotCS8qIEJVUlNUX0VORCBpcyBhbHNvIHVzZWQgYXMgYSBjaGlwIElEIGluIHNhYTcxMjdfZGV0ZWN0X2NsaWVudCAqLworCS8qIEJVUlNUX0VORCBpcyBhbHNvIHVzZWQgYXMgYSBjaGlwIElEIGluIHNhYTcxMjdfcHJvYmUgKi8KIAl7IFNBQTcxMjdfUkVHX0JVUlNUX0VORCwgCQkJMHgxZCB9LAogCXsgU0FBNzEyN19SRUdfQ0hST01BX1BIQVNFLCAJCQkweDNmIH0sCiAJeyBTQUE3MTI3X1JFR19HQUlOVSwgCQkJCTB4N2QgfSwKQEAgLTIyMiw2ICsyMjIsMjggQEAKIAl7IDAsIDAgfQogfTsKIAorI2RlZmluZSBTQUE3MTI3XzUwSFpfU0VDQU1fREFDX0NPTlRST0wgMHgwOAorc3RhdGljIHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHNhYTcxMjdfaW5pdF9jb25maWdfNTBoel9zZWNhbVtdID0geworCXsgU0FBNzEyN19SRUdfQlVSU1RfU1RBUlQsIAkJCTB4MjEgfSwKKwkvKiBCVVJTVF9FTkQgaXMgYWxzbyB1c2VkIGFzIGEgY2hpcCBJRCBpbiBzYWE3MTI3X3Byb2JlICovCisJeyBTQUE3MTI3X1JFR19CVVJTVF9FTkQsIAkJCTB4MWQgfSwKKwl7IFNBQTcxMjdfUkVHX0NIUk9NQV9QSEFTRSwgCQkJMHgzZiB9LAorCXsgU0FBNzEyN19SRUdfR0FJTlUsIAkJCQkweDZhIH0sCisJeyBTQUE3MTI3X1JFR19HQUlOViwgCQkJCTB4ODEgfSwKKwl7IFNBQTcxMjdfUkVHX0JMQUNLX0xFVkVMLCAJCQkweDMzIH0sCisJeyBTQUE3MTI3X1JFR19CTEFOS0lOR19MRVZFTCwgCQkJMHgzNSB9LAorCXsgU0FBNzEyN19SRUdfVkJJX0JMQU5LSU5HLCAJCQkweDM1IH0sCisJeyBTQUE3MTI3X1JFR19EQUNfQ09OVFJPTCwgCQkJMHgwOCB9LAorCXsgU0FBNzEyN19SRUdfQlVSU1RfQU1QLCAJCQkweDJmIH0sCisJeyBTQUE3MTI3X1JFR19TVUJDMywgCQkJCTB4YjIgfSwKKwl7IFNBQTcxMjdfUkVHX1NVQkMyLCAJCQkJMHgzYiB9LAorCXsgU0FBNzEyN19SRUdfU1VCQzEsIAkJCQkweGEzIH0sCisJeyBTQUE3MTI3X1JFR19TVUJDMCwgCQkJCTB4MjggfSwKKwl7IFNBQTcxMjdfUkVHX01VTFRJLCAJCQkJMHg5MCB9LAorCXsgU0FBNzEyN19SRUdfQ0xPU0VEX0NBUFRJT04sIAkJCTB4MDAgfSwKKwl7IDAsIDAgfQorfTsKKwogLyoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtNDYzLDEwICs0ODUsMjEgQEAKIAkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiU2VsZWN0aW5nIDYwIEh6IHZpZGVvIFN0YW5kYXJkXG4iKTsKIAkJaW5pdHRhYiA9IHNhYTcxMjdfaW5pdF9jb25maWdfNjBoejsKIAkJc3RhdGUtPnJlZ182MSA9IFNBQTcxMjdfNjBIWl9EQUNfQ09OVFJPTDsKKworCX0gZWxzZSBpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzEyOSAmJgorCQkgICAoc3RkICYgVjRMMl9TVERfU0VDQU0pICYmCisJCSAgICEoc3RkICYgKFY0TDJfU1REXzYyNV81MCAmIH5WNEwyX1NURF9TRUNBTSkpKSB7CisKKwkJLyogSWYgYW5kIG9ubHkgaWYgU0VDQU0sIHdpdGggYSBTQUE3MTJbODldICovCisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwKKwkJCSAiU2VsZWN0aW5nIDUwIEh6IFNFQ0FNIHZpZGVvIFN0YW5kYXJkXG4iKTsKKwkJaW5pdHRhYiA9IHNhYTcxMjdfaW5pdF9jb25maWdfNTBoel9zZWNhbTsKKwkJc3RhdGUtPnJlZ182MSA9IFNBQTcxMjdfNTBIWl9TRUNBTV9EQUNfQ09OVFJPTDsKKwogCX0gZWxzZSB7Ci0JCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlNlbGVjdGluZyA1MCBIeiB2aWRlbyBTdGFuZGFyZFxuIik7Ci0JCWluaXR0YWIgPSBzYWE3MTI3X2luaXRfY29uZmlnXzUwaHo7Ci0JCXN0YXRlLT5yZWdfNjEgPSBTQUE3MTI3XzUwSFpfREFDX0NPTlRST0w7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlNlbGVjdGluZyA1MCBIeiBQQUwgdmlkZW8gU3RhbmRhcmRcbiIpOworCQlpbml0dGFiID0gc2FhNzEyN19pbml0X2NvbmZpZ181MGh6X3BhbDsKKwkJc3RhdGUtPnJlZ182MSA9IFNBQTcxMjdfNTBIWl9QQUxfREFDX0NPTlRST0w7CiAJfQogCiAJLyogV3JpdGUgVGFibGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCmluZGV4IDAzZjU3MjcuLjI5NzgzM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwpAQCAtNDE2MCw3ICs0MTYwLDcgQEAKIAkJCS5hbXV4ID0gTElORTIsCiAJCX0sCiAJfSwKLQlbU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTXSA9IHsKKwlbU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTX01LNV0gPSB7CiAJCS8qICAgICAgIEJlaG9sZGVyIEludGwuIEx0ZC4gMjAwOCAgICAgICovCiAJCS8qRG1pdHJ5IEJlbGltb3YgPGQuYmVsaW1vdkBnbWFpbC5jb20+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJCZWhvbGRlciBCZWhvbGRUViA1MDUgUkRTIiwKQEAgLTUzMjAsNiArNTMyMCw0MSBAQAogCQkJLnZtdXggPSA4LAogCQl9IH0sCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTX01LM10gPSB7CisJCS8qICAgICAgIEJlaG9sZGVyIEludGwuIEx0ZC4gMjAwOCAgICAgICovCisJCS8qRG1pdHJ5IEJlbGltb3YgPGQuYmVsaW1vdkBnbWFpbC5jb20+ICovCisJCS5uYW1lICAgICAgICAgICA9ICJCZWhvbGRlciBCZWhvbGRUViA1MDUgUkRTIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDIwMDAwMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmRzX2FkZHIgCT0gMHgxMCwKKwkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwMDA4MDAwLAorCQkuaW5wdXRzICAgICAgICAgPSB7eworCQkJLm5hbWUgPSBuYW1lX3R2LAorCQkJLnZtdXggPSAzLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJCS50diAgID0gMSwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggPSAxLAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTEsCisJCX0gfSwKKwkJLm11dGUgPSB7CisJCQkubmFtZSA9IG5hbWVfbXV0ZSwKKwkJCS5hbXV4ID0gTElORTEsCisJCX0sCisJCS5yYWRpbyA9IHsKKwkJCS5uYW1lID0gbmFtZV9yYWRpbywKKwkJCS5hbXV4ID0gTElORTIsCisJCX0sCisJfSwKIAogfTsKIApAQCAtNjIzNSw3ICs2MjcwLDEzIEBACiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMCwKIAkJLnN1YnZlbmRvciAgICA9IDB4MDAwMCwKIAkJLnN1YmRldmljZSAgICA9IDB4NTA1QiwKLQkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEUywKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEU19NSzUsCisJfSwgeworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzAsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDAwMDAsCisJCS5zdWJkZXZpY2UgICAgPSAweDUwNTEsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNfTUszLAogCX0sewogCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzAsCkBAIC02NzkyLDcgKzY4MzMsOCBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNDA3Rk06CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF80MDk6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVGTToKLQljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEUzoKKwljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEU19NSzU6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNfTUszOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA3XzlGTToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwN1JEU19NSzM6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDdSRFNfTUs1OgpAQCAtNjk1Myw4ICs2OTk1LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9TMzUwOgogCQlkZXYtPmhhc19yZW1vdGUgPSBTQUE3MTM0X1JFTU9URV9HUElPOwotCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsICAgMHgwMDAwODAwMCwgMHgwMDAwODAwMCk7Ci0JCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwKTsKKwkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BNT0RFMCA+PiAyLCAgIDB4MDAwMEMwMDAsIDB4MDAwMEMwMDApOworCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAgPj4gMiwgMHgwMDAwQzAwMCwgMHgwMDAwQzAwMCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCmluZGV4IGY4ZTk4NTkuLjk0OTkwMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYwpAQCAtNDYwLDcgKzQ2MCw3IEBACiAJaW50IHBvbGxpbmcgICAgICA9IDA7CiAJaW50IHJjNV9ncGlvCSA9IDA7CiAJaW50IG5lY19ncGlvCSA9IDA7Ci0JaW50IGlyX3R5cGUgICAgICA9IElSX1RZUEVfT1RIRVI7CisJdTY0IGlyX3R5cGUgPSBJUl9UWVBFX09USEVSOwogCWludCBlcnI7CiAKIAlpZiAoZGV2LT5oYXNfcmVtb3RlICE9IFNBQTcxMzRfUkVNT1RFX0dQSU8pCkBAIC01NjgsNyArNTY4LDggQEAKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzQwN0ZNOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNDA5OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1Rk06Ci0JY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFM6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVSRFNfTUs1OgorCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTX01LMzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwN185Rk06CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDdSRFNfTUszOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA3UkRTX01LNToKQEAgLTcyOCw3ICs3MjksNyBAQAogCWRldi0+cmVtb3RlID0gaXI7CiAJc2FhNzEzNF9pcl9zdGFydChkZXYsIGlyKTsKIAotCWVyciA9IGlyX2lucHV0X3JlZ2lzdGVyKGlyLT5kZXYsIGlyX2NvZGVzKTsKKwllcnIgPSBpcl9pbnB1dF9yZWdpc3Rlcihpci0+ZGV2LCBpcl9jb2RlcywgTlVMTCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X3N0b3A7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCmluZGV4IGNiNzMyNjQuLjMxMTM4ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAKICNkZWZpbmUgTk9STV81MjVfNjAJCQlcCiAJCS5oX3N0YXJ0ICAgICAgID0gMCwJXAotCQkuaF9zdG9wICAgICAgICA9IDcwMywJXAorCQkuaF9zdG9wICAgICAgICA9IDcxOSwJXAogCQkudmlkZW9fdl9zdGFydCA9IDIzLAlcCiAJCS52aWRlb192X3N0b3AgID0gMjYyLAlcCiAJCS52Ymlfdl9zdGFydF8wID0gMTAsCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCmluZGV4IDUzYjdlMGIuLmJmMTMwOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaApAQCAtMjgyLDcgKzI4Miw3IEBACiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMjAgICAxNTYKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfU1RVRElPXzUwN1VBIDE1NwogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9DQVJEQlVTXzUwMSAxNTgKLSNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTICAgICAgICAgMTU5CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwNVJEU19NSzUgICAgIDE1OQogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDdSRFNfTUszICAgICAxNjAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA3UkRTX01LNSAgICAgMTYxCiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzYwN0ZNX01LNSAgICAgIDE2MgpAQCAtMjk5LDYgKzI5OSw3IEBACiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfWk9MSURfSFlCUklEX1BDSQkJMTczCiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVNVU19FVVJPUEFfSFlCUklECTE3NAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0xFQURURUtfV0lORkFTVF9EVFYxMDAwUyAxNzUKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfNTA1UkRTX01LMyAgICAgMTc2CiAKICNkZWZpbmUgU0FBNzEzNF9NQVhCT0FSRFMgMzIKICNkZWZpbmUgU0FBNzEzNF9JTlBVVF9NQVggOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtYXBpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1hcGkuYwppbmRleCA2ZjA5NGE5Li4xZDQ4N2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1hcGkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1hcGkuYwpAQCAtNTIzLDcgKzUyMyw3IEBACiAJfQogCiAJcmVnbGVuID0gc2FhNzE2NF9pMmNhZGRyX3RvX3JlZ2xlbihidXMsIGFkZHIpOwotCWlmICh1bml0aWQgPCAwKSB7CisJaWYgKHJlZ2xlbiA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCQkiJXMoKSBlcnJvciwgY2Fubm90IHRyYW5zbGF0ZSByZWdhZGRyIHRvIHJlZ2xlblxuIiwKIAkJCV9fZnVuY19fKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwppbmRleCBmMDljNzE0Li5mYjg4YzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCkBAIC0xNzQ4LDYgKzE3NDgsMjIgQEAKIAkJCQkgICAgICAgaWNkKTsKIH0KIAorc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X2dldF9wYXJtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCSAgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybSkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgZ19wYXJtLCBwYXJtKTsKK30KKworc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X3NldF9wYXJtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCSAgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybSkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19wYXJtLCBwYXJtKTsKK30KKwogc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X2dldF9jdHJsKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCSAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKQEAgLTE4MDgsNiArMTgyNCw4IEBACiAJLnRyeV9mbXQJPSBzaF9tb2JpbGVfY2V1X3RyeV9mbXQsCiAJLnNldF9jdHJsCT0gc2hfbW9iaWxlX2NldV9zZXRfY3RybCwKIAkuZ2V0X2N0cmwJPSBzaF9tb2JpbGVfY2V1X2dldF9jdHJsLAorCS5zZXRfcGFybQk9IHNoX21vYmlsZV9jZXVfc2V0X3Bhcm0sCisJLmdldF9wYXJtCT0gc2hfbW9iaWxlX2NldV9nZXRfcGFybSwKIAkucmVxYnVmcwk9IHNoX21vYmlsZV9jZXVfcmVxYnVmcywKIAkucG9sbAkJPSBzaF9tb2JpbGVfY2V1X3BvbGwsCiAJLnF1ZXJ5Y2FwCT0gc2hfbW9iaWxlX2NldV9xdWVyeWNhcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL0tjb25maWcKaW5kZXggZjcxZjI3Mi4uNmViYWYyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL0tjb25maWcKQEAgLTEsNyArMSwxMCBAQAogY29uZmlnIFVTQl9TTjlDMTAyCi0JdHJpc3RhdGUgIlVTQiBTTjlDMXh4IFBDIENhbWVyYSBDb250cm9sbGVyIHN1cHBvcnQiCisJdHJpc3RhdGUgIlVTQiBTTjlDMXh4IFBDIENhbWVyYSBDb250cm9sbGVyIHN1cHBvcnQgKERFUFJFQ0FURUQpIgogCWRlcGVuZHMgb24gVklERU9fVjRMMgogCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIGlzIERFUFJFQ0FURUQgcGxlYXNlIHVzZSB0aGUgZ3NwY2Egc29uaXhiIGFuZAorCSAgc29uaXhqIG1vZHVsZXMgaW5zdGVhZC4KKwogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIFNPTmlYIFNOOUMxMDEsCiAJICBTTjlDMTAyLCBTTjlDMTAzLCBTTjlDMTA1IGFuZCBTTjlDMTIwIFBDIENhbWVyYSBDb250cm9sbGVycy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmgKaW5kZXggMzZlZTQzYS4uY2M0MGQ2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oCkBAIC00NSwyMCArNDUsMjQgQEAKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwNSwgQlJJREdFX1NOOUMxMDIpLCB9LAogI2VuZGlmCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDcsIEJSSURHRV9TTjlDMTAyKSwgfSwKKyNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBICYmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0FfTU9EVUxFCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDksIEJSSURHRV9TTjlDMTAyKSwgfSwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwZCwgQlJJREdFX1NOOUMxMDIpLCB9LAogLyoJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMTEsIEJSSURHRV9TTjlDMTAyKSwgfSwgT1Y2NjUwICovCisjZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAxOSwgQlJJREdFX1NOOUMxMDIpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI0LCBCUklER0VfU045QzEwMiksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjUsIEJSSURHRV9TTjlDMTAyKSwgfSwKKyNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBICYmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0FfTU9EVUxFCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjgsIEJSSURHRV9TTjlDMTAyKSwgfSwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyOSwgQlJJREdFX1NOOUMxMDIpLCB9LAorI2VuZGlmCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmEsIEJSSURHRV9TTjlDMTAyKSwgfSwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYiwgQlJJREdFX1NOOUMxMDIpLCB9LAogI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0EgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9NT0RVTEUKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYywgQlJJREdFX1NOOUMxMDIpLCB9LAotI2VuZGlmCiAvKgl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyZCwgQlJJREdFX1NOOUMxMDIpLCB9LCBIVjcxMzFSICovCisjZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyZSwgQlJJREdFX1NOOUMxMDIpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDMwLCBCUklER0VfU045QzEwMiksIH0sCiAJLyogU045QzEwMyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwppbmRleCA2YjNmYmNjLi44MGY2YmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwpAQCAtNzgxLDYgKzc4MSwzMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9nX3Bhcm0oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICphKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCisJaWYgKGljaS0+b3BzLT5nZXRfcGFybSkKKwkJcmV0dXJuIGljaS0+b3BzLT5nZXRfcGFybShpY2QsIGEpOworCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIGludCBzb2NfY2FtZXJhX3NfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkgICAgIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisKKwlpZiAoaWNpLT5vcHMtPnNldF9wYXJtKQorCQlyZXR1cm4gaWNpLT5vcHMtPnNldF9wYXJtKGljZCwgYSk7CisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkgICBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqaWQpCiB7CkBAIC04NDYsMTAgKzg3Miw4IEBACiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gaTJjX2dldF9hZGFwdGVyKGljbC0+aTJjX2FkYXB0ZXJfaWQpOwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2OwotCWludCByZXQ7CiAKIAlpZiAoIWFkYXApIHsKLQkJcmV0ID0gLUVOT0RFVjsKIAkJZGV2X2VycigmaWNkLT5kZXYsICJDYW5ub3QgZ2V0IEkyQyBhZGFwdGVyICMlZC4gTm8gZHJpdmVyP1xuIiwKIAkJCWljbC0+aTJjX2FkYXB0ZXJfaWQpOwogCQlnb3RvIGVpMmNnYTsKQEAgLTg1OSwxMCArODgzLDggQEAKIAogCXN1YmRldiA9IHY0bDJfaTJjX25ld19zdWJkZXZfYm9hcmQoJmljaS0+djRsMl9kZXYsIGFkYXAsCiAJCQkJaWNsLT5tb2R1bGVfbmFtZSwgaWNsLT5ib2FyZF9pbmZvLCBOVUxMKTsKLQlpZiAoIXN1YmRldikgewotCQlyZXQgPSAtRU5PTUVNOworCWlmICghc3ViZGV2KQogCQlnb3RvIGVpMmNuZDsKLQl9CiAKIAljbGllbnQgPSBzdWJkZXYtPnByaXY7CiAKQEAgLTg3Myw3ICs4OTUsNyBAQAogZWkyY25kOgogCWkyY19wdXRfYWRhcHRlcihhZGFwKTsKIGVpMmNnYToKLQlyZXR1cm4gcmV0OworCXJldHVybiAtRU5PREVWOwogfQogCiBzdGF0aWMgdm9pZCBzb2NfY2FtZXJhX2ZyZWVfaTJjKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQpAQCAtMTI2MCw2ICsxMjgyLDggQEAKIAkudmlkaW9jX2Nyb3BjYXAJCSA9IHNvY19jYW1lcmFfY3JvcGNhcCwKIAkudmlkaW9jX2dfY3JvcAkJID0gc29jX2NhbWVyYV9nX2Nyb3AsCiAJLnZpZGlvY19zX2Nyb3AJCSA9IHNvY19jYW1lcmFfc19jcm9wLAorCS52aWRpb2NfZ19wYXJtCQkgPSBzb2NfY2FtZXJhX2dfcGFybSwKKwkudmlkaW9jX3NfcGFybQkJID0gc29jX2NhbWVyYV9zX3Bhcm0sCiAJLnZpZGlvY19nX2NoaXBfaWRlbnQgICAgID0gc29jX2NhbWVyYV9nX2NoaXBfaWRlbnQsCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwogCS52aWRpb2NfZ19yZWdpc3RlcgkgPSBzb2NfY2FtZXJhX2dfcmVnaXN0ZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19tZWRpYWJ1cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfbWVkaWFidXMuYwppbmRleCBmOGQ1Yzg3Li44YjYzYjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19tZWRpYWJ1cy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX21lZGlhYnVzLmMKQEAgLTI0LDkxICsyNCwxMDYgQEAKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChZVllVOF8yWDhfTEUpXSA9IHsKKwl9LAorCVtNQlVTX0lEWChZVllVOF8yWDhfTEUpXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1lWWVUsCiAJCS5uYW1lCQkJPSAiWVZZVSIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSwKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKLQl9LCBbTUJVU19JRFgoWVVZVjhfMlg4X0JFKV0gPSB7CisJfSwKKwlbTUJVU19JRFgoWVVZVjhfMlg4X0JFKV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9VWVZZLAogCQkubmFtZQkJCT0gIlVZVlkiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEksCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFlWWVU4XzJYOF9CRSldID0geworCX0sCisJW01CVVNfSURYKFlWWVU4XzJYOF9CRSldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfVllVWSwKIAkJLm5hbWUJCQk9ICJWWVVZIiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBREhJLAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChSR0I1NTVfMlg4X1BBREhJX0xFKV0gPSB7CisJfSwKKwlbTUJVU19JRFgoUkdCNTU1XzJYOF9QQURISV9MRSldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfUkdCNTU1LAogCQkubmFtZQkJCT0gIlJHQjU1NSIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSwKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKLQl9LCBbTUJVU19JRFgoUkdCNTU1XzJYOF9QQURISV9CRSldID0geworCX0sCisJW01CVVNfSURYKFJHQjU1NV8yWDhfUEFESElfQkUpXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1JHQjU1NVgsCiAJCS5uYW1lCQkJPSAiUkdCNTU1WCIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSwKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKLQl9LCBbTUJVU19JRFgoUkdCNTY1XzJYOF9MRSldID0geworCX0sCisJW01CVVNfSURYKFJHQjU2NV8yWDhfTEUpXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1JHQjU2NSwKIAkJLm5hbWUJCQk9ICJSR0I1NjUiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEksCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFJHQjU2NV8yWDhfQkUpXSA9IHsKKwl9LAorCVtNQlVTX0lEWChSR0I1NjVfMlg4X0JFKV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9SR0I1NjVYLAogCQkubmFtZQkJCT0gIlJHQjU2NVgiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEksCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFNCR0dSOF8xWDgpXSA9IHsKKwl9LAorCVtNQlVTX0lEWChTQkdHUjhfMVg4KV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjgsCiAJCS5uYW1lCQkJPSAiQmF5ZXIgOCBCR0dSIiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfTk9ORSwKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKLQl9LCBbTUJVU19JRFgoU0JHR1IxMF8xWDEwKV0gPSB7CisJfSwKKwlbTUJVU19JRFgoU0JHR1IxMF8xWDEwKV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjEwLAogCQkubmFtZQkJCT0gIkJheWVyIDEwIEJHR1IiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gMTAsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfRVhURU5EMTYsCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKEdSRVk4XzFYOCldID0geworCX0sCisJW01CVVNfSURYKEdSRVk4XzFYOCldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfR1JFWSwKIAkJLm5hbWUJCQk9ICJHcmV5IiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfTk9ORSwKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKLQl9LCBbTUJVU19JRFgoWTEwXzFYMTApXSA9IHsKKwl9LAorCVtNQlVTX0lEWChZMTBfMVgxMCldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfWTEwLAogCQkubmFtZQkJCT0gIkdyZXkgMTBiaXQiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gMTAsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfRVhURU5EMTYsCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfTEUsCi0JfSwgW01CVVNfSURYKFNCR0dSMTBfMlg4X1BBREhJX0xFKV0gPSB7CisJfSwKKwlbTUJVU19JRFgoU0JHR1IxMF8yWDhfUEFESElfTEUpXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1NCR0dSMTAsCiAJCS5uYW1lCQkJPSAiQmF5ZXIgMTAgQkdHUiIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LAogCQkucGFja2luZwkJPSBTT0NfTUJVU19QQUNLSU5HXzJYOF9QQURISSwKIAkJLm9yZGVyCQkJPSBTT0NfTUJVU19PUkRFUl9MRSwKLQl9LCBbTUJVU19JRFgoU0JHR1IxMF8yWDhfUEFETE9fTEUpXSA9IHsKKwl9LAorCVtNQlVTX0lEWChTQkdHUjEwXzJYOF9QQURMT19MRSldID0gewogCQkuZm91cmNjCQkJPSBWNEwyX1BJWF9GTVRfU0JHR1IxMCwKIAkJLm5hbWUJCQk9ICJCYXllciAxMCBCR0dSIiwKIAkJLmJpdHNfcGVyX3NhbXBsZQk9IDgsCiAJCS5wYWNraW5nCQk9IFNPQ19NQlVTX1BBQ0tJTkdfMlg4X1BBRExPLAogCQkub3JkZXIJCQk9IFNPQ19NQlVTX09SREVSX0xFLAotCX0sIFtNQlVTX0lEWChTQkdHUjEwXzJYOF9QQURISV9CRSldID0geworCX0sCisJW01CVVNfSURYKFNCR0dSMTBfMlg4X1BBREhJX0JFKV0gPSB7CiAJCS5mb3VyY2MJCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjEwLAogCQkubmFtZQkJCT0gIkJheWVyIDEwIEJHR1IiLAogCQkuYml0c19wZXJfc2FtcGxlCT0gOCwKIAkJLnBhY2tpbmcJCT0gU09DX01CVVNfUEFDS0lOR18yWDhfUEFESEksCiAJCS5vcmRlcgkJCT0gU09DX01CVVNfT1JERVJfQkUsCi0JfSwgW01CVVNfSURYKFNCR0dSMTBfMlg4X1BBRExPX0JFKV0gPSB7CisJfSwKKwlbTUJVU19JRFgoU0JHR1IxMF8yWDhfUEFETE9fQkUpXSA9IHsKIAkJLmZvdXJjYwkJCT0gVjRMMl9QSVhfRk1UX1NCR0dSMTAsCiAJCS5uYW1lCQkJPSAiQmF5ZXIgMTAgQkdHUiIsCiAJCS5iaXRzX3Blcl9zYW1wbGUJPSA4LApAQCAtMTM0LDcgKzE0OSw4IEBACiBjb25zdCBzdHJ1Y3Qgc29jX21idXNfcGl4ZWxmbXQgKnNvY19tYnVzX2dldF9mbXRkZXNjKAogCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBjb2RlKQogewotCWlmICgodW5zaWduZWQgaW50KShjb2RlIC0gVjRMMl9NQlVTX0ZNVF9GSVhFRCkgPiBBUlJBWV9TSVpFKG1idXNfZm10KSkKKwlpZiAoY29kZSAtIFY0TDJfTUJVU19GTVRfRklYRUQgPiBBUlJBWV9TSVpFKG1idXNfZm10KSB8fAorCSAgICBjb2RlIDw9IFY0TDJfTUJVU19GTVRfRklYRUQpCiAJCXJldHVybiBOVUxMOwogCXJldHVybiBtYnVzX2ZtdCArIGNvZGUgLSBWNEwyX01CVVNfRk1UX0ZJWEVEIC0gMTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyOWVjNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9LY29uZmlnCkBAIC0wLDAgKzEsMTYgQEAKK2NvbmZpZyBWSURFT19UTEcyMzAwCisJdHJpc3RhdGUgIlRlbGVnZW50IFRMRzIzMDAgVVNCIHZpZGVvIGNhcHR1cmUgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgSU5QVVQgJiYgU05EICYmIERWQl9DT1JFCisJc2VsZWN0IFZJREVPX1RVTkVSCisJc2VsZWN0IFZJREVPX1RWRUVQUk9NCisJc2VsZWN0IFZJREVPX0lSCisJc2VsZWN0IFZJREVPQlVGX1ZNQUxMT0MKKwlzZWxlY3QgU05EX1BDTQorCXNlbGVjdCBWSURFT0JVRl9EVkIKKworCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIFRlbGVnZW50IHRsZzIzMDAgYmFzZWQgVFYgY2FyZHMuCisJICBUaGUgZHJpdmVyIHN1cHBvcnRzIFY0TDIsIERWQi1UIGFuZCByYWRpby4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcG9zZWlkb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWJiN2ZkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAorcG9zZWlkb24tb2JqcyA6PSBwZC12aWRlby5vIHBkLWFsc2EubyBwZC1kdmIubyBwZC1yYWRpby5vIHBkLW1haW4ubworCitvYmotJChDT05GSUdfVklERU9fVExHMjMwMCkgKz0gcG9zZWlkb24ubworCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL3ZpZGVvCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1hbHNhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0MjYyMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1hbHNhLmMKQEAgLTAsMCArMSwzMzIgQEAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc291bmQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NvdW5kY2FyZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvaW5mby5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlICJwZC1jb21tb24uaCIKKyNpbmNsdWRlICJ2ZW5kb3JjbWRzLmgiCisKK3N0YXRpYyB2b2lkIGNvbXBsZXRlX2hhbmRsZXJfYXVkaW8oc3RydWN0IHVyYiAqdXJiKTsKKyNkZWZpbmUgQVVESU9fRVAJKDB4ODMpCisjZGVmaW5lIEFVRElPX0JVRl9TSVpFCSg1MTIpCisjZGVmaW5lIFBFUklPRF9TSVpFCSgxMDI0ICogOCkKKyNkZWZpbmUgUEVSSU9EX01JTgkoNCkKKyNkZWZpbmUgUEVSSU9EX01BWCAJUEVSSU9EX01JTgorCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX3BkX2h3X2NhcHR1cmUgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCVNORFJWX1BDTV9JTkZPX01NQVAgICAgICAgICAgIHwKKwkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElELAorCisJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKKworCS5yYXRlX21pbiA9IDQ4MDAwLAorCS5yYXRlX21heCA9IDQ4MDAwLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gUEVSSU9EX1NJWkUgKiBQRVJJT0RfTUlOLAorCS5wZXJpb2RfYnl0ZXNfbWluID0gUEVSSU9EX1NJWkUsCisJLnBlcmlvZF9ieXRlc19tYXggPSBQRVJJT0RfU0laRSwKKwkucGVyaW9kc19taW4gPSBQRVJJT0RfTUlOLAorCS5wZXJpb2RzX21heCA9IFBFUklPRF9NQVgsCisJLyoKKwkuYnVmZmVyX2J5dGVzX21heCA9IDYyNzIwICogOCwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDY0LAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTI1NDQsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSA5OAorCSovCit9OworCitzdGF0aWMgaW50IHNuZF9wZF9jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHBvc2VpZG9uICpwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBwb3NlaWRvbl9hdWRpbyAqcGEgPSAmcC0+YXVkaW87CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKworCWlmICghcCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcGEtPnVzZXJzKys7CisJcGEtPmNhcmRfY2xvc2UgCQk9IDA7CisJcGEtPmNhcHR1cmVfcGNtX3N1YnN0cmVhbQk9IHN1YnN0cmVhbTsKKwlydW50aW1lLT5wcml2YXRlX2RhdGEJCT0gcDsKKworCXJ1bnRpbWUtPmh3ID0gc25kX3BkX2h3X2NhcHR1cmU7CisJc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOworCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShwLT5pbnRlcmZhY2UpOworCWtyZWZfZ2V0KCZwLT5rcmVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfcGRfcGNtX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8gKnBhID0gJnAtPmF1ZGlvOworCisJcGEtPnVzZXJzLS07CisJcGEtPmNhcmRfY2xvc2UgCQk9IDE7CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHAtPmludGVyZmFjZSk7CisJa3JlZl9wdXQoJnAtPmtyZWYsIHBvc2VpZG9uX2RlbGV0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3BkX2h3X2NhcHR1cmVfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXVuc2lnbmVkIGludCBzaXplOworCisJc2l6ZSA9IHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKTsKKwlpZiAocnVudGltZS0+ZG1hX2FyZWEpIHsKKwkJaWYgKHJ1bnRpbWUtPmRtYV9ieXRlcyA+IHNpemUpCisJCQlyZXR1cm4gMDsKKwkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOworCX0KKwlydW50aW1lLT5kbWFfYXJlYSA9IHZtYWxsb2Moc2l6ZSk7CisJaWYgKCFydW50aW1lLT5kbWFfYXJlYSkKKwkJcmV0dXJuIC1FTk9NRU07CisJZWxzZQorCQlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1ZGlvX2J1Zl9mcmVlKHN0cnVjdCBwb3NlaWRvbiAqcCkKK3sKKwlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8gKnBhID0gJnAtPmF1ZGlvOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFVRElPX0JVRlM7IGkrKykKKwkJaWYgKHBhLT51cmJfYXJyYXlbaV0pCisJCQl1c2Jfa2lsbF91cmIocGEtPnVyYl9hcnJheVtpXSk7CisJZnJlZV9hbGxfdXJiX2dlbmVyaWMocGEtPnVyYl9hcnJheSwgQVVESU9fQlVGUyk7CisJbG9ncG0oKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfcGRfaHdfY2FwdHVyZV9mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWxvZ3BtKCk7CisJYXVkaW9fYnVmX2ZyZWUocCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX3BkX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgQVVESU9fVFJBSUxFUl9TSVpFCSgxNikKK3N0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfYXVkaW9fZGF0YShzdHJ1Y3QgdXJiICp1cmIsIGludCAqcGVyaW9kX2VsYXBzZWQpCit7CisJc3RydWN0IHBvc2VpZG9uX2F1ZGlvICpwYSA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gcGEtPmNhcHR1cmVfcGNtX3N1YnN0cmVhbS0+cnVudGltZTsKKworCWludCBzdHJpZGUJPSBydW50aW1lLT5mcmFtZV9iaXRzID4+IDM7CisJaW50IGxlbgkJPSB1cmItPmFjdHVhbF9sZW5ndGggLyBzdHJpZGU7CisJdW5zaWduZWQgY2hhciAqY3AJPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwl1bnNpZ25lZCBpbnQgb2xkcHRyCT0gcGEtPnJjdl9wb3NpdGlvbjsKKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gQVVESU9fQlVGX1NJWkUgLSA0KQorCQlsZW4gLT0gKEFVRElPX1RSQUlMRVJfU0laRSAvIHN0cmlkZSk7CisKKwkvKiBkbyB0aGUgY29weSAqLworCWlmIChvbGRwdHIgKyBsZW4gPj0gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKKwkJdW5zaWduZWQgaW50IGNudCA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0gb2xkcHRyOworCisJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIG9sZHB0ciAqIHN0cmlkZSwgY3AsIGNudCAqIHN0cmlkZSk7CisJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSwgKGNwICsgY250ICogc3RyaWRlKSwKKwkJCQkJKGxlbiAqIHN0cmlkZSAtIGNudCAqIHN0cmlkZSkpOworCX0gZWxzZQorCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEgKyBvbGRwdHIgKiBzdHJpZGUsIGNwLCBsZW4gKiBzdHJpZGUpOworCisJLyogdXBkYXRlIHRoZSBzdGF0YXMgKi8KKwlzbmRfcGNtX3N0cmVhbV9sb2NrKHBhLT5jYXB0dXJlX3BjbV9zdWJzdHJlYW0pOworCXBhLT5yY3ZfcG9zaXRpb24JKz0gbGVuOworCWlmIChwYS0+cmN2X3Bvc2l0aW9uID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQorCQlwYS0+cmN2X3Bvc2l0aW9uIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCisJcGEtPmNvcGllZF9wb3NpdGlvbiArPSAobGVuKTsKKwlpZiAocGEtPmNvcGllZF9wb3NpdGlvbiA+PSBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgeworCQlwYS0+Y29waWVkX3Bvc2l0aW9uIC09IHJ1bnRpbWUtPnBlcmlvZF9zaXplOworCQkqcGVyaW9kX2VsYXBzZWQgPSAxOworCX0KKwlzbmRfcGNtX3N0cmVhbV91bmxvY2socGEtPmNhcHR1cmVfcGNtX3N1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBsZXRlX2hhbmRsZXJfYXVkaW8oc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBwb3NlaWRvbl9hdWRpbyAqcGEgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBwYS0+Y2FwdHVyZV9wY21fc3Vic3RyZWFtOworCWludCAgICBwZXJpb2RfZWxhcHNlZCA9IDA7CisJaW50ICAgIHJldDsKKworCWlmICgxID09IHBhLT5jYXJkX2Nsb3NlIHx8IHBhLT5jYXB0dXJlX3N0cmVhbSAhPSBTVFJFQU1fT04pCisJCXJldHVybjsKKworCWlmICh1cmItPnN0YXR1cyAhPSAwKSB7CisJCS8qaWYgKHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pKi8KKwkJCXJldHVybjsKKwl9CisKKwlpZiAoc3Vic3RyZWFtKSB7CisJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJCWhhbmRsZV9hdWRpb19kYXRhKHVyYiwgJnBlcmlvZF9lbGFwc2VkKTsKKwkJCWlmIChwZXJpb2RfZWxhcHNlZCkKKwkJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CisJCX0KKwl9CisKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQgPCAwKQorCQlsb2coImF1ZGlvIHVyYiBmYWlsZWQgKGVycmNvZCA9ICVpKSIsIHJldCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGZpcmVfYXVkaW9fdXJiKHN0cnVjdCBwb3NlaWRvbiAqcCkKK3sKKwlpbnQgaSwgcmV0ID0gMDsKKwlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8gKnBhID0gJnAtPmF1ZGlvOworCisJYWxsb2NfYnVsa191cmJzX2dlbmVyaWMocGEtPnVyYl9hcnJheSwgQVVESU9fQlVGUywKKwkJCXAtPnVkZXYsIEFVRElPX0VQLAorCQkJQVVESU9fQlVGX1NJWkUsIEdGUF9BVE9NSUMsCisJCQljb21wbGV0ZV9oYW5kbGVyX2F1ZGlvLCBwYSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVVESU9fQlVGUzsgaSsrKSB7CisJCXJldCA9IHVzYl9zdWJtaXRfdXJiKHBhLT51cmJfYXJyYXlbaV0sIEdGUF9LRVJORUwpOworCQlpZiAocmV0KQorCQkJbG9nKCJ1cmIgZXJyIDogJWQiLCByZXQpOworCX0KKwlsb2coKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNuZF9wZF9jYXB0dXJlX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IHBvc2VpZG9uICpwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBwb3NlaWRvbl9hdWRpbyAqcGEgPSAmcC0+YXVkaW87CisKKwlpZiAoZGVidWdfbW9kZSkKKwkJbG9nKCJjbWQgJWQsIGF1ZGlvIHN0YXQgOiAlZFxuIiwgY21kLCBwYS0+Y2FwdHVyZV9zdHJlYW0pOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQlpZiAocGEtPmNhcHR1cmVfc3RyZWFtID09IFNUUkVBTV9PTikKKwkJCXJldHVybiAwOworCisJCXBhLT5yY3ZfcG9zaXRpb24gPSBwYS0+Y29waWVkX3Bvc2l0aW9uID0gMDsKKwkJcGEtPmNhcHR1cmVfc3RyZWFtID0gU1RSRUFNX09OOworCisJCWlmIChpbl9oaWJlcm5hdGlvbihwKSkKKwkJCXJldHVybiAwOworCQlmaXJlX2F1ZGlvX3VyYihwKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJCXBhLT5jYXB0dXJlX3N0cmVhbSA9IFNUUkVBTV9TVVNQRU5EOworCQlyZXR1cm4gMDsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCXBhLT5jYXB0dXJlX3N0cmVhbSA9IFNUUkVBTV9PRkY7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190CitzbmRfcGRfY2FwdHVyZV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8gKnBhID0gJnAtPmF1ZGlvOworCXJldHVybiBwYS0+cmN2X3Bvc2l0aW9uOworfQorCitzdGF0aWMgc3RydWN0IHBhZ2UgKnNuZF9wY21fcGRfZ2V0X3BhZ2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXZvaWQgKnBhZ2VwdHIgPSBzdWJzLT5ydW50aW1lLT5kbWFfYXJlYSArIG9mZnNldDsKKwlyZXR1cm4gdm1hbGxvY190b19wYWdlKHBhZ2VwdHIpOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHBjbV9jYXB0dXJlX29wcyA9IHsKKwkub3BlbiAgICAgID0gc25kX3BkX2NhcHR1cmVfb3BlbiwKKwkuY2xvc2UgICAgID0gc25kX3BkX3BjbV9jbG9zZSwKKwkuaW9jdGwgICAgID0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9IHNuZF9wZF9od19jYXB0dXJlX3BhcmFtcywKKwkuaHdfZnJlZSAgID0gc25kX3BkX2h3X2NhcHR1cmVfZnJlZSwKKwkucHJlcGFyZSAgID0gc25kX3BkX3ByZXBhcmUsCisJLnRyaWdnZXIgICA9IHNuZF9wZF9jYXB0dXJlX3RyaWdnZXIsCisJLnBvaW50ZXIgICA9IHNuZF9wZF9jYXB0dXJlX3BvaW50ZXIsCisJLnBhZ2UgICAgICA9IHNuZF9wY21fcGRfZ2V0X3BhZ2UsCit9OworCisjaWZkZWYgQ09ORklHX1BNCitpbnQgcG1fYWxzYV9zdXNwZW5kKHN0cnVjdCBwb3NlaWRvbiAqcCkKK3sKKwlsb2dwbShwKTsKKwlhdWRpb19idWZfZnJlZShwKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHBtX2Fsc2FfcmVzdW1lKHN0cnVjdCBwb3NlaWRvbiAqcCkKK3sKKwlsb2dwbShwKTsKKwlmaXJlX2F1ZGlvX3VyYihwKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitpbnQgcG9zZWlkb25fYXVkaW9faW5pdChzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJc3RydWN0IHBvc2VpZG9uX2F1ZGlvICpwYSA9ICZwLT5hdWRpbzsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlpbnQgcmV0OworCisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKC0xLCAiVGVsZWdlbnQiLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9wY21fbmV3KGNhcmQsICJwb3NlaWRvbiBhdWRpbyIsIDAsIDAsIDEsICZwY20pOworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJnBjbV9jYXB0dXJlX29wcyk7CisJcGNtLT5pbmZvX2ZsYWdzICAgPSAwOworCXBjbS0+cHJpdmF0ZV9kYXRhID0gcDsKKwlzdHJjcHkocGNtLT5uYW1lLCAicG9zZWlkb24gYXVkaW8gY2FwdHVyZSIpOworCisJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkFMU0EgZHJpdmVyIik7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgInBvc2VpZG9uIEF1ZGlvIik7CisJc3RyY3B5KGNhcmQtPmxvbmduYW1lLCAicG9zZWlkb24gQUxTQSBBdWRpbyIpOworCisJaWYgKHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSB7CisJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlwYS0+Y2FyZCA9IGNhcmQ7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwb3NlaWRvbl9hdWRpb19mcmVlKHN0cnVjdCBwb3NlaWRvbiAqcCkKK3sKKwlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8gKnBhID0gJnAtPmF1ZGlvOworCisJaWYgKHBhLT5jYXJkKQorCQlzbmRfY2FyZF9mcmVlKHBhLT5jYXJkKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1jb21tb24uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjA2NmJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLWNvbW1vbi5oCkBAIC0wLDAgKzEsMjgyIEBACisjaWZuZGVmIFBEX0NPTU1PTl9ICisjZGVmaW5lIFBEX0NPTU1PTl9ICisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi12bWFsbG9jLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKworI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgImR2YmRldi5oIgorI2luY2x1ZGUgImR2Yl9kZW11eC5oIgorI2luY2x1ZGUgImRteGRldi5oIgorCisjZGVmaW5lIFNCVUZfTlVNCTgKKyNkZWZpbmUgTUFYX0JVRkZFUl9OVU0JNgorI2RlZmluZSBQS19QRVJfVVJCCTMyCisjZGVmaW5lIElTT19QS1RfU0laRQkzMDcyCisKKyNkZWZpbmUgUE9TRUlET05fU1RBVEVfTk9ORQkJKDB4MDAwMCkKKyNkZWZpbmUgUE9TRUlET05fU1RBVEVfQU5BTE9HCQkoMHgwMDAxKQorI2RlZmluZSBQT1NFSURPTl9TVEFURV9GTQkJKDB4MDAwMikKKyNkZWZpbmUgUE9TRUlET05fU1RBVEVfRFZCVAkJKDB4MDAwNCkKKyNkZWZpbmUgUE9TRUlET05fU1RBVEVfVkJJCQkoMHgwMDA4KQorI2RlZmluZSBQT1NFSURPTl9TVEFURV9ESVNDT05ORUNUCSgweDAwODApCisKKyNkZWZpbmUgUE1fU1VTUEVORF9ERUxBWQkzCisKKyNkZWZpbmUgVjRMX1BBTF9WQklfTElORVMJMTgKKyNkZWZpbmUgVjRMX05UU0NfVkJJX0xJTkVTCTEyCisjZGVmaW5lIFY0TF9QQUxfVkJJX0ZSQU1FU0laRQkoVjRMX1BBTF9WQklfTElORVMgKiAxNDQwICogMikKKyNkZWZpbmUgVjRMX05UU0NfVkJJX0ZSQU1FU0laRQkoVjRMX05UU0NfVkJJX0xJTkVTICogMTQ0MCAqIDIpCisKKyNkZWZpbmUgVFVORVJfRlJFUV9NSU4JCSg0NTAwMDAwMCkKKyNkZWZpbmUgVFVORVJfRlJFUV9NQVgJCSg4NjIwMDAwMDApCisKK3N0cnVjdCB2YmlfZGF0YSB7CisJc3RydWN0IHZpZGVvX2RldmljZQkqdl9kZXY7CisJc3RydWN0IHZpZGVvX2RhdGEJKnZpZGVvOworCXN0cnVjdCBmcm9udF9mYWNlCSpmcm9udDsKKworCXVuc2lnbmVkIGludAkJY29waWVkOworCXVuc2lnbmVkIGludAkJdmJpX3NpemU7IC8qIHRoZSB3aG9sZSBzaXplIG9mIHR3byBmaWVsZHMgKi8KKwlpbnQgCQkJdXNlcnM7Cit9OworCisvKgorICogVGhpcyBpcyB0aGUgcnVubmluZyBjb250ZXh0IG9mIHRoZSB2aWRlbywgaXQgaXMgdXNlZnVsIGZvcgorICogcmVzdW1lKCkKKyAqLworc3RydWN0IHJ1bm5pbmdfY29udGV4dCB7CisJdTMyCQlmcmVxOwkJLyogVklESU9DX1NfRlJFUVVFTkNZICovCisJaW50CQlhdWRpb19pZHg7CS8qIFZJRElPQ19TX1RVTkVSICAgICovCisJdjRsMl9zdGRfaWQJdHZub3JtaWQ7CS8qIFZJRElPQ19TX1NURCAgICAgKi8KKwlpbnQJCXNpZ19pbmRleDsJLyogVklESU9DX1NfSU5QVVQgICovCisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBwaXg7CS8qIFZJRElPQ19TX0ZNVCAgICovCit9OworCitzdHJ1Y3QgdmlkZW9fZGF0YSB7CisJLyogdjRsMiB2aWRlbyBkZXZpY2UgKi8KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlCSp2X2RldjsKKworCS8qIHRoZSB3b3JraW5nIGNvbnRleHQgKi8KKwlzdHJ1Y3QgcnVubmluZ19jb250ZXh0CWNvbnRleHQ7CisKKwkvKiBmb3IgZGF0YSBjb3B5ICovCisJaW50CQlmaWVsZF9jb3VudDsKKworCWNoYXIJCSpkc3Q7CisJaW50CQlsaW5lc19jb3BpZWQ7CisJaW50CQlwcmV2X2xlZnQ7CisKKwlpbnQJCWxpbmVzX3Blcl9maWVsZDsKKwlpbnQJCWxpbmVzX3NpemU7CisKKwkvKiBmb3IgY29tbXVuaWNhdGlvbiAqLworCXU4CQkJZW5kcG9pbnRfYWRkcjsKKwlzdHJ1Y3QgdXJiIAkJKnVyYl9hcnJheVtTQlVGX05VTV07CisJc3RydWN0IHZiaV9kYXRhCQkqdmJpOworCXN0cnVjdCBwb3NlaWRvbiAJKnBkOworCXN0cnVjdCBmcm9udF9mYWNlCSpmcm9udDsKKworCWludAkJCWlzX3N0cmVhbWluZzsKKwlpbnQJCQl1c2VyczsKKworCS8qIGZvciBidWJibGUgaGFuZGxlciAqLworCXN0cnVjdCB3b3JrX3N0cnVjdAlidWJibGVfd29yazsKK307CisKK2VudW0gcGNtX3N0cmVhbV9zdGF0ZSB7CisJU1RSRUFNX09GRiwKKwlTVFJFQU1fT04sCisJU1RSRUFNX1NVU1BFTkQsCit9OworCisjZGVmaW5lIEFVRElPX0JVRlMgKDMpCisjZGVmaW5lIENBUFRVUkVfU1RSRUFNX0VOIDEKK3N0cnVjdCBwb3NlaWRvbl9hdWRpbyB7CisJc3RydWN0IHVyYgkJKnVyYl9hcnJheVtBVURJT19CVUZTXTsKKwl1bnNpZ25lZCBpbnQgCQljb3BpZWRfcG9zaXRpb247CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICAgKmNhcHR1cmVfcGNtX3N1YnN0cmVhbTsKKworCXVuc2lnbmVkIGludCAJCXJjdl9wb3NpdGlvbjsKKwlzdHJ1Y3QJc25kX2NhcmQJKmNhcmQ7CisJaW50IAkJCWNhcmRfY2xvc2U7CisKKwlpbnQgCQkJdXNlcnM7CisJaW50CQkJcG1fc3RhdGU7CisJZW51bSBwY21fc3RyZWFtX3N0YXRlIAljYXB0dXJlX3N0cmVhbTsKK307CisKK3N0cnVjdCByYWRpb19kYXRhIHsKKwlfX3UzMgkJZm1fZnJlcTsKKwlpbnQJCXVzZXJzOworCXVuc2lnbmVkIGludAlpc19yYWRpb19zdHJlYW1pbmc7CisJaW50CQlwcmVfZW1waGFzaXM7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZm1fZGV2OworfTsKKworI2RlZmluZSBEVkJfU0JVRl9OVU0JCTQKKyNkZWZpbmUgRFZCX1VSQl9CVUZfU0laRQkweDIwMDAKK3N0cnVjdCBwZF9kdmJfYWRhcHRlciB7CisJc3RydWN0IGR2Yl9hZGFwdGVyCWR2Yl9hZGFwOworCXN0cnVjdCBkdmJfZnJvbnRlbmQJZHZiX2ZlOworCXN0cnVjdCBkbXhkZXYJCWRteGRldjsKKwlzdHJ1Y3QgZHZiX2RlbXV4CWRlbXV4OworCisJYXRvbWljX3QJCXVzZXJzOworCWF0b21pY190CQlhY3RpdmVfZmVlZDsKKworCS8qIGRhdGEgdHJhbnNmZXIgKi8KKwlzMzIJCQlpc19zdHJlYW1pbmc7CisJc3RydWN0IHVyYgkJKnVyYl9hcnJheVtEVkJfU0JVRl9OVU1dOworCXN0cnVjdCBwb3NlaWRvbgkJKnBkX2RldmljZTsKKwl1OAkJCWVwX2FkZHI7CisJdTgJCQlyZXNlcnZlZFszXTsKKworCS8qIGRhdGEgZm9yIHBvd2VyIHJlc3VtZSovCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzIGZlX3BhcmFtOworCisJLyogZm9yIGNoYW5uZWwgc2Nhbm5pbmcgKi8KKwlpbnQJCXByZXZfZnJlcTsKKwlpbnQJCWJhbmR3aWR0aDsKKwl1bnNpZ25lZCBsb25nCWxhc3RfamlmZmllczsKK307CisKK3N0cnVjdCBmcm9udF9mYWNlIHsKKwkvKiB1c2UgdGhpcyBmaWVsZCB0byBkaXN0aW5ndWlzaCBWSURFTyBhbmQgVkJJICovCisJZW51bSB2NGwyX2J1Zl90eXBlCXR5cGU7CisKKwkvKiBmb3IgaG9zdCAqLworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZQlxOworCisJLyogdGhlIGJyaWRnZSBmb3IgaG9zdCBhbmQgZGV2aWNlICovCisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlcgkqY3Vycl9mcmFtZTsKKworCS8qIGZvciBkZXZpY2UgKi8KKwlzcGlubG9ja190CQlxdWV1ZV9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZlOworCXN0cnVjdCBwb3NlaWRvbgkJKnBkOworfTsKKworc3RydWN0IHBvc2VpZG9uIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWRldmljZV9saXN0OworCisJc3RydWN0IG11dGV4CQlsb2NrOworCXN0cnVjdCBrcmVmCQlrcmVmOworCisJLyogZm9yIFY0TDIgKi8KKwlzdHJ1Y3QgdjRsMl9kZXZpY2UJdjRsMl9kZXY7CisKKwkvKiBoYXJkd2FyZSBpbmZvICovCisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGVyZmFjZTsKKwlpbnQgCQkJY3VyX3RyYW5zZmVyX21vZGU7CisKKwlzdHJ1Y3QgdmlkZW9fZGF0YQl2aWRlb19kYXRhOwkvKiB2aWRlbyAqLworCXN0cnVjdCB2YmlfZGF0YQkJdmJpX2RhdGE7CS8qIHZiaQkgKi8KKwlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8JYXVkaW87CQkvKiBhdWRpbyAoYWxzYSkgKi8KKwlzdHJ1Y3QgcmFkaW9fZGF0YQlyYWRpb19kYXRhOwkvKiBGTQkgKi8KKwlzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIJZHZiX2RhdGE7CS8qIERWQgkgKi8KKworCXUzMgkJCXN0YXRlOworCXN0cnVjdCBmaWxlCQkqZmlsZV9mb3Jfc3RyZWFtOyAvKiB0aGUgYWN0aXZlIHN0cmVhbSovCisKKyNpZmRlZiBDT05GSUdfUE0KKwlpbnQgKCpwbV9zdXNwZW5kKShzdHJ1Y3QgcG9zZWlkb24gKik7CisJaW50ICgqcG1fcmVzdW1lKShzdHJ1Y3QgcG9zZWlkb24gKik7CisJcG1fbWVzc2FnZV90CQltc2c7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcG1fd29yazsKKwl1OAkJCXBvcnRudW07CisjZW5kaWYKK307CisKK3N0cnVjdCBwb3NlaWRvbl9mb3JtYXQgeworCWNoYXIgCSpuYW1lOworCWludAlmb3VyY2M7CQkgLyogdmlkZW80bGludXggMgkgICovCisJaW50CWRlcHRoOwkJIC8qIGJpdC9waXhlbAkJICAqLworCWludAlmbGFnczsKK307CisKK3N0cnVjdCBwb3NlaWRvbl90dm5vcm0geworCXY0bDJfc3RkX2lkCXY0bDJfaWQ7CisJY2hhcgkJbmFtZVsxMl07CisJdTMyCQl0bGdfdHZub3JtOworfTsKKworLyogdmlkZW8gKi8KK2ludCBwZF92aWRlb19pbml0KHN0cnVjdCBwb3NlaWRvbiAqKTsKK3ZvaWQgcGRfdmlkZW9fZXhpdChzdHJ1Y3QgcG9zZWlkb24gKik7CitpbnQgc3RvcF9hbGxfdmlkZW9fc3RyZWFtKHN0cnVjdCBwb3NlaWRvbiAqKTsKKworLyogYWxzYSBhdWRpbyAqLworaW50IHBvc2VpZG9uX2F1ZGlvX2luaXQoc3RydWN0IHBvc2VpZG9uICopOworaW50IHBvc2VpZG9uX2F1ZGlvX2ZyZWUoc3RydWN0IHBvc2VpZG9uICopOworI2lmZGVmIENPTkZJR19QTQoraW50IHBtX2Fsc2Ffc3VzcGVuZChzdHJ1Y3QgcG9zZWlkb24gKik7CitpbnQgcG1fYWxzYV9yZXN1bWUoc3RydWN0IHBvc2VpZG9uICopOworI2VuZGlmCisKKy8qIGR2YiAqLworaW50IHBkX2R2Yl91c2JfZGV2aWNlX2luaXQoc3RydWN0IHBvc2VpZG9uICopOwordm9pZCBwZF9kdmJfdXNiX2RldmljZV9leGl0KHN0cnVjdCBwb3NlaWRvbiAqKTsKK3ZvaWQgcGRfZHZiX3VzYl9kZXZpY2VfY2xlYW51cChzdHJ1Y3QgcG9zZWlkb24gKik7CitpbnQgcGRfZHZiX2dldF9hZGFwdGVyX251bShzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKik7Cit2b2lkIGR2Yl9zdG9wX3N0cmVhbWluZyhzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKik7CisKKy8qIEZNICovCitpbnQgcG9zZWlkb25fZm1faW5pdChzdHJ1Y3QgcG9zZWlkb24gKik7CitpbnQgcG9zZWlkb25fZm1fZXhpdChzdHJ1Y3QgcG9zZWlkb24gKik7CitzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2X2luaXQoc3RydWN0IHBvc2VpZG9uICosIHN0cnVjdCB2aWRlb19kZXZpY2UgKik7CisKKy8qIHZlbmRvciBjb21tYW5kIG9wcyAqLworaW50IHNlbmRfc2V0X3JlcShzdHJ1Y3QgcG9zZWlkb24qLCB1OCwgczMyLCBzMzIqKTsKK2ludCBzZW5kX2dldF9yZXEoc3RydWN0IHBvc2VpZG9uKiwgdTgsIHMzMiwgdm9pZCosIHMzMiosIHMzMik7CitzMzIgc2V0X3R1bmVyX21vZGUoc3RydWN0IHBvc2VpZG9uKiwgdW5zaWduZWQgY2hhcik7CisKKy8qIGJ1bGsgdXJiIGFsbG9jL2ZyZWUgKi8KK2ludCBhbGxvY19idWxrX3VyYnNfZ2VuZXJpYyhzdHJ1Y3QgdXJiICoqdXJiX2FycmF5LCBpbnQgbnVtLAorCQkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4IGVwX2FkZHIsCisJCQlpbnQgYnVmX3NpemUsIGdmcF90IGdmcF9mbGFncywKKwkJCXVzYl9jb21wbGV0ZV90IGNvbXBsZXRlX2ZuLCB2b2lkICpjb250ZXh0KTsKK3ZvaWQgZnJlZV9hbGxfdXJiX2dlbmVyaWMoc3RydWN0IHVyYiAqKnVyYl9hcnJheSwgaW50IG51bSk7CisKKy8qIG1pc2MgKi8KK3ZvaWQgcG9zZWlkb25fZGVsZXRlKHN0cnVjdCBrcmVmICprcmVmKTsKK3ZvaWQgZGVzdHJveV92aWRlb19kZXZpY2Uoc3RydWN0IHZpZGVvX2RldmljZSAqKnZfZGV2KTsKK2V4dGVybiBpbnQgZGVidWdfbW9kZTsKK3ZvaWQgc2V0X2RlYnVnX21vZGUoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkLCBpbnQgZGVidWdfbW9kZSk7CisKKyNpZmRlZiBDT05GSUdfUE0KKyNkZWZpbmUgaW5faGliZXJuYXRpb24ocGQpIChwZC0+bXNnLmV2ZW50ID09IFBNX0VWRU5UX0ZSRUVaRSkKKyNlbHNlCisjZGVmaW5lIGluX2hpYmVybmF0aW9uKHBkKSAoMCkKKyNlbmRpZgorI2RlZmluZSBnZXRfcG1fY291bnQocCkgKGF0b21pY19yZWFkKCYocCktPmludGVyZmFjZS0+cG1fdXNhZ2VfY250KSkKKworI2RlZmluZSBsb2coYSwgLi4uKSBwcmludGsoS0VSTl9ERUJVRyAiXHRbICVzIDogJS4zZCBdICJhIlxuIiwgXAorCQkJCV9fZnVuY19fLCBfX0xJTkVfXywgICMjIF9fVkFfQVJHU19fKQorCisvKiBmb3IgcG93ZXIgbWFuYWdlbWVudCAqLworI2RlZmluZSBsb2dwbShwZCkgZG8ge1wKKwkJCWlmIChkZWJ1Z19tb2RlICYgMHgxMClcCisJCQkJbG9nKCk7XAorCQl9IHdoaWxlICgwKQorCisjZGVmaW5lIGxvZ3MoZikgZG8geyBcCisJCQlpZiAoKGRlYnVnX21vZGUgJiAweDQpICYmIFwKKwkJCQkoZiktPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgXAorCQkJCQlsb2coInR5cGUgOiBWQkkiKTtcCisJCQkJCQkJCVwKKwkJCWlmICgoZGVidWdfbW9kZSAmIDB4OCkgJiYgXAorCQkJCShmKS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIFwKKwkJCQkJbG9nKCJ0eXBlIDogVklERU8iKTtcCisJCX0gd2hpbGUgKDApCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1kdmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTMzYWVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLWR2Yi5jCkBAIC0wLDAgKzEsNTkzIEBACisjaW5jbHVkZSAicGQtY29tbW9uLmgiCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvZHZiL2RteC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJ2ZW5kb3JjbWRzLmgiCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKK3N0YXRpYyB2b2lkIGR2Yl91cmJfY2xlYW51cChzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2Yik7CisKK3N0YXRpYyBpbnQgZHZiX2JhbmR3aWR0aFtdWzJdID0geworCXsgVExHX0JXXzgsIEJBTkRXSURUSF84X01IWiB9LAorCXsgVExHX0JXXzcsIEJBTkRXSURUSF83X01IWiB9LAorCXsgVExHX0JXXzYsIEJBTkRXSURUSF82X01IWiB9Cit9Oworc3RhdGljIGludCBkdmJfYmFuZHdpZHRoX2xlbmd0aCA9IEFSUkFZX1NJWkUoZHZiX2JhbmR3aWR0aCk7CisKK3N0YXRpYyBzMzIgZHZiX3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2Yik7CitzdGF0aWMgaW50IHBvc2VpZG9uX2NoZWNrX21vZGVfZHZidChzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCXMzMiByZXQgPSAwLCBjbWRfc3RhdHVzID0gMDsKKworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJc2NoZWR1bGVfdGltZW91dChIWi80KTsKKworCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKHBkLT51ZGV2LCAwLCBCVUxLX0FMVEVSTkFURV9JRkFDRSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc2V0X3R1bmVyX21vZGUocGQsIFRMR19NT0RFX0NBUFNfRFZCX1QpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBzaWduYWwgc291cmNlICovCisJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBTR05MX1NSQ19TRUwsIFRMR19TSUdfU1JDX0FOVEVOTkEsICZjbWRfc3RhdHVzKTsKKwlpZiAocmV0fGNtZF9zdGF0dXMpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworLyogYWNxdWlyZSA6CisgKiAJMSA9PSBvcGVuCisgKiAJMCA9PSByZWxlYXNlCisgKi8KK3N0YXRpYyBpbnQgcG9zZWlkb25fdHNfYnVzX2N0cmwoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBhY3F1aXJlKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghcGQpCisJCXJldHVybiAtRU5PREVWOworCisJcGRfZHZiID0gY29udGFpbmVyX29mKGZlLCBzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIsIGR2Yl9mZSk7CisJaWYgKGFjcXVpcmUpIHsKKwkJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCQlpZiAocGQtPnN0YXRlICYgUE9TRUlET05fU1RBVEVfRElTQ09OTkVDVCkgeworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gb3Blbl9vdXQ7CisJCX0KKworCQlpZiAocGQtPnN0YXRlICYmICEocGQtPnN0YXRlICYgUE9TRUlET05fU1RBVEVfRFZCVCkpIHsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gb3Blbl9vdXQ7CisJCX0KKworCQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UocGQtPmludGVyZmFjZSk7CisJCWlmICgwID09IHBkLT5zdGF0ZSkgeworCQkJcmV0ID0gcG9zZWlkb25fY2hlY2tfbW9kZV9kdmJ0KHBkKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHBkLT5pbnRlcmZhY2UpOworCQkJCWdvdG8gb3Blbl9vdXQ7CisJCQl9CisJCQlwZC0+c3RhdGUgfD0gUE9TRUlET05fU1RBVEVfRFZCVDsKKwkJCXBkX2R2Yi0+YmFuZHdpZHRoID0gMDsKKwkJCXBkX2R2Yi0+cHJldl9mcmVxID0gMDsKKwkJfQorCQlhdG9taWNfaW5jKCZwZF9kdmItPnVzZXJzKTsKKwkJa3JlZl9nZXQoJnBkLT5rcmVmKTsKK29wZW5fb3V0OgorCQltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKwl9IGVsc2UgeworCQlkdmJfc3RvcF9zdHJlYW1pbmcocGRfZHZiKTsKKworCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcGRfZHZiLT51c2VycykpIHsKKwkJCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwkJCXBkLT5zdGF0ZSAmPSB+UE9TRUlET05fU1RBVEVfRFZCVDsKKwkJCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCQl9CisJCWtyZWZfcHV0KCZwZC0+a3JlZiwgcG9zZWlkb25fZGVsZXRlKTsKKwkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHBkLT5pbnRlcmZhY2UpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwb3NlaWRvbl9mZV9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworI2lmZGVmIENPTkZJR19QTQorCXBkLT5wbV9zdXNwZW5kID0gTlVMTDsKKwlwZC0+cG1fcmVzdW1lICA9IE5VTEw7CisjZW5kaWYKK30KKworc3RhdGljIHMzMiBwb3NlaWRvbl9mZV9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHJldHVybiB0cnVlIGlmIHdlIGNhbiBzYXRpc2Z5IHRoZSBjb25kaXRpb25zLCBlbHNlIHJldHVybiBmYWxzZS4KKyAqLworc3RhdGljIGJvb2wgY2hlY2tfc2Nhbl9vayhfX3UzMiBmcmVxLCBpbnQgYmFuZHdpZHRoLAorCQkJc3RydWN0IHBkX2R2Yl9hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChiYW5kd2lkdGggPCAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoYWRhcHRlci0+cHJldl9mcmVxID09IGZyZXEKKwkJJiYgYWRhcHRlci0+YmFuZHdpZHRoID09IGJhbmR3aWR0aCkgeworCQlsb25nIG5sID0gamlmZmllcyAtIGFkYXB0ZXItPmxhc3RfamlmZmllczsKKwkJdW5zaWduZWQgaW50IG1zZWMgOworCisJCW1zZWMgPSBqaWZmaWVzX3RvX21zZWNzKGFicyhubCkpOworCQlyZXR1cm4gbXNlYyA+IDE1MDAwID8gdHJ1ZSA6IGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIENoZWNrIGlmIHRoZSBmaXJtd2FyZSBkZWxheXMgdG9vIGxvbmcgZm9yIGFuIGludmFsaWQgZnJlcXVlbmN5LgorICovCitzdGF0aWMgaW50IGZ3X2RlbGF5X292ZXJmbG93KHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlsb25nIG5sID0gamlmZmllcyAtIGFkYXB0ZXItPmxhc3RfamlmZmllczsKKwl1bnNpZ25lZCBpbnQgbXNlYyA7CisKKwltc2VjID0gamlmZmllc190b19tc2VjcyhhYnMobmwpKTsKKwlyZXR1cm4gbXNlYyA+IDgwMCA/IHRydWUgOiBmYWxzZTsKK30KKworc3RhdGljIGludCBwb3NlaWRvbl9zZXRfZmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKK3sKKwlzMzIgcmV0ID0gMCwgY21kX3N0YXR1cyA9IDA7CisJczMyIGksIGJhbmR3aWR0aCA9IC0xOworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YiA9ICZwZC0+ZHZiX2RhdGE7CisKKwlpZiAoaW5faGliZXJuYXRpb24ocGQpKQorCQlyZXR1cm4gLUVCVVNZOworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCWZvciAoaSA9IDA7IGkgPCBkdmJfYmFuZHdpZHRoX2xlbmd0aDsgaSsrKQorCQlpZiAoZmVwLT51Lm9mZG0uYmFuZHdpZHRoID09IGR2Yl9iYW5kd2lkdGhbaV1bMV0pCisJCQliYW5kd2lkdGggPSBkdmJfYmFuZHdpZHRoW2ldWzBdOworCisJaWYgKGNoZWNrX3NjYW5fb2soZmVwLT5mcmVxdWVuY3ksIGJhbmR3aWR0aCwgcGRfZHZiKSkgeworCQlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFRVTkVfRlJFUV9TRUxFQ1QsCisJCQkJCWZlcC0+ZnJlcXVlbmN5IC8gMTAwMCwgJmNtZF9zdGF0dXMpOworCQlpZiAocmV0IHwgY21kX3N0YXR1cykgeworCQkJbG9nKCJlcnJvciBsaW5lIik7CisJCQlnb3RvIGZyb250X291dDsKKwkJfQorCisJCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgRFZCVF9CQU5EV19TRUwsCisJCQkJCQliYW5kd2lkdGgsICZjbWRfc3RhdHVzKTsKKwkJaWYgKHJldCB8IGNtZF9zdGF0dXMpIHsKKwkJCWxvZygiZXJyb3IgbGluZSIpOworCQkJZ290byBmcm9udF9vdXQ7CisJCX0KKworCQlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFRBS0VfUkVRVUVTVCwgMCwgJmNtZF9zdGF0dXMpOworCQlpZiAocmV0IHwgY21kX3N0YXR1cykgeworCQkJbG9nKCJlcnJvciBsaW5lIik7CisJCQlnb3RvIGZyb250X291dDsKKwkJfQorCisJCS8qIHNhdmUgdGhlIGNvbnRleHQgZm9yIGZ1dHVyZSAqLworCQltZW1jcHkoJnBkX2R2Yi0+ZmVfcGFyYW0sIGZlcCwgc2l6ZW9mKCpmZXApKTsKKwkJcGRfZHZiLT5iYW5kd2lkdGggPSBiYW5kd2lkdGg7CisJCXBkX2R2Yi0+cHJldl9mcmVxID0gZmVwLT5mcmVxdWVuY3k7CisJCXBkX2R2Yi0+bGFzdF9qaWZmaWVzID0gamlmZmllczsKKwl9Citmcm9udF9vdXQ6CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBwbV9kdmJfc3VzcGVuZChzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gJnBkLT5kdmJfZGF0YTsKKwlkdmJfc3RvcF9zdHJlYW1pbmcocGRfZHZiKTsKKwlkdmJfdXJiX2NsZWFudXAocGRfZHZiKTsKKwltc2xlZXAoNTAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbV9kdmJfcmVzdW1lKHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSAmcGQtPmR2Yl9kYXRhOworCisJcG9zZWlkb25fY2hlY2tfbW9kZV9kdmJ0KHBkKTsKKwltc2xlZXAoMzAwKTsKKwlwb3NlaWRvbl9zZXRfZmUoJnBkX2R2Yi0+ZHZiX2ZlLCAmcGRfZHZiLT5mZV9wYXJhbSk7CisKKwlkdmJfc3RhcnRfc3RyZWFtaW5nKHBkX2R2Yik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHMzMiBwb3NlaWRvbl9mZV9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YiA9ICZwZC0+ZHZiX2RhdGE7CisKKyNpZmRlZiBDT05GSUdfUE0KKwlwZC0+cG1fc3VzcGVuZCA9IHBtX2R2Yl9zdXNwZW5kOworCXBkLT5wbV9yZXN1bWUgID0gcG1fZHZiX3Jlc3VtZTsKKyNlbmRpZgorCW1lbXNldCgmcGRfZHZiLT5mZV9wYXJhbSwgMCwKKwkJCXNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb3NlaWRvbl9nZXRfZmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSAmcGQtPmR2Yl9kYXRhOworCisJbWVtY3B5KGZlcCwgJnBkX2R2Yi0+ZmVfcGFyYW0sIHNpemVvZigqZmVwKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9zZWlkb25fZmVfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzICp0dW5lKQoreworCXR1bmUtPm1pbl9kZWxheV9tcyA9IDEwMDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9zZWlkb25fcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0KQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzMzIgcmV0ID0gLTEsIGNtZF9zdGF0dXM7CisJc3RydWN0IHR1bmVyX2R0dl9zaWdfc3RhdF9zIHN0YXR1cyA9IHt9OworCisJaWYgKGluX2hpYmVybmF0aW9uKHBkKSkKKwkJcmV0dXJuIC1FQlVTWTsKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisKKwlyZXQgPSBzZW5kX2dldF9yZXEocGQsIFRVTkVSX1NUQVRVUywgVExHX01PREVfRFZCX1QsCisJCQkJJnN0YXR1cywgJmNtZF9zdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKKwlpZiAocmV0IHwgY21kX3N0YXR1cykgeworCQlsb2coImdldCB0dW5lciBzdGF0dXMgZXJyb3IiKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGRlYnVnX21vZGUpCisJCWxvZygiUCA6ICVkLCBMICVkLCBMQiA6JWQiLCBzdGF0dXMuc2lnX3ByZXNlbnQsCisJCQlzdGF0dXMuc2lnX2xvY2tlZCwgc3RhdHVzLnNpZ19sb2NrX2J1c3kpOworCisJaWYgKHN0YXR1cy5zaWdfbG9ja19idXN5KSB7CisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAoc3RhdHVzLnNpZ19wcmVzZW50IHx8IHN0YXR1cy5zaWdfbG9ja2VkKSB7CisJCSpzdGF0IHw9IEZFX0hBU19MT0NLIHwgRkVfSEFTX1NJR05BTCB8IEZFX0hBU19DQVJSSUVSCisJCQkJfCBGRV9IQVNfU1lOQyB8IEZFX0hBU19WSVRFUkJJOworCX0gZWxzZSB7CisJCWlmIChmd19kZWxheV9vdmVyZmxvdygmcGQtPmR2Yl9kYXRhKSkKKwkJCSpzdGF0IHw9IEZFX1RJTUVET1VUOworCX0KK291dDoKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBvc2VpZG9uX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHR1bmVyX2Jlcl9yYXRlX3MgdGxnX2JlciA9IHt9OworCXMzMiByZXQgPSAtMSwgY21kX3N0YXR1czsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlyZXQgPSBzZW5kX2dldF9yZXEocGQsIFRVTkVSX0JFUl9SQVRFLCAwLAorCQkJCSZ0bGdfYmVyLCAmY21kX3N0YXR1cywgc2l6ZW9mKHRsZ19iZXIpKTsKKwlpZiAocmV0IHwgY21kX3N0YXR1cykKKwkJZ290byBvdXQ7CisJKmJlciA9IHRsZ19iZXIuYmVyX3JhdGU7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHMzMiBwb3NlaWRvbl9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzdHJlbmd0aCkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHR1bmVyX2R0dl9zaWdfc3RhdF9zIHN0YXR1cyA9IHt9OworCXMzMiByZXQgPSAwLCBjbWRfc3RhdHVzOworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCXJldCA9IHNlbmRfZ2V0X3JlcShwZCwgVFVORVJfU1RBVFVTLCBUTEdfTU9ERV9EVkJfVCwKKwkJCQkmc3RhdHVzLCAmY21kX3N0YXR1cywgc2l6ZW9mKHN0YXR1cykpOworCWlmIChyZXQgfCBjbWRfc3RhdHVzKQorCQlnb3RvIG91dDsKKwlpZiAoKHN0YXR1cy5zaWdfcHJlc2VudCB8fCBzdGF0dXMuc2lnX2xvY2tlZCkgJiYgIXN0YXR1cy5zaWdfc3RyZW5ndGgpCisJCSpzdHJlbmd0aCA9IDB4RkZGRjsKKwllbHNlCisJCSpzdHJlbmd0aCA9IHN0YXR1cy5zaWdfc3RyZW5ndGg7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwb3NlaWRvbl9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9zZWlkb25fcmVhZF91bmNfYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKnVuYykKK3sKKwkqdW5jID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIHBvc2VpZG9uX2Zyb250ZW5kX29wcyA9IHsKKwkuaW5mbyA9IHsKKwkJLm5hbWUJCT0gIlBvc2VpZG9uIERWQi1UIiwKKwkJLnR5cGUJCT0gRkVfT0ZETSwKKwkJLmZyZXF1ZW5jeV9taW4JPSAxNzQwMDAwMDAsCisJCS5mcmVxdWVuY3lfbWF4ICA9IDg2MjAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwc2l6ZQkgID0gNjI1MDAsLyogRklYTUUgKi8KKwkJLmNhcHMgPSBGRV9DQU5fSU5WRVJTSU9OX0FVVE8gfAorCQkJRkVfQ0FOX0ZFQ18xXzIgfCBGRV9DQU5fRkVDXzJfMyB8IEZFX0NBTl9GRUNfM180IHwKKwkJCUZFX0NBTl9GRUNfNV82IHwgRkVfQ0FOX0ZFQ183XzggfCBGRV9DQU5fRkVDX0FVVE8gfAorCQkJRkVfQ0FOX1FQU0sgfCBGRV9DQU5fUUFNXzE2IHwgRkVfQ0FOX1FBTV82NCB8CisJCQlGRV9DQU5fUUFNX0FVVE8gfCBGRV9DQU5fVFJBTlNNSVNTSU9OX01PREVfQVVUTyB8CisJCQlGRV9DQU5fR1VBUkRfSU5URVJWQUxfQVVUTyB8CisJCQlGRV9DQU5fUkVDT1ZFUiB8CisJCQlGRV9DQU5fSElFUkFSQ0hZX0FVVE8sCisJfSwKKworCS5yZWxlYXNlID0gcG9zZWlkb25fZmVfcmVsZWFzZSwKKworCS5pbml0ID0gcG9zZWlkb25fZmVfaW5pdCwKKwkuc2xlZXAgPSBwb3NlaWRvbl9mZV9zbGVlcCwKKworCS5zZXRfZnJvbnRlbmQgPSBwb3NlaWRvbl9zZXRfZmUsCisJLmdldF9mcm9udGVuZCA9IHBvc2VpZG9uX2dldF9mZSwKKwkuZ2V0X3R1bmVfc2V0dGluZ3MgPSBwb3NlaWRvbl9mZV9nZXRfdHVuZV9zZXR0aW5ncywKKworCS5yZWFkX3N0YXR1cwk9IHBvc2VpZG9uX3JlYWRfc3RhdHVzLAorCS5yZWFkX2Jlcgk9IHBvc2VpZG9uX3JlYWRfYmVyLAorCS5yZWFkX3NpZ25hbF9zdHJlbmd0aCA9IHBvc2VpZG9uX3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAorCS5yZWFkX3Nucgk9IHBvc2VpZG9uX3JlYWRfc25yLAorCS5yZWFkX3VjYmxvY2tzCT0gcG9zZWlkb25fcmVhZF91bmNfYmxvY2tzLAorCisJLnRzX2J1c19jdHJsID0gcG9zZWlkb25fdHNfYnVzX2N0cmwsCit9OworCitzdGF0aWMgdm9pZCBkdmJfdXJiX2lycShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSB1cmItPmNvbnRleHQ7CisJaW50IGxlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwlzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eCA9ICZwZF9kdmItPmRlbXV4OworCXMzMiByZXQ7CisKKwlpZiAoIXBkX2R2Yi0+aXNfc3RyZWFtaW5nIHx8IHVyYi0+c3RhdHVzKSB7CisJCWlmICh1cmItPnN0YXR1cyA9PSAtRVBST1RPKQorCQkJZ290byByZXNlbmQ7CisJCXJldHVybjsKKwl9CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09IGxlbikKKwkJZHZiX2RteF9zd2ZpbHRlcihkZW11eCwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIGxlbik7CisJZWxzZSBpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09IGxlbiAtIDQpIHsKKwkJaW50IG9mZnNldDsKKwkJdTggKmJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJCS8qCisJCSAqIFRoZSBwYWNrZXQgc2l6ZSBpcyA1MTIsCisJCSAqIGxhc3QgcGFja2V0IGNvbnRhaW5zIDQ1NiBieXRlcyB0c3AgZGF0YQorCQkgKi8KKwkJZm9yIChvZmZzZXQgPSA0NTY7IG9mZnNldCA8IGxlbjsgb2Zmc2V0ICs9IDUxMikgeworCQkJaWYgKCFzdHJuY21wKGJ1ZiArIG9mZnNldCwgIkRWSFMiLCA0KSkgeworCQkJCWR2Yl9kbXhfc3dmaWx0ZXIoZGVtdXgsIGJ1Ziwgb2Zmc2V0KTsKKwkJCQlpZiAobGVuID4gb2Zmc2V0ICsgNTIgKyA0KSB7CisJCQkJCS8qMTYgYnl0ZXMgdHJhaWxlciArIDM2IGJ5dGVzIHBhZGRpbmcgKi8KKwkJCQkJYnVmICs9IG9mZnNldCArIDUyOworCQkJCQlsZW4gLT0gb2Zmc2V0ICsgNTIgKyA0OworCQkJCQlkdmJfZG14X3N3ZmlsdGVyKGRlbXV4LCBidWYsIGxlbik7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCityZXNlbmQ6CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0KQorCQlsb2coIiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQ6IGVycm9yICVkIiwgcmV0KTsKK30KKworc3RhdGljIGludCBkdmJfdXJiX2luaXQoc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIpCit7CisJaWYgKHBkX2R2Yi0+dXJiX2FycmF5WzBdKQorCQlyZXR1cm4gMDsKKworCWFsbG9jX2J1bGtfdXJic19nZW5lcmljKHBkX2R2Yi0+dXJiX2FycmF5LCBEVkJfU0JVRl9OVU0sCisJCQlwZF9kdmItPnBkX2RldmljZS0+dWRldiwgcGRfZHZiLT5lcF9hZGRyLAorCQkJRFZCX1VSQl9CVUZfU0laRSwgR0ZQX0tFUk5FTCwKKwkJCWR2Yl91cmJfaXJxLCBwZF9kdmIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkdmJfdXJiX2NsZWFudXAoc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIpCit7CisJZnJlZV9hbGxfdXJiX2dlbmVyaWMocGRfZHZiLT51cmJfYXJyYXksIERWQl9TQlVGX05VTSk7Cit9CisKK3N0YXRpYyBzMzIgZHZiX3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YikKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gcGRfZHZiLT5wZF9kZXZpY2U7CisJaW50IHJldCA9IDA7CisKKwlpZiAocGQtPnN0YXRlICYgUE9TRUlET05fU1RBVEVfRElTQ09OTkVDVCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJaWYgKCFwZF9kdmItPmlzX3N0cmVhbWluZykgeworCQlzMzIgaSwgY21kX3N0YXR1cyA9IDA7CisJCS8qCisJCSAqIE9uY2UgdXBvbiBhIHRpbWUsIHRoZXJlIHdhcyBhIGRpZmZpY3VsdCBidWcgbHlpbmcgaGVyZS4KKwkJICogcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBUQUtFX1JFUVVFU1QsIDAsICZjbWRfc3RhdHVzKTsKKwkJICovCisKKwkJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBQTEFZX1NFUlZJQ0UsIDEsICZjbWRfc3RhdHVzKTsKKwkJaWYgKHJldCB8IGNtZF9zdGF0dXMpCisJCQlnb3RvIG91dDsKKworCQlyZXQgPSBkdmJfdXJiX2luaXQocGRfZHZiKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKworCQlwZF9kdmItPmlzX3N0cmVhbWluZyA9IDE7CisJCWZvciAoaSA9IDA7IGkgPCBEVkJfU0JVRl9OVU07IGkrKykgeworCQkJcmV0ID0gdXNiX3N1Ym1pdF91cmIocGRfZHZiLT51cmJfYXJyYXlbaV0sCisJCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJCQlpZiAocmV0KSB7CisJCQkJbG9nKCIgc3VibWl0IHVyYiBlcnJvciAlZCIsIHJldCk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBkdmJfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IHBkX2R2Yi0+cGRfZGV2aWNlOworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCWlmIChwZF9kdmItPmlzX3N0cmVhbWluZykgeworCQlzMzIgaSwgcmV0LCBjbWRfc3RhdHVzID0gMDsKKworCQlwZF9kdmItPmlzX3N0cmVhbWluZyA9IDA7CisKKwkJZm9yIChpID0gMDsgaSA8IERWQl9TQlVGX05VTTsgaSsrKQorCQkJaWYgKHBkX2R2Yi0+dXJiX2FycmF5W2ldKQorCQkJCXVzYl9raWxsX3VyYihwZF9kdmItPnVyYl9hcnJheVtpXSk7CisKKwkJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBQTEFZX1NFUlZJQ0UsIFRMR19UVU5FX1BMQVlfU1ZDX1NUT1AsCisJCQkJCSZjbWRfc3RhdHVzKTsKKwkJaWYgKHJldCB8IGNtZF9zdGF0dXMpCisJCQlsb2coImVycm9yIik7CisJfQorCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworfQorCitzdGF0aWMgaW50IHBkX3N0YXJ0X2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmZWVkKQoreworCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gZmVlZC0+ZGVtdXgtPnByaXY7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXBkX2R2YikKKwkJcmV0dXJuIC0xOworCWlmIChhdG9taWNfaW5jX3JldHVybigmcGRfZHZiLT5hY3RpdmVfZmVlZCkgPT0gMSkKKwkJcmV0ID0gZHZiX3N0YXJ0X3N0cmVhbWluZyhwZF9kdmIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGRfc3RvcF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZmVlZCkKK3sKKwlzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YiA9IGZlZWQtPmRlbXV4LT5wcml2OworCisJaWYgKCFwZF9kdmIpCisJCXJldHVybiAtMTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcGRfZHZiLT5hY3RpdmVfZmVlZCkpCisJCWR2Yl9zdG9wX3N0cmVhbWluZyhwZF9kdmIpOworCXJldHVybiAwOworfQorCitEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKK2ludCBwZF9kdmJfdXNiX2RldmljZV9pbml0KHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSAmcGQtPmR2Yl9kYXRhOworCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRlbXV4OworCWludCByZXQgPSAwOworCisJcGRfZHZiLT5lcF9hZGRyID0gMHg4MjsKKwlhdG9taWNfc2V0KCZwZF9kdmItPnVzZXJzLCAwKTsKKwlhdG9taWNfc2V0KCZwZF9kdmItPmFjdGl2ZV9mZWVkLCAwKTsKKwlwZF9kdmItPnBkX2RldmljZSA9IHBkOworCisJcmV0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJnBkX2R2Yi0+ZHZiX2FkYXAsCisJCQkJIlBvc2VpZG9uIGR2YnQgYWRhcHRlciIsCisJCQkJVEhJU19NT0RVTEUsCisJCQkJTlVMTCAvKiBmb3IgaGliZXJuYXRpb24gY29ycmVjdGx5Ki8sCisJCQkJYWRhcHRlcl9ucik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3IxOworCisJLyogcmVnaXN0ZXIgZnJvbnRlbmQgKi8KKwlwZF9kdmItPmR2Yl9mZS5kZW1vZHVsYXRvcl9wcml2ID0gcGQ7CisJbWVtY3B5KCZwZF9kdmItPmR2Yl9mZS5vcHMsICZwb3NlaWRvbl9mcm9udGVuZF9vcHMsCisJCQlzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwlyZXQgPSBkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoJnBkX2R2Yi0+ZHZiX2FkYXAsICZwZF9kdmItPmR2Yl9mZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3IyOworCisJLyogcmVnaXN0ZXIgZGVtdXggZGV2aWNlICovCisJZHZiZGVtdXggPSAmcGRfZHZiLT5kZW11eDsKKwlkdmJkZW11eC0+ZG14LmNhcGFiaWxpdGllcyA9IERNWF9UU19GSUxURVJJTkcgfCBETVhfU0VDVElPTl9GSUxURVJJTkc7CisJZHZiZGVtdXgtPnByaXYgPSBwZF9kdmI7CisJZHZiZGVtdXgtPmZlZWRudW0gPSBkdmJkZW11eC0+ZmlsdGVybnVtID0gNjQ7CisJZHZiZGVtdXgtPnN0YXJ0X2ZlZWQgPSBwZF9zdGFydF9mZWVkOworCWR2YmRlbXV4LT5zdG9wX2ZlZWQgPSBwZF9zdG9wX2ZlZWQ7CisJZHZiZGVtdXgtPndyaXRlX3RvX2RlY29kZXIgPSBOVUxMOworCisJcmV0ID0gZHZiX2RteF9pbml0KGR2YmRlbXV4KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjM7CisKKwlwZF9kdmItPmRteGRldi5maWx0ZXJudW0gPSBwZF9kdmItPmRlbXV4LmZpbHRlcm51bTsKKwlwZF9kdmItPmRteGRldi5kZW11eCA9ICZwZF9kdmItPmRlbXV4LmRteDsKKwlwZF9kdmItPmRteGRldi5jYXBhYmlsaXRpZXMgPSAwOworCisJcmV0ID0gZHZiX2RteGRldl9pbml0KCZwZF9kdmItPmRteGRldiwgJnBkX2R2Yi0+ZHZiX2FkYXApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yMzsKKwlyZXR1cm4gMDsKKworZXJyb3IzOgorCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKCZwZF9kdmItPmR2Yl9mZSk7CitlcnJvcjI6CisJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmcGRfZHZiLT5kdmJfYWRhcCk7CitlcnJvcjE6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBwZF9kdmJfdXNiX2RldmljZV9leGl0KHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSAmcGQtPmR2Yl9kYXRhOworCisJd2hpbGUgKGF0b21pY19yZWFkKCZwZF9kdmItPnVzZXJzKSAhPSAwCisJCXx8IGF0b21pY19yZWFkKCZwZF9kdmItPmFjdGl2ZV9mZWVkKSAhPSAwKSB7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQoSFopOworCX0KKwlkdmJfZG14ZGV2X3JlbGVhc2UoJnBkX2R2Yi0+ZG14ZGV2KTsKKwlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZCgmcGRfZHZiLT5kdmJfZmUpOworCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJnBkX2R2Yi0+ZHZiX2FkYXApOworCXBkX2R2Yl91c2JfZGV2aWNlX2NsZWFudXAocGQpOworfQorCit2b2lkIHBkX2R2Yl91c2JfZGV2aWNlX2NsZWFudXAoc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YiA9ICZwZC0+ZHZiX2RhdGE7CisKKwlkdmJfdXJiX2NsZWFudXAocGRfZHZiKTsKK30KKworaW50IHBkX2R2Yl9nZXRfYWRhcHRlcl9udW0oc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIpCit7CisJcmV0dXJuIHBkX2R2Yi0+ZHZiX2FkYXAubnVtOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLW1haW4uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNmMGViZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1tYWluLmMKQEAgLTAsMCArMSw1MzkgQEAKKy8qCisgKiBkZXZpY2UgZHJpdmVyIGZvciBUZWxlZ2VudCB0bGcyMzAwIGJhc2VkIFRWIGNhcmRzCisgKgorICogQXV0aG9yIDoKKyAqIAlLYW5nIFlvbmcJPGthbmd5b25nQHRlbGVnZW50LmNvbT4KKyAqIAlaaGFuZyBYaWFvYmluZwk8eGJ6aGFuZ0B0ZWxlZ2VudC5jb20+CisgKiAJSHVhbmcgU2hpamllCTx6eXppaWlAdGVsZWdlbnQuY29tPiBvciA8c2hpamllOEBnbWFpbC5jb20+CisgKgorICoJKGMpIDIwMDkgVGVsZWdlbnQgU3lzdGVtcworICoJKGMpIDIwMTAgVGVsZWdlbnQgU3lzdGVtcworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvcXVpcmtzLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKworI2luY2x1ZGUgInZlbmRvcmNtZHMuaCIKKyNpbmNsdWRlICJwZC1jb21tb24uaCIKKworI2RlZmluZSBWRU5ET1JfSUQJMHgxQjI0CisjZGVmaW5lIFBST0RVQ1RfSUQJMHg0MDAxCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFZFTkRPUl9JRCwgUFJPRFVDVF9JRCwgMjU1LCAxLCAwKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oVkVORE9SX0lELCBQUk9EVUNUX0lELCAyNTUsIDEsIDEpIH0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKK2ludCBkZWJ1Z19tb2RlOworbW9kdWxlX3BhcmFtKGRlYnVnX21vZGUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnX21vZGUsICIwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSwgMiA9IHZlcmJvc2UiKTsKKworY29uc3QgY2hhciAqZmlybXdhcmVfbmFtZSA9ICJ0bGcyMzAwX2Zpcm13YXJlLmJpbiI7CitzdHJ1Y3QgdXNiX2RyaXZlciBwb3NlaWRvbl9kcml2ZXI7CitzdGF0aWMgTElTVF9IRUFEKHBkX2RldmljZV9saXN0KTsKKworLyoKKyAqIHNlbmQgc2V0IHJlcXVlc3QgdG8gVVNCIGZpcm13YXJlLgorICovCitzMzIgc2VuZF9zZXRfcmVxKHN0cnVjdCBwb3NlaWRvbiAqcGQsIHU4IGNtZGlkLCBzMzIgcGFyYW0sIHMzMiAqY21kX3N0YXR1cykKK3sKKwlzMzIgcmV0OworCXM4ICBkYXRhWzMyXSA9IHt9OworCXUxNiBsb3dlcl8xNiwgdXBwZXJfMTY7CisKKwlpZiAocGQtPnN0YXRlICYgUE9TRUlET05fU1RBVEVfRElTQ09OTkVDVCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltZGVsYXkoMzApOworCisJaWYgKHBhcmFtID09IDApIHsKKwkJdXBwZXJfMTYgPSBsb3dlcl8xNiA9IDA7CisJfSBlbHNlIHsKKwkJLyogc2VuZCAzMiBiaXQgcGFyYW0gYXMgIHR3byAxNiBiaXQgcGFyYW0sbGl0dGxlIGVuZGlhbiAqLworCQlsb3dlcl8xNiA9ICh1bnNpZ25lZCBzaG9ydCkocGFyYW0gJiAweGZmZmYpOworCQl1cHBlcl8xNiA9ICh1bnNpZ25lZCBzaG9ydCkoKHBhcmFtID4+IDE2KSAmIDB4ZmZmZik7CisJfQorCXJldCA9IHVzYl9jb250cm9sX21zZyhwZC0+dWRldiwKKwkJCSB1c2JfcmN2Y3RybHBpcGUocGQtPnVkZXYsIDApLAorCQkJIFJFUV9TRVRfQ01EIHwgY21kaWQsCisJCQkgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgbG93ZXJfMTYsCisJCQkgdXBwZXJfMTYsCisJCQkgJmRhdGEsCisJCQkgc2l6ZW9mKCpjbWRfc3RhdHVzKSwKKwkJCSBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisKKwlpZiAoIXJldCkgeworCQlyZXR1cm4gLUVOWElPOworCX0gZWxzZSB7CisJCS8qICAxc3QgNCBieXRlcyBpbnRvIGNtZF9zdGF0dXMgICAqLworCQltZW1jcHkoKGNoYXIgKiljbWRfc3RhdHVzLCAmKGRhdGFbMF0pLCBzaXplb2YoKmNtZF9zdGF0dXMpKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZW5kIGdldCByZXF1ZXN0IHRvIFBvc2VpZG9uIGZpcm13YXJlLgorICovCitzMzIgc2VuZF9nZXRfcmVxKHN0cnVjdCBwb3NlaWRvbiAqcGQsIHU4IGNtZGlkLCBzMzIgcGFyYW0sCisJCQl2b2lkICpidWYsIHMzMiAqY21kX3N0YXR1cywgczMyIGRhdGFsZW4pCit7CisJczMyIHJldDsKKwlzOCBkYXRhWzEyOF0gPSB7fTsKKwl1MTYgbG93ZXJfMTYsIHVwcGVyXzE2OworCisJaWYgKHBkLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX0RJU0NPTk5FQ1QpCisJCXJldHVybiAtRU5PREVWOworCisJbWRlbGF5KDMwKTsKKwlpZiAocGFyYW0gPT0gMCkgeworCQl1cHBlcl8xNiA9IGxvd2VyXzE2ID0gMDsKKwl9IGVsc2UgeworCQkvKnNlbmQgMzIgYml0IHBhcmFtIGFzIHR3byAxNiBiaXQgcGFyYW0sIGxpdHRsZSBlbmRpYW4gKi8KKwkJbG93ZXJfMTYgPSAodW5zaWduZWQgc2hvcnQpKHBhcmFtICYgMHhmZmZmKTsKKwkJdXBwZXJfMTYgPSAodW5zaWduZWQgc2hvcnQpKChwYXJhbSA+PiAxNikgJiAweGZmZmYpOworCX0KKwlyZXQgPSB1c2JfY29udHJvbF9tc2cocGQtPnVkZXYsCisJCQkgdXNiX3JjdmN0cmxwaXBlKHBkLT51ZGV2LCAwKSwKKwkJCSBSRVFfR0VUX0NNRCB8IGNtZGlkLAorCQkJIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJIGxvd2VyXzE2LAorCQkJIHVwcGVyXzE2LAorCQkJICZkYXRhLAorCQkJIChkYXRhbGVuICsgc2l6ZW9mKCpjbWRfc3RhdHVzKSksCisJCQkgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCisJaWYgKHJldCA8IDApIHsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9IGVsc2UgeworCQkvKiAxc3QgNCBieXRlcyBpbnRvIGNtZF9zdGF0dXMsIHJlbWFpbmluZyBkYXRhIGludG8gY21kX2RhdGEgKi8KKwkJbWVtY3B5KChjaGFyICopY21kX3N0YXR1cywgJmRhdGFbMF0sIHNpemVvZigqY21kX3N0YXR1cykpOworCQltZW1jcHkoKGNoYXIgKilidWYsICZkYXRhW3NpemVvZigqY21kX3N0YXR1cyldLCBkYXRhbGVuKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG1fbm90aWZpZXJfYmxvY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQl1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkdW1teSkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFBNX1BPU1RfSElCRVJOQVRJT046CisJCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCAmcGRfZGV2aWNlX2xpc3QpIHsKKwkJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlOworCQkJaW50IHJjID0gMDsKKworCQkJcGQgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IHBvc2VpZG9uLCBkZXZpY2VfbGlzdCk7CisJCQl1ZGV2ID0gcGQtPnVkZXY7CisJCQlpZmFjZSA9IHBkLT5pbnRlcmZhY2U7CisKKwkJCS8qIEl0IHdpbGwgY2F1c2UgdGhlIHN5c3RlbSB0byByZWxvYWQgdGhlIGZpcm13YXJlICovCisJCQlyYyA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQodWRldiwgaWZhY2UpOworCQkJaWYgKHJjID49IDApIHsKKwkJCQl1c2JfcmVzZXRfZGV2aWNlKHVkZXYpOworCQkJCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOworCQkJfQorCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlsb2coImV2ZW50IDolbGRcbiIsIGV2ZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwbV9ub3RpZmVyID0geworCS5ub3RpZmllcl9jYWxsID0gcG1fbm90aWZpZXJfYmxvY2ssCit9OworCitpbnQgc2V0X3R1bmVyX21vZGUoc3RydWN0IHBvc2VpZG9uICpwZCwgdW5zaWduZWQgY2hhciBtb2RlKQoreworCXMzMiByZXQsIGNtZF9zdGF0dXM7CisKKwlpZiAocGQtPnN0YXRlICYgUE9TRUlET05fU1RBVEVfRElTQ09OTkVDVCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFRVTkVfTU9ERV9TRUxFQ1QsIG1vZGUsICZjbWRfc3RhdHVzKTsKKwlpZiAocmV0IHx8IGNtZF9zdGF0dXMpCisJCXJldHVybiAtRU5YSU87CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcG9zZWlkb25fZGVsZXRlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHBvc2VpZG9uLCBrcmVmKTsKKworCWlmICghcGQpCisJCXJldHVybjsKKwlsaXN0X2RlbF9pbml0KCZwZC0+ZGV2aWNlX2xpc3QpOworCisJcGRfZHZiX3VzYl9kZXZpY2VfY2xlYW51cChwZCk7CisJLyogY2xlYW5fYXVkaW9fZGF0YSgmcGQtPmF1ZGlvX2RhdGEpOyovCisKKwlpZiAocGQtPnVkZXYpIHsKKwkJdXNiX3B1dF9kZXYocGQtPnVkZXYpOworCQlwZC0+dWRldiA9IE5VTEw7CisJfQorCWlmIChwZC0+aW50ZXJmYWNlKSB7CisJCXVzYl9wdXRfaW50ZihwZC0+aW50ZXJmYWNlKTsKKwkJcGQtPmludGVyZmFjZSA9IE5VTEw7CisJfQorCWtmcmVlKHBkKTsKKwlsb2coKTsKK30KKworc3RhdGljIGludCBmaXJtd2FyZV9kb3dubG9hZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQgcmV0ID0gMCwgYWN0dWFsX2xlbmd0aDsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKKwl2b2lkICpmd2J1ZiA9IE5VTEw7CisJc2l6ZV90IGZ3bGVuZ3RoID0gMCwgb2Zmc2V0OworCXNpemVfdCBtYXhfcGFja2V0X3NpemU7CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZmlybXdhcmVfbmFtZSwgJnVkZXYtPmRldik7CisJaWYgKHJldCkgeworCQlsb2coImRvd25sb2FkIGVyciA6ICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmd2xlbmd0aCA9IGZ3LT5zaXplOworCisJZndidWYgPSBremFsbG9jKGZ3bGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZ3YnVmKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwltZW1jcHkoZndidWYsIGZ3LT5kYXRhLCBmd2xlbmd0aCk7CisKKwltYXhfcGFja2V0X3NpemUgPSB1ZGV2LT5lcF9vdXRbMHgxXS0+ZGVzYy53TWF4UGFja2V0U2l6ZTsKKwlsb2coIlx0XHQgZG93bmxvYWQgc2l6ZSA6ICVkIiwgKGludCltYXhfcGFja2V0X3NpemUpOworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBmd2xlbmd0aDsgb2Zmc2V0ICs9IG1heF9wYWNrZXRfc2l6ZSkgeworCQlhY3R1YWxfbGVuZ3RoID0gMDsKKwkJcmV0ID0gdXNiX2J1bGtfbXNnKHVkZXYsCisJCQkJdXNiX3NuZGJ1bGtwaXBlKHVkZXYsIDB4MDEpLCAvKiBlcCAxICovCisJCQkJZndidWYgKyBvZmZzZXQsCisJCQkJbWluKG1heF9wYWNrZXRfc2l6ZSwgZndsZW5ndGggLSBvZmZzZXQpLAorCQkJCSZhY3R1YWxfbGVuZ3RoLAorCQkJCUhaICogMTApOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCWtmcmVlKGZ3YnVmKTsKK291dDoKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwb3NlaWRvbiAqZ2V0X3BkKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXJldHVybiB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworfQorCisjaWZkZWYgQ09ORklHX1BNCisvKiBvbmUtdG8tb25lIG1hcCA6IHBvc2VpZG9ue30gPC0tLS0+IHVzYl9kZXZpY2V7fSdzIHBvcnQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbWFwX2ZsYWdzKHN0cnVjdCBwb3NlaWRvbiAqcGQsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXBkLT5wb3J0bnVtID0gdWRldi0+cG9ydG51bTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2V0X2F1dG9wbV9yZWYoc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlyZXR1cm4gIHBkLT52aWRlb19kYXRhLnVzZXJzICsgcGQtPnZiaV9kYXRhLnVzZXJzICsgcGQtPmF1ZGlvLnVzZXJzCisJCSsgYXRvbWljX3JlYWQoJnBkLT5kdmJfZGF0YS51c2VycykgKyBwZC0+cmFkaW9fZGF0YS51c2VyczsKK30KKworLyogZml4dXAgc29tZXRoaW5nIGZvciBwb3NlaWRvbiAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcG9zZWlkb24gKmZpeHVwKHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJaW50IGNvdW50OworCisJLyogb2xkIHVkZXYgYW5kIGludGVyZmFjZSBoYXZlIGdvbmUsIHNvIHB1dCBiYWNrIHJlZmVyZW5jZSAuICovCisJY291bnQgPSBnZXRfYXV0b3BtX3JlZihwZCk7CisJbG9nKCJjb3VudCA6ICVkLCByZWYgY291bnQgOiAlZCIsIGNvdW50LCBnZXRfcG1fY291bnQocGQpKTsKKwl3aGlsZSAoY291bnQtLSkKKwkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHBkLT5pbnRlcmZhY2UpOworCS8qdXNiX2F1dG9wbV9zZXRfaW50ZXJmYWNlKHBkLT5pbnRlcmZhY2UpOyAqLworCisJdXNiX3B1dF9kZXYocGQtPnVkZXYpOworCXVzYl9wdXRfaW50ZihwZC0+aW50ZXJmYWNlKTsKKwlsb2coImV2ZW50IDogJWRcbiIsIHBkLT5tc2cuZXZlbnQpOworCXJldHVybiBwZDsKK30KKworc3RhdGljIHN0cnVjdCBwb3NlaWRvbiAqZmluZF9vbGRfcG9zZWlkb24oc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocGQsICZwZF9kZXZpY2VfbGlzdCwgZGV2aWNlX2xpc3QpIHsKKwkJaWYgKHBkLT5wb3J0bnVtID09IHVkZXYtPnBvcnRudW0gJiYgaW5faGliZXJuYXRpb24ocGQpKQorCQkJcmV0dXJuIGZpeHVwKHBkKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIElzIHRoZSBjYXJkIHdvcmtpbmcgbm93ID8gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlzX3dvcmtpbmcoc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlyZXR1cm4gZ2V0X3BtX2NvdW50KHBkKSA+IDA7Cit9CisKK3N0YXRpYyBpbnQgcG9zZWlkb25fc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZ2V0X3BkKGludGYpOworCisJaWYgKCFwZCkKKwkJcmV0dXJuIDA7CisJaWYgKCFpc193b3JraW5nKHBkKSkgeworCQlpZiAoZ2V0X3BtX2NvdW50KHBkKSA8PSAwICYmICFpbl9oaWJlcm5hdGlvbihwZCkpIHsKKwkJCXBkLT5tc2cuZXZlbnQgPSBQTV9FVkVOVF9BVVRPX1NVU1BFTkQ7CisJCQlwZC0+cG1fcmVzdW1lID0gTlVMTDsgLyogIGEgZ29vZCBndWFyZCAqLworCQkJcHJpbnRrKEtFUk5fREVCVUcgIlxuXHQrIFRMRzIzMDAgYXV0byBzdXNwZW5kICtcblxuIik7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCXBkLT5tc2cgPSBtc2c7IC8qIHNhdmUgaXQgaGVyZSAqLworCWxvZ3BtKHBkKTsKKwlyZXR1cm4gcGQtPnBtX3N1c3BlbmQgPyBwZC0+cG1fc3VzcGVuZChwZCkgOiAwOworfQorCitzdGF0aWMgaW50IHBvc2VpZG9uX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZ2V0X3BkKGludGYpOworCisJaWYgKCFwZCkKKwkJcmV0dXJuIDA7CisJcHJpbnRrKEtFUk5fREVCVUcgIlxuXHQgKysgVExHMjMwMCByZXN1bWUgKytcblxuIik7CisKKwlpZiAoIWlzX3dvcmtpbmcocGQpKSB7CisJCWlmIChQTV9FVkVOVF9BVVRPX1NVU1BFTkQgPT0gcGQtPm1zZy5ldmVudCkKKwkJCXBkLT5tc2cgPSBQTVNHX09OOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGluX2hpYmVybmF0aW9uKHBkKSkgeworCQlsb2dwbShwZCk7CisJCXJldHVybiAwOworCX0KKwlsb2dwbShwZCk7CisJcmV0dXJuIHBkLT5wbV9yZXN1bWUgPyBwZC0+cG1fcmVzdW1lKHBkKSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIGhpYmVybmF0aW9uX3Jlc3VtZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCit7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgcG9zZWlkb24sIHBtX3dvcmspOworCWludCBjb3VudDsKKworCXBkLT5tc2cuZXZlbnQgPSAwOyAvKiBjbGVhciBpdCBoZXJlICovCisJcGQtPnN0YXRlICY9IH5QT1NFSURPTl9TVEFURV9ESVNDT05ORUNUOworCisJLyogc2V0IHRoZSBuZXcgaW50ZXJmYWNlJ3MgcmVmZXJlbmNlICovCisJY291bnQgPSBnZXRfYXV0b3BtX3JlZihwZCk7CisJd2hpbGUgKGNvdW50LS0pCisJCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsKKworCS8qIHJlc3VtZSB0aGUgY29udGV4dCAqLworCWxvZ3BtKHBkKTsKKwlpZiAocGQtPnBtX3Jlc3VtZSkKKwkJcGQtPnBtX3Jlc3VtZShwZCk7Cit9CisjZWxzZSAvKiBDT05GSUdfUE0gaXMgbm90IGVuYWJsZWQ6ICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwb3NlaWRvbiAqZmluZF9vbGRfcG9zZWlkb24oc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbWFwX2ZsYWdzKHN0cnVjdCBwb3NlaWRvbiAqcGQsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworfQorI2VuZGlmCisKK3N0YXRpYyBib29sIGNoZWNrX2Zpcm13YXJlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgKmRvd25fZmlybXdhcmUpCit7CisJdm9pZCAqYnVmOworCWludCByZXQ7CisJc3RydWN0IGNtZF9maXJtd2FyZV92ZXJzX3MgKmNtZF9maXJtOworCisJYnVmID0ga3phbGxvYyhzaXplb2YoKmNtZF9maXJtKSArIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAorCQkJIFJFUV9HRVRfQ01EIHwgR0VUX0ZXX0lELAorCQkJIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJIDAsCisJCQkgMCwKKwkJCSBidWYsCisJCQkgc2l6ZW9mKCpjbWRfZmlybSkgKyBzaXplb2YodTMyKSwKKwkJCSBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJa2ZyZWUoYnVmKTsKKworCWlmIChyZXQgPCAwKSB7CisJCSpkb3duX2Zpcm13YXJlID0gMTsKKwkJcmV0dXJuIGZpcm13YXJlX2Rvd25sb2FkKHVkZXYpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBvc2VpZG9uX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBOVUxMOworCWludCByZXQgPSAwOworCWludCBuZXdfb25lID0gMDsKKworCS8qIGRvd25sb2FkIGZpcm13YXJlICovCisJY2hlY2tfZmlybXdhcmUodWRldiwgJnJldCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIDA7CisKKwkvKiBEbyBJIHJlY292ZXJ5IGZyb20gdGhlIGhpYmVybmF0ZSA/ICovCisJcGQgPSBmaW5kX29sZF9wb3NlaWRvbih1ZGV2KTsKKwlpZiAoIXBkKSB7CisJCXBkID0ga3phbGxvYyhzaXplb2YoKnBkKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGQpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJa3JlZl9pbml0KCZwZC0+a3JlZik7CisJCXNldF9tYXBfZmxhZ3MocGQsIHVkZXYpOworCQluZXdfb25lID0gMTsKKwl9CisKKwlwZC0+dWRldgk9IHVzYl9nZXRfZGV2KHVkZXYpOworCXBkLT5pbnRlcmZhY2UJPSB1c2JfZ2V0X2ludGYoaW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgcGQpOworCisJaWYgKG5ld19vbmUpIHsKKwkJc3RydWN0IGRldmljZSAqZGV2ID0gJmludGVyZmFjZS0+ZGV2OworCisJCWxvZ3BtKHBkKTsKKwkJbXV0ZXhfaW5pdCgmcGQtPmxvY2spOworCisJCS8qIHJlZ2lzdGVyIHY0bDIgZGV2aWNlICovCisJCXNucHJpbnRmKHBkLT52NGwyX2Rldi5uYW1lLCBzaXplb2YocGQtPnY0bDJfZGV2Lm5hbWUpLCAiJXMgJXMiLAorCQkJZGV2LT5kcml2ZXItPm5hbWUsIGRldl9uYW1lKGRldikpOworCQlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCAmcGQtPnY0bDJfZGV2KTsKKworCQkvKiByZWdpc3RlciBkZXZpY2VzIGluIGRpcmVjdG9yeSAvZGV2ICovCisJCXJldCA9IHBkX3ZpZGVvX2luaXQocGQpOworCQlwb3NlaWRvbl9hdWRpb19pbml0KHBkKTsKKwkJcG9zZWlkb25fZm1faW5pdChwZCk7CisJCXBkX2R2Yl91c2JfZGV2aWNlX2luaXQocGQpOworCisJCUlOSVRfTElTVF9IRUFEKCZwZC0+ZGV2aWNlX2xpc3QpOworCQlsaXN0X2FkZF90YWlsKCZwZC0+ZGV2aWNlX2xpc3QsICZwZF9kZXZpY2VfbGlzdCk7CisJfQorCisJZGV2aWNlX2luaXRfd2FrZXVwKCZ1ZGV2LT5kZXYsIDEpOworI2lmZGVmIENPTkZJR19QTQorCXBkLT51ZGV2LT5hdXRvc3VzcGVuZF9kaXNhYmxlZCA9IDA7CisJcGQtPnVkZXYtPmF1dG9zdXNwZW5kX2RlbGF5ID0gSFogKiBQTV9TVVNQRU5EX0RFTEFZOworCisJaWYgKGluX2hpYmVybmF0aW9uKHBkKSkgeworCQlJTklUX1dPUksoJnBkLT5wbV93b3JrLCBoaWJlcm5hdGlvbl9yZXN1bWUpOworCQlzY2hlZHVsZV93b3JrKCZwZC0+cG1fd29yayk7CisJfQorI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBvc2VpZG9uX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZ2V0X3BkKGludGVyZmFjZSk7CisKKwlpZiAoIXBkKQorCQlyZXR1cm47CisJbG9ncG0ocGQpOworCWlmIChpbl9oaWJlcm5hdGlvbihwZCkpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlwZC0+c3RhdGUgfD0gUE9TRUlET05fU1RBVEVfRElTQ09OTkVDVDsKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKworCS8qIHN0b3AgdXJiIHRyYW5zZmVycmluZyAqLworCXN0b3BfYWxsX3ZpZGVvX3N0cmVhbShwZCk7CisJZHZiX3N0b3Bfc3RyZWFtaW5nKCZwZC0+ZHZiX2RhdGEpOworCisJLyp1bnJlZ2lzdGVyIHY0bDIgZGV2aWNlICovCisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmcGQtPnY0bDJfZGV2KTsKKworCWxvY2tfa2VybmVsKCk7CisJeworCQlwZF9kdmJfdXNiX2RldmljZV9leGl0KHBkKTsKKwkJcG9zZWlkb25fZm1fZXhpdChwZCk7CisKKwkJcG9zZWlkb25fYXVkaW9fZnJlZShwZCk7CisJCXBkX3ZpZGVvX2V4aXQocGQpOworCX0KKwl1bmxvY2tfa2VybmVsKCk7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJa3JlZl9wdXQoJnBkLT5rcmVmLCBwb3NlaWRvbl9kZWxldGUpOworfQorCitzdHJ1Y3QgdXNiX2RyaXZlciBwb3NlaWRvbl9kcml2ZXIgPSB7CisJLm5hbWUJCT0gInBvc2VpZG9uIiwKKwkucHJvYmUJCT0gcG9zZWlkb25fcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSBwb3NlaWRvbl9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IGlkX3RhYmxlLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCT0gcG9zZWlkb25fc3VzcGVuZCwKKwkucmVzdW1lCQk9IHBvc2VpZG9uX3Jlc3VtZSwKKyNlbmRpZgorCS5zdXBwb3J0c19hdXRvc3VzcGVuZCA9IDEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwb3NlaWRvbl9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9yZWdpc3RlcigmcG9zZWlkb25fZHJpdmVyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJlZ2lzdGVyX3BtX25vdGlmaWVyKCZwbV9ub3RpZmVyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcG9zZWlkb25fZXhpdCh2b2lkKQoreworCWxvZygpOworCXVucmVnaXN0ZXJfcG1fbm90aWZpZXIoJnBtX25vdGlmZXIpOworCXVzYl9kZXJlZ2lzdGVyKCZwb3NlaWRvbl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChwb3NlaWRvbl9pbml0KTsKK21vZHVsZV9leGl0KHBvc2VpZG9uX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJUZWxlZ2VudCBTeXN0ZW1zIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZvciB0bGcyMzAwLWJhc2VkIFVTQiBkZXZpY2UgIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtcmFkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC1yYWRpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NTc2NmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvcGQtcmFkaW8uYwpAQCAtMCwwICsxLDQyMCBAQAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSAicGQtY29tbW9uLmgiCisjaW5jbHVkZSAidmVuZG9yY21kcy5oIgorCitzdGF0aWMgaW50IHNldF9mcmVxdWVuY3koc3RydWN0IHBvc2VpZG9uICpwLCBfX3UzMiBmcmVxdWVuY3kpOworc3RhdGljIGludCBwb3NlaWRvbl9mbV9jbG9zZShzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50IHBvc2VpZG9uX2ZtX29wZW4oc3RydWN0IGZpbGUgKmZpbHApOworCisjZGVmaW5lIFRVTkVSX0ZSRVFfTUlOX0ZNIDc2MDAwMDAwCisjZGVmaW5lIFRVTkVSX0ZSRVFfTUFYX0ZNIDEwODAwMDAwMAorCisjZGVmaW5lIE1BWF9QUkVFTVBIQVNJUyAoVjRMMl9QUkVFTVBIQVNJU183NV91UyArIDEpCitzdGF0aWMgaW50IHByZWVtcGhhc2lzW01BWF9QUkVFTVBIQVNJU10gPSB7CisJVExHX1RVTkVfQVNURF9OT05FLCAgIC8qIFY0TDJfUFJFRU1QSEFTSVNfRElTQUJMRUQgKi8KKwlUTEdfVFVORV9BU1REX0ZNX0VVUiwgLyogVjRMMl9QUkVFTVBIQVNJU181MF91UyAgICAqLworCVRMR19UVU5FX0FTVERfRk1fVVMsICAvKiBWNEwyX1BSRUVNUEhBU0lTXzc1X3VTICAgICovCit9OworCitzdGF0aWMgaW50IHBvc2VpZG9uX2NoZWNrX21vZGVfcmFkaW8oc3RydWN0IHBvc2VpZG9uICpwKQoreworCWludCByZXQ7CisJdTMyIHN0YXR1czsKKworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJc2NoZWR1bGVfdGltZW91dChIWi8yKTsKKwlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShwLT51ZGV2LCAwLCBCVUxLX0FMVEVSTkFURV9JRkFDRSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gc2V0X3R1bmVyX21vZGUocCwgVExHX01PREVfRk1fUkFESU8pOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBzZW5kX3NldF9yZXEocCwgU0dOTF9TUkNfU0VMLCBUTEdfU0lHX1NSQ19BTlRFTk5BLCAmc3RhdHVzKTsKKwlyZXQgPSBzZW5kX3NldF9yZXEocCwgVFVORVJfQVVEX0FOQV9TVEQsCisJCQkJcC0+cmFkaW9fZGF0YS5wcmVfZW1waGFzaXMsICZzdGF0dXMpOworCXJldCB8PSBzZW5kX3NldF9yZXEocCwgVFVORVJfQVVEX01PREUsCisJCQkJVExHX1RVTkVfVFZBVURJT19NT0RFX1NURVJFTywgJnN0YXR1cyk7CisJcmV0IHw9IHNlbmRfc2V0X3JlcShwLCBBVURJT19TQU1QTEVfUkFURV9TRUwsCisJCQkJQVRWX0FVRElPX1JBVEVfNDhLLCAmc3RhdHVzKTsKKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHAsIFRVTkVfRlJFUV9TRUxFQ1QsIFRVTkVSX0ZSRVFfTUlOX0ZNLCAmc3RhdHVzKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHBtX2ZtX3N1c3BlbmQoc3RydWN0IHBvc2VpZG9uICpwKQoreworCWxvZ3BtKHApOworCXBtX2Fsc2Ffc3VzcGVuZChwKTsKKwl1c2Jfc2V0X2ludGVyZmFjZShwLT51ZGV2LCAwLCAwKTsKKwltc2xlZXAoMzAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbV9mbV9yZXN1bWUoc3RydWN0IHBvc2VpZG9uICpwKQoreworCWxvZ3BtKHApOworCXBvc2VpZG9uX2NoZWNrX21vZGVfcmFkaW8ocCk7CisJc2V0X2ZyZXF1ZW5jeShwLCBwLT5yYWRpb19kYXRhLmZtX2ZyZXEpOworCXBtX2Fsc2FfcmVzdW1lKHApOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgcG9zZWlkb25fZm1fb3BlbihzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQgPSB2aWRlb19kZXZkYXRhKGZpbHApOworCXN0cnVjdCBwb3NlaWRvbiAqcCA9IHZpZGVvX2dldF9kcnZkYXRhKHZmZCk7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXApCisJCXJldHVybiAtMTsKKworCW11dGV4X2xvY2soJnAtPmxvY2spOworCWlmIChwLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX0RJU0NPTk5FQ1QpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHAtPnN0YXRlICYmICEocC0+c3RhdGUgJiBQT1NFSURPTl9TVEFURV9GTSkpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UocC0+aW50ZXJmYWNlKTsKKwlpZiAoMCA9PSBwLT5zdGF0ZSkgeworCQkvKiBkZWZhdWx0IHByZS1lbXBoYXNpcyAqLworCQlpZiAocC0+cmFkaW9fZGF0YS5wcmVfZW1waGFzaXMgPT0gMCkKKwkJCXAtPnJhZGlvX2RhdGEucHJlX2VtcGhhc2lzID0gVExHX1RVTkVfQVNURF9GTV9FVVI7CisJCXNldF9kZWJ1Z19tb2RlKHZmZCwgZGVidWdfbW9kZSk7CisKKwkJcmV0ID0gcG9zZWlkb25fY2hlY2tfbW9kZV9yYWRpbyhwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwLT5pbnRlcmZhY2UpOworCQkJZ290byBvdXQ7CisJCX0KKwkJcC0+c3RhdGUgfD0gUE9TRUlET05fU1RBVEVfRk07CisJfQorCXAtPnJhZGlvX2RhdGEudXNlcnMrKzsKKwlrcmVmX2dldCgmcC0+a3JlZik7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gcDsKK291dDoKKwltdXRleF91bmxvY2soJnAtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcG9zZWlkb25fZm1fY2xvc2Uoc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHBvc2VpZG9uICpwID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCByYWRpb19kYXRhICpmbSA9ICZwLT5yYWRpb19kYXRhOworCXVpbnQzMl90IHN0YXR1czsKKworCW11dGV4X2xvY2soJnAtPmxvY2spOworCWZtLT51c2Vycy0tOworCWlmICgwID09IGZtLT51c2VycykKKwkJcC0+c3RhdGUgJj0gflBPU0VJRE9OX1NUQVRFX0ZNOworCisJaWYgKGZtLT5pc19yYWRpb19zdHJlYW1pbmcgJiYgZmlscCA9PSBwLT5maWxlX2Zvcl9zdHJlYW0pIHsKKwkJZm0tPmlzX3JhZGlvX3N0cmVhbWluZyA9IDA7CisJCXNlbmRfc2V0X3JlcShwLCBQTEFZX1NFUlZJQ0UsIFRMR19UVU5FX1BMQVlfU1ZDX1NUT1AsICZzdGF0dXMpOworCX0KKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UocC0+aW50ZXJmYWNlKTsKKwltdXRleF91bmxvY2soJnAtPmxvY2spOworCisJa3JlZl9wdXQoJnAtPmtyZWYsIHBvc2VpZG9uX2RlbGV0ZSk7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2KQoreworCXN0cnVjdCBwb3NlaWRvbiAqcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXN0cmxjcHkodi0+ZHJpdmVyLCAidGVsZS1yYWRpbyIsIHNpemVvZih2LT5kcml2ZXIpKTsKKwlzdHJsY3B5KHYtPmNhcmQsICJUZWxlZ2VudCBQb3NlaWRvbiIsIHNpemVvZih2LT5jYXJkKSk7CisJdXNiX21ha2VfcGF0aChwLT51ZGV2LCB2LT5idXNfaW5mbywgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7CisJdi0+dmVyc2lvbiA9IEtFUk5FTF9WRVJTSU9OKDAsIDAsIDEpOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgcG9zZWlkb25fZm1fZm9wcyA9IHsKKwkub3duZXIgICAgICAgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgICAgICAgID0gcG9zZWlkb25fZm1fb3BlbiwKKwkucmVsZWFzZSAgICAgICA9IHBvc2VpZG9uX2ZtX2Nsb3NlLAorCS5pb2N0bAkgICAgICAgPSB2aWRlb19pb2N0bDIsCit9OworCitpbnQgdGxnX2ZtX3ZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCit7CisJc3RydWN0IHR1bmVyX2ZtX3NpZ19zdGF0X3MgZm1fc3RhdCA9IHt9OworCWludCByZXQsIHN0YXR1cywgY291bnQgPSA1OworCXN0cnVjdCBwb3NlaWRvbiAqcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmICh2dC0+aW5kZXggIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2dC0+dHlwZQk9IFY0TDJfVFVORVJfUkFESU87CisJdnQtPmNhcGFiaWxpdHkJPSBWNEwyX1RVTkVSX0NBUF9TVEVSRU87CisJdnQtPnJhbmdlbG93CT0gVFVORVJfRlJFUV9NSU5fRk0gLyA2MjUwMDsKKwl2dC0+cmFuZ2VoaWdoCT0gVFVORVJfRlJFUV9NQVhfRk0gLyA2MjUwMDsKKwl2dC0+cnhzdWJjaGFucwk9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKKwl2dC0+YXVkbW9kZQk9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisJdnQtPnNpZ25hbAk9IDA7CisJdnQtPmFmYyAJPSAwOworCisJbXV0ZXhfbG9jaygmcC0+bG9jayk7CisJcmV0ID0gc2VuZF9nZXRfcmVxKHAsIFRVTkVSX1NUQVRVUywgVExHX01PREVfRk1fUkFESU8sCisJCQkgICAgICAmZm1fc3RhdCwgJnN0YXR1cywgc2l6ZW9mKGZtX3N0YXQpKTsKKworCXdoaWxlIChmbV9zdGF0LnNpZ19sb2NrX2J1c3kgJiYgY291bnQtLSAmJiAhcmV0KSB7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQoSFopOworCisJCXJldCA9IHNlbmRfZ2V0X3JlcShwLCBUVU5FUl9TVEFUVVMsIFRMR19NT0RFX0ZNX1JBRElPLAorCQkJCSAgJmZtX3N0YXQsICZzdGF0dXMsIHNpemVvZihmbV9zdGF0KSk7CisJfQorCW11dGV4X3VubG9jaygmcC0+bG9jayk7CisKKwlpZiAocmV0IHx8IHN0YXR1cykgeworCQl2dC0+c2lnbmFsID0gMDsKKwl9IGVsc2UgaWYgKChmbV9zdGF0LnNpZ19wcmVzZW50IHx8IGZtX3N0YXQuc2lnX2xvY2tlZCkKKwkJCSYmIGZtX3N0YXQuc2lnX3N0cmVuZ3RoID09IDApIHsKKwkJdnQtPnNpZ25hbCA9IDB4ZmZmZjsKKwl9IGVsc2UKKwkJdnQtPnNpZ25hbCA9IChmbV9zdGF0LnNpZ19zdHJlbmd0aCAqIDI1NSAvIDEwKSA8PCA4OworCisJcmV0dXJuIDA7Cit9CisKK2ludCBmbV9nZXRfZnJlcShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICphcmdwKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWFyZ3AtPmZyZXF1ZW5jeSA9IHAtPnJhZGlvX2RhdGEuZm1fZnJlcTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfZnJlcXVlbmN5KHN0cnVjdCBwb3NlaWRvbiAqcCwgX191MzIgZnJlcXVlbmN5KQoreworCV9fdTMyIGZyZXEgOworCWludCByZXQsIHN0YXR1czsKKworCW11dGV4X2xvY2soJnAtPmxvY2spOworCisJcmV0ID0gc2VuZF9zZXRfcmVxKHAsIFRVTkVSX0FVRF9BTkFfU1RELAorCQkJCXAtPnJhZGlvX2RhdGEucHJlX2VtcGhhc2lzLCAmc3RhdHVzKTsKKworCWZyZXEgPSAgKGZyZXF1ZW5jeSAqIDEyNSkgKiA1MDAgLyAxMDAwOy8qIGtIWiAqLworCWlmIChmcmVxIDwgVFVORVJfRlJFUV9NSU5fRk0vMTAwMCB8fCBmcmVxID4gVFVORVJfRlJFUV9NQVhfRk0vMTAwMCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKworCXJldCA9IHNlbmRfc2V0X3JlcShwLCBUVU5FX0ZSRVFfU0VMRUNULCBmcmVxLCAmc3RhdHVzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvciA7CisJcmV0ID0gc2VuZF9zZXRfcmVxKHAsIFRBS0VfUkVRVUVTVCwgMCwgJnN0YXR1cyk7CisKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCXNjaGVkdWxlX3RpbWVvdXQoSFovNCk7CisJaWYgKCFwLT5yYWRpb19kYXRhLmlzX3JhZGlvX3N0cmVhbWluZykgeworCQlyZXQgPSBzZW5kX3NldF9yZXEocCwgVEFLRV9SRVFVRVNULCAwLCAmc3RhdHVzKTsKKwkJcmV0ID0gc2VuZF9zZXRfcmVxKHAsIFBMQVlfU0VSVklDRSwKKwkJCQlUTEdfVFVORV9QTEFZX1NWQ19TVEFSVCwgJnN0YXR1cyk7CisJCXAtPnJhZGlvX2RhdGEuaXNfcmFkaW9fc3RyZWFtaW5nID0gMTsKKwl9CisJcC0+cmFkaW9fZGF0YS5mbV9mcmVxID0gZnJlcXVlbmN5OworZXJyb3I6CisJbXV0ZXhfdW5sb2NrKCZwLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZm1fc2V0X2ZyZXEoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqYXJncCkKK3sKKwlzdHJ1Y3QgcG9zZWlkb24gKnAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlwLT5maWxlX2Zvcl9zdHJlYW0gID0gZmlsZTsKKyNpZmRlZiBDT05GSUdfUE0KKwlwLT5wbV9zdXNwZW5kID0gcG1fZm1fc3VzcGVuZDsKKwlwLT5wbV9yZXN1bWUgID0gcG1fZm1fcmVzdW1lOworI2VuZGlmCisJcmV0dXJuIHNldF9mcmVxdWVuY3kocCwgYXJncC0+ZnJlcXVlbmN5KTsKK30KKworaW50IHRsZ19mbV92aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9jb250cm9sICphcmcpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCB0bGdfZm1fdmlkaW9jX2dfZXh0c19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzKQoreworCXN0cnVjdCBwb3NlaWRvbiAqcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgaTsKKworCWlmIChjdHJscy0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfRk1fVFgpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IGN0cmxzLT5jb3VudDsgaSsrKSB7CisJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsID0gY3RybHMtPmNvbnRyb2xzICsgaTsKKworCQlpZiAoY3RybC0+aWQgIT0gVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUykKKwkJCWNvbnRpbnVlOworCisJCWlmIChpIDwgTUFYX1BSRUVNUEhBU0lTKQorCQkJY3RybC0+dmFsdWUgPSBwLT5yYWRpb19kYXRhLnByZV9lbXBoYXNpczsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCB0bGdfZm1fdmlkaW9jX3NfZXh0c19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpCit7CisJaW50IGk7CisKKwlpZiAoY3RybHMtPmN0cmxfY2xhc3MgIT0gVjRMMl9DVFJMX0NMQVNTX0ZNX1RYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBjdHJscy0+Y291bnQ7IGkrKykgeworCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY3RybCA9IGN0cmxzLT5jb250cm9scyArIGk7CisKKwkJaWYgKGN0cmwtPmlkICE9IFY0TDJfQ0lEX1RVTkVfUFJFRU1QSEFTSVMpCisJCQljb250aW51ZTsKKworCQlpZiAoY3RybC0+dmFsdWUgPj0gMCAmJiBjdHJsLT52YWx1ZSA8IE1BWF9QUkVFTVBIQVNJUykgeworCQkJc3RydWN0IHBvc2VpZG9uICpwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCQkJaW50IHByZV9lbXBoYXNpcyA9IHByZWVtcGhhc2lzW2N0cmwtPnZhbHVlXTsKKwkJCXUzMiBzdGF0dXM7CisKKwkJCXNlbmRfc2V0X3JlcShwLCBUVU5FUl9BVURfQU5BX1NURCwKKwkJCQkJCXByZV9lbXBoYXNpcywgJnN0YXR1cyk7CisJCQlwLT5yYWRpb19kYXRhLnByZV9lbXBoYXNpcyA9IHByZV9lbXBoYXNpczsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHRsZ19mbV92aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXJldHVybiAwOworfQorCitpbnQgdGxnX2ZtX3ZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybCkKK3sKKwlpZiAoIShjdHJsLT5pZCAmIFY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTCkpCisJCXJldHVybiAtRUlOVkFMOworCisJY3RybC0+aWQgJj0gflY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTDsKKwlpZiAoY3RybC0+aWQgIT0gVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUykgeworCQkvKiByZXR1cm4gdGhlIG5leHQgc3VwcG9ydGVkIGNvbnRyb2wgKi8KKwkJY3RybC0+aWQgPSBWNEwyX0NJRF9UVU5FX1BSRUVNUEhBU0lTOworCQl2NGwyX2N0cmxfcXVlcnlfZmlsbChjdHJsLCBWNEwyX1BSRUVNUEhBU0lTX0RJU0FCTEVELAorCQkJCQlWNEwyX1BSRUVNUEhBU0lTXzc1X3VTLCAxLAorCQkJCQlWNEwyX1BSRUVNUEhBU0lTXzUwX3VTKTsKKwkJY3RybC0+ZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19VUERBVEU7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworaW50IHRsZ19mbV92aWRpb2NfcXVlcnltZW51KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQlzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtZW51KQoreworCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfbWVudShxbWVudSwgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX3R1bmVyICp2dCkKK3sKKwlyZXR1cm4gdnQtPmluZGV4ID4gMCA/IC1FSU5WQUwgOiAwOworfQorc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYXVkaW8gKnZhKQoreworCXJldHVybiAodmEtPmluZGV4ICE9IDApID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWEtPmluZGV4ICAgID0gMDsKKwlhLT5tb2RlICAgID0gMDsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdTMyIGkpCit7CisJcmV0dXJuIChpICE9IDApID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHUzMiAqaSkKK3sKKwlyZXR1cm4gKCppICE9IDApID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgcG9zZWlkb25fZm1faW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAgICAgPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19nX2F1ZGlvICAgICA9IHZpZGlvY19nX2F1ZGlvLAorCS52aWRpb2Nfc19hdWRpbyAgICAgPSB2aWRpb2Nfc19hdWRpbywKKwkudmlkaW9jX2dfaW5wdXQgICAgID0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ICAgICA9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfcXVlcnljdHJsICAgPSB0bGdfZm1fdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX3F1ZXJ5bWVudSAgID0gdGxnX2ZtX3ZpZGlvY19xdWVyeW1lbnUsCisJLnZpZGlvY19nX2N0cmwgICAgICA9IHRsZ19mbV92aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsICAgICAgPSB0bGdfZm1fdmlkaW9jX3NfY3RybCwKKwkudmlkaW9jX3NfZXh0X2N0cmxzID0gdGxnX2ZtX3ZpZGlvY19zX2V4dHNfY3RybCwKKwkudmlkaW9jX2dfZXh0X2N0cmxzID0gdGxnX2ZtX3ZpZGlvY19nX2V4dHNfY3RybCwKKwkudmlkaW9jX3NfdHVuZXIgICAgID0gdmlkaW9jX3NfdHVuZXIsCisJLnZpZGlvY19nX3R1bmVyICAgICA9IHRsZ19mbV92aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX2dfZnJlcXVlbmN5ID0gZm1fZ2V0X2ZyZXEsCisJLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IGZtX3NldF9mcmVxLAorfTsKKworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgcG9zZWlkb25fZm1fdGVtcGxhdGUgPSB7CisJLm5hbWUgICAgICAgPSAiVGVsZWdlbnQtUmFkaW8iLAorCS5mb3BzICAgICAgID0gJnBvc2VpZG9uX2ZtX2ZvcHMsCisJLm1pbm9yICAgICAgPSAtMSwKKwkucmVsZWFzZSAgICA9IHZpZGVvX2RldmljZV9yZWxlYXNlLAorCS5pb2N0bF9vcHMgID0gJnBvc2VpZG9uX2ZtX2lvY3RsX29wcywKK307CisKK2ludCBwb3NlaWRvbl9mbV9pbml0KHN0cnVjdCBwb3NlaWRvbiAqcCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpmbV9kZXY7CisKKwlmbV9kZXYgPSB2ZGV2X2luaXQocCwgJnBvc2VpZG9uX2ZtX3RlbXBsYXRlKTsKKwlpZiAoZm1fZGV2ID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZm1fZGV2LCBWRkxfVFlQRV9SQURJTywgLTEpIDwgMCkgeworCQl2aWRlb19kZXZpY2VfcmVsZWFzZShmbV9kZXYpOworCQlyZXR1cm4gLTE7CisJfQorCXAtPnJhZGlvX2RhdGEuZm1fZGV2ID0gZm1fZGV2OworCXJldHVybiAwOworfQorCitpbnQgcG9zZWlkb25fZm1fZXhpdChzdHJ1Y3QgcG9zZWlkb24gKnApCit7CisJZGVzdHJveV92aWRlb19kZXZpY2UoJnAtPnJhZGlvX2RhdGEuZm1fZGV2KTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3BkLXZpZGVvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVjZmJhNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGxnMjMwMC9wZC12aWRlby5jCkBAIC0wLDAgKzEsMTY2NyBAQAorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorCisjaW5jbHVkZSAicGQtY29tbW9uLmgiCisjaW5jbHVkZSAidmVuZG9yY21kcy5oIgorCitzdGF0aWMgaW50IHBtX3ZpZGVvX3N1c3BlbmQoc3RydWN0IHBvc2VpZG9uICpwZCk7CitzdGF0aWMgaW50IHBtX3ZpZGVvX3Jlc3VtZShzdHJ1Y3QgcG9zZWlkb24gKnBkKTsKK3N0YXRpYyB2b2lkIGlzb19idWJibGVfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpOworCitpbnQgdXNiX3RyYW5zZmVyX21vZGU7Cittb2R1bGVfcGFyYW0odXNiX3RyYW5zZmVyX21vZGUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHVzYl90cmFuc2Zlcl9tb2RlLCAiMCA9IEJ1bGssIDEgPSBJc29jaHJvbm91cyIpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBvc2VpZG9uX2Zvcm1hdCBwb3NlaWRvbl9mb3JtYXRzW10gPSB7CisJeyAiWVVWIDQyMiIsIFY0TDJfUElYX0ZNVF9ZVVlWLCAxNiwgMH0sCisJeyAiUkdCNTY1IiwgVjRMMl9QSVhfRk1UX1JHQjU2NSwgMTYsIDB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwb3NlaWRvbl90dm5vcm0gcG9zZWlkb25fdHZub3Jtc1tdID0geworCXsgVjRMMl9TVERfUEFMX0QsICJQQUwtRCIsICBUTEdfVFVORV9WU1REX1BBTF9EIH0sCisJeyBWNEwyX1NURF9QQUxfQiwgIlBBTC1CIiwgIFRMR19UVU5FX1ZTVERfUEFMX0IgfSwKKwl7IFY0TDJfU1REX1BBTF9HLCAiUEFMLUciLCAgVExHX1RVTkVfVlNURF9QQUxfRyB9LAorCXsgVjRMMl9TVERfUEFMX0gsICJQQUwtSCIsICBUTEdfVFVORV9WU1REX1BBTF9IIH0sCisJeyBWNEwyX1NURF9QQUxfSSwgIlBBTC1JIiwgIFRMR19UVU5FX1ZTVERfUEFMX0kgfSwKKwl7IFY0TDJfU1REX1BBTF9NLCAiUEFMLU0iLCAgVExHX1RVTkVfVlNURF9QQUxfTSB9LAorCXsgVjRMMl9TVERfUEFMX04sICJQQUwtTiIsICBUTEdfVFVORV9WU1REX1BBTF9OX0NPTUJPIH0sCisJeyBWNEwyX1NURF9QQUxfTmMsICJQQUwtTmMiLCBUTEdfVFVORV9WU1REX1BBTF9OX0NPTUJPIH0sCisJeyBWNEwyX1NURF9OVFNDX00sICJOVFNDLU0iLCBUTEdfVFVORV9WU1REX05UU0NfTSB9LAorCXsgVjRMMl9TVERfTlRTQ19NX0pQLCAiTlRTQy1KUCIsIFRMR19UVU5FX1ZTVERfTlRTQ19NX0ogfSwKKwl7IFY0TDJfU1REX1NFQ0FNX0IsICJTRUNBTS1CIiwgVExHX1RVTkVfVlNURF9TRUNBTV9CIH0sCisJeyBWNEwyX1NURF9TRUNBTV9ELCAiU0VDQU0tRCIsIFRMR19UVU5FX1ZTVERfU0VDQU1fRCB9LAorCXsgVjRMMl9TVERfU0VDQU1fRywgIlNFQ0FNLUciLCBUTEdfVFVORV9WU1REX1NFQ0FNX0cgfSwKKwl7IFY0TDJfU1REX1NFQ0FNX0gsICJTRUNBTS1IIiwgVExHX1RVTkVfVlNURF9TRUNBTV9IIH0sCisJeyBWNEwyX1NURF9TRUNBTV9LLCAiU0VDQU0tSyIsIFRMR19UVU5FX1ZTVERfU0VDQU1fSyB9LAorCXsgVjRMMl9TVERfU0VDQU1fSzEsICJTRUNBTS1LMSIsIFRMR19UVU5FX1ZTVERfU0VDQU1fSzEgfSwKKwl7IFY0TDJfU1REX1NFQ0FNX0wsICJTRUNBTS1MIiwgVExHX1RVTkVfVlNURF9TRUNBTV9MIH0sCisJeyBWNEwyX1NURF9TRUNBTV9MQywgIlNFQ0FNLUxDIiwgVExHX1RVTkVfVlNURF9TRUNBTV9MMSB9LAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgUE9TRUlET05fVFZOT1JNUyA9IEFSUkFZX1NJWkUocG9zZWlkb25fdHZub3Jtcyk7CisKK3N0cnVjdCBwZF9hdWRpb19tb2RlIHsKKwl1MzIgdGxnX2F1ZGlvX21vZGU7CisJdTMyIHY0bDJfYXVkaW9fc3ViOworCXUzMiB2NGwyX2F1ZGlvX21vZGU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBkX2F1ZGlvX21vZGUgcGRfYXVkaW9fbW9kZXNbXSA9IHsKKwl7IFRMR19UVU5FX1RWQVVESU9fTU9ERV9NT05PLCBWNEwyX1RVTkVSX1NVQl9NT05PLAorCQlWNEwyX1RVTkVSX01PREVfTU9OTyB9LAorCXsgVExHX1RVTkVfVFZBVURJT19NT0RFX1NURVJFTywgVjRMMl9UVU5FUl9TVUJfU1RFUkVPLAorCQlWNEwyX1RVTkVSX01PREVfU1RFUkVPIH0sCisJeyBUTEdfVFVORV9UVkFVRElPX01PREVfTEFOR19BLCBWNEwyX1RVTkVSX1NVQl9MQU5HMSwKKwkJVjRMMl9UVU5FUl9NT0RFX0xBTkcxIH0sCisJeyBUTEdfVFVORV9UVkFVRElPX01PREVfTEFOR19CLCBWNEwyX1RVTkVSX1NVQl9MQU5HMiwKKwkJVjRMMl9UVU5FUl9NT0RFX0xBTkcyIH0sCisJeyBUTEdfVFVORV9UVkFVRElPX01PREVfTEFOR19DLCBWNEwyX1RVTkVSX1NVQl9MQU5HMSwKKwkJVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyIH0KK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFBPU0VJRE9OX0FVRElPTU9EUyA9IEFSUkFZX1NJWkUocGRfYXVkaW9fbW9kZXMpOworCitzdHJ1Y3QgcGRfaW5wdXQgeworCWNoYXIgKm5hbWU7CisJdWludDMyX3QgdGxnX3NyYzsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGRfaW5wdXQgcGRfaW5wdXRzW10gPSB7CisJeyAiVFYgQW50ZW5uYSIsIFRMR19TSUdfU1JDX0FOVEVOTkEgfSwKKwl7ICJUViBDYWJsZSIsIFRMR19TSUdfU1JDX0NBQkxFIH0sCisJeyAiVFYgU1ZpZGVvIiwgVExHX1NJR19TUkNfU1ZJREVPIH0sCisJeyAiVFYgQ29tcG9zaXRlIiwgVExHX1NJR19TUkNfQ09NUE9TSVRFIH0KK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFBPU0VJRE9OX0lOUFVUUyA9IEFSUkFZX1NJWkUocGRfaW5wdXRzKTsKKworc3RydWN0IHBvc2VpZG9uX2NvbnRyb2wgeworCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCB2NGwyX2N0cmw7CisJZW51bSBjbWRfY3VzdG9tX3BhcmFtX2lkIHZjX2lkOworfTsKKworc3RhdGljIHN0cnVjdCBwb3NlaWRvbl9jb250cm9sIGNvbnRyb2xzW10gPSB7CisJeworCQl7IFY0TDJfQ0lEX0JSSUdIVE5FU1MsIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkiYnJpZ2h0bmVzcyIsIDAsIDEwMDAwLCAxLCAxMDAsIDAsIH0sCisJCUNVU1RfUEFSTV9JRF9CUklHSFRORVNTX0NUUkwKKwl9LCB7CisJCXsgVjRMMl9DSURfQ09OVFJBU1QsIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkiY29udHJhc3QiLCAwLCAxMDAwMCwgMSwgMTAwLCAwLCB9LAorCQlDVVNUX1BBUk1fSURfQ09OVFJBU1RfQ1RSTCwKKwl9LCB7CisJCXsgVjRMMl9DSURfSFVFLCBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJImh1ZSIsIDAsIDEwMDAwLCAxLCAxMDAsIDAsIH0sCisJCUNVU1RfUEFSTV9JRF9IVUVfQ1RSTCwKKwl9LCB7CisJCXsgVjRMMl9DSURfU0FUVVJBVElPTiwgVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCSJzYXR1cmF0aW9uIiwgMCwgMTAwMDAsIDEsIDEwMCwgMCwgfSwKKwkJQ1VTVF9QQVJNX0lEX1NBVFVSQVRJT05fQ1RSTCwKKwl9LAorfTsKKworc3RydWN0IHZpZGVvX3N0ZF90b19hdWRpb19zdGQgeworCXY0bDJfc3RkX2lkCXZpZGVvX3N0ZDsKKwlpbnQgCQlhdWRpb19zdGQ7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvX3N0ZF90b19hdWRpb19zdGQgdmlkZW9fdG9fYXVkaW9fbWFwW10gPSB7CisJLyogY291bnRyeSA6IHsgMjcsIDMyLCAzMywgMzQsIDM2LCA0NCwgNDUsIDQ2LCA0NywgNDgsIDY0LAorCQkJNjUsIDg2LCAzNTEsIDM1MiwgMzUzLCAzNTQsIDM1OCwgMzcyLCA4NTIsIDk3MiB9ICovCisJeyAoVjRMMl9TVERfUEFMX0kgfCBWNEwyX1NURF9QQUxfQiB8IFY0TDJfU1REX1BBTF9EIHwKKwkJVjRMMl9TVERfU0VDQU1fTCB8IFY0TDJfU1REX1NFQ0FNX0QpLCBUTEdfVFVORV9BU1REX05JQ0FNIH0sCisKKwkvKiBjb3VudHJ5IDogeyAxLCA1MiwgNTQsIDU1LCA4ODYgfSAqLworCXtWNEwyX1NURF9OVFNDX00gfCBWNEwyX1NURF9QQUxfTiB8IFY0TDJfU1REX1BBTF9NLCBUTEdfVFVORV9BU1REX0JUU0N9LAorCisJLyogY291bnRyeSA6IHsgODEgfSAqLworCXsgVjRMMl9TVERfTlRTQ19NX0pQLCBUTEdfVFVORV9BU1REX0VJQUogfSwKKworCS8qIG90aGVyIGNvdW50cnkgOiBUTEdfVFVORV9BU1REX0EyICovCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtYXBfc2l6ZSA9IEFSUkFZX1NJWkUodmlkZW9fdG9fYXVkaW9fbWFwKTsKKworc3RhdGljIGludCBnZXRfYXVkaW9fc3RkKHY0bDJfc3RkX2lkIHY0bDJfc3RkKQoreworCWludCBpID0gMDsKKworCWZvciAoOyBpIDwgbWFwX3NpemU7IGkrKykgeworCQlpZiAodjRsMl9zdGQgJiB2aWRlb190b19hdWRpb19tYXBbaV0udmlkZW9fc3RkKQorCQkJcmV0dXJuIHZpZGVvX3RvX2F1ZGlvX21hcFtpXS5hdWRpb19zdGQ7CisJfQorCXJldHVybiBUTEdfVFVORV9BU1REX0EyOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmg7CisJc3RydWN0IHBvc2VpZG9uICpwID0gZnJvbnQtPnBkOworCisJbG9ncyhmcm9udCk7CisKKwlzdHJjcHkoY2FwLT5kcml2ZXIsICJ0ZWxlLXZpZGVvIik7CisJc3RyY3B5KGNhcC0+Y2FyZCwgIlRlbGVnZW50IFBvc2VpZG9uIik7CisJdXNiX21ha2VfcGF0aChwLT51ZGV2LCBjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOworCWNhcC0+dmVyc2lvbiA9IEtFUk5FTF9WRVJTSU9OKDAsIDAsIDEpOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1RVTkVSIHwKKwkJCQlWNEwyX0NBUF9BVURJTyB8IFY0TDJfQ0FQX1NUUkVBTUlORyB8CisJCQkJVjRMMl9DQVBfUkVBRFdSSVRFIHwgVjRMMl9DQVBfVkJJX0NBUFRVUkU7CisJcmV0dXJuIDA7Cit9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworc3RhdGljIHZvaWQgaW5pdF9jb3B5KHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbywgYm9vbCBpbmRleCkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSB2aWRlby0+ZnJvbnQ7CisKKwl2aWRlby0+ZmllbGRfY291bnQJPSBpbmRleDsKKwl2aWRlby0+bGluZXNfY29waWVkCT0gMDsKKwl2aWRlby0+cHJldl9sZWZ0CT0gMCA7CisJdmlkZW8tPmRzdCAJCT0gKGNoYXIgKil2aWRlb2J1Zl90b192bWFsbG9jKGZyb250LT5jdXJyX2ZyYW1lKQorCQkJCQkrIGluZGV4ICogdmlkZW8tPmxpbmVzX3NpemU7CisJdmlkZW8tPnZiaS0+Y29waWVkIAk9IDA7IC8qIHNldCBpdCBoZXJlICovCit9CisKK3N0YXRpYyBib29sIGdldF9mcmFtZShzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQsIGludCAqbmVlZF9pbml0KQoreworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiID0gZnJvbnQtPmN1cnJfZnJhbWU7CisKKwlpZiAodmIpCisJCXJldHVybiB0cnVlOworCisJc3Bpbl9sb2NrKCZmcm9udC0+cXVldWVfbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZmcm9udC0+YWN0aXZlKSkgeworCQl2YiA9IGxpc3RfZW50cnkoZnJvbnQtPmFjdGl2ZS5uZXh0LAorCQkJICAgICAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIsIHF1ZXVlKTsKKwkJaWYgKG5lZWRfaW5pdCkKKwkJCSpuZWVkX2luaXQgPSAxOworCQlmcm9udC0+Y3Vycl9mcmFtZSA9IHZiOworCQlsaXN0X2RlbF9pbml0KCZ2Yi0+cXVldWUpOworCX0KKwlzcGluX3VubG9jaygmZnJvbnQtPnF1ZXVlX2xvY2spOworCisJcmV0dXJuICEhdmI7Cit9CisKKy8qIGNoZWNrIGlmIHRoZSB2aWRlbydzIGJ1ZmZlciBpcyByZWFkeSAqLworc3RhdGljIGJvb2wgZ2V0X3ZpZGVvX2ZyYW1lKHN0cnVjdCBmcm9udF9mYWNlICpmcm9udCwgc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvKQoreworCWludCBuZWVkX2luaXQgPSAwOworCWJvb2wgcmV0ID0gdHJ1ZTsKKworCXJldCA9IGdldF9mcmFtZShmcm9udCwgJm5lZWRfaW5pdCk7CisJaWYgKHJldCAmJiBuZWVkX2luaXQpCisJCWluaXRfY29weSh2aWRlbywgMCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc3VibWl0X2ZyYW1lKHN0cnVjdCBmcm9udF9mYWNlICpmcm9udCkKK3sKKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiA9IGZyb250LT5jdXJyX2ZyYW1lOworCisJaWYgKHZiID09IE5VTEwpCisJCXJldHVybjsKKworCWZyb250LT5jdXJyX2ZyYW1lCT0gTlVMTDsKKwl2Yi0+c3RhdGUJCT0gVklERU9CVUZfRE9ORTsKKwl2Yi0+ZmllbGRfY291bnQrKzsKKwlkb19nZXR0aW1lb2ZkYXkoJnZiLT50cyk7CisKKwl3YWtlX3VwKCZ2Yi0+ZG9uZSk7Cit9CisKKy8qCisgKiBBIGZyYW1lIGlzIGNvbXBvc2VkIG9mIHR3byBmaWVsZHMuIElmIHdlIHJlY2VpdmUgYWxsIHRoZSB0d28gZmllbGRzLAorICogY2FsbCB0aGUgIHN1Ym1pdF9mcmFtZSgpIHRvIHN1Ym1pdCB0aGUgd2hvbGUgZnJhbWUgdG8gYXBwbGljYXRpb25zLgorICovCitzdGF0aWMgdm9pZCBlbmRfZmllbGQoc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvKQoreworCS8qIGxvZ3ModmlkZW8tPmZyb250KTsgKi8KKwlpZiAoMSA9PSB2aWRlby0+ZmllbGRfY291bnQpCisJCXN1Ym1pdF9mcmFtZSh2aWRlby0+ZnJvbnQpOworCWVsc2UKKwkJaW5pdF9jb3B5KHZpZGVvLCAxKTsKK30KKworc3RhdGljIHZvaWQgY29weV92aWRlb19kYXRhKHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbywgY2hhciAqc3JjLAorCQkJCXVuc2lnbmVkIGludCBjb3VudCkKK3sKKyNkZWZpbmUgY29weV9kYXRhKGxlbikgIFwKKwlkbyB7IFwKKwkJaWYgKCsrdmlkZW8tPmxpbmVzX2NvcGllZCA+IHZpZGVvLT5saW5lc19wZXJfZmllbGQpIFwKKwkJCWdvdG8gb3ZlcmZsb3c7IFwKKwkJbWVtY3B5KHZpZGVvLT5kc3QsIHNyYywgbGVuKTtcCisJCXZpZGVvLT5kc3QgKz0gbGVuICsgdmlkZW8tPmxpbmVzX3NpemU7IFwKKwkJc3JjICs9IGxlbjsgXAorCQljb3VudCAtPSBsZW47IFwKKwkgfSB3aGlsZSAoMCkKKworCXdoaWxlIChjb3VudCAmJiBjb3VudCA+PSB2aWRlby0+bGluZXNfc2l6ZSkgeworCQlpZiAodmlkZW8tPnByZXZfbGVmdCkgeworCQkJY29weV9kYXRhKHZpZGVvLT5wcmV2X2xlZnQpOworCQkJdmlkZW8tPnByZXZfbGVmdCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQljb3B5X2RhdGEodmlkZW8tPmxpbmVzX3NpemUpOworCX0KKwlpZiAoY291bnQgJiYgY291bnQgPCB2aWRlby0+bGluZXNfc2l6ZSkgeworCQltZW1jcHkodmlkZW8tPmRzdCwgc3JjLCBjb3VudCk7CisKKwkJdmlkZW8tPnByZXZfbGVmdCA9IHZpZGVvLT5saW5lc19zaXplIC0gY291bnQ7CisJCXZpZGVvLT5kc3QgKz0gY291bnQ7CisJfQorCXJldHVybjsKKworb3ZlcmZsb3c6CisJZW5kX2ZpZWxkKHZpZGVvKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfdHJhaWxlcihzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8sIGNoYXIgKnNyYywgaW50IGNvdW50KQoreworCXN0cnVjdCB2YmlfZGF0YSAqdmJpID0gdmlkZW8tPnZiaTsKKwlpbnQgb2Zmc2V0OyAvKiB0cmFpbGVyJ3Mgb2Zmc2V0ICovCisJY2hhciAqYnVmOworCisJb2Zmc2V0ID0gKHZpZGVvLT5jb250ZXh0LnBpeC5zaXplaW1hZ2UgLyAyICsgdmJpLT52Ymlfc2l6ZSAvIDIpCisJCS0gKHZiaS0+Y29waWVkICsgdmlkZW8tPmxpbmVzX3NpemUgKiB2aWRlby0+bGluZXNfY29waWVkKTsKKwlpZiAodmlkZW8tPnByZXZfbGVmdCkKKwkJb2Zmc2V0IC09ICh2aWRlby0+bGluZXNfc2l6ZSAtIHZpZGVvLT5wcmV2X2xlZnQpOworCisJaWYgKG9mZnNldCA+IGNvdW50IHx8IG9mZnNldCA8PSAwKQorCQlnb3RvIHNob3J0X3BhY2thZ2U7CisKKwlidWYgPSBzcmMgKyBvZmZzZXQ7CisKKwkvKiB0cmFpbGVyIDogKFZGSFMpICsgVTMyICsgVTMyICsgZmllbGRfbnVtICovCisJaWYgKCFzdHJuY21wKGJ1ZiwgIlZGSFMiLCA0KSkgeworCQlpbnQgZmllbGRfbnVtID0gKigodTMyICopKGJ1ZiArIDEyKSk7CisKKwkJaWYgKChmaWVsZF9udW0gJiAxKSBeIHZpZGVvLT5maWVsZF9jb3VudCkgeworCQkJaW5pdF9jb3B5KHZpZGVvLCB2aWRlby0+ZmllbGRfY291bnQpOworCQkJcmV0dXJuOworCQl9CisJCWNvcHlfdmlkZW9fZGF0YSh2aWRlbywgc3JjLCBvZmZzZXQpOworCX0KK3Nob3J0X3BhY2thZ2U6CisJZW5kX2ZpZWxkKHZpZGVvKTsKK30KKworLyogPT09PT09PT09PSAgQ2hlY2sgdGhpcyBtb3JlIGNhcmVmdWxseSEgPT09PT09PT09PT0gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3ZiaV9kYXRhKHN0cnVjdCB2YmlfZGF0YSAqdmJpLAorCQkJCWNoYXIgKnNyYywgdW5zaWduZWQgaW50IGNvdW50KQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IHZiaS0+ZnJvbnQ7CisKKwlpZiAoZnJvbnQgJiYgZ2V0X2ZyYW1lKGZyb250LCBOVUxMKSkgeworCQljaGFyICpidWYgPSB2aWRlb2J1Zl90b192bWFsbG9jKGZyb250LT5jdXJyX2ZyYW1lKTsKKworCQlpZiAodmJpLT52aWRlby0+ZmllbGRfY291bnQpCisJCQlidWYgKz0gKHZiaS0+dmJpX3NpemUgLyAyKTsKKwkJbWVtY3B5KGJ1ZiArIHZiaS0+Y29waWVkLCBzcmMsIGNvdW50KTsKKwl9CisJdmJpLT5jb3BpZWQgKz0gY291bnQ7Cit9CisKKy8qCisgKiBDb3B5IHRoZSBub3JtYWwgZGF0YSAoVkJJIG9yIFZJREVPKSB3aXRob3V0IHRoZSB0cmFpbGVyLgorICogVkJJIGlzIG5vdCBpbnRlcmxhY2VkLCB3aGlsZSBWSURFTyBpcyBpbnRlcmxhY2VkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV92YmlfdmlkZW9fZGF0YShzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8sCisJCQkJY2hhciAqc3JjLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJc3RydWN0IHZiaV9kYXRhICp2YmkgPSB2aWRlby0+dmJpOworCXVuc2lnbmVkIGludCB2YmlfZGVsdGEgPSAodmJpLT52Ymlfc2l6ZSAvIDIpIC0gdmJpLT5jb3BpZWQ7CisKKwlpZiAodmJpX2RlbHRhID49IGNvdW50KSB7CisJCWNvcHlfdmJpX2RhdGEodmJpLCBzcmMsIGNvdW50KTsKKwl9IGVsc2UgeworCQlpZiAodmJpX2RlbHRhKSB7CisJCQljb3B5X3ZiaV9kYXRhKHZiaSwgc3JjLCB2YmlfZGVsdGEpOworCisJCQkvKiB3ZSByZWNlaXZlIHRoZSB0d28gZmllbGRzIG9mIHRoZSBWQkkqLworCQkJaWYgKHZiaS0+ZnJvbnQgJiYgdmlkZW8tPmZpZWxkX2NvdW50KQorCQkJCXN1Ym1pdF9mcmFtZSh2YmktPmZyb250KTsKKwkJfQorCQljb3B5X3ZpZGVvX2RhdGEodmlkZW8sIHNyYyArIHZiaV9kZWx0YSwgY291bnQgLSB2YmlfZGVsdGEpOworCX0KK30KKworc3RhdGljIHZvaWQgdXJiX2NvbXBsZXRlX2J1bGsoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8gPSAmZnJvbnQtPnBkLT52aWRlb19kYXRhOworCWNoYXIgKnNyYyA9IChjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IGNvdW50ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCWludCByZXQgPSAwOworCisJaWYgKCF2aWRlby0+aXNfc3RyZWFtaW5nIHx8IHVyYi0+c3RhdHVzKSB7CisJCWlmICh1cmItPnN0YXR1cyA9PSAtRVBST1RPKQorCQkJZ290byByZXNlbmRfaXQ7CisJCXJldHVybjsKKwl9CisJaWYgKCFnZXRfdmlkZW9fZnJhbWUoZnJvbnQsIHZpZGVvKSkKKwkJZ290byByZXNlbmRfaXQ7CisKKwlpZiAoY291bnQgPT0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKQorCQljb3B5X3ZiaV92aWRlb19kYXRhKHZpZGVvLCBzcmMsIGNvdW50KTsKKwllbHNlCisJCWNoZWNrX3RyYWlsZXIodmlkZW8sIHNyYywgY291bnQpOworCityZXNlbmRfaXQ6CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0KQorCQlsb2coIiBzdWJtaXQgZmFpbGVkOiBlcnJvciAlZCIsIHJldCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqIGZvciBJU08gKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBHRVRfU1VDQ0VTUwkJKDApCisjZGVmaW5lIEdFVF9UUkFJTEVSCQkoMSkKKyNkZWZpbmUgR0VUX1RPT19NVUNIX0JVQkJMRQkoMikKKyNkZWZpbmUgR0VUX05PTkUJCSgzKQorc3RhdGljIGludCBnZXRfY2h1bmsoaW50IHN0YXJ0LCBzdHJ1Y3QgdXJiICp1cmIsCisJCQlpbnQgKmhlYWQsIGludCAqdGFpbCwgaW50ICpidWJibGVfZXJyKQoreworCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpwa3QgPSBOVUxMOworCWludCByZXQgPSBHRVRfU1VDQ0VTUzsKKworCWZvciAoKmhlYWQgPSAqdGFpbCA9IC0xOyBzdGFydCA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IHN0YXJ0KyspIHsKKwkJcGt0ID0gJnVyYi0+aXNvX2ZyYW1lX2Rlc2Nbc3RhcnRdOworCisJCS8qIGhhbmRsZSB0aGUgYnViYmxlIG9mIHRoZSBIdWIgKi8KKwkJaWYgKC1FT1ZFUkZMT1cgPT0gcGt0LT5zdGF0dXMpIHsKKwkJCWlmICgrKypidWJibGVfZXJyID4gdXJiLT5udW1iZXJfb2ZfcGFja2V0cyAvIDMpCisJCQkJcmV0dXJuIEdFVF9UT09fTVVDSF9CVUJCTEU7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFRoaXMgaXMgdGhlIGdhcCAqLworCQlpZiAocGt0LT5zdGF0dXMgfHwgcGt0LT5hY3R1YWxfbGVuZ3RoIDw9IDAKKwkJCQl8fCBwa3QtPmFjdHVhbF9sZW5ndGggPiBJU09fUEtUX1NJWkUpIHsKKwkJCWlmICgqaGVhZCAhPSAtMSkKKwkJCQlicmVhazsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogYSBnb29kIGlzb2Nocm9ub3VzIHBhY2tldCAqLworCQlpZiAocGt0LT5hY3R1YWxfbGVuZ3RoID09IElTT19QS1RfU0laRSkgeworCQkJaWYgKCpoZWFkID09IC0xKQorCQkJCSpoZWFkID0gc3RhcnQ7CisJCQkqdGFpbCA9IHN0YXJ0OworCQkJY29udGludWU7CisJCX0KKworCQkvKiB0cmFpbGVyIGlzIGhlcmUgKi8KKwkJaWYgKHBrdC0+YWN0dWFsX2xlbmd0aCA8IElTT19QS1RfU0laRSkgeworCQkJaWYgKCpoZWFkID09IC0xKSB7CisJCQkJKmhlYWQgPSBzdGFydDsKKwkJCQkqdGFpbCA9IHN0YXJ0OworCQkJCXJldHVybiBHRVRfVFJBSUxFUjsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCpoZWFkID09IC0xICYmICp0YWlsID09IC0xKQorCQlyZXQgPSBHRVRfTk9ORTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogfF9ffC0tLS0tLXxfX198LS0tLS18X19fX19fX3wKKyAqICAgICAgIF4gICAgICAgICAgXgorICogICAgICAgfCAgICAgICAgICB8CisgKiAgICAgIGdhcCAgICAgICAgZ2FwCisgKi8KK3N0YXRpYyB2b2lkIHVyYl9jb21wbGV0ZV9pc28oc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8gPSAmZnJvbnQtPnBkLT52aWRlb19kYXRhOworCWludCBidWJibGVfZXJyID0gMCwgaGVhZCA9IDAsIHRhaWwgPSAwOworCWNoYXIgKnNyYyA9IChjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXZpZGVvLT5pc19zdHJlYW1pbmcpCisJCXJldHVybjsKKworCWRvIHsKKwkJaWYgKCFnZXRfdmlkZW9fZnJhbWUoZnJvbnQsIHZpZGVvKSkKKwkJCWdvdG8gb3V0OworCisJCXN3aXRjaCAoZ2V0X2NodW5rKGhlYWQsIHVyYiwgJmhlYWQsICZ0YWlsLCAmYnViYmxlX2VycikpIHsKKwkJY2FzZSBHRVRfU1VDQ0VTUzoKKwkJCWNvcHlfdmJpX3ZpZGVvX2RhdGEodmlkZW8sIHNyYyArIChoZWFkICogSVNPX1BLVF9TSVpFKSwKKwkJCQkJKHRhaWwgLSBoZWFkICsgMSkgKiBJU09fUEtUX1NJWkUpOworCQkJYnJlYWs7CisJCWNhc2UgR0VUX1RSQUlMRVI6CisJCQljaGVja190cmFpbGVyKHZpZGVvLCBzcmMgKyAoaGVhZCAqIElTT19QS1RfU0laRSksCisJCQkJCUlTT19QS1RfU0laRSk7CisJCQlicmVhazsKKwkJY2FzZSBHRVRfTk9ORToKKwkJCWdvdG8gb3V0OworCQljYXNlIEdFVF9UT09fTVVDSF9CVUJCTEU6CisJCQlsb2coIlx0IFdlIGdvdCB0b28gbXVjaCBidWJibGUiKTsKKwkJCXNjaGVkdWxlX3dvcmsoJnZpZGVvLT5idWJibGVfd29yayk7CisJCQlyZXR1cm47CisJCX0KKwl9IHdoaWxlIChoZWFkID0gdGFpbCArIDEsIGhlYWQgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzKTsKKworb3V0OgorCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCkKKwkJbG9nKCJ1c2Jfc3VibWl0X3VyYiBlcnIgOiAlZCIsIHJldCk7Cit9CisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFsgIGVuZCAgXSA9PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgaW50IHByZXBhcmVfaXNvX3VyYihzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8pCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSB2aWRlby0+cGQtPnVkZXY7CisJaW50IGk7CisKKwlpZiAodmlkZW8tPnVyYl9hcnJheVswXSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgU0JVRl9OVU07IGkrKykgeworCQlzdHJ1Y3QgdXJiICp1cmI7CisJCXZvaWQgKm1lbTsKKwkJaW50IGo7CisKKwkJdXJiID0gdXNiX2FsbG9jX3VyYihQS19QRVJfVVJCLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHVyYiA9PSBOVUxMKQorCQkJZ290byBvdXQ7CisKKwkJdmlkZW8tPnVyYl9hcnJheVtpXSA9IHVyYjsKKwkJbWVtID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LAorCQkJCQlJU09fUEtUX1NJWkUgKiBQS19QRVJfVVJCLAorCQkJCQlHRlBfS0VSTkVMLAorCQkJCQkmdXJiLT50cmFuc2Zlcl9kbWEpOworCisJCXVyYi0+Y29tcGxldGUJPSB1cmJfY29tcGxldGVfaXNvOwkvKiBoYW5kbGVyICovCisJCXVyYi0+ZGV2CT0gdWRldjsKKwkJdXJiLT5jb250ZXh0CT0gdmlkZW8tPmZyb250OworCQl1cmItPnBpcGUJPSB1c2JfcmN2aXNvY3BpcGUodWRldiwKKwkJCQkJCXZpZGVvLT5lbmRwb2ludF9hZGRyKTsKKwkJdXJiLT5pbnRlcnZhbAk9IDE7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVAgfCBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cwk9IFBLX1BFUl9VUkI7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyCT0gbWVtOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBQS19QRVJfVVJCICogSVNPX1BLVF9TSVpFOworCisJCWZvciAoaiA9IDA7IGogPCBQS19QRVJfVVJCOyBqKyspIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gSVNPX1BLVF9TSVpFICogajsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gSVNPX1BLVF9TSVpFOworCQl9CisJfQorCXJldHVybiAwOworb3V0OgorCWZvciAoOyBpID4gMDsgaS0tKQorCQk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qIHJldHVybiB0aGUgc3VjY2VlZGVkIG51bWJlciBvZiB0aGUgYWxsb2NhdGlvbiAqLworaW50IGFsbG9jX2J1bGtfdXJic19nZW5lcmljKHN0cnVjdCB1cmIgKip1cmJfYXJyYXksIGludCBudW0sCisJCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdTggZXBfYWRkciwKKwkJCWludCBidWZfc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLAorCQkJdXNiX2NvbXBsZXRlX3QgY29tcGxldGVfZm4sIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHVyYiAqdXJiOworCXZvaWQgKm1lbTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIGdmcF9mbGFncyk7CisJCWlmICh1cmIgPT0gTlVMTCkKKwkJCXJldHVybiBpOworCisJCW1lbSA9IHVzYl9idWZmZXJfYWxsb2ModWRldiwgYnVmX3NpemUsIGdmcF9mbGFncywKKwkJCQkJJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJaWYgKG1lbSA9PSBOVUxMKQorCQkJcmV0dXJuIGk7CisKKwkJdXNiX2ZpbGxfYnVsa191cmIodXJiLCB1ZGV2LCB1c2JfcmN2YnVsa3BpcGUodWRldiwgZXBfYWRkciksCisJCQkJbWVtLCBidWZfc2l6ZSwgY29tcGxldGVfZm4sIGNvbnRleHQpOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCQl1cmJfYXJyYXlbaV0gPSB1cmI7CisJfQorCXJldHVybiBpOworfQorCit2b2lkIGZyZWVfYWxsX3VyYl9nZW5lcmljKHN0cnVjdCB1cmIgKip1cmJfYXJyYXksIGludCBudW0pCit7CisJaW50IGk7CisJc3RydWN0IHVyYiAqdXJiOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXVyYiA9IHVyYl9hcnJheVtpXTsKKwkJaWYgKHVyYikgeworCQkJdXNiX2J1ZmZlcl9mcmVlKHVyYi0+ZGV2LAorCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCQl1cmItPnRyYW5zZmVyX2RtYSk7CisJCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJCXVyYl9hcnJheVtpXSA9IE5VTEw7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgcHJlcGFyZV9idWxrX3VyYihzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8pCit7CisJaWYgKHZpZGVvLT51cmJfYXJyYXlbMF0pCisJCXJldHVybiAwOworCisJYWxsb2NfYnVsa191cmJzX2dlbmVyaWModmlkZW8tPnVyYl9hcnJheSwgU0JVRl9OVU0sCisJCQl2aWRlby0+cGQtPnVkZXYsIHZpZGVvLT5lbmRwb2ludF9hZGRyLAorCQkJMHgyMDAwLCBHRlBfS0VSTkVMLAorCQkJdXJiX2NvbXBsZXRlX2J1bGssIHZpZGVvLT5mcm9udCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGZyZWUgdGhlIFVSQnMgKi8KK3N0YXRpYyB2b2lkIGZyZWVfYWxsX3VyYihzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8pCit7CisJZnJlZV9hbGxfdXJiX2dlbmVyaWModmlkZW8tPnVyYl9hcnJheSwgU0JVRl9OVU0pOworfQorCitzdGF0aWMgdm9pZCBwZF9idWZfcmVsZWFzZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXZpZGVvYnVmX3ZtYWxsb2NfZnJlZSh2Yik7CisJdmItPnN0YXRlID0gVklERU9CVUZfTkVFRFNfSU5JVDsKK30KKworc3RhdGljIHZvaWQgcGRfYnVmX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gcS0+cHJpdl9kYXRhOworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwlsaXN0X2FkZF90YWlsKCZ2Yi0+cXVldWUsICZmcm9udC0+YWN0aXZlKTsKK30KKworc3RhdGljIGludCBwZF9idWZfcHJlcGFyZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAorCQkJICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IHEtPnByaXZfZGF0YTsKKwlpbnQgcmM7CisKKwlzd2l0Y2ggKGZyb250LT50eXBlKSB7CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CisJCWlmIChWSURFT0JVRl9ORUVEU19JTklUID09IHZiLT5zdGF0ZSkgeworCQkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4OworCisJCQlwaXggPSAmZnJvbnQtPnBkLT52aWRlb19kYXRhLmNvbnRleHQucGl4OworCQkJdmItPnNpemUJPSBwaXgtPnNpemVpbWFnZTsgLyogcmVhbCBmcmFtZSBzaXplICovCisJCQl2Yi0+d2lkdGgJPSBwaXgtPndpZHRoOworCQkJdmItPmhlaWdodAk9IHBpeC0+aGVpZ2h0OworCQkJcmMgPSB2aWRlb2J1Zl9pb2xvY2socSwgdmIsIE5VTEwpOworCQkJaWYgKHJjIDwgMCkKKwkJCQlyZXR1cm4gcmM7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOgorCQlpZiAoVklERU9CVUZfTkVFRFNfSU5JVCA9PSB2Yi0+c3RhdGUpIHsKKwkJCXZiLT5zaXplCT0gZnJvbnQtPnBkLT52YmlfZGF0YS52Ymlfc2l6ZTsKKwkJCXJjID0gdmlkZW9idWZfaW9sb2NrKHEsIHZiLCBOVUxMKTsKKwkJCWlmIChyYyA8IDApCisJCQkJcmV0dXJuIHJjOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl2Yi0+ZmllbGQgPSBmaWVsZDsKKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9QUkVQQVJFRDsKKwlyZXR1cm4gMDsKK30KKworaW50IGZpcmVfYWxsX3VyYihzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8pCit7CisJaW50IGksIHJldDsKKworCXZpZGVvLT5pc19zdHJlYW1pbmcgPSAxOworCisJZm9yIChpID0gMDsgaSA8IFNCVUZfTlVNOyBpKyspIHsKKwkJcmV0ID0gdXNiX3N1Ym1pdF91cmIodmlkZW8tPnVyYl9hcnJheVtpXSwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXQpCisJCQlsb2coIiglZCkgZmFpbGVkOiBlcnJvciAlZCIsIGksIHJldCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfdmlkZW9fc3RyZWFtKHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvID0gJnBkLT52aWRlb19kYXRhOworCXMzMiBjbWRfc3RhdHVzOworCisJc2VuZF9zZXRfcmVxKHBkLCBUQUtFX1JFUVVFU1QsIDAsICZjbWRfc3RhdHVzKTsKKwlzZW5kX3NldF9yZXEocGQsIFBMQVlfU0VSVklDRSwgVExHX1RVTkVfUExBWV9TVkNfU1RBUlQsICZjbWRfc3RhdHVzKTsKKworCWlmIChwZC0+Y3VyX3RyYW5zZmVyX21vZGUpIHsKKwkJcHJlcGFyZV9pc29fdXJiKHZpZGVvKTsKKwkJSU5JVF9XT1JLKCZ2aWRlby0+YnViYmxlX3dvcmssIGlzb19idWJibGVfaGFuZGxlcik7CisJfSBlbHNlIHsKKwkJLyogVGhlIGJ1bGsgbW9kZSBkb2VzIG5vdCBuZWVkIGEgYnViYmxlIGhhbmRsZXIgKi8KKwkJcHJlcGFyZV9idWxrX3VyYih2aWRlbyk7CisJfQorCWZpcmVfYWxsX3VyYih2aWRlbyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGRfYnVmX3NldHVwKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgdW5zaWduZWQgaW50ICpjb3VudCwKKwkJICAgICAgIHVuc2lnbmVkIGludCAqc2l6ZSkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBxLT5wcml2X2RhdGE7CisJc3RydWN0IHBvc2VpZG9uICpwZAk9IGZyb250LT5wZDsKKworCXN3aXRjaCAoZnJvbnQtPnR5cGUpIHsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogeworCQlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8gPSAmcGQtPnZpZGVvX2RhdGE7CisJCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZ2aWRlby0+Y29udGV4dC5waXg7CisKKwkJKnNpemUgPSBQQUdFX0FMSUdOKHBpeC0+c2l6ZWltYWdlKTsvKiBwYWdlIGFsaWduZWQgZnJhbWUgc2l6ZSAqLworCQlpZiAoKmNvdW50IDwgNCkKKwkJCSpjb3VudCA9IDQ7CisJCWlmICgxKSB7CisJCQkvKiBzYW1lIGluIGRpZmZlcmVudCBhbHRlcnNldHRpbmcgKi8KKwkJCXZpZGVvLT5lbmRwb2ludF9hZGRyCT0gMHg4MjsKKwkJCXZpZGVvLT52YmkJCT0gJnBkLT52YmlfZGF0YTsKKwkJCXZpZGVvLT52YmktPnZpZGVvCT0gdmlkZW87CisJCQl2aWRlby0+cGQJCT0gcGQ7CisJCQl2aWRlby0+bGluZXNfcGVyX2ZpZWxkCT0gcGl4LT5oZWlnaHQgLyAyOworCQkJdmlkZW8tPmxpbmVzX3NpemUJPSBwaXgtPndpZHRoICogMjsKKwkJCXZpZGVvLT5mcm9udCAJCT0gZnJvbnQ7CisJCX0KKwkJcmV0dXJuIHN0YXJ0X3ZpZGVvX3N0cmVhbShwZCk7CisJfQorCisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOiB7CisJCXN0cnVjdCB2YmlfZGF0YSAqdmJpID0gJnBkLT52YmlfZGF0YTsKKworCQkqc2l6ZSA9IFBBR0VfQUxJR04odmJpLT52Ymlfc2l6ZSk7CisJCWxvZygic2l6ZSA6ICVkIiwgKnNpemUpOworCQlpZiAoKmNvdW50ID09IDApCisJCQkqY291bnQgPSA0OworCX0KKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBwZF92aWRlb19xb3BzID0geworCS5idWZfc2V0dXAgICAgICA9IHBkX2J1Zl9zZXR1cCwKKwkuYnVmX3ByZXBhcmUgICAgPSBwZF9idWZfcHJlcGFyZSwKKwkuYnVmX3F1ZXVlICAgICAgPSBwZF9idWZfcXVldWUsCisJLmJ1Zl9yZWxlYXNlICAgID0gcGRfYnVmX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKK3sKKwlpZiAoQVJSQVlfU0laRShwb3NlaWRvbl9mb3JtYXRzKSA8PSBmLT5pbmRleCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZi0+dHlwZQkJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJZi0+ZmxhZ3MJPSAwOworCWYtPnBpeGVsZm9ybWF0CT0gcG9zZWlkb25fZm9ybWF0c1tmLT5pbmRleF0uZm91cmNjOworCXN0cmNweShmLT5kZXNjcmlwdGlvbiwgcG9zZWlkb25fZm9ybWF0c1tmLT5pbmRleF0ubmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZm10KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZoOworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmcm9udC0+cGQ7CisKKwlsb2dzKGZyb250KTsKKwlmLT5mbXQucGl4ID0gcGQtPnZpZGVvX2RhdGEuY29udGV4dC5waXg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3RyeV9mbXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBWTEMgY2FsbHMgVklESU9DX1NfU1REIGJlZm9yZSBWSURJT0NfU19GTVQsIHdoaWxlCisgKiBNcGxheWVyIGNhbGxzIHRoZW0gaW4gdGhlIHJldmVyc2Ugb3JkZXIuCisgKi8KK3N0YXRpYyBpbnQgcGRfdmlkaW9jX3NfZm10KHN0cnVjdCBwb3NlaWRvbiAqcGQsIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8JPSAmcGQtPnZpZGVvX2RhdGE7CisJc3RydWN0IHJ1bm5pbmdfY29udGV4dCAqY29udGV4dCA9ICZ2aWRlby0+Y29udGV4dDsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXhfZGVmCT0gJmNvbnRleHQtPnBpeDsKKwlzMzIgcmV0ID0gMCwgY21kX3N0YXR1cyA9IDAsIHZpZF9yZXNvbDsKKworCS8qIHNldCB0aGUgcGl4ZWwgZm9ybWF0IHRvIGZpcm13YXJlICovCisJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1JHQjU2NSkgeworCQl2aWRfcmVzb2wgPSBUTEdfVFVORVJfVklEX0ZPUk1BVF9SR0JfNTY1OworCX0gZWxzZSB7CisJCXBpeC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKKwkJdmlkX3Jlc29sID0gVExHX1RVTkVSX1ZJRF9GT1JNQVRfWVVWOworCX0KKwlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFZJREVPX1NUUkVBTV9GTVRfU0VMLAorCQkJCXZpZF9yZXNvbCwgJmNtZF9zdGF0dXMpOworCisJLyogc2V0IHRoZSByZXNvbHV0aW9uIHRvIGZpcm13YXJlICovCisJdmlkX3Jlc29sID0gVExHX1RVTkVfVklEX1JFU183MjA7CisJc3dpdGNoIChwaXgtPndpZHRoKSB7CisJY2FzZSA3MDQ6CisJCXZpZF9yZXNvbCA9IFRMR19UVU5FX1ZJRF9SRVNfNzA0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwaXgtPndpZHRoID0gNzIwOworCWNhc2UgNzIwOgorCQlicmVhazsKKwl9CisJcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgVklERU9fUk9TT0xVX1NFTCwKKwkJCQl2aWRfcmVzb2wsICZjbWRfc3RhdHVzKTsKKwlpZiAocmV0IHx8IGNtZF9zdGF0dXMpIHsKKwkJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcGl4X2RlZi0+cGl4ZWxmb3JtYXQgPSBwaXgtPnBpeGVsZm9ybWF0OyAvKiBzYXZlIGl0ICovCisJcGl4LT5oZWlnaHQgPSAoY29udGV4dC0+dHZub3JtaWQgJiBWNEwyX1NURF81MjVfNjApID8gIDQ4MCA6IDU3NjsKKworCS8qIENvbXBhcmUgd2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5nICovCisJaWYgKChwaXhfZGVmLT53aWR0aCAhPSBwaXgtPndpZHRoKQorCQl8fCAocGl4X2RlZi0+aGVpZ2h0ICE9IHBpeC0+aGVpZ2h0KSkgeworCQlwaXhfZGVmLT53aWR0aAkJPSBwaXgtPndpZHRoOworCQlwaXhfZGVmLT5oZWlnaHQJCT0gcGl4LT5oZWlnaHQ7CisJCXBpeF9kZWYtPmJ5dGVzcGVybGluZQk9IHBpeC0+d2lkdGggKiAyOworCQlwaXhfZGVmLT5zaXplaW1hZ2UgCT0gcGl4LT53aWR0aCAqIHBpeC0+aGVpZ2h0ICogMjsKKwl9CisJKnBpeCA9ICpwaXhfZGVmOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udAk9IGZoOworCXN0cnVjdCBwb3NlaWRvbiAqcGQJCT0gZnJvbnQtPnBkOworCisJbG9ncyhmcm9udCk7CisJLyogc3RvcCBWQkkgaGVyZSAqLworCWlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgIT0gZi0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJaWYgKHBkLT5maWxlX2Zvcl9zdHJlYW0gPT0gTlVMTCkKKwkJcGQtPmZpbGVfZm9yX3N0cmVhbSA9IGZpbGU7CisJZWxzZSBpZiAoZmlsZSAhPSBwZC0+ZmlsZV9mb3Jfc3RyZWFtKSB7CisJCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwZF92aWRpb2Nfc19mbXQocGQsICZmLT5mbXQucGl4KTsKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmJpKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKnY0bDJfZikKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQJPSBmaDsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkCQk9IGZyb250LT5wZDsKKwlzdHJ1Y3QgdjRsMl92YmlfZm9ybWF0ICp2YmlfZm10CT0gJnY0bDJfZi0+Zm10LnZiaTsKKworCXZiaV9mbXQtPnNhbXBsZXNfcGVyX2xpbmUJPSA3MjAgKiAyOworCXZiaV9mbXQtPnNhbXBsaW5nX3JhdGUJCT0gNjc1MDAwMCAqIDQ7CisJdmJpX2ZtdC0+c2FtcGxlX2Zvcm1hdAkJPSBWNEwyX1BJWF9GTVRfR1JFWTsKKwl2YmlfZm10LT5vZmZzZXQJCQk9IDY0ICogNDsgIC8qRklYTUU6IHdoeSBvZmZzZXQgKi8KKwlpZiAocGQtPnZpZGVvX2RhdGEuY29udGV4dC50dm5vcm1pZCAmIFY0TDJfU1REXzUyNV82MCkgeworCQl2YmlfZm10LT5zdGFydFswXSA9IDEwOworCQl2YmlfZm10LT5zdGFydFsxXSA9IDI2NDsKKwkJdmJpX2ZtdC0+Y291bnRbMF0gPSBWNExfTlRTQ19WQklfTElORVM7CisJCXZiaV9mbXQtPmNvdW50WzFdID0gVjRMX05UU0NfVkJJX0xJTkVTOworCX0gZWxzZSB7CisJCXZiaV9mbXQtPnN0YXJ0WzBdID0gNjsKKwkJdmJpX2ZtdC0+c3RhcnRbMV0gPSAzMTQ7CisJCXZiaV9mbXQtPmNvdW50WzBdID0gVjRMX1BBTF9WQklfTElORVM7CisJCXZiaV9mbXQtPmNvdW50WzFdID0gVjRMX1BBTF9WQklfTElORVM7CisJfQorCXZiaV9mbXQtPmZsYWdzID0gVjRMMl9WQklfVU5TWU5DOworCWxvZ3MoZnJvbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9zdGQoc3RydWN0IHBvc2VpZG9uICpwZCwgdjRsMl9zdGRfaWQgKm5vcm0pCit7CisJc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvID0gJnBkLT52aWRlb19kYXRhOworCXN0cnVjdCB2YmlfZGF0YSAqdmJpCT0gJnBkLT52YmlfZGF0YTsKKwlzdHJ1Y3QgcnVubmluZ19jb250ZXh0ICpjb250ZXh0OworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeDsKKwlzMzIgaSwgcmV0ID0gMCwgY21kX3N0YXR1cywgcGFyYW07CisJaW50IGhlaWdodDsKKworCWZvciAoaSA9IDA7IGkgPCBQT1NFSURPTl9UVk5PUk1TOyBpKyspIHsKKwkJaWYgKCpub3JtICYgcG9zZWlkb25fdHZub3Jtc1tpXS52NGwyX2lkKSB7CisJCQlwYXJhbSA9IHBvc2VpZG9uX3R2bm9ybXNbaV0udGxnX3R2bm9ybTsKKwkJCWxvZygibmFtZSA6ICVzIiwgcG9zZWlkb25fdHZub3Jtc1tpXS5uYW1lKTsKKwkJCWdvdG8gZm91bmQ7CisJCX0KKwl9CisJcmV0dXJuIC1FSU5WQUw7Citmb3VuZDoKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBWSURFT19TVERfU0VMLCBwYXJhbSwgJmNtZF9zdGF0dXMpOworCWlmIChyZXQgfHwgY21kX3N0YXR1cykKKwkJZ290byBvdXQ7CisKKwkvKiBTZXQgdmJpIHNpemUgYW5kIGNoZWNrIHRoZSBoZWlnaHQgb2YgdGhlIGZyYW1lICovCisJY29udGV4dCA9ICZ2aWRlby0+Y29udGV4dDsKKwljb250ZXh0LT50dm5vcm1pZCA9IHBvc2VpZG9uX3R2bm9ybXNbaV0udjRsMl9pZDsKKwlpZiAoY29udGV4dC0+dHZub3JtaWQgJiBWNEwyX1NURF81MjVfNjApIHsKKwkJdmJpLT52Ymlfc2l6ZSA9IFY0TF9OVFNDX1ZCSV9GUkFNRVNJWkU7CisJCWhlaWdodCA9IDQ4MDsKKwl9IGVsc2UgeworCQl2YmktPnZiaV9zaXplID0gVjRMX1BBTF9WQklfRlJBTUVTSVpFOworCQloZWlnaHQgPSA1NzY7CisJfQorCisJcGl4ID0gJmNvbnRleHQtPnBpeDsKKwlpZiAocGl4LT5oZWlnaHQgIT0gaGVpZ2h0KSB7CisJCXBpeC0+aGVpZ2h0CT0gaGVpZ2h0OworCQlwaXgtPnNpemVpbWFnZSAJPSBwaXgtPndpZHRoICogcGl4LT5oZWlnaHQgKiAyOworCX0KKworb3V0OgorCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK2ludCB2aWRpb2Nfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB2NGwyX3N0ZF9pZCAqbm9ybSkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaDsKKwlsb2dzKGZyb250KTsKKwlyZXR1cm4gc2V0X3N0ZChmcm9udC0+cGQsIG5vcm0pOworfQorCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfaW5wdXQgKmluKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZoOworCisJaWYgKGluLT5pbmRleCA8IDAgfHwgaW4tPmluZGV4ID49IFBPU0VJRE9OX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3RyY3B5KGluLT5uYW1lLCBwZF9pbnB1dHNbaW4tPmluZGV4XS5uYW1lKTsKKwlpbi0+dHlwZSAgPSBWNEwyX0lOUFVUX1RZUEVfVFVORVI7CisKKwkvKgorCSAqIHRoZSBhdWRpbyBpbnB1dCBpbmRleCBtaXhlZCB3aXRoIHRoaXMgdmlkZW8gaW5wdXQsCisJICogUG9zZWlkb24gb25seSBoYXZlIG9uZSBhdWRpby92aWRlbywgc2V0IHRvICIwIgorCSAqLworCWluLT5hdWRpb3NldAk9IDA7CisJaW4tPnR1bmVyCT0gMDsKKwlpbi0+c3RkCQk9IFY0TDJfU1REX0FMTDsKKwlpbi0+c3RhdHVzCT0gMDsKKwlsb2dzKGZyb250KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCAqaSkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaDsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZnJvbnQtPnBkOworCXN0cnVjdCBydW5uaW5nX2NvbnRleHQgKmNvbnRleHQgPSAmcGQtPnZpZGVvX2RhdGEuY29udGV4dDsKKworCWxvZ3MoZnJvbnQpOworCSppID0gY29udGV4dC0+c2lnX2luZGV4OworCXJldHVybiAwOworfQorCisvKiBXZSBjYW4gc3VwcG9ydCBzZXZlcmFsIGlucHV0cyAqLworc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZoOworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmcm9udC0+cGQ7CisJczMyIHJldCwgY21kX3N0YXR1czsKKworCWlmIChpIDwgMCB8fCBpID49IFBPU0VJRE9OX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBTR05MX1NSQ19TRUwsCisJCQlwZF9pbnB1dHNbaV0udGxnX3NyYywgJmNtZF9zdGF0dXMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwZC0+dmlkZW9fZGF0YS5jb250ZXh0LnNpZ19pbmRleCA9IGk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG9zZWlkb25fY29udHJvbCAqY2hlY2tfY29udHJvbF9pZChfX3UzMiBpZCkKK3sKKwlzdHJ1Y3QgcG9zZWlkb25fY29udHJvbCAqY29udHJvbCA9ICZjb250cm9sc1swXTsKKwlpbnQgYXJyYXlfc2l6ZSA9IEFSUkFZX1NJWkUoY29udHJvbHMpOworCisJZm9yICg7IGNvbnRyb2wgPCAmY29udHJvbHNbYXJyYXlfc2l6ZV07IGNvbnRyb2wrKykKKwkJaWYgKGNvbnRyb2wtPnY0bDJfY3RybC5pZCAgPT0gaWQpCisJCQlyZXR1cm4gY29udHJvbDsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqYSkKK3sKKwlzdHJ1Y3QgcG9zZWlkb25fY29udHJvbCAqY29udHJvbCA9IE5VTEw7CisKKwljb250cm9sID0gY2hlY2tfY29udHJvbF9pZChhLT5pZCk7CisJaWYgKCFjb250cm9sKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSphID0gY29udHJvbC0+djRsMl9jdHJsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZoOworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmcm9udC0+cGQ7CisJc3RydWN0IHBvc2VpZG9uX2NvbnRyb2wgKmNvbnRyb2wgPSBOVUxMOworCXN0cnVjdCB0dW5lcl9jdXN0b21fcGFyYW1ldGVyX3MgdHVuZXJfcGFyYW07CisJczMyIHJldCA9IDAsIGNtZF9zdGF0dXM7CisKKwljb250cm9sID0gY2hlY2tfY29udHJvbF9pZChjdHJsLT5pZCk7CisJaWYgKCFjb250cm9sKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlyZXQgPSBzZW5kX2dldF9yZXEocGQsIFRVTkVSX0NVU1RPTV9QQVJBTUVURVIsIGNvbnRyb2wtPnZjX2lkLAorCQkJJnR1bmVyX3BhcmFtLCAmY21kX3N0YXR1cywgc2l6ZW9mKHR1bmVyX3BhcmFtKSk7CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisKKwlpZiAocmV0IHx8IGNtZF9zdGF0dXMpCisJCXJldHVybiAtMTsKKworCWN0cmwtPnZhbHVlID0gdHVuZXJfcGFyYW0ucGFyYW1fdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmEpCit7CisJc3RydWN0IHR1bmVyX2N1c3RvbV9wYXJhbWV0ZXJfcyBwYXJhbSA9IHswfTsKKwlzdHJ1Y3QgcG9zZWlkb25fY29udHJvbCAqY29udHJvbCA9IE5VTEw7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250CT0gZmg7CisJc3RydWN0IHBvc2VpZG9uICpwZAkJPSBmcm9udC0+cGQ7CisJczMyIHJldCA9IDAsIGNtZF9zdGF0dXMsIHBhcmFtczsKKworCWNvbnRyb2wgPSBjaGVja19jb250cm9sX2lkKGEtPmlkKTsKKwlpZiAoIWNvbnRyb2wpCisJCXJldHVybiAtRUlOVkFMOworCisJcGFyYW0ucGFyYW1fdmFsdWUgPSBhLT52YWx1ZTsKKwlwYXJhbS5wYXJhbV9pZAk9IGNvbnRyb2wtPnZjX2lkOworCXBhcmFtcyA9ICooczMyICopJnBhcmFtOyAvKiB0ZW1wIGNvZGUgKi8KKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFRVTkVSX0NVU1RPTV9QQVJBTUVURVIsIHBhcmFtcywgJmNtZF9zdGF0dXMpOworCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgVEFLRV9SRVFVRVNULCAwLCAmY21kX3N0YXR1cyk7CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCXNjaGVkdWxlX3RpbWVvdXQoSFovNCk7CisJcmV0dXJuIHJldDsKK30KKworLyogQXVkaW8gaW9jdGxzICovCitzdGF0aWMgaW50IHZpZGlvY19lbnVtYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlpZiAoMCAhPSBhLT5pbmRleCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKKwlzdHJjcHkoYS0+bmFtZSwgIlVTQiBhdWRpbyBpbiIpOworCS8qUG9zZWlkb24gaGF2ZSBubyBBVkwgZnVuY3Rpb24uKi8KKwlhLT5tb2RlID0gMDsKKwlyZXR1cm4gMDsKK30KKworaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CisJc3RyY3B5KGEtPm5hbWUsICJVU0IgYXVkaW8gaW4iKTsKKwlhLT5tb2RlID0gMDsKKwlyZXR1cm4gMDsKK30KKworaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJcmV0dXJuICgwID09IGEtPmluZGV4KSA/IDAgOiAtRUlOVkFMOworfQorCisvKiBUdW5lciBpb2N0bHMgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl90dW5lciAqdHVuZXIpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250CT0gZmg7CisJc3RydWN0IHBvc2VpZG9uICpwZAkJPSBmcm9udC0+cGQ7CisJc3RydWN0IHR1bmVyX2F0dl9zaWdfc3RhdF9zIGF0dl9zdGF0OworCXMzMiBjb3VudCA9IDUsIHJldCwgY21kX3N0YXR1czsKKwlpbnQgaW5kZXg7CisKKwlpZiAoMCAhPSB0dW5lci0+aW5kZXgpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCXJldCA9IHNlbmRfZ2V0X3JlcShwZCwgVFVORVJfU1RBVFVTLCBUTEdfTU9ERV9BTkFMT0dfVFYsCisJCQkJJmF0dl9zdGF0LCAmY21kX3N0YXR1cywgc2l6ZW9mKGF0dl9zdGF0KSk7CisKKwl3aGlsZSAoYXR2X3N0YXQuc2lnX2xvY2tfYnVzeSAmJiBjb3VudC0tICYmICFyZXQpIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dChIWik7CisKKwkJcmV0ID0gc2VuZF9nZXRfcmVxKHBkLCBUVU5FUl9TVEFUVVMsIFRMR19NT0RFX0FOQUxPR19UViwKKwkJCQkmYXR2X3N0YXQsICZjbWRfc3RhdHVzLCBzaXplb2YoYXR2X3N0YXQpKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisKKwlpZiAoZGVidWdfbW9kZSkKKwkJbG9nKCJQOiVkLFM6JWQiLCBhdHZfc3RhdC5zaWdfcHJlc2VudCwgYXR2X3N0YXQuc2lnX3N0cmVuZ3RoKTsKKworCWlmIChyZXQgfHwgY21kX3N0YXR1cykKKwkJdHVuZXItPnNpZ25hbCA9IDA7CisJZWxzZSBpZiAoYXR2X3N0YXQuc2lnX3ByZXNlbnQgJiYgIWF0dl9zdGF0LnNpZ19zdHJlbmd0aCkKKwkJdHVuZXItPnNpZ25hbCA9IDB4RkZGRjsKKwllbHNlCisJCXR1bmVyLT5zaWduYWwgPSAoYXR2X3N0YXQuc2lnX3N0cmVuZ3RoICogMjU1IC8gMTApIDw8IDg7CisKKwlzdHJjcHkodHVuZXItPm5hbWUsICJUZWxlZ2VudCBTeXN0ZW1zIik7CisJdHVuZXItPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKKwl0dW5lci0+cmFuZ2Vsb3cgPSBUVU5FUl9GUkVRX01JTiAvIDYyNTAwOworCXR1bmVyLT5yYW5nZWhpZ2ggPSBUVU5FUl9GUkVRX01BWCAvIDYyNTAwOworCXR1bmVyLT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTk9STSB8IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8CisJCQkJVjRMMl9UVU5FUl9DQVBfTEFORzEgfCBWNEwyX1RVTkVSX0NBUF9MQU5HMjsKKwlpbmRleCA9IHBkLT52aWRlb19kYXRhLmNvbnRleHQuYXVkaW9faWR4OworCXR1bmVyLT5yeHN1YmNoYW5zID0gcGRfYXVkaW9fbW9kZXNbaW5kZXhdLnY0bDJfYXVkaW9fc3ViOworCXR1bmVyLT5hdWRtb2RlID0gcGRfYXVkaW9fbW9kZXNbaW5kZXhdLnY0bDJfYXVkaW9fbW9kZTsKKwl0dW5lci0+YWZjID0gMDsKKwlsb2dzKGZyb250KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwZF92aWRpb2Nfc190dW5lcihzdHJ1Y3QgcG9zZWlkb24gKnBkLCBpbnQgaW5kZXgpCit7CisJczMyIHJldCA9IDAsIGNtZF9zdGF0dXMsIHBhcmFtLCBhdWRpb21vZGU7CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJcGFyYW0gPSBwZF9hdWRpb19tb2Rlc1tpbmRleF0udGxnX2F1ZGlvX21vZGU7CisJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBUVU5FUl9BVURfTU9ERSwgcGFyYW0sICZjbWRfc3RhdHVzKTsKKwlhdWRpb21vZGUgPSBnZXRfYXVkaW9fc3RkKHBkLT52aWRlb19kYXRhLmNvbnRleHQudHZub3JtaWQpOworCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFRVTkVSX0FVRF9BTkFfU1RELCBhdWRpb21vZGUsCisJCQkJJmNtZF9zdGF0dXMpOworCWlmICghcmV0KQorCQlwZC0+dmlkZW9fZGF0YS5jb250ZXh0LmF1ZGlvX2lkeCA9IGluZGV4OworCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl90dW5lciAqYSkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQJPSBmaDsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkCQk9IGZyb250LT5wZDsKKwlpbnQgaW5kZXg7CisKKwlpZiAoMCAhPSBhLT5pbmRleCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbG9ncyhmcm9udCk7CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgUE9TRUlET05fQVVESU9NT0RTOyBpbmRleCsrKQorCQlpZiAoYS0+YXVkbW9kZSA9PSBwZF9hdWRpb19tb2Rlc1tpbmRleF0udjRsMl9hdWRpb19tb2RlKQorCQkJcmV0dXJuIHBkX3ZpZGlvY19zX3R1bmVyKHBkLCBpbmRleCk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaDsKKwlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZnJvbnQtPnBkOworCXN0cnVjdCBydW5uaW5nX2NvbnRleHQgKmNvbnRleHQgPSAmcGQtPnZpZGVvX2RhdGEuY29udGV4dDsKKworCWlmICgwICE9IGZyZXEtPnR1bmVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlmcmVxLT5mcmVxdWVuY3kgPSBjb250ZXh0LT5mcmVxOworCWZyZXEtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfZnJlcXVlbmN5KHN0cnVjdCBwb3NlaWRvbiAqcGQsIF9fdTMyIGZyZXF1ZW5jeSkKK3sKKwlzMzIgcmV0ID0gMCwgcGFyYW0sIGNtZF9zdGF0dXM7CisJc3RydWN0IHJ1bm5pbmdfY29udGV4dCAqY29udGV4dCA9ICZwZC0+dmlkZW9fZGF0YS5jb250ZXh0OworCisJcGFyYW0gPSBmcmVxdWVuY3kgKiA2MjUwMCAvIDEwMDA7CisJaWYgKHBhcmFtIDwgVFVORVJfRlJFUV9NSU4vMTAwMCB8fCBwYXJhbSA+IFRVTkVSX0ZSRVFfTUFYIC8gMTAwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZwZC0+bG9jayk7CisJcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBUVU5FX0ZSRVFfU0VMRUNULCBwYXJhbSwgJmNtZF9zdGF0dXMpOworCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgVEFLRV9SRVFVRVNULCAwLCAmY21kX3N0YXR1cyk7CisKKwltc2xlZXAoMjUwKTsgLyogd2FpdCBmb3IgYSB3aGlsZSB1bnRpbCB0aGUgaGFyZHdhcmUgaXMgcmVhZHkuICovCisJY29udGV4dC0+ZnJlcSA9IGZyZXF1ZW5jeTsKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZoOworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmcm9udC0+cGQ7CisKKwlsb2dzKGZyb250KTsKKyNpZmRlZiBDT05GSUdfUE0KKwlwZC0+cG1fc3VzcGVuZCA9IHBtX3ZpZGVvX3N1c3BlbmQ7CisJcGQtPnBtX3Jlc3VtZSA9IHBtX3ZpZGVvX3Jlc3VtZTsKKyNlbmRpZgorCXJldHVybiBzZXRfZnJlcXVlbmN5KHBkLCBmcmVxLT5mcmVxdWVuY3kpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqYikKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJbG9ncyhmcm9udCk7CisJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoJmZyb250LT5xLCBiKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWxvZ3MoZnJvbnQpOworCXJldHVybiB2aWRlb2J1Zl9xdWVyeWJ1ZigmZnJvbnQtPnEsIGIpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYnVmZmVyICpiKQoreworCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gdmlkZW9idWZfcWJ1ZigmZnJvbnQtPnEsIGIpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKCZmcm9udC0+cSwgYiwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworfQorCisvKiBKdXN0IHN0b3AgdGhlIFVSQnMsIGRvIG5vdCBmcmVlIHRoZSBVUkJzICovCitpbnQgdXNiX3RyYW5zZmVyX3N0b3Aoc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvKQoreworCWlmICh2aWRlby0+aXNfc3RyZWFtaW5nKSB7CisJCWludCBpOworCQlzMzIgY21kX3N0YXR1czsKKwkJc3RydWN0IHBvc2VpZG9uICpwZCA9IHZpZGVvLT5wZDsKKworCQl2aWRlby0+aXNfc3RyZWFtaW5nID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IFNCVUZfTlVNOyArK2kpIHsKKwkJCWlmICh2aWRlby0+dXJiX2FycmF5W2ldKQorCQkJCXVzYl9raWxsX3VyYih2aWRlby0+dXJiX2FycmF5W2ldKTsKKwkJfQorCisJCXNlbmRfc2V0X3JlcShwZCwgUExBWV9TRVJWSUNFLCBUTEdfVFVORV9QTEFZX1NWQ19TVE9QLAorCQkJICAgICAgICZjbWRfc3RhdHVzKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBzdG9wX2FsbF92aWRlb19zdHJlYW0oc3RydWN0IHBvc2VpZG9uICpwZCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8gPSAmcGQtPnZpZGVvX2RhdGE7CisJc3RydWN0IHZiaV9kYXRhICp2YmkJPSAmcGQtPnZiaV9kYXRhOworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCWlmICh2aWRlby0+aXNfc3RyZWFtaW5nKSB7CisJCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IHZpZGVvLT5mcm9udDsKKworCQkvKiBzdG9wIHRoZSBVUkJzICovCisJCXVzYl90cmFuc2Zlcl9zdG9wKHZpZGVvKTsKKwkJZnJlZV9hbGxfdXJiKHZpZGVvKTsKKworCQkvKiBzdG9wIHRoZSBob3N0IHNpZGUgb2YgVklERU8gKi8KKwkJdmlkZW9idWZfc3RvcCgmZnJvbnQtPnEpOworCQl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZyb250LT5xKTsKKworCQkvKiBzdG9wIHRoZSBob3N0IHNpZGUgb2YgVkJJICovCisJCWZyb250ID0gdmJpLT5mcm9udDsKKwkJaWYgKGZyb250KSB7CisJCQl2aWRlb2J1Zl9zdG9wKCZmcm9udC0+cSk7CisJCQl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZyb250LT5xKTsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBidWJibGVzIGNhbiBzZXJpb3VzbHkgZGFtYWdlIHRoZSB2aWRlbydzIHF1YWxpdHksCisgKiB0aG91Z2ggaXQgb2NjdXJzIGluIHZlcnkgcmFyZSBzaXR1YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIGlzb19idWJibGVfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCit7CisJc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvOworCXN0cnVjdCBwb3NlaWRvbiAqcGQ7CisKKwl2aWRlbyA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgdmlkZW9fZGF0YSwgYnViYmxlX3dvcmspOworCXBkID0gdmlkZW8tPnBkOworCisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCXVzYl90cmFuc2Zlcl9zdG9wKHZpZGVvKTsKKwltc2xlZXAoNTAwKTsKKwlzdGFydF92aWRlb19zdHJlYW0ocGQpOworCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworfQorCisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaDsKKworCWxvZ3MoZnJvbnQpOworCWlmICh1bmxpa2VseSh0eXBlICE9IGZyb250LT50eXBlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKCZmcm9udC0+cSk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJbG9ncyhmcm9udCk7CisJaWYgKHVubGlrZWx5KHR5cGUgIT0gZnJvbnQtPnR5cGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb2ZmKCZmcm9udC0+cSk7Cit9CisKKy8qIFNldCB0aGUgZmlybXdhcmUncyBkZWZhdWx0IHZhbHVlcyA6IG5lZWQgYWx0ZXJzZXR0aW5nICovCitzdGF0aWMgaW50IHBkX3ZpZGVvX2NoZWNrbW9kZShzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCXMzMiByZXQgPSAwLCBjbWRfc3RhdHVzLCBhdWRpb21vZGU7CisKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCXNjaGVkdWxlX3RpbWVvdXQoSFovMik7CisKKwkvKiBjaG9vc2UgdGhlIGFsdGVyc2V0dGluZyAqLworCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKHBkLT51ZGV2LCAwLAorCQkJCQkocGQtPmN1cl90cmFuc2Zlcl9tb2RlID8KKwkJCQkJIElTT18zS19CVUxLX0FMVEVSTkFURV9JRkFDRSA6CisJCQkJCSBCVUxLX0FMVEVSTkFURV9JRkFDRSkpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogc2V0IGRlZmF1bHQgcGFyYW1ldGVycyBmb3IgUEFMLUQgLCB3aXRoIHRoZSBWQkkgZW5hYmxlZCovCisJcmV0ID0gc2V0X3R1bmVyX21vZGUocGQsIFRMR19NT0RFX0FOQUxPR19UVik7CisJcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgU0dOTF9TUkNfU0VMLAorCQkJCVRMR19TSUdfU1JDX0FOVEVOTkEsICZjbWRfc3RhdHVzKTsKKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHBkLCBWSURFT19TVERfU0VMLAorCQkJCVRMR19UVU5FX1ZTVERfUEFMX0QsICZjbWRfc3RhdHVzKTsKKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHBkLCBWSURFT19TVFJFQU1fRk1UX1NFTCwKKwkJCQlUTEdfVFVORVJfVklEX0ZPUk1BVF9ZVVYsICZjbWRfc3RhdHVzKTsKKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHBkLCBWSURFT19ST1NPTFVfU0VMLAorCQkJCVRMR19UVU5FX1ZJRF9SRVNfNzIwLCAmY21kX3N0YXR1cyk7CisJcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgVFVORV9GUkVRX1NFTEVDVCwgVFVORVJfRlJFUV9NSU4sICZjbWRfc3RhdHVzKTsKKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHBkLCBWQklfREFUQV9TRUwsIDEsICZjbWRfc3RhdHVzKTsvKiBlbmFibGUgdmJpICovCisKKwkvKiBzZXQgdGhlIGF1ZGlvICovCisJYXVkaW9tb2RlID0gZ2V0X2F1ZGlvX3N0ZChwZC0+dmlkZW9fZGF0YS5jb250ZXh0LnR2bm9ybWlkKTsKKwlyZXQgfD0gc2VuZF9zZXRfcmVxKHBkLCBUVU5FUl9BVURfQU5BX1NURCwgYXVkaW9tb2RlLCAmY21kX3N0YXR1cyk7CisJcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgVFVORVJfQVVEX01PREUsCisJCQkJVExHX1RVTkVfVFZBVURJT19NT0RFX1NURVJFTywgJmNtZF9zdGF0dXMpOworCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIEFVRElPX1NBTVBMRV9SQVRFX1NFTCwKKwkJCQlBVFZfQVVESU9fUkFURV80OEssICZjbWRfc3RhdHVzKTsKK2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcG1fdmlkZW9fc3VzcGVuZChzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCS8qIHN0b3AgYXVkaW8gKi8KKwlwbV9hbHNhX3N1c3BlbmQocGQpOworCisJLyogc3RvcCBhbmQgZnJlZSBhbGwgdGhlIFVSQnMgKi8KKwl1c2JfdHJhbnNmZXJfc3RvcCgmcGQtPnZpZGVvX2RhdGEpOworCWZyZWVfYWxsX3VyYigmcGQtPnZpZGVvX2RhdGEpOworCisJLyogcmVzZXQgdGhlIGludGVyZmFjZSAqLworCXVzYl9zZXRfaW50ZXJmYWNlKHBkLT51ZGV2LCAwLCAwKTsKKwltc2xlZXAoMzAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZXN0b3JlX3Y0bDJfY29udGV4dChzdHJ1Y3QgcG9zZWlkb24gKnBkLAorCQkJCXN0cnVjdCBydW5uaW5nX2NvbnRleHQgKmNvbnRleHQpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gcGQtPnZpZGVvX2RhdGEuZnJvbnQ7CisKKwlwZF92aWRlb19jaGVja21vZGUocGQpOworCisJc2V0X3N0ZChwZCwgJmNvbnRleHQtPnR2bm9ybWlkKTsKKwl2aWRpb2Nfc19pbnB1dChOVUxMLCBmcm9udCwgY29udGV4dC0+c2lnX2luZGV4KTsKKwlwZF92aWRpb2Nfc190dW5lcihwZCwgY29udGV4dC0+YXVkaW9faWR4KTsKKwlwZF92aWRpb2Nfc19mbXQocGQsICZjb250ZXh0LT5waXgpOworCXNldF9mcmVxdWVuY3kocGQsIGNvbnRleHQtPmZyZXEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBtX3ZpZGVvX3Jlc3VtZShzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCXN0cnVjdCB2aWRlb19kYXRhICp2aWRlbyA9ICZwZC0+dmlkZW9fZGF0YTsKKworCS8qIHJlc3VtZSB0aGUgdmlkZW8gKi8KKwkvKiBbMV0gcmVzdG9yZSB0aGUgb3JpZ2luIFY0TDIgcGFyYW1ldGVycyAqLworCXJlc3RvcmVfdjRsMl9jb250ZXh0KHBkLCAmdmlkZW8tPmNvbnRleHQpOworCisJLyogWzJdIGluaXRpYXRlIHZpZGVvIGNvcHkgdmFyaWFibGVzICovCisJaWYgKHZpZGVvLT5mcm9udC0+Y3Vycl9mcmFtZSkKKwkJaW5pdF9jb3B5KHZpZGVvLCAwKTsKKworCS8qIFszXSBmaXJlIHVyYnMJKi8KKwlzdGFydF92aWRlb19zdHJlYW0ocGQpOworCisJLyogcmVzdW1lIHRoZSBhdWRpbyAqLworCXBtX2Fsc2FfcmVzdW1lKHBkKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCit2b2lkIHNldF9kZWJ1Z19tb2RlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCwgaW50IGRlYnVnX21vZGUpCit7CisJdmZkLT5kZWJ1ZyA9IDA7CisJaWYgKGRlYnVnX21vZGUgJiAweDEpCisJCXZmZC0+ZGVidWcgPSBWNEwyX0RFQlVHX0lPQ1RMOworCWlmIChkZWJ1Z19tb2RlICYgMHgyKQorCQl2ZmQtPmRlYnVnID0gVjRMMl9ERUJVR19JT0NUTCB8IFY0TDJfREVCVUdfSU9DVExfQVJHOworfQorCitzdGF0aWMgdm9pZCBpbml0X3ZpZGVvX2NvbnRleHQoc3RydWN0IHJ1bm5pbmdfY29udGV4dCAqY29udGV4dCkKK3sKKwljb250ZXh0LT5zaWdfaW5kZXgJPSAwOworCWNvbnRleHQtPmF1ZGlvX2lkeAk9IDE7IC8qIHN0ZXJlbyAqLworCWNvbnRleHQtPnR2bm9ybWlkICAJPSBWNEwyX1NURF9QQUxfRDsKKwljb250ZXh0LT5waXggPSAoc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCkgeworCQkJCS53aWR0aAkJPSA3MjAsCisJCQkJLmhlaWdodAkJPSA1NzYsCisJCQkJLnBpeGVsZm9ybWF0CT0gVjRMMl9QSVhfRk1UX1lVWVYsCisJCQkJLmZpZWxkCQk9IFY0TDJfRklFTERfSU5URVJMQUNFRCwKKwkJCQkuYnl0ZXNwZXJsaW5lCT0gNzIwICogMiwKKwkJCQkuc2l6ZWltYWdlCT0gNzIwICogNTc2ICogMiwKKwkJCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0sCisJCQkJLnByaXYJCT0gMAorCQkJfTsKK30KKworc3RhdGljIGludCBwZF92aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHBvc2VpZG9uICpwZCA9IHZpZGVvX2dldF9kcnZkYXRhKHZmZCk7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gTlVMTDsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKKwl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UocGQtPmludGVyZmFjZSk7CisKKwlpZiAodmZkLT52ZmxfdHlwZSA9PSBWRkxfVFlQRV9HUkFCQkVSCisJCSYmICEocGQtPnN0YXRlICYgUE9TRUlET05fU1RBVEVfQU5BTE9HKSkgeworCQlmcm9udCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmcm9udF9mYWNlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZnJvbnQpCisJCQlnb3RvIG91dDsKKworCQlwZC0+Y3VyX3RyYW5zZmVyX21vZGUJPSB1c2JfdHJhbnNmZXJfbW9kZTsvKiBidWxrIG9yIGlzbyAqLworCQlpbml0X3ZpZGVvX2NvbnRleHQoJnBkLT52aWRlb19kYXRhLmNvbnRleHQpOworCisJCXJldCA9IHBkX3ZpZGVvX2NoZWNrbW9kZShwZCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlrZnJlZShmcm9udCk7CisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcGQtPnN0YXRlCQl8PSBQT1NFSURPTl9TVEFURV9BTkFMT0c7CisJCWZyb250LT50eXBlCQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJcGQtPnZpZGVvX2RhdGEudXNlcnMrKzsKKwkJc2V0X2RlYnVnX21vZGUodmZkLCBkZWJ1Z19tb2RlKTsKKworCQl2aWRlb2J1Zl9xdWV1ZV92bWFsbG9jX2luaXQoJmZyb250LT5xLCAmcGRfdmlkZW9fcW9wcywKKwkJCQlOVUxMLCAmZnJvbnQtPnF1ZXVlX2xvY2ssCisJCQkJVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQkJCVY0TDJfRklFTERfSU5URVJMQUNFRCwvKiB2aWRlbyBpcyBpbnRlcmxhY2QgKi8KKwkJCQlzaXplb2Yoc3RydWN0IHZpZGVvYnVmX2J1ZmZlciksLyppdCdzIGVub3VnaCovCisJCQkJZnJvbnQpOworCX0gZWxzZSBpZiAodmZkLT52ZmxfdHlwZSA9PSBWRkxfVFlQRV9WQkkKKwkJJiYgIShwZC0+c3RhdGUgJiBQT1NFSURPTl9TVEFURV9WQkkpKSB7CisJCWZyb250ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZyb250X2ZhY2UpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFmcm9udCkKKwkJCWdvdG8gb3V0OworCisJCXBkLT5zdGF0ZQl8PSBQT1NFSURPTl9TVEFURV9WQkk7CisJCWZyb250LT50eXBlCT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKKwkJcGQtPnZiaV9kYXRhLmZyb250ID0gZnJvbnQ7CisJCXBkLT52YmlfZGF0YS51c2VycysrOworCisJCXZpZGVvYnVmX3F1ZXVlX3ZtYWxsb2NfaW5pdCgmZnJvbnQtPnEsICZwZF92aWRlb19xb3BzLAorCQkJCU5VTEwsICZmcm9udC0+cXVldWVfbG9jaywKKwkJCQlWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFLAorCQkJCVY0TDJfRklFTERfTk9ORSwgLyogdmJpIGlzIE5PTkUgbW9kZSAqLworCQkJCXNpemVvZihzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyKSwKKwkJCQlmcm9udCk7CisJfSBlbHNlIHsKKwkJLyogbWF5YmUgYWRkIEZNIHN1cHBvcnQgaGVyZSAqLworCQlsb2coIm90aGVyICIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlmcm9udC0+cGQJCT0gcGQ7CisJZnJvbnQtPmN1cnJfZnJhbWUJPSBOVUxMOworCUlOSVRfTElTVF9IRUFEKCZmcm9udC0+YWN0aXZlKTsKKwlzcGluX2xvY2tfaW5pdCgmZnJvbnQtPnF1ZXVlX2xvY2spOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhCT0gZnJvbnQ7CisJa3JlZl9nZXQoJnBkLT5rcmVmKTsKKworCW11dGV4X3VubG9jaygmcGQtPmxvY2spOworCXJldHVybiAwOworb3V0OgorCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsKKwltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBkX3ZpZGVvX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmcm9udC0+cGQ7CisJczMyIGNtZF9zdGF0dXMgPSAwOworCisJbG9ncyhmcm9udCk7CisJbXV0ZXhfbG9jaygmcGQtPmxvY2spOworCisJaWYgKGZyb250LT50eXBlCT09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQlwZC0+c3RhdGUgJj0gflBPU0VJRE9OX1NUQVRFX0FOQUxPRzsKKworCQkvKiBzdG9wIHRoZSBkZXZpY2UsIGFuZCBmcmVlIHRoZSBVUkJzICovCisJCXVzYl90cmFuc2Zlcl9zdG9wKCZwZC0+dmlkZW9fZGF0YSk7CisJCWZyZWVfYWxsX3VyYigmcGQtPnZpZGVvX2RhdGEpOworCisJCS8qIHN0b3AgdGhlIGZpcm13YXJlICovCisJCXNlbmRfc2V0X3JlcShwZCwgUExBWV9TRVJWSUNFLCBUTEdfVFVORV9QTEFZX1NWQ19TVE9QLAorCQkJICAgICAgICZjbWRfc3RhdHVzKTsKKworCQlwZC0+ZmlsZV9mb3Jfc3RyZWFtID0gTlVMTDsKKwkJcGQtPnZpZGVvX2RhdGEudXNlcnMtLTsKKwl9IGVsc2UgaWYgKGZyb250LT50eXBlCT09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpIHsKKwkJcGQtPnN0YXRlICY9IH5QT1NFSURPTl9TVEFURV9WQkk7CisJCXBkLT52YmlfZGF0YS5mcm9udCA9IE5VTEw7CisJCXBkLT52YmlfZGF0YS51c2Vycy0tOworCX0KKwl2aWRlb2J1Zl9zdG9wKCZmcm9udC0+cSk7CisJdmlkZW9idWZfbW1hcF9mcmVlKCZmcm9udC0+cSk7CisKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UocGQtPmludGVyZmFjZSk7CisJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CisKKwlrZnJlZShmcm9udCk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlrcmVmX3B1dCgmcGQtPmtyZWYsIHBvc2VpZG9uX2RlbGV0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGRfdmlkZW9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXJldHVybiAgdmlkZW9idWZfbW1hcF9tYXBwZXIoJmZyb250LT5xLCB2bWEpOworfQorCit1bnNpZ25lZCBpbnQgcGRfdmlkZW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqdGFibGUpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXJldHVybiB2aWRlb2J1Zl9wb2xsX3N0cmVhbShmaWxlLCAmZnJvbnQtPnEsIHRhYmxlKTsKK30KKworc3NpemVfdCBwZF92aWRlb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXJldHVybiB2aWRlb2J1Zl9yZWFkX3N0cmVhbSgmZnJvbnQtPnEsIGJ1ZmZlciwgY291bnQsIHBwb3MsCisJCQkJMCwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworfQorCisvKiBUaGlzIHN0cnVjdCB3b3JrcyBmb3IgYm90aCBWSURFTyBhbmQgVkJJICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHBkX3ZpZGVvX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHBkX3ZpZGVvX29wZW4sCisJLnJlbGVhc2UJPSBwZF92aWRlb19yZWxlYXNlLAorCS5yZWFkCQk9IHBkX3ZpZGVvX3JlYWQsCisJLnBvbGwJCT0gcGRfdmlkZW9fcG9sbCwKKwkubW1hcAkJPSBwZF92aWRlb19tbWFwLAorCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsIC8qIG1heWJlIGNoYW5nZWQgaW4gZnV0dXJlICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHBkX3ZpZGVvX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwCT0gdmlkaW9jX3F1ZXJ5Y2FwLAorCisJLyogVmlkZW8gZm9ybWF0ICovCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwCT0gdmlkaW9jX2dfZm10LAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcAk9IHZpZGlvY19lbnVtX2ZtdCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAJPSB2aWRpb2Nfc19mbXQsCisJLnZpZGlvY19nX2ZtdF92YmlfY2FwCT0gdmlkaW9jX2dfZm10X3ZiaSwgLyogVkJJICovCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgPSB2aWRpb2NfdHJ5X2ZtdCwKKworCS8qIElucHV0ICovCisJLnZpZGlvY19nX2lucHV0CQk9IHZpZGlvY19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dAkJPSB2aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2VudW1faW5wdXQJPSB2aWRpb2NfZW51bV9pbnB1dCwKKworCS8qIEF1ZGlvIGlvY3RscyAqLworCS52aWRpb2NfZW51bWF1ZGlvCT0gdmlkaW9jX2VudW1hdWRpbywKKwkudmlkaW9jX2dfYXVkaW8JCT0gdmlkaW9jX2dfYXVkaW8sCisJLnZpZGlvY19zX2F1ZGlvCQk9IHZpZGlvY19zX2F1ZGlvLAorCisJLyogVHVuZXIgaW9jdGxzICovCisJLnZpZGlvY19nX3R1bmVyCQk9IHZpZGlvY19nX3R1bmVyLAorCS52aWRpb2Nfc190dW5lcgkJPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX3Nfc3RkCQk9IHZpZGlvY19zX3N0ZCwKKwkudmlkaW9jX2dfZnJlcXVlbmN5CT0gdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kJPSB2aWRpb2Nfc19mcmVxdWVuY3ksCisKKwkvKiBCdWZmZXIgaGFuZGxlcnMgKi8KKwkudmlkaW9jX3JlcWJ1ZnMJCT0gdmlkaW9jX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1Zgk9IHZpZGlvY19xdWVyeWJ1ZiwKKwkudmlkaW9jX3FidWYJCT0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZgkJPSB2aWRpb2NfZHFidWYsCisKKwkvKiBTdHJlYW0gb24vb2ZmICovCisJLnZpZGlvY19zdHJlYW1vbgk9IHZpZGlvY19zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZgk9IHZpZGlvY19zdHJlYW1vZmYsCisKKwkvKiBDb250cm9sIGhhbmRsaW5nICovCisJLnZpZGlvY19xdWVyeWN0cmwJPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2NfZ19jdHJsCQk9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwJCT0gdmlkaW9jX3NfY3RybCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHBkX3ZpZGVvX3RlbXBsYXRlID0geworCS5uYW1lID0gIlRlbGVnZW50LVZpZGVvIiwKKwkuZm9wcyA9ICZwZF92aWRlb19mb3BzLAorCS5taW5vciA9IC0xLAorCS5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCisJLnR2bm9ybXMgPSBWNEwyX1NURF9BTEwsCisJLmlvY3RsX29wcyA9ICZwZF92aWRlb19pb2N0bF9vcHMsCit9OworCitzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2X2luaXQoc3RydWN0IHBvc2VpZG9uICpwZCwgc3RydWN0IHZpZGVvX2RldmljZSAqdG1wKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZDsKKworCXZmZCA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmICh2ZmQgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJKnZmZAkJPSAqdG1wOworCXZmZC0+bWlub3IJPSAtMTsKKwl2ZmQtPnY0bDJfZGV2CT0gJnBkLT52NGwyX2RldjsKKwkvKnZmZC0+cGFyZW50CT0gJihwZC0+dWRldi0+ZGV2KTsgKi8KKwl2ZmQtPnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSh2ZmQsIHBkKTsKKwlyZXR1cm4gdmZkOworfQorCit2b2lkIGRlc3Ryb3lfdmlkZW9fZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKip2X2RldikKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSAqdl9kZXY7CisKKwlpZiAoZGV2ID09IE5VTEwpCisJCXJldHVybjsKKworCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKGRldikpCisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldik7CisJZWxzZQorCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYpOworCSp2X2RldiA9IE5VTEw7Cit9CisKK3ZvaWQgcGRfdmlkZW9fZXhpdChzdHJ1Y3QgcG9zZWlkb24gKnBkKQoreworCXN0cnVjdCB2aWRlb19kYXRhICp2aWRlbyA9ICZwZC0+dmlkZW9fZGF0YTsKKwlzdHJ1Y3QgdmJpX2RhdGEgKnZiaSA9ICZwZC0+dmJpX2RhdGE7CisKKwlkZXN0cm95X3ZpZGVvX2RldmljZSgmdmlkZW8tPnZfZGV2KTsKKwlkZXN0cm95X3ZpZGVvX2RldmljZSgmdmJpLT52X2Rldik7CisJbG9nKCk7Cit9CisKK2ludCBwZF92aWRlb19pbml0KHN0cnVjdCBwb3NlaWRvbiAqcGQpCit7CisJc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvID0gJnBkLT52aWRlb19kYXRhOworCXN0cnVjdCB2YmlfZGF0YSAqdmJpCT0gJnBkLT52YmlfZGF0YTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCXZpZGVvLT52X2RldiA9IHZkZXZfaW5pdChwZCwgJnBkX3ZpZGVvX3RlbXBsYXRlKTsKKwlpZiAodmlkZW8tPnZfZGV2ID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZpZGVvLT52X2RldiwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBvdXQ7CisKKwkvKiBWQkkgdXNlcyB0aGUgc2FtZSB0ZW1wbGF0ZSBhcyB2aWRlbyAqLworCXZiaS0+dl9kZXYgPSB2ZGV2X2luaXQocGQsICZwZF92aWRlb190ZW1wbGF0ZSk7CisJaWYgKHZiaS0+dl9kZXYgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZiaS0+dl9kZXYsIFZGTF9UWVBFX1ZCSSwgLTEpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBvdXQ7CisJbG9nKCJyZWdpc3RlciBWSURFTy9WQkkgZGV2aWNlcyIpOworCXJldHVybiAwOworb3V0OgorCWxvZygiVklERU8vVkJJIGRldmljZXMgcmVnaXN0ZXIgZmFpbGVkLCA6ICVkIiwgcmV0KTsKKwlwZF92aWRlb19leGl0KHBkKTsKKwlyZXR1cm4gcmV0OworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsZzIzMDAvdmVuZG9yY21kcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3ZlbmRvcmNtZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTZmNGFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90bGcyMzAwL3ZlbmRvcmNtZHMuaApAQCAtMCwwICsxLDI0MyBAQAorI2lmbmRlZiBWRU5ET1JfQ01EX0hfCisjZGVmaW5lIFZFTkRPUl9DTURfSF8KKworI2RlZmluZSBCVUxLX0FMVEVSTkFURV9JRkFDRQkJKDIpCisjZGVmaW5lIElTT18zS19CVUxLX0FMVEVSTkFURV9JRkFDRSAgICAgKDEpCisjZGVmaW5lIFJFUV9TRVRfQ01ECQkJKDBYMDApCisjZGVmaW5lIFJFUV9HRVRfQ01ECQkJKDBYODApCisKK2VudW0gdGxnX19hbmFsb2dfYXVkaW9fc3RhbmRhcmQgeworCVRMR19UVU5FX0FTVERfTk9ORQk9IDB4MDAwMDAwMDAsCisJVExHX1RVTkVfQVNURF9BMgk9IDB4MDAwMDAwMDEsCisJVExHX1RVTkVfQVNURF9OSUNBTQk9IDB4MDAwMDAwMDIsCisJVExHX1RVTkVfQVNURF9FSUFKCT0gMHgwMDAwMDAwNCwKKwlUTEdfVFVORV9BU1REX0JUU0MJPSAweDAwMDAwMDA4LAorCVRMR19UVU5FX0FTVERfRk1fVVMJPSAweDAwMDAwMDEwLAorCVRMR19UVU5FX0FTVERfRk1fRVVSCT0gMHgwMDAwMDAyMCwKKwlUTEdfVFVORV9BU1REX0FMTAk9IDB4MDAwMDAwM2YKK307CisKKy8qCisgKiBpZGVudGlmaWVycyBmb3IgQ3VzdG9tIFBhcmFtZXRlciBtZXNzYWdlcy4KKyAqIEB0eXBlZGVmIGNtZF9jdXN0b21fcGFyYW1faWRfdAorICovCitlbnVtIGNtZF9jdXN0b21fcGFyYW1faWQgeworCUNVU1RfUEFSTV9JRF9OT05FCQk9IDB4MDAsCisJQ1VTVF9QQVJNX0lEX0JSSUdIVE5FU1NfQ1RSTAk9IDB4MDEsCisJQ1VTVF9QQVJNX0lEX0NPTlRSQVNUX0NUUkwJPSAweDAyLAorCUNVU1RfUEFSTV9JRF9IVUVfQ1RSTAkJPSAweDAzLAorCUNVU1RfUEFSTV9JRF9TQVRVUkFUSU9OX0NUUkwJICA9IDB4MDQsCisJQ1VTVF9QQVJNX0lEX0FVRElPX1NOUl9USFJFU0hPTEQgID0gMHgxMCwKKwlDVVNUX1BBUk1fSURfQVVESU9fQUdDX1RIUkVTSE9MRCAgPSAweDExLAorCUNVU1RfUEFSTV9JRF9NQVgKK307CisKK3N0cnVjdCAgdHVuZXJfY3VzdG9tX3BhcmFtZXRlcl9zIHsKKwl1aW50MTZfdAlwYXJhbV9pZDsJIC8qICBQYXJhbWV0ZXIgaWRlbnRpZmllciAgKi8KKwl1aW50MTZfdAlwYXJhbV92YWx1ZTsJIC8qICBQYXJhbWV0ZXIgdmFsdWUJICAgKi8KK307CisKK3N0cnVjdCAgdHVuZXJfYmVyX3JhdGVfcyB7CisJdWludDMyX3QJYmVyX3JhdGU7ICAvKiAgQkVSIHNhbXBsZSByYXRlIGluIHNlY29uZHMgICAqLworfTsKKworc3RydWN0IHR1bmVyX2F0dl9zaWdfc3RhdF9zIHsKKwl1aW50MzJfdAlzaWdfcHJlc2VudDsKKwl1aW50MzJfdAlzaWdfbG9ja2VkOworCXVpbnQzMl90CXNpZ19sb2NrX2J1c3k7CisJdWludDMyX3QJc2lnX3N0cmVuZ3RoOwkgICAvKiAgbWlsbGlEYgkgICovCisJdWludDMyX3QJdHZfYXVkaW9fY2hhbjsJICAvKiAgbW9uby9zdGVyZW8vc2FwKi8KKwl1aW50MzJfdCAJbXZpc2lvbl9zdGF0OwkgICAvKiAgbWFjcm92aXNpb24gc3RhdHVzICovCit9OworCitzdHJ1Y3QgdHVuZXJfZHR2X3NpZ19zdGF0X3MgeworCXVpbnQzMl90IHNpZ19wcmVzZW50OyAgIC8qICBCb29sZWFuKi8KKwl1aW50MzJfdCBzaWdfbG9ja2VkOwkvKiAgQm9vbGVhbiAqLworCXVpbnQzMl90IHNpZ19sb2NrX2J1c3k7IC8qICBCb29sZWFuCShDYW4gdGhpcyB0aW1lLW91dD8pICovCisJdWludDMyX3Qgc2lnX3N0cmVuZ3RoOyAgLyogIG1pbGxpRGIqLworfTsKKworc3RydWN0IHR1bmVyX2ZtX3NpZ19zdGF0X3MgeworCXVpbnQzMl90IHNpZ19wcmVzZW50OwkvKiBCb29sZWFuKi8KKwl1aW50MzJfdCBzaWdfbG9ja2VkOwkgLyogQm9vbGVhbiAqLworCXVpbnQzMl90IHNpZ19sb2NrX2J1c3k7ICAvKiBCb29sZWFuICovCisJdWludDMyX3Qgc2lnX3N0ZXJlb19tb25vOy8qIFRCRCovCisJdWludDMyX3Qgc2lnX3N0cmVuZ3RoOyAgIC8qIG1pbGxpRGIqLworfTsKKworZW51bSBfdGFnX3RsZ190dW5lX3Nydl9jbWQgeworCVRMR19UVU5FX1BMQVlfU1ZDX1NUQVJUID0gMSwKKwlUTEdfVFVORV9QTEFZX1NWQ19TVE9QCit9OworCitlbnVtICBfdGFnX3R1bmVfYXR2X2F1ZGlvX21vZGVfY2FwcyB7CisJVExHX1RVTkVfVFZBVURJT19NT0RFX01PTk8JPSAweDAwMDAwMDAxLAorCVRMR19UVU5FX1RWQVVESU9fTU9ERV9TVEVSRU8JPSAweDAwMDAwMDAyLAorCVRMR19UVU5FX1RWQVVESU9fTU9ERV9MQU5HX0EJPSAweDAwMDAwMDEwLC8qIFByaW1hcnkgbGFuZ3VhZ2UqLworCVRMR19UVU5FX1RWQVVESU9fTU9ERV9MQU5HX0IJPSAweDAwMDAwMDIwLC8qIDJuZCBhdmFpbCBsYW5ndWFnZSovCisJVExHX1RVTkVfVFZBVURJT19NT0RFX0xBTkdfQwk9IDB4MDAwMDAwNDAKK307CisKKworZW51bSAgIF90YWdfdHVuZXJfYXR2X2F1ZGlvX3JhdGVzIHsKKwlBVFZfQVVESU9fUkFURV9OT05FCT0gMHgwMCwvKiBBdWRpbyBub3Qgc3VwcG9ydGVkKi8KKwlBVFZfQVVESU9fUkFURV8zMksJPSAweDAxLC8qIEF1ZGlvIHJhdGUgPSAzMiBLSHoqLworCUFUVl9BVURJT19SQVRFXzQ4Swk9IDB4MDIsIC8qIEF1ZGlvIHJhdGUgPSA0OCBLSHoqLworCUFUVl9BVURJT19SQVRFXzMxXzI1Swk9IDB4MDQgLyogQXVkaW8gcmF0ZSA9IDMxLjI1S0h6ICovCit9OworCitlbnVtICBfdGFnX3R1bmVfYXR2X3ZpZF9yZXNfY2FwcyB7CisJVExHX1RVTkVfVklEX1JFU19OT05FCT0gMHgwMDAwMDAwMCwKKwlUTEdfVFVORV9WSURfUkVTXzcyMAk9IDB4MDAwMDAwMDEsCisJVExHX1RVTkVfVklEX1JFU183MDQJPSAweDAwMDAwMDAyLAorCVRMR19UVU5FX1ZJRF9SRVNfMzYwCT0gMHgwMDAwMDAwNAorfTsKKworZW51bSBfdGFnX3R1bmVyX2FuYWxvZ192aWRlb19mb3JtYXQgeworCVRMR19UVU5FUl9WSURfRk9STUFUX1lVVgk9IDB4MDAwMDAwMDEsCisJVExHX1RVTkVSX1ZJRF9GT1JNQVRfWUNSQ0IJPSAweDAwMDAwMDAyLAorCVRMR19UVU5FUl9WSURfRk9STUFUX1JHQl81NjUJPSAweDAwMDAwMDA0LAorfTsKKworZW51bSAgdGxnX2V4dF9hdWRpb19zdXBwb3J0IHsKKwlUTEdfRVhUX0FVRElPX05PTkUgCT0gMHgwMCwvKiAgTm8gZXh0ZXJuYWwgYXVkaW8gaW5wdXQgc3VwcG9ydGVkICovCisJVExHX0VYVF9BVURJT19MUgk9IDB4MDEvKiAgTFIgZXh0ZXJuYWwgYXVkaW8gaW5wdXRzIHN1cHBvcnRlZCovCit9OworCitlbnVtIHsKKwlUTEdfTU9ERV9OT05FCQkJPSAweDAwLCAvKiBObyBNb2RlIHNwZWNpZmllZCovCisJVExHX01PREVfQU5BTE9HX1RWCQk9IDB4MDEsIC8qIEFuYWxvZyBUZWxldmlzaW9uIG1vZGUqLworCVRMR19NT0RFX0FOQUxPR19UVl9VTkNPTVAJPSAweDAxLCAvKiBBbmFsb2cgVGVsZXZpc2lvbiBtb2RlKi8KKwlUTEdfTU9ERV9BTkFMT0dfVFZfQ09NUCAgCT0gMHgwMiwgLyogQW5hbG9nIFRWIG1vZGUgKGNvbXByZXNzZWQpKi8KKwlUTEdfTU9ERV9GTV9SQURJTwkJPSAweDA0LCAvKiBGTSBSYWRpbyBtb2RlKi8KKwlUTEdfTU9ERV9EVkJfVAkJCT0gMHgwOCwgLyogRGlnaXRhbCBUViAoRFZCLVQpKi8KK307CisKK2VudW0gIHRsZ19zaWduYWxfc291cmNlc190IHsKKwlUTEdfU0lHX1NSQ19OT05FCT0gMHgwMCwvKiBTaWduYWwgc291cmNlIG5vdCBzcGVjaWZpZWQgKi8KKwlUTEdfU0lHX1NSQ19BTlRFTk5BCT0gMHgwMSwvKiBTaWduYWwgc3JjIGlzOiBBbnRlbm5hICovCisJVExHX1NJR19TUkNfQ0FCTEUJPSAweDAyLC8qIFNpZ25hbCBzcmMgaXM6IENvYXggQ2FibGUqLworCVRMR19TSUdfU1JDX1NWSURFTwk9IDB4MDQsLyogU2lnbmFsIHNyYyBpczogU19WSURFTyAgICovCisJVExHX1NJR19TUkNfQ09NUE9TSVRFICAgPSAweDA4IC8qIFNpZ25hbCBzcmMgaXM6IENvbXBvc2l0ZSBWaWRlbyAqLworfTsKKworZW51bSB0dW5lcl9hbmFsb2dfdmlkZW9fc3RhbmRhcmQgeworCVRMR19UVU5FX1ZTVERfTk9ORQk9IDB4MDAwMDAwMDAsCisJVExHX1RVTkVfVlNURF9OVFNDX00JPSAweDAwMDAwMDAxLAorCVRMR19UVU5FX1ZTVERfTlRTQ19NX0oJPSAweDAwMDAwMDAyLC8qIEphcGFuICAgKi8KKwlUTEdfVFVORV9WU1REX1BBTF9CCT0gMHgwMDAwMDAxMCwKKwlUTEdfVFVORV9WU1REX1BBTF9ECT0gMHgwMDAwMDAyMCwKKwlUTEdfVFVORV9WU1REX1BBTF9HCT0gMHgwMDAwMDA0MCwKKwlUTEdfVFVORV9WU1REX1BBTF9ICT0gMHgwMDAwMDA4MCwKKwlUTEdfVFVORV9WU1REX1BBTF9JCT0gMHgwMDAwMDEwMCwKKwlUTEdfVFVORV9WU1REX1BBTF9NCT0gMHgwMDAwMDIwMCwKKwlUTEdfVFVORV9WU1REX1BBTF9OCT0gMHgwMDAwMDQwMCwKKwlUTEdfVFVORV9WU1REX1NFQ0FNX0IJPSAweDAwMDAxMDAwLAorCVRMR19UVU5FX1ZTVERfU0VDQU1fRAk9IDB4MDAwMDIwMDAsCisJVExHX1RVTkVfVlNURF9TRUNBTV9HCT0gMHgwMDAwNDAwMCwKKwlUTEdfVFVORV9WU1REX1NFQ0FNX0gJPSAweDAwMDA4MDAwLAorCVRMR19UVU5FX1ZTVERfU0VDQU1fSwk9IDB4MDAwMTAwMDAsCisJVExHX1RVTkVfVlNURF9TRUNBTV9LMQk9IDB4MDAwMjAwMDAsCisJVExHX1RVTkVfVlNURF9TRUNBTV9MCT0gMHgwMDA0MDAwMCwKKwlUTEdfVFVORV9WU1REX1NFQ0FNX0wxCT0gMHgwMDA4MDAwMCwKKwlUTEdfVFVORV9WU1REX1BBTF9OX0NPTUJPID0gMHgwMDEwMDAwMAorfTsKKworZW51bSB0bGdfbW9kZV9jYXBzIHsKKwlUTEdfTU9ERV9DQVBTX05PTkUJCT0gMHgwMCwgIC8qICBObyBNb2RlIHNwZWNpZmllZAkqLworCVRMR19NT0RFX0NBUFNfQU5BTE9HX1RWX1VOQ09NUCAgPSAweDAxLCAgLyogIEFuYWxvZyBUViBtb2RlICAgICAqLworCVRMR19NT0RFX0NBUFNfQU5BTE9HX1RWX0NPTVAJPSAweDAyLCAgLyogIEFuYWxvZyBUViAoY29tcHJlc3NlZCkqLworCVRMR19NT0RFX0NBUFNfRk1fUkFESU8JCT0gMHgwNCwgIC8qICBGTSBSYWRpbyBtb2RlCSovCisJVExHX01PREVfQ0FQU19EVkJfVAkJPSAweDA4LCAgLyogIERpZ2l0YWwgVFYgKERWQi1UKQkqLworfTsKKworZW51bSBwb3NlaWRvbl92ZW5kb3JfY21kcyB7CisJTEFTVF9DTURfU1RBVAkJPSAweDAwLAorCUdFVF9DSElQX0lECQk9IDB4MDEsCisJR0VUX0ZXX0lECQk9IDB4MDIsCisJUFJPRFVDVF9DQVBTCQk9IDB4MDMsCisKKwlUVU5FX01PREVfQ0FQX0FUVgk9IDB4MTAsCisJVFVORV9NT0RFX0NBUF9BVFZDT01QCT0gMFgxMCwKKwlUVU5FX01PREVfQ0FQX0RWQlQJPSAweDEwLAorCVRVTkVfTU9ERV9DQVBfRk0JPSAweDEwLAorCVRVTkVfTU9ERV9TRUxFQ1QJPSAweDExLAorCVRVTkVfRlJFUV9TRUxFQ1QJPSAweDEyLAorCVNHTkxfU1JDX1NFTAkJPSAweDEzLAorCisJVklERU9fU1REX1NFTAkJPSAweDE0LAorCVZJREVPX1NUUkVBTV9GTVRfU0VMCT0gMHgxNSwKKwlWSURFT19ST1NPTFVfQVZBSUwJPSAweDE2LAorCVZJREVPX1JPU09MVV9TRUwJPSAweDE3LAorCVZJREVPX0NPTlRfUFJPVEVDVAk9IDB4MjAsCisKKwlWQ1JfVElNSU5HX01PRFNFTAk9IDB4MjEsCisJRVhUX0FVRElPX0NBUAkJPSAweDIyLAorCUVYVF9BVURJT19TRUwJCT0gMHgyMywKKwlURVNUX1BBVFRFUk5fU0VMCT0gMHgyNCwKKwlWQklfREFUQV9TRUwJCT0gMHgyNSwKKwlBVURJT19TQU1QTEVfUkFURV9DQVAgICA9IDB4MjgsCisJQVVESU9fU0FNUExFX1JBVEVfU0VMICAgPSAweDI5LAorCVRVTkVSX0FVRF9NT0RFCQk9IDB4MmEsCisJVFVORVJfQVVEX01PREVfQVZBSUwJPSAweDJiLAorCVRVTkVSX0FVRF9BTkFfU1RECT0gMHgyYywKKwlUVU5FUl9DVVNUT01fUEFSQU1FVEVSCT0gMHgyZiwKKworCURWQlRfVFVORV9NT0RFX1NFTAk9IDB4MzAsCisJRFZCVF9CQU5EV19DQVAJCT0gMHgzMSwKKwlEVkJUX0JBTkRXX1NFTAkJPSAweDMyLAorCURWQlRfR1VBUkRfSU5URVJWX0NBUCAgID0gMHgzMywKKwlEVkJUX0dVQVJEX0lOVEVSVl9TRUwgICA9IDB4MzQsCisJRFZCVF9NT0RVTEFUSU9OX0NBUAk9IDB4MzUsCisJRFZCVF9NT0RVTEFUSU9OX1NFTAk9IDB4MzYsCisJRFZCVF9JTk5FUl9GRUNfUkFURV9DQVAgPSAweDM3LAorCURWQlRfSU5ORVJfRkVDX1JBVEVfU0VMID0gMHgzOCwKKwlEVkJUX1RSQU5TX01PREVfQ0FQCT0gMHgzOSwKKwlEVkJUX1RSQU5TX01PREVfU0VMCT0gMHgzYSwKKwlEVkJUX1NFQVJDSF9SQU5HCT0gMHgzYywKKworCVRVTkVSX1NFVFVQX0FOQUxPRwk9IDB4NDAsCisJVFVORVJfU0VUVVBfRElHSVRBTAk9IDB4NDEsCisJVFVORVJfU0VUVVBfRk1fUkFESU8JPSAweDQyLAorCVRBS0VfUkVRVUVTVAkJPSAweDQzLCAvKiBUYWtlIGVmZmVjdCBvZiB0aGUgY29tbWFuZCAqLworCVBMQVlfU0VSVklDRQkJPSAweDQ0LCAvKiBQbGF5IHN0YXJ0IG9yIFBsYXkgc3RvcCAqLworCVRVTkVSX1NUQVRVUwkJPSAweDQ1LAorCVRVTkVfUFJPUF9EVkJUCQk9IDB4NDYsCisJRVJSX1JBVEVfU1RBVFMJCT0gMHg0NywKKwlUVU5FUl9CRVJfUkFURQkJPSAweDQ4LAorCisJU0NBTl9DQVBTCQk9IDB4NTAsCisJU0NBTl9TRVRVUAkJPSAweDUxLAorCVNDQU5fU0VSVklDRQkJPSAweDUyLAorCVNDQU5fU1RBVFMJCT0gMHg1MywKKworCVBJRF9TRVQJCQk9IDB4NTgsCisJUElEX1VOU0VUCQk9IDB4NTksCisJUElEX0xJU1QJCT0gMHg1YSwKKworCUlSRF9DQVAJCQk9IDB4NjAsCisJSVJEX01PREVfU0VMCQk9IDB4NjEsCisJSVJEX1NFVFVQCQk9IDB4NjIsCisKKwlQVE1fTU9ERV9DQVAJCT0gMHg3MCwKKwlQVE1fTU9ERV9TRUwJCT0gMHg3MSwKKwlQVE1fU0VSVklDRQkJPSAweDcyLAorCVRVTkVSX1JFR19TQ1JJUFQJPSAweDczLAorCUNNRF9DSElQX1JTVAkJPSAweDc0LAorfTsKKworZW51bSB0bGdfYncgeworCVRMR19CV181ID0gNSwKKwlUTEdfQldfNiA9IDYsCisJVExHX0JXXzcgPSA3LAorCVRMR19CV184ID0gOCwKKwlUTEdfQldfMTIgPSAxMiwKKwlUTEdfQldfMTUgPSAxNQorfTsKKworc3RydWN0IGNtZF9maXJtd2FyZV92ZXJzX3MgeworCXVpbnQ4X3QJIGZ3X3Jldl9tYWpvcjsKKwl1aW50OF90CSBmd19yZXZfbWlub3I7CisJdWludDE2X3QgZndfcGF0Y2g7Cit9OworI2VuZGlmIC8qIFZFTkRPUl9DTURfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKaW5kZXggNWIzZWFhMS4uYzRkYWI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKQEAgLTEwNzgsNiArMTA3OCw3IEBACiAKIAkJCQlnb3RvIHJlZ2lzdGVyX2NsaWVudDsKIAkJCX0KKwkJCWtmcmVlKHQpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCWNhc2UgMHg0MjoKIAkJY2FzZSAweDQzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCmluZGV4IGQ1MzNlYTUuLjBhODc3NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKQEAgLTY4MCwxMCArNjgwLDcgQEAKIAl0dmVlcHJvbV9pbmZvKCJIYXVwcGF1Z2UgbW9kZWwgJWQsIHJldiAlcywgc2VyaWFsIyAlZFxuIiwKIAkJdHZlZS0+bW9kZWwsIHR2ZWUtPnJldl9zdHIsIHR2ZWUtPnNlcmlhbF9udW1iZXIpOwogCWlmICh0dmVlLT5oYXNfTUFDX2FkZHJlc3MgPT0gMSkKLQkJdHZlZXByb21faW5mbygiTUFDIGFkZHJlc3MgaXMgJTAyWC0lMDJYLSUwMlgtJTAyWC0lMDJYLSUwMlhcbiIsCi0JCQl0dmVlLT5NQUNfYWRkcmVzc1swXSwgdHZlZS0+TUFDX2FkZHJlc3NbMV0sCi0JCQl0dmVlLT5NQUNfYWRkcmVzc1syXSwgdHZlZS0+TUFDX2FkZHJlc3NbM10sCi0JCQl0dmVlLT5NQUNfYWRkcmVzc1s0XSwgdHZlZS0+TUFDX2FkZHJlc3NbNV0pOworCQl0dmVlcHJvbV9pbmZvKCJNQUMgYWRkcmVzcyBpcyAlcE1cbiIsIHR2ZWUtPk1BQ19hZGRyZXNzKTsKIAl0dmVlcHJvbV9pbmZvKCJ0dW5lciBtb2RlbCBpcyAlcyAoaWR4ICVkLCB0eXBlICVkKVxuIiwKIAkJdF9uYW1lMSwgdHVuZXIxLCB0dmVlLT50dW5lcl90eXBlKTsKIAl0dmVlcHJvbV9pbmZvKCJUViBzdGFuZGFyZHMlcyVzJXMlcyVzJXMlcyVzIChlZXByb20gMHglMDJ4KVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNzAwMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA3MDAyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE4NzhiYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNzAwMi5jCkBAIC0wLDAgKzEsMTE4NyBAQAorLyogVGV4YXMgSW5zdHJ1bWVudHMgVHJpcGxlIDgtLzEwLUJJVCAxNjUtLzExMC1NU1BTIFZpZGVvIGFuZCBHcmFwaGljcworICogRGlnaXRpemVyIHdpdGggSG9yaXpvbnRhbCBQTEwgcmVnaXN0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICogQXV0aG9yOiBTYW50aWFnbyBOdW5lei1Db3JyYWxlcyA8c2FudGlhZ28ubnVuZXpAcmlkZ2VydW4uY29tPgorICoKKyAqIFRoaXMgY29kZSBpcyBwYXJ0aWFsbHkgYmFzZWQgdXBvbiB0aGUgVFZQNTE1MCBkcml2ZXIKKyAqIHdyaXR0ZW4gYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIChtY2hlaGFiQGluZnJhZGVhZC5vcmcpLAorICogdGhlIFRWUDUxNHggZHJpdmVyIHdyaXR0ZW4gYnkgVmFpYmhhdiBIaXJlbWF0aCA8aHZhaWJoYXZAdGkuY29tPgorICogYW5kIHRoZSBUVlA3MDAyIGRyaXZlciBpbiB0aGUgVEkgTFNQIDIuMTAuMDAuMTQuIFJldmlzaW9ucyBieQorICogTXVyYWxpZGhhcmFuIEthcmljaGVyaSBhbmQgU25laGFwcmFiaGEgTmFybmFrYWplIChUSSkuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3R2cDcwMDIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSAidHZwNzAwMl9yZWcuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJUSSBUVlA3MDAyIFZpZGVvIGFuZCBHcmFwaGljcyBEaWdpdGl6ZXIgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJTYW50aWFnbyBOdW5lei1Db3JyYWxlcyA8c2FudGlhZ28ubnVuZXpAcmlkZ2VydW4uY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBNb2R1bGUgTmFtZSAqLworI2RlZmluZSBUVlA3MDAyX01PRFVMRV9OQU1FCSJ0dnA3MDAyIgorCisvKiBJMkMgcmV0cnkgYXR0ZW1wdHMgKi8KKyNkZWZpbmUgSTJDX1JFVFJZX0NPVU5UCQkoNSkKKworLyogRW5kIG9mIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA3MDAyX0VPUgkJMHg1YworCisvKiBSZWFkIHdyaXRlIGRlZmluaXRpb24gZm9yIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA3MDAyX1JFQUQJCTAKKyNkZWZpbmUgVFZQNzAwMl9XUklURQkJMQorI2RlZmluZSBUVlA3MDAyX1JFU0VSVkVECTIKKworLyogSW50ZXJsYWNlZCB2cyBwcm9ncmVzc2l2ZSBtYXNrIGFuZCBzaGlmdCAqLworI2RlZmluZSBUVlA3MDAyX0lQX1NISUZUCTUKKyNkZWZpbmUgVFZQNzAwMl9JTlBSX01BU0sJKDB4MDEgPDwgVFZQNzAwMl9JUF9TSElGVCkKKworLyogU2hpZnQgZm9yIENQTCBhbmQgTFBGIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA3MDAyX0NMX1NISUZUCTgKKyNkZWZpbmUgVFZQNzAwMl9DTF9NQVNLCQkweDBmCisKKy8qIERlYnVnIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMikiKTsKKworLyogU3RydWN0dXJlIGZvciByZWdpc3RlciB2YWx1ZXMgKi8KK3N0cnVjdCBpMmNfcmVnX3ZhbHVlIHsKKwl1OCByZWc7CisJdTggdmFsdWU7CisJdTggdHlwZTsKK307CisKKy8qCisgKiBSZWdpc3RlciBkZWZhdWx0IHZhbHVlcyAoYWNjb3JkaW5nIHRvIHR2cDcwMDIgZGF0YXNoZWV0KQorICogSW4gdGhlIGNhc2Ugb2YgcmVhZC1vbmx5IHJlZ2lzdGVycywgdGhlIHZhbHVlICgweGZmKSBpcworICogbmV2ZXIgd3JpdHRlbi4gUi9XIGZ1bmN0aW9uYWxpdHkgaXMgY29udHJvbGxlZCBieSB0aGUKKyAqIHdyaXRhYmxlIGJpdCBpbiB0aGUgcmVnaXN0ZXIgc3RydWN0IGRlZmluaXRpb24uCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSB0dnA3MDAyX2luaXRfZGVmYXVsdFtdID0geworCXsgVFZQNzAwMl9DSElQX1JFViwgMHhmZiwgVFZQNzAwMl9SRUFEIH0sCisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTVNCUywgMHg2NywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX0xTQlMsIDB4MjAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9DUlRMLCAweGEwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUEhBU0VfU0VMLCAweDgwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1NUQVJULCAweDMyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1csIDB4MjAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFNZTkNfT1VUX1csIDB4NjAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQl9GSU5FX0dBSU4sIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfR19GSU5FX0dBSU4sIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfUl9GSU5FX0dBSU4sIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQl9GSU5FX09GRl9NU0JTLCAweDgwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0dfRklORV9PRkZfTVNCUywgMHg4MCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9SX0ZJTkVfT0ZGX01TQlMsIDB4ODAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfU1lOQ19DVExfMSwgMHgyMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0FORF9DTEFNUF9DVEwsIDB4MmUsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfU1lOQ19PTl9HX1RIUlMsIDB4NWQsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfU1lOQ19TRVBBUkFUT1JfVEhSUywgMHg0NywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BSRV9DT0FTVCwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BPU1RfQ09BU1QsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfU1lOQ19ERVRFQ1RfU1RBVCwgMHhmZiwgVFZQNzAwMl9SRUFEIH0sCisJeyBUVlA3MDAyX09VVF9GT1JNQVRURVIsIDB4NDcsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfTUlTQ19DVExfMSwgMHgwMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9NSVNDX0NUTF8yLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX01JU0NfQ1RMXzMsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSU5fTVVYX1NFTF8xLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0lOX01VWF9TRUxfMiwgMHg2NywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9CX0FORF9HX0NPQVJTRV9HQUlOLCAweDc3LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1JfQ09BUlNFX0dBSU4sIDB4MDcsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfRklORV9PRkZfTFNCUywgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9CX0NPQVJTRV9PRkYsIDB4MTAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfR19DT0FSU0VfT0ZGLCAweDEwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1JfQ09BUlNFX09GRiwgMHgxMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IU09VVF9PVVRfU1RBUlQsIDB4MDgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfTUlTQ19DVExfNCwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9CX0RHVExfQUxDX09VVF9MU0JTLCAweGZmLCBUVlA3MDAyX1JFQUQgfSwKKwl7IFRWUDcwMDJfR19ER1RMX0FMQ19PVVRfTFNCUywgMHhmZiwgVFZQNzAwMl9SRUFEIH0sCisJeyBUVlA3MDAyX1JfREdUTF9BTENfT1VUX0xTQlMsIDB4ZmYsIFRWUDcwMDJfUkVBRCB9LAorCXsgVFZQNzAwMl9BVVRPX0xWTF9DVExfRU5BQkxFLCAweDgwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0RHVExfQUxDX09VVF9NU0JTLCAweGZmLCBUVlA3MDAyX1JFQUQgfSwKKwl7IFRWUDcwMDJfQVVUT19MVkxfQ1RMX0ZJTFRFUiwgMHg1MywgVFZQNzAwMl9XUklURSB9LAorCXsgMHgyOSwgMHgwOCwgVFZQNzAwMl9SRVNFUlZFRCB9LAorCXsgVFZQNzAwMl9GSU5FX0NMQU1QX0NUTCwgMHgwNywgVFZQNzAwMl9XUklURSB9LAorCS8qIFBXUl9DVEwgaXMgY29udHJvbGxlZCBvbmx5IGJ5IHRoZSBwcm9iZSBhbmQgcmVzZXQgZnVuY3Rpb25zICovCisJeyBUVlA3MDAyX1BXUl9DVEwsIDB4MDAsIFRWUDcwMDJfUkVTRVJWRUQgfSwKKwl7IFRWUDcwMDJfQURDX1NFVFVQLCAweDUwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NPQVJTRV9DTEFNUF9DVEwsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfU09HX0NMQU1QLCAweDgwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1JHQl9DT0FSU0VfQ0xBTVBfQ1RMLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1NPR19DT0FSU0VfQ0xBTVBfQ1RMLCAweDA0LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FMQ19QTEFDRU1FTlQsIDB4NWEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IDB4MzIsIDB4MTgsIFRWUDcwMDJfUkVTRVJWRUQgfSwKKwl7IDB4MzMsIDB4NjAsIFRWUDcwMDJfUkVTRVJWRUQgfSwKKwl7IFRWUDcwMDJfTVZJU19TVFJJUFBFUl9XLCAweGZmLCBUVlA3MDAyX1JFU0VSVkVEIH0sCisJeyBUVlA3MDAyX1ZTWU5DX0FMR04sIDB4MTAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfU1lOQ19CWVBBU1MsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfTF9GUkFNRV9TVEFUX0xTQlMsIDB4ZmYsIFRWUDcwMDJfUkVBRCB9LAorCXsgVFZQNzAwMl9MX0ZSQU1FX1NUQVRfTVNCUywgMHhmZiwgVFZQNzAwMl9SRUFEIH0sCisJeyBUVlA3MDAyX0NMS19MX1NUQVRfTFNCUywgMHhmZiwgVFZQNzAwMl9SRUFEIH0sCisJeyBUVlA3MDAyX0NMS19MX1NUQVRfTVNCUywgMHhmZiwgVFZQNzAwMl9SRUFEIH0sCisJeyBUVlA3MDAyX0hTWU5DX1csIDB4ZmYsIFRWUDcwMDJfUkVBRCB9LAorCXsgVFZQNzAwMl9WU1lOQ19XLCAweGZmLCBUVlA3MDAyX1JFQUQgfSwKKwl7IFRWUDcwMDJfTF9MRU5HVEhfVE9MLCAweDAzLCBUVlA3MDAyX1dSSVRFIH0sCisJeyAweDNlLCAweDYwLCBUVlA3MDAyX1JFU0VSVkVEIH0sCisJeyBUVlA3MDAyX1ZJREVPX0JXVEhfQ1RMLCAweDAxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTFNCUywgMHgwMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX01TQlMsIDB4MmMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX0xTQlMsIDB4MDYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX01TQlMsIDB4MmMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfU1RBUlRfTF9PRkYsIDB4MDUsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfU1RBUlRfTF9PRkYsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfRFVSQVRJT04sIDB4MWUsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfRFVSQVRJT04sIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfRkJJVF9GXzBfU1RBUlRfTF9PRkYsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfRkJJVF9GXzFfU1RBUlRfTF9PRkYsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfWVVWX1lfR19DT0VGX0xTQlMsIDB4ZTMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfWVVWX1lfR19DT0VGX01TQlMsIDB4MTYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfWVVWX1lfQl9DT0VGX0xTQlMsIDB4NGYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfWVVWX1lfQl9DT0VGX01TQlMsIDB4MDIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfWVVWX1lfUl9DT0VGX0xTQlMsIDB4Y2UsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfWVVWX1lfUl9DT0VGX01TQlMsIDB4MDYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfWVVWX1VfR19DT0VGX0xTQlMsIDB4YWIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfWVVWX1VfR19DT0VGX01TQlMsIDB4ZjMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfWVVWX1VfQl9DT0VGX0xTQlMsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfWVVWX1VfQl9DT0VGX01TQlMsIDB4MTAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfWVVWX1VfUl9DT0VGX0xTQlMsIDB4NTUsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfWVVWX1VfUl9DT0VGX01TQlMsIDB4ZmMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfWVVWX1ZfR19DT0VGX0xTQlMsIDB4NzgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfWVVWX1ZfR19DT0VGX01TQlMsIDB4ZjEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfWVVWX1ZfQl9DT0VGX0xTQlMsIDB4ODgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfWVVWX1ZfQl9DT0VGX01TQlMsIDB4ZmUsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfWVVWX1ZfUl9DT0VGX0xTQlMsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfWVVWX1ZfUl9DT0VGX01TQlMsIDB4MTAsIFRWUDcwMDJfV1JJVEUgfSwKKwkvKiBUaGlzIHNpZ25hbHMgZW5kIG9mIHJlZ2lzdGVyIHZhbHVlcyAqLworCXsgVFZQNzAwMl9FT1IsIDB4ZmYsIFRWUDcwMDJfUkVTRVJWRUQgfQorfTsKKworLyogUmVnaXN0ZXIgcGFyYW1ldGVycyBmb3IgNDgwUCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHR2cDcwMDJfcGFybXNfNDgwUFtdID0geworCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX01TQlMsIDB4MzUsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9MU0JTLCAweDBhLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfQ1JUTCwgMHgwMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BIQVNFX1NFTCwgMHgxNCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX0xTQlMsIDB4OTEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9NU0JTLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9MU0JTLCAweDBCLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9NU0JTLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX1NUQVJUX0xfT0ZGLCAweDAzLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX1NUQVJUX0xfT0ZGLCAweDAxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX0RVUkFUSU9OLCAweDEzLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX0RVUkFUSU9OLCAweDEzLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FMQ19QTEFDRU1FTlQsIDB4MTgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfU1RBUlQsIDB4MDYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfVywgMHgxMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BSRV9DT0FTVCwgMHgwMywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BPU1RfQ09BU1QsIDB4MDMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfRU9SLCAweGZmLCBUVlA3MDAyX1JFU0VSVkVEIH0KK307CisKKy8qIFJlZ2lzdGVyIHBhcmFtZXRlcnMgZm9yIDU3NlAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSB0dnA3MDAyX3Bhcm1zXzU3NlBbXSA9IHsKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9NU0JTLCAweDM2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTFNCUywgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0NSVEwsIDB4MTgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QSEFTRV9TRUwsIDB4MTQsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9MU0JTLCAweDlCLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTVNCUywgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTFNCUywgMHgwRiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTVNCUywgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9TVEFSVF9MX09GRiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9TVEFSVF9MX09GRiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9EVVJBVElPTiwgMHgyRCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9EVVJBVElPTiwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BTENfUExBQ0VNRU5ULCAweDE4LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1NUQVJULCAweDA2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1csIDB4MTAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QUkVfQ09BU1QsIDB4MDMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QT1NUX0NPQVNULCAweDAzLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0VPUiwgMHhmZiwgVFZQNzAwMl9SRVNFUlZFRCB9Cit9OworCisvKiBSZWdpc3RlciBwYXJhbWV0ZXJzIGZvciAxMDgwSTYwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgdHZwNzAwMl9wYXJtc18xMDgwSTYwW10gPSB7CisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTVNCUywgMHg4OSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX0xTQlMsIDB4MDgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9DUlRMLCAweDk4LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUEhBU0VfU0VMLCAweDE0LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTFNCUywgMHgwNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX01TQlMsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX0xTQlMsIDB4OGEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX01TQlMsIDB4MDgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfU1RBUlRfTF9PRkYsIDB4MDIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfU1RBUlRfTF9PRkYsIDB4MDIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfRFVSQVRJT04sIDB4MTYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfRFVSQVRJT04sIDB4MTcsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQUxDX1BMQUNFTUVOVCwgMHg1YSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9TVEFSVCwgMHgzMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9XLCAweDIwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUFJFX0NPQVNULCAweDAxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUE9TVF9DT0FTVCwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9FT1IsIDB4ZmYsIFRWUDcwMDJfUkVTRVJWRUQgfQorfTsKKworLyogUmVnaXN0ZXIgcGFyYW1ldGVycyBmb3IgMTA4MFA2MCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHR2cDcwMDJfcGFybXNfMTA4MFA2MFtdID0geworCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX01TQlMsIDB4ODksIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9MU0JTLCAweDA4LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfQ1JUTCwgMHhFMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BIQVNFX1NFTCwgMHgxNCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX0xTQlMsIDB4MDYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9NU0JTLCAweDAxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9MU0JTLCAweDhhLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9NU0JTLCAweDA4LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX1NUQVJUX0xfT0ZGLCAweDAyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX1NUQVJUX0xfT0ZGLCAweDAyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX0RVUkFUSU9OLCAweDE2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX0RVUkFUSU9OLCAweDE3LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FMQ19QTEFDRU1FTlQsIDB4NWEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfU1RBUlQsIDB4MzIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfVywgMHgyMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BSRV9DT0FTVCwgMHgwMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BPU1RfQ09BU1QsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfRU9SLCAweGZmLCBUVlA3MDAyX1JFU0VSVkVEIH0KK307CisKKy8qIFJlZ2lzdGVyIHBhcmFtZXRlcnMgZm9yIDEwODBJNTAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSB0dnA3MDAyX3Bhcm1zXzEwODBJNTBbXSA9IHsKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9NU0JTLCAweGE1LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTFNCUywgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0NSVEwsIDB4OTgsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QSEFTRV9TRUwsIDB4MTQsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9MU0JTLCAweDA2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTVNCUywgMHgwMSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTFNCUywgMHg4YSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUT1BfUElYRUxfTVNCUywgMHgwOCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9TVEFSVF9MX09GRiwgMHgwMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9TVEFSVF9MX09GRiwgMHgwMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMF9EVVJBVElPTiwgMHgxNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9WQkxLX0ZfMV9EVVJBVElPTiwgMHgxNywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BTENfUExBQ0VNRU5ULCAweDVhLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1NUQVJULCAweDMyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0NMQU1QX1csIDB4MjAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QUkVfQ09BU1QsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9QT1NUX0NPQVNULCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0VPUiwgMHhmZiwgVFZQNzAwMl9SRVNFUlZFRCB9Cit9OworCisvKiBSZWdpc3RlciBwYXJhbWV0ZXJzIGZvciA3MjBQNjAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSB0dnA3MDAyX3Bhcm1zXzcyMFA2MFtdID0geworCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX01TQlMsIDB4NjcsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9MU0JTLCAweDAyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfQ1JUTCwgMHhhMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BIQVNFX1NFTCwgMHgxNiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX0xTQlMsIDB4NDcsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9NU0JTLCAweDAxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9MU0JTLCAweDRCLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RPUF9QSVhFTF9NU0JTLCAweDA2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX1NUQVJUX0xfT0ZGLCAweDA1LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX1NUQVJUX0xfT0ZGLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8wX0RVUkFUSU9OLCAweDJELCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX1ZCTEtfRl8xX0RVUkFUSU9OLCAweDAwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FMQ19QTEFDRU1FTlQsIDB4NWEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfU1RBUlQsIDB4MzIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQ0xBTVBfVywgMHgyMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BSRV9DT0FTVCwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX1BPU1RfQ09BU1QsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfRU9SLCAweGZmLCBUVlA3MDAyX1JFU0VSVkVEIH0KK307CisKKy8qIFJlZ2lzdGVyIHBhcmFtZXRlcnMgZm9yIDcyMFA1MCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHR2cDcwMDJfcGFybXNfNzIwUDUwW10gPSB7CisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTVNCUywgMHg3YiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX0xTQlMsIDB4MGMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9DUlRMLCAweDk4LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUEhBU0VfU0VMLCAweDE2LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTFNCUywgMHg0NywgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX01TQlMsIDB4MDEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX0xTQlMsIDB4NEIsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX01TQlMsIDB4MDYsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfU1RBUlRfTF9PRkYsIDB4MDUsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfU1RBUlRfTF9PRkYsIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzBfRFVSQVRJT04sIDB4MkQsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfVkJMS19GXzFfRFVSQVRJT04sIDB4MDAsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfQUxDX1BMQUNFTUVOVCwgMHg1YSwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9TVEFSVCwgMHgzMiwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9DTEFNUF9XLCAweDIwLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUFJFX0NPQVNULCAweDAxLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfUE9TVF9DT0FTVCwgMHgwMCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9FT1IsIDB4ZmYsIFRWUDcwMDJfUkVTRVJWRUQgfQorfTsKKworLyogU3RydWN0IGxpc3QgZm9yIGF2YWlsYWJsZSBmb3JtYXRzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZm10ZGVzYyB0dnA3MDAyX2ZtdF9saXN0W10gPSB7CisJeworCSAuaW5kZXggPSAwLAorCSAudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkgLmZsYWdzID0gMCwKKwkgLmRlc2NyaXB0aW9uID0gIjgtYml0IFVZVlkgNDoyOjIgRm9ybWF0IiwKKwkgLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1VZVlksCisJfSwKK307CisKKyNkZWZpbmUgTlVNX0ZPUk1BVFMJCUFSUkFZX1NJWkUodHZwNzAwMl9mbXRfbGlzdCkKKworLyogUHJlc2V0IGRlZmluaXRpb24gZm9yIGhhbmRsaW5nIGRldmljZSBvcGVyYXRpb24gKi8KK3N0cnVjdCB0dnA3MDAyX3ByZXNldF9kZWZpbml0aW9uIHsKKwl1MzIgcHJlc2V0OworCWNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlICpwX3NldHRpbmdzOworCWVudW0gdjRsMl9jb2xvcnNwYWNlIGNvbG9yX3NwYWNlOworCWVudW0gdjRsMl9maWVsZCBzY2FubW9kZTsKKwl1MTYgcHJvZ3Jlc3NpdmU7CisJdTE2IGxpbmVzX3Blcl9mcmFtZTsKKwl1MTYgY3BsX21pbjsKKwl1MTYgY3BsX21heDsKK307CisKKy8qIFN0cnVjdCBsaXN0IGZvciBkaWdpdGFsIHZpZGVvIHByZXNldHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHZwNzAwMl9wcmVzZXRfZGVmaW5pdGlvbiB0dnA3MDAyX3ByZXNldHNbXSA9IHsKKwl7CisJCVY0TDJfRFZfNzIwUDYwLAorCQl0dnA3MDAyX3Bhcm1zXzcyMFA2MCwKKwkJVjRMMl9DT0xPUlNQQUNFX1JFQzcwOSwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkxLAorCQkweDJFRSwKKwkJMTM1LAorCQkxNTMKKwl9LAorCXsKKwkJVjRMMl9EVl8xMDgwSTYwLAorCQl0dnA3MDAyX3Bhcm1zXzEwODBJNjAsCisJCVY0TDJfQ09MT1JTUEFDRV9SRUM3MDksCisJCVY0TDJfRklFTERfSU5URVJMQUNFRCwKKwkJMCwKKwkJMHg0NjUsCisJCTE4MSwKKwkJMjA1CisJfSwKKwl7CisJCVY0TDJfRFZfMTA4MEk1MCwKKwkJdHZwNzAwMl9wYXJtc18xMDgwSTUwLAorCQlWNEwyX0NPTE9SU1BBQ0VfUkVDNzA5LAorCQlWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCisJCTAsCisJCTB4NDY1LAorCQkyMTcsCisJCTI0NQorCX0sCisJeworCQlWNEwyX0RWXzcyMFA1MCwKKwkJdHZwNzAwMl9wYXJtc183MjBQNTAsCisJCVY0TDJfQ09MT1JTUEFDRV9SRUM3MDksCisJCVY0TDJfRklFTERfTk9ORSwKKwkJMSwKKwkJMHgyRUUsCisJCTE2MywKKwkJMTgzCisJfSwKKwl7CisJCVY0TDJfRFZfMTA4MFA2MCwKKwkJdHZwNzAwMl9wYXJtc18xMDgwUDYwLAorCQlWNEwyX0NPTE9SU1BBQ0VfUkVDNzA5LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCTEsCisJCTB4NDY1LAorCQk5MCwKKwkJMTAyCisJfSwKKwl7CisJCVY0TDJfRFZfNDgwUDU5Xzk0LAorCQl0dnA3MDAyX3Bhcm1zXzQ4MFAsCisJCVY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0sCisJCVY0TDJfRklFTERfTk9ORSwKKwkJMSwKKwkJMHgyMEQsCisJCTB4ZmZmZiwKKwkJMHhmZmZmCisJfSwKKwl7CisJCVY0TDJfRFZfNTc2UDUwLAorCQl0dnA3MDAyX3Bhcm1zXzU3NlAsCisJCVY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0sCisJCVY0TDJfRklFTERfTk9ORSwKKwkJMSwKKwkJMHgyNzEsCisJCTB4ZmZmZiwKKwkJMHhmZmZmCisJfQorfTsKKworI2RlZmluZSBOVU1fUFJFU0VUUwlBUlJBWV9TSVpFKHR2cDcwMDJfcHJlc2V0cykKKworLyogRGV2aWNlIGRlZmluaXRpb24gKi8KK3N0cnVjdCB0dnA3MDAyIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CisJY29uc3Qgc3RydWN0IHR2cDcwMDJfY29uZmlnICpwZGF0YTsKKworCWludCB2ZXI7CisJaW50IHN0cmVhbWluZzsKKworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgcGl4OworCWNvbnN0IHN0cnVjdCB0dnA3MDAyX3ByZXNldF9kZWZpbml0aW9uICpjdXJyZW50X3ByZXNldDsKKwl1OCBnYWluOworfTsKKworLyoKKyAqIHRvX3R2cDcwMDIgLSBPYnRhaW4gZGV2aWNlIGhhbmRsZXIgVFZQNzAwMgorICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKgorICogUmV0dXJucyBkZXZpY2UgaGFuZGxlciB0dnA3MDAyLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0dnA3MDAyICp0b190dnA3MDAyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHR2cDcwMDIsIHNkKTsKK30KKworLyoKKyAqIHR2cDcwMDJfcmVhZCAtIFJlYWQgYSB2YWx1ZSBmcm9tIGEgcmVnaXN0ZXIgaW4gYW4gVFZQNzAwMgorICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAcmVnOiBUVlA3MDAyIHJlZ2lzdGVyIGFkZHJlc3MKKyAqIEBkc3Q6IHBvaW50ZXIgdG8gOC1iaXQgZGVzdGluYXRpb24KKyAqCisgKiBSZXR1cm5zIHZhbHVlIHJlYWQgaWYgc3VjY2Vzc2Z1bCwgb3Igbm9uLXplcm8gKC0xKSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9yZWFkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IGFkZHIsIHU4ICpkc3QpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmMgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlpbnQgcmV0cnk7CisJaW50IGVycm9yOworCisJZm9yIChyZXRyeSA9IDA7IHJldHJ5IDwgSTJDX1JFVFJZX0NPVU5UOyByZXRyeSsrKSB7CisJCWVycm9yID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGMsIGFkZHIpOworCisJCWlmIChlcnJvciA+PSAwKSB7CisJCQkqZHN0ID0gKHU4KWVycm9yOworCQkJcmV0dXJuIDA7CisJCX0KKworCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7CisJfQorCXY0bDJfZXJyKHNkLCAiVFZQNzAwMiByZWFkIGVycm9yICVkXG4iLCBlcnJvcik7CisJcmV0dXJuIGVycm9yOworfQorCisvKgorICogdHZwNzAwMl9yZWFkX2VycigpIC0gUmVhZCBhIHJlZ2lzdGVyIHZhbHVlIHdpdGggZXJyb3IgY29kZQorICogQHNkOiBwb2ludGVyIHRvIHN0YW5kYXJkIFY0TDIgc3ViLWRldmljZSBzdHJ1Y3R1cmUKKyAqIEByZWc6IGRlc3RpbmF0aW9uIHJlZ2lzdGVyCisgKiBAdmFsOiB2YWx1ZSB0byBiZSByZWFkCisgKiBAZXJyb3I6IHBvaW50ZXIgdG8gZXJyb3IgdmFsdWUKKyAqCisgKiBSZWFkIGEgdmFsdWUgaW4gYSByZWdpc3RlciBhbmQgc2F2ZSBlcnJvciB2YWx1ZSBpbiBwb2ludGVyLgorICogQWxzbyB1cGRhdGUgdGhlIHJlZ2lzdGVyIHRhYmxlIGlmIHN1Y2Nlc3NmdWwKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHR2cDcwMDJfcmVhZF9lcnIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLAorCQkJCQkJCXU4ICpkc3QsIGludCAqZXJyKQoreworCWlmICghKmVycikKKwkJKmVyciA9IHR2cDcwMDJfcmVhZChzZCwgcmVnLCBkc3QpOworfQorCisvKgorICogdHZwNzAwMl93cml0ZSgpIC0gV3JpdGUgYSB2YWx1ZSB0byBhIHJlZ2lzdGVyIGluIFRWUDcwMDIKKyAqIEBzZDogcHRyIHRvIHY0bDJfc3ViZGV2IHN0cnVjdAorICogQGFkZHI6IFRWUDcwMDIgcmVnaXN0ZXIgYWRkcmVzcworICogQHZhbHVlOiB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSByZWdpc3RlcgorICoKKyAqIFdyaXRlIGEgdmFsdWUgdG8gYSByZWdpc3RlciBpbiBhbiBUVlA3MDAyIGRlY29kZXIgZGV2aWNlLgorICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwsIG9yIG5vbi16ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IGFkZHIsIHU4IHZhbHVlKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjOworCWludCByZXRyeTsKKwlpbnQgZXJyb3I7CisKKwljID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlmb3IgKHJldHJ5ID0gMDsgcmV0cnkgPCBJMkNfUkVUUllfQ09VTlQ7IHJldHJ5KyspIHsKKwkJZXJyb3IgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGMsIGFkZHIsIHZhbHVlKTsKKworCQlpZiAoZXJyb3IgPj0gMCkKKwkJCXJldHVybiAwOworCisJCXY0bDJfd2FybihzZCwgIldyaXRlOiByZXRyeSAuLi4gJWRcbiIsIHJldHJ5KTsKKwkJbXNsZWVwX2ludGVycnVwdGlibGUoMTApOworCX0KKwl2NGwyX2VycihzZCwgIlRWUDcwMDIgd3JpdGUgZXJyb3IgJWRcbiIsIGVycm9yKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiB0dnA3MDAyX3dyaXRlX2VycigpIC0gV3JpdGUgYSByZWdpc3RlciB2YWx1ZSB3aXRoIGVycm9yIGNvZGUKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCisgKiBAcmVnOiBkZXN0aW5hdGlvbiByZWdpc3RlcgorICogQHZhbDogdmFsdWUgdG8gYmUgd3JpdHRlbgorICogQGVycm9yOiBwb2ludGVyIHRvIGVycm9yIHZhbHVlCisgKgorICogV3JpdGUgYSB2YWx1ZSBpbiBhIHJlZ2lzdGVyIGFuZCBzYXZlIGVycm9yIHZhbHVlIGluIHBvaW50ZXIuCisgKiBBbHNvIHVwZGF0ZSB0aGUgcmVnaXN0ZXIgdGFibGUgaWYgc3VjY2Vzc2Z1bAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdHZwNzAwMl93cml0ZV9lcnIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLAorCQkJCQkJCXU4IHZhbCwgaW50ICplcnIpCit7CisJaWYgKCEqZXJyKQorCQkqZXJyID0gdHZwNzAwMl93cml0ZShzZCwgcmVnLCB2YWwpOworfQorCisvKgorICogdHZwNzAwMl9nX2NoaXBfaWRlbnQoKSAtIEdldCBjaGlwIGlkZW50aWZpY2F0aW9uIG51bWJlcgorICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAY2hpcDogcHRyIHRvIHY0bDJfZGJnX2NoaXBfaWRlbnQgc3RydWN0CisgKgorICogT2J0YWlucyB0aGUgY2hpcCdzIGlkZW50aWZpY2F0aW9uIG51bWJlci4KKyAqIFJldHVybnMgemVybyBvciAtRUlOVkFMIGlmIHJlYWQgb3BlcmF0aW9uIGZhaWxzLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJCXN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXU4IHJldjsKKwlpbnQgZXJyb3I7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJZXJyb3IgPSB0dnA3MDAyX3JlYWQoc2QsIFRWUDcwMDJfQ0hJUF9SRVYsICZyZXYpOworCisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9UVlA3MDAyLCByZXYpOworfQorCisvKgorICogdHZwNzAwMl93cml0ZV9pbml0dGFiKCkgLSBXcml0ZSBpbml0aWFsaXphdGlvbiB2YWx1ZXMKKyAqIEBzZDogcHRyIHRvIHY0bDJfc3ViZGV2IHN0cnVjdAorICogQHJlZ3M6IHB0ciB0byBpMmNfcmVnX3ZhbHVlIHN0cnVjdAorICoKKyAqIFdyaXRlIGluaXRpYWxpemF0aW9uIHZhbHVlcy4KKyAqIFJldHVybnMgemVybyBvciAtRUlOVkFMIGlmIHJlYWQgb3BlcmF0aW9uIGZhaWxzLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfd3JpdGVfaW5pdHRhYihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCQljb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSAqcmVncykKK3sKKwlpbnQgZXJyb3IgPSAwOworCisJLyogSW5pdGlhbGl6ZSB0aGUgZmlyc3QgKGRlZmluZWQpIHJlZ2lzdGVycyAqLworCXdoaWxlIChUVlA3MDAyX0VPUiAhPSByZWdzLT5yZWcpIHsKKwkJaWYgKFRWUDcwMDJfV1JJVEUgPT0gcmVncy0+dHlwZSkKKwkJCXR2cDcwMDJfd3JpdGVfZXJyKHNkLCByZWdzLT5yZWcsIHJlZ3MtPnZhbHVlLCAmZXJyb3IpOworCQlyZWdzKys7CisJfQorCisJcmV0dXJuIGVycm9yOworfQorCisvKgorICogdHZwNzAwMl9zX2R2X3ByZXNldCgpIC0gU2V0IGRpZ2l0YWwgdmlkZW8gcHJlc2V0CisgKiBAc2Q6IHB0ciB0byB2NGwyX3N1YmRldiBzdHJ1Y3QKKyAqIEBzdGQ6IHB0ciB0byB2NGwyX2R2X3ByZXNldCBzdHJ1Y3QKKyAqCisgKiBTZXQgdGhlIGRpZ2l0YWwgdmlkZW8gcHJlc2V0IGZvciBhIFRWUDcwMDIgZGVjb2RlciBkZXZpY2UuCisgKiBSZXR1cm5zIHplcm8gd2hlbiBzdWNjZXNzZnVsIG9yIC1FSU5WQUwgaWYgcmVnaXN0ZXIgYWNjZXNzIGZhaWxzLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfc19kdl9wcmVzZXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkJc3RydWN0IHY0bDJfZHZfcHJlc2V0ICpkdl9wcmVzZXQpCit7CisJc3RydWN0IHR2cDcwMDIgKmRldmljZSA9IHRvX3R2cDcwMDIoc2QpOworCXUzMiBwcmVzZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1BSRVNFVFM7IGkrKykgeworCQlwcmVzZXQgPSB0dnA3MDAyX3ByZXNldHNbaV0ucHJlc2V0OworCQlpZiAocHJlc2V0ID09IGR2X3ByZXNldC0+cHJlc2V0KSB7CisJCQlkZXZpY2UtPmN1cnJlbnRfcHJlc2V0ID0gJnR2cDcwMDJfcHJlc2V0c1tpXTsKKwkJCXJldHVybiB0dnA3MDAyX3dyaXRlX2luaXR0YWIoc2QsIHR2cDcwMDJfcHJlc2V0c1tpXS5wX3NldHRpbmdzKTsKKwkJfQorCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCisvKgorICogdHZwNzAwMl9nX2N0cmwoKSAtIEdldCBhIGNvbnRyb2wKKyAqIEBzZDogcHRyIHRvIHY0bDJfc3ViZGV2IHN0cnVjdAorICogQGN0cmw6IHB0ciB0byB2NGwyX2NvbnRyb2wgc3RydWN0CisgKgorICogR2V0IGEgY29udHJvbCBmb3IgYSBUVlA3MDAyIGRlY29kZXIgZGV2aWNlLgorICogUmV0dXJucyB6ZXJvIHdoZW4gc3VjY2Vzc2Z1bCBvciAtRUlOVkFMIGlmIHJlZ2lzdGVyIGFjY2VzcyBmYWlscy4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCB0dnA3MDAyICpkZXZpY2UgPSB0b190dnA3MDAyKHNkKTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCWN0cmwtPnZhbHVlID0gZGV2aWNlLT5nYWluOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKy8qCisgKiB0dnA3MDAyX3NfY3RybCgpIC0gU2V0IGEgY29udHJvbAorICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAY3RybDogcHRyIHRvIHY0bDJfY29udHJvbCBzdHJ1Y3QKKyAqCisgKiBTZXQgYSBjb250cm9sIGluIFRWUDcwMDIgZGVjb2RlciBkZXZpY2UuCisgKiBSZXR1cm5zIHplcm8gd2hlbiBzdWNjZXNzZnVsIG9yIC1FSU5WQUwgaWYgcmVnaXN0ZXIgYWNjZXNzIGZhaWxzLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHR2cDcwMDIgKmRldmljZSA9IHRvX3R2cDcwMDIoc2QpOworCWludCBlcnJvciA9IDA7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQl0dnA3MDAyX3dyaXRlX2VycihzZCwgVFZQNzAwMl9SX0ZJTkVfR0FJTiwKKwkJCQkJCWN0cmwtPnZhbHVlICYgMHhmZiwgJmVycm9yKTsKKwkJdHZwNzAwMl93cml0ZV9lcnIoc2QsIFRWUDcwMDJfR19GSU5FX0dBSU4sCisJCQkJCQljdHJsLT52YWx1ZSAmIDB4ZmYsICZlcnJvcik7CisJCXR2cDcwMDJfd3JpdGVfZXJyKHNkLCBUVlA3MDAyX0JfRklORV9HQUlOLAorCQkJCQkJY3RybC0+dmFsdWUgJiAweGZmLCAmZXJyb3IpOworCisJCWlmIChlcnJvciA8IDApCisJCQlyZXR1cm4gZXJyb3I7CisKKwkJLyogU2V0IG9ubHkgYWZ0ZXIga25vd2luZyB0aGVyZSBpcyBubyBlcnJvciAqLworCQlkZXZpY2UtPmdhaW4gPSBjdHJsLT52YWx1ZSAmIDB4ZmY7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworLyoKKyAqIHR2cDcwMDJfcXVlcnljdHJsKCkgLSBRdWVyeSBhIGNvbnRyb2wKKyAqIEBzZDogcHRyIHRvIHY0bDJfc3ViZGV2IHN0cnVjdAorICogQGN0cmw6IHB0ciB0byB2NGwyX3F1ZXJ5Y3RybCBzdHJ1Y3QKKyAqCisgKiBRdWVyeSBhIGNvbnRyb2wgb2YgYSBUVlA3MDAyIGRlY29kZXIgZGV2aWNlLgorICogUmV0dXJucyB6ZXJvIHdoZW4gc3VjY2Vzc2Z1bCBvciAtRUlOVkFMIGlmIHJlZ2lzdGVyIHJlYWQgZmFpbHMuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9xdWVyeWN0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJLyoKKwkJICogR2FpbiBpcyBzdXBwb3J0ZWQgWzAtMjU1LCBkZWZhdWx0PTAsIHN0ZXA9MV0KKwkJICovCisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMjU1LCAxLCAwKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKy8qCisgKiB0dnA3MDAyX3RyeV9mbXRfY2FwKCkgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIHRyeV9mbXQKKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCisgKiBAZjogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIFZJRElPQ19UUllfRk1UIGlvY3RsIHN0cnVjdHVyZQorICoKKyAqIEltcGxlbWVudCB0aGUgVklESU9DX1RSWV9GTVQgaW9jdGwgZm9yIHRoZSBDQVBUVVJFIGJ1ZmZlciB0eXBlLiBUaGlzCisgKiBpb2N0bCBpcyB1c2VkIHRvIG5lZ290aWF0ZSB0aGUgaW1hZ2UgY2FwdHVyZSBzaXplIGFuZCBwaXhlbCBmb3JtYXQKKyAqIHdpdGhvdXQgYWN0dWFsbHkgbWFraW5nIGl0IHRha2UgZWZmZWN0LgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfdHJ5X2ZtdF9jYXAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCB0dnA3MDAyICpkZXZpY2UgPSB0b190dnA3MDAyKHNkKTsKKwlzdHJ1Y3QgdjRsMl9kdl9lbnVtX3ByZXNldCBlX3ByZXNldDsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXg7CisJaW50IGVycm9yID0gMDsKKworCXBpeCA9ICZmLT5mbXQucGl4OworCisJLyogQ2FsY3VsYXRlIGhlaWdodCBhbmQgd2lkdGggYmFzZWQgb24gY3VycmVudCBzdGFuZGFyZCAqLworCWVycm9yID0gdjRsX2ZpbGxfZHZfcHJlc2V0X2luZm8oZGV2aWNlLT5jdXJyZW50X3ByZXNldC0+cHJlc2V0LCAmZV9wcmVzZXQpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwaXgtPndpZHRoID0gZV9wcmVzZXQud2lkdGg7CisJcGl4LT5oZWlnaHQgPSBlX3ByZXNldC5oZWlnaHQ7CisJcGl4LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZOworCXBpeC0+ZmllbGQgPSBkZXZpY2UtPmN1cnJlbnRfcHJlc2V0LT5zY2FubW9kZTsKKwlwaXgtPmJ5dGVzcGVybGluZSA9IHBpeC0+d2lkdGggKiAyOworCXBpeC0+c2l6ZWltYWdlID0gcGl4LT5ieXRlc3BlcmxpbmUgKiBwaXgtPmhlaWdodDsKKwlwaXgtPmNvbG9yc3BhY2UgPSBkZXZpY2UtPmN1cnJlbnRfcHJlc2V0LT5jb2xvcl9zcGFjZTsKKwlwaXgtPnByaXYgPSAwOworCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiVHJ5IEZNVDogcGl4ZWxmb3JtYXQgLSAlcywgYnl0ZXNwZXJsaW5lIC0gJWQiCisJCQkiV2lkdGggLSAlZCwgSGVpZ2h0IC0gJWQiLCAiOC1iaXQgVVlWWSA0OjI6MiBGb3JtYXQiLAorCQkJcGl4LT5ieXRlc3BlcmxpbmUsIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiB0dnA3MDAyX3NfZm10KCkgLSBWNEwyIGRlY29kZXIgaW50ZXJmYWNlIGhhbmRsZXIgZm9yIHNfZm10CisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQorICogQGY6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBWSURJT0NfU19GTVQgaW9jdGwgc3RydWN0dXJlCisgKgorICogSWYgdGhlIHJlcXVlc3RlZCBmb3JtYXQgaXMgc3VwcG9ydGVkLCBjb25maWd1cmVzIHRoZSBIVyB0byB1c2UgdGhhdAorICogZm9ybWF0LCByZXR1cm5zIGVycm9yIGNvZGUgaWYgZm9ybWF0IG5vdCBzdXBwb3J0ZWQgb3IgSFcgY2FuJ3QgYmUKKyAqIGNvcnJlY3RseSBjb25maWd1cmVkLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCB0dnA3MDAyICpkZWNvZGVyID0gdG9fdHZwNzAwMihzZCk7CisJaW50IHJ2YWw7CisKKwlydmFsID0gdHZwNzAwMl90cnlfZm10X2NhcChzZCwgZik7CisJaWYgKCFydmFsKQorCQlkZWNvZGVyLT5waXggPSBmLT5mbXQucGl4OworCXJldHVybiBydmFsOworfQorCisvKgorICogdHZwNzAwMl9nX2ZtdCgpIC0gVjRMMiBkZWNvZGVyIGludGVyZmFjZSBoYW5kbGVyIGZvciB0dnA3MDAyX2dfZm10CisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQorICogQGY6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiB2NGwyX2Zvcm1hdCBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIHRoZSBkZWNvZGVyJ3MgY3VycmVudCBwaXhlbCBmb3JtYXQgaW4gdGhlIHY0bDJfZm9ybWF0CisgKiBwYXJhbWV0ZXIuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9nX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHR2cDcwMDIgKmRlY29kZXIgPSB0b190dnA3MDAyKHNkKTsKKworCWYtPmZtdC5waXggPSBkZWNvZGVyLT5waXg7CisKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJDdXJyZW50IEZNVDogYnl0ZXNwZXJsaW5lIC0gJWQiCisJCQkiV2lkdGggLSAlZCwgSGVpZ2h0IC0gJWQiLAorCQkJZGVjb2Rlci0+cGl4LmJ5dGVzcGVybGluZSwKKwkJCWRlY29kZXItPnBpeC53aWR0aCwgZGVjb2Rlci0+cGl4LmhlaWdodCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB0dnA3MDAyX3F1ZXJ5X2R2X3ByZXNldCgpIC0gcXVlcnkgRFYgcHJlc2V0CisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQorICogQHN0ZF9pZDogc3RhbmRhcmQgVjRMMiB2NGwyX2R2X3ByZXNldAorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgRFYgcHJlc2V0IGJ5IFRWUDcwMDIuIElmIG5vIGFjdGl2ZSBpbnB1dCBpcworICogZGV0ZWN0ZWQsIHJldHVybnMgLUVJTlZBTAorICovCitzdGF0aWMgaW50IHR2cDcwMDJfcXVlcnlfZHZfcHJlc2V0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJCQlzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQgKnFwcmVzZXQpCit7CisJY29uc3Qgc3RydWN0IHR2cDcwMDJfcHJlc2V0X2RlZmluaXRpb24gKnByZXNldHMgPSB0dnA3MDAyX3ByZXNldHM7CisJc3RydWN0IHY0bDJfZHZfZW51bV9wcmVzZXQgZV9wcmVzZXQ7CisJc3RydWN0IHR2cDcwMDIgKmRldmljZTsKKwl1OCBwcm9ncmVzc2l2ZTsKKwl1MzIgbHBmcjsKKwl1MzIgY3BsbjsKKwlpbnQgZXJyb3IgPSAwOworCXU4IGxwZl9sc2I7CisJdTggbHBmX21zYjsKKwl1OCBjcGxfbHNiOworCXU4IGNwbF9tc2I7CisJaW50IGluZGV4OworCisJZGV2aWNlID0gdG9fdHZwNzAwMihzZCk7CisKKwkvKiBSZWFkIHN0YW5kYXJkcyBmcm9tIGRldmljZSByZWdpc3RlcnMgKi8KKwl0dnA3MDAyX3JlYWRfZXJyKHNkLCBUVlA3MDAyX0xfRlJBTUVfU1RBVF9MU0JTLCAmbHBmX2xzYiwgJmVycm9yKTsKKwl0dnA3MDAyX3JlYWRfZXJyKHNkLCBUVlA3MDAyX0xfRlJBTUVfU1RBVF9NU0JTLCAmbHBmX21zYiwgJmVycm9yKTsKKworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKKworCXR2cDcwMDJfcmVhZF9lcnIoc2QsIFRWUDcwMDJfQ0xLX0xfU1RBVF9MU0JTLCAmY3BsX2xzYiwgJmVycm9yKTsKKwl0dnA3MDAyX3JlYWRfZXJyKHNkLCBUVlA3MDAyX0NMS19MX1NUQVRfTVNCUywgJmNwbF9tc2IsICZlcnJvcik7CisKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisKKwkvKiBHZXQgbGluZXMgcGVyIGZyYW1lLCBjbG9ja3MgcGVyIGxpbmUgYW5kIGludGVybGFjZWQvcHJvZ3Jlc2l2ZSAqLworCWxwZnIgPSBscGZfbHNiIHwgKChUVlA3MDAyX0NMX01BU0sgJiBscGZfbXNiKSA8PCBUVlA3MDAyX0NMX1NISUZUKTsKKwljcGxuID0gY3BsX2xzYiB8ICgoVFZQNzAwMl9DTF9NQVNLICYgY3BsX21zYikgPDwgVFZQNzAwMl9DTF9TSElGVCk7CisJcHJvZ3Jlc3NpdmUgPSAobHBmX21zYiAmIFRWUDcwMDJfSU5QUl9NQVNLKSA+PiBUVlA3MDAyX0lQX1NISUZUOworCisJLyogRG8gY2hlY2tpbmcgb2YgdmlkZW8gbW9kZXMgKi8KKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOVU1fUFJFU0VUUzsgaW5kZXgrKywgcHJlc2V0cysrKQorCQlpZiAobHBmciAgPT0gcHJlc2V0cy0+bGluZXNfcGVyX2ZyYW1lICYmCisJCQlwcm9ncmVzc2l2ZSA9PSBwcmVzZXRzLT5wcm9ncmVzc2l2ZSkgeworCQkJaWYgKHByZXNldHMtPmNwbF9taW4gPT0gMHhmZmZmKQorCQkJCWJyZWFrOworCQkJaWYgKGNwbG4gPj0gcHJlc2V0cy0+Y3BsX21pbiAmJiBjcGxuIDw9IHByZXNldHMtPmNwbF9tYXgpCisJCQkJYnJlYWs7CisJCX0KKworCWlmIChpbmRleCA9PSBOVU1fUFJFU0VUUykgeworCQl2NGwyX2VycihzZCwgInF1ZXJ5c3RkIGVycm9yLCBscGYgPSAleCwgY3BsID0gJXhcbiIsCisJCQkJCQkJCWxwZnIsIGNwbG4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodjRsX2ZpbGxfZHZfcHJlc2V0X2luZm8ocHJlc2V0cy0+cHJlc2V0LCAmZV9wcmVzZXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFNldCB2YWx1ZXMgaW4gZm91bmQgcHJlc2V0ICovCisJcXByZXNldC0+cHJlc2V0ID0gcHJlc2V0cy0+cHJlc2V0OworCisJLyogVXBkYXRlIGxpbmVzIHBlciBmcmFtZSBhbmQgY2xvY2tzIHBlciBsaW5lIGluZm8gKi8KKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJDdXJyZW50IHByZXNldDogJWQgJWQiLAorCQkJCQllX3ByZXNldC53aWR0aCwgZV9wcmVzZXQuaGVpZ2h0KTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKy8qCisgKiB0dnA3MDAyX2dfcmVnaXN0ZXIoKSAtIEdldCB0aGUgdmFsdWUgb2YgYSByZWdpc3RlcgorICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAdnJlZzogcHRyIHRvIHY0bDJfZGJnX3JlZ2lzdGVyIHN0cnVjdAorICoKKyAqIEdldCB0aGUgdmFsdWUgb2YgYSBUVlA3MDAyIGRlY29kZXIgZGV2aWNlIHJlZ2lzdGVyLgorICogUmV0dXJucyB6ZXJvIHdoZW4gc3VjY2Vzc2Z1bCwgLUVJTlZBTCBpZiByZWdpc3RlciByZWFkIGZhaWxzIG9yCisgKiBhY2Nlc3MgdG8gSTJDIGNsaWVudCBmYWlscywgLUVQRVJNIGlmIHRoZSBjYWxsIGlzIG5vdCBhbGxvd2VkCisgKiBieSBkaWFibGVkIENBUF9TWVNfQURNSU4uCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9nX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJCQlzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJdTggdmFsOworCWludCByZXQ7CisKKwlpZiAoIXY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KGNsaWVudCwgJnJlZy0+bWF0Y2gpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwlyZXQgPSB0dnA3MDAyX3JlYWQoc2QsIHJlZy0+cmVnICYgMHhmZiwgJnZhbCk7CisJcmVnLT52YWwgPSB2YWw7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHR2cDcwMDJfc19yZWdpc3RlcigpIC0gc2V0IGEgY29udHJvbAorICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKiBAY3RybDogcHRyIHRvIHY0bDJfY29udHJvbCBzdHJ1Y3QKKyAqCisgKiBHZXQgdGhlIHZhbHVlIG9mIGEgVFZQNzAwMiBkZWNvZGVyIGRldmljZSByZWdpc3Rlci4KKyAqIFJldHVybnMgemVybyB3aGVuIHN1Y2Nlc3NmdWwsIC1FSU5WQUwgaWYgcmVnaXN0ZXIgcmVhZCBmYWlscyBvcgorICogLUVQRVJNIGlmIGNhbGwgbm90IGFsbG93ZWQuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9zX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJCQlzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlpZiAoIXY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KGNsaWVudCwgJnJlZy0+bWF0Y2gpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwlyZXR1cm4gdHZwNzAwMl93cml0ZShzZCwgcmVnLT5yZWcgJiAweGZmLCByZWctPnZhbCAmIDB4ZmYpOworfQorI2VuZGlmCisKKy8qCisgKiB0dnA3MDAyX2VudW1fZm10KCkgLSBFbnVtIHN1cHBvcnRlZCBmb3JtYXRzCisgKiBAc2Q6IHBvaW50ZXIgdG8gc3RhbmRhcmQgVjRMMiBzdWItZGV2aWNlIHN0cnVjdHVyZQorICogQGVuYWJsZTogcG9pbnRlciB0byBmb3JtYXQgc3RydWN0CisgKgorICogRW51bWVyYXRlIHN1cHBvcnRlZCBmb3JtYXRzLgorICovCisKK3N0YXRpYyBpbnQgdHZwNzAwMl9lbnVtX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10ZGVzYykKK3sKKwkvKiBDaGVjayByZXF1ZXN0ZWQgZm9ybWF0IGluZGV4IGlzIHdpdGhpbiByYW5nZSAqLworCWlmIChmbXRkZXNjLT5pbmRleCA8IDAgfHwgZm10ZGVzYy0+aW5kZXggPj0gTlVNX0ZPUk1BVFMpCisJCXJldHVybiAtRUlOVkFMOworCSpmbXRkZXNjID0gdHZwNzAwMl9mbXRfbGlzdFtmbXRkZXNjLT5pbmRleF07CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHR2cDcwMDJfc19zdHJlYW0oKSAtIFY0TDIgZGVjb2RlciBpL2YgaGFuZGxlciBmb3Igc19zdHJlYW0KKyAqIEBzZDogcG9pbnRlciB0byBzdGFuZGFyZCBWNEwyIHN1Yi1kZXZpY2Ugc3RydWN0dXJlCisgKiBAZW5hYmxlOiBzdHJlYW1pbmcgZW5hYmxlIG9yIGRpc2FibGUKKyAqCisgKiBTZXRzIHN0cmVhbWluZyB0byBlbmFibGUgb3IgZGlzYWJsZSwgaWYgcG9zc2libGUuCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCB0dnA3MDAyICpkZXZpY2UgPSB0b190dnA3MDAyKHNkKTsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKGRldmljZS0+c3RyZWFtaW5nID09IGVuYWJsZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZW5hYmxlKSB7CisJCS8qIFNldCBvdXRwdXQgc3RhdGUgb24gKGxvdyBpbXBlZGFuY2UgbWVhbnMgc3RyZWFtIG9uKSAqLworCQllcnJvciA9IHR2cDcwMDJfd3JpdGUoc2QsIFRWUDcwMDJfTUlTQ19DVExfMiwgMHgwMCk7CisJCWRldmljZS0+c3RyZWFtaW5nID0gZW5hYmxlOworCX0gZWxzZSB7CisJCS8qIFNldCBvdXRwdXQgc3RhdGUgb2ZmIChoaWdoIGltcGVkYW5jZSBtZWFucyBzdHJlYW0gb2ZmKSAqLworCQllcnJvciA9IHR2cDcwMDJfd3JpdGUoc2QsIFRWUDcwMDJfTUlTQ19DVExfMiwgMHgwMyk7CisJCWlmIChlcnJvcikKKwkJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlVuYWJsZSB0byBzdG9wIHN0cmVhbWluZ1xuIik7CisKKwkJZGV2aWNlLT5zdHJlYW1pbmcgPSBlbmFibGU7CisJfQorCisJcmV0dXJuIGVycm9yOworfQorCisvKgorICogdHZwNzAwMl9sb2dfc3RhdHVzKCkgLSBQcmludCBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlciBzZXR0aW5ncworICogQHNkOiBwdHIgdG8gdjRsMl9zdWJkZXYgc3RydWN0CisgKgorICogTG9nIHJlZ2lzdGVyIHZhbHVlcyBvZiBhIFRWUDcwMDIgZGVjb2RlciBkZXZpY2UuCisgKiBSZXR1cm5zIHplcm8gb3IgLUVJTlZBTCBpZiByZWFkIG9wZXJhdGlvbiBmYWlscy4KKyAqLworc3RhdGljIGludCB0dnA3MDAyX2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwljb25zdCBzdHJ1Y3QgdHZwNzAwMl9wcmVzZXRfZGVmaW5pdGlvbiAqcHJlc2V0cyA9IHR2cDcwMDJfcHJlc2V0czsKKwlzdHJ1Y3QgdHZwNzAwMiAqZGV2aWNlID0gdG9fdHZwNzAwMihzZCk7CisJc3RydWN0IHY0bDJfZHZfZW51bV9wcmVzZXQgZV9wcmVzZXQ7CisJc3RydWN0IHY0bDJfZHZfcHJlc2V0IGRldGVjdGVkOworCWludCBpOworCisJZGV0ZWN0ZWQucHJlc2V0ID0gVjRMMl9EVl9JTlZBTElEOworCS8qIEZpbmQgbXkgY3VycmVudCBzdGFuZGFyZCovCisJdHZwNzAwMl9xdWVyeV9kdl9wcmVzZXQoc2QsICZkZXRlY3RlZCk7CisKKwkvKiBQcmludCBzdGFuZGFyZCByZWxhdGVkIGNvZGUgdmFsdWVzICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9QUkVTRVRTOyBpKyssIHByZXNldHMrKykKKwkJaWYgKHByZXNldHMtPnByZXNldCA9PSBkZXRlY3RlZC5wcmVzZXQpCisJCQlicmVhazsKKworCWlmICh2NGxfZmlsbF9kdl9wcmVzZXRfaW5mbyhkZXZpY2UtPmN1cnJlbnRfcHJlc2V0LT5wcmVzZXQsICZlX3ByZXNldCkpCisJCXJldHVybiAtRUlOVkFMOworCisJdjRsMl9pbmZvKHNkLCAiU2VsZWN0ZWQgRFYgUHJlc2V0OiAlc1xuIiwgZV9wcmVzZXQubmFtZSk7CisJdjRsMl9pbmZvKHNkLCAiICAgUGl4ZWxzIHBlciBsaW5lOiAldVxuIiwgZV9wcmVzZXQud2lkdGgpOworCXY0bDJfaW5mbyhzZCwgIiAgIExpbmVzIHBlciBmcmFtZTogJXVcblxuIiwgZV9wcmVzZXQuaGVpZ2h0KTsKKwlpZiAoaSA9PSBOVU1fUFJFU0VUUykgeworCQl2NGwyX2luZm8oc2QsICJEZXRlY3RlZCBEViBQcmVzZXQ6IE5vbmVcbiIpOworCX0gZWxzZSB7CisJCWlmICh2NGxfZmlsbF9kdl9wcmVzZXRfaW5mbyhwcmVzZXRzLT5wcmVzZXQsICZlX3ByZXNldCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJdjRsMl9pbmZvKHNkLCAiRGV0ZWN0ZWQgRFYgUHJlc2V0OiAlc1xuIiwgZV9wcmVzZXQubmFtZSk7CisJCXY0bDJfaW5mbyhzZCwgIiAgUGl4ZWxzIHBlciBsaW5lOiAldVxuIiwgZV9wcmVzZXQud2lkdGgpOworCQl2NGwyX2luZm8oc2QsICIgIExpbmVzIHBlciBmcmFtZTogJXVcblxuIiwgZV9wcmVzZXQuaGVpZ2h0KTsKKwl9CisJdjRsMl9pbmZvKHNkLCAiU3RyZWFtaW5nIGVuYWJsZWQ6ICVzXG4iLAorCQkJCQlkZXZpY2UtPnN0cmVhbWluZyA/ICJ5ZXMiIDogIm5vIik7CisKKwkvKiBQcmludCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZ2FpbiBjb250cm9sICovCisJdjRsMl9pbmZvKHNkLCAiR2FpbjogJXVcbiIsIGRldmljZS0+Z2Fpbik7CisKKwlyZXR1cm4gMDsKK30KKworLyogVjRMMiBjb3JlIG9wZXJhdGlvbiBoYW5kbGVycyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB0dnA3MDAyX2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSB0dnA3MDAyX2dfY2hpcF9pZGVudCwKKwkubG9nX3N0YXR1cyA9IHR2cDcwMDJfbG9nX3N0YXR1cywKKwkuZ19jdHJsID0gdHZwNzAwMl9nX2N0cmwsCisJLnNfY3RybCA9IHR2cDcwMDJfc19jdHJsLAorCS5xdWVyeWN0cmwgPSB0dnA3MDAyX3F1ZXJ5Y3RybCwKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLmdfcmVnaXN0ZXIgPSB0dnA3MDAyX2dfcmVnaXN0ZXIsCisJLnNfcmVnaXN0ZXIgPSB0dnA3MDAyX3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKKy8qIFNwZWNpZmljIHZpZGVvIHN1YnN5c3RlbSBvcGVyYXRpb24gaGFuZGxlcnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHR2cDcwMDJfdmlkZW9fb3BzID0geworCS5zX2R2X3ByZXNldCA9IHR2cDcwMDJfc19kdl9wcmVzZXQsCisJLnF1ZXJ5X2R2X3ByZXNldCA9IHR2cDcwMDJfcXVlcnlfZHZfcHJlc2V0LAorCS5zX3N0cmVhbSA9IHR2cDcwMDJfc19zdHJlYW0sCisJLmdfZm10ID0gdHZwNzAwMl9nX2ZtdCwKKwkuc19mbXQgPSB0dnA3MDAyX3NfZm10LAorCS5lbnVtX2ZtdCA9IHR2cDcwMDJfZW51bV9mbXQsCit9OworCisvKiBWNEwyIHRvcCBsZXZlbCBvcGVyYXRpb24gaGFuZGxlcnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHR2cDcwMDJfb3BzID0geworCS5jb3JlID0gJnR2cDcwMDJfY29yZV9vcHMsCisJLnZpZGVvID0gJnR2cDcwMDJfdmlkZW9fb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCB0dnA3MDAyIHR2cDcwMDJfZGV2ID0geworCS5zdHJlYW1pbmcgPSAwLAorCisJLnBpeCA9IHsKKwkJLndpZHRoID0gMTI4MCwKKwkJLmhlaWdodCA9IDcyMCwKKwkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1VZVlksCisJCS5maWVsZCA9IFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDEyODAgKiAyLAorCQkuc2l6ZWltYWdlID0gMTI4MCAqIDIgKiA3MjAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1JFQzcwOSwKKwkJfSwKKworCS5jdXJyZW50X3ByZXNldCA9IHR2cDcwMDJfcHJlc2V0cywKKwkuZ2FpbiA9IDAsCit9OworCisvKgorICogdHZwNzAwMl9wcm9iZSAtIFByb2JlIGEgVFZQNzAwMiBkZXZpY2UKKyAqIEBzZDogcHRyIHRvIHY0bDJfc3ViZGV2IHN0cnVjdAorICogQGN0cmw6IHB0ciB0byBpMmNfZGV2aWNlX2lkIHN0cnVjdAorICoKKyAqIEluaXRpYWxpemUgdGhlIFRWUDcwMDIgZGV2aWNlCisgKiBSZXR1cm5zIHplcm8gd2hlbiBzdWNjZXNzZnVsLCAtRUlOVkFMIGlmIHJlZ2lzdGVyIHJlYWQgZmFpbHMgb3IKKyAqIC1FSU8gaWYgaTJjIGFjY2VzcyBpcyBub3QgYXZhaWxhYmxlLgorICovCitzdGF0aWMgaW50IHR2cDcwMDJfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmMsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCXN0cnVjdCB0dnA3MDAyICpkZXZpY2U7CisJc3RydWN0IHY0bDJfZHZfcHJlc2V0IHByZXNldDsKKwlpbnQgcG9sYXJpdHlfYTsKKwlpbnQgcG9sYXJpdHlfYjsKKwl1OCByZXZpc2lvbjsKKworCWludCBlcnJvcjsKKworCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGMtPmFkYXB0ZXIsCisJCUkyQ19GVU5DX1NNQlVTX1JFQURfQllURSB8IEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQSkpCisJCXJldHVybiAtRUlPOworCisJaWYgKCFjLT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQl2NGxfZXJyKGMsICJObyBwbGF0Zm9ybSBkYXRhISFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXZpY2UgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHZwNzAwMiksIEdGUF9LRVJORUwpOworCisJaWYgKCFkZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJKmRldmljZSA9IHR2cDcwMDJfZGV2OworCXNkID0gJmRldmljZS0+c2Q7CisJZGV2aWNlLT5wZGF0YSA9IGMtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJLyogVGVsbCB2NGwyIHRoZSBkZXZpY2UgaXMgcmVhZHkgKi8KKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgYywgJnR2cDcwMDJfb3BzKTsKKwl2NGxfaW5mbyhjLCAidHZwNzAwMiBmb3VuZCBAIDB4JTAyeCAoJXMpXG4iLAorCQkJCQljLT5hZGRyLCBjLT5hZGFwdGVyLT5uYW1lKTsKKworCWVycm9yID0gdHZwNzAwMl9yZWFkKHNkLCBUVlA3MDAyX0NISVBfUkVWLCAmcmV2aXNpb24pOworCWlmIChlcnJvciA8IDApCisJCWdvdG8gZm91bmRfZXJyb3I7CisKKwkvKiBHZXQgcmV2aXNpb24gbnVtYmVyICovCisJdjRsMl9pbmZvKHNkLCAiUmV2LiAlMDJ4IGRldGVjdGVkLlxuIiwgcmV2aXNpb24pOworCWlmIChyZXZpc2lvbiAhPSAweDAyKQorCQl2NGwyX2luZm8oc2QsICJVbmtub3duIHJldmlzaW9uIGRldGVjdGVkLlxuIik7CisKKwkvKiBJbml0aWFsaXplcyBUVlA3MDAyIHRvIGl0cyBkZWZhdWx0IHZhbHVlcyAqLworCWVycm9yID0gdHZwNzAwMl93cml0ZV9pbml0dGFiKHNkLCB0dnA3MDAyX2luaXRfZGVmYXVsdCk7CisKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIGZvdW5kX2Vycm9yOworCisJLyogU2V0IHBvbGFyaXR5IGluZm9ybWF0aW9uIGFmdGVyIHJlZ2lzdGVycyBoYXZlIGJlZW4gc2V0ICovCisJcG9sYXJpdHlfYSA9IDB4MjAgfCBkZXZpY2UtPnBkYXRhLT5oc19wb2xhcml0eSA8PCA1CisJCQl8IGRldmljZS0+cGRhdGEtPnZzX3BvbGFyaXR5IDw8IDI7CisJZXJyb3IgPSB0dnA3MDAyX3dyaXRlKHNkLCBUVlA3MDAyX1NZTkNfQ1RMXzEsIHBvbGFyaXR5X2EpOworCWlmIChlcnJvciA8IDApCisJCWdvdG8gZm91bmRfZXJyb3I7CisKKwlwb2xhcml0eV9iID0gMHgwMSAgfCBkZXZpY2UtPnBkYXRhLT5maWRfcG9sYXJpdHkgPDwgMgorCQkJfCBkZXZpY2UtPnBkYXRhLT5zb2dfcG9sYXJpdHkgPDwgMQorCQkJfCBkZXZpY2UtPnBkYXRhLT5jbGtfcG9sYXJpdHk7CisJZXJyb3IgPSB0dnA3MDAyX3dyaXRlKHNkLCBUVlA3MDAyX01JU0NfQ1RMXzMsIHBvbGFyaXR5X2IpOworCWlmIChlcnJvciA8IDApCisJCWdvdG8gZm91bmRfZXJyb3I7CisKKwkvKiBTZXQgcmVnaXN0ZXJzIGFjY29yZGluZyB0byBkZWZhdWx0IHZpZGVvIG1vZGUgKi8KKwlwcmVzZXQucHJlc2V0ID0gZGV2aWNlLT5jdXJyZW50X3ByZXNldC0+cHJlc2V0OworCWVycm9yID0gdHZwNzAwMl9zX2R2X3ByZXNldChzZCwgJnByZXNldCk7CisKK2ZvdW5kX2Vycm9yOgorCWlmIChlcnJvciA8IDApCisJCWtmcmVlKGRldmljZSk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiB0dnA3MDAyX3JlbW92ZSAtIFJlbW92ZSBUVlA3MDAyIGRldmljZSBzdXBwb3J0CisgKiBAYzogcHRyIHRvIGkyY19jbGllbnQgc3RydWN0CisgKgorICogUmVzZXQgdGhlIFRWUDcwMDIgZGV2aWNlCisgKiBSZXR1cm5zIHplcm8uCisgKi8KK3N0YXRpYyBpbnQgdHZwNzAwMl9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmMpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwlzdHJ1Y3QgdHZwNzAwMiAqZGV2aWNlID0gdG9fdHZwNzAwMihzZCk7CisKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJSZW1vdmluZyB0dnA3MDAyIGFkYXB0ZXIiCisJCQkJIm9uIGFkZHJlc3MgMHgleFxuIiwgYy0+YWRkcik7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUoZGV2aWNlKTsKKwlyZXR1cm4gMDsKK30KKworLyogSTJDIERldmljZSBJRCB0YWJsZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHR2cDcwMDJfaWRbXSA9IHsKKwl7ICJ0dnA3MDAyIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0dnA3MDAyX2lkKTsKKworLyogSTJDIGRyaXZlciBkYXRhICovCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdHZwNzAwMl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5uYW1lID0gVFZQNzAwMl9NT0RVTEVfTkFNRSwKKwl9LAorCS5wcm9iZSA9IHR2cDcwMDJfcHJvYmUsCisJLnJlbW92ZSA9IHR2cDcwMDJfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHR2cDcwMDJfaWQsCit9OworCisvKgorICogdHZwNzAwMl9pbml0IC0gSW5pdGlhbGl6ZSBkcml2ZXIgdmlhIEkyQyBpbnRlcmZhY2UKKyAqCisgKiBSZWdpc3RlciB0aGUgVFZQNzAwMiBkcml2ZXIuCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBfX2luaXQgdHZwNzAwMl9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0dnA3MDAyX2RyaXZlcik7Cit9CisKKy8qCisgKiB0dnA3MDAyX2V4aXQgLSBSZW1vdmUgZHJpdmVyIHZpYSBJMkMgaW50ZXJmYWNlCisgKgorICogVW5yZWdpc3RlciB0aGUgVFZQNzAwMiBkcml2ZXIuCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCB0dnA3MDAyX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmdHZwNzAwMl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0dnA3MDAyX2luaXQpOworbW9kdWxlX2V4aXQodHZwNzAwMl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNzAwMl9yZWcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNzAwMl9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTM0Y2E5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA3MDAyX3JlZy5oCkBAIC0wLDAgKzEsMTUwIEBACisvKiBUZXhhcyBJbnN0cnVtZW50cyBUcmlwbGUgOC0vMTAtQklUIDE2NS0vMTEwLU1TUFMgVmlkZW8gYW5kIEdyYXBoaWNzCisgKiBEaWdpdGl6ZXIgd2l0aCBIb3Jpem9udGFsIFBMTCByZWdpc3RlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKiBBdXRob3I6IFNhbnRpYWdvIE51bmV6LUNvcnJhbGVzIDxzYW50aWFnby5udW5lekByaWRnZXJ1bi5jb20+CisgKgorICogVGhpcyBjb2RlIGlzIHBhcnRpYWxseSBiYXNlZCB1cG9uIHRoZSBUVlA1MTUwIGRyaXZlcgorICogd3JpdHRlbiBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgKG1jaGVoYWJAaW5mcmFkZWFkLm9yZyksCisgKiB0aGUgVFZQNTE0eCBkcml2ZXIgd3JpdHRlbiBieSBWYWliaGF2IEhpcmVtYXRoIDxodmFpYmhhdkB0aS5jb20+CisgKiBhbmQgdGhlIFRWUDcwMDIgZHJpdmVyIGluIHRoZSBUSSBMU1AgMi4xMC4wMC4xNAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIE5hbWluZyBjb252ZW50aW9ucworICogLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogRkRCSzogIEZlZWRiYWNrCisgKiBESVY6ICAgRGl2aWRlcgorICogQ1RMOiAgIENvbnRyb2wKKyAqIFNFTDogICBTZWxlY3QKKyAqIElOOiAgICBJbnB1dAorICogT1VUOiAgIE91dHB1dAorICogUjogICAgIFJlZAorICogRzogICAgIEdyZWVuCisgKiBCOiAgICAgQmx1ZQorICogT0ZGOiAgIE9mZnNldAorICogVEhSUzogIFRocmVzaG9sZAorICogREdUTDogIERpZ2l0YWwKKyAqIExWTDogICBMZXZlbAorICogUFdSOiAgIFBvd2VyCisgKiBNVklTOiAgTWFjcm92aXNpb24KKyAqIFc6ICAgICBXaWR0aAorICogSDogICAgIEhlaWdodAorICogQUxHTjogIEFsaWdubWVudAorICogQ0xLOiAgIENsb2NrcworICogVE9MOiAgIFRvbGVyYW5jZQorICogQldUSDogIEJhbmR3aWR0aAorICogQ09FRjogIENvZWZmaWNpZW50CisgKiBTVEFUOiAgU3RhdHVzCisgKiBBVVRPOiAgQXV0b21hdGljCisgKiBGTEQ6ICAgRmllbGQKKyAqIEw6CSAgTGluZQorICovCisKKyNkZWZpbmUgVFZQNzAwMl9DSElQX1JFVgkJMHgwMAorI2RlZmluZSBUVlA3MDAyX0hQTExfRkRCS19ESVZfTVNCUwkweDAxCisjZGVmaW5lIFRWUDcwMDJfSFBMTF9GREJLX0RJVl9MU0JTCTB4MDIKKyNkZWZpbmUgVFZQNzAwMl9IUExMX0NSVEwJCTB4MDMKKyNkZWZpbmUgVFZQNzAwMl9IUExMX1BIQVNFX1NFTAkJMHgwNAorI2RlZmluZSBUVlA3MDAyX0NMQU1QX1NUQVJUCQkweDA1CisjZGVmaW5lIFRWUDcwMDJfQ0xBTVBfVwkJCTB4MDYKKyNkZWZpbmUgVFZQNzAwMl9IU1lOQ19PVVRfVwkJMHgwNworI2RlZmluZSBUVlA3MDAyX0JfRklORV9HQUlOCQkweDA4CisjZGVmaW5lIFRWUDcwMDJfR19GSU5FX0dBSU4JCTB4MDkKKyNkZWZpbmUgVFZQNzAwMl9SX0ZJTkVfR0FJTgkJMHgwYQorI2RlZmluZSBUVlA3MDAyX0JfRklORV9PRkZfTVNCUwkJMHgwYgorI2RlZmluZSBUVlA3MDAyX0dfRklORV9PRkZfTVNCUyAgICAgICAgIDB4MGMKKyNkZWZpbmUgVFZQNzAwMl9SX0ZJTkVfT0ZGX01TQlMgICAgICAgICAweDBkCisjZGVmaW5lIFRWUDcwMDJfU1lOQ19DVExfMQkJMHgwZQorI2RlZmluZSBUVlA3MDAyX0hQTExfQU5EX0NMQU1QX0NUTAkweDBmCisjZGVmaW5lIFRWUDcwMDJfU1lOQ19PTl9HX1RIUlMJCTB4MTAKKyNkZWZpbmUgVFZQNzAwMl9TWU5DX1NFUEFSQVRPUl9USFJTCTB4MTEKKyNkZWZpbmUgVFZQNzAwMl9IUExMX1BSRV9DT0FTVAkJMHgxMgorI2RlZmluZSBUVlA3MDAyX0hQTExfUE9TVF9DT0FTVAkJMHgxMworI2RlZmluZSBUVlA3MDAyX1NZTkNfREVURUNUX1NUQVQJMHgxNAorI2RlZmluZSBUVlA3MDAyX09VVF9GT1JNQVRURVIJCTB4MTUKKyNkZWZpbmUgVFZQNzAwMl9NSVNDX0NUTF8xCQkweDE2CisjZGVmaW5lIFRWUDcwMDJfTUlTQ19DVExfMiAgICAgICAgICAgICAgMHgxNworI2RlZmluZSBUVlA3MDAyX01JU0NfQ1RMXzMgICAgICAgICAgICAgIDB4MTgKKyNkZWZpbmUgVFZQNzAwMl9JTl9NVVhfU0VMXzEJCTB4MTkKKyNkZWZpbmUgVFZQNzAwMl9JTl9NVVhfU0VMXzIgICAgICAgICAgICAweDFhCisjZGVmaW5lIFRWUDcwMDJfQl9BTkRfR19DT0FSU0VfR0FJTgkweDFiCisjZGVmaW5lIFRWUDcwMDJfUl9DT0FSU0VfR0FJTgkJMHgxYworI2RlZmluZSBUVlA3MDAyX0ZJTkVfT0ZGX0xTQlMJCTB4MWQKKyNkZWZpbmUgVFZQNzAwMl9CX0NPQVJTRV9PRkYJCTB4MWUKKyNkZWZpbmUgVFZQNzAwMl9HX0NPQVJTRV9PRkYgICAgICAgICAgICAweDFmCisjZGVmaW5lIFRWUDcwMDJfUl9DT0FSU0VfT0ZGICAgICAgICAgICAgMHgyMAorI2RlZmluZSBUVlA3MDAyX0hTT1VUX09VVF9TVEFSVAkJMHgyMQorI2RlZmluZSBUVlA3MDAyX01JU0NfQ1RMXzQJCTB4MjIKKyNkZWZpbmUgVFZQNzAwMl9CX0RHVExfQUxDX09VVF9MU0JTCTB4MjMKKyNkZWZpbmUgVFZQNzAwMl9HX0RHVExfQUxDX09VVF9MU0JTICAgICAweDI0CisjZGVmaW5lIFRWUDcwMDJfUl9ER1RMX0FMQ19PVVRfTFNCUyAgICAgMHgyNQorI2RlZmluZSBUVlA3MDAyX0FVVE9fTFZMX0NUTF9FTkFCTEUJMHgyNgorI2RlZmluZSBUVlA3MDAyX0RHVExfQUxDX09VVF9NU0JTCTB4MjcKKyNkZWZpbmUgVFZQNzAwMl9BVVRPX0xWTF9DVExfRklMVEVSCTB4MjgKKy8qIFJlc2VydmVkIDB4MjkqLworI2RlZmluZSBUVlA3MDAyX0ZJTkVfQ0xBTVBfQ1RMCQkweDJhCisjZGVmaW5lIFRWUDcwMDJfUFdSX0NUTAkJCTB4MmIKKyNkZWZpbmUgVFZQNzAwMl9BRENfU0VUVVAJCTB4MmMKKyNkZWZpbmUgVFZQNzAwMl9DT0FSU0VfQ0xBTVBfQ1RMCTB4MmQKKyNkZWZpbmUgVFZQNzAwMl9TT0dfQ0xBTVAJCTB4MmUKKyNkZWZpbmUgVFZQNzAwMl9SR0JfQ09BUlNFX0NMQU1QX0NUTAkweDJmCisjZGVmaW5lIFRWUDcwMDJfU09HX0NPQVJTRV9DTEFNUF9DVEwJMHgzMAorI2RlZmluZSBUVlA3MDAyX0FMQ19QTEFDRU1FTlQJCTB4MzEKKy8qIFJlc2VydmVkIDB4MzIgKi8KKy8qIFJlc2VydmVkIDB4MzMgKi8KKyNkZWZpbmUgVFZQNzAwMl9NVklTX1NUUklQUEVSX1cJCTB4MzQKKyNkZWZpbmUgVFZQNzAwMl9WU1lOQ19BTEdOCQkweDM1CisjZGVmaW5lIFRWUDcwMDJfU1lOQ19CWVBBU1MJCTB4MzYKKyNkZWZpbmUgVFZQNzAwMl9MX0ZSQU1FX1NUQVRfTFNCUwkweDM3CisjZGVmaW5lIFRWUDcwMDJfTF9GUkFNRV9TVEFUX01TQlMJMHgzOAorI2RlZmluZSBUVlA3MDAyX0NMS19MX1NUQVRfTFNCUwkJMHgzOQorI2RlZmluZSBUVlA3MDAyX0NMS19MX1NUQVRfTVNCUyAgICAgIAkweDNhCisjZGVmaW5lIFRWUDcwMDJfSFNZTkNfVwkJCTB4M2IKKyNkZWZpbmUgVFZQNzAwMl9WU1lOQ19XICAgICAgICAgICAgICAgICAweDNjCisjZGVmaW5lIFRWUDcwMDJfTF9MRU5HVEhfVE9MIAkJMHgzZAorLyogUmVzZXJ2ZWQgMHgzZSAqLworI2RlZmluZSBUVlA3MDAyX1ZJREVPX0JXVEhfQ1RMCQkweDNmCisjZGVmaW5lIFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9MU0JTCTB4NDAKKyNkZWZpbmUgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX01TQlMgICAweDQxCisjZGVmaW5lIFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX0xTQlMgIAkweDQyCisjZGVmaW5lIFRWUDcwMDJfQVZJRF9TVE9QX1BJWEVMX01TQlMgICAgMHg0MworI2RlZmluZSBUVlA3MDAyX1ZCTEtfRl8wX1NUQVJUX0xfT0ZGCTB4NDQKKyNkZWZpbmUgVFZQNzAwMl9WQkxLX0ZfMV9TVEFSVF9MX09GRiAgICAweDQ1CisjZGVmaW5lIFRWUDcwMDJfVkJMS19GXzBfRFVSQVRJT04JMHg0NgorI2RlZmluZSBUVlA3MDAyX1ZCTEtfRl8xX0RVUkFUSU9OICAgICAgIDB4NDcKKyNkZWZpbmUgVFZQNzAwMl9GQklUX0ZfMF9TVEFSVF9MX09GRgkweDQ4CisjZGVmaW5lIFRWUDcwMDJfRkJJVF9GXzFfU1RBUlRfTF9PRkYgICAgMHg0OQorI2RlZmluZSBUVlA3MDAyX1lVVl9ZX0dfQ09FRl9MU0JTCTB4NGEKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfWV9HX0NPRUZfTVNCUyAgICAgICAweDRiCisjZGVmaW5lIFRWUDcwMDJfWVVWX1lfQl9DT0VGX0xTQlMgICAgICAgMHg0YworI2RlZmluZSBUVlA3MDAyX1lVVl9ZX0JfQ09FRl9NU0JTICAgICAgIDB4NGQKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfWV9SX0NPRUZfTFNCUyAgICAgICAweDRlCisjZGVmaW5lIFRWUDcwMDJfWVVWX1lfUl9DT0VGX01TQlMgICAgICAgMHg0ZgorI2RlZmluZSBUVlA3MDAyX1lVVl9VX0dfQ09FRl9MU0JTICAgICAgIDB4NTAKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfVV9HX0NPRUZfTVNCUyAgICAgICAweDUxCisjZGVmaW5lIFRWUDcwMDJfWVVWX1VfQl9DT0VGX0xTQlMgICAgICAgMHg1MgorI2RlZmluZSBUVlA3MDAyX1lVVl9VX0JfQ09FRl9NU0JTICAgICAgIDB4NTMKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfVV9SX0NPRUZfTFNCUyAgICAgICAweDU0CisjZGVmaW5lIFRWUDcwMDJfWVVWX1VfUl9DT0VGX01TQlMgICAgICAgMHg1NQorI2RlZmluZSBUVlA3MDAyX1lVVl9WX0dfQ09FRl9MU0JTICAgICAgIDB4NTYKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfVl9HX0NPRUZfTVNCUyAgICAgICAweDU3CisjZGVmaW5lIFRWUDcwMDJfWVVWX1ZfQl9DT0VGX0xTQlMgICAgICAgMHg1OAorI2RlZmluZSBUVlA3MDAyX1lVVl9WX0JfQ09FRl9NU0JTICAgICAgIDB4NTkKKyNkZWZpbmUgVFZQNzAwMl9ZVVZfVl9SX0NPRUZfTFNCUyAgICAgICAweDVhCisjZGVmaW5lIFRWUDcwMDJfWVVWX1ZfUl9DT0VGX01TQlMgICAgICAgMHg1YgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dzk5MTAuYwppbmRleCA1YjgwMWE2Li43NmJlNzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHc5OTEwLmMKQEAgLTIzMywxMCArMjMzLDEwIEBACiB9OwogCiBzdHJ1Y3QgdHc5OTEwX3ByaXYgewotCXN0cnVjdCB2NGwyX3N1YmRldiAgICAgICAgICAgICAgICBzdWJkZXY7Ci0Jc3RydWN0IHR3OTkxMF92aWRlb19pbmZvICAgICAgICppbmZvOwotCWNvbnN0IHN0cnVjdCB0dzk5MTBfc2NhbGVfY3RybCAqc2NhbGU7Ci0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYJCXN1YmRldjsKKwlzdHJ1Y3QgdHc5OTEwX3ZpZGVvX2luZm8JKmluZm87CisJY29uc3Qgc3RydWN0IHR3OTkxMF9zY2FsZV9jdHJsCSpzY2FsZTsKKwl1MzIJCQkJcmV2aXNpb247CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHR3OTkxMF9zY2FsZV9jdHJsIHR3OTkxMF9udHNjX3NjYWxlc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYwppbmRleCAxMDU0NTQ2Li43YzE3ZWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYwpAQCAtMTQ4Nyw3ICsxNDg3LDcgQEAKIAkJdXNidmlzaW9uLT52YmkgPSB1c2J2aXNpb25fdmRldl9pbml0KHVzYnZpc2lvbiwKIAkJCQkJCSAgICAgJnVzYnZpc2lvbl92YmlfdGVtcGxhdGUsCiAJCQkJCQkgICAgICJVU0JWaXNpb24gVkJJIik7Ci0JCWlmICh1c2J2aXNpb24tPnZkZXYgPT0gTlVMTCkgeworCQlpZiAodXNidmlzaW9uLT52YmkgPT0gTlVMTCkgewogCQkJZ290byBlcnJfZXhpdDsKIAkJfQogCQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHVzYnZpc2lvbi0+dmJpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKaW5kZXggZWM4ZWY4Yy4uM2IyZTc4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCkBAIC0yMyw5ICsyMywxMyBAQAogCiAjaW5jbHVkZSAidXZjdmlkZW8uaCIKIAotI2RlZmluZSBVVkNfQ1RSTF9OREFUQQkJMgogI2RlZmluZSBVVkNfQ1RSTF9EQVRBX0NVUlJFTlQJMAogI2RlZmluZSBVVkNfQ1RSTF9EQVRBX0JBQ0tVUAkxCisjZGVmaW5lIFVWQ19DVFJMX0RBVEFfTUlOCTIKKyNkZWZpbmUgVVZDX0NUUkxfREFUQV9NQVgJMworI2RlZmluZSBVVkNfQ1RSTF9EQVRBX1JFUwk0CisjZGVmaW5lIFVWQ19DVFJMX0RBVEFfREVGCTUKKyNkZWZpbmUgVVZDX0NUUkxfREFUQV9MQVNUCTYKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDb250cm9scwpAQCAtNzU1LDYgKzc1OSw0OSBAQAogCXJldHVybiBjdHJsOwogfQogCitzdGF0aWMgaW50IHV2Y19jdHJsX3BvcHVsYXRlX2NhY2hlKHN0cnVjdCB1dmNfdmlkZW9fY2hhaW4gKmNoYWluLAorCXN0cnVjdCB1dmNfY29udHJvbCAqY3RybCkKK3sKKwlpbnQgcmV0OworCisJaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX0RFRikgeworCQlyZXQgPSB1dmNfcXVlcnlfY3RybChjaGFpbi0+ZGV2LCBVVkNfR0VUX0RFRiwgY3RybC0+ZW50aXR5LT5pZCwKKwkJCQkgICAgIGNoYWluLT5kZXYtPmludGZudW0sIGN0cmwtPmluZm8tPnNlbGVjdG9yLAorCQkJCSAgICAgdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX0RFRiksCisJCQkJICAgICBjdHJsLT5pbmZvLT5zaXplKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9NSU4pIHsKKwkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoY2hhaW4tPmRldiwgVVZDX0dFVF9NSU4sIGN0cmwtPmVudGl0eS0+aWQsCisJCQkJICAgICBjaGFpbi0+ZGV2LT5pbnRmbnVtLCBjdHJsLT5pbmZvLT5zZWxlY3RvciwKKwkJCQkgICAgIHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9NSU4pLAorCQkJCSAgICAgY3RybC0+aW5mby0+c2l6ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX01BWCkgeworCQlyZXQgPSB1dmNfcXVlcnlfY3RybChjaGFpbi0+ZGV2LCBVVkNfR0VUX01BWCwgY3RybC0+ZW50aXR5LT5pZCwKKwkJCQkgICAgIGNoYWluLT5kZXYtPmludGZudW0sIGN0cmwtPmluZm8tPnNlbGVjdG9yLAorCQkJCSAgICAgdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX01BWCksCisJCQkJICAgICBjdHJsLT5pbmZvLT5zaXplKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfUkVTKSB7CisJCXJldCA9IHV2Y19xdWVyeV9jdHJsKGNoYWluLT5kZXYsIFVWQ19HRVRfUkVTLCBjdHJsLT5lbnRpdHktPmlkLAorCQkJCSAgICAgY2hhaW4tPmRldi0+aW50Zm51bSwgY3RybC0+aW5mby0+c2VsZWN0b3IsCisJCQkJICAgICB1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfUkVTKSwKKwkJCQkgICAgIGN0cmwtPmluZm8tPnNpemUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJY3RybC0+Y2FjaGVkID0gMTsKKwlyZXR1cm4gMDsKK30KKwogaW50IHV2Y19xdWVyeV92NGwyX2N0cmwoc3RydWN0IHV2Y192aWRlb19jaGFpbiAqY2hhaW4sCiAJc3RydWN0IHY0bDJfcXVlcnljdHJsICp2NGwyX2N0cmwpCiB7CkBAIC03NjIsMTcgKzgwOSwxMiBAQAogCXN0cnVjdCB1dmNfY29udHJvbF9tYXBwaW5nICptYXBwaW5nOwogCXN0cnVjdCB1dmNfbWVudV9pbmZvICptZW51OwogCXVuc2lnbmVkIGludCBpOwotCV9fdTggKmRhdGE7CiAJaW50IHJldDsKIAogCWN0cmwgPSB1dmNfZmluZF9jb250cm9sKGNoYWluLCB2NGwyX2N0cmwtPmlkLCAmbWFwcGluZyk7CiAJaWYgKGN0cmwgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkYXRhID0ga21hbGxvYyhjdHJsLT5pbmZvLT5zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGF0YSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCW1lbXNldCh2NGwyX2N0cmwsIDAsIHNpemVvZiAqdjRsMl9jdHJsKTsKIAl2NGwyX2N0cmwtPmlkID0gbWFwcGluZy0+aWQ7CiAJdjRsMl9jdHJsLT50eXBlID0gbWFwcGluZy0+djRsMl90eXBlOwpAQCAtNzgyLDE0ICs4MjQsMTUgQEAKIAlpZiAoIShjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX1NFVF9DVVIpKQogCQl2NGwyX2N0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWTsKIAotCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9ERUYpIHsKLQkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoY2hhaW4tPmRldiwgVVZDX0dFVF9ERUYsIGN0cmwtPmVudGl0eS0+aWQsCi0JCQkJICAgICBjaGFpbi0+ZGV2LT5pbnRmbnVtLCBjdHJsLT5pbmZvLT5zZWxlY3RvciwKLQkJCQkgICAgIGRhdGEsIGN0cmwtPmluZm8tPnNpemUpOworCWlmICghY3RybC0+Y2FjaGVkKSB7CisJCXJldCA9IHV2Y19jdHJsX3BvcHVsYXRlX2NhY2hlKGNoYWluLCBjdHJsKTsKIAkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQkJdjRsMl9jdHJsLT5kZWZhdWx0X3ZhbHVlID0KLQkJCW1hcHBpbmctPmdldChtYXBwaW5nLCBVVkNfR0VUX0RFRiwgZGF0YSk7CisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9ERUYpIHsKKwkJdjRsMl9jdHJsLT5kZWZhdWx0X3ZhbHVlID0gbWFwcGluZy0+Z2V0KG1hcHBpbmcsIFVWQ19HRVRfREVGLAorCQkJCXV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9ERUYpKTsKIAl9CiAKIAlzd2l0Y2ggKG1hcHBpbmctPnY0bDJfdHlwZSkgewpAQCAtODA2LDU2ICs4NDksMzcgQEAKIAkJCX0KIAkJfQogCi0JCXJldCA9IDA7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gMDsKIAogCWNhc2UgVjRMMl9DVFJMX1RZUEVfQk9PTEVBTjoKIAkJdjRsMl9jdHJsLT5taW5pbXVtID0gMDsKIAkJdjRsMl9jdHJsLT5tYXhpbXVtID0gMTsKIAkJdjRsMl9jdHJsLT5zdGVwID0gMTsKLQkJcmV0ID0gMDsKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCiAJY2FzZSBWNEwyX0NUUkxfVFlQRV9CVVRUT046CiAJCXY0bDJfY3RybC0+bWluaW11bSA9IDA7CiAJCXY0bDJfY3RybC0+bWF4aW11bSA9IDA7CiAJCXY0bDJfY3RybC0+c3RlcCA9IDA7Ci0JCXJldCA9IDA7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gMDsKIAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KIAotCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9NSU4pIHsKLQkJcmV0ID0gdXZjX3F1ZXJ5X2N0cmwoY2hhaW4tPmRldiwgVVZDX0dFVF9NSU4sIGN0cmwtPmVudGl0eS0+aWQsCi0JCQkJICAgICBjaGFpbi0+ZGV2LT5pbnRmbnVtLCBjdHJsLT5pbmZvLT5zZWxlY3RvciwKLQkJCQkgICAgIGRhdGEsIGN0cmwtPmluZm8tPnNpemUpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCQl2NGwyX2N0cmwtPm1pbmltdW0gPSBtYXBwaW5nLT5nZXQobWFwcGluZywgVVZDX0dFVF9NSU4sIGRhdGEpOwotCX0KLQlpZiAoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfTUFYKSB7Ci0JCXJldCA9IHV2Y19xdWVyeV9jdHJsKGNoYWluLT5kZXYsIFVWQ19HRVRfTUFYLCBjdHJsLT5lbnRpdHktPmlkLAotCQkJCSAgICAgY2hhaW4tPmRldi0+aW50Zm51bSwgY3RybC0+aW5mby0+c2VsZWN0b3IsCi0JCQkJICAgICBkYXRhLCBjdHJsLT5pbmZvLT5zaXplKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQkJdjRsMl9jdHJsLT5tYXhpbXVtID0gbWFwcGluZy0+Z2V0KG1hcHBpbmcsIFVWQ19HRVRfTUFYLCBkYXRhKTsKLQl9Ci0JaWYgKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfR0VUX1JFUykgewotCQlyZXQgPSB1dmNfcXVlcnlfY3RybChjaGFpbi0+ZGV2LCBVVkNfR0VUX1JFUywgY3RybC0+ZW50aXR5LT5pZCwKLQkJCQkgICAgIGNoYWluLT5kZXYtPmludGZudW0sIGN0cmwtPmluZm8tPnNlbGVjdG9yLAotCQkJCSAgICAgZGF0YSwgY3RybC0+aW5mby0+c2l6ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0JCXY0bDJfY3RybC0+c3RlcCA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBVVkNfR0VUX1JFUywgZGF0YSk7Ci0JfQorCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0dFVF9NSU4pCisJCXY0bDJfY3RybC0+bWluaW11bSA9IG1hcHBpbmctPmdldChtYXBwaW5nLCBVVkNfR0VUX01JTiwKKwkJCQkgICAgIHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9NSU4pKTsKIAotCXJldCA9IDA7Ci1vdXQ6Ci0Ja2ZyZWUoZGF0YSk7Ci0JcmV0dXJuIHJldDsKKwlpZiAoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfTUFYKQorCQl2NGwyX2N0cmwtPm1heGltdW0gPSBtYXBwaW5nLT5nZXQobWFwcGluZywgVVZDX0dFVF9NQVgsCisJCQkJICAgICB1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfTUFYKSk7CisKKwlpZiAoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfUkVTKQorCQl2NGwyX2N0cmwtPnN0ZXAgPSBtYXBwaW5nLT5nZXQobWFwcGluZywgVVZDX0dFVF9SRVMsCisJCQkJICB1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfUkVTKSk7CisKKwlyZXR1cm4gMDsKIH0KIAogCkBAIC05OTcsMTkgKzEwMjEsNTcgQEAKIHsKIAlzdHJ1Y3QgdXZjX2NvbnRyb2wgKmN0cmw7CiAJc3RydWN0IHV2Y19jb250cm9sX21hcHBpbmcgKm1hcHBpbmc7Ci0JczMyIHZhbHVlID0geGN0cmwtPnZhbHVlOworCXMzMiB2YWx1ZTsKKwl1MzIgc3RlcDsKKwlzMzIgbWluOworCXMzMiBtYXg7CiAJaW50IHJldDsKIAogCWN0cmwgPSB1dmNfZmluZF9jb250cm9sKGNoYWluLCB4Y3RybC0+aWQsICZtYXBwaW5nKTsKIAlpZiAoY3RybCA9PSBOVUxMIHx8IChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX1NFVF9DVVIpID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKG1hcHBpbmctPnY0bDJfdHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9NRU5VKSB7Ci0JCWlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPj0gbWFwcGluZy0+bWVudV9jb3VudCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQl2YWx1ZSA9IG1hcHBpbmctPm1lbnVfaW5mb1t2YWx1ZV0udmFsdWU7CisJLyogQ2xhbXAgb3V0IG9mIHJhbmdlIHZhbHVlcy4gKi8KKwlzd2l0Y2ggKG1hcHBpbmctPnY0bDJfdHlwZSkgeworCWNhc2UgVjRMMl9DVFJMX1RZUEVfSU5URUdFUjoKKwkJaWYgKCFjdHJsLT5jYWNoZWQpIHsKKwkJCXJldCA9IHV2Y19jdHJsX3BvcHVsYXRlX2NhY2hlKGNoYWluLCBjdHJsKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0KKworCQltaW4gPSBtYXBwaW5nLT5nZXQobWFwcGluZywgVVZDX0dFVF9NSU4sCisJCQkJICAgdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX01JTikpOworCQltYXggPSBtYXBwaW5nLT5nZXQobWFwcGluZywgVVZDX0dFVF9NQVgsCisJCQkJICAgdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX01BWCkpOworCQlzdGVwID0gbWFwcGluZy0+Z2V0KG1hcHBpbmcsIFVWQ19HRVRfUkVTLAorCQkJCSAgICB1dmNfY3RybF9kYXRhKGN0cmwsIFVWQ19DVFJMX0RBVEFfUkVTKSk7CisKKwkJeGN0cmwtPnZhbHVlID0gbWluICsgKHhjdHJsLT52YWx1ZSAtIG1pbiArIHN0ZXAvMikgLyBzdGVwICogc3RlcDsKKwkJeGN0cmwtPnZhbHVlID0gY2xhbXAoeGN0cmwtPnZhbHVlLCBtaW4sIG1heCk7CisJCXZhbHVlID0geGN0cmwtPnZhbHVlOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DVFJMX1RZUEVfQk9PTEVBTjoKKwkJeGN0cmwtPnZhbHVlID0gY2xhbXAoeGN0cmwtPnZhbHVlLCAwLCAxKTsKKwkJdmFsdWUgPSB4Y3RybC0+dmFsdWU7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NUUkxfVFlQRV9NRU5VOgorCQlpZiAoeGN0cmwtPnZhbHVlIDwgMCB8fCB4Y3RybC0+dmFsdWUgPj0gbWFwcGluZy0+bWVudV9jb3VudCkKKwkJCXJldHVybiAtRVJBTkdFOworCQl2YWx1ZSA9IG1hcHBpbmctPm1lbnVfaW5mb1t4Y3RybC0+dmFsdWVdLnZhbHVlOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXZhbHVlID0geGN0cmwtPnZhbHVlOworCQlicmVhazsKIAl9CiAKKwkvKiBJZiB0aGUgbWFwcGluZyBkb2Vzbid0IHNwYW4gdGhlIHdob2xlIFVWQyBjb250cm9sLCB0aGUgY3VycmVudCB2YWx1ZQorCSAqIG5lZWRzIHRvIGJlIGxvYWRlZCBmcm9tIHRoZSBkZXZpY2UgdG8gcGVyZm9ybSB0aGUgcmVhZC1tb2RpZnktd3JpdGUKKwkgKiBvcGVyYXRpb24uCisJICovCiAJaWYgKCFjdHJsLT5sb2FkZWQgJiYgKGN0cmwtPmluZm8tPnNpemUgKiA4KSAhPSBtYXBwaW5nLT5zaXplKSB7CiAJCWlmICgoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfQ1VSKSA9PSAwKSB7CiAJCQltZW1zZXQodXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX0NVUlJFTlQpLApAQCAtMTAyNyw2ICsxMDg5LDcgQEAKIAkJY3RybC0+bG9hZGVkID0gMTsKIAl9CiAKKwkvKiBCYWNrdXAgdGhlIGN1cnJlbnQgdmFsdWUgaW4gY2FzZSB3ZSBuZWVkIHRvIHJvbGxiYWNrIGxhdGVyLiAqLwogCWlmICghY3RybC0+ZGlydHkpIHsKIAkJbWVtY3B5KHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9CQUNLVVApLAogCQkgICAgICAgdXZjX2N0cmxfZGF0YShjdHJsLCBVVkNfQ1RSTF9EQVRBX0NVUlJFTlQpLApAQCAtMTA4MCwxMCArMTE0Myw4IEBACiAJfQogCiAJaWYgKCFmb3VuZCkgewotCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsCi0JCQkiQ29udHJvbCAiIFVWQ19HVUlEX0ZPUk1BVCAiLyV1IG5vdCBmb3VuZC5cbiIsCi0JCQlVVkNfR1VJRF9BUkdTKGVudGl0eS0+ZXh0ZW5zaW9uLmd1aWRFeHRlbnNpb25Db2RlKSwKLQkJCXhjdHJsLT5zZWxlY3Rvcik7CisJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIkNvbnRyb2wgJXBVbC8ldSBub3QgZm91bmQuXG4iLAorCQkJZW50aXR5LT5leHRlbnNpb24uZ3VpZEV4dGVuc2lvbkNvZGUsIHhjdHJsLT5zZWxlY3Rvcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTE1OSw5ICsxMjIwLDkgQEAKIAkJCSAgICAoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9SRVNUT1JFKSA9PSAwKQogCQkJCWNvbnRpbnVlOwogCi0JCQlwcmludGsoS0VSTl9JTkZPICJyZXN0b3JpbmcgY29udHJvbCAiIFVWQ19HVUlEX0ZPUk1BVAotCQkJCSIvJXUvJXVcbiIsIFVWQ19HVUlEX0FSR1MoY3RybC0+aW5mby0+ZW50aXR5KSwKLQkJCQljdHJsLT5pbmZvLT5pbmRleCwgY3RybC0+aW5mby0+c2VsZWN0b3IpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAicmVzdG9yaW5nIGNvbnRyb2wgJXBVbC8ldS8ldVxuIiwKKwkJCQljdHJsLT5pbmZvLT5lbnRpdHksIGN0cmwtPmluZm8tPmluZGV4LAorCQkJCWN0cmwtPmluZm8tPnNlbGVjdG9yKTsKIAkJCWN0cmwtPmRpcnR5ID0gMTsKIAkJfQogCkBAIC0xMjE1LDQ3ICsxMjc2LDQzIEBACiAJCXJldCA9IHV2Y19xdWVyeV9jdHJsKGRldiwgVVZDX0dFVF9MRU4sIGN0cmwtPmVudGl0eS0+aWQsCiAJCQlkZXYtPmludGZudW0sIGluZm8tPnNlbGVjdG9yLCAoX191OCAqKSZzaXplLCAyKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIkdFVF9MRU4gZmFpbGVkIG9uICIKLQkJCQkiY29udHJvbCAiIFVWQ19HVUlEX0ZPUk1BVCAiLyV1ICglZCkuXG4iLAotCQkJCVVWQ19HVUlEX0FSR1MoaW5mby0+ZW50aXR5KSwgaW5mby0+c2VsZWN0b3IsCi0JCQkJcmV0KTsKKwkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwKKwkJCQkiR0VUX0xFTiBmYWlsZWQgb24gY29udHJvbCAlcFVsLyV1ICglZCkuXG4iLAorCQkJCWluZm8tPmVudGl0eSwgaW5mby0+c2VsZWN0b3IsIHJldCk7CiAJCQlyZXR1cm47CiAJCX0KIAogCQlpZiAoaW5mby0+c2l6ZSAhPSBsZTE2X3RvX2NwdShzaXplKSkgewotCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiQ29udHJvbCAiIFVWQ19HVUlEX0ZPUk1BVAotCQkJCSIvJXUgc2l6ZSBkb2Vzbid0IG1hdGNoIHVzZXIgc3VwcGxpZWQgIgotCQkJCSJ2YWx1ZS5cbiIsIFVWQ19HVUlEX0FSR1MoaW5mby0+ZW50aXR5KSwKLQkJCQlpbmZvLT5zZWxlY3Rvcik7CisJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJDb250cm9sICVwVWwvJXUgc2l6ZSAiCisJCQkJImRvZXNuJ3QgbWF0Y2ggdXNlciBzdXBwbGllZCB2YWx1ZS5cbiIsCisJCQkJaW5mby0+ZW50aXR5LCBpbmZvLT5zZWxlY3Rvcik7CiAJCQlyZXR1cm47CiAJCX0KIAogCQlyZXQgPSB1dmNfcXVlcnlfY3RybChkZXYsIFVWQ19HRVRfSU5GTywgY3RybC0+ZW50aXR5LT5pZCwKIAkJCWRldi0+aW50Zm51bSwgaW5mby0+c2VsZWN0b3IsICZpbmYsIDEpOwogCQlpZiAocmV0IDwgMCkgewotCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiR0VUX0lORk8gZmFpbGVkIG9uICIKLQkJCQkiY29udHJvbCAiIFVWQ19HVUlEX0ZPUk1BVCAiLyV1ICglZCkuXG4iLAotCQkJCVVWQ19HVUlEX0FSR1MoaW5mby0+ZW50aXR5KSwgaW5mby0+c2VsZWN0b3IsCi0JCQkJcmV0KTsKKwkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwKKwkJCQkiR0VUX0lORk8gZmFpbGVkIG9uIGNvbnRyb2wgJXBVbC8ldSAoJWQpLlxuIiwKKwkJCQlpbmZvLT5lbnRpdHksIGluZm8tPnNlbGVjdG9yLCByZXQpOwogCQkJcmV0dXJuOwogCQl9CiAKIAkJZmxhZ3MgPSBpbmZvLT5mbGFnczsKIAkJaWYgKCgoZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfQ1VSKSAmJiAhKGluZiAmICgxIDw8IDApKSkgfHwKIAkJICAgICgoZmxhZ3MgJiBVVkNfQ09OVFJPTF9TRVRfQ1VSKSAmJiAhKGluZiAmICgxIDw8IDEpKSkpIHsKLQkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIkNvbnRyb2wgIgotCQkJCVVWQ19HVUlEX0ZPUk1BVCAiLyV1IGZsYWdzIGRvbid0IG1hdGNoICIKLQkJCQkic3VwcG9ydGVkIG9wZXJhdGlvbnMuXG4iLAotCQkJCVVWQ19HVUlEX0FSR1MoaW5mby0+ZW50aXR5KSwgaW5mby0+c2VsZWN0b3IpOworCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiQ29udHJvbCAlcFVsLyV1IGZsYWdzICIKKwkJCQkiZG9uJ3QgbWF0Y2ggc3VwcG9ydGVkIG9wZXJhdGlvbnMuXG4iLAorCQkJCWluZm8tPmVudGl0eSwgaW5mby0+c2VsZWN0b3IpOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCiAJY3RybC0+aW5mbyA9IGluZm87Ci0JY3RybC0+ZGF0YSA9IGttYWxsb2MoY3RybC0+aW5mby0+c2l6ZSAqIFVWQ19DVFJMX05EQVRBLCBHRlBfS0VSTkVMKTsKLQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJBZGRlZCBjb250cm9sICIgVVZDX0dVSURfRk9STUFUICIvJXUgIgotCQkidG8gZGV2aWNlICVzIGVudGl0eSAldVxuIiwgVVZDX0dVSURfQVJHUyhjdHJsLT5pbmZvLT5lbnRpdHkpLAotCQljdHJsLT5pbmZvLT5zZWxlY3RvciwgZGV2LT51ZGV2LT5kZXZwYXRoLCBlbnRpdHktPmlkKTsKKwljdHJsLT5kYXRhID0ga21hbGxvYyhjdHJsLT5pbmZvLT5zaXplICogVVZDX0NUUkxfREFUQV9MQVNULCBHRlBfS0VSTkVMKTsKKwl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJBZGRlZCBjb250cm9sICVwVWwvJXUgdG8gZGV2aWNlICVzICIKKwkJImVudGl0eSAldVxuIiwgY3RybC0+aW5mby0+ZW50aXR5LCBjdHJsLT5pbmZvLT5zZWxlY3RvciwKKwkJZGV2LT51ZGV2LT5kZXZwYXRoLCBlbnRpdHktPmlkKTsKIH0KIAogLyoKQEAgLTEyODEsMTcgKzEzMzgsMTYgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChjdHJsLT5zZWxlY3RvciA9PSBpbmZvLT5zZWxlY3RvcikgewotCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiQ29udHJvbCAiCi0JCQkJVVZDX0dVSURfRk9STUFUICIvJXUgaXMgYWxyZWFkeSBkZWZpbmVkLlxuIiwKLQkJCQlVVkNfR1VJRF9BUkdTKGluZm8tPmVudGl0eSksIGluZm8tPnNlbGVjdG9yKTsKKwkJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwKKwkJCQkiQ29udHJvbCAlcFVsLyV1IGlzIGFscmVhZHkgZGVmaW5lZC5cbiIsCisJCQkJaW5mby0+ZW50aXR5LCBpbmZvLT5zZWxlY3Rvcik7CiAJCQlyZXQgPSAtRUVYSVNUOwogCQkJZ290byBlbmQ7CiAJCX0KIAkJaWYgKGN0cmwtPmluZGV4ID09IGluZm8tPmluZGV4KSB7Ci0JCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsICJDb250cm9sICIKLQkJCQlVVkNfR1VJRF9GT1JNQVQgIi8ldSB3b3VsZCBvdmVyd3JpdGUgaW5kZXggIgotCQkJCSIlZC5cbiIsIFVWQ19HVUlEX0FSR1MoaW5mby0+ZW50aXR5KSwKLQkJCQlpbmZvLT5zZWxlY3RvciwgaW5mby0+aW5kZXgpOworCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLAorCQkJCSJDb250cm9sICVwVWwvJXUgd291bGQgb3ZlcndyaXRlIGluZGV4ICVkLlxuIiwKKwkJCQlpbmZvLT5lbnRpdHksIGluZm8tPnNlbGVjdG9yLCBpbmZvLT5pbmRleCk7CiAJCQlyZXQgPSAtRUVYSVNUOwogCQkJZ290byBlbmQ7CiAJCX0KQEAgLTEzMzIsMTAgKzEzODgsOSBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKGluZm8tPnNpemUgKiA4IDwgbWFwcGluZy0+c2l6ZSArIG1hcHBpbmctPm9mZnNldCkgewotCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9DT05UUk9MLCAiTWFwcGluZyAnJXMnIHdvdWxkICIKLQkJCQkib3ZlcmZsb3cgY29udHJvbCAiIFVWQ19HVUlEX0ZPUk1BVCAiLyV1XG4iLAotCQkJCW1hcHBpbmctPm5hbWUsIFVWQ19HVUlEX0FSR1MoaW5mby0+ZW50aXR5KSwKLQkJCQlpbmZvLT5zZWxlY3Rvcik7CisJCQl1dmNfdHJhY2UoVVZDX1RSQUNFX0NPTlRST0wsCisJCQkJIk1hcHBpbmcgJyVzJyB3b3VsZCBvdmVyZmxvdyBjb250cm9sICVwVWwvJXVcbiIsCisJCQkJbWFwcGluZy0+bmFtZSwgaW5mby0+ZW50aXR5LCBpbmZvLT5zZWxlY3Rvcik7CiAJCQlyZXQgPSAtRU9WRVJGTE9XOwogCQkJZ290byBlbmQ7CiAJCX0KQEAgLTEzNTQsOSArMTQwOSw5IEBACiAKIAkJbWFwcGluZy0+Y3RybCA9IGluZm87CiAJCWxpc3RfYWRkX3RhaWwoJm1hcHBpbmctPmxpc3QsICZpbmZvLT5tYXBwaW5ncyk7Ci0JCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwgIkFkZGluZyBtYXBwaW5nICVzIHRvIGNvbnRyb2wgIgotCQkJVVZDX0dVSURfRk9STUFUICIvJXUuXG4iLCBtYXBwaW5nLT5uYW1lLAotCQkJVVZDX0dVSURfQVJHUyhpbmZvLT5lbnRpdHkpLCBpbmZvLT5zZWxlY3Rvcik7CisJCXV2Y190cmFjZShVVkNfVFJBQ0VfQ09OVFJPTCwKKwkJCSJBZGRpbmcgbWFwcGluZyAlcyB0byBjb250cm9sICVwVWwvJXUuXG4iLAorCQkJbWFwcGluZy0+bmFtZSwgaW5mby0+ZW50aXR5LCBpbmZvLT5zZWxlY3Rvcik7CiAKIAkJcmV0ID0gMDsKIAkJYnJlYWs7CkBAIC0xMzc4LDYgKzE0MzMsNyBAQAogCQlzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZDsKIAkJdTggaW5kZXg7CiAJfSBibGFja2xpc3RbXSA9IHsKKwkJeyB7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDUwOWIpIH0sIDkgfSwgLyogR2FpbiAqLwogCQl7IHsgVVNCX0RFVklDRSgweDFjNGYsIDB4MzAwMCkgfSwgNiB9LCAvKiBXQiBUZW1wZXJhdHVyZSAqLwogCQl7IHsgVVNCX0RFVklDRSgweDU5ODYsIDB4MDI0MSkgfSwgMiB9LCAvKiBIdWUgKi8KIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jCmluZGV4IDM5MWNjY2MuLmE4MTQ4MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMKQEAgLTQzLDggKzQzLDkgQEAKICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSJ2MC4xLjAiCiAjZW5kaWYKIAordW5zaWduZWQgaW50IHV2Y19jbG9ja19wYXJhbSA9IENMT0NLX01PTk9UT05JQzsKIHVuc2lnbmVkIGludCB1dmNfbm9fZHJvcF9wYXJhbTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgdXZjX3F1aXJrc19wYXJhbTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXZjX3F1aXJrc19wYXJhbSA9IC0xOwogdW5zaWduZWQgaW50IHV2Y190cmFjZV9wYXJhbTsKIHVuc2lnbmVkIGludCB1dmNfdGltZW91dF9wYXJhbSA9IFVWQ19DVFJMX1NUUkVBTUlOR19USU1FT1VUOwogCkBAIC01OSw2ICs2MCwxMSBAQAogCQkuZmNjCQk9IFY0TDJfUElYX0ZNVF9ZVVlWLAogCX0sCiAJeworCQkubmFtZQkJPSAiWVVWIDQ6MjoyIChZVVlWKSIsCisJCS5ndWlkCQk9IFVWQ19HVUlEX0ZPUk1BVF9ZVVkyX0lTSUdIVCwKKwkJLmZjYwkJPSBWNEwyX1BJWF9GTVRfWVVZViwKKwl9LAorCXsKIAkJLm5hbWUJCT0gIllVViA0OjI6MCAoTlYxMikiLAogCQkuZ3VpZAkJPSBVVkNfR1VJRF9GT1JNQVRfTlYxMiwKIAkJLmZjYwkJPSBWNEwyX1BJWF9GTVRfTlYxMiwKQEAgLTMwOSwxMSArMzE1LDEwIEBACiAJCQkJc2l6ZW9mIGZvcm1hdC0+bmFtZSk7CiAJCQlmb3JtYXQtPmZjYyA9IGZtdGRlc2MtPmZjYzsKIAkJfSBlbHNlIHsKLQkJCXV2Y19wcmludGsoS0VSTl9JTkZPLCAiVW5rbm93biB2aWRlbyBmb3JtYXQgIgotCQkJCVVWQ19HVUlEX0ZPUk1BVCAiXG4iLAotCQkJCVVWQ19HVUlEX0FSR1MoJmJ1ZmZlcls1XSkpOwotCQkJc25wcmludGYoZm9ybWF0LT5uYW1lLCBzaXplb2YgZm9ybWF0LT5uYW1lLAotCQkJCVVWQ19HVUlEX0ZPUk1BVCwgVVZDX0dVSURfQVJHUygmYnVmZmVyWzVdKSk7CisJCQl1dmNfcHJpbnRrKEtFUk5fSU5GTywgIlVua25vd24gdmlkZW8gZm9ybWF0ICVwVWxcbiIsCisJCQkJJmJ1ZmZlcls1XSk7CisJCQlzbnByaW50Zihmb3JtYXQtPm5hbWUsIHNpemVvZihmb3JtYXQtPm5hbWUpLCAiJXBVbFxuIiwKKwkJCQkmYnVmZmVyWzVdKTsKIAkJCWZvcm1hdC0+ZmNjID0gMDsKIAkJfQogCkBAIC0xNzUwLDcgKzE3NTUsOCBAQAogCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOwogCWRldi0+aW50ZiA9IHVzYl9nZXRfaW50ZihpbnRmKTsKIAlkZXYtPmludGZudW0gPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwotCWRldi0+cXVpcmtzID0gaWQtPmRyaXZlcl9pbmZvIHwgdXZjX3F1aXJrc19wYXJhbTsKKwlkZXYtPnF1aXJrcyA9ICh1dmNfcXVpcmtzX3BhcmFtID09IC0xKQorCQkgICAgPyBpZC0+ZHJpdmVyX2luZm8gOiB1dmNfcXVpcmtzX3BhcmFtOwogCiAJaWYgKHVkZXYtPnByb2R1Y3QgIT0gTlVMTCkKIAkJc3RybGNweShkZXYtPm5hbWUsIHVkZXYtPnByb2R1Y3QsIHNpemVvZiBkZXYtPm5hbWUpOwpAQCAtMTc3Myw5ICsxNzc5LDkgQEAKIAkJbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCiAJCWxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CiAKLQlpZiAodXZjX3F1aXJrc19wYXJhbSAhPSAwKSB7Ci0JCXV2Y19wcmludGsoS0VSTl9JTkZPLCAiRm9yY2luZyBkZXZpY2UgcXVpcmtzIDB4JXggYnkgbW9kdWxlICIKLQkJCSJwYXJhbWV0ZXIgZm9yIHRlc3RpbmcgcHVycG9zZS5cbiIsIHV2Y19xdWlya3NfcGFyYW0pOworCWlmIChkZXYtPnF1aXJrcyAhPSBpZC0+ZHJpdmVyX2luZm8pIHsKKwkJdXZjX3ByaW50ayhLRVJOX0lORk8sICJGb3JjaW5nIGRldmljZSBxdWlya3MgdG8gMHgleCBieSBtb2R1bGUgIgorCQkJInBhcmFtZXRlciBmb3IgdGVzdGluZyBwdXJwb3NlLlxuIiwgZGV2LT5xdWlya3MpOwogCQl1dmNfcHJpbnRrKEtFUk5fSU5GTywgIlBsZWFzZSByZXBvcnQgcmVxdWlyZWQgcXVpcmtzIHRvIHRoZSAiCiAJCQkibGludXgtdXZjLWRldmVsIG1haWxpbmcgbGlzdC5cbiIpOwogCX0KQEAgLTE4OTIsNiArMTg5OCw0NSBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE1vZHVsZSBwYXJhbWV0ZXJzCisgKi8KKworc3RhdGljIGludCB1dmNfY2xvY2tfcGFyYW1fZ2V0KGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJaWYgKHV2Y19jbG9ja19wYXJhbSA9PSBDTE9DS19NT05PVE9OSUMpCisJCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIkNMT0NLX01PTk9UT05JQyIpOworCWVsc2UKKwkJcmV0dXJuIHNwcmludGYoYnVmZmVyLCAiQ0xPQ0tfUkVBTFRJTUUiKTsKK30KKworc3RhdGljIGludCB1dmNfY2xvY2tfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJaWYgKHN0cm5jYXNlY21wKHZhbCwgImNsb2NrXyIsIHN0cmxlbigiY2xvY2tfIikpID09IDApCisJCXZhbCArPSBzdHJsZW4oImNsb2NrXyIpOworCisJaWYgKHN0cmNhc2VjbXAodmFsLCAibW9ub3RvbmljIikgPT0gMCkKKwkJdXZjX2Nsb2NrX3BhcmFtID0gQ0xPQ0tfTU9OT1RPTklDOworCWVsc2UgaWYgKHN0cmNhc2VjbXAodmFsLCAicmVhbHRpbWUiKSA9PSAwKQorCQl1dmNfY2xvY2tfcGFyYW0gPSBDTE9DS19SRUFMVElNRTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9wYXJhbV9jYWxsKGNsb2NrLCB1dmNfY2xvY2tfcGFyYW1fc2V0LCB1dmNfY2xvY2tfcGFyYW1fZ2V0LAorCQkgICZ1dmNfY2xvY2tfcGFyYW0sIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGNsb2NrLCAiVmlkZW8gYnVmZmVycyB0aW1lc3RhbXAgY2xvY2siKTsKK21vZHVsZV9wYXJhbV9uYW1lZChub2Ryb3AsIHV2Y19ub19kcm9wX3BhcmFtLCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhub2Ryb3AsICJEb24ndCBkcm9wIGluY29tcGxldGUgZnJhbWVzIik7Cittb2R1bGVfcGFyYW1fbmFtZWQocXVpcmtzLCB1dmNfcXVpcmtzX3BhcmFtLCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhxdWlya3MsICJGb3JjZWQgZGV2aWNlIHF1aXJrcyIpOworbW9kdWxlX3BhcmFtX25hbWVkKHRyYWNlLCB1dmNfdHJhY2VfcGFyYW0sIHVpbnQsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHRyYWNlLCAiVHJhY2UgbGV2ZWwgYml0bWFzayIpOworbW9kdWxlX3BhcmFtX25hbWVkKHRpbWVvdXQsIHV2Y190aW1lb3V0X3BhcmFtLCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyh0aW1lb3V0LCAiU3RyZWFtaW5nIGNvbnRyb2wgcmVxdWVzdHMgdGltZW91dCIpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIERyaXZlciBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cAogICovCiAKQEAgLTIxOTcsMTUgKzIyNDIsNiBAQAogbW9kdWxlX2luaXQodXZjX2luaXQpOwogbW9kdWxlX2V4aXQodXZjX2NsZWFudXApOwogCi1tb2R1bGVfcGFyYW1fbmFtZWQobm9kcm9wLCB1dmNfbm9fZHJvcF9wYXJhbSwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0Mobm9kcm9wLCAiRG9uJ3QgZHJvcCBpbmNvbXBsZXRlIGZyYW1lcyIpOwotbW9kdWxlX3BhcmFtX25hbWVkKHF1aXJrcywgdXZjX3F1aXJrc19wYXJhbSwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MocXVpcmtzLCAiRm9yY2VkIGRldmljZSBxdWlya3MiKTsKLW1vZHVsZV9wYXJhbV9uYW1lZCh0cmFjZSwgdXZjX3RyYWNlX3BhcmFtLCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOwotTU9EVUxFX1BBUk1fREVTQyh0cmFjZSwgIlRyYWNlIGxldmVsIGJpdG1hc2siKTsKLW1vZHVsZV9wYXJhbV9uYW1lZCh0aW1lb3V0LCB1dmNfdGltZW91dF9wYXJhbSwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0ModGltZW91dCwgIlN0cmVhbWluZyBjb250cm9sIHJlcXVlc3RzIHRpbWVvdXQiKTsKLQogTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfcXVldWUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19xdWV1ZS5jCmluZGV4IGVhMTE4MzkuLjRhOTI1YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19xdWV1ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19xdWV1ZS5jCkBAIC01MDIsNyArNTAyLDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZS0+aXJxbG9jaywgZmxhZ3MpOwogCiAJYnVmLT5idWYuc2VxdWVuY2UgPSBxdWV1ZS0+c2VxdWVuY2UrKzsKLQlkb19nZXR0aW1lb2ZkYXkoJmJ1Zi0+YnVmLnRpbWVzdGFtcCk7CiAKIAl3YWtlX3VwKCZidWYtPndhaXQpOwogCXJldHVybiBuZXh0YnVmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKaW5kZXggMjMyMzlhNC4uNDMxNTJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCkBAIC01MzksNyArNTM5LDcgQEAKIAkJeGN0cmwuaWQgPSBjdHJsLT5pZDsKIAkJeGN0cmwudmFsdWUgPSBjdHJsLT52YWx1ZTsKIAotCQl1dmNfY3RybF9iZWdpbihjaGFpbik7CisJCXJldCA9IHV2Y19jdHJsX2JlZ2luKGNoYWluKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCkBAIC01NDksNiArNTQ5LDggQEAKIAkJCXJldHVybiByZXQ7CiAJCX0KIAkJcmV0ID0gdXZjX2N0cmxfY29tbWl0KGNoYWluKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJY3RybC0+dmFsdWUgPSB4Y3RybC52YWx1ZTsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCmluZGV4IDdkY2Y1MzQuLjZiMDY2NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCkBAIC00MTAsNiArNDEwLDggQEAKIAkgKiB3aGVuIHRoZSBFT0YgYml0IGlzIHNldCB0byBmb3JjZSBzeW5jaHJvbmlzYXRpb24gb24gdGhlIG5leHQgcGFja2V0LgogCSAqLwogCWlmIChidWYtPnN0YXRlICE9IFVWQ19CVUZfU1RBVEVfQUNUSVZFKSB7CisJCXN0cnVjdCB0aW1lc3BlYyB0czsKKwogCQlpZiAoZmlkID09IHN0cmVhbS0+bGFzdF9maWQpIHsKIAkJCXV2Y190cmFjZShVVkNfVFJBQ0VfRlJBTUUsICJEcm9wcGluZyBwYXlsb2FkIChvdXQgb2YgIgogCQkJCSJzeW5jKS5cbiIpOwpAQCAtNDE5LDYgKzQyMSwxNCBAQAogCQkJcmV0dXJuIC1FTk9EQVRBOwogCQl9CiAKKwkJaWYgKHV2Y19jbG9ja19wYXJhbSA9PSBDTE9DS19NT05PVE9OSUMpCisJCQlrdGltZV9nZXRfdHMoJnRzKTsKKwkJZWxzZQorCQkJa3RpbWVfZ2V0X3JlYWxfdHMoJnRzKTsKKworCQlidWYtPmJ1Zi50aW1lc3RhbXAudHZfc2VjID0gdHMudHZfc2VjOworCQlidWYtPmJ1Zi50aW1lc3RhbXAudHZfdXNlYyA9IHRzLnR2X25zZWMgLyBOU0VDX1BFUl9VU0VDOworCiAJCS8qIFRPRE86IEhhbmRsZSBQVFMgYW5kIFNDUi4gKi8KIAkJYnVmLT5zdGF0ZSA9IFVWQ19CVUZfU1RBVEVfQUNUSVZFOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oCmluZGV4IDIzMzc1ODUuLjJiYmEwNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaApAQCAtMTEzLDYgKzExMyw5IEBACiAjZGVmaW5lIFVWQ19HVUlEX0ZPUk1BVF9ZVVkyIFwKIAl7ICdZJywgICdVJywgICdZJywgICcyJywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgXAogCSAweDgwLCAweDAwLCAweDAwLCAweGFhLCAweDAwLCAweDM4LCAweDliLCAweDcxfQorI2RlZmluZSBVVkNfR1VJRF9GT1JNQVRfWVVZMl9JU0lHSFQgXAorCXsgJ1knLCAgJ1UnLCAgJ1knLCAgJzInLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCBcCisJIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OWIsIDB4NzF9CiAjZGVmaW5lIFVWQ19HVUlEX0ZPUk1BVF9OVjEyIFwKIAl7ICdOJywgICdWJywgICcxJywgICcyJywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgXAogCSAweDgwLCAweDAwLCAweDAwLCAweGFhLCAweDAwLCAweDM4LCAweDliLCAweDcxfQpAQCAtMTQ5LDcgKzE1Miw3IEBACiAjZGVmaW5lIFVWQ19NQVhfU1RBVFVTX1NJWkUJMTYKIAogI2RlZmluZSBVVkNfQ1RSTF9DT05UUk9MX1RJTUVPVVQJMzAwCi0jZGVmaW5lIFVWQ19DVFJMX1NUUkVBTUlOR19USU1FT1VUCTMwMDAKKyNkZWZpbmUgVVZDX0NUUkxfU1RSRUFNSU5HX1RJTUVPVVQJNTAwMAogCiAvKiBEZXZpY2VzIHF1aXJrcyAqLwogI2RlZmluZSBVVkNfUVVJUktfU1RBVFVTX0lOVEVSVkFMCTB4MDAwMDAwMDEKQEAgLTI0Miw3ICsyNDUsOCBAQAogCQkJICAgdXZjX2NvbnRyb2xfaW5mby4gKi8KIAlfX3U4IGRpcnR5IDogMSwKIAkgICAgIGxvYWRlZCA6IDEsCi0JICAgICBtb2RpZmllZCA6IDE7CisJICAgICBtb2RpZmllZCA6IDEsCisJICAgICBjYWNoZWQgOiAxOwogCiAJX191OCAqZGF0YTsKIH07CkBAIC01MzMsNiArNTM3LDcgQEAKICNkZWZpbmUgVVZDX1dBUk5fTUlOTUFYCQkwCiAjZGVmaW5lIFVWQ19XQVJOX1BST0JFX0RFRgkxCiAKK2V4dGVybiB1bnNpZ25lZCBpbnQgdXZjX2Nsb2NrX3BhcmFtOwogZXh0ZXJuIHVuc2lnbmVkIGludCB1dmNfbm9fZHJvcF9wYXJhbTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgdXZjX3RyYWNlX3BhcmFtOwogZXh0ZXJuIHVuc2lnbmVkIGludCB1dmNfdGltZW91dF9wYXJhbTsKQEAgLTU1MiwxNiArNTU3LDYgQEAKICNkZWZpbmUgdXZjX3ByaW50ayhsZXZlbCwgbXNnLi4uKSBcCiAJcHJpbnRrKGxldmVsICJ1dmN2aWRlbzogIiBtc2cpCiAKLSNkZWZpbmUgVVZDX0dVSURfRk9STUFUICIlMDJ4JTAyeCUwMnglMDJ4LSUwMnglMDJ4LSUwMnglMDJ4LSUwMnglMDJ4LSIgXAotCQkJIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCIKLSNkZWZpbmUgVVZDX0dVSURfQVJHUyhndWlkKSBcCi0JKGd1aWQpWzNdLCAgKGd1aWQpWzJdLCAgKGd1aWQpWzFdLCAgKGd1aWQpWzBdLCBcCi0JKGd1aWQpWzVdLCAgKGd1aWQpWzRdLCBcCi0JKGd1aWQpWzddLCAgKGd1aWQpWzZdLCBcCi0JKGd1aWQpWzhdLCAgKGd1aWQpWzldLCBcCi0JKGd1aWQpWzEwXSwgKGd1aWQpWzExXSwgKGd1aWQpWzEyXSwgXAotCShndWlkKVsxM10sIChndWlkKVsxNF0sIChndWlkKVsxNV0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEludGVybmFsIGZ1bmN0aW9ucy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tcGF0LWlvY3RsMzIuYwppbmRleCBjNDE1MGJkLi5mNzdmODRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tcGF0LWlvY3RsMzIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tcGF0LWlvY3RsMzIuYwpAQCAtMjg4LDcgKzI4OCw3IEBACiAKIHN0YXRpYyBpbnQgcHV0X3Y0bDJfd2luZG93MzIoc3RydWN0IHY0bDJfd2luZG93ICprcCwgc3RydWN0IHY0bDJfd2luZG93MzIgX191c2VyICp1cCkKIHsKLQlpZiAoY29weV90b191c2VyKCZ1cC0+dywgJmtwLT53LCBzaXplb2YodXAtPncpKSB8fAorCWlmIChjb3B5X3RvX3VzZXIoJnVwLT53LCAma3AtPncsIHNpemVvZihrcC0+dykpIHx8CiAJCXB1dF91c2VyKGtwLT5maWVsZCwgJnVwLT5maWVsZCkgfHwKIAkJcHV0X3VzZXIoa3AtPmNocm9tYWtleSwgJnVwLT5jaHJvbWFrZXkpIHx8CiAJCXB1dF91c2VyKGtwLT5jbGlwY291bnQsICZ1cC0+Y2xpcGNvdW50KSkKQEAgLTQ3NSw2ICs0NzUsOSBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJc3dpdGNoIChrcC0+bWVtb3J5KSB7CiAJY2FzZSBWNEwyX01FTU9SWV9NTUFQOgorCQlpZiAoZ2V0X3VzZXIoa3AtPmxlbmd0aCwgJnVwLT5sZW5ndGgpIHx8CisJCQlnZXRfdXNlcihrcC0+bS5vZmZzZXQsICZ1cC0+bS5vZmZzZXQpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9NRU1PUllfVVNFUlBUUjoKIAkJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLXNnLmMKaW5kZXggZmE3ODU1NS4uZmNkMDQ1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jCkBAIC00MTgsNiArNDE4LDggQEAKIAlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YjsKIAogCXZiID0ga3phbGxvYyhzaXplK3NpemVvZigqbWVtKSxHRlBfS0VSTkVMKTsKKwlpZiAoIXZiKQorCQlyZXR1cm4gdmI7CiAKIAltZW0gPSB2Yi0+cHJpdiA9ICgoY2hhciAqKXZiKStzaXplOwogCW1lbS0+bWFnaWM9TUFHSUNfU0dfTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYwppbmRleCBkNmU2YTI4Li4xMzZlMDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYwpAQCAtMTM4LDYgKzEzOCw4IEBACiAJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmI7CiAKIAl2YiA9IGt6YWxsb2Moc2l6ZStzaXplb2YoKm1lbSksR0ZQX0tFUk5FTCk7CisJaWYgKCF2YikKKwkJcmV0dXJuIHZiOwogCiAJbWVtID0gdmItPnByaXYgPSAoKGNoYXIgKil2Yikrc2l6ZTsKIAltZW0tPm1hZ2ljPU1BR0lDX1ZNQUxfTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYwppbmRleCAzNzYzMmEwLi5jZGJlNzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYwpAQCAtMTM3MSw3ICsxMzcxLDcgQEAKIAkvKiBOb3cgdGhhdCBldmVyeXRoaW5nIGlzIGZpbmUsIGxldCdzIGFkZCBpdCB0byBkZXZpY2UgbGlzdCAqLwogCWxpc3RfYWRkX3RhaWwoJmRldi0+dml2aV9kZXZsaXN0LCAmdml2aV9kZXZsaXN0KTsKIAotCWlmICh2aWRlb19uciA+PSAwKQorCWlmICh2aWRlb19uciAhPSAtMSkKIAkJdmlkZW9fbnIrKzsKIAogCWRldi0+dmZkID0gdmZkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL0tjb25maWcKaW5kZXggZWRiMDAyOS4uYTdlNjEwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS9LY29uZmlnCkBAIC0xLDcgKzEsMTEgQEAKIGNvbmZpZyBVU0JfWkMwMzAxCi0JdHJpc3RhdGUgIlVTQiBaQzAzMDFbUF0gSW1hZ2UgUHJvY2Vzc29yIGFuZCBDb250cm9sIENoaXAgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiVVNCIFpDMDMwMVtQXSB3ZWJjYW0gc3VwcG9ydCAoREVQUkVDQVRFRCkiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyCisJZGVmYXVsdCBuCiAJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaXMgREVQUkVDQVRFRCBwbGVhc2UgdXNlIHRoZSBnc3BjYSB6YzN4eCBtb2R1bGUKKwkgIGluc3RlYWQuCisKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgWkMwMzAxIG9yCiAJICBaQzAzMDFQIEltYWdlIFByb2Nlc3NvcnMgYW5kIENvbnRyb2wgQ2hpcHMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5jCmluZGV4IGY2YzJmYjQuLmU2YWQ0YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuYwpAQCAtMTE5Niw3ICsxMTk2LDggQEAKIHN0YXRpYyB2b2lkIHpvcmFuX3Jlc3RhcnQoc3RydWN0IHpvcmFuICp6cikKIHsKIAkvKiBOb3cgdGhlIHN0YXRfY29tbSBidWZmZXIgaXMgcmVhZHkgZm9yIHJlc3RhcnQgKi8KLQlpbnQgc3RhdHVzID0gMCwgbW9kZTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzID0gMDsKKwlpbnQgbW9kZTsKIAogCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpIHsKIAkJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgZ19pbnB1dF9zdGF0dXMsICZzdGF0dXMpOwpAQCAtMTIyOCw3ICsxMjI5LDcgQEAKIAkgICAgICAgdTMyICAgICAgICAgICBhc3RhdCwKIAkgICAgICAgdTMyICAgICAgICAgICBzdGF0KQogewotCWludCBpLCBqOworCWludCBpOwogCiAJLyogVGhpcyBpcyBKUEVHIGVycm9yIGhhbmRsaW5nIHBhcnQgKi8KIAlpZiAoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTICYmCkBAIC0xMjc5LDYgKzEyODAsNyBAQAogCS8qIFJlcG9ydCBlcnJvciAqLwogCWlmICh6cjM2MDY3X2RlYnVnID4gMSAmJiB6ci0+bnVtX2Vycm9ycyA8PSA4KSB7CiAJCWxvbmcgZnJhbWU7CisJCWludCBqOwogCiAJCWZyYW1lID0genItPmpwZ19wZW5kW3pyLT5qcGdfZG1hX3RhaWwgJiBCVVpfTUFTS19GUkFNRV07CiAJCXByaW50ayhLRVJOX0VSUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKaW5kZXggMmRkZmZlZC4uZWM0MTMwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCkBAIC0zMjQsNyArMzI0LDcgQEAKIAkJLyogQWxsb2NhdGUgZnJhZ21lbnQgdGFibGUgZm9yIHRoaXMgYnVmZmVyICovCiAKIAkJbWVtID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JCWlmIChtZW0gPT0gMCkgeworCQlpZiAoIW1lbSkgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCiAJCQkJIiVzOiAlcyAtIGdldF96ZXJvZWRfcGFnZSAoZnJhZ190YWIpIGZhaWxlZCBmb3IgYnVmZmVyICVkXG4iLApAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAKIAl9CiAKIAlpZiAobm9ybSA9PSBWNEwyX1NURF9BTEwpIHsKLQkJaW50IHN0YXR1cyA9IDA7CisJCXVuc2lnbmVkIGludCBzdGF0dXMgPSAwOwogCQl2NGwyX3N0ZF9pZCBzdGQgPSAwOwogCiAJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHF1ZXJ5c3RkLCAmc3RkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMKaW5kZXggZjBlYWU4My4uM2Q0YmFjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMKQEAgLTc4LDYgKzc4LDcgQEAKICNkZWZpbmUgTUVUSE9EMCAwCiAjZGVmaW5lIE1FVEhPRDEgMQogI2RlZmluZSBNRVRIT0QyIDIKKyNkZWZpbmUgTUVUSE9EMyAzCiAKIAogLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KQEAgLTExNCw3ICsxMTUsNyBAQAogCXtVU0JfREVWSUNFKDB4MDZkNiwgMHgwMDNiKSwgLmRyaXZlcl9pbmZvID0gTUVUSE9EMCB9LAogCXtVU0JfREVWSUNFKDB4MGExNywgMHgwMDRlKSwgLmRyaXZlcl9pbmZvID0gTUVUSE9EMiB9LAogCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDVkKSwgLmRyaXZlcl9pbmZvID0gTUVUSE9EMiB9LAotCXtVU0JfREVWSUNFKDB4MDhjYSwgMHgyMTAyKSwgLmRyaXZlcl9pbmZvID0gTUVUSE9EMiB9LAorCXtVU0JfREVWSUNFKDB4MDhjYSwgMHgyMTAyKSwgLmRyaXZlcl9pbmZvID0gTUVUSE9EMyB9LAogCXtVU0JfREVWSUNFKDB4MDZkNiwgMHgwMDNkKSwgLmRyaXZlcl9pbmZvID0gTUVUSE9EMCB9LAogCXt9CQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CkBAIC0zMDIsNyArMzAzLDcgQEAKIH07CiAKIC8qIGluaXQgdGFibGUgKi8KLXN0YXRpYyBtZXNzYWdlICppbml0WzNdID0geyBtMCwgbTEsIG0yIH07CitzdGF0aWMgbWVzc2FnZSAqaW5pdFs0XSA9IHsgbTAsIG0xLCBtMiwgbTIgfTsKIAogCiAvKiBKUEVHIHN0YXRpYyBkYXRhIGluIGhlYWRlciAoSHVmZm1hbiB0YWJsZSwgZXRjKSAqLwpAQCAtOTY3LDYgKzk2OCwyMiBAQAogCW0wZDFbMF0gPSBtb2RlOwogCW0xWzJdLnZhbHVlID0gMHhmMDAwICsgbW9kZTsKIAltMlsxXS52YWx1ZSA9IDB4ZjAwMCArIG1vZGU7CisKKwkvKiBzcGVjaWFsIGNhc2UgZm9yIE1FVEhPRDMsIHRoZSBtb2RlcyBhcmUgZGlmZmVyZW50ICovCisJaWYgKGNhbS0+bWV0aG9kID09IE1FVEhPRDMpIHsKKwkJc3dpdGNoIChtb2RlKSB7CisJCWNhc2UgMToKKwkJCW0yWzFdLnZhbHVlID0gMHhmMDAwICsgNDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQltMlsxXS52YWx1ZSA9IDB4ZjAwMCArIDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW0yWzFdLnZhbHVlID0gMHhmMDAwICsgMTsKKwkJCWJyZWFrOworCQl9CisJfQorCiAJaGVhZGVyMls0MzddID0gY2FtLT5oZWlnaHQgLyAyNTY7CiAJaGVhZGVyMls0MzhdID0gY2FtLT5oZWlnaHQgJSAyNTY7CiAJaGVhZGVyMls0MzldID0gY2FtLT53aWR0aCAvIDI1NjsKQEAgLTE1ODIsNiArMTU5OSwyMiBAQAogCW0wZDFbMF0gPSBtb2RlOwogCW0xWzJdLnZhbHVlID0gMHhmMDAwICsgbW9kZTsKIAltMlsxXS52YWx1ZSA9IDB4ZjAwMCArIG1vZGU7CisKKwkvKiBzcGVjaWFsIGNhc2UgZm9yIE1FVEhPRDMsIHRoZSBtb2RlcyBhcmUgZGlmZmVyZW50ICovCisJaWYgKGNhbS0+bWV0aG9kID09IE1FVEhPRDMpIHsKKwkJc3dpdGNoIChtb2RlKSB7CisJCWNhc2UgMToKKwkJCW0yWzFdLnZhbHVlID0gMHhmMDAwICsgNDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQltMlsxXS52YWx1ZSA9IDB4ZjAwMCArIDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW0yWzFdLnZhbHVlID0gMHhmMDAwICsgMTsKKwkJCWJyZWFrOworCQl9CisJfQorCiAJaGVhZGVyMls0MzddID0gY2FtLT5oZWlnaHQgLyAyNTY7CiAJaGVhZGVyMls0MzhdID0gY2FtLT5oZWlnaHQgJSAyNTY7CiAJaGVhZGVyMls0MzldID0gY2FtLT53aWR0aCAvIDI1NjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jIGIvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKaW5kZXggYmQ4M2ZhMC4uOTcyYjg3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKQEAgLTEyMjYsOSArMTIyNiw4IEBACiAJYmxrX3F1ZXVlX3ByZXBfcnEobXNiLT5xdWV1ZSwgbXNwcm9fYmxvY2tfcHJlcGFyZV9yZXEpOwogCiAJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChtc2ItPnF1ZXVlLCBsaW1pdCk7Ci0JYmxrX3F1ZXVlX21heF9zZWN0b3JzKG1zYi0+cXVldWUsIE1TUFJPX0JMT0NLX01BWF9QQUdFUyk7Ci0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKG1zYi0+cXVldWUsIE1TUFJPX0JMT0NLX01BWF9TRUdTKTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKG1zYi0+cXVldWUsIE1TUFJPX0JMT0NLX01BWF9TRUdTKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMobXNiLT5xdWV1ZSwgTVNQUk9fQkxPQ0tfTUFYX1BBR0VTKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKG1zYi0+cXVldWUsIE1TUFJPX0JMT0NLX01BWF9TRUdTKTsKIAlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShtc2ItPnF1ZXVlLAogCQkJCSAgIE1TUFJPX0JMT0NLX01BWF9QQUdFUyAqIG1zYi0+cGFnZV9zaXplKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwppbmRleCA0NGQyMDM3Li41MzgyYjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwpAQCAtMTI2LDggKzEyNiw2IEBACiAgKiAgUHVibGljIGRhdGEuLi4KICAqLwogCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICptcHRfcHJvY19yb290X2RpcjsKLQogI2RlZmluZSBXSE9JTklUX1VOS05PV04JCTB4QUEKIAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwpAQCAtMTQ2LDYgKzE0NCw5IEBACiBzdGF0aWMgTVBUX1JFU0VUSEFORExFUgkJIE1wdFJlc2V0SGFuZGxlcnNbTVBUX01BWF9QUk9UT0NPTF9EUklWRVJTXTsKIHN0YXRpYyBzdHJ1Y3QgbXB0X3BjaV9kcml2ZXIgCSpNcHREZXZpY2VEcml2ZXJIYW5kbGVyc1tNUFRfTUFYX1BST1RPQ09MX0RSSVZFUlNdOwogCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgCSptcHRfcHJvY19yb290X2RpcjsKKyNlbmRpZgogCiAvKgogICogIERyaXZlciBDYWxsYmFjayBJbmRleCdzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCmluZGV4IGI0OTQ4NjcuLjk3MThjOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCkBAIC03Niw4ICs3Niw4IEBACiAjZGVmaW5lIENPUFlSSUdIVAkiQ29weXJpZ2h0IChjKSAxOTk5LTIwMDggIiBNT0RVTEVBVVRIT1IKICNlbmRpZgogCi0jZGVmaW5lIE1QVF9MSU5VWF9WRVJTSU9OX0NPTU1PTgkiMy4wNC4xMyIKLSNkZWZpbmUgTVBUX0xJTlVYX1BBQ0tBR0VfTkFNRQkJIkAoIyltcHRsaW51eC0zLjA0LjEzIgorI2RlZmluZSBNUFRfTElOVVhfVkVSU0lPTl9DT01NT04JIjMuMDQuMTQiCisjZGVmaW5lIE1QVF9MSU5VWF9QQUNLQUdFX05BTUUJCSJAKCMpbXB0bGludXgtMy4wNC4xNCIKICNkZWZpbmUgV0hBVF9NQUdJQ19TVFJJTkcJCSJAIiAiKCIgIiMiICIpIgogCiAjZGVmaW5lIHNob3dfbXB0bW9kX3ZlcihzLHZlcikgIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jCmluZGV4IDM1MmFjZDAuLmNhYThmNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYwpAQCAtMzYwLDggKzM2MCw4IEBACiAJdTE2CQkgaW9jc3RhdHVzOwogCiAJLyogYnVzIHJlc2V0IGlzIG9ubHkgZ29vZCBmb3IgU0NTSSBJTywgUkFJRCBQQVNTVEhSVSAqLwotCWlmICghKGZ1bmN0aW9uID09IE1QSV9GVU5DVElPTl9SQUlEX1NDU0lfSU9fUEFTU1RIUk9VR0gpIHx8Ci0JICAgIChmdW5jdGlvbiA9PSBNUElfRlVOQ1RJT05fU0NTSV9JT19SRVFVRVNUKSkgeworCWlmICghKGZ1bmN0aW9uID09IE1QSV9GVU5DVElPTl9SQUlEX1NDU0lfSU9fUEFTU1RIUk9VR0ggfHwKKwkJZnVuY3Rpb24gPT0gTVBJX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVCkpIHsKIAkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQKIAkJCSJUYXNrTWdtdCwgbm90IFNDU0lfSU8hIVxuIiwgaW9jLT5uYW1lKSk7CiAJCXJldHVybiAtRVBFUk07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMKaW5kZXggZWJmNmFlMC4uNjEyYWIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYwpAQCAtMTk1LDI5ICsxOTUsMzQgQEAKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAlpbnQJCQlyZWFkeTsKIAlNUFRfQURBUFRFUiAJCSppb2M7CisJaW50CQkJbG9vcHMgPSA0MDsJLyogc2Vjb25kcyAqLwogCiAJaGQgPSBzaG9zdF9wcml2KFNDcG50LT5kZXZpY2UtPmhvc3QpOwogCWlvYyA9IGhkLT5pb2M7CiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCXdoaWxlICgocmVhZHkgPSBmY19yZW1vdGVfcG9ydF9jaGtyZWFkeShycG9ydCkgPj4gMTYpID09IERJRF9JTU1fUkVUUlkpIHsKKwl3aGlsZSAoKHJlYWR5ID0gZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpID4+IDE2KSA9PSBESURfSU1NX1JFVFJZCisJIHx8IChsb29wcyA+IDAgJiYgaW9jLT5hY3RpdmUgPT0gMCkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJCWRmY3ByaW50ayAoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQKIAkJCSJtcHRmY19ibG9ja19lcnJvcl9oYW5kbGVyLiVkOiAlZDolZCwgcG9ydCBzdGF0dXMgaXMgIgotCQkJIkRJRF9JTU1fUkVUUlksIGRlZmVycmluZyAlcyByZWNvdmVyeS5cbiIsCisJCQkiJXgsIGFjdGl2ZSBmbGFnICVkLCBkZWZlcnJpbmcgJXMgcmVjb3ZlcnkuXG4iLAogCQkJaW9jLT5uYW1lLCBpb2MtPnNoLT5ob3N0X25vLAotCQkJU0NwbnQtPmRldmljZS0+aWQsIFNDcG50LT5kZXZpY2UtPmx1biwgY2FsbGVyKSk7CisJCQlTQ3BudC0+ZGV2aWNlLT5pZCwgU0NwbnQtPmRldmljZS0+bHVuLAorCQkJcmVhZHksIGlvYy0+YWN0aXZlLCBjYWxsZXIpKTsKIAkJbXNsZWVwKDEwMDApOwogCQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCWxvb3BzIC0tOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAotCWlmIChyZWFkeSA9PSBESURfTk9fQ09OTkVDVCB8fCAhU0NwbnQtPmRldmljZS0+aG9zdGRhdGEpIHsKKwlpZiAocmVhZHkgPT0gRElEX05PX0NPTk5FQ1QgfHwgIVNDcG50LT5kZXZpY2UtPmhvc3RkYXRhCisJIHx8IGlvYy0+YWN0aXZlID09IDApIHsKIAkJZGZjcHJpbnRrIChpb2MsIHByaW50ayhNWUlPQ19zX0RFQlVHX0ZNVAogCQkJIiVzLiVkOiAlZDolZCwgZmFpbGluZyByZWNvdmVyeSwgIgotCQkJInBvcnQgc3RhdGUgJWQsIHZkZXZpY2UgJXAuXG4iLCBjYWxsZXIsCisJCQkicG9ydCBzdGF0ZSAleCwgYWN0aXZlICVkLCB2ZGV2aWNlICVwLlxuIiwgY2FsbGVyLAogCQkJaW9jLT5uYW1lLCBpb2MtPnNoLT5ob3N0X25vLAogCQkJU0NwbnQtPmRldmljZS0+aWQsIFNDcG50LT5kZXZpY2UtPmx1biwgcmVhZHksCi0JCQlTQ3BudC0+ZGV2aWNlLT5ob3N0ZGF0YSkpOworCQkJaW9jLT5hY3RpdmUsIFNDcG50LT5kZXZpY2UtPmhvc3RkYXRhKSk7CiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCWRmY3ByaW50ayAoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCmluZGV4IDgzODczZTMuLmMyMGJiZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwpAQCAtMTA3NSw2ICsxMDc1LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCittcHRzYXNfYmxvY2tfaW9fc2RldihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHZvaWQgKmRhdGEpCit7CisJc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHNkZXYsIFNERVZfQkxPQ0spOworfQorCitzdGF0aWMgdm9pZAorbXB0c2FzX2Jsb2NrX2lvX3N0YXJnZXQoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQoreworCWlmIChzdGFyZ2V0KQorCQlzdGFyZ2V0X2Zvcl9lYWNoX2RldmljZShzdGFyZ2V0LCBOVUxMLCBtcHRzYXNfYmxvY2tfaW9fc2Rldik7Cit9CisKIC8qKgogICogbXB0c2FzX3RhcmdldF9yZXNldF9xdWV1ZQogICoKQEAgLTEwOTgsMTAgKzExMTEsMTEgQEAKIAlpZCA9IHNhc19ldmVudF9kYXRhLT5UYXJnZXRJRDsKIAljaGFubmVsID0gc2FzX2V2ZW50X2RhdGEtPkJ1czsKIAotCWlmICghKHZ0YXJnZXQgPSBtcHRzYXNfZmluZF92dGFyZ2V0KGlvYywgY2hhbm5lbCwgaWQpKSkKLQkJcmV0dXJuOwotCi0JdnRhcmdldC0+ZGVsZXRlZCA9IDE7IC8qIGJsb2NrIElPICovCisJdnRhcmdldCA9IG1wdHNhc19maW5kX3Z0YXJnZXQoaW9jLCBjaGFubmVsLCBpZCk7CisJaWYgKHZ0YXJnZXQpIHsKKwkJbXB0c2FzX2Jsb2NrX2lvX3N0YXJnZXQodnRhcmdldC0+c3RhcmdldCk7CisJCXZ0YXJnZXQtPmRlbGV0ZWQgPSAxOyAvKiBibG9jayBJTyAqLworCX0KIAogCXRhcmdldF9yZXNldF9saXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1wdHNhc190YXJnZXRfcmVzZXRfZXZlbnQpLAogCSAgICBHRlBfQVRPTUlDKTsKQEAgLTE4NjgsNyArMTg4Miw4IEBACiAJaWYgKGlvYy0+c2FzX2Rpc2NvdmVyeV9xdWllc2NlX2lvKQogCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKIAotLy8Jc2NzaV9wcmludF9jb21tYW5kKFNDcG50KTsKKwlpZiAoaW9jLT5kZWJ1Z19sZXZlbCAmIE1QVF9ERUJVR19TQ1NJKQorCQlzY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQpOwogCiAJcmV0dXJuIG1wdHNjc2loX3FjbWQoU0NwbnQsZG9uZSk7CiB9CkBAIC0yNjg2LDYgKzI3MDEsMTg3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdHJ1Y3QgcmVwX21hbnVfcmVxdWVzdHsKKwl1OCBzbXBfZnJhbWVfdHlwZTsKKwl1OCBmdW5jdGlvbjsKKwl1OCByZXNlcnZlZDsKKwl1OCByZXF1ZXN0X2xlbmd0aDsKK307CisKK3N0cnVjdCByZXBfbWFudV9yZXBseXsKKwl1OCBzbXBfZnJhbWVfdHlwZTsgLyogMHg0MSAqLworCXU4IGZ1bmN0aW9uOyAvKiAweDAxICovCisJdTggZnVuY3Rpb25fcmVzdWx0OworCXU4IHJlc3BvbnNlX2xlbmd0aDsKKwl1MTYgZXhwYW5kZXJfY2hhbmdlX2NvdW50OworCXU4IHJlc2VydmVkMFsyXTsKKwl1OCBzYXNfZm9ybWF0OjE7CisJdTggcmVzZXJ2ZWQxOjc7CisJdTggcmVzZXJ2ZWQyWzNdOworCXU4IHZlbmRvcl9pZFtTQVNfRVhQQU5ERVJfVkVORE9SX0lEX0xFTl07CisJdTggcHJvZHVjdF9pZFtTQVNfRVhQQU5ERVJfUFJPRFVDVF9JRF9MRU5dOworCXU4IHByb2R1Y3RfcmV2W1NBU19FWFBBTkRFUl9QUk9EVUNUX1JFVl9MRU5dOworCXU4IGNvbXBvbmVudF92ZW5kb3JfaWRbU0FTX0VYUEFOREVSX0NPTVBPTkVOVF9WRU5ET1JfSURfTEVOXTsKKwl1MTYgY29tcG9uZW50X2lkOworCXU4IGNvbXBvbmVudF9yZXZpc2lvbl9pZDsKKwl1OCByZXNlcnZlZDM7CisJdTggdmVuZG9yX3NwZWNpZmljWzhdOworfTsKKworLyoqCisgICogbXB0c2FzX2V4cF9yZXBtYW51ZmFjdHVyZV9pbmZvIC0KKyAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAgKiBAc2FzX2FkZHJlc3M6IGV4cGFuZGVyIHNhcyBhZGRyZXNzCisgICogQGVkZXY6IHRoZSBzYXNfZXhwYW5kZXJfZGV2aWNlIG9iamVjdAorICAqCisgICogRmlsbHMgaW4gdGhlIHNhc19leHBhbmRlcl9kZXZpY2Ugb2JqZWN0IHdoZW4gU01QIHBvcnQgaXMgY3JlYXRlZC4KKyAgKgorICAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgICovCitzdGF0aWMgaW50CittcHRzYXNfZXhwX3JlcG1hbnVmYWN0dXJlX2luZm8oTVBUX0FEQVBURVIgKmlvYywKKwl1NjQgc2FzX2FkZHJlc3MsIHN0cnVjdCBzYXNfZXhwYW5kZXJfZGV2aWNlICplZGV2KQoreworCU1QVF9GUkFNRV9IRFIgKm1mOworCVNtcFBhc3N0aHJvdWdoUmVxdWVzdF90ICpzbXByZXE7CisJU21wUGFzc3Rocm91Z2hSZXBseV90ICpzbXByZXA7CisJc3RydWN0IHJlcF9tYW51X3JlcGx5ICptYW51ZmFjdHVyZV9yZXBseTsKKwlzdHJ1Y3QgcmVwX21hbnVfcmVxdWVzdCAqbWFudWZhY3R1cmVfcmVxdWVzdDsKKwlpbnQgcmV0OworCWludCBmbGFnc0xlbmd0aDsKKwl1bnNpZ25lZCBsb25nIHRpbWVsZWZ0OworCWNoYXIgKnBzZ2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkICpkYXRhX291dCA9IE5VTEw7CisJZG1hX2FkZHJfdCBkYXRhX291dF9kbWEgPSAwOworCXUzMiBzejsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnRhc2ttZ210X2xvY2ssIGZsYWdzKTsKKwlpZiAoaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3MpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT50YXNrbWdtdF9sb2NrLCBmbGFncyk7CisJCXByaW50ayhNWUlPQ19zX0lORk9fRk1UICIlczogaG9zdCByZXNldCBpbiBwcm9ncmVzcyFcbiIsCisJCQlfX2Z1bmNfXywgaW9jLT5uYW1lKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+dGFza21nbXRfbG9jaywgZmxhZ3MpOworCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpb2MtPnNhc19tZ210Lm11dGV4KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCW1mID0gbXB0X2dldF9tc2dfZnJhbWUobXB0c2FzTWdtdEN0eCwgaW9jKTsKKwlpZiAoIW1mKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlzbXByZXEgPSAoU21wUGFzc3Rocm91Z2hSZXF1ZXN0X3QgKiltZjsKKwltZW1zZXQoc21wcmVxLCAwLCBzaXplb2YoKnNtcHJlcSkpOworCisJc3ogPSBzaXplb2Yoc3RydWN0IHJlcF9tYW51X3JlcXVlc3QpICsgc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXBseSk7CisKKwlkYXRhX291dCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYy0+cGNpZGV2LCBzeiwgJmRhdGFfb3V0X2RtYSk7CisJaWYgKCFkYXRhX291dCkgeworCQlwcmludGsoS0VSTl9FUlIgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBwdXRfbWY7CisJfQorCisJbWFudWZhY3R1cmVfcmVxdWVzdCA9IGRhdGFfb3V0OworCW1hbnVmYWN0dXJlX3JlcXVlc3QtPnNtcF9mcmFtZV90eXBlID0gMHg0MDsKKwltYW51ZmFjdHVyZV9yZXF1ZXN0LT5mdW5jdGlvbiA9IDE7CisJbWFudWZhY3R1cmVfcmVxdWVzdC0+cmVzZXJ2ZWQgPSAwOworCW1hbnVmYWN0dXJlX3JlcXVlc3QtPnJlcXVlc3RfbGVuZ3RoID0gMDsKKworCXNtcHJlcS0+RnVuY3Rpb24gPSBNUElfRlVOQ1RJT05fU01QX1BBU1NUSFJPVUdIOworCXNtcHJlcS0+UGh5c2ljYWxQb3J0ID0gMHhGRjsKKwkqKCh1NjQgKikmc21wcmVxLT5TQVNBZGRyZXNzKSA9IGNwdV90b19sZTY0KHNhc19hZGRyZXNzKTsKKwlzbXByZXEtPlJlcXVlc3REYXRhTGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXF1ZXN0KTsKKworCXBzZ2UgPSAoY2hhciAqKQorCQkoKChpbnQgKikgbWYpICsgKG9mZnNldG9mKFNtcFBhc3N0aHJvdWdoUmVxdWVzdF90LCBTR0wpIC8gNCkpOworCisJZmxhZ3NMZW5ndGggPSBNUElfU0dFX0ZMQUdTX1NJTVBMRV9FTEVNRU5UIHwKKwkJTVBJX1NHRV9GTEFHU19TWVNURU1fQUREUkVTUyB8CisJCU1QSV9TR0VfRkxBR1NfSE9TVF9UT19JT0MgfAorCQlNUElfU0dFX0ZMQUdTX0VORF9PRl9CVUZGRVI7CisJZmxhZ3NMZW5ndGggPSBmbGFnc0xlbmd0aCA8PCBNUElfU0dFX0ZMQUdTX1NISUZUOworCWZsYWdzTGVuZ3RoIHw9IHNpemVvZihzdHJ1Y3QgcmVwX21hbnVfcmVxdWVzdCk7CisKKwlpb2MtPmFkZF9zZ2UocHNnZSwgZmxhZ3NMZW5ndGgsIGRhdGFfb3V0X2RtYSk7CisJcHNnZSArPSBpb2MtPlNHRV9zaXplOworCisJZmxhZ3NMZW5ndGggPSBNUElfU0dFX0ZMQUdTX1NJTVBMRV9FTEVNRU5UIHwKKwkJTVBJX1NHRV9GTEFHU19TWVNURU1fQUREUkVTUyB8CisJCU1QSV9TR0VfRkxBR1NfSU9DX1RPX0hPU1QgfAorCQlNUElfU0dFX0ZMQUdTX0VORF9PRl9CVUZGRVI7CisJZmxhZ3NMZW5ndGggPSBmbGFnc0xlbmd0aCA8PCBNUElfU0dFX0ZMQUdTX1NISUZUOworCWZsYWdzTGVuZ3RoIHw9IHNpemVvZihzdHJ1Y3QgcmVwX21hbnVfcmVwbHkpOworCWlvYy0+YWRkX3NnZShwc2dlLCBmbGFnc0xlbmd0aCwgZGF0YV9vdXRfZG1hICsKKwlzaXplb2Yoc3RydWN0IHJlcF9tYW51X3JlcXVlc3QpKTsKKworCUlOSVRJQUxJWkVfTUdNVF9TVEFUVVMoaW9jLT5zYXNfbWdtdC5zdGF0dXMpCisJbXB0X3B1dF9tc2dfZnJhbWUobXB0c2FzTWdtdEN0eCwgaW9jLCBtZik7CisKKwl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5zYXNfbWdtdC5kb25lLCAxMCAqIEhaKTsKKwlpZiAoIShpb2MtPnNhc19tZ210LnN0YXR1cyAmIE1QVF9NR01UX1NUQVRVU19DT01NQU5EX0dPT0QpKSB7CisJCXJldCA9IC1FVElNRTsKKwkJbXB0X2ZyZWVfbXNnX2ZyYW1lKGlvYywgbWYpOworCQltZiA9IE5VTEw7CisJCWlmIChpb2MtPnNhc19tZ210LnN0YXR1cyAmIE1QVF9NR01UX1NUQVRVU19ESURfSU9DUkVTRVQpCisJCQlnb3RvIG91dF9mcmVlOworCQlpZiAoIXRpbWVsZWZ0KQorCQkJbXB0X0hhcmRSZXNldEhhbmRsZXIoaW9jLCBDQU5fU0xFRVApOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCW1mID0gTlVMTDsKKworCWlmIChpb2MtPnNhc19tZ210LnN0YXR1cyAmIE1QVF9NR01UX1NUQVRVU19SRl9WQUxJRCkgeworCQl1OCAqdG1wOworCisJc21wcmVwID0gKFNtcFBhc3N0aHJvdWdoUmVwbHlfdCAqKWlvYy0+c2FzX21nbXQucmVwbHk7CisJaWYgKGxlMTZfdG9fY3B1KHNtcHJlcC0+UmVzcG9uc2VEYXRhTGVuZ3RoKSAhPQorCQlzaXplb2Yoc3RydWN0IHJlcF9tYW51X3JlcGx5KSkKKwkJCWdvdG8gb3V0X2ZyZWU7CisKKwltYW51ZmFjdHVyZV9yZXBseSA9IGRhdGFfb3V0ICsgc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXF1ZXN0KTsKKwlzdHJuY3B5KGVkZXYtPnZlbmRvcl9pZCwgbWFudWZhY3R1cmVfcmVwbHktPnZlbmRvcl9pZCwKKwkJU0FTX0VYUEFOREVSX1ZFTkRPUl9JRF9MRU4pOworCXN0cm5jcHkoZWRldi0+cHJvZHVjdF9pZCwgbWFudWZhY3R1cmVfcmVwbHktPnByb2R1Y3RfaWQsCisJCVNBU19FWFBBTkRFUl9QUk9EVUNUX0lEX0xFTik7CisJc3RybmNweShlZGV2LT5wcm9kdWN0X3JldiwgbWFudWZhY3R1cmVfcmVwbHktPnByb2R1Y3RfcmV2LAorCQlTQVNfRVhQQU5ERVJfUFJPRFVDVF9SRVZfTEVOKTsKKwllZGV2LT5sZXZlbCA9IG1hbnVmYWN0dXJlX3JlcGx5LT5zYXNfZm9ybWF0OworCWlmIChtYW51ZmFjdHVyZV9yZXBseS0+c2FzX2Zvcm1hdCkgeworCQlzdHJuY3B5KGVkZXYtPmNvbXBvbmVudF92ZW5kb3JfaWQsCisJCQltYW51ZmFjdHVyZV9yZXBseS0+Y29tcG9uZW50X3ZlbmRvcl9pZCwKKwkJCQlTQVNfRVhQQU5ERVJfQ09NUE9ORU5UX1ZFTkRPUl9JRF9MRU4pOworCQl0bXAgPSAodTggKikmbWFudWZhY3R1cmVfcmVwbHktPmNvbXBvbmVudF9pZDsKKwkJZWRldi0+Y29tcG9uZW50X2lkID0gdG1wWzBdIDw8IDggfCB0bXBbMV07CisJCWVkZXYtPmNvbXBvbmVudF9yZXZpc2lvbl9pZCA9CisJCQltYW51ZmFjdHVyZV9yZXBseS0+Y29tcG9uZW50X3JldmlzaW9uX2lkOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnRrKE1ZSU9DX3NfRVJSX0ZNVAorCQkJIiVzOiBzbXAgcGFzc3RocnUgcmVwbHkgZmFpbGVkIHRvIGJlIHJldHVybmVkXG4iLAorCQkJaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTlhJTzsKKwl9CitvdXRfZnJlZToKKwlpZiAoZGF0YV9vdXRfZG1hKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYy0+cGNpZGV2LCBzeiwgZGF0YV9vdXQsIGRhdGFfb3V0X2RtYSk7CitwdXRfbWY6CisJaWYgKG1mKQorCQltcHRfZnJlZV9tc2dfZnJhbWUoaW9jLCBtZik7CitvdXRfdW5sb2NrOgorCUNMRUFSX01HTVRfU1RBVFVTKGlvYy0+c2FzX21nbXQuc3RhdHVzKQorCW11dGV4X3VubG9jaygmaW9jLT5zYXNfbWdtdC5tdXRleCk7CitvdXQ6CisJcmV0dXJuIHJldDsKKyB9CisKIHN0YXRpYyB2b2lkCiBtcHRzYXNfcGFyc2VfZGV2aWNlX2luZm8oc3RydWN0IHNhc19pZGVudGlmeSAqaWRlbnRpZnksCiAJCXN0cnVjdCBtcHRzYXNfZGV2aW5mbyAqZGV2aWNlX2luZm8pCkBAIC0yOTY3LDYgKzMxNjMsMTEgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJCW1wdHNhc19zZXRfcnBoeShpb2MsIHBoeV9pbmZvLCBycGh5KTsKKwkJaWYgKGlkZW50aWZ5LmRldmljZV90eXBlID09IFNBU19FREdFX0VYUEFOREVSX0RFVklDRSB8fAorCQkJaWRlbnRpZnkuZGV2aWNlX3R5cGUgPT0gU0FTX0ZBTk9VVF9FWFBBTkRFUl9ERVZJQ0UpCisJCQkJbXB0c2FzX2V4cF9yZXBtYW51ZmFjdHVyZV9pbmZvKGlvYywKKwkJCQkJaWRlbnRpZnkuc2FzX2FkZHJlc3MsCisJCQkJCXJwaHlfdG9fZXhwYW5kZXJfZGV2aWNlKHJwaHkpKTsKIAl9CiAKICBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKaW5kZXggODEyNzliMy4uNGE3ZDFhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwpAQCAtMTQzOCw5ICsxNDM4LDE0IEBACiAJICAgICYmICh2ZGV2aWNlLT52dGFyZ2V0LT50ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1FfWUVTKQogCSAgICAmJiAoU0NwbnQtPmRldmljZS0+dGFnZ2VkX3N1cHBvcnRlZCkpIHsKIAkJc2NzaWN0bCA9IHNjc2lkaXIgfCBNUElfU0NTSUlPX0NPTlRST0xfU0lNUExFUTsKLQl9IGVsc2UgeworCQlpZiAoU0NwbnQtPnJlcXVlc3QgJiYgU0NwbnQtPnJlcXVlc3QtPmlvcHJpbykgeworCQkJaWYgKCgoU0NwbnQtPnJlcXVlc3QtPmlvcHJpbyAmIDB4NykgPT0gMSkgfHwKKwkJCQkhKFNDcG50LT5yZXF1ZXN0LT5pb3ByaW8gJiAweDcpKQorCQkJCXNjc2ljdGwgfD0gTVBJX1NDU0lJT19DT05UUk9MX0hFQURPRlE7CisJCX0KKwl9IGVsc2UKIAkJc2NzaWN0bCA9IHNjc2lkaXIgfCBNUElfU0NTSUlPX0NPTlRST0xfVU5UQUdHRUQ7Ci0JfQorCiAKIAkvKiBVc2UgdGhlIGFib3ZlIGluZm9ybWF0aW9uIHRvIHNldCB1cCB0aGUgbWVzc2FnZSBmcmFtZQogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMKaW5kZXggZTM5OTg2YS4uMjY1OGIxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jCkBAIC0xMDY1LDkgKzEwNjUsOCBAQAogCXF1ZXVlID0gZ2QtPnF1ZXVlOwogCXF1ZXVlLT5xdWV1ZWRhdGEgPSBpMm9fYmxrX2RldjsKIAotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxdWV1ZSwgSTJPX01BWF9QSFlTX1NFR01FTlRTKTsKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMocXVldWUsIG1heF9zZWN0b3JzKTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHF1ZXVlLCBpMm9fc2dfdGFibGVzaXplKGMsIGJvZHlfc2l6ZSkpOworCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhxdWV1ZSwgbWF4X3NlY3RvcnMpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocXVldWUsIGkyb19zZ190YWJsZXNpemUoYywgYm9keV9zaXplKSk7CiAKIAlvc21fZGVidWcoIm1heCBzZWN0b3JzID0gJWRcbiIsIHF1ZXVlLT5tYXhfc2VjdG9ycyk7CiAJb3NtX2RlYnVnKCJwaHlzIHNlZ21lbnRzID0gJWRcbiIsIHF1ZXVlLT5tYXhfcGh5c19zZWdtZW50cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwppbmRleCA4NzgyOTc4Li40MTM1NzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTM0OCw2ICszNDgsMTYgQEAKIAkgIHJlYWQvd3JpdGUgZnVuY3Rpb25zIGZvciB0aGUgZGV2aWNlcyB0byBnZXQgYWNjZXNzIHRvIHRoaXMgY2hpcC4KIAkgIFRoaXMgY2hpcCBlbWJlZHMgdmFyaW91cyBvdGhlciBtdWx0aW1lZGlhIGZ1bnRpb25hbGl0aWVzIGFzIHdlbGwuCiAKK2NvbmZpZyBNRkRfVElNQkVSREFMRQorCXRyaXN0YXRlICJTdXBwb3J0IGZvciB0aGUgVGltYmVyZGFsZSBGUEdBIgorCXNlbGVjdCBNRkRfQ09SRQorCWRlcGVuZHMgb24gUENJICYmIEdQSU9MSUIKKwktLS1oZWxwLS0tCisJVGhpcyBpcyB0aGUgY29yZSBkcml2ZXIgZm9yIHRoZSB0aW1iZXJkYWxlIEZQR0EuIFRoaXMgZGV2aWNlIGlzIGEKKwltdWx0aWZ1bmN0aW9uIGRldmljZSB3aGljaCBleHBvc2VzIG51bWVyb3VzIHBsYXRmb3JtIGRldmljZXMuCisKKwlUaGUgdGltYmVyZGFsZSBGUEdBIGNhbiBiZSBmb3VuZCBvbiB0aGUgSW50ZWwgQXRvbSBkZXZlbG9wbWVudCBib2FyZAorCWZvciBpbi12ZWhpY2xlIGluZm9udGFpbm1lbnQsIGNhbGxlZCBSdXNzZWxsdmlsbGUuCiBlbmRtZW51CiAKIG1lbnUgIk11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKaW5kZXggZTA5ZWI0OC4uNzgyOTVkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKQEAgLTU0LDUgKzU0LDYgQEAKIG9iai0kKENPTkZJR19BQjMxMDBfQ09SRSkJKz0gYWIzMTAwLWNvcmUubwogb2JqLSQoQ09ORklHX0FCMzEwMF9PVFApCSs9IGFiMzEwMC1vdHAubwogb2JqLSQoQ09ORklHX0FCNDUwMF9DT1JFKQkrPSBhYjQ1MDAtY29yZS5vCitvYmotJChDT05GSUdfTUZEX1RJTUJFUkRBTEUpICAgICs9IHRpbWJlcmRhbGUubwogb2JqLSQoQ09ORklHX01GRF84OFBNODYwNykJKz0gODhwbTg2MDcubwotb2JqLSQoQ09ORklHX1BNSUNfQURQNTUyMCkJKz0gYWRwNTUyMC5vClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorb2JqLSQoQ09ORklHX1BNSUNfQURQNTUyMCkJKz0gYWRwNTUyMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90aW1iZXJkYWxlLmMgYi9kcml2ZXJzL21mZC90aW1iZXJkYWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVkNDRkMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL3RpbWJlcmRhbGUuYwpAQCAtMCwwICsxLDcyNyBAQAorLyoKKyAqIHRpbWJlcmRhbGUuYyB0aW1iZXJkYWxlIEZQR0EgTUZEIGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyogU3VwcG9ydHM6CisgKiBUaW1iZXJkYWxlIEZQR0EKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbXNpLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KKworI2luY2x1ZGUgPGxpbnV4L3RpbWJfZ3Bpby5oPgorCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLW9jb3Jlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90c2MyMDA3Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3hpbGlueF9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvbWF4NzMwMS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9tYzMzODgwLmg+CisKKyNpbmNsdWRlIDxtZWRpYS90aW1iX3JhZGlvLmg+CisKKyNpbmNsdWRlICJ0aW1iZXJkYWxlLmgiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUgInRpbWJlcmRhbGUiCisKK3N0cnVjdCB0aW1iZXJkYWxlX2RldmljZSB7CisJcmVzb3VyY2Vfc2l6ZV90CQljdGxfbWFwYmFzZTsKKwl1bnNpZ25lZCBjaGFyIF9faW9tZW0gICAqY3RsX21lbWJhc2U7CisJc3RydWN0IHsKKwkJdTMyIG1ham9yOworCQl1MzIgbWlub3I7CisJCXUzMiBjb25maWc7CisJfSBmdzsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHRzYzIwMDdfcGxhdGZvcm1fZGF0YSB0aW1iZXJkYWxlX3RzYzIwMDdfcGxhdGZvcm1fZGF0YSA9IHsKKwkubW9kZWwgPSAyMDAzLAorCS54X3BsYXRlX29obXMgPSAxMDAKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gdGltYmVyZGFsZV9pMmNfYm9hcmRfaW5mb1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInRzYzIwMDciLCAweDQ4KSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV90c2MyMDA3X3BsYXRmb3JtX2RhdGEsCisJCS5pcnEgPSBJUlFfVElNQkVSREFMRV9UU0NfSU5UCisJfSwKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCBvY29yZXNfaTJjX3BsYXRmb3JtX2RhdGEKK3RpbWJlcmRhbGVfb2NvcmVzX3BsYXRmb3JtX2RhdGEgPSB7CisJLnJlZ3N0ZXAgPSA0LAorCS5jbG9ja19raHogPSA2MjUwMCwKKwkuZGV2aWNlcyA9IHRpbWJlcmRhbGVfaTJjX2JvYXJkX2luZm8sCisJLm51bV9kZXZpY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2kyY19ib2FyZF9pbmZvKQorfTsKKworY29uc3Qgc3RhdGljIF9fZGV2aW5pdGNvbnN0IHN0cnVjdCByZXNvdXJjZSB0aW1iZXJkYWxlX29jb3Jlc19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IE9DT1JFU09GRlNFVCwKKwkJLmVuZAk9IE9DT1JFU0VORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydCAJPSBJUlFfVElNQkVSREFMRV9JMkMsCisJCS5lbmQJPSBJUlFfVElNQkVSREFMRV9JMkMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitjb25zdCBzdHJ1Y3QgbWF4NzMwMV9wbGF0Zm9ybV9kYXRhIHRpbWJlcmRhbGVfbWF4NzMwMV9wbGF0Zm9ybV9kYXRhID0geworCS5iYXNlID0gMjAwCit9OworCitjb25zdCBzdHJ1Y3QgbWMzMzg4MF9wbGF0Zm9ybV9kYXRhIHRpbWJlcmRhbGVfbWMzMzg4MF9wbGF0Zm9ybV9kYXRhID0geworCS5iYXNlID0gMTAwCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHRpbWJlcmRhbGVfc3BpXzE2Yml0X2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCS5tb2RhbGlhcyA9ICJtYXg3MzAxIiwKKwkJLm1heF9zcGVlZF9oeiA9IDI2MDAwLAorCQkuY2hpcF9zZWxlY3QgPSAyLAorCQkubW9kZSA9IFNQSV9NT0RFXzAsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfbWF4NzMwMV9wbGF0Zm9ybV9kYXRhCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gdGltYmVyZGFsZV9zcGlfOGJpdF9ib2FyZF9pbmZvW10gPSB7CisJeworCQkubW9kYWxpYXMgPSAibWMzMzg4MCIsCisJCS5tYXhfc3BlZWRfaHogPSA0MDAwLAorCQkuY2hpcF9zZWxlY3QgPSAxLAorCQkubW9kZSA9IFNQSV9NT0RFXzEsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfbWMzMzg4MF9wbGF0Zm9ybV9kYXRhCisJfSwKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCB4c3BpX3BsYXRmb3JtX2RhdGEgdGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEgPSB7CisJLm51bV9jaGlwc2VsZWN0ID0gMywKKwkubGl0dGxlX2VuZGlhbiA9IHRydWUsCisJLyogYml0cyBwZXIgd29yZCBhbmQgZGV2aWNlcyB3aWxsIGJlIGZpbGxlZCBpbiBydW50aW1lIGRlcGVuZGluZworCSAqIG9uIHRoZSBIVyBjb25maWcKKwkgKi8KK307CisKK2NvbnN0IHN0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV9zcGlfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgCT0gU1BJT0ZGU0VULAorCQkuZW5kCT0gU1BJRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RJTUJFUkRBTEVfU1BJLAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfU1BJLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworY29uc3Qgc3RhdGljIF9fZGV2aW5pdGNvbnN0IHN0cnVjdCByZXNvdXJjZSB0aW1iZXJkYWxlX2V0aF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IEVUSE9GRlNFVCwKKwkJLmVuZAk9IEVUSEVORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9USU1CRVJEQUxFX0VUSFNXX0lGLAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfRVRIU1dfSUYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdGltYmdwaW9fcGxhdGZvcm1fZGF0YQorCXRpbWJlcmRhbGVfZ3Bpb19wbGF0Zm9ybV9kYXRhID0geworCS5ncGlvX2Jhc2UgPSAwLAorCS5ucl9waW5zID0gR1BJT19OUl9QSU5TLAorCS5pcnFfYmFzZSA9IDIwMCwKK307CisKK2NvbnN0IHN0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV9ncGlvX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gR1BJT09GRlNFVCwKKwkJLmVuZAk9IEdQSU9FTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVElNQkVSREFMRV9HUElPLAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfR1BJTywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK2NvbnN0IHN0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV9tbG9naWNvcmVfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBNTENPUkVPRkZTRVQsCisJCS5lbmQJPSBNTENPUkVFTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVElNQkVSREFMRV9NTENPUkUsCisJCS5lbmQJPSBJUlFfVElNQkVSREFMRV9NTENPUkUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVElNQkVSREFMRV9NTENPUkVfQlVGLAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfTUxDT1JFX0JVRiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK2NvbnN0IHN0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV91YXJ0X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gVUFSVE9GRlNFVCwKKwkJLmVuZAk9IFVBUlRFTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVElNQkVSREFMRV9VQVJULAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfVUFSVCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK2NvbnN0IHN0YXRpYyBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV91YXJ0bGl0ZV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IFVBUlRMSVRFT0ZGU0VULAorCQkuZW5kCT0gVUFSVExJVEVFTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVElNQkVSREFMRV9VQVJUTElURSwKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX1VBUlRMSVRFLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworY29uc3Qgc3RhdGljIF9fZGV2aW5pdGNvbnN0IHN0cnVjdCByZXNvdXJjZSB0aW1iZXJkYWxlX3JhZGlvX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gUkRTT0ZGU0VULAorCQkuZW5kCT0gUkRTRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RJTUJFUkRBTEVfUkRTLAorCQkuZW5kCT0gSVJRX1RJTUJFUkRBTEVfUkRTLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IGkyY19ib2FyZF9pbmZvIHRpbWJlcmRhbGVfdGVmNjg2OF9pMmNfYm9hcmRfaW5mbyA9IHsKKwlJMkNfQk9BUkRfSU5GTygidGVmNjg2MiIsIDB4NjApCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gdGltYmVyZGFsZV9zYWE3NzA2X2kyY19ib2FyZF9pbmZvID0geworCUkyQ19CT0FSRF9JTkZPKCJzYWE3NzA2aCIsIDB4MUMpCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdGltYl9yYWRpb19wbGF0Zm9ybV9kYXRhCisJdGltYmVyZGFsZV9yYWRpb19wbGF0Zm9ybV9kYXRhID0geworCS5pMmNfYWRhcHRlciA9IDAsCisJLnR1bmVyID0geworCQkubW9kdWxlX25hbWUgPSAidGVmNjg2MiIsCisJCS5pbmZvID0gJnRpbWJlcmRhbGVfdGVmNjg2OF9pMmNfYm9hcmRfaW5mbworCX0sCisJLmRzcCA9IHsKKwkJLm1vZHVsZV9uYW1lID0gInNhYTc3MDZoIiwKKwkJLmluZm8gPSAmdGltYmVyZGFsZV9zYWE3NzA2X2kyY19ib2FyZF9pbmZvCisJfQorfTsKKworY29uc3Qgc3RhdGljIF9fZGV2aW5pdGNvbnN0IHN0cnVjdCByZXNvdXJjZSB0aW1iZXJkYWxlX2RtYV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IERNQU9GRlNFVCwKKwkJLmVuZAk9IERNQUVORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9USU1CRVJEQUxFX0RNQSwKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX0RNQSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCBtZmRfY2VsbCB0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnMFtdID0geworCXsKKwkJLm5hbWUgPSAidGltYi11YXJ0IiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfdWFydF9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV91YXJ0X3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1ncGlvIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZ3Bpb19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9ncGlvX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLXJhZGlvIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3JhZGlvX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9yYWRpb19wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAieGlsaW54X3NwaSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3NwaV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9zcGlfcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gImtzODg0MiIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2V0aF9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9ldGhfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLWRtYSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX2RtYV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9kbWFfcmVzb3VyY2VzLAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgbWZkX2NlbGwgdGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzFbXSA9IHsKKwl7CisJCS5uYW1lID0gInRpbWItdWFydCIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3VhcnRfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfdWFydF9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gInVhcnRsaXRlIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfdWFydGxpdGVfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfdWFydGxpdGVfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLWdwaW8iLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9ncGlvX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX2dwaW9fcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX2dwaW9fcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX2dwaW9fcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItbWxvZ2ljb3JlIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfbWxvZ2ljb3JlX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX21sb2dpY29yZV9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItcmFkaW8iLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9yYWRpb19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9yYWRpb19yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfcmFkaW9fcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX3JhZGlvX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJ4aWxpbnhfc3BpIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfc3BpX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3NwaV9yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAia3M4ODQyIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZXRoX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX2V0aF9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItZG1hIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZG1hX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX2RtYV9yZXNvdXJjZXMsCisJfSwKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCBtZmRfY2VsbCB0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnMltdID0geworCXsKKwkJLm5hbWUgPSAidGltYi11YXJ0IiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfdWFydF9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV91YXJ0X3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAidGltYi1ncGlvIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZ3Bpb19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9ncGlvX3Jlc291cmNlcywKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9ncGlvX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLXJhZGlvIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfcmFkaW9fcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3JhZGlvX3BsYXRmb3JtX2RhdGEsCisJCS5kYXRhX3NpemUgPSBzaXplb2YodGltYmVyZGFsZV9yYWRpb19wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAieGlsaW54X3NwaSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3NwaV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9zcGlfcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItZG1hIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZG1hX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX2RtYV9yZXNvdXJjZXMsCisJfSwKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCBtZmRfY2VsbCB0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnM1tdID0geworCXsKKwkJLm5hbWUgPSAidGltYi11YXJ0IiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfdWFydF9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV91YXJ0X3Jlc291cmNlcywKKwl9LAorCXsKKwkJLm5hbWUgPSAib2NvcmVzLWkyYyIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX29jb3Jlc19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9vY29yZXNfcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX29jb3Jlc19wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfb2NvcmVzX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJ0aW1iLWdwaW8iLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9ncGlvX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX2dwaW9fcmVzb3VyY2VzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZ0aW1iZXJkYWxlX2dwaW9fcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX2dwaW9fcGxhdGZvcm1fZGF0YSksCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItcmFkaW8iLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltYmVyZGFsZV9yYWRpb19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9yYWRpb19yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfcmFkaW9fcGxhdGZvcm1fZGF0YSwKKwkJLmRhdGFfc2l6ZSA9IHNpemVvZih0aW1iZXJkYWxlX3JhZGlvX3BsYXRmb3JtX2RhdGEpLAorCX0sCisJeworCQkubmFtZSA9ICJ4aWxpbnhfc3BpIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfc3BpX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX3NwaV9yZXNvdXJjZXMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhLAorCQkuZGF0YV9zaXplID0gc2l6ZW9mKHRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAia3M4ODQyIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZXRoX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX2V0aF9yZXNvdXJjZXMsCisJfSwKKwl7CisJCS5uYW1lID0gInRpbWItZG1hIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfZG1hX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZXMgPSB0aW1iZXJkYWxlX2RtYV9yZXNvdXJjZXMsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBfX2RldmluaXRjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdGltYmVyZGFsZV9zZGhjX3Jlc291cmNlc1tdID0geworCS8qIGxvY2F0ZWQgaW4gYmFyIDEgYW5kIGJhciAyICovCisJeworCQkuc3RhcnQJPSBTREhDME9GRlNFVCwKKwkJLmVuZAk9IFNESEMwRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSVJRX1RJTUJFUkRBTEVfU0RIQywKKwkJLmVuZAk9IElSUV9USU1CRVJEQUxFX1NESEMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgbWZkX2NlbGwgdGltYmVyZGFsZV9jZWxsc19iYXIxW10gPSB7CisJeworCQkubmFtZSA9ICJzZGhjaSIsCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1iZXJkYWxlX3NkaGNfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRpbWJlcmRhbGVfc2RoY19yZXNvdXJjZXMsCisJfSwKK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCBtZmRfY2VsbCB0aW1iZXJkYWxlX2NlbGxzX2JhcjJbXSA9IHsKKwl7CisJCS5uYW1lID0gInNkaGNpIiwKKwkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfc2RoY19yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGltYmVyZGFsZV9zZGhjX3Jlc291cmNlcywKKwl9LAorfTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19md192ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwljaGFyICpidWYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IHRpbWJlcmRhbGVfZGV2aWNlICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJWQuJWRcbiIsIHByaXYtPmZ3Lm1ham9yLCBwcml2LT5mdy5taW5vciwKKwkJcHJpdi0+ZncuY29uZmlnKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGZ3X3ZlciwgU19JUlVHTywgc2hvd19md192ZXIsIE5VTEwpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2RldmluaXQgdGltYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdGltYmVyZGFsZV9kZXZpY2UgKnByaXY7CisJaW50IGVyciwgaTsKKwlyZXNvdXJjZV9zaXplX3QgbWFwYmFzZTsKKwlzdHJ1Y3QgbXNpeF9lbnRyeSAqbXNpeF9lbnRyaWVzID0gTlVMTDsKKwl1OCBpcF9zZXR1cDsKKworCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBwcml2KTsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfZW5hYmxlOworCisJbWFwYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApOworCWlmICghbWFwYmFzZSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIk5vIHJlc291cmNlXG4iKTsKKwkJZ290byBlcnJfc3RhcnQ7CisJfQorCisJLyogY3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoZSBQQ0kgbWFzdGVyIHJlZ2lzdGVyICovCisJcHJpdi0+Y3RsX21hcGJhc2UgPSBtYXBiYXNlICsgQ0hJUENUTE9GRlNFVDsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwcml2LT5jdGxfbWFwYmFzZSwgQ0hJUENUTFNJWkUsICJ0aW1iLWN0bCIpKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgY3RsIG1lbVxuIik7CisJCWdvdG8gZXJyX3JlcXVlc3Q7CisJfQorCisJcHJpdi0+Y3RsX21lbWJhc2UgPSBpb3JlbWFwKHByaXYtPmN0bF9tYXBiYXNlLCBDSElQQ1RMU0laRSk7CisJaWYgKCFwcml2LT5jdGxfbWVtYmFzZSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkIGZvciBjdGwgbWVtXG4iKTsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisKKwkvKiByZWFkIHRoZSBIVyBjb25maWcgKi8KKwlwcml2LT5mdy5tYWpvciA9IGlvcmVhZDMyKHByaXYtPmN0bF9tZW1iYXNlICsgVElNQl9SRVZfTUFKT1IpOworCXByaXYtPmZ3Lm1pbm9yID0gaW9yZWFkMzIocHJpdi0+Y3RsX21lbWJhc2UgKyBUSU1CX1JFVl9NSU5PUik7CisJcHJpdi0+ZncuY29uZmlnID0gaW9yZWFkMzIocHJpdi0+Y3RsX21lbWJhc2UgKyBUSU1CX0hXX0NPTkZJRyk7CisKKwlpZiAocHJpdi0+ZncubWFqb3IgPiBUSU1CX1NVUFBPUlRFRF9NQUpPUikgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIlRoZSBkcml2ZXIgc3VwcG9ydHMgYW4gb2xkZXIgIgorCQkJInZlcnNpb24gb2YgdGhlIEZQR0EsIHBsZWFzZSB1cGRhdGUgdGhlIGRyaXZlciB0byAiCisJCQkic3VwcG9ydCAlZC4lZFxuIiwgcHJpdi0+ZncubWFqb3IsIHByaXYtPmZ3Lm1pbm9yKTsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisJaWYgKHByaXYtPmZ3Lm1ham9yIDwgVElNQl9TVVBQT1JURURfTUFKT1IgfHwKKwkJcHJpdi0+ZncubWlub3IgPCBUSU1CX1JFUVVJUkVEX01JTk9SKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiVGhlIEZQR0EgaW1hZ2UgaXMgdG9vIG9sZCAoJWQuJWQpLCAiCisJCQkicGxlYXNlIHVwZ3JhZGUgdGhlIEZQR0EgdG8gYXQgbGVhc3Q6ICVkLiVkXG4iLAorCQkJcHJpdi0+ZncubWFqb3IsIHByaXYtPmZ3Lm1pbm9yLAorCQkJVElNQl9TVVBQT1JURURfTUFKT1IsIFRJTUJfUkVRVUlSRURfTUlOT1IpOworCQlnb3RvIGVycl9pb3JlbWFwOworCX0KKworCW1zaXhfZW50cmllcyA9IGt6YWxsb2MoVElNQkVSREFMRV9OUl9JUlFTICogc2l6ZW9mKCptc2l4X2VudHJpZXMpLAorCQlHRlBfS0VSTkVMKTsKKwlpZiAoIW1zaXhfZW50cmllcykKKwkJZ290byBlcnJfaW9yZW1hcDsKKworCWZvciAoaSA9IDA7IGkgPCBUSU1CRVJEQUxFX05SX0lSUVM7IGkrKykKKwkJbXNpeF9lbnRyaWVzW2ldLmVudHJ5ID0gaTsKKworCWVyciA9IHBjaV9lbmFibGVfbXNpeChkZXYsIG1zaXhfZW50cmllcywgVElNQkVSREFMRV9OUl9JUlFTKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJIk1TSS1YIGluaXQgZmFpbGVkOiAlZCwgZXhwZWN0ZWQgZW50cmllczogJWRcbiIsCisJCQllcnIsIFRJTUJFUkRBTEVfTlJfSVJRUyk7CisJCWdvdG8gZXJyX21zaXg7CisJfQorCisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2Z3X3Zlcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfY3JlYXRlX2ZpbGU7CisKKwkvKiBSZXNldCBhbGwgRlBHQSBQTEIgcGVyaXBoZXJhbHMgKi8KKwlpb3dyaXRlMzIoMHgxLCBwcml2LT5jdGxfbWVtYmFzZSArIFRJTUJfU1dfUlNUKTsKKworCS8qIHVwZGF0ZSBJUlEgb2Zmc2V0cyBpbiBJMkMgYm9hcmQgaW5mbyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRpbWJlcmRhbGVfaTJjX2JvYXJkX2luZm8pOyBpKyspCisJCXRpbWJlcmRhbGVfaTJjX2JvYXJkX2luZm9baV0uaXJxID0KKwkJCW1zaXhfZW50cmllc1t0aW1iZXJkYWxlX2kyY19ib2FyZF9pbmZvW2ldLmlycV0udmVjdG9yOworCisJLyogVXBkYXRlIHRoZSBTUEkgY29uZmlndXJhdGlvbiBkZXBlbmRpbmcgb24gdGhlIEhXICg4IG9yIDE2IGJpdCkgKi8KKwlpZiAocHJpdi0+ZncuY29uZmlnICYgVElNQl9IV19DT05GSUdfU1BJXzhCSVQpIHsKKwkJdGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEuYml0c19wZXJfd29yZCA9IDg7CisJCXRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhLmRldmljZXMgPQorCQkJdGltYmVyZGFsZV9zcGlfOGJpdF9ib2FyZF9pbmZvOworCQl0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YS5udW1fZGV2aWNlcyA9CisJCQlBUlJBWV9TSVpFKHRpbWJlcmRhbGVfc3BpXzhiaXRfYm9hcmRfaW5mbyk7CisJfSBlbHNlIHsKKwkJdGltYmVyZGFsZV94c3BpX3BsYXRmb3JtX2RhdGEuYml0c19wZXJfd29yZCA9IDE2OworCQl0aW1iZXJkYWxlX3hzcGlfcGxhdGZvcm1fZGF0YS5kZXZpY2VzID0KKwkJCXRpbWJlcmRhbGVfc3BpXzE2Yml0X2JvYXJkX2luZm87CisJCXRpbWJlcmRhbGVfeHNwaV9wbGF0Zm9ybV9kYXRhLm51bV9kZXZpY2VzID0KKwkJCUFSUkFZX1NJWkUodGltYmVyZGFsZV9zcGlfMTZiaXRfYm9hcmRfaW5mbyk7CisJfQorCisJaXBfc2V0dXAgPSBwcml2LT5mdy5jb25maWcgJiBUSU1CX0hXX1ZFUl9NQVNLOworCXN3aXRjaCAoaXBfc2V0dXApIHsKKwljYXNlIFRJTUJfSFdfVkVSMDoKKwkJZXJyID0gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgLTEsCisJCQl0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnMCwKKwkJCUFSUkFZX1NJWkUodGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzApLAorCQkJJmRldi0+cmVzb3VyY2VbMF0sIG1zaXhfZW50cmllc1swXS52ZWN0b3IpOworCQlicmVhazsKKwljYXNlIFRJTUJfSFdfVkVSMToKKwkJZXJyID0gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgLTEsCisJCQl0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnMSwKKwkJCUFSUkFZX1NJWkUodGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzEpLAorCQkJJmRldi0+cmVzb3VyY2VbMF0sIG1zaXhfZW50cmllc1swXS52ZWN0b3IpOworCQlicmVhazsKKwljYXNlIFRJTUJfSFdfVkVSMjoKKwkJZXJyID0gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgLTEsCisJCQl0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnMiwKKwkJCUFSUkFZX1NJWkUodGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzIpLAorCQkJJmRldi0+cmVzb3VyY2VbMF0sIG1zaXhfZW50cmllc1swXS52ZWN0b3IpOworCQlicmVhazsKKwljYXNlIFRJTUJfSFdfVkVSMzoKKwkJZXJyID0gbWZkX2FkZF9kZXZpY2VzKCZkZXYtPmRldiwgLTEsCisJCQl0aW1iZXJkYWxlX2NlbGxzX2JhcjBfY2ZnMywKKwkJCUFSUkFZX1NJWkUodGltYmVyZGFsZV9jZWxsc19iYXIwX2NmZzMpLAorCQkJJmRldi0+cmVzb3VyY2VbMF0sIG1zaXhfZW50cmllc1swXS52ZWN0b3IpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZkZXYtPmRldiwgIlVrbm93biBJUCBzZXR1cDogJWQuJWQuJWRcbiIsCisJCQlwcml2LT5mdy5tYWpvciwgcHJpdi0+ZncubWlub3IsIGlwX3NldHVwKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfbWZkOworCQlicmVhazsKKwl9CisKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibWZkX2FkZF9kZXZpY2VzIGZhaWxlZDogJWRcbiIsIGVycik7CisJCWdvdG8gZXJyX21mZDsKKwl9CisKKwllcnIgPSBtZmRfYWRkX2RldmljZXMoJmRldi0+ZGV2LCAwLAorCQl0aW1iZXJkYWxlX2NlbGxzX2JhcjEsIEFSUkFZX1NJWkUodGltYmVyZGFsZV9jZWxsc19iYXIxKSwKKwkJJmRldi0+cmVzb3VyY2VbMV0sIG1zaXhfZW50cmllc1swXS52ZWN0b3IpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJtZmRfYWRkX2RldmljZXMgZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwkJZ290byBlcnJfbWZkMjsKKwl9CisKKwkvKiBvbmx5IHZlcnNpb24gMCBhbmQgMyBoYXZlIHRoZSBpTmFuZCByb3V0ZWQgdG8gU0RIQ0kgKi8KKwlpZiAoKChwcml2LT5mdy5jb25maWcgJiBUSU1CX0hXX1ZFUl9NQVNLKSA9PSBUSU1CX0hXX1ZFUjApIHx8CisJCSgocHJpdi0+ZncuY29uZmlnICYgVElNQl9IV19WRVJfTUFTSykgPT0gVElNQl9IV19WRVIzKSkgeworCQllcnIgPSBtZmRfYWRkX2RldmljZXMoJmRldi0+ZGV2LCAxLCB0aW1iZXJkYWxlX2NlbGxzX2JhcjIsCisJCQlBUlJBWV9TSVpFKHRpbWJlcmRhbGVfY2VsbHNfYmFyMiksCisJCQkmZGV2LT5yZXNvdXJjZVsyXSwgbXNpeF9lbnRyaWVzWzBdLnZlY3Rvcik7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAibWZkX2FkZF9kZXZpY2VzIGZhaWxlZDogJWRcbiIsIGVycik7CisJCQlnb3RvIGVycl9tZmQyOworCQl9CisJfQorCisJa2ZyZWUobXNpeF9lbnRyaWVzKTsKKworCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJIkZvdW5kIFRpbWJlcmRhbGUgQ2FyZC4gUmV2OiAlZC4lZCwgSFcgY29uZmlnOiAweCUwMnhcbiIsCisJCXByaXYtPmZ3Lm1ham9yLCBwcml2LT5mdy5taW5vciwgcHJpdi0+ZncuY29uZmlnKTsKKworCXJldHVybiAwOworCitlcnJfbWZkMjoKKwltZmRfcmVtb3ZlX2RldmljZXMoJmRldi0+ZGV2KTsKK2Vycl9tZmQ6CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2Z3X3Zlcik7CitlcnJfY3JlYXRlX2ZpbGU6CisJcGNpX2Rpc2FibGVfbXNpeChkZXYpOworZXJyX21zaXg6CisJaW91bm1hcChwcml2LT5jdGxfbWVtYmFzZSk7CitlcnJfaW9yZW1hcDoKKwlyZWxlYXNlX21lbV9yZWdpb24ocHJpdi0+Y3RsX21hcGJhc2UsIENISVBDVExTSVpFKTsKK2Vycl9yZXF1ZXN0OgorCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworZXJyX3N0YXJ0OgorCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworZXJyX2VuYWJsZToKKwlrZnJlZShtc2l4X2VudHJpZXMpOworCWtmcmVlKHByaXYpOworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgdGltYl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdGltYmVyZGFsZV9kZXZpY2UgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKworCW1mZF9yZW1vdmVfZGV2aWNlcygmZGV2LT5kZXYpOworCisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2Z3X3Zlcik7CisKKwlpb3VubWFwKHByaXYtPmN0bF9tZW1iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocHJpdi0+Y3RsX21hcGJhc2UsIENISVBDVExTSVpFKTsKKworCXBjaV9kaXNhYmxlX21zaXgoZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlrZnJlZShwcml2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHRpbWJlcmRhbGVfcGNpX3RibFtdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1RJTUIsIFBDSV9ERVZJQ0VfSURfVElNQikgfSwKKwl7IDAgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB0aW1iZXJkYWxlX3BjaV90YmwpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdGltYmVyZGFsZV9wY2lfZHJpdmVyID0geworCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlID0gdGltYmVyZGFsZV9wY2lfdGJsLAorCS5wcm9iZSA9IHRpbWJfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHRpbWJfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRpbWJlcmRhbGVfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZ0aW1iZXJkYWxlX3BjaV9kcml2ZXIpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIkZhaWxlZCB0byByZWdpc3RlciBQQ0kgZHJpdmVyIGZvciAlcyBkZXZpY2UuXG4iLAorCQkJdGltYmVyZGFsZV9wY2lfZHJpdmVyLm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJEcml2ZXIgZm9yICVzIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLlxuIiwKKwkJdGltYmVyZGFsZV9wY2lfZHJpdmVyLm5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0aW1iZXJkYWxlX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnRpbWJlcmRhbGVfcGNpX2RyaXZlcik7CisKKwlwcmludGsoS0VSTl9JTkZPICJEcml2ZXIgZm9yICVzIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1bnJlZ2lzdGVyZWQuXG4iLAorCQl0aW1iZXJkYWxlX3BjaV9kcml2ZXIubmFtZSk7Cit9CisKK21vZHVsZV9pbml0KHRpbWJlcmRhbGVfaW5pdCk7Cittb2R1bGVfZXhpdCh0aW1iZXJkYWxlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNb2NlYW4gTGFib3JhdG9yaWVzIDxpbmZvQG1vY2Vhbi1sYWJzLmNvbT4iKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RpbWJlcmRhbGUuaCBiL2RyaXZlcnMvbWZkL3RpbWJlcmRhbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDI3ZmZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvdGltYmVyZGFsZS5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogdGltYmVyZGFsZS5oIHRpbWJlcmRhbGUgRlBHQSBNRkQgZHJpdmVyIGRlZmluZXMKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIFN1cHBvcnRzOgorICogVGltYmVyZGFsZSBGUEdBCisgKi8KKworI2lmbmRlZiBNRkRfVElNQkVSREFMRV9ICisjZGVmaW5lIE1GRF9USU1CRVJEQUxFX0gKKworI2RlZmluZSBEUlZfVkVSU0lPTgkJIjAuMSIKKworLyogVGhpcyBkcml2ZXIgb25seSBzdXBwb3J0IHZlcnNpb25zID49IDMuOCBhbmQgPCA0LjAgICovCisjZGVmaW5lIFRJTUJfU1VQUE9SVEVEX01BSk9SCTMKKworLyogVGhpcyBkcml2ZXIgb25seSBzdXBwb3J0IG1pbm9yID49IDggKi8KKyNkZWZpbmUgVElNQl9SRVFVSVJFRF9NSU5PUgk4CisKKy8qIFJlZ2lzdGVycyBvZiB0aGUgY29udHJvbCBhcmVhICovCisjZGVmaW5lIFRJTUJfUkVWX01BSk9SCTB4MDAKKyNkZWZpbmUgVElNQl9SRVZfTUlOT1IJMHgwNAorI2RlZmluZSBUSU1CX0hXX0NPTkZJRwkweDA4CisjZGVmaW5lIFRJTUJfU1dfUlNUCTB4NDAKKworLyogYml0cyBpbiB0aGUgVElNQl9IV19DT05GSUcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVElNQl9IV19DT05GSUdfU1BJXzhCSVQJMHg4MAorCisjZGVmaW5lIFRJTUJfSFdfVkVSX01BU0sJMHgwZgorI2RlZmluZSBUSU1CX0hXX1ZFUjAJCTB4MDAKKyNkZWZpbmUgVElNQl9IV19WRVIxCQkweDAxCisjZGVmaW5lIFRJTUJfSFdfVkVSMgkJMHgwMgorI2RlZmluZSBUSU1CX0hXX1ZFUjMJCTB4MDMKKworI2RlZmluZSBPQ09SRVNPRkZTRVQJMHgwCisjZGVmaW5lIE9DT1JFU0VORAkweDFmCisKKyNkZWZpbmUgU1BJT0ZGU0VUCTB4ODAKKyNkZWZpbmUgU1BJRU5ECQkweGZmCisKKyNkZWZpbmUgVUFSVExJVEVPRkZTRVQJMHgxMDAKKyNkZWZpbmUgVUFSVExJVEVFTkQJMHgxMGYKKworI2RlZmluZSBSRFNPRkZTRVQJMHgxODAKKyNkZWZpbmUgUkRTRU5ECQkweDE4MworCisjZGVmaW5lIEVUSE9GRlNFVAkweDMwMAorI2RlZmluZSBFVEhFTkQJCTB4M2ZmCisKKyNkZWZpbmUgR1BJT09GRlNFVAkweDQwMAorI2RlZmluZSBHUElPRU5ECQkweDdmZgorCisjZGVmaW5lIENISVBDVExPRkZTRVQJMHg4MDAKKyNkZWZpbmUgQ0hJUENUTEVORAkweDhmZgorI2RlZmluZSBDSElQQ1RMU0laRQkoQ0hJUENUTEVORCAtIENISVBDVExPRkZTRVQpCisKKyNkZWZpbmUgSU5UQ09GRlNFVAkweGMwMAorI2RlZmluZSBJTlRDRU5ECQkweGZmZgorI2RlZmluZSBJTlRDU0laRQkoSU5UQ0VORCAtIElOVENPRkZTRVQpCisKKyNkZWZpbmUgTU9TVE9GRlNFVAkweDEwMDAKKyNkZWZpbmUgTU9TVEVORAkJMHgxM2ZmCisKKyNkZWZpbmUgVUFSVE9GRlNFVAkweDE0MDAKKyNkZWZpbmUgVUFSVEVORAkJMHgxN2ZmCisKKyNkZWZpbmUgWElJQ09GRlNFVAkweDE4MDAKKyNkZWZpbmUgWElJQ0VORAkJMHgxOWZmCisKKyNkZWZpbmUgSTJTT0ZGU0VUCTB4MUMwMAorI2RlZmluZSBJMlNFTkQJCTB4MWZmZgorCisjZGVmaW5lIExPR0lXT0ZGU0VUCTB4MzAwMDAKKyNkZWZpbmUgTE9HSVdFTkQJMHgzN2ZmZgorCisjZGVmaW5lIE1MQ09SRU9GRlNFVAkweDQwMDAwCisjZGVmaW5lIE1MQ09SRUVORAkweDQzZmZmCisKKyNkZWZpbmUgRE1BT0ZGU0VUCTB4MDEwMDAwMDAKKyNkZWZpbmUgRE1BRU5ECQkweDAxM2ZmZmZmCisKKy8qIFNESEMwIGlzIHBsYWNlZCBpbiBQQ0kgYmFyIDEgKi8KKyNkZWZpbmUgU0RIQzBPRkZTRVQJMHgwMAorI2RlZmluZSBTREhDMEVORAkweGZmCisKKy8qIFNESEMxIGlzIHBsYWNlZCBpbiBQQ0kgYmFyIDIgKi8KKyNkZWZpbmUgU0RIQzFPRkZTRVQJMHgwMAorI2RlZmluZSBTREhDMUVORAkweGZmCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9USU1CCTB4MTBlZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJTUIJMHhhMTIzCisKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfSU5JQwkJMAorI2RlZmluZSBJUlFfVElNQkVSREFMRV9NTEIJCTEKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfR1BJTwkJMgorI2RlZmluZSBJUlFfVElNQkVSREFMRV9JMkMJCTMKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfVUFSVAkJNAorI2RlZmluZSBJUlFfVElNQkVSREFMRV9ETUEJCTUKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfSTJTCQk2CisjZGVmaW5lIElSUV9USU1CRVJEQUxFX1RTQ19JTlQJCTcKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfU0RIQwkJOAorI2RlZmluZSBJUlFfVElNQkVSREFMRV9BRFY3MTgwCQk5CisjZGVmaW5lIElSUV9USU1CRVJEQUxFX0VUSFNXX0lGCQkxMAorI2RlZmluZSBJUlFfVElNQkVSREFMRV9TUEkJCTExCisjZGVmaW5lIElSUV9USU1CRVJEQUxFX1VBUlRMSVRFCQkxMgorI2RlZmluZSBJUlFfVElNQkVSREFMRV9NTENPUkUJCTEzCisjZGVmaW5lIElSUV9USU1CRVJEQUxFX01MQ09SRV9CVUYJMTQKKyNkZWZpbmUgSVJRX1RJTUJFUkRBTEVfUkRTCQkxNQorI2RlZmluZSBUSU1CRVJEQUxFX05SX0lSUVMJCTE2CisKKyNkZWZpbmUgR1BJT19QSU5fQVNDQgkJOAorI2RlZmluZSBHUElPX1BJTl9JTklDX1JTVAkxNAorI2RlZmluZSBHUElPX1BJTl9CVF9SU1QJCTE1CisjZGVmaW5lIEdQSU9fTlJfUElOUwkJMTYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90d2wtY29yZS5jIGIvZHJpdmVycy9tZmQvdHdsLWNvcmUuYwppbmRleCAyYTc2MDY1Li4xOWE5MzBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2wtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3R3bC1jb3JlLmMKQEAgLTExNSw3ICsxMTUsOCBAQAogI2RlZmluZSB0d2xfaGFzX3dhdGNoZG9nKCkgICAgICAgIGZhbHNlCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1RXTDQwMzBfQ09ERUMpIHx8IGRlZmluZWQoQ09ORklHX1RXTDQwMzBfQ09ERUNfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX1RXTDQwMzBfQ09ERUMpIHx8IGRlZmluZWQoQ09ORklHX1RXTDQwMzBfQ09ERUNfTU9EVUxFKSB8fFwKKwlkZWZpbmVkKENPTkZJR19TTkRfU09DX1RXTDYwMzApIHx8IGRlZmluZWQoQ09ORklHX1NORF9TT0NfVFdMNjAzMF9NT0RVTEUpCiAjZGVmaW5lIHR3bF9oYXNfY29kZWMoKQl0cnVlCiAjZWxzZQogI2RlZmluZSB0d2xfaGFzX2NvZGVjKCkJZmFsc2UKQEAgLTcxMSw4ICs3MTIsMTkgQEAKIAkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKIAl9CiAKLQlpZiAodHdsX2hhc19jb2RlYygpICYmIHBkYXRhLT5jb2RlYykgewotCQljaGlsZCA9IGFkZF9jaGlsZCgxLCAidHdsNDAzMF9jb2RlYyIsCisJaWYgKHR3bF9oYXNfY29kZWMoKSAmJiBwZGF0YS0+Y29kZWMgJiYgdHdsX2NsYXNzX2lzXzQwMzAoKSkgeworCQlzdWJfY2hpcF9pZCA9IHR3bF9tYXBbVFdMX01PRFVMRV9BVURJT19WT0lDRV0uc2lkOworCQljaGlsZCA9IGFkZF9jaGlsZChzdWJfY2hpcF9pZCwgInR3bDQwMzBfY29kZWMiLAorCQkJCXBkYXRhLT5jb2RlYywgc2l6ZW9mKCpwZGF0YS0+Y29kZWMpLAorCQkJCWZhbHNlLCAwLCAwKTsKKwkJaWYgKElTX0VSUihjaGlsZCkpCisJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisJfQorCisJLyogUGhvZW5peCovCisJaWYgKHR3bF9oYXNfY29kZWMoKSAmJiBwZGF0YS0+Y29kZWMgJiYgdHdsX2NsYXNzX2lzXzYwMzAoKSkgeworCQlzdWJfY2hpcF9pZCA9IHR3bF9tYXBbVFdMX01PRFVMRV9BVURJT19WT0lDRV0uc2lkOworCQljaGlsZCA9IGFkZF9jaGlsZChzdWJfY2hpcF9pZCwgInR3bDYwMzBfY29kZWMiLAogCQkJCXBkYXRhLT5jb2RlYywgc2l6ZW9mKCpwZGF0YS0+Y29kZWMpLAogCQkJCWZhbHNlLCAwLCAwKTsKIAkJaWYgKElTX0VSUihjaGlsZCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMgYi9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMKaW5kZXggYzVhN2E4NS4uMzgxZmUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jCisrKyBiL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYwpAQCAtMTU0LDkgKzE1NCw4IEBACiAKIAkJaWYgKG1xLT5ib3VuY2VfYnVmKSB7CiAJCQlibGtfcXVldWVfYm91bmNlX2xpbWl0KG1xLT5xdWV1ZSwgQkxLX0JPVU5DRV9BTlkpOwotCQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKG1xLT5xdWV1ZSwgYm91bmNlc3ogLyA1MTIpOwotCQkJYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKG1xLT5xdWV1ZSwgYm91bmNlc3ogLyA1MTIpOwotCQkJYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhtcS0+cXVldWUsIGJvdW5jZXN6IC8gNTEyKTsKKwkJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhtcS0+cXVldWUsIGJvdW5jZXN6IC8gNTEyKTsKKwkJCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMobXEtPnF1ZXVlLCBib3VuY2VzeiAvIDUxMik7CiAJCQlibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShtcS0+cXVldWUsIGJvdW5jZXN6KTsKIAogCQkJbXEtPnNnID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNjYXR0ZXJsaXN0KSwKQEAgLTE4MCwxMCArMTc5LDkgQEAKIAogCWlmICghbXEtPmJvdW5jZV9idWYpIHsKIAkJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChtcS0+cXVldWUsIGxpbWl0KTsKLQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKG1xLT5xdWV1ZSwKKwkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKG1xLT5xdWV1ZSwKIAkJCW1pbihob3N0LT5tYXhfYmxrX2NvdW50LCBob3N0LT5tYXhfcmVxX3NpemUgLyA1MTIpKTsKLQkJYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKG1xLT5xdWV1ZSwgaG9zdC0+bWF4X3BoeXNfc2Vncyk7Ci0JCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMobXEtPnF1ZXVlLCBob3N0LT5tYXhfaHdfc2Vncyk7CisJCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMobXEtPnF1ZXVlLCBob3N0LT5tYXhfaHdfc2Vncyk7CiAJCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKG1xLT5xdWV1ZSwgaG9zdC0+bWF4X3NlZ19zaXplKTsKIAogCQltcS0+c2cgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMKaW5kZXggZDNmNTU2MS4uNTdiMjExOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMKQEAgLTY1MCwxMSArNjUwLDExIEBACiAJCQkJZmxhZ3MgPSBERE1BX0ZMQUdTX0lFOwogCiAJCQlpZiAoaG9zdC0+ZmxhZ3MgJiBIT1NUX0ZfWE1JVCkgewotCQkJCXJldCA9IGF1MXh4eF9kYmRtYV9wdXRfc291cmNlX2ZsYWdzKGNoYW5uZWwsCi0JCQkJCSh2b2lkICopc2dfdmlydChzZyksIGxlbiwgZmxhZ3MpOworCQkJCXJldCA9IGF1MXh4eF9kYmRtYV9wdXRfc291cmNlKGNoYW5uZWwsCisJCQkJCXNnX3BoeXMoc2cpLCBsZW4sIGZsYWdzKTsKIAkJCX0gZWxzZSB7Ci0JCQkJcmV0ID0gYXUxeHh4X2RiZG1hX3B1dF9kZXN0X2ZsYWdzKGNoYW5uZWwsCi0JCQkJCSh2b2lkICopc2dfdmlydChzZyksIGxlbiwgZmxhZ3MpOworCQkJCXJldCA9IGF1MXh4eF9kYmRtYV9wdXRfZGVzdChjaGFubmVsLAorCQkJCQlzZ19waHlzKHNnKSwgbGVuLCBmbGFncyk7CiAJCQl9CiAKIAkJCWlmICghcmV0KQpAQCAtMTAxNyw2ICsxMDE3LDEwIEBACiAJfSBlbHNlCiAJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX05FRURTX1BPTEw7CiAKKwkvKiBwbGF0Zm9ybSBtYXkgbm90IGJlIGFibGUgdG8gdXNlIGFsbCBhZHZlcnRpc2VkIGNhcHMgKi8KKwlpZiAoaG9zdC0+cGxhdGRhdGEpCisJCW1tYy0+Y2FwcyAmPSB+KGhvc3QtPnBsYXRkYXRhLT5tYXNrX2hvc3RfY2Fwcyk7CisKIAl0YXNrbGV0X2luaXQoJmhvc3QtPmRhdGFfdGFzaywgYXUxeG1tY190YXNrbGV0X2RhdGEsCiAJCQkodW5zaWduZWQgbG9uZylob3N0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuYwppbmRleCA5MGQxNjhhLi44NGMxMDNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuYwpAQCAtMiw2ICsyLDcgQEAKICAqICBsaW51eC9kcml2ZXJzL21tYy9ob3N0L21tY2kuYyAtIEFSTSBQcmltZUNlbGwgTU1DSSBQTDE4MC8xIGRyaXZlcgogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgRGVlcCBCbHVlIFNvbHV0aW9ucywgTHRkLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAxMCBTVC1Fcmljc3NvbiBBQi4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTM0LDkgKzM1LDYgQEAKIAogI2RlZmluZSBEUklWRVJfTkFNRSAibW1jaS1wbDE4eCIKIAotI2RlZmluZSBEQkcoaG9zdCxmbXQsYXJncy4uLikJXAotCXByX2RlYnVnKCIlczogJXM6ICIgZm10LCBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwgX19mdW5jX18gLCBhcmdzKQotCiBzdGF0aWMgdW5zaWduZWQgaW50IGZtYXggPSA1MTU2MzM7CiAKIC8qCkBAIC0xMDUsOCArMTAzLDggQEAKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJaW50IGJsa3N6X2JpdHM7CiAKLQlEQkcoaG9zdCwgImJsa3N6ICUwNHggYmxrcyAlMDR4IGZsYWdzICUwOHhcbiIsCi0JICAgIGRhdGEtPmJsa3N6LCBkYXRhLT5ibG9ja3MsIGRhdGEtPmZsYWdzKTsKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgImJsa3N6ICUwNHggYmxrcyAlMDR4IGZsYWdzICUwOHhcbiIsCisJCWRhdGEtPmJsa3N6LCBkYXRhLT5ibG9ja3MsIGRhdGEtPmZsYWdzKTsKIAogCWhvc3QtPmRhdGEgPSBkYXRhOwogCWhvc3QtPnNpemUgPSBkYXRhLT5ibGtzejsKQEAgLTE1NSw3ICsxNTMsNyBAQAogewogCXZvaWQgX19pb21lbSAqYmFzZSA9IGhvc3QtPmJhc2U7CiAKLQlEQkcoaG9zdCwgIm9wICUwMnggYXJnICUwOHggZmxhZ3MgJTA4eFxuIiwKKwlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIm9wICUwMnggYXJnICUwOHggZmxhZ3MgJTA4eFxuIiwKIAkgICAgY21kLT5vcGNvZGUsIGNtZC0+YXJnLCBjbWQtPmZsYWdzKTsKIAogCWlmIChyZWFkbChiYXNlICsgTU1DSUNPTU1BTkQpICYgTUNJX0NQU01fRU5BQkxFKSB7CkBAIC0xODQsOCArMTgyLDIwIEBACiB7CiAJaWYgKHN0YXR1cyAmIE1DSV9EQVRBQkxPQ0tFTkQpIHsKIAkJaG9zdC0+ZGF0YV94ZmVyZWQgKz0gZGF0YS0+Ymxrc3o7CisjaWZkZWYgQ09ORklHX0FSQ0hfVTMwMAorCQkvKgorCQkgKiBPbiB0aGUgVTMwMCBzb21lIHNpZ25hbCBvciBvdGhlciBpcworCQkgKiBiYWRseSByb3V0ZWQgc28gdGhhdCBhIGRhdGEgd3JpdGUgZG9lcworCQkgKiBub3QgcHJvcGVybHkgdGVybWluYXRlIHdpdGggYSBNQ0lfREFUQUVORAorCQkgKiBzdGF0dXMgZmxhZy4gVGhpcyBxdWlyayB3aWxsIG1ha2Ugd3JpdGVzCisJCSAqIHdvcmsgYWdhaW4uCisJCSAqLworCQlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkKKwkJCXN0YXR1cyB8PSBNQ0lfREFUQUVORDsKKyNlbmRpZgogCX0KIAlpZiAoc3RhdHVzICYgKE1DSV9EQVRBQ1JDRkFJTHxNQ0lfREFUQVRJTUVPVVR8TUNJX1RYVU5ERVJSVU58TUNJX1JYT1ZFUlJVTikpIHsKKwkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJNQ0kgRVJST1IgSVJRIChzdGF0dXMgJTA4eClcbiIsIHN0YXR1cyk7CiAJCWlmIChzdGF0dXMgJiBNQ0lfREFUQUNSQ0ZBSUwpCiAJCQlkYXRhLT5lcnJvciA9IC1FSUxTRVE7CiAJCWVsc2UgaWYgKHN0YXR1cyAmIE1DSV9EQVRBVElNRU9VVCkKQEAgLTMwNyw3ICszMTcsNyBAQAogCiAJc3RhdHVzID0gcmVhZGwoYmFzZSArIE1NQ0lTVEFUVVMpOwogCi0JREJHKGhvc3QsICJpcnExICUwOHhcbiIsIHN0YXR1cyk7CisJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJpcnExIChwaW8pICUwOHhcbiIsIHN0YXR1cyk7CiAKIAlkbyB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00MDEsNyArNDExLDcgQEAKIAkJc3RhdHVzICY9IHJlYWRsKGhvc3QtPmJhc2UgKyBNTUNJTUFTSzApOwogCQl3cml0ZWwoc3RhdHVzLCBob3N0LT5iYXNlICsgTU1DSUNMRUFSKTsKIAotCQlEQkcoaG9zdCwgImlycTAgJTA4eFxuIiwgc3RhdHVzKTsKKwkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJpcnEwIChkYXRhK2NtZCkgJTA4eFxuIiwgc3RhdHVzKTsKIAogCQlkYXRhID0gaG9zdC0+ZGF0YTsKIAkJaWYgKHN0YXR1cyAmIChNQ0lfREFUQUNSQ0ZBSUx8TUNJX0RBVEFUSU1FT1VUfE1DSV9UWFVOREVSUlVOfApAQCAtNDI4LDggKzQzOCw4IEBACiAJV0FSTl9PTihob3N0LT5tcnEgIT0gTlVMTCk7CiAKIAlpZiAobXJxLT5kYXRhICYmICFpc19wb3dlcl9vZl8yKG1ycS0+ZGF0YS0+Ymxrc3opKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuc3VwcG9ydGVkIGJsb2NrIHNpemUgKCVkIGJ5dGVzKVxuIiwKLQkJCW1tY19ob3N0bmFtZShtbWMpLCBtcnEtPmRhdGEtPmJsa3N6KTsKKwkJZGV2X2VycihtbWNfZGV2KG1tYyksICJ1bnN1cHBvcnRlZCBibG9jayBzaXplICglZCBieXRlcylcbiIsCisJCQltcnEtPmRhdGEtPmJsa3N6KTsKIAkJbXJxLT5jbWQtPmVycm9yID0gLUVJTlZBTDsKIAkJbW1jX3JlcXVlc3RfZG9uZShtbWMsIG1ycSk7CiAJCXJldHVybjsKQEAgLTU4Miw4ICs1OTIsOCBAQAogCiAJaG9zdC0+aHdfZGVzaWduZXIgPSBhbWJhX21hbmYoZGV2KTsKIAlob3N0LT5od19yZXZpc2lvbiA9IGFtYmFfcmV2KGRldik7Ci0JREJHKGhvc3QsICJkZXNpZ25lciBJRCA9IDB4JTAyeFxuIiwgaG9zdC0+aHdfZGVzaWduZXIpOwotCURCRyhob3N0LCAicmV2aXNpb24gPSAweCUwMXhcbiIsIGhvc3QtPmh3X3JldmlzaW9uKTsKKwlkZXZfZGJnKG1tY19kZXYobW1jKSwgImRlc2lnbmVyIElEID0gMHglMDJ4XG4iLCBob3N0LT5od19kZXNpZ25lcik7CisJZGV2X2RiZyhtbWNfZGV2KG1tYyksICJyZXZpc2lvbiA9IDB4JTAxeFxuIiwgaG9zdC0+aHdfcmV2aXNpb24pOwogCiAJaG9zdC0+Y2xrID0gY2xrX2dldCgmZGV2LT5kZXYsIE5VTEwpOwogCWlmIChJU19FUlIoaG9zdC0+Y2xrKSkgewpAQCAtNjA4LDcgKzYxOCw4IEBACiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBjbGtfZGlzYWJsZTsKIAkJaG9zdC0+bWNsayA9IGNsa19nZXRfcmF0ZShob3N0LT5jbGspOwotCQlEQkcoaG9zdCwgImV2ZW50dWFsIG1jbGsgcmF0ZTogJXUgSHpcbiIsIGhvc3QtPm1jbGspOworCQlkZXZfZGJnKG1tY19kZXYobW1jKSwgImV2ZW50dWFsIG1jbGsgcmF0ZTogJXUgSHpcbiIsCisJCQlob3N0LT5tY2xrKTsKIAl9CiAJaG9zdC0+YmFzZSA9IGlvcmVtYXAoZGV2LT5yZXMuc3RhcnQsIHJlc291cmNlX3NpemUoJmRldi0+cmVzKSk7CiAJaWYgKCFob3N0LT5iYXNlKSB7CkBAIC02MTksNiArNjMwLDggQEAKIAltbWMtPm9wcyA9ICZtbWNpX29wczsKIAltbWMtPmZfbWluID0gKGhvc3QtPm1jbGsgKyA1MTEpIC8gNTEyOwogCW1tYy0+Zl9tYXggPSBtaW4oaG9zdC0+bWNsaywgZm1heCk7CisJZGV2X2RiZyhtbWNfZGV2KG1tYyksICJjbG9ja2luZyBibG9jayBhdCAldSBIelxuIiwgbW1jLT5mX21heCk7CisKICNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCiAJLyogSWYgd2UncmUgdXNpbmcgdGhlIHJlZ3VsYXRvciBmcmFtZXdvcmssIHRyeSB0byBmZXRjaCBhIHJlZ3VsYXRvciAqLwogCWhvc3QtPnZjYyA9IHJlZ3VsYXRvcl9nZXQoJmRldi0+ZGV2LCAidm1tYyIpOwpAQCAtNzEyLDcgKzcyNSw3IEBACiAKIAltbWNfYWRkX2hvc3QobW1jKTsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBNTUNJIHJldiAleCBjZmcgJTAyeCBhdCAweCUwMTZsbHggaXJxICVkLCVkXG4iLAorCWRldl9pbmZvKCZkZXYtPmRldiwgIiVzOiBNTUNJIHJldiAleCBjZmcgJTAyeCBhdCAweCUwMTZsbHggaXJxICVkLCVkXG4iLAogCQltbWNfaG9zdG5hbWUobW1jKSwgYW1iYV9yZXYoZGV2KSwgYW1iYV9jb25maWcoZGV2KSwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylkZXYtPnJlcy5zdGFydCwgZGV2LT5pcnFbMF0sIGRldi0+aXJxWzFdKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCmluZGV4IDJkZTBjYzguLjJiYjAzYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKQEAgLTI1MSwxMiArMjUxLDYgQEAKIAloZWxwCiAJICBTdXBwb3J0IGZvciBmbGFzaCBjaGlwcyBvbiBORVR0ZWwvU2VjdXJlRWRnZS9TbmFwR2VhciBib2FyZHMuCiAKLWNvbmZpZyBNVERfQUxDSEVNWQotCXRyaXN0YXRlICJBTUQgQWxjaGVteSBQYjF4eHgvRGIxeHh4L1JESyBNVEQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPQ19BVTFYMDAgJiYgTVREX1BBUlRJVElPTlMgJiYgTVREX0NGSQotCWhlbHAKLQkgIEZsYXNoIG1lbW9yeSBhY2Nlc3Mgb24gQU1EIEFsY2hlbXkgUGIvRGIvUkRLIFJlZmVyZW5jZSBCb2FyZHMKLQogY29uZmlnIE1URF9ESUxORVRQQwogCXRyaXN0YXRlICJDRkkgRmxhc2ggZGV2aWNlIG1hcHBlZCBvbiBESUwvTmV0IFBDIgogCWRlcGVuZHMgb24gWDg2ICYmIE1URF9DT05DQVQgJiYgTVREX1BBUlRJVElPTlMgJiYgTVREX0NGSV9JTlRFTEVYVCAmJiBCUk9LRU4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCmluZGV4IGNlMzE1MjEuLmE0NDkxOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQpAQCAtNDAsNyArNDAsNiBAQAogb2JqLSQoQ09ORklHX01URF9EQk9YMikJCSs9IGRib3gyLWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfU09MVVRJT05FTkdJTkUpKz0gc29sdXRpb25lbmdpbmUubwogb2JqLSQoQ09ORklHX01URF9QQ0kpCQkrPSBwY2kubwotb2JqLSQoQ09ORklHX01URF9BTENIRU1ZKSAgICAgICArPSBhbGNoZW15LWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfQVVUQ1BVMTIpCSs9IGF1dGNwdTEyLW52cmFtLm8KIG9iai0kKENPTkZJR19NVERfRURCNzMxMikJKz0gZWRiNzMxMi5vCiBvYmotJChDT05GSUdfTVREX0lNUEE3KQkJKz0gaW1wYTcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9hbGNoZW15LWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL2FsY2hlbXktZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ1YWQ0Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2FsY2hlbXktZmxhc2guYworKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKgotICogRmxhc2ggbWVtb3J5IGFjY2VzcyBvbiBBTUQgQWxjaGVteSBldmFsdWF0aW9uIGJvYXJkcwotICoKLSAqIChDKSAyMDAzLCAyMDA0IFBldGUgUG9wb3YgPHBwb3BvdkBlbWJlZGRlZGFsbGV5LmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotI2lmZGVmIENPTkZJR19NSVBTX1BCMTAwMAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiUGIxMDAwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDA4MDAwMDAgLyogOE1CICovCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRIIDQgLyogMzItYml0cyAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19QQjE1MDAKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIlBiMTUwMCBGbGFzaCIKLSNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRSAweDA0MDAwMDAwIC8qIDY0TUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggNCAvKiAzMi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX1BCMTEwMAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiUGIxMTAwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDQwMDAwMDAgLyogNjRNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCA0IC8qIDMyLWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxNTUwCi0jZGVmaW5lIEJPQVJEX01BUF9OQU1FICJQYjE1NTAgRmxhc2giCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUgMHgwODAwMDAwMCAvKiAxMjhNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCA0IC8qIDMyLWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxMjAwCi0jZGVmaW5lIEJPQVJEX01BUF9OQU1FICJQYjEyMDAgRmxhc2giCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUgMHgwODAwMDAwMCAvKiAxMjhNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCAyIC8qIDE2LWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfREIxMDAwCi0jZGVmaW5lIEJPQVJEX01BUF9OQU1FICJEYjEwMDAgRmxhc2giCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUgMHgwMjAwMDAwMCAvKiAzMk1CICovCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRIIDQgLyogMzItYml0cyAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19EQjE1MDAKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIkRiMTUwMCBGbGFzaCIKLSNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRSAweDAyMDAwMDAwIC8qIDMyTUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggNCAvKiAzMi1iaXRzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NSVBTX0RCMTEwMAotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiRGIxMTAwIEZsYXNoIgotI2RlZmluZSBCT0FSRF9GTEFTSF9TSVpFIDB4MDIwMDAwMDAgLyogMzJNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCA0IC8qIDMyLWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfREIxNTUwCi0jZGVmaW5lIEJPQVJEX01BUF9OQU1FICJEYjE1NTAgRmxhc2giCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUgMHgwODAwMDAwMCAvKiAxMjhNQiAqLwotI2RlZmluZSBCT0FSRF9GTEFTSF9XSURUSCA0IC8qIDMyLWJpdHMgKi8KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUFNfREIxMjAwCi0jZGVmaW5lIEJPQVJEX01BUF9OQU1FICJEYjEyMDAgRmxhc2giCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUgMHgwNDAwMDAwMCAvKiA2NE1CICovCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRIIDIgLyogMTYtYml0cyAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19CT1NQT1JVUwotI2RlZmluZSBCT0FSRF9NQVBfTkFNRSAiQm9zcG9ydXMgRmxhc2giCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1NJWkUgMHgwMTAwMDAwMCAvKiAxNk1CICovCi0jZGVmaW5lIEJPQVJEX0ZMQVNIX1dJRFRIIDIgLyogMTYtYml0cyAqLwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUlQU19NSVJBR0UKLSNkZWZpbmUgQk9BUkRfTUFQX05BTUUgIk1pcmFnZSBGbGFzaCIKLSNkZWZpbmUgQk9BUkRfRkxBU0hfU0laRSAweDA0MDAwMDAwIC8qIDY0TUIgKi8KLSNkZWZpbmUgQk9BUkRfRkxBU0hfV0lEVEggNCAvKiAzMi1iaXRzICovCi0jZGVmaW5lIFVTRV9MT0NBTF9BQ0NFU1NPUlMgLyogd2h5PyAqLwotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2luZm8gYWxjaGVteV9tYXAgPSB7Ci0JLm5hbWUgPQlCT0FSRF9NQVBfTkFNRSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBhbGNoZW15X3BhcnRpdGlvbnNbXSA9IHsKLSAgICAgICAgewotICAgICAgICAgICAgICAgIC5uYW1lID0gIlVzZXIgRlMiLAotICAgICAgICAgICAgICAgIC5zaXplID0gQk9BUkRfRkxBU0hfU0laRSAtIDB4MDA0MDAwMDAsCi0gICAgICAgICAgICAgICAgLm9mZnNldCA9IDB4MDAwMDAwMAotICAgICAgICB9LHsKLSAgICAgICAgICAgICAgICAubmFtZSA9ICJZQU1PTiIsCi0gICAgICAgICAgICAgICAgLnNpemUgPSAweDAxMDAwMDAsCi0JCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCi0gICAgICAgICAgICAgICAgLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFCi0gICAgICAgIH0sewotICAgICAgICAgICAgICAgIC5uYW1lID0gInJhdyBrZXJuZWwiLAotCQkuc2l6ZSA9ICgweDMwMDAwMCAtIDB4NDAwMDApLCAvKiBsYXN0IDI1NktCIGlzIHlhbW9uIGVudiAqLwotCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAotICAgICAgICB9Ci19OwotCi1zdGF0aWMgc3RydWN0IG10ZF9pbmZvICpteW10ZDsKLQotc3RhdGljIGludCBfX2luaXQgYWxjaGVteV9tdGRfaW5pdCh2b2lkKQotewotCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKLQlpbnQgbmJfcGFydHMgPSAwOwotCXVuc2lnbmVkIGxvbmcgd2luZG93X2FkZHI7Ci0JdW5zaWduZWQgbG9uZyB3aW5kb3dfc2l6ZTsKLQotCS8qIERlZmF1bHQgZmxhc2ggYnVzd2lkdGggKi8KLQlhbGNoZW15X21hcC5iYW5rd2lkdGggPSBCT0FSRF9GTEFTSF9XSURUSDsKLQotCXdpbmRvd19hZGRyID0gMHgyMDAwMDAwMCAtIEJPQVJEX0ZMQVNIX1NJWkU7Ci0Jd2luZG93X3NpemUgPSBCT0FSRF9GTEFTSF9TSVpFOwotCi0JLyoKLQkgKiBTdGF0aWMgcGFydGl0aW9uIGRlZmluaXRpb24gc2VsZWN0aW9uCi0JICovCi0JcGFydHMgPSBhbGNoZW15X3BhcnRpdGlvbnM7Ci0JbmJfcGFydHMgPSBBUlJBWV9TSVpFKGFsY2hlbXlfcGFydGl0aW9ucyk7Ci0JYWxjaGVteV9tYXAuc2l6ZSA9IHdpbmRvd19zaXplOwotCi0JLyoKLQkgKiBOb3cgbGV0J3MgcHJvYmUgZm9yIHRoZSBhY3R1YWwgZmxhc2guICBEbyBpdCBoZXJlIHNpbmNlCi0JICogc3BlY2lmaWMgbWFjaGluZSBzZXR0aW5ncyBtaWdodCBoYXZlIGJlZW4gc2V0IGFib3ZlLgotCSAqLwotCXByaW50ayhLRVJOX05PVElDRSBCT0FSRF9NQVBfTkFNRSAiOiBwcm9iaW5nICVkLWJpdCBmbGFzaCBidXNcbiIsCi0JCQlhbGNoZW15X21hcC5iYW5rd2lkdGgqOCk7Ci0JYWxjaGVteV9tYXAudmlydCA9IGlvcmVtYXAod2luZG93X2FkZHIsIHdpbmRvd19zaXplKTsKLQlteW10ZCA9IGRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgJmFsY2hlbXlfbWFwKTsKLQlpZiAoIW15bXRkKSB7Ci0JCWlvdW5tYXAoYWxjaGVteV9tYXAudmlydCk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCW15bXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwotCi0JYWRkX210ZF9wYXJ0aXRpb25zKG15bXRkLCBwYXJ0cywgbmJfcGFydHMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYWxjaGVteV9tdGRfY2xlYW51cCh2b2lkKQotewotCWlmIChteW10ZCkgewotCQlkZWxfbXRkX3BhcnRpdGlvbnMobXltdGQpOwotCQltYXBfZGVzdHJveShteW10ZCk7Ci0JCWlvdW5tYXAoYWxjaGVteV9tYXAudmlydCk7Ci0JfQotfQotCi1tb2R1bGVfaW5pdChhbGNoZW15X210ZF9pbml0KTsKLW1vZHVsZV9leGl0KGFsY2hlbXlfbXRkX2NsZWFudXApOwotCi1NT0RVTEVfQVVUSE9SKCJFbWJlZGRlZCBBbGxleSBTb2x1dGlvbnMsIEluYyIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKEJPQVJEX01BUF9OQU1FICIgTVREIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCmluZGV4IDY3N2NkNTMuLmJiNjQ2NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKQEAgLTQ1NywxMCArNDU3LDEwIEBACiAKIGNvbmZpZyBNVERfTkFORF9TSF9GTENUTAogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBOQU5EIG9uIFJlbmVzYXMgU3VwZXJIIEZMQ1RMIgotCWRlcGVuZHMgb24gTVREX05BTkQgJiYgU1VQRVJIICYmIENQVV9TVUJUWVBFX1NINzcyMworCWRlcGVuZHMgb24gTVREX05BTkQgJiYgU1VQRVJICiAJaGVscAogCSAgU2V2ZXJhbCBSZW5lc2FzIFN1cGVySCBDUFUgaGFzIEZMQ1RMLiBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQKLQkgIGZvciBOQU5EIEZsYXNoIHVzaW5nIEZMQ1RMLiBUaGlzIGRyaXZlciBzdXBwb3J0IFNINzcyMy4KKwkgIGZvciBOQU5EIEZsYXNoIHVzaW5nIEZMQ1RMLgogCiBjb25maWcgTVREX05BTkRfREFWSU5DSQogICAgICAgICB0cmlzdGF0ZSAiU3VwcG9ydCBOQU5EIG9uIERhVmluY2kgU29DIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jCmluZGV4IDkyYzMzNGYuLjQzZDQ2ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvYXUxNTUwbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F1MTU1MG5kLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHguaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgogCiAvKgogICogTVREIHN0cnVjdHVyZSBmb3IgTkFORCBjb250cm9sbGVyCkBAIC00NzUsNyArNDc2LDggQEAKIAkvKiBzZXQgZ3BpbzIwNiBoaWdoICovCiAJYXVfd3JpdGVsKGF1X3JlYWRsKEdQSU8yX0RJUikgJiB+KDEgPDwgNiksIEdQSU8yX0RJUik7CiAKLQlib290X3N3YXBib290ID0gKGF1X3JlYWRsKE1FTV9TVFNUQVQpICYgKDB4NyA8PCAxKSkgfCAoKGJjc3ItPnN0YXR1cyA+PiA2KSAmIDB4MSk7CisJYm9vdF9zd2FwYm9vdCA9IChhdV9yZWFkbChNRU1fU1RTVEFUKSAmICgweDcgPDwgMSkpIHwgKChiY3NyX3JlYWQoQkNTUl9TVEFUVVMpID4+IDYpICYgMHgxKTsKKwogCXN3aXRjaCAoYm9vdF9zd2FwYm9vdCkgewogCWNhc2UgMDoKIAljYXNlIDI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3NoX2ZsY3RsLmMgYi9kcml2ZXJzL210ZC9uYW5kL3NoX2ZsY3RsLmMKaW5kZXggMDJiZWYyMS4uMTg0MmRmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9zaF9mbGN0bC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvc2hfZmxjdGwuYwpAQCAtMSwxMCArMSwxMCBAQAogLyoKICAqIFN1cGVySCBGTENUTCBuYW5kIGNvbnRyb2xsZXIKICAqCi0gKiBDb3B5cmlnaHQgwqkgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgotICogQ29weXJpZ2h0IMKpIDIwMDggQXRvbSBDcmVhdGUgRW5naW5lZXJpbmcgQ28uLCBMdGQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBBdG9tIENyZWF0ZSBFbmdpbmVlcmluZyBDby4sIEx0ZC4KICAqCi0gKiBCYXNlZCBvbiBmc2xfZWxiY19uYW5kLmMsIENvcHlyaWdodCDCqSAyMDA2LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IKKyAqIEJhc2VkIG9uIGZzbF9lbGJjX25hbmQuYywgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTc1LDYgKzc1LDExIEBACiAJd3JpdGViKFRSU1RSVCwgRkxUUkNSKGZsY3RsKSk7CiB9CiAKK3N0YXRpYyB2b2lkIHRpbWVvdXRfZXJyb3Ioc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgY29uc3QgY2hhciAqc3RyKQoreworCWRldl9lcnIoJmZsY3RsLT5wZGV2LT5kZXYsICJUaW1lb3V0IG9jY3VyZWQgaW4gJXNcbiIsIHN0cik7Cit9CisKIHN0YXRpYyB2b2lkIHdhaXRfY29tcGxldGlvbihzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsKQogewogCXVpbnQzMl90IHRpbWVvdXQgPSBMT09QX1RJTUVPVVRfTUFYOwpAQCAtODcsNyArOTIsNyBAQAogCQl1ZGVsYXkoMSk7CiAJfQogCi0JcHJpbnRrKEtFUk5fRVJSICJ3YWl0X2NvbXBsZXRpb24oKTogVGltZW91dCBvY2N1cmVkIFxuIik7CisJdGltZW91dF9lcnJvcihmbGN0bCwgX19mdW5jX18pOwogCXdyaXRlYigweDAsIEZMVFJDUihmbGN0bCkpOwogfQogCkBAIC0xMDAsNiArMTA1LDggQEAKIAkJYWRkciA9IHBhZ2VfYWRkcjsJLyogRVJBU0UxICovCiAJfSBlbHNlIGlmIChwYWdlX2FkZHIgIT0gLTEpIHsKIAkJLyogU0VRSU4sIFJFQUQwLCBldGMuLiAqLworCQlpZiAoZmxjdGwtPmNoaXAub3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpCisJCQljb2x1bW4gPj49IDE7CiAJCWlmIChmbGN0bC0+cGFnZV9zaXplKSB7CiAJCQlhZGRyID0gY29sdW1uICYgMHgwRkZGOwogCQkJYWRkciB8PSAocGFnZV9hZGRyICYgMHhmZikgPDwgMTY7CkBAIC0xMzIsNyArMTM5LDcgQEAKIAkJCXJldHVybjsKIAkJdWRlbGF5KDEpOwogCX0KLQlwcmludGsoS0VSTl9FUlIgIndhaXRfcmZpZm9fcmVhZHkoKTogVGltZW91dCBvY2N1cmVkIFxuIik7CisJdGltZW91dF9lcnJvcihmbGN0bCwgX19mdW5jX18pOwogfQogCiBzdGF0aWMgdm9pZCB3YWl0X3dmaWZvX3JlYWR5KHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCkBAIC0xNDYsNyArMTUzLDcgQEAKIAkJCXJldHVybjsKIAkJdWRlbGF5KDEpOwogCX0KLQlwcmludGsoS0VSTl9FUlIgIndhaXRfd2ZpZm9fcmVhZHkoKTogVGltZW91dCBvY2N1cmVkIFxuIik7CisJdGltZW91dF9lcnJvcihmbGN0bCwgX19mdW5jX18pOwogfQogCiBzdGF0aWMgaW50IHdhaXRfcmVjZmlmb19yZWFkeShzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsLCBpbnQgc2VjdG9yX251bWJlcikKQEAgLTE5OCw3ICsyMDUsNyBAQAogCQl3cml0ZWwoMCwgRkw0RUNDQ1IoZmxjdGwpKTsKIAl9CiAKLQlwcmludGsoS0VSTl9FUlIgIndhaXRfcmVjZmlmb19yZWFkeSgpOiBUaW1lb3V0IG9jY3VyZWQgXG4iKTsKKwl0aW1lb3V0X2Vycm9yKGZsY3RsLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIDE7CS8qIHRpbWVvdXQgKi8KIH0KIApAQCAtMjE0LDcgKzIyMSw3IEBACiAJCQlyZXR1cm47CiAJCXVkZWxheSgxKTsKIAl9Ci0JcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3dlY2ZpZm9fcmVhZHkoKTogVGltZW91dCBvY2N1cmVkIFxuIik7CisJdGltZW91dF9lcnJvcihmbGN0bCwgX19mdW5jX18pOwogfQogCiBzdGF0aWMgdm9pZCByZWFkX2RhdGFyZWcoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgaW50IG9mZnNldCkKQEAgLTI3NSw3ICsyODIsNyBAQAogc3RhdGljIHZvaWQgc2V0X2NtZF9yZWdzKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50MzJfdCBjbWQsIHVpbnQzMl90IGZsY21jZHJfdmFsKQogewogCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKLQl1aW50MzJfdCBmbGNtbmNyX3ZhbCA9IHJlYWRsKEZMQ01OQ1IoZmxjdGwpKTsKKwl1aW50MzJfdCBmbGNtbmNyX3ZhbCA9IHJlYWRsKEZMQ01OQ1IoZmxjdGwpKSAmIH5TRUxfMTZCSVQ7CiAJdWludDMyX3QgZmxjbWRjcl92YWwsIGFkZHJfbGVuX2J5dGVzID0gMDsKIAogCS8qIFNldCBTTkFORCBiaXQgaWYgcGFnZSBzaXplIGlzIDIwNDhieXRlICovCkBAIC0yOTcsNiArMzA0LDggQEAKIAljYXNlIE5BTkRfQ01EX1JFQURPT0I6CiAJCWFkZHJfbGVuX2J5dGVzID0gZmxjdGwtPnJ3X0FEUkNOVDsKIAkJZmxjbWRjcl92YWwgfD0gQ0RTUkNfRTsKKwkJaWYgKGZsY3RsLT5jaGlwLm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQorCQkJZmxjbW5jcl92YWwgfD0gU0VMXzE2QklUOwogCQlicmVhazsKIAljYXNlIE5BTkRfQ01EX1NFUUlOOgogCQkvKiBUaGlzIGNhc2UgaXMgdGhhdCBjbWQgaXMgUkVBRDAgb3IgUkVBRDEgb3IgUkVBRDAwICovCkBAIC0zMDUsNiArMzE0LDggQEAKIAljYXNlIE5BTkRfQ01EX1BBR0VQUk9HOgogCQlhZGRyX2xlbl9ieXRlcyA9IGZsY3RsLT5yd19BRFJDTlQ7CiAJCWZsY21kY3JfdmFsIHw9IERPQ01EMl9FIHwgQ0RTUkNfRSB8IFNFTFJXOworCQlpZiAoZmxjdGwtPmNoaXAub3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpCisJCQlmbGNtbmNyX3ZhbCB8PSBTRUxfMTZCSVQ7CiAJCWJyZWFrOwogCWNhc2UgTkFORF9DTURfUkVBRElEOgogCQlmbGNtbmNyX3ZhbCAmPSB+U05BTkRfRTsKQEAgLTUyMyw2ICs1MzQsOCBAQAogCQlzZXRfYWRkcihtdGQsIDAsIHBhZ2VfYWRkcik7CiAKIAkJZmxjdGwtPnJlYWRfYnl0ZXMgPSBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZTsKKwkJaWYgKGZsY3RsLT5jaGlwLm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQorCQkJY29sdW1uID4+PSAxOwogCQlmbGN0bC0+aW5kZXggKz0gY29sdW1uOwogCQlnb3RvIHJlYWRfbm9ybWFsX2V4aXQ7CiAKQEAgLTY4Niw2ICs2OTksMTggQEAKIAlyZXR1cm4gZGF0YTsKIH0KIAorc3RhdGljIHVpbnQxNl90IGZsY3RsX3JlYWRfd29yZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKyAgICAgICBzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisgICAgICAgaW50IGluZGV4ID0gZmxjdGwtPmluZGV4OworICAgICAgIHVpbnQxNl90IGRhdGE7CisgICAgICAgdWludDE2X3QgKmJ1ZiA9ICh1aW50MTZfdCAqKSZmbGN0bC0+ZG9uZV9idWZmW2luZGV4XTsKKworICAgICAgIGRhdGEgPSAqYnVmOworICAgICAgIGZsY3RsLT5pbmRleCArPSAyOworICAgICAgIHJldHVybiBkYXRhOworfQorCiBzdGF0aWMgdm9pZCBmbGN0bF9yZWFkX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBpbnQgbGVuKQogewogCWludCBpOwpAQCAtNzY5LDM4ICs3OTQsMzYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgZmxjdGxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGZsY3RsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IHNoX2ZsY3RsICpmbGN0bDsKIAlzdHJ1Y3QgbXRkX2luZm8gKmZsY3RsX210ZDsKIAlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kOwogCXN0cnVjdCBzaF9mbGN0bF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKLQlpbnQgcmV0OworCWludCByZXQgPSAtRU5YSU87CiAKIAlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWlmIChwZGF0YSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2hfZmxjdGwgcGxhdGZvcm1fZGF0YSBub3QgZm91bmQuXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGEgZGVmaW5lZFxuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWZsY3RsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNoX2ZsY3RsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmbGN0bCkgewotCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBOQU5EIE1URCBkZXYgc3RydWN0dXJlLlxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBkcml2ZXIgZGF0YVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVzb3VyY2Ugbm90IGZvdW5kLlxuIiwgX19mdW5jX18pOwotCQlyZXQgPSAtRU5PREVWOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IEkvTyBtZW1vcnlcbiIpOwogCQlnb3RvIGVycjsKIAl9CiAKLQlmbGN0bC0+cmVnID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlmbGN0bC0+cmVnID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmIChmbGN0bC0+cmVnID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW9yZW1hcCBlcnJvci5cbiIsIF9fZnVuY19fKTsKLQkJcmV0ID0gLUVOT01FTTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlbWFwIEkvTyBtZW1vcnlcbiIpOwogCQlnb3RvIGVycjsKIAl9CiAKQEAgLTgwOCw2ICs4MzEsNyBAQAogCWZsY3RsX210ZCA9ICZmbGN0bC0+bXRkOwogCW5hbmQgPSAmZmxjdGwtPmNoaXA7CiAJZmxjdGxfbXRkLT5wcml2ID0gbmFuZDsKKwlmbGN0bC0+cGRldiA9IHBkZXY7CiAJZmxjdGwtPmh3ZWNjID0gcGRhdGEtPmhhc19od2VjYzsKIAogCWZsY3RsX3JlZ2lzdGVyX2luaXQoZmxjdGwsIHBkYXRhLT5mbGNtbmNyX3ZhbCk7CkBAIC04MjUsNiArODQ5LDExIEBACiAJbmFuZC0+c2VsZWN0X2NoaXAgPSBmbGN0bF9zZWxlY3RfY2hpcDsKIAluYW5kLT5jbWRmdW5jID0gZmxjdGxfY21kZnVuYzsKIAorCWlmIChwZGF0YS0+ZmxjbW5jcl92YWwgJiBTRUxfMTZCSVQpIHsKKwkJbmFuZC0+b3B0aW9ucyB8PSBOQU5EX0JVU1dJRFRIXzE2OworCQluYW5kLT5yZWFkX3dvcmQgPSBmbGN0bF9yZWFkX3dvcmQ7CisJfQorCiAJcmV0ID0gbmFuZF9zY2FuX2lkZW50KGZsY3RsX210ZCwgMSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CkBAIC04NDYsNyArODc1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBmbGN0bF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IGZsY3RsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCmluZGV4IDZiYWMwNDYuLjZlNWE2OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CkBAIC02Myw2ICs2NCw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCiAjaW5jbHVkZSA8YXUxMDAwLmg+CisjaW5jbHVkZSA8YXUxeHh4X2V0aC5oPgogI2luY2x1ZGUgPHByb20uaD4KIAogI2luY2x1ZGUgImF1MTAwMF9ldGguaCIKQEAgLTExMiwxNSArMTE0LDE1IEBACiAgKgogICogUEhZIGRldGVjdGlvbiBhbGdvcml0aG0KICAqCi0gKiBJZiBBVTFYWFhfUEhZX1NUQVRJQ19DT05GSUcgaXMgdW5kZWZpbmVkLCB0aGUgUEhZIHNldHVwIGlzCisgKiBJZiBwaHlfc3RhdGljX2NvbmZpZyBpcyB1bmRlZmluZWQsIHRoZSBQSFkgc2V0dXAgaXMKICAqIGF1dG9kZXRlY3RlZDoKICAqCiAgKiBtaWlfcHJvYmUoKSBmaXJzdCBzZWFyY2hlcyB0aGUgY3VycmVudCBNQUMncyBNSUkgYnVzIGZvciBhIFBIWSwKLSAqIHNlbGVjdGluZyB0aGUgZmlyc3QgKG9yIGxhc3QsIGlmIEFVMVhYWF9QSFlfU0VBUkNIX0hJR0hFU1RfQUREUiBpcworICogc2VsZWN0aW5nIHRoZSBmaXJzdCAob3IgbGFzdCwgaWYgcGh5X3NlYXJjaF9oaWdoZXN0X2FkZHIgaXMKICAqIGRlZmluZWQpIFBIWSBhZGRyZXNzIG5vdCBhbHJlYWR5IGNsYWltZWQgYnkgYW5vdGhlciBuZXRkZXYuCiAgKgogICogSWYgbm90aGluZyB3YXMgZm91bmQgdGhhdCB3YXkgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSAybmQgZXRoZXJuZXQKLSAqIGNvbnRyb2xsZXIncyBQSFkgYW5kIEFVMVhYWF9QSFkxX1NFQVJDSF9PTl9NQUMwIGlzIGRlZmluZWQsIHRoZW4KKyAqIGNvbnRyb2xsZXIncyBQSFkgYW5kIHBoeTFfc2VhcmNoX21hYzAgaXMgZGVmaW5lZCwgdGhlbgogICogdGhlIGZpcnN0IE1JSSBidXMgaXMgc2VhcmNoZWQgYXMgd2VsbCBmb3IgYW4gdW5jbGFpbWVkIFBIWTsgdGhpcyBpcwogICogbmVlZGVkIGluIGNhc2Ugb2YgYSBkdWFsLVBIWSBhY2Nlc3NpYmxlIG9ubHkgdGhyb3VnaCB0aGUgTUFDMCdzIE1JSQogICogYnVzLgpAQCAtMTI5LDkgKzEzMSw3IEBACiAgKiBjb250cm9sbGVyIGlzIG5vdCByZWdpc3RlcmVkIHRvIHRoZSBuZXR3b3JrIHN1YnN5c3RlbS4KICAqLwogCi0vKiBhdXRvZGV0ZWN0aW9uIGRlZmF1bHRzICovCi0jdW5kZWYgIEFVMVhYWF9QSFlfU0VBUkNIX0hJR0hFU1RfQUREUgotI2RlZmluZSBBVTFYWFhfUEhZMV9TRUFSQ0hfT05fTUFDMAorLyogYXV0b2RldGVjdGlvbiBkZWZhdWx0czogcGh5MV9zZWFyY2hfbWFjMCAqLwogCiAvKiBzdGF0aWMgUEhZIHNldHVwCiAgKgpAQCAtMTQ4LDI5ICsxNDgsNiBAQAogICogc3BlY2lmaWMgaXJxLW1hcAogICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0JPU1BPUlVTKQotLyoKLSAqIE1pY3JlbC9LZW5kaW4gNSBwb3J0IHN3aXRjaCBhdHRhY2hlZCB0byBNQUMwLAotICogTUFDMCBpcyBhc3NvY2lhdGVkIHdpdGggUEhZIGFkZHJlc3MgNSAoPT0gV0FOIHBvcnQpCi0gKiBNQUMxIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IFBIWSwgc2luY2UgaXQncyBjb25uZWN0ZWQgZGlyZWN0bHkKLSAqIHRvIHRoZSBzd2l0Y2guCi0gKiBubyBpbnRlcnJ1cHRzIGFyZSB1c2VkCi0gKi8KLSMgZGVmaW5lIEFVMVhYWF9QSFlfU1RBVElDX0NPTkZJRwotCi0jIGRlZmluZSBBVTFYWFhfUEhZMF9BRERSICA1Ci0jIGRlZmluZSBBVTFYWFhfUEhZMF9CVVNJRCAwCi0jICB1bmRlZiBBVTFYWFhfUEhZMF9JUlEKLQotIyAgdW5kZWYgQVUxWFhYX1BIWTFfQUREUgotIyAgdW5kZWYgQVUxWFhYX1BIWTFfQlVTSUQKLSMgIHVuZGVmIEFVMVhYWF9QSFkxX0lSUQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEFVMVhYWF9QSFkwX0JVU0lEKSAmJiAoQVUxWFhYX1BIWTBfQlVTSUQgPiAwKQotIyBlcnJvciBNQUMwLWFzc29jaWF0ZWQgUEhZIGF0dGFjaGVkIDJuZCBNQUNzIE1JSSBidXMgbm90IHN1cHBvcnRlZCB5ZXQKLSNlbmRpZgotCiBzdGF0aWMgdm9pZCBlbmFibGVfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmb3JjZV9yZXNldCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzkwLDY3ICszNjcsNTUgQEAKIAlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmNvbnN0IGF1cCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IE5VTEw7CiAKLSNpZiBkZWZpbmVkKEFVMVhYWF9QSFlfU1RBVElDX0NPTkZJRykKLQlCVUdfT04oYXVwLT5tYWNfaWQgPCAwIHx8IGF1cC0+bWFjX2lkID4gMSk7CisJaWYgKGF1cC0+cGh5X3N0YXRpY19jb25maWcpIHsKKwkJQlVHX09OKGF1cC0+bWFjX2lkIDwgMCB8fCBhdXAtPm1hY19pZCA+IDEpOwogCi0JaWYoYXVwLT5tYWNfaWQgPT0gMCkgeyAvKiBnZXQgUEhZMCAqLwotIyBpZiBkZWZpbmVkKEFVMVhYWF9QSFkwX0FERFIpCi0JCXBoeWRldiA9IGF1X21hY3NbQVUxWFhYX1BIWTBfQlVTSURdLT5taWlfYnVzLT5waHlfbWFwW0FVMVhYWF9QSFkwX0FERFJdOwotIyBlbHNlCi0JCXByaW50ayAoS0VSTl9JTkZPIERSVl9OQU1FICI6JXM6IHVzaW5nIFBIWS1sZXNzIHNldHVwXG4iLAotCQkJZGV2LT5uYW1lKTsKKwkJaWYgKGF1cC0+cGh5X2FkZHIpCisJCQlwaHlkZXYgPSBhdXAtPm1paV9idXMtPnBoeV9tYXBbYXVwLT5waHlfYWRkcl07CisJCWVsc2UKKwkJCXByaW50ayAoS0VSTl9JTkZPIERSVl9OQU1FICI6JXM6IHVzaW5nIFBIWS1sZXNzIHNldHVwXG4iLAorCQkJCWRldi0+bmFtZSk7CiAJCXJldHVybiAwOwotIyBlbmRpZiAvKiBkZWZpbmVkKEFVMVhYWF9QSFkwX0FERFIpICovCi0JfSBlbHNlIGlmIChhdXAtPm1hY19pZCA9PSAxKSB7IC8qIGdldCBQSFkxICovCi0jIGlmIGRlZmluZWQoQVUxWFhYX1BIWTFfQUREUikKLQkJcGh5ZGV2ID0gYXVfbWFjc1tBVTFYWFhfUEhZMV9CVVNJRF0tPm1paV9idXMtPnBoeV9tYXBbQVUxWFhYX1BIWTFfQUREUl07Ci0jIGVsc2UKLQkJcHJpbnRrIChLRVJOX0lORk8gRFJWX05BTUUgIjolczogdXNpbmcgUEhZLWxlc3Mgc2V0dXBcbiIsCi0JCQlkZXYtPm5hbWUpOwotCQlyZXR1cm4gMDsKLSMgZW5kaWYgLyogZGVmaW5lZChBVTFYWFhfUEhZMV9BRERSKSAqLwotCX0KKwl9IGVsc2UgeworCQlpbnQgcGh5X2FkZHI7CiAKLSNlbHNlIC8qIGRlZmluZWQoQVUxWFhYX1BIWV9TVEFUSUNfQ09ORklHKSAqLwotCWludCBwaHlfYWRkcjsKKwkJLyogZmluZCB0aGUgZmlyc3QgKGxvd2VzdCBhZGRyZXNzKSBQSFkgb24gdGhlIGN1cnJlbnQgTUFDJ3MgTUlJIGJ1cyAqLworCQlmb3IgKHBoeV9hZGRyID0gMDsgcGh5X2FkZHIgPCBQSFlfTUFYX0FERFI7IHBoeV9hZGRyKyspCisJCQlpZiAoYXVwLT5taWlfYnVzLT5waHlfbWFwW3BoeV9hZGRyXSkgeworCQkJCXBoeWRldiA9IGF1cC0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl07CisJCQkJaWYgKCFhdXAtPnBoeV9zZWFyY2hfaGlnaGVzdF9hZGRyKQorCQkJCQlicmVhazsgLyogYnJlYWsgb3V0IHdpdGggZmlyc3Qgb25lIGZvdW5kICovCisJCQl9CiAKLQkvKiBmaW5kIHRoZSBmaXJzdCAobG93ZXN0IGFkZHJlc3MpIFBIWSBvbiB0aGUgY3VycmVudCBNQUMncyBNSUkgYnVzICovCi0JZm9yIChwaHlfYWRkciA9IDA7IHBoeV9hZGRyIDwgUEhZX01BWF9BRERSOyBwaHlfYWRkcisrKQotCQlpZiAoYXVwLT5taWlfYnVzLT5waHlfbWFwW3BoeV9hZGRyXSkgewotCQkJcGh5ZGV2ID0gYXVwLT5taWlfYnVzLT5waHlfbWFwW3BoeV9hZGRyXTsKLSMgaWYgIWRlZmluZWQoQVUxWFhYX1BIWV9TRUFSQ0hfSElHSEVTVF9BRERSKQotCQkJYnJlYWs7IC8qIGJyZWFrIG91dCB3aXRoIGZpcnN0IG9uZSBmb3VuZCAqLwotIyBlbmRpZgotCQl9CisJCWlmIChhdXAtPnBoeTFfc2VhcmNoX21hYzApIHsKKwkJCS8qIHRyeSBoYXJkZXIgdG8gZmluZCBhIFBIWSAqLworCQkJaWYgKCFwaHlkZXYgJiYgKGF1cC0+bWFjX2lkID09IDEpKSB7CisJCQkJLyogbm8gUEhZIGZvdW5kLCBtYXliZSB3ZSBoYXZlIGEgZHVhbCBQSFk/ICovCisJCQkJcHJpbnRrIChLRVJOX0lORk8gRFJWX05BTUUgIjogbm8gUEhZIGZvdW5kIG9uIE1BQzEsICIKKwkJCQkJImxldCdzIHNlZSBpZiBpdCdzIGF0dGFjaGVkIHRvIE1BQzAuLi5cbiIpOwogCi0jIGlmIGRlZmluZWQoQVUxWFhYX1BIWTFfU0VBUkNIX09OX01BQzApCi0JLyogdHJ5IGhhcmRlciB0byBmaW5kIGEgUEhZICovCi0JaWYgKCFwaHlkZXYgJiYgKGF1cC0+bWFjX2lkID09IDEpKSB7Ci0JCS8qIG5vIFBIWSBmb3VuZCwgbWF5YmUgd2UgaGF2ZSBhIGR1YWwgUEhZPyAqLwotCQlwcmludGsgKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiBubyBQSFkgZm91bmQgb24gTUFDMSwgIgotCQkJImxldCdzIHNlZSBpZiBpdCdzIGF0dGFjaGVkIHRvIE1BQzAuLi5cbiIpOworCQkJCS8qIGZpbmQgdGhlIGZpcnN0IChsb3dlc3QgYWRkcmVzcykgbm9uLWF0dGFjaGVkIFBIWSBvbgorCQkJCSAqIHRoZSBNQUMwIE1JSSBidXMgKi8KKwkJCQlmb3IgKHBoeV9hZGRyID0gMDsgcGh5X2FkZHIgPCBQSFlfTUFYX0FERFI7IHBoeV9hZGRyKyspIHsKKwkJCQkJc3RydWN0IHBoeV9kZXZpY2UgKmNvbnN0IHRtcF9waHlkZXYgPQorCQkJCQkJCWF1cC0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl07CiAKLQkJQlVHX09OKCFhdV9tYWNzWzBdKTsKKwkJCQkJaWYgKGF1cC0+bWFjX2lkID09IDEpCisJCQkJCQlicmVhazsKIAotCQkvKiBmaW5kIHRoZSBmaXJzdCAobG93ZXN0IGFkZHJlc3MpIG5vbi1hdHRhY2hlZCBQSFkgb24KLQkJICogdGhlIE1BQzAgTUlJIGJ1cyAqLwotCQlmb3IgKHBoeV9hZGRyID0gMDsgcGh5X2FkZHIgPCBQSFlfTUFYX0FERFI7IHBoeV9hZGRyKyspIHsKLQkJCXN0cnVjdCBwaHlfZGV2aWNlICpjb25zdCB0bXBfcGh5ZGV2ID0KLQkJCQlhdV9tYWNzWzBdLT5taWlfYnVzLT5waHlfbWFwW3BoeV9hZGRyXTsKKwkJCQkJaWYgKCF0bXBfcGh5ZGV2KQorCQkJCQkJY29udGludWU7IC8qIG5vIFBIWSBoZXJlLi4uICovCiAKLQkJCWlmICghdG1wX3BoeWRldikKLQkJCQljb250aW51ZTsgLyogbm8gUEhZIGhlcmUuLi4gKi8KKwkJCQkJaWYgKHRtcF9waHlkZXYtPmF0dGFjaGVkX2RldikKKwkJCQkJCWNvbnRpbnVlOyAvKiBhbHJlYWR5IGNsYWltZWQgYnkgTUFDMCAqLwogCi0JCQlpZiAodG1wX3BoeWRldi0+YXR0YWNoZWRfZGV2KQotCQkJCWNvbnRpbnVlOyAvKiBhbHJlYWR5IGNsYWltZWQgYnkgTUFDMCAqLwotCi0JCQlwaHlkZXYgPSB0bXBfcGh5ZGV2OwotCQkJYnJlYWs7IC8qIGZvdW5kIGl0ICovCisJCQkJCXBoeWRldiA9IHRtcF9waHlkZXY7CisJCQkJCWJyZWFrOyAvKiBmb3VuZCBpdCAqLworCQkJCX0KKwkJCX0KIAkJfQogCX0KLSMgZW5kaWYgLyogZGVmaW5lZChBVTFYWFhfUEhZMV9TRUFSQ0hfT1RIRVJfQlVTKSAqLwogCi0jZW5kaWYgLyogZGVmaW5lZChBVTFYWFhfUEhZX1NUQVRJQ19DT05GSUcpICovCiAJaWYgKCFwaHlkZXYpIHsKIAkJcHJpbnRrIChLRVJOX0VSUiBEUlZfTkFNRSAiOiVzOiBubyBQSFkgZm91bmRcbiIsIGRldi0+bmFtZSk7CiAJCXJldHVybiAtMTsKQEAgLTU3OCwzMSArNTQzLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgewotCXUzMiBiYXNlX2FkZHI7Ci0JdTMyIG1hY2VuX2FkZHI7Ci0JaW50IGlycTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotfSBpZmxpc3RbMl0gPSB7Ci0jaWZkZWYgQ09ORklHX1NPQ19BVTEwMDAKLQl7QVUxMDAwX0VUSDBfQkFTRSwgQVUxMDAwX01BQzBfRU5BQkxFLCBBVTEwMDBfTUFDMF9ETUFfSU5UfSwKLQl7QVUxMDAwX0VUSDFfQkFTRSwgQVUxMDAwX01BQzFfRU5BQkxFLCBBVTEwMDBfTUFDMV9ETUFfSU5UfQotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NPQ19BVTExMDAKLQl7QVUxMTAwX0VUSDBfQkFTRSwgQVUxMTAwX01BQzBfRU5BQkxFLCBBVTExMDBfTUFDMF9ETUFfSU5UfQotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NPQ19BVTE1MDAKLQl7QVUxNTAwX0VUSDBfQkFTRSwgQVUxNTAwX01BQzBfRU5BQkxFLCBBVTE1MDBfTUFDMF9ETUFfSU5UfSwKLQl7QVUxNTAwX0VUSDFfQkFTRSwgQVUxNTAwX01BQzFfRU5BQkxFLCBBVTE1MDBfTUFDMV9ETUFfSU5UfQotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NPQ19BVTE1NTAKLQl7QVUxNTUwX0VUSDBfQkFTRSwgQVUxNTUwX01BQzBfRU5BQkxFLCBBVTE1NTBfTUFDMF9ETUFfSU5UfSwKLQl7QVUxNTUwX0VUSDFfQkFTRSwgQVUxNTUwX01BQzFfRU5BQkxFLCBBVTE1NTBfTUFDMV9ETUFfSU5UfQotI2VuZGlmCi19OwotCi1zdGF0aWMgaW50IG51bV9pZnM7Ci0KIC8qCiAgKiBldGh0b29sIG9wZXJhdGlvbnMKICAqLwpAQCAtNzExLDcgKzY1MSw2IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfcnhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0YXR1cykKIHsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBzID0gJmRldi0+c3RhdHM7CiAKIAlwcy0+cnhfcGFja2V0cysrOwpAQCAtOTY5LDcgKzkwOCw3IEBACiAJfQogCiAJcERCID0gYXVwLT50eF9kYl9pbnVzZVthdXAtPnR4X2hlYWRdOwotCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBwREItPnZhZGRyLCBza2ItPmxlbik7CisJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsICh2b2lkICopcERCLT52YWRkciwgc2tiLT5sZW4pOwogCWlmIChza2ItPmxlbiA8IEVUSF9aTEVOKSB7CiAJCWZvciAoaT1za2ItPmxlbjsgaTxFVEhfWkxFTjsgaSsrKSB7CiAJCQkoKGNoYXIgKilwREItPnZhZGRyKVtpXSA9IDA7CkBAIC0xMDU4LDUzICs5OTcsNTkgQEAKIAkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCiB9OwogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKiBhdTEwMDBfcHJvYmUoaW50IHBvcnRfbnVtKQorc3RhdGljIGludCBfX2RldmluaXQgYXUxMDAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RhdGljIHVuc2lnbmVkIHZlcnNpb25fcHJpbnRlZCA9IDA7CiAJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBOVUxMOworCXN0cnVjdCBhdTEwMDBfZXRoX3BsYXRmb3JtX2RhdGEgKnBkOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwogCWRiX2Rlc3RfdCAqcERCLCAqcERCZnJlZTsKKwlpbnQgaXJxLCBpLCBlcnIgPSAwOworCXN0cnVjdCByZXNvdXJjZSAqYmFzZSwgKm1hY2VuOwogCWNoYXIgZXRoYWRkcls2XTsKLQlpbnQgaXJxLCBpLCBlcnI7Ci0JdTMyIGJhc2UsIG1hY2VuOwogCi0JaWYgKHBvcnRfbnVtID49IE5VTV9FVEhfSU5URVJGQUNFUykKLQkJcmV0dXJuIE5VTEw7CisJYmFzZSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFiYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gcmV0cmlldmUgYmFzZSByZWdpc3RlclxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KIAotCWJhc2UgID0gQ1BIWVNBRERSKGlmbGlzdFtwb3J0X251bV0uYmFzZV9hZGRyICk7Ci0JbWFjZW4gPSBDUEhZU0FERFIoaWZsaXN0W3BvcnRfbnVtXS5tYWNlbl9hZGRyKTsKLQlpcnEgPSBpZmxpc3RbcG9ydF9udW1dLmlycTsKKwltYWNlbiA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJaWYgKCFtYWNlbikgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogZmFpbGVkIHRvIHJldHJpZXZlIE1BQyBFbmFibGUgcmVnaXN0ZXJcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CiAKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbiggYmFzZSwgTUFDX0lPU0laRSwgIkF1MXgwMCBFTkVUIikgfHwKLQkgICAgIXJlcXVlc3RfbWVtX3JlZ2lvbihtYWNlbiwgNCwgIkF1MXgwMCBFTkVUIikpCi0JCXJldHVybiBOVUxMOworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byByZXRyaWV2ZSBJUlFcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CiAKLQlpZiAodmVyc2lvbl9wcmludGVkKysgPT0gMCkKLQkJcHJpbnRrKCIlcyB2ZXJzaW9uICVzICVzXG4iLCBEUlZfTkFNRSwgRFJWX1ZFUlNJT04sIERSVl9BVVRIT1IpOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGJhc2UtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGJhc2UpLCBwZGV2LT5uYW1lKSkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogZmFpbGVkIHRvIHJlcXVlc3QgbWVtb3J5IHJlZ2lvbiBmb3IgYmFzZSByZWdpc3RlcnNcbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKG1hY2VuLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtYWNlbiksIHBkZXYtPm5hbWUpKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gcmVxdWVzdCBtZW1vcnkgcmVnaW9uIGZvciBNQUMgZW5hYmxlIHJlZ2lzdGVyXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVycl9yZXF1ZXN0OworCX0KIAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUpKTsKIAlpZiAoIWRldikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhbGxvY19ldGhlcmRldiBmYWlsZWRcbiIsIERSVl9OQU1FKTsKLQkJcmV0dXJuIE5VTEw7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jOwogCX0KIAotCWRldi0+YmFzZV9hZGRyID0gYmFzZTsKLQlkZXYtPmlycSA9IGlycTsKLQlkZXYtPm5ldGRldl9vcHMgPSAmYXUxMDAwX25ldGRldl9vcHM7Ci0JU0VUX0VUSFRPT0xfT1BTKGRldiwgJmF1MTAwMF9ldGh0b29sX29wcyk7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IEVUSF9UWF9USU1FT1VUOwotCi0JZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JaWYgKGVyciAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBlcnJvciAlZFxuIiwKLQkJCQlEUlZfTkFNRSwgZXJyKTsKLQkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcHJpbnRrKCIlczogQXUxeHgwIEV0aGVybmV0IGZvdW5kIGF0IDB4JXgsIGlycSAlZFxuIiwKLQkJZGV2LT5uYW1lLCBiYXNlLCBpcnEpOwotCisJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCWF1cCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlzcGluX2xvY2tfaW5pdCgmYXVwLT5sb2NrKTsKQEAgLTExMTUsMjEgKzEwNjAsMjkgQEAKIAkJCQkJCShOVU1fVFhfQlVGRlMgKyBOVU1fUlhfQlVGRlMpLAogCQkJCQkJJmF1cC0+ZG1hX2FkZHIsCTApOwogCWlmICghYXVwLT52YWRkcikgewotCQlmcmVlX25ldGRldihkZXYpOwotCQlyZWxlYXNlX21lbV9yZWdpb24oIGJhc2UsIE1BQ19JT1NJWkUpOwotCQlyZWxlYXNlX21lbV9yZWdpb24obWFjZW4sIDQpOwotCQlyZXR1cm4gTlVMTDsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byBhbGxvY2F0ZSBkYXRhIGJ1ZmZlcnNcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl92YWRkcjsKIAl9CiAKIAkvKiBhdXAtPm1hYyBpcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBNQUMncyByZWdpc3RlcnMgKi8KLQlhdXAtPm1hYyA9ICh2b2xhdGlsZSBtYWNfcmVnX3QgKilpZmxpc3RbcG9ydF9udW1dLmJhc2VfYWRkcjsKKwlhdXAtPm1hYyA9ICh2b2xhdGlsZSBtYWNfcmVnX3QgKilpb3JlbWFwX25vY2FjaGUoYmFzZS0+c3RhcnQsIHJlc291cmNlX3NpemUoYmFzZSkpOworCWlmICghYXVwLT5tYWMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byBpb3JlbWFwIE1BQyByZWdpc3RlcnNcbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyX3JlbWFwMTsKKwl9CiAKLQkvKiBTZXR1cCBzb21lIHZhcmlhYmxlcyBmb3IgcXVpY2sgcmVnaXN0ZXIgYWRkcmVzcyBhY2Nlc3MgKi8KLQlhdXAtPmVuYWJsZSA9ICh2b2xhdGlsZSB1MzIgKilpZmxpc3RbcG9ydF9udW1dLm1hY2VuX2FkZHI7Ci0JYXVwLT5tYWNfaWQgPSBwb3J0X251bTsKLQlhdV9tYWNzW3BvcnRfbnVtXSA9IGF1cDsKKyAgICAgICAgLyogU2V0dXAgc29tZSB2YXJpYWJsZXMgZm9yIHF1aWNrIHJlZ2lzdGVyIGFkZHJlc3MgYWNjZXNzICovCisJYXVwLT5lbmFibGUgPSAodm9sYXRpbGUgdTMyICopaW9yZW1hcF9ub2NhY2hlKG1hY2VuLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtYWNlbikpOworCWlmICghYXVwLT5lbmFibGUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGZhaWxlZCB0byBpb3JlbWFwIE1BQyBlbmFibGUgcmVnaXN0ZXJcbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyX3JlbWFwMjsKKwl9CisJYXVwLT5tYWNfaWQgPSBwZGV2LT5pZDsKIAotCWlmIChwb3J0X251bSA9PSAwKSB7CisJaWYgKHBkZXYtPmlkID09IDApIHsKIAkJaWYgKHByb21fZ2V0X2V0aGVybmV0X2FkZHIoZXRoYWRkcikgPT0gMCkKIAkJCW1lbWNweShhdTEwMDBfbWFjX2FkZHIsIGV0aGFkZHIsIHNpemVvZihhdTEwMDBfbWFjX2FkZHIpKTsKIAkJZWxzZSB7CkBAIC0xMTM5LDcgKzEwOTIsNyBAQAogCQl9CiAKIAkJc2V0dXBfaHdfcmluZ3MoYXVwLCBNQUMwX1JYX0RNQV9BRERSLCBNQUMwX1RYX0RNQV9BRERSKTsKLQl9IGVsc2UgaWYgKHBvcnRfbnVtID09IDEpCisJfSBlbHNlIGlmIChwZGV2LT5pZCA9PSAxKQogCQlzZXR1cF9od19yaW5ncyhhdXAsIE1BQzFfUlhfRE1BX0FERFIsIE1BQzFfVFhfRE1BX0FERFIpOwogCiAJLyoKQEAgLTExNDcsMTQgKzExMDAsMzcgQEAKIAkgKiB0byBtYXRjaCB0aG9zZSB0aGF0IGFyZSBwcmludGVkIG9uIHRoZWlyIHN0aWNrZXJzCiAJICovCiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGF1MTAwMF9tYWNfYWRkciwgc2l6ZW9mKGF1MTAwMF9tYWNfYWRkcikpOwotCWRldi0+ZGV2X2FkZHJbNV0gKz0gcG9ydF9udW07CisJZGV2LT5kZXZfYWRkcls1XSArPSBwZGV2LT5pZDsKIAogCSphdXAtPmVuYWJsZSA9IDA7CiAJYXVwLT5tYWNfZW5hYmxlZCA9IDA7CiAKKwlwZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiBubyBwbGF0Zm9ybV9kYXRhIHBhc3NlZCwgUEhZIHNlYXJjaCBvbiBNQUMwXG4iKTsKKwkJYXVwLT5waHkxX3NlYXJjaF9tYWMwID0gMTsKKwl9IGVsc2UgeworCQlhdXAtPnBoeV9zdGF0aWNfY29uZmlnID0gcGQtPnBoeV9zdGF0aWNfY29uZmlnOworCQlhdXAtPnBoeV9zZWFyY2hfaGlnaGVzdF9hZGRyID0gcGQtPnBoeV9zZWFyY2hfaGlnaGVzdF9hZGRyOworCQlhdXAtPnBoeTFfc2VhcmNoX21hYzAgPSBwZC0+cGh5MV9zZWFyY2hfbWFjMDsKKwkJYXVwLT5waHlfYWRkciA9IHBkLT5waHlfYWRkcjsKKwkJYXVwLT5waHlfYnVzaWQgPSBwZC0+cGh5X2J1c2lkOworCQlhdXAtPnBoeV9pcnEgPSBwZC0+cGh5X2lycTsKKwl9CisKKwlpZiAoYXVwLT5waHlfYnVzaWQgJiYgYXVwLT5waHlfYnVzaWQgPiAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBNQUMwLWFzc29jaWF0ZWQgUEhZIGF0dGFjaGVkIDJuZCBNQUNzIE1JSSIKKwkJCQkiYnVzIG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfbWRpb2J1c19hbGxvYzsKKwl9CisKIAlhdXAtPm1paV9idXMgPSBtZGlvYnVzX2FsbG9jKCk7Ci0JaWYgKGF1cC0+bWlpX2J1cyA9PSBOVUxMKQotCQlnb3RvIGVycl9vdXQ7CisJaWYgKGF1cC0+bWlpX2J1cyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gYWxsb2NhdGUgbWRpb2J1cyBzdHJ1Y3R1cmVcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9tZGlvYnVzX2FsbG9jOworCX0KIAogCWF1cC0+bWlpX2J1cy0+cHJpdiA9IGRldjsKIAlhdXAtPm1paV9idXMtPnJlYWQgPSBhdTEwMDBfbWRpb2J1c19yZWFkOwpAQCAtMTE2OCwyNCArMTE0NCwyMCBAQAogCiAJZm9yKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyArK2kpCiAJCWF1cC0+bWlpX2J1cy0+aXJxW2ldID0gUEhZX1BPTEw7Ci0KIAkvKiBpZiBrbm93biwgc2V0IGNvcnJlc3BvbmRpbmcgUEhZIElSUXMgKi8KLSNpZiBkZWZpbmVkKEFVMVhYWF9QSFlfU1RBVElDX0NPTkZJRykKLSMgaWYgZGVmaW5lZChBVTFYWFhfUEhZMF9JUlEpCi0JaWYgKEFVMVhYWF9QSFkwX0JVU0lEID09IGF1cC0+bWFjX2lkKQotCQlhdXAtPm1paV9idXMtPmlycVtBVTFYWFhfUEhZMF9BRERSXSA9IEFVMVhYWF9QSFkwX0lSUTsKLSMgZW5kaWYKLSMgaWYgZGVmaW5lZChBVTFYWFhfUEhZMV9JUlEpCi0JaWYgKEFVMVhYWF9QSFkxX0JVU0lEID09IGF1cC0+bWFjX2lkKQotCQlhdXAtPm1paV9idXMtPmlycVtBVTFYWFhfUEhZMV9BRERSXSA9IEFVMVhYWF9QSFkxX0lSUTsKLSMgZW5kaWYKLSNlbmRpZgotCW1kaW9idXNfcmVnaXN0ZXIoYXVwLT5taWlfYnVzKTsKKwlpZiAoYXVwLT5waHlfc3RhdGljX2NvbmZpZykKKwkJaWYgKGF1cC0+cGh5X2lycSAmJiBhdXAtPnBoeV9idXNpZCA9PSBhdXAtPm1hY19pZCkKKwkJCWF1cC0+bWlpX2J1cy0+aXJxW2F1cC0+cGh5X2FkZHJdID0gYXVwLT5waHlfaXJxOwogCi0JaWYgKG1paV9wcm9iZShkZXYpICE9IDApIHsKLQkJZ290byBlcnJfb3V0OworCWVyciA9IG1kaW9idXNfcmVnaXN0ZXIoYXVwLT5taWlfYnVzKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiIGZhaWxlZCB0byByZWdpc3RlciBNRElPIGJ1c1xuIik7CisJCWdvdG8gZXJyX21kaW9idXNfcmVnOwogCX0KIAorCWlmIChtaWlfcHJvYmUoZGV2KSAhPSAwKQorCQlnb3RvIGVycl9vdXQ7CisKIAlwREJmcmVlID0gTlVMTDsKIAkvKiBzZXR1cCB0aGUgZGF0YSBidWZmZXIgZGVzY3JpcHRvcnMgYW5kIGF0dGFjaCBhIGJ1ZmZlciB0byBlYWNoIG9uZSAqLwogCXBEQiA9IGF1cC0+ZGI7CkBAIC0xMjE2LDE5ICsxMTg4LDM1IEBACiAJCWF1cC0+dHhfZGJfaW51c2VbaV0gPSBwREI7CiAJfQogCisJZGV2LT5iYXNlX2FkZHIgPSBiYXNlLT5zdGFydDsKKwlkZXYtPmlycSA9IGlycTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYXUxMDAwX25ldGRldl9vcHM7CisJU0VUX0VUSFRPT0xfT1BTKGRldiwgJmF1MTAwMF9ldGh0b29sX29wcyk7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IEVUSF9UWF9USU1FT1VUOworCiAJLyoKIAkgKiBUaGUgYm9vdCBjb2RlIHVzZXMgdGhlIGV0aGVybmV0IGNvbnRyb2xsZXIsIHNvIHJlc2V0IGl0IHRvIHN0YXJ0CiAJICogZnJlc2guICBhdTEwMDBfaW5pdCgpIGV4cGVjdHMgdGhhdCB0aGUgZGV2aWNlIGlzIGluIHJlc2V0IHN0YXRlLgogCSAqLwogCXJlc2V0X21hYyhkZXYpOwogCi0JcmV0dXJuIGRldjsKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiJXM6IENhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZy5cbiIsCisJCQkJCWRldi0+bmFtZSk7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlwcmludGsoIiVzOiBBdTF4eDAgRXRoZXJuZXQgZm91bmQgYXQgMHglbHgsIGlycSAlZFxuIiwKKwkJCWRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcpYmFzZS0+c3RhcnQsIGlycSk7CisJaWYgKHZlcnNpb25fcHJpbnRlZCsrID09IDApCisJCXByaW50aygiJXMgdmVyc2lvbiAlcyAlc1xuIiwgRFJWX05BTUUsIERSVl9WRVJTSU9OLCBEUlZfQVVUSE9SKTsKKworCXJldHVybiAwOwogCiBlcnJfb3V0OgotCWlmIChhdXAtPm1paV9idXMgIT0gTlVMTCkgeworCWlmIChhdXAtPm1paV9idXMgIT0gTlVMTCkKIAkJbWRpb2J1c191bnJlZ2lzdGVyKGF1cC0+bWlpX2J1cyk7Ci0JCW1kaW9idXNfZnJlZShhdXAtPm1paV9idXMpOwotCX0KIAogCS8qIGhlcmUgd2Ugc2hvdWxkIGhhdmUgYSB2YWxpZCBkZXYgcGx1cyBhdXAtPiByZWdpc3RlciBhZGRyZXNzZXMKIAkgKiBzbyB3ZSBjYW4gcmVzZXQgdGhlIG1hYyBwcm9wZXJseS4qLwpAQCAtMTI0Miw2NyArMTIzMCw4NCBAQAogCQlpZiAoYXVwLT50eF9kYl9pbnVzZVtpXSkKIAkJCVJlbGVhc2VEQihhdXAsIGF1cC0+dHhfZGJfaW51c2VbaV0pOwogCX0KK2Vycl9tZGlvYnVzX3JlZzoKKwltZGlvYnVzX2ZyZWUoYXVwLT5taWlfYnVzKTsKK2Vycl9tZGlvYnVzX2FsbG9jOgorCWlvdW5tYXAoYXVwLT5lbmFibGUpOworZXJyX3JlbWFwMjoKKwlpb3VubWFwKGF1cC0+bWFjKTsKK2Vycl9yZW1hcDE6CiAJZG1hX2ZyZWVfbm9uY29oZXJlbnQoTlVMTCwgTUFYX0JVRl9TSVpFICogKE5VTV9UWF9CVUZGUyArIE5VTV9SWF9CVUZGUyksCiAJCQkgICAgICh2b2lkICopYXVwLT52YWRkciwgYXVwLT5kbWFfYWRkcik7Ci0JdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKK2Vycl92YWRkcjoKIAlmcmVlX25ldGRldihkZXYpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbiggYmFzZSwgTUFDX0lPU0laRSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKG1hY2VuLCA0KTsKLQlyZXR1cm4gTlVMTDsKK2Vycl9hbGxvYzoKKwlyZWxlYXNlX21lbV9yZWdpb24obWFjZW4tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1hY2VuKSk7CitlcnJfcmVxdWVzdDoKKwlyZWxlYXNlX21lbV9yZWdpb24oYmFzZS0+c3RhcnQsIHJlc291cmNlX3NpemUoYmFzZSkpOworb3V0OgorCXJldHVybiBlcnI7CiB9CiAKLS8qCi0gKiBTZXR1cCB0aGUgYmFzZSBhZGRyZXNzIGFuZCBpbnRlcnJ1cHQgb2YgdGhlIEF1MXh4eCBldGhlcm5ldCBtYWNzCi0gKiBiYXNlZCBvbiBjcHUgdHlwZSBhbmQgd2hldGhlciB0aGUgaW50ZXJmYWNlIGlzIGVuYWJsZWQgaW4gc3lzX3BpbmZ1bmMKLSAqIHJlZ2lzdGVyLiBUaGUgbGFzdCBpbnRlcmZhY2UgaXMgZW5hYmxlZCBpZiBTWVNfUEZfTkkyIChiaXQgNCkgaXMgMC4KLSAqLwotc3RhdGljIGludCBfX2luaXQgYXUxMDAwX2luaXRfbW9kdWxlKHZvaWQpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhdTEwMDBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JaW50IG5pID0gKGludCkoKGF1X3JlYWRsKFNZU19QSU5GVU5DKSAmICh1MzIpKFNZU19QRl9OSTIpKSA+PiA0KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCWludCBpLCBmb3VuZF9vbmUgPSAwOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGk7CisJc3RydWN0IHJlc291cmNlICpiYXNlLCAqbWFjZW47CiAKLQludW1faWZzID0gTlVNX0VUSF9JTlRFUkZBQ0VTIC0gbmk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKLQlmb3IoaSA9IDA7IGkgPCBudW1faWZzOyBpKyspIHsKLQkJZGV2ID0gYXUxMDAwX3Byb2JlKGkpOwotCQlpZmxpc3RbaV0uZGV2ID0gZGV2OwotCQlpZiAoZGV2KQotCQkJZm91bmRfb25lKys7Ci0JfQotCWlmICghZm91bmRfb25lKQotCQlyZXR1cm4gLUVOT0RFVjsKKwl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCW1kaW9idXNfdW5yZWdpc3RlcihhdXAtPm1paV9idXMpOworCW1kaW9idXNfZnJlZShhdXAtPm1paV9idXMpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9ETUE7IGkrKykKKwkJaWYgKGF1cC0+cnhfZGJfaW51c2VbaV0pCisJCQlSZWxlYXNlREIoYXVwLCBhdXAtPnJ4X2RiX2ludXNlW2ldKTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fVFhfRE1BOyBpKyspCisJCWlmIChhdXAtPnR4X2RiX2ludXNlW2ldKQorCQkJUmVsZWFzZURCKGF1cCwgYXVwLT50eF9kYl9pbnVzZVtpXSk7CisKKwlkbWFfZnJlZV9ub25jb2hlcmVudChOVUxMLCBNQVhfQlVGX1NJWkUgKgorCQkJKE5VTV9UWF9CVUZGUyArIE5VTV9SWF9CVUZGUyksCisJCQkodm9pZCAqKWF1cC0+dmFkZHIsIGF1cC0+ZG1hX2FkZHIpOworCisJaW91bm1hcChhdXAtPm1hYyk7CisJaW91bm1hcChhdXAtPmVuYWJsZSk7CisKKwliYXNlID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oYmFzZS0+c3RhcnQsIHJlc291cmNlX3NpemUoYmFzZSkpOworCisJbWFjZW4gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihtYWNlbi0+c3RhcnQsIHJlc291cmNlX3NpemUobWFjZW4pKTsKKworCWZyZWVfbmV0ZGV2KGRldik7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGF1MTAwMF9jbGVhbnVwX21vZHVsZSh2b2lkKQotewotCWludCBpLCBqOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXA7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdTEwMDBfZXRoX2RyaXZlciA9IHsKKwkucHJvYmUgID0gYXUxMDAwX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChhdTEwMDBfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSAgID0gImF1MTAwMC1ldGgiLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJfSwKK307CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmF1MTAwMC1ldGgiKTsKIAotCWZvciAoaSA9IDA7IGkgPCBudW1faWZzOyBpKyspIHsKLQkJZGV2ID0gaWZsaXN0W2ldLmRldjsKLQkJaWYgKGRldikgewotCQkJYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JCQltZGlvYnVzX3VucmVnaXN0ZXIoYXVwLT5taWlfYnVzKTsKLQkJCW1kaW9idXNfZnJlZShhdXAtPm1paV9idXMpOwotCQkJZm9yIChqID0gMDsgaiA8IE5VTV9SWF9ETUE7IGorKykKLQkJCQlpZiAoYXVwLT5yeF9kYl9pbnVzZVtqXSkKLQkJCQkJUmVsZWFzZURCKGF1cCwgYXVwLT5yeF9kYl9pbnVzZVtqXSk7Ci0JCQlmb3IgKGogPSAwOyBqIDwgTlVNX1RYX0RNQTsgaisrKQotCQkJCWlmIChhdXAtPnR4X2RiX2ludXNlW2pdKQotCQkJCQlSZWxlYXNlREIoYXVwLCBhdXAtPnR4X2RiX2ludXNlW2pdKTsKLQkJCWRtYV9mcmVlX25vbmNvaGVyZW50KE5VTEwsIE1BWF9CVUZfU0laRSAqCi0JCQkJCSAgICAgKE5VTV9UWF9CVUZGUyArIE5VTV9SWF9CVUZGUyksCi0JCQkJCSAgICAgKHZvaWQgKilhdXAtPnZhZGRyLCBhdXAtPmRtYV9hZGRyKTsKLQkJCXJlbGVhc2VfbWVtX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgTUFDX0lPU0laRSk7Ci0JCQlyZWxlYXNlX21lbV9yZWdpb24oQ1BIWVNBRERSKGlmbGlzdFtpXS5tYWNlbl9hZGRyKSwgNCk7Ci0JCQlmcmVlX25ldGRldihkZXYpOwotCQl9Ci0JfQorCitzdGF0aWMgaW50IF9faW5pdCBhdTEwMDBfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhdTEwMDBfZXRoX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhdTEwMDBfZXhpdF9tb2R1bGUodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXUxMDAwX2V0aF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChhdTEwMDBfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQoYXUxMDAwX2NsZWFudXBfbW9kdWxlKTsKK21vZHVsZV9leGl0KGF1MTAwMF9leGl0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmggYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmgKaW5kZXggODI0ZWNkNS4uZjlkMjlhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguaApAQCAtMTA4LDYgKzEwOCwxNSBAQAogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlfZGV2OwogCXN0cnVjdCBtaWlfYnVzICptaWlfYnVzOwogCisJLyogUEhZIGNvbmZpZ3VyYXRpb24gKi8KKwlpbnQgcGh5X3N0YXRpY19jb25maWc7CisJaW50IHBoeV9zZWFyY2hfaGlnaGVzdF9hZGRyOworCWludCBwaHkxX3NlYXJjaF9tYWMwOworCisJaW50IHBoeV9hZGRyOworCWludCBwaHlfYnVzaWQ7CisJaW50IHBoeV9pcnE7CisKIAkvKiBUaGVzZSB2YXJpYWJsZXMgYXJlIGp1c3QgZm9yIHF1aWNrIGFjY2VzcyB0byBjZXJ0YWluIHJlZ3MgYWRkcmVzc2VzLiAqLwogCXZvbGF0aWxlIG1hY19yZWdfdCAqbWFjOyAgLyogbWFjIHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAqLwogCXZvbGF0aWxlIHUzMiAqZW5hYmxlOyAgICAgLyogYWRkcmVzcyBvZiBNQUMgRW5hYmxlIFJlZ2lzdGVyICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3BtYWMuYyBiL2RyaXZlcnMvbmV0L2NwbWFjLmMKaW5kZXggOGQwYmUyNi4uYmYyMDcyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3BtYWMuYworKysgYi9kcml2ZXJzL25ldC9jcG1hYy5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGh5X2ZpeGVkLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxhc20vZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIApAQCAtMjk0LDkgKzI5NSwxNiBAQAogCiBzdGF0aWMgaW50IGNwbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cykKIHsKKwlzdHJ1Y3QgY2xrICpjcG1hY19jbGs7CisKKwljcG1hY19jbGsgPSBjbGtfZ2V0KCZidXMtPmRldiwgImNwbWFjIik7CisJaWYgKElTX0VSUihjcG1hY19jbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdldCBjcG1hYyBjbG9ja1xuIik7CisJCXJldHVybiAtMTsKKwl9CiAJYXI3X2RldmljZV9yZXNldChBUjdfUkVTRVRfQklUX01ESU8pOwogCWNwbWFjX3dyaXRlKGJ1cy0+cHJpdiwgQ1BNQUNfTURJT19DT05UUk9MLCBNRElPQ19FTkFCTEUgfAotCQkgICAgTURJT0NfQ0xLRElWKGFyN19jcG1hY19mcmVxKCkgLyAyMjAwMDAwIC0gMSkpOworCQkgICAgTURJT0NfQ0xLRElWKGNsa19nZXRfcmF0ZShjcG1hY19jbGspIC8gMjIwMDAwMCAtIDEpKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9hdTFrX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2F1MWtfaXIuYwppbmRleCA5YjJlZWJkLi5iNWNiZDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2F1MWtfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2F1MWtfaXIuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGFzbS9wYjEwMDAuaD4KICNlbGlmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMDAwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTEwMCkKICNpbmNsdWRlIDxhc20vZGIxeDAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KICNlbHNlIAogI2Vycm9yIGF1MWtfaXI6IHVuc3VwcG9ydGVkIGJvYXJkCiAjZW5kaWYKQEAgLTY2LDEwICs2Nyw2IEBACiAKICNkZWZpbmUgUlVOX0FUKHgpIChqaWZmaWVzICsgKHgpKQogCi0jaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjEwMDApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfREIxMTAwKQotc3RhdGljIEJDU1IgKiBjb25zdCBiY3NyID0gKEJDU1IgKikweEFFMDAwMDAwOwotI2VuZGlmCi0KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXJfbG9jayk7CiAKIC8qCkBAIC0yODIsOSArMjc5LDggQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMDAwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTEwMCkKIAkvKiBwb3dlciBvbiAqLwotCWJjc3ItPnJlc2V0cyAmPSB+QkNTUl9SRVNFVFNfSVJEQV9NT0RFX01BU0s7Ci0JYmNzci0+cmVzZXRzIHw9IEJDU1JfUkVTRVRTX0lSREFfTU9ERV9GVUxMOwotCWF1X3N5bmMoKTsKKwliY3NyX21vZChCQ1NSX1JFU0VUUywgQkNTUl9SRVNFVFNfSVJEQV9NT0RFX01BU0ssCisJCQkgICAgICBCQ1NSX1JFU0VUU19JUkRBX01PREVfRlVMTCk7CiAjZW5kaWYKIAogCXJldHVybiAwOwpAQCAtNzIwLDE0ICs3MTYsMTQgQEAKIAogCWlmIChzcGVlZCA9PSA0MDAwMDAwKSB7CiAjaWYgZGVmaW5lZChDT05GSUdfTUlQU19EQjEwMDApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfREIxMTAwKQotCQliY3NyLT5yZXNldHMgfD0gQkNTUl9SRVNFVFNfRklSX1NFTDsKKwkJYmNzcl9tb2QoQkNTUl9SRVNFVFMsIDAsIEJDU1JfUkVTRVRTX0ZJUl9TRUwpOwogI2Vsc2UgLyogUGIxMDAwIGFuZCBQYjExMDAgKi8KIAkJd3JpdGVsKDE8PDEzLCBDUExEX0FVWDEpOwogI2VuZGlmCiAJfQogCWVsc2UgewogI2lmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMDAwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTEwMCkKLQkJYmNzci0+cmVzZXRzICY9IH5CQ1NSX1JFU0VUU19GSVJfU0VMOworCQliY3NyX21vZChCQ1NSX1JFU0VUUywgQkNTUl9SRVNFVFNfRklSX1NFTCwgMCk7CiAjZWxzZSAvKiBQYjEwMDAgYW5kIFBiMTEwMCAqLwogCQl3cml0ZWwocmVhZGwoQ1BMRF9BVVgxKSAmIH4oMTw8MTMpLCBDUExEX0FVWDEpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNlLmMgYi9kcml2ZXJzL25ldC9tYWNlLmMKaW5kZXggZDlmYmFkMy4uNDNhZWE5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjZS5jCisrKyBiL2RyaXZlcnMvbmV0L21hY2UuYwpAQCAtMjA2LDcgKzIwNiw3IEBACiAJCW1wLT5wb3J0X2FhdWkgPSBwb3J0X2FhdWk7CiAJZWxzZSB7CiAJCS8qIEFwcGxlIE5ldHdvcmsgU2VydmVyIHVzZXMgdGhlIEFBVUkgcG9ydCAqLwotCQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFNoaW5lckVTQiIpKQorCQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFNoaW5lckVTQiIpKQogCQkJbXAtPnBvcnRfYWF1aSA9IDE7CiAJCWVsc2UgewogI2lmZGVmIENPTkZJR19NQUNFX0FBVUlfUE9SVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjbWFjZS5jIGIvZHJpdmVycy9uZXQvbWFjbWFjZS5jCmluZGV4IDQ0ZjNjMjguLjc5NDA4YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY21hY2UuYworKysgYi9kcml2ZXJzL25ldC9tYWNtYWNlLmMKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlICJtYWNlLmgiCiAKIHN0YXRpYyBjaGFyIG1hY19tYWNlX3N0cmluZ1tdID0gIm1hY21hY2UiOwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1hY19tYWNlX2RldmljZTsKIAogI2RlZmluZSBOX1RYX0JVRkZfT1JERVIJMAogI2RlZmluZSBOX1RYX1JJTkcJKDEgPDwgTl9UWF9CVUZGX09SREVSKQpAQCAtNzUyLDYgKzc1MSw3IEBACiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTWFjaW50b3NoIE1BQ0UgZXRoZXJuZXQgZHJpdmVyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm1hY21hY2UiKTsKIAogc3RhdGljIGludCBfX2RldmV4aXQgbWFjX21hY2VfZGV2aWNlX3JlbW92ZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKQEAgLTc3Nyw0NyArNzc3LDIyIEBACiAJLnByb2JlICA9IG1hY2VfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG1hY19tYWNlX2RldmljZV9yZW1vdmUpLAogCS5kcml2ZXIJPSB7Ci0JCS5uYW1lID0gbWFjX21hY2Vfc3RyaW5nLAorCQkubmFtZQk9IG1hY19tYWNlX3N0cmluZywKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1hY19tYWNlX2luaXRfbW9kdWxlKHZvaWQpCiB7Ci0JaW50IGVycjsKLQogCWlmICghTUFDSF9JU19NQUMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKChlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1hY19tYWNlX2RyaXZlcikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRHJpdmVyIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCW1hY19tYWNlX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhtYWNfbWFjZV9zdHJpbmcsIDApOwotCWlmICghbWFjX21hY2VfZGV2aWNlKQotCQlnb3RvIG91dF91bnJlZ2lzdGVyOwotCi0JaWYgKHBsYXRmb3JtX2RldmljZV9hZGQobWFjX21hY2VfZGV2aWNlKSkgewotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KG1hY19tYWNlX2RldmljZSk7Ci0JCW1hY19tYWNlX2RldmljZSA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLW91dF91bnJlZ2lzdGVyOgotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYWNfbWFjZV9kcml2ZXIpOwotCi0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWFjX21hY2VfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG1hY19tYWNlX2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1hY19tYWNlX2RyaXZlcik7Ci0KLQlpZiAobWFjX21hY2VfZGV2aWNlKSB7Ci0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG1hY19tYWNlX2RldmljZSk7Ci0JCW1hY19tYWNlX2RldmljZSA9IE5VTEw7Ci0JfQogfQogCiBtb2R1bGVfaW5pdChtYWNfbWFjZV9pbml0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNzb25pYy5jIGIvZHJpdmVycy9uZXQvbWFjc29uaWMuYwppbmRleCA4NzVkMzYxLi4yNDEwOWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNzb25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKQEAgLTYyLDcgKzYyLDYgQEAKICNpbmNsdWRlIDxhc20vbWFjX3ZpYS5oPgogCiBzdGF0aWMgY2hhciBtYWNfc29uaWNfc3RyaW5nW10gPSAibWFjc29uaWMiOwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1hY19zb25pY19kZXZpY2U7CiAKICNpbmNsdWRlICJzb25pYy5oIgogCkBAIC02MDcsNiArNjA2LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiTWFjaW50b3NoIFNPTklDIGV0aGVybmV0IGRyaXZlciIpOwogbW9kdWxlX3BhcmFtKHNvbmljX2RlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhzb25pY19kZWJ1ZywgIm1hY3NvbmljIGRlYnVnIGxldmVsICgxLTQpIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm1hY3NvbmljIik7CiAKICNpbmNsdWRlICJzb25pYy5jIgogCkBAIC02MjcsNDQgKzYyNywxOSBAQAogCS5wcm9iZSAgPSBtYWNfc29uaWNfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG1hY19zb25pY19kZXZpY2VfcmVtb3ZlKSwKIAkuZHJpdmVyCT0gewotCQkubmFtZSA9IG1hY19zb25pY19zdHJpbmcsCisJCS5uYW1lCT0gbWFjX3NvbmljX3N0cmluZywKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1hY19zb25pY19pbml0X21vZHVsZSh2b2lkKQogewotCWludCBlcnI7Ci0KLQlpZiAoKGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWFjX3NvbmljX2RyaXZlcikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRHJpdmVyIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCW1hY19zb25pY19kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MobWFjX3NvbmljX3N0cmluZywgMCk7Ci0JaWYgKCFtYWNfc29uaWNfZGV2aWNlKQotCQlnb3RvIG91dF91bnJlZ2lzdGVyOwotCi0JaWYgKHBsYXRmb3JtX2RldmljZV9hZGQobWFjX3NvbmljX2RldmljZSkpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChtYWNfc29uaWNfZGV2aWNlKTsKLQkJbWFjX3NvbmljX2RldmljZSA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLW91dF91bnJlZ2lzdGVyOgotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYWNfc29uaWNfZHJpdmVyKTsKLQotCXJldHVybiAtRU5PTUVNOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1hY19zb25pY19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWFjX3NvbmljX2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1hY19zb25pY19kcml2ZXIpOwotCi0JaWYgKG1hY19zb25pY19kZXZpY2UpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobWFjX3NvbmljX2RldmljZSk7Ci0JCW1hY19zb25pY19kZXZpY2UgPSBOVUxMOwotCX0KIH0KIAogbW9kdWxlX2luaXQobWFjX3NvbmljX2luaXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKaW5kZXggNmRkNDg2ZC4uYWE1N2NmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKQEAgLTQ1Myw4ICs0NTMsNyBAQAogCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CiAgICAgbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKLSAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9Ci0JSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOworICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gMTY7CiAgICAgbGluay0+aW8uQXR0cmlidXRlczIgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKICAgICBsaW5rLT5pby5OdW1Qb3J0czIgPSA4OwpAQCAtNjUyLDggKzY1MSw3IEBACiAKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKICAgICBsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOwotICAgIGxpbmstPmlycS5BdHRyaWJ1dGVzID0KLQlJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkd8SVJRX0ZJUlNUX1NIQVJFRDsKKyAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKICAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSA2NDsKICAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OwogICAgIGxpbmstPmlvLk51bVBvcnRzMiA9IDg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL0tjb25maWcgYi9kcml2ZXJzL29mL0tjb25maWcKaW5kZXggZDJmYTI3Yy4uN2NlY2M4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9LY29uZmlnCisrKyBiL2RyaXZlcnMvb2YvS2NvbmZpZwpAQCAtMSwzICsxLDExIEBACitjb25maWcgT0ZfRkxBVFRSRUUKKwlib29sCisJZGVwZW5kcyBvbiBPRgorCitjb25maWcgT0ZfRFlOQU1JQworCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIE9GICYmIFBQQ19PRgorCiBjb25maWcgT0ZfREVWSUNFCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gT0YgJiYgKFNQQVJDIHx8IFBQQ19PRiB8fCBNSUNST0JMQVpFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9NYWtlZmlsZSBiL2RyaXZlcnMvb2YvTWFrZWZpbGUKaW5kZXggYmRmYjVmNS4uZjIzMmNjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL29mL01ha2VmaWxlCkBAIC0xLDQgKzEsNSBAQAogb2JqLXkgPSBiYXNlLm8KK29iai0kKENPTkZJR19PRl9GTEFUVFJFRSkgKz0gZmR0Lm8KIG9iai0kKENPTkZJR19PRl9ERVZJQ0UpICs9IGRldmljZS5vIHBsYXRmb3JtLm8KIG9iai0kKENPTkZJR19PRl9HUElPKSAgICs9IGdwaW8ubwogb2JqLSQoQ09ORklHX09GX0kyQykJKz0gb2ZfaTJjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvYmFzZS5jIGIvZHJpdmVycy9vZi9iYXNlLmMKaW5kZXggZTY2MjdiMi4uY2I5Njg4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9iYXNlLmMKKysrIGIvZHJpdmVycy9vZi9iYXNlLmMKQEAgLTIwLDggKzIwLDEwIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIAogc3RydWN0IGRldmljZV9ub2RlICphbGxub2RlczsKK3N0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfY2hvc2VuOwogCiAvKiB1c2Ugd2hlbiB0cmF2ZXJzaW5nIHRyZWUgdGhyb3VnaCB0aGUgYWxsbmV4dCwgY2hpbGQsIHNpYmxpbmcsCiAgKiBvciBwYXJlbnQgbWVtYmVycyBvZiBzdHJ1Y3QgZGV2aWNlX25vZGUuCkBAIC0zNyw3ICszOSw3IEBACiAJCQlucCA9IG5wLT5wYXJlbnQ7CiAJCWlwID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiI2FkZHJlc3MtY2VsbHMiLCBOVUxMKTsKIAkJaWYgKGlwKQotCQkJcmV0dXJuICppcDsKKwkJCXJldHVybiBiZTMyX3RvX2NwdXAoaXApOwogCX0gd2hpbGUgKG5wLT5wYXJlbnQpOwogCS8qIE5vICNhZGRyZXNzLWNlbGxzIHByb3BlcnR5IGZvciB0aGUgcm9vdCBub2RlICovCiAJcmV0dXJuIE9GX1JPT1RfTk9ERV9BRERSX0NFTExTX0RFRkFVTFQ7CkBAIC01MywxMyArNTUsODggQEAKIAkJCW5wID0gbnAtPnBhcmVudDsKIAkJaXAgPSBvZl9nZXRfcHJvcGVydHkobnAsICIjc2l6ZS1jZWxscyIsIE5VTEwpOwogCQlpZiAoaXApCi0JCQlyZXR1cm4gKmlwOworCQkJcmV0dXJuIGJlMzJfdG9fY3B1cChpcCk7CiAJfSB3aGlsZSAobnAtPnBhcmVudCk7CiAJLyogTm8gI3NpemUtY2VsbHMgcHJvcGVydHkgZm9yIHRoZSByb290IG5vZGUgKi8KIAlyZXR1cm4gT0ZfUk9PVF9OT0RFX1NJWkVfQ0VMTFNfREVGQVVMVDsKIH0KIEVYUE9SVF9TWU1CT0wob2Zfbl9zaXplX2NlbGxzKTsKIAorI2lmICFkZWZpbmVkKENPTkZJR19TUEFSQykgICAvKiBTUEFSQyBkb2Vzbid0IGRvIHJlZiBjb3VudGluZyAoeWV0KSAqLworLyoqCisgKglvZl9ub2RlX2dldCAtIEluY3JlbWVudCByZWZjb3VudCBvZiBhIG5vZGUKKyAqCUBub2RlOglOb2RlIHRvIGluYyByZWZjb3VudCwgTlVMTCBpcyBzdXBwb3J0ZWQgdG8KKyAqCQlzaW1wbGlmeSB3cml0aW5nIG9mIGNhbGxlcnMKKyAqCisgKglSZXR1cm5zIG5vZGUuCisgKi8KK3N0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZV9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQoreworCWlmIChub2RlKQorCQlrcmVmX2dldCgmbm9kZS0+a3JlZik7CisJcmV0dXJuIG5vZGU7Cit9CitFWFBPUlRfU1lNQk9MKG9mX25vZGVfZ2V0KTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlX25vZGUgKmtyZWZfdG9fZGV2aWNlX25vZGUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZGV2aWNlX25vZGUsIGtyZWYpOworfQorCisvKioKKyAqCW9mX25vZGVfcmVsZWFzZSAtIHJlbGVhc2UgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbm9kZQorICoJQGtyZWY6ICBrcmVmIGVsZW1lbnQgb2YgdGhlIG5vZGUgdG8gYmUgcmVsZWFzZWQKKyAqCisgKglJbiBvZl9ub2RlX3B1dCgpIHRoaXMgZnVuY3Rpb24gaXMgcGFzc2VkIHRvIGtyZWZfcHV0KCkKKyAqCWFzIHRoZSBkZXN0cnVjdG9yLgorICovCitzdGF0aWMgdm9pZCBvZl9ub2RlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0ga3JlZl90b19kZXZpY2Vfbm9kZShrcmVmKTsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3AgPSBub2RlLT5wcm9wZXJ0aWVzOworCisJLyogV2Ugc2hvdWxkIG5ldmVyIGJlIHJlbGVhc2luZyBub2RlcyB0aGF0IGhhdmVuJ3QgYmVlbiBkZXRhY2hlZC4gKi8KKwlpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9ERVRBQ0hFRCkpIHsKKwkJcHJfZXJyKCJFUlJPUjogQmFkIG9mX25vZGVfcHV0KCkgb24gJXNcbiIsIG5vZGUtPmZ1bGxfbmFtZSk7CisJCWR1bXBfc3RhY2soKTsKKwkJa3JlZl9pbml0KCZub2RlLT5rcmVmKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX0RZTkFNSUMpKQorCQlyZXR1cm47CisKKwl3aGlsZSAocHJvcCkgeworCQlzdHJ1Y3QgcHJvcGVydHkgKm5leHQgPSBwcm9wLT5uZXh0OworCQlrZnJlZShwcm9wLT5uYW1lKTsKKwkJa2ZyZWUocHJvcC0+dmFsdWUpOworCQlrZnJlZShwcm9wKTsKKwkJcHJvcCA9IG5leHQ7CisKKwkJaWYgKCFwcm9wKSB7CisJCQlwcm9wID0gbm9kZS0+ZGVhZHByb3BzOworCQkJbm9kZS0+ZGVhZHByb3BzID0gTlVMTDsKKwkJfQorCX0KKwlrZnJlZShub2RlLT5mdWxsX25hbWUpOworCWtmcmVlKG5vZGUtPmRhdGEpOworCWtmcmVlKG5vZGUpOworfQorCisvKioKKyAqCW9mX25vZGVfcHV0IC0gRGVjcmVtZW50IHJlZmNvdW50IG9mIGEgbm9kZQorICoJQG5vZGU6CU5vZGUgdG8gZGVjIHJlZmNvdW50LCBOVUxMIGlzIHN1cHBvcnRlZCB0bworICoJCXNpbXBsaWZ5IHdyaXRpbmcgb2YgY2FsbGVycworICoKKyAqLwordm9pZCBvZl9ub2RlX3B1dChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJaWYgKG5vZGUpCisJCWtyZWZfcHV0KCZub2RlLT5rcmVmLCBvZl9ub2RlX3JlbGVhc2UpOworfQorRVhQT1JUX1NZTUJPTChvZl9ub2RlX3B1dCk7CisjZW5kaWYgLyogIUNPTkZJR19TUEFSQyAqLworCiBzdHJ1Y3QgcHJvcGVydHkgKm9mX2ZpbmRfcHJvcGVydHkoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJICBpbnQgKmxlbnApCkBAIC0xNDQsNiArMjIxLDI3IEBACiBFWFBPUlRfU1lNQk9MKG9mX2RldmljZV9pc19jb21wYXRpYmxlKTsKIAogLyoqCisgKiBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUgLSBUZXN0IHJvb3Qgb2YgZGV2aWNlIHRyZWUgZm9yIGEgZ2l2ZW4gY29tcGF0aWJsZSB2YWx1ZQorICogQGNvbXBhdDogY29tcGF0aWJsZSBzdHJpbmcgdG8gbG9vayBmb3IgaW4gcm9vdCBub2RlJ3MgY29tcGF0aWJsZSBwcm9wZXJ0eS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJvb3Qgbm9kZSBoYXMgdGhlIGdpdmVuIHZhbHVlIGluIGl0cworICogY29tcGF0aWJsZSBwcm9wZXJ0eS4KKyAqLworaW50IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZShjb25zdCBjaGFyICpjb21wYXQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpyb290OworCWludCByYyA9IDA7CisKKwlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKKwlpZiAocm9vdCkgeworCQlyYyA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHJvb3QsIGNvbXBhdCk7CisJCW9mX25vZGVfcHV0KHJvb3QpOworCX0KKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSk7CisKKy8qKgogICogIG9mX2RldmljZV9pc19hdmFpbGFibGUgLSBjaGVjayBpZiBhIGRldmljZSBpcyBhdmFpbGFibGUgZm9yIHVzZQogICoKICAqICBAZGV2aWNlOiBOb2RlIHRvIGNoZWNrIGZvciBhdmFpbGFiaWxpdHkKQEAgLTUxOSw2ICs2MTcsMjcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKG9mX21vZGFsaWFzX25vZGUpOwogCiAvKioKKyAqIG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlIC0gRmluZCBhIG5vZGUgZ2l2ZW4gYSBwaGFuZGxlCisgKiBAaGFuZGxlOglwaGFuZGxlIG9mIHRoZSBub2RlIHRvIGZpbmQKKyAqCisgKiBSZXR1cm5zIGEgbm9kZSBwb2ludGVyIHdpdGggcmVmY291bnQgaW5jcmVtZW50ZWQsIHVzZQorICogb2Zfbm9kZV9wdXQoKSBvbiBpdCB3aGVuIGRvbmUuCisgKi8KK3N0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUocGhhbmRsZSBoYW5kbGUpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKworCXJlYWRfbG9jaygmZGV2dHJlZV9sb2NrKTsKKwlmb3IgKG5wID0gYWxsbm9kZXM7IG5wOyBucCA9IG5wLT5hbGxuZXh0KQorCQlpZiAobnAtPnBoYW5kbGUgPT0gaGFuZGxlKQorCQkJYnJlYWs7CisJb2Zfbm9kZV9nZXQobnApOworCXJlYWRfdW5sb2NrKCZkZXZ0cmVlX2xvY2spOworCXJldHVybiBucDsKK30KK0VYUE9SVF9TWU1CT0wob2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUpOworCisvKioKICAqIG9mX3BhcnNlX3BoYW5kbGUgLSBSZXNvbHZlIGEgcGhhbmRsZSBwcm9wZXJ0eSB0byBhIGRldmljZV9ub2RlIHBvaW50ZXIKICAqIEBucDogUG9pbnRlciB0byBkZXZpY2Ugbm9kZSBob2xkaW5nIHBoYW5kbGUgcHJvcGVydHkKICAqIEBwaGFuZGxlX25hbWU6IE5hbWUgb2YgcHJvcGVydHkgaG9sZGluZyBhIHBoYW5kbGUgdmFsdWUKQEAgLTU3OCw4ICs2OTcsOCBAQAogCQkJCWNvbnN0IHZvaWQgKipvdXRfYXJncykKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKLQljb25zdCB1MzIgKmxpc3Q7Ci0JY29uc3QgdTMyICpsaXN0X2VuZDsKKwljb25zdCBfX2JlMzIgKmxpc3Q7CisJY29uc3QgX19iZTMyICpsaXN0X2VuZDsKIAlpbnQgc2l6ZTsKIAlpbnQgY3VyX2luZGV4ID0gMDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBOVUxMOwpAQCAtNTkzLDcgKzcxMiw3IEBACiAJbGlzdF9lbmQgPSBsaXN0ICsgc2l6ZSAvIHNpemVvZigqbGlzdCk7CiAKIAl3aGlsZSAobGlzdCA8IGxpc3RfZW5kKSB7Ci0JCWNvbnN0IHUzMiAqY2VsbHM7CisJCWNvbnN0IF9fYmUzMiAqY2VsbHM7CiAJCWNvbnN0IHBoYW5kbGUgKnBoYW5kbGU7CiAKIAkJcGhhbmRsZSA9IGxpc3QrKzsKQEAgLTYxNyw3ICs3MzYsNyBAQAogCQkJZ290byBlcnIxOwogCQl9CiAKLQkJbGlzdCArPSAqY2VsbHM7CisJCWxpc3QgKz0gYmUzMl90b19jcHVwKGNlbGxzKTsKIAkJaWYgKGxpc3QgPiBsaXN0X2VuZCkgewogCQkJcHJfZGVidWcoIiVzOiBpbnN1ZmZpY2llbnQgYXJndW1lbnRzIGxlbmd0aFxuIiwKIAkJCQkgbnAtPmZ1bGxfbmFtZSk7CkBAIC02NTgsMyArNzc3LDE5MCBAQAogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKG9mX3BhcnNlX3BoYW5kbGVzX3dpdGhfYXJncyk7CisKKy8qKgorICogcHJvbV9hZGRfcHJvcGVydHkgLSBBZGQgYSBwcm9wZXJ0eSB0byBhIG5vZGUKKyAqLworaW50IHByb21fYWRkX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKipuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwcm9wLT5uZXh0ID0gTlVMTDsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOworCW5leHQgPSAmbnAtPnByb3BlcnRpZXM7CisJd2hpbGUgKCpuZXh0KSB7CisJCWlmIChzdHJjbXAocHJvcC0+bmFtZSwgKCpuZXh0KS0+bmFtZSkgPT0gMCkgeworCQkJLyogZHVwbGljYXRlICEgZG9uJ3QgaW5zZXJ0IGl0ICovCisJCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OworCX0KKwkqbmV4dCA9IHByb3A7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmRldnRyZWVfbG9jaywgZmxhZ3MpOworCisjaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQorCS8qIHRyeSB0byBhZGQgdG8gcHJvYyBhcyB3ZWxsIGlmIGl0IHdhcyBpbml0aWFsaXplZCAqLworCWlmIChucC0+cGRlKQorCQlwcm9jX2RldmljZV90cmVlX2FkZF9wcm9wKG5wLT5wZGUsIHByb3ApOworI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHByb21fcmVtb3ZlX3Byb3BlcnR5IC0gUmVtb3ZlIGEgcHJvcGVydHkgZnJvbSBhIG5vZGUuCisgKgorICogTm90ZSB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IHJlbW92ZSBpdCwgc2luY2Ugd2UgaGF2ZSBnaXZlbiBvdXQKKyAqIHdoby1rbm93cy1ob3ctbWFueSBwb2ludGVycyB0byB0aGUgZGF0YSB1c2luZyBnZXQtcHJvcGVydHkuCisgKiBJbnN0ZWFkIHdlIGp1c3QgbW92ZSB0aGUgcHJvcGVydHkgdG8gdGhlICJkZWFkIHByb3BlcnRpZXMiCisgKiBsaXN0LCBzbyBpdCB3b24ndCBiZSBmb3VuZCBhbnkgbW9yZS4KKyAqLworaW50IHByb21fcmVtb3ZlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKipuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGZvdW5kID0gMDsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CisJbmV4dCA9ICZucC0+cHJvcGVydGllczsKKwl3aGlsZSAoKm5leHQpIHsKKwkJaWYgKCpuZXh0ID09IHByb3ApIHsKKwkJCS8qIGZvdW5kIHRoZSBub2RlICovCisJCQkqbmV4dCA9IHByb3AtPm5leHQ7CisJCQlwcm9wLT5uZXh0ID0gbnAtPmRlYWRwcm9wczsKKwkJCW5wLT5kZWFkcHJvcHMgPSBwcm9wOworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJbmV4dCA9ICYoKm5leHQpLT5uZXh0OworCX0KKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CisKKwlpZiAoIWZvdW5kKQorCQlyZXR1cm4gLUVOT0RFVjsKKworI2lmZGVmIENPTkZJR19QUk9DX0RFVklDRVRSRUUKKwkvKiB0cnkgdG8gcmVtb3ZlIHRoZSBwcm9jIG5vZGUgYXMgd2VsbCAqLworCWlmIChucC0+cGRlKQorCQlwcm9jX2RldmljZV90cmVlX3JlbW92ZV9wcm9wKG5wLT5wZGUsIHByb3ApOworI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KKworCXJldHVybiAwOworfQorCisvKgorICogcHJvbV91cGRhdGVfcHJvcGVydHkgLSBVcGRhdGUgYSBwcm9wZXJ0eSBpbiBhIG5vZGUuCisgKgorICogTm90ZSB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IHJlbW92ZSBpdCwgc2luY2Ugd2UgaGF2ZSBnaXZlbiBvdXQKKyAqIHdoby1rbm93cy1ob3ctbWFueSBwb2ludGVycyB0byB0aGUgZGF0YSB1c2luZyBnZXQtcHJvcGVydHkuCisgKiBJbnN0ZWFkIHdlIGp1c3QgbW92ZSB0aGUgcHJvcGVydHkgdG8gdGhlICJkZWFkIHByb3BlcnRpZXMiIGxpc3QsCisgKiBhbmQgYWRkIHRoZSBuZXcgcHJvcGVydHkgdG8gdGhlIHByb3BlcnR5IGxpc3QKKyAqLworaW50IHByb21fdXBkYXRlX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkgc3RydWN0IHByb3BlcnR5ICpuZXdwcm9wLAorCQkJIHN0cnVjdCBwcm9wZXJ0eSAqb2xkcHJvcCkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKipuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGZvdW5kID0gMDsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CisJbmV4dCA9ICZucC0+cHJvcGVydGllczsKKwl3aGlsZSAoKm5leHQpIHsKKwkJaWYgKCpuZXh0ID09IG9sZHByb3ApIHsKKwkJCS8qIGZvdW5kIHRoZSBub2RlICovCisJCQluZXdwcm9wLT5uZXh0ID0gb2xkcHJvcC0+bmV4dDsKKwkJCSpuZXh0ID0gbmV3cHJvcDsKKwkJCW9sZHByb3AtPm5leHQgPSBucC0+ZGVhZHByb3BzOworCQkJbnAtPmRlYWRwcm9wcyA9IG9sZHByb3A7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCQluZXh0ID0gJigqbmV4dCktPm5leHQ7CisJfQorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKKworCWlmICghZm91bmQpCisJCXJldHVybiAtRU5PREVWOworCisjaWZkZWYgQ09ORklHX1BST0NfREVWSUNFVFJFRQorCS8qIHRyeSB0byBhZGQgdG8gcHJvYyBhcyB3ZWxsIGlmIGl0IHdhcyBpbml0aWFsaXplZCAqLworCWlmIChucC0+cGRlKQorCQlwcm9jX2RldmljZV90cmVlX3VwZGF0ZV9wcm9wKG5wLT5wZGUsIG5ld3Byb3AsIG9sZHByb3ApOworI2VuZGlmIC8qIENPTkZJR19QUk9DX0RFVklDRVRSRUUgKi8KKworCXJldHVybiAwOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfT0ZfRFlOQU1JQykKKy8qCisgKiBTdXBwb3J0IGZvciBkeW5hbWljIGRldmljZSB0cmVlcy4KKyAqCisgKiBPbiBzb21lIHBsYXRmb3JtcywgdGhlIGRldmljZSB0cmVlIGNhbiBiZSBtYW5pcHVsYXRlZCBhdCBydW50aW1lLgorICogVGhlIHJvdXRpbmVzIGluIHRoaXMgc2VjdGlvbiBzdXBwb3J0IGFkZGluZywgcmVtb3ZpbmcgYW5kIGNoYW5naW5nCisgKiBkZXZpY2UgdHJlZSBub2Rlcy4KKyAqLworCisvKioKKyAqIG9mX2F0dGFjaF9ub2RlIC0gUGx1ZyBhIGRldmljZSBub2RlIGludG8gdGhlIHRyZWUgYW5kIGdsb2JhbCBsaXN0LgorICovCit2b2lkIG9mX2F0dGFjaF9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7CisJbnAtPnNpYmxpbmcgPSBucC0+cGFyZW50LT5jaGlsZDsKKwlucC0+YWxsbmV4dCA9IGFsbG5vZGVzOworCW5wLT5wYXJlbnQtPmNoaWxkID0gbnA7CisJYWxsbm9kZXMgPSBucDsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmZGV2dHJlZV9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogb2ZfZGV0YWNoX25vZGUgLSAiVW5wbHVnIiBhIG5vZGUgZnJvbSB0aGUgZGV2aWNlIHRyZWUuCisgKgorICogVGhlIGNhbGxlciBtdXN0IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIG5vZGUuICBUaGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aAorICogdGhlIG5vZGUgaXMgbm90IGZyZWVkIHVudGlsIGl0cyByZWZjb3VudCBnb2VzIHRvIHplcm8uCisgKi8KK3ZvaWQgb2ZfZGV0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKKworCXBhcmVudCA9IG5wLT5wYXJlbnQ7CisJaWYgKCFwYXJlbnQpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWlmIChhbGxub2RlcyA9PSBucCkKKwkJYWxsbm9kZXMgPSBucC0+YWxsbmV4dDsKKwllbHNlIHsKKwkJc3RydWN0IGRldmljZV9ub2RlICpwcmV2OworCQlmb3IgKHByZXYgPSBhbGxub2RlczsKKwkJICAgICBwcmV2LT5hbGxuZXh0ICE9IG5wOworCQkgICAgIHByZXYgPSBwcmV2LT5hbGxuZXh0KQorCQkJOworCQlwcmV2LT5hbGxuZXh0ID0gbnAtPmFsbG5leHQ7CisJfQorCisJaWYgKHBhcmVudC0+Y2hpbGQgPT0gbnApCisJCXBhcmVudC0+Y2hpbGQgPSBucC0+c2libGluZzsKKwllbHNlIHsKKwkJc3RydWN0IGRldmljZV9ub2RlICpwcmV2c2liOworCQlmb3IgKHByZXZzaWIgPSBucC0+cGFyZW50LT5jaGlsZDsKKwkJICAgICBwcmV2c2liLT5zaWJsaW5nICE9IG5wOworCQkgICAgIHByZXZzaWIgPSBwcmV2c2liLT5zaWJsaW5nKQorCQkJOworCQlwcmV2c2liLT5zaWJsaW5nID0gbnAtPnNpYmxpbmc7CisJfQorCisJb2Zfbm9kZV9zZXRfZmxhZyhucCwgT0ZfREVUQUNIRUQpOworCitvdXRfdW5sb2NrOgorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkZXZ0cmVlX2xvY2ssIGZsYWdzKTsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19PRl9EWU5BTUlDKSAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2ZkdC5jIGIvZHJpdmVycy9vZi9mZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDY3NTdhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9vZi9mZHQuYwpAQCAtMCwwICsxLDU5MCBAQAorLyoKKyAqIEZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIHRoZSBGbGF0dGVuZWQgRGV2aWNlIFRyZWUgZGF0YSBmb3JtYXQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBCZW5qYW1pbiBIZXJyZW5zY2htaWR0LCBJQk0gQ29ycAorICogYmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9mZHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisjaWZkZWYgQ09ORklHX1BQQworI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjZW5kaWYgLyogQ09ORklHX1BQQyAqLworCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworaW50IF9faW5pdGRhdGEgZHRfcm9vdF9hZGRyX2NlbGxzOworaW50IF9faW5pdGRhdGEgZHRfcm9vdF9zaXplX2NlbGxzOworCitzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgKmluaXRpYWxfYm9vdF9wYXJhbXM7CisKK2NoYXIgKmZpbmRfZmxhdF9kdF9zdHJpbmcodTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gKChjaGFyICopaW5pdGlhbF9ib290X3BhcmFtcykgKworCQliZTMyX3RvX2NwdShpbml0aWFsX2Jvb3RfcGFyYW1zLT5vZmZfZHRfc3RyaW5ncykgKyBvZmZzZXQ7Cit9CisKKy8qKgorICogb2Zfc2Nhbl9mbGF0X2R0IC0gc2NhbiBmbGF0dGVuZWQgdHJlZSBibG9iIGFuZCBjYWxsIGNhbGxiYWNrIG9uIGVhY2guCisgKiBAaXQ6IGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAZGF0YTogY29udGV4dCBkYXRhIHBvaW50ZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2NhbiB0aGUgZmxhdHRlbmVkIGRldmljZS10cmVlLCBpdCBpcworICogdXNlZCB0byBleHRyYWN0IHRoZSBtZW1vcnkgaW5mb3JtYXRpb24gYXQgYm9vdCBiZWZvcmUgd2UgY2FuCisgKiB1bmZsYXR0ZW4gdGhlIHRyZWUKKyAqLworaW50IF9faW5pdCBvZl9zY2FuX2ZsYXRfZHQoaW50ICgqaXQpKHVuc2lnbmVkIGxvbmcgbm9kZSwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnVuYW1lLCBpbnQgZGVwdGgsCisJCQkJICAgICB2b2lkICpkYXRhKSwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBwID0gKCh1bnNpZ25lZCBsb25nKWluaXRpYWxfYm9vdF9wYXJhbXMpICsKKwkJYmUzMl90b19jcHUoaW5pdGlhbF9ib290X3BhcmFtcy0+b2ZmX2R0X3N0cnVjdCk7CisJaW50IHJjID0gMDsKKwlpbnQgZGVwdGggPSAtMTsKKworCWRvIHsKKwkJdTMyIHRhZyA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopcCk7CisJCWNoYXIgKnBhdGhwOworCisJCXAgKz0gNDsKKwkJaWYgKHRhZyA9PSBPRl9EVF9FTkRfTk9ERSkgeworCQkJZGVwdGgtLTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh0YWcgPT0gT0ZfRFRfTk9QKQorCQkJY29udGludWU7CisJCWlmICh0YWcgPT0gT0ZfRFRfRU5EKQorCQkJYnJlYWs7CisJCWlmICh0YWcgPT0gT0ZfRFRfUFJPUCkgeworCQkJdTMyIHN6ID0gYmUzMl90b19jcHVwKChfX2JlMzIgKilwKTsKKwkJCXAgKz0gODsKKwkJCWlmIChiZTMyX3RvX2NwdShpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uKSA8IDB4MTApCisJCQkJcCA9IF9BTElHTihwLCBzeiA+PSA4ID8gOCA6IDQpOworCQkJcCArPSBzejsKKwkJCXAgPSBfQUxJR04ocCwgNCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodGFnICE9IE9GX0RUX0JFR0lOX05PREUpIHsKKwkJCXByX2VycigiSW52YWxpZCB0YWcgJXggaW4gZmxhdCBkZXZpY2UgdHJlZSFcbiIsIHRhZyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlkZXB0aCsrOworCQlwYXRocCA9IChjaGFyICopcDsKKwkJcCA9IF9BTElHTihwICsgc3RybGVuKHBhdGhwKSArIDEsIDQpOworCQlpZiAoKCpwYXRocCkgPT0gJy8nKSB7CisJCQljaGFyICpscCwgKm5wOworCQkJZm9yIChscCA9IE5VTEwsIG5wID0gcGF0aHA7ICpucDsgbnArKykKKwkJCQlpZiAoKCpucCkgPT0gJy8nKQorCQkJCQlscCA9IG5wKzE7CisJCQlpZiAobHAgIT0gTlVMTCkKKwkJCQlwYXRocCA9IGxwOworCQl9CisJCXJjID0gaXQocCwgcGF0aHAsIGRlcHRoLCBkYXRhKTsKKwkJaWYgKHJjICE9IDApCisJCQlicmVhazsKKwl9IHdoaWxlICgxKTsKKworCXJldHVybiByYzsKK30KKworLyoqCisgKiBvZl9nZXRfZmxhdF9kdF9yb290IC0gZmluZCB0aGUgcm9vdCBub2RlIGluIHRoZSBmbGF0IGJsb2IKKyAqLwordW5zaWduZWQgbG9uZyBfX2luaXQgb2ZfZ2V0X2ZsYXRfZHRfcm9vdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCisJCWJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3QpOworCisJd2hpbGUgKGJlMzJfdG9fY3B1cCgoX19iZTMyICopcCkgPT0gT0ZfRFRfTk9QKQorCQlwICs9IDQ7CisJQlVHX09OKGJlMzJfdG9fY3B1cCgoX19iZTMyICopcCkgIT0gT0ZfRFRfQkVHSU5fTk9ERSk7CisJcCArPSA0OworCXJldHVybiBfQUxJR04ocCArIHN0cmxlbigoY2hhciAqKXApICsgMSwgNCk7Cit9CisKKy8qKgorICogb2ZfZ2V0X2ZsYXRfZHRfcHJvcCAtIEdpdmVuIGEgbm9kZSBpbiB0aGUgZmxhdCBibG9iLCByZXR1cm4gdGhlIHByb3BlcnR5IHB0cgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgd2l0aGluIHNjYW5fZmxhdHRlbmVkX2R0IGNhbGxiYWNrIHRvIGdldAorICogYWNjZXNzIHRvIHByb3BlcnRpZXMKKyAqLwordm9pZCAqX19pbml0IG9mX2dldF9mbGF0X2R0X3Byb3AodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSB1bnNpZ25lZCBsb25nICpzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcCA9IG5vZGU7CisKKwlkbyB7CisJCXUzMiB0YWcgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKXApOworCQl1MzIgc3osIG5vZmY7CisJCWNvbnN0IGNoYXIgKm5zdHI7CisKKwkJcCArPSA0OworCQlpZiAodGFnID09IE9GX0RUX05PUCkKKwkJCWNvbnRpbnVlOworCQlpZiAodGFnICE9IE9GX0RUX1BST1ApCisJCQlyZXR1cm4gTlVMTDsKKworCQlzeiA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopcCk7CisJCW5vZmYgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKShwICsgNCkpOworCQlwICs9IDg7CisJCWlmIChiZTMyX3RvX2NwdShpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uKSA8IDB4MTApCisJCQlwID0gX0FMSUdOKHAsIHN6ID49IDggPyA4IDogNCk7CisKKwkJbnN0ciA9IGZpbmRfZmxhdF9kdF9zdHJpbmcobm9mZik7CisJCWlmIChuc3RyID09IE5VTEwpIHsKKwkJCXByX3dhcm5pbmcoIkNhbid0IGZpbmQgcHJvcGVydHkgaW5kZXggbmFtZSAhXG4iKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWlmIChzdHJjbXAobmFtZSwgbnN0cikgPT0gMCkgeworCQkJaWYgKHNpemUpCisJCQkJKnNpemUgPSBzejsKKwkJCXJldHVybiAodm9pZCAqKXA7CisJCX0KKwkJcCArPSBzejsKKwkJcCA9IF9BTElHTihwLCA0KTsKKwl9IHdoaWxlICgxKTsKK30KKworLyoqCisgKiBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUgLSBSZXR1cm4gdHJ1ZSBpZiBnaXZlbiBub2RlIGhhcyBjb21wYXQgaW4gY29tcGF0aWJsZSBsaXN0CisgKiBAbm9kZTogbm9kZSB0byB0ZXN0CisgKiBAY29tcGF0OiBjb21wYXRpYmxlIHN0cmluZyB0byBjb21wYXJlIHdpdGggY29tcGF0aWJsZSBsaXN0LgorICovCitpbnQgX19pbml0IG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKmNvbXBhdCkKK3sKKwljb25zdCBjaGFyICpjcDsKKwl1bnNpZ25lZCBsb25nIGNwbGVuLCBsOworCisJY3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJjb21wYXRpYmxlIiwgJmNwbGVuKTsKKwlpZiAoY3AgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKGNwbGVuID4gMCkgeworCQlpZiAoc3RybmNhc2VjbXAoY3AsIGNvbXBhdCwgc3RybGVuKGNvbXBhdCkpID09IDApCisJCQlyZXR1cm4gMTsKKwkJbCA9IHN0cmxlbihjcCkgKyAxOworCQljcCArPSBsOworCQljcGxlbiAtPSBsOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqX19pbml0IHVuZmxhdHRlbl9kdF9hbGxvYyh1bnNpZ25lZCBsb25nICptZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbikKK3sKKwl2b2lkICpyZXM7CisKKwkqbWVtID0gX0FMSUdOKCptZW0sIGFsaWduKTsKKwlyZXMgPSAodm9pZCAqKSptZW07CisJKm1lbSArPSBzaXplOworCisJcmV0dXJuIHJlczsKK30KKworLyoqCisgKiB1bmZsYXR0ZW5fZHRfbm9kZSAtIEFsbG9jIGFuZCBwb3B1bGF0ZSBhIGRldmljZV9ub2RlIGZyb20gdGhlIGZsYXQgdHJlZQorICogQHA6IHBvaW50ZXIgdG8gbm9kZSBpbiBmbGF0IHRyZWUKKyAqIEBkYWQ6IFBhcmVudCBzdHJ1Y3QgZGV2aWNlX25vZGUKKyAqIEBhbGxuZXh0cHA6IHBvaW50ZXIgdG8gLT5hbGxuZXh0IGZyb20gbGFzdCBhbGxvY2F0ZWQgZGV2aWNlX25vZGUKKyAqIEBmcHNpemU6IFNpemUgb2YgdGhlIG5vZGUgcGF0aCB1cCBhdCB0aGUgY3VycmVudCBkZXB0aC4KKyAqLwordW5zaWduZWQgbG9uZyBfX2luaXQgdW5mbGF0dGVuX2R0X25vZGUodW5zaWduZWQgbG9uZyBtZW0sCisJCQkJCXVuc2lnbmVkIGxvbmcgKnAsCisJCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGFkLAorCQkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKioqYWxsbmV4dHBwLAorCQkJCQl1bnNpZ25lZCBsb25nIGZwc2l6ZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0cnVjdCBwcm9wZXJ0eSAqcHAsICoqcHJldl9wcCA9IE5VTEw7CisJY2hhciAqcGF0aHA7CisJdTMyIHRhZzsKKwl1bnNpZ25lZCBpbnQgbCwgYWxsb2NsOworCWludCBoYXNfbmFtZSA9IDA7CisJaW50IG5ld19mb3JtYXQgPSAwOworCisJdGFnID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikoKnApKTsKKwlpZiAodGFnICE9IE9GX0RUX0JFR0lOX05PREUpIHsKKwkJcHJfZXJyKCJXZWlyZCB0YWcgYXQgc3RhcnQgb2Ygbm9kZTogJXhcbiIsIHRhZyk7CisJCXJldHVybiBtZW07CisJfQorCSpwICs9IDQ7CisJcGF0aHAgPSAoY2hhciAqKSpwOworCWwgPSBhbGxvY2wgPSBzdHJsZW4ocGF0aHApICsgMTsKKwkqcCA9IF9BTElHTigqcCArIGwsIDQpOworCisJLyogdmVyc2lvbiAweDEwIGhhcyBhIG1vcmUgY29tcGFjdCB1bml0IG5hbWUgaGVyZSBpbnN0ZWFkIG9mIHRoZSBmdWxsCisJICogcGF0aC4gd2UgYWNjdW11bGF0ZSB0aGUgZnVsbCBwYXRoIHNpemUgdXNpbmcgImZwc2l6ZSIsIHdlJ2xsIHJlYnVpbGQKKwkgKiBpdCBsYXRlci4gV2UgZGV0ZWN0IHRoaXMgYmVjYXVzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBuYW1lIGlzCisJICogbm90ICcvJy4KKwkgKi8KKwlpZiAoKCpwYXRocCkgIT0gJy8nKSB7CisJCW5ld19mb3JtYXQgPSAxOworCQlpZiAoZnBzaXplID09IDApIHsKKwkJCS8qIHJvb3Qgbm9kZTogc3BlY2lhbCBjYXNlLiBmcHNpemUgYWNjb3VudHMgZm9yIHBhdGgKKwkJCSAqIHBsdXMgdGVybWluYXRpbmcgemVyby4gcm9vdCBub2RlIG9ubHkgaGFzICcvJywgc28KKwkJCSAqIGZwc2l6ZSBzaG91bGQgYmUgMiwgYnV0IHdlIHdhbnQgdG8gYXZvaWQgdGhlIGZpcnN0CisJCQkgKiBsZXZlbCBub2RlcyB0byBoYXZlIHR3byAnLycgc28gd2UgdXNlIGZwc2l6ZSAxIGhlcmUKKwkJCSAqLworCQkJZnBzaXplID0gMTsKKwkJCWFsbG9jbCA9IDI7CisJCX0gZWxzZSB7CisJCQkvKiBhY2NvdW50IGZvciAnLycgYW5kIHBhdGggc2l6ZSBtaW51cyB0ZXJtaW5hbCAwCisJCQkgKiBhbHJlYWR5IGluICdsJworCQkJICovCisJCQlmcHNpemUgKz0gbDsKKwkJCWFsbG9jbCA9IGZwc2l6ZTsKKwkJfQorCX0KKworCW5wID0gdW5mbGF0dGVuX2R0X2FsbG9jKCZtZW0sIHNpemVvZihzdHJ1Y3QgZGV2aWNlX25vZGUpICsgYWxsb2NsLAorCQkJCV9fYWxpZ25vZl9fKHN0cnVjdCBkZXZpY2Vfbm9kZSkpOworCWlmIChhbGxuZXh0cHApIHsKKwkJbWVtc2V0KG5wLCAwLCBzaXplb2YoKm5wKSk7CisJCW5wLT5mdWxsX25hbWUgPSAoKGNoYXIgKilucCkgKyBzaXplb2Yoc3RydWN0IGRldmljZV9ub2RlKTsKKwkJaWYgKG5ld19mb3JtYXQpIHsKKwkJCWNoYXIgKmZuID0gbnAtPmZ1bGxfbmFtZTsKKwkJCS8qIHJlYnVpbGQgZnVsbCBwYXRoIGZvciBuZXcgZm9ybWF0ICovCisJCQlpZiAoZGFkICYmIGRhZC0+cGFyZW50KSB7CisJCQkJc3RyY3B5KGZuLCBkYWQtPmZ1bGxfbmFtZSk7CisjaWZkZWYgREVCVUcKKwkJCQlpZiAoKHN0cmxlbihmbikgKyBsICsgMSkgIT0gYWxsb2NsKSB7CisJCQkJCXByX2RlYnVnKCIlczogcDogJWQsIGw6ICVkLCBhOiAlZFxuIiwKKwkJCQkJCXBhdGhwLCAoaW50KXN0cmxlbihmbiksCisJCQkJCQlsLCBhbGxvY2wpOworCQkJCX0KKyNlbmRpZgorCQkJCWZuICs9IHN0cmxlbihmbik7CisJCQl9CisJCQkqKGZuKyspID0gJy8nOworCQkJbWVtY3B5KGZuLCBwYXRocCwgbCk7CisJCX0gZWxzZQorCQkJbWVtY3B5KG5wLT5mdWxsX25hbWUsIHBhdGhwLCBsKTsKKwkJcHJldl9wcCA9ICZucC0+cHJvcGVydGllczsKKwkJKiphbGxuZXh0cHAgPSBucDsKKwkJKmFsbG5leHRwcCA9ICZucC0+YWxsbmV4dDsKKwkJaWYgKGRhZCAhPSBOVUxMKSB7CisJCQlucC0+cGFyZW50ID0gZGFkOworCQkJLyogd2UgdGVtcG9yYXJpbHkgdXNlIHRoZSBuZXh0IGZpZWxkIGFzIGBsYXN0X2NoaWxkJyovCisJCQlpZiAoZGFkLT5uZXh0ID09IE5VTEwpCisJCQkJZGFkLT5jaGlsZCA9IG5wOworCQkJZWxzZQorCQkJCWRhZC0+bmV4dC0+c2libGluZyA9IG5wOworCQkJZGFkLT5uZXh0ID0gbnA7CisJCX0KKwkJa3JlZl9pbml0KCZucC0+a3JlZik7CisJfQorCXdoaWxlICgxKSB7CisJCXUzMiBzeiwgbm9mZjsKKwkJY2hhciAqcG5hbWU7CisKKwkJdGFnID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikoKnApKTsKKwkJaWYgKHRhZyA9PSBPRl9EVF9OT1ApIHsKKwkJCSpwICs9IDQ7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodGFnICE9IE9GX0RUX1BST1ApCisJCQlicmVhazsKKwkJKnAgKz0gNDsKKwkJc3ogPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSgqcCkpOworCQlub2ZmID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikoKCpwKSArIDQpKTsKKwkJKnAgKz0gODsKKwkJaWYgKGJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPnZlcnNpb24pIDwgMHgxMCkKKwkJCSpwID0gX0FMSUdOKCpwLCBzeiA+PSA4ID8gOCA6IDQpOworCisJCXBuYW1lID0gZmluZF9mbGF0X2R0X3N0cmluZyhub2ZmKTsKKwkJaWYgKHBuYW1lID09IE5VTEwpIHsKKwkJCXByX2luZm8oIkNhbid0IGZpbmQgcHJvcGVydHkgbmFtZSBpbiBsaXN0ICFcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN0cmNtcChwbmFtZSwgIm5hbWUiKSA9PSAwKQorCQkJaGFzX25hbWUgPSAxOworCQlsID0gc3RybGVuKHBuYW1lKSArIDE7CisJCXBwID0gdW5mbGF0dGVuX2R0X2FsbG9jKCZtZW0sIHNpemVvZihzdHJ1Y3QgcHJvcGVydHkpLAorCQkJCQlfX2FsaWdub2ZfXyhzdHJ1Y3QgcHJvcGVydHkpKTsKKwkJaWYgKGFsbG5leHRwcCkgeworCQkJLyogV2UgYWNjZXB0IGZsYXR0ZW5lZCB0cmVlIHBoYW5kbGVzIGVpdGhlciBpbgorCQkJICogZVBBUFItc3R5bGUgInBoYW5kbGUiIHByb3BlcnRpZXMsIG9yIHRoZQorCQkJICogbGVnYWN5ICJsaW51eCxwaGFuZGxlIiBwcm9wZXJ0aWVzLiAgSWYgYm90aAorCQkJICogYXBwZWFyIGFuZCBoYXZlIGRpZmZlcmVudCB2YWx1ZXMsIHRoaW5ncworCQkJICogd2lsbCBnZXQgd2VpcmQuICBEb24ndCBkbyB0aGF0LiAqLworCQkJaWYgKChzdHJjbXAocG5hbWUsICJwaGFuZGxlIikgPT0gMCkgfHwKKwkJCSAgICAoc3RyY21wKHBuYW1lLCAibGludXgscGhhbmRsZSIpID09IDApKSB7CisJCQkJaWYgKG5wLT5waGFuZGxlID09IDApCisJCQkJCW5wLT5waGFuZGxlID0gKigodTMyICopKnApOworCQkJfQorCQkJLyogQW5kIHdlIHByb2Nlc3MgdGhlICJpYm0scGhhbmRsZSIgcHJvcGVydHkKKwkJCSAqIHVzZWQgaW4gcFNlcmllcyBkeW5hbWljIGRldmljZSB0cmVlCisJCQkgKiBzdHVmZiAqLworCQkJaWYgKHN0cmNtcChwbmFtZSwgImlibSxwaGFuZGxlIikgPT0gMCkKKwkJCQlucC0+cGhhbmRsZSA9ICooKHUzMiAqKSpwKTsKKwkJCXBwLT5uYW1lID0gcG5hbWU7CisJCQlwcC0+bGVuZ3RoID0gc3o7CisJCQlwcC0+dmFsdWUgPSAodm9pZCAqKSpwOworCQkJKnByZXZfcHAgPSBwcDsKKwkJCXByZXZfcHAgPSAmcHAtPm5leHQ7CisJCX0KKwkJKnAgPSBfQUxJR04oKCpwKSArIHN6LCA0KTsKKwl9CisJLyogd2l0aCB2ZXJzaW9uIDB4MTAgd2UgbWF5IG5vdCBoYXZlIHRoZSBuYW1lIHByb3BlcnR5LCByZWNyZWF0ZQorCSAqIGl0IGhlcmUgZnJvbSB0aGUgdW5pdCBuYW1lIGlmIGFic2VudAorCSAqLworCWlmICghaGFzX25hbWUpIHsKKwkJY2hhciAqcDEgPSBwYXRocCwgKnBzID0gcGF0aHAsICpwYSA9IE5VTEw7CisJCWludCBzejsKKworCQl3aGlsZSAoKnAxKSB7CisJCQlpZiAoKCpwMSkgPT0gJ0AnKQorCQkJCXBhID0gcDE7CisJCQlpZiAoKCpwMSkgPT0gJy8nKQorCQkJCXBzID0gcDEgKyAxOworCQkJcDErKzsKKwkJfQorCQlpZiAocGEgPCBwcykKKwkJCXBhID0gcDE7CisJCXN6ID0gKHBhIC0gcHMpICsgMTsKKwkJcHAgPSB1bmZsYXR0ZW5fZHRfYWxsb2MoJm1lbSwgc2l6ZW9mKHN0cnVjdCBwcm9wZXJ0eSkgKyBzeiwKKwkJCQkJX19hbGlnbm9mX18oc3RydWN0IHByb3BlcnR5KSk7CisJCWlmIChhbGxuZXh0cHApIHsKKwkJCXBwLT5uYW1lID0gIm5hbWUiOworCQkJcHAtPmxlbmd0aCA9IHN6OworCQkJcHAtPnZhbHVlID0gcHAgKyAxOworCQkJKnByZXZfcHAgPSBwcDsKKwkJCXByZXZfcHAgPSAmcHAtPm5leHQ7CisJCQltZW1jcHkocHAtPnZhbHVlLCBwcywgc3ogLSAxKTsKKwkJCSgoY2hhciAqKXBwLT52YWx1ZSlbc3ogLSAxXSA9IDA7CisJCQlwcl9kZWJ1ZygiZml4ZWQgdXAgbmFtZSBmb3IgJXMgLT4gJXNcbiIsIHBhdGhwLAorCQkJCShjaGFyICopcHAtPnZhbHVlKTsKKwkJfQorCX0KKwlpZiAoYWxsbmV4dHBwKSB7CisJCSpwcmV2X3BwID0gTlVMTDsKKwkJbnAtPm5hbWUgPSBvZl9nZXRfcHJvcGVydHkobnAsICJuYW1lIiwgTlVMTCk7CisJCW5wLT50eXBlID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZGV2aWNlX3R5cGUiLCBOVUxMKTsKKworCQlpZiAoIW5wLT5uYW1lKQorCQkJbnAtPm5hbWUgPSAiPE5VTEw+IjsKKwkJaWYgKCFucC0+dHlwZSkKKwkJCW5wLT50eXBlID0gIjxOVUxMPiI7CisJfQorCXdoaWxlICh0YWcgPT0gT0ZfRFRfQkVHSU5fTk9ERSkgeworCQltZW0gPSB1bmZsYXR0ZW5fZHRfbm9kZShtZW0sIHAsIG5wLCBhbGxuZXh0cHAsIGZwc2l6ZSk7CisJCXRhZyA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopKCpwKSk7CisJfQorCWlmICh0YWcgIT0gT0ZfRFRfRU5EX05PREUpIHsKKwkJcHJfZXJyKCJXZWlyZCB0YWcgYXQgZW5kIG9mIG5vZGU6ICV4XG4iLCB0YWcpOworCQlyZXR1cm4gbWVtOworCX0KKwkqcCArPSA0OworCXJldHVybiBtZW07Cit9CisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKKy8qKgorICogZWFybHlfaW5pdF9kdF9jaGVja19mb3JfaW5pdHJkIC0gRGVjb2RlIGluaXRyZCBsb2NhdGlvbiBmcm9tIGZsYXQgdHJlZQorICogQG5vZGU6IHJlZmVyZW5jZSB0byBub2RlIGNvbnRhaW5pbmcgaW5pdHJkIGxvY2F0aW9uICgnY2hvc2VuJykKKyAqLwordm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9jaGVja19mb3JfaW5pdHJkKHVuc2lnbmVkIGxvbmcgbm9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQsIGxlbjsKKwlfX2JlMzIgKnByb3A7CisKKwlwcl9kZWJ1ZygiTG9va2luZyBmb3IgaW5pdHJkIHByb3BlcnRpZXMuLi4gIik7CisKKwlwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAibGludXgsaW5pdHJkLXN0YXJ0IiwgJmxlbik7CisJaWYgKCFwcm9wKQorCQlyZXR1cm47CisJc3RhcnQgPSBvZl9yZWFkX3Vsb25nKHByb3AsIGxlbi80KTsKKworCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxpbml0cmQtZW5kIiwgJmxlbik7CisJaWYgKCFwcm9wKQorCQlyZXR1cm47CisJZW5kID0gb2ZfcmVhZF91bG9uZyhwcm9wLCBsZW4vNCk7CisKKwllYXJseV9pbml0X2R0X3NldHVwX2luaXRyZF9hcmNoKHN0YXJ0LCBlbmQpOworCXByX2RlYnVnKCJpbml0cmRfc3RhcnQ9MHglbHggIGluaXRyZF9lbmQ9MHglbHhcbiIsIHN0YXJ0LCBlbmQpOworfQorI2Vsc2UKK2lubGluZSB2b2lkIGVhcmx5X2luaXRfZHRfY2hlY2tfZm9yX2luaXRyZCh1bnNpZ25lZCBsb25nIG5vZGUpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU5JVFJEICovCisKKy8qKgorICogZWFybHlfaW5pdF9kdF9zY2FuX3Jvb3QgLSBmZXRjaCB0aGUgdG9wIGxldmVsIGFkZHJlc3MgYW5kIHNpemUgY2VsbHMKKyAqLworaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fcm9vdCh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLAorCQkJCSAgIGludCBkZXB0aCwgdm9pZCAqZGF0YSkKK3sKKwlfX2JlMzIgKnByb3A7CisKKwlpZiAoZGVwdGggIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlkdF9yb290X3NpemVfY2VsbHMgPSBPRl9ST09UX05PREVfU0laRV9DRUxMU19ERUZBVUxUOworCWR0X3Jvb3RfYWRkcl9jZWxscyA9IE9GX1JPT1RfTk9ERV9BRERSX0NFTExTX0RFRkFVTFQ7CisKKwlwcm9wID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiI3NpemUtY2VsbHMiLCBOVUxMKTsKKwlpZiAocHJvcCkKKwkJZHRfcm9vdF9zaXplX2NlbGxzID0gYmUzMl90b19jcHVwKHByb3ApOworCXByX2RlYnVnKCJkdF9yb290X3NpemVfY2VsbHMgPSAleFxuIiwgZHRfcm9vdF9zaXplX2NlbGxzKTsKKworCXByb3AgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICIjYWRkcmVzcy1jZWxscyIsIE5VTEwpOworCWlmIChwcm9wKQorCQlkdF9yb290X2FkZHJfY2VsbHMgPSBiZTMyX3RvX2NwdXAocHJvcCk7CisJcHJfZGVidWcoImR0X3Jvb3RfYWRkcl9jZWxscyA9ICV4XG4iLCBkdF9yb290X2FkZHJfY2VsbHMpOworCisJLyogYnJlYWsgbm93ICovCisJcmV0dXJuIDE7Cit9CisKK3U2NCBfX2luaXQgZHRfbWVtX25leHRfY2VsbChpbnQgcywgX19iZTMyICoqY2VsbHApCit7CisJX19iZTMyICpwID0gKmNlbGxwOworCisJKmNlbGxwID0gcCArIHM7CisJcmV0dXJuIG9mX3JlYWRfbnVtYmVyKHAsIHMpOworfQorCisvKioKKyAqIGVhcmx5X2luaXRfZHRfc2Nhbl9tZW1vcnkgLSBMb29rIGZvciBhbiBwYXJzZSBtZW1vcnkgbm9kZXMKKyAqLworaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fbWVtb3J5KHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCisJCQkJICAgICBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCit7CisJY2hhciAqdHlwZSA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImRldmljZV90eXBlIiwgTlVMTCk7CisJX19iZTMyICpyZWcsICplbmRwOworCXVuc2lnbmVkIGxvbmcgbDsKKworCS8qIFdlIGFyZSBzY2FubmluZyAibWVtb3J5IiBub2RlcyBvbmx5ICovCisJaWYgKHR5cGUgPT0gTlVMTCkgeworCQkvKgorCQkgKiBUaGUgbG9uZ3RyYWlsIGRvZXNuJ3QgaGF2ZSBhIGRldmljZV90eXBlIG9uIHRoZQorCQkgKiAvbWVtb3J5IG5vZGUsIHNvIGxvb2sgZm9yIHRoZSBub2RlIGNhbGxlZCAvbWVtb3J5QDAuCisJCSAqLworCQlpZiAoZGVwdGggIT0gMSB8fCBzdHJjbXAodW5hbWUsICJtZW1vcnlAMCIpICE9IDApCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHN0cmNtcCh0eXBlLCAibWVtb3J5IikgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZWcgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCx1c2FibGUtbWVtb3J5IiwgJmwpOworCWlmIChyZWcgPT0gTlVMTCkKKwkJcmVnID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAicmVnIiwgJmwpOworCWlmIChyZWcgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwllbmRwID0gcmVnICsgKGwgLyBzaXplb2YoX19iZTMyKSk7CisKKwlwcl9kZWJ1ZygibWVtb3J5IHNjYW4gbm9kZSAlcywgcmVnIHNpemUgJWxkLCBkYXRhOiAleCAleCAleCAleCxcbiIsCisJICAgIHVuYW1lLCBsLCByZWdbMF0sIHJlZ1sxXSwgcmVnWzJdLCByZWdbM10pOworCisJd2hpbGUgKChlbmRwIC0gcmVnKSA+PSAoZHRfcm9vdF9hZGRyX2NlbGxzICsgZHRfcm9vdF9zaXplX2NlbGxzKSkgeworCQl1NjQgYmFzZSwgc2l6ZTsKKworCQliYXNlID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X2FkZHJfY2VsbHMsICZyZWcpOworCQlzaXplID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X3NpemVfY2VsbHMsICZyZWcpOworCisJCWlmIChzaXplID09IDApCisJCQljb250aW51ZTsKKwkJcHJfZGVidWcoIiAtICVsbHggLCAgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyliYXNlLAorCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzaXplKTsKKworCQllYXJseV9pbml0X2R0X2FkZF9tZW1vcnlfYXJjaChiYXNlLCBzaXplKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCisJCQkJICAgICBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBsOworCWNoYXIgKnA7CisKKwlwcl9kZWJ1Zygic2VhcmNoIFwiY2hvc2VuXCIsIGRlcHRoOiAlZCwgdW5hbWU6ICVzXG4iLCBkZXB0aCwgdW5hbWUpOworCisJaWYgKGRlcHRoICE9IDEgfHwKKwkgICAgKHN0cmNtcCh1bmFtZSwgImNob3NlbiIpICE9IDAgJiYgc3RyY21wKHVuYW1lLCAiY2hvc2VuQDAiKSAhPSAwKSkKKwkJcmV0dXJuIDA7CisKKwllYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQobm9kZSk7CisKKwkvKiBSZXRyZWl2ZSBjb21tYW5kIGxpbmUgKi8KKwlwID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiYm9vdGFyZ3MiLCAmbCk7CisJaWYgKHAgIT0gTlVMTCAmJiBsID4gMCkKKwkJc3RybGNweShjbWRfbGluZSwgcCwgbWluKChpbnQpbCwgQ09NTUFORF9MSU5FX1NJWkUpKTsKKworI2lmZGVmIENPTkZJR19DTURMSU5FCisjaWZuZGVmIENPTkZJR19DTURMSU5FX0ZPUkNFCisJaWYgKHAgPT0gTlVMTCB8fCBsID09IDAgfHwgKGwgPT0gMSAmJiAoKnApID09IDApKQorI2VuZGlmCisJCXN0cmxjcHkoY21kX2xpbmUsIENPTkZJR19DTURMSU5FLCBDT01NQU5EX0xJTkVfU0laRSk7CisjZW5kaWYgLyogQ09ORklHX0NNRExJTkUgKi8KKworCWVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW5fYXJjaChub2RlKTsKKworCXByX2RlYnVnKCJDb21tYW5kIGxpbmUgaXM6ICVzXG4iLCBjbWRfbGluZSk7CisKKwkvKiBicmVhayBub3cgKi8KKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUgLSBjcmVhdGUgdHJlZSBvZiBkZXZpY2Vfbm9kZXMgZnJvbSBmbGF0IGJsb2IKKyAqCisgKiB1bmZsYXR0ZW5zIHRoZSBkZXZpY2UtdHJlZSBwYXNzZWQgYnkgdGhlIGZpcm13YXJlLCBjcmVhdGluZyB0aGUKKyAqIHRyZWUgb2Ygc3RydWN0IGRldmljZV9ub2RlLiBJdCBhbHNvIGZpbGxzIHRoZSAibmFtZSIgYW5kICJ0eXBlIgorICogcG9pbnRlcnMgb2YgdGhlIG5vZGVzIHNvIHRoZSBub3JtYWwgZGV2aWNlLXRyZWUgd2Fsa2luZyBmdW5jdGlvbnMKKyAqIGNhbiBiZSB1c2VkLgorICovCit2b2lkIF9faW5pdCB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBtZW0sIHNpemU7CisJc3RydWN0IGRldmljZV9ub2RlICoqYWxsbmV4dHAgPSAmYWxsbm9kZXM7CisKKwlwcl9kZWJ1ZygiIC0+IHVuZmxhdHRlbl9kZXZpY2VfdHJlZSgpXG4iKTsKKworCS8qIEZpcnN0IHBhc3MsIHNjYW4gZm9yIHNpemUgKi8KKwlzdGFydCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCisJCWJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3QpOworCXNpemUgPSB1bmZsYXR0ZW5fZHRfbm9kZSgwLCAmc3RhcnQsIE5VTEwsIE5VTEwsIDApOworCXNpemUgPSAoc2l6ZSB8IDMpICsgMTsKKworCXByX2RlYnVnKCIgIHNpemUgaXMgJWx4LCBhbGxvY2F0aW5nLi4uXG4iLCBzaXplKTsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGV4cGFuZGVkIGRldmljZSB0cmVlICovCisJbWVtID0gZWFybHlfaW5pdF9kdF9hbGxvY19tZW1vcnlfYXJjaChzaXplICsgNCwKKwkJCV9fYWxpZ25vZl9fKHN0cnVjdCBkZXZpY2Vfbm9kZSkpOworCW1lbSA9ICh1bnNpZ25lZCBsb25nKSBfX3ZhKG1lbSk7CisKKwkoKF9fYmUzMiAqKW1lbSlbc2l6ZSAvIDRdID0gY3B1X3RvX2JlMzIoMHhkZWFkYmVlZik7CisKKwlwcl9kZWJ1ZygiICB1bmZsYXR0ZW5pbmcgJWx4Li4uXG4iLCBtZW0pOworCisJLyogU2Vjb25kIHBhc3MsIGRvIGFjdHVhbCB1bmZsYXR0ZW5pbmcgKi8KKwlzdGFydCA9ICgodW5zaWduZWQgbG9uZylpbml0aWFsX2Jvb3RfcGFyYW1zKSArCisJCWJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPm9mZl9kdF9zdHJ1Y3QpOworCXVuZmxhdHRlbl9kdF9ub2RlKG1lbSwgJnN0YXJ0LCBOVUxMLCAmYWxsbmV4dHAsIDApOworCWlmIChiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKXN0YXJ0KSAhPSBPRl9EVF9FTkQpCisJCXByX3dhcm5pbmcoIldlaXJkIHRhZyBhdCBlbmQgb2YgdHJlZTogJTA4eFxuIiwgKigodTMyICopc3RhcnQpKTsKKwlpZiAoYmUzMl90b19jcHUoKChfX2JlMzIgKiltZW0pW3NpemUgLyA0XSkgIT0gMHhkZWFkYmVlZikKKwkJcHJfd2FybmluZygiRW5kIG9mIHRyZWUgbWFya2VyIG92ZXJ3cml0dGVuOiAlMDh4XG4iLAorCQkJICAgYmUzMl90b19jcHUoKChfX2JlMzIgKiltZW0pW3NpemUgLyA0XSkpOworCSphbGxuZXh0cCA9IE5VTEw7CisKKwkvKiBHZXQgcG9pbnRlciB0byBPRiAiL2Nob3NlbiIgbm9kZSBmb3IgdXNlIGV2ZXJ5d2hlcmUgKi8KKwlvZl9jaG9zZW4gPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2Nob3NlbiIpOworCWlmIChvZl9jaG9zZW4gPT0gTlVMTCkKKwkJb2ZfY2hvc2VuID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9jaG9zZW5AMCIpOworCisJcHJfZGVidWcoIiA8LSB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUoKVxuIik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2dwaW8uYyBiL2RyaXZlcnMvb2YvZ3Bpby5jCmluZGV4IDZlZWE2MDEuLjI0YzM2MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvZ3Bpby5jCisrKyBiL2RyaXZlcnMvb2YvZ3Bpby5jCkBAIC0zNiw3ICszNiw3IEBACiAJc3RydWN0IG9mX2dwaW9fY2hpcCAqb2ZfZ2MgPSBOVUxMOwogCWludCBzaXplOwogCWNvbnN0IHZvaWQgKmdwaW9fc3BlYzsKLQljb25zdCB1MzIgKmdwaW9fY2VsbHM7CisJY29uc3QgX19iZTMyICpncGlvX2NlbGxzOwogCiAJcmV0ID0gb2ZfcGFyc2VfcGhhbmRsZXNfd2l0aF9hcmdzKG5wLCAiZ3Bpb3MiLCAiI2dwaW8tY2VsbHMiLCBpbmRleCwKIAkJCQkJICAmZ2MsICZncGlvX3NwZWMpOwpAQCAtNTUsNyArNTUsNyBAQAogCiAJZ3Bpb19jZWxscyA9IG9mX2dldF9wcm9wZXJ0eShnYywgIiNncGlvLWNlbGxzIiwgJnNpemUpOwogCWlmICghZ3Bpb19jZWxscyB8fCBzaXplICE9IHNpemVvZigqZ3Bpb19jZWxscykgfHwKLQkJCSpncGlvX2NlbGxzICE9IG9mX2djLT5ncGlvX2NlbGxzKSB7CisJCQliZTMyX3RvX2NwdXAoZ3Bpb19jZWxscykgIT0gb2ZfZ2MtPmdwaW9fY2VsbHMpIHsKIAkJcHJfZGVidWcoIiVzOiB3cm9uZyAjZ3Bpby1jZWxscyBmb3IgJXNcbiIsCiAJCQkgbnAtPmZ1bGxfbmFtZSwgZ2MtPmZ1bGxfbmFtZSk7CiAJCXJldCA9IC1FSU5WQUw7CkBAIC0xMjcsNyArMTI3LDggQEAKIGludCBvZl9ncGlvX3NpbXBsZV94bGF0ZShzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYywgc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCSBjb25zdCB2b2lkICpncGlvX3NwZWMsIGVudW0gb2ZfZ3Bpb19mbGFncyAqZmxhZ3MpCiB7Ci0JY29uc3QgdTMyICpncGlvID0gZ3Bpb19zcGVjOworCWNvbnN0IF9fYmUzMiAqZ3BpbyA9IGdwaW9fc3BlYzsKKwljb25zdCB1MzIgbiA9IGJlMzJfdG9fY3B1cChncGlvKTsKIAogCS8qCiAJICogV2UncmUgZGlzY291cmFnaW5nIGdwaW9fY2VsbHMgPCAyLCBzaW5jZSB0aGF0IHdheSB5b3UnbGwgaGF2ZSB0bwpAQCAtMTQwLDEzICsxNDEsMTMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCpncGlvID4gb2ZfZ2MtPmdjLm5ncGlvKQorCWlmIChuID4gb2ZfZ2MtPmdjLm5ncGlvKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChmbGFncykKLQkJKmZsYWdzID0gZ3Bpb1sxXTsKKwkJKmZsYWdzID0gYmUzMl90b19jcHUoZ3Bpb1sxXSk7CiAKLQlyZXR1cm4gKmdwaW87CisJcmV0dXJuIG47CiB9CiBFWFBPUlRfU1lNQk9MKG9mX2dwaW9fc2ltcGxlX3hsYXRlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9pMmMuYyBiL2RyaXZlcnMvb2Yvb2ZfaTJjLmMKaW5kZXggZmE2NWEyYi4uYTNhNzA4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9pMmMuYworKysgYi9kcml2ZXJzL29mL29mX2kyYy5jCkBAIC0yNSw3ICsyNSw3IEBACiAJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShhZGFwX25vZGUsIG5vZGUpIHsKIAkJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm8gPSB7fTsKIAkJc3RydWN0IGRldl9hcmNoZGF0YSBkZXZfYWQgPSB7fTsKLQkJY29uc3QgdTMyICphZGRyOworCQljb25zdCBfX2JlMzIgKmFkZHI7CiAJCWludCBsZW47CiAKIAkJaWYgKG9mX21vZGFsaWFzX25vZGUobm9kZSwgaW5mby50eXBlLCBzaXplb2YoaW5mby50eXBlKSkgPCAwKQpAQCAtNDAsNyArNDAsNyBAQAogCiAJCWluZm8uaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobm9kZSwgMCk7CiAKLQkJaW5mby5hZGRyID0gKmFkZHI7CisJCWluZm8uYWRkciA9IGJlMzJfdG9fY3B1cChhZGRyKTsKIAogCQlkZXZfYXJjaGRhdGFfc2V0X25vZGUoJmRldl9hZCwgbm9kZSk7CiAJCWluZm8uYXJjaGRhdGEgPSAmZGV2X2FkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9tZGlvLmMgYi9kcml2ZXJzL29mL29mX21kaW8uYwppbmRleCA0YjIyYmE1Li4xOGVjYWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL29mX21kaW8uYworKysgYi9kcml2ZXJzL29mL29mX21kaW8uYwpAQCAtNTEsNyArNTEsNyBAQAogCiAJLyogTG9vcCBvdmVyIHRoZSBjaGlsZCBub2RlcyBhbmQgcmVnaXN0ZXIgYSBwaHlfZGV2aWNlIGZvciBlYWNoIG9uZSAqLwogCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7Ci0JCWNvbnN0IHUzMiAqYWRkcjsKKwkJY29uc3QgX19iZTMyICphZGRyOwogCQlpbnQgbGVuOwogCiAJCS8qIEEgUEhZIG11c3QgaGF2ZSBhIHJlZyBwcm9wZXJ0eSBpbiB0aGUgcmFuZ2UgWzAtMzFdICovCkBAIC02OCw3ICs2OCw3IEBACiAJCQkJbWRpby0+aXJxWyphZGRyXSA9IFBIWV9QT0xMOwogCQl9CiAKLQkJcGh5ID0gZ2V0X3BoeV9kZXZpY2UobWRpbywgKmFkZHIpOworCQlwaHkgPSBnZXRfcGh5X2RldmljZShtZGlvLCBiZTMyX3RvX2NwdXAoYWRkcikpOwogCQlpZiAoIXBoeSkgewogCQkJZGV2X2VycigmbWRpby0+ZGV2LCAiZXJyb3IgcHJvYmluZyBQSFkgYXQgYWRkcmVzcyAlaVxuIiwKIAkJCQkqYWRkcik7CkBAIC0xNjAsNyArMTYwLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5ldF9ucDsKIAljaGFyIGJ1c19pZFtNSUlfQlVTX0lEX1NJWkUgKyAzXTsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5OwotCWNvbnN0IHUzMiAqcGh5X2lkOworCWNvbnN0IF9fYmUzMiAqcGh5X2lkOwogCWludCBzejsKIAogCWlmICghZGV2LT5kZXYucGFyZW50KQpAQCAtMTc0LDcgKzE3NCw3IEBACiAJaWYgKCFwaHlfaWQgfHwgc3ogPCBzaXplb2YoKnBoeV9pZCkpCiAJCXJldHVybiBOVUxMOwogCi0Jc3ByaW50ZihidXNfaWQsIFBIWV9JRF9GTVQsICIwIiwgcGh5X2lkWzBdKTsKKwlzcHJpbnRmKGJ1c19pZCwgUEhZX0lEX0ZNVCwgIjAiLCBiZTMyX3RvX2NwdShwaHlfaWRbMF0pKTsKIAogCXBoeSA9IHBoeV9jb25uZWN0KGRldiwgYnVzX2lkLCBobmRsciwgMCwgaWZhY2UpOwogCXJldHVybiBJU19FUlIocGh5KSA/IE5VTEwgOiBwaHk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX3NwaS5jIGIvZHJpdmVycy9vZi9vZl9zcGkuYwppbmRleCBiZWQwZWQ2Li5mNjVmNDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL29mX3NwaS5jCisrKyBiL2RyaXZlcnMvb2Yvb2Zfc3BpLmMKQEAgLTIzLDcgKzIzLDcgQEAKIHsKIAlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbmM7Ci0JY29uc3QgdTMyICpwcm9wOworCWNvbnN0IF9fYmUzMiAqcHJvcDsKIAlpbnQgcmM7CiAJaW50IGxlbjsKIApAQCAtNTQsNyArNTQsNyBAQAogCQkJc3BpX2Rldl9wdXQoc3BpKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCXNwaS0+Y2hpcF9zZWxlY3QgPSAqcHJvcDsKKwkJc3BpLT5jaGlwX3NlbGVjdCA9IGJlMzJfdG9fY3B1cChwcm9wKTsKIAogCQkvKiBNb2RlIChjbG9jayBwaGFzZS9wb2xhcml0eS9ldGMuKSAqLwogCQlpZiAob2ZfZmluZF9wcm9wZXJ0eShuYywgInNwaS1jcGhhIiwgTlVMTCkpCkBAIC03Miw3ICs3Miw3IEBACiAJCQlzcGlfZGV2X3B1dChzcGkpOwogCQkJY29udGludWU7CiAJCX0KLQkJc3BpLT5tYXhfc3BlZWRfaHogPSAqcHJvcDsKKwkJc3BpLT5tYXhfc3BlZWRfaHogPSBiZTMyX3RvX2NwdXAocHJvcCk7CiAKIAkJLyogSVJRICovCiAJCXNwaS0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobmMsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL0tjb25maWcKaW5kZXggYjFlY2VmYS4uNzg1OGExMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjaS9LY29uZmlnCkBAIC0yMSwxNyArMjEsNiBAQAogCiAJICAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KIAotY29uZmlnIFBDSV9MRUdBQ1kKLQlib29sICJFbmFibGUgZGVwcmVjYXRlZCBwY2lfZmluZF8qIEFQSSIKLQlkZXBlbmRzIG9uIFBDSQotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgZGVwcmVjYXRlZAotCSAgcGNpX2ZpbmRfZGV2aWNlKCkgQVBJLiAgTW9zdCBkcml2ZXJzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgb3ZlcgotCSAgdG8gdXNpbmcgdGhlIHByb3BlciBob3RwbHVnIEFQSXMsIHNvIHRoaXMgb3B0aW9uIHNlcnZlcyB0bwotCSAgaW5jbHVkZS9leGNsdWRlIG9ubHkgYSBmZXcgZHJpdmVycyB0aGF0IGFyZSBzdGlsbCB1c2luZyB0aGlzCi0JICBBUEkuCi0KIGNvbmZpZyBQQ0lfREVCVUcKIAlib29sICJQQ0kgRGVidWdnaW5nIgogCWRlcGVuZHMgb24gUENJICYmIERFQlVHX0tFUk5FTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZQppbmRleCA0ZGY0OGQ1Li44Njc0YzFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZQpAQCAtMiwxNCArMiwxMyBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIFBDSSBidXMgc3BlY2lmaWMgZHJpdmVycy4KICMKIAotb2JqLXkJCSs9IGFjY2Vzcy5vIGJ1cy5vIHByb2JlLm8gcmVtb3ZlLm8gcGNpLm8gcXVpcmtzLm8gXAorb2JqLXkJCSs9IGFjY2Vzcy5vIGJ1cy5vIHByb2JlLm8gcmVtb3ZlLm8gcGNpLm8gXAogCQkJcGNpLWRyaXZlci5vIHNlYXJjaC5vIHBjaS1zeXNmcy5vIHJvbS5vIHNldHVwLXJlcy5vIFwKIAkJCWlycS5vCiBvYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCiBvYmotJChDT05GSUdfU1lTRlMpICs9IHNsb3QubwogCi1vYmotJChDT05GSUdfUENJX0xFR0FDWSkgKz0gbGVnYWN5Lm8KLUNGTEFHU19sZWdhY3kubyArPSAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zCitvYmotJChDT05GSUdfUENJX1FVSVJLUykgKz0gcXVpcmtzLm8KIAogIyBCdWlsZCBQQ0kgRXhwcmVzcyBzdHVmZiBpZiBuZWVkZWQKIG9iai0kKENPTkZJR19QQ0lFUE9SVEJVUykgKz0gcGNpZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2J1cy5jIGIvZHJpdmVycy9wY2kvYnVzLmMKaW5kZXggY2VmMjhhNy4uNzEyMjUwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvYnVzLmMKKysrIGIvZHJpdmVycy9wY2kvYnVzLmMKQEAgLTE3LDYgKzE3LDUyIEBACiAKICNpbmNsdWRlICJwY2kuaCIKIAordm9pZCBwY2lfYnVzX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCSAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBwY2lfYnVzX3Jlc291cmNlICpidXNfcmVzOworCisJYnVzX3JlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfYnVzX3Jlc291cmNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidXNfcmVzKSB7CisJCWRldl9lcnIoJmJ1cy0+ZGV2LCAiY2FuJ3QgYWRkICVwUiByZXNvdXJjZVxuIiwgcmVzKTsKKwkJcmV0dXJuOworCX0KKworCWJ1c19yZXMtPnJlcyA9IHJlczsKKwlidXNfcmVzLT5mbGFncyA9IGZsYWdzOworCWxpc3RfYWRkX3RhaWwoJmJ1c19yZXMtPmxpc3QsICZidXMtPnJlc291cmNlcyk7Cit9CisKK3N0cnVjdCByZXNvdXJjZSAqcGNpX2J1c19yZXNvdXJjZV9uKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBuKQoreworCXN0cnVjdCBwY2lfYnVzX3Jlc291cmNlICpidXNfcmVzOworCisJaWYgKG4gPCBQQ0lfQlJJREdFX1JFU09VUkNFX05VTSkKKwkJcmV0dXJuIGJ1cy0+cmVzb3VyY2Vbbl07CisKKwluIC09IFBDSV9CUklER0VfUkVTT1VSQ0VfTlVNOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzX3JlcywgJmJ1cy0+cmVzb3VyY2VzLCBsaXN0KSB7CisJCWlmIChuLS0gPT0gMCkKKwkJCXJldHVybiBidXNfcmVzLT5yZXM7CisJfQorCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX2J1c19yZXNvdXJjZV9uKTsKKwordm9pZCBwY2lfYnVzX3JlbW92ZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2J1c19yZXNvdXJjZSAqYnVzX3JlcywgKnRtcDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlJJREdFX1JFU09VUkNFX05VTTsgaSsrKQorCQlidXMtPnJlc291cmNlW2ldID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShidXNfcmVzLCB0bXAsICZidXMtPnJlc291cmNlcywgbGlzdCkgeworCQlsaXN0X2RlbCgmYnVzX3Jlcy0+bGlzdCk7CisJCWtmcmVlKGJ1c19yZXMpOworCX0KK30KKwogLyoqCiAgKiBwY2lfYnVzX2FsbG9jX3Jlc291cmNlIC0gYWxsb2NhdGUgYSByZXNvdXJjZSBmcm9tIGEgcGFyZW50IGJ1cwogICogQGJ1czogUENJIGJ1cwpAQCAtMzYsMTEgKzgyLDE0IEBACiBwY2lfYnVzX2FsbG9jX3Jlc291cmNlKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduLAogCQlyZXNvdXJjZV9zaXplX3QgbWluLCB1bnNpZ25lZCBpbnQgdHlwZV9tYXNrLAotCQl2b2lkICgqYWxpZ25mKSh2b2lkICosIHN0cnVjdCByZXNvdXJjZSAqLCByZXNvdXJjZV9zaXplX3QsCi0JCQkJcmVzb3VyY2Vfc2l6ZV90KSwKKwkJcmVzb3VyY2Vfc2l6ZV90ICgqYWxpZ25mKSh2b2lkICosCisJCQkJCSAgY29uc3Qgc3RydWN0IHJlc291cmNlICosCisJCQkJCSAgcmVzb3VyY2Vfc2l6ZV90LAorCQkJCQkgIHJlc291cmNlX3NpemVfdCksCiAJCXZvaWQgKmFsaWduZl9kYXRhKQogewogCWludCBpLCByZXQgPSAtRU5PTUVNOworCXN0cnVjdCByZXNvdXJjZSAqcjsKIAlyZXNvdXJjZV9zaXplX3QgbWF4ID0gLTE7CiAKIAl0eXBlX21hc2sgfD0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNOwpAQCAtNDksOCArOTgsNyBAQAogCWlmICghKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTV82NCkpCiAJCW1heCA9IFBDSUJJT1NfTUFYX01FTV8zMjsKIAotCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSBidXMtPnJlc291cmNlW2ldOworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByLCBpKSB7CiAJCWlmICghcikKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2NvcmUuYwppbmRleCA0ZGQ3MTE0Li5lZmE5ZjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9jb3JlLmMKQEAgLTMzMiw4ICszMzIsNiBAQAogCXNsb3QtPmhvdHBsdWdfc2xvdC0+aW5mby0+YXR0ZW50aW9uX3N0YXR1cyA9IDA7CiAJc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvLT5sYXRjaF9zdGF0dXMgPSBhY3BpcGhwX2dldF9sYXRjaF9zdGF0dXMoc2xvdC0+YWNwaV9zbG90KTsKIAlzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8tPmFkYXB0ZXJfc3RhdHVzID0gYWNwaXBocF9nZXRfYWRhcHRlcl9zdGF0dXMoc2xvdC0+YWNwaV9zbG90KTsKLQlzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8tPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKLQlzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8tPmN1cl9idXNfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKIAogCWFjcGlwaHBfc2xvdC0+c2xvdCA9IHNsb3Q7CiAJc25wcmludGYobmFtZSwgU0xPVF9OQU1FX1NJWkUsICIlbGx1Iiwgc2xvdC0+YWNwaV9zbG90LT5zdW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpaHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpaHBfZ2VuZXJpYy5jCmluZGV4IDE0OGZiNDYuLmZiM2Y4NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaWhwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2locF9nZW5lcmljLmMKQEAgLTE2Miw2ICsxNjIsNyBAQAogCWRldiA9IHBjaV9nZXRfc2xvdChidXMsIFBDSV9ERVZGTihicmlkZ2Vfc2xvdCwgMCkpOwogCWlmKCFkZXYgfHwgZGV2LT5oZHJfdHlwZSAhPSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7CiAJCWVycigiSW52YWxpZCBicmlkZ2UgZGV2aWNlICVzIiwgYnJpZGdlKTsKKwkJcGNpX2Rldl9wdXQoZGV2KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWJ1cyA9IGRldi0+c3Vib3JkaW5hdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHAuaAppbmRleCA5YzZhOWZkLi5kOGZmYzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmgKQEAgLTMxMCw4ICszMTAsNiBAQAogCXU4IGZpcnN0X3Nsb3Q7CiAJdTggYWRkX3N1cHBvcnQ7CiAJdTggcHVzaF9mbGFnOwotCWVudW0gcGNpX2J1c19zcGVlZCBzcGVlZDsKLQllbnVtIHBjaV9idXNfc3BlZWQgc3BlZWRfY2FwYWJpbGl0eTsKIAl1OCBwdXNoX2J1dHRvbjsJCQkvKiAwID0gbm8gcHVzaGJ1dHRvbiwgMSA9IHB1c2hidXR0b24gcHJlc2VudCAqLwogCXU4IHNsb3Rfc3dpdGNoX3R5cGU7CQkvKiAwID0gbm8gc3dpdGNoLCAxID0gc3dpdGNoIHByZXNlbnQgKi8KIAl1OCBkZWZlYXR1cmVfUEhQOwkJLyogMCA9IFBIUCBub3Qgc3VwcG9ydGVkLCAxID0gUEhQIHN1cHBvcnRlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY29yZS5jCmluZGV4IDA3NWI0ZjQuLmYxODRkMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jb3JlLmMKQEAgLTU4MywzMCArNTgzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRfbWF4X2J1c19zcGVlZCAoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQotewotCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gc2xvdC0+Y3RybDsKLQotCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fZnVuY19fLCBzbG90X25hbWUoc2xvdCkpOwotCi0JKnZhbHVlID0gY3RybC0+c3BlZWRfY2FwYWJpbGl0eTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGdldF9jdXJfYnVzX3NwZWVkIChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCi17Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSBob3RwbHVnX3Nsb3QtPnByaXZhdGU7Ci0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBzbG90LT5jdHJsOwotCi0JZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7Ci0KLQkqdmFsdWUgPSBjdHJsLT5zcGVlZDsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IGhvdHBsdWdfc2xvdF9vcHMgY3BxcGhwX2hvdHBsdWdfc2xvdF9vcHMgPSB7CiAJLnNldF9hdHRlbnRpb25fc3RhdHVzID0Jc2V0X2F0dGVudGlvbl9zdGF0dXMsCiAJLmVuYWJsZV9zbG90ID0JCXByb2Nlc3NfU0ksCkBAIC02MTYsOCArNTkyLDYgQEAKIAkuZ2V0X2F0dGVudGlvbl9zdGF0dXMgPQlnZXRfYXR0ZW50aW9uX3N0YXR1cywKIAkuZ2V0X2xhdGNoX3N0YXR1cyA9CWdldF9sYXRjaF9zdGF0dXMsCiAJLmdldF9hZGFwdGVyX3N0YXR1cyA9CWdldF9hZGFwdGVyX3N0YXR1cywKLQkuZ2V0X21heF9idXNfc3BlZWQgPQlnZXRfbWF4X2J1c19zcGVlZCwKLQkuZ2V0X2N1cl9idXNfc3BlZWQgPQlnZXRfY3VyX2J1c19zcGVlZCwKIH07CiAKICNkZWZpbmUgU0xPVF9OQU1FX1NJWkUgMTAKQEAgLTYyOSw2ICs2MDMsNyBAQAogCXN0cnVjdCBzbG90ICpzbG90OwogCXN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdDsKIAlzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8gKmhvdHBsdWdfc2xvdF9pbmZvOworCXN0cnVjdCBwY2lfYnVzICpidXMgPSBjdHJsLT5wY2lfYnVzOwogCXU4IG51bWJlcl9vZl9zbG90czsKIAl1OCBzbG90X2RldmljZTsKIAl1OCBzbG90X251bWJlcjsKQEAgLTY5NCw3ICs2NjksNyBAQAogCQkJc2xvdC0+Y2FwYWJpbGl0aWVzIHw9IFBDSVNMT1RfNjRfQklUX1NVUFBPUlRFRDsKIAkJaWYgKGlzX3Nsb3Q2Nm1oeihzbG90KSkKIAkJCXNsb3QtPmNhcGFiaWxpdGllcyB8PSBQQ0lTTE9UXzY2X01IWl9TVVBQT1JURUQ7Ci0JCWlmIChjdHJsLT5zcGVlZCA9PSBQQ0lfU1BFRURfNjZNSHopCisJCWlmIChidXMtPmN1cl9idXNfc3BlZWQgPT0gUENJX1NQRUVEXzY2TUh6KQogCQkJc2xvdC0+Y2FwYWJpbGl0aWVzIHw9IFBDSVNMT1RfNjZfTUhaX09QRVJBVElPTjsKIAogCQljdHJsX3Nsb3QgPQpAQCAtODQ0LDYgKzgxOSw3IEBACiAJdTMyIHJjOwogCXN0cnVjdCBjb250cm9sbGVyICpjdHJsOwogCXN0cnVjdCBwY2lfZnVuYyAqZnVuYzsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzOwogCWludCBlcnI7CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKQEAgLTg1Miw2ICs4MjgsNyBAQAogCQkJcGNpX25hbWUocGRldiksIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQorCWJ1cyA9IHBkZXYtPnN1Ym9yZGluYXRlOwogCiAJLyogTmVlZCB0byByZWFkIFZJRCBlYXJseSBiL2MgaXQncyB1c2VkIHRvIGRpZmZlcmVudGlhdGUgQ1BRIGFuZCBJTlRDCiAJICogZGlzY292ZXJ5CkBAIC05MjksMjIgKzkwNiwyMiBAQAogCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHg0MSwgJmJ1c19jYXApOwogCQkJaWYgKGJ1c19jYXAgJiAweDgwKSB7CiAJCQkJZGJnKCJidXMgbWF4IHN1cHBvcnRzIDEzM01IeiBQQ0ktWFxuIik7Ci0JCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWDsKKwkJCQlidXMtPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVg7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAoYnVzX2NhcCAmIDB4NDApIHsKIAkJCQlkYmcoImJ1cyBtYXggc3VwcG9ydHMgMTAwTUh6IFBDSS1YXG4iKTsKLQkJCQljdHJsLT5zcGVlZF9jYXBhYmlsaXR5ID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYOworCQkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWDsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChidXNfY2FwICYgMjApIHsKIAkJCQlkYmcoImJ1cyBtYXggc3VwcG9ydHMgNjZNSHogUENJLVhcbiIpOwotCQkJCWN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKKwkJCQlidXMtPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChidXNfY2FwICYgMTApIHsKIAkJCQlkYmcoImJ1cyBtYXggc3VwcG9ydHMgNjZNSHogUENJXG4iKTsKLQkJCQljdHJsLT5zcGVlZF9jYXBhYmlsaXR5ID0gUENJX1NQRUVEXzY2TUh6OworCQkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1IejsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtOTU1LDcgKzkzMiw3IEBACiAJCWNhc2UgUENJX1NVQl9IUENfSUQ6CiAJCQkvKiBPcmlnaW5hbCA2NTAwLzcwMDAgaW1wbGVtZW50YXRpb24gKi8KIAkJCWN0cmwtPnNsb3Rfc3dpdGNoX3R5cGUgPSAxOwotCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF8zM01IejsKKwkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF8zM01IejsKIAkJCWN0cmwtPnB1c2hfYnV0dG9uID0gMDsKIAkJCWN0cmwtPnBjaV9jb25maWdfc3BhY2UgPSAxOwogCQkJY3RybC0+ZGVmZWF0dXJlX1BIUCA9IDE7CkBAIC05NjYsNyArOTQzLDcgQEAKIAkJCS8qIEZpcnN0IFB1c2hidXR0b24gaW1wbGVtZW50YXRpb24gKi8KIAkJCWN0cmwtPnB1c2hfZmxhZyA9IDE7CiAJCQljdHJsLT5zbG90X3N3aXRjaF90eXBlID0gMTsKLQkJCWN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPSBQQ0lfU1BFRURfMzNNSHo7CisJCQlidXMtPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfMzNNSHo7CiAJCQljdHJsLT5wdXNoX2J1dHRvbiA9IDE7CiAJCQljdHJsLT5wY2lfY29uZmlnX3NwYWNlID0gMTsKIAkJCWN0cmwtPmRlZmVhdHVyZV9QSFAgPSAxOwpAQCAtOTc2LDcgKzk1Myw3IEBACiAJCWNhc2UgUENJX1NVQl9IUENfSURfSU5UQzoKIAkJCS8qIFRoaXJkIHBhcnR5ICg2NTAwLzcwMDApICovCiAJCQljdHJsLT5zbG90X3N3aXRjaF90eXBlID0gMTsKLQkJCWN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPSBQQ0lfU1BFRURfMzNNSHo7CisJCQlidXMtPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfMzNNSHo7CiAJCQljdHJsLT5wdXNoX2J1dHRvbiA9IDA7CiAJCQljdHJsLT5wY2lfY29uZmlnX3NwYWNlID0gMTsKIAkJCWN0cmwtPmRlZmVhdHVyZV9QSFAgPSAxOwpAQCAtOTg3LDcgKzk2NCw3IEBACiAJCQkvKiBGaXJzdCA2NiBNaHogaW1wbGVtZW50YXRpb24gKi8KIAkJCWN0cmwtPnB1c2hfZmxhZyA9IDE7CiAJCQljdHJsLT5zbG90X3N3aXRjaF90eXBlID0gMTsKLQkJCWN0cmwtPnNwZWVkX2NhcGFiaWxpdHkgPSBQQ0lfU1BFRURfNjZNSHo7CisJCQlidXMtPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHo7CiAJCQljdHJsLT5wdXNoX2J1dHRvbiA9IDE7CiAJCQljdHJsLT5wY2lfY29uZmlnX3NwYWNlID0gMTsKIAkJCWN0cmwtPmRlZmVhdHVyZV9QSFAgPSAxOwpAQCAtOTk4LDcgKzk3NSw3IEBACiAJCQkvKiBGaXJzdCBQQ0ktWCBpbXBsZW1lbnRhdGlvbiwgMTAwTUh6ICovCiAJCQljdHJsLT5wdXNoX2ZsYWcgPSAxOwogCQkJY3RybC0+c2xvdF9zd2l0Y2hfdHlwZSA9IDE7Ci0JCQljdHJsLT5zcGVlZF9jYXBhYmlsaXR5ID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYOworCQkJYnVzLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYOwogCQkJY3RybC0+cHVzaF9idXR0b24gPSAxOwogCQkJY3RybC0+cGNpX2NvbmZpZ19zcGFjZSA9IDE7CiAJCQljdHJsLT5kZWZlYXR1cmVfUEhQID0gMTsKQEAgLTEwMTUsOSArOTkyLDkgQEAKIAljYXNlIFBDSV9WRU5ET1JfSURfSU5URUw6CiAJCS8qIENoZWNrIGZvciBzcGVlZCBjYXBhYmlsaXR5ICgwPTMzLCAxPTY2KSAqLwogCQlpZiAoc3Vic3lzdGVtX2RldmljZWlkICYgMHgwMDAxKQotCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF82Nk1IejsKKwkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1IejsKIAkJZWxzZQotCQkJY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA9IFBDSV9TUEVFRF8zM01IejsKKwkJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF8zM01IejsKIAogCQkvKiBDaGVjayBmb3IgcHVzaCBidXR0b24gKi8KIAkJaWYgKHN1YnN5c3RlbV9kZXZpY2VpZCAmIDB4MDAwMikKQEAgLTEwNzksNyArMTA1Niw3IEBACiAJCQkJCXBkZXYtPmJ1cy0+bnVtYmVyKTsKIAogCWRiZygiSG90cGx1ZyBjb250cm9sbGVyIGNhcGFiaWxpdGllczpcbiIpOwotCWRiZygiICAgIHNwZWVkX2NhcGFiaWxpdHkgICAgICAgJWRcbiIsIGN0cmwtPnNwZWVkX2NhcGFiaWxpdHkpOworCWRiZygiICAgIHNwZWVkX2NhcGFiaWxpdHkgICAgICAgJWRcbiIsIGJ1cy0+bWF4X2J1c19zcGVlZCk7CiAJZGJnKCIgICAgc2xvdF9zd2l0Y2hfdHlwZSAgICAgICAlc1xuIiwgY3RybC0+c2xvdF9zd2l0Y2hfdHlwZSA/CiAJCQkJCSJzd2l0Y2ggcHJlc2VudCIgOiAibm8gc3dpdGNoIik7CiAJZGJnKCIgICAgZGVmZWF0dXJlX1BIUCAgICAgICAgICAlc1xuIiwgY3RybC0+ZGVmZWF0dXJlX1BIUCA/CkBAIC0xMTQyLDcgKzExMTksNyBAQAogCX0KIAogCS8qIENoZWNrIGZvciA2Nk1oeiBvcGVyYXRpb24gKi8KLQljdHJsLT5zcGVlZCA9IGdldF9jb250cm9sbGVyX3NwZWVkKGN0cmwpOworCWJ1cy0+Y3VyX2J1c19zcGVlZCA9IGdldF9jb250cm9sbGVyX3NwZWVkKGN0cmwpOwogCiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2N0cmwuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2N0cmwuYwppbmRleCAwZmY2ODlhLi5lNDM5MDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jdHJsLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY3RybC5jCkBAIC0xMTMwLDEyICsxMTMwLDEzIEBACiBzdGF0aWMgdTggc2V0X2NvbnRyb2xsZXJfc3BlZWQoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHU4IGFkYXB0ZXJfc3BlZWQsIHU4IGhwX3Nsb3QpCiB7CiAJc3RydWN0IHNsb3QgKnNsb3Q7CisJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGN0cmwtPnBjaV9idXM7CiAJdTggcmVnOwogCXU4IHNsb3RfcG93ZXIgPSByZWFkYihjdHJsLT5ocGNfcmVnICsgU0xPVF9QT1dFUik7CiAJdTE2IHJlZzE2OwogCXUzMiBsZWRzID0gcmVhZGwoY3RybC0+aHBjX3JlZyArIExFRF9DT05UUk9MKTsKIAotCWlmIChjdHJsLT5zcGVlZCA9PSBhZGFwdGVyX3NwZWVkKQorCWlmIChidXMtPmN1cl9idXNfc3BlZWQgPT0gYWRhcHRlcl9zcGVlZCkKIAkJcmV0dXJuIDA7CiAKIAkvKiBXZSBkb24ndCBhbGxvdyBmcmVxL21vZGUgY2hhbmdlcyBpZiB3ZSBmaW5kIGFub3RoZXIgYWRhcHRlciBydW5uaW5nCkBAIC0xMTUyLDcgKzExNTMsNyBAQAogCQkgKiBsb3dlciBzcGVlZC9tb2RlLCB3ZSBhbGxvdyB0aGUgbmV3IGFkYXB0ZXIgdG8gZnVuY3Rpb24gYXQKIAkJICogdGhpcyByYXRlIGlmIHN1cHBvcnRlZAogCQkgKi8KLQkJaWYgKGN0cmwtPnNwZWVkIDwgYWRhcHRlcl9zcGVlZCkKKwkJaWYgKGJ1cy0+Y3VyX2J1c19zcGVlZCA8IGFkYXB0ZXJfc3BlZWQpCiAJCQlyZXR1cm4gMDsKIAogCQlyZXR1cm4gMTsKQEAgLTExNjEsMjAgKzExNjIsMjAgQEAKIAkvKiBJZiB0aGUgY29udHJvbGxlciBkb2Vzbid0IHN1cHBvcnQgZnJlcS9tb2RlIGNoYW5nZXMgYW5kIHRoZQogCSAqIGNvbnRyb2xsZXIgaXMgcnVubmluZyBhdCBhIGhpZ2hlciBtb2RlLCB3ZSBiYWlsCiAJICovCi0JaWYgKChjdHJsLT5zcGVlZCA+IGFkYXB0ZXJfc3BlZWQpICYmICghY3RybC0+cGNpeF9zcGVlZF9jYXBhYmlsaXR5KSkKKwlpZiAoKGJ1cy0+Y3VyX2J1c19zcGVlZCA+IGFkYXB0ZXJfc3BlZWQpICYmICghY3RybC0+cGNpeF9zcGVlZF9jYXBhYmlsaXR5KSkKIAkJcmV0dXJuIDE7CiAKIAkvKiBCdXQgd2UgYWxsb3cgdGhlIGFkYXB0ZXIgdG8gcnVuIGF0IGEgbG93ZXIgcmF0ZSBpZiBwb3NzaWJsZSAqLwotCWlmICgoY3RybC0+c3BlZWQgPCBhZGFwdGVyX3NwZWVkKSAmJiAoIWN0cmwtPnBjaXhfc3BlZWRfY2FwYWJpbGl0eSkpCisJaWYgKChidXMtPmN1cl9idXNfc3BlZWQgPCBhZGFwdGVyX3NwZWVkKSAmJiAoIWN0cmwtPnBjaXhfc3BlZWRfY2FwYWJpbGl0eSkpCiAJCXJldHVybiAwOwogCiAJLyogV2UgdHJ5IHRvIHNldCB0aGUgbWF4IHNwZWVkIHN1cHBvcnRlZCBieSBib3RoIHRoZSBhZGFwdGVyIGFuZAogCSAqIGNvbnRyb2xsZXIKIAkgKi8KLQlpZiAoY3RybC0+c3BlZWRfY2FwYWJpbGl0eSA8IGFkYXB0ZXJfc3BlZWQpIHsKLQkJaWYgKGN0cmwtPnNwZWVkID09IGN0cmwtPnNwZWVkX2NhcGFiaWxpdHkpCisJaWYgKGJ1cy0+bWF4X2J1c19zcGVlZCA8IGFkYXB0ZXJfc3BlZWQpIHsKKwkJaWYgKGJ1cy0+Y3VyX2J1c19zcGVlZCA9PSBidXMtPm1heF9idXNfc3BlZWQpCiAJCQlyZXR1cm4gMDsKLQkJYWRhcHRlcl9zcGVlZCA9IGN0cmwtPnNwZWVkX2NhcGFiaWxpdHk7CisJCWFkYXB0ZXJfc3BlZWQgPSBidXMtPm1heF9idXNfc3BlZWQ7CiAJfQogCiAJd3JpdGVsKDB4MEwsIGN0cmwtPmhwY19yZWcgKyBMRURfQ09OVFJPTCk7CkBAIC0xMjI5LDggKzEyMzAsOCBAQAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShjdHJsLT5wY2lfZGV2LCAweDQzLCByZWcpOwogCiAJLyogT25seSBpZiBtb2RlIGNoYW5nZS4uLiovCi0JaWYgKCgoY3RybC0+c3BlZWQgPT0gUENJX1NQRUVEXzY2TUh6KSAmJiAoYWRhcHRlcl9zcGVlZCA9PSBQQ0lfU1BFRURfNjZNSHpfUENJWCkpIHx8Ci0JCSgoY3RybC0+c3BlZWQgPT0gUENJX1NQRUVEXzY2TUh6X1BDSVgpICYmIChhZGFwdGVyX3NwZWVkID09IFBDSV9TUEVFRF82Nk1IeikpKSAKKwlpZiAoKChidXMtPmN1cl9idXNfc3BlZWQgPT0gUENJX1NQRUVEXzY2TUh6KSAmJiAoYWRhcHRlcl9zcGVlZCA9PSBQQ0lfU1BFRURfNjZNSHpfUENJWCkpIHx8CisJCSgoYnVzLT5jdXJfYnVzX3NwZWVkID09IFBDSV9TUEVFRF82Nk1Iel9QQ0lYKSAmJiAoYWRhcHRlcl9zcGVlZCA9PSBQQ0lfU1BFRURfNjZNSHopKSkgCiAJCQlzZXRfU09HTyhjdHJsKTsKIAogCXdhaXRfZm9yX2N0cmxfaXJxKGN0cmwpOwpAQCAtMTI0Myw3ICsxMjQ0LDcgQEAKIAlzZXRfU09HTyhjdHJsKTsKIAl3YWl0X2Zvcl9jdHJsX2lycShjdHJsKTsKIAotCWN0cmwtPnNwZWVkID0gYWRhcHRlcl9zcGVlZDsKKwlidXMtPmN1cl9idXNfc3BlZWQgPSBhZGFwdGVyX3NwZWVkOwogCXNsb3QgPSBjcHFocF9maW5kX3Nsb3QoY3RybCwgaHBfc2xvdCArIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCk7CiAKIAlpbmZvKCJTdWNjZXNzZnVsbHkgY2hhbmdlZCBmcmVxdWVuY3kvbW9kZSBmb3IgYWRhcHRlciBpbiBzbG90ICVkXG4iLApAQCAtMTI2OSw2ICsxMjcwLDcgQEAKICAqLwogc3RhdGljIHUzMiBib2FyZF9yZXBsYWNlZChzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsIHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQogeworCXN0cnVjdCBwY2lfYnVzICpidXMgPSBjdHJsLT5wY2lfYnVzOwogCXU4IGhwX3Nsb3Q7CiAJdTggdGVtcF9ieXRlOwogCXU4IGFkYXB0ZXJfc3BlZWQ7CkBAIC0xMzA5LDcgKzEzMTEsNyBAQAogCQl3YWl0X2Zvcl9jdHJsX2lycSAoY3RybCk7CiAKIAkJYWRhcHRlcl9zcGVlZCA9IGdldF9hZGFwdGVyX3NwZWVkKGN0cmwsIGhwX3Nsb3QpOwotCQlpZiAoY3RybC0+c3BlZWQgIT0gYWRhcHRlcl9zcGVlZCkKKwkJaWYgKGJ1cy0+Y3VyX2J1c19zcGVlZCAhPSBhZGFwdGVyX3NwZWVkKQogCQkJaWYgKHNldF9jb250cm9sbGVyX3NwZWVkKGN0cmwsIGFkYXB0ZXJfc3BlZWQsIGhwX3Nsb3QpKQogCQkJCXJjID0gV1JPTkdfQlVTX0ZSRVFVRU5DWTsKIApAQCAtMTQyNiw2ICsxNDI4LDcgQEAKIAl1MzIgdGVtcF9yZWdpc3RlciA9IDB4RkZGRkZGRkY7CiAJdTMyIHJjID0gMDsKIAlzdHJ1Y3QgcGNpX2Z1bmMgKm5ld19zbG90ID0gTlVMTDsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gY3RybC0+cGNpX2J1czsKIAlzdHJ1Y3Qgc2xvdCAqcF9zbG90OwogCXN0cnVjdCByZXNvdXJjZV9saXN0cyByZXNfbGlzdHM7CiAKQEAgLTE0NTYsNyArMTQ1OSw3IEBACiAJd2FpdF9mb3JfY3RybF9pcnEgKGN0cmwpOwogCiAJYWRhcHRlcl9zcGVlZCA9IGdldF9hZGFwdGVyX3NwZWVkKGN0cmwsIGhwX3Nsb3QpOwotCWlmIChjdHJsLT5zcGVlZCAhPSBhZGFwdGVyX3NwZWVkKQorCWlmIChidXMtPmN1cl9idXNfc3BlZWQgIT0gYWRhcHRlcl9zcGVlZCkKIAkJaWYgKHNldF9jb250cm9sbGVyX3NwZWVkKGN0cmwsIGFkYXB0ZXJfc3BlZWQsIGhwX3Nsb3QpKQogCQkJcmMgPSBXUk9OR19CVVNfRlJFUVVFTkNZOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9jb3JlLmMKaW5kZXggNzQ4NWZmZC4uZDkzNGRkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2NvcmUuYwpAQCAtMzk1LDg5ICszOTUsNDAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X21heF9idXNfc3BlZWQoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQorc3RhdGljIGludCBnZXRfbWF4X2J1c19zcGVlZChzdHJ1Y3Qgc2xvdCAqc2xvdCkKIHsKLQlpbnQgcmMgPSAtRU5PREVWOwotCXN0cnVjdCBzbG90ICpwc2xvdDsKKwlpbnQgcmM7CiAJdTggbW9kZSA9IDA7CisJZW51bSBwY2lfYnVzX3NwZWVkIHNwZWVkOworCXN0cnVjdCBwY2lfYnVzICpidXMgPSBzbG90LT5ob3RwbHVnX3Nsb3QtPnBjaV9zbG90LT5idXM7CiAKLQlkZWJ1ZygiJXMgLSBFbnRyeSBob3RwbHVnX3Nsb3RbJXBdIHB2YWx1ZVslcF1cbiIsIF9fZnVuY19fLAotCQlob3RwbHVnX3Nsb3QsIHZhbHVlKTsKKwlkZWJ1ZygiJXMgLSBFbnRyeSBzbG90WyVwXVxuIiwgX19mdW5jX18sIHNsb3QpOwogCiAJaWJtcGhwX2xvY2tfb3BlcmF0aW9ucygpOworCW1vZGUgPSBzbG90LT5zdXBwb3J0ZWRfYnVzX21vZGU7CisJc3BlZWQgPSBzbG90LT5zdXBwb3J0ZWRfc3BlZWQ7IAorCWlibXBocF91bmxvY2tfb3BlcmF0aW9ucygpOwogCi0JaWYgKGhvdHBsdWdfc2xvdCkgewotCQlwc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKLQkJaWYgKHBzbG90KSB7Ci0JCQlyYyA9IDA7Ci0JCQltb2RlID0gcHNsb3QtPnN1cHBvcnRlZF9idXNfbW9kZTsKLQkJCSp2YWx1ZSA9IHBzbG90LT5zdXBwb3J0ZWRfc3BlZWQ7IAotCQkJc3dpdGNoICgqdmFsdWUpIHsKLQkJCWNhc2UgQlVTX1NQRUVEXzMzOgotCQkJCWJyZWFrOwotCQkJY2FzZSBCVVNfU1BFRURfNjY6Ci0JCQkJaWYgKG1vZGUgPT0gQlVTX01PREVfUENJWCkgCi0JCQkJCSp2YWx1ZSArPSAweDAxOwotCQkJCWJyZWFrOwotCQkJY2FzZSBCVVNfU1BFRURfMTAwOgotCQkJY2FzZSBCVVNfU1BFRURfMTMzOgotCQkJCSp2YWx1ZSA9IHBzbG90LT5zdXBwb3J0ZWRfc3BlZWQgKyAweDAxOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQkvKiBOb3RlICh3aWxsIG5lZWQgdG8gY2hhbmdlKTogdGhlcmUgd291bGQgYmUgc29vbiAyNTYsIDUxMiBhbHNvICovCi0JCQkJcmMgPSAtRU5PREVWOwotCQkJfQotCQl9CisJc3dpdGNoIChzcGVlZCkgeworCWNhc2UgQlVTX1NQRUVEXzMzOgorCQlicmVhazsKKwljYXNlIEJVU19TUEVFRF82NjoKKwkJaWYgKG1vZGUgPT0gQlVTX01PREVfUENJWCkgCisJCQlzcGVlZCArPSAweDAxOworCQlicmVhazsKKwljYXNlIEJVU19TUEVFRF8xMDA6CisJY2FzZSBCVVNfU1BFRURfMTMzOgorCQlzcGVlZCArPSAweDAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBOb3RlICh3aWxsIG5lZWQgdG8gY2hhbmdlKTogdGhlcmUgd291bGQgYmUgc29vbiAyNTYsIDUxMiBhbHNvICovCisJCXJjID0gLUVOT0RFVjsKIAl9CiAKLQlpYm1waHBfdW5sb2NrX29wZXJhdGlvbnMoKTsKLQlkZWJ1ZygiJXMgLSBFeGl0IHJjWyVkXSB2YWx1ZVsleF1cbiIsIF9fZnVuY19fLCByYywgKnZhbHVlKTsKLQlyZXR1cm4gcmM7Ci19CisJaWYgKCFyYykKKwkJYnVzLT5tYXhfYnVzX3NwZWVkID0gc3BlZWQ7CiAKLXN0YXRpYyBpbnQgZ2V0X2N1cl9idXNfc3BlZWQoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQotewotCWludCByYyA9IC1FTk9ERVY7Ci0Jc3RydWN0IHNsb3QgKnBzbG90OwotCXU4IG1vZGUgPSAwOwotCi0JZGVidWcoIiVzIC0gRW50cnkgaG90cGx1Z19zbG90WyVwXSBwdmFsdWVbJXBdXG4iLCBfX2Z1bmNfXywKLQkJaG90cGx1Z19zbG90LCB2YWx1ZSk7Ci0KLQlpYm1waHBfbG9ja19vcGVyYXRpb25zKCk7Ci0KLQlpZiAoaG90cGx1Z19zbG90KSB7Ci0JCXBzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwotCQlpZiAocHNsb3QpIHsKLQkJCXJjID0gZ2V0X2N1cl9idXNfaW5mbygmcHNsb3QpOwotCQkJaWYgKCFyYykgewotCQkJCW1vZGUgPSBwc2xvdC0+YnVzX29uLT5jdXJyZW50X2J1c19tb2RlOwotCQkJCSp2YWx1ZSA9IHBzbG90LT5idXNfb24tPmN1cnJlbnRfc3BlZWQ7Ci0JCQkJc3dpdGNoICgqdmFsdWUpIHsKLQkJCQljYXNlIEJVU19TUEVFRF8zMzoKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBCVVNfU1BFRURfNjY6Ci0JCQkJCWlmIChtb2RlID09IEJVU19NT0RFX1BDSVgpIAotCQkJCQkJKnZhbHVlICs9IDB4MDE7Ci0JCQkJCWVsc2UgaWYgKG1vZGUgPT0gQlVTX01PREVfUENJKQotCQkJCQkJOwotCQkJCQllbHNlCi0JCQkJCQkqdmFsdWUgPSBQQ0lfU1BFRURfVU5LTk9XTjsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBCVVNfU1BFRURfMTAwOgotCQkJCWNhc2UgQlVTX1NQRUVEXzEzMzoKLQkJCQkJKnZhbHVlICs9IDB4MDE7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCS8qIE5vdGUgb2YgY2hhbmdlOiB0aGVyZSB3b3VsZCBhbHNvIGJlIDI1NiwgNTEyIHNvb24gKi8KLQkJCQkJcmMgPSAtRU5PREVWOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCWlibXBocF91bmxvY2tfb3BlcmF0aW9ucygpOwotCWRlYnVnKCIlcyAtIEV4aXQgcmNbJWRdIHZhbHVlWyV4XVxuIiwgX19mdW5jX18sIHJjLCAqdmFsdWUpOworCWRlYnVnKCIlcyAtIEV4aXQgcmNbJWRdIHNwZWVkWyV4XVxuIiwgX19mdW5jX18sIHJjLCBzcGVlZCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC01NzIsNiArNTIzLDcgQEAKIAkJaWYgKHNsb3RfY3VyLT5idXNfb24tPmN1cnJlbnRfc3BlZWQgPT0gMHhGRikgCiAJCQlpZiAoZ2V0X2N1cl9idXNfaW5mbygmc2xvdF9jdXIpKSAKIAkJCQlyZXR1cm4gLTE7CisJCWdldF9tYXhfYnVzX3NwZWVkKHNsb3RfY3VyKTsKIAogCQlpZiAoc2xvdF9jdXItPmN0cmwtPm9wdGlvbnMgPT0gMHhGRikKIAkJCWlmIChnZXRfaHBjX29wdGlvbnMoc2xvdF9jdXIsICZzbG90X2N1ci0+Y3RybC0+b3B0aW9ucykpCkBAIC02NTUsNiArNjA3LDcgQEAKIGludCBpYm1waHBfdXBkYXRlX3Nsb3RfaW5mbyhzdHJ1Y3Qgc2xvdCAqc2xvdF9jdXIpCiB7CiAJc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvICppbmZvOworCXN0cnVjdCBwY2lfYnVzICpidXMgPSBzbG90X2N1ci0+aG90cGx1Z19zbG90LT5wY2lfc2xvdC0+YnVzOwogCWludCByYzsKIAl1OCBidXNfc3BlZWQ7CiAJdTggbW9kZTsKQEAgLTcwMCw4ICs2NTMsNyBAQAogCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047CiAJfQogCi0JaW5mby0+Y3VyX2J1c19zcGVlZCA9IGJ1c19zcGVlZDsKLQlpbmZvLT5tYXhfYnVzX3NwZWVkID0gc2xvdF9jdXItPmhvdHBsdWdfc2xvdC0+aW5mby0+bWF4X2J1c19zcGVlZDsKKwlidXMtPmN1cl9idXNfc3BlZWQgPSBidXNfc3BlZWQ7CiAJLy8gVG8gZG86IGJ1c19uYW1lcyAKIAkKIAlyYyA9IHBjaV9ocF9jaGFuZ2Vfc2xvdF9pbmZvKHNsb3RfY3VyLT5ob3RwbHVnX3Nsb3QsIGluZm8pOwpAQCAtMTMyNiw4ICsxMjc4LDYgQEAKIAkuZ2V0X2F0dGVudGlvbl9zdGF0dXMgPQkJZ2V0X2F0dGVudGlvbl9zdGF0dXMsCiAJLmdldF9sYXRjaF9zdGF0dXMgPQkJZ2V0X2xhdGNoX3N0YXR1cywKIAkuZ2V0X2FkYXB0ZXJfc3RhdHVzID0JCWdldF9hZGFwdGVyX3ByZXNlbnQsCi0JLmdldF9tYXhfYnVzX3NwZWVkID0JCWdldF9tYXhfYnVzX3NwZWVkLAotCS5nZXRfY3VyX2J1c19zcGVlZCA9CQlnZXRfY3VyX2J1c19zcGVlZCwKIC8qCS5nZXRfbWF4X2FkYXB0ZXJfc3BlZWQgPQlnZXRfbWF4X2FkYXB0ZXJfc3BlZWQsCiAJLmdldF9idXNfbmFtZV9zdGF0dXMgPQkJZ2V0X2J1c19uYW1lLAogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2ViZGEuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2ViZGEuYwppbmRleCBjMWFiYWM4Li41YmVjYmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9lYmRhLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfZWJkYS5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAogaW50IF9faW5pdCBpYm1waHBfYWNjZXNzX2ViZGEgKHZvaWQpCiB7Ci0JdTggZm9ybWF0LCBudW1fY3RscnMsIHJpb19jb21wbGV0ZSwgaHNfY29tcGxldGU7CisJdTggZm9ybWF0LCBudW1fY3RscnMsIHJpb19jb21wbGV0ZSwgaHNfY29tcGxldGUsIGViZGFfc3o7CiAJdTE2IGViZGFfc2VnLCBudW1fZW50cmllcywgbmV4dF9vZmZzZXQsIG9mZnNldCwgYmxrX2lkLCBzdWJfYWRkciwgcmUsIHJjX2lkLCByZV9pZCwgYmFzZTsKIAlpbnQgcmMgPSAwOwogCkBAIC0yNjAsNyArMjYwLDE2IEBACiAJaW91bm1hcCAoaW9fbWVtKTsKIAlkZWJ1ZyAoInJldHVybmVkIGViZGEgc2VnbWVudDogJXhcbiIsIGViZGFfc2VnKTsKIAkKLQlpb19tZW0gPSBpb3JlbWFwKGViZGFfc2VnPDw0LCAxMDI0KTsKKwlpb19tZW0gPSBpb3JlbWFwKGViZGFfc2VnPDw0LCAxKTsKKwlpZiAoIWlvX21lbSkKKwkJcmV0dXJuIC1FTk9NRU07CisJZWJkYV9zeiA9IHJlYWRiKGlvX21lbSk7CisJaW91bm1hcChpb19tZW0pOworCWRlYnVnKCJlYmRhIHNpemU6ICVkKEtpQilcbiIsIGViZGFfc3opOworCWlmIChlYmRhX3N6ID09IDApCisJCXJldHVybiAtRU5PTUVNOworCisJaW9fbWVtID0gaW9yZW1hcChlYmRhX3NlZzw8NCwgKGViZGFfc3ogKiAxMDI0KSk7CiAJaWYgKCFpb19tZW0gKQogCQlyZXR1cm4gLUVOT01FTTsKIAluZXh0X29mZnNldCA9IDB4MTgwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfaHBjLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9ocGMuYwppbmRleCBjNzA4NGYwLi4xYWFmM2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9ocGMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9ocGMuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgImlibXBocC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jCmluZGV4IDM4MTgzYTUuLjcyOGIxMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jCkBAIC02NCwzMiArNjQsNiBAQAogc3RhdGljIExJU1RfSEVBRChwY2lfaG90cGx1Z19zbG90X2xpc3QpOwogc3RhdGljIERFRklORV9NVVRFWChwY2lfaHBfbXV0ZXgpOwogCi0vKiB0aGVzZSBzdHJpbmdzIG1hdGNoIHVwIHdpdGggdGhlIHZhbHVlcyBpbiBwY2lfYnVzX3NwZWVkICovCi1zdGF0aWMgY2hhciAqcGNpX2J1c19zcGVlZF9zdHJpbmdzW10gPSB7Ci0JIjMzIE1IeiBQQ0kiLAkJLyogMHgwMCAqLwotCSI2NiBNSHogUENJIiwJCS8qIDB4MDEgKi8KLQkiNjYgTUh6IFBDSS1YIiwJCS8qIDB4MDIgKi8KLQkiMTAwIE1IeiBQQ0ktWCIsCS8qIDB4MDMgKi8KLQkiMTMzIE1IeiBQQ0ktWCIsCS8qIDB4MDQgKi8KLQlOVUxMLAkJCS8qIDB4MDUgKi8KLQlOVUxMLAkJCS8qIDB4MDYgKi8KLQlOVUxMLAkJCS8qIDB4MDcgKi8KLQlOVUxMLAkJCS8qIDB4MDggKi8KLQkiNjYgTUh6IFBDSS1YIDI2NiIsCS8qIDB4MDkgKi8KLQkiMTAwIE1IeiBQQ0ktWCAyNjYiLAkvKiAweDBhICovCi0JIjEzMyBNSHogUENJLVggMjY2IiwJLyogMHgwYiAqLwotCU5VTEwsCQkJLyogMHgwYyAqLwotCU5VTEwsCQkJLyogMHgwZCAqLwotCU5VTEwsCQkJLyogMHgwZSAqLwotCU5VTEwsCQkJLyogMHgwZiAqLwotCU5VTEwsCQkJLyogMHgxMCAqLwotCSI2NiBNSHogUENJLVggNTMzIiwJLyogMHgxMSAqLwotCSIxMDAgTUh6IFBDSS1YIDUzMyIsCS8qIDB4MTIgKi8KLQkiMTMzIE1IeiBQQ0ktWCA1MzMiLAkvKiAweDEzICovCi0JIjIuNSBHVC9zIFBDSWUiLAkvKiAweDE0ICovCi0JIjUuMCBHVC9zIFBDSWUiLAkvKiAweDE1ICovCi19OwotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfUENJX0NQQ0kKIGV4dGVybiBpbnQgY3BjaV9ob3RwbHVnX2luaXQoaW50IGRlYnVnKTsKIGV4dGVybiB2b2lkIGNwY2lfaG90cGx1Z19leGl0KHZvaWQpOwpAQCAtMTE4LDggKzkyLDYgQEAKIEdFVF9TVEFUVVMoYXR0ZW50aW9uX3N0YXR1cywgdTgpCiBHRVRfU1RBVFVTKGxhdGNoX3N0YXR1cywgdTgpCiBHRVRfU1RBVFVTKGFkYXB0ZXJfc3RhdHVzLCB1OCkKLUdFVF9TVEFUVVMobWF4X2J1c19zcGVlZCwgZW51bSBwY2lfYnVzX3NwZWVkKQotR0VUX1NUQVRVUyhjdXJfYnVzX3NwZWVkLCBlbnVtIHBjaV9idXNfc3BlZWQpCiAKIHN0YXRpYyBzc2l6ZV90IHBvd2VyX3JlYWRfZmlsZShzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QsIGNoYXIgKmJ1ZikKIHsKQEAgLTI2Myw2MCArMjM1LDYgQEAKIAkuc2hvdyA9IHByZXNlbmNlX3JlYWRfZmlsZSwKIH07CiAKLXN0YXRpYyBjaGFyICp1bmtub3duX3NwZWVkID0gIlVua25vd24gYnVzIHNwZWVkIjsKLQotc3RhdGljIHNzaXplX3QgbWF4X2J1c19zcGVlZF9yZWFkX2ZpbGUoc3RydWN0IHBjaV9zbG90ICpzbG90LCBjaGFyICpidWYpCi17Ci0JY2hhciAqc3BlZWRfc3RyaW5nOwotCWludCByZXR2YWw7Ci0JZW51bSBwY2lfYnVzX3NwZWVkIHZhbHVlOwotCQotCXJldHZhbCA9IGdldF9tYXhfYnVzX3NwZWVkKHNsb3QtPmhvdHBsdWcsICZ2YWx1ZSk7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBleGl0OwotCi0JaWYgKHZhbHVlID09IFBDSV9TUEVFRF9VTktOT1dOKQotCQlzcGVlZF9zdHJpbmcgPSB1bmtub3duX3NwZWVkOwotCWVsc2UKLQkJc3BlZWRfc3RyaW5nID0gcGNpX2J1c19zcGVlZF9zdHJpbmdzW3ZhbHVlXTsKLQkKLQlyZXR2YWwgPSBzcHJpbnRmIChidWYsICIlc1xuIiwgc3BlZWRfc3RyaW5nKTsKLQotZXhpdDoKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgc3RydWN0IHBjaV9zbG90X2F0dHJpYnV0ZSBob3RwbHVnX3Nsb3RfYXR0cl9tYXhfYnVzX3NwZWVkID0gewotCS5hdHRyID0gey5uYW1lID0gIm1heF9idXNfc3BlZWQiLCAubW9kZSA9IFNfSUZSRUcgfCBTX0lSVUdPfSwKLQkuc2hvdyA9IG1heF9idXNfc3BlZWRfcmVhZF9maWxlLAotfTsKLQotc3RhdGljIHNzaXplX3QgY3VyX2J1c19zcGVlZF9yZWFkX2ZpbGUoc3RydWN0IHBjaV9zbG90ICpzbG90LCBjaGFyICpidWYpCi17Ci0JY2hhciAqc3BlZWRfc3RyaW5nOwotCWludCByZXR2YWw7Ci0JZW51bSBwY2lfYnVzX3NwZWVkIHZhbHVlOwotCi0JcmV0dmFsID0gZ2V0X2N1cl9idXNfc3BlZWQoc2xvdC0+aG90cGx1ZywgJnZhbHVlKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGV4aXQ7Ci0KLQlpZiAodmFsdWUgPT0gUENJX1NQRUVEX1VOS05PV04pCi0JCXNwZWVkX3N0cmluZyA9IHVua25vd25fc3BlZWQ7Ci0JZWxzZQotCQlzcGVlZF9zdHJpbmcgPSBwY2lfYnVzX3NwZWVkX3N0cmluZ3NbdmFsdWVdOwotCQotCXJldHZhbCA9IHNwcmludGYgKGJ1ZiwgIiVzXG4iLCBzcGVlZF9zdHJpbmcpOwotCi1leGl0OgotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX3Nsb3RfYXR0cmlidXRlIGhvdHBsdWdfc2xvdF9hdHRyX2N1cl9idXNfc3BlZWQgPSB7Ci0JLmF0dHIgPSB7Lm5hbWUgPSAiY3VyX2J1c19zcGVlZCIsIC5tb2RlID0gU19JRlJFRyB8IFNfSVJVR099LAotCS5zaG93ID0gY3VyX2J1c19zcGVlZF9yZWFkX2ZpbGUsCi19OwotCiBzdGF0aWMgc3NpemVfdCB0ZXN0X3dyaXRlX2ZpbGUoc3RydWN0IHBjaV9zbG90ICpwY2lfc2xvdCwgY29uc3QgY2hhciAqYnVmLAogCQlzaXplX3QgY291bnQpCiB7CkBAIC0zOTEsMjYgKzMwOSw2IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBoYXNfbWF4X2J1c19zcGVlZF9maWxlKHN0cnVjdCBwY2lfc2xvdCAqcGNpX3Nsb3QpCi17Ci0Jc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCA9IHBjaV9zbG90LT5ob3RwbHVnOwotCWlmICgoIXNsb3QpIHx8ICghc2xvdC0+b3BzKSkKLQkJcmV0dXJuIGZhbHNlOwotCWlmIChzbG90LT5vcHMtPmdldF9tYXhfYnVzX3NwZWVkKQotCQlyZXR1cm4gdHJ1ZTsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGhhc19jdXJfYnVzX3NwZWVkX2ZpbGUoc3RydWN0IHBjaV9zbG90ICpwY2lfc2xvdCkKLXsKLQlzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90ID0gcGNpX3Nsb3QtPmhvdHBsdWc7Ci0JaWYgKCghc2xvdCkgfHwgKCFzbG90LT5vcHMpKQotCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKHNsb3QtPm9wcy0+Z2V0X2N1cl9idXNfc3BlZWQpCi0JCXJldHVybiB0cnVlOwotCXJldHVybiBmYWxzZTsKLX0KLQogc3RhdGljIGJvb2wgaGFzX3Rlc3RfZmlsZShzdHJ1Y3QgcGNpX3Nsb3QgKnBjaV9zbG90KQogewogCXN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QgPSBwY2lfc2xvdC0+aG90cGx1ZzsKQEAgLTQ1NiwyMCArMzU0LDYgQEAKIAkJCWdvdG8gZXhpdF9hZGFwdGVyOwogCX0KIAotCWlmIChoYXNfbWF4X2J1c19zcGVlZF9maWxlKHNsb3QpKSB7Ci0JCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZzbG90LT5rb2JqLAotCQkJCQkmaG90cGx1Z19zbG90X2F0dHJfbWF4X2J1c19zcGVlZC5hdHRyKTsKLQkJaWYgKHJldHZhbCkKLQkJCWdvdG8gZXhpdF9tYXhfc3BlZWQ7Ci0JfQotCi0JaWYgKGhhc19jdXJfYnVzX3NwZWVkX2ZpbGUoc2xvdCkpIHsKLQkJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2ZpbGUoJnNsb3QtPmtvYmosCi0JCQkJCSZob3RwbHVnX3Nsb3RfYXR0cl9jdXJfYnVzX3NwZWVkLmF0dHIpOwotCQlpZiAocmV0dmFsKQotCQkJZ290byBleGl0X2N1cl9zcGVlZDsKLQl9Ci0KIAlpZiAoaGFzX3Rlc3RfZmlsZShzbG90KSkgewogCQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfZmlsZSgmc2xvdC0+a29iaiwKIAkJCQkJICAgJmhvdHBsdWdfc2xvdF9hdHRyX3Rlc3QuYXR0cik7CkBAIC00ODAsMTQgKzM2NCw2IEBACiAJZ290byBleGl0OwogCiBleGl0X3Rlc3Q6Ci0JaWYgKGhhc19jdXJfYnVzX3NwZWVkX2ZpbGUoc2xvdCkpCi0JCXN5c2ZzX3JlbW92ZV9maWxlKCZzbG90LT5rb2JqLAotCQkJCSAgJmhvdHBsdWdfc2xvdF9hdHRyX2N1cl9idXNfc3BlZWQuYXR0cik7Ci1leGl0X2N1cl9zcGVlZDoKLQlpZiAoaGFzX21heF9idXNfc3BlZWRfZmlsZShzbG90KSkKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUoJnNsb3QtPmtvYmosCi0JCQkJICAmaG90cGx1Z19zbG90X2F0dHJfbWF4X2J1c19zcGVlZC5hdHRyKTsKLWV4aXRfbWF4X3NwZWVkOgogCWlmIChoYXNfYWRhcHRlcl9maWxlKHNsb3QpKQogCQlzeXNmc19yZW1vdmVfZmlsZSgmc2xvdC0+a29iaiwKIAkJCQkgICZob3RwbHVnX3Nsb3RfYXR0cl9wcmVzZW5jZS5hdHRyKTsKQEAgLTUyMywxNCArMzk5LDYgQEAKIAkJc3lzZnNfcmVtb3ZlX2ZpbGUoJnNsb3QtPmtvYmosCiAJCQkJICAmaG90cGx1Z19zbG90X2F0dHJfcHJlc2VuY2UuYXR0cik7CiAKLQlpZiAoaGFzX21heF9idXNfc3BlZWRfZmlsZShzbG90KSkKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUoJnNsb3QtPmtvYmosCi0JCQkJICAmaG90cGx1Z19zbG90X2F0dHJfbWF4X2J1c19zcGVlZC5hdHRyKTsKLQotCWlmIChoYXNfY3VyX2J1c19zcGVlZF9maWxlKHNsb3QpKQotCQlzeXNmc19yZW1vdmVfZmlsZSgmc2xvdC0+a29iaiwKLQkJCQkgICZob3RwbHVnX3Nsb3RfYXR0cl9jdXJfYnVzX3NwZWVkLmF0dHIpOwotCiAJaWYgKGhhc190ZXN0X2ZpbGUoc2xvdCkpCiAJCXN5c2ZzX3JlbW92ZV9maWxlKCZzbG90LT5rb2JqLCAmaG90cGx1Z19zbG90X2F0dHJfdGVzdC5hdHRyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCmluZGV4IDU2NzRiMjAuLjkyMGY4MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMKQEAgLTY5LDggKzY5LDYgQEAKIHN0YXRpYyBpbnQgZ2V0X2F0dGVudGlvbl9zdGF0dXMJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHU4ICp2YWx1ZSk7CiBzdGF0aWMgaW50IGdldF9sYXRjaF9zdGF0dXMJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHU4ICp2YWx1ZSk7CiBzdGF0aWMgaW50IGdldF9hZGFwdGVyX3N0YXR1cwkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgdTggKnZhbHVlKTsKLXN0YXRpYyBpbnQgZ2V0X21heF9idXNfc3BlZWQJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpOwotc3RhdGljIGludCBnZXRfY3VyX2J1c19zcGVlZAkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSk7CiAKIC8qKgogICogcmVsZWFzZV9zbG90IC0gZnJlZSB1cCB0aGUgbWVtb3J5IHVzZWQgYnkgYSBzbG90CkBAIC0xMTMsOCArMTExLDYgQEAKIAlvcHMtPmRpc2FibGVfc2xvdCA9IGRpc2FibGVfc2xvdDsKIAlvcHMtPmdldF9wb3dlcl9zdGF0dXMgPSBnZXRfcG93ZXJfc3RhdHVzOwogCW9wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzID0gZ2V0X2FkYXB0ZXJfc3RhdHVzOwotCW9wcy0+Z2V0X21heF9idXNfc3BlZWQgPSBnZXRfbWF4X2J1c19zcGVlZDsKLQlvcHMtPmdldF9jdXJfYnVzX3NwZWVkID0gZ2V0X2N1cl9idXNfc3BlZWQ7CiAJaWYgKE1STF9TRU5TKGN0cmwpKQogCQlvcHMtPmdldF9sYXRjaF9zdGF0dXMgPSBnZXRfbGF0Y2hfc3RhdHVzOwogCWlmIChBVFROX0xFRChjdHJsKSkgewpAQCAtMjI3LDI3ICsyMjMsNiBAQAogCXJldHVybiBwY2llaHBfZ2V0X2FkYXB0ZXJfc3RhdHVzKHNsb3QsIHZhbHVlKTsKIH0KIAotc3RhdGljIGludCBnZXRfbWF4X2J1c19zcGVlZChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsCi0JCQkJZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKLXsKLQlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGhvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKLQotCWN0cmxfZGJnKHNsb3QtPmN0cmwsICIlczogcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAotCQkgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7Ci0KLQlyZXR1cm4gcGNpZWhwX2dldF9tYXhfbGlua19zcGVlZChzbG90LCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X2N1cl9idXNfc3BlZWQoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQotewotCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwotCi0JY3RybF9kYmcoc2xvdC0+Y3RybCwgIiVzOiBwaHlzaWNhbF9zbG90ID0gJXNcbiIsCi0JCSBfX2Z1bmNfXywgc2xvdF9uYW1lKHNsb3QpKTsKLQotCXJldHVybiBwY2llaHBfZ2V0X2N1cl9saW5rX3NwZWVkKHNsb3QsIHZhbHVlKTsKLX0KLQogc3RhdGljIGludCBwY2llaHBfcHJvYmUoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYpCiB7CiAJaW50IHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jCmluZGV4IGQ2YWMxYjIuLjlhN2YyNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMKQEAgLTM0MSw2ICszNDEsNyBAQAogCQlwX3Nsb3QtPnN0YXRlID0gUE9XRVJPTl9TVEFURTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJa2ZyZWUoaW5mbyk7CiAJCWdvdG8gb3V0OwogCX0KIAlxdWV1ZV93b3JrKHBjaWVocF93cSwgJmluZm8tPndvcmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYwppbmRleCAxMDA0MGQ1Li40MGI0OGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYwpAQCAtNDkyLDYgKzQ5Miw3IEBACiAJdTE2IHNsb3RfY21kOwogCXUxNiBjbWRfbWFzazsKIAl1MTYgc2xvdF9zdGF0dXM7CisJdTE2IGxua19zdGF0dXM7CiAJaW50IHJldHZhbCA9IDA7CiAKIAkvKiBDbGVhciBzdGlja3kgcG93ZXItZmF1bHQgYml0IGZyb20gcHJldmlvdXMgcG93ZXIgZmFpbHVyZXMgKi8KQEAgLTUyMyw2ICs1MjQsMTQgQEAKIAljdHJsX2RiZyhjdHJsLCAiJXM6IFNMT1RDVFJMICV4IHdyaXRlIGNtZCAleFxuIiwgX19mdW5jX18sCiAJCSBwY2lfcGNpZV9jYXAoY3RybC0+cGNpZS0+cG9ydCkgKyBQQ0lfRVhQX1NMVENUTCwgc2xvdF9jbWQpOwogCisJcmV0dmFsID0gcGNpZWhwX3JlYWR3KGN0cmwsIFBDSV9FWFBfTE5LU1RBLCAmbG5rX3N0YXR1cyk7CisJaWYgKHJldHZhbCkgeworCQljdHJsX2VycihjdHJsLCAiJXM6IENhbm5vdCByZWFkIExOS1NUQSByZWdpc3RlclxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCXJldHVybiByZXR2YWw7CisJfQorCXBjaWVfdXBkYXRlX2xpbmtfc3BlZWQoY3RybC0+cGNpZS0+cG9ydC0+c3Vib3JkaW5hdGUsIGxua19zdGF0dXMpOworCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNjEwLDM3ICs2MTksNiBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotaW50IHBjaWVocF9nZXRfbWF4X2xpbmtfc3BlZWQoc3RydWN0IHNsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCi17Ci0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBzbG90LT5jdHJsOwotCWVudW0gcGNpZV9saW5rX3NwZWVkIGxua19zcGVlZDsKLQl1MzIJbG5rX2NhcDsKLQlpbnQgcmV0dmFsID0gMDsKLQotCXJldHZhbCA9IHBjaWVocF9yZWFkbChjdHJsLCBQQ0lfRVhQX0xOS0NBUCwgJmxua19jYXApOwotCWlmIChyZXR2YWwpIHsKLQkJY3RybF9lcnIoY3RybCwgIiVzOiBDYW5ub3QgcmVhZCBMTktDQVAgcmVnaXN0ZXJcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlzd2l0Y2ggKGxua19jYXAgJiAweDAwMEYpIHsKLQljYXNlIDE6Ci0JCWxua19zcGVlZCA9IFBDSUVfMl81R0I7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJbG5rX3NwZWVkID0gUENJRV81XzBHQjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbG5rX3NwZWVkID0gUENJRV9MTktfU1BFRURfVU5LTk9XTjsKLQkJYnJlYWs7Ci0JfQotCi0JKnZhbHVlID0gbG5rX3NwZWVkOwotCWN0cmxfZGJnKGN0cmwsICJNYXggbGluayBzcGVlZCA9ICVkXG4iLCBsbmtfc3BlZWQpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQogaW50IHBjaWVocF9nZXRfbWF4X2xua193aWR0aChzdHJ1Y3Qgc2xvdCAqc2xvdCwKIAkJCQkgZW51bSBwY2llX2xpbmtfd2lkdGggKnZhbHVlKQogewpAQCAtNjkxLDM4ICs2NjksNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLWludCBwY2llaHBfZ2V0X2N1cl9saW5rX3NwZWVkKHN0cnVjdCBzbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQotewotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gc2xvdC0+Y3RybDsKLQllbnVtIHBjaWVfbGlua19zcGVlZCBsbmtfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKLQlpbnQgcmV0dmFsID0gMDsKLQl1MTYgbG5rX3N0YXR1czsKLQotCXJldHZhbCA9IHBjaWVocF9yZWFkdyhjdHJsLCBQQ0lfRVhQX0xOS1NUQSwgJmxua19zdGF0dXMpOwotCWlmIChyZXR2YWwpIHsKLQkJY3RybF9lcnIoY3RybCwgIiVzOiBDYW5ub3QgcmVhZCBMTktTVEFUVVMgcmVnaXN0ZXJcbiIsCi0JCQkgX19mdW5jX18pOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCXN3aXRjaCAobG5rX3N0YXR1cyAmIFBDSV9FWFBfTE5LU1RBX0NMUykgewotCWNhc2UgMToKLQkJbG5rX3NwZWVkID0gUENJRV8yXzVHQjsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlsbmtfc3BlZWQgPSBQQ0lFXzVfMEdCOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlsbmtfc3BlZWQgPSBQQ0lFX0xOS19TUEVFRF9VTktOT1dOOwotCQlicmVhazsKLQl9Ci0KLQkqdmFsdWUgPSBsbmtfc3BlZWQ7Ci0JY3RybF9kYmcoY3RybCwgIkN1cnJlbnQgbGluayBzcGVlZCA9ICVkXG4iLCBsbmtfc3BlZWQpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQogaW50IHBjaWVocF9nZXRfY3VyX2xua193aWR0aChzdHJ1Y3Qgc2xvdCAqc2xvdCwKIAkJCQkgZW51bSBwY2llX2xpbmtfd2lkdGggKnZhbHVlKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfcGNpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYwppbmRleCAyMTczMzEwLi4wYTE2NDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYwpAQCAtNTMsMTcgKzUzLDE1IEBACiAJCWJ1c25yID0gcGNpX3NjYW5fYnJpZGdlKHBhcmVudCwgZGV2LCBidXNuciwgcGFzcyk7CiAJaWYgKCFkZXYtPnN1Ym9yZGluYXRlKQogCQlyZXR1cm4gLTE7Ci0JcGNpX2J1c19zaXplX2JyaWRnZXMoZGV2LT5zdWJvcmRpbmF0ZSk7Ci0JcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKHBhcmVudCk7Ci0JcGNpX2VuYWJsZV9icmlkZ2VzKHBhcmVudCk7Ci0JcGNpX2J1c19hZGRfZGV2aWNlcyhwYXJlbnQpOworCiAJcmV0dXJuIDA7CiB9CiAKIGludCBwY2llaHBfY29uZmlndXJlX2RldmljZShzdHJ1Y3Qgc2xvdCAqcF9zbG90KQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7Ci0Jc3RydWN0IHBjaV9idXMgKnBhcmVudCA9IHBfc2xvdC0+Y3RybC0+cGNpZS0+cG9ydC0+c3Vib3JkaW5hdGU7CisJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IHBfc2xvdC0+Y3RybC0+cGNpZS0+cG9ydDsKKwlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50ID0gYnJpZGdlLT5zdWJvcmRpbmF0ZTsKIAlpbnQgbnVtLCBmbjsKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKIApAQCAtOTYsMTIgKzk0LDI1IEBACiAJCQkJKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVMpKSB7CiAJCQlwY2llaHBfYWRkX2JyaWRnZShkZXYpOwogCQl9CisJCXBjaV9kZXZfcHV0KGRldik7CisJfQorCisJcGNpX2Fzc2lnbl91bmFzc2lnbmVkX2JyaWRnZV9yZXNvdXJjZXMoYnJpZGdlKTsKKworCWZvciAoZm4gPSAwOyBmbiA8IDg7IGZuKyspIHsKKwkJZGV2ID0gcGNpX2dldF9zbG90KHBhcmVudCwgUENJX0RFVkZOKDAsIGZuKSk7CisJCWlmICghZGV2KQorCQkJY29udGludWU7CisJCWlmICgoZGV2LT5jbGFzcyA+PiAxNikgPT0gUENJX0JBU0VfQ0xBU1NfRElTUExBWSkgeworCQkJcGNpX2Rldl9wdXQoZGV2KTsKKwkJCWNvbnRpbnVlOworCQl9CiAJCXBjaV9jb25maWd1cmVfc2xvdChkZXYpOwogCQlwY2lfZGV2X3B1dChkZXYpOwogCX0KIAotCXBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhwYXJlbnQpOwogCXBjaV9idXNfYWRkX2RldmljZXMocGFyZW50KTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMKaW5kZXggYzE1OTIyMy4uZGNhYWU3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYwpAQCAtMTMwLDEwICsxMzAsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdldF9tYXhfYnVzX3NwZWVkKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKK3N0YXRpYyBlbnVtIHBjaV9idXNfc3BlZWQgZ2V0X21heF9idXNfc3BlZWQoc3RydWN0IHNsb3QgKnNsb3QpCiB7Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSAoc3RydWN0IHNsb3QgKilob3RwbHVnX3Nsb3QtPnByaXZhdGU7Ci0KKwllbnVtIHBjaV9idXNfc3BlZWQgc3BlZWQ7CiAJc3dpdGNoIChzbG90LT50eXBlKSB7CiAJY2FzZSAxOgogCWNhc2UgMjoKQEAgLTE0MSwzMCArMTQwLDMwIEBACiAJY2FzZSA0OgogCWNhc2UgNToKIAljYXNlIDY6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8zM01IejsJLyogc3BlZWQgZm9yIGNhc2UgMS02ICovCisJCXNwZWVkID0gUENJX1NQRUVEXzMzTUh6OwkvKiBzcGVlZCBmb3IgY2FzZSAxLTYgKi8KIAkJYnJlYWs7CiAJY2FzZSA3OgogCWNhc2UgODoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzY2TUh6OworCQlzcGVlZCA9IFBDSV9TUEVFRF82Nk1IejsKIAkJYnJlYWs7CiAJY2FzZSAxMToKIAljYXNlIDE0OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKKwkJc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKIAkJYnJlYWs7CiAJY2FzZSAxMjoKIAljYXNlIDE1OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVg7CisJCXNwZWVkID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYOwogCQlicmVhazsKIAljYXNlIDEzOgogCWNhc2UgMTY6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWDsKKwkJc3BlZWQgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVg7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF9VTktOT1dOOworCQlzcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOwogCQlicmVhazsKLQogCX0KLQlyZXR1cm4gMDsKKworCXJldHVybiBzcGVlZDsKIH0KIAogc3RhdGljIGludCBnZXRfY2hpbGRyZW5fcHJvcHMoc3RydWN0IGRldmljZV9ub2RlICpkbiwgY29uc3QgaW50ICoqZHJjX2luZGV4ZXMsCkBAIC00MDgsNiArNDA3LDggQEAKIAkJc2xvdC0+c3RhdGUgPSBOT1RfVkFMSUQ7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKworCXNsb3QtPmJ1cy0+bWF4X2J1c19zcGVlZCA9IGdldF9tYXhfYnVzX3NwZWVkKHNsb3QpOwogCXJldHVybiAwOwogfQogCkBAIC00MjksNyArNDMwLDYgQEAKIAkuZ2V0X3Bvd2VyX3N0YXR1cyA9IGdldF9wb3dlcl9zdGF0dXMsCiAJLmdldF9hdHRlbnRpb25fc3RhdHVzID0gZ2V0X2F0dGVudGlvbl9zdGF0dXMsCiAJLmdldF9hZGFwdGVyX3N0YXR1cyA9IGdldF9hZGFwdGVyX3N0YXR1cywKLQkuZ2V0X21heF9idXNfc3BlZWQgPSBnZXRfbWF4X2J1c19zcGVlZCwKIH07CiAKIG1vZHVsZV9pbml0KHJwYXBocF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oCmluZGV4IDhlMjEwY2Q3Li5kMjYyN2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwLmgKQEAgLTMzMyw4ICszMzMsNiBAQAogCWludCAoKnNldF9hdHRlbnRpb25fc3RhdHVzKShzdHJ1Y3Qgc2xvdCAqc2xvdCwgdTggc3RhdHVzKTsKIAlpbnQgKCpnZXRfbGF0Y2hfc3RhdHVzKShzdHJ1Y3Qgc2xvdCAqc2xvdCwgdTggKnN0YXR1cyk7CiAJaW50ICgqZ2V0X2FkYXB0ZXJfc3RhdHVzKShzdHJ1Y3Qgc2xvdCAqc2xvdCwgdTggKnN0YXR1cyk7Ci0JaW50ICgqZ2V0X21heF9idXNfc3BlZWQpKHN0cnVjdCBzbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnNwZWVkKTsKLQlpbnQgKCpnZXRfY3VyX2J1c19zcGVlZCkoc3RydWN0IHNsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqc3BlZWQpOwogCWludCAoKmdldF9hZGFwdGVyX3NwZWVkKShzdHJ1Y3Qgc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICpzcGVlZCk7CiAJaW50ICgqZ2V0X21vZGUxX0VDQ19jYXApKHN0cnVjdCBzbG90ICpzbG90LCB1OCAqbW9kZSk7CiAJaW50ICgqZ2V0X3Byb2dfaW50KShzdHJ1Y3Qgc2xvdCAqc2xvdCwgdTggKnByb2dfaW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2NvcmUuYwppbmRleCA4YTUyMGEzLi5hNTA2MjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY29yZS5jCkBAIC02NSw4ICs2NSw2IEBACiBzdGF0aWMgaW50IGdldF9hdHRlbnRpb25fc3RhdHVzCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCB1OCAqdmFsdWUpOwogc3RhdGljIGludCBnZXRfbGF0Y2hfc3RhdHVzCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCB1OCAqdmFsdWUpOwogc3RhdGljIGludCBnZXRfYWRhcHRlcl9zdGF0dXMJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHU4ICp2YWx1ZSk7Ci1zdGF0aWMgaW50IGdldF9tYXhfYnVzX3NwZWVkCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKTsKLXN0YXRpYyBpbnQgZ2V0X2N1cl9idXNfc3BlZWQJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpOwogCiBzdGF0aWMgc3RydWN0IGhvdHBsdWdfc2xvdF9vcHMgc2hwY2hwX2hvdHBsdWdfc2xvdF9vcHMgPSB7CiAJLnNldF9hdHRlbnRpb25fc3RhdHVzID0Jc2V0X2F0dGVudGlvbl9zdGF0dXMsCkBAIC03Niw4ICs3NCw2IEBACiAJLmdldF9hdHRlbnRpb25fc3RhdHVzID0JZ2V0X2F0dGVudGlvbl9zdGF0dXMsCiAJLmdldF9sYXRjaF9zdGF0dXMgPQlnZXRfbGF0Y2hfc3RhdHVzLAogCS5nZXRfYWRhcHRlcl9zdGF0dXMgPQlnZXRfYWRhcHRlcl9zdGF0dXMsCi0JLmdldF9tYXhfYnVzX3NwZWVkID0JZ2V0X21heF9idXNfc3BlZWQsCi0JLmdldF9jdXJfYnVzX3NwZWVkID0JZ2V0X2N1cl9idXNfc3BlZWQsCiB9OwogCiAvKioKQEAgLTI3OSwzNyArMjc1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRfbWF4X2J1c19zcGVlZChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsCi0JCQkJZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKLXsKLQlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCk7Ci0JaW50IHJldHZhbDsKLQotCWN0cmxfZGJnKHNsb3QtPmN0cmwsICIlczogcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAotCQkgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7Ci0KLQlyZXR2YWwgPSBzbG90LT5ocGNfb3BzLT5nZXRfbWF4X2J1c19zcGVlZChzbG90LCB2YWx1ZSk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCSp2YWx1ZSA9IFBDSV9TUEVFRF9VTktOT1dOOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X2N1cl9idXNfc3BlZWQgKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKLXsKLQlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCk7Ci0JaW50IHJldHZhbDsKLQotCWN0cmxfZGJnKHNsb3QtPmN0cmwsICIlczogcGh5c2ljYWxfc2xvdCA9ICVzXG4iLAotCQkgX19mdW5jX18sIHNsb3RfbmFtZShzbG90KSk7Ci0KLQlyZXR2YWwgPSBzbG90LT5ocGNfb3BzLT5nZXRfY3VyX2J1c19zcGVlZChzbG90LCB2YWx1ZSk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCSp2YWx1ZSA9IFBDSV9TUEVFRF9VTktOT1dOOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgaXNfc2hwY19jYXBhYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJaWYgKChkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FNRCkgfHwgKGRldi0+ZGV2aWNlID09CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jdHJsLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jdHJsLmMKaW5kZXggYjhhYjI3OS4uM2JiYTBjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY3RybC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYwpAQCAtMjg1LDE3ICsyODUsOCBAQAogCQlyZXR1cm4gV1JPTkdfQlVTX0ZSRVFVRU5DWTsKIAl9CiAKLQlyYyA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X2N1cl9idXNfc3BlZWQocF9zbG90LCAmYnNwKTsKLQlpZiAocmMpIHsKLQkJY3RybF9lcnIoY3RybCwgIkNhbid0IGdldCBidXMgb3BlcmF0aW9uIHNwZWVkXG4iKTsKLQkJcmV0dXJuIFdST05HX0JVU19GUkVRVUVOQ1k7Ci0JfQotCi0JcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9tYXhfYnVzX3NwZWVkKHBfc2xvdCwgJm1zcCk7Ci0JaWYgKHJjKSB7Ci0JCWN0cmxfZXJyKGN0cmwsICJDYW4ndCBnZXQgbWF4IGJ1cyBvcGVyYXRpb24gc3BlZWRcbiIpOwotCQltc3AgPSBic3A7Ci0JfQorCWJzcCA9IGN0cmwtPnBjaV9kZXYtPmJ1cy0+Y3VyX2J1c19zcGVlZDsKKwltc3AgPSBjdHJsLT5wY2lfZGV2LT5idXMtPm1heF9idXNfc3BlZWQ7CiAKIAkvKiBDaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgc2xvdHMgb3IgZGV2aWNlcyBvbiB0aGUgc2FtZSBidXMgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJmN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5kZXZpY2VzKSkKQEAgLTQ2Miw2ICs0NTMsNyBAQAogCQlwX3Nsb3QtPnN0YXRlID0gUE9XRVJPTl9TVEFURTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJa2ZyZWUoaW5mbyk7CiAJCWdvdG8gb3V0OwogCX0KIAlxdWV1ZV93b3JrKHNocGNocF93cSwgJmluZm8tPndvcmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfaHBjLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYwppbmRleCA4NmRjMzk4Li41ZjVlOGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYwpAQCAtNjYwLDYgKzY2MCw3NSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKK3N0YXRpYyBpbnQgc2hwY19nZXRfY3VyX2J1c19zcGVlZChzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGU7CisJZW51bSBwY2lfYnVzX3NwZWVkIGJ1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOworCXUxNiBzZWNfYnVzX3JlZyA9IHNocGNfcmVhZHcoY3RybCwgU0VDX0JVU19DT05GSUcpOworCXU4IHBpID0gc2hwY19yZWFkYihjdHJsLCBQUk9HX0lOVEVSRkFDRSk7CisJdTggc3BlZWRfbW9kZSA9IChwaSA9PSAyKSA/IChzZWNfYnVzX3JlZyAmIDB4RikgOiAoc2VjX2J1c19yZWcgJiAweDcpOworCisJaWYgKChwaSA9PSAxKSAmJiAoc3BlZWRfbW9kZSA+IDQpKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAoc3BlZWRfbW9kZSkgeworCWNhc2UgMHgwOgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMzNNSHo7CisJCWJyZWFrOworCWNhc2UgMHgxOgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHo7CisJCWJyZWFrOworCWNhc2UgMHgyOgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKKwkJYnJlYWs7CisJY2FzZSAweDM6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWDsKKwkJYnJlYWs7CisJY2FzZSAweDQ6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWDsKKwkJYnJlYWs7CisJY2FzZSAweDU6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYX0VDQzsKKwkJYnJlYWs7CisJY2FzZSAweDY6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWF9FQ0M7CisJCWJyZWFrOworCWNhc2UgMHg3OgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfRUNDOworCQlicmVhazsKKwljYXNlIDB4ODoKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6X1BDSVhfMjY2OworCQlicmVhazsKKwljYXNlIDB4OToKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYXzI2NjsKKwkJYnJlYWs7CisJY2FzZSAweGE6CisJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWF8yNjY7CisJCWJyZWFrOworCWNhc2UgMHhiOgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHpfUENJWF81MzM7CisJCWJyZWFrOworCWNhc2UgMHhjOgorCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVhfNTMzOworCQlicmVhazsKKwljYXNlIDB4ZDoKKwkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYXzUzMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJYnJlYWs7CisJfQorCisgb3V0OgorCWJ1cy0+Y3VyX2J1c19zcGVlZCA9IGJ1c19zcGVlZDsKKwlkYmcoIkN1cnJlbnQgYnVzIHNwZWVkID0gJWRcbiIsIGJ1c19zcGVlZCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCiBzdGF0aWMgaW50IGhwY19zZXRfYnVzX3NwZWVkX21vZGUoc3RydWN0IHNsb3QgKiBzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgdmFsdWUpCiB7CiAJaW50IHJldHZhbDsKQEAgLTcyMCw2ICs3ODksOCBAQAogCXJldHZhbCA9IHNocGNfd3JpdGVfY21kKHNsb3QsIDAsIGNtZCk7CiAJaWYgKHJldHZhbCkKIAkJY3RybF9lcnIoY3RybCwgIiVzOiBXcml0ZSBjb21tYW5kIGZhaWxlZCFcbiIsIF9fZnVuY19fKTsKKwllbHNlCisJCXNocGNfZ2V0X2N1cl9idXNfc3BlZWQoY3RybCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtODAzLDEwICs4NzQsMTAgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgaHBjX2dldF9tYXhfYnVzX3NwZWVkIChzdHJ1Y3Qgc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKK3N0YXRpYyBpbnQgc2hwY19nZXRfbWF4X2J1c19zcGVlZChzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKIHsKIAlpbnQgcmV0dmFsID0gMDsKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHNsb3QtPmN0cmw7CisJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlOwogCWVudW0gcGNpX2J1c19zcGVlZCBidXNfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKIAl1OCBwaSA9IHNocGNfcmVhZGIoY3RybCwgUFJPR19JTlRFUkZBQ0UpOwogCXUzMiBzbG90X2F2YWlsMSA9IHNocGNfcmVhZGwoY3RybCwgU0xPVF9BVkFJTDEpOwpAQCAtODQyLDc5ICs5MTMsMTIgQEAKIAkJCXJldHZhbCA9IC1FTk9ERVY7CiAJfQogCi0JKnZhbHVlID0gYnVzX3NwZWVkOworCWJ1cy0+bWF4X2J1c19zcGVlZCA9IGJ1c19zcGVlZDsKIAljdHJsX2RiZyhjdHJsLCAiTWF4IGJ1cyBzcGVlZCA9ICVkXG4iLCBidXNfc3BlZWQpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBocGNfZ2V0X2N1cl9idXNfc3BlZWQgKHN0cnVjdCBzbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQotewotCWludCByZXR2YWwgPSAwOwotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gc2xvdC0+Y3RybDsKLQllbnVtIHBjaV9idXNfc3BlZWQgYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047Ci0JdTE2IHNlY19idXNfcmVnID0gc2hwY19yZWFkdyhjdHJsLCBTRUNfQlVTX0NPTkZJRyk7Ci0JdTggcGkgPSBzaHBjX3JlYWRiKGN0cmwsIFBST0dfSU5URVJGQUNFKTsKLQl1OCBzcGVlZF9tb2RlID0gKHBpID09IDIpID8gKHNlY19idXNfcmVnICYgMHhGKSA6IChzZWNfYnVzX3JlZyAmIDB4Nyk7Ci0KLQlpZiAoKHBpID09IDEpICYmIChzcGVlZF9tb2RlID4gNCkpIHsKLQkJKnZhbHVlID0gUENJX1NQRUVEX1VOS05PV047Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXN3aXRjaCAoc3BlZWRfbW9kZSkgewotCWNhc2UgMHgwOgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMzNNSHo7Ci0JCWJyZWFrOwotCWNhc2UgMHgxOgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfNjZNSHo7Ci0JCWJyZWFrOwotCWNhc2UgMHgyOgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKLQkJYnJlYWs7Ci0JY2FzZSAweDM6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWDsKLQkJYnJlYWs7Ci0JY2FzZSAweDQ6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWDsKLQkJYnJlYWs7Ci0JY2FzZSAweDU6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYX0VDQzsKLQkJYnJlYWs7Ci0JY2FzZSAweDY6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWF9FQ0M7Ci0JCWJyZWFrOwotCWNhc2UgMHg3OgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfRUNDOwotCQlicmVhazsKLQljYXNlIDB4ODoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzY2TUh6X1BDSVhfMjY2OwotCQlicmVhazsKLQljYXNlIDB4OToKLQkJKnZhbHVlID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYXzI2NjsKLQkJYnJlYWs7Ci0JY2FzZSAweGE6Ci0JCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWF8yNjY7Ci0JCWJyZWFrOwotCWNhc2UgMHhiOgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfNjZNSHpfUENJWF81MzM7Ci0JCWJyZWFrOwotCWNhc2UgMHhjOgotCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVhfNTMzOwotCQlicmVhazsKLQljYXNlIDB4ZDoKLQkJKnZhbHVlID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYXzUzMzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJKnZhbHVlID0gUENJX1NQRUVEX1VOS05PV047Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWJyZWFrOwotCX0KLQotCWN0cmxfZGJnKGN0cmwsICJDdXJyZW50IGJ1cyBzcGVlZCA9ICVkXG4iLCBidXNfc3BlZWQpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaHBjX29wcyBzaHBjaHBfaHBjX29wcyA9IHsKIAkucG93ZXJfb25fc2xvdAkJCT0gaHBjX3Bvd2VyX29uX3Nsb3QsCiAJLnNsb3RfZW5hYmxlCQkJPSBocGNfc2xvdF9lbmFibGUsCkBAIC05MjYsOCArOTMwLDYgQEAKIAkuZ2V0X2xhdGNoX3N0YXR1cwkJPSBocGNfZ2V0X2xhdGNoX3N0YXR1cywKIAkuZ2V0X2FkYXB0ZXJfc3RhdHVzCQk9IGhwY19nZXRfYWRhcHRlcl9zdGF0dXMsCiAKLQkuZ2V0X21heF9idXNfc3BlZWQJCT0gaHBjX2dldF9tYXhfYnVzX3NwZWVkLAotCS5nZXRfY3VyX2J1c19zcGVlZAkJPSBocGNfZ2V0X2N1cl9idXNfc3BlZWQsCiAJLmdldF9hZGFwdGVyX3NwZWVkCQk9IGhwY19nZXRfYWRhcHRlcl9zcGVlZCwKIAkuZ2V0X21vZGUxX0VDQ19jYXAJCT0gaHBjX2dldF9tb2RlMV9FQ0NfY2FwLAogCS5nZXRfcHJvZ19pbnQJCQk9IGhwY19nZXRfcHJvZ19pbnQsCkBAIC0xMDg2LDYgKzEwODgsOSBAQAogCX0KIAljdHJsX2RiZyhjdHJsLCAiSFBDIGF0ICVzIGlycT0leFxuIiwgcGNpX25hbWUocGRldiksIHBkZXYtPmlycSk7CiAKKwlzaHBjX2dldF9tYXhfYnVzX3NwZWVkKGN0cmwpOworCXNocGNfZ2V0X2N1cl9idXNfc3BlZWQoY3RybCk7CisKIAkvKgogCSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IGNvbnRyb2xsZXIgdG8gYmUgaW5pdGlhbGl6ZWQsCiAJICogaW5pdGlhbGl6ZSB0aGUgc2hwY2hwZCB3b3JrIHF1ZXVlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9zeXNmcy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfc3lzZnMuYwppbmRleCAyOWZhOWQyLi4wNzFiN2RjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX3N5c2ZzLmMKQEAgLTQ3LDggKzQ3LDcgQEAKIAlidXMgPSBwZGV2LT5zdWJvcmRpbmF0ZTsKIAogCW91dCArPSBzcHJpbnRmKGJ1ZiwgIkZyZWUgcmVzb3VyY2VzOiBtZW1vcnlcbiIpOwotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaW5kZXgrKykgewotCQlyZXMgPSBidXMtPnJlc291cmNlW2luZGV4XTsKKwlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgcmVzLCBpbmRleCkgewogCQlpZiAocmVzICYmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pICYmCiAJCQkJIShyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9QUkVGRVRDSCkpIHsKIAkJCW91dCArPSBzcHJpbnRmKG91dCwgInN0YXJ0ID0gJTguOGxseCwgIgpAQCAtNTgsOCArNTcsNyBAQAogCQl9CiAJfQogCW91dCArPSBzcHJpbnRmKG91dCwgIkZyZWUgcmVzb3VyY2VzOiBwcmVmZXRjaGFibGUgbWVtb3J5XG4iKTsKLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGluZGV4KyspIHsKLQkJcmVzID0gYnVzLT5yZXNvdXJjZVtpbmRleF07CisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHJlcywgaW5kZXgpIHsKIAkJaWYgKHJlcyAmJiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSAmJgogCQkJICAgICAgIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9QUkVGRVRDSCkpIHsKIAkJCW91dCArPSBzcHJpbnRmKG91dCwgInN0YXJ0ID0gJTguOGxseCwgIgpAQCAtNjksOCArNjcsNyBAQAogCQl9CiAJfQogCW91dCArPSBzcHJpbnRmKG91dCwgIkZyZWUgcmVzb3VyY2VzOiBJT1xuIik7Ci0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpbmRleCsrKSB7Ci0JCXJlcyA9IGJ1cy0+cmVzb3VyY2VbaW5kZXhdOworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByZXMsIGluZGV4KSB7CiAJCWlmIChyZXMgJiYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSkgewogCQkJb3V0ICs9IHNwcmludGYob3V0LCAic3RhcnQgPSAlOC44bGx4LCAiCiAJCQkJCSJsZW5ndGggPSAlOC44bGx4XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbGVnYWN5LmMgYi9kcml2ZXJzL3BjaS9sZWdhY3kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODcxZjY1Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3BjaS9sZWdhY3kuYworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSAicGNpLmgiCi0KLS8qKgotICogcGNpX2ZpbmRfZGV2aWNlIC0gYmVnaW4gb3IgY29udGludWUgc2VhcmNoaW5nIGZvciBhIFBDSSBkZXZpY2UgYnkgdmVuZG9yL2RldmljZSBpZAotICogQHZlbmRvcjogUENJIHZlbmRvciBpZCB0byBtYXRjaCwgb3IgJVBDSV9BTllfSUQgdG8gbWF0Y2ggYWxsIHZlbmRvciBpZHMKLSAqIEBkZXZpY2U6IFBDSSBkZXZpY2UgaWQgdG8gbWF0Y2gsIG9yICVQQ0lfQU5ZX0lEIHRvIG1hdGNoIGFsbCBkZXZpY2UgaWRzCi0gKiBAZnJvbTogUHJldmlvdXMgUENJIGRldmljZSBmb3VuZCBpbiBzZWFyY2gsIG9yICVOVUxMIGZvciBuZXcgc2VhcmNoLgotICoKLSAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGxpc3Qgb2Yga25vd24gUENJIGRldmljZXMuICBJZiBhIFBDSSBkZXZpY2UgaXMgZm91bmQKLSAqIHdpdGggYSBtYXRjaGluZyBAdmVuZG9yIGFuZCBAZGV2aWNlLCBhIHBvaW50ZXIgdG8gaXRzIGRldmljZSBzdHJ1Y3R1cmUgaXMKLSAqIHJldHVybmVkLiAgT3RoZXJ3aXNlLCAlTlVMTCBpcyByZXR1cm5lZC4KLSAqIEEgbmV3IHNlYXJjaCBpcyBpbml0aWF0ZWQgYnkgcGFzc2luZyAlTlVMTCBhcyB0aGUgQGZyb20gYXJndW1lbnQuCi0gKiBPdGhlcndpc2UgaWYgQGZyb20gaXMgbm90ICVOVUxMLCBzZWFyY2hlcyBjb250aW51ZSBmcm9tIG5leHQgZGV2aWNlCi0gKiBvbiB0aGUgZ2xvYmFsIGxpc3QuCi0gKgotICogTk9URTogRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9uIGFueSBtb3JlOyB1c2UgcGNpX2dldF9kZXZpY2UoKSBpbnN0ZWFkLCBhcwotICogdGhlIFBDSSBkZXZpY2UgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gZGlzYXBwZWFyIGF0IGFueSBtb21lbnQgaW4KLSAqIHRpbWUuCi0gKi8KLXN0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9kZXZpY2UodW5zaWduZWQgaW50IHZlbmRvciwgdW5zaWduZWQgaW50IGRldmljZSwKLQkJCQlzdHJ1Y3QgcGNpX2RldiAqZnJvbSkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLQotCXBjaV9kZXZfZ2V0KGZyb20pOwotCXBkZXYgPSBwY2lfZ2V0X3N1YnN5cyh2ZW5kb3IsIGRldmljZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZnJvbSk7Ci0JcGNpX2Rldl9wdXQocGRldik7Ci0JcmV0dXJuIHBkZXY7Ci19Ci1FWFBPUlRfU1lNQk9MKHBjaV9maW5kX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwppbmRleCA3ZTI4Mjk1Li5jMGM3MzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKQEAgLTE2LDggKzE2LDE0NCBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3BjaS1hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgInBjaS5oIgogCitzdGF0aWMgREVGSU5FX01VVEVYKHBjaV9hY3BpX3BtX25vdGlmeV9tdHgpOworCisvKioKKyAqIHBjaV9hY3BpX3dha2VfYnVzIC0gV2FrZS11cCBub3RpZmljYXRpb24gaGFuZGxlciBmb3Igcm9vdCBidXNlcy4KKyAqIEBoYW5kbGU6IEFDUEkgaGFuZGxlIG9mIGEgZGV2aWNlIHRoZSBub3RpZmljYXRpb24gaXMgZm9yLgorICogQGV2ZW50OiBUeXBlIG9mIHRoZSBzaWduYWxlZCBldmVudC4KKyAqIEBjb250ZXh0OiBQQ0kgcm9vdCBidXMgdG8gd2FrZSB1cCBkZXZpY2VzIG9uLgorICovCitzdGF0aWMgdm9pZCBwY2lfYWNwaV93YWtlX2J1cyhhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcGNpX2J1cyAqcGNpX2J1cyA9IGNvbnRleHQ7CisKKwlpZiAoZXZlbnQgPT0gQUNQSV9OT1RJRllfREVWSUNFX1dBS0UgJiYgcGNpX2J1cykKKwkJcGNpX3BtZV93YWtldXBfYnVzKHBjaV9idXMpOworfQorCisvKioKKyAqIHBjaV9hY3BpX3dha2VfZGV2IC0gV2FrZS11cCBub3RpZmljYXRpb24gaGFuZGxlciBmb3IgUENJIGRldmljZXMuCisgKiBAaGFuZGxlOiBBQ1BJIGhhbmRsZSBvZiBhIGRldmljZSB0aGUgbm90aWZpY2F0aW9uIGlzIGZvci4KKyAqIEBldmVudDogVHlwZSBvZiB0aGUgc2lnbmFsZWQgZXZlbnQuCisgKiBAY29udGV4dDogUENJIGRldmljZSBvYmplY3QgdG8gd2FrZSB1cC4KKyAqLworc3RhdGljIHZvaWQgcGNpX2FjcGlfd2FrZV9kZXYoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBjb250ZXh0OworCisJaWYgKGV2ZW50ID09IEFDUElfTk9USUZZX0RFVklDRV9XQUtFICYmIHBjaV9kZXYpIHsKKwkJcGNpX2NoZWNrX3BtZV9zdGF0dXMocGNpX2Rldik7CisJCXBtX3J1bnRpbWVfcmVzdW1lKCZwY2lfZGV2LT5kZXYpOworCQlpZiAocGNpX2Rldi0+c3Vib3JkaW5hdGUpCisJCQlwY2lfcG1lX3dha2V1cF9idXMocGNpX2Rldi0+c3Vib3JkaW5hdGUpOworCX0KK30KKworLyoqCisgKiBhZGRfcG1fbm90aWZpZXIgLSBSZWdpc3RlciBQTSBub3RpZmllciBmb3IgZ2l2ZW4gQUNQSSBkZXZpY2UuCisgKiBAZGV2OiBBQ1BJIGRldmljZSB0byBhZGQgdGhlIG5vdGlmaWVyIGZvci4KKyAqIEBjb250ZXh0OiBQQ0kgZGV2aWNlIG9yIGJ1cyB0byBjaGVjayBmb3IgUE1FIHN0YXR1cyBpZiBhbiBldmVudCBpcyBzaWduYWxlZC4KKyAqCisgKiBOT1RFOiBAZGV2IG5lZWQgbm90IGJlIGEgcnVuLXdha2Ugb3Igd2FrZS11cCBkZXZpY2UgdG8gYmUgYSB2YWxpZCBzb3VyY2Ugb2YKKyAqIFBNIHdha2UtdXAgZXZlbnRzLiAgRm9yIGV4YW1wbGUsIHdha2UtdXAgZXZlbnRzIG1heSBiZSBnZW5lcmF0ZWQgZm9yIGJyaWRnZXMKKyAqIGlmIG9uZSBvZiB0aGUgZGV2aWNlcyBiZWxvdyB0aGUgYnJpZGdlIGlzIHNpZ25hbGluZyBQTUUsIGV2ZW4gaWYgdGhlIGJyaWRnZQorICogaXRzZWxmIGRvZXNuJ3QgaGF2ZSBhIHdha2UtdXAgR1BFIGFzc29jaWF0ZWQgd2l0aCBpdC4KKyAqLworc3RhdGljIGFjcGlfc3RhdHVzIGFkZF9wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwKKwkJCQkgICBhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXIsCisJCQkJICAgdm9pZCAqY29udGV4dCkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9BTFJFQURZX0VYSVNUUzsKKworCW11dGV4X2xvY2soJnBjaV9hY3BpX3BtX25vdGlmeV9tdHgpOworCisJaWYgKGRldi0+d2FrZXVwLmZsYWdzLm5vdGlmaWVyX3ByZXNlbnQpCisJCWdvdG8gb3V0OworCisJc3RhdHVzID0gYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGRldi0+aGFuZGxlLAorCQkJCQkgICAgIEFDUElfU1lTVEVNX05PVElGWSwKKwkJCQkJICAgICBoYW5kbGVyLCBjb250ZXh0KTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCWdvdG8gb3V0OworCisJZGV2LT53YWtldXAuZmxhZ3Mubm90aWZpZXJfcHJlc2VudCA9IHRydWU7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwY2lfYWNwaV9wbV9ub3RpZnlfbXR4KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHJlbW92ZV9wbV9ub3RpZmllciAtIFVucmVnaXN0ZXIgUE0gbm90aWZpZXIgZnJvbSBnaXZlbiBBQ1BJIGRldmljZS4KKyAqIEBkZXY6IEFDUEkgZGV2aWNlIHRvIHJlbW92ZSB0aGUgbm90aWZpZXIgZnJvbS4KKyAqLworc3RhdGljIGFjcGlfc3RhdHVzIHJlbW92ZV9wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICBhY3BpX25vdGlmeV9oYW5kbGVyIGhhbmRsZXIpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKKworCW11dGV4X2xvY2soJnBjaV9hY3BpX3BtX25vdGlmeV9tdHgpOworCisJaWYgKCFkZXYtPndha2V1cC5mbGFncy5ub3RpZmllcl9wcmVzZW50KQorCQlnb3RvIG91dDsKKworCXN0YXR1cyA9IGFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGRldi0+aGFuZGxlLAorCQkJCQkgICAgQUNQSV9TWVNURU1fTk9USUZZLAorCQkJCQkgICAgaGFuZGxlcik7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlnb3RvIG91dDsKKworCWRldi0+d2FrZXVwLmZsYWdzLm5vdGlmaWVyX3ByZXNlbnQgPSBmYWxzZTsKKworIG91dDoKKwltdXRleF91bmxvY2soJnBjaV9hY3BpX3BtX25vdGlmeV9tdHgpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogcGNpX2FjcGlfYWRkX2J1c19wbV9ub3RpZmllciAtIFJlZ2lzdGVyIFBNIG5vdGlmaWVyIGZvciBnaXZlbiBQQ0kgYnVzLgorICogQGRldjogQUNQSSBkZXZpY2UgdG8gYWRkIHRoZSBub3RpZmllciBmb3IuCisgKiBAcGNpX2J1czogUENJIGJ1cyB0byB3YWxrIGNoZWNraW5nIGZvciBQTUUgc3RhdHVzIGlmIGFuIGV2ZW50IGlzIHNpZ25hbGVkLgorICovCithY3BpX3N0YXR1cyBwY2lfYWNwaV9hZGRfYnVzX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IHBjaV9idXMgKnBjaV9idXMpCit7CisJcmV0dXJuIGFkZF9wbV9ub3RpZmllcihkZXYsIHBjaV9hY3BpX3dha2VfYnVzLCBwY2lfYnVzKTsKK30KKworLyoqCisgKiBwY2lfYWNwaV9yZW1vdmVfYnVzX3BtX25vdGlmaWVyIC0gVW5yZWdpc3RlciBQQ0kgYnVzIFBNIG5vdGlmaWVyLgorICogQGRldjogQUNQSSBkZXZpY2UgdG8gcmVtb3ZlIHRoZSBub3RpZmllciBmcm9tLgorICovCithY3BpX3N0YXR1cyBwY2lfYWNwaV9yZW1vdmVfYnVzX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2KQoreworCXJldHVybiByZW1vdmVfcG1fbm90aWZpZXIoZGV2LCBwY2lfYWNwaV93YWtlX2J1cyk7Cit9CisKKy8qKgorICogcGNpX2FjcGlfYWRkX3BtX25vdGlmaWVyIC0gUmVnaXN0ZXIgUE0gbm90aWZpZXIgZm9yIGdpdmVuIFBDSSBkZXZpY2UuCisgKiBAZGV2OiBBQ1BJIGRldmljZSB0byBhZGQgdGhlIG5vdGlmaWVyIGZvci4KKyAqIEBwY2lfZGV2OiBQQ0kgZGV2aWNlIHRvIGNoZWNrIGZvciB0aGUgUE1FIHN0YXR1cyBpZiBhbiBldmVudCBpcyBzaWduYWxlZC4KKyAqLworYWNwaV9zdGF0dXMgcGNpX2FjcGlfYWRkX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCit7CisJcmV0dXJuIGFkZF9wbV9ub3RpZmllcihkZXYsIHBjaV9hY3BpX3dha2VfZGV2LCBwY2lfZGV2KTsKK30KKworLyoqCisgKiBwY2lfYWNwaV9yZW1vdmVfcG1fbm90aWZpZXIgLSBVbnJlZ2lzdGVyIFBDSSBkZXZpY2UgUE0gbm90aWZpZXIuCisgKiBAZGV2OiBBQ1BJIGRldmljZSB0byByZW1vdmUgdGhlIG5vdGlmaWVyIGZyb20uCisgKi8KK2FjcGlfc3RhdHVzIHBjaV9hY3BpX3JlbW92ZV9wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcmVtb3ZlX3BtX25vdGlmaWVyKGRldiwgcGNpX2FjcGlfd2FrZV9kZXYpOworfQorCiAvKgogICogX1N4RCByZXR1cm5zIHRoZSBELXN0YXRlIHdpdGggdGhlIGhpZ2hlc3QgcG93ZXIKICAqIChsb3dlc3QgRC1zdGF0ZSBudW1iZXIpIHN1cHBvcnRlZCBpbiB0aGUgUy1zdGF0ZSAieCIuCkBAIC0xMzEsMTIgKzI2Nyw4NyBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGFjcGlfZGV2X3J1bl93YWtlIC0gRW5hYmxlL2Rpc2FibGUgd2FrZS11cCBmb3IgZ2l2ZW4gZGV2aWNlLgorICogQHBoeXNfZGV2OiBEZXZpY2UgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIHBsYXRmb3JtIHRvIHdha2UtdXAgdGhlIHN5c3RlbSBmb3IuCisgKiBAZW5hYmxlOiBXaGV0aGVyIGVuYWJsZSBvciBkaXNhYmxlIHRoZSB3YWtlLXVwIGZ1bmN0aW9uYWxpdHkuCisgKgorICogRmluZCB0aGUgQUNQSSBkZXZpY2Ugb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gQHBjaV9kZXYgYW5kIHRyeSB0bworICogZW5hYmxlL2Rpc2FibGUgdGhlIEdQRSBhc3NvY2lhdGVkIHdpdGggaXQuCisgKi8KK3N0YXRpYyBpbnQgYWNwaV9kZXZfcnVuX3dha2Uoc3RydWN0IGRldmljZSAqcGh5c19kZXYsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2OworCWFjcGlfaGFuZGxlIGhhbmRsZTsKKwlpbnQgZXJyb3IgPSAtRU5PREVWOworCisJaWYgKCFkZXZpY2VfcnVuX3dha2UocGh5c19kZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhhbmRsZSA9IERFVklDRV9BQ1BJX0hBTkRMRShwaHlzX2Rldik7CisJaWYgKCFoYW5kbGUgfHwgQUNQSV9GQUlMVVJFKGFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2KSkpIHsKKwkJZGV2X2RiZyhwaHlzX2RldiwgIkFDUEkgaGFuZGxlIGhhcyBubyBjb250ZXh0IGluICVzIVxuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGVuYWJsZSkgeworCQlpZiAoIWRldi0+d2FrZXVwLnJ1bl93YWtlX2NvdW50KyspIHsKKwkJCWFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoZGV2LCBBQ1BJX1NUQVRFX1MwKTsKKwkJCWFjcGlfZW5hYmxlX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAorCQkJCQlkZXYtPndha2V1cC5ncGVfbnVtYmVyLAorCQkJCQlBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOworCQl9CisJfSBlbHNlIGlmIChkZXYtPndha2V1cC5ydW5fd2FrZV9jb3VudCA+IDApIHsKKwkJaWYgKCEtLWRldi0+d2FrZXVwLnJ1bl93YWtlX2NvdW50KSB7CisJCQlhY3BpX2Rpc2FibGVfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCisJCQkJCSBkZXYtPndha2V1cC5ncGVfbnVtYmVyLAorCQkJCQkgQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKKwkJCWFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKGRldik7CisJCX0KKwl9IGVsc2UgeworCQllcnJvciA9IC1FQUxSRUFEWTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfcGNpX3Byb3BhZ2F0ZV9ydW5fd2FrZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBib29sIGVuYWJsZSkKK3sKKwl3aGlsZSAoYnVzLT5wYXJlbnQpIHsKKwkJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IGJ1cy0+c2VsZjsKKworCQlpZiAoYnJpZGdlLT5wbWVfaW50ZXJydXB0KQorCQkJcmV0dXJuOworCQlpZiAoIWFjcGlfZGV2X3J1bl93YWtlKCZicmlkZ2UtPmRldiwgZW5hYmxlKSkKKwkJCXJldHVybjsKKwkJYnVzID0gYnVzLT5wYXJlbnQ7CisJfQorCisJLyogV2UgaGF2ZSByZWFjaGVkIHRoZSByb290IGJ1cy4gKi8KKwlpZiAoYnVzLT5icmlkZ2UpCisJCWFjcGlfZGV2X3J1bl93YWtlKGJ1cy0+YnJpZGdlLCBlbmFibGUpOworfQorCitzdGF0aWMgaW50IGFjcGlfcGNpX3J1bl93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKQoreworCWlmIChkZXYtPnBtZV9pbnRlcnJ1cHQpCisJCXJldHVybiAwOworCisJaWYgKCFhY3BpX2Rldl9ydW5fd2FrZSgmZGV2LT5kZXYsIGVuYWJsZSkpCisJCXJldHVybiAwOworCisJYWNwaV9wY2lfcHJvcGFnYXRlX3J1bl93YWtlKGRldi0+YnVzLCBlbmFibGUpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHBjaV9wbGF0Zm9ybV9wbV9vcHMgYWNwaV9wY2lfcGxhdGZvcm1fcG0gPSB7CiAJLmlzX21hbmFnZWFibGUgPSBhY3BpX3BjaV9wb3dlcl9tYW5hZ2VhYmxlLAogCS5zZXRfc3RhdGUgPSBhY3BpX3BjaV9zZXRfcG93ZXJfc3RhdGUsCiAJLmNob29zZV9zdGF0ZSA9IGFjcGlfcGNpX2Nob29zZV9zdGF0ZSwKIAkuY2FuX3dha2V1cCA9IGFjcGlfcGNpX2Nhbl93YWtldXAsCiAJLnNsZWVwX3dha2UgPSBhY3BpX3BjaV9zbGVlcF93YWtlLAorCS5ydW5fd2FrZSA9IGFjcGlfcGNpX3J1bl93YWtlLAogfTsKIAogLyogQUNQSSBidXMgdHlwZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCmluZGV4IGU1ZDQ3YmUuLmY5YTBhZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSAicGNpLmgiCiAKIHN0cnVjdCBwY2lfZHluaWQgewpAQCAtNDA0LDYgKzQwNSwzNSBAQAogCXBjaV9tc2l4X3NodXRkb3duKHBjaV9kZXYpOwogfQogCisjaWZkZWYgQ09ORklHX1BNX09QUworCisvKiBBdXhpbGlhcnkgZnVuY3Rpb25zIHVzZWQgZm9yIHN5c3RlbSByZXN1bWUgYW5kIHJ1bi10aW1lIHJlc3VtZS4gKi8KKworLyoqCisgKiBwY2lfcmVzdG9yZV9zdGFuZGFyZF9jb25maWcgLSByZXN0b3JlIHN0YW5kYXJkIGNvbmZpZyByZWdpc3RlcnMgb2YgUENJIGRldmljZQorICogQHBjaV9kZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlCisgKi8KK3N0YXRpYyBpbnQgcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQoreworCXBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShwY2lfZGV2LCBQQ0lfVU5LTk9XTik7CisKKwlpZiAocGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDApIHsKKwkJaW50IGVycm9yID0gcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDApOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJfQorCisJcmV0dXJuIHBjaV9yZXN0b3JlX3N0YXRlKHBjaV9kZXYpOworfQorCitzdGF0aWMgdm9pZCBwY2lfcG1fZGVmYXVsdF9yZXN1bWVfZWFybHkoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCit7CisJcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnKHBjaV9kZXYpOworCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX3Jlc3VtZV9lYXJseSwgcGNpX2Rldik7Cit9CisKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiAKIC8qCkBAIC01MjAsMjkgKzU1MCw2IEBACiAKIC8qIEF1eGlsaWFyeSBmdW5jdGlvbnMgdXNlZCBieSB0aGUgbmV3IHBvd2VyIG1hbmFnZW1lbnQgZnJhbWV3b3JrICovCiAKLS8qKgotICogcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnIC0gcmVzdG9yZSBzdGFuZGFyZCBjb25maWcgcmVnaXN0ZXJzIG9mIFBDSSBkZXZpY2UKLSAqIEBwY2lfZGV2OiBQQ0kgZGV2aWNlIHRvIGhhbmRsZQotICovCi1zdGF0aWMgaW50IHBjaV9yZXN0b3JlX3N0YW5kYXJkX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKLXsKLQlwY2lfdXBkYXRlX2N1cnJlbnRfc3RhdGUocGNpX2RldiwgUENJX1VOS05PV04pOwotCi0JaWYgKHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgIT0gUENJX0QwKSB7Ci0JCWludCBlcnJvciA9IHBjaV9zZXRfcG93ZXJfc3RhdGUocGNpX2RldiwgUENJX0QwKTsKLQkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOwotCX0KLQotCXJldHVybiBwY2lfcmVzdG9yZV9zdGF0ZShwY2lfZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgcGNpX3BtX2RlZmF1bHRfcmVzdW1lX25vaXJxKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQotewotCXBjaV9yZXN0b3JlX3N0YW5kYXJkX2NvbmZpZyhwY2lfZGV2KTsKLQlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9yZXN1bWVfZWFybHksIHBjaV9kZXYpOwotfQotCiBzdGF0aWMgdm9pZCBwY2lfcG1fZGVmYXVsdF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7CiAJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfcmVzdW1lLCBwY2lfZGV2KTsKQEAgLTU4MSw2ICs1ODgsMTcgQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IGVycm9yID0gMDsKIAorCS8qCisJICogUENJIGRldmljZXMgc3VzcGVuZGVkIGF0IHJ1biB0aW1lIG5lZWQgdG8gYmUgcmVzdW1lZCBhdCB0aGlzCisJICogcG9pbnQsIGJlY2F1c2UgaW4gZ2VuZXJhbCBpdCBpcyBuZWNlc3NhcnkgdG8gcmVjb25maWd1cmUgdGhlbSBmb3IKKwkgKiBzeXN0ZW0gc3VzcGVuZC4gIE5hbWVseSwgaWYgdGhlIGRldmljZSBpcyBzdXBwb3NlZCB0byB3YWtlIHVwIHRoZQorCSAqIHN5c3RlbSBmcm9tIHRoZSBzbGVlcCBzdGF0ZSwgd2UgbWF5IG5lZWQgdG8gcmVjb25maWd1cmUgaXQgZm9yIHRoaXMKKwkgKiBwdXJwb3NlLiAgSW4gdHVybiwgaWYgdGhlIGRldmljZSBpcyBub3Qgc3VwcG9zZWQgdG8gd2FrZSB1cCB0aGUKKwkgKiBzeXN0ZW0gZnJvbSB0aGUgc2xlZXAgc3RhdGUsIHdlJ2xsIGhhdmUgdG8gcHJldmVudCBpdCBmcm9tIHNpZ25hbGluZworCSAqIHdha2UtdXAuCisJICovCisJcG1fcnVudGltZV9yZXN1bWUoZGV2KTsKKwogCWlmIChkcnYgJiYgZHJ2LT5wbSAmJiBkcnYtPnBtLT5wcmVwYXJlKQogCQllcnJvciA9IGRydi0+cG0tPnByZXBhcmUoZGV2KTsKIApAQCAtNTk1LDYgKzYxMywxMyBAQAogCQlkcnYtPnBtLT5jb21wbGV0ZShkZXYpOwogfQogCisjZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCisKKyNkZWZpbmUgcGNpX3BtX3ByZXBhcmUJTlVMTAorI2RlZmluZSBwY2lfcG1fY29tcGxldGUJTlVMTAorCisjZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLworCiAjaWZkZWYgQ09ORklHX1NVU1BFTkQKIAogc3RhdGljIGludCBwY2lfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC02ODEsNyArNzA2LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IGVycm9yID0gMDsKIAotCXBjaV9wbV9kZWZhdWx0X3Jlc3VtZV9ub2lycShwY2lfZGV2KTsKKwlwY2lfcG1fZGVmYXVsdF9yZXN1bWVfZWFybHkocGNpX2Rldik7CiAKIAlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkKIAkJcmV0dXJuIHBjaV9sZWdhY3lfcmVzdW1lX2Vhcmx5KGRldik7CkBAIC04NzksNyArOTA0LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IGVycm9yID0gMDsKIAotCXBjaV9wbV9kZWZhdWx0X3Jlc3VtZV9ub2lycShwY2lfZGV2KTsKKwlwY2lfcG1fZGVmYXVsdF9yZXN1bWVfZWFybHkocGNpX2Rldik7CiAKIAlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkKIAkJcmV0dXJuIHBjaV9sZWdhY3lfcmVzdW1lX2Vhcmx5KGRldik7CkBAIC05MzEsNiArOTU2LDg0IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX0hJQkVSTkFUSU9OICovCiAKKyNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorCitzdGF0aWMgaW50IHBjaV9wbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKwlwY2lfcG93ZXJfdCBwcmV2ID0gcGNpX2Rldi0+Y3VycmVudF9zdGF0ZTsKKwlpbnQgZXJyb3I7CisKKwlpZiAoIXBtIHx8ICFwbS0+cnVudGltZV9zdXNwZW5kKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCWVycm9yID0gcG0tPnJ1bnRpbWVfc3VzcGVuZChkZXYpOworCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChwbS0+cnVudGltZV9zdXNwZW5kLCBlcnJvcik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9zdXNwZW5kLCBwY2lfZGV2KTsKKworCWlmICghcGNpX2Rldi0+c3RhdGVfc2F2ZWQgJiYgcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDAKKwkgICAgJiYgcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfVU5LTk9XTikgeworCQlXQVJOX09OQ0UocGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBwcmV2LAorCQkJIlBDSSBQTTogU3RhdGUgb2YgZGV2aWNlIG5vdCBzYXZlZCBieSAlcEZcbiIsCisJCQlwbS0+cnVudGltZV9zdXNwZW5kKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFwY2lfZGV2LT5zdGF0ZV9zYXZlZCkKKwkJcGNpX3NhdmVfc3RhdGUocGNpX2Rldik7CisKKwlwY2lfZmluaXNoX3J1bnRpbWVfc3VzcGVuZChwY2lfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaV9wbV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOworCisJaWYgKCFwbSB8fCAhcG0tPnJ1bnRpbWVfcmVzdW1lKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCXBjaV9wbV9kZWZhdWx0X3Jlc3VtZV9lYXJseShwY2lfZGV2KTsKKwlfX3BjaV9lbmFibGVfd2FrZShwY2lfZGV2LCBQQ0lfRDAsIHRydWUsIGZhbHNlKTsKKwlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9yZXN1bWUsIHBjaV9kZXYpOworCisJcmV0dXJuIHBtLT5ydW50aW1lX3Jlc3VtZShkZXYpOworfQorCitzdGF0aWMgaW50IHBjaV9wbV9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKworCWlmICghcG0pCisJCXJldHVybiAtRU5PU1lTOworCisJaWYgKHBtLT5ydW50aW1lX2lkbGUpIHsKKwkJaW50IHJldCA9IHBtLT5ydW50aW1lX2lkbGUoZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcG1fcnVudGltZV9zdXNwZW5kKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UgLyogIUNPTkZJR19QTV9SVU5USU1FICovCisKKyNkZWZpbmUgcGNpX3BtX3J1bnRpbWVfc3VzcGVuZAlOVUxMCisjZGVmaW5lIHBjaV9wbV9ydW50aW1lX3Jlc3VtZQlOVUxMCisjZGVmaW5lIHBjaV9wbV9ydW50aW1lX2lkbGUJTlVMTAorCisjZW5kaWYgLyogIUNPTkZJR19QTV9SVU5USU1FICovCisKKyNpZmRlZiBDT05GSUdfUE1fT1BTCisKIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHBjaV9kZXZfcG1fb3BzID0gewogCS5wcmVwYXJlID0gcGNpX3BtX3ByZXBhcmUsCiAJLmNvbXBsZXRlID0gcGNpX3BtX2NvbXBsZXRlLApAQCAtOTQ2LDE1ICsxMDQ5LDE4IEBACiAJLnRoYXdfbm9pcnEgPSBwY2lfcG1fdGhhd19ub2lycSwKIAkucG93ZXJvZmZfbm9pcnEgPSBwY2lfcG1fcG93ZXJvZmZfbm9pcnEsCiAJLnJlc3RvcmVfbm9pcnEgPSBwY2lfcG1fcmVzdG9yZV9ub2lycSwKKwkucnVudGltZV9zdXNwZW5kID0gcGNpX3BtX3J1bnRpbWVfc3VzcGVuZCwKKwkucnVudGltZV9yZXN1bWUgPSBwY2lfcG1fcnVudGltZV9yZXN1bWUsCisJLnJ1bnRpbWVfaWRsZSA9IHBjaV9wbV9ydW50aW1lX2lkbGUsCiB9OwogCiAjZGVmaW5lIFBDSV9QTV9PUFNfUFRSCSgmcGNpX2Rldl9wbV9vcHMpCiAKLSNlbHNlIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KKyNlbHNlIC8qICFDT01GSUdfUE1fT1BTICovCiAKICNkZWZpbmUgUENJX1BNX09QU19QVFIJTlVMTAogCi0jZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLworI2VuZGlmIC8qICFDT01GSUdfUE1fT1BTICovCiAKIC8qKgogICogX19wY2lfcmVnaXN0ZXJfZHJpdmVyIC0gcmVnaXN0ZXIgYSBuZXcgcGNpIGRyaXZlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCAzMTVmZWE0Li41YjU0OGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fd2FrZXVwLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgkvKiBpc2FfZG1hX2JyaWRnZV9idWdneSAqLwogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlICJwY2kuaCIKIApAQCAtMjksNiArMjksMTIgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcG93ZXJfbmFtZXMpOwogCitpbnQgaXNhX2RtYV9icmlkZ2VfYnVnZ3k7CitFWFBPUlRfU1lNQk9MKGlzYV9kbWFfYnJpZGdlX2J1Z2d5KTsKKworaW50IHBjaV9wY2lfcHJvYmxlbXM7CitFWFBPUlRfU1lNQk9MKHBjaV9wY2lfcHJvYmxlbXMpOworCiB1bnNpZ25lZCBpbnQgcGNpX3BtX2QzX2RlbGF5OwogCiBzdGF0aWMgdm9pZCBwY2lfZGV2X2QzX3NsZWVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC0zODAsMTAgKzM4Niw5IEBACiB7CiAJY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cyA9IGRldi0+YnVzOwogCWludCBpOwotCXN0cnVjdCByZXNvdXJjZSAqYmVzdCA9IE5VTEw7CisJc3RydWN0IHJlc291cmNlICpiZXN0ID0gTlVMTCwgKnI7CiAKLQlmb3IoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSBidXMtPnJlc291cmNlW2ldOworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByLCBpKSB7CiAJCWlmICghcikKIAkJCWNvbnRpbnVlOwogCQlpZiAocmVzLT5zdGFydCAmJiAhKHJlcy0+c3RhcnQgPj0gci0+c3RhcnQgJiYgcmVzLT5lbmQgPD0gci0+ZW5kKSkKQEAgLTQ1Nyw2ICs0NjIsMTIgQEAKIAkJCXBjaV9wbGF0Zm9ybV9wbS0+c2xlZXBfd2FrZShkZXYsIGVuYWJsZSkgOiAtRU5PREVWOwogfQogCitzdGF0aWMgaW5saW5lIGludCBwbGF0Zm9ybV9wY2lfcnVuX3dha2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBlbmFibGUpCit7CisJcmV0dXJuIHBjaV9wbGF0Zm9ybV9wbSA/CisJCQlwY2lfcGxhdGZvcm1fcG0tPnJ1bl93YWtlKGRldiwgZW5hYmxlKSA6IC1FTk9ERVY7Cit9CisKIC8qKgogICogcGNpX3Jhd19zZXRfcG93ZXJfc3RhdGUgLSBVc2UgUENJIFBNIHJlZ2lzdGVycyB0byBzZXQgdGhlIHBvd2VyIHN0YXRlIG9mCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIFBDSSBkZXZpY2UKQEAgLTExOTAsNiArMTIwMSw2NiBAQAogfQogCiAvKioKKyAqIHBjaV9jaGVja19wbWVfc3RhdHVzIC0gQ2hlY2sgaWYgZ2l2ZW4gZGV2aWNlIGhhcyBnZW5lcmF0ZWQgUE1FLgorICogQGRldjogRGV2aWNlIHRvIGNoZWNrLgorICoKKyAqIENoZWNrIHRoZSBQTUUgc3RhdHVzIG9mIHRoZSBkZXZpY2UgYW5kIGlmIHNldCwgY2xlYXIgaXQgYW5kIGNsZWFyIFBNRSBlbmFibGUKKyAqIChpZiBzZXQpLiAgUmV0dXJuICd0cnVlJyBpZiBQTUUgc3RhdHVzIGFuZCBQTUUgZW5hYmxlIHdlcmUgYm90aCBzZXQgb3IKKyAqICdmYWxzZScgb3RoZXJ3aXNlLgorICovCitib29sIHBjaV9jaGVja19wbWVfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHBtY3NyX3BvczsKKwl1MTYgcG1jc3I7CisJYm9vbCByZXQgPSBmYWxzZTsKKworCWlmICghZGV2LT5wbV9jYXApCisJCXJldHVybiBmYWxzZTsKKworCXBtY3NyX3BvcyA9IGRldi0+cG1fY2FwICsgUENJX1BNX0NUUkw7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwbWNzcl9wb3MsICZwbWNzcik7CisJaWYgKCEocG1jc3IgJiBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQ2xlYXIgUE1FIHN0YXR1cy4gKi8KKwlwbWNzciB8PSBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTOworCWlmIChwbWNzciAmIFBDSV9QTV9DVFJMX1BNRV9FTkFCTEUpIHsKKwkJLyogRGlzYWJsZSBQTUUgdG8gYXZvaWQgaW50ZXJydXB0IGZsb29kLiAqLworCQlwbWNzciAmPSB+UENJX1BNX0NUUkxfUE1FX0VOQUJMRTsKKwkJcmV0ID0gdHJ1ZTsKKwl9CisKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBwbWNzcl9wb3MsIHBtY3NyKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogcGNpX3BtZV93YWtldXAgLSBXYWtlIHVwIGEgUENJIGRldmljZSBpZiBpdHMgUE1FIFN0YXR1cyBiaXQgaXMgc2V0LgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqIEBpZ246IElnbm9yZWQuCisgKgorICogQ2hlY2sgaWYgQGRldiBoYXMgZ2VuZXJhdGVkIFBNRSBhbmQgcXVldWUgYSByZXN1bWUgcmVxdWVzdCBmb3IgaXQgaW4gdGhhdAorICogY2FzZS4KKyAqLworc3RhdGljIGludCBwY2lfcG1lX3dha2V1cChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICppZ24pCit7CisJaWYgKHBjaV9jaGVja19wbWVfc3RhdHVzKGRldikpCisJCXBtX3JlcXVlc3RfcmVzdW1lKCZkZXYtPmRldik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcGNpX3BtZV93YWtldXBfYnVzIC0gV2FsayBnaXZlbiBidXMgYW5kIHdha2UgdXAgZGV2aWNlcyBvbiBpdCwgaWYgbmVjZXNzYXJ5LgorICogQGJ1czogVG9wIGJ1cyBvZiB0aGUgc3VidHJlZSB0byB3YWxrLgorICovCit2b2lkIHBjaV9wbWVfd2FrZXVwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCWlmIChidXMpCisJCXBjaV93YWxrX2J1cyhidXMsIHBjaV9wbWVfd2FrZXVwLCBOVUxMKTsKK30KKworLyoqCiAgKiBwY2lfcG1lX2NhcGFibGUgLSBjaGVjayB0aGUgY2FwYWJpbGl0eSBvZiBQQ0kgZGV2aWNlIHRvIGdlbmVyYXRlIFBNRSMKICAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlLgogICogQHN0YXRlOiBQQ0kgc3RhdGUgZnJvbSB3aGljaCBkZXZpY2Ugd2lsbCBpc3N1ZSBQTUUjLgpAQCAtMTIzMCw5ICsxMzAxLDEwIEBACiB9CiAKIC8qKgotICogcGNpX2VuYWJsZV93YWtlIC0gZW5hYmxlIFBDSSBkZXZpY2UgYXMgd2FrZXVwIGV2ZW50IHNvdXJjZQorICogX19wY2lfZW5hYmxlX3dha2UgLSBlbmFibGUgUENJIGRldmljZSBhcyB3YWtldXAgZXZlbnQgc291cmNlCiAgKiBAZGV2OiBQQ0kgZGV2aWNlIGFmZmVjdGVkCiAgKiBAc3RhdGU6IFBDSSBzdGF0ZSBmcm9tIHdoaWNoIGRldmljZSB3aWxsIGlzc3VlIHdha2V1cCBldmVudHMKKyAqIEBydW50aW1lOiBUcnVlIGlmIHRoZSBldmVudHMgYXJlIHRvIGJlIGdlbmVyYXRlZCBhdCBydW4gdGltZQogICogQGVuYWJsZTogVHJ1ZSB0byBlbmFibGUgZXZlbnQgZ2VuZXJhdGlvbjsgZmFsc2UgdG8gZGlzYWJsZQogICoKICAqIFRoaXMgZW5hYmxlcyB0aGUgZGV2aWNlIGFzIGEgd2FrZXVwIGV2ZW50IHNvdXJjZSwgb3IgZGlzYWJsZXMgaXQuCkBAIC0xMjQ4LDExICsxMzIwLDEyIEBACiAgKiBFcnJvciBjb2RlIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gaXMgcmV0dXJuZWQgaWYgYm90aCB0aGUgcGxhdGZvcm0gYW5kCiAgKiB0aGUgbmF0aXZlIG1lY2hhbmlzbSBmYWlsIHRvIGVuYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiB3YWtlLXVwIGV2ZW50cwogICovCi1pbnQgcGNpX2VuYWJsZV93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlLCBib29sIGVuYWJsZSkKK2ludCBfX3BjaV9lbmFibGVfd2FrZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSwKKwkJICAgICAgYm9vbCBydW50aW1lLCBib29sIGVuYWJsZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChlbmFibGUgJiYgIWRldmljZV9tYXlfd2FrZXVwKCZkZXYtPmRldikpCisJaWYgKGVuYWJsZSAmJiAhcnVudGltZSAmJiAhZGV2aWNlX21heV93YWtldXAoJmRldi0+ZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBEb24ndCBkbyB0aGUgc2FtZSB0aGluZyB0d2ljZSBpbiBhIHJvdyBmb3Igb25lIGRldmljZS4gKi8KQEAgLTEyNzIsMTkgKzEzNDUsMjQgQEAKIAkJCXBjaV9wbWVfYWN0aXZlKGRldiwgdHJ1ZSk7CiAJCWVsc2UKIAkJCXJldCA9IDE7Ci0JCWVycm9yID0gcGxhdGZvcm1fcGNpX3NsZWVwX3dha2UoZGV2LCB0cnVlKTsKKwkJZXJyb3IgPSBydW50aW1lID8gcGxhdGZvcm1fcGNpX3J1bl93YWtlKGRldiwgdHJ1ZSkgOgorCQkJCQlwbGF0Zm9ybV9wY2lfc2xlZXBfd2FrZShkZXYsIHRydWUpOwogCQlpZiAocmV0KQogCQkJcmV0ID0gZXJyb3I7CiAJCWlmICghcmV0KQogCQkJZGV2LT53YWtldXBfcHJlcGFyZWQgPSB0cnVlOwogCX0gZWxzZSB7Ci0JCXBsYXRmb3JtX3BjaV9zbGVlcF93YWtlKGRldiwgZmFsc2UpOworCQlpZiAocnVudGltZSkKKwkJCXBsYXRmb3JtX3BjaV9ydW5fd2FrZShkZXYsIGZhbHNlKTsKKwkJZWxzZQorCQkJcGxhdGZvcm1fcGNpX3NsZWVwX3dha2UoZGV2LCBmYWxzZSk7CiAJCXBjaV9wbWVfYWN0aXZlKGRldiwgZmFsc2UpOwogCQlkZXYtPndha2V1cF9wcmVwYXJlZCA9IGZhbHNlOwogCX0KIAogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKF9fcGNpX2VuYWJsZV93YWtlKTsKIAogLyoqCiAgKiBwY2lfd2FrZV9mcm9tX2QzIC0gZW5hYmxlL2Rpc2FibGUgZGV2aWNlIHRvIHdha2UgdXAgZnJvbSBEM19ob3Qgb3IgRDNfY29sZApAQCAtMTM5NCw2ICsxNDcyLDY2IEBACiB9CiAKIC8qKgorICogcGNpX2ZpbmlzaF9ydW50aW1lX3N1c3BlbmQgLSBDYXJyeSBvdXQgUENJLXNwZWNpZmljIHBhcnQgb2YgcnVudGltZSBzdXNwZW5kLgorICogQGRldjogUENJIGRldmljZSBiZWluZyBzdXNwZW5kZWQuCisgKgorICogUHJlcGFyZSBAZGV2IHRvIGdlbmVyYXRlIHdha2UtdXAgZXZlbnRzIGF0IHJ1biB0aW1lIGFuZCBwdXQgaXQgaW50byBhIGxvdworICogcG93ZXIgc3RhdGUuCisgKi8KK2ludCBwY2lfZmluaXNoX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXBjaV9wb3dlcl90IHRhcmdldF9zdGF0ZSA9IHBjaV90YXJnZXRfc3RhdGUoZGV2KTsKKwlpbnQgZXJyb3I7CisKKwlpZiAodGFyZ2V0X3N0YXRlID09IFBDSV9QT1dFUl9FUlJPUikKKwkJcmV0dXJuIC1FSU87CisKKwlfX3BjaV9lbmFibGVfd2FrZShkZXYsIHRhcmdldF9zdGF0ZSwgdHJ1ZSwgcGNpX2Rldl9ydW5fd2FrZShkZXYpKTsKKworCWVycm9yID0gcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHRhcmdldF9zdGF0ZSk7CisKKwlpZiAoZXJyb3IpCisJCV9fcGNpX2VuYWJsZV93YWtlKGRldiwgdGFyZ2V0X3N0YXRlLCB0cnVlLCBmYWxzZSk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogcGNpX2Rldl9ydW5fd2FrZSAtIENoZWNrIGlmIGRldmljZSBjYW4gZ2VuZXJhdGUgcnVuLXRpbWUgd2FrZS11cCBldmVudHMuCisgKiBAZGV2OiBEZXZpY2UgdG8gY2hlY2suCisgKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGRldmljZSBpdHNlbGYgaXMgY2FiYWJsZSBvZiBnZW5lcmF0aW5nIHdha2UtdXAgZXZlbnRzCisgKiAodGhyb3VnaCB0aGUgcGxhdGZvcm0gb3IgdXNpbmcgdGhlIG5hdGl2ZSBQQ0llIFBNRSkgb3IgaWYgdGhlIGRldmljZSBzdXBwb3J0cworICogUE1FIGFuZCBvbmUgb2YgaXRzIHVwc3RyZWFtIGJyaWRnZXMgY2FuIGdlbmVyYXRlIHdha2UtdXAgZXZlbnRzLgorICovCitib29sIHBjaV9kZXZfcnVuX3dha2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gZGV2LT5idXM7CisKKwlpZiAoZGV2aWNlX3J1bl93YWtlKCZkZXYtPmRldikpCisJCXJldHVybiB0cnVlOworCisJaWYgKCFkZXYtPnBtZV9zdXBwb3J0KQorCQlyZXR1cm4gZmFsc2U7CisKKwl3aGlsZSAoYnVzLT5wYXJlbnQpIHsKKwkJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IGJ1cy0+c2VsZjsKKworCQlpZiAoZGV2aWNlX3J1bl93YWtlKCZicmlkZ2UtPmRldikpCisJCQlyZXR1cm4gdHJ1ZTsKKworCQlidXMgPSBidXMtPnBhcmVudDsKKwl9CisKKwkvKiBXZSBoYXZlIHJlYWNoZWQgdGhlIHJvb3QgYnVzLiAqLworCWlmIChidXMtPmJyaWRnZSkKKwkJcmV0dXJuIGRldmljZV9ydW5fd2FrZShidXMtPmJyaWRnZSk7CisKKwlyZXR1cm4gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfZGV2X3J1bl93YWtlKTsKKworLyoqCiAgKiBwY2lfcG1faW5pdCAtIEluaXRpYWxpemUgUE0gZnVuY3Rpb25zIG9mIGdpdmVuIFBDSSBkZXZpY2UKICAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlLgogICovCkBAIC0xNDAyLDYgKzE1NDAsNyBAQAogCWludCBwbTsKIAl1MTYgcG1jOwogCisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZkZXYtPmRldik7CiAJZGV2LT53YWtldXBfcHJlcGFyZWQgPSBmYWxzZTsKIAlkZXYtPnBtX2NhcCA9IDA7CiAKQEAgLTI2MTUsNiArMjc1NCwyMyBAQAogCXJldHVybiAwOwogfQogCisvKiBTb21lIGFyY2hpdGVjdHVyZXMgcmVxdWlyZSBhZGRpdGlvbmFsIHByb2dyYW1taW5nIHRvIGVuYWJsZSBWR0EgKi8KK3N0YXRpYyBhcmNoX3NldF92Z2Ffc3RhdGVfdCBhcmNoX3NldF92Z2Ffc3RhdGU7CisKK3ZvaWQgX19pbml0IHBjaV9yZWdpc3Rlcl9zZXRfdmdhX3N0YXRlKGFyY2hfc2V0X3ZnYV9zdGF0ZV90IGZ1bmMpCit7CisJYXJjaF9zZXRfdmdhX3N0YXRlID0gZnVuYzsJLyogTlVMTCBkaXNhYmxlcyAqLworfQorCitzdGF0aWMgaW50IHBjaV9zZXRfdmdhX3N0YXRlX2FyY2goc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBkZWNvZGUsCisJCSAgICAgIHVuc2lnbmVkIGludCBjb21tYW5kX2JpdHMsIGJvb2wgY2hhbmdlX2JyaWRnZSkKK3sKKwlpZiAoYXJjaF9zZXRfdmdhX3N0YXRlKQorCQlyZXR1cm4gYXJjaF9zZXRfdmdhX3N0YXRlKGRldiwgZGVjb2RlLCBjb21tYW5kX2JpdHMsCisJCQkJCQljaGFuZ2VfYnJpZGdlKTsKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBwY2lfc2V0X3ZnYV9zdGF0ZSAtIHNldCBWR0EgZGVjb2RlIHN0YXRlIG9uIGRldmljZSBhbmQgcGFyZW50cyBpZiByZXF1ZXN0ZWQKICAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlCkBAIC0yNjI4LDkgKzI3ODQsMTUgQEAKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOwogCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2U7CiAJdTE2IGNtZDsKKwlpbnQgcmM7CiAKIAlXQVJOX09OKGNvbW1hbmRfYml0cyAmIH4oUENJX0NPTU1BTkRfSU98UENJX0NPTU1BTkRfTUVNT1JZKSk7CiAKKwkvKiBBUkNIIHNwZWNpZmljIFZHQSBlbmFibGVzICovCisJcmMgPSBwY2lfc2V0X3ZnYV9zdGF0ZV9hcmNoKGRldiwgZGVjb2RlLCBjb21tYW5kX2JpdHMsIGNoYW5nZV9icmlkZ2UpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7CiAJaWYgKGRlY29kZSA9PSB0cnVlKQogCQljbWQgfD0gY29tbWFuZF9iaXRzOwpAQCAtMjg0NSw2ICszMDA3LDcgQEAKIEVYUE9SVF9TWU1CT0wocGNpX2Rpc2FibGVfZGV2aWNlKTsKIEVYUE9SVF9TWU1CT0wocGNpX2ZpbmRfY2FwYWJpbGl0eSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9idXNfZmluZF9jYXBhYmlsaXR5KTsKK0VYUE9SVF9TWU1CT0wocGNpX3JlZ2lzdGVyX3NldF92Z2Ffc3RhdGUpOwogRVhQT1JUX1NZTUJPTChwY2lfcmVsZWFzZV9yZWdpb25zKTsKIEVYUE9SVF9TWU1CT0wocGNpX3JlcXVlc3RfcmVnaW9ucyk7CiBFWFBPUlRfU1lNQk9MKHBjaV9yZXF1ZXN0X3JlZ2lvbnNfZXhjbHVzaXZlKTsKQEAgLTI4NzEsMTAgKzMwMzQsOCBAQAogRVhQT1JUX1NZTUJPTChwY2lfcmVzdG9yZV9zdGF0ZSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9wbWVfY2FwYWJsZSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9wbWVfYWN0aXZlKTsKLUVYUE9SVF9TWU1CT0wocGNpX2VuYWJsZV93YWtlKTsKIEVYUE9SVF9TWU1CT0wocGNpX3dha2VfZnJvbV9kMyk7CiBFWFBPUlRfU1lNQk9MKHBjaV90YXJnZXRfc3RhdGUpOwogRVhQT1JUX1NZTUJPTChwY2lfcHJlcGFyZV90b19zbGVlcCk7CiBFWFBPUlRfU1lNQk9MKHBjaV9iYWNrX2Zyb21fc2xlZXApOwogRVhQT1JUX1NZTUJPTF9HUEwocGNpX3NldF9wY2llX3Jlc2V0X3N0YXRlKTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2ZXJzL3BjaS9wY2kuaAppbmRleCBmYmQwZTNhLi40ZWIxMGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuaAorKysgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtMzUsNiArMzUsMTAgQEAKICAqCiAgKiBAc2xlZXBfd2FrZTogZW5hYmxlcy9kaXNhYmxlcyB0aGUgc3lzdGVtIHdha2UgdXAgY2FwYWJpbGl0eSBvZiBnaXZlbiBkZXZpY2UKICAqCisgKiBAcnVuX3dha2U6IGVuYWJsZXMvZGlzYWJsZXMgdGhlIHBsYXRmb3JtIHRvIGdlbmVyYXRlIHJ1bi10aW1lIHdha2UtdXAgZXZlbnRzCisgKgkJZm9yIGdpdmVuIGRldmljZSAodGhlIGRldmljZSdzIHdha2UtdXAgY2FwYWJpbGl0eSBoYXMgdG8gYmUKKyAqCQllbmFibGVkIGJ5IEBzbGVlcF93YWtlIGZvciB0aGlzIGZlYXR1cmUgdG8gd29yaykKKyAqCiAgKiBJZiBnaXZlbiBwbGF0Zm9ybSBpcyBnZW5lcmFsbHkgY2FwYWJsZSBvZiBwb3dlciBtYW5hZ2luZyBQQ0kgZGV2aWNlcywgYWxsIG9mCiAgKiB0aGVzZSBjYWxsYmFja3MgYXJlIG1hbmRhdG9yeS4KICAqLwpAQCAtNDQsMTEgKzQ4LDE2IEBACiAJcGNpX3Bvd2VyX3QgKCpjaG9vc2Vfc3RhdGUpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCWJvb2wgKCpjYW5fd2FrZXVwKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIAlpbnQgKCpzbGVlcF93YWtlKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIGVuYWJsZSk7CisJaW50ICgqcnVuX3dha2UpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKTsKIH07CiAKIGV4dGVybiBpbnQgcGNpX3NldF9wbGF0Zm9ybV9wbShzdHJ1Y3QgcGNpX3BsYXRmb3JtX3BtX29wcyAqb3BzKTsKIGV4dGVybiB2b2lkIHBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSk7CiBleHRlcm4gdm9pZCBwY2lfZGlzYWJsZV9lbmFibGVkX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiBib29sIHBjaV9jaGVja19wbWVfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIGludCBwY2lfZmluaXNoX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiBpbnQgX19wY2lfcG1lX3dha2V1cChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICppZ24pOworZXh0ZXJuIHZvaWQgcGNpX3BtZV93YWtldXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogZXh0ZXJuIHZvaWQgcGNpX3BtX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldik7CiBleHRlcm4gdm9pZCBwbGF0Zm9ybV9wY2lfd2FrZXVwX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldik7CiBleHRlcm4gdm9pZCBwY2lfYWxsb2NhdGVfY2FwX3NhdmVfYnVmZmVycyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKQEAgLTMxOSw2ICszMjgsMTMgQEAKIAlpbnQgKCpyZXNldCkoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHByb2JlKTsKIH07CiAKKyNpZmRlZiBDT05GSUdfUENJX1FVSVJLUwogZXh0ZXJuIGludCBwY2lfZGV2X3NwZWNpZmljX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwcm9iZSk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcGNpX2Rldl9zcGVjaWZpY19yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcHJvYmUpCit7CisJcmV0dXJuIC1FTk9UVFk7Cit9CisjZW5kaWYKIAogI2VuZGlmIC8qIERSSVZFUlNfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL3BjaWUvS2NvbmZpZwppbmRleCA1YTBjNmFkLi5iOGI0OTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL0tjb25maWcKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9LY29uZmlnCkBAIC00NiwzICs0Niw3IEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIFBDSSBFeHByZXNzIEFTUE0gZGVidWcgc3VwcG9ydC4gSXQgd2lsbCBhZGQgcGVyLWRldmljZQogCSAgaW50ZXJmYWNlIHRvIGNvbnRyb2wgQVNQTS4KKworY29uZmlnIFBDSUVfUE1FCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gUENJRVBPUlRCVVMgJiYgUE1fUlVOVElNRSAmJiBFWFBFUklNRU5UQUwgJiYgQUNQSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9NYWtlZmlsZSBiL2RyaXZlcnMvcGNpL3BjaWUvTWFrZWZpbGUKaW5kZXggMTFmNmJiMWUuLmVhNjU0NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9NYWtlZmlsZQpAQCAtMTEsMyArMTEsNSBAQAogCiAjIEJ1aWxkIFBDSSBFeHByZXNzIEFFUiBpZiBuZWVkZWQKIG9iai0kKENPTkZJR19QQ0lFQUVSKQkJKz0gYWVyLworCitvYmotJChDT05GSUdfUENJRV9QTUUpICs9IHBtZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG1lL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI5MjM4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG1lL01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorIworIyBNYWtlZmlsZSBmb3IgUENJLUV4cHJlc3MgUm9vdCBQb3J0IFBNRSBzaWduYWxpbmcgZHJpdmVyCisjCisKK29iai0kKENPTkZJR19QQ0lFX1BNRSkgKz0gcG1lZHJpdmVyLm8KKworcG1lZHJpdmVyLW9ianMgOj0gcGNpZV9wbWUubworcG1lZHJpdmVyLSQoQ09ORklHX0FDUEkpICs9IHBjaWVfcG1lX2FjcGkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuYyBiL2RyaXZlcnMvcGNpL3BjaWUvcG1lL3BjaWVfcG1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzY2JmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG1lL3BjaWVfcG1lLmMKQEAgLTAsMCArMSw1MDUgQEAKKy8qCisgKiBQQ0llIE5hdGl2ZSBQTUUgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycAorICogQ29weXJpZ2h0IChDKSAyMDA3IC0gMjAwOSBTaGFvaHVhIExpIDxzaGFvaHVhLmxpQGludGVsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+LCBOb3ZlbGwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFYyLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2llcG9ydF9pZi5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKworI2luY2x1ZGUgIi4uLy4uL3BjaS5oIgorI2luY2x1ZGUgInBjaWVfcG1lLmgiCisKKyNkZWZpbmUgUENJX0VYUF9SVFNUQV9QTUUJMHgxMDAwMCAvKiBQTUUgc3RhdHVzICovCisjZGVmaW5lIFBDSV9FWFBfUlRTVEFfUEVORElORwkweDIwMDAwIC8qIFBNRSBwZW5kaW5nICovCisKKy8qCisgKiBJZiBzZXQsIHRoaXMgc3dpdGNoIHdpbGwgcHJldmVudCB0aGUgUENJZSByb290IHBvcnQgUE1FIHNlcnZpY2UgZHJpdmVyIGZyb20KKyAqIGJlaW5nIHJlZ2lzdGVyZWQuICBDb25zZXF1ZW50bHksIHRoZSBpbnRlcnJ1cHQtYmFzZWQgUENJZSBQTUUgc2lnbmFsaW5nIHdpbGwKKyAqIG5vdCBiZSB1c2VkIGJ5IGFueSBQQ0llIHJvb3QgcG9ydHMgaW4gdGhhdCBjYXNlLgorICovCitzdGF0aWMgYm9vbCBwY2llX3BtZV9kaXNhYmxlZDsKKworLyoKKyAqIFRoZSBQQ0kgRXhwcmVzcyBCYXNlIFNwZWNpZmljYXRpb24gMi4wLCBTZWN0aW9uIDYuMS44LCBzdGF0ZXMgdGhlIGZvbGxvd2luZzoKKyAqICJJbiBvcmRlciB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggbm9uLVBDSSBFeHByZXNzLWF3YXJlIHN5c3RlbQorICogc29mdHdhcmUsIHN5c3RlbSBwb3dlciBtYW5hZ2VtZW50IGxvZ2ljIG11c3QgYmUgY29uZmlndXJlZCBieSBmaXJtd2FyZSB0byB1c2UKKyAqIHRoZSBsZWdhY3kgbWVjaGFuaXNtIG9mIHNpZ25hbGluZyBQTUUgYnkgZGVmYXVsdC4gIFBDSSBFeHByZXNzLWF3YXJlIHN5c3RlbQorICogc29mdHdhcmUgbXVzdCBub3RpZnkgdGhlIGZpcm13YXJlIHByaW9yIHRvIGVuYWJsaW5nIG5hdGl2ZSwgaW50ZXJydXB0LWJhc2VkCisgKiBQTUUgc2lnbmFsaW5nLiIgIEhvd2V2ZXIsIGlmIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IHByb3ZpZGUgdXMgd2l0aCBhIHN1aXRhYmxlCisgKiBub3RpZmljYXRpb24gbWVjaGFuaXNtIG9yIHRoZSBub3RpZmljYXRpb24gZmFpbHMsIGl0IGlzIG5vdCBjbGVhciB3aGV0aGVyIG9yCisgKiBub3Qgd2UgYXJlIHN1cHBvc2VkIHRvIHVzZSB0aGUgaW50ZXJydXB0LWJhc2VkIFBDSWUgUE1FIHNpZ25hbGluZy4gIFRoZQorICogc3dpdGNoIGJlbG93IGNhbiBiZSB1c2VkIHRvIGluZGljYXRlIHRoZSBkZXNpcmVkIGJlaGF2aW91ci4gIFdoZW4gc2V0LCBpdAorICogd2lsbCBtYWtlIHRoZSBrZXJuZWwgdXNlIHRoZSBpbnRlcnJ1cHQtYmFzZWQgUENJZSBQTUUgc2lnbmFsaW5nIHJlZ2FyZGxlc3Mgb2YKKyAqIHRoZSBwbGF0Zm9ybSBub3RpZmljYXRpb24gc3RhdHVzLCBhbHRob3VnaCB0aGUga2VybmVsIHdpbGwgYXR0ZW1wdCB0byBub3RpZnkKKyAqIHRoZSBwbGF0Zm9ybSBhbnl3YXkuICBXaGVuIHVuc2V0LCBpdCB3aWxsIHByZXZlbnQgdGhlIGtlcm5lbCBmcm9tIHVzaW5nIHRoZQorICogdGhlIGludGVycnVwdC1iYXNlZCBQQ0llIFBNRSBzaWduYWxpbmcgaWYgdGhlIHBsYXRmb3JtIG5vdGlmaWNhdGlvbiBmYWlscywKKyAqIHdoaWNoIGlzIHRoZSBkZWZhdWx0LgorICovCitzdGF0aWMgYm9vbCBwY2llX3BtZV9mb3JjZV9lbmFibGU7CisKKy8qCisgKiBJZiB0aGlzIHN3aXRjaCBpcyBzZXQsIE1TSSB3aWxsIG5vdCBiZSB1c2VkIGZvciBQQ0llIFBNRSBzaWduYWxpbmcuICBUaGlzCisgKiBjYXVzZXMgdGhlIFBDSWUgcG9ydCBkcml2ZXIgdG8gdXNlIElOVHggaW50ZXJydXB0cyBvbmx5LCBidXQgaXQgdHVybnMgb3V0CisgKiB0aGF0IHVzaW5nIE1TSSBmb3IgUENJZSBQTUUgc2lnbmFsaW5nIGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGggUENJZSBQTUUtYmFzZWQKKyAqIHdha2UtdXAgZnJvbSBzeXN0ZW0gc2xlZXAgc3RhdGVzLgorICovCitib29sIHBjaWVfcG1lX21zaV9kaXNhYmxlZDsKKworc3RhdGljIGludCBfX2luaXQgcGNpZV9wbWVfc2V0dXAoY2hhciAqc3RyKQoreworCWlmICghc3RyY21wKHN0ciwgIm9mZiIpKQorCQlwY2llX3BtZV9kaXNhYmxlZCA9IHRydWU7CisJZWxzZSBpZiAoIXN0cmNtcChzdHIsICJmb3JjZSIpKQorCQlwY2llX3BtZV9mb3JjZV9lbmFibGUgPSB0cnVlOworCWVsc2UgaWYgKCFzdHJjbXAoc3RyLCAibm9tc2kiKSkKKwkJcGNpZV9wbWVfbXNpX2Rpc2FibGVkID0gdHJ1ZTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoInBjaWVfcG1lPSIsIHBjaWVfcG1lX3NldHVwKTsKKworLyoqCisgKiBwY2llX3BtZV9wbGF0Zm9ybV9zZXR1cCAtIEVuc3VyZSB0aGF0IHRoZSBrZXJuZWwgY29udHJvbHMgdGhlIFBDSWUgUE1FLgorICogQHNydjogUENJZSBQTUUgcm9vdCBwb3J0IHNlcnZpY2UgdG8gdXNlIGZvciBjYXJyeWluZyBvdXQgdGhlIGNoZWNrLgorICoKKyAqIE5vdGlmeSB0aGUgcGxhdGZvcm0gdGhhdCB0aGUgbmF0aXZlIFBDSWUgUE1FIGlzIGdvaW5nIHRvIGJlIHVzZWQgYW5kIHJldHVybgorICogJ3RydWUnIGlmIHRoZSBjb250cm9sIG9mIHRoZSBQQ0llIFBNRSByZWdpc3RlcnMgaGFzIGJlZW4gYWNxdWlyZWQgZnJvbSB0aGUKKyAqIHBsYXRmb3JtLgorICovCitzdGF0aWMgYm9vbCBwY2llX3BtZV9wbGF0Zm9ybV9zZXR1cChzdHJ1Y3QgcGNpZV9kZXZpY2UgKnNydikKK3sKKwlpZiAoIXBjaWVfcG1lX3BsYXRmb3JtX25vdGlmeShzcnYpKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gcGNpZV9wbWVfZm9yY2VfZW5hYmxlOworfQorCitzdHJ1Y3QgcGNpZV9wbWVfc2VydmljZV9kYXRhIHsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IHBjaWVfZGV2aWNlICpzcnY7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJYm9vbCBub2lycTsgLyogRG9uJ3QgZW5hYmxlIHRoZSBQTUUgaW50ZXJydXB0IHVzZWQgYnkgdGhpcyBzZXJ2aWNlLiAqLworfTsKKworLyoqCisgKiBwY2llX3BtZV9pbnRlcnJ1cHRfZW5hYmxlIC0gRW5hYmxlL2Rpc2FibGUgUENJZSBQTUUgaW50ZXJydXB0IGdlbmVyYXRpb24uCisgKiBAZGV2OiBQQ0llIHJvb3QgcG9ydCBvciBldmVudCBjb2xsZWN0b3IuCisgKiBAZW5hYmxlOiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgaW50ZXJydXB0LgorICovCitzdGF0aWMgdm9pZCBwY2llX3BtZV9pbnRlcnJ1cHRfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKQoreworCWludCBydGN0bF9wb3M7CisJdTE2IHJ0Y3RsOworCisJcnRjdGxfcG9zID0gcGNpX3BjaWVfY2FwKGRldikgKyBQQ0lfRVhQX1JUQ1RMOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBydGN0bF9wb3MsICZydGN0bCk7CisJaWYgKGVuYWJsZSkKKwkJcnRjdGwgfD0gUENJX0VYUF9SVENUTF9QTUVJRTsKKwllbHNlCisJCXJ0Y3RsICY9IH5QQ0lfRVhQX1JUQ1RMX1BNRUlFOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHJ0Y3RsX3BvcywgcnRjdGwpOworfQorCisvKioKKyAqIHBjaWVfcG1lX2NsZWFyX3N0YXR1cyAtIENsZWFyIHJvb3QgcG9ydCBQTUUgaW50ZXJydXB0IHN0YXR1cy4KKyAqIEBkZXY6IFBDSWUgcm9vdCBwb3J0IG9yIGV2ZW50IGNvbGxlY3Rvci4KKyAqLworc3RhdGljIHZvaWQgcGNpZV9wbWVfY2xlYXJfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHJ0c3RhX3BvczsKKwl1MzIgcnRzdGE7CisKKwlydHN0YV9wb3MgPSBwY2lfcGNpZV9jYXAoZGV2KSArIFBDSV9FWFBfUlRTVEE7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBydHN0YV9wb3MsICZydHN0YSk7CisJcnRzdGEgfD0gUENJX0VYUF9SVFNUQV9QTUU7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHJ0c3RhX3BvcywgcnRzdGEpOworfQorCisvKioKKyAqIHBjaWVfcG1lX3dhbGtfYnVzIC0gU2NhbiBhIFBDSSBidXMgZm9yIGRldmljZXMgYXNzZXJ0aW5nIFBNRSMuCisgKiBAYnVzOiBQQ0kgYnVzIHRvIHNjYW4uCisgKgorICogU2NhbiBnaXZlbiBQQ0kgYnVzIGFuZCBhbGwgYnVzZXMgdW5kZXIgaXQgZm9yIGRldmljZXMgYXNzZXJ0aW5nIFBNRSMuCisgKi8KK3N0YXRpYyBib29sIHBjaWVfcG1lX3dhbGtfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlib29sIHJldCA9IGZhbHNlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCS8qIFNraXAgUENJZSBkZXZpY2VzIGluIGNhc2Ugd2Ugc3RhcnRlZCBmcm9tIGEgcm9vdCBwb3J0LiAqLworCQlpZiAoIXBjaV9pc19wY2llKGRldikgJiYgcGNpX2NoZWNrX3BtZV9zdGF0dXMoZGV2KSkgeworCQkJcG1fcmVxdWVzdF9yZXN1bWUoJmRldi0+ZGV2KTsKKwkJCXJldCA9IHRydWU7CisJCX0KKworCQlpZiAoZGV2LT5zdWJvcmRpbmF0ZSAmJiBwY2llX3BtZV93YWxrX2J1cyhkZXYtPnN1Ym9yZGluYXRlKSkKKwkJCXJldCA9IHRydWU7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwY2llX3BtZV9mcm9tX3BjaV9icmlkZ2UgLSBDaGVjayBpZiBQQ0llLVBDSSBicmlkZ2UgZ2VuZXJhdGVkIGEgUE1FLgorICogQGJ1czogU2Vjb25kYXJ5IGJ1cyBvZiB0aGUgYnJpZGdlLgorICogQGRldmZuOiBEZXZpY2UvZnVuY3Rpb24gbnVtYmVyIHRvIGNoZWNrLgorICoKKyAqIFBNRSBmcm9tIFBDSSBkZXZpY2VzIHVuZGVyIGEgUENJZS1QQ0kgYnJpZGdlIG1heSBiZSBjb252ZXJ0ZWQgdG8gYW4gaW4tYmFuZAorICogUENJZSBQTUUgbWVzc2FnZS4gIEluIHN1Y2ggdGhhdCBjYXNlIHRoZSBicmlkZ2Ugc2hvdWxkIHVzZSB0aGUgUmVxdWVzdGVyIElECisgKiBvZiBkZXZpY2UvZnVuY3Rpb24gbnVtYmVyIDAgb24gaXRzIHNlY29uZGFyeSBidXMuCisgKi8KK3N0YXRpYyBib29sIHBjaWVfcG1lX2Zyb21fcGNpX2JyaWRnZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1OCBkZXZmbikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCWlmIChkZXZmbikKKwkJcmV0dXJuIGZhbHNlOworCisJZGV2ID0gcGNpX2Rldl9nZXQoYnVzLT5zZWxmKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHBjaV9pc19wY2llKGRldikgJiYgZGV2LT5wY2llX3R5cGUgPT0gUENJX0VYUF9UWVBFX1BDSV9CUklER0UpIHsKKwkJZG93bl9yZWFkKCZwY2lfYnVzX3NlbSk7CisJCWlmIChwY2llX3BtZV93YWxrX2J1cyhidXMpKQorCQkJZm91bmQgPSB0cnVlOworCQl1cF9yZWFkKCZwY2lfYnVzX3NlbSk7CisJfQorCisJcGNpX2Rldl9wdXQoZGV2KTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qKgorICogcGNpZV9wbWVfaGFuZGxlX3JlcXVlc3QgLSBGaW5kIGRldmljZSB0aGF0IGdlbmVyYXRlZCBQTUUgYW5kIGhhbmRsZSBpdC4KKyAqIEBwb3J0OiBSb290IHBvcnQgb3IgZXZlbnQgY29sbGVjdG9yIHRoYXQgZ2VuZXJhdGVkIHRoZSBQTUUgaW50ZXJydXB0LgorICogQHJlcV9pZDogUENJZSBSZXF1ZXN0ZXIgSUQgb2YgdGhlIGRldmljZSB0aGF0IGdlbmVyYXRlZCB0aGUgUE1FLgorICovCitzdGF0aWMgdm9pZCBwY2llX3BtZV9oYW5kbGVfcmVxdWVzdChzdHJ1Y3QgcGNpX2RldiAqcG9ydCwgdTE2IHJlcV9pZCkKK3sKKwl1OCBidXNuciA9IHJlcV9pZCA+PiA4LCBkZXZmbiA9IHJlcV9pZCAmIDB4ZmY7CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCS8qIEZpcnN0LCBjaGVjayBpZiB0aGUgUE1FIGlzIGZyb20gdGhlIHJvb3QgcG9ydCBpdHNlbGYuICovCisJaWYgKHBvcnQtPmRldmZuID09IGRldmZuICYmIHBvcnQtPmJ1cy0+bnVtYmVyID09IGJ1c25yKSB7CisJCWlmIChwY2lfY2hlY2tfcG1lX3N0YXR1cyhwb3J0KSkgeworCQkJcG1fcmVxdWVzdF9yZXN1bWUoJnBvcnQtPmRldik7CisJCQlmb3VuZCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQXBwYXJlbnRseSwgdGhlIHJvb3QgcG9ydCBnZW5lcmF0ZWQgdGhlIFBNRSBvbiBiZWhhbGYKKwkJCSAqIG9mIGEgbm9uLVBDSWUgZGV2aWNlIGRvd25zdHJlYW0uICBJZiB0aGlzIGlzIGRvbmUgYnkKKwkJCSAqIGEgcm9vdCBwb3J0LCB0aGUgUmVxdWVzdGVyIElEIGZpZWxkIGluIGl0cyBzdGF0dXMKKwkJCSAqIHJlZ2lzdGVyIG1heSBjb250YWluIGVpdGhlciB0aGUgcm9vdCBwb3J0J3MsIG9yIHRoZQorCQkJICogc291cmNlIGRldmljZSdzIGluZm9ybWF0aW9uIChQQ0kgRXhwcmVzcyBCYXNlCisJCQkgKiBTcGVjaWZpY2F0aW9uLCBSZXYuIDIuMCwgU2VjdGlvbiA2LjEuOSkuCisJCQkgKi8KKwkJCWRvd25fcmVhZCgmcGNpX2J1c19zZW0pOworCQkJZm91bmQgPSBwY2llX3BtZV93YWxrX2J1cyhwb3J0LT5zdWJvcmRpbmF0ZSk7CisJCQl1cF9yZWFkKCZwY2lfYnVzX3NlbSk7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJLyogU2Vjb25kLCBmaW5kIHRoZSBidXMgdGhlIHNvdXJjZSBkZXZpY2UgaXMgb24uICovCisJYnVzID0gcGNpX2ZpbmRfYnVzKHBjaV9kb21haW5fbnIocG9ydC0+YnVzKSwgYnVzbnIpOworCWlmICghYnVzKQorCQlnb3RvIG91dDsKKworCS8qIE5leHQsIGNoZWNrIGlmIHRoZSBQTUUgaXMgZnJvbSBhIFBDSWUtUENJIGJyaWRnZS4gKi8KKwlmb3VuZCA9IHBjaWVfcG1lX2Zyb21fcGNpX2JyaWRnZShidXMsIGRldmZuKTsKKwlpZiAoZm91bmQpCisJCWdvdG8gb3V0OworCisJLyogRmluYWxseSwgdHJ5IHRvIGZpbmQgdGhlIFBNRSBzb3VyY2Ugb24gdGhlIGJ1cy4gKi8KKwlkb3duX3JlYWQoJnBjaV9idXNfc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJcGNpX2Rldl9nZXQoZGV2KTsKKwkJaWYgKGRldi0+ZGV2Zm4gPT0gZGV2Zm4pIHsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJCXBjaV9kZXZfcHV0KGRldik7CisJfQorCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKKworCWlmIChmb3VuZCkgeworCQkvKiBUaGUgZGV2aWNlIGlzIHRoZXJlLCBidXQgd2UgaGF2ZSB0byBjaGVjayBpdHMgUE1FIHN0YXR1cy4gKi8KKwkJZm91bmQgPSBwY2lfY2hlY2tfcG1lX3N0YXR1cyhkZXYpOworCQlpZiAoZm91bmQpCisJCQlwbV9yZXF1ZXN0X3Jlc3VtZSgmZGV2LT5kZXYpOworCQlwY2lfZGV2X3B1dChkZXYpOworCX0gZWxzZSBpZiAoZGV2Zm4pIHsKKwkJLyoKKwkJICogVGhlIGRldmljZSBpcyBub3QgdGhlcmUsIGJ1dCB3ZSBjYW4gc3RpbGwgdHJ5IHRvIHJlY292ZXIgYnkKKwkJICogYXNzdW1pbmcgdGhhdCB0aGUgUE1FIHdhcyByZXBvcnRlZCBieSBhIFBDSWUtUENJIGJyaWRnZSB0aGF0CisJCSAqIHVzZWQgZGV2Zm4gZGlmZmVyZW50IGZyb20gemVyby4KKwkJICovCisJCWRldl9kYmcoJnBvcnQtPmRldiwgIlBNRSBpbnRlcnJ1cHQgZ2VuZXJhdGVkIGZvciAiCisJCQkibm9uLWV4aXN0ZW50IGRldmljZSAlMDJ4OiUwMnguJWRcbiIsCisJCQlidXNuciwgUENJX1NMT1QoZGV2Zm4pLCBQQ0lfRlVOQyhkZXZmbikpOworCQlmb3VuZCA9IHBjaWVfcG1lX2Zyb21fcGNpX2JyaWRnZShidXMsIDApOworCX0KKworIG91dDoKKwlpZiAoIWZvdW5kKQorCQlkZXZfZGJnKCZwb3J0LT5kZXYsICJTcHVyaW91cyBuYXRpdmUgUE1FIGludGVycnVwdCFcbiIpOworfQorCisvKioKKyAqIHBjaWVfcG1lX3dvcmtfZm4gLSBXb3JrIGhhbmRsZXIgZm9yIFBDSWUgUE1FIGludGVycnVwdC4KKyAqIEB3b3JrOiBXb3JrIHN0cnVjdHVyZSBnaXZpbmcgYWNjZXNzIHRvIHNlcnZpY2UgZGF0YS4KKyAqLworc3RhdGljIHZvaWQgcGNpZV9wbWVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHBjaWVfcG1lX3NlcnZpY2VfZGF0YSAqZGF0YSA9CisJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHBjaWVfcG1lX3NlcnZpY2VfZGF0YSwgd29yayk7CisJc3RydWN0IHBjaV9kZXYgKnBvcnQgPSBkYXRhLT5zcnYtPnBvcnQ7CisJaW50IHJ0c3RhX3BvczsKKwl1MzIgcnRzdGE7CisKKwlydHN0YV9wb3MgPSBwY2lfcGNpZV9jYXAocG9ydCkgKyBQQ0lfRVhQX1JUU1RBOworCisJc3Bpbl9sb2NrX2lycSgmZGF0YS0+bG9jayk7CisKKwlmb3IgKDs7KSB7CisJCWlmIChkYXRhLT5ub2lycSkKKwkJCWJyZWFrOworCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwb3J0LCBydHN0YV9wb3MsICZydHN0YSk7CisJCWlmIChydHN0YSAmIFBDSV9FWFBfUlRTVEFfUE1FKSB7CisJCQkvKgorCQkJICogQ2xlYXIgUE1FIHN0YXR1cyBvZiB0aGUgcG9ydC4gIElmIHRoZXJlIGFyZSBvdGhlcgorCQkJICogcGVuZGluZyBQTUVzLCB0aGUgc3RhdHVzIHdpbGwgYmUgc2V0IGFnYWluLgorCQkJICovCisJCQlwY2llX3BtZV9jbGVhcl9zdGF0dXMocG9ydCk7CisKKwkJCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+bG9jayk7CisJCQlwY2llX3BtZV9oYW5kbGVfcmVxdWVzdChwb3J0LCBydHN0YSAmIDB4ZmZmZik7CisJCQlzcGluX2xvY2tfaXJxKCZkYXRhLT5sb2NrKTsKKworCQkJY29udGludWU7CisJCX0KKworCQkvKiBObyBuZWVkIHRvIGxvb3AgaWYgdGhlcmUgYXJlIG5vIG1vcmUgUE1FcyBwZW5kaW5nLiAqLworCQlpZiAoIShydHN0YSAmIFBDSV9FWFBfUlRTVEFfUEVORElORykpCisJCQlicmVhazsKKworCQlzcGluX3VubG9ja19pcnEoJmRhdGEtPmxvY2spOworCQljcHVfcmVsYXgoKTsKKwkJc3Bpbl9sb2NrX2lycSgmZGF0YS0+bG9jayk7CisJfQorCisJaWYgKCFkYXRhLT5ub2lycSkKKwkJcGNpZV9wbWVfaW50ZXJydXB0X2VuYWJsZShwb3J0LCB0cnVlKTsKKworCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+bG9jayk7Cit9CisKKy8qKgorICogcGNpZV9wbWVfaXJxIC0gSW50ZXJydXB0IGhhbmRsZXIgZm9yIFBDSWUgcm9vdCBwb3J0IFBNRSBpbnRlcnJ1cHQuCisgKiBAaXJxOiBJbnRlcnJ1cHQgdmVjdG9yLgorICogQGNvbnRleHQ6IEludGVycnVwdCBjb250ZXh0IHBvaW50ZXIuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBwY2llX3BtZV9pcnEoaW50IGlycSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcG9ydDsKKwlzdHJ1Y3QgcGNpZV9wbWVfc2VydmljZV9kYXRhICpkYXRhOworCWludCBydHN0YV9wb3M7CisJdTMyIHJ0c3RhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwb3J0ID0gKChzdHJ1Y3QgcGNpZV9kZXZpY2UgKiljb250ZXh0KS0+cG9ydDsKKwlkYXRhID0gZ2V0X3NlcnZpY2VfZGF0YSgoc3RydWN0IHBjaWVfZGV2aWNlICopY29udGV4dCk7CisKKwlydHN0YV9wb3MgPSBwY2lfcGNpZV9jYXAocG9ydCkgKyBQQ0lfRVhQX1JUU1RBOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocG9ydCwgcnRzdGFfcG9zLCAmcnRzdGEpOworCisJaWYgKCEocnRzdGEgJiBQQ0lfRVhQX1JUU1RBX1BNRSkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJcGNpZV9wbWVfaW50ZXJydXB0X2VuYWJsZShwb3J0LCBmYWxzZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCisJLyogV2UgZG9uJ3QgdXNlIHBtX3dxLCBiZWNhdXNlIGl0J3MgZnJlZXphYmxlLiAqLworCXNjaGVkdWxlX3dvcmsoJmRhdGEtPndvcmspOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIHBjaWVfcG1lX3NldF9uYXRpdmUgLSBTZXQgdGhlIFBNRSBpbnRlcnJ1cHQgZmxhZyBmb3IgZ2l2ZW4gZGV2aWNlLgorICogQGRldjogUENJIGRldmljZSB0byBoYW5kbGUuCisgKiBAaWduOiBJZ25vcmVkLgorICovCitzdGF0aWMgaW50IHBjaWVfcG1lX3NldF9uYXRpdmUoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqaWduKQoreworCWRldl9pbmZvKCZkZXYtPmRldiwgIlNpZ25hbGluZyBQTUUgdGhyb3VnaCBQQ0llIFBNRSBpbnRlcnJ1cHRcbiIpOworCisJZGV2aWNlX3NldF9ydW5fd2FrZSgmZGV2LT5kZXYsIHRydWUpOworCWRldi0+cG1lX2ludGVycnVwdCA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcGNpZV9wbWVfbWFya19kZXZpY2VzIC0gU2V0IHRoZSBQTUUgaW50ZXJydXB0IGZsYWcgZm9yIGRldmljZXMgYmVsb3cgYSBwb3J0LgorICogQHBvcnQ6IFBDSWUgcm9vdCBwb3J0IG9yIGV2ZW50IGNvbGxlY3RvciB0byBoYW5kbGUuCisgKgorICogRm9yIGVhY2ggZGV2aWNlIGJlbG93IGdpdmVuIHJvb3QgcG9ydCwgaW5jbHVkaW5nIHRoZSBwb3J0IGl0c2VsZiAob3IgZm9yIGVhY2gKKyAqIHJvb3QgY29tcGxleCBpbnRlZ3JhdGVkIGVuZHBvaW50IGlmIEBwb3J0IGlzIGEgcm9vdCBjb21wbGV4IGV2ZW50IGNvbGxlY3RvcikKKyAqIHNldCB0aGUgZmxhZyBpbmRpY2F0aW5nIHRoYXQgaXQgY2FuIHNpZ25hbCBydW4tdGltZSB3YWtlLXVwIGV2ZW50cyB2aWEgUENJZQorICogUE1FIGludGVycnVwdHMuCisgKi8KK3N0YXRpYyB2b2lkIHBjaWVfcG1lX21hcmtfZGV2aWNlcyhzdHJ1Y3QgcGNpX2RldiAqcG9ydCkKK3sKKwlwY2llX3BtZV9zZXRfbmF0aXZlKHBvcnQsIE5VTEwpOworCWlmIChwb3J0LT5zdWJvcmRpbmF0ZSkgeworCQlwY2lfd2Fsa19idXMocG9ydC0+c3Vib3JkaW5hdGUsIHBjaWVfcG1lX3NldF9uYXRpdmUsIE5VTEwpOworCX0gZWxzZSB7CisJCXN0cnVjdCBwY2lfYnVzICpidXMgPSBwb3J0LT5idXM7CisJCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisKKwkJLyogQ2hlY2sgaWYgdGhpcyBpcyBhIHJvb3QgcG9ydCBldmVudCBjb2xsZWN0b3IuICovCisJCWlmIChwb3J0LT5wY2llX3R5cGUgIT0gUENJX0VYUF9UWVBFX1JDX0VDIHx8ICFidXMpCisJCQlyZXR1cm47CisKKwkJZG93bl9yZWFkKCZwY2lfYnVzX3NlbSk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkKKwkJCWlmIChwY2lfaXNfcGNpZShkZXYpCisJCQkgICAgJiYgZGV2LT5wY2llX3R5cGUgPT0gUENJX0VYUF9UWVBFX1JDX0VORCkKKwkJCQlwY2llX3BtZV9zZXRfbmF0aXZlKGRldiwgTlVMTCk7CisJCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKKwl9Cit9CisKKy8qKgorICogcGNpZV9wbWVfcHJvYmUgLSBJbml0aWFsaXplIFBDSWUgUE1FIHNlcnZpY2UgZm9yIGdpdmVuIHJvb3QgcG9ydC4KKyAqIEBzcnY6IFBDSWUgc2VydmljZSB0byBpbml0aWFsaXplLgorICovCitzdGF0aWMgaW50IHBjaWVfcG1lX3Byb2JlKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwb3J0OworCXN0cnVjdCBwY2llX3BtZV9zZXJ2aWNlX2RhdGEgKmRhdGE7CisJaW50IHJldDsKKworCWlmICghcGNpZV9wbWVfcGxhdGZvcm1fc2V0dXAoc3J2KSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJmRhdGEtPmxvY2spOworCUlOSVRfV09SSygmZGF0YS0+d29yaywgcGNpZV9wbWVfd29ya19mbik7CisJZGF0YS0+c3J2ID0gc3J2OworCXNldF9zZXJ2aWNlX2RhdGEoc3J2LCBkYXRhKTsKKworCXBvcnQgPSBzcnYtPnBvcnQ7CisJcGNpZV9wbWVfaW50ZXJydXB0X2VuYWJsZShwb3J0LCBmYWxzZSk7CisJcGNpZV9wbWVfY2xlYXJfc3RhdHVzKHBvcnQpOworCisJcmV0ID0gcmVxdWVzdF9pcnEoc3J2LT5pcnEsIHBjaWVfcG1lX2lycSwgSVJRRl9TSEFSRUQsICJQQ0llIFBNRSIsIHNydik7CisJaWYgKHJldCkgeworCQlrZnJlZShkYXRhKTsKKwl9IGVsc2UgeworCQlwY2llX3BtZV9tYXJrX2RldmljZXMocG9ydCk7CisJCXBjaWVfcG1lX2ludGVycnVwdF9lbmFibGUocG9ydCwgdHJ1ZSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwY2llX3BtZV9zdXNwZW5kIC0gU3VzcGVuZCBQQ0llIFBNRSBzZXJ2aWNlIGRldmljZS4KKyAqIEBzcnY6IFBDSWUgc2VydmljZSBkZXZpY2UgdG8gc3VzcGVuZC4KKyAqLworc3RhdGljIGludCBwY2llX3BtZV9zdXNwZW5kKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCXN0cnVjdCBwY2llX3BtZV9zZXJ2aWNlX2RhdGEgKmRhdGEgPSBnZXRfc2VydmljZV9kYXRhKHNydik7CisJc3RydWN0IHBjaV9kZXYgKnBvcnQgPSBzcnYtPnBvcnQ7CisKKwlzcGluX2xvY2tfaXJxKCZkYXRhLT5sb2NrKTsKKwlwY2llX3BtZV9pbnRlcnJ1cHRfZW5hYmxlKHBvcnQsIGZhbHNlKTsKKwlwY2llX3BtZV9jbGVhcl9zdGF0dXMocG9ydCk7CisJZGF0YS0+bm9pcnEgPSB0cnVlOworCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+bG9jayk7CisKKwlzeW5jaHJvbml6ZV9pcnEoc3J2LT5pcnEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcGNpZV9wbWVfcmVzdW1lIC0gUmVzdW1lIFBDSWUgUE1FIHNlcnZpY2UgZGV2aWNlLgorICogQHNydiAtIFBDSWUgc2VydmljZSBkZXZpY2UgdG8gcmVzdW1lLgorICovCitzdGF0aWMgaW50IHBjaWVfcG1lX3Jlc3VtZShzdHJ1Y3QgcGNpZV9kZXZpY2UgKnNydikKK3sKKwlzdHJ1Y3QgcGNpZV9wbWVfc2VydmljZV9kYXRhICpkYXRhID0gZ2V0X3NlcnZpY2VfZGF0YShzcnYpOworCXN0cnVjdCBwY2lfZGV2ICpwb3J0ID0gc3J2LT5wb3J0OworCisJc3Bpbl9sb2NrX2lycSgmZGF0YS0+bG9jayk7CisJZGF0YS0+bm9pcnEgPSBmYWxzZTsKKwlwY2llX3BtZV9jbGVhcl9zdGF0dXMocG9ydCk7CisJcGNpZV9wbWVfaW50ZXJydXB0X2VuYWJsZShwb3J0LCB0cnVlKTsKKwlzcGluX3VubG9ja19pcnEoJmRhdGEtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcGNpZV9wbWVfcmVtb3ZlIC0gUHJlcGFyZSBQQ0llIFBNRSBzZXJ2aWNlIGRldmljZSBmb3IgcmVtb3ZhbC4KKyAqIEBzcnYgLSBQQ0llIHNlcnZpY2UgZGV2aWNlIHRvIHJlc3VtZS4KKyAqLworc3RhdGljIHZvaWQgcGNpZV9wbWVfcmVtb3ZlKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCXBjaWVfcG1lX3N1c3BlbmQoc3J2KTsKKwlmcmVlX2lycShzcnYtPmlycSwgc3J2KTsKKwlrZnJlZShnZXRfc2VydmljZV9kYXRhKHNydikpOworfQorCitzdGF0aWMgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciBwY2llX3BtZV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gInBjaWVfcG1lIiwKKwkucG9ydF90eXBlIAk9IFBDSV9FWFBfVFlQRV9ST09UX1BPUlQsCisJLnNlcnZpY2UgCT0gUENJRV9QT1JUX1NFUlZJQ0VfUE1FLAorCisJLnByb2JlCQk9IHBjaWVfcG1lX3Byb2JlLAorCS5zdXNwZW5kCT0gcGNpZV9wbWVfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHBjaWVfcG1lX3Jlc3VtZSwKKwkucmVtb3ZlCQk9IHBjaWVfcG1lX3JlbW92ZSwKK307CisKKy8qKgorICogcGNpZV9wbWVfc2VydmljZV9pbml0IC0gUmVnaXN0ZXIgdGhlIFBDSWUgUE1FIHNlcnZpY2UgZHJpdmVyLgorICovCitzdGF0aWMgaW50IF9faW5pdCBwY2llX3BtZV9zZXJ2aWNlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpZV9wbWVfZGlzYWJsZWQgPworCQktRU5PREVWIDogcGNpZV9wb3J0X3NlcnZpY2VfcmVnaXN0ZXIoJnBjaWVfcG1lX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBjaWVfcG1lX3NlcnZpY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BtZS9wY2llX3BtZS5oIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzBkMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWUuaAorICoKKyAqIFBDSSBFeHByZXNzIFJvb3QgUG9ydCBQTUUgc2lnbmFsaW5nIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPiwgTm92ZWxsIEluYy4KKyAqLworCisjaWZuZGVmIF9QQ0lFX1BNRV9IXworI2RlZmluZSBfUENJRV9QTUVfSF8KKworc3RydWN0IHBjaWVfZGV2aWNlOworCisjaWZkZWYgQ09ORklHX0FDUEkKK2V4dGVybiBpbnQgcGNpZV9wbWVfYWNwaV9zZXR1cChzdHJ1Y3QgcGNpZV9kZXZpY2UgKnNydik7CisKK3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfcG1lX3BsYXRmb3JtX25vdGlmeShzdHJ1Y3QgcGNpZV9kZXZpY2UgKnNydikKK3sKKwlyZXR1cm4gcGNpZV9wbWVfYWNwaV9zZXR1cChzcnYpOworfQorI2Vsc2UgLyogIUNPTkZJR19BQ1BJICovCitzdGF0aWMgaW5saW5lIGludCBwY2llX3BtZV9wbGF0Zm9ybV9ub3RpZnkoc3RydWN0IHBjaWVfZGV2aWNlICpzcnYpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogIUNPTkZJR19BQ1BJICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWVfYWNwaS5jIGIvZHJpdmVycy9wY2kvcGNpZS9wbWUvcGNpZV9wbWVfYWNwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYWIyMjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjaS9wY2llL3BtZS9wY2llX3BtZV9hY3BpLmMKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIFBDSWUgTmF0aXZlIFBNRSBzdXBwb3J0LCBBQ1BJLXJlbGF0ZWQgcGFydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+LCBOb3ZlbGwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFYyLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaWVwb3J0X2lmLmg+CisKKy8qKgorICogcGNpZV9wbWVfYWNwaV9zZXR1cCAtIFJlcXVlc3QgdGhlIEFDUEkgQklPUyB0byByZWxlYXNlIGNvbnRyb2wgb3ZlciBQQ0llIFBNRS4KKyAqIEBzcnYgLSBQQ0llIFBNRSBzZXJ2aWNlIGZvciBhIHJvb3QgcG9ydCBvciBldmVudCBjb2xsZWN0b3IuCisgKgorICogSW52b2tlZCB3aGVuIHRoZSBQQ0llIGJ1cyB0eXBlIGxvYWRzIFBDSWUgUE1FIHNlcnZpY2UgZHJpdmVyLiAgVG8gYXZvaWQKKyAqIGNvbmZsaWN0IHdpdGggdGhlIEJJT1MgUENJZSBzdXBwb3J0IHJlcXVpcmVzIHRoZSBCSU9TIHRvIHlpZWxkIFBDSWUgUE1FCisgKiBjb250cm9sIHRvIHRoZSBrZXJuZWwuCisgKi8KK2ludCBwY2llX3BtZV9hY3BpX3NldHVwKHN0cnVjdCBwY2llX2RldmljZSAqc3J2KQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX05PVF9GT1VORDsKKwlzdHJ1Y3QgcGNpX2RldiAqcG9ydCA9IHNydi0+cG9ydDsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJaW50IGVycm9yID0gMDsKKworCWlmIChhY3BpX3BjaV9kaXNhYmxlZCkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlkZXZfaW5mbygmcG9ydC0+ZGV2LCAiUmVxdWVzdGluZyBjb250cm9sIG9mIFBDSWUgUE1FIGZyb20gQUNQSSBCSU9TXG4iKTsKKworCWhhbmRsZSA9IGFjcGlfZmluZF9yb290X2JyaWRnZV9oYW5kbGUocG9ydCk7CisJaWYgKCFoYW5kbGUpCisJCXJldHVybiAtRUlOVkFMOworCisJc3RhdHVzID0gYWNwaV9wY2lfb3NjX2NvbnRyb2xfc2V0KGhhbmRsZSwKKwkJCU9TQ19QQ0lfRVhQUkVTU19QTUVfQ09OVFJPTCB8CisJCQlPU0NfUENJX0VYUFJFU1NfQ0FQX1NUUlVDVFVSRV9DT05UUk9MKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJZGV2X2luZm8oJnBvcnQtPmRldiwKKwkJCSJGYWlsZWQgdG8gcmVjZWl2ZSBjb250cm9sIG9mIFBDSWUgUE1FIHNlcnZpY2U6ICVzXG4iLAorCQkJKHN0YXR1cyA9PSBBRV9TVVBQT1JUIHx8IHN0YXR1cyA9PSBBRV9OT1RfRk9VTkQpID8KKwkJCSJubyBfT1NDIHN1cHBvcnQiIDogIkFDUEkgX09TQyBmYWlsZWQiKTsKKwkJZXJyb3IgPSAtRU5PREVWOworCX0KKworCXJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydi5oIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmgKaW5kZXggYWFlYjlkMi4uODEzYTVjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmgKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmgKQEAgLTMwLDQgKzMwLDIxIEBACiBleHRlcm4gaW50IF9fbXVzdF9jaGVjayBwY2llX3BvcnRfYnVzX3JlZ2lzdGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgcGNpZV9wb3J0X2J1c191bnJlZ2lzdGVyKHZvaWQpOwogCisjaWZkZWYgQ09ORklHX1BDSUVfUE1FCitleHRlcm4gYm9vbCBwY2llX3BtZV9tc2lfZGlzYWJsZWQ7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2llX3BtZV9kaXNhYmxlX21zaSh2b2lkKQoreworCXBjaWVfcG1lX21zaV9kaXNhYmxlZCA9IHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2llX3BtZV9ub19tc2kodm9pZCkKK3sKKwlyZXR1cm4gcGNpZV9wbWVfbXNpX2Rpc2FibGVkOworfQorI2Vsc2UgLyogIUNPTkZJR19QQ0lFX1BNRSAqLworc3RhdGljIGlubGluZSB2b2lkIHBjaWVfcG1lX2Rpc2FibGVfbXNpKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIGJvb2wgcGNpZV9wbWVfbm9fbXNpKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYgLyogIUNPTkZJR19QQ0lFX1BNRSAqLworCiAjZW5kaWYgLyogX1BPUlREUlZfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jCmluZGV4IGIxNzQxODguLmU3M2VmZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2NvcmUuYwpAQCAtMTg2LDE2ICsxODYsMjQgQEAKICAqLwogc3RhdGljIGludCBpbml0X3NlcnZpY2VfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgKmlycXMsIGludCBtYXNrKQogewotCWludCBpLCBpcnE7CisJaW50IGksIGlycSA9IC0xOworCisJLyogV2UgaGF2ZSB0byB1c2UgSU5UeCBpZiBNU0kgY2Fubm90IGJlIHVzZWQgZm9yIFBDSWUgUE1FLiAqLworCWlmICgobWFzayAmIFBDSUVfUE9SVF9TRVJWSUNFX1BNRSkgJiYgcGNpZV9wbWVfbm9fbXNpKCkpIHsKKwkJaWYgKGRldi0+cGluKQorCQkJaXJxID0gZGV2LT5pcnE7CisJCWdvdG8gbm9fbXNpOworCX0KIAogCS8qIFRyeSB0byB1c2UgTVNJLVggaWYgc3VwcG9ydGVkICovCiAJaWYgKCFwY2llX3BvcnRfZW5hYmxlX21zaXgoZGV2LCBpcnFzLCBtYXNrKSkKIAkJcmV0dXJuIDA7CisKIAkvKiBXZSdyZSBub3QgZ29pbmcgdG8gdXNlIE1TSS1YLCBzbyB0cnkgTVNJIGFuZCBmYWxsIGJhY2sgdG8gSU5UeCAqLwotCWlycSA9IC0xOwogCWlmICghcGNpX2VuYWJsZV9tc2koZGV2KSB8fCBkZXYtPnBpbikKIAkJaXJxID0gZGV2LT5pcnE7CiAKKyBub19tc2k6CiAJZm9yIChpID0gMDsgaSA8IFBDSUVfUE9SVF9ERVZJQ0VfTUFYU0VSVklDRVM7IGkrKykKIAkJaXJxc1tpXSA9IGlycTsKIAlpcnFzW1BDSUVfUE9SVF9TRVJWSUNFX1ZDX1NISUZUXSA9IC0xOwpAQCAtMjc3LDYgKzI4NSw3IEBACiAJCSAgICAgcGNpX25hbWUocGRldiksCiAJCSAgICAgZ2V0X2Rlc2NyaXB0b3JfaWQocGRldi0+cGNpZV90eXBlLCBzZXJ2aWNlKSk7CiAJZGV2aWNlLT5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZChkZXZpY2UpOwogCiAJcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKGRldmljZSk7CiAJaWYgKHJldHZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYwppbmRleCAxM2M4OTcyLi4xMjdlOGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaWVwb3J0X2lmLmg+CiAjaW5jbHVkZSA8bGludXgvYWVyLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAKICNpbmNsdWRlICJwb3J0ZHJ2LmgiCiAjaW5jbHVkZSAiYWVyL2FlcmRydi5oIgpAQCAtMjczLDEwICsyNzQsMzYgQEAKIAkuZHJpdmVyLnBtIAk9IFBDSUVfUE9SVERSVl9QTV9PUFMsCiB9OwogCitzdGF0aWMgaW50IF9faW5pdCBkbWlfcGNpZV9wbWVfZGlzYWJsZV9tc2koY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmQpCit7CisJcHJfbm90aWNlKCIlcyBkZXRlY3RlZDogd2lsbCBub3QgdXNlIE1TSSBmb3IgUENJZSBQTUUgc2lnbmFsaW5nXG4iLAorCQkJZC0+aWRlbnQpOworCXBjaWVfcG1lX2Rpc2FibGVfbXNpKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRkYXRhIHBjaWVfcG9ydGRydl9kbWlfdGFibGVbXSA9IHsKKwkvKgorCSAqIEJveGVzIHRoYXQgc2hvdWxkIG5vdCB1c2UgTVNJIGZvciBQQ0llIFBNRSBzaWduYWxpbmcuCisJICovCisJeworCSAuY2FsbGJhY2sgPSBkbWlfcGNpZV9wbWVfZGlzYWJsZV9tc2ksCisJIC5pZGVudCA9ICJNU0kgV2luZCBVLTEwMCIsCisJIC5tYXRjaGVzID0geworCQkgICAgIERNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKKwkJICAgICAJCSJNSUNSTy1TVEFSIElOVEVSTkFUSU9OQUwgQ08uLCBMVEQiKSwKKwkJICAgICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlUtMTAwIiksCisJCSAgICAgfSwKKwkgfSwKKwkge30KK307CisKIHN0YXRpYyBpbnQgX19pbml0IHBjaWVfcG9ydGRydl9pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbDsKIAorCWRtaV9jaGVja19zeXN0ZW0ocGNpZV9wb3J0ZHJ2X2RtaV90YWJsZSk7CisKIAlyZXR2YWwgPSBwY2llX3BvcnRfYnVzX3JlZ2lzdGVyKCk7CiAJaWYgKHJldHZhbCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJQQ0lFOiBidXNfcmVnaXN0ZXIgZXJyb3I6ICVkXG4iLCByZXR2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcHJvYmUuYyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKaW5kZXggNDQ2ZTRhOS4uMmE5NDMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcHJvYmUuYworKysgYi9kcml2ZXJzL3BjaS9wcm9iZS5jCkBAIC04OSw2ICs4OSw3IEBACiAKIAlpZiAocGNpX2J1cy0+YnJpZGdlKQogCQlwdXRfZGV2aWNlKHBjaV9idXMtPmJyaWRnZSk7CisJcGNpX2J1c19yZW1vdmVfcmVzb3VyY2VzKHBjaV9idXMpOwogCWtmcmVlKHBjaV9idXMpOwogfQogCkBAIC0yODEsMjYgKzI4MiwxMiBAQAogCX0KIH0KIAotdm9pZCBfX2RldmluaXQgcGNpX3JlYWRfYnJpZGdlX2Jhc2VzKHN0cnVjdCBwY2lfYnVzICpjaGlsZCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2lfcmVhZF9icmlkZ2VfaW8oc3RydWN0IHBjaV9idXMgKmNoaWxkKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBjaGlsZC0+c2VsZjsKIAl1OCBpb19iYXNlX2xvLCBpb19saW1pdF9sbzsKLQl1MTYgbWVtX2Jhc2VfbG8sIG1lbV9saW1pdF9sbzsKIAl1bnNpZ25lZCBsb25nIGJhc2UsIGxpbWl0OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWludCBpOwotCi0JaWYgKHBjaV9pc19yb290X2J1cyhjaGlsZCkpCS8qIEl0J3MgYSBob3N0IGJ1cywgbm90aGluZyB0byByZWFkICovCi0JCXJldHVybjsKLQotCWRldl9pbmZvKCZkZXYtPmRldiwgIlBDSSBicmlkZ2UgdG8gW2J1cyAlMDJ4LSUwMnhdJXNcbiIsCi0JCSBjaGlsZC0+c2Vjb25kYXJ5LCBjaGlsZC0+c3Vib3JkaW5hdGUsCi0JCSBkZXYtPnRyYW5zcGFyZW50ID8gIiAoc3VidHJhY3RpdmUgZGVjb2RlKSI6ICIiKTsKLQotCWlmIChkZXYtPnRyYW5zcGFyZW50KSB7Ci0JCWZvcihpID0gMzsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKQotCQkJY2hpbGQtPnJlc291cmNlW2ldID0gY2hpbGQtPnBhcmVudC0+cmVzb3VyY2VbaSAtIDNdOwotCX0KIAogCXJlcyA9IGNoaWxkLT5yZXNvdXJjZVswXTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9JT19CQVNFLCAmaW9fYmFzZV9sbyk7CkBAIC0zMTYsMjYgKzMwMyw1MCBAQAogCQlsaW1pdCB8PSAoaW9fbGltaXRfaGkgPDwgMTYpOwogCX0KIAotCWlmIChiYXNlIDw9IGxpbWl0KSB7CisJaWYgKGJhc2UgJiYgYmFzZSA8PSBsaW1pdCkgewogCQlyZXMtPmZsYWdzID0gKGlvX2Jhc2VfbG8gJiBQQ0lfSU9fUkFOR0VfVFlQRV9NQVNLKSB8IElPUkVTT1VSQ0VfSU87CiAJCWlmICghcmVzLT5zdGFydCkKIAkJCXJlcy0+c3RhcnQgPSBiYXNlOwogCQlpZiAoIXJlcy0+ZW5kKQogCQkJcmVzLT5lbmQgPSBsaW1pdCArIDB4ZmZmOwogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgIiAgYnJpZGdlIHdpbmRvdyAlcFJcbiIsIHJlcyk7CisJfSBlbHNlIHsKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCisJCQkgIiAgYnJpZGdlIHdpbmRvdyBbaW8gICUwNGx4IC0gJTA0bHhdIHJlZyByZWFkaW5nXG4iLAorCQkJCSBiYXNlLCBsaW1pdCk7CiAJfQorfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpX3JlYWRfYnJpZGdlX21taW8oc3RydWN0IHBjaV9idXMgKmNoaWxkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBjaGlsZC0+c2VsZjsKKwl1MTYgbWVtX2Jhc2VfbG8sIG1lbV9saW1pdF9sbzsKKwl1bnNpZ25lZCBsb25nIGJhc2UsIGxpbWl0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJcmVzID0gY2hpbGQtPnJlc291cmNlWzFdOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX01FTU9SWV9CQVNFLCAmbWVtX2Jhc2VfbG8pOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX01FTU9SWV9MSU1JVCwgJm1lbV9saW1pdF9sbyk7CiAJYmFzZSA9IChtZW1fYmFzZV9sbyAmIFBDSV9NRU1PUllfUkFOR0VfTUFTSykgPDwgMTY7CiAJbGltaXQgPSAobWVtX2xpbWl0X2xvICYgUENJX01FTU9SWV9SQU5HRV9NQVNLKSA8PCAxNjsKLQlpZiAoYmFzZSA8PSBsaW1pdCkgeworCWlmIChiYXNlICYmIGJhc2UgPD0gbGltaXQpIHsKIAkJcmVzLT5mbGFncyA9IChtZW1fYmFzZV9sbyAmIFBDSV9NRU1PUllfUkFOR0VfVFlQRV9NQVNLKSB8IElPUkVTT1VSQ0VfTUVNOwogCQlyZXMtPnN0YXJ0ID0gYmFzZTsKIAkJcmVzLT5lbmQgPSBsaW1pdCArIDB4ZmZmZmY7CiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiICBicmlkZ2Ugd2luZG93ICVwUlxuIiwgcmVzKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwKKwkJCSIgIGJyaWRnZSB3aW5kb3cgW21lbSAweCUwOGx4IC0gMHglMDhseF0gcmVnIHJlYWRpbmdcbiIsCisJCQkJCSBiYXNlLCBsaW1pdCArIDB4ZmZmZmYpOwogCX0KK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaV9yZWFkX2JyaWRnZV9tbWlvX3ByZWYoc3RydWN0IHBjaV9idXMgKmNoaWxkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBjaGlsZC0+c2VsZjsKKwl1MTYgbWVtX2Jhc2VfbG8sIG1lbV9saW1pdF9sbzsKKwl1bnNpZ25lZCBsb25nIGJhc2UsIGxpbWl0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJcmVzID0gY2hpbGQtPnJlc291cmNlWzJdOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX1BSRUZfTUVNT1JZX0JBU0UsICZtZW1fYmFzZV9sbyk7CkBAIC0zNjYsNyArMzc3LDcgQEAKICNlbmRpZgogCQl9CiAJfQotCWlmIChiYXNlIDw9IGxpbWl0KSB7CisJaWYgKGJhc2UgJiYgYmFzZSA8PSBsaW1pdCkgewogCQlyZXMtPmZsYWdzID0gKG1lbV9iYXNlX2xvICYgUENJX1BSRUZfUkFOR0VfVFlQRV9NQVNLKSB8CiAJCQkJCSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7CiAJCWlmIChyZXMtPmZsYWdzICYgUENJX1BSRUZfUkFOR0VfVFlQRV82NCkKQEAgLTM3NCw2ICszODUsNDQgQEAKIAkJcmVzLT5zdGFydCA9IGJhc2U7CiAJCXJlcy0+ZW5kID0gbGltaXQgKyAweGZmZmZmOwogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgIiAgYnJpZGdlIHdpbmRvdyAlcFJcbiIsIHJlcyk7CisJfSBlbHNlIHsKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCisJCSAgICAgIiAgYnJpZGdlIHdpbmRvdyBbbWVtIDB4JTA4bHggLSAlMDhseCBwcmVmXSByZWcgcmVhZGluZ1xuIiwKKwkJCQkJIGJhc2UsIGxpbWl0ICsgMHhmZmZmZik7CisJfQorfQorCit2b2lkIF9fZGV2aW5pdCBwY2lfcmVhZF9icmlkZ2VfYmFzZXMoc3RydWN0IHBjaV9idXMgKmNoaWxkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBjaGlsZC0+c2VsZjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaTsKKworCWlmIChwY2lfaXNfcm9vdF9idXMoY2hpbGQpKQkvKiBJdCdzIGEgaG9zdCBidXMsIG5vdGhpbmcgdG8gcmVhZCAqLworCQlyZXR1cm47CisKKwlkZXZfaW5mbygmZGV2LT5kZXYsICJQQ0kgYnJpZGdlIHRvIFtidXMgJTAyeC0lMDJ4XSVzXG4iLAorCQkgY2hpbGQtPnNlY29uZGFyeSwgY2hpbGQtPnN1Ym9yZGluYXRlLAorCQkgZGV2LT50cmFuc3BhcmVudCA/ICIgKHN1YnRyYWN0aXZlIGRlY29kZSkiIDogIiIpOworCisJcGNpX2J1c19yZW1vdmVfcmVzb3VyY2VzKGNoaWxkKTsKKwlmb3IgKGkgPSAwOyBpIDwgUENJX0JSSURHRV9SRVNPVVJDRV9OVU07IGkrKykKKwkJY2hpbGQtPnJlc291cmNlW2ldID0gJmRldi0+cmVzb3VyY2VbUENJX0JSSURHRV9SRVNPVVJDRVMraV07CisKKwlwY2lfcmVhZF9icmlkZ2VfaW8oY2hpbGQpOworCXBjaV9yZWFkX2JyaWRnZV9tbWlvKGNoaWxkKTsKKwlwY2lfcmVhZF9icmlkZ2VfbW1pb19wcmVmKGNoaWxkKTsKKworCWlmIChkZXYtPnRyYW5zcGFyZW50KSB7CisJCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoY2hpbGQtPnBhcmVudCwgcmVzLCBpKSB7CisJCQlpZiAocmVzKSB7CisJCQkJcGNpX2J1c19hZGRfcmVzb3VyY2UoY2hpbGQsIHJlcywKKwkJCQkJCSAgICAgUENJX1NVQlRSQUNUSVZFX0RFQ09ERSk7CisJCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsCisJCQkJCSAgICIgIGJyaWRnZSB3aW5kb3cgJXBSIChzdWJ0cmFjdGl2ZSBkZWNvZGUpXG4iLAorCQkJCQkgICByZXMpOworCQkJfQorCQl9CiAJfQogfQogCkBAIC0zODcsMTAgKzQzNiwxNDcgQEAKIAkJSU5JVF9MSVNUX0hFQUQoJmItPmNoaWxkcmVuKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmItPmRldmljZXMpOwogCQlJTklUX0xJU1RfSEVBRCgmYi0+c2xvdHMpOworCQlJTklUX0xJU1RfSEVBRCgmYi0+cmVzb3VyY2VzKTsKKwkJYi0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOworCQliLT5jdXJfYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047CiAJfQogCXJldHVybiBiOwogfQogCitzdGF0aWMgdW5zaWduZWQgY2hhciBwY2l4X2J1c19zcGVlZFtdID0geworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogMCAqLworCVBDSV9TUEVFRF82Nk1Iel9QQ0lYLAkJLyogMSAqLworCVBDSV9TUEVFRF8xMDBNSHpfUENJWCwJCS8qIDIgKi8KKwlQQ0lfU1BFRURfMTMzTUh6X1BDSVgsCQkvKiAzICovCisJUENJX1NQRUVEX1VOS05PV04sCQkvKiA0ICovCisJUENJX1NQRUVEXzY2TUh6X1BDSVhfRUNDLAkvKiA1ICovCisJUENJX1NQRUVEXzEwME1Iel9QQ0lYX0VDQywJLyogNiAqLworCVBDSV9TUEVFRF8xMzNNSHpfUENJWF9FQ0MsCS8qIDcgKi8KKwlQQ0lfU1BFRURfVU5LTk9XTiwJCS8qIDggKi8KKwlQQ0lfU1BFRURfNjZNSHpfUENJWF8yNjYsCS8qIDkgKi8KKwlQQ0lfU1BFRURfMTAwTUh6X1BDSVhfMjY2LAkvKiBBICovCisJUENJX1NQRUVEXzEzM01Iel9QQ0lYXzI2NiwJLyogQiAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogQyAqLworCVBDSV9TUEVFRF82Nk1Iel9QQ0lYXzUzMywJLyogRCAqLworCVBDSV9TUEVFRF8xMDBNSHpfUENJWF81MzMsCS8qIEUgKi8KKwlQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzCS8qIEYgKi8KK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHBjaWVfbGlua19zcGVlZFtdID0geworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogMCAqLworCVBDSUVfU1BFRURfMl81R1QsCQkvKiAxICovCisJUENJRV9TUEVFRF81XzBHVCwJCS8qIDIgKi8KKwlQQ0lFX1NQRUVEXzhfMEdULAkJLyogMyAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogNCAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogNSAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogNiAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogNyAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogOCAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogOSAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogQSAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogQiAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogQyAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogRCAqLworCVBDSV9TUEVFRF9VTktOT1dOLAkJLyogRSAqLworCVBDSV9TUEVFRF9VTktOT1dOCQkvKiBGICovCit9OworCit2b2lkIHBjaWVfdXBkYXRlX2xpbmtfc3BlZWQoc3RydWN0IHBjaV9idXMgKmJ1cywgdTE2IGxpbmtzdGEpCit7CisJYnVzLT5jdXJfYnVzX3NwZWVkID0gcGNpZV9saW5rX3NwZWVkW2xpbmtzdGEgJiAweGZdOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpZV91cGRhdGVfbGlua19zcGVlZCk7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFncF9zcGVlZHNbXSA9IHsKKwlBR1BfVU5LTk9XTiwKKwlBR1BfMVgsCisJQUdQXzJYLAorCUFHUF80WCwKKwlBR1BfOFgKK307CisKK3N0YXRpYyBlbnVtIHBjaV9idXNfc3BlZWQgYWdwX3NwZWVkKGludCBhZ3AzLCBpbnQgYWdwc3RhdCkKK3sKKwlpbnQgaW5kZXggPSAwOworCisJaWYgKGFncHN0YXQgJiA0KQorCQlpbmRleCA9IDM7CisJZWxzZSBpZiAoYWdwc3RhdCAmIDIpCisJCWluZGV4ID0gMjsKKwllbHNlIGlmIChhZ3BzdGF0ICYgMSkKKwkJaW5kZXggPSAxOworCWVsc2UKKwkJZ290byBvdXQ7CisJCisJaWYgKGFncDMpIHsKKwkJaW5kZXggKz0gMjsKKwkJaWYgKGluZGV4ID09IDUpCisJCQlpbmRleCA9IDA7CisJfQorCisgb3V0OgorCXJldHVybiBhZ3Bfc3BlZWRzW2luZGV4XTsKK30KKworCitzdGF0aWMgdm9pZCBwY2lfc2V0X2J1c19zcGVlZChzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CisJaW50IHBvczsKKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYnJpZGdlLCBQQ0lfQ0FQX0lEX0FHUCk7CisJaWYgKCFwb3MpCisJCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYnJpZGdlLCBQQ0lfQ0FQX0lEX0FHUDMpOworCWlmIChwb3MpIHsKKwkJdTMyIGFncHN0YXQsIGFncGNtZDsKKworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnJpZGdlLCBwb3MgKyBQQ0lfQUdQX1NUQVRVUywgJmFncHN0YXQpOworCQlidXMtPm1heF9idXNfc3BlZWQgPSBhZ3Bfc3BlZWQoYWdwc3RhdCAmIDgsIGFncHN0YXQgJiA3KTsKKworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnJpZGdlLCBwb3MgKyBQQ0lfQUdQX0NPTU1BTkQsICZhZ3BjbWQpOworCQlidXMtPmN1cl9idXNfc3BlZWQgPSBhZ3Bfc3BlZWQoYWdwc3RhdCAmIDgsIGFncGNtZCAmIDcpOworCX0KKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYnJpZGdlLCBQQ0lfQ0FQX0lEX1BDSVgpOworCWlmIChwb3MpIHsKKwkJdTE2IHN0YXR1czsKKwkJZW51bSBwY2lfYnVzX3NwZWVkIG1heDsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoYnJpZGdlLCBwb3MgKyAyLCAmc3RhdHVzKTsKKworCQlpZiAoc3RhdHVzICYgMHg4MDAwKSB7CisJCQltYXggPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzOworCQl9IGVsc2UgaWYgKHN0YXR1cyAmIDB4NDAwMCkgeworCQkJbWF4ID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYXzI2NjsKKwkJfSBlbHNlIGlmIChzdGF0dXMgJiAweDAwMDIpIHsKKwkJCWlmICgoKHN0YXR1cyA+PiAxMikgJiAweDMpID09IDIpIHsKKwkJCQltYXggPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfRUNDOworCQkJfSBlbHNlIHsKKwkJCQltYXggPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVg7CisJCQl9CisJCX0gZWxzZSB7CisJCQltYXggPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKKwkJfQorCisJCWJ1cy0+bWF4X2J1c19zcGVlZCA9IG1heDsKKwkJYnVzLT5jdXJfYnVzX3NwZWVkID0gcGNpeF9idXNfc3BlZWRbKHN0YXR1cyA+PiA2KSAmIDB4Zl07CisKKwkJcmV0dXJuOworCX0KKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYnJpZGdlLCBQQ0lfQ0FQX0lEX0VYUCk7CisJaWYgKHBvcykgeworCQl1MzIgbGlua2NhcDsKKwkJdTE2IGxpbmtzdGE7CisKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGJyaWRnZSwgcG9zICsgUENJX0VYUF9MTktDQVAsICZsaW5rY2FwKTsKKwkJYnVzLT5tYXhfYnVzX3NwZWVkID0gcGNpZV9saW5rX3NwZWVkW2xpbmtjYXAgJiAweGZdOworCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJyaWRnZSwgcG9zICsgUENJX0VYUF9MTktTVEEsICZsaW5rc3RhKTsKKwkJcGNpZV91cGRhdGVfbGlua19zcGVlZChidXMsIGxpbmtzdGEpOworCX0KK30KKworCiBzdGF0aWMgc3RydWN0IHBjaV9idXMgKnBjaV9hbGxvY19jaGlsZF9idXMoc3RydWN0IHBjaV9idXMgKnBhcmVudCwKIAkJCQkJICAgc3RydWN0IHBjaV9kZXYgKmJyaWRnZSwgaW50IGJ1c25yKQogewpAQCAtNDMwLDYgKzYxNiw4IEBACiAJY2hpbGQtPnNlbGYgPSBicmlkZ2U7CiAJY2hpbGQtPmJyaWRnZSA9IGdldF9kZXZpY2UoJmJyaWRnZS0+ZGV2KTsKIAorCXBjaV9zZXRfYnVzX3NwZWVkKGNoaWxkKTsKKwogCS8qIFNldCB1cCBkZWZhdWx0IHJlc291cmNlIHBvaW50ZXJzIGFuZCBuYW1lcy4uICovCiAJZm9yIChpID0gMDsgaSA8IFBDSV9CUklER0VfUkVTT1VSQ0VfTlVNOyBpKyspIHsKIAkJY2hpbGQtPnJlc291cmNlW2ldID0gJmJyaWRnZS0+cmVzb3VyY2VbUENJX0JSSURHRV9SRVNPVVJDRVMraV07CkBAIC0xMDgxLDYgKzEyNjksNDUgQEAKIH0KIEVYUE9SVF9TWU1CT0wocGNpX3NjYW5fc2luZ2xlX2RldmljZSk7CiAKK3N0YXRpYyB1bnNpZ25lZCBuZXh0X2FyaV9mbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBmbikKK3sKKwl1MTYgY2FwOworCXVuc2lnbmVkIHBvcywgbmV4dF9mbjsKKworCWlmICghZGV2KQorCQlyZXR1cm4gMDsKKworCXBvcyA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KGRldiwgUENJX0VYVF9DQVBfSURfQVJJKTsKKwlpZiAoIXBvcykKKwkJcmV0dXJuIDA7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyA0LCAmY2FwKTsKKwluZXh0X2ZuID0gY2FwID4+IDg7CisJaWYgKG5leHRfZm4gPD0gZm4pCisJCXJldHVybiAwOworCXJldHVybiBuZXh0X2ZuOworfQorCitzdGF0aWMgdW5zaWduZWQgbmV4dF90cmFkX2ZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGZuKQoreworCXJldHVybiAoZm4gKyAxKSAlIDg7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBub19uZXh0X2ZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGZuKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9ubHlfb25lX2NoaWxkKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKnBhcmVudCA9IGJ1cy0+c2VsZjsKKwlpZiAoIXBhcmVudCB8fCAhcGNpX2lzX3BjaWUocGFyZW50KSkKKwkJcmV0dXJuIDA7CisJaWYgKHBhcmVudC0+cGNpZV90eXBlID09IFBDSV9FWFBfVFlQRV9ST09UX1BPUlQgfHwKKwkgICAgcGFyZW50LT5wY2llX3R5cGUgPT0gUENJX0VYUF9UWVBFX0RPV05TVFJFQU0pCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiAvKioKICAqIHBjaV9zY2FuX3Nsb3QgLSBzY2FuIGEgUENJIHNsb3Qgb24gYSBidXMgZm9yIGRldmljZXMuCiAgKiBAYnVzOiBQQ0kgYnVzIHRvIHNjYW4KQEAgLTEwOTQsMjEgKzEzMjEsMzAgQEAKICAqLwogaW50IHBjaV9zY2FuX3Nsb3Qoc3RydWN0IHBjaV9idXMgKmJ1cywgaW50IGRldmZuKQogewotCWludCBmbiwgbnIgPSAwOworCXVuc2lnbmVkIGZuLCBuciA9IDA7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKKwl1bnNpZ25lZCAoKm5leHRfZm4pKHN0cnVjdCBwY2lfZGV2ICosIHVuc2lnbmVkKSA9IG5vX25leHRfZm47CisKKwlpZiAob25seV9vbmVfY2hpbGQoYnVzKSAmJiAoZGV2Zm4gPiAwKSkKKwkJcmV0dXJuIDA7IC8qIEFscmVhZHkgc2Nhbm5lZCB0aGUgZW50aXJlIHNsb3QgKi8KIAogCWRldiA9IHBjaV9zY2FuX3NpbmdsZV9kZXZpY2UoYnVzLCBkZXZmbik7Ci0JaWYgKGRldiAmJiAhZGV2LT5pc19hZGRlZCkJLyogbmV3IGRldmljZT8gKi8KKwlpZiAoIWRldikKKwkJcmV0dXJuIDA7CisJaWYgKCFkZXYtPmlzX2FkZGVkKQogCQlucisrOwogCi0JaWYgKGRldiAmJiBkZXYtPm11bHRpZnVuY3Rpb24pIHsKLQkJZm9yIChmbiA9IDE7IGZuIDwgODsgZm4rKykgewotCQkJZGV2ID0gcGNpX3NjYW5fc2luZ2xlX2RldmljZShidXMsIGRldmZuICsgZm4pOwotCQkJaWYgKGRldikgewotCQkJCWlmICghZGV2LT5pc19hZGRlZCkKLQkJCQkJbnIrKzsKLQkJCQlkZXYtPm11bHRpZnVuY3Rpb24gPSAxOwotCQkJfQorCWlmIChwY2lfYXJpX2VuYWJsZWQoYnVzKSkKKwkJbmV4dF9mbiA9IG5leHRfYXJpX2ZuOworCWVsc2UgaWYgKGRldi0+bXVsdGlmdW5jdGlvbikKKwkJbmV4dF9mbiA9IG5leHRfdHJhZF9mbjsKKworCWZvciAoZm4gPSBuZXh0X2ZuKGRldiwgMCk7IGZuID4gMDsgZm4gPSBuZXh0X2ZuKGRldiwgZm4pKSB7CisJCWRldiA9IHBjaV9zY2FuX3NpbmdsZV9kZXZpY2UoYnVzLCBkZXZmbiArIGZuKTsKKwkJaWYgKGRldikgeworCQkJaWYgKCFkZXYtPmlzX2FkZGVkKQorCQkJCW5yKys7CisJCQlkZXYtPm11bHRpZnVuY3Rpb24gPSAxOwogCQl9CiAJfQogCkBAIC0xMjAwLDYgKzE0MzYsNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBkZXZfcmVnX2VycjsKIAliLT5icmlkZ2UgPSBnZXRfZGV2aWNlKGRldik7CisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKGItPmJyaWRnZSk7CiAKIAlpZiAoIXBhcmVudCkKIAkJc2V0X2Rldl9ub2RlKGItPmJyaWRnZSwgcGNpYnVzX3RvX25vZGUoYikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwppbmRleCBkNThiOTQwLi43OTBlYjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9xdWlya3MuYworKysgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwpAQCAtMjUsMTQgKzI1LDkgQEAKICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2ktYXNwbS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4JLyogaXNhX2RtYV9icmlkZ2VfYnVnZ3kgKi8KICNpbmNsdWRlICJwY2kuaCIKIAotaW50IGlzYV9kbWFfYnJpZGdlX2J1Z2d5OwotRVhQT1JUX1NZTUJPTChpc2FfZG1hX2JyaWRnZV9idWdneSk7Ci1pbnQgcGNpX3BjaV9wcm9ibGVtczsKLUVYUE9SVF9TWU1CT0wocGNpX3BjaV9wcm9ibGVtcyk7Ci0KLSNpZmRlZiBDT05GSUdfUENJX1FVSVJLUwogLyoKICAqIFRoaXMgcXVpcmsgZnVuY3Rpb24gZGlzYWJsZXMgbWVtb3J5IGRlY29kaW5nIGFuZCByZWxlYXNlcyBtZW1vcnkgcmVzb3VyY2VzCiAgKiBvZiB0aGUgZGV2aWNlIHNwZWNpZmllZCBieSBrZXJuZWwncyBib290IHBhcmFtZXRlciAncGNpPXJlc291cmNlX2FsaWdubWVudD0nLgpAQCAtMjYxMiw2ICsyNjA3LDcgQEAKIAl9CiAJcGNpX2RvX2ZpeHVwcyhkZXYsIHN0YXJ0LCBlbmQpOwogfQorRVhQT1JUX1NZTUJPTChwY2lfZml4dXBfZGV2aWNlKTsKIAogc3RhdGljIGludCBfX2luaXQgcGNpX2FwcGx5X2ZpbmFsX3F1aXJrcyh2b2lkKQogewpAQCAtMjcyMyw5ICsyNzE5LDMgQEAKIAogCXJldHVybiAtRU5PVFRZOwogfQotCi0jZWxzZQotdm9pZCBwY2lfZml4dXBfZGV2aWNlKGVudW0gcGNpX2ZpeHVwX3Bhc3MgcGFzcywgc3RydWN0IHBjaV9kZXYgKmRldikge30KLWludCBwY2lfZGV2X3NwZWNpZmljX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwcm9iZSkgeyByZXR1cm4gLUVOT1RUWTsgfQotI2VuZGlmCi1FWFBPUlRfU1lNQk9MKHBjaV9maXh1cF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwppbmRleCBjNDhjZDM3Li40ZmUzNmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtMjcsMzcgKzI3LDkxIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgInBjaS5oIgogCi1zdGF0aWMgdm9pZCBwYnVzX2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKK3N0cnVjdCByZXNvdXJjZV9saXN0X3ggeworCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggKm5leHQ7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0Jc3RydWN0IHJlc291cmNlX2xpc3QgaGVhZCwgKmxpc3QsICp0bXA7Ci0JaW50IGlkeDsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXJlc291cmNlX3NpemVfdCBzdGFydDsKKwlyZXNvdXJjZV9zaXplX3QgZW5kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cit9OwogCi0JaGVhZC5uZXh0ID0gTlVMTDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKLQkJdTE2IGNsYXNzID0gZGV2LT5jbGFzcyA+PiA4Oworc3RhdGljIHZvaWQgYWRkX3RvX2ZhaWxlZF9saXN0KHN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmhlYWQsCisJCQkJIHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzKQoreworCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmxpc3QgPSBoZWFkOworCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmxuID0gbGlzdC0+bmV4dDsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICp0bXA7CiAKLQkJLyogRG9uJ3QgdG91Y2ggY2xhc3NsZXNzIGRldmljZXMgb3IgaG9zdCBicmlkZ2VzIG9yIGlvYXBpY3MuICAqLwotCQlpZiAoY2xhc3MgPT0gUENJX0NMQVNTX05PVF9ERUZJTkVEIHx8Ci0JCSAgICBjbGFzcyA9PSBQQ0lfQ0xBU1NfQlJJREdFX0hPU1QpCi0JCQljb250aW51ZTsKLQotCQkvKiBEb24ndCB0b3VjaCBpb2FwaWMgZGV2aWNlcyBhbHJlYWR5IGVuYWJsZWQgYnkgZmlybXdhcmUgKi8KLQkJaWYgKGNsYXNzID09IFBDSV9DTEFTU19TWVNURU1fUElDKSB7Ci0JCQl1MTYgY29tbWFuZDsKLQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjb21tYW5kKTsKLQkJCWlmIChjb21tYW5kICYgKFBDSV9DT01NQU5EX0lPIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkKLQkJCQljb250aW51ZTsKLQkJfQotCi0JCXBkZXZfc29ydF9yZXNvdXJjZXMoZGV2LCAmaGVhZCk7CisJdG1wID0ga21hbGxvYyhzaXplb2YoKnRtcCksIEdGUF9LRVJORUwpOworCWlmICghdG1wKSB7CisJCXByX3dhcm5pbmcoImFkZF90b19mYWlsZWRfbGlzdDoga21hbGxvYygpIGZhaWxlZCFcbiIpOworCQlyZXR1cm47CiAJfQogCi0JZm9yIChsaXN0ID0gaGVhZC5uZXh0OyBsaXN0OykgeworCXRtcC0+bmV4dCA9IGxuOworCXRtcC0+cmVzID0gcmVzOworCXRtcC0+ZGV2ID0gZGV2OworCXRtcC0+c3RhcnQgPSByZXMtPnN0YXJ0OworCXRtcC0+ZW5kID0gcmVzLT5lbmQ7CisJdG1wLT5mbGFncyA9IHJlcy0+ZmxhZ3M7CisJbGlzdC0+bmV4dCA9IHRtcDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9mYWlsZWRfbGlzdChzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpoZWFkKQoreworCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggKmxpc3QsICp0bXA7CisKKwlmb3IgKGxpc3QgPSBoZWFkLT5uZXh0OyBsaXN0OykgeworCQl0bXAgPSBsaXN0OworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJa2ZyZWUodG1wKTsKKwl9CisKKwloZWFkLT5uZXh0ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgX19kZXZfc29ydF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkgc3RydWN0IHJlc291cmNlX2xpc3QgKmhlYWQpCit7CisJdTE2IGNsYXNzID0gZGV2LT5jbGFzcyA+PiA4OworCisJLyogRG9uJ3QgdG91Y2ggY2xhc3NsZXNzIGRldmljZXMgb3IgaG9zdCBicmlkZ2VzIG9yIGlvYXBpY3MuICAqLworCWlmIChjbGFzcyA9PSBQQ0lfQ0xBU1NfTk9UX0RFRklORUQgfHwgY2xhc3MgPT0gUENJX0NMQVNTX0JSSURHRV9IT1NUKQorCQlyZXR1cm47CisKKwkvKiBEb24ndCB0b3VjaCBpb2FwaWMgZGV2aWNlcyBhbHJlYWR5IGVuYWJsZWQgYnkgZmlybXdhcmUgKi8KKwlpZiAoY2xhc3MgPT0gUENJX0NMQVNTX1NZU1RFTV9QSUMpIHsKKwkJdTE2IGNvbW1hbmQ7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjb21tYW5kKTsKKwkJaWYgKGNvbW1hbmQgJiAoUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlkpKQorCQkJcmV0dXJuOworCX0KKworCXBkZXZfc29ydF9yZXNvdXJjZXMoZGV2LCBoZWFkKTsKK30KKworc3RhdGljIHZvaWQgX19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqaGVhZCwKKwkJCQkgc3RydWN0IHJlc291cmNlX2xpc3RfeCAqZmFpbF9oZWFkKQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCByZXNvdXJjZV9saXN0ICpsaXN0LCAqdG1wOworCWludCBpZHg7CisKKwlmb3IgKGxpc3QgPSBoZWFkLT5uZXh0OyBsaXN0OykgewogCQlyZXMgPSBsaXN0LT5yZXM7CiAJCWlkeCA9IHJlcyAtICZsaXN0LT5kZXYtPnJlc291cmNlWzBdOworCiAJCWlmIChwY2lfYXNzaWduX3Jlc291cmNlKGxpc3QtPmRldiwgaWR4KSkgeworCQkJaWYgKGZhaWxfaGVhZCAmJiAhcGNpX2lzX3Jvb3RfYnVzKGxpc3QtPmRldi0+YnVzKSkgeworCQkJCS8qCisJCQkJICogaWYgdGhlIGZhaWxlZCByZXMgaXMgZm9yIFJPTSBCQVIsIGFuZCBpdCB3aWxsCisJCQkJICogYmUgZW5hYmxlZCBsYXRlciwgZG9uJ3QgYWRkIGl0IHRvIHRoZSBsaXN0CisJCQkJICovCisJCQkJaWYgKCEoKGlkeCA9PSBQQ0lfUk9NX1JFU09VUkNFKSAmJgorCQkJCSAgICAgICghKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX1JPTV9FTkFCTEUpKSkpCisJCQkJCWFkZF90b19mYWlsZWRfbGlzdChmYWlsX2hlYWQsIGxpc3QtPmRldiwgcmVzKTsKKwkJCX0KIAkJCXJlcy0+c3RhcnQgPSAwOwogCQkJcmVzLT5lbmQgPSAwOwogCQkJcmVzLT5mbGFncyA9IDA7CkBAIC02OCw2ICsxMjIsMzAgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHBkZXZfYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkgc3RydWN0IHJlc291cmNlX2xpc3RfeCAqZmFpbF9oZWFkKQoreworCXN0cnVjdCByZXNvdXJjZV9saXN0IGhlYWQ7CisKKwloZWFkLm5leHQgPSBOVUxMOworCV9fZGV2X3NvcnRfcmVzb3VyY2VzKGRldiwgJmhlYWQpOworCV9fYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoJmhlYWQsIGZhaWxfaGVhZCk7CisKK30KKworc3RhdGljIHZvaWQgcGJ1c19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCQkgc3RydWN0IHJlc291cmNlX2xpc3RfeCAqZmFpbF9oZWFkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJc3RydWN0IHJlc291cmNlX2xpc3QgaGVhZDsKKworCWhlYWQubmV4dCA9IE5VTEw7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KQorCQlfX2Rldl9zb3J0X3Jlc291cmNlcyhkZXYsICZoZWFkKTsKKworCV9fYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoJmhlYWQsIGZhaWxfaGVhZCk7Cit9CisKIHZvaWQgcGNpX3NldHVwX2NhcmRidXMoc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gYnVzLT5zZWxmOwpAQCAtMTM0LDE4ICsyMTIsMTIgQEAKICAgIGNvbmZpZyBzcGFjZSB3cml0ZXMsIHNvIGl0J3MgcXVpdGUgcG9zc2libGUgdGhhdCBhbiBJL08gd2luZG93IG9mCiAgICB0aGUgYnJpZGdlIHdpbGwgaGF2ZSBzb21lIHVuZGVzaXJhYmxlIGFkZHJlc3MgKGUuZy4gMCkgYWZ0ZXIgdGhlCiAgICBmaXJzdCB3cml0ZS4gRGl0dG8gNjQtYml0IHByZWZldGNoYWJsZSBNTUlPLiAgKi8KLXN0YXRpYyB2b2lkIHBjaV9zZXR1cF9icmlkZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cykKK3N0YXRpYyB2b2lkIHBjaV9zZXR1cF9icmlkZ2VfaW8oc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gYnVzLT5zZWxmOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiByZWdpb247Ci0JdTMyIGwsIGJ1LCBsdSwgaW9fdXBwZXIxNjsKLQotCWlmIChwY2lfaXNfZW5hYmxlZChicmlkZ2UpKQotCQlyZXR1cm47Ci0KLQlkZXZfaW5mbygmYnJpZGdlLT5kZXYsICJQQ0kgYnJpZGdlIHRvIFtidXMgJTAyeC0lMDJ4XVxuIiwKLQkJIGJ1cy0+c2Vjb25kYXJ5LCBidXMtPnN1Ym9yZGluYXRlKTsKKwl1MzIgbCwgaW9fdXBwZXIxNjsKIAogCS8qIFNldCB1cCB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGhlIFBDSSBJL08gc2VnbWVudCBmb3IgdGhpcyBidXMuICovCiAJcmVzID0gYnVzLT5yZXNvdXJjZVswXTsKQEAgLTE1OCw4ICsyMzAsNyBAQAogCQkvKiBTZXQgdXAgdXBwZXIgMTYgYml0cyBvZiBJL08gYmFzZS9saW1pdC4gKi8KIAkJaW9fdXBwZXIxNiA9IChyZWdpb24uZW5kICYgMHhmZmZmMDAwMCkgfCAocmVnaW9uLnN0YXJ0ID4+IDE2KTsKIAkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiICBicmlkZ2Ugd2luZG93ICVwUlxuIiwgcmVzKTsKLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJLyogQ2xlYXIgdXBwZXIgMTYgYml0cyBvZiBJL08gYmFzZS9saW1pdC4gKi8KIAkJaW9fdXBwZXIxNiA9IDA7CiAJCWwgPSAweDAwZjA7CkBAIC0xNzEsMjEgKzI0MiwzNSBAQAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlLCBQQ0lfSU9fQkFTRSwgbCk7CiAJLyogVXBkYXRlIHVwcGVyIDE2IGJpdHMgb2YgSS9PIGJhc2UvbGltaXQuICovCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2UsIFBDSV9JT19CQVNFX1VQUEVSMTYsIGlvX3VwcGVyMTYpOworfQogCi0JLyogU2V0IHVwIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgUENJIE1lbW9yeSBzZWdtZW50Ci0JICAgZm9yIHRoaXMgYnVzLiAqLworc3RhdGljIHZvaWQgcGNpX3NldHVwX2JyaWRnZV9tbWlvKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IGJ1cy0+c2VsZjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gcmVnaW9uOworCXUzMiBsOworCisJLyogU2V0IHVwIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgUENJIE1lbW9yeSBzZWdtZW50IGZvciB0aGlzIGJ1cy4gKi8KIAlyZXMgPSBidXMtPnJlc291cmNlWzFdOwogCXBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKGJyaWRnZSwgJnJlZ2lvbiwgcmVzKTsKIAlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSB7CiAJCWwgPSAocmVnaW9uLnN0YXJ0ID4+IDE2KSAmIDB4ZmZmMDsKIAkJbCB8PSByZWdpb24uZW5kICYgMHhmZmYwMDAwMDsKIAkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiICBicmlkZ2Ugd2luZG93ICVwUlxuIiwgcmVzKTsKLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJbCA9IDB4MDAwMGZmZjA7CiAJCWRldl9pbmZvKCZicmlkZ2UtPmRldiwgIiAgYnJpZGdlIHdpbmRvdyBbbWVtIGRpc2FibGVkXVxuIik7CiAJfQogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlLCBQQ0lfTUVNT1JZX0JBU0UsIGwpOworfQorCitzdGF0aWMgdm9pZCBwY2lfc2V0dXBfYnJpZGdlX21taW9fcHJlZihzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBidXMtPnNlbGY7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IHBjaV9idXNfcmVnaW9uIHJlZ2lvbjsKKwl1MzIgbCwgYnUsIGx1OwogCiAJLyogQ2xlYXIgb3V0IHRoZSB1cHBlciAzMiBiaXRzIG9mIFBSRUYgbGltaXQuCiAJICAgSWYgUENJX1BSRUZfQkFTRV9VUFBFUjMyIHdhcyBub24temVybywgdGhpcyB0ZW1wb3JhcmlseQpAQCAtMjA0LDggKzI4OSw3IEBACiAJCQlsdSA9IHVwcGVyXzMyX2JpdHMocmVnaW9uLmVuZCk7CiAJCX0KIAkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiICBicmlkZ2Ugd2luZG93ICVwUlxuIiwgcmVzKTsKLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJbCA9IDB4MDAwMGZmZjA7CiAJCWRldl9pbmZvKCZicmlkZ2UtPmRldiwgIiAgYnJpZGdlIHdpbmRvdyBbbWVtIHByZWYgZGlzYWJsZWRdXG4iKTsKIAl9CkBAIC0yMTQsMTAgKzI5OCwzNSBAQAogCS8qIFNldCB0aGUgdXBwZXIgMzIgYml0cyBvZiBQUkVGIGJhc2UgJiBsaW1pdC4gKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZSwgUENJX1BSRUZfQkFTRV9VUFBFUjMyLCBidSk7CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicmlkZ2UsIFBDSV9QUkVGX0xJTUlUX1VQUEVSMzIsIGx1KTsKK30KKworc3RhdGljIHZvaWQgX19wY2lfc2V0dXBfYnJpZGdlKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGxvbmcgdHlwZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gYnVzLT5zZWxmOworCisJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAiUENJIGJyaWRnZSB0byBbYnVzICUwMngtJTAyeF1cbiIsCisJCSBidXMtPnNlY29uZGFyeSwgYnVzLT5zdWJvcmRpbmF0ZSk7CisKKwlpZiAodHlwZSAmIElPUkVTT1VSQ0VfSU8pCisJCXBjaV9zZXR1cF9icmlkZ2VfaW8oYnVzKTsKKworCWlmICh0eXBlICYgSU9SRVNPVVJDRV9NRU0pCisJCXBjaV9zZXR1cF9icmlkZ2VfbW1pbyhidXMpOworCisJaWYgKHR5cGUgJiBJT1JFU09VUkNFX1BSRUZFVENIKQorCQlwY2lfc2V0dXBfYnJpZGdlX21taW9fcHJlZihidXMpOwogCiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGJyaWRnZSwgUENJX0JSSURHRV9DT05UUk9MLCBidXMtPmJyaWRnZV9jdGwpOwogfQogCitzdGF0aWMgdm9pZCBwY2lfc2V0dXBfYnJpZGdlKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJdW5zaWduZWQgbG9uZyB0eXBlID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNIHwKKwkJCQkgIElPUkVTT1VSQ0VfUFJFRkVUQ0g7CisKKwlfX3BjaV9zZXR1cF9icmlkZ2UoYnVzLCB0eXBlKTsKK30KKwogLyogQ2hlY2sgd2hldGhlciB0aGUgYnJpZGdlIHN1cHBvcnRzIG9wdGlvbmFsIEkvTyBhbmQKICAgIHByZWZldGNoYWJsZSBtZW1vcnkgcmFuZ2VzLiBJZiBub3QsIHRoZSByZXNwZWN0aXZlCiAgICBiYXNlL2xpbWl0IHJlZ2lzdGVycyBtdXN0IGJlIHJlYWQtb25seSBhbmQgcmVhZCBhcyAwLiAqLwpAQCAtMjUzLDggKzM2MiwxMSBAQAogCX0KIAlpZiAocG1lbSkgewogCQliX3Jlc1syXS5mbGFncyB8PSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7Ci0JCWlmICgocG1lbSAmIFBDSV9QUkVGX1JBTkdFX1RZUEVfTUFTSykgPT0gUENJX1BSRUZfUkFOR0VfVFlQRV82NCkKKwkJaWYgKChwbWVtICYgUENJX1BSRUZfUkFOR0VfVFlQRV9NQVNLKSA9PQorCQkgICAgUENJX1BSRUZfUkFOR0VfVFlQRV82NCkgewogCQkJYl9yZXNbMl0uZmxhZ3MgfD0gSU9SRVNPVVJDRV9NRU1fNjQ7CisJCQliX3Jlc1syXS5mbGFncyB8PSBQQ0lfUFJFRl9SQU5HRV9UWVBFXzY0OworCQl9CiAJfQogCiAJLyogZG91YmxlIGNoZWNrIGlmIGJyaWRnZSBkb2VzIHN1cHBvcnQgNjQgYml0IHByZWYgKi8KQEAgLTI4Myw4ICszOTUsNyBAQAogCXVuc2lnbmVkIGxvbmcgdHlwZV9tYXNrID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNIHwKIAkJCQkgIElPUkVTT1VSQ0VfUFJFRkVUQ0g7CiAKLQlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKLQkJciA9IGJ1cy0+cmVzb3VyY2VbaV07CisJcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHIsIGkpIHsKIAkJaWYgKHIgPT0gJmlvcG9ydF9yZXNvdXJjZSB8fCByID09ICZpb21lbV9yZXNvdXJjZSkKIAkJCWNvbnRpbnVlOwogCQlpZiAociAmJiAoci0+ZmxhZ3MgJiB0eXBlX21hc2spID09IHR5cGUgJiYgIXItPnBhcmVudCkKQEAgLTMwMSw3ICs0MTIsNyBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJc3RydWN0IHJlc291cmNlICpiX3JlcyA9IGZpbmRfZnJlZV9idXNfcmVzb3VyY2UoYnVzLCBJT1JFU09VUkNFX0lPKTsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSAwLCBzaXplMSA9IDA7CisJdW5zaWduZWQgbG9uZyBzaXplID0gMCwgc2l6ZTEgPSAwLCBvbGRfc2l6ZTsKIAogCWlmICghYl9yZXMpCiAgCQlyZXR1cm47CkBAIC0zMjYsMTIgKzQzNywxNyBAQAogCX0KIAlpZiAoc2l6ZSA8IG1pbl9zaXplKQogCQlzaXplID0gbWluX3NpemU7CisJb2xkX3NpemUgPSByZXNvdXJjZV9zaXplKGJfcmVzKTsKKwlpZiAob2xkX3NpemUgPT0gMSkKKwkJb2xkX3NpemUgPSAwOwogLyogVG8gYmUgZml4ZWQgaW4gMi41OiB3ZSBzaG91bGQgaGF2ZSBzb3J0IG9mIEhBVkVfSVNBCiAgICBmbGFnIGluIHRoZSBzdHJ1Y3QgcGNpX2J1cy4gKi8KICNpZiBkZWZpbmVkKENPTkZJR19JU0EpIHx8IGRlZmluZWQoQ09ORklHX0VJU0EpCiAJc2l6ZSA9IChzaXplICYgMHhmZikgKyAoKHNpemUgJiB+MHhmZlVMKSA8PCAyKTsKICNlbmRpZgogCXNpemUgPSBBTElHTihzaXplICsgc2l6ZTEsIDQwOTYpOworCWlmIChzaXplIDwgb2xkX3NpemUpCisJCXNpemUgPSBvbGRfc2l6ZTsKIAlpZiAoIXNpemUpIHsKIAkJaWYgKGJfcmVzLT5zdGFydCB8fCBiX3Jlcy0+ZW5kKQogCQkJZGV2X2luZm8oJmJ1cy0+c2VsZi0+ZGV2LCAiZGlzYWJsaW5nIGJyaWRnZSB3aW5kb3cgIgpAQCAtMzUyLDcgKzQ2OCw3IEBACiAJCQkgdW5zaWduZWQgbG9uZyB0eXBlLCByZXNvdXJjZV9zaXplX3QgbWluX3NpemUpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKLQlyZXNvdXJjZV9zaXplX3QgbWluX2FsaWduLCBhbGlnbiwgc2l6ZTsKKwlyZXNvdXJjZV9zaXplX3QgbWluX2FsaWduLCBhbGlnbiwgc2l6ZSwgb2xkX3NpemU7CiAJcmVzb3VyY2Vfc2l6ZV90IGFsaWduc1sxMl07CS8qIEFsaWdubWVudHMgZnJvbSAxTWIgdG8gMkdiICovCiAJaW50IG9yZGVyLCBtYXhfb3JkZXI7CiAJc3RydWN0IHJlc291cmNlICpiX3JlcyA9IGZpbmRfZnJlZV9idXNfcmVzb3VyY2UoYnVzLCB0eXBlKTsKQEAgLTQwMiw2ICs1MTgsMTEgQEAKIAl9CiAJaWYgKHNpemUgPCBtaW5fc2l6ZSkKIAkJc2l6ZSA9IG1pbl9zaXplOworCW9sZF9zaXplID0gcmVzb3VyY2Vfc2l6ZShiX3Jlcyk7CisJaWYgKG9sZF9zaXplID09IDEpCisJCW9sZF9zaXplID0gMDsKKwlpZiAoc2l6ZSA8IG9sZF9zaXplKQorCQlzaXplID0gb2xkX3NpemU7CiAKIAlhbGlnbiA9IDA7CiAJbWluX2FsaWduID0gMDsKQEAgLTUzOCwyMyArNjU5LDI1IEBACiB9CiBFWFBPUlRfU1lNQk9MKHBjaV9idXNfc2l6ZV9icmlkZ2VzKTsKIAotdm9pZCBfX3JlZiBwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cykKK3N0YXRpYyB2b2lkIF9fcmVmIF9fcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMsCisJCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpmYWlsX2hlYWQpCiB7CiAJc3RydWN0IHBjaV9idXMgKmI7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAotCXBidXNfYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoYnVzKTsKKwlwYnVzX2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKGJ1cywgZmFpbF9oZWFkKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewogCQliID0gZGV2LT5zdWJvcmRpbmF0ZTsKIAkJaWYgKCFiKQogCQkJY29udGludWU7CiAKLQkJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGIpOworCQlfX3BjaV9idXNfYXNzaWduX3Jlc291cmNlcyhiLCBmYWlsX2hlYWQpOwogCiAJCXN3aXRjaCAoZGV2LT5jbGFzcyA+PiA4KSB7CiAJCWNhc2UgUENJX0NMQVNTX0JSSURHRV9QQ0k6Ci0JCQlwY2lfc2V0dXBfYnJpZGdlKGIpOworCQkJaWYgKCFwY2lfaXNfZW5hYmxlZChkZXYpKQorCQkJCXBjaV9zZXR1cF9icmlkZ2UoYik7CiAJCQlicmVhazsKIAogCQljYXNlIFBDSV9DTEFTU19CUklER0VfQ0FSREJVUzoKQEAgLTU2OCwxNSArNjkxLDEzMCBAQAogCQl9CiAJfQogfQorCit2b2lkIF9fcmVmIHBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCV9fcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cywgTlVMTCk7Cit9CiBFWFBPUlRfU1lNQk9MKHBjaV9idXNfYXNzaWduX3Jlc291cmNlcyk7CiAKK3N0YXRpYyB2b2lkIF9fcmVmIF9fcGNpX2JyaWRnZV9hc3NpZ25fcmVzb3VyY2VzKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpicmlkZ2UsCisJCQkJCSBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF94ICpmYWlsX2hlYWQpCit7CisJc3RydWN0IHBjaV9idXMgKmI7CisKKwlwZGV2X2Fzc2lnbl9yZXNvdXJjZXNfc29ydGVkKChzdHJ1Y3QgcGNpX2RldiAqKWJyaWRnZSwgZmFpbF9oZWFkKTsKKworCWIgPSBicmlkZ2UtPnN1Ym9yZGluYXRlOworCWlmICghYikKKwkJcmV0dXJuOworCisJX19wY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYiwgZmFpbF9oZWFkKTsKKworCXN3aXRjaCAoYnJpZGdlLT5jbGFzcyA+PiA4KSB7CisJY2FzZSBQQ0lfQ0xBU1NfQlJJREdFX1BDSToKKwkJcGNpX3NldHVwX2JyaWRnZShiKTsKKwkJYnJlYWs7CisKKwljYXNlIFBDSV9DTEFTU19CUklER0VfQ0FSREJVUzoKKwkJcGNpX3NldHVwX2NhcmRidXMoYik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2luZm8oJmJyaWRnZS0+ZGV2LCAibm90IHNldHRpbmcgdXAgYnJpZGdlIGZvciBidXMgIgorCQkJICIlMDR4OiUwMnhcbiIsIHBjaV9kb21haW5fbnIoYiksIGItPm51bWJlcik7CisJCWJyZWFrOworCX0KK30KK3N0YXRpYyB2b2lkIHBjaV9icmlkZ2VfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJCQkJICB1bnNpZ25lZCBsb25nIHR5cGUpCit7CisJaW50IGlkeDsKKwlib29sIGNoYW5nZWQgPSBmYWxzZTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwl1bnNpZ25lZCBsb25nIHR5cGVfbWFzayA9IElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSB8CisJCQkJICBJT1JFU09VUkNFX1BSRUZFVENIOworCisJZGV2ID0gYnVzLT5zZWxmOworCWZvciAoaWR4ID0gUENJX0JSSURHRV9SRVNPVVJDRVM7IGlkeCA8PSBQQ0lfQlJJREdFX1JFU09VUkNFX0VORDsKKwkgICAgIGlkeCsrKSB7CisJCXIgPSAmZGV2LT5yZXNvdXJjZVtpZHhdOworCQlpZiAoKHItPmZsYWdzICYgdHlwZV9tYXNrKSAhPSB0eXBlKQorCQkJY29udGludWU7CisJCWlmICghci0+cGFyZW50KQorCQkJY29udGludWU7CisJCS8qCisJCSAqIGlmIHRoZXJlIGFyZSBjaGlsZHJlbiB1bmRlciB0aGF0LCB3ZSBzaG91bGQgcmVsZWFzZSB0aGVtCisJCSAqICBhbGwKKwkJICovCisJCXJlbGVhc2VfY2hpbGRfcmVzb3VyY2VzKHIpOworCQlpZiAoIXJlbGVhc2VfcmVzb3VyY2UocikpIHsKKwkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LAorCQkJCSAicmVzb3VyY2UgJWQgJXBSIHJlbGVhc2VkXG4iLCBpZHgsIHIpOworCQkJLyoga2VlcCB0aGUgb2xkIHNpemUgKi8KKwkJCXItPmVuZCA9IHJlc291cmNlX3NpemUocikgLSAxOworCQkJci0+c3RhcnQgPSAwOworCQkJci0+ZmxhZ3MgPSAwOworCQkJY2hhbmdlZCA9IHRydWU7CisJCX0KKwl9CisKKwlpZiAoY2hhbmdlZCkgeworCQkvKiBhdm9pZGluZyB0b3VjaCB0aGUgb25lIHdpdGhvdXQgUFJFRiAqLworCQlpZiAodHlwZSAmIElPUkVTT1VSQ0VfUFJFRkVUQ0gpCisJCQl0eXBlID0gSU9SRVNPVVJDRV9QUkVGRVRDSDsKKwkJX19wY2lfc2V0dXBfYnJpZGdlKGJ1cywgdHlwZSk7CisJfQorfQorCitlbnVtIHJlbGVhc2VfdHlwZSB7CisJbGVhZl9vbmx5LAorCXdob2xlX3N1YnRyZWUsCit9OworLyoKKyAqIHRyeSB0byByZWxlYXNlIHBjaSBicmlkZ2UgcmVzb3VyY2VzIHRoYXQgaXMgZnJvbSBsZWFmIGJyaWRnZSwKKyAqIHNvIHdlIGNhbiBhbGxvY2F0ZSBiaWcgbmV3IG9uZSBsYXRlcgorICovCitzdGF0aWMgdm9pZCBfX3JlZiBwY2lfYnVzX3JlbGVhc2VfYnJpZGdlX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyB0eXBlLAorCQkJCQkJICAgZW51bSByZWxlYXNlX3R5cGUgcmVsX3R5cGUpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlib29sIGlzX2xlYWZfYnJpZGdlID0gdHJ1ZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgeworCQlzdHJ1Y3QgcGNpX2J1cyAqYiA9IGRldi0+c3Vib3JkaW5hdGU7CisJCWlmICghYikKKwkJCWNvbnRpbnVlOworCisJCWlzX2xlYWZfYnJpZGdlID0gZmFsc2U7CisKKwkJaWYgKChkZXYtPmNsYXNzID4+IDgpICE9IFBDSV9DTEFTU19CUklER0VfUENJKQorCQkJY29udGludWU7CisKKwkJaWYgKHJlbF90eXBlID09IHdob2xlX3N1YnRyZWUpCisJCQlwY2lfYnVzX3JlbGVhc2VfYnJpZGdlX3Jlc291cmNlcyhiLCB0eXBlLAorCQkJCQkJIHdob2xlX3N1YnRyZWUpOworCX0KKworCWlmIChwY2lfaXNfcm9vdF9idXMoYnVzKSkKKwkJcmV0dXJuOworCisJaWYgKChidXMtPnNlbGYtPmNsYXNzID4+IDgpICE9IFBDSV9DTEFTU19CUklER0VfUENJKQorCQlyZXR1cm47CisKKwlpZiAoKHJlbF90eXBlID09IHdob2xlX3N1YnRyZWUpIHx8IGlzX2xlYWZfYnJpZGdlKQorCQlwY2lfYnJpZGdlX3JlbGVhc2VfcmVzb3VyY2VzKGJ1cywgdHlwZSk7Cit9CisKIHN0YXRpYyB2b2lkIHBjaV9idXNfZHVtcF9yZXMoc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKLSAgICAgICAgaW50IGk7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGk7CiAKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgc3RydWN0IHJlc291cmNlICpyZXMgPSBidXMtPnJlc291cmNlW2ldOwotICAgICAgICAgICAgICAgIGlmICghcmVzIHx8ICFyZXMtPmVuZCkKKwlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgcmVzLCBpKSB7CisJCWlmICghcmVzIHx8ICFyZXMtPmVuZCB8fCAhcmVzLT5mbGFncykKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmJ1cy0+ZGV2LCAicmVzb3VyY2UgJWQgJXBSXG4iLCBpLCByZXMpOwpAQCAtNjAwLDExICs4MzgsNjUgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgX19pbml0IHBjaV9idXNfZ2V0X2RlcHRoKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJaW50IGRlcHRoID0gMDsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCWludCByZXQ7CisJCXN0cnVjdCBwY2lfYnVzICpiID0gZGV2LT5zdWJvcmRpbmF0ZTsKKwkJaWYgKCFiKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gcGNpX2J1c19nZXRfZGVwdGgoYik7CisJCWlmIChyZXQgKyAxID4gZGVwdGgpCisJCQlkZXB0aCA9IHJldCArIDE7CisJfQorCisJcmV0dXJuIGRlcHRoOworfQorc3RhdGljIGludCBfX2luaXQgcGNpX2dldF9tYXhfZGVwdGgodm9pZCkKK3sKKwlpbnQgZGVwdGggPSAwOworCXN0cnVjdCBwY2lfYnVzICpidXM7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1cywgJnBjaV9yb290X2J1c2VzLCBub2RlKSB7CisJCWludCByZXQ7CisKKwkJcmV0ID0gcGNpX2J1c19nZXRfZGVwdGgoYnVzKTsKKwkJaWYgKHJldCA+IGRlcHRoKQorCQkJZGVwdGggPSByZXQ7CisJfQorCisJcmV0dXJuIGRlcHRoOworfQorCisvKgorICogZmlyc3QgdHJ5IHdpbGwgbm90IHRvdWNoIHBjaSBicmlkZ2UgcmVzCisgKiBzZWNvbmQgIGFuZCBsYXRlciB0cnkgd2lsbCBjbGVhciBzbWFsbCBsZWFmIGJyaWRnZSByZXMKKyAqIHdpbGwgc3RvcCB0aWxsIHRvIHRoZSBtYXggIGRlZXB0aCBpZiBjYW4gbm90IGZpbmQgZ29vZCBvbmUKKyAqLwogdm9pZCBfX2luaXQKIHBjaV9hc3NpZ25fdW5hc3NpZ25lZF9yZXNvdXJjZXModm9pZCkKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOworCWludCB0cmllZF90aW1lcyA9IDA7CisJZW51bSByZWxlYXNlX3R5cGUgcmVsX3R5cGUgPSBsZWFmX29ubHk7CisJc3RydWN0IHJlc291cmNlX2xpc3RfeCBoZWFkLCAqbGlzdDsKKwl1bnNpZ25lZCBsb25nIHR5cGVfbWFzayA9IElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSB8CisJCQkJICBJT1JFU09VUkNFX1BSRUZFVENIOworCXVuc2lnbmVkIGxvbmcgZmFpbGVkX3R5cGU7CisJaW50IG1heF9kZXB0aCA9IHBjaV9nZXRfbWF4X2RlcHRoKCk7CisJaW50IHBjaV90cnlfbnVtOwogCisJaGVhZC5uZXh0ID0gTlVMTDsKKworCXBjaV90cnlfbnVtID0gbWF4X2RlcHRoICsgMTsKKwlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBtYXggYnVzIGRlcHRoOiAlZCBwY2lfdHJ5X251bTogJWRcbiIsCisJCSBtYXhfZGVwdGgsIHBjaV90cnlfbnVtKTsKKworYWdhaW46CiAJLyogRGVwdGggZmlyc3QsIGNhbGN1bGF0ZSBzaXplcyBhbmQgYWxpZ25tZW50cyBvZiBhbGwKIAkgICBzdWJvcmRpbmF0ZSBidXNlcy4gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1cywgJnBjaV9yb290X2J1c2VzLCBub2RlKSB7CkBAIC02MTIsMTIgKzkwNCwxMzAgQEAKIAl9CiAJLyogRGVwdGggbGFzdCwgYWxsb2NhdGUgcmVzb3VyY2VzIGFuZCB1cGRhdGUgdGhlIGhhcmR3YXJlLiAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzLCAmcGNpX3Jvb3RfYnVzZXMsIG5vZGUpIHsKLQkJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cyk7Ci0JCXBjaV9lbmFibGVfYnJpZGdlcyhidXMpOworCQlfX3BjaV9idXNfYXNzaWduX3Jlc291cmNlcyhidXMsICZoZWFkKTsKIAl9CisJdHJpZWRfdGltZXMrKzsKKworCS8qIGFueSBkZXZpY2UgY29tcGxhaW4/ICovCisJaWYgKCFoZWFkLm5leHQpCisJCWdvdG8gZW5hYmxlX2FuZF9kdW1wOworCWZhaWxlZF90eXBlID0gMDsKKwlmb3IgKGxpc3QgPSBoZWFkLm5leHQ7IGxpc3Q7KSB7CisJCWZhaWxlZF90eXBlIHw9IGxpc3QtPmZsYWdzOworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwl9CisJLyoKKwkgKiBpbyBwb3J0IGFyZSB0aWdodCwgZG9uJ3QgdHJ5IGV4dHJhCisJICogb3IgaWYgcmVhY2ggdGhlIGxpbWl0LCBkb24ndCB3YW50IHRvIHRyeSBtb3JlCisJICovCisJZmFpbGVkX3R5cGUgJj0gdHlwZV9tYXNrOworCWlmICgoZmFpbGVkX3R5cGUgPT0gSU9SRVNPVVJDRV9JTykgfHwgKHRyaWVkX3RpbWVzID49IHBjaV90cnlfbnVtKSkgeworCQlmcmVlX2ZhaWxlZF9saXN0KCZoZWFkKTsKKwkJZ290byBlbmFibGVfYW5kX2R1bXA7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogTm8uICVkIHRyeSB0byBhc3NpZ24gdW5hc3NpZ25lZCByZXNcbiIsCisJCQkgdHJpZWRfdGltZXMgKyAxKTsKKworCS8qIHRoaXJkIHRpbWVzIGFuZCBsYXRlciB3aWxsIG5vdCBjaGVjayBpZiBpdCBpcyBsZWFmICovCisJaWYgKCh0cmllZF90aW1lcyArIDEpID4gMikKKwkJcmVsX3R5cGUgPSB3aG9sZV9zdWJ0cmVlOworCisJLyoKKwkgKiBUcnkgdG8gcmVsZWFzZSBsZWFmIGJyaWRnZSdzIHJlc291cmNlcyB0aGF0IGRvZXNuJ3QgZml0IHJlc291cmNlIG9mCisJICogY2hpbGQgZGV2aWNlIHVuZGVyIHRoYXQgYnJpZGdlCisJICovCisJZm9yIChsaXN0ID0gaGVhZC5uZXh0OyBsaXN0OykgeworCQlidXMgPSBsaXN0LT5kZXYtPmJ1czsKKwkJcGNpX2J1c19yZWxlYXNlX2JyaWRnZV9yZXNvdXJjZXMoYnVzLCBsaXN0LT5mbGFncyAmIHR5cGVfbWFzaywKKwkJCQkJCSAgcmVsX3R5cGUpOworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwl9CisJLyogcmVzdG9yZSBzaXplIGFuZCBmbGFncyAqLworCWZvciAobGlzdCA9IGhlYWQubmV4dDsgbGlzdDspIHsKKwkJc3RydWN0IHJlc291cmNlICpyZXMgPSBsaXN0LT5yZXM7CisKKwkJcmVzLT5zdGFydCA9IGxpc3QtPnN0YXJ0OworCQlyZXMtPmVuZCA9IGxpc3QtPmVuZDsKKwkJcmVzLT5mbGFncyA9IGxpc3QtPmZsYWdzOworCQlpZiAobGlzdC0+ZGV2LT5zdWJvcmRpbmF0ZSkKKwkJCXJlcy0+ZmxhZ3MgPSAwOworCisJCWxpc3QgPSBsaXN0LT5uZXh0OworCX0KKwlmcmVlX2ZhaWxlZF9saXN0KCZoZWFkKTsKKworCWdvdG8gYWdhaW47CisKK2VuYWJsZV9hbmRfZHVtcDoKKwkvKiBEZXB0aCBsYXN0LCB1cGRhdGUgdGhlIGhhcmR3YXJlLiAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzLCAmcGNpX3Jvb3RfYnVzZXMsIG5vZGUpCisJCXBjaV9lbmFibGVfYnJpZGdlcyhidXMpOwogCiAJLyogZHVtcCB0aGUgcmVzb3VyY2Ugb24gYnVzZXMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1cywgJnBjaV9yb290X2J1c2VzLCBub2RlKSB7CiAJCXBjaV9idXNfZHVtcF9yZXNvdXJjZXMoYnVzKTsKIAl9CiB9CisKK3ZvaWQgcGNpX2Fzc2lnbl91bmFzc2lnbmVkX2JyaWRnZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50ID0gYnJpZGdlLT5zdWJvcmRpbmF0ZTsKKwlpbnQgdHJpZWRfdGltZXMgPSAwOworCXN0cnVjdCByZXNvdXJjZV9saXN0X3ggaGVhZCwgKmxpc3Q7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIHR5cGVfbWFzayA9IElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSB8CisJCQkJICBJT1JFU09VUkNFX1BSRUZFVENIOworCisJaGVhZC5uZXh0ID0gTlVMTDsKKworYWdhaW46CisJcGNpX2J1c19zaXplX2JyaWRnZXMocGFyZW50KTsKKwlfX3BjaV9icmlkZ2VfYXNzaWduX3Jlc291cmNlcyhicmlkZ2UsICZoZWFkKTsKKwlyZXR2YWwgPSBwY2lfcmVlbmFibGVfZGV2aWNlKGJyaWRnZSk7CisJcGNpX3NldF9tYXN0ZXIoYnJpZGdlKTsKKwlwY2lfZW5hYmxlX2JyaWRnZXMocGFyZW50KTsKKworCXRyaWVkX3RpbWVzKys7CisKKwlpZiAoIWhlYWQubmV4dCkKKwkJcmV0dXJuOworCisJaWYgKHRyaWVkX3RpbWVzID49IDIpIHsKKwkJLyogc3RpbGwgZmFpbCwgZG9uJ3QgbmVlZCB0byB0cnkgbW9yZSAqLworCQlmcmVlX2ZhaWxlZF9saXN0KCZoZWFkKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IE5vLiAlZCB0cnkgdG8gYXNzaWduIHVuYXNzaWduZWQgcmVzXG4iLAorCQkJIHRyaWVkX3RpbWVzICsgMSk7CisKKwkvKgorCSAqIFRyeSB0byByZWxlYXNlIGxlYWYgYnJpZGdlJ3MgcmVzb3VyY2VzIHRoYXQgZG9lc24ndCBmaXQgcmVzb3VyY2Ugb2YKKwkgKiBjaGlsZCBkZXZpY2UgdW5kZXIgdGhhdCBicmlkZ2UKKwkgKi8KKwlmb3IgKGxpc3QgPSBoZWFkLm5leHQ7IGxpc3Q7KSB7CisJCXN0cnVjdCBwY2lfYnVzICpidXMgPSBsaXN0LT5kZXYtPmJ1czsKKwkJdW5zaWduZWQgbG9uZyBmbGFncyA9IGxpc3QtPmZsYWdzOworCisJCXBjaV9idXNfcmVsZWFzZV9icmlkZ2VfcmVzb3VyY2VzKGJ1cywgZmxhZ3MgJiB0eXBlX21hc2ssCisJCQkJCQkgd2hvbGVfc3VidHJlZSk7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCX0KKwkvKiByZXN0b3JlIHNpemUgYW5kIGZsYWdzICovCisJZm9yIChsaXN0ID0gaGVhZC5uZXh0OyBsaXN0OykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGxpc3QtPnJlczsKKworCQlyZXMtPnN0YXJ0ID0gbGlzdC0+c3RhcnQ7CisJCXJlcy0+ZW5kID0gbGlzdC0+ZW5kOworCQlyZXMtPmZsYWdzID0gbGlzdC0+ZmxhZ3M7CisJCWlmIChsaXN0LT5kZXYtPnN1Ym9yZGluYXRlKQorCQkJcmVzLT5mbGFncyA9IDA7CisKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJfQorCWZyZWVfZmFpbGVkX2xpc3QoJmhlYWQpOworCisJZ290byBhZ2FpbjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9hc3NpZ25fdW5hc3NpZ25lZF9icmlkZ2VfcmVzb3VyY2VzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3Nsb3QuYyBiL2RyaXZlcnMvcGNpL3Nsb3QuYwppbmRleCA4YzAyYjZjLi40OWM5ZTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zbG90LmMKKysrIGIvZHJpdmVycy9wY2kvc2xvdC5jCkBAIC00Nyw2ICs0Nyw1NSBAQAogCQkJCXNsb3QtPm51bWJlcik7CiB9CiAKKy8qIHRoZXNlIHN0cmluZ3MgbWF0Y2ggdXAgd2l0aCB0aGUgdmFsdWVzIGluIHBjaV9idXNfc3BlZWQgKi8KK3N0YXRpYyBjaGFyICpwY2lfYnVzX3NwZWVkX3N0cmluZ3NbXSA9IHsKKwkiMzMgTUh6IFBDSSIsCQkvKiAweDAwICovCisJIjY2IE1IeiBQQ0kiLAkJLyogMHgwMSAqLworCSI2NiBNSHogUENJLVgiLCAJLyogMHgwMiAqLworCSIxMDAgTUh6IFBDSS1YIiwJLyogMHgwMyAqLworCSIxMzMgTUh6IFBDSS1YIiwJLyogMHgwNCAqLworCU5VTEwsCQkJLyogMHgwNSAqLworCU5VTEwsCQkJLyogMHgwNiAqLworCU5VTEwsCQkJLyogMHgwNyAqLworCU5VTEwsCQkJLyogMHgwOCAqLworCSI2NiBNSHogUENJLVggMjY2IiwJLyogMHgwOSAqLworCSIxMDAgTUh6IFBDSS1YIDI2NiIsCS8qIDB4MGEgKi8KKwkiMTMzIE1IeiBQQ0ktWCAyNjYiLAkvKiAweDBiICovCisJIlVua25vd24gQUdQIiwJCS8qIDB4MGMgKi8KKwkiMXggQUdQIiwJCS8qIDB4MGQgKi8KKwkiMnggQUdQIiwJCS8qIDB4MGUgKi8KKwkiNHggQUdQIiwJCS8qIDB4MGYgKi8KKwkiOHggQUdQIiwJCS8qIDB4MTAgKi8KKwkiNjYgTUh6IFBDSS1YIDUzMyIsCS8qIDB4MTEgKi8KKwkiMTAwIE1IeiBQQ0ktWCA1MzMiLAkvKiAweDEyICovCisJIjEzMyBNSHogUENJLVggNTMzIiwJLyogMHgxMyAqLworCSIyLjUgR1QvcyBQQ0llIiwJLyogMHgxNCAqLworCSI1LjAgR1QvcyBQQ0llIiwJLyogMHgxNSAqLworCSI4LjAgR1QvcyBQQ0llIiwJLyogMHgxNiAqLworfTsKKworc3RhdGljIHNzaXplX3QgYnVzX3NwZWVkX3JlYWQoZW51bSBwY2lfYnVzX3NwZWVkIHNwZWVkLCBjaGFyICpidWYpCit7CisJY29uc3QgY2hhciAqc3BlZWRfc3RyaW5nOworCisJaWYgKHNwZWVkIDwgQVJSQVlfU0laRShwY2lfYnVzX3NwZWVkX3N0cmluZ3MpKQorCQlzcGVlZF9zdHJpbmcgPSBwY2lfYnVzX3NwZWVkX3N0cmluZ3Nbc3BlZWRdOworCWVsc2UKKwkJc3BlZWRfc3RyaW5nID0gIlVua25vd24iOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHNwZWVkX3N0cmluZyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1heF9zcGVlZF9yZWFkX2ZpbGUoc3RydWN0IHBjaV9zbG90ICpzbG90LCBjaGFyICpidWYpCit7CisJcmV0dXJuIGJ1c19zcGVlZF9yZWFkKHNsb3QtPmJ1cy0+bWF4X2J1c19zcGVlZCwgYnVmKTsKK30KKworc3RhdGljIHNzaXplX3QgY3VyX3NwZWVkX3JlYWRfZmlsZShzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gYnVzX3NwZWVkX3JlYWQoc2xvdC0+YnVzLT5jdXJfYnVzX3NwZWVkLCBidWYpOworfQorCiBzdGF0aWMgdm9pZCBwY2lfc2xvdF9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CkBAIC02Niw5ICsxMTUsMTUgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfc2xvdF9hdHRyaWJ1dGUgcGNpX3Nsb3RfYXR0cl9hZGRyZXNzID0KIAlfX0FUVFIoYWRkcmVzcywgKFNfSUZSRUcgfCBTX0lSVUdPKSwgYWRkcmVzc19yZWFkX2ZpbGUsIE5VTEwpOworc3RhdGljIHN0cnVjdCBwY2lfc2xvdF9hdHRyaWJ1dGUgcGNpX3Nsb3RfYXR0cl9tYXhfc3BlZWQgPQorCV9fQVRUUihtYXhfYnVzX3NwZWVkLCAoU19JRlJFRyB8IFNfSVJVR08pLCBtYXhfc3BlZWRfcmVhZF9maWxlLCBOVUxMKTsKK3N0YXRpYyBzdHJ1Y3QgcGNpX3Nsb3RfYXR0cmlidXRlIHBjaV9zbG90X2F0dHJfY3VyX3NwZWVkID0KKwlfX0FUVFIoY3VyX2J1c19zcGVlZCwgKFNfSUZSRUcgfCBTX0lSVUdPKSwgY3VyX3NwZWVkX3JlYWRfZmlsZSwgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwY2lfc2xvdF9kZWZhdWx0X2F0dHJzW10gPSB7CiAJJnBjaV9zbG90X2F0dHJfYWRkcmVzcy5hdHRyLAorCSZwY2lfc2xvdF9hdHRyX21heF9zcGVlZC5hdHRyLAorCSZwY2lfc2xvdF9hdHRyX2N1cl9zcGVlZC5hdHRyLAogCU5VTEwsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwppbmRleCA5ZjNhZGJkLi4wYTY2MDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKQEAgLTg0LDcgKzg0LDcgQEAKIAl0cmlzdGF0ZSAiQ2FyZEJ1cyB5ZW50YS1jb21wYXRpYmxlIGJyaWRnZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IENBUkRCVVMgaWYgIUVNQkVEREVECi0Jc2VsZWN0IFBDQ0FSRF9OT05TVEFUSUMKKwlzZWxlY3QgUENDQVJEX05PTlNUQVRJQyBpZiBQQ01DSUEgIT0gbgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgQ2FyZEJ1cyBob3N0IGJyaWRnZXMuICBWaXJ0dWFsbHkKIAkgIGFsbCBtb2Rlcm4gUENNQ0lBIGJyaWRnZXMgYXJlIENhcmRCdXMgY29tcGF0aWJsZS4gIEEgImJyaWRnZSIgaXMKQEAgLTE2MSw5ICsxNjEsOCBAQAogCiBjb25maWcgUENNQ0lBX004WFgKIAl0cmlzdGF0ZSAiTVBDOHh4IFBDTUNJQSBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENNQ0lBICYmIFBQQyAmJiA4eHgKLQlzZWxlY3QgUENDQVJEX0lPRFlOCi0Jc2VsZWN0IFBDQ0FSRF9OT05TVEFUSUMKKwlkZXBlbmRzIG9uIFBDQ0FSRCAmJiBQUEMgJiYgOHh4CisJc2VsZWN0IFBDQ0FSRF9JT0RZTiBpZiBQQ01DSUEgIT0gbgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBQb3dlclBDIDh4eCBzZXJpZXMgUENNQ0lBCiAJICBjb250cm9sbGVyLgpAQCAtMTc0LDYgKzE3MywyNyBAQAogCXRyaXN0YXRlICJBdTF4MDAgcGNtY2lhIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTT0NfQVUxWDAwICYmIFBDTUNJQQogCitjb25maWcgUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQKKwl0cmlzdGF0ZSAiQWxjaGVteSBEYi9QYjF4eHggUENNQ0lBIHNvY2tldCBzZXJ2aWNlcyIKKwlkZXBlbmRzIG9uIFNPQ19BVTFYMDAgJiYgUENNQ0lBCisJc2VsZWN0IDY0QklUX1BIWVNfQUREUgorCWhlbHAKKwkgIEVuYWJsZSB0aGlzIGRyaXZlciBvZiB5b3Ugd2FudCBQQ01DSUEgc3VwcG9ydCBvbiB5b3VyIEFsY2hlbXkKKwkgIERiMTAwMCwgRGIvUGIxMTAwLCBEYi9QYjE1MDAsIERiL1BiMTU1MCwgRGIvUGIxMjAwIGJvYXJkLgorCSAgTk9UIHN1aXRhYmxlIGZvciB0aGUgUEIxMDAwIQorCisJICBUaGlzIGRyaXZlciBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSBjYWxsZWQgZGIxeHh4X3NzLmtvCisKK2NvbmZpZyBQQ01DSUFfWFhTMTUwMAorCXRyaXN0YXRlICJNeUNhYmxlIFhYUzE1MDAgUENNQ0lBIHNvY2tldCBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENNQ0lBICYmIE1JUFNfWFhTMTUwMAorCXNlbGVjdCA2NEJJVF9QSFlTX0FERFIKKwloZWxwCisJICBTdXBwb3J0IGZvciB0aGUgUENNQ0lBL0NGIHNvY2tldCBpbnRlcmZhY2Ugb24gTXlDYWJsZSBYWFMxNTAwCisJICBzeXN0ZW1zLgorCisJICBUaGlzIGRyaXZlciBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSBjYWxsZWQgeHhzMTUwMF9zcy5rbworCiBjb25maWcgUENNQ0lBX0JDTTYzWFgKIAl0cmlzdGF0ZSAiYmNtNjN4eCBwY21jaWEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEJDTTYzWFggJiYgUENNQ0lBCkBAIC0yMzgsMTQgKzI1OCwxMiBAQAogY29uZmlnIE0zMlJfUENDCiAJYm9vbCAiTTMyUiBQQ01DSUEgSS9GIgogCWRlcGVuZHMgb24gTTMyUiAmJiBDSElQX00zMjcwMCAmJiBQQ01DSUEKLQlzZWxlY3QgUENDQVJEX05PTlNUQVRJQwogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gdXNlIHRoZSBNMzJSIFBDTUNJQSBjb250cm9sbGVyLgogCiBjb25maWcgTTMyUl9DRkMKIAlib29sICJNMzJSIENGIEkvRiBDb250cm9sbGVyIgogCWRlcGVuZHMgb24gTTMyUiAmJiAoUExBVF9VU1JWIHx8IFBMQVRfTTMyNzAwVVQgfHwgUExBVF9NQVBQSTIgfHwgUExBVF9NQVBQSTMgfHwgUExBVF9PUFNQVVQpCi0Jc2VsZWN0IFBDQ0FSRF9OT05TVEFUSUMKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHVzZSB0aGUgTTMyUiBDb21wYWN0Rmxhc2ggY29udHJvbGxlci4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQppbmRleCA4M2ZmODAyLi4zODFiMDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQpAQCAtMiwxMSArMiwxMSBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIGtlcm5lbCBwY21jaWEgc3Vic3lzdGVtIChjL28gRGF2aWQgSGluZHMpCiAjCiAKLXBjbWNpYV9jb3JlLXkJCQkJCSs9IGNzLm8gY2lzdHBsLm8gcnNyY19tZ3IubyBzb2NrZXRfc3lzZnMubworcGNtY2lhX2NvcmUteQkJCQkJKz0gY3MubyByc3JjX21nci5vIHNvY2tldF9zeXNmcy5vCiBwY21jaWFfY29yZS0kKENPTkZJR19DQVJEQlVTKQkJCSs9IGNhcmRidXMubwogb2JqLSQoQ09ORklHX1BDQ0FSRCkJCQkJKz0gcGNtY2lhX2NvcmUubwogCi1wY21jaWEteQkJCQkJKz0gZHMubyBwY21jaWFfcmVzb3VyY2UubworcGNtY2lhLXkJCQkJCSs9IGRzLm8gcGNtY2lhX3Jlc291cmNlLm8gY2lzdHBsLm8KIHBjbWNpYS0kKENPTkZJR19QQ01DSUFfSU9DVEwpCQkJKz0gcGNtY2lhX2lvY3RsLm8KIG9iai0kKENPTkZJR19QQ01DSUEpCQkJCSs9IHBjbWNpYS5vCiAKQEAgLTM1LDE4ICszNSwxMCBAQAogb2JqLSQoQ09ORklHX0JGSU5fQ0ZQQ01DSUEpCQkJKz0gYmZpbl9jZl9wY21jaWEubwogb2JqLSQoQ09ORklHX0FUOTFfQ0YpCQkJCSs9IGF0OTFfY2Yubwogb2JqLSQoQ09ORklHX0VMRUNUUkFfQ0YpCQkJKz0gZWxlY3RyYV9jZi5vCitvYmotJChDT05GSUdfUENNQ0lBX0FMQ0hFTVlfREVWQk9BUkQpCQkrPSBkYjF4eHhfc3MubwogCiBhdTF4MDBfc3MteQkJCQkJKz0gYXUxMDAwX2dlbmVyaWMubwogYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfUEIxMDAwKQkJCSs9IGF1MTAwMF9wYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfUEIxMTAwKQkJCSs9IGF1MTAwMF9wYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfUEIxMjAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfUEIxNTAwKQkJCSs9IGF1MTAwMF9wYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxMDAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxMTAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxMjAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxNTAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxNTUwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfWFhTMTUwMCkJCSs9IGF1MTAwMF94eHMxNTAwLm8KIAogc2ExMTExX2NzLXkJCQkJCSs9IHNhMTExMV9nZW5lcmljLm8KIHNhMTExMV9jcy0kKENPTkZJR19BU1NBQkVUX05FUE9OU0VUKQkJKz0gc2ExMTAwX25lcG9uc2V0Lm8KQEAgLTc2LDMgKzY4LDUgQEAKIHB4YTJ4eC1vYmotJChDT05GSUdfTUFDSF9TVEFSR0FURTIpCQkrPSBweGEyeHhfc3RhcmdhdGUyLm8KIAogb2JqLSQoQ09ORklHX1BDTUNJQV9QWEEyWFgpCQkJKz0gcHhhMnh4X2Jhc2UubyAkKHB4YTJ4eC1vYmoteSkKKworb2JqLSQoQ09ORklHX1BDTUNJQV9YWFMxNTAwKQkJCSs9IHh4czE1MDBfc3MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jIGIvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCmluZGV4IGUxZGNjZWQuLjVkMjI4MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKQEAgLTUyLDggKzUyLDYgQEAKIAl1bnNpZ25lZCBsb25nCQlwaHlzX2Jhc2VhZGRyOwogfTsKIAotI2RlZmluZQlTWl8ySwkJCSgyICogU1pfMUspCi0KIHN0YXRpYyBpbmxpbmUgaW50IGF0OTFfY2ZfcHJlc2VudChzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQgKmNmKQogewogCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoY2YtPmJvYXJkLT5kZXRfcGluKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9kYjF4MDAuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9kYjF4MDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzc4ZDc3Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZGIxeDAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDUgKzAsMCBAQAotLyoKLSAqCi0gKiBBbGNoZW15IFNlbWkgRGIxeDAwIGJvYXJkcyBzcGVjaWZpYyBwY21jaWEgcm91dGluZXMuCi0gKgotICogQ29weXJpZ2h0IDIwMDIgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogQ29weXJpZ2h0IDIwMDQgUGV0ZSBQb3BvdiwgdXBkYXRlZCB0aGUgZHJpdmVyIHRvIDIuNi4KLSAqIEZvbGxvd2VkIHRoZSBzYTExeHggQVBJIGFuZCBsYXJnZWx5IGNvcGllZCBtYW55IG9mIHRoZSBoYXJkd2FyZQotICogaW5kZXBlbmRlbnQgZnVuY3Rpb25zLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTIwMCkKLQkjaW5jbHVkZSA8ZGIxMjAwLmg+Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTIwMCkKLQkjaW5jbHVkZSA8cGIxMjAwLmg+Ci0jZWxzZQotCSNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvZGIxeDAwLmg+Ci0Jc3RhdGljIEJDU1IgKiBjb25zdCBiY3NyID0gKEJDU1IgKilCQ1NSX0tTRUcxX0FERFI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgImF1MTAwMF9nZW5lcmljLmgiCi0KLSNpZiAwCi0jZGVmaW5lIGRlYnVnKHgsYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIHgsIF9fZnVuY19fICwgIyNhcmdzKQotI2Vsc2UKLSNkZWZpbmUgZGVidWcoeCxhcmdzLi4uKQotI2VuZGlmCi0KLQotc3RydWN0IGF1MTAwMF9wY21jaWFfc29ja2V0IGF1MTAwMF9wY21jaWFfc29ja2V0W1BDTUNJQV9OVU1fU09DS1NdOwotZXh0ZXJuIGludCBhdTF4MDBfcGNtY2lhX3NvY2tldF9wcm9iZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBwY21jaWFfbG93X2xldmVsICosIGludCwgaW50KTsKLQotc3RhdGljIGludCBkYjF4MDBfcGNtY2lhX2h3X2luaXQoc3RydWN0IGF1MTAwMF9wY21jaWFfc29ja2V0ICpza3QpCi17Ci0jaWZkZWYgQ09ORklHX01JUFNfREIxNTUwCi0Jc2t0LT5pcnEgPSBza3QtPm5yID8gQVUxMDAwX0dQSU9fNSA6IEFVMTAwMF9HUElPXzM7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTIwMCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19QQjEyMDApCi0Jc2t0LT5pcnEgPSBza3QtPm5yID8gQk9BUkRfUEMxX0lOVCA6IEJPQVJEX1BDMF9JTlQ7Ci0jZWxzZQotCXNrdC0+aXJxID0gc2t0LT5uciA/IEFVMTAwMF9HUElPXzUgOiBBVTEwMDBfR1BJT18yOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRiMXgwMF9wY21jaWFfc2h1dGRvd24oc3RydWN0IGF1MTAwMF9wY21jaWFfc29ja2V0ICpza3QpCi17Ci0JYmNzci0+cGNtY2lhID0gMDsgLyogdHVybiBvZmYgcG93ZXIgKi8KLQlhdV9zeW5jX2RlbGF5KDIpOwotfQotCi1zdGF0aWMgdm9pZAotZGIxeDAwX3BjbWNpYV9zb2NrZXRfc3RhdGUoc3RydWN0IGF1MTAwMF9wY21jaWFfc29ja2V0ICpza3QsIHN0cnVjdCBwY21jaWFfc3RhdGUgKnN0YXRlKQotewotCXUzMiBpbnNlcnRlZDsKLQl1bnNpZ25lZCBjaGFyIHZzOwotCi0Jc3RhdGUtPnJlYWR5ID0gMDsKLQlzdGF0ZS0+dnNfWHYgPSAwOwotCXN0YXRlLT52c18zdiA9IDA7Ci0Jc3RhdGUtPmRldGVjdCA9IDA7Ci0KLQlzd2l0Y2ggKHNrdC0+bnIpIHsKLQljYXNlIDA6Ci0JCXZzID0gYmNzci0+c3RhdHVzICYgMHgzOwotI2lmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMjAwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTIwMCkKLQkJaW5zZXJ0ZWQgPSBCT0FSRF9DQVJEX0lOU0VSVEVEKDApOwotI2Vsc2UKLQkJaW5zZXJ0ZWQgPSAhKGJjc3ItPnN0YXR1cyAmICgxPDw0KSk7Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQl2cyA9IChiY3NyLT5zdGF0dXMgJiAweEMpPj4yOwotI2lmIGRlZmluZWQoQ09ORklHX01JUFNfREIxMjAwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTIwMCkKLQkJaW5zZXJ0ZWQgPSBCT0FSRF9DQVJEX0lOU0VSVEVEKDEpOwotI2Vsc2UKLQkJaW5zZXJ0ZWQgPSAhKGJjc3ItPnN0YXR1cyAmICgxPDw1KSk7Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JZGVmYXVsdDovKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCi0JCXJldHVybjsKLQl9Ci0KLQlpZiAoaW5zZXJ0ZWQpCi0JCWRlYnVnKCJkYjF4MDAgc29ja2V0ICVkOiBpbnNlcnRlZCAlZCwgdnMgJWQgcGNtY2lhICV4XG4iLAotCQkJCXNrdC0+bnIsIGluc2VydGVkLCB2cywgYmNzci0+cGNtY2lhKTsKLQotCWlmIChpbnNlcnRlZCkgewotCQlzd2l0Y2ggKHZzKSB7Ci0JCQljYXNlIDA6Ci0JCQljYXNlIDI6Ci0JCQkJc3RhdGUtPnZzXzN2PTE7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDM6IC8qIDVWICovCi0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCS8qIHJldHVybiB3aXRob3V0IHNldHRpbmcgJ2RldGVjdCcgKi8KLQkJCQlwcmludGsoS0VSTl9FUlIgImRiMXgwMCBiYWQgVlMgKCVkKVxuIiwKLQkJCQkJCXZzKTsKLQkJfQotCQlzdGF0ZS0+ZGV0ZWN0ID0gMTsKLQkJc3RhdGUtPnJlYWR5ID0gMTsKLQl9Ci0JZWxzZSB7Ci0JCS8qIGlmIHRoZSBjYXJkIHdhcyBwcmV2aW91c2x5IGluc2VydGVkIGFuZCB0aGVuIGVqZWN0ZWQsCi0JCSAqIHdlIHNob3VsZCB0dXJuIG9mZiBwb3dlciB0byBpdAotCQkgKi8KLQkJaWYgKChza3QtPm5yID09IDApICYmIChiY3NyLT5wY21jaWEgJiBCQ1NSX1BDTUNJQV9QQzBSU1QpKSB7Ci0JCQliY3NyLT5wY21jaWEgJj0gfihCQ1NSX1BDTUNJQV9QQzBSU1QgfAotCQkJCQlCQ1NSX1BDTUNJQV9QQzBEUlZFTiB8Ci0JCQkJCUJDU1JfUENNQ0lBX1BDMFZQUCB8Ci0JCQkJCUJDU1JfUENNQ0lBX1BDMFZDQyk7Ci0JCQlhdV9zeW5jX2RlbGF5KDEwKTsKLQkJfQotCQllbHNlIGlmICgoc2t0LT5uciA9PSAxKSAmJiBiY3NyLT5wY21jaWEgJiBCQ1NSX1BDTUNJQV9QQzFSU1QpIHsKLQkJCWJjc3ItPnBjbWNpYSAmPSB+KEJDU1JfUENNQ0lBX1BDMVJTVCB8Ci0JCQkJCUJDU1JfUENNQ0lBX1BDMURSVkVOIHwKLQkJCQkJQkNTUl9QQ01DSUFfUEMxVlBQIHwKLQkJCQkJQkNTUl9QQ01DSUFfUEMxVkNDKTsKLQkJCWF1X3N5bmNfZGVsYXkoMTApOwotCQl9Ci0JfQotCi0Jc3RhdGUtPmJ2ZDE9MTsKLQlzdGF0ZS0+YnZkMj0xOwotCXN0YXRlLT53cnByb3Q9MDsKLX0KLQotc3RhdGljIGludAotZGIxeDAwX3BjbWNpYV9jb25maWd1cmVfc29ja2V0KHN0cnVjdCBhdTEwMDBfcGNtY2lhX3NvY2tldCAqc2t0LCBzdHJ1Y3Qgc29ja2V0X3N0YXRlX3QgKnN0YXRlKQotewotCXUxNiBwd3I7Ci0JaW50IHNvY2sgPSBza3QtPm5yOwotCi0JZGVidWcoImNvbmZpZ19za3QgJWQgVmNjICVkViBWcHAgJWRWLCByZXNldCAlZFxuIiwKLQkJCXNvY2ssIHN0YXRlLT5WY2MsIHN0YXRlLT5WcHAsCi0JCQlzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCk7Ci0KLQkvKiBwY21jaWEgcmVnIHdhcyBzZXQgdG8gemVybyBhdCBpbml0IHRpbWUuIEJlIGNhcmVmdWwgd2hlbgotCSAqIGluaXRpYWxpemluZyBhIHNvY2tldCBub3QgdG8gd2lwZSBvdXQgdGhlIHNldHRpbmdzIG9mIHRoZQotCSAqIG90aGVyIHNvY2tldC4KLQkgKi8KLQlwd3IgPSBiY3NyLT5wY21jaWE7Ci0JcHdyICY9IH4oMHhmIDw8IHNvY2sqOCk7IC8qIGNsZWFyIHZvbHRhZ2Ugc2V0dGluZ3MgKi8KLQotCXN0YXRlLT5WcHAgPSAwOwotCXN3aXRjaChzdGF0ZS0+VmNjKXsKLQkJY2FzZSAwOiAgLyogVmNjIDAgKi8KLQkJCXB3ciB8PSBTRVRfVkNDX1ZQUCgwLDAsc29jayk7Ci0JCQlicmVhazsKLQkJY2FzZSA1MDogLyogVmNjIDVWICovCi0JCQlzd2l0Y2goc3RhdGUtPlZwcCkgewotCQkJCWNhc2UgMDoKLQkJCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDIsMCxzb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA1MDoKLQkJCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDIsMSxzb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAxMjoKLQkJCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDIsMixzb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAzMzoKLQkJCQlkZWZhdWx0OgotCQkJCQlwd3IgfD0gU0VUX1ZDQ19WUFAoMCwwLHNvY2spOwotCQkJCQlwcmludGsoIiVzOiBiYWQgVmNjL1ZwcCAoJWQ6JWQpXG4iLAotCQkJCQkJCV9fZnVuY19fLAotCQkJCQkJCXN0YXRlLT5WY2MsCi0JCQkJCQkJc3RhdGUtPlZwcCk7Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgMzM6IC8qIFZjYyAzLjNWICovCi0JCQlzd2l0Y2goc3RhdGUtPlZwcCkgewotCQkJCWNhc2UgMDoKLQkJCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDEsMCxzb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAxMjoKLQkJCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDEsMixzb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAzMzoKLQkJCQkJcHdyIHw9IFNFVF9WQ0NfVlBQKDEsMSxzb2NrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA1MDoKLQkJCQlkZWZhdWx0OgotCQkJCQlwd3IgfD0gU0VUX1ZDQ19WUFAoMCwwLHNvY2spOwotCQkJCQlwcmludGsoIiVzOiBiYWQgVmNjL1ZwcCAoJWQ6JWQpXG4iLAotCQkJCQkJCV9fZnVuY19fLAotCQkJCQkJCXN0YXRlLT5WY2MsCi0JCQkJCQkJc3RhdGUtPlZwcCk7Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6IC8qIHdoYXQncyB0aGlzID8gKi8KLQkJCXB3ciB8PSBTRVRfVkNDX1ZQUCgwLDAsc29jayk7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBiYWQgVmNjICVkXG4iLAotCQkJCQlfX2Z1bmNfXywgc3RhdGUtPlZjYyk7Ci0JCQlicmVhazsKLQl9Ci0KLQliY3NyLT5wY21jaWEgPSBwd3I7Ci0JYXVfc3luY19kZWxheSgzMDApOwotCi0JaWYgKHNvY2sgPT0gMCkgewotCQlpZiAoIShzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkpIHsKLQkJCXB3ciB8PSBCQ1NSX1BDTUNJQV9QQzBEUlZFTjsKLQkJCWJjc3ItPnBjbWNpYSA9IHB3cjsKLQkJCWF1X3N5bmNfZGVsYXkoMzAwKTsKLQkJCXB3ciB8PSBCQ1NSX1BDTUNJQV9QQzBSU1Q7Ci0JCQliY3NyLT5wY21jaWEgPSBwd3I7Ci0JCQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwd3IgJj0gfihCQ1NSX1BDTUNJQV9QQzBSU1QgfCBCQ1NSX1BDTUNJQV9QQzBEUlZFTik7Ci0JCQliY3NyLT5wY21jaWEgPSBwd3I7Ci0JCQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0JCX0KLQl9Ci0JZWxzZSB7Ci0JCWlmICghKHN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKSkgewotCQkJcHdyIHw9IEJDU1JfUENNQ0lBX1BDMURSVkVOOwotCQkJYmNzci0+cGNtY2lhID0gcHdyOwotCQkJYXVfc3luY19kZWxheSgzMDApOwotCQkJcHdyIHw9IEJDU1JfUENNQ0lBX1BDMVJTVDsKLQkJCWJjc3ItPnBjbWNpYSA9IHB3cjsKLQkJCWF1X3N5bmNfZGVsYXkoMTAwKTsKLQkJfQotCQllbHNlIHsKLQkJCXB3ciAmPSB+KEJDU1JfUENNQ0lBX1BDMVJTVCB8IEJDU1JfUENNQ0lBX1BDMURSVkVOKTsKLQkJCWJjc3ItPnBjbWNpYSA9IHB3cjsKLQkJCWF1X3N5bmNfZGVsYXkoMTAwKTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEVuYWJsZSBjYXJkIHN0YXR1cyBJUlFzIG9uIChyZS0paW5pdGlhbGlzYXRpb24uICBUaGlzIGNhbgotICogYmUgY2FsbGVkIGF0IGluaXRpYWxpc2F0aW9uLCBwb3dlciBtYW5hZ2VtZW50IGV2ZW50LCBvcgotICogcGNtY2lhIGV2ZW50LgotICovCi12b2lkIGRiMXgwMF9zb2NrZXRfaW5pdChzdHJ1Y3QgYXUxMDAwX3BjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLQkvKiBub3RoaW5nIHRvIGRvIGZvciBub3cgKi8KLX0KLQotLyoKLSAqIERpc2FibGUgY2FyZCBzdGF0dXMgSVJRcyBhbmQgUENNQ0lBIGJ1cyBvbiBzdXNwZW5kLgotICovCi12b2lkIGRiMXgwMF9zb2NrZXRfc3VzcGVuZChzdHJ1Y3QgYXUxMDAwX3BjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLQkvKiBub3RoaW5nIHRvIGRvIGZvciBub3cgKi8KLX0KLQotc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgZGIxeDAwX3BjbWNpYV9vcHMgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQotCS5od19pbml0IAkJPSBkYjF4MDBfcGNtY2lhX2h3X2luaXQsCi0JLmh3X3NodXRkb3duCQk9IGRiMXgwMF9wY21jaWFfc2h1dGRvd24sCi0KLQkuc29ja2V0X3N0YXRlCQk9IGRiMXgwMF9wY21jaWFfc29ja2V0X3N0YXRlLAotCS5jb25maWd1cmVfc29ja2V0CT0gZGIxeDAwX3BjbWNpYV9jb25maWd1cmVfc29ja2V0LAotCi0JLnNvY2tldF9pbml0CQk9IGRiMXgwMF9zb2NrZXRfaW5pdCwKLQkuc29ja2V0X3N1c3BlbmQJCT0gZGIxeDAwX3NvY2tldF9zdXNwZW5kCi19OwotCi1pbnQgYXUxeF9ib2FyZF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgcmV0ID0gLUVOT0RFVjsKLQliY3NyLT5wY21jaWEgPSAwOyAvKiB0dXJuIG9mZiBwb3dlciwgaWYgaXQncyBub3QgYWxyZWFkeSBvZmYgKi8KLQlhdV9zeW5jX2RlbGF5KDIpOwotCXJldCA9IGF1MXgwMF9wY21jaWFfc29ja2V0X3Byb2JlKGRldiwgJmRiMXgwMF9wY21jaWFfb3BzLCAwLCAyKTsKLQlyZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKaW5kZXggMDIwODg3MC4uMTcxYzhhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCkBAIC00MDUsMTggKzQwNSwxNiBAQAogCQkJc2t0LT52aXJ0X2lvID0gKHZvaWQgKikKIAkJCQkoaW9yZW1hcCgocGh5c190KUFVMVhfU09DSzBfSU8sIDB4MTAwMCkgLQogCQkJCSh1MzIpbWlwc19pb19wb3J0X2Jhc2UpOwotCQkJc2t0LT5waHlzX2F0dHIgPSBBVTFYX1NPQ0swX1BTRVVET19QSFlTX0FUVFI7Ci0JCQlza3QtPnBoeXNfbWVtID0gQVUxWF9TT0NLMF9QU0VVRE9fUEhZU19NRU07CisJCQlza3QtPnBoeXNfYXR0ciA9IEFVMVhfU09DSzBfUEhZU19BVFRSOworCQkJc2t0LT5waHlzX21lbSA9IEFVMVhfU09DSzBfUEhZU19NRU07CiAJCX0KLSNpZm5kZWYgQ09ORklHX01JUFNfWFhTMTUwMAogCQllbHNlICB7CiAJCQlza3QtPnZpcnRfaW8gPSAodm9pZCAqKQogCQkJCShpb3JlbWFwKChwaHlzX3QpQVUxWF9TT0NLMV9JTywgMHgxMDAwKSAtCiAJCQkJKHUzMiltaXBzX2lvX3BvcnRfYmFzZSk7Ci0JCQlza3QtPnBoeXNfYXR0ciA9IEFVMVhfU09DSzFfUFNFVURPX1BIWVNfQVRUUjsKLQkJCXNrdC0+cGh5c19tZW0gPSBBVTFYX1NPQ0sxX1BTRVVET19QSFlTX01FTTsKKwkJCXNrdC0+cGh5c19hdHRyID0gQVUxWF9TT0NLMV9QSFlTX0FUVFI7CisJCQlza3QtPnBoeXNfbWVtID0gQVUxWF9TT0NLMV9QSFlTX01FTTsKIAkJfQotI2VuZGlmCiAJCXBjbWNpYV9iYXNlX3ZhZGRyc1tpXSA9ICh1MzIgKilza3QtPnZpcnRfaW87CiAJCXJldCA9IG9wcy0+aHdfaW5pdChza3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuaAppbmRleCAxM2E0ZmJjLi5hMzI0ZDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmgKQEAgLTM2LDMwICszNiwxNCBAQAogI2RlZmluZSBBVTFYX1NPQ0swX0lPICAgICAgICAweEYwMDAwMDAwMFVMTAogI2RlZmluZSBBVTFYX1NPQ0swX1BIWVNfQVRUUiAweEY0MDAwMDAwMFVMTAogI2RlZmluZSBBVTFYX1NPQ0swX1BIWVNfTUVNICAweEY4MDAwMDAwMFVMTAotLyogcHNldWRvIDMyIGJpdCBwaHlzIGFkZHJlc3Nlcywgd2hpY2ggZ2V0IGZpeGVkIHVwIHRvIHRoZQotICogcmVhbCAzNiBiaXQgYWRkcmVzcyBpbiBmaXh1cF9iaWdwaHlzX2FkZHIoKSAqLwotI2RlZmluZSBBVTFYX1NPQ0swX1BTRVVET19QSFlTX0FUVFIgMHhGNDAwMDAwMAotI2RlZmluZSBBVTFYX1NPQ0swX1BTRVVET19QSFlTX01FTSAgMHhGODAwMDAwMAogCiAvKiBwY21jaWEgc29ja2V0IDEgbmVlZHMgZXh0ZXJuYWwgZ2x1ZSBsb2dpYyBzbyB0aGUgbWVtb3J5IG1hcAogICogZGlmZmVycyBmcm9tIGJvYXJkIHRvIGJvYXJkLgogICovCi0jaWYgZGVmaW5lZChDT05GSUdfTUlQU19QQjEwMDApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfUEIxMTAwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfTUlQU19QQjE1MDApIHx8IGRlZmluZWQoQ09ORklHX01JUFNfUEIxNTUwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfTUlQU19QQjEyMDApCisjaWYgZGVmaW5lZChDT05GSUdfTUlQU19QQjEwMDApCiAjZGVmaW5lIEFVMVhfU09DSzFfSU8gICAgICAgIDB4RjA4MDAwMDAwVUxMCiAjZGVmaW5lIEFVMVhfU09DSzFfUEhZU19BVFRSIDB4RjQ4MDAwMDAwVUxMCiAjZGVmaW5lIEFVMVhfU09DSzFfUEhZU19NRU0gIDB4Rjg4MDAwMDAwVUxMCi0jZGVmaW5lIEFVMVhfU09DSzFfUFNFVURPX1BIWVNfQVRUUiAweEY0ODAwMDAwCi0jZGVmaW5lIEFVMVhfU09DSzFfUFNFVURPX1BIWVNfTUVNICAweEY4ODAwMDAwCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTAwMCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19EQjExMDApIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX01JUFNfREIxNTAwKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX0RCMTU1MCkgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfTUlQU19EQjEyMDApCi0jZGVmaW5lIEFVMVhfU09DSzFfSU8gICAgICAgIDB4RjA0MDAwMDAwVUxMCi0jZGVmaW5lIEFVMVhfU09DSzFfUEhZU19BVFRSIDB4RjQ0MDAwMDAwVUxMCi0jZGVmaW5lIEFVMVhfU09DSzFfUEhZU19NRU0gIDB4Rjg0MDAwMDAwVUxMCi0jZGVmaW5lIEFVMVhfU09DSzFfUFNFVURPX1BIWVNfQVRUUiAweEY0NDAwMDAwCi0jZGVmaW5lIEFVMVhfU09DSzFfUFNFVURPX1BIWVNfTUVNICAweEY4NDAwMDAwCiAjZW5kaWYKIAogc3RydWN0IHBjbWNpYV9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMKaW5kZXggYjE5ODRlZC4uNWE5NzljYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX3BiMXgwMC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKgotICogQWxjaGVteSBTZW1pIFBiMXgwMCBib2FyZHMgc3BlY2lmaWMgcGNtY2lhIHJvdXRpbmVzLgorICogQWxjaGVteSBTZW1pIFBiMTAwMCBib2FyZHMgc3BlY2lmaWMgcGNtY2lhIHJvdXRpbmVzLgogICoKICAqIENvcHlyaWdodCAyMDAyIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgogICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCkBAIC00NiwyMCArNDYsMTEgQEAKIAogI2RlZmluZSBkZWJ1ZyhmbXQsIGFyZy4uLikgZG8geyB9IHdoaWxlICgwKQogCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxMDAwCiAjaW5jbHVkZSA8YXNtL3BiMTAwMC5oPgogI2RlZmluZSBQQ01DSUFfSVJRIEFVMTAwMF9HUElPXzE1Ci0jZWxpZiBkZWZpbmVkIChDT05GSUdfTUlQU19QQjE1MDApCi0jaW5jbHVkZSA8YXNtL3BiMTUwMC5oPgotI2RlZmluZSBQQ01DSUFfSVJRIEFVMTUwMF9HUElPXzIwMwotI2VsaWYgZGVmaW5lZCAoQ09ORklHX01JUFNfUEIxMTAwKQotI2luY2x1ZGUgPGFzbS9wYjExMDAuaD4KLSNkZWZpbmUgUENNQ0lBX0lSUSBBVTEwMDBfR1BJT18xMQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgcGIxeDAwX3BjbWNpYV9pbml0KHN0cnVjdCBwY21jaWFfaW5pdCAqaW5pdCkKIHsKLSNpZmRlZiBDT05GSUdfTUlQU19QQjEwMDAKIAl1MTYgcGNyOwogCXBjciA9IFBDUl9TTE9UXzBfUlNUIHwgUENSX1NMT1RfMV9SU1Q7CiAKQEAgLTc0LDIxICs2NSwxMCBAQAogCWF1X3N5bmNfZGVsYXkoMjApOwogCSAgCiAJcmV0dXJuIFBDTUNJQV9OVU1fU09DS1M7Ci0KLSNlbHNlIC8qIGZpeG1lIC0tIHRha2UgY2FyZSBvZiB0aGUgUGIxNTAwIGF0IHNvbWUgcG9pbnQgKi8KLQotCXUxNiBwY3I7Ci0JcGNyID0gYXVfcmVhZHcoUENNQ0lBX0JPQVJEX1JFRykgJiB+MHhmOyAvKiB0dXJuIG9mZiBwb3dlciAqLwotCXBjciAmPSB+KFBDX0RFQVNTRVJUX1JTVCB8IFBDX0RSVl9FTik7Ci0JYXVfd3JpdGV3KHBjciwgUENNQ0lBX0JPQVJEX1JFRyk7Ci0JYXVfc3luY19kZWxheSg1MDApOwotCXJldHVybiBQQ01DSUFfTlVNX1NPQ0tTOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgcGIxeDAwX3BjbWNpYV9zaHV0ZG93bih2b2lkKQogewotI2lmZGVmIENPTkZJR19NSVBTX1BCMTAwMAogCXUxNiBwY3I7CiAJcGNyID0gUENSX1NMT1RfMF9SU1QgfCBQQ1JfU0xPVF8xX1JTVDsKIAlwY3IgfD0gU0VUX1ZDQ19WUFAoVkNDX0hJWixWUFBfSElaLDApOwpAQCAtOTYsMTQgKzc2LDYgQEAKIAlhdV93cml0ZWwocGNyLCBQQjEwMDBfUENSKTsKIAlhdV9zeW5jX2RlbGF5KDIwKTsKIAlyZXR1cm4gMDsKLSNlbHNlCi0JdTE2IHBjcjsKLQlwY3IgPSBhdV9yZWFkdyhQQ01DSUFfQk9BUkRfUkVHKSAmIH4weGY7IC8qIHR1cm4gb2ZmIHBvd2VyICovCi0JcGNyICY9IH4oUENfREVBU1NFUlRfUlNUIHwgUENfRFJWX0VOKTsKLQlhdV93cml0ZXcocGNyLCBQQ01DSUFfQk9BUkRfUkVHKTsKLQlhdV9zeW5jX2RlbGF5KDIpOwotCXJldHVybiAwOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgCkBAIC0xMTIsMjEgKzg0LDExIEBACiAJdTMyIGluc2VydGVkMCwgaW5zZXJ0ZWQxOwogCXUxNiB2czAsIHZzMTsKIAotI2lmZGVmIENPTkZJR19NSVBTX1BCMTAwMAogCXZzMCA9IHZzMSA9ICh1MTYpYXVfcmVhZGwoUEIxMDAwX0FDUjEpOwogCWluc2VydGVkMCA9ICEodnMwICYgKEFDUjFfU0xPVF8wX0NEMSB8IEFDUjFfU0xPVF8wX0NEMikpOwogCWluc2VydGVkMSA9ICEodnMxICYgKEFDUjFfU0xPVF8xX0NEMSB8IEFDUjFfU0xPVF8xX0NEMikpOwogCXZzMCA9ICh2czAgPj4gNCkgJiAweDM7CiAJdnMxID0gKHZzMSA+PiAxMikgJiAweDM7Ci0jZWxzZQotCXZzMCA9IChhdV9yZWFkdyhCT0FSRF9TVEFUVVNfUkVHKSA+PiA0KSAmIDB4MzsKLSNpZmRlZiBDT05GSUdfTUlQU19QQjE1MDAKLQlpbnNlcnRlZDAgPSAhKChhdV9yZWFkbChHUElPMl9QSU5TVEFURSkgPj4gMSkgJiAweDEpOyAvKiBncGlvIDIwMSAqLwotI2Vsc2UgLyogUGIxMTAwICovCi0JaW5zZXJ0ZWQwID0gISgoYXVfcmVhZGwoU1lTX1BJTlNUQVRFUkQpID4+IDkpICYgMHgxKTsgLyogZ3BpbyA5ICovCi0jZW5kaWYKLQlpbnNlcnRlZDEgPSAwOwotI2VuZGlmCiAKIAlzdGF0ZS0+cmVhZHkgPSAwOwogCXN0YXRlLT52c19YdiA9IDA7CkBAIC0yMDMsNyArMTY1LDYgQEAKIAogCWlmKGNvbmZpZ3VyZS0+c29jayA+IFBDTUNJQV9NQVhfU09DSykgcmV0dXJuIC0xOwogCi0jaWZkZWYgQ09ORklHX01JUFNfUEIxMDAwCiAJcGNyID0gYXVfcmVhZGwoUEIxMDAwX1BDUik7CiAKIAlpZiAoY29uZmlndXJlLT5zb2NrID09IDApIHsKQEAgLTMyMyw4NCArMjg0LDYgQEAKIAlhdV93cml0ZWwocGNyLCBQQjEwMDBfUENSKTsKIAlhdV9zeW5jX2RlbGF5KDMwMCk7CiAKLSNlbHNlCi0KLQlwY3IgPSBhdV9yZWFkdyhQQ01DSUFfQk9BUkRfUkVHKSAmIH4weGY7Ci0KLQlkZWJ1ZygiVmNjICVkViBWcHAgJWRWLCBwY3IgJXgsIHJlc2V0ICVkXG4iLCAKLQkJCWNvbmZpZ3VyZS0+dmNjLCBjb25maWd1cmUtPnZwcCwgcGNyLCBjb25maWd1cmUtPnJlc2V0KTsKLQotCi0Jc3dpdGNoKGNvbmZpZ3VyZS0+dmNjKXsKLQkJY2FzZSAwOiAgLyogVmNjIDAgKi8KLQkJCXBjciB8PSBTRVRfVkNDX1ZQUCgwLDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgNTA6IC8qIFZjYyA1ViAqLwotCQkJc3dpdGNoKGNvbmZpZ3VyZS0+dnBwKSB7Ci0JCQkJY2FzZSAwOgotCQkJCQlwY3IgfD0gU0VUX1ZDQ19WUFAoMiwwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA1MDoKLQkJCQkJcGNyIHw9IFNFVF9WQ0NfVlBQKDIsMSk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMTI6Ci0JCQkJCXBjciB8PSBTRVRfVkNDX1ZQUCgyLDIpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDMzOgotCQkJCWRlZmF1bHQ6Ci0JCQkJCXBjciB8PSBTRVRfVkNDX1ZQUCgwLDApOwotCQkJCQlwcmludGsoIiVzOiBiYWQgVmNjL1ZwcCAoJWQ6JWQpXG4iLCAKLQkJCQkJCQlfX2Z1bmNfXywKLQkJCQkJCQljb25maWd1cmUtPnZjYywgCi0JCQkJCQkJY29uZmlndXJlLT52cHApOwotCQkJCQlicmVhazsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIDMzOiAvKiBWY2MgMy4zViAqLwotCQkJc3dpdGNoKGNvbmZpZ3VyZS0+dnBwKSB7Ci0JCQkJY2FzZSAwOgotCQkJCQlwY3IgfD0gU0VUX1ZDQ19WUFAoMSwwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAxMjoKLQkJCQkJcGNyIHw9IFNFVF9WQ0NfVlBQKDEsMik7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMzM6Ci0JCQkJCXBjciB8PSBTRVRfVkNDX1ZQUCgxLDEpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDUwOgotCQkJCWRlZmF1bHQ6Ci0JCQkJCXBjciB8PSBTRVRfVkNDX1ZQUCgwLDApOwotCQkJCQlwcmludGsoIiVzOiBiYWQgVmNjL1ZwcCAoJWQ6JWQpXG4iLCAKLQkJCQkJCQlfX2Z1bmNfXywKLQkJCQkJCQljb25maWd1cmUtPnZjYywgCi0JCQkJCQkJY29uZmlndXJlLT52cHApOwotCQkJCQlicmVhazsKLQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OiAvKiB3aGF0J3MgdGhpcyA/ICovCi0JCQlwY3IgfD0gU0VUX1ZDQ19WUFAoMCwwKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJhZCBWY2MgJWRcbiIsIAotCQkJCQlfX2Z1bmNfXywgY29uZmlndXJlLT52Y2MpOwotCQkJYnJlYWs7Ci0JfQotCi0JYXVfd3JpdGV3KHBjciwgUENNQ0lBX0JPQVJEX1JFRyk7Ci0JYXVfc3luY19kZWxheSgzMDApOwotCi0JaWYgKCFjb25maWd1cmUtPnJlc2V0KSB7Ci0JCXBjciB8PSBQQ19EUlZfRU47Ci0JCWF1X3dyaXRldyhwY3IsIFBDTUNJQV9CT0FSRF9SRUcpOwotCQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0JCXBjciB8PSBQQ19ERUFTU0VSVF9SU1Q7Ci0JCWF1X3dyaXRldyhwY3IsIFBDTUNJQV9CT0FSRF9SRUcpOwotCQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0JfQotCWVsc2UgewotCQlwY3IgJj0gfihQQ19ERUFTU0VSVF9SU1QgfCBQQ19EUlZfRU4pOwotCQlhdV93cml0ZXcocGNyLCBQQ01DSUFfQk9BUkRfUkVHKTsKLQkJYXVfc3luY19kZWxheSgxMDApOwotCX0KLSNlbmRpZgogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfeHhzMTUwMC5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX3h4czE1MDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQzZDQ3Yi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfeHhzMTUwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLS8qCi0gKgotICogTXlDYWJsZSBib2FyZCBzcGVjaWZpYyBwY21jaWEgcm91dGluZXMuCi0gKgotICogQ29weXJpZ2h0IDIwMDMgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IFBldGUgUG9wb3YsIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KLSNpbmNsdWRlIDxwY21jaWEvYnVzX29wcy5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLQotI2luY2x1ZGUgPGFzbS9hdTEwMDAuaD4KLSNpbmNsdWRlIDxhc20vYXUxMDAwX3BjbWNpYS5oPgotCi0jZGVmaW5lIFBDTUNJQV9NQVhfU09DSwkJMAotI2RlZmluZSBQQ01DSUFfTlVNX1NPQ0tTCShQQ01DSUFfTUFYX1NPQ0sgKyAxKQotI2RlZmluZSBQQ01DSUFfSVJRCQlBVTEwMDBfR1BJT180Ci0KLSNpZiAwCi0jZGVmaW5lIERFQlVHKHgsIGFyZ3MuLi4pCXByaW50ayhfX2Z1bmNfXyAiOiAiIHgsICMjYXJncykKLSNlbHNlCi0jZGVmaW5lIERFQlVHKHgsYXJncy4uLikKLSNlbmRpZgotCi1zdGF0aWMgaW50IHh4czE1MDBfcGNtY2lhX2luaXQoc3RydWN0IHBjbWNpYV9pbml0ICppbml0KQotewotCXJldHVybiBQQ01DSUFfTlVNX1NPQ0tTOwotfQotCi1zdGF0aWMgaW50IHh4czE1MDBfcGNtY2lhX3NodXRkb3duKHZvaWQpCi17Ci0JLyogdHVybiBvZmYgcG93ZXIgKi8KLQlhdV93cml0ZWwoYXVfcmVhZGwoR1BJTzJfUElOU1RBVEUpIHwgKDE8PDE0KXwoMTw8MzApLAotCQkJR1BJTzJfT1VUUFVUKTsKLQlhdV9zeW5jX2RlbGF5KDEwMCk7Ci0KLQkvKiBhc3NlcnQgcmVzZXQgKi8KLQlhdV93cml0ZWwoYXVfcmVhZGwoR1BJTzJfUElOU1RBVEUpIHwgKDE8PDQpfCgxPDwyMCksCi0JCQlHUElPMl9PVVRQVVQpOwotCWF1X3N5bmNfZGVsYXkoMTAwKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50Ci14eHMxNTAwX3BjbWNpYV9zb2NrZXRfc3RhdGUodW5zaWduZWQgc29jaywgc3RydWN0IHBjbWNpYV9zdGF0ZSAqc3RhdGUpCi17Ci0JdTMyIGluc2VydGVkOyB1MzIgdnM7Ci0JdW5zaWduZWQgbG9uZyBncGlvLCBncGlvMjsKLQotCWlmKHNvY2sgPiBQQ01DSUFfTUFYX1NPQ0spIHJldHVybiAtMTsKLQotCWdwaW8gPSBhdV9yZWFkbChTWVNfUElOU1RBVEVSRCk7Ci0JZ3BpbzIgPSBhdV9yZWFkbChHUElPMl9QSU5TVEFURSk7Ci0KLQl2cyA9IGdwaW8yICYgKCgxPDw4KSB8ICgxPDw5KSk7Ci0JaW5zZXJ0ZWQgPSAoIShncGlvICYgMHgxKSAmJiAhKGdwaW8gJiAweDIpKTsKLQotCXN0YXRlLT5yZWFkeSA9IDA7Ci0Jc3RhdGUtPnZzX1h2ID0gMDsKLQlzdGF0ZS0+dnNfM3YgPSAwOwotCXN0YXRlLT5kZXRlY3QgPSAwOwotCi0JaWYgKGluc2VydGVkKSB7Ci0JCXN3aXRjaCAodnMpIHsKLQkJCWNhc2UgMDoKLQkJCWNhc2UgMToKLQkJCWNhc2UgMjoKLQkJCQlzdGF0ZS0+dnNfM3Y9MTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMzogLyogNVYgKi8KLQkJCWRlZmF1bHQ6Ci0JCQkJLyogcmV0dXJuIHdpdGhvdXQgc2V0dGluZyAnZGV0ZWN0JyAqLwotCQkJCXByaW50ayhLRVJOX0VSUiAiYXUxeDAwX2NzOiB1bnN1cHBvcnRlZCBWU1xuIiwKLQkJCQkJCXZzKTsKLQkJCQlyZXR1cm47Ci0JCX0KLQkJc3RhdGUtPmRldGVjdCA9IDE7Ci0JfQotCi0JaWYgKHN0YXRlLT5kZXRlY3QpIHsKLQkJc3RhdGUtPnJlYWR5ID0gMTsKLQl9Ci0KLQlzdGF0ZS0+YnZkMT0gZ3BpbzIgJiAoMTw8MTApOwotCXN0YXRlLT5idmQyID0gZ3BpbzIgJiAoMTw8MTEpOwotCXN0YXRlLT53cnByb3Q9MDsKLQlyZXR1cm4gMTsKLX0KLQotCi1zdGF0aWMgaW50IHh4czE1MDBfcGNtY2lhX2dldF9pcnFfaW5mbyhzdHJ1Y3QgcGNtY2lhX2lycV9pbmZvICppbmZvKQotewotCi0JaWYoaW5mby0+c29jayA+IFBDTUNJQV9NQVhfU09DSykgcmV0dXJuIC0xOwotCWluZm8tPmlycSA9IFBDTUNJQV9JUlE7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludAoteHhzMTUwMF9wY21jaWFfY29uZmlndXJlX3NvY2tldChjb25zdCBzdHJ1Y3QgcGNtY2lhX2NvbmZpZ3VyZSAqY29uZmlndXJlKQotewotCi0JaWYoY29uZmlndXJlLT5zb2NrID4gUENNQ0lBX01BWF9TT0NLKSByZXR1cm4gLTE7Ci0KLQlERUJVRygiVmNjICVkViBWcHAgJWRWLCByZXNldCAlZFxuIiwKLQkJCWNvbmZpZ3VyZS0+dmNjLCBjb25maWd1cmUtPnZwcCwgY29uZmlndXJlLT5yZXNldCk7Ci0KLQlzd2l0Y2goY29uZmlndXJlLT52Y2MpewotCQljYXNlIDMzOiAvKiBWY2MgMy4zViAqLwotCQkJLyogdHVybiBvbiBwb3dlciAqLwotCQkJREVCVUcoInR1cm4gb24gcG93ZXJcbiIpOwotCQkJYXVfd3JpdGVsKChhdV9yZWFkbChHUElPMl9QSU5TVEFURSkgJiB+KDE8PDE0KSl8KDE8PDMwKSwKLQkJCQkJR1BJTzJfT1VUUFVUKTsKLQkJCWF1X3N5bmNfZGVsYXkoMTAwKTsKLQkJCWJyZWFrOwotCQljYXNlIDUwOiAvKiBWY2MgNVYgKi8KLQkJZGVmYXVsdDogLyogd2hhdCdzIHRoaXMgPyAqLwotCQkJcHJpbnRrKEtFUk5fRVJSICJhdTF4MDBfY3M6IHVuc3VwcG9ydGVkIFZDQ1xuIik7Ci0JCWNhc2UgMDogIC8qIFZjYyAwICovCi0JCQkvKiB0dXJuIG9mZiBwb3dlciAqLwotCQkJYXVfc3luY19kZWxheSgxMDApOwotCQkJYXVfd3JpdGVsKGF1X3JlYWRsKEdQSU8yX1BJTlNUQVRFKSB8ICgxPDwxNCl8KDE8PDMwKSwKLQkJCQkJR1BJTzJfT1VUUFVUKTsKLQkJCWJyZWFrOwotCX0KLQotCWlmICghY29uZmlndXJlLT5yZXNldCkgewotCQlERUJVRygiZGVhc3NlcnQgcmVzZXRcbiIpOwotCQlhdV93cml0ZWwoKGF1X3JlYWRsKEdQSU8yX1BJTlNUQVRFKSAmIH4oMTw8NCkpfCgxPDwyMCksCi0JCQkJR1BJTzJfT1VUUFVUKTsKLQkJYXVfc3luY19kZWxheSgxMDApOwotCQlhdV93cml0ZWwoKGF1X3JlYWRsKEdQSU8yX1BJTlNUQVRFKSAmIH4oMTw8NSkpfCgxPDwyMSksCi0JCQkJR1BJTzJfT1VUUFVUKTsKLQl9Ci0JZWxzZSB7Ci0JCURFQlVHKCJhc3NlcnQgcmVzZXRcbiIpOwotCQlhdV93cml0ZWwoYXVfcmVhZGwoR1BJTzJfUElOU1RBVEUpIHwgKDE8PDQpfCgxPDwyMCksCi0JCQkJR1BJTzJfT1VUUFVUKTsKLQl9Ci0JYXVfc3luY19kZWxheSgxMDApOwotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCB4eHMxNTAwX3BjbWNpYV9vcHMgPSB7Ci0JeHhzMTUwMF9wY21jaWFfaW5pdCwKLQl4eHMxNTAwX3BjbWNpYV9zaHV0ZG93biwKLQl4eHMxNTAwX3BjbWNpYV9zb2NrZXRfc3RhdGUsCi0JeHhzMTUwMF9wY21jaWFfZ2V0X2lycV9pbmZvLAotCXh4czE1MDBfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9iZmluX2NmX3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvYmZpbl9jZl9wY21jaWEuYwppbmRleCAzMDBiMzY4Li4yNDgyY2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9iZmluX2NmX3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2JmaW5fY2ZfcGNtY2lhLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJCbGFja2ZpbiBDb21wYWN0Rmxhc2gvUENNQ0lBIFNvY2tldCBEcml2ZXJcbiIpOwogCiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoIWlycSkKKwlpZiAoaXJxIDw9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJY2RfcGZ4ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsJLypDYXJkIERldGVjdCBHUElPIFBJTiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jIGIvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jCmluZGV4IGQ5OWY4NDYuLmFjMDY4NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMKQEAgLTIwLDE3MCArMjAsMTIgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KLSNpbmNsdWRlICJjc19pbnRlcm5hbC5oIgogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotLyogT2Zmc2V0cyBpbiB0aGUgRXhwYW5zaW9uIFJPTSBJbWFnZSBIZWFkZXIgKi8KLSNkZWZpbmUgUk9NX1NJR05BVFVSRQkJMHgwMDAwCS8qIDIgYnl0ZXMgKi8KLSNkZWZpbmUgUk9NX0RBVEFfUFRSCQkweDAwMTgJLyogMiBieXRlcyAqLwotCi0vKiBPZmZzZXRzIGluIHRoZSBDYXJkQnVzIFBDIENhcmQgRGF0YSBTdHJ1Y3R1cmUgKi8KLSNkZWZpbmUgUENEQVRBX1NJR05BVFVSRQkweDAwMDAJLyogNCBieXRlcyAqLwotI2RlZmluZSBQQ0RBVEFfVlBEX1BUUgkJMHgwMDA4CS8qIDIgYnl0ZXMgKi8KLSNkZWZpbmUgUENEQVRBX0xFTkdUSAkJMHgwMDBhCS8qIDIgYnl0ZXMgKi8KLSNkZWZpbmUgUENEQVRBX1JFVklTSU9OCQkweDAwMGMKLSNkZWZpbmUgUENEQVRBX0lNQUdFX1NaCQkweDAwMTAJLyogMiBieXRlcyAqLwotI2RlZmluZSBQQ0RBVEFfUk9NX0xFVkVMCTB4MDAxMgkvKiAyIGJ5dGVzICovCi0jZGVmaW5lIFBDREFUQV9DT0RFX1RZUEUJMHgwMDE0Ci0jZGVmaW5lIFBDREFUQV9JTkRJQ0FUT1IJMHgwMDE1Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBFeHBhbnNpb24gUk9NJ3MgaGF2ZSBhIHNwZWNpYWwgbGF5b3V0LCBhbmQgcG9pbnRlcnMgc3BlY2lmeSBhbgotICAgIGltYWdlIG51bWJlciBhbmQgYW4gb2Zmc2V0IHdpdGhpbiB0aGF0IGltYWdlLiAgeGxhdGVfcm9tX2FkZHIoKQotICAgIGNvbnZlcnRzIGFuIGltYWdlL29mZnNldCBhZGRyZXNzIHRvIGFuIGFic29sdXRlIG9mZnNldCBmcm9tIHRoZQotICAgIFJPTSdzIGJhc2UgYWRkcmVzcy4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHVfaW50IHhsYXRlX3JvbV9hZGRyKHZvaWQgX19pb21lbSAqYiwgdV9pbnQgYWRkcikKLXsKLQl1X2ludCBpbWcgPSAwLCBvZnMgPSAwLCBzejsKLQl1X3Nob3J0IGRhdGE7Ci0Jd2hpbGUgKChyZWFkYihiKSA9PSAweDU1KSAmJiAocmVhZGIoYiArIDEpID09IDB4YWEpKSB7Ci0JCWlmIChpbWcgPT0gKGFkZHIgPj4gMjgpKQotCQkJcmV0dXJuIChhZGRyICYgMHgwZmZmZmZmZikgKyBvZnM7Ci0JCWRhdGEgPSByZWFkYihiICsgUk9NX0RBVEFfUFRSKSArIChyZWFkYihiICsgUk9NX0RBVEFfUFRSICsgMSkgPDwgOCk7Ci0JCXN6ID0gNTEyICogKHJlYWRiKGIgKyBkYXRhICsgUENEQVRBX0lNQUdFX1NaKSArCi0JCQkgICAgKHJlYWRiKGIgKyBkYXRhICsgUENEQVRBX0lNQUdFX1NaICsgMSkgPDwgOCkpOwotCQlpZiAoKHN6ID09IDApIHx8IChyZWFkYihiICsgZGF0YSArIFBDREFUQV9JTkRJQ0FUT1IpICYgMHg4MCkpCi0JCQlicmVhazsKLQkJYiArPSBzejsKLQkJb2ZzICs9IHN6OwotCQlpbWcrKzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBUaGVzZSBhcmUgc2ltaWxhciB0byBzZXR1cF9jaXNfbWVtIGFuZCByZWxlYXNlX2Npc19tZW0gZm9yIDE2LWJpdAotICAgIGNhcmRzLiAgVGhlICJyZXN1bHQiIHRoYXQgaXMgdXNlZCBleHRlcm5hbGx5IGlzIHRoZSBjYl9jaXNfdmlydAotICAgIHBvaW50ZXIgaW4gdGhlIHN0cnVjdCBwY21jaWFfc29ja2V0IHN0cnVjdHVyZS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHZvaWQgY2JfcmVsZWFzZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQotewotCWlmIChzLT5jYl9jaXNfdmlydCkgewotCQlkZXZfZGJnKCZzLT5kZXYsICJjYl9yZWxlYXNlX2Npc19tZW0oKVxuIik7Ci0JCWlvdW5tYXAocy0+Y2JfY2lzX3ZpcnQpOwotCQlzLT5jYl9jaXNfdmlydCA9IE5VTEw7Ci0JCXMtPmNiX2Npc19yZXMgPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIGludCBjYl9zZXR1cF9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKLXsKLQl1bnNpZ25lZCBpbnQgc3RhcnQsIHNpemU7Ci0KLQlpZiAocmVzID09IHMtPmNiX2Npc19yZXMpCi0JCXJldHVybiAwOwotCi0JaWYgKHMtPmNiX2Npc19yZXMpCi0JCWNiX3JlbGVhc2VfY2lzX21lbShzKTsKLQotCXN0YXJ0ID0gcmVzLT5zdGFydDsKLQlzaXplID0gcmVzLT5lbmQgLSBzdGFydCArIDE7Ci0Jcy0+Y2JfY2lzX3ZpcnQgPSBpb3JlbWFwKHN0YXJ0LCBzaXplKTsKLQotCWlmICghcy0+Y2JfY2lzX3ZpcnQpCi0JCXJldHVybiAtMTsKLQotCXMtPmNiX2Npc19yZXMgPSByZXM7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIFRoaXMgaXMgdXNlZCBieSB0aGUgQ0lTIHByb2Nlc3NpbmcgY29kZSB0byByZWFkIENJUyBpbmZvcm1hdGlvbgotICAgIGZyb20gYSBDYXJkQnVzIGRldmljZS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotaW50IHJlYWRfY2JfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgc3BhY2UsIHVfaW50IGFkZHIsIHVfaW50IGxlbiwKLQkJdm9pZCAqcHRyKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXY7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0KLQlkZXZfZGJnKCZzLT5kZXYsICJyZWFkX2NiX21lbSglZCwgJSN4LCAldSlcbiIsIHNwYWNlLCBhZGRyLCBsZW4pOwotCi0JZGV2ID0gcGNpX2dldF9zbG90KHMtPmNiX2Rldi0+c3Vib3JkaW5hdGUsIDApOwotCWlmICghZGV2KQotCQlnb3RvIGZhaWw7Ci0KLQkvKiBDb25maWcgc3BhY2U/ICovCi0JaWYgKHNwYWNlID09IDApIHsKLQkJaWYgKGFkZHIgKyBsZW4gPiAweDEwMCkKLQkJCWdvdG8gZmFpbHB1dDsKLQkJZm9yICg7IGxlbjsgYWRkcisrLCBwdHIrKywgbGVuLS0pCi0JCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIGFkZHIsIHB0cik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJlcyA9IGRldi0+cmVzb3VyY2UgKyBzcGFjZSAtIDE7Ci0KLQlwY2lfZGV2X3B1dChkZXYpOwotCi0JaWYgKCFyZXMtPmZsYWdzKQotCQlnb3RvIGZhaWw7Ci0KLQlpZiAoY2Jfc2V0dXBfY2lzX21lbShzLCByZXMpICE9IDApCi0JCWdvdG8gZmFpbDsKLQotCWlmIChzcGFjZSA9PSA3KSB7Ci0JCWFkZHIgPSB4bGF0ZV9yb21fYWRkcihzLT5jYl9jaXNfdmlydCwgYWRkcik7Ci0JCWlmIChhZGRyID09IDApCi0JCQlnb3RvIGZhaWw7Ci0JfQotCi0JaWYgKGFkZHIgKyBsZW4gPiByZXMtPmVuZCAtIHJlcy0+c3RhcnQpCi0JCWdvdG8gZmFpbDsKLQotCW1lbWNweV9mcm9taW8ocHRyLCBzLT5jYl9jaXNfdmlydCArIGFkZHIsIGxlbik7Ci0JcmV0dXJuIDA7Ci0KLWZhaWxwdXQ6Ci0JcGNpX2Rldl9wdXQoZGV2KTsKLWZhaWw6Ci0JbWVtc2V0KHB0ciwgMHhmZiwgbGVuKTsKLQlyZXR1cm4gLTE7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBjYl9hbGxvYygpIGFuZCBjYl9mcmVlKCkgYWxsb2NhdGUgYW5kIGZyZWUgdGhlIGtlcm5lbCBkYXRhCi0gICAgc3RydWN0dXJlcyBmb3IgYSBDYXJkYnVzIGRldmljZSwgYW5kIGhhbmRsZSB0aGUgbG93ZXN0IGxldmVsIFBDSQotICAgIGRldmljZSBzZXR1cCBpc3N1ZXMuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB2b2lkIGNhcmRidXNfY29uZmlnX2lycV9hbmRfY2xzKHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBpcnEpCiB7CkBAIC0yMTUsNiArNTcsMTMgQEAKIAl9CiB9CiAKKy8qKgorICogY2JfYWxsb2MoKSAtIGFkZCBDYXJkQnVzIGRldmljZQorICogQHM6CQl0aGUgcGNtY2lhX3NvY2tldCB3aGVyZSB0aGUgQ2FyZEJ1cyBkZXZpY2UgaXMgbG9jYXRlZAorICoKKyAqIGNiX2FsbG9jKCkgYWxsb2NhdGVzIHRoZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBhIENhcmRidXMgZGV2aWNlCisgKiBhbmQgaGFuZGxlcyB0aGUgbG93ZXN0IGxldmVsIFBDSSBkZXZpY2Ugc2V0dXAgaXNzdWVzLgorICovCiBpbnQgX19yZWYgY2JfYWxsb2Moc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7CiAJc3RydWN0IHBjaV9idXMgKmJ1cyA9IHMtPmNiX2Rldi0+c3Vib3JkaW5hdGU7CkBAIC0yNDksMTIgKzk4LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogY2JfZnJlZSgpIC0gcmVtb3ZlIENhcmRCdXMgZGV2aWNlCisgKiBAczoJCXRoZSBwY21jaWFfc29ja2V0IHdoZXJlIHRoZSBDYXJkQnVzIGRldmljZSB3YXMgbG9jYXRlZAorICoKKyAqIGNiX2ZyZWUoKSBoYW5kbGVzIHRoZSBsb3dlc3QgbGV2ZWwgUENJIGRldmljZSBjbGVhbnVwLgorICovCiB2b2lkIGNiX2ZyZWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IHMtPmNiX2RldjsKIAotCWNiX3JlbGVhc2VfY2lzX21lbShzKTsKLQogCWlmIChicmlkZ2UpCiAJCXBjaV9yZW1vdmVfYmVoaW5kX2JyaWRnZShicmlkZ2UpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY2lzdHBsLmMgYi9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYwppbmRleCAyNWIxY2QyLi4yZjM2MjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYwpAQCAtNjQsNiArNjQsNyBAQAogCiB2b2lkIHJlbGVhc2VfY2lzX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKKyAgICBtdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogICAgIGlmIChzLT5jaXNfbWVtLmZsYWdzICYgTUFQX0FDVElWRSkgewogCXMtPmNpc19tZW0uZmxhZ3MgJj0gfk1BUF9BQ1RJVkU7CiAJcy0+b3BzLT5zZXRfbWVtX21hcChzLCAmcy0+Y2lzX21lbSk7CkBAIC03NSwxMyArNzYsMTUgQEAKIAlpb3VubWFwKHMtPmNpc192aXJ0KTsKIAlzLT5jaXNfdmlydCA9IE5VTEw7CiAgICAgfQorICAgIG11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIH0KLUVYUE9SVF9TWU1CT0wocmVsZWFzZV9jaXNfbWVtKTsKIAogLyoKICAqIE1hcCB0aGUgY2FyZCBtZW1vcnkgYXQgImNhcmRfb2Zmc2V0IiBpbnRvIHZpcnR1YWwgc3BhY2UuCiAgKiBJZiBmbGFncyAmIE1BUF9BVFRSSUIsIG1hcCB0aGUgYXR0cmlidXRlIHNwYWNlLCBvdGhlcndpc2UKICAqIG1hcCB0aGUgbWVtb3J5IHNwYWNlLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggb3BzX211dGV4IGhlbGQuCiAgKi8KIHN0YXRpYyB2b2lkIF9faW9tZW0gKgogc2V0X2Npc19tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBjYXJkX29mZnNldCwgdW5zaWduZWQgaW50IGZsYWdzKQpAQCAtMTQwLDYgKzE0Myw3IEBACiAKICAgICBkZXZfZGJnKCZzLT5kZXYsICJwY21jaWFfcmVhZF9jaXNfbWVtKCVkLCAlI3gsICV1KVxuIiwgYXR0ciwgYWRkciwgbGVuKTsKIAorICAgIG11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAgICAgaWYgKGF0dHIgJiBJU19JTkRJUkVDVCkgewogCS8qIEluZGlyZWN0IGFjY2Vzc2VzIHVzZSBhIGJ1bmNoIG9mIHNwZWNpYWwgcmVnaXN0ZXJzIGF0IGZpeGVkCiAJICAgbG9jYXRpb25zIGluIGNvbW1vbiBtZW1vcnkgKi8KQEAgLTE1MSw3ICsxNTUsOSBAQAogCiAJc3lzID0gc2V0X2Npc19tYXAocywgMCwgTUFQX0FDVElWRSB8ICgoY2lzX3dpZHRoKSA/IE1BUF8xNkJJVCA6IDApKTsKIAlpZiAoIXN5cykgeworCSAgICBkZXZfZGJnKCZzLT5kZXYsICJjb3VsZCBub3QgbWFwIG1lbW9yeVxuIik7CiAJICAgIG1lbXNldChwdHIsIDB4ZmYsIGxlbik7CisJICAgIG11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkgICAgcmV0dXJuIC0xOwogCX0KIApAQCAtMTY1LDYgKzE3MSw5IEBACiAgICAgfSBlbHNlIHsKIAl1X2ludCBpbmMgPSAxLCBjYXJkX29mZnNldCwgZmxhZ3M7CiAKKwlpZiAoYWRkciA+IENJU1RQTF9NQVhfQ0lTX1NJWkUpCisJCWRldl9kYmcoJnMtPmRldiwgImF0dGVtcHQgdG8gcmVhZCBDSVMgbWVtIGF0IGFkZHIgJSN4IiwgYWRkcik7CisKIAlmbGFncyA9IE1BUF9BQ1RJVkUgfCAoKGNpc193aWR0aCkgPyBNQVBfMTZCSVQgOiAwKTsKIAlpZiAoYXR0cikgewogCSAgICBmbGFncyB8PSBNQVBfQVRUUklCOwpAQCAtMTc2LDcgKzE4NSw5IEBACiAJd2hpbGUgKGxlbikgewogCSAgICBzeXMgPSBzZXRfY2lzX21hcChzLCBjYXJkX29mZnNldCwgZmxhZ3MpOwogCSAgICBpZiAoIXN5cykgeworCQlkZXZfZGJnKCZzLT5kZXYsICJjb3VsZCBub3QgbWFwIG1lbW9yeVxuIik7CiAJCW1lbXNldChwdHIsIDB4ZmYsIGxlbik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC0xOwogCSAgICB9CiAJICAgIGVuZCA9IHN5cyArIHMtPm1hcF9zaXplOwpAQCAtMTkwLDEyICsyMDEsMTIgQEAKIAkgICAgYWRkciA9IDA7CiAJfQogICAgIH0KKyAgICBtdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAgICAgZGV2X2RiZygmcy0+ZGV2LCAiICAlIzIuMnggJSMyLjJ4ICUjMi4yeCAlIzIuMnggLi4uXG4iLAogCSAgKih1X2NoYXIgKikocHRyKzApLCAqKHVfY2hhciAqKShwdHIrMSksCiAJICAqKHVfY2hhciAqKShwdHIrMiksICoodV9jaGFyICopKHB0ciszKSk7CiAgICAgcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjbWNpYV9yZWFkX2Npc19tZW0pOwogCiAKIHZvaWQgcGNtY2lhX3dyaXRlX2Npc19tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBhdHRyLCB1X2ludCBhZGRyLApAQCAtMjA2LDYgKzIxNyw3IEBACiAKICAgICBkZXZfZGJnKCZzLT5kZXYsICJwY21jaWFfd3JpdGVfY2lzX21lbSglZCwgJSN4LCAldSlcbiIsIGF0dHIsIGFkZHIsIGxlbik7CiAKKyAgICBtdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogICAgIGlmIChhdHRyICYgSVNfSU5ESVJFQ1QpIHsKIAkvKiBJbmRpcmVjdCBhY2Nlc3NlcyB1c2UgYSBidW5jaCBvZiBzcGVjaWFsIHJlZ2lzdGVycyBhdCBmaXhlZAogCSAgIGxvY2F0aW9ucyBpbiBjb21tb24gbWVtb3J5ICovCkBAIC0yMTYsOCArMjI4LDExIEBACiAJfQogCiAJc3lzID0gc2V0X2Npc19tYXAocywgMCwgTUFQX0FDVElWRSB8ICgoY2lzX3dpZHRoKSA/IE1BUF8xNkJJVCA6IDApKTsKLQlpZiAoIXN5cykKKwlpZiAoIXN5cykgeworCQlkZXZfZGJnKCZzLT5kZXYsICJjb3VsZCBub3QgbWFwIG1lbW9yeVxuIik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuOyAvKiBGSVhNRTogRXJyb3IgKi8KKwl9CiAKIAl3cml0ZWIoZmxhZ3MsIHN5cytDSVNSRUdfSUNUUkwwKTsKIAl3cml0ZWIoYWRkciAmIDB4ZmYsIHN5cytDSVNSRUdfSUFERFIwKTsKQEAgLTIzOSw4ICsyNTQsMTEgQEAKIAljYXJkX29mZnNldCA9IGFkZHIgJiB+KHMtPm1hcF9zaXplLTEpOwogCXdoaWxlIChsZW4pIHsKIAkgICAgc3lzID0gc2V0X2Npc19tYXAocywgY2FyZF9vZmZzZXQsIGZsYWdzKTsKLQkgICAgaWYgKCFzeXMpCisJICAgIGlmICghc3lzKSB7CisJCWRldl9kYmcoJnMtPmRldiwgImNvdWxkIG5vdCBtYXAgbWVtb3J5XG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm47IC8qIEZJWE1FOiBlcnJvciAqLworCSAgICB9CiAKIAkgICAgZW5kID0gc3lzICsgcy0+bWFwX3NpemU7CiAJICAgIHN5cyA9IHN5cyArIChhZGRyICYgKHMtPm1hcF9zaXplLTEpKTsKQEAgLTI1Myw4ICsyNzEsOCBAQAogCSAgICBhZGRyID0gMDsKIAl9CiAgICAgfQorICAgIG11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIH0KLUVYUE9SVF9TWU1CT0wocGNtY2lhX3dyaXRlX2Npc19tZW0pOwogCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjY1LDMyICsyODMsMzYgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyB2b2lkIHJlYWRfY2lzX2NhY2hlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgYXR0ciwgdV9pbnQgYWRkciwKLQkJCSAgIHNpemVfdCBsZW4sIHZvaWQgKnB0cikKK3N0YXRpYyBpbnQgcmVhZF9jaXNfY2FjaGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBhdHRyLCB1X2ludCBhZGRyLAorCQkJc2l6ZV90IGxlbiwgdm9pZCAqcHRyKQogewotICAgIHN0cnVjdCBjaXNfY2FjaGVfZW50cnkgKmNpczsKLSAgICBpbnQgcmV0OworCXN0cnVjdCBjaXNfY2FjaGVfZW50cnkgKmNpczsKKwlpbnQgcmV0ID0gMDsKIAotICAgIGlmIChzLT5mYWtlX2NpcykgewotCWlmIChzLT5mYWtlX2Npc19sZW4gPj0gYWRkcitsZW4pCi0JICAgIG1lbWNweShwdHIsIHMtPmZha2VfY2lzK2FkZHIsIGxlbik7Ci0JZWxzZQotCSAgICBtZW1zZXQocHRyLCAweGZmLCBsZW4pOwotCXJldHVybjsKLSAgICB9CisJaWYgKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgbGlzdF9mb3JfZWFjaF9lbnRyeShjaXMsICZzLT5jaXNfY2FjaGUsIG5vZGUpIHsKLQlpZiAoY2lzLT5hZGRyID09IGFkZHIgJiYgY2lzLT5sZW4gPT0gbGVuICYmIGNpcy0+YXR0ciA9PSBhdHRyKSB7Ci0JICAgIG1lbWNweShwdHIsIGNpcy0+Y2FjaGUsIGxlbik7Ci0JICAgIHJldHVybjsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCWlmIChzLT5mYWtlX2NpcykgeworCQlpZiAocy0+ZmFrZV9jaXNfbGVuID49IGFkZHIrbGVuKQorCQkJbWVtY3B5KHB0ciwgcy0+ZmFrZV9jaXMrYWRkciwgbGVuKTsKKwkJZWxzZSB7CisJCQltZW1zZXQocHRyLCAweGZmLCBsZW4pOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJfQorCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJCXJldHVybiByZXQ7CiAJfQotICAgIH0KIAotI2lmZGVmIENPTkZJR19DQVJEQlVTCi0gICAgaWYgKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpCi0JcmV0ID0gcmVhZF9jYl9tZW0ocywgYXR0ciwgYWRkciwgbGVuLCBwdHIpOwotICAgIGVsc2UKLSNlbmRpZgorCWxpc3RfZm9yX2VhY2hfZW50cnkoY2lzLCAmcy0+Y2lzX2NhY2hlLCBub2RlKSB7CisJCWlmIChjaXMtPmFkZHIgPT0gYWRkciAmJiBjaXMtPmxlbiA9PSBsZW4gJiYgY2lzLT5hdHRyID09IGF0dHIpIHsKKwkJCW1lbWNweShwdHIsIGNpcy0+Y2FjaGUsIGxlbik7CisJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisKIAlyZXQgPSBwY21jaWFfcmVhZF9jaXNfbWVtKHMsIGF0dHIsIGFkZHIsIGxlbiwgcHRyKTsKIAogCWlmIChyZXQgPT0gMCkgewpAQCAtMzAxLDkgKzMyMywxMiBAQAogCQkJY2lzLT5sZW4gPSBsZW47CiAJCQljaXMtPmF0dHIgPSBhdHRyOwogCQkJbWVtY3B5KGNpcy0+Y2FjaGUsIHB0ciwgbGVuKTsKKwkJCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJCQlsaXN0X2FkZCgmY2lzLT5ub2RlLCAmcy0+Y2lzX2NhY2hlKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJfQogCX0KKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZApAQCAtMzExLDMyICszMzYsMzUgQEAKIHsKIAlzdHJ1Y3QgY2lzX2NhY2hlX2VudHJ5ICpjaXM7CiAKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2lzLCAmcy0+Y2lzX2NhY2hlLCBub2RlKQogCQlpZiAoY2lzLT5hZGRyID09IGFkZHIgJiYgY2lzLT5sZW4gPT0gbGVuICYmIGNpcy0+YXR0ciA9PSBhdHRyKSB7CiAJCQlsaXN0X2RlbCgmY2lzLT5ub2RlKTsKIAkJCWtmcmVlKGNpcyk7CiAJCQlicmVhazsKIAkJfQorCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIH0KIAorLyoqCisgKiBkZXN0cm95X2Npc19jYWNoZSgpIC0gZGVzdHJveSB0aGUgQ0lTIGNhY2hlCisgKiBAczoJCXBjbWNpYV9zb2NrZXQgZm9yIHdoaWNoIENJUyBjYWNoZSBzaGFsbCBiZSBkZXN0cm95ZWQKKyAqCisgKiBUaGlzIGRlc3Ryb3lzIHRoZSBDSVMgY2FjaGUgYnV0IGtlZXBzIGFueSBmYWtlIENJUyBhbGl2ZS4gTXVzdCBiZQorICogY2FsbGVkIHdpdGggb3BzX211dGV4IGhlbGQuCisgKi8KKwogdm9pZCBkZXN0cm95X2Npc19jYWNoZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsLCAqbjsKKwlzdHJ1Y3QgY2lzX2NhY2hlX2VudHJ5ICpjaXM7CiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbiwgJnMtPmNpc19jYWNoZSkgewotCQlzdHJ1Y3QgY2lzX2NhY2hlX2VudHJ5ICpjaXMgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBjaXNfY2FjaGVfZW50cnksIG5vZGUpOwotCisJCWNpcyA9IGxpc3RfZW50cnkobCwgc3RydWN0IGNpc19jYWNoZV9lbnRyeSwgbm9kZSk7CiAJCWxpc3RfZGVsKCZjaXMtPm5vZGUpOwogCQlrZnJlZShjaXMpOwogCX0KLQotCS8qCi0JICogSWYgdGhlcmUgd2FzIGEgZmFrZSBDSVMsIGRlc3Ryb3kgdGhhdCBhcyB3ZWxsLgotCSAqLwotCWtmcmVlKHMtPmZha2VfY2lzKTsKLQlzLT5mYWtlX2NpcyA9IE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MKGRlc3Ryb3lfY2lzX2NhY2hlKTsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTM0OSw2ICszNzcsMTAgQEAKIHsKIAlzdHJ1Y3QgY2lzX2NhY2hlX2VudHJ5ICpjaXM7CiAJY2hhciAqYnVmOworCWludCByZXQ7CisKKwlpZiAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlidWYgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJ1ZiA9PSBOVUxMKSB7CkBAIC0zNjEsMTQgKzM5Myw5IEBACiAKIAkJaWYgKGxlbiA+IDI1NikKIAkJCWxlbiA9IDI1NjsKLSNpZmRlZiBDT05GSUdfQ0FSREJVUwotCQlpZiAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykKLQkJCXJlYWRfY2JfbWVtKHMsIGNpcy0+YXR0ciwgY2lzLT5hZGRyLCBsZW4sIGJ1Zik7Ci0JCWVsc2UKLSNlbmRpZgotCQkJcGNtY2lhX3JlYWRfY2lzX21lbShzLCBjaXMtPmF0dHIsIGNpcy0+YWRkciwgbGVuLCBidWYpOwogCi0JCWlmIChtZW1jbXAoYnVmLCBjaXMtPmNhY2hlLCBsZW4pICE9IDApIHsKKwkJcmV0ID0gcGNtY2lhX3JlYWRfY2lzX21lbShzLCBjaXMtPmF0dHIsIGNpcy0+YWRkciwgbGVuLCBidWYpOworCQlpZiAocmV0IHx8IG1lbWNtcChidWYsIGNpcy0+Y2FjaGUsIGxlbikgIT0gMCkgewogCQkJa2ZyZWUoYnVmKTsKIAkJCXJldHVybiAtMTsKIAkJfQpAQCAtMzkxLDE3ICs0MTgsMjAgQEAKIAkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZzLT5kZXYsICJyZXBsYWNlbWVudCBDSVMgdG9vIGJpZ1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWtmcmVlKHMtPmZha2VfY2lzKTsKIAlzLT5mYWtlX2NpcyA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAocy0+ZmFrZV9jaXMgPT0gTlVMTCkgewogCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnMtPmRldiwgIm5vIG1lbW9yeSB0byByZXBsYWNlIENJU1xuIik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXMtPmZha2VfY2lzX2xlbiA9IGxlbjsKIAltZW1jcHkocy0+ZmFrZV9jaXMsIGRhdGEsIGxlbik7CisJZGV2X2luZm8oJnMtPmRldiwgIlVzaW5nIHJlcGxhY2VtZW50IENJU1xuIik7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChwY21jaWFfcmVwbGFjZV9jaXMpOwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtNDI1LDI1ICs0NTUsMTYgQEAKIHsKICAgICBpZiAoIXMpCiAJcmV0dXJuIC1FSU5WQUw7Ci0gICAgaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCisKKyAgICBpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSB8fCAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykpCiAJcmV0dXJuIC1FTk9ERVY7CiAgICAgdHVwbGUtPlR1cGxlTGluayA9IHR1cGxlLT5GbGFncyA9IDA7Ci0jaWZkZWYgQ09ORklHX0NBUkRCVVMKLSAgICBpZiAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykgewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBzLT5jYl9kZXY7Ci0JdV9pbnQgcHRyOwotCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQoZGV2LT5zdWJvcmRpbmF0ZSwgMCwgUENJX0NBUkRCVVNfQ0lTLCAmcHRyKTsKLQl0dXBsZS0+Q0lTT2Zmc2V0ID0gcHRyICYgfjc7Ci0JU1BBQ0UodHVwbGUtPkZsYWdzKSA9IChwdHIgJiA3KTsKLSAgICB9IGVsc2UKLSNlbmRpZgotICAgIHsKLQkvKiBBc3N1bWUgcHJlc2VuY2Ugb2YgYSBMT05HTElOS19DIHRvIGFkZHJlc3MgMCAqLwotCXR1cGxlLT5DSVNPZmZzZXQgPSB0dXBsZS0+TGlua09mZnNldCA9IDA7Ci0JU1BBQ0UodHVwbGUtPkZsYWdzKSA9IEhBU19MSU5LKHR1cGxlLT5GbGFncykgPSAxOwotICAgIH0KLSAgICBpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSAmJiAocy0+ZnVuY3Rpb25zID4gMSkgJiYKLQkhKHR1cGxlLT5BdHRyaWJ1dGVzICYgVFVQTEVfUkVUVVJOX0NPTU1PTikpIHsKKworICAgIC8qIEFzc3VtZSBwcmVzZW5jZSBvZiBhIExPTkdMSU5LX0MgdG8gYWRkcmVzcyAwICovCisgICAgdHVwbGUtPkNJU09mZnNldCA9IHR1cGxlLT5MaW5rT2Zmc2V0ID0gMDsKKyAgICBTUEFDRSh0dXBsZS0+RmxhZ3MpID0gSEFTX0xJTksodHVwbGUtPkZsYWdzKSA9IDE7CisKKyAgICBpZiAoKHMtPmZ1bmN0aW9ucyA+IDEpICYmICEodHVwbGUtPkF0dHJpYnV0ZXMgJiBUVVBMRV9SRVRVUk5fQ09NTU9OKSkgewogCWNpc2RhdGFfdCByZXEgPSB0dXBsZS0+RGVzaXJlZFR1cGxlOwogCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTE9OR0xJTktfTUZDOwogCWlmIChwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgZnVuY3Rpb24sIHR1cGxlKSA9PSAwKSB7CkBAIC00NTYsMTcgKzQ3NywxOSBAQAogICAgIH0KICAgICByZXR1cm4gcGNjYXJkX2dldF9uZXh0X3R1cGxlKHMsIGZ1bmN0aW9uLCB0dXBsZSk7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUpOwogCiBzdGF0aWMgaW50IGZvbGxvd19saW5rKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB0dXBsZV90ICp0dXBsZSkKIHsKICAgICB1X2NoYXIgbGlua1s1XTsKICAgICB1X2ludCBvZnM7CisgICAgaW50IHJldDsKIAogICAgIGlmIChNRkNfRk4odHVwbGUtPkZsYWdzKSkgewogCS8qIEdldCBpbmRpcmVjdCBsaW5rIGZyb20gdGhlIE1GQyB0dXBsZSAqLwotCXJlYWRfY2lzX2NhY2hlKHMsIExJTktfU1BBQ0UodHVwbGUtPkZsYWdzKSwKKwlyZXQgPSByZWFkX2Npc19jYWNoZShzLCBMSU5LX1NQQUNFKHR1cGxlLT5GbGFncyksCiAJCSAgICAgICB0dXBsZS0+TGlua09mZnNldCwgNSwgbGluayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC0xOwogCW9mcyA9IGdldF91bmFsaWduZWRfbGUzMihsaW5rICsgMSk7CiAJU1BBQ0UodHVwbGUtPkZsYWdzKSA9IChsaW5rWzBdID09IENJU1RQTF9NRkNfQVRUUik7CiAJLyogTW92ZSB0byB0aGUgbmV4dCBpbmRpcmVjdCBsaW5rICovCkBAIC00NzksMTAgKzUwMiwxMiBAQAogICAgIH0gZWxzZSB7CiAJcmV0dXJuIC0xOwogICAgIH0KLSAgICBpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSAmJiBTUEFDRSh0dXBsZS0+RmxhZ3MpKSB7CisgICAgaWYgKFNQQUNFKHR1cGxlLT5GbGFncykpIHsKIAkvKiBUaGlzIGlzIHVnbHksIGJ1dCBhIGNvbW1vbiBDSVMgZXJyb3IgaXMgdG8gY29kZSB0aGUgbG9uZwogCSAgIGxpbmsgb2Zmc2V0IGluY29ycmVjdGx5LCBzbyB3ZSBjaGVjayB0aGUgcmlnaHQgc3BvdC4uLiAqLwotCXJlYWRfY2lzX2NhY2hlKHMsIFNQQUNFKHR1cGxlLT5GbGFncyksIG9mcywgNSwgbGluayk7CisJcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgU1BBQ0UodHVwbGUtPkZsYWdzKSwgb2ZzLCA1LCBsaW5rKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLTE7CiAJaWYgKChsaW5rWzBdID09IENJU1RQTF9MSU5LVEFSR0VUKSAmJiAobGlua1sxXSA+PSAzKSAmJgogCSAgICAoc3RybmNtcChsaW5rKzIsICJDSVMiLCAzKSA9PSAwKSkKIAkgICAgcmV0dXJuIG9mczsKQEAgLTQ5MCw3ICs1MTUsOSBAQAogCS8qIFRoZW4sIHdlIHRyeSB0aGUgd3Jvbmcgc3BvdC4uLiAqLwogCW9mcyA9IG9mcyA+PiAxOwogICAgIH0KLSAgICByZWFkX2Npc19jYWNoZShzLCBTUEFDRSh0dXBsZS0+RmxhZ3MpLCBvZnMsIDUsIGxpbmspOworICAgIHJldCA9IHJlYWRfY2lzX2NhY2hlKHMsIFNQQUNFKHR1cGxlLT5GbGFncyksIG9mcywgNSwgbGluayk7CisgICAgaWYgKHJldCkKKwkgICAgcmV0dXJuIC0xOwogICAgIGlmICgobGlua1swXSA9PSBDSVNUUExfTElOS1RBUkdFVCkgJiYgKGxpbmtbMV0gPj0gMykgJiYKIAkoc3RybmNtcChsaW5rKzIsICJDSVMiLCAzKSA9PSAwKSkKIAlyZXR1cm4gb2ZzOwpAQCAtNTAyLDEwICs1MjksMTEgQEAKIHsKICAgICB1X2NoYXIgbGlua1syXSwgdG1wOwogICAgIGludCBvZnMsIGksIGF0dHI7CisgICAgaW50IHJldDsKIAogICAgIGlmICghcykKIAlyZXR1cm4gLUVJTlZBTDsKLSAgICBpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKKyAgICBpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSB8fCAocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykpCiAJcmV0dXJuIC1FTk9ERVY7CiAKICAgICBsaW5rWzFdID0gdHVwbGUtPlR1cGxlTGluazsKQEAgLTUxNiw3ICs1NDQsOSBAQAogCWlmIChsaW5rWzFdID09IDB4ZmYpIHsKIAkgICAgbGlua1swXSA9IENJU1RQTF9FTkQ7CiAJfSBlbHNlIHsKLQkgICAgcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzLCAyLCBsaW5rKTsKKwkgICAgcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzLCAyLCBsaW5rKTsKKwkgICAgaWYgKHJldCkKKwkJICAgIHJldHVybiAtMTsKIAkgICAgaWYgKGxpbmtbMF0gPT0gQ0lTVFBMX05VTEwpIHsKIAkJb2ZzKys7IGNvbnRpbnVlOwogCSAgICB9CkBAIC01MjgsNyArNTU4LDkgQEAKIAkgICAgaWYgKG9mcyA8IDApCiAJCXJldHVybiAtRU5PU1BDOwogCSAgICBhdHRyID0gU1BBQ0UodHVwbGUtPkZsYWdzKTsKLQkgICAgcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzLCAyLCBsaW5rKTsKKwkgICAgcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzLCAyLCBsaW5rKTsKKwkgICAgaWYgKHJldCkKKwkJICAgIHJldHVybiAtMTsKIAl9CiAKIAkvKiBJcyB0aGlzIGEgbGluayB0dXBsZT8gIE1ha2UgYSBub3RlIG9mIGl0ICovCkBAIC01NDIsMTIgKzU3NCwxNiBAQAogCSAgICBjYXNlIENJU1RQTF9MT05HTElOS19BOgogCQlIQVNfTElOSyh0dXBsZS0+RmxhZ3MpID0gMTsKIAkJTElOS19TUEFDRSh0dXBsZS0+RmxhZ3MpID0gYXR0ciB8IElTX0FUVFI7Ci0JCXJlYWRfY2lzX2NhY2hlKHMsIGF0dHIsIG9mcysyLCA0LCAmdHVwbGUtPkxpbmtPZmZzZXQpOworCQlyZXQgPSByZWFkX2Npc19jYWNoZShzLCBhdHRyLCBvZnMrMiwgNCwgJnR1cGxlLT5MaW5rT2Zmc2V0KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtMTsKIAkJYnJlYWs7CiAJICAgIGNhc2UgQ0lTVFBMX0xPTkdMSU5LX0M6CiAJCUhBU19MSU5LKHR1cGxlLT5GbGFncykgPSAxOwogCQlMSU5LX1NQQUNFKHR1cGxlLT5GbGFncykgPSBhdHRyICYgfklTX0FUVFI7Ci0JCXJlYWRfY2lzX2NhY2hlKHMsIGF0dHIsIG9mcysyLCA0LCAmdHVwbGUtPkxpbmtPZmZzZXQpOworCQlyZXQgPSByZWFkX2Npc19jYWNoZShzLCBhdHRyLCBvZnMrMiwgNCwgJnR1cGxlLT5MaW5rT2Zmc2V0KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtMTsKIAkJYnJlYWs7CiAJICAgIGNhc2UgQ0lTVFBMX0lORElSRUNUOgogCQlIQVNfTElOSyh0dXBsZS0+RmxhZ3MpID0gMTsKQEAgLTU1OSw3ICs1OTUsOSBAQAogCQlMSU5LX1NQQUNFKHR1cGxlLT5GbGFncykgPSBhdHRyOwogCQlpZiAoZnVuY3Rpb24gPT0gQklORF9GTl9BTEwpIHsKIAkJICAgIC8qIEZvbGxvdyBhbGwgdGhlIE1GQyBsaW5rcyAqLwotCQkgICAgcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzKzIsIDEsICZ0bXApOworCQkgICAgcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzKzIsIDEsICZ0bXApOworCQkgICAgaWYgKHJldCkKKwkJCSAgICByZXR1cm4gLTE7CiAJCSAgICBNRkNfRk4odHVwbGUtPkZsYWdzKSA9IHRtcDsKIAkJfSBlbHNlIHsKIAkJICAgIC8qIEZvbGxvdyBleGFjdGx5IG9uZSBvZiB0aGUgbGlua3MgKi8KQEAgLTU5Miw3ICs2MzAsNiBAQAogICAgIHR1cGxlLT5DSVNPZmZzZXQgPSBvZnMgKyAyOwogICAgIHJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChwY2NhcmRfZ2V0X25leHRfdHVwbGUpOwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIApAQCAtNjAxLDYgKzYzOCw3IEBACiBpbnQgcGNjYXJkX2dldF90dXBsZV9kYXRhKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB0dXBsZV90ICp0dXBsZSkKIHsKICAgICB1X2ludCBsZW47CisgICAgaW50IHJldDsKIAogICAgIGlmICghcykKIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTYxMSwxMiArNjQ5LDEzIEBACiAgICAgdHVwbGUtPlR1cGxlRGF0YUxlbiA9IHR1cGxlLT5UdXBsZUxpbms7CiAgICAgaWYgKGxlbiA9PSAwKQogCXJldHVybiAwOwotICAgIHJlYWRfY2lzX2NhY2hlKHMsIFNQQUNFKHR1cGxlLT5GbGFncyksCisgICAgcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgU1BBQ0UodHVwbGUtPkZsYWdzKSwKIAkJICAgdHVwbGUtPkNJU09mZnNldCArIHR1cGxlLT5UdXBsZU9mZnNldCwKIAkJICAgX01JTihsZW4sIHR1cGxlLT5UdXBsZURhdGFNYXgpLCB0dXBsZS0+VHVwbGVEYXRhKTsKKyAgICBpZiAocmV0KQorCSAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjY2FyZF9nZXRfdHVwbGVfZGF0YSk7CiAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMTkwLDExOSArMTIyOSw2IEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jaWZkZWYgQ09ORklHX0NBUkRCVVMKLQotc3RhdGljIGludCBwYXJzZV9iYXIodHVwbGVfdCAqdHVwbGUsIGNpc3RwbF9iYXJfdCAqYmFyKQotewotICAgIHVfY2hhciAqcDsKLSAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDYpCi0JcmV0dXJuIC1FSU5WQUw7Ci0gICAgcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOwotICAgIGJhci0+YXR0ciA9ICpwOwotICAgIHAgKz0gMjsKLSAgICBiYXItPnNpemUgPSBnZXRfdW5hbGlnbmVkX2xlMzIocCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGFyc2VfY29uZmlnX2NiKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfY29uZmlnX3QgKmNvbmZpZykKLXsKLSAgICB1X2NoYXIgKnA7Ci0KLSAgICBwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7Ci0gICAgaWYgKCgqcCAhPSAzKSB8fCAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDYpKQotCXJldHVybiAtRUlOVkFMOwotICAgIGNvbmZpZy0+bGFzdF9pZHggPSAqKCsrcCk7Ci0gICAgcCsrOwotICAgIGNvbmZpZy0+YmFzZSA9IGdldF91bmFsaWduZWRfbGUzMihwKTsKLSAgICBjb25maWctPnN1YnR1cGxlcyA9IHR1cGxlLT5UdXBsZURhdGFMZW4gLSA2OwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBhcnNlX2NmdGFibGVfZW50cnlfY2IodHVwbGVfdCAqdHVwbGUsCi0JCQkJICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV9jYl90ICplbnRyeSkKLXsKLSAgICB1X2NoYXIgKnAsICpxLCBmZWF0dXJlczsKLQotICAgIHAgPSB0dXBsZS0+VHVwbGVEYXRhOwotICAgIHEgPSBwICsgdHVwbGUtPlR1cGxlRGF0YUxlbjsKLSAgICBlbnRyeS0+aW5kZXggPSAqcCAmIDB4M2Y7Ci0gICAgZW50cnktPmZsYWdzID0gMDsKLSAgICBpZiAoKnAgJiAweDQwKQotCWVudHJ5LT5mbGFncyB8PSBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUOwotCi0gICAgLyogUHJvY2VzcyBvcHRpb25hbCBmZWF0dXJlcyAqLwotICAgIGlmICgrK3AgPT0gcSkKLQkgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgZmVhdHVyZXMgPSAqcDsgcCsrOwotCi0gICAgLyogUG93ZXIgb3B0aW9ucyAqLwotICAgIGlmICgoZmVhdHVyZXMgJiAzKSA+IDApIHsKLQlwID0gcGFyc2VfcG93ZXIocCwgcSwgJmVudHJ5LT52Y2MpOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotICAgIH0gZWxzZQotCWVudHJ5LT52Y2MucHJlc2VudCA9IDA7Ci0gICAgaWYgKChmZWF0dXJlcyAmIDMpID4gMSkgewotCXAgPSBwYXJzZV9wb3dlcihwLCBxLCAmZW50cnktPnZwcDEpOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotICAgIH0gZWxzZQotCWVudHJ5LT52cHAxLnByZXNlbnQgPSAwOwotICAgIGlmICgoZmVhdHVyZXMgJiAzKSA+IDIpIHsKLQlwID0gcGFyc2VfcG93ZXIocCwgcSwgJmVudHJ5LT52cHAyKTsKLQlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLSAgICB9IGVsc2UKLQllbnRyeS0+dnBwMi5wcmVzZW50ID0gMDsKLQotICAgIC8qIEkvTyB3aW5kb3cgb3B0aW9ucyAqLwotICAgIGlmIChmZWF0dXJlcyAmIDB4MDgpIHsKLQlpZiAocCA9PSBxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbnRyeS0+aW8gPSAqcDsgcCsrOwotICAgIH0gZWxzZQotCWVudHJ5LT5pbyA9IDA7Ci0KLSAgICAvKiBJbnRlcnJ1cHQgb3B0aW9ucyAqLwotICAgIGlmIChmZWF0dXJlcyAmIDB4MTApIHsKLQlwID0gcGFyc2VfaXJxKHAsIHEsICZlbnRyeS0+aXJxKTsKLQlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLSAgICB9IGVsc2UKLQllbnRyeS0+aXJxLklSUUluZm8xID0gMDsKLQotICAgIGlmIChmZWF0dXJlcyAmIDB4MjApIHsKLQlpZiAocCA9PSBxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbnRyeS0+bWVtID0gKnA7IHArKzsKLSAgICB9IGVsc2UKLQllbnRyeS0+bWVtID0gMDsKLQotICAgIC8qIE1pc2MgZmVhdHVyZXMgKi8KLSAgICBpZiAoZmVhdHVyZXMgJiAweDgwKSB7Ci0JaWYgKHAgPT0gcSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZW50cnktPmZsYWdzIHw9ICgqcCA8PCA4KTsKLQlpZiAoKnAgJiAweDgwKSB7Ci0JICAgIGlmICgrK3AgPT0gcSkKLQkJICAgIHJldHVybiAtRUlOVkFMOwotCSAgICBlbnRyeS0+ZmxhZ3MgfD0gKCpwIDw8IDE2KTsKLQl9Ci0Jd2hpbGUgKCpwICYgMHg4MCkKLQkgICAgaWYgKCsrcCA9PSBxKQotCQkgICAgcmV0dXJuIC1FSU5WQUw7Ci0JcCsrOwotICAgIH0KLQotICAgIGVudHJ5LT5zdWJ0dXBsZXMgPSBxLXA7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotI2VuZGlmCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCiBzdGF0aWMgaW50IHBhcnNlX2RldmljZV9nZW8odHVwbGVfdCAqdHVwbGUsIGNpc3RwbF9kZXZpY2VfZ2VvX3QgKmdlbykKIHsKICAgICB1X2NoYXIgKnAsICpxOwpAQCAtMTQwNCwxNyArMTMzMCw2IEBACiAgICAgY2FzZSBDSVNUUExfREVWSUNFX0E6CiAJcmV0ID0gcGFyc2VfZGV2aWNlKHR1cGxlLCAmcGFyc2UtPmRldmljZSk7CiAJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX0NBUkRCVVMKLSAgICBjYXNlIENJU1RQTF9CQVI6Ci0JcmV0ID0gcGFyc2VfYmFyKHR1cGxlLCAmcGFyc2UtPmJhcik7Ci0JYnJlYWs7Ci0gICAgY2FzZSBDSVNUUExfQ09ORklHX0NCOgotCXJldCA9IHBhcnNlX2NvbmZpZ19jYih0dXBsZSwgJnBhcnNlLT5jb25maWcpOwotCWJyZWFrOwotICAgIGNhc2UgQ0lTVFBMX0NGVEFCTEVfRU5UUllfQ0I6Ci0JcmV0ID0gcGFyc2VfY2Z0YWJsZV9lbnRyeV9jYih0dXBsZSwgJnBhcnNlLT5jZnRhYmxlX2VudHJ5X2NiKTsKLQlicmVhazsKLSNlbmRpZgogICAgIGNhc2UgQ0lTVFBMX0NIRUNLU1VNOgogCXJldCA9IHBhcnNlX2NoZWNrc3VtKHR1cGxlLCAmcGFyc2UtPmNoZWNrc3VtKTsKIAlicmVhazsKQEAgLTE1MTMsNyArMTQyOCw2IEBACiAgICAga2ZyZWUoYnVmKTsKICAgICByZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChwY2NhcmRfcmVhZF90dXBsZSk7CiAKIAogLyoqCkBAIC0xNTczLDg0ICsxNDg3LDIzOCBAQAogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0wocGNjYXJkX2xvb3BfdHVwbGUpOwogCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgVGhpcyB0cmllcyB0byBkZXRlcm1pbmUgaWYgYSBjYXJkIGhhcyBhIHNlbnNpYmxlIENJUy4gIEl0IHJldHVybnMKLSAgICB0aGUgbnVtYmVyIG9mIHR1cGxlcyBpbiB0aGUgQ0lTLCBvciAwIGlmIHRoZSBDSVMgbG9va3MgYmFkLiAgVGhlCi0gICAgY2hlY2tzIGluY2x1ZGUgbWFraW5nIHN1cmUgc2V2ZXJhbCBjcml0aWNhbCB0dXBsZXMgYXJlIHByZXNlbnQgYW5kCi0gICAgdmFsaWQ7IHNlZWluZyBpZiB0aGUgdG90YWwgbnVtYmVyIG9mIHR1cGxlcyBpcyByZWFzb25hYmxlOyBhbmQKLSAgICBsb29raW5nIGZvciB0dXBsZXMgdGhhdCB1c2UgcmVzZXJ2ZWQgY29kZXMuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCisvKioKKyAqIHBjY2FyZF92YWxpZGF0ZV9jaXMoKSAtIGNoZWNrIHdoZXRoZXIgY2FyZCBoYXMgYSBzZW5zaWJsZSBDSVMKKyAqIEBzOgkJdGhlIHN0cnVjdCBwY21jaWFfc29ja2V0IHdlIGFyZSB0byBjaGVjaworICogQGluZm86CXJldHVybnMgdGhlIG51bWJlciBvZiB0dXBsZXMgaW4gdGhlICh2YWxpZCkgQ0lTLCBvciAwCisgKgorICogVGhpcyB0cmllcyB0byBkZXRlcm1pbmUgaWYgYSBjYXJkIGhhcyBhIHNlbnNpYmxlIENJUy4gIEluIEBpbmZvLCBpdAorICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIHR1cGxlcyBpbiB0aGUgQ0lTLCBvciAwIGlmIHRoZSBDSVMgbG9va3MgYmFkLiBUaGUKKyAqIGNoZWNrcyBpbmNsdWRlIG1ha2luZyBzdXJlIHNldmVyYWwgY3JpdGljYWwgdHVwbGVzIGFyZSBwcmVzZW50IGFuZAorICogdmFsaWQ7IHNlZWluZyBpZiB0aGUgdG90YWwgbnVtYmVyIG9mIHR1cGxlcyBpcyByZWFzb25hYmxlOyBhbmQKKyAqIGxvb2tpbmcgZm9yIHR1cGxlcyB0aGF0IHVzZSByZXNlcnZlZCBjb2Rlcy4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgKi8KIGludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgKmluZm8pCiB7Ci0gICAgdHVwbGVfdCAqdHVwbGU7Ci0gICAgY2lzcGFyc2VfdCAqcDsKLSAgICB1bnNpZ25lZCBpbnQgY291bnQgPSAwOwotICAgIGludCByZXQsIHJlc2VydmVkLCBkZXZfb2sgPSAwLCBpZGVudF9vayA9IDA7CisJdHVwbGVfdCAqdHVwbGU7CisJY2lzcGFyc2VfdCAqcDsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOworCWludCByZXQsIHJlc2VydmVkLCBkZXZfb2sgPSAwLCBpZGVudF9vayA9IDA7CiAKLSAgICBpZiAoIXMpCi0JcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFzKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIHR1cGxlID0ga21hbGxvYyhzaXplb2YoKnR1cGxlKSwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKHR1cGxlID09IE5VTEwpIHsKLQkgICAgZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZzLT5kZXYsICJubyBtZW1vcnkgdG8gdmFsaWRhdGUgQ0lTXG4iKTsKLQkgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgfQotICAgIHAgPSBrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOwotICAgIGlmIChwID09IE5VTEwpIHsKLQkgICAga2ZyZWUodHVwbGUpOwotCSAgICBkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnMtPmRldiwgIm5vIG1lbW9yeSB0byB2YWxpZGF0ZSBDSVNcbiIpOwotCSAgICByZXR1cm4gLUVOT01FTTsKLSAgICB9CisJLyogV2UgZG8gbm90IHdhbnQgdG8gdmFsaWRhdGUgdGhlIENJUyBjYWNoZS4uLiAqLworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJZGVzdHJveV9jaXNfY2FjaGUocyk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCi0gICAgY291bnQgPSByZXNlcnZlZCA9IDA7Ci0gICAgdHVwbGUtPkRlc2lyZWRUdXBsZSA9IFJFVFVSTl9GSVJTVF9UVVBMRTsKLSAgICB0dXBsZS0+QXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047Ci0gICAgcmV0ID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgdHVwbGUpOwotICAgIGlmIChyZXQgIT0gMCkKLQlnb3RvIGRvbmU7CisJdHVwbGUgPSBrbWFsbG9jKHNpemVvZigqdHVwbGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAodHVwbGUgPT0gTlVMTCkgeworCQlkZXZfd2Fybigmcy0+ZGV2LCAibm8gbWVtb3J5IHRvIHZhbGlkYXRlIENJU1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlwID0ga21hbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKKwlpZiAocCA9PSBOVUxMKSB7CisJCWtmcmVlKHR1cGxlKTsKKwkJZGV2X3dhcm4oJnMtPmRldiwgIm5vIG1lbW9yeSB0byB2YWxpZGF0ZSBDSVNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKLSAgICAvKiBGaXJzdCB0dXBsZSBzaG91bGQgYmUgREVWSUNFOyB3ZSBzaG91bGQgcmVhbGx5IGhhdmUgZWl0aGVyIHRoYXQKLSAgICAgICBvciBhIENGVEFCTEVfRU5UUlkgb2Ygc29tZSBzb3J0ICovCi0gICAgaWYgKCh0dXBsZS0+VHVwbGVDb2RlID09IENJU1RQTF9ERVZJQ0UpIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWSwgcCkgPT0gMCkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9DRlRBQkxFX0VOVFJZX0NCLCBwKSA9PSAwKSkKLQlkZXZfb2srKzsKLQotICAgIC8qIEFsbCBjYXJkcyBzaG91bGQgaGF2ZSBhIE1BTkZJRCB0dXBsZSwgYW5kL29yIGEgVkVSU18xIG9yIFZFUlNfMgotICAgICAgIHR1cGxlLCBmb3IgY2FyZCBpZGVudGlmaWNhdGlvbi4gIENlcnRhaW4gb2xkIEQtTGluayBhbmQgTGlua3N5cwotICAgICAgIGNhcmRzIGhhdmUgb25seSBhIGJyb2tlbiBWRVJTXzIgdHVwbGU7IGhlbmNlIHRoZSBib2d1cyB0ZXN0LiAqLwotICAgIGlmICgocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9NQU5GSUQsIHApID09IDApIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfVkVSU18xLCBwKSA9PSAwKSB8fAotCShwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX1ZFUlNfMiwgcCkgIT0gLUVOT1NQQykpCi0JaWRlbnRfb2srKzsKLQotICAgIGlmICghZGV2X29rICYmICFpZGVudF9vaykKLQlnb3RvIGRvbmU7Ci0KLSAgICBmb3IgKGNvdW50ID0gMTsgY291bnQgPCBNQVhfVFVQTEVTOyBjb3VudCsrKSB7Ci0JcmV0ID0gcGNjYXJkX2dldF9uZXh0X3R1cGxlKHMsIEJJTkRfRk5fQUxMLCB0dXBsZSk7CisJY291bnQgPSByZXNlcnZlZCA9IDA7CisJdHVwbGUtPkRlc2lyZWRUdXBsZSA9IFJFVFVSTl9GSVJTVF9UVVBMRTsKKwl0dXBsZS0+QXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047CisJcmV0ID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgdHVwbGUpOwogCWlmIChyZXQgIT0gMCkKLQkJYnJlYWs7Ci0JaWYgKCgodHVwbGUtPlR1cGxlQ29kZSA+IDB4MjMpICYmICh0dXBsZS0+VHVwbGVDb2RlIDwgMHg0MCkpIHx8Ci0JICAgICgodHVwbGUtPlR1cGxlQ29kZSA+IDB4NDcpICYmICh0dXBsZS0+VHVwbGVDb2RlIDwgMHg4MCkpIHx8Ci0JICAgICgodHVwbGUtPlR1cGxlQ29kZSA+IDB4OTApICYmICh0dXBsZS0+VHVwbGVDb2RlIDwgMHhmZikpKQotCSAgICByZXNlcnZlZCsrOwotICAgIH0KLSAgICBpZiAoKGNvdW50ID09IE1BWF9UVVBMRVMpIHx8IChyZXNlcnZlZCA+IDUpIHx8Ci0JKCghZGV2X29rIHx8ICFpZGVudF9vaykgJiYgKGNvdW50ID4gMTApKSkKLQljb3VudCA9IDA7CisJCWdvdG8gZG9uZTsKKworCS8qIEZpcnN0IHR1cGxlIHNob3VsZCBiZSBERVZJQ0U7IHdlIHNob3VsZCByZWFsbHkgaGF2ZSBlaXRoZXIgdGhhdAorCSAgIG9yIGEgQ0ZUQUJMRV9FTlRSWSBvZiBzb21lIHNvcnQgKi8KKwlpZiAoKHR1cGxlLT5UdXBsZUNvZGUgPT0gQ0lTVFBMX0RFVklDRSkgfHwKKwkgICAgKCFwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX0NGVEFCTEVfRU5UUlksIHApKSB8fAorCSAgICAoIXBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWV9DQiwgcCkpKQorCQlkZXZfb2srKzsKKworCS8qIEFsbCBjYXJkcyBzaG91bGQgaGF2ZSBhIE1BTkZJRCB0dXBsZSwgYW5kL29yIGEgVkVSU18xIG9yIFZFUlNfMgorCSAgIHR1cGxlLCBmb3IgY2FyZCBpZGVudGlmaWNhdGlvbi4gIENlcnRhaW4gb2xkIEQtTGluayBhbmQgTGlua3N5cworCSAgIGNhcmRzIGhhdmUgb25seSBhIGJyb2tlbiBWRVJTXzIgdHVwbGU7IGhlbmNlIHRoZSBib2d1cyB0ZXN0LiAqLworCWlmICgocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9NQU5GSUQsIHApID09IDApIHx8CisJICAgIChwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX1ZFUlNfMSwgcCkgPT0gMCkgfHwKKwkgICAgKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfVkVSU18yLCBwKSAhPSAtRU5PU1BDKSkKKwkJaWRlbnRfb2srKzsKKworCWlmICghZGV2X29rICYmICFpZGVudF9vaykKKwkJZ290byBkb25lOworCisJZm9yIChjb3VudCA9IDE7IGNvdW50IDwgTUFYX1RVUExFUzsgY291bnQrKykgeworCQlyZXQgPSBwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgQklORF9GTl9BTEwsIHR1cGxlKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJYnJlYWs7CisJCWlmICgoKHR1cGxlLT5UdXBsZUNvZGUgPiAweDIzKSAmJiAodHVwbGUtPlR1cGxlQ29kZSA8IDB4NDApKSB8fAorCQkgICAgKCh0dXBsZS0+VHVwbGVDb2RlID4gMHg0NykgJiYgKHR1cGxlLT5UdXBsZUNvZGUgPCAweDgwKSkgfHwKKwkJICAgICgodHVwbGUtPlR1cGxlQ29kZSA+IDB4OTApICYmICh0dXBsZS0+VHVwbGVDb2RlIDwgMHhmZikpKQorCQkJcmVzZXJ2ZWQrKzsKKwl9CisJaWYgKChjb3VudCA9PSBNQVhfVFVQTEVTKSB8fCAocmVzZXJ2ZWQgPiA1KSB8fAorCQkoKCFkZXZfb2sgfHwgIWlkZW50X29rKSAmJiAoY291bnQgPiAxMCkpKQorCQljb3VudCA9IDA7CisKKwlyZXQgPSAwOwogCiBkb25lOgotICAgIGlmIChpbmZvKQotCSAgICAqaW5mbyA9IGNvdW50OwotICAgIGtmcmVlKHR1cGxlKTsKLSAgICBrZnJlZShwKTsKLSAgICByZXR1cm4gMDsKKwkvKiBpbnZhbGlkYXRlIENJUyBjYWNoZSBvbiBmYWlsdXJlICovCisJaWYgKCFkZXZfb2sgfHwgIWlkZW50X29rIHx8ICFjb3VudCkgeworCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCQlkZXN0cm95X2Npc19jYWNoZShzKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCQlyZXQgPSAtRUlPOworCX0KKworCWlmIChpbmZvKQorCQkqaW5mbyA9IGNvdW50OworCWtmcmVlKHR1cGxlKTsKKwlrZnJlZShwKTsKKwlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChwY2NhcmRfdmFsaWRhdGVfY2lzKTsKKworCisjZGVmaW5lIHRvX3NvY2tldChfZGV2KSBjb250YWluZXJfb2YoX2Rldiwgc3RydWN0IHBjbWNpYV9zb2NrZXQsIGRldikKKworc3RhdGljIHNzaXplX3QgcGNjYXJkX2V4dHJhY3RfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBjaGFyICpidWYsCisJCQkJICBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJdHVwbGVfdCB0dXBsZTsKKwlpbnQgc3RhdHVzLCBpOworCWxvZmZfdCBwb2ludGVyID0gMDsKKwlzc2l6ZV90IHJldCA9IDA7CisJdV9jaGFyICp0dXBsZWJ1ZmZlcjsKKwl1X2NoYXIgKnRlbXBidWZmZXI7CisKKwl0dXBsZWJ1ZmZlciA9IGttYWxsb2Moc2l6ZW9mKHVfY2hhcikgKiAyNTYsIEdGUF9LRVJORUwpOworCWlmICghdHVwbGVidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJdGVtcGJ1ZmZlciA9IGttYWxsb2Moc2l6ZW9mKHVfY2hhcikgKiAyNTgsIEdGUF9LRVJORUwpOworCWlmICghdGVtcGJ1ZmZlcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfdHVwbGU7CisJfQorCisJbWVtc2V0KCZ0dXBsZSwgMCwgc2l6ZW9mKHR1cGxlX3QpKTsKKworCXR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fTElOSyB8IFRVUExFX1JFVFVSTl9DT01NT047CisJdHVwbGUuRGVzaXJlZFR1cGxlID0gUkVUVVJOX0ZJUlNUX1RVUExFOworCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKKworCXN0YXR1cyA9IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUocywgQklORF9GTl9BTEwsICZ0dXBsZSk7CisJd2hpbGUgKCFzdGF0dXMpIHsKKwkJdHVwbGUuVHVwbGVEYXRhID0gdHVwbGVidWZmZXI7CisJCXR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKKwkJbWVtc2V0KHR1cGxlYnVmZmVyLCAwLCBzaXplb2YodV9jaGFyKSAqIDI1NSk7CisKKwkJc3RhdHVzID0gcGNjYXJkX2dldF90dXBsZV9kYXRhKHMsICZ0dXBsZSk7CisJCWlmIChzdGF0dXMpCisJCQlicmVhazsKKworCQlpZiAob2ZmIDwgKHBvaW50ZXIgKyAyICsgdHVwbGUuVHVwbGVEYXRhTGVuKSkgeworCQkJdGVtcGJ1ZmZlclswXSA9IHR1cGxlLlR1cGxlQ29kZSAmIDB4ZmY7CisJCQl0ZW1wYnVmZmVyWzFdID0gdHVwbGUuVHVwbGVMaW5rICYgMHhmZjsKKwkJCWZvciAoaSA9IDA7IGkgPCB0dXBsZS5UdXBsZURhdGFMZW47IGkrKykKKwkJCQl0ZW1wYnVmZmVyW2kgKyAyXSA9IHR1cGxlYnVmZmVyW2ldICYgMHhmZjsKKworCQkJZm9yIChpID0gMDsgaSA8ICgyICsgdHVwbGUuVHVwbGVEYXRhTGVuKTsgaSsrKSB7CisJCQkJaWYgKCgoaSArIHBvaW50ZXIpID49IG9mZikgJiYKKwkJCQkgICAgKGkgKyBwb2ludGVyKSA8IChvZmYgKyBjb3VudCkpIHsKKwkJCQkJYnVmW3JldF0gPSB0ZW1wYnVmZmVyW2ldOworCQkJCQlyZXQrKzsKKwkJCQl9CisJCQl9CisJCX0KKworCQlwb2ludGVyICs9IDIgKyB0dXBsZS5UdXBsZURhdGFMZW47CisKKwkJaWYgKHBvaW50ZXIgPj0gKG9mZiArIGNvdW50KSkKKwkJCWJyZWFrOworCisJCWlmICh0dXBsZS5UdXBsZUNvZGUgPT0gQ0lTVFBMX0VORCkKKwkJCWJyZWFrOworCQlzdGF0dXMgPSBwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgQklORF9GTl9BTEwsICZ0dXBsZSk7CisJfQorCisJa2ZyZWUodGVtcGJ1ZmZlcik7CisgZnJlZV90dXBsZToKKwlrZnJlZSh0dXBsZWJ1ZmZlcik7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBzc2l6ZV90IHBjY2FyZF9zaG93X2NpcyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCSAgICAgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCisJCQkgICAgICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgaW50IHNpemUgPSAweDIwMDsKKworCWlmIChvZmYgPj0gc2l6ZSkKKwkJY291bnQgPSAwOworCWVsc2UgeworCQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKKwkJdW5zaWduZWQgaW50IGNoYWluczsKKworCQlpZiAob2ZmICsgY291bnQgPiBzaXplKQorCQkJY291bnQgPSBzaXplIC0gb2ZmOworCisJCXMgPSB0b19zb2NrZXQoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKKworCQlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKKwkJCXJldHVybiAtRU5PREVWOworCQlpZiAocGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCAmY2hhaW5zKSkKKwkJCXJldHVybiAtRUlPOworCQlpZiAoIWNoYWlucykKKwkJCXJldHVybiAtRU5PREFUQTsKKworCQljb3VudCA9IHBjY2FyZF9leHRyYWN0X2NpcyhzLCBidWYsIG9mZiwgY291bnQpOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgc3NpemVfdCBwY2NhcmRfc3RvcmVfY2lzKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCXN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKKwkJCQljaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKKwlpbnQgZXJyb3I7CisKKwlzID0gdG9fc29ja2V0KGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSk7CisKKwlpZiAob2ZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3VudCA+PSBDSVNUUExfTUFYX0NJU19TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVycm9yID0gcGNtY2lhX3JlcGxhY2VfY2lzKHMsIGJ1ZiwgY291bnQpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIC1FSU87CisKKwlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX1JFUVVFUlkpOworCisJcmV0dXJuIGNvdW50OworfQorCisKK3N0cnVjdCBiaW5fYXR0cmlidXRlIHBjY2FyZF9jaXNfYXR0ciA9IHsKKwkuYXR0ciA9IHsgLm5hbWUgPSAiY2lzIiwgLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiB9LAorCS5zaXplID0gMHgyMDAsCisJLnJlYWQgPSBwY2NhcmRfc2hvd19jaXMsCisJLndyaXRlID0gcGNjYXJkX3N0b3JlX2NpcywKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jcy5jIGIvZHJpdmVycy9wY21jaWEvY3MuYwppbmRleCA2ZDZmODJiLi5lNjc5ZTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NzLmMKQEAgLTE0MCwxOSArMTQwLDEzIEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gZ2V0X2RldmljZSgmc2t0LT5kZXYpOwogCWlmICghZGV2KQogCQlyZXR1cm4gTlVMTDsKLQlza3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHNrdC0+b3duZXIpKSB7Ci0JCXB1dF9kZXZpY2UoJnNrdC0+ZGV2KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiBza3Q7CisJcmV0dXJuIGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfZ2V0X3NvY2tldCk7CiAKIAogdm9pZCBwY21jaWFfcHV0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewotCW1vZHVsZV9wdXQoc2t0LT5vd25lcik7CiAJcHV0X2RldmljZSgmc2t0LT5kZXYpOwogfQogRVhQT1JUX1NZTUJPTChwY21jaWFfcHV0X3NvY2tldCk7CkBAIC0xODEsOCArMTc1LDYgQEAKIAogCWRldl9kYmcoJnNvY2tldC0+ZGV2LCAicGNtY2lhX3JlZ2lzdGVyX3NvY2tldCgweCVwKVxuIiwgc29ja2V0LT5vcHMpOwogCi0Jc3Bpbl9sb2NrX2luaXQoJnNvY2tldC0+bG9jayk7Ci0KIAkvKiB0cnkgdG8gb2J0YWluIGEgc29ja2V0IG51bWJlciBbeWVzLCBpdCBnZXRzIHVnbHkgaWYgd2UKIAkgKiByZWdpc3RlciBtb3JlIHRoYW4gMl5zaXplb2YodW5zaWduZWQgaW50KSBwY21jaWEKIAkgKiBzb2NrZXRzLi4uIGJ1dCB0aGUgc29ja2V0IG51bWJlciBpcyBkZXByZWNhdGVkCkBAIC0yMjgsMTAgKzIyMCwxMyBAQAogCWluaXRfY29tcGxldGlvbigmc29ja2V0LT5zb2NrZXRfcmVsZWFzZWQpOwogCWluaXRfY29tcGxldGlvbigmc29ja2V0LT50aHJlYWRfZG9uZSk7CiAJbXV0ZXhfaW5pdCgmc29ja2V0LT5za3RfbXV0ZXgpOworCW11dGV4X2luaXQoJnNvY2tldC0+b3BzX211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmc29ja2V0LT50aHJlYWRfbG9jayk7CiAKIAlpZiAoc29ja2V0LT5yZXNvdXJjZV9vcHMtPmluaXQpIHsKKwkJbXV0ZXhfbG9jaygmc29ja2V0LT5vcHNfbXV0ZXgpOwogCQlyZXQgPSBzb2NrZXQtPnJlc291cmNlX29wcy0+aW5pdChzb2NrZXQpOworCQltdXRleF91bmxvY2soJnNvY2tldC0+b3BzX211dGV4KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwogCX0KQEAgLTI4MywxNSArMjc4LDE3IEBACiAJaWYgKHNvY2tldC0+dGhyZWFkKQogCQlrdGhyZWFkX3N0b3Aoc29ja2V0LT50aHJlYWQpOwogCi0JcmVsZWFzZV9jaXNfbWVtKHNvY2tldCk7Ci0KIAkvKiByZW1vdmUgZnJvbSBvdXIgb3duIGxpc3QgKi8KIAlkb3duX3dyaXRlKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOwogCWxpc3RfZGVsKCZzb2NrZXQtPnNvY2tldF9saXN0KTsKIAl1cF93cml0ZSgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKIAogCS8qIHdhaXQgZm9yIHN5c2ZzIHRvIGRyb3AgYWxsIHJlZmVyZW5jZXMgKi8KLQlyZWxlYXNlX3Jlc291cmNlX2RiKHNvY2tldCk7CisJaWYgKHNvY2tldC0+cmVzb3VyY2Vfb3BzLT5leGl0KSB7CisJCW11dGV4X2xvY2soJnNvY2tldC0+b3BzX211dGV4KTsKKwkJc29ja2V0LT5yZXNvdXJjZV9vcHMtPmV4aXQoc29ja2V0KTsKKwkJbXV0ZXhfdW5sb2NrKCZzb2NrZXQtPm9wc19tdXRleCk7CisJfQogCXdhaXRfZm9yX2NvbXBsZXRpb24oJnNvY2tldC0+c29ja2V0X3JlbGVhc2VkKTsKIH0gLyogcGNtY2lhX3VucmVnaXN0ZXJfc29ja2V0ICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV91bnJlZ2lzdGVyX3NvY2tldCk7CkBAIC0zMjgsNyArMzI1LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JaWYgKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpCisJaWYgKChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSAmJiAoZXZlbnQgIT0gQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMKSkKIAkJcmV0dXJuIDA7CiAKIAlkZXZfZGJnKCZzLT5kZXYsICJzZW5kX2V2ZW50KGV2ZW50ICVkLCBwcmkgJWQsIGNhbGxiYWNrIDB4JXApXG4iLApAQCAtMzQ2LDEzICszNDMsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNvY2tldF9yZW1vdmVfZHJpdmVycyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQotewotCWRldl9kYmcoJnNrdC0+ZGV2LCAicmVtb3ZlX2RyaXZlcnNcbiIpOwotCi0Jc2VuZF9ldmVudChza3QsIENTX0VWRU5UX0NBUkRfUkVNT1ZBTCwgQ1NfRVZFTlRfUFJJX0hJR0gpOwotfQotCiBzdGF0aWMgaW50IHNvY2tldF9yZXNldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewogCWludCBzdGF0dXMsIGk7CkBAIC0zOTUsNyArMzg1LDkgQEAKIAogCWRldl9kYmcoJnMtPmRldiwgInNodXRkb3duXG4iKTsKIAotCXNvY2tldF9yZW1vdmVfZHJpdmVycyhzKTsKKwlzZW5kX2V2ZW50KHMsIENTX0VWRU5UX0NBUkRfUkVNT1ZBTCwgQ1NfRVZFTlRfUFJJX0hJR0gpOworCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlzLT5zdGF0ZSAmPSBTT0NLRVRfSU5VU0UgfCBTT0NLRVRfUFJFU0VOVDsKIAltc2xlZXAoc2h1dGRvd25fZGVsYXkgKiAxMCk7CiAJcy0+c3RhdGUgJj0gU09DS0VUX0lOVVNFOwpAQCAtNDA2LDExICszOTgsMjEgQEAKIAlzLT5vcHMtPnNldF9zb2NrZXQocywgJnMtPnNvY2tldCk7CiAJcy0+aXJxLkFzc2lnbmVkSVJRID0gcy0+aXJxLkNvbmZpZyA9IDA7CiAJcy0+bG9ja19jb3VudCA9IDA7Ci0JZGVzdHJveV9jaXNfY2FjaGUocyk7CisJa2ZyZWUocy0+ZmFrZV9jaXMpOworCXMtPmZha2VfY2lzID0gTlVMTDsKKwlzLT5mdW5jdGlvbnMgPSAwOworCisJLyogRnJvbSBoZXJlIG9uIHdlIGNhbiBiZSBzdXJlIHRoYXQgb25seSB3ZSAodGhhdCBpcywgdGhlCisJICogcGNjYXJkZCB0aHJlYWQpIGFjY2Vzc2VzIHRoaXMgc29ja2V0LCBhbmQgYWxsICgxNi1iaXQpCisJICogUENNQ0lBIGludGVyYWN0aW9ucyBhcmUgZ29uZS4gVGhlcmVmb3JlLCByZWxlYXNlCisJICogb3BzX211dGV4IHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IGEgc3lzZnMtcmVsYXRlZCBsb2NrZGVwCisJICogd2FybmluZy4KKwkgKi8KKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisKICNpZmRlZiBDT05GSUdfQ0FSREJVUwogCWNiX2ZyZWUocyk7CiAjZW5kaWYKLQlzLT5mdW5jdGlvbnMgPSAwOwogCiAJLyogZ2l2ZSBzb2NrZXQgc29tZSB0aW1lIHRvIHBvd2VyIGRvd24gKi8KIAltc2xlZXAoMTAwKTsKQEAgLTQyMSw3ICs0MjMsNyBAQAogCQkJICAgIioqKiBEQU5HRVIgKioqIHVuYWJsZSB0byByZW1vdmUgc29ja2V0IHBvd2VyXG4iKTsKIAl9CiAKLQljc19zb2NrZXRfcHV0KHMpOworCXMtPnN0YXRlICY9IH5TT0NLRVRfSU5VU0U7CiB9CiAKIHN0YXRpYyBpbnQgc29ja2V0X3NldHVwKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QsIGludCBpbml0aWFsX2RlbGF5KQpAQCAtNDYwLDcgKzQ2Miw4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlza3QtPnN0YXRlIHw9IFNPQ0tFVF9DQVJEQlVTOwotCX0KKwl9IGVsc2UKKwkJc2t0LT5zdGF0ZSAmPSB+U09DS0VUX0NBUkRCVVM7CiAKIAkvKgogCSAqIERlY29kZSB0aGUgY2FyZCB2b2x0YWdlIHJlcXVpcmVtZW50cywgYW5kIGFwcGx5IHBvd2VyIHRvIHRoZSBjYXJkLgpAQCAtNTA5LDggKzUxMiwxMiBAQAogCiAJZGV2X2RiZygmc2t0LT5kZXYsICJpbnNlcnRcbiIpOwogCi0JaWYgKCFjc19zb2NrZXRfZ2V0KHNrdCkpCi0JCXJldHVybiAtRU5PREVWOworCW11dGV4X2xvY2soJnNrdC0+b3BzX211dGV4KTsKKwlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9JTlVTRSkgeworCQltdXRleF91bmxvY2soJnNrdC0+b3BzX211dGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNrdC0+c3RhdGUgfD0gU09DS0VUX0lOVVNFOwogCiAJcmV0ID0gc29ja2V0X3NldHVwKHNrdCwgc2V0dXBfZGVsYXkpOwogCWlmIChyZXQgPT0gMCkgewpAQCAtNTI4LDkgKzUzNSwxMSBAQAogCQl9CiAjZW5kaWYKIAkJZGV2X2RiZygmc2t0LT5kZXYsICJpbnNlcnQgZG9uZVxuIik7CisJCW11dGV4X3VubG9jaygmc2t0LT5vcHNfbXV0ZXgpOwogCiAJCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9DQVJEX0lOU0VSVElPTiwgQ1NfRVZFTlRfUFJJX0xPVyk7CiAJfSBlbHNlIHsKKwkJbXV0ZXhfdW5sb2NrKCZza3QtPm9wc19tdXRleCk7CiAJCXNvY2tldF9zaHV0ZG93bihza3QpOwogCX0KIApAQCAtNTQyLDU4ICs1NTEsNjYgQEAKIAlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9TVVNQRU5EKQogCQlyZXR1cm4gLUVCVVNZOwogCisJbXV0ZXhfbG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCXNrdC0+c3VzcGVuZGVkX3N0YXRlID0gc2t0LT5zdGF0ZTsKKwogCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9QTV9TVVNQRU5ELCBDU19FVkVOVF9QUklfTE9XKTsKIAlza3QtPnNvY2tldCA9IGRlYWRfc29ja2V0OwogCXNrdC0+b3BzLT5zZXRfc29ja2V0KHNrdCwgJnNrdC0+c29ja2V0KTsKIAlpZiAoc2t0LT5vcHMtPnN1c3BlbmQpCiAJCXNrdC0+b3BzLT5zdXNwZW5kKHNrdCk7CiAJc2t0LT5zdGF0ZSB8PSBTT0NLRVRfU1VTUEVORDsKLQorCW11dGV4X3VubG9jaygmc2t0LT5vcHNfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNvY2tldF9lYXJseV9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKIHsKKwltdXRleF9sb2NrKCZza3QtPm9wc19tdXRleCk7CiAJc2t0LT5zb2NrZXQgPSBkZWFkX3NvY2tldDsKIAlza3QtPm9wcy0+aW5pdChza3QpOwogCXNrdC0+b3BzLT5zZXRfc29ja2V0KHNrdCwgJnNrdC0+c29ja2V0KTsKIAlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKQogCQlza3QtPnJlc3VtZV9zdGF0dXMgPSBzb2NrZXRfc2V0dXAoc2t0LCByZXN1bWVfZGVsYXkpOworCW11dGV4X3VubG9jaygmc2t0LT5vcHNfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNvY2tldF9sYXRlX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewotCWlmICghKHNrdC0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpIHsKLQkJc2t0LT5zdGF0ZSAmPSB+U09DS0VUX1NVU1BFTkQ7CisJbXV0ZXhfbG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCXNrdC0+c3RhdGUgJj0gflNPQ0tFVF9TVVNQRU5EOworCW11dGV4X3VubG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCisJaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKKwkJcmV0dXJuIHNvY2tldF9pbnNlcnQoc2t0KTsKKworCWlmIChza3QtPnJlc3VtZV9zdGF0dXMpIHsKKwkJc29ja2V0X3NodXRkb3duKHNrdCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChza3QtPnN1c3BlbmRlZF9zdGF0ZSAhPSBza3QtPnN0YXRlKSB7CisJCWRldl9kYmcoJnNrdC0+ZGV2LAorCQkJInN1c3BlbmQgc3RhdGUgMHgleCAhPSByZXN1bWUgc3RhdGUgMHgleFxuIiwKKwkJCXNrdC0+c3VzcGVuZGVkX3N0YXRlLCBza3QtPnN0YXRlKTsKKworCQlzb2NrZXRfc2h1dGRvd24oc2t0KTsKIAkJcmV0dXJuIHNvY2tldF9pbnNlcnQoc2t0KTsKIAl9CiAKLQlpZiAoc2t0LT5yZXN1bWVfc3RhdHVzID09IDApIHsKLQkJLyoKLQkJICogRklYTUU6IG5lZWQgYSBiZXR0ZXIgY2hlY2sgaGVyZSBmb3IgY2FyZGJ1cyBjYXJkcy4KLQkJICovCi0JCWlmICh2ZXJpZnlfY2lzX2NhY2hlKHNrdCkgIT0gMCkgewotCQkJZGV2X2RiZygmc2t0LT5kZXYsICJjaXMgbWlzbWF0Y2ggLSBkaWZmZXJlbnQgY2FyZFxuIik7Ci0JCQlzb2NrZXRfcmVtb3ZlX2RyaXZlcnMoc2t0KTsKLQkJCWRlc3Ryb3lfY2lzX2NhY2hlKHNrdCk7Ci0JCQkvKgotCQkJICogV29ya2Fyb3VuZDogZ2l2ZSBEUyB0aW1lIHRvIHNjaGVkdWxlIHJlbW92YWwuCi0JCQkgKiBSZW1vdmUgbWUgb25jZSB0aGUgMTAwbXMgZGVsYXkgaXMgZWxpbWluYXRlZAotCQkJICogaW4gZHMuYwotCQkJICovCi0JCQltc2xlZXAoMjAwKTsKLQkJCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9DQVJEX0lOU0VSVElPTiwgQ1NfRVZFTlRfUFJJX0xPVyk7Ci0JCX0gZWxzZSB7Ci0JCQlkZXZfZGJnKCZza3QtPmRldiwgImNpcyBtYXRjaGVzIGNhY2hlXG4iKTsKLQkJCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9QTV9SRVNVTUUsIENTX0VWRU5UX1BSSV9MT1cpOwotCQl9Ci0JfSBlbHNlIHsKLQkJc29ja2V0X3NodXRkb3duKHNrdCk7CisjaWZkZWYgQ09ORklHX0NBUkRCVVMKKwlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSB7CisJCS8qIFdlIGNhbid0IGJlIHN1cmUgdGhlIENhcmRCdXMgY2FyZCBpcyB0aGUgc2FtZQorCQkgKiBhcyB0aGUgb25lIHByZXZpb3VzbHkgaW5zZXJ0ZWQuIFRoZXJlZm9yZSwgcmVtb3ZlCisJCSAqIGFuZCByZS1hZGQuLi4gKi8KKwkJY2JfZnJlZShza3QpOworCQljYl9hbGxvYyhza3QpOworCQlyZXR1cm4gMDsKIAl9CisjZW5kaWYKIAotCXNrdC0+c3RhdGUgJj0gflNPQ0tFVF9TVVNQRU5EOwotCisJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX1BNX1JFU1VNRSwgQ1NfRVZFTlRfUFJJX0xPVyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY3MiwyMCArNjg5LDI2IEBACiAKIAljb21wbGV0ZSgmc2t0LT50aHJlYWRfZG9uZSk7CiAKKwkvKiB3YWl0IGZvciB1c2Vyc3BhY2UgdG8gY2F0Y2ggdXAgKi8KKwltc2xlZXAoMjUwKTsKKwogCXNldF9mcmVlemFibGUoKTsKIAlmb3IgKDs7KSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXVuc2lnbmVkIGludCBldmVudHM7CisJCXVuc2lnbmVkIGludCBzeXNmc19ldmVudHM7CiAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2t0LT50aHJlYWRfbG9jaywgZmxhZ3MpOwogCQlldmVudHMgPSBza3QtPnRocmVhZF9ldmVudHM7CiAJCXNrdC0+dGhyZWFkX2V2ZW50cyA9IDA7CisJCXN5c2ZzX2V2ZW50cyA9IHNrdC0+c3lzZnNfZXZlbnRzOworCQlza3QtPnN5c2ZzX2V2ZW50cyA9IDA7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNrdC0+dGhyZWFkX2xvY2ssIGZsYWdzKTsKIAorCQltdXRleF9sb2NrKCZza3QtPnNrdF9tdXRleCk7CiAJCWlmIChldmVudHMpIHsKLQkJCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKIAkJCWlmIChldmVudHMgJiBTU19ERVRFQ1QpCiAJCQkJc29ja2V0X2RldGVjdF9jaGFuZ2Uoc2t0KTsKIAkJCWlmIChldmVudHMgJiBTU19CQVRERUFEKQpAQCAtNjk0LDEwICs3MTcsMzkgQEAKIAkJCQlzZW5kX2V2ZW50KHNrdCwgQ1NfRVZFTlRfQkFUVEVSWV9MT1csIENTX0VWRU5UX1BSSV9MT1cpOwogCQkJaWYgKGV2ZW50cyAmIFNTX1JFQURZKQogCQkJCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9SRUFEWV9DSEFOR0UsIENTX0VWRU5UX1BSSV9MT1cpOwotCQkJbXV0ZXhfdW5sb2NrKCZza3QtPnNrdF9tdXRleCk7Ci0JCQljb250aW51ZTsKIAkJfQogCisJCWlmIChzeXNmc19ldmVudHMpIHsKKwkJCWlmIChzeXNmc19ldmVudHMgJiBQQ01DSUFfVUVWRU5UX0VKRUNUKQorCQkJCXNvY2tldF9yZW1vdmUoc2t0KTsKKwkJCWlmIChzeXNmc19ldmVudHMgJiBQQ01DSUFfVUVWRU5UX0lOU0VSVCkKKwkJCQlzb2NrZXRfaW5zZXJ0KHNrdCk7CisJCQlpZiAoKHN5c2ZzX2V2ZW50cyAmIFBDTUNJQV9VRVZFTlRfUkVTVU1FKSAmJgorCQkJCSEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSkgeworCQkJCXJldCA9IHNvY2tldF9yZXN1bWUoc2t0KTsKKwkJCQlpZiAoIXJldCAmJiBza3QtPmNhbGxiYWNrKQorCQkJCQlza3QtPmNhbGxiYWNrLT5yZXN1bWUoc2t0KTsKKwkJCX0KKwkJCWlmICgoc3lzZnNfZXZlbnRzICYgUENNQ0lBX1VFVkVOVF9TVVNQRU5EKSAmJgorCQkJCSEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSkgeworCQkJCWlmIChza3QtPmNhbGxiYWNrKQorCQkJCQlyZXQgPSBza3QtPmNhbGxiYWNrLT5zdXNwZW5kKHNrdCk7CisJCQkJZWxzZQorCQkJCQlyZXQgPSAwOworCQkJCWlmICghcmV0KQorCQkJCQlzb2NrZXRfc3VzcGVuZChza3QpOworCQkJfQorCQkJaWYgKChzeXNmc19ldmVudHMgJiBQQ01DSUFfVUVWRU5UX1JFUVVFUlkpICYmCisJCQkJIShza3QtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpKSB7CisJCQkJaWYgKCFyZXQgJiYgc2t0LT5jYWxsYmFjaykKKwkJCQkJc2t0LT5jYWxsYmFjay0+cmVxdWVyeShza3QpOworCQkJfQorCQl9CisJCW11dGV4X3VubG9jaygmc2t0LT5za3RfbXV0ZXgpOworCisJCWlmIChldmVudHMgfHwgc3lzZnNfZXZlbnRzKQorCQkJY29udGludWU7CisKIAkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKIAkJCWJyZWFrOwogCkBAIC03MDcsNiArNzU5LDEzIEBACiAJLyogbWFrZSBzdXJlIHdlIGFyZSBydW5uaW5nIGJlZm9yZSB3ZSBleGl0ICovCiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAorCS8qIHNodXQgZG93biBzb2NrZXQsIGlmIGEgZGV2aWNlIGlzIHN0aWxsIHByZXNlbnQgKi8KKwlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSB7CisJCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKKwkJc29ja2V0X3JlbW92ZShza3QpOworCQltdXRleF91bmxvY2soJnNrdC0+c2t0X211dGV4KTsKKwl9CisKIAkvKiByZW1vdmUgZnJvbSB0aGUgZGV2aWNlIGNvcmUgKi8KIAlwY2NhcmRfc3lzZnNfcmVtb3ZlX3NvY2tldCgmc2t0LT5kZXYpOwogCWRldmljZV91bnJlZ2lzdGVyKCZza3QtPmRldik7CkBAIC03MzIsNiArNzkxLDMxIEBACiB9IC8qIHBjbWNpYV9wYXJzZV9ldmVudHMgKi8KIEVYUE9SVF9TWU1CT0wocGNtY2lhX3BhcnNlX2V2ZW50cyk7CiAKKy8qKgorICogcGNtY2lhX3BhcnNlX3VldmVudHMoKSAtIHRlbGwgcGNjYXJkZCB0byBpc3N1ZSBtYW51YWwgY29tbWFuZHMKKyAqIEBzOgkJdGhlIFBDTUNJQSBzb2NrZXQgd2Ugd2FuJ3QgdG8gY29tbWFuZAorICogQGV2ZW50czoJZXZlbnRzIHRvIHBhc3MgdG8gcGNjYXJkZAorICoKKyAqIHVzZXJzcGFjZS1pc3N1ZWQgaW5zZXJ0LCBlamVjdCwgc3VzcGVuZCBhbmQgcmVzdW1lIGNvbW1hbmRzIG11c3QgYmUKKyAqIGhhbmRsZWQgYnkgcGNjYXJkZCB0byBhdm9pZCBhbnkgc3lzZnMtcmVsYXRlZCBkZWFkbG9ja3MuIFZhbGlkIGV2ZW50cworICogYXJlIFBDTUNJQV9VRVZFTlRfRUpFQ1QgKGZvciBlamVjdCksIFBDTUNJQV9VRVZFTlRfX0lOU0VSVCAoZm9yIGluc2VydCksCisgKiBQQ01DSUFfVUVWRU5UX1JFU1VNRSAoZm9yIHJlc3VtZSksIFBDTUNJQV9VRVZFTlRfU1VTUEVORCAoZm9yIHN1c3BlbmQpCisgKiBhbmQgUENNQ0lBX1VFVkVOVF9SRVFVRVJZIChmb3IgcmUtcXVlcnlpbmcgdGhlIFBDTUNJQSBjYXJkKS4KKyAqLwordm9pZCBwY21jaWFfcGFyc2VfdWV2ZW50cyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdV9pbnQgZXZlbnRzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZGV2X2RiZygmcy0+ZGV2LCAicGFyc2VfdWV2ZW50czogZXZlbnRzICUwOHhcbiIsIGV2ZW50cyk7CisJaWYgKHMtPnRocmVhZCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+dGhyZWFkX2xvY2ssIGZsYWdzKTsKKwkJcy0+c3lzZnNfZXZlbnRzIHw9IGV2ZW50czsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+dGhyZWFkX2xvY2ssIGZsYWdzKTsKKworCQl3YWtlX3VwX3Byb2Nlc3Mocy0+dGhyZWFkKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHBjbWNpYV9wYXJzZV91ZXZlbnRzKTsKKwogCiAvKiByZWdpc3RlciBwY21jaWFfY2FsbGJhY2sgKi8KIGludCBwY2NhcmRfcmVnaXN0ZXJfcGNtY2lhKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcGNtY2lhX2NhbGxiYWNrICpjKQpAQCAtNzk2LDcgKzg4MCwxMCBAQAogCQkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMLCBDU19FVkVOVF9QUklfTE9XKTsKIAkJCWlmIChza3QtPmNhbGxiYWNrKQogCQkJCXNrdC0+Y2FsbGJhY2stPnN1c3BlbmQoc2t0KTsKLQkJCWlmIChzb2NrZXRfcmVzZXQoc2t0KSA9PSAwKSB7CisJCQltdXRleF9sb2NrKCZza3QtPm9wc19tdXRleCk7CisJCQlyZXQgPSBzb2NrZXRfcmVzZXQoc2t0KTsKKwkJCW11dGV4X3VubG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCQkJaWYgKHJldCA9PSAwKSB7CiAJCQkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX0NBUkRfUkVTRVQsIENTX0VWRU5UX1BSSV9MT1cpOwogCQkJCWlmIChza3QtPmNhbGxiYWNrKQogCQkJCQlza3QtPmNhbGxiYWNrLT5yZXN1bWUoc2t0KTsKQEAgLTgxMiwxMjEgKzg5OSw2IEBACiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZXNldF9jYXJkKTsKIAogCi0vKiBUaGVzZSBzaHV0IGRvd24gb3Igd2FrZSB1cCBhIHNvY2tldC4gIFRoZXkgYXJlIHNvcnQgb2YgdXNlcgotICogaW5pdGlhdGVkIHZlcnNpb25zIG9mIHRoZSBBUE0gc3VzcGVuZCBhbmQgcmVzdW1lIGFjdGlvbnMuCi0gKi8KLWludCBwY21jaWFfc3VzcGVuZF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCi17Ci0JaW50IHJldDsKLQotCWRldl9kYmcoJnNrdC0+ZGV2LCAic3VzcGVuZGluZyBzb2NrZXRcbiIpOwotCi0JbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOwotCWRvIHsKLQkJaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgewotCQkJcmV0ID0gLUVOT0RFVjsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChza3QtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpIHsKLQkJCXJldCA9IC1FUEVSTTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChza3QtPmNhbGxiYWNrKSB7Ci0JCQlyZXQgPSBza3QtPmNhbGxiYWNrLT5zdXNwZW5kKHNrdCk7Ci0JCQlpZiAocmV0KQotCQkJCWJyZWFrOwotCQl9Ci0JCXJldCA9IHNvY2tldF9zdXNwZW5kKHNrdCk7Ci0JfSB3aGlsZSAoMCk7Ci0JbXV0ZXhfdW5sb2NrKCZza3QtPnNrdF9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfSAvKiBzdXNwZW5kX2NhcmQgKi8KLUVYUE9SVF9TWU1CT0wocGNtY2lhX3N1c3BlbmRfY2FyZCk7Ci0KLQotaW50IHBjbWNpYV9yZXN1bWVfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQotewotCWludCByZXQ7Ci0KLQlkZXZfZGJnKCZza3QtPmRldiwgIndha2luZyB1cCBzb2NrZXRcbiIpOwotCi0JbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOwotCWRvIHsKLQkJaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgewotCQkJcmV0ID0gLUVOT0RFVjsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChza3QtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpIHsKLQkJCXJldCA9IC1FUEVSTTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJldCA9IHNvY2tldF9yZXN1bWUoc2t0KTsKLQkJaWYgKCFyZXQgJiYgc2t0LT5jYWxsYmFjaykKLQkJCXNrdC0+Y2FsbGJhY2stPnJlc3VtZShza3QpOwotCX0gd2hpbGUgKDApOwotCW11dGV4X3VubG9jaygmc2t0LT5za3RfbXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0gLyogcmVzdW1lX2NhcmQgKi8KLUVYUE9SVF9TWU1CT0wocGNtY2lhX3Jlc3VtZV9jYXJkKTsKLQotCi0vKiBUaGVzZSBoYW5kbGUgdXNlciByZXF1ZXN0cyB0byBlamVjdCBvciBpbnNlcnQgYSBjYXJkLiAqLwotaW50IHBjbWNpYV9lamVjdF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCi17Ci0JaW50IHJldDsKLQotCWRldl9kYmcoJnNrdC0+ZGV2LCAidXNlciBlamVjdCByZXF1ZXN0XG4iKTsKLQotCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKLQlkbyB7Ci0JCWlmICghKHNrdC0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpIHsKLQkJCXJldCA9IC1FTk9ERVY7Ci0JCQlicmVhazsKLQkJfQotCi0JCXJldCA9IHNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9FSkVDVElPTl9SRVFVRVNULCBDU19FVkVOVF9QUklfTE9XKTsKLQkJaWYgKHJldCAhPSAwKSB7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlzb2NrZXRfcmVtb3ZlKHNrdCk7Ci0JCXJldCA9IDA7Ci0JfSB3aGlsZSAoMCk7Ci0JbXV0ZXhfdW5sb2NrKCZza3QtPnNrdF9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfSAvKiBlamVjdF9jYXJkICovCi1FWFBPUlRfU1lNQk9MKHBjbWNpYV9lamVjdF9jYXJkKTsKLQotCi1pbnQgcGNtY2lhX2luc2VydF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCi17Ci0JaW50IHJldDsKLQotCWRldl9kYmcoJnNrdC0+ZGV2LCAidXNlciBpbnNlcnQgcmVxdWVzdFxuIik7Ci0KLQltdXRleF9sb2NrKCZza3QtPnNrdF9tdXRleCk7Ci0JZG8gewotCQlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSB7Ci0JCQlyZXQgPSAtRUJVU1k7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc29ja2V0X2luc2VydChza3QpID09IC1FTk9ERVYpIHsKLQkJCXJldCA9IC1FTk9ERVY7Ci0JCQlicmVhazsKLQkJfQotCQlyZXQgPSAwOwotCX0gd2hpbGUgKDApOwotCW11dGV4X3VubG9jaygmc2t0LT5za3RfbXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0gLyogaW5zZXJ0X2NhcmQgKi8KLUVYUE9SVF9TWU1CT0wocGNtY2lhX2luc2VydF9jYXJkKTsKLQotCiBzdGF0aWMgaW50IHBjbWNpYV9zb2NrZXRfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oIGIvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaAppbmRleCAzYmMwMmQ1Li5mOTU4NjRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKQEAgLTg3LDM3ICs4NywxMSBAQAogI2RlZmluZSBTT0NLRVRfQ0FSREJVUwkJMHg4MDAwCiAjZGVmaW5lIFNPQ0tFVF9DQVJEQlVTX0NPTkZJRwkweDEwMDAwCiAKLXN0YXRpYyBpbmxpbmUgaW50IGNzX3NvY2tldF9nZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKLXsKLQlpbnQgcmV0OwotCi0JV0FSTl9PTihza3QtPnN0YXRlICYgU09DS0VUX0lOVVNFKTsKLQotCXJldCA9IHRyeV9tb2R1bGVfZ2V0KHNrdC0+b3duZXIpOwotCWlmIChyZXQpCi0JCXNrdC0+c3RhdGUgfD0gU09DS0VUX0lOVVNFOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjc19zb2NrZXRfcHV0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCi17Ci0JaWYgKHNrdC0+c3RhdGUgJiBTT0NLRVRfSU5VU0UpIHsKLQkJc2t0LT5zdGF0ZSAmPSB+U09DS0VUX0lOVVNFOwotCQltb2R1bGVfcHV0KHNrdC0+b3duZXIpOwotCX0KLX0KLQogCiAvKgogICogU3R1ZmYgaW50ZXJuYWwgdG8gbW9kdWxlICJwY21jaWFfY29yZSI6CiAgKi8KIAotLyogY2lzdHBsLmMgKi8KLWludCB2ZXJpZnlfY2lzX2NhY2hlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLQotLyogcnNyY19tZ3IuYyAqLwotdm9pZCByZWxlYXNlX3Jlc291cmNlX2RiKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLQogLyogc29ja2V0X3N5c2ZzLmMgKi8KIGV4dGVybiBpbnQgcGNjYXJkX3N5c2ZzX2FkZF9zb2NrZXQoc3RydWN0IGRldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHBjY2FyZF9zeXNmc19yZW1vdmVfc29ja2V0KHN0cnVjdCBkZXZpY2UgKmRldik7CkBAIC0xMjUsOCArOTksNiBAQAogLyogY2FyZGJ1cy5jICovCiBpbnQgY2JfYWxsb2Moc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwogdm9pZCBjYl9mcmVlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLWludCByZWFkX2NiX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IHNwYWNlLCB1X2ludCBhZGRyLCB1X2ludCBsZW4sCi0JCXZvaWQgKnB0cik7CiAKIAogCkBAIC0xMzgsNyArMTEwLDggQEAKIAlzdHJ1Y3QgbW9kdWxlCSpvd25lcjsKIAlpbnQJCSgqZXZlbnQpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKIAkJCQkgIGV2ZW50X3QgZXZlbnQsIGludCBwcmlvcml0eSk7Ci0Jdm9pZAkJKCpyZXF1ZXJ5KSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBuZXdfY2lzKTsKKwl2b2lkCQkoKnJlcXVlcnkpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CisJaW50CQkoKnZhbGlkYXRlKSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCAqaSk7CiAJaW50CQkoKnN1c3BlbmQpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CiAJaW50CQkoKnJlc3VtZSkgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKIH07CkBAIC0xNTEsMTYgKzEyNCwzNSBAQAogaW50IHBjY2FyZF9yZWdpc3Rlcl9wY21jaWEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCBwY21jaWFfY2FsbGJhY2sgKmMpOwogc3RydWN0IHBjbWNpYV9zb2NrZXQgKnBjbWNpYV9nZXRfc29ja2V0X2J5X25yKHVuc2lnbmVkIGludCBucik7CiAKLWludCBwY21jaWFfc3VzcGVuZF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwotaW50IHBjbWNpYV9yZXN1bWVfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKLQotaW50IHBjbWNpYV9lamVjdF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwotaW50IHBjbWNpYV9pbnNlcnRfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKK3ZvaWQgcGNtY2lhX3BhcnNlX3VldmVudHMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2tldCwgdW5zaWduZWQgaW50IGV2ZW50cyk7CisjZGVmaW5lIFBDTUNJQV9VRVZFTlRfRUpFQ1QJMHgwMDAxCisjZGVmaW5lIFBDTUNJQV9VRVZFTlRfSU5TRVJUCTB4MDAwMgorI2RlZmluZSBQQ01DSUFfVUVWRU5UX1NVU1BFTkQJMHgwMDA0CisjZGVmaW5lIFBDTUNJQV9VRVZFTlRfUkVTVU1FCTB4MDAwOAorI2RlZmluZSBQQ01DSUFfVUVWRU5UX1JFUVVFUlkJMHgwMDEwCiAKIHN0cnVjdCBwY21jaWFfc29ja2V0ICpwY21jaWFfZ2V0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIHZvaWQgcGNtY2lhX3B1dF9zb2NrZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CiAKKy8qCisgKiBTdHVmZiBpbnRlcm5hbCB0byBtb2R1bGUgInBjbWNpYSIuCisgKi8KKy8qIGRzLmMgKi8KK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgcGNtY2lhX2J1c190eXBlOworCisvKiBwY21jaWFfcmVzb3VyY2UuYyAqLworZXh0ZXJuIGludCBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CitleHRlcm4gaW50IHBjbWNpYV92YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSAqcGNtY2lhX2ZpbmRfbWVtX3JlZ2lvbih1X2xvbmcgYmFzZSwKKwkJCQkJICAgICAgIHVfbG9uZyBudW0sCisJCQkJCSAgICAgICB1X2xvbmcgYWxpZ24sCisJCQkJCSAgICAgICBpbnQgbG93LAorCQkJCQkgICAgICAgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworCisKIC8qIGNpc3RwbC5jICovCitleHRlcm4gc3RydWN0IGJpbl9hdHRyaWJ1dGUgcGNjYXJkX2Npc19hdHRyOworCiBpbnQgcGNtY2lhX3JlYWRfY2lzX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IGF0dHIsCiAJCQl1X2ludCBhZGRyLCB1X2ludCBsZW4sIHZvaWQgKnB0cik7CiB2b2lkIHBjbWNpYV93cml0ZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgYXR0ciwKQEAgLTE3Miw4ICsxNjQsOCBAQAogaW50IHBjbWNpYV9yZXBsYWNlX2NpcyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKIAkJICAgICAgIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKTsKIGludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgKmNvdW50KTsKK2ludCB2ZXJpZnlfY2lzX2NhY2hlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKIAotLyogbG9vcCBvdmVyIENJUyBlbnRyaWVzICovCiBpbnQgcGNjYXJkX2xvb3BfdHVwbGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKIAkJICAgICAgY2lzZGF0YV90IGNvZGUsIGNpc3BhcnNlX3QgKnBhcnNlLCB2b2lkICpwcml2X2RhdGEsCiAJCSAgICAgIGludCAoKmxvb3BfdHVwbGUpICh0dXBsZV90ICp0dXBsZSwKQEAgLTE4OSwzNSArMTgxLDggQEAKIGludCBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHR1cGxlX3QgKnR1cGxlKTsKIAogCi0vKiByc3JjX21nci5jICovCi1pbnQgcGNtY2lhX3ZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7Ci1zdHJ1Y3QgcmVzb3VyY2UgKnBjbWNpYV9maW5kX2lvX3JlZ2lvbih1bnNpZ25lZCBsb25nIGJhc2UsCi0JCQkJICAgICAgIGludCBudW0sCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24sCi0JCQkJICAgICAgIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLWludCBwY21jaWFfYWRqdXN0X2lvX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKLQkJCSAgICB1bnNpZ25lZCBsb25nIHJfc3RhcnQsCi0JCQkgICAgdW5zaWduZWQgbG9uZyByX2VuZCwKLQkJCSAgICBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7Ci1zdHJ1Y3QgcmVzb3VyY2UgKnBjbWNpYV9maW5kX21lbV9yZWdpb24odV9sb25nIGJhc2UsCi0JCQkJCXVfbG9uZyBudW0sCi0JCQkJCXVfbG9uZyBhbGlnbiwKLQkJCQkJaW50IGxvdywKLQkJCQkJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotCi0vKgotICogU3R1ZmYgaW50ZXJuYWwgdG8gbW9kdWxlICJwY21jaWEiLgotICovCi0vKiBkcy5jICovCi1leHRlcm4gc3RydWN0IGJ1c190eXBlIHBjbWNpYV9idXNfdHlwZTsKLQotLyogcGNtY2lhX3Jlc291cmNlLmMgKi8KLWV4dGVybiBpbnQgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwotCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9JT0NUTAogLyogZHMuYyAqLwotZXh0ZXJuIHNwaW5sb2NrX3QgcGNtY2lhX2Rldl9saXN0X2xvY2s7Ci0KIGV4dGVybiBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhX2dldF9kZXYoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIGV4dGVybiB2b2lkIHBjbWNpYV9wdXRfZGV2KHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2RiMXh4eF9zcy5jIGIvZHJpdmVycy9wY21jaWEvZGIxeHh4X3NzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg4OWNmMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNtY2lhL2RiMXh4eF9zcy5jCkBAIC0wLDAgKzEsNjIzIEBACisvKgorICogUENNQ0lBIHNvY2tldCBjb2RlIGZvciB0aGUgQWxjaGVteSBEYjF4eHgvUGIxeHh4IGJvYXJkcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTWFudWVsIExhdXNzIDxtYW51ZWwubGF1c3NAZ21haWwuY29tPgorICoKKyAqLworCisvKiBUaGlzIGlzIGEgZmFpcmx5IGdlbmVyaWMgUENNQ0lBIHNvY2tldCBkcml2ZXIgc3VpdGFibGUgZm9yIHRoZQorICogZm9sbG93aW5nIEFsY2hlbXkgRGV2ZWxvcG1lbnQgYm9hcmRzOgorICogIERiMTAwMCwgRGIvUGIxNTAwLCBEYi9QYjExMDAsIERiL1BiMTU1MCwgRGIvUGIxMjAwLgorICoKKyAqIFRoZSBEYjEwMDAgaXMgdXNlZCBhcyBhIHJlZmVyZW5jZTogIFBlci1zb2NrZXQgY2FyZC0sIGNhcmRkZXRlY3QtIGFuZAorICogIHN0YXR1c2NoYW5nZSBJUlFzIGNvbm5lY3RlZCB0byBTb0MgR1BJT3MsIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcgorICogIGJpdHMgYXJyYW5nZWQgaW4gcGVyLXNvY2tldCBncm91cHMgaW4gYW4gZXh0ZXJuYWwgUExELiAgQWxsIGJvYXJkcworICogIGxpc3RlZCBoZXJlIHVzZSB0aGlzIGxheW91dCwgaW5jbHVkaW5nIGJpdCBwb3NpdGlvbnMgYW5kIG1lYW5pbmdzLgorICogIE9mIGNvdXJzZSB0aGVyZSBhcmUgZXhjZXB0aW9ucyBpbiBsYXRlciBib2FyZHM6CisgKgorICoJLSBQYjExMDAvUGIxNTAwOiAgc2luZ2xlIHNvY2tldCBvbmx5OyB2b2x0YWdlIGtleSBiaXRzIFZTIGFyZQorICoJCQkgIGF0IFNUQVRVU1s1OjRdIChpbnN0ZWFkIG9mIFNUQVRVU1sxOjBdKS4KKyAqCS0gQXUxMjAwLWJhc2VkOgkgIGFkZGl0aW9uYWwgY2FyZC1lamVjdCBpcnFzLCBpcnFzIG5vdCBncGlvcyEKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvc3MuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1kYjF4MDAvYmNzci5oPgorCisjZGVmaW5lIE1FTV9NQVBfU0laRQkweDQwMDAwMAorI2RlZmluZSBJT19NQVBfU0laRQkweDEwMDAKKworc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgeworCXN0cnVjdCBwY21jaWFfc29ja2V0CXNvY2tldDsKKwlpbnQJCW5yOwkJLyogc29ja2V0IG51bWJlciAqLworCXZvaWQJCSp2aXJ0X2lvOworCisJLyogdGhlICJwc2V1ZG8iIGFkZHJlc3NlcyBvZiB0aGUgUENNQ0lBIHNwYWNlLiAqLworCXBoeXNfYWRkcl90CXBoeXNfaW87CisJcGh5c19hZGRyX3QJcGh5c19hdHRyOworCXBoeXNfYWRkcl90CXBoeXNfbWVtOworCisJLyogcHJldmlvdXMgZmxhZ3MgZm9yIHNldF9zb2NrZXQoKSAqLworCXVuc2lnbmVkIGludCBvbGRfZmxhZ3M7CisKKwkvKiBpbnRlcnJ1cHQgc291cmNlczogbGludXggaXJxIG51bWJlcnMhICovCisJaW50CWluc2VydF9pcnE7CS8qIGRlZmF1bHQgY2FyZGRldGVjdCBpcnEgKi8KKwlpbnQJc3RzY2hnX2lycTsJLyogY2FyZC1zdGF0dXMtY2hhbmdlIGlycSAqLworCWludAljYXJkX2lycTsJLyogY2FyZCBpcnEgKi8KKwlpbnQJZWplY3RfaXJxOwkvKiBkYjEyMDAvcGIxMjAwIGhhdmUgdGhlc2UgKi8KKworI2RlZmluZSBCT0FSRF9UWVBFX0RFRkFVTFQJMAkvKiBtb3N0IGJvYXJkcyAqLworI2RlZmluZSBCT0FSRF9UWVBFX0RCMTIwMAkxCS8qIElSUXMgYXJlbid0IGdwaW9zICovCisjZGVmaW5lIEJPQVJEX1RZUEVfUEIxMTAwCTIJLyogVlMgYml0cyBzbGlnaHRseSBkaWZmZXJlbnQgKi8KKwlpbnQJYm9hcmRfdHlwZTsKK307CisKKyNkZWZpbmUgdG9fZGIxeF9zb2NrZXQoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrLCBzb2NrZXQpCisKKy8qIERCL1BCMTIwMDogY2hlY2sgQ1BMRCBTSUdTVEFUVVMgcmVnaXN0ZXIgYml0IDEwLzEyICovCitzdGF0aWMgaW50IGRiMTIwMF9jYXJkX2luc2VydGVkKHN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrKQoreworCXVuc2lnbmVkIHNob3J0IHNpZ3N0YXQ7CisKKwlzaWdzdGF0ID0gYmNzcl9yZWFkKEJDU1JfU0lHU1RBVCk7CisJcmV0dXJuIHNpZ3N0YXQgJiAxIDw8ICg4ICsgMiAqIHNvY2stPm5yKTsKK30KKworLyogY2FyZGRldGVjdCBncGlvOiBsb3ctYWN0aXZlICovCitzdGF0aWMgaW50IGRiMTAwMF9jYXJkX2luc2VydGVkKHN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrKQoreworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoaXJxX3RvX2dwaW8oc29jay0+aW5zZXJ0X2lycSkpOworfQorCitzdGF0aWMgaW50IGRiMXhfY2FyZF9pbnNlcnRlZChzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jaykKK3sKKwlzd2l0Y2ggKHNvY2stPmJvYXJkX3R5cGUpIHsKKwljYXNlIEJPQVJEX1RZUEVfREIxMjAwOgorCQlyZXR1cm4gZGIxMjAwX2NhcmRfaW5zZXJ0ZWQoc29jayk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGRiMTAwMF9jYXJkX2luc2VydGVkKHNvY2spOworCX0KK30KKworLyogU1RTQ0hHIHRlbmRzIHRvIGJvdW5jZSBoZWF2aWx5IHdoZW4gY2FyZHMgYXJlIGluc2VydGVkL2VqZWN0ZWQuCisgKiBUbyBhdm9pZCB0aGlzLCB0aGUgaW50ZXJydXB0IGlzIG5vcm1hbGx5IGRpc2FibGVkIGFuZCBvbmx5IGVuYWJsZWQKKyAqIGFmdGVyIHJlc2V0IHRvIGEgY2FyZCBoYXMgYmVlbiBkZS1hc3NlcnRlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNldF9zdHNjaGcoc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2ssIGludCBlbikKK3sKKwlpZiAoc29jay0+c3RzY2hnX2lycSAhPSAtMSkgeworCQlpZiAoZW4pCisJCQllbmFibGVfaXJxKHNvY2stPnN0c2NoZ19pcnEpOworCQllbHNlCisJCQlkaXNhYmxlX2lycShzb2NrLT5zdHNjaGdfaXJxKTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkYjEwMDBfcGNtY2lhX2NkaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2sgPSBkYXRhOworCisJcGNtY2lhX3BhcnNlX2V2ZW50cygmc29jay0+c29ja2V0LCBTU19ERVRFQ1QpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZGIxMDAwX3BjbWNpYV9zdHNjaGdpcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jayA9IGRhdGE7CisKKwlwY21jaWFfcGFyc2VfZXZlbnRzKCZzb2NrLT5zb2NrZXQsIFNTX1NUU0NIRyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkYjEyMDBfcGNtY2lhX2NkaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2sgPSBkYXRhOworCisJLyogRGIvUGIxMjAwIGhhdmUgc2VwYXJhdGUgcGVyLXNvY2tldCBpbnNlcnRpb24gYW5kIGVqZWN0aW9uCisJICogaW50ZXJydXB0cyB3aGljaCBzdGF5IGFzc2VydGVkIGFzIGxvbmcgYXMgdGhlIGNhcmQgaXMKKwkgKiBpbnNlcnRlZC9taXNzaW5nLiAgVGhlIG9uZSB3aGljaCBjYXVzZWQgdXMgdG8gYmUgY2FsbGVkCisJICogbmVlZHMgdG8gYmUgZGlzYWJsZWQgYW5kIHRoZSBvdGhlciBvbmUgZW5hYmxlZC4KKwkgKi8KKwlpZiAoaXJxID09IHNvY2stPmluc2VydF9pcnEpIHsKKwkJZGlzYWJsZV9pcnFfbm9zeW5jKHNvY2stPmluc2VydF9pcnEpOworCQllbmFibGVfaXJxKHNvY2stPmVqZWN0X2lycSk7CisJfSBlbHNlIHsKKwkJZGlzYWJsZV9pcnFfbm9zeW5jKHNvY2stPmVqZWN0X2lycSk7CisJCWVuYWJsZV9pcnEoc29jay0+aW5zZXJ0X2lycSk7CisJfQorCisJcGNtY2lhX3BhcnNlX2V2ZW50cygmc29jay0+c29ja2V0LCBTU19ERVRFQ1QpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGRiMXhfcGNtY2lhX3NldHVwX2lycXMoc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2spCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHNvY2stPnN0c2NoZ19pcnEgIT0gLTEpIHsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoc29jay0+c3RzY2hnX2lycSwgZGIxMDAwX3BjbWNpYV9zdHNjaGdpcnEsCisJCQkJICAwLCAicGNtY2lhX3N0c2NoZyIsIHNvY2spOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBEYi9QYjEyMDAgaGF2ZSBzZXBhcmF0ZSBwZXItc29ja2V0IGluc2VydGlvbiBhbmQgZWplY3Rpb24KKwkgKiBpbnRlcnJ1cHRzLCB3aGljaCBzaG91bGQgc2hvdyBlZGdlIGJlaGF2aW91ciBidXQgZG9uJ3QuCisJICogU28gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdW50aWwgYm90aCBpbnNlcnRpb24gYW5kCisJICogZWplY3Rpb24gaGFuZGxlciBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBhbmQgdGhlIGN1cnJlbnRseQorCSAqIGFjdGl2ZSBvbmUgZGlzYWJsZWQuCisJICovCisJaWYgKHNvY2stPmJvYXJkX3R5cGUgPT0gQk9BUkRfVFlQRV9EQjEyMDApIHsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJCXJldCA9IHJlcXVlc3RfaXJxKHNvY2stPmluc2VydF9pcnEsIGRiMTIwMF9wY21jaWFfY2RpcnEsCisJCQkJICBJUlFGX0RJU0FCTEVELCAicGNtY2lhX2luc2VydCIsIHNvY2spOworCQlpZiAocmV0KQorCQkJZ290byBvdXQxOworCisJCXJldCA9IHJlcXVlc3RfaXJxKHNvY2stPmVqZWN0X2lycSwgZGIxMjAwX3BjbWNpYV9jZGlycSwKKwkJCQkgIElSUUZfRElTQUJMRUQsICJwY21jaWFfZWplY3QiLCBzb2NrKTsKKwkJaWYgKHJldCkgeworCQkJZnJlZV9pcnEoc29jay0+aW5zZXJ0X2lycSwgc29jayk7CisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCQlnb3RvIG91dDE7CisJCX0KKworCQkvKiBkaXNhYmxlIHRoZSBjdXJyZW50bHkgYWN0aXZlIG9uZSAqLworCQlpZiAoZGIxMjAwX2NhcmRfaW5zZXJ0ZWQoc29jaykpCisJCQlkaXNhYmxlX2lycV9ub3N5bmMoc29jay0+aW5zZXJ0X2lycSk7CisJCWVsc2UKKwkJCWRpc2FibGVfaXJxX25vc3luYyhzb2NrLT5lamVjdF9pcnEpOworCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9IGVsc2UgeworCQkvKiBhbGwgb3RoZXIgKG9sZGVyKSBEYjF4MDAgYm9hcmRzIHVzZSBhIEdQSU8gdG8gc2hvdworCQkgKiBjYXJkIGRldGVjdGlvbiBzdGF0dXM6ICB1c2UgYm90aC1lZGdlIHRyaWdnZXJzLgorCQkgKi8KKwkJc2V0X2lycV90eXBlKHNvY2stPmluc2VydF9pcnEsIElSUV9UWVBFX0VER0VfQk9USCk7CisJCXJldCA9IHJlcXVlc3RfaXJxKHNvY2stPmluc2VydF9pcnEsIGRiMTAwMF9wY21jaWFfY2RpcnEsCisJCQkJICAwLCAicGNtY2lhX2NhcmRkZXRlY3QiLCBzb2NrKTsKKworCQlpZiAocmV0KQorCQkJZ290byBvdXQxOworCX0KKworCXJldHVybiAwOwkvKiBhbGwgZG9uZSAqLworCitvdXQxOgorCWlmIChzb2NrLT5zdHNjaGdfaXJxICE9IC0xKQorCQlmcmVlX2lycShzb2NrLT5zdHNjaGdfaXJxLCBzb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRiMXhfcGNtY2lhX2ZyZWVfaXJxcyhzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jaykKK3sKKwlpZiAoc29jay0+c3RzY2hnX2lycSAhPSAtMSkKKwkJZnJlZV9pcnEoc29jay0+c3RzY2hnX2lycSwgc29jayk7CisKKwlmcmVlX2lycShzb2NrLT5pbnNlcnRfaXJxLCBzb2NrKTsKKwlpZiAoc29jay0+ZWplY3RfaXJxICE9IC0xKQorCQlmcmVlX2lycShzb2NrLT5lamVjdF9pcnEsIHNvY2spOworfQorCisvKgorICogY29uZmlndXJlIGEgUENNQ0lBIHNvY2tldCBvbiB0aGUgRGIxeDAwIHNlcmllcyBvZiBib2FyZHMgKGFuZAorICogY29tcGF0aWJsZXMpLgorICoKKyAqIDIgZXh0ZXJuYWwgcmVnaXN0ZXJzIGFyZSBpbnZvbHZlZDoKKyAqICAgcGNtY2lhX3N0YXR1cyAob2Zmc2V0IDB4MDQpOiBiaXRzIFswOjEvMjozXTogcmVhZCBjYXJkIHZvbHRhZ2UgaWQKKyAqICAgcGNtY2lhX2NvbnRyb2wob2Zmc2V0IDB4MTApOgorICoJYml0c1swOjFdIHNldCB2Y2MgZm9yIGNhcmQKKyAqCWJpdHNbMjozXSBzZXQgdnBwIGZvciBjYXJkCisgKgliaXQgNDoJZW5hYmxlIGRhdGEgYnVmZmVycworICoJYml0IDc6CXJlc2V0IyBmb3IgY2FyZAorICoJYWRkIDggZm9yIHNlY29uZCBzb2NrZXQuCisgKi8KK3N0YXRpYyBpbnQgZGIxeF9wY21jaWFfY29uZmlndXJlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QsCisJCQkJIHN0cnVjdCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpCit7CisJc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2sgPSB0b19kYjF4X3NvY2tldChza3QpOworCXVuc2lnbmVkIHNob3J0IGNyX2NsciwgY3Jfc2V0OworCXVuc2lnbmVkIGludCBjaGFuZ2VkOworCWludCB2LCBwLCByZXQ7CisKKwkvKiBjYXJkIHZvbHRhZ2Ugc2V0dXAgKi8KKwljcl9jbHIgPSAoMHhmIDw8IChzb2NrLT5uciAqIDgpKTsgLyogY2xlYXIgdm9sdGFnZSBzZXR0aW5ncyAqLworCWNyX3NldCA9IDA7CisJdiA9IHAgPSByZXQgPSAwOworCisJc3dpdGNoIChzdGF0ZS0+VmNjKSB7CisJY2FzZSA1MDoKKwkJKyt2OworCWNhc2UgMzM6CisJCSsrdjsKKwljYXNlIDA6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8gInBjbWNpYSVkIHVuc3VwcG9ydGVkIFZjYyAlZFxuIiwKKwkJCXNvY2stPm5yLCBzdGF0ZS0+VmNjKTsKKwl9CisKKwlzd2l0Y2ggKHN0YXRlLT5WcHApIHsKKwljYXNlIDEyOgorCQkrK3A7CisJY2FzZSAzMzoKKwljYXNlIDUwOgorCQkrK3A7CisJY2FzZSAwOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9JTkZPICJwY21jaWElZCB1bnN1cHBvcnRlZCBWcHAgJWRcbiIsCisJCQlzb2NrLT5uciwgc3RhdGUtPlZwcCk7CisJfQorCisJLyogc2FuaXR5IGNoZWNrOiBWcHAgbXVzdCBiZSAwLCAxMiwgb3IgVmNjICovCisJaWYgKCgoc3RhdGUtPlZjYyA9PSAzMykgJiYgKHN0YXRlLT5WcHAgPT0gNTApKSB8fAorCSAgICAoKHN0YXRlLT5WY2MgPT0gNTApICYmIChzdGF0ZS0+VnBwID09IDMzKSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhJWQgYmFkIFZjYy9WcHAgY29tYm8gKCVkICVkKVxuIiwKKwkJCXNvY2stPm5yLCBzdGF0ZS0+VmNjLCBzdGF0ZS0+VnBwKTsKKwkJdiA9IHAgPSAwOworCQlyZXQgPSAtRUlOVkFMOworCX0KKworCS8qIGNyZWF0ZSBuZXcgdm9sdGFnZSBjb2RlICovCisJY3Jfc2V0IHw9ICgodiA8PCAyKSB8IHApIDw8IChzb2NrLT5uciAqIDgpOworCisJY2hhbmdlZCA9IHN0YXRlLT5mbGFncyBeIHNvY2stPm9sZF9mbGFnczsKKworCWlmIChjaGFuZ2VkICYgU1NfUkVTRVQpIHsKKwkJaWYgKHN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKSB7CisJCQlzZXRfc3RzY2hnKHNvY2ssIDApOworCQkJLyogYXNzZXJ0IHJlc2V0LCBkaXNhYmxlIGlvIGJ1ZmZlcnMgKi8KKwkJCWNyX2NsciB8PSAoMSA8PCAoNyArIChzb2NrLT5uciAqIDgpKSk7CisJCQljcl9jbHIgfD0gKDEgPDwgKDQgKyAoc29jay0+bnIgKiA4KSkpOworCQl9IGVsc2UgeworCQkJLyogZGUtYXNzZXJ0IHJlc2V0LCBlbmFibGUgaW8gYnVmZmVycyAqLworCQkJY3Jfc2V0IHw9IDEgPDwgKDcgKyAoc29jay0+bnIgKiA4KSk7CisJCQljcl9zZXQgfD0gMSA8PCAoNCArIChzb2NrLT5uciAqIDgpKTsKKwkJfQorCX0KKworCS8qIHVwZGF0ZSBQQ01DSUEgY29uZmlndXJhdGlvbiAqLworCWJjc3JfbW9kKEJDU1JfUENNQ0lBLCBjcl9jbHIsIGNyX3NldCk7CisKKwlzb2NrLT5vbGRfZmxhZ3MgPSBzdGF0ZS0+ZmxhZ3M7CisKKwkvKiByZXNldCB3YXMgdGFrZW4gYXdheTogZ2l2ZSBjYXJkIHRpbWUgdG8gaW5pdGlhbGl6ZSBwcm9wZXJseSAqLworCWlmICgoY2hhbmdlZCAmIFNTX1JFU0VUKSAmJiAhKHN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKSkgeworCQltc2xlZXAoNTAwKTsKKwkJc2V0X3N0c2NoZyhzb2NrLCAxKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBWQ0MgYml0cyBhdCBbMzoyXS9bMTE6MTBdICovCisjZGVmaW5lIEdFVF9WQ0MoY3IsIHNvY2tucikJCVwKKwkoKCgoY3IpID4+IDIpID4+ICgoc29ja25yKSAqIDgpKSAmIDMpCisKKy8qIFZTIGJpdHMgYXQgWzA6MV0vWzM6Ml0gKi8KKyNkZWZpbmUgR0VUX1ZTKHNyLCBzb2NrbnIpCQlcCisJKCgoc3IpID4+ICgyICogKHNvY2tucikpKSAmIDMpCisKKy8qIHJlc2V0IGJpdHMgYXQgWzddL1sxNV0gKi8KKyNkZWZpbmUgR0VUX1JFU0VUKGNyLCBzb2NrbnIpCQlcCisJKChjcikgJiAoMSA8PCAoNyArICg4ICogKHNvY2tucikpKSkpCisKK3N0YXRpYyBpbnQgZGIxeF9wY21jaWFfZ2V0X3N0YXR1cyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCSAgdW5zaWduZWQgaW50ICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jayA9IHRvX2RiMXhfc29ja2V0KHNrdCk7CisJdW5zaWduZWQgc2hvcnQgY3IsIHNyOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBkYjF4X2NhcmRfaW5zZXJ0ZWQoc29jaykgPyBTU19ERVRFQ1QgOiAwOworCisJY3IgPSBiY3NyX3JlYWQoQkNTUl9QQ01DSUEpOworCXNyID0gYmNzcl9yZWFkKEJDU1JfU1RBVFVTKTsKKworCS8qIFBCMTEwMC9QQjE1MDA6IHZvbHRhZ2Uga2V5IGJpdHMgYXJlIGF0IFs1OjRdICovCisJaWYgKHNvY2stPmJvYXJkX3R5cGUgPT0gQk9BUkRfVFlQRV9QQjExMDApCisJCXNyID4+PSA0OworCisJLyogZGV0ZXJtaW5lIGNhcmQgdHlwZSAqLworCXN3aXRjaCAoR0VUX1ZTKHNyLCBzb2NrLT5ucikpIHsKKwljYXNlIDA6CisJY2FzZSAyOgorCQlzdGF0dXMgfD0gU1NfM1ZDQVJEOwkvKiAzViBjYXJkICovCisJY2FzZSAzOgorCQlicmVhazsJCQkvKiA1ViBjYXJkOiBzZXQgbm90aGluZyAqLworCWRlZmF1bHQ6CisJCXN0YXR1cyB8PSBTU19YVkNBUkQ7CS8qIHRyZWF0ZWQgYXMgdW5zdXBwb3J0ZWQgaW4gY29yZSAqLworCX0KKworCS8qIGlmIFZjYyBpcyBub3QgemVybywgd2UgaGF2ZSBhcHBsaWVkIHBvd2VyIHRvIGEgY2FyZCAqLworCXN0YXR1cyB8PSBHRVRfVkNDKGNyLCBzb2NrLT5ucikgPyBTU19QT1dFUk9OIDogMDsKKworCS8qIHJlc2V0IGRlLWFzc2VydGVkPyB0aGVuIHdlJ3JlIHJlYWR5ICovCisJc3RhdHVzIHw9IChHRVRfUkVTRVQoY3IsIHNvY2stPm5yKSkgPyBTU19SRUFEWSA6IFNTX1JFU0VUOworCisJKnZhbHVlID0gc3RhdHVzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGIxeF9wY21jaWFfc29ja19pbml0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGIxeF9wY21jaWFfc29ja19zdXNwZW5kKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXUxeDAwX3BjbWNpYV9zZXRfaW9fbWFwKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QsCisJCQkJICAgIHN0cnVjdCBwY2NhcmRfaW9fbWFwICptYXApCit7CisJc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2sgPSB0b19kYjF4X3NvY2tldChza3QpOworCisJbWFwLT5zdGFydCA9ICh1MzIpc29jay0+dmlydF9pbzsKKwltYXAtPnN0b3AgPSBtYXAtPnN0YXJ0ICsgSU9fTUFQX1NJWkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTF4MDBfcGNtY2lhX3NldF9tZW1fbWFwKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QsCisJCQkJICAgICBzdHJ1Y3QgcGNjYXJkX21lbV9tYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayAqc29jayA9IHRvX2RiMXhfc29ja2V0KHNrdCk7CisKKwlpZiAobWFwLT5mbGFncyAmIE1BUF9BVFRSSUIpCisJCW1hcC0+c3RhdGljX3N0YXJ0ID0gc29jay0+cGh5c19hdHRyICsgbWFwLT5jYXJkX3N0YXJ0OworCWVsc2UKKwkJbWFwLT5zdGF0aWNfc3RhcnQgPSBzb2NrLT5waHlzX21lbSArIG1hcC0+Y2FyZF9zdGFydDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBjY2FyZF9vcGVyYXRpb25zIGRiMXhfcGNtY2lhX29wZXJhdGlvbnMgPSB7CisJLmluaXQJCQk9IGRiMXhfcGNtY2lhX3NvY2tfaW5pdCwKKwkuc3VzcGVuZAkJPSBkYjF4X3BjbWNpYV9zb2NrX3N1c3BlbmQsCisJLmdldF9zdGF0dXMJCT0gZGIxeF9wY21jaWFfZ2V0X3N0YXR1cywKKwkuc2V0X3NvY2tldAkJPSBkYjF4X3BjbWNpYV9jb25maWd1cmUsCisJLnNldF9pb19tYXAJCT0gYXUxeDAwX3BjbWNpYV9zZXRfaW9fbWFwLAorCS5zZXRfbWVtX21hcAkJPSBhdTF4MDBfcGNtY2lhX3NldF9tZW1fbWFwLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgZGIxeF9wY21jaWFfc29ja2V0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRiMXhfcGNtY2lhX3NvY2sgKnNvY2s7CisJc3RydWN0IHJlc291cmNlICpyOworCWludCByZXQsIGJpZDsKKworCXNvY2sgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGIxeF9wY21jaWFfc29jayksIEdGUF9LRVJORUwpOworCWlmICghc29jaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzb2NrLT5uciA9IHBkZXYtPmlkOworCisJYmlkID0gQkNTUl9XSE9BTUlfQk9BUkQoYmNzcl9yZWFkKEJDU1JfV0hPQU1JKSk7CisJc3dpdGNoIChiaWQpIHsKKwljYXNlIEJDU1JfV0hPQU1JX1BCMTUwMDoKKwljYXNlIEJDU1JfV0hPQU1JX1BCMTUwMFIyOgorCWNhc2UgQkNTUl9XSE9BTUlfUEIxMTAwOgorCQlzb2NrLT5ib2FyZF90eXBlID0gQk9BUkRfVFlQRV9QQjExMDA7CisJCWJyZWFrOworCWNhc2UgQkNTUl9XSE9BTUlfREIxMDAwIC4uLiBCQ1NSX1dIT0FNSV9QQjE1NTBfU0RSOgorCQlzb2NrLT5ib2FyZF90eXBlID0gQk9BUkRfVFlQRV9ERUZBVUxUOworCQlicmVhazsKKwljYXNlIEJDU1JfV0hPQU1JX1BCMTIwMCAuLi4gQkNTUl9XSE9BTUlfREIxMjAwOgorCQlzb2NrLT5ib2FyZF90eXBlID0gQk9BUkRfVFlQRV9EQjEyMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8gImRiMXh4eC1zczogdW5rbm93biBib2FyZCAlZCFcbiIsIGJpZCk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0MDsKKwl9OworCisJLyoKKwkgKiBnYXRoZXIgcmVzb3VyY2VzIG5lY2Vzc2FyeSBhbmQgb3B0aW9uYWwgbmljZS10by1oYXZlcyB0bworCSAqIG9wZXJhdGUgYSBzb2NrZXQ6CisJICogVGhpcyBpbmNsdWRlcyBJUlFzIGZvciBDYXJkZGV0ZWN0aW9uL2VqZWN0aW9uLCB0aGUgY2FyZAorCSAqICBpdHNlbGYgYW5kIG9wdGlvbmFsIHN0YXR1cyBjaGFuZ2UgZGV0ZWN0aW9uLgorCSAqIEFsc28sIHRoZSBtZW1vcnkgYXJlYXMgY292ZXJlZCBieSBhIHNvY2tldC4gIEZvciB0aGVzZQorCSAqICB3ZSByZXF1aXJlIHRoZSAzMmJpdCAicHNldWRvIiBhZGRyZXNzZXMgKHNlZSB0aGUgYXUxMDAwLmgKKwkgKiAgaGVhZGVyIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KKwkgKi8KKworCS8qIGNhcmQ6IGlycSBhc3NpZ25lZCB0byB0aGUgY2FyZCBpdHNlbGYuICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9JUlEsICJjYXJkIik7CisJc29jay0+Y2FyZF9pcnEgPSByID8gci0+c3RhcnQgOiAwOworCisJLyogaW5zZXJ0OiBpcnEgd2hpY2ggdHJpZ2dlcnMgb24gY2FyZCBpbnNlcnRpb24vZWplY3Rpb24gKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgImluc2VydCIpOworCXNvY2stPmluc2VydF9pcnEgPSByID8gci0+c3RhcnQgOiAtMTsKKworCS8qIHN0c2NoZzogaXJxIHdoaWNoIHRyaWdnZXIgb24gY2FyZCBzdGF0dXMgY2hhbmdlIChvcHRpb25hbCkgKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgInN0c2NoZyIpOworCXNvY2stPnN0c2NoZ19pcnEgPSByID8gci0+c3RhcnQgOiAtMTsKKworCS8qIGVqZWN0OiBpcnEgd2hpY2ggdHJpZ2dlcnMgb24gZWplY3Rpb24gKERCMTIwMC9QQjEyMDAgb25seSkgKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgImVqZWN0Iik7CisJc29jay0+ZWplY3RfaXJxID0gciA/IHItPnN0YXJ0IDogLTE7CisKKwlyZXQgPSAtRU5PREVWOworCisJLyoKKwkgKiBwc2V1ZG8tYXR0cjogIFRoZSAzMmJpdCBhZGRyZXNzIG9mIHRoZSBQQ01DSUEgYXR0cmlidXRlIHNwYWNlCisJICogZm9yIHRoaXMgc29ja2V0ICh1c3VhbGx5IHRoZSAzNmJpdCBhZGRyZXNzIHNoaWZ0ZWQgNCB0byB0aGUKKwkgKiByaWdodCkuCisJICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJwY21jaWEtYXR0ciIpOworCWlmICghcikgeworCQlwcmludGsoS0VSTl9FUlIgInBjbWNpYSVkIGhhcyBubyAncHNldWRvLWF0dHInIHJlc291cmNlIVxuIiwKKwkJCXNvY2stPm5yKTsKKwkJZ290byBvdXQwOworCX0KKwlzb2NrLT5waHlzX2F0dHIgPSByLT5zdGFydDsKKworCS8qCisJICogcHNldWRvLW1lbTogIFRoZSAzMmJpdCBhZGRyZXNzIG9mIHRoZSBQQ01DSUEgbWVtb3J5IHNwYWNlIGZvcgorCSAqIHRoaXMgc29ja2V0ICh1c3VhbGx5IHRoZSAzNmJpdCBhZGRyZXNzIHNoaWZ0ZWQgNCB0byB0aGUgcmlnaHQpCisJICovCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJwY21jaWEtbWVtIik7CisJaWYgKCFyKSB7CisJCXByaW50ayhLRVJOX0VSUiAicGNtY2lhJWQgaGFzIG5vICdwc2V1ZG8tbWVtJyByZXNvdXJjZSFcbiIsCisJCQlzb2NrLT5ucik7CisJCWdvdG8gb3V0MDsKKwl9CisJc29jay0+cGh5c19tZW0gPSByLT5zdGFydDsKKworCS8qCisJICogcHNldWRvLWlvOiAgVGhlIDMyYml0IGFkZHJlc3Mgb2YgdGhlIFBDTUNJQSBJTyBzcGFjZSBmb3IgdGhpcworCSAqIHNvY2tldCAodXN1YWxseSB0aGUgMzZiaXQgYWRkcmVzcyBzaGlmdGVkIDQgdG8gdGhlIHJpZ2h0KS4KKwkgKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInBjbWNpYS1pbyIpOworCWlmICghcikgeworCQlwcmludGsoS0VSTl9FUlIgInBjbWNpYSVkIGhhcyBubyAncHNldWRvLWlvJyByZXNvdXJjZSFcbiIsCisJCQlzb2NrLT5ucik7CisJCWdvdG8gb3V0MDsKKwl9CisJc29jay0+cGh5c19pbyA9IHItPnN0YXJ0OworCisJLyoKKwkgKiBQQ01DSUEgY2xpZW50IGRyaXZlcnMgdXNlIHRoZSBpbmIvb3V0YiBtYWNyb3MgdG8gYWNjZXNzCisJICogdGhlIElPIHJlZ2lzdGVycy4gIFNpbmNlIG1pcHNfaW9fcG9ydF9iYXNlIGlzIGFkZGVkCisJICogdG8gdGhlIGFjY2VzcyBhZGRyZXNzIG9mIHRoZSBtaXBzIGltcGxlbWVudGF0aW9uIG9mCisJICogaW5iL291dGIsIHdlIG5lZWQgdG8gc3VidHJhY3QgaXQgaGVyZSBiZWNhdXNlIHdlIHdhbnQKKwkgKiB0byBhY2Nlc3MgdGhlIEkvTyBvciBNRU0gYWRkcmVzcyBkaXJlY3RseSwgd2l0aG91dAorCSAqIGdvaW5nIHRocm91Z2ggdGhpcyAibWlwc19pb19wb3J0X2Jhc2UiIG1lY2hhbmlzbS4KKwkgKi8KKwlzb2NrLT52aXJ0X2lvID0gKHZvaWQgKikoaW9yZW1hcChzb2NrLT5waHlzX2lvLCBJT19NQVBfU0laRSkgLQorCQkJCSBtaXBzX2lvX3BvcnRfYmFzZSk7CisKKwlpZiAoIXNvY2stPnZpcnRfaW8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwY21jaWElZDogY2Fubm90IHJlbWFwIElPIGFyZWFcbiIsCisJCQlzb2NrLT5ucik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0MDsKKwl9CisKKwlzb2NrLT5zb2NrZXQub3BzCT0gJmRiMXhfcGNtY2lhX29wZXJhdGlvbnM7CisJc29jay0+c29ja2V0Lm93bmVyCT0gVEhJU19NT0RVTEU7CisJc29jay0+c29ja2V0LnBjaV9pcnEJPSBzb2NrLT5jYXJkX2lycTsKKwlzb2NrLT5zb2NrZXQuZmVhdHVyZXMJPSBTU19DQVBfU1RBVElDX01BUCB8IFNTX0NBUF9QQ0NBUkQ7CisJc29jay0+c29ja2V0Lm1hcF9zaXplCT0gTUVNX01BUF9TSVpFOworCXNvY2stPnNvY2tldC5pb19vZmZzZXQJPSAodW5zaWduZWQgbG9uZylzb2NrLT52aXJ0X2lvOworCXNvY2stPnNvY2tldC5kZXYucGFyZW50CT0gJnBkZXYtPmRldjsKKwlzb2NrLT5zb2NrZXQucmVzb3VyY2Vfb3BzID0gJnBjY2FyZF9zdGF0aWNfb3BzOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc29jayk7CisKKwlyZXQgPSBkYjF4X3BjbWNpYV9zZXR1cF9pcnFzKHNvY2spOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwY21jaWElZCBjYW5ub3Qgc2V0dXAgaW50ZXJydXB0c1xuIiwKKwkJCXNvY2stPm5yKTsKKwkJZ290byBvdXQxOworCX0KKworCXNldF9zdHNjaGcoc29jaywgMCk7CisKKwlyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KCZzb2NrLT5zb2NrZXQpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwY21jaWElZCBmYWlsZWQgdG8gcmVnaXN0ZXJcbiIsIHNvY2stPm5yKTsKKwkJZ290byBvdXQyOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIkFsY2hlbXkgRGIvUGIxeHh4IHBjbWNpYSVkIEAgaW8vYXR0ci9tZW0gJTA5bGx4IgorCQkiKCVwKSAlMDlsbHggJTA5bGx4ICBjYXJkL2luc2VydC9zdHNjaGcvZWplY3QgaXJxcyBAICVkICIKKwkJIiVkICVkICVkXG4iLCBzb2NrLT5uciwgc29jay0+cGh5c19pbywgc29jay0+dmlydF9pbywKKwkJc29jay0+cGh5c19hdHRyLCBzb2NrLT5waHlzX21lbSwgc29jay0+Y2FyZF9pcnEsCisJCXNvY2stPmluc2VydF9pcnEsIHNvY2stPnN0c2NoZ19pcnEsIHNvY2stPmVqZWN0X2lycSk7CisKKwlyZXR1cm4gMDsKKworb3V0MjoKKwlkYjF4X3BjbWNpYV9mcmVlX2lycXMoc29jayk7CitvdXQxOgorCWlvdW5tYXAoKHZvaWQgKikoc29jay0+dmlydF9pbyArICh1MzIpbWlwc19pb19wb3J0X2Jhc2UpKTsKK291dDA6CisJa2ZyZWUoc29jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZGIxeF9wY21jaWFfc29ja2V0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkYjF4X3BjbWNpYV9zb2NrICpzb2NrID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkYjF4X3BjbWNpYV9mcmVlX2lycXMoc29jayk7CisJcGNtY2lhX3VucmVnaXN0ZXJfc29ja2V0KCZzb2NrLT5zb2NrZXQpOworCWlvdW5tYXAoKHZvaWQgKikoc29jay0+dmlydF9pbyArICh1MzIpbWlwc19pb19wb3J0X2Jhc2UpKTsKKwlrZnJlZShzb2NrKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGRiMXhfcGNtY2lhX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKGRldik7Cit9CisKK3N0YXRpYyBpbnQgZGIxeF9wY21jaWFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBkYjF4X3BjbWNpYV9wbW9wcyA9IHsKKwkucmVzdW1lCQk9IGRiMXhfcGNtY2lhX3Jlc3VtZSwKKwkuc3VzcGVuZAk9IGRiMXhfcGNtY2lhX3N1c3BlbmQsCisJLnRoYXcJCT0gZGIxeF9wY21jaWFfcmVzdW1lLAorCS5mcmVlemUJCT0gZGIxeF9wY21jaWFfc3VzcGVuZCwKK307CisKKyNkZWZpbmUgREIxWFhYX1NTX1BNT1BTICZkYjF4X3BjbWNpYV9wbW9wcworCisjZWxzZQorCisjZGVmaW5lIERCMVhYWF9TU19QTU9QUyBOVUxMCisKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkYjF4X3BjbWNpYV9zb2NrZXRfZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImRiMXh4eF9wY21jaWEiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gREIxWFhYX1NTX1BNT1BTCisJfSwKKwkucHJvYmUJCT0gZGIxeF9wY21jaWFfc29ja2V0X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZGIxeF9wY21jaWFfc29ja2V0X3JlbW92ZSksCit9OworCitpbnQgX19pbml0IGRiMXhfcGNtY2lhX3NvY2tldF9sb2FkKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZGIxeF9wY21jaWFfc29ja2V0X2RyaXZlcik7Cit9CisKK3ZvaWQgIF9fZXhpdCBkYjF4X3BjbWNpYV9zb2NrZXRfdW5sb2FkKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRiMXhfcGNtY2lhX3NvY2tldF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChkYjF4X3BjbWNpYV9zb2NrZXRfbG9hZCk7Cittb2R1bGVfZXhpdChkYjF4X3BjbWNpYV9zb2NrZXRfdW5sb2FkKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ01DSUEgU29ja2V0IFNlcnZpY2VzIGZvciBBbGNoZW15IERiL1BiMXgwMCBib2FyZHMiKTsKK01PRFVMRV9BVVRIT1IoIk1hbnVlbCBMYXVzcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvZHMuYyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKaW5kZXggMWE0YTNjNC4uMGY5OGJlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvZHMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9kcy5jCkBAIC00Miw4ICs0Miw2IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIAotc3BpbmxvY2tfdCBwY21jaWFfZGV2X2xpc3RfbG9jazsKLQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB2b2lkIHBjbWNpYV9jaGVja19kcml2ZXIoc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2KQpAQCAtMTI2LDkgKzEyNCw5IEBACiAJZHluaWQtPmlkLmRldmljZV9ubyA9IGRldmljZV9ubzsKIAltZW1jcHkoZHluaWQtPmlkLnByb2RfaWRfaGFzaCwgcHJvZF9pZF9oYXNoLCBzaXplb2YoX191MzIpICogNCk7CiAKLQlzcGluX2xvY2soJnBkcnYtPmR5bmlkcy5sb2NrKTsKKwltdXRleF9sb2NrKCZwZHJ2LT5keW5pZHMubG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmZHluaWQtPm5vZGUsICZwZHJ2LT5keW5pZHMubGlzdCk7Ci0Jc3Bpbl91bmxvY2soJnBkcnYtPmR5bmlkcy5sb2NrKTsKKwltdXRleF91bmxvY2soJnBkcnYtPmR5bmlkcy5sb2NrKTsKIAogCWlmIChnZXRfZHJpdmVyKCZwZHJ2LT5kcnYpKSB7CiAJCXJldHZhbCA9IGRyaXZlcl9hdHRhY2goJnBkcnYtPmRydik7CkBAIC0xNDYsMTIgKzE0NCwxMiBAQAogewogCXN0cnVjdCBwY21jaWFfZHluaWQgKmR5bmlkLCAqbjsKIAotCXNwaW5fbG9jaygmZHJ2LT5keW5pZHMubG9jayk7CisJbXV0ZXhfbG9jaygmZHJ2LT5keW5pZHMubG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGR5bmlkLCBuLCAmZHJ2LT5keW5pZHMubGlzdCwgbm9kZSkgewogCQlsaXN0X2RlbCgmZHluaWQtPm5vZGUpOwogCQlrZnJlZShkeW5pZCk7CiAJfQotCXNwaW5fdW5sb2NrKCZkcnYtPmR5bmlkcy5sb2NrKTsKKwltdXRleF91bmxvY2soJmRydi0+ZHluaWRzLmxvY2spOwogfQogCiBzdGF0aWMgaW50CkBAIC0xODIsNyArMTgwLDcgQEAKIAkvKiBpbml0aWFsaXplIGNvbW1vbiBmaWVsZHMgKi8KIAlkcml2ZXItPmRydi5idXMgPSAmcGNtY2lhX2J1c190eXBlOwogCWRyaXZlci0+ZHJ2Lm93bmVyID0gZHJpdmVyLT5vd25lcjsKLQlzcGluX2xvY2tfaW5pdCgmZHJpdmVyLT5keW5pZHMubG9jayk7CisJbXV0ZXhfaW5pdCgmZHJpdmVyLT5keW5pZHMubG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmRyaXZlci0+ZHluaWRzLmxpc3QpOwogCiAJcHJfZGVidWcoInJlZ2lzdGVyaW5nIGRyaXZlciAlc1xuIiwgZHJpdmVyLT5kcnYubmFtZSk7CkBAIC0yMzksMzAgKzIzNywyMSBAQAogc3RhdGljIHZvaWQgcGNtY2lhX3JlbGVhc2VfZGV2KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7CisJaW50IGk7CiAJZGV2X2RiZyhkZXYsICJyZWxlYXNpbmcgZGV2aWNlXG4iKTsKIAlwY21jaWFfcHV0X3NvY2tldChwX2Rldi0+c29ja2V0KTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlrZnJlZShwX2Rldi0+cHJvZF9pZFtpXSk7CiAJa2ZyZWUocF9kZXYtPmRldm5hbWUpOwogCWtyZWZfcHV0KCZwX2Rldi0+ZnVuY3Rpb25fY29uZmlnLT5yZWYsIHBjbWNpYV9yZWxlYXNlX2Z1bmN0aW9uKTsKIAlrZnJlZShwX2Rldik7CiB9CiAKLXN0YXRpYyB2b2lkIHBjbWNpYV9hZGRfZGV2aWNlX2xhdGVyKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgbWZjKQotewotCWlmICghcy0+cGNtY2lhX3N0YXRlLmRldmljZV9hZGRfcGVuZGluZykgewotCQlkZXZfZGJnKCZzLT5kZXYsICJzY2hlZHVsaW5nIHRvIGFkZCAlcyBzZWNvbmRhcnkiCi0JCSAgICAgICAiIGRldmljZSB0byAlZFxuIiwgbWZjID8gIm1mYyIgOiAicGZjIiwgcy0+c29jayk7Ci0JCXMtPnBjbWNpYV9zdGF0ZS5kZXZpY2VfYWRkX3BlbmRpbmcgPSAxOwotCQlzLT5wY21jaWFfc3RhdGUubWZjX3BmYyA9IG1mYzsKLQkJc2NoZWR1bGVfd29yaygmcy0+ZGV2aWNlX2FkZCk7Ci0JfQotCXJldHVybjsKLX0KIAogc3RhdGljIGludCBwY21jaWFfZGV2aWNlX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CiAJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2OwotCXN0cnVjdCBwY21jaWFfZGV2aWNlX2lkICpkaWQ7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7CiAJY2lzdHBsX2NvbmZpZ190IGNpc19jb25maWc7CiAJaW50IHJldCA9IDA7CkBAIC0yNzUsMTggKzI2NCw2IEBACiAJcF9kcnYgPSB0b19wY21jaWFfZHJ2KGRldi0+ZHJpdmVyKTsKIAlzID0gcF9kZXYtPnNvY2tldDsKIAotCS8qIFRoZSBQQ01DSUEgY29kZSBwYXNzZXMgdGhlIG1hdGNoIGRhdGEgaW4gdmlhIGRldl9zZXRfZHJ2ZGF0YShkZXYpCi0JICogd2hpY2ggaXMgYW4gdWdseSBoYWNrLiBPbmNlIHRoZSBkcml2ZXIgcHJvYmUgaXMgY2FsbGVkIGl0IG1heQotCSAqIGFuZCBvZnRlbiB3aWxsIG92ZXJ3cml0ZSB0aGUgbWF0Y2ggZGF0YSBzbyB3ZSBtdXN0IHNhdmUgaXQgZmlyc3QKLQkgKgotCSAqIGhhbmRsZSBwc2V1ZG8gbXVsdGlmdW5jdGlvbiBkZXZpY2VzOgotCSAqIHRoZXJlIGFyZSBhdCBtb3N0IHR3byBwc2V1ZG8gbXVsdGlmdW5jdGlvbiBkZXZpY2VzLgotCSAqIGlmIHdlJ3JlIG1hdGNoaW5nIGFnYWluc3QgdGhlIGZpcnN0LCBzY2hlZHVsZSBhCi0JICogY2FsbCB3aGljaCB3aWxsIHRoZW4gY2hlY2sgd2hldGhlciB0aGVyZSBhcmUgdHdvCi0JICogcHNldWRvIGRldmljZXMsIGFuZCBpZiBub3QsIGFkZCB0aGUgc2Vjb25kIG9uZS4KLQkgKi8KLQlkaWQgPSBkZXZfZ2V0X2RydmRhdGEoJnBfZGV2LT5kZXYpOwotCiAJZGV2X2RiZyhkZXYsICJ0cnlpbmcgdG8gYmluZCB0byAlc1xuIiwgcF9kcnYtPmRydi5uYW1lKTsKIAogCWlmICgoIXBfZHJ2LT5wcm9iZSkgfHwgKCFwX2Rldi0+ZnVuY3Rpb25fY29uZmlnKSB8fApAQCAtMzE1LDkgKzI5MiwxMSBAQAogCQlnb3RvIHB1dF9tb2R1bGU7CiAJfQogCi0JaWYgKGRpZCAmJiAoZGlkLT5tYXRjaF9mbGFncyAmIFBDTUNJQV9ERVZfSURfTUFUQ0hfREVWSUNFX05PKSAmJgorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJaWYgKChzLT5wY21jaWFfc3RhdGUuaGFzX3BmYykgJiYKIAkgICAgKHBfZGV2LT5zb2NrZXQtPmRldmljZV9jb3VudCA9PSAxKSAmJiAocF9kZXYtPmRldmljZV9ubyA9PSAwKSkKLQkJcGNtY2lhX2FkZF9kZXZpY2VfbGF0ZXIocF9kZXYtPnNvY2tldCwgMCk7CisJCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfUkVRVUVSWSk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiBwdXRfbW9kdWxlOgogCWlmIChyZXQpCkBAIC0zMzYsMjYgKzMxNSwyNyBAQAogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpwX2RldjsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqdG1wOwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCiAJZGV2X2RiZyhsZWZ0b3ZlciA/ICZsZWZ0b3Zlci0+ZGV2IDogJnMtPmRldiwKIAkJICAgInBjbWNpYV9jYXJkX3JlbW92ZSglZCkgJXNcbiIsIHMtPnNvY2ssCiAJCSAgIGxlZnRvdmVyID8gbGVmdG92ZXItPmRldm5hbWUgOiAiIik7CiAKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWlmICghbGVmdG92ZXIpCiAJCXMtPmRldmljZV9jb3VudCA9IDA7CiAJZWxzZQogCQlzLT5kZXZpY2VfY291bnQgPSAxOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCS8qIHVucmVnaXN0ZXIgYWxsIHBjbWNpYV9kZXZpY2VzIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIHNvY2tldCwgZXhjZXB0IGxlZnRvdmVyICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBfZGV2LCB0bXAsICZzLT5kZXZpY2VzX2xpc3QsIHNvY2tldF9kZXZpY2VfbGlzdCkgewogCQlpZiAocF9kZXYgPT0gbGVmdG92ZXIpCiAJCQljb250aW51ZTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAkJbGlzdF9kZWwoJnBfZGV2LT5zb2NrZXRfZGV2aWNlX2xpc3QpOwogCQlwX2Rldi0+X3JlbW92ZWQgPSAxOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAkJZGV2X2RiZygmcF9kZXYtPmRldiwgInVucmVnaXN0ZXJpbmcgZGV2aWNlXG4iKTsKIAkJZGV2aWNlX3VucmVnaXN0ZXIoJnBfZGV2LT5kZXYpOwpAQCAtMzY4LDcgKzM0OCw2IEBACiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2OwogCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydjsKLQlzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCAqZGlkOwogCWludCBpOwogCiAJcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7CkBAIC0zODAsOSArMzU5LDggQEAKIAkgKiBwc2V1ZG8gbXVsdGktZnVuY3Rpb24gY2FyZCwgd2UgbmVlZCB0byB1bmJpbmQKIAkgKiBhbGwgZGV2aWNlcwogCSAqLwotCWRpZCA9IGRldl9nZXRfZHJ2ZGF0YSgmcF9kZXYtPmRldik7Ci0JaWYgKGRpZCAmJiAoZGlkLT5tYXRjaF9mbGFncyAmIFBDTUNJQV9ERVZfSURfTUFUQ0hfREVWSUNFX05PKSAmJgotCSAgICAocF9kZXYtPnNvY2tldC0+ZGV2aWNlX2NvdW50ICE9IDApICYmCisJaWYgKChwX2Rldi0+c29ja2V0LT5wY21jaWFfc3RhdGUuaGFzX3BmYykgJiYKKwkgICAgKHBfZGV2LT5zb2NrZXQtPmRldmljZV9jb3VudCA+IDApICYmCiAJICAgIChwX2Rldi0+ZGV2aWNlX25vID09IDApKQogCQlwY21jaWFfY2FyZF9yZW1vdmUocF9kZXYtPnNvY2tldCwgcF9kZXYpOwogCkBAIC00MzEsMTYgKzQwOSwyMCBAQAogCiAJaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBCSU5EX0ZOX0FMTCwKIAkJCSAgICAgICBDSVNUUExfTUFORklELCAmbWFuZl9pZCkpIHsKKwkJbXV0ZXhfbG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAkJcF9kZXYtPm1hbmZfaWQgPSBtYW5mX2lkLm1hbmY7CiAJCXBfZGV2LT5jYXJkX2lkID0gbWFuZl9pZC5jYXJkOwogCQlwX2Rldi0+aGFzX21hbmZfaWQgPSAxOwogCQlwX2Rldi0+aGFzX2NhcmRfaWQgPSAxOworCQltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJfQogCiAJaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywKIAkJCSAgICAgICBDSVNUUExfRlVOQ0lELCAmZnVuY19pZCkpIHsKKwkJbXV0ZXhfbG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAkJcF9kZXYtPmZ1bmNfaWQgPSBmdW5jX2lkLmZ1bmM7CiAJCXBfZGV2LT5oYXNfZnVuY19pZCA9IDE7CisJCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAl9IGVsc2UgewogCQkvKiBydWxlIG9mIHRodW1iOiBjYXJkcyB3aXRoIG5vIEZVTkNJRCwgYnV0IHdpdGgKIAkJICogY29tbW9uIG1lbW9yeSBkZXZpY2UgZ2VvbWV0cnkgaW5mb3JtYXRpb24sIGFyZQpAQCAtNDU3LDE3ICs0MzksMjEgQEAKIAkJCWRldl9kYmcoJnBfZGV2LT5kZXYsCiAJCQkJICAgIm1lbSBkZXZpY2UgZ2VvbWV0cnkgcHJvYmFibHkgbWVhbnMgIgogCQkJCSAgICJGVU5DSURfTUVNT1JZXG4iKTsKKwkJCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJCQlwX2Rldi0+ZnVuY19pZCA9IENJU1RQTF9GVU5DSURfTUVNT1JZOwogCQkJcF9kZXYtPmhhc19mdW5jX2lkID0gMTsKKwkJCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAkJfQogCQlrZnJlZShkZXZnZW8pOwogCX0KIAogCWlmICghcGNjYXJkX3JlYWRfdHVwbGUocF9kZXYtPnNvY2tldCwgQklORF9GTl9BTEwsIENJU1RQTF9WRVJTXzEsCiAJCQkgICAgICAgdmVyczEpKSB7CisJCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJCWZvciAoaSA9IDA7IGkgPCBtaW5fdCh1bnNpZ25lZCBpbnQsIDQsIHZlcnMxLT5ucyk7IGkrKykgewogCQkJY2hhciAqdG1wOwogCQkJdW5zaWduZWQgaW50IGxlbmd0aDsKKwkJCWNoYXIgKm5ldzsKIAogCQkJdG1wID0gdmVyczEtPnN0ciArIHZlcnMxLT5vZnNbaV07CiAKQEAgLTQ3NSwxNCArNDYxLDE3IEBACiAJCQlpZiAoKGxlbmd0aCA8IDIpIHx8IChsZW5ndGggPiAyNTUpKQogCQkJCWNvbnRpbnVlOwogCi0JCQlwX2Rldi0+cHJvZF9pZFtpXSA9IGttYWxsb2Moc2l6ZW9mKGNoYXIpICogbGVuZ3RoLAotCQkJCQkJICAgIEdGUF9LRVJORUwpOwotCQkJaWYgKCFwX2Rldi0+cHJvZF9pZFtpXSkKKwkJCW5ldyA9IGttYWxsb2Moc2l6ZW9mKGNoYXIpICogbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghbmV3KQogCQkJCWNvbnRpbnVlOwogCi0JCQlwX2Rldi0+cHJvZF9pZFtpXSA9IHN0cm5jcHkocF9kZXYtPnByb2RfaWRbaV0sCi0JCQkJCQkgICAgdG1wLCBsZW5ndGgpOworCQkJbmV3ID0gc3RybmNweShuZXcsIHRtcCwgbGVuZ3RoKTsKKworCQkJdG1wID0gcF9kZXYtPnByb2RfaWRbaV07CisJCQlwX2Rldi0+cHJvZF9pZFtpXSA9IG5ldzsKKwkJCWtmcmVlKHRtcCk7CiAJCX0KKwkJbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCX0KIAogCWtmcmVlKHZlcnMxKTsKQEAgLTUwMiw3ICs0OTEsNyBAQAogc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYV9kZXZpY2VfYWRkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24pCiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCAqdG1wX2RldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOwogCiAJcyA9IHBjbWNpYV9nZXRfc29ja2V0KHMpOwogCWlmICghcykKQEAgLTUxMiwxNiArNTAxLDE5IEBACiAKIAlwcl9kZWJ1ZygiYWRkaW5nIGRldmljZSB0byAlZCwgZnVuY3Rpb24gJWRcbiIsIHMtPnNvY2ssIGZ1bmN0aW9uKTsKIAotCS8qIG1heCBvZiA0IGRldmljZXMgcGVyIGNhcmQgKi8KLQlpZiAocy0+ZGV2aWNlX2NvdW50ID09IDQpCi0JCWdvdG8gZXJyX3B1dDsKLQogCXBfZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjbWNpYV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBfZGV2KQogCQlnb3RvIGVycl9wdXQ7CiAKLQlwX2Rldi0+c29ja2V0ID0gczsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXBfZGV2LT5kZXZpY2Vfbm8gPSAocy0+ZGV2aWNlX2NvdW50KyspOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKworCS8qIG1heCBvZiAyIGRldmljZXMgcGVyIGNhcmQgKi8KKwlpZiAocF9kZXYtPmRldmljZV9ubyA+PSAyKQorCQlnb3RvIGVycl9mcmVlOworCisJcF9kZXYtPnNvY2tldCA9IHM7CiAJcF9kZXYtPmZ1bmMgICA9IGZ1bmN0aW9uOwogCiAJcF9kZXYtPmRldi5idXMgPSAmcGNtY2lhX2J1c190eXBlOwpAQCAtNTM4LDcgKzUzMCw3IEBACiAJCWdvdG8gZXJyX2ZyZWU7CiAJZGV2X2RiZygmcF9kZXYtPmRldiwgImRldm5hbWUgaXMgJXNcbiIsIHBfZGV2LT5kZXZuYW1lKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAKIAkvKgogCSAqIHBfZGV2LT5mdW5jdGlvbl9jb25maWcgbXVzdCBiZSB0aGUgc2FtZSBmb3IgYWxsIGNhcmQgZnVuY3Rpb25zLgpAQCAtNTU2LDcgKzU0OCw3IEBACiAJLyogQWRkIHRvIHRoZSBsaXN0IGluIHBjbWNpYV9idXNfc29ja2V0ICovCiAJbGlzdF9hZGQoJnBfZGV2LT5zb2NrZXRfZGV2aWNlX2xpc3QsICZzLT5kZXZpY2VzX2xpc3QpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlpZiAoIXBfZGV2LT5mdW5jdGlvbl9jb25maWcpIHsKIAkJZGV2X2RiZygmcF9kZXYtPmRldiwgImNyZWF0aW5nIGNvbmZpZ190XG4iKTsKQEAgLTU4MSwxNCArNTczLDE5IEBACiAJcmV0dXJuIHBfZGV2OwogCiAgZXJyX3VucmVnOgotCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJbGlzdF9kZWwoJnBfZGV2LT5zb2NrZXRfZGV2aWNlX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAgZXJyX2ZyZWU6CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwlzLT5kZXZpY2VfY291bnQtLTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlrZnJlZShwX2Rldi0+cHJvZF9pZFtpXSk7CiAJa2ZyZWUocF9kZXYtPmRldm5hbWUpOwogCWtmcmVlKHBfZGV2KTsKLQlzLT5kZXZpY2VfY291bnQtLTsKICBlcnJfcHV0OgogCW11dGV4X3VubG9jaygmZGV2aWNlX2FkZF9sb2NrKTsKIAlwY21jaWFfcHV0X3NvY2tldChzKTsKQEAgLTYwMSwxOSArNTk4LDIzIEBACiB7CiAJY2lzdHBsX2xvbmdsaW5rX21mY190IG1mYzsKIAl1bnNpZ25lZCBpbnQgbm9fZnVuY3MsIGksIG5vX2NoYWluczsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0ID0gLUVBR0FJTjsKIAorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJaWYgKCEocy0+cmVzb3VyY2Vfc2V0dXBfZG9uZSkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LAogCQkJICAgIm5vIHJlc291cmNlcyBhdmFpbGFibGUsIGRlbGF5aW5nIGNhcmRfYWRkXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVBR0FJTjsgLyogdHJ5IGFnYWluLCBidXQgbGF0ZXIuLi4gKi8KIAl9CiAKIAlpZiAocGNtY2lhX3ZhbGlkYXRlX21lbShzKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJ2YWxpZGF0aW5nIG1lbSByZXNvdXJjZXMgZmFpbGVkLCAiCiAJCSAgICAgICAiZGVsYXlpbmcgY2FyZF9hZGRcbiIpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXJldHVybiAtRUFHQUlOOyAvKiB0cnkgYWdhaW4sIGJ1dCBsYXRlci4uLiAqLwogCX0KKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlyZXQgPSBwY2NhcmRfdmFsaWRhdGVfY2lzKHMsICZub19jaGFpbnMpOwogCWlmIChyZXQgfHwgIW5vX2NoYWlucykgewpAQCAtNjM0LDE3ICs2MzUsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHBjbWNpYV9kZWxheWVkX2FkZF9kZXZpY2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwY21jaWFfc29ja2V0LCBkZXZpY2VfYWRkKTsKLQlkZXZfZGJnKCZzLT5kZXYsICJhZGRpbmcgYWRkaXRpb25hbCBkZXZpY2UgdG8gJWRcbiIsIHMtPnNvY2spOwotCXBjbWNpYV9kZXZpY2VfYWRkKHMsIHMtPnBjbWNpYV9zdGF0ZS5tZmNfcGZjKTsKLQlzLT5wY21jaWFfc3RhdGUuZGV2aWNlX2FkZF9wZW5kaW5nID0gMDsKLQlzLT5wY21jaWFfc3RhdGUubWZjX3BmYyA9IDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGNtY2lhX3JlcXVlcnkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICogX2RhdGEpCitzdGF0aWMgaW50IHBjbWNpYV9yZXF1ZXJ5X2NhbGxiYWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqIF9kYXRhKQogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IHRvX3BjbWNpYV9kZXYoZGV2KTsKIAlpZiAoIXBfZGV2LT5kZXYuZHJpdmVyKSB7CkBAIC02NTUsNDUgKzY0Niw2NyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBwY21jaWFfYnVzX3Jlc2NhbihzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0LCBpbnQgbmV3X2NpcykKKworc3RhdGljIHZvaWQgcGNtY2lhX3JlcXVlcnkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7Ci0JaW50IG5vX2RldmljZXMgPSAwOwotCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHByZXNlbnQsIGhhc19wZmM7CiAKLQkvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHNrdF9tdXRleCBoZWxkICovCi0JZGV2X2RiZygmc2t0LT5kZXYsICJyZS1zY2FubmluZyBzb2NrZXQgJWRcbiIsIHNrdC0+c29jayk7CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwlwcmVzZW50ID0gcy0+cGNtY2lhX3N0YXRlLnByZXNlbnQ7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JaWYgKGxpc3RfZW1wdHkoJnNrdC0+ZGV2aWNlc19saXN0KSkKLQkJbm9fZGV2aWNlcyA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwlpZiAoIXByZXNlbnQpCisJCXJldHVybjsKIAotCS8qIElmIHRoaXMgaXMgYmVjYXVzZSBvZiBhIENJUyBvdmVycmlkZSwgc3RhcnQgb3ZlciAqLwotCWlmIChuZXdfY2lzICYmICFub19kZXZpY2VzKQotCQlwY21jaWFfY2FyZF9yZW1vdmUoc2t0LCBOVUxMKTsKLQotCS8qIGlmIG5vIGRldmljZXMgd2VyZSBhZGRlZCBmb3IgdGhpcyBzb2NrZXQgeWV0IGJlY2F1c2Ugb2YKLQkgKiBtaXNzaW5nIHJlc291cmNlIGluZm9ybWF0aW9uIG9yIG90aGVyIHRyb3VibGUsIHdlIG5lZWQgdG8KLQkgKiBkbyB0aGlzIG5vdy4gKi8KLQlpZiAobm9fZGV2aWNlcyB8fCBuZXdfY2lzKSB7Ci0JCXJldCA9IHBjbWNpYV9jYXJkX2FkZChza3QpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuOworCWlmIChzLT5mdW5jdGlvbnMgPT0gMCkgeworCQlwY21jaWFfY2FyZF9hZGQocyk7CisJCXJldHVybjsKIAl9CiAKIAkvKiBzb21lIGRldmljZSBpbmZvcm1hdGlvbiBtaWdodCBoYXZlIGNoYW5nZWQgYmVjYXVzZSBvZiBhIENJUwogCSAqIHVwZGF0ZSBvciBiZWNhdXNlIHdlIGNhbiBmaW5hbGx5IHJlYWQgaXQgY29ycmVjdGx5Li4uIHNvCiAJICogZGV0ZXJtaW5lIGl0IGFnYWluLCBvdmVyd3JpdGluZyBvbGQgdmFsdWVzIGlmIG5lY2Vzc2FyeS4gKi8KLQlidXNfZm9yX2VhY2hfZGV2KCZwY21jaWFfYnVzX3R5cGUsIE5VTEwsIE5VTEwsIHBjbWNpYV9yZXF1ZXJ5KTsKKwlidXNfZm9yX2VhY2hfZGV2KCZwY21jaWFfYnVzX3R5cGUsIE5VTEwsIE5VTEwsIHBjbWNpYV9yZXF1ZXJ5X2NhbGxiYWNrKTsKKworCS8qIGlmIHRoZSBDSVMgY2hhbmdlZCwgd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBudW1iZXIgb2YKKwkgKiBmdW5jdGlvbnMgY2hhbmdlZC4gKi8KKwlpZiAocy0+ZmFrZV9jaXMpIHsKKwkJaW50IG9sZF9mdW5jcywgbmV3X2Z1bmNzOworCQljaXN0cGxfbG9uZ2xpbmtfbWZjX3QgbWZjOworCisJCS8qIGRvZXMgdGhpcyBjaXMgb3ZlcnJpZGUgYWRkIG9yIHJlbW92ZSBmdW5jdGlvbnM/ICovCisJCW9sZF9mdW5jcyA9IHMtPmZ1bmN0aW9uczsKKworCQlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfTE9OR0xJTktfTUZDLAorCQkJCQkmbWZjKSkKKwkJCW5ld19mdW5jcyA9IG1mYy5uZm47CisJCWVsc2UKKwkJCW5ld19mdW5jcyA9IDE7CisJCWlmIChvbGRfZnVuY3MgPiBuZXdfZnVuY3MpIHsKKwkJCXBjbWNpYV9jYXJkX3JlbW92ZShzLCBOVUxMKTsKKwkJCXBjbWNpYV9jYXJkX2FkZChzKTsKKwkJfSBlbHNlIGlmIChuZXdfZnVuY3MgPiBvbGRfZnVuY3MpIHsKKwkJCXMtPmZ1bmN0aW9ucyA9IG5ld19mdW5jczsKKwkJCXBjbWNpYV9kZXZpY2VfYWRkKHMsIDEpOworCQl9CisJfQorCisJLyogSWYgdGhlIFBDTUNJQSBkZXZpY2UgY29uc2lzdHMgb2YgdHdvIHBzZXVkbyBkZXZpY2VzLAorCSAqIGNhbGwgcGNtY2lhX2RldmljZV9hZGQoKSAtLSB3aGljaCB3aWxsIGZhaWwgaWYgYm90aAorCSAqIGRldmljZXMgYXJlIGFscmVhZHkgcmVnaXN0ZXJlZC4gKi8KKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCWhhc19wZmMgPSBzLT5wY21jaWFfc3RhdGUuaGFzX3BmYzsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJaWYgKGhhc19wZmMpCisJCXBjbWNpYV9kZXZpY2VfYWRkKHMsIDApOwogCiAJLyogd2UgcmUtc2NhbiBhbGwgZGV2aWNlcywgbm90IGp1c3QgdGhlIG9uZXMgY29ubmVjdGVkIHRvIHRoaXMKIAkgKiBzb2NrZXQuIFRoaXMgZG9lcyBub3QgbWF0dGVyLCB0aG91Z2guICovCi0JcmV0ID0gYnVzX3Jlc2Nhbl9kZXZpY2VzKCZwY21jaWFfYnVzX3R5cGUpOwotCWlmIChyZXQpCi0JCXByaW50ayhLRVJOX0lORk8gInBjbWNpYTogYnVzX3Jlc2Nhbl9kZXZpY2VzIGZhaWxlZFxuIik7CisJaWYgKGJ1c19yZXNjYW5fZGV2aWNlcygmcGNtY2lhX2J1c190eXBlKSkKKwkJZGV2X3dhcm4oJnMtPmRldiwgInJlc2Nhbm5pbmcgdGhlIGJ1cyBmYWlsZWRcbiIpOwogfQogCisKICNpZmRlZiBDT05GSUdfUENNQ0lBX0xPQURfQ0lTCiAKIC8qKgpAQCAtNzEwLDkgKzcyMyw2IEBACiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBkZXYtPnNvY2tldDsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWludCByZXQgPSAtRU5PTUVNOwotCWludCBub19mdW5jczsKLQlpbnQgb2xkX2Z1bmNzOwotCWNpc3RwbF9sb25nbGlua19tZmNfdCBtZmM7CiAKIAlpZiAoIWZpbGVuYW1lKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTczOSwxOSArNzQ5LDggQEAKIAkJLyogdXBkYXRlIGluZm9ybWF0aW9uICovCiAJCXBjbWNpYV9kZXZpY2VfcXVlcnkoZGV2KTsKIAotCQkvKiBkb2VzIHRoaXMgY2lzIG92ZXJyaWRlIGFkZCBvciByZW1vdmUgZnVuY3Rpb25zPyAqLwotCQlvbGRfZnVuY3MgPSBzLT5mdW5jdGlvbnM7Ci0KLQkJaWYgKCFwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX0xPTkdMSU5LX01GQywgJm1mYykpCi0JCQlub19mdW5jcyA9IG1mYy5uZm47Ci0JCWVsc2UKLQkJCW5vX2Z1bmNzID0gMTsKLQkJcy0+ZnVuY3Rpb25zID0gbm9fZnVuY3M7Ci0KLQkJaWYgKG9sZF9mdW5jcyA+IG5vX2Z1bmNzKQotCQkJcGNtY2lhX2NhcmRfcmVtb3ZlKHMsIGRldik7Ci0JCWVsc2UgaWYgKG5vX2Z1bmNzID4gb2xkX2Z1bmNzKQotCQkJcGNtY2lhX2FkZF9kZXZpY2VfbGF0ZXIocywgMSk7CisJCS8qIHJlcXVlcnkgKGFzIG51bWJlciBvZiBmdW5jdGlvbnMgbWlnaHQgaGF2ZSBjaGFuZ2VkKSAqLworCQlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX1JFUVVFUlkpOwogCX0KICByZWxlYXNlOgogCXJlbGVhc2VfZmlybXdhcmUoZncpOwpAQCAtODE4LDkgKzgxNywxNCBAQAogCWlmIChkaWQtPm1hdGNoX2ZsYWdzICYgUENNQ0lBX0RFVl9JRF9NQVRDSF9ERVZJQ0VfTk8pIHsKIAkJaWYgKGRldi0+ZGV2aWNlX25vICE9IGRpZC0+ZGV2aWNlX25vKQogCQkJcmV0dXJuIDA7CisJCW11dGV4X2xvY2soJmRldi0+c29ja2V0LT5vcHNfbXV0ZXgpOworCQlkZXYtPnNvY2tldC0+cGNtY2lhX3N0YXRlLmhhc19wZmMgPSAxOworCQltdXRleF91bmxvY2soJmRldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCX0KIAogCWlmIChkaWQtPm1hdGNoX2ZsYWdzICYgUENNQ0lBX0RFVl9JRF9NQVRDSF9GVU5DX0lEKSB7CisJCWludCByZXQ7CisKIAkJaWYgKCghZGV2LT5oYXNfZnVuY19pZCkgfHwgKGRldi0+ZnVuY19pZCAhPSBkaWQtPmZ1bmNfaWQpKQogCQkJcmV0dXJuIDA7CiAKQEAgLTgzNSwxMCArODM5LDE1IEBACiAJCSAqIGFmdGVyIGl0IGhhcyByZS1jaGVja2VkIHRoYXQgdGhlcmUgaXMgbm8gcG9zc2libGUgbW9kdWxlCiAJCSAqIHdpdGggYSBwcm9kX2lkL21hbmZfaWQvY2FyZF9pZCBtYXRjaC4KIAkJICovCi0JCWRldl9kYmcoJmRldi0+ZGV2LAotCQkJInNraXBwaW5nIEZVTkNfSUQgbWF0Y2ggdW50aWwgdXNlcnNwYWNlIGludGVyYWN0aW9uXG4iKTsKLQkJaWYgKCFkZXYtPmFsbG93X2Z1bmNfaWRfbWF0Y2gpCisJCW11dGV4X2xvY2soJmRldi0+c29ja2V0LT5vcHNfbXV0ZXgpOworCQlyZXQgPSBkZXYtPmFsbG93X2Z1bmNfaWRfbWF0Y2g7CisJCW11dGV4X3VubG9jaygmZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CisKKwkJaWYgKCFyZXQpIHsKKwkJCWRldl9kYmcoJmRldi0+ZGV2LAorCQkJCSJza2lwcGluZyBGVU5DX0lEIG1hdGNoIHVudGlsIHVzZXJzcGFjZSBBQ0tcbiIpOwogCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlpZiAoZGlkLT5tYXRjaF9mbGFncyAmIFBDTUNJQV9ERVZfSURfTUFUQ0hfRkFLRV9DSVMpIHsKQEAgLTg1OSw4ICs4NjgsNiBAQAogCQkJcmV0dXJuIDA7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgZGlkKTsKLQogCXJldHVybiAxOwogfQogCkBAIC04NzMsMTYgKzg4MCwxNiBAQAogCXN0cnVjdCBwY21jaWFfZHluaWQgKmR5bmlkOwogCiAJLyogbWF0Y2ggZHluYW1pYyBkZXZpY2VzIGZpcnN0ICovCi0Jc3Bpbl9sb2NrKCZwX2Rydi0+ZHluaWRzLmxvY2spOworCW11dGV4X2xvY2soJnBfZHJ2LT5keW5pZHMubG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkeW5pZCwgJnBfZHJ2LT5keW5pZHMubGlzdCwgbm9kZSkgewogCQlkZXZfZGJnKGRldiwgInRyeWluZyB0byBtYXRjaCB0byAlc1xuIiwgZHJ2LT5uYW1lKTsKIAkJaWYgKHBjbWNpYV9kZXZtYXRjaChwX2RldiwgJmR5bmlkLT5pZCkpIHsKIAkJCWRldl9kYmcoZGV2LCAibWF0Y2hlZCB0byAlc1xuIiwgZHJ2LT5uYW1lKTsKLQkJCXNwaW5fdW5sb2NrKCZwX2Rydi0+ZHluaWRzLmxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZwX2Rydi0+ZHluaWRzLmxvY2spOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2soJnBfZHJ2LT5keW5pZHMubG9jayk7CisJbXV0ZXhfdW5sb2NrKCZwX2Rydi0+ZHluaWRzLmxvY2spOwogCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9JT0NUTAogCS8qIG1hdGNoaW5nIGJ5IGNhcmRtZ3IgKi8KQEAgLTk3MCwxMyArOTc3LDE0IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHJ1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpbnQgcmM7CiAKIAlkb3duKCZkZXYtPnNlbSk7CiAJcmMgPSBwY21jaWFfZGV2X3Jlc3VtZShkZXYpOwogCXVwKCZkZXYtPnNlbSk7CisJcmV0dXJuIHJjOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqIHBlci1kZXZpY2Ugc3lzZnMgb3V0cHV0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEwMjcsNyArMTAzNSw3IEBACiAJaWYgKCghcF9kZXYtPnN1c3BlbmRlZCkgJiYgIXN0cm5jbXAoYnVmLCAib2ZmIiwgMykpCiAJCXJldCA9IHJ1bnRpbWVfc3VzcGVuZChkZXYpOwogCWVsc2UgaWYgKHBfZGV2LT5zdXNwZW5kZWQgJiYgIXN0cm5jbXAoYnVmLCAib24iLCAyKSkKLQkJcnVudGltZV9yZXN1bWUoZGV2KTsKKwkJcmV0ID0gcnVudGltZV9yZXN1bWUoZGV2KTsKIAogCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKIH0KQEAgLTEwNTksMTkgKzEwNjcsMTQgQEAKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IHRvX3BjbWNpYV9kZXYoZGV2KTsKLQlpbnQgcmV0OwogCiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZwX2Rldi0+c29ja2V0LT5za3RfbXV0ZXgpOworCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJcF9kZXYtPmFsbG93X2Z1bmNfaWRfbWF0Y2ggPSAxOwotCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+c2t0X211dGV4KTsKLQotCXJldCA9IGJ1c19yZXNjYW5fZGV2aWNlcygmcGNtY2lhX2J1c190eXBlKTsKLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9JTkZPICJwY21jaWE6IGJ1c19yZXNjYW5fZGV2aWNlcyBmYWlsZWQgYWZ0ZXIgIgotCQkgICAgICAgImFsbG93aW5nIGZ1bmNfaWQgbWF0Y2hlc1xuIik7CisJbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOworCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHBfZGV2LT5zb2NrZXQsIFBDTUNJQV9VRVZFTlRfUkVRVUVSWSk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0xMDk5LDggKzExMDIsMTMgQEAKIAlzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqcF9kcnYgPSBOVUxMOwogCWludCByZXQgPSAwOwogCi0JaWYgKHBfZGV2LT5zdXNwZW5kZWQpCisJbXV0ZXhfbG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKKwlpZiAocF9kZXYtPnN1c3BlbmRlZCkgeworCQltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJCXJldHVybiAwOworCX0KKwlwX2Rldi0+c3VzcGVuZGVkID0gMTsKKwltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAKIAlkZXZfZGJnKGRldiwgInN1c3BlbmRpbmdcbiIpOwogCkBAIC0xMTE3LDYgKzExMjUsOSBAQAogCQkJCSAgICJwY21jaWE6IGRldmljZSAlcyAoZHJpdmVyICVzKSBkaWQgIgogCQkJCSAgICJub3Qgd2FudCB0byBnbyB0byBzbGVlcCAoJWQpXG4iLAogCQkJCSAgIHBfZGV2LT5kZXZuYW1lLCBwX2Rydi0+ZHJ2Lm5hbWUsIHJldCk7CisJCQltdXRleF9sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOworCQkJcF9kZXYtPnN1c3BlbmRlZCA9IDA7CisJCQltdXRleF91bmxvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTExMjcsOCArMTEzOCw2IEBACiAJfQogCiAgb3V0OgotCWlmICghcmV0KQotCQlwX2Rldi0+c3VzcGVuZGVkID0gMTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMTM5LDggKzExNDgsMTMgQEAKIAlzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqcF9kcnYgPSBOVUxMOwogCWludCByZXQgPSAwOwogCi0JaWYgKCFwX2Rldi0+c3VzcGVuZGVkKQorCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CisJaWYgKCFwX2Rldi0+c3VzcGVuZGVkKSB7CisJCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAkJcmV0dXJuIDA7CisJfQorCXBfZGV2LT5zdXNwZW5kZWQgPSAwOworCW11dGV4X3VubG9jaygmcF9kZXYtPnNvY2tldC0+b3BzX211dGV4KTsKIAogCWRldl9kYmcoZGV2LCAicmVzdW1pbmdcbiIpOwogCkBAIC0xMTYxLDggKzExNzUsNiBAQAogCQlyZXQgPSBwX2Rydi0+cmVzdW1lKHBfZGV2KTsKIAogIG91dDoKLQlpZiAoIXJldCkKLQkJcF9kZXYtPnN1c3BlbmRlZCA9IDA7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTIzNywxMyArMTI0OSwyMiBAQAogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMOgorCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlzLT5wY21jaWFfc3RhdGUucHJlc2VudCA9IDA7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcGNtY2lhX2NhcmRfcmVtb3ZlKHNrdCwgTlVMTCk7CiAJCWhhbmRsZV9ldmVudChza3QsIGV2ZW50KTsKKwkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwkJZGVzdHJveV9jaXNfY2FjaGUocyk7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJYnJlYWs7CiAKIAljYXNlIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OOgorCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCQlzLT5wY21jaWFfc3RhdGUuaGFzX3BmYyA9IDA7CiAJCXMtPnBjbWNpYV9zdGF0ZS5wcmVzZW50ID0gMTsKKwkJZGVzdHJveV9jaXNfY2FjaGUocyk7IC8qIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUuLi4gKi8KKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlwY21jaWFfY2FyZF9hZGQoc2t0KTsKIAkJaGFuZGxlX2V2ZW50KHNrdCwgZXZlbnQpOwogCQlicmVhazsKQEAgLTEyNTEsOCArMTI3MiwyNCBAQAogCWNhc2UgQ1NfRVZFTlRfRUpFQ1RJT05fUkVRVUVTVDoKIAkJYnJlYWs7CiAKLQljYXNlIENTX0VWRU5UX1BNX1NVU1BFTkQ6CiAJY2FzZSBDU19FVkVOVF9QTV9SRVNVTUU6CisJCWlmICh2ZXJpZnlfY2lzX2NhY2hlKHNrdCkgIT0gMCkgeworCQkJZGV2X2RiZygmc2t0LT5kZXYsICJjaXMgbWlzbWF0Y2ggLSBkaWZmZXJlbnQgY2FyZFxuIik7CisJCQkvKiBmaXJzdCwgcmVtb3ZlIHRoZSBjYXJkICovCisJCQlkc19ldmVudChza3QsIENTX0VWRU5UX0NBUkRfUkVNT1ZBTCwgQ1NfRVZFTlRfUFJJX0hJR0gpOworCQkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwkJCWRlc3Ryb3lfY2lzX2NhY2hlKHNrdCk7CisJCQlrZnJlZShza3QtPmZha2VfY2lzKTsKKwkJCXNrdC0+ZmFrZV9jaXMgPSBOVUxMOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCQkJLyogbm93LCBhZGQgdGhlIG5ldyBjYXJkICovCisJCQlkc19ldmVudChza3QsIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OLAorCQkJCSBDU19FVkVOVF9QUklfTE9XKTsKKwkJfQorCQloYW5kbGVfZXZlbnQoc2t0LCBldmVudCk7CisJCWJyZWFrOworCisJY2FzZSBDU19FVkVOVF9QTV9TVVNQRU5EOgogCWNhc2UgQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUw6CiAJY2FzZSBDU19FVkVOVF9DQVJEX1JFU0VUOgogCWRlZmF1bHQ6CkBAIC0xMjc1LDkgKzEzMTIsMTMgQEAKIAlpZiAoIXBfZGV2KQogCQlyZXR1cm4gTlVMTDsKIAorCW11dGV4X2xvY2soJnBfZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJaWYgKCFwX2Rldi0+c29ja2V0LT5wY21jaWFfc3RhdGUucHJlc2VudCkKIAkJZ290byBvdXQ7CiAKKwlpZiAocF9kZXYtPnNvY2tldC0+cGNtY2lhX3N0YXRlLmRlYWQpCisJCWdvdG8gb3V0OworCiAJaWYgKHBfZGV2LT5fcmVtb3ZlZCkKIAkJZ290byBvdXQ7CiAKQEAgLTEyODYsNiArMTMyNyw3IEBACiAKIAlyZXQgPSBwX2RldjsKICBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwX2Rldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwogCXBjbWNpYV9wdXRfZGV2KHBfZGV2KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTI5NSw3ICsxMzM3LDggQEAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2NhbGxiYWNrIHBjbWNpYV9idXNfY2FsbGJhY2sgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmV2ZW50ID0gZHNfZXZlbnQsCi0JLnJlcXVlcnkgPSBwY21jaWFfYnVzX3Jlc2NhbiwKKwkucmVxdWVyeSA9IHBjbWNpYV9yZXF1ZXJ5LAorCS52YWxpZGF0ZSA9IHBjY2FyZF92YWxpZGF0ZV9jaXMsCiAJLnN1c3BlbmQgPSBwY21jaWFfYnVzX3N1c3BlbmQsCiAJLnJlc3VtZSA9IHBjbWNpYV9idXNfcmVzdW1lLAogfTsKQEAgLTEzMTMsMTcgKzEzNTYsMTcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JLyoKLQkgKiBVZ2x5LiBCdXQgd2Ugd2FudCB0byB3YWl0IGZvciB0aGUgc29ja2V0IHRocmVhZHMgdG8gaGF2ZSBzdGFydGVkIHVwLgotCSAqIFdlIHJlYWxseSBzaG91bGQgbGV0IHRoZSBkcml2ZXJzIHRoZW1zZWx2ZXMgZHJpdmUgc29tZSBvZiB0aGlzLi4KLQkgKi8KLQltc2xlZXAoMjUwKTsKKwlyZXQgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmRldi0+a29iaiwgJnBjY2FyZF9jaXNfYXR0cik7CisJaWYgKHJldCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCBkZXYsICJQQ01DSUEgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJCXBjbWNpYV9wdXRfc29ja2V0KHNvY2tldCk7CisJCXJldHVybiByZXQ7CisJfQogCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9JT0NUTAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNvY2tldC0+cXVldWUpOwogI2VuZGlmCiAJSU5JVF9MSVNUX0hFQUQoJnNvY2tldC0+ZGV2aWNlc19saXN0KTsKLQlJTklUX1dPUksoJnNvY2tldC0+ZGV2aWNlX2FkZCwgcGNtY2lhX2RlbGF5ZWRfYWRkX2RldmljZSk7CiAJbWVtc2V0KCZzb2NrZXQtPnBjbWNpYV9zdGF0ZSwgMCwgc2l6ZW9mKHU4KSk7CiAJc29ja2V0LT5kZXZpY2VfY291bnQgPSAwOwogCkBAIC0xMzQ1LDE0ICsxMzg4LDIwIEBACiAJaWYgKCFzb2NrZXQpCiAJCXJldHVybjsKIAorCW11dGV4X2xvY2soJnNvY2tldC0+b3BzX211dGV4KTsKIAlzb2NrZXQtPnBjbWNpYV9zdGF0ZS5kZWFkID0gMTsKKwltdXRleF91bmxvY2soJnNvY2tldC0+b3BzX211dGV4KTsKKwogCXBjY2FyZF9yZWdpc3Rlcl9wY21jaWEoc29ja2V0LCBOVUxMKTsKIAogCS8qIHVucmVnaXN0ZXIgYW55IHVuYm91bmQgZGV2aWNlcyAqLwogCW11dGV4X2xvY2soJnNvY2tldC0+c2t0X211dGV4KTsKIAlwY21jaWFfY2FyZF9yZW1vdmUoc29ja2V0LCBOVUxMKTsKKwlyZWxlYXNlX2Npc19tZW0oc29ja2V0KTsKIAltdXRleF91bmxvY2soJnNvY2tldC0+c2t0X211dGV4KTsKIAorCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmZGV2LT5rb2JqLCAmcGNjYXJkX2Npc19hdHRyKTsKKwogCXBjbWNpYV9wdXRfc29ja2V0KHNvY2tldCk7CiAKIAlyZXR1cm47CkBAIC0xMzgzLDggKzE0MzIsNiBAQAogewogCWludCByZXQ7CiAKLQlzcGluX2xvY2tfaW5pdCgmcGNtY2lhX2Rldl9saXN0X2xvY2spOwotCiAJcmV0ID0gYnVzX3JlZ2lzdGVyKCZwY21jaWFfYnVzX3R5cGUpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInBjbWNpYTogYnVzX3JlZ2lzdGVyIGVycm9yOiAlZFxuIiwgcmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2VsZWN0cmFfY2YuYyBiL2RyaXZlcnMvcGNtY2lhL2VsZWN0cmFfY2YuYwppbmRleCBkMTg3YmE0Li44OWNmZGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9lbGVjdHJhX2NmLmMKKysrIGIvZHJpdmVycy9wY21jaWEvZWxlY3RyYV9jZi5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZWxlY3RyYV9jZl9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZWxlY3RyYV9jZl9tYXRjaFtdID0gewogCXsKIAkJLmNvbXBhdGlibGUgICA9ICJlbGVjdHJhLWNmIiwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvaTgyMzY1LmggYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuaAppbmRleCA2MjI4NjBjLi44NDllZjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuaAorKysgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuaApAQCAtNzcsOCArNzcsOCBAQAogI2RlZmluZSBJMzY1X1ZQUDJfNVYJMHgwNAkvKiBWcHAyID0gNS4wdiAqLwogI2RlZmluZSBJMzY1X1ZQUDJfMTJWCTB4MDgJLyogVnBwMiA9IDEyLjB2ICovCiAjZGVmaW5lIEkzNjVfVlBQMV9NQVNLCTB4MDMJLyogTWFzayBmb3IgdHVybmluZyBvZmYgVnBwMSAqLwotI2RlZmluZSBJMzY1X1ZQUDFfNVYJMHgwMQkvKiBWcHAyID0gNS4wdiAqLwotI2RlZmluZSBJMzY1X1ZQUDFfMTJWCTB4MDIJLyogVnBwMiA9IDEyLjB2ICovCisjZGVmaW5lIEkzNjVfVlBQMV81VgkweDAxCS8qIFZwcDEgPSA1LjB2ICovCisjZGVmaW5lIEkzNjVfVlBQMV8xMlYJMHgwMgkvKiBWcHAxID0gMTIuMHYgKi8KIAogLyogRmxhZ3MgZm9yIEkzNjVfSU5UQ1RMICovCiAjZGVmaW5lIEkzNjVfUklOR19FTkEJMHg4MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKaW5kZXggMjZhNjIxYy4uMGVjZTJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCkBAIC03NjQsNyArNzY0LDcgQEAKIAlmb3IgKGkgPSAwIDsgaSA8IHBjY19zb2NrZXRzIDsgaSsrKSB7CiAJCXNvY2tldFtpXS5zb2NrZXQuZGV2LnBhcmVudCA9ICZwY2NfZGV2aWNlLmRldjsKIAkJc29ja2V0W2ldLnNvY2tldC5vcHMgPSAmcGNjX29wZXJhdGlvbnM7Ci0JCXNvY2tldFtpXS5zb2NrZXQucmVzb3VyY2Vfb3BzID0gJnBjY2FyZF9ub25zdGF0aWNfb3BzOworCQlzb2NrZXRbaV0uc29ja2V0LnJlc291cmNlX29wcyA9ICZwY2NhcmRfc3RhdGljX29wczsKIAkJc29ja2V0W2ldLnNvY2tldC5vd25lciA9IFRISVNfTU9EVUxFOwogCQlzb2NrZXRbaV0ubnVtYmVyID0gaTsKIAkJcmV0ID0gcGNtY2lhX3JlZ2lzdGVyX3NvY2tldCgmc29ja2V0W2ldLnNvY2tldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYwppbmRleCA3Zjc5YzRlLi42MWMyMTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKQEAgLTEyMzMsNyArMTIzMyw3IEBACiAJCXNvY2tldFtpXS5zb2NrZXQuaW9fb2Zmc2V0ID0gMDsKIAkJc29ja2V0W2ldLnNvY2tldC5wY2lfaXJxID0gcGNtY2lhX3NjaGx2bDsKIAkJc29ja2V0W2ldLnNvY2tldC5vcHMgPSAmbTh4eF9zZXJ2aWNlczsKLQkJc29ja2V0W2ldLnNvY2tldC5yZXNvdXJjZV9vcHMgPSAmcGNjYXJkX25vbnN0YXRpY19vcHM7CisJCXNvY2tldFtpXS5zb2NrZXQucmVzb3VyY2Vfb3BzID0gJnBjY2FyZF9pb2R5bl9vcHM7CiAJCXNvY2tldFtpXS5zb2NrZXQuY2JfZGV2ID0gTlVMTDsKIAkJc29ja2V0W2ldLnNvY2tldC5kZXYucGFyZW50ID0gJm9mZGV2LT5kZXY7CiAJCXNvY2tldFtpXS5wY21jaWEgPSBwY21jaWE7CkBAIC0xMzAzLDcgKzEzMDMsNyBAQAogI2RlZmluZSBtOHh4X3Jlc3VtZSBOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbTh4eF9wY21jaWFfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG04eHhfcGNtY2lhX21hdGNoW10gPSB7CiAJewogCSAudHlwZSA9ICJwY21jaWEiLAogCSAuY29tcGF0aWJsZSA9ICJmc2wscHEtcGNtY2lhIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL28ybWljcm8uaCBiL2RyaXZlcnMvcGNtY2lhL28ybWljcm8uaAppbmRleCA2MjQ0NDJmLi5lNzRiZWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9vMm1pY3JvLmgKKysrIGIvZHJpdmVycy9wY21jaWEvbzJtaWNyby5oCkBAIC0xMTYsMTMgKzExNiwxMiBAQAogCSAqIGZyb20gRXJpYyBTdGlsbCwgMDJNaWNyby4KIAkgKi8KIAl1OCBhLCBiOworCWJvb2wgdXNlX3NwZWVkdXA7CiAKIAlpZiAoUENJX0ZVTkMoc29ja2V0LT5kZXYtPmRldmZuKSA9PSAwKSB7CiAJCWEgPSBjb25maWdfcmVhZGIoc29ja2V0LCBPMl9SRVNFUlZFRDEpOwogCQliID0gY29uZmlnX3JlYWRiKHNvY2tldCwgTzJfUkVTRVJWRUQyKTsKLQotCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCi0JCQkgICAiTzI6IHJlcyBhdCAweDk0LzB4RDQ6ICUwMngvJTAyeFxuIiwgYSwgYik7CisJCWRldl9kYmcoJnNvY2tldC0+ZGV2LT5kZXYsICJPMjogMHg5NC8weEQ0OiAlMDJ4LyUwMnhcbiIsIGEsIGIpOwogCiAJCXN3aXRjaCAoc29ja2V0LT5kZXYtPmRldmljZSkgewogCQkvKgpAQCAtMTM1LDIzICsxMzQsMzcgQEAKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX08yXzY4MTI6CiAJCWNhc2UgUENJX0RFVklDRV9JRF9PMl82ODMyOgogCQljYXNlIFBDSV9ERVZJQ0VfSURfTzJfNjgzNjoKLSAJCWNhc2UgUENJX0RFVklDRV9JRF9PMl82OTMzOgotCQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzb2NrZXQtPmRldi0+ZGV2LAotCQkJCSAgICJZZW50YSBPMjogb2xkIGJyaWRnZSwgZGlzYWJsaW5nIHJlYWQgIgotCQkJCSAgICJwcmVmZXRjaC93cml0ZSBidXJzdFxuIik7Ci0JCQljb25maWdfd3JpdGViKHNvY2tldCwgTzJfUkVTRVJWRUQxLAotCQkJICAgICAgICAgICAgICBhICYgfihPMl9SRVNfUkVBRF9QUkVGRVRDSCB8IE8yX1JFU19XUklURV9CVVJTVCkpOwotCQkJY29uZmlnX3dyaXRlYihzb2NrZXQsIE8yX1JFU0VSVkVEMiwKLQkJCSAgICAgICAgICAgICAgYiAmIH4oTzJfUkVTX1JFQURfUFJFRkVUQ0ggfCBPMl9SRVNfV1JJVEVfQlVSU1QpKTsKKwkJY2FzZSBQQ0lfREVWSUNFX0lEX08yXzY5MzM6CisJCQl1c2Vfc3BlZWR1cCA9IGZhbHNlOwogCQkJYnJlYWs7Ci0KIAkJZGVmYXVsdDoKLQkJCWRldl9wcmludGsoS0VSTl9JTkZPICwgJnNvY2tldC0+ZGV2LT5kZXYsCi0JCQkJICAgIk8yOiBlbmFibGluZyByZWFkIHByZWZldGNoL3dyaXRlIGJ1cnN0XG4iKTsKKwkJCXVzZV9zcGVlZHVwID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogdGhlIHVzZXIgbWF5IG92ZXJyaWRlIG91ciBkZWNpc2lvbiAqLworCQlpZiAoc3RyY2FzZWNtcChvMl9zcGVlZHVwLCAib24iKSA9PSAwKQorCQkJdXNlX3NwZWVkdXAgPSB0cnVlOworCQllbHNlIGlmIChzdHJjYXNlY21wKG8yX3NwZWVkdXAsICJvZmYiKSA9PSAwKQorCQkJdXNlX3NwZWVkdXAgPSBmYWxzZTsKKwkJZWxzZSBpZiAoc3RyY2FzZWNtcChvMl9zcGVlZHVwLCAiZGVmYXVsdCIpICE9IDApCisJCQlkZXZfd2Fybigmc29ja2V0LT5kZXYtPmRldiwKKwkJCQkiTzI6IFVua25vd24gcGFyYW1ldGVyLCB1c2luZyAnZGVmYXVsdCciKTsKKworCQlpZiAodXNlX3NwZWVkdXApIHsKKwkJCWRldl9pbmZvKCZzb2NrZXQtPmRldi0+ZGV2LAorCQkJCSJPMjogZW5hYmxpbmcgcmVhZCBwcmVmZXRjaC93cml0ZSBidXJzdFxuIik7CiAJCQljb25maWdfd3JpdGViKHNvY2tldCwgTzJfUkVTRVJWRUQxLAotCQkJICAgICAgICAgICAgICBhIHwgTzJfUkVTX1JFQURfUFJFRkVUQ0ggfCBPMl9SRVNfV1JJVEVfQlVSU1QpOworCQkJCSAgICAgIGEgfCBPMl9SRVNfUkVBRF9QUkVGRVRDSCB8IE8yX1JFU19XUklURV9CVVJTVCk7CiAJCQljb25maWdfd3JpdGViKHNvY2tldCwgTzJfUkVTRVJWRUQyLAotCQkJICAgICAgICAgICAgICBiIHwgTzJfUkVTX1JFQURfUFJFRkVUQ0ggfCBPMl9SRVNfV1JJVEVfQlVSU1QpOworCQkJCSAgICAgIGIgfCBPMl9SRVNfUkVBRF9QUkVGRVRDSCB8IE8yX1JFU19XUklURV9CVVJTVCk7CisJCX0gZWxzZSB7CisJCQlkZXZfaW5mbygmc29ja2V0LT5kZXYtPmRldiwKKwkJCQkiTzI6IGRpc2FibGluZyByZWFkIHByZWZldGNoL3dyaXRlIGJ1cnN0XG4iKTsKKwkJCWNvbmZpZ193cml0ZWIoc29ja2V0LCBPMl9SRVNFUlZFRDEsCisJCQkJICAgICAgYSAmIH4oTzJfUkVTX1JFQURfUFJFRkVUQ0ggfCBPMl9SRVNfV1JJVEVfQlVSU1QpKTsKKwkJCWNvbmZpZ193cml0ZWIoc29ja2V0LCBPMl9SRVNFUlZFRDIsCisJCQkJICAgICAgYiAmIH4oTzJfUkVTX1JFQURfUFJFRkVUQ0ggfCBPMl9SRVNfV1JJVEVfQlVSU1QpKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jIGIvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jCmluZGV4IDY2Mzc4MWQuLjNlZjk5MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYworKysgYi9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMKQEAgLTcxLDggKzcxLDYgQEAKIAogI2RlZmluZQlQT0xMX0lOVEVSVkFMCQkoMiAqIEhaKQogCi0jZGVmaW5lCVNaXzJLCQkJKDIgKiBTWl8xSykKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBpbnQgb21hcF9jZl9zc19pbml0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwppbmRleCBmNzNmZDViLi4xM2E3MTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYwpAQCAtNjIsMTYgKzYyLDE1IEBACiAJCQkJCQl1bnNpZ25lZCBpbnQgZnVuY3Rpb24pCiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBfZGV2LCAmcy0+ZGV2aWNlc19saXN0LCBzb2NrZXRfZGV2aWNlX2xpc3QpIHsKIAkJaWYgKHBfZGV2LT5mdW5jID09IGZ1bmN0aW9uKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQkJcmV0dXJuIHBjbWNpYV9nZXRfZGV2KHBfZGV2KTsKIAkJfQogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMTY5LDcgKzE2OCw2IEBACiB7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7CiAJaW50IHJldCA9IC1FTk9TWVM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRvd25fcmVhZCgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHMsICZwY21jaWFfc29ja2V0X2xpc3QsIHNvY2tldF9saXN0KSB7CkBAIC0xODIsMTQgKzE4MCwxMyBAQAogCiAJCQkvKiB5b3UgY2FuJ3QgdXNlIHRoZSBvbGQgaW50ZXJmYWNlIGlmIHRoZSBuZXcKIAkJCSAqIG9uZSB3YXMgdXNlZCBiZWZvcmUgKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CisJCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQkJaWYgKChzLT5yZXNvdXJjZV9zZXR1cF9uZXcpICYmCiAJCQkgICAgIShzLT5yZXNvdXJjZV9zZXR1cF9vbGQpKSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOworCQkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJCQljb250aW51ZTsKIAkJCX0gZWxzZSBpZiAoIShzLT5yZXNvdXJjZV9zZXR1cF9vbGQpKQogCQkJCXMtPnJlc291cmNlX3NldHVwX29sZCA9IDE7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAKIAkJCXN3aXRjaCAoYWRqLT5SZXNvdXJjZSkgewogCQkJY2FzZSBSRVNfTUVNT1JZX1JBTkdFOgpAQCAtMjA4LDEwICsyMDUsOSBAQAogCQkJCSAqIGxhc3QgY2FsbCB0byBhZGp1c3RfcmVzb3VyY2VfaW5mbywgd2UKIAkJCQkgKiBhbHdheXMgbmVlZCB0byBhc3N1bWUgdGhpcyBpcyB0aGUgbGF0ZXN0CiAJCQkJICogb25lLi4uICovCi0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKIAkJCQlzLT5yZXNvdXJjZV9zZXR1cF9kb25lID0gMTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAJCQl9CisJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCX0KIAl9CiAJdXBfcmVhZCgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKQEAgLTQ3MCw3ICs0NjYsNiBAQAogCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydjsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CiAJaW50IHJldCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXMgPSBwY21jaWFfZ2V0X3NvY2tldChzKTsKIAlpZiAoIXMpCkBAIC00OTAsNyArNDg1LDcgQEAKIAkJZ290byBlcnJfcHV0X2RyaXZlcjsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocF9kZXYsICZzLT5kZXZpY2VzX2xpc3QsIHNvY2tldF9kZXZpY2VfbGlzdCkgewogCQlpZiAocF9kZXYtPmZ1bmMgPT0gYmluZF9pbmZvLT5mdW5jdGlvbikgewogCQkJaWYgKChwX2Rldi0+ZGV2LmRyaXZlciA9PSAmcF9kcnYtPmRydikpIHsKQEAgLTQ5OSw3ICs0OTQsNyBAQAogCQkJCQkgKiByZWdpc3RlcmVkLCBhbmQgaXQgd2FzIHJlZ2lzdGVyZWQKIAkJCQkJICogYnkgdXNlcnNwYWNlIGJlZm9yZSwgd2UgbmVlZCB0bwogCQkJCQkgKiByZXR1cm4gdGhlICJpbnN0YW5jZSIuICovCi0JCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJCQkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJCQkJYmluZF9pbmZvLT5pbnN0YW5jZSA9IHBfZGV2OwogCQkJCQlyZXQgPSAtRUJVU1k7CiAJCQkJCWdvdG8gZXJyX3B1dF9tb2R1bGU7CkBAIC01MDcsNyArNTAyLDcgQEAKIAkJCQkJLyogdGhlIGNvcnJlY3QgZHJpdmVyIG1hbmFnZWQgdG8gYmluZAogCQkJCQkgKiBpdHNlbGYgbWFnaWNhbGx5IHRvIHRoZSBjb3JyZWN0CiAJCQkJCSAqIGRldmljZS4gKi8KLQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQkJCQlwX2Rldi0+Y2FyZG1nciA9IHBfZHJ2OwogCQkJCQlyZXQgPSAwOwogCQkJCQlnb3RvIGVycl9wdXRfbW9kdWxlOwpAQCAtNTE2LDEyICs1MTEsMTIgQEAKIAkJCQkvKiB0aGVyZSdzIGFscmVhZHkgYSBkZXZpY2UgYXZhaWxhYmxlIHdoZXJlCiAJCQkJICogbm8gZGV2aWNlIGhhcyBiZWVuIGJvdW5kIHRvIHlldC4gU28gd2UgZG9uJ3QKIAkJCQkgKiBuZWVkIHRvIHJlZ2lzdGVyIGEgZGV2aWNlISAqLwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQkJCWdvdG8gcmVzY2FuOwogCQkJfQogCQl9CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJcF9kZXYgPSBwY21jaWFfZGV2aWNlX2FkZChzLCBiaW5kX2luZm8tPmZ1bmN0aW9uKTsKIAlpZiAoIXBfZGV2KSB7CkBAIC01NzgsNyArNTczLDYgQEAKIAlkZXZfbm9kZV90ICpub2RlOwogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldjsKIAlzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqcF9kcnY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIENPTkZJR19DQVJEQlVTCkBAIC02MTcsNyArNjExLDcgQEAKIAl9CiAjZW5kaWYKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwX2RldiwgJnMtPmRldmljZXNfbGlzdCwgc29ja2V0X2RldmljZV9saXN0KSB7CiAJCWlmIChwX2Rldi0+ZnVuYyA9PSBiaW5kX2luZm8tPmZ1bmN0aW9uKSB7CiAJCQlwX2RldiA9IHBjbWNpYV9nZXRfZGV2KHBfZGV2KTsKQEAgLTYyNiwxMSArNjIwLDExIEBACiAJCQlnb3RvIGZvdW5kOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbWNpYV9kZXZfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXJldHVybiAtRU5PREVWOwogCiAgZm91bmQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNtY2lhX2Rldl9saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlwX2RydiA9IHRvX3BjbWNpYV9kcnYocF9kZXYtPmRldi5kcml2ZXIpOwogCWlmIChwX2RydiAmJiAhcF9kZXYtPl9sb2NrZWQpIHsKQEAgLTkzMSwxNiArOTI1LDE2IEBACiAJcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCAmYnVmLT5jaXNpbmZvLkNoYWlucyk7CiAJYnJlYWs7CiAgICAgY2FzZSBEU19TVVNQRU5EX0NBUkQ6Ci0JcmV0ID0gcGNtY2lhX3N1c3BlbmRfY2FyZChzKTsKKwlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX1NVU1BFTkQpOwogCWJyZWFrOwogICAgIGNhc2UgRFNfUkVTVU1FX0NBUkQ6Ci0JcmV0ID0gcGNtY2lhX3Jlc3VtZV9jYXJkKHMpOworCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfUkVTVU1FKTsKIAlicmVhazsKICAgICBjYXNlIERTX0VKRUNUX0NBUkQ6Ci0JZXJyID0gcGNtY2lhX2VqZWN0X2NhcmQocyk7CisJcGNtY2lhX3BhcnNlX3VldmVudHMocywgUENNQ0lBX1VFVkVOVF9FSkVDVCk7CiAJYnJlYWs7CiAgICAgY2FzZSBEU19JTlNFUlRfQ0FSRDoKLQllcnIgPSBwY21jaWFfaW5zZXJ0X2NhcmQocyk7CisJcGNtY2lhX3BhcnNlX3VldmVudHMocywgUENNQ0lBX1VFVkVOVF9JTlNFUlQpOwogCWJyZWFrOwogICAgIGNhc2UgRFNfQUNDRVNTX0NPTkZJR1VSQVRJT05fUkVHSVNURVI6CiAJaWYgKChidWYtPmNvbmZfcmVnLkFjdGlvbiA9PSBDU19XUklURSkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKaW5kZXggZDVkYjk1Ni4uYjJkZjA0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKQEAgLTQzLDYgKzQzLDM5IEBACiBzdGF0aWMgdTggcGNtY2lhX3VzZWRfaXJxW05SX0lSUVNdOwogI2VuZGlmCiAKK3N0YXRpYyBpbnQgcGNtY2lhX2FkanVzdF9pb19yZWdpb24oc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJICAgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQoreworCWlmIChzLT5yZXNvdXJjZV9vcHMtPmFkanVzdF9pb19yZWdpb24pCisJCXJldHVybiBzLT5yZXNvdXJjZV9vcHMtPmFkanVzdF9pb19yZWdpb24ocmVzLCBzdGFydCwgZW5kLCBzKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqcGNtY2lhX2ZpbmRfaW9fcmVnaW9uKHVuc2lnbmVkIGxvbmcgYmFzZSwgaW50IG51bSwKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCQkJICAgICAgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCit7CisJaWYgKHMtPnJlc291cmNlX29wcy0+ZmluZF9pbykKKwkJcmV0dXJuIHMtPnJlc291cmNlX29wcy0+ZmluZF9pbyhiYXNlLCBudW0sIGFsaWduLCBzKTsKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IHBjbWNpYV92YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCit7CisJaWYgKHMtPnJlc291cmNlX29wcy0+dmFsaWRhdGVfbWVtKQorCQlyZXR1cm4gcy0+cmVzb3VyY2Vfb3BzLT52YWxpZGF0ZV9tZW0ocyk7CisJLyogaWYgdGhlcmUgaXMgbm8gY2FsbGJhY2ssIHdlIGNhbiBhc3N1bWUgdGhhdCBldmVyeXRoaW5nIGlzIE9LICovCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCByZXNvdXJjZSAqcGNtY2lhX2ZpbmRfbWVtX3JlZ2lvbih1X2xvbmcgYmFzZSwgdV9sb25nIG51bSwgdV9sb25nIGFsaWduLAorCQkJCSBpbnQgbG93LCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKK3sKKwlpZiAocy0+cmVzb3VyY2Vfb3BzLT5maW5kX21lbSkKKwkJcmV0dXJuIHMtPnJlc291cmNlX29wcy0+ZmluZF9tZW0oYmFzZSwgbnVtLCBhbGlnbiwgbG93LCBzKTsKKwlyZXR1cm4gTlVMTDsKK30KKwogCiAvKiogYWxsb2NfaW9fc3BhY2UKICAqCkBAIC0xNTgsMTQgKzE5MSwxOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXMgPSBwX2Rldi0+c29ja2V0OworCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAogCWlmICghKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiQ29uZmlndXJhdGlvbiBpc250J3QgbG9ja2VkXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CiAKIAlhZGRyID0gKGMtPkNvbmZpZ0Jhc2UgKyByZWctPk9mZnNldCkgPj4gMTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlzd2l0Y2ggKHJlZy0+QWN0aW9uKSB7CiAJY2FzZSBDU19SRUFEOgpAQCAtMTkwLDYgKzIyNyw3IEBACiAJCQltZW1yZXFfdCAqcmVxKQogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKKwlpbnQgcmV0OwogCiAJd2gtLTsKIAlpZiAod2ggPj0gTUFYX1dJTikKQEAgLTE5OCwxMiArMjM2LDEzIEBACiAJCWRldl9kYmcoJnMtPmRldiwgImZhaWx1cmU6IHJlcXVlc3RlZCBwYWdlIGlzIHplcm9cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlzLT53aW5bd2hdLmNhcmRfc3RhcnQgPSByZXEtPkNhcmRPZmZzZXQ7Ci0JaWYgKHMtPm9wcy0+c2V0X21lbV9tYXAocywgJnMtPndpblt3aF0pICE9IDApIHsKLQkJZGV2X2RiZygmcy0+ZGV2LCAiZmFpbGVkIHRvIHNldF9tZW1fbWFwXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXJldHVybiAwOworCXJldCA9IHMtPm9wcy0+c2V0X21lbV9tYXAocywgJnMtPndpblt3aF0pOworCWlmIChyZXQpCisJCWRldl93YXJuKCZzLT5kZXYsICJmYWlsZWQgdG8gc2V0X21lbV9tYXBcbiIpOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKwlyZXR1cm4gcmV0OwogfSAvKiBwY21jaWFfbWFwX21lbV9wYWdlICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9tYXBfbWVtX3BhZ2UpOwogCkBAIC0yMTksMTQgKzI1OCwxOCBAQAogCWNvbmZpZ190ICpjOwogCiAJcyA9IHBfZGV2LT5zb2NrZXQ7CisKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiTm8gY2FyZCBwcmVzZW50XG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKCEoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJDb25maWd1cmF0aW9uIGlzbnQndCBsb2NrZWRcbiIpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KIApAQCAtMjUxLDEwICsyOTQsMTIgQEAKIAkgICAgKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfVlBQMl9DSEFOR0VfVkFMSUQpKSB7CiAJCWlmIChtb2QtPlZwcDEgIT0gbW9kLT5WcHAyKSB7CiAJCQlkZXZfZGJnKCZzLT5kZXYsICJWcHAxIGFuZCBWcHAyIG11c3QgYmUgdGhlIHNhbWVcbiIpOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJcy0+c29ja2V0LlZwcCA9IG1vZC0+VnBwMTsKIAkJaWYgKHMtPm9wcy0+c2V0X3NvY2tldChzLCAmcy0+c29ja2V0KSkgeworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZzLT5kZXYsCiAJCQkJICAgIlVuYWJsZSB0byBzZXQgVlBQXG4iKTsKIAkJCXJldHVybiAtRUlPOwpAQCAtMjYyLDYgKzMwNyw3IEBACiAJfSBlbHNlIGlmICgobW9kLT5BdHRyaWJ1dGVzICYgQ09ORl9WUFAxX0NIQU5HRV9WQUxJRCkgfHwKIAkJICAgKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfVlBQMl9DSEFOR0VfVkFMSUQpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgImNoYW5naW5nIFZjYyBpcyBub3QgYWxsb3dlZCBhdCB0aGlzIHRpbWVcbiIpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjg2LDYgKzMzMiw3IEBACiAJCQlzLT5vcHMtPnNldF9pb19tYXAocywgJmlvX29uKTsKIAkJfQogCX0KKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0gLyogbW9kaWZ5X2NvbmZpZ3VyYXRpb24gKi8KQEAgLTI5Niw5ICszNDMsMTEgQEAKIHsKIAlwY2NhcmRfaW9fbWFwIGlvID0geyAwLCAwLCAwLCAwLCAxIH07CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBwX2Rldi0+c29ja2V0OwotCWNvbmZpZ190ICpjID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKKwljb25maWdfdCAqYzsKIAlpbnQgaTsKIAorCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAJaWYgKHBfZGV2LT5fbG9ja2VkKSB7CiAJCXBfZGV2LT5fbG9ja2VkID0gMDsKIAkJaWYgKC0tKHMtPmxvY2tfY291bnQpID09IDApIHsKQEAgLTMyMSw2ICszNzAsNyBAQAogCQkJCXMtPm9wcy0+c2V0X2lvX21hcChzLCAmaW8pOwogCQkJfQogCX0KKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0gLyogcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbiAqLwpAQCAtMzM3LDEwICszODcsMTQgQEAKIHN0YXRpYyBpbnQgcGNtY2lhX3JlbGVhc2VfaW8oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBpb19yZXFfdCAqcmVxKQogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKLQljb25maWdfdCAqYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CisJaW50IHJldCA9IC1FSU5WQUw7CisJY29uZmlnX3QgKmM7CisKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCiAJaWYgKCFwX2Rldi0+X2lvKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAKIAlwX2Rldi0+X2lvID0gMDsKIApAQCAtMzQ4LDcgKzQwMiw3IEBACiAJICAgIChjLT5pby5OdW1Qb3J0czEgIT0gcmVxLT5OdW1Qb3J0czEpIHx8CiAJICAgIChjLT5pby5CYXNlUG9ydDIgIT0gcmVxLT5CYXNlUG9ydDIpIHx8CiAJICAgIChjLT5pby5OdW1Qb3J0czIgIT0gcmVxLT5OdW1Qb3J0czIpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAKIAljLT5zdGF0ZSAmPSB+Q09ORklHX0lPX1JFUTsKIApAQCAtMzU2LDI4ICs0MTAsMzggQEAKIAlpZiAocmVxLT5OdW1Qb3J0czIpCiAJCXJlbGVhc2VfaW9fc3BhY2UocywgcmVxLT5CYXNlUG9ydDIsIHJlcS0+TnVtUG9ydHMyKTsKIAotCXJldHVybiAwOworb3V0OgorCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKworCXJldHVybiByZXQ7CiB9IC8qIHBjbWNpYV9yZWxlYXNlX2lvICovCiAKIAogc3RhdGljIGludCBwY21jaWFfcmVsZWFzZV9pcnEoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBpcnFfcmVxX3QgKnJlcSkKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBfZGV2LT5zb2NrZXQ7Ci0JY29uZmlnX3QgKmMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOworCWNvbmZpZ190ICpjOworCWludCByZXQgPSAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKworCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCiAJaWYgKCFwX2Rldi0+X2lycSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OworCiAJcF9kZXYtPl9pcnEgPSAwOwogCiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkKLQkJcmV0dXJuIC1FQUNDRVM7CisJCWdvdG8gb3V0OworCiAJaWYgKGMtPmlycS5BdHRyaWJ1dGVzICE9IHJlcS0+QXR0cmlidXRlcykgewogCQlkZXZfZGJnKCZzLT5kZXYsICJJUlEgYXR0cmlidXRlcyBtdXN0IG1hdGNoIGFzc2lnbmVkIG9uZXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCWlmIChzLT5pcnEuQXNzaWduZWRJUlEgIT0gcmVxLT5Bc3NpZ25lZElSUSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJJUlEgbXVzdCBtYXRjaCBhc3NpZ25lZCBvbmVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAJfQogCWlmICgtLXMtPmlycS5Db25maWcgPT0gMCkgewogCQljLT5zdGF0ZSAmPSB+Q09ORklHX0lSUV9SRVE7CkBAIC0zOTAsOCArNDU0LDEyIEBACiAjaWZkZWYgQ09ORklHX1BDTUNJQV9QUk9CRQogCXBjbWNpYV91c2VkX2lycVtyZXEtPkFzc2lnbmVkSVJRXS0tOwogI2VuZGlmCisJcmV0ID0gMDsKIAotCXJldHVybiAwOworb3V0OgorCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKworCXJldHVybiByZXQ7CiB9IC8qIHBjbWNpYV9yZWxlYXNlX2lycSAqLwogCiAKQEAgLTQwNCwxMCArNDcyLDEyIEBACiAJaWYgKHdoID49IE1BWF9XSU4pCiAJCXJldHVybiAtRUlOVkFMOwogCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAl3aW4gPSAmcy0+d2luW3doXTsKIAogCWlmICghKHBfZGV2LT5fd2luICYgQ0xJRU5UX1dJTl9SRVEod2gpKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJub3QgcmVsZWFzaW5nIHVua25vd24gd2luZG93XG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQyMyw2ICs0OTMsNyBAQAogCQl3aW4tPnJlcyA9IE5VTEw7CiAJfQogCXBfZGV2LT5fd2luICY9IH5DTElFTlRfV0lOX1JFUSh3aCk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9IC8qIHBjbWNpYV9yZWxlYXNlX3dpbmRvdyAqLwpAQCAtNDQ1LDggKzUxNiwxMSBAQAogCQlkZXZfZGJnKCZzLT5kZXYsICJJbnRUeXBlIG1heSBub3QgYmUgSU5UX0NBUkRCVVNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlkZXZfZGJnKCZzLT5kZXYsICJDb25maWd1cmF0aW9uIGlzIGxvY2tlZFxuIik7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KQEAgLTQ1NCw2ICs1MjgsNyBAQAogCS8qIERvIHBvd2VyIGNvbnRyb2wuICBXZSBkb24ndCBhbGxvdyBjaGFuZ2VzIGluIFZjYy4gKi8KIAlzLT5zb2NrZXQuVnBwID0gcmVxLT5WcHA7CiAJaWYgKHMtPm9wcy0+c2V0X3NvY2tldChzLCAmcy0+c29ja2V0KSkgeworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcy0+ZGV2LAogCQkJICAgIlVuYWJsZSB0byBzZXQgc29ja2V0IHN0YXRlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00NzYsNiArNTUxLDcgQEAKIAkJcy0+c29ja2V0LmlvX2lycSA9IDA7CiAJcy0+b3BzLT5zZXRfc29ja2V0KHMsICZzLT5zb2NrZXQpOwogCXMtPmxvY2tfY291bnQrKzsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAkvKiBTZXQgdXAgQ0lTIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCiAJYmFzZSA9IGMtPkNvbmZpZ0Jhc2UgPSByZXEtPkNvbmZpZ0Jhc2U7CkBAIC01MjQsNiArNjAwLDcgQEAKIAogCS8qIENvbmZpZ3VyZSBJL08gd2luZG93cyAqLwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19JT19SRVEpIHsKKwkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAkJaW9tYXAuc3BlZWQgPSBpb19zcGVlZDsKIAkJZm9yIChpID0gMDsgaSA8IE1BWF9JT19XSU47IGkrKykKIAkJCWlmIChzLT5pb1tpXS5yZXMpIHsKQEAgLTU0Miw2ICs2MTksNyBAQAogCQkJCXMtPm9wcy0+c2V0X2lvX21hcChzLCAmaW9tYXApOwogCQkJCXMtPmlvW2ldLkNvbmZpZysrOwogCQkJfQorCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJfQogCiAJYy0+c3RhdGUgfD0gQ09ORklHX0xPQ0tFRDsKQEAgLTU2MCw1NCArNjM4LDY1IEBACiB7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBwX2Rldi0+c29ja2V0OwogCWNvbmZpZ190ICpjOworCWludCByZXQgPSAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAogCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgIk5vIGNhcmQgcHJlc2VudFxuIik7Ci0JCXJldHVybiAtRU5PREVWOworCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoIXJlcSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OworCiAJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJDb25maWd1cmF0aW9uIGlzIGxvY2tlZFxuIik7Ci0JCXJldHVybiAtRUFDQ0VTOworCQlnb3RvIG91dDsKIAl9CiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0lPX1JFUSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJJTyBhbHJlYWR5IGNvbmZpZ3VyZWRcbiIpOwotCQlyZXR1cm4gLUVCVVNZOworCQlnb3RvIG91dDsKIAl9CiAJaWYgKHJlcS0+QXR0cmlidXRlczEgJiAoSU9fU0hBUkVEIHwgSU9fRk9SQ0VfQUxJQVNfQUNDRVNTKSkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJiYWQgYXR0cmlidXRlIHNldHRpbmcgZm9yIElPIHJlZ2lvbiAxXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAlpZiAoKHJlcS0+TnVtUG9ydHMyID4gMCkgJiYKIAkgICAgKHJlcS0+QXR0cmlidXRlczIgJiAoSU9fU0hBUkVEIHwgSU9fRk9SQ0VfQUxJQVNfQUNDRVNTKSkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiYmFkIGF0dHJpYnV0ZSBzZXR0aW5nIGZvciBJTyByZWdpb24gMlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIG91dDsKIAl9CiAKIAlkZXZfZGJnKCZzLT5kZXYsICJ0cnlpbmcgdG8gYWxsb2NhdGUgcmVzb3VyY2UgMVxuIik7Ci0JaWYgKGFsbG9jX2lvX3NwYWNlKHMsIHJlcS0+QXR0cmlidXRlczEsICZyZXEtPkJhc2VQb3J0MSwKLQkJCSAgIHJlcS0+TnVtUG9ydHMxLCByZXEtPklPQWRkckxpbmVzKSkgeworCXJldCA9IGFsbG9jX2lvX3NwYWNlKHMsIHJlcS0+QXR0cmlidXRlczEsICZyZXEtPkJhc2VQb3J0MSwKKwkJCSAgICAgcmVxLT5OdW1Qb3J0czEsIHJlcS0+SU9BZGRyTGluZXMpOworCWlmIChyZXQpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiYWxsb2NhdGlvbiBvZiByZXNvdXJjZSAxIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRUJVU1k7CisJCWdvdG8gb3V0OwogCX0KIAogCWlmIChyZXEtPk51bVBvcnRzMikgewogCQlkZXZfZGJnKCZzLT5kZXYsICJ0cnlpbmcgdG8gYWxsb2NhdGUgcmVzb3VyY2UgMlxuIik7Ci0JCWlmIChhbGxvY19pb19zcGFjZShzLCByZXEtPkF0dHJpYnV0ZXMyLCAmcmVxLT5CYXNlUG9ydDIsCi0JCQkJICAgcmVxLT5OdW1Qb3J0czIsIHJlcS0+SU9BZGRyTGluZXMpKSB7CisJCXJldCA9IGFsbG9jX2lvX3NwYWNlKHMsIHJlcS0+QXR0cmlidXRlczIsICZyZXEtPkJhc2VQb3J0MiwKKwkJCQkgICAgIHJlcS0+TnVtUG9ydHMyLCByZXEtPklPQWRkckxpbmVzKTsKKwkJaWYgKHJldCkgewogCQkJZGV2X2RiZygmcy0+ZGV2LCAiYWxsb2NhdGlvbiBvZiByZXNvdXJjZSAyIGZhaWxlZFxuIik7CiAJCQlyZWxlYXNlX2lvX3NwYWNlKHMsIHJlcS0+QmFzZVBvcnQxLCByZXEtPk51bVBvcnRzMSk7Ci0JCQlyZXR1cm4gLUVCVVNZOworCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKIAljLT5pbyA9ICpyZXE7CiAJYy0+c3RhdGUgfD0gQ09ORklHX0lPX1JFUTsKIAlwX2Rldi0+X2lvID0gMTsKLQlyZXR1cm4gMDsKKwlkZXZfZGJnKCZzLT5kZXYsICJhbGxvY2F0aW5nIHJlc291cmNlcyBzdWNjZWVkZWQ6ICVkXG4iLCByZXQpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0gLyogcGNtY2lhX3JlcXVlc3RfaW8gKi8KIEVYUE9SVF9TWU1CT0wocGNtY2lhX3JlcXVlc3RfaW8pOwogCkBAIC02MzYsMTggKzcyNSwyMCBAQAogCWludCByZXQgPSAtRUlOVkFMLCBpcnEgPSAwOwogCWludCB0eXBlOwogCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwogCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgIk5vIGNhcmQgcHJlc2VudFxuIik7Ci0JCXJldHVybiAtRU5PREVWOworCQlnb3RvIG91dDsKIAl9CiAJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkgewogCQlkZXZfZGJnKCZzLT5kZXYsICJDb25maWd1cmF0aW9uIGlzIGxvY2tlZFxuIik7Ci0JCXJldHVybiAtRUFDQ0VTOworCQlnb3RvIG91dDsKIAl9CiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0lSUV9SRVEpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiSVJRIGFscmVhZHkgY29uZmlndXJlZFxuIik7Ci0JCXJldHVybiAtRUJVU1k7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIERlY2lkZSB3aGF0IHR5cGUgb2YgaW50ZXJydXB0IHdlIGFyZSByZWdpc3RlcmluZyAqLwpAQCAtNzA4LDcgKzc5OSw3IEBACiAJaWYgKHJldCAmJiAhcy0+aXJxLkFzc2lnbmVkSVJRKSB7CiAJCWlmICghcy0+cGNpX2lycSkgewogCQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzLT5kZXYsICJubyBJUlEgZm91bmRcbiIpOwotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gb3V0OwogCQl9CiAJCXR5cGUgPSBJUlFGX1NIQVJFRDsKIAkJaXJxID0gcy0+cGNpX2lycTsKQEAgLTcyMCw3ICs4MTEsNyBAQAogCQlpZiAocmV0KSB7CiAJCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnMtPmRldiwKIAkJCQkicmVxdWVzdF9pcnEoKSBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gb3V0OwogCQl9CiAJfQogCkBAIC03NDMsNyArODM0LDEwIEBACiAJcGNtY2lhX3VzZWRfaXJxW2lycV0rKzsKICNlbmRpZgogCi0JcmV0dXJuIDA7CisJcmV0ID0gMDsKK291dDoKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJcmV0dXJuIHJldDsKIH0gLyogcGNtY2lhX3JlcXVlc3RfaXJxICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZXF1ZXN0X2lycSk7CiAKQEAgLTc5Niw2ICs4OTAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXdpbiA9ICZzLT53aW5bd107CiAKIAlpZiAoIShzLT5mZWF0dXJlcyAmIFNTX0NBUF9TVEFUSUNfTUFQKSkgewpAQCAtODAzLDYgKzg5OCw3IEBACiAJCQkJCQkgICAgICAocmVxLT5BdHRyaWJ1dGVzICYgV0lOX01BUF9CRUxPV18xTUIpLCBzKTsKIAkJaWYgKCF3aW4tPnJlcykgewogCQkJZGV2X2RiZygmcy0+ZGV2LCAiYWxsb2NhdGluZyBtZW0gcmVnaW9uIGZhaWxlZFxuIik7CisJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTgyMSw4ICs5MTcsMTAgQEAKIAlpZiAocmVxLT5BdHRyaWJ1dGVzICYgV0lOX1VTRV9XQUlUKQogCQl3aW4tPmZsYWdzIHw9IE1BUF9VU0VfV0FJVDsKIAl3aW4tPmNhcmRfc3RhcnQgPSAwOworCiAJaWYgKHMtPm9wcy0+c2V0X21lbV9tYXAocywgd2luKSAhPSAwKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgImZhaWxlZCB0byBzZXQgbWVtb3J5IG1hcHBpbmdcbiIpOworCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAJCXJldHVybiAtRUlPOwogCX0KIAlzLT5zdGF0ZSB8PSBTT0NLRVRfV0lOX1JFUSh3KTsKQEAgLTgzMyw2ICs5MzEsNyBAQAogCWVsc2UKIAkJcmVxLT5CYXNlID0gd2luLT5yZXMtPnN0YXJ0OwogCisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCSp3aCA9IHcgKyAxOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jIGIvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYwppbmRleCA1MmRiMTcyLi5lNmY3ZDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKQEAgLTIxLDYwICsyMSwxMiBAQAogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlICJjc19pbnRlcm5hbC5oIgogCi0KLWludCBwY21jaWFfdmFsaWRhdGVfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQotewotCWlmIChzLT5yZXNvdXJjZV9vcHMtPnZhbGlkYXRlX21lbSkKLQkJcmV0dXJuIHMtPnJlc291cmNlX29wcy0+dmFsaWRhdGVfbWVtKHMpOwotCS8qIGlmIHRoZXJlIGlzIG5vIGNhbGxiYWNrLCB3ZSBjYW4gYXNzdW1lIHRoYXQgZXZlcnl0aGluZyBpcyBPSyAqLwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChwY21jaWFfdmFsaWRhdGVfbWVtKTsKLQotaW50IHBjbWNpYV9hZGp1c3RfaW9fcmVnaW9uKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBsb25nIHJfc3RhcnQsCi0JCSAgICAgdW5zaWduZWQgbG9uZyByX2VuZCwgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCi17Ci0JaWYgKHMtPnJlc291cmNlX29wcy0+YWRqdXN0X2lvX3JlZ2lvbikKLQkJcmV0dXJuIHMtPnJlc291cmNlX29wcy0+YWRqdXN0X2lvX3JlZ2lvbihyZXMsIHJfc3RhcnQsIHJfZW5kLCBzKTsKLQlyZXR1cm4gLUVOT01FTTsKLX0KLUVYUE9SVF9TWU1CT0wocGNtY2lhX2FkanVzdF9pb19yZWdpb24pOwotCi1zdHJ1Y3QgcmVzb3VyY2UgKnBjbWNpYV9maW5kX2lvX3JlZ2lvbih1bnNpZ25lZCBsb25nIGJhc2UsIGludCBudW0sCi0JCSAgIHVuc2lnbmVkIGxvbmcgYWxpZ24sIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQotewotCWlmIChzLT5yZXNvdXJjZV9vcHMtPmZpbmRfaW8pCi0JCXJldHVybiBzLT5yZXNvdXJjZV9vcHMtPmZpbmRfaW8oYmFzZSwgbnVtLCBhbGlnbiwgcyk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKHBjbWNpYV9maW5kX2lvX3JlZ2lvbik7Ci0KLXN0cnVjdCByZXNvdXJjZSAqcGNtY2lhX2ZpbmRfbWVtX3JlZ2lvbih1X2xvbmcgYmFzZSwgdV9sb25nIG51bSwgdV9sb25nIGFsaWduLAotCQkJCSBpbnQgbG93LCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKLXsKLQlpZiAocy0+cmVzb3VyY2Vfb3BzLT5maW5kX21lbSkKLQkJcmV0dXJuIHMtPnJlc291cmNlX29wcy0+ZmluZF9tZW0oYmFzZSwgbnVtLCBhbGlnbiwgbG93LCBzKTsKLQlyZXR1cm4gTlVMTDsKLX0KLUVYUE9SVF9TWU1CT0wocGNtY2lhX2ZpbmRfbWVtX3JlZ2lvbik7Ci0KLXZvaWQgcmVsZWFzZV9yZXNvdXJjZV9kYihzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKLXsKLQlpZiAocy0+cmVzb3VyY2Vfb3BzLT5leGl0KQotCQlzLT5yZXNvdXJjZV9vcHMtPmV4aXQocyk7Ci19Ci0KLQogc3RhdGljIGludCBzdGF0aWNfaW5pdChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCiAJLyogdGhlIGdvb2QgdGhpbmcgYWJvdXQgU1NfQ0FQX1NUQVRJQ19NQVAgc29ja2V0cyBpcwogCSAqIHRoYXQgdGhleSBkb24ndCBuZWVkIGEgcmVzb3VyY2UgZGF0YWJhc2UgKi8KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CiAJcy0+cmVzb3VyY2Vfc2V0dXBfZG9uZSA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTQsMjIgKzY2LDIxIEBACiAJdW5zaWduZWQgbG9uZwlvZmZzZXQ7CiB9OwogCi1zdGF0aWMgdm9pZCBwY21jaWFfYWxpZ24odm9pZCAqYWxpZ25fZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24pCitzdGF0aWMgcmVzb3VyY2Vfc2l6ZV90IHBjbWNpYV9hbGlnbih2b2lkICphbGlnbl9kYXRhLAorCQkJCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJc3RydWN0IHBjbWNpYV9hbGlnbl9kYXRhICpkYXRhID0gYWxpZ25fZGF0YTsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0OworCXJlc291cmNlX3NpemVfdCBzdGFydDsKIAogCXN0YXJ0ID0gKHJlcy0+c3RhcnQgJiB+ZGF0YS0+bWFzaykgKyBkYXRhLT5vZmZzZXQ7CiAJaWYgKHN0YXJ0IDwgcmVzLT5zdGFydCkKIAkJc3RhcnQgKz0gZGF0YS0+bWFzayArIDE7Ci0JcmVzLT5zdGFydCA9IHN0YXJ0OwogCiAjaWZkZWYgQ09ORklHX1g4NgogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewogCQlpZiAoc3RhcnQgJiAweDMwMCkgewogCQkJc3RhcnQgPSAoc3RhcnQgKyAweDNmZikgJiB+MHgzZmY7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7CiAJCX0KIAl9CiAjZW5kaWYKQEAgLTEzNyw5ICs4OCwxMSBAQAogI2lmZGVmIENPTkZJR19NNjhLCiAJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7CiAJCWlmICgocmVzLT5zdGFydCArIHNpemUgLSAxKSA+PSAxMDI0KQotCQkJcmVzLT5zdGFydCA9IHJlcy0+ZW5kOworCQkJc3RhcnQgPSByZXMtPmVuZDsKIAl9CiAjZW5kaWYKKworCXJldHVybiBzdGFydDsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jIGIvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYwppbmRleCA5YjBkYzQzLi40NjYzYjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKQEAgLTU1LDExICs1NSwxMCBAQAogCiBzdHJ1Y3Qgc29ja2V0X2RhdGEgewogCXN0cnVjdCByZXNvdXJjZV9tYXAJCW1lbV9kYjsKKwlzdHJ1Y3QgcmVzb3VyY2VfbWFwCQltZW1fZGJfdmFsaWQ7CiAJc3RydWN0IHJlc291cmNlX21hcAkJaW9fZGI7Ci0JdW5zaWduZWQgaW50CQkJcnNyY19tZW1fcHJvYmU7CiB9OwogCi1zdGF0aWMgREVGSU5FX01VVEVYKHJzcmNfbXV0ZXgpOwogI2RlZmluZSBNRU1fUFJPQkVfTE9XCSgxIDw8IDApCiAjZGVmaW5lIE1FTV9QUk9CRV9ISUdICSgxIDw8IDEpCiAKQEAgLTEyNSw4ICsxMjQsMTAgQEAKIAlzdHJ1Y3QgcmVzb3VyY2VfbWFwICpwLCAqcTsKIAogCWZvciAocCA9IG1hcDsgOyBwID0gcC0+bmV4dCkgewotCQlpZiAoKHAgIT0gbWFwKSAmJiAocC0+YmFzZStwLT5udW0tMSA+PSBiYXNlKSkKLQkJCXJldHVybiAtMTsKKwkJaWYgKChwICE9IG1hcCkgJiYgKHAtPmJhc2UrcC0+bnVtID49IGJhc2UpKSB7CisJCQlwLT5udW0gPSBtYXgobnVtICsgYmFzZSAtIHAtPmJhc2UsIHAtPm51bSk7CisJCQlyZXR1cm4gMDsKKwkJfQogCQlpZiAoKHAtPm5leHQgPT0gbWFwKSB8fCAocC0+bmV4dC0+YmFzZSA+IGJhc2UrbnVtLTEpKQogCQkJYnJlYWs7CiAJfQpAQCAtMjY0LDM2ICsyNjUsNDQgQEAKIH0KICNlbmRpZgogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLSAgICBUaGlzIGlzIHRyaWNreS4uLiB3aGVuIHdlIHNldCB1cCBDSVMgbWVtb3J5LCB3ZSB0cnkgdG8gdmFsaWRhdGUKLSAgICB0aGUgbWVtb3J5IHdpbmRvdyBzcGFjZSBhbGxvY2F0aW9ucy4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLS8qIFZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGNhcmRzIHdpdGggYSB2YWxpZCBDSVMgKi8KKy8qKgorICogcmVhZGFibGUoKSAtIGlvbWVtIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGNhcmRzIHdpdGggYSB2YWxpZCBDSVMKKyAqLwogc3RhdGljIGludCByZWFkYWJsZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgc3RydWN0IHJlc291cmNlICpyZXMsCiAJCSAgICB1bnNpZ25lZCBpbnQgKmNvdW50KQogewotCWludCByZXQgPSAtMTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChzLT5mYWtlX2NpcykgeworCQlkZXZfZGJnKCZzLT5kZXYsICJmYWtlIENJUyBpcyBiZWluZyB1c2VkOiBjYW4ndCB2YWxpZGF0ZSBtZW1cbiIpOworCQlyZXR1cm4gMDsKKwl9CiAKIAlzLT5jaXNfbWVtLnJlcyA9IHJlczsKIAlzLT5jaXNfdmlydCA9IGlvcmVtYXAocmVzLT5zdGFydCwgcy0+bWFwX3NpemUpOwogCWlmIChzLT5jaXNfdmlydCkgewotCQlyZXQgPSBwY2NhcmRfdmFsaWRhdGVfY2lzKHMsIGNvdW50KTsKLQkJLyogaW52YWxpZGF0ZSBtYXBwaW5nIGFuZCBDSVMgY2FjaGUgKi8KKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCQkvKiBhcyB3ZSdyZSBvbmx5IGNhbGxlZCBmcm9tIHBjbWNpYS5jLCB3ZSdyZSBzYWZlICovCisJCWlmIChzLT5jYWxsYmFjay0+dmFsaWRhdGUpCisJCQlyZXQgPSBzLT5jYWxsYmFjay0+dmFsaWRhdGUocywgY291bnQpOworCQkvKiBpbnZhbGlkYXRlIG1hcHBpbmcgKi8KKwkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAkJaW91bm1hcChzLT5jaXNfdmlydCk7CiAJCXMtPmNpc192aXJ0ID0gTlVMTDsKLQkJZGVzdHJveV9jaXNfY2FjaGUocyk7CiAJfQogCXMtPmNpc19tZW0ucmVzID0gTlVMTDsKLQlpZiAoKHJldCAhPSAwKSB8fCAoKmNvdW50ID09IDApKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsKKwlpZiAoKHJldCkgfHwgKCpjb3VudCA9PSAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7CiB9CiAKLS8qIFZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIHNpbXBsZSBtZW1vcnkgY2FyZHMgKi8KLXN0YXRpYyBpbnQgY2hlY2tzdW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCByZXNvdXJjZSAqcmVzKQorLyoqCisgKiBjaGVja3N1bSgpIC0gaW9tZW0gdmFsaWRhdGlvbiBmdW5jdGlvbiBmb3Igc2ltcGxlIG1lbW9yeSBjYXJkcworICovCitzdGF0aWMgaW50IGNoZWNrc3VtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJICAgIHVuc2lnbmVkIGludCAqdmFsdWUpCiB7CiAJcGNjYXJkX21lbV9tYXAgbWFwOwogCWludCBpLCBhID0gMCwgYiA9IC0xLCBkOwpAQCAtMzIxLDYxICszMzAsOTAgQEAKIAkJaW91bm1hcCh2aXJ0KTsKIAl9CiAKLQlyZXR1cm4gKGIgPT0gLTEpID8gLTEgOiAoYT4+MSk7CisJaWYgKGIgPT0gLTEpCisJCXJldHVybiAtRUlOVkFMOworCisJKnZhbHVlID0gYTsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1jaXNfcmVhZGFibGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKQorLyoqCisgKiBkb192YWxpZGF0ZV9tZW0oKSAtIGxvdyBsZXZlbCB2YWxpZGF0ZSBhIG1lbW9yeSByZWdpb24gZm9yIFBDTUNJQSB1c2UKKyAqIEBzOgkJUENNQ0lBIHNvY2tldCB0byB2YWxpZGF0ZQorICogQGJhc2U6CXN0YXJ0IGFkZHJlc3Mgb2YgcmVzb3VyY2UgdG8gY2hlY2sKKyAqIEBzaXplOglzaXplIG9mIHJlc291cmNlIHRvIGNoZWNrCisgKiBAdmFsaWRhdGU6CXZhbGlkYXRpb24gZnVuY3Rpb24gdG8gdXNlCisgKgorICogZG9fdmFsaWRhdGVfbWVtKCkgc3BsaXRzIHVwIHRoZSBtZW1vcnkgcmVnaW9uIHdoaWNoIGlzIHRvIGJlIGNoZWNrZWQKKyAqIGludG8gdHdvIHBhcnRzLiBCb3RoIGFyZSBwYXNzZWQgdG8gdGhlIEB2YWxpZGF0ZSgpIGZ1bmN0aW9uLiBJZgorICogQHZhbGlkYXRlKCkgcmV0dXJucyBub24temVybywgb3IgdGhlIHZhbHVlIHBhcmFtZXRlciB0byBAdmFsaWRhdGUoKQorICogaXMgemVybywgb3IgdGhlIHZhbHVlIHBhcmFtZXRlciBpcyBkaWZmZXJlbnQgYmV0d2VlbiBib3RoIGNhbGxzLAorICogdGhlIGNoZWNrIGZhaWxzLCBhbmQgLUVJTlZBTCBpcyByZXR1cm5lZC4gRWxzZSwgMCBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIGludCBkb192YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCisJCQkgICB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgIGludCB2YWxpZGF0ZSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCisJCQkJCSBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQkJIHVuc2lnbmVkIGludCAqdmFsdWUpKQogeworCXN0cnVjdCBzb2NrZXRfZGF0YSAqc19kYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczEsICpyZXMyOwotCXVuc2lnbmVkIGludCBpbmZvMSwgaW5mbzI7Ci0JaW50IHJldCA9IDA7CisJdW5zaWduZWQgaW50IGluZm8xID0gMSwgaW5mbzIgPSAxOworCWludCByZXQgPSAtRUlOVkFMOwogCiAJcmVzMSA9IGNsYWltX3JlZ2lvbihzLCBiYXNlLCBzaXplLzIsIElPUkVTT1VSQ0VfTUVNLCAiUENNQ0lBIG1lbXByb2JlIik7CiAJcmVzMiA9IGNsYWltX3JlZ2lvbihzLCBiYXNlICsgc2l6ZS8yLCBzaXplLzIsIElPUkVTT1VSQ0VfTUVNLAogCQkJIlBDTUNJQSBtZW1wcm9iZSIpOwogCiAJaWYgKHJlczEgJiYgcmVzMikgewotCQlyZXQgPSByZWFkYWJsZShzLCByZXMxLCAmaW5mbzEpOwotCQlyZXQgKz0gcmVhZGFibGUocywgcmVzMiwgJmluZm8yKTsKKwkJcmV0ID0gMDsKKwkJaWYgKHZhbGlkYXRlKSB7CisJCQlyZXQgPSB2YWxpZGF0ZShzLCByZXMxLCAmaW5mbzEpOworCQkJcmV0ICs9IHZhbGlkYXRlKHMsIHJlczIsICZpbmZvMik7CisJCX0KIAl9CiAKIAlmcmVlX3JlZ2lvbihyZXMyKTsKIAlmcmVlX3JlZ2lvbihyZXMxKTsKIAotCXJldHVybiAocmV0ID09IDIpICYmIChpbmZvMSA9PSBpbmZvMik7Ci19CisJZGV2X2RiZygmcy0+ZGV2LCAiY3M6IG1lbW9yeSBwcm9iZSAweCUwNmx4LTB4JTA2bHg6ICVwICVwICV1ICV1ICV1IiwKKwkJYmFzZSwgYmFzZStzaXplLTEsIHJlczEsIHJlczIsIHJldCwgaW5mbzEsIGluZm8yKTsKIAotc3RhdGljIGludAotY2hlY2tzdW1fbWF0Y2goc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXN0cnVjdCByZXNvdXJjZSAqcmVzMSwgKnJlczI7Ci0JaW50IGEgPSAtMSwgYiA9IC0xOworCWlmICgocmV0KSB8fCAoaW5mbzEgIT0gaW5mbzIpIHx8IChpbmZvMSA9PSAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXMxID0gY2xhaW1fcmVnaW9uKHMsIGJhc2UsIHNpemUvMiwgSU9SRVNPVVJDRV9NRU0sICJQQ01DSUEgbWVtcHJvYmUiKTsKLQlyZXMyID0gY2xhaW1fcmVnaW9uKHMsIGJhc2UgKyBzaXplLzIsIHNpemUvMiwgSU9SRVNPVVJDRV9NRU0sCi0JCQkiUENNQ0lBIG1lbXByb2JlIik7Ci0KLQlpZiAocmVzMSAmJiByZXMyKSB7Ci0JCWEgPSBjaGVja3N1bShzLCByZXMxKTsKLQkJYiA9IGNoZWNrc3VtKHMsIHJlczIpOworCWlmICh2YWxpZGF0ZSAmJiAhcy0+ZmFrZV9jaXMpIHsKKwkJLyogbW92ZSBpdCB0byB0aGUgdmFsaWRhdGVkIGRhdGEgc2V0ICovCisJCWFkZF9pbnRlcnZhbCgmc19kYXRhLT5tZW1fZGJfdmFsaWQsIGJhc2UsIHNpemUpOworCQlzdWJfaW50ZXJ2YWwoJnNfZGF0YS0+bWVtX2RiLCBiYXNlLCBzaXplKTsKIAl9CiAKLQlmcmVlX3JlZ2lvbihyZXMyKTsKLQlmcmVlX3JlZ2lvbihyZXMxKTsKLQotCXJldHVybiAoYSA9PSBiKSAmJiAoYSA+PSAwKTsKKwlyZXR1cm4gMDsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSAgICBUaGUgbWVtb3J5IHByb2JlLiAgSWYgdGhlIG1lbW9yeSBsaXN0IGluY2x1ZGVzIGEgNjRLLWFsaWduZWQgYmxvY2sKLSAgICBiZWxvdyAxTUIsIHdlIHByb2JlIGluIDY0SyBjaHVua3MsIGFuZCBhcyBzb29uIGFzIHdlIGFjY3VtdWxhdGUgYXQKLSAgICBsZWFzdCBtZW1fbGltaXQgZnJlZSBzcGFjZSwgd2UgcXVpdC4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgZG9fbWVtX3Byb2JlKHVfbG9uZyBiYXNlLCB1X2xvbmcgbnVtLCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKKy8qKgorICogZG9fbWVtX3Byb2JlKCkgLSB2YWxpZGF0ZSBhIG1lbW9yeSByZWdpb24gZm9yIFBDTUNJQSB1c2UKKyAqIEBzOgkJUENNQ0lBIHNvY2tldCB0byB2YWxpZGF0ZQorICogQGJhc2U6CXN0YXJ0IGFkZHJlc3Mgb2YgcmVzb3VyY2UgdG8gY2hlY2sKKyAqIEBudW06CXNpemUgb2YgcmVzb3VyY2UgdG8gY2hlY2sKKyAqIEB2YWxpZGF0ZToJdmFsaWRhdGlvbiBmdW5jdGlvbiB0byB1c2UKKyAqIEBmYWxsYmFjazoJdmFsaWRhdGlvbiBmdW5jdGlvbiB0byB1c2UgaWYgdmFsaWRhdGUgZmFpbHMKKyAqCisgKiBkb19tZW1fcHJvYmUoKSBjaGVja3MgYSBtZW1vcnkgcmVnaW9uIGZvciB1c2UgYnkgdGhlIFBDTUNJQSBzdWJzeXN0ZW0uCisgKiBUbyBkbyBzbywgdGhlIGFyZWEgaXMgc3BsaXQgdXAgaW50byBzZW5zaWJsZSBwYXJ0cywgYW5kIHRoZW4gcGFzc2VkCisgKiBpbnRvIHRoZSBAdmFsaWRhdGUoKSBmdW5jdGlvbi4gT25seSBpZiBAdmFsaWRhdGUoKSBhbmQgQGZhbGxiYWNrKCkgZmFpbCwKKyAqIHRoZSBhcmVhIGlzIG1hcmtlZCBhcyB1bmF2YWliYWxlIGZvciB1c2UgYnkgdGhlIFBDTUNJQSBzdWJzeXN0ZW0uIFRoZQorICogZnVuY3Rpb24gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdXNhYmxlIG1lbW9yeSBhcmVhLgorICovCitzdGF0aWMgaW50IGRvX21lbV9wcm9iZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdV9sb25nIGJhc2UsIHVfbG9uZyBudW0sCisJCQlpbnQgdmFsaWRhdGUgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAorCQkJCSAgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCAqdmFsdWUpLAorCQkJaW50IGZhbGxiYWNrIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKKwkJCQkgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgKnZhbHVlKSkKIHsKIAlzdHJ1Y3Qgc29ja2V0X2RhdGEgKnNfZGF0YSA9IHMtPnJlc291cmNlX2RhdGE7CiAJdV9sb25nIGksIGosIGJhZCwgZmFpbCwgc3RlcDsKQEAgLTM5MywxNSArNDMxLDE0IEBACiAJZm9yIChpID0gaiA9IGJhc2U7IGkgPCBiYXNlK251bTsgaSA9IGogKyBzdGVwKSB7CiAJCWlmICghZmFpbCkgewogCQkJZm9yIChqID0gaTsgaiA8IGJhc2UrbnVtOyBqICs9IHN0ZXApIHsKLQkJCQlpZiAoY2lzX3JlYWRhYmxlKHMsIGosIHN0ZXApKQorCQkJCWlmICghZG9fdmFsaWRhdGVfbWVtKHMsIGosIHN0ZXAsIHZhbGlkYXRlKSkKIAkJCQkJYnJlYWs7CiAJCQl9CiAJCQlmYWlsID0gKChpID09IGJhc2UpICYmIChqID09IGJhc2UrbnVtKSk7CiAJCX0KLQkJaWYgKGZhaWwpIHsKLQkJCWZvciAoaiA9IGk7IGogPCBiYXNlK251bTsgaiArPSAyKnN0ZXApCi0JCQkJaWYgKGNoZWNrc3VtX21hdGNoKHMsIGosIHN0ZXApICYmCi0JCQkJCWNoZWNrc3VtX21hdGNoKHMsIGogKyBzdGVwLCBzdGVwKSkKKwkJaWYgKChmYWlsKSAmJiAoZmFsbGJhY2spKSB7CisJCQlmb3IgKGogPSBpOyBqIDwgYmFzZStudW07IGogKz0gc3RlcCkKKwkJCQlpZiAoIWRvX3ZhbGlkYXRlX21lbShzLCBqLCBzdGVwLCBmYWxsYmFjaykpCiAJCQkJCWJyZWFrOwogCQl9CiAJCWlmIChpICE9IGopIHsKQEAgLTQxNiw4ICs0NTMsMTQgQEAKIAlyZXR1cm4gbnVtIC0gYmFkOwogfQogCisKICNpZmRlZiBDT05GSUdfUENNQ0lBX1BST0JFCiAKKy8qKgorICogaW52X3Byb2JlKCkgLSB0b3AtdG8tYm90dG9tIHNlYXJjaCBmb3Igb25lIHVzdWFibGUgaGlnaCBtZW1vcnkgYXJlYQorICogQHM6CQlQQ01DSUEgc29ja2V0IHRvIHZhbGlkYXRlCisgKiBAbToJCXJlc291cmNlX21hcCB0byBjaGVjaworICovCiBzdGF0aWMgdV9sb25nIGludl9wcm9iZShzdHJ1Y3QgcmVzb3VyY2VfbWFwICptLCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKIAlzdHJ1Y3Qgc29ja2V0X2RhdGEgKnNfZGF0YSA9IHMtPnJlc291cmNlX2RhdGE7CkBAIC00MzIsOSArNDc1LDE4IEBACiAJfQogCWlmIChtLT5iYXNlIDwgMHgxMDAwMDApCiAJCXJldHVybiAwOwotCXJldHVybiBkb19tZW1fcHJvYmUobS0+YmFzZSwgbS0+bnVtLCBzKTsKKwlyZXR1cm4gZG9fbWVtX3Byb2JlKHMsIG0tPmJhc2UsIG0tPm51bSwgcmVhZGFibGUsIGNoZWNrc3VtKTsKIH0KIAorLyoqCisgKiB2YWxpZGF0ZV9tZW0oKSAtIG1lbW9yeSBwcm9iZSBmdW5jdGlvbgorICogQHM6CQlQQ01DSUEgc29ja2V0IHRvIHZhbGlkYXRlCisgKiBAcHJvYmVfbWFzazogTUVNX1BST0JFX0xPVyB8IE1FTV9QUk9CRV9ISUdICisgKgorICogVGhlIG1lbW9yeSBwcm9iZS4gIElmIHRoZSBtZW1vcnkgbGlzdCBpbmNsdWRlcyBhIDY0Sy1hbGlnbmVkIGJsb2NrCisgKiBiZWxvdyAxTUIsIHdlIHByb2JlIGluIDY0SyBjaHVua3MsIGFuZCBhcyBzb29uIGFzIHdlIGFjY3VtdWxhdGUgYXQKKyAqIGxlYXN0IG1lbV9saW1pdCBmcmVlIHNwYWNlLCB3ZSBxdWl0LiBSZXR1cm5zIDAgb24gdXN1YWJsZSBwb3J0cy4KKyAqLwogc3RhdGljIGludCB2YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBwcm9iZV9tYXNrKQogewogCXN0cnVjdCByZXNvdXJjZV9tYXAgKm0sIG1tOwpAQCAtNDQ2LDYgKzQ5OCw4IEBACiAJaWYgKHByb2JlX21hc2sgJiBNRU1fUFJPQkVfSElHSCkgewogCQlpZiAoaW52X3Byb2JlKHNfZGF0YS0+bWVtX2RiLm5leHQsIHMpID4gMCkKIAkJCXJldHVybiAwOworCQlpZiAoc19kYXRhLT5tZW1fZGJfdmFsaWQubmV4dCAhPSAmc19kYXRhLT5tZW1fZGJfdmFsaWQpCisJCQlyZXR1cm4gMDsKIAkJZGV2X3ByaW50ayhLRVJOX05PVElDRSwgJnMtPmRldiwKIAkJCSAgICJjczogd2FybmluZzogbm8gaGlnaCBtZW1vcnkgc3BhY2UgYXZhaWxhYmxlIVxuIik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtNDU3LDcgKzUxMSw4IEBACiAJCWlmIChtbS5iYXNlID49IDB4MTAwMDAwKQogCQkJY29udGludWU7CiAJCWlmICgobW0uYmFzZSB8IG1tLm51bSkgJiAweGZmZmYpIHsKLQkJCW9rICs9IGRvX21lbV9wcm9iZShtbS5iYXNlLCBtbS5udW0sIHMpOworCQkJb2sgKz0gZG9fbWVtX3Byb2JlKHMsIG1tLmJhc2UsIG1tLm51bSwgcmVhZGFibGUsCisJCQkJCSAgIGNoZWNrc3VtKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCS8qIFNwZWNpYWwgcHJvYmUgZm9yIDY0Sy1hbGlnbmVkIGJsb2NrICovCkBAIC00NjcsNyArNTIyLDggQEAKIAkJCQlpZiAob2sgPj0gbWVtX2xpbWl0KQogCQkJCQlzdWJfaW50ZXJ2YWwoJnNfZGF0YS0+bWVtX2RiLCBiLCAweDEwMDAwKTsKIAkJCQllbHNlCi0JCQkJCW9rICs9IGRvX21lbV9wcm9iZShiLCAweDEwMDAwLCBzKTsKKwkJCQkJb2sgKz0gZG9fbWVtX3Byb2JlKHMsIGIsIDB4MTAwMDAsCisJCQkJCQkJICAgcmVhZGFibGUsIGNoZWNrc3VtKTsKIAkJCX0KIAkJfQogCX0KQEAgLTQ4MCw2ICs1MzYsMTMgQEAKIAogI2Vsc2UgLyogQ09ORklHX1BDTUNJQV9QUk9CRSAqLwogCisvKioKKyAqIHZhbGlkYXRlX21lbSgpIC0gbWVtb3J5IHByb2JlIGZ1bmN0aW9uCisgKiBAczoJCVBDTUNJQSBzb2NrZXQgdG8gdmFsaWRhdGUKKyAqIEBwcm9iZV9tYXNrOiBpZ25vcmVkCisgKgorICogUmV0dXJucyAwIG9uIHVzdWFibGUgcG9ydHMuCisgKi8KIHN0YXRpYyBpbnQgdmFsaWRhdGVfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgcHJvYmVfbWFzaykKIHsKIAlzdHJ1Y3QgcmVzb3VyY2VfbWFwICptLCBtbTsKQEAgLTQ4OCw3ICs1NTEsNyBAQAogCiAJZm9yIChtID0gc19kYXRhLT5tZW1fZGIubmV4dDsgbSAhPSAmc19kYXRhLT5tZW1fZGI7IG0gPSBtbS5uZXh0KSB7CiAJCW1tID0gKm07Ci0JCW9rICs9IGRvX21lbV9wcm9iZShtbS5iYXNlLCBtbS5udW0sIHMpOworCQlvayArPSBkb19tZW1fcHJvYmUocywgbW0uYmFzZSwgbW0ubnVtLCByZWFkYWJsZSwgY2hlY2tzdW0pOwogCX0KIAlpZiAob2sgPiAwKQogCQlyZXR1cm4gMDsKQEAgLTQ5OCwzMSArNTYxLDMxIEBACiAjZW5kaWYgLyogQ09ORklHX1BDTUNJQV9QUk9CRSAqLwogCiAKLS8qCisvKioKKyAqIHBjbWNpYV9ub25zdGF0aWNfdmFsaWRhdGVfbWVtKCkgLSB0cnkgdG8gdmFsaWRhdGUgaW9tZW0gZm9yIFBDTUNJQSB1c2UKKyAqIEBzOgkJUENNQ0lBIHNvY2tldCB0byB2YWxpZGF0ZQorICoKKyAqIFRoaXMgaXMgdHJpY2t5Li4uIHdoZW4gd2Ugc2V0IHVwIENJUyBtZW1vcnksIHdlIHRyeSB0byB2YWxpZGF0ZQorICogdGhlIG1lbW9yeSB3aW5kb3cgc3BhY2UgYWxsb2NhdGlvbnMuCisgKgogICogTG9ja2luZyBub3RlOiBNdXN0IGJlIGNhbGxlZCB3aXRoIHNrdF9tdXRleCBoZWxkIQogICovCiBzdGF0aWMgaW50IHBjbWNpYV9ub25zdGF0aWNfdmFsaWRhdGVfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQogewogCXN0cnVjdCBzb2NrZXRfZGF0YSAqc19kYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKIAl1bnNpZ25lZCBpbnQgcHJvYmVfbWFzayA9IE1FTV9QUk9CRV9MT1c7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAotCWlmICghcHJvYmVfbWVtKQorCWlmICghcHJvYmVfbWVtIHx8ICEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCiAJCXJldHVybiAwOwogCi0JbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7Ci0KIAlpZiAocy0+ZmVhdHVyZXMgJiBTU19DQVBfUEFHRV9SRUdTKQogCQlwcm9iZV9tYXNrID0gTUVNX1BST0JFX0hJR0g7CiAKLQlpZiAocHJvYmVfbWFzayAmIH5zX2RhdGEtPnJzcmNfbWVtX3Byb2JlKSB7Ci0JCWlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKQotCQkJcmV0ID0gdmFsaWRhdGVfbWVtKHMsIHByb2JlX21hc2spOwotCQlpZiAoIXJldCkKLQkJCXNfZGF0YS0+cnNyY19tZW1fcHJvYmUgfD0gcHJvYmVfbWFzazsKLQl9CisJcmV0ID0gdmFsaWRhdGVfbWVtKHMsIHByb2JlX21hc2spOwogCi0JbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKKwlpZiAoc19kYXRhLT5tZW1fZGJfdmFsaWQubmV4dCAhPSAmc19kYXRhLT5tZW1fZGJfdmFsaWQpCisJCXJldHVybiAwOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTUzMyw4ICs1OTYsOCBAQAogCXN0cnVjdCByZXNvdXJjZV9tYXAJKm1hcDsKIH07CiAKLXN0YXRpYyB2b2lkCi1wY21jaWFfY29tbW9uX2FsaWduKHZvaWQgKmFsaWduX2RhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorc3RhdGljIHJlc291cmNlX3NpemVfdAorcGNtY2lhX2NvbW1vbl9hbGlnbih2b2lkICphbGlnbl9kYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJc3RydWN0IHBjbWNpYV9hbGlnbl9kYXRhICpkYXRhID0gYWxpZ25fZGF0YTsKQEAgLTU0NSwxNyArNjA4LDE4IEBACiAJc3RhcnQgPSAocmVzLT5zdGFydCAmIH5kYXRhLT5tYXNrKSArIGRhdGEtPm9mZnNldDsKIAlpZiAoc3RhcnQgPCByZXMtPnN0YXJ0KQogCQlzdGFydCArPSBkYXRhLT5tYXNrICsgMTsKLQlyZXMtPnN0YXJ0ID0gc3RhcnQ7CisJcmV0dXJuIHN0YXJ0OwogfQogCi1zdGF0aWMgdm9pZAotcGNtY2lhX2FsaWduKHZvaWQgKmFsaWduX2RhdGEsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKLQkJcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQorc3RhdGljIHJlc291cmNlX3NpemVfdAorcGNtY2lhX2FsaWduKHZvaWQgKmFsaWduX2RhdGEsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCXJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgYWxpZ24pCiB7CiAJc3RydWN0IHBjbWNpYV9hbGlnbl9kYXRhICpkYXRhID0gYWxpZ25fZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2VfbWFwICptOworCXJlc291cmNlX3NpemVfdCBzdGFydDsKIAotCXBjbWNpYV9jb21tb25fYWxpZ24oZGF0YSwgcmVzLCBzaXplLCBhbGlnbik7CisJc3RhcnQgPSBwY21jaWFfY29tbW9uX2FsaWduKGRhdGEsIHJlcywgc2l6ZSwgYWxpZ24pOwogCiAJZm9yIChtID0gZGF0YS0+bWFwLT5uZXh0OyBtICE9IGRhdGEtPm1hcDsgbSA9IG0tPm5leHQpIHsKIAkJdW5zaWduZWQgbG9uZyBzdGFydCA9IG0tPmJhc2U7CkBAIC01NjcsOCArNjMxLDcgQEAKIAkJICogZml0IGhlcmUuCiAJCSAqLwogCQlpZiAocmVzLT5zdGFydCA8IHN0YXJ0KSB7Ci0JCQlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JCQlwY21jaWFfY29tbW9uX2FsaWduKGRhdGEsIHJlcywgc2l6ZSwgYWxpZ24pOworCQkJc3RhcnQgPSBwY21jaWFfY29tbW9uX2FsaWduKGRhdGEsIHJlcywgc2l6ZSwgYWxpZ24pOwogCQl9CiAKIAkJLyoKQEAgLTU4Niw3ICs2NDksOSBAQAogCSAqIElmIHdlIGZhaWxlZCB0byBmaW5kIHNvbWV0aGluZyBzdWl0YWJsZSwgZW5zdXJlIHdlIGZhaWwuCiAJICovCiAJaWYgKG0gPT0gZGF0YS0+bWFwKQotCQlyZXMtPnN0YXJ0ID0gcmVzLT5lbmQ7CisJCXN0YXJ0ID0gcmVzLT5lbmQ7CisKKwlyZXR1cm4gc3RhcnQ7CiB9CiAKIC8qCkBAIC02MDAsNyArNjY1LDYgQEAKIAlzdHJ1Y3Qgc29ja2V0X2RhdGEgKnNfZGF0YSA9IHMtPnJlc291cmNlX2RhdGE7CiAJaW50IHJldCA9IC1FTk9NRU07CiAKLQltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKIAlmb3IgKG0gPSBzX2RhdGEtPmlvX2RiLm5leHQ7IG0gIT0gJnNfZGF0YS0+aW9fZGI7IG0gPSBtLT5uZXh0KSB7CiAJCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBtLT5iYXNlOwogCQl1bnNpZ25lZCBsb25nIGVuZCA9IG0tPmJhc2UgKyBtLT5udW0gLSAxOwpAQCAtNjExLDcgKzY3NSw2IEBACiAJCXJldCA9IGFkanVzdF9yZXNvdXJjZShyZXMsIHJfc3RhcnQsIHJfZW5kIC0gcl9zdGFydCArIDEpOwogCQlicmVhazsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC02NDUsNyArNzA4LDYgQEAKIAlkYXRhLm9mZnNldCA9IGJhc2UgJiBkYXRhLm1hc2s7CiAJZGF0YS5tYXAgPSAmc19kYXRhLT5pb19kYjsKIAotCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOwogI2lmZGVmIENPTkZJR19QQ0kKIAlpZiAocy0+Y2JfZGV2KSB7CiAJCXJldCA9IHBjaV9idXNfYWxsb2NfcmVzb3VyY2Uocy0+Y2JfZGV2LT5idXMsIHJlcywgbnVtLCAxLApAQCAtNjU0LDcgKzcxNiw2IEBACiAjZW5kaWYKIAkJcmV0ID0gYWxsb2NhdGVfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgcmVzLCBudW0sIG1pbiwgfjBVTCwKIAkJCQkJMSwgcGNtY2lhX2FsaWduLCAmZGF0YSk7Ci0JbXV0ZXhfdW5sb2NrKCZyc3JjX211dGV4KTsKIAogCWlmIChyZXQgIT0gMCkgewogCQlrZnJlZShyZXMpOwpAQCAtNjcwLDE1ICs3MzEsMTUgQEAKIAlzdHJ1Y3Qgc29ja2V0X2RhdGEgKnNfZGF0YSA9IHMtPnJlc291cmNlX2RhdGE7CiAJc3RydWN0IHBjbWNpYV9hbGlnbl9kYXRhIGRhdGE7CiAJdW5zaWduZWQgbG9uZyBtaW4sIG1heDsKLQlpbnQgcmV0LCBpOworCWludCByZXQsIGksIGo7CiAKIAlsb3cgPSBsb3cgfHwgIShzLT5mZWF0dXJlcyAmIFNTX0NBUF9QQUdFX1JFR1MpOwogCiAJZGF0YS5tYXNrID0gYWxpZ24gLSAxOwogCWRhdGEub2Zmc2V0ID0gYmFzZSAmIGRhdGEubWFzazsKLQlkYXRhLm1hcCA9ICZzX2RhdGEtPm1lbV9kYjsKIAogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJZGF0YS5tYXAgPSAmc19kYXRhLT5tZW1fZGJfdmFsaWQ7CiAJCWlmIChsb3cpIHsKIAkJCW1heCA9IDB4MTAwMDAwVUw7CiAJCQltaW4gPSBiYXNlIDwgbWF4ID8gYmFzZSA6IDA7CkBAIC02ODcsMTcgKzc0OCwyMyBAQAogCQkJbWluID0gMHgxMDAwMDBVTCArIGJhc2U7CiAJCX0KIAotCQltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKKwkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgewogI2lmZGVmIENPTkZJR19QQ0kKLQkJaWYgKHMtPmNiX2RldikgewotCQkJcmV0ID0gcGNpX2J1c19hbGxvY19yZXNvdXJjZShzLT5jYl9kZXYtPmJ1cywgcmVzLCBudW0sCi0JCQkJCQkgICAgIDEsIG1pbiwgMCwKLQkJCQkJCSAgICAgcGNtY2lhX2FsaWduLCAmZGF0YSk7Ci0JCX0gZWxzZQorCQkJaWYgKHMtPmNiX2RldikgeworCQkJCXJldCA9IHBjaV9idXNfYWxsb2NfcmVzb3VyY2Uocy0+Y2JfZGV2LT5idXMsCisJCQkJCQkJcmVzLCBudW0sIDEsIG1pbiwgMCwKKwkJCQkJCQlwY21jaWFfYWxpZ24sICZkYXRhKTsKKwkJCX0gZWxzZQogI2VuZGlmCi0JCQlyZXQgPSBhbGxvY2F0ZV9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIHJlcywgbnVtLCBtaW4sCi0JCQkJCQltYXgsIDEsIHBjbWNpYV9hbGlnbiwgJmRhdGEpOwotCQltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOworCQkJeworCQkJCXJldCA9IGFsbG9jYXRlX3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwKKwkJCQkJCQlyZXMsIG51bSwgbWluLCBtYXgsIDEsCisJCQkJCQkJcGNtY2lhX2FsaWduLCAmZGF0YSk7CisJCQl9CisJCQlpZiAocmV0ID09IDApCisJCQkJYnJlYWs7CisJCQlkYXRhLm1hcCA9ICZzX2RhdGEtPm1lbV9kYjsKKwkJfQogCQlpZiAocmV0ID09IDAgfHwgbG93KQogCQkJYnJlYWs7CiAJCWxvdyA9IDE7CkBAIC03MjAsMjUgKzc4NywxOCBAQAogCWlmIChlbmQgPCBzdGFydCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZyc3JjX211dGV4KTsKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQUREX01BTkFHRURfUkVTT1VSQ0U6CiAJCXJldCA9IGFkZF9pbnRlcnZhbCgmZGF0YS0+bWVtX2RiLCBzdGFydCwgc2l6ZSk7CisJCWlmICghcmV0KQorCQkJZG9fbWVtX3Byb2JlKHMsIHN0YXJ0LCBzaXplLCBOVUxMLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBSRU1PVkVfTUFOQUdFRF9SRVNPVVJDRToKIAkJcmV0ID0gc3ViX2ludGVydmFsKCZkYXRhLT5tZW1fZGIsIHN0YXJ0LCBzaXplKTsKLQkJaWYgKCFyZXQpIHsKLQkJCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrZXQ7Ci0JCQlkb3duX3JlYWQoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNvY2tldCwgJnBjbWNpYV9zb2NrZXRfbGlzdCwgc29ja2V0X2xpc3QpCi0JCQkJcmVsZWFzZV9jaXNfbWVtKHNvY2tldCk7Ci0JCQl1cF9yZWFkKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOwotCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CiAJfQotCW11dGV4X3VubG9jaygmcnNyY19tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzU2LDcgKzgxNiw2IEBACiAJaWYgKGVuZCA+IElPX1NQQUNFX0xJTUlUKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJnJzcmNfbXV0ZXgpOwogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBBRERfTUFOQUdFRF9SRVNPVVJDRToKIAkJaWYgKGFkZF9pbnRlcnZhbCgmZGF0YS0+aW9fZGIsIHN0YXJ0LCBzaXplKSAhPSAwKSB7CkBAIC03NzUsNyArODM0LDYgQEAKIAkJcmV0ID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQotCW11dGV4X3VubG9jaygmcnNyY19tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtODAxLDggKzg1OSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogI2VuZGlmCiAKLQlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyBpKyspIHsKLQkJcmVzID0gcy0+Y2JfZGV2LT5idXMtPnJlc291cmNlW2ldOworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2Uocy0+Y2JfZGV2LT5idXMsIHJlcywgaSkgewogCQlpZiAoIXJlcykKIAkJCWNvbnRpbnVlOwogCkBAIC04NTksNiArOTE2LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlkYXRhLT5tZW1fZGIubmV4dCA9ICZkYXRhLT5tZW1fZGI7CisJZGF0YS0+bWVtX2RiX3ZhbGlkLm5leHQgPSAmZGF0YS0+bWVtX2RiX3ZhbGlkOwogCWRhdGEtPmlvX2RiLm5leHQgPSAmZGF0YS0+aW9fZGI7CiAKIAlzLT5yZXNvdXJjZV9kYXRhID0gKHZvaWQgKikgZGF0YTsKQEAgLTg3Myw3ICs5MzEsMTAgQEAKIAlzdHJ1Y3Qgc29ja2V0X2RhdGEgKmRhdGEgPSBzLT5yZXNvdXJjZV9kYXRhOwogCXN0cnVjdCByZXNvdXJjZV9tYXAgKnAsICpxOwogCi0JbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7CisJZm9yIChwID0gZGF0YS0+bWVtX2RiX3ZhbGlkLm5leHQ7IHAgIT0gJmRhdGEtPm1lbV9kYl92YWxpZDsgcCA9IHEpIHsKKwkJcSA9IHAtPm5leHQ7CisJCWtmcmVlKHApOworCX0KIAlmb3IgKHAgPSBkYXRhLT5tZW1fZGIubmV4dDsgcCAhPSAmZGF0YS0+bWVtX2RiOyBwID0gcSkgewogCQlxID0gcC0+bmV4dDsKIAkJa2ZyZWUocCk7CkBAIC04ODIsNyArOTQzLDYgQEAKIAkJcSA9IHAtPm5leHQ7CiAJCWtmcmVlKHApOwogCX0KLQltdXRleF91bmxvY2soJnJzcmNfbXV0ZXgpOwogfQogCiAKQEAgLTkwOSw3ICs5NjksNyBAQAogCXN0cnVjdCByZXNvdXJjZV9tYXAgKnA7CiAJc3NpemVfdCByZXQgPSAwOwogCi0JbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlkYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKIAogCWZvciAocCA9IGRhdGEtPmlvX2RiLm5leHQ7IHAgIT0gJmRhdGEtPmlvX2RiOyBwID0gcC0+bmV4dCkgewpAQCAtOTIxLDcgKzk4MSw3IEBACiAJCQkJKCh1bnNpZ25lZCBsb25nKSBwLT5iYXNlICsgcC0+bnVtIC0gMSkpOwogCX0KIAotCW11dGV4X3VubG9jaygmcnNyY19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTk0OSw5ICsxMDA5LDExIEBACiAJaWYgKGVuZF9hZGRyIDwgc3RhcnRfYWRkcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXJldCA9IGFkanVzdF9pbyhzLCBhZGQsIHN0YXJ0X2FkZHIsIGVuZF9hZGRyKTsKIAlpZiAoIXJldCkKIAkJcy0+cmVzb3VyY2Vfc2V0dXBfbmV3ID0gMTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CiB9CkBAIC05NjUsOSArMTAyNywxOSBAQAogCXN0cnVjdCByZXNvdXJjZV9tYXAgKnA7CiAJc3NpemVfdCByZXQgPSAwOwogCi0JbXV0ZXhfbG9jaygmcnNyY19tdXRleCk7CisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlkYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKIAorCWZvciAocCA9IGRhdGEtPm1lbV9kYl92YWxpZC5uZXh0OyBwICE9ICZkYXRhLT5tZW1fZGJfdmFsaWQ7CisJICAgICBwID0gcC0+bmV4dCkgeworCQlpZiAocmV0ID4gKFBBR0VfU0laRSAtIDEwKSkKKwkJCWNvbnRpbnVlOworCQlyZXQgKz0gc25wcmludGYoJmJ1ZltyZXRdLCAoUEFHRV9TSVpFIC0gcmV0IC0gMSksCisJCQkJIjB4JTA4bHggLSAweCUwOGx4XG4iLAorCQkJCSgodW5zaWduZWQgbG9uZykgcC0+YmFzZSksCisJCQkJKCh1bnNpZ25lZCBsb25nKSBwLT5iYXNlICsgcC0+bnVtIC0gMSkpOworCX0KKwogCWZvciAocCA9IGRhdGEtPm1lbV9kYi5uZXh0OyBwICE9ICZkYXRhLT5tZW1fZGI7IHAgPSBwLT5uZXh0KSB7CiAJCWlmIChyZXQgPiAoUEFHRV9TSVpFIC0gMTApKQogCQkJY29udGludWU7CkBAIC05NzcsNyArMTA0OSw3IEBACiAJCQkJKCh1bnNpZ25lZCBsb25nKSBwLT5iYXNlICsgcC0+bnVtIC0gMSkpOwogCX0KIAotCW11dGV4X3VubG9jaygmcnNyY19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwMDUsOSArMTA3NywxMSBAQAogCWlmIChlbmRfYWRkciA8IHN0YXJ0X2FkZHIpCiAJCXJldHVybiAtRUlOVkFMOwogCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlyZXQgPSBhZGp1c3RfbWVtb3J5KHMsIGFkZCwgc3RhcnRfYWRkciwgZW5kX2FkZHIpOwogCWlmICghcmV0KQogCQlzLT5yZXNvdXJjZV9zZXR1cF9uZXcgPSAxOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jIGIvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKaW5kZXggN2E0NTYwMC4uMDgyNzgwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKQEAgLTg4LDE1ICs4OCwxNCBAQAogc3RhdGljIHNzaXplX3QgcGNjYXJkX3N0b3JlX2luc2VydChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXNzaXplX3QgcmV0OwogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gdG9fc29ja2V0KGRldik7CiAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IHBjbWNpYV9pbnNlcnRfY2FyZChzKTsKKwlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX0lOU0VSVCk7CiAKLQlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CisJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIERFVklDRV9BVFRSKGNhcmRfaW5zZXJ0LCAwMjAwLCBOVUxMLCBwY2NhcmRfc3RvcmVfaW5zZXJ0KTsKIApAQCAtMTEzLDE4ICsxMTIsMjIgQEAKIAkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzc2l6ZV90IHJldCA9IC1FSU5WQUw7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSB0b19zb2NrZXQoZGV2KTsKKwlzc2l6ZV90IHJldCA9IGNvdW50OwogCiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9TVVNQRU5EKSAmJiAhc3RybmNtcChidWYsICJvZmYiLCAzKSkKLQkJcmV0ID0gcGNtY2lhX3N1c3BlbmRfY2FyZChzKTsKLQllbHNlIGlmICgocy0+c3RhdGUgJiBTT0NLRVRfU1VTUEVORCkgJiYgIXN0cm5jbXAoYnVmLCAib24iLCAyKSkKLQkJcmV0ID0gcGNtY2lhX3Jlc3VtZV9jYXJkKHMpOworCWlmICghc3RybmNtcChidWYsICJvZmYiLCAzKSkKKwkJcGNtY2lhX3BhcnNlX3VldmVudHMocywgUENNQ0lBX1VFVkVOVF9TVVNQRU5EKTsKKwllbHNlIHsKKwkJaWYgKCFzdHJuY21wKGJ1ZiwgIm9uIiwgMikpCisJCQlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX1JFU1VNRSk7CisJCWVsc2UKKwkJCXJldCA9IC1FSU5WQUw7CisJfQogCi0JcmV0dXJuIHJldCA/IC1FTk9ERVYgOiBjb3VudDsKKwlyZXR1cm4gcmV0OwogfQogc3RhdGljIERFVklDRV9BVFRSKGNhcmRfcG1fc3RhdGUsIDA2NDQsIHBjY2FyZF9zaG93X2NhcmRfcG1fc3RhdGUsIHBjY2FyZF9zdG9yZV9jYXJkX3BtX3N0YXRlKTsKIApAQCAtMTMyLDE1ICsxMzUsMTQgQEAKIAkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3NpemVfdCByZXQ7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSB0b19zb2NrZXQoZGV2KTsKIAogCWlmICghY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gcGNtY2lhX2VqZWN0X2NhcmQocyk7CisJcGNtY2lhX3BhcnNlX3VldmVudHMocywgUENNQ0lBX1VFVkVOVF9FSkVDVCk7CiAKLQlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CisJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIERFVklDRV9BVFRSKGNhcmRfZWplY3QsIDAyMDAsIE5VTEwsIHBjY2FyZF9zdG9yZV9lamVjdCk7CiAKQEAgLTE2Nyw3ICsxNjksOSBAQAogCXJldCA9IHNzY2FuZihidWYsICIweCV4XG4iLCAmbWFzayk7CiAKIAlpZiAocmV0ID09IDEpIHsKKwkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAkJcy0+aXJxX21hc2sgJj0gbWFzazsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXQgPSAwOwogCX0KIApAQCAtMTg3LDE2NCArMTkxLDIyIEBACiAJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSB0b19zb2NrZXQoZGV2KTsKIAogCWlmICghY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWlmICghcy0+cmVzb3VyY2Vfc2V0dXBfZG9uZSkKIAkJcy0+cmVzb3VyY2Vfc2V0dXBfZG9uZSA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAotCW11dGV4X2xvY2soJnMtPnNrdF9tdXRleCk7Ci0JaWYgKChzLT5jYWxsYmFjaykgJiYKLQkgICAgKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpICYmCi0JICAgICEocy0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykpIHsKLQkJaWYgKHRyeV9tb2R1bGVfZ2V0KHMtPmNhbGxiYWNrLT5vd25lcikpIHsKLQkJCXMtPmNhbGxiYWNrLT5yZXF1ZXJ5KHMsIDApOwotCQkJbW9kdWxlX3B1dChzLT5jYWxsYmFjay0+b3duZXIpOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmcy0+c2t0X211dGV4KTsKKwlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX1JFUVVFUlkpOwogCiAJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIERFVklDRV9BVFRSKGF2YWlsYWJsZV9yZXNvdXJjZXNfc2V0dXBfZG9uZSwgMDYwMCwgcGNjYXJkX3Nob3dfcmVzb3VyY2UsIHBjY2FyZF9zdG9yZV9yZXNvdXJjZSk7CiAKLQotc3RhdGljIHNzaXplX3QgcGNjYXJkX2V4dHJhY3RfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKLXsKLQl0dXBsZV90IHR1cGxlOwotCWludCBzdGF0dXMsIGk7Ci0JbG9mZl90IHBvaW50ZXIgPSAwOwotCXNzaXplX3QgcmV0ID0gMDsKLQl1X2NoYXIgKnR1cGxlYnVmZmVyOwotCXVfY2hhciAqdGVtcGJ1ZmZlcjsKLQotCXR1cGxlYnVmZmVyID0ga21hbGxvYyhzaXplb2YodV9jaGFyKSAqIDI1NiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0dXBsZWJ1ZmZlcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl0ZW1wYnVmZmVyID0ga21hbGxvYyhzaXplb2YodV9jaGFyKSAqIDI1OCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0ZW1wYnVmZmVyKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZnJlZV90dXBsZTsKLQl9Ci0KLQltZW1zZXQoJnR1cGxlLCAwLCBzaXplb2YodHVwbGVfdCkpOwotCi0JdHVwbGUuQXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9MSU5LIHwgVFVQTEVfUkVUVVJOX0NPTU1PTjsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBSRVRVUk5fRklSU1RfVFVQTEU7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCi0Jc3RhdHVzID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgJnR1cGxlKTsKLQl3aGlsZSAoIXN0YXR1cykgewotCQl0dXBsZS5UdXBsZURhdGEgPSB0dXBsZWJ1ZmZlcjsKLQkJdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwotCQltZW1zZXQodHVwbGVidWZmZXIsIDAsIHNpemVvZih1X2NoYXIpICogMjU1KTsKLQotCQlzdGF0dXMgPSBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEocywgJnR1cGxlKTsKLQkJaWYgKHN0YXR1cykKLQkJCWJyZWFrOwotCi0JCWlmIChvZmYgPCAocG9pbnRlciArIDIgKyB0dXBsZS5UdXBsZURhdGFMZW4pKSB7Ci0JCQl0ZW1wYnVmZmVyWzBdID0gdHVwbGUuVHVwbGVDb2RlICYgMHhmZjsKLQkJCXRlbXBidWZmZXJbMV0gPSB0dXBsZS5UdXBsZUxpbmsgJiAweGZmOwotCQkJZm9yIChpID0gMDsgaSA8IHR1cGxlLlR1cGxlRGF0YUxlbjsgaSsrKQotCQkJCXRlbXBidWZmZXJbaSArIDJdID0gdHVwbGVidWZmZXJbaV0gJiAweGZmOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgKDIgKyB0dXBsZS5UdXBsZURhdGFMZW4pOyBpKyspIHsKLQkJCQlpZiAoKChpICsgcG9pbnRlcikgPj0gb2ZmKSAmJgotCQkJCSAgICAoaSArIHBvaW50ZXIpIDwgKG9mZiArIGNvdW50KSkgewotCQkJCQlidWZbcmV0XSA9IHRlbXBidWZmZXJbaV07Ci0JCQkJCXJldCsrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXBvaW50ZXIgKz0gMiArIHR1cGxlLlR1cGxlRGF0YUxlbjsKLQotCQlpZiAocG9pbnRlciA+PSAob2ZmICsgY291bnQpKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHR1cGxlLlR1cGxlQ29kZSA9PSBDSVNUUExfRU5EKQotCQkJYnJlYWs7Ci0JCXN0YXR1cyA9IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgJnR1cGxlKTsKLQl9Ci0KLQlrZnJlZSh0ZW1wYnVmZmVyKTsKLSBmcmVlX3R1cGxlOgotCWtmcmVlKHR1cGxlYnVmZmVyKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zaG93X2NpcyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCSAgICAgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCi0JCQkgICAgICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCi17Ci0JdW5zaWduZWQgaW50IHNpemUgPSAweDIwMDsKLQotCWlmIChvZmYgPj0gc2l6ZSkKLQkJY291bnQgPSAwOwotCWVsc2UgewotCQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKLQkJdW5zaWduZWQgaW50IGNoYWluczsKLQotCQlpZiAob2ZmICsgY291bnQgPiBzaXplKQotCQkJY291bnQgPSBzaXplIC0gb2ZmOwotCi0JCXMgPSB0b19zb2NrZXQoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKLQotCQlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKLQkJCXJldHVybiAtRU5PREVWOwotCQlpZiAocGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCAmY2hhaW5zKSkKLQkJCXJldHVybiAtRUlPOwotCQlpZiAoIWNoYWlucykKLQkJCXJldHVybiAtRU5PREFUQTsKLQotCQljb3VudCA9IHBjY2FyZF9leHRyYWN0X2NpcyhzLCBidWYsIG9mZiwgY291bnQpOwotCX0KLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3QgcGNjYXJkX3N0b3JlX2NpcyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCi0JCQkJY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSB0b19zb2NrZXQoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAob2ZmKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChjb3VudCA+PSBDSVNUUExfTUFYX0NJU19TSVpFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWVycm9yID0gcGNtY2lhX3JlcGxhY2VfY2lzKHMsIGJ1ZiwgY291bnQpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIC1FSU87Ci0KLQltdXRleF9sb2NrKCZzLT5za3RfbXV0ZXgpOwotCWlmICgocy0+Y2FsbGJhY2spICYmIChzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSAmJgotCSAgICAhKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpKSB7Ci0JCWlmICh0cnlfbW9kdWxlX2dldChzLT5jYWxsYmFjay0+b3duZXIpKSB7Ci0JCQlzLT5jYWxsYmFjay0+cmVxdWVyeShzLCAxKTsKLQkJCW1vZHVsZV9wdXQocy0+Y2FsbGJhY2stPm93bmVyKTsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJnMtPnNrdF9tdXRleCk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLQogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBjY2FyZF9zb2NrZXRfYXR0cmlidXRlc1tdID0gewogCSZkZXZfYXR0cl9jYXJkX3R5cGUuYXR0ciwKIAkmZGV2X2F0dHJfY2FyZF92b2x0YWdlLmF0dHIsCkBAIC0zNjIsMjggKzIyNCwxMiBAQAogCS5hdHRycyA9IHBjY2FyZF9zb2NrZXRfYXR0cmlidXRlcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBwY2NhcmRfY2lzX2F0dHIgPSB7Ci0JLmF0dHIgPSB7IC5uYW1lID0gImNpcyIsIC5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IgfSwKLQkuc2l6ZSA9IDB4MjAwLAotCS5yZWFkID0gcGNjYXJkX3Nob3dfY2lzLAotCS53cml0ZSA9IHBjY2FyZF9zdG9yZV9jaXMsCi19OwotCiBpbnQgcGNjYXJkX3N5c2ZzX2FkZF9zb2NrZXQoc3RydWN0IGRldmljZSAqZGV2KQogewotCWludCByZXQgPSAwOwotCi0JcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZzb2NrZXRfYXR0cnMpOwotCWlmICghcmV0KSB7Ci0JCXJldCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmZGV2LT5rb2JqLCAmcGNjYXJkX2Npc19hdHRyKTsKLQkJaWYgKHJldCkKLQkJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmc29ja2V0X2F0dHJzKTsKLQl9Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZzb2NrZXRfYXR0cnMpOwogfQogCiB2b2lkIHBjY2FyZF9zeXNmc19yZW1vdmVfc29ja2V0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmRldi0+a29iaiwgJnBjY2FyZF9jaXNfYXR0cik7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZzb2NrZXRfYXR0cnMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEveHhzMTUwMF9zcy5jIGIvZHJpdmVycy9wY21jaWEveHhzMTUwMF9zcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNTYwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjbWNpYS94eHMxNTAwX3NzLmMKQEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKiBQQ01DSUEgc29ja2V0IGNvZGUgZm9yIHRoZSBNeUNhYmxlIFhYUzE1MDAgc3lzdGVtLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBNYW51ZWwgTGF1c3MgPG1hbnVlbC5sYXVzc0BnbWFpbC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvc3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KKworI2RlZmluZSBNRU1fTUFQX1NJWkUJMHg0MDAwMDAKKyNkZWZpbmUgSU9fTUFQX1NJWkUJMHgxMDAwCisKKworLyoKKyAqIDMuM1YgY2FyZHMgb25seTsgYWxsIGludGVyZmFjaW5nIGlzIGRvbmUgdmlhIGdwaW9zOgorICoKKyAqIDAvMTogIGNhcmRkZXRlY3QgKDAwID0gY2FyZCBwcmVzZW50LCB4eCA9IGh1aCkKKyAqIDQ6CSBjYXJkIGlycQorICogMjA0OiAgcmVzZXQgKGhpZ2gtYWN0KQorICogMjA1OiAgYnVmZmVyIGVuYWJsZSAobG93LWFjdCkKKyAqIDIwOC8yMDk6IGNhcmQgdm9sdGFnZSBrZXkgKDAwLDAxLDEwLDExKQorICogMjEwOiAgYmF0dHdhcm4KKyAqIDIxMTogIGJhdGRlYWQKKyAqIDIxNDogIHBvd2VyIChsb3ctYWN0KQorICovCisjZGVmaW5lIEdQSU9fQ0RBCTAKKyNkZWZpbmUgR1BJT19DREIJMQorI2RlZmluZSBHUElPX0NBUkRJUlEJNAorI2RlZmluZSBHUElPX1JFU0VUCTIwNAorI2RlZmluZSBHUElPX09VVEVOCTIwNQorI2RlZmluZSBHUElPX1ZTTAkyMDgKKyNkZWZpbmUgR1BJT19WU0gJMjA5CisjZGVmaW5lIEdQSU9fQkFUVERFQUQJMjEwCisjZGVmaW5lIEdQSU9fQkFUVFdBUk4JMjExCisjZGVmaW5lIEdQSU9fUE9XRVIJMjE0CisKK3N0cnVjdCB4eHMxNTAwX3BjbWNpYV9zb2NrIHsKKwlzdHJ1Y3QgcGNtY2lhX3NvY2tldAlzb2NrZXQ7CisJdm9pZAkJKnZpcnRfaW87CisKKwlwaHlzX2FkZHJfdAlwaHlzX2lvOworCXBoeXNfYWRkcl90CXBoeXNfYXR0cjsKKwlwaHlzX2FkZHJfdAlwaHlzX21lbTsKKworCS8qIHByZXZpb3VzIGZsYWdzIGZvciBzZXRfc29ja2V0KCkgKi8KKwl1bnNpZ25lZCBpbnQgb2xkX2ZsYWdzOworfTsKKworI2RlZmluZSB0b194eHNfc29ja2V0KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgeHhzMTUwMF9wY21jaWFfc29jaywgc29ja2V0KQorCitzdGF0aWMgaXJxcmV0dXJuX3QgY2RpcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgeHhzMTUwMF9wY21jaWFfc29jayAqc29jayA9IGRhdGE7CisKKwlwY21jaWFfcGFyc2VfZXZlbnRzKCZzb2NrLT5zb2NrZXQsIFNTX0RFVEVDVCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgeHhzMTUwMF9wY21jaWFfY29uZmlndXJlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QsCisJCQkJICAgIHN0cnVjdCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpCit7CisJc3RydWN0IHh4czE1MDBfcGNtY2lhX3NvY2sgKnNvY2sgPSB0b194eHNfc29ja2V0KHNrdCk7CisJdW5zaWduZWQgaW50IGNoYW5nZWQ7CisKKwkvKiBwb3dlciBjb250cm9sICovCisJc3dpdGNoIChzdGF0ZS0+VmNjKSB7CisJY2FzZSAwOgorCQlncGlvX3NldF92YWx1ZShHUElPX1BPV0VSLCAxKTsJLyogcG93ZXIgb2ZmICovCisJCWJyZWFrOworCWNhc2UgMzM6CisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUE9XRVIsIDApOwkvKiBwb3dlciBvbiAqLworCQlicmVhazsKKwljYXNlIDUwOgorCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNoYW5nZWQgPSBzdGF0ZS0+ZmxhZ3MgXiBzb2NrLT5vbGRfZmxhZ3M7CisKKwlpZiAoY2hhbmdlZCAmIFNTX1JFU0VUKSB7CisJCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkgeworCQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19SRVNFVCwgMSk7CS8qIGFzc2VydCByZXNldCAqLworCQkJZ3Bpb19zZXRfdmFsdWUoR1BJT19PVVRFTiwgMSk7CS8qIGJ1ZmZlcnMgb2ZmICovCisJCX0gZWxzZSB7CisJCQlncGlvX3NldF92YWx1ZShHUElPX1JFU0VULCAwKTsJLyogZGVhc3NlcnQgcmVzZXQgKi8KKwkJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fT1VURU4sIDApOwkvKiBidWZmZXJzIG9uICovCisJCQltc2xlZXAoNTAwKTsKKwkJfQorCX0KKworCXNvY2stPm9sZF9mbGFncyA9IHN0YXRlLT5mbGFnczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHh4czE1MDBfcGNtY2lhX2dldF9zdGF0dXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCAqdmFsdWUpCit7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKwlpbnQgaTsKKworCXN0YXR1cyA9IDA7CisKKwkvKiBjaGVjayBjYXJkZGV0ZWN0czogR1BJT1swOjFdIG11c3QgYm90aCBiZSBsb3cgKi8KKwlpZiAoIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fQ0RBKSAmJiAhZ3Bpb19nZXRfdmFsdWUoR1BJT19DREIpKQorCQlzdGF0dXMgfD0gU1NfREVURUNUOworCisJLyogZGV0ZXJtaW5lIGNhcmQgdm9sdGFnZTogR1BJT1syMDg6MjA5XSBiaW5hcnkgdmFsdWUgKi8KKwlpID0gKCEhZ3Bpb19nZXRfdmFsdWUoR1BJT19WU0wpKSB8ICgoISFncGlvX2dldF92YWx1ZShHUElPX1ZTSCkpIDw8IDEpOworCisJc3dpdGNoIChpKSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwljYXNlIDI6CisJCXN0YXR1cyB8PSBTU18zVkNBUkQ7CS8qIDNWIGNhcmQgKi8KKwkJYnJlYWs7CisJY2FzZSAzOgkJCQkvKiA1ViBjYXJkLCB1bnN1cHBvcnRlZCAqLworCWRlZmF1bHQ6CisJCXN0YXR1cyB8PSBTU19YVkNBUkQ7CS8qIHRyZWF0ZWQgYXMgdW5zdXBwb3J0ZWQgaW4gY29yZSAqLworCX0KKworCS8qIEdQSU8yMTQ6IGxvdyBhY3RpdmUgcG93ZXIgc3dpdGNoICovCisJc3RhdHVzIHw9IGdwaW9fZ2V0X3ZhbHVlKEdQSU9fUE9XRVIpID8gMCA6IFNTX1BPV0VST047CisKKwkvKiBHUElPMjA0OiBoaWdoLWFjdGl2ZSByZXNldCBsaW5lICovCisJc3RhdHVzIHw9IGdwaW9fZ2V0X3ZhbHVlKEdQSU9fUkVTRVQpID8gU1NfUkVTRVQgOiBTU19SRUFEWTsKKworCS8qIG90aGVyIHN0dWZmICovCisJc3RhdHVzIHw9IGdwaW9fZ2V0X3ZhbHVlKEdQSU9fQkFUVERFQUQpID8gMCA6IFNTX0JBVERFQUQ7CisJc3RhdHVzIHw9IGdwaW9fZ2V0X3ZhbHVlKEdQSU9fQkFUVFdBUk4pID8gMCA6IFNTX0JBVFdBUk47CisKKwkqdmFsdWUgPSBzdGF0dXM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4eHMxNTAwX3BjbWNpYV9zb2NrX2luaXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX0NEQSk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19DREIpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fVlNMKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX1ZTSCk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19CQVRUREVBRCk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19CQVRUV0FSTik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUkVTRVQsIDEpOwkvKiBhc3NlcnQgcmVzZXQgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19PVVRFTiwgMSk7CS8qIGRpc2FibGUgYnVmZmVycyAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BPV0VSLCAxKTsJLyogcG93ZXIgb2ZmICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4eHMxNTAwX3BjbWNpYV9zb2NrX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTF4MDBfcGNtY2lhX3NldF9pb19tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQkgICAgc3RydWN0IHBjY2FyZF9pb19tYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgeHhzMTUwMF9wY21jaWFfc29jayAqc29jayA9IHRvX3h4c19zb2NrZXQoc2t0KTsKKworCW1hcC0+c3RhcnQgPSAodTMyKXNvY2stPnZpcnRfaW87CisJbWFwLT5zdG9wID0gbWFwLT5zdGFydCArIElPX01BUF9TSVpFOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXUxeDAwX3BjbWNpYV9zZXRfbWVtX21hcChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCSAgICAgc3RydWN0IHBjY2FyZF9tZW1fbWFwICptYXApCit7CisJc3RydWN0IHh4czE1MDBfcGNtY2lhX3NvY2sgKnNvY2sgPSB0b194eHNfc29ja2V0KHNrdCk7CisKKwlpZiAobWFwLT5mbGFncyAmIE1BUF9BVFRSSUIpCisJCW1hcC0+c3RhdGljX3N0YXJ0ID0gc29jay0+cGh5c19hdHRyICsgbWFwLT5jYXJkX3N0YXJ0OworCWVsc2UKKwkJbWFwLT5zdGF0aWNfc3RhcnQgPSBzb2NrLT5waHlzX21lbSArIG1hcC0+Y2FyZF9zdGFydDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBjY2FyZF9vcGVyYXRpb25zIHh4czE1MDBfcGNtY2lhX29wZXJhdGlvbnMgPSB7CisJLmluaXQJCQk9IHh4czE1MDBfcGNtY2lhX3NvY2tfaW5pdCwKKwkuc3VzcGVuZAkJPSB4eHMxNTAwX3BjbWNpYV9zb2NrX3N1c3BlbmQsCisJLmdldF9zdGF0dXMJCT0geHhzMTUwMF9wY21jaWFfZ2V0X3N0YXR1cywKKwkuc2V0X3NvY2tldAkJPSB4eHMxNTAwX3BjbWNpYV9jb25maWd1cmUsCisJLnNldF9pb19tYXAJCT0gYXUxeDAwX3BjbWNpYV9zZXRfaW9fbWFwLAorCS5zZXRfbWVtX21hcAkJPSBhdTF4MDBfcGNtY2lhX3NldF9tZW1fbWFwLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgeHhzMTUwMF9wY21jaWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgeHhzMTUwMF9wY21jaWFfc29jayAqc29jazsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJaW50IHJldCwgaXJxOworCisJc29jayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB4eHMxNTAwX3BjbWNpYV9zb2NrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzb2NrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IC1FTk9ERVY7CisKKwkvKgorCSAqIHBzZXVkby1hdHRyOiAgVGhlIDMyYml0IGFkZHJlc3Mgb2YgdGhlIFBDTUNJQSBhdHRyaWJ1dGUgc3BhY2UKKwkgKiBmb3IgdGhpcyBzb2NrZXQgKHVzdWFsbHkgdGhlIDM2Yml0IGFkZHJlc3Mgc2hpZnRlZCA0IHRvIHRoZQorCSAqIHJpZ2h0KS4KKwkgKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInBjbWNpYS1hdHRyIik7CisJaWYgKCFyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1pc3NpbmcgJ3BjbWNpYS1hdHRyJyByZXNvdXJjZSFcbiIpOworCQlnb3RvIG91dDA7CisJfQorCXNvY2stPnBoeXNfYXR0ciA9IHItPnN0YXJ0OworCisJLyoKKwkgKiBwc2V1ZG8tbWVtOiAgVGhlIDMyYml0IGFkZHJlc3Mgb2YgdGhlIFBDTUNJQSBtZW1vcnkgc3BhY2UgZm9yCisJICogdGhpcyBzb2NrZXQgKHVzdWFsbHkgdGhlIDM2Yml0IGFkZHJlc3Mgc2hpZnRlZCA0IHRvIHRoZSByaWdodCkKKwkgKi8KKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInBjbWNpYS1tZW0iKTsKKwlpZiAoIXIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyAncGNtY2lhLW1lbScgcmVzb3VyY2UhXG4iKTsKKwkJZ290byBvdXQwOworCX0KKwlzb2NrLT5waHlzX21lbSA9IHItPnN0YXJ0OworCisJLyoKKwkgKiBwc2V1ZG8taW86ICBUaGUgMzJiaXQgYWRkcmVzcyBvZiB0aGUgUENNQ0lBIElPIHNwYWNlIGZvciB0aGlzCisJICogc29ja2V0ICh1c3VhbGx5IHRoZSAzNmJpdCBhZGRyZXNzIHNoaWZ0ZWQgNCB0byB0aGUgcmlnaHQpLgorCSAqLworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicGNtY2lhLWlvIik7CisJaWYgKCFyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1pc3NpbmcgJ3BjbWNpYS1pbycgcmVzb3VyY2UhXG4iKTsKKwkJZ290byBvdXQwOworCX0KKwlzb2NrLT5waHlzX2lvID0gci0+c3RhcnQ7CisKKworCS8qCisJICogUENNQ0lBIGNsaWVudCBkcml2ZXJzIHVzZSB0aGUgaW5iL291dGIgbWFjcm9zIHRvIGFjY2VzcworCSAqIHRoZSBJTyByZWdpc3RlcnMuICBTaW5jZSBtaXBzX2lvX3BvcnRfYmFzZSBpcyBhZGRlZAorCSAqIHRvIHRoZSBhY2Nlc3MgYWRkcmVzcyBvZiB0aGUgbWlwcyBpbXBsZW1lbnRhdGlvbiBvZgorCSAqIGluYi9vdXRiLCB3ZSBuZWVkIHRvIHN1YnRyYWN0IGl0IGhlcmUgYmVjYXVzZSB3ZSB3YW50CisJICogdG8gYWNjZXNzIHRoZSBJL08gb3IgTUVNIGFkZHJlc3MgZGlyZWN0bHksIHdpdGhvdXQKKwkgKiBnb2luZyB0aHJvdWdoIHRoaXMgIm1pcHNfaW9fcG9ydF9iYXNlIiBtZWNoYW5pc20uCisJICovCisJc29jay0+dmlydF9pbyA9ICh2b2lkICopKGlvcmVtYXAoc29jay0+cGh5c19pbywgSU9fTUFQX1NJWkUpIC0KKwkJCQkgbWlwc19pb19wb3J0X2Jhc2UpOworCisJaWYgKCFzb2NrLT52aXJ0X2lvKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZW1hcCBJTyBhcmVhXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQwOworCX0KKworCXNvY2stPnNvY2tldC5vcHMJPSAmeHhzMTUwMF9wY21jaWFfb3BlcmF0aW9uczsKKwlzb2NrLT5zb2NrZXQub3duZXIJPSBUSElTX01PRFVMRTsKKwlzb2NrLT5zb2NrZXQucGNpX2lycQk9IGdwaW9fdG9faXJxKEdQSU9fQ0FSRElSUSk7CisJc29jay0+c29ja2V0LmZlYXR1cmVzCT0gU1NfQ0FQX1NUQVRJQ19NQVAgfCBTU19DQVBfUENDQVJEOworCXNvY2stPnNvY2tldC5tYXBfc2l6ZQk9IE1FTV9NQVBfU0laRTsKKwlzb2NrLT5zb2NrZXQuaW9fb2Zmc2V0CT0gKHVuc2lnbmVkIGxvbmcpc29jay0+dmlydF9pbzsKKwlzb2NrLT5zb2NrZXQuZGV2LnBhcmVudAk9ICZwZGV2LT5kZXY7CisJc29jay0+c29ja2V0LnJlc291cmNlX29wcyA9ICZwY2NhcmRfc3RhdGljX29wczsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNvY2spOworCisJLyogc2V0dXAgY2FyZGRldGVjdCBpcnE6IHVzZSBvbmUgb2YgdGhlIDIgR1BJT3MgYXMgYW4KKwkgKiBlZGdlIGRldGVjdG9yLgorCSAqLworCWlycSA9IGdwaW9fdG9faXJxKEdQSU9fQ0RBKTsKKwlzZXRfaXJxX3R5cGUoaXJxLCBJUlFfVFlQRV9FREdFX0JPVEgpOworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgY2RpcnEsIDAsICJwY21jaWFfY2FyZGRldGVjdCIsIHNvY2spOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHNldHVwIGNkIGlycVxuIik7CisJCWdvdG8gb3V0MTsKKwl9CisKKwlyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KCZzb2NrLT5zb2NrZXQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyXG4iKTsKKwkJZ290byBvdXQyOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIk15Q2FibGUgWFhTMTUwMCBQQ01DSUEgc29ja2V0IHNlcnZpY2VzXG4iKTsKKworCXJldHVybiAwOworCitvdXQyOgorCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fQ0RBKSwgc29jayk7CitvdXQxOgorCWlvdW5tYXAoKHZvaWQgKikoc29jay0+dmlydF9pbyArICh1MzIpbWlwc19pb19wb3J0X2Jhc2UpKTsKK291dDA6CisJa2ZyZWUoc29jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgeHhzMTUwMF9wY21jaWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHh4czE1MDBfcGNtY2lhX3NvY2sgKnNvY2sgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXBjbWNpYV91bnJlZ2lzdGVyX3NvY2tldCgmc29jay0+c29ja2V0KTsKKwlmcmVlX2lycShncGlvX3RvX2lycShHUElPX0NEQSksIHNvY2spOworCWlvdW5tYXAoKHZvaWQgKikoc29jay0+dmlydF9pbyArICh1MzIpbWlwc19pb19wb3J0X2Jhc2UpKTsKKwlrZnJlZShzb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4eHMxNTAwX3BjbWNpYV9zb2NrZXRfZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gInh4czE1MDBfcGNtY2lhIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0geHhzMTUwMF9wY21jaWFfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh4eHMxNTAwX3BjbWNpYV9yZW1vdmUpLAorfTsKKworaW50IF9faW5pdCB4eHMxNTAwX3BjbWNpYV9zb2NrZXRfbG9hZCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnh4czE1MDBfcGNtY2lhX3NvY2tldF9kcml2ZXIpOworfQorCit2b2lkICBfX2V4aXQgeHhzMTUwMF9wY21jaWFfc29ja2V0X3VubG9hZCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ4eHMxNTAwX3BjbWNpYV9zb2NrZXRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoeHhzMTUwMF9wY21jaWFfc29ja2V0X2xvYWQpOworbW9kdWxlX2V4aXQoeHhzMTUwMF9wY21jaWFfc29ja2V0X3VubG9hZCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiUENNQ0lBIFNvY2tldCBTZXJ2aWNlcyBmb3IgTXlDYWJsZSBYWFMxNTAwIHN5c3RlbXMiKTsKK01PRFVMRV9BVVRIT1IoIk1hbnVlbCBMYXVzcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMgYi9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYwppbmRleCBlNGQxMmFjLi5iODUzNzVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYworKysgYi9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYwpAQCAtMzcsNiArMzcsMTEgQEAKIG1vZHVsZV9wYXJhbShwd3JfaXJxc19vZmYsIGJvb2wsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhwd3JfaXJxc19vZmYsICJGb3JjZSBJUlFzIG9mZiBkdXJpbmcgcG93ZXItb24gb2Ygc2xvdC4gVXNlIG9ubHkgd2hlbiBzZWVpbmcgSVJRIHN0b3JtcyEiKTsKIAorc3RhdGljIGNoYXIgbzJfc3BlZWR1cFtdID0gImRlZmF1bHQiOworbW9kdWxlX3BhcmFtX3N0cmluZyhvMl9zcGVlZHVwLCBvMl9zcGVlZHVwLCBzaXplb2YobzJfc3BlZWR1cCksIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhvMl9zcGVlZHVwLCAiVXNlIHByZWZldGNoL2J1cnN0IGZvciBPMi1icmlkZ2VzOiAnb24nLCAnb2ZmJyAiCisJIm9yICdkZWZhdWx0JyAodXNlcyByZWNvbW1lbmRlZCBiZWhhdmlvdXIgZm9yIHRoZSBkZXRlY3RlZCBicmlkZ2UpIik7CisKICNkZWZpbmUgZGVidWcoeCwgcywgYXJncy4uLikgZGV2X2RiZygmcy0+ZGV2LT5kZXYsIHgsICMjYXJncykKIAogLyogRG9uJ3QgYXNrLi4gKi8KQEAgLTY0OSw5ICs2NTQsMTAgQEAKIHN0YXRpYyBpbnQgeWVudGFfc2VhcmNoX3JlcyhzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkJICAgIHUzMiBtaW4pCiB7CisJc3RydWN0IHJlc291cmNlICpyb290OwogCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QgPSBzb2NrZXQtPmRldi0+YnVzLT5yZXNvdXJjZVtpXTsKKworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2Uoc29ja2V0LT5kZXYtPmJ1cywgcm9vdCwgaSkgewogCQlpZiAoIXJvb3QpCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKaW5kZXggZjUyNmU3My4uNjg0OGYyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCkBAIC03OSw2ICs3OSw3IEBACiAJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCiAJZGVwZW5kcyBvbiBSRktJTEwgfHwgUkZLSUxMID0gbgogCWRlcGVuZHMgb24gUE9XRVJfU1VQUExZCisJZGVwZW5kcyBvbiBTRVJJT19JODA0MgogCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAlUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIHJma2lsbCBhbmQgYmFja2xpZ2h0IGNvbnRyb2wgdG8gRGVsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvY2xhc3NtYXRlLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY2xhc3NtYXRlLWxhcHRvcC5jCmluZGV4IGVkOTAwODIuLjhjYjIwZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NsYXNzbWF0ZS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jbGFzc21hdGUtbGFwdG9wLmMKQEAgLTM0LDYgKzM0LDExIEBACiAjZGVmaW5lIENNUENfQUNDRUxfU0VOU0lUSVZJVFlfREVGQVVMVAkJNQogCiAKKyNkZWZpbmUgQ01QQ19BQ0NFTF9ISUQJCSJBQ0NFMDAwMCIKKyNkZWZpbmUgQ01QQ19UQUJMRVRfSElECQkiVEJMVDAwMDAiCisjZGVmaW5lIENNUENfQkxfSElECQkiSVBNTDIwMCIKKyNkZWZpbmUgQ01QQ19LRVlTX0hJRAkJIkZuQlQwMDAwIgorCiAvKgogICogR2VuZXJpYyBpbnB1dCBkZXZpY2UgY29kZS4KICAqLwpAQCAtMjgyLDEwICsyODcsOSBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGNtcGNfYWNjZWxfZGV2aWNlX2lkc1tdID0gewotCXsiQUNDRTAwMDAiLCAwfSwKKwl7Q01QQ19BQ0NFTF9ISUQsIDB9LAogCXsiIiwgMH0KIH07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGNtcGNfYWNjZWxfZGV2aWNlX2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgY21wY19hY2NlbF9hY3BpX2RyaXZlciA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKQEAgLTM2NiwxMCArMzcwLDkgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBjbXBjX3RhYmxldF9kZXZpY2VfaWRzW10gPSB7Ci0JeyJUQkxUMDAwMCIsIDB9LAorCXtDTVBDX1RBQkxFVF9ISUQsIDB9LAogCXsiIiwgMH0KIH07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGNtcGNfdGFibGV0X2RldmljZV9pZHMpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGNtcGNfdGFibGV0X2FjcGlfZHJpdmVyID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLApAQCAtNDc3LDE3ICs0ODAsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBjbXBjX2RldmljZV9pZHNbXSA9IHsKLQl7IklQTUwyMDAiLCAwfSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgY21wY19ibF9kZXZpY2VfaWRzW10gPSB7CisJe0NNUENfQkxfSElELCAwfSwKIAl7IiIsIDB9CiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBjbXBjX2RldmljZV9pZHMpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGNtcGNfYmxfYWNwaV9kcml2ZXIgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm5hbWUgPSAiY21wYyIsCiAJLmNsYXNzID0gImNtcGMiLAotCS5pZHMgPSBjbXBjX2RldmljZV9pZHMsCisJLmlkcyA9IGNtcGNfYmxfZGV2aWNlX2lkcywKIAkub3BzID0gewogCQkuYWRkID0gY21wY19ibF9hZGQsCiAJCS5yZW1vdmUgPSBjbXBjX2JsX3JlbW92ZQpAQCAtNTQwLDEwICs1NDIsOSBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGNtcGNfa2V5c19kZXZpY2VfaWRzW10gPSB7Ci0JeyJGbkJUMDAwMCIsIDB9LAorCXtDTVBDX0tFWVNfSElELCAwfSwKIAl7IiIsIDB9CiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBjbXBjX2tleXNfZGV2aWNlX2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgY21wY19rZXlzX2FjcGlfZHJpdmVyID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLApAQCAtNjA3LDMgKzYwOCwxMyBAQAogCiBtb2R1bGVfaW5pdChjbXBjX2luaXQpOwogbW9kdWxlX2V4aXQoY21wY19leGl0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBjbXBjX2RldmljZV9pZHNbXSA9IHsKKwl7Q01QQ19BQ0NFTF9ISUQsIDB9LAorCXtDTVBDX1RBQkxFVF9ISUQsIDB9LAorCXtDTVBDX0JMX0hJRCwgMH0sCisJe0NNUENfS0VZU19ISUQsIDB9LAorCXsiIiwgMH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgY21wY19kZXZpY2VfaWRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NvbXBhbC1sYXB0b3AuYwppbmRleCAxYTM4N2U3Li4yNzQwYjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jb21wYWwtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY29tcGFsLWxhcHRvcC5jCkBAIC0yNiwxNyArMjYsOCBAQAogLyoKICAqIGNvbWFwbC1sYXB0b3AuYyAtIENvbXBhbCBsYXB0b3Agc3VwcG9ydC4KICAqCi0gKiBUaGlzIGRyaXZlciBleHBvcnRzIGEgZmV3IGZpbGVzIGluIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9jb21wYWwtbGFwdG9wLzoKLSAqCi0gKiAgIHdsYW4gLSB3bGFuIHN1YnN5c3RlbSBzdGF0ZTogY29udGFpbnMgMCBvciAxIChydykKLSAqCi0gKiAgIGJsdWV0b290aCAtIEJsdWV0b290aCBzdWJzeXN0ZW0gc3RhdGU6IGNvbnRhaW5zIDAgb3IgMSAocncpCi0gKgotICogICByYXcgLSByYXcgdmFsdWUgdGFrZW4gZnJvbSBlbWJlZGRlZCBjb250cm9sbGVyIHJlZ2lzdGVyIChybykKLSAqCi0gKiBJbiBhZGRpdGlvbiB0byB0aGVzZSBwbGF0Zm9ybSBkZXZpY2UgYXR0cmlidXRlcyB0aGUgZHJpdmVyCi0gKiByZWdpc3RlcnMgaXRzZWxmIGluIHRoZSBMaW51eCBiYWNrbGlnaHQgY29udHJvbCBzdWJzeXN0ZW0gYW5kIGlzCi0gKiBhdmFpbGFibGUgdG8gdXNlcnNwYWNlIHVuZGVyIC9zeXMvY2xhc3MvYmFja2xpZ2h0L2NvbXBhbC1sYXB0b3AvLgorICogVGhlIGRyaXZlciByZWdpc3RlcnMgaXRzZWxmIHdpdGggdGhlIHJma2lsbCBzdWJzeXN0ZW0gYW5kCisgKiB0aGUgTGludXggYmFja2xpZ2h0IGNvbnRyb2wgc3Vic3lzdGVtLgogICoKICAqIFRoaXMgZHJpdmVyIG1pZ2h0IHdvcmsgb24gb3RoZXIgbGFwdG9wcyBwcm9kdWNlZCBieSBDb21wYWwuIElmIHlvdQogICogd2FudCB0byB0cnkgaXQgeW91IGNhbiBwYXNzIGZvcmNlPTEgYXMgYXJndW1lbnQgdG8gdGhlIG1vZHVsZSB3aGljaApAQCAtNTEsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgogCiAjZGVmaW5lIENPTVBBTF9EUklWRVJfVkVSU0lPTiAiMC4yLjYiCiAKQEAgLTYzLDYgKzU1LDEwIEBACiAjZGVmaW5lIFdMQU5fTUFTSwkweDAxCiAjZGVmaW5lIEJUX01BU0sgCTB4MDIKIAorc3RhdGljIHN0cnVjdCByZmtpbGwgKndpZmlfcmZraWxsOworc3RhdGljIHN0cnVjdCByZmtpbGwgKmJ0X3Jma2lsbDsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjb21wYWxfZGV2aWNlOworCiBzdGF0aWMgaW50IGZvcmNlOwogbW9kdWxlX3BhcmFtKGZvcmNlLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZm9yY2UsICJGb3JjZSBkcml2ZXIgbG9hZCwgaWdub3JlIERNSSBkYXRhIik7CkBAIC04OCw2NSArODQsNzUgQEAKIAlyZXR1cm4gKGludCkgcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IHNldF93bGFuX3N0YXRlKGludCBzdGF0ZSkKK3N0YXRpYyBpbnQgY29tcGFsX3Jma2lsbF9zZXQodm9pZCAqZGF0YSwgYm9vbCBibG9ja2VkKQogeworCXVuc2lnbmVkIGxvbmcgcmFkaW8gPSAodW5zaWduZWQgbG9uZykgZGF0YTsKIAl1OCByZXN1bHQsIHZhbHVlOwogCiAJZWNfcmVhZChDT01QQUxfRUNfQ09NTUFORF9XSVJFTEVTUywgJnJlc3VsdCk7CiAKLQlpZiAoKHJlc3VsdCAmIEtJTExTV0lUQ0hfTUFTSykgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZWxzZSB7Ci0JCWlmIChzdGF0ZSkKLQkJCXZhbHVlID0gKHU4KSAocmVzdWx0IHwgV0xBTl9NQVNLKTsKLQkJZWxzZQotCQkJdmFsdWUgPSAodTgpIChyZXN1bHQgJiB+V0xBTl9NQVNLKTsKLQkJZWNfd3JpdGUoQ09NUEFMX0VDX0NPTU1BTkRfV0lSRUxFU1MsIHZhbHVlKTsKLQl9CisJaWYgKCFibG9ja2VkKQorCQl2YWx1ZSA9ICh1OCkgKHJlc3VsdCB8IHJhZGlvKTsKKwllbHNlCisJCXZhbHVlID0gKHU4KSAocmVzdWx0ICYgfnJhZGlvKTsKKwllY193cml0ZShDT01QQUxfRUNfQ09NTUFORF9XSVJFTEVTUywgdmFsdWUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2V0X2JsdWV0b290aF9zdGF0ZShpbnQgc3RhdGUpCi17Ci0JdTggcmVzdWx0LCB2YWx1ZTsKLQotCWVjX3JlYWQoQ09NUEFMX0VDX0NPTU1BTkRfV0lSRUxFU1MsICZyZXN1bHQpOwotCi0JaWYgKChyZXN1bHQgJiBLSUxMU1dJVENIX01BU0spID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCWVsc2UgewotCQlpZiAoc3RhdGUpCi0JCQl2YWx1ZSA9ICh1OCkgKHJlc3VsdCB8IEJUX01BU0spOwotCQllbHNlCi0JCQl2YWx1ZSA9ICh1OCkgKHJlc3VsdCAmIH5CVF9NQVNLKTsKLQkJZWNfd3JpdGUoQ09NUEFMX0VDX0NPTU1BTkRfV0lSRUxFU1MsIHZhbHVlKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBnZXRfd2lyZWxlc3Nfc3RhdGUoaW50ICp3bGFuLCBpbnQgKmJsdWV0b290aCkKK3N0YXRpYyB2b2lkIGNvbXBhbF9yZmtpbGxfcG9sbChzdHJ1Y3QgcmZraWxsICpyZmtpbGwsIHZvaWQgKmRhdGEpCiB7CiAJdTggcmVzdWx0OworCWJvb2wgaHdfYmxvY2tlZDsKIAogCWVjX3JlYWQoQ09NUEFMX0VDX0NPTU1BTkRfV0lSRUxFU1MsICZyZXN1bHQpOwogCi0JaWYgKHdsYW4pIHsKLQkJaWYgKChyZXN1bHQgJiBLSUxMU1dJVENIX01BU0spID09IDApCi0JCQkqd2xhbiA9IDA7Ci0JCWVsc2UKLQkJCSp3bGFuID0gcmVzdWx0ICYgV0xBTl9NQVNLOwotCX0KKwlod19ibG9ja2VkID0gIShyZXN1bHQgJiBLSUxMU1dJVENIX01BU0spOworCXJma2lsbF9zZXRfaHdfc3RhdGUocmZraWxsLCBod19ibG9ja2VkKTsKK30KIAotCWlmIChibHVldG9vdGgpIHsKLQkJaWYgKChyZXN1bHQgJiBLSUxMU1dJVENIX01BU0spID09IDApCi0JCQkqYmx1ZXRvb3RoID0gMDsKLQkJZWxzZQotCQkJKmJsdWV0b290aCA9IChyZXN1bHQgJiBCVF9NQVNLKSA+PiAxOworc3RhdGljIGNvbnN0IHN0cnVjdCByZmtpbGxfb3BzIGNvbXBhbF9yZmtpbGxfb3BzID0geworCS5wb2xsID0gY29tcGFsX3Jma2lsbF9wb2xsLAorCS5zZXRfYmxvY2sgPSBjb21wYWxfcmZraWxsX3NldCwKK307CisKK3N0YXRpYyBpbnQgc2V0dXBfcmZraWxsKHZvaWQpCit7CisJaW50IHJldDsKKworCXdpZmlfcmZraWxsID0gcmZraWxsX2FsbG9jKCJjb21wYWwtd2lmaSIsICZjb21wYWxfZGV2aWNlLT5kZXYsCisJCQkJUkZLSUxMX1RZUEVfV0xBTiwgJmNvbXBhbF9yZmtpbGxfb3BzLAorCQkJCSh2b2lkICopIFdMQU5fTUFTSyk7CisJaWYgKCF3aWZpX3Jma2lsbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSByZmtpbGxfcmVnaXN0ZXIod2lmaV9yZmtpbGwpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3dpZmk7CisKKwlidF9yZmtpbGwgPSByZmtpbGxfYWxsb2MoImNvbXBhbC1ibHVldG9vdGgiLCAmY29tcGFsX2RldmljZS0+ZGV2LAorCQkJCVJGS0lMTF9UWVBFX0JMVUVUT09USCwgJmNvbXBhbF9yZmtpbGxfb3BzLAorCQkJCSh2b2lkICopIEJUX01BU0spOworCWlmICghYnRfcmZraWxsKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jYXRlX2J0OwogCX0KKwlyZXQgPSByZmtpbGxfcmVnaXN0ZXIoYnRfcmZraWxsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZWdpc3Rlcl9idDsKIAogCXJldHVybiAwOworCitlcnJfcmVnaXN0ZXJfYnQ6CisJcmZraWxsX2Rlc3Ryb3koYnRfcmZraWxsKTsKKworZXJyX2FsbG9jYXRlX2J0OgorCXJma2lsbF91bnJlZ2lzdGVyKHdpZmlfcmZraWxsKTsKKworZXJyX3dpZmk6CisJcmZraWxsX2Rlc3Ryb3kod2lmaV9yZmtpbGwpOworCisJcmV0dXJuIHJldDsKIH0KIAogLyogQmFja2xpZ2h0IGRldmljZSBzdHVmZiAqLwpAQCAtMTY5LDg2ICsxNzUsNiBAQAogCiBzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmNvbXBhbGJsX2RldmljZTsKIAotLyogUGxhdGZvcm0gZGV2aWNlICovCi0KLXN0YXRpYyBzc2l6ZV90IHNob3dfd2xhbihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlpbnQgcmV0LCBlbmFibGVkOwotCi0JcmV0ID0gZ2V0X3dpcmVsZXNzX3N0YXRlKCZlbmFibGVkLCBOVUxMKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBlbmFibGVkKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19yYXcoc3RydWN0IGRldmljZSAqZGV2LAotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0JdTggcmVzdWx0OwotCi0JZWNfcmVhZChDT01QQUxfRUNfQ09NTUFORF9XSVJFTEVTUywgJnJlc3VsdCk7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgcmVzdWx0KTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19ibHVldG9vdGgoc3RydWN0IGRldmljZSAqZGV2LAotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0JaW50IHJldCwgZW5hYmxlZDsKLQotCXJldCA9IGdldF93aXJlbGVzc19zdGF0ZShOVUxMLCAmZW5hYmxlZCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgZW5hYmxlZCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX3dsYW5fc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LAotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlpbnQgc3RhdGUsIHJldDsKLQotCWlmIChzc2NhbmYoYnVmLCAiJWkiLCAmc3RhdGUpICE9IDEgfHwgKHN0YXRlIDwgMCB8fCBzdGF0ZSA+IDEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldCA9IHNldF93bGFuX3N0YXRlKHN0YXRlKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3RvcmVfYmx1ZXRvb3RoX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0JaW50IHN0YXRlLCByZXQ7Ci0KLQlpZiAoc3NjYW5mKGJ1ZiwgIiVpIiwgJnN0YXRlKSAhPSAxIHx8IChzdGF0ZSA8IDAgfHwgc3RhdGUgPiAxKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXQgPSBzZXRfYmx1ZXRvb3RoX3N0YXRlKHN0YXRlKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKGJsdWV0b290aCwgMDY0NCwgc2hvd19ibHVldG9vdGgsIHN0b3JlX2JsdWV0b290aF9zdGF0ZSk7Ci1zdGF0aWMgREVWSUNFX0FUVFIod2xhbiwgMDY0NCwgc2hvd193bGFuLCBzdG9yZV93bGFuX3N0YXRlKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihyYXcsIDA0NDQsIHNob3dfcmF3LCBOVUxMKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmNvbXBhbF9hdHRyaWJ1dGVzW10gPSB7Ci0JJmRldl9hdHRyX2JsdWV0b290aC5hdHRyLAotCSZkZXZfYXR0cl93bGFuLmF0dHIsCi0JJmRldl9hdHRyX3Jhdy5hdHRyLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNvbXBhbF9hdHRyaWJ1dGVfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gY29tcGFsX2F0dHJpYnV0ZXMKLX07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNvbXBhbF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKQEAgLTI1Nyw4ICsxODMsNiBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjb21wYWxfZGV2aWNlOwotCiAvKiBJbml0aWFsaXphdGlvbiAqLwogCiBzdGF0aWMgaW50IGRtaV9jaGVja19jYihjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCkBAIC0zMTAsNiArMjM0LDQ3IEBACiAJCX0sCiAJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYgogCX0sCisJeworCQkuaWRlbnQgPSAiRGVsbCBNaW5pIDkiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiA5MTAiKSwKKwkJfSwKKwkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiCisJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIE1pbmkgMTAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiAxMDEwIiksCisJCX0sCisJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYgorCX0sCisJeworCQkuaWRlbnQgPSAiRGVsbCBNaW5pIDEwdiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDEwMTEiKSwKKwkJfSwKKwkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiCisJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIEluc3Bpcm9uIDExeiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDExMTAiKSwKKwkJfSwKKwkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiCisJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIE1pbmkgMTIiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiAxMjEwIiksCisJCX0sCisJCS5jYWxsYmFjayA9IGRtaV9jaGVja19jYgorCX0sCisKIAl7IH0KIH07CiAKQEAgLTM0OCwyMyArMzEzLDIxIEBACiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGNvbXBhbF9kZXZpY2UpOwogCWlmIChyZXQpCi0JCWdvdG8gZmFpbF9wbGF0Zm9ybV9kZXZpY2UxOworCQlnb3RvIGZhaWxfcGxhdGZvcm1fZGV2aWNlOwogCi0JcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjb21wYWxfZGV2aWNlLT5kZXYua29iaiwKLQkJJmNvbXBhbF9hdHRyaWJ1dGVfZ3JvdXApOworCXJldCA9IHNldHVwX3Jma2lsbCgpOwogCWlmIChyZXQpCi0JCWdvdG8gZmFpbF9wbGF0Zm9ybV9kZXZpY2UyOworCQlnb3RvIGZhaWxfcmZraWxsOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiY29tcGFsLWxhcHRvcDogZHJpdmVyICJDT01QQUxfRFJJVkVSX1ZFUlNJT04KIAkJIiBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuIik7CiAKIAlyZXR1cm4gMDsKIAotZmFpbF9wbGF0Zm9ybV9kZXZpY2UyOgotCitmYWlsX3Jma2lsbDoKIAlwbGF0Zm9ybV9kZXZpY2VfZGVsKGNvbXBhbF9kZXZpY2UpOwogCi1mYWlsX3BsYXRmb3JtX2RldmljZTE6CitmYWlsX3BsYXRmb3JtX2RldmljZToKIAogCXBsYXRmb3JtX2RldmljZV9wdXQoY29tcGFsX2RldmljZSk7CiAKQEAgLTM4MiwxMCArMzQ1LDEzIEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgY29tcGFsX2NsZWFudXAodm9pZCkKIHsKIAotCXN5c2ZzX3JlbW92ZV9ncm91cCgmY29tcGFsX2RldmljZS0+ZGV2LmtvYmosICZjb21wYWxfYXR0cmlidXRlX2dyb3VwKTsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihjb21wYWxfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY29tcGFsX2RyaXZlcik7CiAJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGNvbXBhbGJsX2RldmljZSk7CisJcmZraWxsX3VucmVnaXN0ZXIod2lmaV9yZmtpbGwpOworCXJma2lsbF9kZXN0cm95KHdpZmlfcmZraWxsKTsKKwlyZmtpbGxfdW5yZWdpc3RlcihidF9yZmtpbGwpOworCXJma2lsbF9kZXN0cm95KGJ0X3Jma2lsbCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJjb21wYWwtbGFwdG9wOiBkcml2ZXIgdW5sb2FkZWQuXG4iKTsKIH0KQEAgLTQwMywzICszNjksOCBAQAogTU9EVUxFX0FMSUFTKCJkbWk6KjpybklGTDkxOnJ2cklGVDAwOioiKTsKIE1PRFVMRV9BTElBUygiZG1pOio6cm5KRkw5MjpydnJJRlQwMDoqIik7CiBNT0RVTEVfQUxJQVMoImRtaToqOnJuSUZUMDA6cnZySUZUMDA6KiIpOworTU9EVUxFX0FMSUFTKCJkbWk6Kjpzdm5EZWxsSW5jLjpwbkluc3Bpcm9uOTEwOioiKTsKK01PRFVMRV9BTElBUygiZG1pOio6c3ZuRGVsbEluYy46cG5JbnNwaXJvbjEwMTA6KiIpOworTU9EVUxFX0FMSUFTKCJkbWk6Kjpzdm5EZWxsSW5jLjpwbkluc3Bpcm9uMTAxMToqIik7CitNT0RVTEVfQUxJQVMoImRtaToqOnN2bkRlbGxJbmMuOnBuSW5zcGlyb24xMTEwOioiKTsKK01PRFVMRV9BTElBUygiZG1pOio6c3ZuRGVsbEluYy46cG5JbnNwaXJvbjEyMTA6KiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKaW5kZXggMzc4MDk5NC4uYjdmNGQyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCkBAIC0yMiw2ICsyMiw4IEBACiAjaW5jbHVkZSA8bGludXgvcmZraWxsLmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaTgwNDIuaD4KICNpbmNsdWRlICIuLi8uLi9maXJtd2FyZS9kY2RiYXMuaCIKIAogI2RlZmluZSBCUklHSFRORVNTX1RPS0VOIDB4N2QKQEAgLTc5LDkgKzgxLDczIEBACiAJCQlETUlfTUFUQ0goRE1JX0NIQVNTSVNfVFlQRSwgIjgiKSwKIAkJfSwKIAl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgQ29tcHV0ZXIgQ29ycG9yYXRpb24iLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgQ29tcHV0ZXIgQ29ycG9yYXRpb24iKSwKKwkJCURNSV9NQVRDSChETUlfQ0hBU1NJU19UWVBFLCAiOCIpLAorCQl9LAorCX0sCiAJeyB9CiB9OwogCitzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19kZXZpbml0ZGF0YSBkZWxsX2JsYWNrbGlzdFtdID0geworCS8qIFN1cHBvcnRlZCBieSBjb21wYWwtbGFwdG9wICovCisJeworCQkuaWRlbnQgPSAiRGVsbCBNaW5pIDkiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiA5MTAiKSwKKwkJfSwKKwl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgTWluaSAxMCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDEwMTAiKSwKKwkJfSwKKwl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgTWluaSAxMHYiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkRlbGwgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJJbnNwaXJvbiAxMDExIiksCisJCX0sCisJfSwKKwl7CisJCS5pZGVudCA9ICJEZWxsIEluc3Bpcm9uIDExeiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDExMTAiKSwKKwkJfSwKKwl9LAorCXsKKwkJLmlkZW50ID0gIkRlbGwgTWluaSAxMiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRGVsbCBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkluc3Bpcm9uIDEyMTAiKSwKKwkJfSwKKwl9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlciAqYnVmZmVyOworc3RydWN0IHBhZ2UgKmJ1ZmZlcnBhZ2U7CitERUZJTkVfTVVURVgoYnVmZmVyX211dGV4KTsKKworc3RhdGljIGludCBod3N3aXRjaF9zdGF0ZTsKKworc3RhdGljIHZvaWQgZ2V0X2J1ZmZlcih2b2lkKQoreworCW11dGV4X2xvY2soJmJ1ZmZlcl9tdXRleCk7CisJbWVtc2V0KGJ1ZmZlciwgMCwgc2l6ZW9mKHN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIpKTsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9idWZmZXIodm9pZCkKK3sKKwltdXRleF91bmxvY2soJmJ1ZmZlcl9tdXRleCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBwYXJzZV9kYV90YWJsZShjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqZG0pCiB7CiAJLyogRmluYWwgdG9rZW4gaXMgYSB0ZXJtaW5hdG9yLCBzbyB3ZSBkb24ndCB3YW50IHRvIGNvcHkgaXQgKi8KQEAgLTE2MCw2ICsyMjYsOCBAQAogLyogRGVyaXZlZCBmcm9tIGluZm9ybWF0aW9uIGluIERlbGxXaXJlbGVzc0N0bC5jcHA6CiAgICBDbGFzcyAxNywgc2VsZWN0IDExIGlzIHJhZGlvIGNvbnRyb2wuIEl0IHJldHVybnMgYW4gYXJyYXkgb2YgMzItYml0IHZhbHVlcy4KIAorICAgSW5wdXQgYnl0ZSAwID0gMDogV2lyZWxlc3MgaW5mb3JtYXRpb24KKwogICAgcmVzdWx0WzBdOiByZXR1cm4gY29kZQogICAgcmVzdWx0WzFdOgogICAgICBCaXQgMDogICAgICBIYXJkd2FyZSBzd2l0Y2ggc3VwcG9ydGVkCkBAIC0xODAsMzMgKzI0OCw2MiBAQAogICAgICBCaXRzIDIwLTMxOiBSZXNlcnZlZAogICAgcmVzdWx0WzJdOiBOVlJBTSBzaXplIGluIGJ5dGVzCiAgICByZXN1bHRbM106IE5WUkFNIGZvcm1hdCB2ZXJzaW9uIG51bWJlcgorCisgICBJbnB1dCBieXRlIDAgPSAyOiBXaXJlbGVzcyBzd2l0Y2ggY29uZmlndXJhdGlvbgorICAgcmVzdWx0WzBdOiByZXR1cm4gY29kZQorICAgcmVzdWx0WzFdOgorICAgICBCaXQgMDogICAgICBXaWZpIGNvbnRyb2xsZWQgYnkgc3dpdGNoCisgICAgIEJpdCAxOiAgICAgIEJsdWV0b290aCBjb250cm9sbGVkIGJ5IHN3aXRjaAorICAgICBCaXQgMjogICAgICBXV0FOIGNvbnRyb2xsZWQgYnkgc3dpdGNoCisgICAgIEJpdHMgMy02OiAgIFJlc2VydmVkCisgICAgIEJpdCA3OiAgICAgIFdpcmVsZXNzIHN3aXRjaCBjb25maWcgbG9ja2VkCisgICAgIEJpdCA4OiAgICAgIFdpZmkgbG9jYXRvciBlbmFibGVkCisgICAgIEJpdHMgOS0xNDogIFJlc2VydmVkCisgICAgIEJpdCAxNTogICAgIFdpZmkgbG9jYXRvciBzZXR0aW5nIGxvY2tlZAorICAgICBCaXRzIDE2LTMxOiBSZXNlcnZlZAogKi8KIAogc3RhdGljIGludCBkZWxsX3Jma2lsbF9zZXQodm9pZCAqZGF0YSwgYm9vbCBibG9ja2VkKQogewotCXN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIgYnVmZmVyOwogCWludCBkaXNhYmxlID0gYmxvY2tlZCA/IDEgOiAwOwogCXVuc2lnbmVkIGxvbmcgcmFkaW8gPSAodW5zaWduZWQgbG9uZylkYXRhOworCWludCBod3N3aXRjaF9iaXQgPSAodW5zaWduZWQgbG9uZylkYXRhIC0gMTsKKwlpbnQgcmV0ID0gMDsKIAotCW1lbXNldCgmYnVmZmVyLCAwLCBzaXplb2Yoc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlcikpOwotCWJ1ZmZlci5pbnB1dFswXSA9ICgxIHwgKHJhZGlvPDw4KSB8IChkaXNhYmxlIDw8IDE2KSk7Ci0JZGVsbF9zZW5kX3JlcXVlc3QoJmJ1ZmZlciwgMTcsIDExKTsKKwlnZXRfYnVmZmVyKCk7CisJZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCAxNywgMTEpOwogCi0JcmV0dXJuIDA7CisJLyogSWYgdGhlIGhhcmR3YXJlIHN3aXRjaCBjb250cm9scyB0aGlzIHJhZGlvLCBhbmQgdGhlIGhhcmR3YXJlCisJICAgc3dpdGNoIGlzIGRpc2FibGVkLCBkb24ndCBhbGxvdyBjaGFuZ2luZyB0aGUgc29mdHdhcmUgc3RhdGUgKi8KKwlpZiAoKGh3c3dpdGNoX3N0YXRlICYgQklUKGh3c3dpdGNoX2JpdCkpICYmCisJICAgICEoYnVmZmVyLT5vdXRwdXRbMV0gJiBCSVQoMTYpKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlidWZmZXItPmlucHV0WzBdID0gKDEgfCAocmFkaW88PDgpIHwgKGRpc2FibGUgPDwgMTYpKTsKKwlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDE3LCAxMSk7CisKK291dDoKKwlyZWxlYXNlX2J1ZmZlcigpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGRlbGxfcmZraWxsX3F1ZXJ5KHN0cnVjdCByZmtpbGwgKnJma2lsbCwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyIGJ1ZmZlcjsKIAlpbnQgc3RhdHVzOwogCWludCBiaXQgPSAodW5zaWduZWQgbG9uZylkYXRhICsgMTY7CisJaW50IGh3c3dpdGNoX2JpdCA9ICh1bnNpZ25lZCBsb25nKWRhdGEgLSAxOwogCi0JbWVtc2V0KCZidWZmZXIsIDAsIHNpemVvZihzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyKSk7Ci0JZGVsbF9zZW5kX3JlcXVlc3QoJmJ1ZmZlciwgMTcsIDExKTsKLQlzdGF0dXMgPSBidWZmZXIub3V0cHV0WzFdOworCWdldF9idWZmZXIoKTsKKwlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDE3LCAxMSk7CisJc3RhdHVzID0gYnVmZmVyLT5vdXRwdXRbMV07CisJcmVsZWFzZV9idWZmZXIoKTsKIAogCXJma2lsbF9zZXRfc3dfc3RhdGUocmZraWxsLCAhIShzdGF0dXMgJiBCSVQoYml0KSkpOwotCXJma2lsbF9zZXRfaHdfc3RhdGUocmZraWxsLCAhKHN0YXR1cyAmIEJJVCgxNikpKTsKKworCWlmIChod3N3aXRjaF9zdGF0ZSAmIChCSVQoaHdzd2l0Y2hfYml0KSkpCisJCXJma2lsbF9zZXRfaHdfc3RhdGUocmZraWxsLCAhKHN0YXR1cyAmIEJJVCgxNikpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZmtpbGxfb3BzIGRlbGxfcmZraWxsX29wcyA9IHsKQEAgLTIxNCwxNSArMzExLDM2IEBACiAJLnF1ZXJ5ID0gZGVsbF9yZmtpbGxfcXVlcnksCiB9OwogCitzdGF0aWMgdm9pZCBkZWxsX3VwZGF0ZV9yZmtpbGwoc3RydWN0IHdvcmtfc3RydWN0ICppZ25vcmVkKQoreworCWlmICh3aWZpX3Jma2lsbCkKKwkJZGVsbF9yZmtpbGxfcXVlcnkod2lmaV9yZmtpbGwsICh2b2lkICopMSk7CisJaWYgKGJsdWV0b290aF9yZmtpbGwpCisJCWRlbGxfcmZraWxsX3F1ZXJ5KGJsdWV0b290aF9yZmtpbGwsICh2b2lkICopMik7CisJaWYgKHd3YW5fcmZraWxsKQorCQlkZWxsX3Jma2lsbF9xdWVyeSh3d2FuX3Jma2lsbCwgKHZvaWQgKikzKTsKK30KK3N0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhkZWxsX3Jma2lsbF93b3JrLCBkZWxsX3VwZGF0ZV9yZmtpbGwpOworCisKIHN0YXRpYyBpbnQgX19pbml0IGRlbGxfc2V0dXBfcmZraWxsKHZvaWQpCiB7Ci0Jc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlciBidWZmZXI7CiAJaW50IHN0YXR1czsKIAlpbnQgcmV0OwogCi0JbWVtc2V0KCZidWZmZXIsIDAsIHNpemVvZihzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyKSk7Ci0JZGVsbF9zZW5kX3JlcXVlc3QoJmJ1ZmZlciwgMTcsIDExKTsKLQlzdGF0dXMgPSBidWZmZXIub3V0cHV0WzFdOworCWlmIChkbWlfY2hlY2tfc3lzdGVtKGRlbGxfYmxhY2tsaXN0KSkgeworCQlwcmludGsoS0VSTl9JTkZPICJkZWxsLWxhcHRvcDogQmxhY2tsaXN0ZWQgaGFyZHdhcmUgZGV0ZWN0ZWQgLSAiCisJCQkJIm5vdCBlbmFibGluZyByZmtpbGxcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlnZXRfYnVmZmVyKCk7CisJZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCAxNywgMTEpOworCXN0YXR1cyA9IGJ1ZmZlci0+b3V0cHV0WzFdOworCWJ1ZmZlci0+aW5wdXRbMF0gPSAweDI7CisJZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCAxNywgMTEpOworCWh3c3dpdGNoX3N0YXRlID0gYnVmZmVyLT5vdXRwdXRbMV07CisJcmVsZWFzZV9idWZmZXIoKTsKIAogCWlmICgoc3RhdHVzICYgKDE8PDJ8MTw8OCkpID09ICgxPDwyfDE8PDgpKSB7CiAJCXdpZmlfcmZraWxsID0gcmZraWxsX2FsbG9jKCJkZWxsLXdpZmkiLCAmcGxhdGZvcm1fZGV2aWNlLT5kZXYsCkBAIC0yOTgsMzkgKzQxNiw0OSBAQAogCiBzdGF0aWMgaW50IGRlbGxfc2VuZF9pbnRlbnNpdHkoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewotCXN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIgYnVmZmVyOworCWludCByZXQgPSAwOwogCi0JbWVtc2V0KCZidWZmZXIsIDAsIHNpemVvZihzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyKSk7Ci0JYnVmZmVyLmlucHV0WzBdID0gZmluZF90b2tlbl9sb2NhdGlvbihCUklHSFRORVNTX1RPS0VOKTsKLQlidWZmZXIuaW5wdXRbMV0gPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKKwlnZXRfYnVmZmVyKCk7CisJYnVmZmVyLT5pbnB1dFswXSA9IGZpbmRfdG9rZW5fbG9jYXRpb24oQlJJR0hUTkVTU19UT0tFTik7CisJYnVmZmVyLT5pbnB1dFsxXSA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOwogCi0JaWYgKGJ1ZmZlci5pbnB1dFswXSA9PSAtMSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGJ1ZmZlci0+aW5wdXRbMF0gPT0gLTEpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQogCiAJaWYgKHBvd2VyX3N1cHBseV9pc19zeXN0ZW1fc3VwcGxpZWQoKSA+IDApCi0JCWRlbGxfc2VuZF9yZXF1ZXN0KCZidWZmZXIsIDEsIDIpOworCQlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDEsIDIpOwogCWVsc2UKLQkJZGVsbF9zZW5kX3JlcXVlc3QoJmJ1ZmZlciwgMSwgMSk7CisJCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMSwgMSk7CiAKK291dDoKKwlyZWxlYXNlX2J1ZmZlcigpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGRlbGxfZ2V0X2ludGVuc2l0eShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7Ci0Jc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlciBidWZmZXI7CisJaW50IHJldCA9IDA7CiAKLQltZW1zZXQoJmJ1ZmZlciwgMCwgc2l6ZW9mKHN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIpKTsKLQlidWZmZXIuaW5wdXRbMF0gPSBmaW5kX3Rva2VuX2xvY2F0aW9uKEJSSUdIVE5FU1NfVE9LRU4pOworCWdldF9idWZmZXIoKTsKKwlidWZmZXItPmlucHV0WzBdID0gZmluZF90b2tlbl9sb2NhdGlvbihCUklHSFRORVNTX1RPS0VOKTsKIAotCWlmIChidWZmZXIuaW5wdXRbMF0gPT0gLTEpCi0JCXJldHVybiAtRU5PREVWOworCWlmIChidWZmZXItPmlucHV0WzBdID09IC0xKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KIAogCWlmIChwb3dlcl9zdXBwbHlfaXNfc3lzdGVtX3N1cHBsaWVkKCkgPiAwKQotCQlkZWxsX3NlbmRfcmVxdWVzdCgmYnVmZmVyLCAwLCAyKTsKKwkJZGVsbF9zZW5kX3JlcXVlc3QoYnVmZmVyLCAwLCAyKTsKIAllbHNlCi0JCWRlbGxfc2VuZF9yZXF1ZXN0KCZidWZmZXIsIDAsIDEpOworCQlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDAsIDEpOwogCi0JcmV0dXJuIGJ1ZmZlci5vdXRwdXRbMV07CitvdXQ6CisJcmVsZWFzZV9idWZmZXIoKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiBidWZmZXItPm91dHB1dFsxXTsKIH0KIAogc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGRlbGxfb3BzID0gewpAQCAtMzM4LDkgKzQ2NiwzMiBAQAogCS51cGRhdGVfc3RhdHVzICA9IGRlbGxfc2VuZF9pbnRlbnNpdHksCiB9OwogCitib29sIGRlbGxfbGFwdG9wX2k4MDQyX2ZpbHRlcih1bnNpZ25lZCBjaGFyIGRhdGEsIHVuc2lnbmVkIGNoYXIgc3RyLAorCQkJICAgICAgc3RydWN0IHNlcmlvICpwb3J0KQoreworCXN0YXRpYyBib29sIGV4dGVuZGVkOworCisJaWYgKHN0ciAmIDB4MjApCisJCXJldHVybiBmYWxzZTsKKworCWlmICh1bmxpa2VseShkYXRhID09IDB4ZTApKSB7CisJCWV4dGVuZGVkID0gdHJ1ZTsKKwkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSBpZiAodW5saWtlbHkoZXh0ZW5kZWQpKSB7CisJCXN3aXRjaCAoZGF0YSkgeworCQljYXNlIDB4ODoKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGVsbF9yZmtpbGxfd29yaywKKwkJCQkJICAgICAgcm91bmRfamlmZmllc19yZWxhdGl2ZShIWikpOworCQkJYnJlYWs7CisJCX0KKwkJZXh0ZW5kZWQgPSBmYWxzZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGRlbGxfaW5pdCh2b2lkKQogewotCXN0cnVjdCBjYWxsaW5nX2ludGVyZmFjZV9idWZmZXIgYnVmZmVyOwogCWludCBtYXhfaW50ZW5zaXR5ID0gMDsKIAlpbnQgcmV0OwogCkBAIC0zNjYsNiArNTE3LDE3IEBACiAJaWYgKHJldCkKIAkJZ290byBmYWlsX3BsYXRmb3JtX2RldmljZTI7CiAKKwkvKgorCSAqIEFsbG9jYXRlIGJ1ZmZlciBiZWxvdyA0R0IgZm9yIFNNSSBkYXRhLS1vbmx5IDMyLWJpdCBwaHlzaWNhbCBhZGRyCisJICogaXMgcGFzc2VkIHRvIFNNSSBoYW5kbGVyLgorCSAqLworCWJ1ZmZlcnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BMzIpOworCisJaWYgKCFidWZmZXJwYWdlKQorCQlnb3RvIGZhaWxfYnVmZmVyOworCWJ1ZmZlciA9IHBhZ2VfYWRkcmVzcyhidWZmZXJwYWdlKTsKKwltdXRleF9pbml0KCZidWZmZXJfbXV0ZXgpOworCiAJcmV0ID0gZGVsbF9zZXR1cF9yZmtpbGwoKTsKIAogCWlmIChyZXQpIHsKQEAgLTM3Myw2ICs1MzUsMTMgQEAKIAkJZ290byBmYWlsX3Jma2lsbDsKIAl9CiAKKwlyZXQgPSBpODA0Ml9pbnN0YWxsX2ZpbHRlcihkZWxsX2xhcHRvcF9pODA0Ml9maWx0ZXIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgImRlbGwtbGFwdG9wOiBVbmFibGUgdG8gaW5zdGFsbCBrZXkgZmlsdGVyXG4iKTsKKwkJZ290byBmYWlsX2ZpbHRlcjsKKwl9CisKICNpZmRlZiBDT05GSUdfQUNQSQogCS8qIEluIHRoZSBldmVudCBvZiBhbiBBQ1BJIGJhY2tsaWdodCBiZWluZyBhdmFpbGFibGUsIGRvbid0CiAJICogcmVnaXN0ZXIgdGhlIHBsYXRmb3JtIGNvbnRyb2xsZXIuCkBAIC0zODEsMTMgKzU1MCwxMyBAQAogCQlyZXR1cm4gMDsKICNlbmRpZgogCi0JbWVtc2V0KCZidWZmZXIsIDAsIHNpemVvZihzdHJ1Y3QgY2FsbGluZ19pbnRlcmZhY2VfYnVmZmVyKSk7Ci0JYnVmZmVyLmlucHV0WzBdID0gZmluZF90b2tlbl9sb2NhdGlvbihCUklHSFRORVNTX1RPS0VOKTsKLQotCWlmIChidWZmZXIuaW5wdXRbMF0gIT0gLTEpIHsKLQkJZGVsbF9zZW5kX3JlcXVlc3QoJmJ1ZmZlciwgMCwgMik7Ci0JCW1heF9pbnRlbnNpdHkgPSBidWZmZXIub3V0cHV0WzNdOworCWdldF9idWZmZXIoKTsKKwlidWZmZXItPmlucHV0WzBdID0gZmluZF90b2tlbl9sb2NhdGlvbihCUklHSFRORVNTX1RPS0VOKTsKKwlpZiAoYnVmZmVyLT5pbnB1dFswXSAhPSAtMSkgeworCQlkZWxsX3NlbmRfcmVxdWVzdChidWZmZXIsIDAsIDIpOworCQltYXhfaW50ZW5zaXR5ID0gYnVmZmVyLT5vdXRwdXRbM107CiAJfQorCXJlbGVhc2VfYnVmZmVyKCk7CiAKIAlpZiAobWF4X2ludGVuc2l0eSkgewogCQlkZWxsX2JhY2tsaWdodF9kZXZpY2UgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKApAQCAtNDEwLDggKzU3OSwxMiBAQAogCXJldHVybiAwOwogCiBmYWlsX2JhY2tsaWdodDoKKwlpODA0Ml9yZW1vdmVfZmlsdGVyKGRlbGxfbGFwdG9wX2k4MDQyX2ZpbHRlcik7CitmYWlsX2ZpbHRlcjoKIAlkZWxsX2NsZWFudXBfcmZraWxsKCk7CiBmYWlsX3Jma2lsbDoKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVycGFnZSk7CitmYWlsX2J1ZmZlcjoKIAlwbGF0Zm9ybV9kZXZpY2VfZGVsKHBsYXRmb3JtX2RldmljZSk7CiBmYWlsX3BsYXRmb3JtX2RldmljZTI6CiAJcGxhdGZvcm1fZGV2aWNlX3B1dChwbGF0Zm9ybV9kZXZpY2UpOwpAQCAtNDI0LDggKzU5NywxNiBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZGVsbF9leGl0KHZvaWQpCiB7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkZWxsX3Jma2lsbF93b3JrKTsKKwlpODA0Ml9yZW1vdmVfZmlsdGVyKGRlbGxfbGFwdG9wX2k4MDQyX2ZpbHRlcik7CiAJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGRlbGxfYmFja2xpZ2h0X2RldmljZSk7CiAJZGVsbF9jbGVhbnVwX3Jma2lsbCgpOworCWlmIChwbGF0Zm9ybV9kZXZpY2UpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX2RlbChwbGF0Zm9ybV9kZXZpY2UpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGxhdGZvcm1fZHJpdmVyKTsKKwl9CisJa2ZyZWUoZGFfdG9rZW5zKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZGVsbF9pbml0KTsKQEAgLTQzNSwzICs2MTYsNCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEZWxsIGxhcHRvcCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBUygiZG1pOipzdm5EZWxsSW5jLjoqOmN0ODoqIik7CitNT0RVTEVfQUxJQVMoImRtaToqc3ZuRGVsbENvbXB1dGVyQ29ycG9yYXRpb24uOio6Y3Q4OioiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKaW5kZXggYWQ0YzQxNGQuLjNhYTU3ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jCkBAIC04OSw2ICs4OSw3IEBACiAJe0tFX0tFWSwgMHgyMGU2LCBLRVlfUFJPRzF9LAogCXtLRV9LRVksIDB4MjE0MiwgS0VZX01FRElBfSwKIAl7S0VfS0VZLCAweDIxM2IsIEtFWV9JTkZPfSwKKwl7S0VfS0VZLCAweDIxNjksIEtFWV9ESVJFQ1RJT059LAogCXtLRV9LRVksIDB4MjMxYiwgS0VZX0hFTFB9LAogCXtLRV9FTkQsIDB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwppbmRleCA3N2JmNWQ4Li4yNmMyMTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC02Miw5ICs2MywxMCBAQAogCiAvKiBUb3NoaWJhIEFDUEkgbWV0aG9kIHBhdGhzICovCiAjZGVmaW5lIE1FVEhPRF9MQ0RfQlJJR0hUTkVTUwkiXFxfU0JfLlBDSTAuVkdBXy5MQ0RfLl9CQ00iCi0jZGVmaW5lIE1FVEhPRF9IQ0lfMQkJIlxcX1NCXy5WQUxELkdIQ0kiCi0jZGVmaW5lIE1FVEhPRF9IQ0lfMgkJIlxcX1NCXy5WQUxaLkdIQ0kiCisjZGVmaW5lIFRPU0hfSU5URVJGQUNFXzEJIlxcX1NCXy5WQUxEIgorI2RlZmluZSBUT1NIX0lOVEVSRkFDRV8yCSJcXF9TQl8uVkFMWiIKICNkZWZpbmUgTUVUSE9EX1ZJREVPX09VVAkiXFxfU0JfLlZBTFguRFNTWCIKKyNkZWZpbmUgR0hDSV9NRVRIT0QJCSIuR0hDSSIKIAogLyogVG9zaGliYSBIQ0kgaW50ZXJmYWNlIGRlZmluaXRpb25zCiAgKgpAQCAtMTE2LDYgKzExOCwzNiBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgdG9zaGliYV9kZXZpY2VfaWRzKTsKIAorc3RydWN0IGtleV9lbnRyeSB7CisJY2hhciB0eXBlOworCXUxNiBjb2RlOworCXUxNiBrZXljb2RlOworfTsKKworZW51bSB7S0VfS0VZLCBLRV9FTkR9OworCitzdGF0aWMgc3RydWN0IGtleV9lbnRyeSB0b3NoaWJhX2FjcGlfa2V5bWFwW10gID0geworCXtLRV9LRVksIDB4MTAxLCBLRVlfTVVURX0sCisJe0tFX0tFWSwgMHgxM2IsIEtFWV9DT0ZGRUV9LAorCXtLRV9LRVksIDB4MTNjLCBLRVlfQkFUVEVSWX0sCisJe0tFX0tFWSwgMHgxM2QsIEtFWV9TTEVFUH0sCisJe0tFX0tFWSwgMHgxM2UsIEtFWV9TVVNQRU5EfSwKKwl7S0VfS0VZLCAweDEzZiwgS0VZX1NXSVRDSFZJREVPTU9ERX0sCisJe0tFX0tFWSwgMHgxNDAsIEtFWV9CUklHSFRORVNTRE9XTn0sCisJe0tFX0tFWSwgMHgxNDEsIEtFWV9CUklHSFRORVNTVVB9LAorCXtLRV9LRVksIDB4MTQyLCBLRVlfV0xBTn0sCisJe0tFX0tFWSwgMHgxNDMsIEtFWV9QUk9HMX0sCisJe0tFX0tFWSwgMHhiMDUsIEtFWV9QUk9HMn0sCisJe0tFX0tFWSwgMHhiMDYsIEtFWV9XV1d9LAorCXtLRV9LRVksIDB4YjA3LCBLRVlfTUFJTH0sCisJe0tFX0tFWSwgMHhiMzAsIEtFWV9TVE9QfSwKKwl7S0VfS0VZLCAweGIzMSwgS0VZX1BSRVZJT1VTU09OR30sCisJe0tFX0tFWSwgMHhiMzIsIEtFWV9ORVhUU09OR30sCisJe0tFX0tFWSwgMHhiMzMsIEtFWV9QTEFZUEFVU0V9LAorCXtLRV9LRVksIDB4YjVhLCBLRVlfTUVESUF9LAorCXtLRV9FTkQsIDAsIDB9LAorfTsKKwogLyogdXRpbGl0eQogICovCiAKQEAgLTI1MSw2ICsyODMsOCBAQAogc3RydWN0IHRvc2hpYmFfYWNwaV9kZXYgewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBfZGV2OwogCXN0cnVjdCByZmtpbGwgKmJ0X3JmazsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpob3RrZXlfZGV2OworCWFjcGlfaGFuZGxlIGhhbmRsZTsKIAogCWNvbnN0IGNoYXIgKmJ0X25hbWU7CiAKQEAgLTcxMSw4ICs3NDUsMTU5IEBACiAgICAgICAgIC51cGRhdGVfc3RhdHVzICA9IHNldF9sY2Rfc3RhdHVzLAogfTsKIAorc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKnRvc2hpYmFfYWNwaV9nZXRfZW50cnlfYnlfc2NhbmNvZGUoaW50IGNvZGUpCit7CisJc3RydWN0IGtleV9lbnRyeSAqa2V5OworCisJZm9yIChrZXkgPSB0b3NoaWJhX2FjcGlfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykKKwkJaWYgKGNvZGUgPT0ga2V5LT5jb2RlKQorCQkJcmV0dXJuIGtleTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGtleV9lbnRyeSAqdG9zaGliYV9hY3BpX2dldF9lbnRyeV9ieV9rZXljb2RlKGludCBjb2RlKQoreworCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKKworCWZvciAoa2V5ID0gdG9zaGliYV9hY3BpX2tleW1hcDsga2V5LT50eXBlICE9IEtFX0VORDsga2V5KyspCisJCWlmIChjb2RlID09IGtleS0+a2V5Y29kZSAmJiBrZXktPnR5cGUgPT0gS0VfS0VZKQorCQkJcmV0dXJuIGtleTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHRvc2hpYmFfYWNwaV9nZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IHNjYW5jb2RlLAorCQkJCSAgIGludCAqa2V5Y29kZSkKK3sKKwlzdHJ1Y3Qga2V5X2VudHJ5ICprZXkgPSB0b3NoaWJhX2FjcGlfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlKHNjYW5jb2RlKTsKKworCWlmIChrZXkgJiYga2V5LT50eXBlID09IEtFX0tFWSkgeworCQkqa2V5Y29kZSA9IGtleS0+a2V5Y29kZTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdG9zaGliYV9hY3BpX3NldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgc2NhbmNvZGUsCisJCQkJICAgaW50IGtleWNvZGUpCit7CisJc3RydWN0IGtleV9lbnRyeSAqa2V5OworCWludCBvbGRfa2V5Y29kZTsKKworCWlmIChrZXljb2RlIDwgMCB8fCBrZXljb2RlID4gS0VZX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlrZXkgPSB0b3NoaWJhX2FjcGlfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlKHNjYW5jb2RlKTsKKwlpZiAoa2V5ICYmIGtleS0+dHlwZSA9PSBLRV9LRVkpIHsKKwkJb2xkX2tleWNvZGUgPSBrZXktPmtleWNvZGU7CisJCWtleS0+a2V5Y29kZSA9IGtleWNvZGU7CisJCXNldF9iaXQoa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCQlpZiAoIXRvc2hpYmFfYWNwaV9nZXRfZW50cnlfYnlfa2V5Y29kZShvbGRfa2V5Y29kZSkpCisJCQljbGVhcl9iaXQob2xkX2tleWNvZGUsIGRldi0+a2V5Yml0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIHRvc2hpYmFfYWNwaV9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmNvbnRleHQpCit7CisJdTMyIGhjaV9yZXN1bHQsIHZhbHVlOworCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKKworCWlmIChldmVudCAhPSAweDgwKQorCQlyZXR1cm47CisJZG8geworCQloY2lfcmVhZDEoSENJX1NZU1RFTV9FVkVOVCwgJnZhbHVlLCAmaGNpX3Jlc3VsdCk7CisJCWlmIChoY2lfcmVzdWx0ID09IEhDSV9TVUNDRVNTKSB7CisJCQlpZiAodmFsdWUgPT0gMHgxMDApCisJCQkJY29udGludWU7CisJCQllbHNlIGlmICh2YWx1ZSAmIDB4ODApIHsKKwkJCQlrZXkgPSB0b3NoaWJhX2FjcGlfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlCisJCQkJCSh2YWx1ZSAmIH4weDgwKTsKKwkJCQlpZiAoIWtleSkgeworCQkJCQlwcmludGsoTVlfSU5GTyAiVW5rbm93biBrZXkgJXhcbiIsCisJCQkJCSAgICAgICB2YWx1ZSAmIH4weDgwKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWlucHV0X3JlcG9ydF9rZXkodG9zaGliYV9hY3BpLmhvdGtleV9kZXYsCisJCQkJCQkga2V5LT5rZXljb2RlLCAxKTsKKwkJCQlpbnB1dF9zeW5jKHRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2KTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KHRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2LAorCQkJCQkJIGtleS0+a2V5Y29kZSwgMCk7CisJCQkJaW5wdXRfc3luYyh0b3NoaWJhX2FjcGkuaG90a2V5X2Rldik7CisJCQl9CisJCX0gZWxzZSBpZiAoaGNpX3Jlc3VsdCA9PSBIQ0lfTk9UX1NVUFBPUlRFRCkgeworCQkJLyogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGFuIHVucmVzb2x2ZWQgaXNzdWUgb24KKwkJCSAqIHNvbWUgbWFjaGluZXMgd2hlcmUgc3lzdGVtIGV2ZW50cyBzcG9yYWRpY2FsbHkKKwkJCSAqIGJlY29tZSBkaXNhYmxlZC4gKi8KKwkJCWhjaV93cml0ZTEoSENJX1NZU1RFTV9FVkVOVCwgMSwgJmhjaV9yZXN1bHQpOworCQkJcHJpbnRrKE1ZX05PVElDRSAiUmUtZW5hYmxlZCBob3RrZXlzXG4iKTsKKwkJfQorCX0gd2hpbGUgKGhjaV9yZXN1bHQgIT0gSENJX0VNUFRZKTsKK30KKworc3RhdGljIGludCB0b3NoaWJhX2FjcGlfc2V0dXBfa2V5Ym9hcmQoY2hhciAqZGV2aWNlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJaW50IHJlc3VsdDsKKwljb25zdCBzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CisKKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoTlVMTCwgZGV2aWNlLCAmaGFuZGxlKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcHJpbnRrKE1ZX0lORk8gIlVuYWJsZSB0byBnZXQgbm90aWZpY2F0aW9uIGRldmljZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXRvc2hpYmFfYWNwaS5oYW5kbGUgPSBoYW5kbGU7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJFTkFCIiwgTlVMTCwgTlVMTCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXByaW50ayhNWV9JTkZPICJVbmFibGUgdG8gZW5hYmxlIGhvdGtleXNcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoaGFuZGxlLCBBQ1BJX0RFVklDRV9OT1RJRlksCisJCQkJCSAgICAgIHRvc2hpYmFfYWNwaV9ub3RpZnksIE5VTEwpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlwcmludGsoTVlfSU5GTyAiVW5hYmxlIHRvIGluc3RhbGwgaG90a2V5IG5vdGlmaWNhdGlvblxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCF0b3NoaWJhX2FjcGkuaG90a2V5X2RldikgeworCQlwcmludGsoTVlfSU5GTyAiVW5hYmxlIHRvIHJlZ2lzdGVyIGlucHV0IGRldmljZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2LT5uYW1lID0gIlRvc2hpYmEgaW5wdXQgZGV2aWNlIjsKKwl0b3NoaWJhX2FjcGkuaG90a2V5X2Rldi0+cGh5cyA9IGRldmljZTsKKwl0b3NoaWJhX2FjcGkuaG90a2V5X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCXRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2LT5nZXRrZXljb2RlID0gdG9zaGliYV9hY3BpX2dldGtleWNvZGU7CisJdG9zaGliYV9hY3BpLmhvdGtleV9kZXYtPnNldGtleWNvZGUgPSB0b3NoaWJhX2FjcGlfc2V0a2V5Y29kZTsKKworCWZvciAoa2V5ID0gdG9zaGliYV9hY3BpX2tleW1hcDsga2V5LT50eXBlICE9IEtFX0VORDsga2V5KyspIHsKKwkJc2V0X2JpdChFVl9LRVksIHRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2LT5ldmJpdCk7CisJCXNldF9iaXQoa2V5LT5rZXljb2RlLCB0b3NoaWJhX2FjcGkuaG90a2V5X2Rldi0+a2V5Yml0KTsKKwl9CisKKwlyZXN1bHQgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UodG9zaGliYV9hY3BpLmhvdGtleV9kZXYpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKE1ZX0lORk8gIlVuYWJsZSB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCB0b3NoaWJhX2FjcGlfZXhpdCh2b2lkKQogeworCWlmICh0b3NoaWJhX2FjcGkuaG90a2V5X2RldikKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodG9zaGliYV9hY3BpLmhvdGtleV9kZXYpOworCiAJaWYgKHRvc2hpYmFfYWNwaS5idF9yZmspIHsKIAkJcmZraWxsX3VucmVnaXN0ZXIodG9zaGliYV9hY3BpLmJ0X3Jmayk7CiAJCXJma2lsbF9kZXN0cm95KHRvc2hpYmFfYWNwaS5idF9yZmspOwpAQCAtNzI2LDYgKzkxMSw5IEBACiAJaWYgKHRvc2hpYmFfcHJvY19kaXIpCiAJCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NfVE9TSElCQSwgYWNwaV9yb290X2Rpcik7CiAKKwlhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcih0b3NoaWJhX2FjcGkuaGFuZGxlLCBBQ1BJX0RFVklDRV9OT1RJRlksCisJCQkJICAgdG9zaGliYV9hY3BpX25vdGlmeSk7CisKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih0b3NoaWJhX2FjcGkucF9kZXYpOwogCiAJcmV0dXJuOwpAQCAtNzQyLDExICs5MzAsMTUgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBzaW1wbGUgZGV2aWNlIGRldGVjdGlvbjogbG9vayBmb3IgSENJIG1ldGhvZCAqLwotCWlmIChpc192YWxpZF9hY3BpX3BhdGgoTUVUSE9EX0hDSV8xKSkKLQkJbWV0aG9kX2hjaSA9IE1FVEhPRF9IQ0lfMTsKLQllbHNlIGlmIChpc192YWxpZF9hY3BpX3BhdGgoTUVUSE9EX0hDSV8yKSkKLQkJbWV0aG9kX2hjaSA9IE1FVEhPRF9IQ0lfMjsKLQllbHNlCisJaWYgKGlzX3ZhbGlkX2FjcGlfcGF0aChUT1NIX0lOVEVSRkFDRV8xIEdIQ0lfTUVUSE9EKSkgeworCQltZXRob2RfaGNpID0gVE9TSF9JTlRFUkZBQ0VfMSBHSENJX01FVEhPRDsKKwkJaWYgKHRvc2hpYmFfYWNwaV9zZXR1cF9rZXlib2FyZChUT1NIX0lOVEVSRkFDRV8xKSkKKwkJCXByaW50ayhNWV9JTkZPICJVbmFibGUgdG8gYWN0aXZhdGUgaG90a2V5c1xuIik7CisJfSBlbHNlIGlmIChpc192YWxpZF9hY3BpX3BhdGgoVE9TSF9JTlRFUkZBQ0VfMiBHSENJX01FVEhPRCkpIHsKKwkJbWV0aG9kX2hjaSA9IFRPU0hfSU5URVJGQUNFXzIgR0hDSV9NRVRIT0Q7CisJCWlmICh0b3NoaWJhX2FjcGlfc2V0dXBfa2V5Ym9hcmQoVE9TSF9JTlRFUkZBQ0VfMikpCisJCQlwcmludGsoTVlfSU5GTyAiVW5hYmxlIHRvIGFjdGl2YXRlIGhvdGtleXNcbiIpOworCX0gZWxzZQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXByaW50ayhNWV9JTkZPICJUb3NoaWJhIExhcHRvcCBBQ1BJIEV4dHJhcyB2ZXJzaW9uICVzXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wczMvcHMzYXYuYyBiL2RyaXZlcnMvcHMzL3BzM2F2LmMKaW5kZXggZTgyZDhjOS4uOTVhNjg5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wczMvcHMzYXYuYworKysgYi9kcml2ZXJzL3BzMy9wczNhdi5jCkBAIC01MzIsNyArNTMyLDcgQEAKIAlyZXMgPSBwczNhdl9jbWRfYXZiX3BhcmFtKCZhdmJfcGFyYW0sIGxlbik7CiAJaWYgKHJlcyA9PSBQUzNBVl9TVEFUVVNfTk9fU1lOQ19IRUFEKQogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiJXM6IENvbW1hbmQgZmFpbGVkLiBQbGVhc2UgdHJ5IHlvdXIgcmVxdWVzdCBhZ2Fpbi4gXG4iLAorCQkgICAgICAgIiVzOiBDb21tYW5kIGZhaWxlZC4gUGxlYXNlIHRyeSB5b3VyIHJlcXVlc3QgYWdhaW4uXG4iLAogCQkgICAgICAgX19mdW5jX18pOwogCWVsc2UgaWYgKHJlcykKIAkJZGV2X2RiZygmcHMzYXYtPmRldi0+Y29yZSwgInBzM2F2X2NtZF9hdmJfcGFyYW0gZmFpbGVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL0tjb25maWcgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCmluZGV4IDgxNjdlOWUuLjJiYjhhOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL0tjb25maWcKKysrIGIvZHJpdmVycy9ydGMvS2NvbmZpZwpAQCAtODY4LDQgKzg2OCwxNCBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIE1DMTM3ODMgUE1JQyBSVEMKIAorY29uZmlnIFJUQ19EUlZfTVBDNTEyMQorCXRyaXN0YXRlICJGcmVlc2NhbGUgTVBDNTEyMSBidWlsdC1pbiBSVEMiCisJZGVwZW5kcyBvbiBQUENfTVBDNTEyeCAmJiBSVENfQ0xBU1MKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSB3aWxsIGdldCBzdXBwb3J0IGZvciB0aGUKKwkgIGJ1aWx0LWluIFJUQyBNUEM1MTIxLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1tcGM1MTIxLgorCiBlbmRpZiAjIFJUQ19DTEFTUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvTWFrZWZpbGUgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQppbmRleCBlNTE2MGZkLi5iNzE0OGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQpAQCAtNTUsNiArNTUsNyBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfTUFYNjkwMikJKz0gcnRjLW1heDY5MDIubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTUMxMzc4MykJKz0gcnRjLW1jMTM3ODMubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTVNNNjI0MikJKz0gcnRjLW1zbTYyNDIubworb2JqLSQoQ09ORklHX1JUQ19EUlZfTVBDNTEyMSkJKz0gcnRjLW1wYzUxMjEubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTVYpCSs9IHJ0Yy1tdi5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9OVUM5MDApCSs9IHJ0Yy1udWM5MDAubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfT01BUCkJKz0gcnRjLW9tYXAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1wYzUxMjEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tcGM1MTIxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMxM2NhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tcGM1MTIxLmMKQEAgLTAsMCArMSwzODcgQEAKKy8qCisgKiBSZWFsLXRpbWUgY2xvY2sgZHJpdmVyIGZvciBNUEM1MTIxCisgKgorICogQ29weXJpZ2h0IDIwMDcsIERvbWVuIFB1bmNlciA8ZG9tZW4ucHVuY2VyQHRlbGFyZ28uY29tPgorICogQ29weXJpZ2h0IDIwMDgsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgeworCXU4IHNldF90aW1lOwkJLyogUlRDICsgMHgwMCAqLworCXU4IGhvdXJfc2V0OwkJLyogUlRDICsgMHgwMSAqLworCXU4IG1pbnV0ZV9zZXQ7CQkvKiBSVEMgKyAweDAyICovCisJdTggc2Vjb25kX3NldDsJCS8qIFJUQyArIDB4MDMgKi8KKworCXU4IHNldF9kYXRlOwkJLyogUlRDICsgMHgwNCAqLworCXU4IG1vbnRoX3NldDsJCS8qIFJUQyArIDB4MDUgKi8KKwl1OCB3ZWVrZGF5X3NldDsJCS8qIFJUQyArIDB4MDYgKi8KKwl1OCBkYXRlX3NldDsJCS8qIFJUQyArIDB4MDcgKi8KKworCXU4IHdyaXRlX3N3OwkJLyogUlRDICsgMHgwOCAqLworCXU4IHN3X3NldDsJCS8qIFJUQyArIDB4MDkgKi8KKwl1MTYgeWVhcl9zZXQ7CQkvKiBSVEMgKyAweDBhICovCisKKwl1OCBhbG1fZW5hYmxlOwkJLyogUlRDICsgMHgwYyAqLworCXU4IGFsbV9ob3VyX3NldDsJLyogUlRDICsgMHgwZCAqLworCXU4IGFsbV9taW5fc2V0OwkJLyogUlRDICsgMHgwZSAqLworCXU4IGludF9lbmFibGU7CQkvKiBSVEMgKyAweDBmICovCisKKwl1OCByZXNlcnZlZDE7CisJdTggaG91cjsJCS8qIFJUQyArIDB4MTEgKi8KKwl1OCBtaW51dGU7CQkvKiBSVEMgKyAweDEyICovCisJdTggc2Vjb25kOwkJLyogUlRDICsgMHgxMyAqLworCisJdTggbW9udGg7CQkvKiBSVEMgKyAweDE0ICovCisJdTggd2RheV9tZGF5OwkJLyogUlRDICsgMHgxNSAqLworCXUxNiB5ZWFyOwkJLyogUlRDICsgMHgxNiAqLworCisJdTggaW50X2FsbTsJCS8qIFJUQyArIDB4MTggKi8KKwl1OCBpbnRfc3c7CQkvKiBSVEMgKyAweDE5ICovCisJdTggYWxtX3N0YXR1czsJCS8qIFJUQyArIDB4MWEgKi8KKwl1OCBzd19taW51dGU7CQkvKiBSVEMgKyAweDFiICovCisKKwl1OCBidXNfZXJyb3JfMTsJCS8qIFJUQyArIDB4MWMgKi8KKwl1OCBpbnRfZGF5OwkJLyogUlRDICsgMHgxZCAqLworCXU4IGludF9taW47CQkvKiBSVEMgKyAweDFlICovCisJdTggaW50X3NlYzsJCS8qIFJUQyArIDB4MWYgKi8KKworCS8qCisJICogdGFyZ2V0X3RpbWU6CisJICoJaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgaGliZXJuYXRpb24gYnV0IGhpYmVybmF0aW9uCisJICoJZG9lcyBub3Qgd29yayBvbiBzaWxpY29uIHJldiAxLjUgc28gdXNlIGl0IGZvciBub24tdm9sYXRpbGUKKwkgKglzdG9yYWdlIG9mIG9mZnNldCBiZXR3ZWVuIHRoZSBhY3R1YWxfdGltZSByZWdpc3RlciBhbmQgbGludXgKKwkgKgl0aW1lCisJICovCisJdTMyIHRhcmdldF90aW1lOwkvKiBSVEMgKyAweDIwICovCisJLyoKKwkgKiBhY3R1YWxfdGltZToKKwkgKiAJcmVhZG9ubHkgdGltZSBzaW5jZSBWQkFUX1JUQyB3YXMgbGFzdCBjb25uZWN0ZWQKKwkgKi8KKwl1MzIgYWN0dWFsX3RpbWU7CS8qIFJUQyArIDB4MjQgKi8KKwl1MzIga2VlcF9hbGl2ZTsJCS8qIFJUQyArIDB4MjggKi8KK307CisKK3N0cnVjdCBtcGM1MTIxX3J0Y19kYXRhIHsKKwl1bnNpZ25lZCBpcnE7CisJdW5zaWduZWQgaXJxX3BlcmlvZGljOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKwlzdHJ1Y3QgcnRjX3drYWxybSB3a2FsYXJtOworfTsKKworLyoKKyAqIFVwZGF0ZSBzZWNvbmQvbWludXRlL2hvdXIgcmVnaXN0ZXJzLgorICoKKyAqIFRoaXMgaXMganVzdCBzbyBhbGFybSB3aWxsIHdvcmsuCisgKi8KK3N0YXRpYyB2b2lkIG1wYzUxMjFfcnRjX3VwZGF0ZV9zbWgoc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncywKKwkJCQkgICBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCW91dF84KCZyZWdzLT5zZWNvbmRfc2V0LCB0bS0+dG1fc2VjKTsKKwlvdXRfOCgmcmVncy0+bWludXRlX3NldCwgdG0tPnRtX21pbik7CisJb3V0XzgoJnJlZ3MtPmhvdXJfc2V0LCB0bS0+dG1faG91cik7CisKKwkvKiBzZXQgdGltZSBzZXF1ZW5jZSAqLworCW91dF84KCZyZWdzLT5zZXRfdGltZSwgMHgxKTsKKwlvdXRfOCgmcmVncy0+c2V0X3RpbWUsIDB4Myk7CisJb3V0XzgoJnJlZ3MtPnNldF90aW1lLCAweDEpOworCW91dF84KCZyZWdzLT5zZXRfdGltZSwgMHgwKTsKK30KKworc3RhdGljIGludCBtcGM1MTIxX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBtcGM1MTIxX3J0Y19kYXRhICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfcmVncyBfX2lvbWVtICpyZWdzID0gcnRjLT5yZWdzOworCXVuc2lnbmVkIGxvbmcgbm93OworCisJLyoKKwkgKiBsaW51eCB0aW1lIGlzIGFjdHVhbF90aW1lIHBsdXMgdGhlIG9mZnNldCBzYXZlZCBpbiB0YXJnZXRfdGltZQorCSAqLworCW5vdyA9IGluX2JlMzIoJnJlZ3MtPmFjdHVhbF90aW1lKSArIGluX2JlMzIoJnJlZ3MtPnRhcmdldF90aW1lKTsKKworCXJ0Y190aW1lX3RvX3RtKG5vdywgdG0pOworCisJLyoKKwkgKiB1cGRhdGUgc2Vjb25kIG1pbnV0ZSBob3VyIHJlZ2lzdGVycworCSAqIHNvIGFsYXJtcyB3aWxsIHdvcmsKKwkgKi8KKwltcGM1MTIxX3J0Y191cGRhdGVfc21oKHJlZ3MsIHRtKTsKKworCXJldHVybiBydGNfdmFsaWRfdG0odG0pOworfQorCitzdGF0aWMgaW50IG1wYzUxMjFfcnRjX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfZGF0YSAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncyA9IHJ0Yy0+cmVnczsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgbm93OworCisJLyoKKwkgKiBUaGUgYWN0dWFsX3RpbWUgcmVnaXN0ZXIgaXMgcmVhZCBvbmx5IHNvIHdlIHdyaXRlIHRoZSBvZmZzZXQKKwkgKiBiZXR3ZWVuIGl0IGFuZCBsaW51eCB0aW1lIHRvIHRoZSB0YXJnZXRfdGltZSByZWdpc3Rlci4KKwkgKi8KKwlyZXQgPSBydGNfdG1fdG9fdGltZSh0bSwgJm5vdyk7CisJaWYgKHJldCA9PSAwKQorCQlvdXRfYmUzMigmcmVncy0+dGFyZ2V0X3RpbWUsIG5vdyAtIGluX2JlMzIoJnJlZ3MtPmFjdHVhbF90aW1lKSk7CisKKwkvKgorCSAqIHVwZGF0ZSBzZWNvbmQgbWludXRlIGhvdXIgcmVnaXN0ZXJzCisJICogc28gYWxhcm1zIHdpbGwgd29yaworCSAqLworCW1wYzUxMjFfcnRjX3VwZGF0ZV9zbWgocmVncywgdG0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTEyMV9ydGNfcmVhZF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3sKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfZGF0YSAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1wYzUxMjFfcnRjX3JlZ3MgX19pb21lbSAqcmVncyA9IHJ0Yy0+cmVnczsKKworCSphbGFybSA9IHJ0Yy0+d2thbGFybTsKKworCWFsYXJtLT5wZW5kaW5nID0gaW5fOCgmcmVncy0+YWxtX3N0YXR1cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGM1MTIxX3J0Y19zZXRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqYWxhcm0pCit7CisJc3RydWN0IG1wYzUxMjFfcnRjX2RhdGEgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisKKwkvKgorCSAqIHRoZSBhbGFybSBoYXMgbm8gc2Vjb25kcyBzbyBkZWFsIHdpdGggaXQKKwkgKi8KKwlpZiAoYWxhcm0tPnRpbWUudG1fc2VjKSB7CisJCWFsYXJtLT50aW1lLnRtX3NlYyA9IDA7CisJCWFsYXJtLT50aW1lLnRtX21pbisrOworCQlpZiAoYWxhcm0tPnRpbWUudG1fbWluID49IDYwKSB7CisJCQlhbGFybS0+dGltZS50bV9taW4gPSAwOworCQkJYWxhcm0tPnRpbWUudG1faG91cisrOworCQkJaWYgKGFsYXJtLT50aW1lLnRtX2hvdXIgPj0gMjQpCisJCQkJYWxhcm0tPnRpbWUudG1faG91ciA9IDA7CisJCX0KKwl9CisKKwlhbGFybS0+dGltZS50bV9tZGF5ID0gLTE7CisJYWxhcm0tPnRpbWUudG1fbW9uID0gLTE7CisJYWxhcm0tPnRpbWUudG1feWVhciA9IC0xOworCisJb3V0XzgoJnJlZ3MtPmFsbV9taW5fc2V0LCBhbGFybS0+dGltZS50bV9taW4pOworCW91dF84KCZyZWdzLT5hbG1faG91cl9zZXQsIGFsYXJtLT50aW1lLnRtX2hvdXIpOworCisJb3V0XzgoJnJlZ3MtPmFsbV9lbmFibGUsIGFsYXJtLT5lbmFibGVkKTsKKworCXJ0Yy0+d2thbGFybSA9ICphbGFybTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IG1wYzUxMjFfcnRjX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXN0cnVjdCBtcGM1MTIxX3J0Y19kYXRhICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoKHN0cnVjdCBkZXZpY2UgKilkZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisKKwlpZiAoaW5fOCgmcmVncy0+aW50X2FsbSkpIHsKKwkJLyogYWNrbm93bGVkZ2UgYW5kIGNsZWFyIHN0YXR1cyAqLworCQlvdXRfOCgmcmVncy0+aW50X2FsbSwgMSk7CisJCW91dF84KCZyZWdzLT5hbG1fc3RhdHVzLCAxKTsKKworCQlydGNfdXBkYXRlX2lycShydGMtPnJ0YywgMSwgUlRDX0lSUUYgfCBSVENfQUYpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJcmV0dXJuIElSUV9OT05FOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXBjNTEyMV9ydGNfaGFuZGxlcl91cGQoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXN0cnVjdCBtcGM1MTIxX3J0Y19kYXRhICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoKHN0cnVjdCBkZXZpY2UgKilkZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisKKwlpZiAoaW5fOCgmcmVncy0+aW50X3NlYykgJiYgKGluXzgoJnJlZ3MtPmludF9lbmFibGUpICYgMHgxKSkgeworCQkvKiBhY2tub3dsZWRnZSAqLworCQlvdXRfOCgmcmVncy0+aW50X3NlYywgMSk7CisKKwkJcnRjX3VwZGF0ZV9pcnEocnRjLT5ydGMsIDEsIFJUQ19JUlFGIHwgUlRDX1VGKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCXJldHVybiBJUlFfTk9ORTsKK30KKworc3RhdGljIGludCBtcGM1MTIxX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IG1wYzUxMjFfcnRjX2RhdGEgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisJaW50IHZhbDsKKworCWlmIChlbmFibGVkKQorCQl2YWwgPSAxOworCWVsc2UKKwkJdmFsID0gMDsKKworCW91dF84KCZyZWdzLT5hbG1fZW5hYmxlLCB2YWwpOworCXJ0Yy0+d2thbGFybS5lbmFibGVkID0gdmFsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTEyMV9ydGNfdXBkYXRlX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IG1wYzUxMjFfcnRjX2RhdGEgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtcGM1MTIxX3J0Y19yZWdzIF9faW9tZW0gKnJlZ3MgPSBydGMtPnJlZ3M7CisJaW50IHZhbDsKKworCXZhbCA9IGluXzgoJnJlZ3MtPmludF9lbmFibGUpOworCisJaWYgKGVuYWJsZWQpCisJCXZhbCA9ICh2YWwgJiB+MHg4KSB8IDB4MTsKKwllbHNlCisJCXZhbCAmPSB+MHgxOworCisJb3V0XzgoJnJlZ3MtPmludF9lbmFibGUsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIG1wYzUxMjFfcnRjX29wcyA9IHsKKwkucmVhZF90aW1lID0gbXBjNTEyMV9ydGNfcmVhZF90aW1lLAorCS5zZXRfdGltZSA9IG1wYzUxMjFfcnRjX3NldF90aW1lLAorCS5yZWFkX2FsYXJtID0gbXBjNTEyMV9ydGNfcmVhZF9hbGFybSwKKwkuc2V0X2FsYXJtID0gbXBjNTEyMV9ydGNfc2V0X2FsYXJtLAorCS5hbGFybV9pcnFfZW5hYmxlID0gbXBjNTEyMV9ydGNfYWxhcm1faXJxX2VuYWJsZSwKKwkudXBkYXRlX2lycV9lbmFibGUgPSBtcGM1MTIxX3J0Y191cGRhdGVfaXJxX2VuYWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1wYzUxMjFfcnRjX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLAorCQkJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfZGF0YSAqcnRjOworCWludCBlcnIgPSAwOworCXUzMiBrYTsKKworCXJ0YyA9IGt6YWxsb2Moc2l6ZW9mKCpydGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ0YykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydGMtPnJlZ3MgPSBvZl9pb21hcChvcC0+bm9kZSwgMCk7CisJaWYgKCFydGMtPnJlZ3MpIHsKKwkJZGV2X2Vycigmb3AtPmRldiwgIiVzOiBjb3VsZG4ndCBtYXAgaW8gc3BhY2VcbiIsIF9fZnVuY19fKTsKKwkJZXJyID0gLUVOT1NZUzsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlkZXZpY2VfaW5pdF93YWtldXAoJm9wLT5kZXYsIDEpOworCisJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCBydGMpOworCisJcnRjLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvcC0+bm9kZSwgMSk7CisJZXJyID0gcmVxdWVzdF9pcnEocnRjLT5pcnEsIG1wYzUxMjFfcnRjX2hhbmRsZXIsIElSUUZfRElTQUJMRUQsCisJCQkJCQkibXBjNTEyMS1ydGMiLCAmb3AtPmRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiJXM6IGNvdWxkIG5vdCByZXF1ZXN0IGlycTogJWlcbiIsCisJCQkJCQkJX19mdW5jX18sIHJ0Yy0+aXJxKTsKKwkJZ290byBvdXRfZGlzcG9zZTsKKwl9CisKKwlydGMtPmlycV9wZXJpb2RpYyA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9wLT5ub2RlLCAwKTsKKwllcnIgPSByZXF1ZXN0X2lycShydGMtPmlycV9wZXJpb2RpYywgbXBjNTEyMV9ydGNfaGFuZGxlcl91cGQsCisJCQkJSVJRRl9ESVNBQkxFRCwgIm1wYzUxMjEtcnRjX3VwZCIsICZvcC0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICIlczogY291bGQgbm90IHJlcXVlc3QgaXJxOiAlaVxuIiwKKwkJCQkJCV9fZnVuY19fLCBydGMtPmlycV9wZXJpb2RpYyk7CisJCWdvdG8gb3V0X2Rpc3Bvc2UyOworCX0KKworCWthID0gaW5fYmUzMigmcnRjLT5yZWdzLT5rZWVwX2FsaXZlKTsKKwlpZiAoa2EgJiAweDAyKSB7CisJCWRldl93YXJuKCZvcC0+ZGV2LAorCQkJIm1wYzUxMjEtcnRjOiBCYXR0ZXJ5IG9yIG9zY2lsbGF0b3IgZmFpbHVyZSFcbiIpOworCQlvdXRfYmUzMigmcnRjLT5yZWdzLT5rZWVwX2FsaXZlLCBrYSk7CisJfQorCisJcnRjLT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJtcGM1MTIxLXJ0YyIsICZvcC0+ZGV2LAorCQkJCQkmbXBjNTEyMV9ydGNfb3BzLCBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMtPnJ0YykpIHsKKwkJZXJyID0gUFRSX0VSUihydGMtPnJ0Yyk7CisJCWdvdG8gb3V0X2ZyZWVfaXJxOworCX0KKworCXJldHVybiAwOworCitvdXRfZnJlZV9pcnE6CisJZnJlZV9pcnEocnRjLT5pcnFfcGVyaW9kaWMsICZvcC0+ZGV2KTsKK291dF9kaXNwb3NlMjoKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKHJ0Yy0+aXJxX3BlcmlvZGljKTsKKwlmcmVlX2lycShydGMtPmlycSwgJm9wLT5kZXYpOworb3V0X2Rpc3Bvc2U6CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhydGMtPmlycSk7CisJaW91bm1hcChydGMtPnJlZ3MpOworb3V0X2ZyZWU6CisJa2ZyZWUocnRjKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1wYzUxMjFfcnRjX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3sKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfZGF0YSAqcnRjID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKKwlzdHJ1Y3QgbXBjNTEyMV9ydGNfcmVncyBfX2lvbWVtICpyZWdzID0gcnRjLT5yZWdzOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHQsIHNvIHRoZXJlIGFyZSBubyBuYXN0eSBzdXJwcmlzZXMgKi8KKwlvdXRfOCgmcmVncy0+YWxtX2VuYWJsZSwgMCk7CisJb3V0XzgoJnJlZ3MtPmludF9lbmFibGUsIGluXzgoJnJlZ3MtPmludF9lbmFibGUpICYgfjB4MSk7CisKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjLT5ydGMpOworCWlvdW5tYXAocnRjLT5yZWdzKTsKKwlmcmVlX2lycShydGMtPmlycSwgJm9wLT5kZXYpOworCWZyZWVfaXJxKHJ0Yy0+aXJxX3BlcmlvZGljLCAmb3AtPmRldik7CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhydGMtPmlycSk7CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhydGMtPmlycV9wZXJpb2RpYyk7CisJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCBOVUxMKTsKKwlrZnJlZShydGMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzUxMjFfcnRjX21hdGNoW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXJ0YyIsIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBtcGM1MTIxX3J0Y19kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAibXBjNTEyMS1ydGMiLAorCS5tYXRjaF90YWJsZSA9IG1wYzUxMjFfcnRjX21hdGNoLAorCS5wcm9iZSA9IG1wYzUxMjFfcnRjX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChtcGM1MTIxX3J0Y19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXBjNTEyMV9ydGNfaW5pdCh2b2lkKQoreworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1wYzUxMjFfcnRjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChtcGM1MTIxX3J0Y19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1wYzUxMjFfcnRjX2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTEyMV9ydGNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1wYzUxMjFfcnRjX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKb2huIFJpZ2J5IDxqY3JpZ2J5QGdtYWlsLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wbDAzMS5jIGIvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMKaW5kZXggMDI2NGIxMS4uYzI1NmFhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMKQEAgLTcsNiArNyw5IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDYgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCisgKiBBdXRob3I6IE1pYW4gWW91c2FmIEthdWthYiA8bWlhbi55b3VzYWYua2F1a2FiQHN0ZXJpY3Nzb24uY29tPgorICogQ29weXJpZ2h0IDIwMTAgKGMpIFNULUVyaWNzc29uIEFCCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgpAQCAtMTgsNiArMjEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9iY2QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogLyoKICAqIFJlZ2lzdGVyIGRlZmluaXRpb25zCkBAIC0zMCwzNSArMzYsMjA3IEBACiAjZGVmaW5lCVJUQ19SSVMJCTB4MTQJLyogUmF3IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KICNkZWZpbmUJUlRDX01JUwkJMHgxOAkvKiBNYXNrZWQgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLwogI2RlZmluZQlSVENfSUNSCQkweDFjCS8qIEludGVycnVwdCBjbGVhciByZWdpc3RlciAqLworLyogU1QgdmFyaWFudHMgaGF2ZSBhZGRpdGlvbmFsIHRpbWVyIGZ1bmN0aW9uYWxpdHkgKi8KKyNkZWZpbmUgUlRDX1REUgkJMHgyMAkvKiBUaW1lciBkYXRhIHJlYWQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRDX1RMUgkJMHgyNAkvKiBUaW1lciBkYXRhIGxvYWQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRDX1RDUgkJMHgyOAkvKiBUaW1lciBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFJUQ19ZRFIJCTB4MzAJLyogWWVhciBkYXRhIHJlYWQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRDX1lNUgkJMHgzNAkvKiBZZWFyIG1hdGNoIHJlZ2lzdGVyICovCisjZGVmaW5lIFJUQ19ZTFIJCTB4MzgJLyogWWVhciBkYXRhIGxvYWQgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBSVENfQ1JfQ1dFTgkoMSA8PCAyNikJLyogQ2xvY2t3YXRjaCBlbmFibGUgYml0ICovCisKKyNkZWZpbmUgUlRDX1RDUl9FTgkoMSA8PCAxKSAvKiBQZXJpb2RpYyB0aW1lciBlbmFibGUgYml0ICovCisKKy8qIENvbW1vbiBiaXQgZGVmaW5pdGlvbnMgZm9yIEludGVycnVwdCBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIFJUQ19CSVRfQUkJKDEgPDwgMCkgLyogQWxhcm0gaW50ZXJydXB0IGJpdCAqLworI2RlZmluZSBSVENfQklUX1BJCSgxIDw8IDEpIC8qIFBlcmlvZGljIGludGVycnVwdCBiaXQuIFNUIHZhcmlhbnRzIG9ubHkuICovCisKKy8qIENvbW1vbiBiaXQgZGVmaW5hdGlvbnMgZm9yIFNUIHYyIGZvciByZWFkaW5nL3dyaXRpbmcgdGltZSAqLworI2RlZmluZSBSVENfU0VDX1NISUZUIDAKKyNkZWZpbmUgUlRDX1NFQ19NQVNLICgweDNGIDw8IFJUQ19TRUNfU0hJRlQpIC8qIFNlY29uZCBbMC01OV0gKi8KKyNkZWZpbmUgUlRDX01JTl9TSElGVCA2CisjZGVmaW5lIFJUQ19NSU5fTUFTSyAoMHgzRiA8PCBSVENfTUlOX1NISUZUKSAvKiBNaW51dGUgWzAtNTldICovCisjZGVmaW5lIFJUQ19IT1VSX1NISUZUIDEyCisjZGVmaW5lIFJUQ19IT1VSX01BU0sgKDB4MUYgPDwgUlRDX0hPVVJfU0hJRlQpIC8qIEhvdXIgWzAtMjNdICovCisjZGVmaW5lIFJUQ19XREFZX1NISUZUIDE3CisjZGVmaW5lIFJUQ19XREFZX01BU0sgKDB4NyA8PCBSVENfV0RBWV9TSElGVCkgLyogRGF5IG9mIFdlZWsgWzEtN10gMT1TdW5kYXkgKi8KKyNkZWZpbmUgUlRDX01EQVlfU0hJRlQgMjAKKyNkZWZpbmUgUlRDX01EQVlfTUFTSyAoMHgxRiA8PCBSVENfTURBWV9TSElGVCkgLyogRGF5IG9mIE1vbnRoIFsxLTMxXSAqLworI2RlZmluZSBSVENfTU9OX1NISUZUIDI1CisjZGVmaW5lIFJUQ19NT05fTUFTSyAoMHhGIDw8IFJUQ19NT05fU0hJRlQpIC8qIE1vbnRoIFsxLTEyXSAxPUphbnVhcnkgKi8KKworI2RlZmluZSBSVENfVElNRVJfRlJFUSAzMjc2OAogCiBzdHJ1Y3QgcGwwMzFfbG9jYWwgewogCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CiAJdm9pZCBfX2lvbWVtICpiYXNlOworCXU4IGh3X2Rlc2lnbmVyOworCXU4IGh3X3JldmlzaW9uOjQ7CiB9OwogCi1zdGF0aWMgaXJxcmV0dXJuX3QgcGwwMzFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpbnQgcGwwMzFfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7Ci0Jc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IGRldl9pZDsKKwlzdHJ1Y3QgcGwwMzFfbG9jYWwgKmxkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBpbXNjOwogCi0JcnRjX3VwZGF0ZV9pcnEocnRjLCAxLCBSVENfQUYpOworCS8qIENsZWFyIGFueSBwZW5kaW5nIGFsYXJtIGludGVycnVwdHMuICovCisJd3JpdGVsKFJUQ19CSVRfQUksIGxkYXRhLT5iYXNlICsgUlRDX0lDUik7CiAKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJaW1zYyA9IHJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX0lNU0MpOworCisJaWYgKGVuYWJsZWQgPT0gMSkKKwkJd3JpdGVsKGltc2MgfCBSVENfQklUX0FJLCBsZGF0YS0+YmFzZSArIFJUQ19JTVNDKTsKKwllbHNlCisJCXdyaXRlbChpbXNjICYgflJUQ19CSVRfQUksIGxkYXRhLT5iYXNlICsgUlRDX0lNU0MpOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGwwMzFfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKy8qCisgKiBDb252ZXJ0IEdyZWdvcmlhbiBkYXRlIHRvIFNUIHYyIFJUQyBmb3JtYXQuCisgKi8KK3N0YXRpYyBpbnQgcGwwMzFfc3R2Ml90bV90b190aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IHJ0Y190aW1lICp0bSwgdW5zaWduZWQgbG9uZyAqc3RfdGltZSwKKwl1bnNpZ25lZCBsb25nICpiY2RfeWVhcikKK3sKKwlpbnQgeWVhciA9IHRtLT50bV95ZWFyICsgMTkwMDsKKwlpbnQgd2RheSA9IHRtLT50bV93ZGF5OworCisJLyogd2RheSBtYXNraW5nIGlzIG5vdCB3b3JraW5nIGluIGhhcmR3YXJlIHNvIHdkYXkgbXVzdCBiZSB2YWxpZCAqLworCWlmICh3ZGF5IDwgLTEgfHwgd2RheSA+IDYpIHsKKwkJZGV2X2VycihkZXYsICJpbnZhbGlkIHdkYXkgdmFsdWUgJWRcbiIsIHRtLT50bV93ZGF5KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIGlmICh3ZGF5ID09IC0xKSB7CisJCS8qIHdkYXkgaXMgbm90IHByb3ZpZGVkLCBjYWxjdWxhdGUgaXQgaGVyZSAqLworCQl1bnNpZ25lZCBsb25nIHRpbWU7CisJCXN0cnVjdCBydGNfdGltZSBjYWxjX3RtOworCisJCXJ0Y190bV90b190aW1lKHRtLCAmdGltZSk7CisJCXJ0Y190aW1lX3RvX3RtKHRpbWUsICZjYWxjX3RtKTsKKwkJd2RheSA9IGNhbGNfdG0udG1fd2RheTsKKwl9CisKKwkqYmNkX3llYXIgPSAoYmluMmJjZCh5ZWFyICUgMTAwKSB8IGJpbjJiY2QoeWVhciAvIDEwMCkgPDwgOCk7CisKKwkqc3RfdGltZSA9ICgodG0tPnRtX21vbiArIDEpIDw8IFJUQ19NT05fU0hJRlQpCisJCQl8CSh0bS0+dG1fbWRheSA8PCBSVENfTURBWV9TSElGVCkKKwkJCXwJKCh3ZGF5ICsgMSkgPDwgUlRDX1dEQVlfU0hJRlQpCisJCQl8CSh0bS0+dG1faG91ciA8PCBSVENfSE9VUl9TSElGVCkKKwkJCXwJKHRtLT50bV9taW4gPDwgUlRDX01JTl9TSElGVCkKKwkJCXwJKHRtLT50bV9zZWMgPDwgUlRDX1NFQ19TSElGVCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvbnZlcnQgU1QgdjIgUlRDIGZvcm1hdCB0byBHcmVnb3JpYW4gZGF0ZS4KKyAqLworc3RhdGljIGludCBwbDAzMV9zdHYyX3RpbWVfdG9fdG0odW5zaWduZWQgbG9uZyBzdF90aW1lLCB1bnNpZ25lZCBsb25nIGJjZF95ZWFyLAorCXN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKGJjZF95ZWFyKSArIChiY2QyYmluKGJjZF95ZWFyID4+IDgpICogMTAwKTsKKwl0bS0+dG1fbW9uICA9ICgoc3RfdGltZSAmIFJUQ19NT05fTUFTSykgPj4gUlRDX01PTl9TSElGVCkgLSAxOworCXRtLT50bV9tZGF5ID0gKChzdF90aW1lICYgUlRDX01EQVlfTUFTSykgPj4gUlRDX01EQVlfU0hJRlQpOworCXRtLT50bV93ZGF5ID0gKChzdF90aW1lICYgUlRDX1dEQVlfTUFTSykgPj4gUlRDX1dEQVlfU0hJRlQpIC0gMTsKKwl0bS0+dG1faG91ciA9ICgoc3RfdGltZSAmIFJUQ19IT1VSX01BU0spID4+IFJUQ19IT1VSX1NISUZUKTsKKwl0bS0+dG1fbWluICA9ICgoc3RfdGltZSAmIFJUQ19NSU5fTUFTSykgPj4gUlRDX01JTl9TSElGVCk7CisJdG0tPnRtX3NlYyAgPSAoKHN0X3RpbWUgJiBSVENfU0VDX01BU0spID4+IFJUQ19TRUNfU0hJRlQpOworCisJdG0tPnRtX3lkYXkgPSBydGNfeWVhcl9kYXlzKHRtLT50bV9tZGF5LCB0bS0+dG1fbW9uLCB0bS0+dG1feWVhcik7CisJdG0tPnRtX3llYXIgLT0gMTkwMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBsMDMxX3N0djJfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKIAlzdHJ1Y3QgcGwwMzFfbG9jYWwgKmxkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCXdyaXRlbCgxLCBsZGF0YS0+YmFzZSArIFJUQ19NSVMpOwotCQlyZXR1cm4gMDsKLQljYXNlIFJUQ19BSUVfT046Ci0JCXdyaXRlbCgwLCBsZGF0YS0+YmFzZSArIFJUQ19NSVMpOwotCQlyZXR1cm4gMDsKKwlwbDAzMV9zdHYyX3RpbWVfdG9fdG0ocmVhZGwobGRhdGEtPmJhc2UgKyBSVENfRFIpLAorCQkJcmVhZGwobGRhdGEtPmJhc2UgKyBSVENfWURSKSwgdG0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGwwMzFfc3R2Ml9zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJdW5zaWduZWQgbG9uZyB0aW1lOworCXVuc2lnbmVkIGxvbmcgYmNkX3llYXI7CisJc3RydWN0IHBsMDMxX2xvY2FsICpsZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBwbDAzMV9zdHYyX3RtX3RvX3RpbWUoZGV2LCB0bSwgJnRpbWUsICZiY2RfeWVhcik7CisJaWYgKHJldCA9PSAwKSB7CisJCXdyaXRlbChiY2RfeWVhciwgbGRhdGEtPmJhc2UgKyBSVENfWUxSKTsKKwkJd3JpdGVsKHRpbWUsIGxkYXRhLT5iYXNlICsgUlRDX0xSKTsKIAl9CiAKLQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGwwMzFfc3R2Ml9yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsYXJtKQoreworCXN0cnVjdCBwbDAzMV9sb2NhbCAqbGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gcGwwMzFfc3R2Ml90aW1lX3RvX3RtKHJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX01SKSwKKwkJCXJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX1lNUiksICZhbGFybS0+dGltZSk7CisKKwlhbGFybS0+cGVuZGluZyA9IHJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX1JJUykgJiBSVENfQklUX0FJOworCWFsYXJtLT5lbmFibGVkID0gcmVhZGwobGRhdGEtPmJhc2UgKyBSVENfSU1TQykgJiBSVENfQklUX0FJOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwbDAzMV9zdHYyX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3sKKwlzdHJ1Y3QgcGwwMzFfbG9jYWwgKmxkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyB0aW1lOworCXVuc2lnbmVkIGxvbmcgYmNkX3llYXI7CisJaW50IHJldDsKKworCS8qIEF0IHRoZSBtb21lbnQsIHdlIGNhbiBvbmx5IGRlYWwgd2l0aCBub24td2lsZGNhcmRlZCBhbGFybSB0aW1lcy4gKi8KKwlyZXQgPSBydGNfdmFsaWRfdG0oJmFsYXJtLT50aW1lKTsKKwlpZiAocmV0ID09IDApIHsKKwkJcmV0ID0gcGwwMzFfc3R2Ml90bV90b190aW1lKGRldiwgJmFsYXJtLT50aW1lLAorCQkJCQkgICAgJnRpbWUsICZiY2RfeWVhcik7CisJCWlmIChyZXQgPT0gMCkgeworCQkJd3JpdGVsKGJjZF95ZWFyLCBsZGF0YS0+YmFzZSArIFJUQ19ZTVIpOworCQkJd3JpdGVsKHRpbWUsIGxkYXRhLT5iYXNlICsgUlRDX01SKTsKKworCQkJcGwwMzFfYWxhcm1faXJxX2VuYWJsZShkZXYsIGFsYXJtLT5lbmFibGVkKTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBwbDAzMV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBwbDAzMV9sb2NhbCAqbGRhdGEgPSBkZXZfaWQ7CisJdW5zaWduZWQgbG9uZyBydGNtaXM7CisJdW5zaWduZWQgbG9uZyBldmVudHMgPSAwOworCisJcnRjbWlzID0gcmVhZGwobGRhdGEtPmJhc2UgKyBSVENfTUlTKTsKKwlpZiAocnRjbWlzKSB7CisJCXdyaXRlbChydGNtaXMsIGxkYXRhLT5iYXNlICsgUlRDX0lDUik7CisKKwkJaWYgKHJ0Y21pcyAmIFJUQ19CSVRfQUkpCisJCQlldmVudHMgfD0gKFJUQ19BRiB8IFJUQ19JUlFGKTsKKworCQkvKiBUaW1lciBpbnRlcnJ1cHQgaXMgb25seSBhdmFpbGFibGUgaW4gU1QgdmFyaWFudHMgKi8KKwkJaWYgKChydGNtaXMgJiBSVENfQklUX1BJKSAmJgorCQkJKGxkYXRhLT5od19kZXNpZ25lciA9PSBBTUJBX1ZFTkRPUl9TVCkpCisJCQlldmVudHMgfD0gKFJUQ19QRiB8IFJUQ19JUlFGKTsKKworCQlydGNfdXBkYXRlX2lycShsZGF0YS0+cnRjLCAxLCBldmVudHMpOworCisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlyZXR1cm4gSVJRX05PTkU7CiB9CiAKIHN0YXRpYyBpbnQgcGwwMzFfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKQEAgLTc0LDExICsyNTIsMTQgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHRpbWU7CiAJc3RydWN0IHBsMDMxX2xvY2FsICpsZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CiAKLQlydGNfdG1fdG9fdGltZSh0bSwgJnRpbWUpOwotCXdyaXRlbCh0aW1lLCBsZGF0YS0+YmFzZSArIFJUQ19MUik7CisJcmV0ID0gcnRjX3RtX3RvX3RpbWUodG0sICZ0aW1lKTsKIAotCXJldHVybiAwOworCWlmIChyZXQgPT0gMCkKKwkJd3JpdGVsKHRpbWUsIGxkYXRhLT5iYXNlICsgUlRDX0xSKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcGwwMzFfcmVhZF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKQEAgLTg2LDggKzI2Nyw5IEBACiAJc3RydWN0IHBsMDMxX2xvY2FsICpsZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcnRjX3RpbWVfdG9fdG0ocmVhZGwobGRhdGEtPmJhc2UgKyBSVENfTVIpLCAmYWxhcm0tPnRpbWUpOwotCWFsYXJtLT5wZW5kaW5nID0gcmVhZGwobGRhdGEtPmJhc2UgKyBSVENfUklTKTsKLQlhbGFybS0+ZW5hYmxlZCA9IHJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX0lNU0MpOworCisJYWxhcm0tPnBlbmRpbmcgPSByZWFkbChsZGF0YS0+YmFzZSArIFJUQ19SSVMpICYgUlRDX0JJVF9BSTsKKwlhbGFybS0+ZW5hYmxlZCA9IHJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX0lNU0MpICYgUlRDX0JJVF9BSTsKIAogCXJldHVybiAwOwogfQpAQCAtOTYsMjIgKzI3OCw3MSBAQAogewogCXN0cnVjdCBwbDAzMV9sb2NhbCAqbGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1bnNpZ25lZCBsb25nIHRpbWU7CisJaW50IHJldDsKIAotCXJ0Y190bV90b190aW1lKCZhbGFybS0+dGltZSwgJnRpbWUpOworCS8qIEF0IHRoZSBtb21lbnQsIHdlIGNhbiBvbmx5IGRlYWwgd2l0aCBub24td2lsZGNhcmRlZCBhbGFybSB0aW1lcy4gKi8KKwlyZXQgPSBydGNfdmFsaWRfdG0oJmFsYXJtLT50aW1lKTsKKwlpZiAocmV0ID09IDApIHsKKwkJcmV0ID0gcnRjX3RtX3RvX3RpbWUoJmFsYXJtLT50aW1lLCAmdGltZSk7CisJCWlmIChyZXQgPT0gMCkgeworCQkJd3JpdGVsKHRpbWUsIGxkYXRhLT5iYXNlICsgUlRDX01SKTsKKwkJCXBsMDMxX2FsYXJtX2lycV9lbmFibGUoZGV2LCBhbGFybS0+ZW5hYmxlZCk7CisJCX0KKwl9CiAKLQl3cml0ZWwodGltZSwgbGRhdGEtPmJhc2UgKyBSVENfTVIpOwotCXdyaXRlbCghYWxhcm0tPmVuYWJsZWQsIGxkYXRhLT5iYXNlICsgUlRDX01JUyk7CisJcmV0dXJuIHJldDsKK30KKworLyogUGVyaW9kaWMgaW50ZXJydXB0IGlzIG9ubHkgYXZhaWxhYmxlIGluIFNUIHZhcmlhbnRzLiAqLworc3RhdGljIGludCBwbDAzMV9pcnFfc2V0X3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IHBsMDMxX2xvY2FsICpsZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGVuYWJsZWQgPT0gMSkgeworCQkvKiBDbGVhciBhbnkgcGVuZGluZyB0aW1lciBpbnRlcnJ1cHQuICovCisJCXdyaXRlbChSVENfQklUX1BJLCBsZGF0YS0+YmFzZSArIFJUQ19JQ1IpOworCisJCXdyaXRlbChyZWFkbChsZGF0YS0+YmFzZSArIFJUQ19JTVNDKSB8IFJUQ19CSVRfUEksCisJCQlsZGF0YS0+YmFzZSArIFJUQ19JTVNDKTsKKworCQkvKiBOb3cgc3RhcnQgdGhlIHRpbWVyICovCisJCXdyaXRlbChyZWFkbChsZGF0YS0+YmFzZSArIFJUQ19UQ1IpIHwgUlRDX1RDUl9FTiwKKwkJCWxkYXRhLT5iYXNlICsgUlRDX1RDUik7CisKKwl9IGVsc2UgeworCQl3cml0ZWwocmVhZGwobGRhdGEtPmJhc2UgKyBSVENfSU1TQykgJiAoflJUQ19CSVRfUEkpLAorCQkJbGRhdGEtPmJhc2UgKyBSVENfSU1TQyk7CisKKwkJLyogQWxzbyBzdG9wIHRoZSB0aW1lciAqLworCQl3cml0ZWwocmVhZGwobGRhdGEtPmJhc2UgKyBSVENfVENSKSAmICh+UlRDX1RDUl9FTiksCisJCQlsZGF0YS0+YmFzZSArIFJUQ19UQ1IpOworCX0KKwkvKiBXYWl0IGF0IGxlYXN0IDEgUlRDMzIgY2xvY2sgY3ljbGUgdG8gZW5zdXJlIG5leHQgYWNjZXNzCisJICogdG8gUlRDX1RDUiB3aWxsIHN1Y2NlZWQuCisJICovCisJdWRlbGF5KDQwKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgcGwwMzFfb3BzID0gewotCS5pb2N0bCA9IHBsMDMxX2lvY3RsLAotCS5yZWFkX3RpbWUgPSBwbDAzMV9yZWFkX3RpbWUsCi0JLnNldF90aW1lID0gcGwwMzFfc2V0X3RpbWUsCi0JLnJlYWRfYWxhcm0gPSBwbDAzMV9yZWFkX2FsYXJtLAotCS5zZXRfYWxhcm0gPSBwbDAzMV9zZXRfYWxhcm0sCi19Oworc3RhdGljIGludCBwbDAzMV9pcnFfc2V0X2ZyZXEoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgZnJlcSkKK3sKKwlzdHJ1Y3QgcGwwMzFfbG9jYWwgKmxkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwkvKiBDYW50IHNldCB0aW1lciBpZiBpdCBpcyBhbHJlYWR5IGVuYWJsZWQgKi8KKwlpZiAocmVhZGwobGRhdGEtPmJhc2UgKyBSVENfVENSKSAmIFJUQ19UQ1JfRU4pIHsKKwkJZGV2X2VycihkZXYsICJjYW4ndCBjaGFuZ2UgZnJlcXVlbmN5IHdoaWxlIHRpbWVyIGVuYWJsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBJZiBzZWxmIHN0YXJ0IGJpdCBpbiBSVENfVENSIGlzIHNldCB0aW1lciB3aWxsIHN0YXJ0IGhlcmUsCisJICogYnV0IHdlIG5ldmVyIHNldCB0aGF0IGJpdC4gSW5zdGVhZCB3ZSBzdGFydCB0aGUgdGltZXIgd2hlbgorCSAqIHNldF9zdGF0ZSBpcyBjYWxsZWQgd2l0aCBlbmFibGVkID09IDEuCisJICovCisJd3JpdGVsKFJUQ19USU1FUl9GUkVRIC8gZnJlcSwgbGRhdGEtPmJhc2UgKyBSVENfVExSKTsKKworCXJldHVybiAwOworfQogCiBzdGF0aWMgaW50IHBsMDMxX3JlbW92ZShzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFkZXYpCiB7CkBAIC0xMzEsMTggKzM2MiwyMCBAQAogewogCWludCByZXQ7CiAJc3RydWN0IHBsMDMxX2xvY2FsICpsZGF0YTsKKwlzdHJ1Y3QgcnRjX2NsYXNzX29wcyAqb3BzID0gaWQtPmRhdGE7CiAKIAlyZXQgPSBhbWJhX3JlcXVlc3RfcmVnaW9ucyhhZGV2LCBOVUxMKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9yZXE7CiAKLQlsZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwbDAzMV9sb2NhbCksIEdGUF9LRVJORUwpOworCWxkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBsMDMxX2xvY2FsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFsZGF0YSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CiAKIAlsZGF0YS0+YmFzZSA9IGlvcmVtYXAoYWRldi0+cmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZhZGV2LT5yZXMpKTsKKwogCWlmICghbGRhdGEtPmJhc2UpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfbm9fcmVtYXA7CkBAIC0xNTAsMjQgKzM4MywzNiBAQAogCiAJYW1iYV9zZXRfZHJ2ZGF0YShhZGV2LCBsZGF0YSk7CiAKLQlpZiAocmVxdWVzdF9pcnEoYWRldi0+aXJxWzBdLCBwbDAzMV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCi0JCQkicnRjLXBsMDMxIiwgbGRhdGEtPnJ0YykpIHsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXRfbm9faXJxOwotCX0KKwlsZGF0YS0+aHdfZGVzaWduZXIgPSBhbWJhX21hbmYoYWRldik7CisJbGRhdGEtPmh3X3JldmlzaW9uID0gYW1iYV9yZXYoYWRldik7CiAKLQlsZGF0YS0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigicGwwMzEiLCAmYWRldi0+ZGV2LCAmcGwwMzFfb3BzLAotCQkJCQkgVEhJU19NT0RVTEUpOworCWRldl9kYmcoJmFkZXYtPmRldiwgImRlc2lnbmVyIElEID0gMHglMDJ4XG4iLCBsZGF0YS0+aHdfZGVzaWduZXIpOworCWRldl9kYmcoJmFkZXYtPmRldiwgInJldmlzaW9uID0gMHglMDF4XG4iLCBsZGF0YS0+aHdfcmV2aXNpb24pOworCisJLyogRW5hYmxlIHRoZSBjbG9ja3dhdGNoIG9uIFNUIFZhcmlhbnRzICovCisJaWYgKChsZGF0YS0+aHdfZGVzaWduZXIgPT0gQU1CQV9WRU5ET1JfU1QpICYmCisJICAgIChsZGF0YS0+aHdfcmV2aXNpb24gPiAxKSkKKwkJd3JpdGVsKHJlYWRsKGxkYXRhLT5iYXNlICsgUlRDX0NSKSB8IFJUQ19DUl9DV0VOLAorCQkgICAgICAgbGRhdGEtPmJhc2UgKyBSVENfQ1IpOworCisJbGRhdGEtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInBsMDMxIiwgJmFkZXYtPmRldiwgb3BzLAorCQkJCQlUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihsZGF0YS0+cnRjKSkgewogCQlyZXQgPSBQVFJfRVJSKGxkYXRhLT5ydGMpOwogCQlnb3RvIG91dF9ub19ydGM7CiAJfQogCisJaWYgKHJlcXVlc3RfaXJxKGFkZXYtPmlycVswXSwgcGwwMzFfaW50ZXJydXB0LAorCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCAicnRjLXBsMDMxIiwgbGRhdGEpKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0X25vX2lycTsKKwl9CisKIAlyZXR1cm4gMDsKIAotb3V0X25vX3J0YzoKLQlmcmVlX2lycShhZGV2LT5pcnFbMF0sIGxkYXRhLT5ydGMpOwogb3V0X25vX2lycToKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIobGRhdGEtPnJ0Yyk7CitvdXRfbm9fcnRjOgogCWlvdW5tYXAobGRhdGEtPmJhc2UpOwogCWFtYmFfc2V0X2RydmRhdGEoYWRldiwgTlVMTCk7CiBvdXRfbm9fcmVtYXA6CkBAIC0xNzUsMTMgKzQyMCw1NyBAQAogb3V0OgogCWFtYmFfcmVsZWFzZV9yZWdpb25zKGFkZXYpOwogZXJyX3JlcToKKwogCXJldHVybiByZXQ7CiB9CiAKKy8qIE9wZXJhdGlvbnMgZm9yIHRoZSBvcmlnaW5hbCBBUk0gdmVyc2lvbiAqLworc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIGFybV9wbDAzMV9vcHMgPSB7CisJLnJlYWRfdGltZSA9IHBsMDMxX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUgPSBwbDAzMV9zZXRfdGltZSwKKwkucmVhZF9hbGFybSA9IHBsMDMxX3JlYWRfYWxhcm0sCisJLnNldF9hbGFybSA9IHBsMDMxX3NldF9hbGFybSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IHBsMDMxX2FsYXJtX2lycV9lbmFibGUsCit9OworCisvKiBUaGUgRmlyc3QgU1QgZGVyaXZhdGl2ZSAqLworc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIHN0djFfcGwwMzFfb3BzID0geworCS5yZWFkX3RpbWUgPSBwbDAzMV9yZWFkX3RpbWUsCisJLnNldF90aW1lID0gcGwwMzFfc2V0X3RpbWUsCisJLnJlYWRfYWxhcm0gPSBwbDAzMV9yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0gPSBwbDAzMV9zZXRfYWxhcm0sCisJLmFsYXJtX2lycV9lbmFibGUgPSBwbDAzMV9hbGFybV9pcnFfZW5hYmxlLAorCS5pcnFfc2V0X3N0YXRlID0gcGwwMzFfaXJxX3NldF9zdGF0ZSwKKwkuaXJxX3NldF9mcmVxID0gcGwwMzFfaXJxX3NldF9mcmVxLAorfTsKKworLyogQW5kIHRoZSBzZWNvbmQgU1QgZGVyaXZhdGl2ZSAqLworc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIHN0djJfcGwwMzFfb3BzID0geworCS5yZWFkX3RpbWUgPSBwbDAzMV9zdHYyX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUgPSBwbDAzMV9zdHYyX3NldF90aW1lLAorCS5yZWFkX2FsYXJtID0gcGwwMzFfc3R2Ml9yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0gPSBwbDAzMV9zdHYyX3NldF9hbGFybSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IHBsMDMxX2FsYXJtX2lycV9lbmFibGUsCisJLmlycV9zZXRfc3RhdGUgPSBwbDAzMV9pcnFfc2V0X3N0YXRlLAorCS5pcnFfc2V0X2ZyZXEgPSBwbDAzMV9pcnFfc2V0X2ZyZXEsCit9OworCiBzdGF0aWMgc3RydWN0IGFtYmFfaWQgcGwwMzFfaWRzW10gX19pbml0ZGF0YSA9IHsKIAl7CiAJCS5pZCA9IDB4MDAwNDEwMzEsCiAJCS5tYXNrID0gMHgwMDBmZmZmZiwKKwkJLmRhdGEgPSAmYXJtX3BsMDMxX29wcywKKwl9LAorCS8qIFNUIE1pY3JvIHZhcmlhbnRzICovCisJeworCQkuaWQgPSAweDAwMTgwMDMxLAorCQkubWFzayA9IDB4MDBmZmZmZmYsCisJCS5kYXRhID0gJnN0djFfcGwwMzFfb3BzLAorCX0sCisJeworCQkuaWQgPSAweDAwMjgwMDMxLAorCQkubWFzayA9IDB4MDBmZmZmZmYsCisJCS5kYXRhID0gJnN0djJfcGwwMzFfb3BzLAogCX0sCiAJezAsIDB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IDU5MDU5MzYuLjQ5NTFhYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgpAQCAtMTEyLDYgKzExMyw3IEBACiAJSU5JVF9XT1JLKCZkZXZpY2UtPnJlc3RvcmVfZGV2aWNlLCBkb19yZXN0b3JlX2RldmljZSk7CiAJZGV2aWNlLT5zdGF0ZSA9IERBU0RfU1RBVEVfTkVXOwogCWRldmljZS0+dGFyZ2V0ID0gREFTRF9TVEFURV9ORVc7CisJbXV0ZXhfaW5pdCgmZGV2aWNlLT5zdGF0ZV9tdXRleCk7CiAKIAlyZXR1cm4gZGV2aWNlOwogfQpAQCAtMzIxLDggKzMyMyw4IEBACiAJCQlkZXZpY2UtPnN0YXRlID0gREFTRF9TVEFURV9SRUFEWTsKIAkJCXJldHVybiByYzsKIAkJfQotCQlkYXNkX2Rlc3Ryb3lfcGFydGl0aW9ucyhibG9jayk7CiAJCWRhc2RfZmx1c2hfcmVxdWVzdF9xdWV1ZShibG9jayk7CisJCWRhc2RfZGVzdHJveV9wYXJ0aXRpb25zKGJsb2NrKTsKIAkJYmxvY2stPmJsb2NrcyA9IDA7CiAJCWJsb2NrLT5icF9ibG9jayA9IDA7CiAJCWJsb2NrLT5zMmJfc2hpZnQgPSAwOwpAQCAtNDg0LDEwICs0ODYsOCBAQAogCWlmIChyYykKIAkJZGV2aWNlLT50YXJnZXQgPSBkZXZpY2UtPnN0YXRlOwogCi0JaWYgKGRldmljZS0+c3RhdGUgPT0gZGV2aWNlLT50YXJnZXQpIHsKKwlpZiAoZGV2aWNlLT5zdGF0ZSA9PSBkZXZpY2UtPnRhcmdldCkKIAkJd2FrZV91cCgmZGFzZF9pbml0X3dhaXRxKTsKLQkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7Ci0JfQogCiAJLyogbGV0IHVzZXItc3BhY2Uga25vdyB0aGF0IHRoZSBkZXZpY2Ugc3RhdHVzIGNoYW5nZWQgKi8KIAlrb2JqZWN0X3VldmVudCgmZGV2aWNlLT5jZGV2LT5kZXYua29iaiwgS09CSl9DSEFOR0UpOwpAQCAtNTAyLDcgKzUwMiw5IEBACiBzdGF0aWMgdm9pZCBkb19raWNrX2RldmljZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRhc2RfZGV2aWNlLCBraWNrX3dvcmspOworCW11dGV4X2xvY2soJmRldmljZS0+c3RhdGVfbXV0ZXgpOwogCWRhc2RfY2hhbmdlX3N0YXRlKGRldmljZSk7CisJbXV0ZXhfdW5sb2NrKCZkZXZpY2UtPnN0YXRlX211dGV4KTsKIAlkYXNkX3NjaGVkdWxlX2RldmljZV9iaChkZXZpY2UpOwogCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwogfQpAQCAtNTM5LDE4ICs1NDEsMTkgQEAKIHZvaWQgZGFzZF9zZXRfdGFyZ2V0X3N0YXRlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLCBpbnQgdGFyZ2V0KQogewogCWRhc2RfZ2V0X2RldmljZShkZXZpY2UpOworCW11dGV4X2xvY2soJmRldmljZS0+c3RhdGVfbXV0ZXgpOwogCS8qIElmIHdlIGFyZSBpbiBwcm9iZW9ubHkgbW9kZSBzdG9wIGF0IERBU0RfU1RBVEVfUkVBRFkuICovCiAJaWYgKGRhc2RfcHJvYmVvbmx5ICYmIHRhcmdldCA+IERBU0RfU1RBVEVfUkVBRFkpCiAJCXRhcmdldCA9IERBU0RfU1RBVEVfUkVBRFk7CiAJaWYgKGRldmljZS0+dGFyZ2V0ICE9IHRhcmdldCkgewotCQlpZiAoZGV2aWNlLT5zdGF0ZSA9PSB0YXJnZXQpIHsKKwkJaWYgKGRldmljZS0+c3RhdGUgPT0gdGFyZ2V0KQogCQkJd2FrZV91cCgmZGFzZF9pbml0X3dhaXRxKTsKLQkJCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwotCQl9CiAJCWRldmljZS0+dGFyZ2V0ID0gdGFyZ2V0OwogCX0KIAlpZiAoZGV2aWNlLT5zdGF0ZSAhPSBkZXZpY2UtPnRhcmdldCkKIAkJZGFzZF9jaGFuZ2Vfc3RhdGUoZGV2aWNlKTsKKwltdXRleF91bmxvY2soJmRldmljZS0+c3RhdGVfbXV0ZXgpOworCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwogfQogCiAvKgpAQCAtMTAwMCwxMiArMTAwMywyMCBAQAogCQlyZXR1cm47CiAJfQogCi0JZGV2aWNlID0gKHN0cnVjdCBkYXNkX2RldmljZSAqKSBjcXItPnN0YXJ0ZGV2OwotCWlmIChkZXZpY2UgPT0gTlVMTCB8fAotCSAgICBkZXZpY2UgIT0gZGFzZF9kZXZpY2VfZnJvbV9jZGV2X2xvY2tlZChjZGV2KSB8fAotCSAgICBzdHJuY21wKGRldmljZS0+ZGlzY2lwbGluZS0+ZWJjbmFtZSwgKGNoYXIgKikgJmNxci0+bWFnaWMsIDQpKSB7CisJZGV2aWNlID0gZGFzZF9kZXZpY2VfZnJvbV9jZGV2X2xvY2tlZChjZGV2KTsKKwlpZiAoSVNfRVJSKGRldmljZSkpIHsKKwkJREJGX0VWRU5UX0RFVklEKERCRl9ERUJVRywgY2RldiwgIiVzIiwKKwkJCQkidW5hYmxlIHRvIGdldCBkZXZpY2UgZnJvbSBjZGV2Iik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWNxci0+c3RhcnRkZXYgfHwKKwkgICAgZGV2aWNlICE9IGNxci0+c3RhcnRkZXYgfHwKKwkgICAgc3RybmNtcChjcXItPnN0YXJ0ZGV2LT5kaXNjaXBsaW5lLT5lYmNuYW1lLAorCQkgICAgKGNoYXIgKikgJmNxci0+bWFnaWMsIDQpKSB7CiAJCURCRl9FVkVOVF9ERVZJRChEQkZfREVCVUcsIGNkZXYsICIlcyIsCiAJCQkJImludmFsaWQgZGV2aWNlIGluIHJlcXVlc3QiKTsKKwkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE2OTIsNyArMTcwMyw2IEBACiAJCQkJY3FyLCByYyk7CiAJCX0gZWxzZSB7CiAJCQljcXItPnN0b3BjbGsgPSBnZXRfY2xvY2soKTsKLQkJCXJjID0gMTsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OiAvKiBhbHJlYWR5IGZpbmlzaGVkIG9yIGNsZWFyIHBlbmRpbmcgLSBkbyBub3RoaW5nICovCkBAIC0yMTI5LDkgKzIxMzksOCBAQAogCiAJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShibG9jay0+cmVxdWVzdF9xdWV1ZSwgYmxvY2stPmJwX2Jsb2NrKTsKIAltYXggPSBibG9jay0+YmFzZS0+ZGlzY2lwbGluZS0+bWF4X2Jsb2NrcyA8PCBibG9jay0+czJiX3NoaWZ0OwotCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhibG9jay0+cmVxdWVzdF9xdWV1ZSwgbWF4KTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMoYmxvY2stPnJlcXVlc3RfcXVldWUsIC0xTCk7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhibG9jay0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoYmxvY2stPnJlcXVlc3RfcXVldWUsIG1heCk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhibG9jay0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKIAkvKiB3aXRoIHBhZ2Ugc2l6ZWQgc2VnbWVudHMgd2UgY2FuIHRyYW5zbGF0ZSBlYWNoIHNlZ2VtZW50IGludG8KIAkgKiBvbmUgaWRhdy90aWRhdwogCSAqLwpAQCAtMjE3MCw5ICsyMTc5LDEzIEBACiBzdGF0aWMgaW50IGRhc2Rfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZSA9IGJsb2NrLT5iYXNlOworCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZTsKIAlpbnQgcmM7CiAKKwlpZiAoIWJsb2NrKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWJhc2UgPSBibG9jay0+YmFzZTsKIAlhdG9taWNfaW5jKCZibG9jay0+b3Blbl9jb3VudCk7CiAJaWYgKHRlc3RfYml0KERBU0RfRkxBR19PRkZMSU5FLCAmYmFzZS0+ZmxhZ3MpKSB7CiAJCXJjID0gLUVOT0RFVjsKQEAgLTIyODUsMTEgKzIyOTgsNiBAQAogCWlmIChyZXQpCiAJCXByX3dhcm5pbmcoIiVzOiBTZXR0aW5nIHRoZSBEQVNEIG9ubGluZSBmYWlsZWQgd2l0aCByYz0lZFxuIiwKIAkJCSAgIGRldl9uYW1lKCZjZGV2LT5kZXYpLCByZXQpOwotCWVsc2UgewotCQlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGRhc2RfZGV2aWNlX2Zyb21fY2RldihjZGV2KTsKLQkJd2FpdF9ldmVudChkYXNkX2luaXRfd2FpdHEsIF93YWl0X2Zvcl9kZXZpY2UoZGV2aWNlKSk7Ci0JCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOwotCX0KIH0KIAogLyoKQEAgLTI0MjQsNiArMjQzMiw5IEBACiAJfSBlbHNlCiAJCXByX2RlYnVnKCJkYXNkX2dlbmVyaWMgZGV2aWNlICVzIGZvdW5kXG4iLAogCQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpKTsKKworCXdhaXRfZXZlbnQoZGFzZF9pbml0X3dhaXRxLCBfd2FpdF9mb3JfZGV2aWNlKGRldmljZSkpOworCiAJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwppbmRleCA0Y2FjNWI1Li5kNDk3NjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwpAQCAtODc0LDEyICs4NzQsMTkgQEAKIAlzc2l6ZV90IGxlbjsKIAogCWRldmljZSA9IGRhc2RfZGV2aWNlX2Zyb21fY2Rldih0b19jY3dkZXYoZGV2KSk7Ci0JaWYgKCFJU19FUlIoZGV2aWNlKSAmJiBkZXZpY2UtPmRpc2NpcGxpbmUpIHsKKwlpZiAoSVNfRVJSKGRldmljZSkpCisJCWdvdG8gb3V0OworCWVsc2UgaWYgKCFkZXZpY2UtPmRpc2NpcGxpbmUpIHsKKwkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CisJCWdvdG8gb3V0OworCX0gZWxzZSB7CiAJCWxlbiA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsCiAJCQkgICAgICAgZGV2aWNlLT5kaXNjaXBsaW5lLT5uYW1lKTsKIAkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7Ci0JfSBlbHNlCi0JCWxlbiA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAibm9uZVxuIik7CisJCXJldHVybiBsZW47CisJfQorb3V0OgorCWxlbiA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAibm9uZVxuIik7CiAJcmV0dXJuIGxlbjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKaW5kZXggZDMxOTgzMC4uOTRmOTJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCkBAIC04OCw2ICs4OCw3IEBACiAJaWYgKGJsb2NrLT5nZHApIHsKIAkJZGVsX2dlbmRpc2soYmxvY2stPmdkcCk7CiAJCWJsb2NrLT5nZHAtPnF1ZXVlID0gTlVMTDsKKwkJYmxvY2stPmdkcC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIAkJcHV0X2Rpc2soYmxvY2stPmdkcCk7CiAJCWJsb2NrLT5nZHAgPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKaW5kZXggZTRjMjE0My4uZWQ3M2NlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKQEAgLTM2OCw2ICszNjgsNyBAQAogCiAJLyogRGV2aWNlIHN0YXRlIGFuZCB0YXJnZXQgc3RhdGUuICovCiAJaW50IHN0YXRlLCB0YXJnZXQ7CisJc3RydWN0IG11dGV4IHN0YXRlX211dGV4OwogCWludCBzdG9wcGVkOwkJLyogZGV2aWNlIChjY3dfZGV2aWNlX3N0YXJ0KSB3YXMgc3RvcHBlZCAqLwogCiAJLyogcmVmZXJlbmNlIGNvdW50LiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCmluZGV4IDcxZjk1ZjUuLmYxM2EwYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKQEAgLTE2NSw1MSArMTY1LDMyIEBACiAJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBpbnQKLWRhc2RfY2FsY19tZXRyaWNzKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkgIGludCBjb3VudCwgaW50ICplb2YsIGludCBsZW4pCi17Ci0JbGVuID0gKGxlbiA+IG9mZikgPyBsZW4gLSBvZmYgOiAwOwotCWlmIChsZW4gPiBjb3VudCkKLQkJbGVuID0gY291bnQ7Ci0JaWYgKGxlbiA8IGNvdW50KQotCQkqZW9mID0gMTsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCXJldHVybiBsZW47Ci19Ci0KICNpZmRlZiBDT05GSUdfREFTRF9QUk9GSUxFCi1zdGF0aWMgY2hhciAqCi1kYXNkX3N0YXRpc3RpY3NfYXJyYXkoY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgKmFycmF5LCBpbnQgZmFjdG9yKQorc3RhdGljIHZvaWQgZGFzZF9zdGF0aXN0aWNzX2FycmF5KHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgaW50ICphcnJheSwgaW50IGZhY3RvcikKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCXN0ciArPSBzcHJpbnRmKHN0ciwgIiU3ZCAiLCBhcnJheVtpXSAvIGZhY3Rvcik7CisJCXNlcV9wcmludGYobSwgIiU3ZCAiLCBhcnJheVtpXSAvIGZhY3Rvcik7CiAJCWlmIChpID09IDE1KQotCQkJc3RyICs9IHNwcmludGYoc3RyLCAiXG4iKTsKKwkJCXNlcV9wdXRjKG0sICdcbicpOwogCX0KLQlzdHIgKz0gc3ByaW50ZihzdHIsIlxuIik7Ci0JcmV0dXJuIHN0cjsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfREFTRF9QUk9GSUxFICovCiAKLXN0YXRpYyBpbnQKLWRhc2Rfc3RhdGlzdGljc19yZWFkKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkgICAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGRhc2Rfc3RhdHNfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQl1bnNpZ25lZCBsb25nIGxlbjsKICNpZmRlZiBDT05GSUdfREFTRF9QUk9GSUxFCiAJc3RydWN0IGRhc2RfcHJvZmlsZV9pbmZvX3QgKnByb2Y7Ci0JY2hhciAqc3RyOwogCWludCBmYWN0b3I7CiAKIAkvKiBjaGVjayBmb3IgYWN0aXZlIHByb2ZpbGluZyAqLwogCWlmIChkYXNkX3Byb2ZpbGVfbGV2ZWwgPT0gREFTRF9QUk9GSUxFX09GRikgewotCQlsZW4gPSBzcHJpbnRmKHBhZ2UsICJTdGF0aXN0aWNzIGFyZSBvZmYgLSB0aGV5IG1pZ2h0IGJlICIKKwkJc2VxX3ByaW50ZihtLCAiU3RhdGlzdGljcyBhcmUgb2ZmIC0gdGhleSBtaWdodCBiZSAiCiAJCQkJICAgICJzd2l0Y2hlZCBvbiB1c2luZyAnZWNobyBzZXQgb24gPiAiCiAJCQkJICAgICIvcHJvYy9kYXNkL3N0YXRpc3RpY3MnXG4iKTsKLQkJcmV0dXJuIGRhc2RfY2FsY19tZXRyaWNzKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7CisJCXJldHVybiAwOwogCX0KIAogCXByb2YgPSAmZGFzZF9nbG9iYWxfcHJvZmlsZTsKQEAgLTIxNyw0NyArMTk4LDQ5IEBACiAJZm9yIChmYWN0b3IgPSAxOyAocHJvZi0+ZGFzZF9pb19yZXFzIC8gZmFjdG9yKSA+IDk5OTk5OTk7CiAJICAgICBmYWN0b3IgKj0gMTApOwogCi0Jc3RyID0gcGFnZTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICIlZCBkYXNkIEkvTyByZXF1ZXN0c1xuIiwgcHJvZi0+ZGFzZF9pb19yZXFzKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICJ3aXRoICV1IHNlY3RvcnMoNTEyQiBlYWNoKVxuIiwKKwlzZXFfcHJpbnRmKG0sICIlZCBkYXNkIEkvTyByZXF1ZXN0c1xuIiwgcHJvZi0+ZGFzZF9pb19yZXFzKTsKKwlzZXFfcHJpbnRmKG0sICJ3aXRoICV1IHNlY3RvcnMoNTEyQiBlYWNoKVxuIiwKIAkJICAgICAgIHByb2YtPmRhc2RfaW9fc2VjdHMpOwotCXN0ciArPSBzcHJpbnRmKHN0ciwgIlNjYWxlIEZhY3RvciBpcyAgJWRcbiIsIGZhY3Rvcik7Ci0Jc3RyICs9IHNwcmludGYoc3RyLAorCXNlcV9wcmludGYobSwgIlNjYWxlIEZhY3RvciBpcyAgJWRcbiIsIGZhY3Rvcik7CisJc2VxX3ByaW50ZihtLAogCQkgICAgICAgIiAgIF9fPDQJICAgX19fOAkgICBfXzE2CSAgIF9fMzIJICAgX182NAkgICBfMTI4CSIKIAkJICAgICAgICIgICBfMjU2CSAgIF81MTIJICAgX18xawkgICBfXzJrCSAgIF9fNGsJICAgX184awkiCiAJCSAgICAgICAiICAgXzE2awkgICBfMzJrCSAgIF82NGsJICAgMTI4a1xuIik7Ci0Jc3RyICs9IHNwcmludGYoc3RyLAorCXNlcV9wcmludGYobSwKIAkJICAgICAgICIgICBfMjU2CSAgIF81MTIJICAgX18xTQkgICBfXzJNCSAgIF9fNE0JICAgX184TQkiCiAJCSAgICAgICAiICAgXzE2TQkgICBfMzJNCSAgIF82NE0JICAgMTI4TQkgICAyNTZNCSAgIDUxMk0JIgogCQkgICAgICAgIiAgIF9fMUcJICAgX18yRwkgICBfXzRHICIgIiAgIF8+NEdcbiIpOwogCi0Jc3RyICs9IHNwcmludGYoc3RyLCAiSGlzdG9ncmFtIG9mIHNpemVzICg1MTJCIHNlY3MpXG4iKTsKLQlzdHIgPSBkYXNkX3N0YXRpc3RpY3NfYXJyYXkoc3RyLCBwcm9mLT5kYXNkX2lvX3NlY3MsIGZhY3Rvcik7Ci0Jc3RyICs9IHNwcmludGYoc3RyLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lcyAobWljcm9zZWNvbmRzKVxuIik7Ci0Jc3RyID0gZGFzZF9zdGF0aXN0aWNzX2FycmF5KHN0ciwgcHJvZi0+ZGFzZF9pb190aW1lcywgZmFjdG9yKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICJIaXN0b2dyYW0gb2YgSS9PIHRpbWVzIHBlciBzZWN0b3JcbiIpOwotCXN0ciA9IGRhc2Rfc3RhdGlzdGljc19hcnJheShzdHIsIHByb2YtPmRhc2RfaW9fdGltcHMsIGZhY3Rvcik7Ci0Jc3RyICs9IHNwcmludGYoc3RyLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lIHRpbGwgc3NjaFxuIik7Ci0Jc3RyID0gZGFzZF9zdGF0aXN0aWNzX2FycmF5KHN0ciwgcHJvZi0+ZGFzZF9pb190aW1lMSwgZmFjdG9yKTsKLQlzdHIgKz0gc3ByaW50ZihzdHIsICJIaXN0b2dyYW0gb2YgSS9PIHRpbWUgYmV0d2VlbiBzc2NoIGFuZCBpcnFcbiIpOwotCXN0ciA9IGRhc2Rfc3RhdGlzdGljc19hcnJheShzdHIsIHByb2YtPmRhc2RfaW9fdGltZTIsIGZhY3Rvcik7Ci0Jc3RyICs9IHNwcmludGYoc3RyLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lIGJldHdlZW4gc3NjaCAiCisJc2VxX3ByaW50ZihtLCAiSGlzdG9ncmFtIG9mIHNpemVzICg1MTJCIHNlY3MpXG4iKTsKKwlkYXNkX3N0YXRpc3RpY3NfYXJyYXkobSwgcHJvZi0+ZGFzZF9pb19zZWNzLCBmYWN0b3IpOworCXNlcV9wcmludGYobSwgIkhpc3RvZ3JhbSBvZiBJL08gdGltZXMgKG1pY3Jvc2Vjb25kcylcbiIpOworCWRhc2Rfc3RhdGlzdGljc19hcnJheShtLCBwcm9mLT5kYXNkX2lvX3RpbWVzLCBmYWN0b3IpOworCXNlcV9wcmludGYobSwgIkhpc3RvZ3JhbSBvZiBJL08gdGltZXMgcGVyIHNlY3RvclxuIik7CisJZGFzZF9zdGF0aXN0aWNzX2FycmF5KG0sIHByb2YtPmRhc2RfaW9fdGltcHMsIGZhY3Rvcik7CisJc2VxX3ByaW50ZihtLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lIHRpbGwgc3NjaFxuIik7CisJZGFzZF9zdGF0aXN0aWNzX2FycmF5KG0sIHByb2YtPmRhc2RfaW9fdGltZTEsIGZhY3Rvcik7CisJc2VxX3ByaW50ZihtLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lIGJldHdlZW4gc3NjaCBhbmQgaXJxXG4iKTsKKwlkYXNkX3N0YXRpc3RpY3NfYXJyYXkobSwgcHJvZi0+ZGFzZF9pb190aW1lMiwgZmFjdG9yKTsKKwlzZXFfcHJpbnRmKG0sICJIaXN0b2dyYW0gb2YgSS9PIHRpbWUgYmV0d2VlbiBzc2NoICIKIAkJCSAgICAiYW5kIGlycSBwZXIgc2VjdG9yXG4iKTsKLQlzdHIgPSBkYXNkX3N0YXRpc3RpY3NfYXJyYXkoc3RyLCBwcm9mLT5kYXNkX2lvX3RpbWUycHMsIGZhY3Rvcik7Ci0Jc3RyICs9IHNwcmludGYoc3RyLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lIGJldHdlZW4gaXJxIGFuZCBlbmRcbiIpOwotCXN0ciA9IGRhc2Rfc3RhdGlzdGljc19hcnJheShzdHIsIHByb2YtPmRhc2RfaW9fdGltZTMsIGZhY3Rvcik7Ci0Jc3RyICs9IHNwcmludGYoc3RyLCAiIyBvZiByZXEgaW4gY2hhbnEgYXQgZW5xdWV1aW5nICgxLi4zMikgXG4iKTsKLQlzdHIgPSBkYXNkX3N0YXRpc3RpY3NfYXJyYXkoc3RyLCBwcm9mLT5kYXNkX2lvX25yX3JlcSwgZmFjdG9yKTsKLQlsZW4gPSBzdHIgLSBwYWdlOworCWRhc2Rfc3RhdGlzdGljc19hcnJheShtLCBwcm9mLT5kYXNkX2lvX3RpbWUycHMsIGZhY3Rvcik7CisJc2VxX3ByaW50ZihtLCAiSGlzdG9ncmFtIG9mIEkvTyB0aW1lIGJldHdlZW4gaXJxIGFuZCBlbmRcbiIpOworCWRhc2Rfc3RhdGlzdGljc19hcnJheShtLCBwcm9mLT5kYXNkX2lvX3RpbWUzLCBmYWN0b3IpOworCXNlcV9wcmludGYobSwgIiMgb2YgcmVxIGluIGNoYW5xIGF0IGVucXVldWluZyAoMS4uMzIpIFxuIik7CisJZGFzZF9zdGF0aXN0aWNzX2FycmF5KG0sIHByb2YtPmRhc2RfaW9fbnJfcmVxLCBmYWN0b3IpOwogI2Vsc2UKLQlsZW4gPSBzcHJpbnRmKHBhZ2UsICJTdGF0aXN0aWNzIGFyZSBub3QgYWN0aXZhdGVkIGluIHRoaXMga2VybmVsXG4iKTsKKwlzZXFfcHJpbnRmKG0sICJTdGF0aXN0aWNzIGFyZSBub3QgYWN0aXZhdGVkIGluIHRoaXMga2VybmVsXG4iKTsKICNlbmRpZgotCXJldHVybiBkYXNkX2NhbGNfbWV0cmljcyhwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1kYXNkX3N0YXRpc3RpY3Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJICAgICAgdW5zaWduZWQgbG9uZyB1c2VyX2xlbiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgZGFzZF9zdGF0c19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRhc2Rfc3RhdHNfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHNzaXplX3QgZGFzZF9zdGF0c19wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQljb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsIHNpemVfdCB1c2VyX2xlbiwgbG9mZl90ICpwb3MpCiB7CiAjaWZkZWYgQ09ORklHX0RBU0RfUFJPRklMRQogCWNoYXIgKmJ1ZmZlciwgKnN0cjsKQEAgLTMwOCw2ICsyOTEsMTUgQEAKICNlbmRpZgkJCQkvKiBDT05GSUdfREFTRF9QUk9GSUxFICovCiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRhc2Rfc3RhdHNfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBkYXNkX3N0YXRzX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBkYXNkX3N0YXRzX3Byb2Nfd3JpdGUsCit9OworCiAvKgogICogQ3JlYXRlIGRhc2QgcHJvYy1mcyBlbnRyaWVzLgogICogSW4gY2FzZSBjcmVhdGlvbiBmYWlsZWQsIGNsZWFudXAgYW5kIHJldHVybiAtRU5PRU5ULgpAQCAtMzI0LDEzICszMTYsMTIgQEAKIAkJCQkJICZkYXNkX2RldmljZXNfZmlsZV9vcHMpOwogCWlmICghZGFzZF9kZXZpY2VzX2VudHJ5KQogCQlnb3RvIG91dF9ub2RldmljZXM7Ci0JZGFzZF9zdGF0aXN0aWNzX2VudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoInN0YXRpc3RpY3MiLAotCQkJCQkJICBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCQkJCQkgIGRhc2RfcHJvY19yb290X2VudHJ5KTsKKwlkYXNkX3N0YXRpc3RpY3NfZW50cnkgPSBwcm9jX2NyZWF0ZSgic3RhdGlzdGljcyIsCisJCQkJCSAgICBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkJCSAgICBkYXNkX3Byb2Nfcm9vdF9lbnRyeSwKKwkJCQkJICAgICZkYXNkX3N0YXRzX3Byb2NfZm9wcyk7CiAJaWYgKCFkYXNkX3N0YXRpc3RpY3NfZW50cnkpCiAJCWdvdG8gb3V0X25vc3RhdGlzdGljczsKLQlkYXNkX3N0YXRpc3RpY3NfZW50cnktPnJlYWRfcHJvYyA9IGRhc2Rfc3RhdGlzdGljc19yZWFkOwotCWRhc2Rfc3RhdGlzdGljc19lbnRyeS0+d3JpdGVfcHJvYyA9IGRhc2Rfc3RhdGlzdGljc193cml0ZTsKIAlyZXR1cm4gMDsKIAogIG91dF9ub3N0YXRpc3RpY3M6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKaW5kZXggOGQzZDcyMC4uMDk3ZGE4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwpAQCAtMjIyLDkgKzIyMiw4IEBACiAJCWdvdG8gY2xlYW51cF9xdWV1ZTsKIAogCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoYmxrZGF0LT5yZXF1ZXN0X3F1ZXVlLCBUQVBFQkxPQ0tfSFNFQ19TSVpFKTsKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMoYmxrZGF0LT5yZXF1ZXN0X3F1ZXVlLCBUQVBFQkxPQ0tfTUFYX1NFQyk7Ci0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKGJsa2RhdC0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKLQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKGJsa2RhdC0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoYmxrZGF0LT5yZXF1ZXN0X3F1ZXVlLCBUQVBFQkxPQ0tfTUFYX1NFQyk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhibGtkYXQtPnJlcXVlc3RfcXVldWUsIC0xTCk7CiAJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoYmxrZGF0LT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOwogCWJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5KGJsa2RhdC0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMKaW5kZXggODJkYWEzYy4uMzQzODY1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL2lwbC5oPgogI2luY2x1ZGUgPGFzbS9zY2xwLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC00MCwxMiArNDEsMTIgQEAKIC8qIGR1bXAgc3lzdGVtIGluZm8gKi8KIAogc3RydWN0IHN5c19pbmZvIHsKLQllbnVtIGFyY2hfaWQJYXJjaDsKLQl1bnNpZ25lZCBsb25nCXNhX2Jhc2U7Ci0JdTMyCQlzYV9zaXplOwotCWludAkJY3B1X21hcFtOUl9DUFVTXTsKLQl1bnNpZ25lZCBsb25nCW1lbV9zaXplOwotCXVuaW9uIHNhdmVfYXJlYQlsY19tYXNrOworCWVudW0gYXJjaF9pZAkgYXJjaDsKKwl1bnNpZ25lZCBsb25nCSBzYV9iYXNlOworCXUzMgkJIHNhX3NpemU7CisJaW50CQkgY3B1X21hcFtOUl9DUFVTXTsKKwl1bnNpZ25lZCBsb25nCSBtZW1fc2l6ZTsKKwlzdHJ1Y3Qgc2F2ZV9hcmVhIGxjX21hc2s7CiB9OwogCiBzdHJ1Y3QgaXBpYl9pbmZvIHsKQEAgLTE4Myw1MiArMTg0LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIF9fczM5MHhfXwotLyoKLSAqIENvbnZlcnQgczM5MHggKDY0IGJpdCkgY3B1IGluZm8gdG8gczM5MCAoMzIgYml0KSBjcHUgaW5mbwotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgczM5MHhfdG9fczM5MF9yZWdzKHVuaW9uIHNhdmVfYXJlYSAqb3V0LCB1bmlvbiBzYXZlX2FyZWEgKmluLAotCQkJCSAgICAgIGludCBjcHUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQlvdXQtPnMzOTAuZ3BfcmVnc1tpXSA9IGluLT5zMzkweC5ncF9yZWdzW2ldICYgMHgwMDAwMDAwMGZmZmZmZmZmOwotCQlvdXQtPnMzOTAuYWNjX3JlZ3NbaV0gPSBpbi0+czM5MHguYWNjX3JlZ3NbaV07Ci0JCW91dC0+czM5MC5jdHJsX3JlZ3NbaV0gPQotCQkJaW4tPnMzOTB4LmN0cmxfcmVnc1tpXSAmIDB4MDAwMDAwMDBmZmZmZmZmZjsKLQl9Ci0JLyogbG9jb3JlIGZvciAzMSBiaXQgaGFzIG9ubHkgc3BhY2UgZm9yIGZwcmVncyAwLDIsNCw2ICovCi0Jb3V0LT5zMzkwLmZwX3JlZ3NbMF0gPSBpbi0+czM5MHguZnBfcmVnc1swXTsKLQlvdXQtPnMzOTAuZnBfcmVnc1sxXSA9IGluLT5zMzkweC5mcF9yZWdzWzJdOwotCW91dC0+czM5MC5mcF9yZWdzWzJdID0gaW4tPnMzOTB4LmZwX3JlZ3NbNF07Ci0Jb3V0LT5zMzkwLmZwX3JlZ3NbM10gPSBpbi0+czM5MHguZnBfcmVnc1s2XTsKLQltZW1jcHkoJihvdXQtPnMzOTAucHN3WzBdKSwgJihpbi0+czM5MHgucHN3WzBdKSwgNCk7Ci0Jb3V0LT5zMzkwLnBzd1sxXSB8PSAweDg7IC8qIHNldCBiaXQgMTIgKi8KLQltZW1jcHkoJihvdXQtPnMzOTAucHN3WzRdKSwmKGluLT5zMzkweC5wc3dbMTJdKSwgNCk7Ci0Jb3V0LT5zMzkwLnBzd1s0XSB8PSAweDgwOyAvKiBzZXQgKDMxYml0KSBhZGRyZXNzaW5nIGJpdCAqLwotCW91dC0+czM5MC5wcmVmX3JlZyA9IGluLT5zMzkweC5wcmVmX3JlZzsKLQlvdXQtPnMzOTAudGltZXIgPSBpbi0+czM5MHgudGltZXI7Ci0Jb3V0LT5zMzkwLmNsa19jbXAgPSBpbi0+czM5MHguY2xrX2NtcDsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHMzOTB4X3RvX3MzOTBfc2F2ZV9hcmVhcyh2b2lkKQotewotCWludCBpID0gMTsKLQlzdGF0aWMgdW5pb24gc2F2ZV9hcmVhIHRtcDsKLQotCXdoaWxlICh6ZmNwZHVtcF9zYXZlX2FyZWFzW2ldKSB7Ci0JCXMzOTB4X3RvX3MzOTBfcmVncygmdG1wLCB6ZmNwZHVtcF9zYXZlX2FyZWFzW2ldLCBpKTsKLQkJbWVtY3B5KHpmY3BkdW1wX3NhdmVfYXJlYXNbaV0sICZ0bXAsIHNpemVvZih0bXApKTsKLQkJaSsrOwotCX0KLX0KLQotI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2NwdV9pbmZvKGVudW0gYXJjaF9pZCBhcmNoKQogewotCXVuaW9uIHNhdmVfYXJlYSAqc2E7CisJc3RydWN0IHNhdmVfYXJlYSAqc2E7CiAKIAkvKiBnZXQgaW5mbyBmb3IgYm9vdCBjcHUgZnJvbSBsb3djb3JlLCBzdG9yZWQgaW4gdGhlIEhTQSAqLwogCkBAIC0yNDEsMjAgKzE5OSwxMiBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAJemZjcGR1bXBfc2F2ZV9hcmVhc1swXSA9IHNhOwotCi0jaWZkZWYgX19zMzkweF9fCi0JLyogY29udmVydCBzMzkweCByZWdzIHRvIHMzOTAsIGlmIHdlIGFyZSBkdW1waW5nIGFuIHMzOTAgTGludXggKi8KLQotCWlmIChhcmNoID09IEFSQ0hfUzM5MCkKLQkJczM5MHhfdG9fczM5MF9zYXZlX2FyZWFzKCk7Ci0jZW5kaWYKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgREVGSU5FX01VVEVYKHpjb3JlX211dGV4KTsKIAotI2RlZmluZSBEVU1QX1ZFUlNJT04JMHgzCisjZGVmaW5lIERVTVBfVkVSU0lPTgkweDUKICNkZWZpbmUgRFVNUF9NQUdJQwkweGE4MTkwMTczNjE4ZjIzZmRVTEwKICNkZWZpbmUgRFVNUF9BUkNIX1MzOTBYCTIKICNkZWZpbmUgRFVNUF9BUkNIX1MzOTAJMQpAQCAtMjc5LDcgKzIyOSwxNCBAQAogCXUzMiB2b2xucjsKIAl1MzIgYnVpbGRfYXJjaDsKIAl1NjQgcm1lbV9zaXplOwotCWNoYXIgcGFkMls0MDE2XTsKKwl1OCBtdmR1bXA7CisJdTE2IGNwdV9jbnQ7CisJdTE2IHJlYWxfY3B1X2NudDsKKwl1OCBlbmRfcGFkMVsweDIwMC0weDA2MV07CisJdTY0IG12ZHVtcF9zaWduOworCXU2NCBtdmR1bXBfemlwbF90aW1lOworCXU4IGVuZF9wYWQyWzB4ODAwLTB4MjEwXTsKKwl1MzIgbGNfdmVjWzUxMl07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCxfX2FsaWduZWRfXygxNikpKTsKIAogc3RhdGljIHN0cnVjdCB6Y29yZV9oZWFkZXIgemNvcmVfaGVhZGVyID0gewpAQCAtMjg5LDcgKzI0Niw3IEBACiAJLmR1bXBfbGV2ZWwJPSAwLAogCS5wYWdlX3NpemUJPSBQQUdFX1NJWkUsCiAJLm1lbV9zdGFydAk9IDAsCi0jaWZkZWYgX19zMzkweF9fCisjaWZkZWYgQ09ORklHXzY0QklUCiAJLmJ1aWxkX2FyY2gJPSBEVU1QX0FSQ0hfUzM5MFgsCiAjZWxzZQogCS5idWlsZF9hcmNoCT0gRFVNUF9BUkNIX1MzOTAsCkBAIC0zNDAsMTEgKzI5Nyw3IEBACiAJCXVuc2lnbmVkIGxvbmcgcHJlZml4OwogCQl1bnNpZ25lZCBsb25nIHNhX29mZiwgbGVuLCBidWZfb2ZmOwogCi0JCWlmIChzeXNfaW5mby5hcmNoID09IEFSQ0hfUzM5MCkKLQkJCXByZWZpeCA9IHpmY3BkdW1wX3NhdmVfYXJlYXNbaV0tPnMzOTAucHJlZl9yZWc7Ci0JCWVsc2UKLQkJCXByZWZpeCA9IHpmY3BkdW1wX3NhdmVfYXJlYXNbaV0tPnMzOTB4LnByZWZfcmVnOwotCisJCXByZWZpeCA9IHpmY3BkdW1wX3NhdmVfYXJlYXNbaV0tPnByZWZfcmVnOwogCQlzYV9zdGFydCA9IHByZWZpeCArIHN5c19pbmZvLnNhX2Jhc2U7CiAJCXNhX2VuZCA9IHByZWZpeCArIHN5c19pbmZvLnNhX2Jhc2UgKyBzeXNfaW5mby5zYV9zaXplOwogCkBAIC01NjEsMzQgKzUxNCwzOSBAQAogCS5yZWxlYXNlCT0gemNvcmVfcmVpcGxfcmVsZWFzZSwKIH07CiAKKyNpZmRlZiBDT05GSUdfMzJCSVQKIAotc3RhdGljIHZvaWQgX19pbml0IHNldF9zMzkwX2xjX21hc2sodW5pb24gc2F2ZV9hcmVhICptYXApCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0X2xjX21hc2soc3RydWN0IHNhdmVfYXJlYSAqbWFwKQogewotCW1lbXNldCgmbWFwLT5zMzkwLmV4dF9zYXZlLCAweGZmLCBzaXplb2YobWFwLT5zMzkwLmV4dF9zYXZlKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTAudGltZXIsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAudGltZXIpKTsKLQltZW1zZXQoJm1hcC0+czM5MC5jbGtfY21wLCAweGZmLCBzaXplb2YobWFwLT5zMzkwLmNsa19jbXApKTsKLQltZW1zZXQoJm1hcC0+czM5MC5wc3csIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAucHN3KSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTAucHJlZl9yZWcsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAucHJlZl9yZWcpKTsKLQltZW1zZXQoJm1hcC0+czM5MC5hY2NfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MC5hY2NfcmVncykpOwotCW1lbXNldCgmbWFwLT5zMzkwLmZwX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAuZnBfcmVncykpOwotCW1lbXNldCgmbWFwLT5zMzkwLmdwX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTAuZ3BfcmVncykpOwotCW1lbXNldCgmbWFwLT5zMzkwLmN0cmxfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+czM5MC5jdHJsX3JlZ3MpKTsKKwltZW1zZXQoJm1hcC0+ZXh0X3NhdmUsIDB4ZmYsIHNpemVvZihtYXAtPmV4dF9zYXZlKSk7CisJbWVtc2V0KCZtYXAtPnRpbWVyLCAweGZmLCBzaXplb2YobWFwLT50aW1lcikpOworCW1lbXNldCgmbWFwLT5jbGtfY21wLCAweGZmLCBzaXplb2YobWFwLT5jbGtfY21wKSk7CisJbWVtc2V0KCZtYXAtPnBzdywgMHhmZiwgc2l6ZW9mKG1hcC0+cHN3KSk7CisJbWVtc2V0KCZtYXAtPnByZWZfcmVnLCAweGZmLCBzaXplb2YobWFwLT5wcmVmX3JlZykpOworCW1lbXNldCgmbWFwLT5hY2NfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+YWNjX3JlZ3MpKTsKKwltZW1zZXQoJm1hcC0+ZnBfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+ZnBfcmVncykpOworCW1lbXNldCgmbWFwLT5ncF9yZWdzLCAweGZmLCBzaXplb2YobWFwLT5ncF9yZWdzKSk7CisJbWVtc2V0KCZtYXAtPmN0cmxfcmVncywgMHhmZiwgc2l6ZW9mKG1hcC0+Y3RybF9yZWdzKSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzZXRfczM5MHhfbGNfbWFzayh1bmlvbiBzYXZlX2FyZWEgKm1hcCkKKyNlbHNlIC8qIENPTkZJR18zMkJJVCAqLworCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0X2xjX21hc2soc3RydWN0IHNhdmVfYXJlYSAqbWFwKQogewotCW1lbXNldCgmbWFwLT5zMzkweC5mcF9yZWdzLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC5mcF9yZWdzKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTB4LmdwX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTB4LmdwX3JlZ3MpKTsKLQltZW1zZXQoJm1hcC0+czM5MHgucHN3LCAweGZmLCBzaXplb2YobWFwLT5zMzkweC5wc3cpKTsKLQltZW1zZXQoJm1hcC0+czM5MHgucHJlZl9yZWcsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTB4LnByZWZfcmVnKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTB4LmZwX2N0cmxfcmVnLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC5mcF9jdHJsX3JlZykpOwotCW1lbXNldCgmbWFwLT5zMzkweC50b2RfcmVnLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC50b2RfcmVnKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTB4LnRpbWVyLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC50aW1lcikpOwotCW1lbXNldCgmbWFwLT5zMzkweC5jbGtfY21wLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC5jbGtfY21wKSk7Ci0JbWVtc2V0KCZtYXAtPnMzOTB4LmFjY19yZWdzLCAweGZmLCBzaXplb2YobWFwLT5zMzkweC5hY2NfcmVncykpOwotCW1lbXNldCgmbWFwLT5zMzkweC5jdHJsX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPnMzOTB4LmN0cmxfcmVncykpOworCW1lbXNldCgmbWFwLT5mcF9yZWdzLCAweGZmLCBzaXplb2YobWFwLT5mcF9yZWdzKSk7CisJbWVtc2V0KCZtYXAtPmdwX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPmdwX3JlZ3MpKTsKKwltZW1zZXQoJm1hcC0+cHN3LCAweGZmLCBzaXplb2YobWFwLT5wc3cpKTsKKwltZW1zZXQoJm1hcC0+cHJlZl9yZWcsIDB4ZmYsIHNpemVvZihtYXAtPnByZWZfcmVnKSk7CisJbWVtc2V0KCZtYXAtPmZwX2N0cmxfcmVnLCAweGZmLCBzaXplb2YobWFwLT5mcF9jdHJsX3JlZykpOworCW1lbXNldCgmbWFwLT50b2RfcmVnLCAweGZmLCBzaXplb2YobWFwLT50b2RfcmVnKSk7CisJbWVtc2V0KCZtYXAtPnRpbWVyLCAweGZmLCBzaXplb2YobWFwLT50aW1lcikpOworCW1lbXNldCgmbWFwLT5jbGtfY21wLCAweGZmLCBzaXplb2YobWFwLT5jbGtfY21wKSk7CisJbWVtc2V0KCZtYXAtPmFjY19yZWdzLCAweGZmLCBzaXplb2YobWFwLT5hY2NfcmVncykpOworCW1lbXNldCgmbWFwLT5jdHJsX3JlZ3MsIDB4ZmYsIHNpemVvZihtYXAtPmN0cmxfcmVncykpOwogfQogCisjZW5kaWYgLyogQ09ORklHXzMyQklUICovCisKIC8qCiAgKiBJbml0aWFsaXplIGR1bXAgZ2xvYmFscyBmb3IgYSBnaXZlbiBhcmNoaXRlY3R1cmUKICAqLwpAQCAtNTk5LDIxICs1NTcsMTggQEAKIAlzd2l0Y2ggKGFyY2gpIHsKIAljYXNlIEFSQ0hfUzM5MFg6CiAJCXByX2FsZXJ0KCJERVRFQ1RFRCAnUzM5MFggKDY0IGJpdCkgT1MnXG4iKTsKLQkJc3lzX2luZm8uc2FfYmFzZSA9IFNBVkVfQVJFQV9CQVNFX1MzOTBYOwotCQlzeXNfaW5mby5zYV9zaXplID0gc2l6ZW9mKHN0cnVjdCBzYXZlX2FyZWFfczM5MHgpOwotCQlzZXRfczM5MHhfbGNfbWFzaygmc3lzX2luZm8ubGNfbWFzayk7CiAJCWJyZWFrOwogCWNhc2UgQVJDSF9TMzkwOgogCQlwcl9hbGVydCgiREVURUNURUQgJ1MzOTAgKDMyIGJpdCkgT1MnXG4iKTsKLQkJc3lzX2luZm8uc2FfYmFzZSA9IFNBVkVfQVJFQV9CQVNFX1MzOTA7Ci0JCXN5c19pbmZvLnNhX3NpemUgPSBzaXplb2Yoc3RydWN0IHNhdmVfYXJlYV9zMzkwKTsKLQkJc2V0X3MzOTBfbGNfbWFzaygmc3lzX2luZm8ubGNfbWFzayk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX2FsZXJ0KCIweCV4IGlzIGFuIHVua25vd24gYXJjaGl0ZWN0dXJlLlxuIixhcmNoKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCXN5c19pbmZvLnNhX2Jhc2UgPSBTQVZFX0FSRUFfQkFTRTsKKwlzeXNfaW5mby5zYV9zaXplID0gc2l6ZW9mKHN0cnVjdCBzYXZlX2FyZWEpOwogCXN5c19pbmZvLmFyY2ggPSBhcmNoOworCXNldF9sY19tYXNrKCZzeXNfaW5mby5sY19tYXNrKTsKIAlyYyA9IGluaXRfY3B1X2luZm8oYXJjaCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC02NjAsOCArNjE1LDkgQEAKIAogc3RhdGljIGludCBfX2luaXQgemNvcmVfaGVhZGVyX2luaXQoaW50IGFyY2gsIHN0cnVjdCB6Y29yZV9oZWFkZXIgKmhkcikKIHsKLQlpbnQgcmM7CisJaW50IHJjLCBpOwogCXVuc2lnbmVkIGxvbmcgbWVtb3J5ID0gMDsKKwl1MzIgcHJlZml4OwogCiAJaWYgKGFyY2ggPT0gQVJDSF9TMzkwWCkKIAkJaGRyLT5hcmNoX2lkID0gRFVNUF9BUkNIX1MzOTBYOwpAQCAtNjc2LDYgKzYzMiwxNCBAQAogCWhkci0+bnVtX3BhZ2VzID0gbWVtb3J5IC8gUEFHRV9TSVpFOwogCWhkci0+dG9kID0gZ2V0X2Nsb2NrKCk7CiAJZ2V0X2NwdV9pZCgmaGRyLT5jcHVfaWQpOworCWZvciAoaSA9IDA7IHpmY3BkdW1wX3NhdmVfYXJlYXNbaV07IGkrKykgeworCQlwcmVmaXggPSB6ZmNwZHVtcF9zYXZlX2FyZWFzW2ldLT5wcmVmX3JlZzsKKwkJaGRyLT5yZWFsX2NwdV9jbnQrKzsKKwkJaWYgKCFwcmVmaXgpCisJCQljb250aW51ZTsKKwkJaGRyLT5sY192ZWNbaGRyLT5jcHVfY250XSA9IHByZWZpeDsKKwkJaGRyLT5jcHVfY250Kys7CisJfQogCXJldHVybiAwOwogfQogCkBAIC03NDEsMTQgKzcwNSwyMSBAQAogCWlmIChyYykKIAkJZ290byBmYWlsOwogCi0jaWZuZGVmIF9fczM5MHhfXworI2lmZGVmIENPTkZJR182NEJJVAorCWlmIChhcmNoID09IEFSQ0hfUzM5MCkgeworCQlwcl9hbGVydCgiVGhlIDY0LWJpdCBkdW1wIHRvb2wgY2Fubm90IGJlIHVzZWQgZm9yIGEgIgorCQkJICIzMi1iaXQgc3lzdGVtXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGZhaWw7CisJfQorI2Vsc2UgLyogQ09ORklHXzY0QklUICovCiAJaWYgKGFyY2ggPT0gQVJDSF9TMzkwWCkgewogCQlwcl9hbGVydCgiVGhlIDMyLWJpdCBkdW1wIHRvb2wgY2Fubm90IGJlIHVzZWQgZm9yIGEgIgogCQkJICI2NC1iaXQgc3lzdGVtXG4iKTsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIGZhaWw7CiAJfQotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHXzY0QklUICovCiAKIAlyYyA9IHN5c19pbmZvX2luaXQoYXJjaCk7CiAJaWYgKHJjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMKaW5kZXggN2EyOGEzMC4uMzdkZjQyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jCkBAIC0yMjQsOCArMjI0LDggQEAKICAqLwogdm9pZCBjY3dfcmVxdWVzdF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogeworCXN0cnVjdCBpcmIgKmlyYiA9IChzdHJ1Y3QgaXJiICopJlMzOTBfbG93Y29yZS5pcmI7CiAJc3RydWN0IGNjd19yZXF1ZXN0ICpyZXEgPSAmY2Rldi0+cHJpdmF0ZS0+cmVxOwotCXN0cnVjdCBpcmIgKmlyYiA9IChzdHJ1Y3QgaXJiICopIF9fTENfSVJCOwogCWVudW0gaW9fc3RhdHVzIHN0YXR1czsKIAlpbnQgcmMgPSAtRU9QTk9UU1VQUDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYwppbmRleCAxZWNkM2U1Li40MDM4ZjViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMKQEAgLTU3NCw3ICs1NzQsNyBAQAogCXNlY21fYXJlYS0+cmVxdWVzdC5sZW5ndGggPSAweDAwNTA7CiAJc2VjbV9hcmVhLT5yZXF1ZXN0LmNvZGUgPSAweDAwMTY7CiAKLQlzZWNtX2FyZWEtPmtleSA9IFBBR0VfREVGQVVMVF9LRVk7CisJc2VjbV9hcmVhLT5rZXkgPSBQQUdFX0RFRkFVTFRfS0VZID4+IDQ7CiAJc2VjbV9hcmVhLT5jdWJfYWRkcjEgPSAodTY0KSh1bnNpZ25lZCBsb25nKWNzcy0+Y3ViX2FkZHIxOwogCXNlY21fYXJlYS0+Y3ViX2FkZHIyID0gKHU2NCkodW5zaWduZWQgbG9uZyljc3MtPmN1Yl9hZGRyMjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jCmluZGV4IGM4NGFjOTQuLjg1MjYxMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMKQEAgLTUxLDcgKzUxLDcgQEAKIHsKIAlzdHJ1Y3QgY2hzY19wcml2YXRlICpwcml2YXRlID0gc2NoLT5wcml2YXRlOwogCXN0cnVjdCBjaHNjX3JlcXVlc3QgKnJlcXVlc3QgPSBwcml2YXRlLT5yZXF1ZXN0OwotCXN0cnVjdCBpcmIgKmlyYiA9IChzdHJ1Y3QgaXJiICopX19MQ19JUkI7CisJc3RydWN0IGlyYiAqaXJiID0gKHN0cnVjdCBpcmIgKikmUzM5MF9sb3djb3JlLmlyYjsKIAogCUNIU0NfTE9HKDQsICJpcmIiKTsKIAlDSFNDX0xPR19IRVgoNCwgaXJiLCBzaXplb2YoKmlyYikpOwpAQCAtMjM3LDcgKzIzNyw3IEBACiAJaW50IHJldCA9IC1FTk9ERVY7CiAJY2hhciBkYmZbMTBdOwogCi0JY2hzY19hcmVhLT5oZWFkZXIua2V5ID0gUEFHRV9ERUZBVUxUX0tFWTsKKwljaHNjX2FyZWEtPmhlYWRlci5rZXkgPSBQQUdFX0RFRkFVTFRfS0VZID4+IDQ7CiAJd2hpbGUgKChzY2ggPSBjaHNjX2dldF9uZXh0X3N1YmNoYW5uZWwoc2NoKSkpIHsKIAkJc3Bpbl9sb2NrKHNjaC0+bG9jayk7CiAJCXByaXZhdGUgPSBzY2gtPnByaXZhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5jIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uYwppbmRleCAxMjZmMjQwLi5mNzM2Y2RjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKQEAgLTYyNSw4ICs2MjUsOCBAQAogCS8qCiAJICogR2V0IGludGVycnVwdCBpbmZvcm1hdGlvbiBmcm9tIGxvd2NvcmUKIAkgKi8KLQl0cGlfaW5mbyA9IChzdHJ1Y3QgdHBpX2luZm8gKikgX19MQ19TVUJDSEFOTkVMX0lEOwotCWlyYiA9IChzdHJ1Y3QgaXJiICopIF9fTENfSVJCOworCXRwaV9pbmZvID0gKHN0cnVjdCB0cGlfaW5mbyAqKSZTMzkwX2xvd2NvcmUuc3ViY2hhbm5lbF9pZDsKKwlpcmIgPSAoc3RydWN0IGlyYiAqKSZTMzkwX2xvd2NvcmUuaXJiOwogCWRvIHsKIAkJa3N0YXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkuaXJxc1tJT19JTlRFUlJVUFRdKys7CiAJCS8qCkBAIC02NjEsNyArNjYxLDcgQEAKIAkJICogV2UgZG9uJ3QgZG8gdGhpcyBmb3IgVk0gYmVjYXVzZSBhIHRwaSBkcm9wcyB0aGUgY3B1CiAJCSAqIG91dCBvZiB0aGUgc2llIHdoaWNoIGNvc3RzIG1vcmUgY3ljbGVzIHRoYW4gaXQgc2F2ZXMuCiAJCSAqLwotCX0gd2hpbGUgKCFNQUNISU5FX0lTX1ZNICYmIHRwaSAoTlVMTCkgIT0gMCk7CisJfSB3aGlsZSAoTUFDSElORV9JU19MUEFSICYmIHRwaShOVUxMKSAhPSAwKTsKIAlpcnFfZXhpdCgpOwogCXNldF9pcnFfcmVncyhvbGRfcmVncyk7CiB9CkBAIC02ODIsMTAgKzY4MiwxMCBAQAogCXN0cnVjdCBpcmIgKmlyYjsKIAlpbnQgaXJxX2NvbnRleHQ7CiAKLQl0cGlfaW5mbyA9IChzdHJ1Y3QgdHBpX2luZm8gKikgX19MQ19TVUJDSEFOTkVMX0lEOworCXRwaV9pbmZvID0gKHN0cnVjdCB0cGlfaW5mbyAqKSZTMzkwX2xvd2NvcmUuc3ViY2hhbm5lbF9pZDsKIAlpZiAodHBpKE5VTEwpICE9IDEpCiAJCXJldHVybiAwOwotCWlyYiA9IChzdHJ1Y3QgaXJiICopIF9fTENfSVJCOworCWlyYiA9IChzdHJ1Y3QgaXJiICopJlMzOTBfbG93Y29yZS5pcmI7CiAJLyogU3RvcmUgaW50ZXJydXB0IHJlc3BvbnNlIGJsb2NrIHRvIGxvd2NvcmUuICovCiAJaWYgKHRzY2godHBpX2luZm8tPnNjaGlkLCBpcmIpICE9IDApCiAJCS8qIE5vdCBzdGF0dXMgcGVuZGluZyBvciBub3Qgb3BlcmF0aW9uYWwuICovCkBAIC04ODUsNyArODg1LDcgQEAKIAkJc3RydWN0IHRwaV9pbmZvIHRpOwogCiAJCWlmICh0cGkoJnRpKSkgewotCQkJdHNjaCh0aS5zY2hpZCwgKHN0cnVjdCBpcmIgKilfX0xDX0lSQik7CisJCQl0c2NoKHRpLnNjaGlkLCAoc3RydWN0IGlyYiAqKSZTMzkwX2xvd2NvcmUuaXJiKTsKIAkJCWlmIChzY2hpZF9lcXVhbCgmdGkuc2NoaWQsICZzY2hpZCkpCiAJCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTEwODMsNyArMTA4Myw3IEBACiAJc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQ7CiAJc3RydWN0IHNjaGliIHNjaGliOwogCi0Jc2NoaWQgPSAqKHN0cnVjdCBzdWJjaGFubmVsX2lkICopX19MQ19TVUJDSEFOTkVMX0lEOworCXNjaGlkID0gKihzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCAqKSZTMzkwX2xvd2NvcmUuc3ViY2hhbm5lbF9pZDsKIAlpZiAoIXNjaGlkLm9uZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKHN0c2NoKHNjaGlkLCAmc2NoaWIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jcncuYyBiL2RyaXZlcnMvczM5MC9jaW8vY3J3LmMKaW5kZXggZDE1NzY2NS4uNDI1Zjc0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jcncuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Nydy5jCkBAIC04LDE1ICs4LDE2IEBACiAgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPiwKICAqLwogCi0jaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxhc20vY3J3Lmg+CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIGNyd19zZW1hcGhvcmU7CiBzdGF0aWMgREVGSU5FX01VVEVYKGNyd19oYW5kbGVyX211dGV4KTsKIHN0YXRpYyBjcndfaGFuZGxlcl90IGNyd19oYW5kbGVyc1tOUl9SU0NTXTsKK3N0YXRpYyBhdG9taWNfdCBjcndfbnJfcmVxID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoY3J3X2hhbmRsZXJfd2FpdF9xKTsKIAogLyoqCiAgKiBjcndfcmVnaXN0ZXJfaGFuZGxlcigpIC0gcmVnaXN0ZXIgYSBjaGFubmVsIHJlcG9ydCB3b3JkIGhhbmRsZXIKQEAgLTU5LDEyICs2MCwxNCBAQAogc3RhdGljIGludCBjcndfY29sbGVjdF9pbmZvKHZvaWQgKnVudXNlZCkKIHsKIAlzdHJ1Y3QgY3J3IGNyd1syXTsKLQlpbnQgY2NvZGU7CisJaW50IGNjb2RlLCBzaWduYWw7CiAJdW5zaWduZWQgaW50IGNoYWluOwotCWludCBpZ25vcmU7CiAKIHJlcGVhdDoKLQlpZ25vcmUgPSBkb3duX2ludGVycnVwdGlibGUoJmNyd19zZW1hcGhvcmUpOworCXNpZ25hbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjcndfaGFuZGxlcl93YWl0X3EsCisJCQkJCSAgYXRvbWljX3JlYWQoJmNyd19ucl9yZXEpID4gMCk7CisJaWYgKHVubGlrZWx5KHNpZ25hbCkpCisJCWF0b21pY19pbmMoJmNyd19ucl9yZXEpOwogCWNoYWluID0gMDsKIAl3aGlsZSAoMSkgewogCQljcndfaGFuZGxlcl90IGhhbmRsZXI7CkBAIC0xMjIsMjUgKzEyNSwyMyBAQAogCQkvKiBjaGFpbiBpcyBhbHdheXMgMCBvciAxIGhlcmUuICovCiAJCWNoYWluID0gY3J3W2NoYWluXS5jaG4gPyBjaGFpbiArIDEgOiAwOwogCX0KKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY3J3X25yX3JlcSkpCisJCXdha2VfdXAoJmNyd19oYW5kbGVyX3dhaXRfcSk7CiAJZ290byByZXBlYXQ7CiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQgY3J3X2hhbmRsZV9jaGFubmVsX3JlcG9ydCh2b2lkKQogewotCXVwKCZjcndfc2VtYXBob3JlKTsKKwlhdG9taWNfaW5jKCZjcndfbnJfcmVxKTsKKwl3YWtlX3VwKCZjcndfaGFuZGxlcl93YWl0X3EpOwogfQogCi0vKgotICogU2VwYXJhdGUgaW5pdGNhbGwgbmVlZGVkIGZvciBzZW1hcGhvcmUgaW5pdGlhbGl6YXRpb24gc2luY2UKLSAqIGNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQgbWlnaHQgYmUgY2FsbGVkIGJlZm9yZSBjcndfbWFjaGluZV9jaGVja19pbml0LgotICovCi1zdGF0aWMgaW50IF9faW5pdCBjcndfaW5pdF9zZW1hcGhvcmUodm9pZCkKK3ZvaWQgY3J3X3dhaXRfZm9yX2NoYW5uZWxfcmVwb3J0KHZvaWQpCiB7Ci0JaW5pdF9NVVRFWF9MT0NLRUQoJmNyd19zZW1hcGhvcmUpOwotCXJldHVybiAwOworCWNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQoKTsKKwl3YWl0X2V2ZW50KGNyd19oYW5kbGVyX3dhaXRfcSwgYXRvbWljX3JlYWQoJmNyd19ucl9yZXEpID09IDApOwogfQotcHVyZV9pbml0Y2FsbChjcndfaW5pdF9zZW1hcGhvcmUpOwogCiAvKgogICogTWFjaGluZSBjaGVja3MgZm9yIHRoZSBjaGFubmVsIHN1YnN5c3RlbSBtdXN0IGJlIGVuYWJsZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCmluZGV4IDc2NzlhZWUuLjI3NjlkYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGFzbS9pc2MuaD4KICNpbmNsdWRlIDxhc20vY3J3Lmg+CiAKQEAgLTIzMiw3ICsyMzMsNyBAQAogCWlmICghZ2V0X2RldmljZSgmc2NoLT5kZXYpKQogCQlyZXR1cm47CiAJc2NoLT50b2RvID0gdG9kbzsKLQlpZiAoIXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmc2NoLT50b2RvX3dvcmspKSB7CisJaWYgKCFxdWV1ZV93b3JrKGNpb193b3JrX3EsICZzY2gtPnRvZG9fd29yaykpIHsKIAkJLyogQWxyZWFkeSBxdWV1ZWQsIHJlbGVhc2Ugd29ya3F1ZXVlIHJlZi4gKi8KIAkJcHV0X2RldmljZSgmc2NoLT5kZXYpOwogCX0KQEAgLTU0Myw3ICs1NDQsNyBAQAogfQogCiBzdGF0aWMgREVDTEFSRV9XT1JLKHNsb3dfcGF0aF93b3JrLCBjc3Nfc2xvd19wYXRoX2Z1bmMpOwotc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNsb3dfcGF0aF93cTsKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjaW9fd29ya19xOwogCiB2b2lkIGNzc19zY2hlZHVsZV9ldmFsKHN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkKQogewpAQCAtNTUyLDcgKzU1Myw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNsb3dfc3ViY2hhbm5lbF9sb2NrLCBmbGFncyk7CiAJaWRzZXRfc2NoX2FkZChzbG93X3N1YmNoYW5uZWxfc2V0LCBzY2hpZCk7CiAJYXRvbWljX3NldCgmY3NzX2V2YWxfc2NoZWR1bGVkLCAxKTsKLQlxdWV1ZV93b3JrKHNsb3dfcGF0aF93cSwgJnNsb3dfcGF0aF93b3JrKTsKKwlxdWV1ZV93b3JrKGNpb193b3JrX3EsICZzbG93X3BhdGhfd29yayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xvd19zdWJjaGFubmVsX2xvY2ssIGZsYWdzKTsKIH0KIApAQCAtNTYzLDcgKzU2NCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNsb3dfc3ViY2hhbm5lbF9sb2NrLCBmbGFncyk7CiAJaWRzZXRfZmlsbChzbG93X3N1YmNoYW5uZWxfc2V0KTsKIAlhdG9taWNfc2V0KCZjc3NfZXZhbF9zY2hlZHVsZWQsIDEpOwotCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmc2xvd19wYXRoX3dvcmspOworCXF1ZXVlX3dvcmsoY2lvX3dvcmtfcSwgJnNsb3dfcGF0aF93b3JrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3N1YmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogfQogCkBAIC01OTQsMTQgKzU5NSwxNCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZzbG93X3N1YmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogCWlkc2V0X2FkZF9zZXQoc2xvd19zdWJjaGFubmVsX3NldCwgdW5yZWdfc2V0KTsKIAlhdG9taWNfc2V0KCZjc3NfZXZhbF9zY2hlZHVsZWQsIDEpOwotCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmc2xvd19wYXRoX3dvcmspOworCXF1ZXVlX3dvcmsoY2lvX3dvcmtfcSwgJnNsb3dfcGF0aF93b3JrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3N1YmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogCWlkc2V0X2ZyZWUodW5yZWdfc2V0KTsKIH0KIAogdm9pZCBjc3Nfd2FpdF9mb3Jfc2xvd19wYXRoKHZvaWQpCiB7Ci0JZmx1c2hfd29ya3F1ZXVlKHNsb3dfcGF0aF93cSk7CisJZmx1c2hfd29ya3F1ZXVlKGNpb193b3JrX3EpOwogfQogCiAvKiBTY2hlZHVsZSByZXByb2Jpbmcgb2YgYWxsIHVucmVnaXN0ZXJlZCBzdWJjaGFubmVscy4gKi8KQEAgLTk5MiwxMiArOTkzLDIxIEBACiAJcmV0ID0gY3NzX2J1c19pbml0KCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKLQorCWNpb193b3JrX3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiY2lvIik7CisJaWYgKCFjaW9fd29ya19xKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2J1czsKKwl9CiAJcmV0ID0gaW9fc3ViY2hhbm5lbF9pbml0KCk7CiAJaWYgKHJldCkKLQkJY3NzX2J1c19jbGVhbnVwKCk7CisJCWdvdG8gb3V0X3dxOwogCiAJcmV0dXJuIHJldDsKK291dF93cToKKwlkZXN0cm95X3dvcmtxdWV1ZShjaW9fd29ya19xKTsKK291dF9idXM6CisJY3NzX2J1c19jbGVhbnVwKCk7CisJcmV0dXJuIHJldDsKIH0KIHN1YnN5c19pbml0Y2FsbChjaGFubmVsX3N1YnN5c3RlbV9pbml0KTsKIApAQCAtMTAwNiwxMCArMTAxNiwyNSBAQAogCXN0cnVjdCBjc3NfZHJpdmVyICpjc3NkcnYgPSB0b19jc3Nkcml2ZXIoZHJ2KTsKIAogCWlmIChjc3NkcnYtPnNldHRsZSkKLQkJY3NzZHJ2LT5zZXR0bGUoKTsKKwkJcmV0dXJuIGNzc2Rydi0+c2V0dGxlKCk7CiAJcmV0dXJuIDA7CiB9CiAKK2ludCBjc3NfY29tcGxldGVfd29yayh2b2lkKQoreworCWludCByZXQ7CisKKwkvKiBXYWl0IGZvciB0aGUgZXZhbHVhdGlvbiBvZiBzdWJjaGFubmVscyB0byBmaW5pc2guICovCisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNzc19ldmFsX3dxLAorCQkJCSAgICAgICBhdG9taWNfcmVhZCgmY3NzX2V2YWxfc2NoZWR1bGVkKSA9PSAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTlRSOworCWZsdXNoX3dvcmtxdWV1ZShjaW9fd29ya19xKTsKKwkvKiBXYWl0IGZvciB0aGUgc3ViY2hhbm5lbCB0eXBlIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIHRvIGZpbmlzaCAqLworCXJldHVybiBidXNfZm9yX2VhY2hfZHJ2KCZjc3NfYnVzX3R5cGUsIE5VTEwsIE5VTEwsIGNzc19zZXR0bGUpOworfQorCisKIC8qCiAgKiBXYWl0IGZvciB0aGUgaW5pdGlhbGl6YXRpb24gb2YgZGV2aWNlcyB0byBmaW5pc2gsIHRvIG1ha2Ugc3VyZSB3ZSBhcmUKICAqIGRvbmUgd2l0aCBvdXIgc2V0dXAgaWYgdGhlIHNlYXJjaCBmb3IgdGhlIHJvb3QgZGV2aWNlIHN0YXJ0cy4KQEAgLTEwMTgsMTMgKzEwNDMsNDEgQEAKIHsKIAkvKiBTdGFydCBpbml0aWFsIHN1YmNoYW5uZWwgZXZhbHVhdGlvbi4gKi8KIAljc3Nfc2NoZWR1bGVfZXZhbF9hbGwoKTsKLQkvKiBXYWl0IGZvciB0aGUgZXZhbHVhdGlvbiBvZiBzdWJjaGFubmVscyB0byBmaW5pc2guICovCi0Jd2FpdF9ldmVudChjc3NfZXZhbF93cSwgYXRvbWljX3JlYWQoJmNzc19ldmFsX3NjaGVkdWxlZCkgPT0gMCk7Ci0JLyogV2FpdCBmb3IgdGhlIHN1YmNoYW5uZWwgdHlwZSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiB0byBmaW5pc2ggKi8KLQlyZXR1cm4gYnVzX2Zvcl9lYWNoX2RydigmY3NzX2J1c190eXBlLCBOVUxMLCBOVUxMLCBjc3Nfc2V0dGxlKTsKKwljc3NfY29tcGxldGVfd29yaygpOworCXJldHVybiAwOwogfQogc3Vic3lzX2luaXRjYWxsX3N5bmMoY2hhbm5lbF9zdWJzeXN0ZW1faW5pdF9zeW5jKTsKIAorI2lmZGVmIENPTkZJR19QUk9DX0ZTCitzdGF0aWMgc3NpemVfdCBjaW9fc2V0dGxlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWludCByZXQ7CisKKwkvKiBIYW5kbGUgcGVuZGluZyBDUlcncy4gKi8KKwljcndfd2FpdF9mb3JfY2hhbm5lbF9yZXBvcnQoKTsKKwlyZXQgPSBjc3NfY29tcGxldGVfd29yaygpOworCisJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjaW9fc2V0dGxlX3Byb2NfZm9wcyA9IHsKKwkud3JpdGUgPSBjaW9fc2V0dGxlX3dyaXRlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY2lvX3NldHRsZV9pbml0KHZvaWQpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKKworCWVudHJ5ID0gcHJvY19jcmVhdGUoImNpb19zZXR0bGUiLCBTX0lXVVNSLCBOVUxMLAorCQkJICAgICZjaW9fc2V0dGxlX3Byb2NfZm9wcyk7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwoY2lvX3NldHRsZV9pbml0KTsKKyNlbmRpZiAvKkNPTkZJR19QUk9DX0ZTKi8KKwogaW50IHNjaF9pc19wc2V1ZG9fc2NoKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpCiB7CiAJcmV0dXJuIHNjaCA9PSB0b19jc3Moc2NoLT5kZXYucGFyZW50KS0+cHNldWRvX3N1YmNoYW5uZWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuaAppbmRleCBmZTg0YjkyLi43ZTM3ODg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmgKQEAgLTk1LDcgKzk1LDcgQEAKIAlpbnQgKCpmcmVlemUpKHN0cnVjdCBzdWJjaGFubmVsICopOwogCWludCAoKnRoYXcpIChzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKIAlpbnQgKCpyZXN0b3JlKShzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKLQl2b2lkICgqc2V0dGxlKSh2b2lkKTsKKwlpbnQgKCpzZXR0bGUpKHZvaWQpOwogCWNvbnN0IGNoYXIgKm5hbWU7CiB9OwogCkBAIC0xNDYsMTIgKzE0NiwxMyBAQAogLyogSGVscGVyIGZ1bmN0aW9ucyB0byBidWlsZCBsaXN0cyBmb3IgdGhlIHNsb3cgcGF0aC4gKi8KIHZvaWQgY3NzX3NjaGVkdWxlX2V2YWwoc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQpOwogdm9pZCBjc3Nfc2NoZWR1bGVfZXZhbF9hbGwodm9pZCk7CitpbnQgY3NzX2NvbXBsZXRlX3dvcmsodm9pZCk7CiAKIGludCBzY2hfaXNfcHNldWRvX3NjaChzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKIHN0cnVjdCBzY2hpYjsKIGludCBjc3Nfc2NoX2lzX3ZhbGlkKHN0cnVjdCBzY2hpYiAqKTsKIAotZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzbG93X3BhdGhfd3E7CitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNpb193b3JrX3E7CiB2b2lkIGNzc193YWl0X2Zvcl9zbG93X3BhdGgodm9pZCk7CiB2b2lkIGNzc19zY2hlZF9zY2hfdG9kbyhzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoLCBlbnVtIHNjaF90b2RvIHRvZG8pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwppbmRleCBhNmM3ZDU0Li5jNmFiYjc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKQEAgLTEzNiw3ICsxMzYsNiBAQAogc3RhdGljIGludCBpb19zdWJjaGFubmVsX2NocF9ldmVudChzdHJ1Y3Qgc3ViY2hhbm5lbCAqLCBzdHJ1Y3QgY2hwX2xpbmsgKiwKIAkJCQkgICBpbnQpOwogc3RhdGljIHZvaWQgcmVjb3ZlcnlfZnVuYyh1bnNpZ25lZCBsb25nIGRhdGEpOwotc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNjd19kZXZpY2Vfd29yazsKIHdhaXRfcXVldWVfaGVhZF90IGNjd19kZXZpY2VfaW5pdF93cTsKIGF0b21pY190IGNjd19kZXZpY2VfaW5pdF9jb3VudDsKIApAQCAtMTU5LDExICsxNTgsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaW9fc3ViY2hhbm5lbF9zZXR0bGUodm9pZCkKK3N0YXRpYyBpbnQgaW9fc3ViY2hhbm5lbF9zZXR0bGUodm9pZCkKIHsKLQl3YWl0X2V2ZW50KGNjd19kZXZpY2VfaW5pdF93cSwKLQkJICAgYXRvbWljX3JlYWQoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkgPT0gMCk7Ci0JZmx1c2hfd29ya3F1ZXVlKGNjd19kZXZpY2Vfd29yayk7CisJaW50IHJldDsKKworCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjY3dfZGV2aWNlX2luaXRfd3EsCisJCQkJYXRvbWljX3JlYWQoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkgPT0gMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU5UUjsKKwlmbHVzaF93b3JrcXVldWUoY2lvX3dvcmtfcSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY3NzX2RyaXZlciBpb19zdWJjaGFubmVsX2RyaXZlciA9IHsKQEAgLTE4OCwyNyArMTkyLDEzIEBACiAJYXRvbWljX3NldCgmY2N3X2RldmljZV9pbml0X2NvdW50LCAwKTsKIAlzZXR1cF90aW1lcigmcmVjb3ZlcnlfdGltZXIsIHJlY292ZXJ5X2Z1bmMsIDApOwogCi0JY2N3X2RldmljZV93b3JrID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImNpbyIpOwotCWlmICghY2N3X2RldmljZV93b3JrKQotCQlyZXR1cm4gLUVOT01FTTsKLQlzbG93X3BhdGhfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgia3Nsb3djcnciKTsKLQlpZiAoIXNsb3dfcGF0aF93cSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9lcnI7Ci0JfQotCWlmICgocmV0ID0gYnVzX3JlZ2lzdGVyICgmY2N3X2J1c190eXBlKSkpCi0JCWdvdG8gb3V0X2VycjsKLQorCXJldCA9IGJ1c19yZWdpc3RlcigmY2N3X2J1c190eXBlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCXJldCA9IGNzc19kcml2ZXJfcmVnaXN0ZXIoJmlvX3N1YmNoYW5uZWxfZHJpdmVyKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF9lcnI7CisJCWJ1c191bnJlZ2lzdGVyKCZjY3dfYnVzX3R5cGUpOwogCi0JcmV0dXJuIDA7Ci1vdXRfZXJyOgotCWlmIChjY3dfZGV2aWNlX3dvcmspCi0JCWRlc3Ryb3lfd29ya3F1ZXVlKGNjd19kZXZpY2Vfd29yayk7Ci0JaWYgKHNsb3dfcGF0aF93cSkKLQkJZGVzdHJveV93b3JrcXVldWUoc2xvd19wYXRoX3dxKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMzQ4LDcgKzEzMzgsNyBAQAogCQkvKiBOb3Qgb3BlcmF0aW9uYWwuICovCiAJCWlmICghY2RldikKIAkJCXJldHVybiBJT19TQ0hfVU5SRUc7Ci0JCWlmICghY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpKQorCQlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpICE9IE5PVElGWV9PSykKIAkJCXJldHVybiBJT19TQ0hfVU5SRUc7CiAJCXJldHVybiBJT19TQ0hfT1JQSF9VTlJFRzsKIAl9CkBAIC0xMzU2LDEyICsxMzQ2LDEyIEBACiAJaWYgKCFjZGV2KQogCQlyZXR1cm4gSU9fU0NIX0FUVEFDSDsKIAlpZiAoc2NoLT5zY2hpYi5wbWN3LmRldiAhPSBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8pIHsKLQkJaWYgKCFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkpCisJCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkgIT0gTk9USUZZX09LKQogCQkJcmV0dXJuIElPX1NDSF9VTlJFR19BVFRBQ0g7CiAJCXJldHVybiBJT19TQ0hfT1JQSF9BVFRBQ0g7CiAJfQogCWlmICgoc2NoLT5zY2hpYi5wbWN3LnBhbSAmIHNjaC0+b3BtKSA9PSAwKSB7Ci0JCWlmICghY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX05PX1BBVEgpKQorCQlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX05PX1BBVEgpICE9IE5PVElGWV9PSykKIAkJCXJldHVybiBJT19TQ0hfVU5SRUc7CiAJCXJldHVybiBJT19TQ0hfRElTQzsKIAl9CkBAIC0xNDEwLDYgKzE0MDAsMTIgQEAKIAkJcmMgPSAwOwogCQlnb3RvIG91dF91bmxvY2s7CiAJY2FzZSBJT19TQ0hfVkVSSUZZOgorCQlpZiAoY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MucmVzdW1pbmcgPT0gMSkgeworCQkJaWYgKGNpb19lbmFibGVfc3ViY2hhbm5lbChzY2gsICh1MzIpKGFkZHJfdClzY2gpKSB7CisJCQkJY2N3X2RldmljZV9zZXRfbm90b3BlcihjZGV2KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQogCQkvKiBUcmlnZ2VyIHBhdGggdmVyaWZpY2F0aW9uLiAqLwogCQlpb19zdWJjaGFubmVsX3ZlcmlmeShzY2gpOwogCQlyYyA9IDA7CkBAIC0xNDQ4LDcgKzE0NDQsOCBAQAogCQlicmVhazsKIAljYXNlIElPX1NDSF9VTlJFR19BVFRBQ0g6CiAJCS8qIFVucmVnaXN0ZXIgY2N3IGRldmljZS4gKi8KLQkJY2N3X2RldmljZV91bnJlZ2lzdGVyKGNkZXYpOworCQlpZiAoIWNkZXYtPnByaXZhdGUtPmZsYWdzLnJlc3VtaW5nKQorCQkJY2N3X2RldmljZV91bnJlZ2lzdGVyKGNkZXYpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTE0NTcsNyArMTQ1NCw4IEBACiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIElPX1NDSF9PUlBIX1VOUkVHOgogCWNhc2UgSU9fU0NIX1VOUkVHOgotCQljc3Nfc2NoX2RldmljZV91bnJlZ2lzdGVyKHNjaCk7CisJCWlmICghY2RldiB8fCAhY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MucmVzdW1pbmcpCisJCQljc3Nfc2NoX2RldmljZV91bnJlZ2lzdGVyKHNjaCk7CiAJCWJyZWFrOwogCWNhc2UgSU9fU0NIX09SUEhfQVRUQUNIOgogCWNhc2UgSU9fU0NIX1VOUkVHX0FUVEFDSDoKQEAgLTE3NzksMjYgKzE3NzcsNDIgQEAKIHsKIAlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAotCWlmIChjaW9faXNfY29uc29sZShzY2gtPnNjaGlkKSkKLQkJZ290byBvdXQ7CisJc3Bpbl9sb2NrX2lycShzY2gtPmxvY2spOworCWlmIChjaW9faXNfY29uc29sZShzY2gtPnNjaGlkKSkgeworCQljaW9fZW5hYmxlX3N1YmNoYW5uZWwoc2NoLCAodTMyKShhZGRyX3Qpc2NoKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KIAkvKgogCSAqIFdoaWxlIHdlIHdlcmUgc2xlZXBpbmcsIGRldmljZXMgbWF5IGhhdmUgZ29uZSBvciBiZWNvbWUKIAkgKiBhdmFpbGFibGUgYWdhaW4uIEtpY2sgcmUtZGV0ZWN0aW9uLgogCSAqLwotCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKIAljZGV2LT5wcml2YXRlLT5mbGFncy5yZXN1bWluZyA9IDE7CisJY3NzX3NjaGVkdWxlX2V2YWwoc2NoLT5zY2hpZCk7CisJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CisJY3NzX2NvbXBsZXRlX3dvcmsoKTsKKworCS8qIGNkZXYgbWF5IGhhdmUgYmVlbiBtb3ZlZCB0byBhIGRpZmZlcmVudCBzdWJjaGFubmVsLiAqLworCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CisJc3Bpbl9sb2NrX2lycShzY2gtPmxvY2spOworCWlmIChjZGV2LT5wcml2YXRlLT5zdGF0ZSAhPSBERVZfU1RBVEVfT05MSU5FICYmCisJICAgIGNkZXYtPnByaXZhdGUtPnN0YXRlICE9IERFVl9TVEFURV9PRkZMSU5FKQorCQlnb3RvIG91dF91bmxvY2s7CisKIAljY3dfZGV2aWNlX3JlY29nbml0aW9uKGNkZXYpOwogCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwogCXdhaXRfZXZlbnQoY2Rldi0+cHJpdmF0ZS0+d2FpdF9xLCBkZXZfZnNtX2ZpbmFsX3N0YXRlKGNkZXYpIHx8CiAJCSAgIGNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9ESVNDT05ORUNURUQpOwotb3V0OgorCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKKworb3V0X3VubG9jazoKIAljZGV2LT5wcml2YXRlLT5mbGFncy5yZXN1bWluZyA9IDA7CisJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgcmVzdW1lX2hhbmRsZV9ib3hlZChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKIAljZGV2LT5wcml2YXRlLT5zdGF0ZSA9IERFVl9TVEFURV9CT1hFRDsKLQlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0JPWEVEKSkKKwlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0JPWEVEKSA9PSBOT1RJRllfT0spCiAJCXJldHVybiAwOwogCWNjd19kZXZpY2Vfc2NoZWRfdG9kbyhjZGV2LCBDREVWX1RPRE9fVU5SRUcpOwogCXJldHVybiAtRU5PREVWOwpAQCAtMTgwNyw3ICsxODIxLDcgQEAKIHN0YXRpYyBpbnQgcmVzdW1lX2hhbmRsZV9kaXNjKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewogCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gREVWX1NUQVRFX0RJU0NPTk5FQ1RFRDsKLQlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0dPTkUpKQorCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkgPT0gTk9USUZZX09LKQogCQlyZXR1cm4gMDsKIAljY3dfZGV2aWNlX3NjaGVkX3RvZG8oY2RldiwgQ0RFVl9UT0RPX1VOUkVHKTsKIAlyZXR1cm4gLUVOT0RFVjsKQEAgLTE4MTYsNDAgKzE4MzAsMzEgQEAKIHN0YXRpYyBpbnQgY2N3X2RldmljZV9wbV9yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiA9IHRvX2Njd2RldihkZXYpOwotCXN0cnVjdCBzdWJjaGFubmVsICpzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwotCWludCByZXQgPSAwLCBjbV9lbmFibGVkOworCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7CisJaW50IHJldCA9IDA7CiAKIAlfX2Njd19kZXZpY2VfcG1fcmVzdG9yZShjZGV2KTsKKwlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCXNwaW5fbG9ja19pcnEoc2NoLT5sb2NrKTsKLQlpZiAoY2lvX2lzX2NvbnNvbGUoc2NoLT5zY2hpZCkpIHsKLQkJY2lvX2VuYWJsZV9zdWJjaGFubmVsKHNjaCwgKHUzMikoYWRkcl90KXNjaCk7Ci0JCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOworCWlmIChjaW9faXNfY29uc29sZShzY2gtPnNjaGlkKSkKIAkJZ290byBvdXRfcmVzdG9yZTsKLQl9Ci0JY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZG9ub3RpZnkgPSAwOworCiAJLyogY2hlY2sgcmVjb2duaXRpb24gcmVzdWx0cyAqLwogCXN3aXRjaCAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUpIHsKIAljYXNlIERFVl9TVEFURV9PRkZMSU5FOgorCWNhc2UgREVWX1NUQVRFX09OTElORToKKwkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZG9ub3RpZnkgPSAwOwogCQlicmVhazsKIAljYXNlIERFVl9TVEFURV9CT1hFRDoKIAkJcmV0ID0gcmVzdW1lX2hhbmRsZV9ib3hlZChjZGV2KTsKLQkJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CiAJCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X3VubG9jazsKIAkJZ290byBvdXRfcmVzdG9yZTsKLQljYXNlIERFVl9TVEFURV9ESVNDT05ORUNURUQ6Ci0JCWdvdG8gb3V0X2Rpc2NfdW5sb2NrOwogCWRlZmF1bHQ6Ci0JCWdvdG8gb3V0X3VucmVnX3VubG9jazsKLQl9Ci0JLyogY2hlY2sgaWYgdGhlIGRldmljZSBpZCBoYXMgY2hhbmdlZCAqLwotCWlmIChzY2gtPnNjaGliLnBtY3cuZGV2ICE9IGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubykgewotCQlDSU9fTVNHX0VWRU5UKDAsICJyZXN1bWU6IHNjaCAwLiV4LiUwNHg6IGZhaWxlZCAoZGV2bm8gIgotCQkJICAgICAgImNoYW5nZWQgZnJvbSAlMDR4IHRvICUwNHgpXG4iLAotCQkJICAgICAgc2NoLT5zY2hpZC5zc2lkLCBzY2gtPnNjaGlkLnNjaF9ubywKLQkJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubywKLQkJCSAgICAgIHNjaC0+c2NoaWIucG1jdy5kZXYpOwotCQlnb3RvIG91dF91bnJlZ191bmxvY2s7CisJCXJldCA9IHJlc3VtZV9oYW5kbGVfZGlzYyhjZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJZ290byBvdXRfcmVzdG9yZTsKIAl9CiAJLyogY2hlY2sgaWYgdGhlIGRldmljZSB0eXBlIGhhcyBjaGFuZ2VkICovCiAJaWYgKCFjY3dfZGV2aWNlX3Rlc3Rfc2Vuc2VfZGF0YShjZGV2KSkgewpAQCAtMTg1OCwyNCArMTg2MywzMCBAQAogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQotCWlmICghY2Rldi0+b25saW5lKSB7Ci0JCXJldCA9IDA7CisJaWYgKCFjZGV2LT5vbmxpbmUpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWlmIChjY3dfZGV2aWNlX29ubGluZShjZGV2KSkgeworCQlyZXQgPSByZXN1bWVfaGFuZGxlX2Rpc2MoY2Rldik7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0X3Jlc3RvcmU7CisJfQorCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOworCXdhaXRfZXZlbnQoY2Rldi0+cHJpdmF0ZS0+d2FpdF9xLCBkZXZfZnNtX2ZpbmFsX3N0YXRlKGNkZXYpKTsKKwlzcGluX2xvY2tfaXJxKHNjaC0+bG9jayk7CisKKwlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX09QRVIpID09IE5PVElGWV9CQUQpIHsKKwkJY2N3X2RldmljZV9zY2hlZF90b2RvKGNkZXYsIENERVZfVE9ET19VTlJFRyk7CisJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9Ci0JcmV0ID0gY2N3X2RldmljZV9vbmxpbmUoY2Rldik7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfZGlzY191bmxvY2s7CiAKLQljbV9lbmFibGVkID0gY2Rldi0+cHJpdmF0ZS0+Y21iICE9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7Ci0KLQl3YWl0X2V2ZW50KGNkZXYtPnByaXZhdGUtPndhaXRfcSwgZGV2X2ZzbV9maW5hbF9zdGF0ZShjZGV2KSk7Ci0JaWYgKGNkZXYtPnByaXZhdGUtPnN0YXRlICE9IERFVl9TVEFURV9PTkxJTkUpIHsKLQkJc3Bpbl9sb2NrX2lycShzY2gtPmxvY2spOwotCQlnb3RvIG91dF9kaXNjX3VubG9jazsKLQl9Ci0JaWYgKGNtX2VuYWJsZWQpIHsKKwkvKiByZWVuYWJsZSBjbWYsIGlmIG5lZWRlZCAqLworCWlmIChjZGV2LT5wcml2YXRlLT5jbWIpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CiAJCXJldCA9IGNjd19zZXRfY21mKGNkZXYsIDEpOworCQlzcGluX2xvY2tfaXJxKHNjaC0+bG9jayk7CiAJCWlmIChyZXQpIHsKIAkJCUNJT19NU0dfRVZFTlQoMiwgInJlc3VtZTogY2RldiAwLiV4LiUwNHg6IGNtZiBmYWlsZWQgIgogCQkJCSAgICAgICIocmM9JWQpXG4iLCBjZGV2LT5wcml2YXRlLT5kZXZfaWQuc3NpZCwKQEAgLTE4ODUsMjEgKzE4OTYsMTEgQEAKIAl9CiAKIG91dF9yZXN0b3JlOgorCXNwaW5fdW5sb2NrX2lycShzY2gtPmxvY2spOwogCWlmIChjZGV2LT5vbmxpbmUgJiYgY2Rldi0+ZHJ2ICYmIGNkZXYtPmRydi0+cmVzdG9yZSkKIAkJcmV0ID0gY2Rldi0+ZHJ2LT5yZXN0b3JlKGNkZXYpOwotb3V0OgogCXJldHVybiByZXQ7CiAKLW91dF9kaXNjX3VubG9jazoKLQlyZXQgPSByZXN1bWVfaGFuZGxlX2Rpc2MoY2Rldik7Ci0Jc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlnb3RvIG91dF9yZXN0b3JlOwotCi1vdXRfdW5yZWdfdW5sb2NrOgotCWNjd19kZXZpY2Vfc2NoZWRfdG9kbyhjZGV2LCBDREVWX1RPRE9fVU5SRUdfRVZBTCk7Ci0JcmV0ID0gLUVOT0RFVjsKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxKHNjaC0+bG9jayk7CiAJcmV0dXJuIHJldDsKQEAgLTIwMjgsNyArMjAyOSw3IEBACiAJLyogR2V0IHdvcmtxdWV1ZSByZWYuICovCiAJaWYgKCFnZXRfZGV2aWNlKCZjZGV2LT5kZXYpKQogCQlyZXR1cm47Ci0JaWYgKCFxdWV1ZV93b3JrKHNsb3dfcGF0aF93cSwgJmNkZXYtPnByaXZhdGUtPnRvZG9fd29yaykpIHsKKwlpZiAoIXF1ZXVlX3dvcmsoY2lvX3dvcmtfcSwgJmNkZXYtPnByaXZhdGUtPnRvZG9fd29yaykpIHsKIAkJLyogQWxyZWFkeSBxdWV1ZWQsIHJlbGVhc2Ugd29ya3F1ZXVlIHJlZi4gKi8KIAkJcHV0X2RldmljZSgmY2Rldi0+ZGV2KTsKIAl9CkBAIC0yMDQxLDUgKzIwNDIsNCBAQAogRVhQT1JUX1NZTUJPTChjY3dfZHJpdmVyX3VucmVnaXN0ZXIpOwogRVhQT1JUX1NZTUJPTChnZXRfY2N3ZGV2X2J5X2J1c2lkKTsKIEVYUE9SVF9TWU1CT0woY2N3X2J1c190eXBlKTsKLUVYUE9SVF9TWU1CT0woY2N3X2RldmljZV93b3JrKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGNjd19kZXZpY2VfZ2V0X3N1YmNoYW5uZWxfaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaCBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKaW5kZXggYmNmZTEzZS4uMzc5ZGUyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCkBAIC00LDcgKzQsNyBAQAogI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgotCisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlICJpb19zY2guaCIKIAogLyoKQEAgLTcxLDcgKzcxLDYgQEAKIAkJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPT0gREVWX1NUQVRFX0JPWEVEKTsKIH0KIAotZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjY3dfZGV2aWNlX3dvcms7CiBleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgY2N3X2RldmljZV9pbml0X3dxOwogZXh0ZXJuIGF0b21pY190IGNjd19kZXZpY2VfaW5pdF9jb3VudDsKIGludCBfX2luaXQgaW9fc3ViY2hhbm5lbF9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwppbmRleCBhZTc2MDY1Li5jNTZhYjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwpAQCAtMzEzLDIxICszMTMsNDMgQEAKIAl9CiB9CiAKKy8qKgorICAqIGNjd19kZXZpY2Vfbm90aWZ5KCkgLSBpbmZvcm0gdGhlIGRldmljZSdzIGRyaXZlciBhYm91dCBhbiBldmVudAorICAqIEBjZGV2OiBkZXZpY2UgZm9yIHdoaWNoIGFuIGV2ZW50IG9jY3VyZWQKKyAgKiBAZXZlbnQ6IGV2ZW50IHRoYXQgb2NjdXJyZWQKKyAgKgorICAqIFJldHVybnM6CisgICogICAtJUVJTlZBTCBpZiB0aGUgZGV2aWNlIGlzIG9mZmxpbmUgb3IgaGFzIG5vIGRyaXZlci4KKyAgKiAgIC0lRU9QTk9UU1VQUCBpZiB0aGUgZGV2aWNlJ3MgZHJpdmVyIGhhcyBubyBub3RpZmllciByZWdpc3RlcmVkLgorICAqICAgJU5PVElGWV9PSyBpZiB0aGUgZHJpdmVyIHdhbnRzIHRvIGtlZXAgdGhlIGRldmljZS4KKyAgKiAgICVOT1RJRllfQkFEIGlmIHRoZSBkcml2ZXIgZG9lc24ndCB3YW50IHRvIGtlZXAgdGhlIGRldmljZS4KKyAgKi8KIGludCBjY3dfZGV2aWNlX25vdGlmeShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgaW50IGV2ZW50KQogeworCWludCByZXQgPSAtRUlOVkFMOworCiAJaWYgKCFjZGV2LT5kcnYpCi0JCXJldHVybiAwOworCQlnb3RvIG91dDsKIAlpZiAoIWNkZXYtPm9ubGluZSkKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0OwogCUNJT19NU0dfRVZFTlQoMiwgIm5vdGlmeSBjYWxsZWQgZm9yIDAuJXguJTA0eCwgZXZlbnQ9JWRcbiIsCiAJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5zc2lkLCBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sCiAJCSAgICAgIGV2ZW50KTsKLQlyZXR1cm4gY2Rldi0+ZHJ2LT5ub3RpZnkgPyBjZGV2LT5kcnYtPm5vdGlmeShjZGV2LCBldmVudCkgOiAwOworCWlmICghY2Rldi0+ZHJ2LT5ub3RpZnkpIHsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoY2Rldi0+ZHJ2LT5ub3RpZnkoY2RldiwgZXZlbnQpKQorCQlyZXQgPSBOT1RJRllfT0s7CisJZWxzZQorCQlyZXQgPSBOT1RJRllfQkFEOworb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGNjd19kZXZpY2Vfb3Blcl9ub3RpZnkoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7Ci0JaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19PUEVSKSkgeworCWlmIChjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fT1BFUikgPT0gTk9USUZZX09LKSB7CiAJCS8qIFJlZW5hYmxlIGNoYW5uZWwgbWVhc3VyZW1lbnRzLCBpZiBuZWVkZWQuICovCiAJCWNjd19kZXZpY2Vfc2NoZWRfdG9kbyhjZGV2LCBDREVWX1RPRE9fRU5BQkxFX0NNRik7CiAJCXJldHVybjsKQEAgLTM2MSwxNCArMzgzLDE1IEBACiAJY2FzZSBERVZfU1RBVEVfQk9YRUQ6CiAJCUNJT19NU0dfRVZFTlQoMCwgIkJveGVkIGRldmljZSAlMDR4IG9uIHN1YmNoYW5uZWwgJTA0eFxuIiwKIAkJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubywgc2NoLT5zY2hpZC5zY2hfbm8pOwotCQlpZiAoY2Rldi0+b25saW5lICYmICFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fQk9YRUQpKQorCQlpZiAoY2Rldi0+b25saW5lICYmCisJCSAgICBjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fQk9YRUQpICE9IE5PVElGWV9PSykKIAkJCWNjd19kZXZpY2Vfc2NoZWRfdG9kbyhjZGV2LCBDREVWX1RPRE9fVU5SRUcpOwogCQljZGV2LT5wcml2YXRlLT5mbGFncy5kb25vdGlmeSA9IDA7CiAJCWJyZWFrOwogCWNhc2UgREVWX1NUQVRFX05PVF9PUEVSOgogCQlDSU9fTVNHX0VWRU5UKDAsICJEZXZpY2UgJTA0eCBnb25lIG9uIHN1YmNoYW5uZWwgJTA0eFxuIiwKIAkJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubywgc2NoLT5zY2hpZC5zY2hfbm8pOwotCQlpZiAoIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSkKKwkJaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSAhPSBOT1RJRllfT0spCiAJCQljY3dfZGV2aWNlX3NjaGVkX3RvZG8oY2RldiwgQ0RFVl9UT0RPX1VOUkVHKTsKIAkJZWxzZQogCQkJY2N3X2RldmljZV9zZXRfZGlzY29ubmVjdGVkKGNkZXYpOwpAQCAtMzc4LDcgKzQwMSw3IEBACiAJCUNJT19NU0dfRVZFTlQoMCwgIkRpc2Nvbm5lY3RlZCBkZXZpY2UgJTA0eCBvbiBzdWJjaGFubmVsICIKIAkJCSAgICAgICIlMDR4XG4iLCBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sCiAJCQkgICAgICBzY2gtPnNjaGlkLnNjaF9ubyk7Ci0JCWlmICghY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX05PX1BBVEgpKQorCQlpZiAoY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX05PX1BBVEgpICE9IE5PVElGWV9PSykKIAkJCWNjd19kZXZpY2Vfc2NoZWRfdG9kbyhjZGV2LCBDREVWX1RPRE9fVU5SRUcpOwogCQllbHNlCiAJCQljY3dfZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoY2Rldik7CkBAIC01ODYsNyArNjA5LDcgQEAKIHN0YXRpYyB2b2lkIGNjd19kZXZpY2VfZ2VuZXJpY19ub3RvcGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LAogCQkJCSAgICAgICBlbnVtIGRldl9ldmVudCBkZXZfZXZlbnQpCiB7Ci0JaWYgKCFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkpCisJaWYgKGNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSAhPSBOT1RJRllfT0spCiAJCWNjd19kZXZpY2Vfc2NoZWRfdG9kbyhjZGV2LCBDREVWX1RPRE9fVU5SRUcpOwogCWVsc2UKIAkJY2N3X2RldmljZV9zZXRfZGlzY29ubmVjdGVkKGNkZXYpOwpAQCAtNjY3LDcgKzY5MCw3IEBACiAJc3RydWN0IGlyYiAqaXJiOwogCWludCBpc19jbWQ7CiAKLQlpcmIgPSAoc3RydWN0IGlyYiAqKSBfX0xDX0lSQjsKKwlpcmIgPSAoc3RydWN0IGlyYiAqKSZTMzkwX2xvd2NvcmUuaXJiOwogCWlzX2NtZCA9ICFzY3N3X2lzX3RtKCZpcmItPnNjc3cpOwogCS8qIENoZWNrIGZvciB1bnNvbGljaXRlZCBpbnRlcnJ1cHQuICovCiAJaWYgKCFzY3N3X2lzX3NvbGljaXRlZCgmaXJiLT5zY3N3KSkgewpAQCAtNzMyLDcgKzc1NSw3IEBACiB7CiAJc3RydWN0IGlyYiAqaXJiOwogCi0JaXJiID0gKHN0cnVjdCBpcmIgKikgX19MQ19JUkI7CisJaXJiID0gKHN0cnVjdCBpcmIgKikmUzM5MF9sb3djb3JlLmlyYjsKIAkvKiBDaGVjayBmb3IgdW5zb2xpY2l0ZWQgaW50ZXJydXB0LiAqLwogCWlmIChzY3N3X3N0Y3RsKCZpcmItPnNjc3cpID09CiAJICAgIChTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EIHwgU0NTV19TVENUTF9BTEVSVF9TVEFUVVMpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaCBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCmluZGV4IDQ0ZjJmNmEuLjQ4YWEwNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCkBAIC0yMDgsMTggKzIwOCwyNyBAQAogCXVuc2lnbmVkIGludCBlcWJzX3BhcnRpYWw7CiAJdW5zaWduZWQgaW50IHNxYnM7CiAJdW5zaWduZWQgaW50IHNxYnNfcGFydGlhbDsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCitzdHJ1Y3QgcWRpb19xdWV1ZV9wZXJmX3N0YXQgeworCS8qCisJICogU29ydGVkIGludG8gb3JkZXItMiBidWNrZXRzOiAxLCAyLTMsIDQtNywgLi4uIDY0LTEyNywgMTI4LgorCSAqIFNpbmNlIG1heC4gMTI3IFNCQUxzIGFyZSBzY2FubmVkIHJldXNlIGVudHJ5IGZvciAxMjggYXMgcXVldWUgZnVsbAorCSAqIGFrYSAxMjcgU0JBTHMgZm91bmQuCisJICovCisJdW5zaWduZWQgaW50IG5yX3NiYWxzWzhdOworCXVuc2lnbmVkIGludCBucl9zYmFsX2Vycm9yOworCXVuc2lnbmVkIGludCBucl9zYmFsX25vcDsKKwl1bnNpZ25lZCBpbnQgbnJfc2JhbF90b3RhbDsKIH07CiAKIHN0cnVjdCBxZGlvX2lucHV0X3EgewogCS8qIGlucHV0IGJ1ZmZlciBhY2tub3dsZWRnZW1lbnQgZmxhZyAqLwogCWludCBwb2xsaW5nOwotCiAJLyogZmlyc3QgQUNLJ2VkIGJ1ZmZlciAqLwogCWludCBhY2tfc3RhcnQ7Ci0KIAkvKiBob3cgbXVjaCBzYmFscyBhcmUgYWNrbm93bGVkZ2VkIHdpdGggcWVic20gKi8KIAlpbnQgYWNrX2NvdW50OwotCiAJLyogbGFzdCB0aW1lIG9mIG5vdGljaW5nIGluY29taW5nIGRhdGEgKi8KIAl1NjQgdGltZXN0YW1wOwogfTsKQEAgLTIyNywyMSArMjM2LDQ3IEBACiBzdHJ1Y3QgcWRpb19vdXRwdXRfcSB7CiAJLyogUENJcyBhcmUgZW5hYmxlZCBmb3IgdGhlIHF1ZXVlICovCiAJaW50IHBjaV9vdXRfZW5hYmxlZDsKLQogCS8qIElRRElPOiBvdXRwdXQgbXVsdGlwbGUgYnVmZmVycyAoZW5oYW5jZWQgU0lHQSkgKi8KIAlpbnQgdXNlX2VuaF9zaWdhOwotCiAJLyogdGltZXIgdG8gY2hlY2sgZm9yIG1vcmUgb3V0Ym91bmQgd29yayAqLwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogfTsKIAorLyoKKyAqIE5vdGUgb24gY2FjaGUgYWxpZ25tZW50OiBncm91cGVkIHNsc2IgYW5kIHdyaXRlIG1vc3RseSBkYXRhIGF0IHRoZSBiZWdpbm5pbmcKKyAqIHNiYWxbXSBpcyByZWFkLW9ubHkgYW5kIHN0YXJ0cyBvbiBhIG5ldyBjYWNoZWxpbmUgZm9sbG93ZWQgYnkgcmVhZCBtb3N0bHkuCisgKi8KIHN0cnVjdCBxZGlvX3EgewogCXN0cnVjdCBzbHNiIHNsc2I7CisKIAl1bmlvbiB7CiAJCXN0cnVjdCBxZGlvX2lucHV0X3EgaW47CiAJCXN0cnVjdCBxZGlvX291dHB1dF9xIG91dDsKIAl9IHU7CiAKKwkvKgorCSAqIGluYm91bmQ6IG5leHQgYnVmZmVyIHRoZSBwcm9ncmFtIHNob3VsZCBjaGVjayBmb3IKKwkgKiBvdXRib3VuZDogbmV4dCBidWZmZXIgdG8gY2hlY2sgaWYgYWRhcHRlciBwcm9jZXNzZWQgaXQKKwkgKi8KKwlpbnQgZmlyc3RfdG9fY2hlY2s7CisKKwkvKiBmaXJzdF90b19jaGVjayBvZiB0aGUgbGFzdCB0aW1lICovCisJaW50IGxhc3RfbW92ZTsKKworCS8qIGJlZ2lubmluZyBwb3NpdGlvbiBmb3IgY2FsbGluZyB0aGUgcHJvZ3JhbSAqLworCWludCBmaXJzdF90b19raWNrOworCisJLyogbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdXNlIGJ5IHRoZSBhZGFwdGVyICovCisJYXRvbWljX3QgbnJfYnVmX3VzZWQ7CisKKwkvKiBlcnJvciBjb25kaXRpb24gZHVyaW5nIGEgZGF0YSB0cmFuc2ZlciAqLworCXVuc2lnbmVkIGludCBxZGlvX2Vycm9yOworCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2tsZXQ7CisJc3RydWN0IHFkaW9fcXVldWVfcGVyZl9zdGF0IHFfc3RhdHM7CisKKwlzdHJ1Y3QgcWRpb19idWZmZXIgKnNiYWxbUURJT19NQVhfQlVGRkVSU19QRVJfUV0gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCiAJLyogcXVldWUgbnVtYmVyICovCiAJaW50IG5yOwogCkBAIC0yNTcsMzIgKzI5Miw5IEBACiAJLyogdXBwZXItbGF5ZXIgcHJvZ3JhbSBoYW5kbGVyICovCiAJcWRpb19oYW5kbGVyX3QgKCpoYW5kbGVyKTsKIAotCS8qCi0JICogaW5ib3VuZDogbmV4dCBidWZmZXIgdGhlIHByb2dyYW0gc2hvdWxkIGNoZWNrIGZvcgotCSAqIG91dGJvdW5kOiBuZXh0IGJ1ZmZlciB0byBjaGVjayBmb3IgaGF2aW5nIGJlZW4gcHJvY2Vzc2VkCi0JICogYnkgdGhlIGNhcmQKLQkgKi8KLQlpbnQgZmlyc3RfdG9fY2hlY2s7Ci0KLQkvKiBmaXJzdF90b19jaGVjayBvZiB0aGUgbGFzdCB0aW1lICovCi0JaW50IGxhc3RfbW92ZTsKLQotCS8qIGJlZ2lubmluZyBwb3NpdGlvbiBmb3IgY2FsbGluZyB0aGUgcHJvZ3JhbSAqLwotCWludCBmaXJzdF90b19raWNrOwotCi0JLyogbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdXNlIGJ5IHRoZSBhZGFwdGVyICovCi0JYXRvbWljX3QgbnJfYnVmX3VzZWQ7Ci0KLQlzdHJ1Y3QgcWRpb19pcnEgKmlycV9wdHI7CiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19xOwotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OwotCi0JLyogZXJyb3IgY29uZGl0aW9uIGR1cmluZyBhIGRhdGEgdHJhbnNmZXIgKi8KLQl1bnNpZ25lZCBpbnQgcWRpb19lcnJvcjsKLQorCXN0cnVjdCBxZGlvX2lycSAqaXJxX3B0cjsKIAlzdHJ1Y3Qgc2wgKnNsOwotCXN0cnVjdCBxZGlvX2J1ZmZlciAqc2JhbFtRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKLQogCS8qCiAJICogV2FybmluZzogTGVhdmUgdGhpcyBtZW1iZXIgYXQgdGhlIGVuZCBzbyBpdCB3b24ndCBiZSBjbGVhcmVkIGluCiAJICogcWRpb19maWxsX3FzLiBBIHBhZ2UgaXMgYWxsb2NhdGVkIHVuZGVyIHRoaXMgcG9pbnRlciBhbmQgdXNlZCBmb3IKQEAgLTMxNywxMiArMzI5LDggQEAKIAlzdHJ1Y3QgcWRpb19zc3FkX2Rlc2Mgc3NxZF9kZXNjOwogCXZvaWQgKCpvcmlnX2hhbmRsZXIpIChzdHJ1Y3QgY2N3X2RldmljZSAqLCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgaXJiICopOwogCi0Jc3RydWN0IHFkaW9fZGV2X3BlcmZfc3RhdCBwZXJmX3N0YXQ7CiAJaW50IHBlcmZfc3RhdF9lbmFibGVkOwotCS8qCi0JICogV2FybmluZzogTGVhdmUgdGhlc2UgbWVtYmVycyB0b2dldGhlciBhdCB0aGUgZW5kIHNvIHRoZXkgd29uJ3QgYmUKLQkgKiBjbGVhcmVkIGluIHFkaW9fc2V0dXBfaXJxLgotCSAqLworCiAJc3RydWN0IHFkciAqcWRyOwogCXVuc2lnbmVkIGxvbmcgY2hzY19wYWdlOwogCkBAIC0zMzEsNiArMzM5LDcgQEAKIAogCWRlYnVnX2luZm9fdCAqZGVidWdfYXJlYTsKIAlzdHJ1Y3QgbXV0ZXggc2V0dXBfbXV0ZXg7CisJc3RydWN0IHFkaW9fZGV2X3BlcmZfc3RhdCBwZXJmX3N0YXQ7CiB9OwogCiAvKiBoZWxwZXIgZnVuY3Rpb25zICovCkBAIC0zNDEsOSArMzUwLDIwIEBACiAJKGlycS0+cWliLnFmbXQgPT0gUURJT19JUURJT19RRk1UIHx8IFwKIAkgY3NzX2dlbmVyYWxfY2hhcmFjdGVyaXN0aWNzLmFpZl9vc2EpCiAKLSNkZWZpbmUgcXBlcmYocWRldixhdHRyKQlxZGV2LT5wZXJmX3N0YXQuYXR0cgotI2RlZmluZSBxcGVyZl9pbmMocSxhdHRyKQlpZiAocS0+aXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQpIFwKLQkJCQkJcS0+aXJxX3B0ci0+cGVyZl9zdGF0LmF0dHIrKworI2RlZmluZSBxcGVyZihfX3FkZXYsIF9fYXR0cikJKChfX3FkZXYpLT5wZXJmX3N0YXQuKF9fYXR0cikpCisKKyNkZWZpbmUgcXBlcmZfaW5jKF9fcSwgX19hdHRyKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXN0cnVjdCBxZGlvX2lycSAqcWRldiA9IChfX3EpLT5pcnFfcHRyOwkJCQlcCisJaWYgKHFkZXYtPnBlcmZfc3RhdF9lbmFibGVkKQkJCQkJXAorCQkocWRldi0+cGVyZl9zdGF0Ll9fYXR0cikrKzsJCQkJXAorfSkKKworc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfc2JhbHNfZXJyb3Ioc3RydWN0IHFkaW9fcSAqcSwgaW50IGNvdW50KQoreworCXEtPnFfc3RhdHMubnJfc2JhbF9lcnJvciArPSBjb3VudDsKKwlxLT5xX3N0YXRzLm5yX3NiYWxfdG90YWwgKz0gY291bnQ7Cit9CiAKIC8qIHRoZSBoaWdoZXN0IGlxZGlvIHF1ZXVlIGlzIHVzZWQgZm9yIG11bHRpY2FzdCAqLwogc3RhdGljIGlubGluZSBpbnQgbXVsdGljYXN0X291dGJvdW5kKHN0cnVjdCBxZGlvX3EgKnEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCmluZGV4IGY0OTc2MWYuLmM5NGViMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCkBAIC02MCw3ICs2MCw3IEBACiAJc2VxX3ByaW50ZihtLCAiZnRjOiAlZCAgbGFzdF9tb3ZlOiAlZFxuIiwgcS0+Zmlyc3RfdG9fY2hlY2ssIHEtPmxhc3RfbW92ZSk7CiAJc2VxX3ByaW50ZihtLCAicG9sbGluZzogJWQgIGFjayBzdGFydDogJWQgIGFjayBjb3VudDogJWRcbiIsCiAJCSAgIHEtPnUuaW4ucG9sbGluZywgcS0+dS5pbi5hY2tfc3RhcnQsIHEtPnUuaW4uYWNrX2NvdW50KTsKLQlzZXFfcHJpbnRmKG0sICJzbHNiIGJ1ZmZlciBzdGF0ZXM6XG4iKTsKKwlzZXFfcHJpbnRmKG0sICJTQkFMIHN0YXRlczpcbiIpOwogCXNlcV9wcmludGYobSwgInwwICAgICAgfDggICAgICB8MTYgICAgIHwyNCAgICAgfDMyICAgICB8NDAgICAgIHw0OCAgICAgfDU2ICA2M3xcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7IGkrKykgewpAQCAtOTcsNiArOTcsMjAgQEAKIAl9CiAJc2VxX3ByaW50ZihtLCAiXG4iKTsKIAlzZXFfcHJpbnRmKG0sICJ8NjQgICAgIHw3MiAgICAgfDgwICAgICB8ODggICAgIHw5NiAgICAgfDEwNCAgICB8MTEyICAgIHwgICAxMjd8XG4iKTsKKworCXNlcV9wcmludGYobSwgIlxuU0JBTCBzdGF0aXN0aWNzOiIpOworCWlmICghcS0+aXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQpIHsKKwkJc2VxX3ByaW50ZihtLCAiIGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2VxX3ByaW50ZihtLCAiXG4xICAgICAgICAgIDIuLiAgICAgICAgNC4uICAgICAgICA4Li4gICAgICAgICIKKwkJICAgIjE2Li4gICAgICAgMzIuLiAgICAgICA2NC4uICAgICAgIDEyN1xuIik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocS0+cV9zdGF0cy5ucl9zYmFscyk7IGkrKykKKwkJc2VxX3ByaW50ZihtLCAiJS0xMHUgIiwgcS0+cV9zdGF0cy5ucl9zYmFsc1tpXSk7CisJc2VxX3ByaW50ZihtLCAiXG5FcnJvciAgICAgIE5PUCAgICAgICAgVG90YWxcbiUtMTB1ICUtMTB1ICUtMTB1XG5cbiIsCisJCSAgIHEtPnFfc3RhdHMubnJfc2JhbF9lcnJvciwgcS0+cV9zdGF0cy5ucl9zYmFsX25vcCwKKwkJICAgcS0+cV9zdGF0cy5ucl9zYmFsX3RvdGFsKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTgxLDkgKzE5NSwxMCBAQAogewogCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBxZGlvX2lycSAqaXJxX3B0ciA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgcWRpb19xICpxOwogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWNoYXIgYnVmWzhdOwotCWludCByZXQ7CisJaW50IHJldCwgaTsKIAogCWlmICghaXJxX3B0cikKIAkJcmV0dXJuIDA7CkBAIC0yMDEsNiArMjE2LDEwIEBACiAJY2FzZSAwOgogCQlpcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCA9IDA7CiAJCW1lbXNldCgmaXJxX3B0ci0+cGVyZl9zdGF0LCAwLCBzaXplb2YoaXJxX3B0ci0+cGVyZl9zdGF0KSk7CisJCWZvcl9lYWNoX2lucHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpCisJCQltZW1zZXQoJnEtPnFfc3RhdHMsIDAsIHNpemVvZihxLT5xX3N0YXRzKSk7CisJCWZvcl9lYWNoX291dHB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKQorCQkJbWVtc2V0KCZxLT5xX3N0YXRzLCAwLCBzaXplb2YocS0+cV9zdGF0cykpOwogCQlicmVhazsKIAljYXNlIDE6CiAJCWlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCmluZGV4IDYyYjY1NGEuLjIzMmVmMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwpAQCAtMzkyLDYgKzM5MiwyMCBAQAogCQlzZXRfYnVmX3N0YXRlKHEsIHEtPnUuaW4uYWNrX3N0YXJ0LCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9zYmFscyhzdHJ1Y3QgcWRpb19xICpxLCBpbnQgY291bnQpCit7CisJaW50IHBvcyA9IDA7CisKKwlxLT5xX3N0YXRzLm5yX3NiYWxfdG90YWwgKz0gY291bnQ7CisJaWYgKGNvdW50ID09IFFESU9fTUFYX0JVRkZFUlNfTUFTSykgeworCQlxLT5xX3N0YXRzLm5yX3NiYWxzWzddKys7CisJCXJldHVybjsKKwl9CisJd2hpbGUgKGNvdW50ID4+PSAxKQorCQlwb3MrKzsKKwlxLT5xX3N0YXRzLm5yX3NiYWxzW3Bvc10rKzsKK30KKwogc3RhdGljIHZvaWQgYW5ub3VuY2VfYnVmZmVyX2Vycm9yKHN0cnVjdCBxZGlvX3EgKnEsIGludCBjb3VudCkKIHsKIAlxLT5xZGlvX2Vycm9yIHw9IFFESU9fRVJST1JfU0xTQl9TVEFURTsKQEAgLTQ4NywxNiArNTAxLDIyIEBACiAJCXEtPmZpcnN0X3RvX2NoZWNrID0gYWRkX2J1ZihxLT5maXJzdF90b19jaGVjaywgY291bnQpOwogCQlpZiAoYXRvbWljX3N1Yihjb3VudCwgJnEtPm5yX2J1Zl91c2VkKSA9PSAwKQogCQkJcXBlcmZfaW5jKHEsIGluYm91bmRfcXVldWVfZnVsbCk7CisJCWlmIChxLT5pcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCkKKwkJCWFjY291bnRfc2JhbHMocSwgY291bnQpOwogCQlicmVhazsKIAljYXNlIFNMU0JfUF9JTlBVVF9FUlJPUjoKIAkJYW5ub3VuY2VfYnVmZmVyX2Vycm9yKHEsIGNvdW50KTsKIAkJLyogcHJvY2VzcyB0aGUgYnVmZmVyLCB0aGUgdXBwZXIgbGF5ZXIgd2lsbCB0YWtlIGNhcmUgb2YgaXQgKi8KIAkJcS0+Zmlyc3RfdG9fY2hlY2sgPSBhZGRfYnVmKHEtPmZpcnN0X3RvX2NoZWNrLCBjb3VudCk7CiAJCWF0b21pY19zdWIoY291bnQsICZxLT5ucl9idWZfdXNlZCk7CisJCWlmIChxLT5pcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCkKKwkJCWFjY291bnRfc2JhbHNfZXJyb3IocSwgY291bnQpOwogCQlicmVhazsKIAljYXNlIFNMU0JfQ1VfSU5QVVRfRU1QVFk6CiAJY2FzZSBTTFNCX1BfSU5QVVRfTk9UX0lOSVQ6CiAJY2FzZSBTTFNCX1BfSU5QVVRfQUNLOgorCQlpZiAocS0+aXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQpCisJCQlxLT5xX3N0YXRzLm5yX3NiYWxfbm9wKys7CiAJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJpbiBub3AiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTUxNCw3ICs1MzQsNyBAQAogCiAJaWYgKChidWZuciAhPSBxLT5sYXN0X21vdmUpIHx8IHEtPnFkaW9fZXJyb3IpIHsKIAkJcS0+bGFzdF9tb3ZlID0gYnVmbnI7Ci0JCWlmICghaXNfdGhpbmludF9pcnEocS0+aXJxX3B0cikgJiYgIU1BQ0hJTkVfSVNfVk0pCisJCWlmICghaXNfdGhpbmludF9pcnEocS0+aXJxX3B0cikgJiYgTUFDSElORV9JU19MUEFSKQogCQkJcS0+dS5pbi50aW1lc3RhbXAgPSBnZXRfdXNlY3MoKTsKIAkJcmV0dXJuIDE7CiAJfSBlbHNlCkBAIC02NDMsMTUgKzY2MywyMSBAQAogCiAJCWF0b21pY19zdWIoY291bnQsICZxLT5ucl9idWZfdXNlZCk7CiAJCXEtPmZpcnN0X3RvX2NoZWNrID0gYWRkX2J1ZihxLT5maXJzdF90b19jaGVjaywgY291bnQpOworCQlpZiAocS0+aXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQpCisJCQlhY2NvdW50X3NiYWxzKHEsIGNvdW50KTsKIAkJYnJlYWs7CiAJY2FzZSBTTFNCX1BfT1VUUFVUX0VSUk9SOgogCQlhbm5vdW5jZV9idWZmZXJfZXJyb3IocSwgY291bnQpOwogCQkvKiBwcm9jZXNzIHRoZSBidWZmZXIsIHRoZSB1cHBlciBsYXllciB3aWxsIHRha2UgY2FyZSBvZiBpdCAqLwogCQlxLT5maXJzdF90b19jaGVjayA9IGFkZF9idWYocS0+Zmlyc3RfdG9fY2hlY2ssIGNvdW50KTsKIAkJYXRvbWljX3N1Yihjb3VudCwgJnEtPm5yX2J1Zl91c2VkKTsKKwkJaWYgKHEtPmlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKQorCQkJYWNjb3VudF9zYmFsc19lcnJvcihxLCBjb3VudCk7CiAJCWJyZWFrOwogCWNhc2UgU0xTQl9DVV9PVVRQVVRfUFJJTUVEOgogCQkvKiB0aGUgYWRhcHRlciBoYXMgbm90IGZldGNoZWQgdGhlIG91dHB1dCB5ZXQgKi8KKwkJaWYgKHEtPmlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKQorCQkJcS0+cV9zdGF0cy5ucl9zYmFsX25vcCsrOwogCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAib3V0IHByaW1lZDolMWQiLCBxLT5ucik7CiAJCWJyZWFrOwogCWNhc2UgU0xTQl9QX09VVFBVVF9OT1RfSU5JVDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKaW5kZXggOGMyZGVhNS4uN2Y0YTc1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3NldHVwLmMKQEAgLTMzMywxMCArMzMzLDEwIEBACiAJaXJxX3B0ci0+cWRyLT5xZGYwW2kgKyBucl0uc2xzYmEgPQogCQkodW5zaWduZWQgbG9uZykmaXJxX3B0cl9xc1tpXS0+c2xzYi52YWxbMF07CiAKLQlpcnFfcHRyLT5xZHItPnFkZjBbaSArIG5yXS5ha2V5ID0gUEFHRV9ERUZBVUxUX0tFWTsKLQlpcnFfcHRyLT5xZHItPnFkZjBbaSArIG5yXS5ia2V5ID0gUEFHRV9ERUZBVUxUX0tFWTsKLQlpcnFfcHRyLT5xZHItPnFkZjBbaSArIG5yXS5ja2V5ID0gUEFHRV9ERUZBVUxUX0tFWTsKLQlpcnFfcHRyLT5xZHItPnFkZjBbaSArIG5yXS5ka2V5ID0gUEFHRV9ERUZBVUxUX0tFWTsKKwlpcnFfcHRyLT5xZHItPnFkZjBbaSArIG5yXS5ha2V5ID0gUEFHRV9ERUZBVUxUX0tFWSA+PiA0OworCWlycV9wdHItPnFkci0+cWRmMFtpICsgbnJdLmJrZXkgPSBQQUdFX0RFRkFVTFRfS0VZID4+IDQ7CisJaXJxX3B0ci0+cWRyLT5xZGYwW2kgKyBucl0uY2tleSA9IFBBR0VfREVGQVVMVF9LRVkgPj4gNDsKKwlpcnFfcHRyLT5xZHItPnFkZjBbaSArIG5yXS5ka2V5ID0gUEFHRV9ERUZBVUxUX0tFWSA+PiA0OwogfQogCiBzdGF0aWMgdm9pZCBzZXR1cF9xZHIoc3RydWN0IHFkaW9faXJxICppcnFfcHRyLApAQCAtMzUwLDcgKzM1MCw3IEBACiAJaXJxX3B0ci0+cWRyLT5pcWRzeiA9IHNpemVvZihzdHJ1Y3QgcWRlc2ZtdDApIC8gNDsgLyogc2l6ZSBpbiB3b3JkcyAqLwogCWlycV9wdHItPnFkci0+b3Fkc3ogPSBzaXplb2Yoc3RydWN0IHFkZXNmbXQwKSAvIDQ7CiAJaXJxX3B0ci0+cWRyLT5xaWJhID0gKHVuc2lnbmVkIGxvbmcpJmlycV9wdHItPnFpYjsKLQlpcnFfcHRyLT5xZHItPnFrZXkgPSBQQUdFX0RFRkFVTFRfS0VZOworCWlycV9wdHItPnFkci0+cWtleSA9IFBBR0VfREVGQVVMVF9LRVkgPj4gNDsKIAogCWZvciAoaSA9IDA7IGkgPCBxZGlvX2luaXQtPm5vX2lucHV0X3FzOyBpKyspCiAJCV9fcWRpb19hbGxvY2F0ZV9maWxsX3FkcihpcnFfcHRyLCBpcnFfcHRyLT5pbnB1dF9xcywgaSwgMCk7CkBAIC0zODIsNyArMzgyLDE1IEBACiAJc3RydWN0IHFkaW9faXJxICppcnFfcHRyID0gaW5pdF9kYXRhLT5jZGV2LT5wcml2YXRlLT5xZGlvX2RhdGE7CiAJaW50IHJjOwogCi0JbWVtc2V0KGlycV9wdHIsIDAsICgoY2hhciAqKSZpcnFfcHRyLT5xZHIpIC0gKChjaGFyICopaXJxX3B0cikpOworCW1lbXNldCgmaXJxX3B0ci0+cWliLCAwLCBzaXplb2YoaXJxX3B0ci0+cWliKSk7CisJbWVtc2V0KCZpcnFfcHRyLT5zaWdhX2ZsYWcsIDAsIHNpemVvZihpcnFfcHRyLT5zaWdhX2ZsYWcpKTsKKwltZW1zZXQoJmlycV9wdHItPmNjdywgMCwgc2l6ZW9mKGlycV9wdHItPmNjdykpOworCW1lbXNldCgmaXJxX3B0ci0+c3NxZF9kZXNjLCAwLCBzaXplb2YoaXJxX3B0ci0+c3NxZF9kZXNjKSk7CisJbWVtc2V0KCZpcnFfcHRyLT5wZXJmX3N0YXQsIDAsIHNpemVvZihpcnFfcHRyLT5wZXJmX3N0YXQpKTsKKworCWlycV9wdHItPmRlYnVnZnNfZGV2ID0gaXJxX3B0ci0+ZGVidWdmc19wZXJmID0gTlVMTDsKKwlpcnFfcHRyLT5zY2hfdG9rZW4gPSBpcnFfcHRyLT5zdGF0ZSA9IGlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkID0gMDsKKwogCS8qIHdpcGVzIHFpYi5hYywgcmVxdWlyZWQgYnkgYXI3MDYzICovCiAJbWVtc2V0KGlycV9wdHItPnFkciwgMCwgc2l6ZW9mKHN0cnVjdCBxZHIpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMKaW5kZXggMDkxZDkwNC4uOTk0MmMxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jCkBAIC0xOTgsOCArMTk4LDggQEAKIAkJLmNvZGUJPSAweDAwMjEsCiAJfTsKIAlzY3NzY19hcmVhLT5vcGVyYXRpb25fY29kZSA9IDA7Ci0Jc2Nzc2NfYXJlYS0+a3MgPSBQQUdFX0RFRkFVTFRfS0VZOwotCXNjc3NjX2FyZWEtPmtjID0gUEFHRV9ERUZBVUxUX0tFWTsKKwlzY3NzY19hcmVhLT5rcyA9IFBBR0VfREVGQVVMVF9LRVkgPj4gNDsKKwlzY3NzY19hcmVhLT5rYyA9IFBBR0VfREVGQVVMVF9LRVkgPj4gNDsKIAlzY3NzY19hcmVhLT5pc2MgPSBRRElPX0FJUlFfSVNDOwogCXNjc3NjX2FyZWEtPnNjaGlkID0gaXJxX3B0ci0+c2NoaWQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMKaW5kZXggYzY4YmUyNC4uYmE1MGZlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KQEAgLTkxMiwxMjYgKzkxMywxMDUgQEAKICAqLwogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqemNyeXB0X2VudHJ5OwogCi1zdGF0aWMgaW50IHNwcmludGNsKHVuc2lnbmVkIGNoYXIgKm91dGFkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCi0JCSAgICB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHZvaWQgc3ByaW50Y2woc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBjaGFyICphZGRyLCB1bnNpZ25lZCBpbnQgbGVuKQogewotCWludCBobCwgaTsKKwlpbnQgaTsKIAotCWhsID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCWhsICs9IHNwcmludGYob3V0YWRkcitobCwgIiUwMXgiLCAodW5zaWduZWQgaW50KSBhZGRyW2ldKTsKLQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICIgIik7Ci0JcmV0dXJuIGhsOworCQlzZXFfcHJpbnRmKG0sICIlMDF4IiwgKHVuc2lnbmVkIGludCkgYWRkcltpXSk7CisJc2VxX3B1dGMobSwgJyAnKTsKIH0KIAotc3RhdGljIGludCBzcHJpbnRydyh1bnNpZ25lZCBjaGFyICpvdXRhZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAotCQkgICAgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyB2b2lkIHNwcmludHJ3KHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgY2hhciAqYWRkciwgdW5zaWduZWQgaW50IGxlbikKIHsKLQlpbnQgaGwsIGlubCwgYywgY3g7CisJaW50IGlubCwgYywgY3g7CiAKLQlobCA9IHNwcmludGYob3V0YWRkciwgIgkgICAiKTsKKwlzZXFfcHJpbnRmKG0sICIJICAgIik7CiAJaW5sID0gMDsKIAlmb3IgKGMgPSAwOyBjIDwgKGxlbiAvIDE2KTsgYysrKSB7Ci0JCWhsICs9IHNwcmludGNsKG91dGFkZHIraGwsIGFkZHIraW5sLCAxNik7CisJCXNwcmludGNsKG0sIGFkZHIraW5sLCAxNik7CiAJCWlubCArPSAxNjsKIAl9CiAJY3ggPSBsZW4lMTY7CiAJaWYgKGN4KSB7Ci0JCWhsICs9IHNwcmludGNsKG91dGFkZHIraGwsIGFkZHIraW5sLCBjeCk7CisJCXNwcmludGNsKG0sIGFkZHIraW5sLCBjeCk7CiAJCWlubCArPSBjeDsKIAl9Ci0JaGwgKz0gc3ByaW50ZihvdXRhZGRyK2hsLCAiXG4iKTsKLQlyZXR1cm4gaGw7CisJc2VxX3B1dGMobSwgJ1xuJyk7CiB9CiAKLXN0YXRpYyBpbnQgc3ByaW50aHgodW5zaWduZWQgY2hhciAqdGl0bGUsIHVuc2lnbmVkIGNoYXIgKm91dGFkZHIsCi0JCSAgICB1bnNpZ25lZCBjaGFyICphZGRyLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHZvaWQgc3ByaW50aHgodW5zaWduZWQgY2hhciAqdGl0bGUsIHN0cnVjdCBzZXFfZmlsZSAqbSwKKwkJICAgICB1bnNpZ25lZCBjaGFyICphZGRyLCB1bnNpZ25lZCBpbnQgbGVuKQogewotCWludCBobCwgaW5sLCByLCByeDsKKwlpbnQgaW5sLCByLCByeDsKIAotCWhsID0gc3ByaW50ZihvdXRhZGRyLCAiXG4lc1xuIiwgdGl0bGUpOworCXNlcV9wcmludGYobSwgIlxuJXNcbiIsIHRpdGxlKTsKIAlpbmwgPSAwOwogCWZvciAociA9IDA7IHIgPCAobGVuIC8gNjQpOyByKyspIHsKLQkJaGwgKz0gc3ByaW50cncob3V0YWRkcitobCwgYWRkcitpbmwsIDY0KTsKKwkJc3ByaW50cncobSwgYWRkcitpbmwsIDY0KTsKIAkJaW5sICs9IDY0OwogCX0KIAlyeCA9IGxlbiAlIDY0OwogCWlmIChyeCkgewotCQlobCArPSBzcHJpbnRydyhvdXRhZGRyK2hsLCBhZGRyK2lubCwgcngpOworCQlzcHJpbnRydyhtLCBhZGRyK2lubCwgcngpOwogCQlpbmwgKz0gcng7CiAJfQotCWhsICs9IHNwcmludGYob3V0YWRkcitobCwgIlxuIik7Ci0JcmV0dXJuIGhsOworCXNlcV9wdXRjKG0sICdcbicpOwogfQogCi1zdGF0aWMgaW50IHNwcmludGh4NCh1bnNpZ25lZCBjaGFyICp0aXRsZSwgdW5zaWduZWQgY2hhciAqb3V0YWRkciwKLQkJICAgICB1bnNpZ25lZCBpbnQgKmFycmF5LCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHZvaWQgc3ByaW50aHg0KHVuc2lnbmVkIGNoYXIgKnRpdGxlLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCisJCSAgICAgIHVuc2lnbmVkIGludCAqYXJyYXksIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0JaW50IGhsLCByOworCWludCByOwogCi0JaGwgPSBzcHJpbnRmKG91dGFkZHIsICJcbiVzXG4iLCB0aXRsZSk7CisJc2VxX3ByaW50ZihtLCAiXG4lc1xuIiwgdGl0bGUpOwogCWZvciAociA9IDA7IHIgPCBsZW47IHIrKykgewogCQlpZiAoKHIgJSA4KSA9PSAwKQotCQkJaGwgKz0gc3ByaW50ZihvdXRhZGRyK2hsLCAiICAgICIpOwotCQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICIlMDhYICIsIGFycmF5W3JdKTsKKwkJCXNlcV9wcmludGYobSwgIiAgICAiKTsKKwkJc2VxX3ByaW50ZihtLCAiJTA4WCAiLCBhcnJheVtyXSk7CiAJCWlmICgociAlIDgpID09IDcpCi0JCQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICJcbiIpOworCQkJc2VxX3B1dGMobSwgJ1xuJyk7CiAJfQotCWhsICs9IHNwcmludGYob3V0YWRkcitobCwgIlxuIik7Ci0JcmV0dXJuIGhsOworCXNlcV9wdXRjKG0sICdcbicpOwogfQogCi1zdGF0aWMgaW50IHpjcnlwdF9zdGF0dXNfcmVhZChjaGFyICpyZXNwX2J1ZmYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgemNyeXB0X3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JdW5zaWduZWQgY2hhciAqd29ya2FyZWE7Ci0JaW50IGxlbjsKKwljaGFyIHdvcmthcmVhW3NpemVvZihpbnQpICogQVBfREVWSUNFU107CiAKLQlsZW4gPSAwOwotCi0JLyogcmVzcF9idWZmIGlzIGEgcGFnZS4gVXNlIHRoZSByaWdodCBoYWxmIGZvciBhIHdvcmsgYXJlYSAqLwotCXdvcmthcmVhID0gcmVzcF9idWZmICsgMjAwMDsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJcbnpjcnlwdCB2ZXJzaW9uOiAlZC4lZC4lZFxuIiwKLQkJWkNSWVBUX1ZFUlNJT04sIFpDUllQVF9SRUxFQVNFLCBaQ1JZUFRfVkFSSUFOVCk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiQ3J5cHRvZ3JhcGhpYyBkb21haW46ICVkXG4iLAotCQkgICAgICAgYXBfZG9tYWluX2luZGV4KTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJUb3RhbCBkZXZpY2UgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X2RldmljZV9jb3VudCk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiUENJQ0EgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX1BDSUNBKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiUENJQ0MgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX1BDSUNDKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiUENJWENDIE1DTDIgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX1BDSVhDQ19NQ0wyKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiUENJWENDIE1DTDMgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX1BDSVhDQ19NQ0wzKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiQ0VYMkMgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX0NFWDJDKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiQ0VYMkEgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX0NFWDJBKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiQ0VYM0MgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX0NFWDNDKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAiQ0VYM0EgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX0NFWDNBKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAicmVxdWVzdHEgY291bnQ6ICVkXG4iLAotCQkgICAgICAgemNyeXB0X3JlcXVlc3RxX2NvdW50KCkpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgInBlbmRpbmdxIGNvdW50OiAlZFxuIiwKLQkJICAgICAgIHpjcnlwdF9wZW5kaW5ncV9jb3VudCgpKTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJUb3RhbCBvcGVuIGhhbmRsZXM6ICVkXG5cbiIsCi0JCSAgICAgICBhdG9taWNfcmVhZCgmemNyeXB0X29wZW5fY291bnQpKTsKKwlzZXFfcHJpbnRmKG0sICJcbnpjcnlwdCB2ZXJzaW9uOiAlZC4lZC4lZFxuIiwKKwkJICAgWkNSWVBUX1ZFUlNJT04sIFpDUllQVF9SRUxFQVNFLCBaQ1JZUFRfVkFSSUFOVCk7CisJc2VxX3ByaW50ZihtLCAiQ3J5cHRvZ3JhcGhpYyBkb21haW46ICVkXG4iLCBhcF9kb21haW5faW5kZXgpOworCXNlcV9wcmludGYobSwgIlRvdGFsIGRldmljZSBjb3VudDogJWRcbiIsIHpjcnlwdF9kZXZpY2VfY291bnQpOworCXNlcV9wcmludGYobSwgIlBDSUNBIGNvdW50OiAlZFxuIiwgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX1BDSUNBKSk7CisJc2VxX3ByaW50ZihtLCAiUENJQ0MgY291bnQ6ICVkXG4iLCB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfUENJQ0MpKTsKKwlzZXFfcHJpbnRmKG0sICJQQ0lYQ0MgTUNMMiBjb3VudDogJWRcbiIsCisJCSAgIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lYQ0NfTUNMMikpOworCXNlcV9wcmludGYobSwgIlBDSVhDQyBNQ0wzIGNvdW50OiAlZFxuIiwKKwkJICAgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX1BDSVhDQ19NQ0wzKSk7CisJc2VxX3ByaW50ZihtLCAiQ0VYMkMgY291bnQ6ICVkXG4iLCB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfQ0VYMkMpKTsKKwlzZXFfcHJpbnRmKG0sICJDRVgyQSBjb3VudDogJWRcbiIsIHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9DRVgyQSkpOworCXNlcV9wcmludGYobSwgIkNFWDNDIGNvdW50OiAlZFxuIiwgemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX0NFWDNDKSk7CisJc2VxX3ByaW50ZihtLCAiQ0VYM0EgY291bnQ6ICVkXG4iLCB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfQ0VYM0EpKTsKKwlzZXFfcHJpbnRmKG0sICJyZXF1ZXN0cSBjb3VudDogJWRcbiIsIHpjcnlwdF9yZXF1ZXN0cV9jb3VudCgpKTsKKwlzZXFfcHJpbnRmKG0sICJwZW5kaW5ncSBjb3VudDogJWRcbiIsIHpjcnlwdF9wZW5kaW5ncV9jb3VudCgpKTsKKwlzZXFfcHJpbnRmKG0sICJUb3RhbCBvcGVuIGhhbmRsZXM6ICVkXG5cbiIsCisJCSAgIGF0b21pY19yZWFkKCZ6Y3J5cHRfb3Blbl9jb3VudCkpOwogCXpjcnlwdF9zdGF0dXNfbWFzayh3b3JrYXJlYSk7Ci0JbGVuICs9IHNwcmludGh4KCJPbmxpbmUgZGV2aWNlczogMT1QQ0lDQSAyPVBDSUNDIDM9UENJWENDKE1DTDIpICIKLQkJCSI0PVBDSVhDQyhNQ0wzKSA1PUNFWDJDIDY9Q0VYMkEgNz1DRVgzQyA4PUNFWDNBIiwKLQkJCXJlc3BfYnVmZitsZW4sIHdvcmthcmVhLCBBUF9ERVZJQ0VTKTsKKwlzcHJpbnRoeCgiT25saW5lIGRldmljZXM6IDE9UENJQ0EgMj1QQ0lDQyAzPVBDSVhDQyhNQ0wyKSAiCisJCSAiND1QQ0lYQ0MoTUNMMykgNT1DRVgyQyA2PUNFWDJBIDc9Q0VYM0MgOD1DRVgzQSIsCisJCSBtLCB3b3JrYXJlYSwgQVBfREVWSUNFUyk7CiAJemNyeXB0X3FkZXB0aF9tYXNrKHdvcmthcmVhKTsKLQlsZW4gKz0gc3ByaW50aHgoIldhaXRpbmcgd29yayBlbGVtZW50IGNvdW50cyIsCi0JCQlyZXNwX2J1ZmYrbGVuLCB3b3JrYXJlYSwgQVBfREVWSUNFUyk7CisJc3ByaW50aHgoIldhaXRpbmcgd29yayBlbGVtZW50IGNvdW50cyIsIG0sIHdvcmthcmVhLCBBUF9ERVZJQ0VTKTsKIAl6Y3J5cHRfcGVyZGV2X3JlcWNudCgoaW50ICopIHdvcmthcmVhKTsKLQlsZW4gKz0gc3ByaW50aHg0KCJQZXItZGV2aWNlIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgcmVxdWVzdCBjb3VudHMiLAotCQkJIHJlc3BfYnVmZitsZW4sKHVuc2lnbmVkIGludCAqKSB3b3JrYXJlYSwgQVBfREVWSUNFUyk7Ci0JKmVvZiA9IDE7Ci0JbWVtc2V0KCh2b2lkICopIHdvcmthcmVhLCAweDAwLCBBUF9ERVZJQ0VTICogc2l6ZW9mKHVuc2lnbmVkIGludCkpOwotCXJldHVybiBsZW47CisJc3ByaW50aHg0KCJQZXItZGV2aWNlIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgcmVxdWVzdCBjb3VudHMiLAorCQkgIG0sICh1bnNpZ25lZCBpbnQgKikgd29ya2FyZWEsIEFQX0RFVklDRVMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpjcnlwdF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHpjcnlwdF9wcm9jX3Nob3csIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCB6Y3J5cHRfZGlzYWJsZV9jYXJkKGludCBpbmRleCkKQEAgLTEwNjEsMTEgKzEwNDEsMTEgQEAKIAlzcGluX3VubG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKIH0KIAotc3RhdGljIGludCB6Y3J5cHRfc3RhdHVzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCitzdGF0aWMgc3NpemVfdCB6Y3J5cHRfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAl1bnNpZ25lZCBjaGFyICpsYnVmLCAqcHRyOwotCXVuc2lnbmVkIGxvbmcgbG9jYWxfY291bnQ7CisJc2l6ZV90IGxvY2FsX2NvdW50OwogCWludCBqOwogCiAJaWYgKGNvdW50IDw9IDApCkBAIC0xMTE1LDYgKzEwOTUsMTUgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHpjcnlwdF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHpjcnlwdF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gemNyeXB0X3Byb2Nfd3JpdGUsCit9OworCiBzdGF0aWMgaW50IHpjcnlwdF9ybmdfZGV2aWNlX2NvdW50Owogc3RhdGljIHUzMiAqemNyeXB0X3JuZ19idWZmZXI7CiBzdGF0aWMgaW50IHpjcnlwdF9ybmdfYnVmZmVyX2luZGV4OwpAQCAtMTE5NywxNCArMTE4NiwxMSBAQAogCQlnb3RvIG91dDsKIAogCS8qIFNldCB1cCB0aGUgcHJvYyBmaWxlIHN5c3RlbSAqLwotCXpjcnlwdF9lbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkcml2ZXIvejkwY3J5cHQiLCAwNjQ0LCBOVUxMKTsKKwl6Y3J5cHRfZW50cnkgPSBwcm9jX2NyZWF0ZSgiZHJpdmVyL3o5MGNyeXB0IiwgMDY0NCwgTlVMTCwgJnpjcnlwdF9wcm9jX2ZvcHMpOwogCWlmICghemNyeXB0X2VudHJ5KSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXRfbWlzYzsKIAl9Ci0JemNyeXB0X2VudHJ5LT5kYXRhID0gTlVMTDsKLQl6Y3J5cHRfZW50cnktPnJlYWRfcHJvYyA9IHpjcnlwdF9zdGF0dXNfcmVhZDsKLQl6Y3J5cHRfZW50cnktPndyaXRlX3Byb2MgPSB6Y3J5cHRfc3RhdHVzX3dyaXRlOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9rdm0va3ZtX3ZpcnRpby5jIGIvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMKaW5kZXggMjkzMGZjNy4uYjJmYzRmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMKQEAgLTM0MCwxMSArMzQwLDExIEBACiAJCXJldHVybjsKIAogCS8qIFRoZSBMU0IgbWlnaHQgYmUgb3ZlcmxvYWRlZCwgd2UgaGF2ZSB0byBtYXNrIGl0ICovCi0JdnEgPSAoc3RydWN0IHZpcnRxdWV1ZSAqKSAoKCoobG9uZyAqKSBfX0xDX1BGQVVMVF9JTlRQQVJNKSAmIH4xVUwpOworCXZxID0gKHN0cnVjdCB2aXJ0cXVldWUgKikoUzM5MF9sb3djb3JlLmV4dF9wYXJhbXMyICYgfjFVTCk7CiAKIAkvKiBXZSB1c2UgdGhlIExTQiBvZiBleHRwYXJhbSwgdG8gZGVjaWRlLCBpZiB0aGlzIGludGVycnVwdCBpcyBhIGNvbmZpZwogCSAqIGNoYW5nZSBvciBhICJzdGFuZGFyZCIgaW50ZXJydXB0ICovCi0JY29uZmlnX2NoYW5nZWQgPSAgKCooaW50ICopICBfX0xDX0VYVF9QQVJBTVMgJiAxKTsKKwljb25maWdfY2hhbmdlZCA9IFMzOTBfbG93Y29yZS5leHRfcGFyYW1zICYgMTsKIAogCWlmIChjb25maWdfY2hhbmdlZCkgewogCQlzdHJ1Y3QgdmlydGlvX2RyaXZlciAqZHJ2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKaW5kZXggOWQwYzk0MS4uNjZkNmMwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIE1vZHVsZSBpbnRlcmZhY2UgYW5kIGhhbmRsaW5nIG9mIHpmY3AgZGF0YSBzdHJ1Y3R1cmVzLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOQorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDEwCiAgKi8KIAogLyoKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgInpmY3BfZXh0LmgiCiAjaW5jbHVkZSAiemZjcF9mYy5oIgorI2luY2x1ZGUgInpmY3BfcmVxbGlzdC5oIgogCiAjZGVmaW5lIFpGQ1BfQlVTX0lEX1NJWkUJMjAKIApAQCAtNDksMzYgKzUwLDYgQEAKIAlyZXR1cm4ga21lbV9jYWNoZV9jcmVhdGUobmFtZSwgc2l6ZSwgcm91bmR1cF9wb3dfb2ZfdHdvKHNpemUpLCAwLCBOVUxMKTsKIH0KIAotc3RhdGljIGludCB6ZmNwX3JlcWxpc3RfYWxsb2Moc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgaWR4OwotCi0JYWRhcHRlci0+cmVxX2xpc3QgPSBrY2FsbG9jKFJFUVVFU1RfTElTVF9TSVpFLCBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksCi0JCQkJICAgIEdGUF9LRVJORUwpOwotCWlmICghYWRhcHRlci0+cmVxX2xpc3QpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBSRVFVRVNUX0xJU1RfU0laRTsgaWR4KyspCi0JCUlOSVRfTElTVF9IRUFEKCZhZGFwdGVyLT5yZXFfbGlzdFtpZHhdKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiB6ZmNwX3JlcWxpc3RfaXNlbXB0eSAtIGlzIHRoZSByZXF1ZXN0IGxpc3QgZW1wdHkKLSAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX2FkYXB0ZXIKLSAqCi0gKiBSZXR1cm5zOiB0cnVlIGlmIGxpc3QgaXMgZW1wdHksIGZhbHNlIG90aGVyd2lzZQotICovCi1pbnQgemZjcF9yZXFsaXN0X2lzZW1wdHkoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKLXsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBSRVFVRVNUX0xJU1RfU0laRTsgaWR4KyspCi0JCWlmICghbGlzdF9lbXB0eSgmYWRhcHRlci0+cmVxX2xpc3RbaWR4XSkpCi0JCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IHpmY3BfaW5pdF9kZXZpY2VfY29uZmlndXJlKGNoYXIgKmJ1c2lkLCB1NjQgd3dwbiwgdTY0IGx1bikKIHsKIAlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKQEAgLTExMCw3ICs4MSw3IEBACiAJZmx1c2hfd29yaygmdW5pdC0+c2NzaV93b3JrKTsKIAogb3V0X3VuaXQ6Ci0JcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogb3V0X3BvcnQ6CiAJemZjcF9jY3dfYWRhcHRlcl9wdXQoYWRhcHRlcik7CiBvdXRfY2N3X2RldmljZToKQEAgLTI1NSw3ICsyMjYsNyBAQAogCXJlYWRfbG9ja19pcnFzYXZlKCZwb3J0LT51bml0X2xpc3RfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkodW5pdCwgJnBvcnQtPnVuaXRfbGlzdCwgbGlzdCkKIAkJaWYgKHVuaXQtPmZjcF9sdW4gPT0gZmNwX2x1bikgewotCQkJaWYgKCFnZXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpKQorCQkJaWYgKCFnZXRfZGV2aWNlKCZ1bml0LT5kZXYpKQogCQkJCXVuaXQgPSBOVUxMOwogCQkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+dW5pdF9saXN0X2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybiB1bml0OwpAQCAtMjgwLDcgKzI1MSw3IEBACiAJcmVhZF9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnBvcnRfbGlzdF9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmYWRhcHRlci0+cG9ydF9saXN0LCBsaXN0KQogCQlpZiAocG9ydC0+d3dwbiA9PSB3d3BuKSB7Ci0JCQlpZiAoIWdldF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSkpCisJCQlpZiAoIWdldF9kZXZpY2UoJnBvcnQtPmRldikpCiAJCQkJcG9ydCA9IE5VTEw7CiAJCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5wb3J0X2xpc3RfbG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIHBvcnQ7CkBAIC0yOTgsMTAgKzI2OSw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIHpmY3BfdW5pdF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHpmY3BfdW5pdCwKLQkJCQkJICAgICAgc3lzZnNfZGV2aWNlKTsKKwlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHpmY3BfdW5pdCwgZGV2KTsKIAotCXB1dF9kZXZpY2UoJnVuaXQtPnBvcnQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmdW5pdC0+cG9ydC0+ZGV2KTsKIAlrZnJlZSh1bml0KTsKIH0KIApAQCAtMzE4LDExICsyODgsMTEgQEAKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCi0JZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlnZXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCiAJdW5pdCA9IHpmY3BfZ2V0X3VuaXRfYnlfbHVuKHBvcnQsIGZjcF9sdW4pOwogCWlmICh1bml0KSB7Ci0JCXB1dF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSk7CisJCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7CiAJCXJldHZhbCA9IC1FRVhJU1Q7CiAJCWdvdG8gZXJyX291dDsKIAl9CkBAIC0zMzMsMTAgKzMwMywxMCBAQAogCiAJdW5pdC0+cG9ydCA9IHBvcnQ7CiAJdW5pdC0+ZmNwX2x1biA9IGZjcF9sdW47Ci0JdW5pdC0+c3lzZnNfZGV2aWNlLnBhcmVudCA9ICZwb3J0LT5zeXNmc19kZXZpY2U7Ci0JdW5pdC0+c3lzZnNfZGV2aWNlLnJlbGVhc2UgPSB6ZmNwX3VuaXRfcmVsZWFzZTsKKwl1bml0LT5kZXYucGFyZW50ID0gJnBvcnQtPmRldjsKKwl1bml0LT5kZXYucmVsZWFzZSA9IHpmY3BfdW5pdF9yZWxlYXNlOwogCi0JaWYgKGRldl9zZXRfbmFtZSgmdW5pdC0+c3lzZnNfZGV2aWNlLCAiMHglMDE2bGx4IiwKKwlpZiAoZGV2X3NldF9uYW1lKCZ1bml0LT5kZXYsICIweCUwMTZsbHgiLAogCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGZjcF9sdW4pKSB7CiAJCWtmcmVlKHVuaXQpOwogCQlnb3RvIGVycl9vdXQ7CkBAIC0zNTMsMTMgKzMyMywxMiBAQAogCXVuaXQtPmxhdGVuY2llcy5jbWQuY2hhbm5lbC5taW4gPSAweEZGRkZGRkZGOwogCXVuaXQtPmxhdGVuY2llcy5jbWQuZmFicmljLm1pbiA9IDB4RkZGRkZGRkY7CiAKLQlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZ1bml0LT5zeXNmc19kZXZpY2UpKSB7Ci0JCXB1dF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSk7CisJaWYgKGRldmljZV9yZWdpc3RlcigmdW5pdC0+ZGV2KSkgeworCQlwdXRfZGV2aWNlKCZ1bml0LT5kZXYpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JaWYgKHN5c2ZzX2NyZWF0ZV9ncm91cCgmdW5pdC0+c3lzZnNfZGV2aWNlLmtvYmosCi0JCQkgICAgICAgJnpmY3Bfc3lzZnNfdW5pdF9hdHRycykpCisJaWYgKHN5c2ZzX2NyZWF0ZV9ncm91cCgmdW5pdC0+ZGV2LmtvYmosICZ6ZmNwX3N5c2ZzX3VuaXRfYXR0cnMpKQogCQlnb3RvIGVycl9vdXRfcHV0OwogCiAJd3JpdGVfbG9ja19pcnEoJnBvcnQtPnVuaXRfbGlzdF9sb2NrKTsKQEAgLTM3MSw5ICszNDAsOSBAQAogCXJldHVybiB1bml0OwogCiBlcnJfb3V0X3B1dDoKLQlkZXZpY2VfdW5yZWdpc3RlcigmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwlkZXZpY2VfdW5yZWdpc3RlcigmdW5pdC0+ZGV2KTsKIGVycl9vdXQ6Ci0JcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCXJldHVybiBFUlJfUFRSKHJldHZhbCk7CiB9CiAKQEAgLTUzOSw3ICs1MDgsOCBAQAogCWlmICh6ZmNwX2FsbG9jYXRlX2xvd19tZW1fYnVmZmVycyhhZGFwdGVyKSkKIAkJZ290byBmYWlsZWQ7CiAKLQlpZiAoemZjcF9yZXFsaXN0X2FsbG9jKGFkYXB0ZXIpKQorCWFkYXB0ZXItPnJlcV9saXN0ID0gemZjcF9yZXFsaXN0X2FsbG9jKCk7CisJaWYgKCFhZGFwdGVyLT5yZXFfbGlzdCkKIAkJZ290byBmYWlsZWQ7CiAKIAlpZiAoemZjcF9kYmZfYWRhcHRlcl9yZWdpc3RlcihhZGFwdGVyKSkKQEAgLTU2MCw4ICs1MzAsNiBAQAogCUlOSVRfTElTVF9IRUFEKCZhZGFwdGVyLT5lcnBfcmVhZHlfaGVhZCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPmVycF9ydW5uaW5nX2hlYWQpOwogCi0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOwotCiAJcndsb2NrX2luaXQoJmFkYXB0ZXItPmVycF9sb2NrKTsKIAlyd2xvY2tfaW5pdCgmYWRhcHRlci0+YWJvcnRfbG9jayk7CiAKQEAgLTY0MCw4ICs2MDgsNyBAQAogCiBzdGF0aWMgdm9pZCB6ZmNwX3BvcnRfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB6ZmNwX3BvcnQsCi0JCQkJCSAgICAgIHN5c2ZzX2RldmljZSk7CisJc3RydWN0IHpmY3BfcG9ydCAqcG9ydCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB6ZmNwX3BvcnQsIGRldik7CiAKIAl6ZmNwX2Njd19hZGFwdGVyX3B1dChwb3J0LT5hZGFwdGVyKTsKIAlrZnJlZShwb3J0KTsKQEAgLTY2OSw3ICs2MzYsNyBAQAogCiAJcG9ydCA9IHpmY3BfZ2V0X3BvcnRfYnlfd3dwbihhZGFwdGVyLCB3d3BuKTsKIAlpZiAocG9ydCkgewotCQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCQlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCQlyZXR2YWwgPSAtRUVYSVNUOwogCQlnb3RvIGVycl9vdXQ7CiAJfQpAQCAtNjg5LDIyICs2NTYsMjEgQEAKIAlwb3J0LT5kX2lkID0gZF9pZDsKIAlwb3J0LT53d3BuID0gd3dwbjsKIAlwb3J0LT5ycG9ydF90YXNrID0gUlBPUlRfTk9ORTsKLQlwb3J0LT5zeXNmc19kZXZpY2UucGFyZW50ID0gJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldjsKLQlwb3J0LT5zeXNmc19kZXZpY2UucmVsZWFzZSA9IHpmY3BfcG9ydF9yZWxlYXNlOworCXBvcnQtPmRldi5wYXJlbnQgPSAmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2OworCXBvcnQtPmRldi5yZWxlYXNlID0gemZjcF9wb3J0X3JlbGVhc2U7CiAKLQlpZiAoZGV2X3NldF9uYW1lKCZwb3J0LT5zeXNmc19kZXZpY2UsICIweCUwMTZsbHgiLAotCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpd3dwbikpIHsKKwlpZiAoZGV2X3NldF9uYW1lKCZwb3J0LT5kZXYsICIweCUwMTZsbHgiLCAodW5zaWduZWQgbG9uZyBsb25nKXd3cG4pKSB7CiAJCWtmcmVlKHBvcnQpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCXJldHZhbCA9IC1FSU5WQUw7CiAKLQlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZwb3J0LT5zeXNmc19kZXZpY2UpKSB7Ci0JCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJaWYgKGRldmljZV9yZWdpc3RlcigmcG9ydC0+ZGV2KSkgeworCQlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JaWYgKHN5c2ZzX2NyZWF0ZV9ncm91cCgmcG9ydC0+c3lzZnNfZGV2aWNlLmtvYmosCisJaWYgKHN5c2ZzX2NyZWF0ZV9ncm91cCgmcG9ydC0+ZGV2LmtvYmosCiAJCQkgICAgICAgJnpmY3Bfc3lzZnNfcG9ydF9hdHRycykpCiAJCWdvdG8gZXJyX291dF9wdXQ7CiAKQEAgLTcxNyw3ICs2ODMsNyBAQAogCXJldHVybiBwb3J0OwogCiBlcnJfb3V0X3B1dDoKLQlkZXZpY2VfdW5yZWdpc3RlcigmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlkZXZpY2VfdW5yZWdpc3RlcigmcG9ydC0+ZGV2KTsKIGVycl9vdXQ6CiAJemZjcF9jY3dfYWRhcHRlcl9wdXQoYWRhcHRlcik7CiAJcmV0dXJuIEVSUl9QVFIocmV0dmFsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCmluZGV4IGMyMmNiNzIuLmNlMWNjN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwpAQCAtMywxMyArMywxNCBAQAogICoKICAqIFJlZ2lzdHJhdGlvbiBhbmQgY2FsbGJhY2sgZm9yIHRoZSBzMzkwIGNvbW1vbiBJL08gbGF5ZXIuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA5CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMTAKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgogI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAogCiAjaW5jbHVkZSAiemZjcF9leHQuaCIKKyNpbmNsdWRlICJ6ZmNwX3JlcWxpc3QuaCIKIAogI2RlZmluZSBaRkNQX01PREVMX1BSSVYgMHg0CiAKQEAgLTEyMiwxMiArMTIzLDEwIEBACiAJemZjcF9jY3dfYWRhcHRlcl9wdXQoYWRhcHRlcik7IC8qIHB1dCBmcm9tIHpmY3BfY2N3X2FkYXB0ZXJfYnlfY2RldiAqLwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVuaXQsIHUsICZ1bml0X3JlbW92ZV9saCwgbGlzdCkKLQkJemZjcF9kZXZpY2VfdW5yZWdpc3RlcigmdW5pdC0+c3lzZnNfZGV2aWNlLAotCQkJCSAgICAgICAmemZjcF9zeXNmc191bml0X2F0dHJzKTsKKwkJemZjcF9kZXZpY2VfdW5yZWdpc3RlcigmdW5pdC0+ZGV2LCAmemZjcF9zeXNmc191bml0X2F0dHJzKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3J0LCBwLCAmcG9ydF9yZW1vdmVfbGgsIGxpc3QpCi0JCXpmY3BfZGV2aWNlX3VucmVnaXN0ZXIoJnBvcnQtPnN5c2ZzX2RldmljZSwKLQkJCQkgICAgICAgJnpmY3Bfc3lzZnNfcG9ydF9hdHRycyk7CisJCXpmY3BfZGV2aWNlX3VucmVnaXN0ZXIoJnBvcnQtPmRldiwgJnpmY3Bfc3lzZnNfcG9ydF9hdHRycyk7CiAKIAl6ZmNwX2FkYXB0ZXJfdW5yZWdpc3RlcihhZGFwdGVyKTsKIH0KQEAgLTE2Miw3ICsxNjEsNyBAQAogCX0KIAogCS8qIGluaXRpYWxpemUgcmVxdWVzdCBjb3VudGVyICovCi0JQlVHX09OKCF6ZmNwX3JlcWxpc3RfaXNlbXB0eShhZGFwdGVyKSk7CisJQlVHX09OKCF6ZmNwX3JlcWxpc3RfaXNlbXB0eShhZGFwdGVyLT5yZXFfbGlzdCkpOwogCWFkYXB0ZXItPnJlcV9ubyA9IDA7CiAKIAl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgImNjc29ubDEiLCBOVUxMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmMKaW5kZXggNzM2OWM4OS4uN2ExNDlmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jCkBAIC0xNDAsOSArMTQwLDkgQEAKIAltZW1jcHkocmVzcG9uc2UtPmZzZl9zdGF0dXNfcXVhbCwKIAkgICAgICAgZnNmX3N0YXR1c19xdWFsLCBGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFKTsKIAlyZXNwb25zZS0+ZnNmX3JlcV9zdGF0dXMgPSBmc2ZfcmVxLT5zdGF0dXM7Ci0JcmVzcG9uc2UtPnNiYWxfZmlyc3QgPSBmc2ZfcmVxLT5xdWV1ZV9yZXEuc2JhbF9maXJzdDsKLQlyZXNwb25zZS0+c2JhbF9sYXN0ID0gZnNmX3JlcS0+cXVldWVfcmVxLnNiYWxfbGFzdDsKLQlyZXNwb25zZS0+c2JhbF9yZXNwb25zZSA9IGZzZl9yZXEtPnF1ZXVlX3JlcS5zYmFsX3Jlc3BvbnNlOworCXJlc3BvbnNlLT5zYmFsX2ZpcnN0ID0gZnNmX3JlcS0+cWRpb19yZXEuc2JhbF9maXJzdDsKKwlyZXNwb25zZS0+c2JhbF9sYXN0ID0gZnNmX3JlcS0+cWRpb19yZXEuc2JhbF9sYXN0OworCXJlc3BvbnNlLT5zYmFsX3Jlc3BvbnNlID0gZnNmX3JlcS0+cWRpb19yZXEuc2JhbF9yZXNwb25zZTsKIAlyZXNwb25zZS0+cG9vbCA9IGZzZl9yZXEtPnBvb2wgIT0gTlVMTDsKIAlyZXNwb25zZS0+ZXJwX2FjdGlvbiA9ICh1bnNpZ25lZCBsb25nKWZzZl9yZXEtPmVycF9hY3Rpb247CiAKQEAgLTU3Niw3ICs1NzYsOCBAQAogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkYmYtPmFkYXB0ZXI7CiAKIAl6ZmNwX2RiZl9yZWNfdGFyZ2V0KGlkLCByZWYsIGRiZiwgJmFkYXB0ZXItPnN0YXR1cywKLQkJCQkgICZhZGFwdGVyLT5lcnBfY291bnRlciwgMCwgMCwgMCk7CisJCQkgICAgJmFkYXB0ZXItPmVycF9jb3VudGVyLCAwLCAwLAorCQkJICAgIFpGQ1BfREJGX0lOVkFMSURfTFVOKTsKIH0KIAogLyoqCkBAIC01OTAsOCArNTkxLDggQEAKIAlzdHJ1Y3QgemZjcF9kYmYgKmRiZiA9IHBvcnQtPmFkYXB0ZXItPmRiZjsKIAogCXpmY3BfZGJmX3JlY190YXJnZXQoaWQsIHJlZiwgZGJmLCAmcG9ydC0+c3RhdHVzLAotCQkJCSAgJnBvcnQtPmVycF9jb3VudGVyLCBwb3J0LT53d3BuLCBwb3J0LT5kX2lkLAotCQkJCSAgMCk7CisJCQkgICAgJnBvcnQtPmVycF9jb3VudGVyLCBwb3J0LT53d3BuLCBwb3J0LT5kX2lkLAorCQkJICAgIFpGQ1BfREJGX0lOVkFMSURfTFVOKTsKIH0KIAogLyoqCkBAIC02NDIsMTAgKzY0Myw5IEBACiAJCXItPnUudHJpZ2dlci5wcyA9IGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpOwogCQlyLT51LnRyaWdnZXIud3dwbiA9IHBvcnQtPnd3cG47CiAJfQotCWlmICh1bml0KSB7CisJaWYgKHVuaXQpCiAJCXItPnUudHJpZ2dlci51cyA9IGF0b21pY19yZWFkKCZ1bml0LT5zdGF0dXMpOwotCQlyLT51LnRyaWdnZXIuZmNwX2x1biA9IHVuaXQtPmZjcF9sdW47Ci0JfQorCXItPnUudHJpZ2dlci5mY3BfbHVuID0gdW5pdCA/IHVuaXQtPmZjcF9sdW4gOiBaRkNQX0RCRl9JTlZBTElEX0xVTjsKIAlkZWJ1Z19ldmVudChkYmYtPnJlYywgYWN0aW9uID8gMSA6IDQsIHIsIHNpemVvZigqcikpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiZi0+cmVjX2xvY2ssIGZsYWdzKTsKIH0KQEAgLTY2OCw3ICs2NjgsNyBAQAogCXItPnUuYWN0aW9uLmFjdGlvbiA9ICh1bnNpZ25lZCBsb25nKWVycF9hY3Rpb247CiAJci0+dS5hY3Rpb24uc3RhdHVzID0gZXJwX2FjdGlvbi0+c3RhdHVzOwogCXItPnUuYWN0aW9uLnN0ZXAgPSBlcnBfYWN0aW9uLT5zdGVwOwotCXItPnUuYWN0aW9uLmZzZl9yZXEgPSAodW5zaWduZWQgbG9uZyllcnBfYWN0aW9uLT5mc2ZfcmVxOworCXItPnUuYWN0aW9uLmZzZl9yZXEgPSBlcnBfYWN0aW9uLT5mc2ZfcmVxX2lkOwogCWRlYnVnX2V2ZW50KGRiZi0+cmVjLCA1LCByLCBzaXplb2YoKnIpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYmYtPnJlY19sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuaAppbmRleCA4YjdmZDlhLi40NTdlMDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmgKQEAgLTMwLDYgKzMwLDggQEAKICNkZWZpbmUgWkZDUF9EQkZfVEFHX1NJWkUgICAgICA0CiAjZGVmaW5lIFpGQ1BfREJGX0lEX1NJWkUgICAgICAgNwogCisjZGVmaW5lIFpGQ1BfREJGX0lOVkFMSURfTFVOCTB4RkZGRkZGRkZGRkZGRkZGRnVsbAorCiBzdHJ1Y3QgemZjcF9kYmZfZHVtcCB7CiAJdTggdGFnW1pGQ1BfREJGX1RBR19TSVpFXTsKIAl1MzIgdG90YWxfc2l6ZTsJCS8qIHNpemUgb2YgdG90YWwgZHVtcCBkYXRhICovCkBAIC0xOTIsMTAgKzE5NCwxMCBAQAogCQlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZF9jdF9yZXNwb25zZSBjdF9yZXNwOwogCQlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZF9lbHMgZWxzOwogCX0gdTsKLSNkZWZpbmUgWkZDUF9EQkZfU0FOX01BWF9QQVlMT0FEIDEwMjQKLQl1OCBwYXlsb2FkWzMyXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisjZGVmaW5lIFpGQ1BfREJGX1NBTl9NQVhfUEFZTE9BRCAxMDI0CisKIHN0cnVjdCB6ZmNwX2RiZl9zY3NpX3JlY29yZCB7CiAJdTggdGFnW1pGQ1BfREJGX1RBR19TSVpFXTsKIAl1OCB0YWcyW1pGQ1BfREJGX1RBR19TSVpFXTsKQEAgLTMwMSwxNyArMzAzLDMxIEBACiAKIC8qKgogICogemZjcF9kYmZfc2NzaV9yZXN1bHQgLSB0cmFjZSBldmVudCBmb3IgU0NTSSBjb21tYW5kIGNvbXBsZXRpb24KLSAqIEB0YWc6IHRhZyBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBTQ1NJIGNvbW1hbmQKLSAqIEBsZXZlbDogdHJhY2UgbGV2ZWwgYXBwbGljYWJsZSBmb3IgdGhpcyBldmVudAotICogQGFkYXB0ZXI6IGFkYXB0ZXIgdGhhdCBoYXMgYmVlbiB1c2VkIHRvIGlzc3VlIHRoZSBTQ1NJIGNvbW1hbmQKKyAqIEBkYmY6IGFkYXB0ZXIgZGJmIHRyYWNlCiAgKiBAc2NtZDogU0NTSSBjb21tYW5kIHBvaW50ZXIKLSAqIEBmc2ZfcmVxOiByZXF1ZXN0IHVzZWQgdG8gaXNzdWUgU0NTSSBjb21tYW5kIChtaWdodCBiZSBOVUxMKQorICogQHJlcTogRlNGIHJlcXVlc3QgdXNlZCB0byBpc3N1ZSBTQ1NJIGNvbW1hbmQKICAqLwogc3RhdGljIGlubGluZQotdm9pZCB6ZmNwX2RiZl9zY3NpX3Jlc3VsdChjb25zdCBjaGFyICp0YWcsIGludCBsZXZlbCwgc3RydWN0IHpmY3BfZGJmICpkYmYsCi0JCQkgIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCit2b2lkIHpmY3BfZGJmX3Njc2lfcmVzdWx0KHN0cnVjdCB6ZmNwX2RiZiAqZGJmLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLAorCQkJICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCiB7Ci0JemZjcF9kYmZfc2NzaSgicnNsdCIsIHRhZywgbGV2ZWwsIGRiZiwgc2NtZCwgZnNmX3JlcSwgMCk7CisJaWYgKHNjbWQtPnJlc3VsdCAhPSAwKQorCQl6ZmNwX2RiZl9zY3NpKCJyc2x0IiwgImVycm8iLCAzLCBkYmYsIHNjbWQsIHJlcSwgMCk7CisJZWxzZSBpZiAoc2NtZC0+cmV0cmllcyA+IDApCisJCXpmY3BfZGJmX3Njc2koInJzbHQiLCAicmV0ciIsIDQsIGRiZiwgc2NtZCwgcmVxLCAwKTsKKwllbHNlCisJCXpmY3BfZGJmX3Njc2koInJzbHQiLCAibm9ybSIsIDYsIGRiZiwgc2NtZCwgcmVxLCAwKTsKK30KKworLyoqCisgKiB6ZmNwX2RiZl9zY3NpX2ZhaWxfc2VuZCAtIHRyYWNlIGV2ZW50IGZvciBmYWlsdXJlIHRvIHNlbmQgU0NTSSBjb21tYW5kCisgKiBAZGJmOiBhZGFwdGVyIGRiZiB0cmFjZQorICogQHNjbWQ6IFNDU0kgY29tbWFuZCBwb2ludGVyCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgemZjcF9kYmZfc2NzaV9mYWlsX3NlbmQoc3RydWN0IHpmY3BfZGJmICpkYmYsIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCit7CisJemZjcF9kYmZfc2NzaSgicnNsdCIsICJmYWlsIiwgNCwgZGJmLCBzY21kLCBOVUxMLCAwKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaAppbmRleCBlMWI1Yjg4Li43MTMxYzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKQEAgLTMsNyArMyw3IEBACiAgKgogICogR2xvYmFsIGRlZmluaXRpb25zIGZvciB0aGUgemZjcCBkZXZpY2UgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOQorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDEwCiAgKi8KIAogI2lmbmRlZiBaRkNQX0RFRl9ICkBAIC0zMywxNSArMzMsMTMgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2JzZ19mYy5oPgogI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KLSNpbmNsdWRlIDxhc20vcWRpby5oPgogI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KICNpbmNsdWRlIDxhc20vc3lzaW5mby5oPgogI2luY2x1ZGUgInpmY3BfZnNmLmgiCisjaW5jbHVkZSAiemZjcF9xZGlvLmgiCiAKLS8qKioqKioqKioqKioqKioqKioqKiogR0VORVJBTCBERUZJTkVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBSRVFVRVNUX0xJU1RfU0laRSAxMjgKK3N0cnVjdCB6ZmNwX3JlcWxpc3Q7CiAKIC8qKioqKioqKioqKioqKioqKioqKiogU0NTSSBTUEVDSUZJQyBERUZJTkVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgWkZDUF9TQ1NJX0VSX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICgxMCpIWikKQEAgLTEyOSwxMiArMTI3LDYgQEAKIAltZW1wb29sX3QgKnF0Y2JfcG9vbDsKIH07CiAKLXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgewotCXN0cnVjdCBxZGlvX2J1ZmZlciAqc2JhbFtRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKLQl1OAkJICAgZmlyc3Q7CS8qIGluZGV4IG9mIG5leHQgZnJlZSBiZnIgaW4gcXVldWUgKi8KLQlhdG9taWNfdCAgICAgICAgICAgY291bnQ7CS8qIG51bWJlciBvZiBmcmVlIGJ1ZmZlcnMgaW4gcXVldWUgKi8KLX07Ci0KIHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlpbnQgYWN0aW9uOwkgICAgICAgICAgICAgIC8qIHJlcXVlc3RlZCBhY3Rpb24gY29kZSAqLwpAQCAtMTQzLDggKzEzNSw3IEBACiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAl1MzIJCXN0YXR1czsJICAgICAgLyogcmVjb3Zlcnkgc3RhdHVzICovCiAJdTMyIHN0ZXA7CSAgICAgICAgICAgICAgLyogYWN0aXZlIHN0ZXAgb2YgdGhpcyBlcnAgYWN0aW9uICovCi0Jc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcTsgLyogZnNmIHJlcXVlc3QgY3VycmVudGx5IHBlbmRpbmcKLQkJCQkJIGZvciB0aGlzIGFjdGlvbiAqLworCXVuc2lnbmVkIGxvbmcJCWZzZl9yZXFfaWQ7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiB9OwogCkBAIC0xNjcsMjkgKzE1OCw2IEBACiAJc3BpbmxvY2tfdCBsb2NrOwogfTsKIAotLyoqIHN0cnVjdCB6ZmNwX3FkaW8gLSBiYXNpYyBRRElPIGRhdGEgc3RydWN0dXJlCi0gKiBAcmVzcF9xOiByZXNwb25zZSBxdWV1ZQotICogQHJlcV9xOiByZXF1ZXN0IHF1ZXVlCi0gKiBAc3RhdF9sb2NrOiBsb2NrIHRvIHByb3RlY3QgcmVxX3FfdXRpbCBhbmQgcmVxX3FfdGltZQotICogQHJlcV9xX2xvY2s7IGxvY2sgdG8gc2VyaWFsaXplIGFjY2VzcyB0byByZXF1ZXN0IHF1ZXVlCi0gKiBAcmVxX3FfdGltZTogdGltZSBvZiBsYXN0IGZpbGwgbGV2ZWwgY2hhbmdlCi0gKiBAcmVxX3FfdXRpbDogdXNlZCBmb3IgYWNjb3VudGluZwotICogQHJlcV9xX2Z1bGw6IHF1ZXVlIGZ1bGwgaW5jaWRlbnRzCi0gKiBAcmVxX3Ffd3E6IHVzZWQgdG8gd2FpdCBmb3IgU0JBTCBhdmFpbGFiaWxpdHkKLSAqIEBhZGFwdGVyOiBhZGFwdGVyIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGlzIFFESU8gc3RydWN0dXJlCi0gKi8KLXN0cnVjdCB6ZmNwX3FkaW8gewotCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUJcmVzcF9xOwotCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUJcmVxX3E7Ci0Jc3BpbmxvY2tfdAkJc3RhdF9sb2NrOwotCXNwaW5sb2NrX3QJCXJlcV9xX2xvY2s7Ci0JdW5zaWduZWQgbG9uZyBsb25nCXJlcV9xX3RpbWU7Ci0JdTY0CQkJcmVxX3FfdXRpbDsKLQlhdG9taWNfdAkJcmVxX3FfZnVsbDsKLQl3YWl0X3F1ZXVlX2hlYWRfdAlyZXFfcV93cTsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyCSphZGFwdGVyOwotfTsKLQogc3RydWN0IHpmY3BfYWRhcHRlciB7CiAJc3RydWN0IGtyZWYJCXJlZjsKIAl1NjQJCQlwZWVyX3d3bm47CSAgIC8qIFAyUCBwZWVyIFdXTk4gKi8KQEAgLTIwNyw4ICsxNzUsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJcG9ydF9saXN0OwkgICAvKiByZW1vdGUgcG9ydCBsaXN0ICovCiAJcndsb2NrX3QJCXBvcnRfbGlzdF9sb2NrOyAgICAvKiBwb3J0IGxpc3QgbG9jayAqLwogCXVuc2lnbmVkIGxvbmcJCXJlcV9ubzsJCSAgIC8qIHVuaXF1ZSBGU0YgcmVxIG51bWJlciAqLwotCXN0cnVjdCBsaXN0X2hlYWQJKnJlcV9saXN0OwkgICAvKiBsaXN0IG9mIHBlbmRpbmcgcmVxcyAqLwotCXNwaW5sb2NrX3QJCXJlcV9saXN0X2xvY2s7CSAgIC8qIHJlcXVlc3QgbGlzdCBsb2NrICovCisJc3RydWN0IHpmY3BfcmVxbGlzdAkqcmVxX2xpc3Q7CiAJdTMyCQkJZnNmX3JlcV9zZXFfbm87CSAgIC8qIEZTRiBjbW5kIHNlcSBudW1iZXIgKi8KIAlyd2xvY2tfdAkJYWJvcnRfbG9jazsgICAgICAgIC8qIFByb3RlY3RzIGFnYWluc3QgU0NTSQogCQkJCQkJICAgICAgc3RhY2sgYWJvcnQvY29tbWFuZApAQCAtMjQxLDcgKzIwOCw3IEBACiB9OwogCiBzdHJ1Y3QgemZjcF9wb3J0IHsKLQlzdHJ1Y3QgZGV2aWNlICAgICAgICAgIHN5c2ZzX2RldmljZTsgICAvKiBzeXNmcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgZGV2aWNlICAgICAgICAgIGRldjsKIAlzdHJ1Y3QgZmNfcnBvcnQgICAgICAgICpycG9ydDsgICAgICAgICAvKiBycG9ydCBvZiBmYyB0cmFuc3BvcnQgY2xhc3MgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgIGxpc3Q7CSAgICAgICAvKiBsaXN0IG9mIHJlbW90ZSBwb3J0cyAqLwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgICAgKmFkYXB0ZXI7ICAgICAgIC8qIGFkYXB0ZXIgdXNlZCB0byBhY2Nlc3MgcG9ydCAqLwpAQCAtMjYzLDcgKzIzMCw3IEBACiB9OwogCiBzdHJ1Y3QgemZjcF91bml0IHsKLQlzdHJ1Y3QgZGV2aWNlICAgICAgICAgIHN5c2ZzX2RldmljZTsgICAvKiBzeXNmcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgZGV2aWNlICAgICAgICAgIGRldjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgIGxpc3Q7CSAgICAgICAvKiBsaXN0IG9mIGxvZ2ljYWwgdW5pdHMgKi8KIAlzdHJ1Y3QgemZjcF9wb3J0ICAgICAgICpwb3J0OwkgICAgICAgLyogcmVtb3RlIHBvcnQgb2YgdW5pdCAqLwogCWF0b21pY190CSAgICAgICBzdGF0dXM7CSAgICAgICAvKiBzdGF0dXMgb2YgdGhpcyBsb2dpY2FsIHVuaXQgKi8KQEAgLTI3NywzMyArMjQ0LDExIEBACiB9OwogCiAvKioKLSAqIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAtIHF1ZXVlIHJlbGF0ZWQgdmFsdWVzIGZvciBhIHJlcXVlc3QKLSAqIEBzYmFsX251bWJlcjogbnVtYmVyIG9mIGZyZWUgU0JBTHMKLSAqIEBzYmFsX2ZpcnN0OiBmaXJzdCBTQkFMIGZvciB0aGlzIHJlcXVlc3QKLSAqIEBzYmFsX2xhc3Q6IGxhc3QgU0JBTCBmb3IgdGhpcyByZXF1ZXN0Ci0gKiBAc2JhbF9saW1pdDogbGFzdCBwb3NzaWJsZSBTQkFMIGZvciB0aGlzIHJlcXVlc3QKLSAqIEBzYmFsZV9jdXJyOiBjdXJyZW50IFNCQUxFIGF0IGNyZWF0aW9uIG9mIHRoaXMgcmVxdWVzdAotICogQHNiYWxfcmVzcG9uc2U6IFNCQUwgdXNlZCBpbiBpbnRlcnJ1cHQKLSAqIEBxZGlvX291dGJfdXNhZ2U6IHVzYWdlIG9mIG91dGJvdW5kIHF1ZXVlCi0gKiBAcWRpb19pbmJfdXNhZ2U6IHVzYWdlIG9mIGluYm91bmQgcXVldWUKLSAqLwotc3RydWN0IHpmY3BfcXVldWVfcmVxIHsKLQl1OAkJICAgICAgIHNiYWxfbnVtYmVyOwotCXU4CQkgICAgICAgc2JhbF9maXJzdDsKLQl1OAkJICAgICAgIHNiYWxfbGFzdDsKLQl1OAkJICAgICAgIHNiYWxfbGltaXQ7Ci0JdTgJCSAgICAgICBzYmFsZV9jdXJyOwotCXU4CQkgICAgICAgc2JhbF9yZXNwb25zZTsKLQl1MTYJCSAgICAgICBxZGlvX291dGJfdXNhZ2U7Ci0JdTE2CQkgICAgICAgcWRpb19pbmJfdXNhZ2U7Ci19OwotCi0vKioKICAqIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgLSBiYXNpYyBGU0YgcmVxdWVzdCBzdHJ1Y3R1cmUKICAqIEBsaXN0OiBsaXN0IG9mIEZTRiByZXF1ZXN0cwogICogQHJlcV9pZDogdW5pcXVlIHJlcXVlc3QgSUQKICAqIEBhZGFwdGVyOiBhZGFwdGVyIHRoaXMgcmVxdWVzdCBiZWxvbmdzIHRvCi0gKiBAcXVldWVfcmVxOiBxdWV1ZSByZWxhdGVkIHZhbHVlcworICogQHFkaW9fcmVxOiBxZGlvIHF1ZXVlIHJlbGF0ZWQgdmFsdWVzCiAgKiBAY29tcGxldGlvbjogdXNlZCB0byBzaWduYWwgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHJlcXVlc3QKICAqIEBzdGF0dXM6IHN0YXR1cyBvZiB0aGUgcmVxdWVzdAogICogQGZzZl9jb21tYW5kOiBGU0YgY29tbWFuZCBpc3N1ZWQKQEAgLTMyMSw3ICsyNjYsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAl1bnNpZ25lZCBsb25nCQlyZXFfaWQ7CiAJc3RydWN0IHpmY3BfYWRhcHRlcgkqYWRhcHRlcjsKLQlzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEJcXVldWVfcmVxOworCXN0cnVjdCB6ZmNwX3FkaW9fcmVxCXFkaW9fcmVxOwogCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRpb247CiAJdTMyCQkJc3RhdHVzOwogCXUzMgkJCWZzZl9jb21tYW5kOwpAQCAtMzUyLDQ1ICsyOTcsNCBAQAogI2RlZmluZSBaRkNQX1NFVCAgICAgICAgICAgICAgICAweDAwMDAwMTAwCiAjZGVmaW5lIFpGQ1BfQ0xFQVIgICAgICAgICAgICAgIDB4MDAwMDAyMDAKIAotLyoKLSAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIHJlcXVlc3QgSUQgbWFuYWdlbWVudC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgemZjcF9yZXFsaXN0X2hhc2godW5zaWduZWQgbG9uZyByZXFfaWQpCi17Ci0JcmV0dXJuIHJlcV9pZCAlIFJFUVVFU1RfTElTVF9TSVpFOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgemZjcF9yZXFsaXN0X3JlbW92ZShzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgICAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQotewotCWxpc3RfZGVsKCZmc2ZfcmVxLT5saXN0KTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgemZjcF9mc2ZfcmVxICoKLXpmY3BfcmVxbGlzdF9maW5kKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGxvbmcgcmVxX2lkKQotewotCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcXVlc3Q7Ci0JdW5zaWduZWQgaW50IGlkeDsKLQotCWlkeCA9IHpmY3BfcmVxbGlzdF9oYXNoKHJlcV9pZCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShyZXF1ZXN0LCAmYWRhcHRlci0+cmVxX2xpc3RbaWR4XSwgbGlzdCkKLQkJaWYgKHJlcXVlc3QtPnJlcV9pZCA9PSByZXFfaWQpCi0JCQlyZXR1cm4gcmVxdWVzdDsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgemZjcF9mc2ZfcmVxICoKLXpmY3BfcmVxbGlzdF9maW5kX3NhZmUoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKQotewotCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcXVlc3Q7Ci0JdW5zaWduZWQgaW50IGlkeDsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgUkVRVUVTVF9MSVNUX1NJWkU7IGlkeCsrKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxdWVzdCwgJmFkYXB0ZXItPnJlcV9saXN0W2lkeF0sIGxpc3QpCi0JCQlpZiAocmVxdWVzdCA9PSByZXEpCi0JCQkJcmV0dXJuIHJlcXVlc3Q7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCiAjZW5kaWYgLyogWkZDUF9ERUZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKaW5kZXggYjUxYTExYS4uMGJlNWU3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIEVycm9yIFJlY292ZXJ5IFByb2NlZHVyZXMgKEVSUCkuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA5CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMTAKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgpAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgInpmY3BfZXh0LmgiCisjaW5jbHVkZSAiemZjcF9yZXFsaXN0LmgiCiAKICNkZWZpbmUgWkZDUF9NQVhfRVJQUyAgICAgICAgICAgICAgICAgICAzCiAKQEAgLTE3NCw3ICsxNzUsNyBAQAogCiAJc3dpdGNoIChuZWVkKSB7CiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1VOSVQ6Ci0JCWlmICghZ2V0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKSkKKwkJaWYgKCFnZXRfZGV2aWNlKCZ1bml0LT5kZXYpKQogCQkJcmV0dXJuIE5VTEw7CiAJCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fRVJQX0lOVVNFLCAmdW5pdC0+c3RhdHVzKTsKIAkJZXJwX2FjdGlvbiA9ICZ1bml0LT5lcnBfYWN0aW9uOwpAQCAtMTg0LDcgKzE4NSw3IEBACiAKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVDoKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVF9GT1JDRUQ6Ci0JCWlmICghZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKSkKKwkJaWYgKCFnZXRfZGV2aWNlKCZwb3J0LT5kZXYpKQogCQkJcmV0dXJuIE5VTEw7CiAJCXpmY3BfZXJwX2FjdGlvbl9kaXNtaXNzX3BvcnQocG9ydCk7CiAJCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fRVJQX0lOVVNFLCAmcG9ydC0+c3RhdHVzKTsKQEAgLTQ3OCwyNiArNDc5LDI3IEBACiBzdGF0aWMgdm9pZCB6ZmNwX2VycF9zdHJhdGVneV9jaGVja19mc2ZyZXEoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqYWN0KQogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBhY3QtPmFkYXB0ZXI7CisJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOwogCi0JaWYgKCFhY3QtPmZzZl9yZXEpCisJaWYgKCFhY3QtPmZzZl9yZXFfaWQpCiAJCXJldHVybjsKIAotCXNwaW5fbG9jaygmYWRhcHRlci0+cmVxX2xpc3RfbG9jayk7Ci0JaWYgKHpmY3BfcmVxbGlzdF9maW5kX3NhZmUoYWRhcHRlciwgYWN0LT5mc2ZfcmVxKSAmJgotCSAgICBhY3QtPmZzZl9yZXEtPmVycF9hY3Rpb24gPT0gYWN0KSB7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdC0+bG9jayk7CisJcmVxID0gX3pmY3BfcmVxbGlzdF9maW5kKGFkYXB0ZXItPnJlcV9saXN0LCBhY3QtPmZzZl9yZXFfaWQpOworCWlmIChyZXEgJiYgcmVxLT5lcnBfYWN0aW9uID09IGFjdCkgewogCQlpZiAoYWN0LT5zdGF0dXMgJiAoWkZDUF9TVEFUVVNfRVJQX0RJU01JU1NFRCB8CiAJCQkJICAgWkZDUF9TVEFUVVNfRVJQX1RJTUVET1VUKSkgewotCQkJYWN0LT5mc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0RJU01JU1NFRDsKKwkJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQ7CiAJCQl6ZmNwX2RiZl9yZWNfYWN0aW9uKCJlcnNjZl8xIiwgYWN0KTsKLQkJCWFjdC0+ZnNmX3JlcS0+ZXJwX2FjdGlvbiA9IE5VTEw7CisJCQlyZXEtPmVycF9hY3Rpb24gPSBOVUxMOwogCQl9CiAJCWlmIChhY3QtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0VSUF9USU1FRE9VVCkKIAkJCXpmY3BfZGJmX3JlY19hY3Rpb24oImVyc2NmXzIiLCBhY3QpOwotCQlpZiAoYWN0LT5mc2ZfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRElTTUlTU0VEKQotCQkJYWN0LT5mc2ZfcmVxID0gTlVMTDsKKwkJaWYgKHJlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0RJU01JU1NFRCkKKwkJCWFjdC0+ZnNmX3JlcV9pZCA9IDA7CiAJfSBlbHNlCi0JCWFjdC0+ZnNmX3JlcSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOworCQlhY3QtPmZzZl9yZXFfaWQgPSAwOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdC0+bG9jayk7CiB9CiAKIC8qKgpAQCAtMTE3OSwxOSArMTE4MSwxOSBAQAogCXN3aXRjaCAoYWN0LT5hY3Rpb24pIHsKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fVU5JVDoKIAkJaWYgKChyZXN1bHQgPT0gWkZDUF9FUlBfU1VDQ0VFREVEKSAmJiAhdW5pdC0+ZGV2aWNlKSB7Ci0JCQlnZXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCQkJZ2V0X2RldmljZSgmdW5pdC0+ZGV2KTsKIAkJCWlmIChzY3NpX3F1ZXVlX3dvcmsodW5pdC0+cG9ydC0+YWRhcHRlci0+c2NzaV9ob3N0LAogCQkJCQkgICAgJnVuaXQtPnNjc2lfd29yaykgPD0gMCkKLQkJCQlwdXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCQkJCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7CiAJCX0KLQkJcHV0X2RldmljZSgmdW5pdC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmdW5pdC0+ZGV2KTsKIAkJYnJlYWs7CiAKIAljYXNlIFpGQ1BfRVJQX0FDVElPTl9SRU9QRU5fUE9SVF9GT1JDRUQ6CiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1BPUlQ6CiAJCWlmIChyZXN1bHQgPT0gWkZDUF9FUlBfU1VDQ0VFREVEKQogCQkJemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0X3JlZ2lzdGVyKHBvcnQpOwotCQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCQlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCQlicmVhazsKIAogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9BREFQVEVSOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKaW5kZXggNjZiZGIzNC4uODc4NmE3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCkBAIC0yMSw3ICsyMSw2IEBACiBleHRlcm4gc3RydWN0IHpmY3BfcG9ydCAqemZjcF9wb3J0X2VucXVldWUoc3RydWN0IHpmY3BfYWRhcHRlciAqLCB1NjQsIHUzMiwKIAkJCQkJICAgdTMyKTsKIGV4dGVybiBzdHJ1Y3QgemZjcF91bml0ICp6ZmNwX3VuaXRfZW5xdWV1ZShzdHJ1Y3QgemZjcF9wb3J0ICosIHU2NCk7Ci1leHRlcm4gaW50IHpmY3BfcmVxbGlzdF9pc2VtcHR5KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CiBleHRlcm4gdm9pZCB6ZmNwX3NnX2ZyZWVfdGFibGUoc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCk7CiBleHRlcm4gaW50IHpmY3Bfc2dfc2V0dXBfdGFibGUoc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCk7CiBleHRlcm4gdm9pZCB6ZmNwX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKiwKQEAgLTE0NCwxMyArMTQzLDkgQEAKIC8qIHpmY3BfcWRpby5jICovCiBleHRlcm4gaW50IHpmY3BfcWRpb19zZXR1cChzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwogZXh0ZXJuIHZvaWQgemZjcF9xZGlvX2Rlc3Ryb3koc3RydWN0IHpmY3BfcWRpbyAqKTsKLWV4dGVybiBpbnQgemZjcF9xZGlvX3NlbmQoc3RydWN0IHpmY3BfcWRpbyAqLCBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKik7Ci1leHRlcm4gc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQKLQkqemZjcF9xZGlvX3NiYWxlX3JlcShzdHJ1Y3QgemZjcF9xZGlvICosIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqKTsKLWV4dGVybiBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudAotCSp6ZmNwX3FkaW9fc2JhbGVfY3VycihzdHJ1Y3QgemZjcF9xZGlvICosIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqKTsKK2V4dGVybiBpbnQgemZjcF9xZGlvX3NlbmQoc3RydWN0IHpmY3BfcWRpbyAqLCBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqKTsKIGV4dGVybiBpbnQgemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coc3RydWN0IHpmY3BfcWRpbyAqLAotCQkJCSAgIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqLCB1bnNpZ25lZCBsb25nLAorCQkJCSAgIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICosIHVuc2lnbmVkIGxvbmcsCiAJCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCk7CiBleHRlcm4gaW50IHpmY3BfcWRpb19vcGVuKHN0cnVjdCB6ZmNwX3FkaW8gKik7CiBleHRlcm4gdm9pZCB6ZmNwX3FkaW9fY2xvc2Uoc3RydWN0IHpmY3BfcWRpbyAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYwppbmRleCAyNzEzOTlmLi41MjE5NjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIEZpYnJlIENoYW5uZWwgcmVsYXRlZCBmdW5jdGlvbnMgZm9yIHRoZSB6ZmNwIGRldmljZSBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA4LCAyMDA5CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDgsIDIwMTAKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgpAQCAtMzE2LDcgKzMxNiw3IEBACiAKIAl6ZmNwX2VycF9wb3J0X3Jlb3Blbihwb3J0LCAwLCAiZmNncG5fMyIsIE5VTEwpOwogb3V0OgotCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogLyoqCkBAIC0zMjUsOSArMzI1LDkgQEAKICAqLwogdm9pZCB6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewotCWdldF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJZ2V0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAlpZiAoIXF1ZXVlX3dvcmsocG9ydC0+YWRhcHRlci0+d29ya19xdWV1ZSwgJnBvcnQtPmdpZF9wbl93b3JrKSkKLQkJcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogLyoqCkBAIC0zODksNyArMzg5LDcgQEAKIAl6ZmNwX3Njc2lfc2NoZWR1bGVfcnBvcnRfcmVnaXN0ZXIocG9ydCk7CiAgb3V0OgogCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX1BPUlRfTElOS19URVNULCAmcG9ydC0+c3RhdHVzKTsKLQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnBvcnQtPmRldik7CiAJa21lbV9jYWNoZV9mcmVlKHpmY3BfZGF0YS5hZGlzY19jYWNoZSwgYWRpc2MpOwogfQogCkBAIC00MzYsNyArNDM2LDcgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB6ZmNwX3BvcnQsIHRlc3RfbGlua193b3JrKTsKIAlpbnQgcmV0dmFsOwogCi0JZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlnZXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCXBvcnQtPnJwb3J0X3Rhc2sgPSBSUE9SVF9ERUw7CiAJemZjcF9zY3NpX3Jwb3J0X3dvcmsoJnBvcnQtPnJwb3J0X3dvcmspOwogCkBAIC00NTUsNyArNDU1LDcgQEAKIAl6ZmNwX2VycF9wb3J0X2ZvcmNlZF9yZW9wZW4ocG9ydCwgMCwgImZjbHR3azEiLCBOVUxMKTsKIAogb3V0OgotCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogLyoqCkBAIC00NjgsOSArNDY4LDkgQEAKICAqLwogdm9pZCB6ZmNwX2ZjX3Rlc3RfbGluayhzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewotCWdldF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJZ2V0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAlpZiAoIXF1ZXVlX3dvcmsocG9ydC0+YWRhcHRlci0+d29ya19xdWV1ZSwgJnBvcnQtPnRlc3RfbGlua193b3JrKSkKLQkJcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9mcmVlX3NnX2VudihzdHJ1Y3QgemZjcF9mY19ncG5fZnQgKmdwbl9mdCwgaW50IGJ1Zl9udW0pCkBAIC02MTcsOCArNjE3LDcgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3J0LCB0bXAsICZyZW1vdmVfbGgsIGxpc3QpIHsKIAkJemZjcF9lcnBfcG9ydF9zaHV0ZG93bihwb3J0LCAwLCAiZmNlZ3BmMiIsIE5VTEwpOwotCQl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5zeXNmc19kZXZpY2UsCi0JCQkJICAgICAgICZ6ZmNwX3N5c2ZzX3BvcnRfYXR0cnMpOworCQl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5kZXYsICZ6ZmNwX3N5c2ZzX3BvcnRfYXR0cnMpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC03MzEsNyArNzMwLDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWRfaWQgPSBwb3J0LT5kX2lkOwotCQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCQlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCX0gZWxzZQogCQlkX2lkID0gbnRvaDI0KGpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfZWxzLnBvcnRfaWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwppbmRleCBlOGZiNGQ5Li42NTM4NzQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogSW1wbGVtZW50YXRpb24gb2YgRlNGIGNvbW1hbmRzLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOQorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDEwCiAgKi8KIAogI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiemZjcCIKQEAgLTE0LDYgKzE0LDggQEAKICNpbmNsdWRlICJ6ZmNwX2V4dC5oIgogI2luY2x1ZGUgInpmY3BfZmMuaCIKICNpbmNsdWRlICJ6ZmNwX2RiZi5oIgorI2luY2x1ZGUgInpmY3BfcWRpby5oIgorI2luY2x1ZGUgInpmY3BfcmVxbGlzdC5oIgogCiBzdGF0aWMgdm9pZCB6ZmNwX2ZzZl9yZXF1ZXN0X3RpbWVvdXRfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CkBAIC0zOTMsNyArMzk1LDcgQEAKIAljYXNlIEZTRl9QUk9UX0xJTktfRE9XTjoKIAkJemZjcF9mc2ZfbGlua19kb3duX2luZm9fZXZhbChyZXEsICJmc3BzZV81IiwKIAkJCQkJICAgICAmcHNxLT5saW5rX2Rvd25faW5mbyk7Ci0JCS8qIEZJWE1FOiByZW9wZW5pbmcgYWRhcHRlciBub3c/IGJldHRlciB3YWl0IGZvciBsaW5rIHVwICovCisJCS8qIGdvIHRocm91Z2ggcmVvcGVuIHRvIGZsdXNoIHBlbmRpbmcgcmVxdWVzdHMgKi8KIAkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgImZzcHNlXzYiLCByZXEpOwogCQlicmVhazsKIAljYXNlIEZTRl9QUk9UX1JFRVNUX1FVRVVFOgpAQCAtNDU3LDE1ICs0NTksMTAgQEAKIHZvaWQgemZjcF9mc2ZfcmVxX2Rpc21pc3NfYWxsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxLCAqdG1wOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJTElTVF9IRUFEKHJlbW92ZV9xdWV1ZSk7Ci0JdW5zaWduZWQgaW50IGk7CiAKIAlCVUdfT04oYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXR1cykgJiBaRkNQX1NUQVRVU19BREFQVEVSX1FESU9VUCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSAwOyBpIDwgUkVRVUVTVF9MSVNUX1NJWkU7IGkrKykKLQkJbGlzdF9zcGxpY2VfaW5pdCgmYWRhcHRlci0+cmVxX2xpc3RbaV0sICZyZW1vdmVfcXVldWUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKKwl6ZmNwX3JlcWxpc3RfbW92ZShhZGFwdGVyLT5yZXFfbGlzdCwgJnJlbW92ZV9xdWV1ZSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCB0bXAsICZyZW1vdmVfcXVldWUsIGxpc3QpIHsKIAkJbGlzdF9kZWwoJnJlcS0+bGlzdCk7CkBAIC00OTUsOCArNDkyLDYgQEAKIAlmY19ob3N0X3BvcnRfaWQoc2hvc3QpID0gbnRvaDI0KGJvdHRvbS0+c19pZCk7CiAJZmNfaG9zdF9zcGVlZChzaG9zdCkgPSBib3R0b20tPmZjX2xpbmtfc3BlZWQ7CiAJZmNfaG9zdF9zdXBwb3J0ZWRfY2xhc3NlcyhzaG9zdCkgPSBGQ19DT1NfQ0xBU1MyIHwgRkNfQ09TX0NMQVNTMzsKLQlmY19ob3N0X3N1cHBvcnRlZF9mYzRzKHNob3N0KVsyXSA9IDE7IC8qIEZDUCAqLwotCWZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpWzJdID0gMTsgLyogRkNQICovCiAKIAlhZGFwdGVyLT5oeWRyYV92ZXJzaW9uID0gYm90dG9tLT5hZGFwdGVyX3R5cGU7CiAJYWRhcHRlci0+dGltZXJfdGlja3MgPSBib3R0b20tPnRpbWVyX2ludGVydmFsOwpAQCAtNjE5LDYgKzYxNCwxMCBAQAogCQlmY19ob3N0X3Blcm1hbmVudF9wb3J0X25hbWUoc2hvc3QpID0gZmNfaG9zdF9wb3J0X25hbWUoc2hvc3QpOwogCWZjX2hvc3RfbWF4ZnJhbWVfc2l6ZShzaG9zdCkgPSBib3R0b20tPm1heGltdW1fZnJhbWVfc2l6ZTsKIAlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMoc2hvc3QpID0gYm90dG9tLT5zdXBwb3J0ZWRfc3BlZWQ7CisJbWVtY3B5KGZjX2hvc3Rfc3VwcG9ydGVkX2ZjNHMoc2hvc3QpLCBib3R0b20tPnN1cHBvcnRlZF9mYzRfdHlwZXMsCisJICAgICAgIEZDX0ZDNF9MSVNUX1NJWkUpOworCW1lbWNweShmY19ob3N0X2FjdGl2ZV9mYzRzKHNob3N0KSwgYm90dG9tLT5hY3RpdmVfZmM0X3R5cGVzLAorCSAgICAgICBGQ19GQzRfTElTVF9TSVpFKTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhX2hhbmRsZXIoc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKQpAQCAtNzI1LDEyICs3MjQsMTIgQEAKIAlyZXEtPmFkYXB0ZXIgPSBhZGFwdGVyOwogCXJlcS0+ZnNmX2NvbW1hbmQgPSBmc2ZfY21kOwogCXJlcS0+cmVxX2lkID0gYWRhcHRlci0+cmVxX25vOwotCXJlcS0+cXVldWVfcmVxLnNiYWxfbnVtYmVyID0gMTsKLQlyZXEtPnF1ZXVlX3JlcS5zYmFsX2ZpcnN0ID0gcmVxX3EtPmZpcnN0OwotCXJlcS0+cXVldWVfcmVxLnNiYWxfbGFzdCA9IHJlcV9xLT5maXJzdDsKLQlyZXEtPnF1ZXVlX3JlcS5zYmFsZV9jdXJyID0gMTsKKwlyZXEtPnFkaW9fcmVxLnNiYWxfbnVtYmVyID0gMTsKKwlyZXEtPnFkaW9fcmVxLnNiYWxfZmlyc3QgPSByZXFfcS0+Zmlyc3Q7CisJcmVxLT5xZGlvX3JlcS5zYmFsX2xhc3QgPSByZXFfcS0+Zmlyc3Q7CisJcmVxLT5xZGlvX3JlcS5zYmFsZV9jdXJyID0gMTsKIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uYWRkciA9ICh2b2lkICopIHJlcS0+cmVxX2lkOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX0NPTU1BTkQ7CiAKQEAgLTc0NSw2ICs3NDQsNyBAQAogCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJCX0KIAorCQlyZXEtPnNlcV9ubyA9IGFkYXB0ZXItPmZzZl9yZXFfc2VxX25vOwogCQlyZXEtPnF0Y2ItPnByZWZpeC5yZXFfc2VxX25vID0gYWRhcHRlci0+ZnNmX3JlcV9zZXFfbm87CiAJCXJlcS0+cXRjYi0+cHJlZml4LnJlcV9pZCA9IHJlcS0+cmVxX2lkOwogCQlyZXEtPnF0Y2ItPnByZWZpeC51bHBfaW5mbyA9IDI2OwpAQCAtNzUyLDggKzc1Miw2IEBACiAJCXJlcS0+cXRjYi0+cHJlZml4LnF0Y2JfdmVyc2lvbiA9IEZTRl9RVENCX0NVUlJFTlRfVkVSU0lPTjsKIAkJcmVxLT5xdGNiLT5oZWFkZXIucmVxX2hhbmRsZSA9IHJlcS0+cmVxX2lkOwogCQlyZXEtPnF0Y2ItPmhlYWRlci5mc2ZfY29tbWFuZCA9IHJlcS0+ZnNmX2NvbW1hbmQ7Ci0JCXJlcS0+c2VxX25vID0gYWRhcHRlci0+ZnNmX3JlcV9zZXFfbm87Ci0JCXJlcS0+cXRjYi0+cHJlZml4LnJlcV9zZXFfbm8gPSBhZGFwdGVyLT5mc2ZfcmVxX3NlcV9ubzsKIAkJc2JhbGVbMV0uYWRkciA9ICh2b2lkICopIHJlcS0+cXRjYjsKIAkJc2JhbGVbMV0ubGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBmc2ZfcXRjYik7CiAJfQpAQCAtNzcwLDI1ICs3NjgsMTcgQEAKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcmVxLT5hZGFwdGVyOwogCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPSBhZGFwdGVyLT5xZGlvOwotCXVuc2lnbmVkIGxvbmcJICAgICBmbGFnczsKLQlpbnQJCSAgICAgaWR4OwotCWludAkJICAgICB3aXRoX3F0Y2IgPSAocmVxLT5xdGNiICE9IE5VTEwpOworCWludCB3aXRoX3F0Y2IgPSAocmVxLT5xdGNiICE9IE5VTEwpOworCWludCByZXFfaWQgPSByZXEtPnJlcV9pZDsKIAotCS8qIHB1dCBhbGxvY2F0ZWQgRlNGIHJlcXVlc3QgaW50byBoYXNoIHRhYmxlICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKLQlpZHggPSB6ZmNwX3JlcWxpc3RfaGFzaChyZXEtPnJlcV9pZCk7Ci0JbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmYWRhcHRlci0+cmVxX2xpc3RbaWR4XSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOworCXpmY3BfcmVxbGlzdF9hZGQoYWRhcHRlci0+cmVxX2xpc3QsIHJlcSk7CiAKLQlyZXEtPnF1ZXVlX3JlcS5xZGlvX291dGJfdXNhZ2UgPSBhdG9taWNfcmVhZCgmcWRpby0+cmVxX3EuY291bnQpOworCXJlcS0+cWRpb19yZXEucWRpb19vdXRiX3VzYWdlID0gYXRvbWljX3JlYWQoJnFkaW8tPnJlcV9xLmNvdW50KTsKIAlyZXEtPmlzc3VlZCA9IGdldF9jbG9jaygpOwotCWlmICh6ZmNwX3FkaW9fc2VuZChxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpKSB7CisJaWYgKHpmY3BfcWRpb19zZW5kKHFkaW8sICZyZXEtPnFkaW9fcmVxKSkgewogCQlkZWxfdGltZXIoJnJlcS0+dGltZXIpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOwogCQkvKiBsb29rdXAgcmVxdWVzdCBhZ2FpbiwgbGlzdCBtaWdodCBoYXZlIGNoYW5nZWQgKi8KLQkJaWYgKHpmY3BfcmVxbGlzdF9maW5kX3NhZmUoYWRhcHRlciwgcmVxKSkKLQkJCXpmY3BfcmVxbGlzdF9yZW1vdmUoYWRhcHRlciwgcmVxKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOworCQl6ZmNwX3JlcWxpc3RfZmluZF9ybShhZGFwdGVyLT5yZXFfbGlzdCwgcmVxX2lkKTsKIAkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgImZzcnNfXzEiLCByZXEpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC04MjYsOSArODE2LDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVsyXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7Ci0JcmVxLT5xdWV1ZV9yZXEuc2JhbGVfY3VyciA9IDI7CisJcmVxLT5xZGlvX3JlcS5zYmFsZV9jdXJyID0gMjsKIAogCXNyX2J1ZiA9IG1lbXBvb2xfYWxsb2MoYWRhcHRlci0+cG9vbC5zdGF0dXNfcmVhZF9kYXRhLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNyX2J1ZikgewpAQCAtODM3LDcgKzgyNyw3IEBACiAJfQogCW1lbXNldChzcl9idWYsIDAsIHNpemVvZigqc3JfYnVmKSk7CiAJcmVxLT5kYXRhID0gc3JfYnVmOwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX2N1cnIocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9jdXJyKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZS0+YWRkciA9ICh2b2lkICopIHNyX2J1ZjsKIAlzYmFsZS0+bGVuZ3RoID0gc2l6ZW9mKCpzcl9idWYpOwogCkBAIC05MzQsNyArOTI0LDcgQEAKIAkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQpKSkKIAkJZ290byBvdXRfZXJyb3JfZnJlZTsKIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMTAyOSw3ICsxMDE5LDcgQEAKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcmVxLT5hZGFwdGVyOwogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEoYWRhcHRlci0+cWRpbywKLQkJCQkJCQkgICAgICAgJnJlcS0+cXVldWVfcmVxKTsKKwkJCQkJCQkgICAgICAgJnJlcS0+cWRpb19yZXEpOwogCXUzMiBmZWF0ID0gYWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlczsKIAlpbnQgYnl0ZXM7CiAKQEAgLTEwNDcsMTUgKzEwMzcsMTUgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhhZGFwdGVyLT5xZGlvLCAmcmVxLT5xdWV1ZV9yZXEsCisJYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhhZGFwdGVyLT5xZGlvLCAmcmVxLT5xZGlvX3JlcSwKIAkJCQkJU0JBTF9GTEFHUzBfVFlQRV9XUklURV9SRUFELAogCQkJCQlzZ19yZXEsIG1heF9zYmFscyk7CiAJaWYgKGJ5dGVzIDw9IDApCiAJCXJldHVybiAtRUlPOwogCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQucmVxX2J1Zl9sZW5ndGggPSBieXRlczsKLQlyZXEtPnF1ZXVlX3JlcS5zYmFsZV9jdXJyID0gWkZDUF9MQVNUX1NCQUxFX1BFUl9TQkFMOworCXJlcS0+cWRpb19yZXEuc2JhbGVfY3VyciA9IFpGQ1BfTEFTVF9TQkFMRV9QRVJfU0JBTDsKIAotCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coYWRhcHRlci0+cWRpbywgJnJlcS0+cXVldWVfcmVxLAorCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coYWRhcHRlci0+cWRpbywgJnJlcS0+cWRpb19yZXEsCiAJCQkJCVNCQUxfRkxBR1MwX1RZUEVfV1JJVEVfUkVBRCwKIAkJCQkJc2dfcmVzcCwgbWF4X3NiYWxzKTsKIAlyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LnJlc3BfYnVmX2xlbmd0aCA9IGJ5dGVzOwpAQCAtMTI1MSw3ICsxMjQxLDcgQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTEyNjIsMTMgKzEyNTIsMTMgQEAKIAkJCUZTRl9GRUFUVVJFX1VQREFURV9BTEVSVDsKIAlyZXEtPmVycF9hY3Rpb24gPSBlcnBfYWN0aW9uOwogCXJlcS0+aGFuZGxlciA9IHpmY3BfZnNmX2V4Y2hhbmdlX2NvbmZpZ19kYXRhX2hhbmRsZXI7Ci0JZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IHJlcTsKKwllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gcmVxLT5yZXFfaWQ7CiAKIAl6ZmNwX2ZzZl9zdGFydF9lcnBfdGltZXIocmVxKTsKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogCWlmIChyZXR2YWwpIHsKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKLQkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7CisJCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSAwOwogCX0KIG91dDoKIAlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CkBAIC0xMjkzLDcgKzEyODMsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCXJlcS0+aGFuZGxlciA9IHpmY3BfZnNmX2V4Y2hhbmdlX2NvbmZpZ19kYXRhX2hhbmRsZXI7CkBAIC0xMzQ5LDE5ICsxMzM5LDE5IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhX2hhbmRsZXI7CiAJcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKLQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gcmVxOworCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSByZXEtPnJlcV9pZDsKIAogCXpmY3BfZnNmX3N0YXJ0X2VycF90aW1lcihyZXEpOwogCXJldHZhbCA9IHpmY3BfZnNmX3JlcV9zZW5kKHJlcSk7CiAJaWYgKHJldHZhbCkgewogCQl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwotCQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gTlVMTDsKKwkJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IDA7CiAJfQogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKQEAgLTEzOTgsNyArMTM4OCw3IEBACiAJaWYgKGRhdGEpCiAJCXJlcS0+ZGF0YSA9IGRhdGE7CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTE0ODQsNyArMTQ3NCw3IEBACiAJfQogCiBvdXQ6Ci0JcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogfQogCiAvKioKQEAgLTE1MTMsNyArMTUwMyw3IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKICAgICAgICAgc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogICAgICAgICBzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTE1MjEsMTUgKzE1MTEsMTUgQEAKIAlodG9uMjQocmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5kX2lkLCBwb3J0LT5kX2lkKTsKIAlyZXEtPmRhdGEgPSBwb3J0OwogCXJlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247Ci0JZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IHJlcTsKLQlnZXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSByZXEtPnJlcV9pZDsKKwlnZXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCiAJemZjcF9mc2Zfc3RhcnRfZXJwX3RpbWVyKHJlcSk7CiAJcmV0dmFsID0gemZjcF9mc2ZfcmVxX3NlbmQocmVxKTsKIAlpZiAocmV0dmFsKSB7CiAJCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7Ci0JCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOwotCQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCQllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gMDsKKwkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAl9CiBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwpAQCAtMTU4Myw3ICsxNTczLDcgQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTE1OTEsMTMgKzE1ODEsMTMgQEAKIAlyZXEtPmRhdGEgPSBlcnBfYWN0aW9uLT5wb3J0OwogCXJlcS0+ZXJwX2FjdGlvbiA9IGVycF9hY3Rpb247CiAJcmVxLT5xdGNiLT5oZWFkZXIucG9ydF9oYW5kbGUgPSBlcnBfYWN0aW9uLT5wb3J0LT5oYW5kbGU7Ci0JZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IHJlcTsKKwllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gcmVxLT5yZXFfaWQ7CiAKIAl6ZmNwX2ZzZl9zdGFydF9lcnBfdGltZXIocmVxKTsKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogCWlmIChyZXR2YWwpIHsKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKLQkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7CisJCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSAwOwogCX0KIG91dDoKIAlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CkBAIC0xNjYwLDcgKzE2NTAsNyBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMTcxNSw3ICsxNzA1LDcgQEAKIAl9CiAKIAlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTE4MDksNyArMTc5OSw3IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xODE3LDEzICsxODA3LDEzIEBACiAJcmVxLT5xdGNiLT5oZWFkZXIucG9ydF9oYW5kbGUgPSBlcnBfYWN0aW9uLT5wb3J0LT5oYW5kbGU7CiAJcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9jbG9zZV9waHlzaWNhbF9wb3J0X2hhbmRsZXI7Ci0JZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IHJlcTsKKwllcnBfYWN0aW9uLT5mc2ZfcmVxX2lkID0gcmVxLT5yZXFfaWQ7CiAKIAl6ZmNwX2ZzZl9zdGFydF9lcnBfdGltZXIocmVxKTsKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogCWlmIChyZXR2YWwpIHsKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKLQkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7CisJCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSAwOwogCX0KIG91dDoKIAlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CkBAIC0xOTgyLDcgKzE5NzIsNyBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xZGlvX3JlcSk7CiAgICAgICAgIHNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKICAgICAgICAgc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xOTkxLDcgKzE5ODEsNyBAQAogCXJlcS0+aGFuZGxlciA9IHpmY3BfZnNmX29wZW5fdW5pdF9oYW5kbGVyOwogCXJlcS0+ZGF0YSA9IGVycF9hY3Rpb24tPnVuaXQ7CiAJcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKLQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gcmVxOworCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSByZXEtPnJlcV9pZDsKIAogCWlmICghKGFkYXB0ZXItPmNvbm5lY3Rpb25fZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9OUElWX01PREUpKQogCQlyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0Lm9wdGlvbiA9IEZTRl9PUEVOX0xVTl9TVVBQUkVTU19CT1hJTkc7CkBAIC0yMDAwLDcgKzE5OTAsNyBAQAogCXJldHZhbCA9IHpmY3BfZnNmX3JlcV9zZW5kKHJlcSk7CiAJaWYgKHJldHZhbCkgewogCQl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwotCQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gTlVMTDsKKwkJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IDA7CiAJfQogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKQEAgLTIwNjgsNyArMjA1OCw3IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0yMDc3LDEzICsyMDY3LDEzIEBACiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2ZfY2xvc2VfdW5pdF9oYW5kbGVyOwogCXJlcS0+ZGF0YSA9IGVycF9hY3Rpb24tPnVuaXQ7CiAJcmVxLT5lcnBfYWN0aW9uID0gZXJwX2FjdGlvbjsKLQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gcmVxOworCWVycF9hY3Rpb24tPmZzZl9yZXFfaWQgPSByZXEtPnJlcV9pZDsKIAogCXpmY3BfZnNmX3N0YXJ0X2VycF90aW1lcihyZXEpOwogCXJldHZhbCA9IHpmY3BfZnNmX3JlcV9zZW5kKHJlcSk7CiAJaWYgKHJldHZhbCkgewogCQl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwotCQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gTlVMTDsKKwkJZXJwX2FjdGlvbi0+ZnNmX3JlcV9pZCA9IDA7CiAJfQogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKQEAgLTIxMTEsOCArMjEwMSw4IEBACiAJYmxrdHJjLm1hZ2ljID0gWkZDUF9CTEtfRFJWX0RBVEFfTUFHSUM7CiAJaWYgKHJlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SKQogCQlibGt0cmMuZmxhZ3MgfD0gWkZDUF9CTEtfUkVRX0VSUk9SOwotCWJsa3RyYy5pbmJfdXNhZ2UgPSByZXEtPnF1ZXVlX3JlcS5xZGlvX2luYl91c2FnZTsKLQlibGt0cmMub3V0Yl91c2FnZSA9IHJlcS0+cXVldWVfcmVxLnFkaW9fb3V0Yl91c2FnZTsKKwlibGt0cmMuaW5iX3VzYWdlID0gcmVxLT5xZGlvX3JlcS5xZGlvX2luYl91c2FnZTsKKwlibGt0cmMub3V0Yl91c2FnZSA9IHJlcS0+cWRpb19yZXEucWRpb19vdXRiX3VzYWdlOwogCiAJaWYgKHJlcS0+YWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX01FQVNVUkVNRU5UX0RBVEEpIHsKIAkJYmxrdHJjLmZsYWdzIHw9IFpGQ1BfQkxLX0xBVF9WQUxJRDsKQEAgLTIxNjksMTIgKzIxNTksNyBAQAogCXpmY3BfZnNmX3JlcV90cmFjZShyZXEsIHNjcG50KTsKIAogc2tpcF9mc2ZzdGF0dXM6Ci0JaWYgKHNjcG50LT5yZXN1bHQgIT0gMCkKLQkJemZjcF9kYmZfc2NzaV9yZXN1bHQoImVycm8iLCAzLCByZXEtPmFkYXB0ZXItPmRiZiwgc2NwbnQsIHJlcSk7Ci0JZWxzZSBpZiAoc2NwbnQtPnJldHJpZXMgPiAwKQotCQl6ZmNwX2RiZl9zY3NpX3Jlc3VsdCgicmV0ciIsIDQsIHJlcS0+YWRhcHRlci0+ZGJmLCBzY3BudCwgcmVxKTsKLQllbHNlCi0JCXpmY3BfZGJmX3Njc2lfcmVzdWx0KCJub3JtIiwgNiwgcmVxLT5hZGFwdGVyLT5kYmYsIHNjcG50LCByZXEpOworCXpmY3BfZGJmX3Njc2lfcmVzdWx0KHJlcS0+YWRhcHRlci0+ZGJmLCBzY3BudCwgcmVxKTsKIAogCXNjcG50LT5ob3N0X3NjcmliYmxlID0gTlVMTDsKIAkoc2NwbnQtPnNjc2lfZG9uZSkgKHNjcG50KTsKQEAgLTIyNzQsNyArMjI1OSw3IEBACiAJZWxzZSB7CiAJCXpmY3BfZnNmX3NlbmRfZmNwX2NvbW1hbmRfdGFza19oYW5kbGVyKHJlcSk7CiAJCXJlcS0+dW5pdCA9IE5VTEw7Ci0JCXB1dF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSk7CisJCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7CiAJfQogfQogCkBAIC0yMzEyLDcgKzIyOTcsNyBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCWdldF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSk7CisJZ2V0X2RldmljZSgmdW5pdC0+ZGV2KTsKIAlyZXEtPnVuaXQgPSB1bml0OwogCXJlcS0+ZGF0YSA9IHNjc2lfY21uZDsKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9zZW5kX2ZjcF9jb21tYW5kX2hhbmRsZXI7CkBAIC0yMzQ2LDExICsyMzMxLDExIEBACiAJZmNwX2NtbmQgPSAoc3RydWN0IGZjcF9jbW5kICopICZyZXEtPnF0Y2ItPmJvdHRvbS5pby5mY3BfY21uZDsKIAl6ZmNwX2ZjX3Njc2lfdG9fZmNwKGZjcF9jbW5kLCBzY3NpX2NtbmQpOwogCi0JcmVhbF9ieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSwgc2J0eXBlLAorCXJlYWxfYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhxZGlvLCAmcmVxLT5xZGlvX3JlcSwgc2J0eXBlLAogCQkJCQkgICAgIHNjc2lfc2dsaXN0KHNjc2lfY21uZCksCiAJCQkJCSAgICAgRlNGX01BWF9TQkFMU19QRVJfUkVRKTsKIAlpZiAodW5saWtlbHkocmVhbF9ieXRlcyA8IDApKSB7Ci0JCWlmIChyZXEtPnF1ZXVlX3JlcS5zYmFsX251bWJlciA+PSBGU0ZfTUFYX1NCQUxTX1BFUl9SRVEpIHsKKwkJaWYgKHJlcS0+cWRpb19yZXEuc2JhbF9udW1iZXIgPj0gRlNGX01BWF9TQkFMU19QRVJfUkVRKSB7CiAJCQlkZXZfZXJyKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCiAJCQkJIk92ZXJzaXplIGRhdGEgcGFja2FnZSwgdW5pdCAweCUwMTZMeCAiCiAJCQkJIm9uIHBvcnQgMHglMDE2THggY2xvc2VkXG4iLApAQCAtMjM2OSw3ICsyMzU0LDcgQEAKIAlnb3RvIG91dDsKIAogZmFpbGVkX3Njc2lfY21uZDoKLQlwdXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7CiAJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKIAlzY3NpX2NtbmQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwogb3V0OgpAQCAtMjQxNSw3ICsyNDAwLDcgQEAKIAlyZXEtPnF0Y2ItPmJvdHRvbS5pby5zZXJ2aWNlX2NsYXNzID0gRlNGX0NMQVNTXzM7CiAJcmVxLT5xdGNiLT5ib3R0b20uaW8uZmNwX2NtbmRfbGVuZ3RoID0gRkNQX0NNTkRfTEVOOwogCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnFkaW9fcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMjQ3OCwxNCArMjQ2MywxNCBAQAogCiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2ZfY29udHJvbF9maWxlX2hhbmRsZXI7CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cWRpb19yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IGRpcmVjdGlvbjsKIAogCWJvdHRvbSA9ICZyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0OwogCWJvdHRvbS0+b3BlcmF0aW9uX3N1YnR5cGUgPSBGU0ZfQ0ZEQ19PUEVSQVRJT05fU1VCVFlQRTsKIAlib3R0b20tPm9wdGlvbiA9IGZzZl9jZmRjLT5vcHRpb247CiAKLQlieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSwKKwlieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHFkaW8sICZyZXEtPnFkaW9fcmVxLAogCQkJCQlkaXJlY3Rpb24sIGZzZl9jZmRjLT5zZywKIAkJCQkJRlNGX01BWF9TQkFMU19QRVJfUkVRKTsKIAlpZiAoYnl0ZXMgIT0gWkZDUF9DRkRDX01BWF9TSVpFKSB7CkBAIC0yNTE2LDE1ICsyNTAxLDE0IEBACiAJc3RydWN0IHFkaW9fYnVmZmVyICpzYmFsID0gcWRpby0+cmVzcF9xLnNiYWxbc2JhbF9pZHhdOwogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHJlcV9pZDsKKwl1bnNpZ25lZCBsb25nIHJlcV9pZDsKIAlpbnQgaWR4OwogCiAJZm9yIChpZHggPSAwOyBpZHggPCBRRElPX01BWF9FTEVNRU5UU19QRVJfQlVGRkVSOyBpZHgrKykgewogCiAJCXNiYWxlID0gJnNiYWwtPmVsZW1lbnRbaWR4XTsKIAkJcmVxX2lkID0gKHVuc2lnbmVkIGxvbmcpIHNiYWxlLT5hZGRyOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOwotCQlmc2ZfcmVxID0gemZjcF9yZXFsaXN0X2ZpbmQoYWRhcHRlciwgcmVxX2lkKTsKKwkJZnNmX3JlcSA9IHpmY3BfcmVxbGlzdF9maW5kX3JtKGFkYXB0ZXItPnJlcV9saXN0LCByZXFfaWQpOwogCiAJCWlmICghZnNmX3JlcSkKIAkJCS8qCkBAIC0yNTM0LDExICsyNTE4LDggQEAKIAkJCXBhbmljKCJlcnJvcjogdW5rbm93biByZXFfaWQgKCVseCkgb24gYWRhcHRlciAlcy5cbiIsCiAJCQkgICAgICByZXFfaWQsIGRldl9uYW1lKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYpKTsKIAotCQlsaXN0X2RlbCgmZnNmX3JlcS0+bGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKLQotCQlmc2ZfcmVxLT5xdWV1ZV9yZXEuc2JhbF9yZXNwb25zZSA9IHNiYWxfaWR4OwotCQlmc2ZfcmVxLT5xdWV1ZV9yZXEucWRpb19pbmJfdXNhZ2UgPQorCQlmc2ZfcmVxLT5xZGlvX3JlcS5zYmFsX3Jlc3BvbnNlID0gc2JhbF9pZHg7CisJCWZzZl9yZXEtPnFkaW9fcmVxLnFkaW9faW5iX3VzYWdlID0KIAkJCWF0b21pY19yZWFkKCZxZGlvLT5yZXNwX3EuY291bnQpOwogCQl6ZmNwX2ZzZl9yZXFfY29tcGxldGUoZnNmX3JlcSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKaW5kZXggNmM1MjI4Yi4uNzFiOTdmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKIAogI2luY2x1ZGUgInpmY3BfZXh0LmgiCisjaW5jbHVkZSAiemZjcF9xZGlvLmgiCiAKICNkZWZpbmUgUUJVRkZfUEVSX1BBR0UJCShQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IHFkaW9fYnVmZmVyKSkKIApAQCAtMjgsMTIgKzI5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICoKLXpmY3BfcWRpb19zYmFsZShzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpxLCBpbnQgc2JhbF9pZHgsIGludCBzYmFsZV9pZHgpCi17Ci0JcmV0dXJuICZxLT5zYmFsW3NiYWxfaWR4XS0+ZWxlbWVudFtzYmFsZV9pZHhdOwotfQotCiBzdGF0aWMgdm9pZCB6ZmNwX3FkaW9faGFuZGxlcl9lcnJvcihzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBjaGFyICppZCkKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcWRpby0+YWRhcHRlcjsKQEAgLTEwNiw3ICsxMDEsNyBAQAogCiAJaWYgKHVubGlrZWx5KHJldHZhbCkpIHsKIAkJYXRvbWljX3NldCgmcXVldWUtPmNvdW50LCBjb3VudCk7Ci0JCS8qIEZJWE1FOiBSZWNvdmVyIHRoaXMgd2l0aCBhbiBhZGFwdGVyIHJlb3Blbj8gKi8KKwkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4ocWRpby0+YWRhcHRlciwgMCwgInFkcnBiXzEiLCBOVUxMKTsKIAl9IGVsc2UgewogCQlxdWV1ZS0+Zmlyc3QgKz0gY291bnQ7CiAJCXF1ZXVlLT5maXJzdCAlPSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwpAQCAtMTQ1LDMyICsxNDAsOCBAQAogCXpmY3BfcWRpb19yZXNwX3B1dF9iYWNrKHFkaW8sIGNvdW50KTsKIH0KIAotLyoqCi0gKiB6ZmNwX3FkaW9fc2JhbGVfcmVxIC0gcmV0dXJuIHB0ciB0byBTQkFMRSBvZiByZXFfcSBmb3IgYSBzdHJ1Y3QgemZjcF9mc2ZfcmVxCi0gKiBAcWRpbzogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9xZGlvCi0gKiBAcV9yZWM6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcXVldWVfcmVjCi0gKiBSZXR1cm5zOiBwb2ludGVyIHRvIHFkaW9fYnVmZmVyX2VsZW1lbnQgKFNCQUxFKSBzdHJ1Y3R1cmUKLSAqLwotc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnpmY3BfcWRpb19zYmFsZV9yZXEoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywKLQkJCQkJCXN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqcV9yZXEpCi17Ci0JcmV0dXJuIHpmY3BfcWRpb19zYmFsZSgmcWRpby0+cmVxX3EsIHFfcmVxLT5zYmFsX2xhc3QsIDApOwotfQotCi0vKioKLSAqIHpmY3BfcWRpb19zYmFsZV9jdXJyIC0gcmV0dXJuIGN1cnIgU0JBTEUgb24gcmVxX3EgZm9yIGEgc3RydWN0IHpmY3BfZnNmX3JlcQotICogQGZzZl9yZXE6IHBvaW50ZXIgdG8gc3RydWN0IGZzZl9yZXEKLSAqIFJldHVybnM6IHBvaW50ZXIgdG8gcWRpb19idWZmZXJfZWxlbWVudCAoU0JBTEUpIHN0cnVjdHVyZQotICovCi1zdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqemZjcF9xZGlvX3NiYWxlX2N1cnIoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywKLQkJCQkJCSBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxKQotewotCXJldHVybiB6ZmNwX3FkaW9fc2JhbGUoJnFkaW8tPnJlcV9xLCBxX3JlcS0+c2JhbF9sYXN0LAotCQkJICAgICAgIHFfcmVxLT5zYmFsZV9jdXJyKTsKLX0KLQogc3RhdGljIHZvaWQgemZjcF9xZGlvX3NiYWxfbGltaXQoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywKLQkJCQkgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSwgaW50IG1heF9zYmFscykKKwkJCQkgc3RydWN0IHpmY3BfcWRpb19yZXEgKnFfcmVxLCBpbnQgbWF4X3NiYWxzKQogewogCWludCBjb3VudCA9IGF0b21pY19yZWFkKCZxZGlvLT5yZXFfcS5jb3VudCk7CiAJY291bnQgPSBtaW4oY291bnQsIG1heF9zYmFscyk7CkBAIC0xNzksNyArMTUwLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICoKLXpmY3BfcWRpb19zYmFsX2NoYWluKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqcV9yZXEsCit6ZmNwX3FkaW9fc2JhbF9jaGFpbihzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEsCiAJCSAgICAgdW5zaWduZWQgbG9uZyBzYnR5cGUpCiB7CiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwpAQCAtMjE0LDcgKzE4NSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqCi16ZmNwX3FkaW9fc2JhbGVfbmV4dChzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxLAoremZjcF9xZGlvX3NiYWxlX25leHQoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcWRpb19yZXEgKnFfcmVxLAogCQkgICAgIHVuc2lnbmVkIGludCBzYnR5cGUpCiB7CiAJaWYgKHFfcmVxLT5zYmFsZV9jdXJyID09IFpGQ1BfTEFTVF9TQkFMRV9QRVJfU0JBTCkKQEAgLTIyNCw3ICsxOTUsNyBAQAogfQogCiBzdGF0aWMgdm9pZCB6ZmNwX3FkaW9fdW5kb19zYmFscyhzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLAotCQkJCSBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxKQorCQkJCSBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEpCiB7CiAJc3RydWN0IHFkaW9fYnVmZmVyICoqc2JhbCA9IHFkaW8tPnJlcV9xLnNiYWw7CiAJaW50IGZpcnN0ID0gcV9yZXEtPnNiYWxfZmlyc3Q7CkBAIC0yMzUsNyArMjA2LDcgQEAKIH0KIAogc3RhdGljIGludCB6ZmNwX3FkaW9fZmlsbF9zYmFscyhzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLAotCQkJCXN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqcV9yZXEsCisJCQkJc3RydWN0IHpmY3BfcWRpb19yZXEgKnFfcmVxLAogCQkJCXVuc2lnbmVkIGludCBzYnR5cGUsIHZvaWQgKnN0YXJ0X2FkZHIsCiAJCQkJdW5zaWduZWQgaW50IHRvdGFsX2xlbmd0aCkKIHsKQEAgLTI3MSw4ICsyNDIsNyBAQAogICogQG1heF9zYmFsczogdXBwZXIgYm91bmQgZm9yIG51bWJlciBvZiBTQkFMcyB0byBiZSB1c2VkCiAgKiBSZXR1cm5zOiBudW1iZXIgb2YgYnl0ZXMsIG9yIGVycm9yIChuZWdhdGl2KQogICovCi1pbnQgemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coc3RydWN0IHpmY3BfcWRpbyAqcWRpbywKLQkJCSAgICBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxLAoraW50IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIHN0cnVjdCB6ZmNwX3FkaW9fcmVxICpxX3JlcSwKIAkJCSAgICB1bnNpZ25lZCBsb25nIHNidHlwZSwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKIAkJCSAgICBpbnQgbWF4X3NiYWxzKQogewpAQCAtMzA0LDEwICsyNzQsMTAgQEAKIC8qKgogICogemZjcF9xZGlvX3NlbmQgLSBzZXQgUENJIGZsYWcgaW4gZmlyc3QgU0JBTEUgYW5kIHNlbmQgcmVxIHRvIFFESU8KICAqIEBxZGlvOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3FkaW8KLSAqIEBxX3JlcTogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEKKyAqIEBxX3JlcTogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9xZGlvX3JlcQogICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBlcnJvciBvdGhlcndpc2UKICAqLwotaW50IHpmY3BfcWRpb19zZW5kKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqcV9yZXEpCitpbnQgemZjcF9xZGlvX3NlbmQoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcWRpb19yZXEgKnFfcmVxKQogewogCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgKnJlcV9xID0gJnFkaW8tPnJlcV9xOwogCWludCBmaXJzdCA9IHFfcmVxLT5zYmFsX2ZpcnN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2NhNTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmgKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiB6ZmNwIGRldmljZSBkcml2ZXIKKyAqCisgKiBIZWFkZXIgZmlsZSBmb3IgemZjcCBxZGlvIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAxMAorICovCisKKyNpZm5kZWYgWkZDUF9RRElPX0gKKyNkZWZpbmUgWkZDUF9RRElPX0gKKworI2luY2x1ZGUgPGFzbS9xZGlvLmg+CisKKy8qKgorICogc3RydWN0IHpmY3BfcWRpb19xdWV1ZSAtIHFkaW8gcXVldWUgYnVmZmVyLCB6ZmNwIGluZGV4IGFuZCBmcmVlIGNvdW50CisgKiBAc2JhbDogcWRpbyBidWZmZXJzCisgKiBAZmlyc3Q6IGluZGV4IG9mIG5leHQgZnJlZSBidWZmZXIgaW4gcXVldWUKKyAqIEBjb3VudDogbnVtYmVyIG9mIGZyZWUgYnVmZmVycyBpbiBxdWV1ZQorICovCitzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlIHsKKwlzdHJ1Y3QgcWRpb19idWZmZXIgKnNiYWxbUURJT19NQVhfQlVGRkVSU19QRVJfUV07CisJdTgJCSAgIGZpcnN0OworCWF0b21pY190ICAgICAgICAgICBjb3VudDsKK307CisKKy8qKgorICogc3RydWN0IHpmY3BfcWRpbyAtIGJhc2ljIHFkaW8gZGF0YSBzdHJ1Y3R1cmUKKyAqIEByZXNwX3E6IHJlc3BvbnNlIHF1ZXVlCisgKiBAcmVxX3E6IHJlcXVlc3QgcXVldWUKKyAqIEBzdGF0X2xvY2s6IGxvY2sgdG8gcHJvdGVjdCByZXFfcV91dGlsIGFuZCByZXFfcV90aW1lCisgKiBAcmVxX3FfbG9jazogbG9jayB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHJlcXVlc3QgcXVldWUKKyAqIEByZXFfcV90aW1lOiB0aW1lIG9mIGxhc3QgZmlsbCBsZXZlbCBjaGFuZ2UKKyAqIEByZXFfcV91dGlsOiB1c2VkIGZvciBhY2NvdW50aW5nCisgKiBAcmVxX3FfZnVsbDogcXVldWUgZnVsbCBpbmNpZGVudHMKKyAqIEByZXFfcV93cTogdXNlZCB0byB3YWl0IGZvciBTQkFMIGF2YWlsYWJpbGl0eQorICogQGFkYXB0ZXI6IGFkYXB0ZXIgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoaXMgcWRpbyBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IHpmY3BfcWRpbyB7CisJc3RydWN0IHpmY3BfcWRpb19xdWV1ZQlyZXNwX3E7CisJc3RydWN0IHpmY3BfcWRpb19xdWV1ZQlyZXFfcTsKKwlzcGlubG9ja190CQlzdGF0X2xvY2s7CisJc3BpbmxvY2tfdAkJcmVxX3FfbG9jazsKKwl1bnNpZ25lZCBsb25nIGxvbmcJcmVxX3FfdGltZTsKKwl1NjQJCQlyZXFfcV91dGlsOworCWF0b21pY190CQlyZXFfcV9mdWxsOworCXdhaXRfcXVldWVfaGVhZF90CXJlcV9xX3dxOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIJKmFkYXB0ZXI7Cit9OworCisvKioKKyAqIHN0cnVjdCB6ZmNwX3FkaW9fcmVxIC0gcWRpbyBxdWV1ZSByZWxhdGVkIHZhbHVlcyBmb3IgYSByZXF1ZXN0CisgKiBAc2JhbF9udW1iZXI6IG51bWJlciBvZiBmcmVlIHNiYWxzCisgKiBAc2JhbF9maXJzdDogZmlyc3Qgc2JhbCBmb3IgdGhpcyByZXF1ZXN0CisgKiBAc2JhbF9sYXN0OiBsYXN0IHNiYWwgZm9yIHRoaXMgcmVxdWVzdAorICogQHNiYWxfbGltaXQ6IGxhc3QgcG9zc2libGUgc2JhbCBmb3IgdGhpcyByZXF1ZXN0CisgKiBAc2JhbGVfY3VycjogY3VycmVudCBzYmFsZSBhdCBjcmVhdGlvbiBvZiB0aGlzIHJlcXVlc3QKKyAqIEBzYmFsX3Jlc3BvbnNlOiBzYmFsIHVzZWQgaW4gaW50ZXJydXB0CisgKiBAcWRpb19vdXRiX3VzYWdlOiB1c2FnZSBvZiBvdXRib3VuZCBxdWV1ZQorICogQHFkaW9faW5iX3VzYWdlOiB1c2FnZSBvZiBpbmJvdW5kIHF1ZXVlCisgKi8KK3N0cnVjdCB6ZmNwX3FkaW9fcmVxIHsKKwl1OAlzYmFsX251bWJlcjsKKwl1OAlzYmFsX2ZpcnN0OworCXU4CXNiYWxfbGFzdDsKKwl1OAlzYmFsX2xpbWl0OworCXU4CXNiYWxlX2N1cnI7CisJdTgJc2JhbF9yZXNwb25zZTsKKwl1MTYJcWRpb19vdXRiX3VzYWdlOworCXUxNglxZGlvX2luYl91c2FnZTsKK307CisKKy8qKgorICogemZjcF9xZGlvX3NiYWxlIC0gcmV0dXJuIHBvaW50ZXIgdG8gc2JhbGUgaW4gcWRpbyBxdWV1ZQorICogQHE6IHF1ZXVlIHdoZXJlIHRvIGZpbmQgc2JhbAorICogQHNiYWxfaWR4OiBzYmFsIGluZGV4IGluIHF1ZXVlCisgKiBAc2JhbGVfaWR4OiBzYmFsZSBpbmRleCBpbiBzYmFsCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKgoremZjcF9xZGlvX3NiYWxlKHN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgKnEsIGludCBzYmFsX2lkeCwgaW50IHNiYWxlX2lkeCkKK3sKKwlyZXR1cm4gJnEtPnNiYWxbc2JhbF9pZHhdLT5lbGVtZW50W3NiYWxlX2lkeF07Cit9CisKKy8qKgorICogemZjcF9xZGlvX3NiYWxlX3JlcSAtIHJldHVybiBwb2ludGVyIHRvIHNiYWxlIG9uIHJlcV9xIGZvciBhIHJlcXVlc3QKKyAqIEBxZGlvOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3FkaW8KKyAqIEBxX3JlYzogcG9pbnRlciB0byBzdHJ1Y3QgemZjcF9xZGlvX3JlcQorICogUmV0dXJuczogcG9pbnRlciB0byBxZGlvX2J1ZmZlcl9lbGVtZW50IChzYmFsZSkgc3RydWN0dXJlCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKgoremZjcF9xZGlvX3NiYWxlX3JlcShzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEpCit7CisJcmV0dXJuIHpmY3BfcWRpb19zYmFsZSgmcWRpby0+cmVxX3EsIHFfcmVxLT5zYmFsX2xhc3QsIDApOworfQorCisvKioKKyAqIHpmY3BfcWRpb19zYmFsZV9jdXJyIC0gcmV0dXJuIGN1cnJlbnQgc2JhbGUgb24gcmVxX3EgZm9yIGEgcmVxdWVzdAorICogQHFkaW86IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcWRpbworICogQGZzZl9yZXE6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfZnNmX3JlcQorICogUmV0dXJuczogcG9pbnRlciB0byBxZGlvX2J1ZmZlcl9lbGVtZW50IChzYmFsZSkgc3RydWN0dXJlCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKgoremZjcF9xZGlvX3NiYWxlX2N1cnIoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcWRpb19yZXEgKnFfcmVxKQoreworCXJldHVybiB6ZmNwX3FkaW9fc2JhbGUoJnFkaW8tPnJlcV9xLCBxX3JlcS0+c2JhbF9sYXN0LAorCQkJICAgICAgIHFfcmVxLT5zYmFsZV9jdXJyKTsKK30KKworI2VuZGlmIC8qIFpGQ1BfUURJT19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3JlcWxpc3QuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcmVxbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MmQxYjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3JlcWxpc3QuaApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIHpmY3AgZGV2aWNlIGRyaXZlcgorICoKKyAqIERhdGEgc3RydWN0dXJlIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGZvciB0cmFja2luZyBwZW5kaW5nIEZTRgorICogcmVxdWVzdHMuCisgKgorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA5CisgKi8KKworI2lmbmRlZiBaRkNQX1JFUUxJU1RfSAorI2RlZmluZSBaRkNQX1JFUUxJU1RfSAorCisvKiBudW1iZXIgb2YgaGFzaCBidWNrZXRzICovCisjZGVmaW5lIFpGQ1BfUkVRX0xJU1RfQlVDS0VUUyAxMjgKKworLyoqCisgKiBzdHJ1Y3QgemZjcF9yZXFsaXN0IC0gQ29udGFpbmVyIGZvciByZXF1ZXN0IGxpc3QgKHJlcWxpc3QpCisgKiBAbG9jazogU3BpbmxvY2sgZm9yIHByb3RlY3RpbmcgdGhlIGhhc2ggbGlzdAorICogQGxpc3Q6IEFycmF5IG9mIGhhc2hidWNrZXRzLCBlYWNoIGlzIGEgbGlzdCBvZiByZXF1ZXN0cyBpbiB0aGlzIGJ1Y2tldAorICovCitzdHJ1Y3QgemZjcF9yZXFsaXN0IHsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBidWNrZXRzW1pGQ1BfUkVRX0xJU1RfQlVDS0VUU107Cit9OworCitzdGF0aWMgaW5saW5lIGludCB6ZmNwX3JlcWxpc3RfaGFzaCh1bnNpZ25lZCBsb25nIHJlcV9pZCkKK3sKKwlyZXR1cm4gcmVxX2lkICUgWkZDUF9SRVFfTElTVF9CVUNLRVRTOworfQorCisvKioKKyAqIHpmY3BfcmVxbGlzdF9hbGxvYyAtIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHJlcWxpc3QKKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gYWxsb2NhdGVkIHJlcWxpc3Qgb24gc3VjY2Vzcywgb3IgTlVMTCBvbgorICogYWxsb2NhdGlvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB6ZmNwX3JlcWxpc3QgKnpmY3BfcmVxbGlzdF9hbGxvYyh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCB6ZmNwX3JlcWxpc3QgKnJsOworCisJcmwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgemZjcF9yZXFsaXN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFybCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzcGluX2xvY2tfaW5pdCgmcmwtPmxvY2spOworCisJZm9yIChpID0gMDsgaSA8IFpGQ1BfUkVRX0xJU1RfQlVDS0VUUzsgaSsrKQorCQlJTklUX0xJU1RfSEVBRCgmcmwtPmJ1Y2tldHNbaV0pOworCisJcmV0dXJuIHJsOworfQorCisvKioKKyAqIHpmY3BfcmVxbGlzdF9pc2VtcHR5IC0gQ2hlY2sgd2hldGhlciB0aGUgcmVxdWVzdCBsaXN0IGVtcHR5CisgKiBAcmw6IHBvaW50ZXIgdG8gcmVxbGlzdAorICoKKyAqIFJldHVybnM6IDEgaWYgbGlzdCBpcyBlbXB0eSwgMCBpZiBub3QKKyAqLworc3RhdGljIGlubGluZSBpbnQgemZjcF9yZXFsaXN0X2lzZW1wdHkoc3RydWN0IHpmY3BfcmVxbGlzdCAqcmwpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgWkZDUF9SRVFfTElTVF9CVUNLRVRTOyBpKyspCisJCWlmICghbGlzdF9lbXB0eSgmcmwtPmJ1Y2tldHNbaV0pKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogemZjcF9yZXFsaXN0X2ZyZWUgLSBGcmVlIGFsbG9jYXRlZCBtZW1vcnkgZm9yIHJlcWxpc3QKKyAqIEBybDogVGhlIHJlcWxpc3Qgd2hlcmUgdG8gZnJlZSBtZW1vcnkKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHpmY3BfcmVxbGlzdF9mcmVlKHN0cnVjdCB6ZmNwX3JlcWxpc3QgKnJsKQoreworCS8qIHNhbml0eSBjaGVjayAqLworCUJVR19PTighemZjcF9yZXFsaXN0X2lzZW1wdHkocmwpKTsKKworCWtmcmVlKHJsKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgemZjcF9mc2ZfcmVxICoKK196ZmNwX3JlcWxpc3RfZmluZChzdHJ1Y3QgemZjcF9yZXFsaXN0ICpybCwgdW5zaWduZWQgbG9uZyByZXFfaWQpCit7CisJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOworCXVuc2lnbmVkIGludCBpOworCisJaSA9IHpmY3BfcmVxbGlzdF9oYXNoKHJlcV9pZCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXEsICZybC0+YnVja2V0c1tpXSwgbGlzdCkKKwkJaWYgKHJlcS0+cmVxX2lkID09IHJlcV9pZCkKKwkJCXJldHVybiByZXE7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogemZjcF9yZXFsaXN0X2ZpbmQgLSBMb29rdXAgRlNGIHJlcXVlc3QgYnkgaXRzIHJlcXVlc3QgaWQKKyAqIEBybDogVGhlIHJlcWxpc3Qgd2hlcmUgdG8gbG9va3VwIHRoZSBGU0YgcmVxdWVzdAorICogQHJlcV9pZDogVGhlIHJlcXVlc3QgaWQgdG8gbG9vayBmb3IKKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgRlNGIHJlcXVlc3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHJlcXVlc3QgaWQKKyAqIG9yIE5VTEwgaWYgdGhlcmUgaXMgbm8ga25vd24gRlNGIHJlcXVlc3Qgd2l0aCB0aGlzIGlkLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKgoremZjcF9yZXFsaXN0X2ZpbmQoc3RydWN0IHpmY3BfcmVxbGlzdCAqcmwsIHVuc2lnbmVkIGxvbmcgcmVxX2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJsLT5sb2NrLCBmbGFncyk7CisJcmVxID0gX3pmY3BfcmVxbGlzdF9maW5kKHJsLCByZXFfaWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJsLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmVxOworfQorCisvKioKKyAqIHpmY3BfcmVxbGlzdF9maW5kX3JtIC0gTG9va3VwIHJlcXVlc3QgYnkgaWQgYW5kIHJlbW92ZSBpdCBmcm9tIHJlcWxpc3QKKyAqIEBybDogcmVxbGlzdCB3aGVyZSB0byBzZWFyY2ggYW5kIHJlbW92ZSBlbnRyeQorICogQHJlcV9pZDogVGhlIHJlcXVlc3QgaWQgb2YgdGhlIHJlcXVlc3QgdG8gbG9vayBmb3IKKyAqCisgKiBUaGlzIGZ1bmN0aW9ucyB0cmllcyB0byBmaW5kIHRoZSBGU0YgcmVxdWVzdCB3aXRoIHRoZSBzcGVjaWZpZWQKKyAqIGlkIGFuZCB0aGVuIHJlbW92ZXMgaXQgZnJvbSB0aGUgcmVxbGlzdC4gVGhlIHJlcWxpc3QgbG9jayBpcyBoZWxkCisgKiBkdXJpbmcgYm90aCBzdGVwcyBvZiB0aGUgb3BlcmF0aW9uLgorICoKKyAqIFJldHVybnM6IFBvaW50ZXIgdG8gdGhlIEZTRiByZXF1ZXN0IGlmIHRoZSByZXF1ZXN0IGhhcyBiZWVuIGZvdW5kLAorICogTlVMTCBpZiBpdCBoYXMgbm90IGJlZW4gZm91bmQuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHpmY3BfZnNmX3JlcSAqCit6ZmNwX3JlcWxpc3RfZmluZF9ybShzdHJ1Y3QgemZjcF9yZXFsaXN0ICpybCwgdW5zaWduZWQgbG9uZyByZXFfaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmwtPmxvY2ssIGZsYWdzKTsKKwlyZXEgPSBfemZjcF9yZXFsaXN0X2ZpbmQocmwsIHJlcV9pZCk7CisJaWYgKHJlcSkKKwkJbGlzdF9kZWwoJnJlcS0+bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmwtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXE7Cit9CisKKy8qKgorICogemZjcF9yZXFsaXN0X2FkZCAtIEFkZCBlbnRyeSB0byByZXFsaXN0CisgKiBAcmw6IHJlcWxpc3Qgd2hlcmUgdG8gYWRkIHRoZSBlbnRyeQorICogQHJlcTogVGhlIGVudHJ5IHRvIGFkZAorICoKKyAqIFRoZSByZXF1ZXN0IGlkIGFsd2F5cyBpbmNyZWFzZXMuIEFzIGFuIG9wdGltaXphdGlvbiBuZXcgcmVxdWVzdHMKKyAqIGFyZSBhZGRlZCBoZXJlIHdpdGggbGlzdF9hZGRfdGFpbCBhdCB0aGUgZW5kIG9mIHRoZSBidWNrZXQgbGlzdHMKKyAqIHdoaWxlIG9sZCByZXF1ZXN0cyBhcmUgbG9va2VkIHVwIHN0YXJ0aW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgKiBsaXN0cy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHpmY3BfcmVxbGlzdF9hZGQoc3RydWN0IHpmY3BfcmVxbGlzdCAqcmwsCisJCQkJICAgIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaSA9IHpmY3BfcmVxbGlzdF9oYXNoKHJlcS0+cmVxX2lkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZybC0+bG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnJlcS0+bGlzdCwgJnJsLT5idWNrZXRzW2ldKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybC0+bG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIHpmY3BfcmVxbGlzdF9tb3ZlIC0gTW92ZSBhbGwgZW50cmllcyBmcm9tIHJlcWxpc3QgdG8gc2ltcGxlIGxpc3QKKyAqIEBybDogVGhlIHpmY3BfcmVxbGlzdCB3aGVyZSB0byByZW1vdmUgYWxsIGVudHJpZXMKKyAqIEBsaXN0OiBUaGUgbGlzdCB3aGVyZSB0byBtb3ZlIGFsbCBlbnRyaWVzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB6ZmNwX3JlcWxpc3RfbW92ZShzdHJ1Y3QgemZjcF9yZXFsaXN0ICpybCwKKwkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZybC0+bG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBaRkNQX1JFUV9MSVNUX0JVQ0tFVFM7IGkrKykKKwkJbGlzdF9zcGxpY2VfaW5pdCgmcmwtPmJ1Y2tldHNbaV0sIGxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJsLT5sb2NrLCBmbGFncyk7Cit9CisKKyNlbmRpZiAvKiBaRkNQX1JFUUxJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwppbmRleCA4ZTZmYzY4Li5jM2M0MTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBJbnRlcmZhY2UgdG8gTGludXggU0NTSSBtaWRsYXllci4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDkKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAxMAogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInpmY3AiCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAiemZjcF9leHQuaCIKICNpbmNsdWRlICJ6ZmNwX2RiZi5oIgogI2luY2x1ZGUgInpmY3BfZmMuaCIKKyNpbmNsdWRlICJ6ZmNwX3JlcWxpc3QuaCIKIAogc3RhdGljIHVuc2lnbmVkIGludCBkZWZhdWx0X2RlcHRoID0gMzI7CiBtb2R1bGVfcGFyYW1fbmFtZWQocXVldWVfZGVwdGgsIGRlZmF1bHRfZGVwdGgsIHVpbnQsIDA2MDApOwpAQCAtNDMsNyArNDQsNyBAQAogewogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSAoc3RydWN0IHpmY3BfdW5pdCAqKSBzZHBudC0+aG9zdGRhdGE7CiAJdW5pdC0+ZGV2aWNlID0gTlVMTDsKLQlwdXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQgemZjcF9zY3NpX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCkKQEAgLTU5LDEwICs2MCw5IEBACiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9CiAJCShzdHJ1Y3QgemZjcF9hZGFwdGVyICopIHNjcG50LT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOworCiAJc2V0X2hvc3RfYnl0ZShzY3BudCwgcmVzdWx0KTsKLQlpZiAoKHNjcG50LT5kZXZpY2UgIT0gTlVMTCkgJiYgKHNjcG50LT5kZXZpY2UtPmhvc3QgIT0gTlVMTCkpCi0JCXpmY3BfZGJmX3Njc2lfcmVzdWx0KCJmYWlsIiwgNCwgYWRhcHRlci0+ZGJmLCBzY3BudCwgTlVMTCk7Ci0JLyogcmV0dXJuIGRpcmVjdGx5ICovCisJemZjcF9kYmZfc2NzaV9mYWlsX3NlbmQoYWRhcHRlci0+ZGJmLCBzY3BudCk7CiAJc2NwbnQtPnNjc2lfZG9uZShzY3BudCk7CiB9CiAKQEAgLTg2LDE4ICs4NiwxMCBAQAogCWFkYXB0ZXIgPSAoc3RydWN0IHpmY3BfYWRhcHRlciAqKSBzY3BudC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKIAl1bml0ID0gc2NwbnQtPmRldmljZS0+aG9zdGRhdGE7CiAKLQlCVUdfT04oIWFkYXB0ZXIgfHwgKGFkYXB0ZXIgIT0gdW5pdC0+cG9ydC0+YWRhcHRlcikpOwotCUJVR19PTighc2NwbnQtPnNjc2lfZG9uZSk7Ci0KLQlpZiAodW5saWtlbHkoIXVuaXQpKSB7Ci0JCXpmY3Bfc2NzaV9jb21tYW5kX2ZhaWwoc2NwbnQsIERJRF9OT19DT05ORUNUKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJc2NzaV9yZXN1bHQgPSBmY19yZW1vdGVfcG9ydF9jaGtyZWFkeShycG9ydCk7CiAJaWYgKHVubGlrZWx5KHNjc2lfcmVzdWx0KSkgewogCQlzY3BudC0+cmVzdWx0ID0gc2NzaV9yZXN1bHQ7Ci0JCXpmY3BfZGJmX3Njc2lfcmVzdWx0KCJmYWlsIiwgNCwgYWRhcHRlci0+ZGJmLCBzY3BudCwgTlVMTCk7CisJCXpmY3BfZGJmX3Njc2lfZmFpbF9zZW5kKGFkYXB0ZXItPmRiZiwgc2NwbnQpOwogCQlzY3BudC0+c2NzaV9kb25lKHNjcG50KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTg5LDkgKzE4MSw3IEBACiAJLyogYXZvaWQgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBsYXRlIG5vcm1hbCBjb21wbGV0aW9uIGFuZCBhYm9ydCAqLwogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWJvcnRfbG9jaywgZmxhZ3MpOwogCi0Jc3Bpbl9sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrKTsKLQlvbGRfcmVxID0gemZjcF9yZXFsaXN0X2ZpbmQoYWRhcHRlciwgb2xkX3JlcWlkKTsKLQlzcGluX3VubG9jaygmYWRhcHRlci0+cmVxX2xpc3RfbG9jayk7CisJb2xkX3JlcSA9IHpmY3BfcmVxbGlzdF9maW5kKGFkYXB0ZXItPnJlcV9saXN0LCBvbGRfcmVxaWQpOwogCWlmICghb2xkX3JlcSkgewogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWJvcnRfbG9jaywgZmxhZ3MpOwogCQl6ZmNwX2RiZl9zY3NpX2Fib3J0KCJsdGUxIiwgYWRhcHRlci0+ZGJmLCBzY3BudCwgTlVMTCwKQEAgLTUyMSw3ICs1MTEsNyBAQAogCiAJaWYgKHBvcnQpIHsKIAkJemZjcF9lcnBfcG9ydF9yZW9wZW4ocG9ydCwgMCwgInNjdHJwaTEiLCBOVUxMKTsKLQkJcHV0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwkJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAl9CiB9CiAKQEAgLTU2MywyMyArNTUzLDIzIEBACiAKIHZvaWQgemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0X3JlZ2lzdGVyKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCiB7Ci0JZ2V0X2RldmljZSgmcG9ydC0+c3lzZnNfZGV2aWNlKTsKKwlnZXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogCXBvcnQtPnJwb3J0X3Rhc2sgPSBSUE9SVF9BREQ7CiAKIAlpZiAoIXF1ZXVlX3dvcmsocG9ydC0+YWRhcHRlci0+d29ya19xdWV1ZSwgJnBvcnQtPnJwb3J0X3dvcmspKQotCQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCQlwdXRfZGV2aWNlKCZwb3J0LT5kZXYpOwogfQogCiB2b2lkIHpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydF9ibG9jayhzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewotCWdldF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJZ2V0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAlwb3J0LT5ycG9ydF90YXNrID0gUlBPUlRfREVMOwogCiAJaWYgKHBvcnQtPnJwb3J0ICYmIHF1ZXVlX3dvcmsocG9ydC0+YWRhcHRlci0+d29ya19xdWV1ZSwKIAkJCQkgICAgICAmcG9ydC0+cnBvcnRfd29yaykpCiAJCXJldHVybjsKIAotCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogdm9pZCB6ZmNwX3Njc2lfc2NoZWR1bGVfcnBvcnRzX2Jsb2NrKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC02MDgsNyArNTk4LDcgQEAKIAkJfQogCX0KIAotCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIH0KIAogCkBAIC02MjYsNyArNjE2LDcgQEAKIAkJCQkgc2NzaWx1bl90b19pbnQoKHN0cnVjdCBzY3NpX2x1biAqKQogCQkJCQkJJnVuaXQtPmZjcF9sdW4pLCAwKTsKIAotCXB1dF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmdW5pdC0+ZGV2KTsKIH0KIAogc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlIHpmY3BfdHJhbnNwb3J0X2Z1bmN0aW9ucyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYwppbmRleCBmNTM5ZTAwLi5hNDMwMzVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIHN5c2ZzIGF0dHJpYnV0ZXMuCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDA4LCAyMDA5CisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDgsIDIwMTAKICAqLwogCiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgpAQCAtMTksOCArMTksNyBAQAogCQkJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0LFwKIAkJCQkJCSAgIGNoYXIgKmJ1ZikJCSAgICAgICBcCiB7CQkJCQkJCQkJICAgICAgIFwKLQlzdHJ1Y3QgX2ZlYXRfZGVmICpfZmVhdCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBfZmVhdF9kZWYsCSAgICAgICBcCi0JCQkJCSAgICAgICBzeXNmc19kZXZpY2UpOwkJICAgICAgIFwKKwlzdHJ1Y3QgX2ZlYXRfZGVmICpfZmVhdCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBfZmVhdF9kZWYsIGRldik7ICAgIFwKIAkJCQkJCQkJCSAgICAgICBcCiAJcmV0dXJuIHNwcmludGYoYnVmLCBfZm9ybWF0LCBfdmFsdWUpOwkJCQkgICAgICAgXAogfQkJCQkJCQkJCSAgICAgICBcCkBAIC04Nyw4ICs4Niw3IEBACiAJCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgXAogCQkJCQkJY2hhciAqYnVmKQkJICAgICAgIFwKIHsJCQkJCQkJCQkgICAgICAgXAotCXN0cnVjdCBfZmVhdF9kZWYgKl9mZWF0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IF9mZWF0X2RlZiwJICAgICAgIFwKLQkJCQkJICAgICAgIHN5c2ZzX2RldmljZSk7CQkgICAgICAgXAorCXN0cnVjdCBfZmVhdF9kZWYgKl9mZWF0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IF9mZWF0X2RlZiwgZGV2KTsgICAgXAogCQkJCQkJCQkJICAgICAgIFwKIAlpZiAoYXRvbWljX3JlYWQoJl9mZWF0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQpICAgICAgIFwKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAiMVxuIik7CQkJCSAgICAgICBcCkBAIC05OSwxMiArOTcsMTEgQEAKIAkJCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcCiAJCQkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXAogewkJCQkJCQkJCSAgICAgICBcCi0Jc3RydWN0IF9mZWF0X2RlZiAqX2ZlYXQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgX2ZlYXRfZGVmLAkgICAgICAgXAotCQkJCQkgICAgICAgc3lzZnNfZGV2aWNlKTsJCSAgICAgICBcCisJc3RydWN0IF9mZWF0X2RlZiAqX2ZlYXQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgX2ZlYXRfZGVmLCBkZXYpOyAgICBcCiAJdW5zaWduZWQgbG9uZyB2YWw7CQkJCQkJICAgICAgIFwKIAlpbnQgcmV0dmFsID0gMDsJCQkJCQkJICAgICAgIFwKIAkJCQkJCQkJCSAgICAgICBcCi0JaWYgKCEoX2ZlYXQgJiYgZ2V0X2RldmljZSgmX2ZlYXQtPnN5c2ZzX2RldmljZSkpKQkJICAgICAgIFwKKwlpZiAoIShfZmVhdCAmJiBnZXRfZGV2aWNlKCZfZmVhdC0+ZGV2KSkpCQkJICAgICAgIFwKIAkJcmV0dXJuIC1FQlVTWTsJCQkJCQkgICAgICAgXAogCQkJCQkJCQkJICAgICAgIFwKIAlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKSB8fCB2YWwgIT0gMCkgewkJCSAgICAgICBcCkBAIC0xMTgsNyArMTE1LDcgQEAKIAkJCQkgIF9yZW9wZW5faWQsIE5VTEwpOwkJCSAgICAgICBcCiAJemZjcF9lcnBfd2FpdChfYWRhcHRlcik7CQkJCQkgICAgICAgXAogb3V0OgkJCQkJCQkJCSAgICAgICBcCi0JcHV0X2RldmljZSgmX2ZlYXQtPnN5c2ZzX2RldmljZSk7CQkJCSAgICAgICBcCisJcHV0X2RldmljZSgmX2ZlYXQtPmRldik7CQkJCQkgICAgICAgXAogCXJldHVybiByZXR2YWwgPyByZXR2YWwgOiAoc3NpemVfdCkgY291bnQ7CQkJICAgICAgIFwKIH0JCQkJCQkJCQkgICAgICAgXAogc3RhdGljIFpGQ1BfREVWX0FUVFIoX2ZlYXQsIGZhaWxlZCwgU19JV1VTUiB8IFNfSVJVR08sCQkJICAgICAgIFwKQEAgLTIyNCwxMCArMjIxLDEwIEBACiAJbGlzdF9kZWwoJnBvcnQtPmxpc3QpOwogCXdyaXRlX3VubG9ja19pcnEoJmFkYXB0ZXItPnBvcnRfbGlzdF9sb2NrKTsKIAotCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAogCXpmY3BfZXJwX3BvcnRfc2h1dGRvd24ocG9ydCwgMCwgInN5cHJzXzEiLCBOVUxMKTsKLQl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZwb3J0LT5zeXNmc19kZXZpY2UsICZ6ZmNwX3N5c2ZzX3BvcnRfYXR0cnMpOworCXpmY3BfZGV2aWNlX3VucmVnaXN0ZXIoJnBvcnQtPmRldiwgJnpmY3Bfc3lzZnNfcG9ydF9hdHRycyk7CiAgb3V0OgogCXpmY3BfY2N3X2FkYXB0ZXJfcHV0KGFkYXB0ZXIpOwogCXJldHVybiByZXR2YWwgPyByZXR2YWwgOiAoc3NpemVfdCkgY291bnQ7CkBAIC0yNTgsMTMgKzI1NSwxMiBAQAogCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHpmY3BfcG9ydCwKLQkJCQkJICAgICAgc3lzZnNfZGV2aWNlKTsKKwlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHpmY3BfcG9ydCwgZGV2KTsKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0OwogCXU2NCBmY3BfbHVuOwogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCi0JaWYgKCEocG9ydCAmJiBnZXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpKSkKKwlpZiAoIShwb3J0ICYmIGdldF9kZXZpY2UoJnBvcnQtPmRldikpKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKHN0cmljdF9zdHJ0b3VsbChidWYsIDAsICh1bnNpZ25lZCBsb25nIGxvbmcgKikgJmZjcF9sdW4pKQpAQCAtMjgwLDcgKzI3Niw3IEBACiAJemZjcF9lcnBfd2FpdCh1bml0LT5wb3J0LT5hZGFwdGVyKTsKIAlmbHVzaF93b3JrKCZ1bml0LT5zY3NpX3dvcmspOwogb3V0OgotCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogKHNzaXplX3QpIGNvdW50OwogfQogc3RhdGljIERFVklDRV9BVFRSKHVuaXRfYWRkLCBTX0lXVVNSLCBOVUxMLCB6ZmNwX3N5c2ZzX3VuaXRfYWRkX3N0b3JlKTsKQEAgLTI4OSwxMyArMjg1LDEyIEBACiAJCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgemZjcF9wb3J0LAotCQkJCQkgICAgICBzeXNmc19kZXZpY2UpOworCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgemZjcF9wb3J0LCBkZXYpOwogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7CiAJdTY0IGZjcF9sdW47CiAJaW50IHJldHZhbCA9IC1FSU5WQUw7CiAKLQlpZiAoIShwb3J0ICYmIGdldF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSkpKQorCWlmICghKHBvcnQgJiYgZ2V0X2RldmljZSgmcG9ydC0+ZGV2KSkpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoc3RyaWN0X3N0cnRvdWxsKGJ1ZiwgMCwgKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSAmZmNwX2x1bikpCkBAIC0zMTQsMTIgKzMwOSwxMiBAQAogCWxpc3RfZGVsKCZ1bml0LT5saXN0KTsKIAl3cml0ZV91bmxvY2tfaXJxKCZwb3J0LT51bml0X2xpc3RfbG9jayk7CiAKLQlwdXRfZGV2aWNlKCZ1bml0LT5zeXNmc19kZXZpY2UpOworCXB1dF9kZXZpY2UoJnVuaXQtPmRldik7CiAKIAl6ZmNwX2VycF91bml0X3NodXRkb3duKHVuaXQsIDAsICJzeXVyc18xIiwgTlVMTCk7Ci0JemZjcF9kZXZpY2VfdW5yZWdpc3RlcigmdW5pdC0+c3lzZnNfZGV2aWNlLCAmemZjcF9zeXNmc191bml0X2F0dHJzKTsKKwl6ZmNwX2RldmljZV91bnJlZ2lzdGVyKCZ1bml0LT5kZXYsICZ6ZmNwX3N5c2ZzX3VuaXRfYXR0cnMpOwogb3V0OgotCXB1dF9kZXZpY2UoJnBvcnQtPnN5c2ZzX2RldmljZSk7CisJcHV0X2RldmljZSgmcG9ydC0+ZGV2KTsKIAlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogKHNzaXplX3QpIGNvdW50OwogfQogc3RhdGljIERFVklDRV9BVFRSKHVuaXRfcmVtb3ZlLCBTX0lXVVNSLCBOVUxMLCB6ZmNwX3N5c2ZzX3VuaXRfcmVtb3ZlX3N0b3JlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMgYi9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jCmluZGV4IDc1YWMxOWIuLmZjMmY2NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYwpAQCAtMjMzLDcgKzIzMyw3IEBACiAKIAlwaCA9IDA7CiAJaWYgKGRwKQotCQlwaCA9IGRwLT5ub2RlOworCQlwaCA9IGRwLT5waGFuZGxlOwogCiAJZGF0YS0+Y3VycmVudF9ub2RlID0gZHA7CiAJKigoaW50ICopIG9wLT5vcHJvbV9hcnJheSkgPSBwaDsKQEAgLTI1Niw3ICsyNTYsNyBAQAogCiAJCWRwID0gcGNpX2RldmljZV90b19PRl9ub2RlKHBkZXYpOwogCQlkYXRhLT5jdXJyZW50X25vZGUgPSBkcDsKLQkJKigoaW50ICopb3AtPm9wcm9tX2FycmF5KSA9IGRwLT5ub2RlOworCQkqKChpbnQgKilvcC0+b3Byb21fYXJyYXkpID0gZHAtPnBoYW5kbGU7CiAJCW9wLT5vcHJvbV9zaXplID0gc2l6ZW9mKGludCk7CiAJCWVyciA9IGNvcHlvdXQoYXJncCwgb3AsIGJ1ZnNpemUgKyBzaXplb2YoaW50KSk7CiAKQEAgLTI3Myw3ICsyNzMsNyBAQAogCiAJZHAgPSBvZl9maW5kX25vZGVfYnlfcGF0aChvcC0+b3Byb21fYXJyYXkpOwogCWlmIChkcCkKLQkJcGggPSBkcC0+bm9kZTsKKwkJcGggPSBkcC0+cGhhbmRsZTsKIAlkYXRhLT5jdXJyZW50X25vZGUgPSBkcDsKIAkqKChpbnQgKilvcC0+b3Byb21fYXJyYXkpID0gcGg7CiAJb3AtPm9wcm9tX3NpemUgPSBzaXplb2YoaW50KTsKQEAgLTU0MCw3ICs1NDAsNyBAQAogCQl9CiAJfQogCWlmIChkcCkKLQkJbmQgPSBkcC0+bm9kZTsKKwkJbmQgPSBkcC0+cGhhbmRsZTsKIAlpZiAoY29weV90b191c2VyKGFyZ3AsICZuZCwgc2l6ZW9mKHBoYW5kbGUpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTU3MCw3ICs1NzAsNyBAQAogCWNhc2UgT1BJT0NHRVRPUFROT0RFOgogCQlCVUlMRF9CVUdfT04oc2l6ZW9mKHBoYW5kbGUpICE9IHNpemVvZihpbnQpKTsKIAotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZvcHRpb25zX25vZGUtPm5vZGUsIHNpemVvZihwaGFuZGxlKSkpCisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJm9wdGlvbnNfbm9kZS0+cGhhbmRsZSwgc2l6ZW9mKHBoYW5kbGUpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0ZsYXNoUG9pbnQuYyBiL2RyaXZlcnMvc2NzaS9GbGFzaFBvaW50LmMKaW5kZXggYjg5OGQzOC4uZTQwY2RmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0ZsYXNoUG9pbnQuYworKysgYi9kcml2ZXJzL3Njc2kvRmxhc2hQb2ludC5jCkBAIC0zOTI0LDcgKzM5MjQsNyBAQAogewogCXN0cnVjdCBzY2NiX21ncl90YXJfaW5mbyAqY3VyclRhcl9JbmZvOwogCi0JaWYgKChwX3NjY2ItPlRhcmdJRCA+IE1BWF9TQ1NJX1RBUikgfHwgKHBfc2NjYi0+THVuID4gTUFYX0xVTikpIHsKKwlpZiAoKHBfc2NjYi0+VGFyZ0lEID49IE1BWF9TQ1NJX1RBUikgfHwgKHBfc2NjYi0+THVuID49IE1BWF9MVU4pKSB7CiAJCXJldHVybjsKIAl9CiAJY3VyclRhcl9JbmZvID0gJkZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bcF9zY2NiLT5UYXJnSURdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmUuaAppbmRleCBhOTNhNTA0Li4xMzZiNDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmUuaAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmUuaApAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjQsNiArMjQsMTAgQEAKICNkZWZpbmUgRldfVkVSX0xFTgkzMgogI2RlZmluZSBNQ0NfUV9MRU4JMTI4CiAjZGVmaW5lIE1DQ19DUV9MRU4JMjU2CisjZGVmaW5lIE1BWF9NQ0NfQ01ECTE2CisvKiBCbGFkZUVuZ2luZSBHZW5lcmF0aW9uIG51bWJlcnMgKi8KKyNkZWZpbmUgQkVfR0VOMiAyCisjZGVmaW5lIEJFX0dFTjMgMwogCiBzdHJ1Y3QgYmVfZG1hX21lbSB7CiAJdm9pZCAqdmE7CkBAIC01Nyw2ICs2MSwxMSBAQAogCXJldHVybiBxLT5kbWFfbWVtLnZhICsgcS0+aGVhZCAqIHEtPmVudHJ5X3NpemU7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcXVldWVfZ2V0X3dyYihzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSwgdW5zaWduZWQgaW50IHdyYl9udW0pCit7CisJcmV0dXJuIHEtPmRtYV9tZW0udmEgKyB3cmJfbnVtICogcS0+ZW50cnlfc2l6ZTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkICpxdWV1ZV90YWlsX25vZGUoc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEpCiB7CiAJcmV0dXJuIHEtPmRtYV9tZW0udmEgKyBxLT50YWlsICogcS0+ZW50cnlfc2l6ZTsKQEAgLTEwNCwxNSArMTEzLDE5IEBACiAJc3BpbmxvY2tfdCBtY2NfbG9jazsJLyogRm9yIHNlcmlhbGl6aW5nIG1jYyBjbWRzIHRvIEJFIGNhcmQgKi8KIAlzcGlubG9ja190IG1jY19jcV9sb2NrOwogCi0JLyogTUNDIEFzeW5jIGNhbGxiYWNrICovCi0Jdm9pZCAoKmFzeW5jX2NiKSAodm9pZCAqYWRhcHRlciwgYm9vbCBsaW5rX3VwKTsKLQl2b2lkICphZGFwdGVyX2N0eHQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgbWNjX3dhaXRbTUFYX01DQ19DTUQgKyAxXTsKKwl1bnNpZ25lZCBpbnQgbWNjX3RhZ1tNQVhfTUNDX0NNRF07CisJdW5zaWduZWQgaW50IG1jY19udW10YWdbTUFYX01DQ19DTUQgKyAxXTsKKwl1bnNpZ25lZCBzaG9ydCBtY2NfYWxsb2NfaW5kZXg7CisJdW5zaWduZWQgc2hvcnQgbWNjX2ZyZWVfaW5kZXg7CisJdW5zaWduZWQgaW50IG1jY190YWdfYXZhaWxhYmxlOwogfTsKIAogI2luY2x1ZGUgImJlX2NtZHMuaCIKIAogI2RlZmluZSBQQUdFX1NISUZUXzRLIDEyCiAjZGVmaW5lIFBBR0VfU0laRV80SyAoMSA8PCBQQUdFX1NISUZUXzRLKQorI2RlZmluZSBtY2NfdGltZW91dAkJMTIwMDAwIC8qIDVzIHRpbWVvdXQgKi8KIAogLyogUmV0dXJucyBudW1iZXIgb2YgcGFnZXMgc3Bhbm5lZCBieSB0aGUgZGF0YSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gYWRkciAqLwogI2RlZmluZSBQQUdFU180S19TUEFOTkVEKF9hZGRyZXNzLCBzaXplKSAJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMKaW5kZXggZjAwODcwOC4uNjcwOTg1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuYworKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5jCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSAiYmVfbWdtdC5oIgogI2luY2x1ZGUgImJlX21haW4uaCIKIAotc3RhdGljIHZvaWQgYmVfbWNjX25vdGlmeShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit2b2lkIGJlX21jY19ub3RpZnkoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQogewogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICptY2NxID0gJnBoYmEtPmN0cmwubWNjX29iai5xOwogCXUzMiB2YWwgPSAwOwpAQCAtMjksNiArMjksNTIgQEAKIAlpb3dyaXRlMzIodmFsLCBwaGJhLT5kYl92YSArIERCX01DQ1FfT0ZGU0VUKTsKIH0KIAordW5zaWduZWQgaW50IGFsbG9jX21jY190YWcoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXVuc2lnbmVkIGludCB0YWcgPSAwOworCXVuc2lnbmVkIGludCBudW0gPSAwOworCittY2NfdGFnX3JkeToKKwlpZiAocGhiYS0+Y3RybC5tY2NfdGFnX2F2YWlsYWJsZSkgeworCQl0YWcgPSBwaGJhLT5jdHJsLm1jY190YWdbcGhiYS0+Y3RybC5tY2NfYWxsb2NfaW5kZXhdOworCQlwaGJhLT5jdHJsLm1jY190YWdbcGhiYS0+Y3RybC5tY2NfYWxsb2NfaW5kZXhdID0gMDsKKwkJcGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10gPSAwOworCX0gZWxzZSB7CisJCXVkZWxheSgxMDApOworCQludW0rKzsKKwkJaWYgKG51bSA8IG1jY190aW1lb3V0KQorCQkJZ290byBtY2NfdGFnX3JkeTsKKwl9CisJaWYgKHRhZykgeworCQlwaGJhLT5jdHJsLm1jY190YWdfYXZhaWxhYmxlLS07CisJCWlmIChwaGJhLT5jdHJsLm1jY19hbGxvY19pbmRleCA9PSAoTUFYX01DQ19DTUQgLSAxKSkKKwkJCXBoYmEtPmN0cmwubWNjX2FsbG9jX2luZGV4ID0gMDsKKwkJZWxzZQorCQkJcGhiYS0+Y3RybC5tY2NfYWxsb2NfaW5kZXgrKzsKKwl9CisJcmV0dXJuIHRhZzsKK30KKwordm9pZCBmcmVlX21jY190YWcoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdW5zaWduZWQgaW50IHRhZykKK3sKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJdGFnID0gdGFnICYgMHgwMDAwMDBGRjsKKwljdHJsLT5tY2NfdGFnW2N0cmwtPm1jY19mcmVlX2luZGV4XSA9IHRhZzsKKwlpZiAoY3RybC0+bWNjX2ZyZWVfaW5kZXggPT0gKE1BWF9NQ0NfQ01EIC0gMSkpCisJCWN0cmwtPm1jY19mcmVlX2luZGV4ID0gMDsKKwllbHNlCisJCWN0cmwtPm1jY19mcmVlX2luZGV4Kys7CisJY3RybC0+bWNjX3RhZ19hdmFpbGFibGUrKzsKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKK30KKworYm9vbCBpc19saW5rX3N0YXRlX2V2dCh1MzIgdHJhaWxlcikKK3sKKwlyZXR1cm4gKCgodHJhaWxlciA+PiBBU1lOQ19UUkFJTEVSX0VWRU5UX0NPREVfU0hJRlQpICYKKwkJICBBU1lOQ19UUkFJTEVSX0VWRU5UX0NPREVfTUFTSykgPT0KKwkJICBBU1lOQ19FVkVOVF9DT0RFX0xJTktfU1RBVEUpOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgYmVfbWNjX2NvbXBsX2lzX25ldyhzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbCkKIHsKIAlpZiAoY29tcGwtPmZsYWdzICE9IDApIHsKQEAgLTY0LDEyICsxMTAsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbGlua19zdGF0ZV9ldnQodTMyIHRyYWlsZXIpCitpbnQgYmVfbWNjX2NvbXBsX3Byb2Nlc3NfaXNyKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQkJICAgIHN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsKQogewotCXJldHVybiAoKCh0cmFpbGVyID4+IEFTWU5DX1RSQUlMRVJfRVZFTlRfQ09ERV9TSElGVCkgJgotCQkgIEFTWU5DX1RSQUlMRVJfRVZFTlRfQ09ERV9NQVNLKSA9PQotCQkgIEFTWU5DX0VWRU5UX0NPREVfTElOS19TVEFURSk7CisJdTE2IGNvbXBsX3N0YXR1cywgZXh0ZF9zdGF0dXM7CisJdW5zaWduZWQgc2hvcnQgdGFnOworCisJYmVfZHdzX2xlX3RvX2NwdShjb21wbCwgNCk7CisKKwljb21wbF9zdGF0dXMgPSAoY29tcGwtPnN0YXR1cyA+PiBDUUVfU1RBVFVTX0NPTVBMX1NISUZUKSAmCisJCQkJCUNRRV9TVEFUVVNfQ09NUExfTUFTSzsKKwkvKiBUaGUgY3RybC5tY2NfbnVtdGFnW3RhZ10gaXMgZmlsbGVkIHdpdGgKKwkgKiBbMzFdID0gdmFsaWQsIFszMDoyNF0gPSBSc3ZkLCBbMjM6MTZdID0gd3JiLCBbMTU6OF0gPSBleHRkX3N0YXR1cywKKwkgKiBbNzowXSA9IGNvbXBsX3N0YXR1cworCSAqLworCXRhZyA9IChjb21wbC0+dGFnMCAmIDB4MDAwMDAwRkYpOworCWV4dGRfc3RhdHVzID0gKGNvbXBsLT5zdGF0dXMgPj4gQ1FFX1NUQVRVU19FWFREX1NISUZUKSAmCisJCQkJCUNRRV9TVEFUVVNfRVhURF9NQVNLOworCisJY3RybC0+bWNjX251bXRhZ1t0YWddICA9IDB4ODAwMDAwMDA7CisJY3RybC0+bWNjX251bXRhZ1t0YWddIHw9IChjb21wbC0+dGFnMCAmIDB4MDBGRjAwMDApOworCWN0cmwtPm1jY19udW10YWdbdGFnXSB8PSAoZXh0ZF9zdGF0dXMgJiAweDAwMDAwMEZGKSA8PCA4OworCWN0cmwtPm1jY19udW10YWdbdGFnXSB8PSAoY29tcGxfc3RhdHVzICYgMHgwMDAwMDBGRik7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjdHJsLT5tY2Nfd2FpdFt0YWddKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBiZV9tY2NfY29tcGwgKmJlX21jY19jb21wbF9nZXQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQpAQCAtODksNyArMTUzLDcgQEAKIAlpc2NzaV9zZXNzaW9uX2ZhaWx1cmUoY2xzX3Nlc3Npb24tPmRkX2RhdGEsIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CiB9CiAKLXN0YXRpYyB2b2lkIGJlaXNjc2lfYXN5bmNfbGlua19zdGF0ZV9wcm9jZXNzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKK3ZvaWQgYmVpc2NzaV9hc3luY19saW5rX3N0YXRlX3Byb2Nlc3Moc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAogCQlzdHJ1Y3QgYmVfYXN5bmNfZXZlbnRfbGlua19zdGF0ZSAqZXZ0KQogewogCXN3aXRjaCAoZXZ0LT5wb3J0X2xpbmtfc3RhdHVzKSB7CkBAIC05NywxMyArMTYxLDEzIEBACiAJCVNFX0RFQlVHKERCR19MVkxfMSwgIkxpbmsgRG93biBvbiBQaHlzaWNhbCBQb3J0ICVkIFxuIiwKIAkJCQkJCWV2dC0+cGh5c2ljYWxfcG9ydCk7CiAJCXBoYmEtPnN0YXRlIHw9IEJFX0FEQVBURVJfTElOS19ET1dOOworCQlpc2NzaV9ob3N0X2Zvcl9lYWNoX3Nlc3Npb24ocGhiYS0+c2hvc3QsCisJCQkJCSAgICBiZTJpc2NzaV9mYWlsX3Nlc3Npb24pOwogCQlicmVhazsKIAljYXNlIEFTWU5DX0VWRU5UX0xJTktfVVA6CiAJCXBoYmEtPnN0YXRlID0gQkVfQURBUFRFUl9VUDsKIAkJU0VfREVCVUcoREJHX0xWTF8xLCAiTGluayBVUCBvbiBQaHlzaWNhbCBQb3J0ICVkIFxuIiwKIAkJCQkJCWV2dC0+cGh5c2ljYWxfcG9ydCk7Ci0JCWlzY3NpX2hvc3RfZm9yX2VhY2hfc2Vzc2lvbihwaGJhLT5zaG9zdCwKLQkJCQkJICAgIGJlMmlzY3NpX2ZhaWxfc2Vzc2lvbik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVNFX0RFQlVHKERCR19MVkxfMSwgIlVuZXhwZWN0ZWQgQXN5bmMgTm90aWZpY2F0aW9uICVkIG9uIgpAQCAtMTYyLDcgKzIyNiw2IEBACiAvKiBXYWl0IHRpbGwgbm8gbW9yZSBwZW5kaW5nIG1jYyByZXF1ZXN0cyBhcmUgcHJlc2VudCAqLwogc3RhdGljIGludCBiZV9tY2Nfd2FpdF9jb21wbChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCiB7Ci0jZGVmaW5lIG1jY190aW1lb3V0CQkxMjAwMDAgLyogNXMgdGltZW91dCAqLwogCWludCBpLCBzdGF0dXM7CiAJZm9yIChpID0gMDsgaSA8IG1jY190aW1lb3V0OyBpKyspIHsKIAkJc3RhdHVzID0gYmVpc2NzaV9wcm9jZXNzX21jYyhwaGJhKTsKQEAgLTM3Miw5ICs0MzUsMTAgQEAKIAogCUJVR19PTihhdG9taWNfcmVhZCgmbWNjcS0+dXNlZCkgPj0gbWNjcS0+bGVuKTsKIAl3cmIgPSBxdWV1ZV9oZWFkX25vZGUobWNjcSk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwl3cmItPnRhZzAgPSAobWNjcS0+aGVhZCAmIDB4MDAwMDAwRkYpIDw8IDE2OwogCXF1ZXVlX2hlYWRfaW5jKG1jY3EpOwogCWF0b21pY19pbmMoJm1jY3EtPnVzZWQpOwotCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CiAJcmV0dXJuIHdyYjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgKaW5kZXggNWRlOGFjYi4uNDlmY2M3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC00MjUsMTQgKzQyNSwyMCBAQAogaW50IGJlX3BvbGxfbWNjKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpOwogdW5zaWduZWQgY2hhciBtZ210X2NoZWNrX3N1cHBvcnRlZF9mdyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAogCQkJCSAgICAgIHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSk7Ci1pbnQgYmVfY21kX2dldF9tYWNfYWRkcihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHU4ICptYWNfYWRkcik7Ci0KK3Vuc2lnbmVkIGludCBiZV9jbWRfZ2V0X21hY19hZGRyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSk7Cit2b2lkIGZyZWVfbWNjX3RhZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1bnNpZ25lZCBpbnQgdGFnKTsKIC8qSVNDU0kgRnVuY3R1aW9ucyAqLwogaW50IGJlX2NtZF9md19pbml0aWFsaXplKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpOwogCiBzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiX2Zyb21fbWJveChzdHJ1Y3QgYmVfZG1hX21lbSAqbWJveF9tZW0pOwogc3RydWN0IGJlX21jY193cmIgKndyYl9mcm9tX21jY3Eoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKTsKIGludCBiZV9tY2Nfbm90aWZ5X3dhaXQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKTsKK3ZvaWQgYmVfbWNjX25vdGlmeShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpOwordW5zaWduZWQgaW50IGFsbG9jX21jY190YWcoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKTsKK3ZvaWQgYmVpc2NzaV9hc3luY19saW5rX3N0YXRlX3Byb2Nlc3Moc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQlzdHJ1Y3QgYmVfYXN5bmNfZXZlbnRfbGlua19zdGF0ZSAqZXZ0KTsKK2ludCBiZV9tY2NfY29tcGxfcHJvY2Vzc19pc3Ioc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCQkgICAgc3RydWN0IGJlX21jY19jb21wbCAqY29tcGwpOwogCiBpbnQgYmVfbWJveF9ub3RpZnkoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCk7CiAKQEAgLTQ0OCw2ICs0NTQsOCBAQAogaW50IGJlX2NtZF93cmJxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCBzdHJ1Y3QgYmVfZG1hX21lbSAqcV9tZW0sCiAJCSAgICAgICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqd3JicSk7CiAKK2Jvb2wgaXNfbGlua19zdGF0ZV9ldnQodTMyIHRyYWlsZXIpOworCiBzdHJ1Y3QgYmVfZGVmYXVsdF9wZHVfY29udGV4dCB7CiAJdTMyIGR3WzRdOwogfSBfX3BhY2tlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMKaW5kZXggZDU4N2IwMy4uMjlhM2FhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTEwMSw2ICsxMDEsNyBAQAogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzID0gY2xzX3Nlc3Npb24tPmRkX2RhdGE7CiAJc3RydWN0IGJlaXNjc2lfc2Vzc2lvbiAqYmVpc2NzaV9zZXNzID0gc2Vzcy0+ZGRfZGF0YTsKIAorCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfc2Vzc2lvbl9kZXN0cm95XG4iKTsKIAlwY2lfcG9vbF9kZXN0cm95KGJlaXNjc2lfc2Vzcy0+YmhzX3Bvb2wpOwogCWlzY3NpX3Nlc3Npb25fdGVhcmRvd24oY2xzX3Nlc3Npb24pOwogfQpAQCAtMjI0LDYgKzIyNSw3IEBACiAJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uID0gY29ubi0+ZGRfZGF0YTsKIAlpbnQgbGVuID0gMDsKIAorCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9nZXRfcGFyYW0sIHBhcmFtPSAlZFxuIiwgcGFyYW0pOwogCWJlaXNjc2lfZXAgPSBiZWlzY3NpX2Nvbm4tPmVwOwogCWlmICghYmVpc2NzaV9lcCkgewogCQlTRV9ERUJVRyhEQkdfTFZMXzEsCkBAIC0yNTQsNiArMjU2LDcgQEAKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CiAJaW50IHJldDsKIAorCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9zZXRfcGFyYW0sIHBhcmFtPSAlZFxuIiwgcGFyYW0pOwogCXJldCA9IGlzY3NpX3NldF9wYXJhbShjbHNfY29ubiwgcGFyYW0sIGJ1ZiwgYnVmbGVuKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMjcxLDggKzI3NCw4IEBACiAJCQljb25uLT5tYXhfcmVjdl9kbGVuZ3RoID0gNjU1MzY7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfUEFSQU1fTUFYX0JVUlNUOgotCQlpZiAoc2Vzc2lvbi0+Zmlyc3RfYnVyc3QgPiAyNjIxNDQpCi0JCQlzZXNzaW9uLT5maXJzdF9idXJzdCA9IDI2MjE0NDsKKwkJaWYgKHNlc3Npb24tPm1heF9idXJzdCA+IDI2MjE0NCkKKwkJCXNlc3Npb24tPm1heF9idXJzdCA9IDI2MjE0NDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CkBAIC0yOTMsMTIgKzI5Niw0MSBAQAogCQkJICAgZW51bSBpc2NzaV9ob3N0X3BhcmFtIHBhcmFtLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gKHN0cnVjdCBiZWlzY3NpX2hiYSAqKWlzY3NpX2hvc3RfcHJpdihzaG9zdCk7CisJc3RydWN0IGJlX2NtZF9yZXNwX2dldF9tYWNfYWRkciAqcmVzcDsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOworCXVuc2lnbmVkIGludCB0YWcsIHdyYl9udW07CiAJaW50IGxlbiA9IDA7CisJdW5zaWduZWQgc2hvcnQgc3RhdHVzLCBleHRkX3N0YXR1czsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqbWNjcSA9ICZwaGJhLT5jdHJsLm1jY19vYmoucTsKIAorCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfZ2V0X2hvc3RfcGFyYW0sIHBhcmFtPSAlZFxuIiwgcGFyYW0pOwogCXN3aXRjaCAocGFyYW0pIHsKIAljYXNlIElTQ1NJX0hPU1RfUEFSQU1fSFdBRERSRVNTOgotCQliZV9jbWRfZ2V0X21hY19hZGRyKHBoYmEsIHBoYmEtPm1hY19hZGRyZXNzKTsKLQkJbGVuID0gc3lzZnNfZm9ybWF0X21hYyhidWYsIHBoYmEtPm1hY19hZGRyZXNzLCBFVEhfQUxFTik7CisJCXRhZyA9IGJlX2NtZF9nZXRfbWFjX2FkZHIocGhiYSk7CisJCWlmICghdGFnKSB7CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJiZV9jbWRfZ2V0X21hY19hZGRyIEZhaWxlZCBcbiIpOworCQkJcmV0dXJuIC0xOworCQl9IGVsc2UKKwkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwaGJhLT5jdHJsLm1jY193YWl0W3RhZ10sCisJCQkJCQkgcGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10pOworCisJCXdyYl9udW0gPSAocGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10gJiAweDAwRkYwMDAwKSA+PiAxNjsKKwkJZXh0ZF9zdGF0dXMgPSAocGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10gJiAweDAwMDBGRjAwKSA+PiA4OworCQlzdGF0dXMgPSBwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSAmIDB4MDAwMDAwRkY7CisJCWlmIChzdGF0dXMgfHwgZXh0ZF9zdGF0dXMpIHsKKwkJCVNFX0RFQlVHKERCR19MVkxfMSwgImJlX2NtZF9nZXRfbWFjX2FkZHIgRmFpbGVkIgorCQkJCQkgICAgIiBzdGF0dXMgPSAlZCBleHRkX3N0YXR1cyA9ICVkIFxuIiwKKwkJCQkJICAgIHN0YXR1cywgZXh0ZF9zdGF0dXMpOworCQkJZnJlZV9tY2NfdGFnKCZwaGJhLT5jdHJsLCB0YWcpOworCQkJcmV0dXJuIC0xOworCQl9IGVsc2UgeworCQkJd3JiID0gcXVldWVfZ2V0X3dyYihtY2NxLCB3cmJfbnVtKTsKKwkJCWZyZWVfbWNjX3RhZygmcGhiYS0+Y3RybCwgdGFnKTsKKwkJCXJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJCQltZW1jcHkocGhiYS0+bWFjX2FkZHJlc3MsIHJlc3AtPm1hY19hZGRyZXNzLCBFVEhfQUxFTik7CisJCQlsZW4gPSBzeXNmc19mb3JtYXRfbWFjKGJ1ZiwgcGhiYS0+bWFjX2FkZHJlc3MsCisJCQkJCSAgICAgICBFVEhfQUxFTik7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIGlzY3NpX2hvc3RfZ2V0X3BhcmFtKHNob3N0LCBwYXJhbSwgYnVmKTsKQEAgLTM3OCw2ICs0MTAsNyBAQAogCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwOwogCXN0cnVjdCBiZWlzY3NpX29mZmxvYWRfcGFyYW1zIHBhcmFtczsKIAorCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9zdGFydFxuIik7CiAJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihzdHJ1Y3QgYmVpc2NzaV9vZmZsb2FkX3BhcmFtcykpOwogCWJlaXNjc2lfZXAgPSBiZWlzY3NpX2Nvbm4tPmVwOwogCWlmICghYmVpc2NzaV9lcCkKQEAgLTQyMiw4ICs0NTUsMTQgQEAKIHsKIAlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOwogCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfZXAtPnBoYmE7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKm1jY3EgPSAmcGhiYS0+Y3RybC5tY2Nfb2JqLnE7CisJc3RydWN0IGJlX21jY193cmIgKndyYjsKKwlzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfb3V0ICpwdGNwY25jdF9vdXQ7CisJdW5zaWduZWQgc2hvcnQgc3RhdHVzLCBleHRkX3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgdGFnLCB3cmJfbnVtOwogCWludCByZXQgPSAtMTsKIAorCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfb3Blbl9jb25uXG4iKTsKIAliZWlzY3NpX2VwLT5lcF9jaWQgPSBiZWlzY3NpX2dldF9jaWQocGhiYSk7CiAJaWYgKGJlaXNjc2lfZXAtPmVwX2NpZCA9PSAweEZGRkYpIHsKIAkJU0VfREVCVUcoREJHX0xWTF8xLCAiTm8gZnJlZSBjaWQgYXZhaWxhYmxlXG4iKTsKQEAgLTQzMSwxNSArNDcwLDQ0IEBACiAJfQogCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfb3Blbl9jb25uLCBlcF9jaWQ9JWQgIiwKIAkJIGJlaXNjc2lfZXAtPmVwX2NpZCk7Ci0JcGhiYS0+ZXBfYXJyYXlbYmVpc2NzaV9lcC0+ZXBfY2lkXSA9IGVwOwotCWlmIChiZWlzY3NpX2VwLT5lcF9jaWQgPgotCSAgICAocGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydCArIHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsKSkgeworCXBoYmEtPmVwX2FycmF5W2JlaXNjc2lfZXAtPmVwX2NpZCAtCisJCSAgICAgICBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0XSA9IGVwOworCWlmIChiZWlzY3NpX2VwLT5lcF9jaWQgPiAocGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydCArCisJCQkJICBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCAqIDIpKSB7CiAJCVNFX0RFQlVHKERCR19MVkxfMSwgIkZhaWxlZCBpbiBhbGxvY2F0ZSBpc2NzaSBjaWRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCWJlaXNjc2lfZXAtPmNpZF92bGQgPSAwOwotCXJldHVybiBtZ210X29wZW5fY29ubmVjdGlvbihwaGJhLCBkc3RfYWRkciwgYmVpc2NzaV9lcCk7CisJdGFnID0gbWdtdF9vcGVuX2Nvbm5lY3Rpb24ocGhiYSwgZHN0X2FkZHIsIGJlaXNjc2lfZXApOworCWlmICghdGFnKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAibWdtdF9pbnZhbGlkYXRlX2Nvbm5lY3Rpb24gRmFpbGVkIGZvciBjaWQ9JWQgXG4iLAorCQkJIGJlaXNjc2lfZXAtPmVwX2NpZCk7CisJfSBlbHNlIHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBoYmEtPmN0cmwubWNjX3dhaXRbdGFnXSwKKwkJCQkJIHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddKTsKKwl9CisJd3JiX251bSA9IChwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSAmIDB4MDBGRjAwMDApID4+IDE2OworCWV4dGRfc3RhdHVzID0gKHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddICYgMHgwMDAwRkYwMCkgPj4gODsKKwlzdGF0dXMgPSBwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSAmIDB4MDAwMDAwRkY7CisJaWYgKHN0YXR1cyB8fCBleHRkX3N0YXR1cykgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJtZ210X29wZW5fY29ubmVjdGlvbiBGYWlsZWQiCisJCQkJICAgICIgc3RhdHVzID0gJWQgZXh0ZF9zdGF0dXMgPSAlZCBcbiIsCisJCQkJICAgIHN0YXR1cywgZXh0ZF9zdGF0dXMpOworCQlmcmVlX21jY190YWcoJnBoYmEtPmN0cmwsIHRhZyk7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgeworCQl3cmIgPSBxdWV1ZV9nZXRfd3JiKG1jY3EsIHdyYl9udW0pOworCQlmcmVlX21jY190YWcoJnBoYmEtPmN0cmwsIHRhZyk7CisKKwkJcHRjcGNuY3Rfb3V0ID0gCWVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwkJYmVpc2NzaV9lcCA9IGVwLT5kZF9kYXRhOworCQliZWlzY3NpX2VwLT5md19oYW5kbGUgPSBwdGNwY25jdF9vdXQtPmNvbm5lY3Rpb25faGFuZGxlOworCQliZWlzY3NpX2VwLT5jaWRfdmxkID0gMTsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAibWdtdF9vcGVuX2Nvbm5lY3Rpb24gU3VjY2Vzc1xuIik7CisJfQorCXJldHVybiAwOwogfQogCiAvKioKQEAgLTQ1OSwxNCArNTI3LDEyIEBACiAgKiBiZWlzY3NpX2ZyZWVfZXAgLSBmcmVlIGVuZHBvaW50CiAgKiBAZXA6CXBvaW50ZXIgdG8gaXNjc2kgZW5kcG9pbnQgc3RydWN0dXJlCiAgKi8KLXN0YXRpYyB2b2lkIGJlaXNjc2lfZnJlZV9lcChzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwKQorc3RhdGljIHZvaWQgYmVpc2NzaV9mcmVlX2VwKHN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwKQogewotCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CiAJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKIAogCWJlaXNjc2lfcHV0X2NpZChwaGJhLCBiZWlzY3NpX2VwLT5lcF9jaWQpOwogCWJlaXNjc2lfZXAtPnBoYmEgPSBOVUxMOwotCWlzY3NpX2Rlc3Ryb3lfZW5kcG9pbnQoZXApOwogfQogCiAvKioKQEAgLTQ5NSw5ICs1NjEsOSBAQAogCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCX0KIAotCWlmIChwaGJhLT5zdGF0ZSkgeworCWlmIChwaGJhLT5zdGF0ZSAhPSBCRV9BREFQVEVSX1VQKSB7CiAJCXJldCA9IC1FQlVTWTsKLQkJU0VfREVCVUcoREJHX0xWTF8xLCAiVGhlIEFkYXBldCBzdGF0ZSBpcyBOb3QgVVAgXG4iKTsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiVGhlIEFkYXB0ZXIgc3RhdGUgaXMgTm90IFVQIFxuIik7CiAJCXJldHVybiBFUlJfUFRSKHJldCk7CiAJfQogCkBAIC01MDksOSArNTc1LDkgQEAKIAogCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKIAliZWlzY3NpX2VwLT5waGJhID0gcGhiYTsKLQorCWJlaXNjc2lfZXAtPm9wZW5pc2NzaV9lcCA9IGVwOwogCWlmIChiZWlzY3NpX29wZW5fY29ubihlcCwgTlVMTCwgZHN0X2FkZHIsIG5vbl9ibG9ja2luZykpIHsKLQkJU0VfREVCVUcoREJHX0xWTF8xLCAiRmFpbGVkIGluIGFsbG9jYXRlIGlzY3NpIGNpZFxuIik7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIkZhaWxlZCBpbiBiZWlzY3NpX29wZW5fY29ubiBcbiIpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGZyZWVfZXA7CiAJfQpAQCAtNTE5LDcgKzU4NSw3IEBACiAJcmV0dXJuIGVwOwogCiBmcmVlX2VwOgotCWJlaXNjc2lfZnJlZV9lcChlcCk7CisJYmVpc2NzaV9mcmVlX2VwKGJlaXNjc2lfZXApOwogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKQEAgLTU0NiwyMCArNjEyLDIyIEBACiAgKiBAZXA6IFRoZSBpc2NzaSBlbmRwb2ludAogICogQGZsYWc6IFRoZSB0eXBlIG9mIGNvbm5lY3Rpb24gY2xvc3VyZQogICovCi1zdGF0aWMgaW50IGJlaXNjc2lfY2xvc2VfY29ubihzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLCBpbnQgZmxhZykKK3N0YXRpYyBpbnQgYmVpc2NzaV9jbG9zZV9jb25uKHN0cnVjdCAgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcCwgaW50IGZsYWcpCiB7CiAJaW50IHJldCA9IDA7Ci0Jc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwl1bnNpZ25lZCBpbnQgdGFnOwogCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfZXAtPnBoYmE7CiAKLQlpZiAoTUdNVF9TVEFUVVNfU1VDQ0VTUyAhPQotCSAgICBtZ210X3VwbG9hZF9jb25uZWN0aW9uKHBoYmEsIGJlaXNjc2lfZXAtPmVwX2NpZCwKLQkJQ09OTkVDVElPTl9VUExPQURfR1JBQ0VGVUwpKSB7CisJdGFnID0gbWdtdF91cGxvYWRfY29ubmVjdGlvbihwaGJhLCBiZWlzY3NpX2VwLT5lcF9jaWQsIGZsYWcpOworCWlmICghdGFnKSB7CiAJCVNFX0RFQlVHKERCR19MVkxfOCwgInVwbG9hZCBmYWlsZWQgZm9yIGNpZCAweCV4IiwKIAkJCSBiZWlzY3NpX2VwLT5lcF9jaWQpOwogCQlyZXQgPSAtMTsKKwl9IGVsc2UgeworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocGhiYS0+Y3RybC5tY2Nfd2FpdFt0YWddLAorCQkJCQkgcGhiYS0+Y3RybC5tY2NfbnVtdGFnW3RhZ10pOworCQlmcmVlX21jY190YWcoJnBoYmEtPmN0cmwsIHRhZyk7CiAJfQotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTc0LDE5ICs2NDIsMTcgQEAKIAlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm47CiAJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXA7CiAJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOwotCWludCBmbGFnID0gMDsKIAogCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKIAlwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKLQlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3RcbiIpOworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfZXBfZGlzY29ubmVjdCBmb3IgZXBfY2lkID0gJWRcbiIsCisJCQkgICAgIGJlaXNjc2lfZXAtPmVwX2NpZCk7CiAKIAlpZiAoYmVpc2NzaV9lcC0+Y29ubikgewogCQliZWlzY3NpX2Nvbm4gPSBiZWlzY3NpX2VwLT5jb25uOwogCQlpc2NzaV9zdXNwZW5kX3F1ZXVlKGJlaXNjc2lfY29ubi0+Y29ubik7Ci0JCWJlaXNjc2lfY2xvc2VfY29ubihlcCwgZmxhZyk7CiAJfQogCi0JYmVpc2NzaV9mcmVlX2VwKGVwKTsKIH0KIAogLyoqCkBAIC02MTksMjMgKzY4NSwzMSBAQAogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3Qoc2Vzc2lvbi0+Y2xzX3Nlc3Npb24pOwogCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCk7Ci0JdW5zaWduZWQgaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgdGFnOwogCXVuc2lnbmVkIHNob3J0IHNhdmVjZmdfZmxhZyA9IENNRF9JU0NTSV9TRVNTSU9OX1NBVkVfQ0ZHX09OX0ZMQVNIOwogCi0JU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX3N0b3BcbiIpOwogCWJlaXNjc2lfZXAgPSBiZWlzY3NpX2Nvbm4tPmVwOwogCWlmICghYmVpc2NzaV9lcCkgewogCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2Nvbm5fc3RvcCAsIG5vIGJlaXNjc2lfZXBcbiIpOwogCQlyZXR1cm47CiAJfQotCXN0YXR1cyA9IG1nbXRfaW52YWxpZGF0ZV9jb25uZWN0aW9uKHBoYmEsIGJlaXNjc2lfZXAsCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX3N0b3AgIGVwX2NpZCA9ICVkXG4iLAorCQkJICAgICBiZWlzY3NpX2VwLT5lcF9jaWQpOworCXRhZyA9IG1nbXRfaW52YWxpZGF0ZV9jb25uZWN0aW9uKHBoYmEsIGJlaXNjc2lfZXAsCiAJCQkJCSAgICBiZWlzY3NpX2VwLT5lcF9jaWQsIDEsCiAJCQkJCSAgICBzYXZlY2ZnX2ZsYWcpOwotCWlmIChzdGF0dXMgIT0gTUdNVF9TVEFUVVNfU1VDQ0VTUykgeworCWlmICghdGFnKSB7CiAJCVNFX0RFQlVHKERCR19MVkxfMSwKIAkJCSAibWdtdF9pbnZhbGlkYXRlX2Nvbm5lY3Rpb24gRmFpbGVkIGZvciBjaWQ9JWQgXG4iLAogCQkJIGJlaXNjc2lfZXAtPmVwX2NpZCk7CisJfSBlbHNlIHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBoYmEtPmN0cmwubWNjX3dhaXRbdGFnXSwKKwkJCQkJIHBoYmEtPmN0cmwubWNjX251bXRhZ1t0YWddKTsKKwkJZnJlZV9tY2NfdGFnKCZwaGJhLT5jdHJsLCB0YWcpOwogCX0KKwliZWlzY3NpX2Nsb3NlX2Nvbm4oYmVpc2NzaV9lcCwgQ09OTkVDVElPTl9VUExPQURfR1JBQ0VGVUwpOworCWJlaXNjc2lfZnJlZV9lcChiZWlzY3NpX2VwKTsKKwlpc2NzaV9kZXN0cm95X2VuZHBvaW50KGJlaXNjc2lfZXAtPm9wZW5pc2NzaV9lcCk7CiAJYmVpc2NzaV91bmJpbmRfY29ubl90b19jaWQocGhiYSwgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKIAlpc2NzaV9jb25uX3N0b3AoY2xzX2Nvbm4sIGZsYWcpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuaAppbmRleCBmOTJmZmM1Li4xZjUxMmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuaAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuaApAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMKaW5kZXggMWE1NTdmYS4uN2MyMjYxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYworKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC00MCw3ICs0MCw2IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGJlX2lvcG9sbF9idWRnZXQgPSAxMDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYmVfbWF4X3BoeXNfc2l6ZSA9IDY0Owogc3RhdGljIHVuc2lnbmVkIGludCBlbmFibGVfbXNpeCA9IDE7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHJpbmdfbW9kZTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlaXNjc2lfcGNpX2lkX3RhYmxlKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQyAiICIgQlVJTERfU1RSKTsKQEAgLTYyLDEwICs2MSwxMCBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tIFBDSSBEcml2ZXIgb3BlcmF0aW9ucyBhbmQgZGF0YSAtLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGJlaXNjc2lfcGNpX2lkX3RhYmxlKSA9IHsKIAl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBCRV9ERVZJQ0VfSUQxKSB9LAorCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIEJFX0RFVklDRV9JRDIpIH0sCiAJeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgT0NfREVWSUNFX0lEMSkgfSwKIAl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBPQ19ERVZJQ0VfSUQyKSB9LAogCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIE9DX0RFVklDRV9JRDMpIH0sCi0JeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgT0NfREVWSUNFX0lENCkgfSwKIAl7IDAgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiZWlzY3NpX3BjaV9pZF90YWJsZSk7CkBAIC0xMTIsNiArMTExLDcgQEAKIAltZW1zZXQocGhiYSwgMCwgc2l6ZW9mKCpwaGJhKSk7CiAJcGhiYS0+c2hvc3QgPSBzaG9zdDsKIAlwaGJhLT5wY2lkZXYgPSBwY2lfZGV2X2dldChwY2lkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwY2lkZXYsIHBoYmEpOwogCiAJaWYgKGlzY3NpX2hvc3RfYWRkKHNob3N0LCAmcGhiYS0+cGNpZGV2LT5kZXYpKQogCQlnb3RvIGZyZWVfZGV2aWNlczsKQEAgLTE0Myw2ICsxNDMsNyBAQAogCQkJCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCiB7CiAJdTggX19pb21lbSAqYWRkcjsKKwlpbnQgcGNpY2ZnX3JlZzsKIAogCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMiksCiAJCQkgICAgICAgcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDIpKTsKQEAgLTE1OSwxMyArMTYwLDE5IEBACiAJcGhiYS0+ZGJfdmEgPSBhZGRyOwogCXBoYmEtPmRiX3BhLnUuYTY0LmFkZHJlc3MgPSAgcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgNCk7CiAKLQlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDEpLAotCQkJICAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAxKSk7CisJaWYgKHBoYmEtPmdlbmVyYXRpb24gPT0gQkVfR0VOMikKKwkJcGNpY2ZnX3JlZyA9IDE7CisJZWxzZQorCQlwY2ljZmdfcmVnID0gMDsKKworCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgcGNpY2ZnX3JlZyksCisJCQkgICAgICAgcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIHBjaWNmZ19yZWcpKTsKKwogCWlmIChhZGRyID09IE5VTEwpCiAJCWdvdG8gcGNpX21hcF9lcnI7CiAJcGhiYS0+Y3RybC5wY2ljZmcgPSBhZGRyOwogCXBoYmEtPnBjaV92YSA9IGFkZHI7Ci0JcGhiYS0+cGNpX3BhLnUuYTY0LmFkZHJlc3MgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAxKTsKKwlwaGJhLT5wY2lfcGEudS5hNjQuYWRkcmVzcyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIHBjaWNmZ19yZWcpOwogCXJldHVybiAwOwogCiBwY2lfbWFwX2VycjoKQEAgLTIzMCwyOSArMjM3LDI3IEBACiAKIHN0YXRpYyB2b2lkIGJlaXNjc2lfZ2V0X3BhcmFtcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCiB7Ci0JcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybCA9IEJFMl9JT19ERVBUSDsKLQlwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCA9IEJFMl9NQVhfU0VTU0lPTlM7Ci0JcGhiYS0+cGFyYW1zLmFzeW5jcGR1c19wZXJfY3RybCA9IEJFMl9BU1lOQ1BEVVM7Ci0JcGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmwgPSBCRTJfTUFYX0lDRFMgLyAyOworCXBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwgPSAocGhiYS0+ZndfY29uZmlnLmlzY3NpX2ljZF9jb3VudAorCQkJCSAgICAtIChwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50CisJCQkJICAgICsgQkUyX1RNRlMKKwkJCQkgICAgKyBCRTJfTk9QT1VUX1JFUSkpOworCXBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsID0gcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudDsKKwlwaGJhLT5wYXJhbXMuYXN5bmNwZHVzX3Blcl9jdHJsID0gcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudDs7CisJcGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmwgPSBwaGJhLT5md19jb25maWcuaXNjc2lfaWNkX2NvdW50OzsKIAlwaGJhLT5wYXJhbXMubnVtX3NnZV9wZXJfaW8gPSBCRTJfU0dFOwogCXBoYmEtPnBhcmFtcy5kZWZwZHVfaGRyX3N6ID0gQkUyX0RFRlBEVV9IRFJfU1o7CiAJcGhiYS0+cGFyYW1zLmRlZnBkdV9kYXRhX3N6ID0gQkUyX0RFRlBEVV9EQVRBX1NaOwogCXBoYmEtPnBhcmFtcy5lcV90aW1lciA9IDY0OwogCXBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcyA9Ci0JICAgICgoKEJFMl9DTURTX1BFUl9DWE4gKiAyICsgQkUyX0xPR09VVFMgKyBCRTJfVE1GUyArIEJFMl9BU1lOQ1BEVVMpIC8KLQkJCQkJCQkJNTEyKSArIDEpICogNTEyOworCSAgICAoKChCRTJfQ01EU19QRVJfQ1hOICogMiArIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQgKiAyCisJCQkJICAgICsgQkUyX1RNRlMpIC8gNTEyKSArIDEpICogNTEyOwogCXBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcyA9IChwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXMgPCAxMDI0KQogCQkJCT8gMTAyNCA6IHBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllczsKIAlTRV9ERUJVRyhEQkdfTFZMXzgsICJwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXM9JWQgXG4iLAotCQkgcGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzKTsKKwkJCSAgICAgcGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzKTsKIAlwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXMgPQotCSAgICAoKChCRTJfQ01EU19QRVJfQ1hOICogMiArIEJFMl9MT0dPVVRTICsgQkUyX1RNRlMgKyBCRTJfQVNZTkNQRFVTKSAvCi0JCQkJCQkJCTUxMikgKyAxKSAqIDUxMjsKLQlTRV9ERUJVRyhEQkdfTFZMXzgsCi0JCSJwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXM9JWQgQkUyX0NNRFNfUEVSX0NYTj0lZCIKLQkJIkJFMl9MT0dPVVRTPSVkIEJFMl9UTUZTPSVkIEJFMl9BU1lOQ1BEVVM9JWQgXG4iLAotCQlwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXMsIEJFMl9DTURTX1BFUl9DWE4sCi0JCUJFMl9MT0dPVVRTLCBCRTJfVE1GUywgQkUyX0FTWU5DUERVUyk7CisJICAgICgoKEJFMl9DTURTX1BFUl9DWE4gKiAyICsgIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQgKiAyCisJCQkJICAgICsgQkUyX1RNRlMpIC8gNTEyKSArIDEpICogNTEyOwogCXBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4gPSAyNTY7CiB9CiAKQEAgLTQ0Myw3ICs0NDgsNyBAQAogCQkJaWYgKHBoYmEtPnRvZG9fbWNjX2NxKQogCQkJCXF1ZXVlX3dvcmsocGhiYS0+d3EsICZwaGJhLT53b3JrX2Nxcyk7CiAKLQkJaWYgKChudW1fbWNjZXFfcHJvY2Vzc2VkKSAmJiAoIW51bV9pb2VxX3Byb2Nlc3NlZCkpCisJCQlpZiAoKG51bV9tY2NlcV9wcm9jZXNzZWQpICYmICghbnVtX2lvZXFfcHJvY2Vzc2VkKSkKIAkJCQlod2lfcmluZ19lcV9kYihwaGJhLCBlcS0+aWQsIDAsCiAJCQkJCSAgICAgIChudW1faW9lcV9wcm9jZXNzZWQgKwogCQkJCQkgICAgICAgbnVtX21jY2VxX3Byb2Nlc3NlZCkgLCAxLCAxKTsKQEAgLTU2MSw2ICs1NjYsNyBAQAogCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJJbiBJU0NTSV9PUF9SRUpFQ1RcbiIpOwogCQlicmVhazsKIAljYXNlIElTQ1NJX09QX0xPR0lOX1JTUDoKKwljYXNlIElTQ1NJX09QX1RFWFRfUlNQOgogCQl0YXNrID0gY29ubi0+bG9naW5fdGFzazsKIAkJaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CiAJCWxvZ2luX2hkciA9IChzdHJ1Y3QgaXNjc2lfaGRyICopcHBkdTsKQEAgLTYzMSwyOSArNjM3LDI5IEBACiAgKiBhbGxvY193cmJfaGFuZGxlIC0gVG8gYWxsb2NhdGUgYSB3cmIgaGFuZGxlCiAgKiBAcGhiYTogVGhlIGhiYSBwb2ludGVyCiAgKiBAY2lkOiBUaGUgY2lkIHRvIHVzZSBmb3IgYWxsb2NhdGlvbgotICogQGluZGV4OiBpbmRleCBhbGxvY2F0aW9uIGFuZCB3cmIgaW5kZXgKICAqCiAgKiBUaGlzIGhhcHBlbnMgdW5kZXIgc2Vzc2lvbl9sb2NrIHVudGlsIHN1Ym1pc3Npb24gdG8gY2hpcAogICovCi1zdHJ1Y3Qgd3JiX2hhbmRsZSAqYWxsb2Nfd3JiX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHVuc2lnbmVkIGludCBjaWQsCi0JCQkJICAgIGludCBpbmRleCkKK3N0cnVjdCB3cmJfaGFuZGxlICphbGxvY193cmJfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdW5zaWduZWQgaW50IGNpZCkKIHsKIAlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CiAJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOwotCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZTsKKwlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcHdyYl9oYW5kbGUsICpwd3JiX2hhbmRsZV90bXA7CiAKIAlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKIAlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbY2lkXTsKLQlpZiAocHdyYl9jb250ZXh0LT53cmJfaGFuZGxlc19hdmFpbGFibGUpIHsKKwlpZiAocHdyYl9jb250ZXh0LT53cmJfaGFuZGxlc19hdmFpbGFibGUgPj0gMikgewogCQlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZVsKIAkJCQkJICAgIHB3cmJfY29udGV4dC0+YWxsb2NfaW5kZXhdOwogCQlwd3JiX2NvbnRleHQtPndyYl9oYW5kbGVzX2F2YWlsYWJsZS0tOwotCQlwd3JiX2hhbmRsZS0+bnh0X3dyYl9pbmRleCA9IHB3cmJfaGFuZGxlLT53cmJfaW5kZXg7CiAJCWlmIChwd3JiX2NvbnRleHQtPmFsbG9jX2luZGV4ID09CiAJCQkJCQkocGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biAtIDEpKQogCQkJcHdyYl9jb250ZXh0LT5hbGxvY19pbmRleCA9IDA7CiAJCWVsc2UKIAkJCXB3cmJfY29udGV4dC0+YWxsb2NfaW5kZXgrKzsKKwkJcHdyYl9oYW5kbGVfdG1wID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlWworCQkJCQkJcHdyYl9jb250ZXh0LT5hbGxvY19pbmRleF07CisJCXB3cmJfaGFuZGxlLT5ueHRfd3JiX2luZGV4ID0gcHdyYl9oYW5kbGVfdG1wLT53cmJfaW5kZXg7CiAJfSBlbHNlCiAJCXB3cmJfaGFuZGxlID0gTlVMTDsKIAlyZXR1cm4gcHdyYl9oYW5kbGU7CkBAIC02NzEsOSArNjc3LDcgQEAKIGZyZWVfd3JiX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHN0cnVjdCBod2lfd3JiX2NvbnRleHQgKnB3cmJfY29udGV4dCwKIAkJc3RydWN0IHdyYl9oYW5kbGUgKnB3cmJfaGFuZGxlKQogewotCWlmICghcmluZ19tb2RlKQotCQlwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VbcHdyYl9jb250ZXh0LT5mcmVlX2luZGV4XSA9Ci0JCQkJCSAgICAgICBwd3JiX2hhbmRsZTsKKwlwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VbcHdyYl9jb250ZXh0LT5mcmVlX2luZGV4XSA9IHB3cmJfaGFuZGxlOwogCXB3cmJfY29udGV4dC0+d3JiX2hhbmRsZXNfYXZhaWxhYmxlKys7CiAJaWYgKHB3cmJfY29udGV4dC0+ZnJlZV9pbmRleCA9PSAocGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biAtIDEpKQogCQlwd3JiX2NvbnRleHQtPmZyZWVfaW5kZXggPSAwOwpAQCAtNzkwLDYgKzc5NCw3IEBACiAJCW1lbWNweSh0YXNrLT5zYy0+c2Vuc2VfYnVmZmVyLCBzZW5zZSwKIAkJICAgICAgIG1pbl90KHUxNiwgc2Vuc2VfbGVuLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpKTsKIAl9CisKIAlpZiAoaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyLmZsYWdzICYgSVNDU0lfRkxBR19DTURfUkVBRCkgewogCQlpZiAocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9yZXNfY250KSAvIDMyXQogCQkJCQkJCSYgU09MX1JFU19DTlRfTUFTSykKQEAgLTgxMSw2ICs4MTYsNyBAQAogCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gYmVpc2NzaV9jb25uLT5jb25uOwogCiAJaGRyID0gKHN0cnVjdCBpc2NzaV9sb2dvdXRfcnNwICopdGFzay0+aGRyOworCWhkci0+b3Bjb2RlID0gSVNDU0lfT1BfTE9HT1VUX1JTUDsKIAloZHItPnQyd2FpdCA9IDU7CiAJaGRyLT50MnJldGFpbiA9IDA7CiAJaGRyLT5mbGFncyA9ICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9mbGFncykgLyAzMl0KQEAgLTgyNSw2ICs4MzEsOSBAQAogCQkJCQkmIFNPTF9FWFBfQ01EX1NOX01BU0spICsKIAkJCSgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9jbWRfd25kKQogCQkJCQkvIDMyXSAmIFNPTF9DTURfV05EX01BU0spID4+IDI0KSAtIDEpOworCWhkci0+ZGxlbmd0aFswXSA9IDA7CisJaGRyLT5kbGVuZ3RoWzFdID0gMDsKKwloZHItPmRsZW5ndGhbMl0gPSAwOwogCWhkci0+aGxlbmd0aCA9IDA7CiAJaGRyLT5pdHQgPSBpb190YXNrLT5saWJpc2NzaV9pdHQ7CiAJX19pc2NzaV9jb21wbGV0ZV9wZHUoY29ubiwgKHN0cnVjdCBpc2NzaV9oZHIgKiloZHIsIE5VTEwsIDApOwpAQCAtODM5LDYgKzg0OCw3IEBACiAJc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CiAKIAloZHIgPSAoc3RydWN0IGlzY3NpX3RtX3JzcCAqKXRhc2stPmhkcjsKKwloZHItPm9wY29kZSA9IElTQ1NJX09QX1NDU0lfVE1GVU5DX1JTUDsKIAloZHItPmZsYWdzID0gKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2ZsYWdzKSAvIDMyXQogCQkJCQkmIFNPTF9GTEFHU19NQVNLKSA+PiAyNCkgfCAweDgwOwogCWhkci0+cmVzcG9uc2UgPSAocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9yZXNwKSAvCkBAIC04NTksNyArODY5LDYgQEAKIHsKIAlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CiAJc3RydWN0IHdyYl9oYW5kbGUgKnB3cmJfaGFuZGxlID0gTlVMTDsKLQlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGUgPSBOVUxMOwogCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKIAlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzazsKIAlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrOwpAQCAtODY3LDIyICs4NzYsMTQgQEAKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CiAKIAlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKLQlpZiAocmluZ19tb2RlKSB7Ci0JCXBzZ2xfaGFuZGxlID0gcGhiYS0+c2dsX2huZGxfYXJyYXlbKChwc29sLT4KLQkJCSAgICAgIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWVfcmluZywgaWNkX2luZGV4KSAvCi0JCQkJMzJdICYgU09MX0lDRF9JTkRFWF9NQVNLKSA+PiA2KV07Ci0JCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtwc2dsX2hhbmRsZS0+Y2lkXTsKLQkJdGFzayA9IHBzZ2xfaGFuZGxlLT50YXNrOwotCQlwd3JiX2hhbmRsZSA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0WygocHNvbC0+CisJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0WygocHNvbC0+CiAJCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvIDMyXSAmCi0JCQkJU09MX0NJRF9NQVNLKSA+PiA2KV07Ci0JCXB3cmJfaGFuZGxlID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkWygocHNvbC0+CisJCQkJU09MX0NJRF9NQVNLKSA+PiA2KSAtCisJCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydF07CisJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGRbKChwc29sLT4KIAkJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCB3cmJfaW5kZXgpIC8KIAkJCQkzMl0gJiBTT0xfV1JCX0lOREVYX01BU0spID4+IDE2KV07Ci0JCXRhc2sgPSBwd3JiX2hhbmRsZS0+cGlvX2hhbmRsZTsKLQl9CisJdGFzayA9IHB3cmJfaGFuZGxlLT5waW9faGFuZGxlOwogCiAJaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CiAJc3Bpbl9sb2NrKCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKQEAgLTkyMywzMSArOTI0LDIzIEBACiAJc3RydWN0IGlzY3NpX3dyYiAqcHdyYiA9IE5VTEw7CiAJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOwogCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrOwotCXN0cnVjdCBzZ2xfaGFuZGxlICpwc2dsX2hhbmRsZSA9IE5VTEw7CiAJdW5zaWduZWQgaW50IHR5cGU7CiAJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CiAJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOwogCiAJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7Ci0JaWYgKHJpbmdfbW9kZSkgewotCQlwc2dsX2hhbmRsZSA9IHBoYmEtPnNnbF9obmRsX2FycmF5WygocHNvbC0+Ci0JCQkgICAgICBkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlX3JpbmcsIGljZF9pbmRleCkgLwotCQkJICAgICAgMzJdICYgU09MX0lDRF9JTkRFWF9NQVNLKSA+PiA2KV07Ci0JCXRhc2sgPSBwc2dsX2hhbmRsZS0+dGFzazsKLQkJdHlwZSA9IHBzZ2xfaGFuZGxlLT50eXBlOwotCX0gZWxzZSB7Ci0JCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT4KLQkJCQl3cmJfY29udGV4dFsoKHBzb2wtPmR3W29mZnNldG9mCisJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0WygocHNvbC0+ZHdbb2Zmc2V0b2YKIAkJCQkoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvIDMyXQotCQkJCSYgU09MX0NJRF9NQVNLKSA+PiA2KV07Ci0JCXB3cmJfaGFuZGxlID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkWygocHNvbC0+CisJCQkJJiBTT0xfQ0lEX01BU0spID4+IDYpIC0KKwkJCQlwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0XTsKKwlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZXN0ZFsoKHBzb2wtPgogCQkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIHdyYl9pbmRleCkgLwogCQkJCTMyXSAmIFNPTF9XUkJfSU5ERVhfTUFTSykgPj4gMTYpXTsKLQkJdGFzayA9IHB3cmJfaGFuZGxlLT5waW9faGFuZGxlOwotCQlwd3JiID0gcHdyYl9oYW5kbGUtPnB3cmI7Ci0JCXR5cGUgPSAocHdyYi0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlKSAvIDMyXSAmCi0JCQkgV1JCX1RZUEVfTUFTSykgPj4gMjg7Ci0JfQorCXRhc2sgPSBwd3JiX2hhbmRsZS0+cGlvX2hhbmRsZTsKKwlwd3JiID0gcHdyYl9oYW5kbGUtPnB3cmI7CisJdHlwZSA9IChwd3JiLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUpIC8gMzJdICYKKwkJCQkgV1JCX1RZUEVfTUFTSykgPj4gMjg7CisKIAlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgSFdIX1RZUEVfSU86CkBAIC05NzgsMTUgKzk3MSw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJaWYgKHJpbmdfbW9kZSkKLQkJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAotCQkJCSJJbiBod2lfY29tcGxldGVfY21kLCB1bmtub3duIHR5cGUgPSAlZCIKLQkJCQkiaWNkX2luZGV4IDB4JXggQ0lEIDB4JXhcbiIsIHR5cGUsCi0JCQkJKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlX3JpbmcsCi0JCQkJaWNkX2luZGV4KSAvIDMyXSAmIFNPTF9JQ0RfSU5ERVhfTUFTSykgPj4gNiksCi0JCQkJcHNnbF9oYW5kbGUtPmNpZCk7Ci0JCWVsc2UKLQkJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKIAkJCQkiSW4gaHdpX2NvbXBsZXRlX2NtZCwgdW5rbm93biB0eXBlID0gJWQiCiAJCQkJIndyYl9pbmRleCAweCV4IENJRCAweCV4XG4iLCB0eXBlLAogCQkJCSgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaXNjc2lfd3JiLApAQCAtMTA3Nyw3ICsxMDYyLDggQEAKIAogCVdBUk5fT04oIXBhc3luY19oYW5kbGUpOwogCi0JcGFzeW5jX2hhbmRsZS0+Y3JpID0gKHVuc2lnbmVkIHNob3J0KWJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZDsKKwlwYXN5bmNfaGFuZGxlLT5jcmkgPSAodW5zaWduZWQgc2hvcnQpYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkIC0KKwkJCQkJICAgICBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0OwogCXBhc3luY19oYW5kbGUtPmlzX2hlYWRlciA9IGlzX2hlYWRlcjsKIAlwYXN5bmNfaGFuZGxlLT5idWZmZXJfbGVuID0gKChwZHBkdV9jcWUtPgogCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLCBkcGwpIC8gMzJdCkBAIC0xMzI3LDkgKzEzMTMsMTAgQEAKIAl9CiAKIAlzdGF0dXMgPSBiZWlzY3NpX3Byb2Nlc3NfYXN5bmNfcGR1KGJlaXNjc2lfY29ubiwgcGhiYSwKLQkJCQkJICAgYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkLAotCQkJCQkgICBwaGRyLCBoZHJfbGVuLCBwZmlyc3RfYnVmZmVyLAotCQkJCQkgICBidWZfbGVuKTsKKwkJCQkJICAgKGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAtCisJCQkJCSAgICBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0KSwKKwkJCQkJICAgIHBoZHIsIGhkcl9sZW4sIHBmaXJzdF9idWZmZXIsCisJCQkJCSAgICBidWZfbGVuKTsKIAogCWlmIChzdGF0dXMgPT0gMCkKIAkJaHdpX2ZyZWVfYXN5bmNfbXNnKHBoYmEsIGNyaSk7CkBAIC0xNDIyLDYgKzE0MDksNDggQEAKIAlod2lfcG9zdF9hc3luY19idWZmZXJzKHBoYmEsIHBhc3luY19oYW5kbGUtPmlzX2hlYWRlcik7CiB9CiAKK3N0YXRpYyB2b2lkICBiZWlzY3NpX3Byb2Nlc3NfbWNjX2lzcihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKm1jY19jcTsKKwlzdHJ1Y3QgIGJlX21jY19jb21wbCAqbWNjX2NvbXBsOworCXVuc2lnbmVkIGludCBudW1fcHJvY2Vzc2VkID0gMDsKKworCW1jY19jcSA9ICZwaGJhLT5jdHJsLm1jY19vYmouY3E7CisJbWNjX2NvbXBsID0gcXVldWVfdGFpbF9ub2RlKG1jY19jcSk7CisJbWNjX2NvbXBsLT5mbGFncyA9IGxlMzJfdG9fY3B1KG1jY19jb21wbC0+ZmxhZ3MpOworCXdoaWxlIChtY2NfY29tcGwtPmZsYWdzICYgQ1FFX0ZMQUdTX1ZBTElEX01BU0spIHsKKworCQlpZiAobnVtX3Byb2Nlc3NlZCA+PSAzMikgeworCQkJaHdpX3JpbmdfY3FfZGIocGhiYSwgbWNjX2NxLT5pZCwKKwkJCQkJbnVtX3Byb2Nlc3NlZCwgMCwgMCk7CisJCQludW1fcHJvY2Vzc2VkID0gMDsKKwkJfQorCQlpZiAobWNjX2NvbXBsLT5mbGFncyAmIENRRV9GTEFHU19BU1lOQ19NQVNLKSB7CisJCQkvKiBJbnRlcnByZXQgZmxhZ3MgYXMgYW4gYXN5bmMgdHJhaWxlciAqLworCQkJaWYgKGlzX2xpbmtfc3RhdGVfZXZ0KG1jY19jb21wbC0+ZmxhZ3MpKQorCQkJCS8qIEludGVycHJldCBjb21wbCBhcyBhIGFzeW5jIGxpbmsgZXZ0ICovCisJCQkJYmVpc2NzaV9hc3luY19saW5rX3N0YXRlX3Byb2Nlc3MocGhiYSwKKwkJCQkoc3RydWN0IGJlX2FzeW5jX2V2ZW50X2xpbmtfc3RhdGUgKikgbWNjX2NvbXBsKTsKKwkJCWVsc2UKKwkJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkJCSIgVW5zdXBwb3J0ZWQgQXN5bmMgRXZlbnQsIGZsYWdzIgorCQkJCQkiID0gMHglMDh4IFxuIiwgbWNjX2NvbXBsLT5mbGFncyk7CisJCX0gZWxzZSBpZiAobWNjX2NvbXBsLT5mbGFncyAmIENRRV9GTEFHU19DT01QTEVURURfTUFTSykgeworCQkJYmVfbWNjX2NvbXBsX3Byb2Nlc3NfaXNyKCZwaGJhLT5jdHJsLCBtY2NfY29tcGwpOworCQkJYXRvbWljX2RlYygmcGhiYS0+Y3RybC5tY2Nfb2JqLnEudXNlZCk7CisJCX0KKworCQltY2NfY29tcGwtPmZsYWdzID0gMDsKKwkJcXVldWVfdGFpbF9pbmMobWNjX2NxKTsKKwkJbWNjX2NvbXBsID0gcXVldWVfdGFpbF9ub2RlKG1jY19jcSk7CisJCW1jY19jb21wbC0+ZmxhZ3MgPSBsZTMyX3RvX2NwdShtY2NfY29tcGwtPmZsYWdzKTsKKwkJbnVtX3Byb2Nlc3NlZCsrOworCX0KKworCWlmIChudW1fcHJvY2Vzc2VkID4gMCkKKwkJaHdpX3JpbmdfY3FfZGIocGhiYSwgbWNjX2NxLT5pZCwgbnVtX3Byb2Nlc3NlZCwgMSwgMCk7CisKK30KIAogc3RhdGljIHVuc2lnbmVkIGludCBiZWlzY3NpX3Byb2Nlc3NfY3Eoc3RydWN0IGJlX2VxX29iaiAqcGJlX2VxKQogewpAQCAtMTQzMSw3ICsxNDYwLDggQEAKIAl1bnNpZ25lZCBpbnQgbnVtX3Byb2Nlc3NlZCA9IDA7CiAJdW5zaWduZWQgaW50IHRvdF9udW1wID0gMDsKIAlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm47Ci0Jc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlID0gTlVMTDsKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcDsKKwlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwOwogCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKIAogCWNxID0gcGJlX2VxLT5jcTsKQEAgLTE0NDIsMzIgKzE0NzIsMTMgQEAKIAkgICAgICAgQ1FFX1ZBTElEX01BU0spIHsKIAkJYmVfZHdzX2xlX3RvX2NwdShzb2wsIHNpemVvZihzdHJ1Y3Qgc29sX2NxZSkpOwogCi0JCWlmIChyaW5nX21vZGUpIHsKLQkJCXBzZ2xfaGFuZGxlID0gcGhiYS0+c2dsX2huZGxfYXJyYXlbKChzb2wtPgotCQkJCSAgICAgIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWVfcmluZywKLQkJCQkgICAgICBpY2RfaW5kZXgpIC8gMzJdICYgU09MX0lDRF9JTkRFWF9NQVNLKQotCQkJCSAgICAgID4+IDYpXTsKLQkJCWJlaXNjc2lfY29ubiA9IHBoYmEtPmNvbm5fdGFibGVbcHNnbF9oYW5kbGUtPmNpZF07Ci0JCQlpZiAoIWJlaXNjc2lfY29ubiB8fCAhYmVpc2NzaV9jb25uLT5lcCkgewotCQkJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAotCQkJCSAgICAgIkNvbm5lY3Rpb24gdGFibGUgZW1wdHkgZm9yIGNpZCA9ICVkXG4iLAotCQkJCSAgICAgIHBzZ2xfaGFuZGxlLT5jaWQpOwotCQkJCXJldHVybiAwOwotCQkJfQorCQllcCA9IHBoYmEtPmVwX2FycmF5Wyh1MzIpICgoc29sLT4KKwkJCQkgICBkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8gMzJdICYKKwkJCQkgICBTT0xfQ0lEX01BU0spID4+IDYpIC0KKwkJCQkgICBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0XTsKIAotCQl9IGVsc2UgewotCQkJYmVpc2NzaV9jb25uID0gcGhiYS0+Y29ubl90YWJsZVsodTMyKSAoc29sLT4KLQkJCQkgZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvIDMyXSAmCi0JCQkJIFNPTF9DSURfTUFTSykgPj4gNl07Ci0KLQkJCWlmICghYmVpc2NzaV9jb25uIHx8ICFiZWlzY3NpX2Nvbm4tPmVwKSB7Ci0JCQkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCi0JCQkJICAgICAiQ29ubmVjdGlvbiB0YWJsZSBlbXB0eSBmb3IgY2lkID0gJWRcbiIsCi0JCQkJICAgICAodTMyKShzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsCi0JCQkJICAgICBjaWQpIC8gMzJdICYgU09MX0NJRF9NQVNLKSA+PiA2KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfQorCQliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJCWJlaXNjc2lfY29ubiA9IGJlaXNjc2lfZXAtPmNvbm47CiAKIAkJaWYgKG51bV9wcm9jZXNzZWQgPj0gMzIpIHsKIAkJCWh3aV9yaW5nX2NxX2RiKHBoYmEsIGNxLT5pZCwKQEAgLTE1MTEsMjEgKzE1MjIsMTMgQEAKIAkJY2FzZSBDTURfQ1hOX0tJTExFRF9JVFRfSU5WQUxJRDoKIAkJY2FzZSBDTURfQ1hOX0tJTExFRF9TRVFfT1VUT0ZPUkRFUjoKIAkJY2FzZSBDTURfQ1hOX0tJTExFRF9JTlZBTElEX0RBVEFTTl9SQ1ZEOgotCQkJaWYgKHJpbmdfbW9kZSkgewotCQkJCVNFX0RFQlVHKERCR19MVkxfMSwKLQkJCQkgIkNRIEVycm9yIG5vdGlmaWNhdGlvbiBmb3IgY21kLi4gIgotCQkJCSAiY29kZSAlZCBjaWQgMHgleFxuIiwKLQkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCi0JCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssIHBzZ2xfaGFuZGxlLT5jaWQpOwotCQkJfSBlbHNlIHsKLQkJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCiAJCQkJICJDUSBFcnJvciBub3RpZmljYXRpb24gZm9yIGNtZC4uICIKIAkJCQkgImNvZGUgJWQgY2lkIDB4JXhcbiIsCiAJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLwogCQkJCSAzMl0gJiBDUUVfQ09ERV9NQVNLLAogCQkJCSAoc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8KIAkJCQkgMzJdICYgU09MX0NJRF9NQVNLKSk7Ci0JCQl9CiAJCQlicmVhazsKIAkJY2FzZSBVTlNPTF9EQVRBX0RJR0VTVF9FUlJPUl9OT1RJRlk6CiAJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCkBAIC0xNTQ3LDM3ICsxNTUwLDIzIEBACiAJCWNhc2UgQ1hOX0tJTExFRF9PVkVSX1JVTl9SRVNJRFVBTDoKIAkJY2FzZSBDWE5fS0lMTEVEX1VOREVSX1JVTl9SRVNJRFVBTDoKIAkJY2FzZSBDWE5fS0lMTEVEX0NNTkRfREFUQV9OT1RfT05fU0FNRV9DT05OOgotCQkJaWYgKHJpbmdfbW9kZSkgewotCQkJCVNFX0RFQlVHKERCR19MVkxfMSwgIkNRIEVycm9yICVkLCByZXNldCBDSUQgIgotCQkJCSAiMHgleC4uLlxuIiwKLQkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCi0JCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssIHBzZ2xfaGFuZGxlLT5jaWQpOwotCQkJfSBlbHNlIHsKLQkJCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJDUSBFcnJvciAlZCwgcmVzZXQgQ0lEICIKKwkJCVNFX0RFQlVHKERCR19MVkxfMSwgIkNRIEVycm9yICVkLCByZXNldCBDSUQgIgogCQkJCSAiMHgleC4uLlxuIiwKIAkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCiAJCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssCi0JCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCi0JCQkJIDMyXSAmIENRRV9DSURfTUFTSyk7Ci0JCQl9CisJCQkJIChzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLworCQkJCSAzMl0gJiBDUUVfQ0lEX01BU0spKTsKIAkJCWlzY3NpX2Nvbm5fZmFpbHVyZShiZWlzY3NpX2Nvbm4tPmNvbm4sCiAJCQkJCSAgIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CiAJCQlicmVhazsKIAkJY2FzZSBDWE5fS0lMTEVEX1JTVF9TRU5UOgogCQljYXNlIENYTl9LSUxMRURfUlNUX1JDVkQ6Ci0JCQlpZiAocmluZ19tb2RlKSB7Ci0JCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgJWQsIHJlc2V0IgotCQkJCSJyZWNlaXZlZC9zZW50IG9uIENJRCAweCV4Li4uXG4iLAotCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNvZGUpIC8KLQkJCQkgMzJdICYgQ1FFX0NPREVfTUFTSywgcHNnbF9oYW5kbGUtPmNpZCk7Ci0JCQl9IGVsc2UgewotCQkJCVNFX0RFQlVHKERCR19MVkxfMSwgIkNRIEVycm9yICVkLCByZXNldCIKKwkJCVNFX0RFQlVHKERCR19MVkxfMSwgIkNRIEVycm9yICVkLCByZXNldCIKIAkJCQkicmVjZWl2ZWQvc2VudCBvbiBDSUQgMHgleC4uLlxuIiwKIAkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCiAJCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssCi0JCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCi0JCQkJIDMyXSAmIENRRV9DSURfTUFTSyk7Ci0JCQl9CisJCQkJIChzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLworCQkJCSAzMl0gJiBDUUVfQ0lEX01BU0spKTsKIAkJCWlzY3NpX2Nvbm5fZmFpbHVyZShiZWlzY3NpX2Nvbm4tPmNvbm4sCiAJCQkJCSAgIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CiAJCQlicmVhazsKQEAgLTE1ODYsOCArMTU3NSw4IEBACiAJCQkJICJyZWNlaXZlZCBvbiBDSUQgMHgleC4uLlxuIiwKIAkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCiAJCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssCi0JCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCi0JCQkJIDMyXSAmIENRRV9DSURfTUFTSyk7CisJCQkJIChzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLworCQkJCSAzMl0gJiBDUUVfQ0lEX01BU0spKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTE2MDQsNyArMTU5Myw3IEBACiAJcmV0dXJuIHRvdF9udW1wOwogfQogCi1zdGF0aWMgdm9pZCBiZWlzY3NpX3Byb2Nlc3NfYWxsX2NxcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit2b2lkIGJlaXNjc2lfcHJvY2Vzc19hbGxfY3FzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKQEAgLTE2MjQsNiArMTYxMyw3IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5pc3JfbG9jaywgZmxhZ3MpOwogCQlwaGJhLT50b2RvX21jY19jcSA9IDA7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmlzcl9sb2NrLCBmbGFncyk7CisJCWJlaXNjc2lfcHJvY2Vzc19tY2NfaXNyKHBoYmEpOwogCX0KIAogCWlmIChwaGJhLT50b2RvX2NxKSB7CkBAIC0xNjY4LDcgKzE2NTgsOCBAQAogCQkJCSAgICAgIGlvX3Rhc2stPmJoc19wYS51LmEzMi5hZGRyZXNzX2hpKTsKIAogCWxfc2cgPSBzZzsKLQlmb3IgKGluZGV4ID0gMDsgKGluZGV4IDwgbnVtX3NnKSAmJiAoaW5kZXggPCAyKTsgaW5kZXgrKywgc2dfbmV4dChzZykpIHsKKwlmb3IgKGluZGV4ID0gMDsgKGluZGV4IDwgbnVtX3NnKSAmJiAoaW5kZXggPCAyKTsgaW5kZXgrKywKKwkJCQkJCQkgc2cgPSBzZ19uZXh0KHNnKSkgewogCQlpZiAoaW5kZXggPT0gMCkgewogCQkJc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7CiAJCQlhZGRyID0gKHU2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOwpAQCAtMTY3OSwxMSArMTY3MCw3IEBACiAJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sZW4sIHB3cmIsCiAJCQkJCQkJc2dfbGVuKTsKIAkJCXNnZV9sZW4gPSBzZ19sZW47Ci0JCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sYXN0LCBwd3JiLAotCQkJCQkJCTEpOwogCQl9IGVsc2UgewotCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfbGFzdCwgcHdyYiwKLQkJCQkJCQkwKTsKIAkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UxX3IydF9vZmZzZXQsCiAJCQkJCQkJcHdyYiwgc2dlX2xlbik7CiAJCQlzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKQEAgLTE3MDYsMTMgKzE2OTMsMjcgQEAKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9sbywgcHNnbCwKIAkJCWlvX3Rhc2stPmJoc19wYS51LmEzMi5hZGRyZXNzX2xvKTsKIAotCWlmIChudW1fc2cgPT0gMikKLQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTFfbGFzdCwgcHdyYiwgMSk7CisJaWYgKG51bV9zZyA9PSAxKSB7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xhc3QsIHB3cmIsCisJCQkJCQkJCTEpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9sYXN0LCBwd3JiLAorCQkJCQkJCQkwKTsKKwl9IGVsc2UgaWYgKG51bV9zZyA9PSAyKSB7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xhc3QsIHB3cmIsCisJCQkJCQkJCTApOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9sYXN0LCBwd3JiLAorCQkJCQkJCQkxKTsKKwl9IGVsc2UgeworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sYXN0LCBwd3JiLAorCQkJCQkJCQkwKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTFfbGFzdCwgcHdyYiwKKwkJCQkJCQkJMCk7CisJfQogCXNnID0gbF9zZzsKIAlwc2dsKys7CiAJcHNnbCsrOwogCW9mZnNldCA9IDA7Ci0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnVtX3NnOyBpbmRleCsrLCBzZ19uZXh0KHNnKSwgcHNnbCsrKSB7CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnVtX3NnOyBpbmRleCsrLCBzZyA9IHNnX25leHQoc2cpLCBwc2dsKyspIHsKIAkJc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7CiAJCWFkZHIgPSAodTY0KSBzZ19kbWFfYWRkcmVzcyhzZyk7CiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2xvLCBwc2dsLApAQCAtMjA0OCwxMCArMjA0OSw5IEBACiAJfQogCWlkeCA9IDA7CiAJcHdyYiA9IG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKLQludW1fY3huX3dyYiA9Ci0JICAgICgobWVtX2Rlc2NyX3dyYi0+bWVtX2FycmF5W2lkeF0uc2l6ZSkgLyAoc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpKSAqCi0JICAgICBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huKTsKLQorCW51bV9jeG5fd3JiID0gKG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnNpemUpIC8KKwkJICAgICAgKChzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikgKgorCQkJcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bikpOwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsOyBpbmRleCArPSAyKSB7CiAJCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtpbmRleF07CiAJCWlmIChudW1fY3huX3dyYikgewpAQCAtMjA2NCw5ICsyMDY0LDkgQEAKIAkJfSBlbHNlIHsKIAkJCWlkeCsrOwogCQkJcHdyYiA9IG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKLQkJCW51bV9jeG5fd3JiID0gKChtZW1fZGVzY3Jfd3JiLT5tZW1fYXJyYXlbaWR4XS5zaXplKSAvCi0JCQkJCShzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikpICoKLQkJCQkJcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bik7CisJCQludW1fY3huX3dyYiA9IChtZW1fZGVzY3Jfd3JiLT5tZW1fYXJyYXlbaWR4XS5zaXplKSAvCisJCQkJICAgICAgKChzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikgKgorCQkJCQlwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huKSk7CiAJCQlmb3IgKGogPSAwOyBqIDwgcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bjsgaisrKSB7CiAJCQkJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2Vbal07CiAJCQkJcHdyYl9oYW5kbGUtPnB3cmIgPSBwd3JiOwpAQCAtMjM4Myw3ICsyMzgzLDcgQEAKIAkJCQkJCSAgICAgJnBhZGRyKTsKIAkJaWYgKCFjcV92YWRkcmVzcykKIAkJCWdvdG8gY3JlYXRlX2NxX2Vycm9yOwotCQlyZXQgPSBiZV9maWxsX3F1ZXVlKGNxLCBwaGJhLT5wYXJhbXMuaWNkc19wZXJfY3RybCAvIDIsCisJCXJldCA9IGJlX2ZpbGxfcXVldWUoY3EsIHBoYmEtPnBhcmFtcy5udW1fY3FfZW50cmllcywKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzb2xfY3FlKSwgY3FfdmFkZHJlc3MpOwogCQlpZiAocmV0KSB7CiAJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LApAQCAtMjYzNCw3ICsyNjM0LDggQEAKIAkJCQkgICAgICJ3cmJxIGNyZWF0ZSBmYWlsZWQuIik7CiAJCQlyZXR1cm4gc3RhdHVzOwogCQl9Ci0JCXBod2lfY3RybHItPndyYl9jb250ZXh0W2ldLmNpZCA9IHBod2lfY29udGV4dC0+YmVfd3JicVtpXS5pZDsKKwkJcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbaSAqIDJdLmNpZCA9IHBod2lfY29udGV4dC0+YmVfd3JicVtpXS4KKwkJCQkJCQkJICAgaWQ7CiAJfQogCWtmcmVlKHB3cmJfYXJyKTsKIAlyZXR1cm4gMDsKQEAgLTI4MDMsMTcgKzI4MDQsNiBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWlmIChwaGJhLT5md19jb25maWcuaXNjc2lfZmVhdHVyZXMgPT0gMHgxKQotCQlyaW5nX21vZGUgPSAxOwotCWVsc2UKLQkJcmluZ19tb2RlID0gMDsKLQlzdGF0dXMgPSBtZ210X2dldF9md19jb25maWcoY3RybCwgcGhiYSk7Ci0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCi0JCQkgICAgICJFcnJvciBnZXR0aW5nIGZ3IGNvbmZpZ1xuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCiAJc3RhdHVzID0gYmVpc2NzaV9jcmVhdGVfY3FzKHBoYmEsIHBod2lfY29udGV4dCk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJDUSBub3QgY3JlYXRlZFxuIik7CkBAIC0yOTQxLDE3ICsyOTMxLDYgQEAKIAlwaGJhLT5pb19zZ2xfaG5kbF9hdmJsID0gMDsKIAlwaGJhLT5laF9zZ2xfaG5kbF9hdmJsID0gMDsKIAotCWlmIChyaW5nX21vZGUpIHsKLQkJcGhiYS0+c2dsX2huZGxfYXJyYXkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2dsX2hhbmRsZSAqKSAqCi0JCQkJCSAgICAgIHBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsLAotCQkJCQkJIEdGUF9LRVJORUwpOwotCQlpZiAoIXBoYmEtPnNnbF9obmRsX2FycmF5KSB7Ci0JCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAotCQkJICAgICAiTWVtIEFsbG9jIEZhaWxlZC4gRmFpbGluZyB0byBsb2FkXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JfQotCiAJbWVtX2Rlc2NyX3NnbGggPSBwaGJhLT5pbml0X21lbTsKIAltZW1fZGVzY3Jfc2dsaCArPSBIV0lfTUVNX1NHTEg7CiAJaWYgKDEgPT0gbWVtX2Rlc2NyX3NnbGgtPm51bV9lbGVtZW50cykgewpAQCAtMjk1OSw4ICsyOTM4LDYgQEAKIAkJCQkJCSBwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsLAogCQkJCQkJIEdGUF9LRVJORUwpOwogCQlpZiAoIXBoYmEtPmlvX3NnbF9obmRsX2Jhc2UpIHsKLQkJCWlmIChyaW5nX21vZGUpCi0JCQkJa2ZyZWUocGhiYS0+c2dsX2huZGxfYXJyYXkpOwogCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKIAkJCQkgICAgICJNZW0gQWxsb2MgRmFpbGVkLiBGYWlsaW5nIHRvIGxvYWRcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0zMDMyLDcgKzMwMDksNyBAQAogCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfbG8sIHBmcmFnLCAwKTsKIAkJCXBmcmFnICs9IHBoYmEtPnBhcmFtcy5udW1fc2dlX3Blcl9pbzsKIAkJCXBzZ2xfaGFuZGxlLT5zZ2xfaW5kZXggPQotCQkJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQgKyBhcnJfaW5kZXgrKzsKKwkJCQlwaGJhLT5md19jb25maWcuaXNjc2lfaWNkX3N0YXJ0ICsgYXJyX2luZGV4Kys7CiAJCX0KIAkJaWR4Kys7CiAJfQpAQCAtMzA0Nyw3ICszMDI0LDcgQEAKIHsKIAlpbnQgaSwgbmV3X2NpZDsKIAotCXBoYmEtPmNpZF9hcnJheSA9IGttYWxsb2Moc2l6ZW9mKHZvaWQgKikgKiBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCwKKwlwaGJhLT5jaWRfYXJyYXkgPSBremFsbG9jKHNpemVvZih2b2lkICopICogcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwsCiAJCQkJICBHRlBfS0VSTkVMKTsKIAlpZiAoIXBoYmEtPmNpZF9hcnJheSkgewogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LApAQCAtMzA1NSw3ICszMDMyLDcgQEAKIAkJCSAgICAgImhiYV9zZXR1cF9jaWRfdGJsc1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlwaGJhLT5lcF9hcnJheSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqKSAqCisJcGhiYS0+ZXBfYXJyYXkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKikgKgogCQkJCSBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCAqIDIsIEdGUF9LRVJORUwpOwogCWlmICghcGhiYS0+ZXBfYXJyYXkpIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKQEAgLTMwNjQsNyArMzA0MSw3IEBACiAJCWtmcmVlKHBoYmEtPmNpZF9hcnJheSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQluZXdfY2lkID0gcGhiYS0+ZndfY29uZmlnLmlzY3NpX2ljZF9zdGFydDsKKwluZXdfY2lkID0gcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydDsKIAlmb3IgKGkgPSAwOyBpIDwgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmw7IGkrKykgewogCQlwaGJhLT5jaWRfYXJyYXlbaV0gPSBuZXdfY2lkOwogCQluZXdfY2lkICs9IDI7CkBAIC0zMTQ1LDggKzMxMjIsNiBAQAogCWlmIChoYmFfc2V0dXBfY2lkX3RibHMocGhiYSkpIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKIAkJCSAgICAgIkZhaWxlZCBpbiBoYmFfc2V0dXBfY2lkX3RibHNcbiIpOwotCQlpZiAocmluZ19tb2RlKQotCQkJa2ZyZWUocGhiYS0+c2dsX2huZGxfYXJyYXkpOwogCQlrZnJlZShwaGJhLT5pb19zZ2xfaG5kbF9iYXNlKTsKIAkJa2ZyZWUocGhiYS0+ZWhfc2dsX2huZGxfYmFzZSk7CiAJCWdvdG8gZG9fY2xlYW51cF9jdHJscjsKQEAgLTMxNjYsNiArMzE0MSw3IEBACiAJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxOwogCXN0cnVjdCBiZV9lcV9lbnRyeSAqZXFlID0gTlVMTDsKIAlpbnQgaSwgZXFfbXNpeDsKKwl1bnNpZ25lZCBpbnQgbnVtX3Byb2Nlc3NlZDsKIAogCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOwogCXBod2lfY29udGV4dCA9IHBod2lfY3RybHItPnBod2lfY3R4dDsKQEAgLTMxNzcsMTMgKzMxNTMsMTcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgKHBoYmEtPm51bV9jcHVzICsgZXFfbXNpeCk7IGkrKykgewogCQllcSA9ICZwaHdpX2NvbnRleHQtPmJlX2VxW2ldLnE7CiAJCWVxZSA9IHF1ZXVlX3RhaWxfbm9kZShlcSk7Ci0KKwkJbnVtX3Byb2Nlc3NlZCA9IDA7CiAJCXdoaWxlIChlcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2VxX2VudHJ5LCB2YWxpZCkgLyAzMl0KIAkJCQkJJiBFUUVfVkFMSURfTUFTSykgewogCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9lbnRyeSwgdmFsaWQsIGVxZSwgMCk7CiAJCQlxdWV1ZV90YWlsX2luYyhlcSk7CiAJCQllcWUgPSBxdWV1ZV90YWlsX25vZGUoZXEpOworCQkJbnVtX3Byb2Nlc3NlZCsrOwogCQl9CisKKwkJaWYgKG51bV9wcm9jZXNzZWQpCisJCQlod2lfcmluZ19lcV9kYihwaGJhLCBlcS0+aWQsIDEsCW51bV9wcm9jZXNzZWQsIDEsIDEpOwogCX0KIH0KIApAQCAtMzE5NSwxMCArMzE3NSw5IEBACiAJaWYgKG1nbXRfc3RhdHVzKQogCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKIAkJCSAgICAgIm1nbXRfZXBmd19jbGVhbnVwIEZBSUxFRCBcbiIpOwotCWh3aV9jbGVhbnVwKHBoYmEpOworCiAJaHdpX3B1cmdlX2VxKHBoYmEpOwotCWlmIChyaW5nX21vZGUpCi0JCWtmcmVlKHBoYmEtPnNnbF9obmRsX2FycmF5KTsKKwlod2lfY2xlYW51cChwaGJhKTsKIAlrZnJlZShwaGJhLT5pb19zZ2xfaG5kbF9iYXNlKTsKIAlrZnJlZShwaGJhLT5laF9zZ2xfaG5kbF9iYXNlKTsKIAlrZnJlZShwaGJhLT5jaWRfYXJyYXkpOwpAQCAtMzIxOSw3ICszMTk4LDggQEAKIAkgKiBXZSBjYW4gYWx3YXlzIHVzZSAwIGhlcmUgYmVjYXVzZSBpdCBpcyByZXNlcnZlZCBieSBsaWJpc2NzaSBmb3IKIAkgKiBsb2dpbi9zdGFydHVwIHJlbGF0ZWQgdGFza3MuCiAJICovCi0JcHdyYl9oYW5kbGUgPSBhbGxvY193cmJfaGFuZGxlKHBoYmEsIGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCwgMCk7CisJcHdyYl9oYW5kbGUgPSBhbGxvY193cmJfaGFuZGxlKHBoYmEsIChiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgLQorCQkJCSAgICAgICBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0KSk7CiAJcHdyYiA9IChzdHJ1Y3QgaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiAqKXB3cmJfaGFuZGxlLT5wd3JiOwogCW1lbXNldChwd3JiLCAwLCBzaXplb2YoKnB3cmIpKTsKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsCkBAIC0zMjgzLDggKzMyNjMsNyBAQAogCWJlX2R3c19sZV90b19jcHUocHdyYiwgc2l6ZW9mKHN0cnVjdCBpc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiKSk7CiAKIAlkb29yYmVsbCB8PSBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgJiBEQl9XUkJfUE9TVF9DSURfTUFTSzsKLQlpZiAoIXJpbmdfbW9kZSkKLQkJZG9vcmJlbGwgfD0gKHB3cmJfaGFuZGxlLT53cmJfaW5kZXggJiBEQl9ERUZfUERVX1dSQl9JTkRFWF9NQVNLKQorCWRvb3JiZWxsIHw9IChwd3JiX2hhbmRsZS0+d3JiX2luZGV4ICYgREJfREVGX1BEVV9XUkJfSU5ERVhfTUFTSykKIAkJCSAgICAgPDwgREJfREVGX1BEVV9XUkJfSU5ERVhfU0hJRlQ7CiAJZG9vcmJlbGwgfD0gMSA8PCBEQl9ERUZfUERVX05VTV9QT1NURURfU0hJRlQ7CiAKQEAgLTMzMjgsOCArMzMwNyw5IEBACiAJaW9fdGFzay0+YmhzX3BhLnUuYTY0LmFkZHJlc3MgPSBwYWRkcjsKIAlpb190YXNrLT5saWJpc2NzaV9pdHQgPSAoaXR0X3QpdGFzay0+aXR0OwogCWlvX3Rhc2stPnB3cmJfaGFuZGxlID0gYWxsb2Nfd3JiX2hhbmRsZShwaGJhLAotCQkJCQkJYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkLAotCQkJCQkJdGFzay0+aXR0KTsKKwkJCQkJCWJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAtCisJCQkJCQlwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0CisJCQkJCQkpOwogCWlvX3Rhc2stPmNvbm4gPSBiZWlzY3NpX2Nvbm47CiAKIAl0YXNrLT5oZHIgPSAoc3RydWN0IGlzY3NpX2hkciAqKSZpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9oZHI7CkBAIC0zMzQzLDcgKzMzMjMsNyBAQAogCQkJZ290byBmcmVlX2huZGxzOwogCX0gZWxzZSB7CiAJCWlvX3Rhc2stPnNjc2lfY21uZCA9IE5VTEw7Ci0JCWlmICgodGFzay0+aGRyLT5vcGNvZGUgJiBJU0NTSV9PUENPREVfTUFTSykgPT0gSVNDU0lfT1BfTE9HSU4pIHsKKwkJaWYgKChvcGNvZGUgJiBJU0NTSV9PUENPREVfTUFTSykgPT0gSVNDU0lfT1BfTE9HSU4pIHsKIAkJCWlmICghYmVpc2NzaV9jb25uLT5sb2dpbl9pbl9wcm9ncmVzcykgewogCQkJCXNwaW5fbG9jaygmcGhiYS0+bWdtdF9zZ2xfbG9jayk7CiAJCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUgPSAoc3RydWN0IHNnbF9oYW5kbGUgKikKQEAgLTMzNzAsMjEgKzMzNTAsMTYgQEAKIAlpdHQgPSAoaXR0X3QpIGNwdV90b19iZTMyKCgodW5zaWduZWQgaW50KWlvX3Rhc2stPnB3cmJfaGFuZGxlLT4KIAkJCQkgd3JiX2luZGV4IDw8IDE2KSB8ICh1bnNpZ25lZCBpbnQpCiAJCQkJKGlvX3Rhc2stPnBzZ2xfaGFuZGxlLT5zZ2xfaW5kZXgpKTsKLQlpZiAocmluZ19tb2RlKSB7Ci0JCXBoYmEtPnNnbF9obmRsX2FycmF5W2lvX3Rhc2stPnBzZ2xfaGFuZGxlLT5zZ2xfaW5kZXggLQotCQkJCSAgICAgcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydF0gPQotCQkJCSAgICAgaW9fdGFzay0+cHNnbF9oYW5kbGU7Ci0JCWlvX3Rhc2stPnBzZ2xfaGFuZGxlLT50YXNrID0gdGFzazsKLQkJaW9fdGFzay0+cHNnbF9oYW5kbGUtPmNpZCA9IGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZDsKLQl9IGVsc2UKLQkJaW9fdGFzay0+cHdyYl9oYW5kbGUtPnBpb19oYW5kbGUgPSB0YXNrOworCWlvX3Rhc2stPnB3cmJfaGFuZGxlLT5waW9faGFuZGxlID0gdGFzazsKIAogCWlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2hkci5pdHQgPSBpdHQ7CiAJcmV0dXJuIDA7CiAKIGZyZWVfaG5kbHM6CiAJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7Ci0JcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2JlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZF07CisJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0WworCQkJYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkIC0KKwkJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnRdOwogCWZyZWVfd3JiX2hhbmRsZShwaGJhLCBwd3JiX2NvbnRleHQsIGlvX3Rhc2stPnB3cmJfaGFuZGxlKTsKIAlpb190YXNrLT5wd3JiX2hhbmRsZSA9IE5VTEw7CiAJcGNpX3Bvb2xfZnJlZShiZWlzY3NpX3Nlc3MtPmJoc19wb29sLCBpb190YXNrLT5jbWRfYmhzLApAQCAtMzQwNCw3ICszMzc5LDggQEAKIAlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CiAKIAlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKLQlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkXTsKKwlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkCisJCQktIHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnRdOwogCWlmIChpb190YXNrLT5wd3JiX2hhbmRsZSkgewogCQlmcmVlX3dyYl9oYW5kbGUocGhiYSwgcHdyYl9jb250ZXh0LCBpb190YXNrLT5wd3JiX2hhbmRsZSk7CiAJCWlvX3Rhc2stPnB3cmJfaGFuZGxlID0gTlVMTDsKQEAgLTM0NjAsMTggKzM0MzYsMTIgQEAKIAkJCSAgICAgIElTQ1NJX09QQ09ERV9TQ1NJX0RBVEFfT1VUKTsKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9wZHVfZGF0YV9vdXQsIGZpbmFsX2JpdCwKIAkJCSAgICAgICZpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9kYXRhX3BkdSwgMSk7Ci0JCWlmIChyaW5nX21vZGUpCi0JCQlpb190YXNrLT5wc2dsX2hhbmRsZS0+dHlwZSA9IElOSV9XUl9DTUQ7Ci0JCWVsc2UKLQkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAotCQkJCSAgICAgIElOSV9XUl9DTUQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKKwkJCSAgICAgIElOSV9XUl9DTUQpOwogCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZHNwLCBwd3JiLCAxKTsKIAl9IGVsc2UgewotCQlpZiAocmluZ19tb2RlKQotCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUtPnR5cGUgPSBJTklfUkRfQ01EOwotCQllbHNlCi0JCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKLQkJCQkgICAgICBJTklfUkRfQ01EKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCisJCQkgICAgICBJTklfUkRfQ01EKTsKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRzcCwgcHdyYiwgMCk7CiAJfQogCW1lbWNweSgmaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfZGF0YV9wZHUuCkBAIC0zNDk2LDggKzM0NjYsNyBAQAogCWJlX2R3c19sZV90b19jcHUocHdyYiwgc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpKTsKIAogCWRvb3JiZWxsIHw9IGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAmIERCX1dSQl9QT1NUX0NJRF9NQVNLOwotCWlmICghcmluZ19tb2RlKQotCQlkb29yYmVsbCB8PSAoaW9fdGFzay0+cHdyYl9oYW5kbGUtPndyYl9pbmRleCAmCisJZG9vcmJlbGwgfD0gKGlvX3Rhc2stPnB3cmJfaGFuZGxlLT53cmJfaW5kZXggJgogCQkgICAgIERCX0RFRl9QRFVfV1JCX0lOREVYX01BU0spIDw8IERCX0RFRl9QRFVfV1JCX0lOREVYX1NISUZUOwogCWRvb3JiZWxsIHw9IDEgPDwgREJfREVGX1BEVV9OVU1fUE9TVEVEX1NISUZUOwogCkBAIC0zNTE5LDQ5ICszNDg4LDQ2IEBACiAJdW5zaWduZWQgaW50IGRvb3JiZWxsID0gMDsKIAl1bnNpZ25lZCBpbnQgaSwgY2lkOwogCXN0cnVjdCBpc2NzaV90YXNrICphYm9ydGVkX3Rhc2s7CisJdW5zaWduZWQgaW50IHRhZzsKIAogCWNpZCA9IGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZDsKIAlwd3JiID0gaW9fdGFzay0+cHdyYl9oYW5kbGUtPnB3cmI7CisJbWVtc2V0KHB3cmIsIDAsIHNpemVvZigqcHdyYikpOwogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBjbWRzbl9pdHQsIHB3cmIsCiAJCSAgICAgIGJlMzJfdG9fY3B1KHRhc2stPmNtZHNuKSk7CiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHdyYl9pZHgsIHB3cmIsCiAJCSAgICAgIGlvX3Rhc2stPnB3cmJfaGFuZGxlLT53cmJfaW5kZXgpOwogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2xfaWNkX2lkeCwgcHdyYiwKIAkJICAgICAgaW9fdGFzay0+cHNnbF9oYW5kbGUtPnNnbF9pbmRleCk7Ci0KIAlzd2l0Y2ggKHRhc2stPmhkci0+b3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0spIHsKIAljYXNlIElTQ1NJX09QX0xPR0lOOgotCQlpZiAocmluZ19tb2RlKQotCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUtPnR5cGUgPSBUR1RfRE1fQ01EOwotCQllbHNlCi0JCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKLQkJCQkgICAgICBUR1RfRE1fQ01EKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCisJCQkgICAgICBUR1RfRE1fQ01EKTsKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRtc2csIHB3cmIsIDApOwogCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgY21kc25faXR0LCBwd3JiLCAxKTsKIAkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9PUF9OT09QX09VVDoKLQkJaWYgKHJpbmdfbW9kZSkKLQkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlLT50eXBlID0gSU5JX1JEX0NNRDsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCisJCQkgICAgICBJTklfUkRfQ01EKTsKKwkJaWYgKHRhc2stPmhkci0+dHR0ID09IElTQ1NJX1JFU0VSVkVEX1RBRykKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAwKTsKIAkJZWxzZQotCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCi0JCQkJICAgICAgSU5JX1JEX0NNRCk7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZG1zZywgcHdyYiwgMSk7CiAJCWh3aV93cml0ZV9idWZmZXIocHdyYiwgdGFzayk7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfT1BfVEVYVDoKLQkJaWYgKHJpbmdfbW9kZSkKLQkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlLT50eXBlID0gSU5JX1dSX0NNRDsKLQkJZWxzZQotCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCi0JCQkJICAgICAgSU5JX1dSX0NNRCk7Ci0JCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkc3AsIHB3cmIsIDEpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwKKwkJCSAgICAgIFRHVF9ETV9DTUQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZG1zZywgcHdyYiwgMCk7CiAJCWh3aV93cml0ZV9idWZmZXIocHdyYiwgdGFzayk7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfT1BfU0NTSV9UTUZVTkM6CiAJCXNlc3Npb24gPSBjb25uLT5zZXNzaW9uOwogCQlpID0gKChzdHJ1Y3QgaXNjc2lfdG0gKil0YXNrLT5oZHIpLT5ydHQ7CiAJCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOwotCQlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbY2lkXTsKKwkJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2NpZCAtCisJCQkJCSAgICBwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0XTsKIAkJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGRbYmUzMl90b19jcHUoaSkKIAkJCQkJCQkJPj4gMTZdOwogCQlhYm9ydGVkX3Rhc2sgPSBwd3JiX2hhbmRsZS0+cGlvX2hhbmRsZTsKQEAgLTM1NzIsMjIgKzM1MzgsMjUgQEAKIAkJaWYgKCFhYm9ydGVkX2lvX3Rhc2stPnNjc2lfY21uZCkKIAkJCXJldHVybiAwOwogCi0JCW1nbXRfaW52YWxpZGF0ZV9pY2RzKHBoYmEsCisJCXRhZyA9IG1nbXRfaW52YWxpZGF0ZV9pY2RzKHBoYmEsCiAJCQkJICAgICBhYm9ydGVkX2lvX3Rhc2stPnBzZ2xfaGFuZGxlLT5zZ2xfaW5kZXgsCiAJCQkJICAgICBjaWQpOwotCQlpZiAocmluZ19tb2RlKQotCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUtPnR5cGUgPSBJTklfVE1GX0NNRDsKLQkJZWxzZQotCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCi0JCQkJICAgICAgSU5JX1RNRl9DTUQpOworCQlpZiAoIXRhZykgeworCQkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkJICAgICAibWdtdF9pbnZhbGlkYXRlX2ljZHMgY291bGQgbm90IGJlIgorCQkJCSAgICAgIiBzdWJtaXR0ZWRcbiIpOworCQl9IGVsc2UgeworCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBoYmEtPmN0cmwubWNjX3dhaXRbdGFnXSwKKwkJCQkJCSBwaGJhLT5jdHJsLm1jY19udW10YWdbdGFnXSk7CisJCQlmcmVlX21jY190YWcoJnBoYmEtPmN0cmwsIHRhZyk7CisJCX0KKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCisJCQkgICAgICBJTklfVE1GX0NNRCk7CiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAwKTsKIAkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9PUF9MT0dPVVQ6CiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAwKTsKLQkJaWYgKHJpbmdfbW9kZSkKLQkJCWlvX3Rhc2stPnBzZ2xfaGFuZGxlLT50eXBlID0gSFdIX1RZUEVfTE9HT1VUOwotCQllbHNlCiAJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAogCQkJCUhXSF9UWVBFX0xPR09VVCk7CiAJCWh3aV93cml0ZV9idWZmZXIocHdyYiwgdGFzayk7CkBAIC0zNjAwLDE0ICszNTY5LDEzIEBACiAJfQogCiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHIydF9leHBfZHRsLCBwd3JiLAotCQkgICAgICBiZTMyX3RvX2NwdSh0YXNrLT5kYXRhX2NvdW50KSk7CisJCSAgICAgIHRhc2stPmRhdGFfY291bnQpOwogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBwdHIybmV4dHdyYiwgcHdyYiwKIAkJICAgICAgaW9fdGFzay0+cHdyYl9oYW5kbGUtPm54dF93cmJfaW5kZXgpOwogCWJlX2R3c19sZV90b19jcHUocHdyYiwgc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpKTsKIAogCWRvb3JiZWxsIHw9IGNpZCAmIERCX1dSQl9QT1NUX0NJRF9NQVNLOwotCWlmICghcmluZ19tb2RlKQotCQlkb29yYmVsbCB8PSAoaW9fdGFzay0+cHdyYl9oYW5kbGUtPndyYl9pbmRleCAmCisJZG9vcmJlbGwgfD0gKGlvX3Rhc2stPnB3cmJfaGFuZGxlLT53cmJfaW5kZXggJgogCQkgICAgIERCX0RFRl9QRFVfV1JCX0lOREVYX01BU0spIDw8IERCX0RFRl9QRFVfV1JCX0lOREVYX1NISUZUOwogCWRvb3JiZWxsIHw9IDEgPDwgREJfREVGX1BEVV9OVU1fUE9TVEVEX1NISUZUOwogCWlvd3JpdGUzMihkb29yYmVsbCwgcGhiYS0+ZGJfdmEgKyBEQl9UWFVMUDBfT0ZGU0VUKTsKQEAgLTM2NDksNyArMzYxNyw2IEBACiAJcmV0dXJuIGJlaXNjc2lfaW90YXNrKHRhc2ssIHNnLCBudW1fc2csIHhmZXJsZW4sIHdyaXRlZGlyKTsKIH0KIAotCiBzdGF0aWMgdm9pZCBiZWlzY3NpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KQogewogCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IE5VTEw7CkBAIC0zNzM0LDcgKzM3MDEsMjAgQEAKIAl9CiAJU0VfREVCVUcoREJHX0xWTF84LCAiIHBoYmEgPSAlcCBcbiIsIHBoYmEpOwogCi0JcGNpX3NldF9kcnZkYXRhKHBjaWRldiwgcGhiYSk7CisJc3dpdGNoIChwY2lkZXYtPmRldmljZSkgeworCWNhc2UgQkVfREVWSUNFX0lEMToKKwljYXNlIE9DX0RFVklDRV9JRDE6CisJY2FzZSBPQ19ERVZJQ0VfSUQyOgorCQlwaGJhLT5nZW5lcmF0aW9uID0gQkVfR0VOMjsKKwkJYnJlYWs7CisJY2FzZSBCRV9ERVZJQ0VfSUQyOgorCWNhc2UgT0NfREVWSUNFX0lEMzoKKwkJcGhiYS0+Z2VuZXJhdGlvbiA9IEJFX0dFTjM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBoYmEtPmdlbmVyYXRpb24gPSAwOworCX0KKwogCWlmIChlbmFibGVfbXNpeCkKIAkJbnVtX2NwdXMgPSBmaW5kX251bV9jcHVzKCk7CiAJZWxzZQpAQCAtMzc1NCw3ICszNzM0LDE1IEBACiAJc3Bpbl9sb2NrX2luaXQoJnBoYmEtPmlvX3NnbF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcGhiYS0+bWdtdF9zZ2xfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnBoYmEtPmlzcl9sb2NrKTsKKwlyZXQgPSBtZ210X2dldF9md19jb25maWcoJnBoYmEtPmN0cmwsIHBoYmEpOworCWlmIChyZXQgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiRXJyb3IgZ2V0dGluZyBmdyBjb25maWdcbiIpOworCQlnb3RvIGZyZWVfcG9ydDsKKwl9CisJcGhiYS0+c2hvc3QtPm1heF9pZCA9IHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQ7CiAJYmVpc2NzaV9nZXRfcGFyYW1zKHBoYmEpOworCXBoYmEtPnNob3N0LT5jYW5fcXVldWUgPSBwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsOwogCXJldCA9IGJlaXNjc2lfaW5pdF9wb3J0KHBoYmEpOwogCWlmIChyZXQgPCAwKSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2Rldl9wcm9iZS0iCkBAIC0zNzYyLDYgKzM3NTAsMTUgQEAKIAkJZ290byBmcmVlX3BvcnQ7CiAJfQogCisJZm9yIChpID0gMDsgaSA8IE1BWF9NQ0NfQ01EIDsgaSsrKSB7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBoYmEtPmN0cmwubWNjX3dhaXRbaSArIDFdKTsKKwkJcGhiYS0+Y3RybC5tY2NfdGFnW2ldID0gaSArIDE7CisJCXBoYmEtPmN0cmwubWNjX251bXRhZ1tpICsgMV0gPSAwOworCQlwaGJhLT5jdHJsLm1jY190YWdfYXZhaWxhYmxlKys7CisJfQorCisJcGhiYS0+Y3RybC5tY2NfYWxsb2NfaW5kZXggPSBwaGJhLT5jdHJsLm1jY19mcmVlX2luZGV4ID0gMDsKKwogCXNucHJpbnRmKHBoYmEtPndxX25hbWUsIHNpemVvZihwaGJhLT53cV9uYW1lKSwgImJlaXNjc2lfcV9pcnEldSIsCiAJCSBwaGJhLT5zaG9zdC0+aG9zdF9ubyk7CiAJcGhiYS0+d3EgPSBjcmVhdGVfd29ya3F1ZXVlKHBoYmEtPndxX25hbWUpOwpAQCAtMzgzNiw3ICszODMzLDcgQEAKIHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm5hbWUgPSBEUlZfTkFNRSwKLQkuY2FwcyA9IENBUF9SRUNPVkVSWV9MMCB8IENBUF9IRFJER1NUIHwKKwkuY2FwcyA9IENBUF9SRUNPVkVSWV9MMCB8IENBUF9IRFJER1NUIHwgQ0FQX1RFWFRfTkVHTyB8CiAJCUNBUF9NVUxUSV9SMlQgfCBDQVBfREFUQURHU1QgfCBDQVBfREFUQV9QQVRIX09GRkxPQUQsCiAJLnBhcmFtX21hc2sgPSBJU0NTSV9NQVhfUkVDVl9ETEVOR1RIIHwKIAkJSVNDU0lfTUFYX1hNSVRfRExFTkdUSCB8CkBAIC0zODU5LDcgKzM4NTYsNyBAQAogCQlJU0NTSV9VU0VSTkFNRSB8IElTQ1NJX1BBU1NXT1JEIHwKIAkJSVNDU0lfVVNFUk5BTUVfSU4gfCBJU0NTSV9QQVNTV09SRF9JTiB8CiAJCUlTQ1NJX0ZBU1RfQUJPUlQgfCBJU0NTSV9BQk9SVF9UTU8gfAotCQlJU0NTSV9MVV9SRVNFVF9UTU8gfCBJU0NTSV9UR1RfUkVTRVRfVE1PIHwKKwkJSVNDU0lfTFVfUkVTRVRfVE1PIHwKIAkJSVNDU0lfUElOR19UTU8gfCBJU0NTSV9SRUNWX1RNTyB8CiAJCUlTQ1NJX0lGQUNFX05BTUUgfCBJU0NTSV9JTklUSUFUT1JfTkFNRSwKIAkuaG9zdF9wYXJhbV9tYXNrID0gSVNDU0lfSE9TVF9IV0FERFJFU1MgfCBJU0NTSV9IT1NUX0lQQUREUkVTUyB8CkBAIC0zOTA1LDcgKzM5MDIsNyBAQAogCQlTRV9ERUJVRyhEQkdfTFZMXzEsCiAJCQkgImJlaXNjc2lfbW9kdWxlX2luaXQgLSBVbmFibGUgdG8gIHJlZ2lzdGVyIGJlaXNjc2kiCiAJCQkgInRyYW5zcG9ydC5cbiIpOwotCQlyZXQgPSAtRU5PTUVNOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9tb2R1bGVfaW5pdCwgdHQ9JXAgXG4iLAogCQkgJmJlaXNjc2lfaXNjc2lfdHJhbnNwb3J0KTsKQEAgLTM5MTcsNyArMzkxNCw2IEBACiAJCQkgImJlaXNjc2kgcGNpIGRyaXZlci5cbiIpOwogCQlnb3RvIHVucmVnaXN0ZXJfaXNjc2lfdHJhbnNwb3J0OwogCX0KLQlyaW5nX21vZGUgPSAwOwogCXJldHVybiAwOwogCiB1bnJlZ2lzdGVyX2lzY3NpX3RyYW5zcG9ydDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5oCmluZGV4IDI1ZTZiMjAuLmM1M2E4MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmgKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uaApAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNDAsMzEgKzQwLDI5IEBACiAjZGVmaW5lIERSVl9ERVNDCQlCRV9OQU1FICIgIiAiRHJpdmVyIgogCiAjZGVmaW5lIEJFX1ZFTkRPUl9JRCAJCTB4MTlBMgorLyogREVWSUNFIElEJ3MgZm9yIEJFMiAqLwogI2RlZmluZSBCRV9ERVZJQ0VfSUQxCQkweDIxMgogI2RlZmluZSBPQ19ERVZJQ0VfSUQxCQkweDcwMgogI2RlZmluZSBPQ19ERVZJQ0VfSUQyCQkweDcwMwotI2RlZmluZSBPQ19ERVZJQ0VfSUQzCQkweDcxMgotI2RlZmluZSBPQ19ERVZJQ0VfSUQ0CQkweDIyMgogCi0jZGVmaW5lIEJFMl9NQVhfU0VTU0lPTlMJNjQKKy8qIERFVklDRSBJRCdzIGZvciBCRTMgKi8KKyNkZWZpbmUgQkVfREVWSUNFX0lEMgkJMHgyMjIKKyNkZWZpbmUgT0NfREVWSUNFX0lEMwkJMHg3MTIKKworI2RlZmluZSBCRTJfSU9fREVQVEgJCTEwMjQKKyNkZWZpbmUgQkUyX01BWF9TRVNTSU9OUwkyNTYKICNkZWZpbmUgQkUyX0NNRFNfUEVSX0NYTgkxMjgKLSNkZWZpbmUgQkUyX0xPR09VVFMJCUJFMl9NQVhfU0VTU0lPTlMKICNkZWZpbmUgQkUyX1RNRlMJCTE2CiAjZGVmaW5lIEJFMl9OT1BPVVRfUkVRCQkxNgotI2RlZmluZSBCRTJfQVNZTkNQRFVTCQlCRTJfTUFYX1NFU1NJT05TCi0jZGVmaW5lIEJFMl9NQVhfSUNEUwkJMjA0OAogI2RlZmluZSBCRTJfU0dFCQkJMzIKICNkZWZpbmUgQkUyX0RFRlBEVV9IRFJfU1oJNjQKICNkZWZpbmUgQkUyX0RFRlBEVV9EQVRBX1NaCTgxOTIKLSNkZWZpbmUgQkUyX0lPX0RFUFRIIFwKLQkoQkUyX01BWF9JQ0RTIC8gMiAtIChCRTJfTE9HT1VUUyArIEJFMl9UTUZTICsgQkUyX05PUE9VVF9SRVEpKQogCiAjZGVmaW5lIE1BWF9DUFVTCQkzMQotI2RlZmluZSBCRUlTQ1NJX1NHTElTVF9FTEVNRU5UUwlCRTJfU0dFCisjZGVmaW5lIEJFSVNDU0lfU0dMSVNUX0VMRU1FTlRTCTMwCiAKLSNkZWZpbmUgQkVJU0NTSV9NQVhfQ01ORFMJMTAyNAkvKiBNYXggSU8ncyBwZXIgQ3RybHIgc2h0LT5jYW5fcXVldWUgKi8KICNkZWZpbmUgQkVJU0NTSV9DTURfUEVSX0xVTgkxMjgJLyogc2NzaV9ob3N0LT5jbWRfcGVyX2x1biAqLwotI2RlZmluZSBCRUlTQ1NJX01BWF9TRUNUT1JTCTIwNDgJLyogc2NzaV9ob3N0LT5tYXhfc2VjdG9ycyAqLworI2RlZmluZSBCRUlTQ1NJX01BWF9TRUNUT1JTCTI1NgkvKiBzY3NpX2hvc3QtPm1heF9zZWN0b3JzICovCiAKICNkZWZpbmUgQkVJU0NTSV9NQVhfQ01EX0xFTgkxNgkvKiBzY3NpX2hvc3QtPm1heF9jbWRfbGVuICovCiAjZGVmaW5lIEJFSVNDU0lfTlVNX01BWF9MVU4JMjU2CS8qIHNjc2lfaG9zdC0+bWF4X2x1biAqLwpAQCAtMzMwLDYgKzMyOCw3IEBACiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOwkvKiBUaGUgYWN0dWFrIHdvcmsgcXVldWUgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19jcXM7CS8qIFRoZSB3b3JrIGJlaW5nIHF1ZXVlZCAqLwogCXN0cnVjdCBiZV9jdHJsX2luZm8gY3RybDsKKwl1bnNpZ25lZCBpbnQgZ2VuZXJhdGlvbjsKIH07CiAKIHN0cnVjdCBiZWlzY3NpX3Nlc3Npb24gewpAQCAtNjU2LDExICs2NTUsMTIgQEAKIAogfSBfX3BhY2tlZDsKIAotc3RydWN0IHdyYl9oYW5kbGUgKmFsbG9jX3dyYl9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBpbnQgY2lkLAotCQkJCSAgICBpbnQgaW5kZXgpOworc3RydWN0IHdyYl9oYW5kbGUgKmFsbG9jX3dyYl9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBpbnQgY2lkKTsKIHZvaWQKIGZyZWVfbWdtdF9zZ2xfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlKTsKIAordm9pZCBiZWlzY3NpX3Byb2Nlc3NfYWxsX2NxcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCiBzdHJ1Y3QgcGR1X25vcF9vdXQgewogCXUzMiBkd1sxMl07CiB9OwpAQCAtODAyLDcgKzgwMiw2IEBACiAJc3RydWN0IGJlX3JpbmcgZGVmYXVsdF9wZHVfaGRyOwogCXN0cnVjdCBiZV9yaW5nIGRlZmF1bHRfcGR1X2RhdGE7CiAJc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jdHh0OwotCXVuc2lnbmVkIHNob3J0IGNxX2Vycm9yc1tDWE5fS0lMTEVEX0NNTkRfREFUQV9OT1RfT05fU0FNRV9DT05OXTsKIH07CiAKIGVudW0gaHdoX3R5cGVfZW51bSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5jIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYwppbmRleCA3OWMyYmQ1Li4zMTdiY2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTQ4LDYgKzQ4LDE0IEBACiAJCQkJCXBmd19jZmctPnVscFswXS5zcV9iYXNlOwogCQlwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX2NvdW50ID0KIAkJCQkJcGZ3X2NmZy0+dWxwWzBdLnNxX2NvdW50OworCQlpZiAocGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudCA+IChCRTJfTUFYX1NFU1NJT05TIC8gMikpIHsKKwkJCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJCQkiRlcgcmVwb3J0ZWQgTUFYIENYTlMgYXMgJWQgXHQiCisJCQkJIk1heCBTdXBwb3J0ZWQgPSAlZC5cbiIsCisJCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudCwKKwkJCQlCRTJfTUFYX1NFU1NJT05TKTsKKwkJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfY291bnQgPSBCRTJfTUFYX1NFU1NJT05TIC8gMjsKKwkJfQogCX0gZWxzZSB7CiAJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAogCQkJICAgICAiRmFpbGVkIGluIG1nbXRfZ2V0X2Z3X2NvbmZpZyBcbiIpOwpAQCAtNzcsNiArODUsNyBAQAogCX0KIAlub25lbWJfY21kLnNpemUgPSBzaXplb2Yoc3RydWN0IGJlX21nbXRfY29udHJvbGxlcl9hdHRyaWJ1dGVzKTsKIAlyZXEgPSBub25lbWJfY21kLnZhOworCW1lbXNldChyZXEsIDAsIHNpemVvZigqcmVxKSk7CiAJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOwogCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCBmYWxzZSwgMSk7CkBAIC0xNDAsMTAgKzE0OSwxNyBAQAogewogCXN0cnVjdCBiZV9kbWFfbWVtIG5vbmVtYl9jbWQ7CiAJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOwotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOwotCXN0cnVjdCBiZV9zZ2UgKnNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CisJc3RydWN0IGJlX3NnZSAqc2dlOwogCXN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbiAqcmVxOwotCWludCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGludCB0YWcgPSAwOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXRhZyA9IGFsbG9jX21jY190YWcocGhiYSk7CisJaWYgKCF0YWcpIHsKKwkJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJCXJldHVybiB0YWc7CisJfQogCiAJbm9uZW1iX2NtZC52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGN0cmwtPnBkZXYsCiAJCQkJc2l6ZW9mKHN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbiksCkBAIC0xNTYsOCArMTcyLDEwIEBACiAJfQogCW5vbmVtYl9jbWQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW52YWxpZGF0ZV9jb21tYW5kc19wYXJhbXNfaW4pOwogCXJlcSA9IG5vbmVtYl9jbWQudmE7Ci0Jc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOwotCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKKwl3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOworCXNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOworCXdyYi0+dGFnMCB8PSB0YWc7CiAKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIGZhbHNlLCAxKTsKIAliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJLApAQCAtMTcyLDE0ICsxOTAsMTIgQEAKIAlzZ2UtPnBhX2xvID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC5kbWEgJiAweEZGRkZGRkZGKTsKIAlzZ2UtPmxlbiA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQuc2l6ZSk7CiAKLQlzdGF0dXMgPSBiZV9tY2Nfbm90aWZ5X3dhaXQocGhiYSk7Ci0JaWYgKHN0YXR1cykKLQkJU0VfREVCVUcoREJHX0xWTF8xLCAiSUNEUyBJbnZhbGlkYXRpb24gRmFpbGVkXG4iKTsKKwliZV9tY2Nfbm90aWZ5KHBoYmEpOwogCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOwogCWlmIChub25lbWJfY21kLnZhKQogCQlwY2lfZnJlZV9jb25zaXN0ZW50KGN0cmwtPnBkZXYsIG5vbmVtYl9jbWQuc2l6ZSwKIAkJCQkgICAgbm9uZW1iX2NtZC52YSwgbm9uZW1iX2NtZC5kbWEpOwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIHRhZzsKIH0KIAogdW5zaWduZWQgY2hhciBtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCkBAIC0xODksMTMgKzIwNSwxOSBAQAogCQkJCQkgdW5zaWduZWQgc2hvcnQgc2F2ZWNmZ19mbGFnKQogewogCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWNjcShwaGJhKTsKLQlzdHJ1Y3QgaXNjc2lfaW52YWxpZGF0ZV9jb25uZWN0aW9uX3BhcmFtc19pbiAqcmVxID0KLQkJCQkJCWVtYmVkZGVkX3BheWxvYWQod3JiKTsKLQlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOworCXN0cnVjdCBpc2NzaV9pbnZhbGlkYXRlX2Nvbm5lY3Rpb25fcGFyYW1zX2luICpyZXE7CisJdW5zaWduZWQgaW50IHRhZyA9IDA7CiAKIAlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7Ci0JbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwl0YWcgPSBhbGxvY19tY2NfdGFnKHBoYmEpOworCWlmICghdGFnKSB7CisJCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCQlyZXR1cm4gdGFnOworCX0KKwl3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOworCXdyYi0+dGFnMCB8PSB0YWc7CisJcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKIAliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJX0lOSSwKQEAgLTIwOCwzNSArMjMwLDM3IEBACiAJZWxzZQogCQlyZXEtPmNsZWFudXBfdHlwZSA9IENNRF9JU0NTSV9DT05ORUNUSU9OX0lOVkFMSURBVEU7CiAJcmVxLT5zYXZlX2NmZyA9IHNhdmVjZmdfZmxhZzsKLQlzdGF0dXMgPSAgYmVfbWNjX25vdGlmeV93YWl0KHBoYmEpOwotCWlmIChzdGF0dXMpCi0JCVNFX0RFQlVHKERCR19MVkxfMSwgIkludmFsaWRhdGlvbiBGYWlsZWRcbiIpOwotCisJYmVfbWNjX25vdGlmeShwaGJhKTsKIAlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiB0YWc7CiB9CiAKIHVuc2lnbmVkIGNoYXIgbWdtdF91cGxvYWRfY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCiAJCQkJdW5zaWduZWQgc2hvcnQgY2lkLCB1bnNpZ25lZCBpbnQgdXBsb2FkX2ZsYWcpCiB7CiAJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOwotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOwotCXN0cnVjdCB0Y3BfdXBsb2FkX3BhcmFtc19pbiAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwotCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CisJc3RydWN0IHRjcF91cGxvYWRfcGFyYW1zX2luICpyZXE7CisJdW5zaWduZWQgaW50IHRhZyA9IDA7CiAKIAlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7Ci0JbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwl0YWcgPSBhbGxvY19tY2NfdGFnKHBoYmEpOworCWlmICghdGFnKSB7CisJCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCQlyZXR1cm4gdGFnOworCX0KKwl3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOworCXJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwl3cmItPnRhZzAgfD0gdGFnOwogCiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKIAliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfQ09NTU9OX1RDUF9VUExPQUQsCiAJCQkgICBPUENPREVfQ09NTU9OX1RDUF9VUExPQUQsIHNpemVvZigqcmVxKSk7CiAJcmVxLT5pZCA9ICh1bnNpZ25lZCBzaG9ydCljaWQ7CiAJcmVxLT51cGxvYWRfdHlwZSA9ICh1bnNpZ25lZCBjaGFyKXVwbG9hZF9mbGFnOwotCXN0YXR1cyA9IGJlX21jY19ub3RpZnlfd2FpdChwaGJhKTsKLQlpZiAoc3RhdHVzKQotCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJtZ210X3VwbG9hZF9jb25uZWN0aW9uIEZhaWxlZFxuIik7CisJYmVfbWNjX25vdGlmeShwaGJhKTsKIAlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiB0YWc7CiB9CiAKIGludCBtZ210X29wZW5fY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCkBAIC0yNDgsMTMgKzI3MiwxMyBAQAogCXN0cnVjdCBzb2NrYWRkcl9pbiAqZGFkZHJfaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopZHN0X2FkZHI7CiAJc3RydWN0IHNvY2thZGRyX2luNiAqZGFkZHJfaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilkc3RfYWRkcjsKIAlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21jY3EocGhiYSk7Ci0Jc3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJc3RydWN0IGJlX21jY193cmIgKndyYjsKKwlzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfaW4gKnJlcTsKIAl1bnNpZ25lZCBzaG9ydCBkZWZfaGRyX2lkOwogCXVuc2lnbmVkIHNob3J0IGRlZl9kYXRhX2lkOwogCXN0cnVjdCBwaHlzX2FkZHIgdGVtcGxhdGVfYWRkcmVzcyA9IHsgMCwgMCB9OwogCXN0cnVjdCBwaHlzX2FkZHIgKnB0ZW1wbGF0ZV9hZGRyZXNzOwotCWludCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGludCB0YWcgPSAwOwogCXVuc2lnbmVkIGludCBpOwogCXVuc2lnbmVkIHNob3J0IGNpZCA9IGJlaXNjc2lfZXAtPmVwX2NpZDsKIApAQCAtMjY2LDcgKzI5MCwxNCBAQAogCXB0ZW1wbGF0ZV9hZGRyZXNzID0gJnRlbXBsYXRlX2FkZHJlc3M7CiAJSVNDU0lfR0VUX1BEVV9URU1QTEFURV9BRERSRVNTKHBoYmEsIHB0ZW1wbGF0ZV9hZGRyZXNzKTsKIAlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7Ci0JbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwl0YWcgPSBhbGxvY19tY2NfdGFnKHBoYmEpOworCWlmICghdGFnKSB7CisJCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCQlyZXR1cm4gdGFnOworCX0KKwl3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOworCXJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwl3cmItPnRhZzAgfD0gdGFnOwogCiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKIAliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJLApAQCAtMzExLDQ2ICszNDIsMzYgQEAKIAlyZXEtPmRvX29mZmxvYWQgPSAxOwogCXJlcS0+ZGF0YW91dF90ZW1wbGF0ZV9wYS5sbyA9IHB0ZW1wbGF0ZV9hZGRyZXNzLT5sbzsKIAlyZXEtPmRhdGFvdXRfdGVtcGxhdGVfcGEuaGkgPSBwdGVtcGxhdGVfYWRkcmVzcy0+aGk7Ci0Jc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KHBoYmEpOwotCWlmICghc3RhdHVzKSB7Ci0JCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXA7Ci0JCXN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9vdXQgKnB0Y3BjbmN0X291dCA9Ci0JCQkJCQkJZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwotCi0JCWVwID0gcGhiYS0+ZXBfYXJyYXlbcHRjcGNuY3Rfb3V0LT5jaWRdOwotCQliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7Ci0JCWJlaXNjc2lfZXAtPmZ3X2hhbmRsZSA9IHB0Y3BjbmN0X291dC0+Y29ubmVjdGlvbl9oYW5kbGU7Ci0JCWJlaXNjc2lfZXAtPmNpZF92bGQgPSAxOwotCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJtZ210X29wZW5fY29ubmVjdGlvbiBTdWNjZXNzXG4iKTsKLQl9IGVsc2UKLQkJU0VfREVCVUcoREJHX0xWTF8xLCAibWdtdF9vcGVuX2Nvbm5lY3Rpb24gRmFpbGVkXG4iKTsKKwliZV9tY2Nfbm90aWZ5KHBoYmEpOwogCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIHRhZzsKIH0KIAotaW50IGJlX2NtZF9nZXRfbWFjX2FkZHIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1OCAqbWFjX2FkZHIpCit1bnNpZ25lZCBpbnQgYmVfY21kX2dldF9tYWNfYWRkcihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCiB7CiAJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOwotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tY2NxKHBoYmEpOwotCXN0cnVjdCBiZV9jbWRfcmVxX2dldF9tYWNfYWRkciAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwotCWludCBzdGF0dXM7CisJc3RydWN0IGJlX21jY193cmIgKndyYjsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfbWFjX2FkZHIgKnJlcTsKKwl1bnNpZ25lZCBpbnQgdGFnID0gMDsKIAogCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlX2NtZF9nZXRfbWFjX2FkZHJcbiIpOwogCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKLQltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCXRhZyA9IGFsbG9jX21jY190YWcocGhiYSk7CisJaWYgKCF0YWcpIHsKKwkJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJCXJldHVybiB0YWc7CisJfQorCisJd3JiID0gd3JiX2Zyb21fbWNjcShwaGJhKTsKKwlyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJd3JiLT50YWcwIHw9IHRhZzsKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwogCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0ksCiAJCQkgICBPUENPREVfQ09NTU9OX0lTQ1NJX05UV0tfR0VUX05JQ19DT05GSUcsCiAJCQkgICBzaXplb2YoKnJlcSkpOwogCi0Jc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KHBoYmEpOwotCWlmICghc3RhdHVzKSB7Ci0JCXN0cnVjdCBiZV9jbWRfcmVzcF9nZXRfbWFjX2FkZHIgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7Ci0KLQkJbWVtY3B5KG1hY19hZGRyLCByZXNwLT5tYWNfYWRkcmVzcywgRVRIX0FMRU4pOwotCX0KLQorCWJlX21jY19ub3RpZnkocGhiYSk7CiAJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gdGFnOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5oIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuaAppbmRleCAyNGVhZmY5Li5lY2VhZDZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmgKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIzMSw2ICsyMzEsNyBAQAogCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKIAlzdHJ1Y3QgYmVpc2NzaV9zZXNzICpzZXNzOwogCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmNvbm47CisJc3RydWN0IGlzY3NpX2VuZHBvaW50ICpvcGVuaXNjc2lfZXA7CiAJdW5zaWduZWQgc2hvcnQgaXBfdHlwZTsKIAljaGFyIGRzdDZfYWRkcltJU0NTSV9BRERSRVNTX0JVRl9MRU5dOwogCXVuc2lnbmVkIGxvbmcgZHN0X2FkZHI7CkBAIC0yNDksNyArMjUwLDQgQEAKIAkJCQkJIHVuc2lnbmVkIHNob3J0IGlzc3VlX3Jlc2V0LAogCQkJCQkgdW5zaWduZWQgc2hvcnQgc2F2ZWNmZ19mbGFnKTsKIAotdW5zaWduZWQgY2hhciBtZ210X2Z3X2NtZChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAotCQkJICBzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCi0JCQkgIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKaW5kZXggMzNiMjI5NC4uMWM0ZDEyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKQEAgLTE0MjYsOCArMTQyNiw4IEBACiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfUEFSQU1fQ09OTl9BRERSRVNTOgogCQlpZiAoYm54MmlfY29ubi0+ZXApCi0JCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgTklQUVVBRF9GTVQgIlxuIiwKLQkJCQkgICAgICBOSVBRVUFEKGJueDJpX2Nvbm4tPmVwLT5jbV9zay0+ZHN0X2lwKSk7CisJCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVwSTRcbiIsCisJCQkJICAgICAgJmJueDJpX2Nvbm4tPmVwLT5jbV9zay0+ZHN0X2lwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIGlzY3NpX2Nvbm5fZ2V0X3BhcmFtKGNsc19jb25uLCBwYXJhbSwgYnVmKTsKQEAgLTE5OTAsNiArMTk5MCw3IEBACiAJLmVoX2Fib3J0X2hhbmRsZXIJPSBpc2NzaV9laF9hYm9ydCwKIAkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBpc2NzaV9laF9kZXZpY2VfcmVzZXQsCiAJLmVoX3RhcmdldF9yZXNldF9oYW5kbGVyID0gaXNjc2lfZWhfdGFyZ2V0X3Jlc2V0LAorCS5jaGFuZ2VfcXVldWVfZGVwdGgJPSBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCiAJLmNhbl9xdWV1ZQkJPSAxMDI0LAogCS5tYXhfc2VjdG9ycwkJPSAxMjcsCiAJLmNtZF9wZXJfbHVuCQk9IDMyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jIGIvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCmluZGV4IDkxMjliY2YuLmNkMDVlMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYworKysgYi9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKQEAgLTIxOSwxOCArMjE5LDE1IEBACiAJCQlicmVhazsKIAkJfQogCQlzYSA9IChjZGJwWzhdIDw8IDgpICsgY2RicFs5XTsKLQkJbmFtZSA9IGdldF9zYV9uYW1lKG1haW50X2luX2FyciwgTUFJTlRfSU5fU1osIHNhKTsKLQkJaWYgKG5hbWUpIHsKKwkJbmFtZSA9IGdldF9zYV9uYW1lKHZhcmlhYmxlX2xlbmd0aF9hcnIsIFZBUklBQkxFX0xFTkdUSF9TWiwgc2EpOworCQlpZiAobmFtZSkKIAkJCXByaW50aygiJXMiLCBuYW1lKTsKLQkJCWlmICgoY2RiX2xlbiA+IDApICYmIChsZW4gIT0gY2RiX2xlbikpCi0JCQkJcHJpbnRrKCIsIGluX2NkYl9sZW49JWQsIGV4dF9sZW49JWQiLAotCQkJCSAgICAgICBsZW4sIGNkYl9sZW4pOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlwcmludGsoImNkYlswXT0weCV4LCBzYT0weCV4IiwgY2RiMCwgc2EpOwotCQkJaWYgKChjZGJfbGVuID4gMCkgJiYgKGxlbiAhPSBjZGJfbGVuKSkKLQkJCQlwcmludGsoIiwgaW5fY2RiX2xlbj0lZCwgZXh0X2xlbj0lZCIsCi0JCQkJICAgICAgIGxlbiwgY2RiX2xlbik7Ci0JCX0KKworCQlpZiAoKGNkYl9sZW4gPiAwKSAmJiAobGVuICE9IGNkYl9sZW4pKQorCQkJcHJpbnRrKCIsIGluX2NkYl9sZW49JWQsIGV4dF9sZW49JWQiLCBsZW4sIGNkYl9sZW4pOworCiAJCWJyZWFrOwogCWNhc2UgTUFJTlRFTkFOQ0VfSU46CiAJCXNhID0gY2RicFsxXSAmIDB4MWY7CkBAIC0zNDksNiArMzQ2LDkgQEAKIHsKIAlpbnQgazsKIAorCWlmIChjbWQtPmNtbmQgPT0gTlVMTCkKKwkJcmV0dXJuOworCiAJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsICJDREI6ICIpOwogCXByaW50X29wY29kZV9uYW1lKGNtZC0+Y21uZCwgY21kLT5jbWRfbGVuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2lzY3NpLmMKaW5kZXggOTY5YzgzMS4uNDEyODUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pc2NzaS5jCkBAIC01OTEsOCArNTkxLDcgQEAKIAljeGdiM2lfY29ubl9tYXhfcmVjdl9kbGVuZ3RoKGNvbm4pOwogCiAJc3Bpbl9sb2NrX2JoKCZjb25uLT5zZXNzaW9uLT5sb2NrKTsKLQlzcHJpbnRmKGNvbm4tPnBvcnRhbF9hZGRyZXNzLCBOSVBRVUFEX0ZNVCwKLQkJTklQUVVBRChjM2NuLT5kYWRkci5zaW5fYWRkci5zX2FkZHIpKTsKKwlzcHJpbnRmKGNvbm4tPnBvcnRhbF9hZGRyZXNzLCAiJXBJNCIsICZjM2NuLT5kYWRkci5zaW5fYWRkci5zX2FkZHIpOwogCWNvbm4tPnBvcnRhbF9wb3J0ID0gbnRvaHMoYzNjbi0+ZGFkZHIuc2luX3BvcnQpOwogCXNwaW5fdW5sb2NrX2JoKCZjb25uLT5zZXNzaW9uLT5sb2NrKTsKIApAQCAtNzA5LDYgKzcwOCwxMiBAQAogewogCXN0cnVjdCBjeGdiM2lfaGJhICpoYmEgPSBpc2NzaV9ob3N0X3ByaXYoc2hvc3QpOwogCisJaWYgKCFoYmEtPm5kZXYpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBzaG9zdCwgIkNvdWxkIG5vdCBzZXQgaG9zdCBwYXJhbS4gIgorCQkJICAgICAiTmV0ZGV2IGZvciBob3N0IG5vdCBzZXQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJY3hnYjNpX2FwaV9kZWJ1ZygicGFyYW0gJWQsIGJ1ZiAlcy5cbiIsIHBhcmFtLCBidWYpOwogCiAJc3dpdGNoIChwYXJhbSkgewpAQCAtNzM5LDYgKzc0NCwxMiBAQAogCXN0cnVjdCBjeGdiM2lfaGJhICpoYmEgPSBpc2NzaV9ob3N0X3ByaXYoc2hvc3QpOwogCWludCBsZW4gPSAwOwogCisJaWYgKCFoYmEtPm5kZXYpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBzaG9zdCwgIkNvdWxkIG5vdCBzZXQgaG9zdCBwYXJhbS4gIgorCQkJICAgICAiTmV0ZGV2IGZvciBob3N0IG5vdCBzZXQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJY3hnYjNpX2FwaV9kZWJ1ZygiaGJhICVzLCBwYXJhbSAlZC5cbiIsIGhiYS0+bmRldi0+bmFtZSwgcGFyYW0pOwogCiAJc3dpdGNoIChwYXJhbSkgewpAQCAtNzUzLDcgKzc2NCw3IEBACiAJCV9fYmUzMiBhZGRyOwogCiAJCWFkZHIgPSBjeGdiM2lfZ2V0X3ByaXZhdGVfaXB2NGFkZHIoaGJhLT5uZGV2KTsKLQkJbGVuID0gc3ByaW50ZihidWYsIE5JUFFVQURfRk1ULCBOSVBRVUFEKGFkZHIpKTsKKwkJbGVuID0gc3ByaW50ZihidWYsICIlcEk0IiwgJmFkZHIpOwogCQlicmVhazsKIAl9CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX29mZmxvYWQuYyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX29mZmxvYWQuYwppbmRleCAxNWEwMGU4Li4zZTA4YzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9vZmZsb2FkLmMKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfb2ZmbG9hZC5jCkBAIC0xNjc1LDEwICsxNjc1LDExIEBACiAJfSBlbHNlCiAJCWMzY24tPnNhZGRyLnNpbl9hZGRyLnNfYWRkciA9IHNpcHY0OwogCi0JYzNjbl9jb25uX2RlYnVnKCJjM2NuIDB4JXAsICV1LiV1LiV1LiV1LCV1LSV1LiV1LiV1LiV1LCV1IFNZTl9TRU5ULlxuIiwKLQkJCWMzY24sIE5JUFFVQUQoYzNjbi0+c2FkZHIuc2luX2FkZHIuc19hZGRyKSwKKwljM2NuX2Nvbm5fZGVidWcoImMzY24gMHglcCwgJXBJNCwldS0lcEk0LCV1IFNZTl9TRU5ULlxuIiwKKwkJCWMzY24sCisJCQkmYzNjbi0+c2FkZHIuc2luX2FkZHIuc19hZGRyLAogCQkJbnRvaHMoYzNjbi0+c2FkZHIuc2luX3BvcnQpLAotCQkJTklQUVVBRChjM2NuLT5kYWRkci5zaW5fYWRkci5zX2FkZHIpLAorCQkJJmMzY24tPmRhZGRyLnNpbl9hZGRyLnNfYWRkciwKIAkJCW50b2hzKGMzY24tPmRhZGRyLnNpbl9wb3J0KSk7CiAKIAljM2NuX3NldF9zdGF0ZShjM2NuLCBDM0NOX1NUQVRFX0NPTk5FQ1RJTkcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfcGR1LmMgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9wZHUuYwppbmRleCAxZmUzYjBmLi45YzM4NTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9wZHUuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9wZHUuYwpAQCAtNDYxLDEwICs0NjEsOCBAQAogCQlza2IgPSBza2JfcGVlaygmYzNjbi0+cmVjZWl2ZV9xdWV1ZSk7CiAJfQogCXJlYWRfdW5sb2NrKCZjM2NuLT5jYWxsYmFja19sb2NrKTsKLQlpZiAoYzNjbikgewotCQljM2NuLT5jb3BpZWRfc2VxICs9IHJlYWQ7Ci0JCWN4Z2IzaV9jM2NuX3J4X2NyZWRpdHMoYzNjbiwgcmVhZCk7Ci0JfQorCWMzY24tPmNvcGllZF9zZXEgKz0gcmVhZDsKKwljeGdiM2lfYzNjbl9yeF9jcmVkaXRzKGMzY24sIHJlYWQpOwogCWNvbm4tPnJ4ZGF0YV9vY3RldHMgKz0gcmVhZDsKIAogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYwppbmRleCA0ZjBkMDEzLi5iYzllOTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCkBAIC03MTcsNiArNzE3LDggQEAKIAl7IklCTSIsICIyMTQ1IiB9LAogCXsiUGlsbGFyIiwgIkF4aW9tIiB9LAogCXsiSW50ZWwiLCAiTXVsdGktRmxleCJ9LAorCXsiTkVUQVBQIiwgIkxVTiJ9LAorCXsiQUlYIiwgIk5WRElTSyJ9LAogCXtOVUxMLCBOVUxMfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VhdGEuYyBiL2RyaXZlcnMvc2NzaS9lYXRhLmMKaW5kZXggYzcwNzZjZS4uM2M1YWJmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2VhdGEuYworKysgYi9kcml2ZXJzL3Njc2kvZWF0YS5jCkBAIC0xNTA5LDcgKzE1MDksNyBAQAogCWNoYXIgKmN1ciA9IHN0cjsKIAlpbnQgaSA9IDE7CiAKLQl3aGlsZSAoY3VyICYmIGlzZGlnaXQoKmN1cikgJiYgaSA8PSBNQVhfSU5UX1BBUkFNKSB7CisJd2hpbGUgKGN1ciAmJiBpc2RpZ2l0KCpjdXIpICYmIGkgPCBNQVhfSU5UX1BBUkFNKSB7CiAJCWludHNbaSsrXSA9IHNpbXBsZV9zdHJ0b3VsKGN1ciwgTlVMTCwgMCk7CiAKIAkJaWYgKChjdXIgPSBzdHJjaHIoY3VyLCAnLCcpKSAhPSBOVUxMKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VzcF9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuYwppbmRleCBhNjgwZTE4Li5lMmJjNzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuYwpAQCAtMTQ0OSw5ICsxNDQ5LDYgQEAKIAlpZiAob2Zmc2V0ID4gMTUpCiAJCWdvdG8gZG9fcmVqZWN0OwogCi0JaWYgKGVzcC0+ZmxhZ3MgJiBFU1BfRkxBR19ESVNBQkxFX1NZTkMpCi0JCW9mZnNldCA9IDA7Ci0KIAlpZiAob2Zmc2V0KSB7CiAJCWludCBvbmVfY2xvY2s7CiAKQEAgLTI0MDUsMTIgKzI0MDIsNiBAQAogCXN0cnVjdCBlc3BfdGFyZ2V0X2RhdGEgKnRwID0gJmVzcC0+dGFyZ2V0W2Rldi0+aWRdOwogCWludCBnb2FsX3RhZ3MsIHF1ZXVlX2RlcHRoOwogCi0JaWYgKGVzcC0+ZmxhZ3MgJiBFU1BfRkxBR19ESVNBQkxFX1NZTkMpIHsKLQkJLyogQnlwYXNzIGFzeW5jIGRvbWFpbiB2YWxpZGF0aW9uICovCi0JCWRldi0+cHByICA9IDA7Ci0JCWRldi0+c2R0ciA9IDA7Ci0JfQotCiAJZ29hbF90YWdzID0gMDsKIAogCWlmIChkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKQEAgLTI2NjAsNyArMjY1MSwxMCBAQAogCXN0cnVjdCBlc3AgKmVzcCA9IHNob3N0X3ByaXYoaG9zdCk7CiAJc3RydWN0IGVzcF90YXJnZXRfZGF0YSAqdHAgPSAmZXNwLT50YXJnZXRbdGFyZ2V0LT5pZF07CiAKLQl0cC0+bmVnb19nb2FsX29mZnNldCA9IG9mZnNldDsKKwlpZiAoZXNwLT5mbGFncyAmIEVTUF9GTEFHX0RJU0FCTEVfU1lOQykKKwkJdHAtPm5lZ29fZ29hbF9vZmZzZXQgPSAwOworCWVsc2UKKwkJdHAtPm5lZ29fZ29hbF9vZmZzZXQgPSBvZmZzZXQ7CiAJdHAtPmZsYWdzIHw9IEVTUF9UR1RfQ0hFQ0tfTkVHTzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pYy5oIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pYy5oCmluZGV4IGJiMjA4YTYuLjM5NjZjNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWMuaAorKysgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljLmgKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2RlZmluZSBEUlZfTkFNRQkJImZuaWMiCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTgkJIkNpc2NvIEZDb0UgSEJBIERyaXZlciIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjAuMC4xMTIxIgorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuNC4wLjk4IgogI2RlZmluZSBQRlgJCQlEUlZfTkFNRSAiOiAiCiAjZGVmaW5lIERGWCAgICAgICAgICAgICAgICAgICAgIERSVl9OQU1FICIlZDogIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfbWFpbi5jCmluZGV4IGZlMWIxMDMxLi41MDdlMjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYworKysgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYwpAQCAtNjIwLDYgKzYyMCw4IEBACiAJaWYgKGZuaWMtPmNvbmZpZy5mbGFncyAmIFZGQ0ZfRklQX0NBUEFCTEUpIHsKIAkJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgZm5pYy0+bHBvcnQtPmhvc3QsCiAJCQkgICAgICJmaXJtd2FyZSBzdXBwb3J0cyBGSVBcbiIpOworCQkvKiBlbmFibGUgZGlyZWN0ZWQgYW5kIG11bHRpY2FzdCAqLworCQl2bmljX2Rldl9wYWNrZXRfZmlsdGVyKGZuaWMtPnZkZXYsIDEsIDEsIDAsIDAsIDApOwogCQl2bmljX2Rldl9hZGRfYWRkcihmbmljLT52ZGV2LCBGSVBfQUxMX0VOT0RFX01BQ1MpOwogCQl2bmljX2Rldl9hZGRfYWRkcihmbmljLT52ZGV2LCBmbmljLT5jdGxyLmN0bF9zcmNfYWRkcik7CiAJfSBlbHNlIHsKQEAgLTY5OCw2ICs3MDAsOCBAQAogCQlnb3RvIGVycl9vdXRfcmVtb3ZlX3Njc2lfaG9zdDsKIAl9CiAKKwlmY19scG9ydF9pbml0X3N0YXRzKGxwKTsKKwogCWZjX2xwb3J0X2NvbmZpZyhscCk7CiAKIAlpZiAoZmNfc2V0X21mcyhscCwgZm5pYy0+Y29uZmlnLm1heGRhdGFmaWVsZHNpemUgKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ZuaWMvdm5pY19kZXZjbWQuaCBiL2RyaXZlcnMvc2NzaS9mbmljL3ZuaWNfZGV2Y21kLmgKaW5kZXggZDYyYjkwNi4uN2M5Y2NiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2ZuaWMvdm5pY19kZXZjbWQuaAorKysgYi9kcml2ZXJzL3Njc2kvZm5pYy92bmljX2RldmNtZC5oCkBAIC05NCw3ICs5NCw3IEBACiAJQ01EX1NUQVRTX0RVTVAgICAgICAgICAgPSBfQ01EQyhfQ01EX0RJUl9XUklURSwgX0NNRF9WVFlQRV9BTEwsIDQpLAogCiAJLyogc2V0IFJ4IHBhY2tldCBmaWx0ZXI6ICh1MzIpYTA9ZmlsdGVycyAoc2VlIENNRF9QRklMVEVSXyopICovCi0JQ01EX1BBQ0tFVF9GSUxURVIJPSBfQ01EQ05XKF9DTURfRElSX1dSSVRFLCBfQ01EX1ZUWVBFX0VORVQsIDcpLAorCUNNRF9QQUNLRVRfRklMVEVSICAgICAgID0gX0NNRENOVyhfQ01EX0RJUl9XUklURSwgX0NNRF9WVFlQRV9BTEwsIDcpLAogCiAJLyogaGFuZyBkZXRlY3Rpb24gbm90aWZpY2F0aW9uICovCiAJQ01EX0hBTkdfTk9USUZZICAgICAgICAgPSBfQ01EQyhfQ01EX0RJUl9OT05FLCBfQ01EX1ZUWVBFX0FMTCwgOCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ2R0aC5jIGIvZHJpdmVycy9zY3NpL2dkdGguYwppbmRleCA5ZThmY2UwLi5iYTNjOTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ2R0aC5jCisrKyBiL2RyaXZlcnMvc2NzaS9nZHRoLmMKQEAgLTE0MCw0MCArMTQwLDQwIEBACiAjaW5jbHVkZSAiZ2R0aC5oIgogCiBzdGF0aWMgdm9pZCBnZHRoX2RlbGF5KGludCBtaWxsaXNlY29uZHMpOwotc3RhdGljIHZvaWQgZ2R0aF9ldmFsX21hcHBpbmcodWxvbmczMiBzaXplLCB1bG9uZzMyICpjeWxzLCBpbnQgKmhlYWRzLCBpbnQgKnNlY3MpOworc3RhdGljIHZvaWQgZ2R0aF9ldmFsX21hcHBpbmcodTMyIHNpemUsIHUzMiAqY3lscywgaW50ICpoZWFkcywgaW50ICpzZWNzKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBnZHRoX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIGlycXJldHVybl90IF9fZ2R0aF9pbnRlcnJ1cHQoZ2R0aF9oYV9zdHIgKmhhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGdkdGhfZnJvbV93YWl0LCBpbnQqIHBJbmRleCk7Ci1zdGF0aWMgaW50IGdkdGhfc3luY19ldmVudChnZHRoX2hhX3N0ciAqaGEsIGludCBzZXJ2aWNlLCB1bmNoYXIgaW5kZXgsCitzdGF0aWMgaW50IGdkdGhfc3luY19ldmVudChnZHRoX2hhX3N0ciAqaGEsIGludCBzZXJ2aWNlLCB1OCBpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjc2lfQ21uZCAqc2NwKTsKIHN0YXRpYyBpbnQgZ2R0aF9hc3luY19ldmVudChnZHRoX2hhX3N0ciAqaGEpOwogc3RhdGljIHZvaWQgZ2R0aF9sb2dfZXZlbnQoZ2R0aF9ldnRfZGF0YSAqZHZyLCBjaGFyICpidWZmZXIpOwogCi1zdGF0aWMgdm9pZCBnZHRoX3B1dHEoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdW5jaGFyIHByaW9yaXR5KTsKK3N0YXRpYyB2b2lkIGdkdGhfcHV0cShnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwLCB1OCBwcmlvcml0eSk7CiBzdGF0aWMgdm9pZCBnZHRoX25leHQoZ2R0aF9oYV9zdHIgKmhhKTsKLXN0YXRpYyBpbnQgZ2R0aF9maWxsX3Jhd19jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdW5jaGFyIGIpOworc3RhdGljIGludCBnZHRoX2ZpbGxfcmF3X2NtZChnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwLCB1OCBiKTsKIHN0YXRpYyBpbnQgZ2R0aF9zcGVjaWFsX2NtZChnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwKTsKLXN0YXRpYyBnZHRoX2V2dF9zdHIgKmdkdGhfc3RvcmVfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCB1c2hvcnQgc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2hvcnQgaWR4LCBnZHRoX2V2dF9kYXRhICpldnQpOworc3RhdGljIGdkdGhfZXZ0X3N0ciAqZ2R0aF9zdG9yZV9ldmVudChnZHRoX2hhX3N0ciAqaGEsIHUxNiBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBpZHgsIGdkdGhfZXZ0X2RhdGEgKmV2dCk7CiBzdGF0aWMgaW50IGdkdGhfcmVhZF9ldmVudChnZHRoX2hhX3N0ciAqaGEsIGludCBoYW5kbGUsIGdkdGhfZXZ0X3N0ciAqZXN0cik7Ci1zdGF0aWMgdm9pZCBnZHRoX3JlYWRhcHBfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCB1bmNoYXIgYXBwbGljYXRpb24sIAorc3RhdGljIHZvaWQgZ2R0aF9yZWFkYXBwX2V2ZW50KGdkdGhfaGFfc3RyICpoYSwgdTggYXBwbGljYXRpb24sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkdGhfZXZ0X3N0ciAqZXN0cik7CiBzdGF0aWMgdm9pZCBnZHRoX2NsZWFyX2V2ZW50cyh2b2lkKTsKIAogc3RhdGljIHZvaWQgZ2R0aF9jb3B5X2ludGVybmFsX2RhdGEoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlciwgdXNob3J0IGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlciwgdTE2IGNvdW50KTsKIHN0YXRpYyBpbnQgZ2R0aF9pbnRlcm5hbF9jYWNoZV9jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCk7Ci1zdGF0aWMgaW50IGdkdGhfZmlsbF9jYWNoZV9jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdXNob3J0IGhkcml2ZSk7CitzdGF0aWMgaW50IGdkdGhfZmlsbF9jYWNoZV9jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdTE2IGhkcml2ZSk7CiAKIHN0YXRpYyB2b2lkIGdkdGhfZW5hYmxlX2ludChnZHRoX2hhX3N0ciAqaGEpOwogc3RhdGljIGludCBnZHRoX3Rlc3RfYnVzeShnZHRoX2hhX3N0ciAqaGEpOwogc3RhdGljIGludCBnZHRoX2dldF9jbWRfaW5kZXgoZ2R0aF9oYV9zdHIgKmhhKTsKIHN0YXRpYyB2b2lkIGdkdGhfcmVsZWFzZV9ldmVudChnZHRoX2hhX3N0ciAqaGEpOwotc3RhdGljIGludCBnZHRoX3dhaXQoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgaW5kZXgsdWxvbmczMiB0aW1lKTsKLXN0YXRpYyBpbnQgZ2R0aF9pbnRlcm5hbF9jbWQoZ2R0aF9oYV9zdHIgKmhhLCB1bmNoYXIgc2VydmljZSwgdXNob3J0IG9wY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsb25nMzIgcDEsIHVsb25nNjQgcDIsdWxvbmc2NCBwMyk7CitzdGF0aWMgaW50IGdkdGhfd2FpdChnZHRoX2hhX3N0ciAqaGEsIGludCBpbmRleCx1MzIgdGltZSk7CitzdGF0aWMgaW50IGdkdGhfaW50ZXJuYWxfY21kKGdkdGhfaGFfc3RyICpoYSwgdTggc2VydmljZSwgdTE2IG9wY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBwMSwgdTY0IHAyLHU2NCBwMyk7CiBzdGF0aWMgaW50IGdkdGhfc2VhcmNoX2RyaXZlcyhnZHRoX2hhX3N0ciAqaGEpOwotc3RhdGljIGludCBnZHRoX2FuYWx5c2VfaGRyaXZlKGdkdGhfaGFfc3RyICpoYSwgdXNob3J0IGhkcml2ZSk7CitzdGF0aWMgaW50IGdkdGhfYW5hbHlzZV9oZHJpdmUoZ2R0aF9oYV9zdHIgKmhhLCB1MTYgaGRyaXZlKTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmdkdGhfY3RyX25hbWUoZ2R0aF9oYV9zdHIgKmhhKTsKIApAQCAtMTg5LDcgKzE4OSw3IEBACiBzdGF0aWMgdm9pZCBnZHRoX3Njc2lfZG9uZShzdHJ1Y3Qgc2NzaV9jbW5kICpzY3ApOwogCiAjaWZkZWYgREVCVUdfR0RUSAotc3RhdGljIHVuY2hhciAgIERlYnVnU3RhdGUgPSBERUJVR19HRFRIOworc3RhdGljIHU4ICAgRGVidWdTdGF0ZSA9IERFQlVHX0dEVEg7CiAKICNpZmRlZiBfX1NFUklBTF9fCiAjZGVmaW5lIE1BWF9TRVJCVUYgMTYwCkBAIC0yNzAsMzAgKzI3MCwzMCBAQAogI2VuZGlmCiAKICNpZmRlZiBHRFRIX1NUQVRJU1RJQ1MKLXN0YXRpYyB1bG9uZzMyIG1heF9ycT0wLCBtYXhfaW5kZXg9MCwgbWF4X3NnPTA7CitzdGF0aWMgdTMyIG1heF9ycT0wLCBtYXhfaW5kZXg9MCwgbWF4X3NnPTA7CiAjaWZkZWYgSU5UX0NPQUwKLXN0YXRpYyB1bG9uZzMyIG1heF9pbnRfY29hbD0wOworc3RhdGljIHUzMiBtYXhfaW50X2NvYWw9MDsKICNlbmRpZgotc3RhdGljIHVsb25nMzIgYWN0X2ludHM9MCwgYWN0X2lvcz0wLCBhY3Rfc3RhdHM9MCwgYWN0X3JxPTA7CitzdGF0aWMgdTMyIGFjdF9pbnRzPTAsIGFjdF9pb3M9MCwgYWN0X3N0YXRzPTAsIGFjdF9ycT0wOwogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGdkdGhfdGltZXI7CiAjZW5kaWYKIAotI2RlZmluZSBQVFIyVVNIT1JUKGEpICAgKHVzaG9ydCkodWxvbmcpKGEpCisjZGVmaW5lIFBUUjJVU0hPUlQoYSkgICAodTE2KSh1bnNpZ25lZCBsb25nKShhKQogI2RlZmluZSBHRFRPRkZTT0YoYSxiKSAgKHNpemVfdCkmKCgoYSopMCktPmIpCiAjZGVmaW5lIElOREVYX09LKGksdCkgICAoKGkpPEFSUkFZX1NJWkUodCkpCiAKICNkZWZpbmUgQlVTX0wyUChhLGIpICAgICgoYik+KGEpLT52aXJ0X2J1cyA/IChiLTEpOihiKSkKIAogI2lmZGVmIENPTkZJR19JU0EKLXN0YXRpYyB1bmNoYXIgICBnZHRoX2RycV90YWJbNF0gPSB7NSw2LDcsN307ICAgICAgICAgICAgLyogRFJRIHRhYmxlICovCitzdGF0aWMgdTggICBnZHRoX2RycV90YWJbNF0gPSB7NSw2LDcsN307ICAgICAgICAgICAgLyogRFJRIHRhYmxlICovCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19FSVNBKSB8fCBkZWZpbmVkKENPTkZJR19JU0EpCi1zdGF0aWMgdW5jaGFyICAgZ2R0aF9pcnFfdGFiWzZdID0gezAsMTAsMTEsMTIsMTQsMH07ICAgIC8qIElSUSB0YWJsZSAqLworc3RhdGljIHU4ICAgZ2R0aF9pcnFfdGFiWzZdID0gezAsMTAsMTEsMTIsMTQsMH07ICAgIC8qIElSUSB0YWJsZSAqLwogI2VuZGlmCi1zdGF0aWMgdW5jaGFyICAgZ2R0aF9wb2xsaW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvbGxpbmcgaWYgVFJVRSAqLworc3RhdGljIHU4ICAgZ2R0aF9wb2xsaW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvbGxpbmcgaWYgVFJVRSAqLwogc3RhdGljIGludCAgICAgIGdkdGhfY3RyX2NvdW50ICA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIGNvdW50ICovCiBzdGF0aWMgTElTVF9IRUFEKGdkdGhfaW5zdGFuY2VzKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbGlzdCAqLwotc3RhdGljIHVuY2hhciAgIGdkdGhfd3JpdGVfdGhyb3VnaCA9IEZBTFNFOyAgICAgICAgICAgICAvKiB3cml0ZSB0aHJvdWdoICovCitzdGF0aWMgdTggICBnZHRoX3dyaXRlX3Rocm91Z2ggPSBGQUxTRTsgICAgICAgICAgICAgLyogd3JpdGUgdGhyb3VnaCAqLwogc3RhdGljIGdkdGhfZXZ0X3N0ciBlYnVmZmVyW01BWF9FVkVOVFNdOyAgICAgICAgICAgICAgICAvKiBldmVudCBidWZmZXIgKi8KIHN0YXRpYyBpbnQgZWxhc3RpZHg7CiBzdGF0aWMgaW50IGVvbGRpZHg7CkBAIC0zMDMsNyArMzAzLDcgQEAKICNkZWZpbmUgRE9VICAgICAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9VVCBkYXRhIGRpcmVjdGlvbiAqLwogI2RlZmluZSBETk8gICAgIERJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gZGF0YSB0cmFuc2ZlciAqLwogI2RlZmluZSBEVU4gICAgIERJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdW5rbm93biBkYXRhIGRpcmVjdGlvbiAqLwotc3RhdGljIHVuY2hhciBnZHRoX2RpcmVjdGlvbl90YWJbMHgxMDBdID0geworc3RhdGljIHU4IGdkdGhfZGlyZWN0aW9uX3RhYlsweDEwMF0gPSB7CiAgICAgRE5PLEROTyxESU4sRElOLERPVSxESU4sRElOLERPVSxESU4sRFVOLERPVSxET1UsRFVOLERVTixEVU4sRElOLAogICAgIEROTyxESU4sRElOLERPVSxESU4sRE9VLEROTyxETk8sRE9VLEROTyxESU4sRE5PLERJTixET1UsRE5PLERVTiwKICAgICBESU4sRFVOLERJTixEVU4sRE9VLERJTixEVU4sRFVOLERJTixESU4sRE9VLEROTyxEVU4sRElOLERPVSxET1UsCkBAIC0zOTAsNyArMzkwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZ2R0aF9jbW5kaW5mbyAqZ2R0aF9nZXRfY21uZGluZm8oZ2R0aF9oYV9zdHIgKmhhKQogewogCXN0cnVjdCBnZHRoX2NtbmRpbmZvICpwcml2ID0gTlVMTDsKLQl1bG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwpAQCAtNDkzLDcgKzQ5Myw3IEBACiAgICAgcmV0dXJuIHJ2YWw7CiB9CiAKLXN0YXRpYyB2b2lkIGdkdGhfZXZhbF9tYXBwaW5nKHVsb25nMzIgc2l6ZSwgdWxvbmczMiAqY3lscywgaW50ICpoZWFkcywgaW50ICpzZWNzKQorc3RhdGljIHZvaWQgZ2R0aF9ldmFsX21hcHBpbmcodTMyIHNpemUsIHUzMiAqY3lscywgaW50ICpoZWFkcywgaW50ICpzZWNzKQogewogICAgICpjeWxzID0gc2l6ZSAvSEVBRFMvU0VDUzsKICAgICBpZiAoKmN5bHMgPD0gTUFYQ1lMUykgewpAQCAtNTE0LDkgKzUxNCw5IEBACiAKIC8qIGNvbnRyb2xsZXIgc2VhcmNoIGFuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KICNpZmRlZiBDT05GSUdfRUlTQQotc3RhdGljIGludCBfX2luaXQgZ2R0aF9zZWFyY2hfZWlzYSh1c2hvcnQgZWlzYV9hZHIpCitzdGF0aWMgaW50IF9faW5pdCBnZHRoX3NlYXJjaF9laXNhKHUxNiBlaXNhX2FkcikKIHsKLSAgICB1bG9uZzMyIGlkOworICAgIHUzMiBpZDsKICAgICAKICAgICBUUkFDRSgoImdkdGhfc2VhcmNoX2Vpc2EoKSBhZHIuICV4XG4iLGVpc2FfYWRyKSk7CiAgICAgaWQgPSBpbmwoZWlzYV9hZHIrSUQwUkVHKTsKQEAgLTUzMywxMyArNTMzLDEzIEBACiAjZW5kaWYgLyogQ09ORklHX0VJU0EgKi8KIAogI2lmZGVmIENPTkZJR19JU0EKLXN0YXRpYyBpbnQgX19pbml0IGdkdGhfc2VhcmNoX2lzYSh1bG9uZzMyIGJpb3NfYWRyKQorc3RhdGljIGludCBfX2luaXQgZ2R0aF9zZWFyY2hfaXNhKHUzMiBiaW9zX2FkcikKIHsKICAgICB2b2lkIF9faW9tZW0gKmFkZHI7Ci0gICAgdWxvbmczMiBpZDsKKyAgICB1MzIgaWQ7CiAKICAgICBUUkFDRSgoImdkdGhfc2VhcmNoX2lzYSgpIGJpb3MgYWRyLiAleFxuIixiaW9zX2FkcikpOwotICAgIGlmICgoYWRkciA9IGlvcmVtYXAoYmlvc19hZHIrQklPU19JRF9PRkZTLCBzaXplb2YodWxvbmczMikpKSAhPSBOVUxMKSB7CisgICAgaWYgKChhZGRyID0gaW9yZW1hcChiaW9zX2FkcitCSU9TX0lEX09GRlMsIHNpemVvZih1MzIpKSkgIT0gTlVMTCkgewogICAgICAgICBpZCA9IHJlYWRsKGFkZHIpOwogICAgICAgICBpb3VubWFwKGFkZHIpOwogICAgICAgICBpZiAoaWQgPT0gR0RUMl9JRCkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdEVDIwMDAgKi8KQEAgLTU1MSw3ICs1NTEsNyBAQAogCiAjaWZkZWYgQ09ORklHX1BDSQogCi1zdGF0aWMgYm9vbCBnZHRoX3NlYXJjaF92b3J0ZXgodXNob3J0IGRldmljZSkKK3N0YXRpYyBib29sIGdkdGhfc2VhcmNoX3ZvcnRleCh1MTYgZGV2aWNlKQogewogCWlmIChkZXZpY2UgPD0gUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjU1NSkKIAkJcmV0dXJuIHRydWU7CkBAIC02MDMsOSArNjAzLDkgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGdkdGhfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewotCXVzaG9ydCB2ZW5kb3IgPSBwZGV2LT52ZW5kb3I7Ci0JdXNob3J0IGRldmljZSA9IHBkZXYtPmRldmljZTsKLQl1bG9uZyBiYXNlMCwgYmFzZTEsIGJhc2UyOworCXUxNiB2ZW5kb3IgPSBwZGV2LT52ZW5kb3I7CisJdTE2IGRldmljZSA9IHBkZXYtPmRldmljZTsKKwl1bnNpZ25lZCBsb25nIGJhc2UwLCBiYXNlMSwgYmFzZTI7CiAJaW50IHJjOwogCWdkdGhfcGNpX3N0ciBnZHRoX3BjaXN0cjsKIAlnZHRoX2hhX3N0ciAqaGEgPSBOVUxMOwpAQCAtNjU4LDEwICs2NTgsMTAgQEAKICNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKICNpZmRlZiBDT05GSUdfRUlTQQotc3RhdGljIGludCBfX2luaXQgZ2R0aF9pbml0X2Vpc2EodXNob3J0IGVpc2FfYWRyLGdkdGhfaGFfc3RyICpoYSkKK3N0YXRpYyBpbnQgX19pbml0IGdkdGhfaW5pdF9laXNhKHUxNiBlaXNhX2FkcixnZHRoX2hhX3N0ciAqaGEpCiB7Ci0gICAgdWxvbmczMiByZXRyaWVzLGlkOwotICAgIHVuY2hhciBwcm90X3ZlcixlaXNhY2YsaSxpcnFfZm91bmQ7CisgICAgdTMyIHJldHJpZXMsaWQ7CisgICAgdTggcHJvdF92ZXIsZWlzYWNmLGksaXJxX2ZvdW5kOwogCiAgICAgVFJBQ0UoKCJnZHRoX2luaXRfZWlzYSgpIGFkci4gJXhcbiIsZWlzYV9hZHIpKTsKICAgICAKQEAgLTY4OCw3ICs2ODgsNyBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaGEtPmJtaWMgPSBlaXNhX2FkcjsKLSAgICBoYS0+YnJkX3BoeXMgPSAodWxvbmczMillaXNhX2FkciA+PiAxMjsKKyAgICBoYS0+YnJkX3BoeXMgPSAodTMyKWVpc2FfYWRyID4+IDEyOwogCiAgICAgb3V0bCgwLGVpc2FfYWRyK01BSUxCT1hSRUcpOwogICAgIG91dGwoMCxlaXNhX2FkcitNQUlMQk9YUkVHKzQpOwpAQCAtNzUyLDEyICs3NTIsMTIgQEAKICNlbmRpZiAvKiBDT05GSUdfRUlTQSAqLwogCiAjaWZkZWYgQ09ORklHX0lTQQotc3RhdGljIGludCBfX2luaXQgZ2R0aF9pbml0X2lzYSh1bG9uZzMyIGJpb3NfYWRyLGdkdGhfaGFfc3RyICpoYSkKK3N0YXRpYyBpbnQgX19pbml0IGdkdGhfaW5pdF9pc2EodTMyIGJpb3NfYWRyLGdkdGhfaGFfc3RyICpoYSkKIHsKICAgICByZWdpc3RlciBnZHQyX2RwcmFtX3N0ciBfX2lvbWVtICpkcDJfcHRyOwogICAgIGludCBpOwotICAgIHVuY2hhciBpcnFfZHJxLHByb3RfdmVyOwotICAgIHVsb25nMzIgcmV0cmllczsKKyAgICB1OCBpcnFfZHJxLHByb3RfdmVyOworICAgIHUzMiByZXRyaWVzOwogCiAgICAgVFJBQ0UoKCJnZHRoX2luaXRfaXNhKCkgYmlvcyBhZHIuICV4XG4iLGJpb3NfYWRyKSk7CiAKQEAgLTgxMiw3ICs4MTIsNyBAQAogICAgICAgICB9CiAgICAgICAgIGdkdGhfZGVsYXkoMSk7CiAgICAgfQotICAgIHByb3RfdmVyID0gKHVuY2hhcilyZWFkbCgmZHAyX3B0ci0+dS5pYy5TX0luZm9bMF0pOworICAgIHByb3RfdmVyID0gKHU4KXJlYWRsKCZkcDJfcHRyLT51LmljLlNfSW5mb1swXSk7CiAgICAgd3JpdGViKDAsICZkcDJfcHRyLT51LmljLlN0YXR1cyk7CiAgICAgd3JpdGViKDB4ZmYsICZkcDJfcHRyLT5pby5pcnFkZWwpOwogICAgIGlmIChwcm90X3ZlciAhPSBQUk9UT0NPTF9WRVJTSU9OKSB7CkBAIC04NTksOSArODU5LDkgQEAKICAgICByZWdpc3RlciBnZHQ2X2RwcmFtX3N0ciBfX2lvbWVtICpkcDZfcHRyOwogICAgIHJlZ2lzdGVyIGdkdDZjX2RwcmFtX3N0ciBfX2lvbWVtICpkcDZjX3B0cjsKICAgICByZWdpc3RlciBnZHQ2bV9kcHJhbV9zdHIgX19pb21lbSAqZHA2bV9wdHI7Ci0gICAgdWxvbmczMiByZXRyaWVzOwotICAgIHVuY2hhciBwcm90X3ZlcjsKLSAgICB1c2hvcnQgY29tbWFuZDsKKyAgICB1MzIgcmV0cmllczsKKyAgICB1OCBwcm90X3ZlcjsKKyAgICB1MTYgY29tbWFuZDsKICAgICBpbnQgaSwgZm91bmQgPSBGQUxTRTsKIAogICAgIFRSQUNFKCgiZ2R0aF9pbml0X3BjaSgpXG4iKSk7CkBAIC04NzEsNyArODcxLDcgQEAKICAgICBlbHNlCiAgICAgICAgIGhhLT5vZW1faWQgPSBPRU1fSURfSUNQOwogICAgIGhhLT5icmRfcGh5cyA9IChwZGV2LT5idXMtPm51bWJlciA8PCA4KSB8IChwZGV2LT5kZXZmbiAmIDB4ZjgpOwotICAgIGhhLT5zdHlwZSA9ICh1bG9uZzMyKXBkZXYtPmRldmljZTsKKyAgICBoYS0+c3R5cGUgPSAodTMyKXBkZXYtPmRldmljZTsKICAgICBoYS0+aXJxID0gcGRldi0+aXJxOwogICAgIGhhLT5wZGV2ID0gcGRldjsKICAgICAKQEAgLTg5MSw3ICs4OTEsNyBAQAogICAgICAgICAgICAgZm91bmQgPSBGQUxTRTsKICAgICAgICAgICAgIGZvciAoaSA9IDB4QzgwMDA7IGkgPCAweEU4MDAwOyBpICs9IDB4NDAwMCkgewogICAgICAgICAgICAgICAgIGlvdW5tYXAoaGEtPmJyZCk7Ci0gICAgICAgICAgICAgICAgaGEtPmJyZCA9IGlvcmVtYXAoaSwgc2l6ZW9mKHVzaG9ydCkpOyAKKyAgICAgICAgICAgICAgICBoYS0+YnJkID0gaW9yZW1hcChpLCBzaXplb2YodTE2KSk7IAogICAgICAgICAgICAgICAgIGlmIChoYS0+YnJkID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJHRFQtUENJOiBJbml0aWFsaXphdGlvbiBlcnJvciAoRFBNRU0gcmVtYXAgZXJyb3IpXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC05NDcsNyArOTQ3LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGdkdGhfZGVsYXkoMSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJvdF92ZXIgPSAodW5jaGFyKXJlYWRsKCZkcDZfcHRyLT51LmljLlNfSW5mb1swXSk7CisgICAgICAgIHByb3RfdmVyID0gKHU4KXJlYWRsKCZkcDZfcHRyLT51LmljLlNfSW5mb1swXSk7CiAgICAgICAgIHdyaXRlYigwLCAmZHA2X3B0ci0+dS5pYy5TX1N0YXR1cyk7CiAgICAgICAgIHdyaXRlYigweGZmLCAmZHA2X3B0ci0+aW8uaXJxZGVsKTsKICAgICAgICAgaWYgKHByb3RfdmVyICE9IFBST1RPQ09MX1ZFUlNJT04pIHsKQEAgLTEwMDAsNyArMTAwMCw3IEBACiAgICAgICAgICAgICBmb3VuZCA9IEZBTFNFOwogICAgICAgICAgICAgZm9yIChpID0gMHhDODAwMDsgaSA8IDB4RTgwMDA7IGkgKz0gMHg0MDAwKSB7CiAgICAgICAgICAgICAgICAgaW91bm1hcChoYS0+YnJkKTsKLSAgICAgICAgICAgICAgICBoYS0+YnJkID0gaW9yZW1hcChpLCBzaXplb2YodXNob3J0KSk7IAorICAgICAgICAgICAgICAgIGhhLT5icmQgPSBpb3JlbWFwKGksIHNpemVvZih1MTYpKTsgCiAgICAgICAgICAgICAgICAgaWYgKGhhLT5icmQgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBwcmludGsoIkdEVC1QQ0k6IEluaXRpYWxpemF0aW9uIGVycm9yIChEUE1FTSByZW1hcCBlcnJvcilcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTEwNTksNyArMTA1OSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBnZHRoX2RlbGF5KDEpOwogICAgICAgICB9Ci0gICAgICAgIHByb3RfdmVyID0gKHVuY2hhcilyZWFkbCgmZHA2Y19wdHItPnUuaWMuU19JbmZvWzBdKTsKKyAgICAgICAgcHJvdF92ZXIgPSAodTgpcmVhZGwoJmRwNmNfcHRyLT51LmljLlNfSW5mb1swXSk7CiAgICAgICAgIHdyaXRlYigwLCAmZHA2Y19wdHItPnUuaWMuU3RhdHVzKTsKICAgICAgICAgaWYgKHByb3RfdmVyICE9IFBST1RPQ09MX1ZFUlNJT04pIHsKICAgICAgICAgICAgIHByaW50aygiR0RULVBDSTogSWxsZWdhbCBwcm90b2NvbCB2ZXJzaW9uXG4iKTsKQEAgLTExMjgsNyArMTEyOCw3IEBACiAgICAgICAgICAgICBmb3VuZCA9IEZBTFNFOwogICAgICAgICAgICAgZm9yIChpID0gMHhDODAwMDsgaSA8IDB4RTgwMDA7IGkgKz0gMHg0MDAwKSB7CiAgICAgICAgICAgICAgICAgaW91bm1hcChoYS0+YnJkKTsKLSAgICAgICAgICAgICAgICBoYS0+YnJkID0gaW9yZW1hcChpLCBzaXplb2YodXNob3J0KSk7IAorICAgICAgICAgICAgICAgIGhhLT5icmQgPSBpb3JlbWFwKGksIHNpemVvZih1MTYpKTsgCiAgICAgICAgICAgICAgICAgaWYgKGhhLT5icmQgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBwcmludGsoIkdEVC1QQ0k6IEluaXRpYWxpemF0aW9uIGVycm9yIChEUE1FTSByZW1hcCBlcnJvcilcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTExODAsNyArMTE4MCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBnZHRoX2RlbGF5KDEpOwogICAgICAgICB9Ci0gICAgICAgIHByb3RfdmVyID0gKHVuY2hhcilyZWFkbCgmZHA2bV9wdHItPnUuaWMuU19JbmZvWzBdKTsKKyAgICAgICAgcHJvdF92ZXIgPSAodTgpcmVhZGwoJmRwNm1fcHRyLT51LmljLlNfSW5mb1swXSk7CiAgICAgICAgIHdyaXRlYigwLCAmZHA2bV9wdHItPnUuaWMuU19TdGF0dXMpOwogICAgICAgICBpZiAocHJvdF92ZXIgIT0gUFJPVE9DT0xfVkVSU0lPTikgewogICAgICAgICAgICAgcHJpbnRrKCJHRFQtUENJOiBJbGxlZ2FsIHByb3RvY29sIHZlcnNpb25cbiIpOwpAQCAtMTIyMyw3ICsxMjIzLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGdkdGhfZGVsYXkoMSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJvdF92ZXIgPSAodW5jaGFyKShyZWFkbCgmZHA2bV9wdHItPnUuaWMuU19JbmZvWzBdKSA+PiAxNik7CisgICAgICAgIHByb3RfdmVyID0gKHU4KShyZWFkbCgmZHA2bV9wdHItPnUuaWMuU19JbmZvWzBdKSA+PiAxNik7CiAgICAgICAgIHdyaXRlYigwLCAmZHA2bV9wdHItPnUuaWMuU19TdGF0dXMpOwogICAgICAgICBpZiAocHJvdF92ZXIgPCAweDJiKSAgICAgIC8qIEZXIDwgeC40Mzogbm8gNjQtYml0IERNQSBzdXBwb3J0ICovCiAgICAgICAgICAgICBoYS0+ZG1hNjRfc3VwcG9ydCA9IDA7CkBAIC0xMjM5LDcgKzEyMzksNyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgZ2R0aF9lbmFibGVfaW50KGdkdGhfaGFfc3RyICpoYSkKIHsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgIGdkdDJfZHByYW1fc3RyIF9faW9tZW0gKmRwMl9wdHI7CiAgICAgZ2R0Nl9kcHJhbV9zdHIgX19pb21lbSAqZHA2X3B0cjsKICAgICBnZHQ2bV9kcHJhbV9zdHIgX19pb21lbSAqZHA2bV9wdHI7CkBAIC0xMjc0LDE0ICsxMjc0LDE0IEBACiB9CiAKIC8qIHJldHVybiBJU3RhdHVzIGlmIGludGVycnVwdCB3YXMgZnJvbSB0aGlzIGNhcmQgZWxzZSAwICovCi1zdGF0aWMgdW5jaGFyIGdkdGhfZ2V0X3N0YXR1cyhnZHRoX2hhX3N0ciAqaGEpCitzdGF0aWMgdTggZ2R0aF9nZXRfc3RhdHVzKGdkdGhfaGFfc3RyICpoYSkKIHsKLSAgICB1bmNoYXIgSVN0YXR1cyA9IDA7CisgICAgdTggSVN0YXR1cyA9IDA7CiAKICAgICBUUkFDRSgoImdkdGhfZ2V0X3N0YXR1cygpIGlycSAlZCBjdHJfY291bnQgJWRcbiIsIGhhLT5pcnEsIGdkdGhfY3RyX2NvdW50KSk7CiAKICAgICAgICAgaWYgKGhhLT50eXBlID09IEdEVF9FSVNBKQotICAgICAgICAgICAgSVN0YXR1cyA9IGluYigodXNob3J0KWhhLT5ibWljICsgRURPT1JSRUcpOworICAgICAgICAgICAgSVN0YXR1cyA9IGluYigodTE2KWhhLT5ibWljICsgRURPT1JSRUcpOwogICAgICAgICBlbHNlIGlmIChoYS0+dHlwZSA9PSBHRFRfSVNBKQogICAgICAgICAgICAgSVN0YXR1cyA9CiAgICAgICAgICAgICAgICAgcmVhZGIoJigoZ2R0Ml9kcHJhbV9zdHIgX19pb21lbSAqKWhhLT5icmQpLT51LmljLkNtZF9JbmRleCk7CkBAIC0xMzI5LDcgKzEzMjksNyBAQAogICAgICAgICBpZiAoaGEtPmNtZF90YWJbaV0uY21uZCA9PSBVTlVTRURfQ01ORCkgewogICAgICAgICAgICAgaGEtPmNtZF90YWJbaV0uY21uZCA9IGhhLT5wY2NiLT5SZXF1ZXN0QnVmZmVyOwogICAgICAgICAgICAgaGEtPmNtZF90YWJbaV0uc2VydmljZSA9IGhhLT5wY2NiLT5TZXJ2aWNlOwotICAgICAgICAgICAgaGEtPnBjY2ItPkNvbW1hbmRJbmRleCA9ICh1bG9uZzMyKWkrMjsKKyAgICAgICAgICAgIGhhLT5wY2NiLT5Db21tYW5kSW5kZXggPSAodTMyKWkrMjsKICAgICAgICAgICAgIHJldHVybiAoaSsyKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEzNjIsNyArMTM2Miw3IEBACiAgICAgcmVnaXN0ZXIgZ2R0NmNfZHByYW1fc3RyIF9faW9tZW0gKmRwNmNfcHRyOwogICAgIGdkdDZfZHByYW1fc3RyIF9faW9tZW0gKmRwNl9wdHI7CiAgICAgZ2R0Ml9kcHJhbV9zdHIgX19pb21lbSAqZHAyX3B0cjsKLSAgICB1c2hvcnQgY3BfY291bnQsZHBfb2Zmc2V0LGNtZF9ubzsKKyAgICB1MTYgY3BfY291bnQsZHBfb2Zmc2V0LGNtZF9ubzsKICAgICAKICAgICBUUkFDRSgoImdkdGhfY29weV9jb21tYW5kKCkgaGFudW0gJWRcbiIsIGhhLT5oYW51bSkpOwogCkBAIC0xMzg2LDI4ICsxMzg2LDI4IEBACiAgICAgICAgIGRwMl9wdHIgPSBoYS0+YnJkOwogICAgICAgICB3cml0ZXcoZHBfb2Zmc2V0ICsgRFBNRU1fQ09NTUFORF9PRkZTRVQsCiAgICAgICAgICAgICAgICAgICAgICZkcDJfcHRyLT51LmljLmNvbW1fcXVldWVbY21kX25vXS5vZmZzZXQpOwotICAgICAgICB3cml0ZXcoKHVzaG9ydCljbWRfcHRyLT5TZXJ2aWNlLAorICAgICAgICB3cml0ZXcoKHUxNiljbWRfcHRyLT5TZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAmZHAyX3B0ci0+dS5pYy5jb21tX3F1ZXVlW2NtZF9ub10uc2Vydl9pZCk7CiAgICAgICAgIG1lbWNweV90b2lvKCZkcDJfcHRyLT51LmljLmdkdF9kcHJfY21kW2RwX29mZnNldF0sY21kX3B0cixjcF9jb3VudCk7CiAgICAgfSBlbHNlIGlmIChoYS0+dHlwZSA9PSBHRFRfUENJKSB7CiAgICAgICAgIGRwNl9wdHIgPSBoYS0+YnJkOwogICAgICAgICB3cml0ZXcoZHBfb2Zmc2V0ICsgRFBNRU1fQ09NTUFORF9PRkZTRVQsCiAgICAgICAgICAgICAgICAgICAgICZkcDZfcHRyLT51LmljLmNvbW1fcXVldWVbY21kX25vXS5vZmZzZXQpOwotICAgICAgICB3cml0ZXcoKHVzaG9ydCljbWRfcHRyLT5TZXJ2aWNlLAorICAgICAgICB3cml0ZXcoKHUxNiljbWRfcHRyLT5TZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAmZHA2X3B0ci0+dS5pYy5jb21tX3F1ZXVlW2NtZF9ub10uc2Vydl9pZCk7CiAgICAgICAgIG1lbWNweV90b2lvKCZkcDZfcHRyLT51LmljLmdkdF9kcHJfY21kW2RwX29mZnNldF0sY21kX3B0cixjcF9jb3VudCk7CiAgICAgfSBlbHNlIGlmIChoYS0+dHlwZSA9PSBHRFRfUENJTkVXKSB7CiAgICAgICAgIGRwNmNfcHRyID0gaGEtPmJyZDsKICAgICAgICAgd3JpdGV3KGRwX29mZnNldCArIERQTUVNX0NPTU1BTkRfT0ZGU0VULAogICAgICAgICAgICAgICAgICAgICAmZHA2Y19wdHItPnUuaWMuY29tbV9xdWV1ZVtjbWRfbm9dLm9mZnNldCk7Ci0gICAgICAgIHdyaXRldygodXNob3J0KWNtZF9wdHItPlNlcnZpY2UsCisgICAgICAgIHdyaXRldygodTE2KWNtZF9wdHItPlNlcnZpY2UsCiAgICAgICAgICAgICAgICAgICAgICZkcDZjX3B0ci0+dS5pYy5jb21tX3F1ZXVlW2NtZF9ub10uc2Vydl9pZCk7CiAgICAgICAgIG1lbWNweV90b2lvKCZkcDZjX3B0ci0+dS5pYy5nZHRfZHByX2NtZFtkcF9vZmZzZXRdLGNtZF9wdHIsY3BfY291bnQpOwogICAgIH0gZWxzZSBpZiAoaGEtPnR5cGUgPT0gR0RUX1BDSU1QUikgewogICAgICAgICBkcDZtX3B0ciA9IGhhLT5icmQ7CiAgICAgICAgIHdyaXRldyhkcF9vZmZzZXQgKyBEUE1FTV9DT01NQU5EX09GRlNFVCwKICAgICAgICAgICAgICAgICAgICAgJmRwNm1fcHRyLT51LmljLmNvbW1fcXVldWVbY21kX25vXS5vZmZzZXQpOwotICAgICAgICB3cml0ZXcoKHVzaG9ydCljbWRfcHRyLT5TZXJ2aWNlLAorICAgICAgICB3cml0ZXcoKHUxNiljbWRfcHRyLT5TZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAmZHA2bV9wdHItPnUuaWMuY29tbV9xdWV1ZVtjbWRfbm9dLnNlcnZfaWQpOwogICAgICAgICBtZW1jcHlfdG9pbygmZHA2bV9wdHItPnUuaWMuZ2R0X2Rwcl9jbWRbZHBfb2Zmc2V0XSxjbWRfcHRyLGNwX2NvdW50KTsKICAgICB9CkBAIC0xNDIwLDE0ICsxNDIwLDE0IEBACiAKICNpZmRlZiBHRFRIX1NUQVRJU1RJQ1MKICAgICB7Ci0gICAgICAgIHVsb25nMzIgaSxqOworICAgICAgICB1MzIgaSxqOwogICAgICAgICBmb3IgKGk9MCxqPTA7IGo8R0RUSF9NQVhDTURTOyArK2opIHsKICAgICAgICAgICAgIGlmIChoYS0+Y21kX3RhYltqXS5jbW5kICE9IFVOVVNFRF9DTU5EKQogICAgICAgICAgICAgICAgICsraTsKICAgICAgICAgfQogICAgICAgICBpZiAobWF4X2luZGV4IDwgaSkgewogICAgICAgICAgICAgbWF4X2luZGV4ID0gaTsKLSAgICAgICAgICAgIFRSQUNFMygoIkdEVDogbWF4X2luZGV4ID0gJWRcbiIsKHVzaG9ydClpKSk7CisgICAgICAgICAgICBUUkFDRTMoKCJHRFQ6IG1heF9pbmRleCA9ICVkXG4iLCh1MTYpaSkpOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCkBAIC0xNDUwLDcgKzE0NTAsNyBAQAogICAgIH0KIH0KIAotc3RhdGljIGludCBnZHRoX3dhaXQoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgaW5kZXgsIHVsb25nMzIgdGltZSkKK3N0YXRpYyBpbnQgZ2R0aF93YWl0KGdkdGhfaGFfc3RyICpoYSwgaW50IGluZGV4LCB1MzIgdGltZSkKIHsKICAgICBpbnQgYW5zd2VyX2ZvdW5kID0gRkFMU0U7CiAgICAgaW50IHdhaXRfaW5kZXggPSAwOwpAQCAtMTQ3Niw4ICsxNDc2LDggQEAKIH0KIAogCi1zdGF0aWMgaW50IGdkdGhfaW50ZXJuYWxfY21kKGdkdGhfaGFfc3RyICpoYSwgdW5jaGFyIHNlcnZpY2UsIHVzaG9ydCBvcGNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsb25nMzIgcDEsIHVsb25nNjQgcDIsIHVsb25nNjQgcDMpCitzdGF0aWMgaW50IGdkdGhfaW50ZXJuYWxfY21kKGdkdGhfaGFfc3RyICpoYSwgdTggc2VydmljZSwgdTE2IG9wY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHAxLCB1NjQgcDIsIHU2NCBwMykKIHsKICAgICByZWdpc3RlciBnZHRoX2NtZF9zdHIgKmNtZF9wdHI7CiAgICAgaW50IHJldHJpZXMsaW5kZXg7CkBAIC0xNTAxLDM1ICsxNTAxLDM1IEBACiAgICAgICAgIGlmIChzZXJ2aWNlID09IENBQ0hFU0VSVklDRSkgewogICAgICAgICAgICAgaWYgKG9wY29kZSA9PSBHRFRfSU9DVEwpIHsKICAgICAgICAgICAgICAgICBjbWRfcHRyLT51LmlvY3RsLnN1YmZ1bmMgPSBwMTsKLSAgICAgICAgICAgICAgICBjbWRfcHRyLT51LmlvY3RsLmNoYW5uZWwgPSAodWxvbmczMilwMjsKLSAgICAgICAgICAgICAgICBjbWRfcHRyLT51LmlvY3RsLnBhcmFtX3NpemUgPSAodXNob3J0KXAzOworICAgICAgICAgICAgICAgIGNtZF9wdHItPnUuaW9jdGwuY2hhbm5lbCA9ICh1MzIpcDI7CisgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5pb2N0bC5wYXJhbV9zaXplID0gKHUxNilwMzsKICAgICAgICAgICAgICAgICBjbWRfcHRyLT51LmlvY3RsLnBfcGFyYW0gPSBoYS0+c2NyYXRjaF9waHlzOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoaGEtPmNhY2hlX2ZlYXQgJiBHRFRfNjRCSVQpIHsKLSAgICAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5jYWNoZTY0LkRldmljZU5vID0gKHVzaG9ydClwMTsKKyAgICAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5jYWNoZTY0LkRldmljZU5vID0gKHUxNilwMTsKICAgICAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5jYWNoZTY0LkJsb2NrTm8gID0gcDI7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5jYWNoZS5EZXZpY2VObyA9ICh1c2hvcnQpcDE7Ci0gICAgICAgICAgICAgICAgICAgIGNtZF9wdHItPnUuY2FjaGUuQmxvY2tObyAgPSAodWxvbmczMilwMjsKKyAgICAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5jYWNoZS5EZXZpY2VObyA9ICh1MTYpcDE7CisgICAgICAgICAgICAgICAgICAgIGNtZF9wdHItPnUuY2FjaGUuQmxvY2tObyAgPSAodTMyKXAyOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChzZXJ2aWNlID09IFNDU0lSQVdTRVJWSUNFKSB7CiAgICAgICAgICAgICBpZiAoaGEtPnJhd19mZWF0ICYgR0RUXzY0QklUKSB7CiAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5yYXc2NC5kaXJlY3Rpb24gID0gcDE7Ci0gICAgICAgICAgICAgICAgY21kX3B0ci0+dS5yYXc2NC5idXMgICAgICAgID0gKHVuY2hhcilwMjsKLSAgICAgICAgICAgICAgICBjbWRfcHRyLT51LnJhdzY0LnRhcmdldCAgICAgPSAodW5jaGFyKXAzOwotICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3NjQubHVuICAgICAgICA9ICh1bmNoYXIpKHAzID4+IDgpOworICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3NjQuYnVzICAgICAgICA9ICh1OClwMjsKKyAgICAgICAgICAgICAgICBjbWRfcHRyLT51LnJhdzY0LnRhcmdldCAgICAgPSAodTgpcDM7CisgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5yYXc2NC5sdW4gICAgICAgID0gKHU4KShwMyA+PiA4KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5yYXcuZGlyZWN0aW9uICA9IHAxOwotICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3LmJ1cyAgICAgICAgPSAodW5jaGFyKXAyOwotICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3LnRhcmdldCAgICAgPSAodW5jaGFyKXAzOwotICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3Lmx1biAgICAgICAgPSAodW5jaGFyKShwMyA+PiA4KTsKKyAgICAgICAgICAgICAgICBjbWRfcHRyLT51LnJhdy5idXMgICAgICAgID0gKHU4KXAyOworICAgICAgICAgICAgICAgIGNtZF9wdHItPnUucmF3LnRhcmdldCAgICAgPSAodTgpcDM7CisgICAgICAgICAgICAgICAgY21kX3B0ci0+dS5yYXcubHVuICAgICAgICA9ICh1OCkocDMgPj4gOCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoc2VydmljZSA9PSBTQ1JFRU5TRVJWSUNFKSB7CiAgICAgICAgICAgICBpZiAob3Bjb2RlID09IEdEVF9SRUFMVElNRSkgewotICAgICAgICAgICAgICAgICoodWxvbmczMiAqKSZjbWRfcHRyLT51LnNjcmVlbi5zdS5kYXRhWzBdID0gcDE7Ci0gICAgICAgICAgICAgICAgKih1bG9uZzMyICopJmNtZF9wdHItPnUuc2NyZWVuLnN1LmRhdGFbNF0gPSAodWxvbmczMilwMjsKLSAgICAgICAgICAgICAgICAqKHVsb25nMzIgKikmY21kX3B0ci0+dS5zY3JlZW4uc3UuZGF0YVs4XSA9ICh1bG9uZzMyKXAzOworICAgICAgICAgICAgICAgICoodTMyICopJmNtZF9wdHItPnUuc2NyZWVuLnN1LmRhdGFbMF0gPSBwMTsKKyAgICAgICAgICAgICAgICAqKHUzMiAqKSZjbWRfcHRyLT51LnNjcmVlbi5zdS5kYXRhWzRdID0gKHUzMilwMjsKKyAgICAgICAgICAgICAgICAqKHUzMiAqKSZjbWRfcHRyLT51LnNjcmVlbi5zdS5kYXRhWzhdID0gKHUzMilwMzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBoYS0+Y21kX2xlbiAgICAgICAgICA9IHNpemVvZihnZHRoX2NtZF9zdHIpOwpAQCAtMTU1NSw5ICsxNTU1LDkgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgZ2R0aF9zZWFyY2hfZHJpdmVzKGdkdGhfaGFfc3RyICpoYSkKIHsKLSAgICB1c2hvcnQgY2Rldl9jbnQsIGk7CisgICAgdTE2IGNkZXZfY250LCBpOwogICAgIGludCBvazsKLSAgICB1bG9uZzMyIGJ1c19ubywgZHJ2X2NudCwgZHJ2X25vLCBqOworICAgIHUzMiBidXNfbm8sIGRydl9jbnQsIGRydl9ubywgajsKICAgICBnZHRoX2dldGNoX3N0ciAqY2huOwogICAgIGdkdGhfZHJsaXN0X3N0ciAqZHJsOwogICAgIGdkdGhfaW9jaGFuX3N0ciAqaW9jOwpAQCAtMTU3MCw4ICsxNTcwLDggQEAKICNlbmRpZgogCiAjaWZkZWYgR0RUSF9SVEMKLSAgICB1bmNoYXIgcnRjWzEyXTsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1OCBydGNbMTJdOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAjZW5kaWYgICAgIAogICAgCiAgICAgVFJBQ0UoKCJnZHRoX3NlYXJjaF9kcml2ZXMoKSBoYW51bSAlZFxuIiwgaGEtPmhhbnVtKSk7CkBAIC0xNTg0LDcgKzE1ODQsNyBAQAogICAgICAgICBpZiAob2spCiAgICAgICAgICAgICBoYS0+c2NyZWVuX2ZlYXQgPSBHRFRfNjRCSVQ7CiAgICAgfQotICAgIGlmIChmb3JjZV9kbWEzMiB8fCAoIW9rICYmIGhhLT5zdGF0dXMgPT0gKHVzaG9ydClTX05PRlVOQykpCisgICAgaWYgKGZvcmNlX2RtYTMyIHx8ICghb2sgJiYgaGEtPnN0YXR1cyA9PSAodTE2KVNfTk9GVU5DKSkKICAgICAgICAgb2sgPSBnZHRoX2ludGVybmFsX2NtZChoYSwgU0NSRUVOU0VSVklDRSwgR0RUX0lOSVQsIDAsIDAsIDApOwogICAgIGlmICghb2spIHsKICAgICAgICAgcHJpbnRrKCJHRFQtSEEgJWQ6IEluaXRpYWxpemF0aW9uIGVycm9yIHNjcmVlbiBzZXJ2aWNlIChjb2RlICVkKVxuIiwKQEAgLTE2MDksMTEgKzE2MDksMTEgQEAKICAgICAgICAgICAgIHJ0Y1tqXSA9IENNT1NfUkVBRChqKTsKICAgICB9IHdoaWxlIChydGNbMF0gIT0gQ01PU19SRUFEKDApKTsKICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwotICAgIFRSQUNFMigoImdkdGhfc2VhcmNoX2RyaXZlcygpOiBSVEM6ICV4LyV4LyV4XG4iLCoodWxvbmczMiAqKSZydGNbMF0sCi0gICAgICAgICAgICAqKHVsb25nMzIgKikmcnRjWzRdLCAqKHVsb25nMzIgKikmcnRjWzhdKSk7CisgICAgVFJBQ0UyKCgiZ2R0aF9zZWFyY2hfZHJpdmVzKCk6IFJUQzogJXgvJXgvJXhcbiIsKih1MzIgKikmcnRjWzBdLAorICAgICAgICAgICAgKih1MzIgKikmcnRjWzRdLCAqKHUzMiAqKSZydGNbOF0pKTsKICAgICAvKiAzLiBzZW5kIHRvIGNvbnRyb2xsZXIgZmlybXdhcmUgKi8KLSAgICBnZHRoX2ludGVybmFsX2NtZChoYSwgU0NSRUVOU0VSVklDRSwgR0RUX1JFQUxUSU1FLCAqKHVsb25nMzIgKikmcnRjWzBdLAotICAgICAgICAgICAgICAgICAgICAgICoodWxvbmczMiAqKSZydGNbNF0sICoodWxvbmczMiAqKSZydGNbOF0pOworICAgIGdkdGhfaW50ZXJuYWxfY21kKGhhLCBTQ1JFRU5TRVJWSUNFLCBHRFRfUkVBTFRJTUUsICoodTMyICopJnJ0Y1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAqKHUzMiAqKSZydGNbNF0sICoodTMyICopJnJ0Y1s4XSk7CiAjZW5kaWYgIAogIAogICAgIC8qIHVuZnJlZXplIGFsbCBJT3MgKi8KQEAgLTE2MjcsNyArMTYyNyw3IEBACiAgICAgICAgIGlmIChvaykKICAgICAgICAgICAgIGhhLT5jYWNoZV9mZWF0ID0gR0RUXzY0QklUOwogICAgIH0KLSAgICBpZiAoZm9yY2VfZG1hMzIgfHwgKCFvayAmJiBoYS0+c3RhdHVzID09ICh1c2hvcnQpU19OT0ZVTkMpKQorICAgIGlmIChmb3JjZV9kbWEzMiB8fCAoIW9rICYmIGhhLT5zdGF0dXMgPT0gKHUxNilTX05PRlVOQykpCiAgICAgICAgIG9rID0gZ2R0aF9pbnRlcm5hbF9jbWQoaGEsIENBQ0hFU0VSVklDRSwgR0RUX0lOSVQsIExJTlVYX09TLCAwLCAwKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIHByaW50aygiR0RULUhBICVkOiBJbml0aWFsaXphdGlvbiBlcnJvciBjYWNoZSBzZXJ2aWNlIChjb2RlICVkKVxuIiwKQEAgLTE2MzUsNyArMTYzNSw3IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBUUkFDRTIoKCJnZHRoX3NlYXJjaF9kcml2ZXMoKTogQ0FDSEVTRVJWSUNFIGluaXRpYWxpemVkXG4iKSk7Ci0gICAgY2Rldl9jbnQgPSAodXNob3J0KWhhLT5pbmZvOworICAgIGNkZXZfY250ID0gKHUxNiloYS0+aW5mbzsKICAgICBoYS0+ZndfdmVycyA9IGhhLT5zZXJ2aWNlOwogCiAjaWZkZWYgSU5UX0NPQUwKQEAgLTE2NDQsNyArMTY0NCw3IEBACiAgICAgICAgIHBtb2QgPSAoZ2R0aF9wZXJmX21vZGVzICopaGEtPnBzY3JhdGNoOwogICAgICAgICBwbW9kLT52ZXJzaW9uICAgICAgICAgID0gMTsKICAgICAgICAgcG1vZC0+c3RfbW9kZSAgICAgICAgICA9IDE7ICAgIC8qIGVuYWJsZSBvbmUgc3RhdHVzIGJ1ZmZlciAqLwotICAgICAgICAqKCh1bG9uZzY0ICopJnBtb2QtPnN0X2J1ZmZfYWRkcjEpID0gaGEtPmNvYWxfc3RhdF9waHlzOworICAgICAgICAqKCh1NjQgKikmcG1vZC0+c3RfYnVmZl9hZGRyMSkgPSBoYS0+Y29hbF9zdGF0X3BoeXM7CiAgICAgICAgIHBtb2QtPnN0X2J1ZmZfaW5keDEgICAgPSBDT0FMSU5ERVg7CiAgICAgICAgIHBtb2QtPnN0X2J1ZmZfYWRkcjIgICAgPSAwOwogICAgICAgICBwbW9kLT5zdF9idWZmX3VfYWRkcjIgID0gMDsKQEAgLTE3MDUsNyArMTcwNSw3IEBACiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaGEtPmJ1c19pZFtidXNfbm9dID0gMHhmZjsKICAgICAgICAgfSAgICAgICAKLSAgICAgICAgaGEtPmJ1c19jbnQgPSAodW5jaGFyKWJ1c19ubzsKKyAgICAgICAgaGEtPmJ1c19jbnQgPSAodTgpYnVzX25vOwogICAgIH0KICAgICBUUkFDRTIoKCJnZHRoX3NlYXJjaF9kcml2ZXMoKSAlZCBjaGFubmVsc1xuIixoYS0+YnVzX2NudCkpOwogCkBAIC0xNzg5LDEyICsxNzg5LDEyIEBACiAKICAgICAgICAgLyogbG9naWNhbCBkcml2ZXMgKi8KICAgICAgICAgaWYgKGdkdGhfaW50ZXJuYWxfY21kKGhhLCBDQUNIRVNFUlZJQ0UsIEdEVF9JT0NUTCwgQ0FDSEVfRFJWX0NOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVkFMSURfQ0hBTk5FTCxzaXplb2YodWxvbmczMikpKSB7Ci0gICAgICAgICAgICBkcnZfY250ID0gKih1bG9uZzMyICopaGEtPnBzY3JhdGNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9DSEFOTkVMLHNpemVvZih1MzIpKSkgeworICAgICAgICAgICAgZHJ2X2NudCA9ICoodTMyICopaGEtPnBzY3JhdGNoOwogICAgICAgICAgICAgaWYgKGdkdGhfaW50ZXJuYWxfY21kKGhhLCBDQUNIRVNFUlZJQ0UsIEdEVF9JT0NUTCwgQ0FDSEVfRFJWX0xJU1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9DSEFOTkVMLGRydl9jbnQgKiBzaXplb2YodWxvbmczMikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9DSEFOTkVMLGRydl9jbnQgKiBzaXplb2YodTMyKSkpIHsKICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZHJ2X2NudDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRydl9ubyA9ICgodWxvbmczMiAqKWhhLT5wc2NyYXRjaClbal07CisgICAgICAgICAgICAgICAgICAgIGRydl9ubyA9ICgodTMyICopaGEtPnBzY3JhdGNoKVtqXTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRydl9ubyA8IE1BWF9MRFJJVkVTKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBoYS0+aGRyW2Rydl9ub10uaXNfbG9nZHJ2ID0gVFJVRTsKICAgICAgICAgICAgICAgICAgICAgICAgIFRSQUNFMigoIkRyaXZlICVkIGlzIGxvZy4gZHJpdmVcbiIsZHJ2X25vKSk7CkBAIC0xODM4LDcgKzE4MzgsNyBAQAogICAgICAgICBpZiAob2spCiAgICAgICAgICAgICBoYS0+cmF3X2ZlYXQgPSBHRFRfNjRCSVQ7CiAgICAgfQotICAgIGlmIChmb3JjZV9kbWEzMiB8fCAoIW9rICYmIGhhLT5zdGF0dXMgPT0gKHVzaG9ydClTX05PRlVOQykpCisgICAgaWYgKGZvcmNlX2RtYTMyIHx8ICghb2sgJiYgaGEtPnN0YXR1cyA9PSAodTE2KVNfTk9GVU5DKSkKICAgICAgICAgb2sgPSBnZHRoX2ludGVybmFsX2NtZChoYSwgU0NTSVJBV1NFUlZJQ0UsIEdEVF9JTklULCAwLCAwLCAwKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIHByaW50aygiR0RULUhBICVkOiBJbml0aWFsaXphdGlvbiBlcnJvciByYXcgc2VydmljZSAoY29kZSAlZClcbiIsCkBAIC0xODU0LDcgKzE4NTQsNyBAQAogICAgICAgICBpZiAoZ2R0aF9pbnRlcm5hbF9jbWQoaGEsIFNDU0lSQVdTRVJWSUNFLCBHRFRfR0VUX0ZFQVQsIDAsIDAsIDApKSB7CiAgICAgICAgICAgICBUUkFDRTIoKCJnZHRoX3NlYXJjaF9kcigpOiBnZXQgZmVhdCBSQVdTRVJWSUNFICVkXG4iLAogICAgICAgICAgICAgICAgICAgICBoYS0+aW5mbykpOwotICAgICAgICAgICAgaGEtPnJhd19mZWF0IHw9ICh1c2hvcnQpaGEtPmluZm87CisgICAgICAgICAgICBoYS0+cmF3X2ZlYXQgfD0gKHUxNiloYS0+aW5mbzsKICAgICAgICAgfQogICAgIH0gCiAKQEAgLTE4NjUsNyArMTg2NSw3IEBACiAgICAgICAgIGlmIChnZHRoX2ludGVybmFsX2NtZChoYSwgQ0FDSEVTRVJWSUNFLCBHRFRfR0VUX0ZFQVQsIDAsIDAsIDApKSB7CiAgICAgICAgICAgICBUUkFDRTIoKCJnZHRoX3NlYXJjaF9kcigpOiBnZXQgZmVhdCBDQUNIRVNFUlYuICVkXG4iLAogICAgICAgICAgICAgICAgICAgICBoYS0+aW5mbykpOwotICAgICAgICAgICAgaGEtPmNhY2hlX2ZlYXQgfD0gKHVzaG9ydCloYS0+aW5mbzsKKyAgICAgICAgICAgIGhhLT5jYWNoZV9mZWF0IHw9ICh1MTYpaGEtPmluZm87CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE5MjMsOSArMTkyMyw5IEBACiAgICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgZ2R0aF9hbmFseXNlX2hkcml2ZShnZHRoX2hhX3N0ciAqaGEsIHVzaG9ydCBoZHJpdmUpCitzdGF0aWMgaW50IGdkdGhfYW5hbHlzZV9oZHJpdmUoZ2R0aF9oYV9zdHIgKmhhLCB1MTYgaGRyaXZlKQogewotICAgIHVsb25nMzIgZHJ2X2N5bHM7CisgICAgdTMyIGRydl9jeWxzOwogICAgIGludCBkcnZfaGRzLCBkcnZfc2VjczsKIAogICAgIFRSQUNFKCgiZ2R0aF9hbmFseXNlX2hkcml2ZSgpIGhhbnVtICVkIGRyaXZlICVkXG4iLCBoYS0+aGFudW0sIGhkcml2ZSkpOwpAQCAtMTk0NCwxNyArMTk0NCwxNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIGRydl9oZHMgPSBoYS0+aW5mbzIgJiAweGZmOwogICAgICAgICBkcnZfc2VjcyA9IChoYS0+aW5mbzIgPj4gOCkgJiAweGZmOwotICAgICAgICBkcnZfY3lscyA9ICh1bG9uZzMyKWhhLT5oZHJbaGRyaXZlXS5zaXplIC8gZHJ2X2hkcyAvIGRydl9zZWNzOworICAgICAgICBkcnZfY3lscyA9ICh1MzIpaGEtPmhkcltoZHJpdmVdLnNpemUgLyBkcnZfaGRzIC8gZHJ2X3NlY3M7CiAgICAgfQotICAgIGhhLT5oZHJbaGRyaXZlXS5oZWFkcyA9ICh1bmNoYXIpZHJ2X2hkczsKLSAgICBoYS0+aGRyW2hkcml2ZV0uc2VjcyAgPSAodW5jaGFyKWRydl9zZWNzOworICAgIGhhLT5oZHJbaGRyaXZlXS5oZWFkcyA9ICh1OClkcnZfaGRzOworICAgIGhhLT5oZHJbaGRyaXZlXS5zZWNzICA9ICh1OClkcnZfc2VjczsKICAgICAvKiByb3VuZCBzaXplICovCiAgICAgaGEtPmhkcltoZHJpdmVdLnNpemUgID0gZHJ2X2N5bHMgKiBkcnZfaGRzICogZHJ2X3NlY3M7CiAgICAgCiAgICAgaWYgKGhhLT5jYWNoZV9mZWF0ICYgR0RUXzY0QklUKSB7CiAgICAgICAgIGlmIChnZHRoX2ludGVybmFsX2NtZChoYSwgQ0FDSEVTRVJWSUNFLCBHRFRfWF9JTkZPLCBoZHJpdmUsIDAsIDApCiAgICAgICAgICAgICAmJiBoYS0+aW5mbzIgIT0gMCkgewotICAgICAgICAgICAgaGEtPmhkcltoZHJpdmVdLnNpemUgPSAoKHVsb25nNjQpaGEtPmluZm8yIDw8IDMyKSB8IGhhLT5pbmZvOworICAgICAgICAgICAgaGEtPmhkcltoZHJpdmVdLnNpemUgPSAoKHU2NCloYS0+aW5mbzIgPDwgMzIpIHwgaGEtPmluZm87CiAgICAgICAgIH0KICAgICB9CiAgICAgVFJBQ0UyKCgiZ2R0aF9zZWFyY2hfZHIoKSBjZHIuICVkIHNpemUgJWQgaGRzICVkIHNjcyAlZFxuIiwKQEAgLTE5NjQsNyArMTk2NCw3IEBACiAgICAgaWYgKGdkdGhfaW50ZXJuYWxfY21kKGhhLCBDQUNIRVNFUlZJQ0UsIEdEVF9ERVZUWVBFLCBoZHJpdmUsIDAsIDApKSB7CiAgICAgICAgIFRSQUNFMigoImdkdGhfc2VhcmNoX2RyKCkgY2FjaGUgZHJpdmUgJWQgZGV2dHlwZSAlZFxuIiwKICAgICAgICAgICAgICAgICBoZHJpdmUsaGEtPmluZm8pKTsKLSAgICAgICAgaGEtPmhkcltoZHJpdmVdLmRldnR5cGUgPSAodXNob3J0KWhhLT5pbmZvOworICAgICAgICBoYS0+aGRyW2hkcml2ZV0uZGV2dHlwZSA9ICh1MTYpaGEtPmluZm87CiAgICAgfQogCiAgICAgLyogY2x1c3RlciBpbmZvICovCkBAIC0xOTcyLDE0ICsxOTcyLDE0IEBACiAgICAgICAgIFRSQUNFMigoImdkdGhfc2VhcmNoX2RyKCkgY2FjaGUgZHJpdmUgJWQgY2x1c3RlciBpbmZvICVkXG4iLAogICAgICAgICAgICAgICAgIGhkcml2ZSxoYS0+aW5mbykpOwogICAgICAgICBpZiAoIXNoYXJlZF9hY2Nlc3MpCi0gICAgICAgICAgICBoYS0+aGRyW2hkcml2ZV0uY2x1c3Rlcl90eXBlID0gKHVuY2hhciloYS0+aW5mbzsKKyAgICAgICAgICAgIGhhLT5oZHJbaGRyaXZlXS5jbHVzdGVyX3R5cGUgPSAodTgpaGEtPmluZm87CiAgICAgfQogCiAgICAgLyogUi9XIGF0dHJpYnV0ZXMgKi8KICAgICBpZiAoZ2R0aF9pbnRlcm5hbF9jbWQoaGEsIENBQ0hFU0VSVklDRSwgR0RUX1JXX0FUVFJJQlMsIGhkcml2ZSwgMCwgMCkpIHsKICAgICAgICAgVFJBQ0UyKCgiZ2R0aF9zZWFyY2hfZHIoKSBjYWNoZSBkcml2ZSAlZCByL3cgYXR0cmliLiAlZFxuIiwKICAgICAgICAgICAgICAgICBoZHJpdmUsaGEtPmluZm8pKTsKLSAgICAgICAgaGEtPmhkcltoZHJpdmVdLnJ3X2F0dHJpYnMgPSAodW5jaGFyKWhhLT5pbmZvOworICAgICAgICBoYS0+aGRyW2hkcml2ZV0ucndfYXR0cmlicyA9ICh1OCloYS0+aW5mbzsKICAgICB9CiAKICAgICByZXR1cm4gMTsKQEAgLTE5ODgsMTIgKzE5ODgsMTIgQEAKIAogLyogY29tbWFuZCBxdWV1ZWluZy9zZW5kaW5nIGZ1bmN0aW9ucyAqLwogCi1zdGF0aWMgdm9pZCBnZHRoX3B1dHEoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdW5jaGFyIHByaW9yaXR5KQorc3RhdGljIHZvaWQgZ2R0aF9wdXRxKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsIHU4IHByaW9yaXR5KQogewogICAgIHN0cnVjdCBnZHRoX2NtbmRpbmZvICpjbW5kaW5mbyA9IGdkdGhfY21uZF9wcml2KHNjcCk7CiAgICAgcmVnaXN0ZXIgU2NzaV9DbW5kICpwc2NwOwogICAgIHJlZ2lzdGVyIFNjc2lfQ21uZCAqbnNjcDsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAgICAgVFJBQ0UoKCJnZHRoX3B1dHEoKSBwcmlvcml0eSAlZFxuIixwcmlvcml0eSkpOwogICAgIHNwaW5fbG9ja19pcnFzYXZlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKQEAgLTIwMjMsNyArMjAyMyw3IEBACiAgICAgICAgICsrZmxhZ3M7CiAgICAgaWYgKG1heF9ycSA8IGZsYWdzKSB7CiAgICAgICAgIG1heF9ycSA9IGZsYWdzOwotICAgICAgICBUUkFDRTMoKCJHRFQ6IG1heF9ycSA9ICVkXG4iLCh1c2hvcnQpbWF4X3JxKSk7CisgICAgICAgIFRSQUNFMygoIkdEVDogbWF4X3JxID0gJWRcbiIsKHUxNiltYXhfcnEpKTsKICAgICB9CiAjZW5kaWYKIH0KQEAgLTIwMzIsOSArMjAzMiw5IEBACiB7CiAgICAgcmVnaXN0ZXIgU2NzaV9DbW5kICpwc2NwOwogICAgIHJlZ2lzdGVyIFNjc2lfQ21uZCAqbnNjcDsKLSAgICB1bmNoYXIgYiwgdCwgbCwgZmlyc3R0aW1lOwotICAgIHVuY2hhciB0aGlzX2NtZCwgbmV4dF9jbWQ7Ci0gICAgdWxvbmcgZmxhZ3MgPSAwOworICAgIHU4IGIsIHQsIGwsIGZpcnN0dGltZTsKKyAgICB1OCB0aGlzX2NtZCwgbmV4dF9jbWQ7CisgICAgdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAgICAgaW50IGNtZF9pbmRleDsKIAogICAgIFRSQUNFKCgiZ2R0aF9uZXh0KCkgaGFudW0gJWRcbiIsIGhhLT5oYW51bSkpOwpAQCAtMjI4MiwyMCArMjI4MiwyMCBAQAogICogYnVmZmVycywga21hcF9hdG9taWMoKSBhcyBuZWVkZWQuCiAgKi8KIHN0YXRpYyB2b2lkIGdkdGhfY29weV9pbnRlcm5hbF9kYXRhKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHVzaG9ydCBjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlciwgdTE2IGNvdW50KQogewotICAgIHVzaG9ydCBjcGNvdW50LGksIG1heF9zZyA9IHNjc2lfc2dfY291bnQoc2NwKTsKLSAgICB1c2hvcnQgY3BzdW0sY3Bub3c7CisgICAgdTE2IGNwY291bnQsaSwgbWF4X3NnID0gc2NzaV9zZ19jb3VudChzY3ApOworICAgIHUxNiBjcHN1bSxjcG5vdzsKICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNsOwogICAgIGNoYXIgKmFkZHJlc3M7CiAKLSAgICBjcGNvdW50ID0gbWluX3QodXNob3J0LCBjb3VudCwgc2NzaV9idWZmbGVuKHNjcCkpOworICAgIGNwY291bnQgPSBtaW5fdCh1MTYsIGNvdW50LCBzY3NpX2J1ZmZsZW4oc2NwKSk7CiAKICAgICBpZiAoY3Bjb3VudCkgewogICAgICAgICBjcHN1bT0wOwogICAgICAgICBzY3NpX2Zvcl9lYWNoX3NnKHNjcCwgc2wsIG1heF9zZywgaSkgewogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgICAgICAgIGNwbm93ID0gKHVzaG9ydClzbC0+bGVuZ3RoOworICAgICAgICAgICAgY3Bub3cgPSAodTE2KXNsLT5sZW5ndGg7CiAgICAgICAgICAgICBUUkFDRSgoImNvcHlfaW50ZXJuYWwoKSBub3cgJWQgc3VtICVkIGNvdW50ICVkICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjcG5vdywgY3BzdW0sIGNwY291bnQsIHNjc2lfYnVmZmxlbihzY3ApKSk7CiAgICAgICAgICAgICBpZiAoY3BzdW0rY3Bub3cgPiBjcGNvdW50KSAKQEAgLTIzMjUsNyArMjMyNSw3IEBACiAKIHN0YXRpYyBpbnQgZ2R0aF9pbnRlcm5hbF9jYWNoZV9jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCkKIHsKLSAgICB1bmNoYXIgdDsKKyAgICB1OCB0OwogICAgIGdkdGhfaW5xX2RhdGEgaW5xOwogICAgIGdkdGhfcmRjYXBfZGF0YSByZGM7CiAgICAgZ2R0aF9zZW5zZV9kYXRhIHNkOwpAQCAtMjM4OSw3ICsyMzg5LDcgQEAKIAogICAgICAgY2FzZSBSRUFEX0NBUEFDSVRZOgogICAgICAgICBUUkFDRTIoKCJSZWFkIGNhcGFjaXR5IGhkcml2ZSAlZFxuIix0KSk7Ci0gICAgICAgIGlmIChoYS0+aGRyW3RdLnNpemUgPiAodWxvbmc2NCkweGZmZmZmZmZmKQorICAgICAgICBpZiAoaGEtPmhkclt0XS5zaXplID4gKHU2NCkweGZmZmZmZmZmKQogICAgICAgICAgICAgcmRjLmxhc3RfYmxvY2tfbm8gPSAweGZmZmZmZmZmOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZGMubGFzdF9ibG9ja19ubyA9IGNwdV90b19iZTMyKGhhLT5oZHJbdF0uc2l6ZS0xKTsKQEAgLTI0MjUsMTIgKzI0MjUsMTIgQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZHRoX2ZpbGxfY2FjaGVfY21kKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsIHVzaG9ydCBoZHJpdmUpCitzdGF0aWMgaW50IGdkdGhfZmlsbF9jYWNoZV9jbWQoZ2R0aF9oYV9zdHIgKmhhLCBTY3NpX0NtbmQgKnNjcCwgdTE2IGhkcml2ZSkKIHsKICAgICByZWdpc3RlciBnZHRoX2NtZF9zdHIgKmNtZHA7CiAgICAgc3RydWN0IGdkdGhfY21uZGluZm8gKmNtbmRpbmZvID0gZ2R0aF9jbW5kX3ByaXYoc2NwKTsKLSAgICB1bG9uZzMyIGNudCwgYmxvY2tjbnQ7Ci0gICAgdWxvbmc2NCBubywgYmxvY2tubzsKKyAgICB1MzIgY250LCBibG9ja2NudDsKKyAgICB1NjQgbm8sIGJsb2Nrbm87CiAgICAgaW50IGksIGNtZF9pbmRleCwgcmVhZF93cml0ZSwgc2djbnQsIG1vZGU2NDsKIAogICAgIGNtZHAgPSBoYS0+cGNjYjsKQEAgLTI0OTgsMTcgKzI0OTgsMTcgQEAKIAogICAgIGlmIChyZWFkX3dyaXRlKSB7CiAgICAgICAgIGlmIChzY3AtPmNtZF9sZW4gPT0gMTYpIHsKLSAgICAgICAgICAgIG1lbWNweSgmbm8sICZzY3AtPmNtbmRbMl0sIHNpemVvZih1bG9uZzY0KSk7CisgICAgICAgICAgICBtZW1jcHkoJm5vLCAmc2NwLT5jbW5kWzJdLCBzaXplb2YodTY0KSk7CiAgICAgICAgICAgICBibG9ja25vID0gYmU2NF90b19jcHUobm8pOwotICAgICAgICAgICAgbWVtY3B5KCZjbnQsICZzY3AtPmNtbmRbMTBdLCBzaXplb2YodWxvbmczMikpOworICAgICAgICAgICAgbWVtY3B5KCZjbnQsICZzY3AtPmNtbmRbMTBdLCBzaXplb2YodTMyKSk7CiAgICAgICAgICAgICBibG9ja2NudCA9IGJlMzJfdG9fY3B1KGNudCk7CiAgICAgICAgIH0gZWxzZSBpZiAoc2NwLT5jbWRfbGVuID09IDEwKSB7Ci0gICAgICAgICAgICBtZW1jcHkoJm5vLCAmc2NwLT5jbW5kWzJdLCBzaXplb2YodWxvbmczMikpOworICAgICAgICAgICAgbWVtY3B5KCZubywgJnNjcC0+Y21uZFsyXSwgc2l6ZW9mKHUzMikpOwogICAgICAgICAgICAgYmxvY2tubyA9IGJlMzJfdG9fY3B1KG5vKTsKLSAgICAgICAgICAgIG1lbWNweSgmY250LCAmc2NwLT5jbW5kWzddLCBzaXplb2YodXNob3J0KSk7CisgICAgICAgICAgICBtZW1jcHkoJmNudCwgJnNjcC0+Y21uZFs3XSwgc2l6ZW9mKHUxNikpOwogICAgICAgICAgICAgYmxvY2tjbnQgPSBiZTE2X3RvX2NwdShjbnQpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWVtY3B5KCZubywgJnNjcC0+Y21uZFswXSwgc2l6ZW9mKHVsb25nMzIpKTsKKyAgICAgICAgICAgIG1lbWNweSgmbm8sICZzY3AtPmNtbmRbMF0sIHNpemVvZih1MzIpKTsKICAgICAgICAgICAgIGJsb2Nrbm8gPSBiZTMyX3RvX2NwdShubykgJiAweDAwMWZmZmZmVUw7CiAgICAgICAgICAgICBibG9ja2NudD0gc2NwLT5jbW5kWzRdPT0wID8gMHgxMDAgOiBzY3AtPmNtbmRbNF07CiAgICAgICAgIH0KQEAgLTI1MTYsNyArMjUxNiw3IEBACiAgICAgICAgICAgICBjbWRwLT51LmNhY2hlNjQuQmxvY2tObyA9IGJsb2Nrbm87CiAgICAgICAgICAgICBjbWRwLT51LmNhY2hlNjQuQmxvY2tDbnQgPSBibG9ja2NudDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNtZHAtPnUuY2FjaGUuQmxvY2tObyA9ICh1bG9uZzMyKWJsb2Nrbm87CisgICAgICAgICAgICBjbWRwLT51LmNhY2hlLkJsb2NrTm8gPSAodTMyKWJsb2Nrbm87CiAgICAgICAgICAgICBjbWRwLT51LmNhY2hlLkJsb2NrQ250ID0gYmxvY2tjbnQ7CiAgICAgICAgIH0KIApAQCAtMjUyOCwxMiArMjUyOCwxMiBAQAogICAgICAgICAgICAgaWYgKG1vZGU2NCkgewogICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2w7CiAKLSAgICAgICAgICAgICAgICBjbWRwLT51LmNhY2hlNjQuRGVzdEFkZHI9ICh1bG9uZzY0KS0xOworICAgICAgICAgICAgICAgIGNtZHAtPnUuY2FjaGU2NC5EZXN0QWRkcj0gKHU2NCktMTsKICAgICAgICAgICAgICAgICBjbWRwLT51LmNhY2hlNjQuc2dfY2FueiA9IHNnY250OwogICAgICAgICAgICAgICAgIHNjc2lfZm9yX2VhY2hfc2coc2NwLCBzbCwgc2djbnQsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgY21kcC0+dS5jYWNoZTY0LnNnX2xzdFtpXS5zZ19wdHIgPSBzZ19kbWFfYWRkcmVzcyhzbCk7CiAjaWZkZWYgR0RUSF9ETUFfU1RBVElTVElDUwotICAgICAgICAgICAgICAgICAgICBpZiAoY21kcC0+dS5jYWNoZTY0LnNnX2xzdFtpXS5zZ19wdHIgPiAodWxvbmc2NCkweGZmZmZmZmZmKQorICAgICAgICAgICAgICAgICAgICBpZiAoY21kcC0+dS5jYWNoZTY0LnNnX2xzdFtpXS5zZ19wdHIgPiAodTY0KTB4ZmZmZmZmZmYpCiAgICAgICAgICAgICAgICAgICAgICAgICBoYS0+ZG1hNjRfY250Kys7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGhhLT5kbWEzMl9jbnQrKzsKQEAgLTI1NTUsOCArMjU1NSw4IEBACiAgICAgICAgICAgICB9CiAKICNpZmRlZiBHRFRIX1NUQVRJU1RJQ1MKLSAgICAgICAgICAgIGlmIChtYXhfc2cgPCAodWxvbmczMilzZ2NudCkgewotICAgICAgICAgICAgICAgIG1heF9zZyA9ICh1bG9uZzMyKXNnY250OworICAgICAgICAgICAgaWYgKG1heF9zZyA8ICh1MzIpc2djbnQpIHsKKyAgICAgICAgICAgICAgICBtYXhfc2cgPSAodTMyKXNnY250OwogICAgICAgICAgICAgICAgIFRSQUNFMygoIkdEVDogbWF4X3NnID0gJWRcbiIsbWF4X3NnKSk7CiAgICAgICAgICAgICB9CiAjZW5kaWYKQEAgLTI1NzIsNyArMjU3Miw3IEBACiAgICAgICAgIFRSQUNFKCgiY2FjaGUgY21kOiBjbWQgJWQgYmxvY2tuby4gJWQsIGJsb2NrY250ICVkXG4iLAogICAgICAgICAgICAgICAgY21kcC0+T3BDb2RlLGNtZHAtPnUuY2FjaGU2NC5CbG9ja05vLGNtZHAtPnUuY2FjaGU2NC5CbG9ja0NudCkpOwogICAgICAgICBoYS0+Y21kX2xlbiA9IEdEVE9GRlNPRihnZHRoX2NtZF9zdHIsdS5jYWNoZTY0LnNnX2xzdCkgKwotICAgICAgICAgICAgKHVzaG9ydCljbWRwLT51LmNhY2hlNjQuc2dfY2FueiAqIHNpemVvZihnZHRoX3NnNjRfc3RyKTsKKyAgICAgICAgICAgICh1MTYpY21kcC0+dS5jYWNoZTY0LnNnX2NhbnogKiBzaXplb2YoZ2R0aF9zZzY0X3N0cik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgVFJBQ0UoKCJjYWNoZSBjbWQ6IGFkZHIuICV4IHNnYW56ICV4IHNncHRyMCAleCBzZ2xlbjAgJXhcbiIsCiAgICAgICAgICAgICAgICBjbWRwLT51LmNhY2hlLkRlc3RBZGRyLGNtZHAtPnUuY2FjaGUuc2dfY2FueiwKQEAgLTI1ODEsNyArMjU4MSw3IEBACiAgICAgICAgIFRSQUNFKCgiY2FjaGUgY21kOiBjbWQgJWQgYmxvY2tuby4gJWQsIGJsb2NrY250ICVkXG4iLAogICAgICAgICAgICAgICAgY21kcC0+T3BDb2RlLGNtZHAtPnUuY2FjaGUuQmxvY2tObyxjbWRwLT51LmNhY2hlLkJsb2NrQ250KSk7CiAgICAgICAgIGhhLT5jbWRfbGVuID0gR0RUT0ZGU09GKGdkdGhfY21kX3N0cix1LmNhY2hlLnNnX2xzdCkgKwotICAgICAgICAgICAgKHVzaG9ydCljbWRwLT51LmNhY2hlLnNnX2NhbnogKiBzaXplb2YoZ2R0aF9zZ19zdHIpOworICAgICAgICAgICAgKHUxNiljbWRwLT51LmNhY2hlLnNnX2NhbnogKiBzaXplb2YoZ2R0aF9zZ19zdHIpOwogICAgIH0KICAgICBpZiAoaGEtPmNtZF9sZW4gJiAzKQogICAgICAgICBoYS0+Y21kX2xlbiArPSAoNCAtIChoYS0+Y21kX2xlbiAmIDMpKTsKQEAgLTI2MDAsMTUgKzI2MDAsMTUgQEAKICAgICByZXR1cm4gY21kX2luZGV4OwogfQogCi1zdGF0aWMgaW50IGdkdGhfZmlsbF9yYXdfY21kKGdkdGhfaGFfc3RyICpoYSwgU2NzaV9DbW5kICpzY3AsIHVuY2hhciBiKQorc3RhdGljIGludCBnZHRoX2ZpbGxfcmF3X2NtZChnZHRoX2hhX3N0ciAqaGEsIFNjc2lfQ21uZCAqc2NwLCB1OCBiKQogewogICAgIHJlZ2lzdGVyIGdkdGhfY21kX3N0ciAqY21kcDsKLSAgICB1c2hvcnQgaTsKKyAgICB1MTYgaTsKICAgICBkbWFfYWRkcl90IHNlbnNlX3BhZGRyOwogICAgIGludCBjbWRfaW5kZXgsIHNnY250LCBtb2RlNjQ7Ci0gICAgdW5jaGFyIHQsbDsKKyAgICB1OCB0LGw7CiAgICAgc3RydWN0IHBhZ2UgKnBhZ2U7Ci0gICAgdWxvbmcgb2Zmc2V0OworICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogICAgIHN0cnVjdCBnZHRoX2NtbmRpbmZvICpjbW5kaW5mbzsKIAogICAgIHQgPSBzY3AtPmRldmljZS0+aWQ7CkBAIC0yNjU0LDcgKzI2NTQsNyBAQAogCiAgICAgfSBlbHNlIHsKICAgICAgICAgcGFnZSA9IHZpcnRfdG9fcGFnZShzY3AtPnNlbnNlX2J1ZmZlcik7Ci0gICAgICAgIG9mZnNldCA9ICh1bG9uZylzY3AtPnNlbnNlX2J1ZmZlciAmIH5QQUdFX01BU0s7CisgICAgICAgIG9mZnNldCA9ICh1bnNpZ25lZCBsb25nKXNjcC0+c2Vuc2VfYnVmZmVyICYgflBBR0VfTUFTSzsKICAgICAgICAgc2Vuc2VfcGFkZHIgPSBwY2lfbWFwX3BhZ2UoaGEtPnBkZXYscGFnZSxvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LFBDSV9ETUFfRlJPTURFVklDRSk7CiAKQEAgLTI3MDMsMTIgKzI3MDMsMTIgQEAKICAgICAgICAgICAgIGlmIChtb2RlNjQpIHsKICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNsOwogCi0gICAgICAgICAgICAgICAgY21kcC0+dS5yYXc2NC5zZGF0YSA9ICh1bG9uZzY0KS0xOworICAgICAgICAgICAgICAgIGNtZHAtPnUucmF3NjQuc2RhdGEgPSAodTY0KS0xOwogICAgICAgICAgICAgICAgIGNtZHAtPnUucmF3NjQuc2dfcmFueiA9IHNnY250OwogICAgICAgICAgICAgICAgIHNjc2lfZm9yX2VhY2hfc2coc2NwLCBzbCwgc2djbnQsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgY21kcC0+dS5yYXc2NC5zZ19sc3RbaV0uc2dfcHRyID0gc2dfZG1hX2FkZHJlc3Moc2wpOwogI2lmZGVmIEdEVEhfRE1BX1NUQVRJU1RJQ1MKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNtZHAtPnUucmF3NjQuc2dfbHN0W2ldLnNnX3B0ciA+ICh1bG9uZzY0KTB4ZmZmZmZmZmYpCisgICAgICAgICAgICAgICAgICAgIGlmIChjbWRwLT51LnJhdzY0LnNnX2xzdFtpXS5zZ19wdHIgPiAodTY0KTB4ZmZmZmZmZmYpCiAgICAgICAgICAgICAgICAgICAgICAgICBoYS0+ZG1hNjRfY250Kys7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGhhLT5kbWEzMl9jbnQrKzsKQEAgLTI3NDQsNyArMjc0NCw3IEBACiAgICAgICAgICAgICAgICAgICAgY21kcC0+dS5yYXc2NC5zZ19sc3RbMF0uc2dfbGVuKSk7CiAgICAgICAgICAgICAvKiBldmFsdWF0ZSBjb21tYW5kIHNpemUgKi8KICAgICAgICAgICAgIGhhLT5jbWRfbGVuID0gR0RUT0ZGU09GKGdkdGhfY21kX3N0cix1LnJhdzY0LnNnX2xzdCkgKwotICAgICAgICAgICAgICAgICh1c2hvcnQpY21kcC0+dS5yYXc2NC5zZ19yYW56ICogc2l6ZW9mKGdkdGhfc2c2NF9zdHIpOworICAgICAgICAgICAgICAgICh1MTYpY21kcC0+dS5yYXc2NC5zZ19yYW56ICogc2l6ZW9mKGdkdGhfc2c2NF9zdHIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgVFJBQ0UoKCJyYXcgY21kOiBhZGRyLiAleCBzZ2FueiAleCBzZ3B0cjAgJXggc2dsZW4wICV4XG4iLAogICAgICAgICAgICAgICAgICAgIGNtZHAtPnUucmF3LnNkYXRhLGNtZHAtPnUucmF3LnNnX3JhbnosCkBAIC0yNzUyLDcgKzI3NTIsNyBAQAogICAgICAgICAgICAgICAgICAgIGNtZHAtPnUucmF3LnNnX2xzdFswXS5zZ19sZW4pKTsKICAgICAgICAgICAgIC8qIGV2YWx1YXRlIGNvbW1hbmQgc2l6ZSAqLwogICAgICAgICAgICAgaGEtPmNtZF9sZW4gPSBHRFRPRkZTT0YoZ2R0aF9jbWRfc3RyLHUucmF3LnNnX2xzdCkgKwotICAgICAgICAgICAgICAgICh1c2hvcnQpY21kcC0+dS5yYXcuc2dfcmFueiAqIHNpemVvZihnZHRoX3NnX3N0cik7CisgICAgICAgICAgICAgICAgKHUxNiljbWRwLT51LnJhdy5zZ19yYW56ICogc2l6ZW9mKGdkdGhfc2dfc3RyKTsKICAgICAgICAgfQogICAgIH0KICAgICAvKiBjaGVjayBzcGFjZSAqLwpAQCAtMjgwMiw3ICsyODAyLDcgQEAKICAgICBpZiAoY21kcC0+T3BDb2RlID09IEdEVF9JT0NUTCkgewogICAgICAgICBUUkFDRTIoKCJJT0NUTFxuIikpOwogICAgICAgICBoYS0+Y21kX2xlbiA9IAotICAgICAgICAgICAgR0RUT0ZGU09GKGdkdGhfY21kX3N0cix1LmlvY3RsLnBfcGFyYW0pICsgc2l6ZW9mKHVsb25nNjQpOworICAgICAgICAgICAgR0RUT0ZGU09GKGdkdGhfY21kX3N0cix1LmlvY3RsLnBfcGFyYW0pICsgc2l6ZW9mKHU2NCk7CiAgICAgfSBlbHNlIGlmIChjbWRwLT5TZXJ2aWNlID09IENBQ0hFU0VSVklDRSkgewogICAgICAgICBUUkFDRTIoKCJjYWNoZSBjb21tYW5kICVkXG4iLGNtZHAtPk9wQ29kZSkpOwogICAgICAgICBpZiAoaGEtPmNhY2hlX2ZlYXQgJiBHRFRfNjRCSVQpCkBAIC0yODQwLDggKzI4NDAsOCBAQAogCiAKIC8qIENvbnRyb2xsZXIgZXZlbnQgaGFuZGxpbmcgZnVuY3Rpb25zICovCi1zdGF0aWMgZ2R0aF9ldnRfc3RyICpnZHRoX3N0b3JlX2V2ZW50KGdkdGhfaGFfc3RyICpoYSwgdXNob3J0IHNvdXJjZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaG9ydCBpZHgsIGdkdGhfZXZ0X2RhdGEgKmV2dCkKK3N0YXRpYyBnZHRoX2V2dF9zdHIgKmdkdGhfc3RvcmVfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCB1MTYgc291cmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGlkeCwgZ2R0aF9ldnRfZGF0YSAqZXZ0KQogewogICAgIGdkdGhfZXZ0X3N0ciAqZTsKICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKQEAgLTI4OTAsNyArMjg5MCw3IEBACiB7CiAgICAgZ2R0aF9ldnRfc3RyICplOwogICAgIGludCBlaW5kZXg7Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAogICAgIFRSQUNFMigoImdkdGhfcmVhZF9ldmVudCgpIGhhbmRsZSAlZFxuIiwgaGFuZGxlKSk7CiAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwpAQCAtMjkxOSwxMiArMjkxOSwxMiBAQAogfQogCiBzdGF0aWMgdm9pZCBnZHRoX3JlYWRhcHBfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuY2hhciBhcHBsaWNhdGlvbiwgZ2R0aF9ldnRfc3RyICplc3RyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGFwcGxpY2F0aW9uLCBnZHRoX2V2dF9zdHIgKmVzdHIpCiB7CiAgICAgZ2R0aF9ldnRfc3RyICplOwogICAgIGludCBlaW5kZXg7Ci0gICAgdWxvbmcgZmxhZ3M7Ci0gICAgdW5jaGFyIGZvdW5kID0gRkFMU0U7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICB1OCBmb3VuZCA9IEZBTFNFOwogCiAgICAgVFJBQ0UyKCgiZ2R0aF9yZWFkYXBwX2V2ZW50KCkgYXBwLiAlZFxuIiwgYXBwbGljYXRpb24pKTsKICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CkBAIC0yOTY5LDkgKzI5NjksOSBAQAogICAgIGdkdDJfZHByYW1fc3RyIF9faW9tZW0gKmRwMl9wdHI7CiAgICAgU2NzaV9DbW5kICpzY3A7CiAgICAgaW50IHJ2YWwsIGk7Ci0gICAgdW5jaGFyIElTdGF0dXM7Ci0gICAgdXNob3J0IFNlcnZpY2U7Ci0gICAgdWxvbmcgZmxhZ3MgPSAwOworICAgIHU4IElTdGF0dXM7CisgICAgdTE2IFNlcnZpY2U7CisgICAgdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAjaWZkZWYgSU5UX0NPQUwKICAgICBpbnQgY29hbGVzY2VkID0gRkFMU0U7CiAgICAgaW50IG5leHQgPSBGQUxTRTsKQEAgLTMwMTgsNyArMzAxOCw3IEBACiAgICAgICAgIGlmIChjb2FsZXNjZWQpIHsKICAgICAgICAgICAgIC8qIEZvciBjb2FsZXNjZWQgcmVxdWVzdHMgYWxsIHN0YXR1cwogICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gaXMgZm91bmQgaW4gdGhlIHN0YXR1cyBidWZmZXIgKi8KLSAgICAgICAgICAgIElTdGF0dXMgPSAodW5jaGFyKShwY3MtPnN0YXR1cyAmIDB4ZmYpOworICAgICAgICAgICAgSVN0YXR1cyA9ICh1OCkocGNzLT5zdGF0dXMgJiAweGZmKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgCkBAIC0zMTk3LDcgKzMxOTcsNyBAQAogICAgICAgICAgICAgKythY3RfaW50X2NvYWw7CiAgICAgICAgICAgICBpZiAoYWN0X2ludF9jb2FsID4gbWF4X2ludF9jb2FsKSB7CiAgICAgICAgICAgICAgICAgbWF4X2ludF9jb2FsID0gYWN0X2ludF9jb2FsOwotICAgICAgICAgICAgICAgIHByaW50aygiR0RUOiBtYXhfaW50X2NvYWwgPSAlZFxuIiwodXNob3J0KW1heF9pbnRfY29hbCk7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJHRFQ6IG1heF9pbnRfY29hbCA9ICVkXG4iLCh1MTYpbWF4X2ludF9jb2FsKTsKICAgICAgICAgICAgIH0KICNlbmRpZiAgICAgIAogICAgICAgICAgICAgLyogc2VlIGlmIHRoZXJlIGlzIGFub3RoZXIgc3RhdHVzICovCkBAIC0zMjI1LDEyICszMjI1LDEyIEBACiAJcmV0dXJuIF9fZ2R0aF9pbnRlcnJ1cHQoaGEsIGZhbHNlLCBOVUxMKTsKIH0KIAotc3RhdGljIGludCBnZHRoX3N5bmNfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgc2VydmljZSwgdW5jaGFyIGluZGV4LAorc3RhdGljIGludCBnZHRoX3N5bmNfZXZlbnQoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgc2VydmljZSwgdTggaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjc2lfQ21uZCAqc2NwKQogewogICAgIGdkdGhfbXNnX3N0ciAqbXNnOwogICAgIGdkdGhfY21kX3N0ciAqY21kcDsKLSAgICB1bmNoYXIgYiwgdDsKKyAgICB1OCBiLCB0OwogICAgIHN0cnVjdCBnZHRoX2NtbmRpbmZvICpjbW5kaW5mbyA9IGdkdGhfY21uZF9wcml2KHNjcCk7CiAKICAgICBjbWRwID0gaGEtPnBjY2I7CkBAIC0zMjYzLDcgKzMyNjMsNyBAQAogICAgICAgICAgICAgY21kcC0+dS5zY3JlZW4uc3UubXNnLm1zZ19hZGRyICA9IGhhLT5tc2dfcGh5czsKICAgICAgICAgICAgIGhhLT5jbWRfb2Zmc19kcG1lbSA9IDA7CiAgICAgICAgICAgICBoYS0+Y21kX2xlbiA9IEdEVE9GRlNPRihnZHRoX2NtZF9zdHIsdS5zY3JlZW4uc3UubXNnLm1zZ19hZGRyKSAKLSAgICAgICAgICAgICAgICArIHNpemVvZih1bG9uZzY0KTsKKyAgICAgICAgICAgICAgICArIHNpemVvZih1NjQpOwogICAgICAgICAgICAgaGEtPmNtZF9jbnQgPSAwOwogICAgICAgICAgICAgZ2R0aF9jb3B5X2NvbW1hbmQoaGEpOwogICAgICAgICAgICAgZ2R0aF9yZWxlYXNlX2V2ZW50KGhhKTsKQEAgLTMyOTcsNyArMzI5Nyw3IEBACiAgICAgICAgICAgICBjbWRwLT51LnNjcmVlbi5zdS5tc2cubXNnX2FkZHIgID0gaGEtPm1zZ19waHlzOwogICAgICAgICAgICAgaGEtPmNtZF9vZmZzX2RwbWVtID0gMDsKICAgICAgICAgICAgIGhhLT5jbWRfbGVuID0gR0RUT0ZGU09GKGdkdGhfY21kX3N0cix1LnNjcmVlbi5zdS5tc2cubXNnX2FkZHIpIAotICAgICAgICAgICAgICAgICsgc2l6ZW9mKHVsb25nNjQpOworICAgICAgICAgICAgICAgICsgc2l6ZW9mKHU2NCk7CiAgICAgICAgICAgICBoYS0+Y21kX2NudCA9IDA7CiAgICAgICAgICAgICBnZHRoX2NvcHlfY29tbWFuZChoYSk7CiAgICAgICAgICAgICBnZHRoX3JlbGVhc2VfZXZlbnQoaGEpOwpAQCAtMzMzNSw3ICszMzM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNtbmRpbmZvLT5PcENvZGUpKTsKICAgICAgICAgICAgICAgICAvKiBzcGVjaWFsIGNvbW1hbmRzIEdEVF9DTFVTVF9JTkZPL0dEVF9NT1VOVCA/ICovCiAgICAgICAgICAgICAgICAgaWYgKGNtbmRpbmZvLT5PcENvZGUgPT0gR0RUX0NMVVNUX0lORk8pIHsKLSAgICAgICAgICAgICAgICAgICAgaGEtPmhkclt0XS5jbHVzdGVyX3R5cGUgPSAodW5jaGFyKWhhLT5pbmZvOworICAgICAgICAgICAgICAgICAgICBoYS0+aGRyW3RdLmNsdXN0ZXJfdHlwZSA9ICh1OCloYS0+aW5mbzsKICAgICAgICAgICAgICAgICAgICAgaWYgKCEoaGEtPmhkclt0XS5jbHVzdGVyX3R5cGUgJiAKICAgICAgICAgICAgICAgICAgICAgICAgIENMVVNURVJfTU9VTlRFRCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5PVCBNT1VOVEVEIC0+IE1PVU5UICovCkBAIC0zMzk3LDcgKzMzOTcsNyBAQAogICAgICAgICAgICAgICAgICAgICBoYS0+aGRyW3RdLmNsdXN0ZXJfdHlwZSAmPSB+Q0xVU1RFUl9SRVNFUlZFRDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbWVtc2V0KChjaGFyKilzY3AtPnNlbnNlX2J1ZmZlciwwLDE2KTsKLSAgICAgICAgICAgICAgICBpZiAoaGEtPnN0YXR1cyA9PSAodXNob3J0KVNfQ0FDSEVfUkVTRVJWKSB7CisgICAgICAgICAgICAgICAgaWYgKGhhLT5zdGF0dXMgPT0gKHUxNilTX0NBQ0hFX1JFU0VSVikgewogICAgICAgICAgICAgICAgICAgICBzY3AtPnJlc3VsdCA9IChESURfT0sgPDwgMTYpIHwgKFJFU0VSVkFUSU9OX0NPTkZMSUNUIDw8IDEpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHNjcC0+c2Vuc2VfYnVmZmVyWzBdID0gMHg3MDsKQEAgLTM2MTQsMTYgKzM2MTQsMTYgQEAKICAgICAgICAgICAgIGNtZHAtPnUuc2NyZWVuLnN1Lm1zZy5tc2dfYWRkciAgPSBoYS0+bXNnX3BoeXM7CiAgICAgICAgICAgICBoYS0+Y21kX29mZnNfZHBtZW0gPSAwOwogICAgICAgICAgICAgaGEtPmNtZF9sZW4gPSBHRFRPRkZTT0YoZ2R0aF9jbWRfc3RyLHUuc2NyZWVuLnN1Lm1zZy5tc2dfYWRkcikgCi0gICAgICAgICAgICAgICAgKyBzaXplb2YodWxvbmc2NCk7CisgICAgICAgICAgICAgICAgKyBzaXplb2YodTY0KTsKICAgICAgICAgICAgIGhhLT5jbWRfY250ID0gMDsKICAgICAgICAgICAgIGdkdGhfY29weV9jb21tYW5kKGhhKTsKICAgICAgICAgICAgIGlmIChoYS0+dHlwZSA9PSBHRFRfRUlTQSkKLSAgICAgICAgICAgICAgICBwcmludGsoIltFSVNBIHNsb3QgJWRdICIsKHVzaG9ydCloYS0+YnJkX3BoeXMpOworICAgICAgICAgICAgICAgIHByaW50aygiW0VJU0Egc2xvdCAlZF0gIiwodTE2KWhhLT5icmRfcGh5cyk7CiAgICAgICAgICAgICBlbHNlIGlmIChoYS0+dHlwZSA9PSBHRFRfSVNBKQotICAgICAgICAgICAgICAgIHByaW50aygiW0RQTUVNIDB4JTRYXSAiLCh1c2hvcnQpaGEtPmJyZF9waHlzKTsKKyAgICAgICAgICAgICAgICBwcmludGsoIltEUE1FTSAweCU0WF0gIiwodTE2KWhhLT5icmRfcGh5cyk7CiAgICAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgICAgIHByaW50aygiW1BDSSAlZC8lZF0gIiwodXNob3J0KShoYS0+YnJkX3BoeXM+PjgpLAotICAgICAgICAgICAgICAgICAgICAgICAodXNob3J0KSgoaGEtPmJyZF9waHlzPj4zKSYweDFmKSk7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJbUENJICVkLyVkXSAiLCh1MTYpKGhhLT5icmRfcGh5cz4+OCksCisgICAgICAgICAgICAgICAgICAgICAgICh1MTYpKChoYS0+YnJkX3BoeXM+PjMpJjB4MWYpKTsKICAgICAgICAgICAgIGdkdGhfcmVsZWFzZV9ldmVudChoYSk7CiAgICAgICAgIH0KIApAQCAtMzY0MCw3ICszNjQwLDcgQEAKICAgICAgICAgICAgIGhhLT5kdnIuZXUuYXN5bmMuc2VydmljZSA9IGhhLT5zZXJ2aWNlOwogICAgICAgICAgICAgaGEtPmR2ci5ldS5hc3luYy5zdGF0dXMgID0gaGEtPnN0YXR1czsKICAgICAgICAgICAgIGhhLT5kdnIuZXUuYXN5bmMuaW5mbyAgICA9IGhhLT5pbmZvOwotICAgICAgICAgICAgKih1bG9uZzMyICopaGEtPmR2ci5ldS5hc3luYy5zY3NpX2Nvb3JkICA9IGhhLT5pbmZvMjsKKyAgICAgICAgICAgICoodTMyICopaGEtPmR2ci5ldS5hc3luYy5zY3NpX2Nvb3JkICA9IGhhLT5pbmZvMjsKICAgICAgICAgfQogICAgICAgICBnZHRoX3N0b3JlX2V2ZW50KCBoYSwgRVNfQVNZTkMsIGhhLT5zZXJ2aWNlLCAmaGEtPmR2ciApOwogICAgICAgICBnZHRoX2xvZ19ldmVudCggJmhhLT5kdnIsIE5VTEwgKTsKQEAgLTM2NDgsOCArMzY0OCw4IEBACiAgICAgICAgIC8qIG5ldyBob3N0IGRyaXZlIGZyb20gZXhwYW5kPyAqLwogICAgICAgICBpZiAoaGEtPnNlcnZpY2UgPT0gQ0FDSEVTRVJWSUNFICYmIGhhLT5zdGF0dXMgPT0gNTYpIHsKICAgICAgICAgICAgIFRSQUNFMigoImdkdGhfYXN5bmNfZXZlbnQoKTogbmV3IGhvc3QgZHJpdmUgJWQgY3JlYXRlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgKHVzaG9ydCloYS0+aW5mbykpOwotICAgICAgICAgICAgLyogZ2R0aF9hbmFseXNlX2hkcml2ZShoYW51bSwgKHVzaG9ydCloYS0+aW5mbyk7ICovCisgICAgICAgICAgICAgICAgICAgICh1MTYpaGEtPmluZm8pKTsKKyAgICAgICAgICAgIC8qIGdkdGhfYW5hbHlzZV9oZHJpdmUoaGFudW0sICh1MTYpaGEtPmluZm8pOyAqLwogICAgICAgICB9ICAgCiAgICAgfQogICAgIHJldHVybiAxOwpAQCAtMzY4MCwxMyArMzY4MCwxMyBAQAogICAgICAgICBmb3IgKGo9MCxpPTE7IGkgPCBmWzBdOyBpKz0yKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGZbaSsxXSkgewogICAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgc3RhY2suYltqKytdID0gKih1bG9uZzMyKikmZHZyLT5ldS5zdHJlYW1bKGludClmW2ldXTsKKyAgICAgICAgICAgICAgICBzdGFjay5iW2orK10gPSAqKHUzMiopJmR2ci0+ZXUuc3RyZWFtWyhpbnQpZltpXV07CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICBzdGFjay5iW2orK10gPSAqKHVzaG9ydCopJmR2ci0+ZXUuc3RyZWFtWyhpbnQpZltpXV07CisgICAgICAgICAgICAgICAgc3RhY2suYltqKytdID0gKih1MTYqKSZkdnItPmV1LnN0cmVhbVsoaW50KWZbaV1dOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgc3RhY2suYltqKytdID0gKih1bmNoYXIqKSZkdnItPmV1LnN0cmVhbVsoaW50KWZbaV1dOworICAgICAgICAgICAgICAgIHN0YWNrLmJbaisrXSA9ICoodTgqKSZkdnItPmV1LnN0cmVhbVsoaW50KWZbaV1dOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzcxMiwxNCArMzcxMiwxNCBAQAogfQogCiAjaWZkZWYgR0RUSF9TVEFUSVNUSUNTCi1zdGF0aWMgdW5jaGFyCWdkdGhfdGltZXJfcnVubmluZzsKK3N0YXRpYyB1OAlnZHRoX3RpbWVyX3J1bm5pbmc7CiAKLXN0YXRpYyB2b2lkIGdkdGhfdGltZW91dCh1bG9uZyBkYXRhKQorc3RhdGljIHZvaWQgZ2R0aF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLSAgICB1bG9uZzMyIGk7CisgICAgdTMyIGk7CiAgICAgU2NzaV9DbW5kICpuc2NwOwogICAgIGdkdGhfaGFfc3RyICpoYTsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAgICAgaWYodW5saWtlbHkobGlzdF9lbXB0eSgmZ2R0aF9pbnN0YW5jZXMpKSkgewogCSAgICBnZHRoX3RpbWVyX3J1bm5pbmcgPSAwOwpAQCAtMzg5MSw4ICszODkxLDggQEAKIHsKIAlnZHRoX2hhX3N0ciAqaGEgPSBzaG9zdF9wcml2KHNjcC0+ZGV2aWNlLT5ob3N0KTsKIAlzdHJ1Y3QgZ2R0aF9jbW5kaW5mbyAqY21uZGluZm8gPSBnZHRoX2NtbmRfcHJpdihzY3ApOwotCXVuY2hhciBiLCB0OwotCXVsb25nIGZsYWdzOworCXU4IGIsIHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAllbnVtIGJsa19laF90aW1lcl9yZXR1cm4gcmV0dmFsID0gQkxLX0VIX05PVF9IQU5ETEVEOwogCiAJVFJBQ0UoKCIlcygpIGNtZCAweCV4XG4iLCBzY3AtPmNtbmRbMF0sIF9fZnVuY19fKSk7CkBAIC0zOTI0LDkgKzM5MjQsOSBAQAogewogICAgIGdkdGhfaGFfc3RyICpoYSA9IHNob3N0X3ByaXYoc2NwLT5kZXZpY2UtPmhvc3QpOwogICAgIGludCBpOwotICAgIHVsb25nIGZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgU2NzaV9DbW5kICpjbW5kOwotICAgIHVuY2hhciBiOworICAgIHU4IGI7CiAKICAgICBUUkFDRTIoKCJnZHRoX2VoX2J1c19yZXNldCgpXG4iKSk7CiAKQEAgLTM5NzQsNyArMzk3NCw3IEBACiAKIHN0YXRpYyBpbnQgZ2R0aF9iaW9zX3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldixzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LHNlY3Rvcl90IGNhcCxpbnQgKmlwKQogewotICAgIHVuY2hhciBiLCB0OworICAgIHU4IGIsIHQ7CiAgICAgZ2R0aF9oYV9zdHIgKmhhID0gc2hvc3RfcHJpdihzZGV2LT5ob3N0KTsKICAgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkOwogICAgIHVuc2lnbmVkIGNhcGFjaXR5OwpAQCAtNDA2Miw3ICs0MDYyLDcgQEAKIHsKICAgICBnZHRoX2lvY3RsX2V2ZW50IGV2dDsKICAgICBnZHRoX2hhX3N0ciAqaGE7Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAogICAgIGlmIChjb3B5X2Zyb21fdXNlcigmZXZ0LCBhcmcsIHNpemVvZihnZHRoX2lvY3RsX2V2ZW50KSkpCiAgICAgICAgIHJldHVybiAtRUZBVUxUOwpAQCAtNDA5OCw4ICs0MDk4LDggQEAKIHN0YXRpYyBpbnQgaW9jX2xvY2tkcnYodm9pZCBfX3VzZXIgKmFyZykKIHsKICAgICBnZHRoX2lvY3RsX2xvY2tkcnYgbGRydjsKLSAgICB1bmNoYXIgaSwgajsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1OCBpLCBqOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgZ2R0aF9oYV9zdHIgKmhhOwogCiAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZsZHJ2LCBhcmcsIHNpemVvZihnZHRoX2lvY3RsX2xvY2tkcnYpKSkKQEAgLTQxNjUsNyArNDE2NSw3IEBACiB7CiAgICAgZ2R0aF9pb2N0bF9nZW5lcmFsIGdlbjsKICAgICBjaGFyICpidWYgPSBOVUxMOwotICAgIHVsb25nNjQgcGFkZHI7IAorICAgIHU2NCBwYWRkcjsgCiAgICAgZ2R0aF9oYV9zdHIgKmhhOwogICAgIGludCBydmFsOwogCkBAIC00MTk0LDcgKzQxOTQsNyBAQAogICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUuY2FjaGU2NC5EZXZpY2VObyA9IGdlbi5jb21tYW5kLnUuY2FjaGUuRGV2aWNlTm87CiAgICAgICAgICAgICAgICAgLyogYWRkcmVzc2VzICovCiAgICAgICAgICAgICAgICAgaWYgKGhhLT5jYWNoZV9mZWF0ICYgU0NBVFRFUl9HQVRIRVIpIHsKLSAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5jYWNoZTY0LkRlc3RBZGRyID0gKHVsb25nNjQpLTE7CisgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUuY2FjaGU2NC5EZXN0QWRkciA9ICh1NjQpLTE7CiAgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUuY2FjaGU2NC5zZ19jYW56ID0gMTsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5jYWNoZTY0LnNnX2xzdFswXS5zZ19wdHIgPSBwYWRkcjsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5jYWNoZTY0LnNnX2xzdFswXS5zZ19sZW4gPSBnZW4uZGF0YV9sZW47CkBAIC00MjA3LDcgKzQyMDcsNyBAQAogICAgICAgICAgICAgICAgIGlmIChoYS0+Y2FjaGVfZmVhdCAmIFNDQVRURVJfR0FUSEVSKSB7CiAgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUuY2FjaGUuRGVzdEFkZHIgPSAweGZmZmZmZmZmOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LmNhY2hlLnNnX2NhbnogPSAxOwotICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LmNhY2hlLnNnX2xzdFswXS5zZ19wdHIgPSAodWxvbmczMilwYWRkcjsKKyAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5jYWNoZS5zZ19sc3RbMF0uc2dfcHRyID0gKHUzMilwYWRkcjsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5jYWNoZS5zZ19sc3RbMF0uc2dfbGVuID0gZ2VuLmRhdGFfbGVuOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LmNhY2hlLnNnX2xzdFsxXS5zZ19sZW4gPSAwOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC00MjMwLDcgKzQyMzAsNyBAQAogICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUucmF3NjQuZGlyZWN0aW9uID0gZ2VuLmNvbW1hbmQudS5yYXcuZGlyZWN0aW9uOwogICAgICAgICAgICAgICAgIC8qIGFkZHJlc3NlcyAqLwogICAgICAgICAgICAgICAgIGlmIChoYS0+cmF3X2ZlYXQgJiBTQ0FUVEVSX0dBVEhFUikgewotICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdzY0LnNkYXRhID0gKHVsb25nNjQpLTE7CisgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUucmF3NjQuc2RhdGEgPSAodTY0KS0xOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdzY0LnNnX3JhbnogPSAxOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdzY0LnNnX2xzdFswXS5zZ19wdHIgPSBwYWRkcjsKICAgICAgICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5yYXc2NC5zZ19sc3RbMF0uc2dfbGVuID0gZ2VuLmRhdGFfbGVuOwpAQCAtNDI0NCwxNCArNDI0NCwxNCBAQAogICAgICAgICAgICAgICAgIGlmIChoYS0+cmF3X2ZlYXQgJiBTQ0FUVEVSX0dBVEhFUikgewogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZGF0YSA9IDB4ZmZmZmZmZmY7CiAgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUucmF3LnNnX3JhbnogPSAxOwotICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZ19sc3RbMF0uc2dfcHRyID0gKHVsb25nMzIpcGFkZHI7CisgICAgICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUucmF3LnNnX2xzdFswXS5zZ19wdHIgPSAodTMyKXBhZGRyOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZ19sc3RbMF0uc2dfbGVuID0gZ2VuLmRhdGFfbGVuOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZ19sc3RbMV0uc2dfbGVuID0gMDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZGF0YSA9IHBhZGRyOwogICAgICAgICAgICAgICAgICAgICBnZW4uY29tbWFuZC51LnJhdy5zZ19yYW56ID0gMDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZ2VuLmNvbW1hbmQudS5yYXcuc2Vuc2VfZGF0YSA9ICh1bG9uZzMyKXBhZGRyICsgZ2VuLmRhdGFfbGVuOworICAgICAgICAgICAgICAgIGdlbi5jb21tYW5kLnUucmF3LnNlbnNlX2RhdGEgPSAodTMyKXBhZGRyICsgZ2VuLmRhdGFfbGVuOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZ2R0aF9pb2N0bF9mcmVlKGhhLCBnZW4uZGF0YV9sZW4rZ2VuLnNlbnNlX2xlbiwgYnVmLCBwYWRkcik7CkBAIC00MjgzLDcgKzQyODMsNyBAQAogICAgIGdkdGhfaW9jdGxfcmVzY2FuICpyc2M7CiAgICAgZ2R0aF9jbWRfc3RyICpjbWQ7CiAgICAgZ2R0aF9oYV9zdHIgKmhhOwotICAgIHVuY2hhciBpOworICAgIHU4IGk7CiAgICAgaW50IHJjID0gLUVOT01FTTsKICAgICB1MzIgY2x1c3Rlcl90eXBlID0gMDsKIApAQCAtNDMzNSwxMSArNDMzNSwxMSBAQAogewogICAgIGdkdGhfaW9jdGxfcmVzY2FuICpyc2M7CiAgICAgZ2R0aF9jbWRfc3RyICpjbWQ7Ci0gICAgdXNob3J0IGksIHN0YXR1cywgaGRyX2NudDsKLSAgICB1bG9uZzMyIGluZm87CisgICAgdTE2IGksIHN0YXR1cywgaGRyX2NudDsKKyAgICB1MzIgaW5mbzsKICAgICBpbnQgY3lscywgaGRzLCBzZWNzOwogICAgIGludCByYyA9IC1FTk9NRU07Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICBnZHRoX2hhX3N0ciAqaGE7IAogCiAgICAgcnNjID0ga21hbGxvYyhzaXplb2YoKnJzYyksIEdGUF9LRVJORUwpOwpAQCAtNDM2Nyw3ICs0MzY3LDcgQEAKIAogICAgICAgICBzdGF0dXMgPSBfX2dkdGhfZXhlY3V0ZShoYS0+c2RldiwgY21kLCBjbW5kLCAzMCwgJmluZm8pOwogICAgICAgICBpID0gMDsKLSAgICAgICAgaGRyX2NudCA9IChzdGF0dXMgPT0gU19PSyA/ICh1c2hvcnQpaW5mbyA6IDApOworICAgICAgICBoZHJfY250ID0gKHN0YXR1cyA9PSBTX09LID8gKHUxNilpbmZvIDogMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaSA9IHJzYy0+aGRyX25vOwogICAgICAgICBoZHJfY250ID0gaSArIDE7CkBAIC00NDE4LDcgKzQ0MTgsNyBAQAogICAgICAgICBzdGF0dXMgPSBfX2dkdGhfZXhlY3V0ZShoYS0+c2RldiwgY21kLCBjbW5kLCAzMCwgJmluZm8pOwogCiAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKLSAgICAgICAgaGEtPmhkcltpXS5kZXZ0eXBlID0gKHN0YXR1cyA9PSBTX09LID8gKHVzaG9ydClpbmZvIDogMCk7CisgICAgICAgIGhhLT5oZHJbaV0uZGV2dHlwZSA9IChzdGF0dXMgPT0gU19PSyA/ICh1MTYpaW5mbyA6IDApOwogICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKIAogICAgICAgICBjbWQtPlNlcnZpY2UgPSBDQUNIRVNFUlZJQ0U7CkBAIC00NDMyLDcgKzQ0MzIsNyBAQAogCiAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKICAgICAgICAgaGEtPmhkcltpXS5jbHVzdGVyX3R5cGUgPSAKLSAgICAgICAgICAgICgoc3RhdHVzID09IFNfT0sgJiYgIXNoYXJlZF9hY2Nlc3MpID8gKHVzaG9ydClpbmZvIDogMCk7CisgICAgICAgICAgICAoKHN0YXR1cyA9PSBTX09LICYmICFzaGFyZWRfYWNjZXNzKSA/ICh1MTYpaW5mbyA6IDApOwogICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKICAgICAgICAgcnNjLT5oZHJfbGlzdFtpXS5jbHVzdGVyX3R5cGUgPSBoYS0+aGRyW2ldLmNsdXN0ZXJfdHlwZTsKIApAQCAtNDQ0Niw3ICs0NDQ2LDcgQEAKICAgICAgICAgc3RhdHVzID0gX19nZHRoX2V4ZWN1dGUoaGEtPnNkZXYsIGNtZCwgY21uZCwgMzAsICZpbmZvKTsKIAogICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7Ci0gICAgICAgIGhhLT5oZHJbaV0ucndfYXR0cmlicyA9IChzdGF0dXMgPT0gU19PSyA/ICh1c2hvcnQpaW5mbyA6IDApOworICAgICAgICBoYS0+aGRyW2ldLnJ3X2F0dHJpYnMgPSAoc3RhdHVzID09IFNfT0sgPyAodTE2KWluZm8gOiAwKTsKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CiAgICAgfQogIApAQCAtNDQ2Niw3ICs0NDY2LDcgQEAKIHsKICAgICBnZHRoX2hhX3N0ciAqaGE7IAogICAgIFNjc2lfQ21uZCAqc2NwOwotICAgIHVsb25nIGZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgY2hhciBjbW5kW01BWF9DT01NQU5EX1NJWkVdOyAgIAogICAgIHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCkBAIC00NDk1LDkgKzQ0OTUsOSBAQAogICAgICAgeyAKICAgICAgICAgZ2R0aF9pb2N0bF9vc3ZlcnMgb3N2OyAKIAotICAgICAgICBvc3YudmVyc2lvbiA9ICh1bmNoYXIpKExJTlVYX1ZFUlNJT05fQ09ERSA+PiAxNik7Ci0gICAgICAgIG9zdi5zdWJ2ZXJzaW9uID0gKHVuY2hhcikoTElOVVhfVkVSU0lPTl9DT0RFID4+IDgpOwotICAgICAgICBvc3YucmV2aXNpb24gPSAodXNob3J0KShMSU5VWF9WRVJTSU9OX0NPREUgJiAweGZmKTsKKyAgICAgICAgb3N2LnZlcnNpb24gPSAodTgpKExJTlVYX1ZFUlNJT05fQ09ERSA+PiAxNik7CisgICAgICAgIG9zdi5zdWJ2ZXJzaW9uID0gKHU4KShMSU5VWF9WRVJTSU9OX0NPREUgPj4gOCk7CisgICAgICAgIG9zdi5yZXZpc2lvbiA9ICh1MTYpKExJTlVYX1ZFUlNJT05fQ09ERSAmIDB4ZmYpOwogICAgICAgICBpZiAoY29weV90b191c2VyKGFyZ3AsICZvc3YsIHNpemVvZihnZHRoX2lvY3RsX29zdmVycykpKQogICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwogICAgICAgICBicmVhazsKQEAgLTQ1MTIsMTAgKzQ1MTIsMTAgQEAKICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwogCiAgICAgICAgIGlmIChoYS0+dHlwZSA9PSBHRFRfSVNBIHx8IGhhLT50eXBlID09IEdEVF9FSVNBKSB7Ci0gICAgICAgICAgICBjdHJ0LnR5cGUgPSAodW5jaGFyKSgoaGEtPnN0eXBlPj4yMCkgLSAweDEwKTsKKyAgICAgICAgICAgIGN0cnQudHlwZSA9ICh1OCkoKGhhLT5zdHlwZT4+MjApIC0gMHgxMCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoaGEtPnR5cGUgIT0gR0RUX1BDSU1QUikgewotICAgICAgICAgICAgICAgIGN0cnQudHlwZSA9ICh1bmNoYXIpKChoYS0+c3R5cGU8PDQpICsgNik7CisgICAgICAgICAgICAgICAgY3RydC50eXBlID0gKHU4KSgoaGEtPnN0eXBlPDw0KSArIDYpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBjdHJ0LnR5cGUgPSAKICAgICAgICAgICAgICAgICAgICAgKGhhLT5vZW1faWQgPT0gT0VNX0lEX0lOVEVMID8gMHhmZCA6IDB4ZmUpOwpAQCAtNDU0Niw3ICs0NTQ2LDcgQEAKICAgICAgIGNhc2UgR0RUSU9DVExfTE9DS0NITjoKICAgICAgIHsKICAgICAgICAgZ2R0aF9pb2N0bF9sb2NrY2huIGxjaG47Ci0gICAgICAgIHVuY2hhciBpLCBqOworICAgICAgICB1OCBpLCBqOwogCiAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmbGNobiwgYXJncCwgc2l6ZW9mKGdkdGhfaW9jdGxfbG9ja2NobikpIHx8CiAgICAgICAgICAgICAoTlVMTCA9PSAoaGEgPSBnZHRoX2ZpbmRfaGEobGNobi5pb25vZGUpKSkpCkBAIC00NjcwLDcgKzQ2NzAsNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19JU0EKLXN0YXRpYyBpbnQgX19pbml0IGdkdGhfaXNhX3Byb2JlX29uZSh1bG9uZzMyIGlzYV9iaW9zKQorc3RhdGljIGludCBfX2luaXQgZ2R0aF9pc2FfcHJvYmVfb25lKHUzMiBpc2FfYmlvcykKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHA7CiAJZ2R0aF9oYV9zdHIgKmhhOwpAQCAtNDgwMiw3ICs0ODAyLDcgQEAKICNlbmRpZiAvKiBDT05GSUdfSVNBICovCiAKICNpZmRlZiBDT05GSUdfRUlTQQotc3RhdGljIGludCBfX2luaXQgZ2R0aF9laXNhX3Byb2JlX29uZSh1c2hvcnQgZWlzYV9zbG90KQorc3RhdGljIGludCBfX2luaXQgZ2R0aF9laXNhX3Byb2JlX29uZSh1MTYgZWlzYV9zbG90KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNocDsKIAlnZHRoX2hhX3N0ciAqaGE7CkBAIC01MTIwLDcgKzUxMjAsNyBAQAogCXNjc2lfaG9zdF9wdXQoc2hwKTsKIH0KIAotc3RhdGljIGludCBnZHRoX2hhbHQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdWxvbmcgZXZlbnQsIHZvaWQgKmJ1ZikKK3N0YXRpYyBpbnQgZ2R0aF9oYWx0KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmJ1ZikKIHsKIAlnZHRoX2hhX3N0ciAqaGE7CiAKQEAgLTUxNTgsMTQgKzUxNTgsMTQgQEAKIAlpZiAocHJvYmVfZWlzYV9pc2EpIHsKIAkJLyogc2Nhbm5pbmcgZm9yIGNvbnRyb2xsZXJzLCBhdCBmaXJzdDogSVNBIGNvbnRyb2xsZXIgKi8KICNpZmRlZiBDT05GSUdfSVNBCi0JCXVsb25nMzIgaXNhX2Jpb3M7CisJCXUzMiBpc2FfYmlvczsKIAkJZm9yIChpc2FfYmlvcyA9IDB4YzgwMDBVTDsgaXNhX2Jpb3MgPD0gMHhkODAwMFVMOwogCQkgICAgICAgICAgICAgICAgaXNhX2Jpb3MgKz0gMHg4MDAwVUwpCiAJCQlnZHRoX2lzYV9wcm9iZV9vbmUoaXNhX2Jpb3MpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0VJU0EKIAkJewotCQkJdXNob3J0IGVpc2Ffc2xvdDsKKwkJCXUxNiBlaXNhX3Nsb3Q7CiAJCQlmb3IgKGVpc2Ffc2xvdCA9IDB4MTAwMDsgZWlzYV9zbG90IDw9IDB4ODAwMDsKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICBlaXNhX3Nsb3QgKz0gMHgxMDAwKQogCQkJCWdkdGhfZWlzYV9wcm9iZV9vbmUoZWlzYV9zbG90KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9nZHRoLmggYi9kcml2ZXJzL3Njc2kvZ2R0aC5oCmluZGV4IDE2NDY0NDQuLjEyMGEwNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nZHRoLmgKKysrIGIvZHJpdmVycy9zY3NpL2dkdGguaApAQCAtMzIxLDUyNCArMzIxLDUyNCBAQAogCiAvKiBzY3JlZW5zZXJ2aWNlIG1lc3NhZ2UgKi8KIHR5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgdWxvbmczMiAgICAgbXNnX2hhbmRsZTsgICAgICAgICAgICAgICAgICAgICAvKiBtZXNzYWdlIGhhbmRsZSAqLwotICAgIHVsb25nMzIgICAgIG1zZ19sZW47ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBtZXNzYWdlICovCi0gICAgdWxvbmczMiAgICAgbXNnX2FsZW47ICAgICAgICAgICAgICAgICAgICAgICAvKiBhbnN3ZXIgbGVuZ3RoICovCi0gICAgdW5jaGFyICAgICAgbXNnX2Fuc3dlcjsgICAgICAgICAgICAgICAgICAgICAvKiBhbnN3ZXIgZmxhZyAqLwotICAgIHVuY2hhciAgICAgIG1zZ19leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbW9yZSBtZXNzYWdlcyAqLwotICAgIHVuY2hhciAgICAgIG1zZ19yZXNlcnZlZFsyXTsKKyAgICB1MzIgICAgIG1zZ19oYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgLyogbWVzc2FnZSBoYW5kbGUgKi8KKyAgICB1MzIgICAgIG1zZ19sZW47ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBtZXNzYWdlICovCisgICAgdTMyICAgICBtc2dfYWxlbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuc3dlciBsZW5ndGggKi8KKyAgICB1OCAgICAgIG1zZ19hbnN3ZXI7ICAgICAgICAgICAgICAgICAgICAgLyogYW5zd2VyIGZsYWcgKi8KKyAgICB1OCAgICAgIG1zZ19leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbW9yZSBtZXNzYWdlcyAqLworICAgIHU4ICAgICAgbXNnX3Jlc2VydmVkWzJdOwogICAgIGNoYXIgICAgICAgIG1zZ190ZXh0W01TR0xFTisyXTsgICAgICAgICAgICAgLyogdGhlIG1lc3NhZ2UgdGV4dCAqLwotfSBQQUNLRUQgZ2R0aF9tc2dfc3RyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX21zZ19zdHI7CiAKIAogLyogSU9DVEwgZGF0YSBzdHJ1Y3R1cmVzICovCiAKIC8qIFN0YXR1cyBjb2FsZXNjaW5nIGJ1ZmZlciBmb3IgcmV0dXJuaW5nIG11bHRpcGxlIHJlcXVlc3RzIHBlciBpbnRlcnJ1cHQgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBzdGF0dXM7Ci0gICAgdWxvbmczMiAgICAgZXh0X3N0YXR1czsKLSAgICB1bG9uZzMyICAgICBpbmZvMDsKLSAgICB1bG9uZzMyICAgICBpbmZvMTsKLX0gUEFDS0VEIGdkdGhfY29hbF9zdGF0dXM7CisgICAgdTMyICAgICBzdGF0dXM7CisgICAgdTMyICAgICBleHRfc3RhdHVzOworICAgIHUzMiAgICAgaW5mbzA7CisgICAgdTMyICAgICBpbmZvMTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9jb2FsX3N0YXR1czsKIAogLyogcGVyZm9ybWFuY2UgbW9kZSBkYXRhIHN0cnVjdHVyZSAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIHZlcnNpb247ICAgICAgICAgICAgLyogVGhlIHZlcnNpb24gb2YgdGhpcyBJT0NUTCBzdHJ1Y3R1cmUuICovCi0gICAgdWxvbmczMiAgICAgc3RfbW9kZTsgICAgICAgICAgICAvKiAwPWRpcy4sIDE9c3RfYnVmX2FkZHIxIHZhbGlkLCAyPWJvdGggICovCi0gICAgdWxvbmczMiAgICAgc3RfYnVmZl9hZGRyMTsgICAgICAvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIHN0YXR1cyBidWZmZXIgMSAqLwotICAgIHVsb25nMzIgICAgIHN0X2J1ZmZfdV9hZGRyMTsgICAgLyogcmVzZXJ2ZWQgZm9yIDY0IGJpdCBhZGRyZXNzaW5nICovCi0gICAgdWxvbmczMiAgICAgc3RfYnVmZl9pbmR4MTsgICAgICAvKiByZXNlcnZlZCBjb21tYW5kIGlkeC4gZm9yIHRoaXMgYnVmZmVyICovCi0gICAgdWxvbmczMiAgICAgc3RfYnVmZl9hZGRyMjsgICAgICAvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIHN0YXR1cyBidWZmZXIgMSAqLwotICAgIHVsb25nMzIgICAgIHN0X2J1ZmZfdV9hZGRyMjsgICAgLyogcmVzZXJ2ZWQgZm9yIDY0IGJpdCBhZGRyZXNzaW5nICovCi0gICAgdWxvbmczMiAgICAgc3RfYnVmZl9pbmR4MjsgICAgICAvKiByZXNlcnZlZCBjb21tYW5kIGlkeC4gZm9yIHRoaXMgYnVmZmVyICovCi0gICAgdWxvbmczMiAgICAgc3RfYnVmZl9zaXplOyAgICAgICAvKiBzaXplIG9mIGVhY2ggYnVmZmVyIGluIGJ5dGVzICovCi0gICAgdWxvbmczMiAgICAgY21kX21vZGU7ICAgICAgICAgICAvKiAwID0gbW9kZSBkaXNhYmxlZCwgMSA9IGNtZF9idWZmX2FkZHIxICovIAotICAgIHVsb25nMzIgICAgIGNtZF9idWZmX2FkZHIxOyAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBjbWQgYnVmZmVyIDEgKi8gICAKLSAgICB1bG9uZzMyICAgICBjbWRfYnVmZl91X2FkZHIxOyAgIC8qIHJlc2VydmVkIGZvciA2NCBiaXQgYWRkcmVzc2luZyAqLwotICAgIHVsb25nMzIgICAgIGNtZF9idWZmX2luZHgxOyAgICAgLyogY21kIGJ1ZiBhZGRyMSB1bmlxdWUgaWRlbnRpZmllciAqLwotICAgIHVsb25nMzIgICAgIGNtZF9idWZmX2FkZHIyOyAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBjbWQgYnVmZmVyIDEgKi8gICAKLSAgICB1bG9uZzMyICAgICBjbWRfYnVmZl91X2FkZHIyOyAgIC8qIHJlc2VydmVkIGZvciA2NCBiaXQgYWRkcmVzc2luZyAqLwotICAgIHVsb25nMzIgICAgIGNtZF9idWZmX2luZHgyOyAgICAgLyogY21kIGJ1ZiBhZGRyMSB1bmlxdWUgaWRlbnRpZmllciAqLwotICAgIHVsb25nMzIgICAgIGNtZF9idWZmX3NpemU7ICAgICAgLyogc2l6ZSBvZiBlYWNoIGNtZCBidWZlciBpbiBieXRlcyAqLwotICAgIHVsb25nMzIgICAgIHJlc2VydmVkMTsKLSAgICB1bG9uZzMyICAgICByZXNlcnZlZDI7Ci19IFBBQ0tFRCBnZHRoX3BlcmZfbW9kZXM7CisgICAgdTMyICAgICB2ZXJzaW9uOyAgICAgICAgICAgIC8qIFRoZSB2ZXJzaW9uIG9mIHRoaXMgSU9DVEwgc3RydWN0dXJlLiAqLworICAgIHUzMiAgICAgc3RfbW9kZTsgICAgICAgICAgICAvKiAwPWRpcy4sIDE9c3RfYnVmX2FkZHIxIHZhbGlkLCAyPWJvdGggICovCisgICAgdTMyICAgICBzdF9idWZmX2FkZHIxOyAgICAgIC8qIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygc3RhdHVzIGJ1ZmZlciAxICovCisgICAgdTMyICAgICBzdF9idWZmX3VfYWRkcjE7ICAgIC8qIHJlc2VydmVkIGZvciA2NCBiaXQgYWRkcmVzc2luZyAqLworICAgIHUzMiAgICAgc3RfYnVmZl9pbmR4MTsgICAgICAvKiByZXNlcnZlZCBjb21tYW5kIGlkeC4gZm9yIHRoaXMgYnVmZmVyICovCisgICAgdTMyICAgICBzdF9idWZmX2FkZHIyOyAgICAgIC8qIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygc3RhdHVzIGJ1ZmZlciAxICovCisgICAgdTMyICAgICBzdF9idWZmX3VfYWRkcjI7ICAgIC8qIHJlc2VydmVkIGZvciA2NCBiaXQgYWRkcmVzc2luZyAqLworICAgIHUzMiAgICAgc3RfYnVmZl9pbmR4MjsgICAgICAvKiByZXNlcnZlZCBjb21tYW5kIGlkeC4gZm9yIHRoaXMgYnVmZmVyICovCisgICAgdTMyICAgICBzdF9idWZmX3NpemU7ICAgICAgIC8qIHNpemUgb2YgZWFjaCBidWZmZXIgaW4gYnl0ZXMgKi8KKyAgICB1MzIgICAgIGNtZF9tb2RlOyAgICAgICAgICAgLyogMCA9IG1vZGUgZGlzYWJsZWQsIDEgPSBjbWRfYnVmZl9hZGRyMSAqLyAKKyAgICB1MzIgICAgIGNtZF9idWZmX2FkZHIxOyAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBjbWQgYnVmZmVyIDEgKi8gICAKKyAgICB1MzIgICAgIGNtZF9idWZmX3VfYWRkcjE7ICAgLyogcmVzZXJ2ZWQgZm9yIDY0IGJpdCBhZGRyZXNzaW5nICovCisgICAgdTMyICAgICBjbWRfYnVmZl9pbmR4MTsgICAgIC8qIGNtZCBidWYgYWRkcjEgdW5pcXVlIGlkZW50aWZpZXIgKi8KKyAgICB1MzIgICAgIGNtZF9idWZmX2FkZHIyOyAgICAgLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBjbWQgYnVmZmVyIDEgKi8gICAKKyAgICB1MzIgICAgIGNtZF9idWZmX3VfYWRkcjI7ICAgLyogcmVzZXJ2ZWQgZm9yIDY0IGJpdCBhZGRyZXNzaW5nICovCisgICAgdTMyICAgICBjbWRfYnVmZl9pbmR4MjsgICAgIC8qIGNtZCBidWYgYWRkcjEgdW5pcXVlIGlkZW50aWZpZXIgKi8KKyAgICB1MzIgICAgIGNtZF9idWZmX3NpemU7ICAgICAgLyogc2l6ZSBvZiBlYWNoIGNtZCBidWZlciBpbiBieXRlcyAqLworICAgIHUzMiAgICAgcmVzZXJ2ZWQxOworICAgIHUzMiAgICAgcmVzZXJ2ZWQyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX3BlcmZfbW9kZXM7CiAKIC8qIFNDU0kgZHJpdmUgaW5mbyAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVuY2hhciAgICAgIHZlbmRvcls4XTsgICAgICAgICAgICAgICAgICAgICAgLyogdmVuZG9yIHN0cmluZyAqLwotICAgIHVuY2hhciAgICAgIHByb2R1Y3RbMTZdOyAgICAgICAgICAgICAgICAgICAgLyogcHJvZHVjdCBzdHJpbmcgKi8KLSAgICB1bmNoYXIgICAgICByZXZpc2lvbls0XTsgICAgICAgICAgICAgICAgICAgIC8qIHJldmlzaW9uICovCi0gICAgdWxvbmczMiAgICAgc3lfcmF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IHJhdGUgZm9yIHN5bmMuIHRyLiAqLwotICAgIHVsb25nMzIgICAgIHN5X21heF9yYXRlOyAgICAgICAgICAgICAgICAgICAgLyogbWF4LiByYXRlIGZvciBzeW5jLiB0ci4gKi8KLSAgICB1bG9uZzMyICAgICBub19sZHJpdmU7ICAgICAgICAgICAgICAgICAgICAgIC8qIGJlbG9uZ3MgdG8gdGhpcyBsb2cuIGRydi4qLwotICAgIHVsb25nMzIgICAgIGJsa2NudDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGJsb2NrcyAqLwotICAgIHVzaG9ydCAgICAgIGJsa3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBibG9jayBpbiBieXRlcyAqLwotICAgIHVuY2hhciAgICAgIGF2YWlsYWJsZTsgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZzogYWNjZXNzIGlzIGF2YWlsYWJsZSAqLwotICAgIHVuY2hhciAgICAgIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVkaXVtIGlzIGluaXRpYWxpemVkICovCi0gICAgdW5jaGFyICAgICAgZGV2dHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGRldmljZXR5cGUgKi8KLSAgICB1bmNoYXIgICAgICBybV9tZWRpdW07ICAgICAgICAgICAgICAgICAgICAgIC8qIG1lZGl1bSBpcyByZW1vdmFibGUgKi8KLSAgICB1bmNoYXIgICAgICB3cF9tZWRpdW07ICAgICAgICAgICAgICAgICAgICAgIC8qIG1lZGl1bSBpcyB3cml0ZSBwcm90ZWN0ZWQgKi8KLSAgICB1bmNoYXIgICAgICBhbnNpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgSS9JSSBvciBJSUk/ICovCi0gICAgdW5jaGFyICAgICAgcHJvdG9jb2w7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzYW1lIGFzIGFuc2kgKi8KLSAgICB1bmNoYXIgICAgICBzeW5jOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IHN5bmMuIHRyYW5zZmVyIGVuYWIuICovCi0gICAgdW5jaGFyICAgICAgZGlzYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFnOiBkaXNjb25uZWN0IGVuYWJsZWQgKi8KLSAgICB1bmNoYXIgICAgICBxdWV1ZWluZzsgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IGNvbW1hbmQgcXVlaW5nIGVuYWIuICovCi0gICAgdW5jaGFyICAgICAgY2FjaGVkOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFnOiBjYWNoaW5nIGVuYWJsZWQgKi8KLSAgICB1bmNoYXIgICAgICB0YXJnZXRfaWQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBJRCBvZiBkZXZpY2UgKi8KLSAgICB1bmNoYXIgICAgICBsdW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExVTiBpZCBvZiBkZXZpY2UgKi8KLSAgICB1bmNoYXIgICAgICBvcnBoYW47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IGRyaXZlIGZyYWdtZW50ICovCi0gICAgdWxvbmczMiAgICAgbGFzdF9lcnJvcjsgICAgICAgICAgICAgICAgICAgICAvKiBzZW5zZSBrZXkgb3IgZHJpdmUgc3RhdGUgKi8KLSAgICB1bG9uZzMyICAgICBsYXN0X3Jlc3VsdDsgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VsdCBvZiBsYXN0IGNvbW1hbmQgKi8KLSAgICB1bG9uZzMyICAgICBjaGVja19lcnJvcnM7ICAgICAgICAgICAgICAgICAgIC8qIGVyci4gaW4gbGFzdCBzdXJmYWNlIGNoZWNrICovCi0gICAgdW5jaGFyICAgICAgcGVyY2VudDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm9ncmVzcyBmb3Igc3VyZmFjZSBjaGVjayAqLwotICAgIHVuY2hhciAgICAgIGxhc3RfY2hlY2s7ICAgICAgICAgICAgICAgICAgICAgLyogSU9DVFJMIG9wZXJhdGlvbiAqLwotICAgIHVuY2hhciAgICAgIHJlc1syXTsKLSAgICB1bG9uZzMyICAgICBmbGFnczsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZyb20gMS4xOS8yLjE5OiByYXcgcmVzZXJ2LiovCi0gICAgdW5jaGFyICAgICAgbXVsdGlfYnVzOyAgICAgICAgICAgICAgICAgICAgICAvKiBtdWx0aSBidXMgZGV2PyAoZmlicmUgY2guKSAqLwotICAgIHVuY2hhciAgICAgIG1iX3N0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLyogc3RhdHVzOiBhdmFpbGFibGU/ICovCi0gICAgdW5jaGFyICAgICAgcmVzMlsyXTsKLSAgICB1bmNoYXIgICAgICBtYl9hbHRfc3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qIHN0YXR1cyBvbiBzZWNvbmQgYnVzICovCi0gICAgdW5jaGFyICAgICAgbWJfYWx0X2JpZDsgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2Ygc2Vjb25kIGJ1cyAqLwotICAgIHVuY2hhciAgICAgIG1iX2FsdF90aWQ7ICAgICAgICAgICAgICAgICAgICAgLyogdGFyZ2V0IGlkIG9uIHNlY29uZCBidXMgKi8KLSAgICB1bmNoYXIgICAgICByZXMzOwotICAgIHVuY2hhciAgICAgIGZjX2ZsYWc7ICAgICAgICAgICAgICAgICAgICAgICAgLyogZnJvbSAxLjIyLzIuMjI6IGluZm8gdmFsaWQ/Ki8KLSAgICB1bmNoYXIgICAgICByZXM0OwotICAgIHVzaG9ydCAgICAgIGZjX2ZyYW1lX3NpemU7ICAgICAgICAgICAgICAgICAgLyogZnJhbWUgc2l6ZSAoYnl0ZXMpICovCisgICAgdTggICAgICB2ZW5kb3JbOF07ICAgICAgICAgICAgICAgICAgICAgIC8qIHZlbmRvciBzdHJpbmcgKi8KKyAgICB1OCAgICAgIHByb2R1Y3RbMTZdOyAgICAgICAgICAgICAgICAgICAgLyogcHJvZHVjdCBzdHJpbmcgKi8KKyAgICB1OCAgICAgIHJldmlzaW9uWzRdOyAgICAgICAgICAgICAgICAgICAgLyogcmV2aXNpb24gKi8KKyAgICB1MzIgICAgIHN5X3JhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogY3VycmVudCByYXRlIGZvciBzeW5jLiB0ci4gKi8KKyAgICB1MzIgICAgIHN5X21heF9yYXRlOyAgICAgICAgICAgICAgICAgICAgLyogbWF4LiByYXRlIGZvciBzeW5jLiB0ci4gKi8KKyAgICB1MzIgICAgIG5vX2xkcml2ZTsgICAgICAgICAgICAgICAgICAgICAgLyogYmVsb25ncyB0byB0aGlzIGxvZy4gZHJ2LiovCisgICAgdTMyICAgICBibGtjbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBibG9ja3MgKi8KKyAgICB1MTYgICAgICBibGtzaXplOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpemUgb2YgYmxvY2sgaW4gYnl0ZXMgKi8KKyAgICB1OCAgICAgIGF2YWlsYWJsZTsgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZzogYWNjZXNzIGlzIGF2YWlsYWJsZSAqLworICAgIHU4ICAgICAgaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtZWRpdW0gaXMgaW5pdGlhbGl6ZWQgKi8KKyAgICB1OCAgICAgIGRldnR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBkZXZpY2V0eXBlICovCisgICAgdTggICAgICBybV9tZWRpdW07ICAgICAgICAgICAgICAgICAgICAgIC8qIG1lZGl1bSBpcyByZW1vdmFibGUgKi8KKyAgICB1OCAgICAgIHdwX21lZGl1bTsgICAgICAgICAgICAgICAgICAgICAgLyogbWVkaXVtIGlzIHdyaXRlIHByb3RlY3RlZCAqLworICAgIHU4ICAgICAgYW5zaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIEkvSUkgb3IgSUlJPyAqLworICAgIHU4ICAgICAgcHJvdG9jb2w7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzYW1lIGFzIGFuc2kgKi8KKyAgICB1OCAgICAgIHN5bmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZzogc3luYy4gdHJhbnNmZXIgZW5hYi4gKi8KKyAgICB1OCAgICAgIGRpc2M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZzogZGlzY29ubmVjdCBlbmFibGVkICovCisgICAgdTggICAgICBxdWV1ZWluZzsgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IGNvbW1hbmQgcXVlaW5nIGVuYWIuICovCisgICAgdTggICAgICBjYWNoZWQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IGNhY2hpbmcgZW5hYmxlZCAqLworICAgIHU4ICAgICAgdGFyZ2V0X2lkOyAgICAgICAgICAgICAgICAgICAgICAvKiB0YXJnZXQgSUQgb2YgZGV2aWNlICovCisgICAgdTggICAgICBsdW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExVTiBpZCBvZiBkZXZpY2UgKi8KKyAgICB1OCAgICAgIG9ycGhhbjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmxhZzogZHJpdmUgZnJhZ21lbnQgKi8KKyAgICB1MzIgICAgIGxhc3RfZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgLyogc2Vuc2Uga2V5IG9yIGRyaXZlIHN0YXRlICovCisgICAgdTMyICAgICBsYXN0X3Jlc3VsdDsgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VsdCBvZiBsYXN0IGNvbW1hbmQgKi8KKyAgICB1MzIgICAgIGNoZWNrX2Vycm9yczsgICAgICAgICAgICAgICAgICAgLyogZXJyLiBpbiBsYXN0IHN1cmZhY2UgY2hlY2sgKi8KKyAgICB1OCAgICAgIHBlcmNlbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvZ3Jlc3MgZm9yIHN1cmZhY2UgY2hlY2sgKi8KKyAgICB1OCAgICAgIGxhc3RfY2hlY2s7ICAgICAgICAgICAgICAgICAgICAgLyogSU9DVFJMIG9wZXJhdGlvbiAqLworICAgIHU4ICAgICAgcmVzWzJdOworICAgIHUzMiAgICAgZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmcm9tIDEuMTkvMi4xOTogcmF3IHJlc2Vydi4qLworICAgIHU4ICAgICAgbXVsdGlfYnVzOyAgICAgICAgICAgICAgICAgICAgICAvKiBtdWx0aSBidXMgZGV2PyAoZmlicmUgY2guKSAqLworICAgIHU4ICAgICAgbWJfc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAvKiBzdGF0dXM6IGF2YWlsYWJsZT8gKi8KKyAgICB1OCAgICAgIHJlczJbMl07CisgICAgdTggICAgICBtYl9hbHRfc3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qIHN0YXR1cyBvbiBzZWNvbmQgYnVzICovCisgICAgdTggICAgICBtYl9hbHRfYmlkOyAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBzZWNvbmQgYnVzICovCisgICAgdTggICAgICBtYl9hbHRfdGlkOyAgICAgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBpZCBvbiBzZWNvbmQgYnVzICovCisgICAgdTggICAgICByZXMzOworICAgIHU4ICAgICAgZmNfZmxhZzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBmcm9tIDEuMjIvMi4yMjogaW5mbyB2YWxpZD8qLworICAgIHU4ICAgICAgcmVzNDsKKyAgICB1MTYgICAgICBmY19mcmFtZV9zaXplOyAgICAgICAgICAgICAgICAgIC8qIGZyYW1lIHNpemUgKGJ5dGVzKSAqLwogICAgIGNoYXIgICAgICAgIHd3bls4XTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogd29ybGQgd2lkZSBuYW1lICovCi19IFBBQ0tFRCBnZHRoX2Rpc2tpbmZvX3N0cjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9kaXNraW5mb19zdHI7CiAKIC8qIGdldCBTQ1NJIGNoYW5uZWwgY291bnQgICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgY2hhbm5lbF9ubzsgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY2hhbm5lbCAqLwotICAgIHVsb25nMzIgICAgIGRyaXZlX2NudDsgICAgICAgICAgICAgICAgICAgICAgLyogZHJpdmUgY291bnQgKi8KLSAgICB1bmNoYXIgICAgICBzaW9wX2lkOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgcHJvY2Vzc29yIElEICovCi0gICAgdW5jaGFyICAgICAgc2lvcF9zdGF0ZTsgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIHByb2Nlc3NvciBzdGF0ZSAqLyAKLX0gUEFDS0VEIGdkdGhfZ2V0Y2hfc3RyOworICAgIHUzMiAgICAgY2hhbm5lbF9ubzsgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY2hhbm5lbCAqLworICAgIHUzMiAgICAgZHJpdmVfY250OyAgICAgICAgICAgICAgICAgICAgICAvKiBkcml2ZSBjb3VudCAqLworICAgIHU4ICAgICAgc2lvcF9pZDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIHByb2Nlc3NvciBJRCAqLworICAgIHU4ICAgICAgc2lvcF9zdGF0ZTsgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIHByb2Nlc3NvciBzdGF0ZSAqLyAKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9nZXRjaF9zdHI7CiAKIC8qIGdldCBTQ1NJIGRyaXZlIG51bWJlcnMgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBzY19ubzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgY2hhbm5lbCAqLwotICAgIHVsb25nMzIgICAgIHNjX2NudDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NfbGlzdFtdIGVsZW1lbnRzICovCi0gICAgdWxvbmczMiAgICAgc2NfbGlzdFtNQVhJRF07ICAgICAgICAgICAgICAgICAvKiBtaW5vciBkZXZpY2UgbnVtYmVycyAqLwotfSBQQUNLRUQgZ2R0aF9kcmxpc3Rfc3RyOworICAgIHUzMiAgICAgc2Nfbm87ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGNoYW5uZWwgKi8KKyAgICB1MzIgICAgIHNjX2NudDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2NfbGlzdFtdIGVsZW1lbnRzICovCisgICAgdTMyICAgICBzY19saXN0W01BWElEXTsgICAgICAgICAgICAgICAgIC8qIG1pbm9yIGRldmljZSBudW1iZXJzICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfZHJsaXN0X3N0cjsKIAogLyogZ2V0IGdyb3duL3ByaW1hcnkgZGVmZWN0IGNvdW50ICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgc2RkY190eXBlOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4OiBncm93biwgMHgxMDogcHJpbS4gKi8KLSAgICB1bmNoYXIgICAgICBzZGRjX2Zvcm1hdDsgICAgICAgICAgICAgICAgICAgIC8qIGxpc3QgZW50cnkgZm9ybWF0ICovCi0gICAgdW5jaGFyICAgICAgc2RkY19sZW47ICAgICAgICAgICAgICAgICAgICAgICAvKiBsaXN0IGVudHJ5IGxlbmd0aCAqLwotICAgIHVuY2hhciAgICAgIHNkZGNfcmVzOwotICAgIHVsb25nMzIgICAgIHNkZGNfY250OyAgICAgICAgICAgICAgICAgICAgICAgLyogZW50cnkgY291bnQgKi8KLX0gUEFDS0VEIGdkdGhfZGVmY250X3N0cjsKKyAgICB1OCAgICAgIHNkZGNfdHlwZTsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwODogZ3Jvd24sIDB4MTA6IHByaW0uICovCisgICAgdTggICAgICBzZGRjX2Zvcm1hdDsgICAgICAgICAgICAgICAgICAgIC8qIGxpc3QgZW50cnkgZm9ybWF0ICovCisgICAgdTggICAgICBzZGRjX2xlbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIGxpc3QgZW50cnkgbGVuZ3RoICovCisgICAgdTggICAgICBzZGRjX3JlczsKKyAgICB1MzIgICAgIHNkZGNfY250OyAgICAgICAgICAgICAgICAgICAgICAgLyogZW50cnkgY291bnQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9kZWZjbnRfc3RyOwogCiAvKiBkaXNrIHN0YXRpc3RpY3MgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBiaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgY2hhbm5lbCAqLwotICAgIHVsb25nMzIgICAgIGZpcnN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgU0NTSSBkaXNrICovCi0gICAgdWxvbmczMiAgICAgZW50cmllczsgICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZWxlbWVudHMgKi8KLSAgICB1bG9uZzMyICAgICBjb3VudDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChSKSBudW1iZXIgb2YgaW5pdC4gZWwuICovCi0gICAgdWxvbmczMiAgICAgbW9uX3RpbWU7ICAgICAgICAgICAgICAgICAgICAgICAvKiB0aW1lIHN0YW1wICovCisgICAgdTMyICAgICBiaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgY2hhbm5lbCAqLworICAgIHUzMiAgICAgZmlyc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXJzdCBTQ1NJIGRpc2sgKi8KKyAgICB1MzIgICAgIGVudHJpZXM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGVsZW1lbnRzICovCisgICAgdTMyICAgICBjb3VudDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChSKSBudW1iZXIgb2YgaW5pdC4gZWwuICovCisgICAgdTMyICAgICBtb25fdGltZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHRpbWUgc3RhbXAgKi8KICAgICBzdHJ1Y3QgewotICAgICAgICB1bmNoYXIgIHRpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGFyZ2V0IElEICovCi0gICAgICAgIHVuY2hhciAgbHVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMVU4gKi8KLSAgICAgICAgdW5jaGFyICByZXNbMl07Ci0gICAgICAgIHVsb25nMzIgYmxrX3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBibG9jayBzaXplIGluIGJ5dGVzICovCi0gICAgICAgIHVsb25nMzIgcmRfY291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBieXRlcyByZWFkICovCi0gICAgICAgIHVsb25nMzIgd3JfY291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBieXRlcyB3cml0dGVuICovCi0gICAgICAgIHVsb25nMzIgcmRfYmxrX2NvdW50OyAgICAgICAgICAgICAgICAgICAvKiBibG9ja3MgcmVhZCAqLwotICAgICAgICB1bG9uZzMyIHdyX2Jsa19jb3VudDsgICAgICAgICAgICAgICAgICAgLyogYmxvY2tzIHdyaXR0ZW4gKi8KLSAgICAgICAgdWxvbmczMiByZXRyaWVzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHJpZXMgKi8KLSAgICAgICAgdWxvbmczMiByZWFzc2lnbnM7ICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYXNzaWducyAqLwotICAgIH0gUEFDS0VEIGxpc3RbMV07Ci19IFBBQ0tFRCBnZHRoX2Rza3N0YXRfc3RyOworICAgICAgICB1OCAgdGlkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0YXJnZXQgSUQgKi8KKyAgICAgICAgdTggIGx1bjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTFVOICovCisgICAgICAgIHU4ICByZXNbMl07CisgICAgICAgIHUzMiBibGtfc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGJsb2NrIHNpemUgaW4gYnl0ZXMgKi8KKyAgICAgICAgdTMyIHJkX2NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgLyogYnl0ZXMgcmVhZCAqLworICAgICAgICB1MzIgd3JfY291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBieXRlcyB3cml0dGVuICovCisgICAgICAgIHUzMiByZF9ibGtfY291bnQ7ICAgICAgICAgICAgICAgICAgIC8qIGJsb2NrcyByZWFkICovCisgICAgICAgIHUzMiB3cl9ibGtfY291bnQ7ICAgICAgICAgICAgICAgICAgIC8qIGJsb2NrcyB3cml0dGVuICovCisgICAgICAgIHUzMiByZXRyaWVzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHJpZXMgKi8KKyAgICAgICAgdTMyIHJlYXNzaWduczsgICAgICAgICAgICAgICAgICAgICAgLyogcmVhc3NpZ25zICovCisgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBsaXN0WzFdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2Rza3N0YXRfc3RyOwogCiAvKiBJTyBjaGFubmVsIGhlYWRlciAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIHZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgICAgLyogdmVyc2lvbiAoLTFVTDogbmV3ZXN0KSAqLwotICAgIHVuY2hhciAgICAgIGxpc3RfZW50cmllczsgICAgICAgICAgICAgICAgICAgLyogbGlzdCBlbnRyeSBjb3VudCAqLwotICAgIHVuY2hhciAgICAgIGZpcnN0X2NoYW47ICAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgY2hhbm5lbCBudW1iZXIgKi8KLSAgICB1bmNoYXIgICAgICBsYXN0X2NoYW47ICAgICAgICAgICAgICAgICAgICAgIC8qIGxhc3QgY2hhbm5lbCBudW1iZXIgKi8KLSAgICB1bmNoYXIgICAgICBjaGFuX2NvdW50OyAgICAgICAgICAgICAgICAgICAgIC8qIChSKSBjaGFubmVsIGNvdW50ICovCi0gICAgdWxvbmczMiAgICAgbGlzdF9vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQgb2YgbGlzdFswXSAqLwotfSBQQUNLRUQgZ2R0aF9pb2NoYW5faGVhZGVyOworICAgIHUzMiAgICAgdmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiB2ZXJzaW9uICgtMVVMOiBuZXdlc3QpICovCisgICAgdTggICAgICBsaXN0X2VudHJpZXM7ICAgICAgICAgICAgICAgICAgIC8qIGxpc3QgZW50cnkgY291bnQgKi8KKyAgICB1OCAgICAgIGZpcnN0X2NoYW47ICAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgY2hhbm5lbCBudW1iZXIgKi8KKyAgICB1OCAgICAgIGxhc3RfY2hhbjsgICAgICAgICAgICAgICAgICAgICAgLyogbGFzdCBjaGFubmVsIG51bWJlciAqLworICAgIHU4ICAgICAgY2hhbl9jb3VudDsgICAgICAgICAgICAgICAgICAgICAvKiAoUikgY2hhbm5lbCBjb3VudCAqLworICAgIHUzMiAgICAgbGlzdF9vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQgb2YgbGlzdFswXSAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2lvY2hhbl9oZWFkZXI7CiAKIC8qIGdldCBJTyBjaGFubmVsIGRlc2NyaXB0aW9uICovCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgZ2R0aF9pb2NoYW5faGVhZGVyICBoZHI7CiAgICAgc3RydWN0IHsKLSAgICAgICAgdWxvbmczMiAgICAgICAgIGFkZHJlc3M7ICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgYWRkcmVzcyAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgdHlwZTsgICAgICAgICAgICAgICAgICAgLyogdHlwZSAoU0NTSSwgRkNBTCkgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGxvY2FsX25vOyAgICAgICAgICAgICAgIC8qIGxvY2FsIG51bWJlciAqLwotICAgICAgICB1c2hvcnQgICAgICAgICAgZmVhdHVyZXM7ICAgICAgICAgICAgICAgLyogY2hhbm5lbCBmZWF0dXJlcyAqLwotICAgIH0gUEFDS0VEIGxpc3RbTUFYQlVTXTsKLX0gUEFDS0VEIGdkdGhfaW9jaGFuX3N0cjsKKyAgICAgICAgdTMyICAgICAgICAgYWRkcmVzczsgICAgICAgICAgICAgICAgLyogY2hhbm5lbCBhZGRyZXNzICovCisgICAgICAgIHU4ICAgICAgICAgIHR5cGU7ICAgICAgICAgICAgICAgICAgIC8qIHR5cGUgKFNDU0ksIEZDQUwpICovCisgICAgICAgIHU4ICAgICAgICAgIGxvY2FsX25vOyAgICAgICAgICAgICAgIC8qIGxvY2FsIG51bWJlciAqLworICAgICAgICB1MTYgICAgICAgICAgZmVhdHVyZXM7ICAgICAgICAgICAgICAgLyogY2hhbm5lbCBmZWF0dXJlcyAqLworICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbGlzdFtNQVhCVVNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2lvY2hhbl9zdHI7CiAKIC8qIGdldCByYXcgSU8gY2hhbm5lbCBkZXNjcmlwdGlvbiAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGdkdGhfaW9jaGFuX2hlYWRlciAgaGRyOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuY2hhciAgICAgIHByb2NfaWQ7ICAgICAgICAgICAgICAgICAgICAvKiBwcm9jZXNzb3IgaWQgKi8KLSAgICAgICAgdW5jaGFyICAgICAgcHJvY19kZWZlY3Q7ICAgICAgICAgICAgICAgIC8qIGRlZmVjdCA/ICovCi0gICAgICAgIHVuY2hhciAgICAgIHJlc2VydmVkWzJdOwotICAgIH0gUEFDS0VEIGxpc3RbTUFYQlVTXTsKLX0gUEFDS0VEIGdkdGhfcmF3X2lvY2hhbl9zdHI7CisgICAgICAgIHU4ICAgICAgcHJvY19pZDsgICAgICAgICAgICAgICAgICAgIC8qIHByb2Nlc3NvciBpZCAqLworICAgICAgICB1OCAgICAgIHByb2NfZGVmZWN0OyAgICAgICAgICAgICAgICAvKiBkZWZlY3QgPyAqLworICAgICAgICB1OCAgICAgIHJlc2VydmVkWzJdOworICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbGlzdFtNQVhCVVNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX3Jhd19pb2NoYW5fc3RyOwogCiAvKiBhcnJheSBkcml2ZSBjb21wb25lbnQgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBhbF9jb250cm9sbGVyOyAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgSUQgKi8KLSAgICB1bmNoYXIgICAgICBhbF9jYWNoZV9kcml2ZTsgICAgICAgICAgICAgICAgIC8qIGNhY2hlIGRyaXZlIG51bWJlciAqLwotICAgIHVuY2hhciAgICAgIGFsX3N0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgZHJpdmUgc3RhdGUgKi8KLSAgICB1bmNoYXIgICAgICBhbF9yZXNbMl07ICAgICAKLX0gUEFDS0VEIGdkdGhfYXJyYXljb21wX3N0cjsKKyAgICB1MzIgICAgIGFsX2NvbnRyb2xsZXI7ICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBJRCAqLworICAgIHU4ICAgICAgYWxfY2FjaGVfZHJpdmU7ICAgICAgICAgICAgICAgICAvKiBjYWNoZSBkcml2ZSBudW1iZXIgKi8KKyAgICB1OCAgICAgIGFsX3N0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgZHJpdmUgc3RhdGUgKi8KKyAgICB1OCAgICAgIGFsX3Jlc1syXTsgICAgIAorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2FycmF5Y29tcF9zdHI7CiAKIC8qIGFycmF5IGRyaXZlIGluZm9ybWF0aW9uICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgYWlfdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBhcnJheSB0eXBlIChSQUlEMCw0LDUpICovCi0gICAgdW5jaGFyICAgICAgYWlfY2FjaGVfZHJpdmVfY250OyAgICAgICAgICAgICAvKiBhY3RpdmUgY2FjaGVkcml2ZXMgKi8KLSAgICB1bmNoYXIgICAgICBhaV9zdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGFycmF5IGRyaXZlIHN0YXRlICovCi0gICAgdW5jaGFyICAgICAgYWlfbWFzdGVyX2NkOyAgICAgICAgICAgICAgICAgICAvKiBtYXN0ZXIgY2FjaGVkcml2ZSAqLwotICAgIHVsb25nMzIgICAgIGFpX21hc3Rlcl9jb250cm9sbGVyOyAgICAgICAgICAgLyogSUQgb2YgbWFzdGVyIGNvbnRyb2xsZXIgKi8KLSAgICB1bG9uZzMyICAgICBhaV9zaXplOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVzZXIgY2FwYWNpdHkgW3NlY3RvcnNdICovCi0gICAgdWxvbmczMiAgICAgYWlfc3RyaXBpbmdfc2l6ZTsgICAgICAgICAgICAgICAvKiBzdHJpcGluZyBzaXplIFtzZWN0b3JzXSAqLwotICAgIHVsb25nMzIgICAgIGFpX3NlY3NpemU7ICAgICAgICAgICAgICAgICAgICAgLyogc2VjdG9yIHNpemUgW2J5dGVzXSAqLwotICAgIHVsb25nMzIgICAgIGFpX2Vycl9pbmZvOyAgICAgICAgICAgICAgICAgICAgLyogZmFpbGVkIGNhY2hlIGRyaXZlICovCi0gICAgdW5jaGFyICAgICAgYWlfbmFtZVs4XTsgICAgICAgICAgICAgICAgICAgICAvKiBuYW1lIG9mIHRoZSBhcnJheSBkcml2ZSAqLwotICAgIHVuY2hhciAgICAgIGFpX2NvbnRyb2xsZXJfY250OyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvbnRyb2xsZXJzICovCi0gICAgdW5jaGFyICAgICAgYWlfcmVtb3ZhYmxlOyAgICAgICAgICAgICAgICAgICAvKiBmbGFnOiByZW1vdmFibGUgKi8KLSAgICB1bmNoYXIgICAgICBhaV93cml0ZV9wcm90ZWN0ZWQ7ICAgICAgICAgICAgIC8qIGZsYWc6IHdyaXRlIHByb3RlY3RlZCAqLwotICAgIHVuY2hhciAgICAgIGFpX2RldnR5cGU7ICAgICAgICAgICAgICAgICAgICAgLyogdHlwZTogYWx3YXlzIGRpcmVjdCBhY2Nlc3MgKi8KKyAgICB1OCAgICAgIGFpX3R5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogYXJyYXkgdHlwZSAoUkFJRDAsNCw1KSAqLworICAgIHU4ICAgICAgYWlfY2FjaGVfZHJpdmVfY250OyAgICAgICAgICAgICAvKiBhY3RpdmUgY2FjaGVkcml2ZXMgKi8KKyAgICB1OCAgICAgIGFpX3N0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgLyogYXJyYXkgZHJpdmUgc3RhdGUgKi8KKyAgICB1OCAgICAgIGFpX21hc3Rlcl9jZDsgICAgICAgICAgICAgICAgICAgLyogbWFzdGVyIGNhY2hlZHJpdmUgKi8KKyAgICB1MzIgICAgIGFpX21hc3Rlcl9jb250cm9sbGVyOyAgICAgICAgICAgLyogSUQgb2YgbWFzdGVyIGNvbnRyb2xsZXIgKi8KKyAgICB1MzIgICAgIGFpX3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogdXNlciBjYXBhY2l0eSBbc2VjdG9yc10gKi8KKyAgICB1MzIgICAgIGFpX3N0cmlwaW5nX3NpemU7ICAgICAgICAgICAgICAgLyogc3RyaXBpbmcgc2l6ZSBbc2VjdG9yc10gKi8KKyAgICB1MzIgICAgIGFpX3NlY3NpemU7ICAgICAgICAgICAgICAgICAgICAgLyogc2VjdG9yIHNpemUgW2J5dGVzXSAqLworICAgIHUzMiAgICAgYWlfZXJyX2luZm87ICAgICAgICAgICAgICAgICAgICAvKiBmYWlsZWQgY2FjaGUgZHJpdmUgKi8KKyAgICB1OCAgICAgIGFpX25hbWVbOF07ICAgICAgICAgICAgICAgICAgICAgLyogbmFtZSBvZiB0aGUgYXJyYXkgZHJpdmUgKi8KKyAgICB1OCAgICAgIGFpX2NvbnRyb2xsZXJfY250OyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvbnRyb2xsZXJzICovCisgICAgdTggICAgICBhaV9yZW1vdmFibGU7ICAgICAgICAgICAgICAgICAgIC8qIGZsYWc6IHJlbW92YWJsZSAqLworICAgIHU4ICAgICAgYWlfd3JpdGVfcHJvdGVjdGVkOyAgICAgICAgICAgICAvKiBmbGFnOiB3cml0ZSBwcm90ZWN0ZWQgKi8KKyAgICB1OCAgICAgIGFpX2RldnR5cGU7ICAgICAgICAgICAgICAgICAgICAgLyogdHlwZTogYWx3YXlzIGRpcmVjdCBhY2Nlc3MgKi8KICAgICBnZHRoX2FycmF5Y29tcF9zdHIgIGFpX2RyaXZlc1szNV07ICAgICAgICAgIC8qIGRyaXZlIGNvbXBvbmVudHM6ICovCi0gICAgdW5jaGFyICAgICAgYWlfZHJpdmVfZW50cmllczsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZHJpdmUgY29tcG9uZW50cyAqLwotICAgIHVuY2hhciAgICAgIGFpX3Byb3RlY3RlZDsgICAgICAgICAgICAgICAgICAgLyogcHJvdGVjdGlvbiBmbGFnICovCi0gICAgdW5jaGFyICAgICAgYWlfdmVyaWZ5X3N0YXRlOyAgICAgICAgICAgICAgICAvKiBzdGF0ZSBvZiBhIHBhcml0eSB2ZXJpZnkgKi8KLSAgICB1bmNoYXIgICAgICBhaV9leHRfc3RhdGU7ICAgICAgICAgICAgICAgICAgIC8qIGV4dGVuZGVkIGFycmF5IGRyaXZlIHN0YXRlICovCi0gICAgdW5jaGFyICAgICAgYWlfZXhwYW5kX3N0YXRlOyAgICAgICAgICAgICAgICAvKiBhcnJheSBleHBhbmQgc3RhdGUgKD49Mi4xOCkqLwotICAgIHVuY2hhciAgICAgIGFpX3Jlc2VydmVkWzNdOwotfSBQQUNLRUQgZ2R0aF9hcnJheWluZl9zdHI7CisgICAgdTggICAgICBhaV9kcml2ZV9lbnRyaWVzOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBkcml2ZSBjb21wb25lbnRzICovCisgICAgdTggICAgICBhaV9wcm90ZWN0ZWQ7ICAgICAgICAgICAgICAgICAgIC8qIHByb3RlY3Rpb24gZmxhZyAqLworICAgIHU4ICAgICAgYWlfdmVyaWZ5X3N0YXRlOyAgICAgICAgICAgICAgICAvKiBzdGF0ZSBvZiBhIHBhcml0eSB2ZXJpZnkgKi8KKyAgICB1OCAgICAgIGFpX2V4dF9zdGF0ZTsgICAgICAgICAgICAgICAgICAgLyogZXh0ZW5kZWQgYXJyYXkgZHJpdmUgc3RhdGUgKi8KKyAgICB1OCAgICAgIGFpX2V4cGFuZF9zdGF0ZTsgICAgICAgICAgICAgICAgLyogYXJyYXkgZXhwYW5kIHN0YXRlICg+PTIuMTgpKi8KKyAgICB1OCAgICAgIGFpX3Jlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2FycmF5aW5mX3N0cjsKIAogLyogZ2V0IGFycmF5IGRyaXZlIGxpc3QgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBjb250cm9sbGVyX25vOyAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbm8uICovCi0gICAgdW5jaGFyICAgICAgY2RfaGFuZGxlOyAgICAgICAgICAgICAgICAgICAgICAvKiBtYXN0ZXIgY2FjaGVkcml2ZSAqLwotICAgIHVuY2hhciAgICAgIGlzX2FycmF5ZDsgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZzogaXMgYXJyYXkgZHJpdmU/ICovCi0gICAgdW5jaGFyICAgICAgaXNfbWFzdGVyOyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnOiBpcyBhcnJheSBtYXN0ZXI/ICovCi0gICAgdW5jaGFyICAgICAgaXNfcGFyaXR5OyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnOiBpcyBwYXJpdHkgZHJpdmU/ICovCi0gICAgdW5jaGFyICAgICAgaXNfaG90Zml4OyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnOiBpcyBob3RmaXggZHJpdmU/ICovCi0gICAgdW5jaGFyICAgICAgcmVzWzNdOwotfSBQQUNLRUQgZ2R0aF9hbGlzdF9zdHI7CisgICAgdTMyICAgICBjb250cm9sbGVyX25vOyAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbm8uICovCisgICAgdTggICAgICBjZF9oYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIG1hc3RlciBjYWNoZWRyaXZlICovCisgICAgdTggICAgICBpc19hcnJheWQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWc6IGlzIGFycmF5IGRyaXZlPyAqLworICAgIHU4ICAgICAgaXNfbWFzdGVyOyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnOiBpcyBhcnJheSBtYXN0ZXI/ICovCisgICAgdTggICAgICBpc19wYXJpdHk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWc6IGlzIHBhcml0eSBkcml2ZT8gKi8KKyAgICB1OCAgICAgIGlzX2hvdGZpeDsgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZzogaXMgaG90Zml4IGRyaXZlPyAqLworICAgIHU4ICAgICAgcmVzWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2FsaXN0X3N0cjsKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIGVudHJpZXNfYXZhaWw7ICAgICAgICAgICAgICAgICAgLyogYWxsb2NhdGVkIGVudHJpZXMgKi8KLSAgICB1bG9uZzMyICAgICBlbnRyaWVzX2luaXQ7ICAgICAgICAgICAgICAgICAgIC8qIHJldHVybmVkIGVudHJpZXMgKi8KLSAgICB1bG9uZzMyICAgICBmaXJzdF9lbnRyeTsgICAgICAgICAgICAgICAgICAgIC8qIGZpcnN0IGVudHJ5IG51bWJlciAqLwotICAgIHVsb25nMzIgICAgIGxpc3Rfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0IG9mIGZvbGxvd2luZyBsaXN0ICovCisgICAgdTMyICAgICBlbnRyaWVzX2F2YWlsOyAgICAgICAgICAgICAgICAgIC8qIGFsbG9jYXRlZCBlbnRyaWVzICovCisgICAgdTMyICAgICBlbnRyaWVzX2luaXQ7ICAgICAgICAgICAgICAgICAgIC8qIHJldHVybmVkIGVudHJpZXMgKi8KKyAgICB1MzIgICAgIGZpcnN0X2VudHJ5OyAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgZW50cnkgbnVtYmVyICovCisgICAgdTMyICAgICBsaXN0X29mZnNldDsgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldCBvZiBmb2xsb3dpbmcgbGlzdCAqLwogICAgIGdkdGhfYWxpc3Rfc3RyIGxpc3RbMV07ICAgICAgICAgICAgICAgICAgICAgLyogbGlzdCAqLwotfSBQQUNLRUQgZ2R0aF9hcmNkbF9zdHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfYXJjZGxfc3RyOwogCiAvKiBjYWNoZSBpbmZvL2NvbmZpZyBJT0NUTCAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIHZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgICAgLyogZmlybXdhcmUgdmVyc2lvbiAqLwotICAgIHVzaG9ydCAgICAgIHN0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc3RhdGUgKG9uL29mZikgKi8KLSAgICB1c2hvcnQgICAgICBzdHJhdGVneTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGNhY2hlIHN0cmF0ZWd5ICovCi0gICAgdXNob3J0ICAgICAgd3JpdGVfYmFjazsgICAgICAgICAgICAgICAgICAgICAvKiB3cml0ZSBiYWNrIHN0YXRlIChvbi9vZmYpICovCi0gICAgdXNob3J0ICAgICAgYmxvY2tfc2l6ZTsgICAgICAgICAgICAgICAgICAgICAvKiBjYWNoZSBibG9jayBzaXplICovCi19IFBBQ0tFRCBnZHRoX2NwYXJfc3RyOworICAgIHUzMiAgICAgdmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXJtd2FyZSB2ZXJzaW9uICovCisgICAgdTE2ICAgICAgc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjYWNoZSBzdGF0ZSAob24vb2ZmKSAqLworICAgIHUxNiAgICAgIHN0cmF0ZWd5OyAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc3RyYXRlZ3kgKi8KKyAgICB1MTYgICAgICB3cml0ZV9iYWNrOyAgICAgICAgICAgICAgICAgICAgIC8qIHdyaXRlIGJhY2sgc3RhdGUgKG9uL29mZikgKi8KKyAgICB1MTYgICAgICBibG9ja19zaXplOyAgICAgICAgICAgICAgICAgICAgIC8qIGNhY2hlIGJsb2NrIHNpemUgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9jcGFyX3N0cjsKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIGNzaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc2l6ZSAqLwotICAgIHVsb25nMzIgICAgIHJlYWRfY250OyAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZC93cml0ZSBjb3VudGVyICovCi0gICAgdWxvbmczMiAgICAgd3JpdGVfY250OwotICAgIHVsb25nMzIgICAgIHRyX2hpdHM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogaGl0cyAqLwotICAgIHVsb25nMzIgICAgIHNlY19oaXRzOwotICAgIHVsb25nMzIgICAgIHNlY19taXNzOyAgICAgICAgICAgICAgICAgICAgICAgLyogbWlzc2VzICovCi19IFBBQ0tFRCBnZHRoX2NzdGF0X3N0cjsKKyAgICB1MzIgICAgIGNzaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc2l6ZSAqLworICAgIHUzMiAgICAgcmVhZF9jbnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkL3dyaXRlIGNvdW50ZXIgKi8KKyAgICB1MzIgICAgIHdyaXRlX2NudDsKKyAgICB1MzIgICAgIHRyX2hpdHM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogaGl0cyAqLworICAgIHUzMiAgICAgc2VjX2hpdHM7CisgICAgdTMyICAgICBzZWNfbWlzczsgICAgICAgICAgICAgICAgICAgICAgIC8qIG1pc3NlcyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2NzdGF0X3N0cjsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGdkdGhfY3Bhcl9zdHIgICBjcGFyOwogICAgIGdkdGhfY3N0YXRfc3RyICBjc3RhdDsKLX0gUEFDS0VEIGdkdGhfY2luZm9fc3RyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2NpbmZvX3N0cjsKIAogLyogY2FjaGUgZHJpdmUgaW5mbyAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVuY2hhciAgICAgIGNkX25hbWVbOF07ICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgZHJpdmUgbmFtZSAqLwotICAgIHVsb25nMzIgICAgIGNkX2RldnR5cGU7ICAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBkZXZpY2V0eXBlICovCi0gICAgdWxvbmczMiAgICAgY2RfbGRjbnQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgbG9nLiBkcml2ZXMgKi8KLSAgICB1bG9uZzMyICAgICBjZF9sYXN0X2Vycm9yOyAgICAgICAgICAgICAgICAgIC8qIGxhc3QgZXJyb3IgKi8KLSAgICB1bmNoYXIgICAgICBjZF9pbml0aWFsaXplZDsgICAgICAgICAgICAgICAgIC8qIGRyaXZlIGlzIGluaXRpYWxpemVkICovCi0gICAgdW5jaGFyICAgICAgY2RfcmVtb3ZhYmxlOyAgICAgICAgICAgICAgICAgICAvKiBtZWRpYSBpcyByZW1vdmFibGUgKi8KLSAgICB1bmNoYXIgICAgICBjZF93cml0ZV9wcm90ZWN0ZWQ7ICAgICAgICAgICAgIC8qIHdyaXRlIHByb3RlY3RlZCAqLwotICAgIHVuY2hhciAgICAgIGNkX2ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogUG9vbCBIb3QgRml4PyAqLwotICAgIHVsb25nMzIgICAgIGxkX2Jsa2NudDsgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGJsb2NrcyAqLwotICAgIHVsb25nMzIgICAgIGxkX2Jsa3NpemU7ICAgICAgICAgICAgICAgICAgICAgLyogYmxvY2tzaXplICovCi0gICAgdWxvbmczMiAgICAgbGRfZGNudDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZGlza3MgKi8KLSAgICB1bG9uZzMyICAgICBsZF9zbGF2ZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvZy4gZHJpdmUgaW5kZXggKi8KLSAgICB1bG9uZzMyICAgICBsZF9kdHlwZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHR5cGUgb2YgbG9naWNhbCBkcml2ZSAqLwotICAgIHVsb25nMzIgICAgIGxkX2xhc3RfZXJyb3I7ICAgICAgICAgICAgICAgICAgLyogbGFzdCBlcnJvciAqLwotICAgIHVuY2hhciAgICAgIGxkX25hbWVbOF07ICAgICAgICAgICAgICAgICAgICAgLyogbG9nLiBkcml2ZSBuYW1lICovCi0gICAgdW5jaGFyICAgICAgbGRfZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAvKiBlcnJvciAqLwotfSBQQUNLRUQgZ2R0aF9jZHJpbmZvX3N0cjsKKyAgICB1OCAgICAgIGNkX25hbWVbOF07ICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgZHJpdmUgbmFtZSAqLworICAgIHUzMiAgICAgY2RfZGV2dHlwZTsgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGRldmljZXR5cGUgKi8KKyAgICB1MzIgICAgIGNkX2xkY250OyAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGxvZy4gZHJpdmVzICovCisgICAgdTMyICAgICBjZF9sYXN0X2Vycm9yOyAgICAgICAgICAgICAgICAgIC8qIGxhc3QgZXJyb3IgKi8KKyAgICB1OCAgICAgIGNkX2luaXRpYWxpemVkOyAgICAgICAgICAgICAgICAgLyogZHJpdmUgaXMgaW5pdGlhbGl6ZWQgKi8KKyAgICB1OCAgICAgIGNkX3JlbW92YWJsZTsgICAgICAgICAgICAgICAgICAgLyogbWVkaWEgaXMgcmVtb3ZhYmxlICovCisgICAgdTggICAgICBjZF93cml0ZV9wcm90ZWN0ZWQ7ICAgICAgICAgICAgIC8qIHdyaXRlIHByb3RlY3RlZCAqLworICAgIHU4ICAgICAgY2RfZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAvKiBQb29sIEhvdCBGaXg/ICovCisgICAgdTMyICAgICBsZF9ibGtjbnQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBibG9ja3MgKi8KKyAgICB1MzIgICAgIGxkX2Jsa3NpemU7ICAgICAgICAgICAgICAgICAgICAgLyogYmxvY2tzaXplICovCisgICAgdTMyICAgICBsZF9kY250OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBkaXNrcyAqLworICAgIHUzMiAgICAgbGRfc2xhdmU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2cuIGRyaXZlIGluZGV4ICovCisgICAgdTMyICAgICBsZF9kdHlwZTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHR5cGUgb2YgbG9naWNhbCBkcml2ZSAqLworICAgIHUzMiAgICAgbGRfbGFzdF9lcnJvcjsgICAgICAgICAgICAgICAgICAvKiBsYXN0IGVycm9yICovCisgICAgdTggICAgICBsZF9uYW1lWzhdOyAgICAgICAgICAgICAgICAgICAgIC8qIGxvZy4gZHJpdmUgbmFtZSAqLworICAgIHU4ICAgICAgbGRfZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAvKiBlcnJvciAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2NkcmluZm9fc3RyOwogCiAvKiBPRU0gc3RyaW5nICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgY3RsX3ZlcnNpb247Ci0gICAgdWxvbmczMiAgICAgZmlsZV9tYWpvcl92ZXJzaW9uOwotICAgIHVsb25nMzIgICAgIGZpbGVfbWlub3JfdmVyc2lvbjsKLSAgICB1bG9uZzMyICAgICBidWZmZXJfc2l6ZTsKLSAgICB1bG9uZzMyICAgICBjcHlfY291bnQ7Ci0gICAgdWxvbmczMiAgICAgZXh0X2Vycm9yOwotICAgIHVsb25nMzIgICAgIG9lbV9pZDsKLSAgICB1bG9uZzMyICAgICBib2FyZF9pZDsKLX0gUEFDS0VEIGdkdGhfb2VtX3N0cl9wYXJhbXM7CisgICAgdTMyICAgICBjdGxfdmVyc2lvbjsKKyAgICB1MzIgICAgIGZpbGVfbWFqb3JfdmVyc2lvbjsKKyAgICB1MzIgICAgIGZpbGVfbWlub3JfdmVyc2lvbjsKKyAgICB1MzIgICAgIGJ1ZmZlcl9zaXplOworICAgIHUzMiAgICAgY3B5X2NvdW50OworICAgIHUzMiAgICAgZXh0X2Vycm9yOworICAgIHUzMiAgICAgb2VtX2lkOworICAgIHUzMiAgICAgYm9hcmRfaWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfb2VtX3N0cl9wYXJhbXM7CiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bmNoYXIgICAgICBwcm9kdWN0XzBfMV9uYW1lWzE2XTsKLSAgICB1bmNoYXIgICAgICBwcm9kdWN0XzRfNV9uYW1lWzE2XTsKLSAgICB1bmNoYXIgICAgICBwcm9kdWN0X2NsdXN0ZXJfbmFtZVsxNl07Ci0gICAgdW5jaGFyICAgICAgcHJvZHVjdF9yZXNlcnZlZFsxNl07Ci0gICAgdW5jaGFyICAgICAgc2NzaV9jbHVzdGVyX3RhcmdldF92ZW5kb3JfaWRbMTZdOwotICAgIHVuY2hhciAgICAgIGNsdXN0ZXJfcmFpZF9md19uYW1lWzE2XTsKLSAgICB1bmNoYXIgICAgICBvZW1fYnJhbmRfbmFtZVsxNl07Ci0gICAgdW5jaGFyICAgICAgb2VtX3JhaWRfdHlwZVsxNl07Ci0gICAgdW5jaGFyICAgICAgYmlvc190eXBlWzEzXTsKLSAgICB1bmNoYXIgICAgICBiaW9zX3RpdGxlWzUwXTsKLSAgICB1bmNoYXIgICAgICBvZW1fY29tcGFueV9uYW1lWzM3XTsKLSAgICB1bG9uZzMyICAgICBwY2lfaWRfMTsKLSAgICB1bG9uZzMyICAgICBwY2lfaWRfMjsKLSAgICB1bmNoYXIgICAgICB2YWxpZGF0aW9uX3N0YXR1c1s4MF07Ci0gICAgdW5jaGFyICAgICAgcmVzZXJ2ZWRfMVs0XTsKLSAgICB1bmNoYXIgICAgICBzY3NpX2hvc3RfZHJpdmVfaW5xdWlyeV92ZW5kb3JfaWRbMTZdOwotICAgIHVuY2hhciAgICAgIGxpYnJhcnlfZmlsZV90ZW1wbGF0ZVsxNl07Ci0gICAgdW5jaGFyICAgICAgcmVzZXJ2ZWRfMlsxNl07Ci0gICAgdW5jaGFyICAgICAgdG9vbF9uYW1lXzFbMzJdOwotICAgIHVuY2hhciAgICAgIHRvb2xfbmFtZV8yWzMyXTsKLSAgICB1bmNoYXIgICAgICB0b29sX25hbWVfM1szMl07Ci0gICAgdW5jaGFyICAgICAgb2VtX2NvbnRhY3RfMVs4NF07Ci0gICAgdW5jaGFyICAgICAgb2VtX2NvbnRhY3RfMls4NF07Ci0gICAgdW5jaGFyICAgICAgb2VtX2NvbnRhY3RfM1s4NF07Ci19IFBBQ0tFRCBnZHRoX29lbV9zdHI7CisgICAgdTggICAgICBwcm9kdWN0XzBfMV9uYW1lWzE2XTsKKyAgICB1OCAgICAgIHByb2R1Y3RfNF81X25hbWVbMTZdOworICAgIHU4ICAgICAgcHJvZHVjdF9jbHVzdGVyX25hbWVbMTZdOworICAgIHU4ICAgICAgcHJvZHVjdF9yZXNlcnZlZFsxNl07CisgICAgdTggICAgICBzY3NpX2NsdXN0ZXJfdGFyZ2V0X3ZlbmRvcl9pZFsxNl07CisgICAgdTggICAgICBjbHVzdGVyX3JhaWRfZndfbmFtZVsxNl07CisgICAgdTggICAgICBvZW1fYnJhbmRfbmFtZVsxNl07CisgICAgdTggICAgICBvZW1fcmFpZF90eXBlWzE2XTsKKyAgICB1OCAgICAgIGJpb3NfdHlwZVsxM107CisgICAgdTggICAgICBiaW9zX3RpdGxlWzUwXTsKKyAgICB1OCAgICAgIG9lbV9jb21wYW55X25hbWVbMzddOworICAgIHUzMiAgICAgcGNpX2lkXzE7CisgICAgdTMyICAgICBwY2lfaWRfMjsKKyAgICB1OCAgICAgIHZhbGlkYXRpb25fc3RhdHVzWzgwXTsKKyAgICB1OCAgICAgIHJlc2VydmVkXzFbNF07CisgICAgdTggICAgICBzY3NpX2hvc3RfZHJpdmVfaW5xdWlyeV92ZW5kb3JfaWRbMTZdOworICAgIHU4ICAgICAgbGlicmFyeV9maWxlX3RlbXBsYXRlWzE2XTsKKyAgICB1OCAgICAgIHJlc2VydmVkXzJbMTZdOworICAgIHU4ICAgICAgdG9vbF9uYW1lXzFbMzJdOworICAgIHU4ICAgICAgdG9vbF9uYW1lXzJbMzJdOworICAgIHU4ICAgICAgdG9vbF9uYW1lXzNbMzJdOworICAgIHU4ICAgICAgb2VtX2NvbnRhY3RfMVs4NF07CisgICAgdTggICAgICBvZW1fY29udGFjdF8yWzg0XTsKKyAgICB1OCAgICAgIG9lbV9jb250YWN0XzNbODRdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX29lbV9zdHI7CiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBnZHRoX29lbV9zdHJfcGFyYW1zIHBhcmFtczsKICAgICBnZHRoX29lbV9zdHIgICAgICAgIHRleHQ7Ci19IFBBQ0tFRCBnZHRoX29lbV9zdHJfaW9jdGw7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfb2VtX3N0cl9pb2N0bDsKIAogLyogYm9hcmQgZmVhdHVyZXMgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bmNoYXIgICAgICBjaGFpbmluZzsgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYWluaW5nIHN1cHBvcnRlZCAqLwotICAgIHVuY2hhciAgICAgIHN0cmlwaW5nOyAgICAgICAgICAgICAgICAgICAgICAgLyogU3RyaXBpbmcgKFJBSUQtMCkgc3VwcC4gKi8KLSAgICB1bmNoYXIgICAgICBtaXJyb3Jpbmc7ICAgICAgICAgICAgICAgICAgICAgIC8qIE1pcnJvcmluZyAoUkFJRC0xKSBzdXBwLiAqLwotICAgIHVuY2hhciAgICAgIHJhaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkFJRC00LzUvMTAgc3VwcG9ydGVkICovCi19IFBBQ0tFRCBnZHRoX2JmZWF0X3N0cjsKKyAgICB1OCAgICAgIGNoYWluaW5nOyAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhaW5pbmcgc3VwcG9ydGVkICovCisgICAgdTggICAgICBzdHJpcGluZzsgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmlwaW5nIChSQUlELTApIHN1cHAuICovCisgICAgdTggICAgICBtaXJyb3Jpbmc7ICAgICAgICAgICAgICAgICAgICAgIC8qIE1pcnJvcmluZyAoUkFJRC0xKSBzdXBwLiAqLworICAgIHU4ICAgICAgcmFpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSQUlELTQvNS8xMCBzdXBwb3J0ZWQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9iZmVhdF9zdHI7CiAKIC8qIGJvYXJkIGluZm8gSU9DVEwgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBzZXJfbm87ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlcmlhbCBuby4gKi8KLSAgICB1bmNoYXIgICAgICBvZW1faWRbMl07ICAgICAgICAgICAgICAgICAgICAgIC8qIE9FTSBJRCAqLwotICAgIHVzaG9ydCAgICAgIGVwX2ZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgLyogZXByb20gZmxhZ3MgKi8KLSAgICB1bG9uZzMyICAgICBwcm9jX2lkOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb2Nlc3NvciBJRCAqLwotICAgIHVsb25nMzIgICAgIG1lbXNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVtb3J5IHNpemUgKGJ5dGVzKSAqLwotICAgIHVuY2hhciAgICAgIG1lbV9iYW5rczsgICAgICAgICAgICAgICAgICAgICAgLyogbWVtb3J5IGJhbmtzICovCi0gICAgdW5jaGFyICAgICAgY2hhbl90eXBlOyAgICAgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsIHR5cGUgKi8KLSAgICB1bmNoYXIgICAgICBjaGFuX2NvdW50OyAgICAgICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgY291bnQgKi8KLSAgICB1bmNoYXIgICAgICByZG9uZ2xlX3ByZXM7ICAgICAgICAgICAgICAgICAgIC8qIGRvbmdsZSBwcmVzZW50PyAqLwotICAgIHVsb25nMzIgICAgIGVwcl9md192ZXI7ICAgICAgICAgICAgICAgICAgICAgLyogKGVwcm9tKSBmaXJtd2FyZSB2ZXJzaW9uICovCi0gICAgdWxvbmczMiAgICAgdXBkX2Z3X3ZlcjsgICAgICAgICAgICAgICAgICAgICAvKiAodXBkYXRlKSBmaXJtd2FyZSB2ZXJzaW9uICovCi0gICAgdWxvbmczMiAgICAgdXBkX3JldmlzaW9uOyAgICAgICAgICAgICAgICAgICAvKiB1cGRhdGUgcmV2aXNpb24gKi8KKyAgICB1MzIgICAgIHNlcl9ubzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2VyaWFsIG5vLiAqLworICAgIHU4ICAgICAgb2VtX2lkWzJdOyAgICAgICAgICAgICAgICAgICAgICAvKiBPRU0gSUQgKi8KKyAgICB1MTYgICAgICBlcF9mbGFnczsgICAgICAgICAgICAgICAgICAgICAgIC8qIGVwcm9tIGZsYWdzICovCisgICAgdTMyICAgICBwcm9jX2lkOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb2Nlc3NvciBJRCAqLworICAgIHUzMiAgICAgbWVtc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBtZW1vcnkgc2l6ZSAoYnl0ZXMpICovCisgICAgdTggICAgICBtZW1fYmFua3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIG1lbW9yeSBiYW5rcyAqLworICAgIHU4ICAgICAgY2hhbl90eXBlOyAgICAgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsIHR5cGUgKi8KKyAgICB1OCAgICAgIGNoYW5fY291bnQ7ICAgICAgICAgICAgICAgICAgICAgLyogY2hhbm5lbCBjb3VudCAqLworICAgIHU4ICAgICAgcmRvbmdsZV9wcmVzOyAgICAgICAgICAgICAgICAgICAvKiBkb25nbGUgcHJlc2VudD8gKi8KKyAgICB1MzIgICAgIGVwcl9md192ZXI7ICAgICAgICAgICAgICAgICAgICAgLyogKGVwcm9tKSBmaXJtd2FyZSB2ZXJzaW9uICovCisgICAgdTMyICAgICB1cGRfZndfdmVyOyAgICAgICAgICAgICAgICAgICAgIC8qICh1cGRhdGUpIGZpcm13YXJlIHZlcnNpb24gKi8KKyAgICB1MzIgICAgIHVwZF9yZXZpc2lvbjsgICAgICAgICAgICAgICAgICAgLyogdXBkYXRlIHJldmlzaW9uICovCiAgICAgY2hhciAgICAgICAgdHlwZV9zdHJpbmdbMTZdOyAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG5hbWUgKi8KICAgICBjaGFyICAgICAgICByYWlkX3N0cmluZ1sxNl07ICAgICAgICAgICAgICAgIC8qIFJBSUQgZmlybXdhcmUgbmFtZSAqLwotICAgIHVuY2hhciAgICAgIHVwZGF0ZV9wcmVzOyAgICAgICAgICAgICAgICAgICAgLyogdXBkYXRlIHByZXNlbnQ/ICovCi0gICAgdW5jaGFyICAgICAgeG9yX3ByZXM7ICAgICAgICAgICAgICAgICAgICAgICAvKiBYT1IgZW5naW5lIHByZXNlbnQ/ICovCi0gICAgdW5jaGFyICAgICAgcHJvbV90eXBlOyAgICAgICAgICAgICAgICAgICAgICAvKiBST00gdHlwZSAoZXByb20vZmxhc2gpICovCi0gICAgdW5jaGFyICAgICAgcHJvbV9jb3VudDsgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgUk9NIGRldmljZXMgKi8KLSAgICB1bG9uZzMyICAgICBkdXBfcHJlczsgICAgICAgICAgICAgICAgICAgICAgIC8qIGR1cGxleGluZyBtb2R1bGUgcHJlc2VudD8gKi8KLSAgICB1bG9uZzMyICAgICBjaGFuX3ByZXM7ICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBleHBhbnNpb24gY2huLiAqLwotICAgIHVsb25nMzIgICAgIG1lbV9wcmVzOyAgICAgICAgICAgICAgICAgICAgICAgLyogbWVtb3J5IGV4cGFuc2lvbiBpbnN0LiA/ICovCi0gICAgdW5jaGFyICAgICAgZnRfYnVzX3N5c3RlbTsgICAgICAgICAgICAgICAgICAvKiBmYXVsdCBidXMgc3VwcG9ydGVkPyAqLwotICAgIHVuY2hhciAgICAgIHN1YnR5cGVfdmFsaWQ7ICAgICAgICAgICAgICAgICAgLyogYm9hcmRfc3VidHlwZSB2YWxpZD8gKi8KLSAgICB1bmNoYXIgICAgICBib2FyZF9zdWJ0eXBlOyAgICAgICAgICAgICAgICAgIC8qIHN1YnR5cGUvaGFyZHdhcmUgbGV2ZWwgKi8KLSAgICB1bmNoYXIgICAgICByYW1wYXJpdHlfcHJlczsgICAgICAgICAgICAgICAgIC8qIFJBTSBwYXJpdHkgY2hlY2sgaGFyZHdhcmU/ICovCi19IFBBQ0tFRCBnZHRoX2JpbmZvX3N0cjsgCisgICAgdTggICAgICB1cGRhdGVfcHJlczsgICAgICAgICAgICAgICAgICAgIC8qIHVwZGF0ZSBwcmVzZW50PyAqLworICAgIHU4ICAgICAgeG9yX3ByZXM7ICAgICAgICAgICAgICAgICAgICAgICAvKiBYT1IgZW5naW5lIHByZXNlbnQ/ICovCisgICAgdTggICAgICBwcm9tX3R5cGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJPTSB0eXBlIChlcHJvbS9mbGFzaCkgKi8KKyAgICB1OCAgICAgIHByb21fY291bnQ7ICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIFJPTSBkZXZpY2VzICovCisgICAgdTMyICAgICBkdXBfcHJlczsgICAgICAgICAgICAgICAgICAgICAgIC8qIGR1cGxleGluZyBtb2R1bGUgcHJlc2VudD8gKi8KKyAgICB1MzIgICAgIGNoYW5fcHJlczsgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGV4cGFuc2lvbiBjaG4uICovCisgICAgdTMyICAgICBtZW1fcHJlczsgICAgICAgICAgICAgICAgICAgICAgIC8qIG1lbW9yeSBleHBhbnNpb24gaW5zdC4gPyAqLworICAgIHU4ICAgICAgZnRfYnVzX3N5c3RlbTsgICAgICAgICAgICAgICAgICAvKiBmYXVsdCBidXMgc3VwcG9ydGVkPyAqLworICAgIHU4ICAgICAgc3VidHlwZV92YWxpZDsgICAgICAgICAgICAgICAgICAvKiBib2FyZF9zdWJ0eXBlIHZhbGlkPyAqLworICAgIHU4ICAgICAgYm9hcmRfc3VidHlwZTsgICAgICAgICAgICAgICAgICAvKiBzdWJ0eXBlL2hhcmR3YXJlIGxldmVsICovCisgICAgdTggICAgICByYW1wYXJpdHlfcHJlczsgICAgICAgICAgICAgICAgIC8qIFJBTSBwYXJpdHkgY2hlY2sgaGFyZHdhcmU/ICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfYmluZm9fc3RyOyAKIAogLyogZ2V0IGhvc3QgZHJpdmUgaW5mbyAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGNoYXIgICAgICAgIG5hbWVbOF07ICAgICAgICAgICAgICAgICAgICAgICAgLyogaG9zdCBkcml2ZSBuYW1lICovCi0gICAgdWxvbmczMiAgICAgc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaXplIChzZWN0b3JzKSAqLwotICAgIHVuY2hhciAgICAgIGhvc3RfZHJpdmU7ICAgICAgICAgICAgICAgICAgICAgLyogaG9zdCBkcml2ZSBudW1iZXIgKi8KLSAgICB1bmNoYXIgICAgICBsb2dfZHJpdmU7ICAgICAgICAgICAgICAgICAgICAgIC8qIGxvZy4gZHJpdmUgKG1hc3RlcikgKi8KLSAgICB1bmNoYXIgICAgICByZXNlcnZlZDsKLSAgICB1bmNoYXIgICAgICByd19hdHRyaWJzOyAgICAgICAgICAgICAgICAgICAgIC8qIHIvdyBhdHRyaWJzICovCi0gICAgdWxvbmczMiAgICAgc3RhcnRfc2VjOyAgICAgICAgICAgICAgICAgICAgICAvKiBzdGFydCBzZWN0b3IgKi8KLX0gUEFDS0VEIGdkdGhfaGVudHJ5X3N0cjsKKyAgICB1MzIgICAgIHNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSAoc2VjdG9ycykgKi8KKyAgICB1OCAgICAgIGhvc3RfZHJpdmU7ICAgICAgICAgICAgICAgICAgICAgLyogaG9zdCBkcml2ZSBudW1iZXIgKi8KKyAgICB1OCAgICAgIGxvZ19kcml2ZTsgICAgICAgICAgICAgICAgICAgICAgLyogbG9nLiBkcml2ZSAobWFzdGVyKSAqLworICAgIHU4ICAgICAgcmVzZXJ2ZWQ7CisgICAgdTggICAgICByd19hdHRyaWJzOyAgICAgICAgICAgICAgICAgICAgIC8qIHIvdyBhdHRyaWJzICovCisgICAgdTMyICAgICBzdGFydF9zZWM7ICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0IHNlY3RvciAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2hlbnRyeV9zdHI7CiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBlbnRyaWVzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVudHJ5IGNvdW50ICovCi0gICAgdWxvbmczMiAgICAgb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQgb2YgZW50cmllcyAqLwotICAgIHVuY2hhciAgICAgIHNlY3NfcF9oZWFkOyAgICAgICAgICAgICAgICAgICAgLyogc2VjdG9ycy9oZWFkICovCi0gICAgdW5jaGFyICAgICAgaGVhZHNfcF9jeWw7ICAgICAgICAgICAgICAgICAgICAvKiBoZWFkcy9jeWxpbmRlciAqLwotICAgIHVuY2hhciAgICAgIHJlc2VydmVkOwotICAgIHVuY2hhciAgICAgIGNsdXN0X2RydnR5cGU7ICAgICAgICAgICAgICAgICAgLyogY2x1c3RlciBkcml2ZSB0eXBlICovCi0gICAgdWxvbmczMiAgICAgbG9jYXRpb247ICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLworICAgIHUzMiAgICAgZW50cmllczsgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbnRyeSBjb3VudCAqLworICAgIHUzMiAgICAgb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvZmZzZXQgb2YgZW50cmllcyAqLworICAgIHU4ICAgICAgc2Vjc19wX2hlYWQ7ICAgICAgICAgICAgICAgICAgICAvKiBzZWN0b3JzL2hlYWQgKi8KKyAgICB1OCAgICAgIGhlYWRzX3BfY3lsOyAgICAgICAgICAgICAgICAgICAgLyogaGVhZHMvY3lsaW5kZXIgKi8KKyAgICB1OCAgICAgIHJlc2VydmVkOworICAgIHU4ICAgICAgY2x1c3RfZHJ2dHlwZTsgICAgICAgICAgICAgICAgICAvKiBjbHVzdGVyIGRyaXZlIHR5cGUgKi8KKyAgICB1MzIgICAgIGxvY2F0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBudW1iZXIgKi8KICAgICBnZHRoX2hlbnRyeV9zdHIgZW50cnlbTUFYX0hEUklWRVNdOyAgICAgICAgIC8qIGVudHJpZXMgKi8KLX0gUEFDS0VEIGdkdGhfaGdldF9zdHI7ICAgIAorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2hnZXRfc3RyOyAgICAKIAogCiAvKiBEUFJBTSBzdHJ1Y3R1cmVzICovCiAKIC8qIGludGVyZmFjZSBhcmVhIElTQS9QQ0kgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bmNoYXIgICAgICAgICAgICAgIFNfQ21kX0luZHg7ICAgICAgICAgICAgIC8qIHNwZWNpYWwgY29tbWFuZCAqLwotICAgIHVuY2hhciB2b2xhdGlsZSAgICAgU19TdGF0dXM7ICAgICAgICAgICAgICAgLyogc3RhdHVzIHNwZWNpYWwgY29tbWFuZCAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgcmVzZXJ2ZWQxOwotICAgIHVsb25nMzIgICAgICAgICAgICAgU19JbmZvWzRdOyAgICAgICAgICAgICAgLyogYWRkLiBpbmZvIHNwZWNpYWwgY29tbWFuZCAqLwotICAgIHVuY2hhciB2b2xhdGlsZSAgICAgU2VtYTA7ICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzZW1hcGhvcmUgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHJlc2VydmVkMlszXTsKLSAgICB1bmNoYXIgICAgICAgICAgICAgIENtZF9JbmRleDsgICAgICAgICAgICAgIC8qIGNvbW1hbmQgbnVtYmVyICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICByZXNlcnZlZDNbM107Ci0gICAgdXNob3J0IHZvbGF0aWxlICAgICBTdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgU2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZShmb3IgYXN5bmMuZXZlbnRzKSAqLwotICAgIHVsb25nMzIgICAgICAgICAgICAgSW5mb1syXTsgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBpbmZvICovCisgICAgdTggICAgICAgICAgICAgIFNfQ21kX0luZHg7ICAgICAgICAgICAgIC8qIHNwZWNpYWwgY29tbWFuZCAqLworICAgIHU4IHZvbGF0aWxlICAgICBTX1N0YXR1czsgICAgICAgICAgICAgICAvKiBzdGF0dXMgc3BlY2lhbCBjb21tYW5kICovCisgICAgdTE2ICAgICAgICAgICAgICByZXNlcnZlZDE7CisgICAgdTMyICAgICAgICAgICAgIFNfSW5mb1s0XTsgICAgICAgICAgICAgIC8qIGFkZC4gaW5mbyBzcGVjaWFsIGNvbW1hbmQgKi8KKyAgICB1OCB2b2xhdGlsZSAgICAgU2VtYTA7ICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzZW1hcGhvcmUgKi8KKyAgICB1OCAgICAgICAgICAgICAgcmVzZXJ2ZWQyWzNdOworICAgIHU4ICAgICAgICAgICAgICBDbWRfSW5kZXg7ICAgICAgICAgICAgICAvKiBjb21tYW5kIG51bWJlciAqLworICAgIHU4ICAgICAgICAgICAgICByZXNlcnZlZDNbM107CisgICAgdTE2IHZvbGF0aWxlICAgICBTdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLworICAgIHUxNiAgICAgICAgICAgICAgU2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZShmb3IgYXN5bmMuZXZlbnRzKSAqLworICAgIHUzMiAgICAgICAgICAgICBJbmZvWzJdOyAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm8gKi8KICAgICBzdHJ1Y3QgewotICAgICAgICB1c2hvcnQgICAgICAgICAgb2Zmc2V0OyAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBvZmZzLiBpbiB0aGUgRFBSQU0qLwotICAgICAgICB1c2hvcnQgICAgICAgICAgc2Vydl9pZDsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLwotICAgIH0gUEFDS0VEIGNvbW1fcXVldWVbTUFYT0ZGU0VUU107ICAgICAgICAgICAgLyogY29tbWFuZCBxdWV1ZSAqLwotICAgIHVsb25nMzIgICAgICAgICAgICAgYmlvc19yZXNlcnZlZFsyXTsKLSAgICB1bmNoYXIgICAgICAgICAgICAgIGdkdF9kcHJfY21kWzFdOyAgICAgICAgIC8qIGNvbW1hbmRzICovCi19IFBBQ0tFRCBnZHRfZHByX2lmOworICAgICAgICB1MTYgICAgICAgICAgb2Zmc2V0OyAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBvZmZzLiBpbiB0aGUgRFBSQU0qLworICAgICAgICB1MTYgICAgICAgICAgc2Vydl9pZDsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLworICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgY29tbV9xdWV1ZVtNQVhPRkZTRVRTXTsgICAgICAgICAgICAvKiBjb21tYW5kIHF1ZXVlICovCisgICAgdTMyICAgICAgICAgICAgIGJpb3NfcmVzZXJ2ZWRbMl07CisgICAgdTggICAgICAgICAgICAgIGdkdF9kcHJfY21kWzFdOyAgICAgICAgIC8qIGNvbW1hbmRzICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdF9kcHJfaWY7CiAKIC8qIFNSQU0gc3RydWN0dXJlIFBDSSBjb250cm9sbGVycyAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgIG1hZ2ljOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBJRCBmcm9tIEJJT1MgKi8KLSAgICB1c2hvcnQgICAgICBuZWVkX2RlaW5pdDsgICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCBiZXR3LiBCSU9TL2RyaXZlciAqLwotICAgIHVuY2hhciAgICAgIHN3aXRjaF9zdXBwb3J0OyAgICAgICAgICAgICAgICAgLyogc2VlIG5lZWRfZGVpbml0ICovCi0gICAgdW5jaGFyICAgICAgcGFkZGluZ1s5XTsKLSAgICB1bmNoYXIgICAgICBvc191c2VkWzE2XTsgICAgICAgICAgICAgICAgICAgIC8qIE9TIGNvZGUgcGVyIHNlcnZpY2UgKi8KLSAgICB1bmNoYXIgICAgICB1bnVzZWRbMjhdOwotICAgIHVuY2hhciAgICAgIGZ3X21hZ2ljOyAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHIuIElEIGZyb20gZmlybXdhcmUgKi8KLX0gUEFDS0VEIGdkdF9wY2lfc3JhbTsKKyAgICB1MzIgICAgIG1hZ2ljOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBJRCBmcm9tIEJJT1MgKi8KKyAgICB1MTYgICAgICBuZWVkX2RlaW5pdDsgICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCBiZXR3LiBCSU9TL2RyaXZlciAqLworICAgIHU4ICAgICAgc3dpdGNoX3N1cHBvcnQ7ICAgICAgICAgICAgICAgICAvKiBzZWUgbmVlZF9kZWluaXQgKi8KKyAgICB1OCAgICAgIHBhZGRpbmdbOV07CisgICAgdTggICAgICBvc191c2VkWzE2XTsgICAgICAgICAgICAgICAgICAgIC8qIE9TIGNvZGUgcGVyIHNlcnZpY2UgKi8KKyAgICB1OCAgICAgIHVudXNlZFsyOF07CisgICAgdTggICAgICBmd19tYWdpYzsgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyLiBJRCBmcm9tIGZpcm13YXJlICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdF9wY2lfc3JhbTsKIAogLyogU1JBTSBzdHJ1Y3R1cmUgRUlTQSBjb250cm9sbGVycyAoYnV0IE5PVCBHRFQzMDAwLzMwMjApICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgb3NfdXNlZFsxNl07ICAgICAgICAgICAgICAgICAgICAvKiBPUyBjb2RlIHBlciBzZXJ2aWNlICovCi0gICAgdXNob3J0ICAgICAgbmVlZF9kZWluaXQ7ICAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggYmV0dy4gQklPUy9kcml2ZXIgKi8KLSAgICB1bmNoYXIgICAgICBzd2l0Y2hfc3VwcG9ydDsgICAgICAgICAgICAgICAgIC8qIHNlZSBuZWVkX2RlaW5pdCAqLwotICAgIHVuY2hhciAgICAgIHBhZGRpbmc7Ci19IFBBQ0tFRCBnZHRfZWlzYV9zcmFtOworICAgIHU4ICAgICAgb3NfdXNlZFsxNl07ICAgICAgICAgICAgICAgICAgICAvKiBPUyBjb2RlIHBlciBzZXJ2aWNlICovCisgICAgdTE2ICAgICAgbmVlZF9kZWluaXQ7ICAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggYmV0dy4gQklPUy9kcml2ZXIgKi8KKyAgICB1OCAgICAgIHN3aXRjaF9zdXBwb3J0OyAgICAgICAgICAgICAgICAgLyogc2VlIG5lZWRfZGVpbml0ICovCisgICAgdTggICAgICBwYWRkaW5nOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRfZWlzYV9zcmFtOwogCiAKIC8qIERQUkFNIElTQSBjb250cm9sbGVycyAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuY2hhciAgICAgIGJpb3NfdXNlZFsweDNjMDAtMzJdOyAgIC8qIDE1S0IgLSAzMkJ5dGVzIEJJT1MgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIG1hZ2ljOyAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgKEVJU0EpIElEICovCi0gICAgICAgICAgICB1c2hvcnQgICAgICBuZWVkX2RlaW5pdDsgICAgICAgICAgICAvKiBzd2l0Y2ggYmV0dy4gQklPUy9kcml2ZXIgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIHN3aXRjaF9zdXBwb3J0OyAgICAgICAgIC8qIHNlZSBuZWVkX2RlaW5pdCAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgcGFkZGluZ1s5XTsKLSAgICAgICAgICAgIHVuY2hhciAgICAgIG9zX3VzZWRbMTZdOyAgICAgICAgICAgIC8qIE9TIGNvZGUgcGVyIHNlcnZpY2UgKi8KLSAgICAgICAgfSBQQUNLRUQgZHBfc3JhbTsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIGJpb3NfYXJlYVsweDQwMDBdOyAgICAgIC8qIDE2S0IgcmVzZXJ2ZWQgZm9yIEJJT1MgKi8KKyAgICAgICAgICAgIHU4ICAgICAgYmlvc191c2VkWzB4M2MwMC0zMl07ICAgLyogMTVLQiAtIDMyQnl0ZXMgQklPUyAqLworICAgICAgICAgICAgdTMyICAgICBtYWdpYzsgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIChFSVNBKSBJRCAqLworICAgICAgICAgICAgdTE2ICAgICAgbmVlZF9kZWluaXQ7ICAgICAgICAgICAgLyogc3dpdGNoIGJldHcuIEJJT1MvZHJpdmVyICovCisgICAgICAgICAgICB1OCAgICAgIHN3aXRjaF9zdXBwb3J0OyAgICAgICAgIC8qIHNlZSBuZWVkX2RlaW5pdCAqLworICAgICAgICAgICAgdTggICAgICBwYWRkaW5nWzldOworICAgICAgICAgICAgdTggICAgICBvc191c2VkWzE2XTsgICAgICAgICAgICAvKiBPUyBjb2RlIHBlciBzZXJ2aWNlICovCisgICAgICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZHBfc3JhbTsKKyAgICAgICAgdTggICAgICAgICAgYmlvc19hcmVhWzB4NDAwMF07ICAgICAgLyogMTZLQiByZXNlcnZlZCBmb3IgQklPUyAqLwogICAgIH0gYnU7CiAgICAgdW5pb24gewogICAgICAgICBnZHRfZHByX2lmICAgICAgaWM7ICAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJmYWNlIGFyZWEgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlmX2FyZWFbMHgzMDAwXTsgICAgICAgIC8qIDEyS0IgZm9yIGludGVyZmFjZSAqLworICAgICAgICB1OCAgICAgICAgICBpZl9hcmVhWzB4MzAwMF07ICAgICAgICAvKiAxMktCIGZvciBpbnRlcmZhY2UgKi8KICAgICB9IHU7CiAgICAgc3RydWN0IHsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIG1lbWxvY2s7ICAgICAgICAgICAgICAgIC8qIHdyaXRlIHByb3RlY3Rpb24gRFBSQU0gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGV2ZW50OyAgICAgICAgICAgICAgICAgIC8qIHJlbGVhc2UgZXZlbnQgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlycWVuOyAgICAgICAgICAgICAgICAgIC8qIGJvYXJkIGludGVycnVwdHMgZW5hYmxlICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBpcnFkZWw7ICAgICAgICAgICAgICAgICAvKiBhY2tub3dsZWRnZSBib2FyZCBpbnQuICovCi0gICAgICAgIHVuY2hhciB2b2xhdGlsZSBTZW1hMTsgICAgICAgICAgICAgICAgICAvKiBzdGF0dXMgc2VtYXBob3JlICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBycTsgICAgICAgICAgICAgICAgICAgICAvKiBJUlEvRFJRIGNvbmZpZ3VyYXRpb24gKi8KLSAgICB9IFBBQ0tFRCBpbzsKLX0gUEFDS0VEIGdkdDJfZHByYW1fc3RyOworICAgICAgICB1OCAgICAgICAgICBtZW1sb2NrOyAgICAgICAgICAgICAgICAvKiB3cml0ZSBwcm90ZWN0aW9uIERQUkFNICovCisgICAgICAgIHU4ICAgICAgICAgIGV2ZW50OyAgICAgICAgICAgICAgICAgIC8qIHJlbGVhc2UgZXZlbnQgKi8KKyAgICAgICAgdTggICAgICAgICAgaXJxZW47ICAgICAgICAgICAgICAgICAgLyogYm9hcmQgaW50ZXJydXB0cyBlbmFibGUgKi8KKyAgICAgICAgdTggICAgICAgICAgaXJxZGVsOyAgICAgICAgICAgICAgICAgLyogYWNrbm93bGVkZ2UgYm9hcmQgaW50LiAqLworICAgICAgICB1OCB2b2xhdGlsZSBTZW1hMTsgICAgICAgICAgICAgICAgICAvKiBzdGF0dXMgc2VtYXBob3JlICovCisgICAgICAgIHU4ICAgICAgICAgIHJxOyAgICAgICAgICAgICAgICAgICAgIC8qIElSUS9EUlEgY29uZmlndXJhdGlvbiAqLworICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgaW87Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdDJfZHByYW1fc3RyOwogCiAvKiBEUFJBTSBQQ0kgY29udHJvbGxlcnMgKi8KIHR5cGVkZWYgc3RydWN0IHsKICAgICB1bmlvbiB7CiAgICAgICAgIGdkdF9kcHJfaWYgICAgICBpYzsgICAgICAgICAgICAgICAgICAgICAvKiBpbnRlcmZhY2UgYXJlYSAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgaWZfYXJlYVsweGZmMC1zaXplb2YoZ2R0X3BjaV9zcmFtKV07CisgICAgICAgIHU4ICAgICAgICAgIGlmX2FyZWFbMHhmZjAtc2l6ZW9mKGdkdF9wY2lfc3JhbSldOwogICAgIH0gdTsKICAgICBnZHRfcGNpX3NyYW0gICAgICAgIGdkdDZzcjsgICAgICAgICAgICAgICAgIC8qIFNSQU0gc3RydWN0dXJlICovCiAgICAgc3RydWN0IHsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIHVudXNlZDBbMV07Ci0gICAgICAgIHVuY2hhciB2b2xhdGlsZSBTZW1hMTsgICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHNlbWFwaG9yZSAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgdW51c2VkMVszXTsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlycWVuOyAgICAgICAgICAgICAgICAgIC8qIGJvYXJkIGludGVycnVwdHMgZW5hYmxlICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICB1bnVzZWQyWzJdOwotICAgICAgICB1bmNoYXIgICAgICAgICAgZXZlbnQ7ICAgICAgICAgICAgICAgICAgLyogcmVsZWFzZSBldmVudCAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgdW51c2VkM1szXTsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlycWRlbDsgICAgICAgICAgICAgICAgIC8qIGFja25vd2xlZGdlIGJvYXJkIGludC4gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIHVudXNlZDRbM107Ci0gICAgfSBQQUNLRUQgaW87Ci19IFBBQ0tFRCBnZHQ2X2RwcmFtX3N0cjsKKyAgICAgICAgdTggICAgICAgICAgdW51c2VkMFsxXTsKKyAgICAgICAgdTggdm9sYXRpbGUgU2VtYTE7ICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzZW1hcGhvcmUgKi8KKyAgICAgICAgdTggICAgICAgICAgdW51c2VkMVszXTsKKyAgICAgICAgdTggICAgICAgICAgaXJxZW47ICAgICAgICAgICAgICAgICAgLyogYm9hcmQgaW50ZXJydXB0cyBlbmFibGUgKi8KKyAgICAgICAgdTggICAgICAgICAgdW51c2VkMlsyXTsKKyAgICAgICAgdTggICAgICAgICAgZXZlbnQ7ICAgICAgICAgICAgICAgICAgLyogcmVsZWFzZSBldmVudCAqLworICAgICAgICB1OCAgICAgICAgICB1bnVzZWQzWzNdOworICAgICAgICB1OCAgICAgICAgICBpcnFkZWw7ICAgICAgICAgICAgICAgICAvKiBhY2tub3dsZWRnZSBib2FyZCBpbnQuICovCisgICAgICAgIHU4ICAgICAgICAgIHVudXNlZDRbM107CisgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBpbzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0Nl9kcHJhbV9zdHI7CiAKIC8qIFBMWCByZWdpc3RlciBzdHJ1Y3R1cmUgKG5ldyBQQ0kgY29udHJvbGxlcnMpICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgICAgICAgICBjZmdfcmVnOyAgICAgICAgLyogRFBSQU0gY2ZnLigyOmJlbG93IDFNQiwwOmFueXdoZXJlKSovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQxWzB4M2ZdOwotICAgIHVuY2hhciB2b2xhdGlsZSAgICAgc2VtYTBfcmVnOyAgICAgICAgICAgICAgLyogY29tbWFuZCBzZW1hcGhvcmUgKi8KLSAgICB1bmNoYXIgdm9sYXRpbGUgICAgIHNlbWExX3JlZzsgICAgICAgICAgICAgIC8qIHN0YXR1cyBzZW1hcGhvcmUgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHVudXNlZDJbMl07Ci0gICAgdXNob3J0IHZvbGF0aWxlICAgICBzdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLwotICAgIHVsb25nMzIgICAgICAgICAgICAgaW5mb1syXTsgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBpbmZvICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQzWzB4MTBdOwotICAgIHVuY2hhciAgICAgICAgICAgICAgbGRvb3JfcmVnOyAgICAgICAgICAgICAgLyogUENJIHRvIGxvY2FsIGRvb3JiZWxsICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQ0WzNdOwotICAgIHVuY2hhciB2b2xhdGlsZSAgICAgZWRvb3JfcmVnOyAgICAgICAgICAgICAgLyogbG9jYWwgdG8gUENJIGRvb3JiZWxsICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQ1WzNdOwotICAgIHVuY2hhciAgICAgICAgICAgICAgY29udHJvbDA7ICAgICAgICAgICAgICAgLyogY29udHJvbDAgcmVnaXN0ZXIodW51c2VkKSAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgY29udHJvbDE7ICAgICAgICAgICAgICAgLyogYm9hcmQgaW50ZXJydXB0cyBlbmFibGUgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHVudXNlZDZbMHgxNl07Ci19IFBBQ0tFRCBnZHQ2Y19wbHhfcmVnczsKKyAgICB1OCAgICAgICAgICAgICAgY2ZnX3JlZzsgICAgICAgIC8qIERQUkFNIGNmZy4oMjpiZWxvdyAxTUIsMDphbnl3aGVyZSkqLworICAgIHU4ICAgICAgICAgICAgICB1bnVzZWQxWzB4M2ZdOworICAgIHU4IHZvbGF0aWxlICAgICBzZW1hMF9yZWc7ICAgICAgICAgICAgICAvKiBjb21tYW5kIHNlbWFwaG9yZSAqLworICAgIHU4IHZvbGF0aWxlICAgICBzZW1hMV9yZWc7ICAgICAgICAgICAgICAvKiBzdGF0dXMgc2VtYXBob3JlICovCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDJbMl07CisgICAgdTE2IHZvbGF0aWxlICAgICBzdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLworICAgIHUxNiAgICAgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLworICAgIHUzMiAgICAgICAgICAgICBpbmZvWzJdOyAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm8gKi8KKyAgICB1OCAgICAgICAgICAgICAgdW51c2VkM1sweDEwXTsKKyAgICB1OCAgICAgICAgICAgICAgbGRvb3JfcmVnOyAgICAgICAgICAgICAgLyogUENJIHRvIGxvY2FsIGRvb3JiZWxsICovCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDRbM107CisgICAgdTggdm9sYXRpbGUgICAgIGVkb29yX3JlZzsgICAgICAgICAgICAgIC8qIGxvY2FsIHRvIFBDSSBkb29yYmVsbCAqLworICAgIHU4ICAgICAgICAgICAgICB1bnVzZWQ1WzNdOworICAgIHU4ICAgICAgICAgICAgICBjb250cm9sMDsgICAgICAgICAgICAgICAvKiBjb250cm9sMCByZWdpc3Rlcih1bnVzZWQpICovCisgICAgdTggICAgICAgICAgICAgIGNvbnRyb2wxOyAgICAgICAgICAgICAgIC8qIGJvYXJkIGludGVycnVwdHMgZW5hYmxlICovCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDZbMHgxNl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdDZjX3BseF9yZWdzOwogCiAvKiBEUFJBTSBuZXcgUENJIGNvbnRyb2xsZXJzICovCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgdW5pb24gewogICAgICAgICBnZHRfZHByX2lmICAgICAgaWM7ICAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJmYWNlIGFyZWEgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlmX2FyZWFbMHg0MDAwLXNpemVvZihnZHRfcGNpX3NyYW0pXTsKKyAgICAgICAgdTggICAgICAgICAgaWZfYXJlYVsweDQwMDAtc2l6ZW9mKGdkdF9wY2lfc3JhbSldOwogICAgIH0gdTsKICAgICBnZHRfcGNpX3NyYW0gICAgICAgIGdkdDZzcjsgICAgICAgICAgICAgICAgIC8qIFNSQU0gc3RydWN0dXJlICovCi19IFBBQ0tFRCBnZHQ2Y19kcHJhbV9zdHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdDZjX2RwcmFtX3N0cjsKIAogLyogaTk2MCByZWdpc3RlciBzdHJ1Y3R1cmUgKFBDSSBNUFIgY29udHJvbGxlcnMpICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQxWzE2XTsKLSAgICB1bmNoYXIgdm9sYXRpbGUgICAgIHNlbWEwX3JlZzsgICAgICAgICAgICAgIC8qIGNvbW1hbmQgc2VtYXBob3JlICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICB1bnVzZWQyOwotICAgIHVuY2hhciB2b2xhdGlsZSAgICAgc2VtYTFfcmVnOyAgICAgICAgICAgICAgLyogc3RhdHVzIHNlbWFwaG9yZSAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgdW51c2VkMzsKLSAgICB1c2hvcnQgdm9sYXRpbGUgICAgIHN0YXR1czsgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgc3RhdHVzICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICBzZXJ2aWNlOyAgICAgICAgICAgICAgICAvKiBzZXJ2aWNlICovCi0gICAgdWxvbmczMiAgICAgICAgICAgICBpbmZvWzJdOyAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm8gKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIGxkb29yX3JlZzsgICAgICAgICAgICAgIC8qIFBDSSB0byBsb2NhbCBkb29yYmVsbCAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgdW51c2VkNFsxMV07Ci0gICAgdW5jaGFyIHZvbGF0aWxlICAgICBlZG9vcl9yZWc7ICAgICAgICAgICAgICAvKiBsb2NhbCB0byBQQ0kgZG9vcmJlbGwgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHVudXNlZDVbN107Ci0gICAgdW5jaGFyICAgICAgICAgICAgICBlZG9vcl9lbl9yZWc7ICAgICAgICAgICAvKiBib2FyZCBpbnRlcnJ1cHRzIGVuYWJsZSAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgdW51c2VkNlsyN107Ci0gICAgdWxvbmczMiAgICAgICAgICAgICB1bnVzZWQ3WzkzOV07ICAgICAgICAgCi0gICAgdWxvbmczMiAgICAgICAgICAgICBzZXZlcml0eTsgICAgICAgCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDFbMTZdOworICAgIHU4IHZvbGF0aWxlICAgICBzZW1hMF9yZWc7ICAgICAgICAgICAgICAvKiBjb21tYW5kIHNlbWFwaG9yZSAqLworICAgIHU4ICAgICAgICAgICAgICB1bnVzZWQyOworICAgIHU4IHZvbGF0aWxlICAgICBzZW1hMV9yZWc7ICAgICAgICAgICAgICAvKiBzdGF0dXMgc2VtYXBob3JlICovCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDM7CisgICAgdTE2IHZvbGF0aWxlICAgICBzdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLworICAgIHUxNiAgICAgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLworICAgIHUzMiAgICAgICAgICAgICBpbmZvWzJdOyAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm8gKi8KKyAgICB1OCAgICAgICAgICAgICAgbGRvb3JfcmVnOyAgICAgICAgICAgICAgLyogUENJIHRvIGxvY2FsIGRvb3JiZWxsICovCisgICAgdTggICAgICAgICAgICAgIHVudXNlZDRbMTFdOworICAgIHU4IHZvbGF0aWxlICAgICBlZG9vcl9yZWc7ICAgICAgICAgICAgICAvKiBsb2NhbCB0byBQQ0kgZG9vcmJlbGwgKi8KKyAgICB1OCAgICAgICAgICAgICAgdW51c2VkNVs3XTsKKyAgICB1OCAgICAgICAgICAgICAgZWRvb3JfZW5fcmVnOyAgICAgICAgICAgLyogYm9hcmQgaW50ZXJydXB0cyBlbmFibGUgKi8KKyAgICB1OCAgICAgICAgICAgICAgdW51c2VkNlsyN107CisgICAgdTMyICAgICAgICAgICAgIHVudXNlZDdbOTM5XTsgICAgICAgICAKKyAgICB1MzIgICAgICAgICAgICAgc2V2ZXJpdHk7ICAgICAgIAogICAgIGNoYXIgICAgICAgICAgICAgICAgZXZ0X3N0clsyNTZdOyAgICAgICAgICAgLyogZXZlbnQgc3RyaW5nICovCi19IFBBQ0tFRCBnZHQ2bV9pOTYwX3JlZ3M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdDZtX2k5NjBfcmVnczsKIAogLyogRFBSQU0gUENJIE1QUiBjb250cm9sbGVycyAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGdkdDZtX2k5NjBfcmVncyAgICAgaTk2MHI7ICAgICAgICAgICAgICAgICAgLyogNEtCIGk5NjAgcmVnaXN0ZXJzICovCiAgICAgdW5pb24gewogICAgICAgICBnZHRfZHByX2lmICAgICAgaWM7ICAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJmYWNlIGFyZWEgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlmX2FyZWFbMHgzMDAwLXNpemVvZihnZHRfcGNpX3NyYW0pXTsKKyAgICAgICAgdTggICAgICAgICAgaWZfYXJlYVsweDMwMDAtc2l6ZW9mKGdkdF9wY2lfc3JhbSldOwogICAgIH0gdTsKICAgICBnZHRfcGNpX3NyYW0gICAgICAgIGdkdDZzcjsgICAgICAgICAgICAgICAgIC8qIFNSQU0gc3RydWN0dXJlICovCi19IFBBQ0tFRCBnZHQ2bV9kcHJhbV9zdHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdDZtX2RwcmFtX3N0cjsKIAogCiAvKiBQQ0kgcmVzb3VyY2VzICovCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgc3RydWN0IHBjaV9kZXYgICAgICAqcGRldjsKLSAgICB1bG9uZyAgICAgICAgICAgICAgIGRwbWVtOyAgICAgICAgICAgICAgICAgIC8qIERQUkFNIGFkZHJlc3MgKi8KLSAgICB1bG9uZyAgICAgICAgICAgICAgIGlvOyAgICAgICAgICAgICAgICAgICAgIC8qIElPIGFkZHJlc3MgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgZHBtZW07ICAgICAgICAgICAgICAgICAgLyogRFBSQU0gYWRkcmVzcyAqLworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICBpbzsgICAgICAgICAgICAgICAgICAgICAvKiBJTyBhZGRyZXNzICovCiB9IGdkdGhfcGNpX3N0cjsKIAogCkBAIC04NDYsOTMgKzg0Niw5MyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIHN0cnVjdCBTY3NpX0hvc3QgICAgKnNob3N0OwogICAgIHN0cnVjdCBsaXN0X2hlYWQgICAgbGlzdDsKLSAgICB1c2hvcnQgICAgICAJaGFudW07Ci0gICAgdXNob3J0ICAgICAgICAgICAgICBvZW1faWQ7ICAgICAgICAgICAgICAgICAvKiBPRU0gKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgIHR5cGU7ICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgY2xhc3MgKi8KLSAgICB1bG9uZzMyICAgICAgICAgICAgIHN0eXBlOyAgICAgICAgICAgICAgICAgIC8qIHN1YnR5cGUgKFBDSTogZGV2aWNlIElEKSAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgZndfdmVyczsgICAgICAgICAgICAgICAgLyogZmlybXdhcmUgdmVyc2lvbiAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgY2FjaGVfZmVhdDsgICAgICAgICAgICAgLyogZmVhdC4gY2FjaGUgc2Vydi4gKHMvZywuLikqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgcmF3X2ZlYXQ7ICAgICAgICAgICAgICAgLyogZmVhdC4gcmF3IHNlcnZpY2UgKHMvZywuLikqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgc2NyZWVuX2ZlYXQ7ICAgICAgICAgICAgLyogZmVhdC4gcmF3IHNlcnZpY2UgKHMvZywuLikqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgYm1pYzsgICAgICAgICAgICAgICAgICAgLyogQk1JQyBhZGRyZXNzIChFSVNBKSAqLworICAgIHUxNiAgICAgIAloYW51bTsKKyAgICB1MTYgICAgICAgICAgICAgIG9lbV9pZDsgICAgICAgICAgICAgICAgIC8qIE9FTSAqLworICAgIHUxNiAgICAgICAgICAgICAgdHlwZTsgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBjbGFzcyAqLworICAgIHUzMiAgICAgICAgICAgICBzdHlwZTsgICAgICAgICAgICAgICAgICAvKiBzdWJ0eXBlIChQQ0k6IGRldmljZSBJRCkgKi8KKyAgICB1MTYgICAgICAgICAgICAgIGZ3X3ZlcnM7ICAgICAgICAgICAgICAgIC8qIGZpcm13YXJlIHZlcnNpb24gKi8KKyAgICB1MTYgICAgICAgICAgICAgIGNhY2hlX2ZlYXQ7ICAgICAgICAgICAgIC8qIGZlYXQuIGNhY2hlIHNlcnYuIChzL2csLi4pKi8KKyAgICB1MTYgICAgICAgICAgICAgIHJhd19mZWF0OyAgICAgICAgICAgICAgIC8qIGZlYXQuIHJhdyBzZXJ2aWNlIChzL2csLi4pKi8KKyAgICB1MTYgICAgICAgICAgICAgIHNjcmVlbl9mZWF0OyAgICAgICAgICAgIC8qIGZlYXQuIHJhdyBzZXJ2aWNlIChzL2csLi4pKi8KKyAgICB1MTYgICAgICAgICAgICAgIGJtaWM7ICAgICAgICAgICAgICAgICAgIC8qIEJNSUMgYWRkcmVzcyAoRUlTQSkgKi8KICAgICB2b2lkIF9faW9tZW0gICAgICAgICpicmQ7ICAgICAgICAgICAgICAgICAgIC8qIERQUkFNIGFkZHJlc3MgKi8KLSAgICB1bG9uZzMyICAgICAgICAgICAgIGJyZF9waHlzOyAgICAgICAgICAgICAgIC8qIHNsb3QgbnVtYmVyL0JJT1MgYWRkcmVzcyAqLworICAgIHUzMiAgICAgICAgICAgICBicmRfcGh5czsgICAgICAgICAgICAgICAvKiBzbG90IG51bWJlci9CSU9TIGFkZHJlc3MgKi8KICAgICBnZHQ2Y19wbHhfcmVncyAgICAgICpwbHg7ICAgICAgICAgICAgICAgICAgIC8qIFBMWCByZWdzIChuZXcgUENJIGNvbnRyLikgKi8KICAgICBnZHRoX2NtZF9zdHIgICAgICAgIGNtZGV4dDsKICAgICBnZHRoX2NtZF9zdHIgICAgICAgICpwY2NiOyAgICAgICAgICAgICAgICAgIC8qIGFkZHJlc3MgY29tbWFuZCBzdHJ1Y3R1cmUgKi8KLSAgICB1bG9uZzMyICAgICAgICAgICAgIGNjYl9waHlzOyAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3MgKi8KKyAgICB1MzIgICAgICAgICAgICAgY2NiX3BoeXM7ICAgICAgICAgICAgICAgLyogcGh5cy4gYWRkcmVzcyAqLwogI2lmZGVmIElOVF9DT0FMCiAgICAgZ2R0aF9jb2FsX3N0YXR1cyAgICAqY29hbF9zdGF0OyAgICAgICAgICAgICAvKiBidWZmZXIgZm9yIGNvYWxlc2NpbmcgaW50LiovCi0gICAgdWxvbmc2NCAgICAgICAgICAgICBjb2FsX3N0YXRfcGh5czsgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzICovCisgICAgdTY0ICAgICAgICAgICAgIGNvYWxfc3RhdF9waHlzOyAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3MgKi8KICNlbmRpZgogICAgIGNoYXIgICAgICAgICAgICAgICAgKnBzY3JhdGNoOyAgICAgICAgICAgICAgLyogc2NyYXRjaCAoRE1BKSBidWZmZXIgKi8KLSAgICB1bG9uZzY0ICAgICAgICAgICAgIHNjcmF0Y2hfcGh5czsgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3MgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHNjcmF0Y2hfYnVzeTsgICAgICAgICAgIC8qIGluIHVzZT8gKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIGRtYTY0X3N1cHBvcnQ7ICAgICAgICAgIC8qIDY0LWJpdCBETUEgc3VwcG9ydGVkPyAqLworICAgIHU2NCAgICAgICAgICAgICBzY3JhdGNoX3BoeXM7ICAgICAgICAgICAvKiBwaHlzLiBhZGRyZXNzICovCisgICAgdTggICAgICAgICAgICAgIHNjcmF0Y2hfYnVzeTsgICAgICAgICAgIC8qIGluIHVzZT8gKi8KKyAgICB1OCAgICAgICAgICAgICAgZG1hNjRfc3VwcG9ydDsgICAgICAgICAgLyogNjQtYml0IERNQSBzdXBwb3J0ZWQ/ICovCiAgICAgZ2R0aF9tc2dfc3RyICAgICAgICAqcG1zZzsgICAgICAgICAgICAgICAgICAvKiBtZXNzYWdlIGJ1ZmZlciAqLwotICAgIHVsb25nNjQgICAgICAgICAgICAgbXNnX3BoeXM7ICAgICAgICAgICAgICAgLyogcGh5cy4gYWRkcmVzcyAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgc2Nhbl9tb2RlOyAgICAgICAgICAgICAgLyogY3VycmVudCBzY2FuIG1vZGUgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIGlycTsgICAgICAgICAgICAgICAgICAgIC8qIElSUSAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgZHJxOyAgICAgICAgICAgICAgICAgICAgLyogRFJRIChJU0EgY29udHJvbGxlcnMpICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICBzdGF0dXM7ICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHN0YXR1cyAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZS9maXJtd2FyZSB2ZXIuLy4uICovCi0gICAgdWxvbmczMiAgICAgICAgICAgICBpbmZvOwotICAgIHVsb25nMzIgICAgICAgICAgICAgaW5mbzI7ICAgICAgICAgICAgICAgICAgLyogYWRkaXRpb25hbCBpbmZvICovCisgICAgdTY0ICAgICAgICAgICAgIG1zZ19waHlzOyAgICAgICAgICAgICAgIC8qIHBoeXMuIGFkZHJlc3MgKi8KKyAgICB1OCAgICAgICAgICAgICAgc2Nhbl9tb2RlOyAgICAgICAgICAgICAgLyogY3VycmVudCBzY2FuIG1vZGUgKi8KKyAgICB1OCAgICAgICAgICAgICAgaXJxOyAgICAgICAgICAgICAgICAgICAgLyogSVJRICovCisgICAgdTggICAgICAgICAgICAgIGRycTsgICAgICAgICAgICAgICAgICAgIC8qIERSUSAoSVNBIGNvbnRyb2xsZXJzKSAqLworICAgIHUxNiAgICAgICAgICAgICAgc3RhdHVzOyAgICAgICAgICAgICAgICAgLyogY29tbWFuZCBzdGF0dXMgKi8KKyAgICB1MTYgICAgICAgICAgICAgIHNlcnZpY2U7ICAgICAgICAgICAgICAgIC8qIHNlcnZpY2UvZmlybXdhcmUgdmVyLi8uLiAqLworICAgIHUzMiAgICAgICAgICAgICBpbmZvOworICAgIHUzMiAgICAgICAgICAgICBpbmZvMjsgICAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm8gKi8KICAgICBTY3NpX0NtbmQgICAgICAgICAgICpyZXFfZmlyc3Q7ICAgICAgICAgICAgIC8qIHRvcCBvZiByZXF1ZXN0IHF1ZXVlICovCiAgICAgc3RydWN0IHsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIHByZXNlbnQ7ICAgICAgICAgICAgICAgIC8qIEZsYWc6IGhvc3QgZHJpdmUgcHJlc2VudD8gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlzX2xvZ2RydjsgICAgICAgICAgICAgIC8qIEZsYWc6IGxvZy4gZHJpdmUgKG1hc3Rlcik/ICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBpc19hcnJheWRydjsgICAgICAgICAgICAvKiBGbGFnOiBhcnJheSBkcml2ZT8gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlzX21hc3RlcjsgICAgICAgICAgICAgIC8qIEZsYWc6IGFycmF5IGRyaXZlIG1hc3Rlcj8gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlzX3Bhcml0eTsgICAgICAgICAgICAgIC8qIEZsYWc6IHBhcml0eSBkcml2ZT8gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGlzX2hvdGZpeDsgICAgICAgICAgICAgIC8qIEZsYWc6IGhvdGZpeCBkcml2ZT8gKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIG1hc3Rlcl9ubzsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBtYXN0ZXIgZHJpdmUgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGxvY2s7ICAgICAgICAgICAgICAgICAgIC8qIGRyaXZlIGxvY2tlZD8gKGhvdCBwbHVnKSAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgaGVhZHM7ICAgICAgICAgICAgICAgICAgLyogbWFwcGluZyAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgc2VjczsKLSAgICAgICAgdXNob3J0ICAgICAgICAgIGRldnR5cGU7ICAgICAgICAgICAgICAgIC8qIGZ1cnRoZXIgaW5mb3JtYXRpb24gKi8KLSAgICAgICAgdWxvbmc2NCAgICAgICAgIHNpemU7ICAgICAgICAgICAgICAgICAgIC8qIGNhcGFjaXR5ICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBsZHJfbm87ICAgICAgICAgICAgICAgICAvKiBsb2cuIGRyaXZlIG5vLiAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgcndfYXR0cmliczsgICAgICAgICAgICAgLyogci93IGF0dHJpYnV0ZXMgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGNsdXN0ZXJfdHlwZTsgICAgICAgICAgIC8qIGNsdXN0ZXIgcHJvcGVydGllcyAqLwotICAgICAgICB1bmNoYXIgICAgICAgICAgbWVkaWFfY2hhbmdlZDsgICAgICAgICAgLyogRmxhZzpNT1VOVC9VTk1PVU5UIG9jY3VyZWQgKi8KLSAgICAgICAgdWxvbmczMiAgICAgICAgIHN0YXJ0X3NlYzsgICAgICAgICAgICAgIC8qIHN0YXJ0IHNlY3RvciAqLworICAgICAgICB1OCAgICAgICAgICBwcmVzZW50OyAgICAgICAgICAgICAgICAvKiBGbGFnOiBob3N0IGRyaXZlIHByZXNlbnQ/ICovCisgICAgICAgIHU4ICAgICAgICAgIGlzX2xvZ2RydjsgICAgICAgICAgICAgIC8qIEZsYWc6IGxvZy4gZHJpdmUgKG1hc3Rlcik/ICovCisgICAgICAgIHU4ICAgICAgICAgIGlzX2FycmF5ZHJ2OyAgICAgICAgICAgIC8qIEZsYWc6IGFycmF5IGRyaXZlPyAqLworICAgICAgICB1OCAgICAgICAgICBpc19tYXN0ZXI7ICAgICAgICAgICAgICAvKiBGbGFnOiBhcnJheSBkcml2ZSBtYXN0ZXI/ICovCisgICAgICAgIHU4ICAgICAgICAgIGlzX3Bhcml0eTsgICAgICAgICAgICAgIC8qIEZsYWc6IHBhcml0eSBkcml2ZT8gKi8KKyAgICAgICAgdTggICAgICAgICAgaXNfaG90Zml4OyAgICAgICAgICAgICAgLyogRmxhZzogaG90Zml4IGRyaXZlPyAqLworICAgICAgICB1OCAgICAgICAgICBtYXN0ZXJfbm87ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgbWFzdGVyIGRyaXZlICovCisgICAgICAgIHU4ICAgICAgICAgIGxvY2s7ICAgICAgICAgICAgICAgICAgIC8qIGRyaXZlIGxvY2tlZD8gKGhvdCBwbHVnKSAqLworICAgICAgICB1OCAgICAgICAgICBoZWFkczsgICAgICAgICAgICAgICAgICAvKiBtYXBwaW5nICovCisgICAgICAgIHU4ICAgICAgICAgIHNlY3M7CisgICAgICAgIHUxNiAgICAgICAgICBkZXZ0eXBlOyAgICAgICAgICAgICAgICAvKiBmdXJ0aGVyIGluZm9ybWF0aW9uICovCisgICAgICAgIHU2NCAgICAgICAgIHNpemU7ICAgICAgICAgICAgICAgICAgIC8qIGNhcGFjaXR5ICovCisgICAgICAgIHU4ICAgICAgICAgIGxkcl9ubzsgICAgICAgICAgICAgICAgIC8qIGxvZy4gZHJpdmUgbm8uICovCisgICAgICAgIHU4ICAgICAgICAgIHJ3X2F0dHJpYnM7ICAgICAgICAgICAgIC8qIHIvdyBhdHRyaWJ1dGVzICovCisgICAgICAgIHU4ICAgICAgICAgIGNsdXN0ZXJfdHlwZTsgICAgICAgICAgIC8qIGNsdXN0ZXIgcHJvcGVydGllcyAqLworICAgICAgICB1OCAgICAgICAgICBtZWRpYV9jaGFuZ2VkOyAgICAgICAgICAvKiBGbGFnOk1PVU5UL1VOTU9VTlQgb2NjdXJlZCAqLworICAgICAgICB1MzIgICAgICAgICBzdGFydF9zZWM7ICAgICAgICAgICAgICAvKiBzdGFydCBzZWN0b3IgKi8KICAgICB9IGhkcltNQVhfTERSSVZFU107ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhvc3QgZHJpdmVzICovCiAgICAgc3RydWN0IHsKLSAgICAgICAgdW5jaGFyICAgICAgICAgIGxvY2s7ICAgICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgbG9ja2VkPyAoaG90IHBsdWcpICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBwZGV2X2NudDsgICAgICAgICAgICAgICAvKiBwaHlzaWNhbCBkZXZpY2UgY291bnQgKi8KLSAgICAgICAgdW5jaGFyICAgICAgICAgIGxvY2FsX25vOyAgICAgICAgICAgICAgIC8qIGxvY2FsIGNoYW5uZWwgbnVtYmVyICovCi0gICAgICAgIHVuY2hhciAgICAgICAgICBpb19jbnRbTUFYSURdOyAgICAgICAgICAvKiBjdXJyZW50IElPIGNvdW50ICovCi0gICAgICAgIHVsb25nMzIgICAgICAgICBhZGRyZXNzOyAgICAgICAgICAgICAgICAvKiBjaGFubmVsIGFkZHJlc3MgKi8KLSAgICAgICAgdWxvbmczMiAgICAgICAgIGlkX2xpc3RbTUFYSURdOyAgICAgICAgIC8qIElEcyBvZiB0aGUgcGh5cy4gZGV2aWNlcyAqLworICAgICAgICB1OCAgICAgICAgICBsb2NrOyAgICAgICAgICAgICAgICAgICAvKiBjaGFubmVsIGxvY2tlZD8gKGhvdCBwbHVnKSAqLworICAgICAgICB1OCAgICAgICAgICBwZGV2X2NudDsgICAgICAgICAgICAgICAvKiBwaHlzaWNhbCBkZXZpY2UgY291bnQgKi8KKyAgICAgICAgdTggICAgICAgICAgbG9jYWxfbm87ICAgICAgICAgICAgICAgLyogbG9jYWwgY2hhbm5lbCBudW1iZXIgKi8KKyAgICAgICAgdTggICAgICAgICAgaW9fY250W01BWElEXTsgICAgICAgICAgLyogY3VycmVudCBJTyBjb3VudCAqLworICAgICAgICB1MzIgICAgICAgICBhZGRyZXNzOyAgICAgICAgICAgICAgICAvKiBjaGFubmVsIGFkZHJlc3MgKi8KKyAgICAgICAgdTMyICAgICAgICAgaWRfbGlzdFtNQVhJRF07ICAgICAgICAgLyogSURzIG9mIHRoZSBwaHlzLiBkZXZpY2VzICovCiAgICAgfSByYXdbTUFYQlVTXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGNoYW5uZWxzICovCiAgICAgc3RydWN0IHsKICAgICAgICAgU2NzaV9DbW5kICAgICAgICpjbW5kOyAgICAgICAgICAgICAgICAgIC8qIHBlbmRpbmcgcmVxdWVzdCAqLwotICAgICAgICB1c2hvcnQgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLworICAgICAgICB1MTYgICAgICAgICAgc2VydmljZTsgICAgICAgICAgICAgICAgLyogc2VydmljZSAqLwogICAgIH0gY21kX3RhYltHRFRIX01BWENNRFNdOyAgICAgICAgICAgICAgICAgICAgLyogdGFibGUgb2YgcGVuZC4gcmVxdWVzdHMgKi8KICAgICBzdHJ1Y3QgZ2R0aF9jbW5kaW5mbyB7ICAgICAgICAgICAgICAgICAgICAgIC8qIHBlci1jb21tYW5kIHByaXZhdGUgaW5mbyAqLwogICAgICAgICBpbnQgaW5kZXg7CiAgICAgICAgIGludCBpbnRlcm5hbF9jb21tYW5kOyAgICAgICAgICAgICAgICAgICAvKiBkb24ndCBjYWxsIHNjc2lfZG9uZSAqLwogICAgICAgICBnZHRoX2NtZF9zdHIgKmludGVybmFsX2NtZF9zdHI7ICAgICAgICAgLyogY3JpZXIgZm9yIGludGVybmFsIG1lc3NhZ2VzKi8KICAgICAgICAgZG1hX2FkZHJfdCBzZW5zZV9wYWRkcjsgICAgICAgICAgICAgICAgIC8qIHNlbnNlIGRtYS1hZGRyICovCi0gICAgICAgIHVuY2hhciBwcmlvcml0eTsKKyAgICAgICAgdTggcHJpb3JpdHk7CiAJaW50IHRpbWVvdXRfY291bnQ7CQkJLyogIyBvZiB0aW1lb3V0IGNhbGxzICovCiAgICAgICAgIHZvbGF0aWxlIGludCB3YWl0X2Zvcl9jb21wbGV0aW9uOwotICAgICAgICB1c2hvcnQgc3RhdHVzOwotICAgICAgICB1bG9uZzMyIGluZm87CisgICAgICAgIHUxNiBzdGF0dXM7CisgICAgICAgIHUzMiBpbmZvOwogICAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFfZGlyOwogICAgICAgICBpbnQgcGhhc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogPz8/PyAqLwogICAgICAgICBpbnQgT3BDb2RlOwogICAgIH0gY21uZGluZm9bR0RUSF9NQVhDTURTXTsgICAgICAgICAgICAgICAgICAgLyogaW5kZXg9PTAgaXMgZnJlZSAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgYnVzX2NudDsgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgY291bnQgKi8KLSAgICB1bmNoYXIgICAgICAgICAgICAgIHRpZF9jbnQ7ICAgICAgICAgICAgICAgIC8qIFRhcmdldCBJRCBjb3VudCAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgYnVzX2lkW01BWEJVU107ICAgICAgICAgLyogSU9QIElEcyAqLwotICAgIHVuY2hhciAgICAgICAgICAgICAgdmlydF9idXM7ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHZpcnR1YWwgYnVzICovCi0gICAgdW5jaGFyICAgICAgICAgICAgICBtb3JlX3Byb2M7ICAgICAgICAgICAgICAvKiBtb3JlIC9wcm9jIGluZm8gc3VwcG9ydGVkICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICBjbWRfY250OyAgICAgICAgICAgICAgICAvKiBjb21tYW5kIGNvdW50IGluIERQUkFNICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICBjbWRfbGVuOyAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgYWN0dWFsIGNvbW1hbmQgKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgIGNtZF9vZmZzX2RwbWVtOyAgICAgICAgIC8qIGFjdHVhbCBvZmZzZXQgaW4gRFBSQU0gKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgIGljX2FsbF9zaXplOyAgICAgICAgICAgIC8qIHNpemVvZiBEUFJBTSBpbnRlcmYuIGFyZWEgKi8KKyAgICB1OCAgICAgICAgICAgICAgYnVzX2NudDsgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgY291bnQgKi8KKyAgICB1OCAgICAgICAgICAgICAgdGlkX2NudDsgICAgICAgICAgICAgICAgLyogVGFyZ2V0IElEIGNvdW50ICovCisgICAgdTggICAgICAgICAgICAgIGJ1c19pZFtNQVhCVVNdOyAgICAgICAgIC8qIElPUCBJRHMgKi8KKyAgICB1OCAgICAgICAgICAgICAgdmlydF9idXM7ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHZpcnR1YWwgYnVzICovCisgICAgdTggICAgICAgICAgICAgIG1vcmVfcHJvYzsgICAgICAgICAgICAgIC8qIG1vcmUgL3Byb2MgaW5mbyBzdXBwb3J0ZWQgKi8KKyAgICB1MTYgICAgICAgICAgICAgIGNtZF9jbnQ7ICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgY291bnQgaW4gRFBSQU0gKi8KKyAgICB1MTYgICAgICAgICAgICAgIGNtZF9sZW47ICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBhY3R1YWwgY29tbWFuZCAqLworICAgIHUxNiAgICAgICAgICAgICAgY21kX29mZnNfZHBtZW07ICAgICAgICAgLyogYWN0dWFsIG9mZnNldCBpbiBEUFJBTSAqLworICAgIHUxNiAgICAgICAgICAgICAgaWNfYWxsX3NpemU7ICAgICAgICAgICAgLyogc2l6ZW9mIERQUkFNIGludGVyZi4gYXJlYSAqLwogICAgIGdkdGhfY3Bhcl9zdHIgICAgICAgY3BhcjsgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBjYWNoZSBwYXIuICovCiAgICAgZ2R0aF9iZmVhdF9zdHIgICAgICBiZmVhdDsgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIGZlYXR1cmVzICovCiAgICAgZ2R0aF9iaW5mb19zdHIgICAgICBiaW5mbzsgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIGluZm8gKi8KQEAgLTk0MSw3ICs5NDEsNyBAQAogICAgIHN0cnVjdCBwY2lfZGV2ICAgICAgKnBkZXY7CiAgICAgY2hhciAgICAgICAgICAgICAgICBvZW1fbmFtZVs4XTsKICNpZmRlZiBHRFRIX0RNQV9TVEFUSVNUSUNTCi0gICAgdWxvbmcgICAgICAgICAgICAgICBkbWEzMl9jbnQsIGRtYTY0X2NudDsgICAvKiBzdGF0aXN0aWNzOiBETUEgYnVmZmVyICovCisgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgIGRtYTMyX2NudCwgZG1hNjRfY250OyAgIC8qIHN0YXRpc3RpY3M6IERNQSBidWZmZXIgKi8KICNlbmRpZgogICAgIHN0cnVjdCBzY3NpX2RldmljZSAgICAgICAgICpzZGV2OwogfSBnZHRoX2hhX3N0cjsKQEAgLTk1Myw2NSArOTUzLDY1IEBACiAKIC8qIElOUVVJUlkgZGF0YSBmb3JtYXQgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bmNoYXIgICAgICB0eXBlX3F1YWw7Ci0gICAgdW5jaGFyICAgICAgbW9kaWZfcm1iOwotICAgIHVuY2hhciAgICAgIHZlcnNpb247Ci0gICAgdW5jaGFyICAgICAgcmVzcF9hZW5jOwotICAgIHVuY2hhciAgICAgIGFkZF9sZW5ndGg7Ci0gICAgdW5jaGFyICAgICAgcmVzZXJ2ZWQxOwotICAgIHVuY2hhciAgICAgIHJlc2VydmVkMjsKLSAgICB1bmNoYXIgICAgICBtaXNjOwotICAgIHVuY2hhciAgICAgIHZlbmRvcls4XTsKLSAgICB1bmNoYXIgICAgICBwcm9kdWN0WzE2XTsKLSAgICB1bmNoYXIgICAgICByZXZpc2lvbls0XTsKLX0gUEFDS0VEIGdkdGhfaW5xX2RhdGE7CisgICAgdTggICAgICB0eXBlX3F1YWw7CisgICAgdTggICAgICBtb2RpZl9ybWI7CisgICAgdTggICAgICB2ZXJzaW9uOworICAgIHU4ICAgICAgcmVzcF9hZW5jOworICAgIHU4ICAgICAgYWRkX2xlbmd0aDsKKyAgICB1OCAgICAgIHJlc2VydmVkMTsKKyAgICB1OCAgICAgIHJlc2VydmVkMjsKKyAgICB1OCAgICAgIG1pc2M7CisgICAgdTggICAgICB2ZW5kb3JbOF07CisgICAgdTggICAgICBwcm9kdWN0WzE2XTsKKyAgICB1OCAgICAgIHJldmlzaW9uWzRdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2lucV9kYXRhOwogCiAvKiBSRUFEX0NBUEFDSVRZIGRhdGEgZm9ybWF0ICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgbGFzdF9ibG9ja19ubzsKLSAgICB1bG9uZzMyICAgICBibG9ja19sZW5ndGg7Ci19IFBBQ0tFRCBnZHRoX3JkY2FwX2RhdGE7CisgICAgdTMyICAgICBsYXN0X2Jsb2NrX25vOworICAgIHUzMiAgICAgYmxvY2tfbGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX3JkY2FwX2RhdGE7CiAKIC8qIFJFQURfQ0FQQUNJVFkgKDE2KSBkYXRhIGZvcm1hdCAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nNjQgICAgIGxhc3RfYmxvY2tfbm87Ci0gICAgdWxvbmczMiAgICAgYmxvY2tfbGVuZ3RoOwotfSBQQUNLRUQgZ2R0aF9yZGNhcDE2X2RhdGE7CisgICAgdTY0ICAgICBsYXN0X2Jsb2NrX25vOworICAgIHUzMiAgICAgYmxvY2tfbGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX3JkY2FwMTZfZGF0YTsKIAogLyogUkVRVUVTVF9TRU5TRSBkYXRhIGZvcm1hdCAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVuY2hhciAgICAgIGVycm9yY29kZTsKLSAgICB1bmNoYXIgICAgICBzZWdubzsKLSAgICB1bmNoYXIgICAgICBrZXk7Ci0gICAgdWxvbmczMiAgICAgaW5mbzsKLSAgICB1bmNoYXIgICAgICBhZGRfbGVuZ3RoOwotICAgIHVsb25nMzIgICAgIGNtZF9pbmZvOwotICAgIHVuY2hhciAgICAgIGFkc2M7Ci0gICAgdW5jaGFyICAgICAgYWRzcTsKLSAgICB1bmNoYXIgICAgICBmcnVjOwotICAgIHVuY2hhciAgICAgIGtleV9zcGVjWzNdOwotfSBQQUNLRUQgZ2R0aF9zZW5zZV9kYXRhOworICAgIHU4ICAgICAgZXJyb3Jjb2RlOworICAgIHU4ICAgICAgc2Vnbm87CisgICAgdTggICAgICBrZXk7CisgICAgdTMyICAgICBpbmZvOworICAgIHU4ICAgICAgYWRkX2xlbmd0aDsKKyAgICB1MzIgICAgIGNtZF9pbmZvOworICAgIHU4ICAgICAgYWRzYzsKKyAgICB1OCAgICAgIGFkc3E7CisgICAgdTggICAgICBmcnVjOworICAgIHU4ICAgICAga2V5X3NwZWNbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfc2Vuc2VfZGF0YTsKIAogLyogTU9ERV9TRU5TRSBkYXRhIGZvcm1hdCAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuY2hhciAgZGF0YV9sZW5ndGg7Ci0gICAgICAgIHVuY2hhciAgbWVkX3R5cGU7Ci0gICAgICAgIHVuY2hhciAgZGV2X3BhcjsKLSAgICAgICAgdW5jaGFyICBiZF9sZW5ndGg7Ci0gICAgfSBQQUNLRUQgaGQ7CisgICAgICAgIHU4ICBkYXRhX2xlbmd0aDsKKyAgICAgICAgdTggIG1lZF90eXBlOworICAgICAgICB1OCAgZGV2X3BhcjsKKyAgICAgICAgdTggIGJkX2xlbmd0aDsKKyAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGhkOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuY2hhciAgZGVuc19jb2RlOwotICAgICAgICB1bmNoYXIgIGJsb2NrX2NvdW50WzNdOwotICAgICAgICB1bmNoYXIgIHJlc2VydmVkOwotICAgICAgICB1bmNoYXIgIGJsb2NrX2xlbmd0aFszXTsKLSAgICB9IFBBQ0tFRCBiZDsKLX0gUEFDS0VEIGdkdGhfbW9kZXBfZGF0YTsKKyAgICAgICAgdTggIGRlbnNfY29kZTsKKyAgICAgICAgdTggIGJsb2NrX2NvdW50WzNdOworICAgICAgICB1OCAgcmVzZXJ2ZWQ7CisgICAgICAgIHU4ICBibG9ja19sZW5ndGhbM107CisgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBiZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9tb2RlcF9kYXRhOwogCiAvKiBzdGFjayBmcmFtZSAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nICAgICAgIGJbMTBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzIvNjQgYml0IGNvbXBpbGVyICEgKi8KLX0gUEFDS0VEIGdkdGhfc3RhY2tmcmFtZTsKKyAgICB1bnNpZ25lZCBsb25nICAgICAgIGJbMTBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzIvNjQgYml0IGNvbXBpbGVyICEgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZ2R0aF9zdGFja2ZyYW1lOwogCiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwaW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ2R0aF9pb2N0bC5oIGIvZHJpdmVycy9zY3NpL2dkdGhfaW9jdGwuaAppbmRleCA3ODNmYWU3Li5iMDA0YzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ2R0aF9pb2N0bC5oCisrKyBiL2RyaXZlcnMvc2NzaS9nZHRoX2lvY3RsLmgKQEAgLTMyLDEwOSArMzIsMTAxIEBACiAjZGVmaW5lIE1BWF9IRFJJVkVTICAgICBNQVhfTERSSVZFUyAgICAgICAgICAgICAvKiBtYXguIGhvc3QgZHJpdmUgY291bnQgKi8KICNlbmRpZgogCi0vKiB0eXBlZGVmcyAqLwotI2lmZGVmIF9fS0VSTkVMX18KLXR5cGVkZWYgdTMyICAgICB1bG9uZzMyOwotdHlwZWRlZiB1NjQgICAgIHVsb25nNjQ7Ci0jZW5kaWYKLQotI2RlZmluZSBQQUNLRUQgIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCi0KIC8qIHNjYXR0ZXIvZ2F0aGVyIGVsZW1lbnQgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICBzZ19wdHI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHJlc3MgKi8KLSAgICB1bG9uZzMyICAgICBzZ19sZW47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCAqLwotfSBQQUNLRUQgZ2R0aF9zZ19zdHI7CisgICAgdTMyICAgICBzZ19wdHI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHJlc3MgKi8KKyAgICB1MzIgICAgIHNnX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfc2dfc3RyOwogCiAvKiBzY2F0dGVyL2dhdGhlciBlbGVtZW50IC0gNjRiaXQgYWRkcmVzc2VzICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmc2NCAgICAgc2dfcHRyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGRyZXNzICovCi0gICAgdWxvbmczMiAgICAgc2dfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggKi8KLX0gUEFDS0VEIGdkdGhfc2c2NF9zdHI7CisgICAgdTY0ICAgICBzZ19wdHI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHJlc3MgKi8KKyAgICB1MzIgICAgIHNnX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfc2c2NF9zdHI7CiAKIC8qIGNvbW1hbmQgc3RydWN0dXJlICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgQm9hcmROb2RlOyAgICAgICAgICAgICAgICAgICAgICAvKiBib2FyZCBub2RlIChhbHdheXMgMCkgKi8KLSAgICB1bG9uZzMyICAgICBDb21tYW5kSW5kZXg7ICAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgbnVtYmVyICovCi0gICAgdXNob3J0ICAgICAgT3BDb2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUgY29tbWFuZCAoUkVBRCwuLikgKi8KKyAgICB1MzIgICAgIEJvYXJkTm9kZTsgICAgICAgICAgICAgICAgICAgICAgLyogYm9hcmQgbm9kZSAoYWx3YXlzIDApICovCisgICAgdTMyICAgICBDb21tYW5kSW5kZXg7ICAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgbnVtYmVyICovCisgICAgdTE2ICAgICAgT3BDb2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUgY29tbWFuZCAoUkVBRCwuLikgKi8KICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICBEZXZpY2VObzsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY2FjaGUgZHJpdmUgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIEJsb2NrTm87ICAgICAgICAgICAgICAgIC8qIGJsb2NrIG51bWJlciAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgQmxvY2tDbnQ7ICAgICAgICAgICAgICAgLyogYmxvY2sgY291bnQgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIERlc3RBZGRyOyAgICAgICAgICAgICAgIC8qIGRlc3QuIGFkZHIuIChpZiBzL2c6IC0xKSAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgc2dfY2FuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KKyAgICAgICAgICAgIHUxNiAgICAgIERldmljZU5vOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjYWNoZSBkcml2ZSAqLworICAgICAgICAgICAgdTMyICAgICBCbG9ja05vOyAgICAgICAgICAgICAgICAvKiBibG9jayBudW1iZXIgKi8KKyAgICAgICAgICAgIHUzMiAgICAgQmxvY2tDbnQ7ICAgICAgICAgICAgICAgLyogYmxvY2sgY291bnQgKi8KKyAgICAgICAgICAgIHUzMiAgICAgRGVzdEFkZHI7ICAgICAgICAgICAgICAgLyogZGVzdC4gYWRkci4gKGlmIHMvZzogLTEpICovCisgICAgICAgICAgICB1MzIgICAgIHNnX2Nhbno7ICAgICAgICAgICAgICAgIC8qIHMvZyBlbGVtZW50IGNvdW50ICovCiAgICAgICAgICAgICBnZHRoX3NnX3N0ciBzZ19sc3RbR0RUSF9NQVhTR107ICAgICAvKiBzL2cgbGlzdCAqLwotICAgICAgICB9IFBBQ0tFRCBjYWNoZTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc2VydmljZSBjbWQuIHN0ci4gKi8KKyAgICAgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBjYWNoZTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FjaGUgc2VydmljZSBjbWQuIHN0ci4gKi8KICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgIERldmljZU5vOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjYWNoZSBkcml2ZSAqLwotICAgICAgICAgICAgdWxvbmc2NCAgICAgQmxvY2tObzsgICAgICAgICAgICAgICAgLyogYmxvY2sgbnVtYmVyICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBCbG9ja0NudDsgICAgICAgICAgICAgICAvKiBibG9jayBjb3VudCAqLwotICAgICAgICAgICAgdWxvbmc2NCAgICAgRGVzdEFkZHI7ICAgICAgICAgICAgICAgLyogZGVzdC4gYWRkci4gKGlmIHMvZzogLTEpICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBzZ19jYW56OyAgICAgICAgICAgICAgICAvKiBzL2cgZWxlbWVudCBjb3VudCAqLworICAgICAgICAgICAgdTE2ICAgICAgRGV2aWNlTm87ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNhY2hlIGRyaXZlICovCisgICAgICAgICAgICB1NjQgICAgIEJsb2NrTm87ICAgICAgICAgICAgICAgIC8qIGJsb2NrIG51bWJlciAqLworICAgICAgICAgICAgdTMyICAgICBCbG9ja0NudDsgICAgICAgICAgICAgICAvKiBibG9jayBjb3VudCAqLworICAgICAgICAgICAgdTY0ICAgICBEZXN0QWRkcjsgICAgICAgICAgICAgICAvKiBkZXN0LiBhZGRyLiAoaWYgcy9nOiAtMSkgKi8KKyAgICAgICAgICAgIHUzMiAgICAgc2dfY2FuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KICAgICAgICAgICAgIGdkdGhfc2c2NF9zdHIgc2dfbHN0W0dEVEhfTUFYU0ddOyAgIC8qIHMvZyBsaXN0ICovCi0gICAgICAgIH0gUEFDS0VEIGNhY2hlNjQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBjYWNoZSBzZXJ2aWNlIGNtZC4gc3RyLiAqLworICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGNhY2hlNjQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBjYWNoZSBzZXJ2aWNlIGNtZC4gc3RyLiAqLwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdXNob3J0ICAgICAgcGFyYW1fc2l6ZTsgICAgICAgICAgICAgLyogc2l6ZSBvZiBwX3BhcmFtIGJ1ZmZlciAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgc3ViZnVuYzsgICAgICAgICAgICAgICAgLyogSU9DVEwgZnVuY3Rpb24gKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIGNoYW5uZWw7ICAgICAgICAgICAgICAgIC8qIGRldmljZSAqLwotICAgICAgICAgICAgdWxvbmc2NCAgICAgcF9wYXJhbTsgICAgICAgICAgICAgICAgLyogYnVmZmVyICovCi0gICAgICAgIH0gUEFDS0VEIGlvY3RsOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJT0NUTCBjb21tYW5kIHN0cnVjdHVyZSAqLworICAgICAgICAgICAgdTE2ICAgICAgcGFyYW1fc2l6ZTsgICAgICAgICAgICAgLyogc2l6ZSBvZiBwX3BhcmFtIGJ1ZmZlciAqLworICAgICAgICAgICAgdTMyICAgICBzdWJmdW5jOyAgICAgICAgICAgICAgICAvKiBJT0NUTCBmdW5jdGlvbiAqLworICAgICAgICAgICAgdTMyICAgICBjaGFubmVsOyAgICAgICAgICAgICAgICAvKiBkZXZpY2UgKi8KKyAgICAgICAgICAgIHU2NCAgICAgcF9wYXJhbTsgICAgICAgICAgICAgICAgLyogYnVmZmVyICovCisgICAgICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgaW9jdGw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElPQ1RMIGNvbW1hbmQgc3RydWN0dXJlICovCiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICByZXNlcnZlZDsKKyAgICAgICAgICAgIHUxNiAgICAgIHJlc2VydmVkOwogICAgICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICAgICAgICAgIHVsb25nMzIgIG1zZ19oYW5kbGU7ICAgICAgICAvKiBtZXNzYWdlIGhhbmRsZSAqLwotICAgICAgICAgICAgICAgICAgICB1bG9uZzY0ICBtc2dfYWRkcjsgICAgICAgICAgLyogbWVzc2FnZSBidWZmZXIgYWRkcmVzcyAqLwotICAgICAgICAgICAgICAgIH0gUEFDS0VEIG1zZzsKLSAgICAgICAgICAgICAgICB1bmNoYXIgICAgICAgZGF0YVsxMl07ICAgICAgICAgIC8qIGJ1ZmZlciBmb3IgcnRjIGRhdGEsIC4uLiAqLworICAgICAgICAgICAgICAgICAgICB1MzIgIG1zZ19oYW5kbGU7ICAgICAgICAvKiBtZXNzYWdlIGhhbmRsZSAqLworICAgICAgICAgICAgICAgICAgICB1NjQgIG1zZ19hZGRyOyAgICAgICAgICAvKiBtZXNzYWdlIGJ1ZmZlciBhZGRyZXNzICovCisgICAgICAgICAgICAgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBtc2c7CisgICAgICAgICAgICAgICAgdTggICAgICAgZGF0YVsxMl07ICAgICAgICAgIC8qIGJ1ZmZlciBmb3IgcnRjIGRhdGEsIC4uLiAqLwogICAgICAgICAgICAgfSBzdTsKLSAgICAgICAgfSBQQUNLRUQgc2NyZWVuOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjcmVlbiBzZXJ2aWNlIGNtZC4gc3RyLiAqLworICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjcmVlbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY3JlZW4gc2VydmljZSBjbWQuIHN0ci4gKi8KICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgIHJlc2VydmVkOwotICAgICAgICAgICAgdWxvbmczMiAgICAgZGlyZWN0aW9uOyAgICAgICAgICAgICAgLyogZGF0YSBkaXJlY3Rpb24gKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIG1kaXNjX3RpbWU7ICAgICAgICAgICAgIC8qIGRpc2MuIHRpbWUgKDA6IG5vIHRpbWVvdXQpKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIG1jb25fdGltZTsgICAgICAgICAgICAgIC8qIGNvbm5lY3QgdGltZSgwOiBubyB0by4pICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBzZGF0YTsgICAgICAgICAgICAgICAgICAvKiBkZXN0LiBhZGRyLiAoaWYgcy9nOiAtMSkgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIHNkbGVuOyAgICAgICAgICAgICAgICAgIC8qIGRhdGEgbGVuZ3RoIChieXRlcykgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIGNsZW47ICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgY21kLiBsZW5ndGgoNiwxMCwxMikgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIGNtZFsxMl07ICAgICAgICAgICAgICAgIC8qIFNDU0kgY29tbWFuZCAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgdGFyZ2V0OyAgICAgICAgICAgICAgICAgLyogdGFyZ2V0IElEICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICBsdW47ICAgICAgICAgICAgICAgICAgICAvKiBMVU4gKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIGJ1czsgICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgYnVzIG51bWJlciAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgcHJpb3JpdHk7ICAgICAgICAgICAgICAgLyogb25seSAwIHVzZWQgKi8KLSAgICAgICAgICAgIHVsb25nMzIgICAgIHNlbnNlX2xlbjsgICAgICAgICAgICAgIC8qIHNlbnNlIGRhdGEgbGVuZ3RoICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBzZW5zZV9kYXRhOyAgICAgICAgICAgICAvKiBzZW5zZSBkYXRhIGFkZHIuICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBsaW5rX3A7ICAgICAgICAgICAgICAgICAvKiBsaW5rZWQgY21kcyAobm90IHN1cHAuKSAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgc2dfcmFuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KKyAgICAgICAgICAgIHUxNiAgICAgIHJlc2VydmVkOworICAgICAgICAgICAgdTMyICAgICBkaXJlY3Rpb247ICAgICAgICAgICAgICAvKiBkYXRhIGRpcmVjdGlvbiAqLworICAgICAgICAgICAgdTMyICAgICBtZGlzY190aW1lOyAgICAgICAgICAgICAvKiBkaXNjLiB0aW1lICgwOiBubyB0aW1lb3V0KSovCisgICAgICAgICAgICB1MzIgICAgIG1jb25fdGltZTsgICAgICAgICAgICAgIC8qIGNvbm5lY3QgdGltZSgwOiBubyB0by4pICovCisgICAgICAgICAgICB1MzIgICAgIHNkYXRhOyAgICAgICAgICAgICAgICAgIC8qIGRlc3QuIGFkZHIuIChpZiBzL2c6IC0xKSAqLworICAgICAgICAgICAgdTMyICAgICBzZGxlbjsgICAgICAgICAgICAgICAgICAvKiBkYXRhIGxlbmd0aCAoYnl0ZXMpICovCisgICAgICAgICAgICB1MzIgICAgIGNsZW47ICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgY21kLiBsZW5ndGgoNiwxMCwxMikgKi8KKyAgICAgICAgICAgIHU4ICAgICAgY21kWzEyXTsgICAgICAgICAgICAgICAgLyogU0NTSSBjb21tYW5kICovCisgICAgICAgICAgICB1OCAgICAgIHRhcmdldDsgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBJRCAqLworICAgICAgICAgICAgdTggICAgICBsdW47ICAgICAgICAgICAgICAgICAgICAvKiBMVU4gKi8KKyAgICAgICAgICAgIHU4ICAgICAgYnVzOyAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgbnVtYmVyICovCisgICAgICAgICAgICB1OCAgICAgIHByaW9yaXR5OyAgICAgICAgICAgICAgIC8qIG9ubHkgMCB1c2VkICovCisgICAgICAgICAgICB1MzIgICAgIHNlbnNlX2xlbjsgICAgICAgICAgICAgIC8qIHNlbnNlIGRhdGEgbGVuZ3RoICovCisgICAgICAgICAgICB1MzIgICAgIHNlbnNlX2RhdGE7ICAgICAgICAgICAgIC8qIHNlbnNlIGRhdGEgYWRkci4gKi8KKyAgICAgICAgICAgIHUzMiAgICAgbGlua19wOyAgICAgICAgICAgICAgICAgLyogbGlua2VkIGNtZHMgKG5vdCBzdXBwLikgKi8KKyAgICAgICAgICAgIHUzMiAgICAgc2dfcmFuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KICAgICAgICAgICAgIGdkdGhfc2dfc3RyIHNnX2xzdFtHRFRIX01BWFNHXTsgICAgIC8qIHMvZyBsaXN0ICovCi0gICAgICAgIH0gUEFDS0VEIHJhdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByYXcgc2VydmljZSBjbWQuIHN0cnVjdC4gKi8KKyAgICAgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSByYXc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmF3IHNlcnZpY2UgY21kLiBzdHJ1Y3QuICovCiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICByZXNlcnZlZDsKLSAgICAgICAgICAgIHVsb25nMzIgICAgIGRpcmVjdGlvbjsgICAgICAgICAgICAgIC8qIGRhdGEgZGlyZWN0aW9uICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBtZGlzY190aW1lOyAgICAgICAgICAgICAvKiBkaXNjLiB0aW1lICgwOiBubyB0aW1lb3V0KSovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBtY29uX3RpbWU7ICAgICAgICAgICAgICAvKiBjb25uZWN0IHRpbWUoMDogbm8gdG8uKSAqLwotICAgICAgICAgICAgdWxvbmc2NCAgICAgc2RhdGE7ICAgICAgICAgICAgICAgICAgLyogZGVzdC4gYWRkci4gKGlmIHMvZzogLTEpICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBzZGxlbjsgICAgICAgICAgICAgICAgICAvKiBkYXRhIGxlbmd0aCAoYnl0ZXMpICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBjbGVuOyAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGNtZC4gbGVuZ3RoKDYsLi4sMTYpICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICBjbWRbMTZdOyAgICAgICAgICAgICAgICAvKiBTQ1NJIGNvbW1hbmQgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIHRhcmdldDsgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBJRCAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgbHVuOyAgICAgICAgICAgICAgICAgICAgLyogTFVOICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICBidXM7ICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGJ1cyBudW1iZXIgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgIHByaW9yaXR5OyAgICAgICAgICAgICAgIC8qIG9ubHkgMCB1c2VkICovCi0gICAgICAgICAgICB1bG9uZzMyICAgICBzZW5zZV9sZW47ICAgICAgICAgICAgICAvKiBzZW5zZSBkYXRhIGxlbmd0aCAqLwotICAgICAgICAgICAgdWxvbmc2NCAgICAgc2Vuc2VfZGF0YTsgICAgICAgICAgICAgLyogc2Vuc2UgZGF0YSBhZGRyLiAqLwotICAgICAgICAgICAgdWxvbmczMiAgICAgc2dfcmFuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KKyAgICAgICAgICAgIHUxNiAgICAgIHJlc2VydmVkOworICAgICAgICAgICAgdTMyICAgICBkaXJlY3Rpb247ICAgICAgICAgICAgICAvKiBkYXRhIGRpcmVjdGlvbiAqLworICAgICAgICAgICAgdTMyICAgICBtZGlzY190aW1lOyAgICAgICAgICAgICAvKiBkaXNjLiB0aW1lICgwOiBubyB0aW1lb3V0KSovCisgICAgICAgICAgICB1MzIgICAgIG1jb25fdGltZTsgICAgICAgICAgICAgIC8qIGNvbm5lY3QgdGltZSgwOiBubyB0by4pICovCisgICAgICAgICAgICB1NjQgICAgIHNkYXRhOyAgICAgICAgICAgICAgICAgIC8qIGRlc3QuIGFkZHIuIChpZiBzL2c6IC0xKSAqLworICAgICAgICAgICAgdTMyICAgICBzZGxlbjsgICAgICAgICAgICAgICAgICAvKiBkYXRhIGxlbmd0aCAoYnl0ZXMpICovCisgICAgICAgICAgICB1MzIgICAgIGNsZW47ICAgICAgICAgICAgICAgICAgIC8qIFNDU0kgY21kLiBsZW5ndGgoNiwuLiwxNikgKi8KKyAgICAgICAgICAgIHU4ICAgICAgY21kWzE2XTsgICAgICAgICAgICAgICAgLyogU0NTSSBjb21tYW5kICovCisgICAgICAgICAgICB1OCAgICAgIHRhcmdldDsgICAgICAgICAgICAgICAgIC8qIHRhcmdldCBJRCAqLworICAgICAgICAgICAgdTggICAgICBsdW47ICAgICAgICAgICAgICAgICAgICAvKiBMVU4gKi8KKyAgICAgICAgICAgIHU4ICAgICAgYnVzOyAgICAgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgbnVtYmVyICovCisgICAgICAgICAgICB1OCAgICAgIHByaW9yaXR5OyAgICAgICAgICAgICAgIC8qIG9ubHkgMCB1c2VkICovCisgICAgICAgICAgICB1MzIgICAgIHNlbnNlX2xlbjsgICAgICAgICAgICAgIC8qIHNlbnNlIGRhdGEgbGVuZ3RoICovCisgICAgICAgICAgICB1NjQgICAgIHNlbnNlX2RhdGE7ICAgICAgICAgICAgIC8qIHNlbnNlIGRhdGEgYWRkci4gKi8KKyAgICAgICAgICAgIHUzMiAgICAgc2dfcmFuejsgICAgICAgICAgICAgICAgLyogcy9nIGVsZW1lbnQgY291bnQgKi8KICAgICAgICAgICAgIGdkdGhfc2c2NF9zdHIgc2dfbHN0W0dEVEhfTUFYU0ddOyAgIC8qIHMvZyBsaXN0ICovCi0gICAgICAgIH0gUEFDS0VEIHJhdzY0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiByYXcgc2VydmljZSBjbWQuIHN0cnVjdC4gKi8KKyAgICAgICAgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSByYXc2NDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmF3IHNlcnZpY2UgY21kLiBzdHJ1Y3QuICovCiAgICAgfSB1OwogICAgIC8qIGFkZGl0aW9uYWwgdmFyaWFibGVzICovCi0gICAgdW5jaGFyICAgICAgU2VydmljZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIHNlcnZpY2UgKi8KLSAgICB1bmNoYXIgICAgICByZXNlcnZlZDsKLSAgICB1c2hvcnQgICAgICBTdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgcmVzdWx0ICovCi0gICAgdWxvbmczMiAgICAgSW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uICovCisgICAgdTggICAgICBTZXJ2aWNlOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgc2VydmljZSAqLworICAgIHU4ICAgICAgcmVzZXJ2ZWQ7CisgICAgdTE2ICAgICAgU3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIHJlc3VsdCAqLworICAgIHUzMiAgICAgSW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uICovCiAgICAgdm9pZCAgICAgICAgKlJlcXVlc3RCdWZmZXI7ICAgICAgICAgICAgICAgICAvKiByZXF1ZXN0IGJ1ZmZlciAqLwotfSBQQUNLRUQgZ2R0aF9jbWRfc3RyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBnZHRoX2NtZF9zdHI7CiAKIC8qIGNvbnRyb2xsZXIgZXZlbnQgc3RydWN0dXJlICovCiAjZGVmaW5lIEVTX0FTWU5DICAgIDEKQEAgLTE0MiwxMjkgKzEzNCwxMjkgQEAKICNkZWZpbmUgRVNfVEVTVCAgICAgMwogI2RlZmluZSBFU19TWU5DICAgICA0CiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdXNob3J0ICAgICAgICAgICAgICAgICAgc2l6ZTsgICAgICAgICAgICAgICAvKiBzaXplIG9mIHN0cnVjdHVyZSAqLworICAgIHUxNiAgICAgICAgICAgICAgICAgIHNpemU7ICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBzdHJ1Y3R1cmUgKi8KICAgICB1bmlvbiB7CiAgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgc3RyZWFtWzE2XTsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBpb25vZGU7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgc2VydmljZTsKLSAgICAgICAgICAgIHVsb25nMzIgICAgICAgICBpbmRleDsKLSAgICAgICAgfSBQQUNLRUQgZHJpdmVyOworICAgICAgICAgICAgdTE2ICAgICAgICAgIGlvbm9kZTsKKyAgICAgICAgICAgIHUxNiAgICAgICAgICBzZXJ2aWNlOworICAgICAgICAgICAgdTMyICAgICAgICAgaW5kZXg7CisgICAgICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZHJpdmVyOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGlvbm9kZTsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBzZXJ2aWNlOwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIHN0YXR1czsKLSAgICAgICAgICAgIHVsb25nMzIgICAgICAgICBpbmZvOwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIHNjc2lfY29vcmRbM107Ci0gICAgICAgIH0gUEFDS0VEIGFzeW5jOworICAgICAgICAgICAgdTE2ICAgICAgICAgIGlvbm9kZTsKKyAgICAgICAgICAgIHUxNiAgICAgICAgICBzZXJ2aWNlOworICAgICAgICAgICAgdTE2ICAgICAgICAgIHN0YXR1czsKKyAgICAgICAgICAgIHUzMiAgICAgICAgIGluZm87CisgICAgICAgICAgICB1OCAgICAgICAgICBzY3NpX2Nvb3JkWzNdOworICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGFzeW5jOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGlvbm9kZTsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBzZXJ2aWNlOwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIHN0YXR1czsKLSAgICAgICAgICAgIHVsb25nMzIgICAgICAgICBpbmZvOwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGhvc3Rkcml2ZTsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBzY3NpX2Nvb3JkWzNdOwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIHNlbnNlX2tleTsKLSAgICAgICAgfSBQQUNLRUQgc3luYzsKKyAgICAgICAgICAgIHUxNiAgICAgICAgICBpb25vZGU7CisgICAgICAgICAgICB1MTYgICAgICAgICAgc2VydmljZTsKKyAgICAgICAgICAgIHUxNiAgICAgICAgICBzdGF0dXM7CisgICAgICAgICAgICB1MzIgICAgICAgICBpbmZvOworICAgICAgICAgICAgdTE2ICAgICAgICAgIGhvc3Rkcml2ZTsKKyAgICAgICAgICAgIHU4ICAgICAgICAgIHNjc2lfY29vcmRbM107CisgICAgICAgICAgICB1OCAgICAgICAgICBzZW5zZV9rZXk7CisgICAgICAgIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc3luYzsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVsb25nMzIgICAgICAgICBsMSwgbDIsIGwzLCBsNDsKLSAgICAgICAgfSBQQUNLRUQgdGVzdDsKKyAgICAgICAgICAgIHUzMiAgICAgICAgIGwxLCBsMiwgbDMsIGw0OworICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHRlc3Q7CiAgICAgfSBldTsKLSAgICB1bG9uZzMyICAgICAgICAgICAgICAgICBzZXZlcml0eTsKLSAgICB1bmNoYXIgICAgICAgICAgICAgICAgICBldmVudF9zdHJpbmdbMjU2XTsgICAgICAgICAgCi19IFBBQ0tFRCBnZHRoX2V2dF9kYXRhOworICAgIHUzMiAgICAgICAgICAgICAgICAgc2V2ZXJpdHk7CisgICAgdTggICAgICAgICAgICAgICAgICBldmVudF9zdHJpbmdbMjU2XTsgICAgICAgICAgCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfZXZ0X2RhdGE7CiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bG9uZzMyICAgICAgICAgZmlyc3Rfc3RhbXA7Ci0gICAgdWxvbmczMiAgICAgICAgIGxhc3Rfc3RhbXA7Ci0gICAgdXNob3J0ICAgICAgICAgIHNhbWVfY291bnQ7Ci0gICAgdXNob3J0ICAgICAgICAgIGV2ZW50X3NvdXJjZTsKLSAgICB1c2hvcnQgICAgICAgICAgZXZlbnRfaWR4OwotICAgIHVuY2hhciAgICAgICAgICBhcHBsaWNhdGlvbjsKLSAgICB1bmNoYXIgICAgICAgICAgcmVzZXJ2ZWQ7CisgICAgdTMyICAgICAgICAgZmlyc3Rfc3RhbXA7CisgICAgdTMyICAgICAgICAgbGFzdF9zdGFtcDsKKyAgICB1MTYgICAgICAgICAgc2FtZV9jb3VudDsKKyAgICB1MTYgICAgICAgICAgZXZlbnRfc291cmNlOworICAgIHUxNiAgICAgICAgICBldmVudF9pZHg7CisgICAgdTggICAgICAgICAgYXBwbGljYXRpb247CisgICAgdTggICAgICAgICAgcmVzZXJ2ZWQ7CiAgICAgZ2R0aF9ldnRfZGF0YSAgIGV2ZW50X2RhdGE7Ci19IFBBQ0tFRCBnZHRoX2V2dF9zdHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGdkdGhfZXZ0X3N0cjsKIAogCiAjaWZkZWYgR0RUSF9JT0NUTF9QUk9DCiAvKiBJT0NUTCBzdHJ1Y3R1cmUgKHdyaXRlKSAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVsb25nMzIgICAgICAgICAgICAgICAgIG1hZ2ljOyAgICAgICAgICAgICAgLyogSU9DVEwgbWFnaWMgKi8KLSAgICB1c2hvcnQgICAgICAgICAgICAgICAgICBpb2N0bDsgICAgICAgICAgICAgIC8qIElPQ1RMICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICAgICAgaW9ub2RlOyAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLwotICAgIHVzaG9ydCAgICAgICAgICAgICAgICAgIHNlcnZpY2U7ICAgICAgICAgICAgLyogY29udHJvbGxlciBzZXJ2aWNlICovCi0gICAgdXNob3J0ICAgICAgICAgICAgICAgICAgdGltZW91dDsgICAgICAgICAgICAvKiB0aW1lb3V0ICovCisgICAgdTMyICAgICAgICAgICAgICAgICBtYWdpYzsgICAgICAgICAgICAgIC8qIElPQ1RMIG1hZ2ljICovCisgICAgdTE2ICAgICAgICAgICAgICAgICAgaW9jdGw7ICAgICAgICAgICAgICAvKiBJT0NUTCAqLworICAgIHUxNiAgICAgICAgICAgICAgICAgIGlvbm9kZTsgICAgICAgICAgICAgLyogY29udHJvbGxlciBudW1iZXIgKi8KKyAgICB1MTYgICAgICAgICAgICAgICAgICBzZXJ2aWNlOyAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgc2VydmljZSAqLworICAgIHUxNiAgICAgICAgICAgICAgICAgIHRpbWVvdXQ7ICAgICAgICAgICAgLyogdGltZW91dCAqLwogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBjb21tYW5kWzUxMl07ICAgICAgIC8qIGNvbnRyb2xsZXIgY29tbWFuZCAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGRhdGFbMV07ICAgICAgICAgICAgLyogYWRkLiBkYXRhICovCisgICAgICAgICAgICB1OCAgICAgICAgICBjb21tYW5kWzUxMl07ICAgICAgIC8qIGNvbnRyb2xsZXIgY29tbWFuZCAqLworICAgICAgICAgICAgdTggICAgICAgICAgZGF0YVsxXTsgICAgICAgICAgICAvKiBhZGQuIGRhdGEgKi8KICAgICAgICAgfSBnZW5lcmFsOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGxvY2s7ICAgICAgICAgICAgICAgLyogbG9jay91bmxvY2sgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBkcml2ZV9jbnQ7ICAgICAgICAgIC8qIGRyaXZlIGNvdW50ICovCi0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgZHJpdmVzW01BWF9IRFJJVkVTXTsvKiBkcml2ZXMgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGxvY2s7ICAgICAgICAgICAgICAgLyogbG9jay91bmxvY2sgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGRyaXZlX2NudDsgICAgICAgICAgLyogZHJpdmUgY291bnQgKi8KKyAgICAgICAgICAgIHUxNiAgICAgICAgICBkcml2ZXNbTUFYX0hEUklWRVNdOy8qIGRyaXZlcyAqLwogICAgICAgICB9IGxvY2tkcnY7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgbG9jazsgICAgICAgICAgICAgICAvKiBsb2NrL3VubG9jayAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGNoYW5uZWw7ICAgICAgICAgICAgLyogY2hhbm5lbCAqLworICAgICAgICAgICAgdTggICAgICAgICAgbG9jazsgICAgICAgICAgICAgICAvKiBsb2NrL3VubG9jayAqLworICAgICAgICAgICAgdTggICAgICAgICAgY2hhbm5lbDsgICAgICAgICAgICAvKiBjaGFubmVsICovCiAgICAgICAgIH0gbG9ja2NobjsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIGludCAgICAgICAgICAgICBlcmFzZTsgICAgICAgICAgICAgIC8qIGVyYXNlIGV2ZW50ID8gKi8KICAgICAgICAgICAgIGludCAgICAgICAgICAgICBoYW5kbGU7Ci0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgZXZ0W0VWRU5UX1NJWkVdOyAgICAvKiBldmVudCBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGV2dFtFVkVOVF9TSVpFXTsgICAgLyogZXZlbnQgc3RydWN0dXJlICovCiAgICAgICAgIH0gZXZlbnQ7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgYnVzOyAgICAgICAgICAgICAgICAvKiBTQ1NJIGJ1cyAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIHRhcmdldDsgICAgICAgICAgICAgLyogdGFyZ2V0IElEICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgbHVuOyAgICAgICAgICAgICAgICAvKiBMVU4gKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBjbWRfbGVuOyAgICAgICAgICAgIC8qIGNvbW1hbmQgbGVuZ3RoICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgY21kWzEyXTsgICAgICAgICAgICAvKiBTQ1NJIGNvbW1hbmQgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGJ1czsgICAgICAgICAgICAgICAgLyogU0NTSSBidXMgKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIHRhcmdldDsgICAgICAgICAgICAgLyogdGFyZ2V0IElEICovCisgICAgICAgICAgICB1OCAgICAgICAgICBsdW47ICAgICAgICAgICAgICAgIC8qIExVTiAqLworICAgICAgICAgICAgdTggICAgICAgICAgY21kX2xlbjsgICAgICAgICAgICAvKiBjb21tYW5kIGxlbmd0aCAqLworICAgICAgICAgICAgdTggICAgICAgICAgY21kWzEyXTsgICAgICAgICAgICAvKiBTQ1NJIGNvbW1hbmQgKi8KICAgICAgICAgfSBzY3NpOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGhkcl9ubzsgICAgICAgICAgICAgLyogaG9zdCBkcml2ZSBudW1iZXIgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBmbGFnOyAgICAgICAgICAgICAgIC8qIG9sZCBtZXRoLi9hZGQvcmVtb3ZlICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgaGRyX25vOyAgICAgICAgICAgICAvKiBob3N0IGRyaXZlIG51bWJlciAqLworICAgICAgICAgICAgdTggICAgICAgICAgZmxhZzsgICAgICAgICAgICAgICAvKiBvbGQgbWV0aC4vYWRkL3JlbW92ZSAqLwogICAgICAgICB9IHJlc2NhbjsKICAgICB9IGl1OwogfSBnZHRoX2lvd3Jfc3RyOwogCiAvKiBJT0NUTCBzdHJ1Y3R1cmUgKHJlYWQpICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWxvbmczMiAgICAgICAgICAgICAgICAgc2l6ZTsgICAgICAgICAgICAgICAvKiBidWZmZXIgc2l6ZSAqLwotICAgIHVsb25nMzIgICAgICAgICAgICAgICAgIHN0YXR1czsgICAgICAgICAgICAgLyogSU9DVEwgZXJyb3IgY29kZSAqLworICAgIHUzMiAgICAgICAgICAgICAgICAgc2l6ZTsgICAgICAgICAgICAgICAvKiBidWZmZXIgc2l6ZSAqLworICAgIHUzMiAgICAgICAgICAgICAgICAgc3RhdHVzOyAgICAgICAgICAgICAvKiBJT0NUTCBlcnJvciBjb2RlICovCiAgICAgdW5pb24gewogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGRhdGFbMV07ICAgICAgICAgICAgLyogZGF0YSAqLworICAgICAgICAgICAgdTggICAgICAgICAgZGF0YVsxXTsgICAgICAgICAgICAvKiBkYXRhICovCiAgICAgICAgIH0gZ2VuZXJhbDsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICB2ZXJzaW9uOyAgICAgICAgICAgIC8qIGRyaXZlciB2ZXJzaW9uICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgdmVyc2lvbjsgICAgICAgICAgICAvKiBkcml2ZXIgdmVyc2lvbiAqLwogICAgICAgICB9IGRydmVyczsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICB0eXBlOyAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgdHlwZSAqLwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGluZm87ICAgICAgICAgICAgICAgLyogc2xvdCBldGMuICovCi0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgb2VtX2lkOyAgICAgICAgICAgICAvKiBPRU0gSUQgKi8KLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICBiaW9zX3ZlcjsgICAgICAgICAgIC8qIG5vdCB1c2VkICovCi0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgYWNjZXNzOyAgICAgICAgICAgICAvKiBub3QgdXNlZCAqLwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGV4dF90eXBlOyAgICAgICAgICAgLyogZXh0ZW5kZWQgdHlwZSAqLwotICAgICAgICAgICAgdXNob3J0ICAgICAgICAgIGRldmljZV9pZDsgICAgICAgICAgLyogZGV2aWNlIElEICovCi0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgc3ViX2RldmljZV9pZDsgICAgICAvKiBzdWIgZGV2aWNlIElEICovCisgICAgICAgICAgICB1OCAgICAgICAgICB0eXBlOyAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgdHlwZSAqLworICAgICAgICAgICAgdTE2ICAgICAgICAgIGluZm87ICAgICAgICAgICAgICAgLyogc2xvdCBldGMuICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgb2VtX2lkOyAgICAgICAgICAgICAvKiBPRU0gSUQgKi8KKyAgICAgICAgICAgIHUxNiAgICAgICAgICBiaW9zX3ZlcjsgICAgICAgICAgIC8qIG5vdCB1c2VkICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgYWNjZXNzOyAgICAgICAgICAgICAvKiBub3QgdXNlZCAqLworICAgICAgICAgICAgdTE2ICAgICAgICAgIGV4dF90eXBlOyAgICAgICAgICAgLyogZXh0ZW5kZWQgdHlwZSAqLworICAgICAgICAgICAgdTE2ICAgICAgICAgIGRldmljZV9pZDsgICAgICAgICAgLyogZGV2aWNlIElEICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgc3ViX2RldmljZV9pZDsgICAgICAvKiBzdWIgZGV2aWNlIElEICovCiAgICAgICAgIH0gY3RydHlwZTsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICB2ZXJzaW9uOyAgICAgICAgICAgIC8qIE9TIHZlcnNpb24gKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBzdWJ2ZXJzaW9uOyAgICAgICAgIC8qIE9TIHN1YnZlcnNpb24gKi8KLSAgICAgICAgICAgIHVzaG9ydCAgICAgICAgICByZXZpc2lvbjsgICAgICAgICAgIC8qIHJldmlzaW9uICovCisgICAgICAgICAgICB1OCAgICAgICAgICB2ZXJzaW9uOyAgICAgICAgICAgIC8qIE9TIHZlcnNpb24gKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIHN1YnZlcnNpb247ICAgICAgICAgLyogT1Mgc3VidmVyc2lvbiAqLworICAgICAgICAgICAgdTE2ICAgICAgICAgIHJldmlzaW9uOyAgICAgICAgICAgLyogcmV2aXNpb24gKi8KICAgICAgICAgfSBvc3ZlcnM7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1c2hvcnQgICAgICAgICAgY291bnQ7ICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIGNvdW50ICovCisgICAgICAgICAgICB1MTYgICAgICAgICAgY291bnQ7ICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIGNvdW50ICovCiAgICAgICAgIH0gY3RyY250OwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGhhbmRsZTsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBldnRbRVZFTlRfU0laRV07ICAgIC8qIGV2ZW50IHN0cnVjdHVyZSAqLworICAgICAgICAgICAgdTggICAgICAgICAgZXZ0W0VWRU5UX1NJWkVdOyAgICAvKiBldmVudCBzdHJ1Y3R1cmUgKi8KICAgICAgICAgfSBldmVudDsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBidXM7ICAgICAgICAgICAgICAgIC8qIFNDU0kgYnVzLCAweGZmOiBpbnZhbGlkICovCi0gICAgICAgICAgICB1bmNoYXIgICAgICAgICAgdGFyZ2V0OyAgICAgICAgICAgICAvKiB0YXJnZXQgSUQgKi8KLSAgICAgICAgICAgIHVuY2hhciAgICAgICAgICBsdW47ICAgICAgICAgICAgICAgIC8qIExVTiAqLwotICAgICAgICAgICAgdW5jaGFyICAgICAgICAgIGNsdXN0ZXJfdHlwZTsgICAgICAgLyogY2x1c3RlciBwcm9wZXJ0aWVzICovCisgICAgICAgICAgICB1OCAgICAgICAgICBidXM7ICAgICAgICAgICAgICAgIC8qIFNDU0kgYnVzLCAweGZmOiBpbnZhbGlkICovCisgICAgICAgICAgICB1OCAgICAgICAgICB0YXJnZXQ7ICAgICAgICAgICAgIC8qIHRhcmdldCBJRCAqLworICAgICAgICAgICAgdTggICAgICAgICAgbHVuOyAgICAgICAgICAgICAgICAvKiBMVU4gKi8KKyAgICAgICAgICAgIHU4ICAgICAgICAgIGNsdXN0ZXJfdHlwZTsgICAgICAgLyogY2x1c3RlciBwcm9wZXJ0aWVzICovCiAgICAgICAgIH0gaGRyX2xpc3RbTUFYX0hEUklWRVNdOyAgICAgICAgICAgICAgICAvKiBpbmRleCBpcyBob3N0IGRyaXZlIG51bWJlciAqLwogICAgIH0gaXU7CiB9IGdkdGhfaW9yZF9zdHI7CkBAIC0yNzIsNTMgKzI2NCw1MyBAQAogCiAvKiBHRFRJT0NUTF9HRU5FUkFMICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdXNob3J0IGlvbm9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLwotICAgIHVzaG9ydCB0aW1lb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGltZW91dCAqLwotICAgIHVsb25nMzIgaW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXJyb3IgaW5mbyAqLyAKLSAgICB1c2hvcnQgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXR1cyAqLwotICAgIHVsb25nIGRhdGFfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGF0YSBidWZmZXIgc2l6ZSAqLwotICAgIHVsb25nIHNlbnNlX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2Vuc2UgYnVmZmVyIHNpemUgKi8KKyAgICB1MTYgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCisgICAgdTE2IHRpbWVvdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aW1lb3V0ICovCisgICAgdTMyIGluZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVycm9yIGluZm8gKi8gCisgICAgdTE2IHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGF0dXMgKi8KKyAgICB1bnNpZ25lZCBsb25nIGRhdGFfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGF0YSBidWZmZXIgc2l6ZSAqLworICAgIHVuc2lnbmVkIGxvbmcgc2Vuc2VfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZW5zZSBidWZmZXIgc2l6ZSAqLwogICAgIGdkdGhfY21kX3N0ciBjb21tYW5kOyAgICAgICAgICAgICAgICAgICAgICAgLyogY29tbWFuZCAqLyAgICAgICAgICAgICAgICAgICAKIH0gZ2R0aF9pb2N0bF9nZW5lcmFsOwogCiAvKiBHRFRJT0NUTF9MT0NLRFJWICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdXNob3J0IGlvbm9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLwotICAgIHVuY2hhciBsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbG9jay91bmxvY2sgKi8KLSAgICB1bmNoYXIgZHJpdmVfY250OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRyaXZlIGNvdW50ICovCi0gICAgdXNob3J0IGRyaXZlc1tNQVhfSERSSVZFU107ICAgICAgICAgICAgICAgICAvKiBkcml2ZXMgKi8KKyAgICB1MTYgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCisgICAgdTggbG9jazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvY2svdW5sb2NrICovCisgICAgdTggZHJpdmVfY250OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRyaXZlIGNvdW50ICovCisgICAgdTE2IGRyaXZlc1tNQVhfSERSSVZFU107ICAgICAgICAgICAgICAgICAvKiBkcml2ZXMgKi8KIH0gZ2R0aF9pb2N0bF9sb2NrZHJ2OwogCiAvKiBHRFRJT0NUTF9MT0NLQ0hOICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdXNob3J0IGlvbm9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIG51bWJlciAqLwotICAgIHVuY2hhciBsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbG9jay91bmxvY2sgKi8KLSAgICB1bmNoYXIgY2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgKi8KKyAgICB1MTYgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCisgICAgdTggbG9jazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvY2svdW5sb2NrICovCisgICAgdTggY2hhbm5lbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNoYW5uZWwgKi8KIH0gZ2R0aF9pb2N0bF9sb2NrY2huOwogCiAvKiBHRFRJT0NUTF9PU1ZFUlMgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1bmNoYXIgdmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9TIHZlcnNpb24gKi8KLSAgICB1bmNoYXIgc3VidmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9TIHN1YnZlcnNpb24gKi8KLSAgICB1c2hvcnQgcmV2aXNpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldmlzaW9uICovCisgICAgdTggdmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9TIHZlcnNpb24gKi8KKyAgICB1OCBzdWJ2ZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1Mgc3VidmVyc2lvbiAqLworICAgIHUxNiByZXZpc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV2aXNpb24gKi8KIH0gZ2R0aF9pb2N0bF9vc3ZlcnM7CiAKIC8qIEdEVElPQ1RMX0NUUlRZUEUgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1c2hvcnQgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCi0gICAgdW5jaGFyIHR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb250cm9sbGVyIHR5cGUgKi8KLSAgICB1c2hvcnQgaW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNsb3QgZXRjLiAqLwotICAgIHVzaG9ydCBvZW1faWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT0VNIElEICovCi0gICAgdXNob3J0IGJpb3NfdmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBub3QgdXNlZCAqLwotICAgIHVzaG9ydCBhY2Nlc3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90IHVzZWQgKi8KLSAgICB1c2hvcnQgZXh0X3R5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4dGVuZGVkIHR5cGUgKi8KLSAgICB1c2hvcnQgZGV2aWNlX2lkOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRldmljZSBJRCAqLwotICAgIHVzaG9ydCBzdWJfZGV2aWNlX2lkOyAgICAgICAgICAgICAgICAgICAgICAgLyogc3ViIGRldmljZSBJRCAqLworICAgIHUxNiBpb25vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBudW1iZXIgKi8KKyAgICB1OCB0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciB0eXBlICovCisgICAgdTE2IGluZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzbG90IGV0Yy4gKi8KKyAgICB1MTYgb2VtX2lkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9FTSBJRCAqLworICAgIHUxNiBiaW9zX3ZlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90IHVzZWQgKi8KKyAgICB1MTYgYWNjZXNzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdCB1c2VkICovCisgICAgdTE2IGV4dF90eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleHRlbmRlZCB0eXBlICovCisgICAgdTE2IGRldmljZV9pZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZXZpY2UgSUQgKi8KKyAgICB1MTYgc3ViX2RldmljZV9pZDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHN1YiBkZXZpY2UgSUQgKi8KIH0gZ2R0aF9pb2N0bF9jdHJ0eXBlOwogCiAvKiBHRFRJT0NUTF9FVkVOVCAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVzaG9ydCBpb25vZGU7CisgICAgdTE2IGlvbm9kZTsKICAgICBpbnQgZXJhc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVyYXNlIGV2ZW50PyAqLwogICAgIGludCBoYW5kbGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXZlbnQgaGFuZGxlICovCiAgICAgZ2R0aF9ldnRfc3RyIGV2ZW50OwpAQCAtMzI2LDIyICszMTgsMjIgQEAKIAogLyogR0RUSU9DVExfUkVTQ0FOL0dEVElPQ1RMX0hEUkxJU1QgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1c2hvcnQgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCi0gICAgdW5jaGFyIGZsYWc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGQvcmVtb3ZlICovCi0gICAgdXNob3J0IGhkcl9ubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkcml2ZSBuby4gKi8KKyAgICB1MTYgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCisgICAgdTggZmxhZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZC9yZW1vdmUgKi8KKyAgICB1MTYgaGRyX25vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRyaXZlIG5vLiAqLwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuY2hhciBidXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGJ1cyAqLwotICAgICAgICB1bmNoYXIgdGFyZ2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGFyZ2V0IElEICovCi0gICAgICAgIHVuY2hhciBsdW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMVU4gKi8KLSAgICAgICAgdW5jaGFyIGNsdXN0ZXJfdHlwZTsgICAgICAgICAgICAgICAgICAgIC8qIGNsdXN0ZXIgcHJvcGVydGllcyAqLworICAgICAgICB1OCBidXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1NJIGJ1cyAqLworICAgICAgICB1OCB0YXJnZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0YXJnZXQgSUQgKi8KKyAgICAgICAgdTggbHVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTFVOICovCisgICAgICAgIHU4IGNsdXN0ZXJfdHlwZTsgICAgICAgICAgICAgICAgICAgIC8qIGNsdXN0ZXIgcHJvcGVydGllcyAqLwogICAgIH0gaGRyX2xpc3RbTUFYX0hEUklWRVNdOyAgICAgICAgICAgICAgICAgICAgLyogaW5kZXggaXMgaG9zdCBkcml2ZSBudW1iZXIgKi8KIH0gZ2R0aF9pb2N0bF9yZXNjYW47CiAKIC8qIEdEVElPQ1RMX1JFU0VUX0JVUy9HRFRJT0NUTF9SRVNFVF9EUlYgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICB1c2hvcnQgaW9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsZXIgbnVtYmVyICovCi0gICAgdXNob3J0IG51bWJlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBidXMvaG9zdCBkcml2ZSBudW1iZXIgKi8KLSAgICB1c2hvcnQgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXR1cyAqLworICAgIHUxNiBpb25vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxlciBudW1iZXIgKi8KKyAgICB1MTYgbnVtYmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJ1cy9ob3N0IGRyaXZlIG51bWJlciAqLworICAgIHUxNiBzdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RhdHVzICovCiB9IGdkdGhfaW9jdGxfcmVzZXQ7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5jIGIvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5jCmluZGV4IDEyNThkYTMuLmZmYjJiMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nZHRoX3Byb2MuYworKysgYi9kcml2ZXJzL3Njc2kvZ2R0aF9wcm9jLmMKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBpbnQgaSwgZm91bmQ7CiAgICAgZ2R0aF9jbWRfc3RyICAgIGdkdGNtZDsKICAgICBnZHRoX2NwYXJfc3RyICAgKnBjcGFyOwotICAgIHVsb25nNjQgICAgICAgICBwYWRkcjsKKyAgICB1NjQgICAgICAgICBwYWRkcjsKIAogICAgIGNoYXIgICAgICAgICAgICBjbW5kW01BWF9DT01NQU5EX1NJWkVdOwogICAgIG1lbXNldChjbW5kLCAweGZmLCAxMik7CkBAIC0xNTYsOCArMTU2LDggQEAKICAgICBvZmZfdCBiZWdpbiA9IDAscG9zID0gMDsKICAgICBpbnQgaWQsIGksIGosIGssIHNlYywgZmxhZzsKICAgICBpbnQgbm9fbWRydiA9IDAsIGRydl9ubywgaXNfbWlycjsKLSAgICB1bG9uZzMyIGNudDsKLSAgICB1bG9uZzY0IHBhZGRyOworICAgIHUzMiBjbnQ7CisgICAgdTY0IHBhZGRyOwogICAgIGludCByYyA9IC1FTk9NRU07CiAKICAgICBnZHRoX2NtZF9zdHIgKmdkdGNtZDsKQEAgLTIyMCwxNCArMjIwLDE0IEBACiAKICAgICBpZiAoaGEtPm1vcmVfcHJvYykKICAgICAgICAgc3ByaW50ZihocmVjLCAiJWQuJTAyZC4lMDJkLSVjJTAzWCIsIAotICAgICAgICAgICAgICAgICh1bmNoYXIpKGhhLT5iaW5mby51cGRfZndfdmVyPj4yNCksCi0gICAgICAgICAgICAgICAgKHVuY2hhcikoaGEtPmJpbmZvLnVwZF9md192ZXI+PjE2KSwKLSAgICAgICAgICAgICAgICAodW5jaGFyKShoYS0+YmluZm8udXBkX2Z3X3ZlciksCisgICAgICAgICAgICAgICAgKHU4KShoYS0+YmluZm8udXBkX2Z3X3Zlcj4+MjQpLAorICAgICAgICAgICAgICAgICh1OCkoaGEtPmJpbmZvLnVwZF9md192ZXI+PjE2KSwKKyAgICAgICAgICAgICAgICAodTgpKGhhLT5iaW5mby51cGRfZndfdmVyKSwKICAgICAgICAgICAgICAgICBoYS0+YmZlYXQucmFpZCA/ICdSJzonTicsCiAgICAgICAgICAgICAgICAgaGEtPmJpbmZvLnVwZF9yZXZpc2lvbik7CiAgICAgZWxzZQotICAgICAgICBzcHJpbnRmKGhyZWMsICIlZC4lMDJkIiwgKHVuY2hhcikoaGEtPmNwYXIudmVyc2lvbj4+OCksCi0gICAgICAgICAgICAgICAgKHVuY2hhcikoaGEtPmNwYXIudmVyc2lvbikpOworICAgICAgICBzcHJpbnRmKGhyZWMsICIlZC4lMDJkIiwgKHU4KShoYS0+Y3Bhci52ZXJzaW9uPj44KSwKKyAgICAgICAgICAgICAgICAodTgpKGhhLT5jcGFyLnZlcnNpb24pKTsKIAogICAgIHNpemUgPSBzcHJpbnRmKGJ1ZmZlcitsZW4sCiAgICAgICAgICAgICAgICAgICAgIiBEcml2ZXIgVmVyLjogIFx0JS0xMHNcdEZpcm13YXJlIFZlci46IFx0JXNcbiIsCkBAIC0yODEsNyArMjgxLDcgQEAKICAgICAgICAgICAgIHBkcy0+YmlkID0gaGEtPnJhd1tpXS5sb2NhbF9ubzsKICAgICAgICAgICAgIHBkcy0+Zmlyc3QgPSAwOwogICAgICAgICAgICAgcGRzLT5lbnRyaWVzID0gaGEtPnJhd1tpXS5wZGV2X2NudDsKLSAgICAgICAgICAgIGNudCA9ICgzKkdEVEhfU0NSQVRDSC80IC0gNSAqIHNpemVvZih1bG9uZzMyKSkgLworICAgICAgICAgICAgY250ID0gKDMqR0RUSF9TQ1JBVENILzQgLSA1ICogc2l6ZW9mKHUzMikpIC8KICAgICAgICAgICAgICAgICBzaXplb2YocGRzLT5saXN0WzBdKTsKICAgICAgICAgICAgIGlmIChwZHMtPmVudHJpZXMgPiBjbnQpCiAgICAgICAgICAgICAgICAgcGRzLT5lbnRyaWVzID0gY250OwpAQCAtNjA0LDcgKzYwNCw3IEBACiAKICAgICAgICAgICAgIHNpemUgPSBzcHJpbnRmKGJ1ZmZlcitsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIENhcGFjaXR5IFtNQl06XHQlLTZkICAgIFx0U3RhcnQgU2VjdG9yOiAgXHQlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bG9uZzMyKShoYS0+aGRyW2ldLnNpemUvMjA0OCksIGhhLT5oZHJbaV0uc3RhcnRfc2VjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MzIpKGhhLT5oZHJbaV0uc2l6ZS8yMDQ4KSwgaGEtPmhkcltpXS5zdGFydF9zZWMpOwogICAgICAgICAgICAgbGVuICs9IHNpemU7ICBwb3MgPSBiZWdpbiArIGxlbjsKICAgICAgICAgICAgIGlmIChwb3MgPCBvZmZzZXQpIHsKICAgICAgICAgICAgICAgICBsZW4gPSAwOwpAQCAtNjY0LDkgKzY2NCw5IEBACiB9CiAKIHN0YXRpYyBjaGFyICpnZHRoX2lvY3RsX2FsbG9jKGdkdGhfaGFfc3RyICpoYSwgaW50IHNpemUsIGludCBzY3JhdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxvbmc2NCAqcGFkZHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1NjQgKnBhZGRyKQogewotICAgIHVsb25nIGZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgY2hhciAqcmV0X3ZhbDsKIAogICAgIGlmIChzaXplID09IDApCkBAIC02OTEsOSArNjkxLDkgQEAKICAgICByZXR1cm4gcmV0X3ZhbDsKIH0KIAotc3RhdGljIHZvaWQgZ2R0aF9pb2N0bF9mcmVlKGdkdGhfaGFfc3RyICpoYSwgaW50IHNpemUsIGNoYXIgKmJ1ZiwgdWxvbmc2NCBwYWRkcikKK3N0YXRpYyB2b2lkIGdkdGhfaW9jdGxfZnJlZShnZHRoX2hhX3N0ciAqaGEsIGludCBzaXplLCBjaGFyICpidWYsIHU2NCBwYWRkcikKIHsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAgICAgaWYgKGJ1ZiA9PSBoYS0+cHNjcmF0Y2gpIHsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CkBAIC03MDUsMTYgKzcwNSwxNiBAQAogfQogCiAjaWZkZWYgR0RUSF9JT0NUTF9QUk9DCi1zdGF0aWMgaW50IGdkdGhfaW9jdGxfY2hlY2tfYmluKGdkdGhfaGFfc3RyICpoYSwgdXNob3J0IHNpemUpCitzdGF0aWMgaW50IGdkdGhfaW9jdGxfY2hlY2tfYmluKGdkdGhfaGFfc3RyICpoYSwgdTE2IHNpemUpCiB7Ci0gICAgdWxvbmcgZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICBpbnQgcmV0X3ZhbDsKIAogICAgIHNwaW5fbG9ja19pcnFzYXZlKCZoYS0+c21wX2xvY2ssIGZsYWdzKTsKIAogICAgIHJldF92YWwgPSBGQUxTRTsKICAgICBpZiAoaGEtPnNjcmF0Y2hfYnVzeSkgewotICAgICAgICBpZiAoKChnZHRoX2lvcmRfc3RyICopaGEtPnBzY3JhdGNoKS0+c2l6ZSA9PSAodWxvbmczMilzaXplKQorICAgICAgICBpZiAoKChnZHRoX2lvcmRfc3RyICopaGEtPnBzY3JhdGNoKS0+c2l6ZSA9PSAodTMyKXNpemUpCiAgICAgICAgICAgICByZXRfdmFsID0gVFJVRTsKICAgICB9CiAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CkBAIC03MjQsMTEgKzcyNCwxMSBAQAogCiBzdGF0aWMgdm9pZCBnZHRoX3dhaXRfY29tcGxldGlvbihnZHRoX2hhX3N0ciAqaGEsIGludCBidXNudW0sIGludCBpZCkKIHsKLSAgICB1bG9uZyBmbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgIGludCBpOwogICAgIFNjc2lfQ21uZCAqc2NwOwogICAgIHN0cnVjdCBnZHRoX2NtbmRpbmZvICpjbW5kaW5mbzsKLSAgICB1bmNoYXIgYiwgdDsKKyAgICB1OCBiLCB0OwogCiAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwogCkBAIC03MzgsOCArNzM4LDggQEAKIAogICAgICAgICBiID0gc2NwLT5kZXZpY2UtPmNoYW5uZWw7CiAgICAgICAgIHQgPSBzY3AtPmRldmljZS0+aWQ7Ci0gICAgICAgIGlmICghU1BFQ0lBTF9TQ1Aoc2NwKSAmJiB0ID09ICh1bmNoYXIpaWQgJiYgCi0gICAgICAgICAgICBiID09ICh1bmNoYXIpYnVzbnVtKSB7CisgICAgICAgIGlmICghU1BFQ0lBTF9TQ1Aoc2NwKSAmJiB0ID09ICh1OClpZCAmJiAKKyAgICAgICAgICAgIGIgPT0gKHU4KWJ1c251bSkgewogICAgICAgICAgICAgY21uZGluZm8tPndhaXRfZm9yX2NvbXBsZXRpb24gPSAwOwogICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnNtcF9sb2NrLCBmbGFncyk7CiAgICAgICAgICAgICB3aGlsZSAoIWNtbmRpbmZvLT53YWl0X2Zvcl9jb21wbGV0aW9uKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5oIGIvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5oCmluZGV4IDliOTAwY2MuLmRhYjE1ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nZHRoX3Byb2MuaAorKysgYi9kcml2ZXJzL3Njc2kvZ2R0aF9wcm9jLmgKQEAgLTE3LDggKzE3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwgZ2R0aF9oYV9zdHIgKmhhKTsKIAogc3RhdGljIGNoYXIgKmdkdGhfaW9jdGxfYWxsb2MoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgc2l6ZSwgaW50IHNjcmF0Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bG9uZzY0ICpwYWRkcik7Ci1zdGF0aWMgdm9pZCBnZHRoX2lvY3RsX2ZyZWUoZ2R0aF9oYV9zdHIgKmhhLCBpbnQgc2l6ZSwgY2hhciAqYnVmLCB1bG9uZzY0IHBhZGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU2NCAqcGFkZHIpOworc3RhdGljIHZvaWQgZ2R0aF9pb2N0bF9mcmVlKGdkdGhfaGFfc3RyICpoYSwgaW50IHNpemUsIGNoYXIgKmJ1ZiwgdTY0IHBhZGRyKTsKIHN0YXRpYyB2b2lkIGdkdGhfd2FpdF9jb21wbGV0aW9uKGdkdGhfaGFfc3RyICpoYSwgaW50IGJ1c251bSwgaW50IGlkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaG9zdHMuYyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCmluZGV4IDU1NDYyNmUuLjA5ZGJjYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ob3N0cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCkBAIC0yMTUsNiArMjE1LDggQEAKIAkJc2hvc3QtPnNob3N0X2dlbmRldi5wYXJlbnQgPSBkZXYgPyBkZXYgOiAmcGxhdGZvcm1fYnVzOwogCXNob3N0LT5kbWFfZGV2ID0gZG1hX2RldjsKIAorCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmc2hvc3QtPnNob3N0X2dlbmRldik7CisKIAllcnJvciA9IGRldmljZV9hZGQoJnNob3N0LT5zaG9zdF9nZW5kZXYpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7CkBAIC0yMjIsNiArMjI0LDggQEAKIAlzY3NpX2hvc3Rfc2V0X3N0YXRlKHNob3N0LCBTSE9TVF9SVU5OSU5HKTsKIAlnZXRfZGV2aWNlKHNob3N0LT5zaG9zdF9nZW5kZXYucGFyZW50KTsKIAorCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmc2hvc3QtPnNob3N0X2Rldik7CisKIAllcnJvciA9IGRldmljZV9hZGQoJnNob3N0LT5zaG9zdF9kZXYpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZGVsX2dlbmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHNhLmMgYi9kcml2ZXJzL3Njc2kvaHBzYS5jCmluZGV4IGJiOTZmZGQuLjAzNjk3YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ocHNhLmMKKysrIGIvZHJpdmVycy9zY3NpL2hwc2EuYwpAQCAtNTIsNyArNTIsNyBAQAogI2luY2x1ZGUgImhwc2EuaCIKIAogLyogSFBTQV9EUklWRVJfVkVSU0lPTiBtdXN0IGJlIDMgYnl0ZSB2YWx1ZXMgKDAtMjU1KSBzZXBhcmF0ZWQgYnkgJy4nICovCi0jZGVmaW5lIEhQU0FfRFJJVkVSX1ZFUlNJT04gIjEuMC4wIgorI2RlZmluZSBIUFNBX0RSSVZFUl9WRVJTSU9OICIyLjAuMS0zIgogI2RlZmluZSBEUklWRVJfTkFNRSAiSFAgSFBTQSBEcml2ZXIgKHYgIiBIUFNBX0RSSVZFUl9WRVJTSU9OICIpIgogCiAvKiBIb3cgbG9uZyB0byB3YWl0IChpbiBtaWxsaXNlY29uZHMpIGZvciBib2FyZCB0byBnbyBpbnRvIHNpbXBsZSBtb2RlICovCkBAIC03Nyw5ICs3Nyw2IEBACiAKIC8qIGRlZmluZSB0aGUgUENJIGluZm8gZm9yIHRoZSBjYXJkcyB3ZSBjYW4gY29udHJvbCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwc2FfcGNpX2RldmljZV9pZFtdID0gewotCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTQywgICAgIDB4MTAzQywgMHgzMjIzfSwKLQl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0MsICAgICAweDEwM0MsIDB4MzIzNH0sCi0Je1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NDLCAgICAgMHgxMDNDLCAweDMyM0R9LAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjQxfSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI0M30sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNDV9LApAQCAtODcsNiArODQsOSBAQAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjQ5fSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI0YX0sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNGJ9LAorCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjMzfSwKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9DSVNTRiAweDMzM2YKKwl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0YsICAgICAweDEwM0MsIDB4MzMzRn0sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfQU5ZX0lELCAgICAgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCQlQQ0lfQ0xBU1NfU1RPUkFHRV9SQUlEIDw8IDgsIDB4ZmZmZiA8PCA4LCAwfSwKIAl7MCx9CkBAIC05OSw5ICs5OSw2IEBACiAgKiAgYWNjZXNzID0gQWRkcmVzcyBvZiB0aGUgc3RydWN0IG9mIGZ1bmN0aW9uIHBvaW50ZXJzCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYm9hcmRfdHlwZSBwcm9kdWN0c1tdID0gewotCXsweDMyMjMxMDNDLCAiU21hcnQgQXJyYXkgUDgwMCIsICZTQTVfYWNjZXNzfSwKLQl7MHgzMjM0MTAzQywgIlNtYXJ0IEFycmF5IFA0MDAiLCAmU0E1X2FjY2Vzc30sCi0JezB4MzIzZDEwM2MsICJTbWFydCBBcnJheSBQNzAwTSIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjQxMTAzQywgIlNtYXJ0IEFycmF5IFAyMTIiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzI0MzEwM0MsICJTbWFydCBBcnJheSBQNDEwIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyNDUxMDNDLCAiU21hcnQgQXJyYXkgUDQxMGkiLCAmU0E1X2FjY2Vzc30sCkBAIC0xMDksNiArMTA2LDggQEAKIAl7MHgzMjQ5MTAzQywgIlNtYXJ0IEFycmF5IFA4MTIiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzI0YTEwM0MsICJTbWFydCBBcnJheSBQNzEybSIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjRiMTAzQywgIlNtYXJ0IEFycmF5IFA3MTFtIiwgJlNBNV9hY2Nlc3N9LAorCXsweDMyMzMxMDNDLCAiU3RvcmFnZVdvcmtzIFAxMjEwbSIsICZTQTVfYWNjZXNzfSwKKwl7MHgzMzNGMTAzQywgIlN0b3JhZ2VXb3JrcyBQMTIxMG0iLCAmU0E1X2FjY2Vzc30sCiAJezB4RkZGRjEwM0MsICJVbmtub3duIFNtYXJ0IEFycmF5IiwgJlNBNV9hY2Nlc3N9LAogfTsKIApAQCAtMTI2LDEyICsxMjUsMTUgQEAKIHN0YXRpYyB2b2lkIGNtZF9zcGVjaWFsX2ZyZWUoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IENvbW1hbmRMaXN0ICpjKTsKIHN0YXRpYyBzdHJ1Y3QgQ29tbWFuZExpc3QgKmNtZF9hbGxvYyhzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKIHN0YXRpYyBzdHJ1Y3QgQ29tbWFuZExpc3QgKmNtZF9zcGVjaWFsX2FsbG9jKHN0cnVjdCBjdGxyX2luZm8gKmgpOwotc3RhdGljIHZvaWQgZmlsbF9jbWQoc3RydWN0IENvbW1hbmRMaXN0ICpjLCBfX3U4IGNtZCwgc3RydWN0IGN0bHJfaW5mbyAqaCwKLQl2b2lkICpidWZmLCBzaXplX3Qgc2l6ZSwgX191OCBwYWdlX2NvZGUsIHVuc2lnbmVkIGNoYXIgKnNjc2kzYWRkciwKK3N0YXRpYyB2b2lkIGZpbGxfY21kKHN0cnVjdCBDb21tYW5kTGlzdCAqYywgdTggY21kLCBzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXZvaWQgKmJ1ZmYsIHNpemVfdCBzaXplLCB1OCBwYWdlX2NvZGUsIHVuc2lnbmVkIGNoYXIgKnNjc2kzYWRkciwKIAlpbnQgY21kX3R5cGUpOwogCiBzdGF0aWMgaW50IGhwc2Ffc2NzaV9xdWV1ZV9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKIAkJdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpOworc3RhdGljIHZvaWQgaHBzYV9zY2FuX3N0YXJ0KHN0cnVjdCBTY3NpX0hvc3QgKik7CitzdGF0aWMgaW50IGhwc2Ffc2Nhbl9maW5pc2hlZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaCwKKwl1bnNpZ25lZCBsb25nIGVsYXBzZWRfdGltZSk7CiAKIHN0YXRpYyBpbnQgaHBzYV9laF9kZXZpY2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpY21kKTsKIHN0YXRpYyBpbnQgaHBzYV9zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOwpAQCAtMTUwLDYgKzE1MiwxMSBAQAogCXN0cnVjdCBDb21tYW5kTGlzdCAqYyk7CiBzdGF0aWMgdm9pZCBjaGVja19pb2N0bF91bml0X2F0dGVudGlvbihzdHJ1Y3QgY3Rscl9pbmZvICpoLAogCXN0cnVjdCBDb21tYW5kTGlzdCAqYyk7CisvKiBwZXJmb3JtYW50IG1vZGUgaGVscGVyIGZ1bmN0aW9ucyAqLworc3RhdGljIHZvaWQgY2FsY19idWNrZXRfbWFwKGludCAqYnVja2V0LCBpbnQgbnVtX2J1Y2tldHMsCisJaW50IG5zZ3MsIGludCAqYnVja2V0X21hcCk7CitzdGF0aWMgdm9pZCBocHNhX3B1dF9jdGxyX2ludG9fcGVyZm9ybWFudF9tb2RlKHN0cnVjdCBjdGxyX2luZm8gKmgpOworc3RhdGljIGlubGluZSB1MzIgbmV4dF9jb21tYW5kKHN0cnVjdCBjdGxyX2luZm8gKmgpOwogCiBzdGF0aWMgREVWSUNFX0FUVFIocmFpZF9sZXZlbCwgU19JUlVHTywgcmFpZF9sZXZlbF9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihsdW5pZCwgU19JUlVHTywgbHVuaWRfc2hvdywgTlVMTCk7CkBAIC0xNzMsMTAgKzE4MCwxMCBAQAogCS5uYW1lCQkJPSAiaHBzYSIsCiAJLnByb2NfbmFtZQkJPSAiaHBzYSIsCiAJLnF1ZXVlY29tbWFuZAkJPSBocHNhX3Njc2lfcXVldWVfY29tbWFuZCwKLQkuY2FuX3F1ZXVlCQk9IDUxMiwKKwkuc2Nhbl9zdGFydAkJPSBocHNhX3NjYW5fc3RhcnQsCisJLnNjYW5fZmluaXNoZWQJCT0gaHBzYV9zY2FuX2ZpbmlzaGVkLAogCS50aGlzX2lkCQk9IC0xLAogCS5zZ190YWJsZXNpemUJCT0gTUFYU0dFTlRSSUVTLAotCS5jbWRfcGVyX2x1bgkJPSA1MTIsCiAJLnVzZV9jbHVzdGVyaW5nCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAogCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlciA9IGhwc2FfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIsCiAJLmlvY3RsCQkJPSBocHNhX2lvY3RsLApAQCAtMTk1LDYgKzIwMiwxMiBAQAogCXJldHVybiAoc3RydWN0IGN0bHJfaW5mbyAqKSAqcHJpdjsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY3Rscl9pbmZvICpzaG9zdF90b19oYmEoc3RydWN0IFNjc2lfSG9zdCAqc2gpCit7CisJdW5zaWduZWQgbG9uZyAqcHJpdiA9IHNob3N0X3ByaXYoc2gpOworCXJldHVybiAoc3RydWN0IGN0bHJfaW5mbyAqKSAqcHJpdjsKK30KKwogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqaHBzYV9zY2FuX3RocmVhZDsKIHN0YXRpYyBERUZJTkVfTVVURVgoaHBzYV9zY2FuX211dGV4KTsKIHN0YXRpYyBMSVNUX0hFQUQoaHBzYV9zY2FuX3EpOwpAQCAtMzEyLDcgKzMyNSw3IEBACiAJCQloLT5idXN5X3NjYW5uaW5nID0gMTsKIAkJCW11dGV4X3VubG9jaygmaHBzYV9zY2FuX211dGV4KTsKIAkJCWhvc3Rfbm8gPSBoLT5zY3NpX2hvc3QgPyAgaC0+c2NzaV9ob3N0LT5ob3N0X25vIDogLTE7Ci0JCQlocHNhX3VwZGF0ZV9zY3NpX2RldmljZXMoaCwgaG9zdF9ubyk7CisJCQlocHNhX3NjYW5fc3RhcnQoaC0+c2NzaV9ob3N0KTsKIAkJCWNvbXBsZXRlX2FsbCgmaC0+c2Nhbl93YWl0KTsKIAkJCW11dGV4X2xvY2soJmhwc2Ffc2Nhbl9tdXRleCk7CiAJCQloLT5idXN5X3NjYW5uaW5nID0gMDsKQEAgLTM3OSw4ICszOTIsNyBAQAogewogCXN0cnVjdCBjdGxyX2luZm8gKmg7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwotCXVuc2lnbmVkIGxvbmcgKnByaXYgPSBzaG9zdF9wcml2KHNob3N0KTsKLQloID0gKHN0cnVjdCBjdGxyX2luZm8gKikgKnByaXY7CisJaCA9IHNob3N0X3RvX2hiYShzaG9zdCk7CiAJaWYgKGFkZF90b19zY2FuX2xpc3QoaCkpIHsKIAkJd2FrZV91cF9wcm9jZXNzKGhwc2Ffc2Nhbl90aHJlYWQpOwogCQl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmgtPnNjYW5fd2FpdCk7CkBAIC0zOTQsMTAgKzQwNiw0NCBAQAogCWhsaXN0X2FkZF9oZWFkKCZjLT5saXN0LCBsaXN0KTsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgbmV4dF9jb21tYW5kKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJdTMyIGE7CisKKwlpZiAodW5saWtlbHkoaC0+dHJhbnNNZXRob2QgIT0gQ0ZHVEJMX1RyYW5zX1BlcmZvcm1hbnQpKQorCQlyZXR1cm4gaC0+YWNjZXNzLmNvbW1hbmRfY29tcGxldGVkKGgpOworCisJaWYgKCgqKGgtPnJlcGx5X3Bvb2xfaGVhZCkgJiAxKSA9PSAoaC0+cmVwbHlfcG9vbF93cmFwYXJvdW5kKSkgeworCQlhID0gKihoLT5yZXBseV9wb29sX2hlYWQpOyAvKiBOZXh0IGNtZCBpbiByaW5nIGJ1ZmZlciAqLworCQkoaC0+cmVwbHlfcG9vbF9oZWFkKSsrOworCQloLT5jb21tYW5kc19vdXRzdGFuZGluZy0tOworCX0gZWxzZSB7CisJCWEgPSBGSUZPX0VNUFRZOworCX0KKwkvKiBDaGVjayBmb3Igd3JhcGFyb3VuZCAqLworCWlmIChoLT5yZXBseV9wb29sX2hlYWQgPT0gKGgtPnJlcGx5X3Bvb2wgKyBoLT5tYXhfY29tbWFuZHMpKSB7CisJCWgtPnJlcGx5X3Bvb2xfaGVhZCA9IGgtPnJlcGx5X3Bvb2w7CisJCWgtPnJlcGx5X3Bvb2xfd3JhcGFyb3VuZCBePSAxOworCX0KKwlyZXR1cm4gYTsKK30KKworLyogc2V0X3BlcmZvcm1hbnRfbW9kZTogTW9kaWZ5IHRoZSB0YWcgZm9yIGNjaXNzIHBlcmZvcm1hbnQKKyAqIHNldCBiaXQgMCBmb3IgcHVsbCBtb2RlbCwgYml0cyAzLTEgZm9yIGJsb2NrIGZldGNoCisgKiByZWdpc3RlciBudW1iZXIKKyAqLworc3RhdGljIHZvaWQgc2V0X3BlcmZvcm1hbnRfbW9kZShzdHJ1Y3QgY3Rscl9pbmZvICpoLCBzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpCit7CisJaWYgKGxpa2VseShoLT50cmFuc01ldGhvZCA9PSBDRkdUQkxfVHJhbnNfUGVyZm9ybWFudCkpCisJCWMtPmJ1c2FkZHIgfD0gMSB8IChoLT5ibG9ja0ZldGNoVGFibGVbYy0+SGVhZGVyLlNHTGlzdF0gPDwgMSk7Cit9CisKIHN0YXRpYyB2b2lkIGVucXVldWVfY21kX2FuZF9zdGFydF9pbyhzdHJ1Y3QgY3Rscl9pbmZvICpoLAogCXN0cnVjdCBDb21tYW5kTGlzdCAqYykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc2V0X3BlcmZvcm1hbnRfbW9kZShoLCBjKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwogCWFkZFEoJmgtPnJlcVEsIGMpOwogCWgtPlFkZXB0aCsrOwpAQCAtNDIyLDYgKzQ2OCwxNSBAQAogCXJldHVybiAoc2NzaTNhZGRyWzNdICYgMHhDMCkgPT0gMHg0MDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgaXNfc2NzaV9yZXZfNShzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCWlmICghaC0+aGJhX2lucXVpcnlfZGF0YSkKKwkJcmV0dXJuIDA7CisJaWYgKChoLT5oYmFfaW5xdWlyeV9kYXRhWzJdICYgMHgwNykgPT0gNSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBjaGFyICpyYWlkX2xhYmVsW10gPSB7ICIwIiwgIjQiLCAiMSgxKzApIiwgIjUiLCAiNSsxIiwgIkFERyIsCiAJIlVOS05PV04iCiB9OwpAQCAtNDMxLDcgKzQ4Niw3IEBACiAJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXNzaXplX3QgbCA9IDA7Ci0JaW50IHJsZXZlbDsKKwl1bnNpZ25lZCBjaGFyIHJsZXZlbDsKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoOwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpoZGV2OwpAQCAtNDU1LDcgKzUxMCw3IEBACiAKIAlybGV2ZWwgPSBoZGV2LT5yYWlkX2xldmVsOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKLQlpZiAocmxldmVsIDwgMCB8fCBybGV2ZWwgPiBSQUlEX1VOS05PV04pCisJaWYgKHJsZXZlbCA+IFJBSURfVU5LTk9XTikKIAkJcmxldmVsID0gUkFJRF9VTktOT1dOOwogCWwgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIlJBSUQgJXNcbiIsIHJhaWRfbGFiZWxbcmxldmVsXSk7CiAJcmV0dXJuIGw7CkBAIC02MjAsNiArNjc1LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIFJlcGxhY2UgYW4gZW50cnkgZnJvbSBoLT5kZXZbXSBhcnJheS4gKi8KK3N0YXRpYyB2b2lkIGhwc2Ffc2NzaV9yZXBsYWNlX2VudHJ5KHN0cnVjdCBjdGxyX2luZm8gKmgsIGludCBob3N0bm8sCisJaW50IGVudHJ5LCBzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpuZXdfZW50cnksCisJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqYWRkZWRbXSwgaW50ICpuYWRkZWQsCisJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqcmVtb3ZlZFtdLCBpbnQgKm5yZW1vdmVkKQoreworCS8qIGFzc3VtZXMgaC0+ZGV2bG9jayBpcyBoZWxkICovCisJQlVHX09OKGVudHJ5IDwgMCB8fCBlbnRyeSA+PSBIUFNBX01BWF9TQ1NJX0RFVlNfUEVSX0hCQSk7CisJcmVtb3ZlZFsqbnJlbW92ZWRdID0gaC0+ZGV2W2VudHJ5XTsKKwkoKm5yZW1vdmVkKSsrOworCWgtPmRldltlbnRyeV0gPSBuZXdfZW50cnk7CisJYWRkZWRbKm5hZGRlZF0gPSBuZXdfZW50cnk7CisJKCpuYWRkZWQpKys7CisJZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgIiVzIGRldmljZSBjJWRiJWR0JWRsJWQgY2hhbmdlZC5cbiIsCisJCXNjc2lfZGV2aWNlX3R5cGUobmV3X2VudHJ5LT5kZXZ0eXBlKSwgaG9zdG5vLCBuZXdfZW50cnktPmJ1cywKKwkJCW5ld19lbnRyeS0+dGFyZ2V0LCBuZXdfZW50cnktPmx1bik7Cit9CisKIC8qIFJlbW92ZSBhbiBlbnRyeSBmcm9tIGgtPmRldltdIGFycmF5LiAqLwogc3RhdGljIHZvaWQgaHBzYV9zY3NpX3JlbW92ZV9lbnRyeShzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgaG9zdG5vLCBpbnQgZW50cnksCiAJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqcmVtb3ZlZFtdLCBpbnQgKm5yZW1vdmVkKQpAQCAtNjI4LDggKzcwMSw3IEBACiAJaW50IGk7CiAJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqc2Q7CiAKLQlpZiAoZW50cnkgPCAwIHx8IGVudHJ5ID49IEhQU0FfTUFYX1NDU0lfREVWU19QRVJfSEJBKQotCQlCVUcoKTsKKwlCVUdfT04oZW50cnkgPCAwIHx8IGVudHJ5ID49IEhQU0FfTUFYX1NDU0lfREVWU19QRVJfSEJBKTsKIAogCXNkID0gaC0+ZGV2W2VudHJ5XTsKIAlyZW1vdmVkWypucmVtb3ZlZF0gPSBoLT5kZXZbZW50cnldOwpAQCAtNzIyLDYgKzc5NCw4IEBACiAjZGVmaW5lIERFVklDRV9DSEFOR0VEIDEKICNkZWZpbmUgREVWSUNFX1NBTUUgMgogCWZvciAoaSA9IDA7IGkgPCBoYXlzdGFja19zaXplOyBpKyspIHsKKwkJaWYgKGhheXN0YWNrW2ldID09IE5VTEwpIC8qIHByZXZpb3VzbHkgcmVtb3ZlZC4gKi8KKwkJCWNvbnRpbnVlOwogCQlpZiAoU0NTSTNBRERSX0VRKG5lZWRsZS0+c2NzaTNhZGRyLCBoYXlzdGFja1tpXS0+c2NzaTNhZGRyKSkgewogCQkJKmluZGV4ID0gaTsKIAkJCWlmIChkZXZpY2VfaXNfdGhlX3NhbWUobmVlZGxlLCBoYXlzdGFja1tpXSkpCkBAIC03MzQsNyArODA4LDcgQEAKIAlyZXR1cm4gREVWSUNFX05PVF9GT1VORDsKIH0KIAotc3RhdGljIGludCBhZGp1c3RfaHBzYV9zY3NpX3RhYmxlKHN0cnVjdCBjdGxyX2luZm8gKmgsIGludCBob3N0bm8sCitzdGF0aWMgdm9pZCBhZGp1c3RfaHBzYV9zY3NpX3RhYmxlKHN0cnVjdCBjdGxyX2luZm8gKmgsIGludCBob3N0bm8sCiAJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqc2RbXSwgaW50IG5zZHMpCiB7CiAJLyogc2QgY29udGFpbnMgc2NzaTMgYWRkcmVzc2VzIGFuZCBkZXZ0eXBlcywgYW5kIGlucXVpcnkKQEAgLTc3OSwxMiArODUzLDEyIEBACiAJCQljb250aW51ZTsgLyogcmVtb3ZlIF5eXiwgaGVuY2UgaSBub3QgaW5jcmVtZW50ZWQgKi8KIAkJfSBlbHNlIGlmIChkZXZpY2VfY2hhbmdlID09IERFVklDRV9DSEFOR0VEKSB7CiAJCQljaGFuZ2VzKys7Ci0JCQlocHNhX3Njc2lfcmVtb3ZlX2VudHJ5KGgsIGhvc3RubywgaSwKLQkJCQlyZW1vdmVkLCAmbnJlbW92ZWQpOwotCQkJKHZvaWQpIGhwc2Ffc2NzaV9hZGRfZW50cnkoaCwgaG9zdG5vLCBzZFtlbnRyeV0sCi0JCQkJYWRkZWQsICZuYWRkZWQpOwotCQkJLyogYWRkIGNhbid0IGZhaWwsIHdlIGp1c3QgcmVtb3ZlZCBvbmUuICovCi0JCQlzZFtlbnRyeV0gPSBOVUxMOyAvKiBwcmV2ZW50IGl0IGZyb20gYmVpbmcgZnJlZWQgKi8KKwkJCWhwc2Ffc2NzaV9yZXBsYWNlX2VudHJ5KGgsIGhvc3RubywgaSwgc2RbZW50cnldLAorCQkJCWFkZGVkLCAmbmFkZGVkLCByZW1vdmVkLCAmbnJlbW92ZWQpOworCQkJLyogU2V0IGl0IHRvIE5VTEwgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIGZyZWVkCisJCQkgKiBhdCB0aGUgYm90dG9tIG9mIGhwc2FfdXBkYXRlX3Njc2lfZGV2aWNlcygpCisJCQkgKi8KKwkJCXNkW2VudHJ5XSA9IE5VTEw7CiAJCX0KIAkJaSsrOwogCX0KQEAgLTg2MCw3ICs5MzQsNiBAQAogZnJlZV9hbmRfb3V0OgogCWtmcmVlKGFkZGVkKTsKIAlrZnJlZShyZW1vdmVkKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTkwMCw3ICs5NzMsNyBAQAogCiBzdGF0aWMgdm9pZCBocHNhX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCXJldHVybjsgLyogbm90aGluZyB0byBkby4gKi8KKwkvKiBub3RoaW5nIHRvIGRvLiAqLwogfQogCiBzdGF0aWMgdm9pZCBocHNhX3Njc2lfc2V0dXAoc3RydWN0IGN0bHJfaW5mbyAqaCkKQEAgLTkwOCwxMSArOTgxLDEwIEBACiAJaC0+bmRldmljZXMgPSAwOwogCWgtPnNjc2lfaG9zdCA9IE5VTEw7CiAJc3Bpbl9sb2NrX2luaXQoJmgtPmRldmxvY2spOwotCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgY29tcGxldGVfc2NzaV9jb21tYW5kKHN0cnVjdCBDb21tYW5kTGlzdCAqY3AsCi0JaW50IHRpbWVvdXQsIF9fdTMyIHRhZykKKwlpbnQgdGltZW91dCwgdTMyIHRhZykKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQ7CiAJc3RydWN0IGN0bHJfaW5mbyAqaDsKQEAgLTk4Nyw3ICsxMDU5LDYgQEAKIAkJCQkgKiByZXF1aXJlZAogCQkJCSAqLwogCQkJCWlmICgoYXNjID09IDB4MDQpICYmIChhc2NxID09IDB4MDMpKSB7Ci0JCQkJCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCQkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjcCAlcCAiCiAJCQkJCQkiaGFzIGNoZWNrIGNvbmRpdGlvbjogdW5pdCAiCiAJCQkJCQkibm90IHJlYWR5LCBtYW51YWwgIgpAQCAtOTk1LDE0ICsxMDY2LDIyIEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KLQotCisJCQlpZiAoc2Vuc2Vfa2V5ID09IEFCT1JURURfQ09NTUFORCkgeworCQkJCS8qIEFib3J0ZWQgY29tbWFuZCBpcyByZXRyeWFibGUgKi8KKwkJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgIgorCQkJCQkiaGFzIGNoZWNrIGNvbmRpdGlvbjogYWJvcnRlZCBjb21tYW5kOiAiCisJCQkJCSJBU0M6IDB4JXgsIEFTQ1E6IDB4JXhcbiIsCisJCQkJCWNwLCBhc2MsIGFzY3EpOworCQkJCWNtZC0+cmVzdWx0ID0gRElEX1NPRlRfRVJST1IgPDwgMTY7CisJCQkJYnJlYWs7CisJCQl9CiAJCQkvKiBNdXN0IGJlIHNvbWUgb3RoZXIgdHlwZSBvZiBjaGVjayBjb25kaXRpb24gKi8KIAkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjcCAlcCBoYXMgY2hlY2sgY29uZGl0aW9uOiAiCiAJCQkJCSJ1bmtub3duIHR5cGU6ICIKIAkJCQkJIlNlbnNlOiAweCV4LCBBU0M6IDB4JXgsIEFTQ1E6IDB4JXgsICIKIAkJCQkJIlJldHVybmluZyByZXN1bHQ6IDB4JXgsICIKIAkJCQkJImNtZD1bJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICIKKwkJCQkJIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICIKIAkJCQkJIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeF1cbiIsCiAJCQkJCWNwLCBzZW5zZV9rZXksIGFzYywgYXNjcSwKIAkJCQkJY21kLT5yZXN1bHQsCkBAIC0xMDEwLDcgKzEwODksMTAgQEAKIAkJCQkJY21kLT5jbW5kWzJdLCBjbWQtPmNtbmRbM10sCiAJCQkJCWNtZC0+Y21uZFs0XSwgY21kLT5jbW5kWzVdLAogCQkJCQljbWQtPmNtbmRbNl0sIGNtZC0+Y21uZFs3XSwKLQkJCQkJY21kLT5jbW5kWzhdLCBjbWQtPmNtbmRbOV0pOworCQkJCQljbWQtPmNtbmRbOF0sIGNtZC0+Y21uZFs5XSwKKwkJCQkJY21kLT5jbW5kWzEwXSwgY21kLT5jbW5kWzExXSwKKwkJCQkJY21kLT5jbW5kWzEyXSwgY21kLT5jbW5kWzEzXSwKKwkJCQkJY21kLT5jbW5kWzE0XSwgY21kLT5jbW5kWzE1XSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMDg2LDcgKzExNjgsNyBAQAogCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgcmVwb3J0cyBhYm9ydCBmYWlsZWRcbiIsIGNwKTsKIAkJYnJlYWs7CiAJY2FzZSBDTURfVU5TT0xJQ0lURURfQUJPUlQ6Ci0JCWNtZC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OworCQljbWQtPnJlc3VsdCA9IERJRF9SRVNFVCA8PCAxNjsKIAkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwIGFib3J0ZWQgZG8gdG8gYW4gdW5zb2xpY2l0ZWQgIgogCQkJImFib3J0XG4iLCBjcCk7CiAJCWJyZWFrOwpAQCAtMTExOSw5ICsxMjAxLDExIEBACiAJc2gtPm1heF9jbWRfbGVuID0gTUFYX0NPTU1BTkRfU0laRTsKIAlzaC0+bWF4X2x1biA9IEhQU0FfTUFYX0xVTjsKIAlzaC0+bWF4X2lkID0gSFBTQV9NQVhfTFVOOworCXNoLT5jYW5fcXVldWUgPSBoLT5ucl9jbWRzOworCXNoLT5jbWRfcGVyX2x1biA9IGgtPm5yX2NtZHM7CiAJaC0+c2NzaV9ob3N0ID0gc2g7CiAJc2gtPmhvc3RkYXRhWzBdID0gKHVuc2lnbmVkIGxvbmcpIGg7Ci0Jc2gtPmlycSA9IGgtPmludHJbU0lNUExFX01PREVfSU5UXTsKKwlzaC0+aXJxID0gaC0+aW50cltQRVJGX01PREVfSU5UXTsKIAlzaC0+dW5pcXVlX2lkID0gc2gtPmlycTsKIAllcnJvciA9IHNjc2lfYWRkX2hvc3Qoc2gsICZoLT5wZGV2LT5kZXYpOwogCWlmIChlcnJvcikKQEAgLTExMzMsMTEgKzEyMTcsMTEgQEAKIAlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJocHNhX3Njc2lfZGV0ZWN0OiBzY3NpX2FkZF9ob3N0IgogCQkiIGZhaWxlZCBmb3IgY29udHJvbGxlciAlZFxuIiwgaC0+Y3Rscik7CiAJc2NzaV9ob3N0X3B1dChzaCk7Ci0JcmV0dXJuIC0xOworCXJldHVybiBlcnJvcjsKICBmYWlsOgogCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgImhwc2Ffc2NzaV9kZXRlY3Q6IHNjc2lfaG9zdF9hbGxvYyIKIAkJIiBmYWlsZWQgZm9yIGNvbnRyb2xsZXIgJWRcbiIsIGgtPmN0bHIpOwotCXJldHVybiAtMTsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIHZvaWQgaHBzYV9wY2lfdW5tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCkBAIC0xMTYwLDcgKzEyNDQsNyBAQAogCQlzaXplX3QgYnVmbGVuLAogCQlpbnQgZGF0YV9kaXJlY3Rpb24pCiB7Ci0JX191NjQgYWRkcjY0OworCXU2NCBhZGRyNjQ7CiAKIAlpZiAoYnVmbGVuID09IDAgfHwgZGF0YV9kaXJlY3Rpb24gPT0gUENJX0RNQV9OT05FKSB7CiAJCWNwLT5IZWFkZXIuU0dMaXN0ID0gMDsKQEAgLTExNjgsMTQgKzEyNTIsMTQgQEAKIAkJcmV0dXJuOwogCX0KIAotCWFkZHI2NCA9IChfX3U2NCkgcGNpX21hcF9zaW5nbGUocGRldiwgYnVmLCBidWZsZW4sIGRhdGFfZGlyZWN0aW9uKTsKKwlhZGRyNjQgPSAodTY0KSBwY2lfbWFwX3NpbmdsZShwZGV2LCBidWYsIGJ1ZmxlbiwgZGF0YV9kaXJlY3Rpb24pOwogCWNwLT5TR1swXS5BZGRyLmxvd2VyID0KLQkgIChfX3UzMikgKGFkZHI2NCAmIChfX3U2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKKwkgICh1MzIpIChhZGRyNjQgJiAodTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOwogCWNwLT5TR1swXS5BZGRyLnVwcGVyID0KLQkgIChfX3UzMikgKChhZGRyNjQgPj4gMzIpICYgKF9fdTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOworCSAgKHUzMikgKChhZGRyNjQgPj4gMzIpICYgKHU2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKIAljcC0+U0dbMF0uTGVuID0gYnVmbGVuOwotCWNwLT5IZWFkZXIuU0dMaXN0ID0gKF9fdTgpIDE7ICAgLyogbm8uIFNHcyBjb250aWcgaW4gdGhpcyBjbWQgKi8KLQljcC0+SGVhZGVyLlNHVG90YWwgPSAoX191MTYpIDE7IC8qIHRvdGFsIHNncyBpbiB0aGlzIGNtZCBsaXN0ICovCisJY3AtPkhlYWRlci5TR0xpc3QgPSAodTgpIDE7ICAgLyogbm8uIFNHcyBjb250aWcgaW4gdGhpcyBjbWQgKi8KKwljcC0+SGVhZGVyLlNHVG90YWwgPSAodTE2KSAxOyAvKiB0b3RhbCBzZ3MgaW4gdGhpcyBjbWQgbGlzdCAqLwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaHBzYV9zY3NpX2RvX3NpbXBsZV9jbWRfY29yZShzdHJ1Y3QgY3Rscl9pbmZvICpoLApAQCAtMTI3NCw3ICsxMzU4LDcgQEAKIAogCWlmIChjID09IE5VTEwpIHsJCQkvKiB0cm91YmxlLi4uICovCiAJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjbWRfc3BlY2lhbF9hbGxvYyByZXR1cm5lZCBOVUxMIVxuIik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZmlsbF9jbWQoYywgSFBTQV9JTlFVSVJZLCBoLCBidWYsIGJ1ZnNpemUsIHBhZ2UsIHNjc2kzYWRkciwgVFlQRV9DTUQpOwpAQCAtMTM2Niw5ICsxNDUwLDggQEAKIAkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAiY21kX3NwZWNpYWxfYWxsb2MgcmV0dXJuZWQgTlVMTCFcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQotCi0JbWVtc2V0KCZzY3NpM2FkZHJbMF0sIDAsIDgpOyAvKiBhZGRyZXNzIHRoZSBjb250cm9sbGVyICovCi0KKwkvKiBhZGRyZXNzIHRoZSBjb250cm9sbGVyICovCisJbWVtc2V0KHNjc2kzYWRkciwgMCwgc2l6ZW9mKHNjc2kzYWRkcikpOwogCWZpbGxfY21kKGMsIGxvZ2ljYWwgPyBIUFNBX1JFUE9SVF9MT0cgOiBIUFNBX1JFUE9SVF9QSFlTLCBoLAogCQlidWYsIGJ1ZnNpemUsIDAsIHNjc2kzYWRkciwgVFlQRV9DTUQpOwogCWlmIChleHRlbmRlZF9yZXNwb25zZSkKQEAgLTE0MDksMTMgKzE0OTIsMTIgQEAKIAl1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcltdLCBzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICp0aGlzX2RldmljZSkKIHsKICNkZWZpbmUgT0JEUl9UQVBFX0lOUV9TSVpFIDQ5Ci0JdW5zaWduZWQgY2hhciAqaW5xX2J1ZmYgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgKmlucV9idWZmOwogCi0JaW5xX2J1ZmYgPSBrbWFsbG9jKE9CRFJfVEFQRV9JTlFfU0laRSwgR0ZQX0tFUk5FTCk7CisJaW5xX2J1ZmYgPSBremFsbG9jKE9CRFJfVEFQRV9JTlFfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbnFfYnVmZikKIAkJZ290byBiYWlsX291dDsKIAotCW1lbXNldChpbnFfYnVmZiwgMCwgT0JEUl9UQVBFX0lOUV9TSVpFKTsKIAkvKiBEbyBhbiBpbnF1aXJ5IHRvIHRoZSBkZXZpY2UgdG8gc2VlIHdoYXQgaXQgaXMuICovCiAJaWYgKGhwc2Ffc2NzaV9kb19pbnF1aXJ5KGgsIHNjc2kzYWRkciwgMCwgaW5xX2J1ZmYsCiAJCSh1bnNpZ25lZCBjaGFyKSBPQkRSX1RBUEVfSU5RX1NJWkUpICE9IDApIHsKQEAgLTE0ODUsMzIgKzE1NjcsNTEgQEAKICAqIGluIGhwc2FfZmluZF90YXJnZXRfbHVuLCBjYWxsZWQgYnkgaHBzYV9zY3NpX2FkZF9lbnRyeS4pCiAgKi8KIHN0YXRpYyB2b2lkIGZpZ3VyZV9idXNfdGFyZ2V0X2x1bihzdHJ1Y3QgY3Rscl9pbmZvICpoLAotCV9fdTggKmx1bmFkZHJieXRlcywgaW50ICpidXMsIGludCAqdGFyZ2V0LCBpbnQgKmx1biwKKwl1OCAqbHVuYWRkcmJ5dGVzLCBpbnQgKmJ1cywgaW50ICp0YXJnZXQsIGludCAqbHVuLAogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmRldmljZSkKIHsKLQotCV9fdTMyIGx1bmlkOworCXUzMiBsdW5pZDsKIAogCWlmIChpc19sb2dpY2FsX2Rldl9hZGRyX21vZGUobHVuYWRkcmJ5dGVzKSkgewogCQkvKiBsb2dpY2FsIGRldmljZSAqLwotCQltZW1jcHkoJmx1bmlkLCBsdW5hZGRyYnl0ZXMsIHNpemVvZihsdW5pZCkpOwotCQlsdW5pZCA9IGxlMzJfdG9fY3B1KGx1bmlkKTsKLQotCQlpZiAoaXNfbXNhMnh4eChoLCBkZXZpY2UpKSB7Ci0JCQkqYnVzID0gMTsKLQkJCSp0YXJnZXQgPSAobHVuaWQgPj4gMTYpICYgMHgzZmZmOwotCQkJKmx1biA9IGx1bmlkICYgMHgwMGZmOwotCQl9IGVsc2UgeworCQlpZiAodW5saWtlbHkoaXNfc2NzaV9yZXZfNShoKSkpIHsKKwkJCS8qIHAxMjEwbSwgbG9naWNhbCBkcml2ZXMgbHVuIGFzc2lnbm1lbnRzCisJCQkgKiBtYXRjaCBTQ1NJIFJFUE9SVCBMVU5TIGRhdGEuCisJCQkgKi8KKwkJCWx1bmlkID0gbGUzMl90b19jcHUoKigoX19sZTMyICopIGx1bmFkZHJieXRlcykpOwogCQkJKmJ1cyA9IDA7Ci0JCQkqbHVuID0gMDsKLQkJCSp0YXJnZXQgPSBsdW5pZCAmIDB4M2ZmZjsKKwkJCSp0YXJnZXQgPSAwOworCQkJKmx1biA9IChsdW5pZCAmIDB4M2ZmZikgKyAxOworCQl9IGVsc2UgeworCQkJLyogbm90IHAxMjEwbS4uLiAqLworCQkJbHVuaWQgPSBsZTMyX3RvX2NwdSgqKChfX2xlMzIgKikgbHVuYWRkcmJ5dGVzKSk7CisJCQlpZiAoaXNfbXNhMnh4eChoLCBkZXZpY2UpKSB7CisJCQkJLyogbXNhMnh4eCB3YXksIHB1dCBsb2dpY2FscyBvbiBidXMgMQorCQkJCSAqIGFuZCBtYXRjaCB0YXJnZXQvbHVuIG51bWJlcnMgYm94CisJCQkJICogcmVwb3J0cy4KKwkJCQkgKi8KKwkJCQkqYnVzID0gMTsKKwkJCQkqdGFyZ2V0ID0gKGx1bmlkID4+IDE2KSAmIDB4M2ZmZjsKKwkJCQkqbHVuID0gbHVuaWQgJiAweDAwZmY7CisJCQl9IGVsc2UgeworCQkJCS8qIFRyYWRpdGlvbmFsIHNtYXJ0IGFycmF5IHdheS4gKi8KKwkJCQkqYnVzID0gMDsKKwkJCQkqbHVuID0gMDsKKwkJCQkqdGFyZ2V0ID0gbHVuaWQgJiAweDNmZmY7CisJCQl9CiAJCX0KIAl9IGVsc2UgewogCQkvKiBwaHlzaWNhbCBkZXZpY2UgKi8KIAkJaWYgKGlzX2hiYV9sdW5pZChsdW5hZGRyYnl0ZXMpKQotCQkJKmJ1cyA9IDM7CisJCQlpZiAodW5saWtlbHkoaXNfc2NzaV9yZXZfNShoKSkpIHsKKwkJCQkqYnVzID0gMDsgLyogcHV0IHAxMjEwbSBjdGxyIGF0IDAsMCwwICovCisJCQkJKnRhcmdldCA9IDA7CisJCQkJKmx1biA9IDA7CisJCQkJcmV0dXJuOworCQkJfSBlbHNlCisJCQkJKmJ1cyA9IDM7IC8qIHRyYWRpdGlvbmFsIHNtYXJ0YXJyYXkgKi8KIAkJZWxzZQotCQkJKmJ1cyA9IDI7CisJCQkqYnVzID0gMjsgLyogcGh5c2ljYWwgZGlzayAqLwogCQkqdGFyZ2V0ID0gLTE7CiAJCSpsdW4gPSAtMTsgLyogd2Ugd2lsbCBmaWxsIHRoZXNlIGluIGxhdGVyLiAqLwogCX0KQEAgLTE1MjksNyArMTYzMCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgYWRkX21zYTJ4eHhfZW5jbG9zdXJlX2RldmljZShzdHJ1Y3QgY3Rscl9pbmZvICpoLAogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnRtcGRldmljZSwKLQlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICp0aGlzX2RldmljZSwgX191OCAqbHVuYWRkcmJ5dGVzLAorCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnRoaXNfZGV2aWNlLCB1OCAqbHVuYWRkcmJ5dGVzLAogCWludCBidXMsIGludCB0YXJnZXQsIGludCBsdW4sIHVuc2lnbmVkIGxvbmcgbHVuemVyb2JpdHNbXSwKIAlpbnQgKm5tc2EyeHh4X2VuY2xvc3VyZXMpCiB7CkBAIC0xNTUwLDYgKzE2NTEsOSBAQAogCWlmIChpc19oYmFfbHVuaWQoc2NzaTNhZGRyKSkKIAkJcmV0dXJuIDA7IC8qIERvbid0IGFkZCB0aGUgUkFJRCBjb250cm9sbGVyIGhlcmUuICovCiAKKwlpZiAoaXNfc2NzaV9yZXZfNShoKSkKKwkJcmV0dXJuIDA7IC8qIHAxMjEwbSBkb2Vzbid0IG5lZWQgdG8gZG8gdGhpcy4gKi8KKwogI2RlZmluZSBNQVhfTVNBMlhYWF9FTkNMT1NVUkVTIDMyCiAJaWYgKCpubXNhMnh4eF9lbmNsb3N1cmVzID49IE1BWF9NU0EyWFhYX0VOQ0xPU1VSRVMpIHsKIAkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIk1heGltdW0gbnVtYmVyIG9mIE1TQTJYWFggIgpAQCAtMTU3NiwxOCArMTY4MCwxNCBAQAogICovCiBzdGF0aWMgaW50IGhwc2FfZ2F0aGVyX2x1bl9pbmZvKHN0cnVjdCBjdGxyX2luZm8gKmgsCiAJaW50IHJlcG9ydGx1bnNpemUsCi0Jc3RydWN0IFJlcG9ydExVTmRhdGEgKnBoeXNkZXYsIF9fdTMyICpucGh5c2ljYWxzLAotCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpsb2dkZXYsIF9fdTMyICpubG9naWNhbHMpCisJc3RydWN0IFJlcG9ydExVTmRhdGEgKnBoeXNkZXYsIHUzMiAqbnBoeXNpY2FscywKKwlzdHJ1Y3QgUmVwb3J0TFVOZGF0YSAqbG9nZGV2LCB1MzIgKm5sb2dpY2FscykKIHsKIAlpZiAoaHBzYV9zY3NpX2RvX3JlcG9ydF9waHlzX2x1bnMoaCwgcGh5c2RldiwgcmVwb3J0bHVuc2l6ZSwgMCkpIHsKIAkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAicmVwb3J0IHBoeXNpY2FsIExVTnMgZmFpbGVkLlxuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JbWVtY3B5KG5waHlzaWNhbHMsICZwaHlzZGV2LT5MVU5MaXN0TGVuZ3RoWzBdLCBzaXplb2YoKm5waHlzaWNhbHMpKTsKLQkqbnBoeXNpY2FscyA9IGJlMzJfdG9fY3B1KCpucGh5c2ljYWxzKSAvIDg7Ci0jaWZkZWYgREVCVUcKLQlkZXZfaW5mbygmaC0+cGRldi0+ZGV2LCAibnVtYmVyIG9mIHBoeXNpY2FsIGx1bnMgaXMgJWRcbiIsICpucGh5c2ljYWxzKTsKLSNlbmRpZgorCSpucGh5c2ljYWxzID0gYmUzMl90b19jcHUoKigoX19iZTMyICopcGh5c2Rldi0+TFVOTGlzdExlbmd0aCkpIC8gODsKIAlpZiAoKm5waHlzaWNhbHMgPiBIUFNBX01BWF9QSFlTX0xVTikgewogCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAibWF4aW11bSBwaHlzaWNhbCBMVU5zICglZCkgZXhjZWVkZWQuIgogCQkJIiAgJWQgTFVOcyBpZ25vcmVkLlxuIiwgSFBTQV9NQVhfUEhZU19MVU4sCkBAIC0xNTk4LDExICsxNjk4LDcgQEAKIAkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAicmVwb3J0IGxvZ2ljYWwgTFVOcyBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KLQltZW1jcHkobmxvZ2ljYWxzLCAmbG9nZGV2LT5MVU5MaXN0TGVuZ3RoWzBdLCBzaXplb2YoKm5sb2dpY2FscykpOwotCSpubG9naWNhbHMgPSBiZTMyX3RvX2NwdSgqbmxvZ2ljYWxzKSAvIDg7Ci0jaWZkZWYgREVCVUcKLQlkZXZfaW5mbygmaC0+cGRldi0+ZGV2LCAibnVtYmVyIG9mIGxvZ2ljYWwgbHVucyBpcyAlZFxuIiwgKm5sb2dpY2Fscyk7Ci0jZW5kaWYKKwkqbmxvZ2ljYWxzID0gYmUzMl90b19jcHUoKigoX19iZTMyICopIGxvZ2Rldi0+TFVOTGlzdExlbmd0aCkpIC8gODsKIAkvKiBSZWplY3QgTG9naWNhbHMgaW4gZXhjZXNzIG9mIG91ciBtYXggY2FwYWJpbGl0eS4gKi8KIAlpZiAoKm5sb2dpY2FscyA+IEhQU0FfTUFYX0xVTikgewogCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LApAQCAtMTYyMSw2ICsxNzE3LDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3U4ICpmaWd1cmVfbHVuYWRkcmJ5dGVzKHN0cnVjdCBjdGxyX2luZm8gKmgsIGludCByYWlkX2N0bHJfcG9zaXRpb24sIGludCBpLAorCWludCBucGh5c2ljYWxzLCBpbnQgbmxvZ2ljYWxzLCBzdHJ1Y3QgUmVwb3J0TFVOZGF0YSAqcGh5c2Rldl9saXN0LAorCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpsb2dkZXZfbGlzdCkKK3sKKwkvKiBIZWxwZXIgZnVuY3Rpb24sIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIExVTiBJRCBpbmZvIGlzIGNvbWluZyBmcm9tCisJICogZ2l2ZW4gaW5kZXggaSwgbGlzdHMgb2YgcGh5c2ljYWwgYW5kIGxvZ2ljYWwgZGV2aWNlcywgd2hlcmUgaW4KKwkgKiB0aGUgbGlzdCB0aGUgcmFpZCBjb250cm9sbGVyIGlzIHN1cHBvc2VkIHRvIGFwcGVhciAoZmlyc3Qgb3IgbGFzdCkKKwkgKi8KKworCWludCBsb2dpY2Fsc19zdGFydCA9IG5waHlzaWNhbHMgKyAocmFpZF9jdGxyX3Bvc2l0aW9uID09IDApOworCWludCBsYXN0X2RldmljZSA9IG5waHlzaWNhbHMgKyBubG9naWNhbHMgKyAocmFpZF9jdGxyX3Bvc2l0aW9uID09IDApOworCisJaWYgKGkgPT0gcmFpZF9jdGxyX3Bvc2l0aW9uKQorCQlyZXR1cm4gUkFJRF9DVExSX0xVTklEOworCisJaWYgKGkgPCBsb2dpY2Fsc19zdGFydCkKKwkJcmV0dXJuICZwaHlzZGV2X2xpc3QtPkxVTltpIC0gKHJhaWRfY3Rscl9wb3NpdGlvbiA9PSAwKV1bMF07CisKKwlpZiAoaSA8IGxhc3RfZGV2aWNlKQorCQlyZXR1cm4gJmxvZ2Rldl9saXN0LT5MVU5baSAtIG5waHlzaWNhbHMgLQorCQkJKHJhaWRfY3Rscl9wb3NpdGlvbiA9PSAwKV1bMF07CisJQlVHKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyB2b2lkIGhwc2FfdXBkYXRlX3Njc2lfZGV2aWNlcyhzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgaG9zdG5vKQogewogCS8qIHRoZSBpZGVhIGhlcmUgaXMgd2UgY291bGQgZ2V0IG5vdGlmaWVkCkBAIC0xNjM2LDE0ICsxNzU3LDE1IEBACiAJc3RydWN0IFJlcG9ydExVTmRhdGEgKnBoeXNkZXZfbGlzdCA9IE5VTEw7CiAJc3RydWN0IFJlcG9ydExVTmRhdGEgKmxvZ2Rldl9saXN0ID0gTlVMTDsKIAl1bnNpZ25lZCBjaGFyICppbnFfYnVmZiA9IE5VTEw7Ci0JX191MzIgbnBoeXNpY2FscyA9IDA7Ci0JX191MzIgbmxvZ2ljYWxzID0gMDsKLQlfX3UzMiBuZGV2X2FsbG9jYXRlZCA9IDA7CisJdTMyIG5waHlzaWNhbHMgPSAwOworCXUzMiBubG9naWNhbHMgPSAwOworCXUzMiBuZGV2X2FsbG9jYXRlZCA9IDA7CiAJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqKmN1cnJlbnRzZCwgKnRoaXNfZGV2aWNlLCAqdG1wZGV2aWNlOwogCWludCBuY3VycmVudCA9IDA7CiAJaW50IHJlcG9ydGx1bnNpemUgPSBzaXplb2YoKnBoeXNkZXZfbGlzdCkgKyBIUFNBX01BWF9QSFlTX0xVTiAqIDg7CiAJaW50IGksIG5tc2EyeHh4X2VuY2xvc3VyZXMsIG5kZXZzX3RvX2FsbG9jYXRlOwogCWludCBidXMsIHRhcmdldCwgbHVuOworCWludCByYWlkX2N0bHJfcG9zaXRpb247CiAJREVDTEFSRV9CSVRNQVAobHVuemVyb2JpdHMsIEhQU0FfTUFYX1RBUkdFVFNfUEVSX0NUTFIpOwogCiAJY3VycmVudHNkID0ga3phbGxvYyhzaXplb2YoKmN1cnJlbnRzZCkgKiBIUFNBX01BWF9TQ1NJX0RFVlNfUEVSX0hCQSwKQEAgLTE2ODEsMjMgKzE4MDMsMjIgQEAKIAkJbmRldl9hbGxvY2F0ZWQrKzsKIAl9CiAKKwlpZiAodW5saWtlbHkoaXNfc2NzaV9yZXZfNShoKSkpCisJCXJhaWRfY3Rscl9wb3NpdGlvbiA9IDA7CisJZWxzZQorCQlyYWlkX2N0bHJfcG9zaXRpb24gPSBucGh5c2ljYWxzICsgbmxvZ2ljYWxzOworCiAJLyogYWRqdXN0IG91ciB0YWJsZSBvZiBkZXZpY2VzICovCiAJbm1zYTJ4eHhfZW5jbG9zdXJlcyA9IDA7CiAJZm9yIChpID0gMDsgaSA8IG5waHlzaWNhbHMgKyBubG9naWNhbHMgKyAxOyBpKyspIHsKLQkJX191OCAqbHVuYWRkcmJ5dGVzOworCQl1OCAqbHVuYWRkcmJ5dGVzOwogCiAJCS8qIEZpZ3VyZSBvdXQgd2hlcmUgdGhlIExVTiBJRCBpbmZvIGlzIGNvbWluZyBmcm9tICovCi0JCWlmIChpIDwgbnBoeXNpY2FscykKLQkJCWx1bmFkZHJieXRlcyA9ICZwaHlzZGV2X2xpc3QtPkxVTltpXVswXTsKLQkJZWxzZQotCQkJaWYgKGkgPCBucGh5c2ljYWxzICsgbmxvZ2ljYWxzKQotCQkJCWx1bmFkZHJieXRlcyA9Ci0JCQkJCSZsb2dkZXZfbGlzdC0+TFVOW2ktbnBoeXNpY2Fsc11bMF07Ci0JCQllbHNlIC8qIGphbSBpbiB0aGUgUkFJRCBjb250cm9sbGVyIGF0IHRoZSBlbmQgKi8KLQkJCQlsdW5hZGRyYnl0ZXMgPSBSQUlEX0NUTFJfTFVOSUQ7Ci0KKwkJbHVuYWRkcmJ5dGVzID0gZmlndXJlX2x1bmFkZHJieXRlcyhoLCByYWlkX2N0bHJfcG9zaXRpb24sCisJCQlpLCBucGh5c2ljYWxzLCBubG9naWNhbHMsIHBoeXNkZXZfbGlzdCwgbG9nZGV2X2xpc3QpOwogCQkvKiBza2lwIG1hc2tlZCBwaHlzaWNhbCBkZXZpY2VzLiAqLwotCQlpZiAobHVuYWRkcmJ5dGVzWzNdICYgMHhDMCAmJiBpIDwgbnBoeXNpY2FscykKKwkJaWYgKGx1bmFkZHJieXRlc1szXSAmIDB4QzAgJiYKKwkJCWkgPCBucGh5c2ljYWxzICsgKHJhaWRfY3Rscl9wb3NpdGlvbiA9PSAwKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIEdldCBkZXZpY2UgdHlwZSwgdmVuZG9yLCBtb2RlbCwgZGV2aWNlIGlkICovCkBAIC0xNzc3LDcgKzE4OTgsNiBAQAogCWtmcmVlKGlucV9idWZmKTsKIAlrZnJlZShwaHlzZGV2X2xpc3QpOwogCWtmcmVlKGxvZ2Rldl9saXN0KTsKLQlyZXR1cm47CiB9CiAKIC8qIGhwc2Ffc2NhdHRlcl9nYXRoZXIgdGFrZXMgYSBzdHJ1Y3Qgc2NzaV9jbW5kLCAoY21kKSwgYW5kIGRvZXMgdGhlIHBjaQpAQCAtMTc5MCw3ICsxOTEwLDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JX191NjQgYWRkcjY0OworCXU2NCBhZGRyNjQ7CiAJaW50IHVzZV9zZywgaTsKIAogCUJVR19PTihzY3NpX3NnX2NvdW50KGNtZCkgPiBNQVhTR0VOVFJJRVMpOwpAQCAtMTgwMywyMCArMTkyMywyMCBAQAogCQlnb3RvIHNnbGlzdF9maW5pc2hlZDsKIAogCXNjc2lfZm9yX2VhY2hfc2coY21kLCBzZywgdXNlX3NnLCBpKSB7Ci0JCWFkZHI2NCA9IChfX3U2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOworCQlhZGRyNjQgPSAodTY0KSBzZ19kbWFfYWRkcmVzcyhzZyk7CiAJCWxlbiAgPSBzZ19kbWFfbGVuKHNnKTsKIAkJY3AtPlNHW2ldLkFkZHIubG93ZXIgPQotCQkJKF9fdTMyKSAoYWRkcjY0ICYgKF9fdTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOworCQkJKHUzMikgKGFkZHI2NCAmICh1NjQpIDB4MDAwMDAwMDBGRkZGRkZGRik7CiAJCWNwLT5TR1tpXS5BZGRyLnVwcGVyID0KLQkJCShfX3UzMikgKChhZGRyNjQgPj4gMzIpICYgKF9fdTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOworCQkJKHUzMikgKChhZGRyNjQgPj4gMzIpICYgKHU2NCkgMHgwMDAwMDAwMEZGRkZGRkZGKTsKIAkJY3AtPlNHW2ldLkxlbiA9IGxlbjsKIAkJY3AtPlNHW2ldLkV4dCA9IDA7ICAvKiB3ZSBhcmUgbm90IGNoYWluaW5nICovCiAJfQogCiBzZ2xpc3RfZmluaXNoZWQ6CiAKLQljcC0+SGVhZGVyLlNHTGlzdCA9IChfX3U4KSB1c2Vfc2c7ICAgLyogbm8uIFNHcyBjb250aWcgaW4gdGhpcyBjbWQgKi8KLQljcC0+SGVhZGVyLlNHVG90YWwgPSAoX191MTYpIHVzZV9zZzsgLyogdG90YWwgc2dzIGluIHRoaXMgY21kIGxpc3QgKi8KKwljcC0+SGVhZGVyLlNHTGlzdCA9ICh1OCkgdXNlX3NnOyAgIC8qIG5vLiBTR3MgY29udGlnIGluIHRoaXMgY21kICovCisJY3AtPkhlYWRlci5TR1RvdGFsID0gKHUxNikgdXNlX3NnOyAvKiB0b3RhbCBzZ3MgaW4gdGhpcyBjbWQgbGlzdCAqLwogCXJldHVybiAwOwogfQogCkBAIC0xODYwLDcgKzE5ODAsOCBAQAogCWMtPnNjc2lfY21kID0gY21kOwogCWMtPkhlYWRlci5SZXBseVF1ZXVlID0gMDsgIC8qIHVudXNlZCBpbiBzaW1wbGUgbW9kZSAqLwogCW1lbWNweSgmYy0+SGVhZGVyLkxVTi5MdW5BZGRyQnl0ZXNbMF0sICZzY3NpM2FkZHJbMF0sIDgpOwotCWMtPkhlYWRlci5UYWcubG93ZXIgPSBjLT5idXNhZGRyOyAgLyogVXNlIGsuIGFkZHJlc3Mgb2YgY21kIGFzIHRhZyAqLworCWMtPkhlYWRlci5UYWcubG93ZXIgPSAoYy0+Y21kaW5kZXggPDwgRElSRUNUX0xPT0tVUF9TSElGVCk7CisJYy0+SGVhZGVyLlRhZy5sb3dlciB8PSBESVJFQ1RfTE9PS1VQX0JJVDsKIAogCS8qIEZpbGwgaW4gdGhlIHJlcXVlc3QgYmxvY2suLi4gKi8KIApAQCAtMTkxNCw2ICsyMDM1LDQ4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGhwc2Ffc2Nhbl9zdGFydChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaCkKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gc2hvc3RfdG9faGJhKHNoKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogd2FpdCB1bnRpbCBhbnkgc2NhbiBhbHJlYWR5IGluIHByb2dyZXNzIGlzIGZpbmlzaGVkLiAqLworCXdoaWxlICgxKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5zY2FuX2xvY2ssIGZsYWdzKTsKKwkJaWYgKGgtPnNjYW5fZmluaXNoZWQpCisJCQlicmVhazsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+c2Nhbl9sb2NrLCBmbGFncyk7CisJCXdhaXRfZXZlbnQoaC0+c2Nhbl93YWl0X3F1ZXVlLCBoLT5zY2FuX2ZpbmlzaGVkKTsKKwkJLyogTm90ZTogV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBhIHJhY2UgYmV0d2VlbiB0aGlzCisJCSAqIHRocmVhZCBhbmQgZHJpdmVyIHVubG9hZCBiZWNhdXNlIHRoZSBtaWRsYXllciB3aWxsCisJCSAqIGhhdmUgaW5jcmVtZW50ZWQgdGhlIHJlZmVyZW5jZSBjb3VudCwgc28gdW5sb2FkIHdvbid0CisJCSAqIGhhcHBlbiBpZiB3ZSdyZSBpbiBoZXJlLgorCQkgKi8KKwl9CisJaC0+c2Nhbl9maW5pc2hlZCA9IDA7IC8qIG1hcmsgc2NhbiBhcyBpbiBwcm9ncmVzcyAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPnNjYW5fbG9jaywgZmxhZ3MpOworCisJaHBzYV91cGRhdGVfc2NzaV9kZXZpY2VzKGgsIGgtPnNjc2lfaG9zdC0+aG9zdF9ubyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+c2Nhbl9sb2NrLCBmbGFncyk7CisJaC0+c2Nhbl9maW5pc2hlZCA9IDE7IC8qIG1hcmsgc2NhbiBhcyBmaW5pc2hlZC4gKi8KKwl3YWtlX3VwX2FsbCgmaC0+c2Nhbl93YWl0X3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5zY2FuX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBocHNhX3NjYW5fZmluaXNoZWQoc3RydWN0IFNjc2lfSG9zdCAqc2gsCisJdW5zaWduZWQgbG9uZyBlbGFwc2VkX3RpbWUpCit7CisJc3RydWN0IGN0bHJfaW5mbyAqaCA9IHNob3N0X3RvX2hiYShzaCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZmluaXNoZWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+c2Nhbl9sb2NrLCBmbGFncyk7CisJZmluaXNoZWQgPSBoLT5zY2FuX2ZpbmlzaGVkOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPnNjYW5fbG9jaywgZmxhZ3MpOworCXJldHVybiBmaW5pc2hlZDsKK30KKwogc3RhdGljIHZvaWQgaHBzYV91bnJlZ2lzdGVyX3Njc2koc3RydWN0IGN0bHJfaW5mbyAqaCkKIHsKIAkvKiB3ZSBhcmUgYmVpbmcgZm9yY2libHkgdW5sb2FkZWQsIGFuZCBtYXkgbm90IHJlZnVzZS4gKi8KQEAgLTE5MjYsNyArMjA4OSw2IEBACiB7CiAJaW50IHJjOwogCi0JaHBzYV91cGRhdGVfc2NzaV9kZXZpY2VzKGgsIC0xKTsKIAlyYyA9IGhwc2Ffc2NzaV9kZXRlY3QoaCk7CiAJaWYgKHJjICE9IDApCiAJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgImhwc2FfcmVnaXN0ZXJfc2NzaTogZmFpbGVkIgpAQCAtMjAwMywxNCArMjE2NSwxNCBAQAogCWggPSBzZGV2X3RvX2hiYShzY3NpY21kLT5kZXZpY2UpOwogCWlmIChoID09IE5VTEwpIC8qIHBhcmFub2lhICovCiAJCXJldHVybiBGQUlMRUQ7Ci0JZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInJlc2V0dGluZyBkcml2ZVxuIik7Ci0KIAlkZXYgPSBzY3NpY21kLT5kZXZpY2UtPmhvc3RkYXRhOwogCWlmICghZGV2KSB7CiAJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgImhwc2FfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXI6ICIKIAkJCSJkZXZpY2UgbG9va3VwIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gRkFJTEVEOwogCX0KKwlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAicmVzZXR0aW5nIGRldmljZSAlZDolZDolZDolZFxuIiwKKwkJaC0+c2NzaV9ob3N0LT5ob3N0X25vLCBkZXYtPmJ1cywgZGV2LT50YXJnZXQsIGRldi0+bHVuKTsKIAkvKiBzZW5kIGEgcmVzZXQgdG8gdGhlIFNDU0kgTFVOIHdoaWNoIHRoZSBjb21tYW5kIHdhcyBzZW50IHRvICovCiAJcmMgPSBocHNhX3NlbmRfcmVzZXQoaCwgZGV2LT5zY3NpM2FkZHIpOwogCWlmIChyYyA9PSAwICYmIHdhaXRfZm9yX2RldmljZV90b19iZWNvbWVfcmVhZHkoaCwgZGV2LT5zY3NpM2FkZHIpID09IDApCkBAIC0yMDUzLDggKzIyMTUsOCBAQAogCWMtPmNtZGluZGV4ID0gaTsKIAogCUlOSVRfSExJU1RfTk9ERSgmYy0+bGlzdCk7Ci0JYy0+YnVzYWRkciA9IChfX3UzMikgY21kX2RtYV9oYW5kbGU7Ci0JdGVtcDY0LnZhbCA9IChfX3U2NCkgZXJyX2RtYV9oYW5kbGU7CisJYy0+YnVzYWRkciA9ICh1MzIpIGNtZF9kbWFfaGFuZGxlOworCXRlbXA2NC52YWwgPSAodTY0KSBlcnJfZG1hX2hhbmRsZTsKIAljLT5FcnJEZXNjLkFkZHIubG93ZXIgPSB0ZW1wNjQudmFsMzIubG93ZXI7CiAJYy0+RXJyRGVzYy5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOwogCWMtPkVyckRlc2MuTGVuID0gc2l6ZW9mKCpjLT5lcnJfaW5mbyk7CkBAIC0yMDkxLDggKzIyNTMsOCBAQAogCW1lbXNldChjLT5lcnJfaW5mbywgMCwgc2l6ZW9mKCpjLT5lcnJfaW5mbykpOwogCiAJSU5JVF9ITElTVF9OT0RFKCZjLT5saXN0KTsKLQljLT5idXNhZGRyID0gKF9fdTMyKSBjbWRfZG1hX2hhbmRsZTsKLQl0ZW1wNjQudmFsID0gKF9fdTY0KSBlcnJfZG1hX2hhbmRsZTsKKwljLT5idXNhZGRyID0gKHUzMikgY21kX2RtYV9oYW5kbGU7CisJdGVtcDY0LnZhbCA9ICh1NjQpIGVycl9kbWFfaGFuZGxlOwogCWMtPkVyckRlc2MuQWRkci5sb3dlciA9IHRlbXA2NC52YWwzMi5sb3dlcjsKIAljLT5FcnJEZXNjLkFkZHIudXBwZXIgPSB0ZW1wNjQudmFsMzIudXBwZXI7CiAJYy0+RXJyRGVzYy5MZW4gPSBzaXplb2YoKmMtPmVycl9pbmZvKTsKQEAgLTIxMjUsNTAgKzIyODcsNiBAQAogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCi1zdGF0aWMgaW50IGRvX2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JaW50IHJldDsKLQotCWxvY2tfa2VybmVsKCk7Ci0JcmV0ID0gaHBzYV9pb2N0bChkZXYsIGNtZCwgYXJnKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBocHNhX2lvY3RsMzJfcGFzc3RocnUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgKmFyZyk7Ci1zdGF0aWMgaW50IGhwc2FfaW9jdGwzMl9iaWdfcGFzc3RocnUoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsCi0JaW50IGNtZCwgdm9pZCAqYXJnKTsKLQotc3RhdGljIGludCBocHNhX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBDQ0lTU19HRVRQQ0lJTkZPOgotCWNhc2UgQ0NJU1NfR0VUSU5USU5GTzoKLQljYXNlIENDSVNTX1NFVElOVElORk86Ci0JY2FzZSBDQ0lTU19HRVROT0RFTkFNRToKLQljYXNlIENDSVNTX1NFVE5PREVOQU1FOgotCWNhc2UgQ0NJU1NfR0VUSEVBUlRCRUFUOgotCWNhc2UgQ0NJU1NfR0VUQlVTVFlQRVM6Ci0JY2FzZSBDQ0lTU19HRVRGSVJNVkVSOgotCWNhc2UgQ0NJU1NfR0VURFJJVlZFUjoKLQljYXNlIENDSVNTX1JFVkFMSURWT0xTOgotCWNhc2UgQ0NJU1NfREVSRUdESVNLOgotCWNhc2UgQ0NJU1NfUkVHTkVXRElTSzoKLQljYXNlIENDSVNTX1JFR05FV0Q6Ci0JY2FzZSBDQ0lTU19SRVNDQU5ESVNLOgotCWNhc2UgQ0NJU1NfR0VUTFVOSU5GTzoKLQkJcmV0dXJuIGRvX2lvY3RsKGRldiwgY21kLCBhcmcpOwotCi0JY2FzZSBDQ0lTU19QQVNTVEhSVTMyOgotCQlyZXR1cm4gaHBzYV9pb2N0bDMyX3Bhc3N0aHJ1KGRldiwgY21kLCBhcmcpOwotCWNhc2UgQ0NJU1NfQklHX1BBU1NUSFJVMzI6Ci0JCXJldHVybiBocHNhX2lvY3RsMzJfYmlnX3Bhc3N0aHJ1KGRldiwgY21kLCBhcmcpOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgaHBzYV9pb2N0bDMyX3Bhc3N0aHJ1KHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJSU9DVEwzMl9Db21tYW5kX3N0cnVjdCBfX3VzZXIgKmFyZzMyID0KQEAgLTIxOTMsNyArMjMxMSw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkb19pb2N0bChkZXYsIENDSVNTX1BBU1NUSFJVLCAodm9pZCAqKXApOworCWVyciA9IGhwc2FfaW9jdGwoZGV2LCBDQ0lTU19QQVNTVEhSVSwgKHZvaWQgKilwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCWVyciB8PSBjb3B5X2luX3VzZXIoJmFyZzMyLT5lcnJvcl9pbmZvLCAmcC0+ZXJyb3JfaW5mbywKQEAgLTIyMzAsNyArMjM0OCw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQllcnIgPSBkb19pb2N0bChkZXYsIENDSVNTX0JJR19QQVNTVEhSVSwgKHZvaWQgKilwKTsKKwllcnIgPSBocHNhX2lvY3RsKGRldiwgQ0NJU1NfQklHX1BBU1NUSFJVLCAodm9pZCAqKXApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJZXJyIHw9IGNvcHlfaW5fdXNlcigmYXJnMzItPmVycm9yX2luZm8sICZwLT5lcnJvcl9pbmZvLApAQCAtMjIzOSw2ICsyMzU3LDM2IEBACiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiBlcnI7CiB9CisKK3N0YXRpYyBpbnQgaHBzYV9jb21wYXRfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQ0NJU1NfR0VUUENJSU5GTzoKKwljYXNlIENDSVNTX0dFVElOVElORk86CisJY2FzZSBDQ0lTU19TRVRJTlRJTkZPOgorCWNhc2UgQ0NJU1NfR0VUTk9ERU5BTUU6CisJY2FzZSBDQ0lTU19TRVROT0RFTkFNRToKKwljYXNlIENDSVNTX0dFVEhFQVJUQkVBVDoKKwljYXNlIENDSVNTX0dFVEJVU1RZUEVTOgorCWNhc2UgQ0NJU1NfR0VURklSTVZFUjoKKwljYXNlIENDSVNTX0dFVERSSVZWRVI6CisJY2FzZSBDQ0lTU19SRVZBTElEVk9MUzoKKwljYXNlIENDSVNTX0RFUkVHRElTSzoKKwljYXNlIENDSVNTX1JFR05FV0RJU0s6CisJY2FzZSBDQ0lTU19SRUdORVdEOgorCWNhc2UgQ0NJU1NfUkVTQ0FORElTSzoKKwljYXNlIENDSVNTX0dFVExVTklORk86CisJCXJldHVybiBocHNhX2lvY3RsKGRldiwgY21kLCBhcmcpOworCisJY2FzZSBDQ0lTU19QQVNTVEhSVTMyOgorCQlyZXR1cm4gaHBzYV9pb2N0bDMyX3Bhc3N0aHJ1KGRldiwgY21kLCBhcmcpOworCWNhc2UgQ0NJU1NfQklHX1BBU1NUSFJVMzI6CisJCXJldHVybiBocHNhX2lvY3RsMzJfYmlnX3Bhc3N0aHJ1KGRldiwgY21kLCBhcmcpOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9Cit9CiAjZW5kaWYKIAogc3RhdGljIGludCBocHNhX2dldHBjaWluZm9faW9jdGwoc3RydWN0IGN0bHJfaW5mbyAqaCwgdm9pZCBfX3VzZXIgKmFyZ3ApCkBAIC0yMzc4LDggKzI1MjYsOCBAQAogCUJZVEUgc2dfdXNlZCA9IDA7CiAJaW50IHN0YXR1cyA9IDA7CiAJaW50IGk7Ci0JX191MzIgbGVmdDsKLQlfX3UzMiBzejsKKwl1MzIgbGVmdDsKKwl1MzIgc3o7CiAJQllURSBfX3VzZXIgKmRhdGFfcHRyOwogCiAJaWYgKCFhcmdwKQpAQCAtMjUyNyw3ICsyNjc1LDcgQEAKIAljYXNlIENDSVNTX0RFUkVHRElTSzoKIAljYXNlIENDSVNTX1JFR05FV0RJU0s6CiAJY2FzZSBDQ0lTU19SRUdORVdEOgotCQlocHNhX3VwZGF0ZV9zY3NpX2RldmljZXMoaCwgZGV2LT5ob3N0LT5ob3N0X25vKTsKKwkJaHBzYV9zY2FuX3N0YXJ0KGgtPnNjc2lfaG9zdCk7CiAJCXJldHVybiAwOwogCWNhc2UgQ0NJU1NfR0VUUENJSU5GTzoKIAkJcmV0dXJuIGhwc2FfZ2V0cGNpaW5mb19pb2N0bChoLCBhcmdwKTsKQEAgLTI1NDIsOCArMjY5MCw4IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBmaWxsX2NtZChzdHJ1Y3QgQ29tbWFuZExpc3QgKmMsIF9fdTggY21kLCBzdHJ1Y3QgY3Rscl9pbmZvICpoLAotCXZvaWQgKmJ1ZmYsIHNpemVfdCBzaXplLCBfX3U4IHBhZ2VfY29kZSwgdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLAorc3RhdGljIHZvaWQgZmlsbF9jbWQoc3RydWN0IENvbW1hbmRMaXN0ICpjLCB1OCBjbWQsIHN0cnVjdCBjdGxyX2luZm8gKmgsCisJdm9pZCAqYnVmZiwgc2l6ZV90IHNpemUsIHU4IHBhZ2VfY29kZSwgdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLAogCWludCBjbWRfdHlwZSkKIHsKIAlpbnQgcGNpX2RpciA9IFhGRVJfTk9ORTsKQEAgLTI3MTAsMTkgKzI4NTgsMjAgQEAKIAlyZXR1cm4gaC0+YWNjZXNzLmNvbW1hbmRfY29tcGxldGVkKGgpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpbnRlcnJ1cHRfcGVuZGluZyhzdHJ1Y3QgY3Rscl9pbmZvICpoKQorc3RhdGljIGlubGluZSBib29sIGludGVycnVwdF9wZW5kaW5nKHN0cnVjdCBjdGxyX2luZm8gKmgpCiB7CiAJcmV0dXJuIGgtPmFjY2Vzcy5pbnRyX3BlbmRpbmcoaCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgbG9uZyBpbnRlcnJ1cHRfbm90X2Zvcl91cyhzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewotCXJldHVybiAoKGgtPmFjY2Vzcy5pbnRyX3BlbmRpbmcoaCkgPT0gMCkgfHwKLQkJIChoLT5pbnRlcnJ1cHRzX2VuYWJsZWQgPT0gMCkpOworCXJldHVybiAhKGgtPm1zaV92ZWN0b3IgfHwgaC0+bXNpeF92ZWN0b3IpICYmCisJCSgoaC0+YWNjZXNzLmludHJfcGVuZGluZyhoKSA9PSAwKSB8fAorCQkoaC0+aW50ZXJydXB0c19lbmFibGVkID09IDApKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYmFkX3RhZyhzdHJ1Y3QgY3Rscl9pbmZvICpoLCBfX3UzMiB0YWdfaW5kZXgsCi0JX191MzIgcmF3X3RhZykKK3N0YXRpYyBpbmxpbmUgaW50IGJhZF90YWcoc3RydWN0IGN0bHJfaW5mbyAqaCwgdTMyIHRhZ19pbmRleCwKKwl1MzIgcmF3X3RhZykKIHsKIAlpZiAodW5saWtlbHkodGFnX2luZGV4ID49IGgtPm5yX2NtZHMpKSB7CiAJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJiYWQgdGFnIDB4JTA4eCBpZ25vcmVkLlxuIiwgcmF3X3RhZyk7CkBAIC0yNzMxLDcgKzI4ODAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZmluaXNoX2NtZChzdHJ1Y3QgQ29tbWFuZExpc3QgKmMsIF9fdTMyIHJhd190YWcpCitzdGF0aWMgaW5saW5lIHZvaWQgZmluaXNoX2NtZChzdHJ1Y3QgQ29tbWFuZExpc3QgKmMsIHUzMiByYXdfdGFnKQogewogCXJlbW92ZVEoYyk7CiAJaWYgKGxpa2VseShjLT5jbWRfdHlwZSA9PSBDTURfU0NTSSkpCkBAIC0yNzQwLDQyICsyODg5LDc5IEBACiAJCWNvbXBsZXRlKGMtPndhaXRpbmcpOwogfQogCitzdGF0aWMgaW5saW5lIHUzMiBocHNhX3RhZ19jb250YWluc19pbmRleCh1MzIgdGFnKQoreworI2RlZmluZSBESVJFQ1RfTE9PS1VQX0JJVCAweDEwCisJcmV0dXJuIHRhZyAmIERJUkVDVF9MT09LVVBfQklUOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBocHNhX3RhZ190b19pbmRleCh1MzIgdGFnKQoreworI2RlZmluZSBESVJFQ1RfTE9PS1VQX1NISUZUIDUKKwlyZXR1cm4gdGFnID4+IERJUkVDVF9MT09LVVBfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGhwc2FfdGFnX2Rpc2NhcmRfZXJyb3JfYml0cyh1MzIgdGFnKQoreworI2RlZmluZSBIUFNBX0VSUk9SX0JJVFMgMHgwMworCXJldHVybiB0YWcgJiB+SFBTQV9FUlJPUl9CSVRTOworfQorCisvKiBwcm9jZXNzIGNvbXBsZXRpb24gb2YgYW4gaW5kZXhlZCAoImRpcmVjdCBsb29rdXAiKSBjb21tYW5kICovCitzdGF0aWMgaW5saW5lIHUzMiBwcm9jZXNzX2luZGV4ZWRfY21kKHN0cnVjdCBjdGxyX2luZm8gKmgsCisJdTMyIHJhd190YWcpCit7CisJdTMyIHRhZ19pbmRleDsKKwlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7CisKKwl0YWdfaW5kZXggPSBocHNhX3RhZ190b19pbmRleChyYXdfdGFnKTsKKwlpZiAoYmFkX3RhZyhoLCB0YWdfaW5kZXgsIHJhd190YWcpKQorCQlyZXR1cm4gbmV4dF9jb21tYW5kKGgpOworCWMgPSBoLT5jbWRfcG9vbCArIHRhZ19pbmRleDsKKwlmaW5pc2hfY21kKGMsIHJhd190YWcpOworCXJldHVybiBuZXh0X2NvbW1hbmQoaCk7Cit9CisKKy8qIHByb2Nlc3MgY29tcGxldGlvbiBvZiBhIG5vbi1pbmRleGVkIGNvbW1hbmQgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHByb2Nlc3Nfbm9uaW5kZXhlZF9jbWQoc3RydWN0IGN0bHJfaW5mbyAqaCwKKwl1MzIgcmF3X3RhZykKK3sKKwl1MzIgdGFnOworCXN0cnVjdCBDb21tYW5kTGlzdCAqYyA9IE5VTEw7CisJc3RydWN0IGhsaXN0X25vZGUgKnRtcDsKKworCXRhZyA9IGhwc2FfdGFnX2Rpc2NhcmRfZXJyb3JfYml0cyhyYXdfdGFnKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShjLCB0bXAsICZoLT5jbXBRLCBsaXN0KSB7CisJCWlmICgoYy0+YnVzYWRkciAmIDB4RkZGRkZGRTApID09ICh0YWcgJiAweEZGRkZGRkUwKSkgeworCQkJZmluaXNoX2NtZChjLCByYXdfdGFnKTsKKwkJCXJldHVybiBuZXh0X2NvbW1hbmQoaCk7CisJCX0KKwl9CisJYmFkX3RhZyhoLCBoLT5ucl9jbWRzICsgMSwgcmF3X3RhZyk7CisJcmV0dXJuIG5leHRfY29tbWFuZChoKTsKK30KKwogc3RhdGljIGlycXJldHVybl90IGRvX2hwc2FfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGN0bHJfaW5mbyAqaCA9IGRldl9pZDsKLQlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlfX3UzMiByYXdfdGFnLCB0YWcsIHRhZ19pbmRleDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wOworCXUzMiByYXdfdGFnOwogCiAJaWYgKGludGVycnVwdF9ub3RfZm9yX3VzKGgpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKLQl3aGlsZSAoaW50ZXJydXB0X3BlbmRpbmcoaCkpIHsKLQkJd2hpbGUgKChyYXdfdGFnID0gZ2V0X25leHRfY29tcGxldGlvbihoKSkgIT0gRklGT19FTVBUWSkgewotCQkJaWYgKGxpa2VseShIUFNBX1RBR19DT05UQUlOU19JTkRFWChyYXdfdGFnKSkpIHsKLQkJCQl0YWdfaW5kZXggPSBIUFNBX1RBR19UT19JTkRFWChyYXdfdGFnKTsKLQkJCQlpZiAoYmFkX3RhZyhoLCB0YWdfaW5kZXgsIHJhd190YWcpKQotCQkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JCQkJYyA9IGgtPmNtZF9wb29sICsgdGFnX2luZGV4OwotCQkJCWZpbmlzaF9jbWQoYywgcmF3X3RhZyk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQl0YWcgPSBIUFNBX1RBR19ESVNDQVJEX0VSUk9SX0JJVFMocmF3X3RhZyk7Ci0JCQljID0gTlVMTDsKLQkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsIHRtcCwgJmgtPmNtcFEsIGxpc3QpIHsKLQkJCQlpZiAoYy0+YnVzYWRkciA9PSB0YWcpIHsKLQkJCQkJZmluaXNoX2NtZChjLCByYXdfdGFnKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9CisJcmF3X3RhZyA9IGdldF9uZXh0X2NvbXBsZXRpb24oaCk7CisJd2hpbGUgKHJhd190YWcgIT0gRklGT19FTVBUWSkgeworCQlpZiAoaHBzYV90YWdfY29udGFpbnNfaW5kZXgocmF3X3RhZykpCisJCQlyYXdfdGFnID0gcHJvY2Vzc19pbmRleGVkX2NtZChoLCByYXdfdGFnKTsKKwkJZWxzZQorCQkJcmF3X3RhZyA9IHByb2Nlc3Nfbm9uaW5kZXhlZF9jbWQoaCwgcmF3X3RhZyk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLS8qIFNlbmQgYSBtZXNzYWdlIENEQiB0byB0aGUgZmlybXdhcmUuICovCisvKiBTZW5kIGEgbWVzc2FnZSBDREIgdG8gdGhlIGZpcm13YXJ0LiAqLwogc3RhdGljIF9fZGV2aW5pdCBpbnQgaHBzYV9tZXNzYWdlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBjaGFyIG9wY29kZSwKIAkJCQkJCXVuc2lnbmVkIGNoYXIgdHlwZSkKIHsKQEAgLTI4NDEsNyArMzAyNyw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgSFBTQV9NU0dfU0VORF9SRVRSWV9MSU1JVDsgaSsrKSB7CiAJCXRhZyA9IHJlYWRsKHZhZGRyICsgU0E1X1JFUExZX1BPUlRfT0ZGU0VUKTsKLQkJaWYgKEhQU0FfVEFHX0RJU0NBUkRfRVJST1JfQklUUyh0YWcpID09IHBhZGRyMzIpCisJCWlmIChocHNhX3RhZ19kaXNjYXJkX2Vycm9yX2JpdHModGFnKSA9PSBwYWRkcjMyKQogCQkJYnJlYWs7CiAJCW1zbGVlcChIUFNBX01TR19TRU5EX1JFVFJZX0lOVEVSVkFMX01TRUNTKTsKIAl9CkBAIC0zMDYzLDcgKzMyNDksNyBAQAogICovCiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBocHNhX2ludGVycnVwdF9tb2RlKHN0cnVjdCBjdGxyX2luZm8gKmgsCi0JCQkJCSAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBfX3UzMiBib2FyZF9pZCkKKwkJCQkJICAgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiBib2FyZF9pZCkKIHsKICNpZmRlZiBDT05GSUdfUENJX01TSQogCWludCBlcnI7CkBAIC0zMTA3LDIyICszMjkzLDIyIEBACiBkZWZhdWx0X2ludF9tb2RlOgogI2VuZGlmCQkJCS8qIENPTkZJR19QQ0lfTVNJICovCiAJLyogaWYgd2UgZ2V0IGhlcmUgd2UncmUgZ29pbmcgdG8gdXNlIHRoZSBkZWZhdWx0IGludGVycnVwdCBtb2RlICovCi0JaC0+aW50cltTSU1QTEVfTU9ERV9JTlRdID0gcGRldi0+aXJxOwotCXJldHVybjsKKwloLT5pbnRyW1BFUkZfTU9ERV9JTlRdID0gcGRldi0+aXJxOwogfQogCiBzdGF0aWMgaW50IGhwc2FfcGNpX2luaXQoc3RydWN0IGN0bHJfaW5mbyAqaCwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJdXNob3J0IHN1YnN5c3RlbV92ZW5kb3JfaWQsIHN1YnN5c3RlbV9kZXZpY2VfaWQsIGNvbW1hbmQ7Ci0JX191MzIgYm9hcmRfaWQsIHNjcmF0Y2hwYWQgPSAwOwotCV9fdTY0IGNmZ19vZmZzZXQ7Ci0JX191MzIgY2ZnX2Jhc2VfYWRkcjsKLQlfX3U2NCBjZmdfYmFzZV9hZGRyX2luZGV4OworCXUzMiBib2FyZF9pZCwgc2NyYXRjaHBhZCA9IDA7CisJdTY0IGNmZ19vZmZzZXQ7CisJdTMyIGNmZ19iYXNlX2FkZHI7CisJdTY0IGNmZ19iYXNlX2FkZHJfaW5kZXg7CisJdTMyIHRyYW5zX29mZnNldDsKIAlpbnQgaSwgcHJvZF9pbmRleCwgZXJyOwogCiAJc3Vic3lzdGVtX3ZlbmRvcl9pZCA9IHBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7CiAJc3Vic3lzdGVtX2RldmljZV9pZCA9IHBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7Ci0JYm9hcmRfaWQgPSAoKChfX3UzMikgKHN1YnN5c3RlbV9kZXZpY2VfaWQgPDwgMTYpICYgMHhmZmZmMDAwMCkgfAorCWJvYXJkX2lkID0gKCgodTMyKSAoc3Vic3lzdGVtX2RldmljZV9pZCA8PCAxNikgJiAweGZmZmYwMDAwKSB8CiAJCSAgICBzdWJzeXN0ZW1fdmVuZG9yX2lkKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb2R1Y3RzKTsgaSsrKQpAQCAtMzE5OSw3ICszMzg1LDcgQEAKIAogCS8qIGdldCB0aGUgYWRkcmVzcyBpbmRleCBudW1iZXIgKi8KIAljZmdfYmFzZV9hZGRyID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfQ1RDRkdfT0ZGU0VUKTsKLQljZmdfYmFzZV9hZGRyICY9IChfX3UzMikgMHgwMDAwZmZmZjsKKwljZmdfYmFzZV9hZGRyICY9ICh1MzIpIDB4MDAwMGZmZmY7CiAJY2ZnX2Jhc2VfYWRkcl9pbmRleCA9IGZpbmRfUENJX0JBUl9pbmRleChwZGV2LCBjZmdfYmFzZV9hZGRyKTsKIAlpZiAoY2ZnX2Jhc2VfYWRkcl9pbmRleCA9PSAtMSkgewogCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiY2Fubm90IGZpbmQgY2ZnX2Jhc2VfYWRkcl9pbmRleFxuIik7CkBAIC0zMjExLDExICszMzk3LDE0IEBACiAJaC0+Y2ZndGFibGUgPSByZW1hcF9wY2lfbWVtKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LAogCQkJICAgICAgIGNmZ19iYXNlX2FkZHJfaW5kZXgpICsgY2ZnX29mZnNldCwKIAkJCQlzaXplb2YoaC0+Y2ZndGFibGUpKTsKKwkvKiBGaW5kIHBlcmZvcm1hbnQgbW9kZSB0YWJsZS4gKi8KKwl0cmFuc19vZmZzZXQgPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5UcmFuc01ldGhvZE9mZnNldCkpOworCWgtPnRyYW5zdGFibGUgPSByZW1hcF9wY2lfbWVtKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LAorCQkJCWNmZ19iYXNlX2FkZHJfaW5kZXgpK2NmZ19vZmZzZXQrdHJhbnNfb2Zmc2V0LAorCQkJCXNpemVvZigqaC0+dHJhbnN0YWJsZSkpOworCiAJaC0+Ym9hcmRfaWQgPSBib2FyZF9pZDsKLQotCS8qIFF1ZXJ5IGNvbnRyb2xsZXIgZm9yIG1heCBzdXBwb3J0ZWQgY29tbWFuZHM6ICovCi0JaC0+bWF4X2NvbW1hbmRzID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+Q21kc091dE1heCkpOwotCisJaC0+bWF4X2NvbW1hbmRzID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+TWF4UGVyZm9ybWFudE1vZGVDb21tYW5kcykpOwogCWgtPnByb2R1Y3RfbmFtZSA9IHByb2R1Y3RzW3Byb2RfaW5kZXhdLnByb2R1Y3RfbmFtZTsKIAloLT5hY2Nlc3MgPSAqKHByb2R1Y3RzW3Byb2RfaW5kZXhdLmFjY2Vzcyk7CiAJLyogQWxsb3cgcm9vbSBmb3Igc29tZSBpb2N0bHMgKi8KQEAgLTMyMzIsNyArMzQyMSw3IEBACiAjaWZkZWYgQ09ORklHX1g4NgogCXsKIAkJLyogTmVlZCB0byBlbmFibGUgcHJlZmV0Y2ggaW4gdGhlIFNDU0kgY29yZSBmb3IgNjQwMCBpbiB4ODYgKi8KLQkJX191MzIgcHJlZmV0Y2g7CisJCXUzMiBwcmVmZXRjaDsKIAkJcHJlZmV0Y2ggPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5TQ1NJX1ByZWZldGNoKSk7CiAJCXByZWZldGNoIHw9IDB4MTAwOwogCQl3cml0ZWwocHJlZmV0Y2gsICYoaC0+Y2ZndGFibGUtPlNDU0lfUHJlZmV0Y2gpKTsKQEAgLTMyNDQsNyArMzQzMyw3IEBACiAJICogcGh5c2ljYWwgbWVtb3J5LgogCSAqLwogCWlmIChib2FyZF9pZCA9PSAweDMyMjUxMDNDKSB7Ci0JCV9fdTMyIGRtYV9wcmVmZXRjaDsKKwkJdTMyIGRtYV9wcmVmZXRjaDsKIAkJZG1hX3ByZWZldGNoID0gcmVhZGwoaC0+dmFkZHIgKyBJMk9fRE1BMV9DRkcpOwogCQlkbWFfcHJlZmV0Y2ggfD0gMHg4MDAwOwogCQl3cml0ZWwoZG1hX3ByZWZldGNoLCBoLT52YWRkciArIEkyT19ETUExX0NGRyk7CkBAIC0zMjg2LDEwICszNDc1LDI2IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgX19kZXZpbml0IGhwc2FfaGJhX2lucXVpcnkoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlpbnQgcmM7CisKKyNkZWZpbmUgSEJBX0lOUVVJUllfQllURV9DT1VOVCA2NAorCWgtPmhiYV9pbnF1aXJ5X2RhdGEgPSBrbWFsbG9jKEhCQV9JTlFVSVJZX0JZVEVfQ09VTlQsIEdGUF9LRVJORUwpOworCWlmICghaC0+aGJhX2lucXVpcnlfZGF0YSkKKwkJcmV0dXJuOworCXJjID0gaHBzYV9zY3NpX2RvX2lucXVpcnkoaCwgUkFJRF9DVExSX0xVTklELCAwLAorCQloLT5oYmFfaW5xdWlyeV9kYXRhLCBIQkFfSU5RVUlSWV9CWVRFX0NPVU5UKTsKKwlpZiAocmMgIT0gMCkgeworCQlrZnJlZShoLT5oYmFfaW5xdWlyeV9kYXRhKTsKKwkJaC0+aGJhX2lucXVpcnlfZGF0YSA9IE5VTEw7CisJfQorfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBocHNhX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewotCWludCBpOworCWludCBpLCByYzsKIAlpbnQgZGFjOwogCXN0cnVjdCBjdGxyX2luZm8gKmg7CiAKQEAgLTMzMTQsMTcgKzM1MTksMjMgQEAKIAkJfQogCX0KIAotCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IENvbW1hbmRMaXN0KSAlIDgpOworCS8qIENvbW1hbmQgc3RydWN0dXJlcyBtdXN0IGJlIGFsaWduZWQgb24gYSAzMi1ieXRlIGJvdW5kYXJ5IGJlY2F1c2UKKwkgKiB0aGUgNSBsb3dlciBiaXRzIG9mIHRoZSBhZGRyZXNzIGFyZSB1c2VkIGJ5IHRoZSBoYXJkd2FyZS4gYW5kIGJ5CisJICogdGhlIGRyaXZlci4gIFNlZSBjb21tZW50cyBpbiBocHNhLmggZm9yIG1vcmUgaW5mby4KKwkgKi8KKyNkZWZpbmUgQ09NTUFORExJU1RfQUxJR05NRU5UIDMyCisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgQ29tbWFuZExpc3QpICUgQ09NTUFORExJU1RfQUxJR05NRU5UKTsKIAloID0ga3phbGxvYyhzaXplb2YoKmgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWgpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAloLT5idXN5X2luaXRpYWxpemluZyA9IDE7CiAJSU5JVF9ITElTVF9IRUFEKCZoLT5jbXBRKTsKIAlJTklUX0hMSVNUX0hFQUQoJmgtPnJlcVEpOwogCW11dGV4X2luaXQoJmgtPmJ1c3lfc2h1dHRpbmdfZG93bik7CiAJaW5pdF9jb21wbGV0aW9uKCZoLT5zY2FuX3dhaXQpOwotCWlmIChocHNhX3BjaV9pbml0KGgsIHBkZXYpICE9IDApCisJcmMgPSBocHNhX3BjaV9pbml0KGgsIHBkZXYpOworCWlmIChyYyAhPSAwKQogCQlnb3RvIGNsZWFuMTsKIAogCXNwcmludGYoaC0+ZGV2bmFtZSwgImhwc2ElZCIsIG51bWJlcl9vZl9jb250cm9sbGVycyk7CkBAIC0zMzMzLDI3ICszNTQ0LDMyIEBACiAJaC0+cGRldiA9IHBkZXY7CiAKIAkvKiBjb25maWd1cmUgUENJIERNQSBzdHVmZiAqLwotCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSkKKwlyYyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSk7CisJaWYgKHJjID09IDApIHsKIAkJZGFjID0gMTsKLQllbHNlIGlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkKLQkJZGFjID0gMDsKLQllbHNlIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZVxuIik7Ci0JCWdvdG8gY2xlYW4xOworCX0gZWxzZSB7CisJCXJjID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwkJaWYgKHJjID09IDApIHsKKwkJCWRhYyA9IDA7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlXG4iKTsKKwkJCWdvdG8gY2xlYW4xOworCQl9CiAJfQogCiAJLyogbWFrZSBzdXJlIHRoZSBib2FyZCBpbnRlcnJ1cHRzIGFyZSBvZmYgKi8KIAloLT5hY2Nlc3Muc2V0X2ludHJfbWFzayhoLCBIUFNBX0lOVFJfT0ZGKTsKLQlpZiAocmVxdWVzdF9pcnEoaC0+aW50cltTSU1QTEVfTU9ERV9JTlRdLCBkb19ocHNhX2ludHIsCi0JCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsIGgtPmRldm5hbWUsIGgpKSB7CisJcmMgPSByZXF1ZXN0X2lycShoLT5pbnRyW1BFUkZfTU9ERV9JTlRdLCBkb19ocHNhX2ludHIsCisJCQlJUlFGX0RJU0FCTEVELCBoLT5kZXZuYW1lLCBoKTsKKwlpZiAocmMpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBpcnEgJWQgZm9yICVzXG4iLAotCQkgICAgICAgaC0+aW50cltTSU1QTEVfTU9ERV9JTlRdLCBoLT5kZXZuYW1lKTsKKwkJICAgICAgIGgtPmludHJbUEVSRl9NT0RFX0lOVF0sIGgtPmRldm5hbWUpOwogCQlnb3RvIGNsZWFuMjsKIAl9CiAKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXM6IDwweCV4PiBhdCBQQ0kgJXMgSVJRICVkJXMgdXNpbmcgREFDXG4iLAotCSAgICAgICBoLT5kZXZuYW1lLCBwZGV2LT5kZXZpY2UsIHBjaV9uYW1lKHBkZXYpLAotCSAgICAgICBoLT5pbnRyW1NJTVBMRV9NT0RFX0lOVF0sIGRhYyA/ICIiIDogIiBub3QiKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXM6IDwweCV4PiBhdCBJUlEgJWQlcyB1c2luZyBEQUNcbiIsCisJICAgICAgIGgtPmRldm5hbWUsIHBkZXYtPmRldmljZSwKKwkgICAgICAgaC0+aW50cltQRVJGX01PREVfSU5UXSwgZGFjID8gIiIgOiAiIG5vdCIpOwogCiAJaC0+Y21kX3Bvb2xfYml0cyA9CiAJICAgIGttYWxsb2MoKChoLT5ucl9jbWRzICsgQklUU19QRVJfTE9ORyAtCkBAIC0zMzY4LDkgKzM1ODQsMTMgQEAKIAkgICAgfHwgKGgtPmNtZF9wb29sID09IE5VTEwpCiAJICAgIHx8IChoLT5lcnJpbmZvX3Bvb2wgPT0gTlVMTCkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeSIpOworCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gY2xlYW40OwogCX0KIAlzcGluX2xvY2tfaW5pdCgmaC0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmgtPnNjYW5fbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmaC0+c2Nhbl93YWl0X3F1ZXVlKTsKKwloLT5zY2FuX2ZpbmlzaGVkID0gMTsgLyogbm8gc2NhbiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgKi8KIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBoKTsKIAltZW1zZXQoaC0+Y21kX3Bvb2xfYml0cywgMCwKQEAgLTMzODIsNiArMzYwMiw4IEBACiAJLyogVHVybiB0aGUgaW50ZXJydXB0cyBvbiBzbyB3ZSBjYW4gc2VydmljZSByZXF1ZXN0cyAqLwogCWgtPmFjY2Vzcy5zZXRfaW50cl9tYXNrKGgsIEhQU0FfSU5UUl9PTik7CiAKKwlocHNhX3B1dF9jdGxyX2ludG9fcGVyZm9ybWFudF9tb2RlKGgpOworCWhwc2FfaGJhX2lucXVpcnkoaCk7CiAJaHBzYV9yZWdpc3Rlcl9zY3NpKGgpOwkvKiBob29rIG91cnNlbHZlcyBpbnRvIFNDU0kgc3Vic3lzdGVtICovCiAJaC0+YnVzeV9pbml0aWFsaXppbmcgPSAwOwogCXJldHVybiAxOwpAQCAtMzM5NywxMiArMzYxOSwxMiBAQAogCQkJICAgIGgtPm5yX2NtZHMgKiBzaXplb2Yoc3RydWN0IEVycm9ySW5mbyksCiAJCQkgICAgaC0+ZXJyaW5mb19wb29sLAogCQkJICAgIGgtPmVycmluZm9fcG9vbF9kaGFuZGxlKTsKLQlmcmVlX2lycShoLT5pbnRyW1NJTVBMRV9NT0RFX0lOVF0sIGgpOworCWZyZWVfaXJxKGgtPmludHJbUEVSRl9NT0RFX0lOVF0sIGgpOwogY2xlYW4yOgogY2xlYW4xOgogCWgtPmJ1c3lfaW5pdGlhbGl6aW5nID0gMDsKIAlrZnJlZShoKTsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBocHNhX2ZsdXNoX2NhY2hlKHN0cnVjdCBjdGxyX2luZm8gKmgpCkBAIC0zNDQxLDcgKzM2NjMsNyBAQAogCSAqLwogCWhwc2FfZmx1c2hfY2FjaGUoaCk7CiAJaC0+YWNjZXNzLnNldF9pbnRyX21hc2soaCwgSFBTQV9JTlRSX09GRik7Ci0JZnJlZV9pcnEoaC0+aW50clsyXSwgaCk7CisJZnJlZV9pcnEoaC0+aW50cltQRVJGX01PREVfSU5UXSwgaCk7CiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAlpZiAoaC0+bXNpeF92ZWN0b3IpCiAJCXBjaV9kaXNhYmxlX21zaXgoaC0+cGRldik7CkBAIC0zNDcwLDcgKzM2OTIsMTEgQEAKIAlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsCiAJCWgtPm5yX2NtZHMgKiBzaXplb2Yoc3RydWN0IEVycm9ySW5mbyksCiAJCWgtPmVycmluZm9fcG9vbCwgaC0+ZXJyaW5mb19wb29sX2RoYW5kbGUpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwgaC0+cmVwbHlfcG9vbF9zaXplLAorCQloLT5yZXBseV9wb29sLCBoLT5yZXBseV9wb29sX2RoYW5kbGUpOwogCWtmcmVlKGgtPmNtZF9wb29sX2JpdHMpOworCWtmcmVlKGgtPmJsb2NrRmV0Y2hUYWJsZSk7CisJa2ZyZWUoaC0+aGJhX2lucXVpcnlfZGF0YSk7CiAJLyoKIAkgKiBEZWxpYmVyYXRlbHkgb21pdCBwY2lfZGlzYWJsZV9kZXZpY2UoKTogaXQgZG9lcyBzb21ldGhpbmcgbmFzdHkgdG8KIAkgKiBTbWFydCBBcnJheSBjb250cm9sbGVycyB0aGF0IHBjaV9lbmFibGVfZGV2aWNlIGRvZXMgbm90IHVuZG8KQEAgLTM1MDIsNiArMzcyOCwxMjkgQEAKIAkucmVzdW1lID0gaHBzYV9yZXN1bWUsCiB9OwogCisvKiBGaWxsIGluIGJ1Y2tldF9tYXBbXSwgZ2l2ZW4gbnNncyAodGhlIG1heCBudW1iZXIgb2YKKyAqIHNjYXR0ZXIgZ2F0aGVyIGVsZW1lbnRzIHN1cHBvcnRlZCkgYW5kIGJ1Y2tldFtdLAorICogd2hpY2ggaXMgYW4gYXJyYXkgb2YgOCBpbnRlZ2Vycy4gIFRoZSBidWNrZXRbXSBhcnJheQorICogY29udGFpbnMgOCBkaWZmZXJlbnQgRE1BIHRyYW5zZmVyIHNpemVzIChpbiAxNgorICogYnl0ZSBpbmNyZW1lbnRzKSB3aGljaCB0aGUgY29udHJvbGxlciB1c2VzIHRvIGZldGNoCisgKiBjb21tYW5kcy4gIFRoaXMgZnVuY3Rpb24gZmlsbHMgaW4gYnVja2V0X21hcFtdLCB3aGljaAorICogbWFwcyBhIGdpdmVuIG51bWJlciBvZiBzY2F0dGVyIGdhdGhlciBlbGVtZW50cyB0byBvbmUgb2YKKyAqIHRoZSA4IERNQSB0cmFuc2ZlciBzaXplcy4gIFRoZSBwb2ludCBvZiBpdCBpcyB0byBhbGxvdyB0aGUKKyAqIGNvbnRyb2xsZXIgdG8gb25seSBkbyBhcyBtdWNoIERNQSBhcyBuZWVkZWQgdG8gZmV0Y2ggdGhlCisgKiBjb21tYW5kLCB3aXRoIHRoZSBETUEgdHJhbnNmZXIgc2l6ZSBlbmNvZGVkIGluIHRoZSBsb3dlcgorICogYml0cyBvZiB0aGUgY29tbWFuZCBhZGRyZXNzLgorICovCitzdGF0aWMgdm9pZCAgY2FsY19idWNrZXRfbWFwKGludCBidWNrZXRbXSwgaW50IG51bV9idWNrZXRzLAorCWludCBuc2dzLCBpbnQgKmJ1Y2tldF9tYXApCit7CisJaW50IGksIGosIGIsIHNpemU7CisKKwkvKiBldmVuIGEgY29tbWFuZCB3aXRoIDAgU0dzIHJlcXVpcmVzIDQgYmxvY2tzICovCisjZGVmaW5lIE1JTklNVU1fVFJBTlNGRVJfQkxPQ0tTIDQKKyNkZWZpbmUgTlVNX0JVQ0tFVFMgOAorCS8qIE5vdGUsIGJ1Y2tldF9tYXAgbXVzdCBoYXZlIG5zZ3MrMSBlbnRyaWVzLiAqLworCWZvciAoaSA9IDA7IGkgPD0gbnNnczsgaSsrKSB7CisJCS8qIENvbXB1dGUgc2l6ZSBvZiBhIGNvbW1hbmQgd2l0aCBpIFNHIGVudHJpZXMgKi8KKwkJc2l6ZSA9IGkgKyBNSU5JTVVNX1RSQU5TRkVSX0JMT0NLUzsKKwkJYiA9IG51bV9idWNrZXRzOyAvKiBBc3N1bWUgdGhlIGJpZ2dlc3QgYnVja2V0ICovCisJCS8qIEZpbmQgdGhlIGJ1Y2tldCB0aGF0IGlzIGp1c3QgYmlnIGVub3VnaCAqLworCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7CisJCQlpZiAoYnVja2V0W2pdID49IHNpemUpIHsKKwkJCQliID0gajsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQkvKiBmb3IgYSBjb21tYW5kIHdpdGggaSBTRyBlbnRyaWVzLCB1c2UgYnVja2V0IGIuICovCisJCWJ1Y2tldF9tYXBbaV0gPSBiOworCX0KK30KKworc3RhdGljIHZvaWQgaHBzYV9wdXRfY3Rscl9pbnRvX3BlcmZvcm1hbnRfbW9kZShzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCXUzMiB0cmFuc19zdXBwb3J0OworCXU2NCB0cmFuc19vZmZzZXQ7CisJLyogIDUgPSAxIHMvZyBlbnRyeSBvciA0aworCSAqICA2ID0gMiBzL2cgZW50cnkgb3IgOGsKKwkgKiAgOCA9IDQgcy9nIGVudHJ5IG9yIDE2aworCSAqIDEwID0gNiBzL2cgZW50cnkgb3IgMjRrCisJICovCisJaW50IGJmdFs4XSA9IHs1LCA2LCA4LCAxMCwgMTIsIDIwLCAyOCwgMzV9OyAvKiBmb3Igc2NhdHRlci9nYXRoZXJzICovCisJaW50IGkgPSAwOworCWludCBsID0gMDsKKwl1bnNpZ25lZCBsb25nIHJlZ2lzdGVyX3ZhbHVlOworCisJdHJhbnNfc3VwcG9ydCA9IHJlYWRsKCYoaC0+Y2ZndGFibGUtPlRyYW5zcG9ydFN1cHBvcnQpKTsKKwlpZiAoISh0cmFuc19zdXBwb3J0ICYgUEVSRk9STUFOVF9NT0RFKSkKKwkJcmV0dXJuOworCisJaC0+bWF4X2NvbW1hbmRzID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+TWF4UGVyZm9ybWFudE1vZGVDb21tYW5kcykpOworCWgtPm1heF9zZ19lbnRyaWVzID0gMzI7CisJLyogUGVyZm9ybWFudCBtb2RlIHJpbmcgYnVmZmVyIGFuZCBzdXBwb3J0aW5nIGRhdGEgc3RydWN0dXJlcyAqLworCWgtPnJlcGx5X3Bvb2xfc2l6ZSA9IGgtPm1heF9jb21tYW5kcyAqIHNpemVvZih1NjQpOworCWgtPnJlcGx5X3Bvb2wgPSBwY2lfYWxsb2NfY29uc2lzdGVudChoLT5wZGV2LCBoLT5yZXBseV9wb29sX3NpemUsCisJCQkJJihoLT5yZXBseV9wb29sX2RoYW5kbGUpKTsKKworCS8qIE5lZWQgYSBibG9jayBmZXRjaCB0YWJsZSBmb3IgcGVyZm9ybWFudCBtb2RlICovCisJaC0+YmxvY2tGZXRjaFRhYmxlID0ga21hbGxvYygoKGgtPm1heF9zZ19lbnRyaWVzKzEpICoKKwkJCQlzaXplb2YodTMyKSksIEdGUF9LRVJORUwpOworCisJaWYgKChoLT5yZXBseV9wb29sID09IE5VTEwpCisJCXx8IChoLT5ibG9ja0ZldGNoVGFibGUgPT0gTlVMTCkpCisJCWdvdG8gY2xlYW5fdXA7CisKKwloLT5yZXBseV9wb29sX3dyYXBhcm91bmQgPSAxOyAvKiBzcGVjOiBpbml0IHRvIDEgKi8KKworCS8qIENvbnRyb2xsZXIgc3BlYzogemVybyBvdXQgdGhpcyBidWZmZXIuICovCisJbWVtc2V0KGgtPnJlcGx5X3Bvb2wsIDAsIGgtPnJlcGx5X3Bvb2xfc2l6ZSk7CisJaC0+cmVwbHlfcG9vbF9oZWFkID0gaC0+cmVwbHlfcG9vbDsKKworCXRyYW5zX29mZnNldCA9IHJlYWRsKCYoaC0+Y2ZndGFibGUtPlRyYW5zTWV0aG9kT2Zmc2V0KSk7CisJYmZ0WzddID0gaC0+bWF4X3NnX2VudHJpZXMgKyA0OworCWNhbGNfYnVja2V0X21hcChiZnQsIEFSUkFZX1NJWkUoYmZ0KSwgMzIsIGgtPmJsb2NrRmV0Y2hUYWJsZSk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJd3JpdGVsKGJmdFtpXSwgJmgtPnRyYW5zdGFibGUtPkJsb2NrRmV0Y2hbaV0pOworCisJLyogc2l6ZSBvZiBjb250cm9sbGVyIHJpbmcgYnVmZmVyICovCisJd3JpdGVsKGgtPm1heF9jb21tYW5kcywgJmgtPnRyYW5zdGFibGUtPlJlcFFTaXplKTsKKwl3cml0ZWwoMSwgJmgtPnRyYW5zdGFibGUtPlJlcFFDb3VudCk7CisJd3JpdGVsKDAsICZoLT50cmFuc3RhYmxlLT5SZXBRQ3RyQWRkckxvdzMyKTsKKwl3cml0ZWwoMCwgJmgtPnRyYW5zdGFibGUtPlJlcFFDdHJBZGRySGlnaDMyKTsKKwl3cml0ZWwoaC0+cmVwbHlfcG9vbF9kaGFuZGxlLCAmaC0+dHJhbnN0YWJsZS0+UmVwUUFkZHIwTG93MzIpOworCXdyaXRlbCgwLCAmaC0+dHJhbnN0YWJsZS0+UmVwUUFkZHIwSGlnaDMyKTsKKwl3cml0ZWwoQ0ZHVEJMX1RyYW5zX1BlcmZvcm1hbnQsCisJCSYoaC0+Y2ZndGFibGUtPkhvc3RXcml0ZS5UcmFuc3BvcnRSZXF1ZXN0KSk7CisJd3JpdGVsKENGR1RCTF9DaGFuZ2VSZXEsIGgtPnZhZGRyICsgU0E1X0RPT1JCRUxMKTsKKwkvKiB1bmRlciBjZXJ0YWluIHZlcnkgcmFyZSBjb25kaXRpb25zLCB0aGlzIGNhbiB0YWtlIGF3aGlsZS4KKwkgKiAoZS5nLjogaG90IHJlcGxhY2UgYSBmYWlsZWQgMTQ0R0IgZHJpdmUgaW4gYSBSQUlEIDUgc2V0IHJpZ2h0CisJICogYXMgd2UgZW50ZXIgdGhpcyBjb2RlLikgKi8KKwlmb3IgKGwgPSAwOyBsIDwgTUFYX0NPTkZJR19XQUlUOyBsKyspIHsKKwkJcmVnaXN0ZXJfdmFsdWUgPSByZWFkbChoLT52YWRkciArIFNBNV9ET09SQkVMTCk7CisJCWlmICghKHJlZ2lzdGVyX3ZhbHVlICYgQ0ZHVEJMX0NoYW5nZVJlcSkpCisJCQlicmVhazsKKwkJLyogZGVsYXkgYW5kIHRyeSBhZ2FpbiAqLworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KDEwKTsKKwl9CisJcmVnaXN0ZXJfdmFsdWUgPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5UcmFuc3BvcnRBY3RpdmUpKTsKKwlpZiAoIShyZWdpc3Rlcl92YWx1ZSAmIENGR1RCTF9UcmFuc19QZXJmb3JtYW50KSkgeworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBib2FyZCBpbnRvIgorCQkJCQkiIHBlcmZvcm1hbnQgbW9kZVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBDaGFuZ2UgdGhlIGFjY2VzcyBtZXRob2RzIHRvIHRoZSBwZXJmb3JtYW50IGFjY2VzcyBtZXRob2RzICovCisJaC0+YWNjZXNzID0gU0E1X3BlcmZvcm1hbnRfYWNjZXNzOworCWgtPnRyYW5zTWV0aG9kID0gQ0ZHVEJMX1RyYW5zX1BlcmZvcm1hbnQ7CisKKwlyZXR1cm47CisKK2NsZWFuX3VwOgorCWlmIChoLT5yZXBseV9wb29sKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsIGgtPnJlcGx5X3Bvb2xfc2l6ZSwKKwkJCWgtPnJlcGx5X3Bvb2wsIGgtPnJlcGx5X3Bvb2xfZGhhbmRsZSk7CisJa2ZyZWUoaC0+YmxvY2tGZXRjaFRhYmxlKTsKK30KKwogLyoKICAqICBUaGlzIGlzIGl0LiAgUmVnaXN0ZXIgdGhlIFBDSSBkcml2ZXIgaW5mb3JtYXRpb24gZm9yIHRoZSBjYXJkcyB3ZSBjb250cm9sCiAgKiAgdGhlIE9TIHdpbGwgY2FsbCBvdXIgcmVnaXN0ZXJlZCByb3V0aW5lcyB3aGVuIGl0IGZpbmRzIG9uZSBvZiBvdXIgY2FyZHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHBzYS5oIGIvZHJpdmVycy9zY3NpL2hwc2EuaAppbmRleCA2YmQxOTQ5Li5hMDUwMmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHBzYS5oCisrKyBiL2RyaXZlcnMvc2NzaS9ocHNhLmgKQEAgLTMzLDcgKzMzLDcgQEAKIAkJc3RydWN0IENvbW1hbmRMaXN0ICpjKTsKIAl2b2lkICgqc2V0X2ludHJfbWFzaykoc3RydWN0IGN0bHJfaW5mbyAqaCwgdW5zaWduZWQgbG9uZyB2YWwpOwogCXVuc2lnbmVkIGxvbmcgKCpmaWZvX2Z1bGwpKHN0cnVjdCBjdGxyX2luZm8gKmgpOwotCXVuc2lnbmVkIGxvbmcgKCppbnRyX3BlbmRpbmcpKHN0cnVjdCBjdGxyX2luZm8gKmgpOworCWJvb2wgKCppbnRyX3BlbmRpbmcpKHN0cnVjdCBjdGxyX2luZm8gKmgpOwogCXVuc2lnbmVkIGxvbmcgKCpjb21tYW5kX2NvbXBsZXRlZCkoc3RydWN0IGN0bHJfaW5mbyAqaCk7CiB9OwogCkBAIC01NSwxOSArNTUsMjAgQEAKIAljaGFyICAgICpwcm9kdWN0X25hbWU7CiAJY2hhcglmaXJtX3Zlcls0XTsgLyogRmlybXdhcmUgdmVyc2lvbiAqLwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCV9fdTMyCWJvYXJkX2lkOworCXUzMglib2FyZF9pZDsKIAl2b2lkIF9faW9tZW0gKnZhZGRyOwogCXVuc2lnbmVkIGxvbmcgcGFkZHI7CiAJaW50IAlucl9jbWRzOyAvKiBOdW1iZXIgb2YgY29tbWFuZHMgYWxsb3dlZCBvbiB0aGlzIGNvbnRyb2xsZXIgKi8KIAlzdHJ1Y3QgQ2ZnVGFibGUgX19pb21lbSAqY2ZndGFibGU7CisJaW50ICAgICBtYXhfc2dfZW50cmllczsKIAlpbnQJaW50ZXJydXB0c19lbmFibGVkOwogCWludAltYWpvcjsKIAlpbnQgCW1heF9jb21tYW5kczsKIAlpbnQJY29tbWFuZHNfb3V0c3RhbmRpbmc7CiAJaW50IAltYXhfb3V0c3RhbmRpbmc7IC8qIERlYnVnICovCiAJaW50CXVzYWdlX2NvdW50OyAgLyogbnVtYmVyIG9mIG9wZW5zIGFsbCBhbGwgbWlub3IgZGV2aWNlcyAqLwotIwlkZWZpbmUgRE9PUkJFTExfSU5UCTAKLSMJZGVmaW5lIFBFUkZfTU9ERV9JTlQJMQorIwlkZWZpbmUgUEVSRl9NT0RFX0lOVAkwCisjCWRlZmluZSBET09SQkVMTF9JTlQJMQogIwlkZWZpbmUgU0lNUExFX01PREVfSU5UCTIKICMJZGVmaW5lIE1FTVFfTU9ERV9JTlQJMwogCXVuc2lnbmVkIGludCBpbnRyWzRdOwpAQCAtOTMsNiArOTQsOSBAQAogCWludAkJCW5yX2ZyZWVzOwogCWludAkJCWJ1c3lfaW5pdGlhbGl6aW5nOwogCWludAkJCWJ1c3lfc2Nhbm5pbmc7CisJaW50CQkJc2Nhbl9maW5pc2hlZDsKKwlzcGlubG9ja190CQlzY2FuX2xvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3QJc2Nhbl93YWl0X3F1ZXVlOwogCXN0cnVjdCBtdXRleAkJYnVzeV9zaHV0dGluZ19kb3duOwogCXN0cnVjdCBsaXN0X2hlYWQJc2Nhbl9saXN0OwogCXN0cnVjdCBjb21wbGV0aW9uCXNjYW5fd2FpdDsKQEAgLTEwMiw2ICsxMDYsMjQgQEAKIAlpbnQgbmRldmljZXM7IC8qIG51bWJlciBvZiB1c2VkIGVsZW1lbnRzIGluIC5kZXZbXSBhcnJheS4gKi8KICNkZWZpbmUgSFBTQV9NQVhfU0NTSV9ERVZTX1BFUl9IQkEgMjU2CiAJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqZGV2W0hQU0FfTUFYX1NDU0lfREVWU19QRVJfSEJBXTsKKwkvKgorCSAqIFBlcmZvcm1hbnQgbW9kZSB0YWJsZXMuCisJICovCisJdTMyIHRyYW5zX3N1cHBvcnQ7CisJdTMyIHRyYW5zX29mZnNldDsKKwlzdHJ1Y3QgVHJhbnNUYWJsZV9zdHJ1Y3QgKnRyYW5zdGFibGU7CisJdW5zaWduZWQgbG9uZyB0cmFuc01ldGhvZDsKKworCS8qCisJICogUGVyZm9ybWFudCBtb2RlIGNvbXBsZXRpb24gYnVmZmVyCisJICovCisJdTY0ICpyZXBseV9wb29sOworCWRtYV9hZGRyX3QgcmVwbHlfcG9vbF9kaGFuZGxlOworCXU2NCAqcmVwbHlfcG9vbF9oZWFkOworCXNpemVfdCByZXBseV9wb29sX3NpemU7CisJdW5zaWduZWQgY2hhciByZXBseV9wb29sX3dyYXBhcm91bmQ7CisJdTMyICpibG9ja0ZldGNoVGFibGU7CisJdW5zaWduZWQgY2hhciAqaGJhX2lucXVpcnlfZGF0YTsKIH07CiAjZGVmaW5lIEhQU0FfQUJPUlRfTVNHIDAKICNkZWZpbmUgSFBTQV9ERVZJQ0VfUkVTRVRfTVNHIDEKQEAgLTE2NCw5ICsxODYsMTYgQEAKICNkZWZpbmUgSFBTQV9GSVJNV0FSRV9SRUFEWQkweGZmZmYwMDAwIC8qIHZhbHVlIGluIHNjcmF0Y2hwYWQgcmVnaXN0ZXIgKi8KIAogI2RlZmluZSBIUFNBX0VSUk9SX0JJVAkJMHgwMgotI2RlZmluZSBIUFNBX1RBR19DT05UQUlOU19JTkRFWCh0YWcpICgodGFnKSAmIDB4MDQpCi0jZGVmaW5lIEhQU0FfVEFHX1RPX0lOREVYKHRhZykgKCh0YWcpID4+IDMpCi0jZGVmaW5lIEhQU0FfVEFHX0RJU0NBUkRfRVJST1JfQklUUyh0YWcpICgodGFnKSAmIH4zKQorCisvKiBQZXJmb3JtYW50IG1vZGUgZmxhZ3MgKi8KKyNkZWZpbmUgU0E1X1BFUkZfSU5UUl9QRU5ESU5HICAgMHgwNAorI2RlZmluZSBTQTVfUEVSRl9JTlRSX09GRiAgICAgICAweDA1CisjZGVmaW5lIFNBNV9PVVREQl9TVEFUVVNfUEVSRl9CSVQgICAgICAgMHgwMQorI2RlZmluZSBTQTVfT1VUREJfQ0xFQVJfUEVSRl9CSVQgICAgICAgIDB4MDEKKyNkZWZpbmUgU0E1X09VVERCX0NMRUFSICAgICAgICAgMHhBMAorI2RlZmluZSBTQTVfT1VUREJfQ0xFQVJfUEVSRl9CSVQgICAgICAgIDB4MDEKKyNkZWZpbmUgU0E1X09VVERCX1NUQVRVUyAgICAgICAgMHg5QworCiAKICNkZWZpbmUgSFBTQV9JTlRSX09OIAkxCiAjZGVmaW5lIEhQU0FfSU5UUl9PRkYJMApAQCAtMTc2LDEwICsyMDUsOCBAQAogc3RhdGljIHZvaWQgU0E1X3N1Ym1pdF9jb21tYW5kKHN0cnVjdCBjdGxyX2luZm8gKmgsCiAJc3RydWN0IENvbW1hbmRMaXN0ICpjKQogewotI2lmZGVmIEhQU0FfREVCVUcKLQkgcHJpbnRrKEtFUk5fV0FSTklORyAiaHBzYTogU2VuZGluZyAleCAtIGRvd24gdG8gY29udHJvbGxlclxuIiwKLQkJYy0+YnVzYWRkcik7Ci0jZW5kaWYgLyogSFBTQV9ERUJVRyAqLworCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgIlNlbmRpbmcgJXgsIHRhZyA9ICV4XG4iLCBjLT5idXNhZGRyLAorCQljLT5IZWFkZXIuVGFnLmxvd2VyKTsKIAl3cml0ZWwoYy0+YnVzYWRkciwgaC0+dmFkZHIgKyBTQTVfUkVRVUVTVF9QT1JUX09GRlNFVCk7CiAJaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmcrKzsKIAlpZiAoaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmcgPiBoLT5tYXhfb3V0c3RhbmRpbmcpCkBAIC0yMDIsNiArMjI5LDUyIEBACiAJCQloLT52YWRkciArIFNBNV9SRVBMWV9JTlRSX01BU0tfT0ZGU0VUKTsKIAl9CiB9CisKK3N0YXRpYyB2b2lkIFNBNV9wZXJmb3JtYW50X2ludHJfbWFzayhzdHJ1Y3QgY3Rscl9pbmZvICpoLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlpZiAodmFsKSB7IC8qIHR1cm4gb24gaW50ZXJydXB0cyAqLworCQloLT5pbnRlcnJ1cHRzX2VuYWJsZWQgPSAxOworCQl3cml0ZWwoMCwgaC0+dmFkZHIgKyBTQTVfUkVQTFlfSU5UUl9NQVNLX09GRlNFVCk7CisJfSBlbHNlIHsKKwkJaC0+aW50ZXJydXB0c19lbmFibGVkID0gMDsKKwkJd3JpdGVsKFNBNV9QRVJGX0lOVFJfT0ZGLAorCQkJaC0+dmFkZHIgKyBTQTVfUkVQTFlfSU5UUl9NQVNLX09GRlNFVCk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBTQTVfcGVyZm9ybWFudF9jb21wbGV0ZWQoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwl1bnNpZ25lZCBsb25nIHJlZ2lzdGVyX3ZhbHVlID0gRklGT19FTVBUWTsKKworCS8qIGZsdXNoIHRoZSBjb250cm9sbGVyIHdyaXRlIG9mIHRoZSByZXBseSBxdWV1ZSBieSByZWFkaW5nCisJICogb3V0Ym91bmQgZG9vcmJlbGwgc3RhdHVzIHJlZ2lzdGVyLgorCSAqLworCXJlZ2lzdGVyX3ZhbHVlID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfT1VUREJfU1RBVFVTKTsKKwkvKiBtc2kgYXV0byBjbGVhcnMgdGhlIGludGVycnVwdCBwZW5kaW5nIGJpdC4gKi8KKwlpZiAoIShoLT5tc2lfdmVjdG9yIHx8IGgtPm1zaXhfdmVjdG9yKSkgeworCQl3cml0ZWwoU0E1X09VVERCX0NMRUFSX1BFUkZfQklULCBoLT52YWRkciArIFNBNV9PVVREQl9DTEVBUik7CisJCS8qIERvIGEgcmVhZCBpbiBvcmRlciB0byBmbHVzaCB0aGUgd3JpdGUgdG8gdGhlIGNvbnRyb2xsZXIKKwkJICogKGFzIHBlciBzcGVjLikKKwkJICovCisJCXJlZ2lzdGVyX3ZhbHVlID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfT1VUREJfU1RBVFVTKTsKKwl9CisKKwlpZiAoKCooaC0+cmVwbHlfcG9vbF9oZWFkKSAmIDEpID09IChoLT5yZXBseV9wb29sX3dyYXBhcm91bmQpKSB7CisJCXJlZ2lzdGVyX3ZhbHVlID0gKihoLT5yZXBseV9wb29sX2hlYWQpOworCQkoaC0+cmVwbHlfcG9vbF9oZWFkKSsrOworCQloLT5jb21tYW5kc19vdXRzdGFuZGluZy0tOworCX0gZWxzZSB7CisJCXJlZ2lzdGVyX3ZhbHVlID0gRklGT19FTVBUWTsKKwl9CisJLyogQ2hlY2sgZm9yIHdyYXBhcm91bmQgKi8KKwlpZiAoaC0+cmVwbHlfcG9vbF9oZWFkID09IChoLT5yZXBseV9wb29sICsgaC0+bWF4X2NvbW1hbmRzKSkgeworCQloLT5yZXBseV9wb29sX2hlYWQgPSBoLT5yZXBseV9wb29sOworCQloLT5yZXBseV9wb29sX3dyYXBhcm91bmQgXj0gMTsKKwl9CisKKwlyZXR1cm4gcmVnaXN0ZXJfdmFsdWU7Cit9CisKIC8qCiAgKiAgUmV0dXJucyB0cnVlIGlmIGZpZm8gaXMgZnVsbC4KICAqCkBAIC0yMjgsMTAgKzMwMSwxMCBAQAogCiAjaWZkZWYgSFBTQV9ERUJVRwogCWlmIChyZWdpc3Rlcl92YWx1ZSAhPSBGSUZPX0VNUFRZKQotCQlwcmludGsoS0VSTl9JTkZPICJocHNhOiAgUmVhZCAlbHggYmFjayBmcm9tIGJvYXJkXG4iLAorCQlkZXZfZGJnKCZoLT5wZGV2LT5kZXYsICJSZWFkICVseCBiYWNrIGZyb20gYm9hcmRcbiIsCiAJCQlyZWdpc3Rlcl92YWx1ZSk7CiAJZWxzZQotCQlwcmludGsoS0VSTl9JTkZPICJocHNhOiAgRklGTyBFbXB0eSByZWFkXG4iKTsKKwkJZGV2X2RiZygmaC0+cGRldi0+ZGV2LCAiaHBzYTogRklGTyBFbXB0eSByZWFkXG4iKTsKICNlbmRpZgogCiAJcmV0dXJuIHJlZ2lzdGVyX3ZhbHVlOwpAQCAtMjM5LDE4ICszMTIsMjggQEAKIC8qCiAgKglSZXR1cm5zIHRydWUgaWYgYW4gaW50ZXJydXB0IGlzIHBlbmRpbmcuLgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBTQTVfaW50cl9wZW5kaW5nKHN0cnVjdCBjdGxyX2luZm8gKmgpCitzdGF0aWMgYm9vbCBTQTVfaW50cl9wZW5kaW5nKHN0cnVjdCBjdGxyX2luZm8gKmgpCiB7CiAJdW5zaWduZWQgbG9uZyByZWdpc3Rlcl92YWx1ZSAgPQogCQlyZWFkbChoLT52YWRkciArIFNBNV9JTlRSX1NUQVRVUyk7Ci0jaWZkZWYgSFBTQV9ERUJVRwotCXByaW50ayhLRVJOX0lORk8gImhwc2E6IGludHJfcGVuZGluZyAlbHhcbiIsIHJlZ2lzdGVyX3ZhbHVlKTsKLSNlbmRpZiAgLyogSFBTQV9ERUJVRyAqLwotCWlmIChyZWdpc3Rlcl92YWx1ZSAmICBTQTVfSU5UUl9QRU5ESU5HKQotCQlyZXR1cm4gIDE7Ci0JcmV0dXJuIDAgOworCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgImludHJfcGVuZGluZyAlbHhcbiIsIHJlZ2lzdGVyX3ZhbHVlKTsKKwlyZXR1cm4gcmVnaXN0ZXJfdmFsdWUgJiBTQTVfSU5UUl9QRU5ESU5HOwogfQogCitzdGF0aWMgYm9vbCBTQTVfcGVyZm9ybWFudF9pbnRyX3BlbmRpbmcoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwl1bnNpZ25lZCBsb25nIHJlZ2lzdGVyX3ZhbHVlID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfSU5UUl9TVEFUVVMpOworCisJaWYgKCFyZWdpc3Rlcl92YWx1ZSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGgtPm1zaV92ZWN0b3IgfHwgaC0+bXNpeF92ZWN0b3IpCisJCXJldHVybiB0cnVlOworCisJLyogUmVhZCBvdXRib3VuZCBkb29yYmVsbCB0byBmbHVzaCAqLworCXJlZ2lzdGVyX3ZhbHVlID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfT1VUREJfU1RBVFVTKTsKKwlyZXR1cm4gcmVnaXN0ZXJfdmFsdWUgJiBTQTVfT1VUREJfU1RBVFVTX1BFUkZfQklUOworfQogCiBzdGF0aWMgc3RydWN0IGFjY2Vzc19tZXRob2QgU0E1X2FjY2VzcyA9IHsKIAlTQTVfc3VibWl0X2NvbW1hbmQsCkBAIC0yNjAsMTQgKzM0MywxOSBAQAogCVNBNV9jb21wbGV0ZWQsCiB9OwogCitzdGF0aWMgc3RydWN0IGFjY2Vzc19tZXRob2QgU0E1X3BlcmZvcm1hbnRfYWNjZXNzID0geworCVNBNV9zdWJtaXRfY29tbWFuZCwKKwlTQTVfcGVyZm9ybWFudF9pbnRyX21hc2ssCisJU0E1X2ZpZm9fZnVsbCwKKwlTQTVfcGVyZm9ybWFudF9pbnRyX3BlbmRpbmcsCisJU0E1X3BlcmZvcm1hbnRfY29tcGxldGVkLAorfTsKKwogc3RydWN0IGJvYXJkX3R5cGUgewotCV9fdTMyCWJvYXJkX2lkOworCXUzMglib2FyZF9pZDsKIAljaGFyCSpwcm9kdWN0X25hbWU7CiAJc3RydWN0IGFjY2Vzc19tZXRob2QgKmFjY2VzczsKIH07CiAKLQotLyogZW5kIG9mIG9sZCBocHNhX3Njc2kuaCBmaWxlICovCi0KICNlbmRpZiAvKiBIUFNBX0ggKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwc2FfY21kLmggYi9kcml2ZXJzL3Njc2kvaHBzYV9jbWQuaAppbmRleCAxMmQ3MTM4Li4zZTBhYmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHBzYV9jbWQuaAorKysgYi9kcml2ZXJzL3Njc2kvaHBzYV9jbWQuaApAQCAtMTAxLDE5ICsxMDEsMjAgQEAKICNkZWZpbmUgQ0ZHVEJMX0FjY0NtZHMgICAgICAgICAgMHgwMDAwMDAwMWwKIAogI2RlZmluZSBDRkdUQkxfVHJhbnNfU2ltcGxlICAgICAweDAwMDAwMDAybAorI2RlZmluZSBDRkdUQkxfVHJhbnNfUGVyZm9ybWFudCAweDAwMDAwMDA0bAogCiAjZGVmaW5lIENGR1RCTF9CdXNUeXBlX1VsdHJhMiAgIDB4MDAwMDAwMDFsCiAjZGVmaW5lIENGR1RCTF9CdXNUeXBlX1VsdHJhMyAgIDB4MDAwMDAwMDJsCiAjZGVmaW5lIENGR1RCTF9CdXNUeXBlX0ZpYnJlMUcgIDB4MDAwMDAxMDBsCiAjZGVmaW5lIENGR1RCTF9CdXNUeXBlX0ZpYnJlMkcgIDB4MDAwMDAyMDBsCiBzdHJ1Y3QgdmFsczMyIHsKLQlfX3UzMiAgIGxvd2VyOwotCV9fdTMyICAgdXBwZXI7CisJdTMyICAgbG93ZXI7CisJdTMyICAgdXBwZXI7CiB9OwogCiB1bmlvbiB1NjRiaXQgewogCXN0cnVjdCB2YWxzMzIgdmFsMzI7Ci0JX191NjQgdmFsOworCXU2NCB2YWw7CiB9OwogCiAvKiBGSVhNRSB0aGlzIGlzIGEgcGVyIGNvbnRyb2xsZXIgdmFsdWUgKGJhcmYhKSAqLwpAQCAtMTI2LDM0ICsxMjcsMzQgQEAKIAogI2RlZmluZSBIUFNBX0lOUVVJUlkgMHgxMgogc3RydWN0IElucXVpcnlEYXRhIHsKLQlfX3U4IGRhdGFfYnl0ZVszNl07CisJdTggZGF0YV9ieXRlWzM2XTsKIH07CiAKICNkZWZpbmUgSFBTQV9SRVBPUlRfTE9HIDB4YzIgICAgLyogUmVwb3J0IExvZ2ljYWwgTFVOcyAqLwogI2RlZmluZSBIUFNBX1JFUE9SVF9QSFlTIDB4YzMgICAvKiBSZXBvcnQgUGh5c2ljYWwgTFVOcyAqLwogc3RydWN0IFJlcG9ydExVTmRhdGEgewotCV9fdTggTFVOTGlzdExlbmd0aFs0XTsKLQlfX3UzMiByZXNlcnZlZDsKLQlfX3U4IExVTltIUFNBX01BWF9MVU5dWzhdOworCXU4IExVTkxpc3RMZW5ndGhbNF07CisJdTMyIHJlc2VydmVkOworCXU4IExVTltIUFNBX01BWF9MVU5dWzhdOwogfTsKIAogc3RydWN0IFJlcG9ydEV4dGVuZGVkTFVOZGF0YSB7Ci0JX191OCBMVU5MaXN0TGVuZ3RoWzRdOwotCV9fdTggZXh0ZW5kZWRfcmVzcG9uc2VfZmxhZzsKLQlfX3U4IHJlc2VydmVkWzNdOwotCV9fdTggTFVOW0hQU0FfTUFYX0xVTl1bMjRdOworCXU4IExVTkxpc3RMZW5ndGhbNF07CisJdTggZXh0ZW5kZWRfcmVzcG9uc2VfZmxhZzsKKwl1OCByZXNlcnZlZFszXTsKKwl1OCBMVU5bSFBTQV9NQVhfTFVOXVsyNF07CiB9OwogCiBzdHJ1Y3QgU2Vuc2VTdWJzeXN0ZW1faW5mbyB7Ci0JX191OCByZXNlcnZlZFszNl07Ci0JX191OCBwb3J0bmFtZVs4XTsKLQlfX3U4IHJlc2VydmVkMVsxMTA4XTsKKwl1OCByZXNlcnZlZFszNl07CisJdTggcG9ydG5hbWVbOF07CisJdTggcmVzZXJ2ZWQxWzExMDhdOwogfTsKIAogI2RlZmluZSBIUFNBX1JFQURfQ0FQQUNJVFkgMHgyNSAvKiBSZWFkIENhcGFjaXR5ICovCiBzdHJ1Y3QgUmVhZENhcGRhdGEgewotCV9fdTggdG90YWxfc2l6ZVs0XTsJLyogVG90YWwgc2l6ZSBpbiBibG9ja3MgKi8KLQlfX3U4IGJsb2NrX3NpemVbNF07CS8qIFNpemUgb2YgYmxvY2tzIGluIGJ5dGVzICovCisJdTggdG90YWxfc2l6ZVs0XTsJLyogVG90YWwgc2l6ZSBpbiBibG9ja3MgKi8KKwl1OCBibG9ja19zaXplWzRdOwkvKiBTaXplIG9mIGJsb2NrcyBpbiBieXRlcyAqLwogfTsKIAogI2lmIDAKQEAgLTE3NCwxMTIgKzE3NSwxMzEgQEAKIC8qIENvbW1hbmQgTGlzdCBTdHJ1Y3R1cmUgKi8KIHVuaW9uIFNDU0kzQWRkciB7CiAJc3RydWN0IHsKLQkJX191OCBEZXY7Ci0JCV9fdTggQnVzOjY7Ci0JCV9fdTggTW9kZToyOyAgICAgICAgLyogYjAwICovCisJCXU4IERldjsKKwkJdTggQnVzOjY7CisJCXU4IE1vZGU6MjsgICAgICAgIC8qIGIwMCAqLwogCX0gUGVyaXBEZXY7CiAJc3RydWN0IHsKLQkJX191OCBEZXZMU0I7Ci0JCV9fdTggRGV2TVNCOjY7Ci0JCV9fdTggTW9kZToyOyAgICAgICAgLyogYjAxICovCisJCXU4IERldkxTQjsKKwkJdTggRGV2TVNCOjY7CisJCXU4IE1vZGU6MjsgICAgICAgIC8qIGIwMSAqLwogCX0gTG9nRGV2OwogCXN0cnVjdCB7Ci0JCV9fdTggRGV2OjU7Ci0JCV9fdTggQnVzOjM7Ci0JCV9fdTggVGFyZzo2OwotCQlfX3U4IE1vZGU6MjsgICAgICAgIC8qIGIxMCAqLworCQl1OCBEZXY6NTsKKwkJdTggQnVzOjM7CisJCXU4IFRhcmc6NjsKKwkJdTggTW9kZToyOyAgICAgICAgLyogYjEwICovCiAJfSBMb2dVbml0OwogfTsKIAogc3RydWN0IFBoeXNEZXZBZGRyIHsKLQlfX3UzMiAgICAgICAgICAgICBUYXJnZXRJZDoyNDsKLQlfX3UzMiAgICAgICAgICAgICBCdXM6NjsKLQlfX3UzMiAgICAgICAgICAgICBNb2RlOjI7CisJdTMyICAgICAgICAgICAgIFRhcmdldElkOjI0OworCXUzMiAgICAgICAgICAgICBCdXM6NjsKKwl1MzIgICAgICAgICAgICAgTW9kZToyOwogCS8qIDIgbGV2ZWwgdGFyZ2V0IGRldmljZSBhZGRyICovCiAJdW5pb24gU0NTSTNBZGRyICBUYXJnZXRbMl07CiB9OwogCiBzdHJ1Y3QgTG9nRGV2QWRkciB7Ci0JX191MzIgICAgICAgICAgICBWb2xJZDozMDsKLQlfX3UzMiAgICAgICAgICAgIE1vZGU6MjsKLQlfX3U4ICAgICAgICAgICAgIHJlc2VydmVkWzRdOworCXUzMiAgICAgICAgICAgIFZvbElkOjMwOworCXUzMiAgICAgICAgICAgIE1vZGU6MjsKKwl1OCAgICAgICAgICAgICByZXNlcnZlZFs0XTsKIH07CiAKIHVuaW9uIExVTkFkZHIgewotCV9fdTggICAgICAgICAgICAgICBMdW5BZGRyQnl0ZXNbOF07CisJdTggICAgICAgICAgICAgICBMdW5BZGRyQnl0ZXNbOF07CiAJdW5pb24gU0NTSTNBZGRyICAgIFNDU0kzTHVuWzRdOwogCXN0cnVjdCBQaHlzRGV2QWRkciBQaHlzRGV2OwogCXN0cnVjdCBMb2dEZXZBZGRyICBMb2dEZXY7CiB9OwogCiBzdHJ1Y3QgQ29tbWFuZExpc3RIZWFkZXIgewotCV9fdTggICAgICAgICAgICAgIFJlcGx5UXVldWU7Ci0JX191OCAgICAgICAgICAgICAgU0dMaXN0OwotCV9fdTE2ICAgICAgICAgICAgIFNHVG90YWw7CisJdTggICAgICAgICAgICAgIFJlcGx5UXVldWU7CisJdTggICAgICAgICAgICAgIFNHTGlzdDsKKwl1MTYgICAgICAgICAgICAgU0dUb3RhbDsKIAlzdHJ1Y3QgdmFsczMyICAgICBUYWc7CiAJdW5pb24gTFVOQWRkciAgICAgTFVOOwogfTsKIAogc3RydWN0IFJlcXVlc3RCbG9jayB7Ci0JX191OCAgIENEQkxlbjsKKwl1OCAgIENEQkxlbjsKIAlzdHJ1Y3QgewotCQlfX3U4IFR5cGU6MzsKLQkJX191OCBBdHRyaWJ1dGU6MzsKLQkJX191OCBEaXJlY3Rpb246MjsKKwkJdTggVHlwZTozOworCQl1OCBBdHRyaWJ1dGU6MzsKKwkJdTggRGlyZWN0aW9uOjI7CiAJfSBUeXBlOwotCV9fdTE2ICBUaW1lb3V0OwotCV9fdTggICBDREJbMTZdOworCXUxNiAgVGltZW91dDsKKwl1OCAgIENEQlsxNl07CiB9OwogCiBzdHJ1Y3QgRXJyRGVzY3JpcHRvciB7CiAJc3RydWN0IHZhbHMzMiBBZGRyOwotCV9fdTMyICBMZW47CisJdTMyICBMZW47CiB9OwogCiBzdHJ1Y3QgU0dEZXNjcmlwdG9yIHsKIAlzdHJ1Y3QgdmFsczMyIEFkZHI7Ci0JX191MzIgIExlbjsKLQlfX3UzMiAgRXh0OworCXUzMiAgTGVuOworCXUzMiAgRXh0OwogfTsKIAogdW5pb24gTW9yZUVyckluZm8gewogCXN0cnVjdCB7Ci0JCV9fdTggIFJlc2VydmVkWzNdOwotCQlfX3U4ICBUeXBlOwotCQlfX3UzMiBFcnJvckluZm87CisJCXU4ICBSZXNlcnZlZFszXTsKKwkJdTggIFR5cGU7CisJCXUzMiBFcnJvckluZm87CiAJfSBDb21tb25fSW5mbzsKIAlzdHJ1Y3QgewotCQlfX3U4ICBSZXNlcnZlZFsyXTsKLQkJX191OCAgb2ZmZW5zZV9zaXplOyAvKiBzaXplIG9mIG9mZmVuZGluZyBlbnRyeSAqLwotCQlfX3U4ICBvZmZlbnNlX251bTsgIC8qIGJ5dGUgIyBvZiBvZmZlbnNlIDAtYmFzZSAqLwotCQlfX3UzMiBvZmZlbnNlX3ZhbHVlOworCQl1OCAgUmVzZXJ2ZWRbMl07CisJCXU4ICBvZmZlbnNlX3NpemU7IC8qIHNpemUgb2Ygb2ZmZW5kaW5nIGVudHJ5ICovCisJCXU4ICBvZmZlbnNlX251bTsgIC8qIGJ5dGUgIyBvZiBvZmZlbnNlIDAtYmFzZSAqLworCQl1MzIgb2ZmZW5zZV92YWx1ZTsKIAl9IEludmFsaWRfQ21kOwogfTsKIHN0cnVjdCBFcnJvckluZm8gewotCV9fdTggICAgICAgICAgICAgICBTY3NpU3RhdHVzOwotCV9fdTggICAgICAgICAgICAgICBTZW5zZUxlbjsKLQlfX3UxNiAgICAgICAgICAgICAgQ29tbWFuZFN0YXR1czsKLQlfX3UzMiAgICAgICAgICAgICAgUmVzaWR1YWxDbnQ7CisJdTggICAgICAgICAgICAgICBTY3NpU3RhdHVzOworCXU4ICAgICAgICAgICAgICAgU2Vuc2VMZW47CisJdTE2ICAgICAgICAgICAgICBDb21tYW5kU3RhdHVzOworCXUzMiAgICAgICAgICAgICAgUmVzaWR1YWxDbnQ7CiAJdW5pb24gTW9yZUVyckluZm8gIE1vcmVFcnJJbmZvOwotCV9fdTggICAgICAgICAgICAgICBTZW5zZUluZm9bU0VOU0VJTkZPQllURVNdOworCXU4ICAgICAgICAgICAgICAgU2Vuc2VJbmZvW1NFTlNFSU5GT0JZVEVTXTsKIH07CiAvKiBDb21tYW5kIHR5cGVzICovCiAjZGVmaW5lIENNRF9JT0NUTF9QRU5EICAweDAxCiAjZGVmaW5lIENNRF9TQ1NJCTB4MDMKIAotc3RydWN0IGN0bHJfaW5mbzsgLyogZGVmaW5lZCBpbiBocHNhLmggKi8KLS8qIFRoZSBzaXplIG9mIHRoaXMgc3RydWN0dXJlIG5lZWRzIHRvIGJlIGRpdmlzaWJsZSBieSA4Ci0gKiBvZCBvbiBhbGwgYXJjaGl0ZWN0dXJlcywgYmVjYXVzZSB0aGUgY29udHJvbGxlciB1c2VzIDIKLSAqIGxvd2VyIGJpdHMgb2YgdGhlIGFkZHJlc3MsIGFuZCB0aGUgZHJpdmVyIHVzZXMgMSBsb3dlcgotICogYml0ICgzIGJpdHMgdG90YWwuKQorLyogVGhpcyBzdHJ1Y3R1cmUgbmVlZHMgdG8gYmUgZGl2aXNpYmxlIGJ5IDMyIGZvciBuZXcKKyAqIGluZGV4aW5nIG1ldGhvZCBhbmQgcGVyZm9ybWFudCBtb2RlLgogICovCisjZGVmaW5lIFBBRDMyIDMyCisjZGVmaW5lIFBBRDY0RElGRiAwCisjZGVmaW5lIFVTRUVYVFJBICgoc2l6ZW9mKHZvaWQgKikgLSA0KS80KQorI2RlZmluZSBQQURTSVpFIChQQUQzMiArIFBBRDY0RElGRiAqIFVTRUVYVFJBKQorCisjZGVmaW5lIERJUkVDVF9MT09LVVBfU0hJRlQgNQorI2RlZmluZSBESVJFQ1RfTE9PS1VQX0JJVCAweDEwCisKKyNkZWZpbmUgSFBTQV9FUlJPUl9CSVQgICAgICAgICAgMHgwMgorc3RydWN0IGN0bHJfaW5mbzsgLyogZGVmaW5lZCBpbiBocHNhLmggKi8KKy8qIFRoZSBzaXplIG9mIHRoaXMgc3RydWN0dXJlIG5lZWRzIHRvIGJlIGRpdmlzaWJsZSBieSAzMgorICogb24gYWxsIGFyY2hpdGVjdHVyZXMgYmVjYXVzZSBsb3cgNSBiaXRzIG9mIHRoZSBhZGRyZXNzZXMKKyAqIGFyZSB1c2VkIGFzIGZvbGxvd3M6CisgKgorICogYml0IDA6IHRvIGRldmljZSwgdXNlZCB0byBpbmRpY2F0ZSAicGVyZm9ybWFudCBtb2RlIiBjb21tYW5kCisgKiAgICAgICAgZnJvbSBkZXZpY2UsIGluZGlkY2F0ZXMgZXJyb3Igc3RhdHVzLgorICogYml0IDEtMzogdG8gZGV2aWNlLCBpbmRpY2F0ZXMgYmxvY2sgZmV0Y2ggdGFibGUgZW50cnkgZm9yCisgKiAgICAgICAgICByZWR1Y2luZyBETUEgaW4gZmV0Y2hpbmcgY29tbWFuZHMgZnJvbSBob3N0IG1lbW9yeS4KKyAqIGJpdCA0OiB1c2VkIHRvIGluZGljYXRlIHdoZXRoZXIgdGFnIGlzICJkaXJlY3QgbG9va3VwIiAoaW5kZXgpLAorICogICAgICAgIG9yIGEgYnVzIGFkZHJlc3MuCisgKi8KKwogc3RydWN0IENvbW1hbmRMaXN0IHsKIAlzdHJ1Y3QgQ29tbWFuZExpc3RIZWFkZXIgSGVhZGVyOwogCXN0cnVjdCBSZXF1ZXN0QmxvY2sgICAgICBSZXF1ZXN0OwogCXN0cnVjdCBFcnJEZXNjcmlwdG9yICAgICBFcnJEZXNjOwogCXN0cnVjdCBTR0Rlc2NyaXB0b3IgICAgICBTR1tNQVhTR0VOVFJJRVNdOwogCS8qIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tbWFuZCAqLwotCV9fdTMyCQkJICAgYnVzYWRkcjsgLyogcGh5c2ljYWwgYWRkciBvZiB0aGlzIHJlY29yZCAqLworCXUzMgkJCSAgIGJ1c2FkZHI7IC8qIHBoeXNpY2FsIGFkZHIgb2YgdGhpcyByZWNvcmQgKi8KIAlzdHJ1Y3QgRXJyb3JJbmZvICplcnJfaW5mbzsgLyogcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIG1lbSAqLwogCXN0cnVjdCBjdGxyX2luZm8JICAgKmg7CiAJaW50CQkJICAgY21kX3R5cGU7CkBAIC0yOTEsMzUgKzMxMSw2MyBAQAogCXN0cnVjdCBjb21wbGV0aW9uICp3YWl0aW5nOwogCWludAkgcmV0cnlfY291bnQ7CiAJdm9pZCAgICpzY3NpX2NtZDsKKworLyogb24gNjQgYml0IGFyY2hpdGVjdHVyZXMsIHRvIGdldCB0aGlzIHRvIGJlIDMyLWJ5dGUtYWxpZ25lZAorICogaXQgc28gaGFwcGVucyB3ZSBuZWVkIG5vIHBhZGRpbmcsIG9uIDMyIGJpdCBzeXN0ZW1zLAorICogd2UgbmVlZCA4IGJ5dGVzIG9mIHBhZGRpbmcuICAgVGhpcyBkb2VzIHRoYXQuCisgKi8KKyNkZWZpbmUgQ09NTUFORExJU1RfUEFEICgoOCAtIHNpemVvZihsb25nKSkvNCAqIDgpCisJdTggcGFkW0NPTU1BTkRMSVNUX1BBRF07CisKIH07CiAKIC8qIENvbmZpZ3VyYXRpb24gVGFibGUgU3RydWN0dXJlICovCiBzdHJ1Y3QgSG9zdFdyaXRlIHsKLQlfX3UzMiBUcmFuc3BvcnRSZXF1ZXN0OwotCV9fdTMyIFJlc2VydmVkOwotCV9fdTMyIENvYWxJbnREZWxheTsKLQlfX3UzMiBDb2FsSW50Q291bnQ7CisJdTMyIFRyYW5zcG9ydFJlcXVlc3Q7CisJdTMyIFJlc2VydmVkOworCXUzMiBDb2FsSW50RGVsYXk7CisJdTMyIENvYWxJbnRDb3VudDsKIH07CiAKKyNkZWZpbmUgU0lNUExFX01PREUgICAgIDB4MDIKKyNkZWZpbmUgUEVSRk9STUFOVF9NT0RFIDB4MDQKKyNkZWZpbmUgTUVNUV9NT0RFICAgICAgIDB4MDgKKwogc3RydWN0IENmZ1RhYmxlIHsKLQlfX3U4ICAgICAgICAgICAgIFNpZ25hdHVyZVs0XTsKLQlfX3UzMiAgICAgICAgICAgIFNwZWNWYWxlbmNlOwotCV9fdTMyICAgICAgICAgICAgVHJhbnNwb3J0U3VwcG9ydDsKLQlfX3UzMiAgICAgICAgICAgIFRyYW5zcG9ydEFjdGl2ZTsKLQlzdHJ1Y3QgSG9zdFdyaXRlIEhvc3RXcml0ZTsKLQlfX3UzMiAgICAgICAgICAgIENtZHNPdXRNYXg7Ci0JX191MzIgICAgICAgICAgICBCdXNUeXBlczsKLQlfX3UzMiAgICAgICAgICAgIFJlc2VydmVkOwotCV9fdTggICAgICAgICAgICAgU2VydmVyTmFtZVsxNl07Ci0JX191MzIgICAgICAgICAgICBIZWFydEJlYXQ7Ci0JX191MzIgICAgICAgICAgICBTQ1NJX1ByZWZldGNoOworCXU4ICAgICAgICAgICAgU2lnbmF0dXJlWzRdOworCXUzMgkJU3BlY1ZhbGVuY2U7CisJdTMyICAgICAgICAgICBUcmFuc3BvcnRTdXBwb3J0OworCXUzMiAgICAgICAgICAgVHJhbnNwb3J0QWN0aXZlOworCXN0cnVjdCAJCUhvc3RXcml0ZSBIb3N0V3JpdGU7CisJdTMyICAgICAgICAgICBDbWRzT3V0TWF4OworCXUzMiAgICAgICAgICAgQnVzVHlwZXM7CisJdTMyICAgICAgICAgICBUcmFuc01ldGhvZE9mZnNldDsKKwl1OCAgICAgICAgICAgIFNlcnZlck5hbWVbMTZdOworCXUzMiAgICAgICAgICAgSGVhcnRCZWF0OworCXUzMiAgICAgICAgICAgU0NTSV9QcmVmZXRjaDsKKwl1MzIJIAlNYXhTY2F0dGVyR2F0aGVyRWxlbWVudHM7CisJdTMyCQlNYXhMb2dpY2FsVW5pdHM7CisJdTMyCQlNYXhQaHlzaWNhbERldmljZXM7CisJdTMyCQlNYXhQaHlzaWNhbERyaXZlc1BlckxvZ2ljYWxVbml0OworCXUzMgkJTWF4UGVyZm9ybWFudE1vZGVDb21tYW5kczsKK307CisKKyNkZWZpbmUgTlVNX0JMT0NLRkVUQ0hfRU5UUklFUyA4CitzdHJ1Y3QgVHJhbnNUYWJsZV9zdHJ1Y3QgeworCXUzMiAgICAgICAgICAgIEJsb2NrRmV0Y2hbTlVNX0JMT0NLRkVUQ0hfRU5UUklFU107CisJdTMyICAgICAgICAgICAgUmVwUVNpemU7CisJdTMyICAgICAgICAgICAgUmVwUUNvdW50OworCXUzMiAgICAgICAgICAgIFJlcFFDdHJBZGRyTG93MzI7CisJdTMyICAgICAgICAgICAgUmVwUUN0ckFkZHJIaWdoMzI7CisJdTMyICAgICAgICAgICAgUmVwUUFkZHIwTG93MzI7CisJdTMyICAgICAgICAgICAgUmVwUUFkZHIwSGlnaDMyOwogfTsKIAogc3RydWN0IGhwc2FfcGNpX2luZm8gewogCXVuc2lnbmVkIGNoYXIJYnVzOwogCXVuc2lnbmVkIGNoYXIJZGV2X2ZuOwogCXVuc2lnbmVkIHNob3J0CWRvbWFpbjsKLQlfX3UzMgkJYm9hcmRfaWQ7CisJdTMyCQlib2FyZF9pZDsKIH07CiAKICNwcmFnbWEgcGFjaygpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtbWNhLmMgYi9kcml2ZXJzL3Njc2kvaWJtbWNhLmMKaW5kZXggOWMxZTZhNS4uOWE0YjY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libW1jYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9pYm1tY2EuYwpAQCAtMjMzNiw3ICsyMzM2LDcgQEAKIAljaGFyICpjdXIgPSBzdHI7CiAJaW50IGkgPSAxOwogCi0Jd2hpbGUgKGN1ciAmJiBpc2RpZ2l0KCpjdXIpICYmIGkgPD0gSU1fTUFYX0hPU1RTKSB7CisJd2hpbGUgKGN1ciAmJiBpc2RpZ2l0KCpjdXIpICYmIGkgPCBJTV9NQVhfSE9TVFMpIHsKIAkJaW50c1tpKytdID0gc2ltcGxlX3N0cnRvdWwoY3VyLCBOVUxMLCAwKTsKIAkJaWYgKChjdXIgPSBzdHJjaHIoY3VyLCAnLCcpKSAhPSBOVUxMKQogCQkJY3VyKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKaW5kZXggODdiNTM2YS4uNzMyZjZkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYwpAQCAtNDE5NSw3ICs0MTk1LDcgQEAKIAkJaWYgKHRndC0+c2VydmljZV9wYXJtcy5jbGFzczNfcGFybXNbMF0gJiAweDgwMDAwMDAwKQogCQkJcnBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzIHw9IEZDX0NPU19DTEFTUzM7CiAJCWlmIChycG9ydC0+cnFzdF9xKQotCQkJYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhycG9ydC0+cnFzdF9xLCAxKTsKKwkJCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocnBvcnQtPnJxc3RfcSwgMSk7CiAJfSBlbHNlCiAJCXRndF9kYmcodGd0LCAicnBvcnQgYWRkIGZhaWxlZFxuIik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh2aG9zdC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CkBAIC00NjY5LDcgKzQ2NjksNyBAQAogCX0KIAogCWlmIChzaG9zdF90b19mY19ob3N0KHNob3N0KS0+cnFzdF9xKQotCQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHNob3N0X3RvX2ZjX2hvc3Qoc2hvc3QpLT5ycXN0X3EsIDEpOworCQlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHNob3N0X3RvX2ZjX2hvc3Qoc2hvc3QpLT5ycXN0X3EsIDEpOwogCWRldl9zZXRfZHJ2ZGF0YShkZXYsIHZob3N0KTsKIAlzcGluX2xvY2soJmlibXZmY19kcml2ZXJfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmdmhvc3QtPnF1ZXVlLCAmaWJtdmZjX2hlYWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwppbmRleCBlNDc1Yjc5Li5lM2ExOGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwpAQCAtNDAsNyArNDAsNyBAQAogICogKENSUSksIHdoaWNoIGlzIGp1c3QgYSBidWZmZXIgb2YgMTYgYnl0ZSBlbnRyaWVzIGluIHRoZSByZWNlaXZlcidzIAogICogU2VuZGVycyBjYW5ub3QgYWNjZXNzIHRoZSBidWZmZXIgZGlyZWN0bHksIGJ1dCBzZW5kIG1lc3NhZ2VzIGJ5CiAgKiBtYWtpbmcgYSBoeXBlcnZpc29yIGNhbGwgYW5kIHBhc3NpbmcgaW4gdGhlIDE2IGJ5dGVzLiAgVGhlIGh5cGVydmlzb3IKLSAqIHB1dHMgdGhlIG1lc3NhZ2UgaW4gdGhlIG5leHQgMTYgYnl0ZSBzcGFjZSBpbiByb3VuZC1yb2JiaW4gZmFzaGlvbiwKKyAqIHB1dHMgdGhlIG1lc3NhZ2UgaW4gdGhlIG5leHQgMTYgYnl0ZSBzcGFjZSBpbiByb3VuZC1yb2JpbiBmYXNoaW9uLAogICogdHVybnMgb24gdGhlIGhpZ2ggb3JkZXIgYml0IG9mIHRoZSBtZXNzYWdlICh0aGUgdmFsaWQgYml0KSwgYW5kIAogICogZ2VuZXJhdGVzIGFuIGludGVycnVwdCB0byB0aGUgcmVjZWl2ZXIgKGlmIGludGVycnVwdHMgYXJlIHR1cm5lZCBvbi4pIAogICogVGhlIHJlY2VpdmVyIGp1c3QgdHVybnMgb2ZmIHRoZSB2YWxpZCBiaXQgd2hlbiB0aGV5IGhhdmUgY29waWVkIG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwci5jIGIvZHJpdmVycy9zY3NpL2lwci5jCmluZGV4IDllNTJkMTYuLjAzMmYwZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHIuYworKysgYi9kcml2ZXJzL3Njc2kvaXByLmMKQEAgLTM2NzQsNyArMzY3NCw3IEBACiAJCWlmIChpcHJfaXNfdnNldF9kZXZpY2UocmVzKSkgewogCQkJYmxrX3F1ZXVlX3JxX3RpbWVvdXQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKIAkJCQkJICAgICBJUFJfVlNFVF9SV19USU1FT1VUKTsKLQkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBJUFJfVlNFVF9NQVhfU0VDVE9SUyk7CisJCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgSVBSX1ZTRVRfTUFYX1NFQ1RPUlMpOwogCQl9CiAJCWlmIChpcHJfaXNfdnNldF9kZXZpY2UocmVzKSB8fCBpcHJfaXNfc2NzaV9kaXNrKHJlcykpCiAJCQlzZGV2LT5hbGxvd19yZXN0YXJ0ID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwppbmRleCA1MTdkYTNmLi44YTg5YmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCkBAIC01ODQsOSArNTg0LDEwIEBACiAJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNjc2lfdGNwX2Nvbm4gKnRjcF9jb25uID0gY29ubi0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNjc2lfc3dfdGNwX2Nvbm4gKnRjcF9zd19jb25uID0gdGNwX2Nvbm4tPmRkX2RhdGE7CisJc3RydWN0IHNvY2tldCAqc29jayA9IHRjcF9zd19jb25uLT5zb2NrOwogCiAJLyogdXNlcnNwYWNlIG1heSBoYXZlIGdvb2ZlZCB1cCBhbmQgbm90IGJvdW5kIHVzICovCi0JaWYgKCF0Y3Bfc3dfY29ubi0+c29jaykKKwlpZiAoIXNvY2spCiAJCXJldHVybjsKIAkvKgogCSAqIE1ha2Ugc3VyZSBvdXIgcmVjdiBzaWRlIGlzIHN0b3BwZWQuCkBAIC01OTcsNiArNTk4LDExIEBACiAJc2V0X2JpdChJU0NTSV9TVVNQRU5EX0JJVCwgJmNvbm4tPnN1c3BlbmRfcngpOwogCXdyaXRlX3VubG9ja19iaCgmdGNwX3N3X2Nvbm4tPnNvY2stPnNrLT5za19jYWxsYmFja19sb2NrKTsKIAorCWlmIChzb2NrLT5zay0+c2tfc2xlZXAgJiYgd2FpdHF1ZXVlX2FjdGl2ZShzb2NrLT5zay0+c2tfc2xlZXApKSB7CisJCXNvY2stPnNrLT5za19lcnIgPSBFSU87CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZShzb2NrLT5zay0+c2tfc2xlZXApOworCX0KKwogCWlzY3NpX2Nvbm5fc3RvcChjbHNfY29ubiwgZmxhZyk7CiAJaXNjc2lfc3dfdGNwX3JlbGVhc2VfY29ubihjb25uKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKaW5kZXggYzI4YTcxMi4uNzAzZWI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKQEAgLTE5MTksMTAgKzE5MTksMTEgQEAKIHN0YXRpYyBlbnVtIGJsa19laF90aW1lcl9yZXR1cm4gaXNjc2lfZWhfY21kX3RpbWVkX291dChzdHJ1Y3Qgc2NzaV9jbW5kICpzYykKIHsKIAllbnVtIGJsa19laF90aW1lcl9yZXR1cm4gcmMgPSBCTEtfRUhfTk9UX0hBTkRMRUQ7Ci0Jc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2sgPSBOVUxMOworCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrID0gTlVMTCwgKnJ1bm5pbmdfdGFzazsKIAlzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uOwogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uOwogCXN0cnVjdCBpc2NzaV9jb25uICpjb25uOworCWludCBpOwogCiAJY2xzX3Nlc3Npb24gPSBzdGFyZ2V0X3RvX3Nlc3Npb24oc2NzaV90YXJnZXQoc2MtPmRldmljZSkpOwogCXNlc3Npb24gPSBjbHNfc2Vzc2lvbi0+ZGRfZGF0YTsKQEAgLTE5NDcsOCArMTk0OCwxNSBAQAogCX0KIAogCXRhc2sgPSAoc3RydWN0IGlzY3NpX3Rhc2sgKilzYy0+U0NwLnB0cjsKLQlpZiAoIXRhc2spCisJaWYgKCF0YXNrKSB7CisJCS8qCisJCSAqIFJhY2VkIHdpdGggY29tcGxldGlvbi4gSnVzdCByZXNldCB0aW1lciwgYW5kIGxldCBpdAorCQkgKiBjb21wbGV0ZSBub3JtYWxseQorCQkgKi8KKwkJcmMgPSBCTEtfRUhfUkVTRVRfVElNRVI7CiAJCWdvdG8gZG9uZTsKKwl9CisKIAkvKgogCSAqIElmIHdlIGhhdmUgc2VudCAoYXQgbGVhc3QgcXVldWVkIHRvIHRoZSBuZXR3b3JrIGxheWVyKSBhIHBkdSBvcgogCSAqIHJlY3ZkIG9uZSBmb3IgdGhlIHRhc2sgc2luY2UgdGhlIGxhc3QgdGltZW91dCBhc2sgZm9yCkBAIC0xOTU2LDEwICsxOTY0LDEwIEBACiAJICogd2UgY2FuIGNoZWNrIGlmIGl0IGlzIHRoZSB0YXNrIG9yIGNvbm5lY3Rpb24gd2hlbiB3ZSBzZW5kIHRoZQogCSAqIG5vcCBhcyBhIHBpbmcuCiAJICovCi0JaWYgKHRpbWVfYWZ0ZXJfZXEodGFzay0+bGFzdF94ZmVyLCB0YXNrLT5sYXN0X3RpbWVvdXQpKSB7CisJaWYgKHRpbWVfYWZ0ZXIodGFzay0+bGFzdF94ZmVyLCB0YXNrLT5sYXN0X3RpbWVvdXQpKSB7CiAJCUlTQ1NJX0RCR19FSChzZXNzaW9uLCAiQ29tbWFuZCBtYWtpbmcgcHJvZ3Jlc3MuIEFza2luZyAiCiAJCQkgICAgICJzY3NpLW1sIGZvciBtb3JlIHRpbWUgdG8gY29tcGxldGUuICIKLQkJCSAgICAgIkxhc3QgZGF0YSByZWN2IGF0ICVsdS4gTGFzdCB0aW1lb3V0IHdhcyBhdCAiCisJCQkgICAgICJMYXN0IGRhdGEgeGZlciBhdCAlbHUuIExhc3QgdGltZW91dCB3YXMgYXQgIgogCQkJICAgICAiJWx1XG4uIiwgdGFzay0+bGFzdF94ZmVyLCB0YXNrLT5sYXN0X3RpbWVvdXQpOwogCQl0YXNrLT5oYXZlX2NoZWNrZWRfY29ubiA9IGZhbHNlOwogCQlyYyA9IEJMS19FSF9SRVNFVF9USU1FUjsKQEAgLTE5NzcsNiArMTk4NSw0MyBAQAogCQlnb3RvIGRvbmU7CiAJfQogCisJZm9yIChpID0gMDsgaSA8IGNvbm4tPnNlc3Npb24tPmNtZHNfbWF4OyBpKyspIHsKKwkJcnVubmluZ190YXNrID0gY29ubi0+c2Vzc2lvbi0+Y21kc1tpXTsKKwkJaWYgKCFydW5uaW5nX3Rhc2stPnNjIHx8IHJ1bm5pbmdfdGFzayA9PSB0YXNrIHx8CisJCSAgICAgcnVubmluZ190YXNrLT5zdGF0ZSAhPSBJU0NTSV9UQVNLX1JVTk5JTkcpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBPbmx5IGNoZWNrIGlmIGNtZHMgc3RhcnRlZCBiZWZvcmUgdGhpcyBvbmUgaGF2ZSBtYWRlCisJCSAqIHByb2dyZXNzLCBvciB0aGlzIGNvdWxkIG5ldmVyIGZhaWwKKwkJICovCisJCWlmICh0aW1lX2FmdGVyKHJ1bm5pbmdfdGFzay0+c2MtPmppZmZpZXNfYXRfYWxsb2MsCisJCQkgICAgICAgdGFzay0+c2MtPmppZmZpZXNfYXRfYWxsb2MpKQorCQkJY29udGludWU7CisKKwkJaWYgKHRpbWVfYWZ0ZXIocnVubmluZ190YXNrLT5sYXN0X3hmZXIsIHRhc2stPmxhc3RfdGltZW91dCkpIHsKKwkJCS8qCisJCQkgKiBUaGlzIHRhc2sgaGFzIG5vdCBtYWRlIHByb2dyZXNzLCBidXQgYSB0YXNrCisJCQkgKiBzdGFydGVkIGJlZm9yZSB1cyBoYXMgdHJhbnNmZXJyZWQgZGF0YSBzaW5jZQorCQkJICogd2Ugc3RhcnRlZC9sYXN0LWNoZWNrZWQuIFdlIGNvdWxkIGJlIHF1ZXVlaW5nCisJCQkgKiB0b28gbWFueSB0YXNrcyBvciB0aGUgTFUgaXMgYmFkLgorCQkJICoKKwkJCSAqIElmIHRoZSBkZXZpY2UgaXMgYmFkIHRoZSBjbWRzIGFoZWFkIG9mIHVzIG9uCisJCQkgKiBvdGhlciBkZXZzIHdpbGwgY29tcGxldGUsIGFuZCB0aGlzIGxvb3Agd2lsbAorCQkJICogZXZlbnR1YWxseSBmYWlsIHN0YXJ0aW5nIHRoZSBzY3NpIGVoLgorCQkJICovCisJCQlJU0NTSV9EQkdfRUgoc2Vzc2lvbiwgIkNvbW1hbmQgaGFzIG5vdCBtYWRlIHByb2dyZXNzICIKKwkJCQkgICAgICJidXQgY29tbWFuZHMgYWhlYWQgb2YgaXQgaGF2ZS4gIgorCQkJCSAgICAgIkFza2luZyBzY3NpLW1sIGZvciBtb3JlIHRpbWUgdG8gIgorCQkJCSAgICAgImNvbXBsZXRlLiBPdXIgbGFzdCB4ZmVyIHZzIHJ1bm5pbmcgdGFzayAiCisJCQkJICAgICAibGFzdCB4ZmVyICVsdS8lbHUuIExhc3QgY2hlY2sgJWx1LlxuIiwKKwkJCQkgICAgIHRhc2stPmxhc3RfeGZlciwgcnVubmluZ190YXNrLT5sYXN0X3hmZXIsCisJCQkJICAgICB0YXNrLT5sYXN0X3RpbWVvdXQpOworCQkJcmMgPSBCTEtfRUhfUkVTRVRfVElNRVI7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKIAkvKiBBc3N1bWVzIG5vcCB0aW1lb3V0IGlzIHNob3J0ZXIgdGhhbiBzY3NpIGNtZCB0aW1lb3V0ICovCiAJaWYgKHRhc2stPmhhdmVfY2hlY2tlZF9jb25uKQogCQlnb3RvIGRvbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGlic3JwLmMgYi9kcml2ZXJzL3Njc2kvbGlic3JwLmMKaW5kZXggYWIxOWIzYi4uMjI3NzUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYnNycC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJzcnAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBTQ1NJIFJEQU0gUHJvdG9jb2wgbGliIGZ1bmN0aW9ucworICogU0NTSSBSRE1BIFByb3RvY29sIGxpYiBmdW5jdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRlVKSVRBIFRvbW9ub3JpIDx0b21vZkBhY20ub3JnPgogICoKQEAgLTMyOCw3ICszMjgsNyBAQAogCWludCBvZmZzZXQsIGVyciA9IDA7CiAJdTggZm9ybWF0OwogCi0Jb2Zmc2V0ID0gY21kLT5hZGRfY2RiX2xlbiAqIDQ7CisJb2Zmc2V0ID0gY21kLT5hZGRfY2RiX2xlbiAmIH4zOwogCiAJZGlyID0gc3JwX2NtZF9kaXJlY3Rpb24oY21kKTsKIAlpZiAoZGlyID09IERNQV9GUk9NX0RFVklDRSkKQEAgLTM2Niw3ICszNjYsNyBAQAogewogCXN0cnVjdCBzcnBfZGlyZWN0X2J1ZiAqbWQ7CiAJc3RydWN0IHNycF9pbmRpcmVjdF9idWYgKmlkOwotCWludCBsZW4gPSAwLCBvZmZzZXQgPSBjbWQtPmFkZF9jZGJfbGVuICogNDsKKwlpbnQgbGVuID0gMCwgb2Zmc2V0ID0gY21kLT5hZGRfY2RiX2xlbiAmIH4zOwogCXU4IGZtdDsKIAogCWlmIChkaXIgPT0gRE1BX1RPX0RFVklDRSkKQEAgLTQ0MCw2ICs0NDAsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3JwX2NtZF9xdWV1ZSk7CiAKLU1PRFVMRV9ERVNDUklQVElPTigiU0NTSSBSREFNIFByb3RvY29sIGxpYiBmdW5jdGlvbnMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiU0NTSSBSRE1BIFByb3RvY29sIGxpYiBmdW5jdGlvbnMiKTsKIE1PRFVMRV9BVVRIT1IoIkZVSklUQSBUb21vbm9yaSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCmluZGV4IDFjYzIzYTYuLjg0YjY5NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQ2hyaXN0b3BoIEhlbGx3aWcgICAgICAgICAgICAgICoKQEAgLTMxNSw2ICszMTUsOSBAQAogI2RlZmluZSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJCTB4ODAwMDAgIC8qIE5lZWRzIHRvIGhhdmUgaXRzIHZwaSByZWdpc3RlcmVkICovCiAjZGVmaW5lIEZDX1JTQ05fREVGRVJSRUQJMHgxMDAwMDAgLyogQSBkZWZlcnJlZCBSU0NOIGJlaW5nIHByb2Nlc3NlZCAqLwogI2RlZmluZSBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSSAweDIwMDAwMCAvKiBOZWVkIHRvIElOSVRfVlBJIGJlZm9yZSBGRElTQyAqLworI2RlZmluZSBGQ19WUE9SVF9DVkxfUkNWRAkweDQwMDAwMCAvKiBWTGluayBmYWlsZWQgZHVlIHRvIENWTAkgKi8KKyNkZWZpbmUgRkNfVkZJX1JFR0lTVEVSRUQJMHg4MDAwMDAgLyogVkZJIGlzIHJlZ2lzdGVyZWQgKi8KKyNkZWZpbmUgRkNfRkRJU0NfQ09NUExFVEVECTB4MTAwMDAwMC8qIEZESVNDIGNvbXBsZXRlZCAqLwogCiAJdWludDMyX3QgY3RfZmxhZ3M7CiAjZGVmaW5lIEZDX0NUX1JGRl9JRAkJMHgxCSAvKiBSRkZfSUQgYWNjZXB0ZWQgYnkgc3dpdGNoICovCkBAIC00NDgsNiArNDUxLDggQEAKIAl1aW50MzJfdCBjdHh0X2lkOwogCXVpbnQzMl90IFNJRDsKIAl1aW50MzJfdCBveGlkOworCXVpbnQzMl90IGZsYWdzOworI2RlZmluZSBVTlNPTF9WQUxJRAkweDAwMDAwMDAxCiB9OwogCiBzdHJ1Y3QgbHBmY19oYmEgewpAQCAtNDk5LDYgKzUwNCwxMCBAQAogCQkoc3RydWN0IGxwZmNfaGJhICopOwogCXZvaWQgKCpscGZjX3N0b3BfcG9ydCkKIAkJKHN0cnVjdCBscGZjX2hiYSAqKTsKKwlpbnQgKCpscGZjX2hiYV9pbml0X2xpbmspCisJCShzdHJ1Y3QgbHBmY19oYmEgKik7CisJaW50ICgqbHBmY19oYmFfZG93bl9saW5rKQorCQkoc3RydWN0IGxwZmNfaGJhICopOwogCiAKIAkvKiBTTEk0IHNwZWNpZmljIEhCQSBkYXRhIHN0cnVjdHVyZSAqLwpAQCAtNjEzLDYgKzYyMiw3IEBACiAJdWludDMyX3QgY2ZnX2VuYWJsZV9iZzsKIAl1aW50MzJfdCBjZmdfbG9nX3ZlcmJvc2U7CiAJdWludDMyX3QgY2ZnX2Flcl9zdXBwb3J0OworCXVpbnQzMl90IGNmZ19zdXBwcmVzc19saW5rX3VwOwogCiAJbHBmY192cGRfdCB2cGQ7CQkvKiB2aXRhbCBwcm9kdWN0IGRhdGEgKi8KIApAQCAtNzkwLDcgKzgwMCw3IEBACiAJdWludDE2X3Qgdmxhbl9pZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZjZl9jb25uX3JlY19saXN0OwogCi0Jc3RydWN0IG11dGV4IGN0X2V2ZW50X211dGV4OyAvKiBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gY3RfZXZfd2FpdGVycyAqLworCXNwaW5sb2NrX3QgY3RfZXZfbG9jazsgLyogc3luY2hyb25pemUgYWNjZXNzIHRvIGN0X2V2X3dhaXRlcnMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGN0X2V2X3dhaXRlcnM7CiAJc3RydWN0IHVuc29sX3Jjdl9jdF9jdHggY3RfY3R4WzY0XTsKIAl1aW50MzJfdCBjdHhfaWR4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwppbmRleCA5MTU0MmY3Li5jOTkyZTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwpAQCAtNDgyLDYgKzQ4Miw0MSBAQAogfQogCiAvKioKKyAqIGxwZmNfbGlua19zdGF0ZV9zdG9yZSAtIFRyYW5zaXRpb24gdGhlIGxpbmtfc3RhdGUgb24gYW4gSEJBIHBvcnQKKyAqIEBkZXY6IGNsYXNzIGRldmljZSB0aGF0IGlzIGNvbnZlcnRlZCBpbnRvIGEgU2NzaV9ob3N0LgorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGUsIG5vdCB1c2VkLgorICogQGJ1Zjogb25lIG9yIG1vcmUgbHBmY19wb2xsaW5nX2ZsYWdzIHZhbHVlcy4KKyAqIEBjb3VudDogbm90IHVzZWQuCisgKgorICogUmV0dXJuczoKKyAqIC1FSU5WQUwgaWYgdGhlIGJ1ZmZlciBpcyBub3QgInVwIiBvciAiZG93biIKKyAqIHJldHVybiBmcm9tIGxpbmsgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIGlmIG5vbi16ZXJvCisgKiBsZW5ndGggb2YgdGhlIGJ1ZiBvbiBzdWNjZXNzCisgKiovCitzdGF0aWMgc3NpemVfdAorbHBmY19saW5rX3N0YXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOworCisJaW50IHN0YXR1cyA9IC1FSU5WQUw7CisKKwlpZiAoKHN0cm5jbXAoYnVmLCAidXAiLCBzaXplb2YoInVwIikgLSAxKSA9PSAwKSAmJgorCQkJKHBoYmEtPmxpbmtfc3RhdGUgPT0gTFBGQ19MSU5LX0RPV04pKQorCQlzdGF0dXMgPSBwaGJhLT5scGZjX2hiYV9pbml0X2xpbmsocGhiYSk7CisJZWxzZSBpZiAoKHN0cm5jbXAoYnVmLCAiZG93biIsIHNpemVvZigiZG93biIpIC0gMSkgPT0gMCkgJiYKKwkJCShwaGJhLT5saW5rX3N0YXRlID49IExQRkNfTElOS19VUCkpCisJCXN0YXR1cyA9IHBoYmEtPmxwZmNfaGJhX2Rvd25fbGluayhwaGJhKTsKKworCWlmIChzdGF0dXMgPT0gMCkKKwkJcmV0dXJuIHN0cmxlbihidWYpOworCWVsc2UKKwkJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCiAgKiBscGZjX251bV9kaXNjb3ZlcmVkX3BvcnRzX3Nob3cgLSBSZXR1cm4gc3VtIG9mIG1hcHBlZCBhbmQgdW5tYXBwZWQgdnBvcnRzCiAgKiBAZGV2OiBjbGFzcyBkZXZpY2UgdGhhdCBpcyBjb252ZXJ0ZWQgaW50byBhIFNjc2lfaG9zdC4KICAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlLCBub3QgdXNlZC4KQEAgLTEyMTksNyArMTI1NCw3IEBACiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTtcCiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTtcCiAJc3RydWN0IGxwZmNfaGJhICAgKnBoYmEgPSB2cG9ydC0+cGhiYTtcCi0JaW50IHZhbCA9IDA7XAorCXVpbnQgdmFsID0gMDtcCiAJdmFsID0gcGhiYS0+Y2ZnXyMjYXR0cjtcCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsXAogCQkJcGhiYS0+Y2ZnXyMjYXR0cik7XApAQCAtMTI0Nyw3ICsxMjgyLDcgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpO1wKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKikgc2hvc3QtPmhvc3RkYXRhO1wKIAlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhO1wKLQlpbnQgdmFsID0gMDtcCisJdWludCB2YWwgPSAwO1wKIAl2YWwgPSBwaGJhLT5jZmdfIyNhdHRyO1wKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlI3hcbiIsXAogCQkJcGhiYS0+Y2ZnXyMjYXR0cik7XApAQCAtMTI3NCw3ICsxMzA5LDcgQEAKICAqKi8KICNkZWZpbmUgbHBmY19wYXJhbV9pbml0KGF0dHIsIGRlZmF1bHQsIG1pbnZhbCwgbWF4dmFsKQlcCiBzdGF0aWMgaW50IFwKLWxwZmNfIyNhdHRyIyNfaW5pdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGludCB2YWwpIFwKK2xwZmNfIyNhdHRyIyNfaW5pdChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQgdmFsKSBcCiB7IFwKIAlpZiAodmFsID49IG1pbnZhbCAmJiB2YWwgPD0gbWF4dmFsKSB7XAogCQlwaGJhLT5jZmdfIyNhdHRyID0gdmFsO1wKQEAgLTEzMDksNyArMTM0NCw3IEBACiAgKiovCiAjZGVmaW5lIGxwZmNfcGFyYW1fc2V0KGF0dHIsIGRlZmF1bHQsIG1pbnZhbCwgbWF4dmFsKQlcCiBzdGF0aWMgaW50IFwKLWxwZmNfIyNhdHRyIyNfc2V0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50IHZhbCkgXAorbHBmY18jI2F0dHIjI19zZXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50IHZhbCkgXAogeyBcCiAJaWYgKHZhbCA+PSBtaW52YWwgJiYgdmFsIDw9IG1heHZhbCkge1wKIAkJcGhiYS0+Y2ZnXyMjYXR0ciA9IHZhbDtcCkBAIC0xMzUwLDcgKzEzODUsNyBAQAogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7XAogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7XAogCXN0cnVjdCBscGZjX2hiYSAgICpwaGJhID0gdnBvcnQtPnBoYmE7XAotCWludCB2YWw9MDtcCisJdWludCB2YWwgPSAwO1wKIAlpZiAoIWlzZGlnaXQoYnVmWzBdKSlcCiAJCXJldHVybiAtRUlOVkFMO1wKIAlpZiAoc3NjYW5mKGJ1ZiwgIiVpIiwgJnZhbCkgIT0gMSlcCkBAIC0xMzgyLDcgKzE0MTcsNyBAQAogeyBcCiAJc3RydWN0IFNjc2lfSG9zdCAgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTtcCiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopIHNob3N0LT5ob3N0ZGF0YTtcCi0JaW50IHZhbCA9IDA7XAorCXVpbnQgdmFsID0gMDtcCiAJdmFsID0gdnBvcnQtPmNmZ18jI2F0dHI7XAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCB2cG9ydC0+Y2ZnXyMjYXR0cik7XAogfQpAQCAtMTQwOSw3ICsxNDQ0LDcgQEAKIHsgXAogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7XAogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7XAotCWludCB2YWwgPSAwO1wKKwl1aW50IHZhbCA9IDA7XAogCXZhbCA9IHZwb3J0LT5jZmdfIyNhdHRyO1wKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlI3hcbiIsIHZwb3J0LT5jZmdfIyNhdHRyKTtcCiB9CkBAIC0xNDM0LDcgKzE0NjksNyBAQAogICoqLwogI2RlZmluZSBscGZjX3Zwb3J0X3BhcmFtX2luaXQoYXR0ciwgZGVmYXVsdCwgbWludmFsLCBtYXh2YWwpCVwKIHN0YXRpYyBpbnQgXAotbHBmY18jI2F0dHIjI19pbml0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgaW50IHZhbCkgXAorbHBmY18jI2F0dHIjI19pbml0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgdWludCB2YWwpIFwKIHsgXAogCWlmICh2YWwgPj0gbWludmFsICYmIHZhbCA8PSBtYXh2YWwpIHtcCiAJCXZwb3J0LT5jZmdfIyNhdHRyID0gdmFsO1wKQEAgLTE0NjYsNyArMTUwMSw3IEBACiAgKiovCiAjZGVmaW5lIGxwZmNfdnBvcnRfcGFyYW1fc2V0KGF0dHIsIGRlZmF1bHQsIG1pbnZhbCwgbWF4dmFsKQlcCiBzdGF0aWMgaW50IFwKLWxwZmNfIyNhdHRyIyNfc2V0KHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgaW50IHZhbCkgXAorbHBmY18jI2F0dHIjI19zZXQoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LCB1aW50IHZhbCkgXAogeyBcCiAJaWYgKHZhbCA+PSBtaW52YWwgJiYgdmFsIDw9IG1heHZhbCkge1wKIAkJdnBvcnQtPmNmZ18jI2F0dHIgPSB2YWw7XApAQCAtMTUwMiw3ICsxNTM3LDcgQEAKIHsgXAogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7XAogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKSBzaG9zdC0+aG9zdGRhdGE7XAotCWludCB2YWw9MDtcCisJdWludCB2YWwgPSAwO1wKIAlpZiAoIWlzZGlnaXQoYnVmWzBdKSlcCiAJCXJldHVybiAtRUlOVkFMO1wKIAlpZiAoc3NjYW5mKGJ1ZiwgIiVpIiwgJnZhbCkgIT0gMSlcCkBAIC0xNTE1LDIyICsxNTUwLDIyIEBACiAKIAogI2RlZmluZSBMUEZDX0FUVFIobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCkKIAogI2RlZmluZSBMUEZDX0FUVFJfUihuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsLCBkZXNjKSBcCi1zdGF0aWMgaW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKLW1vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgaW50LCAwKTtcCitzdGF0aWMgdWludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCittb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIHVpbnQsIDApO1wKIE1PRFVMRV9QQVJNX0RFU0MobHBmY18jI25hbWUsIGRlc2MpO1wKIGxwZmNfcGFyYW1fc2hvdyhuYW1lKVwKIGxwZmNfcGFyYW1faW5pdChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKVwKIHN0YXRpYyBERVZJQ0VfQVRUUihscGZjXyMjbmFtZSwgU19JUlVHTyAsIGxwZmNfIyNuYW1lIyNfc2hvdywgTlVMTCkKIAogI2RlZmluZSBMUEZDX0FUVFJfUlcobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3BhcmFtX3Nob3cobmFtZSlcCiBscGZjX3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCkBAIC0xNTQwLDE2ICsxNTc1LDE2IEBACiAJCSAgIGxwZmNfIyNuYW1lIyNfc2hvdywgbHBmY18jI25hbWUjI19zdG9yZSkKIAogI2RlZmluZSBMUEZDX0FUVFJfSEVYX1IobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3BhcmFtX2hleF9zaG93KG5hbWUpXAogbHBmY19wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpXAogc3RhdGljIERFVklDRV9BVFRSKGxwZmNfIyNuYW1lLCBTX0lSVUdPICwgbHBmY18jI25hbWUjI19zaG93LCBOVUxMKQogCiAjZGVmaW5lIExQRkNfQVRUUl9IRVhfUlcobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3BhcmFtX2hleF9zaG93KG5hbWUpXAogbHBmY19wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpXApAQCAtMTU1OSwyMiArMTU5NCwyMiBAQAogCQkgICBscGZjXyMjbmFtZSMjX3Nob3csIGxwZmNfIyNuYW1lIyNfc3RvcmUpCiAKICNkZWZpbmUgTFBGQ19WUE9SVF9BVFRSKG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwsIGRlc2MpIFwKLXN0YXRpYyBpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAotbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCBpbnQsIDApO1wKK3N0YXRpYyB1aW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKK21vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgdWludCwgMCk7XAogTU9EVUxFX1BBUk1fREVTQyhscGZjXyMjbmFtZSwgZGVzYyk7XAogbHBmY192cG9ydF9wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpCiAKICNkZWZpbmUgTFBGQ19WUE9SVF9BVFRSX1IobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbCwgZGVzYykgXAotc3RhdGljIGludCBscGZjXyMjbmFtZSA9IGRlZnZhbDtcCi1tb2R1bGVfcGFyYW0obHBmY18jI25hbWUsIGludCwgMCk7XAorc3RhdGljIHVpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAorbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCB1aW50LCAwKTtcCiBNT0RVTEVfUEFSTV9ERVNDKGxwZmNfIyNuYW1lLCBkZXNjKTtcCiBscGZjX3Zwb3J0X3BhcmFtX3Nob3cobmFtZSlcCiBscGZjX3Zwb3J0X3BhcmFtX2luaXQobmFtZSwgZGVmdmFsLCBtaW52YWwsIG1heHZhbClcCiBzdGF0aWMgREVWSUNFX0FUVFIobHBmY18jI25hbWUsIFNfSVJVR08gLCBscGZjXyMjbmFtZSMjX3Nob3csIE5VTEwpCiAKICNkZWZpbmUgTFBGQ19WUE9SVF9BVFRSX1JXKG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwsIGRlc2MpIFwKLXN0YXRpYyBpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAotbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCBpbnQsIDApO1wKK3N0YXRpYyB1aW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKK21vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgdWludCwgMCk7XAogTU9EVUxFX1BBUk1fREVTQyhscGZjXyMjbmFtZSwgZGVzYyk7XAogbHBmY192cG9ydF9wYXJhbV9zaG93KG5hbWUpXAogbHBmY192cG9ydF9wYXJhbV9pbml0KG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwpXApAQCAtMTU4NCwxNiArMTYxOSwxNiBAQAogCQkgICBscGZjXyMjbmFtZSMjX3Nob3csIGxwZmNfIyNuYW1lIyNfc3RvcmUpCiAKICNkZWZpbmUgTFBGQ19WUE9SVF9BVFRSX0hFWF9SKG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwsIGRlc2MpIFwKLXN0YXRpYyBpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAotbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCBpbnQsIDApO1wKK3N0YXRpYyB1aW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKK21vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgdWludCwgMCk7XAogTU9EVUxFX1BBUk1fREVTQyhscGZjXyMjbmFtZSwgZGVzYyk7XAogbHBmY192cG9ydF9wYXJhbV9oZXhfc2hvdyhuYW1lKVwKIGxwZmNfdnBvcnRfcGFyYW1faW5pdChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKVwKIHN0YXRpYyBERVZJQ0VfQVRUUihscGZjXyMjbmFtZSwgU19JUlVHTyAsIGxwZmNfIyNuYW1lIyNfc2hvdywgTlVMTCkKIAogI2RlZmluZSBMUEZDX1ZQT1JUX0FUVFJfSEVYX1JXKG5hbWUsIGRlZnZhbCwgbWludmFsLCBtYXh2YWwsIGRlc2MpIFwKLXN0YXRpYyBpbnQgbHBmY18jI25hbWUgPSBkZWZ2YWw7XAotbW9kdWxlX3BhcmFtKGxwZmNfIyNuYW1lLCBpbnQsIDApO1wKK3N0YXRpYyB1aW50IGxwZmNfIyNuYW1lID0gZGVmdmFsO1wKK21vZHVsZV9wYXJhbShscGZjXyMjbmFtZSwgdWludCwgMCk7XAogTU9EVUxFX1BBUk1fREVTQyhscGZjXyMjbmFtZSwgZGVzYyk7XAogbHBmY192cG9ydF9wYXJhbV9oZXhfc2hvdyhuYW1lKVwKIGxwZmNfdnBvcnRfcGFyYW1faW5pdChuYW1lLCBkZWZ2YWwsIG1pbnZhbCwgbWF4dmFsKVwKQEAgLTE2MTQsNyArMTY0OSw4IEBACiBzdGF0aWMgREVWSUNFX0FUVFIocG9ydG51bSwgU19JUlVHTywgbHBmY192cG9ydG51bV9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihmd3JldiwgU19JUlVHTywgbHBmY19md3Jldl9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihoZHcsIFNfSVJVR08sIGxwZmNfaGR3X3Nob3csIE5VTEwpOwotc3RhdGljIERFVklDRV9BVFRSKGxpbmtfc3RhdGUsIFNfSVJVR08sIGxwZmNfbGlua19zdGF0ZV9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihsaW5rX3N0YXRlLCBTX0lSVUdPIHwgU19JV1VTUiwgbHBmY19saW5rX3N0YXRlX3Nob3csCisJCWxwZmNfbGlua19zdGF0ZV9zdG9yZSk7CiBzdGF0aWMgREVWSUNFX0FUVFIob3B0aW9uX3JvbV92ZXJzaW9uLCBTX0lSVUdPLAogCQkgICBscGZjX29wdGlvbl9yb21fdmVyc2lvbl9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihudW1fZGlzY292ZXJlZF9wb3J0cywgU19JUlVHTywKQEAgLTE4OTcsNiArMTkzMywxNSBAQAogCQkJIGxwZmNfZW5hYmxlX25waXZfc2hvdywgTlVMTCk7CiAKIC8qCisjIGxwZmNfc3VwcHJlc3NfbGlua191cDogIEJyaW5nIGxpbmsgdXAgYXQgaW5pdGlhbGl6YXRpb24KKyMgICAgICAgICAgICAweDAgID0gYnJpbmcgbGluayB1cCAoaXNzdWUgTUJYX0lOSVRfTElOSykKKyMgICAgICAgICAgICAweDEgID0gZG8gTk9UIGJyaW5nIGxpbmsgdXAgYXQgaW5pdGlhbGl6YXRpb24oTUJYX0lOSVRfTElOSykKKyMgICAgICAgICAgICAweDIgID0gbmV2ZXIgYnJpbmcgdXAgbGluaworIyBEZWZhdWx0IHZhbHVlIGlzIDAuCisqLworTFBGQ19BVFRSX1Ioc3VwcHJlc3NfbGlua191cCwgMCwgMCwgMiwgIlN1cHByZXNzIExpbmsgVXAgYXQgaW5pdGlhbGl6YXRpb24iKTsKKworLyoKICMgbHBmY19ub2Rldl90bW86IElmIHNldCwgaXQgd2lsbCBob2xkIGFsbCBJL08gZXJyb3JzIG9uIGRldmljZXMgdGhhdCBkaXNhcHBlYXIKICMgdW50aWwgdGhlIHRpbWVyIGV4cGlyZXMuIFZhbHVlIHJhbmdlIGlzIFswLDI1NV0uIERlZmF1bHQgdmFsdWUgaXMgMzAuCiAqLwpAQCAtMzExNCwxMiArMzE1OSwxMiBAQAogLyoKICMgbHBmY191c2VfbXNpOiBVc2UgTVNJIChNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMpIGluIHN5c3RlbXMgdGhhdAogIwkJc3VwcG9ydCB0aGlzIGZlYXR1cmUKLSMgICAgICAgMCAgPSBNU0kgZGlzYWJsZWQgKGRlZmF1bHQpCisjICAgICAgIDAgID0gTVNJIGRpc2FibGVkCiAjICAgICAgIDEgID0gTVNJIGVuYWJsZWQKLSMgICAgICAgMiAgPSBNU0ktWCBlbmFibGVkCi0jIFZhbHVlIHJhbmdlIGlzIFswLDJdLiBEZWZhdWx0IHZhbHVlIGlzIDAuCisjICAgICAgIDIgID0gTVNJLVggZW5hYmxlZCAoZGVmYXVsdCkKKyMgVmFsdWUgcmFuZ2UgaXMgWzAsMl0uIERlZmF1bHQgdmFsdWUgaXMgMi4KICovCi1MUEZDX0FUVFJfUih1c2VfbXNpLCAwLCAwLCAyLCAiVXNlIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0cyAoMSkgb3IgIgorTFBGQ19BVFRSX1IodXNlX21zaSwgMiwgMCwgMiwgIlVzZSBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgKDEpIG9yICIKIAkgICAgIk1TSS1YICgyKSwgaWYgcG9zc2libGUiKTsKIAogLyoKQEAgLTMyNzgsNiArMzMyMyw3IEBACiAJJmRldl9hdHRyX2xwZmNfcHJvdF9zZ19zZWdfY250LAogCSZkZXZfYXR0cl9scGZjX2Flcl9zdXBwb3J0LAogCSZkZXZfYXR0cl9scGZjX2Flcl9zdGF0ZV9jbGVhbnVwLAorCSZkZXZfYXR0cl9scGZjX3N1cHByZXNzX2xpbmtfdXAsCiAJTlVMTCwKIH07CiAKQEAgLTQ0NTYsNyArNDUwMiw3IEBACiAJbHBmY19oYmFfcXVldWVfZGVwdGhfaW5pdChwaGJhLCBscGZjX2hiYV9xdWV1ZV9kZXB0aCk7CiAJbHBmY19oYmFfbG9nX3ZlcmJvc2VfaW5pdChwaGJhLCBscGZjX2xvZ192ZXJib3NlKTsKIAlscGZjX2Flcl9zdXBwb3J0X2luaXQocGhiYSwgbHBmY19hZXJfc3VwcG9ydCk7Ci0KKwlscGZjX3N1cHByZXNzX2xpbmtfdXBfaW5pdChwaGJhLCBscGZjX3N1cHByZXNzX2xpbmtfdXApOwogCXJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmMKaW5kZXggYTVkOTA0OC4uZjNmMWJmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CkBAIC0zMyw2ICszNCw3IEBACiAjaW5jbHVkZSAibHBmY19zbGkuaCIKICNpbmNsdWRlICJscGZjX3NsaTQuaCIKICNpbmNsdWRlICJscGZjX25sLmgiCisjaW5jbHVkZSAibHBmY19ic2cuaCIKICNpbmNsdWRlICJscGZjX2Rpc2MuaCIKICNpbmNsdWRlICJscGZjX3Njc2kuaCIKICNpbmNsdWRlICJscGZjLmgiCkBAIC00MSwxNCArNDMsMTgzIEBACiAjaW5jbHVkZSAibHBmY192cG9ydC5oIgogI2luY2x1ZGUgImxwZmNfdmVyc2lvbi5oIgogCitzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlzdHJ1Y3Qga3JlZiBrcmVmOworCXdhaXRfcXVldWVfaGVhZF90IHdxOworCisJLyogRXZlbnQgdHlwZSBhbmQgd2FpdGVyIGlkZW50aWZpZXJzICovCisJdWludDMyX3QgdHlwZV9tYXNrOworCXVpbnQzMl90IHJlcV9pZDsKKwl1aW50MzJfdCByZWdfaWQ7CisKKwkvKiBuZXh0IHR3byBmbGFncyBhcmUgaGVyZSBmb3IgdGhlIGF1dG8tZGVsZXRlIGxvZ2ljICovCisJdW5zaWduZWQgbG9uZyB3YWl0X3RpbWVfc3RhbXA7CisJaW50IHdhaXRpbmc7CisKKwkvKiBzZWVuIGFuZCBub3Qgc2VlbiBldmVudHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50c190b19nZXQ7CisJc3RydWN0IGxpc3RfaGVhZCBldmVudHNfdG9fc2VlOworCisJLyogam9iIHdhaXRpbmcgZm9yIHRoaXMgZXZlbnQgdG8gZmluaXNoICovCisJc3RydWN0IGZjX2JzZ19qb2IgKnNldF9qb2I7Cit9OworCitzdHJ1Y3QgbHBmY19ic2dfaW9jYiB7CisJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxOworCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NicTsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKmJtcDsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKworCS8qIGpvYiB3YWl0aW5nIGZvciB0aGlzIGlvY2IgdG8gZmluaXNoICovCisJc3RydWN0IGZjX2JzZ19qb2IgKnNldF9qb2I7Cit9OworCitzdHJ1Y3QgbHBmY19ic2dfbWJveCB7CisJTFBGQ19NQk9YUV90ICpwbWJveHE7CisJTUFJTEJPWF90ICptYjsKKworCS8qIGpvYiB3YWl0aW5nIGZvciB0aGlzIG1ib3ggY29tbWFuZCB0byBmaW5pc2ggKi8KKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqc2V0X2pvYjsKK307CisKKyNkZWZpbmUgVFlQRV9FVlQgCTEKKyNkZWZpbmUgVFlQRV9JT0NCCTIKKyNkZWZpbmUgVFlQRV9NQk9YCTMKK3N0cnVjdCBic2dfam9iX2RhdGEgeworCXVpbnQzMl90IHR5cGU7CisJdW5pb24geworCQlzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dDsKKwkJc3RydWN0IGxwZmNfYnNnX2lvY2IgaW9jYjsKKwkJc3RydWN0IGxwZmNfYnNnX21ib3ggbWJveDsKKwl9IGNvbnRleHRfdW47Cit9OworCitzdHJ1Y3QgZXZlbnRfZGF0YSB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXVpbnQzMl90IHR5cGU7CisJdWludDMyX3QgaW1tZWRfZGF0OworCXZvaWQgKmRhdGE7CisJdWludDMyX3QgbGVuOworfTsKKworI2RlZmluZSBCVUZfU1pfNEsgNDA5NgorI2RlZmluZSBTTElfQ1RfRUxYX0xPT1BCQUNLIDB4MTAKKworZW51bSBFTFhfTE9PUEJBQ0tfQ01EIHsKKwlFTFhfTE9PUEJBQ0tfWFJJX1NFVFVQLAorCUVMWF9MT09QQkFDS19EQVRBLAorfTsKKworI2RlZmluZSBFTFhfTE9PUEJBQ0tfSEVBREVSX1NaIFwKKwkoc2l6ZV90KSgmKChzdHJ1Y3QgbHBmY19zbGlfY3RfcmVxdWVzdCAqKU5VTEwpLT51bikKKworc3RydWN0IGxwZmNfZG1hYnVmZXh0IHsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgZG1hOworCXVpbnQzMl90IHNpemU7CisJdWludDMyX3QgZmxhZzsKK307CisKIC8qKgotICogbHBmY19ic2dfcnBvcnRfY3QgLSBzZW5kIGEgQ1QgY29tbWFuZCBmcm9tIGEgYnNnIHJlcXVlc3QKLSAqIEBqb2I6IGZjX2JzZ19qb2IgdG8gaGFuZGxlCi0gKi8KLXN0YXRpYyBpbnQKLWxwZmNfYnNnX3Jwb3J0X2N0KHN0cnVjdCBmY19ic2dfam9iICpqb2IpCisgKiBscGZjX2JzZ19zZW5kX21nbXRfY21kX2NtcCAtIGxwZmNfYnNnX3NlbmRfbWdtdF9jbWQncyBjb21wbGV0aW9uIGhhbmRsZXIKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBjbWRpb2NicTogUG9pbnRlciB0byBjb21tYW5kIGlvY2IuCisgKiBAcnNwaW9jYnE6IFBvaW50ZXIgdG8gcmVzcG9uc2UgaW9jYi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIGlvY2JzIGlzc3VlZCB1c2luZworICogbHBmY19ic2dfc2VuZF9tZ210X2NtZCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlCisgKiByaW5nIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gd2l0aG91dCBhbnkgbG9jayBoZWxkLiBUaGlzIGZ1bmN0aW9uCisgKiBjYW4gYmUgY2FsbGVkIGZyb20gYm90aCB3b3JrZXIgdGhyZWFkIGNvbnRleHQgYW5kIGludGVycnVwdAorICogY29udGV4dC4gVGhpcyBmdW5jdGlvbiBhbHNvIGNhbiBiZSBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZCB3aGljaAorICogY2xlYW5zIHVwIHRoZSBTTEkgbGF5ZXIgb2JqZWN0cy4KKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzcG9uc2UgaW9jYiB0byB0aGUKKyAqIHJlc3BvbnNlIGlvY2IgbWVtb3J5IG9iamVjdCBwcm92aWRlZCBieSB0aGUgY2FsbGVyIG9mCisgKiBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQgYW5kIHRoZW4gd2FrZXMgdXAgdGhlIHRocmVhZCB3aGljaAorICogc2xlZXBzIGZvciB0aGUgaW9jYiBjb21wbGV0aW9uLgorICoqLworc3RhdGljIHZvaWQKK2xwZmNfYnNnX3NlbmRfbWdtdF9jbWRfY21wKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwkJCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicSwKKwkJCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NicSkKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGpvYi0+c2hvc3Q7CisJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CisJc3RydWN0IGJzZ19qb2JfZGF0YSAqZGRfZGF0YTsKKwlzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iOworCUlPQ0JfdCAqcnNwOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqYm1wOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCXN0cnVjdCBscGZjX2JzZ19pb2NiICppb2NiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJZGRfZGF0YSA9IGNtZGlvY2JxLT5jb250ZXh0MTsKKwlpZiAoIWRkX2RhdGEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJaW9jYiA9ICZkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2I7CisJam9iID0gaW9jYi0+c2V0X2pvYjsKKwlqb2ItPmRkX2RhdGEgPSBOVUxMOyAvKiBzbyB0aW1lb3V0IGhhbmRsZXIgZG9lcyBub3QgcmVwbHkgKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCWNtZGlvY2JxLT5pb2NiX2ZsYWcgfD0gTFBGQ19JT19XQUtFOworCWlmIChjbWRpb2NicS0+Y29udGV4dDIgJiYgcnNwaW9jYnEpCisJCW1lbWNweSgmKChzdHJ1Y3QgbHBmY19pb2NicSAqKWNtZGlvY2JxLT5jb250ZXh0MiktPmlvY2IsCisJCSAgICAgICAmcnNwaW9jYnEtPmlvY2IsIHNpemVvZihJT0NCX3QpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCisJYm1wID0gaW9jYi0+Ym1wOworCXJzcGlvY2JxID0gaW9jYi0+cnNwaW9jYnE7CisJcnNwID0gJnJzcGlvY2JxLT5pb2NiOworCW5kbHAgPSBpb2NiLT5uZGxwOworCisJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJICAgICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCQkgICAgIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisKKwlpZiAocnNwLT51bHBTdGF0dXMpIHsKKwkJaWYgKHJzcC0+dWxwU3RhdHVzID09IElPU1RBVF9MT0NBTF9SRUpFQ1QpIHsKKwkJCXN3aXRjaCAocnNwLT51bi51bHBXb3JkWzRdICYgMHhmZikgeworCQkJY2FzZSBJT0VSUl9TRVFVRU5DRV9USU1FT1VUOgorCQkJCXJjID0gLUVUSU1FRE9VVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgSU9FUlJfSU5WQUxJRF9SUEk6CisJCQkJcmMgPSAtRUZBVUxUOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyYyA9IC1FQUNDRVM7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZQorCQkJcmMgPSAtRUFDQ0VTOworCX0gZWxzZQorCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQkJcnNwLT51bi5nZW5yZXE2NC5iZGwuYmRlU2l6ZTsKKworCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIGJtcC0+dmlydCwgYm1wLT5waHlzKTsKKwlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIHJzcGlvY2JxKTsKKwlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGNtZGlvY2JxKTsKKwlscGZjX25scF9wdXQobmRscCk7CisJa2ZyZWUoYm1wKTsKKwlrZnJlZShkZF9kYXRhKTsKKwkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCS8qIGNvbXBsZXRlIHRoZSBqb2IgYmFjayB0byB1c2Vyc3BhY2UgKi8KKwlqb2ItPmpvYl9kb25lKGpvYik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCXJldHVybjsKK30KKworLyoqCisgKiBscGZjX2JzZ19zZW5kX21nbXRfY21kIC0gc2VuZCBhIENUIGNvbW1hbmQgZnJvbSBhIGJzZyByZXF1ZXN0CisgKiBAam9iOiBmY19ic2dfam9iIHRvIGhhbmRsZQorICoqLworc3RhdGljIGludAorbHBmY19ic2dfc2VuZF9tZ210X2NtZChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQorewogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOwogCXN0cnVjdCBscGZjX3Jwb3J0X2RhdGEgKnJkYXRhID0gam9iLT5ycG9ydC0+ZGRfZGF0YTsKQEAgLTY1LDU3ICsyMzYsNjAgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnZWwgPSBOVUxMOwogCWludCBudW1iZGU7CiAJZG1hX2FkZHJfdCBidXNhZGRyOworCXN0cnVjdCBic2dfam9iX2RhdGEgKmRkX2RhdGE7CisJdWludDMyX3QgY3JlZ192YWw7CiAJaW50IHJjID0gMDsKIAogCS8qIGluIGNhc2Ugbm8gZGF0YSBpcyB0cmFuc2ZlcnJlZCAqLwogCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CiAKKwkvKiBhbGxvY2F0ZSBvdXIgYnNnIHRyYWNraW5nIHN0cnVjdHVyZSAqLworCWRkX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYnNnX2pvYl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZF9kYXRhKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI3MzMgRmFpbGVkIGFsbG9jYXRpb24gb2YgZGRfZGF0YVxuIik7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBub19kZF9kYXRhOworCX0KKwogCWlmICghbHBmY19ubHBfZ2V0KG5kbHApKSB7Ci0JCWpvYi0+cmVwbHktPnJlc3VsdCA9IC1FTk9ERVY7Ci0JCXJldHVybiAwOworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gbm9fbmRscDsKKwl9CisKKwlibXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbHBmY19kbWFidWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJtcCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9uZGxwOwogCX0KIAogCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9FTFNfU05EX01BU0spIHsKIAkJcmMgPSAtRU5PREVWOwotCQlnb3RvIGZyZWVfbmRscF9leGl0OworCQlnb3RvIGZyZWVfYm1wOwogCX0KIAotCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJY21kaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CiAJaWYgKCFjbWRpb2NicSkgewogCQlyYyA9IC1FTk9NRU07Ci0JCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkJZ290byBmcmVlX25kbHBfZXhpdDsKKwkJZ290byBmcmVlX2JtcDsKIAl9Ci0JY21kID0gJmNtZGlvY2JxLT5pb2NiOwogCisJY21kID0gJmNtZGlvY2JxLT5pb2NiOwogCXJzcGlvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHBoYmEpOwogCWlmICghcnNwaW9jYnEpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGZyZWVfY21kaW9jYnE7CiAJfQotCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAogCXJzcCA9ICZyc3Bpb2NicS0+aW9jYjsKLQotCWJtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX2RtYWJ1ZiksIEdGUF9LRVJORUwpOwotCWlmICghYm1wKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKLQkJZ290byBmcmVlX3JzcGlvY2JxOwotCX0KLQotCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJYm1wLT52aXJ0ID0gbHBmY19tYnVmX2FsbG9jKHBoYmEsIDAsICZibXAtPnBoeXMpOwogCWlmICghYm1wLT52aXJ0KSB7CiAJCXJjID0gLUVOT01FTTsKLQkJZ290byBmcmVlX2JtcDsKKwkJZ290byBmcmVlX3JzcGlvY2JxOwogCX0KLQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAKIAlJTklUX0xJU1RfSEVBRCgmYm1wLT5saXN0KTsKIAlicGwgPSAoc3RydWN0IHVscF9iZGU2NCAqKSBibXAtPnZpcnQ7Ci0KIAlyZXF1ZXN0X25zZWcgPSBwY2lfbWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKIAkJCQkgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CiAJZm9yX2VhY2hfc2coam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwgc2dlbCwgcmVxdWVzdF9uc2VnLCBudW1iZGUpIHsKQEAgLTE1Nyw3OCArMzMxLDE1MiBAQAogCWNtZC0+dWxwQ29udGV4dCA9IG5kbHAtPm5scF9ycGk7CiAJY21kLT51bHBPd25lciA9IE9XTl9DSElQOwogCWNtZGlvY2JxLT52cG9ydCA9IHBoYmEtPnBwb3J0OwotCWNtZGlvY2JxLT5jb250ZXh0MSA9IE5VTEw7Ci0JY21kaW9jYnEtPmNvbnRleHQyID0gTlVMTDsKKwljbWRpb2NicS0+Y29udGV4dDMgPSBibXA7CiAJY21kaW9jYnEtPmlvY2JfZmxhZyB8PSBMUEZDX0lPX0xJQkRGQzsKLQogCXRpbWVvdXQgPSBwaGJhLT5mY19yYXRvdiAqIDI7Ci0Jam9iLT5kZF9kYXRhID0gY21kaW9jYnE7CisJY21kLT51bHBUaW1lb3V0ID0gdGltZW91dDsKIAotCXJjID0gbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0KHBoYmEsIExQRkNfRUxTX1JJTkcsIGNtZGlvY2JxLCByc3Bpb2NicSwKLQkJCQkJdGltZW91dCArIExQRkNfRFJWUl9USU1FT1VUKTsKKwljbWRpb2NicS0+aW9jYl9jbXBsID0gbHBmY19ic2dfc2VuZF9tZ210X2NtZF9jbXA7CisJY21kaW9jYnEtPmNvbnRleHQxID0gZGRfZGF0YTsKKwljbWRpb2NicS0+Y29udGV4dDIgPSByc3Bpb2NicTsKKwlkZF9kYXRhLT50eXBlID0gVFlQRV9JT0NCOworCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5jbWRpb2NicSA9IGNtZGlvY2JxOworCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5yc3Bpb2NicSA9IHJzcGlvY2JxOworCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5zZXRfam9iID0gam9iOworCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5ibXAgPSBibXA7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLm5kbHAgPSBuZGxwOwogCi0JaWYgKHJjICE9IElPQ0JfVElNRURPVVQpIHsKLQkJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKLQkJCSAgICAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKLQkJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCi0JCQkgICAgIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKHBoYmEtPmNmZ19wb2xsICYgRElTQUJMRV9GQ1BfUklOR19JTlQpIHsKKwkJY3JlZ192YWwgPSByZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOworCQljcmVnX3ZhbCB8PSAoSENfUjBJTlRfRU5BIDw8IExQRkNfRkNQX1JJTkcpOworCQl3cml0ZWwoY3JlZ192YWwsIHBoYmEtPkhDcmVnYWRkcik7CisJCXJlYWRsKHBoYmEtPkhDcmVnYWRkcik7IC8qIGZsdXNoICovCiAJfQogCi0JaWYgKHJjID09IElPQ0JfVElNRURPVVQpIHsKLQkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7Ci0JCXJjID0gLUVBQ0NFUzsKLQkJZ290byBmcmVlX25kbHBfZXhpdDsKLQl9CisJcmMgPSBscGZjX3NsaV9pc3N1ZV9pb2NiKHBoYmEsIExQRkNfRUxTX1JJTkcsIGNtZGlvY2JxLCAwKTsKIAotCWlmIChyYyAhPSBJT0NCX1NVQ0NFU1MpIHsKLQkJcmMgPSAtRUFDQ0VTOwotCQlnb3RvIGZyZWVfb3V0ZG1wOwotCX0KKwlpZiAocmMgPT0gSU9DQl9TVUNDRVNTKQorCQlyZXR1cm4gMDsgLyogZG9uZSBmb3Igbm93ICovCiAKLQlpZiAocnNwLT51bHBTdGF0dXMpIHsKLQkJaWYgKHJzcC0+dWxwU3RhdHVzID09IElPU1RBVF9MT0NBTF9SRUpFQ1QpIHsKLQkJCXN3aXRjaCAocnNwLT51bi51bHBXb3JkWzRdICYgMHhmZikgewotCQkJY2FzZSBJT0VSUl9TRVFVRU5DRV9USU1FT1VUOgotCQkJCXJjID0gLUVUSU1FRE9VVDsKLQkJCQlicmVhazsKLQkJCWNhc2UgSU9FUlJfSU5WQUxJRF9SUEk6Ci0JCQkJcmMgPSAtRUZBVUxUOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlyYyA9IC1FQUNDRVM7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlnb3RvIGZyZWVfb3V0ZG1wOwotCQl9Ci0JfSBlbHNlCi0JCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9Ci0JCQlyc3AtPnVuLmdlbnJlcTY0LmJkbC5iZGVTaXplOworCS8qIGlvY2IgZmFpbGVkIHNvIGNsZWFudXAgKi8KKwlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQkgICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJCSAgICAgam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKIAotZnJlZV9vdXRkbXA6Ci0Jc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAlscGZjX21idWZfZnJlZShwaGJhLCBibXAtPnZpcnQsIGJtcC0+cGh5cyk7Ci1mcmVlX2JtcDoKLQlrZnJlZShibXApOworCiBmcmVlX3JzcGlvY2JxOgogCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgcnNwaW9jYnEpOwogZnJlZV9jbWRpb2NicToKIAlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGNtZGlvY2JxKTsKLQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci1mcmVlX25kbHBfZXhpdDoKK2ZyZWVfYm1wOgorCWtmcmVlKGJtcCk7CitmcmVlX25kbHA6CiAJbHBmY19ubHBfcHV0KG5kbHApOwotCitub19uZGxwOgorCWtmcmVlKGRkX2RhdGEpOworbm9fZGRfZGF0YToKIAkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLwogCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGxwZmNfYnNnX3Jwb3J0X2Vsc19jbXAgLSBscGZjX2JzZ19ycG9ydF9lbHMncyBjb21wbGV0aW9uIGhhbmRsZXIKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBjbWRpb2NicTogUG9pbnRlciB0byBjb21tYW5kIGlvY2IuCisgKiBAcnNwaW9jYnE6IFBvaW50ZXIgdG8gcmVzcG9uc2UgaW9jYi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIGlvY2JzIGlzc3VlZCB1c2luZworICogbHBmY19ic2dfcnBvcnRfZWxzX2NtcCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlCisgKiByaW5nIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gd2l0aG91dCBhbnkgbG9jayBoZWxkLiBUaGlzIGZ1bmN0aW9uCisgKiBjYW4gYmUgY2FsbGVkIGZyb20gYm90aCB3b3JrZXIgdGhyZWFkIGNvbnRleHQgYW5kIGludGVycnVwdAorICogY29udGV4dC4gVGhpcyBmdW5jdGlvbiBhbHNvIGNhbiBiZSBjYWxsZWQgZnJvbSBvdGhlciB0aHJlYWQgd2hpY2gKKyAqIGNsZWFucyB1cCB0aGUgU0xJIGxheWVyIG9iamVjdHMuCisgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIHJlc3BvbnNlIGlvY2IgdG8gdGhlCisgKiByZXNwb25zZSBpb2NiIG1lbW9yeSBvYmplY3QgcHJvdmlkZWQgYnkgdGhlIGNhbGxlciBvZgorICogbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0IGFuZCB0aGVuIHdha2VzIHVwIHRoZSB0aHJlYWQgd2hpY2gKKyAqIHNsZWVwcyBmb3IgdGhlIGlvY2IgY29tcGxldGlvbi4KKyAqKi8KK3N0YXRpYyB2b2lkCitscGZjX2JzZ19ycG9ydF9lbHNfY21wKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwkJCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicSwKKwkJCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NicSkKK3sKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCXN0cnVjdCBmY19ic2dfam9iICpqb2I7CisJSU9DQl90ICpyc3A7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7CisJc3RydWN0IGxwZmNfZG1hYnVmICpwYnVmbGlzdCA9IE5VTEw7CisJc3RydWN0IGZjX2JzZ19jdGVsc19yZXBseSAqZWxzX3JlcGx5OworCXVpbnQ4X3QgKnJqdF9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJZGRfZGF0YSA9IGNtZGlvY2JxLT5jb250ZXh0MTsKKwkvKiBub3JtYWwgY29tcGxldGlvbiBhbmQgdGltZW91dCBjcm9zc2VkIHBhdGhzLCBhbHJlYWR5IGRvbmUgKi8KKwlpZiAoIWRkX2RhdGEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJY21kaW9jYnEtPmlvY2JfZmxhZyB8PSBMUEZDX0lPX1dBS0U7CisJaWYgKGNtZGlvY2JxLT5jb250ZXh0MiAmJiByc3Bpb2NicSkKKwkJbWVtY3B5KCYoKHN0cnVjdCBscGZjX2lvY2JxICopY21kaW9jYnEtPmNvbnRleHQyKS0+aW9jYiwKKwkJICAgICAgICZyc3Bpb2NicS0+aW9jYiwgc2l6ZW9mKElPQ0JfdCkpOworCisJam9iID0gZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnNldF9qb2I7CisJY21kaW9jYnEgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IuY21kaW9jYnE7CisJcnNwaW9jYnEgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IucnNwaW9jYnE7CisJcnNwID0gJnJzcGlvY2JxLT5pb2NiOworCW5kbHAgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IubmRscDsKKworCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJCSAgICAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJICAgICBqb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworCisJaWYgKGpvYi0+cmVwbHktPnJlc3VsdCA9PSAtRUFHQUlOKQorCQlyYyA9IC1FQUdBSU47CisJZWxzZSBpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX1NVQ0NFU1MpCisJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCQlyc3AtPnVuLmVsc3JlcTY0LmJkbC5iZGVTaXplOworCWVsc2UgaWYgKHJzcC0+dWxwU3RhdHVzID09IElPU1RBVF9MU19SSlQpIHsKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KKwkJCXNpemVvZihzdHJ1Y3QgZmNfYnNnX2N0ZWxzX3JlcGx5KTsKKwkJLyogTFNfUkpUIGRhdGEgcmV0dXJuZWQgaW4gd29yZCA0ICovCisJCXJqdF9kYXRhID0gKHVpbnQ4X3QgKikmcnNwLT51bi51bHBXb3JkWzRdOworCQllbHNfcmVwbHkgPSAmam9iLT5yZXBseS0+cmVwbHlfZGF0YS5jdGVsc19yZXBseTsKKwkJZWxzX3JlcGx5LT5zdGF0dXMgPSBGQ19DVEVMU19TVEFUVVNfUkVKRUNUOworCQllbHNfcmVwbHktPnJqdF9kYXRhLmFjdGlvbiA9IHJqdF9kYXRhWzNdOworCQllbHNfcmVwbHktPnJqdF9kYXRhLnJlYXNvbl9jb2RlID0gcmp0X2RhdGFbMl07CisJCWVsc19yZXBseS0+cmp0X2RhdGEucmVhc29uX2V4cGxhbmF0aW9uID0gcmp0X2RhdGFbMV07CisJCWVsc19yZXBseS0+cmp0X2RhdGEudmVuZG9yX3VuaXF1ZSA9IHJqdF9kYXRhWzBdOworCX0gZWxzZQorCQlyYyA9IC1FSU87CisKKwlwYnVmbGlzdCA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgY21kaW9jYnEtPmNvbnRleHQzOworCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIHBidWZsaXN0LT52aXJ0LCBwYnVmbGlzdC0+cGh5cyk7CisJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7CisJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBjbWRpb2NicSk7CisJbHBmY19ubHBfcHV0KG5kbHApOworCWtmcmVlKGRkX2RhdGEpOworCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCisJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJam9iLT5kZF9kYXRhID0gTlVMTDsKIAkvKiBjb21wbGV0ZSB0aGUgam9iIGJhY2sgdG8gdXNlcnNwYWNlICovCiAJam9iLT5qb2JfZG9uZShqb2IpOwotCi0JcmV0dXJuIDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCXJldHVybjsKIH0KIAogLyoqCiAgKiBscGZjX2JzZ19ycG9ydF9lbHMgLSBzZW5kIGFuIEVMUyBjb21tYW5kIGZyb20gYSBic2cgcmVxdWVzdAogICogQGpvYjogZmNfYnNnX2pvYiB0byBoYW5kbGUKLSAqLworICoqLwogc3RhdGljIGludAogbHBmY19ic2dfcnBvcnRfZWxzKHN0cnVjdCBmY19ic2dfam9iICpqb2IpCiB7CkBAIC0yMzYsNyArNDg0LDYgQEAKIAlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSB2cG9ydC0+cGhiYTsKIAlzdHJ1Y3QgbHBmY19ycG9ydF9kYXRhICpyZGF0YSA9IGpvYi0+cnBvcnQtPmRkX2RhdGE7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSByZGF0YS0+cG5vZGU7Ci0KIAl1aW50MzJfdCBlbHNjbWQ7CiAJdWludDMyX3QgY21kc2l6ZTsKIAl1aW50MzJfdCByc3BzaXplOwpAQCAtMjQ4LDIwICs0OTUsMzAgQEAKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKnByc3A7CiAJc3RydWN0IGxwZmNfZG1hYnVmICpwYnVmbGlzdCA9IE5VTEw7CiAJc3RydWN0IHVscF9iZGU2NCAqYnBsOwotCWludCBpb2NiX3N0YXR1czsKIAlpbnQgcmVxdWVzdF9uc2VnOwogCWludCByZXBseV9uc2VnOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dlbCA9IE5VTEw7CiAJaW50IG51bWJkZTsKIAlkbWFfYWRkcl90IGJ1c2FkZHI7CisJc3RydWN0IGJzZ19qb2JfZGF0YSAqZGRfZGF0YTsKKwl1aW50MzJfdCBjcmVnX3ZhbDsKIAlpbnQgcmMgPSAwOwogCiAJLyogaW4gY2FzZSBubyBkYXRhIGlzIHRyYW5zZmVycmVkICovCiAJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKIAorCS8qIGFsbG9jYXRlIG91ciBic2cgdHJhY2tpbmcgc3RydWN0dXJlICovCisJZGRfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBic2dfam9iX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRkX2RhdGEpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkiMjczNSBGYWlsZWQgYWxsb2NhdGlvbiBvZiBkZF9kYXRhXG4iKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG5vX2RkX2RhdGE7CisJfQorCiAJaWYgKCFscGZjX25scF9nZXQobmRscCkpIHsKIAkJcmMgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKKwkJZ290byBmcmVlX2RkX2RhdGE7CiAJfQogCiAJZWxzY21kID0gam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEucl9lbHMuZWxzX2NvZGU7CkBAIC0yNzEsMjQgKzUyOCwyNCBAQAogCWlmICghcnNwaW9jYnEpIHsKIAkJbHBmY19ubHBfcHV0KG5kbHApOwogCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OworCQlnb3RvIGZyZWVfZGRfZGF0YTsKIAl9CiAKIAlyc3AgPSAmcnNwaW9jYnEtPmlvY2I7CiAJcnBpID0gbmRscC0+bmxwX3JwaTsKIAotCWNtZGlvY2JxID0gbHBmY19wcmVwX2Vsc19pb2NiKHBoYmEtPnBwb3J0LCAxLCBjbWRzaXplLCAwLCBuZGxwLAorCWNtZGlvY2JxID0gbHBmY19wcmVwX2Vsc19pb2NiKHZwb3J0LCAxLCBjbWRzaXplLCAwLCBuZGxwLAogCQkJCSAgICAgIG5kbHAtPm5scF9ESUQsIGVsc2NtZCk7Ci0KIAlpZiAoIWNtZGlvY2JxKSB7Ci0JCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgcnNwaW9jYnEpOwotCQlyZXR1cm4gLUVJTzsKKwkJcmMgPSAtRUlPOworCQlnb3RvIGZyZWVfcnNwaW9jYnE7CiAJfQogCi0Jam9iLT5kZF9kYXRhID0gY21kaW9jYnE7CisJLyogcHJlcCBlbHMgaW9jYiBzZXQgY29udGV4dDEgdG8gdGhlIG5kbHAsIGNvbnRleHQyIHRvIHRoZSBjb21tYW5kCisJICogZG1hYnVmLCBjb250ZXh0MyBob2xkcyB0aGUgZGF0YSBkbWFidWYKKwkgKi8KIAlwY21kID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBjbWRpb2NicS0+Y29udGV4dDI7CiAJcHJzcCA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgcGNtZC0+bGlzdC5uZXh0OwotCiAJbHBmY19tYnVmX2ZyZWUocGhiYSwgcGNtZC0+dmlydCwgcGNtZC0+cGh5cyk7CiAJa2ZyZWUocGNtZCk7CiAJbHBmY19tYnVmX2ZyZWUocGhiYSwgcHJzcC0+dmlydCwgcHJzcC0+cGh5cyk7CkBAIC0zMDAsNyArNTU3LDYgQEAKIAogCXJlcXVlc3RfbnNlZyA9IHBjaV9tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAogCQkJCSAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKLQogCWZvcl9lYWNoX3NnKGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsIHNnZWwsIHJlcXVlc3RfbnNlZywgbnVtYmRlKSB7CiAJCWJ1c2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZ2VsKTsKIAkJYnBsLT50dXMuZi5iZGVGbGFncyA9IEJVRkZfVFlQRV9CREVfNjQ7CkBAIC0zMjIsNyArNTc4LDYgQEAKIAkJYnBsLT5hZGRySGlnaCA9IGNwdV90b19sZTMyKHB1dFBhZGRySGlnaChidXNhZGRyKSk7CiAJCWJwbCsrOwogCX0KLQogCWNtZGlvY2JxLT5pb2NiLnVuLmVsc3JlcTY0LmJkbC5iZGVTaXplID0KIAkJKHJlcXVlc3RfbnNlZyArIHJlcGx5X25zZWcpICogc2l6ZW9mKHN0cnVjdCB1bHBfYmRlNjQpOwogCWNtZGlvY2JxLT5pb2NiLnVscENvbnRleHQgPSBycGk7CkBAIC0zMzAsMTAyICs1ODUsNjIgQEAKIAljbWRpb2NicS0+Y29udGV4dDEgPSBOVUxMOwogCWNtZGlvY2JxLT5jb250ZXh0MiA9IE5VTEw7CiAKLQlpb2NiX3N0YXR1cyA9IGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdChwaGJhLCBMUEZDX0VMU19SSU5HLCBjbWRpb2NicSwKLQkJCQkJcnNwaW9jYnEsIChwaGJhLT5mY19yYXRvdiAqIDIpCi0JCQkJCSAgICAgICArIExQRkNfRFJWUl9USU1FT1VUKTsKKwljbWRpb2NicS0+aW9jYl9jbXBsID0gbHBmY19ic2dfcnBvcnRfZWxzX2NtcDsKKwljbWRpb2NicS0+Y29udGV4dDEgPSBkZF9kYXRhOworCWNtZGlvY2JxLT5jb250ZXh0MiA9IHJzcGlvY2JxOworCWRkX2RhdGEtPnR5cGUgPSBUWVBFX0lPQ0I7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLmNtZGlvY2JxID0gY21kaW9jYnE7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnJzcGlvY2JxID0gcnNwaW9jYnE7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnNldF9qb2IgPSBqb2I7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLmJtcCA9IE5VTEw7OworCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5uZGxwID0gbmRscDsKIAotCS8qIHJlbGVhc2UgdGhlIG5ldyBuZGxwIG9uY2UgdGhlIGlvY2IgY29tcGxldGVzICovCi0JbHBmY19ubHBfcHV0KG5kbHApOwotCWlmIChpb2NiX3N0YXR1cyAhPSBJT0NCX1RJTUVET1VUKSB7Ci0JCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCi0JCQkgICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7Ci0JCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAotCQkJICAgICBqb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworCWlmIChwaGJhLT5jZmdfcG9sbCAmIERJU0FCTEVfRkNQX1JJTkdfSU5UKSB7CisJCWNyZWdfdmFsID0gcmVhZGwocGhiYS0+SENyZWdhZGRyKTsKKwkJY3JlZ192YWwgfD0gKEhDX1IwSU5UX0VOQSA8PCBMUEZDX0ZDUF9SSU5HKTsKKwkJd3JpdGVsKGNyZWdfdmFsLCBwaGJhLT5IQ3JlZ2FkZHIpOworCQlyZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOyAvKiBmbHVzaCAqLwogCX0KKwlyYyA9IGxwZmNfc2xpX2lzc3VlX2lvY2IocGhiYSwgTFBGQ19FTFNfUklORywgY21kaW9jYnEsIDApOworCWxwZmNfbmxwX3B1dChuZGxwKTsKKwlpZiAocmMgPT0gSU9DQl9TVUNDRVNTKQorCQlyZXR1cm4gMDsgLyogZG9uZSBmb3Igbm93ICovCiAKLQlpZiAoaW9jYl9zdGF0dXMgPT0gSU9DQl9TVUNDRVNTKSB7Ci0JCWlmIChyc3AtPnVscFN0YXR1cyA9PSBJT1NUQVRfU1VDQ0VTUykgewotCQkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KLQkJCQlyc3AtPnVuLmVsc3JlcTY0LmJkbC5iZGVTaXplOwotCQkJcmMgPSAwOwotCQl9IGVsc2UgaWYgKHJzcC0+dWxwU3RhdHVzID09IElPU1RBVF9MU19SSlQpIHsKLQkJCXN0cnVjdCBmY19ic2dfY3RlbHNfcmVwbHkgKmVsc19yZXBseTsKLQkJCS8qIExTX1JKVCBkYXRhIHJldHVybmVkIGluIHdvcmQgNCAqLwotCQkJdWludDhfdCAqcmp0X2RhdGEgPSAodWludDhfdCAqKSZyc3AtPnVuLnVscFdvcmRbNF07CisJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJICAgICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCQkgICAgIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CiAKLQkJCWVsc19yZXBseSA9ICZqb2ItPnJlcGx5LT5yZXBseV9kYXRhLmN0ZWxzX3JlcGx5OwotCQkJam9iLT5yZXBseS0+cmVzdWx0ID0gMDsKLQkJCWVsc19yZXBseS0+c3RhdHVzID0gRkNfQ1RFTFNfU1RBVFVTX1JFSkVDVDsKLQkJCWVsc19yZXBseS0+cmp0X2RhdGEuYWN0aW9uID0gcmp0X2RhdGFbMF07Ci0JCQllbHNfcmVwbHktPnJqdF9kYXRhLnJlYXNvbl9jb2RlID0gcmp0X2RhdGFbMV07Ci0JCQllbHNfcmVwbHktPnJqdF9kYXRhLnJlYXNvbl9leHBsYW5hdGlvbiA9IHJqdF9kYXRhWzJdOwotCQkJZWxzX3JlcGx5LT5yanRfZGF0YS52ZW5kb3JfdW5pcXVlID0gcmp0X2RhdGFbM107Ci0JCX0gZWxzZQotCQkJcmMgPSAtRUlPOwotCX0gZWxzZQotCQlyYyA9IC1FSU87CisJbHBmY19tYnVmX2ZyZWUocGhiYSwgcGJ1Zmxpc3QtPnZpcnQsIHBidWZsaXN0LT5waHlzKTsKIAotCWlmIChpb2NiX3N0YXR1cyAhPSBJT0NCX1RJTUVET1VUKQotCQlscGZjX2Vsc19mcmVlX2lvY2IocGhiYSwgY21kaW9jYnEpOworCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOwogCitmcmVlX3JzcGlvY2JxOgogCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgcnNwaW9jYnEpOwogCi1vdXQ6CitmcmVlX2RkX2RhdGE6CisJa2ZyZWUoZGRfZGF0YSk7CisKK25vX2RkX2RhdGE6CiAJLyogbWFrZSBlcnJvciBjb2RlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgKi8KIAlqb2ItPnJlcGx5LT5yZXN1bHQgPSByYzsKLQkvKiBjb21wbGV0ZSB0aGUgam9iIGJhY2sgdG8gdXNlcnNwYWNlICovCi0Jam9iLT5qb2JfZG9uZShqb2IpOwotCi0JcmV0dXJuIDA7CisJam9iLT5kZF9kYXRhID0gTlVMTDsKKwlyZXR1cm4gcmM7CiB9CiAKLXN0cnVjdCBscGZjX2N0X2V2ZW50IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0JaW50IHJlZjsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKLQotCS8qIEV2ZW50IHR5cGUgYW5kIHdhaXRlciBpZGVudGlmaWVycyAqLwotCXVpbnQzMl90IHR5cGVfbWFzazsKLQl1aW50MzJfdCByZXFfaWQ7Ci0JdWludDMyX3QgcmVnX2lkOwotCi0JLyogbmV4dCB0d28gZmxhZ3MgYXJlIGhlcmUgZm9yIHRoZSBhdXRvLWRlbGV0ZSBsb2dpYyAqLwotCXVuc2lnbmVkIGxvbmcgd2FpdF90aW1lX3N0YW1wOwotCWludCB3YWl0aW5nOwotCi0JLyogc2VlbiBhbmQgbm90IHNlZW4gZXZlbnRzICovCi0Jc3RydWN0IGxpc3RfaGVhZCBldmVudHNfdG9fZ2V0OwotCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRzX3RvX3NlZTsKLX07Ci0KLXN0cnVjdCBldmVudF9kYXRhIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0JdWludDMyX3QgdHlwZTsKLQl1aW50MzJfdCBpbW1lZF9kYXQ7Ci0Jdm9pZCAqZGF0YTsKLQl1aW50MzJfdCBsZW47Ci19OwotCi1zdGF0aWMgc3RydWN0IGxwZmNfY3RfZXZlbnQgKgotbHBmY19jdF9ldmVudF9uZXcoaW50IGV2X3JlZ19pZCwgdWludDMyX3QgZXZfcmVxX2lkKQotewotCXN0cnVjdCBscGZjX2N0X2V2ZW50ICpldnQgPSBremFsbG9jKHNpemVvZigqZXZ0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFldnQpCi0JCXJldHVybiBOVUxMOwotCi0JSU5JVF9MSVNUX0hFQUQoJmV2dC0+ZXZlbnRzX3RvX2dldCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmV2dC0+ZXZlbnRzX3RvX3NlZSk7Ci0JZXZ0LT5yZXFfaWQgPSBldl9yZXFfaWQ7Ci0JZXZ0LT5yZWdfaWQgPSBldl9yZWdfaWQ7Ci0JZXZ0LT53YWl0X3RpbWVfc3RhbXAgPSBqaWZmaWVzOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmV2dC0+d3EpOwotCi0JcmV0dXJuIGV2dDsKLX0KLQorLyoqCisgKiBscGZjX2JzZ19ldmVudF9mcmVlIC0gZnJlZXMgYW4gYWxsb2NhdGVkIGV2ZW50IHN0cnVjdHVyZQorICogQGtyZWY6IFBvaW50ZXIgdG8gYSBrcmVmLgorICoKKyAqIENhbGxlZCBmcm9tIGtyZWZfcHV0LiBCYWNrIGNhc3QgdGhlIGtyZWYgaW50byBhbiBldmVudCBzdHJ1Y3R1cmUgYWRkcmVzcy4KKyAqIEZyZWUgYW55IGV2ZW50cyB0byBnZXQsIGRlbGV0ZSBhc3NvY2lhdGVkIG5vZGVzLCBmcmVlIGFueSBldmVudHMgdG8gc2VlLAorICogZnJlZSBhbnkgZGF0YSB0aGVuIGZyZWUgdGhlIGV2ZW50IGl0c2VsZi4KKyAqKi8KIHN0YXRpYyB2b2lkCi1scGZjX2N0X2V2ZW50X2ZyZWUoc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dCkKK2xwZmNfYnNnX2V2ZW50X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpCiB7CisJc3RydWN0IGxwZmNfYnNnX2V2ZW50ICpldnQgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGxwZmNfYnNnX2V2ZW50LAorCQkJCQkJICBrcmVmKTsKIAlzdHJ1Y3QgZXZlbnRfZGF0YSAqZWQ7CiAKIAlsaXN0X2RlbCgmZXZ0LT5ub2RlKTsKQEAgLTQ0NywyNSArNjYyLDgyIEBACiAJa2ZyZWUoZXZ0KTsKIH0KIAorLyoqCisgKiBscGZjX2JzZ19ldmVudF9yZWYgLSBpbmNyZW1lbnRzIHRoZSBrcmVmIGZvciBhbiBldmVudAorICogQGV2dDogUG9pbnRlciB0byBhbiBldmVudCBzdHJ1Y3R1cmUuCisgKiovCiBzdGF0aWMgaW5saW5lIHZvaWQKLWxwZmNfY3RfZXZlbnRfcmVmKHN0cnVjdCBscGZjX2N0X2V2ZW50ICpldnQpCitscGZjX2JzZ19ldmVudF9yZWYoc3RydWN0IGxwZmNfYnNnX2V2ZW50ICpldnQpCiB7Ci0JZXZ0LT5yZWYrKzsKKwlrcmVmX2dldCgmZXZ0LT5rcmVmKTsKIH0KIAorLyoqCisgKiBscGZjX2JzZ19ldmVudF91bnJlZiAtIFVzZXMga3JlZl9wdXQgdG8gZnJlZSBhbiBldmVudCBzdHJ1Y3R1cmUKKyAqIEBldnQ6IFBvaW50ZXIgdG8gYW4gZXZlbnQgc3RydWN0dXJlLgorICoqLwogc3RhdGljIGlubGluZSB2b2lkCi1scGZjX2N0X2V2ZW50X3VucmVmKHN0cnVjdCBscGZjX2N0X2V2ZW50ICpldnQpCitscGZjX2JzZ19ldmVudF91bnJlZihzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dCkKIHsKLQlpZiAoLS1ldnQtPnJlZiA8IDApCi0JCWxwZmNfY3RfZXZlbnRfZnJlZShldnQpOworCWtyZWZfcHV0KCZldnQtPmtyZWYsIGxwZmNfYnNnX2V2ZW50X2ZyZWUpOwogfQogCi0jZGVmaW5lIFNMSV9DVF9FTFhfTE9PUEJBQ0sgMHgxMAorLyoqCisgKiBscGZjX2JzZ19ldmVudF9uZXcgLSBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGV2ZW50IHN0cnVjdHVyZQorICogQGV2X21hc2s6IE1hc2sgb2YgZXZlbnRzLgorICogQGV2X3JlZ19pZDogRXZlbnQgcmVnIGlkLgorICogQGV2X3JlcV9pZDogRXZlbnQgcmVxdWVzdCBpZC4KKyAqKi8KK3N0YXRpYyBzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKgorbHBmY19ic2dfZXZlbnRfbmV3KHVpbnQzMl90IGV2X21hc2ssIGludCBldl9yZWdfaWQsIHVpbnQzMl90IGV2X3JlcV9pZCkKK3sKKwlzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dCA9IGt6YWxsb2Moc2l6ZW9mKCpldnQpLCBHRlBfS0VSTkVMKTsKIAotZW51bSBFTFhfTE9PUEJBQ0tfQ01EIHsKLQlFTFhfTE9PUEJBQ0tfWFJJX1NFVFVQLAotCUVMWF9MT09QQkFDS19EQVRBLAotfTsKKwlpZiAoIWV2dCkKKwkJcmV0dXJuIE5VTEw7CisKKwlJTklUX0xJU1RfSEVBRCgmZXZ0LT5ldmVudHNfdG9fZ2V0KTsKKwlJTklUX0xJU1RfSEVBRCgmZXZ0LT5ldmVudHNfdG9fc2VlKTsKKwlldnQtPnR5cGVfbWFzayA9IGV2X21hc2s7CisJZXZ0LT5yZXFfaWQgPSBldl9yZXFfaWQ7CisJZXZ0LT5yZWdfaWQgPSBldl9yZWdfaWQ7CisJZXZ0LT53YWl0X3RpbWVfc3RhbXAgPSBqaWZmaWVzOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmV2dC0+d3EpOworCWtyZWZfaW5pdCgmZXZ0LT5rcmVmKTsKKwlyZXR1cm4gZXZ0OworfQorCisvKioKKyAqIGRpYWdfY21kX2RhdGFfZnJlZSAtIEZyZWVzIGFuIGxwZmMgZG1hIGJ1ZmZlciBleHRlbnNpb24KKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBtbGlzdDogUG9pbnRlciB0byBhbiBscGZjIGRtYSBidWZmZXIgZXh0ZW5zaW9uLgorICoqLworc3RhdGljIGludAorZGlhZ19jbWRfZGF0YV9mcmVlKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfZG1hYnVmZXh0ICptbGlzdCkKK3sKKwlzdHJ1Y3QgbHBmY19kbWFidWZleHQgKm1sYXN0OworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IGxpc3RfaGVhZCBoZWFkLCAqY3VyciwgKm5leHQ7CisKKwlpZiAoKCFtbGlzdCkgfHwgKCFscGZjX2lzX2xpbmtfdXAocGhiYSkgJiYKKwkJKHBoYmEtPmxpbmtfZmxhZyAmIExTX0xPT1BCQUNLX01PREUpKSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlwY2lkZXYgPSBwaGJhLT5wY2lkZXY7CisJbGlzdF9hZGRfdGFpbCgmaGVhZCwgJm1saXN0LT5kbWEubGlzdCk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUoY3VyciwgbmV4dCwgJmhlYWQpIHsKKwkJbWxhc3QgPSBsaXN0X2VudHJ5KGN1cnIsIHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAsIGRtYS5saXN0KTsKKwkJaWYgKG1sYXN0LT5kbWEudmlydCkKKwkJCWRtYV9mcmVlX2NvaGVyZW50KCZwY2lkZXYtPmRldiwKKwkJCQkJICBtbGFzdC0+c2l6ZSwKKwkJCQkJICBtbGFzdC0+ZG1hLnZpcnQsCisJCQkJCSAgbWxhc3QtPmRtYS5waHlzKTsKKwkJa2ZyZWUobWxhc3QpOworCX0KKwlyZXR1cm4gMDsKK30KIAogLyoqCiAgKiBscGZjX2JzZ19jdF91bnNvbF9ldmVudCAtIHByb2Nlc3MgYW4gdW5zb2xpY2l0ZWQgQ1QgY29tbWFuZApAQCAtNDc0LDkgKzc0Niw5IEBACiAgKiBAcGlvY2JxOgogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gdW5zb2xpY2l0ZWQgQ1QgY29tbWFuZCBpcyByZWNlaXZlZC4gIEl0Ci0gKiBmb3J3YXJkcyB0aGUgZXZlbnQgdG8gYW55IHByb2Nlc3NlcyByZWdpc3RlcmQgdG8gcmVjZWl2ZSBDVCBldmVudHMuCi0gKi8KLXZvaWQKKyAqIGZvcndhcmRzIHRoZSBldmVudCB0byBhbnkgcHJvY2Vzc2VzIHJlZ2lzdGVyZWQgdG8gcmVjZWl2ZSBDVCBldmVudHMuCisgKiovCitpbnQKIGxwZmNfYnNnX2N0X3Vuc29sX2V2ZW50KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLAogCQkJc3RydWN0IGxwZmNfaW9jYnEgKnBpb2NicSkKIHsKQEAgLTQ4NCw3ICs3NTYsNyBAQAogCXVpbnQzMl90IGNtZDsKIAl1aW50MzJfdCBsZW47CiAJc3RydWN0IGxwZmNfZG1hYnVmICpkbWFidWYgPSBOVUxMOwotCXN0cnVjdCBscGZjX2N0X2V2ZW50ICpldnQ7CisJc3RydWN0IGxwZmNfYnNnX2V2ZW50ICpldnQ7CiAJc3RydWN0IGV2ZW50X2RhdGEgKmV2dF9kYXQgPSBOVUxMOwogCXN0cnVjdCBscGZjX2lvY2JxICppb2NicTsKIAlzaXplX3Qgb2Zmc2V0ID0gMDsKQEAgLTQ5Niw2ICs3NjgsOSBAQAogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqYmRlQnVmMiA9IHBpb2NicS0+Y29udGV4dDM7CiAJc3RydWN0IGxwZmNfaGJxX2VudHJ5ICpoYnFlOwogCXN0cnVjdCBscGZjX3NsaV9jdF9yZXF1ZXN0ICpjdF9yZXE7CisJc3RydWN0IGZjX2JzZ19qb2IgKmpvYiA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc2l6ZSA9IDA7CiAKIAlJTklUX0xJU1RfSEVBRCgmaGVhZCk7CiAJbGlzdF9hZGRfdGFpbCgmaGVhZCwgJnBpb2NicS0+bGlzdCk7CkBAIC01MDQsNiArNzc5LDEwIEBACiAJICAgIHBpb2NicS0+aW9jYi51bi5jb250NjRbMF0udHVzLmYuYmRlU2l6ZSA9PSAwKQogCQlnb3RvIGVycm9yX2N0X3Vuc29sX2V4aXQ7CiAKKwlpZiAocGhiYS0+bGlua19zdGF0ZSA9PSBMUEZDX0hCQV9FUlJPUiB8fAorCQkoIShwaGJhLT5zbGkuc2xpX2ZsYWcgJiBMUEZDX1NMSV9BQ1RJVkUpKSkKKwkJZ290byBlcnJvcl9jdF91bnNvbF9leGl0OworCiAJaWYgKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19IQlFfRU5BQkxFRCkKIAkJZG1hYnVmID0gYmRlQnVmMTsKIAllbHNlIHsKQEAgLTUxMSw3ICs3OTAsOCBAQAogCQkJCSAgICBwaW9jYnEtPmlvY2IudW4uY29udDY0WzBdLmFkZHJMb3cpOwogCQlkbWFidWYgPSBscGZjX3NsaV9yaW5ncG9zdGJ1Zl9nZXQocGhiYSwgcHJpbmcsIGRtYV9hZGRyKTsKIAl9Ci0KKwlpZiAoZG1hYnVmID09IE5VTEwpCisJCWdvdG8gZXJyb3JfY3RfdW5zb2xfZXhpdDsKIAljdF9yZXEgPSAoc3RydWN0IGxwZmNfc2xpX2N0X3JlcXVlc3QgKilkbWFidWYtPnZpcnQ7CiAJZXZ0X3JlcV9pZCA9IGN0X3JlcS0+RnNUeXBlOwogCWNtZCA9IGN0X3JlcS0+Q29tbWFuZFJlc3BvbnNlLmJpdHMuQ21kUnNwOwpAQCAtNTE5LDI0ICs3OTksMjQgQEAKIAlpZiAoIShwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfSEJRX0VOQUJMRUQpKQogCQlscGZjX3NsaV9yaW5ncG9zdGJ1Zl9wdXQocGhiYSwgcHJpbmcsIGRtYWJ1Zik7CiAKLQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2dCwgJnBoYmEtPmN0X2V2X3dhaXRlcnMsIG5vZGUpIHsKLQkJaWYgKGV2dC0+cmVxX2lkICE9IGV2dF9yZXFfaWQpCisJCWlmICghKGV2dC0+dHlwZV9tYXNrICYgRkNfUkVHX0NUX0VWRU5UKSB8fAorCQkJZXZ0LT5yZXFfaWQgIT0gZXZ0X3JlcV9pZCkKIAkJCWNvbnRpbnVlOwogCi0JCWxwZmNfY3RfZXZlbnRfcmVmKGV2dCk7Ci0KKwkJbHBmY19ic2dfZXZlbnRfcmVmKGV2dCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAkJZXZ0X2RhdCA9IGt6YWxsb2Moc2l6ZW9mKCpldnRfZGF0KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZXZ0X2RhdCkgewotCQkJbHBmY19jdF9ldmVudF91bnJlZihldnQpOworCQlpZiAoZXZ0X2RhdCA9PSBOVUxMKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQkJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCiAJCQkJCSIyNjE0IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgIgogCQkJCQkiQ1QgZXZlbnRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAotCQltdXRleF91bmxvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKLQogCQlpZiAocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKSB7CiAJCQkvKiB0YWtlIGFjY3VtdWxhdGVkIGJ5dGUgY291bnQgZnJvbSB0aGUgbGFzdCBpb2NicSAqLwogCQkJaW9jYnEgPSBsaXN0X2VudHJ5KGhlYWQucHJldiwgdHlwZW9mKCppb2NicSksIGxpc3QpOwpAQCAtNTUwLDI1ICs4MzAsMjUgQEAKIAkJfQogCiAJCWV2dF9kYXQtPmRhdGEgPSBremFsbG9jKGV2dF9kYXQtPmxlbiwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZXZ0X2RhdC0+ZGF0YSkgeworCQlpZiAoZXZ0X2RhdC0+ZGF0YSA9PSBOVUxMKSB7CiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAogCQkJCQkiMjYxNSBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgZm9yICIKIAkJCQkJIkNUIGV2ZW50IGRhdGEsIHNpemUgJWRcbiIsCiAJCQkJCWV2dF9kYXQtPmxlbik7CiAJCQlrZnJlZShldnRfZGF0KTsKLQkJCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKLQkJCWxwZmNfY3RfZXZlbnRfdW5yZWYoZXZ0KTsKLQkJCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJCWxwZmNfYnNnX2V2ZW50X3VucmVmKGV2dCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAJCQlnb3RvIGVycm9yX2N0X3Vuc29sX2V4aXQ7CiAJCX0KIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvY2JxLCAmaGVhZCwgbGlzdCkgeworCQkJc2l6ZSA9IDA7CiAJCQlpZiAocGhiYS0+c2xpM19vcHRpb25zICYgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKSB7CiAJCQkJYmRlQnVmMSA9IGlvY2JxLT5jb250ZXh0MjsKIAkJCQliZGVCdWYyID0gaW9jYnEtPmNvbnRleHQzOwogCQkJfQogCQkJZm9yIChpID0gMDsgaSA8IGlvY2JxLT5pb2NiLnVscEJkZUNvdW50OyBpKyspIHsKLQkJCQlpbnQgc2l6ZSA9IDA7CiAJCQkJaWYgKHBoYmEtPnNsaTNfb3B0aW9ucyAmCiAJCQkJICAgIExQRkNfU0xJM19IQlFfRU5BQkxFRCkgewogCQkJCQlpZiAoaSA9PSAwKSB7CkBAIC02MDEsOSArODgxLDExIEBACiAJCQkJCQlpb2NicSk7CiAJCQkJCWtmcmVlKGV2dF9kYXQtPmRhdGEpOwogCQkJCQlrZnJlZShldnRfZGF0KTsKLQkJCQkJbXV0ZXhfbG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOwotCQkJCQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7Ci0JCQkJCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywKKwkJCQkJCWZsYWdzKTsKKwkJCQkJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgKKwkJCQkJCSZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAJCQkJCWdvdG8gZXJyb3JfY3RfdW5zb2xfZXhpdDsKIAkJCQl9CiAJCQkJbWVtY3B5KChjaGFyICopKGV2dF9kYXQtPmRhdGEpICsgb2Zmc2V0LApAQCAtNjE2LDE1ICs4OTgsMjQgQEAKIAkJCQkJCQkJIGRtYWJ1Zik7CiAJCQkJfSBlbHNlIHsKIAkJCQkJc3dpdGNoIChjbWQpIHsKKwkJCQkJY2FzZSBFTFhfTE9PUEJBQ0tfREFUQToKKwkJCQkJCWRpYWdfY21kX2RhdGFfZnJlZShwaGJhLAorCQkJCQkJKHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqKQorCQkJCQkJCWRtYWJ1Zik7CisJCQkJCQlicmVhazsKIAkJCQkJY2FzZSBFTFhfTE9PUEJBQ0tfWFJJX1NFVFVQOgotCQkJCQkJaWYgKCEocGhiYS0+c2xpM19vcHRpb25zICYKLQkJCQkJCSAgICAgIExQRkNfU0xJM19IQlFfRU5BQkxFRCkpCisJCQkJCQlpZiAoKHBoYmEtPnNsaV9yZXYgPT0KKwkJCQkJCQlMUEZDX1NMSV9SRVYyKSB8fAorCQkJCQkJCShwaGJhLT5zbGkzX29wdGlvbnMgJgorCQkJCQkJCUxQRkNfU0xJM19IQlFfRU5BQkxFRAorCQkJCQkJCSkpIHsKKwkJCQkJCQlscGZjX2luX2J1Zl9mcmVlKHBoYmEsCisJCQkJCQkJCQlkbWFidWYpOworCQkJCQkJfSBlbHNlIHsKIAkJCQkJCQlscGZjX3Bvc3RfYnVmZmVyKHBoYmEsCiAJCQkJCQkJCQkgcHJpbmcsCiAJCQkJCQkJCQkgMSk7Ci0JCQkJCQllbHNlCi0JCQkJCQkJbHBmY19pbl9idWZfZnJlZShwaGJhLAotCQkJCQkJCQkJZG1hYnVmKTsKKwkJCQkJCX0KIAkJCQkJCWJyZWFrOwogCQkJCQlkZWZhdWx0OgogCQkJCQkJaWYgKCEocGhiYS0+c2xpM19vcHRpb25zICYKQEAgLTYzOCw3ICs5MjksNyBAQAogCQkJfQogCQl9CiAKLQkJbXV0ZXhfbG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCQlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7CiAJCQlldnRfZGF0LT5pbW1lZF9kYXQgPSBwaGJhLT5jdHhfaWR4OwogCQkJcGhiYS0+Y3R4X2lkeCA9IChwaGJhLT5jdHhfaWR4ICsgMSkgJSA2NDsKQEAgLTY1MSwxMjIgKzk0MiwxNDQgQEAKIAogCQlldnRfZGF0LT50eXBlID0gRkNfUkVHX0NUX0VWRU5UOwogCQlsaXN0X2FkZCgmZXZ0X2RhdC0+bm9kZSwgJmV2dC0+ZXZlbnRzX3RvX3NlZSk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZXZ0LT53cSk7Ci0JCWxwZmNfY3RfZXZlbnRfdW5yZWYoZXZ0KTsKLQkJaWYgKGV2dF9yZXFfaWQgPT0gU0xJX0NUX0VMWF9MT09QQkFDSykKKwkJaWYgKGV2dF9yZXFfaWQgPT0gU0xJX0NUX0VMWF9MT09QQkFDSykgeworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZldnQtPndxKTsKKwkJCWxwZmNfYnNnX2V2ZW50X3VucmVmKGV2dCk7CiAJCQlicmVhazsKKwkJfQorCisJCWxpc3RfbW92ZShldnQtPmV2ZW50c190b19zZWUucHJldiwgJmV2dC0+ZXZlbnRzX3RvX2dldCk7CisJCWxwZmNfYnNnX2V2ZW50X3VucmVmKGV2dCk7CisKKwkJam9iID0gZXZ0LT5zZXRfam9iOworCQlldnQtPnNldF9qb2IgPSBOVUxMOworCQlpZiAoam9iKSB7CisJCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSBzaXplOworCQkJLyogbWFrZSBlcnJvciBjb2RlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgKi8KKwkJCWpvYi0+cmVwbHktPnJlc3VsdCA9IDA7CisJCQlqb2ItPmRkX2RhdGEgPSBOVUxMOworCQkJLyogY29tcGxldGUgdGhlIGpvYiBiYWNrIHRvIHVzZXJzcGFjZSAqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQkJam9iLT5qb2JfZG9uZShqb2IpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJfQogCX0KLQltdXRleF91bmxvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAKIGVycm9yX2N0X3Vuc29sX2V4aXQ6CiAJaWYgKCFsaXN0X2VtcHR5KCZoZWFkKSkKIAkJbGlzdF9kZWwoJmhlYWQpOwotCi0JcmV0dXJuOworCWlmIChldnRfcmVxX2lkID09IFNMSV9DVF9FTFhfTE9PUEJBQ0spCisJCXJldHVybiAwOworCXJldHVybiAxOwogfQogCiAvKioKLSAqIGxwZmNfYnNnX3NldF9ldmVudCAtIHByb2Nlc3MgYSBTRVRfRVZFTlQgYnNnIHZlbmRvciBjb21tYW5kCisgKiBscGZjX2JzZ19oYmFfc2V0X2V2ZW50IC0gcHJvY2VzcyBhIFNFVF9FVkVOVCBic2cgdmVuZG9yIGNvbW1hbmQKICAqIEBqb2I6IFNFVF9FVkVOVCBmY19ic2dfam9iCi0gKi8KKyAqKi8KIHN0YXRpYyBpbnQKLWxwZmNfYnNnX3NldF9ldmVudChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQorbHBmY19ic2dfaGJhX3NldF9ldmVudChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQogewogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOwogCXN0cnVjdCBzZXRfY3RfZXZlbnQgKmV2ZW50X3JlcTsKLQlzdHJ1Y3QgbHBmY19jdF9ldmVudCAqZXZ0OworCXN0cnVjdCBscGZjX2JzZ19ldmVudCAqZXZ0OwogCWludCByYyA9IDA7CisJc3RydWN0IGJzZ19qb2JfZGF0YSAqZGRfZGF0YSA9IE5VTEw7CisJdWludDMyX3QgZXZfbWFzazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGpvYi0+cmVxdWVzdF9sZW4gPAogCSAgICBzaXplb2Yoc3RydWN0IGZjX2JzZ19yZXF1ZXN0KSArIHNpemVvZihzdHJ1Y3Qgc2V0X2N0X2V2ZW50KSkgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAogCQkJCSIyNjEyIFJlY2VpdmVkIFNFVF9DVF9FVkVOVCBiZWxvdyBtaW5pbXVtICIKIAkJCQkic2l6ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gam9iX2Vycm9yOworCX0KKworCWRkX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYnNnX2pvYl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRkX2RhdGEgPT0gTlVMTCkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzM0IEZhaWxlZCBhbGxvY2F0aW9uIG9mIGRkX2RhdGFcbiIpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gam9iX2Vycm9yOwogCX0KIAogCWV2ZW50X3JlcSA9IChzdHJ1Y3Qgc2V0X2N0X2V2ZW50ICopCiAJCWpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQ7Ci0KLQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJZXZfbWFzayA9ICgodWludDMyX3QpKHVuc2lnbmVkIGxvbmcpZXZlbnRfcmVxLT50eXBlX21hc2sgJgorCQkJCUZDX1JFR19FVkVOVF9NQVNLKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZ0LCAmcGhiYS0+Y3RfZXZfd2FpdGVycywgbm9kZSkgewogCQlpZiAoZXZ0LT5yZWdfaWQgPT0gZXZlbnRfcmVxLT5ldl9yZWdfaWQpIHsKLQkJCWxwZmNfY3RfZXZlbnRfcmVmKGV2dCk7CisJCQlscGZjX2JzZ19ldmVudF9yZWYoZXZ0KTsKIAkJCWV2dC0+d2FpdF90aW1lX3N0YW1wID0gamlmZmllczsKIAkJCWJyZWFrOwogCQl9CiAJfQotCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAogCWlmICgmZXZ0LT5ub2RlID09ICZwaGJhLT5jdF9ldl93YWl0ZXJzKSB7CiAJCS8qIG5vIGV2ZW50IHdhaXRpbmcgc3RydWN0IHlldCAtIGZpcnN0IGNhbGwgKi8KLQkJZXZ0ID0gbHBmY19jdF9ldmVudF9uZXcoZXZlbnRfcmVxLT5ldl9yZWdfaWQsCisJCWV2dCA9IGxwZmNfYnNnX2V2ZW50X25ldyhldl9tYXNrLCBldmVudF9yZXEtPmV2X3JlZ19pZCwKIAkJCQkJZXZlbnRfcmVxLT5ldl9yZXFfaWQpOwogCQlpZiAoIWV2dCkgewogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKIAkJCQkJIjI2MTcgRmFpbGVkIGFsbG9jYXRpb24gb2YgZXZlbnQgIgogCQkJCQkid2FpdGVyXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOworCQkJcmMgPSAtRU5PTUVNOworCQkJZ290byBqb2JfZXJyb3I7CiAJCX0KIAotCQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAJCWxpc3RfYWRkKCZldnQtPm5vZGUsICZwaGJhLT5jdF9ldl93YWl0ZXJzKTsKLQkJbHBmY19jdF9ldmVudF9yZWYoZXZ0KTsKLQkJbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCWxwZmNfYnNnX2V2ZW50X3JlZihldnQpOworCQlldnQtPndhaXRfdGltZV9zdGFtcCA9IGppZmZpZXM7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAl9CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCWV2dC0+d2FpdGluZyA9IDE7Ci0JaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShldnQtPndxLAotCQkJCSAgICAgIWxpc3RfZW1wdHkoJmV2dC0+ZXZlbnRzX3RvX3NlZSkpKSB7Ci0JCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKLQkJbHBmY19jdF9ldmVudF91bnJlZihldnQpOyAvKiByZWxlYXNlIHJlZiAqLwotCQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7IC8qIGRlbGV0ZSAqLwotCQltdXRleF91bmxvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKLQkJcmMgPSAtRUlOVFI7Ci0JCWdvdG8gc2V0X2V2ZW50X291dDsKLQl9CisJZGRfZGF0YS0+dHlwZSA9IFRZUEVfRVZUOworCWRkX2RhdGEtPmNvbnRleHRfdW4uZXZ0ID0gZXZ0OworCWV2dC0+c2V0X2pvYiA9IGpvYjsgLyogZm9yIHVuc29saWNpdGVkIGNvbW1hbmQgKi8KKwlqb2ItPmRkX2RhdGEgPSBkZF9kYXRhOyAvKiBmb3IgZmMgdHJhbnNwb3J0IHRpbWVvdXQgY2FsbGJhY2sqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsgLyogY2FsbCBqb2IgZG9uZSBsYXRlciAqLwogCi0JZXZ0LT53YWl0X3RpbWVfc3RhbXAgPSBqaWZmaWVzOwotCWV2dC0+d2FpdGluZyA9IDA7Citqb2JfZXJyb3I6CisJaWYgKGRkX2RhdGEgIT0gTlVMTCkKKwkJa2ZyZWUoZGRfZGF0YSk7CiAKLQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7Ci0JbGlzdF9tb3ZlKGV2dC0+ZXZlbnRzX3RvX3NlZS5wcmV2LCAmZXZ0LT5ldmVudHNfdG9fZ2V0KTsKLQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7IC8qIHJlbGVhc2UgcmVmICovCi0JbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7Ci0KLXNldF9ldmVudF9vdXQ6Ci0JLyogc2V0X2V2ZW50IGNhcnJpZXMgbm8gcmVwbHkgcGF5bG9hZCAqLwotCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7Ci0JLyogbWFrZSBlcnJvciBjb2RlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgKi8KLQlqb2ItPnJlcGx5LT5yZXN1bHQgPSByYzsKLQkvKiBjb21wbGV0ZSB0aGUgam9iIGJhY2sgdG8gdXNlcnNwYWNlICovCi0Jam9iLT5qb2JfZG9uZShqb2IpOwotCi0JcmV0dXJuIDA7CisJam9iLT5kZF9kYXRhID0gTlVMTDsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgotICogbHBmY19ic2dfZ2V0X2V2ZW50IC0gcHJvY2VzcyBhIEdFVF9FVkVOVCBic2cgdmVuZG9yIGNvbW1hbmQKKyAqIGxwZmNfYnNnX2hiYV9nZXRfZXZlbnQgLSBwcm9jZXNzIGEgR0VUX0VWRU5UIGJzZyB2ZW5kb3IgY29tbWFuZAogICogQGpvYjogR0VUX0VWRU5UIGZjX2JzZ19qb2IKLSAqLworICoqLwogc3RhdGljIGludAotbHBmY19ic2dfZ2V0X2V2ZW50KHN0cnVjdCBmY19ic2dfam9iICpqb2IpCitscGZjX2JzZ19oYmFfZ2V0X2V2ZW50KHN0cnVjdCBmY19ic2dfam9iICpqb2IpCiB7CiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CiAJc3RydWN0IGdldF9jdF9ldmVudCAqZXZlbnRfcmVxOwogCXN0cnVjdCBnZXRfY3RfZXZlbnRfcmVwbHkgKmV2ZW50X3JlcGx5OwotCXN0cnVjdCBscGZjX2N0X2V2ZW50ICpldnQ7CisJc3RydWN0IGxwZmNfYnNnX2V2ZW50ICpldnQ7CiAJc3RydWN0IGV2ZW50X2RhdGEgKmV2dF9kYXQgPSBOVUxMOwotCWludCByYyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1aW50MzJfdCByYyA9IDA7CiAKIAlpZiAoam9iLT5yZXF1ZXN0X2xlbiA8CiAJICAgIHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcXVlc3QpICsgc2l6ZW9mKHN0cnVjdCBnZXRfY3RfZXZlbnQpKSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCiAJCQkJIjI2MTMgUmVjZWl2ZWQgR0VUX0NUX0VWRU5UIHJlcXVlc3QgYmVsb3cgIgogCQkJCSJtaW5pbXVtIHNpemVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGpvYl9lcnJvcjsKIAl9CiAKIAlldmVudF9yZXEgPSAoc3RydWN0IGdldF9jdF9ldmVudCAqKQpAQCAtNzc0LDEzICsxMDg3LDEyIEBACiAKIAlldmVudF9yZXBseSA9IChzdHJ1Y3QgZ2V0X2N0X2V2ZW50X3JlcGx5ICopCiAJCWpvYi0+cmVwbHktPnJlcGx5X2RhdGEudmVuZG9yX3JlcGx5LnZlbmRvcl9yc3A7Ci0KLQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2dCwgJnBoYmEtPmN0X2V2X3dhaXRlcnMsIG5vZGUpIHsKIAkJaWYgKGV2dC0+cmVnX2lkID09IGV2ZW50X3JlcS0+ZXZfcmVnX2lkKSB7CiAJCQlpZiAobGlzdF9lbXB0eSgmZXZ0LT5ldmVudHNfdG9fZ2V0KSkKIAkJCQlicmVhazsKLQkJCWxwZmNfY3RfZXZlbnRfcmVmKGV2dCk7CisJCQlscGZjX2JzZ19ldmVudF9yZWYoZXZ0KTsKIAkJCWV2dC0+d2FpdF90aW1lX3N0YW1wID0gamlmZmllczsKIAkJCWV2dF9kYXQgPSBsaXN0X2VudHJ5KGV2dC0+ZXZlbnRzX3RvX2dldC5wcmV2LAogCQkJCQkgICAgIHN0cnVjdCBldmVudF9kYXRhLCBub2RlKTsKQEAgLTc4OCw0NSArMTEwMCwxNTM5IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQltdXRleF91bmxvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAKLQlpZiAoIWV2dF9kYXQpIHsKKwkvKiBUaGUgYXBwIG1heSBjb250aW51ZSB0byBhc2sgZm9yIGV2ZW50IGRhdGEgdW50aWwgaXQgZ2V0cworCSAqIGFuIGVycm9yIGluZGljYXRpbmcgdGhhdCB0aGVyZSBpc24ndCBhbnltb3JlCisJICovCisJaWYgKGV2dF9kYXQgPT0gTlVMTCkgewogCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOwogCQlyYyA9IC1FTk9FTlQ7Ci0JCWdvdG8gZXJyb3JfZ2V0X2V2ZW50X2V4aXQ7CisJCWdvdG8gam9iX2Vycm9yOwogCX0KIAotCWlmIChldnRfZGF0LT5sZW4gPiBqb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW4pIHsKLQkJZXZ0X2RhdC0+bGVuID0gam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuOwotCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKLQkJCQkJIjI2MTggVHJ1bmNhdGVkIGV2ZW50IGRhdGEgYXQgJWQgIgotCQkJCQkiYnl0ZXNcbiIsCi0JCQkJCWpvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbik7CisJaWYgKGV2dF9kYXQtPmxlbiA+IGpvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuKSB7CisJCWV2dF9kYXQtPmxlbiA9IGpvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuOworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNjE4IFRydW5jYXRlZCBldmVudCBkYXRhIGF0ICVkICIKKwkJCQkiYnl0ZXNcbiIsCisJCQkJam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW4pOwogCX0KIAorCWV2ZW50X3JlcGx5LT50eXBlID0gZXZ0X2RhdC0+dHlwZTsKIAlldmVudF9yZXBseS0+aW1tZWRfZGF0YSA9IGV2dF9kYXQtPmltbWVkX2RhdDsKLQogCWlmIChldnRfZGF0LT5sZW4gPiAwKQogCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQotCQkJc2dfY29weV9mcm9tX2J1ZmZlcihqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKLQkJCQkJICAgIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsCisJCQlzZ19jb3B5X2Zyb21fYnVmZmVyKGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJCQkJCSAgICBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsCiAJCQkJCSAgICBldnRfZGF0LT5kYXRhLCBldnRfZGF0LT5sZW4pOwogCWVsc2UKIAkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKLQlyYyA9IDA7CiAKLQlpZiAoZXZ0X2RhdCkKKwlpZiAoZXZ0X2RhdCkgewogCQlrZnJlZShldnRfZGF0LT5kYXRhKTsKLQlrZnJlZShldnRfZGF0KTsKLQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7Ci0JbHBmY19jdF9ldmVudF91bnJlZihldnQpOwotCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCQlrZnJlZShldnRfZGF0KTsKKwl9CiAKLWVycm9yX2dldF9ldmVudF9leGl0OgorCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJam9iLT5kZF9kYXRhID0gTlVMTDsKKwlqb2ItPnJlcGx5LT5yZXN1bHQgPSAwOworCWpvYi0+am9iX2RvbmUoam9iKTsKKwlyZXR1cm4gMDsKKworam9iX2Vycm9yOgorCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGxwZmNfaXNzdWVfY3RfcnNwX2NtcCAtIGxwZmNfaXNzdWVfY3RfcnNwJ3MgY29tcGxldGlvbiBoYW5kbGVyCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCisgKiBAY21kaW9jYnE6IFBvaW50ZXIgdG8gY29tbWFuZCBpb2NiLgorICogQHJzcGlvY2JxOiBQb2ludGVyIHRvIHJlc3BvbnNlIGlvY2IuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgY29tcGxldGlvbiBoYW5kbGVyIGZvciBpb2NicyBpc3N1ZWQgdXNpbmcKKyAqIGxwZmNfaXNzdWVfY3RfcnNwX2NtcCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlCisgKiByaW5nIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24gd2l0aG91dCBhbnkgbG9jayBoZWxkLiBUaGlzIGZ1bmN0aW9uCisgKiBjYW4gYmUgY2FsbGVkIGZyb20gYm90aCB3b3JrZXIgdGhyZWFkIGNvbnRleHQgYW5kIGludGVycnVwdAorICogY29udGV4dC4gVGhpcyBmdW5jdGlvbiBhbHNvIGNhbiBiZSBjYWxsZWQgZnJvbSBvdGhlciB0aHJlYWQgd2hpY2gKKyAqIGNsZWFucyB1cCB0aGUgU0xJIGxheWVyIG9iamVjdHMuCisgKiBUaGlzIGZ1bmN0aW9uIGNvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNwb25zZSBpb2NiIHRvIHRoZQorICogcmVzcG9uc2UgaW9jYiBtZW1vcnkgb2JqZWN0IHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIgb2YKKyAqIGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdCBhbmQgdGhlbiB3YWtlcyB1cCB0aGUgdGhyZWFkIHdoaWNoCisgKiBzbGVlcHMgZm9yIHRoZSBpb2NiIGNvbXBsZXRpb24uCisgKiovCitzdGF0aWMgdm9pZAorbHBmY19pc3N1ZV9jdF9yc3BfY21wKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwkJCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicSwKKwkJCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NicSkKK3sKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCXN0cnVjdCBmY19ic2dfam9iICpqb2I7CisJSU9DQl90ICpyc3A7CisJc3RydWN0IGxwZmNfZG1hYnVmICpibXA7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlkZF9kYXRhID0gY21kaW9jYnEtPmNvbnRleHQxOworCS8qIG5vcm1hbCBjb21wbGV0aW9uIGFuZCB0aW1lb3V0IGNyb3NzZWQgcGF0aHMsIGFscmVhZHkgZG9uZSAqLworCWlmICghZGRfZGF0YSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlqb2IgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2Iuc2V0X2pvYjsKKwlibXAgPSBkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IuYm1wOworCXJzcCA9ICZyc3Bpb2NicS0+aW9jYjsKKwluZGxwID0gZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLm5kbHA7CisKKwlwY2lfdW5tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQkgICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisKKwlpZiAocnNwLT51bHBTdGF0dXMpIHsKKwkJaWYgKHJzcC0+dWxwU3RhdHVzID09IElPU1RBVF9MT0NBTF9SRUpFQ1QpIHsKKwkJCXN3aXRjaCAocnNwLT51bi51bHBXb3JkWzRdICYgMHhmZikgeworCQkJY2FzZSBJT0VSUl9TRVFVRU5DRV9USU1FT1VUOgorCQkJCXJjID0gLUVUSU1FRE9VVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgSU9FUlJfSU5WQUxJRF9SUEk6CisJCQkJcmMgPSAtRUZBVUxUOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyYyA9IC1FQUNDRVM7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZQorCQkJcmMgPSAtRUFDQ0VTOworCX0gZWxzZQorCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQkJcnNwLT51bi5nZW5yZXE2NC5iZGwuYmRlU2l6ZTsKKworCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIGJtcC0+dmlydCwgYm1wLT5waHlzKTsKKwlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGNtZGlvY2JxKTsKKwlscGZjX25scF9wdXQobmRscCk7CisJa2ZyZWUoYm1wKTsKKwlrZnJlZShkZF9kYXRhKTsKIAkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLwogCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CiAJLyogY29tcGxldGUgdGhlIGpvYiBiYWNrIHRvIHVzZXJzcGFjZSAqLwogCWpvYi0+am9iX2RvbmUoam9iKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJcmV0dXJuOworfQorCisvKioKKyAqIGxwZmNfaXNzdWVfY3RfcnNwIC0gaXNzdWUgYSBjdCByZXNwb25zZQorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQGpvYjogUG9pbnRlciB0byB0aGUgam9iIG9iamVjdC4KKyAqIEB0YWc6IHRhZyBpbmRleCB2YWx1ZSBpbnRvIHRoZSBwb3J0cyBjb250ZXh0IGV4Y2hhbmdlIGFycmF5LgorICogQGJtcDogUG9pbnRlciB0byBhIGRtYSBidWZmZXIgZGVzY3JpcHRvci4KKyAqIEBudW1fZW50cnk6IE51bWJlciBvZiBlbnRpZXMgaW4gdGhlIGJkZS4KKyAqKi8KK3N0YXRpYyBpbnQKK2xwZmNfaXNzdWVfY3RfcnNwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGZjX2JzZ19qb2IgKmpvYiwgdWludDMyX3QgdGFnLAorCQkgIHN0cnVjdCBscGZjX2RtYWJ1ZiAqYm1wLCBpbnQgbnVtX2VudHJ5KQoreworCUlPQ0JfdCAqaWNtZDsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqY3Rpb2NiID0gTlVMTDsKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gTlVMTDsKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCXVpbnQzMl90IGNyZWdfdmFsOworCisJLyogYWxsb2NhdGUgb3VyIGJzZyB0cmFja2luZyBzdHJ1Y3R1cmUgKi8KKwlkZF9kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGJzZ19qb2JfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGRfZGF0YSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzM2IEZhaWxlZCBhbGxvY2F0aW9uIG9mIGRkX2RhdGFcbiIpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gbm9fZGRfZGF0YTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBidWZmZXIgZm9yICBjb21tYW5kIGlvY2IgKi8KKwljdGlvY2IgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CisJaWYgKCFjdGlvY2IpIHsKKwkJcmMgPSBFTk9NRU07CisJCWdvdG8gbm9fY3Rpb2NiOworCX0KKworCWljbWQgPSAmY3Rpb2NiLT5pb2NiOworCWljbWQtPnVuLnhzZXE2NC5iZGwudWxwSW9UYWczMiA9IDA7CisJaWNtZC0+dW4ueHNlcTY0LmJkbC5hZGRySGlnaCA9IHB1dFBhZGRySGlnaChibXAtPnBoeXMpOworCWljbWQtPnVuLnhzZXE2NC5iZGwuYWRkckxvdyA9IHB1dFBhZGRyTG93KGJtcC0+cGh5cyk7CisJaWNtZC0+dW4ueHNlcTY0LmJkbC5iZGVGbGFncyA9IEJVRkZfVFlQRV9CTFBfNjQ7CisJaWNtZC0+dW4ueHNlcTY0LmJkbC5iZGVTaXplID0gKG51bV9lbnRyeSAqIHNpemVvZihzdHJ1Y3QgdWxwX2JkZTY0KSk7CisJaWNtZC0+dW4ueHNlcTY0Lnc1Lmhjc3cuRmN0bCA9IChMUyB8IExBKTsKKwlpY21kLT51bi54c2VxNjQudzUuaGNzdy5EZmN0bCA9IDA7CisJaWNtZC0+dW4ueHNlcTY0Lnc1Lmhjc3cuUmN0bCA9IEZDX1JDVExfRERfU09MX0NUTDsKKwlpY21kLT51bi54c2VxNjQudzUuaGNzdy5UeXBlID0gRkNfVFlQRV9DVDsKKworCS8qIEZpbGwgaW4gcmVzdCBvZiBpb2NiICovCisJaWNtZC0+dWxwQ29tbWFuZCA9IENNRF9YTUlUX1NFUVVFTkNFNjRfQ1g7CisJaWNtZC0+dWxwQmRlQ291bnQgPSAxOworCWljbWQtPnVscExlID0gMTsKKwlpY21kLT51bHBDbGFzcyA9IENMQVNTMzsKKwlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7CisJCS8qIERvIG5vdCBpc3N1ZSB1bnNvbCByZXNwb25zZSBpZiBveGlkIG5vdCBtYXJrZWQgYXMgdmFsaWQgKi8KKwkJaWYgKCEocGhiYS0+Y3RfY3R4W3RhZ10uZmxhZ3MgJiBVTlNPTF9WQUxJRCkpIHsKKwkJCXJjID0gSU9DQl9FUlJPUjsKKwkJCWdvdG8gaXNzdWVfY3RfcnNwX2V4aXQ7CisJCX0KKwkJaWNtZC0+dWxwQ29udGV4dCA9IHBoYmEtPmN0X2N0eFt0YWddLm94aWQ7CisJCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLT5wcG9ydCwgcGhiYS0+Y3RfY3R4W3RhZ10uU0lEKTsKKwkJaWYgKCFuZGxwKSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfRUxTLAorCQkJCSAiMjcyMSBuZGxwIG51bGwgZm9yIG94aWQgJXggU0lEICV4XG4iLAorCQkJCQlpY21kLT51bHBDb250ZXh0LAorCQkJCQlwaGJhLT5jdF9jdHhbdGFnXS5TSUQpOworCQkJcmMgPSBJT0NCX0VSUk9SOworCQkJZ290byBpc3N1ZV9jdF9yc3BfZXhpdDsKKwkJfQorCQlpY21kLT51bi51bHBXb3JkWzNdID0gbmRscC0+bmxwX3JwaTsKKwkJLyogVGhlIGV4Y2hhbmdlIGlzIGRvbmUsIG1hcmsgdGhlIGVudHJ5IGFzIGludmFsaWQgKi8KKwkJcGhiYS0+Y3RfY3R4W3RhZ10uZmxhZ3MgJj0gflVOU09MX1ZBTElEOworCX0gZWxzZQorCQlpY21kLT51bHBDb250ZXh0ID0gKHVzaG9ydCkgdGFnOworCisJaWNtZC0+dWxwVGltZW91dCA9IHBoYmEtPmZjX3JhdG92ICogMjsKKworCS8qIFhtaXQgQ1QgcmVzcG9uc2Ugb24gZXhjaGFuZ2UgPHhpZD4gKi8KKwlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRUxTLAorCQkJIjI3MjIgWG1pdCBDVCByZXNwb25zZSBvbiBleGNoYW5nZSB4JXggRGF0YTogeCV4IHgleFxuIiwKKwkJCWljbWQtPnVscENvbnRleHQsIGljbWQtPnVscElvVGFnLCBwaGJhLT5saW5rX3N0YXRlKTsKKworCWN0aW9jYi0+aW9jYl9jbXBsID0gTlVMTDsKKwljdGlvY2ItPmlvY2JfZmxhZyB8PSBMUEZDX0lPX0xJQkRGQzsKKwljdGlvY2ItPnZwb3J0ID0gcGhiYS0+cHBvcnQ7CisJY3Rpb2NiLT5jb250ZXh0MyA9IGJtcDsKKworCWN0aW9jYi0+aW9jYl9jbXBsID0gbHBmY19pc3N1ZV9jdF9yc3BfY21wOworCWN0aW9jYi0+Y29udGV4dDEgPSBkZF9kYXRhOworCWN0aW9jYi0+Y29udGV4dDIgPSBOVUxMOworCWRkX2RhdGEtPnR5cGUgPSBUWVBFX0lPQ0I7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLmNtZGlvY2JxID0gY3Rpb2NiOworCWRkX2RhdGEtPmNvbnRleHRfdW4uaW9jYi5yc3Bpb2NicSA9IE5VTEw7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLnNldF9qb2IgPSBqb2I7CisJZGRfZGF0YS0+Y29udGV4dF91bi5pb2NiLmJtcCA9IGJtcDsKKwlkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2IubmRscCA9IG5kbHA7CisKKwlpZiAocGhiYS0+Y2ZnX3BvbGwgJiBESVNBQkxFX0ZDUF9SSU5HX0lOVCkgeworCQljcmVnX3ZhbCA9IHJlYWRsKHBoYmEtPkhDcmVnYWRkcik7CisJCWNyZWdfdmFsIHw9IChIQ19SMElOVF9FTkEgPDwgTFBGQ19GQ1BfUklORyk7CisJCXdyaXRlbChjcmVnX3ZhbCwgcGhiYS0+SENyZWdhZGRyKTsKKwkJcmVhZGwocGhiYS0+SENyZWdhZGRyKTsgLyogZmx1c2ggKi8KKwl9CisKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX2lvY2IocGhiYSwgTFBGQ19FTFNfUklORywgY3Rpb2NiLCAwKTsKKworCWlmIChyYyA9PSBJT0NCX1NVQ0NFU1MpCisJCXJldHVybiAwOyAvKiBkb25lIGZvciBub3cgKi8KKworaXNzdWVfY3RfcnNwX2V4aXQ6CisJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBjdGlvY2IpOworbm9fY3Rpb2NiOgorCWtmcmVlKGRkX2RhdGEpOworbm9fZGRfZGF0YToKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogbHBmY19ic2dfc2VuZF9tZ210X3JzcCAtIHByb2Nlc3MgYSBTRU5EX01HTVRfUkVTUCBic2cgdmVuZG9yIGNvbW1hbmQKKyAqIEBqb2I6IFNFTkRfTUdNVF9SRVNQIGZjX2JzZ19qb2IKKyAqKi8KK3N0YXRpYyBpbnQKK2xwZmNfYnNnX3NlbmRfbWdtdF9yc3Aoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKK3sKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKilqb2ItPnNob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSB2cG9ydC0+cGhiYTsKKwlzdHJ1Y3Qgc2VuZF9tZ210X3Jlc3AgKm1nbXRfcmVzcCA9IChzdHJ1Y3Qgc2VuZF9tZ210X3Jlc3AgKikKKwkJam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZDsKKwlzdHJ1Y3QgdWxwX2JkZTY0ICpicGw7CisJc3RydWN0IGxwZmNfZG1hYnVmICpibXAgPSBOVUxMOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dlbCA9IE5VTEw7CisJaW50IHJlcXVlc3RfbnNlZzsKKwlpbnQgbnVtYmRlOworCWRtYV9hZGRyX3QgYnVzYWRkcjsKKwl1aW50MzJfdCB0YWcgPSBtZ210X3Jlc3AtPnRhZzsKKwl1bnNpZ25lZCBsb25nIHJlcWJmcmNudCA9CisJCQkodW5zaWduZWQgbG9uZylqb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbjsKKwlpbnQgcmMgPSAwOworCisJLyogaW4gY2FzZSBubyBkYXRhIGlzIHRyYW5zZmVycmVkICovCisJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKworCWlmICghcmVxYmZyY250IHx8IChyZXFiZnJjbnQgPiAoODAgKiBCVUZfU1pfNEspKSkgeworCQlyYyA9IC1FUkFOR0U7CisJCWdvdG8gc2VuZF9tZ210X3JzcF9leGl0OworCX0KKworCWJtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX2RtYWJ1ZiksIEdGUF9LRVJORUwpOworCWlmICghYm1wKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBzZW5kX21nbXRfcnNwX2V4aXQ7CisJfQorCisJYm1wLT52aXJ0ID0gbHBmY19tYnVmX2FsbG9jKHBoYmEsIDAsICZibXAtPnBoeXMpOworCWlmICghYm1wLT52aXJ0KSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBzZW5kX21nbXRfcnNwX2ZyZWVfYm1wOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZibXAtPmxpc3QpOworCWJwbCA9IChzdHJ1Y3QgdWxwX2JkZTY0ICopIGJtcC0+dmlydDsKKwlyZXF1ZXN0X25zZWcgPSBwY2lfbWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJCQkgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJZm9yX2VhY2hfc2coam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwgc2dlbCwgcmVxdWVzdF9uc2VnLCBudW1iZGUpIHsKKwkJYnVzYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnZWwpOworCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV82NDsKKwkJYnBsLT50dXMuZi5iZGVTaXplID0gc2dfZG1hX2xlbihzZ2VsKTsKKwkJYnBsLT50dXMudyA9IGNwdV90b19sZTMyKGJwbC0+dHVzLncpOworCQlicGwtPmFkZHJMb3cgPSBjcHVfdG9fbGUzMihwdXRQYWRkckxvdyhidXNhZGRyKSk7CisJCWJwbC0+YWRkckhpZ2ggPSBjcHVfdG9fbGUzMihwdXRQYWRkckhpZ2goYnVzYWRkcikpOworCQlicGwrKzsKKwl9CisKKwlyYyA9IGxwZmNfaXNzdWVfY3RfcnNwKHBoYmEsIGpvYiwgdGFnLCBibXAsIHJlcXVlc3RfbnNlZyk7CisKKwlpZiAocmMgPT0gSU9DQl9TVUNDRVNTKQorCQlyZXR1cm4gMDsgLyogZG9uZSBmb3Igbm93ICovCisKKwkvKiBUQkQgbmVlZCB0byBoYW5kbGUgYSB0aW1lb3V0ICovCisJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJCSAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwlyYyA9IC1FQUNDRVM7CisJbHBmY19tYnVmX2ZyZWUocGhiYSwgYm1wLT52aXJ0LCBibXAtPnBoeXMpOworCitzZW5kX21nbXRfcnNwX2ZyZWVfYm1wOgorCWtmcmVlKGJtcCk7CitzZW5kX21nbXRfcnNwX2V4aXQ6CisJLyogbWFrZSBlcnJvciBjb2RlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgKi8KKwlqb2ItPnJlcGx5LT5yZXN1bHQgPSByYzsKKwlqb2ItPmRkX2RhdGEgPSBOVUxMOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBscGZjX2JzZ19kaWFnX21vZGUgLSBwcm9jZXNzIGEgTFBGQ19CU0dfVkVORE9SX0RJQUdfTU9ERSBic2cgdmVuZG9yIGNvbW1hbmQKKyAqIEBqb2I6IExQRkNfQlNHX1ZFTkRPUl9ESUFHX01PREUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBwbGFjaW5nIGEgcG9ydCBpbnRvIGRpYWdub3N0aWMgbG9vcGJhY2sKKyAqIG1vZGUgaW4gb3JkZXIgdG8gcGVyZm9ybSBhIGRpYWdub3N0aWMgbG9vcGJhY2sgdGVzdC4KKyAqIEFsbCBuZXcgc2NzaSByZXF1ZXN0cyBhcmUgYmxvY2tlZCwgYSBzbWFsbCBkZWxheSBpcyB1c2VkIHRvIGFsbG93IHRoZQorICogc2NzaSByZXF1ZXN0cyB0byBjb21wbGV0ZSB0aGVuIHRoZSBsaW5rIGlzIGJyb3VnaHQgZG93bi4gSWYgdGhlIGxpbmsgaXMKKyAqIGlzIHBsYWNlZCBpbiBsb29wYmFjayBtb2RlIHRoZW4gc2NzaSByZXF1ZXN0cyBhcmUgYWdhaW4gYWxsb3dlZAorICogc28gdGhlIHNjc2kgbWlkLWxheWVyIGRvZXNuJ3QgZ2l2ZSB1cCBvbiB0aGUgcG9ydC4KKyAqIEFsbCBvZiB0aGlzIGlzIGRvbmUgaW4tbGluZS4KKyAqLworc3RhdGljIGludAorbHBmY19ic2dfZGlhZ19tb2RlKHN0cnVjdCBmY19ic2dfam9iICpqb2IpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBqb2ItPnNob3N0OworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCXN0cnVjdCBkaWFnX21vZGVfc2V0ICpsb29wYmFja19tb2RlOworCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7CisJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nID0gJnBzbGktPnJpbmdbTFBGQ19GQ1BfUklOR107CisJdWludDMyX3QgbGlua19mbGFnczsKKwl1aW50MzJfdCB0aW1lb3V0OworCXN0cnVjdCBscGZjX3Zwb3J0ICoqdnBvcnRzOworCUxQRkNfTUJPWFFfdCAqcG1ib3hxOworCWludCBtYnhzdGF0dXM7CisJaW50IGkgPSAwOworCWludCByYyA9IDA7CisKKwkvKiBubyBkYXRhIHRvIHJldHVybiBqdXN0IHRoZSByZXR1cm4gY29kZSAqLworCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisKKwlpZiAoam9iLT5yZXF1ZXN0X2xlbiA8CisJICAgIHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcXVlc3QpICsgc2l6ZW9mKHN0cnVjdCBkaWFnX21vZGVfc2V0KSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzM4IFJlY2VpdmVkIERJQUcgTU9ERSByZXF1ZXN0IGJlbG93IG1pbmltdW0gIgorCQkJCSJzaXplXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGpvYl9lcnJvcjsKKwl9CisKKwlsb29wYmFja19tb2RlID0gKHN0cnVjdCBkaWFnX21vZGVfc2V0ICopCisJCWpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQ7CisJbGlua19mbGFncyA9IGxvb3BiYWNrX21vZGUtPnR5cGU7CisJdGltZW91dCA9IGxvb3BiYWNrX21vZGUtPnRpbWVvdXQ7CisKKwlpZiAoKHBoYmEtPmxpbmtfc3RhdGUgPT0gTFBGQ19IQkFfRVJST1IpIHx8CisJICAgIChwc2xpLT5zbGlfZmxhZyAmIExQRkNfQkxPQ0tfTUdNVF9JTykgfHwKKwkgICAgKCEocHNsaS0+c2xpX2ZsYWcgJiBMUEZDX1NMSV9BQ1RJVkUpKSkgeworCQlyYyA9IC1FQUNDRVM7CisJCWdvdG8gam9iX2Vycm9yOworCX0KKworCXBtYm94cSA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbWJveHEpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGpvYl9lcnJvcjsKKwl9CisKKwl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOworCWlmICh2cG9ydHMpIHsKKwkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBpICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKKwkJCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0c1tpXSk7CisJCQlzY3NpX2Jsb2NrX3JlcXVlc3RzKHNob3N0KTsKKwkJfQorCisJCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CisJfSBlbHNlIHsKKwkJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQocGhiYS0+cHBvcnQpOworCQlzY3NpX2Jsb2NrX3JlcXVlc3RzKHNob3N0KTsKKwl9CisKKwl3aGlsZSAocHJpbmctPnR4Y21wbHFfY250KSB7CisJCWlmIChpKysgPiA1MDApCS8qIHdhaXQgdXAgdG8gNSBzZWNvbmRzICovCisJCQlicmVhazsKKworCQltc2xlZXAoMTApOworCX0KKworCW1lbXNldCgodm9pZCAqKXBtYm94cSwgMCwgc2l6ZW9mKExQRkNfTUJPWFFfdCkpOworCXBtYm94cS0+dS5tYi5tYnhDb21tYW5kID0gTUJYX0RPV05fTElOSzsKKwlwbWJveHEtPnUubWIubWJ4T3duZXIgPSBPV05fSE9TVDsKKworCW1ieHN0YXR1cyA9IGxwZmNfc2xpX2lzc3VlX21ib3hfd2FpdChwaGJhLCBwbWJveHEsIExQRkNfTUJPWF9UTU8pOworCisJaWYgKChtYnhzdGF0dXMgPT0gTUJYX1NVQ0NFU1MpICYmIChwbWJveHEtPnUubWIubWJ4U3RhdHVzID09IDApKSB7CisJCS8qIHdhaXQgZm9yIGxpbmsgZG93biBiZWZvcmUgcHJvY2VlZGluZyAqLworCQlpID0gMDsKKwkJd2hpbGUgKHBoYmEtPmxpbmtfc3RhdGUgIT0gTFBGQ19MSU5LX0RPV04pIHsKKwkJCWlmIChpKysgPiB0aW1lb3V0KSB7CisJCQkJcmMgPSAtRVRJTUVET1VUOworCQkJCWdvdG8gbG9vcGJhY2tfbW9kZV9leGl0OworCQkJfQorCisJCQltc2xlZXAoMTApOworCQl9CisKKwkJbWVtc2V0KCh2b2lkICopcG1ib3hxLCAwLCBzaXplb2YoTFBGQ19NQk9YUV90KSk7CisJCWlmIChsaW5rX2ZsYWdzID09IElOVEVSTkFMX0xPT1BfQkFDSykKKwkJCXBtYm94cS0+dS5tYi51bi52YXJJbml0TG5rLmxpbmtfZmxhZ3MgPSBGTEFHU19MT0NBTF9MQjsKKwkJZWxzZQorCQkJcG1ib3hxLT51Lm1iLnVuLnZhckluaXRMbmsubGlua19mbGFncyA9CisJCQkJRkxBR1NfVE9QT0xPR1lfTU9ERV9MT09QOworCisJCXBtYm94cS0+dS5tYi5tYnhDb21tYW5kID0gTUJYX0lOSVRfTElOSzsKKwkJcG1ib3hxLT51Lm1iLm1ieE93bmVyID0gT1dOX0hPU1Q7CisKKwkJbWJ4c3RhdHVzID0gbHBmY19zbGlfaXNzdWVfbWJveF93YWl0KHBoYmEsIHBtYm94cSwKKwkJCQkJCSAgICAgTFBGQ19NQk9YX1RNTyk7CisKKwkJaWYgKChtYnhzdGF0dXMgIT0gTUJYX1NVQ0NFU1MpIHx8IChwbWJveHEtPnUubWIubWJ4U3RhdHVzKSkKKwkJCXJjID0gLUVOT0RFVjsKKwkJZWxzZSB7CisJCQlwaGJhLT5saW5rX2ZsYWcgfD0gTFNfTE9PUEJBQ0tfTU9ERTsKKwkJCS8qIHdhaXQgZm9yIHRoZSBsaW5rIGF0dGVudGlvbiBpbnRlcnJ1cHQgKi8KKwkJCW1zbGVlcCgxMDApOworCisJCQlpID0gMDsKKwkJCXdoaWxlIChwaGJhLT5saW5rX3N0YXRlICE9IExQRkNfSEJBX1JFQURZKSB7CisJCQkJaWYgKGkrKyA+IHRpbWVvdXQpIHsKKwkJCQkJcmMgPSAtRVRJTUVET1VUOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQltc2xlZXAoMTApOworCQkJfQorCQl9CisKKwl9IGVsc2UKKwkJcmMgPSAtRU5PREVWOworCitsb29wYmFja19tb2RlX2V4aXQ6CisJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKKwlpZiAodnBvcnRzKSB7CisJCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3ZwaSAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKSB7CisJCQlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pOworCQkJc2NzaV91bmJsb2NrX3JlcXVlc3RzKHNob3N0KTsKKwkJfQorCQlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOworCX0gZWxzZSB7CisJCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHBoYmEtPnBwb3J0KTsKKwkJc2NzaV91bmJsb2NrX3JlcXVlc3RzKHNob3N0KTsKKwl9CisKKwkvKgorCSAqIExldCBTTEkgbGF5ZXIgcmVsZWFzZSBtYm94cSBpZiBtYm94IGNvbW1hbmQgY29tcGxldGVkIGFmdGVyIHRpbWVvdXQuCisJICovCisJaWYgKG1ieHN0YXR1cyAhPSBNQlhfVElNRU9VVCkKKwkJbWVtcG9vbF9mcmVlKHBtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisKK2pvYl9lcnJvcjoKKwkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCS8qIGNvbXBsZXRlIHRoZSBqb2IgYmFjayB0byB1c2Vyc3BhY2UgaWYgbm8gZXJyb3IgKi8KKwlpZiAocmMgPT0gMCkKKwkJam9iLT5qb2JfZG9uZShqb2IpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBscGZjZGlhZ19sb29wX3NlbGZfcmVnIC0gb2J0YWlucyBhIHJlbW90ZSBwb3J0IGxvZ2luIGlkCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QKKyAqIEBycGk6IFBvaW50ZXIgdG8gYSByZW1vdGUgcG9ydCBsb2dpbiBpZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gb2J0YWlucyBhIHJlbW90ZSBwb3J0IGxvZ2luIGlkIHNvIHRoZSBkaWFnIGxvb3BiYWNrIHRlc3QKKyAqIGNhbiBzZW5kIGFuZCByZWNlaXZlIGl0cyBvd24gdW5zb2xpY2l0ZWQgQ1QgY29tbWFuZC4KKyAqKi8KK3N0YXRpYyBpbnQgbHBmY2RpYWdfbG9vcF9zZWxmX3JlZyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQxNl90ICogcnBpKQoreworCUxQRkNfTUJPWFFfdCAqbWJveDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKmRtYWJ1ZmY7CisJaW50IHN0YXR1czsKKworCW1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOworCWlmICghbWJveCkKKwkJcmV0dXJuIEVOT01FTTsKKworCXN0YXR1cyA9IGxwZmNfcmVnX3JwaShwaGJhLCAwLCBwaGJhLT5wcG9ydC0+ZmNfbXlESUQsCisJCQkJKHVpbnQ4X3QgKikmcGhiYS0+cHBvcnQtPmZjX3NwYXJhbSwgbWJveCwgMCk7CisJaWYgKHN0YXR1cykgeworCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCXJldHVybiBFTk9NRU07CisJfQorCisJZG1hYnVmZiA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgbWJveC0+Y29udGV4dDE7CisJbWJveC0+Y29udGV4dDEgPSBOVUxMOworCXN0YXR1cyA9IGxwZmNfc2xpX2lzc3VlX21ib3hfd2FpdChwaGJhLCBtYm94LCBMUEZDX01CT1hfVE1PKTsKKworCWlmICgoc3RhdHVzICE9IE1CWF9TVUNDRVNTKSB8fCAobWJveC0+dS5tYi5tYnhTdGF0dXMpKSB7CisJCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIGRtYWJ1ZmYtPnZpcnQsIGRtYWJ1ZmYtPnBoeXMpOworCQlrZnJlZShkbWFidWZmKTsKKwkJaWYgKHN0YXR1cyAhPSBNQlhfVElNRU9VVCkKKwkJCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJcmV0dXJuIEVOT0RFVjsKKwl9CisKKwkqcnBpID0gbWJveC0+dS5tYi51bi52YXJXb3Jkc1swXTsKKworCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIGRtYWJ1ZmYtPnZpcnQsIGRtYWJ1ZmYtPnBoeXMpOworCWtmcmVlKGRtYWJ1ZmYpOworCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBscGZjZGlhZ19sb29wX3NlbGZfdW5yZWcgLSB1bnJlZ3MgZnJvbSB0aGUgcnBpCisgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QKKyAqIEBycGk6IFJlbW90ZSBwb3J0IGxvZ2luIGlkCisgKgorICogVGhpcyBmdW5jdGlvbiB1bnJlZ2lzdGVycyB0aGUgcnBpIG9idGFpbmVkIGluIGxwZmNkaWFnX2xvb3Bfc2VsZl9yZWcKKyAqKi8KK3N0YXRpYyBpbnQgbHBmY2RpYWdfbG9vcF9zZWxmX3VucmVnKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgdWludDE2X3QgcnBpKQoreworCUxQRkNfTUJPWFFfdCAqbWJveDsKKwlpbnQgc3RhdHVzOworCisJLyogQWxsb2NhdGUgbWJveHEgc3RydWN0dXJlICovCisJbWJveCA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKG1ib3ggPT0gTlVMTCkKKwkJcmV0dXJuIEVOT01FTTsKKworCWxwZmNfdW5yZWdfbG9naW4ocGhiYSwgMCwgcnBpLCBtYm94KTsKKwlzdGF0dXMgPSBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQocGhiYSwgbWJveCwgTFBGQ19NQk9YX1RNTyk7CisKKwlpZiAoKHN0YXR1cyAhPSBNQlhfU1VDQ0VTUykgfHwgKG1ib3gtPnUubWIubWJ4U3RhdHVzKSkgeworCQlpZiAoc3RhdHVzICE9IE1CWF9USU1FT1VUKQorCQkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlyZXR1cm4gRUlPOworCX0KKworCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBscGZjZGlhZ19sb29wX2dldF94cmkgLSBvYnRhaW5zIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBpZHMKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdAorICogQHJwaTogUmVtb3RlIHBvcnQgbG9naW4gaWQKKyAqIEB0eHhyaTogUG9pbnRlciB0byB0cmFuc21pdCBleGNoYW5nZSBpZAorICogQHJ4eHJpOiBQb2ludGVyIHRvIHJlc3BvbnNlIGV4Y2hhYmdlIGlkCisgKgorICogVGhpcyBmdW5jdGlvbiBvYnRhaW5zIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBpZHMgcmVxdWlyZWQgdG8gc2VuZAorICogYW4gdW5zb2xpY2l0ZWQgY3QgY29tbWFuZCB3aXRoIGEgcGF5bG9hZC4gQSBzcGVjaWFsIGxwZmMgRnNUeXBlIGFuZCBDbWRSc3AKKyAqIGZsYWdzIGFyZSB1c2VkIHRvIHRoZSB1bnNvbGljdGVkIHJlc3BvbnNlIGhhbmRsZXIgaXMgYWJsZSB0byBwcm9jZXNzCisgKiB0aGUgY3QgY29tbWFuZCBzZW50IG9uIHRoZSBzYW1lIHBvcnQuCisgKiovCitzdGF0aWMgaW50IGxwZmNkaWFnX2xvb3BfZ2V0X3hyaShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQxNl90IHJwaSwKKwkJCSB1aW50MTZfdCAqdHh4cmksIHVpbnQxNl90ICogcnh4cmkpCit7CisJc3RydWN0IGxwZmNfYnNnX2V2ZW50ICpldnQ7CisJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2JxLCAqcnNwaW9jYnE7CisJSU9DQl90ICpjbWQsICpyc3A7CisJc3RydWN0IGxwZmNfZG1hYnVmICpkbWFidWY7CisJc3RydWN0IHVscF9iZGU2NCAqYnBsID0gTlVMTDsKKwlzdHJ1Y3QgbHBmY19zbGlfY3RfcmVxdWVzdCAqY3RyZXEgPSBOVUxMOworCWludCByZXRfdmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJKnR4eHJpID0gMDsKKwkqcnh4cmkgPSAwOworCWV2dCA9IGxwZmNfYnNnX2V2ZW50X25ldyhGQ19SRUdfQ1RfRVZFTlQsIGN1cnJlbnQtPnBpZCwKKwkJCQlTTElfQ1RfRUxYX0xPT1BCQUNLKTsKKwlpZiAoIWV2dCkKKwkJcmV0dXJuIEVOT01FTTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJmV2dC0+bm9kZSwgJnBoYmEtPmN0X2V2X3dhaXRlcnMpOworCWxwZmNfYnNnX2V2ZW50X3JlZihldnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKworCWNtZGlvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHBoYmEpOworCXJzcGlvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHBoYmEpOworCisJZG1hYnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxwZmNfZG1hYnVmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRtYWJ1ZikgeworCQlkbWFidWYtPnZpcnQgPSBscGZjX21idWZfYWxsb2MocGhiYSwgMCwgJmRtYWJ1Zi0+cGh5cyk7CisJCUlOSVRfTElTVF9IRUFEKCZkbWFidWYtPmxpc3QpOworCQlicGwgPSAoc3RydWN0IHVscF9iZGU2NCAqKSBkbWFidWYtPnZpcnQ7CisJCW1lbXNldChicGwsIDAsIHNpemVvZigqYnBsKSk7CisJCWN0cmVxID0gKHN0cnVjdCBscGZjX3NsaV9jdF9yZXF1ZXN0ICopKGJwbCArIDEpOworCQlicGwtPmFkZHJIaWdoID0KKwkJCWxlMzJfdG9fY3B1KHB1dFBhZGRySGlnaChkbWFidWYtPnBoeXMgKyBzaXplb2YoKmJwbCkpKTsKKwkJYnBsLT5hZGRyTG93ID0KKwkJCWxlMzJfdG9fY3B1KHB1dFBhZGRyTG93KGRtYWJ1Zi0+cGh5cyArIHNpemVvZigqYnBsKSkpOworCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gMDsKKwkJYnBsLT50dXMuZi5iZGVTaXplID0gRUxYX0xPT1BCQUNLX0hFQURFUl9TWjsKKwkJYnBsLT50dXMudyA9IGxlMzJfdG9fY3B1KGJwbC0+dHVzLncpOworCX0KKworCWlmIChjbWRpb2NicSA9PSBOVUxMIHx8IHJzcGlvY2JxID09IE5VTEwgfHwKKwkgICAgZG1hYnVmID09IE5VTEwgfHwgYnBsID09IE5VTEwgfHwgY3RyZXEgPT0gTlVMTCkgeworCQlyZXRfdmFsID0gRU5PTUVNOworCQlnb3RvIGVycl9nZXRfeHJpX2V4aXQ7CisJfQorCisJY21kID0gJmNtZGlvY2JxLT5pb2NiOworCXJzcCA9ICZyc3Bpb2NicS0+aW9jYjsKKworCW1lbXNldChjdHJlcSwgMCwgRUxYX0xPT1BCQUNLX0hFQURFUl9TWik7CisKKwljdHJlcS0+UmV2aXNpb25JZC5iaXRzLlJldmlzaW9uID0gU0xJX0NUX1JFVklTSU9OOworCWN0cmVxLT5SZXZpc2lvbklkLmJpdHMuSW5JZCA9IDA7CisJY3RyZXEtPkZzVHlwZSA9IFNMSV9DVF9FTFhfTE9PUEJBQ0s7CisJY3RyZXEtPkZzU3ViVHlwZSA9IDA7CisJY3RyZXEtPkNvbW1hbmRSZXNwb25zZS5iaXRzLkNtZFJzcCA9IEVMWF9MT09QQkFDS19YUklfU0VUVVA7CisJY3RyZXEtPkNvbW1hbmRSZXNwb25zZS5iaXRzLlNpemUgPSAwOworCisKKwljbWQtPnVuLnhzZXE2NC5iZGwuYWRkckhpZ2ggPSBwdXRQYWRkckhpZ2goZG1hYnVmLT5waHlzKTsKKwljbWQtPnVuLnhzZXE2NC5iZGwuYWRkckxvdyA9IHB1dFBhZGRyTG93KGRtYWJ1Zi0+cGh5cyk7CisJY21kLT51bi54c2VxNjQuYmRsLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JMUF82NDsKKwljbWQtPnVuLnhzZXE2NC5iZGwuYmRlU2l6ZSA9IHNpemVvZigqYnBsKTsKKworCWNtZC0+dW4ueHNlcTY0Lnc1Lmhjc3cuRmN0bCA9IExBOworCWNtZC0+dW4ueHNlcTY0Lnc1Lmhjc3cuRGZjdGwgPSAwOworCWNtZC0+dW4ueHNlcTY0Lnc1Lmhjc3cuUmN0bCA9IEZDX1JDVExfRERfVU5TT0xfQ1RMOworCWNtZC0+dW4ueHNlcTY0Lnc1Lmhjc3cuVHlwZSA9IEZDX1RZUEVfQ1Q7CisKKwljbWQtPnVscENvbW1hbmQgPSBDTURfWE1JVF9TRVFVRU5DRTY0X0NSOworCWNtZC0+dWxwQmRlQ291bnQgPSAxOworCWNtZC0+dWxwTGUgPSAxOworCWNtZC0+dWxwQ2xhc3MgPSBDTEFTUzM7CisJY21kLT51bHBDb250ZXh0ID0gcnBpOworCisJY21kaW9jYnEtPmlvY2JfZmxhZyB8PSBMUEZDX0lPX0xJQkRGQzsKKwljbWRpb2NicS0+dnBvcnQgPSBwaGJhLT5wcG9ydDsKKworCXJldF92YWwgPSBscGZjX3NsaV9pc3N1ZV9pb2NiX3dhaXQocGhiYSwgTFBGQ19FTFNfUklORywgY21kaW9jYnEsCisJCQkJcnNwaW9jYnEsCisJCQkJKHBoYmEtPmZjX3JhdG92ICogMikKKwkJCQkrIExQRkNfRFJWUl9USU1FT1VUKTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBlcnJfZ2V0X3hyaV9leGl0OworCisJKnR4eHJpID0gIHJzcC0+dWxwQ29udGV4dDsKKworCWV2dC0+d2FpdGluZyA9IDE7CisJZXZ0LT53YWl0X3RpbWVfc3RhbXAgPSBqaWZmaWVzOworCXJldF92YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJZXZ0LT53cSwgIWxpc3RfZW1wdHkoJmV2dC0+ZXZlbnRzX3RvX3NlZSksCisJCSgocGhiYS0+ZmNfcmF0b3YgKiAyKSArIExQRkNfRFJWUl9USU1FT1VUKSAqIEhaKTsKKwlpZiAobGlzdF9lbXB0eSgmZXZ0LT5ldmVudHNfdG9fc2VlKSkKKwkJcmV0X3ZhbCA9IChyZXRfdmFsKSA/IEVJTlRSIDogRVRJTUVET1VUOworCWVsc2UgeworCQlyZXRfdmFsID0gSU9DQl9TVUNDRVNTOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQlsaXN0X21vdmUoZXZ0LT5ldmVudHNfdG9fc2VlLnByZXYsICZldnQtPmV2ZW50c190b19nZXQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCSpyeHhyaSA9IChsaXN0X2VudHJ5KGV2dC0+ZXZlbnRzX3RvX2dldC5wcmV2LAorCQkJCSAgICAgdHlwZW9mKHN0cnVjdCBldmVudF9kYXRhKSwKKwkJCQkgICAgIG5vZGUpKS0+aW1tZWRfZGF0OworCX0KKwlldnQtPndhaXRpbmcgPSAwOworCitlcnJfZ2V0X3hyaV9leGl0OgorCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsgLyogcmVsZWFzZSByZWYgKi8KKwlscGZjX2JzZ19ldmVudF91bnJlZihldnQpOyAvKiBkZWxldGUgKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisKKwlpZiAoZG1hYnVmKSB7CisJCWlmIChkbWFidWYtPnZpcnQpCisJCQlscGZjX21idWZfZnJlZShwaGJhLCBkbWFidWYtPnZpcnQsIGRtYWJ1Zi0+cGh5cyk7CisJCWtmcmVlKGRtYWJ1Zik7CisJfQorCisJaWYgKGNtZGlvY2JxICYmIChyZXRfdmFsICE9IElPQ0JfVElNRURPVVQpKQorCQlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGNtZGlvY2JxKTsKKwlpZiAocnNwaW9jYnEpCisJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgcnNwaW9jYnEpOworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqIGRpYWdfY21kX2RhdGFfYWxsb2MgLSBmaWxscyBpbiBhIGJkZSBzdHJ1Y3Qgd2l0aCBkbWEgYnVmZmVycworICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0CisgKiBAYnBsOiBQb2ludGVyIHRvIDY0IGJpdCBiZGUgc3RydWN0dXJlCisgKiBAc2l6ZTogTnVtYmVyIG9mIGJ5dGVzIHRvIHByb2Nlc3MKKyAqIEBub2NvcHlkYXRhOiBGbGFnIHRvIGNvcHkgdXNlciBkYXRhIGludG8gdGhlIGFsbG9jYXRlZCBidWZmZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBwYWdlIHNpemUgYnVmZmVycyBhbmQgcG9wdWxhdGVzIGFuIGxwZmNfZG1hYnVmZXh0LgorICogSWYgYWxsb3dlZCB0aGUgdXNlciBkYXRhIHBvaW50ZWQgdG8gd2l0aCBpbmRhdGFwdHIgaXMgY29waWVkIGludG8gdGhlIGtlcm5lbAorICogbWVtb3J5LiBUaGUgY2hhaW5lZCBsaXN0IG9mIHBhZ2Ugc2l6ZSBidWZmZXJzIGlzIHJldHVybmVkLgorICoqLworc3RhdGljIHN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqCitkaWFnX2NtZF9kYXRhX2FsbG9jKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwkJICAgc3RydWN0IHVscF9iZGU2NCAqYnBsLCB1aW50MzJfdCBzaXplLAorCQkgICBpbnQgbm9jb3B5ZGF0YSkKK3sKKwlzdHJ1Y3QgbHBmY19kbWFidWZleHQgKm1saXN0ID0gTlVMTDsKKwlzdHJ1Y3QgbHBmY19kbWFidWZleHQgKmRtcDsKKwlpbnQgY250LCBvZmZzZXQgPSAwLCBpID0gMDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCisJcGNpZGV2ID0gcGhiYS0+cGNpZGV2OworCisJd2hpbGUgKHNpemUpIHsKKwkJLyogV2UgZ2V0IGNodW5rcyBvZiA0SyAqLworCQlpZiAoc2l6ZSA+IEJVRl9TWl80SykKKwkJCWNudCA9IEJVRl9TWl80SzsKKwkJZWxzZQorCQkJY250ID0gc2l6ZTsKKworCQkvKiBhbGxvY2F0ZSBzdHJ1Y3QgbHBmY19kbWFidWZleHQgYnVmZmVyIGhlYWRlciAqLworCQlkbXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbHBmY19kbWFidWZleHQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkbXApCisJCQlnb3RvIG91dDsKKworCQlJTklUX0xJU1RfSEVBRCgmZG1wLT5kbWEubGlzdCk7CisKKwkJLyogUXVldWUgaXQgdG8gYSBsaW5rZWQgbGlzdCAqLworCQlpZiAobWxpc3QpCisJCQlsaXN0X2FkZF90YWlsKCZkbXAtPmRtYS5saXN0LCAmbWxpc3QtPmRtYS5saXN0KTsKKwkJZWxzZQorCQkJbWxpc3QgPSBkbXA7CisKKwkJLyogYWxsb2NhdGUgYnVmZmVyICovCisJCWRtcC0+ZG1hLnZpcnQgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBjaWRldi0+ZGV2LAorCQkJCQkJICAgY250LAorCQkJCQkJICAgJihkbXAtPmRtYS5waHlzKSwKKwkJCQkJCSAgIEdGUF9LRVJORUwpOworCisJCWlmICghZG1wLT5kbWEudmlydCkKKwkJCWdvdG8gb3V0OworCisJCWRtcC0+c2l6ZSA9IGNudDsKKworCQlpZiAobm9jb3B5ZGF0YSkgeworCQkJYnBsLT50dXMuZi5iZGVGbGFncyA9IDA7CisJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocGhiYS0+cGNpZGV2LAorCQkJCWRtcC0+ZG1hLnBoeXMsIExQRkNfQlBMX1NJWkUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJCX0gZWxzZSB7CisJCQltZW1zZXQoKHVpbnQ4X3QgKilkbXAtPmRtYS52aXJ0LCAwLCBjbnQpOworCQkJYnBsLT50dXMuZi5iZGVGbGFncyA9IEJVRkZfVFlQRV9CREVfNjRJOworCQl9CisKKwkJLyogYnVpbGQgYnVmZmVyIHB0ciBsaXN0IGZvciBJT0NCICovCisJCWJwbC0+YWRkckxvdyA9IGxlMzJfdG9fY3B1KHB1dFBhZGRyTG93KGRtcC0+ZG1hLnBoeXMpKTsKKwkJYnBsLT5hZGRySGlnaCA9IGxlMzJfdG9fY3B1KHB1dFBhZGRySGlnaChkbXAtPmRtYS5waHlzKSk7CisJCWJwbC0+dHVzLmYuYmRlU2l6ZSA9ICh1c2hvcnQpIGNudDsKKwkJYnBsLT50dXMudyA9IGxlMzJfdG9fY3B1KGJwbC0+dHVzLncpOworCQlicGwrKzsKKworCQlpKys7CisJCW9mZnNldCArPSBjbnQ7CisJCXNpemUgLT0gY250OworCX0KKworCW1saXN0LT5mbGFnID0gaTsKKwlyZXR1cm4gbWxpc3Q7CitvdXQ6CisJZGlhZ19jbWRfZGF0YV9mcmVlKHBoYmEsIG1saXN0KTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBscGZjZGlhZ19sb29wX3Bvc3RfcnhidWZzIC0gcG9zdCB0aGUgcmVjZWl2ZSBidWZmZXJzIGZvciBhbiB1bnNvbCBDVCBjbWQKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdAorICogQHJ4eHJpOiBSZWNlaXZlIGV4Y2hhbmdlIGlkCisgKiBAbGVuOiBOdW1iZXIgb2YgZGF0YSBieXRlcworICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGFuZCBwb3N0cyBhIGRhdGEgYnVmZmVyIG9mIHN1ZmZpY2llbnQgc2l6ZSB0byByZWNpZXZlCisgKiBhbiB1bnNvbGljdGVkIENUIGNvbW1hbmQuCisgKiovCitzdGF0aWMgaW50IGxwZmNkaWFnX2xvb3BfcG9zdF9yeGJ1ZnMoc3RydWN0IGxwZmNfaGJhICpwaGJhLCB1aW50MTZfdCByeHhyaSwKKwkJCSAgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbHBmY19zbGkgKnBzbGkgPSAmcGhiYS0+c2xpOworCXN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZyA9ICZwc2xpLT5yaW5nW0xQRkNfRUxTX1JJTkddOworCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicTsKKwlJT0NCX3QgKmNtZCA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCBoZWFkLCAqY3VyciwgKm5leHQ7CisJc3RydWN0IGxwZmNfZG1hYnVmICpyeGJtcDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKmRtcDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKm1wWzJdID0ge05VTEwsIE5VTEx9OworCXN0cnVjdCB1bHBfYmRlNjQgKnJ4YnBsID0gTlVMTDsKKwl1aW50MzJfdCBudW1fYmRlOworCXN0cnVjdCBscGZjX2RtYWJ1ZmV4dCAqcnhidWZmZXIgPSBOVUxMOworCWludCByZXRfdmFsID0gMDsKKwlpbnQgaSA9IDA7CisKKwljbWRpb2NicSA9IGxwZmNfc2xpX2dldF9pb2NicShwaGJhKTsKKwlyeGJtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX2RtYWJ1ZiksIEdGUF9LRVJORUwpOworCWlmIChyeGJtcCAhPSBOVUxMKSB7CisJCXJ4Ym1wLT52aXJ0ID0gbHBmY19tYnVmX2FsbG9jKHBoYmEsIDAsICZyeGJtcC0+cGh5cyk7CisJCUlOSVRfTElTVF9IRUFEKCZyeGJtcC0+bGlzdCk7CisJCXJ4YnBsID0gKHN0cnVjdCB1bHBfYmRlNjQgKikgcnhibXAtPnZpcnQ7CisJCXJ4YnVmZmVyID0gZGlhZ19jbWRfZGF0YV9hbGxvYyhwaGJhLCByeGJwbCwgbGVuLCAwKTsKKwl9CisKKwlpZiAoIWNtZGlvY2JxIHx8ICFyeGJtcCB8fCAhcnhicGwgfHwgIXJ4YnVmZmVyKSB7CisJCXJldF92YWwgPSBFTk9NRU07CisJCWdvdG8gZXJyX3Bvc3RfcnhidWZzX2V4aXQ7CisJfQorCisJLyogUXVldWUgYnVmZmVycyBmb3IgdGhlIHJlY2VpdmUgZXhjaGFuZ2UgKi8KKwludW1fYmRlID0gKHVpbnQzMl90KXJ4YnVmZmVyLT5mbGFnOworCWRtcCA9ICZyeGJ1ZmZlci0+ZG1hOworCisJY21kID0gJmNtZGlvY2JxLT5pb2NiOworCWkgPSAwOworCisJSU5JVF9MSVNUX0hFQUQoJmhlYWQpOworCWxpc3RfYWRkX3RhaWwoJmhlYWQsICZkbXAtPmxpc3QpOworCWxpc3RfZm9yX2VhY2hfc2FmZShjdXJyLCBuZXh0LCAmaGVhZCkgeworCQltcFtpXSA9IGxpc3RfZW50cnkoY3Vyciwgc3RydWN0IGxwZmNfZG1hYnVmLCBsaXN0KTsKKwkJbGlzdF9kZWwoY3Vycik7CisKKwkJaWYgKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19IQlFfRU5BQkxFRCkgeworCQkJbXBbaV0tPmJ1ZmZlcl90YWcgPSBscGZjX3NsaV9nZXRfYnVmZmVyX3RhZyhwaGJhKTsKKwkJCWNtZC0+dW4ucXVleHJpNjRjeC5idWZmLmJkZS5hZGRySGlnaCA9CisJCQkJcHV0UGFkZHJIaWdoKG1wW2ldLT5waHlzKTsKKwkJCWNtZC0+dW4ucXVleHJpNjRjeC5idWZmLmJkZS5hZGRyTG93ID0KKwkJCQlwdXRQYWRkckxvdyhtcFtpXS0+cGh5cyk7CisJCQljbWQtPnVuLnF1ZXhyaTY0Y3guYnVmZi5iZGUudHVzLmYuYmRlU2l6ZSA9CisJCQkJKChzdHJ1Y3QgbHBmY19kbWFidWZleHQgKiltcFtpXSktPnNpemU7CisJCQljbWQtPnVuLnF1ZXhyaTY0Y3guYnVmZi5idWZmZXJfdGFnID0gbXBbaV0tPmJ1ZmZlcl90YWc7CisJCQljbWQtPnVscENvbW1hbmQgPSBDTURfUVVFX1hSSTY0X0NYOworCQkJY21kLT51bHBQVSA9IDA7CisJCQljbWQtPnVscExlID0gMTsKKwkJCWNtZC0+dWxwQmRlQ291bnQgPSAxOworCQkJY21kLT51bnNsaTMucXVlX3hyaTY0Y3hfZXh0X3dvcmRzLmViZGVfY291bnQgPSAwOworCisJCX0gZWxzZSB7CisJCQljbWQtPnVuLmNvbnQ2NFtpXS5hZGRySGlnaCA9IHB1dFBhZGRySGlnaChtcFtpXS0+cGh5cyk7CisJCQljbWQtPnVuLmNvbnQ2NFtpXS5hZGRyTG93ID0gcHV0UGFkZHJMb3cobXBbaV0tPnBoeXMpOworCQkJY21kLT51bi5jb250NjRbaV0udHVzLmYuYmRlU2l6ZSA9CisJCQkJKChzdHJ1Y3QgbHBmY19kbWFidWZleHQgKiltcFtpXSktPnNpemU7CisJCQkJCWNtZC0+dWxwQmRlQ291bnQgPSArK2k7CisKKwkJCWlmICgoLS1udW1fYmRlID4gMCkgJiYgKGkgPCAyKSkKKwkJCQljb250aW51ZTsKKworCQkJY21kLT51bHBDb21tYW5kID0gQ01EX1FVRV9YUklfQlVGNjRfQ1g7CisJCQljbWQtPnVscExlID0gMTsKKwkJfQorCisJCWNtZC0+dWxwQ2xhc3MgPSBDTEFTUzM7CisJCWNtZC0+dWxwQ29udGV4dCA9IHJ4eHJpOworCisJCXJldF92YWwgPSBscGZjX3NsaV9pc3N1ZV9pb2NiKHBoYmEsIExQRkNfRUxTX1JJTkcsIGNtZGlvY2JxLCAwKTsKKworCQlpZiAocmV0X3ZhbCA9PSBJT0NCX0VSUk9SKSB7CisJCQlkaWFnX2NtZF9kYXRhX2ZyZWUocGhiYSwKKwkJCQkoc3RydWN0IGxwZmNfZG1hYnVmZXh0ICopbXBbMF0pOworCQkJaWYgKG1wWzFdKQorCQkJCWRpYWdfY21kX2RhdGFfZnJlZShwaGJhLAorCQkJCQkgIChzdHJ1Y3QgbHBmY19kbWFidWZleHQgKiltcFsxXSk7CisJCQlkbXAgPSBsaXN0X2VudHJ5KG5leHQsIHN0cnVjdCBscGZjX2RtYWJ1ZiwgbGlzdCk7CisJCQlyZXRfdmFsID0gRUlPOworCQkJZ290byBlcnJfcG9zdF9yeGJ1ZnNfZXhpdDsKKwkJfQorCisJCWxwZmNfc2xpX3Jpbmdwb3N0YnVmX3B1dChwaGJhLCBwcmluZywgbXBbMF0pOworCQlpZiAobXBbMV0pIHsKKwkJCWxwZmNfc2xpX3Jpbmdwb3N0YnVmX3B1dChwaGJhLCBwcmluZywgbXBbMV0pOworCQkJbXBbMV0gPSBOVUxMOworCQl9CisKKwkJLyogVGhlIGlvY2Igd2FzIGZyZWVkIGJ5IGxwZmNfc2xpX2lzc3VlX2lvY2IgKi8KKwkJY21kaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CisJCWlmICghY21kaW9jYnEpIHsKKwkJCWRtcCA9IGxpc3RfZW50cnkobmV4dCwgc3RydWN0IGxwZmNfZG1hYnVmLCBsaXN0KTsKKwkJCXJldF92YWwgPSBFSU87CisJCQlnb3RvIGVycl9wb3N0X3J4YnVmc19leGl0OworCQl9CisKKwkJY21kID0gJmNtZGlvY2JxLT5pb2NiOworCQlpID0gMDsKKwl9CisJbGlzdF9kZWwoJmhlYWQpOworCitlcnJfcG9zdF9yeGJ1ZnNfZXhpdDoKKworCWlmIChyeGJtcCkgeworCQlpZiAocnhibXAtPnZpcnQpCisJCQlscGZjX21idWZfZnJlZShwaGJhLCByeGJtcC0+dmlydCwgcnhibXAtPnBoeXMpOworCQlrZnJlZShyeGJtcCk7CisJfQorCisJaWYgKGNtZGlvY2JxKQorCQlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIGNtZGlvY2JxKTsKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiBscGZjX2JzZ19kaWFnX3Rlc3QgLSB3aXRoIGEgcG9ydCBpbiBsb29wYmFjayBpc3N1ZXMgYSBDdCBjbWQgdG8gaXRzZWxmCisgKiBAam9iOiBMUEZDX0JTR19WRU5ET1JfRElBR19URVNUIGZjX2JzZ19qb2IKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlY2VpdmVzIGEgdXNlciBkYXRhIGJ1ZmZlciB0byBiZSB0cmFuc21pdHRlZCBhbmQgcmVjZWl2ZWQgb24KKyAqIHRoZSBzYW1lIHBvcnQsIHRoZSBsaW5rIG11c3QgYmUgdXAgYW5kIGluIGxvb3BiYWNrIG1vZGUgcHJpb3IKKyAqIHRvIGJlaW5nIGNhbGxlZC4KKyAqIDEuIEEga2VybmVsIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgdG8gY29weSB0aGUgdXNlciBkYXRhIGludG8uCisgKiAyLiBUaGUgcG9ydCByZWdpc3RlcnMgd2l0aCAiaXRzZWxmIi4KKyAqIDMuIFRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBleGNoYW5nZSBpZHMgYXJlIG9idGFpbmVkLgorICogNC4gVGhlIHJlY2VpdmUgZXhjaGFuZ2UgaWQgaXMgcG9zdGVkLgorICogNS4gQSBuZXcgZWxzIGxvb3BiYWNrIGV2ZW50IGlzIGNyZWF0ZWQuCisgKiA2LiBUaGUgY29tbWFuZCBhbmQgcmVzcG9uc2UgaW9jYnMgYXJlIGFsbG9jYXRlZC4KKyAqIDcuIFRoZSBjbWQgaW9jYiBGc1R5cGUgaXMgc2V0IHRvIGVseCBsb29wYmFjayBhbmQgdGhlIENtZFJzcCB0byBsb29wcGJhY2suCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBjYWxsZWQgbiB0aW1lcyB3aGlsZSB0aGUgcG9ydCBpcyBpbiBsb29wYmFjaworICogc28gaXQgaXMgdGhlIGFwcHMgcmVzcG9uc2liaWxpdHkgdG8gaXNzdWUgYSByZXNldCB0byB0YWtlIHRoZSBwb3J0IG91dAorICogb2YgbG9vcGJhY2sgbW9kZS4KKyAqKi8KK3N0YXRpYyBpbnQKK2xwZmNfYnNnX2RpYWdfdGVzdChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCXN0cnVjdCBkaWFnX21vZGVfdGVzdCAqZGlhZ19tb2RlOworCXN0cnVjdCBscGZjX2JzZ19ldmVudCAqZXZ0OworCXN0cnVjdCBldmVudF9kYXRhICpldmRhdDsKKwlzdHJ1Y3QgbHBmY19zbGkgKnBzbGkgPSAmcGhiYS0+c2xpOworCXVpbnQzMl90IHNpemU7CisJdWludDMyX3QgZnVsbF9zaXplOworCXNpemVfdCBzZWdtZW50X2xlbiA9IDAsIHNlZ21lbnRfb2Zmc2V0ID0gMCwgY3VycmVudF9vZmZzZXQgPSAwOworCXVpbnQxNl90IHJwaTsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYnEsICpyc3Bpb2NicTsKKwlJT0NCX3QgKmNtZCwgKnJzcDsKKwlzdHJ1Y3QgbHBmY19zbGlfY3RfcmVxdWVzdCAqY3RyZXE7CisJc3RydWN0IGxwZmNfZG1hYnVmICp0eGJtcDsKKwlzdHJ1Y3QgdWxwX2JkZTY0ICp0eGJwbCA9IE5VTEw7CisJc3RydWN0IGxwZmNfZG1hYnVmZXh0ICp0eGJ1ZmZlciA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCBoZWFkOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAgKmN1cnI7CisJdWludDE2X3QgdHh4cmksIHJ4eHJpOworCXVpbnQzMl90IG51bV9iZGU7CisJdWludDhfdCAqcHRyID0gTlVMTCwgKnJ4X2RhdGFidWYgPSBOVUxMOworCWludCByYyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkICpkYXRhb3V0ID0gTlVMTDsKKwl1aW50MzJfdCB0b3RhbF9tZW07CisKKwkvKiBpbiBjYXNlIG5vIGRhdGEgaXMgcmV0dXJuZWQgcmV0dXJuIGp1c3QgdGhlIHJldHVybiBjb2RlICovCisJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKworCWlmIChqb2ItPnJlcXVlc3RfbGVuIDwKKwkgICAgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVxdWVzdCkgKyBzaXplb2Yoc3RydWN0IGRpYWdfbW9kZV90ZXN0KSkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCSIyNzM5IFJlY2VpdmVkIERJQUcgVEVTVCByZXF1ZXN0IGJlbG93IG1pbmltdW0gIgorCQkJCSJzaXplXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlpZiAoam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW4gIT0KKwkJam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBsb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJZGlhZ19tb2RlID0gKHN0cnVjdCBkaWFnX21vZGVfdGVzdCAqKQorCQlqb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kOworCisJaWYgKChwaGJhLT5saW5rX3N0YXRlID09IExQRkNfSEJBX0VSUk9SKSB8fAorCSAgICAocHNsaS0+c2xpX2ZsYWcgJiBMUEZDX0JMT0NLX01HTVRfSU8pIHx8CisJICAgICghKHBzbGktPnNsaV9mbGFnICYgTFBGQ19TTElfQUNUSVZFKSkpIHsKKwkJcmMgPSAtRUFDQ0VTOworCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlpZiAoIWxwZmNfaXNfbGlua191cChwaGJhKSB8fCAhKHBoYmEtPmxpbmtfZmxhZyAmIExTX0xPT1BCQUNLX01PREUpKSB7CisJCXJjID0gLUVBQ0NFUzsKKwkJZ290byBsb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJc2l6ZSA9IGpvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuOworCWZ1bGxfc2l6ZSA9IHNpemUgKyBFTFhfTE9PUEJBQ0tfSEVBREVSX1NaOyAvKiBwbHVzIHRoZSBoZWFkZXIgKi8KKworCWlmICgoc2l6ZSA9PSAwKSB8fCAoc2l6ZSA+IDgwICogQlVGX1NaXzRLKSkgeworCQlyYyA9IC1FUkFOR0U7CisJCWdvdG8gbG9vcGJhY2tfdGVzdF9leGl0OworCX0KKworCWlmIChzaXplID49IEJVRl9TWl80SykgeworCQkvKgorCQkgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGlvY3RsIGRhdGEuIElmIGJ1ZmZlciBpcyBiaWdnZXIgdGhhbiA2NGssCisJCSAqIHRoZW4gd2UgYWxsb2NhdGUgNjRrIGFuZCByZS11c2UgdGhhdCBidWZmZXIgb3ZlciBhbmQgb3ZlciB0bworCQkgKiB4ZmVyIHRoZSB3aG9sZSBibG9jay4gVGhpcyBpcyBiZWNhdXNlIExpbnV4IGtlcm5lbCBoYXMgYQorCQkgKiBwcm9ibGVtIGFsbG9jYXRpbmcgbW9yZSB0aGFuIDEyMGsgb2Yga2VybmVsIHNwYWNlIG1lbW9yeS4gU2F3CisJCSAqIHByb2JsZW0gd2l0aCBHRVRfRkNQVEFSR0VUTUFQUElORy4uLgorCQkgKi8KKwkJaWYgKHNpemUgPD0gKDY0ICogMTAyNCkpCisJCQl0b3RhbF9tZW0gPSBzaXplOworCQllbHNlCisJCQl0b3RhbF9tZW0gPSA2NCAqIDEwMjQ7CisJfSBlbHNlCisJCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgaW9jdGwgZGF0YSAqLworCQl0b3RhbF9tZW0gPSBCVUZfU1pfNEs7CisKKwlkYXRhb3V0ID0ga21hbGxvYyh0b3RhbF9tZW0sIEdGUF9LRVJORUwpOworCWlmIChkYXRhb3V0ID09IE5VTEwpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGxvb3BiYWNrX3Rlc3RfZXhpdDsKKwl9CisKKwlwdHIgPSBkYXRhb3V0OworCXB0ciArPSBFTFhfTE9PUEJBQ0tfSEVBREVSX1NaOworCXNnX2NvcHlfdG9fYnVmZmVyKGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJCQkJam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LAorCQkJCXB0ciwgc2l6ZSk7CisKKwlyYyA9IGxwZmNkaWFnX2xvb3Bfc2VsZl9yZWcocGhiYSwgJnJwaSk7CisJaWYgKHJjKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBsb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJcmMgPSBscGZjZGlhZ19sb29wX2dldF94cmkocGhiYSwgcnBpLCAmdHh4cmksICZyeHhyaSk7CisJaWYgKHJjKSB7CisJCWxwZmNkaWFnX2xvb3Bfc2VsZl91bnJlZyhwaGJhLCBycGkpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gbG9vcGJhY2tfdGVzdF9leGl0OworCX0KKworCXJjID0gbHBmY2RpYWdfbG9vcF9wb3N0X3J4YnVmcyhwaGJhLCByeHhyaSwgZnVsbF9zaXplKTsKKwlpZiAocmMpIHsKKwkJbHBmY2RpYWdfbG9vcF9zZWxmX3VucmVnKHBoYmEsIHJwaSk7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBsb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJZXZ0ID0gbHBmY19ic2dfZXZlbnRfbmV3KEZDX1JFR19DVF9FVkVOVCwgY3VycmVudC0+cGlkLAorCQkJCVNMSV9DVF9FTFhfTE9PUEJBQ0spOworCWlmICghZXZ0KSB7CisJCWxwZmNkaWFnX2xvb3Bfc2VsZl91bnJlZyhwaGJhLCBycGkpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gbG9vcGJhY2tfdGVzdF9leGl0OworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJmV2dC0+bm9kZSwgJnBoYmEtPmN0X2V2X3dhaXRlcnMpOworCWxwZmNfYnNnX2V2ZW50X3JlZihldnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKworCWNtZGlvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHBoYmEpOworCXJzcGlvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHBoYmEpOworCXR4Ym1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxwZmNfZG1hYnVmKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAodHhibXApIHsKKwkJdHhibXAtPnZpcnQgPSBscGZjX21idWZfYWxsb2MocGhiYSwgMCwgJnR4Ym1wLT5waHlzKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnR4Ym1wLT5saXN0KTsKKwkJdHhicGwgPSAoc3RydWN0IHVscF9iZGU2NCAqKSB0eGJtcC0+dmlydDsKKwkJaWYgKHR4YnBsKQorCQkJdHhidWZmZXIgPSBkaWFnX2NtZF9kYXRhX2FsbG9jKHBoYmEsCisJCQkJCQkJdHhicGwsIGZ1bGxfc2l6ZSwgMCk7CisJfQorCisJaWYgKCFjbWRpb2NicSB8fCAhcnNwaW9jYnEgfHwgIXR4Ym1wIHx8ICF0eGJwbCB8fCAhdHhidWZmZXIpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycl9sb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJY21kID0gJmNtZGlvY2JxLT5pb2NiOworCXJzcCA9ICZyc3Bpb2NicS0+aW9jYjsKKworCUlOSVRfTElTVF9IRUFEKCZoZWFkKTsKKwlsaXN0X2FkZF90YWlsKCZoZWFkLCAmdHhidWZmZXItPmRtYS5saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1cnIsICZoZWFkLCBsaXN0KSB7CisJCXNlZ21lbnRfbGVuID0gKChzdHJ1Y3QgbHBmY19kbWFidWZleHQgKiljdXJyKS0+c2l6ZTsKKwkJaWYgKGN1cnJlbnRfb2Zmc2V0ID09IDApIHsKKwkJCWN0cmVxID0gY3Vyci0+dmlydDsKKwkJCW1lbXNldChjdHJlcSwgMCwgRUxYX0xPT1BCQUNLX0hFQURFUl9TWik7CisJCQljdHJlcS0+UmV2aXNpb25JZC5iaXRzLlJldmlzaW9uID0gU0xJX0NUX1JFVklTSU9OOworCQkJY3RyZXEtPlJldmlzaW9uSWQuYml0cy5JbklkID0gMDsKKwkJCWN0cmVxLT5Gc1R5cGUgPSBTTElfQ1RfRUxYX0xPT1BCQUNLOworCQkJY3RyZXEtPkZzU3ViVHlwZSA9IDA7CisJCQljdHJlcS0+Q29tbWFuZFJlc3BvbnNlLmJpdHMuQ21kUnNwID0gRUxYX0xPT1BCQUNLX0RBVEE7CisJCQljdHJlcS0+Q29tbWFuZFJlc3BvbnNlLmJpdHMuU2l6ZSAgID0gc2l6ZTsKKwkJCXNlZ21lbnRfb2Zmc2V0ID0gRUxYX0xPT1BCQUNLX0hFQURFUl9TWjsKKwkJfSBlbHNlCisJCQlzZWdtZW50X29mZnNldCA9IDA7CisKKwkJQlVHX09OKHNlZ21lbnRfb2Zmc2V0ID49IHNlZ21lbnRfbGVuKTsKKwkJbWVtY3B5KGN1cnItPnZpcnQgKyBzZWdtZW50X29mZnNldCwKKwkJCXB0ciArIGN1cnJlbnRfb2Zmc2V0LAorCQkJc2VnbWVudF9sZW4gLSBzZWdtZW50X29mZnNldCk7CisKKwkJY3VycmVudF9vZmZzZXQgKz0gc2VnbWVudF9sZW4gLSBzZWdtZW50X29mZnNldDsKKwkJQlVHX09OKGN1cnJlbnRfb2Zmc2V0ID4gc2l6ZSk7CisJfQorCWxpc3RfZGVsKCZoZWFkKTsKKworCS8qIEJ1aWxkIHRoZSBYTUlUX1NFUVVFTkNFIGlvY2IgKi8KKworCW51bV9iZGUgPSAodWludDMyX3QpdHhidWZmZXItPmZsYWc7CisKKwljbWQtPnVuLnhzZXE2NC5iZGwuYWRkckhpZ2ggPSBwdXRQYWRkckhpZ2godHhibXAtPnBoeXMpOworCWNtZC0+dW4ueHNlcTY0LmJkbC5hZGRyTG93ID0gcHV0UGFkZHJMb3codHhibXAtPnBoeXMpOworCWNtZC0+dW4ueHNlcTY0LmJkbC5iZGVGbGFncyA9IEJVRkZfVFlQRV9CTFBfNjQ7CisJY21kLT51bi54c2VxNjQuYmRsLmJkZVNpemUgPSAobnVtX2JkZSAqIHNpemVvZihzdHJ1Y3QgdWxwX2JkZTY0KSk7CisKKwljbWQtPnVuLnhzZXE2NC53NS5oY3N3LkZjdGwgPSAoTFMgfCBMQSk7CisJY21kLT51bi54c2VxNjQudzUuaGNzdy5EZmN0bCA9IDA7CisJY21kLT51bi54c2VxNjQudzUuaGNzdy5SY3RsID0gRkNfUkNUTF9ERF9VTlNPTF9DVEw7CisJY21kLT51bi54c2VxNjQudzUuaGNzdy5UeXBlID0gRkNfVFlQRV9DVDsKKworCWNtZC0+dWxwQ29tbWFuZCA9IENNRF9YTUlUX1NFUVVFTkNFNjRfQ1g7CisJY21kLT51bHBCZGVDb3VudCA9IDE7CisJY21kLT51bHBMZSA9IDE7CisJY21kLT51bHBDbGFzcyA9IENMQVNTMzsKKwljbWQtPnVscENvbnRleHQgPSB0eHhyaTsKKworCWNtZGlvY2JxLT5pb2NiX2ZsYWcgfD0gTFBGQ19JT19MSUJERkM7CisJY21kaW9jYnEtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7CisKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX2lvY2Jfd2FpdChwaGJhLCBMUEZDX0VMU19SSU5HLCBjbWRpb2NicSwgcnNwaW9jYnEsCisJCQkJICAgICAgKHBoYmEtPmZjX3JhdG92ICogMikgKyBMUEZDX0RSVlJfVElNRU9VVCk7CisKKwlpZiAoKHJjICE9IElPQ0JfU1VDQ0VTUykgfHwgKHJzcC0+dWxwU3RhdHVzICE9IElPQ0JfU1VDQ0VTUykpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIGVycl9sb29wYmFja190ZXN0X2V4aXQ7CisJfQorCisJZXZ0LT53YWl0aW5nID0gMTsKKwlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQlldnQtPndxLCAhbGlzdF9lbXB0eSgmZXZ0LT5ldmVudHNfdG9fc2VlKSwKKwkJKChwaGJhLT5mY19yYXRvdiAqIDIpICsgTFBGQ19EUlZSX1RJTUVPVVQpICogSFopOworCWV2dC0+d2FpdGluZyA9IDA7CisJaWYgKGxpc3RfZW1wdHkoJmV2dC0+ZXZlbnRzX3RvX3NlZSkpCisJCXJjID0gKHJjKSA/IC1FSU5UUiA6IC1FVElNRURPVVQ7CisJZWxzZSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCWxpc3RfbW92ZShldnQtPmV2ZW50c190b19zZWUucHJldiwgJmV2dC0+ZXZlbnRzX3RvX2dldCk7CisJCWV2ZGF0ID0gbGlzdF9lbnRyeShldnQtPmV2ZW50c190b19nZXQucHJldiwKKwkJCQkgICB0eXBlb2YoKmV2ZGF0KSwgbm9kZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJcnhfZGF0YWJ1ZiA9IGV2ZGF0LT5kYXRhOworCQlpZiAoZXZkYXQtPmxlbiAhPSBmdWxsX3NpemUpIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0xJQkRGQywKKwkJCQkiMTYwMyBMb29wYmFjayB0ZXN0IGRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCAiCisJCQkJImRhdGEgbGVuZ3RoLiBhY3R1YWwgbGVuZ3RoIDB4JXggZXhwZWN0ZWQgIgorCQkJCSJsZW5ndGggMHgleFxuIiwKKwkJCQlldmRhdC0+bGVuLCBmdWxsX3NpemUpOworCQkJcmMgPSAtRUlPOworCQl9IGVsc2UgaWYgKHJ4X2RhdGFidWYgPT0gTlVMTCkKKwkJCXJjID0gLUVJTzsKKwkJZWxzZSB7CisJCQlyYyA9IElPQ0JfU1VDQ0VTUzsKKwkJCS8qIHNraXAgb3ZlciBlbHggbG9vcGJhY2sgaGVhZGVyICovCisJCQlyeF9kYXRhYnVmICs9IEVMWF9MT09QQkFDS19IRUFERVJfU1o7CisJCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQkJCXNnX2NvcHlfZnJvbV9idWZmZXIoam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJCQkJCQkgICAgam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwKKwkJCQkJCSAgICByeF9kYXRhYnVmLCBzaXplKTsKKwkJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IHNpemU7CisJCX0KKwl9CisKK2Vycl9sb29wYmFja190ZXN0X2V4aXQ6CisJbHBmY2RpYWdfbG9vcF9zZWxmX3VucmVnKHBoYmEsIHJwaSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCWxwZmNfYnNnX2V2ZW50X3VucmVmKGV2dCk7IC8qIHJlbGVhc2UgcmVmICovCisJbHBmY19ic2dfZXZlbnRfdW5yZWYoZXZ0KTsgLyogZGVsZXRlICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCisJaWYgKGNtZGlvY2JxICE9IE5VTEwpCisJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgY21kaW9jYnEpOworCisJaWYgKHJzcGlvY2JxICE9IE5VTEwpCisJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgcnNwaW9jYnEpOworCisJaWYgKHR4Ym1wICE9IE5VTEwpIHsKKwkJaWYgKHR4YnBsICE9IE5VTEwpIHsKKwkJCWlmICh0eGJ1ZmZlciAhPSBOVUxMKQorCQkJCWRpYWdfY21kX2RhdGFfZnJlZShwaGJhLCB0eGJ1ZmZlcik7CisJCQlscGZjX21idWZfZnJlZShwaGJhLCB0eGJtcC0+dmlydCwgdHhibXAtPnBoeXMpOworCQl9CisJCWtmcmVlKHR4Ym1wKTsKKwl9CisKK2xvb3BiYWNrX3Rlc3RfZXhpdDoKKwlrZnJlZShkYXRhb3V0KTsKKwkvKiBtYWtlIGVycm9yIGNvZGUgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJLyogY29tcGxldGUgdGhlIGpvYiBiYWNrIHRvIHVzZXJzcGFjZSBpZiBubyBlcnJvciAqLworCWlmIChyYyA9PSAwKQorCQlqb2ItPmpvYl9kb25lKGpvYik7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGxwZmNfYnNnX2dldF9kZmNfcmV2IC0gcHJvY2VzcyBhIEdFVF9ERkNfUkVWIGJzZyB2ZW5kb3IgY29tbWFuZAorICogQGpvYjogR0VUX0RGQ19SRVYgZmNfYnNnX2pvYgorICoqLworc3RhdGljIGludAorbHBmY19ic2dfZ2V0X2RmY19yZXYoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKK3sKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKilqb2ItPnNob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSB2cG9ydC0+cGhiYTsKKwlzdHJ1Y3QgZ2V0X21nbXRfcmV2ICpldmVudF9yZXE7CisJc3RydWN0IGdldF9tZ210X3Jldl9yZXBseSAqZXZlbnRfcmVwbHk7CisJaW50IHJjID0gMDsKKworCWlmIChqb2ItPnJlcXVlc3RfbGVuIDwKKwkgICAgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVxdWVzdCkgKyBzaXplb2Yoc3RydWN0IGdldF9tZ210X3JldikpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkiMjc0MCBSZWNlaXZlZCBHRVRfREZDX1JFViByZXF1ZXN0IGJlbG93ICIKKwkJCQkibWluaW11bSBzaXplXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGpvYl9lcnJvcjsKKwl9CisKKwlldmVudF9yZXEgPSAoc3RydWN0IGdldF9tZ210X3JldiAqKQorCQlqb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kOworCisJZXZlbnRfcmVwbHkgPSAoc3RydWN0IGdldF9tZ210X3Jldl9yZXBseSAqKQorCQlqb2ItPnJlcGx5LT5yZXBseV9kYXRhLnZlbmRvcl9yZXBseS52ZW5kb3JfcnNwOworCisJaWYgKGpvYi0+cmVwbHlfbGVuIDwKKwkgICAgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVxdWVzdCkgKyBzaXplb2Yoc3RydWN0IGdldF9tZ210X3Jldl9yZXBseSkpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkiMjc0MSBSZWNlaXZlZCBHRVRfREZDX1JFViByZXBseSBiZWxvdyAiCisJCQkJIm1pbmltdW0gc2l6ZVxuIik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBqb2JfZXJyb3I7CisJfQorCisJZXZlbnRfcmVwbHktPmluZm8uYV9NYWpvciA9IE1BTkFHRU1FTlRfTUFKT1JfUkVWOworCWV2ZW50X3JlcGx5LT5pbmZvLmFfTWlub3IgPSBNQU5BR0VNRU5UX01JTk9SX1JFVjsKK2pvYl9lcnJvcjoKKwlqb2ItPnJlcGx5LT5yZXN1bHQgPSByYzsKKwlpZiAocmMgPT0gMCkKKwkJam9iLT5qb2JfZG9uZShqb2IpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBscGZjX2JzZ193YWtlX21ib3hfd2FpdCAtIGxwZmNfYnNnX2lzc3VlX21ib3ggbWJveCBjb21wbGV0aW9uIGhhbmRsZXIKKyAqIEBwaGJhOiBQb2ludGVyIHRvIEhCQSBjb250ZXh0IG9iamVjdC4KKyAqIEBwbWJveHE6IFBvaW50ZXIgdG8gbWFpbGJveCBjb21tYW5kLgorICoKKyAqIFRoaXMgaXMgY29tcGxldGlvbiBoYW5kbGVyIGZ1bmN0aW9uIGZvciBtYWlsYm94IGNvbW1hbmRzIGlzc3VlZCBmcm9tCisgKiBscGZjX2JzZ19pc3N1ZV9tYm94IGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUKKyAqIG1haWxib3ggZXZlbnQgaGFuZGxlciBmdW5jdGlvbiB3aXRoIG5vIGxvY2sgaGVsZC4gVGhpcyBmdW5jdGlvbgorICogd2lsbCB3YWtlIHVwIHRocmVhZCB3YWl0aW5nIG9uIHRoZSB3YWl0IHF1ZXVlIHBvaW50ZWQgYnkgY29udGV4dDEKKyAqIG9mIHRoZSBtYWlsYm94LgorICoqLwordm9pZAorbHBmY19ic2dfd2FrZV9tYm94X3dhaXQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKnBtYm94cSkKK3sKKwlzdHJ1Y3QgYnNnX2pvYl9kYXRhICpkZF9kYXRhOworCU1BSUxCT1hfdCAqcG1iOworCU1BSUxCT1hfdCAqbWI7CisJc3RydWN0IGZjX2JzZ19qb2IgKmpvYjsKKwl1aW50MzJfdCBzaXplOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCWRkX2RhdGEgPSBwbWJveHEtPmNvbnRleHQxOworCWlmICghZGRfZGF0YSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlwbWIgPSAmZGRfZGF0YS0+Y29udGV4dF91bi5tYm94LnBtYm94cS0+dS5tYjsKKwltYiA9IGRkX2RhdGEtPmNvbnRleHRfdW4ubWJveC5tYjsKKwlqb2IgPSBkZF9kYXRhLT5jb250ZXh0X3VuLm1ib3guc2V0X2pvYjsKKwltZW1jcHkobWIsIHBtYiwgc2l6ZW9mKCpwbWIpKTsKKwlzaXplID0gam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW47CisJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KKwkJc2dfY29weV9mcm9tX2J1ZmZlcihqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJCQlqb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LAorCQkJCW1iLCBzaXplKTsKKwlqb2ItPnJlcGx5LT5yZXN1bHQgPSAwOworCWRkX2RhdGEtPmNvbnRleHRfdW4ubWJveC5zZXRfam9iID0gTlVMTDsKKwlqb2ItPmRkX2RhdGEgPSBOVUxMOworCWpvYi0+am9iX2RvbmUoam9iKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJbWVtcG9vbF9mcmVlKGRkX2RhdGEtPmNvbnRleHRfdW4ubWJveC5wbWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCWtmcmVlKG1iKTsKKwlrZnJlZShkZF9kYXRhKTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogbHBmY19ic2dfY2hlY2tfY21kX2FjY2VzcyAtIHRlc3QgZm9yIGEgc3VwcG9ydGVkIG1haWxib3ggY29tbWFuZAorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQG1iOiBQb2ludGVyIHRvIGEgbWFpbGJveCBvYmplY3QuCisgKiBAdnBvcnQ6IFBvaW50ZXIgdG8gYSB2cG9ydCBvYmplY3QuCisgKgorICogU29tZSBjb21tYW5kcyByZXF1aXJlIHRoZSBwb3J0IHRvIGJlIG9mZmxpbmUsIHNvbWUgbWF5IG5vdCBiZSBjYWxsZWQgZnJvbQorICogdGhlIGFwcGxpY2F0aW9uLgorICoqLworc3RhdGljIGludCBscGZjX2JzZ19jaGVja19jbWRfYWNjZXNzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKKwlNQUlMQk9YX3QgKm1iLCBzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCit7CisJLyogcmV0dXJuIG5lZ2F0aXZlIGVycm9yIHZhbHVlcyBmb3IgYnNnIGpvYiAqLworCXN3aXRjaCAobWItPm1ieENvbW1hbmQpIHsKKwkvKiBPZmZsaW5lIG9ubHkgKi8KKwljYXNlIE1CWF9JTklUX0xJTks6CisJY2FzZSBNQlhfRE9XTl9MSU5LOgorCWNhc2UgTUJYX0NPTkZJR19MSU5LOgorCWNhc2UgTUJYX0NPTkZJR19SSU5HOgorCWNhc2UgTUJYX1JFU0VUX1JJTkc6CisJY2FzZSBNQlhfVU5SRUdfTE9HSU46CisJY2FzZSBNQlhfQ0xFQVJfTEE6CisJY2FzZSBNQlhfRFVNUF9DT05URVhUOgorCWNhc2UgTUJYX1JVTl9ESUFHUzoKKwljYXNlIE1CWF9SRVNUQVJUOgorCWNhc2UgTUJYX1NFVF9NQVNLOgorCQlpZiAoISh2cG9ydC0+ZmNfZmxhZyAmIEZDX09GRkxJTkVfTU9ERSkpIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI3NDMgQ29tbWFuZCAweCV4IGlzIGlsbGVnYWwgaW4gb24tbGluZSAiCisJCQkJInN0YXRlXG4iLAorCQkJCW1iLT5tYnhDb21tYW5kKTsKKwkJCXJldHVybiAtRVBFUk07CisJCX0KKwljYXNlIE1CWF9XUklURV9OVjoKKwljYXNlIE1CWF9XUklURV9WUEFSTVM6CisJY2FzZSBNQlhfTE9BRF9TTToKKwljYXNlIE1CWF9SRUFEX05WOgorCWNhc2UgTUJYX1JFQURfQ09ORklHOgorCWNhc2UgTUJYX1JFQURfUkNPTkZJRzoKKwljYXNlIE1CWF9SRUFEX1NUQVRVUzoKKwljYXNlIE1CWF9SRUFEX1hSSToKKwljYXNlIE1CWF9SRUFEX1JFVjoKKwljYXNlIE1CWF9SRUFEX0xOS19TVEFUOgorCWNhc2UgTUJYX0RVTVBfTUVNT1JZOgorCWNhc2UgTUJYX0RPV05fTE9BRDoKKwljYXNlIE1CWF9VUERBVEVfQ0ZHOgorCWNhc2UgTUJYX0tJTExfQk9BUkQ6CisJY2FzZSBNQlhfTE9BRF9BUkVBOgorCWNhc2UgTUJYX0xPQURfRVhQX1JPTToKKwljYXNlIE1CWF9CRUFDT046CisJY2FzZSBNQlhfREVMX0xEX0VOVFJZOgorCWNhc2UgTUJYX1NFVF9ERUJVRzoKKwljYXNlIE1CWF9XUklURV9XV046CisJY2FzZSBNQlhfU0xJNF9DT05GSUc6CisJY2FzZSBNQlhfUkVBRF9FVkVOVF9MT0dfU1RBVFVTOgorCWNhc2UgTUJYX1dSSVRFX0VWRU5UX0xPRzoKKwljYXNlIE1CWF9QT1JUX0NBUEFCSUxJVElFUzoKKwljYXNlIE1CWF9QT1JUX0lPVl9DT05UUk9MOgorCQlicmVhazsKKwljYXNlIE1CWF9TRVRfVkFSSUFCTEU6CisJY2FzZSBNQlhfUlVOX0JJVV9ESUFHNjQ6CisJY2FzZSBNQlhfUkVBRF9FVkVOVF9MT0c6CisJY2FzZSBNQlhfUkVBRF9TUEFSTTY0OgorCWNhc2UgTUJYX1JFQURfTEE6CisJY2FzZSBNQlhfUkVBRF9MQTY0OgorCWNhc2UgTUJYX1JFR19MT0dJTjoKKwljYXNlIE1CWF9SRUdfTE9HSU42NDoKKwljYXNlIE1CWF9DT05GSUdfUE9SVDoKKwljYXNlIE1CWF9SVU5fQklVX0RJQUc6CisJZGVmYXVsdDoKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCSIyNzQyIFVua25vd24gQ29tbWFuZCAweCV4XG4iLAorCQkJbWItPm1ieENvbW1hbmQpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCXJldHVybiAwOyAvKiBvayAqLworfQorCisvKioKKyAqIGxwZmNfYnNnX2lzc3VlX21ib3ggLSBpc3N1ZXMgYSBtYWlsYm94IGNvbW1hbmQgb24gYmVoYWxmIG9mIGFuIGFwcAorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQG1iOiBQb2ludGVyIHRvIGEgbWFpbGJveCBvYmplY3QuCisgKiBAdnBvcnQ6IFBvaW50ZXIgdG8gYSB2cG9ydCBvYmplY3QuCisgKgorICogQWxsb2NhdGUgYSB0cmFja2luZyBvYmplY3QsIG1haWxib3ggY29tbWFuZCBtZW1vcnksIGdldCBhIG1haWxib3gKKyAqIGZyb20gdGhlIG1haWxib3ggcG9vbCwgY29weSB0aGUgY2FsbGVyIG1haWxib3ggY29tbWFuZC4KKyAqCisgKiBJZiBvZmZsaW5lIGFuZCB0aGUgc2xpIGlzIGFjdGl2ZSB3ZSBuZWVkIHRvIHBvbGwgZm9yIHRoZSBjb21tYW5kIChwb3J0IGlzCisgKiBiZWluZyByZXNldCkgYW5kIGNvbS1wbGV0ZSB0aGUgam9iLCBvdGhlcndpc2UgaXNzdWUgdGhlIG1haWxib3ggY29tbWFuZCBhbmQKKyAqIGxldCBvdXIgY29tcGxldGlvbiBoYW5kbGVyIGZpbmlzaCB0aGUgY29tbWFuZC4KKyAqKi8KK3N0YXRpYyB1aW50MzJfdAorbHBmY19ic2dfaXNzdWVfbWJveChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBmY19ic2dfam9iICpqb2IsCisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQoreworCUxQRkNfTUJPWFFfdCAqcG1ib3hxOworCU1BSUxCT1hfdCAqcG1iOworCU1BSUxCT1hfdCAqbWI7CisJc3RydWN0IGJzZ19qb2JfZGF0YSAqZGRfZGF0YTsKKwl1aW50MzJfdCBzaXplOworCWludCByYyA9IDA7CisKKwkvKiBhbGxvY2F0ZSBvdXIgYnNnIHRyYWNraW5nIHN0cnVjdHVyZSAqLworCWRkX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYnNnX2pvYl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZF9kYXRhKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI3MjcgRmFpbGVkIGFsbG9jYXRpb24gb2YgZGRfZGF0YVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1iID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghbWIpIHsKKwkJa2ZyZWUoZGRfZGF0YSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBtYm94cSA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbWJveHEpIHsKKwkJa2ZyZWUoZGRfZGF0YSk7CisJCWtmcmVlKG1iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc2l6ZSA9IGpvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuOworCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCXNnX2NvcHlfdG9fYnVmZmVyKGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJCQkJam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LAorCQkJCW1iLCBzaXplKTsKKworCXJjID0gbHBmY19ic2dfY2hlY2tfY21kX2FjY2VzcyhwaGJhLCBtYiwgdnBvcnQpOworCWlmIChyYyAhPSAwKSB7CisJCWtmcmVlKGRkX2RhdGEpOworCQlrZnJlZShtYik7CisJCW1lbXBvb2xfZnJlZShwbWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlyZXR1cm4gcmM7IC8qIG11c3QgYmUgbmVnYXRpdmUgKi8KKwl9CisKKwltZW1zZXQocG1ib3hxLCAwLCBzaXplb2YoTFBGQ19NQk9YUV90KSk7CisJcG1iID0gJnBtYm94cS0+dS5tYjsKKwltZW1jcHkocG1iLCBtYiwgc2l6ZW9mKCpwbWIpKTsKKwlwbWItPm1ieE93bmVyID0gT1dOX0hPU1Q7CisJcG1ib3hxLT5jb250ZXh0MSA9IE5VTEw7CisJcG1ib3hxLT52cG9ydCA9IHZwb3J0OworCisJaWYgKCh2cG9ydC0+ZmNfZmxhZyAmIEZDX09GRkxJTkVfTU9ERSkgfHwKKwkgICAgKCEocGhiYS0+c2xpLnNsaV9mbGFnICYgTFBGQ19TTElfQUNUSVZFKSkpIHsKKwkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYm94cSwgTUJYX1BPTEwpOworCQlpZiAocmMgIT0gTUJYX1NVQ0NFU1MpIHsKKwkJCWlmIChyYyAhPSBNQlhfVElNRU9VVCkgeworCQkJCWtmcmVlKGRkX2RhdGEpOworCQkJCWtmcmVlKG1iKTsKKwkJCQltZW1wb29sX2ZyZWUocG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJCX0KKwkJCXJldHVybiAgKHJjID09IE1CWF9USU1FT1VUKSA/IC1FVElNRSA6IC1FTk9ERVY7CisJCX0KKworCQltZW1jcHkobWIsIHBtYiwgc2l6ZW9mKCpwbWIpKTsKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KKwkJCXNnX2NvcHlfZnJvbV9idWZmZXIoam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJCQkJCWpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsCisJCQkJCW1iLCBzaXplKTsKKwkJa2ZyZWUoZGRfZGF0YSk7CisJCWtmcmVlKG1iKTsKKwkJbWVtcG9vbF9mcmVlKHBtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCS8qIG5vdCB3YWl0aW5nIG1ib3ggYWxyZWFkeSBkb25lICovCisJCXJldHVybiAwOworCX0KKworCS8qIHNldHVwIHdha2UgY2FsbCBhcyBJT0NCIGNhbGxiYWNrICovCisJcG1ib3hxLT5tYm94X2NtcGwgPSBscGZjX2JzZ193YWtlX21ib3hfd2FpdDsKKwkvKiBzZXR1cCBjb250ZXh0IGZpZWxkIHRvIHBhc3Mgd2FpdF9xdWV1ZSBwb2ludGVyIHRvIHdha2UgZnVuY3Rpb24gKi8KKwlwbWJveHEtPmNvbnRleHQxID0gZGRfZGF0YTsKKwlkZF9kYXRhLT50eXBlID0gVFlQRV9NQk9YOworCWRkX2RhdGEtPmNvbnRleHRfdW4ubWJveC5wbWJveHEgPSBwbWJveHE7CisJZGRfZGF0YS0+Y29udGV4dF91bi5tYm94Lm1iID0gbWI7CisJZGRfZGF0YS0+Y29udGV4dF91bi5tYm94LnNldF9qb2IgPSBqb2I7CisJam9iLT5kZF9kYXRhID0gZGRfZGF0YTsKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1ib3hxLCBNQlhfTk9XQUlUKTsKKwlpZiAoKHJjICE9IE1CWF9TVUNDRVNTKSAmJiAocmMgIT0gTUJYX0JVU1kpKSB7CisJCWtmcmVlKGRkX2RhdGEpOworCQlrZnJlZShtYik7CisJCW1lbXBvb2xfZnJlZShwbWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBscGZjX2JzZ19tYm94X2NtZCAtIHByb2Nlc3MgYW4gZmMgYnNnIExQRkNfQlNHX1ZFTkRPUl9NQk9YIGNvbW1hbmQKKyAqIEBqb2I6IE1CT1ggZmNfYnNnX2pvYiBmb3IgTFBGQ19CU0dfVkVORE9SX01CT1guCisgKiovCitzdGF0aWMgaW50CitscGZjX2JzZ19tYm94X2NtZChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCWludCByYyA9IDA7CisKKwkvKiBpbiBjYXNlIG5vIGRhdGEgaXMgdHJhbnNmZXJyZWQgKi8KKwlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCWlmIChqb2ItPnJlcXVlc3RfbGVuIDwKKwkgICAgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVxdWVzdCkgKyBzaXplb2Yoc3RydWN0IGRmY19tYm94X3JlcSkpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkiMjczNyBSZWNlaXZlZCBNQk9YX1JFUSByZXF1ZXN0IGJlbG93ICIKKwkJCQkibWluaW11bSBzaXplXG4iKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGpvYl9lcnJvcjsKKwl9CisKKwlpZiAoam9iLT5yZXF1ZXN0X3BheWxvYWQucGF5bG9hZF9sZW4gIT0gUEFHRV9TSVpFKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBqb2JfZXJyb3I7CisJfQorCisJaWYgKHBoYmEtPnNsaS5zbGlfZmxhZyAmIExQRkNfQkxPQ0tfTUdNVF9JTykgeworCQlyYyA9IC1FQUdBSU47CisJCWdvdG8gam9iX2Vycm9yOworCX0KKworCXJjID0gbHBmY19ic2dfaXNzdWVfbWJveChwaGJhLCBqb2IsIHZwb3J0KTsKKworam9iX2Vycm9yOgorCWlmIChyYyA9PSAwKSB7CisJCS8qIGpvYiBkb25lICovCisJCWpvYi0+cmVwbHktPnJlc3VsdCA9IDA7CisJCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJCWpvYi0+am9iX2RvbmUoam9iKTsKKwl9IGVsc2UgaWYgKHJjID09IDEpCisJCS8qIGpvYiBzdWJtaXR0ZWQsIHdpbGwgY29tcGxldGUgbGF0ZXIqLworCQlyYyA9IDA7IC8qIHJldHVybiB6ZXJvLCBubyBlcnJvciAqLworCWVsc2UgeworCQkvKiBzb21lIGVycm9yIG9jY3VycmVkICovCisJCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOworCQlqb2ItPmRkX2RhdGEgPSBOVUxMOworCX0KIAogCXJldHVybiByYzsKIH0KQEAgLTgzNCwzOCArMjY0MCw1NyBAQAogLyoqCiAgKiBscGZjX2JzZ19oc3RfdmVuZG9yIC0gcHJvY2VzcyBhIHZlbmRvci1zcGVjaWZpYyBmY19ic2dfam9iCiAgKiBAam9iOiBmY19ic2dfam9iIHRvIGhhbmRsZQotICovCisgKiovCiBzdGF0aWMgaW50CiBscGZjX2JzZ19oc3RfdmVuZG9yKHN0cnVjdCBmY19ic2dfam9iICpqb2IpCiB7CiAJaW50IGNvbW1hbmQgPSBqb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kWzBdOworCWludCByYzsKIAogCXN3aXRjaCAoY29tbWFuZCkgewogCWNhc2UgTFBGQ19CU0dfVkVORE9SX1NFVF9DVF9FVkVOVDoKLQkJcmV0dXJuIGxwZmNfYnNnX3NldF9ldmVudChqb2IpOworCQlyYyA9IGxwZmNfYnNnX2hiYV9zZXRfZXZlbnQoam9iKTsKIAkJYnJlYWs7Ci0KIAljYXNlIExQRkNfQlNHX1ZFTkRPUl9HRVRfQ1RfRVZFTlQ6Ci0JCXJldHVybiBscGZjX2JzZ19nZXRfZXZlbnQoam9iKTsKKwkJcmMgPSBscGZjX2JzZ19oYmFfZ2V0X2V2ZW50KGpvYik7CiAJCWJyZWFrOwotCisJY2FzZSBMUEZDX0JTR19WRU5ET1JfU0VORF9NR01UX1JFU1A6CisJCXJjID0gbHBmY19ic2dfc2VuZF9tZ210X3JzcChqb2IpOworCQlicmVhazsKKwljYXNlIExQRkNfQlNHX1ZFTkRPUl9ESUFHX01PREU6CisJCXJjID0gbHBmY19ic2dfZGlhZ19tb2RlKGpvYik7CisJCWJyZWFrOworCWNhc2UgTFBGQ19CU0dfVkVORE9SX0RJQUdfVEVTVDoKKwkJcmMgPSBscGZjX2JzZ19kaWFnX3Rlc3Qoam9iKTsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX0JTR19WRU5ET1JfR0VUX01HTVRfUkVWOgorCQlyYyA9IGxwZmNfYnNnX2dldF9kZmNfcmV2KGpvYik7CisJCWJyZWFrOworCWNhc2UgTFBGQ19CU0dfVkVORE9SX01CT1g6CisJCXJjID0gbHBmY19ic2dfbWJveF9jbWQoam9iKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJjID0gLUVJTlZBTDsKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKwkJLyogbWFrZSBlcnJvciBjb2RlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgKi8KKwkJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJCWJyZWFrOwogCX0KKworCXJldHVybiByYzsKIH0KIAogLyoqCiAgKiBscGZjX2JzZ19yZXF1ZXN0IC0gaGFuZGxlIGEgYnNnIHJlcXVlc3QgZnJvbSB0aGUgRkMgdHJhbnNwb3J0CiAgKiBAam9iOiBmY19ic2dfam9iIHRvIGhhbmRsZQotICovCisgKiovCiBpbnQKIGxwZmNfYnNnX3JlcXVlc3Qoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKIHsKIAl1aW50MzJfdCBtc2djb2RlOwotCWludCByYyA9IC1FSU5WQUw7CisJaW50IHJjOwogCiAJbXNnY29kZSA9IGpvYi0+cmVxdWVzdC0+bXNnY29kZTsKLQogCXN3aXRjaCAobXNnY29kZSkgewogCWNhc2UgRkNfQlNHX0hTVF9WRU5ET1I6CiAJCXJjID0gbHBmY19ic2dfaHN0X3ZlbmRvcihqb2IpOwpAQCAtODc0LDkgKzI2OTksMTMgQEAKIAkJcmMgPSBscGZjX2JzZ19ycG9ydF9lbHMoam9iKTsKIAkJYnJlYWs7CiAJY2FzZSBGQ19CU0dfUlBUX0NUOgotCQlyYyA9IGxwZmNfYnNnX3Jwb3J0X2N0KGpvYik7CisJCXJjID0gbHBmY19ic2dfc2VuZF9tZ210X2NtZChqb2IpOwogCQlicmVhazsKIAlkZWZhdWx0OgorCQlyYyA9IC1FSU5WQUw7CisJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisJCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCisJCWpvYi0+cmVwbHktPnJlc3VsdCA9IHJjOwogCQlicmVhazsKIAl9CiAKQEAgLTg4OSwxNyArMjcxOCw3MSBAQAogICoKICAqIFRoaXMgZnVuY3Rpb24ganVzdCBhYm9ydHMgdGhlIGpvYidzIElPQ0IuICBUaGUgYWJvcnRlZCBJT0NCIHdpbGwgcmV0dXJuIHRvCiAgKiB0aGUgd2FpdGluZyBmdW5jdGlvbiB3aGljaCB3aWxsIGhhbmRsZSBwYXNzaW5nIHRoZSBlcnJvciBiYWNrIHRvIHVzZXJzcGFjZQotICovCisgKiovCiBpbnQKIGxwZmNfYnNnX3RpbWVvdXQoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKIHsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKilqb2ItPnNob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSB2cG9ydC0+cGhiYTsKLQlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKWpvYi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYjsKKwlzdHJ1Y3QgbHBmY19ic2dfZXZlbnQgKmV2dDsKKwlzdHJ1Y3QgbHBmY19ic2dfaW9jYiAqaW9jYjsKKwlzdHJ1Y3QgbHBmY19ic2dfbWJveCAqbWJveDsKIAlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmcgPSAmcGhiYS0+c2xpLnJpbmdbTFBGQ19FTFNfUklOR107CisJc3RydWN0IGJzZ19qb2JfZGF0YSAqZGRfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGNtZGlvY2IpCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwlkZF9kYXRhID0gKHN0cnVjdCBic2dfam9iX2RhdGEgKilqb2ItPmRkX2RhdGE7CisJLyogdGltZW91dCBhbmQgY29tcGxldGlvbiBjcm9zc2VkIHBhdGhzIGlmIG5vIGRkX2RhdGEgKi8KKwlpZiAoIWRkX2RhdGEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKGRkX2RhdGEtPnR5cGUpIHsKKwljYXNlIFRZUEVfSU9DQjoKKwkJaW9jYiA9ICZkZF9kYXRhLT5jb250ZXh0X3VuLmlvY2I7CisJCWNtZGlvY2IgPSBpb2NiLT5jbWRpb2NicTsKKwkJLyogaGludCB0byBjb21wbGV0aW9uIGhhbmRsZXIgdGhhdCB0aGUgam9iIHRpbWVkIG91dCAqLworCQlqb2ItPnJlcGx5LT5yZXN1bHQgPSAtRUFHQUlOOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCS8qIHRoaXMgd2lsbCBjYWxsIG91ciBjb21wbGV0aW9uIGhhbmRsZXIgKi8KKwkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCWxwZmNfc2xpX2lzc3VlX2Fib3J0X2lvdGFnKHBoYmEsIHByaW5nLCBjbWRpb2NiKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwkJYnJlYWs7CisJY2FzZSBUWVBFX0VWVDoKKwkJZXZ0ID0gZGRfZGF0YS0+Y29udGV4dF91bi5ldnQ7CisJCS8qIHRoaXMgZXZlbnQgaGFzIG5vIGpvYiBhbnltb3JlICovCisJCWV2dC0+c2V0X2pvYiA9IE5VTEw7CisJCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisJCS8qIFJldHVybiAtRUFHQUlOIHdoaWNoIGlzIG91ciB3YXkgb2Ygc2lnbmFsbHlpbmcgdGhlCisJCSAqIGFwcCB0byByZXRyeS4KKwkJICovCisJCWpvYi0+cmVwbHktPnJlc3VsdCA9IC1FQUdBSU47CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJam9iLT5qb2JfZG9uZShqb2IpOworCQlicmVhazsKKwljYXNlIFRZUEVfTUJPWDoKKwkJbWJveCA9ICZkZF9kYXRhLT5jb250ZXh0X3VuLm1ib3g7CisJCS8qIHRoaXMgbWJveCBoYXMgbm8gam9iIGFueW1vcmUgKi8KKwkJbWJveC0+c2V0X2pvYiA9IE5VTEw7CisJCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisJCWpvYi0+cmVwbHktPnJlc3VsdCA9IC1FQUdBSU47CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKKwkJam9iLT5qb2JfZG9uZShqb2IpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCX0KIAorCS8qIHNjc2kgdHJhbnNwb3J0IGZjIGZjX2JzZ19qb2JfdGltZW91dCBleHBlY3RzIGEgemVybyByZXR1cm4gY29kZSwKKwkgKiBvdGhlcndpc2UgYW4gZXJyb3IgbWVzc2FnZSB3aWxsIGJlIGRpc3BsYXllZCBvbiB0aGUgY29uc29sZQorCSAqIHNvIGFsd2F5cyByZXR1cm4gc3VjY2VzcyAoemVybykKKwkgKi8KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjOGY4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5oCkBAIC0wLDAgKzEsOTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgorICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgICAgICAqCisgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgorICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yICAgKgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsICAgICAgICoKKyAqIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bC4gKgorICogQUxMIEVYUFJFU1MgT1IgSU1QTElFRCBDT05ESVRJT05TLCBSRVBSRVNFTlRBVElPTlMgQU5EICAgICAgICAgICoKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFksICAqCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgTk9OLUlORlJJTkdFTUVOVCwgQVJFICAgICAgKgorICogRElTQ0xBSU1FRCwgRVhDRVBUIFRPIFRIRSBFWFRFTlQgVEhBVCBTVUNIIERJU0NMQUlNRVJTIEFSRSBIRUxEICoKKyAqIFRPIEJFIExFR0FMTFkgSU5WQUxJRC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yICAqCisgKiBtb3JlIGRldGFpbHMsIGEgY29weSBvZiB3aGljaCBjYW4gYmUgZm91bmQgaW4gdGhlIGZpbGUgQ09QWUlORyAgKgorICogaW5jbHVkZWQgd2l0aCB0aGlzIHBhY2thZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogYnNnIGRlZmluaXRpb25zCisgKiBObyBwb2ludGVycyB0byB1c2VyIGRhdGEgYXJlIGFsbG93ZWQsIGFsbCBhcHBsaWNhdGlvbiBidWZmZXJzIGFuZCBzaXplcyB3aWxsCisgKiBkZXJpdmVkIHRocm91Z2ggdGhlIGJzZyBpbnRlcmZhY2UuCisgKgorICogVGhlc2UgYXJlIHRoZSB2ZW5kb3IgdW5pcXVlIHN0cnVjdHVyZXMgcGFzc2VkIGluIHVzaW5nIHRoZSBic2cKKyAqIEZDX0JTR19IU1RfVkVORE9SIG1lc3NhZ2UgY29kZSB0eXBlLgorICovCisjZGVmaW5lIExQRkNfQlNHX1ZFTkRPUl9TRVRfQ1RfRVZFTlQJMQorI2RlZmluZSBMUEZDX0JTR19WRU5ET1JfR0VUX0NUX0VWRU5UCTIKKyNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX1NFTkRfTUdNVF9SRVNQCTMKKyNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX0RJQUdfTU9ERQk0CisjZGVmaW5lIExQRkNfQlNHX1ZFTkRPUl9ESUFHX1RFU1QJNQorI2RlZmluZSBMUEZDX0JTR19WRU5ET1JfR0VUX01HTVRfUkVWCTYKKyNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX01CT1gJCTcKKworc3RydWN0IHNldF9jdF9ldmVudCB7CisJdWludDMyX3QgY29tbWFuZDsKKwl1aW50MzJfdCB0eXBlX21hc2s7CisJdWludDMyX3QgZXZfcmVxX2lkOworCXVpbnQzMl90IGV2X3JlZ19pZDsKK307CisKK3N0cnVjdCBnZXRfY3RfZXZlbnQgeworCXVpbnQzMl90IGNvbW1hbmQ7CisJdWludDMyX3QgZXZfcmVnX2lkOworCXVpbnQzMl90IGV2X3JlcV9pZDsKK307CisKK3N0cnVjdCBnZXRfY3RfZXZlbnRfcmVwbHkgeworCXVpbnQzMl90IGltbWVkX2RhdGE7CisJdWludDMyX3QgdHlwZTsKK307CisKK3N0cnVjdCBzZW5kX21nbXRfcmVzcCB7CisJdWludDMyX3QgY29tbWFuZDsKKwl1aW50MzJfdCB0YWc7Cit9OworCisKKyNkZWZpbmUgSU5URVJOQUxfTE9PUF9CQUNLIDB4MSAvKiBhZGFwdGVyIHNob3J0IGN1dHMgdGhlIGxvb3AgaW50ZXJuYWxseSAqLworI2RlZmluZSBFWFRFUk5BTF9MT09QX0JBQ0sgMHgyIC8qIHJlcXVpcmVzIGFuIGV4dGVybmFsIGxvb3BiYWNrIHBsdWcgKi8KKworc3RydWN0IGRpYWdfbW9kZV9zZXQgeworCXVpbnQzMl90IGNvbW1hbmQ7CisJdWludDMyX3QgdHlwZTsKKwl1aW50MzJfdCB0aW1lb3V0OworfTsKKworc3RydWN0IGRpYWdfbW9kZV90ZXN0IHsKKwl1aW50MzJfdCBjb21tYW5kOworfTsKKworI2RlZmluZSBMUEZDX1dXTk5fVFlQRQkJMAorI2RlZmluZSBMUEZDX1dXUE5fVFlQRQkJMQorCitzdHJ1Y3QgZ2V0X21nbXRfcmV2IHsKKwl1aW50MzJfdCBjb21tYW5kOworfTsKKworI2RlZmluZSBNQU5BR0VNRU5UX01BSk9SX1JFViAgIDEKKyNkZWZpbmUgTUFOQUdFTUVOVF9NSU5PUl9SRVYgICAwCisKKy8qIHRoZSBNZ210UmV2SW5mbyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBNZ210UmV2SW5mbyB7CisJdWludDMyX3QgYV9NYWpvcjsKKwl1aW50MzJfdCBhX01pbm9yOworfTsKKworc3RydWN0IGdldF9tZ210X3Jldl9yZXBseSB7CisJc3RydWN0IE1nbXRSZXZJbmZvIGluZm87Cit9OworCitzdHJ1Y3QgZGZjX21ib3hfcmVxIHsKKwl1aW50MzJfdCBjb21tYW5kOworCXVpbnQzMl90IGluRXh0V0xlbjsKKwl1aW50MzJfdCBvdXRFeHRXTGVuOworCXVpbnQ4X3QgbWJPZmZzZXQ7Cit9OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCmluZGV4IDY1MDQ5NGQuLjZmMGZiNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC00NCwxOCArNDQsMjYgQEAKIHZvaWQgbHBmY191bnJlZ19sb2dpbihzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDE2X3QsIHVpbnQzMl90LCBMUEZDX01CT1hRX3QgKik7CiB2b2lkIGxwZmNfdW5yZWdfZGlkKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MTZfdCwgdWludDMyX3QsIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY19yZWdfdnBpKHN0cnVjdCBscGZjX3Zwb3J0ICosIExQRkNfTUJPWFFfdCAqKTsKK3ZvaWQgbHBmY19yZWdpc3Rlcl9uZXdfdnBvcnQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3Zwb3J0ICosCisJCQlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKIHZvaWQgbHBmY191bnJlZ192cGkoc3RydWN0IGxwZmNfaGJhICosIHVpbnQxNl90LCBMUEZDX01CT1hRX3QgKik7CiB2b2lkIGxwZmNfaW5pdF9saW5rKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKiwgdWludDMyX3QsIHVpbnQzMl90KTsKIHZvaWQgbHBmY19yZXF1ZXN0X2ZlYXR1cmVzKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY01ib3hxICopOwordm9pZCBscGZjX3N1cHBvcnRlZF9wYWdlcyhzdHJ1Y3QgbHBmY01ib3hxICopOwordm9pZCBscGZjX3NsaTRfcGFyYW1zKHN0cnVjdCBscGZjTWJveHEgKik7CitpbnQgbHBmY19wY19zbGk0X3BhcmFtc19nZXQoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKIAogc3RydWN0IGxwZmNfdnBvcnQgKmxwZmNfZmluZF92cG9ydF9ieV9kaWQoc3RydWN0IGxwZmNfaGJhICosIHVpbnQzMl90KTsKIHZvaWQgbHBmY19jbGVhbnVwX3Jjdl9idWZmZXJzKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogdm9pZCBscGZjX3Jjdl9zZXFfY2hlY2tfZWR0b3Yoc3RydWN0IGxwZmNfdnBvcnQgKik7CiB2b2lkIGxwZmNfY2xlYW51cF9ycGlzKHN0cnVjdCBscGZjX3Zwb3J0ICosIGludCk7Cit2b2lkIGxwZmNfY2xlYW51cF9wZW5kaW5nX21ib3goc3RydWN0IGxwZmNfdnBvcnQgKik7CiBpbnQgbHBmY19saW5rZG93bihzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfbGlua2Rvd25fcG9ydChzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIHZvaWQgbHBmY19wb3J0X2xpbmtfZmFpbHVyZShzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIHZvaWQgbHBmY19tYnhfY21wbF9yZWFkX2xhKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7Cit2b2lkIGxwZmNfaW5pdF92cGlfY21wbChzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwordm9pZCBscGZjX3JldHJ5X3Bwb3J0X2Rpc2NvdmVyeShzdHJ1Y3QgbHBmY19oYmEgKik7CiAKIHZvaWQgbHBmY19tYnhfY21wbF9yZWdfbG9naW4oc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY19tYnhfY21wbF9kZmx0X3JwaShzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwpAQCAtNzMsNiArODEsNyBAQAogaW50ICBscGZjX2Nhbl9kaXNjdG1vKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogaW50ICBscGZjX3VucmVnX3JwaShzdHJ1Y3QgbHBmY192cG9ydCAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKIHZvaWQgbHBmY191bnJlZ19hbGxfcnBpcyhzdHJ1Y3QgbHBmY192cG9ydCAqKTsKK3ZvaWQgbHBmY191bnJlZ19oYmFfcnBpcyhzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfdW5yZWdfZGVmYXVsdF9ycGlzKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogdm9pZCBscGZjX2lzc3VlX3JlZ192cGkoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3Zwb3J0ICopOwogCkBAIC05OSw3ICsxMDgsNyBAQAogCiB2b2lkIGxwZmNfZG9fc2NyX25zX3Bsb2dpKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIGludCBscGZjX2NoZWNrX3NwYXJtKHN0cnVjdCBscGZjX3Zwb3J0ICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICosCi0JCSAgICAgc3RydWN0IHNlcnZfcGFybSAqLCB1aW50MzJfdCk7CisJCSAgICAgc3RydWN0IHNlcnZfcGFybSAqLCB1aW50MzJfdCwgaW50KTsKIGludCBscGZjX2Vsc19hYm9ydChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKik7CiB2b2lkIGxwZmNfbW9yZV9wbG9naShzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIHZvaWQgbHBmY19tb3JlX2FkaXNjKHN0cnVjdCBscGZjX3Zwb3J0ICopOwpAQCAtMTk3LDYgKzIwNiw3IEBACiB2b2lkIGxwZmNfdW5yZWdfZmNmaShzdHJ1Y3QgbHBmY01ib3hxICosIHVpbnQxNl90KTsKIHZvaWQgbHBmY19yZXN1bWVfcnBpKHN0cnVjdCBscGZjTWJveHEgKiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKik7CiBpbnQgbHBmY19jaGVja19wZW5kaW5nX2Zjb2VfZXZlbnQoc3RydWN0IGxwZmNfaGJhICosIHVpbnQ4X3QpOwordm9pZCBscGZjX2lzc3VlX2luaXRfdnBpKHN0cnVjdCBscGZjX3Zwb3J0ICopOwogCiB2b2lkIGxwZmNfY29uZmlnX2hicShzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDMyX3QsIHN0cnVjdCBscGZjX2hicV9pbml0ICosCiAJdWludDMyX3QgLCBMUEZDX01CT1hRX3QgKik7CkBAIC0yMDYsNyArMjE2LDExIEBACiB2b2lkIGxwZmNfc2xpNF9yYl9mcmVlKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgaGJxX2RtYWJ1ZiAqKTsKIHZvaWQgbHBmY19zbGk0X2J1aWxkX2RmbHRfZmNmX3JlY29yZChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGZjZl9yZWNvcmQgKiwKIAkJCXVpbnQxNl90KTsKK3ZvaWQgbHBmY191bnJlZ2lzdGVyX2ZjZihzdHJ1Y3QgbHBmY19oYmEgKik7Cit2b2lkIGxwZmNfdW5yZWdpc3Rlcl9mY2ZfcmVzY2FuKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY191bnJlZ2lzdGVyX3VudXNlZF9mY2Yoc3RydWN0IGxwZmNfaGJhICopOworaW50IGxwZmNfc2xpNF9yZWRpc2NfZmNmX3RhYmxlKHN0cnVjdCBscGZjX2hiYSAqKTsKK3ZvaWQgbHBmY19mY2ZfcmVkaXNjX3dhaXRfc3RhcnRfdGltZXIoc3RydWN0IGxwZmNfaGJhICopOwogCiBpbnQgbHBmY19tZW1fYWxsb2Moc3RydWN0IGxwZmNfaGJhICosIGludCBhbGlnbik7CiB2b2lkIGxwZmNfbWVtX2ZyZWUoc3RydWN0IGxwZmNfaGJhICopOwpAQCAtMzY1LDYgKzM3OSw4IEBACiB2b2lkIGxwZmNfY3JlYXRlX3N0YXRpY192cG9ydChzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfc3RvcF9oYmFfdGltZXJzKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19zdG9wX3BvcnQoc3RydWN0IGxwZmNfaGJhICopOwordm9pZCBfX2xwZmNfc2xpNF9zdG9wX2ZjZl9yZWRpc2Nfd2FpdF90aW1lcihzdHJ1Y3QgbHBmY19oYmEgKik7Cit2b2lkIGxwZmNfc2xpNF9zdG9wX2ZjZl9yZWRpc2Nfd2FpdF90aW1lcihzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfcGFyc2VfZmNvZV9jb25mKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50OF90ICosIHVpbnQzMl90KTsKIGludCBscGZjX3BhcnNlX3ZwZChzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDhfdCAqLCBpbnQpOwogdm9pZCBscGZjX3N0YXJ0X2ZkaXNjcyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpOwpAQCAtMzc4LDUgKzM5NCw1IEBACiAvKiBmdW5jdGlvbnMgdG8gc3VwcG9ydCBTR0lPdjQvYnNnIGludGVyZmFjZSAqLwogaW50IGxwZmNfYnNnX3JlcXVlc3Qoc3RydWN0IGZjX2JzZ19qb2IgKik7CiBpbnQgbHBmY19ic2dfdGltZW91dChzdHJ1Y3QgZmNfYnNnX2pvYiAqKTsKLXZvaWQgbHBmY19ic2dfY3RfdW5zb2xfZXZlbnQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3NsaV9yaW5nICosCitpbnQgbHBmY19ic2dfY3RfdW5zb2xfZXZlbnQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3NsaV9yaW5nICosCiAJCQkgICAgIHN0cnVjdCBscGZjX2lvY2JxICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jCmluZGV4IDBlYmNkOWIuLmM3ZTkyMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTk3LDcgKzk3LDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CiAJc3RydWN0IGxwZmNfZG1hYnVmICpiZGVCdWY7CiAKLQlscGZjX2JzZ19jdF91bnNvbF9ldmVudChwaGJhLCBwcmluZywgcGlvY2JxKTsKKwlpZiAobHBmY19ic2dfY3RfdW5zb2xfZXZlbnQocGhiYSwgcHJpbmcsIHBpb2NicSkgPT0gMCkKKwkJcmV0dXJuOwogCiAJaWYgKHVubGlrZWx5KGljbWQtPnVscFN0YXR1cyA9PSBJT1NUQVRfTkVFRF9CVUZGRVIpKSB7CiAJCWxwZmNfc2xpX2hicWJ1Zl9hZGRfaGJxcyhwaGJhLCBMUEZDX0VMU19IQlEpOwpAQCAtMTgxLDcgKzE4Miw4IEBACiAJdWludDMyX3Qgc2l6ZTsKIAogCS8qIEZvcndhcmQgYWJvcnQgZXZlbnQgdG8gYW55IHByb2Nlc3MgcmVnaXN0ZXJlZCB0byByZWNlaXZlIGN0IGV2ZW50ICovCi0JbHBmY19ic2dfY3RfdW5zb2xfZXZlbnQocGhiYSwgcHJpbmcsIHBpb2NicSk7CisJaWYgKGxwZmNfYnNnX2N0X3Vuc29sX2V2ZW50KHBoYmEsIHByaW5nLCBwaW9jYnEpID09IDApCisJCXJldHVybjsKIAogCS8qIElmIHRoZXJlIGlzIG5vIEJERSBhc3NvY2lhdGVkIHdpdGggSU9DQiwgdGhlcmUgaXMgbm90aGluZyB0byBkbyAqLwogCWlmIChpY21kLT51bHBCZGVDb3VudCA9PSAwKQpAQCAtMTg0MywxMiArMTg0NSw3IEBACiAJCWMgID0gKHJldiAmIDB4MDAwMGZmMDApID4+IDg7CiAJCWI0ID0gKHJldiAmIDB4MDAwMDAwZmYpOwogCi0JCWlmIChmbGFnKQotCQkJc3ByaW50Zihmd3JldmlzaW9uLCAiJWQuJWQlZCVjJWQgIiwgYjEsCi0JCQkJYjIsIGIzLCBjLCBiNCk7Ci0JCWVsc2UKLQkJCXNwcmludGYoZndyZXZpc2lvbiwgIiVkLiVkJWQlYyVkICIsIGIxLAotCQkJCWIyLCBiMywgYywgYjQpOworCQlzcHJpbnRmKGZ3cmV2aXNpb24sICIlZC4lZCVkJWMlZCIsIGIxLCBiMiwgYjMsIGMsIGI0KTsKIAl9CiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKaW5kZXggMmNjMzk2OC4uMDhiNjYzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCkBAIC01MCw5ICs1MCw2IEBACiAJCQkJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsIHVpbnQ4X3QgcmV0cnkpOwogc3RhdGljIGludCBscGZjX2lzc3VlX2ZhYnJpY19pb2NiKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKIAkJCQkgIHN0cnVjdCBscGZjX2lvY2JxICppb2NiKTsKLXN0YXRpYyB2b2lkIGxwZmNfcmVnaXN0ZXJfbmV3X3Zwb3J0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwKLQkJCQkgICAgc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LAotCQkJCSAgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCk7CiAKIHN0YXRpYyBpbnQgbHBmY19tYXhfZWxzX3RyaWVzID0gMzsKIApAQCAtNTkyLDYgKzU4OSwxNSBAQAogCQkJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSTsKIAkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJfQorCQkvKgorCQkgKiBJZiBWUEkgaXMgdW5yZWdlZCwgZHJpdmVyIG5lZWQgdG8gZG8gSU5JVF9WUEkKKwkJICogYmVmb3JlIHJlLXJlZ2lzdGVyaW5nCisJCSAqLworCQlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7CisJCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQkJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfSU5JVF9WUEk7CisJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCX0KIAl9CiAKIAlpZiAocGhiYS0+c2xpX3JldiA8IExQRkNfU0xJX1JFVjQpIHsKQEAgLTYwNCwxMCArNjEwLDEzIEBACiAJfSBlbHNlIHsKIAkJbmRscC0+bmxwX3R5cGUgfD0gTkxQX0ZBQlJJQzsKIAkJbHBmY19ubHBfc2V0X3N0YXRlKHZwb3J0LCBuZGxwLCBOTFBfU1RFX1VOTUFQUEVEX05PREUpOwotCQlpZiAodnBvcnQtPnZwaV9zdGF0ZSAmIExQRkNfVlBJX1JFR0lTVEVSRUQpIHsKKwkJaWYgKCghKHZwb3J0LT5mY19mbGFnICYgRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSSkpICYmCisJCQkodnBvcnQtPnZwaV9zdGF0ZSAmIExQRkNfVlBJX1JFR0lTVEVSRUQpKSB7CiAJCQlscGZjX3N0YXJ0X2ZkaXNjcyhwaGJhKTsKIAkJCWxwZmNfZG9fc2NyX25zX3Bsb2dpKHBoYmEsIHZwb3J0KTsKLQkJfSBlbHNlCisJCX0gZWxzZSBpZiAodnBvcnQtPmZjX2ZsYWcgJiBGQ19WRklfUkVHSVNURVJFRCkKKwkJCWxwZmNfaXNzdWVfaW5pdF92cGkodnBvcnQpOworCQllbHNlCiAJCQlscGZjX2lzc3VlX3JlZ192ZmkodnBvcnQpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTgwNCw2ICs4MTMsOSBAQAogCQkJCSBpcnNwLT51bHBUaW1lb3V0KTsKIAkJZ290byBmbG9naWZhaWw7CiAJfQorCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX1ZQT1JUX0NWTF9SQ1ZEOworCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAogCS8qCiAJICogVGhlIEZMb2dJIHN1Y2NlZWRlZC4gIFN5bmMgdGhlIGRhdGEgZm9yIHRoZSBDUFUgYmVmb3JlCkBAIC0yNzIwLDcgKzI3MzIsNyBAQAogCWlmIChkaWQgPT0gRkRNSV9ESUQpCiAJCXJldHJ5ID0gMTsKIAotCWlmICgoY21kID09IEVMU19DTURfRkxPR0kpICYmCisJaWYgKCgoY21kID09IEVMU19DTURfRkxPR0kpIHx8IChjbWQgPT0gRUxTX0NNRF9GRElTQykpICYmCiAJICAgIChwaGJhLT5mY190b3BvbG9neSAhPSBUT1BPTE9HWV9MT09QKSAmJgogCSAgICAhbHBmY19lcnJvcl9sb3N0X2xpbmsoaXJzcCkpIHsKIAkJLyogRkxPR0kgcmV0cnkgcG9saWN5ICovCkBAIC00Mzg1LDcgKzQzOTcsNyBAQAogCiAJZGlkID0gRmFicmljX0RJRDsKIAotCWlmICgobHBmY19jaGVja19zcGFybSh2cG9ydCwgbmRscCwgc3AsIENMQVNTMykpKSB7CisJaWYgKChscGZjX2NoZWNrX3NwYXJtKHZwb3J0LCBuZGxwLCBzcCwgQ0xBU1MzLCAxKSkpIHsKIAkJLyogRm9yIGEgRkxPR0kgd2UgYWNjZXB0LCB0aGVuIGlmIG91ciBwb3J0bmFtZSBpcyBncmVhdGVyCiAJCSAqIHRoZW4gdGhlIHJlbW90ZSBwb3J0bmFtZSB3ZSBpbml0aWF0ZSBOcG9ydCBsb2dpbi4KIAkJICovCkBAIC01OTE1LDYgKzU5MjcsNyBAQAogCXN0cnVjdCBTY3NpX0hvc3QgICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSAoc3RydWN0IGxwZmNfbm9kZWxpc3QgKikgcG1iLT5jb250ZXh0MjsKIAlNQUlMQk9YX3QgKm1iID0gJnBtYi0+dS5tYjsKKwlpbnQgcmM7CiAKIAlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCXZwb3J0LT5mY19mbGFnICY9IH5GQ19WUE9SVF9ORUVEU19SRUdfVlBJOwpAQCAtNTkzNiw2ICs1OTQ5LDI2IEBACiAJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCQlscGZjX2Nhbl9kaXNjdG1vKHZwb3J0KTsKIAkJCWJyZWFrOworCQkvKiBJZiByZWdfdnBpIGZhaWwgd2l0aCBpbnZhbGlkIFZQSSBzdGF0dXMsIHJlLWluaXQgVlBJICovCisJCWNhc2UgMHgyMDoKKwkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJOworCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQkJbHBmY19pbml0X3ZwaShwaGJhLCBwbWIsIHZwb3J0LT52cGkpOworCQkJcG1iLT52cG9ydCA9IHZwb3J0OworCQkJcG1iLT5tYm94X2NtcGwgPSBscGZjX2luaXRfdnBpX2NtcGw7CisJCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLAorCQkJCU1CWF9OT1dBSVQpOworCQkJaWYgKHJjID09IE1CWF9OT1RfRklOSVNIRUQpIHsKKwkJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LAorCQkJCQlLRVJOX0VSUiwgTE9HX01CT1gsCisJCQkJCSIyNzMyIEZhaWxlZCB0byBpc3N1ZSBJTklUX1ZQSSIKKwkJCQkJIiBtYWlsYm94IGNvbW1hbmRcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlscGZjX25scF9wdXQobmRscCk7CisJCQkJcmV0dXJuOworCQkJfQorCiAJCWRlZmF1bHQ6CiAJCQkvKiBUcnkgdG8gcmVjb3ZlciBmcm9tIHRoaXMgZXJyb3IgKi8KIAkJCWxwZmNfbWJ4X3VucmVnX3ZwaSh2cG9ydCk7CkBAIC01OTQ5LDEzICs1OTgyLDE3IEBACiAJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCXZwb3J0LT52cGlfc3RhdGUgfD0gTFBGQ19WUElfUkVHSVNURVJFRDsKLQkJaWYgKHZwb3J0ID09IHBoYmEtPnBwb3J0KQorCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCWlmICh2cG9ydCA9PSBwaGJhLT5wcG9ydCkgewogCQkJaWYgKHBoYmEtPnNsaV9yZXYgPCBMUEZDX1NMSV9SRVY0KQogCQkJCWxwZmNfaXNzdWVfZmFicmljX3JlZ2xvZ2luKHZwb3J0KTsKLQkJCWVsc2UKLQkJCQlscGZjX2lzc3VlX3JlZ192ZmkodnBvcnQpOwotCQllbHNlCisJCQllbHNlIHsKKwkJCQlscGZjX3N0YXJ0X2ZkaXNjcyhwaGJhKTsKKwkJCQlscGZjX2RvX3Njcl9uc19wbG9naShwaGJhLCB2cG9ydCk7CisJCQl9CisJCX0gZWxzZQogCQkJbHBmY19kb19zY3JfbnNfcGxvZ2kocGhiYSwgdnBvcnQpOwogCX0KIApAQCAtNTk3Nyw3ICs2MDE0LDcgQEAKICAqIFRoaXMgcm91dGluZSByZWdpc3RlcnMgdGhlIEB2cG9ydCBhcyBhIG5ldyB2aXJ0dWFsIHBvcnQgd2l0aCBhIEhCQS4KICAqIEl0IGlzIGRvbmUgdGhyb3VnaCBhIHJlZ2lzdGVyaW5nIHZwaSBtYWlsYm94IGNvbW1hbmQuCiAgKiovCi1zdGF0aWMgdm9pZAordm9pZAogbHBmY19yZWdpc3Rlcl9uZXdfdnBvcnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsCiAJCQlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCkKIHsKQEAgLTYwMTgsNiArNjA1NSw3OCBAQAogfQogCiAvKioKKyAqIGxwZmNfcmV0cnlfcHBvcnRfZGlzY292ZXJ5IC0gU3RhcnQgdGltZXIgdG8gcmV0cnkgRkxPR0kuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgYWJvcnQgYWxsIHBlbmRpbmcgZGlzY292ZXJ5IGNvbW1hbmRzIGFuZAorICogc3RhcnQgYSB0aW1lciB0byByZXRyeSBGTE9HSSBmb3IgdGhlIHBoeXNpY2FsIHBvcnQKKyAqIGRpc2NvdmVyeS4KKyAqKi8KK3ZvaWQKK2xwZmNfcmV0cnlfcHBvcnRfZGlzY292ZXJ5KHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgbHBmY192cG9ydCAqKnZwb3J0czsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3Q7CisJaW50IGk7CisJdWludDMyX3QgbGlua19zdGF0ZTsKKworCS8qIFRyZWF0IHRoaXMgZmFpbHVyZSBhcyBsaW5rZG93biBmb3IgYWxsIHZwb3J0cyAqLworCWxpbmtfc3RhdGUgPSBwaGJhLT5saW5rX3N0YXRlOworCWxwZmNfbGlua2Rvd24ocGhiYSk7CisJcGhiYS0+bGlua19zdGF0ZSA9IGxpbmtfc3RhdGU7CisKKwl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOworCisJaWYgKHZwb3J0cykgeworCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cG9ydHMgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgeworCQkJbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHZwb3J0c1tpXSwgRmFicmljX0RJRCk7CisJCQlpZiAobmRscCkKKwkJCQlscGZjX2NhbmNlbF9yZXRyeV9kZWxheV90bW8odnBvcnRzW2ldLCBuZGxwKTsKKwkJCWxwZmNfZWxzX2ZsdXNoX2NtZCh2cG9ydHNbaV0pOworCQl9CisJCWxwZmNfZGVzdHJveV92cG9ydF93b3JrX2FycmF5KHBoYmEsIHZwb3J0cyk7CisJfQorCisJLyogSWYgZmFicmljIHJlcXVpcmUgRkxPR0ksIHRoZW4gcmUtaW5zdGFudGlhdGUgcGh5c2ljYWwgbG9naW4gKi8KKwluZGxwID0gbHBmY19maW5kbm9kZV9kaWQocGhiYS0+cHBvcnQsIEZhYnJpY19ESUQpOworCWlmICghbmRscCkKKwkJcmV0dXJuOworCisKKwlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydChwaGJhLT5wcG9ydCk7CisJbW9kX3RpbWVyKCZuZGxwLT5ubHBfZGVsYXlmdW5jLCBqaWZmaWVzICsgSFopOworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX0RFTEFZX1RNTzsKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJbmRscC0+bmxwX2xhc3RfZWxzY21kID0gRUxTX0NNRF9GTE9HSTsKKwlwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSA9IExQRkNfRkxPR0k7CisJcmV0dXJuOworfQorCisvKioKKyAqIGxwZmNfZmFicmljX2xvZ2luX3JlcWQgLSBDaGVjayBpZiBGTE9HSSByZXF1aXJlZC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICogQGNtZGlvY2I6IHBvaW50ZXIgdG8gRkRJU0MgY29tbWFuZCBpb2NiLgorICogQHJzcGlvY2I6IHBvaW50ZXIgdG8gRkRJU0MgcmVzcG9uc2UgaW9jYi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY2hlY2tzIGlmIGEgRkxPR0kgaXMgcmVndWlyZWQgZm9yIEZESVNDCisgKiB0byBzdWNjZWVkLgorICoqLworc3RhdGljIGludAorbHBmY19mYWJyaWNfbG9naW5fcmVxZChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsCisJCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLAorCQlzdHJ1Y3QgbHBmY19pb2NicSAqcnNwaW9jYikKK3sKKworCWlmICgocnNwaW9jYi0+aW9jYi51bHBTdGF0dXMgIT0gSU9TVEFUX0ZBQlJJQ19SSlQpIHx8CisJCShyc3Bpb2NiLT5pb2NiLnVuLnVscFdvcmRbNF0gIT0gUkpUX0xPR0lOX1JFUVVJUkVEKSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworLyoqCiAgKiBscGZjX2NtcGxfZWxzX2ZkaXNjIC0gQ29tcGxldGlvbiBmdW5jdGlvbiBmb3IgZmRpc2MgaW9jYiBjb21tYW5kCiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KICAqIEBjbWRpb2NiOiBwb2ludGVyIHRvIGxwZmMgY29tbWFuZCBpb2NiIGRhdGEgc3RydWN0dXJlLgpAQCAtNjA2Niw2ICs2MTc1LDEyIEBACiAJCWlyc3AtPnVscFN0YXR1cywgaXJzcC0+dW4udWxwV29yZFs0XSwgdnBvcnQtPmZjX3ByZXZESUQpOwogCiAJaWYgKGlyc3AtPnVscFN0YXR1cykgeworCisJCWlmIChscGZjX2ZhYnJpY19sb2dpbl9yZXFkKHBoYmEsIGNtZGlvY2IsIHJzcGlvY2IpKSB7CisJCQlscGZjX3JldHJ5X3Bwb3J0X2Rpc2NvdmVyeShwaGJhKTsKKwkJCWdvdG8gb3V0OworCQl9CisKIAkJLyogQ2hlY2sgZm9yIHJldHJ5ICovCiAJCWlmIChscGZjX2Vsc19yZXRyeShwaGJhLCBjbWRpb2NiLCByc3Bpb2NiKSkKIAkJCWdvdG8gb3V0OwpAQCAtNjA3Niw2ICs2MTkxLDcgQEAKIAkJZ290byBmZGlzY19mYWlsZWQ7CiAJfQogCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX1ZQT1JUX0NWTF9SQ1ZEOwogCXZwb3J0LT5mY19mbGFnIHw9IEZDX0ZBQlJJQzsKIAlpZiAodnBvcnQtPnBoYmEtPmZjX3RvcG9sb2d5ID09IFRPUE9MT0dZX0xPT1ApCiAJCXZwb3J0LT5mY19mbGFnIHw9ICBGQ19QVUJMSUNfTE9PUDsKQEAgLTYxMDMsMTAgKzYyMTksMTMgQEAKIAkJbHBmY19tYnhfdW5yZWdfdnBpKHZwb3J0KTsKIAkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfUkVHX1ZQSTsKKwkJdnBvcnQtPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfSU5JVF9WUEk7CiAJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAl9CiAKLQlpZiAodnBvcnQtPmZjX2ZsYWcgJiBGQ19WUE9SVF9ORUVEU19SRUdfVlBJKQorCWlmICh2cG9ydC0+ZmNfZmxhZyAmIEZDX1ZQT1JUX05FRURTX0lOSVRfVlBJKQorCQlscGZjX2lzc3VlX2luaXRfdnBpKHZwb3J0KTsKKwllbHNlIGlmICh2cG9ydC0+ZmNfZmxhZyAmIEZDX1ZQT1JUX05FRURTX1JFR19WUEkpCiAJCWxwZmNfcmVnaXN0ZXJfbmV3X3Zwb3J0KHBoYmEsIHZwb3J0LCBuZGxwKTsKIAllbHNlCiAJCWxwZmNfZG9fc2NyX25zX3Bsb2dpKHBoYmEsIHZwb3J0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKaW5kZXggMjQ0NWUzOS4uMjM1OWQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKQEAgLTUyNSw2ICs1MjUsOCBAQAogCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJCWxwZmNfc2xpX2hicWJ1Zl9hZGRfaGJxcyhwaGJhLCBMUEZDX0VMU19IQlEpOwogCQl9CisJCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX0VWVCkKKwkJCWxwZmNfc2xpNF9mY2ZfcmVkaXNjX2V2ZW50X3Byb2MocGhiYSk7CiAJfQogCiAJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKQEAgLTcwNiw2ICs3MDgsOCBAQAogdm9pZAogbHBmY19wb3J0X2xpbmtfZmFpbHVyZShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpCiB7CisJbHBmY192cG9ydF9zZXRfc3RhdGUodnBvcnQsIEZDX1ZQT1JUX0xJTktET1dOKTsKKwogCS8qIENsZWFudXAgYW55IG91dHN0YW5kaW5nIHJlY2VpdmVkIGJ1ZmZlcnMgKi8KIAlscGZjX2NsZWFudXBfcmN2X2J1ZmZlcnModnBvcnQpOwogCkBAIC03NTIsMTIgKzc1NiwxNCBAQAogCWxwZmNfc2NzaV9kZXZfYmxvY2socGhiYSk7CiAKIAlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfihGQ0ZfQVZBSUxBQkxFIHwgRkNGX0RJU0NPVkVSRUQpOworCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+KEZDRl9BVkFJTEFCTEUgfCBGQ0ZfU0NBTl9ET05FKTsKKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCWlmIChwaGJhLT5saW5rX3N0YXRlID4gTFBGQ19MSU5LX0RPV04pIHsKIAkJcGhiYS0+bGlua19zdGF0ZSA9IExQRkNfTElOS19ET1dOOworCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCQlwaGJhLT5wcG9ydC0+ZmNfZmxhZyAmPSB+RkNfTEJJVDsKKwkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCX0KLQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CiAJaWYgKHZwb3J0cyAhPSBOVUxMKQogCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cG9ydHMgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgewpAQCAtMTAyMyw3ICsxMDI5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwotCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSAoRkNGX0RJU0NPVkVSRUQgfCBGQ0ZfSU5fVVNFKTsKKwlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gKEZDRl9TQ0FOX0RPTkUgfCBGQ0ZfSU5fVVNFKTsKIAlwaGJhLT5oYmFfZmxhZyAmPSB+RkNGX0RJU0NfSU5QUk9HUkVTUzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiAJaWYgKHZwb3J0LT5wb3J0X3N0YXRlICE9IExQRkNfRkxPR0kpCkBAIC0xMDQ1LDI1ICsxMDUxLDIzIEBACiBzdGF0aWMgdWludDMyX3QKIGxwZmNfZmFiX25hbWVfbWF0Y2godWludDhfdCAqZmFiX25hbWUsIHN0cnVjdCBmY2ZfcmVjb3JkICpuZXdfZmNmX3JlY29yZCkKIHsKLQlpZiAoKGZhYl9uYW1lWzBdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMCwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoZmFiX25hbWVbMV0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8xLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChmYWJfbmFtZVsyXSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzIsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKGZhYl9uYW1lWzNdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMywgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoZmFiX25hbWVbNF0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV80LCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChmYWJfbmFtZVs1XSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzUsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKGZhYl9uYW1lWzZdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfNiwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoZmFiX25hbWVbN10gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV83LCBuZXdfZmNmX3JlY29yZCkpKQotCQlyZXR1cm4gMTsKLQllbHNlCisJaWYgKGZhYl9uYW1lWzBdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMCwgbmV3X2ZjZl9yZWNvcmQpKQogCQlyZXR1cm4gMDsKKwlpZiAoZmFiX25hbWVbMV0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8xLCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChmYWJfbmFtZVsyXSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzIsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKGZhYl9uYW1lWzNdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMywgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoZmFiX25hbWVbNF0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV80LCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChmYWJfbmFtZVs1XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzUsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKGZhYl9uYW1lWzZdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfNiwgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoZmFiX25hbWVbN10gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV83LCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCXJldHVybiAxOwogfQogCiAvKioKQEAgLTEwNzgsMzAgKzEwODIsMjggQEAKIHN0YXRpYyB1aW50MzJfdAogbHBmY19zd19uYW1lX21hdGNoKHVpbnQ4X3QgKnN3X25hbWUsIHN0cnVjdCBmY2ZfcmVjb3JkICpuZXdfZmNmX3JlY29yZCkKIHsKLQlpZiAoKHN3X25hbWVbMF0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8wLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChzd19uYW1lWzFdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMSwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoc3dfbmFtZVsyXSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzIsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHN3X25hbWVbM10gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8zLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChzd19uYW1lWzRdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNCwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAoc3dfbmFtZVs1XSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzUsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHN3X25hbWVbNl0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV82LCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChzd19uYW1lWzddID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNywgbmV3X2ZjZl9yZWNvcmQpKSkKLQkJcmV0dXJuIDE7Ci0JZWxzZQorCWlmIChzd19uYW1lWzBdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMCwgbmV3X2ZjZl9yZWNvcmQpKQogCQlyZXR1cm4gMDsKKwlpZiAoc3dfbmFtZVsxXSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzEsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKHN3X25hbWVbMl0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8yLCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChzd19uYW1lWzNdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMywgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoc3dfbmFtZVs0XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzQsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJaWYgKHN3X25hbWVbNV0gIT0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV81LCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChzd19uYW1lWzZdICE9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNiwgbmV3X2ZjZl9yZWNvcmQpKQorCQlyZXR1cm4gMDsKKwlpZiAoc3dfbmFtZVs3XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzcsIG5ld19mY2ZfcmVjb3JkKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgogICogbHBmY19tYWNfYWRkcl9tYXRjaCAtIENoZWNrIGlmIHRoZSBmY2YgbWFjIGFkZHJlc3MgbWF0Y2guCi0gKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBtYWNfYWRkcjogcG9pbnRlciB0byBtYWMgYWRkcmVzcy4KICAqIEBuZXdfZmNmX3JlY29yZDogcG9pbnRlciB0byBmY2YgcmVjb3JkLgogICoKICAqIFRoaXMgcm91dGluZSBjb21wYXJlIHRoZSBmY2YgcmVjb3JkJ3MgbWFjIGFkZHJlc3Mgd2l0aCBIQkEncwpAQCAtMTEwOSw4NSArMTExMSwxMTUgQEAKICAqIHJldHVybnMgMSBlbHNlIHJldHVybiAwLgogICoqLwogc3RhdGljIHVpbnQzMl90Ci1scGZjX21hY19hZGRyX21hdGNoKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGZjZl9yZWNvcmQgKm5ld19mY2ZfcmVjb3JkKQorbHBmY19tYWNfYWRkcl9tYXRjaCh1aW50OF90ICptYWNfYWRkciwgc3RydWN0IGZjZl9yZWNvcmQgKm5ld19mY2ZfcmVjb3JkKQogewotCWlmICgocGhiYS0+ZmNmLm1hY19hZGRyWzBdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzAsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHBoYmEtPmZjZi5tYWNfYWRkclsxXSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18xLCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChwaGJhLT5mY2YubWFjX2FkZHJbMl0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMiwgbmV3X2ZjZl9yZWNvcmQpKSAmJgotCSAgICAocGhiYS0+ZmNmLm1hY19hZGRyWzNdID09Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzMsIG5ld19mY2ZfcmVjb3JkKSkgJiYKLQkgICAgKHBoYmEtPmZjZi5tYWNfYWRkcls0XSA9PQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY180LCBuZXdfZmNmX3JlY29yZCkpICYmCi0JICAgIChwaGJhLT5mY2YubWFjX2FkZHJbNV0gPT0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfNSwgbmV3X2ZjZl9yZWNvcmQpKSkKLQkJcmV0dXJuIDE7Ci0JZWxzZQorCWlmIChtYWNfYWRkclswXSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18wLCBuZXdfZmNmX3JlY29yZCkpCiAJCXJldHVybiAwOworCWlmIChtYWNfYWRkclsxXSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18xLCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChtYWNfYWRkclsyXSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18yLCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChtYWNfYWRkclszXSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18zLCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChtYWNfYWRkcls0XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY180LCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCWlmIChtYWNfYWRkcls1XSAhPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY181LCBuZXdfZmNmX3JlY29yZCkpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgYm9vbAorbHBmY192bGFuX2lkX21hdGNoKHVpbnQxNl90IGN1cnJfdmxhbl9pZCwgdWludDE2X3QgbmV3X3ZsYW5faWQpCit7CisJcmV0dXJuIChjdXJyX3ZsYW5faWQgPT0gbmV3X3ZsYW5faWQpOwogfQogCiAvKioKICAqIGxwZmNfY29weV9mY2ZfcmVjb3JkIC0gQ29weSBmY2YgaW5mb3JtYXRpb24gdG8gbHBmY19oYmEuCi0gKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBmY2Y6IHBvaW50ZXIgdG8gZHJpdmVyIGZjZiByZWNvcmQuCiAgKiBAbmV3X2ZjZl9yZWNvcmQ6IHBvaW50ZXIgdG8gZmNmIHJlY29yZC4KICAqCiAgKiBUaGlzIHJvdXRpbmUgY29waWVzIHRoZSBGQ0YgaW5mb3JtYXRpb24gZnJvbSB0aGUgRkNGCiAgKiByZWNvcmQgdG8gbHBmY19oYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKiovCiBzdGF0aWMgdm9pZAotbHBmY19jb3B5X2ZjZl9yZWNvcmQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgZmNmX3JlY29yZCAqbmV3X2ZjZl9yZWNvcmQpCitscGZjX2NvcHlfZmNmX3JlY29yZChzdHJ1Y3QgbHBmY19mY2ZfcmVjICpmY2ZfcmVjLAorCQkgICAgIHN0cnVjdCBmY2ZfcmVjb3JkICpuZXdfZmNmX3JlY29yZCkKIHsKLQlwaGJhLT5mY2YuZmFicmljX25hbWVbMF0gPQorCS8qIEZhYnJpYyBuYW1lICovCisJZmNmX3JlYy0+ZmFicmljX25hbWVbMF0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzAsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YuZmFicmljX25hbWVbMV0gPQorCWZjZl9yZWMtPmZhYnJpY19uYW1lWzFdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV8xLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLmZhYnJpY19uYW1lWzJdID0KKwlmY2ZfcmVjLT5mYWJyaWNfbmFtZVsyXSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfMiwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5mYWJyaWNfbmFtZVszXSA9CisJZmNmX3JlYy0+ZmFicmljX25hbWVbM10gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzMsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YuZmFicmljX25hbWVbNF0gPQorCWZjZl9yZWMtPmZhYnJpY19uYW1lWzRdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV80LCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLmZhYnJpY19uYW1lWzVdID0KKwlmY2ZfcmVjLT5mYWJyaWNfbmFtZVs1XSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfZmFiX25hbWVfNSwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5mYWJyaWNfbmFtZVs2XSA9CisJZmNmX3JlYy0+ZmFicmljX25hbWVbNl0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZhYl9uYW1lXzYsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YuZmFicmljX25hbWVbN10gPQorCWZjZl9yZWMtPmZhYnJpY19uYW1lWzddID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mYWJfbmFtZV83LCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLm1hY19hZGRyWzBdID0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMCwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5tYWNfYWRkclsxXSA9Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzEsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YubWFjX2FkZHJbMl0gPQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY18yLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLm1hY19hZGRyWzNdID0KLQkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9tYWNfMywgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5tYWNfYWRkcls0XSA9Ci0JCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzQsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YubWFjX2FkZHJbNV0gPQotCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX21hY181LCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLmZjZl9pbmR4ID0gYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9mY2ZfaW5kZXgsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YucHJpb3JpdHkgPSBuZXdfZmNmX3JlY29yZC0+ZmlwX3ByaW9yaXR5OwotCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVswXSA9CisJLyogTWFjIGFkZHJlc3MgKi8KKwlmY2ZfcmVjLT5tYWNfYWRkclswXSA9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzAsIG5ld19mY2ZfcmVjb3JkKTsKKwlmY2ZfcmVjLT5tYWNfYWRkclsxXSA9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzEsIG5ld19mY2ZfcmVjb3JkKTsKKwlmY2ZfcmVjLT5tYWNfYWRkclsyXSA9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzIsIG5ld19mY2ZfcmVjb3JkKTsKKwlmY2ZfcmVjLT5tYWNfYWRkclszXSA9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzMsIG5ld19mY2ZfcmVjb3JkKTsKKwlmY2ZfcmVjLT5tYWNfYWRkcls0XSA9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzQsIG5ld19mY2ZfcmVjb3JkKTsKKwlmY2ZfcmVjLT5tYWNfYWRkcls1XSA9IGJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzUsIG5ld19mY2ZfcmVjb3JkKTsKKwkvKiBGQ0YgcmVjb3JkIGluZGV4ICovCisJZmNmX3JlYy0+ZmNmX2luZHggPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZjZl9pbmRleCwgbmV3X2ZjZl9yZWNvcmQpOworCS8qIEZDRiByZWNvcmQgcHJpb3JpdHkgKi8KKwlmY2ZfcmVjLT5wcmlvcml0eSA9IG5ld19mY2ZfcmVjb3JkLT5maXBfcHJpb3JpdHk7CisJLyogU3dpdGNoIG5hbWUgKi8KKwlmY2ZfcmVjLT5zd2l0Y2hfbmFtZVswXSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMCwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVsxXSA9CisJZmNmX3JlYy0+c3dpdGNoX25hbWVbMV0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzEsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2Yuc3dpdGNoX25hbWVbMl0gPQorCWZjZl9yZWMtPnN3aXRjaF9uYW1lWzJdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8yLCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzNdID0KKwlmY2ZfcmVjLT5zd2l0Y2hfbmFtZVszXSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMywgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVs0XSA9CisJZmNmX3JlYy0+c3dpdGNoX25hbWVbNF0gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzQsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2Yuc3dpdGNoX25hbWVbNV0gPQorCWZjZl9yZWMtPnN3aXRjaF9uYW1lWzVdID0KIAkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV81LCBuZXdfZmNmX3JlY29yZCk7Ci0JcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzZdID0KKwlmY2ZfcmVjLT5zd2l0Y2hfbmFtZVs2XSA9CiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNiwgbmV3X2ZjZl9yZWNvcmQpOwotCXBoYmEtPmZjZi5zd2l0Y2hfbmFtZVs3XSA9CisJZmNmX3JlYy0+c3dpdGNoX25hbWVbN10gPQogCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzcsIG5ld19mY2ZfcmVjb3JkKTsKIH0KIAogLyoqCisgKiBscGZjX3VwZGF0ZV9mY2ZfcmVjb3JkIC0gVXBkYXRlIGRyaXZlciBmY2YgcmVjb3JkCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBmY2ZfcmVjOiBwb2ludGVyIHRvIGRyaXZlciBmY2YgcmVjb3JkLgorICogQG5ld19mY2ZfcmVjb3JkOiBwb2ludGVyIHRvIGhiYSBmY2YgcmVjb3JkLgorICogQGFkZHJfbW9kZTogYWRkcmVzcyBtb2RlIHRvIGJlIHNldCB0byB0aGUgZHJpdmVyIGZjZiByZWNvcmQuCisgKiBAdmxhbl9pZDogdmxhbiB0YWcgdG8gYmUgc2V0IHRvIHRoZSBkcml2ZXIgZmNmIHJlY29yZC4KKyAqIEBmbGFnOiBmbGFnIGJpdHMgdG8gYmUgc2V0IHRvIHRoZSBkcml2ZXIgZmNmIHJlY29yZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgdXBkYXRlcyB0aGUgZHJpdmVyIEZDRiByZWNvcmQgZnJvbSB0aGUgbmV3IEhCQSBGQ0YgcmVjb3JkCisgKiB0b2dldGhlciB3aXRoIHRoZSBhZGRyZXNzIG1vZGUsIHZsYW5faWQsIGFuZCBvdGhlciBpbmZvcm1hdGlvbnMuIFRoaXMKKyAqIHJvdXRpbmUgaXMgY2FsbGVkIHdpdGggdGhlIGhvc3QgbG9jayBoZWxkLgorICoqLworc3RhdGljIHZvaWQKK19fbHBmY191cGRhdGVfZmNmX3JlY29yZChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX2ZjZl9yZWMgKmZjZl9yZWMsCisJCSAgICAgICBzdHJ1Y3QgZmNmX3JlY29yZCAqbmV3X2ZjZl9yZWNvcmQsIHVpbnQzMl90IGFkZHJfbW9kZSwKKwkJICAgICAgIHVpbnQxNl90IHZsYW5faWQsIHVpbnQzMl90IGZsYWcpCit7CisJLyogQ29weSB0aGUgZmllbGRzIGZyb20gdGhlIEhCQSdzIEZDRiByZWNvcmQgKi8KKwlscGZjX2NvcHlfZmNmX3JlY29yZChmY2ZfcmVjLCBuZXdfZmNmX3JlY29yZCk7CisJLyogVXBkYXRlIG90aGVyIGZpZWxkcyBvZiBkcml2ZXIgRkNGIHJlY29yZCAqLworCWZjZl9yZWMtPmFkZHJfbW9kZSA9IGFkZHJfbW9kZTsKKwlmY2ZfcmVjLT52bGFuX2lkID0gdmxhbl9pZDsKKwlmY2ZfcmVjLT5mbGFnIHw9IChmbGFnIHwgUkVDT1JEX1ZBTElEKTsKK30KKworLyoqCiAgKiBscGZjX3JlZ2lzdGVyX2ZjZiAtIFJlZ2lzdGVyIHRoZSBGQ0Ygd2l0aCBoYmEuCiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KICAqCkBAIC0xMjEyLDcgKzEyNDQsNyBAQAogCiAJLyogVGhlIEZDRiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQsIHN0YXJ0IGRpc2NvdmVyeSAqLwogCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVHSVNURVJFRCkgewotCQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gKEZDRl9ESVNDT1ZFUkVEIHwgRkNGX0lOX1VTRSk7CisJCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSAoRkNGX1NDQU5fRE9ORSB8IEZDRl9JTl9VU0UpOwogCQlwaGJhLT5oYmFfZmxhZyAmPSB+RkNGX0RJU0NfSU5QUk9HUkVTUzsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOwogCQlpZiAocGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUgIT0gTFBGQ19GTE9HSSkKQEAgLTEyNTAsNiArMTI4Miw3IEBACiAgKiBAbmV3X2ZjZl9yZWNvcmQ6IHBvaW50ZXIgdG8gZmNmIHJlY29yZC4KICAqIEBib290X2ZsYWc6IEluZGljYXRlcyBpZiB0aGlzIHJlY29yZCB1c2VkIGJ5IGJvb3QgYmlvcy4KICAqIEBhZGRyX21vZGU6IFRoZSBhZGRyZXNzIG1vZGUgdG8gYmUgdXNlZCBieSB0aGlzIEZDRgorICogQHZsYW5faWQ6IFRoZSB2bGFuIGlkIHRvIGJlIHVzZWQgYXMgdmxhbiB0YWdnaW5nIGJ5IHRoaXMgRkNGLgogICoKICAqIFRoaXMgcm91dGluZSBjb21wYXJlIHRoZSBmY2YgcmVjb3JkIHdpdGggY29ubmVjdCBsaXN0IG9idGFpbmVkIGZyb20gdGhlCiAgKiBjb25maWcgcmVnaW9uIHRvIGRlY2lkZSBpZiB0aGlzIEZDRiBjYW4gYmUgdXNlZCBmb3IgU0FOIGRpc2NvdmVyeS4gSXQgcmV0dXJucwpAQCAtMTMyMyw3ICsxMzU2LDggQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uX2VudHJ5LCAmcGhiYS0+ZmNmX2Nvbm5fcmVjX2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5fZW50cnksCisJCQkgICAgJnBoYmEtPmZjZl9jb25uX3JlY19saXN0LCBsaXN0KSB7CiAJCWlmICghKGNvbm5fZW50cnktPmNvbm5fcmVjLmZsYWdzICYgRkNGQ05DVF9WQUxJRCkpCiAJCQljb250aW51ZTsKIApAQCAtMTQ3MCw2ICsxNTA0LDcgQEAKIAkJICovCiAJCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQlwaGJhLT5oYmFfZmxhZyAmPSB+RkNGX0RJU0NfSU5QUk9HUkVTUzsKKwkJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH5GQ0ZfUkVESVNDX0ZPVjsKIAkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAl9CiAKQEAgLTE1MjQsMTEgKzE1NTksMTIgQEAKIAl1aW50MzJfdCBzaGRyX3N0YXR1cywgc2hkcl9hZGRfc3RhdHVzOwogCXVuaW9uIGxwZmNfc2xpNF9jZmdfc2hkciAqc2hkcjsKIAlzdHJ1Y3QgZmNmX3JlY29yZCAqbmV3X2ZjZl9yZWNvcmQ7Ci0JaW50IHJjOwogCXVpbnQzMl90IGJvb3RfZmxhZywgYWRkcl9tb2RlOwogCXVpbnQzMl90IG5leHRfZmNmX2luZGV4OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxwZmNfZmNmX3JlYyAqZmNmX3JlYyA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJdWludDE2X3Qgdmxhbl9pZDsKKwlpbnQgcmM7CiAKIAkvKiBJZiB0aGVyZSBpcyBwZW5kaW5nIEZDb0UgZXZlbnQgcmVzdGFydCBGQ0YgdGFibGUgc2NhbiAqLwogCWlmIChscGZjX2NoZWNrX3BlbmRpbmdfZmNvZV9ldmVudChwaGJhLCAwKSkgewpAQCAtMTU4Myw5ICsxNjE5LDggQEAKIAkJCSAgICAgIHNpemVvZihzdHJ1Y3QgZmNmX3JlY29yZCkpOwogCWJ5dGVwID0gdmlydF9hZGRyICsgc2l6ZW9mKHVuaW9uIGxwZmNfc2xpNF9jZmdfc2hkcik7CiAKLQlyYyA9IGxwZmNfbWF0Y2hfZmNmX2Nvbm5fbGlzdChwaGJhLCBuZXdfZmNmX3JlY29yZCwKLQkJCQkgICAgICAmYm9vdF9mbGFnLCAmYWRkcl9tb2RlLAotCQkJCQkmdmxhbl9pZCk7CisJcmMgPSBscGZjX21hdGNoX2ZjZl9jb25uX2xpc3QocGhiYSwgbmV3X2ZjZl9yZWNvcmQsICZib290X2ZsYWcsCisJCQkJICAgICAgJmFkZHJfbW9kZSwgJnZsYW5faWQpOwogCS8qCiAJICogSWYgdGhlIGZjZiByZWNvcmQgZG9lcyBub3QgbWF0Y2ggd2l0aCBjb25uZWN0IGxpc3QgZW50cmllcwogCSAqIHJlYWQgdGhlIG5leHQgZW50cnkuCkBAIC0xNTk0LDkwICsxNjI5LDE1OSBAQAogCQlnb3RvIHJlYWRfbmV4dF9mY2Y7CiAJLyoKIAkgKiBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgRkNGIGRpc2NvdmVyeSBvZiB0aGUgSEJBLCB1c2UgbGFzdAotCSAqIEZDRiByZWNvcmQgZm9yIHRoZSBkaXNjb3ZlcnkuCisJICogRkNGIHJlY29yZCBmb3IgdGhlIGRpc2NvdmVyeS4gVGhlIGNvbmRpdGlvbiB0aGF0IGEgcmVzY2FuCisJICogbWF0Y2hlcyB0aGUgaW4tdXNlIEZDRiByZWNvcmQ6IGZhYnJpYyBuYW1lLCBzd2l0Y2ggbmFtZSwgbWFjCisJICogYWRkcmVzcywgYW5kIHZsYW5faWQuCiAJICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKIAlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0lOX1VTRSkgewotCQlpZiAobHBmY19mYWJfbmFtZV9tYXRjaChwaGJhLT5mY2YuZmFicmljX25hbWUsCisJCWlmIChscGZjX2ZhYl9uYW1lX21hdGNoKHBoYmEtPmZjZi5jdXJyZW50X3JlYy5mYWJyaWNfbmFtZSwKIAkJCQkJbmV3X2ZjZl9yZWNvcmQpICYmCi0JCSAgICBscGZjX3N3X25hbWVfbWF0Y2gocGhiYS0+ZmNmLnN3aXRjaF9uYW1lLAorCQkgICAgbHBmY19zd19uYW1lX21hdGNoKHBoYmEtPmZjZi5jdXJyZW50X3JlYy5zd2l0Y2hfbmFtZSwKIAkJCQkJbmV3X2ZjZl9yZWNvcmQpICYmCi0JCSAgICBscGZjX21hY19hZGRyX21hdGNoKHBoYmEsIG5ld19mY2ZfcmVjb3JkKSkgeworCQkgICAgbHBmY19tYWNfYWRkcl9tYXRjaChwaGJhLT5mY2YuY3VycmVudF9yZWMubWFjX2FkZHIsCisJCQkJCW5ld19mY2ZfcmVjb3JkKSAmJgorCQkgICAgbHBmY192bGFuX2lkX21hdGNoKHBoYmEtPmZjZi5jdXJyZW50X3JlYy52bGFuX2lkLAorCQkJCQl2bGFuX2lkKSkgewogCQkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9BVkFJTEFCTEU7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJCQlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19QRU5EKQorCQkJCS8qIFN0b3AgRkNGIHJlZGlzYyB3YWl0IHRpbWVyIGlmIHBlbmRpbmcgKi8KKwkJCQlfX2xwZmNfc2xpNF9zdG9wX2ZjZl9yZWRpc2Nfd2FpdF90aW1lcihwaGJhKTsKKwkJCWVsc2UgaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfRk9WKQorCQkJCS8qIElmIGluIGZhc3QgZmFpbG92ZXIsIG1hcmsgaXQncyBjb21wbGV0ZWQgKi8KKwkJCQlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfkZDRl9SRURJU0NfRk9WOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKLQkJZ290byByZWFkX25leHRfZmNmOworCQkvKgorCQkgKiBSZWFkIG5leHQgRkNGIHJlY29yZCBmcm9tIEhCQSBzZWFyY2hpbmcgZm9yIHRoZSBtYXRjaGluZworCQkgKiB3aXRoIGluLXVzZSByZWNvcmQgb25seSBpZiBub3QgZHVyaW5nIHRoZSBmYXN0IGZhaWxvdmVyCisJCSAqIHBlcmlvZC4gSW4gY2FzZSBvZiBmYXN0IGZhaWxvdmVyIHBlcmlvZCwgaXQgc2hhbGwgdHJ5IHRvCisJCSAqIGRldGVybWluZSB3aGV0aGVyIHRoZSBGQ0YgcmVjb3JkIGp1c3QgcmVhZCBzaG91bGQgYmUgdGhlCisJCSAqIG5leHQgY2FuZGlkYXRlLgorCQkgKi8KKwkJaWYgKCEocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19GT1YpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCQkJZ290byByZWFkX25leHRfZmNmOworCQl9CiAJfQorCS8qCisJICogVXBkYXRlIG9uIGZhaWxvdmVyIEZDRiByZWNvcmQgb25seSBpZiBpdCdzIGluIEZDRiBmYXN0LWZhaWxvdmVyCisJICogcGVyaW9kOyBvdGhlcndpc2UsIHVwZGF0ZSBvbiBjdXJyZW50IEZDRiByZWNvcmQuCisJICovCisJaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfRk9WKSB7CisJCS8qIEZhc3QgRkNGIGZhaWxvdmVyIG9ubHkgdG8gdGhlIHNhbWUgZmFicmljIG5hbWUgKi8KKwkJaWYgKGxwZmNfZmFiX25hbWVfbWF0Y2gocGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZhYnJpY19uYW1lLAorCQkJCQluZXdfZmNmX3JlY29yZCkpCisJCQlmY2ZfcmVjID0gJnBoYmEtPmZjZi5mYWlsb3Zlcl9yZWM7CisJCWVsc2UKKwkJCWdvdG8gcmVhZF9uZXh0X2ZjZjsKKwl9IGVsc2UKKwkJZmNmX3JlYyA9ICZwaGJhLT5mY2YuY3VycmVudF9yZWM7CisKIAlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0FWQUlMQUJMRSkgewogCQkvKgotCQkgKiBJZiB0aGUgY3VycmVudCBGQ0YgcmVjb3JkIGRvZXMgbm90IGhhdmUgYm9vdCBmbGFnCi0JCSAqIHNldCBhbmQgbmV3IGZjZiByZWNvcmQgaGFzIGJvb3QgZmxhZyBzZXQsIHVzZSB0aGUKLQkJICogbmV3IGZjZiByZWNvcmQuCisJCSAqIElmIHRoZSBkcml2ZXIgRkNGIHJlY29yZCBkb2VzIG5vdCBoYXZlIGJvb3QgZmxhZworCQkgKiBzZXQgYW5kIG5ldyBoYmEgZmNmIHJlY29yZCBoYXMgYm9vdCBmbGFnIHNldCwgdXNlCisJCSAqIHRoZSBuZXcgaGJhIGZjZiByZWNvcmQuCiAJCSAqLwotCQlpZiAoYm9vdF9mbGFnICYmICEocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0JPT1RfRU5BQkxFKSkgewotCQkJLyogVXNlIHRoaXMgRkNGIHJlY29yZCAqLwotCQkJbHBmY19jb3B5X2ZjZl9yZWNvcmQocGhiYSwgbmV3X2ZjZl9yZWNvcmQpOwotCQkJcGhiYS0+ZmNmLmFkZHJfbW9kZSA9IGFkZHJfbW9kZTsKLQkJCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSBGQ0ZfQk9PVF9FTkFCTEU7Ci0JCQlpZiAodmxhbl9pZCAhPSAweEZGRkYpIHsKLQkJCQlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX1ZBTElEX1ZMQU47Ci0JCQkJcGhiYS0+ZmNmLnZsYW5faWQgPSB2bGFuX2lkOwotCQkJfQotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCQlpZiAoYm9vdF9mbGFnICYmICEoZmNmX3JlYy0+ZmxhZyAmIEJPT1RfRU5BQkxFKSkgeworCQkJLyogQ2hvb3NlIHRoaXMgRkNGIHJlY29yZCAqLworCQkJX19scGZjX3VwZGF0ZV9mY2ZfcmVjb3JkKHBoYmEsIGZjZl9yZWMsIG5ld19mY2ZfcmVjb3JkLAorCQkJCQlhZGRyX21vZGUsIHZsYW5faWQsIEJPT1RfRU5BQkxFKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CiAJCQlnb3RvIHJlYWRfbmV4dF9mY2Y7CiAJCX0KIAkJLyoKLQkJICogSWYgdGhlIGN1cnJlbnQgRkNGIHJlY29yZCBoYXMgYm9vdCBmbGFnIHNldCBhbmQgdGhlCi0JCSAqIG5ldyBGQ0YgcmVjb3JkIGRvZXMgbm90IGhhdmUgYm9vdCBmbGFnLCByZWFkIHRoZSBuZXh0Ci0JCSAqIEZDRiByZWNvcmQuCisJCSAqIElmIHRoZSBkcml2ZXIgRkNGIHJlY29yZCBoYXMgYm9vdCBmbGFnIHNldCBhbmQgdGhlCisJCSAqIG5ldyBoYmEgRkNGIHJlY29yZCBkb2VzIG5vdCBoYXZlIGJvb3QgZmxhZywgcmVhZAorCQkgKiB0aGUgbmV4dCBGQ0YgcmVjb3JkLgogCQkgKi8KLQkJaWYgKCFib290X2ZsYWcgJiYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9CT09UX0VOQUJMRSkpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwkJaWYgKCFib290X2ZsYWcgJiYgKGZjZl9yZWMtPmZsYWcgJiBCT09UX0VOQUJMRSkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CiAJCQlnb3RvIHJlYWRfbmV4dF9mY2Y7CiAJCX0KIAkJLyoKLQkJICogSWYgdGhlcmUgaXMgYSByZWNvcmQgd2l0aCBsb3dlciBwcmlvcml0eSB2YWx1ZSBmb3IKLQkJICogdGhlIGN1cnJlbnQgRkNGLCB1c2UgdGhhdCByZWNvcmQuCisJCSAqIElmIHRoZSBuZXcgaGJhIEZDRiByZWNvcmQgaGFzIGxvd2VyIHByaW9yaXR5IHZhbHVlCisJCSAqIHRoYW4gdGhlIGRyaXZlciBGQ0YgcmVjb3JkLCB1c2UgdGhlIG5ldyByZWNvcmQuCiAJCSAqLwotCQlpZiAobHBmY19mYWJfbmFtZV9tYXRjaChwaGJhLT5mY2YuZmFicmljX25hbWUsCi0JCQkJCW5ld19mY2ZfcmVjb3JkKSAmJgotCQkgICAgKG5ld19mY2ZfcmVjb3JkLT5maXBfcHJpb3JpdHkgPCBwaGJhLT5mY2YucHJpb3JpdHkpKSB7Ci0JCQkvKiBVc2UgdGhpcyBGQ0YgcmVjb3JkICovCi0JCQlscGZjX2NvcHlfZmNmX3JlY29yZChwaGJhLCBuZXdfZmNmX3JlY29yZCk7Ci0JCQlwaGJhLT5mY2YuYWRkcl9tb2RlID0gYWRkcl9tb2RlOwotCQkJaWYgKHZsYW5faWQgIT0gMHhGRkZGKSB7Ci0JCQkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9WQUxJRF9WTEFOOwotCQkJCXBoYmEtPmZjZi52bGFuX2lkID0gdmxhbl9pZDsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKLQkJCWdvdG8gcmVhZF9uZXh0X2ZjZjsKKwkJaWYgKGxwZmNfZmFiX25hbWVfbWF0Y2goZmNmX3JlYy0+ZmFicmljX25hbWUsIG5ld19mY2ZfcmVjb3JkKSAmJgorCQkgICAgKG5ld19mY2ZfcmVjb3JkLT5maXBfcHJpb3JpdHkgPCBmY2ZfcmVjLT5wcmlvcml0eSkpIHsKKwkJCS8qIENob29zZSB0aGlzIEZDRiByZWNvcmQgKi8KKwkJCV9fbHBmY191cGRhdGVfZmNmX3JlY29yZChwaGJhLCBmY2ZfcmVjLCBuZXdfZmNmX3JlY29yZCwKKwkJCQkJYWRkcl9tb2RlLCB2bGFuX2lkLCAwKTsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CiAJCWdvdG8gcmVhZF9uZXh0X2ZjZjsKIAl9CiAJLyoKLQkgKiBUaGlzIGlzIHRoZSBmaXJzdCBhdmFpbGFibGUgRkNGIHJlY29yZCwgdXNlIHRoaXMKLQkgKiByZWNvcmQuCisJICogVGhpcyBpcyB0aGUgZmlyc3Qgc3VpdGFibGUgRkNGIHJlY29yZCwgY2hvb3NlIHRoaXMgcmVjb3JkIGZvcgorCSAqIGluaXRpYWwgYmVzdC1maXQgRkNGLgogCSAqLwotCWxwZmNfY29weV9mY2ZfcmVjb3JkKHBoYmEsIG5ld19mY2ZfcmVjb3JkKTsKLQlwaGJhLT5mY2YuYWRkcl9tb2RlID0gYWRkcl9tb2RlOwotCWlmIChib290X2ZsYWcpCi0JCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSBGQ0ZfQk9PVF9FTkFCTEU7Ci0JcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9BVkFJTEFCTEU7Ci0JaWYgKHZsYW5faWQgIT0gMHhGRkZGKSB7Ci0JCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSBGQ0ZfVkFMSURfVkxBTjsKLQkJcGhiYS0+ZmNmLnZsYW5faWQgPSB2bGFuX2lkOworCWlmIChmY2ZfcmVjKSB7CisJCV9fbHBmY191cGRhdGVfZmNmX3JlY29yZChwaGJhLCBmY2ZfcmVjLCBuZXdfZmNmX3JlY29yZCwKKwkJCQkJIGFkZHJfbW9kZSwgdmxhbl9pZCwgKGJvb3RfZmxhZyA/CisJCQkJCSBCT09UX0VOQUJMRSA6IDApKTsKKwkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9BVkFJTEFCTEU7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOwogCWdvdG8gcmVhZF9uZXh0X2ZjZjsKIAogcmVhZF9uZXh0X2ZjZjoKIAlscGZjX3NsaTRfbWJveF9jbWRfZnJlZShwaGJhLCBtYm94cSk7Ci0JaWYgKG5leHRfZmNmX2luZGV4ID09IExQRkNfRkNPRV9GQ0ZfTkVYVF9OT05FIHx8IG5leHRfZmNmX2luZGV4ID09IDApCi0JCWxwZmNfcmVnaXN0ZXJfZmNmKHBoYmEpOwotCWVsc2UKKwlpZiAobmV4dF9mY2ZfaW5kZXggPT0gTFBGQ19GQ09FX0ZDRl9ORVhUX05PTkUgfHwgbmV4dF9mY2ZfaW5kZXggPT0gMCkgeworCQlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19GT1YpIHsKKwkJCS8qCisJCQkgKiBDYXNlIG9mIEZDRiBmYXN0IGZhaWxvdmVyIHNjYW4KKwkJCSAqLworCisJCQkvKgorCQkJICogSXQgaGFzIG5vdCBmb3VuZCBhbnkgc3VpdGFibGUgRkNGIHJlY29yZCwgY2FuY2VsCisJCQkgKiBGQ0Ygc2NhbiBpbnByb2dyZXNzLCBhbmQgZG8gbm90aGluZworCQkJICovCisJCQlpZiAoIShwaGJhLT5mY2YuZmFpbG92ZXJfcmVjLmZsYWcgJiBSRUNPUkRfVkFMSUQpKSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGlmbGFncyk7CisJCQkJcGhiYS0+aGJhX2ZsYWcgJj0gfkZDRl9ESVNDX0lOUFJPR1JFU1M7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQkvKgorCQkJICogSXQgaGFzIGZvdW5kIGEgc3VpdGFibGUgRkNGIHJlY29yZCB0aGF0IGlzIG5vdAorCQkJICogdGhlIHNhbWUgYXMgaW4tdXNlIEZDRiByZWNvcmQsIHVucmVnaXN0ZXIgdGhlCisJCQkgKiBpbi11c2UgRkNGIHJlY29yZCwgcmVwbGFjZSB0aGUgaW4tdXNlIEZDRiByZWNvcmQKKwkJCSAqIHdpdGggdGhlIG5ldyBGQ0YgcmVjb3JkLCBtYXJrIEZDRiBmYXN0IGZhaWxvdmVyCisJCQkgKiBjb21wbGV0ZWQsIGFuZCB0aGVuIHN0YXJ0IHJlZ2lzdGVyIHRoZSBuZXcgRkNGCisJCQkgKiByZWNvcmQuCisJCQkgKi8KKworCQkJLyogdW5yZWdpc3RlciB0aGUgY3VycmVudCBpbi11c2UgRkNGIHJlY29yZCAqLworCQkJbHBmY191bnJlZ2lzdGVyX2ZjZihwaGJhKTsKKwkJCS8qIHJlcGxhY2UgaW4tdXNlIHJlY29yZCB3aXRoIHRoZSBuZXcgcmVjb3JkICovCisJCQltZW1jcHkoJnBoYmEtPmZjZi5jdXJyZW50X3JlYywKKwkJCSAgICAgICAmcGhiYS0+ZmNmLmZhaWxvdmVyX3JlYywKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGxwZmNfZmNmX3JlYykpOworCQkJLyogbWFyayB0aGUgRkNGIGZhc3QgZmFpbG92ZXIgY29tcGxldGVkICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aGJhbG9jaywgaWZsYWdzKTsKKwkJCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+RkNGX1JFRElTQ19GT1Y7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCQkJLyogUmVnaXN0ZXIgdG8gdGhlIG5ldyBGQ0YgcmVjb3JkICovCisJCQlscGZjX3JlZ2lzdGVyX2ZjZihwaGJhKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHBlcmlvZCB0byBmYXN0IEZDRiBmYWlsb3ZlciwKKwkJCSAqIGRvIG5vdGhpbmcgd2hlbiBzZWFyY2ggdG8gdGhlIGVuZCBvZiB0aGUgRkNGIHRhYmxlLgorCQkJICovCisJCQlpZiAoKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfRVZUKSB8fAorCQkJICAgIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfUkVESVNDX1BFTkQpKQorCQkJCXJldHVybjsKKwkJCS8qCisJCQkgKiBPdGhlcndpc2UsIGluaXRpYWwgc2NhbiBvciBwb3N0IGxpbmtkb3duIHJlc2NhbiwKKwkJCSAqIHJlZ2lzdGVyIHdpdGggdGhlIGJlc3QgZml0IEZDRiByZWNvcmQgZm91bmQgc28KKwkJCSAqIGZhciB0aHJvdWdoIHRoZSBzY2FubmluZyBwcm9jZXNzLgorCQkJICovCisJCQlscGZjX3JlZ2lzdGVyX2ZjZihwaGJhKTsKKwkJfQorCX0gZWxzZQogCQlscGZjX3NsaTRfcmVhZF9mY2ZfcmVjb3JkKHBoYmEsIG5leHRfZmNmX2luZGV4KTsKIAlyZXR1cm47CiAKQEAgLTE2OTUsMTAgKzE3OTksMTMgQEAKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgY29tcGxldGlvbiBvZiBpbml0IHZwaSBtYWlsYm94IGNvbW1hbmQuCiAgKi8KLXN0YXRpYyB2b2lkCit2b2lkCiBscGZjX2luaXRfdnBpX2NtcGwoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKm1ib3hxKQogewogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IG1ib3hxLT52cG9ydDsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CisKIAlpZiAobWJveHEtPnUubWIubWJ4U3RhdHVzKSB7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLAogCQkJCUxPR19NQk9YLApAQCAtMTcwOCw5ICsxODE1LDIzIEBACiAJCWxwZmNfdnBvcnRfc2V0X3N0YXRlKHZwb3J0LCBGQ19WUE9SVF9GQUlMRUQpOwogCQlyZXR1cm47CiAJfQotCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX1ZQT1JUX05FRURTX0lOSVRfVlBJOwotCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCisJLyogSWYgdGhpcyBwb3J0IGlzIHBoeXNpY2FsIHBvcnQgb3IgRkRJU0MgaXMgZG9uZSwgZG8gcmVnX3ZwaSAqLworCWlmICgocGhiYS0+cHBvcnQgPT0gdnBvcnQpIHx8ICh2cG9ydC0+cG9ydF9zdGF0ZSA9PSBMUEZDX0ZESVNDKSkgeworCQkJbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHZwb3J0LCBGYWJyaWNfRElEKTsKKwkJCWlmICghbmRscCkKKwkJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwKKwkJCQkJTE9HX0RJU0NPVkVSWSwKKwkJCQkJIjI3MzEgQ2Fubm90IGZpbmQgZmFicmljICIKKwkJCQkJImNvbnRyb2xsZXIgbm9kZVxuIik7CisJCQllbHNlCisJCQkJbHBmY19yZWdpc3Rlcl9uZXdfdnBvcnQocGhiYSwgdnBvcnQsIG5kbHApOworCQkJbWVtcG9vbF9mcmVlKG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJCXJldHVybjsKKwl9CiAKIAlpZiAocGhiYS0+bGlua19mbGFnICYgTFNfTlBJVl9GQUJfU1VQUE9SVEVEKQogCQlscGZjX2luaXRpYWxfZmRpc2ModnBvcnQpOwpAQCAtMTcxOSwxMCArMTg0MCw0MiBAQAogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX0VMUywKIAkJCQkgIjI2MDYgTm8gTlBJViBGYWJyaWMgc3VwcG9ydFxuIik7CiAJfQorCW1lbXBvb2xfZnJlZShtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJcmV0dXJuOwogfQogCiAvKioKKyAqIGxwZmNfaXNzdWVfaW5pdF92cGkgLSBJc3N1ZSBpbml0X3ZwaSBtYWlsYm94IGNvbW1hbmQuCisgKiBAdnBvcnQ6IHBvaW50ZXIgdG8gbHBmY192cG9ydCBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzc3VlIGEgaW5pdF92cGkgbWFpbGJveCBjb21tYW5kIHRvIGluaXRpYWxpemUKKyAqIFZQSSBmb3IgdGhlIHZwb3J0LgorICovCit2b2lkCitscGZjX2lzc3VlX2luaXRfdnBpKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKK3sKKwlMUEZDX01CT1hRX3QgKm1ib3hxOworCWludCByYzsKKworCW1ib3hxID0gbWVtcG9vbF9hbGxvYyh2cG9ydC0+cGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYm94cSkgeworCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwKKwkJCUxPR19NQk9YLCAiMjYwNyBGYWlsZWQgdG8gYWxsb2NhdGUgIgorCQkJImluaXRfdnBpIG1haWxib3hcbiIpOworCQlyZXR1cm47CisJfQorCWxwZmNfaW5pdF92cGkodnBvcnQtPnBoYmEsIG1ib3hxLCB2cG9ydC0+dnBpKTsKKwltYm94cS0+dnBvcnQgPSB2cG9ydDsKKwltYm94cS0+bWJveF9jbXBsID0gbHBmY19pbml0X3ZwaV9jbXBsOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveCh2cG9ydC0+cGhiYSwgbWJveHEsIE1CWF9OT1dBSVQpOworCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7CisJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLAorCQkJTE9HX01CT1gsICIyNjA4IEZhaWxlZCB0byBpc3N1ZSBpbml0X3ZwaSBtYWlsYm94XG4iKTsKKwkJbWVtcG9vbF9mcmVlKG1ib3hxLCB2cG9ydC0+cGhiYS0+bWJveF9tZW1fcG9vbCk7CisJfQorfQorCisvKioKICAqIGxwZmNfc3RhcnRfZmRpc2NzIC0gc2VuZCBmZGlzY3MgZm9yIGVhY2ggdnBvcnRzIG9uIHRoaXMgcG9ydC4KICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICoKQEAgLTE3MzQsOCArMTg4Nyw2IEBACiB7CiAJc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7CiAJaW50IGk7Ci0JTFBGQ19NQk9YUV90ICptYm94cTsKLQlpbnQgcmM7CiAKIAl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOwogCWlmICh2cG9ydHMgIT0gTlVMTCkgewpAQCAtMTc1NCwyNiArMTkwNSw3IEBACiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAodnBvcnRzW2ldLT5mY19mbGFnICYgRkNfVlBPUlRfTkVFRFNfSU5JVF9WUEkpIHsKLQkJCQltYm94cSA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwKLQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCQkJaWYgKCFtYm94cSkgewotCQkJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0c1tpXSwgS0VSTl9FUlIsCi0JCQkJCUxPR19NQk9YLCAiMjYwNyBGYWlsZWQgdG8gYWxsb2NhdGUgIgotCQkJCQkiaW5pdF92cGkgbWFpbGJveFxuIik7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQlscGZjX2luaXRfdnBpKHBoYmEsIG1ib3hxLCB2cG9ydHNbaV0tPnZwaSk7Ci0JCQkJbWJveHEtPnZwb3J0ID0gdnBvcnRzW2ldOwotCQkJCW1ib3hxLT5tYm94X2NtcGwgPSBscGZjX2luaXRfdnBpX2NtcGw7Ci0JCQkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3hxLAotCQkJCQlNQlhfTk9XQUlUKTsKLQkJCQlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkgewotCQkJCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0c1tpXSwgS0VSTl9FUlIsCi0JCQkJCUxPR19NQk9YLCAiMjYwOCBGYWlsZWQgdG8gaXNzdWUgIgotCQkJCQkiaW5pdF92cGkgbWFpbGJveFxuIik7Ci0JCQkJCW1lbXBvb2xfZnJlZShtYm94cSwKLQkJCQkJCXBoYmEtPm1ib3hfbWVtX3Bvb2wpOwotCQkJCX0KKwkJCQlscGZjX2lzc3VlX2luaXRfdnBpKHZwb3J0c1tpXSk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAocGhiYS0+bGlua19mbGFnICYgTFNfTlBJVl9GQUJfU1VQUE9SVEVEKQpAQCAtMTc5Niw2ICsxOTI4LDcgQEAKIHsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKmRtYWJ1ZiA9IG1ib3hxLT5jb250ZXh0MTsKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSBtYm94cS0+dnBvcnQ7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnQpOwogCiAJaWYgKG1ib3hxLT51Lm1iLm1ieFN0YXR1cykgewogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwgTE9HX01CT1gsCkBAIC0xODEzLDcgKzE5NDYsMTEgQEAKIAkJZ290byBmYWlsX2ZyZWVfbWVtOwogCX0KIAkvKiBUaGUgVlBJIGlzIGltcGxpY2l0bHkgcmVnaXN0ZXJlZCB3aGVuIHRoZSBWRkkgaXMgcmVnaXN0ZXJlZCAqLworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJdnBvcnQtPnZwaV9zdGF0ZSB8PSBMUEZDX1ZQSV9SRUdJU1RFUkVEOworCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZGSV9SRUdJU1RFUkVEOworCXZwb3J0LT5mY19mbGFnICY9IH5GQ19WUE9SVF9ORUVEU19SRUdfVlBJOworCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAogCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSA9PSBMUEZDX0ZBQlJJQ19DRkdfTElOSykgewogCQlscGZjX3N0YXJ0X2ZkaXNjcyhwaGJhKTsKQEAgLTIwNTAsOCArMjE4Nyw3IEBACiAJCQlyZXR1cm47CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkJcmMgPSBscGZjX3NsaTRfcmVhZF9mY2ZfcmVjb3JkKHBoYmEsCi0JCQkJCUxQRkNfRkNPRV9GQ0ZfR0VUX0ZJUlNUKTsKKwkJcmMgPSBscGZjX3NsaTRfcmVhZF9mY2ZfcmVjb3JkKHBoYmEsIExQRkNfRkNPRV9GQ0ZfR0VUX0ZJUlNUKTsKIAkJaWYgKHJjKQogCQkJZ290byBvdXQ7CiAJfQpAQCAtMjEzOSwxMCArMjI3NSwxMiBAQAogCX0KIAogCXBoYmEtPmZjX2V2ZW50VGFnID0gbGEtPmV2ZW50VGFnOworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCWlmIChsYS0+bW0pCiAJCXBoYmEtPnNsaS5zbGlfZmxhZyB8PSBMUEZDX01FTkxPX01BSU5UOwogCWVsc2UKIAkJcGhiYS0+c2xpLnNsaV9mbGFnICY9IH5MUEZDX01FTkxPX01BSU5UOworCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAKIAlwaGJhLT5saW5rX2V2ZW50cysrOwogCWlmIChsYS0+YXR0VHlwZSA9PSBBVF9MSU5LX1VQICYmICghbGEtPm1tKSkgewpAQCAtMjI3MSwxMCArMjQwOSwxMCBAQAogCQkJCSBtYi0+bWJ4U3RhdHVzKTsKIAkJYnJlYWs7CiAJfQotCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJdnBvcnQtPnZwaV9zdGF0ZSAmPSB+TFBGQ19WUElfUkVHSVNURVJFRDsKIAl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJOwotCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCXZwb3J0LT51bnJlZ192cGlfY21wbCA9IFZQT1JUX09LOwogCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCS8qCkBAIC0yMzMyLDcgKzI0NzAsMTAgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAl2cG9ydC0+dnBpX3N0YXRlIHw9IExQRkNfVlBJX1JFR0lTVEVSRUQ7CisJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX1ZQT1JUX05FRURTX1JFR19WUEk7CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCXZwb3J0LT5udW1fZGlzY19ub2RlcyA9IDA7CiAJLyogZ28gdGhydSBOUFIgbGlzdCBhbmQgaXNzdWUgRUxTIFBMT0dJcyAqLwogCWlmICh2cG9ydC0+ZmNfbnByX2NudCkKQEAgLTMyMTgsNiArMzM1OSwzNCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGxwZmNfdW5yZWdfaGJhX3JwaXMgLSBVbnJlZ2lzdGVyIHJwaXMgcmVnaXN0ZXJlZCB0byB0aGUgaGJhLgorICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgdG8gdW5yZWdpc3RlciBhbGwgdGhlIGN1cnJlbnRseSByZWdpc3RlcmVkIFJQSXMKKyAqIHRvIHRoZSBIQkEuCisgKiovCit2b2lkCitscGZjX3VucmVnX2hiYV9ycGlzKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgbHBmY192cG9ydCAqKnZwb3J0czsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlpbnQgaTsKKworCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CisJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBvcnRzICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKKwkJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnRzW2ldKTsKKwkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShuZGxwLCAmdnBvcnRzW2ldLT5mY19ub2RlcywgbmxwX2xpc3RwKSB7CisJCQlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfUlBJX1ZBTElEKQorCQkJCWxwZmNfdW5yZWdfcnBpKHZwb3J0c1tpXSwgbmRscCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCX0KKwlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOworfQorCiB2b2lkCiBscGZjX3VucmVnX2FsbF9ycGlzKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKIHsKQEAgLTQ0NDgsNiArNDYxNywxOTUgQEAKIH0KIAogLyoqCisgKiBscGZjX3VucmVnaXN0ZXJfZmNmX3ByZXAgLSBVbnJlZ2lzdGVyIGZjZiByZWNvcmQgcHJlcGFyYXRpb24KKyAqIEBwaGJhOiBQb2ludGVyIHRvIGhiYSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmUgdGhlIEhCQSBmb3IgdW5yZWdpc3RlcmluZyB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQKKyAqIEZDRiBmcm9tIHRoZSBIQkEuIEl0IHBlcmZvcm1zIHVucmVnaXN0ZXJpbmcsIGluIG9yZGVyLCBSUElzLCBWUElzLCBhbmQKKyAqIFZGSXMuCisgKi8KK2ludAorbHBmY191bnJlZ2lzdGVyX2ZjZl9wcmVwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlMUEZDX01CT1hRX3QgKm1ib3g7CisJc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJaW50IGksIHJjOworCisJLyogVW5yZWdpc3RlciBSUElzICovCisJaWYgKGxwZmNfZmNmX2ludXNlKHBoYmEpKQorCQlscGZjX3VucmVnX2hiYV9ycGlzKHBoYmEpOworCisJLyogQXQgdGhpcyBwb2ludCwgYWxsIGRpc2NvdmVyeSBpcyBhYm9ydGVkICovCisJcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUgPSBMUEZDX1ZQT1JUX1VOS05PV047CisKKwkvKiBVbnJlZ2lzdGVyIFZQSXMgKi8KKwl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOworCWlmICh2cG9ydHMgJiYgKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19OUElWX0VOQUJMRUQpKQorCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm1heF92cG9ydHMgJiYgdnBvcnRzW2ldICE9IE5VTEw7IGkrKykgeworCQkJLyogU3RvcCBGTE9HSS9GRElTQyByZXRyaWVzICovCisJCQluZGxwID0gbHBmY19maW5kbm9kZV9kaWQodnBvcnRzW2ldLCBGYWJyaWNfRElEKTsKKwkJCWlmIChuZGxwKQorCQkJCWxwZmNfY2FuY2VsX3JldHJ5X2RlbGF5X3Rtbyh2cG9ydHNbaV0sIG5kbHApOworCQkJbHBmY19tYnhfdW5yZWdfdnBpKHZwb3J0c1tpXSk7CisJCQlzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydHNbaV0pOworCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJCXZwb3J0c1tpXS0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSTsKKwkJCXZwb3J0c1tpXS0+dnBpX3N0YXRlICY9IH5MUEZDX1ZQSV9SRUdJU1RFUkVEOworCQkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQl9CisJbHBmY19kZXN0cm95X3Zwb3J0X3dvcmtfYXJyYXkocGhiYSwgdnBvcnRzKTsKKworCS8qIENsZWFudXAgYW55IG91dHN0YW5kaW5nIEVMUyBjb21tYW5kcyAqLworCWxwZmNfZWxzX2ZsdXNoX2FsbF9jbWQocGhiYSk7CisKKwkvKiBVbnJlZ2lzdGVyIFZGSSAqLworCW1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOworCWlmICghbWJveCkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUll8TE9HX01CT1gsCisJCQkJIjI1NTYgVU5SRUdfVkZJIG1ib3ggYWxsb2NhdGlvbiBmYWlsZWQiCisJCQkJIkhCQSBzdGF0ZSB4JXhcbiIsIHBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbHBmY191bnJlZ192ZmkobWJveCwgcGhiYS0+cHBvcnQpOworCW1ib3gtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7CisJbWJveC0+bWJveF9jbXBsID0gbHBmY191bnJlZ2lzdGVyX3ZmaV9jbXBsOworCisJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3gsIE1CWF9OT1dBSVQpOworCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKKwkJCQkiMjU1NyBVTlJFR19WRkkgaXNzdWUgbWJveCBmYWlsZWQgcmMgeCV4ICIKKwkJCQkiSEJBIHN0YXRlIHgleFxuIiwKKwkJCQlyYywgcGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUpOworCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCXJldHVybiAtRUlPOworCX0KKworCXNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHBoYmEtPnBwb3J0KTsKKwlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCXBoYmEtPnBwb3J0LT5mY19mbGFnICY9IH5GQ19WRklfUkVHSVNURVJFRDsKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBscGZjX3NsaTRfdW5yZWdpc3Rlcl9mY2YgLSBVbnJlZ2lzdGVyIGN1cnJlbnRseSByZWdpc3RlcmVkIEZDRiByZWNvcmQKKyAqIEBwaGJhOiBQb2ludGVyIHRvIGhiYSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzc3VlcyBzeW5jaHJvbm91cyB1bnJlZ2lzdGVyIEZDRiBtYWlsYm94IGNvbW1hbmQgdG8gSEJBIHRvCisgKiB1bnJlZ2lzdGVyIHRoZSBjdXJyZW50bHkgcmVnaXN0ZXJlZCBGQ0YgcmVjb3JkLiBUaGUgZHJpdmVyIGRvZXMgbm90IHJlc2V0CisgKiB0aGUgZHJpdmVyIEZDRiB1c2FnZSBzdGF0ZSBmbGFncy4KKyAqCisgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsbHkgaXNzdWVkLCBub25lLXplcm8gb3RoZXJ3aXNlLgorICovCitpbnQKK2xwZmNfc2xpNF91bnJlZ2lzdGVyX2ZjZihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJTFBGQ19NQk9YUV90ICptYm94OworCWludCByYzsKKworCW1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOworCWlmICghbWJveCkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUll8TE9HX01CT1gsCisJCQkJIjI1NTEgVU5SRUdfRkNGSSBtYm94IGFsbG9jYXRpb24gZmFpbGVkIgorCQkJCSJIQkEgc3RhdGUgeCV4XG4iLCBwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlscGZjX3VucmVnX2ZjZmkobWJveCwgcGhiYS0+ZmNmLmZjZmkpOworCW1ib3gtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7CisJbWJveC0+bWJveF9jbXBsID0gbHBmY191bnJlZ2lzdGVyX2ZjZmlfY21wbDsKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveCwgTUJYX05PV0FJVCk7CisKKwlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19TTEksCisJCQkJIjI1NTIgVW5yZWdpc3RlciBGQ0ZJIGNvbW1hbmQgZmFpbGVkIHJjIHgleCAiCisJCQkJIkhCQSBzdGF0ZSB4JXhcbiIsCisJCQkJcmMsIHBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNfdW5yZWdpc3Rlcl9mY2ZfcmVzY2FuIC0gVW5yZWdpc3RlciBjdXJyZW50bHkgcmVnaXN0ZXJlZCBmY2YgYW5kIHJlc2NhbgorICogQHBoYmE6IFBvaW50ZXIgdG8gaGJhIGNvbnRleHQgb2JqZWN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdW5yZWdpc3RlcnMgdGhlIGN1cnJlbnRseSByZWlnc3RlcmVkIEZDRi4gVGhpcyBmdW5jdGlvbgorICogYWxzbyB0cmllcyB0byBmaW5kIGFub3RoZXIgRkNGIGZvciBkaXNjb3ZlcnkgYnkgcmVzY2FuIHRoZSBIQkEgRkNGIHRhYmxlLgorICovCit2b2lkCitscGZjX3VucmVnaXN0ZXJfZmNmX3Jlc2NhbihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJaW50IHJjOworCisJLyogUHJlcGFyYXRpb24gZm9yIHVucmVnaXN0ZXJpbmcgZmNmICovCisJcmMgPSBscGZjX3VucmVnaXN0ZXJfZmNmX3ByZXAocGhiYSk7CisJaWYgKHJjKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWSwKKwkJCQkiMjc0OCBGYWlsZWQgdG8gcHJlcGFyZSBmb3IgdW5yZWdpc3RlcmluZyAiCisJCQkJIkhCQSdzIEZDRiByZWNvcmQ6IHJjPSVkXG4iLCByYyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBOb3csIHVucmVnaXN0ZXIgRkNGIHJlY29yZCBhbmQgcmVzZXQgSEJBIEZDRiBzdGF0ZSAqLworCXJjID0gbHBmY19zbGk0X3VucmVnaXN0ZXJfZmNmKHBoYmEpOworCWlmIChyYykKKwkJcmV0dXJuOworCS8qIFJlc2V0IEhCQSBGQ0Ygc3RhdGVzIGFmdGVyIHN1Y2Nlc3NmdWwgdW5yZWdpc3RlciBGQ0YgKi8KKwlwaGJhLT5mY2YuZmNmX2ZsYWcgPSAwOworCisJLyoKKwkgKiBJZiBkcml2ZXIgaXMgbm90IHVubG9hZGluZywgY2hlY2sgaWYgdGhlcmUgaXMgYW55IG90aGVyCisJICogRkNGIHJlY29yZCB0aGF0IGNhbiBiZSB1c2VkIGZvciBkaXNjb3ZlcnkuCisJICovCisJaWYgKChwaGJhLT5wcG9ydC0+bG9hZF9mbGFnICYgRkNfVU5MT0FESU5HKSB8fAorCSAgICAocGhiYS0+bGlua19zdGF0ZSA8IExQRkNfTElOS19VUCkpCisJCXJldHVybjsKKworCXJjID0gbHBmY19zbGk0X3JlYWRfZmNmX3JlY29yZChwaGJhLCBMUEZDX0ZDT0VfRkNGX0dFVF9GSVJTVCk7CisKKwlpZiAocmMpCisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKKwkJCQkiMjU1MyBscGZjX3VucmVnaXN0ZXJfdW51c2VkX2ZjZiBmYWlsZWQgIgorCQkJCSJ0byByZWFkIEZDRiByZWNvcmQgSEJBIHN0YXRlIHgleFxuIiwKKwkJCQlwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSk7Cit9CisKKy8qKgorICogbHBmY191bnJlZ2lzdGVyX2ZjZiAtIFVucmVnaXN0ZXIgdGhlIGN1cnJlbnRseSByZWdpc3RlcmVkIGZjZiByZWNvcmQKKyAqIEBwaGJhOiBQb2ludGVyIHRvIGhiYSBjb250ZXh0IG9iamVjdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGp1c3QgdW5yZWdpc3RlcnMgdGhlIGN1cnJlbnRseSByZWlnc3RlcmVkIEZDRi4gSXQgZG9lcyBub3QKKyAqIHRyeSB0byBmaW5kIGFub3RoZXIgRkNGIGZvciBkaXNjb3ZlcnkuCisgKi8KK3ZvaWQKK2xwZmNfdW5yZWdpc3Rlcl9mY2Yoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCWludCByYzsKKworCS8qIFByZXBhcmF0aW9uIGZvciB1bnJlZ2lzdGVyaW5nIGZjZiAqLworCXJjID0gbHBmY191bnJlZ2lzdGVyX2ZjZl9wcmVwKHBoYmEpOworCWlmIChyYykgeworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUlksCisJCQkJIjI3NDkgRmFpbGVkIHRvIHByZXBhcmUgZm9yIHVucmVnaXN0ZXJpbmcgIgorCQkJCSJIQkEncyBGQ0YgcmVjb3JkOiByYz0lZFxuIiwgcmMpOworCQlyZXR1cm47CisJfQorCisJLyogTm93LCB1bnJlZ2lzdGVyIEZDRiByZWNvcmQgYW5kIHJlc2V0IEhCQSBGQ0Ygc3RhdGUgKi8KKwlyYyA9IGxwZmNfc2xpNF91bnJlZ2lzdGVyX2ZjZihwaGJhKTsKKwlpZiAocmMpCisJCXJldHVybjsKKwkvKiBTZXQgcHJvcGVyIEhCQSBGQ0Ygc3RhdGVzIGFmdGVyIHN1Y2Nlc3NmdWwgdW5yZWdpc3RlciBGQ0YgKi8KKwlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfkZDRl9SRUdJU1RFUkVEOworCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Cit9CisKKy8qKgogICogbHBmY191bnJlZ2lzdGVyX3VudXNlZF9mY2YgLSBVbnJlZ2lzdGVyIEZDRiBpZiBhbGwgZGV2aWNlcyBhcmUgZGlzY29ubmVjdGVkLgogICogQHBoYmE6IFBvaW50ZXIgdG8gaGJhIGNvbnRleHQgb2JqZWN0LgogICoKQEAgLTQ0NTgsMjEgKzQ4MTYsMTQgQEAKIHZvaWQKIGxwZmNfdW5yZWdpc3Rlcl91bnVzZWRfZmNmKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKLQlMUEZDX01CT1hRX3QgKm1ib3g7Ci0JaW50IHJjOwotCXN0cnVjdCBscGZjX3Zwb3J0ICoqdnBvcnRzOwotCWludCBpOwotCi0Jc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJLyoKLQkgKiBJZiBIQkEgaXMgbm90IHJ1bm5pbmcgaW4gRklQIG1vZGUgb3IKLQkgKiBJZiBIQkEgZG9lcyBub3Qgc3VwcG9ydCBGQ29FIG9yCi0JICogSWYgRkNGIGlzIG5vdCByZWdpc3RlcmVkLgotCSAqIGRvIG5vdGhpbmcuCisJICogSWYgSEJBIGlzIG5vdCBydW5uaW5nIGluIEZJUCBtb2RlIG9yIGlmIEhCQSBkb2VzIG5vdCBzdXBwb3J0CisJICogRkNvRSBvciBpZiBGQ0YgaXMgbm90IHJlZ2lzdGVyZWQsIGRvIG5vdGhpbmcuCiAJICovCisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJaWYgKCEocGhiYS0+aGJhX2ZsYWcgJiBIQkFfRkNPRV9TVVBQT1JUKSB8fAotCQkhKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRUdJU1RFUkVEKSB8fAotCQkoIShwaGJhLT5oYmFfZmxhZyAmIEhCQV9GSVBfU1VQUE9SVCkpKSB7CisJICAgICEocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFR0lTVEVSRUQpIHx8CisJICAgICEocGhiYS0+aGJhX2ZsYWcgJiBIQkFfRklQX1NVUFBPUlQpKSB7CiAJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCXJldHVybjsKIAl9CkBAIC00NDgxLDkxICs0ODMyLDcgQEAKIAlpZiAobHBmY19mY2ZfaW51c2UocGhiYSkpCiAJCXJldHVybjsKIAotCS8qIEF0IHRoaXMgcG9pbnQsIGFsbCBkaXNjb3ZlcnkgaXMgYWJvcnRlZCAqLwotCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlID0gTFBGQ19WUE9SVF9VTktOT1dOOwotCi0JLyogVW5yZWdpc3RlciBWUElzICovCi0JdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKLQlpZiAodnBvcnRzICYmCi0JCShwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfTlBJVl9FTkFCTEVEKSkKLQkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBvcnRzICYmIHZwb3J0c1tpXSAhPSBOVUxMOyBpKyspIHsKLQkJCWxwZmNfbWJ4X3VucmVnX3ZwaSh2cG9ydHNbaV0pOwotCQkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Ci0JCQl2cG9ydHNbaV0tPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfSU5JVF9WUEk7Ci0JCQl2cG9ydHNbaV0tPnZwaV9zdGF0ZSAmPSB+TFBGQ19WUElfUkVHSVNURVJFRDsKLQkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Ci0JCX0KLQlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOwotCi0JLyogVW5yZWdpc3RlciBWRkkgKi8KLQltYm94ID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1ib3gpIHsKLQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZfExPR19NQk9YLAotCQkJIjI1NTYgVU5SRUdfVkZJIG1ib3ggYWxsb2NhdGlvbiBmYWlsZWQiCi0JCQkiSEJBIHN0YXRlIHgleFxuIiwKLQkJCXBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKLQkJcmV0dXJuOwotCX0KLQotCWxwZmNfdW5yZWdfdmZpKG1ib3gsIHBoYmEtPnBwb3J0KTsKLQltYm94LT52cG9ydCA9IHBoYmEtPnBwb3J0OwotCW1ib3gtPm1ib3hfY21wbCA9IGxwZmNfdW5yZWdpc3Rlcl92ZmlfY21wbDsKLQotCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94LCBNQlhfTk9XQUlUKTsKLQlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUll8TE9HX01CT1gsCi0JCQkiMjU1NyBVTlJFR19WRkkgaXNzdWUgbWJveCBmYWlsZWQgcmMgeCV4ICIKLQkJCSJIQkEgc3RhdGUgeCV4XG4iLAotCQkJcmMsIHBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlKTsKLQkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogVW5yZWdpc3RlciBGQ0YgKi8KLQltYm94ID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1ib3gpIHsKLQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZfExPR19NQk9YLAotCQkJIjI1NTEgVU5SRUdfRkNGSSBtYm94IGFsbG9jYXRpb24gZmFpbGVkIgotCQkJIkhCQSBzdGF0ZSB4JXhcbiIsCi0JCQlwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlscGZjX3VucmVnX2ZjZmkobWJveCwgcGhiYS0+ZmNmLmZjZmkpOwotCW1ib3gtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7Ci0JbWJveC0+bWJveF9jbXBsID0gbHBmY191bnJlZ2lzdGVyX2ZjZmlfY21wbDsKLQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveCwgTUJYX05PV0FJVCk7Ci0KLQlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUll8TE9HX01CT1gsCi0JCQkiMjU1MiBVTlJFR19GQ0ZJIGlzc3VlIG1ib3ggZmFpbGVkIHJjIHgleCAiCi0JCQkiSEJBIHN0YXRlIHgleFxuIiwKLQkJCXJjLCBwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSk7Ci0JCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKLQkJcmV0dXJuOwotCX0KLQotCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+KEZDRl9BVkFJTEFCTEUgfCBGQ0ZfUkVHSVNURVJFRCB8Ci0JCUZDRl9ESVNDT1ZFUkVEIHwgRkNGX0JPT1RfRU5BQkxFIHwgRkNGX0lOX1VTRSB8Ci0JCUZDRl9WQUxJRF9WTEFOKTsKLQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCi0JLyoKLQkgKiBJZiBkcml2ZXIgaXMgbm90IHVubG9hZGluZywgY2hlY2sgaWYgdGhlcmUgaXMgYW55IG90aGVyCi0JICogRkNGIHJlY29yZCB0aGF0IGNhbiBiZSB1c2VkIGZvciBkaXNjb3ZlcnkuCi0JICovCi0JaWYgKChwaGJhLT5wcG9ydC0+bG9hZF9mbGFnICYgRkNfVU5MT0FESU5HKSB8fAotCQkocGhiYS0+bGlua19zdGF0ZSA8IExQRkNfTElOS19VUCkpCi0JCXJldHVybjsKLQotCXJjID0gbHBmY19zbGk0X3JlYWRfZmNmX3JlY29yZChwaGJhLCBMUEZDX0ZDT0VfRkNGX0dFVF9GSVJTVCk7Ci0KLQlpZiAocmMpCi0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWXxMT0dfTUJPWCwKLQkJCSIyNTUzIGxwZmNfdW5yZWdpc3Rlcl91bnVzZWRfZmNmIGZhaWxlZCB0byByZWFkIEZDRiIKLQkJCSIgcmVjb3JkIEhCQSBzdGF0ZSB4JXhcbiIsCi0JCQlwaGJhLT5wcG9ydC0+cG9ydF9zdGF0ZSk7CisJbHBmY191bnJlZ2lzdGVyX2ZjZl9yZXNjYW4ocGhiYSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCmluZGV4IGM5ZmFhMWQuLjg5ZmY3YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTEzNDYsNiArMTM0Niw5IEBACiAjZGVmaW5lIE1CWF9IRUFSVEJFQVQgICAgICAgMHgzMQogI2RlZmluZSBNQlhfV1JJVEVfVlBBUk1TICAgIDB4MzIKICNkZWZpbmUgTUJYX0FTWU5DRVZUX0VOQUJMRSAweDMzCisjZGVmaW5lIE1CWF9SRUFEX0VWRU5UX0xPR19TVEFUVVMgMHgzNworI2RlZmluZSBNQlhfUkVBRF9FVkVOVF9MT0cgIDB4MzgKKyNkZWZpbmUgTUJYX1dSSVRFX0VWRU5UX0xPRyAweDM5CiAKICNkZWZpbmUgTUJYX1BPUlRfQ0FQQUJJTElUSUVTIDB4M0IKICNkZWZpbmUgTUJYX1BPUlRfSU9WX0NPTlRST0wgMHgzQwpAQCAtMTQ2NSwxNyArMTQ2OCwxMyBAQAogI2RlZmluZSBDTURfSU9DQl9MT0dFTlRSWV9DTgkJMHg5NAogI2RlZmluZSBDTURfSU9DQl9MT0dFTlRSWV9BU1lOQ19DTgkweDk2CiAKLS8qIFVuaGFuZGxlZCBEYXRhIFNlY3VyaXR5IFNMSSBDb21tYW5kcyAqLwotI2RlZmluZSBEU1NDTURfSVdSSVRFNjRfQ1IgCQkweEQ4Ci0jZGVmaW5lIERTU0NNRF9JV1JJVEU2NF9DWAkJMHhEOQotI2RlZmluZSBEU1NDTURfSVJFQUQ2NF9DUgkJMHhEQQotI2RlZmluZSBEU1NDTURfSVJFQUQ2NF9DWAkJMHhEQgotI2RlZmluZSBEU1NDTURfSU5WQUxJREFURV9ERUsJCTB4REMKLSNkZWZpbmUgRFNTQ01EX1NFVF9LRUsJCQkweERECi0jZGVmaW5lIERTU0NNRF9HRVRfS0VLX0lECQkweERFCi0jZGVmaW5lIERTU0NNRF9HRU5fWEZFUgkJCTB4REYKKy8qIERhdGEgU2VjdXJpdHkgU0xJIENvbW1hbmRzICovCisjZGVmaW5lIERTU0NNRF9JV1JJVEU2NF9DUgkJMHhGOAorI2RlZmluZSBEU1NDTURfSVdSSVRFNjRfQ1gJCTB4RjkKKyNkZWZpbmUgRFNTQ01EX0lSRUFENjRfQ1IJCTB4RkEKKyNkZWZpbmUgRFNTQ01EX0lSRUFENjRfQ1gJCTB4RkIKIAotI2RlZmluZSBDTURfTUFYX0lPQ0JfQ01EICAgICAgICAweEU2CisjZGVmaW5lIENNRF9NQVhfSU9DQl9DTUQgICAgICAgIDB4RkIKICNkZWZpbmUgQ01EX0lPQ0JfTUFTSyAgICAgICAgICAgMHhmZgogCiAjZGVmaW5lIE1BWF9NU0dfREFUQSAgICAgICAgICAgIDI4CS8qIG1heCBtc2cgZGF0YSBpbiBDTURfQURBUFRFUl9NU0cKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHc0LmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3NC5oCmluZGV4IDhhMmExYzUuLjgyMDAxNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHc0LmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaApAQCAtNTIsMzUgKzUyLDM3IEBACiAJdWludDMyX3QgYWRkcl9oaTsKIH07CiAKLSNkZWZpbmUgTFBGQ19TTElSRVZfQ09ORl9XT1JECTB4NTgKIHN0cnVjdCBscGZjX3NsaV9pbnRmIHsKIAl1aW50MzJfdCB3b3JkMDsKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9pZnR5cGVfTUFTSyAJMHgwMDAwMDAwNwotI2RlZmluZSBscGZjX3NsaV9pbnRmX2lmdHlwZV9TSElGVAkwCi0jZGVmaW5lIGxwZmNfc2xpX2ludGZfaWZ0eXBlX1dPUkQJd29yZDAKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9yZXZfTUFTSyAJCTB4MDAwMDAwMGYKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9yZXZfU0hJRlQJCTQKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9yZXZfV09SRAkJd29yZDAKLSNkZWZpbmUgTFBGQ19TTElSRVZfQ09ORl9TTEk0CTQKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mYW1pbHlfTUFTSyAJMHgwMDAwMDBmZgotI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZhbWlseV9TSElGVAk4Ci0jZGVmaW5lIGxwZmNfc2xpX2ludGZfZmFtaWx5X1dPUkQJd29yZDAKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0MV9NQVNLIAkweDAwMDAwMGZmCi0jZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdDFfU0hJRlQJMTYKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0MV9XT1JECXdvcmQwCi0jZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdDJfTUFTSyAJMHgwMDAwMDAxZgotI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXQyX1NISUZUCTI0Ci0jZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdDJfV09SRAl3b3JkMAotI2RlZmluZSBscGZjX3NsaV9pbnRmX3ZhbGlkX01BU0sgCTB4MDAwMDAwMDcKLSNkZWZpbmUgbHBmY19zbGlfaW50Zl92YWxpZF9TSElGVAkyOQotI2RlZmluZSBscGZjX3NsaV9pbnRmX3ZhbGlkX1dPUkQJd29yZDAKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl92YWxpZF9TSElGVAkJMjkKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl92YWxpZF9NQVNLCQkweDAwMDAwMDA3CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfdmFsaWRfV09SRAkJd29yZDAKICNkZWZpbmUgTFBGQ19TTElfSU5URl9WQUxJRAkJNgorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDJfU0hJRlQJMjQKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0dXJlbGV2ZWwyX01BU0sJMHgwMDAwMDAxRgorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDJfV09SRAl3b3JkMAorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDFfU0hJRlQJMTYKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0dXJlbGV2ZWwxX01BU0sJMHgwMDAwMDBGRgorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXR1cmVsZXZlbDFfV09SRAl3b3JkMAorI2RlZmluZSBMUEZDX1NMSV9JTlRGX0ZFQVRVUkVMRVZFTDFfMQkxCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfRkVBVFVSRUxFVkVMMV8yCTIKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9zbGlfZmFtaWx5X1NISUZUCQk4CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfc2xpX2ZhbWlseV9NQVNLCQkweDAwMDAwMEZGCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfc2xpX2ZhbWlseV9XT1JECQl3b3JkMAorI2RlZmluZSBMUEZDX1NMSV9JTlRGX0ZBTUlMWV9CRTIJMAorI2RlZmluZSBMUEZDX1NMSV9JTlRGX0ZBTUlMWV9CRTMJMQorI2RlZmluZSBscGZjX3NsaV9pbnRmX3NsaXJldl9TSElGVAkJNAorI2RlZmluZSBscGZjX3NsaV9pbnRmX3NsaXJldl9NQVNLCQkweDAwMDAwMDBGCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfc2xpcmV2X1dPUkQJCXdvcmQwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfUkVWX1NMSTMJCTMKKyNkZWZpbmUgTFBGQ19TTElfSU5URl9SRVZfU0xJNAkJNAorI2RlZmluZSBscGZjX3NsaV9pbnRmX2lmX3R5cGVfU0hJRlQJCTAKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9pZl90eXBlX01BU0sJCTB4MDAwMDAwMDcKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9pZl90eXBlX1dPUkQJCXdvcmQwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfSUZfVFlQRV8wCQkwCisjZGVmaW5lIExQRkNfU0xJX0lOVEZfSUZfVFlQRV8xCQkxCiB9OwogCi0jZGVmaW5lIExQRkNfU0xJNF9CQVIwCQkxCi0jZGVmaW5lIExQRkNfU0xJNF9CQVIxCQkyCi0jZGVmaW5lIExQRkNfU0xJNF9CQVIyCQk0Ci0KICNkZWZpbmUgTFBGQ19TTEk0X01CWF9FTUJFRAl0cnVlCiAjZGVmaW5lIExQRkNfU0xJNF9NQlhfTkVNQkVECWZhbHNlCiAKQEAgLTE2MSw2ICsxNjMsOSBAQAogI2RlZmluZSBMUEZDX0ZQX0RFRl9JTUFYICAgICAgIDEwMDAwCiAjZGVmaW5lIExQRkNfU1BfREVGX0lNQVggICAgICAgMTAwMDAKIAorLyogUE9SVF9DQVBBQklMSVRJRVMgY29uc3RhbnRzLiAqLworI2RlZmluZSBMUEZDX01BWF9TVVBQT1JURURfUEFHRVMJOAorCiBzdHJ1Y3QgdWxwX2JkZTY0IHsKIAl1bmlvbiBVTFBfQkRFX1RVUyB7CiAJCXVpbnQzMl90IHc7CkBAIC01MTYsNyArNTIxLDcgQEAKICNkZWZpbmUgTFBGQ19VRVJSX1NUQVRVU19MTwkJMHgwMEEwCiAjZGVmaW5lIExQRkNfVUVfTUFTS19ISQkJCTB4MDBBQwogI2RlZmluZSBMUEZDX1VFX01BU0tfTE8JCQkweDAwQTgKLSNkZWZpbmUgTFBGQ19TQ1JBVENIUEFECQkJMHgwMDU4CisjZGVmaW5lIExQRkNfU0xJX0lOVEYJCQkweDAwNTgKIAogLyogQkFSMCBSZWdpc3RlcnMgKi8KICNkZWZpbmUgTFBGQ19IU1RfU1RBVEUJCQkweDAwQUMKQEAgLTU3NiwxOSArNTgxLDYgQEAKICNkZWZpbmUgTFBGQ19QT1NUX1NUQUdFX0FSTUZXX1JFQURZCQkJMHhDMDAwCiAjZGVmaW5lIExQRkNfUE9TVF9TVEFHRV9BUk1GV19VRSAJCQkweEYwMDAKIAotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfc2xpcmV2X1NISUZUCQkJNAotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfc2xpcmV2X01BU0sJCQkweEYKLSNkZWZpbmUgbHBmY19zY3JhdGNocGFkX3NsaXJldl9XT1JECQkJd29yZDAKLSNkZWZpbmUgbHBmY19zY3JhdGNocGFkX2NoaXB0eXBlX1NISUZUCQkJOAotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfY2hpcHR5cGVfTUFTSwkJCTB4RkYKLSNkZWZpbmUgbHBmY19zY3JhdGNocGFkX2NoaXB0eXBlX1dPUkQJCQl3b3JkMAotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfZmVhdHVyZWxldmVsMV9TSElGVAkJMTYKLSNkZWZpbmUgbHBmY19zY3JhdGNocGFkX2ZlYXR1cmVsZXZlbDFfTUFTSwkJMHhGRgotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfZmVhdHVyZWxldmVsMV9XT1JECQl3b3JkMAotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfZmVhdHVyZWxldmVsMl9TSElGVAkJMjQKLSNkZWZpbmUgbHBmY19zY3JhdGNocGFkX2ZlYXR1cmVsZXZlbDJfTUFTSwkJMHhGRgotI2RlZmluZSBscGZjX3NjcmF0Y2hwYWRfZmVhdHVyZWxldmVsMl9XT1JECQl3b3JkMAotCiAvKiBCQVIxIFJlZ2lzdGVycyAqLwogI2RlZmluZSBMUEZDX0lNUl9NQVNLX0FMTAkweEZGRkZGRkZGCiAjZGVmaW5lIExQRkNfSVNDUl9DTEVBUl9BTEwJMHhGRkZGRkZGRgpAQCAtODAxLDYgKzc5Myw3IEBACiAjZGVmaW5lIExQRkNfTUJPWF9PUENPREVfRkNPRV9BRERfRkNGCQkJMHgwOQogI2RlZmluZSBMUEZDX01CT1hfT1BDT0RFX0ZDT0VfREVMRVRFX0ZDRgkJMHgwQQogI2RlZmluZSBMUEZDX01CT1hfT1BDT0RFX0ZDT0VfUE9TVF9IRFJfVEVNUExBVEUJCTB4MEIKKyNkZWZpbmUgTFBGQ19NQk9YX09QQ09ERV9GQ09FX1JFRElTQ09WRVJfRkNGCQkweDEwCiAKIC8qIE1haWxib3ggY29tbWFuZCBzdHJ1Y3R1cmVzICovCiBzdHJ1Y3QgZXFfY29udGV4dCB7CkBAIC0xMTQ5LDEwICsxMTQyLDcgQEAKIAkJCQkJCXRoaXMgIGZsYWcgISEgKi8KICNkZWZpbmUgbHBmY19zbGk0X3NnZV9sYXN0X01BU0sJCTB4MDAwMDAwMDEKICNkZWZpbmUgbHBmY19zbGk0X3NnZV9sYXN0X1dPUkQJCXdvcmQyCi0JdWludDMyX3Qgd29yZDM7Ci0jZGVmaW5lIGxwZmNfc2xpNF9zZ2VfbGVuX1NISUZUCQkwCi0jZGVmaW5lIGxwZmNfc2xpNF9zZ2VfbGVuX01BU0sJCTB4MDAwMUZGRkYKLSNkZWZpbmUgbHBmY19zbGk0X3NnZV9sZW5fV09SRAkJd29yZDMKKwl1aW50MzJfdCBzZ2VfbGVuOwogfTsKIAogc3RydWN0IGZjZl9yZWNvcmQgewpAQCAtMTMwMSw2ICsxMjkxLDE5IEBACiAjZGVmaW5lIGxwZmNfbWJ4X2RlbF9mY2ZfdGJsX2luZGV4X1dPUkQJCXdvcmQxMAogfTsKIAorc3RydWN0IGxwZmNfbWJ4X3JlZGlzY19mY2ZfdGJsIHsKKwlzdHJ1Y3QgbWJveF9oZWFkZXIgaGVhZGVyOworCXVpbnQzMl90IHdvcmQxMDsKKyNkZWZpbmUgbHBmY19tYnhfcmVkaXNjX2ZjZl9jb3VudF9TSElGVAkJMAorI2RlZmluZSBscGZjX21ieF9yZWRpc2NfZmNmX2NvdW50X01BU0sJCTB4MDAwMEZGRkYKKyNkZWZpbmUgbHBmY19tYnhfcmVkaXNjX2ZjZl9jb3VudF9XT1JECQl3b3JkMTAKKwl1aW50MzJfdCByZXN2ZDsKKwl1aW50MzJfdCB3b3JkMTI7CisjZGVmaW5lIGxwZmNfbWJ4X3JlZGlzY19mY2ZfaW5kZXhfU0hJRlQJCTAKKyNkZWZpbmUgbHBmY19tYnhfcmVkaXNjX2ZjZl9pbmRleF9NQVNLCQkweDAwMDBGRkZGCisjZGVmaW5lIGxwZmNfbWJ4X3JlZGlzY19mY2ZfaW5kZXhfV09SRAkJd29yZDEyCit9OworCiBzdHJ1Y3QgbHBmY19tYnhfcXVlcnlfZndfY2ZnIHsKIAlzdHJ1Y3QgbWJveF9oZWFkZXIgaGVhZGVyOwogCXVpbnQzMl90IGNvbmZpZ19udW1iZXI7CkBAIC0xODM0LDYgKzE4MzcsMTc3IEBACiAjZGVmaW5lIGxwZmNfbWJ4X3JxX2Z0cl9yc3BfaWZpcF9XT1JECQl3b3JkMwogfTsKIAorc3RydWN0IGxwZmNfbWJ4X3N1cHBfcGFnZXMgeworCXVpbnQzMl90IHdvcmQxOworI2RlZmluZSBxc19TSElGVCAJCQkJMAorI2RlZmluZSBxc19NQVNLCQkJCQkweDAwMDAwMDAxCisjZGVmaW5lIHFzX1dPUkQJCQkJCXdvcmQxCisjZGVmaW5lIHdyX1NISUZUCQkJCTEKKyNkZWZpbmUgd3JfTUFTSyAJCQkJMHgwMDAwMDAwMQorI2RlZmluZSB3cl9XT1JECQkJCQl3b3JkMQorI2RlZmluZSBwZl9TSElGVAkJCQk4CisjZGVmaW5lIHBmX01BU0sJCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcGZfV09SRAkJCQkJd29yZDEKKyNkZWZpbmUgY3BuX1NISUZUCQkJCTE2CisjZGVmaW5lIGNwbl9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgY3BuX1dPUkQJCQkJd29yZDEKKwl1aW50MzJfdCB3b3JkMjsKKyNkZWZpbmUgbGlzdF9vZmZzZXRfU0hJRlQgCQkJMAorI2RlZmluZSBsaXN0X29mZnNldF9NQVNLCQkJMHgwMDAwMDBmZgorI2RlZmluZSBsaXN0X29mZnNldF9XT1JECQkJd29yZDIKKyNkZWZpbmUgbmV4dF9vZmZzZXRfU0hJRlQJCQk4CisjZGVmaW5lIG5leHRfb2Zmc2V0X01BU0sJCQkweDAwMDAwMGZmCisjZGVmaW5lIG5leHRfb2Zmc2V0X1dPUkQJCQl3b3JkMgorI2RlZmluZSBlbGVtX2NudF9TSElGVAkJCQkxNgorI2RlZmluZSBlbGVtX2NudF9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgZWxlbV9jbnRfV09SRAkJCQl3b3JkMgorCXVpbnQzMl90IHdvcmQzOworI2RlZmluZSBwbl8wX1NISUZUCQkJCTI0CisjZGVmaW5lIHBuXzBfTUFTSyAgCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcG5fMF9XT1JECQkJCXdvcmQzCisjZGVmaW5lIHBuXzFfU0hJRlQJCQkJMTYKKyNkZWZpbmUgcG5fMV9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcG5fMV9XT1JECQkJCXdvcmQzCisjZGVmaW5lIHBuXzJfU0hJRlQJCQkJOAorI2RlZmluZSBwbl8yX01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBwbl8yX1dPUkQJCQkJd29yZDMKKyNkZWZpbmUgcG5fM19TSElGVAkJCQkwCisjZGVmaW5lIHBuXzNfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHBuXzNfV09SRAkJCQl3b3JkMworCXVpbnQzMl90IHdvcmQ0OworI2RlZmluZSBwbl80X1NISUZUCQkJCTI0CisjZGVmaW5lIHBuXzRfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHBuXzRfV09SRAkJCQl3b3JkNAorI2RlZmluZSBwbl81X1NISUZUCQkJCTE2CisjZGVmaW5lIHBuXzVfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHBuXzVfV09SRAkJCQl3b3JkNAorI2RlZmluZSBwbl82X1NISUZUCQkJCTgKKyNkZWZpbmUgcG5fNl9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgcG5fNl9XT1JECQkJCXdvcmQ0CisjZGVmaW5lIHBuXzdfU0hJRlQJCQkJMAorI2RlZmluZSBwbl83X01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBwbl83X1dPUkQJCQkJd29yZDQKKwl1aW50MzJfdCByc3ZkWzI3XTsKKyNkZWZpbmUgTFBGQ19TVVBQX1BBR0VTCQkJMAorI2RlZmluZSBMUEZDX0JMT0NLX0dVQVJEX1BST0ZJTEVTCTEKKyNkZWZpbmUgTFBGQ19TTEk0X1BBUkFNRVRFUlMJCTIKK307CisKK3N0cnVjdCBscGZjX21ieF9zbGk0X3BhcmFtcyB7CisJdWludDMyX3Qgd29yZDE7CisjZGVmaW5lIHFzX1NISUZUCQkJCTAKKyNkZWZpbmUgcXNfTUFTSwkJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBxc19XT1JECQkJCQl3b3JkMQorI2RlZmluZSB3cl9TSElGVAkJCQkxCisjZGVmaW5lIHdyX01BU0sJCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgd3JfV09SRAkJCQkJd29yZDEKKyNkZWZpbmUgcGZfU0hJRlQJCQkJOAorI2RlZmluZSBwZl9NQVNLCQkJCQkweDAwMDAwMGZmCisjZGVmaW5lIHBmX1dPUkQJCQkJCXdvcmQxCisjZGVmaW5lIGNwbl9TSElGVAkJCQkxNgorI2RlZmluZSBjcG5fTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIGNwbl9XT1JECQkJCXdvcmQxCisJdWludDMyX3Qgd29yZDI7CisjZGVmaW5lIGlmX3R5cGVfU0hJRlQJCQkJMAorI2RlZmluZSBpZl90eXBlX01BU0sJCQkJMHgwMDAwMDAwNworI2RlZmluZSBpZl90eXBlX1dPUkQJCQkJd29yZDIKKyNkZWZpbmUgc2xpX3Jldl9TSElGVAkJCQk0CisjZGVmaW5lIHNsaV9yZXZfTUFTSwkJCQkweDAwMDAwMDBmCisjZGVmaW5lIHNsaV9yZXZfV09SRAkJCQl3b3JkMgorI2RlZmluZSBzbGlfZmFtaWx5X1NISUZUCQkJOAorI2RlZmluZSBzbGlfZmFtaWx5X01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBzbGlfZmFtaWx5X1dPUkQJCQkJd29yZDIKKyNkZWZpbmUgZmVhdHVyZWxldmVsXzFfU0hJRlQJCQkxNgorI2RlZmluZSBmZWF0dXJlbGV2ZWxfMV9NQVNLCQkJMHgwMDAwMDBmZgorI2RlZmluZSBmZWF0dXJlbGV2ZWxfMV9XT1JECQkJd29yZDIKKyNkZWZpbmUgZmVhdHVyZWxldmVsXzJfU0hJRlQJCQkyNAorI2RlZmluZSBmZWF0dXJlbGV2ZWxfMl9NQVNLCQkJMHgwMDAwMDAxZgorI2RlZmluZSBmZWF0dXJlbGV2ZWxfMl9XT1JECQkJd29yZDIKKwl1aW50MzJfdCB3b3JkMzsKKyNkZWZpbmUgZmNvZV9TSElGVCAJCQkJMAorI2RlZmluZSBmY29lX01BU0sJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBmY29lX1dPUkQJCQkJd29yZDMKKyNkZWZpbmUgZmNfU0hJRlQJCQkJMQorI2RlZmluZSBmY19NQVNLCQkJCQkweDAwMDAwMDAxCisjZGVmaW5lIGZjX1dPUkQJCQkJCXdvcmQzCisjZGVmaW5lIG5pY19TSElGVAkJCQkyCisjZGVmaW5lIG5pY19NQVNLCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgbmljX1dPUkQJCQkJd29yZDMKKyNkZWZpbmUgaXNjc2lfU0hJRlQJCQkJMworI2RlZmluZSBpc2NzaV9NQVNLCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgaXNjc2lfV09SRAkJCQl3b3JkMworI2RlZmluZSByZG1hX1NISUZUCQkJCTQKKyNkZWZpbmUgcmRtYV9NQVNLCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgcmRtYV9XT1JECQkJCXdvcmQzCisJdWludDMyX3Qgc2dlX3N1cHBfbGVuOworCXVpbnQzMl90IHdvcmQ1OworI2RlZmluZSBpZl9wYWdlX3N6X1NISUZUCQkJMAorI2RlZmluZSBpZl9wYWdlX3N6X01BU0sJCQkJMHgwMDAwZmZmZgorI2RlZmluZSBpZl9wYWdlX3N6X1dPUkQJCQkJd29yZDUKKyNkZWZpbmUgbG9vcGJrX3Njb3BlX1NISUZUCQkJMjQKKyNkZWZpbmUgbG9vcGJrX3Njb3BlX01BU0sJCQkweDAwMDAwMDBmCisjZGVmaW5lIGxvb3Bia19zY29wZV9XT1JECQkJd29yZDUKKyNkZWZpbmUgcnFfZGJfd2luZG93X1NISUZUCQkJMjgKKyNkZWZpbmUgcnFfZGJfd2luZG93X01BU0sJCQkweDAwMDAwMDBmCisjZGVmaW5lIHJxX2RiX3dpbmRvd19XT1JECQkJd29yZDUKKwl1aW50MzJfdCB3b3JkNjsKKyNkZWZpbmUgZXFfcGFnZXNfU0hJRlQJCQkJMAorI2RlZmluZSBlcV9wYWdlc19NQVNLCQkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgZXFfcGFnZXNfV09SRAkJCQl3b3JkNgorI2RlZmluZSBlcWVfc2l6ZV9TSElGVAkJCQk4CisjZGVmaW5lIGVxZV9zaXplX01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBlcWVfc2l6ZV9XT1JECQkJCXdvcmQ2CisJdWludDMyX3Qgd29yZDc7CisjZGVmaW5lIGNxX3BhZ2VzX1NISUZUCQkJCTAKKyNkZWZpbmUgY3FfcGFnZXNfTUFTSwkJCQkweDAwMDAwMDBmCisjZGVmaW5lIGNxX3BhZ2VzX1dPUkQJCQkJd29yZDcKKyNkZWZpbmUgY3FlX3NpemVfU0hJRlQJCQkJOAorI2RlZmluZSBjcWVfc2l6ZV9NQVNLCQkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgY3FlX3NpemVfV09SRAkJCQl3b3JkNworCXVpbnQzMl90IHdvcmQ4OworI2RlZmluZSBtcV9wYWdlc19TSElGVAkJCQkwCisjZGVmaW5lIG1xX3BhZ2VzX01BU0sJCQkJMHgwMDAwMDAwZgorI2RlZmluZSBtcV9wYWdlc19XT1JECQkJCXdvcmQ4CisjZGVmaW5lIG1xZV9zaXplX1NISUZUCQkJCTgKKyNkZWZpbmUgbXFlX3NpemVfTUFTSwkJCQkweDAwMDAwMGZmCisjZGVmaW5lIG1xZV9zaXplX1dPUkQJCQkJd29yZDgKKyNkZWZpbmUgbXFfZWxlbV9jbnRfU0hJRlQJCQkxNgorI2RlZmluZSBtcV9lbGVtX2NudF9NQVNLCQkJMHgwMDAwMDBmZgorI2RlZmluZSBtcV9lbGVtX2NudF9XT1JECQkJd29yZDgKKwl1aW50MzJfdCB3b3JkOTsKKyNkZWZpbmUgd3FfcGFnZXNfU0hJRlQJCQkJMAorI2RlZmluZSB3cV9wYWdlc19NQVNLCQkJCTB4MDAwMGZmZmYKKyNkZWZpbmUgd3FfcGFnZXNfV09SRAkJCQl3b3JkOQorI2RlZmluZSB3cWVfc2l6ZV9TSElGVAkJCQk4CisjZGVmaW5lIHdxZV9zaXplX01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSB3cWVfc2l6ZV9XT1JECQkJCXdvcmQ5CisJdWludDMyX3Qgd29yZDEwOworI2RlZmluZSBycV9wYWdlc19TSElGVAkJCQkwCisjZGVmaW5lIHJxX3BhZ2VzX01BU0sJCQkJMHgwMDAwZmZmZgorI2RlZmluZSBycV9wYWdlc19XT1JECQkJCXdvcmQxMAorI2RlZmluZSBycWVfc2l6ZV9TSElGVAkJCQk4CisjZGVmaW5lIHJxZV9zaXplX01BU0sJCQkJMHgwMDAwMDBmZgorI2RlZmluZSBycWVfc2l6ZV9XT1JECQkJCXdvcmQxMAorCXVpbnQzMl90IHdvcmQxMTsKKyNkZWZpbmUgaGRyX3BhZ2VzX1NISUZUCQkJCTAKKyNkZWZpbmUgaGRyX3BhZ2VzX01BU0sJCQkJMHgwMDAwMDAwZgorI2RlZmluZSBoZHJfcGFnZXNfV09SRAkJCQl3b3JkMTEKKyNkZWZpbmUgaGRyX3NpemVfU0hJRlQJCQkJOAorI2RlZmluZSBoZHJfc2l6ZV9NQVNLCQkJCTB4MDAwMDAwMGYKKyNkZWZpbmUgaGRyX3NpemVfV09SRAkJCQl3b3JkMTEKKyNkZWZpbmUgaGRyX3BwX2FsaWduX1NISUZUCQkJMTYKKyNkZWZpbmUgaGRyX3BwX2FsaWduX01BU0sJCQkweDAwMDBmZmZmCisjZGVmaW5lIGhkcl9wcF9hbGlnbl9XT1JECQkJd29yZDExCisJdWludDMyX3Qgd29yZDEyOworI2RlZmluZSBzZ2xfcGFnZXNfU0hJRlQJCQkJMAorI2RlZmluZSBzZ2xfcGFnZXNfTUFTSwkJCQkweDAwMDAwMDBmCisjZGVmaW5lIHNnbF9wYWdlc19XT1JECQkJCXdvcmQxMgorI2RlZmluZSBzZ2xfcHBfYWxpZ25fU0hJRlQJCQkxNgorI2RlZmluZSBzZ2xfcHBfYWxpZ25fTUFTSwkJCTB4MDAwMGZmZmYKKyNkZWZpbmUgc2dsX3BwX2FsaWduX1dPUkQJCQl3b3JkMTIKKwl1aW50MzJfdCByc3ZkXzEzXzYzWzUxXTsKK307CisKIC8qIE1haWxib3ggQ29tcGxldGlvbiBRdWV1ZSBFcnJvciBNZXNzYWdlcyAqLwogI2RlZmluZSBNQl9DUUVfU1RBVFVTX1NVQ0NFU1MgCQkJMHgwCiAjZGVmaW5lIE1CX0NRRV9TVEFUVVNfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRVMJMHgxCkBAIC0xODYzLDYgKzIwMzcsNyBAQAogCQlzdHJ1Y3QgbHBmY19tYnhfcmVhZF9mY2ZfdGJsIHJlYWRfZmNmX3RibDsKIAkJc3RydWN0IGxwZmNfbWJ4X2FkZF9mY2ZfdGJsX2VudHJ5IGFkZF9mY2ZfZW50cnk7CiAJCXN0cnVjdCBscGZjX21ieF9kZWxfZmNmX3RibF9lbnRyeSBkZWxfZmNmX2VudHJ5OworCQlzdHJ1Y3QgbHBmY19tYnhfcmVkaXNjX2ZjZl90YmwgcmVkaXNjX2ZjZl90Ymw7CiAJCXN0cnVjdCBscGZjX21ieF9yZWdfZmNmaSByZWdfZmNmaTsKIAkJc3RydWN0IGxwZmNfbWJ4X3VucmVnX2ZjZmkgdW5yZWdfZmNmaTsKIAkJc3RydWN0IGxwZmNfbWJ4X21xX2NyZWF0ZSBtcV9jcmVhdGU7CkBAIC0xODgzLDYgKzIwNTgsOCBAQAogCQlzdHJ1Y3QgbHBmY19tYnhfcmVxdWVzdF9mZWF0dXJlcyByZXFfZnRyczsKIAkJc3RydWN0IGxwZmNfbWJ4X3Bvc3RfaGRyX3RtcGwgaGRyX3RtcGw7CiAJCXN0cnVjdCBscGZjX21ieF9xdWVyeV9md19jZmcgcXVlcnlfZndfY2ZnOworCQlzdHJ1Y3QgbHBmY19tYnhfc3VwcF9wYWdlcyBzdXBwX3BhZ2VzOworCQlzdHJ1Y3QgbHBmY19tYnhfc2xpNF9wYXJhbXMgc2xpNF9wYXJhbXM7CiAJCXN0cnVjdCBscGZjX21ieF9ub3Agbm9wOwogCX0gdW47CiB9OwpAQCAtMTk1OSw2ICsyMTM2LDkgQEAKICNkZWZpbmUgTFBGQ19BU1lOQ19MSU5LX0ZBVUxUX05PTkUJMHgwCiAjZGVmaW5lIExQRkNfQVNZTkNfTElOS19GQVVMVF9MT0NBTAkweDEKICNkZWZpbmUgTFBGQ19BU1lOQ19MSU5LX0ZBVUxUX1JFTU9URQkweDIKKyNkZWZpbmUgbHBmY19hY3FlX3Fvc19saW5rX3NwZWVkX1NISUZUCTE2CisjZGVmaW5lIGxwZmNfYWNxZV9xb3NfbGlua19zcGVlZF9NQVNLCTB4MDAwMEZGRkYKKyNkZWZpbmUgbHBmY19hY3FlX3Fvc19saW5rX3NwZWVkX1dPUkQJd29yZDEKIAl1aW50MzJfdCBldmVudF90YWc7CiAJdWludDMyX3QgdHJhaWxlcjsKIH07CkBAIC0xOTc2LDYgKzIxNTYsNyBAQAogI2RlZmluZSBMUEZDX0ZDT0VfRVZFTlRfVFlQRV9GQ0ZfVEFCTEVfRlVMTAkweDIKICNkZWZpbmUgTFBGQ19GQ09FX0VWRU5UX1RZUEVfRkNGX0RFQUQJCTB4MwogI2RlZmluZSBMUEZDX0ZDT0VfRVZFTlRfVFlQRV9DVkwJCTB4NAorI2RlZmluZSBMUEZDX0ZDT0VfRVZFTlRfVFlQRV9GQ0ZfUEFSQU1fTU9ECTB4NQogCXVpbnQzMl90IGV2ZW50X3RhZzsKIAl1aW50MzJfdCB0cmFpbGVyOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKaW5kZXggYjhlYjFiNi4uZDI5YWM3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQ2hyaXN0b3BoIEhlbGx3aWcgICAgICAgICAgICAgICoKQEAgLTU0NCw3ICs1NDQsNyBAQAogCQkJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQotCX0gZWxzZSB7CisJfSBlbHNlIGlmIChwaGJhLT5jZmdfc3VwcHJlc3NfbGlua191cCA9PSAwKSB7CiAJCWxwZmNfaW5pdF9saW5rKHBoYmEsIHBtYiwgcGhiYS0+Y2ZnX3RvcG9sb2d5LAogCQkJcGhiYS0+Y2ZnX2xpbmtfc3BlZWQpOwogCQlwbWItPm1ib3hfY21wbCA9IGxwZmNfc2xpX2RlZl9tYm94X2NtcGw7CkBAIC02MDMsNiArNjAzLDEwMiBAQAogfQogCiAvKioKKyAqIGxwZmNfaGJhX2luaXRfbGluayAtIEluaXRpYWxpemUgdGhlIEZDIGxpbmsKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSB3aWxsIGlzc3VlIHRoZSBJTklUX0xJTksgbWFpbGJveCBjb21tYW5kIGNhbGwuCisgKiBJdCBpcyBhdmFpbGFibGUgdG8gb3RoZXIgZHJpdmVycyB0aHJvdWdoIHRoZSBscGZjX2hiYSBkYXRhCisgKiBzdHJ1Y3R1cmUgZm9yIHVzZSBhcyBhIGRlbGF5ZWQgbGluayB1cCBtZWNoYW5pc20gd2l0aCB0aGUKKyAqIG1vZHVsZSBwYXJhbWV0ZXIgbHBmY19zdXBwcmVzc19saW5rX3VwLgorICoKKyAqIFJldHVybiBjb2RlCisgKgkJMCAtIHN1Y2Nlc3MKKyAqCQlBbnkgb3RoZXIgdmFsdWUgLSBlcnJvcgorICoqLworaW50CitscGZjX2hiYV9pbml0X2xpbmsoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IHBoYmEtPnBwb3J0OworCUxQRkNfTUJPWFFfdCAqcG1iOworCU1BSUxCT1hfdCAqbWI7CisJaW50IHJjOworCisJcG1iID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBtYikgeworCQlwaGJhLT5saW5rX3N0YXRlID0gTFBGQ19IQkFfRVJST1I7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltYiA9ICZwbWItPnUubWI7CisJcG1iLT52cG9ydCA9IHZwb3J0OworCisJbHBmY19pbml0X2xpbmsocGhiYSwgcG1iLCBwaGJhLT5jZmdfdG9wb2xvZ3ksCisJCXBoYmEtPmNmZ19saW5rX3NwZWVkKTsKKwlwbWItPm1ib3hfY21wbCA9IGxwZmNfc2xpX2RlZl9tYm94X2NtcGw7CisJbHBmY19zZXRfbG9vcGJhY2tfZmxhZyhwaGJhKTsKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCBNQlhfTk9XQUlUKTsKKwlpZiAocmMgIT0gTUJYX1NVQ0NFU1MpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCSIwNDk4IEFkYXB0ZXIgZmFpbGVkIHRvIGluaXQsIG1ieENtZCB4JXggIgorCQkJIklOSVRfTElOSywgbWJ4U3RhdHVzIHgleFxuIiwKKwkJCW1iLT5tYnhDb21tYW5kLCBtYi0+bWJ4U3RhdHVzKTsKKwkJLyogQ2xlYXIgYWxsIGludGVycnVwdCBlbmFibGUgY29uZGl0aW9ucyAqLworCQl3cml0ZWwoMCwgcGhiYS0+SENyZWdhZGRyKTsKKwkJcmVhZGwocGhiYS0+SENyZWdhZGRyKTsgLyogZmx1c2ggKi8KKwkJLyogQ2xlYXIgYWxsIHBlbmRpbmcgaW50ZXJydXB0cyAqLworCQl3cml0ZWwoMHhmZmZmZmZmZiwgcGhiYS0+SEFyZWdhZGRyKTsKKwkJcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsgLyogZmx1c2ggKi8KKwkJcGhiYS0+bGlua19zdGF0ZSA9IExQRkNfSEJBX0VSUk9SOworCQlpZiAocmMgIT0gTUJYX0JVU1kpCisJCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXBoYmEtPmNmZ19zdXBwcmVzc19saW5rX3VwID0gMDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNfaGJhX2Rvd25fbGluayAtIHRoaXMgcm91dGluZSBkb3ducyB0aGUgRkMgbGluaworICoKKyAqIFRoaXMgcm91dGluZSB3aWxsIGlzc3VlIHRoZSBET1dOX0xJTksgbWFpbGJveCBjb21tYW5kIGNhbGwuCisgKiBJdCBpcyBhdmFpbGFibGUgdG8gb3RoZXIgZHJpdmVycyB0aHJvdWdoIHRoZSBscGZjX2hiYSBkYXRhCisgKiBzdHJ1Y3R1cmUgZm9yIHVzZSB0byBzdG9wIHRoZSBsaW5rLgorICoKKyAqIFJldHVybiBjb2RlCisgKgkJMCAtIHN1Y2Nlc3MKKyAqCQlBbnkgb3RoZXIgdmFsdWUgLSBlcnJvcgorICoqLworaW50CitscGZjX2hiYV9kb3duX2xpbmsoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCUxQRkNfTUJPWFFfdCAqcG1iOworCWludCByYzsKKworCXBtYiA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbWIpIHsKKwkJcGhiYS0+bGlua19zdGF0ZSA9IExQRkNfSEJBX0VSUk9SOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlscGZjX3ByaW50Zl9sb2cocGhiYSwKKwkJS0VSTl9FUlIsIExPR19JTklULAorCQkiMDQ5MSBBZGFwdGVyIExpbmsgaXMgZGlzYWJsZWQuXG4iKTsKKwlscGZjX2Rvd25fbGluayhwaGJhLCBwbWIpOworCXBtYi0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCBNQlhfTk9XQUlUKTsKKwlpZiAoKHJjICE9IE1CWF9TVUNDRVNTKSAmJiAocmMgIT0gTUJYX0JVU1kpKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLAorCQlLRVJOX0VSUiwgTE9HX0lOSVQsCisJCSIyNTIyIEFkYXB0ZXIgZmFpbGVkIHRvIGlzc3VlIERPV05fTElOSyIKKwkJIiBtYm94IGNvbW1hbmQgcmMgMHgleFxuIiwgcmMpOworCisJCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogbHBmY19oYmFfZG93bl9wcmVwIC0gUGVyZm9ybSBscGZjIHVuaW5pdGlhbGl6YXRpb24gcHJpb3IgdG8gSEJBIHJlc2V0CiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIEhCQSBkYXRhIHN0cnVjdHVyZS4KICAqCkBAIC0yMDczLDYgKzIxNjksNDQgQEAKIH0KIAogLyoqCisgKiBfX2xwZmNfc2xpNF9zdG9wX2ZjZl9yZWRpc2Nfd2FpdF90aW1lciAtIFN0b3AgRkNGIHJlZGlzY292ZXJ5IHdhaXQgdGltZXIKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBzdG9wcyB0aGUgU0xJNCBGQ0YgcmVkaXNjb3ZlciB3YWl0IHRpbWVyIGlmIGl0J3Mgb24uIFRoZQorICogY2FsbGVyIG9mIHRoaXMgcm91dGluZSBzaG91bGQgYWxyZWFkeSBob2xkIHRoZSBob3N0IGxvY2suCisgKiovCit2b2lkCitfX2xwZmNfc2xpNF9zdG9wX2ZjZl9yZWRpc2Nfd2FpdF90aW1lcihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJLyogQ2xlYXIgcGVuZGluZyBGQ0YgcmVkaXNjb3Zlcnkgd2FpdCB0aW1lciAqLworCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+RkNGX1JFRElTQ19QRU5EOworCS8qIE5vdywgdHJ5IHRvIHN0b3AgdGhlIHRpbWVyICovCisJZGVsX3RpbWVyKCZwaGJhLT5mY2YucmVkaXNjX3dhaXQpOworfQorCisvKioKKyAqIGxwZmNfc2xpNF9zdG9wX2ZjZl9yZWRpc2Nfd2FpdF90aW1lciAtIFN0b3AgRkNGIHJlZGlzY292ZXJ5IHdhaXQgdGltZXIKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBzdG9wcyB0aGUgU0xJNCBGQ0YgcmVkaXNjb3ZlciB3YWl0IHRpbWVyIGlmIGl0J3Mgb24uIEl0CisgKiBjaGVja3Mgd2hldGhlciB0aGUgRkNGIHJlZGlzY292ZXJ5IHdhaXQgdGltZXIgaXMgcGVuZGluZyB3aXRoIHRoZSBob3N0CisgKiBsb2NrIGhlbGQgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCBkaXNhYmxpbmcgdGhlIHRpbWVyIGFuZCBjbGVhcmluZyB0aGUKKyAqIHdhaXQgdGltZXIgcGVuZGlnIGZsYWcuCisgKiovCit2b2lkCitscGZjX3NsaTRfc3RvcF9mY2ZfcmVkaXNjX3dhaXRfdGltZXIoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCWlmICghKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRURJU0NfUEVORCkpIHsKKwkJLyogRkNGIHJlZGlzY292ZXJ5IHRpbWVyIGFscmVhZHkgZmlyZWQgb3Igc3RvcHBlZCAqLworCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCQlyZXR1cm47CisJfQorCV9fbHBmY19zbGk0X3N0b3BfZmNmX3JlZGlzY193YWl0X3RpbWVyKHBoYmEpOworCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Cit9CisKKy8qKgogICogbHBmY19zdG9wX2hiYV90aW1lcnMgLSBTdG9wIGFsbCB0aGUgdGltZXJzIGFzc29jaWF0ZWQgd2l0aCBhbiBIQkEKICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICoKQEAgLTIwOTYsNiArMjIzMCw3IEBACiAJCWJyZWFrOwogCWNhc2UgTFBGQ19QQ0lfREVWX09DOgogCQkvKiBTdG9wIGFueSBPbmVDb25uZWN0IGRldmljZSBzZXBjaWZpYyBkcml2ZXIgdGltZXJzICovCisJCWxwZmNfc2xpNF9zdG9wX2ZjZl9yZWRpc2Nfd2FpdF90aW1lcihwaGJhKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKQEAgLTIyMjgsNiArMjM2Myw3IEBACiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gcGhiYS0+cHBvcnQ7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgICpuZGxwLCAqbmV4dF9uZGxwOwogCXN0cnVjdCBscGZjX3Zwb3J0ICoqdnBvcnRzOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OwogCWludCBpOwogCiAJaWYgKHZwb3J0LT5mY19mbGFnICYgRkNfT0ZGTElORV9NT0RFKQpAQCAtMjI0MSwxMSArMjM3NywxNSBAQAogCXZwb3J0cyA9IGxwZmNfY3JlYXRlX3Zwb3J0X3dvcmtfYXJyYXkocGhiYSk7CiAJaWYgKHZwb3J0cyAhPSBOVUxMKSB7CiAJCWZvciAoaSA9IDA7IGkgPD0gcGhiYS0+bWF4X3Zwb3J0cyAmJiB2cG9ydHNbaV0gIT0gTlVMTDsgaSsrKSB7Ci0JCQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKLQogCQkJaWYgKHZwb3J0c1tpXS0+bG9hZF9mbGFnICYgRkNfVU5MT0FESU5HKQogCQkJCWNvbnRpbnVlOworCQkJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnRzW2ldKTsKKwkJCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCQl2cG9ydHNbaV0tPnZwaV9zdGF0ZSAmPSB+TFBGQ19WUElfUkVHSVNURVJFRDsKKwkJCXZwb3J0c1tpXS0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJOworCQkJdnBvcnRzW2ldLT5mY19mbGFnICY9IH5GQ19WRklfUkVHSVNURVJFRDsKKwkJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwogCQkJc2hvc3QgPQlscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnRzW2ldKTsKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsCiAJCQkJCQkgJnZwb3J0c1tpXS0+ZmNfbm9kZXMsCkBAIC0yNDAxLDcgKzI1NDEsOCBAQAogCXNob3N0LT50aGlzX2lkID0gLTE7CiAJc2hvc3QtPm1heF9jbWRfbGVuID0gMTY7CiAJaWYgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkgewotCQlzaG9zdC0+ZG1hX2JvdW5kYXJ5ID0gTFBGQ19TTEk0X01BWF9TRUdNRU5UX1NJWkU7CisJCXNob3N0LT5kbWFfYm91bmRhcnkgPQorCQkJcGhiYS0+c2xpNF9oYmEucGNfc2xpNF9wYXJhbXMuc2dlX3N1cHBfbGVuOwogCQlzaG9zdC0+c2dfdGFibGVzaXplID0gcGhiYS0+Y2ZnX3NnX3NlZ19jbnQ7CiAJfQogCkBAIC0yNjUwLDggKzI3OTEsNiBAQAogCWxwZmNfc3RvcF9oYmFfdGltZXJzKHBoYmEpOwogCXBoYmEtPnBwb3J0LT53b3JrX3BvcnRfZXZlbnRzID0gMDsKIAlwaGJhLT5zbGk0X2hiYS5pbnRyX2VuYWJsZSA9IDA7Ci0JLyogSGFyZCBjbGVhciBpdCBmb3Igbm93LCBzaGFsbCBoYXZlIG1vcmUgZ3JhY2VmdWwgd2F5IHRvIHdhaXQgbGF0ZXIgKi8KLQlwaGJhLT5zbGkuc2xpX2ZsYWcgJj0gfkxQRkNfU0xJX01CT1hfQUNUSVZFOwogfQogCiAvKioKQEAgLTI3MDMsNyArMjg0Miw3IEBACiAJZGVsX2ZjZl9yZWNvcmQgPSAmbWJveHEtPnUubXFlLnVuLmRlbF9mY2ZfZW50cnk7CiAJYmZfc2V0KGxwZmNfbWJ4X2RlbF9mY2ZfdGJsX2NvdW50LCBkZWxfZmNmX3JlY29yZCwgMSk7CiAJYmZfc2V0KGxwZmNfbWJ4X2RlbF9mY2ZfdGJsX2luZGV4LCBkZWxfZmNmX3JlY29yZCwKLQkgICAgICAgcGhiYS0+ZmNmLmZjZl9pbmR4KTsKKwkgICAgICAgcGhiYS0+ZmNmLmN1cnJlbnRfcmVjLmZjZl9pbmR4KTsKIAogCWlmICghcGhiYS0+c2xpNF9oYmEuaW50cl9lbmFibGUpCiAJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94cSwgTUJYX1BPTEwpOwpAQCAtMjcyNyw2ICsyODY2LDU3IEBACiB9CiAKIC8qKgorICogbHBmY19mY2ZfcmVkaXNjX3dhaXRfc3RhcnRfdGltZXIgLSBTdGFydCBmY2YgcmVkaXNjb3ZlciB3YWl0IHRpbWVyCisgKiBAcGhiYTogUG9pbnRlciB0byBoYmEgZm9yIHdoaWNoIHRoaXMgY2FsbCBpcyBiZWluZyBleGVjdXRlZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgc3RhcnRzIHRoZSB0aW1lciB3YWl0aW5nIGZvciB0aGUgRkNGIHJlZGlzY292ZXJ5IHRvIGNvbXBsZXRlLgorICoqLwordm9pZAorbHBmY19mY2ZfcmVkaXNjX3dhaXRfc3RhcnRfdGltZXIoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCXVuc2lnbmVkIGxvbmcgZmNmX3JlZGlzY193YWl0X3RtbyA9CisJCShqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhMUEZDX0ZDRl9SRURJU0NPVkVSX1dBSVRfVE1PKSk7CisJLyogU3RhcnQgZmNmIHJlZGlzY292ZXJ5IHdhaXQgcGVyaW9kIHRpbWVyICovCisJbW9kX3RpbWVyKCZwaGJhLT5mY2YucmVkaXNjX3dhaXQsIGZjZl9yZWRpc2Nfd2FpdF90bW8pOworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCS8qIEFsbG93IGFjdGlvbiB0byBuZXcgZmNmIGFzeW5jaHJvbm91cyBldmVudCAqLworCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+KEZDRl9BVkFJTEFCTEUgfCBGQ0ZfU0NBTl9ET05FKTsKKwkvKiBNYXJrIHRoZSBGQ0YgcmVkaXNjb3ZlcnkgcGVuZGluZyBzdGF0ZSAqLworCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSBGQ0ZfUkVESVNDX1BFTkQ7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKK30KKworLyoqCisgKiBscGZjX3NsaTRfZmNmX3JlZGlzY193YWl0X3RtbyAtIEZDRiB0YWJsZSByZWRpc2NvdmVyIHdhaXQgdGltZW91dAorICogQHB0cjogTWFwIHRvIGxwZmNfaGJhIGRhdGEgc3RydWN0dXJlIHBvaW50ZXIuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgd2hlbiB3YWl0aW5nIGZvciBGQ0YgdGFibGUgcmVkaXNjb3ZlciBoYXMgYmVlbgorICogdGltZWQgb3V0LiBJZiBuZXcgRkNGIHJlY29yZChzKSBoYXMgKGhhdmUpIGJlZW4gZGlzY292ZXJlZCBkdXJpbmcgdGhlCisgKiB3YWl0IHBlcmlvZCwgYSBuZXcgRkNGIGV2ZW50IHNoYWxsIGJlIGFkZGVkIHRvIHRoZSBGQ09FIGFzeW5jIGV2ZW50CisgKiBsaXN0LCBhbmQgdGhlbiB3b3JrZXIgdGhyZWFkIHNoYWxsIGJlIHdha2VkIHVwIGZvciBwcm9jZXNzaW5nIGZyb20gdGhlCisgKiB3b3JrZXIgdGhyZWFkIGNvbnRleHQuCisgKiovCit2b2lkCitscGZjX3NsaTRfZmNmX3JlZGlzY193YWl0X3Rtbyh1bnNpZ25lZCBsb25nIHB0cikKK3sKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopcHRyOworCisJLyogRG9uJ3Qgc2VuZCBGQ0YgcmVkaXNjb3ZlcnkgZXZlbnQgaWYgdGltZXIgY2FuY2VsbGVkICovCisJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJaWYgKCEocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19QRU5EKSkgeworCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCQlyZXR1cm47CisJfQorCS8qIENsZWFyIEZDRiByZWRpc2NvdmVyeSB0aW1lciBwZW5kaW5nIGZsYWcgKi8KKwlwaGJhLT5mY2YuZmNmX2ZsYWcgJj0gfkZDRl9SRURJU0NfUEVORDsKKwkvKiBGQ0YgcmVkaXNjb3ZlcnkgZXZlbnQgdG8gd29ya2VyIHRocmVhZCAqLworCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSBGQ0ZfUkVESVNDX0VWVDsKKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCS8qIHdha2UgdXAgd29ya2VyIHRocmVhZCAqLworCWxwZmNfd29ya2VyX3dha2VfdXAocGhiYSk7Cit9CisKKy8qKgogICogbHBmY19zbGk0X2Z3X2NmZ19jaGVjayAtIFJlYWQgdGhlIGZpcm13YXJlIGNvbmZpZyBhbmQgdmVyaWZ5IEZDb0Ugc3VwcG9ydAogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKgpAQCAtMjk3OCw2ICszMTY4LDggQEAKIAkJCQliZl9nZXQobHBmY19hY3FlX2xpbmtfcGh5c2ljYWwsIGFjcWVfbGluayk7CiAJcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS5mYXVsdCA9CiAJCQkJYmZfZ2V0KGxwZmNfYWNxZV9saW5rX2ZhdWx0LCBhY3FlX2xpbmspOworCXBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUubG9naWNhbF9zcGVlZCA9CisJCQkJYmZfZ2V0KGxwZmNfYWNxZV9xb3NfbGlua19zcGVlZCwgYWNxZV9saW5rKTsKIAogCS8qIEludm9rZSB0aGUgbHBmY19oYW5kbGVfbGF0dCBtYWlsYm94IGNvbW1hbmQgY2FsbGJhY2sgZnVuY3Rpb24gKi8KIAlscGZjX21ieF9jbXBsX3JlYWRfbGEocGhiYSwgcG1iKTsKQEAgLTMwMDcsMjIgKzMxOTksMzQgQEAKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAqc2hvc3Q7CiAJdWludDMyX3QgbGlua19zdGF0ZTsKKwlpbnQgYWN0aXZlX3ZsaW5rX3ByZXNlbnQ7CisJc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7CisJaW50IGk7CiAKIAlwaGJhLT5mY19ldmVudFRhZyA9IGFjcWVfZmNvZS0+ZXZlbnRfdGFnOwogCXBoYmEtPmZjb2VfZXZlbnR0YWcgPSBhY3FlX2Zjb2UtPmV2ZW50X3RhZzsKIAlzd2l0Y2ggKGV2ZW50X3R5cGUpIHsKIAljYXNlIExQRkNfRkNPRV9FVkVOVF9UWVBFX05FV19GQ0Y6CisJY2FzZSBMUEZDX0ZDT0VfRVZFTlRfVFlQRV9GQ0ZfUEFSQU1fTU9EOgogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUlksCiAJCQkiMjU0NiBOZXcgRkNGIGZvdW5kIGluZGV4IDB4JXggdGFnIDB4JXhcbiIsCiAJCQlhY3FlX2Zjb2UtPmluZGV4LAogCQkJYWNxZV9mY29lLT5ldmVudF90YWcpOwotCQkvKgotCQkgKiBJZiB0aGUgY3VycmVudCBGQ0YgaXMgaW4gZGlzY292ZXJlZCBzdGF0ZSwgb3IKLQkJICogRkNGIGRpc2NvdmVyeSBpcyBpbiBwcm9ncmVzcyBkbyBub3RoaW5nLgotCQkgKi8KIAkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Ci0JCWlmICgocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX0RJU0NPVkVSRUQpIHx8Ci0JCSAgIChwaGJhLT5oYmFfZmxhZyAmIEZDRl9ESVNDX0lOUFJPR1JFU1MpKSB7CisJCWlmICgocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1NDQU5fRE9ORSkgfHwKKwkJICAgIChwaGJhLT5oYmFfZmxhZyAmIEZDRl9ESVNDX0lOUFJPR1JFU1MpKSB7CisJCQkvKgorCQkJICogSWYgdGhlIGN1cnJlbnQgRkNGIGlzIGluIGRpc2NvdmVyZWQgc3RhdGUgb3IKKwkJCSAqIEZDRiBkaXNjb3ZlcnkgaXMgaW4gcHJvZ3Jlc3MsIGRvIG5vdGhpbmcuCisJCQkgKi8KKwkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCQlicmVhazsKKwkJfQorCQlpZiAocGhiYS0+ZmNmLmZjZl9mbGFnICYgRkNGX1JFRElTQ19FVlQpIHsKKwkJCS8qCisJCQkgKiBJZiBmYXN0IEZDRiBmYWlsb3ZlciByZXNjYW4gZXZlbnQgaXMgcGVuZGluZywKKwkJCSAqIGRvIG5vdGhpbmcuCisJCQkgKi8KIAkJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCQlicmVhazsKIAkJfQpAQCAtMzA0OSw3ICszMjUzLDcgQEAKIAkJCSIgdGFnIDB4JXhcbiIsIGFjcWVfZmNvZS0+aW5kZXgsCiAJCQlhY3FlX2Zjb2UtPmV2ZW50X3RhZyk7CiAJCS8qIElmIHRoZSBldmVudCBpcyBub3QgZm9yIGN1cnJlbnRseSB1c2VkIGZjZiBkbyBub3RoaW5nICovCi0JCWlmIChwaGJhLT5mY2YuZmNmX2luZHggIT0gYWNxZV9mY29lLT5pbmRleCkKKwkJaWYgKHBoYmEtPmZjZi5jdXJyZW50X3JlYy5mY2ZfaW5keCAhPSBhY3FlX2Zjb2UtPmluZGV4KQogCQkJYnJlYWs7CiAJCS8qCiAJCSAqIEN1cnJlbnRseSwgZHJpdmVyIHN1cHBvcnQgb25seSBvbmUgRkNGIC0gc28gdHJlYXQgdGhpcyBhcwpAQCAtMzA3NCwxNCArMzI3OCw1OCBAQAogCQlpZiAoIW5kbHApCiAJCQlicmVhazsKIAkJc2hvc3QgPSBscGZjX3Nob3N0X2Zyb21fdnBvcnQodnBvcnQpOworCQlpZiAocGhiYS0+cHBvcnQtPnBvcnRfc3RhdGUgPD0gTFBGQ19GTE9HSSkKKwkJCWJyZWFrOworCQkvKiBJZiB2aXJ0dWFsIGxpbmsgaXMgbm90IHlldCBpbnN0YW50aWF0ZWQgaWdub3JlIENWTCAqLworCQlpZiAodnBvcnQtPnBvcnRfc3RhdGUgPD0gTFBGQ19GRElTQykKKwkJCWJyZWFrOworCiAJCWxwZmNfbGlua2Rvd25fcG9ydCh2cG9ydCk7Ci0JCWlmICh2cG9ydC0+cG9ydF90eXBlICE9IExQRkNfTlBJVl9QT1JUKSB7CisJCWxwZmNfY2xlYW51cF9wZW5kaW5nX21ib3godnBvcnQpOworCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQl2cG9ydC0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9DVkxfUkNWRDsKKwkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQlhY3RpdmVfdmxpbmtfcHJlc2VudCA9IDA7CisKKwkJdnBvcnRzID0gbHBmY19jcmVhdGVfdnBvcnRfd29ya19hcnJheShwaGJhKTsKKwkJaWYgKHZwb3J0cykgeworCQkJZm9yIChpID0gMDsgaSA8PSBwaGJhLT5tYXhfdnBvcnRzICYmIHZwb3J0c1tpXSAhPSBOVUxMOworCQkJCQlpKyspIHsKKwkJCQlpZiAoKCEodnBvcnRzW2ldLT5mY19mbGFnICYKKwkJCQkJRkNfVlBPUlRfQ1ZMX1JDVkQpKSAmJgorCQkJCQkodnBvcnRzW2ldLT5wb3J0X3N0YXRlID4gTFBGQ19GRElTQykpIHsKKwkJCQkJYWN0aXZlX3ZsaW5rX3ByZXNlbnQgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlscGZjX2Rlc3Ryb3lfdnBvcnRfd29ya19hcnJheShwaGJhLCB2cG9ydHMpOworCQl9CisKKwkJaWYgKGFjdGl2ZV92bGlua19wcmVzZW50KSB7CisJCQkvKgorCQkJICogSWYgdGhlcmUgYXJlIG90aGVyIGFjdGl2ZSBWTGlua3MgcHJlc2VudCwKKwkJCSAqIHJlLWluc3RhbnRpYXRlIHRoZSBWbGluayB1c2luZyBGRElTQy4KKwkJCSAqLwogCQkJbW9kX3RpbWVyKCZuZGxwLT5ubHBfZGVsYXlmdW5jLCBqaWZmaWVzICsgSFopOwogCQkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAkJCW5kbHAtPm5scF9mbGFnIHw9IE5MUF9ERUxBWV9UTU87CiAJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7Ci0JCQluZGxwLT5ubHBfbGFzdF9lbHNjbWQgPSBFTFNfQ01EX0ZMT0dJOwotCQkJdnBvcnQtPnBvcnRfc3RhdGUgPSBMUEZDX0ZMT0dJOworCQkJbmRscC0+bmxwX2xhc3RfZWxzY21kID0gRUxTX0NNRF9GRElTQzsKKwkJCXZwb3J0LT5wb3J0X3N0YXRlID0gTFBGQ19GRElTQzsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBPdGhlcndpc2UsIHdlIHJlcXVlc3QgcG9ydCB0byByZWRpc2NvdmVyCisJCQkgKiB0aGUgZW50aXJlIEZDRiB0YWJsZSBmb3IgYSBmYXN0IHJlY292ZXJ5CisJCQkgKiBmcm9tIHBvc3NpYmxlIGNhc2UgdGhhdCB0aGUgY3VycmVudCBGQ0YKKwkJCSAqIGlzIG5vIGxvbmdlciB2YWxpZC4KKwkJCSAqLworCQkJcmMgPSBscGZjX3NsaTRfcmVkaXNjX2ZjZl90YWJsZShwaGJhKTsKKwkJCWlmIChyYykKKwkJCQkvKgorCQkJCSAqIExhc3QgcmVzb3J0IHdpbGwgYmUgcmUtdHJ5IG9uIHRoZQorCQkJCSAqIHRoZSBjdXJyZW50IHJlZ2lzdGVyZWQgRkNGIGVudHJ5LgorCQkJCSAqLworCQkJCWxwZmNfcmV0cnlfcHBvcnRfZGlzY292ZXJ5KHBoYmEpOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0zMTU4LDYgKzM0MDYsMzQgQEAKIH0KIAogLyoqCisgKiBscGZjX3NsaTRfZmNmX3JlZGlzY19ldmVudF9wcm9jIC0gUHJvY2VzcyBmY2YgdGFibGUgcmVkaXNjb3ZlcnkgZXZlbnQKKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIGJ5IHRoZSB3b3JrZXIgdGhyZWFkIHRvIHByb2Nlc3MgRkNGIHRhYmxlCisgKiByZWRpc2NvdmVyeSBwZW5kaW5nIGNvbXBsZXRpb24gZXZlbnQuCisgKiovCit2b2lkIGxwZmNfc2xpNF9mY2ZfcmVkaXNjX2V2ZW50X3Byb2Moc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCWludCByYzsKKworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCS8qIENsZWFyIEZDRiByZWRpc2NvdmVyeSB0aW1lb3V0IGV2ZW50ICovCisJcGhiYS0+ZmNmLmZjZl9mbGFnICY9IH5GQ0ZfUkVESVNDX0VWVDsKKwkvKiBDbGVhciBkcml2ZXIgZmFzdCBmYWlsb3ZlciBGQ0YgcmVjb3JkIGZsYWcgKi8KKwlwaGJhLT5mY2YuZmFpbG92ZXJfcmVjLmZsYWcgPSAwOworCS8qIFNldCBzdGF0ZSBmb3IgRkNGIGZhc3QgZmFpbG92ZXIgKi8KKwlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX1JFRElTQ19GT1Y7CisJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKworCS8qIFNjYW4gRkNGIHRhYmxlIGZyb20gdGhlIGZpcnN0IGVudHJ5IHRvIHJlLWRpc2NvdmVyIFNBTiAqLworCXJjID0gbHBmY19zbGk0X3JlYWRfZmNmX3JlY29yZChwaGJhLCBMUEZDX0ZDT0VfRkNGX0dFVF9GSVJTVCk7CisJaWYgKHJjKQorCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUlksCisJCQkJIjI3NDcgUG9zdCBGQ0YgcmVkaXNjb3ZlcnkgcmVhZCBGQ0YgcmVjb3JkICIKKwkJCQkiZmFpbGVkIDB4JXhcbiIsIHJjKTsKK30KKworLyoqCiAgKiBscGZjX2FwaV90YWJsZV9zZXR1cCAtIFNldCB1cCBwZXIgaGJhIHBjaS1kZXZpY2UgZ3JvdXAgZnVuYyBhcGkganVtcCB0YWJsZQogICogQHBoYmE6IHBvaW50ZXIgdG8gbHBmYyBoYmEgZGF0YSBzdHJ1Y3R1cmUuCiAgKiBAZGV2X2dycDogVGhlIEhCQSBQQ0ktRGV2aWNlIGdyb3VwIG51bWJlci4KQEAgLTM0NDIsOCArMzcxOCwxMCBAQAogbHBmY19zbGk0X2RyaXZlcl9yZXNvdXJjZV9zZXR1cChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7CiAJc3RydWN0IGxwZmNfc2xpICpwc2xpOwotCWludCByYzsKLQlpbnQgaSwgaGJxX2NvdW50OworCUxQRkNfTUJPWFFfdCAqbWJveHE7CisJaW50IHJjLCBpLCBoYnFfY291bnQsIGJ1Zl9zaXplLCBkbWFfYnVmX3NpemUsIG1heF9idWZfc2l6ZTsKKwl1aW50OF90IHBuX3BhZ2VbTFBGQ19NQVhfU1VQUE9SVEVEX1BBR0VTXSA9IHswfTsKKwlzdHJ1Y3QgbHBmY19tcWUgKm1xZTsKIAogCS8qIEJlZm9yZSBwcm9jZWVkLCB3YWl0IGZvciBQT1NUIGRvbmUgYW5kIGRldmljZSByZWFkeSAqLwogCXJjID0gbHBmY19zbGk0X3Bvc3Rfc3RhdHVzX2NoZWNrKHBoYmEpOwpAQCAtMzQ3Miw2ICszNzUwLDExIEBACiAJaW5pdF90aW1lcigmcGhiYS0+ZXJhdHRfcG9sbCk7CiAJcGhiYS0+ZXJhdHRfcG9sbC5mdW5jdGlvbiA9IGxwZmNfcG9sbF9lcmF0dDsKIAlwaGJhLT5lcmF0dF9wb2xsLmRhdGEgPSAodW5zaWduZWQgbG9uZykgcGhiYTsKKwkvKiBGQ0YgcmVkaXNjb3ZlciB0aW1lciAqLworCWluaXRfdGltZXIoJnBoYmEtPmZjZi5yZWRpc2Nfd2FpdCk7CisJcGhiYS0+ZmNmLnJlZGlzY193YWl0LmZ1bmN0aW9uID0gbHBmY19zbGk0X2ZjZl9yZWRpc2Nfd2FpdF90bW87CisJcGhiYS0+ZmNmLnJlZGlzY193YWl0LmRhdGEgPSAodW5zaWduZWQgbG9uZylwaGJhOworCiAJLyoKIAkgKiBXZSBuZWVkIHRvIGRvIGEgUkVBRF9DT05GSUcgbWFpbGJveCBjb21tYW5kIGhlcmUgYmVmb3JlCiAJICogY2FsbGluZyBscGZjX2dldF9jZmdwYXJhbS4gRm9yIFZGcyB0aGlzIHdpbGwgcmVwb3J0IHRoZQpAQCAtMzQ5NiwzMSArMzc3OSwyNiBAQAogCSAqIHVzZWQgdG8gY3JlYXRlIHRoZSBzZ19kbWFfYnVmX3Bvb2wgbXVzdCBiZSBkeW5hbWljYWxseSBjYWxjdWxhdGVkLgogCSAqIDIgc2VnbWVudHMgYXJlIGFkZGVkIHNpbmNlIHRoZSBJT0NCIG5lZWRzIGEgY29tbWFuZCBhbmQgcmVzcG9uc2UgYmRlLgogCSAqIFRvIGluc3VyZSB0aGF0IHRoZSBzY3NpIHNnbCBkb2VzIG5vdCBjcm9zcyBhIDRrIHBhZ2UgYm91bmRhcnkgb25seQotCSAqIHNnbCBzaXplcyBvZiAxaywgMmssIDRrLCBhbmQgOGsgYXJlIHN1cHBvcnRlZC4KLQkgKiBUYWJsZSBvZiBzZ2wgc2l6ZXMgYW5kIHNlZ19jbnQ6Ci0JICogc2dsIHNpemUsIAlzZ19zZWdfY250CXRvdGFsIHNlZwotCSAqIDFrCQk1MAkJNTIKLQkgKiAyawkJMTE0CQkxMTYKLQkgKiA0awkJMjQyCQkyNDQKLQkgKiA4awkJNDk4CQk1MDAKLQkgKiBjbWQoMzIpICsgcnNwKDE2MCkgKyAoNTIgKiBzaXplb2Yoc2xpNF9zZ2UpKSA9IDEwMjQKLQkgKiBjbWQoMzIpICsgcnNwKDE2MCkgKyAoMTE2ICogc2l6ZW9mKHNsaTRfc2dlKSkgPSAyMDQ4Ci0JICogY21kKDMyKSArIHJzcCgxNjApICsgKDI0NCAqIHNpemVvZihzbGk0X3NnZSkpID0gNDA5NgotCSAqIGNtZCgzMikgKyByc3AoMTYwKSArICg1MDAgKiBzaXplb2Yoc2xpNF9zZ2UpKSA9IDgxOTIKKwkgKiBzZ2wgc2l6ZXMgb2YgbXVzdCBiZSBhIHBvd2VyIG9mIDIuCiAJICovCi0JaWYgKHBoYmEtPmNmZ19zZ19zZWdfY250IDw9IExQRkNfREVGQVVMVF9TR19TRUdfQ05UKQotCQlwaGJhLT5jZmdfc2dfc2VnX2NudCA9IDUwOwotCWVsc2UgaWYgKHBoYmEtPmNmZ19zZ19zZWdfY250IDw9IDExNCkKLQkJcGhiYS0+Y2ZnX3NnX3NlZ19jbnQgPSAxMTQ7Ci0JZWxzZSBpZiAocGhiYS0+Y2ZnX3NnX3NlZ19jbnQgPD0gMjQyKQotCQlwaGJhLT5jZmdfc2dfc2VnX2NudCA9IDI0MjsKKwlidWZfc2l6ZSA9IChzaXplb2Yoc3RydWN0IGZjcF9jbW5kKSArIHNpemVvZihzdHJ1Y3QgZmNwX3JzcCkgKworCQkgICAgKChwaGJhLT5jZmdfc2dfc2VnX2NudCArIDIpICogc2l6ZW9mKHN0cnVjdCBzbGk0X3NnZSkpKTsKKwkvKiBGZWF0dXJlIExldmVsIDEgaGFyZHdhcmUgaXMgbGltaXRlZCB0byAyIHBhZ2VzICovCisJaWYgKChiZl9nZXQobHBmY19zbGlfaW50Zl9mZWF0dXJlbGV2ZWwxLCAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpID09CisJICAgICBMUEZDX1NMSV9JTlRGX0ZFQVRVUkVMRVZFTDFfMSkpCisJCW1heF9idWZfc2l6ZSA9IExQRkNfU0xJNF9GTDFfTUFYX0JVRl9TSVpFOwogCWVsc2UKLQkJcGhiYS0+Y2ZnX3NnX3NlZ19jbnQgPSA0OTg7Ci0KLQlwaGJhLT5jZmdfc2dfZG1hX2J1Zl9zaXplID0gc2l6ZW9mKHN0cnVjdCBmY3BfY21uZCkKLQkJCQkJKyBzaXplb2Yoc3RydWN0IGZjcF9yc3ApOwotCXBoYmEtPmNmZ19zZ19kbWFfYnVmX3NpemUgKz0KLQkJKChwaGJhLT5jZmdfc2dfc2VnX2NudCArIDIpICogc2l6ZW9mKHN0cnVjdCBzbGk0X3NnZSkpOworCQltYXhfYnVmX3NpemUgPSBMUEZDX1NMSTRfTUFYX0JVRl9TSVpFOworCWZvciAoZG1hX2J1Zl9zaXplID0gTFBGQ19TTEk0X01JTl9CVUZfU0laRTsKKwkgICAgIGRtYV9idWZfc2l6ZSA8IG1heF9idWZfc2l6ZSAmJiBidWZfc2l6ZSA+IGRtYV9idWZfc2l6ZTsKKwkgICAgIGRtYV9idWZfc2l6ZSA9IGRtYV9idWZfc2l6ZSA8PCAxKQorCQk7CisJaWYgKGRtYV9idWZfc2l6ZSA9PSBtYXhfYnVmX3NpemUpCisJCXBoYmEtPmNmZ19zZ19zZWdfY250ID0gKGRtYV9idWZfc2l6ZSAtCisJCQlzaXplb2Yoc3RydWN0IGZjcF9jbW5kKSAtIHNpemVvZihzdHJ1Y3QgZmNwX3JzcCkgLQorCQkJKDIgKiBzaXplb2Yoc3RydWN0IHNsaTRfc2dlKSkpIC8KKwkJCQlzaXplb2Yoc3RydWN0IHNsaTRfc2dlKTsKKwlwaGJhLT5jZmdfc2dfZG1hX2J1Zl9zaXplID0gZG1hX2J1Zl9zaXplOwogCiAJLyogSW5pdGlhbGl6ZSBidWZmZXIgcXVldWUgbWFuYWdlbWVudCBmaWVsZHMgKi8KIAloYnFfY291bnQgPSBscGZjX3NsaV9oYnFfY291bnQoKTsKQEAgLTM2MzgsNiArMzkxNiw0MyBAQAogCQlnb3RvIG91dF9mcmVlX2ZjcF9lcV9oZGw7CiAJfQogCisJbWJveHEgPSAoTFBGQ19NQk9YUV90ICopIG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwKKwkJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIW1ib3hxKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9mY3BfZXFfaGRsOworCX0KKworCS8qIEdldCB0aGUgU3VwcG9ydGVkIFBhZ2VzLiBJdCBpcyBhbHdheXMgYXZhaWxhYmxlLiAqLworCWxwZmNfc3VwcG9ydGVkX3BhZ2VzKG1ib3hxKTsKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveHEsIE1CWF9QT0xMKTsKKwlpZiAodW5saWtlbHkocmMpKSB7CisJCXJjID0gLUVJTzsKKwkJbWVtcG9vbF9mcmVlKG1ib3hxLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJZ290byBvdXRfZnJlZV9mY3BfZXFfaGRsOworCX0KKworCW1xZSA9ICZtYm94cS0+dS5tcWU7CisJbWVtY3B5KCZwbl9wYWdlWzBdLCAoKHVpbnQ4X3QgKikmbXFlLT51bi5zdXBwX3BhZ2VzLndvcmQzKSwKKwkgICAgICAgTFBGQ19NQVhfU1VQUE9SVEVEX1BBR0VTKTsKKwlmb3IgKGkgPSAwOyBpIDwgTFBGQ19NQVhfU1VQUE9SVEVEX1BBR0VTOyBpKyspIHsKKwkJc3dpdGNoIChwbl9wYWdlW2ldKSB7CisJCWNhc2UgTFBGQ19TTEk0X1BBUkFNRVRFUlM6CisJCQlwaGJhLT5zbGk0X2hiYS5wY19zbGk0X3BhcmFtcy5zdXBwb3J0ZWQgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIFJlYWQgdGhlIHBvcnQncyBTTEk0IFBhcmFtZXRlcnMgY2FwYWJpbGl0aWVzIGlmIHN1cHBvcnRlZC4gKi8KKwlpZiAocGhiYS0+c2xpNF9oYmEucGNfc2xpNF9wYXJhbXMuc3VwcG9ydGVkKQorCQlyYyA9IGxwZmNfcGNfc2xpNF9wYXJhbXNfZ2V0KHBoYmEsIG1ib3hxKTsKKwltZW1wb29sX2ZyZWUobWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCWlmIChyYykgeworCQlyYyA9IC1FSU87CisJCWdvdG8gb3V0X2ZyZWVfZmNwX2VxX2hkbDsKKwl9CiAJcmV0dXJuIHJjOwogCiBvdXRfZnJlZV9mY3BfZXFfaGRsOgpAQCAtMzczMyw2ICs0MDQ4LDggQEAKIGludAogbHBmY19pbml0X2FwaV90YWJsZV9zZXR1cChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQ4X3QgZGV2X2dycCkKIHsKKwlwaGJhLT5scGZjX2hiYV9pbml0X2xpbmsgPSBscGZjX2hiYV9pbml0X2xpbms7CisJcGhiYS0+bHBmY19oYmFfZG93bl9saW5rID0gbHBmY19oYmFfZG93bl9saW5rOwogCXN3aXRjaCAoZGV2X2dycCkgewogCWNhc2UgTFBGQ19QQ0lfREVWX0xQOgogCQlwaGJhLT5scGZjX2hiYV9kb3duX3Bvc3QgPSBscGZjX2hiYV9kb3duX3Bvc3RfczM7CkBAIC00MjkxLDcgKzQ2MDgsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQltdXRleF9pbml0KCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJc3Bpbl9sb2NrX2luaXQoJnBoYmEtPmN0X2V2X2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZwaGJhLT5jdF9ldl93YWl0ZXJzKTsKIAogCXJldHVybiBwaGJhOwpAQCAtNDY0MSw3ICs0OTU4LDcgQEAKIGludAogbHBmY19zbGk0X3Bvc3Rfc3RhdHVzX2NoZWNrKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKLQlzdHJ1Y3QgbHBmY19yZWdpc3RlciBzdGFfcmVnLCB1ZXJybG9fcmVnLCB1ZXJyaGlfcmVnLCBzY3JhdGNocGFkOworCXN0cnVjdCBscGZjX3JlZ2lzdGVyIHN0YV9yZWcsIHVlcnJsb19yZWcsIHVlcnJoaV9yZWc7CiAJaW50IGksIHBvcnRfZXJyb3IgPSAtRU5PREVWOwogCiAJaWYgKCFwaGJhLT5zbGk0X2hiYS5TVEFyZWdhZGRyKQpAQCAtNDY3NywxNCArNDk5NCwyMSBAQAogCQkJYmZfZ2V0KGxwZmNfaHN0X3N0YXRlX3BvcnRfc3RhdHVzLCAmc3RhX3JlZykpOwogCiAJLyogTG9nIGRldmljZSBpbmZvcm1hdGlvbiAqLwotCXNjcmF0Y2hwYWQud29yZDAgPSAgcmVhZGwocGhiYS0+c2xpNF9oYmEuU0NSQVRDSFBBRHJlZ2FkZHIpOwotCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAotCQkJIjI1MzQgRGV2aWNlIEluZm86IENoaXBUeXBlPTB4JXgsIFNsaVJldj0weCV4LCAiCi0JCQkiRmVhdHVyZUwxPTB4JXgsIEZlYXR1cmVMMj0weCV4XG4iLAotCQkJYmZfZ2V0KGxwZmNfc2NyYXRjaHBhZF9jaGlwdHlwZSwgJnNjcmF0Y2hwYWQpLAotCQkJYmZfZ2V0KGxwZmNfc2NyYXRjaHBhZF9zbGlyZXYsICZzY3JhdGNocGFkKSwKLQkJCWJmX2dldChscGZjX3NjcmF0Y2hwYWRfZmVhdHVyZWxldmVsMSwgJnNjcmF0Y2hwYWQpLAotCQkJYmZfZ2V0KGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwyLCAmc2NyYXRjaHBhZCkpOworCXBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmLndvcmQwID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuU0xJSU5URnJlZ2FkZHIpOworCWlmIChiZl9nZXQobHBmY19zbGlfaW50Zl92YWxpZCwKKwkJICAgJnBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmKSA9PSBMUEZDX1NMSV9JTlRGX1ZBTElEKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19JTklULAorCQkJCSIyNTM0IERldmljZSBJbmZvOiBDaGlwVHlwZT0weCV4LCBTbGlSZXY9MHgleCwgIgorCQkJCSJGZWF0dXJlTDE9MHgleCwgRmVhdHVyZUwyPTB4JXhcbiIsCisJCQkJYmZfZ2V0KGxwZmNfc2xpX2ludGZfc2xpX2ZhbWlseSwKKwkJCQkgICAgICAgJnBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmKSwKKwkJCQliZl9nZXQobHBmY19zbGlfaW50Zl9zbGlyZXYsCisJCQkJICAgICAgICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50ZiksCisJCQkJYmZfZ2V0KGxwZmNfc2xpX2ludGZfZmVhdHVyZWxldmVsMSwKKwkJCQkgICAgICAgJnBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmKSwKKwkJCQliZl9nZXQobHBmY19zbGlfaW50Zl9mZWF0dXJlbGV2ZWwyLAorCQkJCSAgICAgICAmcGhiYS0+c2xpNF9oYmEuc2xpX2ludGYpKTsKKwl9CiAJcGhiYS0+c2xpNF9oYmEudWVfbWFza19sbyA9IHJlYWRsKHBoYmEtPnNsaTRfaGJhLlVFTUFTS0xPcmVnYWRkcik7CiAJcGhiYS0+c2xpNF9oYmEudWVfbWFza19oaSA9IHJlYWRsKHBoYmEtPnNsaTRfaGJhLlVFTUFTS0hJcmVnYWRkcik7CiAJLyogV2l0aCB1bmNvdmVyYWJsZSBlcnJvciwgbG9nIHRoZSBlcnJvciBtZXNzYWdlIGFuZCByZXR1cm4gZXJyb3IgKi8KQEAgLTQ3MjMsOCArNTA0Nyw4IEBACiAJCQkJCUxQRkNfVUVfTUFTS19MTzsKIAlwaGJhLT5zbGk0X2hiYS5VRU1BU0tISXJlZ2FkZHIgPSBwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgKwogCQkJCQlMUEZDX1VFX01BU0tfSEk7Ci0JcGhiYS0+c2xpNF9oYmEuU0NSQVRDSFBBRHJlZ2FkZHIgPSBwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgKwotCQkJCQlMUEZDX1NDUkFUQ0hQQUQ7CisJcGhiYS0+c2xpNF9oYmEuU0xJSU5URnJlZ2FkZHIgPSBwaGJhLT5zbGk0X2hiYS5jb25mX3JlZ3NfbWVtbWFwX3AgKworCQkJCQlMUEZDX1NMSV9JTlRGOwogfQogCiAvKioKQEAgLTU5OTksNyArNjMyMyw3IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiAJCS8qIE1hcmsgdGhlIEZDRkkgaXMgbm8gbG9uZ2VyIHJlZ2lzdGVyZWQgKi8KIAkJcGhiYS0+ZmNmLmZjZl9mbGFnICY9Ci0JCQl+KEZDRl9BVkFJTEFCTEUgfCBGQ0ZfUkVHSVNURVJFRCB8IEZDRl9ESVNDT1ZFUkVEKTsKKwkJCX4oRkNGX0FWQUlMQUJMRSB8IEZDRl9SRUdJU1RFUkVEIHwgRkNGX1NDQU5fRE9ORSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKIAl9CiB9CkBAIC02MDM5LDE2ICs2MzYzLDIwIEBACiAKIAkvKiBHZXQgdGhlIGJ1cyBhZGRyZXNzIG9mIFNMSTQgZGV2aWNlIEJhcjAsIEJhcjEsIGFuZCBCYXIyIGFuZCB0aGUKIAkgKiBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgYnkgZWFjaCBtYXBwaW5nLiBUaGV5IGFyZSBhY3R1YWxseQotCSAqIG1hcHBpbmcgdG8gdGhlIFBDSSBCQVIgcmVnaW9ucyAxLCAyLCBhbmQgNCBieSB0aGUgU0xJNCBkZXZpY2UuCisJICogbWFwcGluZyB0byB0aGUgUENJIEJBUiByZWdpb25zIDAgb3IgMSwgMiwgYW5kIDQgYnkgdGhlIFNMSTQgZGV2aWNlLgogCSAqLwotCXBoYmEtPnBjaV9iYXIwX21hcCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBMUEZDX1NMSTRfQkFSMCk7Ci0JYmFyMG1hcF9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIExQRkNfU0xJNF9CQVIwKTsKKwlpZiAocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApKSB7CisJCXBoYmEtPnBjaV9iYXIwX21hcCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwkJYmFyMG1hcF9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCX0gZWxzZSB7CisJCXBoYmEtPnBjaV9iYXIwX21hcCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKKwkJYmFyMG1hcF9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpOworCX0KKwlwaGJhLT5wY2lfYmFyMV9tYXAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMik7CisJYmFyMW1hcF9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpOwogCi0JcGhiYS0+cGNpX2JhcjFfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIExQRkNfU0xJNF9CQVIxKTsKLQliYXIxbWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgTFBGQ19TTEk0X0JBUjEpOwotCi0JcGhiYS0+cGNpX2JhcjJfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIExQRkNfU0xJNF9CQVIyKTsKLQliYXIybWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgTFBGQ19TTEk0X0JBUjIpOworCXBoYmEtPnBjaV9iYXIyX21hcCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KTsKKwliYXIybWFwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgNCk7CiAKIAkvKiBNYXAgU0xJNCBQQ0kgQ29uZmlnIFNwYWNlIFJlZ2lzdGVyIGJhc2UgdG8gYSBrZXJuZWwgdmlydHVhbCBhZGRyICovCiAJcGhiYS0+c2xpNF9oYmEuY29uZl9yZWdzX21lbW1hcF9wID0KQEAgLTY3OTMsNiArNzEyMSw3MyBAQAogCXBoYmEtPnBwb3J0LT53b3JrX3BvcnRfZXZlbnRzID0gMDsKIH0KIAorIC8qKgorICogbHBmY19wY19zbGk0X3BhcmFtc19nZXQgLSBHZXQgdGhlIFNMSTRfUEFSQU1TIHBvcnQgY2FwYWJpbGl0aWVzLgorICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgorICogQG1ib3hxOiBQb2ludGVyIHRvIHRoZSBtYWlsYm94cSBtZW1vcnkgZm9yIHRoZSBtYWlsYm94IGNvbW1hbmQgcmVzcG9uc2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gdGhlIFNMSTQgY29kZSBwYXRoIHRvIHJlYWQgdGhlIHBvcnQncworICogc2xpNCBjYXBhYmlsaXRpZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQgdGhhdCBjYW4gYmxvY2std2FpdAorICogZm9yIHRoZSBjb21wbGV0aW9uLiAgVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhpcyByb3V0aW5lIGlzIGNhbGxlZAorICogdHlwaWNhbGx5IGZyb20gcHJvYmVfb25lIG9yIGZyb20gdGhlIG9ubGluZSByb3V0aW5lLgorICoqLworaW50CitscGZjX3BjX3NsaTRfcGFyYW1zX2dldChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqbWJveHEpCit7CisJaW50IHJjOworCXN0cnVjdCBscGZjX21xZSAqbXFlOworCXN0cnVjdCBscGZjX3BjX3NsaTRfcGFyYW1zICpzbGk0X3BhcmFtczsKKwl1aW50MzJfdCBtYm94X3RtbzsKKworCXJjID0gMDsKKwltcWUgPSAmbWJveHEtPnUubXFlOworCisJLyogUmVhZCB0aGUgcG9ydCdzIFNMSTQgUGFyYW1ldGVycyBwb3J0IGNhcGFiaWxpdGllcyAqLworCWxwZmNfc2xpNF9wYXJhbXMobWJveHEpOworCWlmICghcGhiYS0+c2xpNF9oYmEuaW50cl9lbmFibGUpCisJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94cSwgTUJYX1BPTEwpOworCWVsc2UgeworCQltYm94X3RtbyA9IGxwZmNfbWJveF90bW9fdmFsKHBoYmEsIE1CWF9QT1JUX0NBUEFCSUxJVElFUyk7CisJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveF93YWl0KHBoYmEsIG1ib3hxLCBtYm94X3Rtbyk7CisJfQorCisJaWYgKHVubGlrZWx5KHJjKSkKKwkJcmV0dXJuIDE7CisKKwlzbGk0X3BhcmFtcyA9ICZwaGJhLT5zbGk0X2hiYS5wY19zbGk0X3BhcmFtczsKKwlzbGk0X3BhcmFtcy0+aWZfdHlwZSA9IGJmX2dldChpZl90eXBlLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnNsaV9yZXYgPSBiZl9nZXQoc2xpX3JldiwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5zbGlfZmFtaWx5ID0gYmZfZ2V0KHNsaV9mYW1pbHksICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+ZmVhdHVyZWxldmVsXzEgPSBiZl9nZXQoZmVhdHVyZWxldmVsXzEsCisJCQkJCSAgICAgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5mZWF0dXJlbGV2ZWxfMiA9IGJmX2dldChmZWF0dXJlbGV2ZWxfMiwKKwkJCQkJICAgICAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnByb3RvX3R5cGVzID0gbXFlLT51bi5zbGk0X3BhcmFtcy53b3JkMzsKKwlzbGk0X3BhcmFtcy0+c2dlX3N1cHBfbGVuID0gbXFlLT51bi5zbGk0X3BhcmFtcy5zZ2Vfc3VwcF9sZW47CisJc2xpNF9wYXJhbXMtPmlmX3BhZ2Vfc3ogPSBiZl9nZXQoaWZfcGFnZV9zeiwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5ycV9kYl93aW5kb3cgPSBiZl9nZXQocnFfZGJfd2luZG93LCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmxvb3Bia19zY29wZSA9IGJmX2dldChsb29wYmtfc2NvcGUsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+ZXFfcGFnZXNfbWF4ID0gYmZfZ2V0KGVxX3BhZ2VzLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmVxZV9zaXplID0gYmZfZ2V0KGVxZV9zaXplLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPmNxX3BhZ2VzX21heCA9IGJmX2dldChjcV9wYWdlcywgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5jcWVfc2l6ZSA9IGJmX2dldChjcWVfc2l6ZSwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5tcV9wYWdlc19tYXggPSBiZl9nZXQobXFfcGFnZXMsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+bXFlX3NpemUgPSBiZl9nZXQobXFlX3NpemUsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+bXFfZWxlbV9jbnQgPSBiZl9nZXQobXFfZWxlbV9jbnQsICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlzbGk0X3BhcmFtcy0+d3FfcGFnZXNfbWF4ID0gYmZfZ2V0KHdxX3BhZ2VzLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPndxZV9zaXplID0gYmZfZ2V0KHdxZV9zaXplLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnJxX3BhZ2VzX21heCA9IGJmX2dldChycV9wYWdlcywgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5ycWVfc2l6ZSA9IGJmX2dldChycWVfc2l6ZSwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5oZHJfcGFnZXNfbWF4ID0gYmZfZ2V0KGhkcl9wYWdlcywgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5oZHJfc2l6ZSA9IGJmX2dldChoZHJfc2l6ZSwgJm1xZS0+dW4uc2xpNF9wYXJhbXMpOworCXNsaTRfcGFyYW1zLT5oZHJfcHBfYWxpZ24gPSBiZl9nZXQoaGRyX3BwX2FsaWduLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnNnbF9wYWdlc19tYXggPSBiZl9nZXQoc2dsX3BhZ2VzLCAmbXFlLT51bi5zbGk0X3BhcmFtcyk7CisJc2xpNF9wYXJhbXMtPnNnbF9wcF9hbGlnbiA9IGJmX2dldChzZ2xfcHBfYWxpZ24sICZtcWUtPnVuLnNsaTRfcGFyYW1zKTsKKwlyZXR1cm4gcmM7Cit9CisKIC8qKgogICogbHBmY19wY2lfcHJvYmVfb25lX3MzIC0gUENJIHByb2JlIGZ1bmMgdG8gcmVnIFNMSS0zIGRldmljZSB0byBQQ0kgc3Vic3lzdGVtLgogICogQHBkZXY6IHBvaW50ZXIgdG8gUENJIGRldmljZQpAQCAtNzEzNCw2ICs3NTI5LDEyIEBACiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCisJLyoKKwkgKiBBcyB0aGUgbmV3IGtlcm5lbCBiZWhhdmlvciBvZiBwY2lfcmVzdG9yZV9zdGF0ZSgpIEFQSSBjYWxsIGNsZWFycworCSAqIGRldmljZSBzYXZlZF9zdGF0ZSBmbGFnLCBuZWVkIHRvIHNhdmUgdGhlIHJlc3RvcmVkIHN0YXRlIGFnYWluLgorCSAqLworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCiAJaWYgKHBkZXYtPmlzX2J1c21hc3RlcikKIAkJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKQEAgLTczMTcsNiArNzcxOCwxMyBAQAogCX0KIAogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJLyoKKwkgKiBBcyB0aGUgbmV3IGtlcm5lbCBiZWhhdmlvciBvZiBwY2lfcmVzdG9yZV9zdGF0ZSgpIEFQSSBjYWxsIGNsZWFycworCSAqIGRldmljZSBzYXZlZF9zdGF0ZSBmbGFnLCBuZWVkIHRvIHNhdmUgdGhlIHJlc3RvcmVkIHN0YXRlIGFnYWluLgorCSAqLworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCiAJaWYgKHBkZXYtPmlzX2J1c21hc3RlcikKIAkJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKQEAgLTc3MjYsNiArODEzNCwxMyBAQAogCS8qIFJlc3RvcmUgZGV2aWNlIHN0YXRlIGZyb20gUENJIGNvbmZpZyBzcGFjZSAqLwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKworCS8qCisJICogQXMgdGhlIG5ldyBrZXJuZWwgYmVoYXZpb3Igb2YgcGNpX3Jlc3RvcmVfc3RhdGUoKSBBUEkgY2FsbCBjbGVhcnMKKwkgKiBkZXZpY2Ugc2F2ZWRfc3RhdGUgZmxhZywgbmVlZCB0byBzYXZlIHRoZSByZXN0b3JlZCBzdGF0ZSBhZ2Fpbi4KKwkgKi8KKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwogCWlmIChwZGV2LT5pc19idXNtYXN0ZXIpCiAJCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCkBAIC03ODQ1LDExICs4MjYwLDExIEBACiAJaW50IHJjOwogCXN0cnVjdCBscGZjX3NsaV9pbnRmIGludGY7CiAKLQlpZiAocGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIExQRkNfU0xJUkVWX0NPTkZfV09SRCwgJmludGYud29yZDApKQorCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgTFBGQ19TTElfSU5URiwgJmludGYud29yZDApKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICgoYmZfZ2V0KGxwZmNfc2xpX2ludGZfdmFsaWQsICZpbnRmKSA9PSBMUEZDX1NMSV9JTlRGX1ZBTElEKSAmJgotCQkoYmZfZ2V0KGxwZmNfc2xpX2ludGZfcmV2LCAmaW50ZikgPT0gTFBGQ19TTElSRVZfQ09ORl9TTEk0KSkKKwkgICAgKGJmX2dldChscGZjX3NsaV9pbnRmX3NsaXJldiwgJmludGYpID09IExQRkNfU0xJX0lOVEZfUkVWX1NMSTQpKQogCQlyYyA9IGxwZmNfcGNpX3Byb2JlX29uZV9zNChwZGV2LCBwaWQpOwogCWVsc2UKIAkJcmMgPSBscGZjX3BjaV9wcm9iZV9vbmVfczMocGRldiwgcGlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKaW5kZXggYTlhZmQ4Yi4uNmM0ZGNlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKQEAgLTE3MDcsNyArMTcwNyw4IEBACiAJCQkJYWxsb2NfbGVuIC0gc2l6ZW9mKHVuaW9uICBscGZjX3NsaTRfY2ZnX3NoZHIpOwogCX0KIAkvKiBUaGUgc3ViLWhlYWRlciBpcyBpbiBETUEgbWVtb3J5LCB3aGljaCBuZWVkcyBlbmRpYW4gY29udmVyc3Rpb24gKi8KLQlscGZjX3NsaV9wY2ltZW1fYmNvcHkoY2ZnX3NoZHIsIGNmZ19zaGRyLAorCWlmIChjZmdfc2hkcikKKwkJbHBmY19zbGlfcGNpbWVtX2Jjb3B5KGNmZ19zaGRyLCBjZmdfc2hkciwKIAkJCSAgICAgIHNpemVvZih1bmlvbiAgbHBmY19zbGk0X2NmZ19zaGRyKSk7CiAKIAlyZXR1cm4gYWxsb2NfbGVuOwpAQCAtMTc0Nyw2ICsxNzQ4LDY1IEBACiB9CiAKIC8qKgorICogbHBmY19zbGk0X21ieF9yZWFkX2ZjZl9yZWNvcmQgLSBBbGxvY2F0ZSBhbmQgY29uc3RydWN0IHJlYWQgZmNmIG1ib3ggY21kCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBmY2ZfaW5kZXg6IGluZGV4IHRvIGZjZiB0YWJsZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcm91dGluZSBhbGxvY2F0ZXMgYW5kIGNvbnN0cnVjdHMgbm9uLWVtYmVkZGVkIG1haWxib3ggY29tbWFuZAorICogZm9yIHJlYWRpbmcgYSBGQ0YgdGFibGUgZW50cnkgcmVmZXJlZCBieSBAZmNmX2luZGV4LgorICoKKyAqIFJldHVybjogcG9pbnRlciB0byB0aGUgbWFpbGJveCBjb21tYW5kIGNvbnN0cnVjdGVkIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZQorICogTlVMTC4KKyAqKi8KK2ludAorbHBmY19zbGk0X21ieF9yZWFkX2ZjZl9yZWNvcmQoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkJICAgICAgc3RydWN0IGxwZmNNYm94cSAqbWJveHEsCisJCQkgICAgICB1aW50MTZfdCBmY2ZfaW5kZXgpCit7CisJdm9pZCAqdmlydF9hZGRyOworCWRtYV9hZGRyX3QgcGh5c19hZGRyOworCXVpbnQ4X3QgKmJ5dGVwOworCXN0cnVjdCBscGZjX21ieF9zZ2Ugc2dlOworCXVpbnQzMl90IGFsbG9jX2xlbiwgcmVxX2xlbjsKKwlzdHJ1Y3QgbHBmY19tYnhfcmVhZF9mY2ZfdGJsICpyZWFkX2ZjZjsKKworCWlmICghbWJveHEpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVxX2xlbiA9IHNpemVvZihzdHJ1Y3QgZmNmX3JlY29yZCkgKworCQkgIHNpemVvZih1bmlvbiBscGZjX3NsaTRfY2ZnX3NoZHIpICsgMiAqIHNpemVvZih1aW50MzJfdCk7CisKKwkvKiBTZXQgdXAgUkVBRF9GQ0YgU0xJNF9DT05GSUcgbWFpbGJveC1pb2N0bCBjb21tYW5kICovCisJYWxsb2NfbGVuID0gbHBmY19zbGk0X2NvbmZpZyhwaGJhLCBtYm94cSwgTFBGQ19NQk9YX1NVQlNZU1RFTV9GQ09FLAorCQkJTFBGQ19NQk9YX09QQ09ERV9GQ09FX1JFQURfRkNGX1RBQkxFLCByZXFfbGVuLAorCQkJTFBGQ19TTEk0X01CWF9ORU1CRUQpOworCisJaWYgKGFsbG9jX2xlbiA8IHJlcV9sZW4pIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTUJPWCwKKwkJCQkiMDI5MSBBbGxvY2F0ZWQgRE1BIG1lbW9yeSBzaXplICh4JXgpIGlzICIKKwkJCQkibGVzcyB0aGFuIHRoZSByZXF1ZXN0ZWQgRE1BIG1lbW9yeSAiCisJCQkJInNpemUgKHgleClcbiIsIGFsbG9jX2xlbiwgcmVxX2xlbik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEdldCB0aGUgZmlyc3QgU0dFIGVudHJ5IGZyb20gdGhlIG5vbi1lbWJlZGRlZCBETUEgbWVtb3J5LiBUaGlzCisJICogcm91dGluZSBvbmx5IHVzZXMgYSBzaW5nbGUgU0dFLgorCSAqLworCWxwZmNfc2xpNF9tYnhfc2dlX2dldChtYm94cSwgMCwgJnNnZSk7CisJcGh5c19hZGRyID0gZ2V0UGFkZHIoc2dlLnBhX2hpLCBzZ2UucGFfbG8pOworCXZpcnRfYWRkciA9IG1ib3hxLT5zZ2VfYXJyYXktPmFkZHJbMF07CisJcmVhZF9mY2YgPSAoc3RydWN0IGxwZmNfbWJ4X3JlYWRfZmNmX3RibCAqKXZpcnRfYWRkcjsKKworCS8qIFNldCB1cCBjb21tYW5kIGZpZWxkcyAqLworCWJmX3NldChscGZjX21ieF9yZWFkX2ZjZl90YmxfaW5keCwgJnJlYWRfZmNmLT51LnJlcXVlc3QsIGZjZl9pbmRleCk7CisJLyogUGVyZm9ybSBuZWNlc3NhcnkgZW5kaWFuIGNvbnZlcnNpb24gKi8KKwlieXRlcCA9IHZpcnRfYWRkciArIHNpemVvZih1bmlvbiBscGZjX3NsaTRfY2ZnX3NoZHIpOworCWxwZmNfc2xpX3BjaW1lbV9iY29weShieXRlcCwgYnl0ZXAsIHNpemVvZih1aW50MzJfdCkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogbHBmY19yZXF1ZXN0X2ZlYXR1cmVzOiBDb25maWd1cmUgU0xJNCBSRVFVRVNUX0ZFQVRVUkVTIG1haWxib3gKICAqIEBtYm94cTogcG9pbnRlciB0byBscGZjIG1ib3ggY29tbWFuZC4KICAqCkBAIC0xOTQ2LDEzICsyMDA2LDE0IEBACiAJYmZfc2V0KGxwZmNfcmVnX2ZjZmlfcnFfaWQxLCByZWdfZmNmaSwgUkVHX0ZDRl9JTlZBTElEX1FJRCk7CiAJYmZfc2V0KGxwZmNfcmVnX2ZjZmlfcnFfaWQyLCByZWdfZmNmaSwgUkVHX0ZDRl9JTlZBTElEX1FJRCk7CiAJYmZfc2V0KGxwZmNfcmVnX2ZjZmlfcnFfaWQzLCByZWdfZmNmaSwgUkVHX0ZDRl9JTlZBTElEX1FJRCk7Ci0JYmZfc2V0KGxwZmNfcmVnX2ZjZmlfaW5mb19pbmRleCwgcmVnX2ZjZmksIHBoYmEtPmZjZi5mY2ZfaW5keCk7CisJYmZfc2V0KGxwZmNfcmVnX2ZjZmlfaW5mb19pbmRleCwgcmVnX2ZjZmksCisJICAgICAgIHBoYmEtPmZjZi5jdXJyZW50X3JlYy5mY2ZfaW5keCk7CiAJLyogcmVnX2ZjZiBhZGRyIG1vZGUgaXMgYml0IHdpc2UgaW52ZXJ0ZWQgdmFsdWUgb2YgZmNmIGFkZHJfbW9kZSAqLwotCWJmX3NldChscGZjX3JlZ19mY2ZpX21hbSwgcmVnX2ZjZmksCi0JCSh+cGhiYS0+ZmNmLmFkZHJfbW9kZSkgJiAweDMpOwotCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfVkFMSURfVkxBTikgeworCWJmX3NldChscGZjX3JlZ19mY2ZpX21hbSwgcmVnX2ZjZmksICh+cGhiYS0+ZmNmLmFkZHJfbW9kZSkgJiAweDMpOworCWlmIChwaGJhLT5mY2YuY3VycmVudF9yZWMudmxhbl9pZCAhPSAweEZGRkYpIHsKIAkJYmZfc2V0KGxwZmNfcmVnX2ZjZmlfdnYsIHJlZ19mY2ZpLCAxKTsKLQkJYmZfc2V0KGxwZmNfcmVnX2ZjZmlfdmxhbl90YWcsIHJlZ19mY2ZpLCBwaGJhLT5mY2Yudmxhbl9pZCk7CisJCWJmX3NldChscGZjX3JlZ19mY2ZpX3ZsYW5fdGFnLCByZWdfZmNmaSwKKwkJICAgICAgIHBoYmEtPmZjZi5jdXJyZW50X3JlYy52bGFuX2lkKTsKIAl9CiB9CiAKQEAgLTE5OTIsMyArMjA1Myw0MSBAQAogCWJmX3NldChscGZjX3Jlc3VtZV9ycGlfaWksIHJlc3VtZV9ycGksIFJFU1VNRV9JTkRFWF9SUEkpOwogCXJlc3VtZV9ycGktPmV2ZW50X3RhZyA9IG5kbHAtPnBoYmEtPmZjX2V2ZW50VGFnOwogfQorCisvKioKKyAqIGxwZmNfc3VwcG9ydGVkX3BhZ2VzIC0gSW5pdGlhbGl6ZSB0aGUgUE9SVF9DQVBBQklMSVRJRVMgc3VwcG9ydGVkIHBhZ2VzCisgKiAgICAgICAgICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZC4KKyAqIEBtYm94OiBwb2ludGVyIHRvIGxwZmMgbWJveCBjb21tYW5kIHRvIGluaXRpYWxpemUuCisgKgorICogVGhlIFBPUlRfQ0FQQUJJTElUSUVTIHN1cHBvcnRlZCBwYWdlcyBtYWlsYm94IGNvbW1hbmQgaXMgaXNzdWVkIHRvCisgKiByZXRyaWV2ZSB0aGUgcGFydGljdWxhciBmZWF0dXJlIHBhZ2VzIHN1cHBvcnRlZCBieSB0aGUgcG9ydC4KKyAqKi8KK3ZvaWQKK2xwZmNfc3VwcG9ydGVkX3BhZ2VzKHN0cnVjdCBscGZjTWJveHEgKm1ib3gpCit7CisJc3RydWN0IGxwZmNfbWJ4X3N1cHBfcGFnZXMgKnN1cHBfcGFnZXM7CisKKwltZW1zZXQobWJveCwgMCwgc2l6ZW9mKCptYm94KSk7CisJc3VwcF9wYWdlcyA9ICZtYm94LT51Lm1xZS51bi5zdXBwX3BhZ2VzOworCWJmX3NldChscGZjX21xZV9jb21tYW5kLCAmbWJveC0+dS5tcWUsIE1CWF9QT1JUX0NBUEFCSUxJVElFUyk7CisJYmZfc2V0KGNwbiwgc3VwcF9wYWdlcywgTFBGQ19TVVBQX1BBR0VTKTsKK30KKworLyoqCisgKiBscGZjX3NsaTRfcGFyYW1zIC0gSW5pdGlhbGl6ZSB0aGUgUE9SVF9DQVBBQklMSVRJRVMgU0xJNCBQYXJhbXMKKyAqICAgICAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQuCisgKiBAbWJveDogcG9pbnRlciB0byBscGZjIG1ib3ggY29tbWFuZCB0byBpbml0aWFsaXplLgorICoKKyAqIFRoZSBQT1JUX0NBUEFCSUxJVElFUyBTTEk0IHBhcmFtZXRlcnMgbWFpbGJveCBjb21tYW5kIGlzIGlzc3VlZCB0bworICogcmV0cmlldmUgdGhlIHBhcnRpY3VsYXIgU0xJNCBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIHBvcnQuCisgKiovCit2b2lkCitscGZjX3NsaTRfcGFyYW1zKHN0cnVjdCBscGZjTWJveHEgKm1ib3gpCit7CisJc3RydWN0IGxwZmNfbWJ4X3NsaTRfcGFyYW1zICpzbGk0X3BhcmFtczsKKworCW1lbXNldChtYm94LCAwLCBzaXplb2YoKm1ib3gpKTsKKwlzbGk0X3BhcmFtcyA9ICZtYm94LT51Lm1xZS51bi5zbGk0X3BhcmFtczsKKwliZl9zZXQobHBmY19tcWVfY29tbWFuZCwgJm1ib3gtPnUubXFlLCBNQlhfUE9SVF9DQVBBQklMSVRJRVMpOworCWJmX3NldChjcG4sIHNsaTRfcGFyYW1zLCBMUEZDX1NMSTRfUEFSQU1FVEVSUyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25sLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25sLmgKaW5kZXggZDY1NWVkMy4uZjNjZmJlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ubC5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbmwuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMTc3LDIzICsxNzcsMyBAQAogCXVpbnQzMl90IGRhdGE7CiB9OwogCi0vKiBic2cgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX1NFVF9DVF9FVkVOVAkxCi0jZGVmaW5lIExQRkNfQlNHX1ZFTkRPUl9HRVRfQ1RfRVZFTlQJMgotCi1zdHJ1Y3Qgc2V0X2N0X2V2ZW50IHsKLQl1aW50MzJfdCBjb21tYW5kOwotCXVpbnQzMl90IGV2X3JlcV9pZDsKLQl1aW50MzJfdCBldl9yZWdfaWQ7Ci19OwotCi1zdHJ1Y3QgZ2V0X2N0X2V2ZW50IHsKLQl1aW50MzJfdCBjb21tYW5kOwotCXVpbnQzMl90IGV2X3JlZ19pZDsKLQl1aW50MzJfdCBldl9yZXFfaWQ7Ci19OwotCi1zdHJ1Y3QgZ2V0X2N0X2V2ZW50X3JlcGx5IHsKLQl1aW50MzJfdCBpbW1lZF9kYXRhOwotCXVpbnQzMl90IHR5cGU7Ci19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKaW5kZXggMmVkNmFmMS4uZDIwYWU2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCkBAIC02Miw3ICs2Miw3IEBACiAKIGludAogbHBmY19jaGVja19zcGFybShzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLAotCQkgc3RydWN0IHNlcnZfcGFybSAqIHNwLCB1aW50MzJfdCBjbGFzcykKKwkJIHN0cnVjdCBzZXJ2X3Bhcm0gKnNwLCB1aW50MzJfdCBjbGFzcywgaW50IGZsb2dpKQogewogCXZvbGF0aWxlIHN0cnVjdCBzZXJ2X3Bhcm0gKmhzcCA9ICZ2cG9ydC0+ZmNfc3BhcmFtOwogCXVpbnQxNl90IGhzcF92YWx1ZSwgc3NwX3ZhbHVlID0gMDsKQEAgLTc1LDQ5ICs3NSw1NiBAQAogCSAqIGNvcnJlY3RpbmcgdGhlIGJ5dGUgdmFsdWVzLgogCSAqLwogCWlmIChzcC0+Y2xzMS5jbGFzc1ZhbGlkKSB7Ci0JCWhzcF92YWx1ZSA9IChoc3AtPmNsczEucmN2RGF0YVNpemVNc2IgPDwgOCkgfAotCQkJCWhzcC0+Y2xzMS5yY3ZEYXRhU2l6ZUxzYjsKLQkJc3NwX3ZhbHVlID0gKHNwLT5jbHMxLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKLQkJCQlzcC0+Y2xzMS5yY3ZEYXRhU2l6ZUxzYjsKLQkJaWYgKCFzc3BfdmFsdWUpCi0JCQlnb3RvIGJhZF9zZXJ2aWNlX3BhcmFtOwotCQlpZiAoc3NwX3ZhbHVlID4gaHNwX3ZhbHVlKSB7Ci0JCQlzcC0+Y2xzMS5yY3ZEYXRhU2l6ZUxzYiA9IGhzcC0+Y2xzMS5yY3ZEYXRhU2l6ZUxzYjsKLQkJCXNwLT5jbHMxLnJjdkRhdGFTaXplTXNiID0gaHNwLT5jbHMxLnJjdkRhdGFTaXplTXNiOworCQlpZiAoIWZsb2dpKSB7CisJCQloc3BfdmFsdWUgPSAoKGhzcC0+Y2xzMS5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8CisJCQkJICAgICBoc3AtPmNsczEucmN2RGF0YVNpemVMc2IpOworCQkJc3NwX3ZhbHVlID0gKChzcC0+Y2xzMS5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8CisJCQkJICAgICBzcC0+Y2xzMS5yY3ZEYXRhU2l6ZUxzYik7CisJCQlpZiAoIXNzcF92YWx1ZSkKKwkJCQlnb3RvIGJhZF9zZXJ2aWNlX3BhcmFtOworCQkJaWYgKHNzcF92YWx1ZSA+IGhzcF92YWx1ZSkgeworCQkJCXNwLT5jbHMxLnJjdkRhdGFTaXplTHNiID0KKwkJCQkJaHNwLT5jbHMxLnJjdkRhdGFTaXplTHNiOworCQkJCXNwLT5jbHMxLnJjdkRhdGFTaXplTXNiID0KKwkJCQkJaHNwLT5jbHMxLnJjdkRhdGFTaXplTXNiOworCQkJfQogCQl9Ci0JfSBlbHNlIGlmIChjbGFzcyA9PSBDTEFTUzEpIHsKKwl9IGVsc2UgaWYgKGNsYXNzID09IENMQVNTMSkKIAkJZ290byBiYWRfc2VydmljZV9wYXJhbTsKLQl9Ci0KIAlpZiAoc3AtPmNsczIuY2xhc3NWYWxpZCkgewotCQloc3BfdmFsdWUgPSAoaHNwLT5jbHMyLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKLQkJCQloc3AtPmNsczIucmN2RGF0YVNpemVMc2I7Ci0JCXNzcF92YWx1ZSA9IChzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8Ci0JCQkJc3AtPmNsczIucmN2RGF0YVNpemVMc2I7Ci0JCWlmICghc3NwX3ZhbHVlKQotCQkJZ290byBiYWRfc2VydmljZV9wYXJhbTsKLQkJaWYgKHNzcF92YWx1ZSA+IGhzcF92YWx1ZSkgewotCQkJc3AtPmNsczIucmN2RGF0YVNpemVMc2IgPSBoc3AtPmNsczIucmN2RGF0YVNpemVMc2I7Ci0JCQlzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYiA9IGhzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYjsKKwkJaWYgKCFmbG9naSkgeworCQkJaHNwX3ZhbHVlID0gKChoc3AtPmNsczIucmN2RGF0YVNpemVNc2IgPDwgOCkgfAorCQkJCSAgICAgaHNwLT5jbHMyLnJjdkRhdGFTaXplTHNiKTsKKwkJCXNzcF92YWx1ZSA9ICgoc3AtPmNsczIucmN2RGF0YVNpemVNc2IgPDwgOCkgfAorCQkJCSAgICAgc3AtPmNsczIucmN2RGF0YVNpemVMc2IpOworCQkJaWYgKCFzc3BfdmFsdWUpCisJCQkJZ290byBiYWRfc2VydmljZV9wYXJhbTsKKwkJCWlmIChzc3BfdmFsdWUgPiBoc3BfdmFsdWUpIHsKKwkJCQlzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYiA9CisJCQkJCWhzcC0+Y2xzMi5yY3ZEYXRhU2l6ZUxzYjsKKwkJCQlzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYiA9CisJCQkJCWhzcC0+Y2xzMi5yY3ZEYXRhU2l6ZU1zYjsKKwkJCX0KIAkJfQotCX0gZWxzZSBpZiAoY2xhc3MgPT0gQ0xBU1MyKSB7CisJfSBlbHNlIGlmIChjbGFzcyA9PSBDTEFTUzIpCiAJCWdvdG8gYmFkX3NlcnZpY2VfcGFyYW07Ci0JfQotCiAJaWYgKHNwLT5jbHMzLmNsYXNzVmFsaWQpIHsKLQkJaHNwX3ZhbHVlID0gKGhzcC0+Y2xzMy5yY3ZEYXRhU2l6ZU1zYiA8PCA4KSB8Ci0JCQkJaHNwLT5jbHMzLnJjdkRhdGFTaXplTHNiOwotCQlzc3BfdmFsdWUgPSAoc3AtPmNsczMucmN2RGF0YVNpemVNc2IgPDwgOCkgfAotCQkJCXNwLT5jbHMzLnJjdkRhdGFTaXplTHNiOwotCQlpZiAoIXNzcF92YWx1ZSkKLQkJCWdvdG8gYmFkX3NlcnZpY2VfcGFyYW07Ci0JCWlmIChzc3BfdmFsdWUgPiBoc3BfdmFsdWUpIHsKLQkJCXNwLT5jbHMzLnJjdkRhdGFTaXplTHNiID0gaHNwLT5jbHMzLnJjdkRhdGFTaXplTHNiOwotCQkJc3AtPmNsczMucmN2RGF0YVNpemVNc2IgPSBoc3AtPmNsczMucmN2RGF0YVNpemVNc2I7CisJCWlmICghZmxvZ2kpIHsKKwkJCWhzcF92YWx1ZSA9ICgoaHNwLT5jbHMzLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKKwkJCQkgICAgIGhzcC0+Y2xzMy5yY3ZEYXRhU2l6ZUxzYik7CisJCQlzc3BfdmFsdWUgPSAoKHNwLT5jbHMzLnJjdkRhdGFTaXplTXNiIDw8IDgpIHwKKwkJCQkgICAgIHNwLT5jbHMzLnJjdkRhdGFTaXplTHNiKTsKKwkJCWlmICghc3NwX3ZhbHVlKQorCQkJCWdvdG8gYmFkX3NlcnZpY2VfcGFyYW07CisJCQlpZiAoc3NwX3ZhbHVlID4gaHNwX3ZhbHVlKSB7CisJCQkJc3AtPmNsczMucmN2RGF0YVNpemVMc2IgPQorCQkJCQloc3AtPmNsczMucmN2RGF0YVNpemVMc2I7CisJCQkJc3AtPmNsczMucmN2RGF0YVNpemVNc2IgPQorCQkJCQloc3AtPmNsczMucmN2RGF0YVNpemVNc2I7CisJCQl9CiAJCX0KLQl9IGVsc2UgaWYgKGNsYXNzID09IENMQVNTMykgeworCX0gZWxzZSBpZiAoY2xhc3MgPT0gQ0xBU1MzKQogCQlnb3RvIGJhZF9zZXJ2aWNlX3BhcmFtOwotCX0KIAogCS8qCiAJICogUHJlc2VydmUgdGhlIHVwcGVyIGZvdXIgYml0cyBvZiB0aGUgTVNCIGZyb20gdGhlIFBMT0dJIHJlc3BvbnNlLgpAQCAtMjQ3LDcgKzI1NCw3IEBACiAJaW50IHJjOwogCiAJbWVtc2V0KCZzdGF0LCAwLCBzaXplb2YgKHN0cnVjdCBsc19yanQpKTsKLQlpZiAodnBvcnQtPnBvcnRfc3RhdGUgPD0gTFBGQ19GTE9HSSkgeworCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSA8PSBMUEZDX0ZESVNDKSB7CiAJCS8qIEJlZm9yZSByZXNwb25kaW5nIHRvIFBMT0dJLCBjaGVjayBmb3IgcHQycHQgbW9kZS4KIAkJICogSWYgd2UgYXJlIHB0MnB0LCB3aXRoIGFuIG91dHN0YW5kaW5nIEZMT0dJLCBhYm9ydAogCQkgKiB0aGUgRkxPR0kgYW5kIHJlc2VuZCBpdCBmaXJzdC4KQEAgLTI5NSw3ICszMDIsNyBAQAogCQkJTlVMTCk7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoKGxwZmNfY2hlY2tfc3Bhcm0odnBvcnQsIG5kbHAsIHNwLCBDTEFTUzMpID09IDApKSB7CisJaWYgKChscGZjX2NoZWNrX3NwYXJtKHZwb3J0LCBuZGxwLCBzcCwgQ0xBU1MzLCAwKSA9PSAwKSkgewogCQkvKiBSZWplY3QgdGhpcyByZXF1ZXN0IGJlY2F1c2UgaW52YWxpZCBwYXJhbWV0ZXJzICovCiAJCXN0YXQudW4uYi5sc1JqdFJzbkNvZGUgPSBMU1JKVF9VTkFCTEVfVFBDOwogCQlzdGF0LnVuLmIubHNSanRSc25Db2RlRXhwID0gTFNFWFBfU1BBUk1fT1BUSU9OUzsKQEAgLTgzMSw3ICs4MzgsNyBAQAogCQkJCSAiMDE0MiBQTE9HSSBSU1A6IEludmFsaWQgV1dOLlxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQlpZiAoIWxwZmNfY2hlY2tfc3Bhcm0odnBvcnQsIG5kbHAsIHNwLCBDTEFTUzMpKQorCWlmICghbHBmY19jaGVja19zcGFybSh2cG9ydCwgbmRscCwgc3AsIENMQVNTMywgMCkpCiAJCWdvdG8gb3V0OwogCS8qIFBMT0dJIGNoa3Bhcm0gT0sgKi8KIAlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0lORk8sIExPR19FTFMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCmluZGV4IGEyNDY0MTAuLjdmMjFiNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCkBAIC02MjYsNiArNjI2LDcgQEAKIAkJJnBoYmEtPnNsaTRfaGJhLmxwZmNfYWJ0c19zY3NpX2J1Zl9saXN0LCBsaXN0KSB7CiAJCWlmIChwc2ItPmN1cl9pb2NicS5zbGk0X3hyaXRhZyA9PSB4cmkpIHsKIAkJCWxpc3RfZGVsKCZwc2ItPmxpc3QpOworCQkJcHNiLT5leGNoX2J1c3kgPSAwOwogCQkJcHNiLT5zdGF0dXMgPSBJT1NUQVRfU1VDQ0VTUzsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoCiAJCQkJJnBoYmEtPnNsaTRfaGJhLmFidHNfc2NzaV9idWZfbGlzdF9sb2NrLApAQCAtNjg4LDExICs2ODksMTIgQEAKIAkJCQkJIGxpc3QpOwogCQkJaWYgKHN0YXR1cykgewogCQkJCS8qIFB1dCB0aGlzIGJhY2sgb24gdGhlIGFib3J0IHNjc2kgbGlzdCAqLwotCQkJCXBzYi0+c3RhdHVzID0gSU9TVEFUX0xPQ0FMX1JFSkVDVDsKLQkJCQlwc2ItPnJlc3VsdCA9IElPRVJSX0FCT1JUX1JFUVVFU1RFRDsKKwkJCQlwc2ItPmV4Y2hfYnVzeSA9IDE7CiAJCQkJcmMrKzsKLQkJCX0gZWxzZQorCQkJfSBlbHNlIHsKKwkJCQlwc2ItPmV4Y2hfYnVzeSA9IDA7CiAJCQkJcHNiLT5zdGF0dXMgPSBJT1NUQVRfU1VDQ0VTUzsKKwkJCX0KIAkJCS8qIFB1dCBpdCBiYWNrIGludG8gdGhlIFNDU0kgYnVmZmVyIGxpc3QgKi8KIAkJCWxwZmNfcmVsZWFzZV9zY3NpX2J1Zl9zNChwaGJhLCBwc2IpOwogCQl9CkBAIC03OTYsMTkgKzc5OCwxNyBAQAogCQkgKi8KIAkJc2dsLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIocHV0UGFkZHJIaWdoKHBkbWFfcGh5c19mY3BfY21kKSk7CiAJCXNnbC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKHB1dFBhZGRyTG93KHBkbWFfcGh5c19mY3BfY21kKSk7Ci0JCWJmX3NldChscGZjX3NsaTRfc2dlX2xlbiwgc2dsLCBzaXplb2Yoc3RydWN0IGZjcF9jbW5kKSk7CiAJCWJmX3NldChscGZjX3NsaTRfc2dlX2xhc3QsIHNnbCwgMCk7CiAJCXNnbC0+d29yZDIgPSBjcHVfdG9fbGUzMihzZ2wtPndvcmQyKTsKLQkJc2dsLT53b3JkMyA9IGNwdV90b19sZTMyKHNnbC0+d29yZDMpOworCQlzZ2wtPnNnZV9sZW4gPSBjcHVfdG9fbGUzMihzaXplb2Yoc3RydWN0IGZjcF9jbW5kKSk7CiAJCXNnbCsrOwogCiAJCS8qIFNldHVwIHRoZSBwaHlzaWNhbCByZWdpb24gZm9yIHRoZSBGQ1AgUlNQICovCiAJCXNnbC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKHB1dFBhZGRySGlnaChwZG1hX3BoeXNfZmNwX3JzcCkpOwogCQlzZ2wtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihwdXRQYWRkckxvdyhwZG1hX3BoeXNfZmNwX3JzcCkpOwotCQliZl9zZXQobHBmY19zbGk0X3NnZV9sZW4sIHNnbCwgc2l6ZW9mKHN0cnVjdCBmY3BfcnNwKSk7CiAJCWJmX3NldChscGZjX3NsaTRfc2dlX2xhc3QsIHNnbCwgMSk7CiAJCXNnbC0+d29yZDIgPSBjcHVfdG9fbGUzMihzZ2wtPndvcmQyKTsKLQkJc2dsLT53b3JkMyA9IGNwdV90b19sZTMyKHNnbC0+d29yZDMpOworCQlzZ2wtPnNnZV9sZW4gPSBjcHVfdG9fbGUzMihzaXplb2Yoc3RydWN0IGZjcF9yc3ApKTsKIAogCQkvKgogCQkgKiBTaW5jZSB0aGUgSU9DQiBmb3IgdGhlIEZDUCBJL08gaXMgYnVpbHQgaW50byB0aGlzCkBAIC04MzksMTEgKzgzOSwxMiBAQAogCQkJCQkJcHNiLT5jdXJfaW9jYnEuc2xpNF94cml0YWcpOwogCQkJaWYgKHN0YXR1cykgewogCQkJCS8qIFB1dCB0aGlzIGJhY2sgb24gdGhlIGFib3J0IHNjc2kgbGlzdCAqLwotCQkJCXBzYi0+c3RhdHVzID0gSU9TVEFUX0xPQ0FMX1JFSkVDVDsKLQkJCQlwc2ItPnJlc3VsdCA9IElPRVJSX0FCT1JUX1JFUVVFU1RFRDsKKwkJCQlwc2ItPmV4Y2hfYnVzeSA9IDE7CiAJCQkJcmMrKzsKLQkJCX0gZWxzZQorCQkJfSBlbHNlIHsKKwkJCQlwc2ItPmV4Y2hfYnVzeSA9IDA7CiAJCQkJcHNiLT5zdGF0dXMgPSBJT1NUQVRfU1VDQ0VTUzsKKwkJCX0KIAkJCS8qIFB1dCBpdCBiYWNrIGludG8gdGhlIFNDU0kgYnVmZmVyIGxpc3QgKi8KIAkJCWxwZmNfcmVsZWFzZV9zY3NpX2J1Zl9zNChwaGJhLCBwc2IpOwogCQkJYnJlYWs7CkBAIC04NTcsMTEgKzg1OCwxMiBAQAogCQkJCSBsaXN0KTsKIAkJCWlmIChzdGF0dXMpIHsKIAkJCQkvKiBQdXQgdGhpcyBiYWNrIG9uIHRoZSBhYm9ydCBzY3NpIGxpc3QgKi8KLQkJCQlwc2ItPnN0YXR1cyA9IElPU1RBVF9MT0NBTF9SRUpFQ1Q7Ci0JCQkJcHNiLT5yZXN1bHQgPSBJT0VSUl9BQk9SVF9SRVFVRVNURUQ7CisJCQkJcHNiLT5leGNoX2J1c3kgPSAxOwogCQkJCXJjKys7Ci0JCQl9IGVsc2UKKwkJCX0gZWxzZSB7CisJCQkJcHNiLT5leGNoX2J1c3kgPSAwOwogCQkJCXBzYi0+c3RhdHVzID0gSU9TVEFUX1NVQ0NFU1M7CisJCQl9CiAJCQkvKiBQdXQgaXQgYmFjayBpbnRvIHRoZSBTQ1NJIGJ1ZmZlciBsaXN0ICovCiAJCQlscGZjX3JlbGVhc2Vfc2NzaV9idWZfczQocGhiYSwgcHNiKTsKIAkJfQpAQCAtOTUxLDggKzk1Myw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBpZmxhZyA9IDA7CiAKLQlpZiAocHNiLT5zdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVAotCQkmJiBwc2ItPnJlc3VsdCA9PSBJT0VSUl9BQk9SVF9SRVFVRVNURUQpIHsKKwlpZiAocHNiLT5leGNoX2J1c3kpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPnNsaTRfaGJhLmFidHNfc2NzaV9idWZfbGlzdF9sb2NrLAogCQkJCQlpZmxhZyk7CiAJCXBzYi0+cENtZCA9IE5VTEw7CkBAIC0xODY5LDcgKzE4NzAsNiBAQAogCQlzY3NpX2Zvcl9lYWNoX3NnKHNjc2lfY21uZCwgc2dlbCwgbnNlZywgbnVtX2JkZSkgewogCQkJcGh5c2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZ2VsKTsKIAkJCWRtYV9sZW4gPSBzZ19kbWFfbGVuKHNnZWwpOwotCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGVuLCBzZ2wsIHNnX2RtYV9sZW4oc2dlbCkpOwogCQkJc2dsLT5hZGRyX2xvID0gY3B1X3RvX2xlMzIocHV0UGFkZHJMb3cocGh5c2FkZHIpKTsKIAkJCXNnbC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKHB1dFBhZGRySGlnaChwaHlzYWRkcikpOwogCQkJaWYgKChudW1fYmRlICsgMSkgPT0gbnNlZykKQEAgLTE4NzgsNyArMTg3OCw3IEBACiAJCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGFzdCwgc2dsLCAwKTsKIAkJCWJmX3NldChscGZjX3NsaTRfc2dlX29mZnNldCwgc2dsLCBkbWFfb2Zmc2V0KTsKIAkJCXNnbC0+d29yZDIgPSBjcHVfdG9fbGUzMihzZ2wtPndvcmQyKTsKLQkJCXNnbC0+d29yZDMgPSBjcHVfdG9fbGUzMihzZ2wtPndvcmQzKTsKKwkJCXNnbC0+c2dlX2xlbiA9IGNwdV90b19sZTMyKGRtYV9sZW4pOwogCQkJZG1hX29mZnNldCArPSBkbWFfbGVuOwogCQkJc2dsKys7CiAJCX0KQEAgLTIyMjEsNiArMjIyMSw5IEBACiAKIAlscGZjX2NtZC0+cmVzdWx0ID0gcElvY2JPdXQtPmlvY2IudW4udWxwV29yZFs0XTsKIAlscGZjX2NtZC0+c3RhdHVzID0gcElvY2JPdXQtPmlvY2IudWxwU3RhdHVzOworCS8qIHBpY2sgdXAgU0xJNCBleGhhbmdlIGJ1c3kgc3RhdHVzIGZyb20gSEJBICovCisJbHBmY19jbWQtPmV4Y2hfYnVzeSA9IHBJb2NiT3V0LT5pb2NiX2ZsYWcgJiBMUEZDX0VYQ0hBTkdFX0JVU1k7CisKIAlpZiAocG5vZGUgJiYgTkxQX0NIS19OT0RFX0FDVChwbm9kZSkpCiAJCWF0b21pY19kZWMoJnBub2RlLT5jbWRfcGVuZGluZyk7CiAKQEAgLTI2MzcsNiArMjY0MCw3IEBACiAJfQogCXBoYmEtPmxwZmNfZ2V0X3Njc2lfYnVmID0gbHBmY19nZXRfc2NzaV9idWY7CiAJcGhiYS0+bHBmY19yYW1wZG93bl9xdWV1ZV9kZXB0aCA9IGxwZmNfcmFtcGRvd25fcXVldWVfZGVwdGg7CisJcGhiYS0+bHBmY19zY3NpX2NtZF9pb2NiX2NtcGwgPSBscGZjX3Njc2lfY21kX2lvY2JfY21wbDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjY5NSw2ICsyNjk5LDEzIEBACiAJCQkJICIgcG9ydCAlcyIsCiAJCQkJIHBoYmEtPlBvcnQpOwogCQl9CisJCWxlbiA9IHN0cmxlbihscGZjaW5mb2J1Zik7CisJCWlmIChwaGJhLT5zbGk0X2hiYS5saW5rX3N0YXRlLmxvZ2ljYWxfc3BlZWQpIHsKKwkJCXNucHJpbnRmKGxwZmNpbmZvYnVmICsgbGVuLAorCQkJCSAzODQtbGVuLAorCQkJCSAiIExvZ2ljYWwgTGluayBTcGVlZDogJWQgTWJwcyIsCisJCQkJIHBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUubG9naWNhbF9zcGVlZCAqIDEwKTsKKwkJfQogCX0KIAlyZXR1cm4gbHBmY2luZm9idWY7CiB9CkBAIC0yOTkwLDYgKzMwMDEsNyBAQAogCiAJLyogQUJUUyBXUUUgbXVzdCBnbyB0byB0aGUgc2FtZSBXUSBhcyB0aGUgV1FFIHRvIGJlIGFib3J0ZWQgKi8KIAlhYnRzaW9jYi0+ZmNwX3dxaWR4ID0gaW9jYi0+ZmNwX3dxaWR4OworCWFidHNpb2NiLT5pb2NiX2ZsYWcgfD0gTFBGQ19VU0VfRkNQV1FJRFg7CiAKIAlpZiAobHBmY19pc19saW5rX3VwKHBoYmEpKQogCQlpY21kLT51bHBDb21tYW5kID0gQ01EX0FCT1JUX1hSSV9DTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmgKaW5kZXggNjVkZmM4Yi4uNTkzMjI3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmgKQEAgLTExOCw2ICsxMTgsNyBAQAogCiAJdWludDMyX3QgdGltZW91dDsKIAorCXVpbnQxNl90IGV4Y2hfYnVzeTsgICAgIC8qIFNMSTQgaGJhIHJlcG9ydGVkIFhCIG9uIGNvbXBsZXRlIFdDUUUgKi8KIAl1aW50MTZfdCBzdGF0dXM7CS8qIEZyb20gSU9DQiBXb3JkIDctIHVscFN0YXR1cyAqLwogCXVpbnQzMl90IHJlc3VsdDsJLyogRnJvbSBJT0NCIFdvcmQgNC4gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKaW5kZXggNTg5NTQ5Yi4uMzVlM2I5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCkBAIC01ODAsMTAgKzU4MCw3IEBACiAJZWxzZQogCQlzZ2xxID0gX19scGZjX2NsZWFyX2FjdGl2ZV9zZ2xxKHBoYmEsIGlvY2JxLT5zbGk0X3hyaXRhZyk7CiAJaWYgKHNnbHEpICB7Ci0JCWlmIChpb2NicS0+aW9jYl9mbGFnICYgTFBGQ19EUklWRVJfQUJPUlRFRAotCQkJJiYgKChpb2NicS0+aW9jYi51bHBTdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkKLQkJCSYmIChpb2NicS0+aW9jYi51bi51bHBXb3JkWzRdCi0JCQkJPT0gSU9FUlJfQUJPUlRfUkVRVUVTVEVEKSkpIHsKKwkJaWYgKGlvY2JxLT5pb2NiX2ZsYWcgJiBMUEZDX0VYQ0hBTkdFX0JVU1kpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5zbGk0X2hiYS5hYnRzX3NnbF9saXN0X2xvY2ssCiAJCQkJCWlmbGFnKTsKIAkJCWxpc3RfYWRkKCZzZ2xxLT5saXN0LApAQCAtNzY0LDEwICs3NjEsNiBAQAogCWNhc2UgRFNTQ01EX0lXUklURTY0X0NYOgogCWNhc2UgRFNTQ01EX0lSRUFENjRfQ1I6CiAJY2FzZSBEU1NDTURfSVJFQUQ2NF9DWDoKLQljYXNlIERTU0NNRF9JTlZBTElEQVRFX0RFSzoKLQljYXNlIERTU0NNRF9TRVRfS0VLOgotCWNhc2UgRFNTQ01EX0dFVF9LRUtfSUQ6Ci0JY2FzZSBEU1NDTURfR0VOX1hGRVI6CiAJCXR5cGUgPSBMUEZDX1NPTF9JT0NCOwogCQlicmVhazsKIAljYXNlIENNRF9BQk9SVF9YUklfQ046CkBAIC0xNzE3LDYgKzE3MTAsNyBAQAogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqbXA7CiAJdWludDE2X3QgcnBpLCB2cGk7CiAJaW50IHJjOworCXN0cnVjdCBscGZjX3Zwb3J0ICAqdnBvcnQgPSBwbWItPnZwb3J0OwogCiAJbXAgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIChwbWItPmNvbnRleHQxKTsKIApAQCAtMTc0NSw2ICsxNzM5LDE4IEBACiAJCQlyZXR1cm47CiAJfQogCisJLyogVW5yZWcgVlBJLCBpZiB0aGUgUkVHX1ZQSSBzdWNjZWVkIGFmdGVyIFZMaW5rIGZhaWx1cmUgKi8KKwlpZiAoKHBtYi0+dS5tYi5tYnhDb21tYW5kID09IE1CWF9SRUdfVlBJKSAmJgorCQkhKHBoYmEtPnBwb3J0LT5sb2FkX2ZsYWcgJiBGQ19VTkxPQURJTkcpICYmCisJCSFwbWItPnUubWIubWJ4U3RhdHVzKSB7CisJCWxwZmNfdW5yZWdfdnBpKHBoYmEsIHBtYi0+dS5tYi51bi52YXJSZWdWcGkudnBpLCBwbWIpOworCQlwbWItPnZwb3J0ID0gdnBvcnQ7CisJCXBtYi0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKKwkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgTUJYX05PV0FJVCk7CisJCWlmIChyYyAhPSBNQlhfTk9UX0ZJTklTSEVEKQorCQkJcmV0dXJuOworCX0KKwogCWlmIChiZl9nZXQobHBmY19tcWVfY29tbWFuZCwgJnBtYi0+dS5tcWUpID09IE1CWF9TTEk0X0NPTkZJRykKIAkJbHBmY19zbGk0X21ib3hfY21kX2ZyZWUocGhiYSwgcG1iKTsKIAllbHNlCkBAIC0yMjI4LDkgKzIyMzQsMTUgQEAKIAkJCSAqIEFsbCBvdGhlciBhcmUgcGFzc2VkIHRvIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrLgogCQkJICovCiAJCQlpZiAocHJpbmctPnJpbmdubyA9PSBMUEZDX0VMU19SSU5HKSB7Ci0JCQkJaWYgKGNtZGlvY2JwLT5pb2NiX2ZsYWcgJiBMUEZDX0RSSVZFUl9BQk9SVEVEKSB7CisJCQkJaWYgKChwaGJhLT5zbGlfcmV2IDwgTFBGQ19TTElfUkVWNCkgJiYKKwkJCQkgICAgKGNtZGlvY2JwLT5pb2NiX2ZsYWcgJgorCQkJCQkJCUxQRkNfRFJJVkVSX0FCT1JURUQpKSB7CisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLAorCQkJCQkJCSAgaWZsYWcpOwogCQkJCQljbWRpb2NicC0+aW9jYl9mbGFnICY9CiAJCQkJCQl+TFBGQ19EUklWRVJfQUJPUlRFRDsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywKKwkJCQkJCQkgICAgICAgaWZsYWcpOwogCQkJCQlzYXZlcS0+aW9jYi51bHBTdGF0dXMgPQogCQkJCQkJSU9TVEFUX0xPQ0FMX1JFSkVDVDsKIAkJCQkJc2F2ZXEtPmlvY2IudW4udWxwV29yZFs0XSA9CkBAIC0yMjQwLDcgKzIyNTIsNDcgQEAKIAkJCQkJICogb2YgRE1BaW5nIHBheWxvYWQsIHNvIGRvbid0IGZyZWUgZGF0YQogCQkJCQkgKiBidWZmZXIgdGlsbCBhZnRlciBhIGhiZWF0LgogCQkJCQkgKi8KKwkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssCisJCQkJCQkJICBpZmxhZyk7CiAJCQkJCXNhdmVxLT5pb2NiX2ZsYWcgfD0gTFBGQ19ERUxBWV9NRU1fRlJFRTsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywKKwkJCQkJCQkgICAgICAgaWZsYWcpOworCQkJCX0KKwkJCQlpZiAoKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkgJiYKKwkJCQkgICAgKHNhdmVxLT5pb2NiX2ZsYWcgJiBMUEZDX0VYQ0hBTkdFX0JVU1kpKSB7CisJCQkJCS8qIFNldCBjbWRpb2NiIGZsYWcgZm9yIHRoZSBleGNoYW5nZQorCQkJCQkgKiBidXN5IHNvIHNnbCAoeHJpKSB3aWxsIG5vdCBiZQorCQkJCQkgKiByZWxlYXNlZCB1bnRpbCB0aGUgYWJvcnQgeHJpIGlzCisJCQkJCSAqIHJlY2VpdmVkIGZyb20gaGJhLCBjbGVhciB0aGUKKwkJCQkJICogTFBGQ19EUklWRVJfQUJPUlRFRCBiaXQgaW4gY2FzZQorCQkJCQkgKiBpdCB3YXMgZHJpdmVyIGluaXRpYXRlZCBhYm9ydC4KKwkJCQkJICovCisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLAorCQkJCQkJCSAgaWZsYWcpOworCQkJCQljbWRpb2NicC0+aW9jYl9mbGFnICY9CisJCQkJCQl+TFBGQ19EUklWRVJfQUJPUlRFRDsKKwkJCQkJY21kaW9jYnAtPmlvY2JfZmxhZyB8PQorCQkJCQkJTFBGQ19FWENIQU5HRV9CVVNZOworCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLAorCQkJCQkJCSAgICAgICBpZmxhZyk7CisJCQkJCWNtZGlvY2JwLT5pb2NiLnVscFN0YXR1cyA9CisJCQkJCQlJT1NUQVRfTE9DQUxfUkVKRUNUOworCQkJCQljbWRpb2NicC0+aW9jYi51bi51bHBXb3JkWzRdID0KKwkJCQkJCUlPRVJSX0FCT1JUX1JFUVVFU1RFRDsKKwkJCQkJLyoKKwkJCQkJICogRm9yIFNMSTQsIGlyc2lvY2IgY29udGFpbnMgTk9fWFJJCisJCQkJCSAqIGluIHNsaV94cml0YWcsIGl0IHNoYWxsIG5vdCBhZmZlY3QKKwkJCQkJICogcmVsZWFzaW5nIHNnbCAoeHJpKSBwcm9jZXNzLgorCQkJCQkgKi8KKwkJCQkJc2F2ZXEtPmlvY2IudWxwU3RhdHVzID0KKwkJCQkJCUlPU1RBVF9MT0NBTF9SRUpFQ1Q7CisJCQkJCXNhdmVxLT5pb2NiLnVuLnVscFdvcmRbNF0gPQorCQkJCQkJSU9FUlJfU0xJX0FCT1JURUQ7CisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLAorCQkJCQkJCSAgaWZsYWcpOworCQkJCQlzYXZlcS0+aW9jYl9mbGFnIHw9IExQRkNfREVMQVlfTUVNX0ZSRUU7CisJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssCisJCQkJCQkJICAgICAgIGlmbGFnKTsKIAkJCQl9CiAJCQl9CiAJCQkoY21kaW9jYnAtPmlvY2JfY21wbCkgKHBoYmEsIGNtZGlvY2JwLCBzYXZlcSk7CkBAIC01Njg3LDE5ICs1NzM5LDE5IEBACiAKIAkJZm9yIChpID0gMDsgaSA8IG51bUJkZXM7IGkrKykgewogCQkJLyogU2hvdWxkIGFscmVhZHkgYmUgYnl0ZSBzd2FwcGVkLiAqLwotCQkJc2dsLT5hZGRyX2hpID0gIGJwbC0+YWRkckhpZ2g7Ci0JCQlzZ2wtPmFkZHJfbG8gPSAgYnBsLT5hZGRyTG93OwotCQkJLyogc3dhcCB0aGUgc2l6ZSBmaWVsZCBiYWNrIHRvIHRoZSBjcHUgc28gd2UKLQkJCSAqIGNhbiBhc3NpZ24gaXQgdG8gdGhlIHNnbC4KLQkJCSAqLwotCQkJYmRlLnR1cy53ICA9IGxlMzJfdG9fY3B1KGJwbC0+dHVzLncpOwotCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGVuLCBzZ2wsIGJkZS50dXMuZi5iZGVTaXplKTsKKwkJCXNnbC0+YWRkcl9oaSA9IGJwbC0+YWRkckhpZ2g7CisJCQlzZ2wtPmFkZHJfbG8gPSBicGwtPmFkZHJMb3c7CisKIAkJCWlmICgoaSsxKSA9PSBudW1CZGVzKQogCQkJCWJmX3NldChscGZjX3NsaTRfc2dlX2xhc3QsIHNnbCwgMSk7CiAJCQllbHNlCiAJCQkJYmZfc2V0KGxwZmNfc2xpNF9zZ2VfbGFzdCwgc2dsLCAwKTsKIAkJCXNnbC0+d29yZDIgPSBjcHVfdG9fbGUzMihzZ2wtPndvcmQyKTsKLQkJCXNnbC0+d29yZDMgPSBjcHVfdG9fbGUzMihzZ2wtPndvcmQzKTsKKwkJCS8qIHN3YXAgdGhlIHNpemUgZmllbGQgYmFjayB0byB0aGUgY3B1IHNvIHdlCisJCQkgKiBjYW4gYXNzaWduIGl0IHRvIHRoZSBzZ2wuCisJCQkgKi8KKwkJCWJkZS50dXMudyA9IGxlMzJfdG9fY3B1KGJwbC0+dHVzLncpOworCQkJc2dsLT5zZ2VfbGVuID0gY3B1X3RvX2xlMzIoYmRlLnR1cy5mLmJkZVNpemUpOwogCQkJYnBsKys7CiAJCQlzZ2wrKzsKIAkJfQpAQCAtNTcxMiwxMSArNTc2NCwxMCBAQAogCQkJCWNwdV90b19sZTMyKGljbWQtPnVuLmdlbnJlcTY0LmJkbC5hZGRySGlnaCk7CiAJCQlzZ2wtPmFkZHJfbG8gPQogCQkJCWNwdV90b19sZTMyKGljbWQtPnVuLmdlbnJlcTY0LmJkbC5hZGRyTG93KTsKLQkJCWJmX3NldChscGZjX3NsaTRfc2dlX2xlbiwgc2dsLAotCQkJCWljbWQtPnVuLmdlbnJlcTY0LmJkbC5iZGVTaXplKTsKIAkJCWJmX3NldChscGZjX3NsaTRfc2dlX2xhc3QsIHNnbCwgMSk7CiAJCQlzZ2wtPndvcmQyID0gY3B1X3RvX2xlMzIoc2dsLT53b3JkMik7Ci0JCQlzZ2wtPndvcmQzID0gY3B1X3RvX2xlMzIoc2dsLT53b3JkMyk7CisJCQlzZ2wtPnNnZV9sZW4gPQorCQkJCWNwdV90b19sZTMyKGljbWQtPnVuLmdlbnJlcTY0LmJkbC5iZGVTaXplKTsKIAl9CiAJcmV0dXJuIHNnbHEtPnNsaTRfeHJpdGFnOwogfQpAQCAtNTk4NywxMiArNjAzOCwxMCBAQAogCQllbHNlCiAJCQliZl9zZXQoYWJvcnRfY21kX2lhLCAmd3FlLT5hYm9ydF9jbWQsIDApOwogCQliZl9zZXQoYWJvcnRfY21kX2NyaXRlcmlhLCAmd3FlLT5hYm9ydF9jbWQsIFRfWFJJX1RBRyk7Ci0JCWFib3J0X3RhZyA9IGlvY2JxLT5pb2NiLnVuLmFjeHJpLmFib3J0SW9UYWc7CiAJCXdxZS0+d29yZHNbNV0gPSAwOwogCQliZl9zZXQobHBmY193cWVfZ2VuX2N0LCAmd3FlLT5nZW5lcmljLAogCQkJKChpb2NicS0+aW9jYi51bHBDdF9oIDw8IDEpIHwgaW9jYnEtPmlvY2IudWxwQ3RfbCkpOwogCQlhYm9ydF90YWcgPSBpb2NicS0+aW9jYi51bi5hY3hyaS5hYm9ydElvVGFnOwotCQl3cWUtPmdlbmVyaWMuYWJvcnRfdGFnID0gYWJvcnRfdGFnOwogCQkvKgogCQkgKiBUaGUgYWJvcnQgaGFuZGxlciB3aWxsIHNlbmQgdXMgQ01EX0FCT1JUX1hSSV9DTiBvcgogCQkgKiBDTURfQ0xPU0VfWFJJX0NOIGFuZCB0aGUgZncgb25seSBhY2NlcHRzIENNRF9BQk9SVF9YUklfQ1gKQEAgLTYxMjEsMTUgKzYxNzAsMTUgQEAKIAlpZiAobHBmY19zbGk0X2lvY2Iyd3FlKHBoYmEsIHBpb2NiLCAmd3FlKSkKIAkJcmV0dXJuIElPQ0JfRVJST1I7CiAKLQlpZiAocGlvY2ItPmlvY2JfZmxhZyAmICBMUEZDX0lPX0ZDUCkgeworCWlmICgocGlvY2ItPmlvY2JfZmxhZyAmIExQRkNfSU9fRkNQKSB8fAorCQkocGlvY2ItPmlvY2JfZmxhZyAmIExQRkNfVVNFX0ZDUFdRSURYKSkgewogCQkvKgogCQkgKiBGb3IgRkNQIGNvbW1hbmQgSU9DQiwgZ2V0IGEgbmV3IFdRIGluZGV4IHRvIGRpc3RyaWJ1dGUKIAkJICogV1FFIGFjcm9zcyB0aGUgV1Fzci4gT24gdGhlIG90aGVyIGhhbmQsIGZvciBhYm9ydCBJT0NCLAogCQkgKiBpdCBjYXJyaWVzIHRoZSBzYW1lIFdRIGluZGV4IHRvIHRoZSBvcmlnaW5hbCBjb21tYW5kCiAJCSAqIElPQ0IuCiAJCSAqLwotCQlpZiAoKHBpb2NiLT5pb2NiLnVscENvbW1hbmQgIT0gQ01EX0FCT1JUX1hSSV9DTikgJiYKLQkJICAgIChwaW9jYi0+aW9jYi51bHBDb21tYW5kICE9IENNRF9DTE9TRV9YUklfQ04pKQorCQlpZiAocGlvY2ItPmlvY2JfZmxhZyAmIExQRkNfSU9fRkNQKQogCQkJcGlvY2ItPmZjcF93cWlkeCA9IGxwZmNfc2xpNF9zY21kX3RvX3dxaWR4X2Rpc3RyKHBoYmEpOwogCQlpZiAobHBmY19zbGk0X3dxX3B1dChwaGJhLT5zbGk0X2hiYS5mY3Bfd3FbcGlvY2ItPmZjcF93cWlkeF0sCiAJCQkJICAgICAmd3FlKSkKQEAgLTcwMDQsNyArNzA1MywxNCBAQAogCQkgICAgYWJvcnRfaW9jYi0+aW9jYi51bHBDb250ZXh0ICE9IGFib3J0X2NvbnRleHQgfHwKIAkJICAgIChhYm9ydF9pb2NiLT5pb2NiX2ZsYWcgJiBMUEZDX0RSSVZFUl9BQk9SVEVEKSA9PSAwKQogCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKLQkJZWxzZSB7CisJCWVsc2UgaWYgKHBoYmEtPnNsaV9yZXYgPCBMUEZDX1NMSV9SRVY0KSB7CisJCQkvKgorCQkJICogbGVhdmUgdGhlIFNMSTQgYWJvcnRlZCBjb21tYW5kIG9uIHRoZSB0eGNtcGxxCisJCQkgKiBsaXN0IGFuZCB0aGUgY29tbWFuZCBjb21wbGV0ZSBXQ1FFJ3MgWEIgYml0CisJCQkgKiB3aWxsIHRlbGwgd2hldGhlciB0aGUgU0dMIChYUkkpIGNhbiBiZSByZWxlYXNlZAorCQkJICogaW1tZWRpYXRlbHkgb3IgdG8gdGhlIGFib3J0ZWQgU0dMIGxpc3QgZm9yIHRoZQorCQkJICogZm9sbG93aW5nIGFib3J0IFhSSSBmcm9tIHRoZSBIQkEuCisJCQkgKi8KIAkJCWxpc3RfZGVsX2luaXQoJmFib3J0X2lvY2ItPmxpc3QpOwogCQkJcHJpbmctPnR4Y21wbHFfY250LS07CiAJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwpAQCAtNzAxMywxMSArNzA2OSwxMyBAQAogCQkJICogcGF5bG9hZCwgc28gZG9uJ3QgZnJlZSBkYXRhIGJ1ZmZlciB0aWxsIGFmdGVyCiAJCQkgKiBhIGhiZWF0LgogCQkJICovCisJCQlzcGluX2xvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJCWFib3J0X2lvY2ItPmlvY2JfZmxhZyB8PSBMUEZDX0RFTEFZX01FTV9GUkVFOwotCiAJCQlhYm9ydF9pb2NiLT5pb2NiX2ZsYWcgJj0gfkxQRkNfRFJJVkVSX0FCT1JURUQ7CisJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCiAJCQlhYm9ydF9pb2NiLT5pb2NiLnVscFN0YXR1cyA9IElPU1RBVF9MT0NBTF9SRUpFQ1Q7Ci0JCQlhYm9ydF9pb2NiLT5pb2NiLnVuLnVscFdvcmRbNF0gPSBJT0VSUl9TTElfQUJPUlRFRDsKKwkJCWFib3J0X2lvY2ItPmlvY2IudW4udWxwV29yZFs0XSA9IElPRVJSX0FCT1JUX1JFUVVFU1RFRDsKIAkJCShhYm9ydF9pb2NiLT5pb2NiX2NtcGwpKHBoYmEsIGFib3J0X2lvY2IsIGFib3J0X2lvY2IpOwogCQl9CiAJfQpAQCAtNzEwNiw3ICs3MTY0LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBUaGlzIHNpZ25hbHMgdGhlIHJlc3BvbnNlIHRvIHNldCB0aGUgY29ycmVjdCBzdGF0dXMKLQkgKiBiZWZvcmUgY2FsbGluZyB0aGUgY29tcGxldGlvbiBoYW5kbGVyLgorCSAqIGJlZm9yZSBjYWxsaW5nIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIKIAkgKi8KIAljbWRpb2NiLT5pb2NiX2ZsYWcgfD0gTFBGQ19EUklWRVJfQUJPUlRFRDsKIApAQCAtNzEyNCw2ICs3MTgyLDggQEAKIAogCS8qIEFCVFMgV1FFIG11c3QgZ28gdG8gdGhlIHNhbWUgV1EgYXMgdGhlIFdRRSB0byBiZSBhYm9ydGVkICovCiAJYWJ0c2lvY2JwLT5mY3Bfd3FpZHggPSBjbWRpb2NiLT5mY3Bfd3FpZHg7CisJaWYgKGNtZGlvY2ItPmlvY2JfZmxhZyAmIExQRkNfSU9fRkNQKQorCQlhYnRzaW9jYnAtPmlvY2JfZmxhZyB8PSBMUEZDX1VTRV9GQ1BXUUlEWDsKIAogCWlmIChwaGJhLT5saW5rX3N0YXRlID49IExQRkNfTElOS19VUCkKIAkJaWFidC0+dWxwQ29tbWFuZCA9IENNRF9BQk9SVF9YUklfQ047CkBAIC03MzMwLDYgKzczOTAsOCBAQAogCiAJCS8qIEFCVFMgV1FFIG11c3QgZ28gdG8gdGhlIHNhbWUgV1EgYXMgdGhlIFdRRSB0byBiZSBhYm9ydGVkICovCiAJCWFidHNpb2NiLT5mY3Bfd3FpZHggPSBpb2NicS0+ZmNwX3dxaWR4OworCQlpZiAoaW9jYnEtPmlvY2JfZmxhZyAmIExQRkNfSU9fRkNQKQorCQkJYWJ0c2lvY2ItPmlvY2JfZmxhZyB8PSBMUEZDX1VTRV9GQ1BXUUlEWDsKIAogCQlpZiAobHBmY19pc19saW5rX3VwKHBoYmEpKQogCQkJYWJ0c2lvY2ItPmlvY2IudWxwQ29tbWFuZCA9IENNRF9BQk9SVF9YUklfQ047CkBAIC04MzU5LDExICs4NDIxLDI0IEBACiAJfQogfQogCisvKioKKyAqIGxwZmNfc2xpNF9pb2NiX3BhcmFtX3RyYW5zZmVyIC0gVHJhbnNmZXIgcElvY2JPdXQgYW5kIGNtcGwgc3RhdHVzIHRvIHBJb2NiSW4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlCisgKiBAcElvY2JJbjogcG9pbnRlciB0byB0aGUgcnNwaW9jYnEKKyAqIEBwSW9jYk91dDogcG9pbnRlciB0byB0aGUgY21kaW9jYnEKKyAqIEB3Y3FlOiBwb2ludGVyIHRvIHRoZSBjb21wbGV0ZSB3Y3FlCisgKgorICogVGhpcyByb3V0aW5lIHRyYW5zZmVycyB0aGUgZmllbGRzIG9mIGEgY29tbWFuZCBpb2NicSB0byBhIHJlc3BvbnNlIGlvY2JxCisgKiBieSBjb3B5aW5nIGFsbCB0aGUgSU9DQiBmaWVsZHMgZnJvbSBjb21tYW5kIGlvY2JxIGFuZCB0cmFuc2ZlcnJpbmcgdGhlCisgKiBjb21wbGV0aW9uIHN0YXR1cyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjb21wbGV0ZSB3Y3FlLgorICoqLwogc3RhdGljIHZvaWQKLWxwZmNfc2xpNF9pb2NiX3BhcmFtX3RyYW5zZmVyKHN0cnVjdCBscGZjX2lvY2JxICpwSW9jYkluLAorbHBmY19zbGk0X2lvY2JfcGFyYW1fdHJhbnNmZXIoc3RydWN0IGxwZmNfaGJhICpwaGJhLAorCQkJICAgICAgc3RydWN0IGxwZmNfaW9jYnEgKnBJb2NiSW4sCiAJCQkgICAgICBzdHJ1Y3QgbHBmY19pb2NicSAqcElvY2JPdXQsCiAJCQkgICAgICBzdHJ1Y3QgbHBmY193Y3FlX2NvbXBsZXRlICp3Y3FlKQogeworCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCXNpemVfdCBvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbHBmY19pb2NicSwgaW9jYik7CiAKIAltZW1jcHkoKGNoYXIgKilwSW9jYkluICsgb2Zmc2V0LCAoY2hhciAqKXBJb2NiT3V0ICsgb2Zmc2V0LApAQCAtODM3Nyw4ICs4NDUyLDE3IEBACiAJCQkJCXdjcWUtPnRvdGFsX2RhdGFfcGxhY2VkOwogCQllbHNlCiAJCQlwSW9jYkluLT5pb2NiLnVuLnVscFdvcmRbNF0gPSB3Y3FlLT5wYXJhbWV0ZXI7Ci0JZWxzZQorCWVsc2UgewogCQlwSW9jYkluLT5pb2NiLnVuLnVscFdvcmRbNF0gPSB3Y3FlLT5wYXJhbWV0ZXI7CisJCXBJb2NiSW4tPmlvY2IudW4uZ2VucmVxNjQuYmRsLmJkZVNpemUgPSB3Y3FlLT50b3RhbF9kYXRhX3BsYWNlZDsKKwl9CisKKwkvKiBQaWNrIHVwIEhCQSBleGNoYW5nZSBidXN5IGNvbmRpdGlvbiAqLworCWlmIChiZl9nZXQobHBmY193Y3FlX2NfeGIsIHdjcWUpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCQlwSW9jYkluLT5pb2NiX2ZsYWcgfD0gTFBGQ19FWENIQU5HRV9CVVNZOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBpZmxhZ3MpOworCX0KIH0KIAogLyoqCkBAIC04NDE5LDcgKzg1MDMsNyBAQAogCX0KIAogCS8qIEZha2UgdGhlIGlyc3Bpb2NicSBhbmQgY29weSBuZWNlc3NhcnkgcmVzcG9uc2UgaW5mb3JtYXRpb24gKi8KLQlscGZjX3NsaTRfaW9jYl9wYXJhbV90cmFuc2ZlcihpcnNwaW9jYnEsIGNtZGlvY2JxLCB3Y3FlKTsKKwlscGZjX3NsaTRfaW9jYl9wYXJhbV90cmFuc2ZlcihwaGJhLCBpcnNwaW9jYnEsIGNtZGlvY2JxLCB3Y3FlKTsKIAogCXJldHVybiBpcnNwaW9jYnE7CiB9CkBAIC04ODQ5LDggKzg5MzMsNyBAQAogCWludCBlY291bnQgPSAwOwogCXVpbnQxNl90IGNxaWQ7CiAKLQlpZiAoYmZfZ2V0KGxwZmNfZXFlX21ham9yX2NvZGUsIGVxZSkgIT0gMCB8fAotCSAgICBiZl9nZXQobHBmY19lcWVfbWlub3JfY29kZSwgZXFlKSAhPSAwKSB7CisJaWYgKGJmX2dldChscGZjX2VxZV9tYWpvcl9jb2RlLCBlcWUpICE9IDApIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAogCQkJCSIwMzU5IE5vdCBhIHZhbGlkIHNsb3ctcGF0aCBjb21wbGV0aW9uICIKIAkJCQkiZXZlbnQ6IG1ham9yY29kZT14JXgsIG1pbm9yY29kZT14JXhcbiIsCkBAIC04OTc2LDcgKzkwNTksNyBAQAogCX0KIAogCS8qIEZha2UgdGhlIGlyc3Bpb2NiIGFuZCBjb3B5IG5lY2Vzc2FyeSByZXNwb25zZSBpbmZvcm1hdGlvbiAqLwotCWxwZmNfc2xpNF9pb2NiX3BhcmFtX3RyYW5zZmVyKCZpcnNwaW9jYnEsIGNtZGlvY2JxLCB3Y3FlKTsKKwlscGZjX3NsaTRfaW9jYl9wYXJhbV90cmFuc2ZlcihwaGJhLCAmaXJzcGlvY2JxLCBjbWRpb2NicSwgd2NxZSk7CiAKIAkvKiBQYXNzIHRoZSBjbWRfaW9jYiBhbmQgdGhlIHJzcCBzdGF0ZSB0byB0aGUgdXBwZXIgbGF5ZXIgKi8KIAkoY21kaW9jYnEtPmlvY2JfY21wbCkocGhiYSwgY21kaW9jYnEsICZpcnNwaW9jYnEpOwpAQCAtOTA4Miw4ICs5MTY1LDcgQEAKIAl1aW50MTZfdCBjcWlkOwogCWludCBlY291bnQgPSAwOwogCi0JaWYgKHVubGlrZWx5KGJmX2dldChscGZjX2VxZV9tYWpvcl9jb2RlLCBlcWUpICE9IDApIHx8Ci0JICAgIHVubGlrZWx5KGJmX2dldChscGZjX2VxZV9taW5vcl9jb2RlLCBlcWUpICE9IDApKSB7CisJaWYgKHVubGlrZWx5KGJmX2dldChscGZjX2VxZV9tYWpvcl9jb2RlLCBlcWUpICE9IDApKSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1NMSSwKIAkJCQkiMDM2NiBOb3QgYSB2YWxpZCBmYXN0LXBhdGggY29tcGxldGlvbiAiCiAJCQkJImV2ZW50OiBtYWpvcmNvZGU9eCV4LCBtaW5vcmNvZGU9eCV4XG4iLApAQCAtMTE4NzEsMTIgKzExOTUzLDYgQEAKIHsKIAlpbnQgcmMgPSAwLCBlcnJvcjsKIAlMUEZDX01CT1hRX3QgKm1ib3hxOwotCXZvaWQgKnZpcnRfYWRkcjsKLQlkbWFfYWRkcl90IHBoeXNfYWRkcjsKLQl1aW50OF90ICpieXRlcDsKLQlzdHJ1Y3QgbHBmY19tYnhfc2dlIHNnZTsKLQl1aW50MzJfdCBhbGxvY19sZW4sIHJlcV9sZW47Ci0Jc3RydWN0IGxwZmNfbWJ4X3JlYWRfZmNmX3RibCAqcmVhZF9mY2Y7CiAKIAlwaGJhLT5mY29lX2V2ZW50dGFnX2F0X2ZjZl9zY2FuID0gcGhiYS0+ZmNvZV9ldmVudHRhZzsKIAltYm94cSA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CkBAIC0xMTg4Nyw0MyArMTE5NjMsMTkgQEAKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxfZmNmc2NhbjsKIAl9Ci0KLQlyZXFfbGVuID0gc2l6ZW9mKHN0cnVjdCBmY2ZfcmVjb3JkKSArCi0JCSAgc2l6ZW9mKHVuaW9uIGxwZmNfc2xpNF9jZmdfc2hkcikgKyAyICogc2l6ZW9mKHVpbnQzMl90KTsKLQotCS8qIFNldCB1cCBSRUFEX0ZDRiBTTEk0X0NPTkZJRyBtYWlsYm94LWlvY3RsIGNvbW1hbmQgKi8KLQlhbGxvY19sZW4gPSBscGZjX3NsaTRfY29uZmlnKHBoYmEsIG1ib3hxLCBMUEZDX01CT1hfU1VCU1lTVEVNX0ZDT0UsCi0JCQkgTFBGQ19NQk9YX09QQ09ERV9GQ09FX1JFQURfRkNGX1RBQkxFLCByZXFfbGVuLAotCQkJIExQRkNfU0xJNF9NQlhfTkVNQkVEKTsKLQotCWlmIChhbGxvY19sZW4gPCByZXFfbGVuKSB7Ci0JCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCi0JCQkJIjAyOTEgQWxsb2NhdGVkIERNQSBtZW1vcnkgc2l6ZSAoeCV4KSBpcyAiCi0JCQkJImxlc3MgdGhhbiB0aGUgcmVxdWVzdGVkIERNQSBtZW1vcnkgIgotCQkJCSJzaXplICh4JXgpXG4iLCBhbGxvY19sZW4sIHJlcV9sZW4pOwotCQllcnJvciA9IC1FTk9NRU07CisJLyogQ29uc3RydWN0IHRoZSByZWFkIEZDRiByZWNvcmQgbWFpbGJveCBjb21tYW5kICovCisJcmMgPSBscGZjX3NsaTRfbWJ4X3JlYWRfZmNmX3JlY29yZChwaGJhLCBtYm94cSwgZmNmX2luZGV4KTsKKwlpZiAocmMpIHsKKwkJZXJyb3IgPSAtRUlOVkFMOwogCQlnb3RvIGZhaWxfZmNmc2NhbjsKIAl9Ci0KLQkvKiBHZXQgdGhlIGZpcnN0IFNHRSBlbnRyeSBmcm9tIHRoZSBub24tZW1iZWRkZWQgRE1BIG1lbW9yeS4gVGhpcwotCSAqIHJvdXRpbmUgb25seSB1c2VzIGEgc2luZ2xlIFNHRS4KLQkgKi8KLQlscGZjX3NsaTRfbWJ4X3NnZV9nZXQobWJveHEsIDAsICZzZ2UpOwotCXBoeXNfYWRkciA9IGdldFBhZGRyKHNnZS5wYV9oaSwgc2dlLnBhX2xvKTsKLQl2aXJ0X2FkZHIgPSBtYm94cS0+c2dlX2FycmF5LT5hZGRyWzBdOwotCXJlYWRfZmNmID0gKHN0cnVjdCBscGZjX21ieF9yZWFkX2ZjZl90YmwgKil2aXJ0X2FkZHI7Ci0KLQkvKiBTZXQgdXAgY29tbWFuZCBmaWVsZHMgKi8KLQliZl9zZXQobHBmY19tYnhfcmVhZF9mY2ZfdGJsX2luZHgsICZyZWFkX2ZjZi0+dS5yZXF1ZXN0LCBmY2ZfaW5kZXgpOwotCS8qIFBlcmZvcm0gbmVjZXNzYXJ5IGVuZGlhbiBjb252ZXJzaW9uICovCi0JYnl0ZXAgPSB2aXJ0X2FkZHIgKyBzaXplb2YodW5pb24gbHBmY19zbGk0X2NmZ19zaGRyKTsKLQlscGZjX3NsaV9wY2ltZW1fYmNvcHkoYnl0ZXAsIGJ5dGVwLCBzaXplb2YodWludDMyX3QpKTsKKwkvKiBJc3N1ZSB0aGUgbWFpbGJveCBjb21tYW5kIGFzeW5jaHJvbm91c2x5ICovCiAJbWJveHEtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7CiAJbWJveHEtPm1ib3hfY21wbCA9IGxwZmNfbWJ4X2NtcGxfcmVhZF9mY2ZfcmVjb3JkOwogCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94cSwgTUJYX05PV0FJVCk7Ci0JaWYgKHJjID09IE1CWF9OT1RfRklOSVNIRUQpIHsKKwlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkKIAkJZXJyb3IgPSAtRUlPOwotCX0gZWxzZSB7CisJZWxzZSB7CiAJCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQlwaGJhLT5oYmFfZmxhZyB8PSBGQ0ZfRElTQ19JTlBST0dSRVNTOwogCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwpAQCAtMTE5NDIsNiArMTE5OTQsOTAgQEAKIH0KIAogLyoqCisgKiBscGZjX21ieF9jbXBsX3JlZGlzY19mY2ZfdGFibGUgLSBjb21wbGV0aW9uIHJvdXRpbmUgZm9yIHJlZGlzY292ZXIgRkNGIHRhYmxlCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGNvbXBsZXRpb24gcm91dGluZSBmb3IgdGhlIHJlZGlzY292ZXIgRkNGIHRhYmxlIG1haWxib3gKKyAqIGNvbW1hbmQuIElmIHRoZSBtYWlsYm94IGNvbW1hbmQgcmV0dXJuZWQgZmFpbHVyZSwgaXQgd2lsbCB0cnkgdG8gc3RvcCB0aGUKKyAqIEZDRiByZWRpc2NvdmVyIHdhaXQgdGltZXIuCisgKiovCit2b2lkCitscGZjX21ieF9jbXBsX3JlZGlzY19mY2ZfdGFibGUoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBMUEZDX01CT1hRX3QgKm1ib3gpCit7CisJc3RydWN0IGxwZmNfbWJ4X3JlZGlzY19mY2ZfdGJsICpyZWRpc2NfZmNmOworCXVpbnQzMl90IHNoZHJfc3RhdHVzLCBzaGRyX2FkZF9zdGF0dXM7CisKKwlyZWRpc2NfZmNmID0gJm1ib3gtPnUubXFlLnVuLnJlZGlzY19mY2ZfdGJsOworCisJc2hkcl9zdGF0dXMgPSBiZl9nZXQobHBmY19tYm94X2hkcl9zdGF0dXMsCisJCQkgICAgICZyZWRpc2NfZmNmLT5oZWFkZXIuY2ZnX3NoZHIucmVzcG9uc2UpOworCXNoZHJfYWRkX3N0YXR1cyA9IGJmX2dldChscGZjX21ib3hfaGRyX2FkZF9zdGF0dXMsCisJCQkgICAgICZyZWRpc2NfZmNmLT5oZWFkZXIuY2ZnX3NoZHIucmVzcG9uc2UpOworCWlmIChzaGRyX3N0YXR1cyB8fCBzaGRyX2FkZF9zdGF0dXMpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAorCQkJCSIyNzQ2IFJlcXVlc3RpbmcgZm9yIEZDRiByZWRpc2NvdmVyeSBmYWlsZWQgIgorCQkJCSJzdGF0dXMgeCV4IGFkZF9zdGF0dXMgeCV4XG4iLAorCQkJCXNoZHJfc3RhdHVzLCBzaGRyX2FkZF9zdGF0dXMpOworCQkvKgorCQkgKiBSZXF1ZXN0IGZhaWxlZCwgbGFzdCByZXNvcnQgdG8gcmUtdHJ5IGN1cnJlbnQKKwkJICogcmVnaXN0ZXJlZCBGQ0YgZW50cnkKKwkJICovCisJCWxwZmNfcmV0cnlfcHBvcnRfZGlzY292ZXJ5KHBoYmEpOworCX0gZWxzZQorCQkvKgorCQkgKiBTdGFydCBGQ0YgcmVkaXNjb3Zlcnkgd2FpdCB0aW1lciBmb3IgcGVuZGluZyBGQ0YKKwkJICogYmVmb3JlIHJlc2NhbiBGQ0YgcmVjb3JkIHRhYmxlLgorCQkgKi8KKwkJbHBmY19mY2ZfcmVkaXNjX3dhaXRfc3RhcnRfdGltZXIocGhiYSk7CisKKwltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7Cit9CisKKy8qKgorICogbHBmY19zbGk0X3JlZGlzY19hbGxfZmNmIC0gUmVxdWVzdCB0byByZWRpc2NvdmVyIGVudGlyZSBGQ0YgdGFibGUgYnkgcG9ydC4KKyAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvIHJlcXVlc3QgZm9yIHJlZGlzY292ZXJ5IG9mIHRoZSBlbnRpcmUgRkNGIHRhYmxlCisgKiBieSB0aGUgcG9ydC4KKyAqKi8KK2ludAorbHBmY19zbGk0X3JlZGlzY19mY2ZfdGFibGUoc3RydWN0IGxwZmNfaGJhICpwaGJhKQoreworCUxQRkNfTUJPWFFfdCAqbWJveDsKKwlzdHJ1Y3QgbHBmY19tYnhfcmVkaXNjX2ZjZl90YmwgKnJlZGlzY19mY2Y7CisJaW50IHJjLCBsZW5ndGg7CisKKwltYm94ID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1ib3gpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAorCQkJCSIyNzQ1IEZhaWxlZCB0byBhbGxvY2F0ZSBtYm94IGZvciAiCisJCQkJInJlcXVlc3RpbmcgRkNGIHJlZGlzY292ZXIuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbGVuZ3RoID0gKHNpemVvZihzdHJ1Y3QgbHBmY19tYnhfcmVkaXNjX2ZjZl90YmwpIC0KKwkJICBzaXplb2Yoc3RydWN0IGxwZmNfc2xpNF9jZmdfbWhkcikpOworCWxwZmNfc2xpNF9jb25maWcocGhiYSwgbWJveCwgTFBGQ19NQk9YX1NVQlNZU1RFTV9GQ09FLAorCQkJIExQRkNfTUJPWF9PUENPREVfRkNPRV9SRURJU0NPVkVSX0ZDRiwKKwkJCSBsZW5ndGgsIExQRkNfU0xJNF9NQlhfRU1CRUQpOworCisJcmVkaXNjX2ZjZiA9ICZtYm94LT51Lm1xZS51bi5yZWRpc2NfZmNmX3RibDsKKwkvKiBTZXQgY291bnQgdG8gMCBmb3IgaW52YWxpZGF0aW5nIHRoZSBlbnRpcmUgRkNGIGRhdGFiYXNlICovCisJYmZfc2V0KGxwZmNfbWJ4X3JlZGlzY19mY2ZfY291bnQsIHJlZGlzY19mY2YsIDApOworCisJLyogSXNzdWUgdGhlIG1haWxib3ggY29tbWFuZCBhc3luY2hyb25vdXNseSAqLworCW1ib3gtPnZwb3J0ID0gcGhiYS0+cHBvcnQ7CisJbWJveC0+bWJveF9jbXBsID0gbHBmY19tYnhfY21wbF9yZWRpc2NfZmNmX3RhYmxlOworCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBtYm94LCBNQlhfTk9XQUlUKTsKKworCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7CisJCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCisvKioKICAqIGxwZmNfc2xpX3JlYWRfbGlua19zdGUgLSBSZWFkIHJlZ2lvbiAyMyB0byBkZWNpZGUgaWYgbGluayBpcyBkaXNhYmxlZC4KICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICoKQEAgLTEyMDY5LDMgKzEyMjA1LDQ4IEBACiAJa2ZyZWUocmduMjNfZGF0YSk7CiAJcmV0dXJuOwogfQorCisvKioKKyAqIGxwZmNfY2xlYW51cF9wZW5kaW5nX21ib3ggLSBGcmVlIHVwIHZwb3J0IGRpc2NvdmVyeSBtYWlsYm94IGNvbW1hbmRzLgorICogQHZwb3J0OiBwb2ludGVyIHRvIHZwb3J0IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXRlcmF0ZSB0aHJvdWdoIHRoZSBtYWlsYm94cSBhbmQgY2xlYW4gdXAgYWxsIFJFR19MT0dJTgorICogYW5kIFJFR19WUEkgbWFpbGJveCBjb21tYW5kcyBhc3NvY2lhdGVkIHdpdGggdGhlIHZwb3J0LiBUaGlzIGZ1bmN0aW9uCisgKiBpcyBjYWxsZWQgd2hlbiBkcml2ZXIgd2FudCB0byByZXN0YXJ0IGRpc2NvdmVyeSBvZiB0aGUgdnBvcnQgZHVlIHRvCisgKiBhIENsZWFyIFZpcnR1YWwgTGluayBldmVudC4KKyAqKi8KK3ZvaWQKK2xwZmNfY2xlYW51cF9wZW5kaW5nX21ib3goc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQoreworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCUxQRkNfTUJPWFFfdCAqbWIsICpuZXh0bWI7CisJc3RydWN0IGxwZmNfZG1hYnVmICptcDsKKworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYiwgbmV4dG1iLCAmcGhiYS0+c2xpLm1ib3hxLCBsaXN0KSB7CisJCWlmIChtYi0+dnBvcnQgIT0gdnBvcnQpCisJCQljb250aW51ZTsKKworCQlpZiAoKG1iLT51Lm1iLm1ieENvbW1hbmQgIT0gTUJYX1JFR19MT0dJTjY0KSAmJgorCQkJKG1iLT51Lm1iLm1ieENvbW1hbmQgIT0gTUJYX1JFR19WUEkpKQorCQkJY29udGludWU7CisKKwkJaWYgKG1iLT51Lm1iLm1ieENvbW1hbmQgPT0gTUJYX1JFR19MT0dJTjY0KSB7CisJCQltcCA9IChzdHJ1Y3QgbHBmY19kbWFidWYgKikgKG1iLT5jb250ZXh0MSk7CisJCQlpZiAobXApIHsKKwkJCQlfX2xwZmNfbWJ1Zl9mcmVlKHBoYmEsIG1wLT52aXJ0LCBtcC0+cGh5cyk7CisJCQkJa2ZyZWUobXApOworCQkJfQorCQl9CisJCWxpc3RfZGVsKCZtYi0+bGlzdCk7CisJCW1lbXBvb2xfZnJlZShtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJfQorCW1iID0gcGhiYS0+c2xpLm1ib3hfYWN0aXZlOworCWlmIChtYiAmJiAobWItPnZwb3J0ID09IHZwb3J0KSkgeworCQlpZiAoKG1iLT51Lm1iLm1ieENvbW1hbmQgPT0gTUJYX1JFR19MT0dJTjY0KSB8fAorCQkJKG1iLT51Lm1iLm1ieENvbW1hbmQgPT0gTUJYX1JFR19WUEkpKQorCQkJbWItPm1ib3hfY21wbCA9IGxwZmNfc2xpX2RlZl9tYm94X2NtcGw7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5oCmluZGV4IGJhMzhkZTMuLmRmY2Y1NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuaApAQCAtNTMsMTcgKzUzLDE5IEBACiAKIAlJT0NCX3QgaW9jYjsJCS8qIElPQ0IgY21kICovCiAJdWludDhfdCByZXRyeTsJCS8qIHJldHJ5IGNvdW50ZXIgZm9yIElPQ0IgY21kIC0gaWYgbmVlZGVkICovCi0JdWludDhfdCBpb2NiX2ZsYWc7CisJdWludDE2X3QgaW9jYl9mbGFnOwogI2RlZmluZSBMUEZDX0lPX0xJQkRGQwkJMQkvKiBsaWJkZmMgaW9jYiAqLwogI2RlZmluZSBMUEZDX0lPX1dBS0UJCTIJLyogSGlnaCBQcmlvcml0eSBRdWV1ZSBzaWduYWwgZmxhZyAqLwogI2RlZmluZSBMUEZDX0lPX0ZDUAkJNAkvKiBGQ1AgY29tbWFuZCAtLSBpb2NicSBpbiBzY3NpX2J1ZiAqLwogI2RlZmluZSBMUEZDX0RSSVZFUl9BQk9SVEVECTgJLyogZHJpdmVyIGFib3J0ZWQgdGhpcyByZXF1ZXN0ICovCiAjZGVmaW5lIExQRkNfSU9fRkFCUklDCQkweDEwCS8qIElvY2Igc2VuZCB1c2luZyBmYWJyaWMgc2NoZWR1bGVyICovCiAjZGVmaW5lIExQRkNfREVMQVlfTUVNX0ZSRUUJMHgyMCAgICAvKiBEZWZlciBmcmVlJ2luZyBvZiBGQyBkYXRhICovCi0jZGVmaW5lIExQRkNfRklQX0VMU19JRF9NQVNLCTB4YzAJLyogRUxTX0lEIHJhbmdlIDAtMyAqLwotI2RlZmluZSBMUEZDX0ZJUF9FTFNfSURfU0hJRlQJNgorI2RlZmluZSBMUEZDX0VYQ0hBTkdFX0JVU1kJMHg0MCAgICAvKiBTTEk0IGhiYSByZXBvcnRlZCBYQiBpbiByZXNwb25zZSAqLworI2RlZmluZSBMUEZDX1VTRV9GQ1BXUUlEWAkweDgwICAgIC8qIFN1Ym1pdCB0byBzcGVjaWZpZWQgRkNQV1EgaW5kZXggKi8KIAotCXVpbnQ4X3QgYWJvcnRfY291bnQ7CisjZGVmaW5lIExQRkNfRklQX0VMU19JRF9NQVNLCTB4YzAwMAkvKiBFTFNfSUQgcmFuZ2UgMC0zLCBub24tc2hpZnRlZCBtYXNrICovCisjZGVmaW5lIExQRkNfRklQX0VMU19JRF9TSElGVAkxNAorCiAJdWludDhfdCByc3ZkMjsKIAl1aW50MzJfdCBkcnZyVGltZW91dDsJLyogZHJpdmVyIHRpbWVvdXQgaW4gc2Vjb25kcyAqLwogCXVpbnQzMl90IGZjcF93cWlkeDsJLyogaW5kZXggdG8gRkNQIHdvcmsgcXVldWUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGk0LmgKaW5kZXggNDRlNWY1Ny4uODYzMDg4MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpNC5oCkBAIC0yMiw2ICsyMiwxMCBAQAogI2RlZmluZSBMUEZDX1JFTEVBU0VfTk9USUZJQ0FUSU9OX0lOVEVSVkFMCTMyCiAjZGVmaW5lIExQRkNfR0VUX1FFX1JFTF9JTlQJCQkzMgogI2RlZmluZSBMUEZDX1JQSV9MT1dfV0FURVJfTUFSSwkJCTEwCisKKy8qIEFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgZm9yIHdhaXRpbmcgRkNGIHJlZGlzY292ZXJ5IHRvIGNvbXBsZXRlICovCisjZGVmaW5lIExQRkNfRkNGX1JFRElTQ09WRVJfV0FJVF9UTU8JCTIwMDAgLyogbXNlYyAqLworCiAvKiBOdW1iZXIgb2YgU0dMIGVudHJpZXMgY2FuIGJlIHBvc3RlZCBpbiBhIDRLQiBub25lbWJlZGRlZCBtYm94IGNvbW1hbmQgKi8KICNkZWZpbmUgTFBGQ19ORU1CRURfTUJPWF9TR0xfQ05UCQkyNTQKIApAQCAtMTI2LDI0ICsxMzAsMzYgQEAKIAl1aW50OF90IHN0YXR1czsKIAl1aW50OF90IHBoeXNpY2FsOwogCXVpbnQ4X3QgZmF1bHQ7CisJdWludDE2X3QgbG9naWNhbF9zcGVlZDsKK307CisKK3N0cnVjdCBscGZjX2ZjZl9yZWMgeworCXVpbnQ4X3QgIGZhYnJpY19uYW1lWzhdOworCXVpbnQ4X3QgIHN3aXRjaF9uYW1lWzhdOworCXVpbnQ4X3QgIG1hY19hZGRyWzZdOworCXVpbnQxNl90IGZjZl9pbmR4OworCXVpbnQzMl90IHByaW9yaXR5OworCXVpbnQxNl90IHZsYW5faWQ7CisJdWludDMyX3QgYWRkcl9tb2RlOworCXVpbnQzMl90IGZsYWc7CisjZGVmaW5lIEJPT1RfRU5BQkxFCTB4MDEKKyNkZWZpbmUgUkVDT1JEX1ZBTElECTB4MDIKIH07CiAKIHN0cnVjdCBscGZjX2ZjZiB7Ci0JdWludDhfdAkgZmFicmljX25hbWVbOF07Ci0JdWludDhfdAkgc3dpdGNoX25hbWVbOF07Ci0JdWludDhfdCAgbWFjX2FkZHJbNl07Ci0JdWludDE2X3QgZmNmX2luZHg7CiAJdWludDE2X3QgZmNmaTsKIAl1aW50MzJfdCBmY2ZfZmxhZzsKICNkZWZpbmUgRkNGX0FWQUlMQUJMRQkweDAxIC8qIEZDRiBhdmFpbGFibGUgZm9yIGRpc2NvdmVyeSAqLwogI2RlZmluZSBGQ0ZfUkVHSVNURVJFRAkweDAyIC8qIEZDRiByZWdpc3RlcmVkIHdpdGggRlcgKi8KLSNkZWZpbmUgRkNGX0RJU0NPVkVSRUQJMHgwNCAvKiBGQ0YgZGlzY292ZXJ5IHN0YXJ0ZWQgICovCi0jZGVmaW5lIEZDRl9CT09UX0VOQUJMRSAweDA4IC8qIEJvb3QgYmlvcyB1c2UgdGhpcyBGQ0YgKi8KLSNkZWZpbmUgRkNGX0lOX1VTRQkweDEwIC8qIEF0bGVhc3Qgb25lIGRpc2NvdmVyeSBjb21wbGV0ZWQgKi8KLSNkZWZpbmUgRkNGX1ZBTElEX1ZMQU4JMHgyMCAvKiBVc2UgdGhlIHZsYW4gaWQgc3BlY2lmaWVkICovCi0JdWludDMyX3QgcHJpb3JpdHk7CisjZGVmaW5lIEZDRl9TQ0FOX0RPTkUJMHgwNCAvKiBGQ0YgdGFibGUgc2NhbiBkb25lICovCisjZGVmaW5lIEZDRl9JTl9VU0UJMHgwOCAvKiBBdGxlYXN0IG9uZSBkaXNjb3ZlcnkgY29tcGxldGVkICovCisjZGVmaW5lIEZDRl9SRURJU0NfUEVORAkweDEwIC8qIEZDRiByZWRpc2NvdmVyeSBwZW5kaW5nICovCisjZGVmaW5lIEZDRl9SRURJU0NfRVZUCTB4MjAgLyogRkNGIHJlZGlzY292ZXJ5IGV2ZW50IHRvIHdvcmtlciB0aHJlYWQgKi8KKyNkZWZpbmUgRkNGX1JFRElTQ19GT1YJMHg0MCAvKiBQb3N0IEZDRiByZWRpc2NvdmVyeSBmYXN0IGZhaWxvdmVyICovCiAJdWludDMyX3QgYWRkcl9tb2RlOwotCXVpbnQxNl90IHZsYW5faWQ7CisJc3RydWN0IGxwZmNfZmNmX3JlYyBjdXJyZW50X3JlYzsKKwlzdHJ1Y3QgbHBmY19mY2ZfcmVjIGZhaWxvdmVyX3JlYzsKKwlzdHJ1Y3QgdGltZXJfbGlzdCByZWRpc2Nfd2FpdDsKIH07CiAKICNkZWZpbmUgTFBGQ19SRUdJT04yM19TSUdOQVRVUkUgIlJHMjMiCkBAIC0yNDgsNyArMjY0LDEwIEBACiAjZGVmaW5lIFNMSTRfQ1RfVkZJIDIKICNkZWZpbmUgU0xJNF9DVF9GQ0ZJIDMKIAotI2RlZmluZSBMUEZDX1NMSTRfTUFYX1NFR01FTlRfU0laRSAweDEwMDAwCisjZGVmaW5lIExQRkNfU0xJNF9GTDFfTUFYX1NFR01FTlRfU0laRQkweDEwMDAwCisjZGVmaW5lIExQRkNfU0xJNF9GTDFfTUFYX0JVRl9TSVpFCTBYMjAwMAorI2RlZmluZSBMUEZDX1NMSTRfTUlOX0JVRl9TSVpFCQkweDQwMAorI2RlZmluZSBMUEZDX1NMSTRfTUFYX0JVRl9TSVpFCQkweDIwMDAwCiAKIC8qCiAgKiBTTEk0IHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcwpAQCAtMjgyLDYgKzMwMSw0MiBAQAogCXN0cnVjdCBscGZjX2hiYSAqcGhiYTsKIH07CiAKKy8qIFBvcnQgQ2FwYWJpbGl0aWVzIGZvciBTTEk0IFBhcmFtZXRlcnMgKi8KK3N0cnVjdCBscGZjX3BjX3NsaTRfcGFyYW1zIHsKKwl1aW50MzJfdCBzdXBwb3J0ZWQ7CisJdWludDMyX3QgaWZfdHlwZTsKKwl1aW50MzJfdCBzbGlfcmV2OworCXVpbnQzMl90IHNsaV9mYW1pbHk7CisJdWludDMyX3QgZmVhdHVyZWxldmVsXzE7CisJdWludDMyX3QgZmVhdHVyZWxldmVsXzI7CisJdWludDMyX3QgcHJvdG9fdHlwZXM7CisjZGVmaW5lIExQRkNfU0xJNF9QUk9UT19GQ09FCTB4MDAwMDAwMQorI2RlZmluZSBMUEZDX1NMSTRfUFJPVE9fRkMJMHgwMDAwMDAyCisjZGVmaW5lIExQRkNfU0xJNF9QUk9UT19OSUMJMHgwMDAwMDA0CisjZGVmaW5lIExQRkNfU0xJNF9QUk9UT19JU0NTSQkweDAwMDAwMDgKKyNkZWZpbmUgTFBGQ19TTEk0X1BST1RPX1JETUEJMHgwMDAwMDEwCisJdWludDMyX3Qgc2dlX3N1cHBfbGVuOworCXVpbnQzMl90IGlmX3BhZ2Vfc3o7CisJdWludDMyX3QgcnFfZGJfd2luZG93OworCXVpbnQzMl90IGxvb3Bia19zY29wZTsKKwl1aW50MzJfdCBlcV9wYWdlc19tYXg7CisJdWludDMyX3QgZXFlX3NpemU7CisJdWludDMyX3QgY3FfcGFnZXNfbWF4OworCXVpbnQzMl90IGNxZV9zaXplOworCXVpbnQzMl90IG1xX3BhZ2VzX21heDsKKwl1aW50MzJfdCBtcWVfc2l6ZTsKKwl1aW50MzJfdCBtcV9lbGVtX2NudDsKKwl1aW50MzJfdCB3cV9wYWdlc19tYXg7CisJdWludDMyX3Qgd3FlX3NpemU7CisJdWludDMyX3QgcnFfcGFnZXNfbWF4OworCXVpbnQzMl90IHJxZV9zaXplOworCXVpbnQzMl90IGhkcl9wYWdlc19tYXg7CisJdWludDMyX3QgaGRyX3NpemU7CisJdWludDMyX3QgaGRyX3BwX2FsaWduOworCXVpbnQzMl90IHNnbF9wYWdlc19tYXg7CisJdWludDMyX3Qgc2dsX3BwX2FsaWduOworfTsKKwogLyogU0xJNCBIQkEgZGF0YSBzdHJ1Y3R1cmUgZW50cmllcyAqLwogc3RydWN0IGxwZmNfc2xpNF9oYmEgewogCXZvaWQgX19pb21lbSAqY29uZl9yZWdzX21lbW1hcF9wOyAvKiBLZXJuZWwgbWVtb3J5IG1hcHBlZCBhZGRyZXNzIGZvcgpAQCAtMjk1LDcgKzM1MCw3IEBACiAJdm9pZCBfX2lvbWVtICpVRVJSSElyZWdhZGRyOyAvKiBBZGRyZXNzIHRvIFVFUlJfU1RBVFVTX0hJIHJlZ2lzdGVyICovCiAJdm9pZCBfX2lvbWVtICpVRU1BU0tMT3JlZ2FkZHI7IC8qIEFkZHJlc3MgdG8gVUVfTUFTS19MTyByZWdpc3RlciAqLwogCXZvaWQgX19pb21lbSAqVUVNQVNLSElyZWdhZGRyOyAvKiBBZGRyZXNzIHRvIFVFX01BU0tfSEkgcmVnaXN0ZXIgKi8KLQl2b2lkIF9faW9tZW0gKlNDUkFUQ0hQQURyZWdhZGRyOyAvKiBBZGRyZXNzIHRvIHNjcmF0Y2hwYWQgcmVnaXN0ZXIgKi8KKwl2b2lkIF9faW9tZW0gKlNMSUlOVEZyZWdhZGRyOyAvKiBBZGRyZXNzIHRvIFNMSV9JTlRGIHJlZ2lzdGVyICovCiAJLyogQkFSMSBGQ29FIGZ1bmN0aW9uIENTUiByZWdpc3RlciBtZW1vcnkgbWFwICovCiAJdm9pZCBfX2lvbWVtICpTVEFyZWdhZGRyOyAgICAvKiBBZGRyZXNzIHRvIEhTVF9TVEFURSByZWdpc3RlciAqLwogCXZvaWQgX19pb21lbSAqSVNScmVnYWRkcjsgICAgLyogQWRkcmVzcyB0byBIU1RfSVNSIHJlZ2lzdGVyICovCkBAIC0zMTAsNiArMzY1LDggQEAKIAogCXVpbnQzMl90IHVlX21hc2tfbG87CiAJdWludDMyX3QgdWVfbWFza19oaTsKKwlzdHJ1Y3QgbHBmY19yZWdpc3RlciBzbGlfaW50ZjsKKwlzdHJ1Y3QgbHBmY19wY19zbGk0X3BhcmFtcyBwY19zbGk0X3BhcmFtczsKIAlzdHJ1Y3QgbXNpeF9lbnRyeSAqbXNpeF9lbnRyaWVzOwogCXVpbnQzMl90IGNmZ19lcW47CiAJc3RydWN0IGxwZmNfZmNwX2VxX2hkbCAqZmNwX2VxX2hkbDsgLyogRkNQIHBlci1XUSBoYW5kbGUgKi8KQEAgLTQwNiw2ICs0NjMsOCBAQAogdm9pZCBscGZjX3NsaTRfbWJ4X3NnZV9zZXQoc3RydWN0IGxwZmNNYm94cSAqLCB1aW50MzJfdCwgZG1hX2FkZHJfdCwgdWludDMyX3QpOwogdm9pZCBscGZjX3NsaTRfbWJ4X3NnZV9nZXQoc3RydWN0IGxwZmNNYm94cSAqLCB1aW50MzJfdCwKIAkJCSAgIHN0cnVjdCBscGZjX21ieF9zZ2UgKik7CitpbnQgbHBmY19zbGk0X21ieF9yZWFkX2ZjZl9yZWNvcmQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjTWJveHEgKiwKKwkJCQkgIHVpbnQxNl90KTsKIAogdm9pZCBscGZjX3NsaTRfaGJhX3Jlc2V0KHN0cnVjdCBscGZjX2hiYSAqKTsKIHN0cnVjdCBscGZjX3F1ZXVlICpscGZjX3NsaTRfcXVldWVfYWxsb2Moc3RydWN0IGxwZmNfaGJhICosIHVpbnQzMl90LApAQCAtNDQ4LDYgKzUwNyw3IEBACiB2b2lkIGxwZmNfc2xpNF9mcmVlX3JwaShzdHJ1Y3QgbHBmY19oYmEgKiwgaW50KTsKIHZvaWQgbHBmY19zbGk0X3JlbW92ZV9ycGlzKHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19zbGk0X2FzeW5jX2V2ZW50X3Byb2Moc3RydWN0IGxwZmNfaGJhICopOwordm9pZCBscGZjX3NsaTRfZmNmX3JlZGlzY19ldmVudF9wcm9jKHN0cnVjdCBscGZjX2hiYSAqKTsKIGludCBscGZjX3NsaTRfcmVzdW1lX3JwaShzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKIHZvaWQgbHBmY19zbGk0X2ZjcF94cmlfYWJvcnRfZXZlbnRfcHJvYyhzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfc2xpNF9lbHNfeHJpX2Fib3J0X2V2ZW50X3Byb2Moc3RydWN0IGxwZmNfaGJhICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaAppbmRleCA3OTJmNzIyLi5hYzI3NmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMTgsNyArMTgsNyBAQAogICogaW5jbHVkZWQgd2l0aCB0aGlzIHBhY2thZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIExQRkNfRFJJVkVSX1ZFUlNJT04gIjguMy43IgorI2RlZmluZSBMUEZDX0RSSVZFUl9WRVJTSU9OICI4LjMuOSIKICNkZWZpbmUgTFBGQ19EUklWRVJfTkFNRQkJImxwZmMiCiAjZGVmaW5lIExQRkNfU1BfRFJJVkVSX0hBTkRMRVJfTkFNRQkibHBmYzpzcCIKICNkZWZpbmUgTFBGQ19GUF9EUklWRVJfSEFORExFUl9OQU1FCSJscGZjOmZwIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jCmluZGV4IGUzYzdmYTYuLmRjODZlODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMKQEAgLTM4OSw3ICszODksNyBAQAogCSAqIGJ5IHRoZSBwb3J0LgogCSAqLwogCWlmICgocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSAmJgotCSAgICAocHBvcnQtPnZwaV9zdGF0ZSAmIExQRkNfVlBJX1JFR0lTVEVSRUQpKSB7CisJCShwcG9ydC0+ZmNfZmxhZyAmIEZDX1ZGSV9SRUdJU1RFUkVEKSkgewogCQlyYyA9IGxwZmNfc2xpNF9pbml0X3ZwaShwaGJhLCB2cGkpOwogCQlpZiAocmMpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1ZQT1JULApAQCAtNTA1LDYgKzUwNSw3IEBACiAJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKihzdHJ1Y3QgbHBmY192cG9ydCAqKilmY192cG9ydC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgbHBmY19oYmEgICAqcGhiYSA9IHZwb3J0LT5waGJhOwogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gTlVMTDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGxwZmNfc2hvc3RfZnJvbV92cG9ydCh2cG9ydCk7CiAKIAlpZiAoKHBoYmEtPmxpbmtfc3RhdGUgPCBMUEZDX0xJTktfVVApIHx8CiAJICAgIChwaGJhLT5mY190b3BvbG9neSA9PSBUT1BPTE9HWV9MT09QKSkgewpAQCAtNTEyLDEwICs1MTMsMTAgQEAKIAkJcmV0dXJuIFZQT1JUX09LOwogCX0KIAotCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJdnBvcnQtPmxvYWRfZmxhZyB8PSBGQ19MT0FESU5HOwogCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX1JFR19WUEk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAKIAkvKiBVc2UgdGhlIFBoeXNpY2FsIG5vZGVzIEZhYnJpYyBORExQIHRvIGRldGVybWluZSBpZiB0aGUgbGluayBpcwogCSAqIHVwIGFuZCByZWFkeSB0byBGRElTQy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tYWNfZXNwLmMgYi9kcml2ZXJzL3Njc2kvbWFjX2VzcC5jCmluZGV4IGMyNGU4NmYuLjRhOTBlYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tYWNfZXNwLmMKKysrIGIvZHJpdmVycy9zY3NpL21hY19lc3AuYwpAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KLQogI2luY2x1ZGUgPGFzbS9tYWNpbnRzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2ludG9zaC5oPgogCkBAIC01Myw3ICs1Miw2IEBACiAJdm9pZCBfX2lvbWVtICpwZG1hX2lvOwogCWludCBlcnJvcjsKIH07Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaW50ZXJuYWxfcGRldiwgKmV4dGVybmFsX3BkZXY7CiBzdGF0aWMgc3RydWN0IGVzcCAqZXNwX2NoaXBzWzJdOwogCiAjZGVmaW5lIE1BQ19FU1BfR0VUX1BSSVYoZXNwKSAoKHN0cnVjdCBtYWNfZXNwX3ByaXYgKikgXApAQCAtMjc5LDI0ICsyNzcsMjcgQEAKICAqIFByb2dyYW1tZWQgSU8gcm91dGluZXMgZm9sbG93LgogICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IG1hY19lc3Bfd2FpdF9mb3JfZmlmbyhzdHJ1Y3QgZXNwICplc3ApCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtYWNfZXNwX3dhaXRfZm9yX2ZpZm8oc3RydWN0IGVzcCAqZXNwKQogewogCWludCBpID0gNTAwMDAwOwogCiAJZG8gewotCQlpZiAoZXNwX3JlYWQ4KEVTUF9GRkxBR1MpICYgRVNQX0ZGX0ZCWVRFUykKLQkJCXJldHVybiAwOworCQl1bnNpZ25lZCBpbnQgZmJ5dGVzID0gZXNwX3JlYWQ4KEVTUF9GRkxBR1MpICYgRVNQX0ZGX0ZCWVRFUzsKKworCQlpZiAoZmJ5dGVzKQorCQkJcmV0dXJuIGZieXRlczsKIAogCQl1ZGVsYXkoMik7CiAJfSB3aGlsZSAoLS1pKTsKIAogCXByaW50ayhLRVJOX0VSUiBQRlggIkZJRk8gaXMgZW1wdHkgKHNyZWcgJTAyeClcbiIsCiAJICAgICAgIGVzcF9yZWFkOChFU1BfU1RBVFVTKSk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG1hY19lc3Bfd2FpdF9mb3JfaW50cihzdHJ1Y3QgZXNwICplc3ApCiB7CisJc3RydWN0IG1hY19lc3BfcHJpdiAqbWVwID0gTUFDX0VTUF9HRVRfUFJJVihlc3ApOwogCWludCBpID0gNTAwMDAwOwogCiAJZG8gewpAQCAtMzA4LDYgKzMwOSw3IEBACiAJfSB3aGlsZSAoLS1pKTsKIAogCXByaW50ayhLRVJOX0VSUiBQRlggIklSUSB0aW1lb3V0IChzcmVnICUwMngpXG4iLCBlc3AtPnNyZWcpOworCW1lcC0+ZXJyb3IgPSAxOwogCXJldHVybiAxOwogfQogCkBAIC0zNDcsMTEgKzM0OSwxMCBAQAogc3RhdGljIHZvaWQgbWFjX2VzcF9zZW5kX3Bpb19jbWQoc3RydWN0IGVzcCAqZXNwLCB1MzIgYWRkciwgdTMyIGVzcF9jb3VudCwKIAkJCQkgdTMyIGRtYV9jb3VudCwgaW50IHdyaXRlLCB1OCBjbWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbWFjX2VzcF9wcml2ICptZXAgPSBNQUNfRVNQX0dFVF9QUklWKGVzcCk7CiAJdTggKmZpZm8gPSBlc3AtPnJlZ3MgKyBFU1BfRkRBVEEgKiAxNjsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlkaXNhYmxlX2lycShlc3AtPmhvc3QtPmlycSk7CiAKIAljbWQgJj0gfkVTUF9DTURfRE1BOwogCW1lcC0+ZXJyb3IgPSAwOwpAQCAtMzU5LDExICszNjAsMzUgQEAKIAlpZiAod3JpdGUpIHsKIAkJc2NzaV9lc3BfY21kKGVzcCwgY21kKTsKIAotCQlpZiAoIW1hY19lc3Bfd2FpdF9mb3JfaW50cihlc3ApKSB7Ci0JCQlpZiAobWFjX2VzcF93YWl0X2Zvcl9maWZvKGVzcCkpCi0JCQkJZXNwX2NvdW50ID0gMDsKLQkJfSBlbHNlIHsKLQkJCWVzcF9jb3VudCA9IDA7CisJCXdoaWxlICgxKSB7CisJCQl1bnNpZ25lZCBpbnQgbjsKKworCQkJbiA9IG1hY19lc3Bfd2FpdF9mb3JfZmlmbyhlc3ApOworCQkJaWYgKCFuKQorCQkJCWJyZWFrOworCisJCQlpZiAobiA+IGVzcF9jb3VudCkKKwkJCQluID0gZXNwX2NvdW50OworCQkJZXNwX2NvdW50IC09IG47CisKKwkJCU1BQ19FU1BfUElPX0xPT1AoIiUyQCwlMEArIiwgbik7CisKKwkJCWlmICghZXNwX2NvdW50KQorCQkJCWJyZWFrOworCisJCQlpZiAobWFjX2VzcF93YWl0X2Zvcl9pbnRyKGVzcCkpCisJCQkJYnJlYWs7CisKKwkJCWlmICgoKGVzcC0+c3JlZyAmIEVTUF9TVEFUX1BNQVNLKSAhPSBFU1BfRElQKSAmJgorCQkJICAgICgoZXNwLT5zcmVnICYgRVNQX1NUQVRfUE1BU0spICE9IEVTUF9NSVApKQorCQkJCWJyZWFrOworCisJCQllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7CisJCQlpZiAoKGVzcC0+aXJlZyAmIChFU1BfSU5UUl9EQyB8IEVTUF9JTlRSX0JTRVJWKSkgIT0KKwkJCSAgICBFU1BfSU5UUl9CU0VSVikKKwkJCQlicmVhazsKKworCQkJc2NzaV9lc3BfY21kKGVzcCwgRVNQX0NNRF9USSk7CiAJCX0KIAl9IGVsc2UgewogCQlzY3NpX2VzcF9jbWQoZXNwLCBFU1BfQ01EX0ZMVVNIKTsKQEAgLTM3NCw0NyArMzk5LDI0IEBACiAJCQlNQUNfRVNQX1BJT19MT09QKCIlMEArLCUyQCIsIGVzcF9jb3VudCk7CiAKIAkJc2NzaV9lc3BfY21kKGVzcCwgY21kKTsKLQl9CiAKLQl3aGlsZSAoZXNwX2NvdW50KSB7Ci0JCXVuc2lnbmVkIGludCBuOworCQl3aGlsZSAoZXNwX2NvdW50KSB7CisJCQl1bnNpZ25lZCBpbnQgbjsKIAotCQlpZiAobWFjX2VzcF93YWl0X2Zvcl9pbnRyKGVzcCkpIHsKLQkJCW1lcC0+ZXJyb3IgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoZXNwLT5zcmVnICYgRVNQX1NUQVRfU1BBTSkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZ3Jvc3MgZXJyb3JcbiIpOwotCQkJbWVwLT5lcnJvciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCW4gPSBlc3BfcmVhZDgoRVNQX0ZGTEFHUykgJiBFU1BfRkZfRkJZVEVTOwotCi0JCWlmICh3cml0ZSkgewotCQkJaWYgKG4gPiBlc3BfY291bnQpCi0JCQkJbiA9IGVzcF9jb3VudDsKLQkJCWVzcF9jb3VudCAtPSBuOwotCi0JCQlNQUNfRVNQX1BJT19MT09QKCIlMkAsJTBAKyIsIG4pOwotCi0JCQlpZiAoKGVzcC0+c3JlZyAmIEVTUF9TVEFUX1BNQVNLKSA9PSBFU1BfU1RBVFApCisJCQlpZiAobWFjX2VzcF93YWl0X2Zvcl9pbnRyKGVzcCkpCiAJCQkJYnJlYWs7CiAKLQkJCWlmIChlc3BfY291bnQpIHsKLQkJCQllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7Ci0JCQkJaWYgKGVzcC0+aXJlZyAmIEVTUF9JTlRSX0RDKQotCQkJCQlicmVhazsKKwkJCWlmICgoKGVzcC0+c3JlZyAmIEVTUF9TVEFUX1BNQVNLKSAhPSBFU1BfRE9QKSAmJgorCQkJICAgICgoZXNwLT5zcmVnICYgRVNQX1NUQVRfUE1BU0spICE9IEVTUF9NT1ApKQorCQkJCWJyZWFrOwogCi0JCQkJc2NzaV9lc3BfY21kKGVzcCwgRVNQX0NNRF9USSk7Ci0JCQl9Ci0JCX0gZWxzZSB7CiAJCQllc3AtPmlyZWcgPSBlc3BfcmVhZDgoRVNQX0lOVFJQVCk7Ci0JCQlpZiAoZXNwLT5pcmVnICYgRVNQX0lOVFJfREMpCisJCQlpZiAoKGVzcC0+aXJlZyAmIChFU1BfSU5UUl9EQyB8IEVTUF9JTlRSX0JTRVJWKSkgIT0KKwkJCSAgICBFU1BfSU5UUl9CU0VSVikKIAkJCQlicmVhazsKIAotCQkJbiA9IE1BQ19FU1BfRklGT19TSVpFIC0gbjsKKwkJCW4gPSBNQUNfRVNQX0ZJRk9fU0laRSAtCisJCQkgICAgKGVzcF9yZWFkOChFU1BfRkZMQUdTKSAmIEVTUF9GRl9GQllURVMpOwogCQkJaWYgKG4gPiBlc3BfY291bnQpCiAJCQkJbiA9IGVzcF9jb3VudDsKIApAQCAtNDI5LDcgKzQzMSw3IEBACiAJCX0KIAl9CiAKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJZW5hYmxlX2lycShlc3AtPmhvc3QtPmlycSk7CiB9CiAKIHN0YXRpYyBpbnQgbWFjX2VzcF9pcnFfcGVuZGluZyhzdHJ1Y3QgZXNwICplc3ApCkBAIC00OTIsMjkgKzQ5NCwxMiBAQAogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJc3RydWN0IGVzcCAqZXNwOwogCWludCBlcnI7Ci0JaW50IGNoaXBzX3ByZXNlbnQ7CiAJc3RydWN0IG1hY19lc3BfcHJpdiAqbWVwOwogCiAJaWYgKCFNQUNIX0lTX01BQykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlzd2l0Y2ggKG1hY2ludG9zaF9jb25maWctPnNjc2lfdHlwZSkgewotCWNhc2UgTUFDX1NDU0lfUVVBRFJBOgotCWNhc2UgTUFDX1NDU0lfUVVBRFJBMzoKLQkJY2hpcHNfcHJlc2VudCA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgTUFDX1NDU0lfUVVBRFJBMjoKLQkJaWYgKChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfUTkwMCkgfHwKLQkJICAgIChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfUTk1MCkpCi0JCQljaGlwc19wcmVzZW50ID0gMjsKLQkJZWxzZQotCQkJY2hpcHNfcHJlc2VudCA9IDE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWNoaXBzX3ByZXNlbnQgPSAwOwotCX0KLQotCWlmIChkZXYtPmlkICsgMSA+IGNoaXBzX3ByZXNlbnQpCisJaWYgKGRldi0+aWQgPiAxKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWhvc3QgPSBzY3NpX2hvc3RfYWxsb2ModHBudCwgc2l6ZW9mKHN0cnVjdCBlc3ApKTsKQEAgLTYzOSw1NSArNjI0LDI2IEBACiAJLnByb2JlICAgID0gZXNwX21hY19wcm9iZSwKIAkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChlc3BfbWFjX3JlbW92ZSksCiAJLmRyaXZlciAgID0gewotCQkubmFtZSAgICAgPSBEUlZfTU9EVUxFX05BTUUsCisJCS5uYW1lCT0gRFJWX01PRFVMRV9OQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWFjX2VzcF9pbml0KHZvaWQpCiB7Ci0JaW50IGVycjsKLQotCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZXNwX21hY19kcml2ZXIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpbnRlcm5hbF9wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKERSVl9NT0RVTEVfTkFNRSwgMCk7Ci0JaWYgKGludGVybmFsX3BkZXYgJiYgcGxhdGZvcm1fZGV2aWNlX2FkZChpbnRlcm5hbF9wZGV2KSkgewotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGludGVybmFsX3BkZXYpOwotCQlpbnRlcm5hbF9wZGV2ID0gTlVMTDsKLQl9Ci0JZXh0ZXJuYWxfcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhEUlZfTU9EVUxFX05BTUUsIDEpOwotCWlmIChleHRlcm5hbF9wZGV2ICYmIHBsYXRmb3JtX2RldmljZV9hZGQoZXh0ZXJuYWxfcGRldikpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChleHRlcm5hbF9wZGV2KTsKLQkJZXh0ZXJuYWxfcGRldiA9IE5VTEw7Ci0JfQotCi0JaWYgKGludGVybmFsX3BkZXYgfHwgZXh0ZXJuYWxfcGRldikgewotCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXNwX21hY19kcml2ZXIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZXNwX21hY19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWFjX2VzcF9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmVzcF9tYWNfZHJpdmVyKTsKLQotCWlmIChpbnRlcm5hbF9wZGV2KSB7Ci0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGludGVybmFsX3BkZXYpOwotCQlpbnRlcm5hbF9wZGV2ID0gTlVMTDsKLQl9Ci0JaWYgKGV4dGVybmFsX3BkZXYpIHsKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZXh0ZXJuYWxfcGRldik7Ci0JCWV4dGVybmFsX3BkZXYgPSBOVUxMOwotCX0KIH0KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNYWMgRVNQIFNDU0kgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJGaW5uIFRoYWluIDxmdGhhaW5AdGVsZWdyYXBoaWNzLmNvbS5hdT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06IiBEUlZfTU9EVUxFX05BTUUpOwogCiBtb2R1bGVfaW5pdChtYWNfZXNwX2luaXQpOwogbW9kdWxlX2V4aXQobWFjX2VzcF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYwppbmRleCBkOWI4Y2E1Li40MDk2NDhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKgkgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqIEZJTEUJCTogbWVnYXJhaWRfc2FzLmMKLSAqIFZlcnNpb24gICAgIDogdjAwLjAwLjA0LjEyLXJjMQorICogVmVyc2lvbiAgICAgOiB2MDAuMDAuMDQuMTcuMS1yYzEKICAqCiAgKiBBdXRob3JzOgogICoJKGVtYWlsLWlkIDogbWVnYXJhaWRsaW51eEBsc2kuY29tKQpAQCAtODQzLDYgKzg0Myw3IEBACiAJcHRocnUtPmx1biA9IHNjcC0+ZGV2aWNlLT5sdW47CiAJcHRocnUtPmNkYl9sZW4gPSBzY3AtPmNtZF9sZW47CiAJcHRocnUtPnRpbWVvdXQgPSAwOworCXB0aHJ1LT5wYWRfMCA9IDA7CiAJcHRocnUtPmZsYWdzID0gZmxhZ3M7CiAJcHRocnUtPmRhdGFfeGZlcl9sZW4gPSBzY3NpX2J1ZmZsZW4oc2NwKTsKIApAQCAtODc0LDYgKzg3NSwxMiBAQAogCQlwdGhydS0+c2dlX2NvdW50ID0gbWVnYXNhc19tYWtlX3NnbDMyKGluc3RhbmNlLCBzY3AsCiAJCQkJCQkgICAgICAmcHRocnUtPnNnbCk7CiAKKwlpZiAocHRocnUtPnNnZV9jb3VudCA+IGluc3RhbmNlLT5tYXhfbnVtX3NnZSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lZ2FzYXM6IERDREIgdHdvIG1hbnkgU0dFIE5VTT0leFxuIiwKKwkJCXB0aHJ1LT5zZ2VfY291bnQpOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKgogCSAqIFNlbnNlIGluZm8gc3BlY2lmaWMKIAkgKi8KQEAgLTEwMDAsNiArMTAwNywxMiBAQAogCX0gZWxzZQogCQlsZGlvLT5zZ2VfY291bnQgPSBtZWdhc2FzX21ha2Vfc2dsMzIoaW5zdGFuY2UsIHNjcCwgJmxkaW8tPnNnbCk7CiAKKwlpZiAobGRpby0+c2dlX2NvdW50ID4gaW5zdGFuY2UtPm1heF9udW1fc2dlKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWVnYXNhczogYnVpbGRfbGRfaW86IHNnZV9jb3VudCA9ICV4XG4iLAorCQkJbGRpby0+c2dlX2NvdW50KTsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyoKIAkgKiBTZW5zZSBpbmZvIHNwZWNpZmljCiAJICovCkBAIC0yMjUwLDYgKzIyNjMsNyBAQAogCWRjbWQtPnNnZV9jb3VudCA9IDE7CiAJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7CiAJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+cGFkXzAgPSAwOwogCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSBNRUdBU0FTX01BWF9QRCAqIHNpemVvZihzdHJ1Y3QgTVJfUERfTElTVCk7CiAJZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9QRF9MSVNUX1FVRVJZOwogCWRjbWQtPnNnbC5zZ2UzMlswXS5waHlzX2FkZHIgPSBjaV9oOwpAQCAtMjI5NCw2ICsyMzA4LDg2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIG1lZ2FzYXNfZ2V0X2xkX2xpc3RfaW5mbyAtCVJldHVybnMgRlcncyBsZF9saXN0IHN0cnVjdHVyZQorICogQGluc3RhbmNlOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyAqIEBsZF9saXN0OgkJCQlsZF9saXN0IHN0cnVjdHVyZQorICoKKyAqIElzc3VlcyBhbiBpbnRlcm5hbCBjb21tYW5kIChEQ01EKSB0byBnZXQgdGhlIEZXJ3MgY29udHJvbGxlciBQRAorICogbGlzdCBzdHJ1Y3R1cmUuICBUaGlzIGluZm9ybWF0aW9uIGlzIG1haW5seSB1c2VkIHRvIGZpbmQgb3V0IFNZU1RFTQorICogc3VwcG9ydGVkIGJ5IHRoZSBGVy4KKyAqLworc3RhdGljIGludAorbWVnYXNhc19nZXRfbGRfbGlzdChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCit7CisJaW50IHJldCA9IDAsIGxkX2luZGV4ID0gMCwgaWRzID0gMDsKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZDsKKwlzdHJ1Y3QgbWVnYXNhc19kY21kX2ZyYW1lICpkY21kOworCXN0cnVjdCBNUl9MRF9MSVNUICpjaTsKKwlkbWFfYWRkcl90IGNpX2ggPSAwOworCisJY21kID0gbWVnYXNhc19nZXRfY21kKGluc3RhbmNlKTsKKworCWlmICghY21kKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzX2dldF9sZF9saXN0OiBGYWlsZWQgdG8gZ2V0IGNtZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRjbWQgPSAmY21kLT5mcmFtZS0+ZGNtZDsKKworCWNpID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaW5zdGFuY2UtPnBkZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBNUl9MRF9MSVNUKSwKKwkJCQkmY2lfaCk7CisKKwlpZiAoIWNpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gYWxsb2MgbWVtIGluIGdldF9sZF9saXN0XG4iKTsKKwkJbWVnYXNhc19yZXR1cm5fY21kKGluc3RhbmNlLCBjbWQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQoY2ksIDAsIHNpemVvZigqY2kpKTsKKwltZW1zZXQoZGNtZC0+bWJveC5iLCAwLCBNRklfTUJPWF9TSVpFKTsKKworCWRjbWQtPmNtZCA9IE1GSV9DTURfRENNRDsKKwlkY21kLT5jbWRfc3RhdHVzID0gMHhGRjsKKwlkY21kLT5zZ2VfY291bnQgPSAxOworCWRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9SRUFEOworCWRjbWQtPnRpbWVvdXQgPSAwOworCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSBzaXplb2Yoc3RydWN0IE1SX0xEX0xJU1QpOworCWRjbWQtPm9wY29kZSA9IE1SX0RDTURfTERfR0VUX0xJU1Q7CisJZGNtZC0+c2dsLnNnZTMyWzBdLnBoeXNfYWRkciA9IGNpX2g7CisJZGNtZC0+c2dsLnNnZTMyWzBdLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgTVJfTERfTElTVCk7CisJZGNtZC0+cGFkXzAgID0gMDsKKworCWlmICghbWVnYXNhc19pc3N1ZV9wb2xsZWQoaW5zdGFuY2UsIGNtZCkpIHsKKwkJcmV0ID0gMDsKKwl9IGVsc2UgeworCQlyZXQgPSAtMTsKKwl9CisKKwkvKiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHdpbGwgZ2V0IHRoZSBpbnN0YW5jZSBQRCBMSVNUICovCisKKwlpZiAoKHJldCA9PSAwKSAmJiAoY2ktPmxkQ291bnQgPCBNQVhfTE9HSUNBTF9EUklWRVMpKSB7CisJCW1lbXNldChpbnN0YW5jZS0+bGRfaWRzLCAweGZmLCBNRUdBU0FTX01BWF9MRF9JRFMpOworCisJCWZvciAobGRfaW5kZXggPSAwOyBsZF9pbmRleCA8IGNpLT5sZENvdW50OyBsZF9pbmRleCsrKSB7CisJCQlpZiAoY2ktPmxkTGlzdFtsZF9pbmRleF0uc3RhdGUgIT0gMCkgeworCQkJCWlkcyA9IGNpLT5sZExpc3RbbGRfaW5kZXhdLnJlZi50YXJnZXRJZDsKKwkJCQlpbnN0YW5jZS0+bGRfaWRzW2lkc10gPQorCQkJCQljaS0+bGRMaXN0W2xkX2luZGV4XS5yZWYudGFyZ2V0SWQ7CisJCQl9CisJCX0KKwl9CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGluc3RhbmNlLT5wZGV2LAorCQkJCXNpemVvZihzdHJ1Y3QgTVJfTERfTElTVCksCisJCQkJY2ksCisJCQkJY2lfaCk7CisKKwltZWdhc2FzX3JldHVybl9jbWQoaW5zdGFuY2UsIGNtZCk7CisJcmV0dXJuIHJldDsKK30KKwogLyoqCiAgKiBtZWdhc2FzX2dldF9jb250cm9sbGVyX2luZm8gLQlSZXR1cm5zIEZXJ3MgY29udHJvbGxlciBzdHJ1Y3R1cmUKICAqIEBpbnN0YW5jZToJCQkJQWRhcHRlciBzb2Z0IHN0YXRlCkBAIC0yMzM5LDYgKzI0MzMsNyBAQAogCWRjbWQtPnNnZV9jb3VudCA9IDE7CiAJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7CiAJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+cGFkXzAgPSAwOwogCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfY3RybF9pbmZvKTsKIAlkY21kLT5vcGNvZGUgPSBNUl9EQ01EX0NUUkxfR0VUX0lORk87CiAJZGNtZC0+c2dsLnNnZTMyWzBdLnBoeXNfYWRkciA9IGNpX2g7CkBAIC0yNTkwLDYgKzI2ODUsOSBAQAogCQkoTUVHQVNBU19NQVhfUEQgKiBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfcGRfbGlzdCkpKTsKIAltZWdhc2FzX2dldF9wZF9saXN0KGluc3RhbmNlKTsKIAorCW1lbXNldChpbnN0YW5jZS0+bGRfaWRzLCAweGZmLCBNRUdBU0FTX01BWF9MRF9JRFMpOworCW1lZ2FzYXNfZ2V0X2xkX2xpc3QoaW5zdGFuY2UpOworCiAJY3RybF9pbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1lZ2FzYXNfY3RybF9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAKIAkvKgpAQCAtMjcxNCw2ICsyODEyLDcgQEAKIAlkY21kLT5zZ2VfY291bnQgPSAxOwogCWRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9SRUFEOwogCWRjbWQtPnRpbWVvdXQgPSAwOworCWRjbWQtPnBhZF8wID0gMDsKIAlkY21kLT5kYXRhX3hmZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBtZWdhc2FzX2V2dF9sb2dfaW5mbyk7CiAJZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9DVFJMX0VWRU5UX0dFVF9JTkZPOwogCWRjbWQtPnNnbC5zZ2UzMlswXS5waHlzX2FkZHIgPSBlbF9pbmZvX2g7CkBAIC0yODI4LDYgKzI5MjcsNyBAQAogCWRjbWQtPnNnZV9jb3VudCA9IDE7CiAJZGNtZC0+ZmxhZ3MgPSBNRklfRlJBTUVfRElSX1JFQUQ7CiAJZGNtZC0+dGltZW91dCA9IDA7CisJZGNtZC0+cGFkXzAgPSAwOwogCWRjbWQtPmRhdGFfeGZlcl9sZW4gPSBzaXplb2Yoc3RydWN0IG1lZ2FzYXNfZXZ0X2RldGFpbCk7CiAJZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9DVFJMX0VWRU5UX1dBSVQ7CiAJZGNtZC0+bWJveC53WzBdID0gc2VxX251bTsKQEAgLTMxNjYsNiArMzI2Niw3IEBACiAJZGNtZC0+c2dlX2NvdW50ID0gMDsKIAlkY21kLT5mbGFncyA9IE1GSV9GUkFNRV9ESVJfTk9ORTsKIAlkY21kLT50aW1lb3V0ID0gMDsKKwlkY21kLT5wYWRfMCA9IDA7CiAJZGNtZC0+ZGF0YV94ZmVyX2xlbiA9IDA7CiAJZGNtZC0+b3Bjb2RlID0gTVJfRENNRF9DVFJMX0NBQ0hFX0ZMVVNIOwogCWRjbWQtPm1ib3guYlswXSA9IE1SX0ZMVVNIX0NUUkxfQ0FDSEUgfCBNUl9GTFVTSF9ESVNLX0NBQ0hFOwpAQCAtMzIwNSw2ICszMzA2LDcgQEAKIAlkY21kLT5zZ2VfY291bnQgPSAwOwogCWRjbWQtPmZsYWdzID0gTUZJX0ZSQU1FX0RJUl9OT05FOwogCWRjbWQtPnRpbWVvdXQgPSAwOworCWRjbWQtPnBhZF8wID0gMDsKIAlkY21kLT5kYXRhX3hmZXJfbGVuID0gMDsKIAlkY21kLT5vcGNvZGUgPSBvcGNvZGU7CiAKQEAgLTM5ODQsNiArNDA4Niw3IEBACiAJc3RydWN0ICBTY3NpX0hvc3QgKmhvc3Q7CiAJc3RydWN0ICBzY3NpX2RldmljZSAqc2RldjE7CiAJdTE2ICAgICBwZF9pbmRleCA9IDA7CisJdTE2CWxkX2luZGV4ID0gMDsKIAlpbnQgICAgIGksIGosIGRvc2NhbiA9IDA7CiAJdTMyIHNlcV9udW07CiAJaW50IGVycm9yOwpAQCAtMzk5OSw4ICs0MTAyLDEyNCBAQAogCiAJCXN3aXRjaCAoaW5zdGFuY2UtPmV2dF9kZXRhaWwtPmNvZGUpIHsKIAkJY2FzZSBNUl9FVlRfUERfSU5TRVJURUQ6CisJCQlpZiAobWVnYXNhc19nZXRfcGRfbGlzdChpbnN0YW5jZSkgPT0gMCkgeworCQkJZm9yIChpID0gMDsgaSA8IE1FR0FTQVNfTUFYX1BEX0NIQU5ORUxTOyBpKyspIHsKKwkJCQlmb3IgKGogPSAwOworCQkJCWogPCBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUw7CisJCQkJaisrKSB7CisKKwkJCQlwZF9pbmRleCA9CisJCQkJKGkgKiBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUwpICsgajsKKworCQkJCXNkZXYxID0KKwkJCQlzY3NpX2RldmljZV9sb29rdXAoaG9zdCwgaSwgaiwgMCk7CisKKwkJCQlpZiAoaW5zdGFuY2UtPnBkX2xpc3RbcGRfaW5kZXhdLmRyaXZlU3RhdGUKKwkJCQkJCT09IE1SX1BEX1NUQVRFX1NZU1RFTSkgeworCQkJCQkJaWYgKCFzZGV2MSkgeworCQkJCQkJc2NzaV9hZGRfZGV2aWNlKGhvc3QsIGksIGosIDApOworCQkJCQkJfQorCisJCQkJCWlmIChzZGV2MSkKKwkJCQkJCXNjc2lfZGV2aWNlX3B1dChzZGV2MSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQl9CisJCQlkb3NjYW4gPSAwOworCQkJYnJlYWs7CisKIAkJY2FzZSBNUl9FVlRfUERfUkVNT1ZFRDoKKwkJCWlmIChtZWdhc2FzX2dldF9wZF9saXN0KGluc3RhbmNlKSA9PSAwKSB7CisJCQltZWdhc2FzX2dldF9wZF9saXN0KGluc3RhbmNlKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBNRUdBU0FTX01BWF9QRF9DSEFOTkVMUzsgaSsrKSB7CisJCQkJZm9yIChqID0gMDsKKwkJCQlqIDwgTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMOworCQkJCWorKykgeworCisJCQkJcGRfaW5kZXggPQorCQkJCShpICogTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMKSArIGo7CisKKwkJCQlzZGV2MSA9CisJCQkJc2NzaV9kZXZpY2VfbG9va3VwKGhvc3QsIGksIGosIDApOworCisJCQkJaWYgKGluc3RhbmNlLT5wZF9saXN0W3BkX2luZGV4XS5kcml2ZVN0YXRlCisJCQkJCT09IE1SX1BEX1NUQVRFX1NZU1RFTSkgeworCQkJCQlpZiAoc2RldjEpIHsKKwkJCQkJCXNjc2lfZGV2aWNlX3B1dChzZGV2MSk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoc2RldjEpIHsKKwkJCQkJCXNjc2lfcmVtb3ZlX2RldmljZShzZGV2MSk7CisJCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOworCQkJCQl9CisJCQkJfQorCQkJCX0KKwkJCX0KKwkJCX0KKwkJCWRvc2NhbiA9IDA7CisJCQlicmVhazsKKworCQljYXNlIE1SX0VWVF9MRF9PRkZMSU5FOgorCQljYXNlIE1SX0VWVF9MRF9ERUxFVEVEOgorCQkJbWVnYXNhc19nZXRfbGRfbGlzdChpbnN0YW5jZSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgTUVHQVNBU19NQVhfTERfQ0hBTk5FTFM7IGkrKykgeworCQkJCWZvciAoaiA9IDA7CisJCQkJaiA8IE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTDsKKwkJCQlqKyspIHsKKworCQkJCWxkX2luZGV4ID0KKwkJCQkoaSAqIE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTCkgKyBqOworCisJCQkJc2RldjEgPSBzY3NpX2RldmljZV9sb29rdXAoaG9zdCwKKwkJCQkJaSArIE1FR0FTQVNfTUFYX0xEX0NIQU5ORUxTLAorCQkJCQlqLAorCQkJCQkwKTsKKworCQkJCWlmIChpbnN0YW5jZS0+bGRfaWRzW2xkX2luZGV4XSAhPSAweGZmKSB7CisJCQkJCWlmIChzZGV2MSkgeworCQkJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYxKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChzZGV2MSkgeworCQkJCQkJc2NzaV9yZW1vdmVfZGV2aWNlKHNkZXYxKTsKKwkJCQkJCXNjc2lfZGV2aWNlX3B1dChzZGV2MSk7CisJCQkJCX0KKwkJCQl9CisJCQkJfQorCQkJfQorCQkJZG9zY2FuID0gMDsKKwkJCWJyZWFrOworCQljYXNlIE1SX0VWVF9MRF9DUkVBVEVEOgorCQkJbWVnYXNhc19nZXRfbGRfbGlzdChpbnN0YW5jZSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgTUVHQVNBU19NQVhfTERfQ0hBTk5FTFM7IGkrKykgeworCQkJCWZvciAoaiA9IDA7CisJCQkJCWogPCBNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUw7CisJCQkJCWorKykgeworCQkJCQlsZF9pbmRleCA9CisJCQkJCShpICogTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMKSArIGo7CisKKwkJCQkJc2RldjEgPSBzY3NpX2RldmljZV9sb29rdXAoaG9zdCwKKwkJCQkJCWkrTUVHQVNBU19NQVhfTERfQ0hBTk5FTFMsCisJCQkJCQlqLCAwKTsKKworCQkJCQlpZiAoaW5zdGFuY2UtPmxkX2lkc1tsZF9pbmRleF0gIT0KKwkJCQkJCQkJMHhmZikgeworCQkJCQkJaWYgKCFzZGV2MSkgeworCQkJCQkJCXNjc2lfYWRkX2RldmljZShob3N0LAorCQkJCQkJCQlpICsgMiwKKwkJCQkJCQkJaiwgMCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJaWYgKHNkZXYxKSB7CisJCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZG9zY2FuID0gMDsKKwkJCWJyZWFrOwogCQljYXNlIE1SX0VWVF9DVFJMX0hPU1RfQlVTX1NDQU5fUkVRVUVTVEVEOgorCQljYXNlIE1SX0VWVF9GT1JFSUdOX0NGR19JTVBPUlRFRDoKIAkJCWRvc2NhbiA9IDE7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTQwMzUsNiArNDI1NCwzMSBAQAogCQkJCX0KIAkJCX0KIAkJfQorCisJCW1lZ2FzYXNfZ2V0X2xkX2xpc3QoaW5zdGFuY2UpOworCQlmb3IgKGkgPSAwOyBpIDwgTUVHQVNBU19NQVhfTERfQ0hBTk5FTFM7IGkrKykgeworCQkJZm9yIChqID0gMDsgaiA8IE1FR0FTQVNfTUFYX0RFVl9QRVJfQ0hBTk5FTDsgaisrKSB7CisJCQkJbGRfaW5kZXggPQorCQkJCShpICogTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMKSArIGo7CisKKwkJCQlzZGV2MSA9IHNjc2lfZGV2aWNlX2xvb2t1cChob3N0LAorCQkJCQlpK01FR0FTQVNfTUFYX0xEX0NIQU5ORUxTLCBqLCAwKTsKKwkJCQlpZiAoaW5zdGFuY2UtPmxkX2lkc1tsZF9pbmRleF0gIT0gMHhmZikgeworCQkJCQlpZiAoIXNkZXYxKSB7CisJCQkJCQlzY3NpX2FkZF9kZXZpY2UoaG9zdCwKKwkJCQkJCQkJaSsyLAorCQkJCQkJCQlqLCAwKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXNjc2lfZGV2aWNlX3B1dChzZGV2MSk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoc2RldjEpIHsKKwkJCQkJCXNjc2lfcmVtb3ZlX2RldmljZShzZGV2MSk7CisJCQkJCQlzY3NpX2RldmljZV9wdXQoc2RldjEpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CiAJfQogCiAJaWYgKCBpbnN0YW5jZS0+YWVuX2NtZCAhPSBOVUxMICkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oCmluZGV4IDcyYjI4ZTQuLjlkOGI2YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaAorKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgKQEAgLTE4LDkgKzE4LDkgQEAKIC8qCiAgKiBNZWdhUkFJRCBTQVMgRHJpdmVyIG1ldGEgZGF0YQogICovCi0jZGVmaW5lIE1FR0FTQVNfVkVSU0lPTgkJCQkiMDAuMDAuMDQuMTItcmMxIgotI2RlZmluZSBNRUdBU0FTX1JFTERBVEUJCQkJIlNlcC4gMTcsIDIwMDkiCi0jZGVmaW5lIE1FR0FTQVNfRVhUX1ZFUlNJT04JCQkiVGh1IFNlcC4gMTcgMTE6NDE6NTEgUFNUIDIwMDkiCisjZGVmaW5lIE1FR0FTQVNfVkVSU0lPTgkJCSIwMC4wMC4wNC4xNy4xLXJjMSIKKyNkZWZpbmUgTUVHQVNBU19SRUxEQVRFCQkJIk9jdC4gMjksIDIwMDkiCisjZGVmaW5lIE1FR0FTQVNfRVhUX1ZFUlNJT04JCSJUaHUuIE9jdC4gMjksIDExOjQxOjUxIFBTVCAyMDA5IgogCiAvKgogICogRGV2aWNlIElEcwpAQCAtMTE3LDYgKzExNyw3IEBACiAjZGVmaW5lIE1GSV9DTURfU1RQCQkJCTB4MDgKIAogI2RlZmluZSBNUl9EQ01EX0NUUkxfR0VUX0lORk8JCQkweDAxMDEwMDAwCisjZGVmaW5lIE1SX0RDTURfTERfR0VUX0xJU1QJCQkweDAzMDEwMDAwCiAKICNkZWZpbmUgTVJfRENNRF9DVFJMX0NBQ0hFX0ZMVVNICQkweDAxMTAxMDAwCiAjZGVmaW5lIE1SX0ZMVVNIX0NUUkxfQ0FDSEUJCQkweDAxCkBAIC0zNDksNiArMzUwLDMyIEBACiAJdTggICAgICAgICAgICAgZHJpdmVTdGF0ZTsKIH0gX19wYWNrZWQ7CiAKKyAvKgorICogZGVmaW5lcyB0aGUgbG9naWNhbCBkcml2ZSByZWZlcmVuY2Ugc3RydWN0dXJlCisgKi8KK3VuaW9uICBNUl9MRF9SRUYgeworCXN0cnVjdCB7CisJCXU4ICAgICAgdGFyZ2V0SWQ7CisJCXU4ICAgICAgcmVzZXJ2ZWQ7CisJCXUxNiAgICAgc2VxTnVtOworCX07CisJdTMyICAgICByZWY7Cit9IF9fcGFja2VkOworCisvKgorICogZGVmaW5lcyB0aGUgbG9naWNhbCBkcml2ZSBsaXN0IHN0cnVjdHVyZQorICovCitzdHJ1Y3QgTVJfTERfTElTVCB7CisJdTMyICAgICBsZENvdW50OworCXUzMiAgICAgcmVzZXJ2ZWQ7CisJc3RydWN0IHsKKwkJdW5pb24gTVJfTERfUkVGICAgcmVmOworCQl1OCAgICAgICAgICBzdGF0ZTsKKwkJdTggICAgICAgICAgcmVzZXJ2ZWRbM107CisJCXU2NCAgICAgICAgIHNpemU7CisJfSBsZExpc3RbTUFYX0xPR0lDQUxfRFJJVkVTXTsKK30gX19wYWNrZWQ7CisKIC8qCiAgKiBTQVMgY29udHJvbGxlciBwcm9wZXJ0aWVzCiAgKi8KQEAgLTYzNyw2ICs2NjQsOCBAQAogI2RlZmluZSBNRUdBU0FTX01BWF9MRAkJCQk2NAogI2RlZmluZSBNRUdBU0FTX01BWF9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgKE1FR0FTQVNfTUFYX1BEX0NIQU5ORUxTICogXAogCQkJCQkJTUVHQVNBU19NQVhfREVWX1BFUl9DSEFOTkVMKQorI2RlZmluZSBNRUdBU0FTX01BWF9MRF9JRFMJCQkoTUVHQVNBU19NQVhfTERfQ0hBTk5FTFMgKiBcCisJCQkJCQlNRUdBU0FTX01BWF9ERVZfUEVSX0NIQU5ORUwpCiAKICNkZWZpbmUgTUVHQVNBU19EQkdfTFZMCQkJCTEKIApAQCAtMTE4Nyw2ICsxMjE2LDcgQEAKIAlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVnX3NldDsKIAogCXN0cnVjdCBtZWdhc2FzX3BkX2xpc3QgICAgICAgICAgcGRfbGlzdFtNRUdBU0FTX01BWF9QRF07CisJdTggICAgIGxkX2lkc1tNRUdBU0FTX01BWF9MRF9JRFNdOwogCXM4IGluaXRfaWQ7CiAKIAl1MTYgbWF4X251bV9zZ2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9LY29uZmlnIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZwppbmRleCA3MGM0YzI0Li5iYThlMTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWcKQEAgLTQ0LDYgKzQ0LDcgQEAKIAl0cmlzdGF0ZSAiTFNJIE1QVCBGdXNpb24gU0FTIDIuMCBEZXZpY2UgRHJpdmVyIgogCWRlcGVuZHMgb24gUENJICYmIFNDU0kKIAlzZWxlY3QgU0NTSV9TQVNfQVRUUlMKKwlzZWxlY3QgUkFJRF9BVFRSUwogCS0tLWhlbHAtLS0KIAlUaGlzIGRyaXZlciBzdXBwb3J0cyBQQ0ktRXhwcmVzcyBTQVMgNkdiL3MgSG9zdCBBZGFwdGVycy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTIuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmgKaW5kZXggOTE0MTY4MS4uOTk1OGQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTIuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oCkBAIC04LDcgKzgsNyBAQAogICogICAgICAgICAgICAgICAgICBzY2F0dGVyL2dhdGhlciBmb3JtYXRzLgogICogIENyZWF0aW9uIERhdGU6ICBKdW5lIDIxLCAyMDA2CiAgKgotICogIG1waTIuaCBWZXJzaW9uOiAgMDIuMDAuMTMKKyAqICBtcGkyLmggVmVyc2lvbjogIDAyLjAwLjE0CiAgKgogICogIFZlcnNpb24gSGlzdG9yeQogICogIC0tLS0tLS0tLS0tLS0tLQpAQCAtNTMsNiArNTMsMTAgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzIHJlc2VydmVkLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgUkFJRCBBY2NlbGVyYXRvciBmdW5jdGlvbmFsaXR5LgogICogIDA3LTMwLTA5ICAwMi4wMC4xMyAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAxMC0yOC0wOSAgMDIuMDAuMTQgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNU0kteCBpbmRleCBtYXNrIGFuZCBzaGlmdCBmb3IgUmVwbHkgUG9zdCBIb3N0CisgKiAgICAgICAgICAgICAgICAgICAgICBJbmRleCByZWdpc3Rlci4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGZ1bmN0aW9uIGNvZGUgZm9yIEhvc3QgQmFzZWQgRGlzY292ZXJ5IEFjdGlvbi4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTc4LDcgKzgyLDcgQEAKICNkZWZpbmUgTVBJMl9WRVJTSU9OXzAyXzAwICAgICAgICAgICAgICAgICAgKDB4MDIwMCkKIAogLyogdmVyc2lvbmluZyBmb3IgdGhpcyBNUEkgaGVhZGVyIHNldCAqLwotI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQgICAgICAgICAgICAoMHgwRCkKKyNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUICAgICAgICAgICAgKDB4MEUpCiAjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fREVWICAgICAgICAgICAgICgweDAwKQogI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVRfTUFTSyAgICAgICAoMHhGRjAwKQogI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVRfU0hJRlQgICAgICAoOCkKQEAgLTIzMiw5ICsyMzYsMTIgQEAKICNkZWZpbmUgTVBJMl9SRVBMWV9GUkVFX0hPU1RfSU5ERVhfT0ZGU0VUICAgICAgICgweDAwMDAwMDQ4KQogCiAvKgotICogT2Zmc2V0IGZvciB0aGUgUmVwbHkgRGVzY3JpcHRvciBQb3N0IFF1ZXVlCisgKiBEZWZpbmVzIGZvciB0aGUgUmVwbHkgRGVzY3JpcHRvciBQb3N0IFF1ZXVlCiAgKi8KICNkZWZpbmUgTVBJMl9SRVBMWV9QT1NUX0hPU1RfSU5ERVhfT0ZGU0VUICAgICAgICgweDAwMDAwMDZDKQorI2RlZmluZSBNUEkyX1JFUExZX1BPU1RfSE9TVF9JTkRFWF9NQVNLICAgICAgICAgKDB4MDBGRkZGRkYpCisjZGVmaW5lIE1QSTJfUlBISV9NU0lYX0lOREVYX01BU0sgICAgICAgICAgICAgICAoMHhGRjAwMDAwMCkKKyNkZWZpbmUgTVBJMl9SUEhJX01TSVhfSU5ERVhfU0hJRlQgICAgICAgICAgICAgICgyNCkKIAogLyoKICAqIERlZmluZXMgZm9yIHRoZSBIQ0JTaXplIGFuZCBhZGRyZXNzCkBAIC00OTcsMTIgKzUwNCwxMyBAQAogI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1RBUkdFVF9DTURfQlVGX0JBU0VfUE9TVCAgICAgICgweDI0KSAvKiBUYXJnZXQgQ29tbWFuZCBCdWZmZXIgUG9zdCBCYXNlICovCiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fVEFSR0VUX0NNRF9CVUZfTElTVF9QT1NUICAgICAgKDB4MjUpIC8qIFRhcmdldCBDb21tYW5kIEJ1ZmZlciBQb3N0IExpc3QgKi8KICNkZWZpbmUgTVBJMl9GVU5DVElPTl9SQUlEX0FDQ0VMRVJBVE9SICAgICAgICAgICAgICAoMHgyQykgLyogUkFJRCBBY2NlbGVyYXRvciovCisvKiBIb3N0IEJhc2VkIERpc2NvdmVyeSBBY3Rpb24gKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9IT1NUX0JBU0VEX0RJU0NPVkVSWV9BQ1RJT04gICAoMHgyRikKIAogCiAKIC8qIERvb3JiZWxsIGZ1bmN0aW9ucyAqLwogI2RlZmluZSBNUEkyX0ZVTkNUSU9OX0lPQ19NRVNTQUdFX1VOSVRfUkVTRVQgICAgICAgICgweDQwKQotLyogI2RlZmluZSBNUEkyX0ZVTkNUSU9OX0lPX1VOSVRfUkVTRVQgICAgICAgICAgICAgICAgICgweDQxKSAqLwogI2RlZmluZSBNUEkyX0ZVTkNUSU9OX0hBTkRTSEFLRSAgICAgICAgICAgICAgICAgICAgICgweDQyKQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaAppbmRleCAxNjExYzU3Li5jZjBhYzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfY25mZy5oCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgVGl0bGU6ICBNUEkgQ29uZmlndXJhdGlvbiBtZXNzYWdlcyBhbmQgcGFnZXMKICAqICBDcmVhdGlvbiBEYXRlOiAgTm92ZW1iZXIgMTAsIDIwMDYKICAqCi0gKiAgICBtcGkyX2NuZmcuaCBWZXJzaW9uOiAgMDIuMDAuMTIKKyAqICAgIG1waTJfY25mZy5oIFZlcnNpb246ICAwMi4wMC4xMwogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTEwNyw2ICsxMDcsOCBAQAogICogICAgICAgICAgICAgICAgICAgICAgdG8gU0FTIERldmljZSBQYWdlIDAgRmxhZ3MgZmllbGQuCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBQaHlJbmZvIGRlZmluZXMgZm9yIHBvd2VyIGNvbmRpdGlvbi4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIEV0aGVybmV0IGNvbmZpZ3VyYXRpb24gcGFnZXMuCisgKiAgMTAtMjgtMDkgIDAyLjAwLjEzICBBZGRlZCBNUEkyX0lPVU5JVFBBR0UxX0VOQUJMRV9IT1NUX0JBU0VEX0RJU0NPVkVSWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFNBUyBQSFkgUGFnZSA0IHN0cnVjdHVyZSBhbmQgZGVmaW5lcy4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTcxMiw2ICs3MTQsNyBAQAogI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UxX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgICAoMHgwNCkKIAogLyogSU8gVW5pdCBQYWdlIDEgRmxhZ3MgZGVmaW5lcyAqLworI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UxX0VOQUJMRV9IT1NUX0JBU0VEX0RJU0NPVkVSWSAgICAoMHgwMDAwMDgwMCkKICNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFMV9NQVNLX1NBVEFfV1JJVEVfQ0FDSEUgICAgICAgICAgKDB4MDAwMDA2MDApCiAjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTFfRU5BQkxFX1NBVEFfV1JJVEVfQ0FDSEUgICAgICAgICgweDAwMDAwMDAwKQogI2RlZmluZSBNUEkyX0lPVU5JVFBBR0UxX0RJU0FCTEVfU0FUQV9XUklURV9DQUNIRSAgICAgICAoMHgwMDAwMDIwMCkKQEAgLTIyOTEsNiArMjI5NCwyNiBAQAogI2RlZmluZSBNUEkyX1NBU1BIWTNfUEFHRVZFUlNJT04gICAgICAgICAgICAoMHgwMCkKIAogCisvKiBTQVMgUEhZIFBhZ2UgNCAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9TQVNfUEhZXzQgeworICAgIE1QSTJfQ09ORklHX0VYVEVOREVEX1BBR0VfSEVBREVSICAgIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDBCICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbEZyYW1lWzI4XTsgICAgICAgICAgIC8qIDB4MEMgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9TQVNfUEhZXzQsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9TQVNfUEhZXzQsCisgIE1waTJTYXNQaHlQYWdlNF90LCBNUEkyX1BPSU5URVIgcE1waTJTYXNQaHlQYWdlNF90OworCisjZGVmaW5lIE1QSTJfU0FTUEhZNF9QQUdFVkVSU0lPTiAgICAgICAgICAgICgweDAwKQorCisvKiB2YWx1ZXMgZm9yIHRoZSBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU1BIWTRfRkxBR1NfRlJBTUVfVkFMSUQgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1NBU1BIWTRfRkxBR1NfU0FUQV9GUkFNRSAgICAgICAgICgweDAxKQorCisKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgIFNBUyBQb3J0IENvbmZpZyBQYWdlcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2hpc3RvcnkudHh0IGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaGlzdG9yeS50eHQKaW5kZXggNjVmY2FhMy4uYzRhZGY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaGlzdG9yeS50eHQKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaGlzdG9yeS50eHQKQEAgLTUsMjMgKzUsMjQgQEAKICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSBMU0kgQ29ycG9yYXRpb24uCiAKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBIZWFkZXIgU2V0IFJlbGVhc2UgVmVyc2lvbjogICAgMDIuMDAuMTIKLSBIZWFkZXIgU2V0IFJlbGVhc2UgRGF0ZTogICAgICAgMDUtMDYtMDkKKyBIZWFkZXIgU2V0IFJlbGVhc2UgVmVyc2lvbjogICAgMDIuMDAuMTQKKyBIZWFkZXIgU2V0IFJlbGVhc2UgRGF0ZTogICAgICAgMTAtMjgtMDkKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogIEZpbGVuYW1lICAgICAgICAgICAgICAgQ3VycmVudCB2ZXJzaW9uICAgICBQcmlvciB2ZXJzaW9uCiAgLS0tLS0tLS0tLSAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0gICAgIC0tLS0tLS0tLS0tLS0KLSBtcGkyLmggICAgICAgICAgICAgICAgIDAyLjAwLjEyICAgICAgICAgICAgMDIuMDAuMTEKLSBtcGkyX2NuZmcuaCAgICAgICAgICAgIDAyLjAwLjExICAgICAgICAgICAgMDIuMDAuMTAKLSBtcGkyX2luaXQuaCAgICAgICAgICAgIDAyLjAwLjA3ICAgICAgICAgICAgMDIuMDAuMDYKLSBtcGkyX2lvYy5oICAgICAgICAgICAgIDAyLjAwLjExICAgICAgICAgICAgMDIuMDAuMTAKLSBtcGkyX3JhaWQuaCAgICAgICAgICAgIDAyLjAwLjAzICAgICAgICAgICAgMDIuMDAuMDMKLSBtcGkyX3Nhcy5oICAgICAgICAgICAgIDAyLjAwLjAyICAgICAgICAgICAgMDIuMDAuMDIKKyBtcGkyLmggICAgICAgICAgICAgICAgIDAyLjAwLjE0ICAgICAgICAgICAgMDIuMDAuMTMKKyBtcGkyX2NuZmcuaCAgICAgICAgICAgIDAyLjAwLjEzICAgICAgICAgICAgMDIuMDAuMTIKKyBtcGkyX2luaXQuaCAgICAgICAgICAgIDAyLjAwLjA4ICAgICAgICAgICAgMDIuMDAuMDcKKyBtcGkyX2lvYy5oICAgICAgICAgICAgIDAyLjAwLjEzICAgICAgICAgICAgMDIuMDAuMTIKKyBtcGkyX3JhaWQuaCAgICAgICAgICAgIDAyLjAwLjA0ICAgICAgICAgICAgMDIuMDAuMDQKKyBtcGkyX3Nhcy5oICAgICAgICAgICAgIDAyLjAwLjAzICAgICAgICAgICAgMDIuMDAuMDIKICBtcGkyX3RhcmcuaCAgICAgICAgICAgIDAyLjAwLjAzICAgICAgICAgICAgMDIuMDAuMDMKLSBtcGkyX3Rvb2wuaCAgICAgICAgICAgIDAyLjAwLjAzICAgICAgICAgICAgMDIuMDAuMDIKKyBtcGkyX3Rvb2wuaCAgICAgICAgICAgIDAyLjAwLjA0ICAgICAgICAgICAgMDIuMDAuMDQKICBtcGkyX3R5cGUuaCAgICAgICAgICAgIDAyLjAwLjAwICAgICAgICAgICAgMDIuMDAuMDAKLSBtcGkyX3JhLmggICAgICAgICAgICAgIDAyLjAwLjAwCi0gbXBpMl9oaXN0b3J5LnR4dCAgICAgICAwMi4wMC4xMSAgICAgICAgICAgIDAyLjAwLjEyCisgbXBpMl9yYS5oICAgICAgICAgICAgICAwMi4wMC4wMCAgICAgICAgICAgIDAyLjAwLjAwCisgbXBpMl9oYmQuaCAgICAgICAgICAgICAwMi4wMC4wMAorIG1waTJfaGlzdG9yeS50eHQgICAgICAgMDIuMDAuMTQgICAgICAgICAgICAwMi4wMC4xMwogCiAKICAqICBEYXRlICAgICAgVmVyc2lvbiAgIERlc2NyaXB0aW9uCkBAIC02NSw2ICs2NiwxMSBAQAogICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9TQ1NJX0lPX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiBhbmQgbWFkZSB0aG9zZQogICogICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBSQUlEIEFjY2VsZXJhdG9yIGZ1bmN0aW9uYWxpdHkuCisgKiAgMDctMzAtMDkgIDAyLjAwLjEzICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDEwLTI4LTA5ICAwMi4wMC4xNCAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1TSS14IGluZGV4IG1hc2sgYW5kIHNoaWZ0IGZvciBSZXBseSBQb3N0IEhvc3QKKyAqICAgICAgICAgICAgICAgICAgICAgIEluZGV4IHJlZ2lzdGVyLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZnVuY3Rpb24gY29kZSBmb3IgSG9zdCBCYXNlZCBEaXNjb3ZlcnkgQWN0aW9uLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIG1waTJfY25mZy5oCkBAIC0xNTUsNiArMTYxLDE1IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBleHBhbmRlciByZWR1Y2VkIGZ1bmN0aW9uYWxpdHkgZGF0YSB0byBTQVMKICAqICAgICAgICAgICAgICAgICAgICAgIEV4cGFuZGVyIFBhZ2UgMC4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFNBUyBQSFkgUGFnZSAyIGFuZCBTQVMgUEhZIFBhZ2UgMy4KKyAqICAwNy0zMC0wOSAgMDIuMDAuMTIgIEFkZGVkIElPIFVuaXQgUGFnZSA3LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbmV3IGRldmljZSBpZHMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTQVMgSU8gVW5pdCBQYWdlIDUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBwYXJ0aWFsIGFuZCBzbHVtYmVyIHBvd2VyIG1hbmFnZW1lbnQgY2FwYWJsZSBmbGFncworICogICAgICAgICAgICAgICAgICAgICAgdG8gU0FTIERldmljZSBQYWdlIDAgRmxhZ3MgZmllbGQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBQaHlJbmZvIGRlZmluZXMgZm9yIHBvd2VyIGNvbmRpdGlvbi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIEV0aGVybmV0IGNvbmZpZ3VyYXRpb24gcGFnZXMuCisgKiAgMTAtMjgtMDkgIDAyLjAwLjEzICBBZGRlZCBNUEkyX0lPVU5JVFBBR0UxX0VOQUJMRV9IT1NUX0JBU0VEX0RJU0NPVkVSWS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFNBUyBQSFkgUGFnZSA0IHN0cnVjdHVyZSBhbmQgZGVmaW5lcy4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBtcGkyX2luaXQuaApAQCAtMTcyLDYgKzE4NywxMCBAQAogICogICAgICAgICAgICAgICAgICAgICAgUXVlcnkgQXN5bmNocm9ub3VzIEV2ZW50LgogICogICAgICAgICAgICAgICAgICAgICAgRGVmaW5lZCB0d28gbmV3IGJpdHMgaW4gdGhlIFNsb3RTdGF0dXMgZmllbGQgb2YgdGhlIFNDU0kKICAqICAgICAgICAgICAgICAgICAgICAgIEVuY2xvc3VyZSBQcm9jZXNzb3IgUmVxdWVzdCBhbmQgUmVwbHkuCisgKiAgMTAtMjgtMDkgIDAyLjAwLjA4ICBBZGRlZCBkZWZpbmVzIGZvciBkZWNvZGluZyB0aGUgUmVzcG9uc2VJbmZvIGJ5dGVzIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgYm90aCBTQ1NJIElPIEVycm9yIFJlcGx5IGFuZCBTQ1NJIFRhc2sgTWFuYWdlbWVudCBSZXBseS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFJlc3BvbnNlSW5mbyBmaWVsZCB0byBNUEkyX1NDU0lfVEFTS19NQU5BR0VfUkVQTFkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fT1ZFUkxBUFBFRF9UQUcgZGVmaW5lLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIG1waTJfaW9jLmgKQEAgLTI0Niw2ICsyNjUsMjAgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHR3byBuZXcgcmVhc29uIGNvZGVzIGZvciBTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2UKICAqICAgICAgICAgICAgICAgICAgICAgIEV2ZW50LgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbmV3IGV2ZW50OiBTQVMgUEhZIENvdW50ZXIuCisgKiAgMDctMzAtMDkgIDAyLjAwLjEyICBBZGRlZCBHUElPIEludGVycnVwdCBldmVudCBkZWZpbmUgYW5kIHN0cnVjdHVyZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9FWFRFTkRFRF9CVUZGRVIgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbmV3IHByb2R1Y3QgaWQgZmFtaWx5IGZvciAyMjA4LgorICogIDEwLTI4LTA5ICAwMi4wMC4xMyAgQWRkZWQgSG9zdE1TSXhWZWN0b3JzIGZpZWxkIHRvIE1QSTJfSU9DX0lOSVRfUkVRVUVTVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1heE1TSXhWZWN0b3JzIGZpZWxkIHRvIE1QSTJfSU9DX0ZBQ1RTX1JFUExZLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTWluRGV2SGFuZGxlIGZpZWxkIHRvIE1QSTJfSU9DX0ZBQ1RTX1JFUExZLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0hPU1RfQkFTRURfRElTQ09WRVJZLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9FVkVOVF9IT1NUX0JBU0VEX0RJU0NPVkVSWV9QSFkgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19OT19FWFBBTkRFUiBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBIb3N0IEJhc2VkIERpc2NvdmVyeSBQaHkgRXZlbnQgZGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGRlZmluZXMgZm9yIFByb2R1Y3RJRCBQcm9kdWN0IGZpZWxkCisgKiAgICAgICAgICAgICAgICAgICAgICAoTVBJMl9GV19IRUFERVJfUElEXykuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb2RpZmllZCB2YWx1ZXMgZm9yIFNBUyBQcm9kdWN0SUQgRmFtaWx5CisgKiAgICAgICAgICAgICAgICAgICAgICAoTVBJMl9GV19IRUFERVJfUElEX0ZBTUlMWV8pLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIG1waTJfcmFpZC5oCkBAIC0yNTYsNiArMjg5LDggQEAKICAqICAwNS0yMS0wOCAgMDIuMDAuMDMgIEFkZGVkIE1QSTJfUkFJRF9WT0xfQ1JFQVRJT05fTlVNX1BIWVNESVNLUyBzbyB0aGF0CiAgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgUGh5c0Rpc2sgYXJyYXkgaW4gTVBJMl9SQUlEX1ZPTFVNRV9DUkVBVElPTl9TVFJVQ1QKICAqICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBzaXplZCBieSB0aGUgYnVpbGQgZW52aXJvbm1lbnQuCisgKiAgMDctMzAtMDkgIDAyLjAwLjA0ICBBZGRlZCBwcm9wZXIgZGVmaW5lIGZvciB0aGUgVXNlIERlZmF1bHQgU2V0dGluZ3MgYml0IG9mCisgKiAgICAgICAgICAgICAgICAgICAgICBWb2x1bWVDcmVhdGlvbkZsYWdzIGFuZCBtYXJrZWQgdGhlIG9sZCBvbmUgYXMgb2Jzb2xldGUuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogbXBpMl9zYXMuaApAQCAtMjY0LDYgKzI5OSw4IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBDb250cm9sIFJlcXVlc3QuCiAgKiAgMTAtMDItMDggIDAyLjAwLjAyICBBZGRlZCBTZXQgSU9DIFBhcmFtZXRlciBPcGVyYXRpb24gdG8gU0FTIElPIFVuaXQgQ29udHJvbAogICogICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdC4KKyAqICAxMC0yOC0wOSAgMDIuMDAuMDMgIENoYW5nZWQgdGhlIHR5cGUgb2YgU0dMIGluIE1QSTJfU0FUQV9QQVNTVEhST1VHSF9SRVFVRVNUCisgKiAgICAgICAgICAgICAgICAgICAgICB0byBNUEkyX1NHRV9JT19VTklPTiBzaW5jZSBpdCBzdXBwb3J0cyBjaGFpbmVkIFNHTHMuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogbXBpMl90YXJnLmgKQEAgLTI4Myw2ICszMjAsMTAgQEAKICAqICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMuCiAgKiAgMDItMjktMDggIDAyLjAwLjAyICBNb2RpZmllZCB2YXJpb3VzIG5hbWVzIHRvIG1ha2UgdGhlbSAzMi1jaGFyYWN0ZXIgdW5pcXVlLgogICogIDA1LTA2LTA5ICAwMi4wMC4wMyAgQWRkZWQgSVNUV0kgUmVhZCBXcml0ZSBUb29sIGFuZCBEaWFnbm9zdGljIENMSSBUb29sLgorICogIDA3LTMwLTA5ICAwMi4wMC4wNCAgQWRkZWQgRXh0ZW5kZWRUeXBlIGZpZWxkIHRvIERpYWdub3N0aWNCdWZmZXJQb3N0IHJlcXVlc3QKKyAqICAgICAgICAgICAgICAgICAgICAgIGFuZCByZXBseSBtZXNzYWdlcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfRElBR19CVUZfVFlQRV9FWFRFTkRFRC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEluY3JlbWVudGVkIE1QSTJfRElBR19CVUZfVFlQRV9DT1VOVC4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBtcGkyX3R5cGUuaApAQCAtMjkzLDIwICszMzQsMjYgQEAKICAqICAwNS0wNi0wOSAgMDIuMDAuMDAgIEluaXRpYWwgdmVyc2lvbi4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCittcGkyX2hiZC5oCisgKiAgMTAtMjgtMDkgIDAyLjAwLjAwICBJbml0aWFsIHZlcnNpb24uCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCiBtcGkyX2hpc3RvcnkudHh0ICAgICAgICAgUGFydHMgbGlzdCBoaXN0b3J5CiAKLUZpbGVuYW1lICAgICAwMi4wMC4xMgotLS0tLS0tLS0tLSAgIC0tLS0tLS0tCi1tcGkyLmggICAgICAgMDIuMDAuMTIKLW1waTJfY25mZy5oICAwMi4wMC4xMQotbXBpMl9pbml0LmggIDAyLjAwLjA3Ci1tcGkyX2lvYy5oICAgMDIuMDAuMTEKLW1waTJfcmFpZC5oICAwMi4wMC4wMwotbXBpMl9zYXMuaCAgIDAyLjAwLjAyCi1tcGkyX3RhcmcuaCAgMDIuMDAuMDMKLW1waTJfdG9vbC5oICAwMi4wMC4wMwotbXBpMl90eXBlLmggIDAyLjAwLjAwCi1tcGkyX3JhLmggICAgMDIuMDAuMDAKK0ZpbGVuYW1lICAgICAwMi4wMC4xNCAgMDIuMDAuMTMgIDAyLjAwLjEyCistLS0tLS0tLS0tICAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLQorbXBpMi5oICAgICAgIDAyLjAwLjE0ICAwMi4wMC4xMyAgMDIuMDAuMTIKK21waTJfY25mZy5oICAwMi4wMC4xMyAgMDIuMDAuMTIgIDAyLjAwLjExCittcGkyX2luaXQuaCAgMDIuMDAuMDggIDAyLjAwLjA3ICAwMi4wMC4wNworbXBpMl9pb2MuaCAgIDAyLjAwLjEzICAwMi4wMC4xMiAgMDIuMDAuMTEKK21waTJfcmFpZC5oICAwMi4wMC4wNCAgMDIuMDAuMDQgIDAyLjAwLjAzCittcGkyX3Nhcy5oICAgMDIuMDAuMDMgIDAyLjAwLjAyICAwMi4wMC4wMgorbXBpMl90YXJnLmggIDAyLjAwLjAzICAwMi4wMC4wMyAgMDIuMDAuMDMKK21waTJfdG9vbC5oICAwMi4wMC4wNCAgMDIuMDAuMDQgIDAyLjAwLjAzCittcGkyX3R5cGUuaCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMAorbXBpMl9yYS5oICAgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAKK21waTJfaGJkLmggICAwMi4wMC4wMAogCiBGaWxlbmFtZSAgICAgMDIuMDAuMTEgIDAyLjAwLjEwICAwMi4wMC4wOSAgMDIuMDAuMDggIDAyLjAwLjA3ICAwMi4wMC4wNgogLS0tLS0tLS0tLSAgIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaAppbmRleCA1NjNlNTZkLi42NTQxOTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgVGl0bGU6ICBNUEkgU0NTSSBpbml0aWF0b3IgbW9kZSBtZXNzYWdlcyBhbmQgc3RydWN0dXJlcwogICogIENyZWF0aW9uIERhdGU6ICBKdW5lIDIzLCAyMDA2CiAgKgotICogICAgbXBpMl9pbml0LmggVmVyc2lvbjogIDAyLjAwLjA3CisgKiAgICBtcGkyX2luaXQuaCBWZXJzaW9uOiAgMDIuMDAuMDgKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC0yNyw2ICsyNywxMCBAQAogICogICAgICAgICAgICAgICAgICAgICAgUXVlcnkgQXN5bmNocm9ub3VzIEV2ZW50LgogICogICAgICAgICAgICAgICAgICAgICAgRGVmaW5lZCB0d28gbmV3IGJpdHMgaW4gdGhlIFNsb3RTdGF0dXMgZmllbGQgb2YgdGhlIFNDU0kKICAqICAgICAgICAgICAgICAgICAgICAgIEVuY2xvc3VyZSBQcm9jZXNzb3IgUmVxdWVzdCBhbmQgUmVwbHkuCisgKiAgMTAtMjgtMDkgIDAyLjAwLjA4ICBBZGRlZCBkZWZpbmVzIGZvciBkZWNvZGluZyB0aGUgUmVzcG9uc2VJbmZvIGJ5dGVzIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgYm90aCBTQ1NJIElPIEVycm9yIFJlcGx5IGFuZCBTQ1NJIFRhc2sgTWFuYWdlbWVudCBSZXBseS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFJlc3BvbnNlSW5mbyBmaWVsZCB0byBNUEkyX1NDU0lfVEFTS19NQU5BR0VfUkVQTFkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fT1ZFUkxBUFBFRF9UQUcgZGVmaW5lLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtMjU0LDYgKzI1OCwxMSBAQAogI2RlZmluZSBNUEkyX1NDU0lfU1RBVEVfQVVUT1NFTlNFX0ZBSUxFRCAgICAgICAgKDB4MDIpCiAjZGVmaW5lIE1QSTJfU0NTSV9TVEFURV9BVVRPU0VOU0VfVkFMSUQgICAgICAgICAoMHgwMSkKIAorLyogbWFza3MgYW5kIHNoaWZ0cyBmb3IgdGhlIFJlc3BvbnNlSW5mbyBmaWVsZCAqLworCisjZGVmaW5lIE1QSTJfU0NTSV9SSV9NQVNLX1JFQVNPTkNPREUgICAgICAgICAgICAoMHgwMDAwMDBGRikKKyNkZWZpbmUgTVBJMl9TQ1NJX1JJX1NISUZUX1JFQVNPTkNPREUgICAgICAgICAgICgwKQorCiAjZGVmaW5lIE1QSTJfU0NTSV9UQVNLVEFHX1VOS05PV04gICAgICAgICAgICAgICAoMHhGRkZGKQogCiAKQEAgLTMyNyw2ICszMzYsNyBAQAogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIElPQ1N0YXR1czsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLwogICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIElPQ0xvZ0luZm87ICAgICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLwogICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmF0aW9uQ291bnQ7ICAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlSW5mbzsgICAgICAgICAgICAgICAgICAgLyogMHgxOCAqLwogfSBNUEkyX1NDU0lfVEFTS19NQU5BR0VfUkVQTFksCiAgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQ1NJX1RBU0tfTUFOQUdFX1JFUExZLAogICBNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVwbHlfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU0NTSU1hbmFnZW1lbnRSZXBseV90OwpAQCAtMzM5LDggKzM0OSwyMCBAQAogI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fRkFJTEVEICAgICAgICAgICAgICAgICAoMHgwNSkKICNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX1NVQ0NFRURFRCAgICAgICAgICAgICAgKDB4MDgpCiAjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9UTV9JTlZBTElEX0xVTiAgICAgICAgICAgICgweDA5KQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fT1ZFUkxBUFBFRF9UQUcgICAgICAgICAoMHgwQSkKICNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX0lPX1FVRVVFRF9PTl9JT0MgICAgICAgICAgKDB4ODApCiAKKy8qIG1hc2tzIGFuZCBzaGlmdHMgZm9yIHRoZSBSZXNwb25zZUluZm8gZmllbGQgKi8KKworI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SSV9NQVNLX1JFQVNPTkNPREUgICAgICAgICAgICAoMHgwMDAwMDBGRikKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUklfU0hJRlRfUkVBU09OQ09ERSAgICAgICAgICAgKDApCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JJX01BU0tfQVJJMiAgICAgICAgICAgICAgICAgICgweDAwMDBGRjAwKQorI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9SSV9TSElGVF9BUkkyICAgICAgICAgICAgICAgICAoOCkKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUklfTUFTS19BUkkxICAgICAgICAgICAgICAgICAgKDB4MDBGRjAwMDApCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JJX1NISUZUX0FSSTEgICAgICAgICAgICAgICAgICgxNikKKyNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfUklfTUFTS19BUkkwICAgICAgICAgICAgICAgICAgKDB4RkYwMDAwMDApCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1JJX1NISUZUX0FSSTAgICAgICAgICAgICAgICAgICgyNCkKKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgU0NTSSBFbmNsb3N1cmUgUHJvY2Vzc29yIG1lc3NhZ2VzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2lvYy5oCmluZGV4IGVhNTFjZTguLjc1NDkzODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2lvYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2lvYy5oCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgVGl0bGU6ICBNUEkgSU9DLCBQb3J0LCBFdmVudCwgRlcgRG93bmxvYWQsIGFuZCBGVyBVcGxvYWQgbWVzc2FnZXMKICAqICBDcmVhdGlvbiBEYXRlOiAgT2N0b2JlciAxMSwgMjAwNgogICoKLSAqICBtcGkyX2lvYy5oIFZlcnNpb246ICAwMi4wMC4xMgorICogIG1waTJfaW9jLmggVmVyc2lvbjogIDAyLjAwLjEzCiAgKgogICogIFZlcnNpb24gSGlzdG9yeQogICogIC0tLS0tLS0tLS0tLS0tLQpAQCAtODcsNiArODcsMTcgQEAKICAqICAwNy0zMC0wOSAgMDIuMDAuMTIgIEFkZGVkIEdQSU8gSW50ZXJydXB0IGV2ZW50IGRlZmluZSBhbmQgc3RydWN0dXJlLgogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0VYVEVOREVEX0JVRkZFUiBkZWZpbmUuCiAgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBuZXcgcHJvZHVjdCBpZCBmYW1pbHkgZm9yIDIyMDguCisgKiAgMTAtMjgtMDkgIDAyLjAwLjEzICBBZGRlZCBIb3N0TVNJeFZlY3RvcnMgZmllbGQgdG8gTVBJMl9JT0NfSU5JVF9SRVFVRVNULgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTWF4TVNJeFZlY3RvcnMgZmllbGQgdG8gTVBJMl9JT0NfRkFDVFNfUkVQTFkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNaW5EZXZIYW5kbGUgZmllbGQgdG8gTVBJMl9JT0NfRkFDVFNfUkVQTFkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfSE9TVF9CQVNFRF9ESVNDT1ZFUlkuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0VWRU5UX0hPU1RfQkFTRURfRElTQ09WRVJZX1BIWSBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX05PX0VYUEFOREVSIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIEhvc3QgQmFzZWQgRGlzY292ZXJ5IFBoeSBFdmVudCBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZGVmaW5lcyBmb3IgUHJvZHVjdElEIFByb2R1Y3QgZmllbGQKKyAqICAgICAgICAgICAgICAgICAgICAgIChNUEkyX0ZXX0hFQURFUl9QSURfKS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkIHZhbHVlcyBmb3IgU0FTIFByb2R1Y3RJRCBGYW1pbHkKKyAqICAgICAgICAgICAgICAgICAgICAgIChNUEkyX0ZXX0hFQURFUl9QSURfRkFNSUxZXykuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC0xMTksOCArMTMwLDEwIEBACiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgTXNnVmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAvKiAweDBDICovCiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSGVhZGVyVmVyc2lvbjsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCiAgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDEwICovCi0gICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ2OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCi0gICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ3OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE4ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ2OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ3OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgSG9zdE1TSXhWZWN0b3JzOyAgICAgICAgICAgICAgICAvKiAweDE3ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ4OyAgICAgICAgICAgICAgICAgICAgICAvKiAweDE4ICovCiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgU3lzdGVtUmVxdWVzdEZyYW1lU2l6ZTsgICAgICAgICAvKiAweDFBICovCiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGg7ICAvKiAweDFDICovCiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVwbHlGcmVlUXVldWVEZXB0aDsgICAgICAgICAgICAvKiAweDFFICovCkBAIC0yMTUsNyArMjI4LDcgQEAKICAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNYXhDaGFpbkRlcHRoOyAgICAgICAgICAgICAgICAgIC8qIDB4MTQgKi8KICAgICBVOCAgICAgICAgICAgICAgICAgICAgICBXaG9Jbml0OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTUgKi8KICAgICBVOCAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZlBvcnRzOyAgICAgICAgICAgICAgICAgIC8qIDB4MTYgKi8KLSAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTcgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNYXhNU0l4VmVjdG9yczsgICAgICAgICAgICAgICAgIC8qIDB4MTcgKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0Q3JlZGl0OyAgICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0SUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MUEgKi8KICAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NDYXBhYmlsaXRpZXM7ICAgICAgICAgICAgICAgIC8qIDB4MUMgKi8KQEAgLTIzMyw3ICsyNDYsOCBAQAogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1heFZvbHVtZXM7ICAgICAgICAgICAgICAgICAgICAgLyogMHgzNyAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIE1heERldkhhbmRsZTsgICAgICAgICAgICAgICAgICAgLyogMHgzOCAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIE1heFBlcnNpc3RlbnRFbnRyaWVzOyAgICAgICAgICAgLyogMHgzQSAqLwotICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgzQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIE1pbkRldkhhbmRsZTsgICAgICAgICAgICAgICAgICAgLyogMHgzQyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgzRSAqLwogfSBNUEkyX0lPQ19GQUNUU19SRVBMWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0lPQ19GQUNUU19SRVBMWSwKICAgTXBpMklPQ0ZhY3RzUmVwbHlfdCwgTVBJMl9QT0lOVEVSIHBNcGkySU9DRmFjdHNSZXBseV90OwogCkBAIC0yNjksNiArMjgzLDcgQEAKIC8qIFByb2R1Y3RJRCBmaWVsZCB1c2VzIE1QSTJfRldfSEVBREVSX1BJRF8gKi8KIAogLyogSU9DQ2FwYWJpbGl0aWVzICovCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9IT1NUX0JBU0VEX0RJU0NPVkVSWSAgICgweDAwMDEwMDAwKQogI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfTVNJX1hfSU5ERVggICAgICAgICAgICAoMHgwMDAwODAwMCkKICNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1JBSURfQUNDRUxFUkFUT1IgICAgICAgKDB4MDAwMDQwMDApCiAjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9FVkVOVF9SRVBMQVkgICAgICAgICAgICgweDAwMDAyMDAwKQpAQCAtNDUzLDYgKzQ2OCw3IEBACiAjZGVmaW5lIE1QSTJfRVZFTlRfTE9HX0VOVFJZX0FEREVEICAgICAgICAgICAgICAgICAgKDB4MDAyMSkKICNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfUEhZX0NPVU5URVIgICAgICAgICAgICAgICAgICAoMHgwMDIyKQogI2RlZmluZSBNUEkyX0VWRU5UX0dQSU9fSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICgweDAwMjMpCisjZGVmaW5lIE1QSTJfRVZFTlRfSE9TVF9CQVNFRF9ESVNDT1ZFUllfUEhZICAgICAgICAgKDB4MDAyNCkKIAogCiAvKiBMb2cgRW50cnkgQWRkZWQgRXZlbnQgZGF0YSAqLwpAQCAtNzkzLDYgKzgwOSw3IEBACiAgIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50RGF0YVNhc1RvcG9sb2d5Q2hhbmdlTGlzdF90OwogCiAvKiB2YWx1ZXMgZm9yIHRoZSBFeHBTdGF0dXMgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19OT19FWFBBTkRFUiAgICAgICAgICAgICAgICAgICgweDAwKQogI2RlZmluZSBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX0FEREVEICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDEpCiAjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1RPUE9fRVNfTk9UX1JFU1BPTkRJTkcgICAgICAgICAgICAgICAoMHgwMikKICNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfVE9QT19FU19SRVNQT05ESU5HICAgICAgICAgICAgICAgICAgICgweDAzKQpAQCAtODc4LDYgKzg5NSw0NCBAQAogICogKi8KIAogCisvKiBIb3N0IEJhc2VkIERpc2NvdmVyeSBQaHkgRXZlbnQgZGF0YSAqLworCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9FVkVOVF9IQkRfUEhZX1NBUyB7CisgICAgVTggICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVOCAgICAgICAgICBOZWdvdGlhdGVkTGlua1JhdGU7ICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgIFBoeU51bTsgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgUGh5c2ljYWxQb3J0OyAgICAgICAgICAgICAgIC8qIDB4MDMgKi8KKyAgICBVMzIgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFU4ICAgICAgICAgIEluaXRpYWxGcmFtZVsyOF07ICAgICAgICAgICAvKiAweDA4ICovCit9IE1QSTJfRVZFTlRfSEJEX1BIWV9TQVMsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9IQkRfUEhZX1NBUywKKyAgTXBpMkV2ZW50SGJkUGh5U2FzX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkV2ZW50SGJkUGh5U2FzX3Q7CisKKy8qIHZhbHVlcyBmb3IgdGhlIEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfRVZFTlRfSEJEX1NBU19GTEFHU19GUkFNRV9WQUxJRCAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfRVZFTlRfSEJEX1NBU19GTEFHU19TQVRBX0ZSQU1FICAgICAgICAgKDB4MDEpCisKKy8qIHVzZSBNUEkyX1NBU19ORUdfTElOS19SQVRFXyBkZWZpbmVzIGZyb20gbXBpMl9jbmZnLmggZm9yCisgKiB0aGUgTmVnb3RpYXRlZExpbmtSYXRlIGZpZWxkICovCisKK3R5cGVkZWYgdW5pb24gX01QSTJfRVZFTlRfSEJEX0RFU0NSSVBUT1IgeworICAgIE1QSTJfRVZFTlRfSEJEX1BIWV9TQVMgICAgICBTYXM7Cit9IE1QSTJfRVZFTlRfSEJEX0RFU0NSSVBUT1IsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9FVkVOVF9IQkRfREVTQ1JJUFRPUiwKKyAgTXBpMkV2ZW50SGJkRGVzY3JpcHRvcl90LCBNUEkyX1BPSU5URVIgcE1waTJFdmVudEhiZERlc2NyaXB0b3JfdDsKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfRVZFTlRfREFUQV9IQkRfUEhZIHsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvclR5cGU7ICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAvKiAweDA0ICovCisgICAgTVBJMl9FVkVOVF9IQkRfREVTQ1JJUFRPUiAgIERlc2NyaXB0b3I7ICAgICAgICAgLyogMHgwOCAqLworfSBNUEkyX0VWRU5UX0RBVEFfSEJEX1BIWSwgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0RBVEFfSEJEX1BIWSwKKyAgTXBpMkV2ZW50RGF0YUhiZFBoeV90LCBNUEkyX1BPSU5URVIgcE1waTJFdmVudERhdGFNcGkyRXZlbnREYXRhSGJkUGh5X3Q7CisKKy8qIHZhbHVlcyBmb3IgdGhlIERlc2NyaXB0b3JUeXBlIGZpZWxkICovCisjZGVmaW5lIE1QSTJfRVZFTlRfSEJEX0RUX1NBUyAgICAgICAgICAgICAgICgweDAxKQorCisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIEV2ZW50QWNrIG1lc3NhZ2UKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMTI2LDEzICsxMTgxLDE3IEBACiAjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9UWVBFX01BU0sgICAgICAgICAgICAoMHhGMDAwKQogI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfVFlQRV9TQVMgICAgICAgICAgICAgKDB4MjAwMCkKIAotI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfUFJPRF9NQVNLICAgICAgICAgICAgKDB4MEYwMCkKLSNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX1BST0RfQSAgICAgICAgICAgICAgICgweDAwMDApCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9QUk9EX01BU0sgICAgICAgICAgICAgICAgICAgICgweDBGMDApCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9QUk9EX0EgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDApCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9QUk9EX01BU0sgICAgICAgICAgICAgICAgICAgICgweDBGMDApCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9QUk9EX1RBUkdFVF9JTklUSUFUT1JfU0NTSSAgICgweDAyMDApCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9QUk9EX0lSX1NDU0kgICAgICAgICAgICAgICAgICgweDA3MDApCisKIAogI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfRkFNSUxZX01BU0sgICAgICAgICAgKDB4MDBGRikKIC8qIFNBUyAqLwotI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfRkFNSUxZXzIxMDhfU0FTICAgICAgKDB4MDAxMCkKLSNkZWZpbmUgTVBJMl9GV19IRUFERVJfUElEX0ZBTUlMWV8yMjA4X1NBUyAgICAgICgweDAwMTEpCisjZGVmaW5lIE1QSTJfRldfSEVBREVSX1BJRF9GQU1JTFlfMjEwOF9TQVMgICAgICAoMHgwMDEzKQorI2RlZmluZSBNUEkyX0ZXX0hFQURFUl9QSURfRkFNSUxZXzIyMDhfU0FTICAgICAgKDB4MDAxNCkKIAogLyogdXNlIE1QSTJfSU9DRkFDVFNfUFJPVE9DT0xfIGRlZmluZXMgZm9yIFByb3RvY29sRmxhZ3MgZmllbGQgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfc2FzLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9zYXMuaAppbmRleCA4YTQyYjEzLi4yZDhhZWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9zYXMuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9zYXMuaApAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIFNlcmlhbCBBdHRhY2hlZCBTQ1NJIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zCiAgKiAgQ3JlYXRpb24gRGF0ZTogIEZlYnJ1YXJ5IDksIDIwMDcKICAqCi0gKiAgbXBpMi5oIFZlcnNpb246ICAwMi4wMC4wMgorICogIG1waTIuaCBWZXJzaW9uOiAgMDIuMDAuMDMKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC0xOCw2ICsxOCw4IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBDb250cm9sIFJlcXVlc3QuCiAgKiAgMTAtMDItMDggIDAyLjAwLjAyICBBZGRlZCBTZXQgSU9DIFBhcmFtZXRlciBPcGVyYXRpb24gdG8gU0FTIElPIFVuaXQgQ29udHJvbAogICogICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdC4KKyAqICAxMC0yOC0wOSAgMDIuMDAuMDMgIENoYW5nZWQgdGhlIHR5cGUgb2YgU0dMIGluIE1QSTJfU0FUQV9QQVNTVEhST1VHSF9SRVFVRVNUCisgKiAgICAgICAgICAgICAgICAgICAgICB0byBNUEkyX1NHRV9JT19VTklPTiBzaW5jZSBpdCBzdXBwb3J0cyBjaGFpbmVkIFNHTHMuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC0xNjAsNyArMTYyLDcgQEAKICAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgIC8qIDB4MTQgKi8KICAgICBVMzIgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoOyAgICAgICAgIC8qIDB4MTggKi8KICAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kRklTWzIwXTsgICAgIC8qIDB4MUMgKi8KLSAgICBNUEkyX1NJTVBMRV9TR0VfVU5JT04gICBTR0w7ICAgICAgICAgICAgICAgIC8qIDB4MjAgKi8KKyAgICBNUEkyX1NHRV9JT19VTklPTiAgICAgICBTR0w7ICAgICAgICAgICAgICAgIC8qIDB4MjAgKi8KIH0gTVBJMl9TQVRBX1BBU1NUSFJPVUdIX1JFUVVFU1QsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQVRBX1BBU1NUSFJPVUdIX1JFUVVFU1QsCiAgIE1waTJTYXRhUGFzc3Rocm91Z2hSZXF1ZXN0X3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhdGFQYXNzdGhyb3VnaFJlcXVlc3RfdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwppbmRleCA4OWQwMjQwLi44OGU2ZWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwpAQCAtMTA3LDggKzEwNyw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXByaW50ayhLRVJOX0lORk8gInNldHRpbmcgbG9nZ2luZ19sZXZlbCgweCUwOHgpXG4iLAotCQkJCW1wdDJzYXNfZndmYXVsdF9kZWJ1Zyk7CisJcHJpbnRrKEtFUk5fSU5GTyAic2V0dGluZyBmd2ZhdWx0X2RlYnVnKCVkKVxuIiwgbXB0MnNhc19md2ZhdWx0X2RlYnVnKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvYywgJm1wdDJzYXNfaW9jX2xpc3QsIGxpc3QpCiAJCWlvYy0+ZndmYXVsdF9kZWJ1ZyA9IG1wdDJzYXNfZndmYXVsdF9kZWJ1ZzsKIAlyZXR1cm4gMDsKQEAgLTEyMjIsNiArMTIyMSw4IEBACiAJdTMyIG1lbWFwX3N6OwogCXUzMiBwaW9fc3o7CiAJaW50IGksIHIgPSAwOworCXU2NCBwaW9fY2hpcCA9IDA7CisJdTY0IGNoaXBfcGh5cyA9IDA7CiAKIAlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXNcbiIsCiAJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKQEAgLTEyNTUsMTIgKzEyNTYsMTMgQEAKIAkJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pIHsKIAkJCWlmIChwaW9fc3opCiAJCQkJY29udGludWU7Ci0JCQlpb2MtPnBpb19jaGlwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpOworCQkJcGlvX2NoaXAgPSAodTY0KXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBpKTsKIAkJCXBpb19zeiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaSk7CiAJCX0gZWxzZSB7CiAJCQlpZiAobWVtYXBfc3opCiAJCQkJY29udGludWU7CiAJCQlpb2MtPmNoaXBfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBpKTsKKwkJCWNoaXBfcGh5cyA9ICh1NjQpaW9jLT5jaGlwX3BoeXM7CiAJCQltZW1hcF9zeiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaSk7CiAJCQlpb2MtPmNoaXAgPSBpb3JlbWFwKGlvYy0+Y2hpcF9waHlzLCBtZW1hcF9zeik7CiAJCQlpZiAoaW9jLT5jaGlwID09IE5VTEwpIHsKQEAgLTEyODAsMTAgKzEyODIsMTAgQEAKIAlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IElSUSAlZFxuIiwKIAkgICAgaW9jLT5uYW1lLCAgKChpb2MtPm1zaXhfZW5hYmxlKSA/ICJQQ0ktTVNJLVggZW5hYmxlZCIgOgogCSAgICAiSU8tQVBJQyBlbmFibGVkIiksIGlvYy0+cGNpX2lycSk7Ci0JcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImlvbWVtKDB4JWx4KSwgbWFwcGVkKDB4JXApLCBzaXplKCVkKVxuIiwKLQkgICAgaW9jLT5uYW1lLCBpb2MtPmNoaXBfcGh5cywgaW9jLT5jaGlwLCBtZW1hcF9zeik7Ci0JcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImlvcG9ydCgweCVseCksIHNpemUoJWQpXG4iLAotCSAgICBpb2MtPm5hbWUsIGlvYy0+cGlvX2NoaXAsIHBpb19zeik7CisJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImlvbWVtKDB4JTAxNmxseCksIG1hcHBlZCgweCVwKSwgc2l6ZSglZClcbiIsCisJICAgIGlvYy0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyljaGlwX3BoeXMsIGlvYy0+Y2hpcCwgbWVtYXBfc3opOworCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJpb3BvcnQoMHglMDE2bGx4KSwgc2l6ZSglZClcbiIsCisJICAgIGlvYy0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylwaW9fY2hpcCwgcGlvX3N6KTsKIAogCXJldHVybiAwOwogCkBAIC0zNTczLDYgKzM1NzUsOCBAQAogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaW9jLT5yZXNldF93cSk7CiAKKwlpb2MtPmZ3ZmF1bHRfZGVidWcgPSBtcHQyc2FzX2Z3ZmF1bHRfZGVidWc7CisKIAkvKiBiYXNlIGludGVybmFsIGNvbW1hbmQgYml0cyAqLwogCW11dGV4X2luaXQoJmlvYy0+YmFzZV9jbWRzLm11dGV4KTsKIAlpb2MtPmJhc2VfY21kcy5yZXBseSA9IGt6YWxsb2MoaW9jLT5yZXBseV9zeiwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCmluZGV4IGJiNGYxNDYuLmUxOGIwNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCkBAIC02OSwxMCArNjksMTAgQEAKICNkZWZpbmUgTVBUMlNBU19EUklWRVJfTkFNRQkJIm1wdDJzYXMiCiAjZGVmaW5lIE1QVDJTQVNfQVVUSE9SCSJMU0kgQ29ycG9yYXRpb24gPERMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20+IgogI2RlZmluZSBNUFQyU0FTX0RFU0NSSVBUSU9OCSJMU0kgTVBUIEZ1c2lvbiBTQVMgMi4wIERldmljZSBEcml2ZXIiCi0jZGVmaW5lIE1QVDJTQVNfRFJJVkVSX1ZFUlNJT04JCSIwMy4xMDAuMDMuMDAiCi0jZGVmaW5lIE1QVDJTQVNfTUFKT1JfVkVSU0lPTgkJMDMKKyNkZWZpbmUgTVBUMlNBU19EUklWRVJfVkVSU0lPTgkJIjA0LjEwMC4wMS4wMCIKKyNkZWZpbmUgTVBUMlNBU19NQUpPUl9WRVJTSU9OCQkwNAogI2RlZmluZSBNUFQyU0FTX01JTk9SX1ZFUlNJT04JCTEwMAotI2RlZmluZSBNUFQyU0FTX0JVSUxEX1ZFUlNJT04JCTAzCisjZGVmaW5lIE1QVDJTQVNfQlVJTERfVkVSU0lPTgkJMDEKICNkZWZpbmUgTVBUMlNBU19SRUxFQVNFX1ZFUlNJT04JCTAwCiAKIC8qCkBAIC0zMjMsNiArMzIzLDcgQEAKICAqIEBkZXZpY2VfaW5mbzogYml0ZmllbGQgcHJvdmlkZXMgZGV0YWlsZWQgaW5mbyBhYm91dCB0aGUgaGlkZGVuIGNvbXBvbmVudHMKICAqIEBudW1fcGRzOiBudW1iZXIgb2YgaGlkZGVuIHJhaWQgY29tcG9uZW50cwogICogQHJlc3BvbmRpbmc6IHVzZWQgaW4gX3Njc2loX3JhaWRfZGV2aWNlX21hcmtfcmVzcG9uZGluZworICogQHBlcmNlbnRfY29tcGxldGU6IHJlc3luYyBwZXJjZW50IGNvbXBsZXRlCiAgKi8KIHN0cnVjdCBfcmFpZF9kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTMzNiw2ICszMzcsNyBAQAogCXUzMglkZXZpY2VfaW5mbzsKIAl1OAludW1fcGRzOwogCXU4CXJlc3BvbmRpbmc7CisJdTgJcGVyY2VudF9jb21wbGV0ZTsKIH07CiAKIC8qKgpAQCAtNDY0LDcgKzQ2Niw2IEBACiAgKiBAcGRldjogcGNpIHBkZXYgb2JqZWN0CiAgKiBAY2hpcDogbWVtb3J5IG1hcHBlZCByZWdpc3RlciBzcGFjZQogICogQGNoaXBfcGh5czogcGh5c2ljYWwgYWRkcnNzIHByaW9yIHRvIG1hcHBpbmcKLSAqIEBwaW9fY2hpcDogSS9PIG1hcHBlZCByZWdpc3RlciBzcGFjZQogICogQGxvZ2dpbmdfbGV2ZWw6IHNlZSBtcHQyc2FzX2RlYnVnLmgKICAqIEBmd2ZhdWx0X2RlYnVnOiBkZWJ1Z2luZyBGVyB0aW1lb3V0cwogICogQGlyX2Zpcm13YXJlOiBJUiBmaXJtd2FyZSBwcmVzZW50CkBAIC01ODcsOCArNTg4LDcgQEAKIAljaGFyCQl0bXBfc3RyaW5nW01QVF9TVFJJTkdfTEVOR1RIXTsKIAlzdHJ1Y3QgcGNpX2RldgkqcGRldjsKIAlNcGkyU3lzdGVtSW50ZXJmYWNlUmVnc190IF9faW9tZW0gKmNoaXA7Ci0JdW5zaWduZWQgbG9uZwljaGlwX3BoeXM7Ci0JdW5zaWduZWQgbG9uZwlwaW9fY2hpcDsKKwlyZXNvdXJjZV9zaXplX3QJY2hpcF9waHlzOwogCWludAkJbG9nZ2luZ19sZXZlbDsKIAlpbnQJCWZ3ZmF1bHRfZGVidWc7CiAJdTgJCWlyX2Zpcm13YXJlOwpAQCAtODUzLDYgKzg1Myw4IEBACiAgICAgKm1waV9yZXBseSwgTXBpMklPVW5pdFBhZ2UxX3QgKmNvbmZpZ19wYWdlKTsKIGludCBtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2lvdW5pdF9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAogICAgICptcGlfcmVwbHksIE1waTJTYXNJT1VuaXRQYWdlMV90ICpjb25maWdfcGFnZSwgdTE2IHN6KTsKK2ludCBtcHQyc2FzX2NvbmZpZ19zZXRfc2FzX2lvdW5pdF9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIE1waTJTYXNJT1VuaXRQYWdlMV90ICpjb25maWdfcGFnZSwgdTE2IHN6KTsKIGludCBtcHQyc2FzX2NvbmZpZ19nZXRfaW9jX3BnOChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CiAgICAgKm1waV9yZXBseSwgTXBpMklPQ1BhZ2U4X3QgKmNvbmZpZ19wYWdlKTsKIGludCBtcHQyc2FzX2NvbmZpZ19nZXRfZXhwYW5kZXJfcGcwKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCmluZGV4IDU5NGEzODkuLjQxMWMyN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYwpAQCAtMzI0LDcgKzMyNCw5IEBACiAJCWlmIChyICE9IDApCiAJCQlnb3RvIG91dDsKIAkJaWYgKG1waV9yZXF1ZXN0LT5BY3Rpb24gPT0KLQkJICAgIE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1dSSVRFX0NVUlJFTlQpIHsKKwkJICAgIE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1dSSVRFX0NVUlJFTlQgfHwKKwkJICAgIG1waV9yZXF1ZXN0LT5BY3Rpb24gPT0KKwkJICAgIE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1dSSVRFX05WUkFNKSB7CiAJCQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QtPlBhZ2VCdWZmZXJTR0UsCiAJCQkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1dSSVRFX1NHTEZMQUdTIHwgbWVtLnN6LAogCQkJICAgIG1lbS5wYWdlX2RtYSk7CkBAIC04ODIsNyArODg0LDcgQEAKIH0KIAogLyoqCi0gKiBtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2lvdW5pdF9wZzEgLSBvYnRhaW4gc2FzIGlvdW5pdCBwYWdlIDAKKyAqIG1wdDJzYXNfY29uZmlnX2dldF9zYXNfaW91bml0X3BnMSAtIG9idGFpbiBzYXMgaW91bml0IHBhZ2UgMQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKICAqIEBjb25maWdfcGFnZTogY29udGVudHMgb2YgdGhlIGNvbmZpZyBwYWdlCkBAIC05MDcsNyArOTA5LDcgQEAKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9FWFRFTkRFRDsKIAltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IE1QSTJfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19JT19VTklUOwogCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gMTsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1NBU0lPVU5JVFBBR0UwX1BBR0VWRVJTSU9OOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfU0FTSU9VTklUUEFHRTFfUEFHRVZFUlNJT047CiAJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCiAJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKQEAgLTkyMiw2ICs5MjQsNDkgQEAKIH0KIAogLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19zZXRfc2FzX2lvdW5pdF9wZzEgLSBzZW5kIHNhcyBpb3VuaXQgcGFnZSAxCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKKyAqIEBzejogc2l6ZSBvZiBidWZmZXIgcGFzc2VkIGluIGNvbmZpZ19wYWdlCisgKiBDb250ZXh0OiBzbGVlcC4KKyAqCisgKiBDYWxsaW5nIGZ1bmN0aW9uIHNob3VsZCBjYWxsIGNvbmZpZ19nZXRfbnVtYmVyX2hiYV9waHlzIHByaW9yIHRvCisgKiB0aGlzIGZ1bmN0aW9uLCBzbyBlbm91Z2ggbWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgY29uZmlnX3BhZ2UuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworaW50CittcHQyc2FzX2NvbmZpZ19zZXRfc2FzX2lvdW5pdF9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorICAgICptcGlfcmVwbHksIE1waTJTYXNJT1VuaXRQYWdlMV90ICpjb25maWdfcGFnZSwgdTE2IHN6KQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IHI7CisKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOworCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gTVBJMl9DT05GSUdfRVhUUEFHRVRZUEVfU0FTX0lPX1VOSVQ7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAxOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfU0FTSU9VTklUUEFHRTFfUEFHRVZFUlNJT047CisJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9XUklURV9DVVJSRU5UOworCV9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsIHN6KTsKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9XUklURV9OVlJBTTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwgc3opOworIG91dDoKKwlyZXR1cm4gcjsKK30KKworLyoqCiAgKiBtcHQyc2FzX2NvbmZpZ19nZXRfZXhwYW5kZXJfcGcwIC0gb2J0YWluIGV4cGFuZGVyIHBhZ2UgMAogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCmluZGV4IDg0YTEyNGYuLmZhOWJmODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYwpAQCAtODkxLDYgKzg5MSw3IEBACiAKICBpc3N1ZV9ob3N0X3Jlc2V0OgogCWlmIChpc3N1ZV9yZXNldCkgeworCQlyZXQgPSAtRU5PREFUQTsKIAkJaWYgKChtcGlfcmVxdWVzdC0+RnVuY3Rpb24gPT0gTVBJMl9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1QgfHwKIAkJICAgIG1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9PQogCQkgICAgTVBJMl9GVU5DVElPTl9SQUlEX1NDU0lfSU9fUEFTU1RIUk9VR0gpKSB7CkBAIC0yMjAyLDE0ICsyMjAzLDEwIEBACiAJa2FyZy5kYXRhX291dF9zaXplID0ga2FyZzMyLmRhdGFfb3V0X3NpemU7CiAJa2FyZy5tYXhfc2Vuc2VfYnl0ZXMgPSBrYXJnMzIubWF4X3NlbnNlX2J5dGVzOwogCWthcmcuZGF0YV9zZ2Vfb2Zmc2V0ID0ga2FyZzMyLmRhdGFfc2dlX29mZnNldDsKLQltZW1jcHkoJmthcmcucmVwbHlfZnJhbWVfYnVmX3B0ciwgJmthcmczMi5yZXBseV9mcmFtZV9idWZfcHRyLAotCSAgICBzaXplb2YodWludDMyX3QpKTsKLQltZW1jcHkoJmthcmcuZGF0YV9pbl9idWZfcHRyLCAma2FyZzMyLmRhdGFfaW5fYnVmX3B0ciwKLQkgICAgc2l6ZW9mKHVpbnQzMl90KSk7Ci0JbWVtY3B5KCZrYXJnLmRhdGFfb3V0X2J1Zl9wdHIsICZrYXJnMzIuZGF0YV9vdXRfYnVmX3B0ciwKLQkgICAgc2l6ZW9mKHVpbnQzMl90KSk7Ci0JbWVtY3B5KCZrYXJnLnNlbnNlX2RhdGFfcHRyLCAma2FyZzMyLnNlbnNlX2RhdGFfcHRyLAotCSAgICBzaXplb2YodWludDMyX3QpKTsKKwlrYXJnLnJlcGx5X2ZyYW1lX2J1Zl9wdHIgPSBjb21wYXRfcHRyKGthcmczMi5yZXBseV9mcmFtZV9idWZfcHRyKTsKKwlrYXJnLmRhdGFfaW5fYnVmX3B0ciA9IGNvbXBhdF9wdHIoa2FyZzMyLmRhdGFfaW5fYnVmX3B0cik7CisJa2FyZy5kYXRhX291dF9idWZfcHRyID0gY29tcGF0X3B0cihrYXJnMzIuZGF0YV9vdXRfYnVmX3B0cik7CisJa2FyZy5zZW5zZV9kYXRhX3B0ciA9IGNvbXBhdF9wdHIoa2FyZzMyLnNlbnNlX2RhdGFfcHRyKTsKIAlzdGF0ZSA9IChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgPyBOT05fQkxPQ0tJTkcgOiBCTE9DS0lORzsKIAlyZXR1cm4gX2N0bF9kb19tcHRfY29tbWFuZChpb2MsIGthcmcsICZ1YXJnLT5tZiwgc3RhdGUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCmluZGV4IGVmYWJlYTEuLmM3ZWMzZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhaWRfY2xhc3MuaD4KIAogI2luY2x1ZGUgIm1wdDJzYXNfYmFzZS5oIgogCkBAIC0xMzMsNiArMTM0LDkgQEAKIAl2b2lkCQkJKmV2ZW50X2RhdGE7CiB9OwogCisvKiByYWlkIHRyYW5zcG9ydCBzdXBwb3J0ICovCitzdGF0aWMgc3RydWN0IHJhaWRfdGVtcGxhdGUgKm1wdDJzYXNfcmFpZF90ZW1wbGF0ZTsKKwogLyoqCiAgKiBzdHJ1Y3QgX3Njc2lfaW9fdHJhbnNmZXIgLSBzY3NpIGlvIHRyYW5zZmVyCiAgKiBAaGFuZGxlOiBzYXMgZGV2aWNlIGhhbmRsZSAoYXNzaWduZWQgYnkgZmlybXdhcmUpCkBAIC0xMzA1LDcgKzEzMDksNiBAQAogCXN0cnVjdCBNUFQyU0FTX0RFVklDRSAqc2FzX2RldmljZV9wcml2X2RhdGE7CiAJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0OwogCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOwotCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc2FzX2RldmljZV9wcml2X2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NzaV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKQEAgLTEzMzIsMjEgKzEzMzUsOCBAQAogCQlpZiAocmFpZF9kZXZpY2UpCiAJCQlyYWlkX2RldmljZS0+c2RldiA9IHNkZXY7IC8qIHJhaWQgaXMgc2luZ2xlIGx1biAqLwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQl9IGVsc2UgewotCQkvKiBzZXQgVExSIGJpdCBmb3IgU1NQIGRldmljZXMgKi8KLQkJaWYgKCEoaW9jLT5mYWN0cy5JT0NDYXBhYmlsaXRpZXMgJgotCQkgICAgIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9UTFIpKQotCQkJZ290byBvdXQ7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOwotCQlzYXNfZGV2aWNlID0gbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLAotCQkgICBzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+c2FzX2FkZHJlc3MpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOwotCQlpZiAoc2FzX2RldmljZSAmJiBzYXNfZGV2aWNlLT5kZXZpY2VfaW5mbyAmCi0JCSAgICBNUEkyX1NBU19ERVZJQ0VfSU5GT19TU1BfVEFSR0VUKQotCQkJc2FzX2RldmljZV9wcml2X2RhdGEtPmZsYWdzIHw9IE1QVF9ERVZJQ0VfVExSX09OOwogCX0KIAotIG91dDoKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQxOSw2ICsxNDA5LDE0MCBAQAogfQogCiAvKioKKyAqIF9zY3NpaF9pc19yYWlkIC0gcmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyBkZXZpY2UgaXMgcmFpZCB2b2x1bWUKKyAqIEBkZXYgdGhlIGRldmljZSBzdHJ1Y3Qgb2JqZWN0CisgKi8KK3N0YXRpYyBpbnQKK19zY3NpaF9pc19yYWlkKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOworCisJcmV0dXJuIChzZGV2LT5jaGFubmVsID09IFJBSURfQ0hBTk5FTCkgPyAxIDogMDsKK30KKworLyoqCisgKiBfc2NzaWhfZ2V0X3Jlc3luYyAtIGdldCByYWlkIHZvbHVtZSByZXN5bmMgcGVyY2VudCBjb21wbGV0ZQorICogQGRldiB0aGUgZGV2aWNlIHN0cnVjdCBvYmplY3QKKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9nZXRfcmVzeW5jKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOworCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2Rldi0+aG9zdCk7CisJc3RhdGljIHN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTXBpMlJhaWRWb2xQYWdlMF90IHZvbF9wZzA7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCXUzMiB2b2x1bWVfc3RhdHVzX2ZsYWdzOworCXU4IHBlcmNlbnRfY29tcGxldGUgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCXJhaWRfZGV2aWNlID0gX3Njc2loX3JhaWRfZGV2aWNlX2ZpbmRfYnlfaWQoaW9jLCBzZGV2LT5pZCwKKwkgICAgc2Rldi0+Y2hhbm5lbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CisKKwlpZiAoIXJhaWRfZGV2aWNlKQorCQlnb3RvIG91dDsKKworCWlmIChtcHQyc2FzX2NvbmZpZ19nZXRfcmFpZF92b2x1bWVfcGcwKGlvYywgJm1waV9yZXBseSwgJnZvbF9wZzAsCisJICAgICBNUEkyX1JBSURfVk9MVU1FX1BHQURfRk9STV9IQU5ETEUsIHJhaWRfZGV2aWNlLT5oYW5kbGUsCisJICAgICBzaXplb2YoTXBpMlJhaWRWb2xQYWdlMF90KSkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0OworCX0KKworCXZvbHVtZV9zdGF0dXNfZmxhZ3MgPSBsZTMyX3RvX2NwdSh2b2xfcGcwLlZvbHVtZVN0YXR1c0ZsYWdzKTsKKwlpZiAodm9sdW1lX3N0YXR1c19mbGFncyAmIE1QSTJfUkFJRFZPTDBfU1RBVFVTX0ZMQUdfUkVTWU5DX0lOX1BST0dSRVNTKQorCQlwZXJjZW50X2NvbXBsZXRlID0gcmFpZF9kZXZpY2UtPnBlcmNlbnRfY29tcGxldGU7Cisgb3V0OgorCXJhaWRfc2V0X3Jlc3luYyhtcHQyc2FzX3JhaWRfdGVtcGxhdGUsIGRldiwgcGVyY2VudF9jb21wbGV0ZSk7Cit9CisKKy8qKgorICogX3Njc2loX2dldF9zdGF0ZSAtIGdldCByYWlkIHZvbHVtZSBsZXZlbAorICogQGRldiB0aGUgZGV2aWNlIHN0cnVjdCBvYmplY3QKKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF9nZXRfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzZGV2LT5ob3N0KTsKKwlzdGF0aWMgc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlNcGkyUmFpZFZvbFBhZ2UwX3Qgdm9sX3BnMDsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJdTMyIHZvbHN0YXRlOworCWVudW0gcmFpZF9zdGF0ZSBzdGF0ZSA9IFJBSURfU1RBVEVfVU5LTk9XTjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlyYWlkX2RldmljZSA9IF9zY3NpaF9yYWlkX2RldmljZV9maW5kX2J5X2lkKGlvYywgc2Rldi0+aWQsCisJICAgIHNkZXYtPmNoYW5uZWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmFpZF9kZXZpY2VfbG9jaywgZmxhZ3MpOworCisJaWYgKCFyYWlkX2RldmljZSkKKwkJZ290byBvdXQ7CisKKwlpZiAobXB0MnNhc19jb25maWdfZ2V0X3JhaWRfdm9sdW1lX3BnMChpb2MsICZtcGlfcmVwbHksICZ2b2xfcGcwLAorCSAgICAgTVBJMl9SQUlEX1ZPTFVNRV9QR0FEX0ZPUk1fSEFORExFLCByYWlkX2RldmljZS0+aGFuZGxlLAorCSAgICAgc2l6ZW9mKE1waTJSYWlkVm9sUGFnZTBfdCkpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlnb3RvIG91dDsKKwl9CisKKwl2b2xzdGF0ZSA9IGxlMzJfdG9fY3B1KHZvbF9wZzAuVm9sdW1lU3RhdHVzRmxhZ3MpOworCWlmICh2b2xzdGF0ZSAmIE1QSTJfUkFJRFZPTDBfU1RBVFVTX0ZMQUdfUkVTWU5DX0lOX1BST0dSRVNTKSB7CisJCXN0YXRlID0gUkFJRF9TVEFURV9SRVNZTkNJTkc7CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAodm9sX3BnMC5Wb2x1bWVTdGF0ZSkgeworCWNhc2UgTVBJMl9SQUlEX1ZPTF9TVEFURV9PUFRJTUFMOgorCWNhc2UgTVBJMl9SQUlEX1ZPTF9TVEFURV9PTkxJTkU6CisJCXN0YXRlID0gUkFJRF9TVEFURV9BQ1RJVkU7CisJCWJyZWFrOworCWNhc2UgIE1QSTJfUkFJRF9WT0xfU1RBVEVfREVHUkFERUQ6CisJCXN0YXRlID0gUkFJRF9TVEFURV9ERUdSQURFRDsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1JBSURfVk9MX1NUQVRFX0ZBSUxFRDoKKwljYXNlIE1QSTJfUkFJRF9WT0xfU1RBVEVfTUlTU0lORzoKKwkJc3RhdGUgPSBSQUlEX1NUQVRFX09GRkxJTkU7CisJCWJyZWFrOworCX0KKyBvdXQ6CisJcmFpZF9zZXRfc3RhdGUobXB0MnNhc19yYWlkX3RlbXBsYXRlLCBkZXYsIHN0YXRlKTsKK30KKworLyoqCisgKiBfc2NzaWhfc2V0X2xldmVsIC0gc2V0IHJhaWQgbGV2ZWwKKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqIEByYWlkX2RldmljZTogcmFpZF9kZXZpY2Ugb2JqZWN0CisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfc2V0X2xldmVsKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2UpCit7CisJZW51bSByYWlkX2xldmVsIGxldmVsID0gUkFJRF9MRVZFTF9VTktOT1dOOworCisJc3dpdGNoIChyYWlkX2RldmljZS0+dm9sdW1lX3R5cGUpIHsKKwljYXNlIE1QSTJfUkFJRF9WT0xfVFlQRV9SQUlEMDoKKwkJbGV2ZWwgPSBSQUlEX0xFVkVMXzA7CisJCWJyZWFrOworCWNhc2UgTVBJMl9SQUlEX1ZPTF9UWVBFX1JBSUQxMDoKKwkJbGV2ZWwgPSBSQUlEX0xFVkVMXzEwOworCQlicmVhazsKKwljYXNlIE1QSTJfUkFJRF9WT0xfVFlQRV9SQUlEMUU6CisJCWxldmVsID0gUkFJRF9MRVZFTF8xRTsKKwkJYnJlYWs7CisJY2FzZSBNUEkyX1JBSURfVk9MX1RZUEVfUkFJRDE6CisJCWxldmVsID0gUkFJRF9MRVZFTF8xOworCQlicmVhazsKKwl9CisKKwlyYWlkX3NldF9sZXZlbChtcHQyc2FzX3JhaWRfdGVtcGxhdGUsICZzZGV2LT5zZGV2X2dlbmRldiwgbGV2ZWwpOworfQorCisvKioKICAqIF9zY3NpaF9nZXRfdm9sdW1lX2NhcGFiaWxpdGllcyAtIHZvbHVtZSBjYXBhYmlsaXRpZXMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNhc19kZXZpY2U6IHRoZSByYWlkX2RldmljZSBvYmplY3QKQEAgLTE0NzksNiArMTYwMywzMiBAQAogfQogCiAvKioKKyAqIF9zY3NpaF9lbmFibGVfdGxyIC0gc2V0dGluZyBUTFIgZmxhZ3MKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICoKKyAqIEVuYWJsaW5nIFRyYW5zYWN0aW9uIExheWVyIFJldHJpZXMgZm9yIHRhcGUgZGV2aWNlcyB3aGVuCisgKiB2cGQgcGFnZSAweDkwIGlzIHByZXNlbnQKKyAqCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfZW5hYmxlX3RscihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwkvKiBvbmx5IGZvciBUQVBFICovCisJaWYgKHNkZXYtPnR5cGUgIT0gVFlQRV9UQVBFKQorCQlyZXR1cm47CisKKwlpZiAoIShpb2MtPmZhY3RzLklPQ0NhcGFiaWxpdGllcyAmIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9UTFIpKQorCQlyZXR1cm47CisKKwlzYXNfZW5hYmxlX3RscihzZGV2KTsKKwlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsICJUTFIgJXNcbiIsCisJICAgIHNhc19pc190bHJfZW5hYmxlZChzZGV2KSA/ICJFbmFibGVkIiA6ICJEaXNhYmxlZCIpOworCXJldHVybjsKKworfQorCisvKioKICAqIF9zY3NpaF9zbGF2ZV9jb25maWd1cmUgLSBkZXZpY2UgY29uZmlndXJlIHJvdXRpbmUuCiAgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CiAgKgpAQCAtMTU3NCw2ICsxNzI0LDggQEAKIAkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmFpZF9kZXZpY2UtPnd3aWQsCiAJCSAgICByYWlkX2RldmljZS0+bnVtX3BkcywgZHMpOwogCQlfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCwgU0NTSV9RREVQVEhfREVGQVVMVCk7CisJCS8qIHJhaWQgdHJhbnNwb3J0IHN1cHBvcnQgKi8KKwkJX3Njc2loX3NldF9sZXZlbChzZGV2LCByYWlkX2RldmljZSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTYyMSw4ICsxNzczLDEwIEBACiAKIAlfc2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoKHNkZXYsIHFkZXB0aCwgU0NTSV9RREVQVEhfREVGQVVMVCk7CiAKLQlpZiAoc3NwX3RhcmdldCkKKwlpZiAoc3NwX3RhcmdldCkgewogCQlzYXNfcmVhZF9wb3J0X21vZGVfcGFnZShzZGV2KTsKKwkJX3Njc2loX2VuYWJsZV90bHIoaW9jLCBzZGV2KTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5MDgsOCArMzA2Miw5IEBACiAKIAl9IGVsc2UKIAkJbXBpX2NvbnRyb2wgfD0gTVBJMl9TQ1NJSU9fQ09OVFJPTF9TSU1QTEVROwotCi0JaWYgKChzYXNfZGV2aWNlX3ByaXZfZGF0YS0+ZmxhZ3MgJiBNUFRfREVWSUNFX1RMUl9PTikpCisJLyogTWFrZSBzdXJlIERldmljZSBpcyBub3QgcmFpZCB2b2x1bWUgKi8KKwlpZiAoIV9zY3NpaF9pc19yYWlkKCZzY21kLT5kZXZpY2UtPnNkZXZfZ2VuZGV2KSAmJgorCSAgICBzYXNfaXNfdGxyX2VuYWJsZWQoc2NtZC0+ZGV2aWNlKSkKIAkJbXBpX2NvbnRyb2wgfD0gTVBJMl9TQ1NJSU9fQ09OVFJPTF9UTFJfT047CiAKIAlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkX3Njc2lpbyhpb2MsIGlvYy0+c2NzaV9pb19jYl9pZHgsIHNjbWQpOwpAQCAtMzI5OCwxMCArMzQ1MywxMiBAQAogCQkgICAgbGUzMl90b19jcHUobXBpX3JlcGx5LT5SZXNwb25zZUluZm8pICYgMHhGRjsKIAlpZiAoIXNhc19kZXZpY2VfcHJpdl9kYXRhLT50bHJfc25vb3BfY2hlY2spIHsKIAkJc2FzX2RldmljZV9wcml2X2RhdGEtPnRscl9zbm9vcF9jaGVjaysrOwotCQlpZiAoKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5mbGFncyAmIE1QVF9ERVZJQ0VfVExSX09OKSAmJgotCQkgICAgcmVzcG9uc2VfY29kZSA9PSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfSU5WQUxJRF9GUkFNRSkKLQkJCXNhc19kZXZpY2VfcHJpdl9kYXRhLT5mbGFncyAmPQotCQkJICAgIH5NUFRfREVWSUNFX1RMUl9PTjsKKwlpZiAoIV9zY3NpaF9pc19yYWlkKCZzY21kLT5kZXZpY2UtPnNkZXZfZ2VuZGV2KSAmJgorCQlzYXNfaXNfdGxyX2VuYWJsZWQoc2NtZC0+ZGV2aWNlKSAmJgorCQkgICAgcmVzcG9uc2VfY29kZSA9PSBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfSU5WQUxJRF9GUkFNRSkgeworCQkJc2FzX2Rpc2FibGVfdGxyKHNjbWQtPmRldmljZSk7CisJCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNjbWQtPmRldmljZSwgIlRMUiBkaXNhYmxlZFxuIik7CisJCX0KIAl9CiAKIAl4ZmVyX2NudCA9IGxlMzJfdG9fY3B1KG1waV9yZXBseS0+VHJhbnNmZXJDb3VudCk7CkBAIC01MTcwLDExICs1MzI3LDMzIEBACiBfc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAogICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKKwlNcGkyRXZlbnREYXRhSXJPcGVyYXRpb25TdGF0dXNfdCAqZXZlbnRfZGF0YSA9IGZ3X2V2ZW50LT5ldmVudF9kYXRhOworCXN0YXRpYyBzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBoYW5kbGU7CisKICNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKIAlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykKIAkJX3Njc2loX3Nhc19pcl9vcGVyYXRpb25fc3RhdHVzX2V2ZW50X2RlYnVnKGlvYywKLQkJICAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCSAgICAgZXZlbnRfZGF0YSk7CiAjZW5kaWYKKworCS8qIGNvZGUgYWRkZWQgZm9yIHJhaWQgdHJhbnNwb3J0IHN1cHBvcnQgKi8KKwlpZiAoZXZlbnRfZGF0YS0+UkFJRE9wZXJhdGlvbiA9PSBNUEkyX0VWRU5UX0lSX1JBSURPUF9SRVNZTkMpIHsKKworCQloYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5Wb2xEZXZIYW5kbGUpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJcmFpZF9kZXZpY2UgPSBfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCQlpZiAoIXJhaWRfZGV2aWNlKQorCQkJcmV0dXJuOworCisJCWlmIChldmVudF9kYXRhLT5SQUlET3BlcmF0aW9uID09IE1QSTJfRVZFTlRfSVJfUkFJRE9QX1JFU1lOQykKKwkJCXJhaWRfZGV2aWNlLT5wZXJjZW50X2NvbXBsZXRlID0KKwkJCSAgICBldmVudF9kYXRhLT5QZXJjZW50Q29tcGxldGU7CisJfQogfQogCiAvKioKQEAgLTU5OTgsNiArNjE3Nyw4IEBACiAJc3RydWN0IF9zYXNfcG9ydCAqbXB0MnNhc19wb3J0OwogCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKIAlzdHJ1Y3QgX3Nhc19ub2RlICpleHBhbmRlcl9zaWJsaW5nOworCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlLCAqbmV4dDsKKwlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp3cTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC02MDExLDYgKzYxOTIsMjEgQEAKIAlpZiAod3EpCiAJCWRlc3Ryb3lfd29ya3F1ZXVlKHdxKTsKIAorCS8qIHJlbGVhc2UgYWxsIHRoZSB2b2x1bWVzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJhaWRfZGV2aWNlLCBuZXh0LCAmaW9jLT5yYWlkX2RldmljZV9saXN0LAorCSAgICBsaXN0KSB7CisJCWlmIChyYWlkX2RldmljZS0+c3RhcmdldCkgeworCQkJc2FzX3RhcmdldF9wcml2X2RhdGEgPQorCQkJICAgIHJhaWRfZGV2aWNlLT5zdGFyZ2V0LT5ob3N0ZGF0YTsKKwkJCXNhc190YXJnZXRfcHJpdl9kYXRhLT5kZWxldGVkID0gMTsKKwkJCXNjc2lfcmVtb3ZlX3RhcmdldCgmcmFpZF9kZXZpY2UtPnN0YXJnZXQtPmRldik7CisJCX0KKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJlbW92aW5nIGhhbmRsZSgweCUwNHgpLCB3d2lkIgorCQkgICAgIigweCUwMTZsbHgpXG4iLCBpb2MtPm5hbWUsICByYWlkX2RldmljZS0+aGFuZGxlLAorCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmFpZF9kZXZpY2UtPnd3aWQpOworCQlfc2NzaWhfcmFpZF9kZXZpY2VfcmVtb3ZlKGlvYywgcmFpZF9kZXZpY2UpOworCX0KKwogCS8qIGZyZWUgcG9ydHMgYXR0YWNoZWQgdG8gdGhlIHNhc19ob3N0ICovCiAgcmV0cnlfYWdhaW46CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtcHQyc2FzX3BvcnQsCkBAIC02MzczLDYgKzY1NjksMTMgQEAKICNlbmRpZgogfTsKIAorLyogcmFpZCB0cmFuc3BvcnQgc3VwcG9ydCAqLworc3RhdGljIHN0cnVjdCByYWlkX2Z1bmN0aW9uX3RlbXBsYXRlIG1wdDJzYXNfcmFpZF9mdW5jdGlvbnMgPSB7CisJLmNvb2tpZQkJPSAmc2NzaWhfZHJpdmVyX3RlbXBsYXRlLAorCS5pc19yYWlkCT0gX3Njc2loX2lzX3JhaWQsCisJLmdldF9yZXN5bmMJPSBfc2NzaWhfZ2V0X3Jlc3luYywKKwkuZ2V0X3N0YXRlCT0gX3Njc2loX2dldF9zdGF0ZSwKK307CiAKIC8qKgogICogX3Njc2loX2luaXQgLSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGlzIGRyaXZlci4KQEAgLTYzOTIsNiArNjU5NSwxMiBAQAogCSAgICBzYXNfYXR0YWNoX3RyYW5zcG9ydCgmbXB0MnNhc190cmFuc3BvcnRfZnVuY3Rpb25zKTsKIAlpZiAoIW1wdDJzYXNfdHJhbnNwb3J0X3RlbXBsYXRlKQogCQlyZXR1cm4gLUVOT0RFVjsKKwkvKiByYWlkIHRyYW5zcG9ydCBzdXBwb3J0ICovCisJbXB0MnNhc19yYWlkX3RlbXBsYXRlID0gcmFpZF9jbGFzc19hdHRhY2goJm1wdDJzYXNfcmFpZF9mdW5jdGlvbnMpOworCWlmICghbXB0MnNhc19yYWlkX3RlbXBsYXRlKSB7CisJCXNhc19yZWxlYXNlX3RyYW5zcG9ydChtcHQyc2FzX3RyYW5zcG9ydF90ZW1wbGF0ZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAogCW1wdDJzYXNfYmFzZV9pbml0aWFsaXplX2NhbGxiYWNrX2hhbmRsZXIoKTsKIApAQCAtNjQyNiw4ICs2NjM1LDExIEBACiAJbXB0MnNhc19jdGxfaW5pdCgpOwogCiAJZXJyb3IgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzY3NpaF9kcml2ZXIpOwotCWlmIChlcnJvcikKKwlpZiAoZXJyb3IpIHsKKwkJLyogcmFpZCB0cmFuc3BvcnQgc3VwcG9ydCAqLworCQlyYWlkX2NsYXNzX3JlbGVhc2UobXB0MnNhc19yYWlkX3RlbXBsYXRlKTsKIAkJc2FzX3JlbGVhc2VfdHJhbnNwb3J0KG1wdDJzYXNfdHJhbnNwb3J0X3RlbXBsYXRlKTsKKwl9CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC02NDQ1LDcgKzY2NTcsOCBAQAogCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzY3NpaF9kcml2ZXIpOwogCi0Jc2FzX3JlbGVhc2VfdHJhbnNwb3J0KG1wdDJzYXNfdHJhbnNwb3J0X3RlbXBsYXRlKTsKKwltcHQyc2FzX2N0bF9leGl0KCk7CisKIAltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKHNjc2lfaW9fY2JfaWR4KTsKIAltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKHRtX2NiX2lkeCk7CiAJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcihiYXNlX2NiX2lkeCk7CkBAIC02NDU3LDcgKzY2NzAsMTAgQEAKIAltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKHRtX3RyX2NiX2lkeCk7CiAJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcih0bV9zYXNfY29udHJvbF9jYl9pZHgpOwogCi0JbXB0MnNhc19jdGxfZXhpdCgpOworCS8qIHJhaWQgdHJhbnNwb3J0IHN1cHBvcnQgKi8KKwlyYWlkX2NsYXNzX3JlbGVhc2UobXB0MnNhc19yYWlkX3RlbXBsYXRlKTsKKwlzYXNfcmVsZWFzZV90cmFuc3BvcnQobXB0MnNhc190cmFuc3BvcnRfdGVtcGxhdGUpOworCiB9CiAKIG1vZHVsZV9pbml0KF9zY3NpaF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jCmluZGV4IDNhODI4NzIuLjc4OWY5ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYwpAQCAtODU1LDYgKzg1NSwxNyBAQAogCXJldHVybiBzaG9zdF9wcml2KHNob3N0KTsKIH0KIAorc3RhdGljIHN0cnVjdCBfc2FzX3BoeSAqCitfdHJhbnNwb3J0X2ZpbmRfbG9jYWxfcGh5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgc3RydWN0IHNhc19waHkgKnBoeSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNhc19oYmEubnVtX3BoeXM7IGkrKykKKwkJaWYgKGlvYy0+c2FzX2hiYS5waHlbaV0ucGh5ID09IHBoeSkKKwkJCXJldHVybigmaW9jLT5zYXNfaGJhLnBoeVtpXSk7CisJcmV0dXJuIE5VTEw7Cit9CisKIC8qKgogICogX3RyYW5zcG9ydF9nZXRfbGlua2Vycm9ycyAtCiAgKiBAcGh5OiBUaGUgc2FzIHBoeSBvYmplY3QKQEAgLTg3MCwxNCArODgxLDggQEAKIAlzdHJ1Y3QgX3Nhc19waHkgKm1wdDJzYXNfcGh5OwogCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKIAlNcGkyU2FzUGh5UGFnZTFfdCBwaHlfcGcxOwotCWludCBpOwogCi0JZm9yIChpID0gMCwgbXB0MnNhc19waHkgPSBOVUxMOyBpIDwgaW9jLT5zYXNfaGJhLm51bV9waHlzICYmCi0JICAgICFtcHQyc2FzX3BoeTsgaSsrKSB7Ci0JCWlmIChpb2MtPnNhc19oYmEucGh5W2ldLnBoeSAhPSBwaHkpCi0JCQljb250aW51ZTsKLQkJbXB0MnNhc19waHkgPSAmaW9jLT5zYXNfaGJhLnBoeVtpXTsKLQl9CisJbXB0MnNhc19waHkgPSBfdHJhbnNwb3J0X2ZpbmRfbG9jYWxfcGh5KGlvYywgcGh5KTsKIAogCWlmICghbXB0MnNhc19waHkpIC8qIHRoaXMgcGh5IG5vdCBvbiBzYXNfaG9zdCAqLwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTk3MSwxNCArOTc2LDggQEAKIAlzdHJ1Y3QgX3Nhc19waHkgKm1wdDJzYXNfcGh5OwogCU1waTJTYXNJb1VuaXRDb250cm9sUmVwbHlfdCBtcGlfcmVwbHk7CiAJTXBpMlNhc0lvVW5pdENvbnRyb2xSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7Ci0JaW50IGk7CiAKLQlmb3IgKGkgPSAwLCBtcHQyc2FzX3BoeSA9IE5VTEw7IGkgPCBpb2MtPnNhc19oYmEubnVtX3BoeXMgJiYKLQkgICAgIW1wdDJzYXNfcGh5OyBpKyspIHsKLQkJaWYgKGlvYy0+c2FzX2hiYS5waHlbaV0ucGh5ICE9IHBoeSkKLQkJCWNvbnRpbnVlOwotCQltcHQyc2FzX3BoeSA9ICZpb2MtPnNhc19oYmEucGh5W2ldOwotCX0KKwltcHQyc2FzX3BoeSA9IF90cmFuc3BvcnRfZmluZF9sb2NhbF9waHkoaW9jLCBwaHkpOwogCiAJaWYgKCFtcHQyc2FzX3BoeSkgLyogdGhpcyBwaHkgbm90IG9uIHNhc19ob3N0ICovCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTAwNiw2ICsxMDA1LDE3MyBAQAogfQogCiAvKioKKyAqIF90cmFuc3BvcnRfcGh5X2VuYWJsZSAtIGVuYWJsZS9kaXNhYmxlIHBoeXMKKyAqIEBwaHk6IFRoZSBzYXMgcGh5IG9iamVjdAorICogQGVuYWJsZTogZW5hYmxlIHBoeSB3aGVuIHRydWUKKyAqCisgKiBPbmx5IHN1cHBvcnQgc2FzX2hvc3QgZGlyZWN0IGF0dGFjaGVkIHBoeXMuCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50CitfdHJhbnNwb3J0X3BoeV9lbmFibGUoc3RydWN0IHNhc19waHkgKnBoeSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBwaHlfdG9faW9jKHBoeSk7CisJc3RydWN0IF9zYXNfcGh5ICptcHQyc2FzX3BoeTsKKwlNcGkyU2FzSU9Vbml0UGFnZTFfdCAqc2FzX2lvdW5pdF9wZzEgPSBOVUxMOworCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKKwl1MTYgaW9jX3N0YXR1czsKKwl1MTYgc3o7CisJaW50IHJjID0gMDsKKworCW1wdDJzYXNfcGh5ID0gX3RyYW5zcG9ydF9maW5kX2xvY2FsX3BoeShpb2MsIHBoeSk7CisKKwlpZiAoIW1wdDJzYXNfcGh5KSAvKiB0aGlzIHBoeSBub3Qgb24gc2FzX2hvc3QgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBzYXNfaW91bml0IHBhZ2UgMSAqLworCXN6ID0gb2Zmc2V0b2YoTXBpMlNhc0lPVW5pdFBhZ2UxX3QsIFBoeURhdGEpICsgKGlvYy0+c2FzX2hiYS5udW1fcGh5cyAqCisJICAgIHNpemVvZihNcGkyU2FzSU9Vbml0MVBoeURhdGFfdCkpOworCXNhc19pb3VuaXRfcGcxID0ga3phbGxvYyhzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYXNfaW91bml0X3BnMSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2lvdW5pdF9wZzEoaW9jLCAmbXBpX3JlcGx5LAorCSAgICBzYXNfaW91bml0X3BnMSwgc3opKSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmMgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKwlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJgorCSAgICBNUEkyX0lPQ1NUQVRVU19NQVNLOworCWlmIChpb2Nfc3RhdHVzICE9IE1QSTJfSU9DU1RBVFVTX1NVQ0NFU1MpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGVuYWJsZSkKKwkJc2FzX2lvdW5pdF9wZzEtPlBoeURhdGFbbXB0MnNhc19waHktPnBoeV9pZF0uUGh5RmxhZ3MKKwkJICAgICY9IH5NUEkyX1NBU0lPVU5JVDFfUEhZRkxBR1NfUEhZX0RJU0FCTEU7CisJZWxzZQorCQlzYXNfaW91bml0X3BnMS0+UGh5RGF0YVttcHQyc2FzX3BoeS0+cGh5X2lkXS5QaHlGbGFncworCQkgICAgfD0gTVBJMl9TQVNJT1VOSVQxX1BIWUZMQUdTX1BIWV9ESVNBQkxFOworCisJbXB0MnNhc19jb25maWdfc2V0X3Nhc19pb3VuaXRfcGcxKGlvYywgJm1waV9yZXBseSwgc2FzX2lvdW5pdF9wZzEsIHN6KTsKKworIG91dDoKKwlrZnJlZShzYXNfaW91bml0X3BnMSk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIF90cmFuc3BvcnRfcGh5X3NwZWVkIC0gc2V0IHBoeSBtaW4vbWF4IGxpbmsgcmF0ZXMKKyAqIEBwaHk6IFRoZSBzYXMgcGh5IG9iamVjdAorICogQHJhdGVzOiByYXRlcyBkZWZpbmVkIGluIHNhc19waHlfbGlua3JhdGVzCisgKgorICogT25seSBzdXBwb3J0IHNhc19ob3N0IGRpcmVjdCBhdHRhY2hlZCBwaHlzLgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIGludAorX3RyYW5zcG9ydF9waHlfc3BlZWQoc3RydWN0IHNhc19waHkgKnBoeSwgc3RydWN0IHNhc19waHlfbGlua3JhdGVzICpyYXRlcykKK3sKKwlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBwaHlfdG9faW9jKHBoeSk7CisJc3RydWN0IF9zYXNfcGh5ICptcHQyc2FzX3BoeTsKKwlNcGkyU2FzSU9Vbml0UGFnZTFfdCAqc2FzX2lvdW5pdF9wZzEgPSBOVUxMOworCU1waTJTYXNQaHlQYWdlMF90IHBoeV9wZzA7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCXUxNiBpb2Nfc3RhdHVzOworCXUxNiBzejsKKwlpbnQgaTsKKwlpbnQgcmMgPSAwOworCisJbXB0MnNhc19waHkgPSBfdHJhbnNwb3J0X2ZpbmRfbG9jYWxfcGh5KGlvYywgcGh5KTsKKworCWlmICghbXB0MnNhc19waHkpIC8qIHRoaXMgcGh5IG5vdCBvbiBzYXNfaG9zdCAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghcmF0ZXMtPm1pbmltdW1fbGlua3JhdGUpCisJCXJhdGVzLT5taW5pbXVtX2xpbmtyYXRlID0gcGh5LT5taW5pbXVtX2xpbmtyYXRlOworCWVsc2UgaWYgKHJhdGVzLT5taW5pbXVtX2xpbmtyYXRlIDwgcGh5LT5taW5pbXVtX2xpbmtyYXRlX2h3KQorCQlyYXRlcy0+bWluaW11bV9saW5rcmF0ZSA9IHBoeS0+bWluaW11bV9saW5rcmF0ZV9odzsKKworCWlmICghcmF0ZXMtPm1heGltdW1fbGlua3JhdGUpCisJCXJhdGVzLT5tYXhpbXVtX2xpbmtyYXRlID0gcGh5LT5tYXhpbXVtX2xpbmtyYXRlOworCWVsc2UgaWYgKHJhdGVzLT5tYXhpbXVtX2xpbmtyYXRlID4gcGh5LT5tYXhpbXVtX2xpbmtyYXRlX2h3KQorCQlyYXRlcy0+bWF4aW11bV9saW5rcmF0ZSA9IHBoeS0+bWF4aW11bV9saW5rcmF0ZV9odzsKKworCS8qIHNhc19pb3VuaXQgcGFnZSAxICovCisJc3ogPSBvZmZzZXRvZihNcGkyU2FzSU9Vbml0UGFnZTFfdCwgUGh5RGF0YSkgKyAoaW9jLT5zYXNfaGJhLm51bV9waHlzICoKKwkgICAgc2l6ZW9mKE1waTJTYXNJT1VuaXQxUGh5RGF0YV90KSk7CisJc2FzX2lvdW5pdF9wZzEgPSBremFsbG9jKHN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNhc19pb3VuaXRfcGcxKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlpZiAoKG1wdDJzYXNfY29uZmlnX2dldF9zYXNfaW91bml0X3BnMShpb2MsICZtcGlfcmVwbHksCisJICAgIHNhc19pb3VuaXRfcGcxLCBzeikpKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsCisJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlyYyA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCisJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJaWYgKGlvY19zdGF0dXMgIT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5zYXNfaGJhLm51bV9waHlzOyBpKyspIHsKKwkJaWYgKG1wdDJzYXNfcGh5LT5waHlfaWQgIT0gaSkgeworCQkJc2FzX2lvdW5pdF9wZzEtPlBoeURhdGFbaV0uTWF4TWluTGlua1JhdGUgPQorCQkJICAgIChpb2MtPnNhc19oYmEucGh5W2ldLnBoeS0+bWluaW11bV9saW5rcmF0ZSArCisJCQkgICAgKGlvYy0+c2FzX2hiYS5waHlbaV0ucGh5LT5tYXhpbXVtX2xpbmtyYXRlIDw8IDQpKTsKKwkJfSBlbHNlIHsKKwkJCXNhc19pb3VuaXRfcGcxLT5QaHlEYXRhW2ldLk1heE1pbkxpbmtSYXRlID0KKwkJCSAgICAocmF0ZXMtPm1pbmltdW1fbGlua3JhdGUgKworCQkJICAgIChyYXRlcy0+bWF4aW11bV9saW5rcmF0ZSA8PCA0KSk7CisJCX0KKwl9CisKKwlpZiAobXB0MnNhc19jb25maWdfc2V0X3Nhc19pb3VuaXRfcGcxKGlvYywgJm1waV9yZXBseSwgc2FzX2lvdW5pdF9wZzEsCisJICAgIHN6KSkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJcmMgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCS8qIGxpbmsgcmVzZXQgKi8KKwlfdHJhbnNwb3J0X3BoeV9yZXNldChwaHksIDApOworCisJLyogcmVhZCBwaHkgcGFnZSAwLCB0aGVuIHVwZGF0ZSB0aGUgcmF0ZXMgaW4gdGhlIHNhcyB0cmFuc3BvcnQgcGh5ICovCisJaWYgKCFtcHQyc2FzX2NvbmZpZ19nZXRfcGh5X3BnMChpb2MsICZtcGlfcmVwbHksICZwaHlfcGcwLAorCSAgICBtcHQyc2FzX3BoeS0+cGh5X2lkKSkgeworCQlwaHktPm1pbmltdW1fbGlua3JhdGUgPSBfdHJhbnNwb3J0X2NvbnZlcnRfcGh5X2xpbmtfcmF0ZSgKKwkJICAgIHBoeV9wZzAuUHJvZ3JhbW1lZExpbmtSYXRlICYgTVBJMl9TQVNfUFJBVEVfTUlOX1JBVEVfTUFTSyk7CisJCXBoeS0+bWF4aW11bV9saW5rcmF0ZSA9IF90cmFuc3BvcnRfY29udmVydF9waHlfbGlua19yYXRlKAorCQkgICAgcGh5X3BnMC5Qcm9ncmFtbWVkTGlua1JhdGUgPj4gNCk7CisJCXBoeS0+bmVnb3RpYXRlZF9saW5rcmF0ZSA9IF90cmFuc3BvcnRfY29udmVydF9waHlfbGlua19yYXRlKAorCQkgICAgcGh5X3BnMC5OZWdvdGlhdGVkTGlua1JhdGUgJgorCQkgICAgTVBJMl9TQVNfTkVHX0xJTktfUkFURV9NQVNLX1BIWVNJQ0FMKTsKKwl9CisKKyBvdXQ6CisJa2ZyZWUoc2FzX2lvdW5pdF9wZzEpOworCXJldHVybiByYzsKK30KKworCisvKioKICAqIF90cmFuc3BvcnRfc21wX2hhbmRsZXIgLSB0cmFuc3BvcnQgcG9ydGFsIGZvciBzbXAgcGFzc3RocnUKICAqIEBzaG9zdDogc2hvc3Qgb2JqZWN0CiAgKiBAcnBoeTogc2FzIHRyYW5zcG9ydCBycGh5IG9iamVjdApAQCAtMTIwNyw2ICsxMzczLDggQEAKIAkuZ2V0X2VuY2xvc3VyZV9pZGVudGlmaWVyID0gX3RyYW5zcG9ydF9nZXRfZW5jbG9zdXJlX2lkZW50aWZpZXIsCiAJLmdldF9iYXlfaWRlbnRpZmllcgk9IF90cmFuc3BvcnRfZ2V0X2JheV9pZGVudGlmaWVyLAogCS5waHlfcmVzZXQJCT0gX3RyYW5zcG9ydF9waHlfcmVzZXQsCisJLnBoeV9lbmFibGUJCT0gX3RyYW5zcG9ydF9waHlfZW5hYmxlLAorCS5zZXRfcGh5X3NwZWVkCQk9IF90cmFuc3BvcnRfcGh5X3NwZWVkLAogCS5zbXBfaGFuZGxlcgkJPSBfdHJhbnNwb3J0X3NtcF9oYW5kbGVyLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaW5pdC5jIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaW5pdC5jCmluZGV4IGMyZjEwMzIuLmY4MGMxZGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaW5pdC5jCkBAIC02NTQsNyArNjU0LDcgQEAKIAl9CiAJY2hpcCA9ICZwbTgwMDFfY2hpcHNbZW50LT5kcml2ZXJfZGF0YV07CiAJU0hPU1RfVE9fU0FTX0hBKHNob3N0KSA9Ci0JCWtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzYXNfaGFfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYXNfaGFfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFTSE9TVF9UT19TQVNfSEEoc2hvc3QpKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfaG9zdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCmluZGV4IGI2ZjFlZjkuLjliMWMxNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL3BtY3JhaWQuYwpAQCAtMjM1LDcgKzIzNSw3IEBACiAJCXNjc2lfZGV2LT5hbGxvd19yZXN0YXJ0ID0gMTsKIAkJYmxrX3F1ZXVlX3JxX3RpbWVvdXQoc2NzaV9kZXYtPnJlcXVlc3RfcXVldWUsCiAJCQkJICAgICBQTUNSQUlEX1ZTRVRfSU9fVElNRU9VVCk7Ci0JCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzY3NpX2Rldi0+cmVxdWVzdF9xdWV1ZSwKKwkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHNjc2lfZGV2LT5yZXF1ZXN0X3F1ZXVlLAogCQkJCSAgICAgIFBNQ1JBSURfVlNFVF9NQVhfU0VDVE9SUyk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jIGIvZHJpdmVycy9zY3NpL3FsYTEyODAuYwppbmRleCA4MzcxZDkxLi40OWFjNDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKQEAgLTE2NDAsOCArMTY0MCwxMCBAQAogCXVpbnQxNl90IG1iW01BSUxCT1hfUkVHSVNURVJfQ09VTlRdLCBpOwogCWludCBlcnI7CiAKKwlzcGluX3VubG9ja19pcnEoaGEtPmhvc3QtPmhvc3RfbG9jayk7CiAJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIHFsMTI4MF9ib2FyZF90YmxbaGEtPmRldm51bV0uZnduYW1lLAogCQkJICAgICAgICZoYS0+cGRldi0+ZGV2KTsKKwlzcGluX2xvY2tfaXJxKGhhLT5ob3N0LT5ob3N0X2xvY2spOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gbG9hZCBpbWFnZSBcIiVzXCIgZXJyICVkXG4iLAogCQkgICAgICAgcWwxMjgwX2JvYXJkX3RibFtoYS0+ZGV2bnVtXS5md25hbWUsIGVycik7CkBAIC0xNjk5LDggKzE3MDEsMTAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAjZW5kaWYKIAorCXNwaW5fdW5sb2NrX2lycShoYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgcWwxMjgwX2JvYXJkX3RibFtoYS0+ZGV2bnVtXS5md25hbWUsCiAJCQkgICAgICAgJmhhLT5wZGV2LT5kZXYpOworCXNwaW5fbG9ja19pcnEoaGEtPmhvc3QtPmhvc3RfbG9jayk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBsb2FkIGltYWdlIFwiJXNcIiBlcnIgJWRcbiIsCiAJCSAgICAgICBxbDEyODBfYm9hcmRfdGJsW2hhLT5kZXZudW1dLmZ3bmFtZSwgZXJyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCmluZGV4IDNhOWY1YjIuLjkwZDFlMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwpAQCAtMTEsNyArMTEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKIHN0YXRpYyBpbnQgcWxhMjR4eF92cG9ydF9kaXNhYmxlKHN0cnVjdCBmY192cG9ydCAqLCBib29sKTsKLQorc3RhdGljIGludCBxbGE4NHh4X3Jlc2V0KHNjc2lfcWxhX2hvc3RfdCAqLCBzdHJ1Y3QgbXNnX2VjaG9fbGIgKiwgc3RydWN0IGZjX2JzZ19qb2IgKik7CitpbnQgcWxhODR4eF9yZXNldF9jaGlwKHNjc2lfcWxhX2hvc3RfdCAqLCB1aW50MTZfdCwgdWludDE2X3QgKik7CitzdGF0aWMgaW50IHFsYTg0eHhfbWdtdF9jbWQoc2NzaV9xbGFfaG9zdF90ICosIHN0cnVjdCBtc2dfZWNob19sYiAqLCBzdHJ1Y3QgZmNfYnNnX2pvYiAqKTsKIC8qIFNZU0ZTIGF0dHJpYnV0ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0xMTY4LDYgKzExNzAsMjggQEAKIH0KIAogc3RhdGljIHNzaXplX3QKK3FsYTI0eHhfODR4eF9md192ZXJzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJaW50IHJ2YWwgPSBRTEFfU1VDQ0VTUzsKKwl1aW50MTZfdCBzdGF0dXNbMl0gPSB7MCwgMH07CisJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBzaG9zdF9wcml2KGNsYXNzX3RvX3Nob3N0KGRldikpOworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCisJaWYgKElTX1FMQTg0WFgoaGEpICYmIGhhLT5jczg0eHgpIHsKKwkJaWYgKGhhLT5jczg0eHgtPm9wX2Z3X3ZlcnNpb24gPT0gMCkgeworCQkJcnZhbCA9IHFsYTg0eHhfdmVyaWZ5X2NoaXAodmhhLCBzdGF0dXMpOworCX0KKworCWlmICgocnZhbCA9PSBRTEFfU1VDQ0VTUykgJiYgKHN0YXR1c1swXSA9PSAwKSkKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsCisJCQkodWludDMyX3QpaGEtPmNzODR4eC0+b3BfZndfdmVyc2lvbik7CisJfQorCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiXG4iKTsKK30KKworc3RhdGljIHNzaXplX3QKIHFsYTJ4MDBfbXBpX3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogICAgIGNoYXIgKmJ1ZikKIHsKQEAgLTEyODEsNiArMTMwNSw4IEBACiAJCSAgIHFsYTJ4MDBfb3B0cm9tX2Zjb2RlX3ZlcnNpb25fc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIob3B0cm9tX2Z3X3ZlcnNpb24sIFNfSVJVR08sIHFsYTJ4MDBfb3B0cm9tX2Z3X3ZlcnNpb25fc2hvdywKIAkJICAgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoODR4eF9md192ZXJzaW9uLCBTX0lSVUdPLCBxbGEyNHh4Xzg0eHhfZndfdmVyc2lvbl9zaG93LAorCQkgICBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUih0b3RhbF9pc3BfYWJvcnRzLCBTX0lSVUdPLCBxbGEyeDAwX3RvdGFsX2lzcF9hYm9ydHNfc2hvdywKIAkJICAgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIobXBpX3ZlcnNpb24sIFNfSVJVR08sIHFsYTJ4MDBfbXBpX3ZlcnNpb25fc2hvdywgTlVMTCk7CkBAIC0xMzEwLDYgKzEzMzYsNyBAQAogCSZkZXZfYXR0cl9vcHRyb21fZWZpX3ZlcnNpb24sCiAJJmRldl9hdHRyX29wdHJvbV9mY29kZV92ZXJzaW9uLAogCSZkZXZfYXR0cl9vcHRyb21fZndfdmVyc2lvbiwKKwkmZGV2X2F0dHJfODR4eF9md192ZXJzaW9uLAogCSZkZXZfYXR0cl90b3RhbF9pc3BfYWJvcnRzLAogCSZkZXZfYXR0cl9tcGlfdmVyc2lvbiwKIAkmZGV2X2F0dHJfcGh5X3ZlcnNpb24sCkBAIC0xNTA0LDggKzE1MzEsNiBAQAogCQlmY3BvcnQtPnZoYS0+aHctPmlzcF9vcHMtPmZhYnJpY19sb2dvdXQoZmNwb3J0LT52aGEsCiAJCQlmY3BvcnQtPmxvb3BfaWQsIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwKIAkJCWZjcG9ydC0+ZF9pZC5iLmFyZWEsIGZjcG9ydC0+ZF9pZC5iLmFsX3BhKTsKLQotCXFsYTJ4MDBfYWJvcnRfZmNwb3J0X2NtZHMoZmNwb3J0KTsKIH0KIAogc3RhdGljIGludApAQCAtMTc5NSw2ICsxODIwLDU4MSBAQAogCXJldHVybiAwOwogfQogCisvKiBCU0cgc3VwcG9ydCBmb3IgRUxTL0NUIHBhc3MgdGhyb3VnaCAqLworaW5saW5lIHNyYl90ICoKK3FsYTJ4MDBfZ2V0X2N0eF9ic2dfc3Aoc2NzaV9xbGFfaG9zdF90ICp2aGEsIGZjX3BvcnRfdCAqZmNwb3J0LCBzaXplX3Qgc2l6ZSkKK3sKKwlzcmJfdCAqc3A7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisJc3RydWN0IHNyYl9ic2dfY3R4ICpjdHg7CisKKwlzcCA9IG1lbXBvb2xfYWxsb2MoaGEtPnNyYl9tZW1wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNwKQorCQlnb3RvIGRvbmU7CisJY3R4ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0eCkgeworCQltZW1wb29sX2ZyZWUoc3AsIGhhLT5zcmJfbWVtcG9vbCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwltZW1zZXQoc3AsIDAsIHNpemVvZigqc3ApKTsKKwlzcC0+ZmNwb3J0ID0gZmNwb3J0OworCXNwLT5jdHggPSBjdHg7Citkb25lOgorCXJldHVybiBzcDsKK30KKworc3RhdGljIGludAorcWxhMngwMF9wcm9jZXNzX2VscyhzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYikKK3sKKwlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OworCWZjX3BvcnRfdCAqZmNwb3J0OworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CisJc2NzaV9xbGFfaG9zdF90ICp2aGE7CisJc3RydWN0IHFsYV9od19kYXRhICpoYTsKKwlzcmJfdCAqc3A7CisJY29uc3QgY2hhciAqdHlwZTsKKwlpbnQgcmVxX3NnX2NudCwgcnNwX3NnX2NudDsKKwlpbnQgcnZhbCA9ICAoRFJJVkVSX0VSUk9SIDw8IDE2KTsKKwl1aW50MTZfdCBuZXh0bGlkID0gMDsKKwlzdHJ1Y3Qgc3JiX2JzZyAqZWxzOworCisJLyogIE11bHRpcGxlIFNHJ3MgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIEVMUyByZXF1ZXN0cyAqLworICAgICAgICBpZiAoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCA+IDEgfHwKKwkJYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQgPiAxKSB7CisJCURFQlVHMihwcmludGsoS0VSTl9JTkZPCisJCSAgICAibXVsdGlwbGUgU0cncyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgRUxTIHJlcXVlc3RzIgorCQkgICAgIiBbcmVxdWVzdF9zZ19jbnQ6ICV4IHJlcGx5X3NnX2NudDogJXhdXG4iLAorCQkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwKKwkJICAgIGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250KSk7CisJCXJ2YWwgPSAtRVBFUk07CisJCWdvdG8gZG9uZTsKKyAgICAgICAgfQorCisJLyogRUxTIHJlcXVlc3QgZm9yIHJwb3J0ICovCisJaWYgKGJzZ19qb2ItPnJlcXVlc3QtPm1zZ2NvZGUgPT0gRkNfQlNHX1JQVF9FTFMpIHsKKwkJcnBvcnQgPSBic2dfam9iLT5ycG9ydDsKKwkJZmNwb3J0ID0gKihmY19wb3J0X3QgKiopIHJwb3J0LT5kZF9kYXRhOworCQlob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOworCQl2aGEgPSBzaG9zdF9wcml2KGhvc3QpOworCQloYSA9IHZoYS0+aHc7CisJCXR5cGUgPSAiRkNfQlNHX1JQVF9FTFMiOworCisJCS8qIG1ha2Ugc3VyZSB0aGUgcnBvcnQgaXMgbG9nZ2VkIGluLAorCQkgKiBpZiBub3QgcGVyZm9ybSBmYWJyaWMgbG9naW4KKwkJICovCisJCWlmIChxbGEyeDAwX2ZhYnJpY19sb2dpbih2aGEsIGZjcG9ydCwgJm5leHRsaWQpKSB7CisJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJICAgICJmYWlsZWQgdG8gbG9naW4gcG9ydCAlMDZYIGZvciBFTFMgcGFzc3RocnVcbiIsCisJCQkgICAgZmNwb3J0LT5kX2lkLmIyNCkpOworCQkJcnZhbCA9IC1FSU87CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9IGVsc2UgeworCQlob3N0ID0gYnNnX2pvYi0+c2hvc3Q7CisJCXZoYSA9IHNob3N0X3ByaXYoaG9zdCk7CisJCWhhID0gdmhhLT5odzsKKwkJdHlwZSA9ICJGQ19CU0dfSFNUX0VMU19OT0xPR0lOIjsKKworCQkvKiBBbGxvY2F0ZSBhIGR1bW15IGZjcG9ydCBzdHJ1Y3R1cmUsIHNpbmNlIGZ1bmN0aW9ucworCQkgKiBwcmVwYXJpbmcgdGhlIElPQ0IgYW5kIG1haWxib3ggY29tbWFuZCByZXRyaWV2ZXMgcG9ydAorCQkgKiBzcGVjaWZpYyBpbmZvcm1hdGlvbiBmcm9tIGZjcG9ydCBzdHJ1Y3R1cmUuIEZvciBIb3N0IGJhc2VkCisJCSAqIEVMUyBjb21tYW5kcyB0aGVyZSB3aWxsIGJlIG5vIGZjcG9ydCBzdHJ1Y3R1cmUgYWxsb2NhdGVkCisJCSAqLworCQlmY3BvcnQgPSBxbGEyeDAwX2FsbG9jX2ZjcG9ydCh2aGEsIEdGUF9LRVJORUwpOworCQlpZiAoIWZjcG9ydCkgeworCQkJcnZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQkvKiBJbml0aWFsaXplIGFsbCByZXF1aXJlZCAgZmllbGRzIG9mIGZjcG9ydCAqLworCQlmY3BvcnQtPnZoYSA9IHZoYTsKKwkJZmNwb3J0LT52cF9pZHggPSB2aGEtPnZwX2lkeDsKKwkJZmNwb3J0LT5kX2lkLmIuYWxfcGEgPQorCQkgICAgYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfZWxzLnBvcnRfaWRbMF07CisJCWZjcG9ydC0+ZF9pZC5iLmFyZWEgPQorCQkgICAgYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfZWxzLnBvcnRfaWRbMV07CisJCWZjcG9ydC0+ZF9pZC5iLmRvbWFpbiA9CisJCSAgICBic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF9lbHMucG9ydF9pZFsyXTsKKwkJZmNwb3J0LT5sb29wX2lkID0KKwkJICAgIChmY3BvcnQtPmRfaWQuYi5hbF9wYSA9PSAweEZEKSA/CisJCSAgICBOUEhfRkFCUklDX0NPTlRST0xMRVIgOiBOUEhfRl9QT1JUOworCX0KKworCWlmICghdmhhLT5mbGFncy5vbmxpbmUpIHsKKwkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJICAgICJob3N0IG5vdCBvbmxpbmVcbiIpKTsKKwkJcnZhbCA9IC1FSU87CisJCWdvdG8gZG9uZTsKKwl9CisKKyAgICAgICAgcmVxX3NnX2NudCA9CisJICAgIGRtYV9tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKyAgICAgICAgaWYgKCFyZXFfc2dfY250KSB7CisJCXJ2YWwgPSAtRU5PTUVNOworCQlnb3RvIGRvbmVfZnJlZV9mY3BvcnQ7CisJfQorICAgICAgICByc3Bfc2dfY250ID0gZG1hX21hcF9zZygmaGEtPnBkZXYtPmRldiwgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCSAgICBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKKyAgICAgICAgaWYgKCFyc3Bfc2dfY250KSB7CisJCXJ2YWwgPSAtRU5PTUVNOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZV9mcmVlX2ZjcG9ydDsKKwl9CisKKwlpZiAoKHJlcV9zZ19jbnQgIT0gIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQpIHx8CisJICAgIChyc3Bfc2dfY250ICE9IGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250KSkKKwl7CisJCURFQlVHMihwcmludGsoS0VSTl9JTkZPCisJCSAgICAiZG1hIG1hcHBpbmcgcmVzdWx0ZWQgaW4gZGlmZmVyZW50IHNnIGNvdW50cyBcCisJCSAgICBbcmVxdWVzdF9zZ19jbnQ6ICV4IGRtYV9yZXF1ZXN0X3NnX2NudDogJXhcCisJCSAgICByZXBseV9zZ19jbnQ6ICV4IGRtYV9yZXBseV9zZ19jbnQ6ICV4XVxuIiwKKwkJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIHJlcV9zZ19jbnQsCisJCSAgICBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgcnNwX3NnX2NudCkpOworCQlydmFsID0gLUVBR0FJTjsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmVfdW5tYXBfc2c7CisJfQorCisJLyogQWxsb2MgU1JCIHN0cnVjdHVyZSAqLworCXNwID0gcWxhMngwMF9nZXRfY3R4X2JzZ19zcCh2aGEsIGZjcG9ydCwgc2l6ZW9mKHN0cnVjdCBzcmJfYnNnKSk7CisJaWYgKCFzcCkgeworCQlydmFsID0gLUVOT01FTTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmVfdW5tYXBfc2c7CisJfQorCisJZWxzID0gc3AtPmN0eDsKKwllbHMtPmN0eC50eXBlID0KKwkgICAgKGJzZ19qb2ItPnJlcXVlc3QtPm1zZ2NvZGUgPT0gRkNfQlNHX1JQVF9FTFMgPworCSAgICBTUkJfRUxTX0NNRF9SUFQgOiBTUkJfRUxTX0NNRF9IU1QpOworCWVscy0+YnNnX2pvYiA9IGJzZ19qb2I7CisKKwlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCSAgICAic2NzaSglbGQ6JXgpOiBic2cgcnFzdCB0eXBlOiAlcyBlbHMgdHlwZTogJXggLSBsb29wLWlkPSV4ICIKKwkgICAgInBvcnRpZD0lMDJ4JTAyeCUwMnguXG4iLCB2aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIHR5cGUsCisJICAgIGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2Vscy5jb21tYW5kX2NvZGUsCisJICAgIGZjcG9ydC0+bG9vcF9pZCwgZmNwb3J0LT5kX2lkLmIuZG9tYWluLCBmY3BvcnQtPmRfaWQuYi5hcmVhLAorCSAgICBmY3BvcnQtPmRfaWQuYi5hbF9wYSkpOworCisJcnZhbCA9IHFsYTJ4MDBfc3RhcnRfc3Aoc3ApOworCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CisJCWtmcmVlKHNwLT5jdHgpOworCQltZW1wb29sX2ZyZWUoc3AsIGhhLT5zcmJfbWVtcG9vbCk7CisJCXJ2YWwgPSAtRUlPOworCQlnb3RvIGRvbmVfdW5tYXBfc2c7CisJfQorCXJldHVybiBydmFsOworCitkb25lX3VubWFwX3NnOgorCWRtYV91bm1hcF9zZygmaGEtPnBkZXYtPmRldiwgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJCWJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworCWRtYV91bm1hcF9zZygmaGEtPnBkZXYtPmRldiwgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCQlic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKKwlnb3RvIGRvbmVfZnJlZV9mY3BvcnQ7CisKK2RvbmVfZnJlZV9mY3BvcnQ6CisJaWYgKGJzZ19qb2ItPnJlcXVlc3QtPm1zZ2NvZGUgPT0gRkNfQlNHX0hTVF9FTFNfTk9MT0dJTikKKwkJa2ZyZWUoZmNwb3J0KTsKK2RvbmU6CisJcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyBpbnQKK3FsYTJ4MDBfcHJvY2Vzc19jdChzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYikKK3sKKwlzcmJfdCAqc3A7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGJzZ19qb2ItPnNob3N0OworCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gc2hvc3RfcHJpdihob3N0KTsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKwlpbnQgcnZhbCA9IChEUklWRVJfRVJST1IgPDwgMTYpOworCWludCByZXFfc2dfY250LCByc3Bfc2dfY250OworCXVpbnQxNl90IGxvb3BfaWQ7CisJc3RydWN0IGZjX3BvcnQgKmZjcG9ydDsKKwljaGFyICAqdHlwZSA9ICJGQ19CU0dfSFNUX0NUIjsKKwlzdHJ1Y3Qgc3JiX2JzZyAqY3Q7CisKKwkvKiBwYXNzIHRocm91Z2ggaXMgc3VwcG9ydGVkIG9ubHkgZm9yIElTUCA0R2Igb3IgaGlnaGVyICovCisgICAgICAgIGlmICghSVNfRldJMl9DQVBBQkxFKGhhKSkgeworCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkgICAgInNjc2koJWxkKTpGaXJtd2FyZSBpcyBub3QgY2FwYWJsZSB0byBzdXBwb3J0IEZDICIKKwkJICAgICJDVCBwYXNzIHRocnVcbiIsIHZoYS0+aG9zdF9ubykpOworCQlydmFsID0gLUVQRVJNOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKwl9CisKKyAgICAgICAgcmVxX3NnX2NudCA9CisJICAgIGRtYV9tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKyAgICAgICAgaWYgKCFyZXFfc2dfY250KSB7CisJCXJ2YWwgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisgICAgICAgIHJzcF9zZ19jbnQgPSBkbWFfbWFwX3NnKCZoYS0+cGRldi0+ZGV2LCBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisgICAgICAgICAgICBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKKyAgICAgICAgaWYgKCFyc3Bfc2dfY250KSB7CisJCXJ2YWwgPSAtRU5PTUVNOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKwl9CisKKwlpZiAoKHJlcV9zZ19jbnQgIT0gIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQpIHx8CisJCShyc3Bfc2dfY250ICE9IGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250KSkKKwl7CisJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAiZG1hIG1hcHBpbmcgcmVzdWx0ZWQgaW4gZGlmZmVyZW50IHNnIGNvdW50cyBcCisJCSAgICBbcmVxdWVzdF9zZ19jbnQ6ICV4IGRtYV9yZXF1ZXN0X3NnX2NudDogJXhcCisJCSAgICByZXBseV9zZ19jbnQ6ICV4IGRtYV9yZXBseV9zZ19jbnQ6ICV4XVxuIiwKKwkJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIHJlcV9zZ19jbnQsCisJCSAgICBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgcnNwX3NnX2NudCkpOworCQlydmFsID0gLUVBR0FJTjsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmVfdW5tYXBfc2c7CisJfQorCisJaWYgKCF2aGEtPmZsYWdzLm9ubGluZSkgeworCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkgICAgImhvc3Qgbm90IG9ubGluZVxuIikpOworCQlydmFsID0gLUVJTzsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmVfdW5tYXBfc2c7CisJfQorCisJbG9vcF9pZCA9CisJICAgIChic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF9jdC5wcmVhbWJsZV93b3JkMSAmIDB4RkYwMDAwMDApCisJICAgID4+IDI0OworCXN3aXRjaCAobG9vcF9pZCkgeworCQljYXNlIDB4RkM6CisJCQlsb29wX2lkID0gY3B1X3RvX2xlMTYoTlBIX1NOUyk7CisJCQlicmVhazsKKwkJY2FzZSAweEZBOgorCQkJbG9vcF9pZCA9IHZoYS0+bWdtdF9zdnJfbG9vcF9pZDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJCSAgICAiVW5rbm93biBsb29wIGlkOiAleFxuIiwgbG9vcF9pZCkpOworCQkJcnZhbCA9IC1FSU5WQUw7CisJCQlnb3RvIGRvbmVfdW5tYXBfc2c7CisJfQorCisJLyogQWxsb2NhdGUgYSBkdW1teSBmY3BvcnQgc3RydWN0dXJlLCBzaW5jZSBmdW5jdGlvbnMgcHJlcGFyaW5nIHRoZQorCSAqIElPQ0IgYW5kIG1haWxib3ggY29tbWFuZCByZXRyaWV2ZXMgcG9ydCBzcGVjaWZpYyBpbmZvcm1hdGlvbgorCSAqIGZyb20gZmNwb3J0IHN0cnVjdHVyZS4gRm9yIEhvc3QgYmFzZWQgRUxTIGNvbW1hbmRzIHRoZXJlIHdpbGwgYmUKKwkgKiBubyBmY3BvcnQgc3RydWN0dXJlIGFsbG9jYXRlZAorCSAqLworCWZjcG9ydCA9IHFsYTJ4MDBfYWxsb2NfZmNwb3J0KHZoYSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmY3BvcnQpCisJeworCQlydmFsID0gLUVOT01FTTsKKwkJZ290byAgZG9uZV91bm1hcF9zZzsKKwl9CisKKwkvKiBJbml0aWFsaXplIGFsbCByZXF1aXJlZCAgZmllbGRzIG9mIGZjcG9ydCAqLworCWZjcG9ydC0+dmhhID0gdmhhOworCWZjcG9ydC0+dnBfaWR4ID0gdmhhLT52cF9pZHg7CisJZmNwb3J0LT5kX2lkLmIuYWxfcGEgPSBic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF9jdC5wb3J0X2lkWzBdOworCWZjcG9ydC0+ZF9pZC5iLmFyZWEgPSBic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF9jdC5wb3J0X2lkWzFdOworCWZjcG9ydC0+ZF9pZC5iLmRvbWFpbiA9IGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2N0LnBvcnRfaWRbMl07CisJZmNwb3J0LT5sb29wX2lkID0gbG9vcF9pZDsKKworCS8qIEFsbG9jIFNSQiBzdHJ1Y3R1cmUgKi8KKwlzcCA9IHFsYTJ4MDBfZ2V0X2N0eF9ic2dfc3AodmhhLCBmY3BvcnQsIHNpemVvZihzdHJ1Y3Qgc3JiX2JzZykpOworCWlmICghc3ApIHsKKwkJcnZhbCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZV9mcmVlX2ZjcG9ydDsKKwl9CisKKwljdCA9IHNwLT5jdHg7CisJY3QtPmN0eC50eXBlID0gU1JCX0NUX0NNRDsKKwljdC0+YnNnX2pvYiA9IGJzZ19qb2I7CisKKwlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCSAgICAic2NzaSglbGQ6JXgpOiBic2cgcnFzdCB0eXBlOiAlcyBlbHMgdHlwZTogJXggLSBsb29wLWlkPSV4ICIKKwkgICAgInBvcnRpZD0lMDJ4JTAyeCUwMnguXG4iLCB2aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIHR5cGUsCisJICAgIChic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF9jdC5wcmVhbWJsZV93b3JkMiA+PiAxNiksCisJICAgIGZjcG9ydC0+bG9vcF9pZCwgZmNwb3J0LT5kX2lkLmIuZG9tYWluLCBmY3BvcnQtPmRfaWQuYi5hcmVhLAorCSAgICBmY3BvcnQtPmRfaWQuYi5hbF9wYSkpOworCisJcnZhbCA9IHFsYTJ4MDBfc3RhcnRfc3Aoc3ApOworCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CisJCWtmcmVlKHNwLT5jdHgpOworCQltZW1wb29sX2ZyZWUoc3AsIGhhLT5zcmJfbWVtcG9vbCk7CisJCXJ2YWwgPSAtRUlPOworCQlnb3RvIGRvbmVfZnJlZV9mY3BvcnQ7CisJfQorCXJldHVybiBydmFsOworCitkb25lX2ZyZWVfZmNwb3J0OgorCWtmcmVlKGZjcG9ydCk7Citkb25lX3VubWFwX3NnOgorCWRtYV91bm1hcF9zZygmaGEtPnBkZXYtPmRldiwgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworCWRtYV91bm1hcF9zZygmaGEtPnBkZXYtPmRldiwgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCSAgICBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKK2RvbmU6CisJcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyBpbnQKK3FsYTJ4MDBfcHJvY2Vzc192ZW5kb3Jfc3BlY2lmaWMoc3RydWN0IGZjX2JzZ19qb2IgKmJzZ19qb2IpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGJzZ19qb2ItPnNob3N0OworCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gc2hvc3RfcHJpdihob3N0KTsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKwlpbnQgcnZhbDsKKwl1aW50OF90IGNvbW1hbmRfc2VudDsKKwl1aW50MzJfdCB2ZW5kb3JfY21kOworCWNoYXIgKnR5cGU7CisJc3RydWN0IG1zZ19lY2hvX2xiIGVscmVxOworCXVpbnQxNl90IHJlc3BvbnNlW01BSUxCT1hfUkVHSVNURVJfQ09VTlRdOworCXVpbnQ4X3QqIGZ3X3N0c19wdHI7CisJdWludDhfdCAqcmVxX2RhdGE7CisJZG1hX2FkZHJfdCByZXFfZGF0YV9kbWE7CisJdWludDMyX3QgcmVxX2RhdGFfbGVuOworCXVpbnQ4X3QgKnJzcF9kYXRhOworCWRtYV9hZGRyX3QgcnNwX2RhdGFfZG1hOworCXVpbnQzMl90IHJzcF9kYXRhX2xlbjsKKworCWlmICh0ZXN0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpIHx8CisJICAgIHRlc3RfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZ2aGEtPmRwY19mbGFncykgfHwKKwkgICAgdGVzdF9iaXQoSVNQX0FCT1JUX1JFVFJZLCAmdmhhLT5kcGNfZmxhZ3MpKSB7CisJCXJ2YWwgPSAtRUJVU1k7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoIXZoYS0+ZmxhZ3Mub25saW5lKSB7CisJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAiaG9zdCBub3Qgb25saW5lXG4iKSk7CisJCXJ2YWwgPSAtRUlPOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKwl9CisKKyAgICAgICAgZWxyZXEucmVxX3NnX2NudCA9CisJICAgIGRtYV9tYXBfc2coJmhhLT5wZGV2LT5kZXYsIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCSAgICBic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKyAgICAgICAgaWYgKCFlbHJlcS5yZXFfc2dfY250KSB7CisJCXJ2YWwgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorICAgICAgICBlbHJlcS5yc3Bfc2dfY250ID0KKwkgICAgZG1hX21hcF9zZygmaGEtPnBkZXYtPmRldiwgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCSAgICBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKKyAgICAgICAgaWYgKCFlbHJlcS5yc3Bfc2dfY250KSB7CisJCXJ2YWwgPSAtRU5PTUVNOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKwl9CisKKwlpZiAoKGVscmVxLnJlcV9zZ19jbnQgIT0gIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQpIHx8CisJICAgIChlbHJlcS5yc3Bfc2dfY250ICE9IGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250KSkKKwl7CisJCURFQlVHMihwcmludGsoS0VSTl9JTkZPCisJCSAgICAiZG1hIG1hcHBpbmcgcmVzdWx0ZWQgaW4gZGlmZmVyZW50IHNnIGNvdW50cyBcCisJCSAgICBbcmVxdWVzdF9zZ19jbnQ6ICV4IGRtYV9yZXF1ZXN0X3NnX2NudDogJXhcCisJCSAgICByZXBseV9zZ19jbnQ6ICV4IGRtYV9yZXBseV9zZ19jbnQ6ICV4XVxuIiwKKwkJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIGVscmVxLnJlcV9zZ19jbnQsCisJCSAgICBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgZWxyZXEucnNwX3NnX2NudCkpOworCQlydmFsID0gLUVBR0FJTjsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmVfdW5tYXBfc2c7CisJfQorCXJlcV9kYXRhX2xlbiA9IHJzcF9kYXRhX2xlbiA9IGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbjsKKwlyZXFfZGF0YSA9IGRtYV9hbGxvY19jb2hlcmVudCgmaGEtPnBkZXYtPmRldiwgcmVxX2RhdGFfbGVuLAorCSAgICAmcmVxX2RhdGFfZG1hLCBHRlBfS0VSTkVMKTsKKworCXJzcF9kYXRhID0gZG1hX2FsbG9jX2NvaGVyZW50KCZoYS0+cGRldi0+ZGV2LCByc3BfZGF0YV9sZW4sCisJICAgICZyc3BfZGF0YV9kbWEsIEdGUF9LRVJORUwpOworCisJLyogQ29weSB0aGUgcmVxdWVzdCBidWZmZXIgaW4gcmVxX2RhdGEgbm93ICovCisJc2dfY29weV90b19idWZmZXIoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIHJlcV9kYXRhLAorCSAgICByZXFfZGF0YV9sZW4pOworCisJZWxyZXEuc2VuZF9kbWEgPSByZXFfZGF0YV9kbWE7CisJZWxyZXEucmN2X2RtYSA9IHJzcF9kYXRhX2RtYTsKKwllbHJlcS50cmFuc2Zlcl9zaXplID0gcmVxX2RhdGFfbGVuOworCisJLyogVmVuZG9yIGNtZCA6IGxvb3BiYWNrIG9yIEVDSE8gZGlhZ25vc3RpYworCSAqIE9wdGlvbnM6CisJICogCUxvb3BiYWNrIDogRWl0aGVyIGludGVybmFsIG9yIGV4dGVybmFsIGxvb3BiYWNrCisJICogCUVDSE86IEVDSE8gRUxTIG9yIFZlbmRvciBzcGVjaWZpYyBGQzQgIGxpbmsgZGF0YQorCSAqLworCXZlbmRvcl9jbWQgPSBic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZFswXTsKKwllbHJlcS5vcHRpb25zID0KKwkgICAgKigoKHVpbnQzMl90ICopYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQpCisJICAgICsgMSk7CisKKwlzd2l0Y2ggKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kWzBdKSB7CisJY2FzZSBRTF9WTkRfTE9PUEJBQ0s6CisJCWlmIChoYS0+Y3VycmVudF90b3BvbG9neSAhPSBJU1BfQ0ZHX0YpIHsKKwkJCXR5cGUgPSAiRkNfQlNHX0hTVF9WRU5ET1JfTE9PUEJBQ0siOworCisJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkJCSJzY3NpKCVsZCkgYnNnIHJxc3QgdHlwZTogJXMgdmVuZG9yIHJxc3QgdHlwZTogJXggb3B0aW9uczogJXguXG4iLAorCQkJCXZoYS0+aG9zdF9ubywgdHlwZSwgdmVuZG9yX2NtZCwgZWxyZXEub3B0aW9ucykpOworCisJCQljb21tYW5kX3NlbnQgPSBJTlRfREVGX0xCX0xPT1BCQUNLX0NNRDsKKwkJCXJ2YWwgPSBxbGEyeDAwX2xvb3BiYWNrX3Rlc3QodmhhLCAmZWxyZXEsIHJlc3BvbnNlKTsKKwkJCWlmIChJU19RTEE4MVhYKGhhKSkgeworCQkJCWlmIChyZXNwb25zZVswXSA9PSBNQlNfQ09NTUFORF9FUlJPUiAmJiByZXNwb25zZVsxXSA9PSBNQlNfTEJfUkVTRVQpIHsKKwkJCQkJREVCVUcyKHByaW50ayhLRVJOX0VSUiAiJXMoJWxkKTogQUJPUlRpbmcgIgorCQkJCQkJIklTUFxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOworCQkJCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CisJCQkJCXFsYTJ4eHhfd2FrZV9kcGModmhhKTsKKwkJCQkgfQorCQkJfQorCQl9IGVsc2UgeworCQkJdHlwZSA9ICJGQ19CU0dfSFNUX1ZFTkRPUl9FQ0hPX0RJQUciOworCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJCQkic2NzaSglbGQpIGJzZyBycXN0IHR5cGU6ICVzIHZlbmRvciBycXN0IHR5cGU6ICV4IG9wdGlvbnM6ICV4LlxuIiwKKwkJCQl2aGEtPmhvc3Rfbm8sIHR5cGUsIHZlbmRvcl9jbWQsIGVscmVxLm9wdGlvbnMpKTsKKworCQkJY29tbWFuZF9zZW50ID0gSU5UX0RFRl9MQl9FQ0hPX0NNRDsKKwkJCXJ2YWwgPSBxbGEyeDAwX2VjaG9fdGVzdCh2aGEsICZlbHJlcSwgcmVzcG9uc2UpOworCQl9CisJCWJyZWFrOworCWNhc2UgUUxBODRfUkVTRVQ6CisJCWlmICghSVNfUUxBODRYWCh2aGEtPmh3KSkgeworCQkJcnZhbCA9IC1FSU5WQUw7CisJCQlERUJVRzE2KHByaW50aygKKwkJCQkiJXMoJWxkKTogOHh4eCBleGl0aW5nLlxuIiwKKwkJCQlfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCQlyZXR1cm4gcnZhbDsKKwkJfQorCQlydmFsID0gcWxhODR4eF9yZXNldCh2aGEsICZlbHJlcSwgYnNnX2pvYik7CisJCWJyZWFrOworCWNhc2UgUUxBODRfTUdNVF9DTUQ6CisJCWlmICghSVNfUUxBODRYWCh2aGEtPmh3KSkgeworCQkJcnZhbCA9IC1FSU5WQUw7CisJCQlERUJVRzE2KHByaW50aygKKwkJCQkiJXMoJWxkKTogOHh4eCBleGl0aW5nLlxuIiwKKwkJCQlfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CisJCQlyZXR1cm4gcnZhbDsKKwkJfQorCQlydmFsID0gcWxhODR4eF9tZ210X2NtZCh2aGEsICZlbHJlcSwgYnNnX2pvYik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJ2YWwgPSAtRU5PU1lTOworCX0KKworCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CisJCURFQlVHMihxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCQkic2NzaSglbGQpIFZlbmRvciByZXF1ZXN0ICVzIGZhaWxlZFxuIiwgdmhhLT5ob3N0X25vLCB0eXBlKSk7CisJCXJ2YWwgPSAwOworCQlic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gKERJRF9FUlJPUiA8PCAxNik7CisJCWJzZ19qb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCQlmd19zdHNfcHRyID0gKCh1aW50OF90Kilic2dfam9iLT5yZXEtPnNlbnNlKSArIHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcGx5KTsKKwkJbWVtY3B5KCBmd19zdHNfcHRyLCByZXNwb25zZSwgc2l6ZW9mKHJlc3BvbnNlKSk7CisJCWZ3X3N0c19wdHIgKz0gc2l6ZW9mKHJlc3BvbnNlKTsKKyAgICAgICAgICAgICAgICAqZndfc3RzX3B0ciA9IGNvbW1hbmRfc2VudDsKKwl9IGVsc2UgeworCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJInNjc2koJWxkKSBWZW5kb3IgcmVxdWVzdCAlcyBjb21wbGV0ZWRcbiIsIHZoYS0+aG9zdF9ubywgdHlwZSkpOworCQlydmFsID0gYnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IDA7CisJCWJzZ19qb2ItPnJlcGx5X2xlbiA9IHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcGx5KSArIHNpemVvZihyZXNwb25zZSkgKyBzaXplb2YodWludDhfdCk7CisJCWJzZ19qb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSBic2dfam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuOworCQlmd19zdHNfcHRyID0gKCh1aW50OF90Kilic2dfam9iLT5yZXEtPnNlbnNlKSArIHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcGx5KTsKKwkJbWVtY3B5KGZ3X3N0c19wdHIsIHJlc3BvbnNlLCBzaXplb2YocmVzcG9uc2UpKTsKKwkJZndfc3RzX3B0ciArPSBzaXplb2YocmVzcG9uc2UpOworCQkqZndfc3RzX3B0ciA9IGNvbW1hbmRfc2VudDsKKwkJc2dfY29weV9mcm9tX2J1ZmZlcihic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJCWJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCByc3BfZGF0YSwKKwkJcnNwX2RhdGFfbGVuKTsKKwl9CisJYnNnX2pvYi0+am9iX2RvbmUoYnNnX2pvYik7CisKK2RvbmVfdW5tYXBfc2c6CisKKwlpZihyZXFfZGF0YSkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJmhhLT5wZGV2LT5kZXYsIHJlcV9kYXRhX2xlbiwKKwkJCXJlcV9kYXRhLCByZXFfZGF0YV9kbWEpOworCWRtYV91bm1hcF9zZygmaGEtPnBkZXYtPmRldiwKKwkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworCWRtYV91bm1hcF9zZygmaGEtPnBkZXYtPmRldiwKKwkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCSAgICBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKKworZG9uZToKKyAgICAgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyBpbnQKK3FsYTI0eHhfYnNnX3JlcXVlc3Qoc3RydWN0IGZjX2JzZ19qb2IgKmJzZ19qb2IpCit7CisgICAgICAgIGludCByZXQgPSAtRUlOVkFMOworCisgICAgICAgIHN3aXRjaCAoYnNnX2pvYi0+cmVxdWVzdC0+bXNnY29kZSkgeworCQljYXNlIEZDX0JTR19SUFRfRUxTOgorCQljYXNlIEZDX0JTR19IU1RfRUxTX05PTE9HSU46CisJCQlyZXQgPSBxbGEyeDAwX3Byb2Nlc3NfZWxzKGJzZ19qb2IpOworCQkJYnJlYWs7CisJCWNhc2UgRkNfQlNHX0hTVF9DVDoKKwkJCXJldCA9IHFsYTJ4MDBfcHJvY2Vzc19jdChic2dfam9iKTsKKwkJCWJyZWFrOworCQljYXNlIEZDX0JTR19IU1RfVkVORE9SOgorCQkJcmV0ID0gcWxhMngwMF9wcm9jZXNzX3ZlbmRvcl9zcGVjaWZpYyhic2dfam9iKTsKKwkJCWJyZWFrOworCQljYXNlIEZDX0JTR19IU1RfQUREX1JQT1JUOgorCQljYXNlIEZDX0JTR19IU1RfREVMX1JQT1JUOgorCQljYXNlIEZDX0JTR19SUFRfQ1Q6CisJCWRlZmF1bHQ6CisJCQlERUJVRzIocHJpbnRrKCJxbGEyeHh4OiB1bnN1cHBvcnRlZCBCU0cgcmVxdWVzdFxuIikpOworCQkJYnJlYWs7CisgICAgICAgIH0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitxbGEyNHh4X2JzZ190aW1lb3V0KHN0cnVjdCBmY19ic2dfam9iICpic2dfam9iKQoreworICAgICAgICBzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHNob3N0X3ByaXYoYnNnX2pvYi0+c2hvc3QpOworICAgICAgICBzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKyAgICAgICAgc3JiX3QgKnNwOworICAgICAgICBpbnQgY250LCBxdWU7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgICAgIHN0cnVjdCByZXFfcXVlICpyZXE7CisJc3RydWN0IHNyYl9ic2cgKnNwX2JzZzsKKworCS8qIGZpbmQgdGhlIGJzZyBqb2IgZnJvbSB0aGUgYWN0aXZlIGxpc3Qgb2YgY29tbWFuZHMgKi8KKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJZm9yIChxdWUgPSAwOyBxdWUgPCBoYS0+bWF4X3JlcV9xdWV1ZXM7IHF1ZSsrKSB7CisJCXJlcSA9IGhhLT5yZXFfcV9tYXBbcXVlXTsKKwkJaWYgKCFyZXEpCisJCQljb250aW51ZTsKKworCQlmb3IgKGNudCA9IDE7IGNudCA8IE1BWF9PVVRTVEFORElOR19DT01NQU5EUzsgY250KysgKSB7CisJCQlzcCA9IHJlcS0+b3V0c3RhbmRpbmdfY21kc1tjbnRdOworCisJCQlpZiAoc3ApIHsKKwkJCQlzcF9ic2cgPSAoc3RydWN0IHNyYl9ic2cqKXNwLT5jdHg7CisKKwkJCQlpZiAoKChzcF9ic2ctPmN0eC50eXBlID09IFNSQl9DVF9DTUQpIHx8CisJCQkJICAgIChzcF9ic2ctPmN0eC50eXBlID09IFNSQl9FTFNfQ01EX1JQVCkKKwkJCQkgICAgfHwgKCBzcF9ic2ctPmN0eC50eXBlID09IFNSQl9FTFNfQ01EX0hTVCkpICYmCisJCQkJICAgIChzcF9ic2ctPmJzZ19qb2IgPT0gYnNnX2pvYikpIHsKKwkJCQkJaWYgKGhhLT5pc3Bfb3BzLT5hYm9ydF9jb21tYW5kKHNwKSkgeworCQkJCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJCQkJCSJzY3NpKCVsZCk6IG1ieCBhYm9ydF9jb21tYW5kIGZhaWxlZFxuIiwgdmhhLT5ob3N0X25vKSk7CisJCQkJCQlic2dfam9iLT5yZXEtPmVycm9ycyA9IGJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAtRUlPOworCQkJCQl9IGVsc2UgeworCQkJCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJCQkJCSJzY3NpKCVsZCk6IG1ieCBhYm9ydF9jb21tYW5kIHN1Y2Nlc3NcbiIsIHZoYS0+aG9zdF9ubykpOworCQkJCQkJYnNnX2pvYi0+cmVxLT5lcnJvcnMgPSBic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gMDsKKwkJCQkJfQorCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCQkJfQorCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJInNjc2koJWxkKSBTUkIgbm90IGZvdW5kIHRvIGFib3J0XG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwlic2dfam9iLT5yZXEtPmVycm9ycyA9IGJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSAtRU5YSU87CisJcmV0dXJuIDA7CisKK2RvbmU6CisJaWYgKGJzZ19qb2ItPnJlcXVlc3QtPm1zZ2NvZGUgPT0gRkNfQlNHX0hTVF9DVCkKKwkJa2ZyZWUoc3AtPmZjcG9ydCk7CisJa2ZyZWUoc3AtPmN0eCk7CisJbWVtcG9vbF9mcmVlKHNwLCBoYS0+c3JiX21lbXBvb2wpOworCXJldHVybiAwOworfQorCiBzdHJ1Y3QgZmNfZnVuY3Rpb25fdGVtcGxhdGUgcWxhMnh4eF90cmFuc3BvcnRfZnVuY3Rpb25zID0gewogCiAJLnNob3dfaG9zdF9ub2RlX25hbWUgPSAxLApAQCAtMTgzOCw2ICsyNDM4LDggQEAKIAkudnBvcnRfY3JlYXRlID0gcWxhMjR4eF92cG9ydF9jcmVhdGUsCiAJLnZwb3J0X2Rpc2FibGUgPSBxbGEyNHh4X3Zwb3J0X2Rpc2FibGUsCiAJLnZwb3J0X2RlbGV0ZSA9IHFsYTI0eHhfdnBvcnRfZGVsZXRlLAorCS5ic2dfcmVxdWVzdCA9IHFsYTI0eHhfYnNnX3JlcXVlc3QsCisJLmJzZ190aW1lb3V0ID0gcWxhMjR4eF9ic2dfdGltZW91dCwKIH07CiAKIHN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSBxbGEyeHh4X3RyYW5zcG9ydF92cG9ydF9mdW5jdGlvbnMgPSB7CkBAIC0xODc4LDYgKzI0ODAsOCBAQAogCS5kZXZfbG9zc190bW9fY2FsbGJrID0gcWxhMngwMF9kZXZfbG9zc190bW9fY2FsbGJrLAogCS50ZXJtaW5hdGVfcnBvcnRfaW8gPSBxbGEyeDAwX3Rlcm1pbmF0ZV9ycG9ydF9pbywKIAkuZ2V0X2ZjX2hvc3Rfc3RhdHMgPSBxbGEyeDAwX2dldF9mY19ob3N0X3N0YXRzLAorCS5ic2dfcmVxdWVzdCA9IHFsYTI0eHhfYnNnX3JlcXVlc3QsCisJLmJzZ190aW1lb3V0ID0gcWxhMjR4eF9ic2dfdGltZW91dCwKIH07CiAKIHZvaWQKQEAgLTE5MDYsMyArMjUxMCwxMjUgQEAKIAkJc3BlZWQgPSBGQ19QT1JUU1BFRURfMUdCSVQ7CiAJZmNfaG9zdF9zdXBwb3J0ZWRfc3BlZWRzKHZoYS0+aG9zdCkgPSBzcGVlZDsKIH0KK3N0YXRpYyBpbnQKK3FsYTg0eHhfcmVzZXQoc2NzaV9xbGFfaG9zdF90ICpoYSwgc3RydWN0IG1zZ19lY2hvX2xiICptcmVxLCBzdHJ1Y3QgZmNfYnNnX2pvYiAqYnNnX2pvYikKK3sKKwlpbnQgICAgICAgICAgICAgcmV0ID0gMDsKKwlpbnQgICAgICAgICAgICAgY21kOworCXVpbnQxNl90ICAgICAgICBjbWRfc3RhdHVzOworCisJREVCVUcxNihwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKKworCWNtZCA9ICgqKChic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZCkgKyAyKSkKKwkJCT09IEE4NF9SRVNFVF9GTEFHX0VOQUJMRV9ESUFHX0ZXID8KKwkJCQlBODRfSVNTVUVfUkVTRVRfRElBR19GVyA6IEE4NF9JU1NVRV9SRVNFVF9PUF9GVzsKKwlyZXQgPSBxbGE4NHh4X3Jlc2V0X2NoaXAoaGEsIGNtZCA9PSBBODRfSVNTVUVfUkVTRVRfRElBR19GVywKKwkmY21kX3N0YXR1cyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorcWxhODR4eF9tZ210X2NtZChzY3NpX3FsYV9ob3N0X3QgKmhhLCBzdHJ1Y3QgbXNnX2VjaG9fbGIgKm1yZXEsIHN0cnVjdCBmY19ic2dfam9iICpic2dfam9iKQoreworCXN0cnVjdCBhY2Nlc3NfY2hpcF84NHh4ICptbjsKKwlkbWFfYWRkcl90IG1uX2RtYSwgbWdtdF9kbWE7CisJdm9pZCAqbWdtdF9iID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgcnNwX2hkcl9sZW4sIGxlbiA9IDA7CisJc3RydWN0IHFsYTg0X21zZ19tZ210ICpxbDg0X21nbXQ7CisKKwlxbDg0X21nbXQgPSAoc3RydWN0IHFsYTg0X21zZ19tZ210ICopIHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBxbGE4NF9tc2dfbWdtdCkpOworCXFsODRfbWdtdC0+Y21kID0KKwkJKigodWludDE2X3QgKikoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQgKyAyKSk7CisJcWw4NF9tZ210LT5tZ210cC51Lm1lbS5zdGFydF9hZGRyID0KKwkJKigodWludDMyX3QgKikoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQgKyAzKSk7CisJcWw4NF9tZ210LT5sZW4gPQorCQkqKCh1aW50MzJfdCAqKShic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZCArIDQpKTsKKwlxbDg0X21nbXQtPm1nbXRwLnUuY29uZmlnLmlkID0KKwkJKigodWludDMyX3QgKikoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQgKyA1KSk7CisJcWw4NF9tZ210LT5tZ210cC51LmNvbmZpZy5wYXJhbTAgPQorCQkqKCh1aW50MzJfdCAqKShic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZCArIDYpKTsKKwlxbDg0X21nbXQtPm1nbXRwLnUuY29uZmlnLnBhcmFtMSA9CisJCSooKHVpbnQzMl90ICopKGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kICsgNykpOworCXFsODRfbWdtdC0+bWdtdHAudS5pbmZvLnR5cGUgPQorCQkqKCh1aW50MzJfdCAqKShic2dfam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZCArIDgpKTsKKwlxbDg0X21nbXQtPm1nbXRwLnUuaW5mby5jb250ZXh0ID0KKwkJKigodWludDMyX3QgKikoYnNnX2pvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQgKyA5KSk7CisKKwlyc3BfaGRyX2xlbiA9IGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbjsKKworCW1uID0gZG1hX3Bvb2xfYWxsb2MoaGEtPmh3LT5zX2RtYV9wb29sLCBHRlBfS0VSTkVMLCAmbW5fZG1hKTsKKwlpZiAobW4gPT0gTlVMTCkgeworCQlERUJVRzIocHJpbnRrKEtFUk5fRVJSICIlczogZG1hIGFsbG9jIGZvciBmdyBidWZmZXIgIgorCQkiZmFpbGVkJWx1XG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KG1uLCAwLCBzaXplb2YgKHN0cnVjdCBhY2Nlc3NfY2hpcF84NHh4KSk7CisKKwltbi0+ZW50cnlfdHlwZSA9IEFDQ0VTU19DSElQX0lPQ0JfVFlQRTsKKwltbi0+ZW50cnlfY291bnQgPSAxOworCisJc3dpdGNoIChxbDg0X21nbXQtPmNtZCkgeworCWNhc2UgUUxBODRfTUdNVF9SRUFEX01FTToKKwkJbW4tPm9wdGlvbnMgPSBjcHVfdG9fbGUxNihBQ09fRFVNUF9NRU1PUlkpOworCQltbi0+cGFyYW1ldGVyMSA9IGNwdV90b19sZTMyKHFsODRfbWdtdC0+bWdtdHAudS5tZW0uc3RhcnRfYWRkcik7CisJCWJyZWFrOworCWNhc2UgUUxBODRfTUdNVF9XUklURV9NRU06CisJCW1uLT5vcHRpb25zID0gY3B1X3RvX2xlMTYoQUNPX0xPQURfTUVNT1JZKTsKKwkJbW4tPnBhcmFtZXRlcjEgPSBjcHVfdG9fbGUzMihxbDg0X21nbXQtPm1nbXRwLnUubWVtLnN0YXJ0X2FkZHIpOworCQlicmVhazsKKwljYXNlIFFMQTg0X01HTVRfQ0hOR19DT05GSUc6CisJCW1uLT5vcHRpb25zID0gY3B1X3RvX2xlMTYoQUNPX0NIQU5HRV9DT05GSUdfUEFSQU0pOworCQltbi0+cGFyYW1ldGVyMSA9IGNwdV90b19sZTMyKHFsODRfbWdtdC0+bWdtdHAudS5jb25maWcuaWQpOworCQltbi0+cGFyYW1ldGVyMiA9IGNwdV90b19sZTMyKHFsODRfbWdtdC0+bWdtdHAudS5jb25maWcucGFyYW0wKTsKKwkJbW4tPnBhcmFtZXRlcjMgPSBjcHVfdG9fbGUzMihxbDg0X21nbXQtPm1nbXRwLnUuY29uZmlnLnBhcmFtMSk7CisJCWJyZWFrOworCWNhc2UgUUxBODRfTUdNVF9HRVRfSU5GTzoKKwkJbW4tPm9wdGlvbnMgPSBjcHVfdG9fbGUxNihBQ09fUkVRVUVTVF9JTkZPKTsKKwkJbW4tPnBhcmFtZXRlcjEgPSBjcHVfdG9fbGUzMihxbDg0X21nbXQtPm1nbXRwLnUuaW5mby50eXBlKTsKKwkJbW4tPnBhcmFtZXRlcjIgPSBjcHVfdG9fbGUzMihxbDg0X21nbXQtPm1nbXRwLnUuaW5mby5jb250ZXh0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBleGl0X21nbXQwOworCX0KKworCWlmICgobGVuID09IHFsODRfbWdtdC0+bGVuKSAmJgorCQlxbDg0X21nbXQtPmNtZCAhPSBRTEE4NF9NR01UX0NITkdfQ09ORklHKSB7CisJCW1nbXRfYiA9IGRtYV9hbGxvY19jb2hlcmVudCgmaGEtPmh3LT5wZGV2LT5kZXYsIGxlbiwKKwkJCQkmbWdtdF9kbWEsIEdGUF9LRVJORUwpOworCQlpZiAobWdtdF9iID09IE5VTEwpIHsKKwkJCURFQlVHMihwcmludGsoS0VSTl9FUlIgIiVzOiBkbWEgYWxsb2MgbWdtdF9iICIKKwkJCSJmYWlsZWQlbHVcbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdF9tZ210MDsKKwkJfQorCQltbi0+dG90YWxfYnl0ZV9jbnQgPSBjcHVfdG9fbGUzMihxbDg0X21nbXQtPmxlbik7CisJCW1uLT5kc2VnX2NvdW50ID0gY3B1X3RvX2xlMTYoMSk7CisJCW1uLT5kc2VnX2FkZHJlc3NbMF0gPSBjcHVfdG9fbGUzMihMU0QobWdtdF9kbWEpKTsKKwkJbW4tPmRzZWdfYWRkcmVzc1sxXSA9IGNwdV90b19sZTMyKE1TRChtZ210X2RtYSkpOworCQltbi0+ZHNlZ19sZW5ndGggPSBjcHVfdG9fbGUzMihsZW4pOworCisJCWlmIChxbDg0X21nbXQtPmNtZCA9PSBRTEE4NF9NR01UX1dSSVRFX01FTSkgeworCQkJbWVtY3B5KG1nbXRfYiwgcWw4NF9tZ210LT5wYXlsb2FkLCBsZW4pOworCQl9CisJfQorCisJcmV0ID0gcWxhMngwMF9pc3N1ZV9pb2NiKGhhLCBtbiwgbW5fZG1hLCAwKTsKKwlpZiAoKHJldCAhPSBRTEFfU1VDQ0VTUykgfHwgKHFsODRfbWdtdC0+Y21kID09IFFMQTg0X01HTVRfV1JJVEVfTUVNKQorCQl8fCAocWw4NF9tZ210LT5jbWQgPT0gUUxBODRfTUdNVF9DSE5HX0NPTkZJRykpIHsKKwkJCWlmIChyZXQgIT0gUUxBX1NVQ0NFU1MpCisJCQkJREVCVUcyKHByaW50ayhLRVJOX0VSUiAiJXMoJWx1KTogZmFpbGVkXG4iLAorCQkJCQlfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pKTsKKwl9IGVsc2UgaWYgKChxbDg0X21nbXQtPmNtZCA9PSBRTEE4NF9NR01UX1JFQURfTUVNKSB8fAorCQkJKHFsODRfbWdtdC0+Y21kID09IFFMQTg0X01HTVRfR0VUX0lORk8pKSB7CisJfQorCisJaWYgKG1nbXRfYikKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJmhhLT5ody0+cGRldi0+ZGV2LCBsZW4sIG1nbXRfYiwgbWdtdF9kbWEpOworCitleGl0X21nbXQwOgorCWRtYV9wb29sX2ZyZWUoaGEtPmh3LT5zX2RtYV9wb29sLCBtbiwgbW5fZG1hKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCmluZGV4IDEyNjNkOTcuLmFmYTk1NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2JzZ19mYy5oPgogCiAjZGVmaW5lIFFMQTJYWFhfRFJJVkVSX05BTUUgICJxbGEyeHh4IgogCkBAIC0yMjgsNiArMjI5LDI3IEBACiAJdWludDE2X3QgZmxhZ3M7CiB9OwogCitzdHJ1Y3Qgc3JiX2JzZ19jdHggeworI2RlZmluZSBTUkJfRUxTX0NNRF9SUFQgMworI2RlZmluZSBTUkJfRUxTX0NNRF9IU1QgNAorI2RlZmluZSBTUkJfQ1RfQ01EIDUKKwl1aW50MTZfdCB0eXBlOworfTsKKworc3RydWN0IHNyYl9ic2cgeworCXN0cnVjdCBzcmJfYnNnX2N0eCBjdHg7CisJc3RydWN0IGZjX2JzZ19qb2IgKmJzZ19qb2I7Cit9OworCitzdHJ1Y3QgbXNnX2VjaG9fbGIgeworCWRtYV9hZGRyX3Qgc2VuZF9kbWE7CisJZG1hX2FkZHJfdCByY3ZfZG1hOworCXVpbnQxNl90IHJlcV9zZ19jbnQ7CisJdWludDE2X3QgcnNwX3NnX2NudDsKKwl1aW50MTZfdCBvcHRpb25zOworCXVpbnQzMl90IHRyYW5zZmVyX3NpemU7Cit9OworCiAvKgogICogSVNQIEkvTyBSZWdpc3RlciBTZXQgc3RydWN0dXJlIGRlZmluaXRpb25zLgogICovCkBAIC01MjIsNiArNTQ0LDggQEAKICNkZWZpbmUgTUJBX0RJU0NBUkRfUk5EX0ZSQU1FCTB4ODA0OAkvKiBkaXNjYXJkIFJORCBmcmFtZSBkdWUgdG8gZXJyb3IuICovCiAjZGVmaW5lIE1CQV9SRUpFQ1RFRF9GQ1BfQ01ECTB4ODA0OQkvKiByZWplY3RlZCBGQ1BfQ01ELiAqLwogCisvKiBJU1AgbWFpbGJveCBsb29wYmFjayBlY2hvIGRpYWdub3N0aWMgZXJyb3IgY29kZSAqLworI2RlZmluZSBNQlNfTEJfUkVTRVQJMHgxNwogLyoKICAqIEZpcm13YXJlIG9wdGlvbnMgMSwgMiwgMy4KICAqLwpAQCAtMjIzMCw2ICsyMjU0LDEzIEBACiAJaW50IG1heF9xX2RlcHRoOwogfTsKIAorLyogUGxhY2UgaG9sZGVyIGZvciBGVyBidWZmZXIgcGFyYW1ldGVycyAqLworc3RydWN0IHFsZmNfZncgeworCXZvaWQgKmZ3X2J1ZjsKKwlkbWFfYWRkcl90IGZ3X2RtYTsKKwl1aW50MzJfdCBsZW47Cit9OworCiAvKgogICogUWxvZ2ljIGhvc3QgYWRhcHRlciBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZS4KICovCkBAIC0yNTk0LDYgKzI2MjUsNyBAQAogCXN0cnVjdCBxbGFfc3RhdGlzdGljcyBxbGFfc3RhdHM7CiAJc3RydWN0IGlzcF9vcGVyYXRpb25zICppc3Bfb3BzOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKKwlzdHJ1Y3QgcWxmY19mdyBmd19idWY7CiB9OwogCiAvKgpAQCAtMjc2Niw0ICsyNzk4LDEyNyBAQAogCiAjZGVmaW5lIENNRF9TUChDbW5kKQkJKChDbW5kKS0+U0NwLnB0cikKIAorLyoKKyAqIEJTRyBWZW5kb3Igc3BlY2lmaWMgY29tbWFuZHMKKyAqLworCisjZGVmaW5lIFFMX1ZORF9MT09QQkFDSwkJMHgwMQorI2RlZmluZSBRTEE4NF9SRVNFVAkJMHgwMgorI2RlZmluZSBRTEE4NF9VUERBVEVfRlcJCTB4MDMKKyNkZWZpbmUgUUxBODRfTUdNVF9DTUQJCTB4MDQKKworLyogQlNHIGRlZmluYXRpb25zIGZvciBpbnRlcnByZXRpbmcgQ29tbWFuZFNlbnQgZmllbGQgKi8KKyNkZWZpbmUgSU5UX0RFRl9MQl9MT09QQkFDS19DTUQgICAgICAgICAwCisjZGVmaW5lIElOVF9ERUZfTEJfRUNIT19DTUQgICAgICAgICAgICAgMQorCisvKiBCU0cgVmVuZG9yIHNwZWNpZmljIGRlZmluYXRpb25zICovCit0eXBlZGVmIHN0cnVjdCBfQTg0X1JFU0VUIHsKKwl1aW50MTZfdCBGbGFnczsKKwl1aW50MTZfdCBSZXNlcnZlZDsKKyNkZWZpbmUgQTg0X1JFU0VUX0ZMQUdfRU5BQkxFX0RJQUdfRlcgICAxCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIEE4NF9SRVNFVCwgKlBBODRfUkVTRVQ7CisKKyNkZWZpbmUgQTg0X0lTU1VFX1dSSVRFX1RZUEVfQ01EICAgICAgICAwCisjZGVmaW5lIEE4NF9JU1NVRV9SRUFEX1RZUEVfQ01EICAgICAgICAgMQorI2RlZmluZSBBODRfQ0xFQU5VUF9DTUQgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQTg0X0lTU1VFX1JFU0VUX09QX0ZXICAgICAgICAgICAzCisjZGVmaW5lIEE4NF9JU1NVRV9SRVNFVF9ESUFHX0ZXICAgICAgICAgNAorI2RlZmluZSBBODRfSVNTVUVfVVBEQVRFX09QRldfQ01EICAgICAgIDUKKyNkZWZpbmUgQTg0X0lTU1VFX1VQREFURV9ESUFHRldfQ01EICAgICA2CisKK3N0cnVjdCBxbGE4NF9tZ210X3BhcmFtIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBzdGFydF9hZGRyOworCQl9IG1lbTsgLyogZm9yIFFMQTg0X01HTVRfUkVBRC9XUklURV9NRU0gKi8KKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IGlkOworI2RlZmluZSBRTEE4NF9NR01UX0NPTkZJR19JRF9VSUYgICAgICAgIDEKKyNkZWZpbmUgUUxBODRfTUdNVF9DT05GSUdfSURfRkNPRV9DT1MgICAyCisjZGVmaW5lIFFMQTg0X01HTVRfQ09ORklHX0lEX1BBVVNFICAgICAgMworI2RlZmluZSBRTEE4NF9NR01UX0NPTkZJR19JRF9USU1FT1VUUyAgIDQKKworCQl1aW50MzJfdCBwYXJhbTA7CisJCXVpbnQzMl90IHBhcmFtMTsKKwl9IGNvbmZpZzsgLyogZm9yIFFMQTg0X01HTVRfQ0hOR19DT05GSUcgKi8KKworCXN0cnVjdCB7CisJCXVpbnQzMl90IHR5cGU7CisjZGVmaW5lIFFMQTg0X01HTVRfSU5GT19DT05GSUdfTE9HX0RBVEEgICAgICAgICAxIC8qIEdldCBDb25maWcgTG9nIERhdGEgKi8KKyNkZWZpbmUgUUxBODRfTUdNVF9JTkZPX0xPR19EQVRBICAgICAgICAgICAgICAgIDIgLyogR2V0IExvZyBEYXRhICovCisjZGVmaW5lIFFMQTg0X01HTVRfSU5GT19QT1JUX1NUQVQgICAgICAgICAgICAgICAzIC8qIEdldCBQb3J0IFN0YXRpc3RpY3MgKi8KKyNkZWZpbmUgUUxBODRfTUdNVF9JTkZPX0xJRl9TVEFUICAgICAgICAgICAgICAgIDQgLyogR2V0IExJRiBTdGF0aXN0aWNzICAqLworI2RlZmluZSBRTEE4NF9NR01UX0lORk9fQVNJQ19TVEFUICAgICAgICAgICAgICAgNSAvKiBHZXQgQVNJQyBTdGF0aXN0aWNzICovCisjZGVmaW5lIFFMQTg0X01HTVRfSU5GT19DT05GSUdfUEFSQU1TICAgICAgICAgICA2IC8qIEdldCBDb25maWcgUGFyYW1ldGVycyAqLworI2RlZmluZSBRTEE4NF9NR01UX0lORk9fUEFOSUNfTE9HICAgICAgICAgICAgICAgNyAvKiBHZXQgUGFuaWMgTG9nICovCisKKwkJdWludDMyX3QgY29udGV4dDsKKy8qCisqIGNvbnRleHQgZGVmaW5pdGlvbnMgZm9yIFFMQTg0X01HTVRfSU5GT19DT05GSUdfTE9HX0RBVEEKKyovCisjZGVmaW5lIElDX0xPR19EQVRBX0xPR19JRF9ERUJVR19MT0cgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSUNfTE9HX0RBVEFfTE9HX0lEX0xFQVJOX0xPRyAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJQ19MT0dfREFUQV9MT0dfSURfRkNfQUNMX0lOR1JFU1NfTE9HICAgICAgICAgICAyCisjZGVmaW5lIElDX0xPR19EQVRBX0xPR19JRF9GQ19BQ0xfRUdSRVNTX0xPRyAgICAgICAgICAgIDMKKyNkZWZpbmUgSUNfTE9HX0RBVEFfTE9HX0lEX0VUSEVSTkVUX0FDTF9JTkdSRVNTX0xPRyAgICAgNAorI2RlZmluZSBJQ19MT0dfREFUQV9MT0dfSURfRVRIRVJORVRfQUNMX0VHUkVTU19MT0cgICAgICA1CisjZGVmaW5lIElDX0xPR19EQVRBX0xPR19JRF9NRVNTQUdFX1RSQU5TTUlUX0xPRyAgICAgICAgIDYKKyNkZWZpbmUgSUNfTE9HX0RBVEFfTE9HX0lEX01FU1NBR0VfUkVDRUlWRV9MT0cgICAgICAgICAgNworI2RlZmluZSBJQ19MT0dfREFUQV9MT0dfSURfTElOS19FVkVOVF9MT0cgICAgICAgICAgICAgICA4CisjZGVmaW5lIElDX0xPR19EQVRBX0xPR19JRF9EQ1hfTE9HICAgICAgICAgICAgICAgICAgICAgIDkKKworLyoKKyogY29udGV4dCBkZWZpbml0aW9ucyBmb3IgUUxBODRfTUdNVF9JTkZPX1BPUlRfU1RBVAorKi8KKyNkZWZpbmUgSUNfUE9SVF9TVEFUSVNUSUNTX1BPUlRfTlVNQkVSX0VUSEVSTkVUX1BPUlQwICAgMAorI2RlZmluZSBJQ19QT1JUX1NUQVRJU1RJQ1NfUE9SVF9OVU1CRVJfRVRIRVJORVRfUE9SVDEgICAxCisjZGVmaW5lIElDX1BPUlRfU1RBVElTVElDU19QT1JUX05VTUJFUl9OU0xfUE9SVDAgICAgICAgIDIKKyNkZWZpbmUgSUNfUE9SVF9TVEFUSVNUSUNTX1BPUlRfTlVNQkVSX05TTF9QT1JUMSAgICAgICAgMworI2RlZmluZSBJQ19QT1JUX1NUQVRJU1RJQ1NfUE9SVF9OVU1CRVJfRkNfUE9SVDAgICAgICAgICA0CisjZGVmaW5lIElDX1BPUlRfU1RBVElTVElDU19QT1JUX05VTUJFUl9GQ19QT1JUMSAgICAgICAgIDUKKworCisvKgorKiBjb250ZXh0IGRlZmluaXRpb25zIGZvciBRTEE4NF9NR01UX0lORk9fTElGX1NUQVQKKyovCisjZGVmaW5lIElDX0xJRl9TVEFUSVNUSUNTX0xJRl9OVU1CRVJfRVRIRVJORVRfUE9SVDAgICAgIDAKKyNkZWZpbmUgSUNfTElGX1NUQVRJU1RJQ1NfTElGX05VTUJFUl9FVEhFUk5FVF9QT1JUMSAgICAgMQorI2RlZmluZSBJQ19MSUZfU1RBVElTVElDU19MSUZfTlVNQkVSX0ZDX1BPUlQwICAgICAgICAgICAyCisjZGVmaW5lIElDX0xJRl9TVEFUSVNUSUNTX0xJRl9OVU1CRVJfRkNfUE9SVDEgICAgICAgICAgIDMKKyNkZWZpbmUgSUNfTElGX1NUQVRJU1RJQ1NfTElGX05VTUJFUl9DUFUgICAgICAgICAgICAgICAgNgorCisJCX0gaW5mbzsgLyogZm9yIFFMQTg0X01HTVRfR0VUX0lORk8gKi8KKwl9IHU7Cit9OworCitzdHJ1Y3QgcWxhODRfbXNnX21nbXQgeworCXVpbnQxNl90IGNtZDsKKyNkZWZpbmUgUUxBODRfTUdNVF9SRUFEX01FTSAgICAgMHgwMAorI2RlZmluZSBRTEE4NF9NR01UX1dSSVRFX01FTSAgICAweDAxCisjZGVmaW5lIFFMQTg0X01HTVRfQ0hOR19DT05GSUcgIDB4MDIKKyNkZWZpbmUgUUxBODRfTUdNVF9HRVRfSU5GTyAgICAgMHgwMworCXVpbnQxNl90IHJzcnZkOworCXN0cnVjdCBxbGE4NF9tZ210X3BhcmFtIG1nbXRwOy8qIHBhcmFtZXRlcnMgZm9yIGNtZCAqLworCXVpbnQzMl90IGxlbjsgLyogYnl0ZXMgaW4gcGF5bG9hZCBmb2xsb3dpbmcgdGhpcyBzdHJ1Y3QgKi8KKwl1aW50OF90IHBheWxvYWRbMF07IC8qIHBheWxvYWQgZm9yIGNtZCAqLworfTsKKworc3RydWN0IG1zZ191cGRhdGVfZncgeworCS8qCisJKiBkaWFnX2Z3ID0gMCAgb3BlcmF0aW9uYWwgZncKKwkqICAgICAgb3RoZXJ3aXNlIGRpYWdub3N0aWMgZncKKwkqIG9mZnNldCwgbGVuLCBmd19sZW4gYXJlIHByZXNlbnQgdG8gb3ZlcmNvbWUgdGhlIGN1cnJlbnQgbGltaXRhdGlvbgorCSogb2YgMTI4S2IgeGZlciBzaXplLiBUaGUgZncgaXMgc2VudCBpbiBzbWFsbGVyIGNodW5rcy4gRWFjaCBjaHVuaworCSogc3BlY2lmaWVzIHRoZSBieXRlICJvZmZzZXQiIHdoZXJlIGl0IGZpdHMgaW4gdGhlIGZ3IGJ1ZmZlci4gVGhlCisJKiBudW1iZXIgb2YgYnl0ZXMgaW4gZWFjaCBjaHVuayBpcyBzcGVjaWZpZWQgaW4gImxlbiIuICJmd19sZW4iCisJKiBpcyB0aGUgdG90YWwgc2l6ZSBvZiBmdy4gVGhlIGZpcnN0IGNodW5rIHNob3VsZCBzdGFydCBhdCBvZmZzZXQgPSAwLgorCSogV2hlbiBvZmZzZXQrbGVuID09IGZ3X2xlbiwgdGhlIGZ3IGlzIHdyaXR0ZW4gdG8gdGhlIEhCQS4KKwkqLworCXVpbnQzMl90IGRpYWdfZnc7CisJdWludDMyX3Qgb2Zmc2V0Oy8qIHN0YXJ0IG9mZnNldCAqLworCXVpbnQzMl90IGxlbjsgICAvKiBudW0gYnl0ZXMgaW4gY3VyIHhmZXIgKi8KKwl1aW50MzJfdCBmd19sZW47IC8qIHNpemUgb2YgZncgaW4gYnl0ZXMgKi8KKwl1aW50OF90IGZ3X2J5dGVzWzBdOworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oCmluZGV4IDY2YThkYTUuLmNlYmY0ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oCkBAIC02MjcsNiArNjI3LDM5IEBACiAJdWludDMyX3QgcnhfbGVuOwkJLyogRGF0YSBzZWdtZW50IDEgbGVuZ3RoLiAqLwogfTsKIAorc3RydWN0IGVsc19zdHNfZW50cnlfMjR4eCB7CisJdWludDhfdCBlbnRyeV90eXBlOwkJLyogRW50cnkgdHlwZS4gKi8KKwl1aW50OF90IGVudHJ5X2NvdW50OwkJLyogRW50cnkgY291bnQuICovCisJdWludDhfdCBzeXNfZGVmaW5lOwkJLyogU3lzdGVtIERlZmluZWQuICovCisJdWludDhfdCBlbnRyeV9zdGF0dXM7CQkvKiBFbnRyeSBTdGF0dXMuICovCisKKwl1aW50MzJfdCBoYW5kbGU7CQkvKiBTeXN0ZW0gaGFuZGxlLiAqLworCisJdWludDE2X3QgY29tcF9zdGF0dXM7CisKKwl1aW50MTZfdCBucG9ydF9oYW5kbGU7CQkvKiBOX1BPUlQgaGFuZGxlLiAqLworCisJdWludDE2X3QgcmVzZXJ2ZWRfMTsKKworCXVpbnQ4X3QgdnBfaW5kZXg7CisJdWludDhfdCBzb2ZfdHlwZTsKKworCXVpbnQzMl90IHJ4X3hjaGdfYWRkcmVzczsJLyogUmVjZWl2ZSBleGNoYW5nZSBhZGRyZXNzLiAqLworCXVpbnQxNl90IHJlc2VydmVkXzI7CisKKwl1aW50OF90IG9wY29kZTsKKwl1aW50OF90IHJlc2VydmVkXzM7CisKKwl1aW50OF90IHBvcnRfaWRbM107CisJdWludDhfdCByZXNlcnZlZF80OworCisJdWludDE2X3QgcmVzZXJ2ZWRfNTsKKworCXVpbnQxNl90IGNvbnRyb2xfZmxhZ3M7CQkvKiBDb250cm9sIGZsYWdzLiAqLworCXVpbnQzMl90IHRvdGFsX2J5dGVfY291bnQ7CisJdWludDMyX3QgZXJyb3Jfc3ViY29kZV8xOworCXVpbnQzMl90IGVycm9yX3N1YmNvZGVfMjsKK307CiAvKgogICogSVNQIHF1ZXVlIC0gTWFpbGJveCBDb21tYW5kIGVudHJ5IHN0cnVjdHVyZSBkZWZpbml0aW9uLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKaW5kZXggOGJjNmY1My4uM2E4OWJjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaApAQCAtNjAsNiArNjAsOCBAQAogZXh0ZXJuIGludCBxbGEyeDAwX2FzeW5jX2xvZ291dF9kb25lKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIGZjX3BvcnRfdCAqLAogICAgIHVpbnQxNl90ICopOwogCitleHRlcm4gZmNfcG9ydF90ICoKK3FsYTJ4MDBfYWxsb2NfZmNwb3J0KHNjc2lfcWxhX2hvc3RfdCAqLCBnZnBfdCApOwogLyoKICAqIEdsb2JhbCBEYXRhIGluIHFsYV9vcy5jIHNvdXJjZSBmaWxlLgogICovCkBAIC03Niw2ICs3OCw3IEBACiBleHRlcm4gaW50IHFsMnhtYXhxdWV1ZXM7CiBleHRlcm4gaW50IHFsMnhtdWx0aXF1ZV90YWc7CiBleHRlcm4gaW50IHFsMnhmd2xvYWRiaW47CitleHRlcm4gaW50IHFsMnhldHNlbmFibGU7CiAKIGV4dGVybiBpbnQgcWxhMngwMF9sb29wX3Jlc2V0KHNjc2lfcWxhX2hvc3RfdCAqKTsKIGV4dGVybiB2b2lkIHFsYTJ4MDBfYWJvcnRfYWxsX2NtZHMoc2NzaV9xbGFfaG9zdF90ICosIGludCk7CkBAIC05NCw3ICs5Nyw2IEBACiAKIGV4dGVybiBpbnQgcWxhODF4eF9yZXN0YXJ0X21waV9maXJtd2FyZShzY3NpX3FsYV9ob3N0X3QgKik7CiAKLWV4dGVybiB2b2lkIHFsYTJ4MDBfYWJvcnRfZmNwb3J0X2NtZHMoZmNfcG9ydF90ICopOwogZXh0ZXJuIHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpxbGEyeDAwX2NyZWF0ZV9ob3N0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiwKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKik7CiBleHRlcm4gdm9pZCBxbGEyeDAwX2ZyZWVfaG9zdChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqKTsKQEAgLTE1NCw2ICsxNTYsNyBAQAogaW50IF9fcWxhMngwMF9tYXJrZXIoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgc3RydWN0IHJlcV9xdWUgKiwgc3RydWN0IHJzcF9xdWUgKiwKIAkJCQkJCXVpbnQxNl90LCB1aW50MTZfdCwgdWludDhfdCk7CiBleHRlcm4gaW50IHFsYTJ4MDBfc3RhcnRfc3Aoc3JiX3QgKik7CitleHRlcm4gdm9pZCBxbGEyeDAwX2N0eF9zcF9mcmVlKHNyYl90ICopOwogCiAvKgogICogR2xvYmFsIEZ1bmN0aW9uIFByb3RvdHlwZXMgaW4gcWxhX21ieC5jIHNvdXJjZSBmaWxlLgpAQCAtNDI2LDYgKzQyOSw4IEBACiBleHRlcm4gdm9pZCBxbGEyeDAwX2luaXRfaG9zdF9hdHRyKHNjc2lfcWxhX2hvc3RfdCAqKTsKIGV4dGVybiB2b2lkIHFsYTJ4MDBfYWxsb2Nfc3lzZnNfYXR0cihzY3NpX3FsYV9ob3N0X3QgKik7CiBleHRlcm4gdm9pZCBxbGEyeDAwX2ZyZWVfc3lzZnNfYXR0cihzY3NpX3FsYV9ob3N0X3QgKik7CitleHRlcm4gaW50IHFsYTJ4MDBfbG9vcGJhY2tfdGVzdChzY3NpX3FsYV9ob3N0X3QgKiwgc3RydWN0IG1zZ19lY2hvX2xiICosIHVpbnQxNl90ICopOworZXh0ZXJuIGludCBxbGEyeDAwX2VjaG9fdGVzdChzY3NpX3FsYV9ob3N0X3QgKiwgc3RydWN0IG1zZ19lY2hvX2xiICosIHVpbnQxNl90ICopOwogCiAvKgogICogR2xvYmFsIEZ1bmN0aW9uIFByb3RvdHlwZXMgaW4gcWxhX2Rmcy5jIHNvdXJjZSBmaWxlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKaW5kZXggM2Y4ZTg0OS4uYTY3YjJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCkBAIC02Miw3ICs2Miw3IEBACiAJY3R4LT5mcmVlKHNwKTsKIH0KIAotc3RhdGljIHZvaWQKK3ZvaWQKIHFsYTJ4MDBfY3R4X3NwX2ZyZWUoc3JiX3QgKnNwKQogewogCXN0cnVjdCBzcmJfY3R4ICpjdHggPSBzcC0+Y3R4OwpAQCAtMzM4LDYgKzMzOCwxNiBAQAogCXJ2YWwgPSBxbGEyeDAwX2luaXRfcmluZ3ModmhhKTsKIAloYS0+ZmxhZ3MuY2hpcF9yZXNldF9kb25lID0gMTsKIAorCWlmIChydmFsID09IFFMQV9TVUNDRVNTICYmIElTX1FMQTg0WFgoaGEpKSB7CisJLyogSXNzdWUgdmVyaWZ5IDg0eHggRlcgSU9DQiB0byBjb21wbGV0ZSA4NHh4IGluaXRpYWxpemF0aW9uICovCisJCXJ2YWwgPSBxbGE4NHh4X2luaXRfY2hpcCh2aGEpOworCQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQkJcWxhX3ByaW50ayhLRVJOX0VSUiwgaGEsCisJCQkJIlVuYWJsZSB0byBpbml0aWFsaXplIElTUDg0WFguXG4iKTsKKwkJcWxhODR4eF9wdXRfY2hpcCh2aGEpOworCQl9CisJfQorCiAJcmV0dXJuIChydmFsKTsKIH0KIApAQCAtMjIxNiw3ICsyMjI2LDcgQEAKICAqCiAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGZjcG9ydCwgb3IgTlVMTCwgaWYgbm9uZSBhdmFpbGFibGUuCiAgKi8KLXN0YXRpYyBmY19wb3J0X3QgKgorZmNfcG9ydF90ICoKIHFsYTJ4MDBfYWxsb2NfZmNwb3J0KHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBnZnBfdCBmbGFncykKIHsKIAlmY19wb3J0X3QgKmZjcG9ydDsKQEAgLTI5MDAsOCArMjkxMCwxMyBAQAogCQlpZiAocWxhMngwMF9pc19yZXNlcnZlZF9pZCh2aGEsIGxvb3BfaWQpKQogCQkJY29udGludWU7CiAKLQkJaWYgKGF0b21pY19yZWFkKCZ2aGEtPmxvb3BfZG93bl90aW1lcikgfHwgTE9PUF9UUkFOU0lUSU9OKHZoYSkpCisJCWlmIChhdG9taWNfcmVhZCgmdmhhLT5sb29wX2Rvd25fdGltZXIpIHx8CisJCSAgICBMT09QX1RSQU5TSVRJT04odmhhKSkgeworCQkJYXRvbWljX3NldCgmdmhhLT5sb29wX2Rvd25fdGltZXIsIDApOworCQkJc2V0X2JpdChMT09QX1JFU1lOQ19ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CisJCQlzZXRfYml0KExPQ0FMX0xPT1BfVVBEQVRFLCAmdmhhLT5kcGNfZmxhZ3MpOwogCQkJYnJlYWs7CisJCX0KIAogCQlpZiAoc3dsICE9IE5VTEwpIHsKIAkJCWlmIChsYXN0X2RldikgewpAQCAtNDg3Nyw2ICs0ODkyLDE1IEBACiB9CiAKIHZvaWQKLXFsYTgxeHhfdXBkYXRlX2Z3X29wdGlvbnMoc2NzaV9xbGFfaG9zdF90ICpoYSkKK3FsYTgxeHhfdXBkYXRlX2Z3X29wdGlvbnMoc2NzaV9xbGFfaG9zdF90ICp2aGEpCiB7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisKKwlpZiAoIXFsMnhldHNlbmFibGUpCisJCXJldHVybjsKKworCS8qIEVuYWJsZSBFVFMgQnVyc3QuICovCisJbWVtc2V0KGhhLT5md19vcHRpb25zLCAwLCBzaXplb2YoaGEtPmZ3X29wdGlvbnMpKTsKKwloYS0+Zndfb3B0aW9uc1syXSB8PSBCSVRfOTsKKwlxbGEyeDAwX3NldF9md19vcHRpb25zKHZoYSwgaGEtPmZ3X29wdGlvbnMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMKaW5kZXggYzVjY2FjMC4uODI5OWE5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jCkBAIC0xMDI1LDYgKzEwMjUsMTE5IEBACiAJLyogSW1wbGljaXQ6IG1ieC0+bWJ4MTAgPSAwLiAqLwogfQogCitzdGF0aWMgdm9pZAorcWxhMjR4eF9lbHNfaW9jYihzcmJfdCAqc3AsIHN0cnVjdCBlbHNfZW50cnlfMjR4eCAqZWxzX2lvY2IpCit7CisJc3RydWN0IGZjX2JzZ19qb2IgKmJzZ19qb2IgPSAoKHN0cnVjdCBzcmJfYnNnKilzcC0+Y3R4KS0+YnNnX2pvYjsKKworICAgICAgICBlbHNfaW9jYi0+ZW50cnlfdHlwZSA9IEVMU19JT0NCX1RZUEU7CisgICAgICAgIGVsc19pb2NiLT5lbnRyeV9jb3VudCA9IDE7CisgICAgICAgIGVsc19pb2NiLT5zeXNfZGVmaW5lID0gMDsKKyAgICAgICAgZWxzX2lvY2ItPmVudHJ5X3N0YXR1cyA9IDA7CisgICAgICAgIGVsc19pb2NiLT5oYW5kbGUgPSBzcC0+aGFuZGxlOworICAgICAgICBlbHNfaW9jYi0+bnBvcnRfaGFuZGxlID0gY3B1X3RvX2xlMTYoc3AtPmZjcG9ydC0+bG9vcF9pZCk7CisgICAgICAgIGVsc19pb2NiLT50eF9kc2RfY291bnQgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQpOworICAgICAgICBlbHNfaW9jYi0+dnBfaW5kZXggPSBzcC0+ZmNwb3J0LT52cF9pZHg7CisgICAgICAgIGVsc19pb2NiLT5zb2ZfdHlwZSA9IEVTVF9TT0ZJMzsKKyAgICAgICAgZWxzX2lvY2ItPnJ4X2RzZF9jb3VudCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQpOworCisgICAgICAgIGVsc19pb2NiLT5vcGNvZGUgPSgoKHN0cnVjdCBzcmJfYnNnKilzcC0+Y3R4KS0+Y3R4LnR5cGUgPT0gU1JCX0VMU19DTURfUlBUKSA/CisJICAgIGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5yX2Vscy5lbHNfY29kZSA6IGJzZ19qb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX2Vscy5jb21tYW5kX2NvZGU7CisgICAgICAgIGVsc19pb2NiLT5wb3J0X2lkWzBdID0gc3AtPmZjcG9ydC0+ZF9pZC5iLmFsX3BhOworICAgICAgICBlbHNfaW9jYi0+cG9ydF9pZFsxXSA9IHNwLT5mY3BvcnQtPmRfaWQuYi5hcmVhOworICAgICAgICBlbHNfaW9jYi0+cG9ydF9pZFsyXSA9IHNwLT5mY3BvcnQtPmRfaWQuYi5kb21haW47CisgICAgICAgIGVsc19pb2NiLT5jb250cm9sX2ZsYWdzID0gMDsKKyAgICAgICAgZWxzX2lvY2ItPnJ4X2J5dGVfY291bnQgPQorICAgICAgICAgICAgY3B1X3RvX2xlMzIoYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbik7CisgICAgICAgIGVsc19pb2NiLT50eF9ieXRlX2NvdW50ID0KKyAgICAgICAgICAgIGNwdV90b19sZTMyKGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbik7CisKKyAgICAgICAgZWxzX2lvY2ItPnR4X2FkZHJlc3NbMF0gPSBjcHVfdG9fbGUzMihMU0Qoc2dfZG1hX2FkZHJlc3MKKyAgICAgICAgICAgIChic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCkpKTsKKyAgICAgICAgZWxzX2lvY2ItPnR4X2FkZHJlc3NbMV0gPSBjcHVfdG9fbGUzMihNU0Qoc2dfZG1hX2FkZHJlc3MKKyAgICAgICAgICAgIChic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCkpKTsKKyAgICAgICAgZWxzX2lvY2ItPnR4X2xlbiA9IGNwdV90b19sZTMyKHNnX2RtYV9sZW4KKyAgICAgICAgICAgIChic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCkpOworCisgICAgICAgIGVsc19pb2NiLT5yeF9hZGRyZXNzWzBdID0gY3B1X3RvX2xlMzIoTFNEKHNnX2RtYV9hZGRyZXNzCisgICAgICAgICAgICAoYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0KSkpOworICAgICAgICBlbHNfaW9jYi0+cnhfYWRkcmVzc1sxXSA9IGNwdV90b19sZTMyKE1TRChzZ19kbWFfYWRkcmVzcworICAgICAgICAgICAgKGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCkpKTsKKyAgICAgICAgZWxzX2lvY2ItPnJ4X2xlbiA9IGNwdV90b19sZTMyKHNnX2RtYV9sZW4KKyAgICAgICAgICAgIChic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QpKTsKK30KKworc3RhdGljIHZvaWQKK3FsYTI0eHhfY3RfaW9jYihzcmJfdCAqc3AsIHN0cnVjdCBjdF9lbnRyeV8yNHh4ICpjdF9pb2NiKQoreworCXVpbnQxNl90ICAgICAgICBhdmFpbF9kc2RzOworCXVpbnQzMl90ICAgICAgICAqY3VyX2RzZDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCBpbmRleDsKKwl1aW50MTZfdCB0b3RfZHNkczsKKyAgICAgICAgc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBzcC0+ZmNwb3J0LT52aGE7CisJc3RydWN0IGZjX2JzZ19qb2IgKmJzZ19qb2IgPSAoKHN0cnVjdCBzcmJfYnNnKilzcC0+Y3R4KS0+YnNnX2pvYjsKKwlpbnQgbG9vcF9pdGVyYXJ0aW9uID0gMDsKKwlpbnQgY29udF9pb2NiX3Byc250ID0gMDsKKwlpbnQgZW50cnlfY291bnQgPSAxOworCisJY3RfaW9jYi0+ZW50cnlfdHlwZSA9IENUX0lPQ0JfVFlQRTsKKyAgICAgICAgY3RfaW9jYi0+ZW50cnlfc3RhdHVzID0gMDsKKyAgICAgICAgY3RfaW9jYi0+c3lzX2RlZmluZSA9IDA7CisgICAgICAgIGN0X2lvY2ItPmhhbmRsZSA9IHNwLT5oYW5kbGU7CisKKwljdF9pb2NiLT5ucG9ydF9oYW5kbGUgPSBjcHVfdG9fbGUxNihzcC0+ZmNwb3J0LT5sb29wX2lkKTsKKwljdF9pb2NiLT52cF9pbmRleCA9IHNwLT5mY3BvcnQtPnZwX2lkeDsKKyAgICAgICAgY3RfaW9jYi0+Y29tcF9zdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApOworCisJY3RfaW9jYi0+Y21kX2RzZF9jb3VudCA9CisgICAgICAgICAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQpOworICAgICAgICBjdF9pb2NiLT50aW1lb3V0ID0gMDsKKyAgICAgICAgY3RfaW9jYi0+cnNwX2RzZF9jb3VudCA9CisgICAgICAgICAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250KTsKKyAgICAgICAgY3RfaW9jYi0+cnNwX2J5dGVfY291bnQgPQorICAgICAgICAgICAgY3B1X3RvX2xlMzIoYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbik7CisgICAgICAgIGN0X2lvY2ItPmNtZF9ieXRlX2NvdW50ID0KKyAgICAgICAgICAgIGNwdV90b19sZTMyKGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbik7CisgICAgICAgIGN0X2lvY2ItPmRzZWdfMF9hZGRyZXNzWzBdID0gY3B1X3RvX2xlMzIoTFNEKHNnX2RtYV9hZGRyZXNzCisgICAgICAgICAgICAoYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QpKSk7CisgICAgICAgIGN0X2lvY2ItPmRzZWdfMF9hZGRyZXNzWzFdID0gY3B1X3RvX2xlMzIoTVNEKHNnX2RtYV9hZGRyZXNzCisgICAgICAgICAgIChic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCkpKTsKKyAgICAgICAgY3RfaW9jYi0+ZHNlZ18wX2xlbiA9IGNwdV90b19sZTMyKHNnX2RtYV9sZW4KKyAgICAgICAgICAgIChic2dfam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCkpOworCisJYXZhaWxfZHNkcyA9IDE7CisJY3VyX2RzZCA9ICh1aW50MzJfdCAqKWN0X2lvY2ItPmRzZWdfMV9hZGRyZXNzOworCWluZGV4ID0gMDsKKwl0b3RfZHNkcyA9IGJzZ19qb2ItPnJlcGx5X3BheWxvYWQuc2dfY250OworCisJZm9yX2VhY2hfc2coYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LCBzZywgdG90X2RzZHMsIGluZGV4KSB7CisJCWRtYV9hZGRyX3QgICAgICAgc2xlX2RtYTsKKwkJY29udF9hNjRfZW50cnlfdCAqY29udF9wa3Q7CisKKwkJLyogQWxsb2NhdGUgYWRkaXRpb25hbCBjb250aW51YXRpb24gcGFja2V0cz8gKi8KKwkJaWYgKGF2YWlsX2RzZHMgPT0gMCkgeworCQkJLyoKKwkJCSogRml2ZSBEU0RzIGFyZSBhdmFpbGFibGUgaW4gdGhlIENvbnQuCisJCQkqIFR5cGUgMSBJT0NCLgorCQkJICAgICAgICovCisJCQljb250X3BrdCA9IHFsYTJ4MDBfcHJlcF9jb250X3R5cGUxX2lvY2IodmhhKTsKKwkJCWN1cl9kc2QgPSAodWludDMyX3QgKikgY29udF9wa3QtPmRzZWdfMF9hZGRyZXNzOworCQkJYXZhaWxfZHNkcyA9IDU7CisJCQljb250X2lvY2JfcHJzbnQgPSAxOworCQkJZW50cnlfY291bnQrKzsKKwkJfQorCisJCXNsZV9kbWEgPSBzZ19kbWFfYWRkcmVzcyhzZyk7CisJCSpjdXJfZHNkKysgICA9IGNwdV90b19sZTMyKExTRChzbGVfZG1hKSk7CisJCSpjdXJfZHNkKysgICA9IGNwdV90b19sZTMyKE1TRChzbGVfZG1hKSk7CisJCSpjdXJfZHNkKysgICA9IGNwdV90b19sZTMyKHNnX2RtYV9sZW4oc2cpKTsKKwkJbG9vcF9pdGVyYXJ0aW9uKys7CisJCWF2YWlsX2RzZHMtLTsKKwl9CisgICAgICAgIGN0X2lvY2ItPmVudHJ5X2NvdW50ID0gZW50cnlfY291bnQ7Cit9CisKIGludAogcWxhMngwMF9zdGFydF9zcChzcmJfdCAqc3ApCiB7CkBAIC0xMDUyLDYgKzExNjUsMTMgQEAKIAkJICAgIHFsYTI0eHhfbG9nb3V0X2lvY2Ioc3AsIHBrdCk6CiAJCSAgICBxbGEyeDAwX2xvZ291dF9pb2NiKHNwLCBwa3QpOwogCQlicmVhazsKKwljYXNlIFNSQl9FTFNfQ01EX1JQVDoKKwljYXNlIFNSQl9FTFNfQ01EX0hTVDoKKwkJcWxhMjR4eF9lbHNfaW9jYihzcCwgcGt0KTsKKwkJYnJlYWs7CisJY2FzZSBTUkJfQ1RfQ01EOgorCQlxbGEyNHh4X2N0X2lvY2Ioc3AsIHBrdCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwppbmRleCA2ZmM2M2I5Li5hYjkwMzI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCkBAIC04LDYgKzgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdGNxLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2JzZ19mYy5oPgogCiBzdGF0aWMgdm9pZCBxbGEyeDAwX21ieF9jb21wbGV0aW9uKHNjc2lfcWxhX2hvc3RfdCAqLCB1aW50MTZfdCk7CiBzdGF0aWMgdm9pZCBxbGEyeDAwX3Byb2Nlc3NfY29tcGxldGVkX3JlcXVlc3Qoc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwKQEAgLTg4MSw3ICs4ODIsOSBAQAogCQkgICAgaW5kZXgpOwogCQlyZXR1cm4gTlVMTDsKIAl9CisKIAlyZXEtPm91dHN0YW5kaW5nX2NtZHNbaW5kZXhdID0gTlVMTDsKKwogZG9uZToKIAlyZXR1cm4gc3A7CiB9CkBAIC05ODIsNiArOTg1LDEwMCBAQAogfQogCiBzdGF0aWMgdm9pZAorcWxhMjR4eF9lbHNfY3RfZW50cnkoc2NzaV9xbGFfaG9zdF90ICp2aGEsIHN0cnVjdCByZXFfcXVlICpyZXEsCisgICAgc3RydWN0IHN0c19lbnRyeV8yNHh4ICpwa3QsIGludCBpb2NiX3R5cGUpCit7CisJY29uc3QgY2hhciBmdW5jW10gPSAiRUxTX0NUX0lPQ0IiOworCWNvbnN0IGNoYXIgKnR5cGU7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisJc3JiX3QgKnNwOworCXN0cnVjdCBzcmJfYnNnICpzcF9ic2c7CisJc3RydWN0IGZjX2JzZ19qb2IgKmJzZ19qb2I7CisJdWludDE2X3QgY29tcF9zdGF0dXM7CisJdWludDMyX3QgZndfc3RhdHVzWzNdOworCXVpbnQ4X3QqIGZ3X3N0c19wdHI7CisKKwlzcCA9IHFsYTJ4MDBfZ2V0X3NwX2Zyb21faGFuZGxlKHZoYSwgZnVuYywgcmVxLCBwa3QpOworCWlmICghc3ApCisJCXJldHVybjsKKwlzcF9ic2cgPSAoc3RydWN0IHNyYl9ic2cqKXNwLT5jdHg7CisJYnNnX2pvYiA9IHNwX2JzZy0+YnNnX2pvYjsKKworCXR5cGUgPSBOVUxMOworCXN3aXRjaCAoc3BfYnNnLT5jdHgudHlwZSkgeworCWNhc2UgU1JCX0VMU19DTURfUlBUOgorCWNhc2UgU1JCX0VMU19DTURfSFNUOgorCQl0eXBlID0gImVscyI7CisJCWJyZWFrOworCWNhc2UgU1JCX0NUX0NNRDoKKwkJdHlwZSA9ICJjdCBwYXNzLXRocm91Z2giOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAiJXM6IFVucmVjb2duaXplZCBTUkI6ICglcCkgdHlwZT0lZC5cbiIsIGZ1bmMsIHNwLAorCQkgICAgc3BfYnNnLT5jdHgudHlwZSk7CisJCXJldHVybjsKKwl9CisKKwljb21wX3N0YXR1cyA9IGZ3X3N0YXR1c1swXSA9IGxlMTZfdG9fY3B1KHBrdC0+Y29tcF9zdGF0dXMpOworCWZ3X3N0YXR1c1sxXSA9IGxlMTZfdG9fY3B1KCgoc3RydWN0IGVsc19zdHNfZW50cnlfMjR4eCopcGt0KS0+ZXJyb3Jfc3ViY29kZV8xKTsKKwlmd19zdGF0dXNbMl0gPSBsZTE2X3RvX2NwdSgoKHN0cnVjdCBlbHNfc3RzX2VudHJ5XzI0eHgqKXBrdCktPmVycm9yX3N1YmNvZGVfMik7CisKKwkvKiByZXR1cm4gRkNfQ1RFTFNfU1RBVFVTX09LIGFuZCBsZWF2ZSB0aGUgZGVjb2Rpbmcgb2YgdGhlIEVMUy9DVAorCSAqIGZjIHBheWxvYWQgIHRvIHRoZSBjYWxsZXIKKwkgKi8KKwlic2dfam9iLT5yZXBseS0+cmVwbHlfZGF0YS5jdGVsc19yZXBseS5zdGF0dXMgPSBGQ19DVEVMU19TVEFUVVNfT0s7CisJYnNnX2pvYi0+cmVwbHlfbGVuID0gc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVwbHkpICsgc2l6ZW9mKGZ3X3N0YXR1cyk7CisKKwlpZiAoY29tcF9zdGF0dXMgIT0gQ1NfQ09NUExFVEUpIHsKKwkJaWYgKGNvbXBfc3RhdHVzID09IENTX0RBVEFfVU5ERVJSVU4pIHsKKwkJCWJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSBESURfT0sgPDwgMTY7CisJCQlic2dfam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KKwkJCQlsZTE2X3RvX2NwdSgoKHN0cnVjdCBlbHNfc3RzX2VudHJ5XzI0eHgqKXBrdCktPnRvdGFsX2J5dGVfY291bnQpOworCisJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJICAgICJzY3NpKCVsZDoweCV4KTogRUxTLUNUIHBhc3MtdGhyb3VnaC0lcyBlcnJvciBjb21wX3N0YXR1cy1zdGF0dXM9MHgleCAiCisJCQkgICAgImVycm9yIHN1YmNvZGUgMT0weCV4IGVycm9yIHN1YmNvZGUgMj0weCV4IHRvdGFsX2J5dGUgPSAweCV4LlxuIiwKKwkJCQl2aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIHR5cGUsIGNvbXBfc3RhdHVzLCBmd19zdGF0dXNbMV0sIGZ3X3N0YXR1c1syXSwKKwkJCQlsZTE2X3RvX2NwdSgoKHN0cnVjdCBlbHNfc3RzX2VudHJ5XzI0eHgqKXBrdCktPnRvdGFsX2J5dGVfY291bnQpKSk7CisJCQlmd19zdHNfcHRyID0gKCh1aW50OF90Kilic2dfam9iLT5yZXEtPnNlbnNlKSArIHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcGx5KTsKKwkJCW1lbWNweSggZndfc3RzX3B0ciwgZndfc3RhdHVzLCBzaXplb2YoZndfc3RhdHVzKSk7CisJCX0KKwkJZWxzZSB7CisJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJICAgICJzY3NpKCVsZDoweCV4KTogRUxTLUNUIHBhc3MtdGhyb3VnaC0lcyBlcnJvciBjb21wX3N0YXR1cy1zdGF0dXM9MHgleCAiCisJCQkgICAgImVycm9yIHN1YmNvZGUgMT0weCV4IGVycm9yIHN1YmNvZGUgMj0weCV4LlxuIiwKKwkJCQl2aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIHR5cGUsIGNvbXBfc3RhdHVzLAorCQkJCWxlMTZfdG9fY3B1KCgoc3RydWN0IGVsc19zdHNfZW50cnlfMjR4eCopcGt0KS0+ZXJyb3Jfc3ViY29kZV8xKSwKKwkJCQlsZTE2X3RvX2NwdSgoKHN0cnVjdCBlbHNfc3RzX2VudHJ5XzI0eHgqKXBrdCktPmVycm9yX3N1YmNvZGVfMikpKTsKKwkJCWJzZ19qb2ItPnJlcGx5LT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisJCQlic2dfam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKwkJCWZ3X3N0c19wdHIgPSAoKHVpbnQ4X3QqKWJzZ19qb2ItPnJlcS0+c2Vuc2UpICsgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVwbHkpOworCQkJbWVtY3B5KCBmd19zdHNfcHRyLCBmd19zdGF0dXMsIHNpemVvZihmd19zdGF0dXMpKTsKKwkJfQorCQlERUJVRzIocWxhMngwMF9kdW1wX2J1ZmZlcigodWludDhfdCAqKXBrdCwgc2l6ZW9mKCpwa3QpKSk7CisJfQorCWVsc2UgeworCQlic2dfam9iLT5yZXBseS0+cmVzdWx0ID0gIERJRF9PSyA8PCAxNjs7CisJCWJzZ19qb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSBic2dfam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuOworCQlic2dfam9iLT5yZXBseV9sZW4gPSAwOworCX0KKworCWRtYV91bm1hcF9zZygmaGEtPnBkZXYtPmRldiwKKwkgICAgYnNnX2pvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJICAgIGJzZ19qb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19jbnQsIERNQV9UT19ERVZJQ0UpOworCWRtYV91bm1hcF9zZygmaGEtPnBkZXYtPmRldiwKKwkgICAgYnNnX2pvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCSAgICBic2dfam9iLT5yZXBseV9wYXlsb2FkLnNnX2NudCwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoKHNwX2JzZy0+Y3R4LnR5cGUgPT0gU1JCX0VMU19DTURfSFNUKSB8fAorCSAgICAoc3BfYnNnLT5jdHgudHlwZSA9PSBTUkJfQ1RfQ01EKSkKKwkJa2ZyZWUoc3AtPmZjcG9ydCk7CisJa2ZyZWUoc3AtPmN0eCk7CisJbWVtcG9vbF9mcmVlKHNwLCBoYS0+c3JiX21lbXBvb2wpOworCWJzZ19qb2ItPmpvYl9kb25lKGJzZ19qb2IpOworfQorCitzdGF0aWMgdm9pZAogcWxhMjR4eF9sb2dpb19lbnRyeShzY3NpX3FsYV9ob3N0X3QgKnZoYSwgc3RydWN0IHJlcV9xdWUgKnJlcSwKICAgICBzdHJ1Y3QgbG9naW9fZW50cnlfMjR4eCAqbG9naW8pCiB7CkBAIC0xNzQ5LDYgKzE4NDYsMTMgQEAKIAkJCXFsYTI0eHhfbG9naW9fZW50cnkodmhhLCByc3AtPnJlcSwKIAkJCSAgICAoc3RydWN0IGxvZ2lvX2VudHJ5XzI0eHggKilwa3QpOwogCQkJYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDVF9JT0NCX1RZUEU6CisJCQlxbGEyNHh4X2Vsc19jdF9lbnRyeSh2aGEsIHJzcC0+cmVxLCBwa3QsIENUX0lPQ0JfVFlQRSk7CisJCQljbGVhcl9iaXQoTUJYX0lOVEVSUlVQVCwgJnZoYS0+aHctPm1ieF9jbWRfZmxhZ3MpOworCQkJYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBFTFNfSU9DQl9UWVBFOgorCQkJcWxhMjR4eF9lbHNfY3RfZW50cnkodmhhLCByc3AtPnJlcSwgcGt0LCBFTFNfSU9DQl9UWVBFKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJLyogVHlwZSBOb3QgU3VwcG9ydGVkLiAqLwogCQkJREVCVUc0KHByaW50ayhLRVJOX1dBUk5JTkcKQEAgLTIwNDksNyArMjE1Myw2IEBACiAJCXNldF9iaXQoTUJYX0lOVEVSUlVQVCwgJmhhLT5tYnhfY21kX2ZsYWdzKTsKIAkJY29tcGxldGUoJmhhLT5tYnhfaW50cl9jb21wKTsKIAl9Ci0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTIyNTUsMTAgKzIzNTgsMTEgQEAKIAogCWlmIChoYS0+ZmxhZ3MubXNpeF9lbmFibGVkKQogCQlxbGEyNHh4X2Rpc2FibGVfbXNpeChoYSk7Ci0JZWxzZSBpZiAoaGEtPmZsYWdzLmludGFfZW5hYmxlZCkgeworCWVsc2UgaWYgKGhhLT5mbGFncy5tc2lfZW5hYmxlZCkgewogCQlmcmVlX2lycShoYS0+cGRldi0+aXJxLCByc3ApOwogCQlwY2lfZGlzYWJsZV9tc2koaGEtPnBkZXYpOwotCX0KKwl9IGVsc2UKKwkJZnJlZV9pcnEoaGEtPnBkZXYtPmlycSwgcnNwKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKaW5kZXggMDU2ZTRkNC4uNmU1M2JkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYwpAQCAtMzYzNiw2ICszNjM2LDE1NyBAQAogfQogCiBpbnQKK3FsYTJ4MDBfbG9vcGJhY2tfdGVzdChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgc3RydWN0IG1zZ19lY2hvX2xiICptcmVxLCB1aW50MTZfdCAqbXJlc3ApCit7CisJaW50IHJ2YWw7CisJbWJ4X2NtZF90IG1jOworCW1ieF9jbWRfdCAqbWNwID0gJm1jOworCXVpbnQzMl90IGl0ZXJfY250ID0gMHgxOworCisJREVCVUcxMShwcmludGsoInNjc2koJWxkKTogZW50ZXJlZC5cbiIsIHZoYS0+aG9zdF9ubykpOworCisJbWVtc2V0KG1jcC0+bWIsIDAgLCBzaXplb2YobWNwLT5tYikpOworCW1jcC0+bWJbMF0gPSBNQkNfRElBR05PU1RJQ19MT09QX0JBQ0s7CisJbWNwLT5tYlsxXSA9IG1yZXEtPm9wdGlvbnMgfCBCSVRfNjsJLy8gQklUXzYgc3BlY2lmaWVzIDY0IGJpdCBhZGRyZXNzaW5nCisKKwkvKiB0cmFuc2ZlciBjb3VudCAqLworCW1jcC0+bWJbMTBdID0gTFNXKG1yZXEtPnRyYW5zZmVyX3NpemUpOworCW1jcC0+bWJbMTFdID0gTVNXKG1yZXEtPnRyYW5zZmVyX3NpemUpOworCisJLyogc2VuZCBkYXRhIGFkZHJlc3MgKi8KKwltY3AtPm1iWzE0XSA9IExTVyhtcmVxLT5zZW5kX2RtYSk7CisJbWNwLT5tYlsxNV0gPSBNU1cobXJlcS0+c2VuZF9kbWEpOworCW1jcC0+bWJbMjBdID0gTFNXKE1TRChtcmVxLT5zZW5kX2RtYSkpOworCW1jcC0+bWJbMjFdID0gTVNXKE1TRChtcmVxLT5zZW5kX2RtYSkpOworCisJLyogcmVjaWV2ZSBkYXRhIGFkZHJlc3MgKi8KKwltY3AtPm1iWzE2XSA9IExTVyhtcmVxLT5yY3ZfZG1hKTsKKwltY3AtPm1iWzE3XSA9IE1TVyhtcmVxLT5yY3ZfZG1hKTsKKwltY3AtPm1iWzZdID0gTFNXKE1TRChtcmVxLT5yY3ZfZG1hKSk7CisJbWNwLT5tYls3XSA9IE1TVyhNU0QobXJlcS0+cmN2X2RtYSkpOworCisJLyogSXRlcmF0aW9uIGNvdW50ICovCisJbWNwLT5tYlsxOF0gPSBMU1coaXRlcl9jbnQpOworCW1jcC0+bWJbMTldID0gTVNXKGl0ZXJfY250KTsKKworCW1jcC0+b3V0X21iID0gTUJYXzIxfE1CWF8yMHxNQlhfMTl8TUJYXzE4fE1CWF8xN3xNQlhfMTZ8TUJYXzE1fAorCSAgICBNQlhfMTR8TUJYXzEzfE1CWF8xMnxNQlhfMTF8TUJYXzEwfE1CWF83fE1CWF82fE1CWF8xfE1CWF8wOworCWlmIChJU19RTEE4MVhYKHZoYS0+aHcpKQorCQltY3AtPm91dF9tYiB8PSBNQlhfMjsKKwltY3AtPmluX21iID0gTUJYXzE5fE1CWF8xOHxNQlhfM3xNQlhfMnxNQlhfMXxNQlhfMDsKKworCW1jcC0+YnVmX3NpemUgPSBtcmVxLT50cmFuc2Zlcl9zaXplOworCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOworCW1jcC0+ZmxhZ3MgPSBNQlhfRE1BX09VVHxNQlhfRE1BX0lOfElPQ1RMX0NNRDsKKworCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CisKKwlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgIiglbGQpOiBmYWlsZWQ9JXggbWJbMF09MHgleCAiCisJCQkibWJbMV09MHgleCBtYlsyXT0weCV4IG1iWzNdPTB4JXggbWJbMThdPTB4JXggbWJbMTldPTB4JXguIFxuIiwgdmhhLT5ob3N0X25vLCBydmFsLAorCQkJbWNwLT5tYlswXSwgbWNwLT5tYlsxXSwgbWNwLT5tYlsyXSwgbWNwLT5tYlszXSwgbWNwLT5tYlsxOF0sIG1jcC0+bWJbMTldKSk7CisJfSBlbHNlIHsKKwkJREVCVUcyKHByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICJzY3NpKCVsZCk6IGRvbmUuXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwl9CisKKwkvKiBDb3B5IG1haWxib3ggaW5mb3JtYXRpb24gKi8KKwltZW1jcHkoIG1yZXNwLCBtY3AtPm1iLCA2NCk7CisJbXJlc3BbM10gPSBtY3AtPm1iWzE4XTsKKwltcmVzcFs0XSA9IG1jcC0+bWJbMTldOworCXJldHVybiBydmFsOworfQorCitpbnQKK3FsYTJ4MDBfZWNob190ZXN0KHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBzdHJ1Y3QgbXNnX2VjaG9fbGIgKm1yZXEsIHVpbnQxNl90ICptcmVzcCkKK3sKKwlpbnQgcnZhbDsKKwltYnhfY21kX3QgbWM7CisJbWJ4X2NtZF90ICptY3AgPSAmbWM7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisKKwlERUJVRzExKHByaW50aygic2NzaSglbGQpOiBlbnRlcmVkLlxuIiwgdmhhLT5ob3N0X25vKSk7CisKKwltZW1zZXQobWNwLT5tYiwgMCAsIHNpemVvZihtY3AtPm1iKSk7CisJbWNwLT5tYlswXSA9IE1CQ19ESUFHTk9TVElDX0VDSE87CisJbWNwLT5tYlsxXSA9IG1yZXEtPm9wdGlvbnMgfCBCSVRfNjsJLyogQklUXzYgc3BlY2lmaWVzIDY0Yml0IGFkZHJlc3MgKi8KKwlpZiAoSVNfUUxBODFYWChoYSkpCisJCW1jcC0+bWJbMV0gfD0gQklUXzE1OworCW1jcC0+bWJbMl0gPSBJU19RTEE4MVhYKGhhKSA/IHZoYS0+ZmNvZV9mY2ZfaWR4IDogMDsKKwltY3AtPm1iWzE2XSA9IExTVyhtcmVxLT5yY3ZfZG1hKTsKKwltY3AtPm1iWzE3XSA9IE1TVyhtcmVxLT5yY3ZfZG1hKTsKKwltY3AtPm1iWzZdID0gTFNXKE1TRChtcmVxLT5yY3ZfZG1hKSk7CisJbWNwLT5tYls3XSA9IE1TVyhNU0QobXJlcS0+cmN2X2RtYSkpOworCisJbWNwLT5tYlsxMF0gPSBMU1cobXJlcS0+dHJhbnNmZXJfc2l6ZSk7CisKKwltY3AtPm1iWzE0XSA9IExTVyhtcmVxLT5zZW5kX2RtYSk7CisJbWNwLT5tYlsxNV0gPSBNU1cobXJlcS0+c2VuZF9kbWEpOworCW1jcC0+bWJbMjBdID0gTFNXKE1TRChtcmVxLT5zZW5kX2RtYSkpOworCW1jcC0+bWJbMjFdID0gTVNXKE1TRChtcmVxLT5zZW5kX2RtYSkpOworCisJbWNwLT5vdXRfbWIgPSBNQlhfMjF8TUJYXzIwfE1CWF8xN3xNQlhfMTZ8TUJYXzE1fAorCSAgICBNQlhfMTR8TUJYXzEwfE1CWF83fE1CWF82fE1CWF8xfE1CWF8wOworCWlmIChJU19RTEE4MVhYKGhhKSkKKwkJbWNwLT5vdXRfbWIgfD0gTUJYXzI7CisKKwltY3AtPmluX21iID0gTUJYXzA7CisJaWYgKElTX1FMQTI0WFhfVFlQRShoYSkgfHwgSVNfUUxBMjVYWChoYSkgfHwgSVNfUUxBODFYWChoYSkpCisJCW1jcC0+aW5fbWIgfD0gTUJYXzE7CisJaWYgKElTX1FMQTgxWFgoaGEpKQorCQltY3AtPmluX21iIHw9IE1CWF8zOworCisJbWNwLT50b3YgPSBNQlhfVE9WX1NFQ09ORFM7CisJbWNwLT5mbGFncyA9IE1CWF9ETUFfT1VUfE1CWF9ETUFfSU58SU9DVExfQ01EOworCW1jcC0+YnVmX3NpemUgPSBtcmVxLT50cmFuc2Zlcl9zaXplOworCisJcnZhbCA9IHFsYTJ4MDBfbWFpbGJveF9jb21tYW5kKHZoYSwgbWNwKTsKKworCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CisJCURFQlVHMihwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAiKCVsZCk6IGZhaWxlZD0leCBtYlswXT0weCV4IG1iWzFdPTB4JXguXG4iLAorCQkgICAgdmhhLT5ob3N0X25vLCBydmFsLCBtY3AtPm1iWzBdLCBtY3AtPm1iWzFdKSk7CisJfSBlbHNlIHsKKwkJREVCVUcyKHByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICJzY3NpKCVsZCk6IGRvbmUuXG4iLCB2aGEtPmhvc3Rfbm8pKTsKKwl9CisKKwkvKiBDb3B5IG1haWxib3ggaW5mb3JtYXRpb24gKi8KKwltZW1jcHkoIG1yZXNwLCBtY3AtPm1iLCAzMik7CisJcmV0dXJuIHJ2YWw7Cit9CitpbnQKK3FsYTg0eHhfcmVzZXRfY2hpcChzY3NpX3FsYV9ob3N0X3QgKmhhLCB1aW50MTZfdCBlbmFibGVfZGlhZ25vc3RpYywKKyAgICB1aW50MTZfdCAqY21kX3N0YXR1cykKK3sKKwlpbnQgcnZhbDsKKwltYnhfY21kX3QgbWM7CisJbWJ4X2NtZF90ICptY3AgPSAmbWM7CisKKwlERUJVRzE2KHByaW50aygiJXMoJWxkKTogZW5hYmxlX2RpYWc9JWQgZW50ZXJlZC5cbiIsIF9fZnVuY19fLAorCQloYS0+aG9zdF9ubywgZW5hYmxlX2RpYWdub3N0aWMpKTsKKworCW1jcC0+bWJbMF0gPSBNQkNfSVNQODRYWF9SRVNFVDsKKwltY3AtPm1iWzFdID0gZW5hYmxlX2RpYWdub3N0aWM7CisJbWNwLT5vdXRfbWIgPSBNQlhfMXxNQlhfMDsKKwltY3AtPmluX21iID0gTUJYXzF8TUJYXzA7CisJbWNwLT50b3YgPSBNQlhfVE9WX1NFQ09ORFM7CisJbWNwLT5mbGFncyA9IE1CWF9ETUFfT1VUfE1CWF9ETUFfSU58SU9DVExfQ01EOworCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZChoYSwgbWNwKTsKKworCS8qIFJldHVybiBtYWlsYm94IHN0YXR1c2VzLiAqLworCSpjbWRfc3RhdHVzID0gbWNwLT5tYlswXTsKKwlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykKKwkJREVCVUcxNihwcmludGsoIiVzKCVsZCk6IGZhaWxlZD0leC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubywKKwkJCXJ2YWwpKTsKKwllbHNlCisJCURFQlVHMTYocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CisKKwlyZXR1cm4gcnZhbDsKK30KKworaW50CiBxbGEyeDAwX3dyaXRlX3JhbV93b3JkKHNjc2lfcWxhX2hvc3RfdCAqdmhhLCB1aW50MzJfdCByaXNjX2FkZHIsIHVpbnQzMl90IGRhdGEpCiB7CiAJaW50IHJ2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCmluZGV4IDg1MjllYjEuLjQ2NzIwYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jCkBAIC0xMDcsNiArMTA3LDEyIEBACiAJCSIgMSAtLSBsb2FkIGZpcm13YXJlIGZyb20gZmxhc2guXG4iCiAJCSIgMCAtLSB1c2UgZGVmYXVsdCBzZW1hbnRpY3MuXG4iKTsKIAoraW50IHFsMnhldHNlbmFibGU7Cittb2R1bGVfcGFyYW0ocWwyeGV0c2VuYWJsZSwgaW50LCBTX0lSVUdPfFNfSVJVU1IpOworTU9EVUxFX1BBUk1fREVTQyhxbDJ4ZXRzZW5hYmxlLAorCQkiRW5hYmxlcyBmaXJtd2FyZSBFVFMgYnVyc3QuIgorCQkiRGVmYXVsdCBpcyAwIC0gc2tpcCBFVFMgZW5hYmxlbWVudC4iKTsKKwogLyoKICAqIFNDU0kgaG9zdCB0ZW1wbGF0ZSBlbnRyeSBwb2ludHMKICAqLwpAQCAtNjgyLDQ0ICs2ODgsNiBAQAogCXJldHVybiAocmV0dXJuX3N0YXR1cyk7CiB9CiAKLXZvaWQKLXFsYTJ4MDBfYWJvcnRfZmNwb3J0X2NtZHMoZmNfcG9ydF90ICpmY3BvcnQpCi17Ci0JaW50IGNudDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNyYl90ICpzcDsKLQlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IGZjcG9ydC0+dmhhOwotCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwotCXN0cnVjdCByZXFfcXVlICpyZXE7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKLQlyZXEgPSB2aGEtPnJlcTsKLQlmb3IgKGNudCA9IDE7IGNudCA8IE1BWF9PVVRTVEFORElOR19DT01NQU5EUzsgY250KyspIHsKLQkJc3AgPSByZXEtPm91dHN0YW5kaW5nX2NtZHNbY250XTsKLQkJaWYgKCFzcCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoc3AtPmZjcG9ydCAhPSBmY3BvcnQpCi0JCQljb250aW51ZTsKLQkJaWYgKHNwLT5jdHgpCi0JCQljb250aW51ZTsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOwotCQlpZiAoaGEtPmlzcF9vcHMtPmFib3J0X2NvbW1hbmQoc3ApKSB7Ci0JCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAotCQkJIkFib3J0IGZhaWxlZCAtLSAgJWx4XG4iLAotCQkJc3AtPmNtZC0+c2VyaWFsX251bWJlcikpOwotCQl9IGVsc2UgewotCQkJaWYgKHFsYTJ4MDBfZWhfd2FpdF9vbl9jb21tYW5kKHNwLT5jbWQpICE9Ci0JCQkJUUxBX1NVQ0NFU1MpCi0JCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJCQkiQWJvcnQgZmFpbGVkIHdoaWxlIHdhaXRpbmcgLS0gICVseFxuIiwKLQkJCQlzcC0+Y21kLT5zZXJpYWxfbnVtYmVyKSk7Ci0JCX0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBxbGEyeHh4X2VoX2Fib3J0CiAqCkBAIC0xMDk1LDYgKzEwNjMsMjAgQEAKIAlzdHJ1Y3QgZmNfcG9ydCAqZmNwb3J0OwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCisJaWYgKGhhLT5mbGFncy5lbmFibGVfdGFyZ2V0X3Jlc2V0KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZmNwb3J0LCAmdmhhLT52cF9mY3BvcnRzLCBsaXN0KSB7CisJCQlpZiAoZmNwb3J0LT5wb3J0X3R5cGUgIT0gRkNUX1RBUkdFVCkKKwkJCQljb250aW51ZTsKKworCQkJcmV0ID0gaGEtPmlzcF9vcHMtPnRhcmdldF9yZXNldChmY3BvcnQsIDAsIDApOworCQkJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykgeworCQkJCURFQlVHMl8zKHByaW50aygiJXMoJWxkKTogYnVzX3Jlc2V0IGZhaWxlZDogIgorCQkJCSAgICAidGFyZ2V0X3Jlc2V0PSVkIGRfaWQ9JXguXG4iLCBfX2Z1bmNfXywKKwkJCQkgICAgdmhhLT5ob3N0X25vLCByZXQsIGZjcG9ydC0+ZF9pZC5iMjQpKTsKKwkJCX0KKwkJfQorCX0KKwogCWlmIChoYS0+ZmxhZ3MuZW5hYmxlX2xpcF9mdWxsX2xvZ2luICYmICFJU19RTEE4MVhYKGhhKSkgewogCQlyZXQgPSBxbGEyeDAwX2Z1bGxfbG9naW5fbGlwKHZoYSk7CiAJCWlmIChyZXQgIT0gUUxBX1NVQ0NFU1MpIHsKQEAgLTExMTcsMTkgKzEwOTksNiBAQAogCQkJcWxhMngwMF93YWl0X2Zvcl9sb29wX3JlYWR5KHZoYSk7CiAJfQogCi0JaWYgKGhhLT5mbGFncy5lbmFibGVfdGFyZ2V0X3Jlc2V0KSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZmNwb3J0LCAmdmhhLT52cF9mY3BvcnRzLCBsaXN0KSB7Ci0JCQlpZiAoZmNwb3J0LT5wb3J0X3R5cGUgIT0gRkNUX1RBUkdFVCkKLQkJCQljb250aW51ZTsKLQotCQkJcmV0ID0gaGEtPmlzcF9vcHMtPnRhcmdldF9yZXNldChmY3BvcnQsIDAsIDApOwotCQkJaWYgKHJldCAhPSBRTEFfU1VDQ0VTUykgewotCQkJCURFQlVHMl8zKHByaW50aygiJXMoJWxkKTogYnVzX3Jlc2V0IGZhaWxlZDogIgotCQkJCSAgICAidGFyZ2V0X3Jlc2V0PSVkIGRfaWQ9JXguXG4iLCBfX2Z1bmNfXywKLQkJCQkgICAgdmhhLT5ob3N0X25vLCByZXQsIGZjcG9ydC0+ZF9pZC5iMjQpKTsKLQkJCX0KLQkJfQotCX0KIAkvKiBJc3N1ZSBtYXJrZXIgY29tbWFuZCBvbmx5IHdoZW4gd2UgYXJlIGdvaW5nIHRvIHN0YXJ0IHRoZSBJL08gKi8KIAl2aGEtPm1hcmtlcl9uZWVkZWQgPSAxOwogCkBAIC0xMTYwLDggKzExMjksMTkgQEAKIAkJCQkJcWxhMngwMF9zcF9jb21wbChoYSwgc3ApOwogCQkJCX0gZWxzZSB7CiAJCQkJCWN0eCA9IHNwLT5jdHg7Ci0JCQkJCWRlbF90aW1lcl9zeW5jKCZjdHgtPnRpbWVyKTsKLQkJCQkJY3R4LT5mcmVlKHNwKTsKKwkJCQkJaWYgKGN0eC0+dHlwZSA9PSBTUkJfTE9HSU5fQ01EIHx8IGN0eC0+dHlwZSA9PSBTUkJfTE9HT1VUX0NNRCkgeworCQkJCQkJZGVsX3RpbWVyX3N5bmMoJmN0eC0+dGltZXIpOworCQkJCQkJY3R4LT5mcmVlKHNwKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXN0cnVjdCBzcmJfYnNnKiBzcF9ic2cgPSAoc3RydWN0IHNyYl9ic2cqKXNwLT5jdHg7CisJCQkJCQlpZiAoc3BfYnNnLT5ic2dfam9iLT5yZXF1ZXN0LT5tc2djb2RlID09IEZDX0JTR19IU1RfQ1QpCisJCQkJCQkJa2ZyZWUoc3AtPmZjcG9ydCk7CisJCQkJCQlzcF9ic2ctPmJzZ19qb2ItPnJlcS0+ZXJyb3JzID0gMDsKKwkJCQkJCXNwX2JzZy0+YnNnX2pvYi0+cmVwbHktPnJlc3VsdCA9IHJlczsKKwkJCQkJCXNwX2JzZy0+YnNnX2pvYi0+am9iX2RvbmUoc3BfYnNnLT5ic2dfam9iKTsKKwkJCQkJCWtmcmVlKHNwLT5jdHgpOworCQkJCQkJbWVtcG9vbF9mcmVlKHNwLCBoYS0+c3JiX21lbXBvb2wpOworCQkJCQl9CiAJCQkJfQogCQkJfQogCQl9CkBAIC0xMjU4LDcgKzEyMzgsNyBAQAogCQlxbGEyeDAwX2FkanVzdF9zZGV2X3FkZXB0aF91cChzZGV2LCBxZGVwdGgpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gRU9QTk9UU1VQUDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAogCXJldHVybiBzZGV2LT5xdWV1ZV9kZXB0aDsKQEAgLTE4MTgsNyArMTc5OCw2IEBACiAJLyogU2V0IEVFSCByZXNldCB0eXBlIHRvIGZ1bmRhbWVudGFsIGlmIHJlcXVpcmVkIGJ5IGhiYSAqLwogCWlmICggSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkgfHwgSVNfUUxBODFYWChoYSkpIHsKIAkJcGRldi0+bmVlZHNfZnJlc2V0ID0gMTsKLQkJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJfQogCiAJLyogQ29uZmlndXJlIFBDSSBJL08gc3BhY2UgKi8KQEAgLTE5NzAsMTEgKzE5NDksMTUgQEAKIAlob3N0LT5tYXhfY2hhbm5lbCA9IE1BWF9CVVNFUyAtIDE7CiAJaG9zdC0+bWF4X2x1biA9IE1BWF9MVU5TOwogCWhvc3QtPnRyYW5zcG9ydHQgPSBxbGEyeHh4X3RyYW5zcG9ydF90ZW1wbGF0ZTsKKwlzaHQtPnZlbmRvcl9pZCA9IChTQ1NJX05MX1ZJRF9UWVBFX1BDSSB8IFBDSV9WRU5ET1JfSURfUUxPR0lDKTsKIAogCS8qIFNldCB1cCB0aGUgaXJxcyAqLwogCXJldCA9IHFsYTJ4MDBfcmVxdWVzdF9pcnFzKGhhLCByc3ApOwogCWlmIChyZXQpCiAJCWdvdG8gcHJvYmVfaW5pdF9mYWlsZWQ7CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwogCS8qIEFsbG9jIGFycmF5cyBvZiByZXF1ZXN0IGFuZCByZXNwb25zZSByaW5nIHB0cnMgKi8KIHF1ZV9pbml0OgogCWlmICghcWxhMngwMF9hbGxvY19xdWV1ZXMoaGEpKSB7CkBAIC0yMTc2LDYgKzIxNTksOCBAQAogCWtmcmVlKGhhKTsKIAloYSA9IE5VTEw7CiAKKwlwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhwZGV2KTsKKwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiB9CkBAIC0zMzEwLDYgKzMyOTUsNyBAQAogCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfQ0FOX1JFQ09WRVI7CiAJY2FzZSBwY2lfY2hhbm5lbF9pb19mcm96ZW46CiAJCWhhLT5mbGFncy5lZWhfYnVzeSA9IDE7CisJCXFsYTJ4MDBfZnJlZV9pcnFzKHZoYSk7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7CiAJY2FzZSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmU6CkBAIC0zMzYzLDEwICszMzQ5LDI0IEBACiAJcGNpX2Vyc19yZXN1bHRfdCByZXQgPSBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwogCXNjc2lfcWxhX2hvc3RfdCAqYmFzZV92aGEgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IGJhc2VfdmhhLT5odzsKLQlpbnQgcmM7CisJc3RydWN0IHJzcF9xdWUgKnJzcDsKKwlpbnQgcmMsIHJldHJpZXMgPSAxMDsKIAogCURFQlVHMTcocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAic2xvdF9yZXNldFxuIikpOwogCisJLyogV29ya2Fyb3VuZDogcWxhMnh4eCBkcml2ZXIgd2hpY2ggYWNjZXNzIGhhcmR3YXJlIGVhcmxpZXIKKwkgKiBuZWVkcyBlcnJvciBzdGF0ZSB0byBiZSBwY2lfY2hhbm5lbF9pb19vbmxpbmUuCisJICogT3RoZXJ3aXNlIG1haWxib3ggY29tbWFuZCB0aW1lc291dC4KKwkgKi8KKwlwZGV2LT5lcnJvcl9zdGF0ZSA9IHBjaV9jaGFubmVsX2lvX25vcm1hbDsKKworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJLyogcGNpX3Jlc3RvcmVfc3RhdGUoKSBjbGVhcnMgdGhlIHNhdmVkX3N0YXRlIGZsYWcgb2YgdGhlIGRldmljZQorCSAqIHNhdmUgcmVzdG9yZWQgc3RhdGUgd2hpY2ggcmVzZXRzIHNhdmVkX3N0YXRlIGZsYWcKKwkgKi8KKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwogCWlmIChoYS0+bWVtX29ubHkpCiAJCXJjID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwogCWVsc2UKQEAgLTMzNzgsMjcgKzMzNzgsMjMgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlyc3AgPSBoYS0+cnNwX3FfbWFwWzBdOworCWlmIChxbGEyeDAwX3JlcXVlc3RfaXJxcyhoYSwgcnNwKSkKKwkJcmV0dXJuIHJldDsKKwogCWlmIChoYS0+aXNwX29wcy0+cGNpX2NvbmZpZyhiYXNlX3ZoYSkpCiAJCXJldHVybiByZXQ7CiAKLSNpZmRlZiBRTF9ERUJVR19MRVZFTF8xNwotCXsKLQkJdWludDhfdCBiOwotCQl1aW50MzJfdCBpOworCXdoaWxlIChoYS0+ZmxhZ3MubWJveF9idXN5ICYmIHJldHJpZXMtLSkKKwkJbXNsZWVwKDEwMDApOwogCi0JCXByaW50aygic2xvdF9yZXNldF8xOiAiKTsKLQkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCQlwY2lfcmVhZF9jb25maWdfYnl0ZShoYS0+cGRldiwgaSwgJmIpOwotCQkJcHJpbnRrKCIlcyUwMngiLCAoaSUxNikgPyAiICIgOiAiXG4iLCBiKTsKLQkJfQotCQlwcmludGsoIlxuIik7Ci0JfQotI2VuZGlmCiAJc2V0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmYmFzZV92aGEtPmRwY19mbGFncyk7CiAJaWYgKHFsYTJ4MDBfYWJvcnRfaXNwKGJhc2VfdmhhKSA9PSBRTEFfU1VDQ0VTUykKIAkJcmV0ID0gIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKIAljbGVhcl9iaXQoQUJPUlRfSVNQX0FDVElWRSwgJmJhc2VfdmhhLT5kcGNfZmxhZ3MpOwogCisJcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMocGRldik7CisKIAlERUJVRzE3KHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKIAkgICAgInNsb3RfcmVzZXQtcmV0dXJuOnJldD0leFxuIiwgcmV0KSk7CiAKQEAgLTM0MjIsOCArMzQxOCw2IEBACiAJfQogCiAJaGEtPmZsYWdzLmVlaF9idXN5ID0gMDsKLQotCXBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzKHBkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBxbGEyeHh4X2Vycl9oYW5kbGVyID0gewpAQCAtMzUzNiw0ICszNTMwLDMgQEAKIE1PRFVMRV9GSVJNV0FSRShGV19GSUxFX0lTUDIzMjIpOwogTU9EVUxFX0ZJUk1XQVJFKEZXX0ZJTEVfSVNQMjRYWCk7CiBNT0RVTEVfRklSTVdBUkUoRldfRklMRV9JU1AyNVhYKTsKLU1PRFVMRV9GSVJNV0FSRShGV19GSUxFX0lTUDgxWFgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKaW5kZXggZWQzNjI3OS4uOGQyZmMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCkBAIC03LDkgKzcsOSBAQAogLyoKICAqIERyaXZlciB2ZXJzaW9uCiAgKi8KLSNkZWZpbmUgUUxBMlhYWF9WRVJTSU9OICAgICAgIjguMDMuMDEtazEwIgorI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMy4wMi1rMSIKIAogI2RlZmluZSBRTEFfRFJJVkVSX01BSk9SX1ZFUgk4CiAjZGVmaW5lIFFMQV9EUklWRVJfTUlOT1JfVkVSCTMKLSNkZWZpbmUgUUxBX0RSSVZFUl9QQVRDSF9WRVIJMQotI2RlZmluZSBRTEFfRFJJVkVSX0JFVEFfVkVSCTAKKyNkZWZpbmUgUUxBX0RSSVZFUl9QQVRDSF9WRVIJMgorI2RlZmluZSBRTEFfRFJJVkVSX0JFVEFfVkVSCTEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW5pdC5jCmluZGV4IGFmOGMzMjMuLjkyMzI5YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2luaXQuYwpAQCAtODQ0LDEwICs4NDQsMTAgQEAKIAlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiAlczogR2V0IEVFUHJvbSBwYXJhbWV0ZXJzIFxuIiwgaGEtPmhvc3Rfbm8sCiAJCSAgICAgIF9fZnVuY19fKSk7CiAJaWYgKHFsNHh4eF9sb2NrX2ZsYXNoKGhhKSAhPSBRTEFfU1VDQ0VTUykKLQkJcmV0dXJuIChRTEFfRVJST1IpOworCQlyZXR1cm4gUUxBX0VSUk9SOwogCWlmIChxbDR4eHhfbG9ja19udnJhbShoYSkgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJcWw0eHh4X3VubG9ja19mbGFzaChoYSk7Ci0JCXJldHVybiAoUUxBX0VSUk9SKTsKKwkJcmV0dXJuIFFMQV9FUlJPUjsKIAl9CiAKIAkvKiBHZXQgRUVQUm9tIFBhcmFtZXRlcnMgZnJvbSBOVlJBTSBhbmQgdmFsaWRhdGUgKi8KQEAgLTg1OCwyMCArODU4LDE4IEBACiAJCQlyZF9udnJhbV93b3JkKGhhLCBlZXByb21fZXh0X2h3X2NvbmZfb2Zmc2V0KGhhKSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAJfSBlbHNlIHsKLQkJLyoKLQkJICogUUxvZ2ljIGFkYXB0ZXJzIHNob3VsZCBhbHdheXMgaGF2ZSBhIHZhbGlkIE5WUkFNLgotCQkgKiBJZiBub3QgdmFsaWQsIGRvIG5vdCBsb2FkLgotCQkgKi8KIAkJZGV2X3dhcm4oJmhhLT5wZGV2LT5kZXYsCiAJCQkgICAic2NzaSVsZDogJXM6IEVFUHJvbSBjaGVja3N1bSBpbnZhbGlkLiAgIgogCQkJICAgIlBsZWFzZSB1cGRhdGUgeW91ciBFRVBST01cbiIsIGhhLT5ob3N0X25vLAogCQkJICAgX19mdW5jX18pOwogCi0JCS8qIHNldCBkZWZhdWx0cyAqLworCQkvKiBBdHRlbXB0IHRvIHNldCBkZWZhdWx0cyAqLwogCQlpZiAoaXNfcWxhNDAxMChoYSkpCiAJCQlleHRId0NvbmZpZy5Bc3VpbnQzMl90ID0gMHgxOTEyOwogCQllbHNlIGlmIChpc19xbGE0MDIyKGhhKSB8IGlzX3FsYTQwMzIoaGEpKQogCQkJZXh0SHdDb25maWcuQXN1aW50MzJfdCA9IDB4MDAyMzsKKwkJZWxzZQorCQkJcmV0dXJuIFFMQV9FUlJPUjsKIAl9CiAJREVCVUcocHJpbnRrKCJzY3NpJWxkOiAlczogU2V0dGluZyBleHRId0NvbmZpZyB0byAweEZGRkYlMDR4XG4iLAogCQkgICAgIGhhLT5ob3N0X25vLCBfX2Z1bmNfXywgZXh0SHdDb25maWcuQXN1aW50MzJfdCkpOwpAQCAtODg0LDcgKzg4Miw3IEBACiAJcWw0eHh4X3VubG9ja19udnJhbShoYSk7CiAJcWw0eHh4X3VubG9ja19mbGFzaChoYSk7CiAKLQlyZXR1cm4gKFFMQV9TVUNDRVNTKTsKKwlyZXR1cm4gUUxBX1NVQ0NFU1M7CiB9CiAKIHN0YXRpYyB2b2lkIHFsYTR4MDBfcGNpX2NvbmZpZyhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcmFpZF9jbGFzcy5jIGIvZHJpdmVycy9zY3NpL3JhaWRfY2xhc3MuYwppbmRleCA4ZTVjMTY5Li5iZDg4MzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcmFpZF9jbGFzcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9yYWlkX2NsYXNzLmMKQEAgLTE0OSw2ICsxNDksNyBAQAogCXsgUkFJRF9MRVZFTF8wLCAicmFpZDAiIH0sCiAJeyBSQUlEX0xFVkVMXzEsICJyYWlkMSIgfSwKIAl7IFJBSURfTEVWRUxfMTAsICJyYWlkMTAiIH0sCisJeyBSQUlEX0xFVkVMXzFFLCAicmFpZDFlIiB9LAogCXsgUkFJRF9MRVZFTF8zLCAicmFpZDMiIH0sCiAJeyBSQUlEX0xFVkVMXzQsICJyYWlkNCIgfSwKIAl7IFJBSURfTEVWRUxfNSwgInJhaWQ1IiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKaW5kZXggYTYwZGE1NS4uMWMwOGY2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCkBAIC0xMDE4LDYgKzEwMTgsOCBAQAogICogc2NzaV9nZXRfdnBkX3BhZ2UgLSBHZXQgVml0YWwgUHJvZHVjdCBEYXRhIGZyb20gYSBTQ1NJIGRldmljZQogICogQHNkZXY6IFRoZSBkZXZpY2UgdG8gYXNrCiAgKiBAcGFnZTogV2hpY2ggVml0YWwgUHJvZHVjdCBEYXRhIHRvIHJldHVybgorICogQGJ1Zjogd2hlcmUgdG8gc3RvcmUgdGhlIFZQRAorICogQGJ1Zl9sZW46IG51bWJlciBvZiBieXRlcyBpbiB0aGUgVlBEIGJ1ZmZlciBhcmVhCiAgKgogICogU0NTSSBkZXZpY2VzIG1heSBvcHRpb25hbGx5IHN1cHBseSBWaXRhbCBQcm9kdWN0IERhdGEuICBFYWNoICdwYWdlJwogICogb2YgVlBEIGlzIGRlZmluZWQgaW4gdGhlIGFwcHJvcHJpYXRlIFNDU0kgZG9jdW1lbnQgKGVnIFNQQywgU0JDKS4KQEAgLTEwMjYsNTUgKzEwMjgsMzkgQEAKICAqIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGtmcmVlKCkgb24gdGhpcyBwb2ludGVyIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCiAgKiBuZWVkZWQuICBJZiB3ZSBjYW5ub3QgcmV0cmlldmUgdGhlIFZQRCBwYWdlIHRoaXMgcm91dGluZSByZXR1cm5zICVOVUxMLgogICovCi11bnNpZ25lZCBjaGFyICpzY3NpX2dldF92cGRfcGFnZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHU4IHBhZ2UpCitpbnQgc2NzaV9nZXRfdnBkX3BhZ2Uoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB1OCBwYWdlLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCSAgICAgIGludCBidWZfbGVuKQogewogCWludCBpLCByZXN1bHQ7Ci0JdW5zaWduZWQgaW50IGxlbjsKLQljb25zdCB1bnNpZ25lZCBpbnQgaW5pdF92cGRfbGVuID0gMjU1OwotCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGttYWxsb2MoaW5pdF92cGRfbGVuLCBHRlBfS0VSTkVMKTsKLQotCWlmICghYnVmKQotCQlyZXR1cm4gTlVMTDsKIAogCS8qIEFzayBmb3IgYWxsIHRoZSBwYWdlcyBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UgKi8KLQlyZXN1bHQgPSBzY3NpX3ZwZF9pbnF1aXJ5KHNkZXYsIGJ1ZiwgMCwgaW5pdF92cGRfbGVuKTsKKwlyZXN1bHQgPSBzY3NpX3ZwZF9pbnF1aXJ5KHNkZXYsIGJ1ZiwgMCwgYnVmX2xlbik7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBmYWlsOwogCiAJLyogSWYgdGhlIHVzZXIgYWN0dWFsbHkgd2FudGVkIHRoaXMgcGFnZSwgd2UgY2FuIHNraXAgdGhlIHJlc3QgKi8KIAlpZiAocGFnZSA9PSAwKQotCQlyZXR1cm4gYnVmOworCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZvciAoaSA9IDA7IGkgPCBidWZbM107IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbWluKChpbnQpYnVmWzNdLCBidWZfbGVuIC0gNCk7IGkrKykKIAkJaWYgKGJ1ZltpICsgNF0gPT0gcGFnZSkKIAkJCWdvdG8gZm91bmQ7CisKKwlpZiAoaSA8IGJ1ZlszXSAmJiBpID4gYnVmX2xlbikKKwkJLyogcmFuIG9mZiB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIGdpdmUgdXMgYmVuZWZpdCBvZiBkb3VidCAqLworCQlnb3RvIGZvdW5kOwogCS8qIFRoZSBkZXZpY2UgY2xhaW1zIGl0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgcmVxdWVzdGVkIHBhZ2UgKi8KIAlnb3RvIGZhaWw7CiAKICBmb3VuZDoKLQlyZXN1bHQgPSBzY3NpX3ZwZF9pbnF1aXJ5KHNkZXYsIGJ1ZiwgcGFnZSwgMjU1KTsKKwlyZXN1bHQgPSBzY3NpX3ZwZF9pbnF1aXJ5KHNkZXYsIGJ1ZiwgcGFnZSwgYnVmX2xlbik7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBmYWlsOwogCi0JLyoKLQkgKiBTb21lIHBhZ2VzIGFyZSBsb25nZXIgdGhhbiAyNTUgYnl0ZXMuICBUaGUgYWN0dWFsIGxlbmd0aCBvZgotCSAqIHRoZSBwYWdlIGlzIHJldHVybmVkIGluIHRoZSBoZWFkZXIuCi0JICovCi0JbGVuID0gKChidWZbMl0gPDwgOCkgfCBidWZbM10pICsgNDsKLQlpZiAobGVuIDw9IGluaXRfdnBkX2xlbikKLQkJcmV0dXJuIGJ1ZjsKLQotCWtmcmVlKGJ1Zik7Ci0JYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCXJlc3VsdCA9IHNjc2lfdnBkX2lucXVpcnkoc2RldiwgYnVmLCBwYWdlLCBsZW4pOwotCWlmIChyZXN1bHQpCi0JCWdvdG8gZmFpbDsKLQotCXJldHVybiBidWY7CisJcmV0dXJuIDA7CiAKICBmYWlsOgotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzY3NpX2dldF92cGRfcGFnZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKaW5kZXggYzY2NDI0Mi4uMTY0NmZlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKQEAgLTc3Myw4ICs3NzMsMTQgQEAKIAkgKiB3ZSBhbHJlYWR5IHRvb2sgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBpbnRvIHJxLT5lcnJvcnMgd2hpY2gKIAkgKiBpcyB3aGF0IGdldHMgcmV0dXJuZWQgdG8gdGhlIHVzZXIKIAkgKi8KLQlpZiAoc2Vuc2VfdmFsaWQgJiYgc3NoZHIuc2Vuc2Vfa2V5ID09IFJFQ09WRVJFRF9FUlJPUikgewotCQlpZiAoIShyZXEtPmNtZF9mbGFncyAmIFJFUV9RVUlFVCkpCisJaWYgKHNlbnNlX3ZhbGlkICYmIChzc2hkci5zZW5zZV9rZXkgPT0gUkVDT1ZFUkVEX0VSUk9SKSkgeworCQkvKiBpZiBBVEEgUEFTUy1USFJPVUdIIElORk9STUFUSU9OIEFWQUlMQUJMRSBza2lwCisJCSAqIHByaW50IHNpbmNlIGNhbGxlciB3YW50cyBBVEEgcmVnaXN0ZXJzLiBPbmx5IG9jY3VycyBvbgorCQkgKiBTQ1NJIEFUQSBQQVNTX1RIUk9VR0ggY29tbWFuZHMgd2hlbiBDS19DT05EPTEKKwkJICovCisJCWlmICgoc3NoZHIuYXNjID09IDB4MCkgJiYgKHNzaGRyLmFzY3EgPT0gMHgxZCkpCisJCQk7CisJCWVsc2UgaWYgKCEocmVxLT5jbWRfZmxhZ3MgJiBSRVFfUVVJRVQpKQogCQkJc2NzaV9wcmludF9zZW5zZSgiIiwgY21kKTsKIAkJcmVzdWx0ID0gMDsKIAkJLyogQkxPQ0tfUEMgbWF5IGhhdmUgc2V0IGVycm9yICovCkBAIC0xNjI0LDEwICsxNjMwLDEwIEBACiAJLyoKIAkgKiB0aGlzIGxpbWl0IGlzIGltcG9zZWQgYnkgaGFyZHdhcmUgcmVzdHJpY3Rpb25zCiAJICovCi0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhxLCBzaG9zdC0+c2dfdGFibGVzaXplKTsKLQlibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSwgU0NTSV9NQVhfU0dfQ0hBSU5fU0VHTUVOVFMpOworCWJsa19xdWV1ZV9tYXhfc2VnbWVudHMocSwgbWluX3QodW5zaWduZWQgc2hvcnQsIHNob3N0LT5zZ190YWJsZXNpemUsCisJCQkJCVNDU0lfTUFYX1NHX0NIQUlOX1NFR01FTlRTKSk7CiAKLQlibGtfcXVldWVfbWF4X3NlY3RvcnMocSwgc2hvc3QtPm1heF9zZWN0b3JzKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocSwgc2hvc3QtPm1heF9zZWN0b3JzKTsKIAlibGtfcXVldWVfYm91bmNlX2xpbWl0KHEsIHNjc2lfY2FsY3VsYXRlX2JvdW5jZV9saW1pdChzaG9zdCkpOwogCWJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5KHEsIHNob3N0LT5kbWFfYm91bmRhcnkpOwogCWRtYV9zZXRfc2VnX2JvdW5kYXJ5KGRldiwgc2hvc3QtPmRtYV9ib3VuZGFyeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zYXNfaW50ZXJuYWwuaCBiL2RyaXZlcnMvc2NzaS9zY3NpX3Nhc19pbnRlcm5hbC5oCmluZGV4IDk5OGNiNWIuLjYyNjZhNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3Nhc19pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3Nhc19pbnRlcm5hbC5oCkBAIC01LDcgKzUsNyBAQAogI2RlZmluZSBTQVNfUEhZX0FUVFJTCQkxNwogI2RlZmluZSBTQVNfUE9SVF9BVFRSUwkJMQogI2RlZmluZSBTQVNfUlBPUlRfQVRUUlMJCTcKLSNkZWZpbmUgU0FTX0VORF9ERVZfQVRUUlMJMworI2RlZmluZSBTQVNfRU5EX0RFVl9BVFRSUwk1CiAjZGVmaW5lIFNBU19FWFBBTkRFUl9BVFRSUwk3CiAKIHN0cnVjdCBzYXNfaW50ZXJuYWwgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCmluZGV4IDAxMmY3M2EuLjRiYzhiNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTg3OSw3ICs4NzksNyBAQAogCSAqIGJyb2tlbiBSQTR4MDAgQ29tcGFxIERpc2sgQXJyYXkKIAkgKi8KIAlpZiAoKmJmbGFncyAmIEJMSVNUX01BWF81MTIpCi0JCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCA1MTIpOworCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgNTEyKTsKIAogCS8qCiAJICogU29tZSBkZXZpY2VzIG1heSBub3Qgd2FudCB0byBoYXZlIGEgc3RhcnQgY29tbWFuZCBhdXRvbWF0aWNhbGx5CkBAIC0xMzM5LDggKzEzMzksMTAgQEAKIAkJc2RldiA9IHNjc2lfYWxsb2Nfc2RldihzdGFyZ2V0LCAwLCBOVUxMKTsKIAkJaWYgKCFzZGV2KQogCQkJcmV0dXJuIDA7Ci0JCWlmIChzY3NpX2RldmljZV9nZXQoc2RldikpCisJCWlmIChzY3NpX2RldmljZV9nZXQoc2RldikpIHsKKwkJCV9fc2NzaV9yZW1vdmVfZGV2aWNlKHNkZXYpOwogCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlzcHJpbnRmKGRldm5hbWUsICJob3N0ICVkIGNoYW5uZWwgJWQgaWQgJWQiLApAQCAtMTkwNywxMCArMTkwOSw5IEBACiAJCWdvdG8gb3V0OwogCiAJc2RldiA9IHNjc2lfYWxsb2Nfc2RldihzdGFyZ2V0LCAwLCBOVUxMKTsKLQlpZiAoc2RldikgewotCQlzZGV2LT5zZGV2X2dlbmRldi5wYXJlbnQgPSBnZXRfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOworCWlmIChzZGV2KQogCQlzZGV2LT5ib3JrZW4gPSAwOwotCX0gZWxzZQorCWVsc2UKIAkJc2NzaV90YXJnZXRfcmVhcChzdGFyZ2V0KTsKIAlwdXRfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOwogIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCmluZGV4IDVhMDY1MDUuLjE5ZWM5ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwpAQCAtODQ3LDYgKzg0Nyw4IEBACiAJaWYgKHN0YXJnZXQtPnN0YXRlICE9IFNUQVJHRVRfQ1JFQVRFRCkKIAkJcmV0dXJuIDA7CiAKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJnN0YXJnZXQtPmRldik7CisKIAllcnJvciA9IGRldmljZV9hZGQoJnN0YXJnZXQtPmRldik7CiAJaWYgKGVycm9yKSB7CiAJCWRldl9lcnIoJnN0YXJnZXQtPmRldiwgInRhcmdldCBkZXZpY2VfYWRkIGZhaWxlZCwgZXJyb3IgJWRcbiIsIGVycm9yKTsKQEAgLTg3OCw3ICs4ODAsOCBAQAogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpycSA9IHNkZXYtPnJlcXVlc3RfcXVldWU7CiAJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gc2Rldi0+c2Rldl90YXJnZXQ7CiAKLQlpZiAoKGVycm9yID0gc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHNkZXYsIFNERVZfUlVOTklORykpICE9IDApCisJZXJyb3IgPSBzY3NpX2RldmljZV9zZXRfc3RhdGUoc2RldiwgU0RFVl9SVU5OSU5HKTsKKwlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0gc2NzaV90YXJnZXRfYWRkKHN0YXJnZXQpOwpAQCAtODg2LDE2ICs4ODksMTggQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJdHJhbnNwb3J0X2NvbmZpZ3VyZV9kZXZpY2UoJnN0YXJnZXQtPmRldik7CisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImVycm9yIDFcbiIpOwotCQlnb3RvIG91dF9yZW1vdmU7CisJCXJldHVybiBlcnJvcjsKIAl9CisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKCZzZGV2LT5zZGV2X2Rldik7CiAJZXJyb3IgPSBkZXZpY2VfYWRkKCZzZGV2LT5zZGV2X2Rldik7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImVycm9yIDJcbiIpOwogCQlkZXZpY2VfZGVsKCZzZGV2LT5zZGV2X2dlbmRldik7Ci0JCWdvdG8gb3V0X3JlbW92ZTsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAl0cmFuc3BvcnRfYWRkX2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwogCXNkZXYtPmlzX3Zpc2libGUgPSAxOwpAQCAtOTEwLDE0ICs5MTUsMTQgQEAKIAllbHNlCiAJCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzZGV2LT5zZGV2X2dlbmRldiwgJmRldl9hdHRyX3F1ZXVlX2RlcHRoKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3JlbW92ZTsKKwkJcmV0dXJuIGVycm9yOwogCiAJaWYgKHNkZXYtPmhvc3QtPmhvc3R0LT5jaGFuZ2VfcXVldWVfdHlwZSkKIAkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNkZXYtPnNkZXZfZ2VuZGV2LCAmc2Rldl9hdHRyX3F1ZXVlX3R5cGVfcncpOwogCWVsc2UKIAkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNkZXYtPnNkZXZfZ2VuZGV2LCAmZGV2X2F0dHJfcXVldWVfdHlwZSk7CiAJaWYgKGVycm9yKQotCQlnb3RvIG91dF9yZW1vdmU7CisJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0gYnNnX3JlZ2lzdGVyX3F1ZXVlKHJxLCAmc2Rldi0+c2Rldl9nZW5kZXYsIE5VTEwsIE5VTEwpOwogCkBAIC05MzMsMTYgKzkzOCwxMSBAQAogCQkJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNkZXYtPnNkZXZfZ2VuZGV2LAogCQkJCQlzZGV2LT5ob3N0LT5ob3N0dC0+c2Rldl9hdHRyc1tpXSk7CiAJCQlpZiAoZXJyb3IpCi0JCQkJZ290byBvdXRfcmVtb3ZlOworCQkJCXJldHVybiBlcnJvcjsKIAkJfQogCX0KIAotCXJldHVybiAwOwotCi0gb3V0X3JlbW92ZToKLQlfX3Njc2lfcmVtb3ZlX2RldmljZShzZGV2KTsKIAlyZXR1cm4gZXJyb3I7Ci0KIH0KIAogdm9pZCBfX3Njc2lfcmVtb3ZlX2RldmljZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCmluZGV4IDY1M2YyMmEuLjc5NjYwZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCkBAIC00NzUsNyArNDc1LDggQEAKIAkJICJNYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIHRoYXQgdGhlIEZDIHRyYW5zcG9ydCBzaG91bGQiCiAJCSAiIGluc3VsYXRlIHRoZSBsb3NzIG9mIGEgcmVtb3RlIHBvcnQuIE9uY2UgdGhpcyB2YWx1ZSBpcyIKIAkJICIgZXhjZWVkZWQsIHRoZSBzY3NpIHRhcmdldCBpcyByZW1vdmVkLiBWYWx1ZSBzaG91bGQgYmUiCi0JCSAiIGJldHdlZW4gMSBhbmQgU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQuIik7CisJCSAiIGJldHdlZW4gMSBhbmQgU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQgaWYiCisJCSAiIGZhc3RfaW9fZmFpbF90bW8gaXMgbm90IHNldC4iKTsKIAogLyoKICAqIE5ldGxpbmsgSW5mcmFzdHJ1Y3R1cmUKQEAgLTg0Miw5ICs4NDMsMTcgQEAKIAkgICAgKHJwb3J0LT5wb3J0X3N0YXRlID09IEZDX1BPUlRTVEFURV9OT1RQUkVTRU5UKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsICZjcCwgMCk7Ci0JaWYgKCgqY3AgJiYgKCpjcCAhPSAnXG4nKSkgfHwKLQkgICAgKHZhbCA8IDApIHx8ICh2YWwgPiBTQ1NJX0RFVklDRV9CTE9DS19NQVhfVElNRU9VVCkpCisJaWYgKCgqY3AgJiYgKCpjcCAhPSAnXG4nKSkgfHwgKHZhbCA8IDApKQogCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogSWYgZmFzdF9pb19mYWlsIGlzIG9mZiB3ZSBoYXZlIHRvIGNhcAorCSAqIGRldl9sb3NzX3RtbyBhdCBTQ1NJX0RFVklDRV9CTE9DS19NQVhfVElNRU9VVAorCSAqLworCWlmIChycG9ydC0+ZmFzdF9pb19mYWlsX3RtbyA9PSAtMSAmJgorCSAgICB2YWwgPiBTQ1NJX0RFVklDRV9CTE9DS19NQVhfVElNRU9VVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpLT5mLT5zZXRfcnBvcnRfZGV2X2xvc3NfdG1vKHJwb3J0LCB2YWwpOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTkyNSw5ICs5MzQsMTYgQEAKIAkJcnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gPSAtMTsKIAllbHNlIHsKIAkJdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmY3AsIDApOwotCQlpZiAoKCpjcCAmJiAoKmNwICE9ICdcbicpKSB8fAotCQkgICAgKHZhbCA8IDApIHx8ICh2YWwgPj0gcnBvcnQtPmRldl9sb3NzX3RtbykpCisJCWlmICgoKmNwICYmICgqY3AgIT0gJ1xuJykpIHx8ICh2YWwgPCAwKSkKIAkJCXJldHVybiAtRUlOVkFMOworCQkvKgorCQkgKiBDYXAgZmFzdF9pb19mYWlsIGJ5IGRldl9sb3NzX3RtbyBvcgorCQkgKiBTQ1NJX0RFVklDRV9CTE9DS19NQVhfVElNRU9VVC4KKwkJICovCisJCWlmICgodmFsID49IHJwb3J0LT5kZXZfbG9zc190bW8pIHx8CisJCSAgICAodmFsID4gU0NTSV9ERVZJQ0VfQkxPQ0tfTUFYX1RJTUVPVVQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKIAkJcnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gPSB2YWw7CiAJfQogCXJldHVybiBjb3VudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYwppbmRleCBmMjdlNTJkLi45MjdlOTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jCkBAIC0xNTUsNiArMTU1LDE3IEBACiBzYXNfYml0ZmllbGRfbmFtZV9zZWFyY2gobGlua3NwZWVkLCBzYXNfbGlua3NwZWVkX25hbWVzKQogc2FzX2JpdGZpZWxkX25hbWVfc2V0KGxpbmtzcGVlZCwgc2FzX2xpbmtzcGVlZF9uYW1lcykKIAorc3RhdGljIHN0cnVjdCBzYXNfZW5kX2RldmljZSAqc2FzX3NkZXZfdG9fcmRldihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IHNhc19ycGh5ICpycGh5ID0gdGFyZ2V0X3RvX3JwaHkoc2Rldi0+c2Rldl90YXJnZXQpOworCXN0cnVjdCBzYXNfZW5kX2RldmljZSAqcmRldjsKKworCUJVR19PTihycGh5LT5pZGVudGlmeS5kZXZpY2VfdHlwZSAhPSBTQVNfRU5EX0RFVklDRSk7CisKKwlyZGV2ID0gcnBoeV90b19lbmRfZGV2aWNlKHJwaHkpOworCXJldHVybiByZGV2OworfQorCiBzdGF0aWMgdm9pZCBzYXNfc21wX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAogCQkJICAgIHN0cnVjdCBzYXNfcnBoeSAqcnBoeSkKIHsKQEAgLTM1OCw2ICszNjksODUgQEAKIH0KIEVYUE9SVF9TWU1CT0woc2FzX3JlbW92ZV9ob3N0KTsKIAorLyoqCisgKiBzYXNfdGxyX3N1cHBvcnRlZCAtIGNoZWNraW5nIFRMUiBiaXQgaW4gdnBkIDB4OTAKKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBDaGVjayBUcmFuc3BvcnQgTGF5ZXIgUmV0cmllcyBhcmUgc3VwcG9ydGVkIG9yIG5vdC4KKyAqIElmIHZwZCBwYWdlIDB4OTAgaXMgcHJlc2VudCwgVFJMIGlzIHN1cHBvcnRlZC4KKyAqCisgKi8KK3Vuc2lnbmVkIGludAorc2FzX3Rscl9zdXBwb3J0ZWQoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCWNvbnN0IGludCB2cGRfbGVuID0gMzI7CisJc3RydWN0IHNhc19lbmRfZGV2aWNlICpyZGV2ID0gc2FzX3NkZXZfdG9fcmRldihzZGV2KTsKKwljaGFyICpidWZmZXIgPSBremFsbG9jKHZwZF9sZW4sIEdGUF9LRVJORUwpOworCWludCByZXQgPSAwOworCisJaWYgKHNjc2lfZ2V0X3ZwZF9wYWdlKHNkZXYsIDB4OTAsIGJ1ZmZlciwgdnBkX2xlbikpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBNYWdpYyBudW1iZXJzOiB0aGUgVlBEIFByb3RvY29sIHBhZ2UgKDB4OTApCisJICogaGFzIGEgNCBieXRlIGhlYWRlciBhbmQgdGhlbiBvbmUgZW50cnkgcGVyIGRldmljZSBwb3J0CisJICogdGhlIFRMUiBiaXQgaXMgYXQgb2Zmc2V0IDggb24gZWFjaCBwb3J0IGVudHJ5CisJICogaWYgd2UgdGFrZSB0aGUgZmlyc3QgcG9ydCwgdGhhdCdzIGF0IHRvdGFsIG9mZnNldCAxMgorCSAqLworCXJldCA9IGJ1ZmZlclsxMl0gJiAweDAxOworCisgb3V0OgorCWtmcmVlKGJ1ZmZlcik7CisJcmRldi0+dGxyX3N1cHBvcnRlZCA9IHJldDsKKwlyZXR1cm4gcmV0OworCit9CitFWFBPUlRfU1lNQk9MX0dQTChzYXNfdGxyX3N1cHBvcnRlZCk7CisKKy8qKgorICogc2FzX2Rpc2FibGVfdGxyIC0gc2V0dGluZyBUTFIgZmxhZ3MKKyAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBTZXRpbmcgdGxyX2VuYWJsZWQgZmxhZyB0byAwLgorICoKKyAqLwordm9pZAorc2FzX2Rpc2FibGVfdGxyKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3Qgc2FzX2VuZF9kZXZpY2UgKnJkZXYgPSBzYXNfc2Rldl90b19yZGV2KHNkZXYpOworCisJcmRldi0+dGxyX2VuYWJsZWQgPSAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2FzX2Rpc2FibGVfdGxyKTsKKworLyoqCisgKiBzYXNfZW5hYmxlX3RsciAtIHNldHRpbmcgVExSIGZsYWdzCisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKgorICogU2V0aW5nIHRscl9lbmFibGVkIGZsYWcgMS4KKyAqCisgKi8KK3ZvaWQgc2FzX2VuYWJsZV90bHIoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXVuc2lnbmVkIGludCB0bHJfc3VwcG9ydGVkID0gMDsKKwl0bHJfc3VwcG9ydGVkICA9IHNhc190bHJfc3VwcG9ydGVkKHNkZXYpOworCisJaWYgKHRscl9zdXBwb3J0ZWQpIHsKKwkJc3RydWN0IHNhc19lbmRfZGV2aWNlICpyZGV2ID0gc2FzX3NkZXZfdG9fcmRldihzZGV2KTsKKworCQlyZGV2LT50bHJfZW5hYmxlZCA9IDE7CisJfQorCisJcmV0dXJuOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2FzX2VuYWJsZV90bHIpOworCit1bnNpZ25lZCBpbnQgc2FzX2lzX3Rscl9lbmFibGVkKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3Qgc2FzX2VuZF9kZXZpY2UgKnJkZXYgPSBzYXNfc2Rldl90b19yZGV2KHNkZXYpOworCXJldHVybiByZGV2LT50bHJfZW5hYmxlZDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNhc19pc190bHJfZW5hYmxlZCk7CiAKIC8qCiAgKiBTQVMgUGh5IGF0dHJpYnV0ZXMKQEAgLTExNDYsMTUgKzEyMzYsMTAgQEAKIGludCBzYXNfcmVhZF9wb3J0X21vZGVfcGFnZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CiAJY2hhciAqYnVmZmVyID0ga3phbGxvYyhCVUZfU0laRSwgR0ZQX0tFUk5FTCksICptc2RhdGE7Ci0Jc3RydWN0IHNhc19ycGh5ICpycGh5ID0gdGFyZ2V0X3RvX3JwaHkoc2Rldi0+c2Rldl90YXJnZXQpOwotCXN0cnVjdCBzYXNfZW5kX2RldmljZSAqcmRldjsKKwlzdHJ1Y3Qgc2FzX2VuZF9kZXZpY2UgKnJkZXYgPSBzYXNfc2Rldl90b19yZGV2KHNkZXYpOwogCXN0cnVjdCBzY3NpX21vZGVfZGF0YSBtb2RlX2RhdGE7CiAJaW50IHJlcywgZXJyb3I7CiAKLQlCVUdfT04ocnBoeS0+aWRlbnRpZnkuZGV2aWNlX3R5cGUgIT0gU0FTX0VORF9ERVZJQ0UpOwotCi0JcmRldiA9IHJwaHlfdG9fZW5kX2RldmljZShycGh5KTsKLQogCWlmICghYnVmZmVyKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTIwNyw2ICsxMjkyLDEwIEBACiAJCQkiJWRcbiIsIGludCk7CiBzYXNfZW5kX2Rldl9zaW1wbGVfYXR0cihpbml0aWF0b3JfcmVzcG9uc2VfdGltZW91dCwgaW5pdGlhdG9yX3Jlc3BvbnNlX3RpbWVvdXQsCiAJCQkiJWRcbiIsIGludCk7CitzYXNfZW5kX2Rldl9zaW1wbGVfYXR0cih0bHJfc3VwcG9ydGVkLCB0bHJfc3VwcG9ydGVkLAorCQkJIiVkXG4iLCBpbnQpOworc2FzX2VuZF9kZXZfc2ltcGxlX2F0dHIodGxyX2VuYWJsZWQsIHRscl9lbmFibGVkLAorCQkJIiVkXG4iLCBpbnQpOwogCiBzdGF0aWMgREVDTEFSRV9UUkFOU1BPUlRfQ0xBU1Moc2FzX2V4cGFuZGVyX2NsYXNzLAogCQkJICAgICAgICJzYXNfZXhwYW5kZXIiLCBOVUxMLCBOVUxMLCBOVUxMKTsKQEAgLTE3MzMsNiArMTgyMiw4IEBACiAJU0VUVVBfRU5EX0RFVl9BVFRSSUJVVEUoZW5kX2Rldl9yZWFkeV9sZWRfbWVhbmluZyk7CiAJU0VUVVBfRU5EX0RFVl9BVFRSSUJVVEUoZW5kX2Rldl9JX1RfbmV4dXNfbG9zc190aW1lb3V0KTsKIAlTRVRVUF9FTkRfREVWX0FUVFJJQlVURShlbmRfZGV2X2luaXRpYXRvcl9yZXNwb25zZV90aW1lb3V0KTsKKwlTRVRVUF9FTkRfREVWX0FUVFJJQlVURShlbmRfZGV2X3Rscl9zdXBwb3J0ZWQpOworCVNFVFVQX0VORF9ERVZfQVRUUklCVVRFKGVuZF9kZXZfdGxyX2VuYWJsZWQpOwogCWktPmVuZF9kZXZfYXR0cnNbY291bnRdID0gTlVMTDsKIAogCWNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggMjU1ZGE1My4uMWRkNGQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTExOTYsMTkgKzExOTYsMTAgQEAKIAkJU0NwbnQtPnJlc3VsdCA9IDA7CiAJCW1lbXNldChTQ3BudC0+c2Vuc2VfYnVmZmVyLCAwLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCQlicmVhazsKLQljYXNlIEFCT1JURURfQ09NTUFORDoKLQkJaWYgKHNzaGRyLmFzYyA9PSAweDEwKSB7IC8qIERJRjogRGlzayBkZXRlY3RlZCBjb3JydXB0aW9uICovCi0JCQlzY3NpX3ByaW50X3Jlc3VsdChTQ3BudCk7Ci0JCQlzY3NpX3ByaW50X3NlbnNlKCJzZCIsIFNDcG50KTsKKwljYXNlIEFCT1JURURfQ09NTUFORDogLyogRElGOiBUYXJnZXQgZGV0ZWN0ZWQgY29ycnVwdGlvbiAqLworCWNhc2UgSUxMRUdBTF9SRVFVRVNUOiAvKiBESVg6IEhvc3QgZGV0ZWN0ZWQgY29ycnVwdGlvbiAqLworCQlpZiAoc3NoZHIuYXNjID09IDB4MTApCiAJCQlnb29kX2J5dGVzID0gc2RfY29tcGxldGVkX2J5dGVzKFNDcG50KTsKLQkJfQotCQlicmVhazsKLQljYXNlIElMTEVHQUxfUkVRVUVTVDoKLQkJaWYgKHNzaGRyLmFzYyA9PSAweDEwKSB7IC8qIERJWDogSEJBIGRldGVjdGVkIGNvcnJ1cHRpb24gKi8KLQkJCXNjc2lfcHJpbnRfcmVzdWx0KFNDcG50KTsKLQkJCXNjc2lfcHJpbnRfc2Vuc2UoInNkIiwgU0NwbnQpOwotCQkJZ29vZF9ieXRlcyA9IHNkX2NvbXBsZXRlZF9ieXRlcyhTQ3BudCk7Ci0JCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xMjE4LDggKzEyMDksMTkgQEAKIAkJc2RfZGlmX2NvbXBsZXRlKFNDcG50LCBnb29kX2J5dGVzKTsKIAogCWlmIChzY3NpX2hvc3RfZGlmX2NhcGFibGUoc2RrcC0+ZGV2aWNlLT5ob3N0LCBzZGtwLT5wcm90ZWN0aW9uX3R5cGUpCi0JICAgID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmIFNDcG50LT5jbW5kICE9IFNDcG50LT5yZXF1ZXN0LT5jbWQpCisJICAgID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmIFNDcG50LT5jbW5kICE9IFNDcG50LT5yZXF1ZXN0LT5jbWQpIHsKKworCQkvKiBXZSBoYXZlIHRvIHByaW50IGEgZmFpbGVkIGNvbW1hbmQgaGVyZSBhcyB0aGUKKwkJICogZXh0ZW5kZWQgQ0RCIGdldHMgZnJlZWQgYmVmb3JlIHNjc2lfaW9fY29tcGxldGlvbigpCisJCSAqIGlzIGNhbGxlZC4KKwkJICovCisJCWlmIChyZXN1bHQpCisJCQlzY3NpX3ByaW50X2NvbW1hbmQoU0NwbnQpOworCiAJCW1lbXBvb2xfZnJlZShTQ3BudC0+Y21uZCwgc2RfY2RiX3Bvb2wpOworCQlTQ3BudC0+Y21uZCA9IE5VTEw7CisJCVNDcG50LT5jbWRfbGVuID0gMDsKKwl9CiAKIAlyZXR1cm4gZ29vZF9ieXRlczsKIH0KQEAgLTE5NDYsMTMgKzE5NDgsMTMgQEAKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHNka3AtPmRpc2stPnF1ZXVlOwogCXVuc2lnbmVkIGludCBzZWN0b3Jfc3ogPSBzZGtwLT5kZXZpY2UtPnNlY3Rvcl9zaXplOwotCWNoYXIgKmJ1ZmZlcjsKKwljb25zdCBpbnQgdnBkX2xlbiA9IDMyOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IGttYWxsb2ModnBkX2xlbiwgR0ZQX0tFUk5FTCk7CiAKLQkvKiBCbG9jayBMaW1pdHMgVlBEICovCi0JYnVmZmVyID0gc2NzaV9nZXRfdnBkX3BhZ2Uoc2RrcC0+ZGV2aWNlLCAweGIwKTsKLQotCWlmIChidWZmZXIgPT0gTlVMTCkKLQkJcmV0dXJuOworCWlmICghYnVmZmVyIHx8CisJICAgIC8qIEJsb2NrIExpbWl0cyBWUEQgKi8KKwkgICAgc2NzaV9nZXRfdnBkX3BhZ2Uoc2RrcC0+ZGV2aWNlLCAweGIwLCBidWZmZXIsIHZwZF9sZW4pKQorCQlnb3RvIG91dDsKIAogCWJsa19xdWV1ZV9pb19taW4oc2RrcC0+ZGlzay0+cXVldWUsCiAJCQkgZ2V0X3VuYWxpZ25lZF9iZTE2KCZidWZmZXJbNl0pICogc2VjdG9yX3N6KTsKQEAgLTE5ODQsNiArMTk4Niw3IEBACiAJCQkJZ2V0X3VuYWxpZ25lZF9iZTMyKCZidWZmZXJbMzJdKSAmIH4oMSA8PCAzMSk7CiAJfQogCisgb3V0OgogCWtmcmVlKGJ1ZmZlcik7CiB9CiAKQEAgLTE5OTMsMjAgKzE5OTYsMjMgQEAKICAqLwogc3RhdGljIHZvaWQgc2RfcmVhZF9ibG9ja19jaGFyYWN0ZXJpc3RpY3Moc3RydWN0IHNjc2lfZGlzayAqc2RrcCkKIHsKLQljaGFyICpidWZmZXI7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCXUxNiByb3Q7CisJY29uc3QgaW50IHZwZF9sZW4gPSAzMjsKIAotCS8qIEJsb2NrIERldmljZSBDaGFyYWN0ZXJpc3RpY3MgVlBEICovCi0JYnVmZmVyID0gc2NzaV9nZXRfdnBkX3BhZ2Uoc2RrcC0+ZGV2aWNlLCAweGIxKTsKKwlidWZmZXIgPSBrbWFsbG9jKHZwZF9sZW4sIEdGUF9LRVJORUwpOwogCi0JaWYgKGJ1ZmZlciA9PSBOVUxMKQotCQlyZXR1cm47CisJaWYgKCFidWZmZXIgfHwKKwkgICAgLyogQmxvY2sgRGV2aWNlIENoYXJhY3RlcmlzdGljcyBWUEQgKi8KKwkgICAgc2NzaV9nZXRfdnBkX3BhZ2Uoc2RrcC0+ZGV2aWNlLCAweGIxLCBidWZmZXIsIHZwZF9sZW4pKQorCQlnb3RvIG91dDsKIAogCXJvdCA9IGdldF91bmFsaWduZWRfYmUxNigmYnVmZmVyWzRdKTsKIAogCWlmIChyb3QgPT0gMSkKIAkJcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19OT05ST1QsIHNka3AtPmRpc2stPnF1ZXVlKTsKIAorIG91dDoKIAlrZnJlZShidWZmZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2VzLmMgYi9kcml2ZXJzL3Njc2kvc2VzLmMKaW5kZXggNTViMDM0Yi4uMWQ3YTg3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Nlcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZXMuYwpAQCAtNDQ4LDEzICs0NDgsMTcgQEAKIAkJLmFkZHIgPSAwLAogCX07CiAKLQlidWYgPSBzY3NpX2dldF92cGRfcGFnZShzZGV2LCAweDgzKTsKLQlpZiAoIWJ1ZikKLQkJcmV0dXJuOworCWJ1ZiA9IGttYWxsb2MoSU5JVF9BTExPQ19TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZiB8fCBzY3NpX2dldF92cGRfcGFnZShzZGV2LCAweDgzLCBidWYsIElOSVRfQUxMT0NfU0laRSkpCisJCWdvdG8gZnJlZTsKIAogCXNlc19lbmNsb3N1cmVfZGF0YV9wcm9jZXNzKGVkZXYsIHRvX3Njc2lfZGV2aWNlKGVkZXYtPmVkZXYucGFyZW50KSwgMCk7CiAKIAl2cGRfbGVuID0gKChidWZbMl0gPDwgOCkgfCBidWZbM10pICsgNDsKKwlrZnJlZShidWYpOworCWJ1ZiA9IGttYWxsb2ModnBkX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYgfHxzY3NpX2dldF92cGRfcGFnZShzZGV2LCAweDgzLCBidWYsIHZwZF9sZW4pKQorCQlnb3RvIGZyZWU7CiAKIAlkZXNjID0gYnVmICsgNDsKIAl3aGlsZSAoZGVzYyA8IGJ1ZiArIHZwZF9sZW4pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggMDQwZjc1MS4uYzk5NmQ5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTI4Nyw4ICsyODcsNyBAQAogCWlmIChsaXN0X2VtcHR5KCZzZHAtPnNmZHMpKSB7CS8qIG5vIGV4aXN0aW5nIG9wZW5zIG9uIHRoaXMgZGV2aWNlICovCiAJCXNkcC0+c2dkZWJ1ZyA9IDA7CiAJCXEgPSBzZHAtPmRldmljZS0+cmVxdWVzdF9xdWV1ZTsKLQkJc2RwLT5zZ190YWJsZXNpemUgPSBtaW4ocXVldWVfbWF4X2h3X3NlZ21lbnRzKHEpLAotCQkJCQlxdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxKSk7CisJCXNkcC0+c2dfdGFibGVzaXplID0gcXVldWVfbWF4X3NlZ21lbnRzKHEpOwogCX0KIAlpZiAoKHNmcCA9IHNnX2FkZF9zZnAoc2RwLCBkZXYpKSkKIAkJZmlscC0+cHJpdmF0ZV9kYXRhID0gc2ZwOwpAQCAtMTM3Niw4ICsxMzc1LDcgQEAKIAlzZHAtPmRldmljZSA9IHNjc2lkcDsKIAlJTklUX0xJU1RfSEVBRCgmc2RwLT5zZmRzKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZHAtPm9fZXhjbF93YWl0KTsKLQlzZHAtPnNnX3RhYmxlc2l6ZSA9IG1pbihxdWV1ZV9tYXhfaHdfc2VnbWVudHMocSksCi0JCQkJcXVldWVfbWF4X3BoeXNfc2VnbWVudHMocSkpOworCXNkcC0+c2dfdGFibGVzaXplID0gcXVldWVfbWF4X3NlZ21lbnRzKHEpOwogCXNkcC0+aW5kZXggPSBrOwogCWtyZWZfaW5pdCgmc2RwLT5kX3JlZik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdC5jIGIvZHJpdmVycy9zY3NpL3N0LmMKaW5kZXggZDA0ZWE5YS4uZjY3ZDFhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL3N0LmMKQEAgLTM5ODMsOCArMzk4Myw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWkgPSBtaW4ocXVldWVfbWF4X2h3X3NlZ21lbnRzKFNEcC0+cmVxdWVzdF9xdWV1ZSksCi0JCXF1ZXVlX21heF9waHlzX3NlZ21lbnRzKFNEcC0+cmVxdWVzdF9xdWV1ZSkpOworCWkgPSBxdWV1ZV9tYXhfc2VnbWVudHMoU0RwLT5yZXF1ZXN0X3F1ZXVlKTsKIAlpZiAoc3RfbWF4X3NnX3NlZ3MgPCBpKQogCQlpID0gc3RfbWF4X3NnX3NlZ3M7CiAJYnVmZmVyID0gbmV3X3RhcGVfYnVmZmVyKChTRHAtPmhvc3QpLT51bmNoZWNrZWRfaXNhX2RtYSwgaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jIGIvZHJpdmVycy9zY3NpL3UxNC0zNGYuYwppbmRleCA1NDAyM2Q0MS4uMjZlOGUwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3UxNC0zNGYuYworKysgYi9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jCkBAIC0xMDcwLDcgKzEwNzAsNyBAQAogICAgY2hhciAqY3VyID0gc3RyOwogICAgaW50IGkgPSAxOwogCi0gICB3aGlsZSAoY3VyICYmIGlzZGlnaXQoKmN1cikgJiYgaSA8PSBNQVhfSU5UX1BBUkFNKSB7CisgICB3aGlsZSAoY3VyICYmIGlzZGlnaXQoKmN1cikgJiYgaSA8IE1BWF9JTlRfUEFSQU0pIHsKICAgICAgIGludHNbaSsrXSA9IHNpbXBsZV9zdHJ0b3VsKGN1ciwgTlVMTCwgMCk7CiAKICAgICAgIGlmICgoY3VyID0gc3RyY2hyKGN1ciwgJywnKSkgIT0gTlVMTCkgY3VyKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdm13X3B2c2NzaS5jIGIvZHJpdmVycy9zY3NpL3Ztd19wdnNjc2kuYwppbmRleCBkMjYwNGM4Li5lNGFjNTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdm13X3B2c2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS92bXdfcHZzY3NpLmMKQEAgLTEwNjksNyArMTA2OSw4IEBACiAJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpY3R4LT5zZ2wsIGdldF9vcmRlcihTR0xfU0laRSkpOwogfQogCi1zdGF0aWMgaW50IHB2c2NzaV9zZXR1cF9tc2l4KGNvbnN0IHN0cnVjdCBwdnNjc2lfYWRhcHRlciAqYWRhcHRlciwgaW50ICppcnEpCitzdGF0aWMgaW50IHB2c2NzaV9zZXR1cF9tc2l4KGNvbnN0IHN0cnVjdCBwdnNjc2lfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgdW5zaWduZWQgaW50ICppcnEpCiB7CiAJc3RydWN0IG1zaXhfZW50cnkgZW50cnkgPSB7IDAsIFBWU0NTSV9WRUNUT1JfQ09NUExFVElPTiB9OwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKaW5kZXggZTliMTVjMy4uYTgxZmY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwpAQCAtMTIxNywxMiArMTIxNyw2IEBACiAJfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwCi0JLyogaWYgYWNjZXNzIG1ldGhvZCBpcyBBVSwgaXQgaXMgYSAxNjU1MCB3aXRoIGEgcXVpcmsgKi8KLQlpZiAodXAtPnBvcnQudHlwZSA9PSBQT1JUXzE2NTUwQSAmJiB1cC0+cG9ydC5pb3R5cGUgPT0gVVBJT19BVSkKLQkJdXAtPmJ1Z3MgfD0gVUFSVF9CVUdfTk9NU1I7Ci0jZW5kaWYKLQogCXNlcmlhbF9vdXRwKHVwLCBVQVJUX0xDUiwgc2F2ZV9sY3IpOwogCiAJaWYgKHVwLT5jYXBhYmlsaXRpZXMgIT0gdWFydF9jb25maWdbdXAtPnBvcnQudHlwZV0uZmxhZ3MpIHsKQEAgLTI0MjgsNyArMjQyMiw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHNlcmlhbDgyNTBfcG9ydF9zaXplKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqcHQpCiB7CiAJaWYgKHB0LT5wb3J0LmlvdHlwZSA9PSBVUElPX0FVKQotCQlyZXR1cm4gMHgxMDAwMDA7CisJCXJldHVybiAweDEwMDA7CiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUAogCWlmIChpc19vbWFwX3BvcnQocHQpKQogCQlyZXR1cm4gMHgxNiA8PCBwdC0+cG9ydC5yZWdzaGlmdDsKQEAgLTI1ODUsNiArMjU3OSwxMyBAQAogCiAJaWYgKGZsYWdzICYgVUFSVF9DT05GSUdfVFlQRSkKIAkJYXV0b2NvbmZpZyh1cCwgcHJvYmVmbGFncyk7CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwCisJLyogaWYgYWNjZXNzIG1ldGhvZCBpcyBBVSwgaXQgaXMgYSAxNjU1MCB3aXRoIGEgcXVpcmsgKi8KKwlpZiAodXAtPnBvcnQudHlwZSA9PSBQT1JUXzE2NTUwQSAmJiB1cC0+cG9ydC5pb3R5cGUgPT0gVVBJT19BVSkKKwkJdXAtPmJ1Z3MgfD0gVUFSVF9CVUdfTk9NU1I7CisjZW5kaWYKKwogCWlmICh1cC0+cG9ydC50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiBmbGFncyAmIFVBUlRfQ09ORklHX0lSUSkKIAkJYXV0b2NvbmZpZ19pcnEodXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwppbmRleCA5ZmY0N2RiMC4uODg4YTBjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCkBAIC0xMDg2LDEyICsxMDg2LDEyIEBACiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBTRVJJQUxfUE1BQ1pJTE9HCi0JdHJpc3RhdGUgIlBvd2VyTWFjIHo4NWMzMCBFU0NDIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQUENfT0YgJiYgUFBDX1BNQUMKKwl0cmlzdGF0ZSAiTWFjIG9yIFBvd2VyTWFjIHo4NWMzMCBFU0NDIHN1cHBvcnQiCisJZGVwZW5kcyBvbiAoTTY4SyAmJiBNQUMpIHx8IChQUENfT0YgJiYgUFBDX1BNQUMpCiAJc2VsZWN0IFNFUklBTF9DT1JFCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFppbG9nIHo4NUMzMCBzZXJpYWwgcG9ydHMgZm91bmQgb24KLQkgIFBvd2VyTWFjIG1hY2hpbmVzLgorCSAgKFBvd2VyKU1hYyBtYWNoaW5lcy4KIAkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB0aGVzZSBzZXJpYWwgcG9ydHMuCiAKIGNvbmZpZyBTRVJJQUxfUE1BQ1pJTE9HX1RUWVMKQEAgLTExMTYsMTYgKzExMTYsMTYgQEAKIAkgIHVuYWJsZSB0byB1c2UgdGhlIDgyNTAgbW9kdWxlIGZvciBQQ01DSUEgb3Igb3RoZXIgMTZDNTUwLXN0eWxlCiAJICBVQVJUcy4KIAotCSAgU2F5IE4gdW5sZXNzIHlvdSBuZWVkIHRoZSB6ODVjMzAgcG9ydHMgb24geW91ciBwb3dlcm1hYworCSAgU2F5IE4gdW5sZXNzIHlvdSBuZWVkIHRoZSB6ODVjMzAgcG9ydHMgb24geW91ciAoUG93ZXIpTWFjCiAJICB0byBhcHBlYXIgYXMgL2Rldi90dHlTbi4KIAogY29uZmlnIFNFUklBTF9QTUFDWklMT0dfQ09OU09MRQotCWJvb2wgIkNvbnNvbGUgb24gUG93ZXJNYWMgejg1YzMwIHNlcmlhbCBwb3J0IgorCWJvb2wgIkNvbnNvbGUgb24gTWFjIG9yIFBvd2VyTWFjIHo4NWMzMCBzZXJpYWwgcG9ydCIKIAlkZXBlbmRzIG9uIFNFUklBTF9QTUFDWklMT0c9eQogCXNlbGVjdCBTRVJJQUxfQ09SRV9DT05TT0xFCiAJaGVscAogCSAgSWYgeW91IHdvdWxkIGxpa2UgdG8gYmUgYWJsZSB0byB1c2UgdGhlIHo4NWMzMCBzZXJpYWwgcG9ydAotCSAgb24geW91ciBQb3dlck1hYyBhcyB0aGUgY29uc29sZSwgeW91IGNhbiBkbyBzbyBieSBhbnN3ZXJpbmcKKwkgIG9uIHlvdXIgKFBvd2VyKU1hYyBhcyB0aGUgY29uc29sZSwgeW91IGNhbiBkbyBzbyBieSBhbnN3ZXJpbmcKIAkgIFkgdG8gdGhpcyBvcHRpb24uCiAKIGNvbmZpZyBTRVJJQUxfTEg3QTQwWApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCmluZGV4IGVmN2FkYzguLmNlNmMzNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKQEAgLTcxLDYgKzcxLDcgQEAKIAl1bnNpZ25lZCBpbnQJCWltOwkvKiBpbnRlcnJ1cHQgbWFzayAqLwogCXVuc2lnbmVkIGludAkJb2xkX3N0YXR1czsKIAl1bnNpZ25lZCBpbnQJCWlmbHM7CS8qIHZlbmRvci1zcGVjaWZpYyAqLworCWJvb2wJCQlhdXRvcnRzOwogfTsKIAogLyogVGhlcmUgaXMgYnkgbm93IGF0IGxlYXN0IG9uZSB2ZW5kb3Igd2l0aCBkaWZmZXJpbmcgZGV0YWlscywgc28gaGFuZGxlIGl0ICovCkBAIC0zMDgsNiArMzA5LDExIEBACiAJVElPQ01CSVQoVElPQ01fT1VUMSwgVUFSVDAxMV9DUl9PVVQxKTsKIAlUSU9DTUJJVChUSU9DTV9PVVQyLCBVQVJUMDExX0NSX09VVDIpOwogCVRJT0NNQklUKFRJT0NNX0xPT1AsIFVBUlQwMTFfQ1JfTEJFKTsKKworCWlmICh1YXAtPmF1dG9ydHMpIHsKKwkJLyogV2UgbmVlZCB0byBkaXNhYmxlIGF1dG8tUlRTIGlmIHdlIHdhbnQgdG8gdHVybiBSVFMgb2ZmICovCisJCVRJT0NNQklUKFRJT0NNX1JUUywgVUFSVDAxMV9DUl9SVFNFTik7CisJfQogI3VuZGVmIFRJT0NNQklUCiAKIAl3cml0ZXcoY3IsIHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxMV9DUik7CkBAIC00MzcsNiArNDQzLDcgQEAKIAkvKgogCSAqIGRpc2FibGUgdGhlIHBvcnQKIAkgKi8KKwl1YXAtPmF1dG9ydHMgPSBmYWxzZTsKIAl3cml0ZXcoVUFSVDAxeF9DUl9VQVJURU4gfCBVQVJUMDExX0NSX1RYRSwgdWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDExX0NSKTsKIAogCS8qCkBAIC00NTYsNiArNDYzLDcgQEAKIHBsMDExX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKIAkJICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKKwlzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCA9IChzdHJ1Y3QgdWFydF9hbWJhX3BvcnQgKilwb3J0OwogCXVuc2lnbmVkIGludCBsY3JfaCwgb2xkX2NyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGJhdWQsIHF1b3Q7CkBAIC01MzIsNiArNTQwLDE3IEBACiAJb2xkX2NyID0gcmVhZHcocG9ydC0+bWVtYmFzZSArIFVBUlQwMTFfQ1IpOwogCXdyaXRldygwLCBwb3J0LT5tZW1iYXNlICsgVUFSVDAxMV9DUik7CiAKKwlpZiAodGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHsKKwkJaWYgKG9sZF9jciAmIFVBUlQwMTFfQ1JfUlRTKQorCQkJb2xkX2NyIHw9IFVBUlQwMTFfQ1JfUlRTRU47CisKKwkJb2xkX2NyIHw9IFVBUlQwMTFfQ1JfQ1RTRU47CisJCXVhcC0+YXV0b3J0cyA9IHRydWU7CisJfSBlbHNlIHsKKwkJb2xkX2NyICY9IH4oVUFSVDAxMV9DUl9DVFNFTiB8IFVBUlQwMTFfQ1JfUlRTRU4pOworCQl1YXAtPmF1dG9ydHMgPSBmYWxzZTsKKwl9CisKIAkvKiBTZXQgYmF1ZCByYXRlICovCiAJd3JpdGV3KHF1b3QgJiAweDNmLCBwb3J0LT5tZW1iYXNlICsgVUFSVDAxMV9GQlJEKTsKIAl3cml0ZXcocXVvdCA+PiA2LCBwb3J0LT5tZW1iYXNlICsgVUFSVDAxMV9JQlJEKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKaW5kZXggN2NlOWU5Zi4uMzExOWZkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKQEAgLTc0LDYgKzc0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPGFzbS9tcGM1Mnh4Lmg+CiAjaW5jbHVkZSA8YXNtL21wYzUyeHhfcHNjLmg+CkBAIC0xMTMsNiArMTE0LDcgQEAKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgaW50ZXJydXB0aW9uIGhhbmRsaW5nIHJvdXRpbmUgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBtcGM1Mnh4X3VhcnRfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitzdGF0aWMgaXJxcmV0dXJuX3QgbXBjNXh4eF91YXJ0X3Byb2Nlc3NfaW50KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpOwogCiAKIC8qIFNpbXBsZSBtYWNybyB0byB0ZXN0IGlmIGEgcG9ydCBpcyBjb25zb2xlIG9yIG5vdC4gVGhpcyBvbmUgaXMgdGFrZW4KQEAgLTE0NSw2ICsxNDcsMTEgQEAKIAl2b2lkCQkoKmN3X2Rpc2FibGVfaW50cykoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCk7CiAJdm9pZAkJKCpjd19yZXN0b3JlX2ludHMpKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpOwogCXVuc2lnbmVkIGxvbmcJKCpnZXR1YXJ0Y2xrKSh2b2lkICpwKTsKKwlpbnQJCSgqY2xvY2spKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBlbmFibGUpOworCWludAkJKCpmaWZvY19pbml0KSh2b2lkKTsKKwl2b2lkCQkoKmZpZm9jX3VuaW5pdCkodm9pZCk7CisJdm9pZAkJKCpnZXRfaXJxKShzdHJ1Y3QgdWFydF9wb3J0ICosIHN0cnVjdCBkZXZpY2Vfbm9kZSAqKTsKKwlpcnFyZXR1cm5fdAkoKmhhbmRsZV9pcnEpKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpOwogfTsKIAogI2lmZGVmIENPTkZJR19QUENfTVBDNTJ4eApAQCAtMjU2LDYgKzI2MywxOCBAQAogCXJldHVybiBtcGM1eHh4X2dldF9idXNfZnJlcXVlbmN5KHApIC8gMjsKIH0KIAorc3RhdGljIHZvaWQgbXBjNTJ4eF9wc2NfZ2V0X2lycShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXBvcnQtPmlycWZsYWdzID0gSVJRRl9ESVNBQkxFRDsKKwlwb3J0LT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7Cit9CisKKy8qIDUyeHggc3BlY2lmaWMgaW50ZXJydXB0IGhhbmRsZXIuIFRoZSBjYWxsZXIgaG9sZHMgdGhlIHBvcnQgbG9jayAqLworc3RhdGljIGlycXJldHVybl90IG1wYzUyeHhfcHNjX2hhbmRsZV9pcnEoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gbXBjNXh4eF91YXJ0X3Byb2Nlc3NfaW50KHBvcnQpOworfQorCiBzdGF0aWMgc3RydWN0IHBzY19vcHMgbXBjNTJ4eF9wc2Nfb3BzID0gewogCS5maWZvX2luaXQgPSBtcGM1Mnh4X3BzY19maWZvX2luaXQsCiAJLnJhd19yeF9yZHkgPSBtcGM1Mnh4X3BzY19yYXdfcnhfcmR5LApAQCAtMjczLDE0ICsyOTIsMzIgQEAKIAkuY3dfZGlzYWJsZV9pbnRzID0gbXBjNTJ4eF9wc2NfY3dfZGlzYWJsZV9pbnRzLAogCS5jd19yZXN0b3JlX2ludHMgPSBtcGM1Mnh4X3BzY19jd19yZXN0b3JlX2ludHMsCiAJLmdldHVhcnRjbGsgPSBtcGM1Mnh4X2dldHVhcnRjbGssCisJLmdldF9pcnEgPSBtcGM1Mnh4X3BzY19nZXRfaXJxLAorCS5oYW5kbGVfaXJxID0gbXBjNTJ4eF9wc2NfaGFuZGxlX2lycSwKIH07CiAKICNlbmRpZiAvKiBDT05GSUdfTVBDNTJ4eCAqLwogCiAjaWZkZWYgQ09ORklHX1BQQ19NUEM1MTJ4CiAjZGVmaW5lIEZJRk9fNTEyeChwb3J0KSAoKHN0cnVjdCBtcGM1MTJ4X3BzY19maWZvIF9faW9tZW0gKikoUFNDKHBvcnQpKzEpKQorCisvKiBQU0MgRklGTyBDb250cm9sbGVyIGZvciBtcGM1MTJ4ICovCitzdHJ1Y3QgcHNjX2ZpZm9jIHsKKwl1MzIgZmlmb2NfY21kOworCXUzMiBmaWZvY19pbnQ7CisJdTMyIGZpZm9jX2RtYTsKKwl1MzIgZmlmb2NfYXhlOworCXUzMiBmaWZvY19kZWJ1ZzsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHNjX2ZpZm9jIF9faW9tZW0gKnBzY19maWZvYzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcHNjX2ZpZm9jX2lycTsKKwogc3RhdGljIHZvaWQgbXBjNTEyeF9wc2NfZmlmb19pbml0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CisJLyogLzMyIHByZXNjYWxlciAqLworCW91dF9iZTE2KCZQU0MocG9ydCktPm1wYzUyeHhfcHNjX2Nsb2NrX3NlbGVjdCwgMHhkZDAwKTsKKwogCW91dF9iZTMyKCZGSUZPXzUxMngocG9ydCktPnR4Y21kLCBNUEM1MTJ4X1BTQ19GSUZPX1JFU0VUX1NMSUNFKTsKIAlvdXRfYmUzMigmRklGT181MTJ4KHBvcnQpLT50eGNtZCwgTVBDNTEyeF9QU0NfRklGT19FTkFCTEVfU0xJQ0UpOwogCW91dF9iZTMyKCZGSUZPXzUxMngocG9ydCktPnR4YWxhcm0sIDEpOwpAQCAtMzkzLDYgKzQzMCwxNjAgQEAKIAlyZXR1cm4gbXBjNXh4eF9nZXRfYnVzX2ZyZXF1ZW5jeShwKTsKIH0KIAorI2RlZmluZSBERUZBVUxUX0ZJRk9fU0laRSAxNgorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBnZXRfZmlmb19zaXplKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCSBjaGFyICpmaWZvX25hbWUpCit7CisJY29uc3QgdW5zaWduZWQgaW50ICpmcDsKKworCWZwID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCBmaWZvX25hbWUsIE5VTEwpOworCWlmIChmcCkKKwkJcmV0dXJuICpmcDsKKworCXByX3dhcm5pbmcoIm5vICVzIHByb3BlcnR5IGluICVzIG5vZGUsIGRlZmF1bHRpbmcgdG8gJWRcbiIsCisJCSAgIGZpZm9fbmFtZSwgbnAtPmZ1bGxfbmFtZSwgREVGQVVMVF9GSUZPX1NJWkUpOworCisJcmV0dXJuIERFRkFVTFRfRklGT19TSVpFOworfQorCisjZGVmaW5lIEZJRk9DKF9iYXNlKSAoKHN0cnVjdCBtcGM1MTJ4X3BzY19maWZvIF9faW9tZW0gKikgXAorCQkgICAgKCh1MzIpKF9iYXNlKSArIHNpemVvZihzdHJ1Y3QgbXBjNTJ4eF9wc2MpKSkKKworLyogSW5pdCBQU0MgRklGTyBDb250cm9sbGVyICovCitzdGF0aWMgaW50IF9faW5pdCBtcGM1MTJ4X3BzY19maWZvY19pbml0KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwl2b2lkIF9faW9tZW0gKnBzYzsKKwl1bnNpZ25lZCBpbnQgdHhfZmlmb19zaXplOworCXVuc2lnbmVkIGludCByeF9maWZvX3NpemU7CisJaW50IGZpZm9iYXNlID0gMDsgLyogY3VycmVudCBmaWZvIGFkZHJlc3MgaW4gMzIgYml0IHdvcmRzICovCisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsCisJCQkJICAgICAiZnNsLG1wYzUxMjEtcHNjLWZpZm8iKTsKKwlpZiAoIW5wKSB7CisJCXByX2VycigiJXM6IENhbid0IGZpbmQgRklGT0Mgbm9kZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwc2NfZmlmb2MgPSBvZl9pb21hcChucCwgMCk7CisJaWYgKCFwc2NfZmlmb2MpIHsKKwkJcHJfZXJyKCIlczogQ2FuJ3QgbWFwIEZJRk9DXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBzY19maWZvY19pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJb2Zfbm9kZV9wdXQobnApOworCWlmIChwc2NfZmlmb2NfaXJxID09IE5PX0lSUSkgeworCQlwcl9lcnIoIiVzOiBDYW4ndCBnZXQgRklGT0MgaXJxXG4iLCBfX2Z1bmNfXyk7CisJCWlvdW5tYXAocHNjX2ZpZm9jKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAiZnNsLG1wYzUxMjEtcHNjLXVhcnQiKSB7CisJCXR4X2ZpZm9fc2l6ZSA9IGdldF9maWZvX3NpemUobnAsICJmc2wsdHgtZmlmby1zaXplIik7CisJCXJ4X2ZpZm9fc2l6ZSA9IGdldF9maWZvX3NpemUobnAsICJmc2wscngtZmlmby1zaXplIik7CisKKwkJLyogc2l6ZSBpbiByZWdpc3RlciBpcyBpbiA0IGJ5dGUgdW5pdHMgKi8KKwkJdHhfZmlmb19zaXplIC89IDQ7CisJCXJ4X2ZpZm9fc2l6ZSAvPSA0OworCQlpZiAoIXR4X2ZpZm9fc2l6ZSkKKwkJCXR4X2ZpZm9fc2l6ZSA9IDE7CisJCWlmICghcnhfZmlmb19zaXplKQorCQkJcnhfZmlmb19zaXplID0gMTsKKworCQlwc2MgPSBvZl9pb21hcChucCwgMCk7CisJCWlmICghcHNjKSB7CisJCQlwcl9lcnIoIiVzOiBDYW4ndCBtYXAgJXMgZGV2aWNlXG4iLAorCQkJCV9fZnVuY19fLCBucC0+ZnVsbF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogRklGTyBzcGFjZSBpcyA0S2lCLCBjaGVjayBpZiByZXF1ZXN0ZWQgc2l6ZSBpcyBhdmFpbGFibGUgKi8KKwkJaWYgKChmaWZvYmFzZSArIHR4X2ZpZm9fc2l6ZSArIHJ4X2ZpZm9fc2l6ZSkgPiAweDEwMDApIHsKKwkJCXByX2VycigiJXM6IG5vIGZpZm8gc3BhY2UgYXZhaWxhYmxlIGZvciAlc1xuIiwKKwkJCQlfX2Z1bmNfXywgbnAtPmZ1bGxfbmFtZSk7CisJCQlpb3VubWFwKHBzYyk7CisJCQkvKgorCQkJICogY2hhbmNlcyBhcmUgdGhhdCBhbm90aGVyIGRldmljZSByZXF1ZXN0cyBsZXNzCisJCQkgKiBmaWZvIHNwYWNlLCBzbyB3ZSBjb250aW51ZS4KKwkJCSAqLworCQkJY29udGludWU7CisJCX0KKwkJLyogc2V0IHR4IGFuZCByeCBmaWZvIHNpemUgcmVnaXN0ZXJzICovCisJCW91dF9iZTMyKCZGSUZPQyhwc2MpLT50eHN6LCAoZmlmb2Jhc2UgPDwgMTYpIHwgdHhfZmlmb19zaXplKTsKKwkJZmlmb2Jhc2UgKz0gdHhfZmlmb19zaXplOworCQlvdXRfYmUzMigmRklGT0MocHNjKS0+cnhzeiwgKGZpZm9iYXNlIDw8IDE2KSB8IHJ4X2ZpZm9fc2l6ZSk7CisJCWZpZm9iYXNlICs9IHJ4X2ZpZm9fc2l6ZTsKKworCQkvKiByZXNldCBhbmQgZW5hYmxlIHRoZSBzbGljZXMgKi8KKwkJb3V0X2JlMzIoJkZJRk9DKHBzYyktPnR4Y21kLCAweDgwKTsKKwkJb3V0X2JlMzIoJkZJRk9DKHBzYyktPnR4Y21kLCAweDAxKTsKKwkJb3V0X2JlMzIoJkZJRk9DKHBzYyktPnJ4Y21kLCAweDgwKTsKKwkJb3V0X2JlMzIoJkZJRk9DKHBzYyktPnJ4Y21kLCAweDAxKTsKKworCQlpb3VubWFwKHBzYyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtcGM1MTJ4X3BzY19maWZvY191bmluaXQodm9pZCkKK3sKKwlpb3VubWFwKHBzY19maWZvYyk7Cit9CisKKy8qIDUxMnggc3BlY2lmaWMgaW50ZXJydXB0IGhhbmRsZXIuIFRoZSBjYWxsZXIgaG9sZHMgdGhlIHBvcnQgbG9jayAqLworc3RhdGljIGlycXJldHVybl90IG1wYzUxMnhfcHNjX2hhbmRsZV9pcnEoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGZpZm9jX2ludDsKKwlpbnQgcHNjX251bTsKKworCS8qIFJlYWQgcGVuZGluZyBQU0MgRklGT0MgaW50ZXJydXB0cyAqLworCWZpZm9jX2ludCA9IGluX2JlMzIoJnBzY19maWZvYy0+Zmlmb2NfaW50KTsKKworCS8qIENoZWNrIGlmIGl0IGlzIGFuIGludGVycnVwdCBmb3IgdGhpcyBwb3J0ICovCisJcHNjX251bSA9IChwb3J0LT5tYXBiYXNlICYgMHhmMDApID4+IDg7CisJaWYgKHRlc3RfYml0KHBzY19udW0sICZmaWZvY19pbnQpIHx8CisJICAgIHRlc3RfYml0KHBzY19udW0gKyAxNiwgJmZpZm9jX2ludCkpCisJCXJldHVybiBtcGM1eHh4X3VhcnRfcHJvY2Vzc19pbnQocG9ydCk7CisKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTEyeF9wc2NfY2xvY2soc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgY2xrICpwc2NfY2xrOworCWludCBwc2NfbnVtOworCWNoYXIgY2xrX25hbWVbMTBdOworCisJaWYgKHVhcnRfY29uc29sZShwb3J0KSkKKwkJcmV0dXJuIDA7CisKKwlwc2NfbnVtID0gKHBvcnQtPm1hcGJhc2UgJiAweGYwMCkgPj4gODsKKwlzbnByaW50ZihjbGtfbmFtZSwgc2l6ZW9mKGNsa19uYW1lKSwgInBzYyVkX2NsayIsIHBzY19udW0pOworCXBzY19jbGsgPSBjbGtfZ2V0KHBvcnQtPmRldiwgY2xrX25hbWUpOworCWlmIChJU19FUlIocHNjX2NsaykpIHsKKwkJZGV2X2Vycihwb3J0LT5kZXYsICJGYWlsZWQgdG8gZ2V0IFBTQyBjbG9jayBlbnRyeSFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXZfZGJnKHBvcnQtPmRldiwgIiVzICVzYWJsZVxuIiwgY2xrX25hbWUsIGVuYWJsZSA/ICJlbiIgOiAiZGlzIik7CisKKwlpZiAoZW5hYmxlKQorCQljbGtfZW5hYmxlKHBzY19jbGspOworCWVsc2UKKwkJY2xrX2Rpc2FibGUocHNjX2Nsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXBjNTEyeF9wc2NfZ2V0X2lycShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXBvcnQtPmlycWZsYWdzID0gSVJRRl9TSEFSRUQ7CisJcG9ydC0+aXJxID0gcHNjX2ZpZm9jX2lycTsKK30KKwogc3RhdGljIHN0cnVjdCBwc2Nfb3BzIG1wYzUxMnhfcHNjX29wcyA9IHsKIAkuZmlmb19pbml0ID0gbXBjNTEyeF9wc2NfZmlmb19pbml0LAogCS5yYXdfcnhfcmR5ID0gbXBjNTEyeF9wc2NfcmF3X3J4X3JkeSwKQEAgLTQxMCw2ICs2MDEsMTEgQEAKIAkuY3dfZGlzYWJsZV9pbnRzID0gbXBjNTEyeF9wc2NfY3dfZGlzYWJsZV9pbnRzLAogCS5jd19yZXN0b3JlX2ludHMgPSBtcGM1MTJ4X3BzY19jd19yZXN0b3JlX2ludHMsCiAJLmdldHVhcnRjbGsgPSBtcGM1MTJ4X2dldHVhcnRjbGssCisJLmNsb2NrID0gbXBjNTEyeF9wc2NfY2xvY2ssCisJLmZpZm9jX2luaXQgPSBtcGM1MTJ4X3BzY19maWZvY19pbml0LAorCS5maWZvY191bmluaXQgPSBtcGM1MTJ4X3BzY19maWZvY191bmluaXQsCisJLmdldF9pcnEgPSBtcGM1MTJ4X3BzY19nZXRfaXJxLAorCS5oYW5kbGVfaXJxID0gbXBjNTEyeF9wc2NfaGFuZGxlX2lycSwKIH07CiAjZW5kaWYKIApAQCAtNTE5LDEwICs3MTUsMTUgQEAKIAlzdHJ1Y3QgbXBjNTJ4eF9wc2MgX19pb21lbSAqcHNjID0gUFNDKHBvcnQpOwogCWludCByZXQ7CiAKKwlpZiAocHNjX29wcy0+Y2xvY2spIHsKKwkJcmV0ID0gcHNjX29wcy0+Y2xvY2socG9ydCwgMSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwogCS8qIFJlcXVlc3QgSVJRICovCiAJcmV0ID0gcmVxdWVzdF9pcnEocG9ydC0+aXJxLCBtcGM1Mnh4X3VhcnRfaW50LAotCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NLAotCQkibXBjNTJ4eF9wc2NfdWFydCIsIHBvcnQpOworCQkJICBwb3J0LT5pcnFmbGFncywgIm1wYzUyeHhfcHNjX3VhcnQiLCBwb3J0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC01NTMsNiArNzU0LDkgQEAKIAlwb3J0LT5yZWFkX3N0YXR1c19tYXNrID0gMDsKIAlvdXRfYmUxNigmcHNjLT5tcGM1Mnh4X3BzY19pbXIsIHBvcnQtPnJlYWRfc3RhdHVzX21hc2spOwogCisJaWYgKHBzY19vcHMtPmNsb2NrKQorCQlwc2Nfb3BzLT5jbG9jayhwb3J0LCAwKTsKKwogCS8qIFJlbGVhc2UgaW50ZXJydXB0ICovCiAJZnJlZV9pcnEocG9ydC0+aXJxLCBwb3J0KTsKIH0KQEAgLTg1MSwxNSArMTA1NSwxMiBAQAogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QKLW1wYzUyeHhfdWFydF9pbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorbXBjNXh4eF91YXJ0X3Byb2Nlc3NfaW50KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IGRldl9pZDsKIAl1bnNpZ25lZCBsb25nIHBhc3MgPSBJU1JfUEFTU19MSU1JVDsKIAl1bnNpZ25lZCBpbnQga2VlcGdvaW5nOwogCXU4IHN0YXR1czsKIAotCXNwaW5fbG9jaygmcG9ydC0+bG9jayk7Ci0KIAkvKiBXaGlsZSB3ZSBoYXZlIHN0dWZmIHRvIGRvLCB3ZSBjb250aW51ZSAqLwogCWRvIHsKIAkJLyogSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZyB0byBkbywgd2Ugc3RvcCAqLwpAQCAtODg2LDExICsxMDg3LDIzIEBACiAKIAl9IHdoaWxlIChrZWVwZ29pbmcpOwogCi0Jc3Bpbl91bmxvY2soJnBvcnQtPmxvY2spOwotCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgaXJxcmV0dXJuX3QKK21wYzUyeHhfdWFydF9pbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfaWQ7CisJaXJxcmV0dXJuX3QgcmV0OworCisJc3Bpbl9sb2NrKCZwb3J0LT5sb2NrKTsKKworCXJldCA9IHBzY19vcHMtPmhhbmRsZV9pcnEocG9ydCk7CisKKwlzcGluX3VubG9jaygmcG9ydC0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qIENvbnNvbGUgKCBpZiBhcHBsaWNhYmxlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTE1Miw3ICsxMzY1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcG9ydC0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob3AtPm5vZGUsIDApOworCXBzY19vcHMtPmdldF9pcnEocG9ydCwgb3AtPm5vZGUpOwogCWlmIChwb3J0LT5pcnEgPT0gTk9fSVJRKSB7CiAJCWRldl9kYmcoJm9wLT5kZXYsICJDb3VsZCBub3QgZ2V0IGlycVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTE2MywxMCArMTM3Niw4IEBACiAKIAkvKiBBZGQgdGhlIHBvcnQgdG8gdGhlIHVhcnQgc3ViLXN5c3RlbSAqLwogCXJldCA9IHVhcnRfYWRkX29uZV9wb3J0KCZtcGM1Mnh4X3VhcnRfZHJpdmVyLCBwb3J0KTsKLQlpZiAocmV0KSB7Ci0JCWlycV9kaXNwb3NlX21hcHBpbmcocG9ydC0+aXJxKTsKKwlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotCX0KIAogCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgKHZvaWQgKilwb3J0KTsKIAlyZXR1cm4gMDsKQEAgLTExNzgsMTAgKzEzODksOCBAQAogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOwogCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgTlVMTCk7CiAKLQlpZiAocG9ydCkgeworCWlmIChwb3J0KQogCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmbXBjNTJ4eF91YXJ0X2RyaXZlciwgcG9ydCk7Ci0JCWlycV9kaXNwb3NlX21hcHBpbmcocG9ydC0+aXJxKTsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyODgsNiArMTQ5NywxNSBAQAogCiAJbXBjNTJ4eF91YXJ0X29mX2VudW1lcmF0ZSgpOwogCisJLyoKKwkgKiBNYXAgdGhlIFBTQyBGSUZPIENvbnRyb2xsZXIgYW5kIGluaXQgaWYgb24gTVBDNTEyeC4KKwkgKi8KKwlpZiAocHNjX29wcy0+Zmlmb2NfaW5pdCkgeworCQlyZXQgPSBwc2Nfb3BzLT5maWZvY19pbml0KCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwogCXJldCA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTJ4eF91YXJ0X29mX2RyaXZlcik7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIgZmFpbGVkICglaSlcbiIsCkBAIC0xMzAyLDYgKzE1MjAsOSBAQAogc3RhdGljIHZvaWQgX19leGl0CiBtcGM1Mnh4X3VhcnRfZXhpdCh2b2lkKQogeworCWlmIChwc2Nfb3BzLT5maWZvY191bmluaXQpCisJCXBzY19vcHMtPmZpZm9jX3VuaW5pdCgpOworCiAJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1wYzUyeHhfdWFydF9vZl9kcml2ZXIpOwogCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1wYzUyeHhfdWFydF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5jIGIvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5jCmluZGV4IDY4M2U2NmYuLmYwMjBkZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYworKysgYi9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMKQEAgLTYzLDExICs2MywxNyBAQAogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2lmZGVmIENPTkZJR19QUENfUE1BQwogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vcG1hY19mZWF0dXJlLmg+CiAjaW5jbHVkZSA8YXNtL2RiZG1hLmg+CiAjaW5jbHVkZSA8YXNtL21hY2lvLmg+CisjZWxzZQorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2RlZmluZSBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoeCkgKDApCisjZW5kaWYKIAogI2lmIGRlZmluZWQgKENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQogI2RlZmluZSBTVVBQT1JUX1NZU1JRCkBAIC04MywxMSArODksOSBAQAogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9ICJwbWFjX3ppbG9nOiAwLjYgKEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4pIjsKIE1PRFVMRV9BVVRIT1IoIkJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB0aGUgUG93ZXJNYWMgc2VyaWFsIHBvcnRzLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHRoZSBNYWMgYW5kIFBvd2VyTWFjIHNlcmlhbCBwb3J0cy4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2RlZmluZSBQV1JEQkcoZm10LCBhcmcuLi4pCXByaW50ayhLRVJOX0RFQlVHIGZtdCAsICMjIGFyZykKLQogI2lmZGVmIENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HX1RUWVMKICNkZWZpbmUgUE1BQ1pJTE9HX01BSk9SCQlUVFlfTUFKT1IKICNkZWZpbmUgUE1BQ1pJTE9HX01JTk9SCQk2NApAQCAtMTUzLDggKzE1Nyw4IEBACiAJd3JpdGVfenNyZWcodWFwLCBSMTAsIHJlZ3NbUjEwXSk7CiAKIAkvKiBTZXQgVFgvUlggY29udHJvbHMgc2FucyB0aGUgZW5hYmxlIGJpdHMuICAqLwotICAgICAgIAl3cml0ZV96c3JlZyh1YXAsIFIzLCByZWdzW1IzXSAmIH5SeEVOQUJMRSk7Ci0gICAgICAgCXdyaXRlX3pzcmVnKHVhcCwgUjUsIHJlZ3NbUjVdICYgflR4RU5BQkxFKTsKKwl3cml0ZV96c3JlZyh1YXAsIFIzLCByZWdzW1IzXSAmIH5SeEVOQUJMRSk7CisJd3JpdGVfenNyZWcodWFwLCBSNSwgcmVnc1tSNV0gJiB+VHhFTkFCTEUpOwogCiAJLyogbm93IHNldCBSNyAicHJpbWUiIG9uIEVTQ0MgKi8KIAl3cml0ZV96c3JlZyh1YXAsIFIxNSwgcmVnc1tSMTVdIHwgRU44NUMzMCk7CkBAIC0yMDUsNyArMjA5LDcgQEAKICAqLwogc3RhdGljIHZvaWQgcG16X21heWJlX3VwZGF0ZV9yZWdzKHN0cnVjdCB1YXJ0X3BtYWNfcG9ydCAqdWFwKQogewotICAgICAgIAlpZiAoIVpTX1JFR1NfSEVMRCh1YXApKSB7CisJaWYgKCFaU19SRUdTX0hFTEQodWFwKSkgewogCQlpZiAoWlNfVFhfQUNUSVZFKHVhcCkpIHsKIAkJCXVhcC0+ZmxhZ3MgfD0gUE1BQ1pJTE9HX0ZMQUdfUkVHU19IRUxEOwogCQl9IGVsc2UgewpAQCAtMjgxLDcgKzI4NSw3IEBACiAJCQlzcGluX2xvY2soJnVhcC0+cG9ydC5sb2NrKTsKIAkJCWlmIChzd2FsbG93KQogCQkJCWdvdG8gbmV4dF9jaGFyOwotIAkJfQorCQl9CiAjZW5kaWYgLyogQ09ORklHX01BR0lDX1NZU1JRICYmIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFICovCiAKIAkJLyogQSByZWFsIHNlcmlhbCBsaW5lLCByZWNvcmQgdGhlIGNoYXJhY3RlciBhbmQgc3RhdHVzLiAgKi8KQEAgLTMxNyw3ICszMjEsNyBAQAogCiAJCWlmICh1YXAtPnBvcnQuaWdub3JlX3N0YXR1c19tYXNrID09IDB4ZmYgfHwKIAkJICAgIChyMSAmIHVhcC0+cG9ydC5pZ25vcmVfc3RhdHVzX21hc2spID09IDApIHsKLQkJICAgIAl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGNoLCBmbGFnKTsKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgY2gsIGZsYWcpOwogCQl9CiAJCWlmIChyMSAmIFJ4X09WUikKIAkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOwpAQCAtMzQxLDcgKzM0NSw3IEBACiAJdWFwLT5jdXJyZWdzW1IxXSAmPSB+KEVYVF9JTlRfRU5BQiB8IFR4SU5UX0VOQUIgfCBSeElOVF9NQVNLKTsKIAl3cml0ZV96c3JlZyh1YXAsIFIxLCB1YXAtPmN1cnJlZ3NbUjFdKTsKIAl6c3N5bmModWFwKTsKLQlkZXZfZXJyKCZ1YXAtPmRldi0+b2ZkZXYuZGV2LCAicG16OiByeCBpcnEgZmxvb2QgIVxuIik7CisJcG16X2Vycm9yKCJwbXo6IHJ4IGlycSBmbG9vZCAhXG4iKTsKIAlyZXR1cm4gdHR5OwogfQogCkBAIC00NzAsNDcgKzQ3NCw0NyBAQAogCiAJdWFwX2EgPSBwbXpfZ2V0X3BvcnRfQSh1YXApOwogCXVhcF9iID0gdWFwX2EtPm1hdGU7Ci0gICAgICAgCi0gICAgICAgCXNwaW5fbG9jaygmdWFwX2EtPnBvcnQubG9jayk7CisKKwlzcGluX2xvY2soJnVhcF9hLT5wb3J0LmxvY2spOwogCXIzID0gcmVhZF96c3JlZyh1YXBfYSwgUjMpOwogCiAjaWZkZWYgREVCVUdfSEFSRAogCXBtel9kZWJ1ZygiaXJxLCByMzogJXhcbiIsIHIzKTsKICNlbmRpZgotICAgICAgIAkvKiBDaGFubmVsIEEgKi8KKwkvKiBDaGFubmVsIEEgKi8KIAl0dHkgPSBOVUxMOwotICAgICAgIAlpZiAocjMgJiAoQ0hBRVhUIHwgQ0hBVHhJUCB8IENIQVJ4SVApKSB7CisJaWYgKHIzICYgKENIQUVYVCB8IENIQVR4SVAgfCBDSEFSeElQKSkgewogCQl3cml0ZV96c3JlZyh1YXBfYSwgUjAsIFJFU19IX0lVUyk7CiAJCXpzc3luYyh1YXBfYSk7CQkKLSAgICAgICAJCWlmIChyMyAmIENIQUVYVCkKLSAgICAgICAJCQlwbXpfc3RhdHVzX2hhbmRsZSh1YXBfYSk7CisJCWlmIChyMyAmIENIQUVYVCkKKwkJCXBtel9zdGF0dXNfaGFuZGxlKHVhcF9hKTsKIAkJaWYgKHIzICYgQ0hBUnhJUCkKIAkJCXR0eSA9IHBtel9yZWNlaXZlX2NoYXJzKHVhcF9hKTsKLSAgICAgICAJCWlmIChyMyAmIENIQVR4SVApCi0gICAgICAgCQkJcG16X3RyYW5zbWl0X2NoYXJzKHVhcF9hKTsKLQkgICAgICAgIHJjID0gSVJRX0hBTkRMRUQ7Ci0gICAgICAgCX0KLSAgICAgICAJc3Bpbl91bmxvY2soJnVhcF9hLT5wb3J0LmxvY2spOworCQlpZiAocjMgJiBDSEFUeElQKQorCQkJcG16X3RyYW5zbWl0X2NoYXJzKHVhcF9hKTsKKwkJcmMgPSBJUlFfSEFORExFRDsKKwl9CisJc3Bpbl91bmxvY2soJnVhcF9hLT5wb3J0LmxvY2spOwogCWlmICh0dHkgIT0gTlVMTCkKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAogCWlmICh1YXBfYi0+bm9kZSA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAotICAgICAgIAlzcGluX2xvY2soJnVhcF9iLT5wb3J0LmxvY2spOworCXNwaW5fbG9jaygmdWFwX2ItPnBvcnQubG9jayk7CiAJdHR5ID0gTlVMTDsKIAlpZiAocjMgJiAoQ0hCRVhUIHwgQ0hCVHhJUCB8IENIQlJ4SVApKSB7CiAJCXdyaXRlX3pzcmVnKHVhcF9iLCBSMCwgUkVTX0hfSVVTKTsKIAkJenNzeW5jKHVhcF9iKTsKLSAgICAgICAJCWlmIChyMyAmIENIQkVYVCkKLSAgICAgICAJCQlwbXpfc3RhdHVzX2hhbmRsZSh1YXBfYik7Ci0gICAgICAgCSAgICAgICAJaWYgKHIzICYgQ0hCUnhJUCkKLSAgICAgICAJCQl0dHkgPSBwbXpfcmVjZWl2ZV9jaGFycyh1YXBfYik7Ci0gICAgICAgCQlpZiAocjMgJiBDSEJUeElQKQotICAgICAgIAkJCXBtel90cmFuc21pdF9jaGFycyh1YXBfYik7Ci0JICAgICAgIAlyYyA9IElSUV9IQU5ETEVEOwotICAgICAgIAl9Ci0gICAgICAgCXNwaW5fdW5sb2NrKCZ1YXBfYi0+cG9ydC5sb2NrKTsKKwkJaWYgKHIzICYgQ0hCRVhUKQorCQkJcG16X3N0YXR1c19oYW5kbGUodWFwX2IpOworCQlpZiAocjMgJiBDSEJSeElQKQorCQkJdHR5ID0gcG16X3JlY2VpdmVfY2hhcnModWFwX2IpOworCQlpZiAocjMgJiBDSEJUeElQKQorCQkJcG16X3RyYW5zbWl0X2NoYXJzKHVhcF9iKTsKKwkJcmMgPSBJUlFfSEFORExFRDsKKwl9CisJc3Bpbl91bmxvY2soJnVhcF9iLT5wb3J0LmxvY2spOwogCWlmICh0dHkgIT0gTlVMTCkKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIApAQCAtNzE4LDcgKzcyMiw3IEBACiAKIAkJaWYgKFpTX0lTX0FTTEVFUCh1YXApKQogCQkJcmV0dXJuOwotCQkvKiBOT1RFOiBOb3Qgc3ViamVjdCB0byAndHJhbnNtaXR0ZXIgYWN0aXZlJyBydWxlLiAgKi8gCisJCS8qIE5PVEU6IE5vdCBzdWJqZWN0IHRvICd0cmFuc21pdHRlciBhY3RpdmUnIHJ1bGUuICovCiAJCXdyaXRlX3pzcmVnKHVhcCwgUjE1LCB1YXAtPmN1cnJlZ3NbUjE1XSk7CiAJfQogfQpAQCAtNzQ4LDcgKzc1Miw3IEBACiAJaWYgKG5ld19yZWcgIT0gdWFwLT5jdXJyZWdzW1I1XSkgewogCQl1YXAtPmN1cnJlZ3NbUjVdID0gbmV3X3JlZzsKIAotCQkvKiBOT1RFOiBOb3Qgc3ViamVjdCB0byAndHJhbnNtaXR0ZXIgYWN0aXZlJyBydWxlLiAgKi8gCisJCS8qIE5PVEU6IE5vdCBzdWJqZWN0IHRvICd0cmFuc21pdHRlciBhY3RpdmUnIHJ1bGUuICovCiAJCWlmIChaU19JU19BU0xFRVAodWFwKSkKIAkJCXJldHVybjsKIAkJd3JpdGVfenNyZWcodWFwLCBSNSwgdWFwLT5jdXJyZWdzW1I1XSk7CkBAIC03NTcsNiArNzYxLDggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKKwogLyoKICAqIFR1cm4gcG93ZXIgb24gb3Igb2ZmIHRvIHRoZSBTQ0MgYW5kIGFzc29jaWF0ZWQgc3R1ZmYKICAqIChwb3J0IGRyaXZlcnMsIG1vZGVtLCBJUiBwb3J0LCBldGMuKQpAQCAtNzkyLDYgKzc5OCwxNSBAQAogCXJldHVybiBkZWxheTsKIH0KIAorI2Vsc2UKKworc3RhdGljIGludCBwbXpfc2V0X3NjY19wb3dlcihzdHJ1Y3QgdWFydF9wbWFjX3BvcnQgKnVhcCwgaW50IHN0YXRlKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogIUNPTkZJR19QUENfUE1BQyAqLworCiAvKgogICogRml4WmVyb0J1Zy4uLi5Xb3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIFNDQyByZWNldmluZyBjaGFubmVsLgogICogSW5zcGlyZWQgZnJvbSBEYXJ3aW4gY29kZSwgMTUgU2VwdC4gMjAwMCAgLURhbk0KQEAgLTkwOCw3ICs5MjMsNiBAQAogCS8qIFJlbWVtYmVyIHN0YXR1cyBmb3IgRENEL0NUUyBjaGFuZ2VzICovCiAJdWFwLT5wcmV2X3N0YXR1cyA9IHJlYWRfenNyZWcodWFwLCBSMCk7CiAKLQogCXJldHVybiBwd3JfZGVsYXk7CiB9CiAKQEAgLTk1NSw5ICs5NjksOSBAQAogCX0JCiAKIAlwbXpfZ2V0X3BvcnRfQSh1YXApLT5mbGFncyB8PSBQTUFDWklMT0dfRkxBR19JU19JUlFfT047Ci0JaWYgKHJlcXVlc3RfaXJxKHVhcC0+cG9ydC5pcnEsIHBtel9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCAiUG93ZXJNYWMgWmlsb2ciLCB1YXApKSB7Ci0JCWRldl9lcnIoJnVhcC0+ZGV2LT5vZmRldi5kZXYsCi0JCQkiVW5hYmxlIHRvIHJlZ2lzdGVyIHpzIGludGVycnVwdCBoYW5kbGVyLlxuIik7CisJaWYgKHJlcXVlc3RfaXJxKHVhcC0+cG9ydC5pcnEsIHBtel9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJIlNDQyIsIHVhcCkpIHsKKwkJcG16X2Vycm9yKCJVbmFibGUgdG8gcmVnaXN0ZXIgenMgaW50ZXJydXB0IGhhbmRsZXIuXG4iKTsKIAkJcG16X3NldF9zY2NfcG93ZXIodWFwLCAwKTsKIAkJbXV0ZXhfdW5sb2NrKCZwbXpfaXJxX211dGV4KTsKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTk4Myw3ICs5OTcsNyBAQAogCWlmICghWlNfSVNfRVhUQ0xLKHVhcCkpCiAJCXVhcC0+Y3VycmVnc1tSMV0gfD0gRVhUX0lOVF9FTkFCOwogCXdyaXRlX3pzcmVnKHVhcCwgUjEsIHVhcC0+Y3VycmVnc1tSMV0pOwotICAgICAgIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCiAJcG16X2RlYnVnKCJwbXo6IHN0YXJ0dXAoKSBkb25lLlxuIik7CiAKQEAgLTEwMDMsNyArMTAxNyw3IEBACiAJbXV0ZXhfbG9jaygmcG16X2lycV9tdXRleCk7CiAKIAkvKiBSZWxlYXNlIGludGVycnVwdCBoYW5kbGVyICovCi0gICAgICAgCWZyZWVfaXJxKHVhcC0+cG9ydC5pcnEsIHVhcCk7CisJZnJlZV9pcnEodWFwLT5wb3J0LmlycSwgdWFwKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAKQEAgLTEwNTEsNyArMTA2NSw2IEBACiB7CiAJaW50IGJyZzsKIAotCiAJLyogU3dpdGNoIHRvIGV4dGVybmFsIGNsb2NraW5nIGZvciBJckRBIGhpZ2ggY2xvY2sgcmF0ZXMuIFRoYXQKIAkgKiBjb2RlIGNvdWxkIGJlIHJlLXVzZWQgZm9yIE1pZGkgaW50ZXJmYWNlcyB3aXRoIGRpZmZlcmVudAogCSAqIG11bHRpcGxpZXJzCkBAIC0xMTk4LDcgKzEyMTEsNyBAQAogCXdoaWxlICgocmVhZF96c3JlZyh1YXAsIFIwKSAmIFR4X0JVRl9FTVApID09IDAKIAkgICAgICAgfHwgKHJlYWRfenNyZWcodWFwLCBSMSkgJiBBTExfU05UKSA9PSAwKSB7CiAJCWlmICgtLXQgPD0gMCkgewotCQkJZGV2X2VycigmdWFwLT5kZXYtPm9mZGV2LmRldiwgInRyYW5zbWl0dGVyIGRpZG4ndCBkcmFpblxuIik7CisJCQlwbXpfZXJyb3IoInRyYW5zbWl0dGVyIGRpZG4ndCBkcmFpblxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAkJdWRlbGF5KDEwKTsKQEAgLTEyMTQsNyArMTIyNyw3IEBACiAJCXJlYWRfenNkYXRhKHVhcCk7CiAJCW1kZWxheSgxMCk7CiAJCWlmICgtLXQgPD0gMCkgewotCQkJZGV2X2VycigmdWFwLT5kZXYtPm9mZGV2LmRldiwgInJlY2VpdmVyIGRpZG4ndCBkcmFpblxuIik7CisJCQlwbXpfZXJyb3IoInJlY2VpdmVyIGRpZG4ndCBkcmFpblxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC0xMjIzLDIwICsxMjM2LDE5IEBACiAJdWFwLT5jdXJyZWdzW1I1XSB8PSBEVFI7CiAJd3JpdGVfenNyZWcodWFwLCBSNSwgdWFwLT5jdXJyZWdzW1I1XSk7CiAJenNzeW5jKHVhcCk7Ci0gICAgICAgCW1kZWxheSgxKTsKKwltZGVsYXkoMSk7CiAKIAkvKiBTd2l0Y2ggU0NDIHRvIDE5MjAwICovCiAJcG16X2NvbnZlcnRfdG9fenModWFwLCBDUzgsIDAsIDE5MjAwKTsJCQogCXBtel9sb2FkX3pzcmVncyh1YXAsIHVhcC0+Y3VycmVncyk7Ci0gICAgICAgCW1kZWxheSgxKTsKKwltZGVsYXkoMSk7CiAKIAkvKiBXcml0ZSBnZXRfdmVyc2lvbiBjb21tYW5kIGJ5dGUgKi8KIAl3cml0ZV96c2RhdGEodWFwLCAxKTsKIAl0ID0gNTAwMDsKIAl3aGlsZSAoKHJlYWRfenNyZWcodWFwLCBSMCkgJiBSeF9DSF9BVikgPT0gMCkgewogCQlpZiAoLS10IDw9IDApIHsKLQkJCWRldl9lcnIoJnVhcC0+ZGV2LT5vZmRldi5kZXYsCi0JCQkJImlyZGFfc2V0dXAgdGltZWQgb3V0IG9uIGdldF92ZXJzaW9uIGJ5dGVcbiIpOworCQkJcG16X2Vycm9yKCJpcmRhX3NldHVwIHRpbWVkIG91dCBvbiBnZXRfdmVyc2lvbiBieXRlXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXVkZWxheSgxMCk7CkBAIC0xMjQ0LDggKzEyNTYsNyBAQAogCXZlcnNpb24gPSByZWFkX3pzZGF0YSh1YXApOwogCiAJaWYgKHZlcnNpb24gPCA0KSB7Ci0JCWRldl9pbmZvKCZ1YXAtPmRldi0+b2ZkZXYuZGV2LCAiSXJEQTogZG9uZ2xlIHZlcnNpb24gJWQgbm90IHN1cHBvcnRlZFxuIiwKLQkJCSB2ZXJzaW9uKTsKKwkJcG16X2luZm8oIklyREE6IGRvbmdsZSB2ZXJzaW9uICVkIG5vdCBzdXBwb3J0ZWRcbiIsIHZlcnNpb24pOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTEyNTQsMTggKzEyNjUsMTYgQEAKIAl0ID0gNTAwMDsKIAl3aGlsZSAoKHJlYWRfenNyZWcodWFwLCBSMCkgJiBSeF9DSF9BVikgPT0gMCkgewogCQlpZiAoLS10IDw9IDApIHsKLQkJCWRldl9lcnIoJnVhcC0+ZGV2LT5vZmRldi5kZXYsCi0JCQkJImlyZGFfc2V0dXAgdGltZWQgb3V0IG9uIHNwZWVkIG1vZGUgYnl0ZVxuIik7CisJCQlwbXpfZXJyb3IoImlyZGFfc2V0dXAgdGltZWQgb3V0IG9uIHNwZWVkIG1vZGUgYnl0ZVxuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCQl1ZGVsYXkoMTApOwogCX0KIAl0ID0gcmVhZF96c2RhdGEodWFwKTsKIAlpZiAodCAhPSBjbWRieXRlKQotCQlkZXZfZXJyKCZ1YXAtPmRldi0+b2ZkZXYuZGV2LAotCQkJImlyZGFfc2V0dXAgc3BlZWQgbW9kZSBieXRlID0gJXggKCV4KVxuIiwgdCwgY21kYnl0ZSk7CisJCXBtel9lcnJvcigiaXJkYV9zZXR1cCBzcGVlZCBtb2RlIGJ5dGUgPSAleCAoJXgpXG4iLCB0LCBjbWRieXRlKTsKIAotCWRldl9pbmZvKCZ1YXAtPmRldi0+b2ZkZXYuZGV2LCAiSXJEQSBzZXR1cCBmb3IgJWxkIGJwcywgZG9uZ2xlIHZlcnNpb246ICVkXG4iLAorCXBtel9pbmZvKCJJckRBIHNldHVwIGZvciAlbGQgYnBzLCBkb25nbGUgdmVyc2lvbjogJWRcbiIsCiAJCSAqYmF1ZCwgdmVyc2lvbik7CiAKIAkodm9pZClyZWFkX3pzZGF0YSh1YXApOwpAQCAtMTQxNSw3ICsxNDI0LDcgQEAKIAl3cml0ZV96c2RhdGEodWFwLCBjKTsKIH0KIAotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX0NPTlNPTEVfUE9MTCAqLwogCiBzdGF0aWMgc3RydWN0IHVhcnRfb3BzIHBtel9wb3BzID0gewogCS50eF9lbXB0eQk9CXBtel90eF9lbXB0eSwKQEAgLTE0NDAsNiArMTQ0OSw4IEBACiAjZW5kaWYKIH07CiAKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKKwogLyoKICAqIFNldHVwIG9uZSBwb3J0IHN0cnVjdHVyZSBhZnRlciBwcm9iaW5nLCBIVyBpcyBkb3duIGF0IHRoaXMgcG9pbnQsCiAgKiBVbmxpa2Ugc3Vuemlsb2csIHdlIGRvbid0IG5lZWQgdG8gcHJlLWluaXQgdGhlIHNwaW5sb2NrIGFzIHdlIGRvbid0CkBAIC0xNDYzLDcgKzE0NzQsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl1YXAtPnBvcnQubWFwYmFzZSA9IHJfcG9ydHMuc3RhcnQ7CiAJdWFwLT5wb3J0Lm1lbWJhc2UgPSBpb3JlbWFwKHVhcC0+cG9ydC5tYXBiYXNlLCAweDEwMDApOwotICAgICAgCisKIAl1YXAtPmNvbnRyb2xfcmVnID0gdWFwLT5wb3J0Lm1lbWJhc2U7CiAJdWFwLT5kYXRhX3JlZyA9IHVhcC0+Y29udHJvbF9yZWcgKyAweDEwOwogCQpAQCAtMTU5MCw3ICsxNjAxLDcgQEAKIH0KIAogLyoKLSAqIENhbGxlZCB1cG9uIG1hdGNoIHdpdGggYW4gZXNjYyBub2RlIGluIHRoZSBkZXZpdmUtdHJlZS4KKyAqIENhbGxlZCB1cG9uIG1hdGNoIHdpdGggYW4gZXNjYyBub2RlIGluIHRoZSBkZXZpY2UtdHJlZS4KICAqLwogc3RhdGljIGludCBwbXpfYXR0YWNoKHN0cnVjdCBtYWNpb19kZXYgKm1kZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewpAQCAtMTgxMiw3ICsxODIzLDcgQEAKIAkJcG16X3BvcnRzW2NvdW50XS5ub2RlCQk9IG5vZGVfYTsKIAkJcG16X3BvcnRzW2NvdW50KzFdLm5vZGUJCT0gbm9kZV9iOwogCQlwbXpfcG9ydHNbY291bnRdLnBvcnQubGluZQk9IGNvdW50OwotCQlwbXpfcG9ydHNbY291bnQrMV0ucG9ydC5saW5lICAgCT0gY291bnQrMTsKKwkJcG16X3BvcnRzW2NvdW50KzFdLnBvcnQubGluZQk9IGNvdW50KzE7CiAKIAkJLyoKIAkJICogU2V0dXAgdGhlIHBvcnRzIGZvciByZWFsCkBAIC0xODM2LDYgKzE4NDcsODggQEAKIAlyZXR1cm4gMDsKIH0KIAorI2Vsc2UKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NjX2FfcGRldiwgc2NjX2JfcGRldjsKKworc3RhdGljIGludCBfX2luaXQgcG16X2luaXRfcG9ydChzdHJ1Y3QgdWFydF9wbWFjX3BvcnQgKnVhcCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJfcG9ydHM7CisJaW50IGlycTsKKworCXJfcG9ydHMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UodWFwLT5ub2RlLCBJT1JFU09VUkNFX01FTSwgMCk7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycSh1YXAtPm5vZGUsIDApOworCWlmICghcl9wb3J0cyB8fCAhaXJxKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXVhcC0+cG9ydC5tYXBiYXNlICA9IHJfcG9ydHMtPnN0YXJ0OworCXVhcC0+cG9ydC5tZW1iYXNlICA9ICh1bnNpZ25lZCBjaGFyIF9faW9tZW0gKikgcl9wb3J0cy0+c3RhcnQ7CisJdWFwLT5wb3J0LmlvdHlwZSAgID0gVVBJT19NRU07CisJdWFwLT5wb3J0LmlycSAgICAgID0gaXJxOworCXVhcC0+cG9ydC51YXJ0Y2xrICA9IFpTX0NMT0NLOworCXVhcC0+cG9ydC5maWZvc2l6ZSA9IDE7CisJdWFwLT5wb3J0Lm9wcyAgICAgID0gJnBtel9wb3BzOworCXVhcC0+cG9ydC50eXBlICAgICA9IFBPUlRfUE1BQ19aSUxPRzsKKwl1YXAtPnBvcnQuZmxhZ3MgICAgPSAwOworCisJdWFwLT5jb250cm9sX3JlZyAgID0gdWFwLT5wb3J0Lm1lbWJhc2U7CisJdWFwLT5kYXRhX3JlZyAgICAgID0gdWFwLT5jb250cm9sX3JlZyArIDQ7CisJdWFwLT5wb3J0X3R5cGUgICAgID0gMDsKKworCXBtel9jb252ZXJ0X3RvX3pzKHVhcCwgQ1M4LCAwLCA5NjAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwbXpfcHJvYmUodm9pZCkKK3sKKwlpbnQgZXJyOworCisJcG16X3BvcnRzX2NvdW50ID0gMDsKKworCXBtel9wb3J0c1swXS5tYXRlICAgICAgPSAmcG16X3BvcnRzWzFdOworCXBtel9wb3J0c1swXS5wb3J0LmxpbmUgPSAwOworCXBtel9wb3J0c1swXS5mbGFncyAgICAgPSBQTUFDWklMT0dfRkxBR19JU19DSEFOTkVMX0E7CisJcG16X3BvcnRzWzBdLm5vZGUgICAgICA9ICZzY2NfYV9wZGV2OworCWVyciA9IHBtel9pbml0X3BvcnQoJnBtel9wb3J0c1swXSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlwbXpfcG9ydHNfY291bnQrKzsKKworCXBtel9wb3J0c1sxXS5tYXRlICAgICAgPSAmcG16X3BvcnRzWzBdOworCXBtel9wb3J0c1sxXS5wb3J0LmxpbmUgPSAxOworCXBtel9wb3J0c1sxXS5mbGFncyAgICAgPSAwOworCXBtel9wb3J0c1sxXS5ub2RlICAgICAgPSAmc2NjX2JfcGRldjsKKwllcnIgPSBwbXpfaW5pdF9wb3J0KCZwbXpfcG9ydHNbMV0pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcG16X3BvcnRzX2NvdW50Kys7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcG16X2Rpc3Bvc2VfcG9ydChzdHJ1Y3QgdWFydF9wbWFjX3BvcnQgKnVhcCkKK3sKKwltZW1zZXQodWFwLCAwLCBzaXplb2Yoc3RydWN0IHVhcnRfcG1hY19wb3J0KSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBtel9hdHRhY2goc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwbXpfcG9ydHNfY291bnQ7IGkrKykKKwkJaWYgKHBtel9wb3J0c1tpXS5ub2RlID09IHBkZXYpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBfX2V4aXQgcG16X2RldGFjaChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogIUNPTkZJR19QUENfUE1BQyAqLworCiAjaWZkZWYgQ09ORklHX1NFUklBTF9QTUFDWklMT0dfQ09OU09MRQogCiBzdGF0aWMgdm9pZCBwbXpfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uLCBjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBpbnQgY291bnQpOwpAQCAtMTg5NiwyOCArMTk4OSw0MSBAQAogCXJldHVybiByYzsKIH0KIAorI2lmZGVmIENPTkZJR19QUENfUE1BQworCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBwbXpfbWF0Y2hbXSA9IAogewogCXsKLQkubmFtZSAJCT0gImNoLWEiLAorCS5uYW1lCQk9ICJjaC1hIiwKIAl9LAogCXsKLQkubmFtZSAJCT0gImNoLWIiLAorCS5uYW1lCQk9ICJjaC1iIiwKIAl9LAogCXt9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKG9mLCBwbXpfbWF0Y2gpOwogCi1zdGF0aWMgc3RydWN0IG1hY2lvX2RyaXZlciBwbXpfZHJpdmVyID0gCi17CitzdGF0aWMgc3RydWN0IG1hY2lvX2RyaXZlciBwbXpfZHJpdmVyID0gewogCS5uYW1lIAkJPSAicG1hY196aWxvZyIsCiAJLm1hdGNoX3RhYmxlCT0gcG16X21hdGNoLAogCS5wcm9iZQkJPSBwbXpfYXR0YWNoLAogCS5yZW1vdmUJCT0gcG16X2RldGFjaCwKIAkuc3VzcGVuZAk9IHBtel9zdXNwZW5kLAotICAgICAgIAkucmVzdW1lCQk9IHBtel9yZXN1bWUsCisJLnJlc3VtZQkJPSBwbXpfcmVzdW1lLAogfTsKIAorI2Vsc2UKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcG16X2RyaXZlciA9IHsKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKHBtel9kZXRhY2gpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQkJPSAic2NjIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCisjZW5kaWYgLyogIUNPTkZJR19QUENfUE1BQyAqLworCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X3Bteih2b2lkKQogewogCWludCByYywgaTsKQEAgLTE5NTIsMTkgKzIwNTgsMjcgQEAKIAkJCXBtel9kaXNwb3NlX3BvcnQoJnBtel9wb3J0c1tpXSk7CiAJCXJldHVybiByYzsKIAl9Ci0JCisKIAkvKgogCSAqIFRoZW4gd2UgcmVnaXN0ZXIgdGhlIG1hY2lvIGRyaXZlciBpdHNlbGYKIAkgKi8KKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKIAlyZXR1cm4gbWFjaW9fcmVnaXN0ZXJfZHJpdmVyKCZwbXpfZHJpdmVyKTsKKyNlbHNlCisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmcG16X2RyaXZlciwgcG16X2F0dGFjaCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcG16KHZvaWQpCiB7CiAJaW50IGk7CiAKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKIAkvKiBHZXQgcmlkIG9mIG1hY2lvLWRyaXZlciAoZGV0YWNoIGZyb20gbWFjaW8pICovCiAJbWFjaW9fdW5yZWdpc3Rlcl9kcml2ZXIoJnBtel9kcml2ZXIpOworI2Vsc2UKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcG16X2RyaXZlcik7CisjZW5kaWYKIAogCWZvciAoaSA9IDA7IGkgPCBwbXpfcG9ydHNfY291bnQ7IGkrKykgewogCQlzdHJ1Y3QgdWFydF9wbWFjX3BvcnQgKnVwb3J0ID0gJnBtel9wb3J0c1tpXTsKQEAgLTIwMzEsMTAgKzIxNDUsMTAgQEAKIAkvKgogCSAqIFhTZXJ2ZSdzIGRlZmF1bHQgdG8gNTc2MDAgYnBzCiAJICovCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzEsMSIpCi0JICAgIHx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzEsMiIpCi0JICAgIHx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkKLQkgCWJhdWQgPSA1NzYwMDsKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMSwxIikKKwkgICAgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMSwyIikKKwkgICAgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKQorCQliYXVkID0gNTc2MDA7CiAKIAkvKgogCSAqIENoZWNrIHdoZXRoZXIgYW4gaW52YWxpZCB1YXJ0IG51bWJlciBoYXMgYmVlbiBzcGVjaWZpZWQsIGFuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5oIGIvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5oCmluZGV4IGY2ZTc3ZjEuLmNiYzM0ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmgKQEAgLTEsNyArMSwxNSBAQAogI2lmbmRlZiBfX1BNQUNfWklMT0dfSF9fCiAjZGVmaW5lIF9fUE1BQ19aSUxPR19IX18KIAotI2RlZmluZSBwbXpfZGVidWcoZm10LGFyZy4uLikJZGV2X2RiZygmdWFwLT5kZXYtPm9mZGV2LmRldiwgZm10LCAjIyBhcmcpCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCisjZGVmaW5lIHBtel9kZWJ1ZyhmbXQsIGFyZy4uLikJZGV2X2RiZygmdWFwLT5kZXYtPm9mZGV2LmRldiwgZm10LCAjIyBhcmcpCisjZGVmaW5lIHBtel9lcnJvcihmbXQsIGFyZy4uLikJZGV2X2VycigmdWFwLT5kZXYtPm9mZGV2LmRldiwgZm10LCAjIyBhcmcpCisjZGVmaW5lIHBtel9pbmZvKGZtdCwgYXJnLi4uKQlkZXZfaW5mbygmdWFwLT5kZXYtPm9mZGV2LmRldiwgZm10LCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBwbXpfZGVidWcoZm10LCBhcmcuLi4pCWRldl9kYmcoJnVhcC0+bm9kZS0+ZGV2LCBmbXQsICMjIGFyZykKKyNkZWZpbmUgcG16X2Vycm9yKGZtdCwgYXJnLi4uKQlkZXZfZXJyKCZ1YXAtPm5vZGUtPmRldiwgZm10LCAjIyBhcmcpCisjZGVmaW5lIHBtel9pbmZvKGZtdCwgYXJnLi4uKQlkZXZfaW5mbygmdWFwLT5ub2RlLT5kZXYsIGZtdCwgIyMgYXJnKQorI2VuZGlmCiAKIC8qCiAgKiBBdCBtb3N0IDIgRVNDQ3Mgd2l0aCAyIHBvcnRzIGVhY2gKQEAgLTE3LDYgKzI1LDcgQEAKIAlzdHJ1Y3QgdWFydF9wb3J0CQlwb3J0OwogCXN0cnVjdCB1YXJ0X3BtYWNfcG9ydAkJKm1hdGU7CiAKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKIAkvKiBtYWNpb19kZXYgZm9yIHRoZSBlc2NjIGhvbGRpbmcgdGhpcyBwb3J0IChtYXliZSBiZSBudWxsIG9uCiAJICogZWFybHkgaW5pdGVkIHBvcnQpCiAJICovCkBAIC0yNSw2ICszNCw5IEBACiAJICogb2YgImVzY2MiIG5vZGUgKGllLiBjaC1hIG9yIGNoLWIpCiAJICovCiAJc3RydWN0IGRldmljZV9ub2RlCQkqbm9kZTsKKyNlbHNlCisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkJKm5vZGU7CisjZW5kaWYKIAogCS8qIFBvcnQgdHlwZSBhcyBvYnRhaW5lZCBmcm9tIGRldmljZSB0cmVlIChJUkRBLCBtb2RlbSwgLi4uKSAqLwogCWludAkJCQlwb3J0X3R5cGU7CkBAIC01NSwxMCArNjcsMTIgQEAKIAl2b2xhdGlsZSB1OAkJCV9faW9tZW0gKmNvbnRyb2xfcmVnOwogCXZvbGF0aWxlIHU4CQkJX19pb21lbSAqZGF0YV9yZWc7CiAKKyNpZmRlZiBDT05GSUdfUFBDX1BNQUMKIAl1bnNpZ25lZCBpbnQJCQl0eF9kbWFfaXJxOwogCXVuc2lnbmVkIGludAkJCXJ4X2RtYV9pcnE7CiAJdm9sYXRpbGUgc3RydWN0IGRiZG1hX3JlZ3MJX19pb21lbSAqdHhfZG1hX3JlZ3M7CiAJdm9sYXRpbGUgc3RydWN0IGRiZG1hX3JlZ3MJX19pb21lbSAqcnhfZG1hX3JlZ3M7CisjZW5kaWYKIAogCXN0cnVjdCBrdGVybWlvcwkJCXRlcm1pb3NfY2FjaGU7CiB9OwpAQCAtMTEzLDcgKzEyNyw3IEBACiAjZGVmaW5lIEJSR19UT19CUFMoYnJnLCBmcmVxKSAoKGZyZXEpIC8gMiAvICgoYnJnKSArIDIpKQogI2RlZmluZSBCUFNfVE9fQlJHKGJwcywgZnJlcSkgKCgoKGZyZXEpICsgKGJwcykpIC8gKDIgKiAoYnBzKSkpIC0gMikKIAotI2RlZmluZSBaU19DTE9DSyAgICAgICAgIDM2ODY0MDAgCS8qIFo4NTMwIFJUeEMgaW5wdXQgY2xvY2sgcmF0ZSAqLworI2RlZmluZSBaU19DTE9DSyAgICAgICAgIDM2ODY0MDAJLyogWjg1MzAgUlR4QyBpbnB1dCBjbG9jayByYXRlICovCiAKIC8qIFRoZSBaaWxvZyByZWdpc3RlciBzZXQgKi8KIApAQCAtMTcxLDcgKzE4NSw3IEBACiAKIC8qIFdyaXRlIFJlZ2lzdGVyIDMgKi8KIAotI2RlZmluZQlSeEVOQUJMRSAgICAgICAJMHgxCS8qIFJ4IEVuYWJsZSAqLworI2RlZmluZQlSeEVOQUJMRQkweDEJLyogUnggRW5hYmxlICovCiAjZGVmaW5lCVNZTkNfTF9JTkgJMHgyCS8qIFN5bmMgQ2hhcmFjdGVyIExvYWQgSW5oaWJpdCAqLwogI2RlZmluZQlBRERfU00JCTB4NAkvKiBBZGRyZXNzIFNlYXJjaCBNb2RlIChTRExDKSAqLwogI2RlZmluZQlSeENSQ19FTkFCCTB4OAkvKiBSeCBDUkMgRW5hYmxlICovCkBAIC0xODUsNyArMTk5LDcgQEAKIAogLyogV3JpdGUgUmVnaXN0ZXIgNCAqLwogCi0jZGVmaW5lCVBBUl9FTkFCICAgICAgIAkweDEJLyogUGFyaXR5IEVuYWJsZSAqLworI2RlZmluZQlQQVJfRU5BQgkweDEJLyogUGFyaXR5IEVuYWJsZSAqLwogI2RlZmluZQlQQVJfRVZFTgkweDIJLyogUGFyaXR5IEV2ZW4vT2RkKiAqLwogCiAjZGVmaW5lCVNZTkNfRU5BQgkwCS8qIFN5bmMgTW9kZXMgRW5hYmxlICovCkBAIC0yMTAsNyArMjI0LDcgQEAKICNkZWZpbmUJVHhDUkNfRU5BQgkweDEJLyogVHggQ1JDIEVuYWJsZSAqLwogI2RlZmluZQlSVFMJCTB4MgkvKiBSVFMgKi8KICNkZWZpbmUJU0RMQ19DUkMJMHg0CS8qIFNETEMvQ1JDLTE2ICovCi0jZGVmaW5lCVR4RU5BQkxFICAgICAgIAkweDgJLyogVHggRW5hYmxlICovCisjZGVmaW5lCVR4RU5BQkxFCTB4OAkvKiBUeCBFbmFibGUgKi8KICNkZWZpbmUJU05EX0JSSwkJMHgxMAkvKiBTZW5kIEJyZWFrICovCiAjZGVmaW5lCVR4NQkJMHgwCS8qIFR4IDUgYml0cyAob3IgbGVzcykvY2hhcmFjdGVyICovCiAjZGVmaW5lCVR4NwkJMHgyMAkvKiBUeCA3IGJpdHMvY2hhcmFjdGVyICovCkBAIC0zNzIsMTEgKzM4NiwxMSBAQAogI2RlZmluZSBaU19UWF9BQ1RJVkUoVVApCQkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19UWF9BQ1RJVkUpCiAjZGVmaW5lIFpTX1dBTlRTX01PREVNX1NUQVRVUyhVUCkJKChVUCktPmZsYWdzICYgUE1BQ1pJTE9HX0ZMQUdfTU9ERU1fU1RBVFVTKQogI2RlZmluZSBaU19JU19JUkRBKFVQKQkJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX0lSREEpCi0jZGVmaW5lIFpTX0lTX0lOVE1PREVNKFVQKQkgICAgICAgCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX0lOVE1PREVNKQorI2RlZmluZSBaU19JU19JTlRNT0RFTShVUCkJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX0lOVE1PREVNKQogI2RlZmluZSBaU19IQVNfRE1BKFVQKQkJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0hBU19ETUEpCi0jZGVmaW5lIFpTX0lTX0FTTEVFUChVUCkgICAgICAgCQkoKFVQKS0+ZmxhZ3MgJiBQTUFDWklMT0dfRkxBR19JU19BU0xFRVApCi0jZGVmaW5lIFpTX0lTX09QRU4oVVApICAgICAgIAkJKChVUCktPmZsYWdzICYgUE1BQ1pJTE9HX0ZMQUdfSVNfT1BFTikKLSNkZWZpbmUgWlNfSVNfSVJRX09OKFVQKSAgICAgICAJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX0lSUV9PTikKLSNkZWZpbmUgWlNfSVNfRVhUQ0xLKFVQKSAgICAgICAJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX0VYVENMSykKKyNkZWZpbmUgWlNfSVNfQVNMRUVQKFVQKQkJKChVUCktPmZsYWdzICYgUE1BQ1pJTE9HX0ZMQUdfSVNfQVNMRUVQKQorI2RlZmluZSBaU19JU19PUEVOKFVQKQkJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX09QRU4pCisjZGVmaW5lIFpTX0lTX0lSUV9PTihVUCkJCSgoVVApLT5mbGFncyAmIFBNQUNaSUxPR19GTEFHX0lTX0lSUV9PTikKKyNkZWZpbmUgWlNfSVNfRVhUQ0xLKFVQKQkJKChVUCktPmZsYWdzICYgUE1BQ1pJTE9HX0ZMQUdfSVNfRVhUQ0xLKQogCiAjZW5kaWYgLyogX19QTUFDX1pJTE9HX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwppbmRleCA5NTQyMWZhLi5lOTFkYjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwpAQCAtNjk2LDExICs2OTYsMTEgQEAKIAkJaW5mby0+bXVsdGkgPSBpbmZvLT5xdWlyay0+bXVsdGk7CiAKIAlpZiAoaW5mby0+bXVsdGkgPiAxKQotCQltdWx0aV9jb25maWcobGluayk7CisJCWkgPSBtdWx0aV9jb25maWcobGluayk7CiAJZWxzZQotCQlzaW1wbGVfY29uZmlnKGxpbmspOworCQlpID0gc2ltcGxlX2NvbmZpZyhsaW5rKTsKIAotCWlmIChpbmZvLT5uZGV2ID09IDApCisJaWYgKGkgfHwgaW5mby0+bmRldiA9PSAwKQogCQlnb3RvIGZhaWxlZDsKIAogCS8qCkBAIC03MTUsNiArNzE1LDcgQEAKIAlyZXR1cm4gMDsKIAogZmFpbGVkOgorCWRldl93YXJuKCZsaW5rLT5kZXYsICJzZXJpYWxfY3M6IGZhaWxlZCB0byBpbml0aWFsaXplXG4iKTsKIAlzZXJpYWxfcmVtb3ZlKGxpbmspOwogCXJldHVybiAtRU5PREVWOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmggYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAppbmRleCAwZWZjZGVkLi5mN2QyNTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaApAQCAtNTE4LDM0ICs1MTgsNiBAQAogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZmZlODApCiAJCXJldHVybiBfX3Jhd19yZWFkYihTQ1BEUikmMHgwMSA/IDEgOiAwOyAvKiBTQ0kgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGE0MDAwMTUwKQotCQlyZXR1cm4gX19yYXdfcmVhZGIoU0NQRFIpJjB4MTAgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4YTQwMDAxNDApCi0JCXJldHVybiBfX3Jhd19yZWFkYihTQ1BEUikmMHgwNCA/IDEgOiAwOyAvKiBJUkRBICovCi0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gU0NJRjApCi0JCXJldHVybiBfX3Jhd19yZWFkYihTQ1BEUikmMHgwNCA/IDEgOiAwOyAvKiBJUkRBICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gU0NJRjIpCi0JCXJldHVybiBfX3Jhd19yZWFkYihTQ1BEUikmMHgxMCA/IDEgOiAwOyAvKiBTQ0lGICovCi0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMikKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQkgIHJldHVybiBzY2lfaW4ocG9ydCxTQ3hTUikmMHgwMDEwID8gMSA6IDA7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGE0NDMwMDAwKQotCQlyZXR1cm4gc2NpX2luKHBvcnQsIFNDeFNSKSAmIDB4MDAwMyA/IDEgOiAwOwotCWVsc2UgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNDQzODAwMCkKLQkJcmV0dXJuIHNjaV9pbihwb3J0LCBTQ3hTUikgJiAweDAwMDMgPyAxIDogMDsKIAlyZXR1cm4gMTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MCkgIHx8IFwKQEAgLTU1OCwyMDcgKzUzMCwxNyBAQAogewogCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCiAJCXJldHVybiBfX3Jhd19yZWFkYihTQ1NQVFIxKSYweDAxID8gMSA6IDA7IC8qIFNDSSAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlODAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSYweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwogCXJldHVybiAxOwogfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMikKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTgwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikmMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NykKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZlNGIwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZlNGMwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZlNGQwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZlNjAwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmU2MTAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZTYyMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUyMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTMwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2KQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkYihTQ1BEUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYwICovCi0JcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWRiKFBTRFIpICYgMHgwMiA/IDEgOiAwOyAvKiBTQ0lGMCAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkYihQQURSKSAmIDB4NDAgPyAxIDogMDsgLyogU0NJRjEgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTIwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZGIoUFdEUikgJiAweDA0ID8gMSA6IDA7IC8qIFNDSUYyICovCi0KLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLSAgICAgICAgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSMCkgJiAweDAwMDggPyAxIDogMDsgLyogU0NJRjAgKi8KLSAgICAgICAgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUxMDAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSMSkgJiAweDAwMjAgPyAxIDogMDsgLyogU0NJRjEgKi8KLSAgICAgICAgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUyMDAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRjIgKi8KLSAgICAgICAgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNGUzMDAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRjMgKi8KLSAgICAgICAgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNGU0MDAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSNCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRjQgKi8KLSAgICAgICAgaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhhNGU1MDAwMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gX19yYXdfcmVhZGIoU0NTUFRSNSkgJiAweDAwMDggPyAxIDogMDsgLyogU0NJRjUgKi8KLSAgICAgICAgcmV0dXJuIDE7Ci19Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQpCi0jICBkZWZpbmUgU0NGU1IgICAgMHgwMDEwCi0jICBkZWZpbmUgU0NBU1NSICAgMHgwMDE0Ci1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoKHBvcnQtPm1hcGJhc2UgKyBTQ0ZTUikpICAmIFNDSUZfQlJLID8gMSA6IDA7Ci0JaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGQSkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KChwb3J0LT5tYXBiYXNlICsgU0NBU1NSKSkgJiBTQ0lGX0JSSyA/IDEgOiAwOwotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMSkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMykKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLSAgICAgICAgIHJldHVybiBzY2lfaW4ocG9ydCwgU0NTUFRSKSYweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotfQogI2VsaWYgZGVmaW5lZChfX0g4MzAwSF9fKSB8fCBkZWZpbmVkKF9fSDgzMDBTX18pCiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaW50IGNoID0gKHBvcnQtPm1hcGJhc2UgLSBTTVIwKSA+PiAzOwogCXJldHVybiAoSDgzMDBfU0NJX0RSKGNoKSAmIGg4MzAwX3NjaV9waW5zW2NoXS5yeCkgPyAxIDogMDsKIH0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykKKyNlbHNlIC8qIGRlZmF1bHQgY2FzZSBmb3Igbm9uLVNDSSBwcm9jZXNzb3JzICovCiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTA4MDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGL0lSREEgKi8KLQotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwKQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmY5MjMwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZjkyNDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmOTI1MDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUxMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlYTAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmViMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWMwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlZDAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIzKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmVlMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjQpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWYwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSNSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCXJldHVybiAxOwotfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMpIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwNikgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzKQotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZTgwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlODgwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmU5MDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZTk4MDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIzKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxKQotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZUEwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIwKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmZlQTgwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjEpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmVCMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMikgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZmZUI4MDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIzKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0jZW5kaWYKLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSkKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKLXsKLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGY4NDAwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4Zjg0MTAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmODQyMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlyZXR1cm4gMTsKLX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMpCi1zdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCi17Ci0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmMzMDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjApICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KLQlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmYzQwMDAwKQotCQlyZXR1cm4gX19yYXdfcmVhZHcoU0NTUFRSMSkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLwotCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZjNTAwMDApCi0JCXJldHVybiBfX3Jhd19yZWFkdyhTQ1NQVFIyKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCi0JaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmM2MDAwMCkKLQkJcmV0dXJuIF9fcmF3X3JlYWR3KFNDU1BUUjMpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KIAlyZXR1cm4gMTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9pbnRjLmMgYi9kcml2ZXJzL3NoL2ludGMuYwppbmRleCBkNWQ3ZjIzLi4zYTVhMTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL2ludGMuYworKysgYi9kcml2ZXJzL3NoL2ludGMuYwpAQCAtMjU5LDYgKzI1OSw0MyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgKCppbnRjX2VuYWJsZV9ub3ByaW9fZm5zW10pKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJdW5zaWduZWQgbG9uZyBoYW5kbGUsCisJCQkJCXZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKKwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nKSwKKwkJCQkJdW5zaWduZWQgaW50IGlycSkgPSB7CisJW01PREVfRU5BQkxFX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCisJW01PREVfTUFTS19SRUddID0gaW50Y19tb2RlX3plcm8sCisJW01PREVfRFVBTF9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAorCVtNT0RFX1BSSU9fUkVHXSA9IGludGNfbW9kZV9maWVsZCwKKwlbTU9ERV9QQ0xSX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCit9OworCitzdGF0aWMgdm9pZCBpbnRjX2VuYWJsZV9kaXNhYmxlKHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCXVuc2lnbmVkIGxvbmcgaGFuZGxlLCBpbnQgZG9fZW5hYmxlKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBpbnQgY3B1OworCXZvaWQgKCpmbikodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywKKwkJICAgdm9pZCAoKikodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyksCisJCSAgIHVuc2lnbmVkIGludCk7CisKKwlpZiAoZG9fZW5hYmxlKSB7CisJCWZvciAoY3B1ID0gMDsgY3B1IDwgU01QX05SKGQsIF9JTlRDX0FERFJfRShoYW5kbGUpKTsgY3B1KyspIHsKKwkJCWFkZHIgPSBJTlRDX1JFRyhkLCBfSU5UQ19BRERSX0UoaGFuZGxlKSwgY3B1KTsKKwkJCWZuID0gaW50Y19lbmFibGVfbm9wcmlvX2Zuc1tfSU5UQ19NT0RFKGhhbmRsZSldOworCQkJZm4oYWRkciwgaGFuZGxlLCBpbnRjX3JlZ19mbnNbX0lOVENfRk4oaGFuZGxlKV0sIDApOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChjcHUgPSAwOyBjcHUgPCBTTVBfTlIoZCwgX0lOVENfQUREUl9EKGhhbmRsZSkpOyBjcHUrKykgeworCQkJYWRkciA9IElOVENfUkVHKGQsIF9JTlRDX0FERFJfRChoYW5kbGUpLCBjcHUpOworCQkJZm4gPSBpbnRjX2Rpc2FibGVfZm5zW19JTlRDX01PREUoaGFuZGxlKV07CisJCQlmbihhZGRyLCBoYW5kbGUsIGludGNfcmVnX2Zuc1tfSU5UQ19GTihoYW5kbGUpXSwgMCk7CisJCX0KKwl9Cit9CisKIHN0YXRpYyBpbnQgaW50Y19zZXRfd2FrZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgb24pCiB7CiAJcmV0dXJuIDA7IC8qIGFsbG93IHdha2V1cCwgYnV0IHNldHVwIGhhcmR3YXJlIGluIGludGNfc3VzcGVuZCgpICovCkBAIC00MDAsMTEgKzQzNywxMSBAQAogc3RhdGljIGludGNfZW51bSBfX2luaXQgaW50Y19ncnBfaWQoc3RydWN0IGludGNfZGVzYyAqZGVzYywKIAkJCQkgICAgaW50Y19lbnVtIGVudW1faWQpCiB7Ci0Jc3RydWN0IGludGNfZ3JvdXAgKmcgPSBkZXNjLT5ncm91cHM7CisJc3RydWN0IGludGNfZ3JvdXAgKmcgPSBkZXNjLT5ody5ncm91cHM7CiAJdW5zaWduZWQgaW50IGksIGo7CiAKLQlmb3IgKGkgPSAwOyBnICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX2dyb3VwczsgaSsrKSB7Ci0JCWcgPSBkZXNjLT5ncm91cHMgKyBpOworCWZvciAoaSA9IDA7IGcgJiYgZW51bV9pZCAmJiBpIDwgZGVzYy0+aHcubnJfZ3JvdXBzOyBpKyspIHsKKwkJZyA9IGRlc2MtPmh3Lmdyb3VwcyArIGk7CiAKIAkJZm9yIChqID0gMDsgZy0+ZW51bV9pZHNbal07IGorKykgewogCQkJaWYgKGctPmVudW1faWRzW2pdICE9IGVudW1faWQpCkBAIC00MTcsMTkgKzQ1NCwyMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX21hc2tfZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAotCQkJCQkgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAotCQkJCQkgIGludGNfZW51bSBlbnVtX2lkLCBpbnQgZG9fZ3JwcykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IF9pbnRjX21hc2tfZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAorCQkJCQkgICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKKwkJCQkJICAgaW50Y19lbnVtIGVudW1faWQsCisJCQkJCSAgIHVuc2lnbmVkIGludCAqcmVnX2lkeCwKKwkJCQkJICAgdW5zaWduZWQgaW50ICpmbGRfaWR4KQogewotCXN0cnVjdCBpbnRjX21hc2tfcmVnICptciA9IGRlc2MtPm1hc2tfcmVnczsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgZm4sIG1vZGU7CisJc3RydWN0IGludGNfbWFza19yZWcgKm1yID0gZGVzYy0+aHcubWFza19yZWdzOworCXVuc2lnbmVkIGludCBmbiwgbW9kZTsKIAl1bnNpZ25lZCBsb25nIHJlZ19lLCByZWdfZDsKIAotCWZvciAoaSA9IDA7IG1yICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX21hc2tfcmVnczsgaSsrKSB7Ci0JCW1yID0gZGVzYy0+bWFza19yZWdzICsgaTsKKwl3aGlsZSAobXIgJiYgZW51bV9pZCAmJiAqcmVnX2lkeCA8IGRlc2MtPmh3Lm5yX21hc2tfcmVncykgeworCQltciA9IGRlc2MtPmh3Lm1hc2tfcmVncyArICpyZWdfaWR4OwogCi0JCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKG1yLT5lbnVtX2lkcyk7IGorKykgewotCQkJaWYgKG1yLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQorCQlmb3IgKDsgKmZsZF9pZHggPCBBUlJBWV9TSVpFKG1yLT5lbnVtX2lkcyk7ICgqZmxkX2lkeCkrKykgeworCQkJaWYgKG1yLT5lbnVtX2lkc1sqZmxkX2lkeF0gIT0gZW51bV9pZCkKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKG1yLT5zZXRfcmVnICYmIG1yLT5jbHJfcmVnKSB7CkBAIC00NTUsMjkgKzQ5NCw0OSBAQAogCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2UpLAogCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2QpLAogCQkJCQkxLAotCQkJCQkobXItPnJlZ193aWR0aCAtIDEpIC0gaik7CisJCQkJCShtci0+cmVnX3dpZHRoIC0gMSkgLSAqZmxkX2lkeCk7CiAJCX0KKworCQkqZmxkX2lkeCA9IDA7CisJCSgqcmVnX2lkeCkrKzsKIAl9CiAKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19tYXNrX2RhdGEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKKwkJCQkJICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKKwkJCQkJICBpbnRjX2VudW0gZW51bV9pZCwgaW50IGRvX2dycHMpCit7CisJdW5zaWduZWQgaW50IGkgPSAwOworCXVuc2lnbmVkIGludCBqID0gMDsKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJcmV0ID0gX2ludGNfbWFza19kYXRhKGRlc2MsIGQsIGVudW1faWQsICZpLCAmaik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCWlmIChkb19ncnBzKQogCQlyZXR1cm4gaW50Y19tYXNrX2RhdGEoZGVzYywgZCwgaW50Y19ncnBfaWQoZGVzYywgZW51bV9pZCksIDApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGludGNfcHJpb19kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCi0JCQkJCSAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCi0JCQkJCSAgaW50Y19lbnVtIGVudW1faWQsIGludCBkb19ncnBzKQorc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgX2ludGNfcHJpb19kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCisJCQkJCSAgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCQkgICBpbnRjX2VudW0gZW51bV9pZCwKKwkJCQkJICAgdW5zaWduZWQgaW50ICpyZWdfaWR4LAorCQkJCQkgICB1bnNpZ25lZCBpbnQgKmZsZF9pZHgpCiB7Ci0Jc3RydWN0IGludGNfcHJpb19yZWcgKnByID0gZGVzYy0+cHJpb19yZWdzOwotCXVuc2lnbmVkIGludCBpLCBqLCBmbiwgbW9kZSwgYml0OworCXN0cnVjdCBpbnRjX3ByaW9fcmVnICpwciA9IGRlc2MtPmh3LnByaW9fcmVnczsKKwl1bnNpZ25lZCBpbnQgZm4sIG4sIG1vZGUsIGJpdDsKIAl1bnNpZ25lZCBsb25nIHJlZ19lLCByZWdfZDsKIAotCWZvciAoaSA9IDA7IHByICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX3ByaW9fcmVnczsgaSsrKSB7Ci0JCXByID0gZGVzYy0+cHJpb19yZWdzICsgaTsKKwl3aGlsZSAocHIgJiYgZW51bV9pZCAmJiAqcmVnX2lkeCA8IGRlc2MtPmh3Lm5yX3ByaW9fcmVncykgeworCQlwciA9IGRlc2MtPmh3LnByaW9fcmVncyArICpyZWdfaWR4OwogCi0JCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHByLT5lbnVtX2lkcyk7IGorKykgewotCQkJaWYgKHByLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQorCQlmb3IgKDsgKmZsZF9pZHggPCBBUlJBWV9TSVpFKHByLT5lbnVtX2lkcyk7ICgqZmxkX2lkeCkrKykgeworCQkJaWYgKHByLT5lbnVtX2lkc1sqZmxkX2lkeF0gIT0gZW51bV9pZCkKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKHByLT5zZXRfcmVnICYmIHByLT5jbHJfcmVnKSB7CkBAIC00OTUsMzQgKzU1NCw3OSBAQAogCQkJfQogCiAJCQlmbiArPSAocHItPnJlZ193aWR0aCA+PiAzKSAtIDE7CisJCQluID0gKmZsZF9pZHggKyAxOwogCi0JCQlCVUdfT04oKGogKyAxKSAqIHByLT5maWVsZF93aWR0aCA+IHByLT5yZWdfd2lkdGgpOworCQkJQlVHX09OKG4gKiBwci0+ZmllbGRfd2lkdGggPiBwci0+cmVnX3dpZHRoKTsKIAotCQkJYml0ID0gcHItPnJlZ193aWR0aCAtICgoaiArIDEpICogcHItPmZpZWxkX3dpZHRoKTsKKwkJCWJpdCA9IHByLT5yZWdfd2lkdGggLSAobiAqIHByLT5maWVsZF93aWR0aCk7CiAKIAkJCXJldHVybiBfSU5UQ19NSyhmbiwgbW9kZSwKIAkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19lKSwKIAkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19kKSwKIAkJCQkJcHItPmZpZWxkX3dpZHRoLCBiaXQpOwogCQl9CisKKwkJKmZsZF9pZHggPSAwOworCQkoKnJlZ19pZHgpKys7CiAJfQogCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IGludGNfcHJpb19kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCisJCQkJCSAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCisJCQkJCSAgaW50Y19lbnVtIGVudW1faWQsIGludCBkb19ncnBzKQoreworCXVuc2lnbmVkIGludCBpID0gMDsKKwl1bnNpZ25lZCBpbnQgaiA9IDA7CisJdW5zaWduZWQgaW50IHJldDsKKworCXJldCA9IF9pbnRjX3ByaW9fZGF0YShkZXNjLCBkLCBlbnVtX2lkLCAmaSwgJmopOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAlpZiAoZG9fZ3JwcykKIAkJcmV0dXJuIGludGNfcHJpb19kYXRhKGRlc2MsIGQsIGludGNfZ3JwX2lkKGRlc2MsIGVudW1faWQpLCAwKTsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgaW50Y19lbmFibGVfZGlzYWJsZV9lbnVtKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCisJCQkJCSAgICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKKwkJCQkJICAgIGludGNfZW51bSBlbnVtX2lkLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGludCBpLCBqLCBkYXRhOworCisJLyogZ28gdGhyb3VnaCBhbmQgZW5hYmxlL2Rpc2FibGUgYWxsIG1hc2sgYml0cyAqLworCWkgPSBqID0gMDsKKwlkbyB7CisJCWRhdGEgPSBfaW50Y19tYXNrX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgJmksICZqKTsKKwkJaWYgKGRhdGEpCisJCQlpbnRjX2VuYWJsZV9kaXNhYmxlKGQsIGRhdGEsIGVuYWJsZSk7CisJCWorKzsKKwl9IHdoaWxlIChkYXRhKTsKKworCS8qIGdvIHRocm91Z2ggYW5kIGVuYWJsZS9kaXNhYmxlIGFsbCBwcmlvcml0eSBmaWVsZHMgKi8KKwlpID0gaiA9IDA7CisJZG8geworCQlkYXRhID0gX2ludGNfcHJpb19kYXRhKGRlc2MsIGQsIGVudW1faWQsICZpLCAmaik7CisJCWlmIChkYXRhKQorCQkJaW50Y19lbmFibGVfZGlzYWJsZShkLCBkYXRhLCBlbmFibGUpOworCisJCWorKzsKKwl9IHdoaWxlIChkYXRhKTsKK30KKwogc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19hY2tfZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAogCQkJCQkgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAogCQkJCQkgIGludGNfZW51bSBlbnVtX2lkKQogewotCXN0cnVjdCBpbnRjX21hc2tfcmVnICptciA9IGRlc2MtPmFja19yZWdzOworCXN0cnVjdCBpbnRjX21hc2tfcmVnICptciA9IGRlc2MtPmh3LmFja19yZWdzOwogCXVuc2lnbmVkIGludCBpLCBqLCBmbiwgbW9kZTsKIAl1bnNpZ25lZCBsb25nIHJlZ19lLCByZWdfZDsKIAotCWZvciAoaSA9IDA7IG1yICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX2Fja19yZWdzOyBpKyspIHsKLQkJbXIgPSBkZXNjLT5hY2tfcmVncyArIGk7CisJZm9yIChpID0gMDsgbXIgJiYgZW51bV9pZCAmJiBpIDwgZGVzYy0+aHcubnJfYWNrX3JlZ3M7IGkrKykgeworCQltciA9IGRlc2MtPmh3LmFja19yZWdzICsgaTsKIAogCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShtci0+ZW51bV9pZHMpOyBqKyspIHsKIAkJCWlmIChtci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKQEAgLTU0OSwxMSArNjUzLDExIEBACiAJCQkJCSAgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAogCQkJCQkgICBpbnRjX2VudW0gZW51bV9pZCkKIHsKLQlzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgKnNyID0gZGVzYy0+c2Vuc2VfcmVnczsKKwlzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgKnNyID0gZGVzYy0+aHcuc2Vuc2VfcmVnczsKIAl1bnNpZ25lZCBpbnQgaSwgaiwgZm4sIGJpdDsKIAotCWZvciAoaSA9IDA7IHNyICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX3NlbnNlX3JlZ3M7IGkrKykgewotCQlzciA9IGRlc2MtPnNlbnNlX3JlZ3MgKyBpOworCWZvciAoaSA9IDA7IHNyICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPmh3Lm5yX3NlbnNlX3JlZ3M7IGkrKykgeworCQlzciA9IGRlc2MtPmh3LnNlbnNlX3JlZ3MgKyBpOwogCiAJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHNyLT5lbnVtX2lkcyk7IGorKykgewogCQkJaWYgKHNyLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQpAQCAtNjU2LDcgKzc2MCw3IEBACiAJLyogaXJxIHNob3VsZCBiZSBkaXNhYmxlZCBieSBkZWZhdWx0ICovCiAJZC0+Y2hpcC5tYXNrKGlycSk7CiAKLQlpZiAoZGVzYy0+YWNrX3JlZ3MpCisJaWYgKGRlc2MtPmh3LmFja19yZWdzKQogCQlhY2tfaGFuZGxlW2lycV0gPSBpbnRjX2Fja19kYXRhKGRlc2MsIGQsIGVudW1faWQpOwogfQogCkBAIC02ODQsNiArNzg4LDcgQEAKIHZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKQogewogCXVuc2lnbmVkIGludCBpLCBrLCBzbXA7CisJc3RydWN0IGludGNfaHdfZGVzYyAqaHcgPSAmZGVzYy0+aHc7CiAJc3RydWN0IGludGNfZGVzY19pbnQgKmQ7CiAKIAlkID0ga3phbGxvYyhzaXplb2YoKmQpLCBHRlBfTk9XQUlUKTsKQEAgLTY5MSwxMCArNzk2LDEwIEBACiAJSU5JVF9MSVNUX0hFQUQoJmQtPmxpc3QpOwogCWxpc3RfYWRkKCZkLT5saXN0LCAmaW50Y19saXN0KTsKIAotCWQtPm5yX3JlZyA9IGRlc2MtPm1hc2tfcmVncyA/IGRlc2MtPm5yX21hc2tfcmVncyAqIDIgOiAwOwotCWQtPm5yX3JlZyArPSBkZXNjLT5wcmlvX3JlZ3MgPyBkZXNjLT5ucl9wcmlvX3JlZ3MgKiAyIDogMDsKLQlkLT5ucl9yZWcgKz0gZGVzYy0+c2Vuc2VfcmVncyA/IGRlc2MtPm5yX3NlbnNlX3JlZ3MgOiAwOwotCWQtPm5yX3JlZyArPSBkZXNjLT5hY2tfcmVncyA/IGRlc2MtPm5yX2Fja19yZWdzIDogMDsKKwlkLT5ucl9yZWcgPSBody0+bWFza19yZWdzID8gaHctPm5yX21hc2tfcmVncyAqIDIgOiAwOworCWQtPm5yX3JlZyArPSBody0+cHJpb19yZWdzID8gaHctPm5yX3ByaW9fcmVncyAqIDIgOiAwOworCWQtPm5yX3JlZyArPSBody0+c2Vuc2VfcmVncyA/IGh3LT5ucl9zZW5zZV9yZWdzIDogMDsKKwlkLT5ucl9yZWcgKz0gaHctPmFja19yZWdzID8gaHctPm5yX2Fja19yZWdzIDogMDsKIAogCWQtPnJlZyA9IGt6YWxsb2MoZC0+bnJfcmVnICogc2l6ZW9mKCpkLT5yZWcpLCBHRlBfTk9XQUlUKTsKICNpZmRlZiBDT05GSUdfU01QCkBAIC03MDIsMzAgKzgwNywzMSBAQAogI2VuZGlmCiAJayA9IDA7CiAKLQlpZiAoZGVzYy0+bWFza19yZWdzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl9tYXNrX3JlZ3M7IGkrKykgewotCQkJc21wID0gSVNfU01QKGRlc2MtPm1hc2tfcmVnc1tpXSk7Ci0JCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPm1hc2tfcmVnc1tpXS5zZXRfcmVnLCBzbXApOwotCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5tYXNrX3JlZ3NbaV0uY2xyX3JlZywgc21wKTsKKwlpZiAoaHctPm1hc2tfcmVncykgeworCQlmb3IgKGkgPSAwOyBpIDwgaHctPm5yX21hc2tfcmVnczsgaSsrKSB7CisJCQlzbXAgPSBJU19TTVAoaHctPm1hc2tfcmVnc1tpXSk7CisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGh3LT5tYXNrX3JlZ3NbaV0uc2V0X3JlZywgc21wKTsKKwkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgaHctPm1hc2tfcmVnc1tpXS5jbHJfcmVnLCBzbXApOwogCQl9CiAJfQogCi0JaWYgKGRlc2MtPnByaW9fcmVncykgewotCQlkLT5wcmlvID0ga3phbGxvYyhkZXNjLT5ucl92ZWN0b3JzICogc2l6ZW9mKCpkLT5wcmlvKSwgR0ZQX05PV0FJVCk7CisJaWYgKGh3LT5wcmlvX3JlZ3MpIHsKKwkJZC0+cHJpbyA9IGt6YWxsb2MoaHctPm5yX3ZlY3RvcnMgKiBzaXplb2YoKmQtPnByaW8pLAorCQkJCSAgR0ZQX05PV0FJVCk7CiAKLQkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3ByaW9fcmVnczsgaSsrKSB7Ci0JCQlzbXAgPSBJU19TTVAoZGVzYy0+cHJpb19yZWdzW2ldKTsKLQkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+cHJpb19yZWdzW2ldLnNldF9yZWcsIHNtcCk7Ci0JCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPnByaW9fcmVnc1tpXS5jbHJfcmVnLCBzbXApOworCQlmb3IgKGkgPSAwOyBpIDwgaHctPm5yX3ByaW9fcmVnczsgaSsrKSB7CisJCQlzbXAgPSBJU19TTVAoaHctPnByaW9fcmVnc1tpXSk7CisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGh3LT5wcmlvX3JlZ3NbaV0uc2V0X3JlZywgc21wKTsKKwkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgaHctPnByaW9fcmVnc1tpXS5jbHJfcmVnLCBzbXApOwogCQl9CiAJfQogCi0JaWYgKGRlc2MtPnNlbnNlX3JlZ3MpIHsKLQkJZC0+c2Vuc2UgPSBremFsbG9jKGRlc2MtPm5yX3ZlY3RvcnMgKiBzaXplb2YoKmQtPnNlbnNlKSwgR0ZQX05PV0FJVCk7CisJaWYgKGh3LT5zZW5zZV9yZWdzKSB7CisJCWQtPnNlbnNlID0ga3phbGxvYyhody0+bnJfdmVjdG9ycyAqIHNpemVvZigqZC0+c2Vuc2UpLAorCQkJCSAgIEdGUF9OT1dBSVQpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl9zZW5zZV9yZWdzOyBpKyspIHsKLQkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+c2Vuc2VfcmVnc1tpXS5yZWcsIDApOwotCQl9CisJCWZvciAoaSA9IDA7IGkgPCBody0+bnJfc2Vuc2VfcmVnczsgaSsrKQorCQkJayArPSBzYXZlX3JlZyhkLCBrLCBody0+c2Vuc2VfcmVnc1tpXS5yZWcsIDApOwogCX0KIAogCWQtPmNoaXAubmFtZSA9IGRlc2MtPm5hbWU7CkBAIC03MzgsMTggKzg0NCwyNiBAQAogCWQtPmNoaXAuc2V0X3R5cGUgPSBpbnRjX3NldF9zZW5zZTsKIAlkLT5jaGlwLnNldF93YWtlID0gaW50Y19zZXRfd2FrZTsKIAotCWlmIChkZXNjLT5hY2tfcmVncykgewotCQlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfYWNrX3JlZ3M7IGkrKykKLQkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+YWNrX3JlZ3NbaV0uc2V0X3JlZywgMCk7CisJaWYgKGh3LT5hY2tfcmVncykgeworCQlmb3IgKGkgPSAwOyBpIDwgaHctPm5yX2Fja19yZWdzOyBpKyspCisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGh3LT5hY2tfcmVnc1tpXS5zZXRfcmVnLCAwKTsKIAogCQlkLT5jaGlwLm1hc2tfYWNrID0gaW50Y19tYXNrX2FjazsKIAl9CiAKKwkvKiBkaXNhYmxlIGJpdHMgbWF0Y2hpbmcgZm9yY2VfZGlzYWJsZSBiZWZvcmUgcmVnaXN0ZXJpbmcgaXJxcyAqLworCWlmIChkZXNjLT5mb3JjZV9kaXNhYmxlKQorCQlpbnRjX2VuYWJsZV9kaXNhYmxlX2VudW0oZGVzYywgZCwgZGVzYy0+Zm9yY2VfZGlzYWJsZSwgMCk7CisKKwkvKiBkaXNhYmxlIGJpdHMgbWF0Y2hpbmcgZm9yY2VfZW5hYmxlIGJlZm9yZSByZWdpc3RlcmluZyBpcnFzICovCisJaWYgKGRlc2MtPmZvcmNlX2VuYWJsZSkKKwkJaW50Y19lbmFibGVfZGlzYWJsZV9lbnVtKGRlc2MsIGQsIGRlc2MtPmZvcmNlX2VuYWJsZSwgMCk7CisKIAlCVUdfT04oayA+IDI1Nik7IC8qIF9JTlRDX0FERFJfRSgpIGFuZCBfSU5UQ19BRERSX0QoKSBhcmUgOCBiaXRzICovCiAKIAkvKiByZWdpc3RlciB0aGUgdmVjdG9ycyBvbmUgYnkgb25lICovCi0JZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3ZlY3RvcnM7IGkrKykgewotCQlzdHJ1Y3QgaW50Y192ZWN0ICp2ZWN0ID0gZGVzYy0+dmVjdG9ycyArIGk7CisJZm9yIChpID0gMDsgaSA8IGh3LT5ucl92ZWN0b3JzOyBpKyspIHsKKwkJc3RydWN0IGludGNfdmVjdCAqdmVjdCA9IGh3LT52ZWN0b3JzICsgaTsKIAkJdW5zaWduZWQgaW50IGlycSA9IGV2dDJpcnEodmVjdC0+dmVjdCk7CiAJCXN0cnVjdCBpcnFfZGVzYyAqaXJxX2Rlc2M7CiAKQEAgLTc2NCw4ICs4NzgsOCBAQAogCiAJCWludGNfcmVnaXN0ZXJfaXJxKGRlc2MsIGQsIHZlY3QtPmVudW1faWQsIGlycSk7CiAKLQkJZm9yIChrID0gaSArIDE7IGsgPCBkZXNjLT5ucl92ZWN0b3JzOyBrKyspIHsKLQkJCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3QyID0gZGVzYy0+dmVjdG9ycyArIGs7CisJCWZvciAoayA9IGkgKyAxOyBrIDwgaHctPm5yX3ZlY3RvcnM7IGsrKykgeworCQkJc3RydWN0IGludGNfdmVjdCAqdmVjdDIgPSBody0+dmVjdG9ycyArIGs7CiAJCQl1bnNpZ25lZCBpbnQgaXJxMiA9IGV2dDJpcnEodmVjdDItPnZlY3QpOwogCiAJCQlpZiAodmVjdC0+ZW51bV9pZCAhPSB2ZWN0Mi0+ZW51bV9pZCkKQEAgLTc4NSwxMSArODk5LDE1IEBACiAJCQl2ZWN0Mi0+ZW51bV9pZCA9IDA7CiAKIAkJCS8qIHJlZGlyZWN0IHRoaXMgaW50ZXJydXB0cyB0byB0aGUgZmlyc3Qgb25lICovCi0JCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEyLCAmZC0+Y2hpcCwKLQkJCQkJaW50Y19yZWRpcmVjdF9pcnEsICJyZWRpcmVjdCIpOworCQkJc2V0X2lycV9jaGlwKGlycTIsICZkdW1teV9pcnFfY2hpcCk7CisJCQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihpcnEyLCBpbnRjX3JlZGlyZWN0X2lycSk7CiAJCQlzZXRfaXJxX2RhdGEoaXJxMiwgKHZvaWQgKilpcnEpOwogCQl9CiAJfQorCisJLyogZW5hYmxlIGJpdHMgbWF0Y2hpbmcgZm9yY2VfZW5hYmxlIGFmdGVyIHJlZ2lzdGVyaW5nIGlycXMgKi8KKwlpZiAoZGVzYy0+Zm9yY2VfZW5hYmxlKQorCQlpbnRjX2VuYWJsZV9kaXNhYmxlX2VudW0oZGVzYywgZCwgZGVzYy0+Zm9yY2VfZW5hYmxlLCAxKTsKIH0KIAogc3RhdGljIGludCBpbnRjX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtODcyLDcgKzk5MCw3IEBACiAvKgogICogRHluYW1pYyBJUlEgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgY3JlYXRlX2lycV9vbl9ub2RlKHVuc2lnbmVkIGludCBpcnFfd2FudCwgaW50IG5vZGUpCit1bnNpZ25lZCBpbnQgY3JlYXRlX2lycV9ucih1bnNpZ25lZCBpbnQgaXJxX3dhbnQsIGludCBub2RlKQogewogCXVuc2lnbmVkIGludCBpcnEgPSAwLCBuZXc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTg4MSwyNCArOTk5LDI4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CiAKIAkvKgotCSAqIEZpcnN0IHRyeSB0aGUgd2FudGVkIElSUSwgdGhlbiBzY2FuLgorCSAqIEZpcnN0IHRyeSB0aGUgd2FudGVkIElSUQogCSAqLwotCWlmICh0ZXN0X2FuZF9zZXRfYml0KGlycV93YW50LCBpbnRjX2lycV9tYXApKSB7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoaXJxX3dhbnQsIGludGNfaXJxX21hcCkgPT0gMCkgeworCQluZXcgPSBpcnFfd2FudDsKKwl9IGVsc2UgeworCQkvKiAuLiB0aGVuIGZhbGwgYmFjayB0byBzY2FubmluZy4gKi8KIAkJbmV3ID0gZmluZF9maXJzdF96ZXJvX2JpdChpbnRjX2lycV9tYXAsIG5yX2lycXMpOwogCQlpZiAodW5saWtlbHkobmV3ID09IG5yX2lycXMpKQogCQkJZ290byBvdXRfdW5sb2NrOwogCi0JCWRlc2MgPSBpcnFfdG9fZGVzY19hbGxvY19ub2RlKG5ldywgbm9kZSk7Ci0JCWlmICh1bmxpa2VseSghZGVzYykpIHsKLQkJCXByX2luZm8oImNhbid0IGdldCBpcnFfZGVzYyBmb3IgJWRcbiIsIG5ldyk7Ci0JCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KLQotCQlkZXNjID0gbW92ZV9pcnFfZGVzYyhkZXNjLCBub2RlKTsKIAkJX19zZXRfYml0KG5ldywgaW50Y19pcnFfbWFwKTsKLQkJaXJxID0gbmV3OwogCX0KIAorCWRlc2MgPSBpcnFfdG9fZGVzY19hbGxvY19ub2RlKG5ldywgbm9kZSk7CisJaWYgKHVubGlrZWx5KCFkZXNjKSkgeworCQlwcl9pbmZvKCJjYW4ndCBnZXQgaXJxX2Rlc2MgZm9yICVkXG4iLCBuZXcpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJZGVzYyA9IG1vdmVfaXJxX2Rlc2MoZGVzYywgbm9kZSk7CisJaXJxID0gbmV3OworCiBvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CiAKQEAgLTkxMyw3ICsxMDM1LDcgQEAKIAlpbnQgbmlkID0gY3B1X3RvX25vZGUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlpbnQgaXJxOwogCi0JaXJxID0gY3JlYXRlX2lycV9vbl9ub2RlKE5SX0lSUVNfTEVHQUNZLCBuaWQpOworCWlycSA9IGNyZWF0ZV9pcnFfbnIoTlJfSVJRU19MRUdBQ1ksIG5pZCk7CiAJaWYgKGlycSA9PSAwKQogCQlpcnEgPSAtMTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9wZmMuYyBiL2RyaXZlcnMvc2gvcGZjLmMKaW5kZXggMDgyNjA0ZS4uY2YwMzAzYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2gvcGZjLmMKKysrIGIvZHJpdmVycy9zaC9wZmMuYwpAQCAtMzM3LDEyICszMzcsMzkgQEAKIAkJaWYgKCFlbnVtX2lkKQogCQkJYnJlYWs7CiAKKwkJLyogZmlyc3QgY2hlY2sgaWYgdGhpcyBpcyBhIGZ1bmN0aW9uIGVudW0gKi8KIAkJaW5fcmFuZ2UgPSBlbnVtX2luX3JhbmdlKGVudW1faWQsICZncGlvYy0+ZnVuY3Rpb24pOwotCQlpZiAoIWluX3JhbmdlICYmIHJhbmdlKSB7Ci0JCQlpbl9yYW5nZSA9IGVudW1faW5fcmFuZ2UoZW51bV9pZCwgcmFuZ2UpOworCQlpZiAoIWluX3JhbmdlKSB7CisJCQkvKiBub3QgYSBmdW5jdGlvbiBlbnVtICovCisJCQlpZiAocmFuZ2UpIHsKKwkJCQkvKgorCQkJCSAqIG90aGVyIHJhbmdlIGV4aXN0cywgc28gdGhpcyBwaW4gaXMKKwkJCQkgKiBhIHJlZ3VsYXIgR1BJTyBwaW4gdGhhdCBub3cgaXMgYmVpbmcKKwkJCQkgKiBib3VuZCB0byBhIHNwZWNpZmljIGRpcmVjdGlvbi4KKwkJCQkgKgorCQkJCSAqIGZvciB0aGlzIGNhc2Ugd2Ugb25seSBhbGxvdyBmdW5jdGlvbiBlbnVtcworCQkJCSAqIGFuZCB0aGUgZW51bXMgdGhhdCBtYXRjaCB0aGUgb3RoZXIgcmFuZ2UuCisJCQkJICovCisJCQkJaW5fcmFuZ2UgPSBlbnVtX2luX3JhbmdlKGVudW1faWQsIHJhbmdlKTsKIAotCQkJaWYgKGluX3JhbmdlICYmIGVudW1faWQgPT0gcmFuZ2UtPmZvcmNlKQotCQkJCWNvbnRpbnVlOworCQkJCS8qCisJCQkJICogc3BlY2lhbCBjYXNlIHBhc3MgdGhyb3VnaCBmb3IgZml4ZWQKKwkJCQkgKiBpbnB1dC1vbmx5IG9yIG91dHB1dC1vbmx5IHBpbnMgd2l0aG91dAorCQkJCSAqIGZ1bmN0aW9uIGVudW0gcmVnaXN0ZXIgYXNzb2NpYXRpb24uCisJCQkJICovCisJCQkJaWYgKGluX3JhbmdlICYmIGVudW1faWQgPT0gcmFuZ2UtPmZvcmNlKQorCQkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBubyBvdGhlciByYW5nZSBleGlzdHMsIHNvIHRoaXMgcGluCisJCQkJICogbXVzdCB0aGVuIGJlIG9mIHRoZSBmdW5jdGlvbiB0eXBlLgorCQkJCSAqCisJCQkJICogYWxsb3cgZnVuY3Rpb24gdHlwZSBwaW5zIHRvIHNlbGVjdAorCQkJCSAqIGFueSBjb21iaW5hdGlvbiBvZiBmdW5jdGlvbi9pbi9vdXQKKwkJCQkgKiBpbiB0aGVpciBNQVJLIGxpc3RzLgorCQkJCSAqLworCQkJCWluX3JhbmdlID0gMTsKKwkJCX0KIAkJfQogCiAJCWlmICghaW5fcmFuZ2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9LY29uZmlnIGIvZHJpdmVycy9zcGkvS2NvbmZpZwppbmRleCBmNTVlYjAxLi4wZmVlOTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3BpL0tjb25maWcKQEAgLTEwMCw2ICsxMDAsMjMgQEAKIAkgIGluZXhwZW5zaXZlIGJhdHRlcnkgcG93ZXJlZCBtaWNyb2NvbnRyb2xsZXIgZXZhbHVhdGlvbiBib2FyZC4KIAkgIFRoaXMgc2FtZSBjYWJsZSBjYW4gYmUgdXNlZCB0byBmbGFzaCBuZXcgZmlybXdhcmUuCiAKK2NvbmZpZyBTUElfQ09MREZJUkVfUVNQSQorCXRyaXN0YXRlICJGcmVlc2NhbGUgQ29sZGZpcmUgUVNQSSBjb250cm9sbGVyIgorCWRlcGVuZHMgb24gKE01MjB4IHx8IE01MjN4IHx8IE01MjQ5IHx8IE01Mjd4IHx8IE01Mjh4IHx8IE01MzJ4KQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQ29sZGZpcmUgUVNQSSBjb250cm9sbGVyIGluIG1hc3RlcgorCSAgbW9kZS4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgY29sZGZpcmVfcXNwaS4KKworY29uZmlnIFNQSV9EQVZJTkNJCisJdHJpc3RhdGUgIlNQSSBjb250cm9sbGVyIGRyaXZlciBmb3IgRGFWaW5jaS9EQTh4eCBTb0MncyIKKwlkZXBlbmRzIG9uIFNQSV9NQVNURVIgJiYgQVJDSF9EQVZJTkNJCisJc2VsZWN0IFNQSV9CSVRCQU5HCisJaGVscAorCSAgU1BJIG1hc3RlciBjb250cm9sbGVyIGZvciBEYVZpbmNpIGFuZCBEQTh4eCBTUEkgbW9kdWxlcy4KKwogY29uZmlnIFNQSV9HUElPCiAJdHJpc3RhdGUgIkdQSU8tYmFzZWQgYml0YmFuZ2luZyBTUEkgTWFzdGVyIgogCWRlcGVuZHMgb24gR0VORVJJQ19HUElPCkBAIC0zMDgsNyArMzI1LDcgQEAKICMKIAogY29uZmlnIFNQSV9ERVNJR05XQVJFCi0JYm9vbCAiRGVzaWduV2FyZSBTUEkgY29udHJvbGxlciBjb3JlIHN1cHBvcnQiCisJdHJpc3RhdGUgIkRlc2lnbldhcmUgU1BJIGNvbnRyb2xsZXIgY29yZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gU1BJX01BU1RFUgogCWhlbHAKIAkgIGdlbmVyYWwgZHJpdmVyIGZvciBTUEkgY29udHJvbGxlciBjb3JlIGZyb20gRGVzaWduV2FyZQpAQCAtMzE3LDYgKzMzNCwxMCBAQAogCXRyaXN0YXRlICJQQ0kgaW50ZXJmYWNlIGRyaXZlciBmb3IgRFcgU1BJIGNvcmUiCiAJZGVwZW5kcyBvbiBTUElfREVTSUdOV0FSRSAmJiBQQ0kKIAorY29uZmlnIFNQSV9EV19NTUlPCisJdHJpc3RhdGUgIk1lbW9yeS1tYXBwZWQgaW8gaW50ZXJmYWNlIGRyaXZlciBmb3IgRFcgU1BJIGNvcmUiCisJZGVwZW5kcyBvbiBTUElfREVTSUdOV0FSRSAmJiBIQVZFX0NMSworCiAjCiAjIFRoZXJlIGFyZSBsb3RzIG9mIFNQSSBkZXZpY2UgdHlwZXMsIHdpdGggc2Vuc29ycyBhbmQgbWVtb3J5CiAjIGJlaW5nIHByb2JhYmx5IHRoZSBtb3N0IHdpZGVseSB1c2VkIG9uZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9NYWtlZmlsZSBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCmluZGV4IGYzZDI4MTAuLmQ3ZDBmODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCkBAIC0xNiw4ICsxNiwxMSBAQAogb2JqLSQoQ09ORklHX1NQSV9CSVRCQU5HKQkJKz0gc3BpX2JpdGJhbmcubwogb2JqLSQoQ09ORklHX1NQSV9BVTE1NTApCQkrPSBhdTE1NTBfc3BpLm8KIG9iai0kKENPTkZJR19TUElfQlVUVEVSRkxZKQkJKz0gc3BpX2J1dHRlcmZseS5vCitvYmotJChDT05GSUdfU1BJX0NPTERGSVJFX1FTUEkpCQkrPSBjb2xkZmlyZV9xc3BpLm8KK29iai0kKENPTkZJR19TUElfREFWSU5DSSkJCSs9IGRhdmluY2lfc3BpLm8KIG9iai0kKENPTkZJR19TUElfREVTSUdOV0FSRSkJCSs9IGR3X3NwaS5vCiBvYmotJChDT05GSUdfU1BJX0RXX1BDSSkJCSs9IGR3X3NwaV9wY2kubworb2JqLSQoQ09ORklHX1NQSV9EV19NTUlPKQkJKz0gZHdfc3BpX21taW8ubwogb2JqLSQoQ09ORklHX1NQSV9HUElPKQkJCSs9IHNwaV9ncGlvLm8KIG9iai0kKENPTkZJR19TUElfSU1YKQkJCSs9IHNwaV9pbXgubwogb2JqLSQoQ09ORklHX1NQSV9MTTcwX0xMUCkJCSs9IHNwaV9sbTcwbGxwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYyBiL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYwppbmRleCBmZjViYmI5Li45YWViNjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMKKysrIGIvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jCkBAIC0zNjMsNiArMzYzLDcgQEAKIAl2b2lkCQkJCSpyeF9lbmQ7CiAJZW51bSBzc3BfcmVhZGluZwkJcmVhZDsKIAllbnVtIHNzcF93cml0aW5nCQl3cml0ZTsKKwl1MzIJCQkJZXhwX2ZpZm9fbGV2ZWw7CiB9OwogCiAvKioKQEAgLTUwMSw2ICs1MDIsOSBAQAogCQl3aGlsZSAocmVhZHcoU1NQX1NSKHBsMDIyLT52aXJ0YmFzZSkpICYgU1NQX1NSX01BU0tfUk5FKQogCQkJcmVhZHcoU1NQX0RSKHBsMDIyLT52aXJ0YmFzZSkpOwogCX0gd2hpbGUgKChyZWFkdyhTU1BfU1IocGwwMjItPnZpcnRiYXNlKSkgJiBTU1BfU1JfTUFTS19CU1kpICYmIGxpbWl0LS0pOworCisJcGwwMjItPmV4cF9maWZvX2xldmVsID0gMDsKKwogCXJldHVybiBsaW1pdDsKIH0KIApAQCAtNTgzLDEwICs1ODcsOSBAQAogCSAqIGVycm9ucyBpbiA4Yml0IHdpZGUgdHJhbnNmZXJzIG9uIEFSTSB2YXJpYW50cyAoanVzdCA4IHdvcmRzCiAJICogRklGTywgbWVhbnMgb25seSA4eDggPSA2NCBiaXRzIGluIEZJRk8pIGF0IGxlYXN0LgogCSAqCi0JICogRklYTUU6IGN1cnJlbnRseSB3ZSBoYXZlIG5vIGxvZ2ljIHRvIGFjY291bnQgZm9yIHRoaXMuCi0JICogcGVyaGFwcyB0aGVyZSBpcyBldmVuIHNvbWV0aGluZyBicm9rZW4gaW4gSFcgcmVnYXJkaW5nCi0JICogOGJpdCB0cmFuc2ZlcnMgKGl0IGRvZXNuJ3QgZmFpbCBvbiAxNmJpdCkgc28gdGhpcyBuZWVkcwotCSAqIG1vcmUgaW52ZXN0aWdhdGlvbi4uLgorCSAqIFRvIHByZXZlbnQgdGhpcyBpc3N1ZSwgdGhlIFRYIEZJRk8gaXMgb25seSBmaWxsZWQgdG8gdGhlCisJICogdW51c2VkIFJYIEZJRk8gZmlsbCBsZW5ndGgsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUgVFgKKwkgKiBGSUZPIHN0YXR1cyBmbGFnIGluZGljYXRlcy4KIAkgKi8KIAlkZXZfZGJnKCZwbDAyMi0+YWRldi0+ZGV2LAogCQkiJXMsIHJ4OiAlcCwgcnhlbmQ6ICVwLCB0eDogJXAsIHR4ZW5kOiAlcFxuIiwKQEAgLTYxMywxMSArNjE2LDEyIEBACiAJCQlicmVhazsKIAkJfQogCQlwbDAyMi0+cnggKz0gKHBsMDIyLT5jdXJfY2hpcC0+bl9ieXRlcyk7CisJCXBsMDIyLT5leHBfZmlmb19sZXZlbC0tOwogCX0KIAkvKgotCSAqIFdyaXRlIGFzIG11Y2ggYXMgeW91IGNhbiwgd2hpbGUga2VlcGluZyBhbiBleWUgb24gdGhlIFJYIEZJRk8hCisJICogV3JpdGUgYXMgbXVjaCBhcyBwb3NzaWJsZSB1cCB0byB0aGUgUlggRklGTyBzaXplCiAJICovCi0Jd2hpbGUgKChyZWFkdyhTU1BfU1IocGwwMjItPnZpcnRiYXNlKSkgJiBTU1BfU1JfTUFTS19UTkYpCisJd2hpbGUgKChwbDAyMi0+ZXhwX2ZpZm9fbGV2ZWwgPCBwbDAyMi0+dmVuZG9yLT5maWZvZGVwdGgpCiAJICAgICAgICYmIChwbDAyMi0+dHggPCBwbDAyMi0+dHhfZW5kKSkgewogCQlzd2l0Y2ggKHBsMDIyLT53cml0ZSkgewogCQljYXNlIFdSSVRJTkdfTlVMTDoKQEAgLTYzNCw2ICs2MzgsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJcGwwMjItPnR4ICs9IChwbDAyMi0+Y3VyX2NoaXAtPm5fYnl0ZXMpOworCQlwbDAyMi0+ZXhwX2ZpZm9fbGV2ZWwrKzsKIAkJLyoKIAkJICogVGhpcyBpbm5lciByZWFkZXIgdGFrZXMgY2FyZSBvZiB0aGluZ3MgYXBwZWFyaW5nIGluIHRoZSBSWAogCQkgKiBGSUZPIGFzIHdlJ3JlIHRyYW5zbWl0dGluZy4gVGhpcyB3aWxsIGhhcHBlbiBhIGxvdCBzaW5jZSB0aGUKQEAgLTY2MCw2ICs2NjUsNyBAQAogCQkJCWJyZWFrOwogCQkJfQogCQkJcGwwMjItPnJ4ICs9IChwbDAyMi0+Y3VyX2NoaXAtPm5fYnl0ZXMpOworCQkJcGwwMjItPmV4cF9maWZvX2xldmVsLS07CiAJCX0KIAl9CiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2F1MTU1MF9zcGkuYyBiL2RyaXZlcnMvc3BpL2F1MTU1MF9zcGkuYwppbmRleCBjZmQ1ZmY5Li5iYThhYzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9hdTE1NTBfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvYXUxNTUwX3NwaS5jCkBAIC00MTIsMTEgKzQxMiwxMyBAQAogCX0KIAogCS8qIHB1dCBidWZmZXJzIG9uIHRoZSByaW5nICovCi0JcmVzID0gYXUxeHh4X2RiZG1hX3B1dF9kZXN0KGh3LT5kbWFfcnhfY2gsIGh3LT5yeCwgdC0+bGVuKTsKKwlyZXMgPSBhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoaHctPmRtYV9yeF9jaCwgdmlydF90b19waHlzKGh3LT5yeCksCisJCQkJICAgIHQtPmxlbiwgRERNQV9GTEFHU19JRSk7CiAJaWYgKCFyZXMpCiAJCWRldl9lcnIoaHctPmRldiwgInJ4IGRtYSBwdXQgZGVzdCBlcnJvclxuIik7CiAKLQlyZXMgPSBhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShody0+ZG1hX3R4X2NoLCAodm9pZCAqKWh3LT50eCwgdC0+bGVuKTsKKwlyZXMgPSBhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShody0+ZG1hX3R4X2NoLCB2aXJ0X3RvX3BoeXMoaHctPnR4KSwKKwkJCQkgICAgICB0LT5sZW4sIERETUFfRkxBR1NfSUUpOwogCWlmICghcmVzKQogCQlkZXZfZXJyKGh3LT5kZXYsICJ0eCBkbWEgcHV0IHNvdXJjZSBlcnJvclxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2NvbGRmaXJlX3FzcGkuYyBiL2RyaXZlcnMvc3BpL2NvbGRmaXJlX3FzcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWJlM2VmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvY29sZGZpcmVfcXNwaS5jCkBAIC0wLDAgKzEsNjQwIEBACisvKgorICogRnJlZXNjYWxlL01vdG9yb2xhIENvbGRmaXJlIFF1ZXVlZCBTUEkgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMTAgU3RldmVuIEtpbmcgPHNma2luZ0BmZHdkYy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICoKKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKyNpbmNsdWRlIDxhc20vY29sZGZpcmUuaD4KKyNpbmNsdWRlIDxhc20vbWNmcXNwaS5oPgorCisjZGVmaW5lCURSSVZFUl9OQU1FICJtY2Zxc3BpIgorCisjZGVmaW5lCU1DRlFTUElfQlVTQ0xLCQkJKE1DRl9CVVNDTEsgLyAyKQorCisjZGVmaW5lCU1DRlFTUElfUU1SCQkJMHgwMAorI2RlZmluZQkJTUNGUVNQSV9RTVJfTVNUUgkweDgwMDAKKyNkZWZpbmUJCU1DRlFTUElfUU1SX0NQT0wJMHgwMjAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FNUl9DUEhBCTB4MDEwMAorI2RlZmluZQlNQ0ZRU1BJX1FETFlSCQkJMHgwNAorI2RlZmluZQkJTUNGUVNQSV9RRExZUl9TUEUJMHg4MDAwCisjZGVmaW5lCU1DRlFTUElfUVdSCQkJMHgwOAorI2RlZmluZQkJTUNGUVNQSV9RV1JfSEFMVAkweDgwMDAKKyNkZWZpbmUJCU1DRlFTUElfUVdSX1dSRU4JMHg0MDAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FXUl9DU0lWCTB4MTAwMAorI2RlZmluZQlNQ0ZRU1BJX1FJUgkJCTB4MEMKKyNkZWZpbmUJCU1DRlFTUElfUUlSX1dDRUZCCTB4ODAwMAorI2RlZmluZQkJTUNGUVNQSV9RSVJfQUJSVEIJMHg0MDAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FJUl9BQlJUTAkweDEwMDAKKyNkZWZpbmUJCU1DRlFTUElfUUlSX1dDRUZFCTB4MDgwMAorI2RlZmluZQkJTUNGUVNQSV9RSVJfQUJSVEUJMHgwNDAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FJUl9TUElGRQkweDAxMDAKKyNkZWZpbmUJCU1DRlFTUElfUUlSX1dDRUYJMHgwMDA4CisjZGVmaW5lCQlNQ0ZRU1BJX1FJUl9BQlJUCTB4MDAwNAorI2RlZmluZQkJTUNGUVNQSV9RSVJfU1BJRgkweDAwMDEKKyNkZWZpbmUJTUNGUVNQSV9RQVIJCQkweDAxMAorI2RlZmluZQkJTUNGUVNQSV9RQVJfVFhCVUYJMHgwMAorI2RlZmluZQkJTUNGUVNQSV9RQVJfUlhCVUYJMHgxMAorI2RlZmluZQkJTUNGUVNQSV9RQVJfQ01EQlVGCTB4MjAKKyNkZWZpbmUJTUNGUVNQSV9RRFIJCQkweDAxNAorI2RlZmluZQlNQ0ZRU1BJX1FDUgkJCTB4MDE0CisjZGVmaW5lCQlNQ0ZRU1BJX1FDUl9DT05UCTB4ODAwMAorI2RlZmluZQkJTUNGUVNQSV9RQ1JfQklUU0UJMHg0MDAwCisjZGVmaW5lCQlNQ0ZRU1BJX1FDUl9EVAkJMHgyMDAwCisKK3N0cnVjdCBtY2Zxc3BpIHsKKwl2b2lkIF9faW9tZW0gKmlvYmFzZTsKKwlpbnQgaXJxOworCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgbWNmcXNwaV9jc19jb250cm9sICpjc19jb250cm9sOworCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHE7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya3E7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgbXNncTsKK307CisKK3N0YXRpYyB2b2lkIG1jZnFzcGlfd3JfcW1yKHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpLCB1MTYgdmFsKQoreworCXdyaXRldyh2YWwsIG1jZnFzcGktPmlvYmFzZSArIE1DRlFTUElfUU1SKTsKK30KKworc3RhdGljIHZvaWQgbWNmcXNwaV93cl9xZGx5cihzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSwgdTE2IHZhbCkKK3sKKwl3cml0ZXcodmFsLCBtY2Zxc3BpLT5pb2Jhc2UgKyBNQ0ZRU1BJX1FETFlSKTsKK30KKworc3RhdGljIHUxNiBtY2Zxc3BpX3JkX3FkbHlyKHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpKQoreworCXJldHVybiByZWFkdyhtY2Zxc3BpLT5pb2Jhc2UgKyBNQ0ZRU1BJX1FETFlSKTsKK30KKworc3RhdGljIHZvaWQgbWNmcXNwaV93cl9xd3Ioc3RydWN0IG1jZnFzcGkgKm1jZnFzcGksIHUxNiB2YWwpCit7CisJd3JpdGV3KHZhbCwgbWNmcXNwaS0+aW9iYXNlICsgTUNGUVNQSV9RV1IpOworfQorCitzdGF0aWMgdm9pZCBtY2Zxc3BpX3dyX3FpcihzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSwgdTE2IHZhbCkKK3sKKwl3cml0ZXcodmFsLCBtY2Zxc3BpLT5pb2Jhc2UgKyBNQ0ZRU1BJX1FJUik7Cit9CisKK3N0YXRpYyB2b2lkIG1jZnFzcGlfd3JfcWFyKHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpLCB1MTYgdmFsKQoreworCXdyaXRldyh2YWwsIG1jZnFzcGktPmlvYmFzZSArIE1DRlFTUElfUUFSKTsKK30KKworc3RhdGljIHZvaWQgbWNmcXNwaV93cl9xZHIoc3RydWN0IG1jZnFzcGkgKm1jZnFzcGksIHUxNiB2YWwpCit7CisJd3JpdGV3KHZhbCwgbWNmcXNwaS0+aW9iYXNlICsgTUNGUVNQSV9RRFIpOworfQorCitzdGF0aWMgdTE2IG1jZnFzcGlfcmRfcWRyKHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpKQoreworCXJldHVybiByZWFkdyhtY2Zxc3BpLT5pb2Jhc2UgKyBNQ0ZRU1BJX1FEUik7Cit9CisKK3N0YXRpYyB2b2lkIG1jZnFzcGlfY3Nfc2VsZWN0KHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpLCB1OCBjaGlwX3NlbGVjdCwKKwkJCSAgICBib29sIGNzX2hpZ2gpCit7CisJbWNmcXNwaS0+Y3NfY29udHJvbC0+c2VsZWN0KG1jZnFzcGktPmNzX2NvbnRyb2wsIGNoaXBfc2VsZWN0LCBjc19oaWdoKTsKK30KKworc3RhdGljIHZvaWQgbWNmcXNwaV9jc19kZXNlbGVjdChzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSwgdTggY2hpcF9zZWxlY3QsCisJCQkJYm9vbCBjc19oaWdoKQoreworCW1jZnFzcGktPmNzX2NvbnRyb2wtPmRlc2VsZWN0KG1jZnFzcGktPmNzX2NvbnRyb2wsIGNoaXBfc2VsZWN0LCBjc19oaWdoKTsKK30KKworc3RhdGljIGludCBtY2Zxc3BpX2NzX3NldHVwKHN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpKQoreworCXJldHVybiAobWNmcXNwaS0+Y3NfY29udHJvbCAmJiBtY2Zxc3BpLT5jc19jb250cm9sLT5zZXR1cCkgPworCQltY2Zxc3BpLT5jc19jb250cm9sLT5zZXR1cChtY2Zxc3BpLT5jc19jb250cm9sKSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIG1jZnFzcGlfY3NfdGVhcmRvd24oc3RydWN0IG1jZnFzcGkgKm1jZnFzcGkpCit7CisJaWYgKG1jZnFzcGktPmNzX2NvbnRyb2wgJiYgbWNmcXNwaS0+Y3NfY29udHJvbC0+dGVhcmRvd24pCisJCW1jZnFzcGktPmNzX2NvbnRyb2wtPnRlYXJkb3duKG1jZnFzcGktPmNzX2NvbnRyb2wpOworfQorCitzdGF0aWMgdTggbWNmcXNwaV9xbXJfYmF1ZCh1MzIgc3BlZWRfaHopCit7CisJcmV0dXJuIGNsYW1wKChNQ0ZRU1BJX0JVU0NMSyArIHNwZWVkX2h6IC0gMSkgLyBzcGVlZF9oeiwgMnUsIDI1NXUpOworfQorCitzdGF0aWMgYm9vbCBtY2Zxc3BpX3FkbHlyX3NwZShzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSkKK3sKKwlyZXR1cm4gbWNmcXNwaV9yZF9xZGx5cihtY2Zxc3BpKSAmIE1DRlFTUElfUURMWVJfU1BFOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWNmcXNwaV9pcnFfaGFuZGxlcihpbnQgdGhpc19pcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSA9IGRldl9pZDsKKworCS8qIGNsZWFyIGludGVycnVwdCAqLworCW1jZnFzcGlfd3JfcWlyKG1jZnFzcGksIE1DRlFTUElfUUlSX1NQSUZFIHwgTUNGUVNQSV9RSVJfU1BJRik7CisJd2FrZV91cCgmbWNmcXNwaS0+d2FpdHEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBtY2Zxc3BpX3RyYW5zZmVyX21zZzgoc3RydWN0IG1jZnFzcGkgKm1jZnFzcGksIHVuc2lnbmVkIGNvdW50LAorCQkJCSAgY29uc3QgdTggKnR4YnVmLCB1OCAqcnhidWYpCit7CisJdW5zaWduZWQgaSwgbiwgb2Zmc2V0ID0gMDsKKworCW4gPSBtaW4oY291bnQsIDE2dSk7CisKKwltY2Zxc3BpX3dyX3FhcihtY2Zxc3BpLCBNQ0ZRU1BJX1FBUl9DTURCVUYpOworCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisJCW1jZnFzcGlfd3JfcWRyKG1jZnFzcGksIE1DRlFTUElfUUNSX0JJVFNFKTsKKworCW1jZnFzcGlfd3JfcWFyKG1jZnFzcGksIE1DRlFTUElfUUFSX1RYQlVGKTsKKwlpZiAodHhidWYpCisJCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisJCQltY2Zxc3BpX3dyX3FkcihtY2Zxc3BpLCAqdHhidWYrKyk7CisJZWxzZQorCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKwkJCW1jZnFzcGlfd3JfcWRyKG1jZnFzcGksIDApOworCisJY291bnQgLT0gbjsKKwlpZiAoY291bnQpIHsKKwkJdTE2IHF3ciA9IDB4ZjA4OworCQltY2Zxc3BpX3dyX3F3cihtY2Zxc3BpLCAweDcwMCk7CisJCW1jZnFzcGlfd3JfcWRseXIobWNmcXNwaSwgTUNGUVNQSV9RRExZUl9TUEUpOworCisJCWRvIHsKKwkJCXdhaXRfZXZlbnQobWNmcXNwaS0+d2FpdHEsICFtY2Zxc3BpX3FkbHlyX3NwZShtY2Zxc3BpKSk7CisJCQltY2Zxc3BpX3dyX3F3cihtY2Zxc3BpLCBxd3IpOworCQkJbWNmcXNwaV93cl9xZGx5cihtY2Zxc3BpLCBNQ0ZRU1BJX1FETFlSX1NQRSk7CisJCQlpZiAocnhidWYpIHsKKwkJCQltY2Zxc3BpX3dyX3FhcihtY2Zxc3BpLAorCQkJCQkgICAgICAgTUNGUVNQSV9RQVJfUlhCVUYgKyBvZmZzZXQpOworCQkJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisJCQkJCSpyeGJ1ZisrID0gbWNmcXNwaV9yZF9xZHIobWNmcXNwaSk7CisJCQl9CisJCQluID0gbWluKGNvdW50LCA4dSk7CisJCQlpZiAodHhidWYpIHsKKwkJCQltY2Zxc3BpX3dyX3FhcihtY2Zxc3BpLAorCQkJCQkgICAgICAgTUNGUVNQSV9RQVJfVFhCVUYgKyBvZmZzZXQpOworCQkJCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisJCQkJCW1jZnFzcGlfd3JfcWRyKG1jZnFzcGksICp0eGJ1ZisrKTsKKwkJCX0KKwkJCXF3ciA9IChvZmZzZXQgPyAweDgwOCA6IDApICsgKChuIC0gMSkgPDwgOCk7CisJCQlvZmZzZXQgXj0gODsKKwkJCWNvdW50IC09IG47CisJCX0gd2hpbGUgKGNvdW50KTsKKwkJd2FpdF9ldmVudChtY2Zxc3BpLT53YWl0cSwgIW1jZnFzcGlfcWRseXJfc3BlKG1jZnFzcGkpKTsKKwkJbWNmcXNwaV93cl9xd3IobWNmcXNwaSwgcXdyKTsKKwkJbWNmcXNwaV93cl9xZGx5cihtY2Zxc3BpLCBNQ0ZRU1BJX1FETFlSX1NQRSk7CisJCWlmIChyeGJ1ZikgeworCQkJbWNmcXNwaV93cl9xYXIobWNmcXNwaSwgTUNGUVNQSV9RQVJfUlhCVUYgKyBvZmZzZXQpOworCQkJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKwkJCQkqcnhidWYrKyA9IG1jZnFzcGlfcmRfcWRyKG1jZnFzcGkpOworCQkJb2Zmc2V0IF49IDg7CisJCX0KKwl9IGVsc2UgeworCQltY2Zxc3BpX3dyX3F3cihtY2Zxc3BpLCAobiAtIDEpIDw8IDgpOworCQltY2Zxc3BpX3dyX3FkbHlyKG1jZnFzcGksIE1DRlFTUElfUURMWVJfU1BFKTsKKwl9CisJd2FpdF9ldmVudChtY2Zxc3BpLT53YWl0cSwgIW1jZnFzcGlfcWRseXJfc3BlKG1jZnFzcGkpKTsKKwlpZiAocnhidWYpIHsKKwkJbWNmcXNwaV93cl9xYXIobWNmcXNwaSwgTUNGUVNQSV9RQVJfUlhCVUYgKyBvZmZzZXQpOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQorCQkJKnJ4YnVmKysgPSBtY2Zxc3BpX3JkX3FkcihtY2Zxc3BpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1jZnFzcGlfdHJhbnNmZXJfbXNnMTYoc3RydWN0IG1jZnFzcGkgKm1jZnFzcGksIHVuc2lnbmVkIGNvdW50LAorCQkJCSAgIGNvbnN0IHUxNiAqdHhidWYsIHUxNiAqcnhidWYpCit7CisJdW5zaWduZWQgaSwgbiwgb2Zmc2V0ID0gMDsKKworCW4gPSBtaW4oY291bnQsIDE2dSk7CisKKwltY2Zxc3BpX3dyX3FhcihtY2Zxc3BpLCBNQ0ZRU1BJX1FBUl9DTURCVUYpOworCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisJCW1jZnFzcGlfd3JfcWRyKG1jZnFzcGksIE1DRlFTUElfUUNSX0JJVFNFKTsKKworCW1jZnFzcGlfd3JfcWFyKG1jZnFzcGksIE1DRlFTUElfUUFSX1RYQlVGKTsKKwlpZiAodHhidWYpCisJCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisJCQltY2Zxc3BpX3dyX3FkcihtY2Zxc3BpLCAqdHhidWYrKyk7CisJZWxzZQorCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKwkJCW1jZnFzcGlfd3JfcWRyKG1jZnFzcGksIDApOworCisJY291bnQgLT0gbjsKKwlpZiAoY291bnQpIHsKKwkJdTE2IHF3ciA9IDB4ZjA4OworCQltY2Zxc3BpX3dyX3F3cihtY2Zxc3BpLCAweDcwMCk7CisJCW1jZnFzcGlfd3JfcWRseXIobWNmcXNwaSwgTUNGUVNQSV9RRExZUl9TUEUpOworCisJCWRvIHsKKwkJCXdhaXRfZXZlbnQobWNmcXNwaS0+d2FpdHEsICFtY2Zxc3BpX3FkbHlyX3NwZShtY2Zxc3BpKSk7CisJCQltY2Zxc3BpX3dyX3F3cihtY2Zxc3BpLCBxd3IpOworCQkJbWNmcXNwaV93cl9xZGx5cihtY2Zxc3BpLCBNQ0ZRU1BJX1FETFlSX1NQRSk7CisJCQlpZiAocnhidWYpIHsKKwkJCQltY2Zxc3BpX3dyX3FhcihtY2Zxc3BpLAorCQkJCQkgICAgICAgTUNGUVNQSV9RQVJfUlhCVUYgKyBvZmZzZXQpOworCQkJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisJCQkJCSpyeGJ1ZisrID0gbWNmcXNwaV9yZF9xZHIobWNmcXNwaSk7CisJCQl9CisJCQluID0gbWluKGNvdW50LCA4dSk7CisJCQlpZiAodHhidWYpIHsKKwkJCQltY2Zxc3BpX3dyX3FhcihtY2Zxc3BpLAorCQkJCQkgICAgICAgTUNGUVNQSV9RQVJfVFhCVUYgKyBvZmZzZXQpOworCQkJCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCisJCQkJCW1jZnFzcGlfd3JfcWRyKG1jZnFzcGksICp0eGJ1ZisrKTsKKwkJCX0KKwkJCXF3ciA9IChvZmZzZXQgPyAweDgwOCA6IDB4MDAwKSArICgobiAtIDEpIDw8IDgpOworCQkJb2Zmc2V0IF49IDg7CisJCQljb3VudCAtPSBuOworCQl9IHdoaWxlIChjb3VudCk7CisJCXdhaXRfZXZlbnQobWNmcXNwaS0+d2FpdHEsICFtY2Zxc3BpX3FkbHlyX3NwZShtY2Zxc3BpKSk7CisJCW1jZnFzcGlfd3JfcXdyKG1jZnFzcGksIHF3cik7CisJCW1jZnFzcGlfd3JfcWRseXIobWNmcXNwaSwgTUNGUVNQSV9RRExZUl9TUEUpOworCQlpZiAocnhidWYpIHsKKwkJCW1jZnFzcGlfd3JfcWFyKG1jZnFzcGksIE1DRlFTUElfUUFSX1JYQlVGICsgb2Zmc2V0KTsKKwkJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisJCQkJKnJ4YnVmKysgPSBtY2Zxc3BpX3JkX3FkcihtY2Zxc3BpKTsKKwkJCW9mZnNldCBePSA4OworCQl9CisJfSBlbHNlIHsKKwkJbWNmcXNwaV93cl9xd3IobWNmcXNwaSwgKG4gLSAxKSA8PCA4KTsKKwkJbWNmcXNwaV93cl9xZGx5cihtY2Zxc3BpLCBNQ0ZRU1BJX1FETFlSX1NQRSk7CisJfQorCXdhaXRfZXZlbnQobWNmcXNwaS0+d2FpdHEsICFtY2Zxc3BpX3FkbHlyX3NwZShtY2Zxc3BpKSk7CisJaWYgKHJ4YnVmKSB7CisJCW1jZnFzcGlfd3JfcWFyKG1jZnFzcGksIE1DRlFTUElfUUFSX1JYQlVGICsgb2Zmc2V0KTsKKwkJZm9yIChpID0gMDsgaSA8IG47ICsraSkKKwkJCSpyeGJ1ZisrID0gbWNmcXNwaV9yZF9xZHIobWNmcXNwaSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBtY2Zxc3BpX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtY2Zxc3BpLCB3b3JrKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1jZnFzcGktPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJm1jZnFzcGktPm1zZ3EpKSB7CisJCXN0cnVjdCBzcGlfbWVzc2FnZSAqbXNnOworCQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpOworCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyOworCQlpbnQgc3RhdHVzID0gMDsKKworCQltc2cgPSBjb250YWluZXJfb2YobWNmcXNwaS0+bXNncS5uZXh0LCBzdHJ1Y3Qgc3BpX21lc3NhZ2UsCisJCQkJICAgcXVldWUpOworCisJCWxpc3RfZGVsX2luaXQoJm1jZnFzcGktPm1zZ3EpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2Zxc3BpLT5sb2NrLCBmbGFncyk7CisKKwkJc3BpID0gbXNnLT5zcGk7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh4ZmVyLCAmbXNnLT50cmFuc2ZlcnMsIHRyYW5zZmVyX2xpc3QpIHsKKwkJCWJvb2wgY3NfaGlnaCA9IHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIOworCQkJdTE2IHFtciA9IE1DRlFTUElfUU1SX01TVFI7CisKKwkJCWlmICh4ZmVyLT5iaXRzX3Blcl93b3JkKQorCQkJCXFtciB8PSB4ZmVyLT5iaXRzX3Blcl93b3JkIDw8IDEwOworCQkJZWxzZQorCQkJCXFtciB8PSBzcGktPmJpdHNfcGVyX3dvcmQgPDwgMTA7CisJCQlpZiAoc3BpLT5tb2RlICYgU1BJX0NQSEEpCisJCQkJcW1yIHw9IE1DRlFTUElfUU1SX0NQSEE7CisJCQlpZiAoc3BpLT5tb2RlICYgU1BJX0NQT0wpCisJCQkJcW1yIHw9IE1DRlFTUElfUU1SX0NQT0w7CisJCQlpZiAoeGZlci0+c3BlZWRfaHopCisJCQkJcW1yIHw9IG1jZnFzcGlfcW1yX2JhdWQoeGZlci0+c3BlZWRfaHopOworCQkJZWxzZQorCQkJCXFtciB8PSBtY2Zxc3BpX3Ftcl9iYXVkKHNwaS0+bWF4X3NwZWVkX2h6KTsKKwkJCW1jZnFzcGlfd3JfcW1yKG1jZnFzcGksIHFtcik7CisKKwkJCW1jZnFzcGlfY3Nfc2VsZWN0KG1jZnFzcGksIHNwaS0+Y2hpcF9zZWxlY3QsIGNzX2hpZ2gpOworCisJCQltY2Zxc3BpX3dyX3FpcihtY2Zxc3BpLCBNQ0ZRU1BJX1FJUl9TUElGRSk7CisJCQlpZiAoKHhmZXItPmJpdHNfcGVyX3dvcmQgPyB4ZmVyLT5iaXRzX3Blcl93b3JkIDoKKwkJCQkJCXNwaS0+Yml0c19wZXJfd29yZCkgPT0gOCkKKwkJCQltY2Zxc3BpX3RyYW5zZmVyX21zZzgobWNmcXNwaSwgeGZlci0+bGVuLAorCQkJCQkJICAgICAgeGZlci0+dHhfYnVmLAorCQkJCQkJICAgICAgeGZlci0+cnhfYnVmKTsKKwkJCWVsc2UKKwkJCQltY2Zxc3BpX3RyYW5zZmVyX21zZzE2KG1jZnFzcGksIHhmZXItPmxlbiAvIDIsCisJCQkJCQkgICAgICAgeGZlci0+dHhfYnVmLAorCQkJCQkJICAgICAgIHhmZXItPnJ4X2J1Zik7CisJCQltY2Zxc3BpX3dyX3FpcihtY2Zxc3BpLCAwKTsKKworCQkJaWYgKHhmZXItPmRlbGF5X3VzZWNzKQorCQkJCXVkZWxheSh4ZmVyLT5kZWxheV91c2Vjcyk7CisJCQlpZiAoeGZlci0+Y3NfY2hhbmdlKSB7CisJCQkJaWYgKCFsaXN0X2lzX2xhc3QoJnhmZXItPnRyYW5zZmVyX2xpc3QsCisJCQkJCQkgICZtc2ctPnRyYW5zZmVycykpCisJCQkJCW1jZnFzcGlfY3NfZGVzZWxlY3QobWNmcXNwaSwKKwkJCQkJCQkgICAgc3BpLT5jaGlwX3NlbGVjdCwKKwkJCQkJCQkgICAgY3NfaGlnaCk7CisJCQl9IGVsc2UgeworCQkJCWlmIChsaXN0X2lzX2xhc3QoJnhmZXItPnRyYW5zZmVyX2xpc3QsCisJCQkJCQkgJm1zZy0+dHJhbnNmZXJzKSkKKwkJCQkJbWNmcXNwaV9jc19kZXNlbGVjdChtY2Zxc3BpLAorCQkJCQkJCSAgICBzcGktPmNoaXBfc2VsZWN0LAorCQkJCQkJCSAgICBjc19oaWdoKTsKKwkJCX0KKwkJCW1zZy0+YWN0dWFsX2xlbmd0aCArPSB4ZmVyLT5sZW47CisJCX0KKwkJbXNnLT5zdGF0dXMgPSBzdGF0dXM7CisJCW1zZy0+Y29tcGxldGUobXNnLT5jb250ZXh0KTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWNmcXNwaS0+bG9jaywgZmxhZ3MpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2Zxc3BpLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbWNmcXNwaV90cmFuc2ZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZykKK3sKKwlzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltY2Zxc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHhmZXIsICZtc2ctPnRyYW5zZmVycywgdHJhbnNmZXJfbGlzdCkgeworCQlpZiAoeGZlci0+Yml0c19wZXJfd29yZCAmJiAoKHhmZXItPmJpdHNfcGVyX3dvcmQgPCA4KQorCQkJCQl8fCAoeGZlci0+Yml0c19wZXJfd29yZCA+IDE2KSkpIHsKKwkJCWRldl9kYmcoJnNwaS0+ZGV2LAorCQkJCSIlZCBiaXRzIHBlciB3b3JkIGlzIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkJeGZlci0+Yml0c19wZXJfd29yZCk7CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJaWYgKHhmZXItPnNwZWVkX2h6KSB7CisJCQl1MzIgcmVhbF9zcGVlZCA9IE1DRlFTUElfQlVTQ0xLIC8KKwkJCQltY2Zxc3BpX3Ftcl9iYXVkKHhmZXItPnNwZWVkX2h6KTsKKwkJCWlmIChyZWFsX3NwZWVkICE9IHhmZXItPnNwZWVkX2h6KQorCQkJCWRldl9kYmcoJnNwaS0+ZGV2LAorCQkJCQkidXNpbmcgc3BlZWQgJWQgaW5zdGVhZCBvZiAlZFxuIiwKKwkJCQkJcmVhbF9zcGVlZCwgeGZlci0+c3BlZWRfaHopOworCQl9CisJfQorCW1zZy0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCW1zZy0+YWN0dWFsX2xlbmd0aCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWNmcXNwaS0+bG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJm1zZy0+cXVldWUsICZtY2Zxc3BpLT5tc2dxKTsKKwlxdWV1ZV93b3JrKG1jZnFzcGktPndvcmtxLCAmbWNmcXNwaS0+d29yayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWNmcXNwaS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7CitmYWlsOgorCW1zZy0+c3RhdHVzID0gLUVJTlZBTDsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBtY2Zxc3BpX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJaWYgKChzcGktPmJpdHNfcGVyX3dvcmQgPCA4KSB8fCAoc3BpLT5iaXRzX3Blcl93b3JkID4gMTYpKSB7CisJCWRldl9kYmcoJnNwaS0+ZGV2LCAiJWQgYml0cyBwZXIgd29yZCBpcyBub3Qgc3VwcG9ydGVkXG4iLAorCQkJc3BpLT5iaXRzX3Blcl93b3JkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChzcGktPmNoaXBfc2VsZWN0ID49IHNwaS0+bWFzdGVyLT5udW1fY2hpcHNlbGVjdCkgeworCQlkZXZfZGJnKCZzcGktPmRldiwgIiVkIGNoaXAgc2VsZWN0IGlzIG91dCBvZiByYW5nZVxuIiwKKwkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltY2Zxc3BpX2NzX2Rlc2VsZWN0KHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpLAorCQkJICAgIHNwaS0+Y2hpcF9zZWxlY3QsIHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIKTsKKworCWRldl9kYmcoJnNwaS0+ZGV2LAorCQkJImJpdHMgcGVyIHdvcmQgJWQsIGNoaXAgc2VsZWN0ICVkLCBzcGVlZCAlZCBLSHpcbiIsCisJCQlzcGktPmJpdHNfcGVyX3dvcmQsIHNwaS0+Y2hpcF9zZWxlY3QsCisJCQkoTUNGUVNQSV9CVVNDTEsgLyBtY2Zxc3BpX3Ftcl9iYXVkKHNwaS0+bWF4X3NwZWVkX2h6KSkKKwkJCS8gMTAwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbWNmcXNwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IG1jZnFzcGkgKm1jZnFzcGk7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IG1jZnFzcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJaW50IHN0YXR1czsKKworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJnBkZXYtPmRldiwgc2l6ZW9mKCptY2Zxc3BpKSk7CisJaWYgKG1hc3RlciA9PSBOVUxMKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInNwaV9hbGxvY19tYXN0ZXIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWNmcXNwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAicGxhdGZvcm1fZ2V0X3Jlc291cmNlIGZhaWxlZFxuIik7CisJCXN0YXR1cyA9IC1FTlhJTzsKKwkJZ290byBmYWlsMDsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQlzdGF0dXMgPSAtRUJVU1k7CisJCWdvdG8gZmFpbDA7CisJfQorCisJbWNmcXNwaS0+aW9iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghbWNmcXNwaS0+aW9iYXNlKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBmYWlsMTsKKwl9CisKKwltY2Zxc3BpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChtY2Zxc3BpLT5pcnEgPCAwKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInBsYXRmb3JtX2dldF9pcnEgZmFpbGVkXG4iKTsKKwkJc3RhdHVzID0gLUVOWElPOworCQlnb3RvIGZhaWwyOworCX0KKworCXN0YXR1cyA9IHJlcXVlc3RfaXJxKG1jZnFzcGktPmlycSwgbWNmcXNwaV9pcnFfaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwKKwkJCSAgICAgcGRldi0+bmFtZSwgbWNmcXNwaSk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJyZXF1ZXN0X2lycSBmYWlsZWRcbiIpOworCQlnb3RvIGZhaWwyOworCX0KKworCW1jZnFzcGktPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInFzcGlfY2xrIik7CisJaWYgKElTX0VSUihtY2Zxc3BpLT5jbGspKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNsa19nZXQgZmFpbGVkXG4iKTsKKwkJc3RhdHVzID0gUFRSX0VSUihtY2Zxc3BpLT5jbGspOworCQlnb3RvIGZhaWwzOworCX0KKwljbGtfZW5hYmxlKG1jZnFzcGktPmNsayk7CisKKwltY2Zxc3BpLT53b3JrcSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGRldl9uYW1lKG1hc3Rlci0+ZGV2LnBhcmVudCkpOworCWlmICghbWNmcXNwaS0+d29ya3EpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY3JlYXRlX3dvcmtxdWV1ZSBmYWlsZWRcbiIpOworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw0OworCX0KKwlJTklUX1dPUksoJm1jZnFzcGktPndvcmssIG1jZnFzcGlfd29yayk7CisJc3Bpbl9sb2NrX2luaXQoJm1jZnFzcGktPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZtY2Zxc3BpLT5tc2dxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtY2Zxc3BpLT53YWl0cSk7CisKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAicGxhdGZvcm0gZGF0YSBpcyBtaXNzaW5nXG4iKTsKKwkJZ290byBmYWlsNTsKKwl9CisJbWFzdGVyLT5idXNfbnVtID0gcGRhdGEtPmJ1c19udW07CisJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IHBkYXRhLT5udW1fY2hpcHNlbGVjdDsKKworCW1jZnFzcGktPmNzX2NvbnRyb2wgPSBwZGF0YS0+Y3NfY29udHJvbDsKKwlzdGF0dXMgPSBtY2Zxc3BpX2NzX3NldHVwKG1jZnFzcGkpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiZXJyb3IgaW5pdGlhbGl6aW5nIGNzX2NvbnRyb2xcbiIpOworCQlnb3RvIGZhaWw1OworCX0KKworCW1hc3Rlci0+bW9kZV9iaXRzID0gU1BJX0NTX0hJR0ggfCBTUElfQ1BPTCB8IFNQSV9DUEhBOworCW1hc3Rlci0+c2V0dXAgPSBtY2Zxc3BpX3NldHVwOworCW1hc3Rlci0+dHJhbnNmZXIgPSBtY2Zxc3BpX3RyYW5zZmVyOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWFzdGVyKTsKKworCXN0YXR1cyA9IHNwaV9yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInNwaV9yZWdpc3Rlcl9tYXN0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byBmYWlsNjsKKwl9CisJZGV2X2luZm8oJnBkZXYtPmRldiwgIkNvbGRmaXJlIFFTUEkgYnVzIGRyaXZlclxuIik7CisKKwlyZXR1cm4gMDsKKworZmFpbDY6CisJbWNmcXNwaV9jc190ZWFyZG93bihtY2Zxc3BpKTsKK2ZhaWw1OgorCWRlc3Ryb3lfd29ya3F1ZXVlKG1jZnFzcGktPndvcmtxKTsKK2ZhaWw0OgorCWNsa19kaXNhYmxlKG1jZnFzcGktPmNsayk7CisJY2xrX3B1dChtY2Zxc3BpLT5jbGspOworZmFpbDM6CisJZnJlZV9pcnEobWNmcXNwaS0+aXJxLCBtY2Zxc3BpKTsKK2ZhaWwyOgorCWlvdW5tYXAobWNmcXNwaS0+aW9iYXNlKTsKK2ZhaWwxOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZmFpbDA6CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIkNvbGRmaXJlIFFTUEkgcHJvYmUgZmFpbGVkXG4iKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1jZnFzcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBtY2Zxc3BpICptY2Zxc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKworCS8qIGRpc2FibGUgdGhlIGhhcmR3YXJlIChzZXQgdGhlIGJhdWQgcmF0ZSB0byAwKSAqLworCW1jZnFzcGlfd3JfcW1yKG1jZnFzcGksIE1DRlFTUElfUU1SX01TVFIpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJbWNmcXNwaV9jc190ZWFyZG93bihtY2Zxc3BpKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShtY2Zxc3BpLT53b3JrcSk7CisJY2xrX2Rpc2FibGUobWNmcXNwaS0+Y2xrKTsKKwljbGtfcHV0KG1jZnFzcGktPmNsayk7CisJZnJlZV9pcnEobWNmcXNwaS0+aXJxLCBtY2Zxc3BpKTsKKwlpb3VubWFwKG1jZnFzcGktPmlvYmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJc3BpX3VucmVnaXN0ZXJfbWFzdGVyKG1hc3Rlcik7CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgbWNmcXNwaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWNmcXNwaSAqbWNmcXNwaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKKworCWNsa19kaXNhYmxlKG1jZnFzcGktPmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtY2Zxc3BpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1jZnFzcGkgKm1jZnFzcGkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CisKKwljbGtfZW5hYmxlKG1jZnFzcGktPmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIG1jZnFzcGlfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IG1jZnFzcGlfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG1jZnFzcGlfcmVzdW1lLAorfTsKKworI2RlZmluZQlNQ0ZRU1BJX0RFVl9QTV9PUFMJKCZtY2Zxc3BpX2Rldl9wbV9vcHMpCisjZWxzZQorI2RlZmluZQlNQ0ZRU1BJX0RFVl9QTV9PUFMJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1jZnFzcGlfZHJpdmVyID0geworCS5kcml2ZXIubmFtZQk9IERSSVZFUl9OQU1FLAorCS5kcml2ZXIub3duZXIJPSBUSElTX01PRFVMRSwKKwkuZHJpdmVyLnBtCT0gTUNGUVNQSV9ERVZfUE1fT1BTLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobWNmcXNwaV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWNmcXNwaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbWNmcXNwaV9kcml2ZXIsIG1jZnFzcGlfcHJvYmUpOworfQorbW9kdWxlX2luaXQobWNmcXNwaV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1jZnFzcGlfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtY2Zxc3BpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChtY2Zxc3BpX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gS2luZyA8c2ZraW5nQGZkd2RjLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29sZGZpcmUgUVNQSSBDb250cm9sbGVyIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSSVZFUl9OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2RhdmluY2lfc3BpLmMgYi9kcml2ZXJzL3NwaS9kYXZpbmNpX3NwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNWFiNjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9kYXZpbmNpX3NwaS5jCkBAIC0wLDAgKzEsMTI1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+CisKKyNpbmNsdWRlIDxtYWNoL3NwaS5oPgorI2luY2x1ZGUgPG1hY2gvZWRtYS5oPgorCisjZGVmaW5lIFNQSV9OT19SRVNPVVJDRQkJKChyZXNvdXJjZV9zaXplX3QpLTEpCisKKyNkZWZpbmUgU1BJX01BWF9DSElQU0VMRUNUCTIKKworI2RlZmluZSBDU19ERUZBVUxUCTB4RkYKKworI2RlZmluZSBTUElfQlVGU0laCShTTVBfQ0FDSEVfQllURVMgKyAxKQorI2RlZmluZSBEQVZJTkNJX0RNQV9EQVRBX1RZUEVfUzgJMHgwMQorI2RlZmluZSBEQVZJTkNJX0RNQV9EQVRBX1RZUEVfUzE2CTB4MDIKKyNkZWZpbmUgREFWSU5DSV9ETUFfREFUQV9UWVBFX1MzMgkweDA0CisKKyNkZWZpbmUgU1BJRk1UX1BIQVNFX01BU0sJQklUKDE2KQorI2RlZmluZSBTUElGTVRfUE9MQVJJVFlfTUFTSwlCSVQoMTcpCisjZGVmaW5lIFNQSUZNVF9ESVNUSU1FUl9NQVNLCUJJVCgxOCkKKyNkZWZpbmUgU1BJRk1UX1NISUZURElSX01BU0sJQklUKDIwKQorI2RlZmluZSBTUElGTVRfV0FJVEVOQV9NQVNLCUJJVCgyMSkKKyNkZWZpbmUgU1BJRk1UX1BBUklUWUVOQV9NQVNLCUJJVCgyMikKKyNkZWZpbmUgU1BJRk1UX09ERF9QQVJJVFlfTUFTSwlCSVQoMjMpCisjZGVmaW5lIFNQSUZNVF9XREVMQVlfTUFTSwkweDNmMDAwMDAwdQorI2RlZmluZSBTUElGTVRfV0RFTEFZX1NISUZUCTI0CisjZGVmaW5lIFNQSUZNVF9DSEFSTEVOX01BU0sJMHgwMDAwMDAxRnUKKworLyogU1BJR0NSMSAqLworI2RlZmluZSBTUElHQ1IxX1NQSUVOQV9NQVNLCTB4MDEwMDAwMDB1CisKKy8qIFNQSVBDMCAqLworI2RlZmluZSBTUElQQzBfRElGVU5fTUFTSwlCSVQoMTEpCQkvKiBNSVNPICovCisjZGVmaW5lIFNQSVBDMF9ET0ZVTl9NQVNLCUJJVCgxMCkJCS8qIE1PU0kgKi8KKyNkZWZpbmUgU1BJUEMwX0NMS0ZVTl9NQVNLCUJJVCg5KQkJLyogQ0xLICovCisjZGVmaW5lIFNQSVBDMF9TUElFTkFfTUFTSwlCSVQoOCkJCS8qIG5SRUFEWSAqLworI2RlZmluZSBTUElQQzBfRU4xRlVOX01BU0sJQklUKDEpCisjZGVmaW5lIFNQSVBDMF9FTjBGVU5fTUFTSwlCSVQoMCkKKworI2RlZmluZSBTUElJTlRfTUFTS0FMTAkJMHgwMTAxMDM1RgorI2RlZmluZSBTUElfSU5UTFZMXzEJCTB4MDAwMDAxRkZ1CisjZGVmaW5lIFNQSV9JTlRMVkxfMAkJMHgwMDAwMDAwMHUKKworLyogU1BJREFUMSAqLworI2RlZmluZSBTUElEQVQxX0NTSE9MRF9TSElGVAkyOAorI2RlZmluZSBTUElEQVQxX0NTTlJfU0hJRlQJMTYKKyNkZWZpbmUgU1BJR0NSMV9DTEtNT0RfTUFTSwlCSVQoMSkKKyNkZWZpbmUgU1BJR0NSMV9NQVNURVJfTUFTSyAgICAgQklUKDApCisjZGVmaW5lIFNQSUdDUjFfTE9PUEJBQ0tfTUFTSwlCSVQoMTYpCisKKy8qIFNQSUJVRiAqLworI2RlZmluZSBTUElCVUZfVFhGVUxMX01BU0sJQklUKDI5KQorI2RlZmluZSBTUElCVUZfUlhFTVBUWV9NQVNLCUJJVCgzMSkKKworLyogRXJyb3IgTWFza3MgKi8KKyNkZWZpbmUgU1BJRkxHX0RMRU5fRVJSX01BU0sJCUJJVCgwKQorI2RlZmluZSBTUElGTEdfVElNRU9VVF9NQVNLCQlCSVQoMSkKKyNkZWZpbmUgU1BJRkxHX1BBUkVSUl9NQVNLCQlCSVQoMikKKyNkZWZpbmUgU1BJRkxHX0RFU1lOQ19NQVNLCQlCSVQoMykKKyNkZWZpbmUgU1BJRkxHX0JJVEVSUl9NQVNLCQlCSVQoNCkKKyNkZWZpbmUgU1BJRkxHX09WUlJVTl9NQVNLCQlCSVQoNikKKyNkZWZpbmUgU1BJRkxHX1JYX0lOVFJfTUFTSwkJQklUKDgpCisjZGVmaW5lIFNQSUZMR19UWF9JTlRSX01BU0sJCUJJVCg5KQorI2RlZmluZSBTUElGTEdfQlVGX0lOSVRfQUNUSVZFX01BU0sJQklUKDI0KQorI2RlZmluZSBTUElGTEdfTUFTSwkJCShTUElGTEdfRExFTl9FUlJfTUFTSyBcCisJCQkJfCBTUElGTEdfVElNRU9VVF9NQVNLIHwgU1BJRkxHX1BBUkVSUl9NQVNLIFwKKwkJCQl8IFNQSUZMR19ERVNZTkNfTUFTSyB8IFNQSUZMR19CSVRFUlJfTUFTSyBcCisJCQkJfCBTUElGTEdfT1ZSUlVOX01BU0sgfCBTUElGTEdfUlhfSU5UUl9NQVNLIFwKKwkJCQl8IFNQSUZMR19UWF9JTlRSX01BU0sgXAorCQkJCXwgU1BJRkxHX0JVRl9JTklUX0FDVElWRV9NQVNLKQorCisjZGVmaW5lIFNQSUlOVF9ETEVOX0VSUl9JTlRSCUJJVCgwKQorI2RlZmluZSBTUElJTlRfVElNRU9VVF9JTlRSCUJJVCgxKQorI2RlZmluZSBTUElJTlRfUEFSRVJSX0lOVFIJQklUKDIpCisjZGVmaW5lIFNQSUlOVF9ERVNZTkNfSU5UUglCSVQoMykKKyNkZWZpbmUgU1BJSU5UX0JJVEVSUl9JTlRSCUJJVCg0KQorI2RlZmluZSBTUElJTlRfT1ZSUlVOX0lOVFIJQklUKDYpCisjZGVmaW5lIFNQSUlOVF9SWF9JTlRSCQlCSVQoOCkKKyNkZWZpbmUgU1BJSU5UX1RYX0lOVFIJCUJJVCg5KQorI2RlZmluZSBTUElJTlRfRE1BX1JFUV9FTglCSVQoMTYpCisjZGVmaW5lIFNQSUlOVF9FTkFCTEVfSElHSFoJQklUKDI0KQorCisjZGVmaW5lIFNQSV9UMkNERUxBWV9TSElGVAkxNgorI2RlZmluZSBTUElfQzJUREVMQVlfU0hJRlQJMjQKKworLyogU1BJIENvbnRyb2xsZXIgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNQSUdDUjAJCTB4MDAKKyNkZWZpbmUgU1BJR0NSMQkJMHgwNAorI2RlZmluZSBTUElJTlQJCTB4MDgKKyNkZWZpbmUgU1BJTFZMCQkweDBjCisjZGVmaW5lIFNQSUZMRwkJMHgxMAorI2RlZmluZSBTUElQQzAJCTB4MTQKKyNkZWZpbmUgU1BJUEMxCQkweDE4CisjZGVmaW5lIFNQSVBDMgkJMHgxYworI2RlZmluZSBTUElQQzMJCTB4MjAKKyNkZWZpbmUgU1BJUEM0CQkweDI0CisjZGVmaW5lIFNQSVBDNQkJMHgyOAorI2RlZmluZSBTUElQQzYJCTB4MmMKKyNkZWZpbmUgU1BJUEM3CQkweDMwCisjZGVmaW5lIFNQSVBDOAkJMHgzNAorI2RlZmluZSBTUElEQVQwCQkweDM4CisjZGVmaW5lIFNQSURBVDEJCTB4M2MKKyNkZWZpbmUgU1BJQlVGCQkweDQwCisjZGVmaW5lIFNQSUVNVQkJMHg0NAorI2RlZmluZSBTUElERUxBWQkweDQ4CisjZGVmaW5lIFNQSURFRgkJMHg0YworI2RlZmluZSBTUElGTVQwCQkweDUwCisjZGVmaW5lIFNQSUZNVDEJCTB4NTQKKyNkZWZpbmUgU1BJRk1UMgkJMHg1OAorI2RlZmluZSBTUElGTVQzCQkweDVjCisjZGVmaW5lIFRHSU5UVkVDMAkweDYwCisjZGVmaW5lIFRHSU5UVkVDMQkweDY0CisKK3N0cnVjdCBkYXZpbmNpX3NwaV9zbGF2ZSB7CisJdTMyCWNtZF90b193cml0ZTsKKwl1MzIJY2xrX2N0cmxfdG9fd3JpdGU7CisJdTMyCWJ5dGVzX3Blcl93b3JkOworCXU4CWFjdGl2ZV9jczsKK307CisKKy8qIFdlIGhhdmUgMiBETUEgY2hhbm5lbHMgcGVyIENTLCBvbmUgZm9yIFJYIGFuZCBvbmUgZm9yIFRYICovCitzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hIHsKKwlpbnQJCQlkbWFfdHhfY2hhbm5lbDsKKwlpbnQJCQlkbWFfcnhfY2hhbm5lbDsKKwlpbnQJCQlkbWFfdHhfc3luY19kZXY7CisJaW50CQkJZG1hX3J4X3N5bmNfZGV2OworCWVudW0gZG1hX2V2ZW50X3EJZXZlbnRxOworCisJc3RydWN0IGNvbXBsZXRpb24JZG1hX3R4X2NvbXBsZXRpb247CisJc3RydWN0IGNvbXBsZXRpb24JZG1hX3J4X2NvbXBsZXRpb247Cit9OworCisvKiBTUEkgQ29udHJvbGxlciBkcml2ZXIncyBwcml2YXRlIGRhdGEuICovCitzdHJ1Y3QgZGF2aW5jaV9zcGkgeworCXN0cnVjdCBzcGlfYml0YmFuZwliaXRiYW5nOworCXN0cnVjdCBjbGsJCSpjbGs7CisKKwl1OAkJCXZlcnNpb247CisJcmVzb3VyY2Vfc2l6ZV90CQlwYmFzZTsKKwl2b2lkIF9faW9tZW0JCSpiYXNlOworCXNpemVfdAkJCXJlZ2lvbl9zaXplOworCXUzMgkJCWlycTsKKwlzdHJ1Y3QgY29tcGxldGlvbglkb25lOworCisJY29uc3Qgdm9pZAkJKnR4OworCXZvaWQJCQkqcng7CisJdTgJCQkqdG1wX2J1ZjsKKwlpbnQJCQljb3VudDsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hCSpkbWFfY2hhbm5lbHM7CisJc3RydWN0CQkJZGF2aW5jaV9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisKKwl2b2lkCQkJKCpnZXRfcngpKHUzMiByeF9kYXRhLCBzdHJ1Y3QgZGF2aW5jaV9zcGkgKik7CisJdTMyCQkJKCpnZXRfdHgpKHN0cnVjdCBkYXZpbmNpX3NwaSAqKTsKKworCXN0cnVjdCBkYXZpbmNpX3NwaV9zbGF2ZSBzbGF2ZVtTUElfTUFYX0NISVBTRUxFQ1RdOworfTsKKworc3RhdGljIHVuc2lnbmVkIHVzZV9kbWE7CisKK3N0YXRpYyB2b2lkIGRhdmluY2lfc3BpX3J4X2J1Zl91OCh1MzIgZGF0YSwgc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaSkKK3sKKwl1OCAqcnggPSBkYXZpbmNpX3NwaS0+cng7CisKKwkqcngrKyA9ICh1OClkYXRhOworCWRhdmluY2lfc3BpLT5yeCA9IHJ4OworfQorCitzdGF0aWMgdm9pZCBkYXZpbmNpX3NwaV9yeF9idWZfdTE2KHUzMiBkYXRhLCBzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpKQoreworCXUxNiAqcnggPSBkYXZpbmNpX3NwaS0+cng7CisKKwkqcngrKyA9ICh1MTYpZGF0YTsKKwlkYXZpbmNpX3NwaS0+cnggPSByeDsKK30KKworc3RhdGljIHUzMiBkYXZpbmNpX3NwaV90eF9idWZfdTgoc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaSkKK3sKKwl1MzIgZGF0YTsKKwljb25zdCB1OCAqdHggPSBkYXZpbmNpX3NwaS0+dHg7CisKKwlkYXRhID0gKnR4Kys7CisJZGF2aW5jaV9zcGktPnR4ID0gdHg7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyB1MzIgZGF2aW5jaV9zcGlfdHhfYnVmX3UxNihzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpKQoreworCXUzMiBkYXRhOworCWNvbnN0IHUxNiAqdHggPSBkYXZpbmNpX3NwaS0+dHg7CisKKwlkYXRhID0gKnR4Kys7CisJZGF2aW5jaV9zcGktPnR4ID0gdHg7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaW9fYml0cyh2b2lkIF9faW9tZW0gKmFkZHIsIHUzMiBiaXRzKQoreworCXUzMiB2ID0gaW9yZWFkMzIoYWRkcik7CisKKwl2IHw9IGJpdHM7CisJaW93cml0ZTMyKHYsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfaW9fYml0cyh2b2lkIF9faW9tZW0gKmFkZHIsIHUzMiBiaXRzKQoreworCXUzMiB2ID0gaW9yZWFkMzIoYWRkcik7CisKKwl2ICY9IH5iaXRzOworCWlvd3JpdGUzMih2LCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9mbXRfYml0cyh2b2lkIF9faW9tZW0gKmFkZHIsIHUzMiBiaXRzLCBpbnQgY3NfbnVtKQoreworCXNldF9pb19iaXRzKGFkZHIgKyBTUElGTVQwICsgKDB4NCAqIGNzX251bSksIGJpdHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfZm10X2JpdHModm9pZCBfX2lvbWVtICphZGRyLCB1MzIgYml0cywgaW50IGNzX251bSkKK3sKKwljbGVhcl9pb19iaXRzKGFkZHIgKyBTUElGTVQwICsgKDB4NCAqIGNzX251bSksIGJpdHMpOworfQorCitzdGF0aWMgdm9pZCBkYXZpbmNpX3NwaV9zZXRfZG1hX3JlcShjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKworCWlmIChlbmFibGUpCisJCXNldF9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJSU5ULCBTUElJTlRfRE1BX1JFUV9FTik7CisJZWxzZQorCQljbGVhcl9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJSU5ULCBTUElJTlRfRE1BX1JFUV9FTik7Cit9CisKKy8qCisgKiBJbnRlcmZhY2UgdG8gY29udHJvbCB0aGUgY2hpcCBzZWxlY3Qgc2lnbmFsCisgKi8KK3N0YXRpYyB2b2lkIGRhdmluY2lfc3BpX2NoaXBzZWxlY3Qoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IHZhbHVlKQoreworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGk7CisJc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXUzMiBkYXRhMV9yZWdfdmFsID0gMDsKKworCWRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJcGRhdGEgPSBkYXZpbmNpX3NwaS0+cGRhdGE7CisKKwkvKgorCSAqIEJvYXJkIHNwZWNpZmljIGNoaXAgc2VsZWN0IGxvZ2ljIGRlY2lkZXMgdGhlIHBvbGFyaXR5IGFuZCBjcworCSAqIGxpbmUgZm9yIHRoZSBjb250cm9sbGVyCisJICovCisJaWYgKHZhbHVlID09IEJJVEJBTkdfQ1NfSU5BQ1RJVkUpIHsKKwkJc2V0X2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElERUYsIENTX0RFRkFVTFQpOworCisJCWRhdGExX3JlZ192YWwgfD0gQ1NfREVGQVVMVCA8PCBTUElEQVQxX0NTTlJfU0hJRlQ7CisJCWlvd3JpdGUzMihkYXRhMV9yZWdfdmFsLCBkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURBVDEpOworCisJCXdoaWxlICgoaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpCisJCQkJCSYgU1BJQlVGX1JYRU1QVFlfTUFTSykgPT0gMCkKKwkJCWNwdV9yZWxheCgpOworCX0KK30KKworLyoqCisgKiBkYXZpbmNpX3NwaV9zZXR1cF90cmFuc2ZlciAtIFRoaXMgZnVuY3Rpb25zIHdpbGwgZGV0ZXJtaW5lIHRyYW5zZmVyIG1ldGhvZAorICogQHNwaTogc3BpIGRldmljZSBvbiB3aGljaCBkYXRhIHRyYW5zZmVyIHRvIGJlIGRvbmUKKyAqIEB0OiBzcGkgdHJhbnNmZXIgaW4gd2hpY2ggdHJhbnNmZXIgaW5mbyBpcyBmaWxsZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgZGF0YSB0cmFuc2ZlciBtZXRob2QgKDgvMTYvMzIgYml0IHRyYW5zZmVyKS4KKyAqIEl0IHdpbGwgYWxzbyBzZXQgdGhlIFNQSSBDbG9jayBDb250cm9sIHJlZ2lzdGVyIGFjY29yZGluZyB0bworICogU1BJIHNsYXZlIGRldmljZSBmcmVxLgorICovCitzdGF0aWMgaW50IGRhdmluY2lfc3BpX3NldHVwX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisKKwlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpOworCXN0cnVjdCBkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwl1OCBiaXRzX3Blcl93b3JkID0gMDsKKwl1MzIgaHogPSAwLCBwcmVzY2FsZTsKKworCWRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJcGRhdGEgPSBkYXZpbmNpX3NwaS0+cGRhdGE7CisKKwlpZiAodCkgeworCQliaXRzX3Blcl93b3JkID0gdC0+Yml0c19wZXJfd29yZDsKKwkJaHogPSB0LT5zcGVlZF9oejsKKwl9CisKKwkvKiBpZiBiaXRzX3Blcl93b3JkIGlzIG5vdCBzZXQgdGhlbiBzZXQgaXQgZGVmYXVsdCAqLworCWlmICghYml0c19wZXJfd29yZCkKKwkJYml0c19wZXJfd29yZCA9IHNwaS0+Yml0c19wZXJfd29yZDsKKworCS8qCisJICogQXNzaWduIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYXBwcm9wcmlhdGUgdHJhbnNmZXIgbWV0aG9kCisJICogOGJpdCwgMTZiaXQgb3IgMzJiaXQgdHJhbnNmZXIKKwkgKi8KKwlpZiAoYml0c19wZXJfd29yZCA8PSA4ICYmIGJpdHNfcGVyX3dvcmQgPj0gMikgeworCQlkYXZpbmNpX3NwaS0+Z2V0X3J4ID0gZGF2aW5jaV9zcGlfcnhfYnVmX3U4OworCQlkYXZpbmNpX3NwaS0+Z2V0X3R4ID0gZGF2aW5jaV9zcGlfdHhfYnVmX3U4OworCQlkYXZpbmNpX3NwaS0+c2xhdmVbc3BpLT5jaGlwX3NlbGVjdF0uYnl0ZXNfcGVyX3dvcmQgPSAxOworCX0gZWxzZSBpZiAoYml0c19wZXJfd29yZCA8PSAxNiAmJiBiaXRzX3Blcl93b3JkID49IDIpIHsKKwkJZGF2aW5jaV9zcGktPmdldF9yeCA9IGRhdmluY2lfc3BpX3J4X2J1Zl91MTY7CisJCWRhdmluY2lfc3BpLT5nZXRfdHggPSBkYXZpbmNpX3NwaV90eF9idWZfdTE2OworCQlkYXZpbmNpX3NwaS0+c2xhdmVbc3BpLT5jaGlwX3NlbGVjdF0uYnl0ZXNfcGVyX3dvcmQgPSAyOworCX0gZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghaHopCisJCWh6ID0gc3BpLT5tYXhfc3BlZWRfaHo7CisKKwljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgU1BJRk1UX0NIQVJMRU5fTUFTSywKKwkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgYml0c19wZXJfd29yZCAmIDB4MWYsCisJCQlzcGktPmNoaXBfc2VsZWN0KTsKKworCXByZXNjYWxlID0gKChjbGtfZ2V0X3JhdGUoZGF2aW5jaV9zcGktPmNsaykgLyBoeikgLSAxKSAmIDB4ZmY7CisKKwljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgMHgwMDAwZmYwMCwgc3BpLT5jaGlwX3NlbGVjdCk7CisJc2V0X2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLCBwcmVzY2FsZSA8PCA4LCBzcGktPmNoaXBfc2VsZWN0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkYXZpbmNpX3NwaV9kbWFfcnhfY2FsbGJhY2sodW5zaWduZWQgbGNoLCB1MTYgY2hfc3RhdHVzLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSAoc3RydWN0IHNwaV9kZXZpY2UgKilkYXRhOworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGk7CisJc3RydWN0IGRhdmluY2lfc3BpX2RtYSAqZGF2aW5jaV9zcGlfZG1hOworCXN0cnVjdCBkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKworCWRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJZGF2aW5jaV9zcGlfZG1hID0gJihkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzW3NwaS0+Y2hpcF9zZWxlY3RdKTsKKwlwZGF0YSA9IGRhdmluY2lfc3BpLT5wZGF0YTsKKworCWlmIChjaF9zdGF0dXMgPT0gRE1BX0NPTVBMRVRFKQorCQllZG1hX3N0b3AoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCk7CisJZWxzZQorCQllZG1hX2NsZWFuX2NoYW5uZWwoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCk7CisKKwljb21wbGV0ZSgmZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY29tcGxldGlvbik7CisJLyogV2UgbXVzdCBkaXNhYmxlIHRoZSBETUEgUlggcmVxdWVzdCAqLworCWRhdmluY2lfc3BpX3NldF9kbWFfcmVxKHNwaSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRhdmluY2lfc3BpX2RtYV90eF9jYWxsYmFjayh1bnNpZ25lZCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IChzdHJ1Y3Qgc3BpX2RldmljZSAqKWRhdGE7CisJc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaTsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hICpkYXZpbmNpX3NwaV9kbWE7CisJc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCisJZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlkYXZpbmNpX3NwaV9kbWEgPSAmKGRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbc3BpLT5jaGlwX3NlbGVjdF0pOworCXBkYXRhID0gZGF2aW5jaV9zcGktPnBkYXRhOworCisJaWYgKGNoX3N0YXR1cyA9PSBETUFfQ09NUExFVEUpCisJCWVkbWFfc3RvcChkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsKTsKKwllbHNlCisJCWVkbWFfY2xlYW5fY2hhbm5lbChkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsKTsKKworCWNvbXBsZXRlKCZkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jb21wbGV0aW9uKTsKKwkvKiBXZSBtdXN0IGRpc2FibGUgdGhlIERNQSBUWCByZXF1ZXN0ICovCisJZGF2aW5jaV9zcGlfc2V0X2RtYV9yZXEoc3BpLCAwKTsKK30KKworc3RhdGljIGludCBkYXZpbmNpX3NwaV9yZXF1ZXN0X2RtYShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGk7CisJc3RydWN0IGRhdmluY2lfc3BpX2RtYSAqZGF2aW5jaV9zcGlfZG1hOworCXN0cnVjdCBkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpzZGV2OworCWludCByOworCisJZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlkYXZpbmNpX3NwaV9kbWEgPSAmZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tzcGktPmNoaXBfc2VsZWN0XTsKKwlwZGF0YSA9IGRhdmluY2lfc3BpLT5wZGF0YTsKKwlzZGV2ID0gZGF2aW5jaV9zcGktPmJpdGJhbmcubWFzdGVyLT5kZXYucGFyZW50OworCisJciA9IGVkbWFfYWxsb2NfY2hhbm5lbChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9zeW5jX2RldiwKKwkJCQlkYXZpbmNpX3NwaV9kbWFfcnhfY2FsbGJhY2ssIHNwaSwKKwkJCQlkYXZpbmNpX3NwaV9kbWEtPmV2ZW50cSk7CisJaWYgKHIgPCAwKSB7CisJCWRldl9kYmcoc2RldiwgIlVuYWJsZSB0byByZXF1ZXN0IERNQSBjaGFubmVsIGZvciBTUEkgUlhcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCA9IHI7CisJciA9IGVkbWFfYWxsb2NfY2hhbm5lbChkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9zeW5jX2RldiwKKwkJCQlkYXZpbmNpX3NwaV9kbWFfdHhfY2FsbGJhY2ssIHNwaSwKKwkJCQlkYXZpbmNpX3NwaV9kbWEtPmV2ZW50cSk7CisJaWYgKHIgPCAwKSB7CisJCWVkbWFfZnJlZV9jaGFubmVsKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwpOworCQlkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsID0gLTE7CisJCWRldl9kYmcoc2RldiwgIlVuYWJsZSB0byByZXF1ZXN0IERNQSBjaGFubmVsIGZvciBTUEkgVFhcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY2hhbm5lbCA9IHI7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBkYXZpbmNpX3NwaV9zZXR1cCAtIFRoaXMgZnVuY3Rpb25zIHdpbGwgc2V0IGRlZmF1bHQgdHJhbnNmZXIgbWV0aG9kCisgKiBAc3BpOiBzcGkgZGV2aWNlIG9uIHdoaWNoIGRhdGEgdHJhbnNmZXIgdG8gYmUgZG9uZQorICoKKyAqIFRoaXMgZnVuY3Rpb25zIHNldHMgdGhlIGRlZmF1bHQgdHJhbnNmZXIgbWV0aG9kLgorICovCisKK3N0YXRpYyBpbnQgZGF2aW5jaV9zcGlfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGk7CisJc3RydWN0IGRhdmluY2lfc3BpX2RtYSAqZGF2aW5jaV9zcGlfZG1hOworCXN0cnVjdCBkZXZpY2UgKnNkZXY7CisKKwlkYXZpbmNpX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXNkZXYgPSBkYXZpbmNpX3NwaS0+Yml0YmFuZy5tYXN0ZXItPmRldi5wYXJlbnQ7CisKKwkvKiBpZiBiaXRzIHBlciB3b3JkIGxlbmd0aCBpcyB6ZXJvIHRoZW4gc2V0IGl0IGRlZmF1bHQgOCAqLworCWlmICghc3BpLT5iaXRzX3Blcl93b3JkKQorCQlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OworCisJZGF2aW5jaV9zcGktPnNsYXZlW3NwaS0+Y2hpcF9zZWxlY3RdLmNtZF90b193cml0ZSA9IDA7CisKKwlpZiAodXNlX2RtYSAmJiBkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzKSB7CisJCWRhdmluY2lfc3BpX2RtYSA9ICZkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzW3NwaS0+Y2hpcF9zZWxlY3RdOworCisJCWlmICgoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCA9PSAtMSkKKwkJCQl8fCAoZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY2hhbm5lbCA9PSAtMSkpIHsKKwkJCXJldHZhbCA9IGRhdmluY2lfc3BpX3JlcXVlc3RfZG1hKHNwaSk7CisJCQlpZiAocmV0dmFsIDwgMCkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJfQorCisJLyoKKwkgKiBTUEkgaW4gRGFWaW5jaSBhbmQgREE4eHggb3BlcmF0ZSBiZXR3ZWVuCisJICogNjAwIEtIeiBhbmQgNTAgTUh6CisJICovCisJaWYgKHNwaS0+bWF4X3NwZWVkX2h6IDwgNjAwMDAwIHx8IHNwaS0+bWF4X3NwZWVkX2h6ID4gNTAwMDAwMDApIHsKKwkJZGV2X2RiZyhzZGV2LCAiT3BlcmF0aW5nIGZyZXF1ZW5jeSBpcyBub3QgaW4gYWNjZXB0YWJsZSAiCisJCQkJInJhbmdlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBTZXQgdXAgU1BJRk1UbiByZWdpc3RlciwgdW5pcXVlIHRvIHRoaXMgY2hpcHNlbGVjdC4KKwkgKgorCSAqIE5PVEU6IHdlIGNvdWxkIGRvIGFsbCBvZiB0aGVzZSB3aXRoIG9uZSB3cml0ZS4gIEFsc28sIHNvbWUKKwkgKiBvZiB0aGUgInZlcnNpb24gMiIgZmVhdHVyZXMgYXJlIGZvdW5kIGluIGNoaXBzIHRoYXQgZG9uJ3QKKwkgKiBzdXBwb3J0IGFsbCBvZiB0aGVtLi4uCisJICovCisJaWYgKHNwaS0+bW9kZSAmIFNQSV9MU0JfRklSU1QpCisJCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgU1BJRk1UX1NISUZURElSX01BU0ssCisJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJZWxzZQorCQljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgU1BJRk1UX1NISUZURElSX01BU0ssCisJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisKKwlpZiAoc3BpLT5tb2RlICYgU1BJX0NQT0wpCisJCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgU1BJRk1UX1BPTEFSSVRZX01BU0ssCisJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJZWxzZQorCQljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgU1BJRk1UX1BPTEFSSVRZX01BU0ssCisJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisKKwlpZiAoIShzcGktPm1vZGUgJiBTUElfQ1BIQSkpCisJCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgU1BJRk1UX1BIQVNFX01BU0ssCisJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJZWxzZQorCQljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwgU1BJRk1UX1BIQVNFX01BU0ssCisJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisKKwkvKgorCSAqIFZlcnNpb24gMSBoYXJkd2FyZSBzdXBwb3J0cyB0d28gYmFzaWMgU1BJIG1vZGVzOgorCSAqICAtIFN0YW5kYXJkIFNQSSBtb2RlIHVzZXMgNCBwaW5zLCB3aXRoIGNoaXBzZWxlY3QKKwkgKiAgLSAzIHBpbiBTUEkgaXMgYSA0IHBpbiB2YXJpYW50IHdpdGhvdXQgQ1MgKFNQSV9OT19DUykKKwkgKgkoZGlzdGluY3QgZnJvbSBTUElfM1dJUkUsIHdpdGgganVzdCBvbmUgZGF0YSB3aXJlOworCSAqCW9yIHNpbWlsYXIgdmFyaWFudHMgd2l0aG91dCBNT1NJIG9yIHdpdGhvdXQgTUlTTykKKwkgKgorCSAqIFZlcnNpb24gMiBoYXJkd2FyZSBzdXBwb3J0cyBhbiBvcHRpb25hbCBoYW5kc2hha2luZyBzaWduYWwsCisJICogc28gaXQgY2FuIHN1cHBvcnQgdHdvIG1vcmUgbW9kZXM6CisJICogIC0gNSBwaW4gU1BJIHZhcmlhbnQgaXMgc3RhbmRhcmQgU1BJIHBsdXMgU1BJX1JFQURZCisJICogIC0gNCBwaW4gd2l0aCBlbmFibGUgaXMgKFNQSV9SRUFEWSB8IFNQSV9OT19DUykKKwkgKi8KKworCWlmIChkYXZpbmNpX3NwaS0+dmVyc2lvbiA9PSBTUElfVkVSU0lPTl8yKSB7CisJCWNsZWFyX2ZtdF9iaXRzKGRhdmluY2lfc3BpLT5iYXNlLCBTUElGTVRfV0RFTEFZX01BU0ssCisJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisJCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKKwkJCQkoZGF2aW5jaV9zcGktPnBkYXRhLT53ZGVsYXkKKwkJCQkJCTw8IFNQSUZNVF9XREVMQVlfU0hJRlQpCisJCQkJCSYgU1BJRk1UX1dERUxBWV9NQVNLLAorCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCisJCWlmIChkYXZpbmNpX3NwaS0+cGRhdGEtPm9kZF9wYXJpdHkpCisJCQlzZXRfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsCisJCQkJCVNQSUZNVF9PRERfUEFSSVRZX01BU0ssCisJCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCQllbHNlCisJCQljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKKwkJCQkJU1BJRk1UX09ERF9QQVJJVFlfTUFTSywKKwkJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisKKwkJaWYgKGRhdmluY2lfc3BpLT5wZGF0YS0+cGFyaXR5X2VuYWJsZSkKKwkJCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKKwkJCQkJU1BJRk1UX1BBUklUWUVOQV9NQVNLLAorCQkJCQlzcGktPmNoaXBfc2VsZWN0KTsKKwkJZWxzZQorCQkJY2xlYXJfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsCisJCQkJCVNQSUZNVF9QQVJJVFlFTkFfTUFTSywKKwkJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisKKwkJaWYgKGRhdmluY2lfc3BpLT5wZGF0YS0+d2FpdF9lbmFibGUpCisJCQlzZXRfZm10X2JpdHMoZGF2aW5jaV9zcGktPmJhc2UsCisJCQkJCVNQSUZNVF9XQUlURU5BX01BU0ssCisJCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCQllbHNlCisJCQljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKKwkJCQkJU1BJRk1UX1dBSVRFTkFfTUFTSywKKwkJCQkJc3BpLT5jaGlwX3NlbGVjdCk7CisKKwkJaWYgKGRhdmluY2lfc3BpLT5wZGF0YS0+dGltZXJfZGlzYWJsZSkKKwkJCXNldF9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKKwkJCQkJU1BJRk1UX0RJU1RJTUVSX01BU0ssCisJCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCQllbHNlCisJCQljbGVhcl9mbXRfYml0cyhkYXZpbmNpX3NwaS0+YmFzZSwKKwkJCQkJU1BJRk1UX0RJU1RJTUVSX01BU0ssCisJCQkJCXNwaS0+Y2hpcF9zZWxlY3QpOworCX0KKworCXJldHZhbCA9IGRhdmluY2lfc3BpX3NldHVwX3RyYW5zZmVyKHNwaSwgTlVMTCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBkYXZpbmNpX3NwaV9jbGVhbnVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXN0cnVjdCBkYXZpbmNpX3NwaV9kbWEgKmRhdmluY2lfc3BpX2RtYTsKKworCWRhdmluY2lfc3BpX2RtYSA9ICZkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzW3NwaS0+Y2hpcF9zZWxlY3RdOworCisJaWYgKHVzZV9kbWEgJiYgZGF2aW5jaV9zcGktPmRtYV9jaGFubmVscykgeworCQlkYXZpbmNpX3NwaV9kbWEgPSAmZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tzcGktPmNoaXBfc2VsZWN0XTsKKworCQlpZiAoKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwgIT0gLTEpCisJCQkJJiYgKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwgIT0gLTEpKSB7CisJCQllZG1hX2ZyZWVfY2hhbm5lbChkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsKTsKKwkJCWVkbWFfZnJlZV9jaGFubmVsKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGRhdmluY2lfc3BpX2J1ZnNfcHJlcChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCSBzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpKQoreworCWludCBvcF9tb2RlID0gMDsKKworCS8qCisJICogUkVWSVNJVCAgdW5sZXNzIGRldmljZXMgZGlzYWdyZWUgYWJvdXQgU1BJX0xPT1Agb3IKKwkgKiBTUElfUkVBRFkgKFNQSV9OT19DUyBvbmx5IGFsbG93cyBvbmUgZGV2aWNlISksIHRoaXMKKwkgKiBzaG91bGQgbm90IG5lZWQgdG8gYmUgZG9uZSBiZWZvcmUgZWFjaCBtZXNzYWdlLi4uCisJICogb3B0aW1pemUgZm9yIGJvdGggZmxhZ3Mgc3RheWluZyBjbGVhcmVkLgorCSAqLworCisJb3BfbW9kZSA9IFNQSVBDMF9ESUZVTl9NQVNLCisJCXwgU1BJUEMwX0RPRlVOX01BU0sKKwkJfCBTUElQQzBfQ0xLRlVOX01BU0s7CisJaWYgKCEoc3BpLT5tb2RlICYgU1BJX05PX0NTKSkKKwkJb3BfbW9kZSB8PSAxIDw8IHNwaS0+Y2hpcF9zZWxlY3Q7CisJaWYgKHNwaS0+bW9kZSAmIFNQSV9SRUFEWSkKKwkJb3BfbW9kZSB8PSBTUElQQzBfU1BJRU5BX01BU0s7CisKKwlpb3dyaXRlMzIob3BfbW9kZSwgZGF2aW5jaV9zcGktPmJhc2UgKyBTUElQQzApOworCisJaWYgKHNwaS0+bW9kZSAmIFNQSV9MT09QKQorCQlzZXRfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjEsCisJCQkJU1BJR0NSMV9MT09QQkFDS19NQVNLKTsKKwllbHNlCisJCWNsZWFyX2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElHQ1IxLAorCQkJCVNQSUdDUjFfTE9PUEJBQ0tfTUFTSyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXZpbmNpX3NwaV9jaGVja19lcnJvcihzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpLAorCQkJCSAgIGludCBpbnRfc3RhdHVzKQoreworCXN0cnVjdCBkZXZpY2UgKnNkZXYgPSBkYXZpbmNpX3NwaS0+Yml0YmFuZy5tYXN0ZXItPmRldi5wYXJlbnQ7CisKKwlpZiAoaW50X3N0YXR1cyAmIFNQSUZMR19USU1FT1VUX01BU0spIHsKKwkJZGV2X2RiZyhzZGV2LCAiU1BJIFRpbWUtb3V0IEVycm9yXG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCWlmIChpbnRfc3RhdHVzICYgU1BJRkxHX0RFU1lOQ19NQVNLKSB7CisJCWRldl9kYmcoc2RldiwgIlNQSSBEZXN5bmNocm9uaXphdGlvbiBFcnJvclxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoaW50X3N0YXR1cyAmIFNQSUZMR19CSVRFUlJfTUFTSykgeworCQlkZXZfZGJnKHNkZXYsICJTUEkgQml0IGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGRhdmluY2lfc3BpLT52ZXJzaW9uID09IFNQSV9WRVJTSU9OXzIpIHsKKwkJaWYgKGludF9zdGF0dXMgJiBTUElGTEdfRExFTl9FUlJfTUFTSykgeworCQkJZGV2X2RiZyhzZGV2LCAiU1BJIERhdGEgTGVuZ3RoIEVycm9yXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWlmIChpbnRfc3RhdHVzICYgU1BJRkxHX1BBUkVSUl9NQVNLKSB7CisJCQlkZXZfZGJnKHNkZXYsICJTUEkgUGFyaXR5IEVycm9yXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWlmIChpbnRfc3RhdHVzICYgU1BJRkxHX09WUlJVTl9NQVNLKSB7CisJCQlkZXZfZGJnKHNkZXYsICJTUEkgRGF0YSBPdmVycnVuIGVycm9yXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWlmIChpbnRfc3RhdHVzICYgU1BJRkxHX1RYX0lOVFJfTUFTSykgeworCQkJZGV2X2RiZyhzZGV2LCAiU1BJIFRYIGludHIgYml0IHNldFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlpZiAoaW50X3N0YXR1cyAmIFNQSUZMR19CVUZfSU5JVF9BQ1RJVkVfTUFTSykgeworCQkJZGV2X2RiZyhzZGV2LCAiU1BJIEJ1ZmZlciBJbml0IEFjdGl2ZVxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZGF2aW5jaV9zcGlfYnVmcyAtIGZ1bmN0aW9ucyB3aGljaCB3aWxsIGhhbmRsZSB0cmFuc2ZlciBkYXRhCisgKiBAc3BpOiBzcGkgZGV2aWNlIG9uIHdoaWNoIGRhdGEgdHJhbnNmZXIgdG8gYmUgZG9uZQorICogQHQ6IHNwaSB0cmFuc2ZlciBpbiB3aGljaCB0cmFuc2ZlciBpbmZvIGlzIGZpbGxlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBwdXQgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBpbnRvIGRhdGEgcmVnaXN0ZXIKKyAqIG9mIFNQSSBjb250cm9sbGVyIGFuZCB0aGVuIHdhaXQgdW50aWwgdGhlIGNvbXBsZXRpb24gd2lsbCBiZSBtYXJrZWQKKyAqIGJ5IHRoZSBJUlEgSGFuZGxlci4KKyAqLworc3RhdGljIGludCBkYXZpbmNpX3NwaV9idWZzX3BpbyhzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGk7CisJaW50IGludF9zdGF0dXMsIGNvdW50LCByZXQ7CisJdTggY29udiwgdG1wOworCXUzMiB0eF9kYXRhLCBkYXRhMV9yZWdfdmFsOworCXUzMiBidWZfdmFsLCBmbGdfdmFsOworCXN0cnVjdCBkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKworCWRhdmluY2lfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJcGRhdGEgPSBkYXZpbmNpX3NwaS0+cGRhdGE7CisKKwlkYXZpbmNpX3NwaS0+dHggPSB0LT50eF9idWY7CisJZGF2aW5jaV9zcGktPnJ4ID0gdC0+cnhfYnVmOworCisJLyogY29udmVydCBsZW4gdG8gd29yZHMgYmFzZWQgb24gYml0c19wZXJfd29yZCAqLworCWNvbnYgPSBkYXZpbmNpX3NwaS0+c2xhdmVbc3BpLT5jaGlwX3NlbGVjdF0uYnl0ZXNfcGVyX3dvcmQ7CisJZGF2aW5jaV9zcGktPmNvdW50ID0gdC0+bGVuIC8gY29udjsKKworCUlOSVRfQ09NUExFVElPTihkYXZpbmNpX3NwaS0+ZG9uZSk7CisKKwlyZXQgPSBkYXZpbmNpX3NwaV9idWZzX3ByZXAoc3BpLCBkYXZpbmNpX3NwaSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEVuYWJsZSBTUEkgKi8KKwlzZXRfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjEsIFNQSUdDUjFfU1BJRU5BX01BU0spOworCisJaW93cml0ZTMyKDAgfCAocGRhdGEtPmMydGRlbGF5IDw8IFNQSV9DMlRERUxBWV9TSElGVCkgfAorCQkJKHBkYXRhLT50MmNkZWxheSA8PCBTUElfVDJDREVMQVlfU0hJRlQpLAorCQkJZGF2aW5jaV9zcGktPmJhc2UgKyBTUElERUxBWSk7CisKKwljb3VudCA9IGRhdmluY2lfc3BpLT5jb3VudDsKKwlkYXRhMV9yZWdfdmFsID0gcGRhdGEtPmNzX2hvbGQgPDwgU1BJREFUMV9DU0hPTERfU0hJRlQ7CisJdG1wID0gfigweDEgPDwgc3BpLT5jaGlwX3NlbGVjdCk7CisKKwljbGVhcl9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJREVGLCB+dG1wKTsKKworCWRhdGExX3JlZ192YWwgfD0gdG1wIDw8IFNQSURBVDFfQ1NOUl9TSElGVDsKKworCXdoaWxlICgoaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpCisJCQkJJiBTUElCVUZfUlhFTVBUWV9NQVNLKSA9PSAwKQorCQljcHVfcmVsYXgoKTsKKworCS8qIERldGVybWluZSB0aGUgY29tbWFuZCB0byBleGVjdXRlIFJFQUQgb3IgV1JJVEUgKi8KKwlpZiAodC0+dHhfYnVmKSB7CisJCWNsZWFyX2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElJTlQsIFNQSUlOVF9NQVNLQUxMKTsKKworCQl3aGlsZSAoMSkgeworCQkJdHhfZGF0YSA9IGRhdmluY2lfc3BpLT5nZXRfdHgoZGF2aW5jaV9zcGkpOworCisJCQlkYXRhMV9yZWdfdmFsICY9IH4oMHhGRkZGKTsKKwkJCWRhdGExX3JlZ192YWwgfD0gKDB4RkZGRiAmIHR4X2RhdGEpOworCisJCQlidWZfdmFsID0gaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpOworCQkJaWYgKChidWZfdmFsICYgU1BJQlVGX1RYRlVMTF9NQVNLKSA9PSAwKSB7CisJCQkJaW93cml0ZTMyKGRhdGExX3JlZ192YWwsCisJCQkJCQlkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURBVDEpOworCisJCQkJY291bnQtLTsKKwkJCX0KKwkJCXdoaWxlIChpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUJVRikKKwkJCQkJJiBTUElCVUZfUlhFTVBUWV9NQVNLKQorCQkJCWNwdV9yZWxheCgpOworCisJCQkvKiBnZXR0aW5nIHRoZSByZXR1cm5lZCBieXRlICovCisJCQlpZiAodC0+cnhfYnVmKSB7CisJCQkJYnVmX3ZhbCA9IGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJQlVGKTsKKwkJCQlkYXZpbmNpX3NwaS0+Z2V0X3J4KGJ1Zl92YWwsIGRhdmluY2lfc3BpKTsKKwkJCX0KKwkJCWlmIChjb3VudCA8PSAwKQorCQkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHBkYXRhLT5wb2xsX21vZGUpIHsKKwkJCXdoaWxlICgxKSB7CisJCQkJLyoga2VlcHMgdGhlIHNlcmlhbCBjbG9jayBnb2luZyAqLworCQkJCWlmICgoaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpCisJCQkJCQkmIFNQSUJVRl9UWEZVTExfTUFTSykgPT0gMCkKKwkJCQkJaW93cml0ZTMyKGRhdGExX3JlZ192YWwsCisJCQkJCQlkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURBVDEpOworCisJCQkJd2hpbGUgKGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJQlVGKSAmCisJCQkJCQlTUElCVUZfUlhFTVBUWV9NQVNLKQorCQkJCQljcHVfcmVsYXgoKTsKKworCQkJCWZsZ192YWwgPSBpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUZMRyk7CisJCQkJYnVmX3ZhbCA9IGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJQlVGKTsKKworCQkJCWRhdmluY2lfc3BpLT5nZXRfcngoYnVmX3ZhbCwgZGF2aW5jaV9zcGkpOworCisJCQkJY291bnQtLTsKKwkJCQlpZiAoY291bnQgPD0gMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CS8qIFJlY2VpdmUgaW4gSW50ZXJydXB0IG1vZGUgKi8KKwkJCWludCBpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgZGF2aW5jaV9zcGktPmNvdW50OyBpKyspIHsKKwkJCQlzZXRfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUlOVCwKKwkJCQkJCVNQSUlOVF9CSVRFUlJfSU5UUgorCQkJCQkJfCBTUElJTlRfT1ZSUlVOX0lOVFIKKwkJCQkJCXwgU1BJSU5UX1JYX0lOVFIpOworCisJCQkJaW93cml0ZTMyKGRhdGExX3JlZ192YWwsCisJCQkJCQlkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURBVDEpOworCisJCQkJd2hpbGUgKGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJSU5UKSAmCisJCQkJCQlTUElJTlRfUlhfSU5UUikKKwkJCQkJY3B1X3JlbGF4KCk7CisJCQl9CisJCQlpb3dyaXRlMzIoKGRhdGExX3JlZ192YWwgJiAweDBmZmNmZmZmKSwKKwkJCQkJZGF2aW5jaV9zcGktPmJhc2UgKyBTUElEQVQxKTsKKwkJfQorCX0KKworCS8qCisJICogQ2hlY2sgZm9yIGJpdCBlcnJvciwgZGVzeW5jIGVycm9yLHBhcml0eSBlcnJvcix0aW1lb3V0IGVycm9yIGFuZAorCSAqIHJlY2VpdmUgb3ZlcmZsb3cgZXJyb3JzCisJICovCisJaW50X3N0YXR1cyA9IGlvcmVhZDMyKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJRkxHKTsKKworCXJldCA9IGRhdmluY2lfc3BpX2NoZWNrX2Vycm9yKGRhdmluY2lfc3BpLCBpbnRfc3RhdHVzKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBTUEkgRnJhbWV3b3JrIG1haW50YWlucyB0aGUgY291bnQgb25seSBpbiBieXRlcyBzbyBjb252ZXJ0IGJhY2sgKi8KKwlkYXZpbmNpX3NwaS0+Y291bnQgKj0gY29udjsKKworCXJldHVybiB0LT5sZW47Cit9CisKKyNkZWZpbmUgREFWSU5DSV9ETUFfREFUQV9UWVBFX1M4CTB4MDEKKyNkZWZpbmUgREFWSU5DSV9ETUFfREFUQV9UWVBFX1MxNgkweDAyCisjZGVmaW5lIERBVklOQ0lfRE1BX0RBVEFfVFlQRV9TMzIJMHgwNAorCitzdGF0aWMgaW50IGRhdmluY2lfc3BpX2J1ZnNfZG1hKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisJc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaTsKKwlpbnQgaW50X3N0YXR1cyA9IDA7CisJaW50IGNvdW50LCB0ZW1wX2NvdW50OworCXU4IGNvbnYgPSAxOworCXU4IHRtcDsKKwl1MzIgZGF0YTFfcmVnX3ZhbDsKKwlzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hICpkYXZpbmNpX3NwaV9kbWE7CisJaW50IHdvcmRfbGVuLCBkYXRhX3R5cGUsIHJldDsKKwl1bnNpZ25lZCBsb25nIHR4X3JlZywgcnhfcmVnOworCXN0cnVjdCBkYXZpbmNpX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpzZGV2OworCisJZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlwZGF0YSA9IGRhdmluY2lfc3BpLT5wZGF0YTsKKwlzZGV2ID0gZGF2aW5jaV9zcGktPmJpdGJhbmcubWFzdGVyLT5kZXYucGFyZW50OworCisJZGF2aW5jaV9zcGlfZG1hID0gJmRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHNbc3BpLT5jaGlwX3NlbGVjdF07CisKKwl0eF9yZWcgPSAodW5zaWduZWQgbG9uZylkYXZpbmNpX3NwaS0+cGJhc2UgKyBTUElEQVQxOworCXJ4X3JlZyA9ICh1bnNpZ25lZCBsb25nKWRhdmluY2lfc3BpLT5wYmFzZSArIFNQSUJVRjsKKworCWRhdmluY2lfc3BpLT50eCA9IHQtPnR4X2J1ZjsKKwlkYXZpbmNpX3NwaS0+cnggPSB0LT5yeF9idWY7CisKKwkvKiBjb252ZXJ0IGxlbiB0byB3b3JkcyBiYXNlZCBvbiBiaXRzX3Blcl93b3JkICovCisJY29udiA9IGRhdmluY2lfc3BpLT5zbGF2ZVtzcGktPmNoaXBfc2VsZWN0XS5ieXRlc19wZXJfd29yZDsKKwlkYXZpbmNpX3NwaS0+Y291bnQgPSB0LT5sZW4gLyBjb252OworCisJSU5JVF9DT01QTEVUSU9OKGRhdmluY2lfc3BpLT5kb25lKTsKKworCWluaXRfY29tcGxldGlvbigmZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY29tcGxldGlvbik7CisJaW5pdF9jb21wbGV0aW9uKCZkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jb21wbGV0aW9uKTsKKworCXdvcmRfbGVuID0gY29udiAqIDg7CisKKwlpZiAod29yZF9sZW4gPD0gOCkKKwkJZGF0YV90eXBlID0gREFWSU5DSV9ETUFfREFUQV9UWVBFX1M4OworCWVsc2UgaWYgKHdvcmRfbGVuIDw9IDE2KQorCQlkYXRhX3R5cGUgPSBEQVZJTkNJX0RNQV9EQVRBX1RZUEVfUzE2OworCWVsc2UgaWYgKHdvcmRfbGVuIDw9IDMyKQorCQlkYXRhX3R5cGUgPSBEQVZJTkNJX0RNQV9EQVRBX1RZUEVfUzMyOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBkYXZpbmNpX3NwaV9idWZzX3ByZXAoc3BpLCBkYXZpbmNpX3NwaSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFB1dCBkZWxheSB2YWwgaWYgcmVxdWlyZWQgKi8KKwlpb3dyaXRlMzIoMCB8IChwZGF0YS0+YzJ0ZGVsYXkgPDwgU1BJX0MyVERFTEFZX1NISUZUKSB8CisJCQkocGRhdGEtPnQyY2RlbGF5IDw8IFNQSV9UMkNERUxBWV9TSElGVCksCisJCQlkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURFTEFZKTsKKworCWNvdW50ID0gZGF2aW5jaV9zcGktPmNvdW50OwkvKiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzICovCisJZGF0YTFfcmVnX3ZhbCA9IHBkYXRhLT5jc19ob2xkIDw8IFNQSURBVDFfQ1NIT0xEX1NISUZUOworCisJLyogQ1MgZGVmYXVsdCA9IDB4RkYgKi8KKwl0bXAgPSB+KDB4MSA8PCBzcGktPmNoaXBfc2VsZWN0KTsKKworCWNsZWFyX2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElERUYsIH50bXApOworCisJZGF0YTFfcmVnX3ZhbCB8PSB0bXAgPDwgU1BJREFUMV9DU05SX1NISUZUOworCisJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyBmb3IgZG1hIHRyYW5zZmVycyAqLworCWNsZWFyX2lvX2JpdHMoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElJTlQsIFNQSUlOVF9NQVNLQUxMKTsKKwkvKiBEaXNhYmxlIFNQSSB0byB3cml0ZSBjb25maWd1cmF0aW9uIGJpdHMgaW4gU1BJREFUICovCisJY2xlYXJfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjEsIFNQSUdDUjFfU1BJRU5BX01BU0spOworCWlvd3JpdGUzMihkYXRhMV9yZWdfdmFsLCBkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURBVDEpOworCS8qIEVuYWJsZSBTUEkgKi8KKwlzZXRfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjEsIFNQSUdDUjFfU1BJRU5BX01BU0spOworCisJd2hpbGUgKChpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUJVRikKKwkJCQkmIFNQSUJVRl9SWEVNUFRZX01BU0spID09IDApCisJCWNwdV9yZWxheCgpOworCisKKwlpZiAodC0+dHhfYnVmKSB7CisJCXQtPnR4X2RtYSA9IGRtYV9tYXBfc2luZ2xlKCZzcGktPmRldiwgKHZvaWQgKil0LT50eF9idWYsIGNvdW50LAorCQkJCURNQV9UT19ERVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJnNwaS0+ZGV2LCB0LT50eF9kbWEpKSB7CisJCQlkZXZfZGJnKHNkZXYsICJVbmFibGUgdG8gRE1BIG1hcCBhICVkIGJ5dGVzIgorCQkJCSIgVFggYnVmZmVyXG4iLCBjb3VudCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQl0ZW1wX2NvdW50ID0gY291bnQ7CisJfSBlbHNlIHsKKwkJLyogV2UgbmVlZCBUWCBjbG9ja2luZyBmb3IgUlggdHJhbnNhY3Rpb24gKi8KKwkJdC0+dHhfZG1hID0gZG1hX21hcF9zaW5nbGUoJnNwaS0+ZGV2LAorCQkJCSh2b2lkICopZGF2aW5jaV9zcGktPnRtcF9idWYsIGNvdW50ICsgMSwKKwkJCQlETUFfVE9fREVWSUNFKTsKKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZzcGktPmRldiwgdC0+dHhfZG1hKSkgeworCQkJZGV2X2RiZyhzZGV2LCAiVW5hYmxlIHRvIERNQSBtYXAgYSAlZCBieXRlcyIKKwkJCQkiIFRYIHRtcCBidWZmZXJcbiIsIGNvdW50KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXRlbXBfY291bnQgPSBjb3VudCArIDE7CisJfQorCisJZWRtYV9zZXRfdHJhbnNmZXJfcGFyYW1zKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwsCisJCQkJCWRhdGFfdHlwZSwgdGVtcF9jb3VudCwgMSwgMCwgQVNZTkMpOworCWVkbWFfc2V0X2Rlc3QoZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY2hhbm5lbCwgdHhfcmVnLCBJTkNSLCBXOEJJVCk7CisJZWRtYV9zZXRfc3JjKGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwsIHQtPnR4X2RtYSwgSU5DUiwgVzhCSVQpOworCWVkbWFfc2V0X3NyY19pbmRleChkYXZpbmNpX3NwaV9kbWEtPmRtYV90eF9jaGFubmVsLCBkYXRhX3R5cGUsIDApOworCWVkbWFfc2V0X2Rlc3RfaW5kZXgoZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY2hhbm5lbCwgMCwgMCk7CisKKwlpZiAodC0+cnhfYnVmKSB7CisJCS8qIGluaXRpYXRlIHRyYW5zYWN0aW9uICovCisJCWlvd3JpdGUzMihkYXRhMV9yZWdfdmFsLCBkYXZpbmNpX3NwaS0+YmFzZSArIFNQSURBVDEpOworCisJCXQtPnJ4X2RtYSA9IGRtYV9tYXBfc2luZ2xlKCZzcGktPmRldiwgKHZvaWQgKil0LT5yeF9idWYsIGNvdW50LAorCQkJCURNQV9GUk9NX0RFVklDRSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmc3BpLT5kZXYsIHQtPnJ4X2RtYSkpIHsKKwkJCWRldl9kYmcoc2RldiwgIkNvdWxkbid0IERNQSBtYXAgYSAlZCBieXRlcyBSWCBidWZmZXJcbiIsCisJCQkJCWNvdW50KTsKKwkJCWlmICh0LT50eF9idWYgIT0gTlVMTCkKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIHQtPnR4X2RtYSwKKwkJCQkJCSBjb3VudCwgRE1BX1RPX0RFVklDRSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQllZG1hX3NldF90cmFuc2Zlcl9wYXJhbXMoZGF2aW5jaV9zcGlfZG1hLT5kbWFfcnhfY2hhbm5lbCwKKwkJCQlkYXRhX3R5cGUsIGNvdW50LCAxLCAwLCBBU1lOQyk7CisJCWVkbWFfc2V0X3NyYyhkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsLAorCQkJCXJ4X3JlZywgSU5DUiwgVzhCSVQpOworCQllZG1hX3NldF9kZXN0KGRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NoYW5uZWwsCisJCQkJdC0+cnhfZG1hLCBJTkNSLCBXOEJJVCk7CisJCWVkbWFfc2V0X3NyY19pbmRleChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsLCAwLCAwKTsKKwkJZWRtYV9zZXRfZGVzdF9pbmRleChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsLAorCQkJCWRhdGFfdHlwZSwgMCk7CisJfQorCisJaWYgKCh0LT50eF9idWYpIHx8ICh0LT5yeF9idWYpKQorCQllZG1hX3N0YXJ0KGRhdmluY2lfc3BpX2RtYS0+ZG1hX3R4X2NoYW5uZWwpOworCisJaWYgKHQtPnJ4X2J1ZikKKwkJZWRtYV9zdGFydChkYXZpbmNpX3NwaV9kbWEtPmRtYV9yeF9jaGFubmVsKTsKKworCWlmICgodC0+cnhfYnVmKSB8fCAodC0+dHhfYnVmKSkKKwkJZGF2aW5jaV9zcGlfc2V0X2RtYV9yZXEoc3BpLCAxKTsKKworCWlmICh0LT50eF9idWYpCisJCXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgKKwkJCQkmZGF2aW5jaV9zcGlfZG1hLT5kbWFfdHhfY29tcGxldGlvbik7CisKKwlpZiAodC0+cnhfYnVmKQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoCisJCQkJJmRhdmluY2lfc3BpX2RtYS0+ZG1hX3J4X2NvbXBsZXRpb24pOworCisJZG1hX3VubWFwX3NpbmdsZShOVUxMLCB0LT50eF9kbWEsIHRlbXBfY291bnQsIERNQV9UT19ERVZJQ0UpOworCisJaWYgKHQtPnJ4X2J1ZikKKwkJZG1hX3VubWFwX3NpbmdsZShOVUxMLCB0LT5yeF9kbWEsIGNvdW50LCBETUFfRlJPTV9ERVZJQ0UpOworCisJLyoKKwkgKiBDaGVjayBmb3IgYml0IGVycm9yLCBkZXN5bmMgZXJyb3IscGFyaXR5IGVycm9yLHRpbWVvdXQgZXJyb3IgYW5kCisJICogcmVjZWl2ZSBvdmVyZmxvdyBlcnJvcnMKKwkgKi8KKwlpbnRfc3RhdHVzID0gaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElGTEcpOworCisJcmV0ID0gZGF2aW5jaV9zcGlfY2hlY2tfZXJyb3IoZGF2aW5jaV9zcGksIGludF9zdGF0dXMpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFNQSSBGcmFtZXdvcmsgbWFpbnRhaW5zIHRoZSBjb3VudCBvbmx5IGluIGJ5dGVzIHNvIGNvbnZlcnQgYmFjayAqLworCWRhdmluY2lfc3BpLT5jb3VudCAqPSBjb252OworCisJcmV0dXJuIHQtPmxlbjsKK30KKworLyoqCisgKiBkYXZpbmNpX3NwaV9pcnEgLSBJUlEgaGFuZGxlciBmb3IgRGFWaW5jaSBTUEkKKyAqIEBpcnE6IElSUSBudW1iZXIgZm9yIHRoaXMgU1BJIE1hc3RlcgorICogQGNvbnRleHRfZGF0YTogc3RydWN0dXJlIGZvciBTUEkgTWFzdGVyIGNvbnRyb2xsZXIgZGF2aW5jaV9zcGkKKyAqLworc3RhdGljIGlycXJldHVybl90IGRhdmluY2lfc3BpX2lycShzMzIgaXJxLCB2b2lkICpjb250ZXh0X2RhdGEpCit7CisJc3RydWN0IGRhdmluY2lfc3BpICpkYXZpbmNpX3NwaSA9IGNvbnRleHRfZGF0YTsKKwl1MzIgaW50X3N0YXR1cywgcnhfZGF0YSA9IDA7CisJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7CisKKwlpbnRfc3RhdHVzID0gaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElGTEcpOworCisJd2hpbGUgKChpbnRfc3RhdHVzICYgU1BJRkxHX1JYX0lOVFJfTUFTSykpIHsKKwkJaWYgKGxpa2VseShpbnRfc3RhdHVzICYgU1BJRkxHX1JYX0lOVFJfTUFTSykpIHsKKwkJCXJldCA9IElSUV9IQU5ETEVEOworCisJCQlyeF9kYXRhID0gaW9yZWFkMzIoZGF2aW5jaV9zcGktPmJhc2UgKyBTUElCVUYpOworCQkJZGF2aW5jaV9zcGktPmdldF9yeChyeF9kYXRhLCBkYXZpbmNpX3NwaSk7CisKKwkJCS8qIERpc2FibGUgUmVjZWl2ZSBJbnRlcnJ1cHQgKi8KKwkJCWlvd3JpdGUzMih+KFNQSUlOVF9SWF9JTlRSIHwgU1BJSU5UX1RYX0lOVFIpLAorCQkJCQlkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUlOVCk7CisJCX0gZWxzZQorCQkJKHZvaWQpZGF2aW5jaV9zcGlfY2hlY2tfZXJyb3IoZGF2aW5jaV9zcGksIGludF9zdGF0dXMpOworCisJCWludF9zdGF0dXMgPSBpb3JlYWQzMihkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUZMRyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBkYXZpbmNpX3NwaV9wcm9iZSAtIHByb2JlIGZ1bmN0aW9uIGZvciBTUEkgTWFzdGVyIENvbnRyb2xsZXIKKyAqIEBwZGV2OiBwbGF0Zm9ybV9kZXZpY2Ugc3RydWN0dXJlIHdoaWNoIGNvbnRhaW5zIHBsYXRlZm9ybSBzcGVjaWZpYyBkYXRhCisgKi8KK3N0YXRpYyBpbnQgZGF2aW5jaV9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCXN0cnVjdCBkYXZpbmNpX3NwaSAqZGF2aW5jaV9zcGk7CisJc3RydWN0IGRhdmluY2lfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqciwgKm1lbTsKKwlyZXNvdXJjZV9zaXplX3QgZG1hX3J4X2NoYW4gPSBTUElfTk9fUkVTT1VSQ0U7CisJcmVzb3VyY2Vfc2l6ZV90CWRtYV90eF9jaGFuID0gU1BJX05PX1JFU09VUkNFOworCXJlc291cmNlX3NpemVfdAlkbWFfZXZlbnRxID0gU1BJX05PX1JFU09VUkNFOworCWludCBpID0gMCwgcmV0ID0gMDsKKworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKHBkYXRhID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnI7CisJfQorCisJbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcigmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IGRhdmluY2lfc3BpKSk7CisJaWYgKG1hc3RlciA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBtYXN0ZXIpOworCisJZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJaWYgKGRhdmluY2lfc3BpID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBmcmVlX21hc3RlcjsKKwl9CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAociA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZnJlZV9tYXN0ZXI7CisJfQorCisJZGF2aW5jaV9zcGktPnBiYXNlID0gci0+c3RhcnQ7CisJZGF2aW5jaV9zcGktPnJlZ2lvbl9zaXplID0gcmVzb3VyY2Vfc2l6ZShyKTsKKwlkYXZpbmNpX3NwaS0+cGRhdGEgPSBwZGF0YTsKKworCW1lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgZGF2aW5jaV9zcGktPnJlZ2lvbl9zaXplLAorCQkJCQlwZGV2LT5uYW1lKTsKKwlpZiAobWVtID09IE5VTEwpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGZyZWVfbWFzdGVyOworCX0KKworCWRhdmluY2lfc3BpLT5iYXNlID0gKHN0cnVjdCBkYXZpbmNpX3NwaV9yZWcgX19pb21lbSAqKQorCQkJaW9yZW1hcChyLT5zdGFydCwgZGF2aW5jaV9zcGktPnJlZ2lvbl9zaXplKTsKKwlpZiAoZGF2aW5jaV9zcGktPmJhc2UgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHJlbGVhc2VfcmVnaW9uOworCX0KKworCWRhdmluY2lfc3BpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChkYXZpbmNpX3NwaS0+aXJxIDw9IDApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byB1bm1hcF9pbzsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShkYXZpbmNpX3NwaS0+aXJxLCBkYXZpbmNpX3NwaV9pcnEsIElSUUZfRElTQUJMRUQsCisJCQkgIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBkYXZpbmNpX3NwaSk7CisJaWYgKHJldCkKKwkJZ290byB1bm1hcF9pbzsKKworCS8qIEFsbG9jYXRlIHRtcF9idWYgZm9yIHR4X2J1ZiAqLworCWRhdmluY2lfc3BpLT50bXBfYnVmID0ga3phbGxvYyhTUElfQlVGU0laLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGF2aW5jaV9zcGktPnRtcF9idWYgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGlycV9mcmVlOworCX0KKworCWRhdmluY2lfc3BpLT5iaXRiYW5nLm1hc3RlciA9IHNwaV9tYXN0ZXJfZ2V0KG1hc3Rlcik7CisJaWYgKGRhdmluY2lfc3BpLT5iaXRiYW5nLm1hc3RlciA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV90bXBfYnVmOworCX0KKworCWRhdmluY2lfc3BpLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoZGF2aW5jaV9zcGktPmNsaykpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBwdXRfbWFzdGVyOworCX0KKwljbGtfZW5hYmxlKGRhdmluY2lfc3BpLT5jbGspOworCisKKwltYXN0ZXItPmJ1c19udW0gPSBwZGV2LT5pZDsKKwltYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gcGRhdGEtPm51bV9jaGlwc2VsZWN0OworCW1hc3Rlci0+c2V0dXAgPSBkYXZpbmNpX3NwaV9zZXR1cDsKKwltYXN0ZXItPmNsZWFudXAgPSBkYXZpbmNpX3NwaV9jbGVhbnVwOworCisJZGF2aW5jaV9zcGktPmJpdGJhbmcuY2hpcHNlbGVjdCA9IGRhdmluY2lfc3BpX2NoaXBzZWxlY3Q7CisJZGF2aW5jaV9zcGktPmJpdGJhbmcuc2V0dXBfdHJhbnNmZXIgPSBkYXZpbmNpX3NwaV9zZXR1cF90cmFuc2ZlcjsKKworCWRhdmluY2lfc3BpLT52ZXJzaW9uID0gcGRhdGEtPnZlcnNpb247CisJdXNlX2RtYSA9IHBkYXRhLT51c2VfZG1hOworCisJZGF2aW5jaV9zcGktPmJpdGJhbmcuZmxhZ3MgPSBTUElfTk9fQ1MgfCBTUElfTFNCX0ZJUlNUIHwgU1BJX0xPT1A7CisJaWYgKGRhdmluY2lfc3BpLT52ZXJzaW9uID09IFNQSV9WRVJTSU9OXzIpCisJCWRhdmluY2lfc3BpLT5iaXRiYW5nLmZsYWdzIHw9IFNQSV9SRUFEWTsKKworCWlmICh1c2VfZG1hKSB7CisJCQlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAwKTsKKwkJCWlmIChyKQorCQkJCWRtYV9yeF9jaGFuID0gci0+c3RhcnQ7CisJCQlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAxKTsKKwkJCWlmIChyKQorCQkJCWRtYV90eF9jaGFuID0gci0+c3RhcnQ7CisJCQlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAyKTsKKwkJCWlmIChyKQorCQkJCWRtYV9ldmVudHEgPSByLT5zdGFydDsKKwl9CisKKwlpZiAoIXVzZV9kbWEgfHwKKwkgICAgZG1hX3J4X2NoYW4gPT0gU1BJX05PX1JFU09VUkNFIHx8CisJICAgIGRtYV90eF9jaGFuID09IFNQSV9OT19SRVNPVVJDRSB8fAorCSAgICBkbWFfZXZlbnRxCT09IFNQSV9OT19SRVNPVVJDRSkgeworCQlkYXZpbmNpX3NwaS0+Yml0YmFuZy50eHJ4X2J1ZnMgPSBkYXZpbmNpX3NwaV9idWZzX3BpbzsKKwkJdXNlX2RtYSA9IDA7CisJfSBlbHNlIHsKKwkJZGF2aW5jaV9zcGktPmJpdGJhbmcudHhyeF9idWZzID0gZGF2aW5jaV9zcGlfYnVmc19kbWE7CisJCWRhdmluY2lfc3BpLT5kbWFfY2hhbm5lbHMgPSBremFsbG9jKG1hc3Rlci0+bnVtX2NoaXBzZWxlY3QKKwkJCQkqIHNpemVvZihzdHJ1Y3QgZGF2aW5jaV9zcGlfZG1hKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChkYXZpbmNpX3NwaS0+ZG1hX2NoYW5uZWxzID09IE5VTEwpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGZyZWVfY2xrOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+bnVtX2NoaXBzZWxlY3Q7IGkrKykgeworCQkJZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tpXS5kbWFfcnhfY2hhbm5lbCA9IC0xOworCQkJZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tpXS5kbWFfcnhfc3luY19kZXYgPQorCQkJCWRtYV9yeF9jaGFuOworCQkJZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tpXS5kbWFfdHhfY2hhbm5lbCA9IC0xOworCQkJZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tpXS5kbWFfdHhfc3luY19kZXYgPQorCQkJCWRtYV90eF9jaGFuOworCQkJZGF2aW5jaV9zcGktPmRtYV9jaGFubmVsc1tpXS5ldmVudHEgPSBkbWFfZXZlbnRxOworCQl9CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJEYVZpbmNpIFNQSSBkcml2ZXIgaW4gRURNQSBtb2RlXG4iCisJCQkJIlVzaW5nIFJYIGNoYW5uZWwgPSAlZCAsIFRYIGNoYW5uZWwgPSAlZCBhbmQgIgorCQkJCSJldmVudCBxdWV1ZSA9ICVkIiwgZG1hX3J4X2NoYW4sIGRtYV90eF9jaGFuLAorCQkJCWRtYV9ldmVudHEpOworCX0KKworCWRhdmluY2lfc3BpLT5nZXRfcnggPSBkYXZpbmNpX3NwaV9yeF9idWZfdTg7CisJZGF2aW5jaV9zcGktPmdldF90eCA9IGRhdmluY2lfc3BpX3R4X2J1Zl91ODsKKworCWluaXRfY29tcGxldGlvbigmZGF2aW5jaV9zcGktPmRvbmUpOworCisJLyogUmVzZXQgSW4vT1VUIFNQSSBtb2R1bGUgKi8KKwlpb3dyaXRlMzIoMCwgZGF2aW5jaV9zcGktPmJhc2UgKyBTUElHQ1IwKTsKKwl1ZGVsYXkoMTAwKTsKKwlpb3dyaXRlMzIoMSwgZGF2aW5jaV9zcGktPmJhc2UgKyBTUElHQ1IwKTsKKworCS8qIENsb2NrIGludGVybmFsICovCisJaWYgKGRhdmluY2lfc3BpLT5wZGF0YS0+Y2xrX2ludGVybmFsKQorCQlzZXRfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjEsCisJCQkJU1BJR0NSMV9DTEtNT0RfTUFTSyk7CisJZWxzZQorCQljbGVhcl9pb19iaXRzKGRhdmluY2lfc3BpLT5iYXNlICsgU1BJR0NSMSwKKwkJCQlTUElHQ1IxX0NMS01PRF9NQVNLKTsKKworCS8qIG1hc3RlciBtb2RlIGRlZmF1bHQgKi8KKwlzZXRfaW9fYml0cyhkYXZpbmNpX3NwaS0+YmFzZSArIFNQSUdDUjEsIFNQSUdDUjFfTUFTVEVSX01BU0spOworCisJaWYgKGRhdmluY2lfc3BpLT5wZGF0YS0+aW50cl9sZXZlbCkKKwkJaW93cml0ZTMyKFNQSV9JTlRMVkxfMSwgZGF2aW5jaV9zcGktPmJhc2UgKyBTUElMVkwpOworCWVsc2UKKwkJaW93cml0ZTMyKFNQSV9JTlRMVkxfMCwgZGF2aW5jaV9zcGktPmJhc2UgKyBTUElMVkwpOworCisJcmV0ID0gc3BpX2JpdGJhbmdfc3RhcnQoJmRhdmluY2lfc3BpLT5iaXRiYW5nKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfY2xrOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIkNvbnRyb2xsZXIgYXQgMHglcCBcbiIsIGRhdmluY2lfc3BpLT5iYXNlKTsKKworCWlmICghcGRhdGEtPnBvbGxfbW9kZSkKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIk9wZXJhdGluZyBpbiBpbnRlcnJ1cHQgbW9kZSIKKwkJCSIgdXNpbmcgSVJRICVkXG4iLCBkYXZpbmNpX3NwaS0+aXJxKTsKKworCXJldHVybiByZXQ7CisKK2ZyZWVfY2xrOgorCWNsa19kaXNhYmxlKGRhdmluY2lfc3BpLT5jbGspOworCWNsa19wdXQoZGF2aW5jaV9zcGktPmNsayk7CitwdXRfbWFzdGVyOgorCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CitmcmVlX3RtcF9idWY6CisJa2ZyZWUoZGF2aW5jaV9zcGktPnRtcF9idWYpOworaXJxX2ZyZWU6CisJZnJlZV9pcnEoZGF2aW5jaV9zcGktPmlycSwgZGF2aW5jaV9zcGkpOwordW5tYXBfaW86CisJaW91bm1hcChkYXZpbmNpX3NwaS0+YmFzZSk7CityZWxlYXNlX3JlZ2lvbjoKKwlyZWxlYXNlX21lbV9yZWdpb24oZGF2aW5jaV9zcGktPnBiYXNlLCBkYXZpbmNpX3NwaS0+cmVnaW9uX3NpemUpOworZnJlZV9tYXN0ZXI6CisJa2ZyZWUobWFzdGVyKTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGRhdmluY2lfc3BpX3JlbW92ZSAtIHJlbW92ZSBmdW5jdGlvbiBmb3IgU1BJIE1hc3RlciBDb250cm9sbGVyCisgKiBAcGRldjogcGxhdGZvcm1fZGV2aWNlIHN0cnVjdHVyZSB3aGljaCBjb250YWlucyBwbGF0ZWZvcm0gc3BlY2lmaWMgZGF0YQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBkbyB0aGUgcmV2ZXJzZSBhY3Rpb24gb2YgZGF2aW5jaV9zcGlfcHJvYmUgZnVuY3Rpb24KKyAqIEl0IHdpbGwgZnJlZSB0aGUgSVJRIGFuZCBTUEkgY29udHJvbGxlcidzIG1lbW9yeSByZWdpb24uCisgKiBJdCB3aWxsIGFsc28gY2FsbCBzcGlfYml0YmFuZ19zdG9wIHRvIGRlc3Ryb3kgdGhlIHdvcmsgcXVldWUgd2hpY2ggd2FzCisgKiBjcmVhdGVkIGJ5IHNwaV9iaXRiYW5nX3N0YXJ0LgorICovCitzdGF0aWMgaW50IF9fZXhpdCBkYXZpbmNpX3NwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGF2aW5jaV9zcGkgKmRhdmluY2lfc3BpOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisKKwltYXN0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJZGF2aW5jaV9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwlzcGlfYml0YmFuZ19zdG9wKCZkYXZpbmNpX3NwaS0+Yml0YmFuZyk7CisKKwljbGtfZGlzYWJsZShkYXZpbmNpX3NwaS0+Y2xrKTsKKwljbGtfcHV0KGRhdmluY2lfc3BpLT5jbGspOworCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CisJa2ZyZWUoZGF2aW5jaV9zcGktPnRtcF9idWYpOworCWZyZWVfaXJxKGRhdmluY2lfc3BpLT5pcnEsIGRhdmluY2lfc3BpKTsKKwlpb3VubWFwKGRhdmluY2lfc3BpLT5iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oZGF2aW5jaV9zcGktPnBiYXNlLCBkYXZpbmNpX3NwaS0+cmVnaW9uX3NpemUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRhdmluY2lfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyLm5hbWUgPSAic3BpX2RhdmluY2kiLAorCS5yZW1vdmUgPSBfX2V4aXRfcChkYXZpbmNpX3NwaV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGF2aW5jaV9zcGlfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmRhdmluY2lfc3BpX2RyaXZlciwgZGF2aW5jaV9zcGlfcHJvYmUpOworfQorbW9kdWxlX2luaXQoZGF2aW5jaV9zcGlfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkYXZpbmNpX3NwaV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRhdmluY2lfc3BpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChkYXZpbmNpX3NwaV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJUSSBEYVZpbmNpIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2R3X3NwaS5jIGIvZHJpdmVycy9zcGkvZHdfc3BpLmMKaW5kZXggMzE2MjBmYS4uOGVkMzhmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvZHdfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvZHdfc3BpLmMKQEAgLTE1Miw2ICsxNTIsNyBAQAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IG1yc3Rfc3BpX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHdfc3BpICpkd3MpCiB7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtcnN0X3NwaV9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgZHdfc3BpICpkd3MpCkBAIC0xNjEsMTQgKzE2MiwxNCBAQAogCiBzdGF0aWMgdm9pZCB3YWl0X3RpbGxfbm90X2J1c3koc3RydWN0IGR3X3NwaSAqZHdzKQogewotCXVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXMoMTAwMCk7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBqaWZmaWVzICsgMSArIHVzZWNzX3RvX2ppZmZpZXMoMTAwMCk7CiAKIAl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kKSkgewogCQlpZiAoIShkd19yZWFkdyhkd3MsIHNyKSAmIFNSX0JVU1kpKQogCQkJcmV0dXJuOwogCX0KIAlkZXZfZXJyKCZkd3MtPm1hc3Rlci0+ZGV2LAotCQkiRFcgU1BJOiBTdHV0dXMga2VlcHMgYnVzeSBmb3IgMTAwMHVzIGFmdGVyIGEgcmVhZC93cml0ZSFcbiIpOworCQkiRFcgU1BJOiBTdGF0dXMga2VlcHMgYnVzeSBmb3IgMTAwMHVzIGFmdGVyIGEgcmVhZC93cml0ZSFcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBmbHVzaChzdHJ1Y3QgZHdfc3BpICpkd3MpCkBAIC0zNTgsNiArMzU5LDggQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfdHJhbnNmZXIoc3RydWN0IGR3X3NwaSAqZHdzKQogewogCXUxNiBpcnFfc3RhdHVzLCBpcnFfbWFzayA9IDB4M2Y7CisJdTMyIGludF9sZXZlbCA9IGR3cy0+Zmlmb19sZW4gLyAyOworCXUzMiBsZWZ0OwogCiAJaXJxX3N0YXR1cyA9IGR3X3JlYWR3KGR3cywgaXNyKSAmIGlycV9tYXNrOwogCS8qIEVycm9yIGhhbmRsaW5nICovCkBAIC0zNjksMjIgKzM3MiwyMyBAQAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCi0JLyogSU5UIGNvbWVzIGZyb20gdHggKi8KLQlpZiAoZHdzLT50eCAmJiAoaXJxX3N0YXR1cyAmIFNQSV9JTlRfVFhFSSkpIHsKLQkJd2hpbGUgKGR3cy0+dHggPCBkd3MtPnR4X2VuZCkKKwlpZiAoaXJxX3N0YXR1cyAmIFNQSV9JTlRfVFhFSSkgeworCQlzcGlfbWFza19pbnRyKGR3cywgU1BJX0lOVF9UWEVJKTsKKworCQlsZWZ0ID0gKGR3cy0+dHhfZW5kIC0gZHdzLT50eCkgLyBkd3MtPm5fYnl0ZXM7CisJCWxlZnQgPSAobGVmdCA+IGludF9sZXZlbCkgPyBpbnRfbGV2ZWwgOiBsZWZ0OworCisJCXdoaWxlIChsZWZ0LS0pCiAJCQlkd3MtPndyaXRlKGR3cyk7CisJCWR3cy0+cmVhZChkd3MpOwogCi0JCWlmIChkd3MtPnR4ID09IGR3cy0+dHhfZW5kKSB7Ci0JCQlzcGlfbWFza19pbnRyKGR3cywgU1BJX0lOVF9UWEVJKTsKLQkJCXRyYW5zZmVyX2NvbXBsZXRlKGR3cyk7Ci0JCX0KLQl9Ci0KLQkvKiBJTlQgY29tZXMgZnJvbSByeCAqLwotCWlmIChkd3MtPnJ4ICYmIChpcnFfc3RhdHVzICYgU1BJX0lOVF9SWEZJKSkgewotCQlpZiAoZHdzLT5yZWFkKGR3cykpCisJCS8qIFJlLWVuYWJsZSB0aGUgSVJRIGlmIHRoZXJlIGlzIHN0aWxsIGRhdGEgbGVmdCB0byB0eCAqLworCQlpZiAoZHdzLT50eF9lbmQgPiBkd3MtPnR4KQorCQkJc3BpX3VtYXNrX2ludHIoZHdzLCBTUElfSU5UX1RYRUkpOworCQllbHNlCiAJCQl0cmFuc2Zlcl9jb21wbGV0ZShkd3MpOwogCX0KKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtNDA0LDEyICs0MDgsOSBAQAogLyogTXVzdCBiZSBjYWxsZWQgaW5zaWRlIHB1bXBfdHJhbnNmZXJzKCkgKi8KIHN0YXRpYyB2b2lkIHBvbGxfdHJhbnNmZXIoc3RydWN0IGR3X3NwaSAqZHdzKQogewotCWlmIChkd3MtPnR4KSB7Ci0JCXdoaWxlIChkd3MtPndyaXRlKGR3cykpCi0JCQlkd3MtPnJlYWQoZHdzKTsKLQl9CisJd2hpbGUgKGR3cy0+d3JpdGUoZHdzKSkKKwkJZHdzLT5yZWFkKGR3cyk7CiAKLQlkd3MtPnJlYWQoZHdzKTsKIAl0cmFuc2Zlcl9jb21wbGV0ZShkd3MpOwogfQogCkBAIC00MjgsNiArNDI5LDcgQEAKIAl1OCBiaXRzID0gMDsKIAl1OCBpbWFzayA9IDA7CiAJdTggY3NfY2hhbmdlID0gMDsKKwl1MTYgdHhpbnRfbGV2ZWwgPSAwOwogCXUxNiBjbGtfZGl2ID0gMDsKIAl1MzIgc3BlZWQgPSAwOwogCXUzMiBjcjAgPSAwOwpAQCAtNDM4LDYgKzQ0MCw5IEBACiAJY2hpcCA9IGR3cy0+Y3VyX2NoaXA7CiAJc3BpID0gbWVzc2FnZS0+c3BpOwogCisJaWYgKHVubGlrZWx5KCFjaGlwLT5jbGtfZGl2KSkKKwkJY2hpcC0+Y2xrX2RpdiA9IGR3cy0+bWF4X2ZyZXEgLyBjaGlwLT5zcGVlZF9oejsKKwogCWlmIChtZXNzYWdlLT5zdGF0ZSA9PSBFUlJPUl9TVEFURSkgewogCQltZXNzYWdlLT5zdGF0dXMgPSAtRUlPOwogCQlnb3RvIGVhcmx5X2V4aXQ7CkBAIC00OTIsNyArNDk3LDcgQEAKIAogCQkJLyogY2xrX2RpdiBkb2Vzbid0IHN1cHBvcnQgb2RkIG51bWJlciAqLwogCQkJY2xrX2RpdiA9IGR3cy0+bWF4X2ZyZXEgLyBzcGVlZDsKLQkJCWNsa19kaXYgPSAoY2xrX2RpdiA+PiAxKSA8PCAxOworCQkJY2xrX2RpdiA9IChjbGtfZGl2ICsgMSkgJiAweGZmZmU7CiAKIAkJCWNoaXAtPnNwZWVkX2h6ID0gc3BlZWQ7CiAJCQljaGlwLT5jbGtfZGl2ID0gY2xrX2RpdjsKQEAgLTUzMiwxNCArNTM3LDM1IEBACiAJfQogCW1lc3NhZ2UtPnN0YXRlID0gUlVOTklOR19TVEFURTsKIAorCS8qCisJICogQWRqdXN0IHRyYW5zZmVyIG1vZGUgaWYgbmVjZXNzYXJ5LiBSZXF1aXJlcyBwbGF0Zm9ybSBkZXBlbmRlbnQKKwkgKiBjaGlwc2VsZWN0IG1lY2hhbmlzbS4KKwkgKi8KKwlpZiAoZHdzLT5jc19jb250cm9sKSB7CisJCWlmIChkd3MtPnJ4ICYmIGR3cy0+dHgpCisJCQljaGlwLT50bW9kZSA9IDB4MDA7CisJCWVsc2UgaWYgKGR3cy0+cngpCisJCQljaGlwLT50bW9kZSA9IDB4MDI7CisJCWVsc2UKKwkJCWNoaXAtPnRtb2RlID0gMHgwMTsKKworCQljcjAgJj0gfigweDMgPDwgU1BJX01PREVfT0ZGU0VUKTsKKwkJY3IwIHw9IChjaGlwLT50bW9kZSA8PCBTUElfVE1PRF9PRkZTRVQpOworCX0KKwogCS8qIENoZWNrIGlmIGN1cnJlbnQgdHJhbnNmZXIgaXMgYSBETUEgdHJhbnNhY3Rpb24gKi8KIAlkd3MtPmRtYV9tYXBwZWQgPSBtYXBfZG1hX2J1ZmZlcnMoZHdzKTsKIAorCS8qCisJICogSW50ZXJydXB0IG1vZGUKKwkgKiB3ZSBvbmx5IG5lZWQgc2V0IHRoZSBUWEVJIElSUSwgYXMgVFgvUlggYWx3YXlzIGhhcHBlbiBzeW5jcm9uaXplbHkKKwkgKi8KIAlpZiAoIWR3cy0+ZG1hX21hcHBlZCAmJiAhY2hpcC0+cG9sbF9tb2RlKSB7Ci0JCWlmIChkd3MtPnJ4KQotCQkJaW1hc2sgfD0gU1BJX0lOVF9SWEZJOwotCQlpZiAoZHdzLT50eCkKLQkJCWltYXNrIHw9IFNQSV9JTlRfVFhFSTsKKwkJaW50IHRlbXBsZW4gPSBkd3MtPmxlbiAvIGR3cy0+bl9ieXRlczsKKwkJdHhpbnRfbGV2ZWwgPSBkd3MtPmZpZm9fbGVuIC8gMjsKKwkJdHhpbnRfbGV2ZWwgPSAodGVtcGxlbiA+IHR4aW50X2xldmVsKSA/IHR4aW50X2xldmVsIDogdGVtcGxlbjsKKworCQlpbWFzayB8PSBTUElfSU5UX1RYRUk7CiAJCWR3cy0+dHJhbnNmZXJfaGFuZGxlciA9IGludGVycnVwdF90cmFuc2ZlcjsKIAl9CiAKQEAgLTU0OSwyMSArNTc1LDIzIEBACiAJICoJMi4gY2xrX2RpdiBpcyBjaGFuZ2VkCiAJICoJMy4gY29udHJvbCB2YWx1ZSBjaGFuZ2VzCiAJICovCi0JaWYgKGR3X3JlYWR3KGR3cywgY3RybDApICE9IGNyMCB8fCBjc19jaGFuZ2UgfHwgY2xrX2RpdikgeworCWlmIChkd19yZWFkdyhkd3MsIGN0cmwwKSAhPSBjcjAgfHwgY3NfY2hhbmdlIHx8IGNsa19kaXYgfHwgaW1hc2spIHsKIAkJc3BpX2VuYWJsZV9jaGlwKGR3cywgMCk7CiAKIAkJaWYgKGR3X3JlYWR3KGR3cywgY3RybDApICE9IGNyMCkKIAkJCWR3X3dyaXRldyhkd3MsIGN0cmwwLCBjcjApOwogCi0JCS8qIFNldCB0aGUgaW50ZXJydXB0IG1hc2ssIGZvciBwb2xsIG1vZGUganVzdCBkaWFibGUgYWxsIGludCAqLwotCQlzcGlfbWFza19pbnRyKGR3cywgMHhmZik7Ci0JCWlmICghY2hpcC0+cG9sbF9tb2RlKQotCQkJc3BpX3VtYXNrX2ludHIoZHdzLCBpbWFzayk7Ci0KIAkJc3BpX3NldF9jbGsoZHdzLCBjbGtfZGl2ID8gY2xrX2RpdiA6IGNoaXAtPmNsa19kaXYpOwogCQlzcGlfY2hpcF9zZWwoZHdzLCBzcGktPmNoaXBfc2VsZWN0KTsKLQkJc3BpX2VuYWJsZV9jaGlwKGR3cywgMSk7CiAKKwkJLyogU2V0IHRoZSBpbnRlcnJ1cHQgbWFzaywgZm9yIHBvbGwgbW9kZSBqdXN0IGRpYWJsZSBhbGwgaW50ICovCisJCXNwaV9tYXNrX2ludHIoZHdzLCAweGZmKTsKKwkJaWYgKGltYXNrKQorCQkJc3BpX3VtYXNrX2ludHIoZHdzLCBpbWFzayk7CisJCWlmICh0eGludF9sZXZlbCkKKwkJCWR3X3dyaXRldyhkd3MsIHR4Zmx0ciwgdHhpbnRfbGV2ZWwpOworCisJCXNwaV9lbmFibGVfY2hpcChkd3MsIDEpOwogCQlpZiAoY3NfY2hhbmdlKQogCQkJZHdzLT5wcmV2X2NoaXAgPSBjaGlwOwogCX0KQEAgLTcxMiwxMSArNzQwLDExIEBACiAJfQogCWNoaXAtPmJpdHNfcGVyX3dvcmQgPSBzcGktPmJpdHNfcGVyX3dvcmQ7CiAKKwlpZiAoIXNwaS0+bWF4X3NwZWVkX2h6KSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiTm8gbWF4IHNwZWVkIEhaIHBhcmFtZXRlclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAljaGlwLT5zcGVlZF9oeiA9IHNwaS0+bWF4X3NwZWVkX2h6OwotCWlmIChjaGlwLT5zcGVlZF9oeikKLQkJY2hpcC0+Y2xrX2RpdiA9IDI1MDAwMDAwIC8gY2hpcC0+c3BlZWRfaHo7Ci0JZWxzZQotCQljaGlwLT5jbGtfZGl2ID0gODsJLyogZGVmYXVsdCB2YWx1ZSAqLwogCiAJY2hpcC0+dG1vZGUgPSAwOyAvKiBUeCAmIFJ4ICovCiAJLyogRGVmYXVsdCBTUEkgbW9kZSBpcyBTQ1BPTCA9IDAsIFNDUEggPSAwICovCkBAIC03MzUsNyArNzYzLDcgQEAKIAlrZnJlZShjaGlwKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaW5pdF9xdWV1ZShzdHJ1Y3QgZHdfc3BpICpkd3MpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpbml0X3F1ZXVlKHN0cnVjdCBkd19zcGkgKmR3cykKIHsKIAlJTklUX0xJU1RfSEVBRCgmZHdzLT5xdWV1ZSk7CiAJc3Bpbl9sb2NrX2luaXQoJmR3cy0+bG9jayk7CkBAIC04MTcsNiArODQ1LDIyIEBACiAJc3BpX21hc2tfaW50cihkd3MsIDB4ZmYpOwogCXNwaV9lbmFibGVfY2hpcChkd3MsIDEpOwogCWZsdXNoKGR3cyk7CisKKwkvKgorCSAqIFRyeSB0byBkZXRlY3QgdGhlIEZJRk8gZGVwdGggaWYgbm90IHNldCBieSBpbnRlcmZhY2UgZHJpdmVyLAorCSAqIHRoZSBkZXB0aCBjb3VsZCBiZSBmcm9tIDIgdG8gMjU2IGZyb20gSFcgc3BlYworCSAqLworCWlmICghZHdzLT5maWZvX2xlbikgeworCQl1MzIgZmlmbzsKKwkJZm9yIChmaWZvID0gMjsgZmlmbyA8PSAyNTc7IGZpZm8rKykgeworCQkJZHdfd3JpdGV3KGR3cywgdHhmbHRyLCBmaWZvKTsKKwkJCWlmIChmaWZvICE9IGR3X3JlYWR3KGR3cywgdHhmbHRyKSkKKwkJCQlicmVhazsKKwkJfQorCisJCWR3cy0+Zmlmb19sZW4gPSAoZmlmbyA9PSAyNTcpID8gMCA6IGZpZm87CisJCWR3X3dyaXRldyhkd3MsIHR4Zmx0ciwgMCk7CisJfQogfQogCiBpbnQgX19kZXZpbml0IGR3X3NwaV9hZGRfaG9zdChzdHJ1Y3QgZHdfc3BpICpkd3MpCkBAIC05MTMsNiArOTU3LDcgQEAKIAkvKiBEaXNjb25uZWN0IGZyb20gdGhlIFNQSSBmcmFtZXdvcmsgKi8KIAlzcGlfdW5yZWdpc3Rlcl9tYXN0ZXIoZHdzLT5tYXN0ZXIpOwogfQorRVhQT1JUX1NZTUJPTChkd19zcGlfcmVtb3ZlX2hvc3QpOwogCiBpbnQgZHdfc3BpX3N1c3BlbmRfaG9zdChzdHJ1Y3QgZHdfc3BpICpkd3MpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9kd19zcGlfbW1pby5jIGIvZHJpdmVycy9zcGkvZHdfc3BpX21taW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzViNDVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvZHdfc3BpX21taW8uYwpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIGR3X3NwaV9tbWlvLmMgLSBNZW1vcnktbWFwcGVkIGludGVyZmFjZSBkcml2ZXIgZm9yIERXIFNQSSBDb3JlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBPY3Rhc2ljIHNlbWljb25kdWN0b3IuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZHdfc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJkd19zcGlfbW1pbyIKKworc3RydWN0IGR3X3NwaV9tbWlvIHsKKwlzdHJ1Y3QgZHdfc3BpICBkd3M7CisJc3RydWN0IGNsayAgICAgKmNsazsKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGR3X3NwaV9tbWlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGR3X3NwaV9tbWlvICpkd3NtbWlvOworCXN0cnVjdCBkd19zcGkgKmR3czsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwgKmlvYXJlYTsKKwlpbnQgcmV0OworCisJZHdzbW1pbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkd19zcGlfbW1pbyksIEdGUF9LRVJORUwpOworCWlmICghZHdzbW1pbykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9lbmQ7CisJfQorCisJZHdzID0gJmR3c21taW8tPmR3czsKKworCS8qIEdldCBiYXNpYyBpbyByZXNvdXJjZSBhbmQgbWFwIGl0ICovCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIW1lbSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW0gcmVzb3VyY2U/XG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfa2ZyZWU7CisJfQorCisJaW9hcmVhID0gcmVxdWVzdF9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSwKKwkJCXBkZXYtPm5hbWUpOworCWlmICghaW9hcmVhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlNQSSByZWdpb24gYWxyZWFkeSBjbGFpbWVkXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl9rZnJlZTsKKwl9CisKKwlkd3MtPnJlZ3MgPSBpb3JlbWFwX25vY2FjaGUobWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKKwlpZiAoIWR3cy0+cmVncykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJTUEkgcmVnaW9uIGFscmVhZHkgbWFwcGVkXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfcmVsZWFzZV9yZWc7CisJfQorCisJZHdzLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChkd3MtPmlycSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIHJlc291cmNlP1xuIik7CisJCXJldCA9IGR3cy0+aXJxOyAvKiAtRU5YSU8gKi8KKwkJZ290byBlcnJfdW5tYXA7CisJfQorCisJZHdzbW1pby0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoIWR3c21taW8tPmNsaykgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9pcnE7CisJfQorCWNsa19lbmFibGUoZHdzbW1pby0+Y2xrKTsKKworCWR3cy0+cGFyZW50X2RldiA9ICZwZGV2LT5kZXY7CisJZHdzLT5idXNfbnVtID0gMDsKKwlkd3MtPm51bV9jcyA9IDQ7CisJZHdzLT5tYXhfZnJlcSA9IGNsa19nZXRfcmF0ZShkd3NtbWlvLT5jbGspOworCisJcmV0ID0gZHdfc3BpX2FkZF9ob3N0KGR3cyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfY2xrOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHdzbW1pbyk7CisJcmV0dXJuIDA7CisKK2Vycl9jbGs6CisJY2xrX2Rpc2FibGUoZHdzbW1pby0+Y2xrKTsKKwljbGtfcHV0KGR3c21taW8tPmNsayk7CisJZHdzbW1pby0+Y2xrID0gTlVMTDsKK2Vycl9pcnE6CisJZnJlZV9pcnEoZHdzLT5pcnEsIGR3cyk7CitlcnJfdW5tYXA6CisJaW91bm1hcChkd3MtPnJlZ3MpOworZXJyX3JlbGVhc2VfcmVnOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOworZXJyX2tmcmVlOgorCWtmcmVlKGR3c21taW8pOworZXJyX2VuZDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBkd19zcGlfbW1pb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHdfc3BpX21taW8gKmR3c21taW8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJY2xrX2Rpc2FibGUoZHdzbW1pby0+Y2xrKTsKKwljbGtfcHV0KGR3c21taW8tPmNsayk7CisJZHdzbW1pby0+Y2xrID0gTlVMTDsKKworCWZyZWVfaXJxKGR3c21taW8tPmR3cy5pcnEsICZkd3NtbWlvLT5kd3MpOworCWR3X3NwaV9yZW1vdmVfaG9zdCgmZHdzbW1pby0+ZHdzKTsKKwlpb3VubWFwKGR3c21taW8tPmR3cy5yZWdzKTsKKwlrZnJlZShkd3NtbWlvKTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR3X3NwaV9tbWlvX2RyaXZlciA9IHsKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGR3X3NwaV9tbWlvX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkd19zcGlfbW1pb19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmZHdfc3BpX21taW9fZHJpdmVyLCBkd19zcGlfbW1pb19wcm9iZSk7Cit9Cittb2R1bGVfaW5pdChkd19zcGlfbW1pb19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGR3X3NwaV9tbWlvX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHdfc3BpX21taW9fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGR3X3NwaV9tbWlvX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJKZWFuLUh1Z3VlcyBEZXNjaGVuZXMgPGplYW4taHVndWVzLmRlc2NoZW5lc0BvY3Rhc2ljLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVtb3J5LW1hcHBlZCBJL08gaW50ZXJmYWNlIGRyaXZlciBmb3IgRFcgU1BJIENvcmUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2R3X3NwaV9wY2kuYyBiL2RyaXZlcnMvc3BpL2R3X3NwaV9wY2kuYwppbmRleCAzNGJhNjkxLi4xZjA3MzVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9kd19zcGlfcGNpLmMKKysrIGIvZHJpdmVycy9zcGkvZHdfc3BpX3BjaS5jCkBAIC03Myw2ICs3Myw3IEBACiAJZHdzLT5udW1fY3MgPSA0OwogCWR3cy0+bWF4X2ZyZXEgPSAyNTAwMDAwMDsJLyogZm9yIE1vb3Jlc3R3b24gKi8KIAlkd3MtPmlycSA9IHBkZXYtPmlycTsKKwlkd3MtPmZpZm9fbGVuID0gNDA7CQkvKiBGSUZPIGhhcyA0MCB3b3JkcyBidWZmZXIgKi8KIAogCXJldCA9IGR3X3NwaV9hZGRfaG9zdChkd3MpOwogCWlmIChyZXQpCkBAIC05OCw2ICs5OSw3IEBACiAJc3RydWN0IGR3X3NwaV9wY2kgKmR3cGNpID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWR3X3NwaV9yZW1vdmVfaG9zdCgmZHdwY2ktPmR3cyk7CiAJaW91bm1hcChkd3BjaS0+ZHdzLnJlZ3MpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKIAlrZnJlZShkd3BjaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9tcGM1Mnh4X3BzY19zcGkuYyBiL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jCmluZGV4IGY1MGM4MWQuLjA0NzQ3ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jCkBAIC01MDMsNyArNTAzLDcgQEAKIAlyZXR1cm4gbXBjNTJ4eF9wc2Nfc3BpX2RvX3JlbW92ZSgmb3AtPmRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzUyeHhfcHNjX3NwaV9vZl9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTJ4eF9wc2Nfc3BpX29mX21hdGNoW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1wc2Mtc3BpIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gIm1wYzUyMDAtcHNjLXNwaSIsIH0sIC8qIG9sZCAqLwogCXt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9tcGM1Mnh4X3NwaS5jIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9zcGkuYwppbmRleCA0NWJmZTY0Li42ZWFiNDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9tcGM1Mnh4X3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL21wYzUyeHhfc3BpLmMKQEAgLTU1MCw3ICs1NTAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1Mnh4X3NwaV9tYXRjaFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1Mnh4X3NwaV9tYXRjaFtdIF9fZGV2aW5pdGNvbnN0ID0gewogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtc3BpIiwgfSwKIAl7fQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9pbXguYyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwppbmRleCAxODkzZjFlLi4wZGRiYmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfaW14LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX2lteC5jCkBAIC00NjksNyArNDY5LDcgQEAKIAlzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CiAJaW50IGdwaW8gPSBzcGlfaW14LT5jaGlwc2VsZWN0W3NwaS0+Y2hpcF9zZWxlY3RdOwogCi0JcHJfZGVidWcoIiVzOiBtb2RlICVkLCAldSBicHcsICVkIGh6XG4iLCBfX2Z1bmNfXywKKwlkZXZfZGJnKCZzcGktPmRldiwgIiVzOiBtb2RlICVkLCAldSBicHcsICVkIGh6XG4iLCBfX2Z1bmNfXywKIAkJIHNwaS0+bW9kZSwgc3BpLT5iaXRzX3Blcl93b3JkLCBzcGktPm1heF9zcGVlZF9oeik7CiAKIAlpZiAoZ3BpbyA+PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX21wYzh4eHguYyBiL2RyaXZlcnMvc3BpL3NwaV9tcGM4eHh4LmMKaW5kZXggMWZiMmE2ZS4uNGYwY2M5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX21wYzh4eHguYworKysgYi9kcml2ZXJzL3NwaS9zcGlfbXBjOHh4eC5jCkBAIC0zNjUsNyArMzY1LDcgQEAKIAogCWlmICgobXBjOHh4eF9zcGktPnNwaWJyZyAvIGh6KSA+IDY0KSB7CiAJCWNzLT5od19tb2RlIHw9IFNQTU9ERV9ESVYxNjsKLQkJcG0gPSBtcGM4eHh4X3NwaS0+c3BpYnJnIC8gKGh6ICogNjQpOworCQlwbSA9IChtcGM4eHh4X3NwaS0+c3BpYnJnIC0gMSkgLyAoaHogKiA2NCkgKyAxOwogCiAJCVdBUk5fT05DRShwbSA+IDE2LCAiJXM6IFJlcXVlc3RlZCBzcGVlZCBpcyB0b28gbG93OiAlZCBIei4gIgogCQkJICAiV2lsbCB1c2UgJWQgSHogaW5zdGVhZC5cbiIsIGRldl9uYW1lKCZzcGktPmRldiksCkBAIC0zNzMsNyArMzczLDcgQEAKIAkJaWYgKHBtID4gMTYpCiAJCQlwbSA9IDE2OwogCX0gZWxzZQotCQlwbSA9IG1wYzh4eHhfc3BpLT5zcGlicmcgLyAoaHogKiA0KTsKKwkJcG0gPSAobXBjOHh4eF9zcGktPnNwaWJyZyAtIDEpIC8gKGh6ICogNCkgKyAxOwogCWlmIChwbSkKIAkJcG0tLTsKIApAQCAtMTMyOCw3ICsxMzI4LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHBsYXRfbXBjOHh4eF9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKLQl1bnNpZ25lZCBpbnQgaXJxOworCWludCBpcnE7CiAJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKIAogCWlmICghcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpCkBAIC0xMzM5LDcgKzEzMzksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKCFpcnEpCisJaWYgKGlycSA8PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1hc3RlciA9IG1wYzh4eHhfc3BpX3Byb2JlKCZwZGV2LT5kZXYsIG1lbSwgaXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9wcGM0eHguYyBiL2RyaXZlcnMvc3BpL3NwaV9wcGM0eHguYwppbmRleCAxNDBhMThkLi42ZDhkNDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfcHBjNHh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3BwYzR4eC5jCkBAIC01NzgsNyArNTc4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgc3BpX3BwYzR4eF9vZl9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc3BpX3BwYzR4eF9vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAiaWJtLHBwYzR4eC1zcGkiLCB9LAogCXt9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zM2M2NHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfczNjNjR4eC5jCmluZGV4IDg4YTQ1NmQuLjk3MzY1ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9zM2M2NHh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3MzYzY0eHguYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KIAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+Ci0jaW5jbHVkZSA8cGxhdC9zcGkuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzY0eHgtc3BpLmg+CiAKIC8qIFJlZ2lzdGVycyBhbmQgYml0LWZpZWxkcyAqLwogCkBAIC0xMzcsNiArMTM3LDcgQEAKIC8qKgogICogc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhIC0gUnVudGltZSBpbmZvIGhvbGRlciBmb3IgU1BJIGRyaXZlci4KICAqIEBjbGs6IFBvaW50ZXIgdG8gdGhlIHNwaSBjbG9jay4KKyAqIEBzcmNfY2xrOiBQb2ludGVyIHRvIHRoZSBjbG9jayB1c2VkIHRvIGdlbmVyYXRlIFNQSSBzaWduYWxzLgogICogQG1hc3RlcjogUG9pbnRlciB0byB0aGUgU1BJIFByb3RvY29sIG1hc3Rlci4KICAqIEB3b3JrcXVldWU6IFdvcmsgcXVldWUgZm9yIHRoZSBTUEkgeGZlciByZXF1ZXN0cy4KICAqIEBjbnRybHJfaW5mbzogUGxhdGZvcm0gc3BlY2lmaWMgZGF0YSBmb3IgdGhlIGNvbnRyb2xsZXIgdGhpcyBkcml2ZXIgbWFuYWdlcy4KQEAgLTE1NywxMCArMTU4LDExIEBACiBzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgewogCXZvaWQgX19pb21lbSAgICAgICAgICAgICAgICAgICAgKnJlZ3M7CiAJc3RydWN0IGNsayAgICAgICAgICAgICAgICAgICAgICAqY2xrOworCXN0cnVjdCBjbGsgICAgICAgICAgICAgICAgICAgICAgKnNyY19jbGs7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAgICAgICAgICAqcGRldjsKIAlzdHJ1Y3Qgc3BpX21hc3RlciAgICAgICAgICAgICAgICptYXN0ZXI7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJICAgICAgICAqd29ya3F1ZXVlOwotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAgKmNudHJscl9pbmZvOworCXN0cnVjdCBzM2M2NHh4X3NwaV9pbmZvICAqY250cmxyX2luZm87CiAJc3RydWN0IHNwaV9kZXZpY2UgICAgICAgICAgICAgICAqdGdsX3NwaTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICAgICAgICAgIHdvcms7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgICAgICBxdWV1ZTsKQEAgLTE4MCw3ICsxODIsNyBAQAogCiBzdGF0aWMgdm9pZCBmbHVzaF9maWZvKHN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkKQogewotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKIAl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzZGQtPnJlZ3M7CiAJdW5zaWduZWQgbG9uZyBsb29wczsKIAl1MzIgdmFsOwpAQCAtMjI1LDcgKzIyNyw3IEBACiAJCQkJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKIAkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyLCBpbnQgZG1hX21vZGUpCiB7Ci0Jc3RydWN0IHMzYzY0eHhfc3BpX2NudHJscl9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOworCXN0cnVjdCBzM2M2NHh4X3NwaV9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOwogCXZvaWQgX19pb21lbSAqcmVncyA9IHNkZC0+cmVnczsKIAl1MzIgbW9kZWNmZywgY2hjZmc7CiAKQEAgLTI5OCwxOSArMzAwLDIwIEBACiAJCWlmIChzZGQtPnRnbF9zcGkgIT0gc3BpKSB7IC8qIGlmIGxhc3QgbXNzZyBvbiBkaWZmIGRldmljZSAqLwogCQkJLyogRGVzZWxlY3QgdGhlIGxhc3QgdG9nZ2xlZCBkZXZpY2UgKi8KIAkJCWNzID0gc2RkLT50Z2xfc3BpLT5jb250cm9sbGVyX2RhdGE7Ci0JCQljcy0+c2V0X2xldmVsKHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIID8gMCA6IDEpOworCQkJY3MtPnNldF9sZXZlbChjcy0+bGluZSwKKwkJCQkJc3BpLT5tb2RlICYgU1BJX0NTX0hJR0ggPyAwIDogMSk7CiAJCX0KIAkJc2RkLT50Z2xfc3BpID0gTlVMTDsKIAl9CiAKIAljcyA9IHNwaS0+Y29udHJvbGxlcl9kYXRhOwotCWNzLT5zZXRfbGV2ZWwoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0ggPyAxIDogMCk7CisJY3MtPnNldF9sZXZlbChjcy0+bGluZSwgc3BpLT5tb2RlICYgU1BJX0NTX0hJR0ggPyAxIDogMCk7CiB9CiAKIHN0YXRpYyBpbnQgd2FpdF9mb3JfeGZlcihzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCwKIAkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyLCBpbnQgZG1hX21vZGUpCiB7Ci0Jc3RydWN0IHMzYzY0eHhfc3BpX2NudHJscl9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOworCXN0cnVjdCBzM2M2NHh4X3NwaV9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOwogCXZvaWQgX19pb21lbSAqcmVncyA9IHNkZC0+cmVnczsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgbXM7CkBAIC0zODQsMTIgKzM4NywxMSBAQAogCWlmIChzZGQtPnRnbF9zcGkgPT0gc3BpKQogCQlzZGQtPnRnbF9zcGkgPSBOVUxMOwogCi0JY3MtPnNldF9sZXZlbChzcGktPm1vZGUgJiBTUElfQ1NfSElHSCA/IDAgOiAxKTsKKwljcy0+c2V0X2xldmVsKGNzLT5saW5lLCBzcGktPm1vZGUgJiBTUElfQ1NfSElHSCA/IDAgOiAxKTsKIH0KIAogc3RhdGljIHZvaWQgczNjNjR4eF9zcGlfY29uZmlnKHN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkKQogewotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKIAl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzZGQtPnJlZ3M7CiAJdTMyIHZhbDsKIApAQCAtNDM1LDcgKzQzNyw3IEBACiAJLyogQ29uZmlndXJlIENsb2NrICovCiAJdmFsID0gcmVhZGwocmVncyArIFMzQzY0WFhfU1BJX0NMS19DRkcpOwogCXZhbCAmPSB+UzNDNjRYWF9TUElfUFNSX01BU0s7Ci0JdmFsIHw9ICgoY2xrX2dldF9yYXRlKHNjaS0+c3JjX2NsaykgLyBzZGQtPmN1cl9zcGVlZCAvIDIgLSAxKQorCXZhbCB8PSAoKGNsa19nZXRfcmF0ZShzZGQtPnNyY19jbGspIC8gc2RkLT5jdXJfc3BlZWQgLyAyIC0gMSkKIAkJCSYgUzNDNjRYWF9TUElfUFNSX01BU0spOwogCXdyaXRlbCh2YWwsIHJlZ3MgKyBTM0M2NFhYX1NQSV9DTEtfQ0ZHKTsKIApAQCAtNTU4LDcgKzU2MCw3IEBACiBzdGF0aWMgdm9pZCBoYW5kbGVfbXNnKHN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkLAogCQkJCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZykKIHsKLQlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CisJc3RydWN0IHMzYzY0eHhfc3BpX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CiAJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IG1zZy0+c3BpOwogCXN0cnVjdCBzM2M2NHh4X3NwaV9jc2luZm8gKmNzID0gc3BpLT5jb250cm9sbGVyX2RhdGE7CiAJc3RydWN0IHNwaV90cmFuc2ZlciAqeGZlcjsKQEAgLTYzMiw4ICs2MzQsOCBAQAogCQlTM0M2NFhYX1NQSV9ERUFDVChzZGQpOwogCiAJCWlmIChzdGF0dXMpIHsKLQkJCWRldl9lcnIoJnNwaS0+ZGV2LCAiSS9PIEVycm9yOiBcCi0JCQkJcngtJWQgdHgtJWQgcmVzOnJ4LSVjIHR4LSVjIGxlbi0lZFxuIiwKKwkJCWRldl9lcnIoJnNwaS0+ZGV2LCAiSS9PIEVycm9yOiAiCisJCQkJInJ4LSVkIHR4LSVkIHJlczpyeC0lYyB0eC0lYyBsZW4tJWRcbiIsCiAJCQkJeGZlci0+cnhfYnVmID8gMSA6IDAsIHhmZXItPnR4X2J1ZiA/IDEgOiAwLAogCQkJCShzZGQtPnN0YXRlICYgUlhCVVNZKSA/ICdmJyA6ICdwJywKIAkJCQkoc2RkLT5zdGF0ZSAmIFRYQlVTWSkgPyAnZicgOiAncCcsCkBAIC03ODYsNyArNzg4LDcgQEAKIHsKIAlzdHJ1Y3QgczNjNjR4eF9zcGlfY3NpbmZvICpjcyA9IHNwaS0+Y29udHJvbGxlcl9kYXRhOwogCXN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkOwotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpOworCXN0cnVjdCBzM2M2NHh4X3NwaV9pbmZvICpzY2k7CiAJc3RydWN0IHNwaV9tZXNzYWdlICptc2c7CiAJdTMyIHBzciwgc3BlZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTgzMSwxNyArODMzLDE3IEBACiAJfQogCiAJLyogQ2hlY2sgaWYgd2UgY2FuIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCByYXRlICovCi0Jc3BlZWQgPSBjbGtfZ2V0X3JhdGUoc2NpLT5zcmNfY2xrKSAvIDIgLyAoMCArIDEpOyAvKiBNYXggcG9zc2libGUgKi8KKwlzcGVlZCA9IGNsa19nZXRfcmF0ZShzZGQtPnNyY19jbGspIC8gMiAvICgwICsgMSk7IC8qIE1heCBwb3NzaWJsZSAqLwogCiAJaWYgKHNwaS0+bWF4X3NwZWVkX2h6ID4gc3BlZWQpCiAJCXNwaS0+bWF4X3NwZWVkX2h6ID0gc3BlZWQ7CiAKLQlwc3IgPSBjbGtfZ2V0X3JhdGUoc2NpLT5zcmNfY2xrKSAvIDIgLyBzcGktPm1heF9zcGVlZF9oeiAtIDE7CisJcHNyID0gY2xrX2dldF9yYXRlKHNkZC0+c3JjX2NsaykgLyAyIC8gc3BpLT5tYXhfc3BlZWRfaHogLSAxOwogCXBzciAmPSBTM0M2NFhYX1NQSV9QU1JfTUFTSzsKIAlpZiAocHNyID09IFMzQzY0WFhfU1BJX1BTUl9NQVNLKQogCQlwc3ItLTsKIAotCXNwZWVkID0gY2xrX2dldF9yYXRlKHNjaS0+c3JjX2NsaykgLyAyIC8gKHBzciArIDEpOworCXNwZWVkID0gY2xrX2dldF9yYXRlKHNkZC0+c3JjX2NsaykgLyAyIC8gKHBzciArIDEpOwogCWlmIChzcGktPm1heF9zcGVlZF9oeiA8IHNwZWVkKSB7CiAJCWlmIChwc3IrMSA8IFMzQzY0WFhfU1BJX1BTUl9NQVNLKSB7CiAJCQlwc3IrKzsKQEAgLTg1MSw3ICs4NTMsNyBAQAogCQl9CiAJfQogCi0Jc3BlZWQgPSBjbGtfZ2V0X3JhdGUoc2NpLT5zcmNfY2xrKSAvIDIgLyAocHNyICsgMSk7CisJc3BlZWQgPSBjbGtfZ2V0X3JhdGUoc2RkLT5zcmNfY2xrKSAvIDIgLyAocHNyICsgMSk7CiAJaWYgKHNwaS0+bWF4X3NwZWVkX2h6ID49IHNwZWVkKQogCQlzcGktPm1heF9zcGVlZF9oeiA9IHNwZWVkOwogCWVsc2UKQEAgLTg2Nyw3ICs4NjksNyBAQAogCiBzdGF0aWMgdm9pZCBzM2M2NHh4X3NwaV9od2luaXQoc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQsIGludCBjaGFubmVsKQogewotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKKwlzdHJ1Y3QgczNjNjR4eF9zcGlfaW5mbyAqc2NpID0gc2RkLT5jbnRybHJfaW5mbzsKIAl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzZGQtPnJlZ3M7CiAJdW5zaWduZWQgaW50IHZhbDsKIApAQCAtOTAyLDcgKzkwNCw3IEBACiB7CiAJc3RydWN0IHJlc291cmNlCSptZW1fcmVzLCAqZG1hdHhfcmVzLCAqZG1hcnhfcmVzOwogCXN0cnVjdCBzM2M2NHh4X3NwaV9kcml2ZXJfZGF0YSAqc2RkOwotCXN0cnVjdCBzM2M2NHh4X3NwaV9jbnRybHJfaW5mbyAqc2NpOworCXN0cnVjdCBzM2M2NHh4X3NwaV9pbmZvICpzY2k7CiAJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKIAlpbnQgcmV0OwogCkBAIC0xMDAwLDE4ICsxMDAyLDE1IEBACiAJCWdvdG8gZXJyNDsKIAl9CiAKLQlpZiAoc2NpLT5zcmNfY2xrX25yID09IFMzQzY0WFhfU1BJX1NSQ0NMS19QQ0xLKQotCQlzY2ktPnNyY19jbGsgPSBzZGQtPmNsazsKLQllbHNlCi0JCXNjaS0+c3JjX2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgc2NpLT5zcmNfY2xrX25hbWUpOwotCWlmIChJU19FUlIoc2NpLT5zcmNfY2xrKSkgeworCXNkZC0+c3JjX2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgc2NpLT5zcmNfY2xrX25hbWUpOworCWlmIChJU19FUlIoc2RkLT5zcmNfY2xrKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkiVW5hYmxlIHRvIGFjcXVpcmUgY2xvY2sgJyVzJ1xuIiwgc2NpLT5zcmNfY2xrX25hbWUpOwotCQlyZXQgPSBQVFJfRVJSKHNjaS0+c3JjX2Nsayk7CisJCXJldCA9IFBUUl9FUlIoc2RkLT5zcmNfY2xrKTsKIAkJZ290byBlcnI1OwogCX0KIAotCWlmIChzY2ktPnNyY19jbGsgIT0gc2RkLT5jbGsgJiYgY2xrX2VuYWJsZShzY2ktPnNyY19jbGspKSB7CisJaWYgKGNsa19lbmFibGUoc2RkLT5zcmNfY2xrKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZG4ndCBlbmFibGUgY2xvY2sgJyVzJ1xuIiwKIAkJCQkJCQlzY2ktPnNyY19jbGtfbmFtZSk7CiAJCXJldCA9IC1FQlVTWTsKQEAgLTEwNDAsMTEgKzEwMzksMTAgQEAKIAkJZ290byBlcnI4OwogCX0KIAotCWRldl9kYmcoJnBkZXYtPmRldiwgIlNhbXN1bmcgU29DIFNQSSBEcml2ZXIgbG9hZGVkIGZvciBCdXMgU1BJLSVkIFwKLQkJCQkJd2l0aCAlZCBTbGF2ZXMgYXR0YWNoZWRcbiIsCisJZGV2X2RiZygmcGRldi0+ZGV2LCAiU2Ftc3VuZyBTb0MgU1BJIERyaXZlciBsb2FkZWQgZm9yIEJ1cyBTUEktJWQgIgorCQkJCQkid2l0aCAlZCBTbGF2ZXMgYXR0YWNoZWRcbiIsCiAJCQkJCXBkZXYtPmlkLCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0KTsKLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJcdElPbWVtPVsweCV4LTB4JXhdXAotCQkJCQlcdERNQT1bUngtJWQsIFR4LSVkXVxuIiwKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJcdElPbWVtPVsweCV4LTB4JXhdXHRETUE9W1J4LSVkLCBUeC0lZF1cbiIsCiAJCQkJCW1lbV9yZXMtPmVuZCwgbWVtX3Jlcy0+c3RhcnQsCiAJCQkJCXNkZC0+cnhfZG1hY2gsIHNkZC0+dHhfZG1hY2gpOwogCkBAIC0xMDUzLDExICsxMDUxLDkgQEAKIGVycjg6CiAJZGVzdHJveV93b3JrcXVldWUoc2RkLT53b3JrcXVldWUpOwogZXJyNzoKLQlpZiAoc2NpLT5zcmNfY2xrICE9IHNkZC0+Y2xrKQotCQljbGtfZGlzYWJsZShzY2ktPnNyY19jbGspOworCWNsa19kaXNhYmxlKHNkZC0+c3JjX2Nsayk7CiBlcnI2OgotCWlmIChzY2ktPnNyY19jbGsgIT0gc2RkLT5jbGspCi0JCWNsa19wdXQoc2NpLT5zcmNfY2xrKTsKKwljbGtfcHV0KHNkZC0+c3JjX2Nsayk7CiBlcnI1OgogCWNsa19kaXNhYmxlKHNkZC0+Y2xrKTsKIGVycjQ6CkBAIC0xMDc4LDcgKzEwNzQsNiBAQAogewogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7CiAJc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7Ci0Jc3RydWN0IHMzYzY0eHhfc3BpX2NudHJscl9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOwogCXN0cnVjdCByZXNvdXJjZQkqbWVtX3JlczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xMDkzLDExICsxMDg4LDggQEAKIAogCWRlc3Ryb3lfd29ya3F1ZXVlKHNkZC0+d29ya3F1ZXVlKTsKIAotCWlmIChzY2ktPnNyY19jbGsgIT0gc2RkLT5jbGspCi0JCWNsa19kaXNhYmxlKHNjaS0+c3JjX2Nsayk7Ci0KLQlpZiAoc2NpLT5zcmNfY2xrICE9IHNkZC0+Y2xrKQotCQljbGtfcHV0KHNjaS0+c3JjX2Nsayk7CisJY2xrX2Rpc2FibGUoc2RkLT5zcmNfY2xrKTsKKwljbGtfcHV0KHNkZC0+c3JjX2Nsayk7CiAKIAljbGtfZGlzYWJsZShzZGQtPmNsayk7CiAJY2xrX3B1dChzZGQtPmNsayk7CkBAIC0xMTA1LDcgKzEwOTcsOCBAQAogCWlvdW5tYXAoKHZvaWQgKikgc2RkLT5yZWdzKTsKIAogCW1lbV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW1fcmVzKSk7CisJaWYgKG1lbV9yZXMgIT0gTlVMTCkKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbV9yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbV9yZXMpKTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CkBAIC0xMTE4LDggKzExMTEsNiBAQAogewogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7CiAJc3RydWN0IHMzYzY0eHhfc3BpX2RyaXZlcl9kYXRhICpzZGQgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7Ci0Jc3RydWN0IHMzYzY0eHhfc3BpX2NudHJscl9pbmZvICpzY2kgPSBzZGQtPmNudHJscl9pbmZvOwotCXN0cnVjdCBzM2M2NHh4X3NwaV9jc2luZm8gKmNzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2RkLT5sb2NrLCBmbGFncyk7CkBAIC0xMTMwLDkgKzExMjEsNyBAQAogCQltc2xlZXAoMTApOwogCiAJLyogRGlzYWJsZSB0aGUgY2xvY2sgKi8KLQlpZiAoc2NpLT5zcmNfY2xrICE9IHNkZC0+Y2xrKQotCQljbGtfZGlzYWJsZShzY2ktPnNyY19jbGspOwotCisJY2xrX2Rpc2FibGUoc2RkLT5zcmNfY2xrKTsKIAljbGtfZGlzYWJsZShzZGQtPmNsayk7CiAKIAlzZGQtPmN1cl9zcGVlZCA9IDA7IC8qIE91dHB1dCBDbG9jayBpcyBzdG9wcGVkICovCkBAIC0xMTQ0LDE1ICsxMTMzLDEzIEBACiB7CiAJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IHNwaV9tYXN0ZXJfZ2V0KHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpKTsKIAlzdHJ1Y3QgczNjNjR4eF9zcGlfZHJpdmVyX2RhdGEgKnNkZCA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKLQlzdHJ1Y3QgczNjNjR4eF9zcGlfY250cmxyX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CisJc3RydWN0IHMzYzY0eHhfc3BpX2luZm8gKnNjaSA9IHNkZC0+Y250cmxyX2luZm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNjaS0+Y2ZnX2dwaW8ocGRldik7CiAKIAkvKiBFbmFibGUgdGhlIGNsb2NrICovCi0JaWYgKHNjaS0+c3JjX2NsayAhPSBzZGQtPmNsaykKLQkJY2xrX2VuYWJsZShzY2ktPnNyY19jbGspOwotCisJY2xrX2VuYWJsZShzZGQtPnNyY19jbGspOwogCWNsa19lbmFibGUoc2RkLT5jbGspOwogCiAJczNjNjR4eF9zcGlfaHdpbml0KHNkZCwgcGRldi0+aWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMgYi9kcml2ZXJzL3NwaS9zcGlfc2hfbXNpb2YuYwppbmRleCAzMDk3M2VjLi5kOTNiNjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfc2hfbXNpb2YuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfc2hfbXNpb2YuYwpAQCAtMjAsMTIgKzIwLDEyIEBACiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2JpdGJhbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc2hfbXNpb2YuaD4KIAotI2luY2x1ZGUgPGFzbS9zcGkuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKIHN0cnVjdCBzaF9tc2lvZl9zcGlfcHJpdiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfc3RtcC5jIGIvZHJpdmVycy9zcGkvc3BpX3N0bXAuYwppbmRleCAyNTUyYmIzLi5mYWRmZjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfc3RtcC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9zdG1wLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAkJCWJyZWFrOwkJCQkJCVwKIAkJfQkJCQkJCQlcCiAJCWNwdV9yZWxheCgpOwkJCQkJCVwKLQl9IHdoaWxlICh0aW1lX2JlZm9yZShlbmRfamlmZmllcywgamlmZmllcykpOwkJCVwKKwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmRfamlmZmllcykpOwkJCVwKIAlzdWNjZWVkZWQ7CQkJCQkJCVwKIAl9KQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS94aWxpbnhfc3BpLmMgYi9kcml2ZXJzL3NwaS94aWxpbnhfc3BpLmMKaW5kZXggOWYzODYzNy4uMWI0NzM2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3hpbGlueF9zcGkuYwpAQCAtOTMsNiArOTMsMjYgQEAKIAl2b2lkICgqcnhfZm4pIChzdHJ1Y3QgeGlsaW54X3NwaSAqKTsKIH07CiAKK3N0YXRpYyB2b2lkIHhzcGlfd3JpdGUzMih1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaW93cml0ZTMyKHZhbCwgYWRkcik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgeHNwaV9yZWFkMzIodm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBpb3JlYWQzMihhZGRyKTsKK30KKworc3RhdGljIHZvaWQgeHNwaV93cml0ZTMyX2JlKHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpb3dyaXRlMzJiZSh2YWwsIGFkZHIpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHhzcGlfcmVhZDMyX2JlKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gaW9yZWFkMzJiZShhZGRyKTsKK30KKwogc3RhdGljIHZvaWQgeHNwaV90eDgoc3RydWN0IHhpbGlueF9zcGkgKnhzcGkpCiB7CiAJeHNwaS0+d3JpdGVfZm4oKnhzcGktPnR4X3B0ciwgeHNwaS0+cmVncyArIFhTUElfVFhEX09GRlNFVCk7CkBAIC0zNzQsMTEgKzM5NCwxMSBAQAogCXhzcGktPm1lbSA9ICptZW07CiAJeHNwaS0+aXJxID0gaXJxOwogCWlmIChwZGF0YS0+bGl0dGxlX2VuZGlhbikgewotCQl4c3BpLT5yZWFkX2ZuID0gaW9yZWFkMzI7Ci0JCXhzcGktPndyaXRlX2ZuID0gaW93cml0ZTMyOworCQl4c3BpLT5yZWFkX2ZuID0geHNwaV9yZWFkMzI7CisJCXhzcGktPndyaXRlX2ZuID0geHNwaV93cml0ZTMyOwogCX0gZWxzZSB7Ci0JCXhzcGktPnJlYWRfZm4gPSBpb3JlYWQzMmJlOwotCQl4c3BpLT53cml0ZV9mbiA9IGlvd3JpdGUzMmJlOworCQl4c3BpLT5yZWFkX2ZuID0geHNwaV9yZWFkMzJfYmU7CisJCXhzcGktPndyaXRlX2ZuID0geHNwaV93cml0ZTMyX2JlOwogCX0KIAl4c3BpLT5iaXRzX3Blcl93b3JkID0gcGRhdGEtPmJpdHNfcGVyX3dvcmQ7CiAJaWYgKHhzcGktPmJpdHNfcGVyX3dvcmQgPT0gOCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkveGlsaW54X3NwaV9vZi5jIGIvZHJpdmVycy9zcGkveGlsaW54X3NwaV9vZi5jCmluZGV4IDcxZGMzYWQuLmVkMzRhOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3hpbGlueF9zcGlfb2YuYworKysgYi9kcml2ZXJzL3NwaS94aWxpbnhfc3BpX29mLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAlyZXR1cm4geGlsaW54X3NwaV9yZW1vdmUob3ApOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB4aWxpbnhfc3BpX29mX21hdGNoW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4aWxpbnhfc3BpX29mX21hdGNoW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1zcGktMi4wMC5hIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInhsbngseHBzLXNwaS0yLjAwLmIiLCB9LAogCXt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWJvYXJkLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWJvYXJkLmMKaW5kZXggOGNmN2YyNy4uYzMyNGY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1ib2FyZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtYm9hcmQuYwpAQCAtMTU5LDcgKzE1OSw3IEBACiAJc3RydWN0IGdvNzAwNyAqZ28gPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7CiAJc3RydWN0IGdvNzAwN191c2IgKnVzYjsKIAlpbnQgcmM7Ci0JaW50IGRldl9hZGRyID0gY2xpZW50LT5hZGRyOworCWludCBkZXZfYWRkciA9IGNsaWVudC0+YWRkciA8PCAxOyAgLyogZmlybXdhcmUgd2FudHMgOC1iaXQgYWRkcmVzcyAqLwogCXU4ICpidWY7CiAKIAlpZiAoZ28gPT0gTlVMTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jCmluZGV4IDYyYjI4MjguLjQ1ZDkwODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYwpAQCAtMzYzLDEwICszNjMsNyBAQAogCWJsa2Rldi0+Z2QtPnF1ZXVlID0gYmxrX2luaXRfcXVldWUoYmxrdnNjX3JlcXVlc3QsICZibGtkZXYtPmxvY2spOwogCiAJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoYmxrZGV2LT5nZC0+cXVldWUsIFBBR0VfU0laRSk7Ci0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKGJsa2Rldi0+Z2QtPnF1ZXVlLAotCQkJCSAgICBNQVhfTVVMVElQQUdFX0JVRkZFUl9DT1VOVCk7Ci0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhibGtkZXYtPmdkLT5xdWV1ZSwKLQkJCQkgIE1BWF9NVUxUSVBBR0VfQlVGRkVSX0NPVU5UKTsKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKGJsa2Rldi0+Z2QtPnF1ZXVlLCBNQVhfTVVMVElQQUdFX0JVRkZFUl9DT1VOVCk7CiAJYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkoYmxrZGV2LT5nZC0+cXVldWUsIFBBR0VfU0laRS0xKTsKIAlibGtfcXVldWVfYm91bmNlX2xpbWl0KGJsa2Rldi0+Z2QtPnF1ZXVlLCBCTEtfQk9VTkNFX0FOWSk7CiAJYmxrX3F1ZXVlX2RtYV9hbGlnbm1lbnQoYmxrZGV2LT5nZC0+cXVldWUsIDUxMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9NYWtlZmlsZQppbmRleCBjMGE1ODNjLi44NzQ0N2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vTWFrZWZpbGUKQEAgLTE0LDcgKzE0LDYgQEAKIG9jdGVvbi1ldGhlcm5ldC1vYmpzIDo9IGV0aGVybmV0Lm8KIG9jdGVvbi1ldGhlcm5ldC1vYmpzICs9IGV0aGVybmV0LW1kaW8ubwogb2N0ZW9uLWV0aGVybmV0LW9ianMgKz0gZXRoZXJuZXQtbWVtLm8KLW9jdGVvbi1ldGhlcm5ldC1vYmpzICs9IGV0aGVybmV0LXByb2Mubwogb2N0ZW9uLWV0aGVybmV0LW9ianMgKz0gZXRoZXJuZXQtcmdtaWkubwogb2N0ZW9uLWV0aGVybmV0LW9ianMgKz0gZXRoZXJuZXQtcngubwogb2N0ZW9uLWV0aGVybmV0LW9ianMgKz0gZXRoZXJuZXQtc2dtaWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1kZWZpbmVzLmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LWRlZmluZXMuaAppbmRleCBmMTMxMzFiLi42YTJjZDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LWRlZmluZXMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LWRlZmluZXMuaApAQCAtNDEsMTcgKzQxLDEwIEBACiAgKiAgICAgIFRlbGxzIHRoZSBkcml2ZXIgdG8gcG9wdWxhdGUgdGhlIHBhY2tldCBidWZmZXJzIHdpdGgga2VybmVsIHNrYnVmZnMuCiAgKiAgICAgIFRoaXMgYWxsb3dzIHRoZSBkcml2ZXIgdG8gcmVjZWl2ZSBwYWNrZXRzIHdpdGhvdXQgY29weWluZyB0aGVtLiBJdCBhbHNvCiAgKiAgICAgIG1lYW5zIHRoYXQgMzJiaXQgdXNlcnNwYWNlIGNhbid0IGFjY2VzcyB0aGUgcGFja2V0IGJ1ZmZlcnMuCi0gKiAgVVNFXzMyQklUX1NIQVJFRAotICogICAgICBUaGlzIGRlZmluZSB0ZWxscyB0aGUgZHJpdmVyIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYnVmZmVycyBmcm9tIHRoZQotICogICAgICAzMmJpdCBzYWhyZWQgcmVnaW9uIGluc3RlYWQgb2YgdGhlIGtlcm5lbCBtZW1vcnkgc3BhY2UuCiAgKiAgVVNFX0hXX1RDUFVEUF9DSEVDS1NVTQogICogICAgICBDb250cm9scyBpZiB0aGUgT2N0ZW9uIFRDUC9VRFAgY2hlY2tzdW0gZW5naW5lIGlzIHVzZWQgZm9yIHBhY2tldAogICogICAgICBvdXRwdXQuIElmIHRoaXMgaXMgemVybywgdGhlIGtlcm5lbCB3aWxsIHBlcmZvcm0gdGhlIGNoZWNrc3VtIGluCiAgKiAgICAgIHNvZnR3YXJlLgotICogIFVTRV9NVUxUSUNPUkVfUkVDRUlWRQotICogICAgICBQcm9jZXNzIHJlY2VpdmUgaW50ZXJydXB0cyBvbiBtdWx0aXBsZSBjb3Jlcy4gVGhpcyBzcHJlYWRzIHRoZSBuZXR3b3JrCi0gKiAgICAgIGxvYWQgYWNyb3NzIHRoZSBmaXJzdCA4IHByb2Nlc3NvcnMuIElmIHRocyBpcyB6ZXJvLCBvbmx5IG9uZSBjb3JlCi0gKiAgICAgIHByb2Nlc3NlcyBpbmNvbW1pbmcgcGFja2V0cy4KICAqICBVU0VfQVNZTkNfSU9CRE1BCiAgKiAgICAgIFVzZSBhc3luY2hyb25vdXMgSU8gYWNjZXNzIHRvIGhhcmR3YXJlLiBUaGlzIHVzZXMgT2N0ZW9uJ3MgYXN5bmNocm9ub3VzCiAgKiAgICAgIElPQkRNQXMgdG8gaXNzdWUgSU8gYWNjZXNzZXMgd2l0aG91dCBzdGFsbGluZy4gU2V0IHRoaXMgdG8gemVybwpAQCAtNzUsMjkgKzY4LDE1IEBACiAjZGVmaW5lIENPTkZJR19DQVZJVU1fUkVTRVJWRTMyIDAKICNlbmRpZgogCi0jaWYgQ09ORklHX0NBVklVTV9SRVNFUlZFMzIKLSNkZWZpbmUgVVNFXzMyQklUX1NIQVJFRCAgICAgICAgICAgIDEKLSNkZWZpbmUgVVNFX1NLQlVGRlNfSU5fSFcgICAgICAgICAgIDAKLSNkZWZpbmUgUkVVU0VfU0tCVUZGU19XSVRIT1VUX0ZSRUUgIDAKLSNlbHNlCi0jZGVmaW5lIFVTRV8zMkJJVF9TSEFSRUQgICAgICAgICAgICAwCiAjZGVmaW5lIFVTRV9TS0JVRkZTX0lOX0hXICAgICAgICAgICAxCiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgogI2RlZmluZSBSRVVTRV9TS0JVRkZTX1dJVEhPVVRfRlJFRSAgMAogI2Vsc2UKICNkZWZpbmUgUkVVU0VfU0tCVUZGU19XSVRIT1VUX0ZSRUUgIDEKICNlbmRpZgotI2VuZGlmCiAKLS8qIE1heCBpbnRlcnJ1cHRzIHBlciBzZWNvbmQgcGVyIGNvcmUgKi8KLSNkZWZpbmUgSU5URVJSVVBUX0xJTUlUICAgICAgICAgICAgIDEwMDAwCi0KLS8qIERvbid0IGxpbWl0IHRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyAqLwotLyojZGVmaW5lIElOVEVSUlVQVF9MSU1JVCAgICAgICAgICAgICAwICAgICAqLwogI2RlZmluZSBVU0VfSFdfVENQVURQX0NIRUNLU1VNICAgICAgMQogCi0jZGVmaW5lIFVTRV9NVUxUSUNPUkVfUkVDRUlWRSAgICAgICAxCi0KIC8qIEVuYWJsZSBSYW5kb20gRWFybHkgRHJvcHBpbmcgdW5kZXIgbG9hZCAqLwogI2RlZmluZSBVU0VfUkVEICAgICAgICAgICAgICAgICAgICAgMQogI2RlZmluZSBVU0VfQVNZTkNfSU9CRE1BICAgICAgICAgICAgKENPTkZJR19DQVZJVU1fT0NURU9OX0NWTVNFR19TSVpFID4gMCkKQEAgLTExNSwyMSArOTQsMTIgQEAKIC8qIFVzZSB0aGlzIHRvIG5vdCBoYXZlIEZQQSBmcmVlcyBjb250cm9sIEwyICovCiAvKiNkZWZpbmUgRE9OVF9XUklURUJBQ0soeCkgICAgICAgICAwICAgKi8KIAotLyogTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0byBwcm9jZXNzIHBlciBpbnRlcnJ1cHQuICovCi0jZGVmaW5lIE1BWF9SWF9QQUNLRVRTIDEyMAogLyogTWF4aW11bSBudW1iZXIgb2YgU0tCcyB0byB0cnkgdG8gZnJlZSBwZXIgeG1pdCBwYWNrZXQuICovCi0jZGVmaW5lIE1BWF9TS0JfVE9fRlJFRSAxMAogI2RlZmluZSBNQVhfT1VUX1FVRVVFX0RFUFRIIDEwMDAKIAotI2lmbmRlZiBDT05GSUdfU01QCi0jdW5kZWYgVVNFX01VTFRJQ09SRV9SRUNFSVZFCi0jZGVmaW5lIFVTRV9NVUxUSUNPUkVfUkVDRUlWRSAwCi0jZW5kaWYKKyNkZWZpbmUgRkFVX1RPVEFMX1RYX1RPX0NMRUFOIChDVk1YX0ZBVV9SRUdfRU5EIC0gc2l6ZW9mKHVpbnQzMl90KSkKKyNkZWZpbmUgRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFIChGQVVfVE9UQUxfVFhfVE9fQ0xFQU4gLSBzaXplb2YodWludDMyX3QpKQogCi0jZGVmaW5lIElQX1BST1RPQ09MX1RDUCAgICAgICAgICAgICA2Ci0jZGVmaW5lIElQX1BST1RPQ09MX1VEUCAgICAgICAgICAgICAweDExCi0KLSNkZWZpbmUgRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFIChDVk1YX0ZBVV9SRUdfRU5EIC0gc2l6ZW9mKHVpbnQzMl90KSkKICNkZWZpbmUgVE9UQUxfTlVNQkVSX09GX1BPUlRTICAgICAgIChDVk1YX1BJUF9OVU1fSU5QVVRfUE9SVFMrMSkKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5jCmluZGV4IDA1YTVjYzAuLjdlMGJlOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5jCkBAIC05NiwxMSArOTYsMTEgQEAKIH07CiAKIC8qKgotICogSU9DVEwgc3VwcG9ydCBmb3IgUEhZIGNvbnRyb2wKLSAqCisgKiBjdm1fb2N0X2lvY3RsIC0gSU9DVEwgc3VwcG9ydCBmb3IgUEhZIGNvbnRyb2wKICAqIEBkZXY6ICAgIERldmljZSB0byBjaGFuZ2UKICAqIEBycTogICAgIHRoZSByZXF1ZXN0CiAgKiBAY21kOiAgICB0aGUgY29tbWFuZAorICoKICAqIFJldHVybnMgWmVybyBvbiBzdWNjZXNzCiAgKi8KIGludCBjdm1fb2N0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCkBAIC0xNTMsNyArMTUzLDcgQEAKIAogCiAvKioKLSAqIFNldHVwIHRoZSBQSFkKKyAqIGN2bV9vY3RfcGh5X3NldHVwX2RldmljZSAtIHNldHVwIHRoZSBQSFkKICAqCiAgKiBAZGV2OiAgICBEZXZpY2UgdG8gc2V0dXAKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5oCmluZGV4IDU1ZDA2MTRhLi5hNDE3ZDRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uaApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWVtLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1lbS5jCmluZGV4IGI1OTU5MDMuLjAwY2M5MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWVtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1tZW0uYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvbnRhY3Q6IHN1cHBvcnRAY2F2aXVtbmV0d29ya3MuY29tCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT0NURU9OIFNESwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IENhdml1bSBOZXR3b3JrcworICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTAgQ2F2aXVtIE5ldHdvcmtzCiAgKgogICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKQEAgLTI2LDggKzI2LDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaW5jbHVkZSA8bmV0L2RzdC5oPgogCiAjaW5jbHVkZSA8YXNtL29jdGVvbi9vY3Rlb24uaD4KIApAQCAtMzYsMTggKzM0LDE5IEBACiAjaW5jbHVkZSAiY3ZteC1mcGEuaCIKIAogLyoqCi0gKiBGaWxsIHRoZSBzdXBwbGllZCBoYXJkd2FyZSBwb29sIHdpdGggc2tidWZmcwotICoKKyAqIGN2bV9vY3RfZmlsbF9od19za2J1ZmYgLSBmaWxsIHRoZSBzdXBwbGllZCBoYXJkd2FyZSBwb29sIHdpdGggc2tidWZmcwogICogQHBvb2w6ICAgICBQb29sIHRvIGFsbG9jYXRlIGFuIHNrYnVmZiBmb3IKICAqIEBzaXplOiAgICAgU2l6ZSBvZiB0aGUgYnVmZmVyIG5lZWRlZCBmb3IgdGhlIHBvb2wKICAqIEBlbGVtZW50czogTnVtYmVyIG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUKKyAqCisgKiBSZXR1cm5zIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ1ZmZlcnMgYWxsb2NhdGVkLgogICovCiBzdGF0aWMgaW50IGN2bV9vY3RfZmlsbF9od19za2J1ZmYoaW50IHBvb2wsIGludCBzaXplLCBpbnQgZWxlbWVudHMpCiB7CiAJaW50IGZyZWVkID0gZWxlbWVudHM7CiAJd2hpbGUgKGZyZWVkKSB7CiAKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZSArIDEyOCk7CisJCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemUgKyAyNTYpOwogCQlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKSB7CiAJCQlwcl93YXJuaW5nCiAJCQkgICAgKCJGYWlsZWQgdG8gYWxsb2NhdGUgc2tiIGZvciBoYXJkd2FyZSBwb29sICVkXG4iLApAQCAtNTUsNyArNTQsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlza2JfcmVzZXJ2ZShza2IsIDEyOCAtICgoKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhKSAmIDB4N2YpKTsKKwkJc2tiX3Jlc2VydmUoc2tiLCAyNTYgLSAoKCh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSkgJiAweDdmKSk7CiAJCSooc3RydWN0IHNrX2J1ZmYgKiopKHNrYi0+ZGF0YSAtIHNpemVvZih2b2lkICopKSA9IHNrYjsKIAkJY3ZteF9mcGFfZnJlZShza2ItPmRhdGEsIHBvb2wsIERPTlRfV1JJVEVCQUNLKHNpemUgLyAxMjgpKTsKIAkJZnJlZWQtLTsKQEAgLTY0LDggKzYzLDcgQEAKIH0KIAogLyoqCi0gKiBGcmVlIHRoZSBzdXBwbGllZCBoYXJkd2FyZSBwb29sIG9mIHNrYnVmZnMKLSAqCisgKiBjdm1fb2N0X2ZyZWVfaHdfc2tidWZmLSBmcmVlIGhhcmR3YXJlIHBvb2wgc2tidWZmcwogICogQHBvb2w6ICAgICBQb29sIHRvIGFsbG9jYXRlIGFuIHNrYnVmZiBmb3IKICAqIEBzaXplOiAgICAgU2l6ZSBvZiB0aGUgYnVmZmVyIG5lZWRlZCBmb3IgdGhlIHBvb2wKICAqIEBlbGVtZW50czogTnVtYmVyIG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUKQEAgLTkzLDk2ICs5MSw3NiBAQAogfQogCiAvKioKLSAqIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSBoYXJkd2FyZSBwb29sIHdpdGggbWVtb3J5LiBEZXBlbmRpbmcKLSAqIG9uIHRoZSBjb25maWcgZGVmaW5lcywgdGhpcyBtZW1vcnkgbWlnaHQgY29tZSBmcm9tIHRoZQotICoga2VybmVsIG9yIGdsb2JhbCAzMmJpdCBtZW1vcnkgYWxsb2NhdGVkIHdpdGgKLSAqIGN2bXhfYm9vdG1lbV9hbGxvYy4KLSAqCisgKiBjdm1fb2N0X2ZpbGxfaHdfbWVtb3J5IC0gZmlsbCBhIGhhcmR3YXJlIHBvb2wgd2l0aCBtZW1vcnkuCiAgKiBAcG9vbDogICAgIFBvb2wgdG8gcG9wdWxhdGUKICAqIEBzaXplOiAgICAgU2l6ZSBvZiBlYWNoIGJ1ZmZlciBpbiB0aGUgcG9vbAogICogQGVsZW1lbnRzOiBOdW1iZXIgb2YgYnVmZmVycyB0byBhbGxvY2F0ZQorICoKKyAqIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnVmZmVycyBhbGxvY2F0ZWQuCiAgKi8KIHN0YXRpYyBpbnQgY3ZtX29jdF9maWxsX2h3X21lbW9yeShpbnQgcG9vbCwgaW50IHNpemUsIGludCBlbGVtZW50cykKIHsKIAljaGFyICptZW1vcnk7CisJY2hhciAqZnBhOwogCWludCBmcmVlZCA9IGVsZW1lbnRzOwogCi0JaWYgKFVTRV8zMkJJVF9TSEFSRUQpIHsKLQkJZXh0ZXJuIHVpbnQ2NF90IG9jdGVvbl9yZXNlcnZlMzJfbWVtb3J5OwotCi0JCW1lbW9yeSA9Ci0JCSAgICBjdm14X2Jvb3RtZW1fYWxsb2NfcmFuZ2UoZWxlbWVudHMgKiBzaXplLCAxMjgsCi0JCQkJCSAgICAgb2N0ZW9uX3Jlc2VydmUzMl9tZW1vcnksCi0JCQkJCSAgICAgb2N0ZW9uX3Jlc2VydmUzMl9tZW1vcnkgKwotCQkJCQkgICAgIChDT05GSUdfQ0FWSVVNX1JFU0VSVkUzMiA8PCAyMCkgLQotCQkJCQkgICAgIDEpOwotCQlpZiAobWVtb3J5ID09IE5VTEwpCi0JCQlwYW5pYygiVW5hYmxlIHRvIGFsbG9jYXRlICV1IGJ5dGVzIGZvciBGUEEgcG9vbCAlZFxuIiwKLQkJCSAgICAgIGVsZW1lbnRzICogc2l6ZSwgcG9vbCk7Ci0KLQkJcHJfbm90aWNlKCJNZW1vcnkgcmFuZ2UgJXAgLSAlcCByZXNlcnZlZCBmb3IgIgotCQkJICAiaGFyZHdhcmVcbiIsIG1lbW9yeSwKLQkJCSAgbWVtb3J5ICsgZWxlbWVudHMgKiBzaXplIC0gMSk7Ci0KLQkJd2hpbGUgKGZyZWVkKSB7Ci0JCQljdm14X2ZwYV9mcmVlKG1lbW9yeSwgcG9vbCwgMCk7Ci0JCQltZW1vcnkgKz0gc2l6ZTsKLQkJCWZyZWVkLS07CisJd2hpbGUgKGZyZWVkKSB7CisJCS8qCisJCSAqIEZQQSBtZW1vcnkgbXVzdCBiZSAxMjggYnl0ZSBhbGlnbmVkLiAgU2luY2Ugd2UgYXJlCisJCSAqIGFsaWduaW5nIHdlIG5lZWQgdG8gc2F2ZSB0aGUgb3JpZ2luYWwgcG9pbnRlciBzbyB3ZQorCQkgKiBjYW4gZmVlZCBpdCB0byBrZnJlZSB3aGVuIHRoZSBtZW1vcnkgaXMgcmV0dXJuZWQgdG8KKwkJICogdGhlIGtlcm5lbC4KKwkJICoKKwkJICogV2UgYWxsb2NhdGUgYW4gZXh0cmEgMjU2IGJ5dGVzIHRvIGFsbG93IGZvcgorCQkgKiBhbGlnbm1lbnQgYW5kIHNwYWNlIGZvciB0aGUgb3JpZ2luYWwgcG9pbnRlciBzYXZlZAorCQkgKiBqdXN0IGJlZm9yZSB0aGUgYmxvY2suCisJCSAqLworCQltZW1vcnkgPSBrbWFsbG9jKHNpemUgKyAyNTYsIEdGUF9BVE9NSUMpOworCQlpZiAodW5saWtlbHkobWVtb3J5ID09IE5VTEwpKSB7CisJCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gYWxsb2NhdGUgJXUgYnl0ZXMgZm9yIEZQQSBwb29sICVkXG4iLAorCQkJCSAgIGVsZW1lbnRzICogc2l6ZSwgcG9vbCk7CisJCQlicmVhazsKIAkJfQotCX0gZWxzZSB7Ci0JCXdoaWxlIChmcmVlZCkgewotCQkJLyogV2UgbmVlZCB0byBmb3JjZSBhbGlnbm1lbnQgdG8gMTI4IGJ5dGVzIGhlcmUgKi8KLQkJCW1lbW9yeSA9IGttYWxsb2Moc2l6ZSArIDEyNywgR0ZQX0FUT01JQyk7Ci0JCQlpZiAodW5saWtlbHkobWVtb3J5ID09IE5VTEwpKSB7Ci0JCQkJcHJfd2FybmluZygiVW5hYmxlIHRvIGFsbG9jYXRlICV1IGJ5dGVzIGZvciAiCi0JCQkJCSAgICJGUEEgcG9vbCAlZFxuIiwKLQkJCQkgICAgIGVsZW1lbnRzICogc2l6ZSwgcG9vbCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQltZW1vcnkgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpbWVtb3J5ICsgMTI3KSAmIC0xMjgpOwotCQkJY3ZteF9mcGFfZnJlZShtZW1vcnksIHBvb2wsIDApOwotCQkJZnJlZWQtLTsKLQkJfQorCQlmcGEgPSAoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpbWVtb3J5ICsgMjU2KSAmIH4weDdmVUwpOworCQkqKChjaGFyICoqKWZwYSAtIDEpID0gbWVtb3J5OworCQljdm14X2ZwYV9mcmVlKGZwYSwgcG9vbCwgMCk7CisJCWZyZWVkLS07CiAJfQogCXJldHVybiBlbGVtZW50cyAtIGZyZWVkOwogfQogCiAvKioKLSAqIEZyZWUgbWVtb3J5IHByZXZpb3VzbHkgYWxsb2NhdGVkIHdpdGggY3ZtX29jdF9maWxsX2h3X21lbW9yeQotICoKKyAqIGN2bV9vY3RfZnJlZV9od19tZW1vcnkgLSBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgY3ZtX29jdF9maWxsX2h3X21lbW9yeQogICogQHBvb2w6ICAgICBGUEEgcG9vbCB0byBmcmVlCiAgKiBAc2l6ZTogICAgIFNpemUgb2YgZWFjaCBidWZmZXIgaW4gdGhlIHBvb2wKICAqIEBlbGVtZW50czogTnVtYmVyIG9mIGJ1ZmZlcnMgdGhhdCBzaG91bGQgYmUgaW4gdGhlIHBvb2wKICAqLwogc3RhdGljIHZvaWQgY3ZtX29jdF9mcmVlX2h3X21lbW9yeShpbnQgcG9vbCwgaW50IHNpemUsIGludCBlbGVtZW50cykKIHsKLQlpZiAoVVNFXzMyQklUX1NIQVJFRCkgewotCQlwcl93YXJuaW5nKCJXYXJuaW5nOiAzMiBzaGFyZWQgbWVtb3J5IGlzIG5vdCBmcmVlYWJsZVxuIik7Ci0JfSBlbHNlIHsKLQkJY2hhciAqbWVtb3J5OwotCQlkbyB7Ci0JCQltZW1vcnkgPSBjdm14X2ZwYV9hbGxvYyhwb29sKTsKLQkJCWlmIChtZW1vcnkpIHsKLQkJCQllbGVtZW50cy0tOwotCQkJCWtmcmVlKHBoeXNfdG9fdmlydChjdm14X3B0cl90b19waHlzKG1lbW9yeSkpKTsKLQkJCX0KLQkJfSB3aGlsZSAobWVtb3J5KTsKKwljaGFyICptZW1vcnk7CisJY2hhciAqZnBhOworCWRvIHsKKwkJZnBhID0gY3ZteF9mcGFfYWxsb2MocG9vbCk7CisJCWlmIChmcGEpIHsKKwkJCWVsZW1lbnRzLS07CisJCQlmcGEgPSAoY2hhciAqKXBoeXNfdG9fdmlydChjdm14X3B0cl90b19waHlzKGZwYSkpOworCQkJbWVtb3J5ID0gKigoY2hhciAqKilmcGEgLSAxKTsKKwkJCWtmcmVlKG1lbW9yeSk7CisJCX0KKwl9IHdoaWxlIChmcGEpOwogCi0JCWlmIChlbGVtZW50cyA8IDApCi0JCQlwcl93YXJuaW5nKCJGcmVlaW5nIG9mIHBvb2wgJXUgaGFkIHRvbyBtYW55ICIKLQkJCQkgICAiYnVmZmVycyAoJWQpXG4iLAotCQkJICAgICAgIHBvb2wsIGVsZW1lbnRzKTsKLQkJZWxzZSBpZiAoZWxlbWVudHMgPiAwKQotCQkJcHJfd2FybmluZygiV2FybmluZzogRnJlZWluZyBvZiBwb29sICV1IGlzICIKLQkJCQkibWlzc2luZyAlZCBidWZmZXJzXG4iLAotCQkJICAgICBwb29sLCBlbGVtZW50cyk7Ci0JfQorCWlmIChlbGVtZW50cyA8IDApCisJCXByX3dhcm5pbmcoIkZyZWVpbmcgb2YgcG9vbCAldSBoYWQgdG9vIG1hbnkgYnVmZmVycyAoJWQpXG4iLAorCQkJcG9vbCwgZWxlbWVudHMpOworCWVsc2UgaWYgKGVsZW1lbnRzID4gMCkKKwkJcHJfd2FybmluZygiV2FybmluZzogRnJlZWluZyBvZiBwb29sICV1IGlzIG1pc3NpbmcgJWQgYnVmZmVyc1xuIiwKKwkJCXBvb2wsIGVsZW1lbnRzKTsKIH0KIAogaW50IGN2bV9vY3RfbWVtX2ZpbGxfZnBhKGludCBwb29sLCBpbnQgc2l6ZSwgaW50IGVsZW1lbnRzKQogewogCWludCBmcmVlZDsKLQlpZiAoVVNFX1NLQlVGRlNfSU5fSFcpCisJaWYgKFVTRV9TS0JVRkZTX0lOX0hXICYmIHBvb2wgPT0gQ1ZNWF9GUEFfUEFDS0VUX1BPT0wpCiAJCWZyZWVkID0gY3ZtX29jdF9maWxsX2h3X3NrYnVmZihwb29sLCBzaXplLCBlbGVtZW50cyk7CiAJZWxzZQogCQlmcmVlZCA9IGN2bV9vY3RfZmlsbF9od19tZW1vcnkocG9vbCwgc2l6ZSwgZWxlbWVudHMpOwpAQCAtMTkxLDcgKzE2OSw3IEBACiAKIHZvaWQgY3ZtX29jdF9tZW1fZW1wdHlfZnBhKGludCBwb29sLCBpbnQgc2l6ZSwgaW50IGVsZW1lbnRzKQogewotCWlmIChVU0VfU0tCVUZGU19JTl9IVykKKwlpZiAoVVNFX1NLQlVGRlNfSU5fSFcgJiYgcG9vbCA9PSBDVk1YX0ZQQV9QQUNLRVRfUE9PTCkKIAkJY3ZtX29jdF9mcmVlX2h3X3NrYnVmZihwb29sLCBzaXplLCBlbGVtZW50cyk7CiAJZWxzZQogCQljdm1fb2N0X2ZyZWVfaHdfbWVtb3J5KHBvb2wsIHNpemUsIGVsZW1lbnRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1wcm9jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MzA4ZDQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1wcm9jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEF1dGhvcjogQ2F2aXVtIE5ldHdvcmtzCi0gKgotICogQ29udGFjdDogc3VwcG9ydEBjYXZpdW1uZXR3b3Jrcy5jb20KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBPQ1RFT04gU0RLCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2F2aXVtIE5ldHdvcmtzCi0gKgotICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIEFTLUlTIGFuZCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5Ci0gKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFLCBvcgotICogTk9OSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICogb3IgdmlzaXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KLSAqCi0gKiBUaGlzIGZpbGUgbWF5IGFsc28gYmUgYXZhaWxhYmxlIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgZnJvbSBDYXZpdW0uCi0gKiBDb250YWN0IENhdml1bSBOZXR3b3JrcyBmb3IgbW9yZSBpbmZvcm1hdGlvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxuZXQvZHN0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vb2N0ZW9uL29jdGVvbi5oPgotCi0jaW5jbHVkZSAib2N0ZW9uLWV0aGVybmV0LmgiCi0jaW5jbHVkZSAiZXRoZXJuZXQtZGVmaW5lcy5oIgotCi0jaW5jbHVkZSAiY3ZteC1oZWxwZXIuaCIKLSNpbmNsdWRlICJjdm14LXBpcC5oIgotCi0vKioKLSAqIFVzZXIgaXMgcmVhZGluZyAvcHJvYy9vY3Rlb25fZXRoZXJuZXRfc3RhdHMKLSAqCi0gKiBAbToKLSAqIEB2OgotICogUmV0dXJucwotICovCi1zdGF0aWMgaW50IGN2bV9vY3Rfc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0Jc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdjsKLQlpbnQgcG9ydDsKLQotCWZvciAocG9ydCA9IDA7IHBvcnQgPCBUT1RBTF9OVU1CRVJfT0ZfUE9SVFM7IHBvcnQrKykgewotCi0JCWlmIChjdm1fb2N0X2RldmljZVtwb3J0XSkgewotCQkJcHJpdiA9IG5ldGRldl9wcml2KGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQotCQkJc2VxX3ByaW50ZihtLCAiXG5PY3Rlb24gUG9ydCAlZCAoJXMpXG4iLCBwb3J0LAotCQkJCSAgIGN2bV9vY3RfZGV2aWNlW3BvcnRdLT5uYW1lKTsKLQkJCXNlcV9wcmludGYobSwKLQkJCQkgICAicnhfcGFja2V0czogICAgICAgICAgICAgJTEybHVcdCIKLQkJCQkgICAidHhfcGFja2V0czogICAgICAgICAgICAgJTEybHVcbiIsCi0JCQkJICAgcHJpdi0+c3RhdHMucnhfcGFja2V0cywKLQkJCQkgICBwcml2LT5zdGF0cy50eF9wYWNrZXRzKTsKLQkJCXNlcV9wcmludGYobSwKLQkJCQkgICAicnhfYnl0ZXM6ICAgICAgICAgICAgICAgJTEybHVcdCIKLQkJCQkgICAidHhfYnl0ZXM6ICAgICAgICAgICAgICAgJTEybHVcbiIsCi0JCQkJICAgcHJpdi0+c3RhdHMucnhfYnl0ZXMsIHByaXYtPnN0YXRzLnR4X2J5dGVzKTsKLQkJCXNlcV9wcmludGYobSwKLQkJCQkgICAicnhfZXJyb3JzOiAgICAgICAgICAgICAgJTEybHVcdCIKLQkJCQkgICAidHhfZXJyb3JzOiAgICAgICAgICAgICAgJTEybHVcbiIsCi0JCQkJICAgcHJpdi0+c3RhdHMucnhfZXJyb3JzLAotCQkJCSAgIHByaXYtPnN0YXRzLnR4X2Vycm9ycyk7Ci0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgInJ4X2Ryb3BwZWQ6ICAgICAgICAgICAgICUxMmx1XHQiCi0JCQkJICAgInR4X2Ryb3BwZWQ6ICAgICAgICAgICAgICUxMmx1XG4iLAotCQkJCSAgIHByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQsCi0JCQkJICAgcHJpdi0+c3RhdHMudHhfZHJvcHBlZCk7Ci0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgInJ4X2xlbmd0aF9lcnJvcnM6ICAgICAgICUxMmx1XHQiCi0JCQkJICAgInR4X2Fib3J0ZWRfZXJyb3JzOiAgICAgICUxMmx1XG4iLAotCQkJCSAgIHByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMsCi0JCQkJICAgcHJpdi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMpOwotCQkJc2VxX3ByaW50ZihtLAotCQkJCSAgICJyeF9vdmVyX2Vycm9yczogICAgICAgICAlMTJsdVx0IgotCQkJCSAgICJ0eF9jYXJyaWVyX2Vycm9yczogICAgICAlMTJsdVxuIiwKLQkJCQkgICBwcml2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycywKLQkJCQkgICBwcml2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycyk7Ci0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgInJ4X2NyY19lcnJvcnM6ICAgICAgICAgICUxMmx1XHQiCi0JCQkJICAgInR4X2ZpZm9fZXJyb3JzOiAgICAgICAgICUxMmx1XG4iLAotCQkJCSAgIHByaXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMsCi0JCQkJICAgcHJpdi0+c3RhdHMudHhfZmlmb19lcnJvcnMpOwotCQkJc2VxX3ByaW50ZihtLAotCQkJCSAgICJyeF9mcmFtZV9lcnJvcnM6ICAgICAgICAlMTJsdVx0IgotCQkJCSAgICJ0eF9oZWFydGJlYXRfZXJyb3JzOiAgICAlMTJsdVxuIiwKLQkJCQkgICBwcml2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMsCi0JCQkJICAgcHJpdi0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycyk7Ci0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgInJ4X2ZpZm9fZXJyb3JzOiAgICAgICAgICUxMmx1XHQiCi0JCQkJICAgInR4X3dpbmRvd19lcnJvcnM6ICAgICAgICUxMmx1XG4iLAotCQkJCSAgIHByaXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzLAotCQkJCSAgIHByaXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMpOwotCQkJc2VxX3ByaW50ZihtLAotCQkJCSAgICJyeF9taXNzZWRfZXJyb3JzOiAgICAgICAlMTJsdVx0IgotCQkJCSAgICJtdWx0aWNhc3Q6ICAgICAgICAgICAgICAlMTJsdVxuIiwKLQkJCQkgICBwcml2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzLAotCQkJCSAgIHByaXYtPnN0YXRzLm11bHRpY2FzdCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiAvcHJvYy9vY3Rlb25fZXRoZXJuZXRfc3RhdHMgd2FzIG9wZW5uZWQuIFVzZSB0aGUgc2luZ2xlX29wZW4gaXRlcmF0b3IKLSAqCi0gKiBAaW5vZGU6Ci0gKiBAZmlsZToKLSAqIFJldHVybnMKLSAqLwotc3RhdGljIGludCBjdm1fb2N0X3N0YXRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGN2bV9vY3Rfc3RhdHNfc2hvdywgTlVMTCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGN2bV9vY3Rfc3RhdHNfb3BlcmF0aW9ucyA9IHsKLQkub3BlbiA9IGN2bV9vY3Rfc3RhdHNfb3BlbiwKLQkucmVhZCA9IHNlcV9yZWFkLAotCS5sbHNlZWsgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKLX07Ci0KLXZvaWQgY3ZtX29jdF9wcm9jX2luaXRpYWxpemUodm9pZCkKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5ID0KLQkgICAgY3JlYXRlX3Byb2NfZW50cnkoIm9jdGVvbl9ldGhlcm5ldF9zdGF0cyIsIDAsIE5VTEwpOwotCWlmIChlbnRyeSkKLQkJZW50cnktPnByb2NfZm9wcyA9ICZjdm1fb2N0X3N0YXRzX29wZXJhdGlvbnM7Ci19Ci0KLXZvaWQgY3ZtX29jdF9wcm9jX3NodXRkb3duKHZvaWQpCi17Ci0JcmVtb3ZlX3Byb2NfZW50cnkoIm9jdGVvbl9ldGhlcm5ldF9zdGF0cyIsIE5VTEwpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1wcm9jLmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXByb2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJjN2Q5Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXByb2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEF1dGhvcjogQ2F2aXVtIE5ldHdvcmtzCi0gKgotICogQ29udGFjdDogc3VwcG9ydEBjYXZpdW1uZXR3b3Jrcy5jb20KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBPQ1RFT04gU0RLCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2F2aXVtIE5ldHdvcmtzCi0gKgotICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIEFTLUlTIGFuZCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5Ci0gKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFLCBvcgotICogTk9OSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICogb3IgdmlzaXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KLSAqCi0gKiBUaGlzIGZpbGUgbWF5IGFsc28gYmUgYXZhaWxhYmxlIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgZnJvbSBDYXZpdW0uCi0gKiBDb250YWN0IENhdml1bSBOZXR3b3JrcyBmb3IgbW9yZSBpbmZvcm1hdGlvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12b2lkIGN2bV9vY3RfcHJvY19pbml0aWFsaXplKHZvaWQpOwotdm9pZCBjdm1fb2N0X3Byb2Nfc2h1dGRvd24odm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJnbWlpLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJnbWlpLmMKaW5kZXggMzgyMGYxZS4uYTBkNGQ0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1yZ21paS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcmdtaWkuYwpAQCAtMjYsNyArMjYsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KICNpbmNsdWRlIDxuZXQvZHN0Lmg+CiAKICNpbmNsdWRlIDxhc20vb2N0ZW9uL29jdGVvbi5oPgpAQCAtNDgsMTQgKzQ4LDIwIEBACiBzdGF0aWMgdm9pZCBjdm1fb2N0X3JnbWlpX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWN2bXhfaGVscGVyX2xpbmtfaW5mb190IGxpbmtfaW5mbzsKKwlpbnQgdXNlX2dsb2JhbF9yZWdpc3Rlcl9sb2NrID0gKHByaXYtPnBoeWRldiA9PSBOVUxMKTsKIAotCS8qCi0JICogVGFrZSB0aGUgZ2xvYmFsIHJlZ2lzdGVyIGxvY2sgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHRvdWNoCi0JICogcmVnaXN0ZXJzIHRoYXQgYWZmZWN0IG1vcmUgdGhhbiBvbmUgcG9ydC4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKwlCVUdfT04oaW5faW50ZXJydXB0KCkpOworCWlmICh1c2VfZ2xvYmFsX3JlZ2lzdGVyX2xvY2spIHsKKwkJLyoKKwkJICogVGFrZSB0aGUgZ2xvYmFsIHJlZ2lzdGVyIGxvY2sgc2luY2Ugd2UgYXJlIGdvaW5nIHRvCisJCSAqIHRvdWNoIHJlZ2lzdGVycyB0aGF0IGFmZmVjdCBtb3JlIHRoYW4gb25lIHBvcnQuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgeworCQltdXRleF9sb2NrKCZwcml2LT5waHlkZXYtPmJ1cy0+bWRpb19sb2NrKTsKKwl9CiAKIAlsaW5rX2luZm8gPSBjdm14X2hlbHBlcl9saW5rX2dldChwcml2LT5wb3J0KTsKIAlpZiAobGlua19pbmZvLnU2NCA9PSBwcml2LT5saW5rX2luZm8pIHsKQEAgLTExNSw3ICsxMjEsMTEgQEAKIAkJCQkgICAgIGRldi0+bmFtZSk7CiAJCQl9CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKworCQlpZiAodXNlX2dsb2JhbF9yZWdpc3Rlcl9sb2NrKQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKwkJZWxzZQorCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5waHlkZXYtPmJ1cy0+bWRpb19sb2NrKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTUxLDcgKzE2MSwxMiBAQAogCQlsaW5rX2luZm8gPSBjdm14X2hlbHBlcl9saW5rX2F1dG9jb25mKHByaXYtPnBvcnQpOwogCQlwcml2LT5saW5rX2luZm8gPSBsaW5rX2luZm8udTY0OwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnbG9iYWxfcmVnaXN0ZXJfbG9jaywgZmxhZ3MpOworCisJaWYgKHVzZV9nbG9iYWxfcmVnaXN0ZXJfbG9jaykKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2xvYmFsX3JlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKwllbHNlIHsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5waHlkZXYtPmJ1cy0+bWRpb19sb2NrKTsKKwl9CiAKIAlpZiAocHJpdi0+cGh5ZGV2ID09IE5VTEwpIHsKIAkJLyogVGVsbCBjb3JlLiAqLwpAQCAtMjEzLDggKzIyOCwxMSBAQAogCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPQogCQkJCSAgICBjdm1fb2N0X2RldmljZVtjdm14X2hlbHBlcl9nZXRfaXBkX3BvcnQKIAkJCQkJCSAgIChpbnRlcmZhY2UsIGluZGV4KV07Ci0JCQkJaWYgKGRldikKLQkJCQkJY3ZtX29jdF9yZ21paV9wb2xsKGRldik7CisJCQkJc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwkJCQlpZiAoZGV2ICYmICFhdG9taWNfcmVhZCgmY3ZtX29jdF9wb2xsX3F1ZXVlX3N0b3BwaW5nKSkKKwkJCQkJcXVldWVfd29yayhjdm1fb2N0X3BvbGxfcXVldWUsICZwcml2LT5wb3J0X3dvcmspOworCiAJCQkJZ214X3J4X2ludF9yZWcudTY0ID0gMDsKIAkJCQlnbXhfcnhfaW50X3JlZy5zLnBoeV9kdXB4ID0gMTsKIAkJCQlnbXhfcnhfaW50X3JlZy5zLnBoeV9saW5rID0gMTsKQEAgLTI1Miw4ICsyNzAsMTEgQEAKIAkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0KIAkJCQkgICAgY3ZtX29jdF9kZXZpY2VbY3ZteF9oZWxwZXJfZ2V0X2lwZF9wb3J0CiAJCQkJCQkgICAoaW50ZXJmYWNlLCBpbmRleCldOwotCQkJCWlmIChkZXYpCi0JCQkJCWN2bV9vY3RfcmdtaWlfcG9sbChkZXYpOworCQkJCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJCQkJaWYgKGRldiAmJiAhYXRvbWljX3JlYWQoJmN2bV9vY3RfcG9sbF9xdWV1ZV9zdG9wcGluZykpCisJCQkJCXF1ZXVlX3dvcmsoY3ZtX29jdF9wb2xsX3F1ZXVlLCAmcHJpdi0+cG9ydF93b3JrKTsKKwogCQkJCWdteF9yeF9pbnRfcmVnLnU2NCA9IDA7CiAJCQkJZ214X3J4X2ludF9yZWcucy5waHlfZHVweCA9IDE7CiAJCQkJZ214X3J4X2ludF9yZWcucy5waHlfbGluayA9IDE7CkBAIC0zMDIsNiArMzIzLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGN2bV9vY3RfcmdtaWlfaW1tZWRpYXRlX3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG9jdGVvbl9ldGhlcm5ldCwgcG9ydF93b3JrKTsKKwljdm1fb2N0X3JnbWlpX3BvbGwoY3ZtX29jdF9kZXZpY2VbcHJpdi0+cG9ydF0pOworfQorCiBpbnQgY3ZtX29jdF9yZ21paV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zMDksNyArMzM2LDcgQEAKIAogCWN2bV9vY3RfY29tbW9uX2luaXQoZGV2KTsKIAlkZXYtPm5ldGRldl9vcHMtPm5kb19zdG9wKGRldik7Ci0KKwlJTklUX1dPUksoJnByaXYtPnBvcnRfd29yaywgY3ZtX29jdF9yZ21paV9pbW1lZGlhdGVfcG9sbCk7CiAJLyoKIAkgKiBEdWUgdG8gR01YIGVycmF0YSBpbiBDTjNYWFggc2VyaWVzIGNoaXBzLCBpdCBpcyBuZWNlc3NhcnkKIAkgKiB0byB0YWtlIHRoZSBsaW5rIGRvd24gaW1tZWRpYXRlbHkgd2hlbiB0aGUgUEhZIGNoYW5nZXMKQEAgLTM5Nyw0ICs0MjQsNSBAQAogCW51bWJlcl9yZ21paV9wb3J0cy0tOwogCWlmIChudW1iZXJfcmdtaWlfcG9ydHMgPT0gMCkKIAkJZnJlZV9pcnEoT0NURU9OX0lSUV9STUwsICZudW1iZXJfcmdtaWlfcG9ydHMpOworCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPnBvcnRfd29yayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJ4LmMKaW5kZXggMWIyMzdiNy4uY2IzOGY5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcnguYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvbnRhY3Q6IHN1cHBvcnRAY2F2aXVtbmV0d29ya3MuY29tCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT0NURU9OIFNESwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IENhdml1bSBOZXR3b3JrcworICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTAgQ2F2aXVtIE5ldHdvcmtzCiAgKgogICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKQEAgLTI3LDE2ICsyNywxNCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2lmZGVmIENPTkZJR19YRlJNCiAjaW5jbHVkZSA8bGludXgveGZybS5oPgpAQCAtNDgsOCArNDYsOSBAQAogI2luY2x1ZGUgPGFzbS9vY3Rlb24vb2N0ZW9uLmg+CiAKICNpbmNsdWRlICJldGhlcm5ldC1kZWZpbmVzLmgiCi0jaW5jbHVkZSAib2N0ZW9uLWV0aGVybmV0LmgiCiAjaW5jbHVkZSAiZXRoZXJuZXQtbWVtLmgiCisjaW5jbHVkZSAiZXRoZXJuZXQtcnguaCIKKyNpbmNsdWRlICJvY3Rlb24tZXRoZXJuZXQuaCIKICNpbmNsdWRlICJldGhlcm5ldC11dGlsLmgiCiAKICNpbmNsdWRlICJjdm14LWhlbHBlci5oIgpAQCAtNjEsNjIgKzYwLDg4IEBACiAKICNpbmNsdWRlICJjdm14LWdteHgtZGVmcy5oIgogCi1zdHJ1Y3QgY3ZtX3Rhc2tsZXRfd3JhcHBlciB7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IHQ7Ci19Oworc3RydWN0IGN2bV9uYXBpX3dyYXBwZXIgeworCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCi0vKgotICogQWxpZ25pbmcgdGhlIHRhc2tsZXRfc3RydWN0IG9uIGNhY2hsaW5lIGJvdW5kcmllcyBzZWVtcyB0byBkZWNyZWFzZQotICogdGhyb3VnaHB1dCBldmVuIHRob3VnaCBpbiB0aGVvcnkgaXQgd291bGQgcmVkdWNlIGNvbnRhbnRpb24gb24gdGhlCi0gKiBjYWNoZSBsaW5lcyBjb250YWluaW5nIHRoZSBsb2Nrcy4KLSAqLworc3RhdGljIHN0cnVjdCBjdm1fbmFwaV93cmFwcGVyIGN2bV9vY3RfbmFwaVtOUl9DUFVTXSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAotc3RhdGljIHN0cnVjdCBjdm1fdGFza2xldF93cmFwcGVyIGN2bV9vY3RfdGFza2xldFtOUl9DUFVTXTsKK3N0cnVjdCBjdm1fb2N0X2NvcmVfc3RhdGUgeworCWludCBiYXNlbGluZV9jb3JlczsKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBjb3JlcyB0aGF0IGNvdWxkIGJlIHByb2Nlc3NpbmcKKwkgKiBpbnB1dCBwYWNrdGVzLgorCSAqLworCWF0b21pY190IGF2YWlsYWJsZV9jb3JlczsKKwljcHVtYXNrX3QgY3B1X3N0YXRlOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCitzdGF0aWMgc3RydWN0IGN2bV9vY3RfY29yZV9zdGF0ZSBjb3JlX3N0YXRlIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCitzdGF0aWMgdm9pZCBjdm1fb2N0X2VuYWJsZV9uYXBpKHZvaWQgKl8pCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwluYXBpX3NjaGVkdWxlKCZjdm1fb2N0X25hcGlbY3B1XS5uYXBpKTsKK30KKworc3RhdGljIHZvaWQgY3ZtX29jdF9lbmFibGVfb25lX2NwdSh2b2lkKQoreworCWludCB2OworCWludCBjcHU7CisKKwkvKiBDaGVjayB0byBzZWUgaWYgbW9yZSBDUFVzIGFyZSBhdmFpbGFibGUgZm9yIHJlY2VpdmUgcHJvY2Vzc2luZy4uLiAqLworCXYgPSBhdG9taWNfc3ViX2lmX3Bvc2l0aXZlKDEsICZjb3JlX3N0YXRlLmF2YWlsYWJsZV9jb3Jlcyk7CisJaWYgKHYgPCAwKQorCQlyZXR1cm47CisKKwkvKiAuLi4gaWYgYSBDUFUgaXMgYXZhaWxhYmxlLCBUdXJuIG9uIE5BUEkgcG9sbGluZyBmb3IgdGhhdCBDUFUuICAqLworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWlmICghY3B1X3Rlc3RfYW5kX3NldChjcHUsIGNvcmVfc3RhdGUuY3B1X3N0YXRlKSkgeworCQkJdiA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGN2bV9vY3RfZW5hYmxlX25hcGksCisJCQkJCQkgICAgIE5VTEwsIDApOworCQkJaWYgKHYpCisJCQkJcGFuaWMoIkNhbid0IGVuYWJsZSBOQVBJLiIpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGN2bV9vY3Rfbm9fbW9yZV93b3JrKHZvaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCS8qCisJICogQ1BVIHplcm8gaXMgc3BlY2lhbC4gIEl0IGFsd2F5cyBoYXMgdGhlIGlycSBlbmFibGVkIHdoZW4KKwkgKiB3YWl0aW5nIGZvciBpbmNvbWluZyBwYWNrZXRzLgorCSAqLworCWlmIChjcHUgPT0gMCkgeworCQllbmFibGVfaXJxKE9DVEVPTl9JUlFfV09SS1EwICsgcG93X3JlY2VpdmVfZ3JvdXApOworCQlyZXR1cm47CisJfQorCisJY3B1X2NsZWFyKGNwdSwgY29yZV9zdGF0ZS5jcHVfc3RhdGUpOworCWF0b21pY19hZGQoMSwgJmNvcmVfc3RhdGUuYXZhaWxhYmxlX2NvcmVzKTsKK30KIAogLyoqCi0gKiBJbnRlcnJ1cHQgaGFuZGxlci4gVGhlIGludGVycnVwdCBvY2N1cnMgd2hlbmV2ZXIgdGhlIFBPVwotICogdHJhbnNpdGlvbnMgZnJvbSAwLT4xIHBhY2tldHMgaW4gb3VyIGdyb3VwLgorICogY3ZtX29jdF9kb19pbnRlcnJ1cHQgLSBpbnRlcnJ1cHQgaGFuZGxlci4KICAqCi0gKiBAY3BsOgotICogQGRldl9pZDoKLSAqIEByZWdzOgotICogUmV0dXJucworICogVGhlIGludGVycnVwdCBvY2N1cnMgd2hlbmV2ZXIgdGhlIFBPVyBoYXMgcGFja2V0cyBpbiBvdXIgZ3JvdXAuCisgKgogICovCi1pcnFyZXR1cm5fdCBjdm1fb2N0X2RvX2ludGVycnVwdChpbnQgY3BsLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgY3ZtX29jdF9kb19pbnRlcnJ1cHQoaW50IGNwbCwgdm9pZCAqZGV2X2lkKQogewotCS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgKi8KLQlpZiAoSU5URVJSVVBUX0xJTUlUKQotCQljdm14X3dyaXRlX2NzcihDVk1YX1BPV19XUV9JTlQsIDEgPDwgcG93X3JlY2VpdmVfZ3JvdXApOwotCWVsc2UKLQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfV1FfSU5ULCAweDEwMDAxIDw8IHBvd19yZWNlaXZlX2dyb3VwKTsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZjdm1fb2N0X3Rhc2tsZXRbc21wX3Byb2Nlc3Nvcl9pZCgpXS50KTsKLQlwcmVlbXB0X2VuYWJsZSgpOworCS8qIERpc2FibGUgdGhlIElSUSBhbmQgc3RhcnQgbmFwaV9wb2xsLiAqLworCWRpc2FibGVfaXJxX25vc3luYyhPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwKTsKKwljdm1fb2N0X2VuYWJsZV9uYXBpKE5VTEwpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIC8qKgotICogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUga2VybmVsIG5lZWRzIHRvIG1hbnVhbGx5IHBvbGwgdGhlCi0gKiBkZXZpY2UuIEZvciBPY3Rlb24sIHRoaXMgaXMgc2ltcGx5IGNhbGxpbmcgdGhlIGludGVycnVwdAotICogaGFuZGxlci4gV2UgYWN0dWFsbHkgcG9sbCBhbGwgdGhlIGRldmljZXMsIG5vdCBqdXN0IHRoZQotICogb25lIHN1cHBsaWVkLgotICoKLSAqIEBkZXY6ICAgIERldmljZSB0byBwb2xsLiBVbnVzZWQKLSAqLwotdm9pZCBjdm1fb2N0X3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXByZWVtcHRfZGlzYWJsZSgpOwotCXRhc2tsZXRfc2NoZWR1bGUoJmN2bV9vY3RfdGFza2xldFtzbXBfcHJvY2Vzc29yX2lkKCldLnQpOwotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBUaGlzIGlzIGNhbGxlZCBvbiByZWNlaXZlIGVycm9ycywgYW5kIGRldGVybWluZXMgaWYgdGhlIHBhY2tldAotICogY2FuIGJlIGRyb3BwZWQgZWFybHktb24gaW4gY3ZtX29jdF90YXNrbGV0X3J4KCkuCi0gKgorICogY3ZtX29jdF9jaGVja19yY3ZfZXJyb3IgLSBwcm9jZXNzIHJlY2VpdmUgZXJyb3JzCiAgKiBAd29yazogV29yayBxdWV1ZSBlbnRyeSBwb2ludGluZyB0byB0aGUgcGFja2V0LgorICoKICAqIFJldHVybnMgTm9uLXplcm8gaWYgdGhlIHBhY2tldCBjYW4gYmUgZHJvcHBlZCwgemVybyBvdGhlcndpc2UuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGN2bV9vY3RfY2hlY2tfcmN2X2Vycm9yKGN2bXhfd3FlX3QgKndvcmspCkBAIC0xOTksMTkgKzIyNCwyMCBAQAogfQogCiAvKioKLSAqIFRhc2tsZXQgZnVuY3Rpb24gdGhhdCBpcyBzY2hlZHVsZWQgb24gYSBjb3JlIHdoZW4gYW4gaW50ZXJydXB0IG9jY3Vycy4KKyAqIGN2bV9vY3RfbmFwaV9wb2xsIC0gdGhlIE5BUEkgcG9sbCBmdW5jdGlvbi4KKyAqIEBuYXBpOiBUaGUgTkFQSSBpbnN0YW5jZSwgb3IgbnVsbCBpZiBjYWxsZWQgZnJvbSBjdm1fb2N0X3BvbGxfY29udHJvbGxlcgorICogQGJ1ZGdldDogTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0byByZWNlaXZlLgogICoKLSAqIEB1bnVzZWQ6CisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFja2V0cyBwcm9jZXNzZWQuCiAgKi8KLXZvaWQgY3ZtX29jdF90YXNrbGV0X3J4KHVuc2lnbmVkIGxvbmcgdW51c2VkKQorc3RhdGljIGludCBjdm1fb2N0X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7Ci0JY29uc3QgaW50IGNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7Ci0JdWludDY0X3Qgb2xkX2dyb3VwX21hc2s7Ci0JdWludDY0X3Qgb2xkX3NjcmF0Y2g7Ci0JaW50IHJ4X2NvdW50ID0gMDsKLQlpbnQgbnVtYmVyX3RvX2ZyZWU7Ci0JaW50IG51bV9mcmVlZDsKLQlpbnQgcGFja2V0X25vdF9jb3BpZWQ7CisJY29uc3QgaW50CWNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7CisJdWludDY0X3QJb2xkX2dyb3VwX21hc2s7CisJdWludDY0X3QJb2xkX3NjcmF0Y2g7CisJaW50CQlyeF9jb3VudCA9IDA7CisJaW50CQlkaWRfd29ya19yZXF1ZXN0ID0gMDsKKwlpbnQJCXBhY2tldF9ub3RfY29waWVkOwogCiAJLyogUHJlZmV0Y2ggY3ZtX29jdF9kZXZpY2Ugc2luY2Ugd2Uga25vdyB3ZSBuZWVkIGl0IHNvb24gKi8KIAlwcmVmZXRjaChjdm1fb2N0X2RldmljZSk7CkBAIC0yMjcsNTkgKzI1Myw2MyBAQAogCWN2bXhfd3JpdGVfY3NyKENWTVhfUE9XX1BQX0dSUF9NU0tYKGNvcmVpZCksCiAJCSAgICAgICAob2xkX2dyb3VwX21hc2sgJiB+MHhGRkZGdWxsKSB8IDEgPDwgcG93X3JlY2VpdmVfZ3JvdXApOwogCi0JaWYgKFVTRV9BU1lOQ19JT0JETUEpCisJaWYgKFVTRV9BU1lOQ19JT0JETUEpIHsKIAkJY3ZteF9wb3dfd29ya19yZXF1ZXN0X2FzeW5jKENWTVhfU0NSX1NDUkFUQ0gsIENWTVhfUE9XX05PX1dBSVQpOworCQlkaWRfd29ya19yZXF1ZXN0ID0gMTsKKwl9CiAKLQl3aGlsZSAoMSkgeworCXdoaWxlIChyeF9jb3VudCA8IGJ1ZGdldCkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwkJc3RydWN0IHNrX2J1ZmYgKipwc2tiID0gTlVMTDsKIAkJaW50IHNrYl9pbl9odzsKIAkJY3ZteF93cWVfdCAqd29yazsKIAotCQlpZiAoVVNFX0FTWU5DX0lPQkRNQSkgeworCQlpZiAoVVNFX0FTWU5DX0lPQkRNQSAmJiBkaWRfd29ya19yZXF1ZXN0KQogCQkJd29yayA9IGN2bXhfcG93X3dvcmtfcmVzcG9uc2VfYXN5bmMoQ1ZNWF9TQ1JfU0NSQVRDSCk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKElOVEVSUlVQVF9MSU1JVCA9PSAwKQotCQkJICAgIHx8IGxpa2VseShyeF9jb3VudCA8IE1BWF9SWF9QQUNLRVRTKSkKLQkJCQl3b3JrID0KLQkJCQkgICAgY3ZteF9wb3dfd29ya19yZXF1ZXN0X3N5bmMKLQkJCQkgICAgKENWTVhfUE9XX05PX1dBSVQpOwotCQkJZWxzZQotCQkJCXdvcmsgPSBOVUxMOwotCQl9CisJCWVsc2UKKwkJCXdvcmsgPSBjdm14X3Bvd193b3JrX3JlcXVlc3Rfc3luYyhDVk1YX1BPV19OT19XQUlUKTsKKwogCQlwcmVmZXRjaCh3b3JrKTsKLQkJaWYgKHdvcmsgPT0gTlVMTCkKKwkJZGlkX3dvcmtfcmVxdWVzdCA9IDA7CisJCWlmICh3b3JrID09IE5VTEwpIHsKKwkJCXVuaW9uIGN2bXhfcG93X3dxX2ludCB3cV9pbnQ7CisJCQl3cV9pbnQudTY0ID0gMDsKKwkJCXdxX2ludC5zLmlxX2RpcyA9IDEgPDwgcG93X3JlY2VpdmVfZ3JvdXA7CisJCQl3cV9pbnQucy53cV9pbnQgPSAxIDw8IHBvd19yZWNlaXZlX2dyb3VwOworCQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfV1FfSU5ULCB3cV9pbnQudTY0KTsKIAkJCWJyZWFrOworCQl9CisJCXBza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiopKGN2bV9vY3RfZ2V0X2J1ZmZlcl9wdHIod29yay0+cGFja2V0X3B0cikgLSBzaXplb2Yodm9pZCAqKSk7CisJCXByZWZldGNoKHBza2IpOwogCi0JCS8qCi0JCSAqIExpbWl0IGVhY2ggY29yZSB0byBwcm9jZXNzaW5nIE1BWF9SWF9QQUNLRVRTCi0JCSAqIHBhY2tldHMgd2l0aG91dCBhIGJyZWFrLiAgVGhpcyB3YXkgdGhlIFJYIGNhbid0Ci0JCSAqIHN0YXJ2ZSB0aGUgVFggdGFzay4KLQkJICovCi0JCWlmIChVU0VfQVNZTkNfSU9CRE1BKSB7CisJCWlmIChVU0VfQVNZTkNfSU9CRE1BICYmIHJ4X2NvdW50IDwgKGJ1ZGdldCAtIDEpKSB7CisJCQljdm14X3Bvd193b3JrX3JlcXVlc3RfYXN5bmNfbm9jaGVjayhDVk1YX1NDUl9TQ1JBVENILCBDVk1YX1BPV19OT19XQUlUKTsKKwkJCWRpZF93b3JrX3JlcXVlc3QgPSAxOworCQl9CiAKLQkJCWlmICgoSU5URVJSVVBUX0xJTUlUID09IDApCi0JCQkgICAgfHwgbGlrZWx5KHJ4X2NvdW50IDwgTUFYX1JYX1BBQ0tFVFMpKQotCQkJCWN2bXhfcG93X3dvcmtfcmVxdWVzdF9hc3luY19ub2NoZWNrCi0JCQkJICAgIChDVk1YX1NDUl9TQ1JBVENILCBDVk1YX1BPV19OT19XQUlUKTsKLQkJCWVsc2UgewotCQkJCWN2bXhfc2NyYXRjaF93cml0ZTY0KENWTVhfU0NSX1NDUkFUQ0gsCi0JCQkJCQkgICAgIDB4ODAwMDAwMDAwMDAwMDAwMHVsbCk7Ci0JCQkJY3ZteF9wb3dfdGFnX3N3X251bGxfbm9jaGVjaygpOwotCQkJfQorCQlpZiAocnhfY291bnQgPT0gMCkgeworCQkJLyoKKwkJCSAqIEZpcnN0IHRpbWUgdGhyb3VnaCwgc2VlIGlmIHRoZXJlIGlzIGVub3VnaAorCQkJICogd29yayB3YWl0aW5nIHRvIG1lcml0IHdha2luZyBhbm90aGVyCisJCQkgKiBDUFUuCisJCQkgKi8KKwkJCXVuaW9uIGN2bXhfcG93X3dxX2ludF9jbnR4IGNvdW50czsKKwkJCWludCBiYWNrbG9nOworCQkJaW50IGNvcmVzX2luX3VzZSA9IGNvcmVfc3RhdGUuYmFzZWxpbmVfY29yZXMgLSBhdG9taWNfcmVhZCgmY29yZV9zdGF0ZS5hdmFpbGFibGVfY29yZXMpOworCQkJY291bnRzLnU2NCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9QT1dfV1FfSU5UX0NOVFgocG93X3JlY2VpdmVfZ3JvdXApKTsKKwkJCWJhY2tsb2cgPSBjb3VudHMucy5pcV9jbnQgKyBjb3VudHMucy5kc19jbnQ7CisJCQlpZiAoYmFja2xvZyA+IGJ1ZGdldCAqIGNvcmVzX2luX3VzZSAmJiBuYXBpICE9IE5VTEwpCisJCQkJY3ZtX29jdF9lbmFibGVfb25lX2NwdSgpOwogCQl9CiAKIAkJc2tiX2luX2h3ID0gVVNFX1NLQlVGRlNfSU5fSFcgJiYgd29yay0+d29yZDIucy5idWZzID09IDE7CiAJCWlmIChsaWtlbHkoc2tiX2luX2h3KSkgewotCQkJc2tiID0KLQkJCSAgICAqKHN0cnVjdCBza19idWZmCi0JCQkgICAgICAqKikoY3ZtX29jdF9nZXRfYnVmZmVyX3B0cih3b3JrLT5wYWNrZXRfcHRyKSAtCi0JCQkJICBzaXplb2Yodm9pZCAqKSk7CisJCQlza2IgPSAqcHNrYjsKIAkJCXByZWZldGNoKCZza2ItPmhlYWQpOwogCQkJcHJlZmV0Y2goJnNrYi0+bGVuKTsKIAkJfQogCQlwcmVmZXRjaChjdm1fb2N0X2RldmljZVt3b3JrLT5pcHBydF0pOwogCi0JCXJ4X2NvdW50Kys7CiAJCS8qIEltbWVkaWF0ZWx5IHRocm93IGF3YXkgYWxsIHBhY2tldHMgd2l0aCByZWNlaXZlIGVycm9ycyAqLwogCQlpZiAodW5saWtlbHkod29yay0+d29yZDIuc25vaXAucmN2X2Vycm9yKSkgewogCQkJaWYgKGN2bV9vY3RfY2hlY2tfcmN2X2Vycm9yKHdvcmspKQpAQCAtMjkyLDM5ICszMjIsMjcgQEAKIAkJICogYnVmZmVyLgogCQkgKi8KIAkJaWYgKGxpa2VseShza2JfaW5faHcpKSB7Ci0JCQkvKgotCQkJICogVGhpcyBjYWxjdWxhdGlvbiB3YXMgY2hhbmdlZCBpbiBjYXNlIHRoZQotCQkJICogc2tiIGhlYWRlciBpcyB1c2luZyBhIGRpZmZlcmVudCBhZGRyZXNzCi0JCQkgKiBhbGlhc2luZyB0eXBlIHRoYW4gdGhlIGJ1ZmZlci4gSXQgZG9lc24ndAotCQkJICogbWFrZSBhbnkgZGlmZmVybmVjZSBub3csIGJ1dCB0aGUgbmV3IG9uZSBpcwotCQkJICogbW9yZSBjb3JyZWN0LgotCQkJICovCi0JCQlza2ItPmRhdGEgPQotCQkJICAgIHNrYi0+aGVhZCArIHdvcmstPnBhY2tldF9wdHIucy5hZGRyIC0KLQkJCSAgICBjdm14X3B0cl90b19waHlzKHNrYi0+aGVhZCk7CisJCQlza2ItPmRhdGEgPSBza2ItPmhlYWQgKyB3b3JrLT5wYWNrZXRfcHRyLnMuYWRkciAtIGN2bXhfcHRyX3RvX3BoeXMoc2tiLT5oZWFkKTsKIAkJCXByZWZldGNoKHNrYi0+ZGF0YSk7CiAJCQlza2ItPmxlbiA9IHdvcmstPmxlbjsKIAkJCXNrYl9zZXRfdGFpbF9wb2ludGVyKHNrYiwgc2tiLT5sZW4pOwogCQkJcGFja2V0X25vdF9jb3BpZWQgPSAxOwogCQl9IGVsc2UgewotCiAJCQkvKgogCQkJICogV2UgaGF2ZSB0byBjb3B5IHRoZSBwYWNrZXQuIEZpcnN0IGFsbG9jYXRlCiAJCQkgKiBhbiBza2J1ZmYgZm9yIGl0LgogCQkJICovCiAJCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHdvcmstPmxlbik7CiAJCQlpZiAoIXNrYikgewotCQkJCURFQlVHUFJJTlQoIlBvcnQgJWQgZmFpbGVkIHRvIGFsbG9jYXRlICIKLQkJCQkJICAgInNrYnVmZiwgcGFja2V0IGRyb3BwZWRcbiIsCi0JCQkJICAgICB3b3JrLT5pcHBydCk7CisJCQkJREVCVUdQUklOVCgiUG9ydCAlZCBmYWlsZWQgdG8gYWxsb2NhdGUgc2tidWZmLCBwYWNrZXQgZHJvcHBlZFxuIiwKKwkJCQkJICAgd29yay0+aXBwcnQpOwogCQkJCWN2bV9vY3RfZnJlZV93b3JrKHdvcmspOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCiAJCQkvKgogCQkJICogQ2hlY2sgaWYgd2UndmUgcmVjZWl2ZWQgYSBwYWNrZXQgdGhhdCB3YXMKLQkJCSAqIGVudGlyZWx5IHN0b3JlZCBpbiB0aGUgd29yayBlbnRyeS4gVGhpcyBpcwotCQkJICogdW50ZXN0ZWQuCisJCQkgKiBlbnRpcmVseSBzdG9yZWQgaW4gdGhlIHdvcmsgZW50cnkuCiAJCQkgKi8KIAkJCWlmICh1bmxpa2VseSh3b3JrLT53b3JkMi5zLmJ1ZnMgPT0gMCkpIHsKIAkJCQl1aW50OF90ICpwdHIgPSB3b3JrLT5wYWNrZXRfZGF0YTsKQEAgLTM0MywxNSArMzYxLDEzIEBACiAJCQkJLyogTm8gcGFja2V0IGJ1ZmZlcnMgdG8gZnJlZSAqLwogCQkJfSBlbHNlIHsKIAkJCQlpbnQgc2VnbWVudHMgPSB3b3JrLT53b3JkMi5zLmJ1ZnM7Ci0JCQkJdW5pb24gY3ZteF9idWZfcHRyIHNlZ21lbnRfcHRyID0KLQkJCQkJd29yay0+cGFja2V0X3B0cjsKKwkJCQl1bmlvbiBjdm14X2J1Zl9wdHIgc2VnbWVudF9wdHIgPSB3b3JrLT5wYWNrZXRfcHRyOwogCQkJCWludCBsZW4gPSB3b3JrLT5sZW47CiAKIAkJCQl3aGlsZSAoc2VnbWVudHMtLSkgewogCQkJCQl1bmlvbiBjdm14X2J1Zl9wdHIgbmV4dF9wdHIgPQotCQkJCQkgICAgKih1bmlvbiBjdm14X2J1Zl9wdHIgKikKLQkJCQkJICAgIGN2bXhfcGh5c190b19wdHIoc2VnbWVudF9wdHIucy4KLQkJCQkJCQkgICAgIGFkZHIgLSA4KTsKKwkJCQkJICAgICoodW5pb24gY3ZteF9idWZfcHRyICopY3ZteF9waHlzX3RvX3B0cihzZWdtZW50X3B0ci5zLmFkZHIgLSA4KTsKKwogCQkJLyoKIAkJCSAqIE9jdGVvbiBFcnJhdGEgUEtJLTEwMDogVGhlIHNlZ21lbnQgc2l6ZSBpcwogCQkJICogd3JvbmcuIFVudGlsIGl0IGlzIGZpeGVkLCBjYWxjdWxhdGUgdGhlCkBAIC0zNjEsMjIgKzM3NywxOCBAQAogCQkJICogb25lOiBpbnQgc2VnbWVudF9zaXplID0KIAkJCSAqIHNlZ21lbnRfcHRyLnMuc2l6ZTsKIAkJCSAqLwotCQkJCQlpbnQgc2VnbWVudF9zaXplID0KLQkJCQkJICAgIENWTVhfRlBBX1BBQ0tFVF9QT09MX1NJWkUgLQotCQkJCQkgICAgKHNlZ21lbnRfcHRyLnMuYWRkciAtCi0JCQkJCSAgICAgKCgoc2VnbWVudF9wdHIucy5hZGRyID4+IDcpIC0KLQkJCQkJICAgICAgIHNlZ21lbnRfcHRyLnMuYmFjaykgPDwgNykpOwotCQkJCQkvKiBEb24ndCBjb3B5IG1vcmUgdGhhbiB3aGF0IGlzIGxlZnQKLQkJCQkJICAgaW4gdGhlIHBhY2tldCAqLworCQkJCQlpbnQgc2VnbWVudF9zaXplID0gQ1ZNWF9GUEFfUEFDS0VUX1BPT0xfU0laRSAtCisJCQkJCQkoc2VnbWVudF9wdHIucy5hZGRyIC0gKCgoc2VnbWVudF9wdHIucy5hZGRyID4+IDcpIC0gc2VnbWVudF9wdHIucy5iYWNrKSA8PCA3KSk7CisJCQkJCS8qCisJCQkJCSAqIERvbid0IGNvcHkgbW9yZSB0aGFuIHdoYXQKKwkJCQkJICogaXMgbGVmdCBpbiB0aGUgcGFja2V0LgorCQkJCQkgKi8KIAkJCQkJaWYgKHNlZ21lbnRfc2l6ZSA+IGxlbikKIAkJCQkJCXNlZ21lbnRfc2l6ZSA9IGxlbjsKIAkJCQkJLyogQ29weSB0aGUgZGF0YSBpbnRvIHRoZSBwYWNrZXQgKi8KIAkJCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBzZWdtZW50X3NpemUpLAotCQkJCQkgICAgICAgY3ZteF9waHlzX3RvX3B0cihzZWdtZW50X3B0ci5zLgotCQkJCQkJCQlhZGRyKSwKKwkJCQkJICAgICAgIGN2bXhfcGh5c190b19wdHIoc2VnbWVudF9wdHIucy5hZGRyKSwKIAkJCQkJICAgICAgIHNlZ21lbnRfc2l6ZSk7Ci0JCQkJCS8qIFJlZHVjZSB0aGUgYW1vdW50IG9mIGJ5dGVzIGxlZnQKLQkJCQkJICAgdG8gY29weSAqLwogCQkJCQlsZW4gLT0gc2VnbWVudF9zaXplOwogCQkJCQlzZWdtZW50X3B0ciA9IG5leHRfcHRyOwogCQkJCX0KQEAgLTM4OSwxNiArNDAxLDE1IEBACiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY3ZtX29jdF9kZXZpY2Vbd29yay0+aXBwcnRdOwogCQkJc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQkJCS8qIE9ubHkgYWNjZXB0IHBhY2tldHMgZm9yIGRldmljZXMKLQkJCSAgIHRoYXQgYXJlIGN1cnJlbnRseSB1cCAqLworCQkJLyoKKwkJCSAqIE9ubHkgYWNjZXB0IHBhY2tldHMgZm9yIGRldmljZXMgdGhhdCBhcmUKKwkJCSAqIGN1cnJlbnRseSB1cC4KKwkJCSAqLwogCQkJaWYgKGxpa2VseShkZXYtPmZsYWdzICYgSUZGX1VQKSkgewogCQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCQkJc2tiLT5kZXYgPSBkZXY7CiAKLQkJCQlpZiAodW5saWtlbHkKLQkJCQkgICAgKHdvcmstPndvcmQyLnMubm90X0lQCi0JCQkJICAgICB8fCB3b3JrLT53b3JkMi5zLklQX2V4YwotCQkJCSAgICAgfHwgd29yay0+d29yZDIucy5MNF9lcnJvcikpCisJCQkJaWYgKHVubGlrZWx5KHdvcmstPndvcmQyLnMubm90X0lQIHx8IHdvcmstPndvcmQyLnMuSVBfZXhjIHx8IHdvcmstPndvcmQyLnMuTDRfZXJyb3IpKQogCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAJCQkJZWxzZQogCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwpAQCAtNDE0LDE1ICs0MjUsMTMgQEAKICNlbmRpZgogCQkJCX0KIAkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQkJCXJ4X2NvdW50Kys7CiAJCQl9IGVsc2UgeworCQkJCS8qIERyb3AgYW55IHBhY2tldCByZWNlaXZlZCBmb3IgYSBkZXZpY2UgdGhhdCBpc24ndCB1cCAqLwogCQkJCS8qCi0JCQkJICogRHJvcCBhbnkgcGFja2V0IHJlY2VpdmVkIGZvciBhCi0JCQkJICogZGV2aWNlIHRoYXQgaXNuJ3QgdXAuCi0JCQkJICovCi0JCQkJLyoKLQkJCQkgICBERUJVR1BSSU5UKCIlczogRGV2aWNlIG5vdCB1cCwgcGFja2V0IGRyb3BwZWRcbiIsCi0JCQkJICAgZGV2LT5uYW1lKTsKLQkJCQkgKi8KKwkJCQlERUJVR1BSSU5UKCIlczogRGV2aWNlIG5vdCB1cCwgcGFja2V0IGRyb3BwZWRcbiIsCisJCQkJCSAgIGRldi0+bmFtZSk7CisJCQkJKi8KICNpZmRlZiBDT05GSUdfNjRCSVQKIAkJCQlhdG9taWM2NF9hZGQoMSwgKGF0b21pYzY0X3QgKikmcHJpdi0+c3RhdHMucnhfZHJvcHBlZCk7CiAjZWxzZQpAQCAtNDM1LDkgKzQ0NCw4IEBACiAJCQkgKiBEcm9wIGFueSBwYWNrZXQgcmVjZWl2ZWQgZm9yIGEgZGV2aWNlIHRoYXQKIAkJCSAqIGRvZXNuJ3QgZXhpc3QuCiAJCQkgKi8KLQkJCURFQlVHUFJJTlQoIlBvcnQgJWQgbm90IGNvbnRyb2xsZWQgYnkgTGludXgsIHBhY2tldCAiCi0JCQkJICAgImRyb3BwZWRcbiIsCi0JCQkgICAgIHdvcmstPmlwcHJ0KTsKKwkJCURFQlVHUFJJTlQoIlBvcnQgJWQgbm90IGNvbnRyb2xsZWQgYnkgTGludXgsIHBhY2tldCBkcm9wcGVkXG4iLAorCQkJCSAgIHdvcmstPmlwcHJ0KTsKIAkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJCX0KIAkJLyoKQEAgLTQ1OSw0NyArNDY3LDkzIEBACiAJCQljdm1fb2N0X2ZyZWVfd29yayh3b3JrKTsKIAkJfQogCX0KLQogCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIFBPVyBncm91cCBtYXNrICovCiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfUFBfR1JQX01TS1goY29yZWlkKSwgb2xkX2dyb3VwX21hc2spOwogCWlmIChVU0VfQVNZTkNfSU9CRE1BKSB7CiAJCS8qIFJlc3RvcmUgdGhlIHNjcmF0Y2ggYXJlYSAqLwogCQljdm14X3NjcmF0Y2hfd3JpdGU2NChDVk1YX1NDUl9TQ1JBVENILCBvbGRfc2NyYXRjaCk7CiAJfQorCWN2bV9vY3RfcnhfcmVmaWxsX3Bvb2woMCk7CiAKLQlpZiAoVVNFX1NLQlVGRlNfSU5fSFcpIHsKLQkJLyogUmVmaWxsIHRoZSBwYWNrZXQgYnVmZmVyIHBvb2wgKi8KLQkJbnVtYmVyX3RvX2ZyZWUgPQotCQkgICAgY3ZteF9mYXVfZmV0Y2hfYW5kX2FkZDMyKEZBVV9OVU1fUEFDS0VUX0JVRkZFUlNfVE9fRlJFRSwgMCk7Ci0KLQkJaWYgKG51bWJlcl90b19mcmVlID4gMCkgewotCQkJY3ZteF9mYXVfYXRvbWljX2FkZDMyKEZBVV9OVU1fUEFDS0VUX0JVRkZFUlNfVE9fRlJFRSwKLQkJCQkJICAgICAgLW51bWJlcl90b19mcmVlKTsKLQkJCW51bV9mcmVlZCA9Ci0JCQkgICAgY3ZtX29jdF9tZW1fZmlsbF9mcGEoQ1ZNWF9GUEFfUEFDS0VUX1BPT0wsCi0JCQkJCQkgQ1ZNWF9GUEFfUEFDS0VUX1BPT0xfU0laRSwKLQkJCQkJCSBudW1iZXJfdG9fZnJlZSk7Ci0JCQlpZiAobnVtX2ZyZWVkICE9IG51bWJlcl90b19mcmVlKSB7Ci0JCQkJY3ZteF9mYXVfYXRvbWljX2FkZDMyCi0JCQkJICAgIChGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsCi0JCQkJICAgICBudW1iZXJfdG9fZnJlZSAtIG51bV9mcmVlZCk7Ci0JCQl9Ci0JCX0KKwlpZiAocnhfY291bnQgPCBidWRnZXQgJiYgbmFwaSAhPSBOVUxMKSB7CisJCS8qIE5vIG1vcmUgd29yayAqLworCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQljdm1fb2N0X25vX21vcmVfd29yaygpOwogCX0KKwlyZXR1cm4gcnhfY291bnQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorLyoqCisgKiBjdm1fb2N0X3BvbGxfY29udHJvbGxlciAtIHBvbGwgZm9yIHJlY2VpdmUgcGFja2V0cworICogZGV2aWNlLgorICoKKyAqIEBkZXY6ICAgIERldmljZSB0byBwb2xsLiBVbnVzZWQKKyAqLwordm9pZCBjdm1fb2N0X3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWN2bV9vY3RfbmFwaV9wb2xsKE5VTEwsIDE2KTsKK30KKyNlbmRpZgorCiB2b2lkIGN2bV9vY3RfcnhfaW5pdGlhbGl6ZSh2b2lkKQogewogCWludCBpOwotCS8qIEluaXRpYWxpemUgYWxsIG9mIHRoZSB0YXNrbGV0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspCi0JCXRhc2tsZXRfaW5pdCgmY3ZtX29jdF90YXNrbGV0W2ldLnQsIGN2bV9vY3RfdGFza2xldF9yeCwgMCk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldl9mb3JfbmFwaSA9IE5VTEw7CisJdW5pb24gY3ZteF9wb3dfd3FfaW50X3RocnggaW50X3RocjsKKwl1bmlvbiBjdm14X3Bvd193cV9pbnRfcGMgaW50X3BjOworCisJZm9yIChpID0gMDsgaSA8IFRPVEFMX05VTUJFUl9PRl9QT1JUUzsgaSsrKSB7CisJCWlmIChjdm1fb2N0X2RldmljZVtpXSkgeworCQkJZGV2X2Zvcl9uYXBpID0gY3ZtX29jdF9kZXZpY2VbaV07CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChOVUxMID09IGRldl9mb3JfbmFwaSkKKwkJcGFuaWMoIk5vIG5ldF9kZXZpY2VzIHdlcmUgYWxsb2NhdGVkLiIpOworCisJaWYgKG1heF9yeF9jcHVzID4gMSAgJiYgbWF4X3J4X2NwdXMgPCBudW1fb25saW5lX2NwdXMoKSkKKwkJYXRvbWljX3NldCgmY29yZV9zdGF0ZS5hdmFpbGFibGVfY29yZXMsIG1heF9yeF9jcHVzKTsKKwllbHNlCisJCWF0b21pY19zZXQoJmNvcmVfc3RhdGUuYXZhaWxhYmxlX2NvcmVzLCBudW1fb25saW5lX2NwdXMoKSk7CisJY29yZV9zdGF0ZS5iYXNlbGluZV9jb3JlcyA9IGF0b21pY19yZWFkKCZjb3JlX3N0YXRlLmF2YWlsYWJsZV9jb3Jlcyk7CisKKwljb3JlX3N0YXRlLmNwdV9zdGF0ZSA9IENQVV9NQVNLX05PTkU7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJbmV0aWZfbmFwaV9hZGQoZGV2X2Zvcl9uYXBpLCAmY3ZtX29jdF9uYXBpW2ldLm5hcGksCisJCQkgICAgICAgY3ZtX29jdF9uYXBpX3BvbGwsIHJ4X25hcGlfd2VpZ2h0KTsKKwkJbmFwaV9lbmFibGUoJmN2bV9vY3RfbmFwaVtpXS5uYXBpKTsKKwl9CisJLyogUmVnaXN0ZXIgYW4gSVJRIGhhbmRlciBmb3IgdG8gcmVjZWl2ZSBQT1cgaW50ZXJydXB0cyAqLworCWkgPSByZXF1ZXN0X2lycShPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwLAorCQkJY3ZtX29jdF9kb19pbnRlcnJ1cHQsIDAsICJFdGhlcm5ldCIsIGN2bV9vY3RfZGV2aWNlKTsKKworCWlmIChpKQorCQlwYW5pYygiQ291bGQgbm90IGFjcXVpcmUgRXRoZXJuZXQgSVJRICVkXG4iLAorCQkgICAgICBPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwKTsKKworCWRpc2FibGVfaXJxX25vc3luYyhPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwKTsKKworCWludF90aHIudTY0ID0gMDsKKwlpbnRfdGhyLnMudGNfZW4gPSAxOworCWludF90aHIucy50Y190aHIgPSAxOworCS8qIEVuYWJsZSBQT1cgaW50ZXJydXB0IHdoZW4gb3VyIHBvcnQgaGFzIGF0IGxlYXN0IG9uZSBwYWNrZXQgKi8KKwljdm14X3dyaXRlX2NzcihDVk1YX1BPV19XUV9JTlRfVEhSWChwb3dfcmVjZWl2ZV9ncm91cCksIGludF90aHIudTY0KTsKKworCWludF9wYy51NjQgPSAwOworCWludF9wYy5zLnBjX3RociA9IDU7CisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfV1FfSU5UX1BDLCBpbnRfcGMudTY0KTsKKworCisJLyogU2NoZWR1bGQgTkFQSSBub3cuICBUaGlzIHdpbGwgaW5kaXJlY3RseSBlbmFibGUgaW50ZXJydXB0cy4gKi8KKwljdm1fb2N0X2VuYWJsZV9vbmVfY3B1KCk7CiB9CiAKIHZvaWQgY3ZtX29jdF9yeF9zaHV0ZG93bih2b2lkKQogewogCWludCBpOwotCS8qIFNodXRkb3duIGFsbCBvZiB0aGUgdGFza2xldHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKQotCQl0YXNrbGV0X2tpbGwoJmN2bV9vY3RfdGFza2xldFtpXS50KTsKKwkvKiBTaHV0ZG93biBhbGwgb2YgdGhlIE5BUElzICovCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCW5ldGlmX25hcGlfZGVsKCZjdm1fb2N0X25hcGlbaV0ubmFwaSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJ4LmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXJ4LmgKaW5kZXggYTliNzJiOC4uYTA3NDNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1yeC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtcnguaApAQCAtMjQsMTAgKzI0LDI5IEBACiAgKiBUaGlzIGZpbGUgbWF5IGFsc28gYmUgYXZhaWxhYmxlIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgZnJvbSBDYXZpdW0uCiAgKiBDb250YWN0IENhdml1bSBOZXR3b3JrcyBmb3IgbW9yZSBpbmZvcm1hdGlvbgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImN2bXgtZmF1LmgiCiAKLWlycXJldHVybl90IGN2bV9vY3RfZG9faW50ZXJydXB0KGludCBjcGwsIHZvaWQgKmRldl9pZCk7CiB2b2lkIGN2bV9vY3RfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotdm9pZCBjdm1fb2N0X3Rhc2tsZXRfcngodW5zaWduZWQgbG9uZyB1bnVzZWQpOwotCiB2b2lkIGN2bV9vY3RfcnhfaW5pdGlhbGl6ZSh2b2lkKTsKIHZvaWQgY3ZtX29jdF9yeF9zaHV0ZG93bih2b2lkKTsKKworc3RhdGljIGlubGluZSB2b2lkIGN2bV9vY3RfcnhfcmVmaWxsX3Bvb2woaW50IGZpbGxfdGhyZXNob2xkKQoreworCWludCBudW1iZXJfdG9fZnJlZTsKKwlpbnQgbnVtX2ZyZWVkOworCS8qIFJlZmlsbCB0aGUgcGFja2V0IGJ1ZmZlciBwb29sICovCisJbnVtYmVyX3RvX2ZyZWUgPQorCQljdm14X2ZhdV9mZXRjaF9hbmRfYWRkMzIoRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFLCAwKTsKKworCWlmIChudW1iZXJfdG9fZnJlZSA+IGZpbGxfdGhyZXNob2xkKSB7CisJCWN2bXhfZmF1X2F0b21pY19hZGQzMihGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsCisJCQkJICAgICAgLW51bWJlcl90b19mcmVlKTsKKwkJbnVtX2ZyZWVkID0gY3ZtX29jdF9tZW1fZmlsbF9mcGEoQ1ZNWF9GUEFfUEFDS0VUX1BPT0wsCisJCQkJCQkgQ1ZNWF9GUEFfUEFDS0VUX1BPT0xfU0laRSwKKwkJCQkJCSBudW1iZXJfdG9fZnJlZSk7CisJCWlmIChudW1fZnJlZWQgIT0gbnVtYmVyX3RvX2ZyZWUpIHsKKwkJCWN2bXhfZmF1X2F0b21pY19hZGQzMihGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsCisJCQkJCW51bWJlcl90b19mcmVlIC0gbnVtX2ZyZWVkKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc2dtaWkuYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc2dtaWkuYwppbmRleCA2MDYxZDAxLi4yZDg1ODllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNnbWlpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1zZ21paS5jCkBAIC0yNiw3ICsyNiw2IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KIAogI2luY2x1ZGUgPGFzbS9vY3Rlb24vb2N0ZW9uLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNwaS5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1zcGkuYwppbmRleCAwMGRjMGY0Li5iNThiODk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNwaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc3BpLmMKQEAgLTI2LDcgKzI2LDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogCiAjaW5jbHVkZSA8YXNtL29jdGVvbi9vY3Rlb24uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdHguYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdHguYwppbmRleCA1MzUyOTQxLi5hZmMyYjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXR4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC10eC5jCkBAIC00LDcgKzQsNyBAQAogICogQ29udGFjdDogc3VwcG9ydEBjYXZpdW1uZXR3b3Jrcy5jb20KICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBPQ1RFT04gU0RLCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2F2aXVtIE5ldHdvcmtzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMCBDYXZpdW0gTmV0d29ya3MKICAqCiAgKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyLCBhcwpAQCAtMzEsMTAgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KICNpZmRlZiBDT05GSUdfWEZSTQogI2luY2x1ZGUgPGxpbnV4L3hmcm0uaD4KQEAgLTUyLDExICs0OCwxNCBAQAogCiAjaW5jbHVkZSAiY3ZteC13cWUuaCIKICNpbmNsdWRlICJjdm14LWZhdS5oIgorI2luY2x1ZGUgImN2bXgtcGlwLmgiCiAjaW5jbHVkZSAiY3ZteC1wa28uaCIKICNpbmNsdWRlICJjdm14LWhlbHBlci5oIgogCiAjaW5jbHVkZSAiY3ZteC1nbXh4LWRlZnMuaCIKIAorI2RlZmluZSBDVk1fT0NUX1NLQl9DQihza2IpCSgodTY0ICopKChza2IpLT5jYikpCisKIC8qCiAgKiBZb3UgY2FuIGRlZmluZSBHRVRfU0tCVUZGX1FPUygpIHRvIG92ZXJyaWRlIGhvdyB0aGUgc2tidWZmIG91dHB1dAogICogZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGljaCBvdXRwdXQgcXVldWUgaXMgdXNlZC4gVGhlIGRlZmF1bHQKQEAgLTY4LDEyICs2Nyw4MSBAQAogI2RlZmluZSBHRVRfU0tCVUZGX1FPUyhza2IpIDAKICNlbmRpZgogCitzdGF0aWMgdm9pZCBjdm1fb2N0X3R4X2RvX2NsZWFudXAodW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIERFQ0xBUkVfVEFTS0xFVChjdm1fb2N0X3R4X2NsZWFudXBfdGFza2xldCwgY3ZtX29jdF90eF9kb19jbGVhbnVwLCAwKTsKKworLyogTWF4aW11bSBudW1iZXIgb2YgU0tCcyB0byB0cnkgdG8gZnJlZSBwZXIgeG1pdCBwYWNrZXQuICovCisjZGVmaW5lIE1BWF9TS0JfVE9fRlJFRSAoTUFYX09VVF9RVUVVRV9ERVBUSCAqIDIpCisKK3N0YXRpYyBpbmxpbmUgaW50MzJfdCBjdm1fb2N0X2FkanVzdF9za2JfdG9fZnJlZShpbnQzMl90IHNrYl90b19mcmVlLCBpbnQgZmF1KQoreworCWludDMyX3QgdW5kbzsKKwl1bmRvID0gc2tiX3RvX2ZyZWUgPiAwID8gTUFYX1NLQl9UT19GUkVFIDogc2tiX3RvX2ZyZWUgKyBNQVhfU0tCX1RPX0ZSRUU7CisJaWYgKHVuZG8gPiAwKQorCQljdm14X2ZhdV9hdG9taWNfYWRkMzIoZmF1LCAtdW5kbyk7CisJc2tiX3RvX2ZyZWUgPSAtc2tiX3RvX2ZyZWUgPiBNQVhfU0tCX1RPX0ZSRUUgPyBNQVhfU0tCX1RPX0ZSRUUgOiAtc2tiX3RvX2ZyZWU7CisJcmV0dXJuIHNrYl90b19mcmVlOworfQorCitzdGF0aWMgdm9pZCBjdm1fb2N0X2tpY2tfdHhfcG9sbF93YXRjaGRvZyh2b2lkKQoreworCXVuaW9uIGN2bXhfY2l1X3RpbXggY2l1X3RpbXg7CisJY2l1X3RpbXgudTY0ID0gMDsKKwljaXVfdGlteC5zLm9uZV9zaG90ID0gMTsKKwljaXVfdGlteC5zLmxlbiA9IGN2bV9vY3RfdHhfcG9sbF9pbnRlcnZhbDsKKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9USU1YKDEpLCBjaXVfdGlteC51NjQpOworfQorCit2b2lkIGN2bV9vY3RfZnJlZV90eF9za2JzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50MzJfdCBza2JfdG9fZnJlZTsKKwlpbnQgcW9zLCBxdWV1ZXNfcGVyX3BvcnQ7CisJaW50IHRvdGFsX2ZyZWVkID0gMDsKKwlpbnQgdG90YWxfcmVtYWluaW5nID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcXVldWVzX3Blcl9wb3J0ID0gY3ZteF9wa29fZ2V0X251bV9xdWV1ZXMocHJpdi0+cG9ydCk7CisJLyogRHJhaW4gYW55IHBlbmRpbmcgcGFja2V0cyBpbiB0aGUgZnJlZSBsaXN0ICovCisJZm9yIChxb3MgPSAwOyBxb3MgPCBxdWV1ZXNfcGVyX3BvcnQ7IHFvcysrKSB7CisJCWlmIChza2JfcXVldWVfbGVuKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlza2JfdG9fZnJlZSA9IGN2bXhfZmF1X2ZldGNoX2FuZF9hZGQzMihwcml2LT5mYXUrcW9zKjQsIE1BWF9TS0JfVE9fRlJFRSk7CisJCXNrYl90b19mcmVlID0gY3ZtX29jdF9hZGp1c3Rfc2tiX3RvX2ZyZWUoc2tiX3RvX2ZyZWUsIHByaXYtPmZhdStxb3MqNCk7CisKKworCQl0b3RhbF9mcmVlZCArPSBza2JfdG9fZnJlZTsKKwkJaWYgKHNrYl90b19mcmVlID4gMCkgeworCQkJc3RydWN0IHNrX2J1ZmYgKnRvX2ZyZWVfbGlzdCA9IE5VTEw7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jaywgZmxhZ3MpOworCQkJd2hpbGUgKHNrYl90b19mcmVlID4gMCkgeworCQkJCXN0cnVjdCBza19idWZmICp0ID0gX19za2JfZGVxdWV1ZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pOworCQkJCXQtPm5leHQgPSB0b19mcmVlX2xpc3Q7CisJCQkJdG9fZnJlZV9saXN0ID0gdDsKKwkJCQlza2JfdG9fZnJlZS0tOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jaywgZmxhZ3MpOworCQkJLyogRG8gdGhlIGFjdHVhbCBmcmVlaW5nIG91dHNpZGUgb2YgdGhlIGxvY2suICovCisJCQl3aGlsZSAodG9fZnJlZV9saXN0KSB7CisJCQkJc3RydWN0IHNrX2J1ZmYgKnQgPSB0b19mcmVlX2xpc3Q7CisJCQkJdG9fZnJlZV9saXN0ID0gdG9fZnJlZV9saXN0LT5uZXh0OworCQkJCWRldl9rZnJlZV9za2JfYW55KHQpOworCQkJfQorCQl9CisJCXRvdGFsX3JlbWFpbmluZyArPSBza2JfcXVldWVfbGVuKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXSk7CisJfQorCWlmICh0b3RhbF9mcmVlZCA+PSAwICYmIG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKKwkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCWlmICh0b3RhbF9yZW1haW5pbmcpCisJCWN2bV9vY3Rfa2lja190eF9wb2xsX3dhdGNoZG9nKCk7Cit9CisKIC8qKgotICogUGFja2V0IHRyYW5zbWl0Ci0gKgorICogY3ZtX29jdF94bWl0IC0gdHJhbnNtaXQgYSBwYWNrZXQKICAqIEBza2I6ICAgIFBhY2tldCB0byBzZW5kCiAgKiBAZGV2OiAgICBEZXZpY2UgaW5mbyBzdHJ1Y3R1cmUKLSAqIFJldHVybnMgQWx3YXlzIHJldHVybnMgemVybworICoKKyAqIFJldHVybnMgQWx3YXlzIHJldHVybnMgTkVUREVWX1RYX09LCiAgKi8KIGludCBjdm1fb2N0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTgxLDEzICsxNDksMTUgQEAKIAl1bmlvbiBjdm14X2J1Zl9wdHIgaHdfYnVmZmVyOwogCXVpbnQ2NF90IG9sZF9zY3JhdGNoOwogCXVpbnQ2NF90IG9sZF9zY3JhdGNoMjsKLQlpbnQgZHJvcHBlZDsKIAlpbnQgcW9zOwotCWludCBxdWV1ZV9pdF91cDsKKwlpbnQgaTsKKwllbnVtIHtRVUVVRV9DT1JFLCBRVUVVRV9IVywgUVVFVUVfRFJPUH0gcXVldWVfdHlwZTsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqdG9fZnJlZV9saXN0OwogCWludDMyX3Qgc2tiX3RvX2ZyZWU7Ci0JaW50MzJfdCB1bmRvOwogCWludDMyX3QgYnVmZmVyc190b19mcmVlOworCXUzMiB0b3RhbF90b19jbGVhbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogI2lmIFJFVVNFX1NLQlVGRlNfV0lUSE9VVF9GUkVFCiAJdW5zaWduZWQgY2hhciAqZnBhX2hlYWQ7CiAjZW5kaWYKQEAgLTk4LDkgKzE2OCw2IEBACiAJICovCiAJcHJlZmV0Y2gocHJpdik7CiAKLQkvKiBTdGFydCBvZmYgYXNzdW1pbmcgbm8gZHJvcCAqLwotCWRyb3BwZWQgPSAwOwotCiAJLyoKIAkgKiBUaGUgY2hlY2sgb24gQ1ZNWF9QS09fUVVFVUVTX1BFUl9QT1JUXyogaXMgZGVzaWduZWQgdG8KIAkgKiBjb21wbGV0ZWx5IHJlbW92ZSAicW9zIiBpbiB0aGUgZXZlbnQgbmVpdGhlciBpbnRlcmZhY2UKQEAgLTEzNSw2ICsyMDIsMjggQEAKIAl9CiAKIAkvKgorCSAqIFdlIGhhdmUgc3BhY2UgZm9yIDYgc2VnbWVudCBwb2ludGVycywgSWYgdGhlcmUgd2lsbCBiZSBtb3JlCisJICogdGhhbiB0aGF0LCB3ZSBtdXN0IGxpbmVhcml6ZS4KKwkgKi8KKwlpZiAodW5saWtlbHkoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA+IDUpKSB7CisJCWlmICh1bmxpa2VseShfX3NrYl9saW5lYXJpemUoc2tiKSkpIHsKKwkJCXF1ZXVlX3R5cGUgPSBRVUVVRV9EUk9QOworCQkJaWYgKFVTRV9BU1lOQ19JT0JETUEpIHsKKwkJCQkvKiBHZXQgdGhlIG51bWJlciBvZiBza2J1ZmZzIGluIHVzZSBieSB0aGUgaGFyZHdhcmUgKi8KKwkJCQlDVk1YX1NZTkNJT0JETUE7CisJCQkJc2tiX3RvX2ZyZWUgPSBjdm14X3NjcmF0Y2hfcmVhZDY0KENWTVhfU0NSX1NDUkFUQ0gpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBHZXQgdGhlIG51bWJlciBvZiBza2J1ZmZzIGluIHVzZSBieSB0aGUgaGFyZHdhcmUgKi8KKwkJCQlza2JfdG9fZnJlZSA9IGN2bXhfZmF1X2ZldGNoX2FuZF9hZGQzMihwcml2LT5mYXUgKyBxb3MgKiA0LAorCQkJCQkJCQkgICAgICAgTUFYX1NLQl9UT19GUkVFKTsKKwkJCX0KKwkJCXNrYl90b19mcmVlID0gY3ZtX29jdF9hZGp1c3Rfc2tiX3RvX2ZyZWUoc2tiX3RvX2ZyZWUsIHByaXYtPmZhdSArIHFvcyAqIDQpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X2ZyZWVfbGlzdFtxb3NdLmxvY2ssIGZsYWdzKTsKKwkJCWdvdG8gc2tpcF94bWl0OworCQl9CisJfQorCisJLyoKIAkgKiBUaGUgQ04zWFhYIHNlcmllcyBvZiBwYXJ0cyBoYXMgYW4gZXJyYXRhIChHTVgtNDAxKSB3aGljaAogCSAqIGNhdXNlcyB0aGUgR01YIGJsb2NrIHRvIGhhbmcgaWYgYSBjb2xsaXNpb24gb2NjdXJzIHRvd2FyZHMKIAkgKiB0aGUgZW5kIG9mIGEgPDY4IGJ5dGUgcGFja2V0LiBBcyBhIHdvcmthcm91bmQgZm9yIHRoaXMsIHdlCkBAIC0xNjIsMTMgKzI1MSw2IEBACiAJCX0KIAl9CiAKLQkvKiBCdWlsZCB0aGUgUEtPIGJ1ZmZlciBwb2ludGVyICovCi0JaHdfYnVmZmVyLnU2NCA9IDA7Ci0JaHdfYnVmZmVyLnMuYWRkciA9IGN2bXhfcHRyX3RvX3BoeXMoc2tiLT5kYXRhKTsKLQlod19idWZmZXIucy5wb29sID0gMDsKLQlod19idWZmZXIucy5zaXplID0KLQkgICAgKHVuc2lnbmVkIGxvbmcpc2tiX2VuZF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgbG9uZylza2ItPmhlYWQ7Ci0KIAkvKiBCdWlsZCB0aGUgUEtPIGNvbW1hbmQgKi8KIAlwa29fY29tbWFuZC51NjQgPSAwOwogCXBrb19jb21tYW5kLnMubjIgPSAxOwkvKiBEb24ndCBwb2xsdXRlIEwyIHdpdGggdGhlIG91dGdvaW5nIHBhY2tldCAqLwpAQCAtMTc4LDcgKzI2MCwzMSBAQAogCXBrb19jb21tYW5kLnMuc3Vib25lMCA9IDE7CiAKIAlwa29fY29tbWFuZC5zLmRvbnRmcmVlID0gMTsKLQlwa29fY29tbWFuZC5zLnJlZzAgPSBwcml2LT5mYXUgKyBxb3MgKiA0OworCisJLyogQnVpbGQgdGhlIFBLTyBidWZmZXIgcG9pbnRlciAqLworCWh3X2J1ZmZlci51NjQgPSAwOworCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID09IDApIHsKKwkJaHdfYnVmZmVyLnMuYWRkciA9IFhLUEhZU19UT19QSFlTKCh1NjQpc2tiLT5kYXRhKTsKKwkJaHdfYnVmZmVyLnMucG9vbCA9IDA7CisJCWh3X2J1ZmZlci5zLnNpemUgPSBza2ItPmxlbjsKKwl9IGVsc2UgeworCQlod19idWZmZXIucy5hZGRyID0gWEtQSFlTX1RPX1BIWVMoKHU2NClza2ItPmRhdGEpOworCQlod19idWZmZXIucy5wb29sID0gMDsKKwkJaHdfYnVmZmVyLnMuc2l6ZSA9IHNrYl9oZWFkbGVuKHNrYik7CisJCUNWTV9PQ1RfU0tCX0NCKHNrYilbMF0gPSBod19idWZmZXIudTY0OworCQlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7CisJCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcyA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3MgKyBpOworCQkJaHdfYnVmZmVyLnMuYWRkciA9IFhLUEhZU19UT19QSFlTKCh1NjQpKHBhZ2VfYWRkcmVzcyhmcy0+cGFnZSkgKyBmcy0+cGFnZV9vZmZzZXQpKTsKKwkJCWh3X2J1ZmZlci5zLnNpemUgPSBmcy0+c2l6ZTsKKwkJCUNWTV9PQ1RfU0tCX0NCKHNrYilbaSArIDFdID0gaHdfYnVmZmVyLnU2NDsKKwkJfQorCQlod19idWZmZXIucy5hZGRyID0gWEtQSFlTX1RPX1BIWVMoKHU2NClDVk1fT0NUX1NLQl9DQihza2IpKTsKKwkJaHdfYnVmZmVyLnMuc2l6ZSA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOworCQlwa29fY29tbWFuZC5zLnNlZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMTsKKwkJcGtvX2NvbW1hbmQucy5nYXRoZXIgPSAxOworCQlnb3RvIGRvbnRfcHV0X3NrYnVmZl9pbl9odzsKKwl9CisKIAkvKgogCSAqIFNlZSBpZiB3ZSBjYW4gcHV0IHRoaXMgc2tiIGluIHRoZSBGUEEgcG9vbC4gQW55IHN0cmFuZ2UKIAkgKiBiZWhhdmlvciBmcm9tIHRoZSBMaW51eCBuZXR3b3JraW5nIHN0YWNrIHdpbGwgbW9zdCBsaWtlbHkKQEAgLTE5MCw3ICsyOTYsNyBAQAogCSAqIHNob3duIGEgMjUlIGluY3JlYXNlIGluIHBlcmZvcm1hbmNlIHVuZGVyIHNvbWUgbG9hZHMuCiAJICovCiAjaWYgUkVVU0VfU0tCVUZGU19XSVRIT1VUX0ZSRUUKLQlmcGFfaGVhZCA9IHNrYi0+aGVhZCArIDEyOCAtICgodW5zaWduZWQgbG9uZylza2ItPmhlYWQgJiAweDdmKTsKKwlmcGFfaGVhZCA9IHNrYi0+aGVhZCArIDI1NiAtICgodW5zaWduZWQgbG9uZylza2ItPmhlYWQgJiAweDdmKTsKIAlpZiAodW5saWtlbHkoc2tiLT5kYXRhIDwgZnBhX2hlYWQpKSB7CiAJCS8qCiAJCSAqIHByaW50aygiVFggYnVmZmVyIGJlZ2lubmluZyBjYW4ndCBtZWV0IEZQQQpAQCAtMjQ4LDEwICszNTQsOSBAQAogCSAqIFdlIGNhbiB1c2UgdGhpcyBidWZmZXIgaW4gdGhlIEZQQS4gIFdlIGRvbid0IG5lZWQgdGhlIEZBVQogCSAqIHVwZGF0ZSBhbnltb3JlCiAJICovCi0JcGtvX2NvbW1hbmQucy5yZWcwID0gMDsKIAlwa29fY29tbWFuZC5zLmRvbnRmcmVlID0gMDsKIAotCWh3X2J1ZmZlci5zLmJhY2sgPSAoc2tiLT5kYXRhIC0gZnBhX2hlYWQpID4+IDc7CisJaHdfYnVmZmVyLnMuYmFjayA9ICgodW5zaWduZWQgbG9uZylza2ItPmRhdGEgPj4gNykgLSAoKHVuc2lnbmVkIGxvbmcpZnBhX2hlYWQgPj4gNyk7CiAJKihzdHJ1Y3Qgc2tfYnVmZiAqKikoZnBhX2hlYWQgLSBzaXplb2Yodm9pZCAqKSkgPSBza2I7CiAKIAkvKgpAQCAtMjcyLDE2ICszNzcsMTYgQEAKIAlza2ItPnRjX3ZlcmQgPSAwOwogI2VuZGlmIC8qIENPTkZJR19ORVRfQ0xTX0FDVCAqLwogI2VuZGlmIC8qIENPTkZJR19ORVRfU0NIRUQgKi8KKyNlbmRpZiAvKiBSRVVTRV9TS0JVRkZTX1dJVEhPVVRfRlJFRSAqLwogCiBkb250X3B1dF9za2J1ZmZfaW5faHc6Ci0jZW5kaWYgLyogUkVVU0VfU0tCVUZGU19XSVRIT1VUX0ZSRUUgKi8KIAogCS8qIENoZWNrIGlmIHdlIGNhbiB1c2UgdGhlIGhhcmR3YXJlIGNoZWNrc3VtbWluZyAqLwogCWlmIChVU0VfSFdfVENQVURQX0NIRUNLU1VNICYmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgJiYKIAkgICAgKGlwX2hkcihza2IpLT52ZXJzaW9uID09IDQpICYmIChpcF9oZHIoc2tiKS0+aWhsID09IDUpICYmCiAJICAgICgoaXBfaGRyKHNrYiktPmZyYWdfb2ZmID09IDApIHx8IChpcF9oZHIoc2tiKS0+ZnJhZ19vZmYgPT0gMSA8PCAxNCkpCi0JICAgICYmICgoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQX1BST1RPQ09MX1RDUCkKLQkJfHwgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUF9QUk9UT0NPTF9VRFApKSkgeworCSAgICAmJiAoKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKKwkJfHwgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkpKSB7CiAJCS8qIFVzZSBoYXJkd2FyZSBjaGVja3N1bSBjYWxjICovCiAJCXBrb19jb21tYW5kLnMuaXBvZmZwMSA9IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArIDE7CiAJfQpAQCAtMjk5LDg5ICs0MDQsMTE2IEBACiAJCSAgICBjdm14X2ZhdV9mZXRjaF9hbmRfYWRkMzIoRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFLCAwKTsKIAl9CiAKLQkvKgotCSAqIFdlIHRyeSB0byBjbGFpbSBNQVhfU0tCX1RPX0ZSRUUgYnVmZmVycy4gIElmIHRoZXJlIHdlcmUgbm90Ci0JICogdGhhdCBtYW55IGF2YWlsYWJsZSwgd2UgaGF2ZSB0byB1bi1jbGFpbSAodW5kbykgYW55IHRoYXQKLQkgKiB3ZXJlIGluIGV4Y2Vzcy4gIElmIHNrYl90b19mcmVlIGlzIHBvc2l0aXZlIHdlIHdpbGwgZnJlZQotCSAqIHRoYXQgbWFueSBidWZmZXJzLgotCSAqLwotCXVuZG8gPSBza2JfdG9fZnJlZSA+IDAgPwotCQlNQVhfU0tCX1RPX0ZSRUUgOiBza2JfdG9fZnJlZSArIE1BWF9TS0JfVE9fRlJFRTsKLQlpZiAodW5kbyA+IDApCi0JCWN2bXhfZmF1X2F0b21pY19hZGQzMihwcml2LT5mYXUrcW9zKjQsIC11bmRvKTsKLQlza2JfdG9fZnJlZSA9IC1za2JfdG9fZnJlZSA+IE1BWF9TS0JfVE9fRlJFRSA/Ci0JCU1BWF9TS0JfVE9fRlJFRSA6IC1za2JfdG9fZnJlZTsKKwlza2JfdG9fZnJlZSA9IGN2bV9vY3RfYWRqdXN0X3NrYl90b19mcmVlKHNrYl90b19mcmVlLCBwcml2LT5mYXUrcW9zKjQpOwogCiAJLyoKIAkgKiBJZiB3ZSdyZSBzZW5kaW5nIGZhc3RlciB0aGFuIHRoZSByZWNlaXZlIGNhbiBmcmVlIHRoZW0gdGhlbgogCSAqIGRvbid0IGRvIHRoZSBIVyBmcmVlLgogCSAqLwotCWlmICgoYnVmZmVyc190b19mcmVlIDwgLTEwMCkgJiYgIXBrb19jb21tYW5kLnMuZG9udGZyZWUpIHsKKwlpZiAoKGJ1ZmZlcnNfdG9fZnJlZSA8IC0xMDApICYmICFwa29fY29tbWFuZC5zLmRvbnRmcmVlKQogCQlwa29fY29tbWFuZC5zLmRvbnRmcmVlID0gMTsKLQkJcGtvX2NvbW1hbmQucy5yZWcwID0gcHJpdi0+ZmF1ICsgcW9zICogNDsKLQl9CiAKLQljdm14X3Brb19zZW5kX3BhY2tldF9wcmVwYXJlKHByaXYtPnBvcnQsIHByaXYtPnF1ZXVlICsgcW9zLAotCQkJCSAgICAgQ1ZNWF9QS09fTE9DS19DTURfUVVFVUUpOworCWlmIChwa29fY29tbWFuZC5zLmRvbnRmcmVlKSB7CisJCXF1ZXVlX3R5cGUgPSBRVUVVRV9DT1JFOworCQlwa29fY29tbWFuZC5zLnJlZzAgPSBwcml2LT5mYXUrcW9zKjQ7CisJfSBlbHNlIHsKKwkJcXVldWVfdHlwZSA9IFFVRVVFX0hXOworCX0KKwlpZiAoVVNFX0FTWU5DX0lPQkRNQSkKKwkJY3ZteF9mYXVfYXN5bmNfZmV0Y2hfYW5kX2FkZDMyKENWTVhfU0NSX1NDUkFUQ0gsIEZBVV9UT1RBTF9UWF9UT19DTEVBTiwgMSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jaywgZmxhZ3MpOwogCiAJLyogRHJvcCB0aGlzIHBhY2tldCBpZiB3ZSBoYXZlIHRvbyBtYW55IGFscmVhZHkgcXVldWVkIHRvIHRoZSBIVyAqLwotCWlmICh1bmxpa2VseQotCSAgICAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pID49IE1BWF9PVVRfUVVFVUVfREVQVEgpKSB7Ci0JCS8qCi0JCSAgIERFQlVHUFJJTlQoIiVzOiBUeCBkcm9wcGVkLiBUb28gbWFueSBxdWV1ZWRcbiIsIGRldi0+bmFtZSk7Ci0JCSAqLwotCQlkcm9wcGVkID0gMTsKLQl9Ci0JLyogU2VuZCB0aGUgcGFja2V0IHRvIHRoZSBvdXRwdXQgcXVldWUgKi8KLQllbHNlIGlmICh1bmxpa2VseQotCQkgKGN2bXhfcGtvX3NlbmRfcGFja2V0X2ZpbmlzaAotCQkgIChwcml2LT5wb3J0LCBwcml2LT5xdWV1ZSArIHFvcywgcGtvX2NvbW1hbmQsIGh3X2J1ZmZlciwKLQkJICAgQ1ZNWF9QS09fTE9DS19DTURfUVVFVUUpKSkgewotCQlERUJVR1BSSU5UKCIlczogRmFpbGVkIHRvIHNlbmQgdGhlIHBhY2tldFxuIiwgZGV2LT5uYW1lKTsKLQkJZHJvcHBlZCA9IDE7Ci0JfQotCi0JaWYgKFVTRV9BU1lOQ19JT0JETUEpIHsKLQkJLyogUmVzdG9yZSB0aGUgc2NyYXRjaCBhcmVhICovCi0JCWN2bXhfc2NyYXRjaF93cml0ZTY0KENWTVhfU0NSX1NDUkFUQ0gsIG9sZF9zY3JhdGNoKTsKLQkJY3ZteF9zY3JhdGNoX3dyaXRlNjQoQ1ZNWF9TQ1JfU0NSQVRDSCArIDgsIG9sZF9zY3JhdGNoMik7Ci0JfQotCi0JcXVldWVfaXRfdXAgPSAwOwotCWlmICh1bmxpa2VseShkcm9wcGVkKSkgewotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JfSBlbHNlIHsKLQkJaWYgKFVTRV9TS0JVRkZTX0lOX0hXKSB7Ci0JCQkvKiBQdXQgdGhpcyBwYWNrZXQgb24gdGhlIHF1ZXVlIHRvIGJlIGZyZWVkIGxhdGVyICovCi0JCQlpZiAocGtvX2NvbW1hbmQucy5kb250ZnJlZSkKLQkJCQlxdWV1ZV9pdF91cCA9IDE7Ci0JCQllbHNlCi0JCQkJY3ZteF9mYXVfYXRvbWljX2FkZDMyCi0JCQkJICAgIChGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsIC0xKTsKKwlpZiAodW5saWtlbHkoc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pID49IE1BWF9PVVRfUVVFVUVfREVQVEgpKSB7CisJCWlmIChkZXYtPnR4X3F1ZXVlX2xlbiAhPSAwKSB7CisJCQkvKiBEcm9wIHRoZSBsb2NrIHdoZW4gbm90aWZ5aW5nIHRoZSBjb3JlLiAgKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2ZyZWVfbGlzdFtxb3NdLmxvY2ssIGZsYWdzKTsKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXS5sb2NrLCBmbGFncyk7CiAJCX0gZWxzZSB7Ci0JCQkvKiBQdXQgdGhpcyBwYWNrZXQgb24gdGhlIHF1ZXVlIHRvIGJlIGZyZWVkIGxhdGVyICovCi0JCQlxdWV1ZV9pdF91cCA9IDE7CisJCQkvKiBJZiBub3QgdXNpbmcgbm9ybWFsIHF1ZXVlaW5nLiAgKi8KKwkJCXF1ZXVlX3R5cGUgPSBRVUVVRV9EUk9QOworCQkJZ290byBza2lwX3htaXQ7CiAJCX0KIAl9CiAKLQlpZiAocXVldWVfaXRfdXApIHsKLQkJc3Bpbl9sb2NrKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXS5sb2NrKTsKKwljdm14X3Brb19zZW5kX3BhY2tldF9wcmVwYXJlKHByaXYtPnBvcnQsIHByaXYtPnF1ZXVlICsgcW9zLAorCQkJCSAgICAgQ1ZNWF9QS09fTE9DS19OT05FKTsKKworCS8qIFNlbmQgdGhlIHBhY2tldCB0byB0aGUgb3V0cHV0IHF1ZXVlICovCisJaWYgKHVubGlrZWx5KGN2bXhfcGtvX3NlbmRfcGFja2V0X2ZpbmlzaChwcml2LT5wb3J0LAorCQkJCQkJIHByaXYtPnF1ZXVlICsgcW9zLAorCQkJCQkJIHBrb19jb21tYW5kLCBod19idWZmZXIsCisJCQkJCQkgQ1ZNWF9QS09fTE9DS19OT05FKSkpIHsKKwkJREVCVUdQUklOVCgiJXM6IEZhaWxlZCB0byBzZW5kIHRoZSBwYWNrZXRcbiIsIGRldi0+bmFtZSk7CisJCXF1ZXVlX3R5cGUgPSBRVUVVRV9EUk9QOworCX0KK3NraXBfeG1pdDoKKwl0b19mcmVlX2xpc3QgPSBOVUxMOworCisJc3dpdGNoIChxdWV1ZV90eXBlKSB7CisJY2FzZSBRVUVVRV9EUk9QOgorCQlza2ItPm5leHQgPSB0b19mcmVlX2xpc3Q7CisJCXRvX2ZyZWVfbGlzdCA9IHNrYjsKKwkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlicmVhazsKKwljYXNlIFFVRVVFX0hXOgorCQljdm14X2ZhdV9hdG9taWNfYWRkMzIoRkFVX05VTV9QQUNLRVRfQlVGRkVSU19UT19GUkVFLCAtMSk7CisJCWJyZWFrOworCWNhc2UgUVVFVUVfQ09SRToKIAkJX19za2JfcXVldWVfdGFpbCgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10sIHNrYik7Ci0JCWN2bV9vY3RfZnJlZV90eF9za2JzKHByaXYsIHNrYl90b19mcmVlLCBxb3MsIDApOwotCQlzcGluX3VubG9jaygmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jayk7Ci0JfSBlbHNlIHsKLQkJY3ZtX29jdF9mcmVlX3R4X3NrYnMocHJpdiwgc2tiX3RvX2ZyZWUsIHFvcywgMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOwogCX0KIAotCXJldHVybiAwOworCXdoaWxlIChza2JfdG9fZnJlZSA+IDApIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnQgPSBfX3NrYl9kZXF1ZXVlKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXSk7CisJCXQtPm5leHQgPSB0b19mcmVlX2xpc3Q7CisJCXRvX2ZyZWVfbGlzdCA9IHQ7CisJCXNrYl90b19mcmVlLS07CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jaywgZmxhZ3MpOworCisJLyogRG8gdGhlIGFjdHVhbCBmcmVlaW5nIG91dHNpZGUgb2YgdGhlIGxvY2suICovCisJd2hpbGUgKHRvX2ZyZWVfbGlzdCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqdCA9IHRvX2ZyZWVfbGlzdDsKKwkJdG9fZnJlZV9saXN0ID0gdG9fZnJlZV9saXN0LT5uZXh0OworCQlkZXZfa2ZyZWVfc2tiX2FueSh0KTsKKwl9CisKKwlpZiAoVVNFX0FTWU5DX0lPQkRNQSkgeworCQlDVk1YX1NZTkNJT0JETUE7CisJCXRvdGFsX3RvX2NsZWFuID0gY3ZteF9zY3JhdGNoX3JlYWQ2NChDVk1YX1NDUl9TQ1JBVENIKTsKKwkJLyogUmVzdG9yZSB0aGUgc2NyYXRjaCBhcmVhICovCisJCWN2bXhfc2NyYXRjaF93cml0ZTY0KENWTVhfU0NSX1NDUkFUQ0gsIG9sZF9zY3JhdGNoKTsKKwkJY3ZteF9zY3JhdGNoX3dyaXRlNjQoQ1ZNWF9TQ1JfU0NSQVRDSCArIDgsIG9sZF9zY3JhdGNoMik7CisJfSBlbHNlIHsKKwkJdG90YWxfdG9fY2xlYW4gPSBjdm14X2ZhdV9mZXRjaF9hbmRfYWRkMzIoRkFVX1RPVEFMX1RYX1RPX0NMRUFOLCAxKTsKKwl9CisKKwlpZiAodG90YWxfdG9fY2xlYW4gJiAweDNmZikgeworCQkvKgorCQkgKiBTY2hlZHVsZSB0aGUgY2xlYW51cCB0YXNrbGV0IGV2ZXJ5IDEwMjQgcGFja2V0cyBmb3IKKwkJICogdGhlIHBhdGhvbG9naWNhbCBjYXNlIG9mIGhpZ2ggdHJhZmZpYyBvbiBvbmUgcG9ydAorCQkgKiBkZWxheWluZyBjbGVhbiB1cCBvZiBwYWNrZXRzIG9uIGEgZGlmZmVyZW50IHBvcnQKKwkJICogdGhhdCBpcyBibG9ja2VkIHdhaXRpbmcgZm9yIHRoZSBjbGVhbnVwLgorCQkgKi8KKwkJdGFza2xldF9zY2hlZHVsZSgmY3ZtX29jdF90eF9jbGVhbnVwX3Rhc2tsZXQpOworCX0KKworCWN2bV9vY3Rfa2lja190eF9wb2xsX3dhdGNoZG9nKCk7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioKLSAqIFBhY2tldCB0cmFuc21pdCB0byB0aGUgUE9XCi0gKgorICogY3ZtX29jdF94bWl0X3BvdyAtIHRyYW5zbWl0IGEgcGFja2V0IHRvIHRoZSBQT1cKICAqIEBza2I6ICAgIFBhY2tldCB0byBzZW5kCiAgKiBAZGV2OiAgICBEZXZpY2UgaW5mbyBzdHJ1Y3R1cmUKKwogICogUmV0dXJucyBBbHdheXMgcmV0dXJucyB6ZXJvCiAgKi8KIGludCBjdm1fb2N0X3htaXRfcG93KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC00NTksOCArNTkxLDggQEAKIAkJd29yay0+d29yZDIucy5kZWNfaXBjb21wID0gMDsJLyogRklYTUUgKi8KICNlbmRpZgogCQl3b3JrLT53b3JkMi5zLnRjcF9vcl91ZHAgPQotCQkgICAgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUF9QUk9UT0NPTF9UQ1ApCi0JCSAgICB8fCAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQX1BST1RPQ09MX1VEUCk7CisJCSAgICAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVENQKQorCQkgICAgfHwgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCk7CiAjaWYgMAogCQkvKiBGSVhNRSAqLwogCQl3b3JrLT53b3JkMi5zLmRlY19pcHNlYyA9IDA7CkBAIC01MjksMTA2ICs2NjEsMTEgQEAKIH0KIAogLyoqCi0gKiBUcmFuc21pdCBhIHdvcmsgcXVldWUgZW50cnkgb3V0IG9mIHRoZSBldGhlcm5ldCBwb3J0LiBCb3RoCi0gKiB0aGUgd29yayBxdWV1ZSBlbnRyeSBhbmQgdGhlIHBhY2tldCBkYXRhIGNhbiBvcHRpb25hbGx5IGJlCi0gKiBmcmVlZC4gVGhlIHdvcmsgd2lsbCBiZSBmcmVlZCBvbiBlcnJvciBhcyB3ZWxsLgotICoKLSAqIEBkZXY6ICAgICBEZXZpY2UgdG8gdHJhbnNtaXQgb3V0LgotICogQHdvcmtfcXVldWVfZW50cnk6Ci0gKiAgICAgICAgICAgICAgICBXb3JrIHF1ZXVlIGVudHJ5IHRvIHNlbmQKLSAqIEBkb19mcmVlOiBUcnVlIGlmIHRoZSB3b3JrIHF1ZXVlIGVudHJ5IGFuZCBwYWNrZXQgZGF0YSBzaG91bGQgYmUKLSAqICAgICAgICAgICAgICAgIGZyZWVkLiBJZiBmYWxzZSwgbmVpdGhlciB3aWxsIGJlIGZyZWVkLgotICogQHFvczogICAgIEluZGV4IGludG8gdGhlIHF1ZXVlcyBmb3IgdGhpcyBwb3J0IHRvIHRyYW5zbWl0IG9uLiBUaGlzCi0gKiAgICAgICAgICAgICAgICBpcyB1c2VkIHRvIGltcGxlbWVudCBRb1MgaWYgdGhlaXIgYXJlIG11bHRpcGxlIHF1ZXVlcyBwZXIKLSAqICAgICAgICAgICAgICAgIHBvcnQuIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYmV0d2VlbiAwIGFuZCB0aGUgbnVtYmVyIG9mCi0gKiAgICAgICAgICAgICAgICBxdWV1ZXMgcGVyIHBvcnQgbWludXMgMS4gVmFsdWVzIG91dHNpZGUgb2YgdGhpcyByYW5nZSB3aWxsCi0gKiAgICAgICAgICAgICAgICBiZSBjaGFuZ2UgdG8gemVyby4KLSAqCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZS4KLSAqLwotaW50IGN2bV9vY3RfdHJhbnNtaXRfcW9zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKndvcmtfcXVldWVfZW50cnksCi0JCQkgaW50IGRvX2ZyZWUsIGludCBxb3MpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bmlvbiBjdm14X2J1Zl9wdHIgaHdfYnVmZmVyOwotCWN2bXhfcGtvX2NvbW1hbmRfd29yZDBfdCBwa29fY29tbWFuZDsKLQlpbnQgZHJvcHBlZDsKLQlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQljdm14X3dxZV90ICp3b3JrID0gd29ya19xdWV1ZV9lbnRyeTsKLQotCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKSB7Ci0JCURFQlVHUFJJTlQoIiVzOiBEZXZpY2Ugbm90IHVwXG4iLCBkZXYtPm5hbWUpOwotCQlpZiAoZG9fZnJlZSkKLQkJCWN2bV9vY3RfZnJlZV93b3JrKHdvcmspOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogVGhlIGNoZWNrIG9uIENWTVhfUEtPX1FVRVVFU19QRVJfUE9SVF8qIGlzIGRlc2lnbmVkIHRvIGNvbXBsZXRlbHkKLQkgICByZW1vdmUgInFvcyIgaW4gdGhlIGV2ZW50IG5laXRoZXIgaW50ZXJmYWNlIHN1cHBvcnRzCi0JICAgbXVsdGlwbGUgcXVldWVzIHBlciBwb3J0ICovCi0JaWYgKChDVk1YX1BLT19RVUVVRVNfUEVSX1BPUlRfSU5URVJGQUNFMCA+IDEpIHx8Ci0JICAgIChDVk1YX1BLT19RVUVVRVNfUEVSX1BPUlRfSU5URVJGQUNFMSA+IDEpKSB7Ci0JCWlmIChxb3MgPD0gMCkKLQkJCXFvcyA9IDA7Ci0JCWVsc2UgaWYgKHFvcyA+PSBjdm14X3Brb19nZXRfbnVtX3F1ZXVlcyhwcml2LT5wb3J0KSkKLQkJCXFvcyA9IDA7Ci0JfSBlbHNlCi0JCXFvcyA9IDA7Ci0KLQkvKiBTdGFydCBvZmYgYXNzdW1pbmcgbm8gZHJvcCAqLwotCWRyb3BwZWQgPSAwOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWN2bXhfcGtvX3NlbmRfcGFja2V0X3ByZXBhcmUocHJpdi0+cG9ydCwgcHJpdi0+cXVldWUgKyBxb3MsCi0JCQkJICAgICBDVk1YX1BLT19MT0NLX0NNRF9RVUVVRSk7Ci0KLQkvKiBCdWlsZCB0aGUgUEtPIGJ1ZmZlciBwb2ludGVyICovCi0JaHdfYnVmZmVyLnU2NCA9IDA7Ci0JaHdfYnVmZmVyLnMuYWRkciA9IHdvcmstPnBhY2tldF9wdHIucy5hZGRyOwotCWh3X2J1ZmZlci5zLnBvb2wgPSBDVk1YX0ZQQV9QQUNLRVRfUE9PTDsKLQlod19idWZmZXIucy5zaXplID0gQ1ZNWF9GUEFfUEFDS0VUX1BPT0xfU0laRTsKLQlod19idWZmZXIucy5iYWNrID0gd29yay0+cGFja2V0X3B0ci5zLmJhY2s7Ci0KLQkvKiBCdWlsZCB0aGUgUEtPIGNvbW1hbmQgKi8KLQlwa29fY29tbWFuZC51NjQgPSAwOwotCXBrb19jb21tYW5kLnMubjIgPSAxOwkvKiBEb24ndCBwb2xsdXRlIEwyIHdpdGggdGhlIG91dGdvaW5nIHBhY2tldCAqLwotCXBrb19jb21tYW5kLnMuZG9udGZyZWUgPSAhZG9fZnJlZTsKLQlwa29fY29tbWFuZC5zLnNlZ3MgPSB3b3JrLT53b3JkMi5zLmJ1ZnM7Ci0JcGtvX2NvbW1hbmQucy50b3RhbF9ieXRlcyA9IHdvcmstPmxlbjsKLQotCS8qIENoZWNrIGlmIHdlIGNhbiB1c2UgdGhlIGhhcmR3YXJlIGNoZWNrc3VtbWluZyAqLwotCWlmICh1bmxpa2VseSh3b3JrLT53b3JkMi5zLm5vdF9JUCB8fCB3b3JrLT53b3JkMi5zLklQX2V4YykpCi0JCXBrb19jb21tYW5kLnMuaXBvZmZwMSA9IDA7Ci0JZWxzZQotCQlwa29fY29tbWFuZC5zLmlwb2ZmcDEgPSBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyAxOwotCi0JLyogU2VuZCB0aGUgcGFja2V0IHRvIHRoZSBvdXRwdXQgcXVldWUgKi8KLQlpZiAodW5saWtlbHkKLQkgICAgKGN2bXhfcGtvX3NlbmRfcGFja2V0X2ZpbmlzaAotCSAgICAgKHByaXYtPnBvcnQsIHByaXYtPnF1ZXVlICsgcW9zLCBwa29fY29tbWFuZCwgaHdfYnVmZmVyLAotCSAgICAgIENWTVhfUEtPX0xPQ0tfQ01EX1FVRVVFKSkpIHsKLQkJREVCVUdQUklOVCgiJXM6IEZhaWxlZCB0byBzZW5kIHRoZSBwYWNrZXRcbiIsIGRldi0+bmFtZSk7Ci0JCWRyb3BwZWQgPSAtMTsKLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JaWYgKHVubGlrZWx5KGRyb3BwZWQpKSB7Ci0JCWlmIChkb19mcmVlKQotCQkJY3ZtX29jdF9mcmVlX3dvcmsod29yayk7Ci0JCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQl9IGVsc2UgaWYgKGRvX2ZyZWUpCi0JCWN2bXhfZnBhX2ZyZWUod29yaywgQ1ZNWF9GUEFfV1FFX1BPT0wsIERPTlRfV1JJVEVCQUNLKDEpKTsKLQotCXJldHVybiBkcm9wcGVkOwotfQotRVhQT1JUX1NZTUJPTChjdm1fb2N0X3RyYW5zbWl0X3Fvcyk7Ci0KLS8qKgotICogVGhpcyBmdW5jdGlvbiBmcmVlcyBhbGwgc2tiIHRoYXQgYXJlIGN1cnJlbnRseSBxdWV1ZWQgZm9yIFRYLgotICoKKyAqIGN2bV9vY3RfdHhfc2h1dGRvd25fZGV2IC0gZnJlZSBhbGwgc2tiIHRoYXQgYXJlIGN1cnJlbnRseSBxdWV1ZWQgZm9yIFRYLgogICogQGRldjogICAgRGV2aWNlIGJlaW5nIHNodXRkb3duCisgKgogICovCi12b2lkIGN2bV9vY3RfdHhfc2h1dGRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3ZvaWQgY3ZtX29jdF90eF9zaHV0ZG93bl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjQyLDMgKzY3OSw0NSBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXS5sb2NrLCBmbGFncyk7CiAJfQogfQorCitzdGF0aWMgdm9pZCBjdm1fb2N0X3R4X2RvX2NsZWFudXAodW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHBvcnQ7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgVE9UQUxfTlVNQkVSX09GX1BPUlRTOyBwb3J0KyspIHsKKwkJaWYgKGN2bV9vY3RfZGV2aWNlW3BvcnRdKSB7CisJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY3ZtX29jdF9kZXZpY2VbcG9ydF07CisJCQljdm1fb2N0X2ZyZWVfdHhfc2ticyhkZXYpOworCQl9CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgY3ZtX29jdF90eF9jbGVhbnVwX3dhdGNoZG9nKGludCBjcGwsIHZvaWQgKmRldl9pZCkKK3sKKwkvKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQuICAqLworCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX1RJTVgoMSksIDApOworCS8qIERvIHRoZSB3b3JrIGluIHRoZSB0YXNrbGV0LiAgKi8KKwl0YXNrbGV0X3NjaGVkdWxlKCZjdm1fb2N0X3R4X2NsZWFudXBfdGFza2xldCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCit2b2lkIGN2bV9vY3RfdHhfaW5pdGlhbGl6ZSh2b2lkKQoreworCWludCBpOworCisJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0LiAgKi8KKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9USU1YKDEpLCAwKTsKKwkvKiBSZWdpc3RlciBhbiBJUlEgaGFuZGVyIGZvciB0byByZWNlaXZlIENJVV9USU1YKDEpIGludGVycnVwdHMgKi8KKwlpID0gcmVxdWVzdF9pcnEoT0NURU9OX0lSUV9USU1FUjEsCisJCQljdm1fb2N0X3R4X2NsZWFudXBfd2F0Y2hkb2csIDAsCisJCQkiRXRoZXJuZXQiLCBjdm1fb2N0X2RldmljZSk7CisKKwlpZiAoaSkKKwkJcGFuaWMoIkNvdWxkIG5vdCBhY3F1aXJlIEV0aGVybmV0IElSUSAlZFxuIiwgT0NURU9OX0lSUV9USU1FUjEpOworfQorCit2b2lkIGN2bV9vY3RfdHhfc2h1dGRvd24odm9pZCkKK3sKKwkvKiBGcmVlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLworCWZyZWVfaXJxKE9DVEVPTl9JUlFfVElNRVIxLCBjdm1fb2N0X2RldmljZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXR4LmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXR4LmgKaW5kZXggYzBiZWJmNy4uNTQ3NjgwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC10eC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdHguaApAQCAtMjksMjkgKzI5LDYgQEAKIGludCBjdm1fb2N0X3htaXRfcG93KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IGN2bV9vY3RfdHJhbnNtaXRfcW9zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKndvcmtfcXVldWVfZW50cnksCiAJCQkgaW50IGRvX2ZyZWUsIGludCBxb3MpOwotdm9pZCBjdm1fb2N0X3R4X3NodXRkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0vKioKLSAqIEZyZWUgZGVhZCB0cmFuc21pdCBza2JzLgotICoKLSAqIEBwcml2OgkJVGhlIGRyaXZlciBkYXRhCi0gKiBAc2tiX3RvX2ZyZWU6CVRoZSBudW1iZXIgb2YgU0tCcyB0byBmcmVlIChmcmVlIG5vbmUgaWYgbmVnYXRpdmUpLgotICogQHFvczoJCVRoZSBxdWV1ZSB0byBmcmVlIGZyb20uCi0gKiBAdGFrZV9sb2NrOgkJSWYgdHJ1ZSwgYWNxdWlyZSB0aGUgc2tiIGxpc3QgbG9jay4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGN2bV9vY3RfZnJlZV90eF9za2JzKHN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYsCi0JCQkJCWludCBza2JfdG9fZnJlZSwKLQkJCQkJaW50IHFvcywgaW50IHRha2VfbG9jaykKLXsKLQkvKiBGcmVlIHNrYnVmZnMgbm90IGluIHVzZSBieSB0aGUgaGFyZHdhcmUuICAqLwotCWlmIChza2JfdG9fZnJlZSA+IDApIHsKLQkJaWYgKHRha2VfbG9jaykKLQkJCXNwaW5fbG9jaygmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10ubG9jayk7Ci0JCXdoaWxlIChza2JfdG9fZnJlZSA+IDApIHsKLQkJCWRldl9rZnJlZV9za2IoX19za2JfZGVxdWV1ZSgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pKTsKLQkJCXNrYl90b19mcmVlLS07Ci0JCX0KLQkJaWYgKHRha2VfbG9jaykKLQkJCXNwaW5fdW5sb2NrKCZwcml2LT50eF9mcmVlX2xpc3RbcW9zXS5sb2NrKTsKLQl9Ci19Cit2b2lkIGN2bV9vY3RfdHhfaW5pdGlhbGl6ZSh2b2lkKTsKK3ZvaWQgY3ZtX29jdF90eF9zaHV0ZG93bih2b2lkKTsKK3ZvaWQgY3ZtX29jdF90eF9zaHV0ZG93bl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXV0aWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdXRpbC5oCmluZGV4IDM3YjY2NTkuLjIzNDY3NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdXRpbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtdXRpbC5oCkBAIC0zMCwxMCArMzAsOSBAQAogCQkJCX0gd2hpbGUgKDApCiAKIC8qKgotICogR2l2ZW4gYSBwYWNrZXQgZGF0YSBhZGRyZXNzLCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZQotICogYmVnaW5uaW5nIG9mIHRoZSBwYWNrZXQgYnVmZmVyLgotICoKKyAqIGN2bV9vY3RfZ2V0X2J1ZmZlcl9wdHIgLSBjb252ZXJ0IHBhY2tldCBkYXRhIGFkZHJlc3MgdG8gcG9pbnRlcgogICogQHBhY2tldF9wdHI6IFBhY2tldCBkYXRhIGhhcmR3YXJlIGFkZHJlc3MKKyAqCiAgKiBSZXR1cm5zIFBhY2tldCBidWZmZXIgcG9pbnRlcgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKmN2bV9vY3RfZ2V0X2J1ZmZlcl9wdHIodW5pb24gY3ZteF9idWZfcHRyIHBhY2tldF9wdHIpCkBAIC00Myw5ICs0Miw3IEBACiB9CiAKIC8qKgotICogR2l2ZW4gYW4gSVBEL1BLTyBwb3J0IG51bWJlciwgcmV0dXJuIHRoZSBsb2dpY2FsIGludGVyZmFjZSBpdCBpcwotICogb24uCi0gKgorICogSU5URVJGQUNFIC0gY29udmVydCBJUEQgcG9ydCB0byBsb2NnaWNhbCBpbnRlcmZhY2UKICAqIEBpcGRfcG9ydDogUG9ydCB0byBjaGVjawogICoKICAqIFJldHVybnMgTG9naWNhbCBpbnRlcmZhY2UKQEAgLTY1LDkgKzYyLDcgQEAKIH0KIAogLyoqCi0gKiBHaXZlbiBhbiBJUEQvUEtPIHBvcnQgbnVtYmVyLCByZXR1cm4gdGhlIHBvcnQncyBpbmRleCBvbiBhCi0gKiBsb2dpY2FsIGludGVyZmFjZS4KLSAqCisgKiBJTkRFWCAtIGNvbnZlcnQgSVBEL1BLTyBwb3J0IG51bWJlciB0byB0aGUgcG9ydCdzIGludGVyZmFjZSBpbmRleAogICogQGlwZF9wb3J0OiBQb3J0IHRvIGNoZWNrCiAgKgogICogUmV0dXJucyBJbmRleCBpbnRvIGludGVyZmFjZSBwb3J0IGxpc3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQteGF1aS5jIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC14YXVpLmMKaW5kZXggZWUzZGM0MS4uM2ZjYTFjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC14YXVpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC14YXVpLmMKQEAgLTI2LDcgKzI2LDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogCiAjaW5jbHVkZSA8YXNtL29jdGVvbi9vY3Rlb24uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQuYwppbmRleCA0Y2ZkNGIxLi4wMmI2MzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogCiAjaW5jbHVkZSA8bmV0L2RzdC5oPgpAQCAtNDMsOCArNDIsNiBAQAogI2luY2x1ZGUgImV0aGVybmV0LXR4LmgiCiAjaW5jbHVkZSAiZXRoZXJuZXQtbWRpby5oIgogI2luY2x1ZGUgImV0aGVybmV0LXV0aWwuaCIKLSNpbmNsdWRlICJldGhlcm5ldC1wcm9jLmgiCi0KIAogI2luY2x1ZGUgImN2bXgtcGlwLmgiCiAjaW5jbHVkZSAiY3ZteC1wa28uaCIKQEAgLTEwNCwxMyArMTAxLDE1IEBACiAJIlx0XCJldGgyLHNwaTMsc3BpN1wiIHdvdWxkIGNhdXNlIHRoZXNlIHRocmVlIGRldmljZXMgdG8gdHJhbnNtaXRcbiIKIAkiXHR1c2luZyB0aGUgcG93X3NlbmRfZ3JvdXAuIik7CiAKLXN0YXRpYyBpbnQgZGlzYWJsZV9jb3JlX3F1ZXVlaW5nID0gMTsKLW1vZHVsZV9wYXJhbShkaXNhYmxlX2NvcmVfcXVldWVpbmcsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfY29yZV9xdWV1ZWluZywgIlxuIgotCSJcdFdoZW4gc2V0IHRoZSBuZXR3b3JraW5nIGNvcmUncyB0eF9xdWV1ZV9sZW4gaXMgc2V0IHRvIHplcm8uICBUaGlzXG4iCi0JIlx0YWxsb3dzIHBhY2tldHMgdG8gYmUgc2VudCB3aXRob3V0IGxvY2sgY29udGVudGlvbiBpbiB0aGUgcGFja2V0XG4iCi0JIlx0c2NoZWR1bGVyIHJlc3VsdGluZyBpbiBzb21lIGNhc2VzIGluIGltcHJvdmVkIHRocm91Z2hwdXQuXG4iKTsKK2ludCBtYXhfcnhfY3B1cyA9IC0xOworbW9kdWxlX3BhcmFtKG1heF9yeF9jcHVzLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtYXhfcnhfY3B1cywgIlxuIgorCSJcdFx0VGhlIG1heGltdW0gbnVtYmVyIG9mIENQVXMgdG8gdXNlIGZvciBwYWNrZXQgcmVjZXB0aW9uLlxuIgorCSJcdFx0VXNlIC0xIHRvIHVzZSBhbGwgYXZhaWxhYmxlIENQVXMuIik7CiAKK2ludCByeF9uYXBpX3dlaWdodCA9IDMyOworbW9kdWxlX3BhcmFtKHJ4X25hcGlfd2VpZ2h0LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhyeF9uYXBpX3dlaWdodCwgIlRoZSBOQVBJIFdFSUdIVCBwYXJhbWV0ZXIuIik7CiAKIC8qCiAgKiBUaGUgb2Zmc2V0IGZyb20gbWFjX2FkZHJfYmFzZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgbmV4dCBwb3J0CkBAIC0xMjIsOSArMTIxLDE2IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGN2bV9vY3RfbWFjX2FkZHJfb2Zmc2V0OwogCiAvKioKLSAqIFBlcmlvZGljIHRpbWVyIHRvIGNoZWNrIGF1dG8gbmVnb3RpYXRpb24KKyAqIGN2bV9vY3RfcG9sbF9xdWV1ZSAtIFdvcmtxdWV1ZSBmb3IgcG9sbGluZyBvcGVyYXRpb25zLgogICovCi1zdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgY3ZtX29jdF9wb2xsX3RpbWVyOworc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmN2bV9vY3RfcG9sbF9xdWV1ZTsKKworLyoqCisgKiBjdm1fb2N0X3BvbGxfcXVldWVfc3RvcHBpbmcgLSBmbGFnIHRvIGluZGljYXRlIHBvbGxpbmcgc2hvdWxkIHN0b3AuCisgKgorICogU2V0IHRvIG9uZSByaWdodCBiZWZvcmUgY3ZtX29jdF9wb2xsX3F1ZXVlIGlzIGRlc3Ryb3llZC4KKyAqLworYXRvbWljX3QgY3ZtX29jdF9wb2xsX3F1ZXVlX3N0b3BwaW5nID0gQVRPTUlDX0lOSVQoMCk7CiAKIC8qKgogICogQXJyYXkgb2YgZXZlcnkgZXRoZXJuZXQgZGV2aWNlIG93bmVkIGJ5IHRoaXMgZHJpdmVyIGluZGV4ZWQgYnkKQEAgLTEzMiw2NSArMTM4LDQ0IEBACiAgKi8KIHN0cnVjdCBuZXRfZGV2aWNlICpjdm1fb2N0X2RldmljZVtUT1RBTF9OVU1CRVJfT0ZfUE9SVFNdOwogCi0vKioKLSAqIFBlcmlvZGljIHRpbWVyIHRpY2sgZm9yIHNsb3cgbWFuYWdlbWVudCBvcGVyYXRpb25zCi0gKgotICogQGFyZzogICAgRGV2aWNlIHRvIGNoZWNrCi0gKi8KLXN0YXRpYyB2b2lkIGN2bV9kb190aW1lcih1bnNpZ25lZCBsb25nIGFyZykKK3U2NCBjdm1fb2N0X3R4X3BvbGxfaW50ZXJ2YWw7CisKK3N0YXRpYyB2b2lkIGN2bV9vY3RfcnhfcmVmaWxsX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKGN2bV9vY3RfcnhfcmVmaWxsX3dvcmssIGN2bV9vY3RfcnhfcmVmaWxsX3dvcmtlcik7CisKK3N0YXRpYyB2b2lkIGN2bV9vY3RfcnhfcmVmaWxsX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JaW50MzJfdCBza2JfdG9fZnJlZSwgdW5kbzsKLQlpbnQgcXVldWVzX3Blcl9wb3J0OwotCWludCBxb3M7Ci0Jc3RydWN0IG9jdGVvbl9ldGhlcm5ldCAqcHJpdjsKLQlzdGF0aWMgaW50IHBvcnQ7CisJLyoKKwkgKiBGUEEgMCBtYXkgaGF2ZSBiZWVuIGRyYWluZWQsIHRyeSB0byByZWZpbGwgaXQgaWYgd2UgbmVlZAorCSAqIG1vcmUgdGhhbiBudW1fcGFja2V0X2J1ZmZlcnMgLyAyLCBvdGhlcndpc2Ugbm9ybWFsIHJlY2VpdmUKKwkgKiBwcm9jZXNzaW5nIHdpbGwgcmVmaWxsIGl0LiAgSWYgaXQgd2VyZSBkcmFpbmVkLCBubyBwYWNrZXRzCisJICogY291bGQgYmUgcmVjZWl2ZWQgc28gY3ZtX29jdF9uYXBpX3BvbGwgd291bGQgbmV2ZXIgYmUKKwkgKiBpbnZva2VkIHRvIGRvIHRoZSByZWZpbGwuCisJICovCisJY3ZtX29jdF9yeF9yZWZpbGxfcG9vbChudW1fcGFja2V0X2J1ZmZlcnMgLyAyKTsKIAotCWlmIChwb3J0ID49IENWTVhfUElQX05VTV9JTlBVVF9QT1JUUykgewotCQkvKgotCQkgKiBBbGwgcG9ydHMgaGF2ZSBiZWVuIHBvbGxlZC4gU3RhcnQgdGhlIG5leHQKLQkJICogaXRlcmF0aW9uIHRocm91Z2ggdGhlIHBvcnRzIGluIG9uZSBzZWNvbmQuCi0JCSAqLwotCQlwb3J0ID0gMDsKLQkJbW9kX3RpbWVyKCZjdm1fb2N0X3BvbGxfdGltZXIsIGppZmZpZXMgKyBIWik7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKCFjdm1fb2N0X2RldmljZVtwb3J0XSkKLQkJZ290byBvdXQ7Ci0KLQlwcml2ID0gbmV0ZGV2X3ByaXYoY3ZtX29jdF9kZXZpY2VbcG9ydF0pOwotCWlmIChwcml2LT5wb2xsKQotCQlwcml2LT5wb2xsKGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQotCXF1ZXVlc19wZXJfcG9ydCA9IGN2bXhfcGtvX2dldF9udW1fcXVldWVzKHBvcnQpOwotCS8qIERyYWluIGFueSBwZW5kaW5nIHBhY2tldHMgaW4gdGhlIGZyZWUgbGlzdCAqLwotCWZvciAocW9zID0gMDsgcW9zIDwgcXVldWVzX3Blcl9wb3J0OyBxb3MrKykgewotCQlpZiAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pID09IDApCi0JCQljb250aW51ZTsKLQkJc2tiX3RvX2ZyZWUgPSBjdm14X2ZhdV9mZXRjaF9hbmRfYWRkMzIocHJpdi0+ZmF1ICsgcW9zICogNCwKLQkJCQkJCSAgICAgICBNQVhfU0tCX1RPX0ZSRUUpOwotCQl1bmRvID0gc2tiX3RvX2ZyZWUgPiAwID8KLQkJCU1BWF9TS0JfVE9fRlJFRSA6IHNrYl90b19mcmVlICsgTUFYX1NLQl9UT19GUkVFOwotCQlpZiAodW5kbyA+IDApCi0JCQljdm14X2ZhdV9hdG9taWNfYWRkMzIocHJpdi0+ZmF1K3Fvcyo0LCAtdW5kbyk7Ci0JCXNrYl90b19mcmVlID0gLXNrYl90b19mcmVlID4gTUFYX1NLQl9UT19GUkVFID8KLQkJCU1BWF9TS0JfVE9fRlJFRSA6IC1za2JfdG9fZnJlZTsKLQkJY3ZtX29jdF9mcmVlX3R4X3NrYnMocHJpdiwgc2tiX3RvX2ZyZWUsIHFvcywgMSk7Ci0JfQotCWN2bV9vY3RfZGV2aWNlW3BvcnRdLT5uZXRkZXZfb3BzLT5uZG9fZ2V0X3N0YXRzKGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQotb3V0OgotCXBvcnQrKzsKLQkvKiBQb2xsIHRoZSBuZXh0IHBvcnQgaW4gYSA1MHRoIG9mIGEgc2Vjb25kLgotCSAgIFRoaXMgc3ByZWFkcyB0aGUgcG9sbGluZyBvZiBwb3J0cyBvdXQgYSBsaXR0bGUgYml0ICovCi0JbW9kX3RpbWVyKCZjdm1fb2N0X3BvbGxfdGltZXIsIGppZmZpZXMgKyBIWiAvIDUwKTsKKwlpZiAoIWF0b21pY19yZWFkKCZjdm1fb2N0X3BvbGxfcXVldWVfc3RvcHBpbmcpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoY3ZtX29jdF9wb2xsX3F1ZXVlLAorCQkJCSAgICZjdm1fb2N0X3J4X3JlZmlsbF93b3JrLCBIWik7CiB9CiAKLS8qKgotICogQ29uZmlndXJlIGNvbW1vbiBoYXJkd2FyZSBmb3IgYWxsIGludGVyZmFjZXMKLSAqLworc3RhdGljIHZvaWQgY3ZtX29jdF9wZXJpb2RpY193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywKKwkJCQkJCSAgICBzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0LAorCQkJCQkJICAgIHBvcnRfcGVyaW9kaWNfd29yay53b3JrKTsKKworCWlmIChwcml2LT5wb2xsKQorCQlwcml2LT5wb2xsKGN2bV9vY3RfZGV2aWNlW3ByaXYtPnBvcnRdKTsKKworCWN2bV9vY3RfZGV2aWNlW3ByaXYtPnBvcnRdLT5uZXRkZXZfb3BzLT5uZG9fZ2V0X3N0YXRzKGN2bV9vY3RfZGV2aWNlW3ByaXYtPnBvcnRdKTsKKworCWlmICghYXRvbWljX3JlYWQoJmN2bV9vY3RfcG9sbF9xdWV1ZV9zdG9wcGluZykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhjdm1fb2N0X3BvbGxfcXVldWUsICZwcml2LT5wb3J0X3BlcmlvZGljX3dvcmssIEhaKTsKKyB9CisKIHN0YXRpYyBfX2luaXQgdm9pZCBjdm1fb2N0X2NvbmZpZ3VyZV9jb21tb25faHcodm9pZCkKIHsKLQlpbnQgcjsKIAkvKiBTZXR1cCB0aGUgRlBBICovCiAJY3ZteF9mcGFfZW5hYmxlKCk7CiAJY3ZtX29jdF9tZW1fZmlsbF9mcGEoQ1ZNWF9GUEFfUEFDS0VUX1BPT0wsIENWTVhfRlBBX1BBQ0tFVF9QT09MX1NJWkUsCkBAIC0yMDUsMjggKzE5MCwxMyBAQAogCQljdm14X2hlbHBlcl9zZXR1cF9yZWQobnVtX3BhY2tldF9idWZmZXJzIC8gNCwKIAkJCQkgICAgICBudW1fcGFja2V0X2J1ZmZlcnMgLyA4KTsKIAotCS8qIEVuYWJsZSB0aGUgTUlJIGludGVyZmFjZSAqLwotCWlmICghb2N0ZW9uX2lzX3NpbXVsYXRpb24oKSkKLQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9TTUlYX0VOKDApLCAxKTsKLQotCS8qIFJlZ2lzdGVyIGFuIElSUSBoYW5kZXIgZm9yIHRvIHJlY2VpdmUgUE9XIGludGVycnVwdHMgKi8KLQlyID0gcmVxdWVzdF9pcnEoT0NURU9OX0lSUV9XT1JLUTAgKyBwb3dfcmVjZWl2ZV9ncm91cCwKLQkJCWN2bV9vY3RfZG9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgIkV0aGVybmV0IiwKLQkJCWN2bV9vY3RfZGV2aWNlKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgMAotCWlmIChVU0VfTVVMVElDT1JFX1JFQ0VJVkUpIHsKLQkJaXJxX3NldF9hZmZpbml0eShPQ1RFT05fSVJRX1dPUktRMCArIHBvd19yZWNlaXZlX2dyb3VwLAotCQkJCSBjcHVfb25saW5lX21hc2spOwotCX0KLSNlbmRpZgogfQogCiAvKioKLSAqIEZyZWUgYSB3b3JrIHF1ZXVlIGVudHJ5IHJlY2VpdmVkIGluIGEgaW50ZXJjZXB0IGNhbGxiYWNrLgorICogY3ZtX29jdF9mcmVlX3dvcmstIEZyZWUgYSB3b3JrIHF1ZXVlIGVudHJ5CiAgKgotICogQHdvcmtfcXVldWVfZW50cnk6Ci0gKiAgICAgICAgICAgICAgIFdvcmsgcXVldWUgZW50cnkgdG8gZnJlZQorICogQHdvcmtfcXVldWVfZW50cnk6IFdvcmsgcXVldWUgZW50cnkgdG8gZnJlZQorICoKICAqIFJldHVybnMgWmVybyBvbiBzdWNjZXNzLCBOZWdhdGl2ZSBvbiBmYWlsdXJlLgogICovCiBpbnQgY3ZtX29jdF9mcmVlX3dvcmsodm9pZCAqd29ya19xdWV1ZV9lbnRyeSkKQEAgLTI1Myw5ICsyMjMsOSBAQAogRVhQT1JUX1NZTUJPTChjdm1fb2N0X2ZyZWVfd29yayk7CiAKIC8qKgotICogR2V0IHRoZSBsb3cgbGV2ZWwgZXRoZXJuZXQgc3RhdGlzdGljcwotICoKKyAqIGN2bV9vY3RfY29tbW9uX2dldF9zdGF0cyAtIGdldCB0aGUgbG93IGxldmVsIGV0aGVybmV0IHN0YXRpc3RpY3MKICAqIEBkZXY6ICAgIERldmljZSB0byBnZXQgdGhlIHN0YXRpc3RpY3MgZnJvbQorICoKICAqIFJldHVybnMgUG9pbnRlciB0byB0aGUgc3RhdGlzdGljcwogICovCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmN2bV9vY3RfY29tbW9uX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMjk5LDggKzI2OSw3IEBACiB9CiAKIC8qKgotICogQ2hhbmdlIHRoZSBsaW5rIE1UVS4gVW5pbXBsZW1lbnRlZAotICoKKyAqIGN2bV9vY3RfY29tbW9uX2NoYW5nZV9tdHUgLSBjaGFuZ2UgdGhlIGxpbmsgTVRVCiAgKiBAZGV2OiAgICAgRGV2aWNlIHRvIGNoYW5nZQogICogQG5ld19tdHU6IFRoZSBuZXcgTVRVCiAgKgpAQCAtMzY0LDggKzMzMyw3IEBACiB9CiAKIC8qKgotICogU2V0IHRoZSBtdWx0aWNhc3QgbGlzdC4gQ3VycmVudGx5IHVuaW1wbGVtZW50ZWQuCi0gKgorICogY3ZtX29jdF9jb21tb25fc2V0X211bHRpY2FzdF9saXN0IC0gc2V0IHRoZSBtdWx0aWNhc3QgbGlzdAogICogQGRldjogICAgRGV2aWNlIHRvIHdvcmsgb24KICAqLwogc3RhdGljIHZvaWQgY3ZtX29jdF9jb21tb25fc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC00MjAsMTAgKzM4OCwxMCBAQAogfQogCiAvKioKLSAqIFNldCB0aGUgaGFyZHdhcmUgTUFDIGFkZHJlc3MgZm9yIGEgZGV2aWNlCi0gKgotICogQGRldjogICAgRGV2aWNlIHRvIGNoYW5nZSB0aGUgTUFDIGFkZHJlc3MgZm9yCi0gKiBAYWRkcjogICBBZGRyZXNzIHN0cnVjdHVyZSB0byBjaGFuZ2UgaXQgdG9vLiBNQUMgYWRkcmVzcyBpcyBhZGRyICsgMi4KKyAqIGN2bV9vY3RfY29tbW9uX3NldF9tYWNfYWRkcmVzcyAtIHNldCB0aGUgaGFyZHdhcmUgTUFDIGFkZHJlc3MgZm9yIGEgZGV2aWNlCisgKiBAZGV2OiAgICBUaGUgZGV2aWNlIGluIHF1ZXN0aW9uLgorICogQGFkZHI6ICAgQWRkcmVzcyBzdHJ1Y3R1cmUgdG8gY2hhbmdlIGl0IHRvby4KKwogICogUmV0dXJucyBaZXJvIG9uIHN1Y2Nlc3MKICAqLwogc3RhdGljIGludCBjdm1fb2N0X2NvbW1vbl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKQEAgLTQ3MCw5ICs0MzgsOSBAQAogfQogCiAvKioKLSAqIFBlciBuZXR3b3JrIGRldmljZSBpbml0aWFsaXphdGlvbgotICoKKyAqIGN2bV9vY3RfY29tbW9uX2luaXQgLSBwZXIgbmV0d29yayBkZXZpY2UgaW5pdGlhbGl6YXRpb24KICAqIEBkZXY6ICAgIERldmljZSB0byBpbml0aWFsaXplCisgKgogICogUmV0dXJucyBaZXJvIG9uIHN1Y2Nlc3MKICAqLwogaW50IGN2bV9vY3RfY29tbW9uX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTUxMCw4ICs0NzgsMTEgQEAKIAkgICAgJiYgKGFsd2F5c191c2VfcG93IHx8IHN0cnN0cihwb3dfc2VuZF9saXN0LCBkZXYtPm5hbWUpKSkKIAkJcHJpdi0+cXVldWUgPSAtMTsKIAotCWlmIChwcml2LT5xdWV1ZSAhPSAtMSAmJiBVU0VfSFdfVENQVURQX0NIRUNLU1VNKQotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTsKKwlpZiAocHJpdi0+cXVldWUgIT0gLTEpIHsKKwkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHOworCQlpZiAoVVNFX0hXX1RDUFVEUF9DSEVDS1NVTSkKKwkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNOworCX0KIAogCS8qIFdlIGRvIG91ciBvd24gbG9ja2luZywgTGludXggZG9lc24ndCBuZWVkIHRvICovCiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7CkBAIC02MjUsMTIgKzU5Niw2IEBACiAKIGV4dGVybiB2b2lkIG9jdGVvbl9tZGlvYnVzX2ZvcmNlX21vZF9kZXBlbmNlbmN5KHZvaWQpOwogCi0vKioKLSAqIE1vZHVsZS8gZHJpdmVyIGluaXRpYWxpemF0aW9uLiBDcmVhdGVzIHRoZSBsaW51eCBuZXR3b3JrCi0gKiBkZXZpY2VzLgotICoKLSAqIFJldHVybnMgWmVybyBvbiBzdWNjZXNzCi0gKi8KIHN0YXRpYyBpbnQgX19pbml0IGN2bV9vY3RfaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgbnVtX2ludGVyZmFjZXM7CkBAIC02NDgsOCArNjEzLDEyIEBACiAJZWxzZQogCQljdm1fb2N0X21hY19hZGRyX29mZnNldCA9IDA7CiAKLQljdm1fb2N0X3Byb2NfaW5pdGlhbGl6ZSgpOwotCWN2bV9vY3RfcnhfaW5pdGlhbGl6ZSgpOworCWN2bV9vY3RfcG9sbF9xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJvY3Rlb24tZXRoZXJuZXQiKTsKKwlpZiAoY3ZtX29jdF9wb2xsX3F1ZXVlID09IE5VTEwpIHsKKwkJcHJfZXJyKCJvY3Rlb24tZXRoZXJuZXQ6IENhbm5vdCBjcmVhdGUgd29ya3F1ZXVlIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwogCWN2bV9vY3RfY29uZmlndXJlX2NvbW1vbl9odygpOwogCiAJY3ZteF9oZWxwZXJfaW5pdGlhbGl6ZV9wYWNrZXRfaW9fZ2xvYmFsKCk7CkBAIC02ODIsNiArNjUxLDkgQEAKIAkgKi8KIAljdm14X2ZhdV9hdG9taWNfd3JpdGUzMihGQVVfTlVNX1BBQ0tFVF9CVUZGRVJTX1RPX0ZSRUUsIDApOwogCisJLyogSW5pdGlhbGl6ZSB0aGUgRkFVIHVzZWQgZm9yIGNvdW50aW5nIHR4IFNLQnMgdGhhdCBuZWVkIHRvIGJlIGZyZWVkICovCisJY3ZteF9mYXVfYXRvbWljX3dyaXRlMzIoRkFVX1RPVEFMX1RYX1RPX0NMRUFOLCAwKTsKKwogCWlmICgocG93X3NlbmRfZ3JvdXAgIT0gLTEpKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJCXByX2luZm8oIlx0Q29uZmlndXJpbmcgZGV2aWNlIGZvciBQT1cgb25seSBhY2Nlc3NcbiIpOwpAQCAtNjg5LDcgKzY2MSw2IEBACiAJCWlmIChkZXYpIHsKIAkJCS8qIEluaXRpYWxpemUgdGhlIGRldmljZSBwcml2YXRlIHN0cnVjdHVyZS4gKi8KIAkJCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCQkJbWVtc2V0KHByaXYsIDAsIHNpemVvZihzdHJ1Y3Qgb2N0ZW9uX2V0aGVybmV0KSk7CiAKIAkJCWRldi0+bmV0ZGV2X29wcyA9ICZjdm1fb2N0X3Bvd19uZXRkZXZfb3BzOwogCQkJcHJpdi0+aW1vZGUgPSBDVk1YX0hFTFBFUl9JTlRFUkZBQ0VfTU9ERV9ESVNBQkxFRDsKQEAgLTcwMCwxOSArNjcxLDE2IEBACiAJCQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+dHhfZnJlZV9saXN0W3Fvc10pOwogCiAJCQlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikgPCAwKSB7Ci0JCQkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZXRoZXJuZXQgIgotCQkJCQkgImRldmljZSBmb3IgUE9XXG4iKTsKKwkJCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBldGhlcm5ldCBkZXZpY2UgZm9yIFBPV1xuIik7CiAJCQkJa2ZyZWUoZGV2KTsKIAkJCX0gZWxzZSB7CiAJCQkJY3ZtX29jdF9kZXZpY2VbQ1ZNWF9QSVBfTlVNX0lOUFVUX1BPUlRTXSA9IGRldjsKLQkJCQlwcl9pbmZvKCIlczogUE9XIHNlbmQgZ3JvdXAgJWQsIHJlY2VpdmUgIgotCQkJCQkiZ3JvdXAgJWRcbiIsCi0JCQkJICAgICBkZXYtPm5hbWUsIHBvd19zZW5kX2dyb3VwLAotCQkJCSAgICAgcG93X3JlY2VpdmVfZ3JvdXApOworCQkJCXByX2luZm8oIiVzOiBQT1cgc2VuZCBncm91cCAlZCwgcmVjZWl2ZSBncm91cCAlZFxuIiwKKwkJCQkJZGV2LT5uYW1lLCBwb3dfc2VuZF9ncm91cCwKKwkJCQkJcG93X3JlY2VpdmVfZ3JvdXApOwogCQkJfQogCQl9IGVsc2UgewotCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXRoZXJuZXQgZGV2aWNlICIKLQkJCQkgImZvciBQT1dcbiIpOworCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXRoZXJuZXQgZGV2aWNlIGZvciBQT1dcbiIpOwogCQl9CiAJfQogCkBAIC03MzAsMTcgKzY5OCwxNSBAQAogCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9CiAJCQkgICAgYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBvY3Rlb25fZXRoZXJuZXQpKTsKIAkJCWlmICghZGV2KSB7Ci0JCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXRoZXJuZXQgZGV2aWNlICIKLQkJCQkJICJmb3IgcG9ydCAlZFxuIiwgcG9ydCk7CisJCQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXRoZXJuZXQgZGV2aWNlIGZvciBwb3J0ICVkXG4iLCBwb3J0KTsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWlmIChkaXNhYmxlX2NvcmVfcXVldWVpbmcpCi0JCQkJZGV2LT50eF9xdWV1ZV9sZW4gPSAwOwogCiAJCQkvKiBJbml0aWFsaXplIHRoZSBkZXZpY2UgcHJpdmF0ZSBzdHJ1Y3R1cmUuICovCiAJCQlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkJCW1lbXNldChwcml2LCAwLCBzaXplb2Yoc3RydWN0IG9jdGVvbl9ldGhlcm5ldCkpOwogCisJCQlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+cG9ydF9wZXJpb2RpY193b3JrLAorCQkJCQkgIGN2bV9vY3RfcGVyaW9kaWNfd29ya2VyKTsKIAkJCXByaXYtPmltb2RlID0gaW1vZGU7CiAJCQlwcml2LT5wb3J0ID0gcG9ydDsKIAkJCXByaXYtPnF1ZXVlID0gY3ZteF9wa29fZ2V0X2Jhc2VfcXVldWUocHJpdi0+cG9ydCk7CkBAIC04MDMsNDQgKzc2OSwyNSBAQAogCQkJCWZhdSAtPQogCQkJCSAgICBjdm14X3Brb19nZXRfbnVtX3F1ZXVlcyhwcml2LT5wb3J0KSAqCiAJCQkJICAgIHNpemVvZih1aW50MzJfdCk7CisJCQkJcXVldWVfZGVsYXllZF93b3JrKGN2bV9vY3RfcG9sbF9xdWV1ZSwKKwkJCQkJCSAgICZwcml2LT5wb3J0X3BlcmlvZGljX3dvcmssIEhaKTsKIAkJCX0KIAkJfQogCX0KIAotCWlmIChJTlRFUlJVUFRfTElNSVQpIHsKLQkJLyoKLQkJICogU2V0IHRoZSBQT1cgdGltZXIgcmF0ZSB0byBnaXZlIGFuIGludGVycnVwdCBhdCBtb3N0Ci0JCSAqIElOVEVSUlVQVF9MSU1JVCB0aW1lcyBwZXIgc2Vjb25kLgotCQkgKi8KLQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9QT1dfV1FfSU5UX1BDLAotCQkJICAgICAgIG9jdGVvbl9ib290aW5mby0+ZWNsb2NrX2h6IC8gKElOVEVSUlVQVF9MSU1JVCAqCi0JCQkJCQkJICAgICAxNiAqIDI1NikgPDwgOCk7CisJY3ZtX29jdF90eF9pbml0aWFsaXplKCk7CisJY3ZtX29jdF9yeF9pbml0aWFsaXplKCk7CiAKLQkJLyoKLQkJICogRW5hYmxlIFBPVyB0aW1lciBpbnRlcnJ1cHQuIEl0IHdpbGwgY291bnQgd2hlbgotCQkgKiB0aGVyZSBhcmUgcGFja2V0cyBhdmFpbGFibGUuCi0JCSAqLwotCQljdm14X3dyaXRlX2NzcihDVk1YX1BPV19XUV9JTlRfVEhSWChwb3dfcmVjZWl2ZV9ncm91cCksCi0JCQkgICAgICAgMHgxZnVsIDw8IDI0KTsKLQl9IGVsc2UgewotCQkvKiBFbmFibGUgUE9XIGludGVycnVwdCB3aGVuIG91ciBwb3J0IGhhcyBhdCBsZWFzdCBvbmUgcGFja2V0ICovCi0JCWN2bXhfd3JpdGVfY3NyKENWTVhfUE9XX1dRX0lOVF9USFJYKHBvd19yZWNlaXZlX2dyb3VwKSwgMHgxMDAxKTsKLQl9CisJLyoKKwkgKiAxNTAgdVM6IGFib3V0IDEwIDE1MDAtYnl0ZSBwYWNrdGVzIGF0IDFHRS4KKwkgKi8KKwljdm1fb2N0X3R4X3BvbGxfaW50ZXJ2YWwgPSAxNTAgKiAob2N0ZW9uX2dldF9jbG9ja19yYXRlKCkgLyAxMDAwMDAwKTsKIAotCS8qIEVuYWJsZSB0aGUgcG9sbCB0aW1lciBmb3IgY2hlY2tpbmcgUkdNSUkgc3RhdHVzICovCi0JaW5pdF90aW1lcigmY3ZtX29jdF9wb2xsX3RpbWVyKTsKLQljdm1fb2N0X3BvbGxfdGltZXIuZGF0YSA9IDA7Ci0JY3ZtX29jdF9wb2xsX3RpbWVyLmZ1bmN0aW9uID0gY3ZtX2RvX3RpbWVyOwotCW1vZF90aW1lcigmY3ZtX29jdF9wb2xsX3RpbWVyLCBqaWZmaWVzICsgSFopOworCXF1ZXVlX2RlbGF5ZWRfd29yayhjdm1fb2N0X3BvbGxfcXVldWUsICZjdm1fb2N0X3J4X3JlZmlsbF93b3JrLCBIWik7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBNb2R1bGUgLyBkcml2ZXIgc2h1dGRvd24KLSAqCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcwotICovCiBzdGF0aWMgdm9pZCBfX2V4aXQgY3ZtX29jdF9jbGVhbnVwX21vZHVsZSh2b2lkKQogewogCWludCBwb3J0OwpAQCAtODUzLDIyICs4MDAsMzEgQEAKIAkvKiBGcmVlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCWZyZWVfaXJxKE9DVEVPTl9JUlFfV09SS1EwICsgcG93X3JlY2VpdmVfZ3JvdXAsIGN2bV9vY3RfZGV2aWNlKTsKIAotCWRlbF90aW1lcigmY3ZtX29jdF9wb2xsX3RpbWVyKTsKKwlhdG9taWNfaW5jX3JldHVybigmY3ZtX29jdF9wb2xsX3F1ZXVlX3N0b3BwaW5nKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmN2bV9vY3RfcnhfcmVmaWxsX3dvcmspOworCiAJY3ZtX29jdF9yeF9zaHV0ZG93bigpOworCWN2bV9vY3RfdHhfc2h1dGRvd24oKTsKKwogCWN2bXhfcGtvX2Rpc2FibGUoKTsKIAogCS8qIEZyZWUgdGhlIGV0aGVybmV0IGRldmljZXMgKi8KIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgVE9UQUxfTlVNQkVSX09GX1BPUlRTOyBwb3J0KyspIHsKIAkJaWYgKGN2bV9vY3RfZGV2aWNlW3BvcnRdKSB7Ci0JCQljdm1fb2N0X3R4X3NodXRkb3duKGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQkJCXVucmVnaXN0ZXJfbmV0ZGV2KGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKLQkJCWtmcmVlKGN2bV9vY3RfZGV2aWNlW3BvcnRdKTsKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjdm1fb2N0X2RldmljZVtwb3J0XTsKKwkJCXN0cnVjdCBvY3Rlb25fZXRoZXJuZXQgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCQkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5wb3J0X3BlcmlvZGljX3dvcmspOworCisJCQljdm1fb2N0X3R4X3NodXRkb3duX2RldihkZXYpOworCQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwkJCWtmcmVlKGRldik7CiAJCQljdm1fb2N0X2RldmljZVtwb3J0XSA9IE5VTEw7CiAJCX0KIAl9CiAKKwlkZXN0cm95X3dvcmtxdWV1ZShjdm1fb2N0X3BvbGxfcXVldWUpOworCiAJY3ZteF9wa29fc2h1dGRvd24oKTsKLQljdm1fb2N0X3Byb2Nfc2h1dGRvd24oKTsKIAogCWN2bXhfaXBkX2ZyZWVfcHRyKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vb2N0ZW9uLWV0aGVybmV0LmggYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL29jdGVvbi1ldGhlcm5ldC5oCmluZGV4IDQwMmExNWIuLmQ1ODE5MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vb2N0ZW9uLWV0aGVybmV0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9vY3Rlb24tZXRoZXJuZXQuaApAQCAtNCw3ICs0LDcgQEAKICAqIENvbnRhY3Q6IHN1cHBvcnRAY2F2aXVtbmV0d29ya3MuY29tCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT0NURU9OIFNESwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IENhdml1bSBOZXR3b3JrcworICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTAgQ2F2aXVtIE5ldHdvcmtzCiAgKgogICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgYXMKQEAgLTU3LDU4ICs1NywxMiBAQAogCXVpbnQ2NF90IGxpbmtfaW5mbzsKIAkvKiBDYWxsZWQgcGVyaW9kaWNhbGx5IHRvIGNoZWNrIGxpbmsgc3RhdHVzICovCiAJdm9pZCAoKnBvbGwpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCXBvcnRfcGVyaW9kaWNfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcG9ydF93b3JrOwkvKiBtYXkgYmUgdW51c2VkLiAqLwogfTsKIAotLyoqCi0gKiBGcmVlIGEgd29yayBxdWV1ZSBlbnRyeSByZWNlaXZlZCBpbiBhIGludGVyY2VwdCBjYWxsYmFjay4KLSAqCi0gKiBAd29ya19xdWV1ZV9lbnRyeToKLSAqICAgICAgICAgICAgICAgV29yayBxdWV1ZSBlbnRyeSB0byBmcmVlCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcywgTmVnYXRpdmUgb24gZmFpbHVyZS4KLSAqLwogaW50IGN2bV9vY3RfZnJlZV93b3JrKHZvaWQgKndvcmtfcXVldWVfZW50cnkpOwogCi0vKioKLSAqIFRyYW5zbWl0IGEgd29yayBxdWV1ZSBlbnRyeSBvdXQgb2YgdGhlIGV0aGVybmV0IHBvcnQuIEJvdGgKLSAqIHRoZSB3b3JrIHF1ZXVlIGVudHJ5IGFuZCB0aGUgcGFja2V0IGRhdGEgY2FuIG9wdGlvbmFsbHkgYmUKLSAqIGZyZWVkLiBUaGUgd29yayB3aWxsIGJlIGZyZWVkIG9uIGVycm9yIGFzIHdlbGwuCi0gKgotICogQGRldjogICAgIERldmljZSB0byB0cmFuc21pdCBvdXQuCi0gKiBAd29ya19xdWV1ZV9lbnRyeToKLSAqICAgICAgICAgICAgICAgIFdvcmsgcXVldWUgZW50cnkgdG8gc2VuZAotICogQGRvX2ZyZWU6IFRydWUgaWYgdGhlIHdvcmsgcXVldWUgZW50cnkgYW5kIHBhY2tldCBkYXRhIHNob3VsZCBiZQotICogICAgICAgICAgICAgICAgZnJlZWQuIElmIGZhbHNlLCBuZWl0aGVyIHdpbGwgYmUgZnJlZWQuCi0gKiBAcW9zOiAgICAgSW5kZXggaW50byB0aGUgcXVldWVzIGZvciB0aGlzIHBvcnQgdG8gdHJhbnNtaXQgb24uIFRoaXMKLSAqICAgICAgICAgICAgICAgIGlzIHVzZWQgdG8gaW1wbGVtZW50IFFvUyBpZiB0aGVpciBhcmUgbXVsdGlwbGUgcXVldWVzIHBlcgotICogICAgICAgICAgICAgICAgcG9ydC4gVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIHRoZSBudW1iZXIgb2YKLSAqICAgICAgICAgICAgICAgIHF1ZXVlcyBwZXIgcG9ydCBtaW51cyAxLiBWYWx1ZXMgb3V0c2lkZSBvZiB0aGlzIHJhbmdlIHdpbGwKLSAqICAgICAgICAgICAgICAgIGJlIGNoYW5nZSB0byB6ZXJvLgotICoKLSAqIFJldHVybnMgWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlLgotICovCi1pbnQgY3ZtX29jdF90cmFuc21pdF9xb3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqd29ya19xdWV1ZV9lbnRyeSwKLQkJCSBpbnQgZG9fZnJlZSwgaW50IHFvcyk7Ci0KLS8qKgotICogVHJhbnNtaXQgYSB3b3JrIHF1ZXVlIGVudHJ5IG91dCBvZiB0aGUgZXRoZXJuZXQgcG9ydC4gQm90aAotICogdGhlIHdvcmsgcXVldWUgZW50cnkgYW5kIHRoZSBwYWNrZXQgZGF0YSBjYW4gb3B0aW9uYWxseSBiZQotICogZnJlZWQuIFRoZSB3b3JrIHdpbGwgYmUgZnJlZWQgb24gZXJyb3IgYXMgd2VsbC4gVGhpcyBzaW1wbHkKLSAqIHdyYXBzIGN2bXhfb2N0X3RyYW5zbWl0X3FvcygpIGZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eS4KLSAqCi0gKiBAZGV2OiAgICAgRGV2aWNlIHRvIHRyYW5zbWl0IG91dC4KLSAqIEB3b3JrX3F1ZXVlX2VudHJ5OgotICogICAgICAgICAgICAgICAgV29yayBxdWV1ZSBlbnRyeSB0byBzZW5kCi0gKiBAZG9fZnJlZTogVHJ1ZSBpZiB0aGUgd29yayBxdWV1ZSBlbnRyeSBhbmQgcGFja2V0IGRhdGEgc2hvdWxkIGJlCi0gKiAgICAgICAgICAgICAgICBmcmVlZC4gSWYgZmFsc2UsIG5laXRoZXIgd2lsbCBiZSBmcmVlZC4KLSAqCi0gKiBSZXR1cm5zIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgY3ZtX29jdF90cmFuc21pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHZvaWQgKndvcmtfcXVldWVfZW50cnksIGludCBkb19mcmVlKQotewotCXJldHVybiBjdm1fb2N0X3RyYW5zbWl0X3FvcyhkZXYsIHdvcmtfcXVldWVfZW50cnksIGRvX2ZyZWUsIDApOwotfQotCiBleHRlcm4gaW50IGN2bV9vY3RfcmdtaWlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGN2bV9vY3RfcmdtaWlfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBjdm1fb2N0X3JnbWlpX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMzQsNSArODgsMTEgQEAKIGV4dGVybiBpbnQgcG93X3JlY2VpdmVfZ3JvdXA7CiBleHRlcm4gY2hhciBwb3dfc2VuZF9saXN0W107CiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmN2bV9vY3RfZGV2aWNlW107CitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmN2bV9vY3RfcG9sbF9xdWV1ZTsKK2V4dGVybiBhdG9taWNfdCBjdm1fb2N0X3BvbGxfcXVldWVfc3RvcHBpbmc7CitleHRlcm4gdTY0IGN2bV9vY3RfdHhfcG9sbF9pbnRlcnZhbDsKKworZXh0ZXJuIGludCBtYXhfcnhfY3B1czsKK2V4dGVybiBpbnQgcnhfbmFwaV93ZWlnaHQ7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5jIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5jCmluZGV4IDEzM2I4NmMuLjJmZmYwYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmMKQEAgLTUsNyArNSw3IEBACiAgKiBBdXRob3I6IEJveW9kIGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuaAppbmRleCAzOGQwYzMzLi4wMmI0ZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5oCkBAIC01LDcgKzUsNyBAQAogICogQXV0aG9yOiBHZSBXYW5nLCBnZXdhbmdAc2lsaWNvbm1vdGlvbi5jb20KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpqQGxlbW90ZS5jb20KKyAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCiAgKgogICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYwppbmRleCAxNjFkYmM5Li5hNGY2ZjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCkBAIC02LDcgKzYsNyBAQAogICogCSAgICBCb3lvZCBib3lvZC55YW5nQHNpbGljb25tb3Rpb24uY29tLmNuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6akBsZW1vdGUuY29tCisgKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQogICoKICAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmggYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmgKaW5kZXggN2YyYzM0MS4uN2VlNTY1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuaApAQCAtNiw3ICs2LDcgQEAKICAqCSAJQm95b2QgYm95b2QueWFuZ0BzaWxpY29ubW90aW9uLmNvbS5jbgogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1empAbGVtb3RlLmNvbQorICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KICAqCiAgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKaW5kZXggNjBhNDVmMS4uZjJmMDU1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCkBAIC0xMDIyLDYgKzEwMjIsMTQgQEAKIAkJZ290byBkb25lOwogCX0KIAorCS8qIE5vbi1yb290IGRldmljZXMgb24gYSBmdWxsL2xvdy1zcGVlZCBidXMgbXVzdCB3YWl0IGZvciB0aGVpcgorCSAqIGNvbXBhbmlvbiBoaWdoLXNwZWVkIHJvb3QgaHViLCBpbiBjYXNlIGEgaGFuZG9mZiBpcyBuZWVkZWQuCisJICovCisJaWYgKCEobXNnLmV2ZW50ICYgUE1fRVZFTlRfQVVUTykgJiYgdWRldi0+cGFyZW50ICYmCisJCQl1ZGV2LT5idXMtPmhzX2NvbXBhbmlvbikKKwkJZGV2aWNlX3BtX3dhaXRfZm9yX2RldigmdWRldi0+ZGV2LAorCQkJCSZ1ZGV2LT5idXMtPmhzX2NvbXBhbmlvbi0+cm9vdF9odWItPmRldik7CisKIAlpZiAodWRldi0+cXVpcmtzICYgVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSkKIAkJdWRldi0+cmVzZXRfcmVzdW1lID0gMTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jIGIvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCmluZGV4IGZkZmFhNzguLmQyNmI5ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKQEAgLTE4Niw2ICsxODYsNyBAQAogCWVwX2Rldi0+ZGV2LnBhcmVudCA9IHBhcmVudDsKIAllcF9kZXYtPmRldi5yZWxlYXNlID0gZXBfZGV2aWNlX3JlbGVhc2U7CiAJZGV2X3NldF9uYW1lKCZlcF9kZXYtPmRldiwgImVwXyUwMngiLCBlbmRwb2ludC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJmVwX2Rldi0+ZGV2KTsKIAogCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcigmZXBfZGV2LT5kZXYpOwogCWlmIChyZXR2YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCmluZGV4IDJkY2Y5MDYuLjE1Mjg2NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC0zNyw2ICszOCwxMjIgQEAKIAogLyogUENJLWJhc2VkIEhDcyBhcmUgY29tbW9uLCBidXQgcGxlbnR5IG9mIG5vbi1QQ0kgSENzIGFyZSB1c2VkIHRvbyAqLwogCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCisKKy8qIENvb3JkaW5hdGUgaGFuZG9mZnMgYmV0d2VlbiBFSENJIGFuZCBjb21wYW5pb24gY29udHJvbGxlcnMKKyAqIGR1cmluZyBzeXN0ZW0gcmVzdW1lCisgKi8KKworc3RhdGljIERFRklORV9NVVRFWChjb21wYW5pb25zX211dGV4KTsKKworI2RlZmluZSBDTF9VSENJCQlQQ0lfQ0xBU1NfU0VSSUFMX1VTQl9VSENJCisjZGVmaW5lIENMX09IQ0kJCVBDSV9DTEFTU19TRVJJQUxfVVNCX09IQ0kKKyNkZWZpbmUgQ0xfRUhDSQkJUENJX0NMQVNTX1NFUklBTF9VU0JfRUhDSQorCitlbnVtIGNvbXBhbmlvbl9hY3Rpb24geworCVNFVF9IU19DT01QQU5JT04sIENMRUFSX0hTX0NPTVBBTklPTiwgV0FJVF9GT1JfQ09NUEFOSU9OUworfTsKKworc3RhdGljIHZvaWQgY29tcGFuaW9uX2NvbW1vbihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJZW51bSBjb21wYW5pb25fYWN0aW9uIGFjdGlvbikKK3sKKwlzdHJ1Y3QgcGNpX2RldgkJKmNvbXBhbmlvbjsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmNvbXBhbmlvbl9oY2Q7CisJdW5zaWduZWQgaW50CQlzbG90ID0gUENJX1NMT1QocGRldi0+ZGV2Zm4pOworCisJLyogSXRlcmF0ZSB0aHJvdWdoIG90aGVyIFBDSSBmdW5jdGlvbnMgaW4gdGhlIHNhbWUgc2xvdC4KKwkgKiBJZiBwZGV2IGlzIE9IQ0kgb3IgVUhDSSB0aGVuIHdlIGFyZSBsb29raW5nIGZvciBFSENJLCBhbmQKKwkgKiB2aWNlIHZlcnNhLgorCSAqLworCWNvbXBhbmlvbiA9IE5VTEw7CisJZm9yICg7OykgeworCQljb21wYW5pb24gPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBjb21wYW5pb24pOworCQlpZiAoIWNvbXBhbmlvbikKKwkJCWJyZWFrOworCQlpZiAoY29tcGFuaW9uLT5idXMgIT0gcGRldi0+YnVzIHx8CisJCQkJUENJX1NMT1QoY29tcGFuaW9uLT5kZXZmbikgIT0gc2xvdCkKKwkJCWNvbnRpbnVlOworCisJCWNvbXBhbmlvbl9oY2QgPSBwY2lfZ2V0X2RydmRhdGEoY29tcGFuaW9uKTsKKwkJaWYgKCFjb21wYW5pb25faGNkKQorCQkJY29udGludWU7CisKKwkJLyogRm9yIFNFVF9IU19DT01QQU5JT04sIHN0b3JlIGEgcG9pbnRlciB0byB0aGUgRUhDSSBidXMgaW4KKwkJICogdGhlIE9IQ0kvVUhDSSBjb21wYW5pb24gYnVzIHN0cnVjdHVyZS4KKwkJICogRm9yIENMRUFSX0hTX0NPTVBBTklPTiwgY2xlYXIgdGhlIHBvaW50ZXIgdG8gdGhlIEVIQ0kgYnVzCisJCSAqIGluIHRoZSBPSENJL1VIQ0kgY29tcGFuaW9uIGJ1cyBzdHJ1Y3R1cmUuCisJCSAqIEZvciBXQUlUX0ZPUl9DT01QQU5JT05TLCB3YWl0IHVudGlsIHRoZSBPSENJL1VIQ0kKKwkJICogY29tcGFuaW9uIGNvbnRyb2xsZXJzIGhhdmUgZnVsbHkgcmVzdW1lZC4KKwkJICovCisKKwkJaWYgKChwZGV2LT5jbGFzcyA9PSBDTF9PSENJIHx8IHBkZXYtPmNsYXNzID09IENMX1VIQ0kpICYmCisJCQkJY29tcGFuaW9uLT5jbGFzcyA9PSBDTF9FSENJKSB7CisJCQkvKiBhY3Rpb24gbXVzdCBiZSBTRVRfSFNfQ09NUEFOSU9OICovCisJCQlkZXZfZGJnKCZjb21wYW5pb24tPmRldiwgIkhTIGNvbXBhbmlvbiBmb3IgJXNcbiIsCisJCQkJCWRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwkJCWhjZC0+c2VsZi5oc19jb21wYW5pb24gPSAmY29tcGFuaW9uX2hjZC0+c2VsZjsKKworCQl9IGVsc2UgaWYgKHBkZXYtPmNsYXNzID09IENMX0VIQ0kgJiYKKwkJCQkoY29tcGFuaW9uLT5jbGFzcyA9PSBDTF9PSENJIHx8CisJCQkJY29tcGFuaW9uLT5jbGFzcyA9PSBDTF9VSENJKSkgeworCQkJc3dpdGNoIChhY3Rpb24pIHsKKwkJCWNhc2UgU0VUX0hTX0NPTVBBTklPTjoKKwkJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJIUyBjb21wYW5pb24gZm9yICVzXG4iLAorCQkJCQkJZGV2X25hbWUoJmNvbXBhbmlvbi0+ZGV2KSk7CisJCQkJY29tcGFuaW9uX2hjZC0+c2VsZi5oc19jb21wYW5pb24gPSAmaGNkLT5zZWxmOworCQkJCWJyZWFrOworCQkJY2FzZSBDTEVBUl9IU19DT01QQU5JT046CisJCQkJY29tcGFuaW9uX2hjZC0+c2VsZi5oc19jb21wYW5pb24gPSBOVUxMOworCQkJCWJyZWFrOworCQkJY2FzZSBXQUlUX0ZPUl9DT01QQU5JT05TOgorCQkJCWRldmljZV9wbV93YWl0X2Zvcl9kZXYoJnBkZXYtPmRldiwKKwkJCQkJCSZjb21wYW5pb24tPmRldik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF9oc19jb21wYW5pb24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJbXV0ZXhfbG9jaygmY29tcGFuaW9uc19tdXRleCk7CisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGhjZCk7CisJY29tcGFuaW9uX2NvbW1vbihwZGV2LCBoY2QsIFNFVF9IU19DT01QQU5JT04pOworCW11dGV4X3VubG9jaygmY29tcGFuaW9uc19tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX2hzX2NvbXBhbmlvbihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwltdXRleF9sb2NrKCZjb21wYW5pb25zX211dGV4KTsKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisKKwkvKiBJZiBwZGV2IGlzIE9IQ0kgb3IgVUhDSSwganVzdCBjbGVhciBpdHMgaHNfY29tcGFuaW9uIHBvaW50ZXIgKi8KKwlpZiAocGRldi0+Y2xhc3MgPT0gQ0xfT0hDSSB8fCBwZGV2LT5jbGFzcyA9PSBDTF9VSENJKQorCQloY2QtPnNlbGYuaHNfY29tcGFuaW9uID0gTlVMTDsKKworCS8qIE90aGVyd2lzZSBzZWFyY2ggZm9yIGNvbXBhbmlvbiBidXNlcyBhbmQgY2xlYXIgdGhlaXIgcG9pbnRlcnMgKi8KKwllbHNlCisJCWNvbXBhbmlvbl9jb21tb24ocGRldiwgaGNkLCBDTEVBUl9IU19DT01QQU5JT04pOworCW11dGV4X3VubG9jaygmY29tcGFuaW9uc19tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfZm9yX2NvbXBhbmlvbnMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJLyogT25seSBFSENJIGNvbnRyb2xsZXJzIG5lZWQgdG8gd2FpdC4KKwkgKiBObyBsb2NraW5nIGlzIG5lZWRlZCBiZWNhdXNlIGEgY29udHJvbGxlciBjYW5ub3QgYmUgcmVzdW1lZAorCSAqIHdoaWxlIG9uZSBvZiBpdHMgY29tcGFuaW9ucyBpcyBnZXR0aW5nIHVuYm91bmQuCisJICovCisJaWYgKHBkZXYtPmNsYXNzID09IENMX0VIQ0kpCisJCWNvbXBhbmlvbl9jb21tb24ocGRldiwgaGNkLCBXQUlUX0ZPUl9DT01QQU5JT05TKTsKK30KKworI2Vsc2UgLyogIUNPTkZJR19QTV9TTEVFUCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2hzX2NvbXBhbmlvbihzdHJ1Y3QgcGNpX2RldiAqZCwgc3RydWN0IHVzYl9oY2QgKmgpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfaHNfY29tcGFuaW9uKHN0cnVjdCBwY2lfZGV2ICpkLCBzdHJ1Y3QgdXNiX2hjZCAqaCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X2Zvcl9jb21wYW5pb25zKHN0cnVjdCBwY2lfZGV2ICpkLCBzdHJ1Y3QgdXNiX2hjZCAqaCkge30KKworI2VuZGlmIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTIzLDcgKzI0MCw3IEBACiAJCWlmIChyZWdpb24gPT0gUENJX1JPTV9SRVNPVVJDRSkgewogCQkJZGV2X2RiZygmZGV2LT5kZXYsICJubyBpL28gcmVnaW9ucyBhdmFpbGFibGVcbiIpOwogCQkJcmV0dmFsID0gLUVCVVNZOwotCQkJZ290byBlcnIxOworCQkJZ290byBlcnIyOwogCQl9CiAJfQogCkBAIC0xMzIsNiArMjQ5LDcgQEAKIAlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGRldi0+aXJxLCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQpOwogCWlmIChyZXR2YWwgIT0gMCkKIAkJZ290byBlcnI0OworCXNldF9oc19jb21wYW5pb24oZGV2LCBoY2QpOwogCXJldHVybiByZXR2YWw7CiAKICBlcnI0OgpAQCAtMTQyLDYgKzI2MCw3IEBACiAJfSBlbHNlCiAJCXJlbGVhc2VfcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CiAgZXJyMjoKKwljbGVhcl9oc19jb21wYW5pb24oZGV2LCBoY2QpOwogCXVzYl9wdXRfaGNkKGhjZCk7CiAgZXJyMToKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKQEAgLTE4MCw2ICsyOTksNyBAQAogCX0gZWxzZSB7CiAJCXJlbGVhc2VfcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CiAJfQorCWNsZWFyX2hzX2NvbXBhbmlvbihkZXYsIGhjZCk7CiAJdXNiX3B1dF9oY2QoaGNkKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKIH0KQEAgLTM0NCw2ICs0NjQsMTEgQEAKIAljbGVhcl9iaXQoSENEX0ZMQUdfU0FXX0lSUSwgJmhjZC0+ZmxhZ3MpOwogCiAJaWYgKGhjZC0+ZHJpdmVyLT5wY2lfcmVzdW1lKSB7CisJCS8qIFRoaXMgY2FsbCBzaG91bGQgYmUgbWFkZSBvbmx5IGR1cmluZyBzeXN0ZW0gcmVzdW1lLAorCQkgKiBub3QgZHVyaW5nIHJ1bnRpbWUgcmVzdW1lLgorCQkgKi8KKwkJd2FpdF9mb3JfY29tcGFuaW9ucyhwY2lfZGV2LCBoY2QpOworCiAJCXJldHZhbCA9IGhjZC0+ZHJpdmVyLT5wY2lfcmVzdW1lKGhjZCwgaGliZXJuYXRlZCk7CiAJCWlmIChyZXR2YWwpIHsKIAkJCWRldl9lcnIoZGV2LCAiUENJIHBvc3QtcmVzdW1lIGVycm9yICVkIVxuIiwgcmV0dmFsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IDM1Y2M4YjkuLjIwZWNiNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtMTgxNyw2ICsxODE3LDcgQEAKIAkvKiBUZWxsIHRoZSB3b3JsZCEgKi8KIAlhbm5vdW5jZV9kZXZpY2UodWRldik7CiAKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJnVkZXYtPmRldik7CiAJLyogUmVnaXN0ZXIgdGhlIGRldmljZS4gIFRoZSBkZXZpY2UgZHJpdmVyIGlzIHJlc3BvbnNpYmxlCiAJICogZm9yIGNvbmZpZ3VyaW5nIHRoZSBkZXZpY2UgYW5kIGludm9raW5nIHRoZSBhZGQtZGV2aWNlCiAJICogbm90aWZpZXIgY2hhaW4gKHVzZWQgYnkgdXNiZnMgYW5kIHBvc3NpYmx5IG90aGVycykuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCmluZGV4IDliYzk1ZmUuLmRmNzM1NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCkBAIC0xODY3LDYgKzE4NjcsNyBAQAogCQkJImFkZGluZyAlcyAoY29uZmlnICMlZCwgaW50ZXJmYWNlICVkKVxuIiwKIAkJCWRldl9uYW1lKCZpbnRmLT5kZXYpLCBjb25maWd1cmF0aW9uLAogCQkJaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisJCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmaW50Zi0+ZGV2KTsKIAkJcmV0ID0gZGV2aWNlX2FkZCgmaW50Zi0+ZGV2KTsKIAkJaWYgKHJldCAhPSAwKSB7CiAJCQlkZXZfZXJyKCZkZXYtPmRldiwgImRldmljZV9hZGQoJXMpIC0tPiAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2F1ZGlvLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jCmluZGV4IGRmNzdmNjEuLmYxZTNhYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2F1ZGlvLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYwpAQCAtNjAsNyArNjAsNyBAQAogI2RlZmluZSBVQUNfRFRfVE9UQUxfTEVOR1RIIChVQUNfRFRfQUNfSEVBREVSX0xFTkdUSCArIFVBQ19EVF9JTlBVVF9URVJNSU5BTF9TSVpFIFwKIAkrIFVBQ19EVF9PVVRQVVRfVEVSTUlOQUxfU0laRSArIFVBQ19EVF9GRUFUVVJFX1VOSVRfU0laRSgwKSkKIC8qIEIuMy4yICBDbGFzcy1TcGVjaWZpYyBBQyBJbnRlcmZhY2UgRGVzY3JpcHRvciAqLwotc3RhdGljIHN0cnVjdCB1YWNfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfMiBhY19oZWFkZXJfZGVzYyA9IHsKK3N0YXRpYyBzdHJ1Y3QgdWFjX2FjX2hlYWRlcl9kZXNjcmlwdG9yX3YxXzIgYWNfaGVhZGVyX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVUFDX0RUX0FDX0hFQURFUl9MRU5HVEgsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3VidHlwZSA9CVVBQ19IRUFERVIsCkBAIC0xMjQsNyArMTI0LDcgQEAKIH07CiAKICNkZWZpbmUgT1VUUFVUX1RFUk1JTkFMX0lECTMKLXN0YXRpYyBzdHJ1Y3QgdWFjX291dHB1dF90ZXJtaW5hbF9kZXNjcmlwdG9yIG91dHB1dF90ZXJtaW5hbF9kZXNjID0geworc3RhdGljIHN0cnVjdCB1YWNfb3V0cHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3JfdjEgb3V0cHV0X3Rlcm1pbmFsX2Rlc2MgPSB7CiAJLmJMZW5ndGgJCT0gVUFDX0RUX09VVFBVVF9URVJNSU5BTF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YnR5cGUJPSBVQUNfT1VUUFVUX1RFUk1JTkFMLApAQCAtMTU0LDcgKzE1NCw3IEBACiB9OwogCiAvKiBCLjQuMiAgQ2xhc3MtU3BlY2lmaWMgQVMgSW50ZXJmYWNlIERlc2NyaXB0b3IgKi8KLXN0YXRpYyBzdHJ1Y3QgdWFjX2FzX2hlYWRlcl9kZXNjcmlwdG9yIGFzX2hlYWRlcl9kZXNjID0geworc3RhdGljIHN0cnVjdCB1YWNfYXNfaGVhZGVyX2Rlc2NyaXB0b3JfdjEgYXNfaGVhZGVyX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVUFDX0RUX0FTX0hFQURFUl9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlVQUNfQVNfR0VORVJBTCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKaW5kZXggZDBiMWU4My4uNWY2YTJlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKQEAgLTIzNyw3ICsyMzcsNyBAQAogfTsKIAogLyogQi4zLjIgIENsYXNzLVNwZWNpZmljIEFDIEludGVyZmFjZSBEZXNjcmlwdG9yICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvcl8xIGFjX2hlYWRlcl9kZXNjID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1YWNfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfdjFfMSBhY19oZWFkZXJfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlVQUNfRFRfQUNfSEVBREVSX1NJWkUoMSksCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3VidHlwZSA9CVVTQl9NU19IRUFERVIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKaW5kZXggZTVlNmRmMy4uYWFkYzE2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYwpAQCAtMTM0LDE0ICsxMzQsMTQgQEAKIAkJaWYgKHVzLT5mZmxhZ3MgJiBVU19GTF9NQVhfU0VDVE9SU19NSU4pCiAJCQltYXhfc2VjdG9ycyA9IFBBR0VfQ0FDSEVfU0laRSA+PiA5OwogCQlpZiAocXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSkgPiBtYXhfc2VjdG9ycykKLQkJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLAorCQkJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsCiAJCQkJCSAgICAgIG1heF9zZWN0b3JzKTsKIAl9IGVsc2UgaWYgKHNkZXYtPnR5cGUgPT0gVFlQRV9UQVBFKSB7CiAJCS8qIFRhcGVzIG5lZWQgbXVjaCBoaWdoZXIgbWF4X3NlY3RvciBsaW1pdHMsIHNvIGp1c3QKIAkJICogcmFpc2UgaXQgdG8gdGhlIG1heGltdW0gcG9zc2libGUgKDQgR0IgLyA1MTIpIGFuZAogCQkgKiBsZXQgdGhlIHF1ZXVlIHNlZ21lbnQgc2l6ZSBzb3J0IG91dCB0aGUgcmVhbCBsaW1pdC4KIAkJICovCi0JCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCAweDdGRkZGRik7CisJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCAweDdGRkZGRik7CiAJfQogCiAJLyogU29tZSBVU0IgaG9zdCBjb250cm9sbGVycyBjYW4ndCBkbyBETUE7IHRoZXkgaGF2ZSB0byB1c2UgUElPLgpAQCAtNDk1LDcgKzQ5NSw3IEBACiAJdW5zaWduZWQgc2hvcnQgbXM7CiAKIAlpZiAoc3NjYW5mKGJ1ZiwgIiVodSIsICZtcykgPiAwICYmIG1zIDw9IFNDU0lfREVGQVVMVF9NQVhfU0VDVE9SUykgewotCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgbXMpOworCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgbXMpOwogCQlyZXR1cm4gc3RybGVuKGJ1Zik7CiAJfQogCXJldHVybiAtRUlOVkFMOwkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCmluZGV4IGU5Zjk5NTQuLmJiZWViOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwpAQCAtNzgsNyArNzgsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJVU0IgTWFzcyBTdG9yYWdlIGRyaXZlciBmb3IgTGludXgiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBkZWxheV91c2UgPSA1Oworc3RhdGljIHVuc2lnbmVkIGludCBkZWxheV91c2UgPSAxOwogbW9kdWxlX3BhcmFtKGRlbGF5X3VzZSwgdWludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhkZWxheV91c2UsICJzZWNvbmRzIHRvIGRlbGF5IGJlZm9yZSB1c2luZyBhIG5ldyBkZXZpY2UiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKaW5kZXggZTRlNGQ0My4uOWVlNjdkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCkBAIC0xOTMxLDIyICsxOTMxLDIyIEBACiAJCQkgKiBQb3dlck1hYzIsMiBzdW1tZXIgMjAwMCBpTWFjcwogCQkJICogUG93ZXJNYWM0LDEgamFudWFyeSAyMDAxIGlNYWNzICJmbG93ZXIgcG93ZXIiCiAJCQkgKi8KLQkJCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwxIikgfHwKLQkJCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwyIikgfHwKLQkJCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCwxIikpCisJCQlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzIsMSIpIHx8CisJCQkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzIsMiIpIHx8CisJCQkgICAgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzQsMSIpKQogCQkJCWRlZmF1bHRfdm1vZGUgPSBWTU9ERV8xMDI0Xzc2OF83NTsKIAogCQkJLyogaUJvb2sgU0UgKi8KLQkJCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMiIpKQorCQkJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMiwyIikpCiAJCQkJZGVmYXVsdF92bW9kZSA9IFZNT0RFXzgwMF82MDBfNjA7CiAKIAkJCS8qIFBvd2VyQm9vayBGaXJld2lyZSAoUGlzbW8pLCBpQm9vayBEdWFsIFVTQiAqLwotCQkJaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywxIikgfHwKLQkJCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMSIpKQorCQkJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywxIikgfHwKKwkJCSAgICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMSIpKQogCQkJCWRlZmF1bHRfdm1vZGUgPSBWTU9ERV8xMDI0Xzc2OF82MDsKIAogCQkJLyogUG93ZXJCb29rIFRpdGFuaXVtICovCi0JCQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDIiKSkKKwkJCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMiIpKQogCQkJCWRlZmF1bHRfdm1vZGUgPSBWTU9ERV8xMTUyXzc2OF82MDsKIAkKIAkJCWlmIChkZWZhdWx0X2Ntb2RlID4gMTYpIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCmluZGV4IDFkZGViNGMuLmU0NWFiOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKQEAgLTI0MzksNyArMjQzOSw3IEBACiAJICogVGhlIEFwcGxlIGlCb29rMSB1c2VzIG5vbi1zdGFuZGFyZCBtZW1vcnkgZnJlcXVlbmNpZXMuCiAJICogV2UgZGV0ZWN0IGl0IGFuZCBzZXQgdGhlIGZyZXF1ZW5jeSBtYW51YWxseS4KIAkgKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2syLDEiKSkgeworCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKSB7CiAJCXBhci0+cGxsX2xpbWl0cy5tY2xrID0gNzA7CiAJCXBhci0+cGxsX2xpbWl0cy54Y2xrID0gNTM7CiAJfQpAQCAtMjY1OSw3ICsyNjU5LDcgQEAKIAkJICAgICAgRkJJTkZPX0hXQUNDRUxfWVBBTjsKIAogI2lmZGVmIENPTkZJR19QTUFDX0JBQ0tMSUdIVAotCWlmIChNNjRfSEFTKEczX1BCXzFfMSkgJiYgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkgeworCWlmIChNNjRfSEFTKEczX1BCXzFfMSkgJiYgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkgewogCQkvKgogCQkgKiB0aGVzZSBiaXRzIGxldCB0aGUgMTAxIHBvd2VyYm9vawogCQkgKiB3YWtlIHVwIGZyb20gc2xlZXAgLS0gcGF1bHVzCkBAIC0yNjkwLDkgKzI2OTAsOSBAQAogCQkJCWlmIChNNjRfSEFTKEczX1BCXzEwMjR4NzY4KSkKIAkJCQkJLyogRzMgUG93ZXJCb29rIHdpdGggMTAyNHg3NjggTENEICovCiAJCQkJCWRlZmF1bHRfdm1vZGUgPSBWTU9ERV8xMDI0Xzc2OF82MDsKLQkJCQllbHNlIGlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoImlNYWMiKSkKKwkJCQllbHNlIGlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoImlNYWMiKSkKIAkJCQkJZGVmYXVsdF92bW9kZSA9IFZNT0RFXzEwMjRfNzY4Xzc1OwotCQkJCWVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMiwxIikpCisJCQkJZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2syLDEiKSkKIAkJCQkJLyogaUJvb2sgd2l0aCA4MDB4NjAwIExDRCAqLwogCQkJCQlkZWZhdWx0X3Ztb2RlID0gVk1PREVfODAwXzYwMF82MDsKIAkJCQllbHNlCkBAIC0zMTA0LDcgKzMxMDQsNyBAQAogCX0KIAogCWRwID0gcGNpX2RldmljZV90b19PRl9ub2RlKHBkZXYpOwotCWlmIChub2RlID09IGRwLT5ub2RlKSB7CisJaWYgKG5vZGUgPT0gZHAtPnBoYW5kbGUpIHsKIAkJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmZGVmYXVsdF92YXI7CiAJCXVuc2lnbmVkIGludCBOLCBQLCBRLCBNLCBULCBSOwogCQl1MzIgdl90b3RhbCwgaF90b3RhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYWNrbGlnaHQuYwppbmRleCAxYTA1NmFkLi5mYTExOThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jCkBAIC0xNzUsOSArMTc1LDkgQEAKIAogI2lmZGVmIENPTkZJR19QTUFDX0JBQ0tMSUdIVAogCXBkYXRhLT5uZWdhdGl2ZSA9IHBkYXRhLT5uZWdhdGl2ZSB8fAotCQltYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazQsMyIpIHx8Ci0JCW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNiwzIikgfHwKLQkJbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s2LDUiKTsKKwkJb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDMiKSB8fAorCQlvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazYsMyIpIHx8CisJCW9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNiw1Iik7CiAjZW5kaWYKIAogCXJpbmZvLT5pbmZvLT5ibF9kZXYgPSBiZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZnNsLWRpdS1mYi5jIGIvZHJpdmVycy92aWRlby9mc2wtZGl1LWZiLmMKaW5kZXggNzJkNjhiMy4uNDYzN2JjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mc2wtZGl1LWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9mc2wtZGl1LWZiLmMKQEAgLTE2MzMsNiArMTYzMywxMSBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzbF9kaXVfbWF0Y2hbXSA9IHsKKyNpZmRlZiBDT05GSUdfUFBDX01QQzUxMngKKwl7CisJCS5jb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWRpdSIsCisJfSwKKyNlbmRpZgogCXsKIAkJLmNvbXBhdGlibGUgPSAiZnNsLGRpdSIsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWFjZmIuYyBiL2RyaXZlcnMvdmlkZW8vbWFjZmIuYwppbmRleCBkNjY4ODdlLi40MzIwN2NjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9tYWNmYi5jCkBAIC0xLDI5ICsxLDMzIEBACi0vKiBtYWNmYi5jOiBHZW5lcmljIGZyYW1lYnVmZmVyIGZvciBNYWNzIHdob3NlIGNvbG91cm1hcHMvbW9kZXMgd2UKLSAgIGRvbid0IGtub3cgaG93IHRvIHNldCAqLwotCi0vKiAoYykgMTk5OSBEYXZpZCBIdWdnaW5zLURhaW5lcyA8ZGhkQGRlYmlhbi5vcmc+Ci0KLSAgIFByaW1hcmlseSBiYXNlZCBvbiB2ZXNhZmIuYywgYnkgR2VyZCBLbm9ycgotICAgKGMpIDE5OTggR2VyZCBLbm9yciA8a3JheGVsQGNzLnR1LWJlcmxpbi5kZT4KLQotICAgQWxzbyB1c2VzIGluZm9ybWF0aW9uIGFuZCBjb2RlIGZyb206Ci0gICAKLSAgIFRoZSBvcmlnaW5hbCBtYWNmYi5jIGZyb20gTGludXgvbWFjNjhrIDIuMCwgYnkgQWxhbiBDb3gsIEp1ZXJnZW4KLSAgIE1lbGxpbmdlciwgTWlrYWVsIEZvcnNlbGl1cywgTWljaGFlbCBTY2htaXR6LCBhbmQgb3RoZXJzLgotCi0gICB2YWxreXJpZWZiLmMsIGJ5IE1hcnRpbiBDb3N0YWJlbCwgS2V2aW4gU2Nob2VkZWwsIEJhcnJ5IE5hdGhhbiwgRGFuCi0gICBKYWNvYm93aXR6LCBQYXVsIE1hY2tlcnJhcywgRmFiaW8gUmljY2FyZGksIGFuZCBHZWVydCBVeXR0ZXJob2V2ZW4uCi0gICAKLSAgIFRoaXMgY29kZSBpcyBmcmVlIHNvZnR3YXJlLiAgWW91IG1heSBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlCi0gICBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlLCB2ZXJzaW9uIDIsIG9yIGFueSBsYXRlciB2ZXJzaW9uLCBhdCB5b3VyIGNvbnZlbmllbmNlLiAqLworLyoKKyAqIG1hY2ZiLmM6IEdlbmVyaWMgZnJhbWVidWZmZXIgZm9yIE1hY3Mgd2hvc2UgY29sb3VybWFwcy9tb2RlcyB3ZQorICogZG9uJ3Qga25vdyBob3cgdG8gc2V0LgorICoKKyAqIChjKSAxOTk5IERhdmlkIEh1Z2dpbnMtRGFpbmVzIDxkaGRAZGViaWFuLm9yZz4KKyAqCisgKiBQcmltYXJpbHkgYmFzZWQgb24gdmVzYWZiLmMsIGJ5IEdlcmQgS25vcnIKKyAqIChjKSAxOTk4IEdlcmQgS25vcnIgPGtyYXhlbEBjcy50dS1iZXJsaW4uZGU+CisgKgorICogQWxzbyB1c2VzIGluZm9ybWF0aW9uIGFuZCBjb2RlIGZyb206CisgKgorICogVGhlIG9yaWdpbmFsIG1hY2ZiLmMgZnJvbSBMaW51eC9tYWM2OGsgMi4wLCBieSBBbGFuIENveCwgSnVlcmdlbgorICogTWVsbGluZ2VyLCBNaWthZWwgRm9yc2VsaXVzLCBNaWNoYWVsIFNjaG1pdHosIGFuZCBvdGhlcnMuCisgKgorICogdmFsa3lyaWVmYi5jLCBieSBNYXJ0aW4gQ29zdGFiZWwsIEtldmluIFNjaG9lZGVsLCBCYXJyeSBOYXRoYW4sIERhbgorICogSmFjb2Jvd2l0eiwgUGF1bCBNYWNrZXJyYXMsIEZhYmlvIFJpY2NhcmRpLCBhbmQgR2VlcnQgVXl0dGVyaG9ldmVuLgorICoKKyAqIFRoZSBWaWRlb1Rvb2xib3ggIkJ1Z3MiIHdlYiBwYWdlIGF0CisgKiBodHRwOi8vcmFqc2t5LnBzeWNoLm55dS5lZHUvVGlwcy9WaWRlb0J1Z3MuaHRtbAorICoKKyAqIFRoaXMgY29kZSBpcyBmcmVlIHNvZnR3YXJlLiAgWW91IG1heSBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlCisgKiBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLCB2ZXJzaW9uIDIsIG9yIGFueSBsYXRlciB2ZXJzaW9uLCBhdCB5b3VyIGNvbnZlbmllbmNlLgorICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbnVidXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0zMSw5ICszNSw2IEBACiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNpbnRvc2guaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIApAQCAtNDQsNyArNDUsNyBAQAogI2RlZmluZSBEQUZCX0JBU0UgMHhmOTgwMDIwMAogCiAvKiBBZGRyZXNzIGZvciB0aGUgYnVpbHQtaW4gQ2l2aWMgZnJhbWVidWZmZXIgaW4gUXVhZHJhIEFWcyAqLwotI2RlZmluZSBDSVZJQ19CQVNFIDB4NTBmMzA4MDAJLyogT25seSB0ZXN0ZWQgb24gNjYwQVYhICovCisjZGVmaW5lIENJVklDX0JBU0UgMHg1MGYzMDgwMAogCiAvKiBHU0MgKEdyYXkgU2NhbGUgQ29udHJvbGxlcikgYmFzZSBhZGRyZXNzICovCiAjZGVmaW5lIEdTQ19CQVNFIDB4NTBGMjAwMDAKQEAgLTUyLDM3ICs1Myw5IEBACiAvKiBDU0MgKENvbG9yIFNjcmVlbiBDb250cm9sbGVyKSBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgQ1NDX0JBU0UgMHg1MEYyMDAwMAogCi1zdGF0aWMgaW50ICgqbWFjZmJfc2V0cGFsZXR0ZSkgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCQl1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJCXN0cnVjdCBmYl9pbmZvICppbmZvKSA9IE5VTEw7Ci1zdGF0aWMgaW50IHZhbGt5cmllX3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCQl1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJCXN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyBpbnQgZGFmYl9zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkgICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgICBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7Ci1zdGF0aWMgaW50IHJidl9zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJICAgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwotc3RhdGljIGludCBtZGNfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgIHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKTsKLXN0YXRpYyBpbnQgdG9ieV9zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkgICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgICBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7Ci1zdGF0aWMgaW50IGNpdmljX3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCSAgICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgICAgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwotc3RhdGljIGludCBjc2Nfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgIHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKTsKLQotc3RhdGljIHN0cnVjdCB7Ci0JdW5zaWduZWQgY2hhciBhZGRyOwotCS8qIE5vdGU6IHdvcmQtYWxpZ25lZCAqLwotCWNoYXIgcGFkWzNdOwotCXVuc2lnbmVkIGNoYXIgbHV0OwotfSBfX2lvbWVtICp2YWxreXJpZV9jbWFwX3JlZ3M7CitzdGF0aWMgaW50ICgqbWFjZmJfc2V0cGFsZXR0ZSkodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCisJCQkgICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwogCiBzdGF0aWMgc3RydWN0IHsKIAl1bnNpZ25lZCBjaGFyIGFkZHI7CkBAIC0xMTYsMTUgKzg5LDE1IEBACiB9IF9faW9tZW0gKmNpdmljX2NtYXBfcmVnczsKIAogc3RhdGljIHN0cnVjdCB7Ci0JY2hhciAgICBwYWQxWzB4NDBdOwotICAgICAgICB1bnNpZ25lZCBjaGFyCWNsdXRfd2FkZHI7CS8qIDB4NDAgKi8KLSAgICAgICAgY2hhciAgICBwYWQyOwotICAgICAgICB1bnNpZ25lZCBjaGFyCWNsdXRfZGF0YTsJLyogMHg0MiAqLwotICAgICAgICBjaGFyCXBhZDNbMHgzXTsKLSAgICAgICAgdW5zaWduZWQgY2hhcgljbHV0X3JhZGRyOwkvKiAweDQ2ICovCisJY2hhciBwYWQxWzB4NDBdOworCXVuc2lnbmVkIGNoYXIgY2x1dF93YWRkcjsJLyogMHg0MCAqLworCWNoYXIgcGFkMjsKKwl1bnNpZ25lZCBjaGFyIGNsdXRfZGF0YTsJLyogMHg0MiAqLworCWNoYXIgcGFkM1sweDNdOworCXVuc2lnbmVkIGNoYXIgY2x1dF9yYWRkcjsJLyogMHg0NiAqLwogfSBfX2lvbWVtICpjc2NfY21hcF9yZWdzOwogCi0vKiBXZSB3aWxsIGxlYXZlIHRoZXNlIHRoZSB3YXkgdGhleSBhcmUgZm9yIHRoZSB0aW1lIGJlaW5nICovCisvKiBUaGUgcmVnaXN0ZXJzIGluIHRoZXNlIHN0cnVjdHMgYXJlIGluIE51QnVzIHNsb3Qgc3BhY2UgKi8KIHN0cnVjdCBtZGNfY21hcF9yZWdzIHsKIAljaGFyIHBhZDFbMHgyMDAyMDBdOwogCXVuc2lnbmVkIGNoYXIgYWRkcjsKQEAgLTE0NSwxMyArMTE4LDEwIEBACiAJdW5zaWduZWQgY2hhciBsdXQ7CiB9OwogCi0jZGVmaW5lIFBJWEVMX1RPX01NKGEpCSgoKGEpKjEwKS8yOCkJLyogd2lkdGggaW4gbW0gYXQgNzIgZHBpICovCQotCi0vKiBtb2RlICovCi1zdGF0aWMgaW50ICB2aWRlb19zbG90ID0gMDsKKyNkZWZpbmUgUElYRUxfVE9fTU0oYSkJKCgoYSkqMTApLzI4KQkvKiB3aWR0aCBpbiBtbSBhdCA3MiBkcGkgKi8KIAogc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBtYWNmYl9kZWZpbmVkID0gewotCS5iaXRzX3Blcl9waXhlbAk9IDgsCQorCS5iaXRzX3Blcl9waXhlbAk9IDgsCiAJLmFjdGl2YXRlCT0gRkJfQUNUSVZBVEVfTk9XLAogCS53aWR0aAkJPSAtMSwKIAkuaGVpZ2h0CQk9IC0xLApAQCAtMTY3LDE4MSArMTM3LDE1MiBAQAogCS5hY2NlbAk9IEZCX0FDQ0VMX05PTkUsCiB9OwogCitzdGF0aWMgdm9pZCAqc2xvdF9hZGRyOwogc3RhdGljIHN0cnVjdCBmYl9pbmZvIGZiX2luZm87CiBzdGF0aWMgdTMyIHBzZXVkb19wYWxldHRlWzE2XTsKLXN0YXRpYyBpbnQgaW52ZXJzZSAgID0gMDsKLXN0YXRpYyBpbnQgdmlkdGVzdCAgID0gMDsKK3N0YXRpYyBpbnQgaW52ZXJzZTsKK3N0YXRpYyBpbnQgdmlkdGVzdDsKIAotc3RhdGljIGludCB2YWxreXJpZV9zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkJdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKKy8qCisgKiBVbmxpa2UgdGhlIFZhbGt5cmllLCB0aGUgREFGQiBjYW5ub3Qgc2V0IGluZGl2aWR1YWwgY29sb3JtYXAKKyAqIHJlZ2lzdGVycy4gIFRoZXJlZm9yZSwgd2UgZG8gd2hhdCB0aGUgTWFjT1MgZHJpdmVyIGRvZXMgKG5vCisgKiBraWRkaW5nISkgYW5kIHNpbXBseSBzZXQgdGhlbSBvbmUgYnkgb25lIHVudGlsIHdlIGhpdCB0aGUgb25lIHdlCisgKiB3YW50LgorICovCitzdGF0aWMgaW50IGRhZmJfc2V0cGFsZXR0ZSh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCisJCQkgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAorCQkJICAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQkKLQlyZWQgPj49IDg7Ci0JZ3JlZW4gPj49IDg7Ci0JYmx1ZSA+Pj0gODsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkKLQkvKiB0ZWxsIGNsdXQgd2hpY2ggYWRkcmVzcyB0byBmaWxsICovCi0JbnVidXNfd3JpdGViKHJlZ25vLCAmdmFsa3lyaWVfY21hcF9yZWdzLT5hZGRyKTsKLQlub3AoKTsKLQotCS8qIHNlbmQgb25lIGNvbG9yIGNoYW5uZWwgYXQgYSB0aW1lICovCi0JbnVidXNfd3JpdGViKHJlZCwgJnZhbGt5cmllX2NtYXBfcmVncy0+bHV0KTsKLQlub3AoKTsKLQludWJ1c193cml0ZWIoZ3JlZW4sICZ2YWxreXJpZV9jbWFwX3JlZ3MtPmx1dCk7Ci0Jbm9wKCk7Ci0JbnVidXNfd3JpdGViKGJsdWUsICZ2YWxreXJpZV9jbWFwX3JlZ3MtPmx1dCk7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFVubGlrZSB0aGUgVmFsa3lyaWUsIHRoZSBEQUZCIGNhbm5vdCBzZXQgaW5kaXZpZHVhbCBjb2xvcm1hcAotICAgcmVnaXN0ZXJzLiAgVGhlcmVmb3JlLCB3ZSBkbyB3aGF0IHRoZSBNYWNPUyBkcml2ZXIgZG9lcyAobm8KLSAgIGtpZGRpbmchKSBhbmQgc2ltcGx5IHNldCB0aGVtIG9uZSBieSBvbmUgdW50aWwgd2UgaGl0IHRoZSBvbmUgd2UKLSAgIHdhbnQuICovCi1zdGF0aWMgaW50IGRhZmJfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJICAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0JLyogRklYTUU6IHJlYWxseSwgcmVhbGx5IG5lZWQgdG8gdXNlIGlvcmVtYXAoKSBoZXJlLAotICAgICAgICAgICBwaHlzX3RvX3ZpcnQoKSBkb2Vzbid0IHdvcmsgYW55bW9yZSAqLwogCXN0YXRpYyBpbnQgbGFzdHJlZyA9IC0xOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCi0JcmVkID4+PSA4OwotCWdyZWVuID4+PSA4OwotCWJsdWUgPj49IDg7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCi0JLyogZmJkZXYgd2lsbCBzZXQgYW4gZW50aXJlIGNvbG91cm1hcCwgYnV0IFggd29uJ3QuICBIb3BlZnVsbHkKLQkgICB0aGlzIHNob3VsZCBhY2NvbW1vZGF0ZSBib3RoIG9mIHRoZW0gKi8KLQlpZiAocmVnbm8gIT0gbGFzdHJlZysxKSB7CisKKwkvKgorCSAqIGZiZGV2IHdpbGwgc2V0IGFuIGVudGlyZSBjb2xvdXJtYXAsIGJ1dCBYIHdvbid0LiAgSG9wZWZ1bGx5CisJICogdGhpcyBzaG91bGQgYWNjb21tb2RhdGUgYm90aCBvZiB0aGVtCisJICovCisJaWYgKHJlZ25vICE9IGxhc3RyZWcgKyAxKSB7CiAJCWludCBpOwotCQkKKwogCQkvKiBTdGFiIGluIHRoZSBkYXJrIHRyeWluZyB0byByZXNldCB0aGUgQ0xVVCBwb2ludGVyICovCiAJCW51YnVzX3dyaXRlbCgwLCAmZGFmYl9jbWFwX3JlZ3MtPnJlc2V0KTsKIAkJbm9wKCk7Ci0JCQorCiAJCS8qIExvb3AgdW50aWwgd2UgZ2V0IHRvIHRoZSByZWdpc3RlciB3ZSB3YW50ICovCiAJCWZvciAoaSA9IDA7IGkgPCByZWdubzsgaSsrKSB7Ci0JCQludWJ1c193cml0ZWIoaW5mby0+Y21hcC5yZWRbaV0gPj4gOCwgJmRhZmJfY21hcF9yZWdzLT5sdXQpOworCQkJbnVidXNfd3JpdGViKGluZm8tPmNtYXAucmVkW2ldID4+IDgsCisJCQkJICAgICAmZGFmYl9jbWFwX3JlZ3MtPmx1dCk7CiAJCQlub3AoKTsKLQkJCW51YnVzX3dyaXRlYihpbmZvLT5jbWFwLmdyZWVuW2ldID4+IDgsICZkYWZiX2NtYXBfcmVncy0+bHV0KTsKKwkJCW51YnVzX3dyaXRlYihpbmZvLT5jbWFwLmdyZWVuW2ldID4+IDgsCisJCQkJICAgICAmZGFmYl9jbWFwX3JlZ3MtPmx1dCk7CiAJCQlub3AoKTsKLQkJCW51YnVzX3dyaXRlYihpbmZvLT5jbWFwLmJsdWVbaV0gPj4gOCwgJmRhZmJfY21hcF9yZWdzLT5sdXQpOworCQkJbnVidXNfd3JpdGViKGluZm8tPmNtYXAuYmx1ZVtpXSA+PiA4LAorCQkJCSAgICAgJmRhZmJfY21hcF9yZWdzLT5sdXQpOwogCQkJbm9wKCk7CiAJCX0KIAl9Ci0JCQorCiAJbnVidXNfd3JpdGViKHJlZCwgJmRhZmJfY21hcF9yZWdzLT5sdXQpOwogCW5vcCgpOwogCW51YnVzX3dyaXRlYihncmVlbiwgJmRhZmJfY21hcF9yZWdzLT5sdXQpOwogCW5vcCgpOwogCW51YnVzX3dyaXRlYihibHVlLCAmZGFmYl9jbWFwX3JlZ3MtPmx1dCk7Ci0JCisKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJbGFzdHJlZyA9IHJlZ25vOwogCXJldHVybiAwOwogfQogCiAvKiBWOCBhbmQgQnJhemlsIHNlZW0gdG8gdXNlIHRoZSBzYW1lIERBQy4gIFNvbm9yYSBkb2VzIGFzIHdlbGwuICovCi1zdGF0aWMgaW50IHY4X2JyYXppbF9zZXRwYWxldHRlICh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCi0JCQkJIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkJIHN0cnVjdCBmYl9pbmZvICppbmZvKQkKK3N0YXRpYyBpbnQgdjhfYnJhemlsX3NldHBhbGV0dGUodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAorCQkJCXVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCisJCQkJc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJdW5zaWduZWQgaW50IGJwcCA9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbDsKLQl1bnNpZ25lZCBjaGFyIF9yZWQgID1yZWQ+Pjg7Ci0JdW5zaWduZWQgY2hhciBfZ3JlZW49Z3JlZW4+Pjg7Ci0JdW5zaWduZWQgY2hhciBfYmx1ZSA9Ymx1ZT4+ODsKLQl1bnNpZ25lZCBjaGFyIF9yZWdubzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGJwcCA+IDgpIHJldHVybiAxOyAvKiBmYWlsc2FmZSAqLworCWlmIChicHAgPiA4KQorCQlyZXR1cm4gMTsgLyogZmFpbHNhZmUgKi8KIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAogCS8qIE9uIHRoZXNlIGNoaXBzLCB0aGUgQ0xVVCByZWdpc3RlciBudW1iZXJzIGFyZSBzcHJlYWQgb3V0Ci0JICAgYWNyb3NzIHRoZSByZWdpc3RlciBzcGFjZS4gIFRodXM6Ci0KLQkgICBJbiA4YnBwLCBhbGwgcmVnbm9zIGFyZSB2YWxpZC4KLQkgICAKLQkgICBJbiA0YnBwLCB0aGUgcmVnbm9zIGFyZSAweDBmLCAweDFmLCAweDJmLCBldGMsIGV0YwotCSAgIAotCSAgIEluIDJicHAsIHRoZSByZWdub3MgYXJlIDB4M2YsIDB4N2YsIDB4YmYsIDB4ZmYgKi8KLSAgCV9yZWdubyA9IChyZWdubyA8PCAoOCAtIGJwcCkpIHwgKDB4RkYgPj4gYnBwKTsKLQludWJ1c193cml0ZWIoX3JlZ25vLCAmdjhfYnJhemlsX2NtYXBfcmVncy0+YWRkcik7IG5vcCgpOworCSAqIGFjcm9zcyB0aGUgcmVnaXN0ZXIgc3BhY2UuICBUaHVzOgorCSAqIEluIDhicHAsIGFsbCByZWdub3MgYXJlIHZhbGlkLgorCSAqIEluIDRicHAsIHRoZSByZWdub3MgYXJlIDB4MGYsIDB4MWYsIDB4MmYsIGV0YywgZXRjCisJICogSW4gMmJwcCwgdGhlIHJlZ25vcyBhcmUgMHgzZiwgMHg3ZiwgMHhiZiwgMHhmZgorCSAqLworCXJlZ25vID0gKHJlZ25vIDw8ICg4IC0gYnBwKSkgfCAoMHhGRiA+PiBicHApOworCW51YnVzX3dyaXRlYihyZWdubywgJnY4X2JyYXppbF9jbWFwX3JlZ3MtPmFkZHIpOworCW5vcCgpOwogCiAJLyogc2VuZCBvbmUgY29sb3IgY2hhbm5lbCBhdCBhIHRpbWUgKi8KLQludWJ1c193cml0ZWIoX3JlZCwgJnY4X2JyYXppbF9jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCW51YnVzX3dyaXRlYihfZ3JlZW4sICZ2OF9icmF6aWxfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQludWJ1c193cml0ZWIoX2JsdWUsICZ2OF9icmF6aWxfY21hcF9yZWdzLT5sdXQpOworCW51YnVzX3dyaXRlYihyZWQsICZ2OF9icmF6aWxfY21hcF9yZWdzLT5sdXQpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihncmVlbiwgJnY4X2JyYXppbF9jbWFwX3JlZ3MtPmx1dCk7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKGJsdWUsICZ2OF9icmF6aWxfY21hcF9yZWdzLT5sdXQpOwogCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmJ2X3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCSAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKKy8qIFJBTS1CYXNlZCBWaWRlbyAqLworc3RhdGljIGludCByYnZfc2V0cGFsZXR0ZSh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCisJCQkgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCisJCQkgIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCS8qIHVzZSBNU0JzICovCi0JdW5zaWduZWQgY2hhciBfcmVkICA9cmVkPj44OwotCXVuc2lnbmVkIGNoYXIgX2dyZWVuPWdyZWVuPj44OwotCXVuc2lnbmVkIGNoYXIgX2JsdWUgPWJsdWU+Pjg7Ci0JdW5zaWduZWQgY2hhciBfcmVnbm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPiA4KSByZXR1cm4gMTsgLyogZmFpbHNhZmUgKi8KKwlpZiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID4gOCkKKwkJcmV0dXJuIDE7IC8qIGZhaWxzYWZlICovCiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCisKIAkvKiBGcm9tIHRoZSBWaWRlb1Rvb2xib3ggZHJpdmVyLiAgU2VlbXMgdG8gYmUgc2F5aW5nIHRoYXQKIAkgKiByZWdubyAjMjU0IGFuZCAjMjU1IGFyZSB0aGUgaW1wb3J0YW50IG9uZXMgZm9yIDEtYml0IGNvbG9yLAogCSAqIHJlZ25vICMyNTItMjU1IGFyZSB0aGUgaW1wb3J0YW50IG9uZXMgZm9yIDItYml0IGNvbG9yLCBldGMuCiAJICovCi0JX3JlZ25vID0gcmVnbm8gKyAoMjU2LSgxIDw8IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkpOworCXJlZ25vICs9IDI1NiAtICgxIDw8IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCk7CiAKIAkvKiByZXNldCBjbHV0PyAoVmlkZW9Ub29sYm94IHNleiAibm90IG5lY2Vzc2FyeSIpICovCi0JbnVidXNfd3JpdGViKDB4RkYsICZyYnZfY21hcF9yZWdzLT5jbnRsKTsgbm9wKCk7Ci0JCisJbnVidXNfd3JpdGViKDB4RkYsICZyYnZfY21hcF9yZWdzLT5jbnRsKTsKKwlub3AoKTsKKwogCS8qIHRlbGwgY2x1dCB3aGljaCBhZGRyZXNzIHRvIHVzZS4gKi8KLQludWJ1c193cml0ZWIoX3JlZ25vLCAmcmJ2X2NtYXBfcmVncy0+YWRkcik7IG5vcCgpOwotCQorCW51YnVzX3dyaXRlYihyZWdubywgJnJidl9jbWFwX3JlZ3MtPmFkZHIpOworCW5vcCgpOworCiAJLyogc2VuZCBvbmUgY29sb3IgY2hhbm5lbCBhdCBhIHRpbWUuICovCi0JbnVidXNfd3JpdGViKF9yZWQsICAgJnJidl9jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCW51YnVzX3dyaXRlYihfZ3JlZW4sICZyYnZfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQludWJ1c193cml0ZWIoX2JsdWUsICAmcmJ2X2NtYXBfcmVncy0+bHV0KTsKLQkKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IC8qIGRvbmUuICovCisJbnVidXNfd3JpdGViKHJlZCwgJnJidl9jbWFwX3JlZ3MtPmx1dCk7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKGdyZWVuLCAmcmJ2X2NtYXBfcmVncy0+bHV0KTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIoYmx1ZSwgJnJidl9jbWFwX3JlZ3MtPmx1dCk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKLS8qIE1hY2ludG9zaCBEaXNwbGF5IENhcmQgKDh4MjQpICovCisvKiBNYWNpbnRvc2ggRGlzcGxheSBDYXJkICg4KjI0KSAqLwogc3RhdGljIGludCBtZGNfc2V0cGFsZXR0ZSh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCiAJCQkgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCiAJCQkgIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCXZvbGF0aWxlIHN0cnVjdCBtZGNfY21hcF9yZWdzICpjbWFwX3JlZ3MgPQotCQludWJ1c19zbG90X2FkZHIodmlkZW9fc2xvdCk7Ci0JLyogdXNlIE1TQnMgKi8KLQl1bnNpZ25lZCBjaGFyIF9yZWQgID1yZWQ+Pjg7Ci0JdW5zaWduZWQgY2hhciBfZ3JlZW49Z3JlZW4+Pjg7Ci0JdW5zaWduZWQgY2hhciBfYmx1ZSA9Ymx1ZT4+ODsKLQl1bnNpZ25lZCBjaGFyIF9yZWdubz1yZWdubzsKKwlzdHJ1Y3QgbWRjX2NtYXBfcmVncyAqY21hcF9yZWdzID0gc2xvdF9hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCisKIAkvKiB0aGUgbm9wJ3MgYXJlIHRoZXJlIHRvIG9yZGVyIHdyaXRlcy4gKi8KLQludWJ1c193cml0ZWIoX3JlZ25vLCAmY21hcF9yZWdzLT5hZGRyKTsgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9yZWQsICZjbWFwX3JlZ3MtPmx1dCk7ICAgIG5vcCgpOwotCW51YnVzX3dyaXRlYihfZ3JlZW4sICZjbWFwX3JlZ3MtPmx1dCk7ICBub3AoKTsKLQludWJ1c193cml0ZWIoX2JsdWUsICZjbWFwX3JlZ3MtPmx1dCk7CisJbnVidXNfd3JpdGViKHJlZ25vLCAmY21hcF9yZWdzLT5hZGRyKTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIocmVkLCAmY21hcF9yZWdzLT5sdXQpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihncmVlbiwgJmNtYXBfcmVncy0+bHV0KTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIoYmx1ZSwgJmNtYXBfcmVncy0+bHV0KTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gMDsKQEAgLTM1MCwyNCArMjkxLDI2IEBACiAvKiBUb2J5IGZyYW1lIGJ1ZmZlciAqLwogc3RhdGljIGludCB0b2J5X3NldHBhbGV0dGUodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAogCQkJICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKLQkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKSAKKwkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCXZvbGF0aWxlIHN0cnVjdCB0b2J5X2NtYXBfcmVncyAqY21hcF9yZWdzID0KLQkJbnVidXNfc2xvdF9hZGRyKHZpZGVvX3Nsb3QpOworCXN0cnVjdCB0b2J5X2NtYXBfcmVncyAqY21hcF9yZWdzID0gc2xvdF9hZGRyOwogCXVuc2lnbmVkIGludCBicHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7Ci0JLyogdXNlIE1TQnMgKi8KLQl1bnNpZ25lZCBjaGFyIF9yZWQgID1+KHJlZD4+OCk7Ci0JdW5zaWduZWQgY2hhciBfZ3JlZW49fihncmVlbj4+OCk7Ci0JdW5zaWduZWQgY2hhciBfYmx1ZSA9fihibHVlPj44KTsKLQl1bnNpZ25lZCBjaGFyIF9yZWdubyA9IChyZWdubyA8PCAoOCAtIGJwcCkpIHwgKDB4RkYgPj4gYnBwKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJcmVkID0gfnJlZDsKKwlncmVlbiA9IH5ncmVlbjsKKwlibHVlID0gfmJsdWU7CisJcmVnbm8gPSAocmVnbm8gPDwgKDggLSBicHApKSB8ICgweEZGID4+IGJwcCk7CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQotCW51YnVzX3dyaXRlYihfcmVnbm8sICZjbWFwX3JlZ3MtPmFkZHIpOyBub3AoKTsKLQludWJ1c193cml0ZWIoX3JlZCwgJmNtYXBfcmVncy0+bHV0KTsgICAgbm9wKCk7Ci0JbnVidXNfd3JpdGViKF9ncmVlbiwgJmNtYXBfcmVncy0+bHV0KTsgIG5vcCgpOwotCW51YnVzX3dyaXRlYihfYmx1ZSwgJmNtYXBfcmVncy0+bHV0KTsKKworCW51YnVzX3dyaXRlYihyZWdubywgJmNtYXBfcmVncy0+YWRkcik7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKHJlZCwgJmNtYXBfcmVncy0+bHV0KTsKKwlub3AoKTsKKwludWJ1c193cml0ZWIoZ3JlZW4sICZjbWFwX3JlZ3MtPmx1dCk7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKGJsdWUsICZjbWFwX3JlZ3MtPmx1dCk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIDA7CkBAIC0zNzgsMjAgKzMyMSwxOCBAQAogCQkJICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAogCQkJICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQl2b2xhdGlsZSBzdHJ1Y3QgamV0X2NtYXBfcmVncyAqY21hcF9yZWdzID0KLQkJbnVidXNfc2xvdF9hZGRyKHZpZGVvX3Nsb3QpOwotCS8qIHVzZSBNU0JzICovCi0JdW5zaWduZWQgY2hhciBfcmVkICAgPSAocmVkPj44KTsKLQl1bnNpZ25lZCBjaGFyIF9ncmVlbiA9IChncmVlbj4+OCk7Ci0JdW5zaWduZWQgY2hhciBfYmx1ZSAgPSAoYmx1ZT4+OCk7CisJc3RydWN0IGpldF9jbWFwX3JlZ3MgKmNtYXBfcmVncyA9IHNsb3RfYWRkcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQotCW51YnVzX3dyaXRlYihyZWdubywgJmNtYXBfcmVncy0+YWRkcik7IG5vcCgpOwotCW51YnVzX3dyaXRlYihfcmVkLCAmY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQludWJ1c193cml0ZWIoX2dyZWVuLCAmY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQludWJ1c193cml0ZWIoX2JsdWUsICZjbWFwX3JlZ3MtPmx1dCk7CisKKwludWJ1c193cml0ZWIocmVnbm8sICZjbWFwX3JlZ3MtPmFkZHIpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihyZWQsICZjbWFwX3JlZ3MtPmx1dCk7CisJbm9wKCk7CisJbnVidXNfd3JpdGViKGdyZWVuLCAmY21hcF9yZWdzLT5sdXQpOworCW5vcCgpOworCW51YnVzX3dyaXRlYihibHVlLCAmY21hcF9yZWdzLT5sdXQpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiAwOwpAQCAtNDAwLDUzICszNDEsMjcgQEAKIC8qCiAgKiBDaXZpYyBmcmFtZWJ1ZmZlciAtLSBRdWFkcmEgQVYgYnVpbHQtaW4gdmlkZW8uICBBIGNoaXAKICAqIGNhbGxlZCBTZWJhc3RpYW4gaG9sZHMgdGhlIGFjdHVhbCBjb2xvciBwYWxldHRlcywgYW5kCi0gKiBhcHBhcmVudGx5LCB0aGVyZSBhcmUgdHdvIGRpZmZlcmVudCBiYW5rcyBvZiA1MTJLIFJBTSAKKyAqIGFwcGFyZW50bHksIHRoZXJlIGFyZSB0d28gZGlmZmVyZW50IGJhbmtzIG9mIDUxMksgUkFNCiAgKiB3aGljaCBjYW4gYWN0IGFzIHNlcGFyYXRlIGZyYW1lYnVmZmVycyBmb3IgZG9pbmcgdmlkZW8KICAqIGlucHV0IGFuZCB2aWV3aW5nIHRoZSBzY3JlZW4gYXQgdGhlIHNhbWUgdGltZSEgIFRoZSA4NDBBVgotICogQ2FuIGFkZCBhbm90aGVyIDFNQiBSQU0gdG8gZ2l2ZSB0aGUgdHdvIGZyYW1lYnVmZmVycyAKKyAqIENhbiBhZGQgYW5vdGhlciAxTUIgUkFNIHRvIGdpdmUgdGhlIHR3byBmcmFtZWJ1ZmZlcnMKICAqIDFNQiBSQU0gYXBpZWNlLgotICoKLSAqIEZJWE1FOiB0aGlzIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGFueW1vcmUuCiAgKi8KLXN0YXRpYyBpbnQgY2l2aWNfc2V0cGFsZXR0ZSAodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotCQkJICAgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotCQkJICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgY2l2aWNfc2V0cGFsZXR0ZSh1bnNpZ25lZCBpbnQgcmVnbm8sIHVuc2lnbmVkIGludCByZWQsCisJCQkgICAgdW5zaWduZWQgaW50IGdyZWVuLCB1bnNpZ25lZCBpbnQgYmx1ZSwKKwkJCSAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQlzdGF0aWMgaW50IGxhc3RyZWcgPSAtMTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjbHV0X3N0YXR1czsKIAkKLQlpZiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID4gOCkgcmV0dXJuIDE7IC8qIGZhaWxzYWZlICovCi0KLQlyZWQgICA+Pj0gODsKLQlncmVlbiA+Pj0gODsKLQlibHVlICA+Pj0gODsKKwlpZiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID4gOCkKKwkJcmV0dXJuIDE7IC8qIGZhaWxzYWZlICovCiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCi0JLyoKLQkgKiBTZXQgdGhlIHJlZ2lzdGVyIGFkZHJlc3MKLQkgKi8KLQludWJ1c193cml0ZWIocmVnbm8sICZjaXZpY19jbWFwX3JlZ3MtPmFkZHIpOyBub3AoKTsKIAotCS8qCi0JICogV2FpdCBmb3IgVkJMIGludGVycnVwdCBoZXJlOwotCSAqIFRoZXkncmUgdXN1YWxseSBub3QgZW5hYmxlZCBmcm9tIFBlbmd1aW4sIHNvIHdlIHdvbid0IGNoZWNrCi0JICovCi0jaWYgMAotCXsKLSNkZWZpbmUgQ0lWSUNfVkJMX09GRlNFVAkweDEyMAotCQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICp2YmwgPSBudWJ1c19yZWFkbChjaXZpY19jbWFwX3JlZ3MtPnZibF9hZGRyICsgQ0lWSUNfVkJMX09GRlNFVCk7Ci0JCS8qIGRvIGludGVycnVwdCBzZXR1cCBzdHVmZiBoZXJlPyAqLwotCQkqdmJsID0gMEw7IG5vcCgpOwkvKiBjbGVhciAqLwotCQkqdmJsID0gMUw7IG5vcCgpOwkvKiBzZXQgKi8KLQkJd2hpbGUgKCp2YmwgIT0gMEwpCS8qIHdhaXQgZm9yIG5leHQgdmJsICovCi0JCXsKLQkJCXVzbGVlcCgxMCk7CS8qIG5lZWRlZD8gKi8KLQkJfQotCQkvKiBkbyBpbnRlcnJ1cHQgc2h1dGRvd24gc3R1ZmYgaGVyZT8gKi8KLQl9Ci0jZW5kaWYKKwkvKiBTZXQgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKwludWJ1c193cml0ZWIocmVnbm8sICZjaXZpY19jbWFwX3JlZ3MtPmFkZHIpOworCW5vcCgpOwogCiAJLyoKIAkgKiBHcmFiIGEgc3RhdHVzIHdvcmQgYW5kIGRvIHNvbWUgY2hlY2tpbmc7CkBAIC00NTksMzkgKzM3NCw1MiBAQAogI2lmIDAKIAkJaWYgKChjbHV0X3N0YXR1cyAmIDB4MDAwRCkgIT0gMCkKIAkJewotCQkJbnVidXNfd3JpdGViKDB4MDAsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQkJbnVidXNfd3JpdGViKDB4MDAsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOworCQkJbnVidXNfd3JpdGViKDB4MDAsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCQlub3AoKTsKKwkJCW51YnVzX3dyaXRlYigweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQkJbm9wKCk7CiAJCX0KICNlbmRpZgogCi0JCW51YnVzX3dyaXRlYiggIHJlZCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JCW51YnVzX3dyaXRlYihncmVlbiwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JCW51YnVzX3dyaXRlYiggYmx1ZSwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JCW51YnVzX3dyaXRlYiggMHgwMCwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7CisJCW51YnVzX3dyaXRlYihyZWQsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCW5vcCgpOworCQludWJ1c193cml0ZWIoZ3JlZW4sICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCW5vcCgpOworCQludWJ1c193cml0ZWIoYmx1ZSwgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJbm9wKCk7CisJCW51YnVzX3dyaXRlYigweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOwogCX0KIAllbHNlCiAJewogCQl1bnNpZ25lZCBjaGFyIGp1bms7CiAKLQkJanVuayA9IG51YnVzX3JlYWRiKCZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQlqdW5rID0gbnVidXNfcmVhZGIoJmNpdmljX2NtYXBfcmVncy0+bHV0KTsgbm9wKCk7Ci0JCWp1bmsgPSBudWJ1c19yZWFkYigmY2l2aWNfY21hcF9yZWdzLT5sdXQpOyBub3AoKTsKLQkJanVuayA9IG51YnVzX3JlYWRiKCZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOworCQlqdW5rID0gbnVidXNfcmVhZGIoJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJbm9wKCk7CisJCWp1bmsgPSBudWJ1c19yZWFkYigmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQlub3AoKTsKKwkJanVuayA9IG51YnVzX3JlYWRiKCZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCW5vcCgpOworCQlqdW5rID0gbnVidXNfcmVhZGIoJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKKwkJbm9wKCk7CiAKIAkJaWYgKChjbHV0X3N0YXR1cyAmIDB4MDAwRCkgIT0gMCkKIAkJewotCQkJbnVidXNfd3JpdGViKDB4MDAsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQkJbnVidXNfd3JpdGViKDB4MDAsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOworCQkJbnVidXNfd3JpdGViKDB4MDAsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCQlub3AoKTsKKwkJCW51YnVzX3dyaXRlYigweDAwLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQkJbm9wKCk7CiAJCX0KIAotCQludWJ1c193cml0ZWIoICByZWQsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQludWJ1c193cml0ZWIoZ3JlZW4sICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQludWJ1c193cml0ZWIoIGJsdWUsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOwotCQludWJ1c193cml0ZWIoIGp1bmssICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7IG5vcCgpOworCQludWJ1c193cml0ZWIocmVkLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQlub3AoKTsKKwkJbnVidXNfd3JpdGViKGdyZWVuLCAmY2l2aWNfY21hcF9yZWdzLT5sdXQpOworCQlub3AoKTsKKwkJbnVidXNfd3JpdGViKGJsdWUsICZjaXZpY19jbWFwX3JlZ3MtPmx1dCk7CisJCW5vcCgpOworCQludWJ1c193cml0ZWIoanVuaywgJmNpdmljX2NtYXBfcmVncy0+bHV0KTsKIAl9CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JbGFzdHJlZyA9IHJlZ25vOwogCXJldHVybiAwOwogfQogCkBAIC01MDAsMTYgKzQyOCwyMSBAQAogICogKGFuZCB0aGUgNTMwMCB0b28sIGJ1dCB0aGF0J3MgYSBQb3dlck1hYykuIFRoaXMgZnVuY3Rpb24KICAqIGJyb3VnaHQgdG8geW91IGluIHBhcnQgYnkgdGhlIEVDU0MgZHJpdmVyIGZvciBNa0xpbnV4LgogICovCi0KLXN0YXRpYyBpbnQgY3NjX3NldHBhbGV0dGUgKHVuc2lnbmVkIGludCByZWdubywgdW5zaWduZWQgaW50IHJlZCwKLQkJCSAgIHVuc2lnbmVkIGludCBncmVlbiwgdW5zaWduZWQgaW50IGJsdWUsCi0JCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgY3NjX3NldHBhbGV0dGUodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAorCQkJICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAorCQkJICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQltZGVsYXkoMSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXVkZWxheSgxKTsgLyogbWtsaW51eCBvbiBQQiA1MzAwIHdhaXRzIGZvciAyNjAgbnMgKi8KIAludWJ1c193cml0ZWIocmVnbm8sICZjc2NfY21hcF9yZWdzLT5jbHV0X3dhZGRyKTsKLQludWJ1c193cml0ZWIocmVkLCAgICZjc2NfY21hcF9yZWdzLT5jbHV0X2RhdGEpOworCW51YnVzX3dyaXRlYihyZWQsICZjc2NfY21hcF9yZWdzLT5jbHV0X2RhdGEpOwogCW51YnVzX3dyaXRlYihncmVlbiwgJmNzY19jbWFwX3JlZ3MtPmNsdXRfZGF0YSk7Ci0JbnVidXNfd3JpdGViKGJsdWUsICAmY3NjX2NtYXBfcmVncy0+Y2x1dF9kYXRhKTsKKwludWJ1c193cml0ZWIoYmx1ZSwgJmNzY19jbWFwX3JlZ3MtPmNsdXRfZGF0YSk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUxOCwxMCArNDUxLDEwIEBACiAJCQkgICBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKIHsKIAkvKgotCSAqICBTZXQgYSBzaW5nbGUgY29sb3IgcmVnaXN0ZXIuIFRoZSB2YWx1ZXMgc3VwcGxpZWQgYXJlCi0JICogIGFscmVhZHkgcm91bmRlZCBkb3duIHRvIHRoZSBoYXJkd2FyZSdzIGNhcGFiaWxpdGllcwotCSAqICAoYWNjb3JkaW5nIHRvIHRoZSBlbnRyaWVzIGluIHRoZSBgdmFyJyBzdHJ1Y3R1cmUpLiBSZXR1cm4KLQkgKiAgIT0gMCBmb3IgaW52YWxpZCByZWduby4KKwkgKiBTZXQgYSBzaW5nbGUgY29sb3IgcmVnaXN0ZXIuIFRoZSB2YWx1ZXMgc3VwcGxpZWQgYXJlCisJICogYWxyZWFkeSByb3VuZGVkIGRvd24gdG8gdGhlIGhhcmR3YXJlJ3MgY2FwYWJpbGl0aWVzCisJICogKGFjY29yZGluZyB0byB0aGUgZW50cmllcyBpbiB0aGUgYHZhcicgc3RydWN0dXJlKS4KKwkgKiBSZXR1cm4gbm9uLXplcm8gZm9yIGludmFsaWQgcmVnbm8uCiAJICovCiAJCiAJaWYgKHJlZ25vID49IGZiX2luZm8tPmNtYXAubGVuKQpAQCAtNTM2LDggKzQ2OSw4IEBACiAJCWNhc2UgNDoKIAkJY2FzZSA4OgogCQkJaWYgKG1hY2ZiX3NldHBhbGV0dGUpCi0JCQkJbWFjZmJfc2V0cGFsZXR0ZShyZWdubywgcmVkLCBncmVlbiwgYmx1ZSwKLQkJCQkJCSBmYl9pbmZvKTsKKwkJCQltYWNmYl9zZXRwYWxldHRlKHJlZ25vLCByZWQgPj4gOCwgZ3JlZW4gPj4gOCwKKwkJCQkJCSBibHVlID4+IDgsIGZiX2luZm8pOwogCQkJZWxzZQogCQkJCXJldHVybiAxOwogCQkJYnJlYWs7CkBAIC01NTUsMjggKzQ4OCwyMiBAQAogCQkJfSBlbHNlIHsKIAkJCQkvKiAwOjU6Njo1ICovCiAJCQkJKCh1MzIqKSAoZmJfaW5mby0+cHNldWRvX3BhbGV0dGUpKVtyZWdub10gPQotCQkJCQkoKHJlZCAgICYgMHhmODAwKSAgICAgICkgfAorCQkJCQkoKHJlZCAgICYgMHhmODAwKSA+PiAgMCkgfAogCQkJCQkoKGdyZWVuICYgMHhmYzAwKSA+PiAgNSkgfAogCQkJCQkoKGJsdWUgICYgMHhmODAwKSA+PiAxMSk7CiAJCQl9CiAJCQlicmVhazsKLQkJCS8qIEknbSBwcmV0dHkgc3VyZSB0aGF0IG9uZSBvciB0aGUgb3RoZXIgb2YgdGhlc2UKLQkJCSAgIGRvZXNuJ3QgZXhpc3Qgb24gNjhrIE1hY3MgKi8KKwkJLyoKKwkJICogMjQtYml0IGNvbG91ciBhbG1vc3QgZG9lc24ndCBleGlzdCBvbiA2OGsgTWFjcyAtLQorCQkgKiBodHRwOi8vc3VwcG9ydC5hcHBsZS5jb20va2IvVEEyODYzNCAoT2xkIEFydGljbGU6IDEwOTkyKQorCQkgKi8KIAkJY2FzZSAyNDoKLQkJCXJlZCAgID4+PSA4OwotCQkJZ3JlZW4gPj49IDg7Ci0JCQlibHVlICA+Pj0gODsKLQkJCSgodTMyICopKGZiX2luZm8tPnBzZXVkb19wYWxldHRlKSlbcmVnbm9dID0KLQkJCQkocmVkICAgPDwgZmJfaW5mby0+dmFyLnJlZC5vZmZzZXQpICAgfAotCQkJCShncmVlbiA8PCBmYl9pbmZvLT52YXIuZ3JlZW4ub2Zmc2V0KSB8Ci0JCQkJKGJsdWUgIDw8IGZiX2luZm8tPnZhci5ibHVlLm9mZnNldCk7Ci0JCQlicmVhazsKIAkJY2FzZSAzMjoKIAkJCXJlZCAgID4+PSA4OwogCQkJZ3JlZW4gPj49IDg7CiAJCQlibHVlICA+Pj0gODsKIAkJCSgodTMyICopKGZiX2luZm8tPnBzZXVkb19wYWxldHRlKSlbcmVnbm9dID0KLQkJCQkocmVkICAgPDwgZmJfaW5mby0+dmFyLnJlZC5vZmZzZXQpICAgfAorCQkJCShyZWQgICA8PCBmYl9pbmZvLT52YXIucmVkLm9mZnNldCkgfAogCQkJCShncmVlbiA8PCBmYl9pbmZvLT52YXIuZ3JlZW4ub2Zmc2V0KSB8CiAJCQkJKGJsdWUgIDw8IGZiX2luZm8tPnZhci5ibHVlLm9mZnNldCk7CiAJCQlicmVhazsKQEAgLTU5NywyNSArNTI0LDI0IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgbWFjZmJfc2V0dXAoY2hhciAqb3B0aW9ucykKIHsKIAljaGFyICp0aGlzX29wdDsKLQkKKwogCWlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpCiAJCXJldHVybjsKLQkKKwogCXdoaWxlICgodGhpc19vcHQgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKLQkJaWYgKCEqdGhpc19vcHQpIGNvbnRpbnVlOwotCQkKLQkJaWYgKCEgc3RyY21wKHRoaXNfb3B0LCAiaW52ZXJzZSIpKQotCQkJaW52ZXJzZT0xOwotCQkvKiBUaGlzIG1lYW5zICJ0dXJuIG9uIGV4cGVyaW1lbnRhbCBDTFVUIGNvZGUiICovCi0JCWVsc2UgaWYgKCFzdHJjbXAodGhpc19vcHQsICJ2aWR0ZXN0IikpCi0JCQl2aWR0ZXN0PTE7CisJCWlmICghKnRoaXNfb3B0KQorCQkJY29udGludWU7CisKKwkJaWYgKCFzdHJjbXAodGhpc19vcHQsICJpbnZlcnNlIikpCisJCQlpbnZlcnNlID0gMTsKKwkJZWxzZQorCQkJaWYgKCFzdHJjbXAodGhpc19vcHQsICJ2aWR0ZXN0IikpCisJCQkJdmlkdGVzdCA9IDE7IC8qIGVuYWJsZSBleHBlcmltZW50YWwgQ0xVVCBjb2RlICovCiAJfQogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaW91bm1hcF9tYWNmYih2b2lkKQogewotCWlmICh2YWxreXJpZV9jbWFwX3JlZ3MpCi0JCWlvdW5tYXAodmFsa3lyaWVfY21hcF9yZWdzKTsKIAlpZiAoZGFmYl9jbWFwX3JlZ3MpCiAJCWlvdW5tYXAoZGFmYl9jbWFwX3JlZ3MpOwogCWlmICh2OF9icmF6aWxfY21hcF9yZWdzKQpAQCAtNjQyLDQ4ICs1NjgsNTUgQEAKIAlpZiAoIU1BQ0hfSVNfTUFDKSAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBUaGVyZSBjYW4gb25seSBiZSBvbmUgaW50ZXJuYWwgdmlkZW8gY29udHJvbGxlciBhbnl3YXkgc28KLQkgICB3ZSdyZSBub3QgdG9vIHdvcnJpZWQgYWJvdXQgdGhpcyAqLworCWlmIChtYWNfYmlfZGF0YS5pZCA9PSBNQUNfTU9ERUxfUTYzMCB8fAorCSAgICBtYWNfYmlfZGF0YS5pZCA9PSBNQUNfTU9ERUxfUDU4OCkKKwkJcmV0dXJuIC1FTk9ERVY7IC8qIFNlZSB2YWxreXJpZWZiLmMgKi8KKwogCW1hY2ZiX2RlZmluZWQueHJlcyA9IG1hY19iaV9kYXRhLmRpbWVuc2lvbnMgJiAweEZGRkY7CiAJbWFjZmJfZGVmaW5lZC55cmVzID0gbWFjX2JpX2RhdGEuZGltZW5zaW9ucyA+PiAxNjsKIAltYWNmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsID0gbWFjX2JpX2RhdGEudmlkZW9kZXB0aDsKKwogCW1hY2ZiX2ZpeC5saW5lX2xlbmd0aCA9IG1hY19iaV9kYXRhLnZpZGVvcm93OwotCW1hY2ZiX2ZpeC5zbWVtX2xlbiA9IG1hY2ZiX2ZpeC5saW5lX2xlbmd0aCAqIG1hY2ZiX2RlZmluZWQueXJlczsKKwltYWNmYl9maXguc21lbV9sZW4gICAgPSBtYWNmYl9maXgubGluZV9sZW5ndGggKiBtYWNmYl9kZWZpbmVkLnlyZXM7CiAJLyogTm90ZTogcGh5c2ljYWwgYWRkcmVzcyAoc2luY2UgMi4xLjEyNykgKi8KLQltYWNmYl9maXguc21lbV9zdGFydCA9IG1hY19iaV9kYXRhLnZpZGVvYWRkcjsKLQkvKiBUaGlzIGlzIGFjdHVhbGx5IHJlZHVuZGFudCB3aXRoIHRoZSBpbml0aWFsIG1hcHBpbmdzLgotCSAgIEhvd2V2ZXIsIHRoZXJlIGFyZSBzb21lIG5vbi1vYnZpb3VzIGFzcGVjdHMgdG8gdGhlIHdheQotCSAgIHRob3NlIG1hcHBpbmdzIGFyZSBzZXQgdXAsIHNvIHRoaXMgaXMgaW4gZmFjdCB0aGUgc2FmZXN0Ci0JICAgd2F5IHRvIGVuc3VyZSB0aGF0IHRoaXMgZHJpdmVyIHdpbGwgd29yayBvbiBldmVyeSBwb3NzaWJsZQotCSAgIE1hYyAqLwotCWZiX2luZm8uc2NyZWVuX2Jhc2UgPSBpb3JlbWFwKG1hY19iaV9kYXRhLnZpZGVvYWRkciwgbWFjZmJfZml4LnNtZW1fbGVuKTsKLQkKLQlwcmludGsoIm1hY2ZiOiBmcmFtZWJ1ZmZlciBhdCAweCUwOGx4LCBtYXBwZWQgdG8gMHglcCwgc2l6ZSAlZGtcbiIsCi0JICAgICAgIG1hY2ZiX2ZpeC5zbWVtX3N0YXJ0LCBmYl9pbmZvLnNjcmVlbl9iYXNlLCBtYWNmYl9maXguc21lbV9sZW4vMTAyNCk7Ci0JcHJpbnRrKCJtYWNmYjogbW9kZSBpcyAlZHglZHglZCwgbGluZWxlbmd0aD0lZFxuIiwKLQkgICAgICAgbWFjZmJfZGVmaW5lZC54cmVzLCBtYWNmYl9kZWZpbmVkLnlyZXMsIG1hY2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwsIG1hY2ZiX2ZpeC5saW5lX2xlbmd0aCk7Ci0JCisJbWFjZmJfZml4LnNtZW1fc3RhcnQgID0gbWFjX2JpX2RhdGEudmlkZW9hZGRyOworCiAJLyoKLQkgKglGaWxsIGluIHRoZSBhdmFpbGFibGUgdmlkZW8gcmVzb2x1dGlvbgorCSAqIFRoaXMgaXMgYWN0dWFsbHkgcmVkdW5kYW50IHdpdGggdGhlIGluaXRpYWwgbWFwcGluZ3MuCisJICogSG93ZXZlciwgdGhlcmUgYXJlIHNvbWUgbm9uLW9idmlvdXMgYXNwZWN0cyB0byB0aGUgd2F5CisJICogdGhvc2UgbWFwcGluZ3MgYXJlIHNldCB1cCwgc28gdGhpcyBpcyBpbiBmYWN0IHRoZSBzYWZlc3QKKwkgKiB3YXkgdG8gZW5zdXJlIHRoYXQgdGhpcyBkcml2ZXIgd2lsbCB3b3JrIG9uIGV2ZXJ5IHBvc3NpYmxlIE1hYwogCSAqLwotCSAKLQltYWNmYl9kZWZpbmVkLnhyZXNfdmlydHVhbCAgID0gbWFjZmJfZGVmaW5lZC54cmVzOwotCW1hY2ZiX2RlZmluZWQueXJlc192aXJ0dWFsICAgPSBtYWNmYl9kZWZpbmVkLnlyZXM7Ci0JbWFjZmJfZGVmaW5lZC5oZWlnaHQgPSBQSVhFTF9UT19NTShtYWNmYl9kZWZpbmVkLnlyZXMpOwotCW1hY2ZiX2RlZmluZWQud2lkdGggID0gUElYRUxfVE9fTU0obWFjZmJfZGVmaW5lZC54cmVzKTsJIAorCWZiX2luZm8uc2NyZWVuX2Jhc2UgPSBpb3JlbWFwKG1hY19iaV9kYXRhLnZpZGVvYWRkciwKKwkJCQkgICAgICBtYWNmYl9maXguc21lbV9sZW4pOworCWlmICghZmJfaW5mby5zY3JlZW5fYmFzZSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlwcmludGsoIm1hY2ZiOiBzY3JvbGxpbmc6IHJlZHJhd1xuIik7CisJcHJpbnRrKCJtYWNmYjogZnJhbWVidWZmZXIgYXQgMHglMDhseCwgbWFwcGVkIHRvIDB4JXAsIHNpemUgJWRrXG4iLAorCSAgICAgICBtYWNmYl9maXguc21lbV9zdGFydCwgZmJfaW5mby5zY3JlZW5fYmFzZSwKKwkgICAgICAgbWFjZmJfZml4LnNtZW1fbGVuIC8gMTAyNCk7CisJcHJpbnRrKCJtYWNmYjogbW9kZSBpcyAlZHglZHglZCwgbGluZWxlbmd0aD0lZFxuIiwKKwkgICAgICAgbWFjZmJfZGVmaW5lZC54cmVzLCBtYWNmYl9kZWZpbmVkLnlyZXMsCisJICAgICAgIG1hY2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwsIG1hY2ZiX2ZpeC5saW5lX2xlbmd0aCk7CisKKwkvKiBGaWxsIGluIHRoZSBhdmFpbGFibGUgdmlkZW8gcmVzb2x1dGlvbiAqLworCW1hY2ZiX2RlZmluZWQueHJlc192aXJ0dWFsID0gbWFjZmJfZGVmaW5lZC54cmVzOwogCW1hY2ZiX2RlZmluZWQueXJlc192aXJ0dWFsID0gbWFjZmJfZGVmaW5lZC55cmVzOworCW1hY2ZiX2RlZmluZWQuaGVpZ2h0ICAgICAgID0gUElYRUxfVE9fTU0obWFjZmJfZGVmaW5lZC55cmVzKTsKKwltYWNmYl9kZWZpbmVkLndpZHRoICAgICAgICA9IFBJWEVMX1RPX01NKG1hY2ZiX2RlZmluZWQueHJlcyk7CiAKLQkvKiBzb21lIGR1bW15IHZhbHVlcyBmb3IgdGltaW5nIHRvIG1ha2UgZmJzZXQgaGFwcHkgKi8KLQltYWNmYl9kZWZpbmVkLnBpeGNsb2NrICAgICA9IDEwMDAwMDAwIC8gbWFjZmJfZGVmaW5lZC54cmVzICogMTAwMCAvIG1hY2ZiX2RlZmluZWQueXJlczsKKwkvKiBTb21lIGR1bW15IHZhbHVlcyBmb3IgdGltaW5nIHRvIG1ha2UgZmJzZXQgaGFwcHkgKi8KKwltYWNmYl9kZWZpbmVkLnBpeGNsb2NrICAgICA9IDEwMDAwMDAwIC8gbWFjZmJfZGVmaW5lZC54cmVzICoKKwkJCQkgICAgIDEwMDAgLyBtYWNmYl9kZWZpbmVkLnlyZXM7CiAJbWFjZmJfZGVmaW5lZC5sZWZ0X21hcmdpbiAgPSAobWFjZmJfZGVmaW5lZC54cmVzIC8gOCkgJiAweGY4OwogCW1hY2ZiX2RlZmluZWQuaHN5bmNfbGVuICAgID0gKG1hY2ZiX2RlZmluZWQueHJlcyAvIDgpICYgMHhmODsKIAogCXN3aXRjaCAobWFjZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbCkgewogCWNhc2UgMToKLQkJLyogWFhYOiBJIHRoaW5rIHRoaXMgd2lsbCBjYXRjaCBhbnkgcHJvZ3JhbSB0aGF0IHRyaWVzCi0JCSAgIHRvIGRvIEZCSU9fUFVUQ01BUCB3aGVuIHRoZSB2aXN1YWwgaXMgbW9ub2Nocm9tZSAqLworCQkvKgorCQkgKiBYWFg6IEkgdGhpbmsgdGhpcyB3aWxsIGNhdGNoIGFueSBwcm9ncmFtIHRoYXQgdHJpZXMKKwkJICogdG8gZG8gRkJJT19QVVRDTUFQIHdoZW4gdGhlIHZpc3VhbCBpcyBtb25vY2hyb21lLgorCQkgKi8KIAkJbWFjZmJfZGVmaW5lZC5yZWQubGVuZ3RoID0gbWFjZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbDsKIAkJbWFjZmJfZGVmaW5lZC5ncmVlbi5sZW5ndGggPSBtYWNmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsOwogCQltYWNmYl9kZWZpbmVkLmJsdWUubGVuZ3RoID0gbWFjZmJfZGVmaW5lZC5iaXRzX3Blcl9waXhlbDsKQEAgLTcwOCw1MyArNjQxLDUyIEBACiAJCW1hY2ZiX2RlZmluZWQuZ3JlZW4ubGVuZ3RoID0gNTsKIAkJbWFjZmJfZGVmaW5lZC5ibHVlLm9mZnNldCA9IDA7CiAJCW1hY2ZiX2RlZmluZWQuYmx1ZS5sZW5ndGggPSA1OwotCQlwcmludGsoIm1hY2ZiOiBkaXJlY3Rjb2xvcjogIgotCQkgICAgICAgInNpemU9MTo1OjU6NSwgc2hpZnQ9MTU6MTA6NTowXG4iKTsKIAkJdmlkZW9fY21hcF9sZW4gPSAxNjsKLQkJLyogU2hvdWxkIGFjdHVhbGx5IGJlIEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUiwgYnV0IHRoaXMKLQkJICAgd29ya3MgdG9vICovCisJCS8qCisJCSAqIFNob3VsZCBhY3R1YWxseSBiZSBGQl9WSVNVQUxfRElSRUNUQ09MT1IsIGJ1dCB0aGlzCisJCSAqIHdvcmtzIHRvbworCQkgKi8KIAkJbWFjZmJfZml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CiAJCWJyZWFrOwogCWNhc2UgMjQ6CiAJY2FzZSAzMjoKLQkJLyogWFhYOiBoYXZlIHRvIHRlc3QgdGhlc2UuLi4gY2FuIGFueSA2OGsgTWFjcwotCQkgICBhY3R1YWxseSBkbyB0aGlzIG9uIGludGVybmFsIHZpZGVvPyAqLwogCQltYWNmYl9kZWZpbmVkLnJlZC5vZmZzZXQgPSAxNjsKIAkJbWFjZmJfZGVmaW5lZC5yZWQubGVuZ3RoID0gODsKIAkJbWFjZmJfZGVmaW5lZC5ncmVlbi5vZmZzZXQgPSA4OwogCQltYWNmYl9kZWZpbmVkLmdyZWVuLmxlbmd0aCA9IDg7CiAJCW1hY2ZiX2RlZmluZWQuYmx1ZS5vZmZzZXQgPSAwOwogCQltYWNmYl9kZWZpbmVkLmJsdWUubGVuZ3RoID0gODsKLQkJcHJpbnRrKCJtYWNmYjogdHJ1ZWNvbG9yOiAiCi0JCSAgICAgICAic2l6ZT0wOjg6ODo4LCBzaGlmdD0wOjE2Ojg6MFxuIik7CiAJCXZpZGVvX2NtYXBfbGVuID0gMTY7CiAJCW1hY2ZiX2ZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCQlicmVhazsKIAlkZWZhdWx0OgogCQl2aWRlb19jbWFwX2xlbiA9IDA7CiAJCW1hY2ZiX2ZpeC52aXN1YWwgPSBGQl9WSVNVQUxfTU9OTzAxOwotCQlwcmludGsoIm1hY2ZiOiB1bmtub3duIG9yIHVuc3VwcG9ydGVkIGJpdCBkZXB0aDogJWRcbiIsIG1hY2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwpOworCQlwcmludGsoIm1hY2ZiOiB1bmtub3duIG9yIHVuc3VwcG9ydGVkIGJpdCBkZXB0aDogJWRcbiIsCisJCSAgICAgICBtYWNmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsKTsKIAkJYnJlYWs7CiAJfQogCQotCS8qIEhhcmR3YXJlIGRlcGVuZGVudCBzdHVmZiAqLwotCS8qICBXZSB0YWtlIGEgd2lsZCBndWVzcyB0aGF0IGlmIHRoZSB2aWRlbyBwaHlzaWNhbCBhZGRyZXNzIGlzCi0JICogIGluIG51YnVzIHNsb3Qgc3BhY2UsIHRoYXQgdGhlIG51YnVzIGNhcmQgaXMgZHJpdmluZyB2aWRlby4KLQkgKiAgUGVuZ3VpbiByZWFsbHkgb3VnaHQgdG8gdGVsbCB1cyB3aGV0aGVyIHdlIGFyZSB1c2luZyBpbnRlcm5hbAotCSAqICB2aWRlbyBvciBub3QuCisJLyoKKwkgKiBXZSB0YWtlIGEgd2lsZCBndWVzcyB0aGF0IGlmIHRoZSB2aWRlbyBwaHlzaWNhbCBhZGRyZXNzIGlzCisJICogaW4gbnVidXMgc2xvdCBzcGFjZSwgdGhhdCB0aGUgbnVidXMgY2FyZCBpcyBkcml2aW5nIHZpZGVvLgorCSAqIFBlbmd1aW4gcmVhbGx5IG91Z2h0IHRvIHRlbGwgdXMgd2hldGhlciB3ZSBhcmUgdXNpbmcgaW50ZXJuYWwKKwkgKiB2aWRlbyBvciBub3QuCisJICogSG9wZWZ1bGx5IHdlIG9ubHkgZmluZCBvbmUgb2YgdGhlbS4gIE90aGVyd2lzZSBvdXIgTnVCdXMKKwkgKiBjb2RlIGlzIHJlYWxseSBicm9rZW4gOi0pCiAJICovCi0JLyogSG9wZWZ1bGx5IHdlIG9ubHkgZmluZCBvbmUgb2YgdGhlbS4gIE90aGVyd2lzZSBvdXIgTnVCdXMKLSAgICAgICAgICAgY29kZSBpcyByZWFsbHkgYnJva2VuIDotKSAqLwogCi0Jd2hpbGUgKChuZGV2ID0gbnVidXNfZmluZF90eXBlKE5VQlVTX0NBVF9ESVNQTEFZLCBOVUJVU19UWVBFX1ZJREVPLCBuZGV2KSkKLQkJIT0gTlVMTCkKKwl3aGlsZSAoKG5kZXYgPSBudWJ1c19maW5kX3R5cGUoTlVCVVNfQ0FUX0RJU1BMQVksCisJCQkJICAgICAgIE5VQlVTX1RZUEVfVklERU8sIG5kZXYpKSkKIAl7Ci0JCWlmICghKG1hY19iaV9kYXRhLnZpZGVvYWRkciA+PSBuZGV2LT5ib2FyZC0+c2xvdF9hZGRyCi0JCSAgICAgICYmIChtYWNfYmlfZGF0YS52aWRlb2FkZHIgPAotCQkJICAodW5zaWduZWQgbG9uZyludWJ1c19zbG90X2FkZHIobmRldi0+Ym9hcmQtPnNsb3QrMSkpKSkKKwkJdW5zaWduZWQgbG9uZyBiYXNlID0gbmRldi0+Ym9hcmQtPnNsb3RfYWRkcjsKKworCQlpZiAobWFjX2JpX2RhdGEudmlkZW9hZGRyIDwgYmFzZSB8fAorCQkgICAgbWFjX2JpX2RhdGEudmlkZW9hZGRyIC0gYmFzZSA+IDB4RkZGRkZGKQogCQkJY29udGludWU7CisKIAkJdmlkZW9faXNfbnVidXMgPSAxOwotCQkvKiBXZSBzaG91bGQgcHJvYmFibHkganVzdCB1c2UgdGhlIHNsb3QgYWRkcmVzcy4uLiAqLwotCQl2aWRlb19zbG90ID0gbmRldi0+Ym9hcmQtPnNsb3Q7CisJCXNsb3RfYWRkciA9ICh1bnNpZ25lZCBjaGFyICopYmFzZTsKIAogCQlzd2l0Y2gobmRldi0+ZHJfaHcpIHsKIAkJY2FzZSBOVUJVU19EUkhXX0FQUExFX01EQzoKQEAgLTc3MSw3ICs3MDMsNyBAQAogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIkpldCIpOwogCQkJbWFjZmJfc2V0cGFsZXR0ZSA9IGpldF9zZXRwYWxldHRlOwogCQkJbWFjZmJfZGVmaW5lZC5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVzsKLQkJCWJyZWFrOwkJCQorCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiR2VuZXJpYyBOdUJ1cyIpOwogCQkJYnJlYWs7CkBAIC03NzksMzAgKzcxMSwxOSBAQAogCX0KIAogCS8qIElmIGl0J3Mgbm90IGEgTnVCdXMgY2FyZCwgaXQgbXVzdCBiZSBpbnRlcm5hbCB2aWRlbyAqLwotCS8qIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGlzIGdldHRpbmcgd2F5IHRvbyBiaWcuICAodGhpcyBkcml2ZXIKLSAgICAgICAgICAgaXMgdG9vLi4uKSAqLwogCWlmICghdmlkZW9faXNfbnVidXMpCi0JCXN3aXRjaCggbWFjX2JpX2RhdGEuaWQgKQotCQl7Ci0JCQkvKiBWYWxreXJpZSBRdWFkcmFzICovCi0JCWNhc2UgTUFDX01PREVMX1E2MzA6Ci0JCQkvKiBJJ20gbm90IHN1cmUgYWJvdXQgdGhpcyBvbmUgKi8KLQkJY2FzZSBNQUNfTU9ERUxfUDU4ODoKLQkJCXN0cmNweShtYWNmYl9maXguaWQsICJWYWxreXJpZSIpOwotCQkJbWFjZmJfc2V0cGFsZXR0ZSA9IHZhbGt5cmllX3NldHBhbGV0dGU7Ci0JCQltYWNmYl9kZWZpbmVkLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOwotCQkJdmFsa3lyaWVfY21hcF9yZWdzID0gaW9yZW1hcChEQUNfQkFTRSwgMHgxMDAwKTsKLQkJCWJyZWFrOwotCi0JCQkvKiBEQUZCIFF1YWRyYXMgKi8KLQkJCS8qIE5vdGU6IHRoZXNlIGZpcnN0IGZvdXIgaGF2ZSB0aGUgdjcgREFGQiwgd2hpY2ggaXMKLQkJCSAgIGtub3duIHRvIGJlIHJhdGhlciB1bmxpa2UgdGhlIG9uZXMgdXNlZCBpbiB0aGUKLQkJCSAgIG90aGVyIG1vZGVscyAqLworCQlzd2l0Y2ggKG1hY19iaV9kYXRhLmlkKSB7CisJCS8qCisJCSAqIERBRkIgUXVhZHJhcworCQkgKiBOb3RlOiB0aGVzZSBmaXJzdCBmb3VyIGhhdmUgdGhlIHY3IERBRkIsIHdoaWNoIGlzCisJCSAqIGtub3duIHRvIGJlIHJhdGhlciB1bmxpa2UgdGhlIG9uZXMgdXNlZCBpbiB0aGUKKwkJICogb3RoZXIgbW9kZWxzCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9QNDc1OgogCQljYXNlIE1BQ19NT0RFTF9QNDc1RjoKIAkJY2FzZSBNQUNfTU9ERUxfUDU3NToKIAkJY2FzZSBNQUNfTU9ERUxfUTYwNToKLQkKKwogCQljYXNlIE1BQ19NT0RFTF9RODAwOgogCQljYXNlIE1BQ19NT0RFTF9RNjUwOgogCQljYXNlIE1BQ19NT0RFTF9RNjEwOgpAQCAtODE3LDE3ICs3MzgsMjEgQEAKIAkJCWRhZmJfY21hcF9yZWdzID0gaW9yZW1hcChEQUZCX0JBU0UsIDB4MTAwMCk7CiAJCQlicmVhazsKIAotCQkJLyogTEMgSUkgdXNlcyB0aGUgVjggZnJhbWVidWZmZXIgKi8KKwkJLyoKKwkJICogTEMgSUkgdXNlcyB0aGUgVjggZnJhbWVidWZmZXIKKwkJICovCiAJCWNhc2UgTUFDX01PREVMX0xDSUk6CiAJCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiVjgiKTsKIAkJCW1hY2ZiX3NldHBhbGV0dGUgPSB2OF9icmF6aWxfc2V0cGFsZXR0ZTsKIAkJCW1hY2ZiX2RlZmluZWQuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CiAJCQl2OF9icmF6aWxfY21hcF9yZWdzID0gaW9yZW1hcChEQUNfQkFTRSwgMHgxMDAwKTsKIAkJCWJyZWFrOwotCQkKLQkJCS8qIElJdmksIElJdnggdXNlIHRoZSAiQnJhemlsIiBmcmFtZWJ1ZmZlciAod2hpY2ggaXMKLQkJCSAgIHZlcnkgbXVjaCBsaWtlIHRoZSBWOCwgaXQgc2VlbXMsIGFuZCBwcm9iYWJseSB1c2VzCi0JCQkgICB0aGUgc2FtZSBEQUMpICovCisKKwkJLyoKKwkJICogSUl2aSwgSUl2eCB1c2UgdGhlICJCcmF6aWwiIGZyYW1lYnVmZmVyICh3aGljaCBpcworCQkgKiB2ZXJ5IG11Y2ggbGlrZSB0aGUgVjgsIGl0IHNlZW1zLCBhbmQgcHJvYmFibHkgdXNlcworCQkgKiB0aGUgc2FtZSBEQUMpCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9JSVZJOgogCQljYXNlIE1BQ19NT0RFTF9JSVZYOgogCQljYXNlIE1BQ19NT0RFTF9QNjAwOgpAQCAtODM2LDEyICs3NjEsMTQgQEAKIAkJCW1hY2ZiX2RlZmluZWQuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CiAJCQl2OF9icmF6aWxfY21hcF9yZWdzID0gaW9yZW1hcChEQUNfQkFTRSwgMHgxMDAwKTsKIAkJCWJyZWFrOwotCQkKLQkJCS8qIExDIElJSSAoYW5kIGZyaWVuZHMpIHVzZSB0aGUgU29ub3JhIGZyYW1lYnVmZmVyICovCi0JCQkvKiBJbmNpZGVudGFsbHkgdGhpcyBpcyBhbHNvIHVzZWQgaW4gdGhlIG5vbi1BViBtb2RlbHMKLQkJCSAgIG9mIHRoZSB4MTAwIFBvd2VyTWFjcyAqLwotCQkJLyogVGhlc2UgZG8gaW4gZmFjdCBzZWVtIHRvIHVzZSB0aGUgc2FtZSBEQUMgaW50ZXJmYWNlCi0JCQkgICBhcyB0aGUgTEMgSUkuICovCisKKwkJLyoKKwkJICogTEMgSUlJIChhbmQgZnJpZW5kcykgdXNlIHRoZSBTb25vcmEgZnJhbWVidWZmZXIKKwkJICogSW5jaWRlbnRhbGx5IHRoaXMgaXMgYWxzbyB1c2VkIGluIHRoZSBub24tQVYgbW9kZWxzCisJCSAqIG9mIHRoZSB4MTAwIFBvd2VyTWFjcworCQkgKiBUaGVzZSBkbyBpbiBmYWN0IHNlZW0gdG8gdXNlIHRoZSBzYW1lIERBQyBpbnRlcmZhY2UKKwkJICogYXMgdGhlIExDIElJLgorCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfTENJSUk6CiAJCWNhc2UgTUFDX01PREVMX1A1MjA6CiAJCWNhc2UgTUFDX01PREVMX1A1NTA6CkBAIC04NTIsOSArNzc5LDExIEBACiAJCQl2OF9icmF6aWxfY21hcF9yZWdzID0gaW9yZW1hcChEQUNfQkFTRSwgMHgxMDAwKTsKIAkJCWJyZWFrOwogCi0JCQkvKiBJSWNpIGFuZCBJSXNpIHVzZSB0aGUgaW5mYW1vdXMgUkJWIGNoaXAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGUgSUlzaSBpcyBqdXN0IGEgcmViYWRnZWQgYW5kIGNyaXBwbGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJSWNpIGluIGEgZGlmZmVyZW50IGNhc2UsIEJUVykgKi8KKwkJLyoKKwkJICogSUljaSBhbmQgSUlzaSB1c2UgdGhlIGluZmFtb3VzIFJCViBjaGlwCisJCSAqICh0aGUgSUlzaSBpcyBqdXN0IGEgcmViYWRnZWQgYW5kIGNyaXBwbGVkCisJCSAqIElJY2kgaW4gYSBkaWZmZXJlbnQgY2FzZSwgQlRXKQorCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfSUlDSToKIAkJY2FzZSBNQUNfTU9ERUxfSUlTSToKIAkJCW1hY2ZiX3NldHBhbGV0dGUgPSByYnZfc2V0cGFsZXR0ZTsKQEAgLTg2Myw3ICs3OTIsOSBAQAogCQkJcmJ2X2NtYXBfcmVncyA9IGlvcmVtYXAoREFDX0JBU0UsIDB4MTAwMCk7CiAJCQlicmVhazsKIAotCQkJLyogQVZzIHVzZSB0aGUgQ2l2aWMgZnJhbWVidWZmZXIgKi8KKwkJLyoKKwkJICogQVZzIHVzZSB0aGUgQ2l2aWMgZnJhbWVidWZmZXIKKwkJICovCiAJCWNhc2UgTUFDX01PREVMX1E4NDA6CiAJCWNhc2UgTUFDX01PREVMX0M2NjA6CiAJCQltYWNmYl9zZXRwYWxldHRlID0gY2l2aWNfc2V0cGFsZXR0ZTsKQEAgLTg3MywxNSArODA0LDEwIEBACiAJCQlicmVhazsKIAogCQkKLQkJCS8qIFdyaXRlIGEgc2V0cGFsZXR0ZSBmdW5jdGlvbiBmb3IgeW91ciBtYWNoaW5lLCB0aGVuCi0JCQkgICB5b3UgY2FuIGFkZCBzb21ldGhpbmcgc2ltaWxhciBoZXJlLiAgVGhlc2UgYXJlCi0JCQkgICBncm91cGVkIGJ5IGNsYXNzZXMgb2YgdmlkZW8gY2hpcHNldHMuICBTb21lIG9mIHRoaXMKLQkJCSAgIGluZm9ybWF0aW9uIGlzIGZyb20gdGhlIFZpZGVvVG9vbGJveCAiQnVncyIgd2ViCi0JCQkgICBwYWdlIGF0Ci0JCQkgICBodHRwOi8vcmFqc2t5LnBzeWNoLm55dS5lZHUvVGlwcy9WaWRlb0J1Z3MuaHRtbCAqLwotCi0JCQkvKiBBc3NvcnRlZCB3ZWlyZG9zICovCi0JCQkvKiBXZSB0aGluayB0aGlzIG1heSBiZSBsaWtlIHRoZSBMQyBJSSAqLworCQkvKgorCQkgKiBBc3NvcnRlZCB3ZWlyZG9zCisJCSAqIFdlIHRoaW5rIHRoaXMgbWF5IGJlIGxpa2UgdGhlIExDIElJCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9MQzoKIAkJCWlmICh2aWR0ZXN0KSB7CiAJCQkJbWFjZmJfc2V0cGFsZXR0ZSA9IHY4X2JyYXppbF9zZXRwYWxldHRlOwpAQCAtODkxLDcgKzgxNywxMCBAQAogCQkJfQogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIkxDIik7CiAJCQlicmVhazsKLQkJCS8qIFdlIHRoaW5rIHRoaXMgbWF5IGJlIGxpa2UgdGhlIExDIElJICovCisKKwkJLyoKKwkJICogV2UgdGhpbmsgdGhpcyBtYXkgYmUgbGlrZSB0aGUgTEMgSUkKKwkJICovCiAJCWNhc2UgTUFDX01PREVMX0NDTDoKIAkJCWlmICh2aWR0ZXN0KSB7CiAJCQkJbWFjZmJfc2V0cGFsZXR0ZSA9IHY4X2JyYXppbF9zZXRwYWxldHRlOwpAQCAtOTAyLDMxICs4MzEsNDIgQEAKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJDb2xvciBDbGFzc2ljIik7CiAJCQlicmVhazsKIAotCQkJLyogQW5kIHdlICpkbyogbWVhbiAid2VpcmRvcyIgKi8KKwkJLyoKKwkJICogQW5kIHdlICpkbyogbWVhbiAid2VpcmRvcyIKKwkJICovCiAJCWNhc2UgTUFDX01PREVMX1RWOgogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIk1hYyBUViIpOwogCQkJYnJlYWs7CiAKLQkJCS8qIFRoZXNlIGRvbid0IGhhdmUgY29sb3VyLCBzbyBubyBuZWVkIHRvIHdvcnJ5ICovCisJCS8qCisJCSAqIFRoZXNlIGRvbid0IGhhdmUgY29sb3VyLCBzbyBubyBuZWVkIHRvIHdvcnJ5CisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9TRTMwOgogCQljYXNlIE1BQ19NT0RFTF9DTElJOgogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIk1vbm9jaHJvbWUiKTsKIAkJCWJyZWFrOwogCi0JCQkvKiBQb3dlcmJvb2tzIGFyZSBwYXJ0aWN1bGFybHkgZGlmZmljdWx0LiAgTWFueSBvZgotCQkJICAgdGhlbSBoYXZlIHNlcGFyYXRlIGZyYW1lYnVmZmVycyBmb3IgZXh0ZXJuYWwgYW5kCi0JCQkgICBpbnRlcm5hbCB2aWRlbywgd2hpY2ggaXMgYWRtaXR0ZWRseSBwcmV0dHkgY29vbCwKLQkJCSAgIGJ1dCB3aWxsIGJlIGEgYml0IG9mIGEgaGVhZGFjaGUgdG8gc3VwcG9ydCBoZXJlLgotCQkJICAgQWxzbywgbWFueSBvZiB0aGVtIGFyZSBncmF5c2NhbGUsIGFuZCB3ZSBkb24ndAotCQkJICAgcmVhbGx5IHN1cHBvcnQgdGhhdC4gKi8KKwkJLyoKKwkJICogUG93ZXJib29rcyBhcmUgcGFydGljdWxhcmx5IGRpZmZpY3VsdC4gIE1hbnkgb2YKKwkJICogdGhlbSBoYXZlIHNlcGFyYXRlIGZyYW1lYnVmZmVycyBmb3IgZXh0ZXJuYWwgYW5kCisJCSAqIGludGVybmFsIHZpZGVvLCB3aGljaCBpcyBhZG1pdHRlZGx5IHByZXR0eSBjb29sLAorCQkgKiBidXQgd2lsbCBiZSBhIGJpdCBvZiBhIGhlYWRhY2hlIHRvIHN1cHBvcnQgaGVyZS4KKwkJICogQWxzbywgbWFueSBvZiB0aGVtIGFyZSBncmF5c2NhbGUsIGFuZCB3ZSBkb24ndAorCQkgKiByZWFsbHkgc3VwcG9ydCB0aGF0LgorCQkgKi8KIAorCQkvKgorCQkgKiBTbG90IDAgUk9NIHNheXMgVElNLiBObyBleHRlcm5hbCB2aWRlby4gQiZXLgorCQkgKi8KIAkJY2FzZSBNQUNfTU9ERUxfUEIxNDA6CiAJCWNhc2UgTUFDX01PREVMX1BCMTQ1OgogCQljYXNlIE1BQ19NT0RFTF9QQjE3MDoKIAkJCXN0cmNweShtYWNmYl9maXguaWQsICJEREMiKTsKIAkJCWJyZWFrOwogCi0JCQkvKiBJbnRlcm5hbCBpcyBHU0MsIEV4dGVybmFsIChpZiBwcmVzZW50KSBpcyBWaVNDICovCisJCS8qCisJCSAqIEludGVybmFsIGlzIEdTQywgRXh0ZXJuYWwgKGlmIHByZXNlbnQpIGlzIFZpU0MKKwkJICovCiAJCWNhc2UgTUFDX01PREVMX1BCMTUwOgkvKiBubyBleHRlcm5hbCB2aWRlbyAqLwogCQljYXNlIE1BQ19NT0RFTF9QQjE2MDoKIAkJY2FzZSBNQUNfTU9ERUxfUEIxNjU6CkBAIC05MzYsMTMgKzg3NiwxNyBAQAogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIkdTQyIpOwogCQkJYnJlYWs7CiAKLQkJCS8qIEludGVybmFsIGlzIFRJTSwgRXh0ZXJuYWwgaXMgVmlTQyAqLworCQkvKgorCQkgKiBJbnRlcm5hbCBpcyBUSU0sIEV4dGVybmFsIGlzIFZpU0MKKwkJICovCiAJCWNhc2UgTUFDX01PREVMX1BCMTY1QzoKIAkJY2FzZSBNQUNfTU9ERUxfUEIxODBDOgogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIlRJTSIpOwogCQkJYnJlYWs7CiAKLQkJCS8qIEludGVybmFsIGlzIENTQywgRXh0ZXJuYWwgaXMgS2V5c3RvbmUrQXJpZWwuICovCisJCS8qCisJCSAqIEludGVybmFsIGlzIENTQywgRXh0ZXJuYWwgaXMgS2V5c3RvbmUrQXJpZWwuCisJCSAqLwogCQljYXNlIE1BQ19NT0RFTF9QQjE5MDoJLyogZXh0ZXJuYWwgdmlkZW8gaXMgb3B0aW9uYWwgKi8KIAkJY2FzZSBNQUNfTU9ERUxfUEI1MjA6CiAJCWNhc2UgTUFDX01PREVMX1BCMjUwOgpAQCAtOTU0LDcgKzg5OCw3IEBACiAJCQlzdHJjcHkobWFjZmJfZml4LmlkLCAiQ1NDIik7CiAJCQljc2NfY21hcF9yZWdzID0gaW9yZW1hcChDU0NfQkFTRSwgMHgxMDAwKTsKIAkJCWJyZWFrOwotCQkKKwogCQlkZWZhdWx0OgogCQkJc3RyY3B5KG1hY2ZiX2ZpeC5pZCwgIlVua25vd24iKTsKIAkJCWJyZWFrOwpAQCAtOTY5LDcgKzkxMyw3IEBACiAJZXJyID0gZmJfYWxsb2NfY21hcCgmZmJfaW5mby5jbWFwLCB2aWRlb19jbWFwX2xlbiwgMCk7CiAJaWYgKGVycikKIAkJZ290byBmYWlsX3VubWFwOwotCQorCiAJZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoJmZiX2luZm8pOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbF9kZWFsbG9jOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYWNtb2Rlcy5jIGIvZHJpdmVycy92aWRlby9tYWNtb2Rlcy5jCmluZGV4IDA4M2Y2MDMuLmFmODZjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWFjbW9kZXMuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hY21vZGVzLmMKQEAgLTMzLDYgKzMzLDEwIEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlIG1hY19tb2RlZGJbXSA9IHsKICAgICB7CisJLyogNTEyeDM4NCwgNjBIeiwgTm9uLUludGVybGFjZWQgKDE1LjY3IE1IeiBkb3QgY2xvY2spICovCisJIm1hYzIiLCA2MCwgNTEyLCAzODQsIDYzODI4LCA4MCwgMTYsIDE5LCAxLCAzMiwgMywKKwkwLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECisgICAgfSwgewogCS8qIDY0MHg0ODAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoMjUuMTc1IE1IeiBkb3RjbG9jaykgKi8KIAkibWFjNSIsIDYwLCA2NDAsIDQ4MCwgMzk3MjIsIDMyLCAzMiwgMzMsIDEwLCA5NiwgMiwKIAkwLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VECkBAIC00MSw2ICs0NSwxMCBAQAogCSJtYWM2IiwgNjcsIDY0MCwgNDgwLCAzMzMzNCwgODAsIDgwLCAzOSwgMywgNjQsIDMsCiAJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAogICAgIH0sIHsKKwkvKiA2NDB4ODcwLCA3NUh6IChwb3J0cmFpdCksIE5vbi1JbnRlcmxhY2VkICg1Ny4yOCBNSHogZG90IGNsb2NrKSAqLworCSJtYWM3IiwgNzUsIDY0MCwgODcwLCAxNzQ1NywgODAsIDMyLCA0MiwgMywgODAsIDMsCisJMCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRAorICAgIH0sIHsKIAkvKiA4MDB4NjAwLCA1NiBIeiwgTm9uLUludGVybGFjZWQgKDM2LjAwIE1IeiBkb3RjbG9jaykgKi8KIAkibWFjOSIsIDU2LCA4MDAsIDYwMCwgMjc3NzgsIDExMiwgNDAsIDIyLCAxLCA3MiwgMiwKIAlGQl9TWU5DX0hPUl9ISUdIX0FDVHxGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKQEAgLTEwNSwxMCArMTEzLDYgQEAKIAkibWFjMSIsIDYwLCA1MTIsIDM4NCwgcGl4Y2xvY2ssIGxlZnQsIHJpZ2h0LCB1cHBlciwgbG93ZXIsIGhzbGVuLCB2c2xlbiwKIAlzeW5jLCBGQl9WTU9ERV9JTlRFUkxBQ0VECiAgICAgfSwgewotCS8qIFZNT0RFXzUxMl8zODRfNjA6IDUxMngzODQsIDYwSHosIE5vbi1JbnRlcmxhY2VkICovCi0gICAgCSJtYWMyIiwgNjAsIDUxMiwgMzg0LCBwaXhjbG9jaywgbGVmdCwgcmlnaHQsIHVwcGVyLCBsb3dlciwgaHNsZW4sIHZzbGVuLAotCXN5bmMsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKLSAgICB9LCB7CiAJLyogVk1PREVfNjQwXzQ4MF81MEk6IDY0MHg0ODAsIDUwSHosIEludGVybGFjZWQgKFBBTCkgKi8KIAkibWFjMyIsIDUwLCA2NDAsIDQ4MCwgcGl4Y2xvY2ssIGxlZnQsIHJpZ2h0LCB1cHBlciwgbG93ZXIsIGhzbGVuLCB2c2xlbiwKIAlzeW5jLCBGQl9WTU9ERV9JTlRFUkxBQ0VECkBAIC0xMTcsMTAgKzEyMSw2IEBACiAJIm1hYzQiLCA2MCwgNjQwLCA0ODAsIHBpeGNsb2NrLCBsZWZ0LCByaWdodCwgdXBwZXIsIGxvd2VyLCBoc2xlbiwgdnNsZW4sCiAJc3luYywgRkJfVk1PREVfSU5URVJMQUNFRAogICAgIH0sIHsKLQkvKiBWTU9ERV82NDBfODcwXzc1UDogNjQweDg3MCwgNzVIeiAocG9ydHJhaXQpLCBOb24tSW50ZXJsYWNlZCAqLwotCSJtYWM3IiwgNzUsIDY0MCwgODcwLCBwaXhjbG9jaywgbGVmdCwgcmlnaHQsIHVwcGVyLCBsb3dlciwgaHNsZW4sIHZzbGVuLAotCXN5bmMsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKLSAgICB9LCB7CiAJLyogVk1PREVfNzY4XzU3Nl81MEk6IDc2OHg1NzYsIDUwSHogKFBBTCBmdWxsIGZyYW1lKSwgSW50ZXJsYWNlZCAqLwogCSJtYWM4IiwgNTAsIDc2OCwgNTc2LCBwaXhjbG9jaywgbGVmdCwgcmlnaHQsIHVwcGVyLCBsb3dlciwgaHNsZW4sIHZzbGVuLAogCXN5bmMsIEZCX1ZNT0RFX0lOVEVSTEFDRUQKQEAgLTEzNCwzOCArMTM0LDQyIEBACiAgICAgICoKICAgICAgKiAgVGhlc2UgTVVTVCBiZSBvcmRlcmVkIGluCiAgICAgICogICAgLSBpbmNyZWFzaW5nIHJlc29sdXRpb24KLSAgICAgKiAgICAtIGRlY3JlYXNpbmcgcmVmcmVzaCByYXRlCisgICAgICogICAgLSBkZWNyZWFzaW5nIHBpeGVsIGNsb2NrIHBlcmlvZAogICAgICAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1vZGVfbWFwIHsKICAgICBpbnQgdm1vZGU7CiAgICAgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZTsKIH0gbWFjX21vZGVzW10gPSB7CisgICAgLyogNTEyeDM4NCAqLworICAgIHsgVk1PREVfNTEyXzM4NF82MCwgJm1hY19tb2RlZGJbMF0gfSwKICAgICAvKiA2NDB4NDgwICovCi0gICAgeyBWTU9ERV82NDBfNDgwXzY3LCAmbWFjX21vZGVkYlsxXSB9LAotICAgIHsgVk1PREVfNjQwXzQ4MF82MCwgJm1hY19tb2RlZGJbMF0gfSwKKyAgICB7IFZNT0RFXzY0MF80ODBfNjAsICZtYWNfbW9kZWRiWzFdIH0sCisgICAgeyBWTU9ERV82NDBfNDgwXzY3LCAmbWFjX21vZGVkYlsyXSB9LAorICAgIC8qIDY0MHg4NzAgKi8KKyAgICB7IFZNT0RFXzY0MF84NzBfNzVQLCAmbWFjX21vZGVkYlszXSB9LAogICAgIC8qIDgwMHg2MDAgKi8KLSAgICB7IFZNT0RFXzgwMF82MDBfNzUsICZtYWNfbW9kZWRiWzVdIH0sCi0gICAgeyBWTU9ERV84MDBfNjAwXzcyLCAmbWFjX21vZGVkYls0XSB9LAotICAgIHsgVk1PREVfODAwXzYwMF82MCwgJm1hY19tb2RlZGJbM10gfSwKLSAgICB7IFZNT0RFXzgwMF82MDBfNTYsICZtYWNfbW9kZWRiWzJdIH0sCisgICAgeyBWTU9ERV84MDBfNjAwXzU2LCAmbWFjX21vZGVkYls0XSB9LAorICAgIHsgVk1PREVfODAwXzYwMF82MCwgJm1hY19tb2RlZGJbNV0gfSwKKyAgICB7IFZNT0RFXzgwMF82MDBfNzUsICZtYWNfbW9kZWRiWzddIH0sCisgICAgeyBWTU9ERV84MDBfNjAwXzcyLCAmbWFjX21vZGVkYls2XSB9LAogICAgIC8qIDgzMng2MjQgKi8KLSAgICB7IFZNT0RFXzgzMl82MjRfNzUsICZtYWNfbW9kZWRiWzZdIH0sCisgICAgeyBWTU9ERV84MzJfNjI0Xzc1LCAmbWFjX21vZGVkYls4XSB9LAogICAgIC8qIDEwMjR4NzY4ICovCi0gICAgeyBWTU9ERV8xMDI0Xzc2OF83NSwgJm1hY19tb2RlZGJbMTBdIH0sCi0gICAgeyBWTU9ERV8xMDI0Xzc2OF83NVYsICZtYWNfbW9kZWRiWzldIH0sCi0gICAgeyBWTU9ERV8xMDI0Xzc2OF83MCwgJm1hY19tb2RlZGJbOF0gfSwKLSAgICB7IFZNT0RFXzEwMjRfNzY4XzYwLCAmbWFjX21vZGVkYls3XSB9LAorICAgIHsgVk1PREVfMTAyNF83NjhfNjAsICZtYWNfbW9kZWRiWzldIH0sCisgICAgeyBWTU9ERV8xMDI0Xzc2OF83MCwgJm1hY19tb2RlZGJbMTBdIH0sCisgICAgeyBWTU9ERV8xMDI0Xzc2OF83NVYsICZtYWNfbW9kZWRiWzExXSB9LAorICAgIHsgVk1PREVfMTAyNF83NjhfNzUsICZtYWNfbW9kZWRiWzEyXSB9LAogICAgIC8qIDExNTJ4NzY4ICovCi0gICAgeyBWTU9ERV8xMTUyXzc2OF82MCwgJm1hY19tb2RlZGJbMTRdIH0sCisgICAgeyBWTU9ERV8xMTUyXzc2OF82MCwgJm1hY19tb2RlZGJbMTZdIH0sCiAgICAgLyogMTE1Mng4NzAgKi8KLSAgICB7IFZNT0RFXzExNTJfODcwXzc1LCAmbWFjX21vZGVkYlsxMV0gfSwKKyAgICB7IFZNT0RFXzExNTJfODcwXzc1LCAmbWFjX21vZGVkYlsxM10gfSwKICAgICAvKiAxMjgweDk2MCAqLwotICAgIHsgVk1PREVfMTI4MF85NjBfNzUsICZtYWNfbW9kZWRiWzEyXSB9LAorICAgIHsgVk1PREVfMTI4MF85NjBfNzUsICZtYWNfbW9kZWRiWzE0XSB9LAogICAgIC8qIDEyODB4MTAyNCAqLwotICAgIHsgVk1PREVfMTI4MF8xMDI0Xzc1LCAmbWFjX21vZGVkYlsxM10gfSwKKyAgICB7IFZNT0RFXzEyODBfMTAyNF83NSwgJm1hY19tb2RlZGJbMTVdIH0sCiAgICAgLyogMTYwMHgxMDI0ICovCi0gICAgeyBWTU9ERV8xNjAwXzEwMjRfNjAsICZtYWNfbW9kZWRiWzE1XSB9LAorICAgIHsgVk1PREVfMTYwMF8xMDI0XzYwLCAmbWFjX21vZGVkYlsxN10gfSwKICAgICB7IC0xLCBOVUxMIH0KIH07CiAKQEAgLTI5OSw3ICszMDMsNiBAQAogaW50IG1hY192YXJfdG9fdm1vZGUoY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIGludCAqdm1vZGUsCiAJCSAgICAgaW50ICpjbW9kZSkKIHsKLSAgICBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlID0gTlVMTDsKICAgICBjb25zdCBzdHJ1Y3QgbW9kZV9tYXAgKm1hcDsKIAogICAgIGlmICh2YXItPmJpdHNfcGVyX3BpeGVsIDw9IDgpCkBAIC0zMTEsOCArMzE0LDEzIEBACiAgICAgZWxzZQogCXJldHVybiAtRUlOVkFMOwogCisgICAgLyoKKyAgICAgKiBGaW5kIHRoZSBtYWNfbW9kZSB3aXRoIGEgbWF0Y2hpbmcgcmVzb2x1dGlvbiBvciBmYWlsaW5nIHRoYXQsIHRoZQorICAgICAqIGNsb3Nlc3QgbGFyZ2VyIHJlc29sdXRpb24uIFNraXAgbW9kZXMgd2l0aCBhIHNob3J0ZXIgcGl4ZWwgY2xvY2sgcGVyaW9kLgorICAgICAqLwogICAgIGZvciAobWFwID0gbWFjX21vZGVzOyBtYXAtPnZtb2RlICE9IC0xOyBtYXArKykgewotCW1vZGUgPSBtYXAtPm1vZGU7CisJY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZSA9IG1hcC0+bW9kZTsKKwogCWlmICh2YXItPnhyZXMgPiBtb2RlLT54cmVzIHx8IHZhci0+eXJlcyA+IG1vZGUtPnlyZXMpCiAJICAgIGNvbnRpbnVlOwogCWlmICh2YXItPnhyZXNfdmlydHVhbCA+IG1vZGUtPnhyZXMgfHwgdmFyLT55cmVzX3ZpcnR1YWwgPiBtb2RlLT55cmVzKQpAQCAtMzIyLDYgKzMzMCwyNCBAQAogCWlmICgodmFyLT52bW9kZSAmIEZCX1ZNT0RFX01BU0spICE9IG1vZGUtPnZtb2RlKQogCSAgICBjb250aW51ZTsKIAkqdm1vZGUgPSBtYXAtPnZtb2RlOworCisJLyoKKwkgKiBIYXZpbmcgZm91bmQgYSBnb29kIHJlc29sdXRpb24sIGZpbmQgdGhlIG1hdGNoaW5nIHBpeGVsIGNsb2NrCisJICogb3IgZmFpbGluZyB0aGF0LCB0aGUgY2xvc2VzdCBsb25nZXIgcGl4ZWwgY2xvY2sgcGVyaW9kLgorCSAqLworCW1hcCsrOworCXdoaWxlIChtYXAtPnZtb2RlICE9IC0xKSB7CisJICAgIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKmNsa19tb2RlID0gbWFwLT5tb2RlOworCisJICAgIGlmIChtb2RlLT54cmVzICE9IGNsa19tb2RlLT54cmVzIHx8IG1vZGUtPnlyZXMgIT0gY2xrX21vZGUtPnlyZXMpCisJCWJyZWFrOworCSAgICBpZiAodmFyLT5waXhjbG9jayA+IG1vZGUtPnBpeGNsb2NrKQorCSAgICAgICAgYnJlYWs7CisJICAgIGlmIChtb2RlLT52bW9kZSAhPSBjbGtfbW9kZS0+dm1vZGUpCisJCWNvbnRpbnVlOworCSAgICAqdm1vZGUgPSBtYXAtPnZtb2RlOworCSAgICBtYXArKzsKKwl9CiAJcmV0dXJuIDA7CiAgICAgfQogICAgIHJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wdnIyZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMKaW5kZXggNTNmOGYxMS4uZjk5NzUxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wdnIyZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jCkBAIC04MzEsNyArODMxLDcgQEAKIAlwcmludGsoS0VSTl9OT1RJQ0UgImZiJWQ6IHJlZ2lzdGVyaW5nIHdpdGggU1EgQVBJXG4iLCBmYl9pbmZvLT5ub2RlKTsKIAogCXB2cjJmYl9tYXAgPSBzcV9yZW1hcChmYl9pbmZvLT5maXguc21lbV9zdGFydCwgZmJfaW5mby0+Zml4LnNtZW1fbGVuLAotCQkJICAgICAgZmJfaW5mby0+Zml4LmlkLCBwZ3Byb3RfdmFsKFBBR0VfU0hBUkVEKSk7CisJCQkgICAgICBmYl9pbmZvLT5maXguaWQsIFBBR0VfU0hBUkVEKTsKIAogCXByaW50ayhLRVJOX05PVElDRSAiZmIlZDogTWFwcGVkIHZpZGVvIG1lbW9yeSB0byBTUSBhZGRyIDB4JWx4XG4iLAogCSAgICAgICBmYl9pbmZvLT5ub2RlLCBwdnIyZmJfbWFwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKaW5kZXggYTY5ODMwZC4uOGQ3NjUzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCkBAIC0xMDYsNiArMTA3LDcgQEAKICNkZWZpbmUgTERSQ05UUl9TUkMJMHgwMDAxMDAwMAogI2RlZmluZSBMRFJDTlRSX01SUwkweDAwMDAwMDAyCiAjZGVmaW5lIExEUkNOVFJfTVJDCTB4MDAwMDAwMDEKKyNkZWZpbmUgTERTUl9NUlMJMHgwMDAwMDEwMAogCiBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfcHJpdjsKIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuIHsKQEAgLTEyMiw4ICsxMjQsOCBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0OwogCXVuc2lnbmVkIGxvbmcgZnJhbWVfZW5kOwogCXVuc2lnbmVkIGxvbmcgcGFuX29mZnNldDsKLQl1bnNpZ25lZCBsb25nIG5ld19wYW5fb2Zmc2V0OwogCXdhaXRfcXVldWVfaGVhZF90IGZyYW1lX2VuZF93YWl0OworCXN0cnVjdCBjb21wbGV0aW9uIHZzeW5jX2NvbXBsZXRpb247CiB9OwogCiBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfcHJpdiB7CkBAIC0zNjYsMTkgKzM2OCw4IEBACiAJCX0KIAogCQkvKiBWU1lOQyBFbmQgKi8KLQkJaWYgKGxkaW50ciAmIExESU5UUl9WRVMpIHsKLQkJCXVuc2lnbmVkIGxvbmcgbGRyY250ciA9IGxjZGNfcmVhZChwcml2LCBfTERSQ05UUik7Ci0JCQkvKiBTZXQgdGhlIHNvdXJjZSBhZGRyZXNzIGZvciB0aGUgbmV4dCByZWZyZXNoICovCi0JCQlsY2RjX3dyaXRlX2NoYW5fbWlycm9yKGNoLCBMRFNBMVIsIGNoLT5kbWFfaGFuZGxlICsKLQkJCQkJICAgICAgIGNoLT5uZXdfcGFuX29mZnNldCk7Ci0JCQlpZiAobGNkY19jaGFuX2lzX3N1YmxjZChjaCkpCi0JCQkJbGNkY193cml0ZShjaC0+bGNkYywgX0xEUkNOVFIsCi0JCQkJCSAgIGxkcmNudHIgXiBMRFJDTlRSX1NSUyk7Ci0JCQllbHNlCi0JCQkJbGNkY193cml0ZShjaC0+bGNkYywgX0xEUkNOVFIsCi0JCQkJCSAgIGxkcmNudHIgXiBMRFJDTlRSX01SUyk7Ci0JCQljaC0+cGFuX29mZnNldCA9IGNoLT5uZXdfcGFuX29mZnNldDsKLQkJfQorCQlpZiAobGRpbnRyICYgTERJTlRSX1ZFUykKKwkJCWNvbXBsZXRlKCZjaC0+dnN5bmNfY29tcGxldGlvbik7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtNzY3LDI1ICs3NTgsNjkgQEAKIAkJCQkgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuICpjaCA9IGluZm8tPnBhcjsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfcHJpdiAqcHJpdiA9IGNoLT5sY2RjOworCXVuc2lnbmVkIGxvbmcgbGRyY250cjsKKwl1bnNpZ25lZCBsb25nIG5ld19wYW5fb2Zmc2V0OwogCi0JaWYgKGluZm8tPnZhci54b2Zmc2V0ID09IHZhci0+eG9mZnNldCAmJgotCSAgICBpbmZvLT52YXIueW9mZnNldCA9PSB2YXItPnlvZmZzZXQpCi0JCXJldHVybiAwOwkvKiBObyBjaGFuZ2UsIGRvIG5vdGhpbmcgKi8KLQotCWNoLT5uZXdfcGFuX29mZnNldCA9ICh2YXItPnlvZmZzZXQgKiBpbmZvLT5maXgubGluZV9sZW5ndGgpICsKKwluZXdfcGFuX29mZnNldCA9ICh2YXItPnlvZmZzZXQgKiBpbmZvLT5maXgubGluZV9sZW5ndGgpICsKIAkJKHZhci0+eG9mZnNldCAqIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgLyA4KSk7CiAKLQlpZiAoY2gtPm5ld19wYW5fb2Zmc2V0ICE9IGNoLT5wYW5fb2Zmc2V0KSB7Ci0JCXVuc2lnbmVkIGxvbmcgbGRpbnRyOwotCQlsZGludHIgPSBsY2RjX3JlYWQoY2gtPmxjZGMsIF9MRElOVFIpOwotCQlsZGludHIgfD0gTERJTlRSX1ZFRTsKLQkJbGNkY193cml0ZShjaC0+bGNkYywgX0xESU5UUiwgbGRpbnRyKTsKLQkJc2hfbW9iaWxlX2xjZGNfZGVmZXJyZWRfaW9fdG91Y2goaW5mbyk7Ci0JfQorCWlmIChuZXdfcGFuX29mZnNldCA9PSBjaC0+cGFuX29mZnNldCkKKwkJcmV0dXJuIDA7CS8qIE5vIGNoYW5nZSwgZG8gbm90aGluZyAqLworCisJbGRyY250ciA9IGxjZGNfcmVhZChwcml2LCBfTERSQ05UUik7CisKKwkvKiBTZXQgdGhlIHNvdXJjZSBhZGRyZXNzIGZvciB0aGUgbmV4dCByZWZyZXNoICovCisJbGNkY193cml0ZV9jaGFuX21pcnJvcihjaCwgTERTQTFSLCBjaC0+ZG1hX2hhbmRsZSArIG5ld19wYW5fb2Zmc2V0KTsKKwlpZiAobGNkY19jaGFuX2lzX3N1YmxjZChjaCkpCisJCWxjZGNfd3JpdGUoY2gtPmxjZGMsIF9MRFJDTlRSLCBsZHJjbnRyIF4gTERSQ05UUl9TUlMpOworCWVsc2UKKwkJbGNkY193cml0ZShjaC0+bGNkYywgX0xEUkNOVFIsIGxkcmNudHIgXiBMRFJDTlRSX01SUyk7CisKKwljaC0+cGFuX29mZnNldCA9IG5ld19wYW5fb2Zmc2V0OworCisJc2hfbW9iaWxlX2xjZGNfZGVmZXJyZWRfaW9fdG91Y2goaW5mbyk7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzaF9tb2JpbGVfd2FpdF9mb3JfdnN5bmMoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW4gKmNoID0gaW5mby0+cGFyOworCXVuc2lnbmVkIGxvbmcgbGRpbnRyOworCWludCByZXQ7CisKKwkvKiBFbmFibGUgVlN5bmMgRW5kIGludGVycnVwdCAqLworCWxkaW50ciA9IGxjZGNfcmVhZChjaC0+bGNkYywgX0xESU5UUik7CisJbGRpbnRyIHw9IExESU5UUl9WRUU7CisJbGNkY193cml0ZShjaC0+bGNkYywgX0xESU5UUiwgbGRpbnRyKTsKKworCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZjaC0+dnN5bmNfY29tcGxldGlvbiwKKwkJCQkJCQltc2Vjc190b19qaWZmaWVzKDEwMCkpOworCWlmICghcmV0KQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoX21vYmlsZV9pb2N0bChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IGNtZCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXR2YWw7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRkJJT19XQUlURk9SVlNZTkM6CisJCXJldHZhbCA9IHNoX21vYmlsZV93YWl0X2Zvcl92c3luYyhpbmZvKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAtRU5PSU9DVExDTUQ7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCisKIHN0YXRpYyBzdHJ1Y3QgZmJfb3BzIHNoX21vYmlsZV9sY2RjX29wcyA9IHsKIAkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKIAkuZmJfc2V0Y29scmVnCT0gc2hfbW9iaWxlX2xjZGNfc2V0Y29scmVnLApAQCAtNzk1LDYgKzgzMCw3IEBACiAJLmZiX2NvcHlhcmVhCT0gc2hfbW9iaWxlX2xjZGNfY29weWFyZWEsCiAJLmZiX2ltYWdlYmxpdAk9IHNoX21vYmlsZV9sY2RjX2ltYWdlYmxpdCwKIAkuZmJfcGFuX2Rpc3BsYXkgPSBzaF9tb2JpbGVfZmJfcGFuX2Rpc3BsYXksCisJLmZiX2lvY3RsICAgICAgID0gc2hfbW9iaWxlX2lvY3RsLAogfTsKIAogc3RhdGljIGludCBzaF9tb2JpbGVfbGNkY19zZXRfYnBwKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBpbnQgYnBwKQpAQCAtOTYyLDggKzk5OCw4IEBACiAJCQlnb3RvIGVycjE7CiAJCX0KIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+Y2hbaV0uZnJhbWVfZW5kX3dhaXQpOworCQlpbml0X2NvbXBsZXRpb24oJnByaXYtPmNoW2ldLnZzeW5jX2NvbXBsZXRpb24pOwogCQlwcml2LT5jaFtqXS5wYW5fb2Zmc2V0ID0gMDsKLQkJcHJpdi0+Y2hbal0ubmV3X3Bhbl9vZmZzZXQgPSAwOwogCiAJCXN3aXRjaCAocGRhdGEtPmNoW2ldLmNoYW4pIHsKIAkJY2FzZSBMQ0RDX0NIQU5fTUFJTkxDRDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmFsa3lyaWVmYi5jIGIvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmMKaW5kZXggNGJiOWEwYi4uNmI1MmJmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmMKKysrIGIvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmMKQEAgLTY5LDcgKzY5LDcgQEAKICNpZmRlZiBDT05GSUdfTUFDCiAvKiBXZSBkb24ndCB5ZXQgaGF2ZSBmdW5jdGlvbnMgdG8gcmVhZCB0aGUgUFJBTS4uLiBwZXJoYXBzIHdlIGNhbgogICAgYWRhcHQgdGhlbSBmcm9tIHRoZSBQUEMgY29kZT8gKi8KLXN0YXRpYyBpbnQgZGVmYXVsdF92bW9kZSA9IFZNT0RFXzY0MF80ODBfNjc7CitzdGF0aWMgaW50IGRlZmF1bHRfdm1vZGUgPSBWTU9ERV9DSE9PU0U7CiBzdGF0aWMgaW50IGRlZmF1bHRfY21vZGUgPSBDTU9ERV84OwogI2Vsc2UKIHN0YXRpYyBpbnQgZGVmYXVsdF92bW9kZSA9IFZNT0RFX05WUkFNOwpAQCAtMzI2LDExICszMjYsMTEgQEAKIAogI2lmZGVmIENPTkZJR19NQUMKIAlpZiAoIU1BQ0hfSVNfTUFDKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKCEobWFjX2JpX2RhdGEuaWQgPT0gTUFDX01PREVMX1E2MzAKIAkgICAgICAvKiBJJ20gbm90IHN1cmUgYWJvdXQgdGhpcyBvbmUgKi8KIAkgICAgfHwgbWFjX2JpX2RhdGEuaWQgPT0gTUFDX01PREVMX1A1ODgpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBIYXJkY29kZWQgYWRkcmVzc2VzLi4uIHdlbGNvbWUgdG8gNjhrIE1hY2ludG9zaCBjb3VudHJ5IDotKSAqLwogCWZyYW1lX2J1ZmZlcl9waHlzID0gMHhmOTAwMDAwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmFsa3lyaWVmYi5oIGIvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmgKaW5kZXggOTdhYWY3Yi4uZDc4NzQ0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmgKKysrIGIvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmgKQEAgLTEzNCwxNSArMTM0LDcgQEAKICAgICB7IDEwMjQsIDAgfSwKIAkxMDI0LCA3NjgKIH07Ci0KLS8qIFJlZ2lzdGVyIHZhbHVlcyBmb3IgODAweDYwMCwgNzJIeiBtb2RlICgxMSkgKi8KLXN0YXRpYyBzdHJ1Y3QgdmFsa3lyaWVfcmVndmFscyB2YWxreXJpZV9yZWdfaW5pdF8xMSA9IHsKLSAgICAxMywKLSAgICB7IDE3LCAyNywgMyB9LCAgLyogcGl4ZWwgY2xvY2sgPSA0OS42M01IeiBmb3IgVj03MS42Nkh6ICovCi0gICAgeyA4MDAsIDAgfSwKLQk4MDAsIDYwMAotfTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDICovCisjZW5kaWYgLyogIWRlZmluZWQgQ09ORklHX01BQyAqLwogCiAvKiBSZWdpc3RlciB2YWx1ZXMgZm9yIDgzMng2MjQsIDc1SHogbW9kZSAoMTMpICovCiBzdGF0aWMgc3RydWN0IHZhbGt5cmllX3JlZ3ZhbHMgdmFsa3lyaWVfcmVnX2luaXRfMTMgPSB7CkBAIC0xNTIsNiArMTQ0LDE0IEBACiAJODMyLCA2MjQKIH07CiAKKy8qIFJlZ2lzdGVyIHZhbHVlcyBmb3IgODAweDYwMCwgNzJIeiBtb2RlICgxMSkgKi8KK3N0YXRpYyBzdHJ1Y3QgdmFsa3lyaWVfcmVndmFscyB2YWxreXJpZV9yZWdfaW5pdF8xMSA9IHsKKyAgICAxMywKKyAgICB7IDE3LCAyNywgMyB9LCAgLyogcGl4ZWwgY2xvY2sgPSA0OS42M01IeiBmb3IgVj03MS42Nkh6ICovCisgICAgeyA4MDAsIDAgfSwKKwk4MDAsIDYwMAorfTsKKwogLyogUmVnaXN0ZXIgdmFsdWVzIGZvciA4MDB4NjAwLCA2MEh6IG1vZGUgKDEwKSAqLwogc3RhdGljIHN0cnVjdCB2YWxreXJpZV9yZWd2YWxzIHZhbGt5cmllX3JlZ19pbml0XzEwID0gewogICAgIDEyLApAQCAtMTg4LDI0ICsxODgsMTMgQEAKIAlOVUxMLAogCU5VTEwsCiAJJnZhbGt5cmllX3JlZ19pbml0XzEwLAotI2lmZGVmIENPTkZJR19NQUMKLQlOVUxMLAotCU5VTEwsCi0JJnZhbGt5cmllX3JlZ19pbml0XzEzLAotCU5VTEwsCi0JTlVMTCwKLQlOVUxMLAotCU5VTEwsCi0jZWxzZQogCSZ2YWxreXJpZV9yZWdfaW5pdF8xMSwKIAlOVUxMLAogCSZ2YWxreXJpZV9yZWdfaW5pdF8xMywKKyNpZm5kZWYgQ09ORklHX01BQwogCSZ2YWxreXJpZV9yZWdfaW5pdF8xNCwKIAkmdmFsa3lyaWVfcmVnX2luaXRfMTUsCiAJTlVMTCwKIAkmdmFsa3lyaWVfcmVnX2luaXRfMTcsCiAjZW5kaWYKLQlOVUxMLAotCU5VTEwsCi0JTlVMTAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCmluZGV4IDUwNWJlODguLjM2OWYyZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYwpAQCAtMjgsNyArMjgsNyBAQAogc3RydWN0IHZpcnRpb19iYWxsb29uCiB7CiAJc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXY7Ci0Jc3RydWN0IHZpcnRxdWV1ZSAqaW5mbGF0ZV92cSwgKmRlZmxhdGVfdnE7CisJc3RydWN0IHZpcnRxdWV1ZSAqaW5mbGF0ZV92cSwgKmRlZmxhdGVfdnEsICpzdGF0c192cTsKIAogCS8qIFdoZXJlIHRoZSBiYWxsb29uaW5nIHRocmVhZCB3YWl0cyBmb3IgY29uZmlnIHRvIGNoYW5nZS4gKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBjb25maWdfY2hhbmdlOwpAQCAtNDksNiArNDksMTAgQEAKIAkvKiBUaGUgYXJyYXkgb2YgcGZucyB3ZSB0ZWxsIHRoZSBIb3N0IGFib3V0LiAqLwogCXVuc2lnbmVkIGludCBudW1fcGZuczsKIAl1MzIgcGZuc1syNTZdOworCisJLyogTWVtb3J5IHN0YXRpc3RpY3MgKi8KKwlpbnQgbmVlZF9zdGF0c191cGRhdGU7CisJc3RydWN0IHZpcnRpb19iYWxsb29uX3N0YXQgc3RhdHNbVklSVElPX0JBTExPT05fU19OUl07CiB9OwogCiBzdGF0aWMgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKQEAgLTE1NCw2ICsxNTgsNzIgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc3RhdChzdHJ1Y3QgdmlydGlvX2JhbGxvb24gKnZiLCBpbnQgaWR4LAorCQkJICAgICAgIHUxNiB0YWcsIHU2NCB2YWwpCit7CisJQlVHX09OKGlkeCA+PSBWSVJUSU9fQkFMTE9PTl9TX05SKTsKKwl2Yi0+c3RhdHNbaWR4XS50YWcgPSB0YWc7CisJdmItPnN0YXRzW2lkeF0udmFsID0gdmFsOworfQorCisjZGVmaW5lIHBhZ2VzX3RvX2J5dGVzKHgpICgodTY0KSh4KSA8PCBQQUdFX1NISUZUKQorCitzdGF0aWMgdm9pZCB1cGRhdGVfYmFsbG9vbl9zdGF0cyhzdHJ1Y3QgdmlydGlvX2JhbGxvb24gKnZiKQoreworCXVuc2lnbmVkIGxvbmcgZXZlbnRzW05SX1ZNX0VWRU5UX0lURU1TXTsKKwlzdHJ1Y3Qgc3lzaW5mbyBpOworCWludCBpZHggPSAwOworCisJYWxsX3ZtX2V2ZW50cyhldmVudHMpOworCXNpX21lbWluZm8oJmkpOworCisJdXBkYXRlX3N0YXQodmIsIGlkeCsrLCBWSVJUSU9fQkFMTE9PTl9TX1NXQVBfSU4sCisJCQkJcGFnZXNfdG9fYnl0ZXMoZXZlbnRzW1BTV1BJTl0pKTsKKwl1cGRhdGVfc3RhdCh2YiwgaWR4KyssIFZJUlRJT19CQUxMT09OX1NfU1dBUF9PVVQsCisJCQkJcGFnZXNfdG9fYnl0ZXMoZXZlbnRzW1BTV1BPVVRdKSk7CisJdXBkYXRlX3N0YXQodmIsIGlkeCsrLCBWSVJUSU9fQkFMTE9PTl9TX01BSkZMVCwgZXZlbnRzW1BHTUFKRkFVTFRdKTsKKwl1cGRhdGVfc3RhdCh2YiwgaWR4KyssIFZJUlRJT19CQUxMT09OX1NfTUlORkxULCBldmVudHNbUEdGQVVMVF0pOworCXVwZGF0ZV9zdGF0KHZiLCBpZHgrKywgVklSVElPX0JBTExPT05fU19NRU1GUkVFLAorCQkJCXBhZ2VzX3RvX2J5dGVzKGkuZnJlZXJhbSkpOworCXVwZGF0ZV9zdGF0KHZiLCBpZHgrKywgVklSVElPX0JBTExPT05fU19NRU1UT1QsCisJCQkJcGFnZXNfdG9fYnl0ZXMoaS50b3RhbHJhbSkpOworfQorCisvKgorICogV2hpbGUgbW9zdCB2aXJ0cXVldWVzIGNvbW11bmljYXRlIGd1ZXN0LWluaXRpYXRlZCByZXF1ZXN0cyB0byB0aGUgaHlwZXJ2aXNvciwKKyAqIHRoZSBzdGF0cyBxdWV1ZSBvcGVyYXRlcyBpbiByZXZlcnNlLiAgVGhlIGRyaXZlciBpbml0aWFsaXplcyB0aGUgdmlydHF1ZXVlCisgKiB3aXRoIGEgc2luZ2xlIGJ1ZmZlci4gIEZyb20gdGhhdCBwb2ludCBmb3J3YXJkLCBhbGwgY29udmVyc2F0aW9ucyBjb25zaXN0IG9mCisgKiBhIGh5cGVydmlzb3IgcmVxdWVzdCAoYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24pIHdoaWNoIGRpcmVjdHMgdXMgdG8gcmVmaWxsCisgKiB0aGUgdmlydHF1ZXVlIHdpdGggYSBmcmVzaCBzdGF0cyBidWZmZXIuICBTaW5jZSBzdGF0cyBjb2xsZWN0aW9uIGNhbiBzbGVlcCwKKyAqIHdlIG5vdGlmeSBvdXIga3RocmVhZCB3aGljaCBkb2VzIHRoZSBhY3R1YWwgd29yayB2aWEgc3RhdHNfaGFuZGxlX3JlcXVlc3QoKS4KKyAqLworc3RhdGljIHZvaWQgc3RhdHNfcmVxdWVzdChzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKK3sKKwlzdHJ1Y3QgdmlydGlvX2JhbGxvb24gKnZiOworCXVuc2lnbmVkIGludCBsZW47CisKKwl2YiA9IHZxLT52cV9vcHMtPmdldF9idWYodnEsICZsZW4pOworCWlmICghdmIpCisJCXJldHVybjsKKwl2Yi0+bmVlZF9zdGF0c191cGRhdGUgPSAxOworCXdha2VfdXAoJnZiLT5jb25maWdfY2hhbmdlKTsKK30KKworc3RhdGljIHZvaWQgc3RhdHNfaGFuZGxlX3JlcXVlc3Qoc3RydWN0IHZpcnRpb19iYWxsb29uICp2YikKK3sKKwlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisKKwl2Yi0+bmVlZF9zdGF0c191cGRhdGUgPSAwOworCXVwZGF0ZV9iYWxsb29uX3N0YXRzKHZiKTsKKworCXZxID0gdmItPnN0YXRzX3ZxOworCXNnX2luaXRfb25lKCZzZywgdmItPnN0YXRzLCBzaXplb2YodmItPnN0YXRzKSk7CisJaWYgKHZxLT52cV9vcHMtPmFkZF9idWYodnEsICZzZywgMSwgMCwgdmIpIDwgMCkKKwkJQlVHKCk7CisJdnEtPnZxX29wcy0+a2ljayh2cSk7Cit9CisKIHN0YXRpYyB2b2lkIHZpcnRiYWxsb29uX2NoYW5nZWQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CiAJc3RydWN0IHZpcnRpb19iYWxsb29uICp2YiA9IHZkZXYtPnByaXY7CkBAIC0xOTAsOCArMjYwLDExIEBACiAJCXRyeV90b19mcmVlemUoKTsKIAkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHZiLT5jb25maWdfY2hhbmdlLAogCQkJCQkgKGRpZmYgPSB0b3dhcmRzX3RhcmdldCh2YikpICE9IDAKKwkJCQkJIHx8IHZiLT5uZWVkX3N0YXRzX3VwZGF0ZQogCQkJCQkgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpCiAJCQkJCSB8fCBmcmVlemluZyhjdXJyZW50KSk7CisJCWlmICh2Yi0+bmVlZF9zdGF0c191cGRhdGUpCisJCQlzdGF0c19oYW5kbGVfcmVxdWVzdCh2Yik7CiAJCWlmIChkaWZmID4gMCkKIAkJCWZpbGxfYmFsbG9vbih2YiwgZGlmZik7CiAJCWVsc2UgaWYgKGRpZmYgPCAwKQpAQCAtMjA0LDEwICsyNzcsMTAgQEAKIHN0YXRpYyBpbnQgdmlydGJhbGxvb25fcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CiAJc3RydWN0IHZpcnRpb19iYWxsb29uICp2YjsKLQlzdHJ1Y3QgdmlydHF1ZXVlICp2cXNbMl07Ci0JdnFfY2FsbGJhY2tfdCAqY2FsbGJhY2tzW10gPSB7IGJhbGxvb25fYWNrLCBiYWxsb29uX2FjayB9OwotCWNvbnN0IGNoYXIgKm5hbWVzW10gPSB7ICJpbmZsYXRlIiwgImRlZmxhdGUiIH07Ci0JaW50IGVycjsKKwlzdHJ1Y3QgdmlydHF1ZXVlICp2cXNbM107CisJdnFfY2FsbGJhY2tfdCAqY2FsbGJhY2tzW10gPSB7IGJhbGxvb25fYWNrLCBiYWxsb29uX2Fjaywgc3RhdHNfcmVxdWVzdCB9OworCWNvbnN0IGNoYXIgKm5hbWVzW10gPSB7ICJpbmZsYXRlIiwgImRlZmxhdGUiLCAic3RhdHMiIH07CisJaW50IGVyciwgbnZxczsKIAogCXZkZXYtPnByaXYgPSB2YiA9IGttYWxsb2Moc2l6ZW9mKCp2YiksIEdGUF9LRVJORUwpOwogCWlmICghdmIpIHsKQEAgLTIxOSwxNCArMjkyLDMxIEBACiAJdmItPm51bV9wYWdlcyA9IDA7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdmItPmNvbmZpZ19jaGFuZ2UpOwogCXZiLT52ZGV2ID0gdmRldjsKKwl2Yi0+bmVlZF9zdGF0c191cGRhdGUgPSAwOwogCi0JLyogV2UgZXhwZWN0IHR3byB2aXJ0cXVldWVzLiAqLwotCWVyciA9IHZkZXYtPmNvbmZpZy0+ZmluZF92cXModmRldiwgMiwgdnFzLCBjYWxsYmFja3MsIG5hbWVzKTsKKwkvKiBXZSBleHBlY3QgdHdvIHZpcnRxdWV1ZXM6IGluZmxhdGUgYW5kIGRlZmxhdGUsCisJICogYW5kIG9wdGlvbmFsbHkgc3RhdC4gKi8KKwludnFzID0gdmlydGlvX2hhc19mZWF0dXJlKHZiLT52ZGV2LCBWSVJUSU9fQkFMTE9PTl9GX1NUQVRTX1ZRKSA/IDMgOiAyOworCWVyciA9IHZkZXYtPmNvbmZpZy0+ZmluZF92cXModmRldiwgbnZxcywgdnFzLCBjYWxsYmFja3MsIG5hbWVzKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlX3ZiOwogCiAJdmItPmluZmxhdGVfdnEgPSB2cXNbMF07CiAJdmItPmRlZmxhdGVfdnEgPSB2cXNbMV07CisJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2Yi0+dmRldiwgVklSVElPX0JBTExPT05fRl9TVEFUU19WUSkpIHsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCQl2Yi0+c3RhdHNfdnEgPSB2cXNbMl07CisKKwkJLyoKKwkJICogUHJpbWUgdGhpcyB2aXJ0cXVldWUgd2l0aCBvbmUgYnVmZmVyIHNvIHRoZSBoeXBlcnZpc29yIGNhbgorCQkgKiB1c2UgaXQgdG8gc2lnbmFsIHVzIGxhdGVyLgorCQkgKi8KKwkJc2dfaW5pdF9vbmUoJnNnLCB2Yi0+c3RhdHMsIHNpemVvZiB2Yi0+c3RhdHMpOworCQlpZiAodmItPnN0YXRzX3ZxLT52cV9vcHMtPmFkZF9idWYodmItPnN0YXRzX3ZxLAorCQkJCQkJICAmc2csIDEsIDAsIHZiKSA8IDApCisJCQlCVUcoKTsKKwkJdmItPnN0YXRzX3ZxLT52cV9vcHMtPmtpY2sodmItPnN0YXRzX3ZxKTsKKwl9CiAKIAl2Yi0+dGhyZWFkID0ga3RocmVhZF9ydW4oYmFsbG9vbiwgdmIsICJ2YmFsbG9vbiIpOwogCWlmIChJU19FUlIodmItPnRocmVhZCkpIHsKQEAgLTI2NCw3ICszNTQsMTAgQEAKIAlrZnJlZSh2Yik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmVhdHVyZXNbXSA9IHsgVklSVElPX0JBTExPT05fRl9NVVNUX1RFTExfSE9TVCB9Oworc3RhdGljIHVuc2lnbmVkIGludCBmZWF0dXJlc1tdID0geworCVZJUlRJT19CQUxMT09OX0ZfTVVTVF9URUxMX0hPU1QsCisJVklSVElPX0JBTExPT05fRl9TVEFUU19WUSwKK307CiAKIHN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RyaXZlciB2aXJ0aW9fYmFsbG9vbl9kcml2ZXIgPSB7CiAJLmZlYXR1cmVfdGFibGUgPSBmZWF0dXJlcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwppbmRleCAyOGQ5Y2Y3Li4xYjY1NzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCkBAIC00NzMsNyArNDczLDggQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2cSwgbiwgJnZkZXYtPnZxcywgbGlzdCkgewogCQlpbmZvID0gdnEtPnByaXY7Ci0JCWlmICh2cF9kZXYtPnBlcl92cV92ZWN0b3JzKQorCQlpZiAodnBfZGV2LT5wZXJfdnFfdmVjdG9ycyAmJgorCQkJaW5mby0+bXNpeF92ZWN0b3IgIT0gVklSVElPX01TSV9OT19WRUNUT1IpCiAJCQlmcmVlX2lycSh2cF9kZXYtPm1zaXhfZW50cmllc1tpbmZvLT5tc2l4X3ZlY3Rvcl0udmVjdG9yLAogCQkJCSB2cSk7CiAJCXZwX2RlbF92cSh2cSk7CkBAIC03MDIsNyArNzAzLDcgQEAKIAkubmFtZQkJPSAidmlydGlvLXBjaSIsCiAJLmlkX3RhYmxlCT0gdmlydGlvX3BjaV9pZF90YWJsZSwKIAkucHJvYmUJCT0gdmlydGlvX3BjaV9wcm9iZSwKLQkucmVtb3ZlCQk9IHZpcnRpb19wY2lfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodmlydGlvX3BjaV9yZW1vdmUpLAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kCT0gdmlydGlvX3BjaV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gdmlydGlvX3BjaV9yZXN1bWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwppbmRleCBmYmQyZWNkLi4wZGI5MDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKQEAgLTIxLDYgKzIxLDI0IEBACiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCisvKiB2aXJ0aW8gZ3Vlc3QgaXMgY29tbXVuaWNhdGluZyB3aXRoIGEgdmlydHVhbCAiZGV2aWNlIiB0aGF0IGFjdHVhbGx5IHJ1bnMgb24KKyAqIGEgaG9zdCBwcm9jZXNzb3IuICBNZW1vcnkgYmFycmllcnMgYXJlIHVzZWQgdG8gY29udHJvbCBTTVAgZWZmZWN0cy4gKi8KKyNpZmRlZiBDT05GSUdfU01QCisvKiBXaGVyZSBwb3NzaWJsZSwgdXNlIFNNUCBiYXJyaWVycyB3aGljaCBhcmUgbW9yZSBsaWdodHdlaWdodCB0aGFuIG1hbmRhdG9yeQorICogYmFycmllcnMsIGJlY2F1c2UgbWFuZGF0b3J5IGJhcnJpZXJzIGNvbnRyb2wgTU1JTyBlZmZlY3RzIG9uIGFjY2Vzc2VzCisgKiB0aHJvdWdoIHJlbGF4ZWQgbWVtb3J5IEkvTyB3aW5kb3dzICh3aGljaCB2aXJ0aW8gZG9lcyBub3QgdXNlKS4gKi8KKyNkZWZpbmUgdmlydGlvX21iKCkgc21wX21iKCkKKyNkZWZpbmUgdmlydGlvX3JtYigpIHNtcF9ybWIoKQorI2RlZmluZSB2aXJ0aW9fd21iKCkgc21wX3dtYigpCisjZWxzZQorLyogV2UgbXVzdCBmb3JjZSBtZW1vcnkgb3JkZXJpbmcgZXZlbiBpZiBndWVzdCBpcyBVUCBzaW5jZSBob3N0IGNvdWxkIGJlCisgKiBydW5uaW5nIG9uIGFub3RoZXIgQ1BVLCBidXQgU01QIGJhcnJpZXJzIGFyZSBkZWZpbmVkIHRvIGJhcnJpZXIoKSBpbiB0aGF0CisgKiBjb25maWd1cmF0aW9uLiBTbyBmYWxsIGJhY2sgdG8gbWFuZGF0b3J5IGJhcnJpZXJzIGluc3RlYWQuICovCisjZGVmaW5lIHZpcnRpb19tYigpIG1iKCkKKyNkZWZpbmUgdmlydGlvX3JtYigpIHJtYigpCisjZGVmaW5lIHZpcnRpb193bWIoKSB3bWIoKQorI2VuZGlmCisKICNpZmRlZiBERUJVRwogLyogRm9yIGRldmVsb3BtZW50LCB3ZSB3YW50IHRvIGNyYXNoIHdoZW5ldmVyIHRoZSByaW5nIGlzIHNjcmV3ZWQuICovCiAjZGVmaW5lIEJBRF9SSU5HKF92cSwgZm10LCBhcmdzLi4uKQkJCQlcCkBAIC0zNiwxMCArNTQsOSBAQAogCQkJcGFuaWMoIiVzOmluX3VzZSA9ICVpXG4iLAkJXAogCQkJICAgICAgKF92cSktPnZxLm5hbWUsIChfdnEpLT5pbl91c2UpOwlcCiAJCShfdnEpLT5pbl91c2UgPSBfX0xJTkVfXzsJCQlcCi0JCW1iKCk7CQkJCQkJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIEVORF9VU0UoX3ZxKSBcCi0JZG8geyBCVUdfT04oIShfdnEpLT5pbl91c2UpOyAoX3ZxKS0+aW5fdXNlID0gMDsgbWIoKTsgfSB3aGlsZSgwKQorCWRvIHsgQlVHX09OKCEoX3ZxKS0+aW5fdXNlKTsgKF92cSktPmluX3VzZSA9IDA7IH0gd2hpbGUoMCkKICNlbHNlCiAjZGVmaW5lIEJBRF9SSU5HKF92cSwgZm10LCBhcmdzLi4uKQkJCQlcCiAJZG8gewkJCQkJCQlcCkBAIC0yMjEsMTMgKzIzOCwxMyBAQAogCVNUQVJUX1VTRSh2cSk7CiAJLyogRGVzY3JpcHRvcnMgYW5kIGF2YWlsYWJsZSBhcnJheSBuZWVkIHRvIGJlIHNldCBiZWZvcmUgd2UgZXhwb3NlIHRoZQogCSAqIG5ldyBhdmFpbGFibGUgYXJyYXkgZW50cmllcy4gKi8KLQl3bWIoKTsKKwl2aXJ0aW9fd21iKCk7CiAKIAl2cS0+dnJpbmcuYXZhaWwtPmlkeCArPSB2cS0+bnVtX2FkZGVkOwogCXZxLT5udW1fYWRkZWQgPSAwOwogCiAJLyogTmVlZCB0byB1cGRhdGUgYXZhaWwgaW5kZXggYmVmb3JlIGNoZWNraW5nIGlmIHdlIHNob3VsZCBub3RpZnkgKi8KLQltYigpOworCXZpcnRpb19tYigpOwogCiAJaWYgKCEodnEtPnZyaW5nLnVzZWQtPmZsYWdzICYgVlJJTkdfVVNFRF9GX05PX05PVElGWSkpCiAJCS8qIFByb2Qgb3RoZXIgc2lkZSB0byB0ZWxsIGl0IGFib3V0IGNoYW5nZXMuICovCkBAIC0yODYsNyArMzAzLDcgQEAKIAl9CiAKIAkvKiBPbmx5IGdldCB1c2VkIGFycmF5IGVudHJpZXMgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gZXhwb3NlZCBieSBob3N0LiAqLwotCXJtYigpOworCXZpcnRpb19ybWIoKTsKIAogCWkgPSB2cS0+dnJpbmcudXNlZC0+cmluZ1t2cS0+bGFzdF91c2VkX2lkeCV2cS0+dnJpbmcubnVtXS5pZDsKIAkqbGVuID0gdnEtPnZyaW5nLnVzZWQtPnJpbmdbdnEtPmxhc3RfdXNlZF9pZHgldnEtPnZyaW5nLm51bV0ubGVuOwpAQCAtMzI0LDcgKzM0MSw3IEBACiAJLyogV2Ugb3B0aW1pc3RpY2FsbHkgdHVybiBiYWNrIG9uIGludGVycnVwdHMsIHRoZW4gY2hlY2sgaWYgdGhlcmUgd2FzCiAJICogbW9yZSB0byBkby4gKi8KIAl2cS0+dnJpbmcuYXZhaWwtPmZsYWdzICY9IH5WUklOR19BVkFJTF9GX05PX0lOVEVSUlVQVDsKLQltYigpOworCXZpcnRpb19tYigpOwogCWlmICh1bmxpa2VseShtb3JlX3VzZWQodnEpKSkgewogCQlFTkRfVVNFKHZxKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMzM0LDYgKzM1MSwzMCBAQAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdm9pZCAqdnJpbmdfZGV0YWNoX3VudXNlZF9idWYoc3RydWN0IHZpcnRxdWV1ZSAqX3ZxKQoreworCXN0cnVjdCB2cmluZ192aXJ0cXVldWUgKnZxID0gdG9fdnZxKF92cSk7CisJdW5zaWduZWQgaW50IGk7CisJdm9pZCAqYnVmOworCisJU1RBUlRfVVNFKHZxKTsKKworCWZvciAoaSA9IDA7IGkgPCB2cS0+dnJpbmcubnVtOyBpKyspIHsKKwkJaWYgKCF2cS0+ZGF0YVtpXSkKKwkJCWNvbnRpbnVlOworCQkvKiBkZXRhY2hfYnVmIGNsZWFycyBkYXRhLCBzbyBncmFiIGl0IG5vdy4gKi8KKwkJYnVmID0gdnEtPmRhdGFbaV07CisJCWRldGFjaF9idWYodnEsIGkpOworCQlFTkRfVVNFKHZxKTsKKwkJcmV0dXJuIGJ1ZjsKKwl9CisJLyogVGhhdCBzaG91bGQgaGF2ZSBmcmVlZCBldmVyeXRoaW5nLiAqLworCUJVR19PTih2cS0+bnVtX2ZyZWUgIT0gdnEtPnZyaW5nLm51bSk7CisKKwlFTkRfVVNFKHZxKTsKKwlyZXR1cm4gTlVMTDsKK30KKwogaXJxcmV0dXJuX3QgdnJpbmdfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKl92cSkKIHsKIAlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSA9IHRvX3Z2cShfdnEpOwpAQCAtMzYwLDYgKzQwMSw3IEBACiAJLmtpY2sgPSB2cmluZ19raWNrLAogCS5kaXNhYmxlX2NiID0gdnJpbmdfZGlzYWJsZV9jYiwKIAkuZW5hYmxlX2NiID0gdnJpbmdfZW5hYmxlX2NiLAorCS5kZXRhY2hfdW51c2VkX2J1ZiA9IHZyaW5nX2RldGFjaF91bnVzZWRfYnVmLAogfTsKIAogc3RydWN0IHZpcnRxdWV1ZSAqdnJpbmdfbmV3X3ZpcnRxdWV1ZSh1bnNpZ25lZCBpbnQgbnVtLApAQCAtNDA2LDggKzQ0OCwxMSBAQAogCS8qIFB1dCBldmVyeXRoaW5nIGluIGZyZWUgbGlzdHMuICovCiAJdnEtPm51bV9mcmVlID0gbnVtOwogCXZxLT5mcmVlX2hlYWQgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBudW0tMTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBudW0tMTsgaSsrKSB7CiAJCXZxLT52cmluZy5kZXNjW2ldLm5leHQgPSBpKzE7CisJCXZxLT5kYXRhW2ldID0gTlVMTDsKKwl9CisJdnEtPmRhdGFbaV0gPSBOVUxMOwogCiAJcmV0dXJuICZ2cS0+dnE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2FyN193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYXI3X3dkdC5jCmluZGV4IDJlOTRiNzEuLjJiYjk1Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYXI3X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYXI3X3dkdC5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXI3L2FyNy5oPgpAQCAtODAsNiArODEsOCBAQAogLyogUG9pbnRlciB0byB0aGUgcmVtYXBwZWQgV0RUIElPIHNwYWNlICovCiBzdGF0aWMgc3RydWN0IGFyN193ZHQgKmFyN193ZHQ7CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrICp2YnVzX2NsazsKKwogc3RhdGljIHZvaWQgYXI3X3dkdF9raWNrKHUzMiB2YWx1ZSkKIHsKIAlXUklURV9SRUcoYXI3X3dkdC0+a2lja19sb2NrLCAweDU1NTUpOwpAQCAtMTM4LDE3ICsxNDEsMTkgQEAKIHN0YXRpYyB2b2lkIGFyN193ZHRfdXBkYXRlX21hcmdpbihpbnQgbmV3X21hcmdpbikKIHsKIAl1MzIgY2hhbmdlOworCXUzMiB2YnVzX3JhdGU7CiAKLQljaGFuZ2UgPSBuZXdfbWFyZ2luICogKGFyN192YnVzX2ZyZXEoKSAvIHByZXNjYWxlX3ZhbHVlKTsKKwl2YnVzX3JhdGUgPSBjbGtfZ2V0X3JhdGUodmJ1c19jbGspOworCWNoYW5nZSA9IG5ld19tYXJnaW4gKiAodmJ1c19yYXRlIC8gcHJlc2NhbGVfdmFsdWUpOwogCWlmIChjaGFuZ2UgPCAxKQogCQljaGFuZ2UgPSAxOwogCWlmIChjaGFuZ2UgPiAweGZmZmYpCiAJCWNoYW5nZSA9IDB4ZmZmZjsKIAlhcjdfd2R0X2NoYW5nZShjaGFuZ2UpOwotCW1hcmdpbiA9IGNoYW5nZSAqIHByZXNjYWxlX3ZhbHVlIC8gYXI3X3ZidXNfZnJlcSgpOworCW1hcmdpbiA9IGNoYW5nZSAqIHByZXNjYWxlX3ZhbHVlIC8gdmJ1c19yYXRlOwogCXByaW50ayhLRVJOX0lORk8gRFJWTkFNRQogCSAgICAgICAiOiB0aW1lciBtYXJnaW4gJWQgc2Vjb25kcyAocHJlc2NhbGUgJWQsIGNoYW5nZSAlZCwgZnJlcSAlZClcbiIsCi0JICAgICAgIG1hcmdpbiwgcHJlc2NhbGVfdmFsdWUsIGNoYW5nZSwgYXI3X3ZidXNfZnJlcSgpKTsKKwkgICAgICAgbWFyZ2luLCBwcmVzY2FsZV92YWx1ZSwgY2hhbmdlLCB2YnVzX3JhdGUpOwogfQogCiBzdGF0aWMgdm9pZCBhcjdfd2R0X2VuYWJsZV93ZHQodm9pZCkKQEAgLTI5OCw2ICszMDMsMTMgQEAKIAkJZ290byBvdXRfbWVtX3JlZ2lvbjsKIAl9CiAKKwl2YnVzX2NsayA9IGNsa19nZXQoTlVMTCwgInZidXMiKTsKKwlpZiAoSVNfRVJSKHZidXNfY2xrKSkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBjb3VsZCBub3QgZ2V0IHZidXMgY2xvY2tcbiIpOworCQlyYyA9IFBUUl9FUlIodmJ1c19jbGspOworCQlnb3RvIG91dF9tZW1fcmVnaW9uOworCX0KKwogCWFyN193ZHRfZGlzYWJsZV93ZHQoKTsKIAlhcjdfd2R0X3ByZXNjYWxlKHByZXNjYWxlX3ZhbHVlKTsKIAlhcjdfd2R0X3VwZGF0ZV9tYXJnaW4obWFyZ2luKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYwppbmRleCA0MzBhNTg0Li5jN2E5NDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jCkBAIC05Niw5ICs5Niw2IEBACiB7CiAJc3Bpbl9sb2NrKCZpb19sb2NrKTsKIAotCWlmICh3ZHRfY2xrKQotCQljbGtfc2V0X3JhdGUod2R0X2NsaywgMSk7Ci0KIAkvKiBzdG9wIGNvdW50ZXIsIGluaXRpYXRlIGNvdW50ZXIgcmVzZXQgKi8KIAlfX3Jhd193cml0ZWwoUkVTRVRfQ09VTlQsIFdEVElNX0NUUkwod2R0X2Jhc2UpKTsKIAkvKndhaXQgZm9yIHJlc2V0IHRvIGNvbXBsZXRlLiAxMDAlIGd1YXJhbnRlZSBldmVudCAqLwpAQCAtMTI1LDE5ICsxMjIsMjUgQEAKIAlzcGluX2xvY2soJmlvX2xvY2spOwogCiAJX19yYXdfd3JpdGVsKDAsIFdEVElNX0NUUkwod2R0X2Jhc2UpKTsJLypzdG9wIGNvdW50ZXIgKi8KLQlpZiAod2R0X2NsaykKLQkJY2xrX3NldF9yYXRlKHdkdF9jbGssIDApOwogCiAJc3Bpbl91bmxvY2soJmlvX2xvY2spOwogfQogCiBzdGF0aWMgaW50IHBueDQwMDhfd2R0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CisJaW50IHJldDsKKwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KFdEVF9JTl9VU0UsICZ3ZHRfc3RhdHVzKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWNsZWFyX2JpdChXRFRfT0tfVE9fQ0xPU0UsICZ3ZHRfc3RhdHVzKTsKIAorCXJldCA9IGNsa19lbmFibGUod2R0X2Nsayk7CisJaWYgKHJldCkgeworCQljbGVhcl9iaXQoV0RUX0lOX1VTRSwgJndkdF9zdGF0dXMpOworCQlyZXR1cm4gcmV0OworCX0KKwogCXdkdF9lbmFibGUoKTsKIAogCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKQEAgLTIyNSw2ICsyMjgsNyBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVRDSERPRzogRGV2aWNlIGNsb3NlZCB1bmV4cGVjdGRseVxuIik7CiAKIAl3ZHRfZGlzYWJsZSgpOworCWNsa19kaXNhYmxlKHdkdF9jbGspOwogCWNsZWFyX2JpdChXRFRfSU5fVVNFLCAmd2R0X3N0YXR1cyk7CiAJY2xlYXJfYml0KFdEVF9PS19UT19DTE9TRSwgJndkdF9zdGF0dXMpOwogCkBAIC0yNzMsMjUgKzI3NywzMyBAQAogCX0KIAl3ZHRfYmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKHJlcy0+c3RhcnQpOwogCi0Jd2R0X2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIndkdF9jayIpOworCXdkdF9jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwogCWlmIChJU19FUlIod2R0X2NsaykpIHsKIAkJcmV0ID0gUFRSX0VSUih3ZHRfY2xrKTsKIAkJcmVsZWFzZV9yZXNvdXJjZSh3ZHRfbWVtKTsKIAkJa2ZyZWUod2R0X21lbSk7CiAJCWdvdG8gb3V0OwotCX0gZWxzZQotCQljbGtfc2V0X3JhdGUod2R0X2NsaywgMSk7CisJfQorCisJcmV0ID0gY2xrX2VuYWJsZSh3ZHRfY2xrKTsKKwlpZiAocmV0KSB7CisJCXJlbGVhc2VfcmVzb3VyY2Uod2R0X21lbSk7CisJCWtmcmVlKHdkdF9tZW0pOworCQlnb3RvIG91dDsKKwl9CiAKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZwbng0MDA4X3dkdF9taXNjZGV2KTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgTU9EVUxFX05BTUUgImNhbm5vdCByZWdpc3RlciBtaXNjIGRldmljZVxuIik7CiAJCXJlbGVhc2VfcmVzb3VyY2Uod2R0X21lbSk7CiAJCWtmcmVlKHdkdF9tZW0pOwotCQljbGtfc2V0X3JhdGUod2R0X2NsaywgMCk7CisJCWNsa19kaXNhYmxlKHdkdF9jbGspOworCQljbGtfcHV0KHdkdF9jbGspOwogCX0gZWxzZSB7CiAJCWJvb3Rfc3RhdHVzID0gKF9fcmF3X3JlYWRsKFdEVElNX1JFUyh3ZHRfYmFzZSkpICYgV0RPR19SRVNFVCkgPwogCQkgICAgV0RJT0ZfQ0FSRFJFU0VUIDogMDsKIAkJd2R0X2Rpc2FibGUoKTsJCS8qZGlzYWJsZSBmb3Igbm93ICovCisJCWNsa19kaXNhYmxlKHdkdF9jbGspOwogCQlzZXRfYml0KFdEVF9ERVZJQ0VfSU5JVEVELCAmd2R0X3N0YXR1cyk7CiAJfQogCkBAIC0zMDIsMTEgKzMxNCwxMCBAQAogc3RhdGljIGludCBfX2RldmV4aXQgcG54NDAwOF93ZHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJbWlzY19kZXJlZ2lzdGVyKCZwbng0MDA4X3dkdF9taXNjZGV2KTsKLQlpZiAod2R0X2NsaykgewotCQljbGtfc2V0X3JhdGUod2R0X2NsaywgMCk7Ci0JCWNsa19wdXQod2R0X2Nsayk7Ci0JCXdkdF9jbGsgPSBOVUxMOwotCX0KKworCWNsa19kaXNhYmxlKHdkdF9jbGspOworCWNsa19wdXQod2R0X2Nsayk7CisKIAlpZiAod2R0X21lbSkgewogCQlyZWxlYXNlX3Jlc291cmNlKHdkdF9tZW0pOwogCQlrZnJlZSh3ZHRfbWVtKTsKZGlmZiAtLWdpdCBhL2ZzL2Jpby5jIGIvZnMvYmlvLmMKaW5kZXggODgwOTRhZi4uMGJkYTI4OSAxMDA2NDQKLS0tIGEvZnMvYmlvLmMKKysrIGIvZnMvYmlvLmMKQEAgLTUwNywxMCArNTA3LDggQEAKIAlpbnQgbnJfcGFnZXM7CiAKIAlucl9wYWdlcyA9ICgocXVldWVfbWF4X3NlY3RvcnMocSkgPDwgOSkgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwotCWlmIChucl9wYWdlcyA+IHF1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEpKQotCQlucl9wYWdlcyA9IHF1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEpOwotCWlmIChucl9wYWdlcyA+IHF1ZXVlX21heF9od19zZWdtZW50cyhxKSkKLQkJbnJfcGFnZXMgPSBxdWV1ZV9tYXhfaHdfc2VnbWVudHMocSk7CisJaWYgKG5yX3BhZ2VzID4gcXVldWVfbWF4X3NlZ21lbnRzKHEpKQorCQlucl9wYWdlcyA9IHF1ZXVlX21heF9zZWdtZW50cyhxKTsKIAogCXJldHVybiBucl9wYWdlczsKIH0KQEAgLTU1Nyw3ICs1NTUsNyBAQAogCQkJCQkuYmlfcncgPSBiaW8tPmJpX3J3LAogCQkJCX07CiAKLQkJCQlpZiAocS0+bWVyZ2VfYnZlY19mbihxLCAmYnZtLCBwcmV2KSA8IGxlbikgeworCQkJCWlmIChxLT5tZXJnZV9idmVjX2ZuKHEsICZidm0sIHByZXYpICE9IHByZXYtPmJ2X2xlbikgewogCQkJCQlwcmV2LT5idl9sZW4gLT0gbGVuOwogCQkJCQlyZXR1cm4gMDsKIAkJCQl9CkBAIC01NzUsOCArNTczLDcgQEAKIAkgKiBtYWtlIHRoaXMgdG9vIGNvbXBsZXguCiAJICovCiAKLQl3aGlsZSAoYmlvLT5iaV9waHlzX3NlZ21lbnRzID49IHF1ZXVlX21heF9waHlzX3NlZ21lbnRzKHEpCi0JICAgICAgIHx8IGJpby0+YmlfcGh5c19zZWdtZW50cyA+PSBxdWV1ZV9tYXhfaHdfc2VnbWVudHMocSkpIHsKKwl3aGlsZSAoYmlvLT5iaV9waHlzX3NlZ21lbnRzID49IHF1ZXVlX21heF9zZWdtZW50cyhxKSkgewogCiAJCWlmIChyZXRyaWVkX3NlZ21lbnRzKQogCQkJcmV0dXJuIDA7CkBAIC02MTEsNyArNjA4LDcgQEAKIAkJICogbWVyZ2VfYnZlY19mbigpIHJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIGl0IGNhbiBhY2NlcHQKIAkJICogYXQgdGhpcyBvZmZzZXQKIAkJICovCi0JCWlmIChxLT5tZXJnZV9idmVjX2ZuKHEsICZidm0sIGJ2ZWMpIDwgbGVuKSB7CisJCWlmIChxLT5tZXJnZV9idmVjX2ZuKHEsICZidm0sIGJ2ZWMpICE9IGJ2ZWMtPmJ2X2xlbikgewogCQkJYnZlYy0+YnZfcGFnZSA9IE5VTEw7CiAJCQlidmVjLT5idl9sZW4gPSAwOwogCQkJYnZlYy0+YnZfb2Zmc2V0ID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2RsbS9hc3QuYyBiL2ZzL2RsbS9hc3QuYwppbmRleCBkYzJhZDYwLi40MzE0ZjBkIDEwMDY0NAotLS0gYS9mcy9kbG0vYXN0LmMKKysrIGIvZnMvZGxtL2FzdC5jCkBAIC0yLDcgKzIsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKioKICoqICBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiogIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqKgogKiogIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAogKiogIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCkBAIC0zMywxMCArMzMsMTAgQEAKIAlzcGluX3VubG9jaygmYXN0X3F1ZXVlX2xvY2spOwogfQogCi12b2lkIGRsbV9hZGRfYXN0KHN0cnVjdCBkbG1fbGtiICpsa2IsIGludCB0eXBlLCBpbnQgYmFzdG1vZGUpCit2b2lkIGRsbV9hZGRfYXN0KHN0cnVjdCBkbG1fbGtiICpsa2IsIGludCB0eXBlLCBpbnQgbW9kZSkKIHsKIAlpZiAobGtiLT5sa2JfZmxhZ3MgJiBETE1fSUZMX1VTRVIpIHsKLQkJZGxtX3VzZXJfYWRkX2FzdChsa2IsIHR5cGUsIGJhc3Rtb2RlKTsKKwkJZGxtX3VzZXJfYWRkX2FzdChsa2IsIHR5cGUsIG1vZGUpOwogCQlyZXR1cm47CiAJfQogCkBAIC00NCwxMCArNDQsMjEgQEAKIAlpZiAoIShsa2ItPmxrYl9hc3RfdHlwZSAmIChBU1RfQ09NUCB8IEFTVF9CQVNUKSkpIHsKIAkJa3JlZl9nZXQoJmxrYi0+bGtiX3JlZik7CiAJCWxpc3RfYWRkX3RhaWwoJmxrYi0+bGtiX2FzdHF1ZXVlLCAmYXN0X3F1ZXVlKTsKKwkJbGtiLT5sa2JfYXN0X2ZpcnN0ID0gdHlwZTsKIAl9CisKKwkvKiBzYW5pdHkgY2hlY2ssIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KKworCWlmICgodHlwZSA9PSBBU1RfQ09NUCkgJiYgKGxrYi0+bGtiX2FzdF90eXBlICYgQVNUX0NPTVApKQorCQlsb2dfcHJpbnQoInJlcGVhdCBjYXN0ICVkIGNhc3Rtb2RlICVkIGxvY2sgJXggJXMiLAorCQkJICBtb2RlLCBsa2ItPmxrYl9jYXN0bW9kZSwKKwkJCSAgbGtiLT5sa2JfaWQsIGxrYi0+bGtiX3Jlc291cmNlLT5yZXNfbmFtZSk7CisKIAlsa2ItPmxrYl9hc3RfdHlwZSB8PSB0eXBlOwotCWlmIChiYXN0bW9kZSkKLQkJbGtiLT5sa2JfYmFzdG1vZGUgPSBiYXN0bW9kZTsKKwlpZiAodHlwZSA9PSBBU1RfQkFTVCkKKwkJbGtiLT5sa2JfYmFzdG1vZGUgPSBtb2RlOworCWVsc2UKKwkJbGtiLT5sa2JfY2FzdG1vZGUgPSBtb2RlOwogCXNwaW5fdW5sb2NrKCZhc3RfcXVldWVfbG9jayk7CiAKIAlzZXRfYml0KFdBS0VfQVNUUywgJmFzdGRfd2FrZWZsYWdzKTsKQEAgLTU5LDkgKzcwLDkgQEAKIAlzdHJ1Y3QgZGxtX2xzICpscyA9IE5VTEw7CiAJc3RydWN0IGRsbV9yc2IgKnIgPSBOVUxMOwogCXN0cnVjdCBkbG1fbGtiICpsa2I7Ci0Jdm9pZCAoKmNhc3QpICh2b2lkICphc3RwYXJhbSk7Ci0Jdm9pZCAoKmJhc3QpICh2b2lkICphc3RwYXJhbSwgaW50IG1vZGUpOwotCWludCB0eXBlID0gMCwgYmFzdG1vZGU7CisJdm9pZCAoKmNhc3RmbikgKHZvaWQgKmFzdHBhcmFtKTsKKwl2b2lkICgqYmFzdGZuKSAodm9pZCAqYXN0cGFyYW0sIGludCBtb2RlKTsKKwlpbnQgdHlwZSwgZmlyc3QsIGJhc3Rtb2RlLCBjYXN0bW9kZSwgZG9fYmFzdCwgZG9fY2FzdCwgbGFzdF9jYXN0bW9kZTsKIAogcmVwZWF0OgogCXNwaW5fbG9jaygmYXN0X3F1ZXVlX2xvY2spOwpAQCAtNzUsMTcgKzg2LDQ4IEBACiAJCWxpc3RfZGVsKCZsa2ItPmxrYl9hc3RxdWV1ZSk7CiAJCXR5cGUgPSBsa2ItPmxrYl9hc3RfdHlwZTsKIAkJbGtiLT5sa2JfYXN0X3R5cGUgPSAwOworCQlmaXJzdCA9IGxrYi0+bGtiX2FzdF9maXJzdDsKKwkJbGtiLT5sa2JfYXN0X2ZpcnN0ID0gMDsKIAkJYmFzdG1vZGUgPSBsa2ItPmxrYl9iYXN0bW9kZTsKLQorCQljYXN0bW9kZSA9IGxrYi0+bGtiX2Nhc3Rtb2RlOworCQljYXN0Zm4gPSBsa2ItPmxrYl9hc3RmbjsKKwkJYmFzdGZuID0gbGtiLT5sa2JfYmFzdGZuOwogCQlzcGluX3VubG9jaygmYXN0X3F1ZXVlX2xvY2spOwotCQljYXN0ID0gbGtiLT5sa2JfYXN0Zm47Ci0JCWJhc3QgPSBsa2ItPmxrYl9iYXN0Zm47CiAKLQkJaWYgKCh0eXBlICYgQVNUX0NPTVApICYmIGNhc3QpCi0JCQljYXN0KGxrYi0+bGtiX2FzdHBhcmFtKTsKKwkJZG9fY2FzdCA9ICh0eXBlICYgQVNUX0NPTVApICYmIGNhc3RmbjsKKwkJZG9fYmFzdCA9ICh0eXBlICYgQVNUX0JBU1QpICYmIGJhc3RmbjsKIAotCQlpZiAoKHR5cGUgJiBBU1RfQkFTVCkgJiYgYmFzdCkKLQkJCWJhc3QobGtiLT5sa2JfYXN0cGFyYW0sIGJhc3Rtb2RlKTsKKwkJLyogU2tpcCBhIGJhc3QgaWYgaXRzIGJsb2NraW5nIG1vZGUgaXMgY29tcGF0aWJsZSB3aXRoIHRoZQorCQkgICBncmFudGVkIG1vZGUgb2YgdGhlIHByZWNlZGluZyBjYXN0LiAqLworCisJCWlmIChkb19iYXN0KSB7CisJCQlpZiAoZmlyc3QgPT0gQVNUX0NPTVApCisJCQkJbGFzdF9jYXN0bW9kZSA9IGNhc3Rtb2RlOworCQkJZWxzZQorCQkJCWxhc3RfY2FzdG1vZGUgPSBsa2ItPmxrYl9jYXN0bW9kZV9kb25lOworCQkJaWYgKGRsbV9tb2Rlc19jb21wYXQoYmFzdG1vZGUsIGxhc3RfY2FzdG1vZGUpKQorCQkJCWRvX2Jhc3QgPSAwOworCQl9CisKKwkJaWYgKGZpcnN0ID09IEFTVF9DT01QKSB7CisJCQlpZiAoZG9fY2FzdCkKKwkJCQljYXN0Zm4obGtiLT5sa2JfYXN0cGFyYW0pOworCQkJaWYgKGRvX2Jhc3QpCisJCQkJYmFzdGZuKGxrYi0+bGtiX2FzdHBhcmFtLCBiYXN0bW9kZSk7CisJCX0gZWxzZSBpZiAoZmlyc3QgPT0gQVNUX0JBU1QpIHsKKwkJCWlmIChkb19iYXN0KQorCQkJCWJhc3Rmbihsa2ItPmxrYl9hc3RwYXJhbSwgYmFzdG1vZGUpOworCQkJaWYgKGRvX2Nhc3QpCisJCQkJY2FzdGZuKGxrYi0+bGtiX2FzdHBhcmFtKTsKKwkJfSBlbHNlIHsKKwkJCWxvZ19lcnJvcihscywgImJhZCBhc3RfZmlyc3QgJWQgYXN0X3R5cGUgJWQiLAorCQkJCSAgZmlyc3QsIHR5cGUpOworCQl9CisKKwkJaWYgKGRvX2Nhc3QpCisJCQlsa2ItPmxrYl9jYXN0bW9kZV9kb25lID0gY2FzdG1vZGU7CisJCWlmIChkb19iYXN0KQorCQkJbGtiLT5sa2JfYmFzdG1vZGVfZG9uZSA9IGJhc3Rtb2RlOwogCiAJCS8qIHRoaXMgcmVtb3ZlcyB0aGUgcmVmZXJlbmNlIGFkZGVkIGJ5IGRsbV9hZGRfYXN0CiAJCSAgIGFuZCBtYXkgcmVzdWx0IGluIHRoZSBsa2IgYmVpbmcgZnJlZWQgKi8KZGlmZiAtLWdpdCBhL2ZzL2RsbS9hc3QuaCBiL2ZzL2RsbS9hc3QuaAppbmRleCAxYjVmYzVmLi5iY2IxYWFiIDEwMDY0NAotLS0gYS9mcy9kbG0vYXN0LmgKKysrIGIvZnMvZGxtL2FzdC5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKioKLSoqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiogIENvcHlyaWdodCAoQykgMjAwNS0yMDEwIFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqKgogKiogIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAogKiogIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCkBAIC0xMyw3ICsxMyw3IEBACiAjaWZuZGVmIF9fQVNURF9ET1RfSF9fCiAjZGVmaW5lIF9fQVNURF9ET1RfSF9fCiAKLXZvaWQgZGxtX2FkZF9hc3Qoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IHR5cGUsIGludCBiYXN0bW9kZSk7Cit2b2lkIGRsbV9hZGRfYXN0KHN0cnVjdCBkbG1fbGtiICpsa2IsIGludCB0eXBlLCBpbnQgbW9kZSk7CiB2b2lkIGRsbV9kZWxfYXN0KHN0cnVjdCBkbG1fbGtiICpsa2IpOwogCiB2b2lkIGRsbV9hc3RkX3dha2Uodm9pZCk7CmRpZmYgLS1naXQgYS9mcy9kbG0vZGVidWdfZnMuYyBiL2ZzL2RsbS9kZWJ1Z19mcy5jCmluZGV4IDM3NWEyMzUuLjI5ZDYxMzkgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9kZWJ1Z19mcy5jCisrKyBiL2ZzL2RsbS9kZWJ1Z19mcy5jCkBAIC0yNTYsNyArMjU2LDcgQEAKIAkJCWxrYi0+bGtiX3N0YXR1cywKIAkJCWxrYi0+bGtiX2dybW9kZSwKIAkJCWxrYi0+bGtiX3JxbW9kZSwKLQkJCWxrYi0+bGtiX2hpZ2hiYXN0LAorCQkJbGtiLT5sa2JfYmFzdG1vZGUsCiAJCQlyc2JfbG9va3VwLAogCQkJbGtiLT5sa2Jfd2FpdF90eXBlLAogCQkJbGtiLT5sa2JfbHZic2VxLApkaWZmIC0tZ2l0IGEvZnMvZGxtL2RsbV9pbnRlcm5hbC5oIGIvZnMvZGxtL2RsbV9pbnRlcm5hbC5oCmluZGV4IDgyNmQzZGMuLmY2MzJiNTggMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9kbG1faW50ZXJuYWwuaAorKysgYi9mcy9kbG0vZGxtX2ludGVybmFsLmgKQEAgLTIsNyArMiw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKgogKiogIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKiogIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoqCiAqKiAgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAqKiAgbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKQEAgLTIzMiwxMSArMjMyLDE3IEBACiAJaW50OF90CQkJbGtiX3N0YXR1czsgICAgIC8qIGdyYW50ZWQsIHdhaXRpbmcsIGNvbnZlcnQgKi8KIAlpbnQ4X3QJCQlsa2JfcnFtb2RlOwkvKiByZXF1ZXN0ZWQgbG9jayBtb2RlICovCiAJaW50OF90CQkJbGtiX2dybW9kZTsJLyogZ3JhbnRlZCBsb2NrIG1vZGUgKi8KLQlpbnQ4X3QJCQlsa2JfYmFzdG1vZGU7CS8qIHJlcXVlc3RlZCBtb2RlICovCiAJaW50OF90CQkJbGtiX2hpZ2hiYXN0OwkvKiBoaWdoZXN0IG1vZGUgYmFzdCBzZW50IGZvciAqLworCiAJaW50OF90CQkJbGtiX3dhaXRfdHlwZTsJLyogdHlwZSBvZiByZXBseSB3YWl0aW5nIGZvciAqLwogCWludDhfdAkJCWxrYl93YWl0X2NvdW50OwogCWludDhfdAkJCWxrYl9hc3RfdHlwZTsJLyogdHlwZSBvZiBhc3QgcXVldWVkIGZvciAqLworCWludDhfdAkJCWxrYl9hc3RfZmlyc3Q7CS8qIHR5cGUgb2YgZmlyc3QgYXN0IHF1ZXVlZCAqLworCisJaW50OF90CQkJbGtiX2Jhc3Rtb2RlOwkvKiByZXEgbW9kZSBvZiBxdWV1ZWQgYmFzdCAqLworCWludDhfdAkJCWxrYl9jYXN0bW9kZTsJLyogZ3IgbW9kZSBvZiBxdWV1ZWQgY2FzdCAqLworCWludDhfdAkJCWxrYl9iYXN0bW9kZV9kb25lOyAvKiBsYXN0IGRlbGl2ZXJlZCBiYXN0bW9kZSAqLworCWludDhfdAkJCWxrYl9jYXN0bW9kZV9kb25lOyAvKiBsYXN0IGRlbGl2ZXJlZCBjYXN0bW9kZSAqLwogCiAJc3RydWN0IGxpc3RfaGVhZAlsa2JfaWR0YmxfbGlzdDsJLyogbG9ja3NwYWNlIGxrYnRibCAqLwogCXN0cnVjdCBsaXN0X2hlYWQJbGtiX3N0YXRlcXVldWU7CS8qIHJzYiBnL2MvdyBsaXN0ICovCmRpZmYgLS1naXQgYS9mcy9kbG0vbG9jay5jIGIvZnMvZGxtL2xvY2suYwppbmRleCA5YzBjMWRiLi40NmZmZDNlIDEwMDY0NAotLS0gYS9mcy9kbG0vbG9jay5jCisrKyBiL2ZzL2RsbS9sb2NrLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKgotKiogIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoqCiAqKiAgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAqKiAgbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKQEAgLTMwNyw3ICszMDcsNyBAQAogCWxrYi0+bGtiX2xrc2ItPnNiX3N0YXR1cyA9IHJ2OwogCWxrYi0+bGtiX2xrc2ItPnNiX2ZsYWdzID0gbGtiLT5sa2Jfc2JmbGFnczsKIAotCWRsbV9hZGRfYXN0KGxrYiwgQVNUX0NPTVAsIDApOworCWRsbV9hZGRfYXN0KGxrYiwgQVNUX0NPTVAsIGxrYi0+bGtiX2dybW9kZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBxdWV1ZV9jYXN0X292ZXJsYXAoc3RydWN0IGRsbV9yc2IgKnIsIHN0cnVjdCBkbG1fbGtiICpsa2IpCkBAIC0zMjAsMTAgKzMyMCwxMiBAQAogewogCWxrYi0+bGtiX3RpbWVfYmFzdCA9IGt0aW1lX2dldCgpOwogCi0JaWYgKGlzX21hc3Rlcl9jb3B5KGxrYikpCisJaWYgKGlzX21hc3Rlcl9jb3B5KGxrYikpIHsKKwkJbGtiLT5sa2JfYmFzdG1vZGUgPSBycW1vZGU7IC8qIHByaW50ZWQgYnkgZGVidWdmcyAqLwogCQlzZW5kX2Jhc3QociwgbGtiLCBycW1vZGUpOwotCWVsc2UKKwl9IGVsc2UgewogCQlkbG1fYWRkX2FzdChsa2IsIEFTVF9CQVNULCBycW1vZGUpOworCX0KIH0KIAogLyoKQEAgLTIyODAsMjAgKzIyODIsMzAgQEAKIAlpZiAoY2FuX2JlX3F1ZXVlZChsa2IpKSB7CiAJCWVycm9yID0gLUVJTlBST0dSRVNTOwogCQlhZGRfbGtiKHIsIGxrYiwgRExNX0xLU1RTX1dBSVRJTkcpOwotCQlzZW5kX2Jsb2NraW5nX2FzdHMociwgbGtiKTsKIAkJYWRkX3RpbWVvdXQobGtiKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJZXJyb3IgPSAtRUFHQUlOOwotCWlmIChmb3JjZV9ibG9ja2luZ19hc3RzKGxrYikpCi0JCXNlbmRfYmxvY2tpbmdfYXN0c19hbGwociwgbGtiKTsKIAlxdWV1ZV9jYXN0KHIsIGxrYiwgLUVBR0FJTik7Ci0KICBvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgdm9pZCBkb19yZXF1ZXN0X2VmZmVjdHMoc3RydWN0IGRsbV9yc2IgKnIsIHN0cnVjdCBkbG1fbGtiICpsa2IsCisJCQkgICAgICAgaW50IGVycm9yKQoreworCXN3aXRjaCAoZXJyb3IpIHsKKwljYXNlIC1FQUdBSU46CisJCWlmIChmb3JjZV9ibG9ja2luZ19hc3RzKGxrYikpCisJCQlzZW5kX2Jsb2NraW5nX2FzdHNfYWxsKHIsIGxrYik7CisJCWJyZWFrOworCWNhc2UgLUVJTlBST0dSRVNTOgorCQlzZW5kX2Jsb2NraW5nX2FzdHMociwgbGtiKTsKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgaW50IGRvX2NvbnZlcnQoc3RydWN0IGRsbV9yc2IgKnIsIHN0cnVjdCBkbG1fbGtiICpsa2IpCiB7CiAJaW50IGVycm9yID0gMDsKQEAgLTIzMDQsNyArMjMxNiw2IEBACiAJaWYgKGNhbl9iZV9ncmFudGVkKHIsIGxrYiwgMSwgJmRlYWRsaykpIHsKIAkJZ3JhbnRfbG9jayhyLCBsa2IpOwogCQlxdWV1ZV9jYXN0KHIsIGxrYiwgMCk7Ci0JCWdyYW50X3BlbmRpbmdfbG9ja3Mocik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMjMzNCw3ICsyMzQ1LDYgQEAKIAkJaWYgKF9jYW5fYmVfZ3JhbnRlZChyLCBsa2IsIDEpKSB7CiAJCQlncmFudF9sb2NrKHIsIGxrYik7CiAJCQlxdWV1ZV9jYXN0KHIsIGxrYiwgMCk7Ci0JCQlncmFudF9wZW5kaW5nX2xvY2tzKHIpOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJLyogZWxzZSBmYWxsIHRocm91Z2ggYW5kIG1vdmUgdG8gY29udmVydCBxdWV1ZSAqLwpAQCAtMjM0NCwyOCArMjM1NCw0NyBAQAogCQllcnJvciA9IC1FSU5QUk9HUkVTUzsKIAkJZGVsX2xrYihyLCBsa2IpOwogCQlhZGRfbGtiKHIsIGxrYiwgRExNX0xLU1RTX0NPTlZFUlQpOwotCQlzZW5kX2Jsb2NraW5nX2FzdHMociwgbGtiKTsKIAkJYWRkX3RpbWVvdXQobGtiKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJZXJyb3IgPSAtRUFHQUlOOwotCWlmIChmb3JjZV9ibG9ja2luZ19hc3RzKGxrYikpCi0JCXNlbmRfYmxvY2tpbmdfYXN0c19hbGwociwgbGtiKTsKIAlxdWV1ZV9jYXN0KHIsIGxrYiwgLUVBR0FJTik7Ci0KICBvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgdm9pZCBkb19jb252ZXJ0X2VmZmVjdHMoc3RydWN0IGRsbV9yc2IgKnIsIHN0cnVjdCBkbG1fbGtiICpsa2IsCisJCQkgICAgICAgaW50IGVycm9yKQoreworCXN3aXRjaCAoZXJyb3IpIHsKKwljYXNlIDA6CisJCWdyYW50X3BlbmRpbmdfbG9ja3Mocik7CisJCS8qIGdyYW50X3BlbmRpbmdfbG9ja3MgYWxzbyBzZW5kcyBiYXN0cyAqLworCQlicmVhazsKKwljYXNlIC1FQUdBSU46CisJCWlmIChmb3JjZV9ibG9ja2luZ19hc3RzKGxrYikpCisJCQlzZW5kX2Jsb2NraW5nX2FzdHNfYWxsKHIsIGxrYik7CisJCWJyZWFrOworCWNhc2UgLUVJTlBST0dSRVNTOgorCQlzZW5kX2Jsb2NraW5nX2FzdHMociwgbGtiKTsKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgaW50IGRvX3VubG9jayhzdHJ1Y3QgZGxtX3JzYiAqciwgc3RydWN0IGRsbV9sa2IgKmxrYikKIHsKIAlyZW1vdmVfbG9jayhyLCBsa2IpOwogCXF1ZXVlX2Nhc3QociwgbGtiLCAtRExNX0VVTkxPQ0spOwotCWdyYW50X3BlbmRpbmdfbG9ja3Mocik7CiAJcmV0dXJuIC1ETE1fRVVOTE9DSzsKIH0KIAorc3RhdGljIHZvaWQgZG9fdW5sb2NrX2VmZmVjdHMoc3RydWN0IGRsbV9yc2IgKnIsIHN0cnVjdCBkbG1fbGtiICpsa2IsCisJCQkgICAgICBpbnQgZXJyb3IpCit7CisJZ3JhbnRfcGVuZGluZ19sb2NrcyhyKTsKK30KKwogLyogcmV0dXJuczogMCBkaWQgbm90aGluZywgLURMTV9FQ0FOQ0VMIGNhbmNlbGVkIGxvY2sgKi8KICAKIHN0YXRpYyBpbnQgZG9fY2FuY2VsKHN0cnVjdCBkbG1fcnNiICpyLCBzdHJ1Y3QgZGxtX2xrYiAqbGtiKQpAQCAtMjM3NSwxMiArMjQwNCwxOCBAQAogCWVycm9yID0gcmV2ZXJ0X2xvY2sociwgbGtiKTsKIAlpZiAoZXJyb3IpIHsKIAkJcXVldWVfY2FzdChyLCBsa2IsIC1ETE1fRUNBTkNFTCk7Ci0JCWdyYW50X3BlbmRpbmdfbG9ja3Mocik7CiAJCXJldHVybiAtRExNX0VDQU5DRUw7CiAJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBkb19jYW5jZWxfZWZmZWN0cyhzdHJ1Y3QgZGxtX3JzYiAqciwgc3RydWN0IGRsbV9sa2IgKmxrYiwKKwkJCSAgICAgIGludCBlcnJvcikKK3sKKwlpZiAoZXJyb3IpCisJCWdyYW50X3BlbmRpbmdfbG9ja3Mocik7Cit9CisKIC8qCiAgKiBGb3VyIHN0YWdlIDMgdmFyaWV0aWVzOgogICogX3JlcXVlc3RfbG9jaygpLCBfY29udmVydF9sb2NrKCksIF91bmxvY2tfbG9jaygpLCBfY2FuY2VsX2xvY2soKQpAQCAtMjQwMiwxMSArMjQzNywxNSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoaXNfcmVtb3RlKHIpKQorCWlmIChpc19yZW1vdGUocikpIHsKIAkJLyogcmVjZWl2ZV9yZXF1ZXN0KCkgY2FsbHMgZG9fcmVxdWVzdCgpIG9uIHJlbW90ZSBub2RlICovCiAJCWVycm9yID0gc2VuZF9yZXF1ZXN0KHIsIGxrYik7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCWVycm9yID0gZG9fcmVxdWVzdChyLCBsa2IpOworCQkvKiBmb3IgcmVtb3RlIGxvY2tzIHRoZSByZXF1ZXN0X3JlcGx5IGlzIHNlbnQKKwkJICAgYmV0d2VlbiBkb19yZXF1ZXN0IGFuZCBkb19yZXF1ZXN0X2VmZmVjdHMgKi8KKwkJZG9fcmVxdWVzdF9lZmZlY3RzKHIsIGxrYiwgZXJyb3IpOworCX0KICBvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMjQxNywxMSArMjQ1NiwxNSBAQAogewogCWludCBlcnJvcjsKIAotCWlmIChpc19yZW1vdGUocikpCisJaWYgKGlzX3JlbW90ZShyKSkgewogCQkvKiByZWNlaXZlX2NvbnZlcnQoKSBjYWxscyBkb19jb252ZXJ0KCkgb24gcmVtb3RlIG5vZGUgKi8KIAkJZXJyb3IgPSBzZW5kX2NvbnZlcnQociwgbGtiKTsKLQllbHNlCisJfSBlbHNlIHsKIAkJZXJyb3IgPSBkb19jb252ZXJ0KHIsIGxrYik7CisJCS8qIGZvciByZW1vdGUgbG9ja3MgdGhlIGNvbnZlcnRfcmVwbHkgaXMgc2VudAorCQkgICBiZXR3ZWVuIGRvX2NvbnZlcnQgYW5kIGRvX2NvbnZlcnRfZWZmZWN0cyAqLworCQlkb19jb252ZXJ0X2VmZmVjdHMociwgbGtiLCBlcnJvcik7CisJfQogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMjQzMiwxMSArMjQ3NSwxNSBAQAogewogCWludCBlcnJvcjsKIAotCWlmIChpc19yZW1vdGUocikpCisJaWYgKGlzX3JlbW90ZShyKSkgewogCQkvKiByZWNlaXZlX3VubG9jaygpIGNhbGxzIGRvX3VubG9jaygpIG9uIHJlbW90ZSBub2RlICovCiAJCWVycm9yID0gc2VuZF91bmxvY2sociwgbGtiKTsKLQllbHNlCisJfSBlbHNlIHsKIAkJZXJyb3IgPSBkb191bmxvY2sociwgbGtiKTsKKwkJLyogZm9yIHJlbW90ZSBsb2NrcyB0aGUgdW5sb2NrX3JlcGx5IGlzIHNlbnQKKwkJICAgYmV0d2VlbiBkb191bmxvY2sgYW5kIGRvX3VubG9ja19lZmZlY3RzICovCisJCWRvX3VubG9ja19lZmZlY3RzKHIsIGxrYiwgZXJyb3IpOworCX0KIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTI0NDcsMTEgKzI0OTQsMTUgQEAKIHsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoaXNfcmVtb3RlKHIpKQorCWlmIChpc19yZW1vdGUocikpIHsKIAkJLyogcmVjZWl2ZV9jYW5jZWwoKSBjYWxscyBkb19jYW5jZWwoKSBvbiByZW1vdGUgbm9kZSAqLwogCQllcnJvciA9IHNlbmRfY2FuY2VsKHIsIGxrYik7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCWVycm9yID0gZG9fY2FuY2VsKHIsIGxrYik7CisJCS8qIGZvciByZW1vdGUgbG9ja3MgdGhlIGNhbmNlbF9yZXBseSBpcyBzZW50CisJCSAgIGJldHdlZW4gZG9fY2FuY2VsIGFuZCBkb19jYW5jZWxfZWZmZWN0cyAqLworCQlkb19jYW5jZWxfZWZmZWN0cyhyLCBsa2IsIGVycm9yKTsKKwl9CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0zMTkxLDYgKzMyNDIsNyBAQAogCWF0dGFjaF9sa2IociwgbGtiKTsKIAllcnJvciA9IGRvX3JlcXVlc3QociwgbGtiKTsKIAlzZW5kX3JlcXVlc3RfcmVwbHkociwgbGtiLCBlcnJvcik7CisJZG9fcmVxdWVzdF9lZmZlY3RzKHIsIGxrYiwgZXJyb3IpOwogCiAJdW5sb2NrX3JzYihyKTsKIAlwdXRfcnNiKHIpOwpAQCAtMzIyNiwxNSArMzI3OCwxOSBAQAogCQlnb3RvIG91dDsKIAogCXJlY2VpdmVfZmxhZ3MobGtiLCBtcyk7CisKIAllcnJvciA9IHJlY2VpdmVfY29udmVydF9hcmdzKGxzLCBsa2IsIG1zKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3JlcGx5OworCWlmIChlcnJvcikgeworCQlzZW5kX2NvbnZlcnRfcmVwbHkociwgbGtiLCBlcnJvcik7CisJCWdvdG8gb3V0OworCX0KKwogCXJlcGx5ID0gIWRvd25fY29udmVyc2lvbihsa2IpOwogCiAJZXJyb3IgPSBkb19jb252ZXJ0KHIsIGxrYik7Ci0gb3V0X3JlcGx5OgogCWlmIChyZXBseSkKIAkJc2VuZF9jb252ZXJ0X3JlcGx5KHIsIGxrYiwgZXJyb3IpOworCWRvX2NvbnZlcnRfZWZmZWN0cyhyLCBsa2IsIGVycm9yKTsKICBvdXQ6CiAJdW5sb2NrX3JzYihyKTsKIAlwdXRfcnNiKHIpOwpAQCAtMzI2NiwxMyArMzMyMiwxNiBAQAogCQlnb3RvIG91dDsKIAogCXJlY2VpdmVfZmxhZ3MobGtiLCBtcyk7CisKIAllcnJvciA9IHJlY2VpdmVfdW5sb2NrX2FyZ3MobHMsIGxrYiwgbXMpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfcmVwbHk7CisJaWYgKGVycm9yKSB7CisJCXNlbmRfdW5sb2NrX3JlcGx5KHIsIGxrYiwgZXJyb3IpOworCQlnb3RvIG91dDsKKwl9CiAKIAllcnJvciA9IGRvX3VubG9jayhyLCBsa2IpOwotIG91dF9yZXBseToKIAlzZW5kX3VubG9ja19yZXBseShyLCBsa2IsIGVycm9yKTsKKwlkb191bmxvY2tfZWZmZWN0cyhyLCBsa2IsIGVycm9yKTsKICBvdXQ6CiAJdW5sb2NrX3JzYihyKTsKIAlwdXRfcnNiKHIpOwpAQCAtMzMwNyw2ICszMzY2LDcgQEAKIAogCWVycm9yID0gZG9fY2FuY2VsKHIsIGxrYik7CiAJc2VuZF9jYW5jZWxfcmVwbHkociwgbGtiLCBlcnJvcik7CisJZG9fY2FuY2VsX2VmZmVjdHMociwgbGtiLCBlcnJvcik7CiAgb3V0OgogCXVubG9ja19yc2Iocik7CiAJcHV0X3JzYihyKTsKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb2Nrc3BhY2UuYyBiL2ZzL2RsbS9sb2Nrc3BhY2UuYwppbmRleCBjMDEwZWNmLi4yNmE4YmQ0IDEwMDY0NAotLS0gYS9mcy9kbG0vbG9ja3NwYWNlLmMKKysrIGIvZnMvZGxtL2xvY2tzcGFjZS5jCkBAIC0xOTEsNiArMTkxLDE4IEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgaW50IGRsbV91ZXZlbnQoc3RydWN0IGtzZXQgKmtzZXQsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkgICAgICBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCit7CisJc3RydWN0IGRsbV9scyAqbHMgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRsbV9scywgbHNfa29iaik7CisKKwlhZGRfdWV2ZW50X3ZhcihlbnYsICJMT0NLU1BBQ0U9JXMiLCBscy0+bHNfbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga3NldF91ZXZlbnRfb3BzIGRsbV91ZXZlbnRfb3BzID0geworCS51ZXZlbnQgPSBkbG1fdWV2ZW50LAorfTsKIAogaW50IF9faW5pdCBkbG1fbG9ja3NwYWNlX2luaXQodm9pZCkKIHsKQEAgLTE5OSw3ICsyMTEsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZsc2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZsc2xpc3RfbG9jayk7CiAKLQlkbG1fa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoImRsbSIsIE5VTEwsIGtlcm5lbF9rb2JqKTsKKwlkbG1fa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoImRsbSIsICZkbG1fdWV2ZW50X29wcywga2VybmVsX2tvYmopOwogCWlmICghZGxtX2tzZXQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhbiBub3QgY3JlYXRlIGtzZXRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9kbG0vdXNlci5jIGIvZnMvZGxtL3VzZXIuYwppbmRleCBlNzNhNGJiLi5hNGJmZDMxIDEwMDY0NAotLS0gYS9mcy9kbG0vdXNlci5jCisrKyBiL2ZzL2RsbS91c2VyLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDEwIFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAgKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwpAQCAtMTczLDcgKzE3Myw3IEBACiAvKiB3ZSBjb3VsZCBwb3NzaWJseSBjaGVjayBpZiB0aGUgY2FuY2VsIG9mIGFuIG9ycGhhbiBoYXMgcmVzdWx0ZWQgaW4gdGhlIGxrYgogICAgYmVpbmcgcmVtb3ZlZCBhbmQgdGhlbiByZW1vdmUgdGhhdCBsa2IgZnJvbSB0aGUgb3JwaGFucyBsaXN0IGFuZCBmcmVlIGl0ICovCiAKLXZvaWQgZGxtX3VzZXJfYWRkX2FzdChzdHJ1Y3QgZGxtX2xrYiAqbGtiLCBpbnQgdHlwZSwgaW50IGJhc3Rtb2RlKQordm9pZCBkbG1fdXNlcl9hZGRfYXN0KHN0cnVjdCBkbG1fbGtiICpsa2IsIGludCB0eXBlLCBpbnQgbW9kZSkKIHsKIAlzdHJ1Y3QgZGxtX2xzICpsczsKIAlzdHJ1Y3QgZGxtX3VzZXJfYXJncyAqdWE7CkBAIC0yMDYsOCArMjA2LDEwIEBACiAKIAlhc3RfdHlwZSA9IGxrYi0+bGtiX2FzdF90eXBlOwogCWxrYi0+bGtiX2FzdF90eXBlIHw9IHR5cGU7Ci0JaWYgKGJhc3Rtb2RlKQotCQlsa2ItPmxrYl9iYXN0bW9kZSA9IGJhc3Rtb2RlOworCWlmICh0eXBlID09IEFTVF9CQVNUKQorCQlsa2ItPmxrYl9iYXN0bW9kZSA9IG1vZGU7CisJZWxzZQorCQlsa2ItPmxrYl9jYXN0bW9kZSA9IG1vZGU7CiAKIAlpZiAoIWFzdF90eXBlKSB7CiAJCWtyZWZfZ2V0KCZsa2ItPmxrYl9yZWYpOwpkaWZmIC0tZ2l0IGEvZnMvZGxtL3VzZXIuaCBiL2ZzL2RsbS91c2VyLmgKaW5kZXggMWM5Njg2NC4uZjE5NjA5MSAxMDA2NDQKLS0tIGEvZnMvZGxtL3VzZXIuaAorKysgYi9mcy9kbG0vdXNlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMCBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAogICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKQEAgLTksNyArOSw3IEBACiAjaWZuZGVmIF9fVVNFUl9ET1RfSF9fCiAjZGVmaW5lIF9fVVNFUl9ET1RfSF9fCiAKLXZvaWQgZGxtX3VzZXJfYWRkX2FzdChzdHJ1Y3QgZGxtX2xrYiAqbGtiLCBpbnQgdHlwZSwgaW50IGJhc3Rtb2RlKTsKK3ZvaWQgZGxtX3VzZXJfYWRkX2FzdChzdHJ1Y3QgZGxtX2xrYiAqbGtiLCBpbnQgdHlwZSwgaW50IG1vZGUpOwogaW50IGRsbV91c2VyX2luaXQodm9pZCk7CiB2b2lkIGRsbV91c2VyX2V4aXQodm9pZCk7CiBpbnQgZGxtX2RldmljZV9kZXJlZ2lzdGVyKHN0cnVjdCBkbG1fbHMgKmxzKTsKZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuYwppbmRleCA4N2UxMjkwLi4zODAzOWFmIDEwMDY0NAotLS0gYS9mcy9maWxlLmMKKysrIGIvZnMvZmlsZS5jCkBAIC00NzgsNyArNDc4LDcgQEAKIAllcnJvciA9IGZkOwogI2lmIDEKIAkvKiBTYW5pdHkgY2hlY2sgKi8KLQlpZiAocmN1X2RlcmVmZXJlbmNlKGZkdC0+ZmRbZmRdKSAhPSBOVUxMKSB7CisJaWYgKHJjdV9kZXJlZmVyZW5jZV9yYXcoZmR0LT5mZFtmZF0pICE9IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWxsb2NfZmQ6IHNsb3QgJWQgbm90IE5VTEwhXG4iLCBmZCk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihmZHQtPmZkW2ZkXSwgTlVMTCk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL0tjb25maWcgYi9mcy9uZnMvS2NvbmZpZwppbmRleCA1OWU1NjczLi5hNDNkMDdlIDEwMDY0NAotLS0gYS9mcy9uZnMvS2NvbmZpZworKysgYi9mcy9uZnMvS2NvbmZpZwpAQCAtOTUsOCArOTUsNyBAQAogCSAgTW9zdCBwZW9wbGUgc2F5IE4gaGVyZS4KIAogY29uZmlnIE5GU19GU0NBQ0hFCi0JYm9vbCAiUHJvdmlkZSBORlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWJvb2wgIlByb3ZpZGUgTkZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBORlNfRlM9bSAmJiBGU0NBQ0hFIHx8IE5GU19GUz15ICYmIEZTQ0FDSEU9eQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgTkZTIGRhdGEgdG8gYmUgY2FjaGVkIGxvY2FsbHkgb24gZGlzYyB0aHJvdWdoCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKaW5kZXggNjRiYzg5OS4uZTg4NjVjMSAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9jaGVjay5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwpAQCAtNDEyLDkgKzQxMiwxMCBAQAogCXBkZXYgPSBwYXJ0X3RvX2RldihwKTsKIAogCXAtPnN0YXJ0X3NlY3QgPSBzdGFydDsKLQlwLT5hbGlnbm1lbnRfb2Zmc2V0ID0gcXVldWVfc2VjdG9yX2FsaWdubWVudF9vZmZzZXQoZGlzay0+cXVldWUsIHN0YXJ0KTsKLQlwLT5kaXNjYXJkX2FsaWdubWVudCA9IHF1ZXVlX3NlY3Rvcl9kaXNjYXJkX2FsaWdubWVudChkaXNrLT5xdWV1ZSwKLQkJCQkJCQkgICAgICBzdGFydCk7CisJcC0+YWxpZ25tZW50X29mZnNldCA9CisJCXF1ZXVlX2xpbWl0X2FsaWdubWVudF9vZmZzZXQoJmRpc2stPnF1ZXVlLT5saW1pdHMsIHN0YXJ0KTsKKwlwLT5kaXNjYXJkX2FsaWdubWVudCA9CisJCXF1ZXVlX2xpbWl0X2Rpc2NhcmRfYWxpZ25tZW50KCZkaXNrLT5xdWV1ZS0+bGltaXRzLCBzdGFydCk7CiAJcC0+bnJfc2VjdHMgPSBsZW47CiAJcC0+cGFydG5vID0gcGFydG5vOwogCXAtPnBvbGljeSA9IGdldF9kaXNrX3JvKGRpc2spOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9hcnJheS5jIGIvZnMvcHJvYy9hcnJheS5jCmluZGV4IDEzYjVkMDcuLjE4ZTIwZmUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYXJyYXkuYworKysgYi9mcy9wcm9jL2FycmF5LmMKQEAgLTI3MCw3ICsyNzAsOSBAQAogCQlibG9ja2VkID0gcC0+YmxvY2tlZDsKIAkJY29sbGVjdF9zaWdpZ25fc2lnY2F0Y2gocCwgJmlnbm9yZWQsICZjYXVnaHQpOwogCQludW1fdGhyZWFkcyA9IGF0b21pY19yZWFkKCZwLT5zaWduYWwtPmNvdW50KTsKKwkJcmN1X3JlYWRfbG9jaygpOyAgLyogRklYTUU6IGlzIHRoaXMgY29ycmVjdD8gKi8KIAkJcXNpemUgPSBhdG9taWNfcmVhZCgmX190YXNrX2NyZWQocCktPnVzZXItPnNpZ3BlbmRpbmcpOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcWxpbSA9IHAtPnNpZ25hbC0+cmxpbVtSTElNSVRfU0lHUEVORElOR10ucmxpbV9jdXI7CiAJCXVubG9ja190YXNrX3NpZ2hhbmQocCwgJmZsYWdzKTsKIAl9CmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDU4MzI0YzIuLjYyM2UyZmYgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0xMDk1LDggKzEwOTUsMTIgQEAKIAlpZiAoIWNhcGFibGUoQ0FQX0FVRElUX0NPTlRST0wpKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JaWYgKGN1cnJlbnQgIT0gcGlkX3Rhc2socHJvY19waWQoaW5vZGUpLCBQSURUWVBFX1BJRCkpCisJcmN1X3JlYWRfbG9jaygpOworCWlmIChjdXJyZW50ICE9IHBpZF90YXNrKHByb2NfcGlkKGlub2RlKSwgUElEVFlQRV9QSUQpKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gLUVQRVJNOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChjb3VudCA+PSBQQUdFX1NJWkUpCiAJCWNvdW50ID0gUEFHRV9TSVpFIC0gMTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY19kZXZ0cmVlLmMgYi9mcy9wcm9jL3Byb2NfZGV2dHJlZS5jCmluZGV4IDEyMzI1N2IuLmY4NjUwZGMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcHJvY19kZXZ0cmVlLmMKKysrIGIvZnMvcHJvYy9wcm9jX2RldnRyZWUuYwpAQCAtMTAsMTYgKzEwLDE5IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotI2lmbmRlZiBIQVZFX0FSQ0hfREVWVFJFRV9GSVhVUFMKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbm9kZV9wcm9jX2VudHJ5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkJICAgICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUpCiB7Ci19CisjaWZkZWYgSEFWRV9BUkNIX0RFVlRSRUVfRklYVVBTCisJbnAtPnBkZSA9IGRlOwogI2VuZGlmCit9CiAKIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfZGV2aWNlX3RyZWU7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9NYWtlZmlsZSBiL2ZzL3hmcy9NYWtlZmlsZQppbmRleCA1NjY0MWZlLi41YzVhMzY2IDEwMDY0NAotLS0gYS9mcy94ZnMvTWFrZWZpbGUKKysrIGIvZnMveGZzL01ha2VmaWxlCkBAIC0xNiw3ICsxNiw3IEBACiAjIEluYy4sICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogIwogCi1FWFRSQV9DRkxBR1MgKz0JIC1JJChzcmMpIC1JJChzcmMpL2xpbnV4LTIuNiAtZnVuc2lnbmVkLWNoYXIKK0VYVFJBX0NGTEFHUyArPQkgLUkkKHNyYykgLUkkKHNyYykvbGludXgtMi42CiAKIFhGU19MSU5VWCA6PSBsaW51eC0yLjYKIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmMgYi9mcy94ZnMvbGludXgtMi42L2ttZW0uYwppbmRleCAyZDNmOTBhLi5iYzc0MDU1IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L2ttZW0uYworKysgYi9mcy94ZnMvbGludXgtMi42L2ttZW0uYwpAQCAtMTYsNyArMTYsNiBAQAogICogSW5jLiwgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgpAQCAtMjQsOCArMjMsMjUgQEAKICNpbmNsdWRlICJ0aW1lLmgiCiAjaW5jbHVkZSAia21lbS5oIgogCi0jZGVmaW5lIE1BWF9WTUFMTE9DUwk2Ci0jZGVmaW5lIE1BWF9TTEFCX1NJWkUJMHgyMDAwMAorLyoKKyAqIEdyZWVkeSBhbGxvY2F0aW9uLiAgTWF5IGZhaWwgYW5kIG1heSByZXR1cm4gdm1hbGxvY2VkIG1lbW9yeS4KKyAqCisgKiBNdXN0IGJlIGZyZWVkIHVzaW5nIGttZW1fZnJlZV9sYXJnZS4KKyAqLwordm9pZCAqCitrbWVtX3phbGxvY19ncmVlZHkoc2l6ZV90ICpzaXplLCBzaXplX3QgbWluc2l6ZSwgc2l6ZV90IG1heHNpemUpCit7CisJdm9pZAkJKnB0cjsKKwlzaXplX3QJCWttc2l6ZSA9IG1heHNpemU7CisKKwl3aGlsZSAoIShwdHIgPSBrbWVtX3phbGxvY19sYXJnZShrbXNpemUpKSkgeworCQlpZiAoKGttc2l6ZSA+Pj0gMSkgPD0gbWluc2l6ZSkKKwkJCWttc2l6ZSA9IG1pbnNpemU7CisJfQorCWlmIChwdHIpCisJCSpzaXplID0ga21zaXplOworCXJldHVybiBwdHI7Cit9CiAKIHZvaWQgKgoga21lbV9hbGxvYyhzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzKQpAQCAtMzQsMTkgKzUwLDggQEAKIAlnZnBfdAlsZmxhZ3MgPSBrbWVtX2ZsYWdzX2NvbnZlcnQoZmxhZ3MpOwogCXZvaWQJKnB0cjsKIAotI2lmZGVmIERFQlVHCi0JaWYgKHVubGlrZWx5KCEoZmxhZ3MgJiBLTV9MQVJHRSkgJiYgKHNpemUgPiBQQUdFX1NJWkUpKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJMYXJnZSAlcyBhdHRlbXB0LCBzaXplPSVsZFxuIiwKLQkJCV9fZnVuY19fLCAobG9uZylzaXplKTsKLQkJZHVtcF9zdGFjaygpOwotCX0KLSNlbmRpZgotCiAJZG8gewotCQlpZiAoc2l6ZSA8IE1BWF9TTEFCX1NJWkUgfHwgcmV0cmllcyA+IE1BWF9WTUFMTE9DUykKLQkJCXB0ciA9IGttYWxsb2Moc2l6ZSwgbGZsYWdzKTsKLQkJZWxzZQotCQkJcHRyID0gX192bWFsbG9jKHNpemUsIGxmbGFncywgUEFHRV9LRVJORUwpOworCQlwdHIgPSBrbWFsbG9jKHNpemUsIGxmbGFncyk7CiAJCWlmIChwdHIgfHwgKGZsYWdzICYgKEtNX01BWUZBSUx8S01fTk9TTEVFUCkpKQogCQkJcmV0dXJuIHB0cjsKIAkJaWYgKCEoKytyZXRyaWVzICUgMTAwKSkKQEAgLTY4LDI3ICs3Myw2IEBACiAJcmV0dXJuIHB0cjsKIH0KIAotdm9pZCAqCi1rbWVtX3phbGxvY19ncmVlZHkoc2l6ZV90ICpzaXplLCBzaXplX3QgbWluc2l6ZSwgc2l6ZV90IG1heHNpemUsCi0JCSAgIHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncykKLXsKLQl2b2lkCQkqcHRyOwotCXNpemVfdAkJa21zaXplID0gbWF4c2l6ZTsKLQl1bnNpZ25lZCBpbnQJa21mbGFncyA9IChmbGFncyAmIH5LTV9TTEVFUCkgfCBLTV9OT1NMRUVQOwotCi0Jd2hpbGUgKCEocHRyID0ga21lbV96YWxsb2Moa21zaXplLCBrbWZsYWdzKSkpIHsKLQkJaWYgKChrbXNpemUgPD0gbWluc2l6ZSkgJiYgKGZsYWdzICYgS01fTk9TTEVFUCkpCi0JCQlicmVhazsKLQkJaWYgKChrbXNpemUgPj49IDEpIDw9IG1pbnNpemUpIHsKLQkJCWttc2l6ZSA9IG1pbnNpemU7Ci0JCQlrbWZsYWdzID0gZmxhZ3M7Ci0JCX0KLQl9Ci0JaWYgKHB0cikKLQkJKnNpemUgPSBrbXNpemU7Ci0JcmV0dXJuIHB0cjsKLX0KLQogdm9pZAoga21lbV9mcmVlKGNvbnN0IHZvaWQgKnB0cikKIHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYva21lbS5oIGIvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmgKaW5kZXggMTc5Y2JkNi4uZjdjOGY3YSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogLyoKICAqIEdlbmVyYWwgbWVtb3J5IGFsbG9jYXRpb24gaW50ZXJmYWNlcwpAQCAtMzAsNyArMzEsNiBAQAogI2RlZmluZSBLTV9OT1NMRUVQCTB4MDAwMnUKICNkZWZpbmUgS01fTk9GUwkJMHgwMDA0dQogI2RlZmluZSBLTV9NQVlGQUlMCTB4MDAwOHUKLSNkZWZpbmUgS01fTEFSR0UJMHgwMDEwdQogCiAvKgogICogV2UgdXNlIGEgc3BlY2lhbCBwcm9jZXNzIGZsYWcgdG8gYXZvaWQgcmVjdXJzaXZlIGNhbGxiYWNrcyBpbnRvCkBAIC00Miw3ICs0Miw3IEBACiB7CiAJZ2ZwX3QJbGZsYWdzOwogCi0JQlVHX09OKGZsYWdzICYgfihLTV9TTEVFUHxLTV9OT1NMRUVQfEtNX05PRlN8S01fTUFZRkFJTHxLTV9MQVJHRSkpOworCUJVR19PTihmbGFncyAmIH4oS01fU0xFRVB8S01fTk9TTEVFUHxLTV9OT0ZTfEtNX01BWUZBSUwpKTsKIAogCWlmIChmbGFncyAmIEtNX05PU0xFRVApIHsKIAkJbGZsYWdzID0gR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTjsKQEAgLTU2LDEwICs1NiwyNSBAQAogCiBleHRlcm4gdm9pZCAqa21lbV9hbGxvYyhzaXplX3QsIHVuc2lnbmVkIGludCBfX25vY2FzdCk7CiBleHRlcm4gdm9pZCAqa21lbV96YWxsb2Moc2l6ZV90LCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QpOwotZXh0ZXJuIHZvaWQgKmttZW1femFsbG9jX2dyZWVkeShzaXplX3QgKiwgc2l6ZV90LCBzaXplX3QsIHVuc2lnbmVkIGludCBfX25vY2FzdCk7CiBleHRlcm4gdm9pZCAqa21lbV9yZWFsbG9jKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIHVuc2lnbmVkIGludCBfX25vY2FzdCk7CiBleHRlcm4gdm9pZCAga21lbV9mcmVlKGNvbnN0IHZvaWQgKik7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCAqa21lbV96YWxsb2NfbGFyZ2Uoc2l6ZV90IHNpemUpCit7CisJdm9pZCAqcHRyOworCisJcHRyID0gdm1hbGxvYyhzaXplKTsKKwlpZiAocHRyKQorCQltZW1zZXQocHRyLCAwLCBzaXplKTsKKwlyZXR1cm4gcHRyOworfQorc3RhdGljIGlubGluZSB2b2lkIGttZW1fZnJlZV9sYXJnZSh2b2lkICpwdHIpCit7CisJdmZyZWUocHRyKTsKK30KKworZXh0ZXJuIHZvaWQgKmttZW1femFsbG9jX2dyZWVkeShzaXplX3QgKiwgc2l6ZV90LCBzaXplX3QpOworCiAvKgogICogWm9uZSBpbnRlcmZhY2VzCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FjbC5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMKaW5kZXggODgzY2E1YS4uYmY4NWJiZSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYWNsLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKIAlzdHJ1Y3QgeGZzX2FjbCAqeGZzX2FjbDsKIAlpbnQgbGVuID0gc2l6ZW9mKHN0cnVjdCB4ZnNfYWNsKTsKLQljaGFyICplYV9uYW1lOworCXVuc2lnbmVkIGNoYXIgKmVhX25hbWU7CiAJaW50IGVycm9yOwogCiAJYWNsID0gZ2V0X2NhY2hlZF9hY2woaW5vZGUsIHR5cGUpOwpAQCAtMTMzLDcgKzEzMyw4IEBACiAJaWYgKCF4ZnNfYWNsKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCWVycm9yID0gLXhmc19hdHRyX2dldChpcCwgZWFfbmFtZSwgKGNoYXIgKil4ZnNfYWNsLCAmbGVuLCBBVFRSX1JPT1QpOworCWVycm9yID0gLXhmc19hdHRyX2dldChpcCwgZWFfbmFtZSwgKHVuc2lnbmVkIGNoYXIgKil4ZnNfYWNsLAorCQkJCQkJCSZsZW4sIEFUVFJfUk9PVCk7CiAJaWYgKGVycm9yKSB7CiAJCS8qCiAJCSAqIElmIHRoZSBhdHRyaWJ1dGUgZG9lc24ndCBleGlzdCBtYWtlIHN1cmUgd2UgaGF2ZSBhIG5lZ2F0aXZlCkBAIC0xNjIsNyArMTYzLDcgQEAKIHhmc19zZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wpCiB7CiAJc3RydWN0IHhmc19pbm9kZSAqaXAgPSBYRlNfSShpbm9kZSk7Ci0JY2hhciAqZWFfbmFtZTsKKwl1bnNpZ25lZCBjaGFyICplYV9uYW1lOwogCWludCBlcnJvcjsKIAogCWlmIChTX0lTTE5LKGlub2RlLT5pX21vZGUpKQpAQCAtMTk0LDcgKzE5NSw3IEBACiAJCQkoc2l6ZW9mKHN0cnVjdCB4ZnNfYWNsX2VudHJ5KSAqCiAJCQkgKFhGU19BQ0xfTUFYX0VOVFJJRVMgLSBhY2wtPmFfY291bnQpKTsKIAotCQllcnJvciA9IC14ZnNfYXR0cl9zZXQoaXAsIGVhX25hbWUsIChjaGFyICopeGZzX2FjbCwKKwkJZXJyb3IgPSAteGZzX2F0dHJfc2V0KGlwLCBlYV9uYW1lLCAodW5zaWduZWQgY2hhciAqKXhmc19hY2wsCiAJCQkJbGVuLCBBVFRSX1JPT1QpOwogCiAJCWtmcmVlKHhmc19hY2wpOwpAQCAtMjYyLDcgKzI2Myw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLXhmc19hY2xfZXhpc3RzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKm5hbWUpCit4ZnNfYWNsX2V4aXN0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBjaGFyICpuYW1lKQogewogCWludCBsZW4gPSBzaXplb2Yoc3RydWN0IHhmc19hY2wpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCmluZGV4IDc3YjhiZTguLjZmNzZiYTggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlncmF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3Rfc29ydC5oPgogCiAjaW5jbHVkZSAieGZzX3NiLmgiCiAjaW5jbHVkZSAieGZzX2ludW0uaCIKQEAgLTc2LDYgKzc3LDI3IEBACiAjZGVmaW5lIHhmc19idWZfZGVhbGxvY2F0ZShicCkgXAogCWttZW1fem9uZV9mcmVlKHhmc19idWZfem9uZSwgKGJwKSk7CiAKK3N0YXRpYyBpbmxpbmUgaW50Cit4ZnNfYnVmX2lzX3ZtYXBwZWQoCisJc3RydWN0IHhmc19idWYJKmJwKQoreworCS8qCisJICogUmV0dXJuIHRydWUgaWYgdGhlIGJ1ZmZlciBpcyB2bWFwcGVkLgorCSAqCisJICogVGhlIFhCRl9NQVBQRUQgZmxhZyBpcyBzZXQgaWYgdGhlIGJ1ZmZlciBzaG91bGQgYmUgbWFwcGVkLCBidXQgdGhlCisJICogY29kZSBpcyBjbGV2ZXIgZW5vdWdoIHRvIGtub3cgaXQgZG9lc24ndCBoYXZlIHRvIG1hcCBhIHNpbmdsZSBwYWdlLAorCSAqIHNvIHRoZSBjaGVjayBoYXMgdG8gYmUgYm90aCBmb3IgWEJGX01BUFBFRCBhbmQgYnAtPmJfcGFnZV9jb3VudCA+IDEuCisJICovCisJcmV0dXJuIChicC0+Yl9mbGFncyAmIFhCRl9NQVBQRUQpICYmIGJwLT5iX3BhZ2VfY291bnQgPiAxOworfQorCitzdGF0aWMgaW5saW5lIGludAoreGZzX2J1Zl92bWFwX2xlbigKKwlzdHJ1Y3QgeGZzX2J1ZgkqYnApCit7CisJcmV0dXJuIChicC0+Yl9wYWdlX2NvdW50ICogUEFHRV9TSVpFKSAtIGJwLT5iX29mZnNldDsKK30KKwogLyoKICAqCVBhZ2UgUmVnaW9uIGludGVyZmFjZXMuCiAgKgpAQCAtMzE0LDcgKzMzNiw3IEBACiAJaWYgKGJwLT5iX2ZsYWdzICYgKF9YQkZfUEFHRV9DQUNIRXxfWEJGX1BBR0VTKSkgewogCQl1aW50CQlpOwogCi0JCWlmICgoYnAtPmJfZmxhZ3MgJiBYQkZfTUFQUEVEKSAmJiAoYnAtPmJfcGFnZV9jb3VudCA+IDEpKQorCQlpZiAoeGZzX2J1Zl9pc192bWFwcGVkKGJwKSkKIAkJCWZyZWVfYWRkcmVzcyhicC0+Yl9hZGRyIC0gYnAtPmJfb2Zmc2V0KTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgYnAtPmJfcGFnZV9jb3VudDsgaSsrKSB7CkBAIC0xMDUxLDIyICsxMDczLDMwIEBACiB9CiAKIGludAoteGZzX2Jhd3JpdGUoCi0Jdm9pZAkJCSptcCwKK3hmc19id3JpdGUoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCiAJc3RydWN0IHhmc19idWYJCSpicCkKIHsKLQl0cmFjZV94ZnNfYnVmX2Jhd3JpdGUoYnAsIF9SRVRfSVBfKTsKKwlpbnQJCQlpb3dhaXQgPSAoYnAtPmJfZmxhZ3MgJiBYQkZfQVNZTkMpID09IDA7CisJaW50CQkJZXJyb3IgPSAwOwogCi0JQVNTRVJUKGJwLT5iX2JuICE9IFhGU19CVUZfREFERFJfTlVMTCk7CisJYnAtPmJfc3RyYXQgPSB4ZnNfYmRzdHJhdF9jYjsKKwlicC0+Yl9tb3VudCA9IG1wOworCWJwLT5iX2ZsYWdzIHw9IFhCRl9XUklURTsKKwlpZiAoIWlvd2FpdCkKKwkJYnAtPmJfZmxhZ3MgfD0gX1hCRl9SVU5fUVVFVUVTOwogCiAJeGZzX2J1Zl9kZWx3cmlfZGVxdWV1ZShicCk7CisJeGZzX2J1Zl9pb3N0cmF0ZWd5KGJwKTsKIAotCWJwLT5iX2ZsYWdzICY9IH4oWEJGX1JFQUQgfCBYQkZfREVMV1JJIHwgWEJGX1JFQURfQUhFQUQpOwotCWJwLT5iX2ZsYWdzIHw9IChYQkZfV1JJVEUgfCBYQkZfQVNZTkMgfCBfWEJGX1JVTl9RVUVVRVMpOworCWlmIChpb3dhaXQpIHsKKwkJZXJyb3IgPSB4ZnNfYnVmX2lvd2FpdChicCk7CisJCWlmIChlcnJvcikKKwkJCXhmc19mb3JjZV9zaHV0ZG93bihtcCwgU0hVVERPV05fTUVUQV9JT19FUlJPUik7CisJCXhmc19idWZfcmVsc2UoYnApOworCX0KIAotCWJwLT5iX21vdW50ID0gbXA7Ci0JYnAtPmJfc3RyYXQgPSB4ZnNfYmRzdHJhdF9jYjsKLQlyZXR1cm4geGZzX2Jkc3RyYXRfY2IoYnApOworCXJldHVybiBlcnJvcjsKIH0KIAogdm9pZApAQCAtMTA4NSw2ICsxMTE1LDEyNiBAQAogCXhmc19idWZfZGVsd3JpX3F1ZXVlKGJwLCAxKTsKIH0KIAorLyoKKyAqIENhbGxlZCB3aGVuIHdlIHdhbnQgdG8gc3RvcCBhIGJ1ZmZlciBmcm9tIGdldHRpbmcgd3JpdHRlbiBvciByZWFkLgorICogV2UgYXR0YWNoIHRoZSBFSU8gZXJyb3IsIG11Y2sgd2l0aCBpdHMgZmxhZ3MsIGFuZCBjYWxsIGJpb2RvbmUKKyAqIHNvIHRoYXQgdGhlIHByb3BlciBpb2RvbmUgY2FsbGJhY2tzIGdldCBjYWxsZWQuCisgKi8KK1NUQVRJQyBpbnQKK3hmc19iaW9lcnJvcigKKwl4ZnNfYnVmX3QgKmJwKQoreworI2lmZGVmIFhGU0VSUk9SREVCVUcKKwlBU1NFUlQoWEZTX0JVRl9JU1JFQUQoYnApIHx8IGJwLT5iX2lvZG9uZSk7CisjZW5kaWYKKworCS8qCisJICogTm8gbmVlZCB0byB3YWl0IHVudGlsIHRoZSBidWZmZXIgaXMgdW5waW5uZWQsIHdlIGFyZW4ndCBmbHVzaGluZyBpdC4KKwkgKi8KKwlYRlNfQlVGX0VSUk9SKGJwLCBFSU8pOworCisJLyoKKwkgKiBXZSdyZSBjYWxsaW5nIGJpb2RvbmUsIHNvIGRlbGV0ZSBYQkZfRE9ORSBmbGFnLgorCSAqLworCVhGU19CVUZfVU5SRUFEKGJwKTsKKwlYRlNfQlVGX1VOREVMQVlXUklURShicCk7CisJWEZTX0JVRl9VTkRPTkUoYnApOworCVhGU19CVUZfU1RBTEUoYnApOworCisJWEZTX0JVRl9DTFJfQkRTVFJBVF9GVU5DKGJwKTsKKwl4ZnNfYmlvZG9uZShicCk7CisKKwlyZXR1cm4gRUlPOworfQorCisvKgorICogU2FtZSBhcyB4ZnNfYmlvZXJyb3IsIGV4Y2VwdCB0aGF0IHdlIGFyZSByZWxlYXNpbmcgdGhlIGJ1ZmZlcgorICogaGVyZSBvdXJzZWx2ZXMsIGFuZCBhdm9pZGluZyB0aGUgYmlvZG9uZSBjYWxsLgorICogVGhpcyBpcyBtZWFudCBmb3IgdXNlcmRhdGEgZXJyb3JzOyBtZXRhZGF0YSBidWZzIGNvbWUgd2l0aAorICogaW9kb25lIGZ1bmN0aW9ucyBhdHRhY2hlZCwgc28gdGhhdCB3ZSBjYW4gdHJhY2sgZG93biBlcnJvcnMuCisgKi8KK1NUQVRJQyBpbnQKK3hmc19iaW9lcnJvcl9yZWxzZSgKKwlzdHJ1Y3QgeGZzX2J1ZgkqYnApCit7CisJaW50NjRfdAkJZmwgPSBYRlNfQlVGX0JGTEFHUyhicCk7CisJLyoKKwkgKiBObyBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIGJ1ZmZlciBpcyB1bnBpbm5lZC4KKwkgKiBXZSBhcmVuJ3QgZmx1c2hpbmcgaXQuCisJICoKKwkgKiBjaHVua2hvbGQgZXhwZWN0cyBCX0RPTkUgdG8gYmUgc2V0LCB3aGV0aGVyCisJICogd2UgYWN0dWFsbHkgZmluaXNoIHRoZSBJL08gb3Igbm90LiBXZSBkb24ndCB3YW50IHRvCisJICogY2hhbmdlIHRoYXQgaW50ZXJmYWNlLgorCSAqLworCVhGU19CVUZfVU5SRUFEKGJwKTsKKwlYRlNfQlVGX1VOREVMQVlXUklURShicCk7CisJWEZTX0JVRl9ET05FKGJwKTsKKwlYRlNfQlVGX1NUQUxFKGJwKTsKKwlYRlNfQlVGX0NMUl9JT0RPTkVfRlVOQyhicCk7CisJWEZTX0JVRl9DTFJfQkRTVFJBVF9GVU5DKGJwKTsKKwlpZiAoIShmbCAmIFhCRl9BU1lOQykpIHsKKwkJLyoKKwkJICogTWFyayBiX2Vycm9yIGFuZCBCX0VSUk9SIF9ib3RoXy4KKwkJICogTG90J3Mgb2YgY2h1bmtjYWNoZSBjb2RlIGFzc3VtZXMgdGhhdC4KKwkJICogVGhlcmUncyBubyByZWFzb24gdG8gbWFyayBlcnJvciBmb3IKKwkJICogQVNZTkMgYnVmZmVycy4KKwkJICovCisJCVhGU19CVUZfRVJST1IoYnAsIEVJTyk7CisJCVhGU19CVUZfRklOSVNIX0lPV0FJVChicCk7CisJfSBlbHNlIHsKKwkJeGZzX2J1Zl9yZWxzZShicCk7CisJfQorCisJcmV0dXJuIEVJTzsKK30KKworCisvKgorICogQWxsIHhmcyBtZXRhZGF0YSBidWZmZXJzIGV4Y2VwdCBsb2cgc3RhdGUgbWFjaGluZSBidWZmZXJzCisgKiBnZXQgdGhpcyBhdHRhY2hlZCBhcyB0aGVpciBiX2Jkc3RyYXQgY2FsbGJhY2sgZnVuY3Rpb24uCisgKiBUaGlzIGlzIHNvIHRoYXQgd2UgY2FuIGNhdGNoIGEgYnVmZmVyCisgKiBhZnRlciBwcmVtYXR1cmVseSB1bnBpbm5pbmcgaXQgdG8gZm9yY2libHkgc2h1dGRvd24gdGhlIGZpbGVzeXN0ZW0uCisgKi8KK2ludAoreGZzX2Jkc3RyYXRfY2IoCisJc3RydWN0IHhmc19idWYJKmJwKQoreworCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGJwLT5iX21vdW50KSkgeworCQl0cmFjZV94ZnNfYmRzdHJhdF9zaHV0KGJwLCBfUkVUX0lQXyk7CisJCS8qCisJCSAqIE1ldGFkYXRhIHdyaXRlIHRoYXQgZGlkbid0IGdldCBsb2dnZWQgYnV0CisJCSAqIHdyaXR0ZW4gZGVsYXllZCBhbnl3YXkuIFRoZXNlIGFyZW4ndCBhc3NvY2lhdGVkCisJCSAqIHdpdGggYSB0cmFuc2FjdGlvbiwgYW5kIGNhbiBiZSBpZ25vcmVkLgorCQkgKi8KKwkJaWYgKCFicC0+Yl9pb2RvbmUgJiYgIVhGU19CVUZfSVNSRUFEKGJwKSkKKwkJCXJldHVybiB4ZnNfYmlvZXJyb3JfcmVsc2UoYnApOworCQllbHNlCisJCQlyZXR1cm4geGZzX2Jpb2Vycm9yKGJwKTsKKwl9CisKKwl4ZnNfYnVmX2lvcmVxdWVzdChicCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXcmFwcGVyIGFyb3VuZCBiZHN0cmF0IHNvIHRoYXQgd2UgY2FuIHN0b3AgZGF0YSBmcm9tIGdvaW5nIHRvIGRpc2sgaW4gY2FzZQorICogd2UgYXJlIHNodXR0aW5nIGRvd24gdGhlIGZpbGVzeXN0ZW0uICBUeXBpY2FsbHkgdXNlciBkYXRhIGdvZXMgdGhydSB0aGlzCisgKiBwYXRoOyBvbmUgb2YgdGhlIGV4Y2VwdGlvbnMgaXMgdGhlIHN1cGVyYmxvY2suCisgKi8KK3ZvaWQKK3hmc2Jkc3RyYXQoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IHhmc19idWYJCSpicCkKK3sKKwlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpIHsKKwkJdHJhY2VfeGZzX2Jkc3RyYXRfc2h1dChicCwgX1JFVF9JUF8pOworCQl4ZnNfYmlvZXJyb3JfcmVsc2UoYnApOworCQlyZXR1cm47CisJfQorCisJeGZzX2J1Zl9pb3JlcXVlc3QoYnApOworfQorCiBTVEFUSUMgdm9pZAogX3hmc19idWZfaW9lbmQoCiAJeGZzX2J1Zl90CQkqYnAsCkBAIC0xMTA3LDYgKzEyNTcsOSBAQAogCiAJeGZzX2J1Zl9pb2Vycm9yKGJwLCAtZXJyb3IpOwogCisJaWYgKCFlcnJvciAmJiB4ZnNfYnVmX2lzX3ZtYXBwZWQoYnApICYmIChicC0+Yl9mbGFncyAmIFhCRl9SRUFEKSkKKwkJaW52YWxpZGF0ZV9rZXJuZWxfdm1hcF9yYW5nZShicC0+Yl9hZGRyLCB4ZnNfYnVmX3ZtYXBfbGVuKGJwKSk7CisKIAlkbyB7CiAJCXN0cnVjdCBwYWdlCSpwYWdlID0gYnZlYy0+YnZfcGFnZTsKIApAQCAtMTIxNiw2ICsxMzY5LDEwIEBACiAKIHN1Ym1pdF9pbzoKIAlpZiAobGlrZWx5KGJpby0+Ymlfc2l6ZSkpIHsKKwkJaWYgKHhmc19idWZfaXNfdm1hcHBlZChicCkpIHsKKwkJCWZsdXNoX2tlcm5lbF92bWFwX3JhbmdlKGJwLT5iX2FkZHIsCisJCQkJCQl4ZnNfYnVmX3ZtYXBfbGVuKGJwKSk7CisJCX0KIAkJc3VibWl0X2JpbyhydywgYmlvKTsKIAkJaWYgKHNpemUpCiAJCQlnb3RvIG5leHRfY2h1bms7CkBAIC0xMjk2LDcgKzE0NTMsNyBAQAogCXhmc19idWZfdAkJKmJwLAkvKiBidWZmZXIgdG8gcHJvY2VzcwkJKi8KIAlzaXplX3QJCQlib2ZmLAkvKiBzdGFydGluZyBidWZmZXIgb2Zmc2V0CSovCiAJc2l6ZV90CQkJYnNpemUsCS8qIGxlbmd0aCB0byBjb3B5CQkqLwotCWNhZGRyX3QJCQlkYXRhLAkvKiBkYXRhIGFkZHJlc3MJCQkqLworCXZvaWQJCQkqZGF0YSwJLyogZGF0YSBhZGRyZXNzCQkJKi8KIAl4ZnNfYnVmX3J3X3QJCW1vZGUpCS8qIHJlYWQvd3JpdGUvemVybyBmbGFnCQkqLwogewogCXNpemVfdAkJCWJlbmQsIGNwb2ZmLCBjc2l6ZTsKQEAgLTEzNzgsOCArMTUzNSw4IEBACiAKIAlidHAtPmJ0X2hhc2hzaGlmdCA9IGV4dGVybmFsID8gMyA6IDg7CS8qIDggb3IgMjU2IGJ1Y2tldHMgKi8KIAlidHAtPmJ0X2hhc2htYXNrID0gKDEgPDwgYnRwLT5idF9oYXNoc2hpZnQpIC0gMTsKLQlidHAtPmJ0X2hhc2ggPSBrbWVtX3phbGxvYygoMSA8PCBidHAtPmJ0X2hhc2hzaGlmdCkgKgotCQkJCQlzaXplb2YoeGZzX2J1Zmhhc2hfdCksIEtNX1NMRUVQIHwgS01fTEFSR0UpOworCWJ0cC0+YnRfaGFzaCA9IGttZW1femFsbG9jX2xhcmdlKCgxIDw8IGJ0cC0+YnRfaGFzaHNoaWZ0KSAqCisJCQkJCSBzaXplb2YoeGZzX2J1Zmhhc2hfdCkpOwogCWZvciAoaSA9IDA7IGkgPCAoMSA8PCBidHAtPmJ0X2hhc2hzaGlmdCk7IGkrKykgewogCQlzcGluX2xvY2tfaW5pdCgmYnRwLT5idF9oYXNoW2ldLmJoX2xvY2spOwogCQlJTklUX0xJU1RfSEVBRCgmYnRwLT5idF9oYXNoW2ldLmJoX2xpc3QpOwpAQCAtMTM5MCw3ICsxNTQ3LDcgQEAKIHhmc19mcmVlX2J1Zmhhc2goCiAJeGZzX2J1ZnRhcmdfdAkJKmJ0cCkKIHsKLQlrbWVtX2ZyZWUoYnRwLT5idF9oYXNoKTsKKwlrbWVtX2ZyZWVfbGFyZ2UoYnRwLT5idF9oYXNoKTsKIAlidHAtPmJ0X2hhc2ggPSBOVUxMOwogfQogCkBAIC0xNTk1LDYgKzE3NTIsMTEgQEAKIAkJbGlzdF9kZWwoJmJwLT5iX2xpc3QpOwogCX0KIAorCWlmIChsaXN0X2VtcHR5KGR3cSkpIHsKKwkJLyogc3RhcnQgeGZzYnVmZCBhcyBpdCBpcyBhYm91dCB0byBoYXZlIHNvbWV0aGluZyB0byBkbyAqLworCQl3YWtlX3VwX3Byb2Nlc3MoYnAtPmJfdGFyZ2V0LT5idF90YXNrKTsKKwl9CisKIAlicC0+Yl9mbGFncyB8PSBfWEJGX0RFTFdSSV9ROwogCWxpc3RfYWRkX3RhaWwoJmJwLT5iX2xpc3QsIGR3cSk7CiAJYnAtPmJfcXVldWV0aW1lID0gamlmZmllczsKQEAgLTE2MjYsNiArMTc4OCwzNSBAQAogCXRyYWNlX3hmc19idWZfZGVsd3JpX2RlcXVldWUoYnAsIF9SRVRfSVBfKTsKIH0KIAorLyoKKyAqIElmIGEgZGVsd3JpIGJ1ZmZlciBuZWVkcyB0byBiZSBwdXNoZWQgYmVmb3JlIGl0IGhhcyBhZ2VkIG91dCwgdGhlbiBwcm9tb3RlCisgKiBpdCB0byB0aGUgaGVhZCBvZiB0aGUgZGVsd3JpIHF1ZXVlIHNvIHRoYXQgaXQgd2lsbCBiZSBmbHVzaGVkIG9uIHRoZSBuZXh0CisgKiB4ZnNidWZkIHJ1bi4gV2UgZG8gdGhpcyBieSByZXNldHRpbmcgdGhlIHF1ZXVldGltZSBvZiB0aGUgYnVmZmVyIHRvIGJlIG9sZGVyCisgKiB0aGFuIHRoZSBhZ2UgY3VycmVudGx5IG5lZWRlZCB0byBmbHVzaCB0aGUgYnVmZmVyLiBIZW5jZSB0aGUgbmV4dCB0aW1lIHRoZQorICogeGZzYnVmZCBzZWVzIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgY29uc2lkZXJlZCBvbGQgZW5vdWdoIHRvIGZsdXNoLgorICovCit2b2lkCit4ZnNfYnVmX2RlbHdyaV9wcm9tb3RlKAorCXN0cnVjdCB4ZnNfYnVmCSpicCkKK3sKKwlzdHJ1Y3QgeGZzX2J1ZnRhcmcgKmJ0cCA9IGJwLT5iX3RhcmdldDsKKwlsb25nCQlhZ2UgPSB4ZnNfYnVmX2FnZV9jZW50aXNlY3MgKiBtc2Vjc190b19qaWZmaWVzKDEwKSArIDE7CisKKwlBU1NFUlQoYnAtPmJfZmxhZ3MgJiBYQkZfREVMV1JJKTsKKwlBU1NFUlQoYnAtPmJfZmxhZ3MgJiBfWEJGX0RFTFdSSV9RKTsKKworCS8qCisJICogQ2hlY2sgdGhlIGJ1ZmZlciBhZ2UgYmVmb3JlIGxvY2tpbmcgdGhlIGRlbGF5ZWQgd3JpdGUgcXVldWUgYXMgd2UKKwkgKiBkb24ndCBuZWVkIHRvIHByb21vdGUgYnVmZmVycyB0aGF0IGFyZSBhbHJlYWR5IHBhc3QgdGhlIGZsdXNoIGFnZS4KKwkgKi8KKwlpZiAoYnAtPmJfcXVldWV0aW1lIDwgamlmZmllcyAtIGFnZSkKKwkJcmV0dXJuOworCWJwLT5iX3F1ZXVldGltZSA9IGppZmZpZXMgLSBhZ2U7CisJc3Bpbl9sb2NrKCZidHAtPmJ0X2RlbHdyaXRlX2xvY2spOworCWxpc3RfbW92ZSgmYnAtPmJfbGlzdCwgJmJ0cC0+YnRfZGVsd3JpdGVfcXVldWUpOworCXNwaW5fdW5sb2NrKCZidHAtPmJ0X2RlbHdyaXRlX2xvY2spOworfQorCiBTVEFUSUMgdm9pZAogeGZzX2J1Zl9ydW5hbGxfcXVldWVzKAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSpxdWV1ZSkKQEAgLTE2NDQsNiArMTgzNSw4IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShidHAsICZ4ZnNfYnVmdGFyZ19saXN0LCBidF9saXN0KSB7CiAJCWlmICh0ZXN0X2JpdChYQlRfRk9SQ0VfU0xFRVAsICZidHAtPmJ0X2ZsYWdzKSkKIAkJCWNvbnRpbnVlOworCQlpZiAobGlzdF9lbXB0eSgmYnRwLT5idF9kZWx3cml0ZV9xdWV1ZSkpCisJCQljb250aW51ZTsKIAkJc2V0X2JpdChYQlRfRk9SQ0VfRkxVU0gsICZidHAtPmJ0X2ZsYWdzKTsKIAkJd2FrZV91cF9wcm9jZXNzKGJ0cC0+YnRfdGFzayk7CiAJfQpAQCAtMTY5NCwyMCArMTg4Nyw1MyBAQAogCiB9CiAKKy8qCisgKiBDb21wYXJlIGZ1bmN0aW9uIGlzIG1vcmUgY29tcGxleCB0aGFuIGl0IG5lZWRzIHRvIGJlIGJlY2F1c2UKKyAqIHRoZSByZXR1cm4gdmFsdWUgaXMgb25seSAzMiBiaXRzIGFuZCB3ZSBhcmUgZG9pbmcgY29tcGFyaXNvbnMKKyAqIG9uIDY0IGJpdCB2YWx1ZXMKKyAqLworc3RhdGljIGludAoreGZzX2J1Zl9jbXAoCisJdm9pZAkJKnByaXYsCisJc3RydWN0IGxpc3RfaGVhZCAqYSwKKwlzdHJ1Y3QgbGlzdF9oZWFkICpiKQoreworCXN0cnVjdCB4ZnNfYnVmCSphcCA9IGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3QgeGZzX2J1ZiwgYl9saXN0KTsKKwlzdHJ1Y3QgeGZzX2J1ZgkqYnAgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IHhmc19idWYsIGJfbGlzdCk7CisJeGZzX2RhZGRyX3QJCWRpZmY7CisKKwlkaWZmID0gYXAtPmJfYm4gLSBicC0+Yl9ibjsKKwlpZiAoZGlmZiA8IDApCisJCXJldHVybiAtMTsKKwlpZiAoZGlmZiA+IDApCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCit2b2lkCit4ZnNfYnVmX2RlbHdyaV9zb3J0KAorCXhmc19idWZ0YXJnX3QJKnRhcmdldCwKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQoreworCWxpc3Rfc29ydChOVUxMLCBsaXN0LCB4ZnNfYnVmX2NtcCk7Cit9CisKIFNUQVRJQyBpbnQKIHhmc2J1ZmQoCiAJdm9pZAkJKmRhdGEpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCB0bXA7Ci0JeGZzX2J1ZnRhcmdfdAkqdGFyZ2V0ID0gKHhmc19idWZ0YXJnX3QgKilkYXRhOwotCWludAkJY291bnQ7Ci0JeGZzX2J1Zl90CSpicDsKKwl4ZnNfYnVmdGFyZ190ICAgKnRhcmdldCA9ICh4ZnNfYnVmdGFyZ190ICopZGF0YTsKIAogCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01FTUFMTE9DOwogCiAJc2V0X2ZyZWV6YWJsZSgpOwogCiAJZG8geworCQlsb25nCWFnZSA9IHhmc19idWZfYWdlX2NlbnRpc2VjcyAqIG1zZWNzX3RvX2ppZmZpZXMoMTApOworCQlsb25nCXRvdXQgPSB4ZnNfYnVmX3RpbWVyX2NlbnRpc2VjcyAqIG1zZWNzX3RvX2ppZmZpZXMoMTApOworCQlpbnQJY291bnQgPSAwOworCQlzdHJ1Y3QgbGlzdF9oZWFkIHRtcDsKKwogCQlpZiAodW5saWtlbHkoZnJlZXppbmcoY3VycmVudCkpKSB7CiAJCQlzZXRfYml0KFhCVF9GT1JDRV9TTEVFUCwgJnRhcmdldC0+YnRfZmxhZ3MpOwogCQkJcmVmcmlnZXJhdG9yKCk7CkBAIC0xNzE1LDE3ICsxOTQxLDE2IEBACiAJCQljbGVhcl9iaXQoWEJUX0ZPUkNFX1NMRUVQLCAmdGFyZ2V0LT5idF9mbGFncyk7CiAJCX0KIAotCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoCi0JCQl4ZnNfYnVmX3RpbWVyX2NlbnRpc2VjcyAqIG1zZWNzX3RvX2ppZmZpZXMoMTApKTsKKwkJLyogc2xlZXAgZm9yIGEgbG9uZyB0aW1lIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uICovCisJCWlmIChsaXN0X2VtcHR5KCZ0YXJnZXQtPmJ0X2RlbHdyaXRlX3F1ZXVlKSkKKwkJCXRvdXQgPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHRvdXQpOwogCi0JCXhmc19idWZfZGVsd3JpX3NwbGl0KHRhcmdldCwgJnRtcCwKLQkJCQl4ZnNfYnVmX2FnZV9jZW50aXNlY3MgKiBtc2Vjc190b19qaWZmaWVzKDEwKSk7Ci0KLQkJY291bnQgPSAwOworCQl4ZnNfYnVmX2RlbHdyaV9zcGxpdCh0YXJnZXQsICZ0bXAsIGFnZSk7CisJCWxpc3Rfc29ydChOVUxMLCAmdG1wLCB4ZnNfYnVmX2NtcCk7CiAJCXdoaWxlICghbGlzdF9lbXB0eSgmdG1wKSkgewotCQkJYnAgPSBsaXN0X2VudHJ5KHRtcC5uZXh0LCB4ZnNfYnVmX3QsIGJfbGlzdCk7Ci0JCQlBU1NFUlQodGFyZ2V0ID09IGJwLT5iX3RhcmdldCk7Ci0KKwkJCXN0cnVjdCB4ZnNfYnVmICpicDsKKwkJCWJwID0gbGlzdF9maXJzdF9lbnRyeSgmdG1wLCBzdHJ1Y3QgeGZzX2J1ZiwgYl9saXN0KTsKIAkJCWxpc3RfZGVsX2luaXQoJmJwLT5iX2xpc3QpOwogCQkJeGZzX2J1Zl9pb3N0cmF0ZWd5KGJwKTsKIAkJCWNvdW50Kys7CkBAIC0xNzUxLDQyICsxOTc2LDQ1IEBACiAJeGZzX2J1ZnRhcmdfdAkqdGFyZ2V0LAogCWludAkJd2FpdCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHRtcDsKLQl4ZnNfYnVmX3QJKmJwLCAqbjsKKwl4ZnNfYnVmX3QJKmJwOwogCWludAkJcGluY291bnQgPSAwOworCUxJU1RfSEVBRCh0bXBfbGlzdCk7CisJTElTVF9IRUFEKHdhaXRfbGlzdCk7CiAKIAl4ZnNfYnVmX3J1bmFsbF9xdWV1ZXMoeGZzY29udmVydGRfd29ya3F1ZXVlKTsKIAl4ZnNfYnVmX3J1bmFsbF9xdWV1ZXMoeGZzZGF0YWRfd29ya3F1ZXVlKTsKIAl4ZnNfYnVmX3J1bmFsbF9xdWV1ZXMoeGZzbG9nZF93b3JrcXVldWUpOwogCiAJc2V0X2JpdChYQlRfRk9SQ0VfRkxVU0gsICZ0YXJnZXQtPmJ0X2ZsYWdzKTsKLQlwaW5jb3VudCA9IHhmc19idWZfZGVsd3JpX3NwbGl0KHRhcmdldCwgJnRtcCwgMCk7CisJcGluY291bnQgPSB4ZnNfYnVmX2RlbHdyaV9zcGxpdCh0YXJnZXQsICZ0bXBfbGlzdCwgMCk7CiAKIAkvKgotCSAqIERyb3BwZWQgdGhlIGRlbGF5ZWQgd3JpdGUgbGlzdCBsb2NrLCBub3cgd2FsayB0aGUgdGVtcG9yYXJ5IGxpc3QKKwkgKiBEcm9wcGVkIHRoZSBkZWxheWVkIHdyaXRlIGxpc3QgbG9jaywgbm93IHdhbGsgdGhlIHRlbXBvcmFyeSBsaXN0LgorCSAqIEFsbCBJL08gaXMgaXNzdWVkIGFzeW5jIGFuZCB0aGVuIGlmIHdlIG5lZWQgdG8gd2FpdCBmb3IgY29tcGxldGlvbgorCSAqIHdlIGRvIHRoYXQgYWZ0ZXIgaXNzdWluZyBhbGwgdGhlIElPLgogCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShicCwgbiwgJnRtcCwgYl9saXN0KSB7CisJbGlzdF9zb3J0KE5VTEwsICZ0bXBfbGlzdCwgeGZzX2J1Zl9jbXApOworCXdoaWxlICghbGlzdF9lbXB0eSgmdG1wX2xpc3QpKSB7CisJCWJwID0gbGlzdF9maXJzdF9lbnRyeSgmdG1wX2xpc3QsIHN0cnVjdCB4ZnNfYnVmLCBiX2xpc3QpOwogCQlBU1NFUlQodGFyZ2V0ID09IGJwLT5iX3RhcmdldCk7Ci0JCWlmICh3YWl0KQorCQlsaXN0X2RlbF9pbml0KCZicC0+Yl9saXN0KTsKKwkJaWYgKHdhaXQpIHsKIAkJCWJwLT5iX2ZsYWdzICY9IH5YQkZfQVNZTkM7Ci0JCWVsc2UKLQkJCWxpc3RfZGVsX2luaXQoJmJwLT5iX2xpc3QpOwotCisJCQlsaXN0X2FkZCgmYnAtPmJfbGlzdCwgJndhaXRfbGlzdCk7CisJCX0KIAkJeGZzX2J1Zl9pb3N0cmF0ZWd5KGJwKTsKIAl9CiAKLQlpZiAod2FpdCkKKwlpZiAod2FpdCkgeworCQkvKiBFeHBlZGl0ZSBhbmQgd2FpdCBmb3IgSU8gdG8gY29tcGxldGUuICovCiAJCWJsa19ydW5fYWRkcmVzc19zcGFjZSh0YXJnZXQtPmJ0X21hcHBpbmcpOworCQl3aGlsZSAoIWxpc3RfZW1wdHkoJndhaXRfbGlzdCkpIHsKKwkJCWJwID0gbGlzdF9maXJzdF9lbnRyeSgmd2FpdF9saXN0LCBzdHJ1Y3QgeGZzX2J1ZiwgYl9saXN0KTsKIAotCS8qCi0JICogUmVtYWluaW5nIGxpc3QgaXRlbXMgbXVzdCBiZSBmbHVzaGVkIGJlZm9yZSByZXR1cm5pbmcKLQkgKi8KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnRtcCkpIHsKLQkJYnAgPSBsaXN0X2VudHJ5KHRtcC5uZXh0LCB4ZnNfYnVmX3QsIGJfbGlzdCk7Ci0KLQkJbGlzdF9kZWxfaW5pdCgmYnAtPmJfbGlzdCk7Ci0JCXhmc19pb3dhaXQoYnApOwotCQl4ZnNfYnVmX3JlbHNlKGJwKTsKKwkJCWxpc3RfZGVsX2luaXQoJmJwLT5iX2xpc3QpOworCQkJeGZzX2lvd2FpdChicCk7CisJCQl4ZnNfYnVmX3JlbHNlKGJwKTsKKwkJfQogCX0KIAogCXJldHVybiBwaW5jb3VudDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKaW5kZXggYTM0YzdiNS4uMzg2ZTczNiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKQEAgLTIzMiwxMyArMjMyLDE3IEBACiBleHRlcm4gdm9pZCB4ZnNfYnVmX3VubG9jayh4ZnNfYnVmX3QgKik7CiAKIC8qIEJ1ZmZlciBSZWFkIGFuZCBXcml0ZSBSb3V0aW5lcyAqLwotZXh0ZXJuIGludCB4ZnNfYmF3cml0ZSh2b2lkICptcCwgeGZzX2J1Zl90ICpicCk7CitleHRlcm4gaW50IHhmc19id3JpdGUoc3RydWN0IHhmc19tb3VudCAqbXAsIHN0cnVjdCB4ZnNfYnVmICpicCk7CiBleHRlcm4gdm9pZCB4ZnNfYmR3cml0ZSh2b2lkICptcCwgeGZzX2J1Zl90ICpicCk7CisKK2V4dGVybiB2b2lkIHhmc2Jkc3RyYXQoc3RydWN0IHhmc19tb3VudCAqLCBzdHJ1Y3QgeGZzX2J1ZiAqKTsKK2V4dGVybiBpbnQgeGZzX2Jkc3RyYXRfY2Ioc3RydWN0IHhmc19idWYgKik7CisKIGV4dGVybiB2b2lkIHhmc19idWZfaW9lbmQoeGZzX2J1Zl90ICosCWludCk7CiBleHRlcm4gdm9pZCB4ZnNfYnVmX2lvZXJyb3IoeGZzX2J1Zl90ICosIGludCk7CiBleHRlcm4gaW50IHhmc19idWZfaW9yZXF1ZXN0KHhmc19idWZfdCAqKTsKIGV4dGVybiBpbnQgeGZzX2J1Zl9pb3dhaXQoeGZzX2J1Zl90ICopOwotZXh0ZXJuIHZvaWQgeGZzX2J1Zl9pb21vdmUoeGZzX2J1Zl90ICosIHNpemVfdCwgc2l6ZV90LCB4ZnNfY2FkZHJfdCwKK2V4dGVybiB2b2lkIHhmc19idWZfaW9tb3ZlKHhmc19idWZfdCAqLCBzaXplX3QsIHNpemVfdCwgdm9pZCAqLAogCQkJCXhmc19idWZfcndfdCk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IHhmc19idWZfaW9zdHJhdGVneSh4ZnNfYnVmX3QgKmJwKQpAQCAtMjYxLDYgKzI2NSw3IEBACiAKIC8qIERlbGF5ZWQgV3JpdGUgQnVmZmVyIFJvdXRpbmVzICovCiBleHRlcm4gdm9pZCB4ZnNfYnVmX2RlbHdyaV9kZXF1ZXVlKHhmc19idWZfdCAqKTsKK2V4dGVybiB2b2lkIHhmc19idWZfZGVsd3JpX3Byb21vdGUoeGZzX2J1Zl90ICopOwogCiAvKiBCdWZmZXIgRGFlbW9uIFNldHVwIFJvdXRpbmVzICovCiBleHRlcm4gaW50IHhmc19idWZfaW5pdCh2b2lkKTsKQEAgLTI3MCwzMyArMjc1LDE5IEBACiAJKHsgY2hhciBfX2JbQkRFVk5BTUVfU0laRV07IGJkZXZuYW1lKCh0YXJnZXQpLT5idF9iZGV2LCBfX2IpOyBfX2I7IH0pCiAKIAotI2RlZmluZSBYRlNfQl9BU1lOQwkJWEJGX0FTWU5DCi0jZGVmaW5lIFhGU19CX0RFTFdSSQkJWEJGX0RFTFdSSQotI2RlZmluZSBYRlNfQl9SRUFECQlYQkZfUkVBRAotI2RlZmluZSBYRlNfQl9XUklURQkJWEJGX1dSSVRFCi0jZGVmaW5lIFhGU19CX1NUQUxFCQlYQkZfU1RBTEUKLQotI2RlZmluZSBYRlNfQlVGX1RSWUxPQ0sJCVhCRl9UUllMT0NLCi0jZGVmaW5lIFhGU19JTkNPUkVfVFJZTE9DSwlYQkZfVFJZTE9DSwotI2RlZmluZSBYRlNfQlVGX0xPQ0sJCVhCRl9MT0NLCi0jZGVmaW5lIFhGU19CVUZfTUFQUEVECQlYQkZfTUFQUEVECi0KLSNkZWZpbmUgQlVGX0JVU1kJCVhCRl9ET05UX0JMT0NLCi0KICNkZWZpbmUgWEZTX0JVRl9CRkxBR1MoYnApCSgoYnApLT5iX2ZsYWdzKQogI2RlZmluZSBYRlNfQlVGX1pFUk9GTEFHUyhicCkJKChicCktPmJfZmxhZ3MgJj0gXAogCQl+KFhCRl9SRUFEfFhCRl9XUklURXxYQkZfQVNZTkN8WEJGX0RFTFdSSXxYQkZfT1JERVJFRCkpCiAKLSNkZWZpbmUgWEZTX0JVRl9TVEFMRShicCkJKChicCktPmJfZmxhZ3MgfD0gWEZTX0JfU1RBTEUpCi0jZGVmaW5lIFhGU19CVUZfVU5TVEFMRShicCkJKChicCktPmJfZmxhZ3MgJj0gflhGU19CX1NUQUxFKQotI2RlZmluZSBYRlNfQlVGX0lTU1RBTEUoYnApCSgoYnApLT5iX2ZsYWdzICYgWEZTX0JfU1RBTEUpCisjZGVmaW5lIFhGU19CVUZfU1RBTEUoYnApCSgoYnApLT5iX2ZsYWdzIHw9IFhCRl9TVEFMRSkKKyNkZWZpbmUgWEZTX0JVRl9VTlNUQUxFKGJwKQkoKGJwKS0+Yl9mbGFncyAmPSB+WEJGX1NUQUxFKQorI2RlZmluZSBYRlNfQlVGX0lTU1RBTEUoYnApCSgoYnApLT5iX2ZsYWdzICYgWEJGX1NUQUxFKQogI2RlZmluZSBYRlNfQlVGX1NVUEVSX1NUQUxFKGJwKQlkbyB7CQkJCVwKIAkJCQkJWEZTX0JVRl9TVEFMRShicCk7CVwKIAkJCQkJeGZzX2J1Zl9kZWx3cmlfZGVxdWV1ZShicCk7CVwKIAkJCQkJWEZTX0JVRl9ET05FKGJwKTsJXAogCQkJCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgWEZTX0JVRl9NQU5BR0UJCVhCRl9GU19NQU5BR0VECiAjZGVmaW5lIFhGU19CVUZfVU5NQU5BR0UoYnApCSgoYnApLT5iX2ZsYWdzICY9IH5YQkZfRlNfTUFOQUdFRCkKIAogI2RlZmluZSBYRlNfQlVGX0RFTEFZV1JJVEUoYnApCQkoKGJwKS0+Yl9mbGFncyB8PSBYQkZfREVMV1JJKQpAQCAtMzg1LDMxICszNzYsMTEgQEAKIAogI2RlZmluZSB4ZnNfYmlvbW92ZShicCwgb2ZmLCBsZW4sIGRhdGEsIHJ3KSBcCiAJICAgIHhmc19idWZfaW9tb3ZlKChicCksIChvZmYpLCAobGVuKSwgKGRhdGEpLCBcCi0JCSgocncpID09IFhGU19CX1dSSVRFKSA/IFhCUldfV1JJVEUgOiBYQlJXX1JFQUQpCisJCSgocncpID09IFhCRl9XUklURSkgPyBYQlJXX1dSSVRFIDogWEJSV19SRUFEKQogCiAjZGVmaW5lIHhmc19iaW96ZXJvKGJwLCBvZmYsIGxlbikgXAogCSAgICB4ZnNfYnVmX2lvbW92ZSgoYnApLCAob2ZmKSwgKGxlbiksIE5VTEwsIFhCUldfWkVSTykKIAotCi1zdGF0aWMgaW5saW5lIGludCBYRlNfYndyaXRlKHhmc19idWZfdCAqYnApCi17Ci0JaW50CWlvd2FpdCA9IChicC0+Yl9mbGFncyAmIFhCRl9BU1lOQykgPT0gMDsKLQlpbnQJZXJyb3IgPSAwOwotCi0JaWYgKCFpb3dhaXQpCi0JCWJwLT5iX2ZsYWdzIHw9IF9YQkZfUlVOX1FVRVVFUzsKLQotCXhmc19idWZfZGVsd3JpX2RlcXVldWUoYnApOwotCXhmc19idWZfaW9zdHJhdGVneShicCk7Ci0JaWYgKGlvd2FpdCkgewotCQllcnJvciA9IHhmc19idWZfaW93YWl0KGJwKTsKLQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JfQotCXJldHVybiBlcnJvcjsKLX0KLQotI2RlZmluZSBYRlNfYmRzdHJhdChicCkgeGZzX2J1Zl9pb3JlcXVlc3QoYnApCi0KICNkZWZpbmUgeGZzX2lvd2FpdChicCkJeGZzX2J1Zl9pb3dhaXQoYnApCiAKICNkZWZpbmUgeGZzX2JhcmVhZCh0YXJnZXQsIHJhYmxrbm8sIHJhbGVuKSAgXApAQCAtNDI0LDYgKzM5NSw3IEBACiBleHRlcm4gdm9pZCB4ZnNfd2FpdF9idWZ0YXJnKHhmc19idWZ0YXJnX3QgKik7CiBleHRlcm4gaW50IHhmc19zZXRzaXplX2J1ZnRhcmcoeGZzX2J1ZnRhcmdfdCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IHhmc19mbHVzaF9idWZ0YXJnKHhmc19idWZ0YXJnX3QgKiwgaW50KTsKKwogI2lmZGVmIENPTkZJR19LREJfTU9EVUxFUwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgKnhmc19nZXRfYnVmdGFyZ19saXN0KHZvaWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19mc19zdWJyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19mc19zdWJyLmMKaW5kZXggNzUwMWI4NS4uYjY5MThkNyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZnNfc3Vici5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZzX3N1YnIuYwpAQCAtNzksNyArNzksNyBAQAogCQl4ZnNfaWZsYWdzX2NsZWFyKGlwLCBYRlNfSVRSVU5DQVRFRCk7CiAJCXJldCA9IC1maWxlbWFwX2ZkYXRhd3JpdGUobWFwcGluZyk7CiAJfQotCWlmIChmbGFncyAmIFhGU19CX0FTWU5DKQorCWlmIChmbGFncyAmIFhCRl9BU1lOQykKIAkJcmV0dXJuIHJldDsKIAlyZXQyID0geGZzX3dhaXRfb25fcGFnZXMoaXAsIGZpcnN0LCBsYXN0KTsKIAlpZiAoIXJldCkKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCmluZGV4IGEwMzRjZjYuLjRlYTFlZTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwpAQCAtNDQ3LDEyICs0NDcsMTIgQEAKIGludAogeGZzX2F0dHJtdWx0aV9hdHRyX2dldCgKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKLQljaGFyCQkJKm5hbWUsCi0JY2hhcgkJCV9fdXNlciAqdWJ1ZiwKKwl1bnNpZ25lZCBjaGFyCQkqbmFtZSwKKwl1bnNpZ25lZCBjaGFyCQlfX3VzZXIgKnVidWYsCiAJX191aW50MzJfdAkJKmxlbiwKIAlfX3VpbnQzMl90CQlmbGFncykKIHsKLQljaGFyCQkJKmtidWY7CisJdW5zaWduZWQgY2hhcgkJKmtidWY7CiAJaW50CQkJZXJyb3IgPSBFRkFVTFQ7CiAKIAlpZiAoKmxlbiA+IFhBVFRSX1NJWkVfTUFYKQpAQCAtNDc2LDEyICs0NzYsMTIgQEAKIGludAogeGZzX2F0dHJtdWx0aV9hdHRyX3NldCgKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKLQljaGFyCQkJKm5hbWUsCi0JY29uc3QgY2hhcgkJX191c2VyICp1YnVmLAorCXVuc2lnbmVkIGNoYXIJCSpuYW1lLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIJX191c2VyICp1YnVmLAogCV9fdWludDMyX3QJCWxlbiwKIAlfX3VpbnQzMl90CQlmbGFncykKIHsKLQljaGFyCQkJKmtidWY7CisJdW5zaWduZWQgY2hhcgkJKmtidWY7CiAJaW50CQkJZXJyb3IgPSBFRkFVTFQ7CiAKIAlpZiAoSVNfSU1NVVRBQkxFKGlub2RlKSB8fCBJU19BUFBFTkQoaW5vZGUpKQpAQCAtNTAxLDcgKzUwMSw3IEBACiBpbnQKIHhmc19hdHRybXVsdGlfYXR0cl9yZW1vdmUoCiAJc3RydWN0IGlub2RlCQkqaW5vZGUsCi0JY2hhcgkJCSpuYW1lLAorCXVuc2lnbmVkIGNoYXIJCSpuYW1lLAogCV9fdWludDMyX3QJCWZsYWdzKQogewogCWlmIChJU19JTU1VVEFCTEUoaW5vZGUpIHx8IElTX0FQUEVORChpbm9kZSkpCkBAIC01MTksNyArNTE5LDcgQEAKIAl4ZnNfZnNvcF9hdHRybXVsdGlfaGFuZGxlcmVxX3QgYW1faHJlcTsKIAlzdHJ1Y3QgZGVudHJ5CQkqZGVudHJ5OwogCXVuc2lnbmVkIGludAkJaSwgc2l6ZTsKLQljaGFyCQkJKmF0dHJfbmFtZTsKKwl1bnNpZ25lZCBjaGFyCQkqYXR0cl9uYW1lOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLVhGU19FUlJPUihFUEVSTSk7CkBAIC01NDcsNyArNTQ3LDcgQEAKIAogCWVycm9yID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgYW1faHJlcS5vcGNvdW50OyBpKyspIHsKLQkJb3BzW2ldLmFtX2Vycm9yID0gc3RybmNweV9mcm9tX3VzZXIoYXR0cl9uYW1lLAorCQlvcHNbaV0uYW1fZXJyb3IgPSBzdHJuY3B5X2Zyb21fdXNlcigoY2hhciAqKWF0dHJfbmFtZSwKIAkJCQlvcHNbaV0uYW1fYXR0cm5hbWUsIE1BWE5BTUVMRU4pOwogCQlpZiAob3BzW2ldLmFtX2Vycm9yID09IDAgfHwgb3BzW2ldLmFtX2Vycm9yID09IE1BWE5BTUVMRU4pCiAJCQllcnJvciA9IC1FUkFOR0U7CkBAIC0xNDMxLDYgKzE0MzEsOSBAQAogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOwogCisJCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRE9OTFkpCisJCQlyZXR1cm4gLVhGU19FUlJPUihFUk9GUyk7CisKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbm91dCwgYXJnLCBzaXplb2YoaW5vdXQpKSkKIAkJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5oCmluZGV4IDdiZDdjNmEuLmQ1NjE3M2IgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuaApAQCAtNDUsMjMgKzQ1LDIzIEBACiBleHRlcm4gaW50CiB4ZnNfYXR0cm11bHRpX2F0dHJfZ2V0KAogCXN0cnVjdCBpbm9kZQkJKmlub2RlLAotCWNoYXIJCQkqbmFtZSwKLQljaGFyCQkJX191c2VyICp1YnVmLAorCXVuc2lnbmVkIGNoYXIJCSpuYW1lLAorCXVuc2lnbmVkIGNoYXIJCV9fdXNlciAqdWJ1ZiwKIAlfX3VpbnQzMl90CQkqbGVuLAogCV9fdWludDMyX3QJCWZsYWdzKTsKIAogZXh0ZXJuIGludAotCXhmc19hdHRybXVsdGlfYXR0cl9zZXQoCit4ZnNfYXR0cm11bHRpX2F0dHJfc2V0KAogCXN0cnVjdCBpbm9kZQkJKmlub2RlLAotCWNoYXIJCQkqbmFtZSwKLQljb25zdCBjaGFyCQlfX3VzZXIgKnVidWYsCisJdW5zaWduZWQgY2hhcgkJKm5hbWUsCisJY29uc3QgdW5zaWduZWQgY2hhcglfX3VzZXIgKnVidWYsCiAJX191aW50MzJfdAkJbGVuLAogCV9fdWludDMyX3QJCWZsYWdzKTsKIAogZXh0ZXJuIGludAogeGZzX2F0dHJtdWx0aV9hdHRyX3JlbW92ZSgKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKLQljaGFyCQkJKm5hbWUsCisJdW5zaWduZWQgY2hhcgkJKm5hbWUsCiAJX191aW50MzJfdAkJZmxhZ3MpOwogCiBleHRlcm4gc3RydWN0IGRlbnRyeSAqCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bDMyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bDMyLmMKaW5kZXggYmUxNTI3Yi4uMGJmNmQ2MSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwzMi5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsMzIuYwpAQCAtNDExLDcgKzQxMSw3IEBACiAJY29tcGF0X3hmc19mc29wX2F0dHJtdWx0aV9oYW5kbGVyZXFfdAlhbV9ocmVxOwogCXN0cnVjdCBkZW50cnkJCQkJKmRlbnRyeTsKIAl1bnNpZ25lZCBpbnQJCQkJaSwgc2l6ZTsKLQljaGFyCQkJCQkqYXR0cl9uYW1lOworCXVuc2lnbmVkIGNoYXIJCQkJKmF0dHJfbmFtZTsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1YRlNfRVJST1IoRVBFUk0pOwpAQCAtNDQwLDcgKzQ0MCw3IEBACiAKIAllcnJvciA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGFtX2hyZXEub3Bjb3VudDsgaSsrKSB7Ci0JCW9wc1tpXS5hbV9lcnJvciA9IHN0cm5jcHlfZnJvbV91c2VyKGF0dHJfbmFtZSwKKwkJb3BzW2ldLmFtX2Vycm9yID0gc3RybmNweV9mcm9tX3VzZXIoKGNoYXIgKilhdHRyX25hbWUsCiAJCQkJY29tcGF0X3B0cihvcHNbaV0uYW1fYXR0cm5hbWUpLAogCQkJCU1BWE5BTUVMRU4pOwogCQlpZiAob3BzW2ldLmFtX2Vycm9yID09IDAgfHwgb3BzW2ldLmFtX2Vycm9yID09IE1BWE5BTUVMRU4pCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKaW5kZXggMjI1OTQ2MC4uZTg1NjZiYiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwpAQCAtMTQwLDEwICsxNDAsMTAgQEAKIAlzdHJ1Y3QgeGZzX2lub2RlICppcCA9IFhGU19JKGlub2RlKTsKIAlzaXplX3QJCWxlbmd0aDsKIAl2b2lkCQkqdmFsdWU7Ci0JY2hhcgkJKm5hbWU7CisJdW5zaWduZWQgY2hhcgkqbmFtZTsKIAlpbnQJCWVycm9yOwogCi0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXIsICZuYW1lLAorCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCAoY2hhciAqKikmbmFtZSwKIAkJCQkJICAgICAmdmFsdWUsICZsZW5ndGgpOwogCWlmIChlcnJvcikgewogCQlpZiAoZXJyb3IgPT0gLUVPUE5PVFNVUFApCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCmluZGV4IDBkMzI0NTcuLmVhYzZmODAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCkBAIC02MzAsMTggKzYzMCw5IEBACiAJICogYnkgcm9vdC4gIFRoaXMga2VlcHMgcGVvcGxlIGZyb20gbW9kaWZ5aW5nIHNldHVpZCBhbmQKIAkgKiBzZXRnaWQgYmluYXJpZXMuCiAJICovCi0KLQlpZiAoKCh4aXAtPmlfZC5kaV9tb2RlICYgU19JU1VJRCkgfHwKLQkgICAgKCh4aXAtPmlfZC5kaV9tb2RlICYgKFNfSVNHSUQgfCBTX0lYR1JQKSkgPT0KLQkJKFNfSVNHSUQgfCBTX0lYR1JQKSkpICYmCi0JICAgICAhY2FwYWJsZShDQVBfRlNFVElEKSkgewotCQllcnJvciA9IHhmc193cml0ZV9jbGVhcl9zZXR1aWQoeGlwKTsKLQkJaWYgKGxpa2VseSghZXJyb3IpKQotCQkJZXJyb3IgPSAtZmlsZV9yZW1vdmVfc3VpZChmaWxlKTsKLQkJaWYgKHVubGlrZWx5KGVycm9yKSkgewotCQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOwotCQl9Ci0JfQorCWVycm9yID0gLWZpbGVfcmVtb3ZlX3N1aWQoZmlsZSk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOwogCiAJLyogV2UgY2FuIHdyaXRlIGJhY2sgdGhpcyBxdWV1ZSBpbiBwYWdlIHJlY2xhaW0gKi8KIAljdXJyZW50LT5iYWNraW5nX2Rldl9pbmZvID0gbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbzsKQEAgLTc4NCw1MyArNzc1LDYgQEAKIH0KIAogLyoKLSAqIEFsbCB4ZnMgbWV0YWRhdGEgYnVmZmVycyBleGNlcHQgbG9nIHN0YXRlIG1hY2hpbmUgYnVmZmVycwotICogZ2V0IHRoaXMgYXR0YWNoZWQgYXMgdGhlaXIgYl9iZHN0cmF0IGNhbGxiYWNrIGZ1bmN0aW9uLgotICogVGhpcyBpcyBzbyB0aGF0IHdlIGNhbiBjYXRjaCBhIGJ1ZmZlcgotICogYWZ0ZXIgcHJlbWF0dXJlbHkgdW5waW5uaW5nIGl0IHRvIGZvcmNpYmx5IHNodXRkb3duIHRoZSBmaWxlc3lzdGVtLgotICovCi1pbnQKLXhmc19iZHN0cmF0X2NiKHN0cnVjdCB4ZnNfYnVmICpicCkKLXsKLQlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihicC0+Yl9tb3VudCkpIHsKLQkJdHJhY2VfeGZzX2Jkc3RyYXRfc2h1dChicCwgX1JFVF9JUF8pOwotCQkvKgotCQkgKiBNZXRhZGF0YSB3cml0ZSB0aGF0IGRpZG4ndCBnZXQgbG9nZ2VkIGJ1dAotCQkgKiB3cml0dGVuIGRlbGF5ZWQgYW55d2F5LiBUaGVzZSBhcmVuJ3QgYXNzb2NpYXRlZAotCQkgKiB3aXRoIGEgdHJhbnNhY3Rpb24sIGFuZCBjYW4gYmUgaWdub3JlZC4KLQkJICovCi0JCWlmIChYRlNfQlVGX0lPRE9ORV9GVU5DKGJwKSA9PSBOVUxMICYmCi0JCSAgICAoWEZTX0JVRl9JU1JFQUQoYnApKSA9PSAwKQotCQkJcmV0dXJuICh4ZnNfYmlvZXJyb3JfcmVsc2UoYnApKTsKLQkJZWxzZQotCQkJcmV0dXJuICh4ZnNfYmlvZXJyb3IoYnApKTsKLQl9Ci0KLQl4ZnNfYnVmX2lvcmVxdWVzdChicCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBXcmFwcGVyIGFyb3VuZCBiZHN0cmF0IHNvIHRoYXQgd2UgY2FuIHN0b3AgZGF0YSBmcm9tIGdvaW5nIHRvIGRpc2sgaW4gY2FzZQotICogd2UgYXJlIHNodXR0aW5nIGRvd24gdGhlIGZpbGVzeXN0ZW0uICBUeXBpY2FsbHkgdXNlciBkYXRhIGdvZXMgdGhydSB0aGlzCi0gKiBwYXRoOyBvbmUgb2YgdGhlIGV4Y2VwdGlvbnMgaXMgdGhlIHN1cGVyYmxvY2suCi0gKi8KLXZvaWQKLXhmc2Jkc3RyYXQoCi0Jc3RydWN0IHhmc19tb3VudAkqbXAsCi0Jc3RydWN0IHhmc19idWYJCSpicCkKLXsKLQlBU1NFUlQobXApOwotCWlmICghWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpIHsKLQkJeGZzX2J1Zl9pb3JlcXVlc3QoYnApOwotCQlyZXR1cm47Ci0JfQotCi0JdHJhY2VfeGZzX2Jkc3RyYXRfc2h1dChicCwgX1JFVF9JUF8pOwotCXhmc19iaW9lcnJvcl9yZWxzZShicCk7Ci19Ci0KLS8qCiAgKiBJZiB0aGUgdW5kZXJseWluZyAoZGF0YS9sb2cvcnQpIGRldmljZSBpcyByZWFkb25seSwgdGhlcmUgYXJlIHNvbWUKICAqIG9wZXJhdGlvbnMgdGhhdCBjYW5ub3QgcHJvY2VlZC4KICAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmggYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuaAppbmRleCBkMWY3Nzg5Li4zNDJhZThjIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuaApAQCAtMjIsOSArMjIsNiBAQAogc3RydWN0IHhmc19pbm9kZTsKIHN0cnVjdCB4ZnNfYnVmOwogCi0vKiBlcnJvcnMgZnJvbSB4ZnNiZHN0cmF0KCkgbXVzdCBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgYnVmZmVyICovCi1leHRlcm4gdm9pZCB4ZnNiZHN0cmF0KHN0cnVjdCB4ZnNfbW91bnQgKiwgc3RydWN0IHhmc19idWYgKik7Ci1leHRlcm4gaW50IHhmc19iZHN0cmF0X2NiKHN0cnVjdCB4ZnNfYnVmICopOwogZXh0ZXJuIGludCB4ZnNfZGV2X2lzX3JlYWRfb25seShzdHJ1Y3QgeGZzX21vdW50ICosIGNoYXIgKik7CiAKIGV4dGVybiBpbnQgeGZzX3plcm9fZW9mKHN0cnVjdCB4ZnNfaW5vZGUgKiwgeGZzX29mZl90LCB4ZnNfZnNpemVfdCk7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwppbmRleCA3NzQxNGRiLi4yNWVhMjQwIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKQEAgLTg3NywxMiArODc3LDExIEBACiB7CiAJc3RydWN0IHhmc19haWwJKmFpbHAgPSBkYXRhOwogCXhmc19sc25fdAlsYXN0X3B1c2hlZF9sc24gPSAwOwotCWxvbmcJCXRvdXQgPSAwOworCWxvbmcJCXRvdXQgPSAwOyAvKiBtaWxsaXNlY29uZHMgKi8KIAogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCWlmICh0b3V0KQotCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXModG91dCkpOwotCQl0b3V0ID0gMTAwMDsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHRvdXQgPworCQkJCW1zZWNzX3RvX2ppZmZpZXModG91dCkgOiBNQVhfU0NIRURVTEVfVElNRU9VVCk7CiAKIAkJLyogc3dzdXNwICovCiAJCXRyeV90b19mcmVlemUoKTsKQEAgLTEwMjIsMTIgKzEwMjEsNDUgQEAKIAlYRlNfSShpbm9kZSktPmlfdXBkYXRlX2NvcmUgPSAxOwogfQogCi0vKgotICogQXR0ZW1wdCB0byBmbHVzaCB0aGUgaW5vZGUsIHRoaXMgd2lsbCBhY3R1YWxseSBmYWlsCi0gKiBpZiB0aGUgaW5vZGUgaXMgcGlubmVkLCBidXQgd2UgZGlydHkgdGhlIGlub2RlIGFnYWluCi0gKiBhdCB0aGUgcG9pbnQgd2hlbiBpdCBpcyB1bnBpbm5lZCBhZnRlciBhIGxvZyB3cml0ZSwKLSAqIHNpbmNlIHRoaXMgaXMgd2hlbiB0aGUgaW5vZGUgaXRzZWxmIGJlY29tZXMgZmx1c2hhYmxlLgotICovCitTVEFUSUMgaW50Cit4ZnNfbG9nX2lub2RlKAorCXN0cnVjdCB4ZnNfaW5vZGUJKmlwKQoreworCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gaXAtPmlfbW91bnQ7CisJc3RydWN0IHhmc190cmFucwkqdHA7CisJaW50CQkJZXJyb3I7CisKKwl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CisJdHAgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFhGU19UUkFOU19GU1lOQ19UUyk7CisJZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgMCwgWEZTX0ZTWU5DX1RTX0xPR19SRVMobXApLCAwLCAwLCAwKTsKKworCWlmIChlcnJvcikgeworCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKKwkJLyogd2UgbmVlZCB0byByZXR1cm4gd2l0aCB0aGUgbG9jayBob2xkIHNoYXJlZCAqLworCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisKKwkvKgorCSAqIE5vdGUgLSBpdCdzIHBvc3NpYmxlIHRoYXQgd2UgbWlnaHQgaGF2ZSBwdXNoZWQgb3Vyc2VsdmVzIG91dCBvZiB0aGUKKwkgKiB3YXkgZHVyaW5nIHRyYW5zX3Jlc2VydmUgd2hpY2ggd291bGQgZmx1c2ggdGhlIGlub2RlLiAgQnV0IHRoZXJlJ3MKKwkgKiBubyBndWFyYW50ZWUgdGhhdCB0aGUgaW5vZGUgYnVmZmVyIGhhcyBhY3R1YWxseSBnb25lIG91dCB5ZXQgKGl0J3MKKwkgKiBkZWx3cmkpLiAgUGx1cyB0aGUgYnVmZmVyIGNvdWxkIGJlIHBpbm5lZCBhbnl3YXkgaWYgaXQncyBwYXJ0IG9mCisJICogYW4gaW5vZGUgaW4gYW5vdGhlciByZWNlbnQgdHJhbnNhY3Rpb24uICBTbyB3ZSBwbGF5IGl0IHNhZmUgYW5kCisJICogZmlyZSBvZmYgdGhlIHRyYW5zYWN0aW9uIGFueXdheS4KKwkgKi8KKwl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJeGZzX3RyYW5zX2lob2xkKHRwLCBpcCk7CisJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOworCXhmc190cmFuc19zZXRfc3luYyh0cCk7CisJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKKwl4ZnNfaWxvY2tfZGVtb3RlKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKIFNUQVRJQyBpbnQKIHhmc19mc193cml0ZV9pbm9kZSgKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKQEAgLTEwMzUsNyArMTA2Nyw3IEBACiB7CiAJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CiAJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKLQlpbnQJCQllcnJvciA9IDA7CisJaW50CQkJZXJyb3IgPSBFQUdBSU47CiAKIAl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKIApAQCAtMTA0NiwzNiArMTA3OCw1NiBAQAogCQllcnJvciA9IHhmc193YWl0X29uX3BhZ2VzKGlwLCAwLCAtMSk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0OwotCX0KIAotCS8qCi0JICogQnlwYXNzIGlub2RlcyB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiBjbGVhbmVkIGJ5Ci0JICogdGhlIGlub2RlIGZsdXNoIGNsdXN0ZXJpbmcgY29kZSBpbnNpZGUgeGZzX2lmbHVzaAotCSAqLwotCWlmICh4ZnNfaW5vZGVfY2xlYW4oaXApKQotCQlnb3RvIG91dDsKLQotCS8qCi0JICogV2UgbWFrZSB0aGlzIG5vbi1ibG9ja2luZyBpZiB0aGUgaW5vZGUgaXMgY29udGVuZGVkLCByZXR1cm4KLQkgKiBFQUdBSU4gdG8gaW5kaWNhdGUgdG8gdGhlIGNhbGxlciB0aGF0IHRoZXkgZGlkIG5vdCBzdWNjZWVkLgotCSAqIFRoaXMgcHJldmVudHMgdGhlIGZsdXNoIHBhdGggZnJvbSBibG9ja2luZyBvbiBpbm9kZXMgaW5zaWRlCi0JICogYW5vdGhlciBvcGVyYXRpb24gcmlnaHQgbm93LCB0aGV5IGdldCBjYXVnaHQgbGF0ZXIgYnkgeGZzX3N5bmMuCi0JICovCi0JaWYgKHN5bmMpIHsKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZSBpbm9kZSBoYXMgaGl0IHN0YWJsZSBzdG9yYWdlLiAgQnkgdXNpbmcgdGhlCisJCSAqIGxvZyBhbmQgdGhlIGZzeW5jIHRyYW5zYWN0aW9ucyB3ZSByZWR1Y2UgdGhlIElPcyB3ZSBoYXZlCisJCSAqIHRvIGRvIGhlcmUgZnJvbSB0d28gKGxvZyBhbmQgaW5vZGUpIHRvIGp1c3QgdGhlIGxvZy4KKwkJICoKKwkJICogTm90ZTogV2Ugc3RpbGwgbmVlZCB0byBkbyBhIGRlbHdyaSB3cml0ZSBvZiB0aGUgaW5vZGUgYWZ0ZXIKKwkJICogdGhpcyB0byBmbHVzaCBpdCB0byB0aGUgYmFja2luZyBidWZmZXIgc28gdGhhdCBidWxrc3RhdAorCQkgKiB3b3JrcyBwcm9wZXJseSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoZSBpbm9kZSBoYXMgYmVlbgorCQkgKiB3cml0dGVuLiAgQmVjYXVzZSB3ZSBob2xkIHRoZSBpbG9jayBhdG9taWNhbGx5IG92ZXIgdGhlCisJCSAqIHRyYW5zYWN0aW9uIGNvbW1pdCBhbmQgdGhlIGlub2RlIGZsdXNoIHdlIGFyZSBndWFyYW50ZWVkCisJCSAqIHRoYXQgdGhlIGlub2RlIGlzIG5vdCBwaW5uZWQgd2hlbiBpdCByZXR1cm5zLiBJZiB0aGUgZmx1c2gKKwkJICogbG9jayBpcyBhbHJlYWR5IGhlbGQsIHRoZW4gdGhlIGlub2RlIGhhcyBhbHJlYWR5IGJlZW4KKwkJICogZmx1c2hlZCBvbmNlIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGZsdXNoIGl0IGFnYWluLiAgSGVuY2UKKwkJICogdGhlIGNvZGUgd2lsbCBvbmx5IGZsdXNoIHRoZSBpbm9kZSBpZiBpdCBpc24ndCBhbHJlYWR5CisJCSAqIGJlaW5nIGZsdXNoZWQuCisJCSAqLwogCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwotCQl4ZnNfaWZsb2NrKGlwKTsKLQotCQllcnJvciA9IHhmc19pZmx1c2goaXAsIFhGU19JRkxVU0hfU1lOQyk7CisJCWlmIChpcC0+aV91cGRhdGVfY29yZSkgeworCQkJZXJyb3IgPSB4ZnNfbG9nX2lub2RlKGlwKTsKKwkJCWlmIChlcnJvcikKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KIAl9IGVsc2UgewotCQllcnJvciA9IEVBR0FJTjsKKwkJLyoKKwkJICogV2UgbWFrZSB0aGlzIG5vbi1ibG9ja2luZyBpZiB0aGUgaW5vZGUgaXMgY29udGVuZGVkLCByZXR1cm4KKwkJICogRUFHQUlOIHRvIGluZGljYXRlIHRvIHRoZSBjYWxsZXIgdGhhdCB0aGV5IGRpZCBub3Qgc3VjY2VlZC4KKwkJICogVGhpcyBwcmV2ZW50cyB0aGUgZmx1c2ggcGF0aCBmcm9tIGJsb2NraW5nIG9uIGlub2RlcyBpbnNpZGUKKwkJICogYW5vdGhlciBvcGVyYXRpb24gcmlnaHQgbm93LCB0aGV5IGdldCBjYXVnaHQgbGF0ZXIgYnkgeGZzX3N5bmMuCisJCSAqLwogCQlpZiAoIXhmc19pbG9ja19ub3dhaXQoaXAsIFhGU19JTE9DS19TSEFSRUQpKQogCQkJZ290byBvdXQ7Ci0JCWlmICh4ZnNfaXBpbmNvdW50KGlwKSB8fCAheGZzX2lmbG9ja19ub3dhaXQoaXApKQotCQkJZ290byBvdXRfdW5sb2NrOwotCi0JCWVycm9yID0geGZzX2lmbHVzaChpcCwgWEZTX0lGTFVTSF9BU1lOQ19OT0JMT0NLKTsKIAl9CiAKKwlpZiAoeGZzX2lwaW5jb3VudChpcCkgfHwgIXhmc19pZmxvY2tfbm93YWl0KGlwKSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJLyoKKwkgKiBOb3cgd2UgaGF2ZSB0aGUgZmx1c2ggbG9jayBhbmQgdGhlIGlub2RlIGlzIG5vdCBwaW5uZWQsIHdlIGNhbiBjaGVjaworCSAqIGlmIHRoZSBpbm9kZSBpcyByZWFsbHkgY2xlYW4gYXMgd2Uga25vdyB0aGF0IHRoZXJlIGFyZSBubyBwZW5kaW5nCisJICogdHJhbnNhY3Rpb24gY29tcGxldGlvbnMsIGl0IGlzIG5vdCB3YWl0aW5nIG9uIHRoZSBkZWxheWVkIHdyaXRlCisJICogcXVldWUgYW5kIHRoZXJlIGlzIG5vIElPIGluIHByb2dyZXNzLgorCSAqLworCWlmICh4ZnNfaW5vZGVfY2xlYW4oaXApKSB7CisJCXhmc19pZnVubG9jayhpcCk7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwllcnJvciA9IHhmc19pZmx1c2goaXAsIDApOworCiAgb3V0X3VubG9jazoKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CiAgb3V0OgpAQCAtMTI1Nyw2ICsxMzA5LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKK1NUQVRJQyB2b2lkCit4ZnNfc2F2ZV9yZXN2YmxrcyhzdHJ1Y3QgeGZzX21vdW50ICptcCkKK3sKKwlfX3VpbnQ2NF90IHJlc2Jsa3MgPSAwOworCisJbXAtPm1fcmVzYmxrc19zYXZlID0gbXAtPm1fcmVzYmxrczsKKwl4ZnNfcmVzZXJ2ZV9ibG9ja3MobXAsICZyZXNibGtzLCBOVUxMKTsKK30KKworU1RBVElDIHZvaWQKK3hmc19yZXN0b3JlX3Jlc3ZibGtzKHN0cnVjdCB4ZnNfbW91bnQgKm1wKQoreworCV9fdWludDY0X3QgcmVzYmxrczsKKworCWlmIChtcC0+bV9yZXNibGtzX3NhdmUpIHsKKwkJcmVzYmxrcyA9IG1wLT5tX3Jlc2Jsa3Nfc2F2ZTsKKwkJbXAtPm1fcmVzYmxrc19zYXZlID0gMDsKKwl9IGVsc2UKKwkJcmVzYmxrcyA9IHhmc19kZWZhdWx0X3Jlc2Jsa3MobXApOworCisJeGZzX3Jlc2VydmVfYmxvY2tzKG1wLCAmcmVzYmxrcywgTlVMTCk7Cit9CisKIFNUQVRJQyBpbnQKIHhmc19mc19yZW1vdW50KAogCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCkBAIC0xMzM2LDExICsxNDExLDI3IEBACiAJCQl9CiAJCQltcC0+bV91cGRhdGVfZmxhZ3MgPSAwOwogCQl9CisKKwkJLyoKKwkJICogRmlsbCBvdXQgdGhlIHJlc2VydmUgcG9vbCBpZiBpdCBpcyBlbXB0eS4gVXNlIHRoZSBzdGFzaGVkCisJCSAqIHZhbHVlIGlmIGl0IGlzIG5vbi16ZXJvLCBvdGhlcndpc2UgZ28gd2l0aCB0aGUgZGVmYXVsdC4KKwkJICovCisJCXhmc19yZXN0b3JlX3Jlc3ZibGtzKG1wKTsKIAl9CiAKIAkvKiBydyAtPiBybyAqLwogCWlmICghKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkgJiYgKCpmbGFncyAmIE1TX1JET05MWSkpIHsKKwkJLyoKKwkJICogQWZ0ZXIgd2UgaGF2ZSBzeW5jZWQgdGhlIGRhdGEgYnV0IGJlZm9yZSB3ZSBzeW5jIHRoZQorCQkgKiBtZXRhZGF0YSwgd2UgbmVlZCB0byBmcmVlIHVwIHRoZSByZXNlcnZlIGJsb2NrIHBvb2wgc28gdGhhdAorCQkgKiB0aGUgdXNlZCBibG9jayBjb3VudCBpbiB0aGUgc3VwZXJibG9jayBvbiBkaXNrIGlzIGNvcnJlY3QgYXQKKwkJICogdGhlIGVuZCBvZiB0aGUgcmVtb3VudC4gU3Rhc2ggdGhlIGN1cnJlbnQgcmVzZXJ2ZSBwb29sIHNpemUKKwkJICogc28gdGhhdCBpZiB3ZSBnZXQgcmVtb3VudGVkIHJ3LCB3ZSBjYW4gcmV0dXJuIGl0IHRvIHRoZSBzYW1lCisJCSAqIHNpemUuCisJCSAqLworCiAJCXhmc19xdWllc2NlX2RhdGEobXApOworCQl4ZnNfc2F2ZV9yZXN2YmxrcyhtcCk7CiAJCXhmc19xdWllc2NlX2F0dHIobXApOwogCQltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfUkRPTkxZOwogCX0KQEAgLTEzNTksMTEgKzE0NTAsMjIgQEAKIHsKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKIAorCXhmc19zYXZlX3Jlc3ZibGtzKG1wKTsKIAl4ZnNfcXVpZXNjZV9hdHRyKG1wKTsKIAlyZXR1cm4gLXhmc19mc19sb2dfZHVtbXkobXApOwogfQogCiBTVEFUSUMgaW50Cit4ZnNfZnNfdW5mcmVlemUoCisJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYikKK3sKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKKworCXhmc19yZXN0b3JlX3Jlc3ZibGtzKG1wKTsKKwlyZXR1cm4gMDsKK30KKworU1RBVElDIGludAogeGZzX2ZzX3Nob3dfb3B0aW9ucygKIAlzdHJ1Y3Qgc2VxX2ZpbGUJCSptLAogCXN0cnVjdCB2ZnNtb3VudAkJKm1udCkKQEAgLTE1ODUsNiArMTY4Nyw3IEBACiAJLnB1dF9zdXBlcgkJPSB4ZnNfZnNfcHV0X3N1cGVyLAogCS5zeW5jX2ZzCQk9IHhmc19mc19zeW5jX2ZzLAogCS5mcmVlemVfZnMJCT0geGZzX2ZzX2ZyZWV6ZSwKKwkudW5mcmVlemVfZnMJCT0geGZzX2ZzX3VuZnJlZXplLAogCS5zdGF0ZnMJCQk9IHhmc19mc19zdGF0ZnMsCiAJLnJlbW91bnRfZnMJCT0geGZzX2ZzX3JlbW91bnQsCiAJLnNob3dfb3B0aW9ucwkJPSB4ZnNfZnNfc2hvd19vcHRpb25zLApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCmluZGV4IDFmNWU0YmIuLmE5ZjZkMjAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKQEAgLTkwLDE0ICs5MCwxMyBAQAogU1RBVElDIGludAogeGZzX2lub2RlX2FnX3dhbGsoCiAJc3RydWN0IHhmc19tb3VudAkqbXAsCi0JeGZzX2FnbnVtYmVyX3QJCWFnLAorCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZywKIAlpbnQJCQkoKmV4ZWN1dGUpKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLAogCQkJCQkgICBzdHJ1Y3QgeGZzX3BlcmFnICpwYWcsIGludCBmbGFncyksCiAJaW50CQkJZmxhZ3MsCiAJaW50CQkJdGFnLAogCWludAkJCWV4Y2x1c2l2ZSkKIHsKLQlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWcgPSAmbXAtPm1fcGVyYWdbYWddOwogCXVpbnQzMl90CQlmaXJzdF9pbmRleDsKIAlpbnQJCQlsYXN0X2Vycm9yID0gMDsKIAlpbnQJCQlza2lwcGVkOwpAQCAtMTQxLDggKzE0MCw2IEBACiAJCWRlbGF5KDEpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQotCi0JeGZzX3B1dF9wZXJhZyhtcCwgcGFnKTsKIAlyZXR1cm4gbGFzdF9lcnJvcjsKIH0KIApAQCAtMTYwLDEwICsxNTcsMTYgQEAKIAl4ZnNfYWdudW1iZXJfdAkJYWc7CiAKIAlmb3IgKGFnID0gMDsgYWcgPCBtcC0+bV9zYi5zYl9hZ2NvdW50OyBhZysrKSB7Ci0JCWlmICghbXAtPm1fcGVyYWdbYWddLnBhZ19pY2lfaW5pdCkKKwkJc3RydWN0IHhmc19wZXJhZwkqcGFnOworCisJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnKTsKKwkJaWYgKCFwYWctPnBhZ19pY2lfaW5pdCkgeworCQkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQkJY29udGludWU7Ci0JCWVycm9yID0geGZzX2lub2RlX2FnX3dhbGsobXAsIGFnLCBleGVjdXRlLCBmbGFncywgdGFnLAorCQl9CisJCWVycm9yID0geGZzX2lub2RlX2FnX3dhbGsobXAsIHBhZywgZXhlY3V0ZSwgZmxhZ3MsIHRhZywKIAkJCQkJCWV4Y2x1c2l2ZSk7CisJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJaWYgKGVycm9yKSB7CiAJCQlsYXN0X2Vycm9yID0gZXJyb3I7CiAJCQlpZiAoZXJyb3IgPT0gRUZTQ09SUlVQVEVEKQpAQCAtMjMxLDcgKzIzNCw3IEBACiAJfQogCiAJZXJyb3IgPSB4ZnNfZmx1c2hfcGFnZXMoaXAsIDAsIC0xLCAoZmxhZ3MgJiBTWU5DX1dBSVQpID8KLQkJCQkwIDogWEZTX0JfQVNZTkMsIEZJX05PTkUpOworCQkJCTAgOiBYQkZfQVNZTkMsIEZJX05PTkUpOwogCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7CiAKICBvdXRfd2FpdDoKQEAgLTI2Nyw4ICsyNzAsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JZXJyb3IgPSB4ZnNfaWZsdXNoKGlwLCAoZmxhZ3MgJiBTWU5DX1dBSVQpID8KLQkJCSAgIFhGU19JRkxVU0hfU1lOQyA6IFhGU19JRkxVU0hfREVMV1JJKTsKKwllcnJvciA9IHhmc19pZmx1c2goaXAsIGZsYWdzKTsKIAogIG91dF91bmxvY2s6CiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwpAQCAtMjkzLDEwICsyOTUsNyBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIFhGU19FUlJPUihlcnJvcik7CiAKLQl4ZnNfbG9nX2ZvcmNlKG1wLCAwLAotCQkgICAgICAoZmxhZ3MgJiBTWU5DX1dBSVQpID8KLQkJICAgICAgIFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMgOgotCQkgICAgICAgWEZTX0xPR19GT1JDRSk7CisJeGZzX2xvZ19mb3JjZShtcCwgKGZsYWdzICYgU1lOQ19XQUlUKSA/IFhGU19MT0dfU1lOQyA6IDApOwogCXJldHVybiAwOwogfQogCkBAIC0zMjIsMTAgKzMyMSw2IEBACiAJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBtcC0+bV9yb290aXA7CiAJc3RydWN0IHhmc190cmFucwkqdHA7CiAJaW50CQkJZXJyb3I7Ci0JaW50CQkJbG9nX2ZsYWdzID0gWEZTX0xPR19GT1JDRTsKLQotCWlmIChmbGFncyAmIFNZTkNfV0FJVCkKLQkJbG9nX2ZsYWdzIHw9IFhGU19MT0dfU1lOQzsKIAogCS8qCiAJICogUHV0IGEgZHVtbXkgdHJhbnNhY3Rpb24gaW4gdGhlIGxvZyB0byB0ZWxsIHJlY292ZXJ5CkBAIC0zNDcsMTEgKzM0MiwxMSBAQAogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAKIAkvKiB0aGUgbG9nIGZvcmNlIGVuc3VyZXMgdGhpcyB0cmFuc2FjdGlvbiBpcyBwdXNoZWQgdG8gZGlzayAqLwotCXhmc19sb2dfZm9yY2UobXAsIDAsIGxvZ19mbGFncyk7CisJeGZzX2xvZ19mb3JjZShtcCwgKGZsYWdzICYgU1lOQ19XQUlUKSA/IFhGU19MT0dfU1lOQyA6IDApOwogCXJldHVybiBlcnJvcjsKIH0KIAotaW50CitTVEFUSUMgaW50CiB4ZnNfc3luY19mc2RhdGEoCiAJc3RydWN0IHhmc19tb3VudAkqbXAsCiAJaW50CQkJZmxhZ3MpCkBAIC0zNjcsNyArMzYyLDcgQEAKIAlpZiAoZmxhZ3MgJiBTWU5DX1RSWUxPQ0spIHsKIAkJQVNTRVJUKCEoZmxhZ3MgJiBTWU5DX1dBSVQpKTsKIAotCQlicCA9IHhmc19nZXRzYihtcCwgWEZTX0JVRl9UUllMT0NLKTsKKwkJYnAgPSB4ZnNfZ2V0c2IobXAsIFhCRl9UUllMT0NLKTsKIAkJaWYgKCFicCkKIAkJCWdvdG8gb3V0OwogCkBAIC0zODcsNyArMzgyLDcgQEAKIAkJICogYmVjb21lIHBpbm5lZCBpbiBiZXR3ZWVuIHRoZXJlIGFuZCBoZXJlLgogCQkgKi8KIAkJaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKQotCQkJeGZzX2xvZ19mb3JjZShtcCwgMCwgWEZTX0xPR19GT1JDRSk7CisJCQl4ZnNfbG9nX2ZvcmNlKG1wLCAwKTsKIAl9CiAKIApAQCAtNDQ4LDkgKzQ0Myw2IEBACiAJeGZzX3N5bmNfZGF0YShtcCwgU1lOQ19XQUlUKTsKIAl4ZnNfcW1fc3luYyhtcCwgU1lOQ19XQUlUKTsKIAotCS8qIGRyb3AgaW5vZGUgcmVmZXJlbmNlcyBwaW5uZWQgYnkgZmlsZXN0cmVhbXMgKi8KLQl4ZnNfZmlsZXN0cmVhbV9mbHVzaChtcCk7Ci0KIAkvKiB3cml0ZSBzdXBlcmJsb2NrIGFuZCBob292ZXIgdXAgc2h1dGRvd24gZXJyb3JzICovCiAJZXJyb3IgPSB4ZnNfc3luY19mc2RhdGEobXAsIFNZTkNfV0FJVCk7CiAKQEAgLTQ2NywxNiArNDU5LDE4IEBACiB7CiAJaW50CWNvdW50ID0gMCwgcGluY291bnQ7CiAKKwl4ZnNfcmVjbGFpbV9pbm9kZXMobXAsIDApOwogCXhmc19mbHVzaF9idWZ0YXJnKG1wLT5tX2RkZXZfdGFyZ3AsIDApOwotCXhmc19yZWNsYWltX2lub2RlcyhtcCwgWEZTX0lGTFVTSF9ERUxXUklfRUxTRV9BU1lOQyk7CiAKIAkvKgogCSAqIFRoaXMgbG9vcCBtdXN0IHJ1biBhdCBsZWFzdCB0d2ljZS4gIFRoZSBmaXJzdCBpbnN0YW5jZSBvZiB0aGUgbG9vcAogCSAqIHdpbGwgZmx1c2ggbW9zdCBtZXRhIGRhdGEgYnV0IHRoYXQgd2lsbCBnZW5lcmF0ZSBtb3JlIG1ldGEgZGF0YQogCSAqICh0eXBpY2FsbHkgZGlyZWN0b3J5IHVwZGF0ZXMpLiAgV2hpY2ggdGhlbiBtdXN0IGJlIGZsdXNoZWQgYW5kCi0JICogbG9nZ2VkIGJlZm9yZSB3ZSBjYW4gd3JpdGUgdGhlIHVubW91bnQgcmVjb3JkLgorCSAqIGxvZ2dlZCBiZWZvcmUgd2UgY2FuIHdyaXRlIHRoZSB1bm1vdW50IHJlY29yZC4gV2UgYWxzbyBzbyBzeW5jCisJICogcmVjbGFpbSBvZiBpbm9kZXMgdG8gY2F0Y2ggYW55IHRoYXQgdGhlIGFib3ZlIGRlbHdyaSBmbHVzaCBza2lwcGVkLgogCSAqLwogCWRvIHsKKwkJeGZzX3JlY2xhaW1faW5vZGVzKG1wLCBTWU5DX1dBSVQpOwogCQl4ZnNfc3luY19hdHRyKG1wLCBTWU5DX1dBSVQpOwogCQlwaW5jb3VudCA9IHhmc19mbHVzaF9idWZ0YXJnKG1wLT5tX2RkZXZfdGFyZ3AsIDEpOwogCQlpZiAoIXBpbmNvdW50KSB7CkBAIC01NzUsNyArNTY5LDcgQEAKIAlpZ3JhYihpbm9kZSk7CiAJeGZzX3N5bmNkX3F1ZXVlX3dvcmsoaXAtPmlfbW91bnQsIGlub2RlLCB4ZnNfZmx1c2hfaW5vZGVzX3dvcmssICZjb21wbGV0aW9uKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjb21wbGV0aW9uKTsKLQl4ZnNfbG9nX2ZvcmNlKGlwLT5pX21vdW50LCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0V8WEZTX0xPR19TWU5DKTsKKwl4ZnNfbG9nX2ZvcmNlKGlwLT5pX21vdW50LCBYRlNfTE9HX1NZTkMpOwogfQogCiAvKgpAQCAtNTkxLDggKzU4NSw4IEBACiAJaW50CQllcnJvcjsKIAogCWlmICghKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkpIHsKLQkJeGZzX2xvZ19mb3JjZShtcCwgKHhmc19sc25fdCkwLCBYRlNfTE9HX0ZPUkNFKTsKLQkJeGZzX3JlY2xhaW1faW5vZGVzKG1wLCBYRlNfSUZMVVNIX0RFTFdSSV9FTFNFX0FTWU5DKTsKKwkJeGZzX2xvZ19mb3JjZShtcCwgMCk7CisJCXhmc19yZWNsYWltX2lub2RlcyhtcCwgMCk7CiAJCS8qIGRnYzogZXJyb3JzIGlnbm9yZWQgaGVyZSAqLwogCQllcnJvciA9IHhmc19xbV9zeW5jKG1wLCBTWU5DX1RSWUxPQ0spOwogCQllcnJvciA9IHhmc19zeW5jX2ZzZGF0YShtcCwgU1lOQ19UUllMT0NLKTsKQEAgLTY5MCwxNiArNjg0LDE3IEBACiB4ZnNfaW5vZGVfc2V0X3JlY2xhaW1fdGFnKAogCXhmc19pbm9kZV90CSppcCkKIHsKLQl4ZnNfbW91bnRfdAkqbXAgPSBpcC0+aV9tb3VudDsKLQl4ZnNfcGVyYWdfdAkqcGFnID0geGZzX2dldF9wZXJhZyhtcCwgaXAtPmlfaW5vKTsKKwlzdHJ1Y3QgeGZzX21vdW50ICptcCA9IGlwLT5pX21vdW50OworCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZzsKIAorCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIFhGU19JTk9fVE9fQUdOTyhtcCwgaXAtPmlfaW5vKSk7CiAJcmVhZF9sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CiAJc3Bpbl9sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKIAlfX3hmc19pbm9kZV9zZXRfcmVjbGFpbV90YWcocGFnLCBpcCk7CiAJX194ZnNfaWZsYWdzX3NldChpcCwgWEZTX0lSRUNMQUlNQUJMRSk7CiAJc3Bpbl91bmxvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwogCXJlYWRfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7Ci0JeGZzX3B1dF9wZXJhZyhtcCwgcGFnKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiB9CiAKIHZvaWQKQEAgLTcxMiwxMiArNzA3LDY0IEBACiAJCQlYRlNfSU5PX1RPX0FHSU5PKG1wLCBpcC0+aV9pbm8pLCBYRlNfSUNJX1JFQ0xBSU1fVEFHKTsKIH0KIAorLyoKKyAqIElub2RlcyBpbiBkaWZmZXJlbnQgc3RhdGVzIG5lZWQgdG8gYmUgdHJlYXRlZCBkaWZmZXJlbnRseSwgYW5kIHRoZSByZXR1cm4KKyAqIHZhbHVlIG9mIHhmc19pZmx1c2ggaXMgbm90IHN1ZmZpY2llbnQgdG8gZ2V0IHRoaXMgcmlnaHQuIFRoZSBmb2xsb3dpbmcgdGFibGUKKyAqIGxpc3RzIHRoZSBpbm9kZSBzdGF0ZXMgYW5kIHRoZSByZWNsYWltIGFjdGlvbnMgbmVjZXNzYXJ5IGZvciBub24tYmxvY2tpbmcKKyAqIHJlY2xhaW06CisgKgorICoKKyAqCWlub2RlIHN0YXRlCSAgICAgaWZsdXNoIHJldAkJcmVxdWlyZWQgYWN0aW9uCisgKiAgICAgIC0tLS0tLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0gICAgICAgICAtLS0tLS0tLS0tLS0tLS0KKyAqCWJhZAkJCS0JCXJlY2xhaW0KKyAqCXNodXRkb3duCQlFSU8JCXVucGluIGFuZCByZWNsYWltCisgKgljbGVhbiwgdW5waW5uZWQJCTAJCXJlY2xhaW0KKyAqCXN0YWxlLCB1bnBpbm5lZAkJMAkJcmVjbGFpbQorICoJY2xlYW4sIHBpbm5lZCgqKQkwCQlyZXF1ZXVlCisgKglzdGFsZSwgcGlubmVkCQlFQUdBSU4JCXJlcXVldWUKKyAqCWRpcnR5LCBkZWx3cmkgb2sJMAkJcmVxdWV1ZQorICoJZGlydHksIGRlbHdyaSBibG9ja2VkCUVBR0FJTgkJcmVxdWV1ZQorICoJZGlydHksIHN5bmMgZmx1c2gJMAkJcmVjbGFpbQorICoKKyAqICgqKSBkZ2M6IEkgZG9uJ3QgdGhpbmsgdGhlIGNsZWFuLCBwaW5uZWQgc3RhdGUgaXMgcG9zc2libGUgYnV0IGl0IGdldHMKKyAqIGhhbmRsZWQgYW55d2F5IGdpdmVuIHRoZSBvcmRlciBvZiBjaGVja3MgaW1wbGVtZW50ZWQuCisgKgorICogQXMgY2FuIGJlIHNlZW4gZnJvbSB0aGUgdGFibGUsIHRoZSByZXR1cm4gdmFsdWUgb2YgeGZzX2lmbHVzaCgpIGlzIG5vdAorICogc3VmZmljaWVudCB0byBjb3JyZWN0bHkgZGVjaWRlIHRoZSByZWNsYWltIGFjdGlvbiBoZXJlLiBUaGUgY2hlY2tzIGluCisgKiB4ZnNfaWZsdXNoKCkgbWlnaHQgbG9vayBsaWtlIGR1cGxpY2F0ZXMsIGJ1dCB0aGV5IGFyZSBub3QuCisgKgorICogQWxzbywgYmVjYXVzZSB3ZSBnZXQgdGhlIGZsdXNoIGxvY2sgZmlyc3QsIHdlIGtub3cgdGhhdCBhbnkgaW5vZGUgdGhhdCBoYXMKKyAqIGJlZW4gZmx1c2hlZCBkZWx3cmkgaGFzIGhhZCB0aGUgZmx1c2ggY29tcGxldGVkIGJ5IHRoZSB0aW1lIHdlIGNoZWNrIHRoYXQKKyAqIHRoZSBpbm9kZSBpcyBjbGVhbi4gVGhlIGNsZWFuIGlub2RlIGNoZWNrIG5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlIGZsdXNoaW5nCisgKiB0aGUgaW5vZGUgZGVsd3JpIG90aGVyd2lzZSB3ZSB3b3VsZCBsb29wIGZvcmV2ZXIgcmVxdWV1aW5nIGNsZWFuIGlub2RlcyBhcworICogd2UgY2Fubm90IHRlbGwgYXBhcnQgYSBzdWNjZXNzZnVsIGRlbHdyaSBmbHVzaCBhbmQgYSBjbGVhbiBpbm9kZSBmcm9tIHRoZQorICogcmV0dXJuIHZhbHVlIG9mIHhmc19pZmx1c2goKS4KKyAqCisgKiBOb3RlIHRoYXQgYmVjYXVzZSB0aGUgaW5vZGUgaXMgZmx1c2hlZCBkZWxheWVkIHdyaXRlIGJ5IGJhY2tncm91bmQKKyAqIHdyaXRlYmFjaywgdGhlIGZsdXNoIGxvY2sgbWF5IGFscmVhZHkgYmUgaGVsZCBoZXJlIGFuZCB3YWl0aW5nIG9uIGl0IGNhbgorICogcmVzdWx0IGluIHZlcnkgbG9uZyBsYXRlbmNpZXMuIEhlbmNlIGZvciBzeW5jIHJlY2xhaW1zLCB3aGVyZSB3ZSB3YWl0IG9uIHRoZQorICogZmx1c2ggbG9jaywgdGhlIGNhbGxlciBzaG91bGQgcHVzaCBvdXQgZGVsYXllZCB3cml0ZSBpbm9kZXMgZmlyc3QgYmVmb3JlCisgKiB0cnlpbmcgdG8gcmVjbGFpbSB0aGVtIHRvIG1pbmltaXNlIHRoZSBhbW91bnQgb2YgdGltZSBzcGVudCB3YWl0aW5nLiBGb3IKKyAqIGJhY2tncm91bmQgcmVsYWltLCB3ZSBqdXN0IHJlcXVldWUgdGhlIGlub2RlIGZvciB0aGUgbmV4dCBwYXNzLgorICoKKyAqIEhlbmNlIHRoZSBvcmRlciBvZiBhY3Rpb25zIGFmdGVyIGdhaW5pbmcgdGhlIGxvY2tzIHNob3VsZCBiZToKKyAqCWJhZAkJPT4gcmVjbGFpbQorICoJc2h1dGRvd24JPT4gdW5waW4gYW5kIHJlY2xhaW0KKyAqCXBpbm5lZCwgZGVsd3JpCT0+IHJlcXVldWUKKyAqCXBpbm5lZCwgc3luYwk9PiB1bnBpbgorICoJc3RhbGUJCT0+IHJlY2xhaW0KKyAqCWNsZWFuCQk9PiByZWNsYWltCisgKglkaXJ0eSwgZGVsd3JpCT0+IGZsdXNoIGFuZCByZXF1ZXVlCisgKglkaXJ0eSwgc3luYwk9PiBmbHVzaCwgd2FpdCBhbmQgcmVjbGFpbQorICovCiBTVEFUSUMgaW50CiB4ZnNfcmVjbGFpbV9pbm9kZSgKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCwKIAlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWcsCiAJaW50CQkJc3luY19tb2RlKQogeworCWludAllcnJvciA9IDA7CisKIAkvKgogCSAqIFRoZSByYWRpeCB0cmVlIGxvY2sgaGVyZSBwcm90ZWN0cyBhIHRocmVhZCBpbiB4ZnNfaWdldCBmcm9tIHJhY2luZwogCSAqIHdpdGggdXMgc3RhcnRpbmcgcmVjbGFpbSBvbiB0aGUgaW5vZGUuICBPbmNlIHdlIGhhdmUgdGhlCkBAIC03MzUsMzMgKzc4Miw3MCBAQAogCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKIAl3cml0ZV91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKIAotCS8qCi0JICogSWYgdGhlIGlub2RlIGlzIHN0aWxsIGRpcnR5LCB0aGVuIGZsdXNoIGl0IG91dC4gIElmIHRoZSBpbm9kZQotCSAqIGlzIG5vdCBpbiB0aGUgQUlMLCB0aGVuIGl0IHdpbGwgYmUgT0sgdG8gZmx1c2ggaXQgZGVsd3JpIGFzCi0JICogbG9uZyBhcyB4ZnNfaWZsdXNoKCkgZG9lcyBub3Qga2VlcCBhbnkgcmVmZXJlbmNlcyB0byB0aGUgaW5vZGUuCi0JICogV2UgbGVhdmUgdGhhdCBkZWNpc2lvbiB1cCB0byB4ZnNfaWZsdXNoKCkgc2luY2UgaXQgaGFzIHRoZQotCSAqIGtub3dsZWRnZSBvZiB3aGV0aGVyIGl0J3MgT0sgdG8gc2ltcGx5IGRvIGEgZGVsd3JpIGZsdXNoIG9mCi0JICogdGhlIGlub2RlIG9yIHdoZXRoZXIgd2UgbmVlZCB0byB3YWl0IHVudGlsIHRoZSBpbm9kZSBpcwotCSAqIHB1bGxlZCBmcm9tIHRoZSBBSUwuCi0JICogV2UgZ2V0IHRoZSBmbHVzaCBsb2NrIHJlZ2FyZGxlc3MsIHRob3VnaCwganVzdCB0byBtYWtlIHN1cmUKLQkgKiB3ZSBkb24ndCBmcmVlIGl0IHdoaWxlIGl0IGlzIGJlaW5nIGZsdXNoZWQuCi0JICovCiAJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JeGZzX2lmbG9jayhpcCk7Ci0KLQkvKgotCSAqIEluIHRoZSBjYXNlIG9mIGEgZm9yY2VkIHNodXRkb3duIHdlIHJlbHkgb24geGZzX2lmbHVzaCgpIHRvCi0JICogd2FpdCBmb3IgdGhlIGlub2RlIHRvIGJlIHVucGlubmVkIGJlZm9yZSByZXR1cm5pbmcgYW4gZXJyb3IuCi0JICovCi0JaWYgKCFpc19iYWRfaW5vZGUoVkZTX0koaXApKSAmJiB4ZnNfaWZsdXNoKGlwLCBzeW5jX21vZGUpID09IDApIHsKLQkJLyogc3luY2hyb25pemUgd2l0aCB4ZnNfaWZsdXNoX2RvbmUgKi8KKwlpZiAoIXhmc19pZmxvY2tfbm93YWl0KGlwKSkgeworCQlpZiAoIShzeW5jX21vZGUgJiBTWU5DX1dBSVQpKQorCQkJZ290byBvdXQ7CiAJCXhmc19pZmxvY2soaXApOwotCQl4ZnNfaWZ1bmxvY2soaXApOwogCX0KIAorCWlmIChpc19iYWRfaW5vZGUoVkZTX0koaXApKSkKKwkJZ290byByZWNsYWltOworCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSkgeworCQl4ZnNfaXVucGluX3dhaXQoaXApOworCQlnb3RvIHJlY2xhaW07CisJfQorCWlmICh4ZnNfaXBpbmNvdW50KGlwKSkgeworCQlpZiAoIShzeW5jX21vZGUgJiBTWU5DX1dBSVQpKSB7CisJCQl4ZnNfaWZ1bmxvY2soaXApOworCQkJZ290byBvdXQ7CisJCX0KKwkJeGZzX2l1bnBpbl93YWl0KGlwKTsKKwl9CisJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX0lTVEFMRSkpCisJCWdvdG8gcmVjbGFpbTsKKwlpZiAoeGZzX2lub2RlX2NsZWFuKGlwKSkKKwkJZ290byByZWNsYWltOworCisJLyogTm93IHdlIGhhdmUgYW4gaW5vZGUgdGhhdCBuZWVkcyBmbHVzaGluZyAqLworCWVycm9yID0geGZzX2lmbHVzaChpcCwgc3luY19tb2RlKTsKKwlpZiAoc3luY19tb2RlICYgU1lOQ19XQUlUKSB7CisJCXhmc19pZmxvY2soaXApOworCQlnb3RvIHJlY2xhaW07CisJfQorCisJLyoKKwkgKiBXaGVuIHdlIGhhdmUgdG8gZmx1c2ggYW4gaW5vZGUgYnV0IGRvbid0IGhhdmUgU1lOQ19XQUlUIHNldCwgd2UKKwkgKiBmbHVzaCB0aGUgaW5vZGUgb3V0IHVzaW5nIGEgZGVsd3JpIGJ1ZmZlciBhbmQgd2FpdCBmb3IgdGhlIG5leHQKKwkgKiBjYWxsIGludG8gcmVjbGFpbSB0byBmaW5kIGl0IGluIGEgY2xlYW4gc3RhdGUgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcgorCSAqIGl0IG5vdy4gV2UgYWxzbyBkb24ndCByZXR1cm4gZXJyb3JzIGhlcmUgLSBpZiB0aGUgZXJyb3IgaXMgdHJhbnNpZW50CisJICogdGhlbiB0aGUgbmV4dCByZWNsYWltIHBhc3Mgd2lsbCBmbHVzaCB0aGUgaW5vZGUsIGFuZCBpZiB0aGUgZXJyb3IKKwkgKiBpcyBwZXJtYW5lbnQgdGhlbiB0aGUgbmV4dCBzeW5jIHJlY2xhaW0gd2lsbCByZWxjYWltIHRoZSBpbm9kZSBhbmQKKwkgKiBwYXNzIG9uIHRoZSBlcnJvci4KKwkgKi8KKwlpZiAoZXJyb3IgJiYgIVhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKSB7CisJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGlwLT5pX21vdW50LAorCQkJImlub2RlIDB4JWxseCBiYWNrZ3JvdW5kIHJlY2xhaW0gZmx1c2ggZmFpbGVkIHdpdGggJWQiLAorCQkJKGxvbmcgbG9uZylpcC0+aV9pbm8sIGVycm9yKTsKKwl9CitvdXQ6CisJeGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX0lSRUNMQUlNKTsKKwl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCS8qCisJICogV2UgY291bGQgcmV0dXJuIEVBR0FJTiBoZXJlIHRvIG1ha2UgcmVjbGFpbSByZXNjYW4gdGhlIGlub2RlIHRyZWUgaW4KKwkgKiBhIHNob3J0IHdoaWxlLiBIb3dldmVyLCB0aGlzIGp1c3QgYnVybnMgQ1BVIHRpbWUgc2Nhbm5pbmcgdGhlIHRyZWUKKwkgKiB3YWl0aW5nIGZvciBJTyB0byBjb21wbGV0ZSBhbmQgeGZzc3luY2QgbmV2ZXIgZ29lcyBiYWNrIHRvIHRoZSBpZGxlCisJICogc3RhdGUuIEluc3RlYWQsIHJldHVybiAwIHRvIGxldCB0aGUgbmV4dCBzY2hlZHVsZWQgYmFja2dyb3VuZCByZWNsYWltCisJICogYXR0ZW1wdCB0byByZWNsYWltIHRoZSBpbm9kZSBhZ2Fpbi4KKwkgKi8KKwlyZXR1cm4gMDsKKworcmVjbGFpbToKKwl4ZnNfaWZ1bmxvY2soaXApOwogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAJeGZzX2lyZWNsYWltKGlwKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyb3I7CisKIH0KIAogaW50CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmgKaW5kZXggZWE5MzJiNC4uZDQ4MGMzNCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuaApAQCAtMzcsNyArMzcsNiBAQAogCiBpbnQgeGZzX3N5bmNfYXR0cihzdHJ1Y3QgeGZzX21vdW50ICptcCwgaW50IGZsYWdzKTsKIGludCB4ZnNfc3luY19kYXRhKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBpbnQgZmxhZ3MpOwotaW50IHhmc19zeW5jX2ZzZGF0YShzdHJ1Y3QgeGZzX21vdW50ICptcCwgaW50IGZsYWdzKTsKIAogaW50IHhmc19xdWllc2NlX2RhdGEoc3RydWN0IHhmc19tb3VudCAqbXApOwogdm9pZCB4ZnNfcXVpZXNjZV9hdHRyKHN0cnVjdCB4ZnNfbW91bnQgKm1wKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmggYi9mcy94ZnMvbGludXgtMi42L3hmc190cmFjZS5oCmluZGV4IGMyMmE2MDguLmE0NTc0ZGMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuaApAQCAtNzgsNiArNzgsMzMgQEAKIAkpCiApCiAKKyNkZWZpbmUgREVGSU5FX1BFUkFHX1JFRl9FVkVOVChuYW1lKSBcCitUUkFDRV9FVkVOVChuYW1lLCBcCisJVFBfUFJPVE8oc3RydWN0IHhmc19tb3VudCAqbXAsIHhmc19hZ251bWJlcl90IGFnbm8sIGludCByZWZjb3VudCwgXAorCQkgdW5zaWduZWQgbG9uZyBjYWxsZXJfaXApLCBcCisJVFBfQVJHUyhtcCwgYWdubywgcmVmY291bnQsIGNhbGxlcl9pcCksIFwKKwlUUF9TVFJVQ1RfX2VudHJ5KCBcCisJCV9fZmllbGQoZGV2X3QsIGRldikgXAorCQlfX2ZpZWxkKHhmc19hZ251bWJlcl90LCBhZ25vKSBcCisJCV9fZmllbGQoaW50LCByZWZjb3VudCkgXAorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGNhbGxlcl9pcCkgXAorCSksIFwKKwlUUF9mYXN0X2Fzc2lnbiggXAorCQlfX2VudHJ5LT5kZXYgPSBtcC0+bV9zdXBlci0+c19kZXY7IFwKKwkJX19lbnRyeS0+YWdubyA9IGFnbm87IFwKKwkJX19lbnRyeS0+cmVmY291bnQgPSByZWZjb3VudDsgXAorCQlfX2VudHJ5LT5jYWxsZXJfaXAgPSBjYWxsZXJfaXA7IFwKKwkpLCBcCisJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgYWdubyAldSByZWZjb3VudCAlZCBjYWxsZXIgJXBmIiwgXAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksIFwKKwkJICBfX2VudHJ5LT5hZ25vLCBcCisJCSAgX19lbnRyeS0+cmVmY291bnQsIFwKKwkJICAoY2hhciAqKV9fZW50cnktPmNhbGxlcl9pcCkgXAorKTsKKworREVGSU5FX1BFUkFHX1JFRl9FVkVOVCh4ZnNfcGVyYWdfZ2V0KQorREVGSU5FX1BFUkFHX1JFRl9FVkVOVCh4ZnNfcGVyYWdfcHV0KQorCiAjZGVmaW5lIERFRklORV9BVFRSX0xJU1RfRVZFTlQobmFtZSkgXAogREVGSU5FX0VWRU5UKHhmc19hdHRyX2xpc3RfY2xhc3MsIG5hbWUsIFwKIAlUUF9QUk9UTyhzdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0ICpjdHgpLCBcCkBAIC00NTYsNiArNDgzLDcgQEAKIERFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfYnVmX2l0ZW1fdW5sb2NrX3N0YWxlKTsKIERFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfYnVmX2l0ZW1fY29tbWl0dGVkKTsKIERFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfYnVmX2l0ZW1fcHVzaCk7CitERUZJTkVfQlVGX0lURU1fRVZFTlQoeGZzX2J1Zl9pdGVtX3B1c2hidWYpOwogREVGSU5FX0JVRl9JVEVNX0VWRU5UKHhmc190cmFuc19nZXRfYnVmKTsKIERFRklORV9CVUZfSVRFTV9FVkVOVCh4ZnNfdHJhbnNfZ2V0X2J1Zl9yZWN1cik7CiBERUZJTkVfQlVGX0lURU1fRVZFTlQoeGZzX3RyYW5zX2dldHNiKTsKQEAgLTE0MTQsNiArMTQ0Miw1OSBAQAogCQkgIF9fZW50cnktPmNvdW50KQogKTsKIAorI2RlZmluZSBYRlNfU1dBUEVYVF9JTk9ERVMgXAorCXsgMCwJInRhcmdldCIgfSwgXAorCXsgMSwJInRlbXAiIH0KKworI2RlZmluZSBYRlNfSU5PREVfRk9STUFUX1NUUiBcCisJeyAwLAkiaW52YWxpZCIgfSwgXAorCXsgMSwJImxvY2FsIiB9LCBcCisJeyAyLAkiZXh0ZW50IiB9LCBcCisJeyAzLAkiYnRyZWUiIH0KKworREVDTEFSRV9FVkVOVF9DTEFTUyh4ZnNfc3dhcF9leHRlbnRfY2xhc3MsCisJVFBfUFJPVE8oc3RydWN0IHhmc19pbm9kZSAqaXAsIGludCB3aGljaCksCisJVFBfQVJHUyhpcCwgd2hpY2gpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoZGV2X3QsIGRldikKKwkJX19maWVsZChpbnQsIHdoaWNoKQorCQlfX2ZpZWxkKHhmc19pbm9fdCwgaW5vKQorCQlfX2ZpZWxkKGludCwgZm9ybWF0KQorCQlfX2ZpZWxkKGludCwgbmV4KQorCQlfX2ZpZWxkKGludCwgbWF4X25leCkKKwkJX19maWVsZChpbnQsIGJyb290X3NpemUpCisJCV9fZmllbGQoaW50LCBmb3JrX29mZikKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYgPSBWRlNfSShpcCktPmlfc2ItPnNfZGV2OworCQlfX2VudHJ5LT53aGljaCA9IHdoaWNoOworCQlfX2VudHJ5LT5pbm8gPSBpcC0+aV9pbm87CisJCV9fZW50cnktPmZvcm1hdCA9IGlwLT5pX2QuZGlfZm9ybWF0OworCQlfX2VudHJ5LT5uZXggPSBpcC0+aV9kLmRpX25leHRlbnRzOworCQlfX2VudHJ5LT5tYXhfbmV4ID0gaXAtPmlfZGYuaWZfZXh0X21heDsKKwkJX19lbnRyeS0+YnJvb3Rfc2l6ZSA9IGlwLT5pX2RmLmlmX2Jyb290X2J5dGVzOworCQlfX2VudHJ5LT5mb3JrX29mZiA9IFhGU19JRk9SS19CT0ZGKGlwKTsKKwkpLAorCVRQX3ByaW50aygiZGV2ICVkOiVkIGlubyAweCVsbHggKCVzKSwgJXMgZm9ybWF0LCBudW1fZXh0ZW50cyAlZCwgIgorCQkgICJNYXggaW4tZm9yayBleHRlbnRzICVkLCBicm9vdCBzaXplICVkLCBmb3JrIG9mZnNldCAlZCIsCisJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwKKwkJICBfX2VudHJ5LT5pbm8sCisJCSAgX19wcmludF9zeW1ib2xpYyhfX2VudHJ5LT53aGljaCwgWEZTX1NXQVBFWFRfSU5PREVTKSwKKwkJICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPmZvcm1hdCwgWEZTX0lOT0RFX0ZPUk1BVF9TVFIpLAorCQkgIF9fZW50cnktPm5leCwKKwkJICBfX2VudHJ5LT5tYXhfbmV4LAorCQkgIF9fZW50cnktPmJyb290X3NpemUsCisJCSAgX19lbnRyeS0+Zm9ya19vZmYpCispCisKKyNkZWZpbmUgREVGSU5FX1NXQVBFWFRfRVZFTlQobmFtZSkgXAorREVGSU5FX0VWRU5UKHhmc19zd2FwX2V4dGVudF9jbGFzcywgbmFtZSwgXAorCVRQX1BST1RPKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBpbnQgd2hpY2gpLCBcCisJVFBfQVJHUyhpcCwgd2hpY2gpKQorCitERUZJTkVfU1dBUEVYVF9FVkVOVCh4ZnNfc3dhcF9leHRlbnRfYmVmb3JlKTsKK0RFRklORV9TV0FQRVhUX0VWRU5UKHhmc19zd2FwX2V4dGVudF9hZnRlcik7CisKICNlbmRpZiAvKiBfVFJBQ0VfWEZTX0ggKi8KIAogI3VuZGVmIFRSQUNFX0lOQ0xVREVfUEFUSApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfeGF0dHIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3hhdHRyLmMKaW5kZXggMGIxODc4OC4uZmEwMWI5ZCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfeGF0dHIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc194YXR0ci5jCkBAIC00NSw3ICs0NSw3IEBACiAJCXZhbHVlID0gTlVMTDsKIAl9CiAKLQllcnJvciA9IC14ZnNfYXR0cl9nZXQoaXAsIG5hbWUsIHZhbHVlLCAmYXNpemUsIHhmbGFncyk7CisJZXJyb3IgPSAteGZzX2F0dHJfZ2V0KGlwLCAodW5zaWduZWQgY2hhciAqKW5hbWUsIHZhbHVlLCAmYXNpemUsIHhmbGFncyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJcmV0dXJuIGFzaXplOwpAQCAtNjcsOCArNjcsOSBAQAogCQl4ZmxhZ3MgfD0gQVRUUl9SRVBMQUNFOwogCiAJaWYgKCF2YWx1ZSkKLQkJcmV0dXJuIC14ZnNfYXR0cl9yZW1vdmUoaXAsIG5hbWUsIHhmbGFncyk7Ci0JcmV0dXJuIC14ZnNfYXR0cl9zZXQoaXAsIG5hbWUsICh2b2lkICopdmFsdWUsIHNpemUsIHhmbGFncyk7CisJCXJldHVybiAteGZzX2F0dHJfcmVtb3ZlKGlwLCAodW5zaWduZWQgY2hhciAqKW5hbWUsIHhmbGFncyk7CisJcmV0dXJuIC14ZnNfYXR0cl9zZXQoaXAsICh1bnNpZ25lZCBjaGFyICopbmFtZSwKKwkJCQkodm9pZCAqKXZhbHVlLCBzaXplLCB4ZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IHhhdHRyX2hhbmRsZXIgeGZzX3hhdHRyX3VzZXJfaGFuZGxlciA9IHsKQEAgLTEyNCw4ICsxMjUsMTMgQEAKIH0KIAogc3RhdGljIGludAoteGZzX3hhdHRyX3B1dF9saXN0ZW50KHN0cnVjdCB4ZnNfYXR0cl9saXN0X2NvbnRleHQgKmNvbnRleHQsIGludCBmbGFncywKLQkJY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCB2YWx1ZWxlbiwgY2hhciAqdmFsdWUpCit4ZnNfeGF0dHJfcHV0X2xpc3RlbnQoCisJc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqY29udGV4dCwKKwlpbnQJCWZsYWdzLAorCXVuc2lnbmVkIGNoYXIJKm5hbWUsCisJaW50CQluYW1lbGVuLAorCWludAkJdmFsdWVsZW4sCisJdW5zaWduZWQgY2hhcgkqdmFsdWUpCiB7CiAJdW5zaWduZWQgaW50IHByZWZpeF9sZW4gPSB4ZnNfeGF0dHJfcHJlZml4X2xlbihmbGFncyk7CiAJY2hhciAqb2Zmc2V0OwpAQCAtMTQ4LDcgKzE1NCw3IEBACiAJb2Zmc2V0ID0gKGNoYXIgKiljb250ZXh0LT5hbGlzdCArIGNvbnRleHQtPmNvdW50OwogCXN0cm5jcHkob2Zmc2V0LCB4ZnNfeGF0dHJfcHJlZml4KGZsYWdzKSwgcHJlZml4X2xlbik7CiAJb2Zmc2V0ICs9IHByZWZpeF9sZW47Ci0Jc3RybmNweShvZmZzZXQsIG5hbWUsIG5hbWVsZW4pOwkJCS8qIHJlYWwgbmFtZSAqLworCXN0cm5jcHkob2Zmc2V0LCAoY2hhciAqKW5hbWUsIG5hbWVsZW4pOwkJCS8qIHJlYWwgbmFtZSAqLwogCW9mZnNldCArPSBuYW1lbGVuOwogCSpvZmZzZXQgPSAnXDAnOwogCWNvbnRleHQtPmNvdW50ICs9IHByZWZpeF9sZW4gKyBuYW1lbGVuICsgMTsKQEAgLTE1Niw4ICsxNjIsMTMgQEAKIH0KIAogc3RhdGljIGludAoteGZzX3hhdHRyX3B1dF9saXN0ZW50X3NpemVzKHN0cnVjdCB4ZnNfYXR0cl9saXN0X2NvbnRleHQgKmNvbnRleHQsIGludCBmbGFncywKLQkJY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCB2YWx1ZWxlbiwgY2hhciAqdmFsdWUpCit4ZnNfeGF0dHJfcHV0X2xpc3RlbnRfc2l6ZXMoCisJc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqY29udGV4dCwKKwlpbnQJCWZsYWdzLAorCXVuc2lnbmVkIGNoYXIJKm5hbWUsCisJaW50CQluYW1lbGVuLAorCWludAkJdmFsdWVsZW4sCisJdW5zaWduZWQgY2hhcgkqdmFsdWUpCiB7CiAJY29udGV4dC0+Y291bnQgKz0geGZzX3hhdHRyX3ByZWZpeF9sZW4oZmxhZ3MpICsgbmFtZWxlbiArIDE7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMKaW5kZXggZDdjN2VlYS4uNWY3OWRkNyAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYwpAQCAtMTE4Nyw3ICsxMTg3LDcgQEAKIAkgKiBibG9jaywgbmFkYS4KIAkgKi8KIAlpZiAoIVhGU19EUV9JU19ESVJUWShkcXApIHx8Ci0JICAgICghKGZsYWdzICYgWEZTX1FNT1BUX1NZTkMpICYmIGF0b21pY19yZWFkKCZkcXAtPnFfcGluY291bnQpID4gMCkpIHsKKwkgICAgKCEoZmxhZ3MgJiBTWU5DX1dBSVQpICYmIGF0b21pY19yZWFkKCZkcXAtPnFfcGluY291bnQpID4gMCkpIHsKIAkJeGZzX2RxZnVubG9jayhkcXApOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMjQ4LDIzICsxMjQ4LDIwIEBACiAJICovCiAJaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKSB7CiAJCXRyYWNlX3hmc19kcWZsdXNoX2ZvcmNlKGRxcCk7Ci0JCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSk7CisJCXhmc19sb2dfZm9yY2UobXAsIDApOwogCX0KIAotCWlmIChmbGFncyAmIFhGU19RTU9QVF9ERUxXUkkpIHsKLQkJeGZzX2Jkd3JpdGUobXAsIGJwKTsKLQl9IGVsc2UgaWYgKGZsYWdzICYgWEZTX1FNT1BUX0FTWU5DKSB7Ci0JCWVycm9yID0geGZzX2Jhd3JpdGUobXAsIGJwKTsKLQl9IGVsc2UgeworCWlmIChmbGFncyAmIFNZTkNfV0FJVCkKIAkJZXJyb3IgPSB4ZnNfYndyaXRlKG1wLCBicCk7Ci0JfQorCWVsc2UKKwkJeGZzX2Jkd3JpdGUobXAsIGJwKTsKIAogCXRyYWNlX3hmc19kcWZsdXNoX2RvbmUoZHFwKTsKIAogCS8qCiAJICogZHFwIGlzIHN0aWxsIGxvY2tlZCwgYnV0IGNhbGxlciBpcyBmcmVlIHRvIHVubG9jayBpdCBub3cuCiAJICovCi0JcmV0dXJuIChlcnJvcik7CisJcmV0dXJuIGVycm9yOwogCiB9CiAKQEAgLTE0NDUsNyArMTQ0Miw3IEBACiAJCSAqIFdlIGRvbid0IGNhcmUgYWJvdXQgZ2V0dGluZyBkaXNrIGVycm9ycyBoZXJlLiBXZSBuZWVkCiAJCSAqIHRvIHB1cmdlIHRoaXMgZHF1b3QgYW55d2F5LCBzbyB3ZSBnbyBhaGVhZCByZWdhcmRsZXNzLgogCQkgKi8KLQkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIFhGU19RTU9QVF9TWU5DKTsKKwkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIFNZTkNfV0FJVCk7CiAJCWlmIChlcnJvcikKIAkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLAogCQkJCSJ4ZnNfcW1fZHFwdXJnZTogZHF1b3QgJXAgZmx1c2ggZmFpbGVkIiwgZHFwKTsKQEAgLTE1MjksMjUgKzE1MjYsMTcgQEAKIAkgKiB0aGUgZmx1c2ggbG9jayB3aGVuIHRoZSBJL08gY29tcGxldGVzLgogCSAqLwogCWJwID0geGZzX2luY29yZShkcXAtPnFfbW91bnQtPm1fZGRldl90YXJncCwgZHFwLT5xX2Jsa25vLAotCQkgICAgWEZTX1FJX0RRQ0hVTktMRU4oZHFwLT5xX21vdW50KSwKLQkJICAgIFhGU19JTkNPUkVfVFJZTE9DSyk7Ci0JaWYgKGJwICE9IE5VTEwpIHsKLQkJaWYgKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkgewotCQkJaW50CWVycm9yOwotCQkJaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKSB7Ci0JCQkJeGZzX2xvZ19mb3JjZShkcXAtPnFfbW91bnQsCi0JCQkJCSAgICAgICh4ZnNfbHNuX3QpMCwKLQkJCQkJICAgICAgWEZTX0xPR19GT1JDRSk7Ci0JCQl9Ci0JCQllcnJvciA9IHhmc19iYXdyaXRlKGRxcC0+cV9tb3VudCwgYnApOwotCQkJaWYgKGVycm9yKQotCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGRxcC0+cV9tb3VudCwKLQkJCQkJInhmc19xbV9kcWZsb2NrX3B1c2hidWZfd2FpdDogIgotCQkJCQkicHVzaGJ1ZiBlcnJvciAlZCBvbiBkcXAgJXAsIGJwICVwIiwKLQkJCQkJZXJyb3IsIGRxcCwgYnApOwotCQl9IGVsc2UgewotCQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JCX0KKwkJICAgIFhGU19RSV9EUUNIVU5LTEVOKGRxcC0+cV9tb3VudCksIFhCRl9UUllMT0NLKTsKKwlpZiAoIWJwKQorCQlnb3RvIG91dF9sb2NrOworCisJaWYgKFhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSkgeworCQlpZiAoWEZTX0JVRl9JU1BJTk5FRChicCkpCisJCQl4ZnNfbG9nX2ZvcmNlKGRxcC0+cV9tb3VudCwgMCk7CisJCXhmc19idWZfZGVsd3JpX3Byb21vdGUoYnApOworCQl3YWtlX3VwX3Byb2Nlc3MoYnAtPmJfdGFyZ2V0LT5idF90YXNrKTsKIAl9CisJeGZzX2J1Zl9yZWxzZShicCk7CitvdXRfbG9jazoKIAl4ZnNfZHFmbG9jayhkcXApOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmMgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90X2l0ZW0uYwppbmRleCBkMGQ0YTlhLi40ZTRlZTlhIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90X2l0ZW0uYworKysgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90X2l0ZW0uYwpAQCAtNzQsMTEgKzc0LDExIEBACiAKIAlsb2d2ZWMtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmbG9naXRlbS0+cWxpX2Zvcm1hdDsKIAlsb2d2ZWMtPmlfbGVuICA9IHNpemVvZih4ZnNfZHFfbG9nZm9ybWF0X3QpOwotCVhMT0dfVkVDX1NFVF9UWVBFKGxvZ3ZlYywgWExPR19SRUdfVFlQRV9RRk9STUFUKTsKKwlsb2d2ZWMtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfUUZPUk1BVDsKIAlsb2d2ZWMrKzsKIAlsb2d2ZWMtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmbG9naXRlbS0+cWxpX2RxdW90LT5xX2NvcmU7CiAJbG9ndmVjLT5pX2xlbiAgPSBzaXplb2YoeGZzX2Rpc2tfZHF1b3RfdCk7Ci0JWExPR19WRUNfU0VUX1RZUEUobG9ndmVjLCBYTE9HX1JFR19UWVBFX0RRVU9UKTsKKwlsb2d2ZWMtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfRFFVT1Q7CiAKIAlBU1NFUlQoMiA9PSBsb2dpdGVtLT5xbGlfaXRlbS5saV9kZXNjLT5saWRfc2l6ZSk7CiAJbG9naXRlbS0+cWxpX2Zvcm1hdC5xbGZfc2l6ZSA9IDI7CkBAIC0xNTMsNyArMTUzLDcgQEAKIAkgKiBsb2NrIHdpdGhvdXQgc2xlZXBpbmcsIHRoZW4gdGhlcmUgbXVzdCBub3QgaGF2ZSBiZWVuCiAJICogYW55b25lIGluIHRoZSBwcm9jZXNzIG9mIGZsdXNoaW5nIHRoZSBkcXVvdC4KIAkgKi8KLQllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgWEZTX1FNT1BUX0RFTFdSSSk7CisJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIDApOwogCWlmIChlcnJvcikKIAkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgZHFwLT5xX21vdW50LAogCQkJInhmc19xbV9kcXVvdF9sb2dpdGVtX3B1c2g6IHB1c2ggZXJyb3IgJWQgb24gZHFwICVwIiwKQEAgLTE5MCw3ICsxOTAsNyBAQAogCS8qCiAJICogR2l2ZSB0aGUgbG9nIGEgcHVzaCBzbyB3ZSBkb24ndCB3YWl0IGhlcmUgdG9vIGxvbmcuCiAJICovCi0JeGZzX2xvZ19mb3JjZShkcXAtPnFfbW91bnQsICh4ZnNfbHNuX3QpMCwgWEZTX0xPR19GT1JDRSk7CisJeGZzX2xvZ19mb3JjZShkcXAtPnFfbW91bnQsIDApOwogCXdhaXRfZXZlbnQoZHFwLT5xX3BpbndhaXQsIChhdG9taWNfcmVhZCgmZHFwLT5xX3BpbmNvdW50KSA9PSAwKSk7CiB9CiAKQEAgLTIxMiw2OCArMjEyLDMxIEBACiAJeGZzX2RxdW90X3QJKmRxcDsKIAl4ZnNfbW91bnRfdAkqbXA7CiAJeGZzX2J1Zl90CSpicDsKLQl1aW50CQlkb3B1c2g7CiAKIAlkcXAgPSBxaXAtPnFsaV9kcXVvdDsKIAlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRChkcXApKTsKIAogCS8qCi0JICogVGhlIHFsaV9wdXNoYnVmX2ZsYWcga2VlcHMgb3RoZXJzIGZyb20KLQkgKiB0cnlpbmcgdG8gZHVwbGljYXRlIG91ciBlZmZvcnQuCi0JICovCi0JQVNTRVJUKHFpcC0+cWxpX3B1c2hidWZfZmxhZyAhPSAwKTsKLQlBU1NFUlQocWlwLT5xbGlfcHVzaF9vd25lciA9PSBjdXJyZW50X3BpZCgpKTsKLQotCS8qCiAJICogSWYgZmx1c2hsb2NrIGlzbid0IGxvY2tlZCBhbnltb3JlLCBjaGFuY2VzIGFyZSB0aGF0IHRoZQogCSAqIGlub2RlIGZsdXNoIGNvbXBsZXRlZCBhbmQgdGhlIGlub2RlIHdhcyB0YWtlbiBvZmYgdGhlIEFJTC4KIAkgKiBTbywganVzdCBnZXQgb3V0LgogCSAqLwogCWlmIChjb21wbGV0aW9uX2RvbmUoJmRxcC0+cV9mbHVzaCkgIHx8CiAJICAgICgocWlwLT5xbGlfaXRlbS5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpID09IDApKSB7Ci0JCXFpcC0+cWxpX3B1c2hidWZfZmxhZyA9IDA7CiAJCXhmc19kcXVubG9jayhkcXApOwogCQlyZXR1cm47CiAJfQogCW1wID0gZHFwLT5xX21vdW50OwogCWJwID0geGZzX2luY29yZShtcC0+bV9kZGV2X3RhcmdwLCBxaXAtPnFsaV9mb3JtYXQucWxmX2Jsa25vLAotCQkgICAgWEZTX1FJX0RRQ0hVTktMRU4obXApLAotCQkgICAgWEZTX0lOQ09SRV9UUllMT0NLKTsKLQlpZiAoYnAgIT0gTlVMTCkgewotCQlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKSB7Ci0JCQlkb3B1c2ggPSAoKHFpcC0+cWxpX2l0ZW0ubGlfZmxhZ3MgJiBYRlNfTElfSU5fQUlMKSAmJgotCQkJCSAgIWNvbXBsZXRpb25fZG9uZSgmZHFwLT5xX2ZsdXNoKSk7Ci0JCQlxaXAtPnFsaV9wdXNoYnVmX2ZsYWcgPSAwOwotCQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0KLQkJCWlmIChYRlNfQlVGX0lTUElOTkVEKGJwKSkgewotCQkJCXhmc19sb2dfZm9yY2UobXAsICh4ZnNfbHNuX3QpMCwKLQkJCQkJICAgICAgWEZTX0xPR19GT1JDRSk7Ci0JCQl9Ci0JCQlpZiAoZG9wdXNoKSB7Ci0JCQkJaW50CWVycm9yOwotI2lmZGVmIFhGU1JBQ0VERUJVRwotCQkJCWRlbGF5X2Zvcl9pbnRyKCk7Ci0JCQkJZGVsYXkoMzAwKTsKLSNlbmRpZgotCQkJCWVycm9yID0geGZzX2Jhd3JpdGUobXAsIGJwKTsKLQkJCQlpZiAoZXJyb3IpCi0JCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLAotCSJ4ZnNfcW1fZHF1b3RfbG9naXRlbV9wdXNoYnVmOiBwdXNoYnVmIGVycm9yICVkIG9uIHFpcCAlcCwgYnAgJXAiLAotCQkJCQkJCWVycm9yLCBxaXAsIGJwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlxaXAtPnFsaV9wdXNoYnVmX2ZsYWcgPSAwOwotCQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JCQl4ZnNfYnVmX3JlbHNlKGJwKTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCi0JcWlwLT5xbGlfcHVzaGJ1Zl9mbGFnID0gMDsKKwkJICAgIFhGU19RSV9EUUNIVU5LTEVOKG1wKSwgWEJGX1RSWUxPQ0spOwogCXhmc19kcXVubG9jayhkcXApOworCWlmICghYnApCisJCXJldHVybjsKKwlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKQorCQl4ZnNfYnVmX2RlbHdyaV9wcm9tb3RlKGJwKTsKKwl4ZnNfYnVmX3JlbHNlKGJwKTsKKwlyZXR1cm47CisKIH0KIAogLyoKQEAgLTI5MSw1MCArMjU0LDI0IEBACiAJeGZzX2RxX2xvZ2l0ZW1fdAkqcWlwKQogewogCXhmc19kcXVvdF90CQkqZHFwOwotCXVpbnQJCQlyZXR2YWw7CiAKIAlkcXAgPSBxaXAtPnFsaV9kcXVvdDsKIAlpZiAoYXRvbWljX3JlYWQoJmRxcC0+cV9waW5jb3VudCkgPiAwKQotCQlyZXR1cm4gKFhGU19JVEVNX1BJTk5FRCk7CisJCXJldHVybiBYRlNfSVRFTV9QSU5ORUQ7CiAKIAlpZiAoISB4ZnNfcW1fZHFsb2NrX25vd2FpdChkcXApKQotCQlyZXR1cm4gKFhGU19JVEVNX0xPQ0tFRCk7CisJCXJldHVybiBYRlNfSVRFTV9MT0NLRUQ7CiAKLQlyZXR2YWwgPSBYRlNfSVRFTV9TVUNDRVNTOwogCWlmICgheGZzX2RxZmxvY2tfbm93YWl0KGRxcCkpIHsKIAkJLyoKLQkJICogVGhlIGRxdW90IGlzIGFscmVhZHkgYmVpbmcgZmx1c2hlZC4JSXQgbWF5IGhhdmUgYmVlbgotCQkgKiBmbHVzaGVkIGRlbGF5ZWQgd3JpdGUsIGhvd2V2ZXIsIGFuZCB3ZSBkb24ndCB3YW50IHRvCi0JCSAqIGdldCBzdHVjayB3YWl0aW5nIGZvciB0aGF0IHRvIGNvbXBsZXRlLiAgU28sIHdlIHdhbnQgdG8gY2hlY2sKLQkJICogdG8gc2VlIGlmIHdlIGNhbiBsb2NrIHRoZSBkcXVvdCdzIGJ1ZmZlciB3aXRob3V0IHNsZWVwaW5nLgotCQkgKiBJZiB3ZSBjYW4gYW5kIGl0IGlzIG1hcmtlZCBmb3IgZGVsYXllZCB3cml0ZSwgdGhlbiB3ZQotCQkgKiBob2xkIGl0IGFuZCBzZW5kIGl0IG91dCBmcm9tIHRoZSBwdXNoIHJvdXRpbmUuICBXZSBkb24ndAotCQkgKiB3YW50IHRvIGRvIHRoYXQgbm93IHNpbmNlIHdlIG1pZ2h0IHNsZWVwIGluIHRoZSBkZXZpY2UKLQkJICogc3RyYXRlZ3kgcm91dGluZS4gIFdlIGFsc28gZG9uJ3Qgd2FudCB0byBncmFiIHRoZSBidWZmZXIgbG9jawotCQkgKiBoZXJlIGJlY2F1c2Ugd2UnZCBsaWtlIG5vdCB0byBjYWxsIGludG8gdGhlIGJ1ZmZlciBjYWNoZQotCQkgKiB3aGlsZSBob2xkaW5nIHRoZSBBSUwgbG9jay4KLQkJICogTWFrZSBzdXJlIHRvIG9ubHkgcmV0dXJuIFBVU0hCVUYgaWYgd2Ugc2V0IHB1c2hidWZfZmxhZwotCQkgKiBvdXJzZWx2ZXMuICBJZiBzb21lb25lIGVsc2UgaXMgZG9pbmcgaXQgdGhlbiB3ZSBkb24ndAotCQkgKiB3YW50IHRvIGdvIHRvIHRoZSBwdXNoIHJvdXRpbmUgYW5kIGR1cGxpY2F0ZSB0aGVpciBlZmZvcnRzLgorCQkgKiBkcXVvdCBoYXMgYWxyZWFkeSBiZWVuIGZsdXNoZWQgdG8gdGhlIGJhY2tpbmcgYnVmZmVyLAorCQkgKiBsZWF2ZSBpdCBsb2NrZWQsIHB1c2hidWYgcm91dGluZSB3aWxsIHVubG9jayBpdC4KIAkJICovCi0JCWlmIChxaXAtPnFsaV9wdXNoYnVmX2ZsYWcgPT0gMCkgewotCQkJcWlwLT5xbGlfcHVzaGJ1Zl9mbGFnID0gMTsKLQkJCUFTU0VSVChxaXAtPnFsaV9mb3JtYXQucWxmX2Jsa25vID09IGRxcC0+cV9ibGtubyk7Ci0jaWZkZWYgREVCVUcKLQkJCXFpcC0+cWxpX3B1c2hfb3duZXIgPSBjdXJyZW50X3BpZCgpOwotI2VuZGlmCi0JCQkvKgotCQkJICogVGhlIGRxdW90IGlzIGxlZnQgbG9ja2VkLgotCQkJICovCi0JCQlyZXR2YWwgPSBYRlNfSVRFTV9QVVNIQlVGOwotCQl9IGVsc2UgewotCQkJcmV0dmFsID0gWEZTX0lURU1fRkxVU0hJTkc7Ci0JCQl4ZnNfZHF1bmxvY2tfbm9ub3RpZnkoZHFwKTsKLQkJfQorCQlyZXR1cm4gWEZTX0lURU1fUFVTSEJVRjsKIAl9CiAKIAlBU1NFUlQocWlwLT5xbGlfaXRlbS5saV9mbGFncyAmIFhGU19MSV9JTl9BSUwpOwotCXJldHVybiAocmV0dmFsKTsKKwlyZXR1cm4gWEZTX0lURU1fU1VDQ0VTUzsKIH0KIAogCkBAIC00NjcsNyArNDA0LDcgQEAKIAogCWxvZ192ZWN0b3ItPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmKHFmLT5xcWxfZm9ybWF0KTsKIAlsb2dfdmVjdG9yLT5pX2xlbiA9IHNpemVvZih4ZnNfcW9mZl9sb2dpdGVtX3QpOwotCVhMT0dfVkVDX1NFVF9UWVBFKGxvZ192ZWN0b3IsIFhMT0dfUkVHX1RZUEVfUVVPVEFPRkYpOworCWxvZ192ZWN0b3ItPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfUVVPVEFPRkY7CiAJcWYtPnFxbF9mb3JtYXQucWZfc2l6ZSA9IDE7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5oIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmgKaW5kZXggNWE2MzI1My4uNWFjYWUyYSAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmgKKysrIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmgKQEAgLTI3LDEwICsyNyw2IEBACiAJeGZzX2xvZ19pdGVtX3QJCSBxbGlfaXRlbTsJICAgLyogY29tbW9uIHBvcnRpb24gKi8KIAlzdHJ1Y3QgeGZzX2RxdW90CSpxbGlfZHF1b3Q7CSAgIC8qIGRxdW90IHB0ciAqLwogCXhmc19sc25fdAkJIHFsaV9mbHVzaF9sc247CSAgIC8qIGxzbiBhdCBsYXN0IGZsdXNoICovCi0JdW5zaWduZWQgc2hvcnQJCSBxbGlfcHVzaGJ1Zl9mbGFnOyAvKiAxIGJpdCB1c2VkIGluIHB1c2hfYWlsICovCi0jaWZkZWYgREVCVUcKLQl1aW50NjRfdAkJIHFsaV9wdXNoX293bmVyOwotI2VuZGlmCiAJeGZzX2RxX2xvZ2Zvcm1hdF90CSBxbGlfZm9ybWF0OwkgICAvKiBsb2dnZWQgc3RydWN0dXJlICovCiB9IHhmc19kcV9sb2dpdGVtX3Q7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwppbmRleCA5ZTYyN2E4Li40MTdlNjFlIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCkBAIC0xMTgsOSArMTE4LDE0IEBACiAJICovCiAJdWRxaGFzaCA9IGttZW1femFsbG9jX2dyZWVkeSgmaHNpemUsCiAJCQkJICAgICBYRlNfUU1fSEFTSFNJWkVfTE9XICogc2l6ZW9mKHhmc19kcWhhc2hfdCksCi0JCQkJICAgICBYRlNfUU1fSEFTSFNJWkVfSElHSCAqIHNpemVvZih4ZnNfZHFoYXNoX3QpLAotCQkJCSAgICAgS01fU0xFRVAgfCBLTV9NQVlGQUlMIHwgS01fTEFSR0UpOwotCWdkcWhhc2ggPSBrbWVtX3phbGxvYyhoc2l6ZSwgS01fU0xFRVAgfCBLTV9MQVJHRSk7CisJCQkJICAgICBYRlNfUU1fSEFTSFNJWkVfSElHSCAqIHNpemVvZih4ZnNfZHFoYXNoX3QpKTsKKwlpZiAoIXVkcWhhc2gpCisJCWdvdG8gb3V0OworCisJZ2RxaGFzaCA9IGttZW1femFsbG9jX2xhcmdlKGhzaXplKTsKKwlpZiAoIWdkcWhhc2gpCisJCWdvdG8gb3V0X2ZyZWVfdWRxaGFzaDsKKwogCWhzaXplIC89IHNpemVvZih4ZnNfZHFoYXNoX3QpOwogCW5kcXVvdCA9IGhzaXplIDw8IDg7CiAKQEAgLTE3MCw2ICsxNzUsMTEgQEAKIAltdXRleF9pbml0KCZxY2hlY2tfbG9jayk7CiAjZW5kaWYKIAlyZXR1cm4geHFtOworCisgb3V0X2ZyZWVfdWRxaGFzaDoKKwlrbWVtX2ZyZWVfbGFyZ2UodWRxaGFzaCk7Cisgb3V0OgorCXJldHVybiBOVUxMOwogfQogCiAvKgpAQCAtMTg5LDggKzE5OSw4IEBACiAJCXhmc19xbV9saXN0X2Rlc3Ryb3koJih4cW0tPnFtX3Vzcl9kcWh0YWJsZVtpXSkpOwogCQl4ZnNfcW1fbGlzdF9kZXN0cm95KCYoeHFtLT5xbV9ncnBfZHFodGFibGVbaV0pKTsKIAl9Ci0Ja21lbV9mcmVlKHhxbS0+cW1fdXNyX2RxaHRhYmxlKTsKLQlrbWVtX2ZyZWUoeHFtLT5xbV9ncnBfZHFodGFibGUpOworCWttZW1fZnJlZV9sYXJnZSh4cW0tPnFtX3Vzcl9kcWh0YWJsZSk7CisJa21lbV9mcmVlX2xhcmdlKHhxbS0+cW1fZ3JwX2RxaHRhYmxlKTsKIAl4cW0tPnFtX3Vzcl9kcWh0YWJsZSA9IE5VTEw7CiAJeHFtLT5xbV9ncnBfZHFodGFibGUgPSBOVUxMOwogCXhxbS0+cW1fZHFoYXNobWFzayA9IDA7CkBAIC0yMTksOCArMjI5LDEyIEBACiAJICovCiAJbXV0ZXhfbG9jaygmeGZzX0dxbV9sb2NrKTsKIAotCWlmICh4ZnNfR3FtID09IE5VTEwpCisJaWYgKCF4ZnNfR3FtKSB7CiAJCXhmc19HcW0gPSB4ZnNfR3FtX2luaXQoKTsKKwkJaWYgKCF4ZnNfR3FtKQorCQkJcmV0dXJuIEVOT01FTTsKKwl9CisKIAkvKgogCSAqIFdlIGNhbiBrZWVwIGEgbGlzdCBvZiBhbGwgZmlsZXN5c3RlbXMgd2l0aCBxdW90YXMgbW91bnRlZCBmb3IKIAkgKiBkZWJ1Z2dpbmcgYW5kIHN0YXRpc3RpY2FsIHB1cnBvc2VzLCBidXQgLi4uCkBAIC00MzYsNyArNDUwLDcgQEAKIFNUQVRJQyBpbnQKIHhmc19xbV9kcWZsdXNoX2FsbCgKIAl4ZnNfbW91bnRfdAkqbXAsCi0JaW50CQlmbGFncykKKwlpbnQJCXN5bmNfbW9kZSkKIHsKIAlpbnQJCXJlY2w7CiAJeGZzX2RxdW90X3QJKmRxcDsKQEAgLTQ3Miw3ICs0ODYsNyBAQAogCQkgKiBhY3Jvc3MgYSBkaXNrIHdyaXRlLgogCQkgKi8KIAkJeGZzX3FtX21wbGlzdF91bmxvY2sobXApOwotCQllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgZmxhZ3MpOworCQllcnJvciA9IHhmc19xbV9kcWZsdXNoKGRxcCwgc3luY19tb2RlKTsKIAkJeGZzX2RxdW5sb2NrKGRxcCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKQEAgLTkxMiwxMyArOTI2LDExIEBACiB7CiAJaW50CQlyZWNsLCByZXN0YXJ0czsKIAl4ZnNfZHF1b3RfdAkqZHFwOwotCXVpbnQJCWZsdXNoX2ZsYWdzOwogCWludAkJZXJyb3I7CiAKIAlpZiAoIVhGU19JU19RVU9UQV9SVU5OSU5HKG1wKSB8fCAhWEZTX0lTX1FVT1RBX09OKG1wKSkKIAkJcmV0dXJuIDA7CiAKLQlmbHVzaF9mbGFncyA9IChmbGFncyAmIFNZTkNfV0FJVCkgPyBYRlNfUU1PUFRfU1lOQyA6IFhGU19RTU9QVF9ERUxXUkk7CiAJcmVzdGFydHMgPSAwOwogCiAgIGFnYWluOgpAQCAtOTc4LDcgKzk5MCw3IEBACiAJCSAqIGFjcm9zcyBhIGRpc2sgd3JpdGUKIAkJICovCiAJCXhmc19xbV9tcGxpc3RfdW5sb2NrKG1wKTsKLQkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIGZsdXNoX2ZsYWdzKTsKKwkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaChkcXAsIGZsYWdzKTsKIAkJeGZzX2RxdW5sb2NrKGRxcCk7CiAJCWlmIChlcnJvciAmJiBYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKIAkJCXJldHVybiAwOwkvKiBOZWVkIHRvIHByZXZlbnQgdW1vdW50IGZhaWx1cmUgKi8KQEAgLTE3ODIsNyArMTc5NCw3IEBACiAJICogc3VjY2Vzc2Z1bGx5LgogCSAqLwogCWlmICghZXJyb3IpCi0JCWVycm9yID0geGZzX3FtX2RxZmx1c2hfYWxsKG1wLCBYRlNfUU1PUFRfREVMV1JJKTsKKwkJZXJyb3IgPSB4ZnNfcW1fZHFmbHVzaF9hbGwobXAsIDApOwogCiAJLyoKIAkgKiBXZSBjYW4gZ2V0IHRoaXMgZXJyb3IgaWYgd2UgY291bGRuJ3QgZG8gYSBkcXVvdCBhbGxvY2F0aW9uIGluc2lkZQpAQCAtMjAwNCw3ICsyMDE2LDcgQEAKIAkJCSAqIFdlIGZsdXNoIGl0IGRlbGF5ZWQgd3JpdGUsIHNvIGRvbid0IGJvdGhlcgogCQkJICogcmVsZWFzaW5nIHRoZSBtcGxvY2suCiAJCQkgKi8KLQkJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCBYRlNfUU1PUFRfREVMV1JJKTsKKwkJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCAwKTsKIAkJCWlmIChlcnJvcikgewogCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGRxcC0+cV9tb3VudCwKIAkJCSJ4ZnNfcW1fZHFmbHVzaF9hbGw6IGRxdW90ICVwIGZsdXNoIGZhaWxlZCIsIGRxcCk7CkBAIC0yMTg3LDcgKzIxOTksNyBAQAogCQkJICogV2UgZmx1c2ggaXQgZGVsYXllZCB3cml0ZSwgc28gZG9uJ3QgYm90aGVyCiAJCQkgKiByZWxlYXNpbmcgdGhlIGZyZWVsaXN0IGxvY2suCiAJCQkgKi8KLQkJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCBYRlNfUU1PUFRfREVMV1JJKTsKKwkJCWVycm9yID0geGZzX3FtX2RxZmx1c2goZHFwLCAwKTsKIAkJCWlmIChlcnJvcikgewogCQkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGRxcC0+cV9tb3VudCwKIAkJCSJ4ZnNfcW1fZHFyZWNsYWltOiBkcXVvdCAlcCBmbHVzaCBmYWlsZWQiLCBkcXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMKaW5kZXggYTUzNDY2My4uOTdiNDEwYyAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jCkBAIC01OSw3ICs1OSw3IEBACiAJCWJlNjRfdG9fY3B1KGRwLT5kX2Jsa19oYXJkbGltaXQpOwogCWlmIChsaW1pdCAmJiBzdGF0cC0+Zl9ibG9ja3MgPiBsaW1pdCkgewogCQlzdGF0cC0+Zl9ibG9ja3MgPSBsaW1pdDsKLQkJc3RhdHAtPmZfYmZyZWUgPQorCQlzdGF0cC0+Zl9iZnJlZSA9IHN0YXRwLT5mX2JhdmFpbCA9CiAJCQkoc3RhdHAtPmZfYmxvY2tzID4gYmU2NF90b19jcHUoZHAtPmRfYmNvdW50KSkgPwogCQkJIChzdGF0cC0+Zl9ibG9ja3MgLSBiZTY0X3RvX2NwdShkcC0+ZF9iY291bnQpKSA6IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCmluZGV4IDg3M2UwN2UuLjVkMGVlOGQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKQEAgLTExOTIsOSArMTE5Miw5IEBACiAJaWYgKCEgWEZTX0lTX1FVT1RBX09OKG1wKSkKIAkJcmV0dXJuIFhGU19FUlJPUihFU1JDSCk7CiAKLQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMpOworCXhmc19sb2dfZm9yY2UobXAsIFhGU19MT0dfU1lOQyk7CiAJWEZTX2JmbHVzaChtcC0+bV9kZGV2X3RhcmdwKTsKLQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMpOworCXhmc19sb2dfZm9yY2UobXAsIFhGU19MT0dfU1lOQyk7CiAJWEZTX2JmbHVzaChtcC0+bV9kZGV2X3RhcmdwKTsKIAogCW11dGV4X2xvY2soJnFjaGVja19sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYyBiL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYwppbmRleCA5N2FjOTY0Li5jM2FiNzVjIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc190cmFuc19kcXVvdC5jCkBAIC01ODksMTIgKzU4OSwxOCBAQAogCX0KIH0KIAotU1RBVElDIGludAoteGZzX3F1b3RhX2Vycm9yKHVpbnQgZmxhZ3MpCitTVEFUSUMgdm9pZAoreGZzX3F1b3RhX3dhcm4oCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IHhmc19kcXVvdAkqZHFwLAorCWludAkJCXR5cGUpCiB7Ci0JaWYgKGZsYWdzICYgWEZTX1FNT1BUX0VOT1NQQykKLQkJcmV0dXJuIEVOT1NQQzsKLQlyZXR1cm4gRURRVU9UOworCS8qIG5vIHdhcm5pbmdzIGZvciBwcm9qZWN0IHF1b3RhcyAtIHdlIGp1c3QgcmV0dXJuIEVOT1NQQyBsYXRlciAqLworCWlmIChkcXAtPmRxX2ZsYWdzICYgWEZTX0RRX1BST0opCisJCXJldHVybjsKKwlxdW90YV9zZW5kX3dhcm5pbmcoKGRxcC0+ZHFfZmxhZ3MgJiBYRlNfRFFfVVNFUikgPyBVU1JRVU9UQSA6IEdSUFFVT1RBLAorCQkJICAgYmUzMl90b19jcHUoZHFwLT5xX2NvcmUuZF9pZCksIG1wLT5tX3N1cGVyLT5zX2RldiwKKwkJCSAgIHR5cGUpOwogfQogCiAvKgpAQCAtNjEyLDcgKzYxOCw2IEBACiAJbG9uZwkJbmlub3MsCiAJdWludAkJZmxhZ3MpCiB7Ci0JaW50CQllcnJvcjsKIAl4ZnNfcWNudF90CWhhcmRsaW1pdDsKIAl4ZnNfcWNudF90CXNvZnRsaW1pdDsKIAl0aW1lX3QJCXRpbWVyOwpAQCAtNjQ5LDcgKzY1NCw2IEBACiAJCXdhcm5saW1pdCA9IFhGU19RSV9SVEJXQVJOTElNSVQoZHFwLT5xX21vdW50KTsKIAkJcmVzYmNvdW50cCA9ICZkcXAtPnFfcmVzX3J0YmNvdW50OwogCX0KLQllcnJvciA9IDA7CiAKIAlpZiAoKGZsYWdzICYgWEZTX1FNT1BUX0ZPUkNFX1JFUykgPT0gMCAmJgogCSAgICBkcXAtPnFfY29yZS5kX2lkICYmCkBAIC02NjcsMTggKzY3MSwyMCBAQAogCQkJICogbmJsa3MuCiAJCQkgKi8KIAkJCWlmIChoYXJkbGltaXQgPiAwVUxMICYmCi0JCQkgICAgIChoYXJkbGltaXQgPD0gbmJsa3MgKyAqcmVzYmNvdW50cCkpIHsKLQkJCQllcnJvciA9IHhmc19xdW90YV9lcnJvcihmbGFncyk7CisJCQkgICAgaGFyZGxpbWl0IDw9IG5ibGtzICsgKnJlc2Jjb3VudHApIHsKKwkJCQl4ZnNfcXVvdGFfd2FybihtcCwgZHFwLCBRVU9UQV9OTF9CSEFSRFdBUk4pOwogCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCQkJfQotCiAJCQlpZiAoc29mdGxpbWl0ID4gMFVMTCAmJgotCQkJICAgICAoc29mdGxpbWl0IDw9IG5ibGtzICsgKnJlc2Jjb3VudHApKSB7CisJCQkgICAgc29mdGxpbWl0IDw9IG5ibGtzICsgKnJlc2Jjb3VudHApIHsKIAkJCQlpZiAoKHRpbWVyICE9IDAgJiYgZ2V0X3NlY29uZHMoKSA+IHRpbWVyKSB8fAogCQkJCSAgICAod2FybnMgIT0gMCAmJiB3YXJucyA+PSB3YXJubGltaXQpKSB7Ci0JCQkJCWVycm9yID0geGZzX3F1b3RhX2Vycm9yKGZsYWdzKTsKKwkJCQkJeGZzX3F1b3RhX3dhcm4obXAsIGRxcCwKKwkJCQkJCSAgICAgICBRVU9UQV9OTF9CU09GVExPTkdXQVJOKTsKIAkJCQkJZ290byBlcnJvcl9yZXR1cm47CiAJCQkJfQorCisJCQkJeGZzX3F1b3RhX3dhcm4obXAsIGRxcCwgUVVPVEFfTkxfQlNPRlRXQVJOKTsKIAkJCX0KIAkJfQogCQlpZiAobmlub3MgPiAwKSB7CkBAIC02OTIsMTUgKzY5OCwxOSBAQAogCQkJc29mdGxpbWl0ID0gYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9pbm9fc29mdGxpbWl0KTsKIAkJCWlmICghc29mdGxpbWl0KQogCQkJCXNvZnRsaW1pdCA9IHEtPnFpX2lzb2Z0bGltaXQ7CisKIAkJCWlmIChoYXJkbGltaXQgPiAwVUxMICYmIGNvdW50ID49IGhhcmRsaW1pdCkgewotCQkJCWVycm9yID0geGZzX3F1b3RhX2Vycm9yKGZsYWdzKTsKKwkJCQl4ZnNfcXVvdGFfd2FybihtcCwgZHFwLCBRVU9UQV9OTF9JSEFSRFdBUk4pOwogCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwotCQkJfSBlbHNlIGlmIChzb2Z0bGltaXQgPiAwVUxMICYmIGNvdW50ID49IHNvZnRsaW1pdCkgewotCQkJCWlmICgodGltZXIgIT0gMCAmJiBnZXRfc2Vjb25kcygpID4gdGltZXIpIHx8CisJCQl9CisJCQlpZiAoc29mdGxpbWl0ID4gMFVMTCAmJiBjb3VudCA+PSBzb2Z0bGltaXQpIHsKKwkJCQlpZiAgKCh0aW1lciAhPSAwICYmIGdldF9zZWNvbmRzKCkgPiB0aW1lcikgfHwKIAkJCQkgICAgICh3YXJucyAhPSAwICYmIHdhcm5zID49IHdhcm5saW1pdCkpIHsKLQkJCQkJZXJyb3IgPSB4ZnNfcXVvdGFfZXJyb3IoZmxhZ3MpOworCQkJCQl4ZnNfcXVvdGFfd2FybihtcCwgZHFwLAorCQkJCQkJICAgICAgIFFVT1RBX05MX0lTT0ZUTE9OR1dBUk4pOwogCQkJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJCQl9CisJCQkJeGZzX3F1b3RhX3dhcm4obXAsIGRxcCwgUVVPVEFfTkxfSVNPRlRXQVJOKTsKIAkJCX0KIAkJfQogCX0KQEAgLTczNiw5ICs3NDYsMTQgQEAKIAlBU1NFUlQoZHFwLT5xX3Jlc19ydGJjb3VudCA+PSBiZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX3J0YmNvdW50KSk7CiAJQVNTRVJUKGRxcC0+cV9yZXNfaWNvdW50ID49IGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaWNvdW50KSk7CiAKKwl4ZnNfZHF1bmxvY2soZHFwKTsKKwlyZXR1cm4gMDsKKwogZXJyb3JfcmV0dXJuOgogCXhmc19kcXVubG9jayhkcXApOwotCXJldHVybiBlcnJvcjsKKwlpZiAoZmxhZ3MgJiBYRlNfUU1PUFRfRU5PU1BDKQorCQlyZXR1cm4gRU5PU1BDOworCXJldHVybiBFRFFVT1Q7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hY2wuaCBiL2ZzL3hmcy94ZnNfYWNsLmgKaW5kZXggMDBmZDM1N2MuLmQxM2VlYmEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWNsLmgKKysrIGIvZnMveGZzL3hmc19hY2wuaApAQCAtMzYsOCArMzYsOCBAQAogfTsKIAogLyogT24tZGlzayBYRlMgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzICovCi0jZGVmaW5lIFNHSV9BQ0xfRklMRQkJIlNHSV9BQ0xfRklMRSIKLSNkZWZpbmUgU0dJX0FDTF9ERUZBVUxUCQkiU0dJX0FDTF9ERUZBVUxUIgorI2RlZmluZSBTR0lfQUNMX0ZJTEUJCSh1bnNpZ25lZCBjaGFyICopIlNHSV9BQ0xfRklMRSIKKyNkZWZpbmUgU0dJX0FDTF9ERUZBVUxUCQkodW5zaWduZWQgY2hhciAqKSJTR0lfQUNMX0RFRkFVTFQiCiAjZGVmaW5lIFNHSV9BQ0xfRklMRV9TSVpFCShzaXplb2YoU0dJX0FDTF9GSUxFKS0xKQogI2RlZmluZSBTR0lfQUNMX0RFRkFVTFRfU0laRQkoc2l6ZW9mKFNHSV9BQ0xfREVGQVVMVCktMSkKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hZy5oIGIvZnMveGZzL3hmc19hZy5oCmluZGV4IDY3MDJiZDguLmIxYTVhMWYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWcuaAorKysgYi9mcy94ZnMveGZzX2FnLmgKQEAgLTE4NywxNyArMTg3LDEzIEBACiAvKgogICogUGVyLWFnIGluY29yZSBzdHJ1Y3R1cmUsIGNvcGllcyBvZiBpbmZvcm1hdGlvbiBpbiBhZ2YgYW5kIGFnaSwKICAqIHRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIGFsbG9jYXRpb24gZ3JvdXAgc2VsZWN0aW9uLgotICoKLSAqIHBpY2sgc2l6ZXMgd2hpY2ggZml0IGluIGFsbG9jYXRpb24gYnVja2V0cyB3ZWxsCiAgKi8KLSNpZiAoQklUU19QRVJfTE9ORyA9PSAzMikKLSNkZWZpbmUgWEZTX1BBR0JfTlVNX1NMT1RTCTg0Ci0jZWxpZiAoQklUU19QRVJfTE9ORyA9PSA2NCkKICNkZWZpbmUgWEZTX1BBR0JfTlVNX1NMT1RTCTEyOAotI2VuZGlmCiAKLXR5cGVkZWYgc3RydWN0IHhmc19wZXJhZwotewordHlwZWRlZiBzdHJ1Y3QgeGZzX3BlcmFnIHsKKwlzdHJ1Y3QgeGZzX21vdW50ICpwYWdfbW91bnQ7CS8qIG93bmVyIGZpbGVzeXN0ZW0gKi8KKwl4ZnNfYWdudW1iZXJfdAlwYWdfYWdubzsJLyogQUcgdGhpcyBzdHJ1Y3R1cmUgYmVsb25ncyB0byAqLworCWF0b21pY190CXBhZ19yZWY7CS8qIHBlcmFnIHJlZmVyZW5jZSBjb3VudCAqLwogCWNoYXIJCXBhZ2ZfaW5pdDsJLyogdGhpcyBhZ2YncyBlbnRyeSBpcyBpbml0aWFsaXplZCAqLwogCWNoYXIJCXBhZ2lfaW5pdDsJLyogdGhpcyBhZ2kncyBlbnRyeSBpcyBpbml0aWFsaXplZCAqLwogCWNoYXIJCXBhZ2ZfbWV0YWRhdGE7CS8qIHRoZSBhZ2YgaXMgcHJlZmVycmVkIHRvIGJlIG1ldGFkYXRhICovCkBAIC0yMTAsOCArMjA2LDYgQEAKIAlfX3VpbnQzMl90CXBhZ2ZfYnRyZWVibGtzOwkvKiAjIG9mIGJsb2NrcyBoZWxkIGluIEFHRiBidHJlZXMgKi8KIAl4ZnNfYWdpbm9fdAlwYWdpX2ZyZWVjb3VudDsJLyogbnVtYmVyIG9mIGZyZWUgaW5vZGVzICovCiAJeGZzX2FnaW5vX3QJcGFnaV9jb3VudDsJLyogbnVtYmVyIG9mIGFsbG9jYXRlZCBpbm9kZXMgKi8KLQlpbnQJCXBhZ2JfY291bnQ7CS8qIHBhZ2Igc2xvdHMgaW4gdXNlICovCi0JeGZzX3BlcmFnX2J1c3lfdCAqcGFnYl9saXN0OwkvKiB1bnN0YWJsZSBibG9ja3MgKi8KIAogCS8qCiAJICogSW5vZGUgYWxsb2NhdGlvbiBzZWFyY2ggbG9va3VwIG9wdGltaXNhdGlvbi4KQEAgLTIzMCw2ICsyMjQsOCBAQAogCXJ3bG9ja190CXBhZ19pY2lfbG9jazsJLyogaW5jb3JlIGlub2RlIGxvY2sgKi8KIAlzdHJ1Y3QgcmFkaXhfdHJlZV9yb290IHBhZ19pY2lfcm9vdDsJLyogaW5jb3JlIGlub2RlIGNhY2hlIHJvb3QgKi8KICNlbmRpZgorCWludAkJcGFnYl9jb3VudDsJLyogcGFnYiBzbG90cyBpbiB1c2UgKi8KKwl4ZnNfcGVyYWdfYnVzeV90IHBhZ2JfbGlzdFtYRlNfUEFHQl9OVU1fU0xPVFNdOwkvKiB1bnN0YWJsZSBibG9ja3MgKi8KIH0geGZzX3BlcmFnX3Q7CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmMgYi9mcy94ZnMveGZzX2FsbG9jLmMKaW5kZXggMjc1YjFmNC4uOTRjZGRiZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwpAQCAtMTY2MiwxMSArMTY2MiwxMyBAQAogCQl4ZnNfYWdmX3QJKmFnZjsKIAkJeGZzX3BlcmFnX3QJKnBhZzsJCS8qIHBlciBhbGxvY2F0aW9uIGdyb3VwIGRhdGEgKi8KIAorCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKKwkJcGFnLT5wYWdmX2ZyZWVibGtzICs9IGxlbjsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOworCiAJCWFnZiA9IFhGU19CVUZfVE9fQUdGKGFnYnApOwotCQlwYWcgPSAmbXAtPm1fcGVyYWdbYWdub107CiAJCWJlMzJfYWRkX2NwdSgmYWdmLT5hZ2ZfZnJlZWJsa3MsIGxlbik7CiAJCXhmc190cmFuc19hZ2Jsb2Nrc19kZWx0YSh0cCwgbGVuKTsKLQkJcGFnLT5wYWdmX2ZyZWVibGtzICs9IGxlbjsKIAkJWEZTX1dBTlRfQ09SUlVQVEVEX0dPVE8oCiAJCQliZTMyX3RvX2NwdShhZ2YtPmFnZl9mcmVlYmxrcykgPD0KIAkJCWJlMzJfdG9fY3B1KGFnZi0+YWdmX2xlbmd0aCksCkBAIC0xOTY5LDEwICsxOTcxLDEyIEBACiAJeGZzX3RyYW5zX2JyZWxzZSh0cCwgYWdmbGJwKTsKIAlpZiAoYmUzMl90b19jcHUoYWdmLT5hZ2ZfZmxmaXJzdCkgPT0gWEZTX0FHRkxfU0laRShtcCkpCiAJCWFnZi0+YWdmX2ZsZmlyc3QgPSAwOwotCXBhZyA9ICZtcC0+bV9wZXJhZ1tiZTMyX3RvX2NwdShhZ2YtPmFnZl9zZXFubyldOworCisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYmUzMl90b19jcHUoYWdmLT5hZ2Zfc2Vxbm8pKTsKIAliZTMyX2FkZF9jcHUoJmFnZi0+YWdmX2ZsY291bnQsIC0xKTsKIAl4ZnNfdHJhbnNfYWdmbGlzdF9kZWx0YSh0cCwgLTEpOwogCXBhZy0+cGFnZl9mbGNvdW50LS07CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCiAJbG9nZmxhZ3MgPSBYRlNfQUdGX0ZMRklSU1QgfCBYRlNfQUdGX0ZMQ09VTlQ7CiAJaWYgKGJ0cmVlYmxrKSB7CkBAIC0yMDc4LDcgKzIwODIsOCBAQAogCWJlMzJfYWRkX2NwdSgmYWdmLT5hZ2ZfZmxsYXN0LCAxKTsKIAlpZiAoYmUzMl90b19jcHUoYWdmLT5hZ2ZfZmxsYXN0KSA9PSBYRlNfQUdGTF9TSVpFKG1wKSkKIAkJYWdmLT5hZ2ZfZmxsYXN0ID0gMDsKLQlwYWcgPSAmbXAtPm1fcGVyYWdbYmUzMl90b19jcHUoYWdmLT5hZ2Zfc2Vxbm8pXTsKKworCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGJlMzJfdG9fY3B1KGFnZi0+YWdmX3NlcW5vKSk7CiAJYmUzMl9hZGRfY3B1KCZhZ2YtPmFnZl9mbGNvdW50LCAxKTsKIAl4ZnNfdHJhbnNfYWdmbGlzdF9kZWx0YSh0cCwgMSk7CiAJcGFnLT5wYWdmX2ZsY291bnQrKzsKQEAgLTIwODksNiArMjA5NCw3IEBACiAJCXBhZy0+cGFnZl9idHJlZWJsa3MtLTsKIAkJbG9nZmxhZ3MgfD0gWEZTX0FHRl9CVFJFRUJMS1M7CiAJfQorCXhmc19wZXJhZ19wdXQocGFnKTsKIAogCXhmc19hbGxvY19sb2dfYWdmKHRwLCBhZ2JwLCBsb2dmbGFncyk7CiAKQEAgLTIxNTIsNyArMjE1OCw2IEBACiAJCXhmc190cmFuc19icmVsc2UodHAsICpicHApOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiAJfQotCiAJWEZTX0JVRl9TRVRfVlRZUEVfUkVGKCpicHAsIEJfRlNfQUdGLCBYRlNfQUdGX1JFRik7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTc1LDcgKzIxODAsNyBAQAogCUFTU0VSVChhZ25vICE9IE5VTExBR05VTUJFUik7CiAKIAllcnJvciA9IHhmc19yZWFkX2FnZihtcCwgdHAsIGFnbm8sCi0JCQkoZmxhZ3MgJiBYRlNfQUxMT0NfRkxBR19UUllMT0NLKSA/IFhGU19CVUZfVFJZTE9DSyA6IDAsCisJCQkoZmxhZ3MgJiBYRlNfQUxMT0NfRkxBR19UUllMT0NLKSA/IFhCRl9UUllMT0NLIDogMCwKIAkJCWJwcCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CkBAIC0yMTg0LDcgKzIxODksNyBAQAogCUFTU0VSVCghWEZTX0JVRl9HRVRFUlJPUigqYnBwKSk7CiAKIAlhZ2YgPSBYRlNfQlVGX1RPX0FHRigqYnBwKTsKLQlwYWcgPSAmbXAtPm1fcGVyYWdbYWdub107CisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7CiAJaWYgKCFwYWctPnBhZ2ZfaW5pdCkgewogCQlwYWctPnBhZ2ZfZnJlZWJsa3MgPSBiZTMyX3RvX2NwdShhZ2YtPmFnZl9mcmVlYmxrcyk7CiAJCXBhZy0+cGFnZl9idHJlZWJsa3MgPSBiZTMyX3RvX2NwdShhZ2YtPmFnZl9idHJlZWJsa3MpOwpAQCAtMjE5NSw4ICsyMjAwLDggQEAKIAkJcGFnLT5wYWdmX2xldmVsc1tYRlNfQlROVU1fQ05UaV0gPQogCQkJYmUzMl90b19jcHUoYWdmLT5hZ2ZfbGV2ZWxzW1hGU19CVE5VTV9DTlRpXSk7CiAJCXNwaW5fbG9ja19pbml0KCZwYWctPnBhZ2JfbG9jayk7Ci0JCXBhZy0+cGFnYl9saXN0ID0ga21lbV96YWxsb2MoWEZTX1BBR0JfTlVNX1NMT1RTICoKLQkJCQkJc2l6ZW9mKHhmc19wZXJhZ19idXN5X3QpLCBLTV9TTEVFUCk7CisJCXBhZy0+cGFnYl9jb3VudCA9IDA7CisJCW1lbXNldChwYWctPnBhZ2JfbGlzdCwgMCwgc2l6ZW9mKHBhZy0+cGFnYl9saXN0KSk7CiAJCXBhZy0+cGFnZl9pbml0ID0gMTsKIAl9CiAjaWZkZWYgREVCVUcKQEAgLTIyMTEsNiArMjIxNiw3IEBACiAJCSAgICAgICBiZTMyX3RvX2NwdShhZ2YtPmFnZl9sZXZlbHNbWEZTX0JUTlVNX0NOVGldKSk7CiAJfQogI2VuZGlmCisJeGZzX3BlcmFnX3B1dChwYWcpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjcwLDggKzIyNzYsNyBAQAogCQkgKiBUaGVzZSB0aHJlZSBmb3JjZSB1cyBpbnRvIGEgc2luZ2xlIGEuZy4KIAkJICovCiAJCWFyZ3MtPmFnbm8gPSBYRlNfRlNCX1RPX0FHTk8obXAsIGFyZ3MtPmZzYm5vKTsKLQkJZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwotCQlhcmdzLT5wYWcgPSAmbXAtPm1fcGVyYWdbYXJncy0+YWdub107CisJCWFyZ3MtPnBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFyZ3MtPmFnbm8pOwogCQlhcmdzLT5taW5sZWZ0ID0gMDsKIAkJZXJyb3IgPSB4ZnNfYWxsb2NfZml4X2ZyZWVsaXN0KGFyZ3MsIDApOwogCQlhcmdzLT5taW5sZWZ0ID0gbWlubGVmdDsKQEAgLTIyODAsMTQgKzIyODUsMTIgQEAKIAkJCWdvdG8gZXJyb3IwOwogCQl9CiAJCWlmICghYXJncy0+YWdicCkgewotCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJCXRyYWNlX3hmc19hbGxvY192ZXh0ZW50X25vYWdicChhcmdzKTsKIAkJCWJyZWFrOwogCQl9CiAJCWFyZ3MtPmFnYm5vID0gWEZTX0ZTQl9UT19BR0JOTyhtcCwgYXJncy0+ZnNibm8pOwogCQlpZiAoKGVycm9yID0geGZzX2FsbG9jX2FnX3ZleHRlbnQoYXJncykpKQogCQkJZ290byBlcnJvcjA7Ci0JCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAJCWJyZWFrOwogCWNhc2UgWEZTX0FMTE9DVFlQRV9TVEFSVF9CTk86CiAJCS8qCkBAIC0yMzM5LDkgKzIzNDIsOCBAQAogCQkgKiBMb29wIG92ZXIgYWxsb2NhdGlvbiBncm91cHMgdHdpY2U7IGZpcnN0IHRpbWUgd2l0aAogCQkgKiB0cnlsb2NrIHNldCwgc2Vjb25kIHRpbWUgd2l0aG91dC4KIAkJICovCi0JCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJZm9yICg7OykgewotCQkJYXJncy0+cGFnID0gJm1wLT5tX3BlcmFnW2FyZ3MtPmFnbm9dOworCQkJYXJncy0+cGFnID0geGZzX3BlcmFnX2dldChtcCwgYXJncy0+YWdubyk7CiAJCQlpZiAobm9fbWluKSBhcmdzLT5taW5sZWZ0ID0gMDsKIAkJCWVycm9yID0geGZzX2FsbG9jX2ZpeF9mcmVlbGlzdChhcmdzLCBmbGFncyk7CiAJCQlhcmdzLT5taW5sZWZ0ID0gbWlubGVmdDsKQEAgLTI0MDAsOCArMjQwMiw4IEBACiAJCQkJCX0KIAkJCQl9CiAJCQl9CisJCQl4ZnNfcGVyYWdfcHV0KGFyZ3MtPnBhZyk7CiAJCX0KLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJaWYgKGJ1bXBfcm90b3IgfHwgKHR5cGUgPT0gWEZTX0FMTE9DVFlQRV9BTllfQUcpKSB7CiAJCQlpZiAoYXJncy0+YWdubyA9PSBzYWdubykKIAkJCQltcC0+bV9hZ2Zyb3RvciA9IChtcC0+bV9hZ2Zyb3RvciArIDEpICUKQEAgLTI0MjcsOSArMjQyOSwxMCBAQAogCQkJYXJncy0+bGVuKTsKICNlbmRpZgogCX0KKwl4ZnNfcGVyYWdfcHV0KGFyZ3MtPnBhZyk7CiAJcmV0dXJuIDA7CiBlcnJvcjA6Ci0JdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwl4ZnNfcGVyYWdfcHV0KGFyZ3MtPnBhZyk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0yNDU0LDggKzI0NTcsNyBAQAogCWFyZ3MuYWdubyA9IFhGU19GU0JfVE9fQUdOTyhhcmdzLm1wLCBibm8pOwogCUFTU0VSVChhcmdzLmFnbm8gPCBhcmdzLm1wLT5tX3NiLnNiX2FnY291bnQpOwogCWFyZ3MuYWdibm8gPSBYRlNfRlNCX1RPX0FHQk5PKGFyZ3MubXAsIGJubyk7Ci0JZG93bl9yZWFkKCZhcmdzLm1wLT5tX3BlcmFnbG9jayk7Ci0JYXJncy5wYWcgPSAmYXJncy5tcC0+bV9wZXJhZ1thcmdzLmFnbm9dOworCWFyZ3MucGFnID0geGZzX3BlcmFnX2dldChhcmdzLm1wLCBhcmdzLmFnbm8pOwogCWlmICgoZXJyb3IgPSB4ZnNfYWxsb2NfZml4X2ZyZWVsaXN0KCZhcmdzLCBYRlNfQUxMT0NfRkxBR19GUkVFSU5HKSkpCiAJCWdvdG8gZXJyb3IwOwogI2lmZGVmIERFQlVHCkBAIC0yNDY1LDcgKzI0NjcsNyBAQAogI2VuZGlmCiAJZXJyb3IgPSB4ZnNfZnJlZV9hZ19leHRlbnQodHAsIGFyZ3MuYWdicCwgYXJncy5hZ25vLCBhcmdzLmFnYm5vLCBsZW4sIDApOwogZXJyb3IwOgotCXVwX3JlYWQoJmFyZ3MubXAtPm1fcGVyYWdsb2NrKTsKKwl4ZnNfcGVyYWdfcHV0KGFyZ3MucGFnKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTI0ODYsMTUgKzI0ODgsMTUgQEAKIAkJICAgIHhmc19hZ2Jsb2NrX3QgYm5vLAogCQkgICAgeGZzX2V4dGxlbl90IGxlbikKIHsKLQl4ZnNfbW91bnRfdAkJKm1wOwogCXhmc19wZXJhZ19idXN5X3QJKmJzeTsKKwlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWc7CiAJaW50CQkJbjsKIAotCW1wID0gdHAtPnRfbW91bnRwOwotCXNwaW5fbG9jaygmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9sb2NrKTsKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KHRwLT50X21vdW50cCwgYWdubyk7CisJc3Bpbl9sb2NrKCZwYWctPnBhZ2JfbG9jayk7CiAKIAkvKiBzZWFyY2ggcGFnYl9saXN0IGZvciBhbiBvcGVuIHNsb3QgKi8KLQlmb3IgKGJzeSA9IG1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbGlzdCwgbiA9IDA7CisJZm9yIChic3kgPSBwYWctPnBhZ2JfbGlzdCwgbiA9IDA7CiAJICAgICBuIDwgWEZTX1BBR0JfTlVNX1NMT1RTOwogCSAgICAgYnN5KyssIG4rKykgewogCQlpZiAoYnN5LT5idXN5X3RwID09IE5VTEwpIHsKQEAgLTI1MDIsMTEgKzI1MDQsMTEgQEAKIAkJfQogCX0KIAotCXRyYWNlX3hmc19hbGxvY19idXN5KG1wLCBhZ25vLCBibm8sIGxlbiwgbik7CisJdHJhY2VfeGZzX2FsbG9jX2J1c3kodHAtPnRfbW91bnRwLCBhZ25vLCBibm8sIGxlbiwgbik7CiAKIAlpZiAobiA8IFhGU19QQUdCX05VTV9TTE9UUykgewotCQlic3kgPSAmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9saXN0W25dOwotCQltcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2NvdW50Kys7CisJCWJzeSA9ICZwYWctPnBhZ2JfbGlzdFtuXTsKKwkJcGFnLT5wYWdiX2NvdW50Kys7CiAJCWJzeS0+YnVzeV9zdGFydCA9IGJubzsKIAkJYnN5LT5idXN5X2xlbmd0aCA9IGxlbjsKIAkJYnN5LT5idXN5X3RwID0gdHA7CkBAIC0yNTIxLDcgKzI1MjMsOCBAQAogCQl4ZnNfdHJhbnNfc2V0X3N5bmModHApOwogCX0KIAotCXNwaW5fdW5sb2NrKCZtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xvY2spOworCXNwaW5fdW5sb2NrKCZwYWctPnBhZ2JfbG9jayk7CisJeGZzX3BlcmFnX3B1dChwYWcpOwogfQogCiB2b2lkCkBAIC0yNTI5LDI0ICsyNTMyLDIzIEBACiAJCSAgICAgeGZzX2FnbnVtYmVyX3QgYWdubywKIAkJICAgICBpbnQgaWR4KQogewotCXhmc19tb3VudF90CQkqbXA7CisJc3RydWN0IHhmc19wZXJhZwkqcGFnOwogCXhmc19wZXJhZ19idXN5X3QJKmxpc3Q7CiAKLQltcCA9IHRwLT50X21vdW50cDsKLQotCXNwaW5fbG9jaygmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9sb2NrKTsKLQlsaXN0ID0gbXAtPm1fcGVyYWdbYWdub10ucGFnYl9saXN0OwotCiAJQVNTRVJUKGlkeCA8IFhGU19QQUdCX05VTV9TTE9UUyk7CisJcGFnID0geGZzX3BlcmFnX2dldCh0cC0+dF9tb3VudHAsIGFnbm8pOworCXNwaW5fbG9jaygmcGFnLT5wYWdiX2xvY2spOworCWxpc3QgPSBwYWctPnBhZ2JfbGlzdDsKIAotCXRyYWNlX3hmc19hbGxvY191bmJ1c3kobXAsIGFnbm8sIGlkeCwgbGlzdFtpZHhdLmJ1c3lfdHAgPT0gdHApOworCXRyYWNlX3hmc19hbGxvY191bmJ1c3kodHAtPnRfbW91bnRwLCBhZ25vLCBpZHgsIGxpc3RbaWR4XS5idXN5X3RwID09IHRwKTsKIAogCWlmIChsaXN0W2lkeF0uYnVzeV90cCA9PSB0cCkgewogCQlsaXN0W2lkeF0uYnVzeV90cCA9IE5VTEw7Ci0JCW1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfY291bnQtLTsKKwkJcGFnLT5wYWdiX2NvdW50LS07CiAJfQogCi0Jc3Bpbl91bmxvY2soJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbG9jayk7CisJc3Bpbl91bmxvY2soJnBhZy0+cGFnYl9sb2NrKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiB9CiAKIApAQCAtMjU2MCwxNyArMjU2MiwxNSBAQAogCQkgICAgeGZzX2FnYmxvY2tfdCBibm8sCiAJCSAgICB4ZnNfZXh0bGVuX3QgbGVuKQogewotCXhmc19tb3VudF90CQkqbXA7CisJc3RydWN0IHhmc19wZXJhZwkqcGFnOwogCXhmc19wZXJhZ19idXN5X3QJKmJzeTsKIAl4ZnNfYWdibG9ja190CQl1ZW5kLCBiZW5kOwogCXhmc19sc25fdAkJbHNuID0gMDsKIAlpbnQJCQljbnQ7CiAKLQltcCA9IHRwLT50X21vdW50cDsKLQotCXNwaW5fbG9jaygmbXAtPm1fcGVyYWdbYWdub10ucGFnYl9sb2NrKTsKLQotCXVlbmQgPSBibm8gKyBsZW4gLSAxOworCXBhZyA9IHhmc19wZXJhZ19nZXQodHAtPnRfbW91bnRwLCBhZ25vKTsKKwlzcGluX2xvY2soJnBhZy0+cGFnYl9sb2NrKTsKKwljbnQgPSBwYWctPnBhZ2JfY291bnQ7CiAKIAkvKgogCSAqIHNlYXJjaCBwYWdiX2xpc3QgZm9yIHRoaXMgc2xvdCwgc2tpcHBpbmcgb3BlbiBzbG90cy4gV2UgaGF2ZSB0bwpAQCAtMjU3OCw4ICsyNTc4LDkgQEAKIAkgKiB3ZSBoYXZlIHRvIGdldCB0aGUgbW9zdCByZWNlbnQgTFNOIGZvciB0aGUgbG9nIGZvcmNlIHRvIHB1c2ggb3V0CiAJICogYWxsIHRoZSB0cmFuc2FjdGlvbnMgdGhhdCBzcGFuIHRoZSByYW5nZS4KIAkgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IG1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfY291bnQ7IGNudCsrKSB7Ci0JCWJzeSA9ICZtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xpc3RbY250XTsKKwl1ZW5kID0gYm5vICsgbGVuIC0gMTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IHBhZy0+cGFnYl9jb3VudDsgY250KyspIHsKKwkJYnN5ID0gJnBhZy0+cGFnYl9saXN0W2NudF07CiAJCWlmICghYnN5LT5idXN5X3RwKQogCQkJY29udGludWU7CiAKQEAgLTI1OTEsNyArMjU5Miw4IEBACiAJCWlmIChYRlNfTFNOX0NNUChic3ktPmJ1c3lfdHAtPnRfY29tbWl0X2xzbiwgbHNuKSA+IDApCiAJCQlsc24gPSBic3ktPmJ1c3lfdHAtPnRfY29tbWl0X2xzbjsKIAl9Ci0Jc3Bpbl91bmxvY2soJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2JfbG9jayk7CisJc3Bpbl91bmxvY2soJnBhZy0+cGFnYl9sb2NrKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJdHJhY2VfeGZzX2FsbG9jX2J1c3lzZWFyY2godHAtPnRfbW91bnRwLCBhZ25vLCBibm8sIGxlbiwgbHNuKTsKIAogCS8qCkBAIC0yNTk5LDUgKzI2MDEsNSBAQAogCSAqIHRyYW5zYWN0aW9uIHRoYXQgZnJlZWQgdGhlIGJsb2NrCiAJICovCiAJaWYgKGxzbikKLQkJeGZzX2xvZ19mb3JjZShtcCwgbHNuLCBYRlNfTE9HX0ZPUkNFfFhGU19MT0dfU1lOQyk7CisJCXhmc19sb2dfZm9yY2VfbHNuKHRwLT50X21vdW50cCwgbHNuLCBYRlNfTE9HX1NZTkMpOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hbGxvY19idHJlZS5jIGIvZnMveGZzL3hmc19hbGxvY19idHJlZS5jCmluZGV4IGFkYmQ5MTQuLmI3MjZlMTAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWxsb2NfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2FsbG9jX2J0cmVlLmMKQEAgLTYxLDEyICs2MSwxNCBAQAogCXN0cnVjdCB4ZnNfYWdmCQkqYWdmID0gWEZTX0JVRl9UT19BR0YoYWdicCk7CiAJeGZzX2FnbnVtYmVyX3QJCXNlcW5vID0gYmUzMl90b19jcHUoYWdmLT5hZ2Zfc2Vxbm8pOwogCWludAkJCWJ0bnVtID0gY3VyLT5iY19idG51bTsKKwlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWcgPSB4ZnNfcGVyYWdfZ2V0KGN1ci0+YmNfbXAsIHNlcW5vKTsKIAogCUFTU0VSVChwdHItPnMgIT0gMCk7CiAKIAlhZ2YtPmFnZl9yb290c1tidG51bV0gPSBwdHItPnM7CiAJYmUzMl9hZGRfY3B1KCZhZ2YtPmFnZl9sZXZlbHNbYnRudW1dLCBpbmMpOwotCWN1ci0+YmNfbXAtPm1fcGVyYWdbc2Vxbm9dLnBhZ2ZfbGV2ZWxzW2J0bnVtXSArPSBpbmM7CisJcGFnLT5wYWdmX2xldmVsc1tidG51bV0gKz0gaW5jOworCXhmc19wZXJhZ19wdXQocGFnKTsKIAogCXhmc19hbGxvY19sb2dfYWdmKGN1ci0+YmNfdHAsIGFnYnAsIFhGU19BR0ZfUk9PVFMgfCBYRlNfQUdGX0xFVkVMUyk7CiB9CkBAIC0xNTAsNiArMTUyLDcgQEAKIHsKIAlzdHJ1Y3QgeGZzX2FnZgkJKmFnZiA9IFhGU19CVUZfVE9fQUdGKGN1ci0+YmNfcHJpdmF0ZS5hLmFnYnApOwogCXhmc19hZ251bWJlcl90CQlzZXFubyA9IGJlMzJfdG9fY3B1KGFnZi0+YWdmX3NlcW5vKTsKKwlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWc7CiAJX19iZTMyCQkJbGVuOwogCWludAkJCW51bXJlY3M7CiAKQEAgLTE5Myw3ICsxOTYsOSBAQAogCX0KIAogCWFnZi0+YWdmX2xvbmdlc3QgPSBsZW47Ci0JY3VyLT5iY19tcC0+bV9wZXJhZ1tzZXFub10ucGFnZl9sb25nZXN0ID0gYmUzMl90b19jcHUobGVuKTsKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KGN1ci0+YmNfbXAsIHNlcW5vKTsKKwlwYWctPnBhZ2ZfbG9uZ2VzdCA9IGJlMzJfdG9fY3B1KGxlbik7CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCXhmc19hbGxvY19sb2dfYWdmKGN1ci0+YmNfdHAsIGN1ci0+YmNfcHJpdmF0ZS5hLmFnYnAsIFhGU19BR0ZfTE9OR0VTVCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYXR0ci5jIGIvZnMveGZzL3hmc19hdHRyLmMKaW5kZXggZTk1M2I2Y2YuLmI5YzE5NmEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYXR0ci5jCisrKyBiL2ZzL3hmcy94ZnNfYXR0ci5jCkBAIC05MywxMiArOTMsMTIgQEAKIFNUQVRJQyBpbnQKIHhmc19hdHRyX25hbWVfdG9feG5hbWUoCiAJc3RydWN0IHhmc19uYW1lCSp4bmFtZSwKLQljb25zdCBjaGFyCSphbmFtZSkKKwljb25zdCB1bnNpZ25lZCBjaGFyICphbmFtZSkKIHsKIAlpZiAoIWFuYW1lKQogCQlyZXR1cm4gRUlOVkFMOwogCXhuYW1lLT5uYW1lID0gYW5hbWU7Ci0JeG5hbWUtPmxlbiA9IHN0cmxlbihhbmFtZSk7CisJeG5hbWUtPmxlbiA9IHN0cmxlbigoY2hhciAqKWFuYW1lKTsKIAlpZiAoeG5hbWUtPmxlbiA+PSBNQVhOQU1FTEVOKQogCQlyZXR1cm4gRUZBVUxUOwkJLyogbWF0Y2ggSVJJWCBiZWhhdmlvdXIgKi8KIApAQCAtMTI0LDcgKzEyNCw3IEBACiB4ZnNfYXR0cl9nZXRfaW50KAogCXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAogCXN0cnVjdCB4ZnNfbmFtZQkJKm5hbWUsCi0JY2hhcgkJCSp2YWx1ZSwKKwl1bnNpZ25lZCBjaGFyCQkqdmFsdWUsCiAJaW50CQkJKnZhbHVlbGVucCwKIAlpbnQJCQlmbGFncykKIHsKQEAgLTE3MSw4ICsxNzEsOCBAQAogaW50CiB4ZnNfYXR0cl9nZXQoCiAJeGZzX2lub2RlX3QJKmlwLAotCWNvbnN0IGNoYXIJKm5hbWUsCi0JY2hhcgkJKnZhbHVlLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsCisJdW5zaWduZWQgY2hhcgkqdmFsdWUsCiAJaW50CQkqdmFsdWVsZW5wLAogCWludAkJZmxhZ3MpCiB7CkBAIC0xOTcsNyArMTk3LDcgQEAKIC8qCiAgKiBDYWxjdWxhdGUgaG93IG1hbnkgYmxvY2tzIHdlIG5lZWQgZm9yIHRoZSBuZXcgYXR0cmlidXRlLAogICovCi1pbnQKK1NUQVRJQyBpbnQKIHhmc19hdHRyX2NhbGNfc2l6ZSgKIAlzdHJ1Y3QgeGZzX2lub2RlIAkqaXAsCiAJaW50CQkJbmFtZWxlbiwKQEAgLTIzNSw4ICsyMzUsMTIgQEAKIH0KIAogU1RBVElDIGludAoteGZzX2F0dHJfc2V0X2ludCh4ZnNfaW5vZGVfdCAqZHAsIHN0cnVjdCB4ZnNfbmFtZSAqbmFtZSwKLQkJY2hhciAqdmFsdWUsIGludCB2YWx1ZWxlbiwgaW50IGZsYWdzKQoreGZzX2F0dHJfc2V0X2ludCgKKwlzdHJ1Y3QgeGZzX2lub2RlICpkcCwKKwlzdHJ1Y3QgeGZzX25hbWUJKm5hbWUsCisJdW5zaWduZWQgY2hhcgkqdmFsdWUsCisJaW50CQl2YWx1ZWxlbiwKKwlpbnQJCWZsYWdzKQogewogCXhmc19kYV9hcmdzX3QJYXJnczsKIAl4ZnNfZnNibG9ja190CWZpcnN0YmxvY2s7CkBAIC00NTIsOCArNDU2LDggQEAKIGludAogeGZzX2F0dHJfc2V0KAogCXhmc19pbm9kZV90CSpkcCwKLQljb25zdCBjaGFyCSpuYW1lLAotCWNoYXIJCSp2YWx1ZSwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAorCXVuc2lnbmVkIGNoYXIJKnZhbHVlLAogCWludAkJdmFsdWVsZW4sCiAJaW50CQlmbGFncykKIHsKQEAgLTYwMCw3ICs2MDQsNyBAQAogaW50CiB4ZnNfYXR0cl9yZW1vdmUoCiAJeGZzX2lub2RlX3QJKmRwLAotCWNvbnN0IGNoYXIJKm5hbWUsCisJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKIAlpbnQJCWZsYWdzKQogewogCWludAkJZXJyb3I7CkBAIC02NjksOSArNjczLDEzIEBACiAgKi8KIC8qQVJHU1VTRUQqLwogU1RBVElDIGludAoteGZzX2F0dHJfcHV0X2xpc3RlbnQoeGZzX2F0dHJfbGlzdF9jb250ZXh0X3QgKmNvbnRleHQsIGludCBmbGFncywKLQkJICAgICBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKLQkJICAgICBpbnQgdmFsdWVsZW4sIGNoYXIgKnZhbHVlKQoreGZzX2F0dHJfcHV0X2xpc3RlbnQoCisJeGZzX2F0dHJfbGlzdF9jb250ZXh0X3QgKmNvbnRleHQsCisJaW50CQlmbGFncywKKwl1bnNpZ25lZCBjaGFyCSpuYW1lLAorCWludAkJbmFtZWxlbiwKKwlpbnQJCXZhbHVlbGVuLAorCXVuc2lnbmVkIGNoYXIJKnZhbHVlKQogewogCXN0cnVjdCBhdHRybGlzdCAqYWxpc3QgPSAoc3RydWN0IGF0dHJsaXN0ICopY29udGV4dC0+YWxpc3Q7CiAJYXR0cmxpc3RfZW50X3QgKmFlcDsKQEAgLTE5ODAsNyArMTk4OCw3IEBACiAJeGZzX2JtYnRfaXJlY190IG1hcFtBVFRSX1JNVFZBTFVFX01BUFNJWkVdOwogCXhmc19tb3VudF90ICptcDsKIAl4ZnNfZGFkZHJfdCBkYmxrbm87Ci0JeGZzX2NhZGRyX3QgZHN0OworCXZvaWQgKmRzdDsKIAl4ZnNfYnVmX3QgKmJwOwogCWludCBubWFwLCBlcnJvciwgdG1wLCB2YWx1ZWxlbiwgYmxrY250LCBpOwogCXhmc19kYWJsa190IGxibGtubzsKQEAgLTIwMDcsMTUgKzIwMTUsMTQgQEAKIAkJCWRibGtubyA9IFhGU19GU0JfVE9fREFERFIobXAsIG1hcFtpXS5icl9zdGFydGJsb2NrKTsKIAkJCWJsa2NudCA9IFhGU19GU0JfVE9fQkIobXAsIG1hcFtpXS5icl9ibG9ja2NvdW50KTsKIAkJCWVycm9yID0geGZzX3JlYWRfYnVmKG1wLCBtcC0+bV9kZGV2X3RhcmdwLCBkYmxrbm8sCi0JCQkJCSAgICAgYmxrY250LAotCQkJCQkgICAgIFhGU19CVUZfTE9DSyB8IFhCRl9ET05UX0JMT0NLLAorCQkJCQkgICAgIGJsa2NudCwgWEJGX0xPQ0sgfCBYQkZfRE9OVF9CTE9DSywKIAkJCQkJICAgICAmYnApOwogCQkJaWYgKGVycm9yKQogCQkJCXJldHVybihlcnJvcik7CiAKIAkJCXRtcCA9ICh2YWx1ZWxlbiA8IFhGU19CVUZfU0laRShicCkpCiAJCQkJPyB2YWx1ZWxlbiA6IFhGU19CVUZfU0laRShicCk7Ci0JCQl4ZnNfYmlvbW92ZShicCwgMCwgdG1wLCBkc3QsIFhGU19CX1JFQUQpOworCQkJeGZzX2Jpb21vdmUoYnAsIDAsIHRtcCwgZHN0LCBYQkZfUkVBRCk7CiAJCQl4ZnNfYnVmX3JlbHNlKGJwKTsKIAkJCWRzdCArPSB0bXA7CiAJCQl2YWx1ZWxlbiAtPSB0bXA7CkBAIC0yMDM5LDcgKzIwNDYsNyBAQAogCXhmc19pbm9kZV90ICpkcDsKIAl4ZnNfYm1idF9pcmVjX3QgbWFwOwogCXhmc19kYWRkcl90IGRibGtubzsKLQl4ZnNfY2FkZHJfdCBzcmM7CisJdm9pZCAqc3JjOwogCXhmc19idWZfdCAqYnA7CiAJeGZzX2RhYmxrX3QgbGJsa25vOwogCWludCBibGtjbnQsIHZhbHVlbGVuLCBubWFwLCBlcnJvciwgdG1wLCBjb21taXR0ZWQ7CkBAIC0yMTQxLDEzICsyMTQ4LDEzIEBACiAJCWJsa2NudCA9IFhGU19GU0JfVE9fQkIobXAsIG1hcC5icl9ibG9ja2NvdW50KTsKIAogCQlicCA9IHhmc19idWZfZ2V0KG1wLT5tX2RkZXZfdGFyZ3AsIGRibGtubywgYmxrY250LAotCQkJCSBYRlNfQlVGX0xPQ0sgfCBYQkZfRE9OVF9CTE9DSyk7CisJCQkJIFhCRl9MT0NLIHwgWEJGX0RPTlRfQkxPQ0spOwogCQlBU1NFUlQoYnApOwogCQlBU1NFUlQoIVhGU19CVUZfR0VURVJST1IoYnApKTsKIAogCQl0bXAgPSAodmFsdWVsZW4gPCBYRlNfQlVGX1NJWkUoYnApKSA/IHZhbHVlbGVuIDoKIAkJCQkJCQlYRlNfQlVGX1NJWkUoYnApOwotCQl4ZnNfYmlvbW92ZShicCwgMCwgdG1wLCBzcmMsIFhGU19CX1dSSVRFKTsKKwkJeGZzX2Jpb21vdmUoYnAsIDAsIHRtcCwgc3JjLCBYQkZfV1JJVEUpOwogCQlpZiAodG1wIDwgWEZTX0JVRl9TSVpFKGJwKSkKIAkJCXhmc19iaW96ZXJvKGJwLCB0bXAsIFhGU19CVUZfU0laRShicCkgLSB0bXApOwogCQlpZiAoKGVycm9yID0geGZzX2J3cml0ZShtcCwgYnApKSkgey8qIEdST1Q6IE5PVEU6IHN5bmNocm9ub3VzIHdyaXRlICovCkBAIC0yMjA4LDggKzIyMTUsNyBAQAogCQkvKgogCQkgKiBJZiB0aGUgInJlbW90ZSIgdmFsdWUgaXMgaW4gdGhlIGNhY2hlLCByZW1vdmUgaXQuCiAJCSAqLwotCQlicCA9IHhmc19pbmNvcmUobXAtPm1fZGRldl90YXJncCwgZGJsa25vLCBibGtjbnQsCi0JCQkJWEZTX0lOQ09SRV9UUllMT0NLKTsKKwkJYnAgPSB4ZnNfaW5jb3JlKG1wLT5tX2RkZXZfdGFyZ3AsIGRibGtubywgYmxrY250LCBYQkZfVFJZTE9DSyk7CiAJCWlmIChicCkgewogCQkJWEZTX0JVRl9TVEFMRShicCk7CiAJCQlYRlNfQlVGX1VOREVMQVlXUklURShicCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHIuaCBiL2ZzL3hmcy94ZnNfYXR0ci5oCmluZGV4IDU5YjQxMGMuLmU5MjBkNjggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYXR0ci5oCisrKyBiL2ZzL3hmcy94ZnNfYXR0ci5oCkBAIC0xMTMsNyArMTEzLDcgQEAKIAogCiB0eXBlZGVmIGludCAoKnB1dF9saXN0ZW50X2Z1bmNfdCkoc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqLCBpbnQsCi0JCQkJICAgICAgY2hhciAqLCBpbnQsIGludCwgY2hhciAqKTsKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKik7CiAKIHR5cGVkZWYgc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCB7CiAJc3RydWN0IHhmc19pbm9kZQkJKmRwOwkJLyogaW5vZGUgKi8KQEAgLTEzOSw3ICsxMzksNiBAQAogLyoKICAqIE92ZXJhbGwgZXh0ZXJuYWwgaW50ZXJmYWNlIHJvdXRpbmVzLgogICovCi1pbnQgeGZzX2F0dHJfY2FsY19zaXplKHN0cnVjdCB4ZnNfaW5vZGUgKiwgaW50LCBpbnQsIGludCAqKTsKIGludCB4ZnNfYXR0cl9pbmFjdGl2ZShzdHJ1Y3QgeGZzX2lub2RlICpkcCk7CiBpbnQgeGZzX2F0dHJfcm10dmFsX2dldChzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MpOwogaW50IHhmc19hdHRyX2xpc3RfaW50KHN0cnVjdCB4ZnNfYXR0cl9saXN0X2NvbnRleHQgKik7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHJfbGVhZi5jIGIvZnMveGZzL3hmc19hdHRyX2xlYWYuYwppbmRleCBiYWY0MWI1Li5hOTBjZTc0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2F0dHJfbGVhZi5jCisrKyBiL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMKQEAgLTUyMSwxMSArNTIxLDExIEBACiAKIAlzZmUgPSAmc2YtPmxpc3RbMF07CiAJZm9yIChpID0gMDsgaSA8IHNmLT5oZHIuY291bnQ7IGkrKykgewotCQluYXJncy5uYW1lID0gKGNoYXIgKilzZmUtPm5hbWV2YWw7CisJCW5hcmdzLm5hbWUgPSBzZmUtPm5hbWV2YWw7CiAJCW5hcmdzLm5hbWVsZW4gPSBzZmUtPm5hbWVsZW47Ci0JCW5hcmdzLnZhbHVlID0gKGNoYXIgKikmc2ZlLT5uYW1ldmFsW25hcmdzLm5hbWVsZW5dOworCQluYXJncy52YWx1ZSA9ICZzZmUtPm5hbWV2YWxbbmFyZ3MubmFtZWxlbl07CiAJCW5hcmdzLnZhbHVlbGVuID0gc2ZlLT52YWx1ZWxlbjsKLQkJbmFyZ3MuaGFzaHZhbCA9IHhmc19kYV9oYXNobmFtZSgoY2hhciAqKXNmZS0+bmFtZXZhbCwKKwkJbmFyZ3MuaGFzaHZhbCA9IHhmc19kYV9oYXNobmFtZShzZmUtPm5hbWV2YWwsCiAJCQkJCQlzZmUtPm5hbWVsZW4pOwogCQluYXJncy5mbGFncyA9IFhGU19BVFRSX05TUF9PTkRJU0tfVE9fQVJHUyhzZmUtPmZsYWdzKTsKIAkJZXJyb3IgPSB4ZnNfYXR0cl9sZWFmX2xvb2t1cF9pbnQoYnAsICZuYXJncyk7IC8qIHNldCBhLT5pbmRleCAqLwpAQCAtNjEyLDEwICs2MTIsMTAgQEAKIAkJZm9yIChpID0gMCwgc2ZlID0gJnNmLT5saXN0WzBdOyBpIDwgc2YtPmhkci5jb3VudDsgaSsrKSB7CiAJCQllcnJvciA9IGNvbnRleHQtPnB1dF9saXN0ZW50KGNvbnRleHQsCiAJCQkJCSAgIHNmZS0+ZmxhZ3MsCi0JCQkJCSAgIChjaGFyICopc2ZlLT5uYW1ldmFsLAorCQkJCQkgICBzZmUtPm5hbWV2YWwsCiAJCQkJCSAgIChpbnQpc2ZlLT5uYW1lbGVuLAogCQkJCQkgICAoaW50KXNmZS0+dmFsdWVsZW4sCi0JCQkJCSAgIChjaGFyKikmc2ZlLT5uYW1ldmFsW3NmZS0+bmFtZWxlbl0pOworCQkJCQkgICAmc2ZlLT5uYW1ldmFsW3NmZS0+bmFtZWxlbl0pOwogCiAJCQkvKgogCQkJICogRWl0aGVyIHNlYXJjaCBjYWxsYmFjayBmaW5pc2hlZCBlYXJseSBvcgpAQCAtNjU5LDggKzY1OSw4IEBACiAJCX0KIAogCQlzYnAtPmVudG5vID0gaTsKLQkJc2JwLT5oYXNoID0geGZzX2RhX2hhc2huYW1lKChjaGFyICopc2ZlLT5uYW1ldmFsLCBzZmUtPm5hbWVsZW4pOwotCQlzYnAtPm5hbWUgPSAoY2hhciAqKXNmZS0+bmFtZXZhbDsKKwkJc2JwLT5oYXNoID0geGZzX2RhX2hhc2huYW1lKHNmZS0+bmFtZXZhbCwgc2ZlLT5uYW1lbGVuKTsKKwkJc2JwLT5uYW1lID0gc2ZlLT5uYW1ldmFsOwogCQlzYnAtPm5hbWVsZW4gPSBzZmUtPm5hbWVsZW47CiAJCS8qIFRoZXNlIGFyZSBieXRlcywgYW5kIGJvdGggb24tZGlzaywgZG9uJ3QgZW5kaWFuLWZsaXAgKi8KIAkJc2JwLT52YWx1ZWxlbiA9IHNmZS0+dmFsdWVsZW47CkBAIC04MTgsOSArODE4LDkgQEAKIAkJCWNvbnRpbnVlOwogCQlBU1NFUlQoZW50cnktPmZsYWdzICYgWEZTX0FUVFJfTE9DQUwpOwogCQluYW1lX2xvYyA9IHhmc19hdHRyX2xlYWZfbmFtZV9sb2NhbChsZWFmLCBpKTsKLQkJbmFyZ3MubmFtZSA9IChjaGFyICopbmFtZV9sb2MtPm5hbWV2YWw7CisJCW5hcmdzLm5hbWUgPSBuYW1lX2xvYy0+bmFtZXZhbDsKIAkJbmFyZ3MubmFtZWxlbiA9IG5hbWVfbG9jLT5uYW1lbGVuOwotCQluYXJncy52YWx1ZSA9IChjaGFyICopJm5hbWVfbG9jLT5uYW1ldmFsW25hcmdzLm5hbWVsZW5dOworCQluYXJncy52YWx1ZSA9ICZuYW1lX2xvYy0+bmFtZXZhbFtuYXJncy5uYW1lbGVuXTsKIAkJbmFyZ3MudmFsdWVsZW4gPSBiZTE2X3RvX2NwdShuYW1lX2xvYy0+dmFsdWVsZW4pOwogCQluYXJncy5oYXNodmFsID0gYmUzMl90b19jcHUoZW50cnktPmhhc2h2YWwpOwogCQluYXJncy5mbGFncyA9IFhGU19BVFRSX05TUF9PTkRJU0tfVE9fQVJHUyhlbnRyeS0+ZmxhZ3MpOwpAQCAtMjM3MCwxMCArMjM3MCwxMCBAQAogCiAJCQlyZXR2YWwgPSBjb250ZXh0LT5wdXRfbGlzdGVudChjb250ZXh0LAogCQkJCQkJZW50cnktPmZsYWdzLAotCQkJCQkJKGNoYXIgKiluYW1lX2xvYy0+bmFtZXZhbCwKKwkJCQkJCW5hbWVfbG9jLT5uYW1ldmFsLAogCQkJCQkJKGludCluYW1lX2xvYy0+bmFtZWxlbiwKIAkJCQkJCWJlMTZfdG9fY3B1KG5hbWVfbG9jLT52YWx1ZWxlbiksCi0JCQkJCQkoY2hhciAqKSZuYW1lX2xvYy0+bmFtZXZhbFtuYW1lX2xvYy0+bmFtZWxlbl0pOworCQkJCQkJJm5hbWVfbG9jLT5uYW1ldmFsW25hbWVfbG9jLT5uYW1lbGVuXSk7CiAJCQlpZiAocmV0dmFsKQogCQkJCXJldHVybiByZXR2YWw7CiAJCX0gZWxzZSB7CkBAIC0yMzk3LDE1ICsyMzk3LDE1IEBACiAJCQkJCXJldHVybiByZXR2YWw7CiAJCQkJcmV0dmFsID0gY29udGV4dC0+cHV0X2xpc3RlbnQoY29udGV4dCwKIAkJCQkJCWVudHJ5LT5mbGFncywKLQkJCQkJCShjaGFyICopbmFtZV9ybXQtPm5hbWUsCisJCQkJCQluYW1lX3JtdC0+bmFtZSwKIAkJCQkJCShpbnQpbmFtZV9ybXQtPm5hbWVsZW4sCiAJCQkJCQl2YWx1ZWxlbiwKLQkJCQkJCShjaGFyKilhcmdzLnZhbHVlKTsKKwkJCQkJCWFyZ3MudmFsdWUpOwogCQkJCWttZW1fZnJlZShhcmdzLnZhbHVlKTsKIAkJCX0gZWxzZSB7CiAJCQkJcmV0dmFsID0gY29udGV4dC0+cHV0X2xpc3RlbnQoY29udGV4dCwKIAkJCQkJCWVudHJ5LT5mbGFncywKLQkJCQkJCShjaGFyICopbmFtZV9ybXQtPm5hbWUsCisJCQkJCQluYW1lX3JtdC0+bmFtZSwKIAkJCQkJCShpbnQpbmFtZV9ybXQtPm5hbWVsZW4sCiAJCQkJCQl2YWx1ZWxlbiwKIAkJCQkJCU5VTEwpOwpAQCAtMjk1MCw3ICsyOTUwLDcgQEAKIAkJCQkJCW1hcC5icl9ibG9ja2NvdW50KTsKIAkJCWJwID0geGZzX3RyYW5zX2dldF9idWYoKnRyYW5zLAogCQkJCQlkcC0+aV9tb3VudC0+bV9kZGV2X3RhcmdwLAotCQkJCQlkYmxrbm8sIGRibGtjbnQsIFhGU19CVUZfTE9DSyk7CisJCQkJCWRibGtubywgZGJsa2NudCwgWEJGX0xPQ0spOwogCQkJeGZzX3RyYW5zX2JpbnZhbCgqdHJhbnMsIGJwKTsKIAkJCS8qCiAJCQkgKiBSb2xsIHRvIG5leHQgdHJhbnNhY3Rpb24uCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHJfc2YuaCBiL2ZzL3hmcy94ZnNfYXR0cl9zZi5oCmluZGV4IDc2YWI3YjAuLjkxOTc1NmUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYXR0cl9zZi5oCisrKyBiL2ZzL3hmcy94ZnNfYXR0cl9zZi5oCkBAIC01Miw3ICs1Miw3IEBACiAJX191aW50OF90CXZhbHVlbGVuOwkvKiBsZW5ndGggb2YgdmFsdWUgKi8KIAlfX3VpbnQ4X3QJZmxhZ3M7CQkvKiBmbGFncyBiaXRzIChzZWUgeGZzX2F0dHJfbGVhZi5oKSAqLwogCXhmc19kYWhhc2hfdAloYXNoOwkJLyogdGhpcyBlbnRyeSdzIGhhc2ggdmFsdWUgKi8KLQljaGFyCQkqbmFtZTsJCS8qIG5hbWUgdmFsdWUsIHBvaW50ZXIgaW50byBidWZmZXIgKi8KKwl1bnNpZ25lZCBjaGFyCSpuYW1lOwkJLyogbmFtZSB2YWx1ZSwgcG9pbnRlciBpbnRvIGJ1ZmZlciAqLwogfSB4ZnNfYXR0cl9zZl9zb3J0X3Q7CiAKICNkZWZpbmUgWEZTX0FUVFJfU0ZfRU5UU0laRV9CWU5BTUUobmxlbix2bGVuKQkvKiBzcGFjZSBuYW1lL3ZhbHVlIHVzZXMgKi8gXApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwLmMgYi9mcy94ZnMveGZzX2JtYXAuYwppbmRleCA5ODI1MWNkLi4xODY5ZmI5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXAuYworKysgYi9mcy94ZnMveGZzX2JtYXAuYwpAQCAtMjYyOSwxMyArMjYyOSwxMiBAQAogCQlpZiAoc3RhcnRhZyA9PSBOVUxMQUdOVU1CRVIpCiAJCQlzdGFydGFnID0gYWcgPSAwOwogCQlub3Rpbml0ID0gMDsKLQkJZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7CiAJCXdoaWxlIChibGVuIDwgYXAtPmFsZW4pIHsKLQkJCXBhZyA9ICZtcC0+bV9wZXJhZ1thZ107CiAJCQlpZiAoIXBhZy0+cGFnZl9pbml0ICYmCiAJCQkgICAgKGVycm9yID0geGZzX2FsbG9jX3BhZ2ZfaW5pdChtcCwgYXJncy50cCwKIAkJCQkgICAgYWcsIFhGU19BTExPQ19GTEFHX1RSWUxPQ0spKSkgewotCQkJCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJCQkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQkJCXJldHVybiBlcnJvcjsKIAkJCX0KIAkJCS8qCkBAIC0yNjY3LDEzICsyNjY2LDEzIEBACiAJCQkJCQlicmVhazsKIAogCQkJCQllcnJvciA9IHhmc19maWxlc3RyZWFtX25ld19hZyhhcCwgJmFnKTsKLQkJCQkJaWYgKGVycm9yKSB7Ci0JCQkJCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCQkJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CisJCQkJCWlmIChlcnJvcikKIAkJCQkJCXJldHVybiBlcnJvcjsKLQkJCQkJfQogCiAJCQkJCS8qIGxvb3AgYWdhaW4gdG8gc2V0ICdibGVuJyovCiAJCQkJCXN0YXJ0YWcgPSBOVUxMQUdOVU1CRVI7CisJCQkJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnKTsKIAkJCQkJY29udGludWU7CiAJCQkJfQogCQkJfQpAQCAtMjY4MSw4ICsyNjgwLDEwIEBACiAJCQkJYWcgPSAwOwogCQkJaWYgKGFnID09IHN0YXJ0YWcpCiAJCQkJYnJlYWs7CisJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CisJCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7CiAJCX0KLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQkvKgogCQkgKiBTaW5jZSB0aGUgYWJvdmUgbG9vcCBkaWQgYSBCVUZfVFJZTE9DSywgaXQgaXMKIAkJICogcG9zc2libGUgdGhhdCB0aGVyZSBpcyBzcGFjZSBmb3IgdGhpcyByZXF1ZXN0LgpAQCAtNDQ3MCw3ICs0NDcxLDcgQEAKIAl4ZnNfZnNibG9ja190CWFibm87CQkvKiBhbGxvY2F0ZWQgYmxvY2sgbnVtYmVyICovCiAJeGZzX2V4dGxlbl90CWFsZW47CQkvKiBhbGxvY2F0ZWQgZXh0ZW50IGxlbmd0aCAqLwogCXhmc19maWxlb2ZmX3QJYW9mZjsJCS8qIGFsbG9jYXRlZCBmaWxlIG9mZnNldCAqLwotCXhmc19ibWFsbG9jYV90CWJtYTsJCS8qIGFyZ3MgZm9yIHhmc19ibWFwX2FsbG9jICovCisJeGZzX2JtYWxsb2NhX3QJYm1hID0geyAwIH07CS8qIGFyZ3MgZm9yIHhmc19ibWFwX2FsbG9jICovCiAJeGZzX2J0cmVlX2N1cl90CSpjdXI7CQkvKiBibWFwIGJ0cmVlIGN1cnNvciAqLwogCXhmc19maWxlb2ZmX3QJZW5kOwkJLyogZW5kIG9mIG1hcHBlZCBmaWxlIHJlZ2lvbiAqLwogCWludAkJZW9mOwkJLyogd2UndmUgaGl0IHRoZSBlbmQgb2YgZXh0ZW50cyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwX2J0cmVlLmMgYi9mcy94ZnMveGZzX2JtYXBfYnRyZWUuYwppbmRleCAzODc1MWQ1Li40MTZlNDdlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXBfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2JtYXBfYnRyZWUuYwpAQCAtMzM0LDcgKzMzNCw3IEBACiAvKgogICogU2V0IGFsbCB0aGUgZmllbGRzIGluIGEgYm1hcCBleHRlbnQgcmVjb3JkIGZyb20gdGhlIHVuY29tcHJlc3NlZCBmb3JtLgogICovCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX2JtYnRfZGlza19zZXRfYWxsKAogCXhmc19ibWJ0X3JlY190CSpyLAogCXhmc19ibWJ0X2lyZWNfdCAqcykKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5oIGIvZnMveGZzL3hmc19ibWFwX2J0cmVlLmgKaW5kZXggY2YwN2NhNy4uMGU2NmM0ZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ibWFwX2J0cmVlLmgKKysrIGIvZnMveGZzL3hmc19ibWFwX2J0cmVlLmgKQEAgLTIyMyw3ICsyMjMsNiBAQAogZXh0ZXJuIHZvaWQgeGZzX2JtYnRfc2V0X3N0YXJ0b2ZmKHhmc19ibWJ0X3JlY19ob3N0X3QgKnIsIHhmc19maWxlb2ZmX3Qgdik7CiBleHRlcm4gdm9pZCB4ZnNfYm1idF9zZXRfc3RhdGUoeGZzX2JtYnRfcmVjX2hvc3RfdCAqciwgeGZzX2V4bnRzdF90IHYpOwogCi1leHRlcm4gdm9pZCB4ZnNfYm1idF9kaXNrX3NldF9hbGwoeGZzX2JtYnRfcmVjX3QgKnIsIHhmc19ibWJ0X2lyZWNfdCAqcyk7CiBleHRlcm4gdm9pZCB4ZnNfYm1idF9kaXNrX3NldF9hbGxmKHhmc19ibWJ0X3JlY190ICpyLCB4ZnNfZmlsZW9mZl90IG8sCiAJCQl4ZnNfZnNibG9ja190IGIsIHhmc19maWxibGtzX3QgYywgeGZzX2V4bnRzdF90IHYpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J0cmVlLmMgYi9mcy94ZnMveGZzX2J0cmVlLmMKaW5kZXggMzZhMDk5Mi4uOTZiZTRiMCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19idHJlZS5jCisrKyBiL2ZzL3hmcy94ZnNfYnRyZWUuYwpAQCAtOTc3LDcgKzk3Nyw3IEBACiAJeGZzX2RhZGRyX3QJCWQ7CiAKIAkvKiBuZWVkIHRvIHNvcnQgb3V0IGhvdyBjYWxsZXJzIGRlYWwgd2l0aCBmYWlsdXJlcyBmaXJzdCAqLwotCUFTU0VSVCghKGZsYWdzICYgWEZTX0JVRl9UUllMT0NLKSk7CisJQVNTRVJUKCEoZmxhZ3MgJiBYQkZfVFJZTE9DSykpOwogCiAJZCA9IHhmc19idHJlZV9wdHJfdG9fZGFkZHIoY3VyLCBwdHIpOwogCSpicHAgPSB4ZnNfdHJhbnNfZ2V0X2J1ZihjdXItPmJjX3RwLCBtcC0+bV9kZGV2X3RhcmdwLCBkLApAQCAtMTAwOCw3ICsxMDA4LDcgQEAKIAlpbnQJCQllcnJvcjsKIAogCS8qIG5lZWQgdG8gc29ydCBvdXQgaG93IGNhbGxlcnMgZGVhbCB3aXRoIGZhaWx1cmVzIGZpcnN0ICovCi0JQVNTRVJUKCEoZmxhZ3MgJiBYRlNfQlVGX1RSWUxPQ0spKTsKKwlBU1NFUlQoIShmbGFncyAmIFhCRl9UUllMT0NLKSk7CiAKIAlkID0geGZzX2J0cmVlX3B0cl90b19kYWRkcihjdXIsIHB0cik7CiAJZXJyb3IgPSB4ZnNfdHJhbnNfcmVhZF9idWYobXAsIGN1ci0+YmNfdHAsIG1wLT5tX2RkZXZfdGFyZ3AsIGQsCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmMgYi9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKaW5kZXggYTMwZjdlOS4uZjNjNDllNiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19idWZfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYwpAQCAtMjUwLDcgKzI1MCw3IEBACiAJCSAgICAgICAoKGJpcC0+YmxpX2Zvcm1hdC5ibGZfbWFwX3NpemUgLSAxKSAqIHNpemVvZih1aW50KSkpOwogCXZlY3AtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmYmlwLT5ibGlfZm9ybWF0OwogCXZlY3AtPmlfbGVuID0gYmFzZV9zaXplOwotCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfQkZPUk1BVCk7CisJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9CRk9STUFUOwogCXZlY3ArKzsKIAludmVjcyA9IDE7CiAKQEAgLTI5NywxNCArMjk3LDE0IEBACiAJCQlidWZmZXJfb2Zmc2V0ID0gZmlyc3RfYml0ICogWEZTX0JMSV9DSFVOSzsKIAkJCXZlY3AtPmlfYWRkciA9IHhmc19idWZfb2Zmc2V0KGJwLCBidWZmZXJfb2Zmc2V0KTsKIAkJCXZlY3AtPmlfbGVuID0gbmJpdHMgKiBYRlNfQkxJX0NIVU5LOwotCQkJWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9CQ0hVTkspOworCQkJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9CQ0hVTks7CiAJCQludmVjcysrOwogCQkJYnJlYWs7CiAJCX0gZWxzZSBpZiAobmV4dF9iaXQgIT0gbGFzdF9iaXQgKyAxKSB7CiAJCQlidWZmZXJfb2Zmc2V0ID0gZmlyc3RfYml0ICogWEZTX0JMSV9DSFVOSzsKIAkJCXZlY3AtPmlfYWRkciA9IHhmc19idWZfb2Zmc2V0KGJwLCBidWZmZXJfb2Zmc2V0KTsKIAkJCXZlY3AtPmlfbGVuID0gbmJpdHMgKiBYRlNfQkxJX0NIVU5LOwotCQkJWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9CQ0hVTkspOworCQkJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9CQ0hVTks7CiAJCQludmVjcysrOwogCQkJdmVjcCsrOwogCQkJZmlyc3RfYml0ID0gbmV4dF9iaXQ7CkBAIC0zMTYsNyArMzE2LDcgQEAKIAkJCWJ1ZmZlcl9vZmZzZXQgPSBmaXJzdF9iaXQgKiBYRlNfQkxJX0NIVU5LOwogCQkJdmVjcC0+aV9hZGRyID0geGZzX2J1Zl9vZmZzZXQoYnAsIGJ1ZmZlcl9vZmZzZXQpOwogCQkJdmVjcC0+aV9sZW4gPSBuYml0cyAqIFhGU19CTElfQ0hVTks7Ci0JCQlYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCBYTE9HX1JFR19UWVBFX0JDSFVOSyk7CisJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0JDSFVOSzsKIC8qIFlvdSB3b3VsZCB0aGluayB3ZSBuZWVkIHRvIGJ1bXAgdGhlIG52ZWNzIGhlcmUgdG9vLCBidXQgd2UgZG8gbm90CiAgKiB0aGlzIG51bWJlciBpcyB1c2VkIGJ5IHJlY292ZXJ5LCBhbmQgaXQgZ2V0cyBjb25mdXNlZCBieSB0aGUgYm91bmRhcnkKICAqIHNwbGl0IGhlcmUKQEAgLTQ2Nyw4ICs0NjcsMTAgQEAKIC8qCiAgKiBUaGlzIGlzIGNhbGxlZCB0byBhdHRlbXB0IHRvIGxvY2sgdGhlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhpcwogICogYnVmIGxvZyBpdGVtLiAgRG9uJ3Qgc2xlZXAgb24gdGhlIGJ1ZmZlciBsb2NrLiAgSWYgd2UgY2FuJ3QgZ2V0Ci0gKiB0aGUgbG9jayByaWdodCBhd2F5LCByZXR1cm4gMC4gIElmIHdlIGNhbiBnZXQgdGhlIGxvY2ssIHB1bGwgdGhlCi0gKiBidWZmZXIgZnJvbSB0aGUgZnJlZSBsaXN0LCBtYXJrIGl0IGJ1c3ksIGFuZCByZXR1cm4gMS4KKyAqIHRoZSBsb2NrIHJpZ2h0IGF3YXksIHJldHVybiAwLiAgSWYgd2UgY2FuIGdldCB0aGUgbG9jaywgdGFrZSBhCisgKiByZWZlcmVuY2UgdG8gdGhlIGJ1ZmZlci4gSWYgdGhpcyBpcyBhIGRlbGF5ZWQgd3JpdGUgYnVmZmVyIHRoYXQKKyAqIG5lZWRzIEFJTCBoZWxwIHRvIGJlIHdyaXR0ZW4gYmFjaywgaW52b2tlIHRoZSBwdXNoYnVmIHJvdXRpbmUKKyAqIHJhdGhlciB0aGFuIHRoZSBub3JtYWwgc3VjY2VzcyBwYXRoLgogICovCiBTVEFUSUMgdWludAogeGZzX2J1Zl9pdGVtX3RyeWxvY2soCkBAIC00NzcsMjQgKzQ3OSwxOCBAQAogCXhmc19idWZfdAkqYnA7CiAKIAlicCA9IGJpcC0+YmxpX2J1ZjsKLQotCWlmIChYRlNfQlVGX0lTUElOTkVEKGJwKSkgeworCWlmIChYRlNfQlVGX0lTUElOTkVEKGJwKSkKIAkJcmV0dXJuIFhGU19JVEVNX1BJTk5FRDsKLQl9Ci0KLQlpZiAoIVhGU19CVUZfQ1BTRU1BKGJwKSkgeworCWlmICghWEZTX0JVRl9DUFNFTUEoYnApKQogCQlyZXR1cm4gWEZTX0lURU1fTE9DS0VEOwotCX0KIAotCS8qCi0JICogUmVtb3ZlIHRoZSBidWZmZXIgZnJvbSB0aGUgZnJlZSBsaXN0LiAgT25seSBkbyB0aGlzCi0JICogaWYgaXQncyBvbiB0aGUgZnJlZSBsaXN0LiAgUHJpdmF0ZSBidWZmZXJzIGxpa2UgdGhlCi0JICogc3VwZXJibG9jayBidWZmZXIgYXJlIG5vdC4KLQkgKi8KKwkvKiB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZSBidWZmZXIuICAqLwogCVhGU19CVUZfSE9MRChicCk7CiAKIAlBU1NFUlQoIShiaXAtPmJsaV9mbGFncyAmIFhGU19CTElfU1RBTEUpKTsKIAl0cmFjZV94ZnNfYnVmX2l0ZW1fdHJ5bG9jayhiaXApOworCWlmIChYRlNfQlVGX0lTREVMQVlXUklURShicCkpCisJCXJldHVybiBYRlNfSVRFTV9QVVNIQlVGOwogCXJldHVybiBYRlNfSVRFTV9TVUNDRVNTOwogfQogCkBAIC02MjYsMTEgKzYyMiw5IEBACiB9CiAKIC8qCi0gKiBUaGlzIGlzIGNhbGxlZCB0byBhc3luY2hyb25vdXNseSB3cml0ZSB0aGUgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gKiBidWYgbG9nIGl0ZW0gb3V0IHRvIGRpc2suIFRoZSBidWZmZXIgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBsb2NrZWQgYnkKLSAqIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvIHhmc19idWZfaXRlbV90cnlsb2NrKCkuICBJZiB0aGUgYnVmZmVyIHN0aWxsIGhhcwotICogQl9ERUxXUkkgc2V0LCB0aGVuIGdldCBpdCBnb2luZyBvdXQgdG8gZGlzayB3aXRoIGEgY2FsbCB0byBiYXdyaXRlKCkuCi0gKiBJZiBub3QsIHRoZW4ganVzdCByZWxlYXNlIHRoZSBidWZmZXIuCisgKiBUaGUgYnVmZmVyIGlzIGxvY2tlZCwgYnV0IGlzIG5vdCBhIGRlbGF5ZWQgd3JpdGUgYnVmZmVyLiBUaGlzIGhhcHBlbnMKKyAqIGlmIHdlIHJhY2Ugd2l0aCBJTyBjb21wbGV0aW9uIGFuZCBoZW5jZSB3ZSBkb24ndCB3YW50IHRvIHRyeSB0byB3cml0ZSBpdAorICogYWdhaW4uIEp1c3QgcmVsZWFzZSB0aGUgYnVmZmVyLgogICovCiBTVEFUSUMgdm9pZAogeGZzX2J1Zl9pdGVtX3B1c2goCkBAIC02NDIsMTcgKzYzNiwyOSBAQAogCXRyYWNlX3hmc19idWZfaXRlbV9wdXNoKGJpcCk7CiAKIAlicCA9IGJpcC0+YmxpX2J1ZjsKKwlBU1NFUlQoIVhGU19CVUZfSVNERUxBWVdSSVRFKGJwKSk7CisJeGZzX2J1Zl9yZWxzZShicCk7Cit9CiAKLQlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKSB7Ci0JCWludAllcnJvcjsKLQkJZXJyb3IgPSB4ZnNfYmF3cml0ZShiaXAtPmJsaV9pdGVtLmxpX21vdW50cCwgYnApOwotCQlpZiAoZXJyb3IpCi0JCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBiaXAtPmJsaV9pdGVtLmxpX21vdW50cCwKLQkJCSJ4ZnNfYnVmX2l0ZW1fcHVzaDogcHVzaGJ1ZiBlcnJvciAlZCBvbiBiaXAgJXAsIGJwICVwIiwKLQkJCQkJZXJyb3IsIGJpcCwgYnApOwotCX0gZWxzZSB7Ci0JCXhmc19idWZfcmVsc2UoYnApOwotCX0KKy8qCisgKiBUaGUgYnVmZmVyIGlzIGxvY2tlZCBhbmQgaXMgYSBkZWxheWVkIHdyaXRlIGJ1ZmZlci4gUHJvbW90ZSB0aGUgYnVmZmVyCisgKiBpbiB0aGUgZGVsYXllZCB3cml0ZSBxdWV1ZSBhcyB0aGUgY2FsbGVyIGtub3dzIHRoYXQgdGhleSBtdXN0IGludm9rZQorICogdGhlIHhmc2J1ZmQgdG8gZ2V0IHRoaXMgYnVmZmVyIHdyaXR0ZW4uIFdlIGhhdmUgdG8gdW5sb2NrIHRoZSBidWZmZXIKKyAqIHRvIGFsbG93IHRoZSB4ZnNidWZkIHRvIHdyaXRlIGl0LCB0b28uCisgKi8KK1NUQVRJQyB2b2lkCit4ZnNfYnVmX2l0ZW1fcHVzaGJ1ZigKKwl4ZnNfYnVmX2xvZ19pdGVtX3QJKmJpcCkKK3sKKwl4ZnNfYnVmX3QJKmJwOworCisJQVNTRVJUKCEoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX1NUQUxFKSk7CisJdHJhY2VfeGZzX2J1Zl9pdGVtX3B1c2hidWYoYmlwKTsKKworCWJwID0gYmlwLT5ibGlfYnVmOworCUFTU0VSVChYRlNfQlVGX0lTREVMQVlXUklURShicCkpOworCXhmc19idWZfZGVsd3JpX3Byb21vdGUoYnApOworCXhmc19idWZfcmVsc2UoYnApOwogfQogCiAvKiBBUkdTVVNFRCAqLwpAQCAtNjc3LDcgKzY4Myw3IEBACiAJLmlvcF9jb21taXR0ZWQJPSAoeGZzX2xzbl90KCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xzbl90KSkKIAkJCQkJeGZzX2J1Zl9pdGVtX2NvbW1pdHRlZCwKIAkuaW9wX3B1c2gJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19idWZfaXRlbV9wdXNoLAotCS5pb3BfcHVzaGJ1Zgk9IE5VTEwsCisJLmlvcF9wdXNoYnVmCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfYnVmX2l0ZW1fcHVzaGJ1ZiwKIAkuaW9wX2NvbW1pdHRpbmcgPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCosIHhmc19sc25fdCkpCiAJCQkJCXhmc19idWZfaXRlbV9jb21taXR0aW5nCiB9OwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kYV9idHJlZS5jIGIvZnMveGZzL3hmc19kYV9idHJlZS5jCmluZGV4IGMwYzg4NjkuLjBjYTU1NmIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2RhX2J0cmVlLmMKQEAgLTE1MzQsOCArMTUzNCw4IEBACiBlbnVtIHhmc19kYWNtcAogeGZzX2RhX2NvbXBuYW1lKAogCXN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywKLQljb25zdCBjaGFyIAkqbmFtZSwKLQlpbnQgCQlsZW4pCisJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKKwlpbnQJCWxlbikKIHsKIAlyZXR1cm4gKGFyZ3MtPm5hbWVsZW4gPT0gbGVuICYmIG1lbWNtcChhcmdzLT5uYW1lLCBuYW1lLCBsZW4pID09IDApID8KIAkJCQkJWEZTX0NNUF9FWEFDVCA6IFhGU19DTVBfRElGRkVSRU5UOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kYV9idHJlZS5oIGIvZnMveGZzL3hmc19kYV9idHJlZS5oCmluZGV4IDMwY2QwOGYuLmZlOWY1YTggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGFfYnRyZWUuaAorKysgYi9mcy94ZnMveGZzX2RhX2J0cmVlLmgKQEAgLTIwOSw3ICsyMDksOCBAQAogICovCiBzdHJ1Y3QgeGZzX25hbWVvcHMgewogCXhmc19kYWhhc2hfdAkoKmhhc2huYW1lKShzdHJ1Y3QgeGZzX25hbWUgKik7Ci0JZW51bSB4ZnNfZGFjbXAJKCpjb21wbmFtZSkoc3RydWN0IHhmc19kYV9hcmdzICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKwllbnVtIHhmc19kYWNtcAkoKmNvbXBuYW1lKShzdHJ1Y3QgeGZzX2RhX2FyZ3MgKiwKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqLCBpbnQpOwogfTsKIAogCkBAIC0yNjAsNyArMjYxLDcgQEAKIAogdWludCB4ZnNfZGFfaGFzaG5hbWUoY29uc3QgX191aW50OF90ICpuYW1lX3N0cmluZywgaW50IG5hbWVfbGVuZ3RoKTsKIGVudW0geGZzX2RhY21wIHhmc19kYV9jb21wbmFtZShzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsCi0JCQkJY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbik7CisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwgaW50IGxlbik7CiAKIAogeGZzX2RhX3N0YXRlX3QgKnhmc19kYV9zdGF0ZV9hbGxvYyh2b2lkKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGZyYWcuYyBiL2ZzL3hmcy94ZnNfZGZyYWcuYwppbmRleCA4NGNhMWNmLi5jZDI3YzlkIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RmcmFnLmMKKysrIGIvZnMveGZzL3hmc19kZnJhZy5jCkBAIC00NSwxNSArNDUsMjEgQEAKICNpbmNsdWRlICJ4ZnNfdm5vZGVvcHMuaCIKICNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAorCitzdGF0aWMgaW50IHhmc19zd2FwX2V4dGVudHMoCisJeGZzX2lub2RlX3QJKmlwLAkvKiB0YXJnZXQgaW5vZGUgKi8KKwl4ZnNfaW5vZGVfdAkqdGlwLAkvKiB0bXAgaW5vZGUgKi8KKwl4ZnNfc3dhcGV4dF90CSpzeHApOworCiAvKgotICogU3lzc2dpIGludGVyZmFjZSBmb3Igc3dhcGV4dAorICogaW9jdGwgaW50ZXJmYWNlIGZvciBzd2FwZXh0CiAgKi8KIGludAogeGZzX3N3YXBleHQoCiAJeGZzX3N3YXBleHRfdAkqc3hwKQogewogCXhmc19pbm9kZV90ICAgICAqaXAsICp0aXA7Ci0Jc3RydWN0IGZpbGUJKmZpbGUsICp0YXJnZXRfZmlsZTsKKwlzdHJ1Y3QgZmlsZQkqZmlsZSwgKnRtcF9maWxlOwogCWludAkJZXJyb3IgPSAwOwogCiAJLyogUHVsbCBpbmZvcm1hdGlvbiBmb3IgdGhlIHRhcmdldCBmZCAqLwpAQCAtNjgsNDYgKzc0LDQ2IEBACiAJCWdvdG8gb3V0X3B1dF9maWxlOwogCX0KIAotCXRhcmdldF9maWxlID0gZmdldCgoaW50KXN4cC0+c3hfZmR0bXApOwotCWlmICghdGFyZ2V0X2ZpbGUpIHsKKwl0bXBfZmlsZSA9IGZnZXQoKGludClzeHAtPnN4X2ZkdG1wKTsKKwlpZiAoIXRtcF9maWxlKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVJTlZBTCk7CiAJCWdvdG8gb3V0X3B1dF9maWxlOwogCX0KIAotCWlmICghKHRhcmdldF9maWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgfHwKLQkgICAgKHRhcmdldF9maWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpKSB7CisJaWYgKCEodG1wX2ZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB8fAorCSAgICAodG1wX2ZpbGUtPmZfZmxhZ3MgJiBPX0FQUEVORCkpIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUJBREYpOwotCQlnb3RvIG91dF9wdXRfdGFyZ2V0X2ZpbGU7CisJCWdvdG8gb3V0X3B1dF90bXBfZmlsZTsKIAl9CiAKIAlpZiAoSVNfU1dBUEZJTEUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkgfHwKLQkgICAgSVNfU1dBUEZJTEUodGFyZ2V0X2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKSB7CisJICAgIElTX1NXQVBGSUxFKHRtcF9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSkgewogCQllcnJvciA9IFhGU19FUlJPUihFSU5WQUwpOwotCQlnb3RvIG91dF9wdXRfdGFyZ2V0X2ZpbGU7CisJCWdvdG8gb3V0X3B1dF90bXBfZmlsZTsKIAl9CiAKIAlpcCA9IFhGU19JKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwotCXRpcCA9IFhGU19JKHRhcmdldF9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwl0aXAgPSBYRlNfSSh0bXBfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAKIAlpZiAoaXAtPmlfbW91bnQgIT0gdGlwLT5pX21vdW50KSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVJTlZBTCk7Ci0JCWdvdG8gb3V0X3B1dF90YXJnZXRfZmlsZTsKKwkJZ290byBvdXRfcHV0X3RtcF9maWxlOwogCX0KIAogCWlmIChpcC0+aV9pbm8gPT0gdGlwLT5pX2lubykgewogCQllcnJvciA9IFhGU19FUlJPUihFSU5WQUwpOwotCQlnb3RvIG91dF9wdXRfdGFyZ2V0X2ZpbGU7CisJCWdvdG8gb3V0X3B1dF90bXBfZmlsZTsKIAl9CiAKIAlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihpcC0+aV9tb3VudCkpIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUlPKTsKLQkJZ290byBvdXRfcHV0X3RhcmdldF9maWxlOworCQlnb3RvIG91dF9wdXRfdG1wX2ZpbGU7CiAJfQogCiAJZXJyb3IgPSB4ZnNfc3dhcF9leHRlbnRzKGlwLCB0aXAsIHN4cCk7CiAKLSBvdXRfcHV0X3RhcmdldF9maWxlOgotCWZwdXQodGFyZ2V0X2ZpbGUpOworIG91dF9wdXRfdG1wX2ZpbGU6CisJZnB1dCh0bXBfZmlsZSk7CiAgb3V0X3B1dF9maWxlOgogCWZwdXQoZmlsZSk7CiAgb3V0OgpAQCAtMTg2LDcgKzE5Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludAorc3RhdGljIGludAogeGZzX3N3YXBfZXh0ZW50cygKIAl4ZnNfaW5vZGVfdAkqaXAsCS8qIHRhcmdldCBpbm9kZSAqLwogCXhmc19pbm9kZV90CSp0aXAsCS8qIHRtcCBpbm9kZSAqLwpAQCAtMjU0LDYgKzI2MCw5IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKKwl0cmFjZV94ZnNfc3dhcF9leHRlbnRfYmVmb3JlKGlwLCAwKTsKKwl0cmFjZV94ZnNfc3dhcF9leHRlbnRfYmVmb3JlKHRpcCwgMSk7CisKIAkvKiBjaGVjayBpbm9kZSBmb3JtYXRzIG5vdyB0aGF0IGRhdGEgaXMgZmx1c2hlZCAqLwogCWVycm9yID0geGZzX3N3YXBfZXh0ZW50c19jaGVja19mb3JtYXQoaXAsIHRpcCk7CiAJaWYgKGVycm9yKSB7CkBAIC00MjEsNiArNDMwLDggQEAKIAogCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1NXQVBFWFQpOwogCisJdHJhY2VfeGZzX3N3YXBfZXh0ZW50X2FmdGVyKGlwLCAwKTsKKwl0cmFjZV94ZnNfc3dhcF9leHRlbnRfYWZ0ZXIodGlwLCAxKTsKIG91dDoKIAlrbWVtX2ZyZWUodGVtcGlmcCk7CiAJcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kZnJhZy5oIGIvZnMveGZzL3hmc19kZnJhZy5oCmluZGV4IDRmNTVhNjMuLjIwYmRkOTMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGZyYWcuaAorKysgYi9mcy94ZnMveGZzX2RmcmFnLmgKQEAgLTQ4LDkgKzQ4LDYgQEAKICAqLwogaW50CXhmc19zd2FwZXh0KHN0cnVjdCB4ZnNfc3dhcGV4dCAqc3gpOwogCi1pbnQJeGZzX3N3YXBfZXh0ZW50cyhzdHJ1Y3QgeGZzX2lub2RlICppcCwgc3RydWN0IHhmc19pbm9kZSAqdGlwLAotCQlzdHJ1Y3QgeGZzX3N3YXBleHQgKnN4cCk7Ci0KICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZgkvKiBfX1hGU19ERlJBR19IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMi5jIGIvZnMveGZzL3hmc19kaXIyLmMKaW5kZXggOTM2MzRhNy4uNDI1MjBmMCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyLmMKKysrIGIvZnMveGZzL3hmc19kaXIyLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlICJ4ZnNfdm5vZGVvcHMuaCIKICNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAotc3RydWN0IHhmc19uYW1lIHhmc19uYW1lX2RvdGRvdCA9IHsiLi4iLCAyfTsKK3N0cnVjdCB4ZnNfbmFtZSB4ZnNfbmFtZV9kb3Rkb3QgPSB7ICh1bnNpZ25lZCBjaGFyICopIi4uIiwgMn07CiAKIC8qCiAgKiBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIChpZS4gQS1aKSBzdXBwb3J0IGZvciBkaXJlY3RvcmllcyB0aGF0IHdhcwpAQCAtNjYsOCArNjYsOCBAQAogU1RBVElDIGVudW0geGZzX2RhY21wCiB4ZnNfYXNjaWlfY2lfY29tcG5hbWUoCiAJc3RydWN0IHhmc19kYV9hcmdzICphcmdzLAotCWNvbnN0IGNoYXIJKm5hbWUsCi0JaW50IAkJbGVuKQorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsCisJaW50CQlsZW4pCiB7CiAJZW51bSB4ZnNfZGFjbXAJcmVzdWx0OwogCWludAkJaTsKQEAgLTI0Nyw3ICsyNDcsNyBAQAogaW50CiB4ZnNfZGlyX2NpbG9va3VwX3Jlc3VsdCgKIAlzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsCi0JY29uc3QgY2hhcgkqbmFtZSwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAogCWludAkJbGVuKQogewogCWlmIChhcmdzLT5jbXByZXN1bHQgPT0gWEZTX0NNUF9ESUZGRVJFTlQpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjIuaCBiL2ZzL3hmcy94ZnNfZGlyMi5oCmluZGV4IDFkOWVmOTYuLjc0YTNiMTAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMi5oCisrKyBiL2ZzL3hmcy94ZnNfZGlyMi5oCkBAIC0xMDAsNyArMTAwLDcgQEAKIGV4dGVybiBpbnQgeGZzX2RpcjJfc2hyaW5rX2lub2RlKHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywgeGZzX2RpcjJfZGJfdCBkYiwKIAkJCQlzdHJ1Y3QgeGZzX2RhYnVmICpicCk7CiAKLWV4dGVybiBpbnQgeGZzX2Rpcl9jaWxvb2t1cF9yZXN1bHQoc3RydWN0IHhmc19kYV9hcmdzICphcmdzLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCWludCBsZW4pOworZXh0ZXJuIGludCB4ZnNfZGlyX2NpbG9va3VwX3Jlc3VsdChzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwgaW50IGxlbik7CiAKICNlbmRpZgkvKiBfX1hGU19ESVIyX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmMgYi9mcy94ZnMveGZzX2RpcjJfYmxvY2suYwppbmRleCBkZGM0ZWNjLi43NzlhMjY3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfYmxvY2suYworKysgYi9mcy94ZnMveGZzX2RpcjJfYmxvY2suYwpAQCAtNTcsOCArNTcsOCBAQAogdm9pZAogeGZzX2Rpcl9zdGFydHVwKHZvaWQpCiB7Ci0JeGZzX2Rpcl9oYXNoX2RvdCA9IHhmc19kYV9oYXNobmFtZSgiLiIsIDEpOwotCXhmc19kaXJfaGFzaF9kb3Rkb3QgPSB4ZnNfZGFfaGFzaG5hbWUoIi4uIiwgMik7CisJeGZzX2Rpcl9oYXNoX2RvdCA9IHhmc19kYV9oYXNobmFtZSgodW5zaWduZWQgY2hhciAqKSIuIiwgMSk7CisJeGZzX2Rpcl9oYXNoX2RvdGRvdCA9IHhmc19kYV9oYXNobmFtZSgodW5zaWduZWQgY2hhciAqKSIuLiIsIDIpOwogfQogCiAvKgpAQCAtNTEzLDggKzUxMyw5IEBACiAJCS8qCiAJCSAqIElmIGl0IGRpZG4ndCBmaXQsIHNldCB0aGUgZmluYWwgb2Zmc2V0IHRvIGhlcmUgJiByZXR1cm4uCiAJCSAqLwotCQlpZiAoZmlsbGRpcihkaXJlbnQsIGRlcC0+bmFtZSwgZGVwLT5uYW1lbGVuLCBjb29rICYgMHg3ZmZmZmZmZiwKLQkJCSAgICBiZTY0X3RvX2NwdShkZXAtPmludW1iZXIpLCBEVF9VTktOT1dOKSkgeworCQlpZiAoZmlsbGRpcihkaXJlbnQsIChjaGFyICopZGVwLT5uYW1lLCBkZXAtPm5hbWVsZW4sCisJCQkgICAgY29vayAmIDB4N2ZmZmZmZmYsIGJlNjRfdG9fY3B1KGRlcC0+aW51bWJlciksCisJCQkgICAgRFRfVU5LTk9XTikpIHsKIAkJCSpvZmZzZXQgPSBjb29rICYgMHg3ZmZmZmZmZjsKIAkJCXhmc19kYV9icmVsc2UoTlVMTCwgYnApOwogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfbGVhZi5jIGIvZnMveGZzL3hmc19kaXIyX2xlYWYuYwppbmRleCAyOWY0ODRjLi5lMmQ4OTg1IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKQEAgLTEwODEsNyArMTA4MSw3IEBACiAJCWRlcCA9ICh4ZnNfZGlyMl9kYXRhX2VudHJ5X3QgKilwdHI7CiAJCWxlbmd0aCA9IHhmc19kaXIyX2RhdGFfZW50c2l6ZShkZXAtPm5hbWVsZW4pOwogCi0JCWlmIChmaWxsZGlyKGRpcmVudCwgZGVwLT5uYW1lLCBkZXAtPm5hbWVsZW4sCisJCWlmIChmaWxsZGlyKGRpcmVudCwgKGNoYXIgKilkZXAtPm5hbWUsIGRlcC0+bmFtZWxlbiwKIAkJCSAgICB4ZnNfZGlyMl9ieXRlX3RvX2RhdGFwdHIobXAsIGN1cm9mZikgJiAweDdmZmZmZmZmLAogCQkJICAgIGJlNjRfdG9fY3B1KGRlcC0+aW51bWJlciksIERUX1VOS05PV04pKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfbm9kZS5jIGIvZnMveGZzL3hmc19kaXIyX25vZGUuYwppbmRleCBjZTZlMzU1Li43OGZjNGQ5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMKQEAgLTY1LDcgKzY1LDcgQEAKIC8qCiAgKiBMb2cgZW50cmllcyBmcm9tIGEgZnJlZXNwYWNlIGJsb2NrLgogICovCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX2RpcjJfZnJlZV9sb2dfYmVzdHMoCiAJeGZzX3RyYW5zX3QJCSp0cCwJCS8qIHRyYW5zYWN0aW9uIHBvaW50ZXIgKi8KIAl4ZnNfZGFidWZfdAkJKmJwLAkJLyogZnJlZXNwYWNlIGJ1ZmZlciAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX25vZGUuaCBiL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmgKaW5kZXggZGRlNzJkYi4uODJkZmU3MSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX25vZGUuaAorKysgYi9mcy94ZnMveGZzX2RpcjJfbm9kZS5oCkBAIC03NSw4ICs3NSw2IEBACiAJcmV0dXJuICgoZGIpICUgWEZTX0RJUjJfTUFYX0ZSRUVfQkVTVFMobXApKTsKIH0KIAotZXh0ZXJuIHZvaWQgeGZzX2RpcjJfZnJlZV9sb2dfYmVzdHMoc3RydWN0IHhmc190cmFucyAqdHAsIHN0cnVjdCB4ZnNfZGFidWYgKmJwLAotCQkJCSAgICBpbnQgZmlyc3QsIGludCBsYXN0KTsKIGV4dGVybiBpbnQgeGZzX2RpcjJfbGVhZl90b19ub2RlKHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywKIAkJCQkgc3RydWN0IHhmc19kYWJ1ZiAqbGJwKTsKIGV4dGVybiB4ZnNfZGFoYXNoX3QgeGZzX2RpcjJfbGVhZm5fbGFzdGhhc2goc3RydWN0IHhmc19kYWJ1ZiAqYnAsIGludCAqY291bnQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX3NmLmMgYi9mcy94ZnMveGZzX2RpcjJfc2YuYwppbmRleCA5ZDRmMTdhLi5jMWE1OTQ1IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfc2YuYworKysgYi9mcy94ZnMveGZzX2RpcjJfc2YuYwpAQCAtNzgyLDcgKzc4Miw3IEBACiAJCX0KIAogCQlpbm8gPSB4ZnNfZGlyMl9zZl9nZXRfaW51bWJlcihzZnAsIHhmc19kaXIyX3NmX2ludW1iZXJwKHNmZXApKTsKLQkJaWYgKGZpbGxkaXIoZGlyZW50LCBzZmVwLT5uYW1lLCBzZmVwLT5uYW1lbGVuLAorCQlpZiAoZmlsbGRpcihkaXJlbnQsIChjaGFyICopc2ZlcC0+bmFtZSwgc2ZlcC0+bmFtZWxlbiwKIAkJCSAgICBvZmYgJiAweDdmZmZmZmZmLCBpbm8sIERUX1VOS05PV04pKSB7CiAJCQkqb2Zmc2V0ID0gb2ZmICYgMHg3ZmZmZmZmZjsKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMKaW5kZXggMDVhNGJkZC4uNmYzNWVkMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYworKysgYi9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jCkBAIC04Miw3ICs4Miw3IEBACiAKIAlsb2dfdmVjdG9yLT5pX2FkZHIgPSAoeGZzX2NhZGRyX3QpJihlZmlwLT5lZmlfZm9ybWF0KTsKIAlsb2dfdmVjdG9yLT5pX2xlbiA9IHNpemU7Ci0JWExPR19WRUNfU0VUX1RZUEUobG9nX3ZlY3RvciwgWExPR19SRUdfVFlQRV9FRklfRk9STUFUKTsKKwlsb2dfdmVjdG9yLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0VGSV9GT1JNQVQ7CiAJQVNTRVJUKHNpemUgPj0gc2l6ZW9mKHhmc19lZmlfbG9nX2Zvcm1hdF90KSk7CiB9CiAKQEAgLTQwNiw3ICs0MDYsNyBAQAogCiAJbG9nX3ZlY3Rvci0+aV9hZGRyID0gKHhmc19jYWRkcl90KSYoZWZkcC0+ZWZkX2Zvcm1hdCk7CiAJbG9nX3ZlY3Rvci0+aV9sZW4gPSBzaXplOwotCVhMT0dfVkVDX1NFVF9UWVBFKGxvZ192ZWN0b3IsIFhMT0dfUkVHX1RZUEVfRUZEX0ZPUk1BVCk7CisJbG9nX3ZlY3Rvci0+aV90eXBlID0gWExPR19SRUdfVFlQRV9FRkRfRk9STUFUOwogCUFTU0VSVChzaXplID49IHNpemVvZih4ZnNfZWZkX2xvZ19mb3JtYXRfdCkpOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYyBiL2ZzL3hmcy94ZnNfZmlsZXN0cmVhbS5jCmluZGV4IGE2MzFlMTQuLjM5MDg1MGUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZmlsZXN0cmVhbS5jCisrKyBiL2ZzL3hmcy94ZnNfZmlsZXN0cmVhbS5jCkBAIC0xNDAsNiArMTQwLDcgQEAKIAlpbnQJCWZsYWdzLAogCXhmc19leHRsZW5fdAltaW5sZW4pCiB7CisJaW50CQlzdHJlYW1zLCBtYXhfc3RyZWFtczsKIAlpbnQJCWVyciwgdHJ5bG9jaywgbnNjYW47CiAJeGZzX2V4dGxlbl90CWxvbmdlc3QsIGZyZWUsIG1pbmZyZWUsIG1heGZyZWUgPSAwOwogCXhmc19hZ251bWJlcl90CWFnLCBtYXhfYWcgPSBOVUxMQUdOVU1CRVI7CkBAIC0xNTUsMTUgKzE1NiwxNSBAQAogCXRyeWxvY2sgPSBYRlNfQUxMT0NfRkxBR19UUllMT0NLOwogCiAJZm9yIChuc2NhbiA9IDA7IDE7IG5zY2FuKyspIHsKLQotCQlUUkFDRV9BR19TQ0FOKG1wLCBhZywgeGZzX2ZpbGVzdHJlYW1fcGVla19hZyhtcCwgYWcpKTsKLQotCQlwYWcgPSBtcC0+bV9wZXJhZyArIGFnOworCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7CisJCVRSQUNFX0FHX1NDQU4obXAsIGFnLCBhdG9taWNfcmVhZCgmcGFnLT5wYWdmX2ZzdHJtcykpOwogCiAJCWlmICghcGFnLT5wYWdmX2luaXQpIHsKIAkJCWVyciA9IHhmc19hbGxvY19wYWdmX2luaXQobXAsIE5VTEwsIGFnLCB0cnlsb2NrKTsKLQkJCWlmIChlcnIgJiYgIXRyeWxvY2spCisJCQlpZiAoZXJyICYmICF0cnlsb2NrKSB7CisJCQkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQkJCXJldHVybiBlcnI7CisJCQl9CiAJCX0KIAogCQkvKiBNaWdodCBmYWlsIHNvbWV0aW1lcyBkdXJpbmcgdGhlIDFzdCBwYXNzIHdpdGggdHJ5bG9jayBzZXQuICovCkBAIC0xNzMsNiArMTc0LDcgQEAKIAkJLyogS2VlcCB0cmFjayBvZiB0aGUgQUcgd2l0aCB0aGUgbW9zdCBmcmVlIGJsb2Nrcy4gKi8KIAkJaWYgKHBhZy0+cGFnZl9mcmVlYmxrcyA+IG1heGZyZWUpIHsKIAkJCW1heGZyZWUgPSBwYWctPnBhZ2ZfZnJlZWJsa3M7CisJCQltYXhfc3RyZWFtcyA9IGF0b21pY19yZWFkKCZwYWctPnBhZ2ZfZnN0cm1zKTsKIAkJCW1heF9hZyA9IGFnOwogCQl9CiAKQEAgLTE5NSw2ICsxOTcsOCBAQAogCiAJCQkvKiBCcmVhayBvdXQsIHJldGFpbmluZyB0aGUgcmVmZXJlbmNlIG9uIHRoZSBBRy4gKi8KIAkJCWZyZWUgPSBwYWctPnBhZ2ZfZnJlZWJsa3M7CisJCQlzdHJlYW1zID0gYXRvbWljX3JlYWQoJnBhZy0+cGFnZl9mc3RybXMpOworCQkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQkJKmFncCA9IGFnOwogCQkJYnJlYWs7CiAJCX0KQEAgLTIwMiw2ICsyMDYsNyBAQAogCQkvKiBEcm9wIHRoZSByZWZlcmVuY2Ugb24gdGhpcyBBRywgaXQncyBub3QgdXNhYmxlLiAqLwogCQl4ZnNfZmlsZXN0cmVhbV9wdXRfYWcobXAsIGFnKTsKIG5leHRfYWc6CisJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJLyogTW92ZSB0byB0aGUgbmV4dCBBRywgd3JhcHBpbmcgdG8gQUcgMCBpZiBuZWNlc3NhcnkuICovCiAJCWlmICgrK2FnID49IG1wLT5tX3NiLnNiX2FnY291bnQpCiAJCQlhZyA9IDA7CkBAIC0yMjksNiArMjM0LDcgQEAKIAkJaWYgKG1heF9hZyAhPSBOVUxMQUdOVU1CRVIpIHsKIAkJCXhmc19maWxlc3RyZWFtX2dldF9hZyhtcCwgbWF4X2FnKTsKIAkJCVRSQUNFX0FHX1BJQ0sxKG1wLCBtYXhfYWcsIG1heGZyZWUpOworCQkJc3RyZWFtcyA9IG1heF9zdHJlYW1zOwogCQkJZnJlZSA9IG1heGZyZWU7CiAJCQkqYWdwID0gbWF4X2FnOwogCQkJYnJlYWs7CkBAIC0yNDAsMTYgKzI0NiwxNCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlUUkFDRV9BR19QSUNLMihtcCwgc3RhcnRhZywgKmFncCwgeGZzX2ZpbGVzdHJlYW1fcGVla19hZyhtcCwgKmFncCksCi0JCQlmcmVlLCBuc2NhbiwgZmxhZ3MpOworCVRSQUNFX0FHX1BJQ0syKG1wLCBzdGFydGFnLCAqYWdwLCBzdHJlYW1zLCBmcmVlLCBuc2NhbiwgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBTZXQgdGhlIGFsbG9jYXRpb24gZ3JvdXAgbnVtYmVyIGZvciBhIGZpbGUgb3IgYSBkaXJlY3RvcnksIHVwZGF0aW5nIGlub2RlCi0gKiByZWZlcmVuY2VzIGFuZCBwZXItQUcgcmVmZXJlbmNlcyBhcyBhcHByb3ByaWF0ZS4gIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlCi0gKiBtX3BlcmFnbG9jayBoZWxkIGluIHJlYWQgbW9kZS4KKyAqIHJlZmVyZW5jZXMgYW5kIHBlci1BRyByZWZlcmVuY2VzIGFzIGFwcHJvcHJpYXRlLgogICovCiBzdGF0aWMgaW50CiBfeGZzX2ZpbGVzdHJlYW1fdXBkYXRlX2FnKApAQCAtNDUxLDIwICs0NTUsNiBAQAogfQogCiAvKgotICogSWYgdGhlIG1vdW50IHBvaW50J3MgbV9wZXJhZyBhcnJheSBpcyBnb2luZyB0byBiZSByZWFsbG9jYXRlZCwgYWxsCi0gKiBvdXRzdGFuZGluZyBjYWNoZSBlbnRyaWVzIG11c3QgYmUgZmx1c2hlZCB0byBhdm9pZCBhY2Nlc3NpbmcgcmVmZXJlbmNlIGNvdW50Ci0gKiBhZGRyZXNzZXMgdGhhdCBoYXZlIGJlZW4gZnJlZWQuICBUaGUgY2FsbCB0byB4ZnNfZmlsZXN0cmVhbV9mbHVzaCgpIG11c3QgYmUKLSAqIG1hZGUgaW5zaWRlIHRoZSBibG9jayB0aGF0IGhvbGRzIHRoZSBtX3BlcmFnbG9jayBpbiB3cml0ZSBtb2RlIHRvIGRvIHRoZQotICogcmVhbGxvY2F0aW9uLgotICovCi12b2lkCi14ZnNfZmlsZXN0cmVhbV9mbHVzaCgKLQl4ZnNfbW91bnRfdAkqbXApCi17Ci0JeGZzX21ydV9jYWNoZV9mbHVzaChtcC0+bV9maWxlc3RyZWFtKTsKLX0KLQotLyoKICAqIFJldHVybiB0aGUgQUcgb2YgdGhlIGZpbGVzdHJlYW0gdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGJlbG9uZ3MgdG8sIG9yCiAgKiBOVUxMQUdOVU1CRVIgb3RoZXJ3aXNlLgogICovCkBAIC01MjYsNyArNTE2LDYgQEAKIAogCW1wID0gcGlwLT5pX21vdW50OwogCWNhY2hlID0gbXAtPm1fZmlsZXN0cmVhbTsKLQlkb3duX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAKIAkvKgogCSAqIFdlIGhhdmUgYSBwcm9ibGVtLCBIb3VzdG9uLgpAQCAtNTQzLDEwICs1MzIsOCBAQAogCSAqCiAJICogU28sIGlmIHdlIGNhbid0IGdldCB0aGUgaW9sb2NrIHdpdGhvdXQgc2xlZXBpbmcgdGhlbiBqdXN0IGdpdmUgdXAKIAkgKi8KLQlpZiAoIXhmc19pbG9ja19ub3dhaXQocGlwLCBYRlNfSU9MT0NLX0VYQ0wpKSB7Ci0JCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJaWYgKCF4ZnNfaWxvY2tfbm93YWl0KHBpcCwgWEZTX0lPTE9DS19FWENMKSkKIAkJcmV0dXJuIDE7Ci0JfQogCiAJLyogSWYgdGhlIHBhcmVudCBkaXJlY3RvcnkgaXMgYWxyZWFkeSBpbiB0aGUgY2FjaGUsIHVzZSBpdHMgQUcuICovCiAJaXRlbSA9IHhmc19tcnVfY2FjaGVfbG9va3VwKGNhY2hlLCBwaXAtPmlfaW5vKTsKQEAgLTYwMSw3ICs1ODgsNiBAQAogCiBleGl0OgogCXhmc19pdW5sb2NrKHBpcCwgWEZTX0lPTE9DS19FWENMKTsKLQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCXJldHVybiAtZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uaCBiL2ZzL3hmcy94ZnNfZmlsZXN0cmVhbS5oCmluZGV4IDRhYmE2N2MuLjI2MGY3NTcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZmlsZXN0cmVhbS5oCisrKyBiL2ZzL3hmcy94ZnNfZmlsZXN0cmVhbS5oCkBAIC03OSwxMiArNzksMjEgQEAKICAqIHRoZSBjYWNoZSB0aGF0IHJlZmVyZW5jZSBwZXItYWcgYXJyYXkgZWxlbWVudHMgdGhhdCBoYXZlIHNpbmNlIGJlZW4KICAqIHJlYWxsb2NhdGVkLgogICovCisvKgorICogeGZzX2ZpbGVzdHJlYW1fcGVla19hZyBpcyBvbmx5IHVzZWQgaW4gdHJhY2luZyBjb2RlCisgKi8KIHN0YXRpYyBpbmxpbmUgaW50CiB4ZnNfZmlsZXN0cmVhbV9wZWVrX2FnKAogCXhmc19tb3VudF90CSptcCwKIAl4ZnNfYWdudW1iZXJfdAlhZ25vKQogewotCXJldHVybiBhdG9taWNfcmVhZCgmbXAtPm1fcGVyYWdbYWdub10ucGFnZl9mc3RybXMpOworCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZzsKKwlpbnQJCXJldDsKKworCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnbm8pOworCXJldCA9IGF0b21pY19yZWFkKCZwYWctPnBhZ2ZfZnN0cm1zKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKQEAgLTkyLDcgKzEwMSwxMyBAQAogCXhmc19tb3VudF90CSptcCwKIAl4ZnNfYWdudW1iZXJfdAlhZ25vKQogewotCXJldHVybiBhdG9taWNfaW5jX3JldHVybigmbXAtPm1fcGVyYWdbYWdub10ucGFnZl9mc3RybXMpOworCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZzsKKwlpbnQJCXJldDsKKworCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnbm8pOworCXJldCA9IGF0b21pY19pbmNfcmV0dXJuKCZwYWctPnBhZ2ZfZnN0cm1zKTsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKQEAgLTEwMCw3ICsxMTUsMTMgQEAKIAl4ZnNfbW91bnRfdAkqbXAsCiAJeGZzX2FnbnVtYmVyX3QJYWdubykKIHsKLQlyZXR1cm4gYXRvbWljX2RlY19yZXR1cm4oJm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2ZfZnN0cm1zKTsKKwlzdHJ1Y3QgeGZzX3BlcmFnICpwYWc7CisJaW50CQlyZXQ7CisKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKKwlyZXQgPSBhdG9taWNfZGVjX3JldHVybigmcGFnLT5wYWdmX2ZzdHJtcyk7CisJeGZzX3BlcmFnX3B1dChwYWcpOworCXJldHVybiByZXQ7CiB9CiAKIC8qIGFsbG9jYXRpb24gc2VsZWN0aW9uIGZsYWdzICovCkBAIC0xMTQsNyArMTM1LDYgQEAKIHZvaWQgeGZzX2ZpbGVzdHJlYW1fdW5pbml0KHZvaWQpOwogaW50IHhmc19maWxlc3RyZWFtX21vdW50KHN0cnVjdCB4ZnNfbW91bnQgKm1wKTsKIHZvaWQgeGZzX2ZpbGVzdHJlYW1fdW5tb3VudChzdHJ1Y3QgeGZzX21vdW50ICptcCk7Ci12b2lkIHhmc19maWxlc3RyZWFtX2ZsdXNoKHN0cnVjdCB4ZnNfbW91bnQgKm1wKTsKIHhmc19hZ251bWJlcl90IHhmc19maWxlc3RyZWFtX2xvb2t1cF9hZyhzdHJ1Y3QgeGZzX2lub2RlICppcCk7CiBpbnQgeGZzX2ZpbGVzdHJlYW1fYXNzb2NpYXRlKHN0cnVjdCB4ZnNfaW5vZGUgKmRpcCwgc3RydWN0IHhmc19pbm9kZSAqaXApOwogdm9pZCB4ZnNfZmlsZXN0cmVhbV9kZWFzc29jaWF0ZShzdHJ1Y3QgeGZzX2lub2RlICppcCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2Zzb3BzLmMgYi9mcy94ZnMveGZzX2Zzb3BzLmMKaW5kZXggYTEzOTE5YS4uMzdhNmY2MiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19mc29wcy5jCisrKyBiL2ZzL3hmcy94ZnNfZnNvcHMuYwpAQCAtMTY3LDI3ICsxNjcsMTQgQEAKIAl9CiAJbmV3ID0gbmIgLSBtcC0+bV9zYi5zYl9kYmxvY2tzOwogCW9hZ2NvdW50ID0gbXAtPm1fc2Iuc2JfYWdjb3VudDsKKworCS8qIGFsbG9jYXRlIHRoZSBuZXcgcGVyLWFnIHN0cnVjdHVyZXMgKi8KIAlpZiAobmFnY291bnQgPiBvYWdjb3VudCkgewotCQl2b2lkICpuZXdfcGVyYWcsICpvbGRfcGVyYWc7Ci0KLQkJeGZzX2ZpbGVzdHJlYW1fZmx1c2gobXApOwotCi0JCW5ld19wZXJhZyA9IGttZW1femFsbG9jKHNpemVvZih4ZnNfcGVyYWdfdCkgKiBuYWdjb3VudCwKLQkJCQkJS01fTUFZRkFJTCk7Ci0JCWlmICghbmV3X3BlcmFnKQotCQkJcmV0dXJuIFhGU19FUlJPUihFTk9NRU0pOwotCi0JCWRvd25fd3JpdGUoJm1wLT5tX3BlcmFnbG9jayk7Ci0JCW1lbWNweShuZXdfcGVyYWcsIG1wLT5tX3BlcmFnLCBzaXplb2YoeGZzX3BlcmFnX3QpICogb2FnY291bnQpOwotCQlvbGRfcGVyYWcgPSBtcC0+bV9wZXJhZzsKLQkJbXAtPm1fcGVyYWcgPSBuZXdfcGVyYWc7Ci0KLQkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UXzMyQklUSU5PREVTOwotCQluYWdpbWF4ID0geGZzX2luaXRpYWxpemVfcGVyYWcobXAsIG5hZ2NvdW50KTsKLQkJdXBfd3JpdGUoJm1wLT5tX3BlcmFnbG9jayk7Ci0KLQkJa21lbV9mcmVlKG9sZF9wZXJhZyk7CisJCWVycm9yID0geGZzX2luaXRpYWxpemVfcGVyYWcobXAsIG5hZ2NvdW50LCAmbmFnaW1heCk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKIAl9CisKIAl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX0dST1dGUyk7CiAJdHAtPnRfZmxhZ3MgfD0gWEZTX1RSQU5TX1JFU0VSVkU7CiAJaWYgKChlcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCBYRlNfR1JPV0ZTX1NQQUNFX1JFUyhtcCksCkBAIC0xOTYsNiArMTgzLDExIEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAKKwkvKgorCSAqIFdyaXRlIG5ldyBBRyBoZWFkZXJzIHRvIGRpc2suIE5vbi10cmFuc2FjdGlvbmFsLCBidXQgd3JpdHRlbgorCSAqIHN5bmNocm9ub3VzbHkgc28gdGhleSBhcmUgY29tcGxldGVkIHByaW9yIHRvIHRoZSBncm93ZnMgdHJhbnNhY3Rpb24KKwkgKiBiZWluZyBsb2dnZWQuCisJICovCiAJbmZyZWUgPSAwOwogCWZvciAoYWdubyA9IG5hZ2NvdW50IC0gMTsgYWdubyA+PSBvYWdjb3VudDsgYWduby0tLCBuZXcgLT0gYWdzaXplKSB7CiAJCS8qCkBAIC0zNTksNiArMzUxLDEyIEBACiAJCQlnb3RvIGVycm9yMDsKIAkJfQogCX0KKworCS8qCisJICogVXBkYXRlIGNoYW5nZWQgc3VwZXJibG9jayBmaWVsZHMgdHJhbnNhY3Rpb25hbGx5LiBUaGVzZSBhcmUgbm90CisJICogc2VlbiBieSB0aGUgcmVzdCBvZiB0aGUgd29ybGQgdW50aWwgdGhlIHRyYW5zYWN0aW9uIGNvbW1pdCBhcHBsaWVzCisJICogdGhlbSBhdG9taWNhbGx5IHRvIHRoZSBzdXBlcmJsb2NrLgorCSAqLwogCWlmIChuYWdjb3VudCA+IG9hZ2NvdW50KQogCQl4ZnNfdHJhbnNfbW9kX3NiKHRwLCBYRlNfVFJBTlNfU0JfQUdDT1VOVCwgbmFnY291bnQgLSBvYWdjb3VudCk7CiAJaWYgKG5iID4gbXAtPm1fc2Iuc2JfZGJsb2NrcykKQEAgLTM2OSw5ICszNjcsOSBAQAogCWlmIChkcGN0KQogCQl4ZnNfdHJhbnNfbW9kX3NiKHRwLCBYRlNfVFJBTlNfU0JfSU1BWFBDVCwgZHBjdCk7CiAJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKLQlpZiAoZXJyb3IpIHsKKwlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKLQl9CisKIAkvKiBOZXcgYWxsb2NhdGlvbiBncm91cHMgZnVsbHkgaW5pdGlhbGl6ZWQsIHNvIHVwZGF0ZSBtb3VudCBzdHJ1Y3QgKi8KIAlpZiAobmFnaW1heCkKIAkJbXAtPm1fbWF4YWdpID0gbmFnaW1heDsKQEAgLTM4MSw2ICszNzksOCBAQAogCQltcC0+bV9tYXhpY291bnQgPSBpY291bnQgPDwgbXAtPm1fc2Iuc2JfaW5vcGJsb2c7CiAJfSBlbHNlCiAJCW1wLT5tX21heGljb3VudCA9IDA7CisKKwkvKiB1cGRhdGUgc2Vjb25kYXJ5IHN1cGVyYmxvY2tzLiAqLwogCWZvciAoYWdubyA9IDE7IGFnbm8gPCBuYWdjb3VudDsgYWdubysrKSB7CiAJCWVycm9yID0geGZzX3JlYWRfYnVmKG1wLCBtcC0+bV9kZGV2X3RhcmdwLAogCQkJCSAgWEZTX0FHQl9UT19EQUREUihtcCwgYWdubywgWEZTX1NCX0JMT0NLKG1wKSksCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lhbGxvYy5jIGIvZnMveGZzL3hmc19pYWxsb2MuYwppbmRleCBjYjkwN2JhLi45ZDg4NGMxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lhbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfaWFsbG9jLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCQlkID0gWEZTX0FHQl9UT19EQUREUihtcCwgYWdubywgYWdibm8gKyAoaiAqIGJsa3NfcGVyX2NsdXN0ZXIpKTsKIAkJZmJ1ZiA9IHhmc190cmFuc19nZXRfYnVmKHRwLCBtcC0+bV9kZGV2X3RhcmdwLCBkLAogCQkJCQkgbXAtPm1fYnNpemUgKiBibGtzX3Blcl9jbHVzdGVyLAotCQkJCQkgWEZTX0JVRl9MT0NLKTsKKwkJCQkJIFhCRl9MT0NLKTsKIAkJQVNTRVJUKGZidWYpOwogCQlBU1NFUlQoIVhGU19CVUZfR0VURVJST1IoZmJ1ZikpOwogCkBAIC0yNTMsNiArMjUzLDcgQEAKIAl4ZnNfYWdpbm9fdAl0aGlzaW5vOwkvKiBjdXJyZW50IGlub2RlIG51bWJlciwgZm9yIGxvb3AgKi8KIAlpbnQJCWlzYWxpZ25lZCA9IDA7CS8qIGlub2RlIGFsbG9jYXRpb24gYXQgc3RyaXBlIHVuaXQgKi8KIAkJCQkJLyogYm91bmRhcnkgKi8KKwlzdHJ1Y3QgeGZzX3BlcmFnICpwYWc7CiAKIAlhcmdzLnRwID0gdHA7CiAJYXJncy5tcCA9IHRwLT50X21vdW50cDsKQEAgLTM4Miw5ICszODMsOSBAQAogCW5ld2lubyA9IFhGU19PRkZCTk9fVE9fQUdJTk8oYXJncy5tcCwgYXJncy5hZ2JubywgMCk7CiAJYmUzMl9hZGRfY3B1KCZhZ2ktPmFnaV9jb3VudCwgbmV3bGVuKTsKIAliZTMyX2FkZF9jcHUoJmFnaS0+YWdpX2ZyZWVjb3VudCwgbmV3bGVuKTsKLQlkb3duX3JlYWQoJmFyZ3MubXAtPm1fcGVyYWdsb2NrKTsKLQlhcmdzLm1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2lfZnJlZWNvdW50ICs9IG5ld2xlbjsKLQl1cF9yZWFkKCZhcmdzLm1wLT5tX3BlcmFnbG9jayk7CisJcGFnID0geGZzX3BlcmFnX2dldChhcmdzLm1wLCBhZ25vKTsKKwlwYWctPnBhZ2lfZnJlZWNvdW50ICs9IG5ld2xlbjsKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJYWdpLT5hZ2lfbmV3aW5vID0gY3B1X3RvX2JlMzIobmV3aW5vKTsKIAogCS8qCkBAIC00ODYsOSArNDg3LDggQEAKIAkgKi8KIAlhZ25vID0gcGFnbm87CiAJZmxhZ3MgPSBYRlNfQUxMT0NfRkxBR19UUllMT0NLOwotCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAlmb3IgKDs7KSB7Ci0JCXBhZyA9ICZtcC0+bV9wZXJhZ1thZ25vXTsKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7CiAJCWlmICghcGFnLT5wYWdpX2luaXQpIHsKIAkJCWlmICh4ZnNfaWFsbG9jX3JlYWRfYWdpKG1wLCB0cCwgYWdubywgJmFnYnApKSB7CiAJCQkJYWdicCA9IE5VTEw7CkBAIC01MjcsNyArNTI3LDcgQEAKIAkJCQkJYWdicCA9IE5VTEw7CiAJCQkJCWdvdG8gbmV4dGFnOwogCQkJCX0KLQkJCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCQkJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJCQlyZXR1cm4gYWdicDsKIAkJCX0KIAkJfQpAQCAtNTM1LDIyICs1MzUsMTkgQEAKIAkJaWYgKGFnYnApCiAJCQl4ZnNfdHJhbnNfYnJlbHNlKHRwLCBhZ2JwKTsKIG5leHRhZzoKKwkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQkvKgogCQkgKiBObyBwb2ludCBpbiBpdGVyYXRpbmcgb3ZlciB0aGUgcmVzdCwgaWYgd2UncmUgc2h1dHRpbmcKIAkJICogZG93bi4KIAkJICovCi0JCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkgewotCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKKwkJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQogCQkJcmV0dXJuIE5VTEw7Ci0JCX0KIAkJYWdubysrOwogCQlpZiAoYWdubyA+PSBhZ2NvdW50KQogCQkJYWdubyA9IDA7CiAJCWlmIChhZ25vID09IHBhZ25vKSB7Ci0JCQlpZiAoZmxhZ3MgPT0gMCkgewotCQkJCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJCQlpZiAoZmxhZ3MgPT0gMCkKIAkJCQlyZXR1cm4gTlVMTDsKLQkJCX0KIAkJCWZsYWdzID0gMDsKIAkJfQogCX0KQEAgLTY3Miw2ICs2NjksNyBAQAogCXhmc19hZ251bWJlcl90CXRhZ25vOwkJLyogdGVzdGluZyBhbGxvY2F0aW9uIGdyb3VwIG51bWJlciAqLwogCXhmc19idHJlZV9jdXJfdAkqdGN1cjsJCS8qIHRlbXAgY3Vyc29yICovCiAJeGZzX2lub2J0X3JlY19pbmNvcmVfdCB0cmVjOwkvKiB0ZW1wIGlub2RlIGFsbG9jYXRpb24gcmVjb3JkICovCisJc3RydWN0IHhmc19wZXJhZyAqcGFnOwogCiAKIAlpZiAoKklPX2FnYnAgPT0gTlVMTCkgewpAQCAtNzcxLDEzICs3NjksMTMgQEAKIAkJCSppbm9wID0gTlVMTEZTSU5POwogCQkJcmV0dXJuIG5vcm9vbSA/IEVOT1NQQyA6IDA7CiAJCX0KLQkJZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwotCQlpZiAobXAtPm1fcGVyYWdbdGFnbm9dLnBhZ2lfaW5vZGVvayA9PSAwKSB7Ci0JCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCB0YWdubyk7CisJCWlmIChwYWctPnBhZ2lfaW5vZGVvayA9PSAwKSB7CisJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCQlnb3RvIG5leHRhZzsKIAkJfQogCQllcnJvciA9IHhmc19pYWxsb2NfcmVhZF9hZ2kobXAsIHRwLCB0YWdubywgJmFnYnApOwotCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gbmV4dGFnOwogCQlhZ2kgPSBYRlNfQlVGX1RPX0FHSShhZ2JwKTsKQEAgLTc5MCw2ICs3ODgsNyBAQAogCSAqLwogCWFnbm8gPSB0YWdubzsKIAkqSU9fYWdicCA9IE5VTEw7CisJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWdubyk7CiAKICByZXN0YXJ0X3BhZ25vOgogCWN1ciA9IHhmc19pbm9idF9pbml0X2N1cnNvcihtcCwgdHAsIGFnYnAsIGJlMzJfdG9fY3B1KGFnaS0+YWdpX3NlcW5vKSk7CkBAIC04MDgsNyArODA3LDYgQEAKIAkgKiBJZiBpbiB0aGUgc2FtZSBBRyBhcyB0aGUgcGFyZW50LCB0cnkgdG8gZ2V0IG5lYXIgdGhlIHBhcmVudC4KIAkgKi8KIAlpZiAocGFnbm8gPT0gYWdubykgewotCQl4ZnNfcGVyYWdfdAkqcGFnID0gJm1wLT5tX3BlcmFnW2Fnbm9dOwogCQlpbnQJCWRvbmVsZWZ0OwkvKiBkb25lLCB0byB0aGUgbGVmdCAqLwogCQlpbnQJCWRvbmVyaWdodDsJLyogZG9uZSwgdG8gdGhlIHJpZ2h0ICovCiAJCWludAkJc2VhcmNoZGlzdGFuY2UgPSAxMDsKQEAgLTEwMDYsOSArMTAwNCw3IEBACiAJCWdvdG8gZXJyb3IwOwogCWJlMzJfYWRkX2NwdSgmYWdpLT5hZ2lfZnJlZWNvdW50LCAtMSk7CiAJeGZzX2lhbGxvY19sb2dfYWdpKHRwLCBhZ2JwLCBYRlNfQUdJX0ZSRUVDT1VOVCk7Ci0JZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwotCW1wLT5tX3BlcmFnW3RhZ25vXS5wYWdpX2ZyZWVjb3VudC0tOwotCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJcGFnLT5wYWdpX2ZyZWVjb3VudC0tOwogCiAJZXJyb3IgPSB4ZnNfY2hlY2tfYWdpX2ZyZWVjb3VudChjdXIsIGFnaSk7CiAJaWYgKGVycm9yKQpAQCAtMTAxNiwxMiArMTAxMiwxNCBAQAogCiAJeGZzX2J0cmVlX2RlbF9jdXJzb3IoY3VyLCBYRlNfQlRSRUVfTk9FUlJPUik7CiAJeGZzX3RyYW5zX21vZF9zYih0cCwgWEZTX1RSQU5TX1NCX0lGUkVFLCAtMSk7CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCSppbm9wID0gaW5vOwogCXJldHVybiAwOwogZXJyb3IxOgogCXhmc19idHJlZV9kZWxfY3Vyc29yKHRjdXIsIFhGU19CVFJFRV9FUlJPUik7CiBlcnJvcjA6CiAJeGZzX2J0cmVlX2RlbF9jdXJzb3IoY3VyLCBYRlNfQlRSRUVfRVJST1IpOworCXhmc19wZXJhZ19wdXQocGFnKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTEwNTIsNiArMTA1MCw3IEBACiAJeGZzX21vdW50X3QJKm1wOwkvKiBtb3VudCBzdHJ1Y3R1cmUgZm9yIGZpbGVzeXN0ZW0gKi8KIAlpbnQJCW9mZjsJLyogb2Zmc2V0IG9mIGlub2RlIGluIGlub2RlIGNodW5rICovCiAJeGZzX2lub2J0X3JlY19pbmNvcmVfdCByZWM7CS8qIGJ0cmVlIHJlY29yZCAqLworCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZzsKIAogCW1wID0gdHAtPnRfbW91bnRwOwogCkBAIC0xMDg4LDkgKzEwODcsNyBAQAogCS8qCiAJICogR2V0IHRoZSBhbGxvY2F0aW9uIGdyb3VwIGhlYWRlci4KIAkgKi8KLQlkb3duX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAJZXJyb3IgPSB4ZnNfaWFsbG9jX3JlYWRfYWdpKG1wLCB0cCwgYWdubywgJmFnYnApOwotCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAJaWYgKGVycm9yKSB7CiAJCWNtbl9lcnIoQ0VfV0FSTiwKIAkJCSJ4ZnNfZGlmcmVlOiB4ZnNfaWFsbG9jX3JlYWRfYWdpKCkgcmV0dXJuZWQgYW4gZXJyb3IgJWQgb24gJXMuICBSZXR1cm5pbmcgZXJyb3IuIiwKQEAgLTExNTcsOSArMTE1NCw5IEBACiAJCWJlMzJfYWRkX2NwdSgmYWdpLT5hZ2lfY291bnQsIC1pbGVuKTsKIAkJYmUzMl9hZGRfY3B1KCZhZ2ktPmFnaV9mcmVlY291bnQsIC0oaWxlbiAtIDEpKTsKIAkJeGZzX2lhbGxvY19sb2dfYWdpKHRwLCBhZ2JwLCBYRlNfQUdJX0NPVU5UIHwgWEZTX0FHSV9GUkVFQ09VTlQpOwotCQlkb3duX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7Ci0JCW1wLT5tX3BlcmFnW2Fnbm9dLnBhZ2lfZnJlZWNvdW50IC09IGlsZW4gLSAxOwotCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKKwkJcGFnLT5wYWdpX2ZyZWVjb3VudCAtPSBpbGVuIC0gMTsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQl4ZnNfdHJhbnNfbW9kX3NiKHRwLCBYRlNfVFJBTlNfU0JfSUNPVU5ULCAtaWxlbik7CiAJCXhmc190cmFuc19tb2Rfc2IodHAsIFhGU19UUkFOU19TQl9JRlJFRSwgLShpbGVuIC0gMSkpOwogCkBAIC0xMTg4LDkgKzExODUsOSBAQAogCQkgKi8KIAkJYmUzMl9hZGRfY3B1KCZhZ2ktPmFnaV9mcmVlY291bnQsIDEpOwogCQl4ZnNfaWFsbG9jX2xvZ19hZ2kodHAsIGFnYnAsIFhGU19BR0lfRlJFRUNPVU5UKTsKLQkJZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwotCQltcC0+bV9wZXJhZ1thZ25vXS5wYWdpX2ZyZWVjb3VudCsrOwotCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZ25vKTsKKwkJcGFnLT5wYWdpX2ZyZWVjb3VudCsrOworCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJCXhmc190cmFuc19tb2Rfc2IodHAsIFhGU19UUkFOU19TQl9JRlJFRSwgMSk7CiAJfQogCkBAIC0xMzEyLDkgKzEzMDksNyBAQAogCQl4ZnNfYnVmX3QJKmFnYnA7CS8qIGFnaSBidWZmZXIgKi8KIAkJaW50CQlpOwkvKiB0ZW1wIHN0YXRlICovCiAKLQkJZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCQllcnJvciA9IHhmc19pYWxsb2NfcmVhZF9hZ2kobXAsIHRwLCBhZ25vLCAmYWdicCk7Ci0JCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CiAJCWlmIChlcnJvcikgewogCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIG1wLCAieGZzX2ltYXA6ICIKIAkJCQkJInhmc19pYWxsb2NfcmVhZF9hZ2koKSByZXR1cm5lZCAiCkBAIC0xMzc5LDcgKzEzNzQsNiBAQAogCQkJWEZTX0ZTQl9UT19CQihtcCwgbXAtPm1fc2Iuc2JfZGJsb2NrcykpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1MjMsOCArMTUxNyw3IEBACiAJCXJldHVybiBlcnJvcjsKIAogCWFnaSA9IFhGU19CVUZfVE9fQUdJKCpicHApOwotCXBhZyA9ICZtcC0+bV9wZXJhZ1thZ25vXTsKLQorCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnbm8pOwogCWlmICghcGFnLT5wYWdpX2luaXQpIHsKIAkJcGFnLT5wYWdpX2ZyZWVjb3VudCA9IGJlMzJfdG9fY3B1KGFnaS0+YWdpX2ZyZWVjb3VudCk7CiAJCXBhZy0+cGFnaV9jb3VudCA9IGJlMzJfdG9fY3B1KGFnaS0+YWdpX2NvdW50KTsKQEAgLTE1MzcsNiArMTUzMCw3IEBACiAJICovCiAJQVNTRVJUKHBhZy0+cGFnaV9mcmVlY291bnQgPT0gYmUzMl90b19jcHUoYWdpLT5hZ2lfZnJlZWNvdW50KSB8fAogCQlYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSk7CisJeGZzX3BlcmFnX3B1dChwYWcpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lnZXQuYyBiL2ZzL3hmcy94ZnNfaWdldC5jCmluZGV4IDE1NWU3OTguLmUyODFlYjQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWdldC5jCisrKyBiL2ZzL3hmcy94ZnNfaWdldC5jCkBAIC0zNzQsNyArMzc0LDcgQEAKIAkJcmV0dXJuIEVJTlZBTDsKIAogCS8qIGdldCB0aGUgcGVyYWcgc3RydWN0dXJlIGFuZCBlbnN1cmUgdGhhdCBpdCdzIGlub2RlIGNhcGFibGUgKi8KLQlwYWcgPSB4ZnNfZ2V0X3BlcmFnKG1wLCBpbm8pOworCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIFhGU19JTk9fVE9fQUdOTyhtcCwgaW5vKSk7CiAJaWYgKCFwYWctPnBhZ2lfaW5vZGVvaykKIAkJcmV0dXJuIEVJTlZBTDsKIAlBU1NFUlQocGFnLT5wYWdfaWNpX2luaXQpOwpAQCAtMzk4LDcgKzM5OCw3IEBACiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0X2Vycm9yX29yX2FnYWluOwogCX0KLQl4ZnNfcHV0X3BlcmFnKG1wLCBwYWcpOworCXhmc19wZXJhZ19wdXQocGFnKTsKIAogCSppcHAgPSBpcDsKIApAQCAtNDE3LDcgKzQxNyw3IEBACiAJCWRlbGF5KDEpOwogCQlnb3RvIGFnYWluOwogCX0KLQl4ZnNfcHV0X3BlcmFnKG1wLCBwYWcpOworCXhmc19wZXJhZ19wdXQocGFnKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTQ4OCwxMiArNDg4LDEyIEBACiAJICogYWRkZWQgdG8gdGhlIHRyZWUgYXNzZXJ0IHRoYXQgaXQncyBiZWVuIHRoZXJlIGJlZm9yZSB0byBjYXRjaAogCSAqIHByb2JsZW1zIHdpdGggdGhlIGlub2RlIGxpZmUgdGltZSBlYXJseSBvbi4KIAkgKi8KLQlwYWcgPSB4ZnNfZ2V0X3BlcmFnKG1wLCBpcC0+aV9pbm8pOworCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIFhGU19JTk9fVE9fQUdOTyhtcCwgaXAtPmlfaW5vKSk7CiAJd3JpdGVfbG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOwogCWlmICghcmFkaXhfdHJlZV9kZWxldGUoJnBhZy0+cGFnX2ljaV9yb290LCBhZ2lubykpCiAJCUFTU0VSVCgwKTsKIAl3cml0ZV91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKLQl4ZnNfcHV0X3BlcmFnKG1wLCBwYWcpOworCXhmc19wZXJhZ19wdXQocGFnKTsKIAogCS8qCiAJICogSGVyZSB3ZSBkbyBhbiAoYWxtb3N0KSBzcHVyaW91cyBpbm9kZSBsb2NrIGluIG9yZGVyIHRvIGNvb3JkaW5hdGUKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuYyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwppbmRleCBlZjc3ZmQ4Li5mYTMxMzYwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmMKKysrIGIvZnMveGZzL3hmc19pbm9kZS5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAkJCQkiYW4gZXJyb3IgJWQgb24gJXMuICBSZXR1cm5pbmcgZXJyb3IuIiwKIAkJCQllcnJvciwgbXAtPm1fZnNuYW1lKTsKIAkJfSBlbHNlIHsKLQkJCUFTU0VSVChidWZfZmxhZ3MgJiBYRlNfQlVGX1RSWUxPQ0spOworCQkJQVNTRVJUKGJ1Zl9mbGFncyAmIFhCRl9UUllMT0NLKTsKIAkJfQogCQlyZXR1cm4gZXJyb3I7CiAJfQpAQCAtMjM5LDcgKzIzOSw3IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQllcnJvciA9IHhmc19pbWFwX3RvX2JwKG1wLCB0cCwgJmltYXAsICZicCwgWEZTX0JVRl9MT0NLLCBpbWFwX2ZsYWdzKTsKKwllcnJvciA9IHhmc19pbWFwX3RvX2JwKG1wLCB0cCwgJmltYXAsICZicCwgWEJGX0xPQ0ssIGltYXBfZmxhZ3MpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC0yODUsNyArMjg1LDcgQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJaWYgKCFicCkgewotCQlBU1NFUlQoYnVmX2ZsYWdzICYgWEZTX0JVRl9UUllMT0NLKTsKKwkJQVNTRVJUKGJ1Zl9mbGFncyAmIFhCRl9UUllMT0NLKTsKIAkJQVNTRVJUKHRwID09IE5VTEwpOwogCQkqYnBwID0gTlVMTDsKIAkJcmV0dXJuIEVBR0FJTjsKQEAgLTgwNyw3ICs4MDcsNyBAQAogCSAqIEdldCBwb2ludGVycyB0byB0aGUgb24tZGlzayBpbm9kZSBhbmQgdGhlIGJ1ZmZlciBjb250YWluaW5nIGl0LgogCSAqLwogCWVycm9yID0geGZzX2ltYXBfdG9fYnAobXAsIHRwLCAmaXAtPmlfaW1hcCwgJmJwLAotCQkJICAgICAgIFhGU19CVUZfTE9DSywgaWdldF9mbGFncyk7CisJCQkgICAgICAgWEJGX0xPQ0ssIGlnZXRfZmxhZ3MpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCWRpcCA9ICh4ZnNfZGlub2RlX3QgKil4ZnNfYnVmX29mZnNldChicCwgaXAtPmlfaW1hcC5pbV9ib2Zmc2V0KTsKQEAgLTE3NTEsNyArMTc1MSw3IEBACiAJCSAqIEhlcmUgd2UgcHV0IHRoZSBoZWFkIHBvaW50ZXIgaW50byBvdXIgbmV4dCBwb2ludGVyLAogCQkgKiBhbmQgdGhlbiB3ZSBmYWxsIHRocm91Z2ggdG8gcG9pbnQgdGhlIGhlYWQgYXQgdXMuCiAJCSAqLwotCQllcnJvciA9IHhmc19pdG9icChtcCwgdHAsIGlwLCAmZGlwLCAmaWJwLCBYRlNfQlVGX0xPQ0spOworCQllcnJvciA9IHhmc19pdG9icChtcCwgdHAsIGlwLCAmZGlwLCAmaWJwLCBYQkZfTE9DSyk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKIApAQCAtMTgzMyw3ICsxODMzLDcgQEAKIAkJICogb2YgZGVhbGluZyB3aXRoIHRoZSBidWZmZXIgd2hlbiB0aGVyZSBpcyBubyBuZWVkIHRvCiAJCSAqIGNoYW5nZSBpdC4KIAkJICovCi0JCWVycm9yID0geGZzX2l0b2JwKG1wLCB0cCwgaXAsICZkaXAsICZpYnAsIFhGU19CVUZfTE9DSyk7CisJCWVycm9yID0geGZzX2l0b2JwKG1wLCB0cCwgaXAsICZkaXAsICZpYnAsIFhCRl9MT0NLKTsKIAkJaWYgKGVycm9yKSB7CiAJCQljbW5fZXJyKENFX1dBUk4sCiAJCQkJInhmc19pdW5saW5rX3JlbW92ZTogeGZzX2l0b2JwKCkgIHJldHVybmVkIGFuIGVycm9yICVkIG9uICVzLiAgUmV0dXJuaW5nIGVycm9yLiIsCkBAIC0xODk1LDcgKzE4OTUsNyBAQAogCQkgKiBOb3cgbGFzdF9pYnAgcG9pbnRzIHRvIHRoZSBidWZmZXIgcHJldmlvdXMgdG8gdXMgb24KIAkJICogdGhlIHVubGlua2VkIGxpc3QuICBQdWxsIHVzIGZyb20gdGhlIGxpc3QuCiAJCSAqLwotCQllcnJvciA9IHhmc19pdG9icChtcCwgdHAsIGlwLCAmZGlwLCAmaWJwLCBYRlNfQlVGX0xPQ0spOworCQllcnJvciA9IHhmc19pdG9icChtcCwgdHAsIGlwLCAmZGlwLCAmaWJwLCBYQkZfTE9DSyk7CiAJCWlmIChlcnJvcikgewogCQkJY21uX2VycihDRV9XQVJOLAogCQkJCSJ4ZnNfaXVubGlua19yZW1vdmU6IHhmc19pdG9icCgpICByZXR1cm5lZCBhbiBlcnJvciAlZCBvbiAlcy4gIFJldHVybmluZyBlcnJvci4iLApAQCAtMTk0Niw4ICsxOTQ2LDkgQEAKIAl4ZnNfaW5vZGVfdAkJKmlwLCAqKmlwX2ZvdW5kOwogCXhmc19pbm9kZV9sb2dfaXRlbV90CSppaXA7CiAJeGZzX2xvZ19pdGVtX3QJCSpsaXA7Ci0JeGZzX3BlcmFnX3QJCSpwYWcgPSB4ZnNfZ2V0X3BlcmFnKG1wLCBpbnVtKTsKKwlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWc7CiAKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBYRlNfSU5PX1RPX0FHTk8obXAsIGludW0pKTsKIAlpZiAobXAtPm1fc2Iuc2JfYmxvY2tzaXplID49IFhGU19JTk9ERV9DTFVTVEVSX1NJWkUobXApKSB7CiAJCWJsa3NfcGVyX2NsdXN0ZXIgPSAxOwogCQluaW5vZGVzID0gbXAtPm1fc2Iuc2JfaW5vcGJsb2NrOwpAQCAtMjAzOSw3ICsyMDQwLDcgQEAKIAogCQlicCA9IHhmc190cmFuc19nZXRfYnVmKHRwLCBtcC0+bV9kZGV2X3RhcmdwLCBibGtubywgCiAJCQkJCW1wLT5tX2JzaXplICogYmxrc19wZXJfY2x1c3RlciwKLQkJCQkJWEZTX0JVRl9MT0NLKTsKKwkJCQkJWEJGX0xPQ0spOwogCiAJCXByZV9mbHVzaGVkID0gMDsKIAkJbGlwID0gWEZTX0JVRl9GU1BSSVZBVEUoYnAsIHhmc19sb2dfaXRlbV90ICopOwpAQCAtMjA4OCw3ICsyMDg5LDcgQEAKIAl9CiAKIAlrbWVtX2ZyZWUoaXBfZm91bmQpOwotCXhmc19wdXRfcGVyYWcobXAsIHBhZyk7CisJeGZzX3BlcmFnX3B1dChwYWcpOwogfQogCiAvKgpAQCAtMjE1MCw3ICsyMTUxLDcgQEAKIAogCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKIAotCWVycm9yID0geGZzX2l0b2JwKGlwLT5pX21vdW50LCB0cCwgaXAsICZkaXAsICZpYnAsIFhGU19CVUZfTE9DSyk7CisJZXJyb3IgPSB4ZnNfaXRvYnAoaXAtPmlfbW91bnQsIHRwLCBpcCwgJmRpcCwgJmlicCwgWEJGX0xPQ0spOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC0yNDgzLDEzICsyNDg0LDE2IEBACiAJCXJldHVybjsKIAogCS8qIEdpdmUgdGhlIGxvZyBhIHB1c2ggdG8gc3RhcnQgdGhlIHVucGlubmluZyBJL08gKi8KLQl4ZnNfbG9nX2ZvcmNlKGlwLT5pX21vdW50LCAoaWlwICYmIGlpcC0+aWxpX2xhc3RfbHNuKSA/Ci0JCQkJaWlwLT5pbGlfbGFzdF9sc24gOiAwLCBYRlNfTE9HX0ZPUkNFKTsKKwlpZiAoaWlwICYmIGlpcC0+aWxpX2xhc3RfbHNuKQorCQl4ZnNfbG9nX2ZvcmNlX2xzbihpcC0+aV9tb3VudCwgaWlwLT5pbGlfbGFzdF9sc24sIDApOworCWVsc2UKKwkJeGZzX2xvZ19mb3JjZShpcC0+aV9tb3VudCwgMCk7CisKIAlpZiAod2FpdCkKIAkJd2FpdF9ldmVudChpcC0+aV9pcGluX3dhaXQsIChhdG9taWNfcmVhZCgmaXAtPmlfcGluY291bnQpID09IDApKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCit2b2lkCiB4ZnNfaXVucGluX3dhaXQoCiAJeGZzX2lub2RlX3QJKmlwKQogewpAQCAtMjY3NSw3ICsyNjc5LDcgQEAKIAl4ZnNfYnVmX3QJKmJwKQogewogCXhmc19tb3VudF90CQkqbXAgPSBpcC0+aV9tb3VudDsKLQl4ZnNfcGVyYWdfdAkJKnBhZyA9IHhmc19nZXRfcGVyYWcobXAsIGlwLT5pX2lubyk7CisJc3RydWN0IHhmc19wZXJhZwkqcGFnOwogCXVuc2lnbmVkIGxvbmcJCWZpcnN0X2luZGV4LCBtYXNrOwogCXVuc2lnbmVkIGxvbmcJCWlub2Rlc19wZXJfY2x1c3RlcjsKIAlpbnQJCQlpbGlzdF9zaXplOwpAQCAtMjY4Niw2ICsyNjkwLDcgQEAKIAlpbnQJCQlidWZ3YXNkZWx3cmk7CiAJaW50CQkJaTsKIAorCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIFhGU19JTk9fVE9fQUdOTyhtcCwgaXAtPmlfaW5vKSk7CiAJQVNTRVJUKHBhZy0+cGFnaV9pbm9kZW9rKTsKIAlBU1NFUlQocGFnLT5wYWdfaWNpX2luaXQpOwogCkBAIC0yNjkzLDcgKzI2OTgsNyBAQAogCWlsaXN0X3NpemUgPSBpbm9kZXNfcGVyX2NsdXN0ZXIgKiBzaXplb2YoeGZzX2lub2RlX3QgKik7CiAJaWxpc3QgPSBrbWVtX2FsbG9jKGlsaXN0X3NpemUsIEtNX01BWUZBSUx8S01fTk9GUyk7CiAJaWYgKCFpbGlzdCkKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0X3B1dDsKIAogCW1hc2sgPSB+KCgoWEZTX0lOT0RFX0NMVVNURVJfU0laRShtcCkgPj4gbXAtPm1fc2Iuc2JfaW5vZGVsb2cpKSAtIDEpOwogCWZpcnN0X2luZGV4ID0gWEZTX0lOT19UT19BR0lOTyhtcCwgaXAtPmlfaW5vKSAmIG1hc2s7CkBAIC0yNzYyLDYgKzI3NjcsOCBAQAogb3V0X2ZyZWU6CiAJcmVhZF91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKIAlrbWVtX2ZyZWUoaWxpc3QpOworb3V0X3B1dDoKKwl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJcmV0dXJuIDA7CiAKIApAQCAtMjgwNSw2ICsyODEyLDcgQEAKIAkgKi8KIAl4ZnNfaWZsdXNoX2Fib3J0KGlxKTsKIAlrbWVtX2ZyZWUoaWxpc3QpOworCXhmc19wZXJhZ19wdXQocGFnKTsKIAlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiB9CiAKQEAgLTI4MjcsOCArMjgzNSw2IEBACiAJeGZzX2Rpbm9kZV90CQkqZGlwOwogCXhmc19tb3VudF90CQkqbXA7CiAJaW50CQkJZXJyb3I7Ci0JaW50CQkJbm9ibG9jayA9IChmbGFncyA9PSBYRlNfSUZMVVNIX0FTWU5DX05PQkxPQ0spOwotCWVudW0geyBJTlRfREVMV1JJID0gKDEgPDwgMCksIElOVF9BU1lOQyA9ICgxIDw8IDEpIH07CiAKIAlYRlNfU1RBVFNfSU5DKHhzX2lmbHVzaF9jb3VudCk7CiAKQEAgLTI4NDEsMTUgKzI4NDcsNiBAQAogCW1wID0gaXAtPmlfbW91bnQ7CiAKIAkvKgotCSAqIElmIHRoZSBpbm9kZSBpc24ndCBkaXJ0eSwgdGhlbiBqdXN0IHJlbGVhc2UgdGhlIGlub2RlIGZsdXNoIGxvY2sgYW5kCi0JICogZG8gbm90aGluZy4KLQkgKi8KLQlpZiAoeGZzX2lub2RlX2NsZWFuKGlwKSkgewotCQl4ZnNfaWZ1bmxvY2soaXApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKgogCSAqIFdlIGNhbid0IGZsdXNoIHRoZSBpbm9kZSB1bnRpbCBpdCBpcyB1bnBpbm5lZCwgc28gd2FpdCBmb3IgaXQgaWYgd2UKIAkgKiBhcmUgYWxsb3dlZCB0byBibG9jay4gIFdlIGtub3cgbm9vbmUgbmV3IGNhbiBwaW4gaXQsIGJlY2F1c2Ugd2UgYXJlCiAJICogaG9sZGluZyB0aGUgaW5vZGUgbG9jayBzaGFyZWQgYW5kIHlvdSBuZWVkIHRvIGhvbGQgaXQgZXhjbHVzaXZlbHkgdG8KQEAgLTI4NjAsNyArMjg1Nyw3IEBACiAJICogaW4gdGhlIHNhbWUgY2x1c3RlciBhcmUgZGlydHksIHRoZXkgd2lsbCBwcm9iYWJseSB3cml0ZSB0aGUgaW5vZGUKIAkgKiBvdXQgZm9yIHVzIGlmIHRoZXkgb2NjdXIgYWZ0ZXIgdGhlIGxvZyBmb3JjZSBjb21wbGV0ZXMuCiAJICovCi0JaWYgKG5vYmxvY2sgJiYgeGZzX2lwaW5jb3VudChpcCkpIHsKKwlpZiAoIShmbGFncyAmIFNZTkNfV0FJVCkgJiYgeGZzX2lwaW5jb3VudChpcCkpIHsKIAkJeGZzX2l1bnBpbl9ub3dhaXQoaXApOwogCQl4ZnNfaWZ1bmxvY2soaXApOwogCQlyZXR1cm4gRUFHQUlOOwpAQCAtMjg5NCw2MCArMjg5MSwxMCBAQAogCX0KIAogCS8qCi0JICogRGVjaWRlIGhvdyBidWZmZXIgd2lsbCBiZSBmbHVzaGVkIG91dC4gIFRoaXMgaXMgZG9uZSBiZWZvcmUKLQkgKiB0aGUgY2FsbCB0byB4ZnNfaWZsdXNoX2ludCBiZWNhdXNlIHRoaXMgZmllbGQgaXMgemVyb2VkIGJ5IGl0LgotCSAqLwotCWlmIChpaXAgIT0gTlVMTCAmJiBpaXAtPmlsaV9mb3JtYXQuaWxmX2ZpZWxkcyAhPSAwKSB7Ci0JCS8qCi0JCSAqIEZsdXNoIG91dCB0aGUgaW5vZGUgYnVmZmVyIGFjY29yZGluZyB0byB0aGUgZGlyZWN0aW9ucwotCQkgKiBvZiB0aGUgY2FsbGVyLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoZSBjYWxsZXIgaGFzIGdpdmVuCi0JCSAqIHVzIGEgY2hvaWNlIGNob29zZSB0aGUgbm9uLWRlbHdyaSBjYXNlLiAgVGhpcyBpcyBiZWNhdXNlCi0JCSAqIHRoZSBpbm9kZSBpcyBpbiB0aGUgQUlMIGFuZCB3ZSBuZWVkIHRvIGdldCBpdCBvdXQgc29vbi4KLQkJICovCi0JCXN3aXRjaCAoZmxhZ3MpIHsKLQkJY2FzZSBYRlNfSUZMVVNIX1NZTkM6Ci0JCWNhc2UgWEZTX0lGTFVTSF9ERUxXUklfRUxTRV9TWU5DOgotCQkJZmxhZ3MgPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgWEZTX0lGTFVTSF9BU1lOQ19OT0JMT0NLOgotCQljYXNlIFhGU19JRkxVU0hfQVNZTkM6Ci0JCWNhc2UgWEZTX0lGTFVTSF9ERUxXUklfRUxTRV9BU1lOQzoKLQkJCWZsYWdzID0gSU5UX0FTWU5DOwotCQkJYnJlYWs7Ci0JCWNhc2UgWEZTX0lGTFVTSF9ERUxXUkk6Ci0JCQlmbGFncyA9IElOVF9ERUxXUkk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCUFTU0VSVCgwKTsKLQkJCWZsYWdzID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3dpdGNoIChmbGFncykgewotCQljYXNlIFhGU19JRkxVU0hfREVMV1JJX0VMU0VfU1lOQzoKLQkJY2FzZSBYRlNfSUZMVVNIX0RFTFdSSV9FTFNFX0FTWU5DOgotCQljYXNlIFhGU19JRkxVU0hfREVMV1JJOgotCQkJZmxhZ3MgPSBJTlRfREVMV1JJOwotCQkJYnJlYWs7Ci0JCWNhc2UgWEZTX0lGTFVTSF9BU1lOQ19OT0JMT0NLOgotCQljYXNlIFhGU19JRkxVU0hfQVNZTkM6Ci0JCQlmbGFncyA9IElOVF9BU1lOQzsKLQkJCWJyZWFrOwotCQljYXNlIFhGU19JRkxVU0hfU1lOQzoKLQkJCWZsYWdzID0gMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQVNTRVJUKDApOwotCQkJZmxhZ3MgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKgogCSAqIEdldCB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIG9uLWRpc2sgaW5vZGUuCiAJICovCiAJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIE5VTEwsIGlwLCAmZGlwLCAmYnAsCi0JCQkJbm9ibG9jayA/IFhGU19CVUZfVFJZTE9DSyA6IFhGU19CVUZfTE9DSyk7CisJCQkJKGZsYWdzICYgU1lOQ19XQUlUKSA/IFhCRl9MT0NLIDogWEJGX1RSWUxPQ0spOwogCWlmIChlcnJvciB8fCAhYnApIHsKIAkJeGZzX2lmdW5sb2NrKGlwKTsKIAkJcmV0dXJuIGVycm9yOwpAQCAtMjk2NSw3ICsyOTEyLDcgQEAKIAkgKiBnZXQgc3R1Y2sgd2FpdGluZyBpbiB0aGUgd3JpdGUgZm9yIHRvbyBsb25nLgogCSAqLwogCWlmIChYRlNfQlVGX0lTUElOTkVEKGJwKSkKLQkJeGZzX2xvZ19mb3JjZShtcCwgKHhmc19sc25fdCkwLCBYRlNfTE9HX0ZPUkNFKTsKKwkJeGZzX2xvZ19mb3JjZShtcCwgMCk7CiAKIAkvKgogCSAqIGlub2RlIGNsdXN0ZXJpbmc6CkBAIC0yOTc1LDEzICsyOTIyLDEwIEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGNsdXN0ZXJfY29ycnVwdF9vdXQ7CiAKLQlpZiAoZmxhZ3MgJiBJTlRfREVMV1JJKSB7Ci0JCXhmc19iZHdyaXRlKG1wLCBicCk7Ci0JfSBlbHNlIGlmIChmbGFncyAmIElOVF9BU1lOQykgewotCQllcnJvciA9IHhmc19iYXdyaXRlKG1wLCBicCk7Ci0JfSBlbHNlIHsKKwlpZiAoZmxhZ3MgJiBTWU5DX1dBSVQpCiAJCWVycm9yID0geGZzX2J3cml0ZShtcCwgYnApOwotCX0KKwllbHNlCisJCXhmc19iZHdyaXRlKG1wLCBicCk7CiAJcmV0dXJuIGVycm9yOwogCiBjb3JydXB0X291dDoKQEAgLTMwMTYsMTYgKzI5NjAsNiBAQAogCWlpcCA9IGlwLT5pX2l0ZW1wOwogCW1wID0gaXAtPmlfbW91bnQ7CiAKLQotCS8qCi0JICogSWYgdGhlIGlub2RlIGlzbid0IGRpcnR5LCB0aGVuIGp1c3QgcmVsZWFzZSB0aGUgaW5vZGUKLQkgKiBmbHVzaCBsb2NrIGFuZCBkbyBub3RoaW5nLgotCSAqLwotCWlmICh4ZnNfaW5vZGVfY2xlYW4oaXApKSB7Ci0JCXhmc19pZnVubG9jayhpcCk7Ci0JCXJldHVybiAwOwotCX0KLQogCS8qIHNldCAqZGlwID0gaW5vZGUncyBwbGFjZSBpbiB0aGUgYnVmZmVyICovCiAJZGlwID0gKHhmc19kaW5vZGVfdCAqKXhmc19idWZfb2Zmc2V0KGJwLCBpcC0+aV9pbWFwLmltX2JvZmZzZXQpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmgKaW5kZXggZWMxZjI4Yy4uNmM5MTJiMCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuaApAQCAtNDIwLDE2ICs0MjAsNiBAQAogI2RlZmluZSBYRlNfSUxPQ0tfREVQKGZsYWdzKQkoKChmbGFncykgJiBYRlNfSUxPQ0tfREVQX01BU0spID4+IFhGU19JTE9DS19TSElGVCkKIAogLyoKLSAqIEZsYWdzIGZvciB4ZnNfaWZsdXNoKCkKLSAqLwotI2RlZmluZQlYRlNfSUZMVVNIX0RFTFdSSV9FTFNFX1NZTkMJMQotI2RlZmluZQlYRlNfSUZMVVNIX0RFTFdSSV9FTFNFX0FTWU5DCTIKLSNkZWZpbmUJWEZTX0lGTFVTSF9TWU5DCQkJMwotI2RlZmluZQlYRlNfSUZMVVNIX0FTWU5DCQk0Ci0jZGVmaW5lCVhGU19JRkxVU0hfREVMV1JJCQk1Ci0jZGVmaW5lCVhGU19JRkxVU0hfQVNZTkNfTk9CTE9DSwk2Ci0KLS8qCiAgKiBGbGFncyBmb3IgeGZzX2l0cnVuY2F0ZV9zdGFydCgpLgogICovCiAjZGVmaW5lCVhGU19JVFJVTkNfREVGSU5JVEUJMHgxCkBAIC00ODMsNiArNDczLDcgQEAKIHZvaWQJCXhmc19pZXh0X3JlYWxsb2MoeGZzX2lub2RlX3QgKiwgaW50LCBpbnQpOwogdm9pZAkJeGZzX2lwaW4oeGZzX2lub2RlX3QgKik7CiB2b2lkCQl4ZnNfaXVucGluKHhmc19pbm9kZV90ICopOwordm9pZAkJeGZzX2l1bnBpbl93YWl0KHhmc19pbm9kZV90ICopOwogaW50CQl4ZnNfaWZsdXNoKHhmc19pbm9kZV90ICosIHVpbnQpOwogdm9pZAkJeGZzX2ljaGd0aW1lKHhmc19pbm9kZV90ICosIGludCk7CiB2b2lkCQl4ZnNfbG9ja19pbm9kZXMoeGZzX2lub2RlX3QgKiosIGludCwgdWludCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCmluZGV4IGYzODg1NWQuLmQ0ZGMwNjMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCkBAIC0yMjgsNyArMjI4LDcgQEAKIAogCXZlY3AtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmaWlwLT5pbGlfZm9ybWF0OwogCXZlY3AtPmlfbGVuICA9IHNpemVvZih4ZnNfaW5vZGVfbG9nX2Zvcm1hdF90KTsKLQlYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCBYTE9HX1JFR19UWVBFX0lGT1JNQVQpOworCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUZPUk1BVDsKIAl2ZWNwKys7CiAJbnZlY3MJICAgICA9IDE7CiAKQEAgLTI3OSw3ICsyNzksNyBAQAogCiAJdmVjcC0+aV9hZGRyID0gKHhmc19jYWRkcl90KSZpcC0+aV9kOwogCXZlY3AtPmlfbGVuICA9IHNpemVvZihzdHJ1Y3QgeGZzX2ljZGlub2RlKTsKLQlYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCBYTE9HX1JFR19UWVBFX0lDT1JFKTsKKwl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lDT1JFOwogCXZlY3ArKzsKIAludmVjcysrOwogCWlpcC0+aWxpX2Zvcm1hdC5pbGZfZmllbGRzIHw9IFhGU19JTE9HX0NPUkU7CkBAIC0zMzYsNyArMzM2LDcgQEAKIAkJCQl2ZWNwLT5pX2FkZHIgPQogCQkJCQkoY2hhciAqKShpcC0+aV9kZi5pZl91MS5pZl9leHRlbnRzKTsKIAkJCQl2ZWNwLT5pX2xlbiA9IGlwLT5pX2RmLmlmX2J5dGVzOwotCQkJCVhMT0dfVkVDX1NFVF9UWVBFKHZlY3AsIFhMT0dfUkVHX1RZUEVfSUVYVCk7CisJCQkJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9JRVhUOwogCQkJfSBlbHNlCiAjZW5kaWYKIAkJCXsKQEAgLTM1NSw3ICszNTUsNyBAQAogCQkJCXZlY3AtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdClleHRfYnVmZmVyOwogCQkJCXZlY3AtPmlfbGVuID0geGZzX2lleHRlbnRzX2NvcHkoaXAsIGV4dF9idWZmZXIsCiAJCQkJCQlYRlNfREFUQV9GT1JLKTsKLQkJCQlYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCBYTE9HX1JFR19UWVBFX0lFWFQpOworCQkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUVYVDsKIAkJCX0KIAkJCUFTU0VSVCh2ZWNwLT5pX2xlbiA8PSBpcC0+aV9kZi5pZl9ieXRlcyk7CiAJCQlpaXAtPmlsaV9mb3JtYXQuaWxmX2RzaXplID0gdmVjcC0+aV9sZW47CkBAIC0zNzMsNyArMzczLDcgQEAKIAkJCUFTU0VSVChpcC0+aV9kZi5pZl9icm9vdCAhPSBOVUxMKTsKIAkJCXZlY3AtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdClpcC0+aV9kZi5pZl9icm9vdDsKIAkJCXZlY3AtPmlfbGVuID0gaXAtPmlfZGYuaWZfYnJvb3RfYnl0ZXM7Ci0JCQlYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCBYTE9HX1JFR19UWVBFX0lCUk9PVCk7CisJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lCUk9PVDsKIAkJCXZlY3ArKzsKIAkJCW52ZWNzKys7CiAJCQlpaXAtPmlsaV9mb3JtYXQuaWxmX2RzaXplID0gaXAtPmlfZGYuaWZfYnJvb3RfYnl0ZXM7CkBAIC0zOTksNyArMzk5LDcgQEAKIAkJCUFTU0VSVCgoaXAtPmlfZGYuaWZfcmVhbF9ieXRlcyA9PSAwKSB8fAogCQkJICAgICAgIChpcC0+aV9kZi5pZl9yZWFsX2J5dGVzID09IGRhdGFfYnl0ZXMpKTsKIAkJCXZlY3AtPmlfbGVuID0gKGludClkYXRhX2J5dGVzOwotCQkJWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JTE9DQUwpOworCQkJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9JTE9DQUw7CiAJCQl2ZWNwKys7CiAJCQludmVjcysrOwogCQkJaWlwLT5pbGlfZm9ybWF0LmlsZl9kc2l6ZSA9ICh1bnNpZ25lZClkYXRhX2J5dGVzOwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJCQl2ZWNwLT5pX2xlbiA9IHhmc19pZXh0ZW50c19jb3B5KGlwLCBleHRfYnVmZmVyLAogCQkJCQlYRlNfQVRUUl9GT1JLKTsKICNlbmRpZgotCQkJWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JQVRUUl9FWFQpOworCQkJdmVjcC0+aV90eXBlID0gWExPR19SRUdfVFlQRV9JQVRUUl9FWFQ7CiAJCQlpaXAtPmlsaV9mb3JtYXQuaWxmX2FzaXplID0gdmVjcC0+aV9sZW47CiAJCQl2ZWNwKys7CiAJCQludmVjcysrOwpAQCAtNDkyLDcgKzQ5Miw3IEBACiAJCQlBU1NFUlQoaXAtPmlfYWZwLT5pZl9icm9vdCAhPSBOVUxMKTsKIAkJCXZlY3AtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdClpcC0+aV9hZnAtPmlmX2Jyb290OwogCQkJdmVjcC0+aV9sZW4gPSBpcC0+aV9hZnAtPmlmX2Jyb290X2J5dGVzOwotCQkJWExPR19WRUNfU0VUX1RZUEUodmVjcCwgWExPR19SRUdfVFlQRV9JQVRUUl9CUk9PVCk7CisJCQl2ZWNwLT5pX3R5cGUgPSBYTE9HX1JFR19UWVBFX0lBVFRSX0JST09UOwogCQkJdmVjcCsrOwogCQkJbnZlY3MrKzsKIAkJCWlpcC0+aWxpX2Zvcm1hdC5pbGZfYXNpemUgPSBpcC0+aV9hZnAtPmlmX2Jyb290X2J5dGVzOwpAQCAtNTE2LDcgKzUxNiw3IEBACiAJCQlBU1NFUlQoKGlwLT5pX2FmcC0+aWZfcmVhbF9ieXRlcyA9PSAwKSB8fAogCQkJICAgICAgIChpcC0+aV9hZnAtPmlmX3JlYWxfYnl0ZXMgPT0gZGF0YV9ieXRlcykpOwogCQkJdmVjcC0+aV9sZW4gPSAoaW50KWRhdGFfYnl0ZXM7Ci0JCQlYTE9HX1ZFQ19TRVRfVFlQRSh2ZWNwLCBYTE9HX1JFR19UWVBFX0lBVFRSX0xPQ0FMKTsKKwkJCXZlY3AtPmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfSUFUVFJfTE9DQUw7CiAJCQl2ZWNwKys7CiAJCQludmVjcysrOwogCQkJaWlwLT5pbGlfZm9ybWF0LmlsZl9hc2l6ZSA9ICh1bnNpZ25lZClkYXRhX2J5dGVzOwpAQCAtNjAyLDMzICs2MDIsMjAgQEAKIAogCWlmICgheGZzX2lmbG9ja19ub3dhaXQoaXApKSB7CiAJCS8qCi0JCSAqIElmIHNvbWVvbmUgZWxzZSBpc24ndCBhbHJlYWR5IHRyeWluZyB0byBwdXNoIHRoZSBpbm9kZQotCQkgKiBidWZmZXIsIHdlIGdldCB0byBkbyBpdC4KKwkJICogaW5vZGUgaGFzIGFscmVhZHkgYmVlbiBmbHVzaGVkIHRvIHRoZSBiYWNraW5nIGJ1ZmZlciwKKwkJICogbGVhdmUgaXQgbG9ja2VkIGluIHNoYXJlZCBtb2RlLCBwdXNoYnVmIHJvdXRpbmUgd2lsbAorCQkgKiB1bmxvY2sgaXQuCiAJCSAqLwotCQlpZiAoaWlwLT5pbGlfcHVzaGJ1Zl9mbGFnID09IDApIHsKLQkJCWlpcC0+aWxpX3B1c2hidWZfZmxhZyA9IDE7Ci0jaWZkZWYgREVCVUcKLQkJCWlpcC0+aWxpX3B1c2hfb3duZXIgPSBjdXJyZW50X3BpZCgpOwotI2VuZGlmCi0JCQkvKgotCQkJICogSW5vZGUgaXMgbGVmdCBsb2NrZWQgaW4gc2hhcmVkIG1vZGUuCi0JCQkgKiBQdXNoYnVmIHJvdXRpbmUgZ2V0cyB0byB1bmxvY2sgaXQuCi0JCQkgKi8KLQkJCXJldHVybiBYRlNfSVRFTV9QVVNIQlVGOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIFdlIGhvbGQgdGhlIEFJTCBsb2NrLCBzbyB3ZSBtdXN0IHNwZWNpZnkgdGhlCi0JCQkgKiBOT05PVElGWSBmbGFnIHNvIHRoYXQgd2Ugd29uJ3QgZG91YmxlIHRyaXAuCi0JCQkgKi8KLQkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEfFhGU19JVU5MT0NLX05PTk9USUZZKTsKLQkJCXJldHVybiBYRlNfSVRFTV9GTFVTSElORzsKLQkJfQotCQkvKiBOT1RSRUFDSEVEICovCisJCXJldHVybiBYRlNfSVRFTV9QVVNIQlVGOwogCX0KIAogCS8qIFN0YWxlIGl0ZW1zIHNob3VsZCBmb3JjZSBvdXQgdGhlIGljbG9nICovCiAJaWYgKGlwLT5pX2ZsYWdzICYgWEZTX0lTVEFMRSkgewogCQl4ZnNfaWZ1bmxvY2soaXApOworCQkvKgorCQkgKiB3ZSBob2xkIHRoZSBBSUwgbG9jayAtIG5vdGlmeSB0aGUgdW5sb2NrIHJvdXRpbmUgb2YgdGhpcworCQkgKiBzbyBpdCBkb2Vzbid0IHRyeSB0byBnZXQgdGhlIGxvY2sgYWdhaW4uCisJCSAqLwogCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRHxYRlNfSVVOTE9DS19OT05PVElGWSk7CiAJCXJldHVybiBYRlNfSVRFTV9QSU5ORUQ7CiAJfQpAQCAtNzQ2LDExICs3MzMsOCBAQAogICogVGhpcyBnZXRzIGNhbGxlZCBieSB4ZnNfdHJhbnNfcHVzaF9haWwoKSwgd2hlbiBJT1BfVFJZTE9DSwogICogZmFpbGVkIHRvIGdldCB0aGUgaW5vZGUgZmx1c2ggbG9jayBidXQgZGlkIGdldCB0aGUgaW5vZGUgbG9ja2VkIFNIQVJFRC4KICAqIEhlcmUgd2UncmUgdHJ5aW5nIHRvIHNlZSBpZiB0aGUgaW5vZGUgYnVmZmVyIGlzIGluY29yZSwgYW5kIGlmIHNvIHdoZXRoZXIgaXQncwotICogbWFya2VkIGRlbGF5ZWQgd3JpdGUuIElmIHRoYXQncyB0aGUgY2FzZSwgd2UnbGwgaW5pdGlhdGUgYSBiYXdyaXRlIG9uIHRoYXQKLSAqIGJ1ZmZlciB0byBleHBlZGl0ZSB0aGUgcHJvY2Vzcy4KLSAqCi0gKiBXZSBhcmVuJ3QgaG9sZGluZyB0aGUgQUlMIGxvY2sgKG9yIHRoZSBmbHVzaCBsb2NrKSB3aGVuIHRoaXMgZ2V0cyBjYWxsZWQsCi0gKiBzbyBpdCBpcyBpbmhlcmVudGx5IHJhY2UteS4KKyAqIG1hcmtlZCBkZWxheWVkIHdyaXRlLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHdlJ2xsIHByb21vdGUgaXQgYW5kIHRoYXQgd2lsbAorICogYWxsb3cgdGhlIGNhbGxlciB0byB3cml0ZSB0aGUgYnVmZmVyIGJ5IHRyaWdnZXJpbmcgdGhlIHhmc2J1ZmQgdG8gcnVuLgogICovCiBTVEFUSUMgdm9pZAogeGZzX2lub2RlX2l0ZW1fcHVzaGJ1ZigKQEAgLTc1OSw4MiArNzQzLDMwIEBACiAJeGZzX2lub2RlX3QJKmlwOwogCXhmc19tb3VudF90CSptcDsKIAl4ZnNfYnVmX3QJKmJwOwotCXVpbnQJCWRvcHVzaDsKIAogCWlwID0gaWlwLT5pbGlfaW5vZGU7Ci0KIAlBU1NFUlQoeGZzX2lzaWxvY2tlZChpcCwgWEZTX0lMT0NLX1NIQVJFRCkpOwogCiAJLyoKLQkgKiBUaGUgaWxpX3B1c2hidWZfZmxhZyBrZWVwcyBvdGhlcnMgZnJvbQotCSAqIHRyeWluZyB0byBkdXBsaWNhdGUgb3VyIGVmZm9ydC4KLQkgKi8KLQlBU1NFUlQoaWlwLT5pbGlfcHVzaGJ1Zl9mbGFnICE9IDApOwotCUFTU0VSVChpaXAtPmlsaV9wdXNoX293bmVyID09IGN1cnJlbnRfcGlkKCkpOwotCi0JLyoKIAkgKiBJZiBhIGZsdXNoIGlzIG5vdCBpbiBwcm9ncmVzcyBhbnltb3JlLCBjaGFuY2VzIGFyZSB0aGF0IHRoZQogCSAqIGlub2RlIHdhcyB0YWtlbiBvZmYgdGhlIEFJTC4gU28sIGp1c3QgZ2V0IG91dC4KIAkgKi8KIAlpZiAoY29tcGxldGlvbl9kb25lKCZpcC0+aV9mbHVzaCkgfHwKIAkgICAgKChpaXAtPmlsaV9pdGVtLmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkgPT0gMCkpIHsKLQkJaWlwLT5pbGlfcHVzaGJ1Zl9mbGFnID0gMDsKIAkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwogCQlyZXR1cm47CiAJfQogCiAJbXAgPSBpcC0+aV9tb3VudDsKIAlicCA9IHhmc19pbmNvcmUobXAtPm1fZGRldl90YXJncCwgaWlwLT5pbGlfZm9ybWF0LmlsZl9ibGtubywKLQkJICAgIGlpcC0+aWxpX2Zvcm1hdC5pbGZfbGVuLCBYRlNfSU5DT1JFX1RSWUxPQ0spOworCQkgICAgaWlwLT5pbGlfZm9ybWF0LmlsZl9sZW4sIFhCRl9UUllMT0NLKTsKIAotCWlmIChicCAhPSBOVUxMKSB7Ci0JCWlmIChYRlNfQlVGX0lTREVMQVlXUklURShicCkpIHsKLQkJCS8qCi0JCQkgKiBXZSB3ZXJlIHJhY2luZyB3aXRoIGlmbHVzaCBiZWNhdXNlIHdlIGRvbid0IGhvbGQKLQkJCSAqIHRoZSBBSUwgbG9jayBvciB0aGUgZmx1c2ggbG9jay4gSG93ZXZlciwgYXQgdGhpcyBwb2ludCwKLQkJCSAqIHdlIGhhdmUgdGhlIGJ1ZmZlciwgYW5kIHdlIGtub3cgdGhhdCBpdCdzIGRpcnR5LgotCQkJICogU28sIGl0J3MgcG9zc2libGUgdGhhdCBpZmx1c2ggcmFjZWQgd2l0aCB1cywgYW5kCi0JCQkgKiB0aGlzIGl0ZW0gaXMgYWxyZWFkeSB0YWtlbiBvZmYgdGhlIEFJTC4KLQkJCSAqIElmIG5vdCwgd2UgY2FuIGZsdXNoIGl0IGFzeW5jLgotCQkJICovCi0JCQlkb3B1c2ggPSAoKGlpcC0+aWxpX2l0ZW0ubGlfZmxhZ3MgJiBYRlNfTElfSU5fQUlMKSAmJgotCQkJCSAgIWNvbXBsZXRpb25fZG9uZSgmaXAtPmlfZmx1c2gpKTsKLQkJCWlpcC0+aWxpX3B1c2hidWZfZmxhZyA9IDA7Ci0JCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7Ci0KLQkJCXRyYWNlX3hmc19pbm9kZV9pdGVtX3B1c2goYnAsIF9SRVRfSVBfKTsKLQotCQkJaWYgKFhGU19CVUZfSVNQSU5ORUQoYnApKSB7Ci0JCQkJeGZzX2xvZ19mb3JjZShtcCwgKHhmc19sc25fdCkwLAotCQkJCQkgICAgICBYRlNfTE9HX0ZPUkNFKTsKLQkJCX0KLQkJCWlmIChkb3B1c2gpIHsKLQkJCQlpbnQJZXJyb3I7Ci0JCQkJZXJyb3IgPSB4ZnNfYmF3cml0ZShtcCwgYnApOwotCQkJCWlmIChlcnJvcikKLQkJCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsCi0JCSJ4ZnNfaW5vZGVfaXRlbV9wdXNoYnVmOiBwdXNoYnVmIGVycm9yICVkIG9uIGlpcCAlcCwgYnAgJXAiLAotCQkJCQkJCWVycm9yLCBpaXAsIGJwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpaXAtPmlsaV9wdXNoYnVmX2ZsYWcgPSAwOwotCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwotCQkJeGZzX2J1Zl9yZWxzZShicCk7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQkvKgotCSAqIFdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBhYm91dCByZXNldHRpbmcgcHVzaGJ1ZiBmbGFnIHRvbyBlYXJseSAoYWJvdmUpLgotCSAqIEV2ZW4gdGhvdWdoIGluIHRoZW9yeSB3ZSBjYW4gZG8gaXQgYXMgc29vbiBhcyB3ZSBoYXZlIHRoZSBidWZsb2NrLAotCSAqIHdlIGRvbid0IHdhbnQgb3RoZXJzIHRvIGJlIGRvaW5nIHdvcmsgbmVlZGxlc3NseS4gVGhleSdsbCBjb21lIHRvCi0JICogdGhpcyBmdW5jdGlvbiB0aGlua2luZyB0aGF0IHB1c2hpbmcgdGhlIGJ1ZmZlciBpcyB0aGVpcgotCSAqIHJlc3BvbnNpYmlsaXR5IG9ubHkgdG8gZmluZCB0aGF0IHRoZSBidWZmZXIgaXMgc3RpbGwgbG9ja2VkIGJ5Ci0JICogYW5vdGhlciBkb2luZyB0aGUgc2FtZSB0aGluZwotCSAqLwotCWlpcC0+aWxpX3B1c2hidWZfZmxhZyA9IDA7CiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOworCWlmICghYnApCisJCXJldHVybjsKKwlpZiAoWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKQorCQl4ZnNfYnVmX2RlbHdyaV9wcm9tb3RlKGJwKTsKKwl4ZnNfYnVmX3JlbHNlKGJwKTsKIAlyZXR1cm47CiB9CiAKQEAgLTg2NywxMCArNzk5LDE0IEBACiAJICAgICAgIGlpcC0+aWxpX2Zvcm1hdC5pbGZfZmllbGRzICE9IDApOwogCiAJLyoKLQkgKiBXcml0ZSBvdXQgdGhlIGlub2RlLiAgVGhlIGNvbXBsZXRpb24gcm91dGluZSAoJ2lmbHVzaF9kb25lJykgd2lsbAotCSAqIHB1bGwgaXQgZnJvbSB0aGUgQUlMLCBtYXJrIGl0IGNsZWFuLCB1bmxvY2sgdGhlIGZsdXNoIGxvY2suCisJICogUHVzaCB0aGUgaW5vZGUgdG8gaXQncyBiYWNraW5nIGJ1ZmZlci4gVGhpcyB3aWxsIG5vdCByZW1vdmUgdGhlCisJICogaW5vZGUgZnJvbSB0aGUgQUlMIC0gYSBmdXJ0aGVyIHB1c2ggd2lsbCBiZSByZXF1aXJlZCB0byB0cmlnZ2VyIGEKKwkgKiBidWZmZXIgcHVzaC4gSG93ZXZlciwgdGhpcyBhbGxvd3MgYWxsIHRoZSBkaXJ0eSBpbm9kZXMgdG8gYmUgcHVzaGVkCisJICogdG8gdGhlIGJ1ZmZlciBiZWZvcmUgaXQgaXMgcHVzaGVkIHRvIGRpc2suIFRIZSBidWZmZXIgSU8gY29tcGxldGlvbgorCSAqIHdpbGwgcHVsbCB0aCBlaW5vZGUgZnJvbSB0aGUgQUlMLCBtYXJrIGl0IGNsZWFuIGFuZCB1bmxvY2sgdGhlIGZsdXNoCisJICogbG9jay4KIAkgKi8KLQkodm9pZCkgeGZzX2lmbHVzaChpcCwgWEZTX0lGTFVTSF9BU1lOQyk7CisJKHZvaWQpIHhmc19pZmx1c2goaXAsIDApOwogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKIAogCXJldHVybjsKQEAgLTkzNCw3ICs4NzAsNiBAQAogCS8qCiAJICAgV2UgaGF2ZSB6ZXJvZWQgbWVtb3J5LiBObyBuZWVkIC4uLgogCSAgIGlpcC0+aWxpX2V4dGVudHNfYnVmID0gTlVMTDsKLQkgICBpaXAtPmlsaV9wdXNoYnVmX2ZsYWcgPSAwOwogCSAqLwogCiAJaWlwLT5pbGlfZm9ybWF0LmlsZl90eXBlID0gWEZTX0xJX0lOT0RFOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmggYi9mcy94ZnMveGZzX2lub2RlX2l0ZW0uaAppbmRleCBjYzhkZjFhLi45YTQ2Nzk1IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uaAorKysgYi9mcy94ZnMveGZzX2lub2RlX2l0ZW0uaApAQCAtMTQ0LDEyICsxNDQsNiBAQAogCQkJCQkJICAgICAgZGF0YSBleHRzICovCiAJc3RydWN0IHhmc19ibWJ0X3JlYwkqaWxpX2FleHRlbnRzX2J1ZjsgLyogYXJyYXkgb2YgbG9nZ2VkCiAJCQkJCQkgICAgICBhdHRyIGV4dHMgKi8KLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICBpbGlfcHVzaGJ1Zl9mbGFnOyAgLyogb25lIGJpdCB1c2VkIGluIHB1c2hfYWlsICovCi0KLSNpZmRlZiBERUJVRwotCXVpbnQ2NF90ICAgICAgICAgICAgICAgIGlsaV9wdXNoX293bmVyOyAgICAvKiBvbmUgd2hvIHNldHMgcHVzaGJ1Zl9mbGFnCi0JCQkJCQkgICAgICBhYm92ZSBnZXRzIHRvIHB1c2ggdGhlIGJ1ZiAqLwotI2VuZGlmCiAjaWZkZWYgWEZTX1RSQU5TX0RFQlVHCiAJaW50CQkJaWxpX3Jvb3Rfc2l6ZTsKIAljaGFyCQkJKmlsaV9vcmlnX3Jvb3Q7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2l0YWJsZS5jIGIvZnMveGZzL3hmc19pdGFibGUuYwppbmRleCA2MmVmYWIyLi4zYWYwMjMxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2l0YWJsZS5jCisrKyBiL2ZzL3hmcy94ZnNfaXRhYmxlLmMKQEAgLTQwOCw4ICs0MDgsMTAgQEAKIAkJKFhGU19JTk9ERV9DTFVTVEVSX1NJWkUobXApID4+IG1wLT5tX3NiLnNiX2lub2RlbG9nKTsKIAluaW1hc2sgPSB+KG5pY2x1c3RlciAtIDEpOwogCW5iY2x1c3RlciA9IG5pY2x1c3RlciA+PiBtcC0+bV9zYi5zYl9pbm9wYmxvZzsKLQlpcmJ1ZiA9IGttZW1femFsbG9jX2dyZWVkeSgmaXJic2l6ZSwgUEFHRV9TSVpFLCBQQUdFX1NJWkUgKiA0LAotCQkJCSAgIEtNX1NMRUVQIHwgS01fTUFZRkFJTCB8IEtNX0xBUkdFKTsKKwlpcmJ1ZiA9IGttZW1femFsbG9jX2dyZWVkeSgmaXJic2l6ZSwgUEFHRV9TSVpFLCBQQUdFX1NJWkUgKiA0KTsKKwlpZiAoIWlyYnVmKQorCQlyZXR1cm4gRU5PTUVNOworCiAJbmlyYnVmID0gaXJic2l6ZSAvIHNpemVvZigqaXJidWYpOwogCiAJLyoKQEAgLTQyMCw5ICs0MjIsNyBAQAogCXdoaWxlIChYRlNfQlVMS1NUQVRfVUJMRUZUKHVibGVmdCkgJiYgYWdubyA8IG1wLT5tX3NiLnNiX2FnY291bnQpIHsKIAkJY29uZF9yZXNjaGVkKCk7CiAJCWJwID0gTlVMTDsKLQkJZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCQllcnJvciA9IHhmc19pYWxsb2NfcmVhZF9hZ2kobXAsIE5VTEwsIGFnbm8sICZhZ2JwKTsKLQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKIAkJaWYgKGVycm9yKSB7CiAJCQkvKgogCQkJICogU2tpcCB0aGlzIGFsbG9jYXRpb24gZ3JvdXAgYW5kIGdvIHRvIHRoZSBuZXh0IG9uZS4KQEAgLTcyOSw3ICs3MjksNyBAQAogCS8qCiAJICogRG9uZSwgd2UncmUgZWl0aGVyIG91dCBvZiBmaWxlc3lzdGVtIG9yIHNwYWNlIHRvIHB1dCB0aGUgZGF0YS4KIAkgKi8KLQlrbWVtX2ZyZWUoaXJidWYpOworCWttZW1fZnJlZV9sYXJnZShpcmJ1Zik7CiAJKnViY291bnRwID0gdWJlbGVtOwogCS8qCiAJICogRm91bmQgc29tZSBpbm9kZXMsIHJldHVybiB0aGVtIG5vdyBhbmQgcmV0dXJuIHRoZSBlcnJvciBuZXh0IHRpbWUuCkBAIC04NDksOSArODQ5LDcgQEAKIAlhZ2JwID0gTlVMTDsKIAl3aGlsZSAobGVmdCA+IDAgJiYgYWdubyA8IG1wLT5tX3NiLnNiX2FnY291bnQpIHsKIAkJaWYgKGFnYnAgPT0gTlVMTCkgewotCQkJZG93bl9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCQkJZXJyb3IgPSB4ZnNfaWFsbG9jX3JlYWRfYWdpKG1wLCBOVUxMLCBhZ25vLCAmYWdicCk7Ci0JCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwogCQkJaWYgKGVycm9yKSB7CiAJCQkJLyoKIAkJCQkgKiBJZiB3ZSBjYW4ndCByZWFkIHRoZSBBR0kgb2YgdGhpcyBhZywKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nLmMgYi9mcy94ZnMveGZzX2xvZy5jCmluZGV4IDYwMGI1YjAuLjRmMTZiZTQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nLmMKKysrIGIvZnMveGZzL3hmc19sb2cuYwpAQCAtNTAsNyArNTAsNiBAQAogCSAgKG9mZikgKz0gKGJ5dGVzKTt9CiAKIC8qIExvY2FsIG1pc2NlbGxhbmVvdXMgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotU1RBVElDIGludAkgeGxvZ19iZHN0cmF0X2NiKHN0cnVjdCB4ZnNfYnVmICopOwogU1RBVElDIGludAkgeGxvZ19jb21taXRfcmVjb3JkKHhmc19tb3VudF90ICptcCwgeGxvZ190aWNrZXRfdCAqdGlja2V0LAogCQkJCSAgICB4bG9nX2luX2NvcmVfdCAqKiwgeGZzX2xzbl90ICopOwogU1RBVElDIHhsb2dfdCAqICB4bG9nX2FsbG9jX2xvZyh4ZnNfbW91bnRfdAkqbXAsCkBAIC04MCwxMSArNzksNiBAQAogU1RBVElDIHZvaWQgeGxvZ19zdGF0ZV9zd2l0Y2hfaWNsb2dzKHhsb2dfdAkJKmxvZywKIAkJCQkgICAgIHhsb2dfaW5fY29yZV90ICppY2xvZywKIAkJCQkgICAgIGludAkJZXZlbnR1YWxfc2l6ZSk7Ci1TVEFUSUMgaW50ICB4bG9nX3N0YXRlX3N5bmMoeGxvZ190CQkJKmxvZywKLQkJCSAgICB4ZnNfbHNuX3QgCQkJbHNuLAotCQkJICAgIHVpbnQJCQlmbGFncywKLQkJCSAgICBpbnQJCQkJKmxvZ19mbHVzaGVkKTsKLVNUQVRJQyBpbnQgIHhsb2dfc3RhdGVfc3luY19hbGwoeGxvZ190ICpsb2csIHVpbnQgZmxhZ3MsIGludCAqbG9nX2ZsdXNoZWQpOwogU1RBVElDIHZvaWQgeGxvZ19zdGF0ZV93YW50X3N5bmMoeGxvZ190CSpsb2csIHhsb2dfaW5fY29yZV90ICppY2xvZyk7CiAKIC8qIGxvY2FsIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIGdyYW50IGhlYWQgKi8KQEAgLTI5Nyw2NSArMjkxLDYgQEAKIAlyZXR1cm4gbHNuOwogfQkvKiB4ZnNfbG9nX2RvbmUgKi8KIAotCi0vKgotICogRm9yY2UgdGhlIGluLWNvcmUgbG9nIHRvIGRpc2suICBJZiBmbGFncyA9PSBYRlNfTE9HX1NZTkMsCi0gKgl0aGUgZm9yY2UgaXMgZG9uZSBzeW5jaHJvbm91c2x5LgotICoKLSAqIEFzeW5jaHJvbm91cyBmb3JjZXMgYXJlIGltcGxlbWVudGVkIGJ5IHNldHRpbmcgdGhlIFdBTlRfU1lOQwotICogYml0IGluIHRoZSBhcHByb3ByaWF0ZSBpbi1jb3JlIGxvZyBhbmQgdGhlbiByZXR1cm5pbmcuCi0gKgotICogU3luY2hyb25vdXMgZm9yY2VzIGFyZSBpbXBsZW1lbnRlZCB3aXRoIGEgc2lnbmFsIHZhcmlhYmxlLiBBbGwgY2FsbGVycwotICogdG8gZm9yY2UgYSBnaXZlbiBsc24gdG8gZGlzayB3aWxsIHdhaXQgb24gYSB0aGUgc3YgYXR0YWNoZWQgdG8gdGhlCi0gKiBzcGVjaWZpYyBpbi1jb3JlIGxvZy4gIFdoZW4gZ2l2ZW4gaW4tY29yZSBsb2cgZmluYWxseSBjb21wbGV0ZXMgaXRzCi0gKiB3cml0ZSB0byBkaXNrLCB0aGF0IHRocmVhZCB3aWxsIHdha2UgdXAgYWxsIHRocmVhZHMgd2FpdGluZyBvbiB0aGUKLSAqIHN2LgotICovCi1pbnQKLV94ZnNfbG9nX2ZvcmNlKAotCXhmc19tb3VudF90CSptcCwKLQl4ZnNfbHNuX3QJbHNuLAotCXVpbnQJCWZsYWdzLAotCWludAkJKmxvZ19mbHVzaGVkKQotewotCXhsb2dfdAkJKmxvZyA9IG1wLT5tX2xvZzsKLQlpbnQJCWR1bW15OwotCi0JaWYgKCFsb2dfZmx1c2hlZCkKLQkJbG9nX2ZsdXNoZWQgPSAmZHVtbXk7Ci0KLQlBU1NFUlQoZmxhZ3MgJiBYRlNfTE9HX0ZPUkNFKTsKLQotCVhGU19TVEFUU19JTkMoeHNfbG9nX2ZvcmNlKTsKLQotCWlmIChsb2ctPmxfZmxhZ3MgJiBYTE9HX0lPX0VSUk9SKQotCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci0JaWYgKGxzbiA9PSAwKQotCQlyZXR1cm4geGxvZ19zdGF0ZV9zeW5jX2FsbChsb2csIGZsYWdzLCBsb2dfZmx1c2hlZCk7Ci0JZWxzZQotCQlyZXR1cm4geGxvZ19zdGF0ZV9zeW5jKGxvZywgbHNuLCBmbGFncywgbG9nX2ZsdXNoZWQpOwotfQkvKiBfeGZzX2xvZ19mb3JjZSAqLwotCi0vKgotICogV3JhcHBlciBmb3IgX3hmc19sb2dfZm9yY2UoKSwgdG8gYmUgdXNlZCB3aGVuIGNhbGxlciBkb2Vzbid0IGNhcmUKLSAqIGFib3V0IGVycm9ycyBvciB3aGV0aGVyIHRoZSBsb2cgd2FzIGZsdXNoZWQgb3Igbm90LiBUaGlzIGlzIHRoZSBub3JtYWwKLSAqIGludGVyZmFjZSB0byB1c2Ugd2hlbiB0cnlpbmcgdG8gdW5waW4gaXRlbXMgb3IgbW92ZSB0aGUgbG9nIGZvcndhcmQuCi0gKi8KLXZvaWQKLXhmc19sb2dfZm9yY2UoCi0JeGZzX21vdW50X3QJKm1wLAotCXhmc19sc25fdAlsc24sCi0JdWludAkJZmxhZ3MpCi17Ci0JaW50CWVycm9yOwotCWVycm9yID0gX3hmc19sb2dfZm9yY2UobXAsIGxzbiwgZmxhZ3MsIE5VTEwpOwotCWlmIChlcnJvcikgewotCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwgInhmc19sb2dfZm9yY2U6ICIKLQkJCSJlcnJvciAlZCByZXR1cm5lZC4iLCBlcnJvcik7Ci0JfQotfQotCi0KIC8qCiAgKiBBdHRhY2hlcyBhIG5ldyBpY2xvZyBJL08gY29tcGxldGlvbiBjYWxsYmFjayByb3V0aW5lIGR1cmluZwogICogdHJhbnNhY3Rpb24gY29tbWl0LiAgSWYgdGhlIGxvZyBpcyBpbiBlcnJvciBzdGF0ZSwgYSBub24temVybwpAQCAtNjAyLDcgKzUzNyw3IEBACiAJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkKIAkJcmV0dXJuIDA7CiAKLQllcnJvciA9IF94ZnNfbG9nX2ZvcmNlKG1wLCAwLCBYRlNfTE9HX0ZPUkNFfFhGU19MT0dfU1lOQywgTlVMTCk7CisJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShtcCwgWEZTX0xPR19TWU5DLCBOVUxMKTsKIAlBU1NFUlQoZXJyb3IgfHwgIShYTE9HX0ZPUkNFRF9TSFVURE9XTihsb2cpKSk7CiAKICNpZmRlZiBERUJVRwpAQCAtNjE4LDcgKzU1Myw3IEBACiAJaWYgKCEgKFhMT0dfRk9SQ0VEX1NIVVRET1dOKGxvZykpKSB7CiAJCXJlZ1swXS5pX2FkZHIgPSAodm9pZCopJm1hZ2ljOwogCQlyZWdbMF0uaV9sZW4gID0gc2l6ZW9mKG1hZ2ljKTsKLQkJWExPR19WRUNfU0VUX1RZUEUoJnJlZ1swXSwgWExPR19SRUdfVFlQRV9VTk1PVU5UKTsKKwkJcmVnWzBdLmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfVU5NT1VOVDsKIAogCQllcnJvciA9IHhmc19sb2dfcmVzZXJ2ZShtcCwgNjAwLCAxLCAmdGljLAogCQkJCQlYRlNfTE9HLCAwLCBYTE9HX1VOTU9VTlRfUkVDX1RZUEUpOwpAQCAtOTg4LDM1ICs5MjMsNiBAQAogfQkvKiB4bG9nX2lvZG9uZSAqLwogCiAvKgotICogVGhlIGJkc3RyYXQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGxvZyBidWZzLiBUaGlzIGdpdmVzIHVzIGEgY2VudHJhbAotICogcGxhY2UgdG8gdHJhcCBidWZzIGluIGNhc2Ugd2UgZ2V0IGhpdCBieSBhIGxvZyBJL08gZXJyb3IgYW5kIG5lZWQgdG8KLSAqIHNodXRkb3duLiBBY3R1YWxseSwgaW4gcHJhY3RpY2UsIGV2ZW4gd2hlbiB3ZSBkaWRuJ3QgZ2V0IGEgbG9nIGVycm9yLAotICogd2UgdHJhbnNpdGlvbiB0aGUgaWNsb2dzIHRvIElPRVJST1Igc3RhdGUgKmFmdGVyKiBmbHVzaGluZyBhbGwgZXhpc3RpbmcKLSAqIGljbG9ncyB0byBkaXNrLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBhbnltb3JlIG5ldyB0cmFuc2FjdGlvbnMgdG8gYmUKLSAqIHN0YXJ0ZWQgb3IgY29tcGxldGVkIGFmdGVyd2FyZHMuCi0gKi8KLVNUQVRJQyBpbnQKLXhsb2dfYmRzdHJhdF9jYihzdHJ1Y3QgeGZzX2J1ZiAqYnApCi17Ci0JeGxvZ19pbl9jb3JlX3QgKmljbG9nOwotCi0JaWNsb2cgPSBYRlNfQlVGX0ZTUFJJVkFURShicCwgeGxvZ19pbl9jb3JlX3QgKik7Ci0KLQlpZiAoKGljbG9nLT5pY19zdGF0ZSAmIFhMT0dfU1RBVEVfSU9FUlJPUikgPT0gMCkgewotCSAgLyogbm90ZSBmb3IgaXJpeCBic3RyYXQgd2lsbCBuZWVkICBzdHJ1Y3QgYmRldnN3IHBhc3NlZAotCSAgICogRml4IHRoZSBmb2xsb3dpbmcgbWFjcm8gaWYgdGhlIGNvZGUgZXZlciBpcyBtZXJnZWQKLQkgICAqLwotCSAgICBYRlNfYmRzdHJhdChicCk7Ci0JCXJldHVybiAwOwotCX0KLQotCVhGU19CVUZfRVJST1IoYnAsIEVJTyk7Ci0JWEZTX0JVRl9TVEFMRShicCk7Ci0JeGZzX2Jpb2RvbmUoYnApOwotCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLX0KLQotLyoKICAqIFJldHVybiBzaXplIG9mIGVhY2ggaW4tY29yZSBsb2cgcmVjb3JkIGJ1ZmZlci4KICAqCiAgKiBBbGwgbWFjaGluZXMgZ2V0IDggeCAzMmtCIGJ1ZmZlcnMgYnkgZGVmYXVsdCwgdW5sZXNzIHR1bmVkIG90aGVyd2lzZS4KQEAgLTExNTgsNyArMTA2NCw2IEBACiAJaWYgKCFicCkKIAkJZ290byBvdXRfZnJlZV9sb2c7CiAJWEZTX0JVRl9TRVRfSU9ET05FX0ZVTkMoYnAsIHhsb2dfaW9kb25lKTsKLQlYRlNfQlVGX1NFVF9CRFNUUkFUX0ZVTkMoYnAsIHhsb2dfYmRzdHJhdF9jYik7CiAJWEZTX0JVRl9TRVRfRlNQUklWQVRFMihicCwgKHVuc2lnbmVkIGxvbmcpMSk7CiAJQVNTRVJUKFhGU19CVUZfSVNCVVNZKGJwKSk7CiAJQVNTRVJUKFhGU19CVUZfVkFMVVNFTUEoYnApIDw9IDApOwpAQCAtMTE5Niw3ICsxMTAxLDYgQEAKIAkJaWYgKCFYRlNfQlVGX0NQU0VNQShicCkpCiAJCQlBU1NFUlQoMCk7CiAJCVhGU19CVUZfU0VUX0lPRE9ORV9GVU5DKGJwLCB4bG9nX2lvZG9uZSk7Ci0JCVhGU19CVUZfU0VUX0JEU1RSQVRfRlVOQyhicCwgeGxvZ19iZHN0cmF0X2NiKTsKIAkJWEZTX0JVRl9TRVRfRlNQUklWQVRFMihicCwgKHVuc2lnbmVkIGxvbmcpMSk7CiAJCWljbG9nLT5pY19icCA9IGJwOwogCQlpY2xvZy0+aWNfZGF0YSA9IGJwLT5iX2FkZHI7CkBAIC0xMjY4LDcgKzExNzIsNyBAQAogCiAJcmVnWzBdLmlfYWRkciA9IE5VTEw7CiAJcmVnWzBdLmlfbGVuID0gMDsKLQlYTE9HX1ZFQ19TRVRfVFlQRSgmcmVnWzBdLCBYTE9HX1JFR19UWVBFX0NPTU1JVCk7CisJcmVnWzBdLmlfdHlwZSA9IFhMT0dfUkVHX1RZUEVfQ09NTUlUOwogCiAJQVNTRVJUX0FMV0FZUyhpY2xvZyk7CiAJaWYgKChlcnJvciA9IHhsb2dfd3JpdGUobXAsIHJlZywgMSwgdGlja2V0LCBjb21taXRsc25wLApAQCAtMTM0Myw2ICsxMjQ3LDM3IEBACiAJICAgIHhmc190cmFuc19haWxfcHVzaChsb2ctPmxfYWlscCwgdGhyZXNob2xkX2xzbik7CiB9CS8qIHhsb2dfZ3JhbnRfcHVzaF9haWwgKi8KIAorLyoKKyAqIFRoZSBiZHN0cmF0IGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBsb2cgYnVmcy4gVGhpcyBnaXZlcyB1cyBhIGNlbnRyYWwKKyAqIHBsYWNlIHRvIHRyYXAgYnVmcyBpbiBjYXNlIHdlIGdldCBoaXQgYnkgYSBsb2cgSS9PIGVycm9yIGFuZCBuZWVkIHRvCisgKiBzaHV0ZG93bi4gQWN0dWFsbHksIGluIHByYWN0aWNlLCBldmVuIHdoZW4gd2UgZGlkbid0IGdldCBhIGxvZyBlcnJvciwKKyAqIHdlIHRyYW5zaXRpb24gdGhlIGljbG9ncyB0byBJT0VSUk9SIHN0YXRlICphZnRlciogZmx1c2hpbmcgYWxsIGV4aXN0aW5nCisgKiBpY2xvZ3MgdG8gZGlzay4gVGhpcyBpcyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgYW55bW9yZSBuZXcgdHJhbnNhY3Rpb25zIHRvIGJlCisgKiBzdGFydGVkIG9yIGNvbXBsZXRlZCBhZnRlcndhcmRzLgorICovCitTVEFUSUMgaW50Cit4bG9nX2Jkc3RyYXQoCisJc3RydWN0IHhmc19idWYJCSpicCkKK3sKKwlzdHJ1Y3QgeGxvZ19pbl9jb3JlCSppY2xvZzsKKworCWljbG9nID0gWEZTX0JVRl9GU1BSSVZBVEUoYnAsIHhsb2dfaW5fY29yZV90ICopOworCWlmIChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpIHsKKwkJWEZTX0JVRl9FUlJPUihicCwgRUlPKTsKKwkJWEZTX0JVRl9TVEFMRShicCk7CisJCXhmc19iaW9kb25lKGJwKTsKKwkJLyoKKwkJICogSXQgd291bGQgc2VlbSBsb2dpY2FsIHRvIHJldHVybiBFSU8gaGVyZSwgYnV0IHdlIHJlbHkgb24KKwkJICogdGhlIGxvZyBzdGF0ZSBtYWNoaW5lIHRvIHByb3BhZ2F0ZSBJL08gZXJyb3JzIGluc3RlYWQgb2YKKwkJICogZG9pbmcgaXQgaGVyZS4KKwkJICovCisJCXJldHVybiAwOworCX0KKworCWJwLT5iX2ZsYWdzIHw9IF9YQkZfUlVOX1FVRVVFUzsKKwl4ZnNfYnVmX2lvcmVxdWVzdChicCk7CisJcmV0dXJuIDA7Cit9CiAKIC8qCiAgKiBGbHVzaCBvdXQgdGhlIGluLWNvcmUgbG9nIChpY2xvZykgdG8gdGhlIG9uLWRpc2sgbG9nIGluIGFuIGFzeW5jaHJvbm91cyAKQEAgLTE0NjIsNyArMTM5Nyw3IEBACiAJICovCiAJWEZTX0JVRl9XUklURShicCk7CiAKLQlpZiAoKGVycm9yID0gWEZTX2J3cml0ZShicCkpKSB7CisJaWYgKChlcnJvciA9IHhsb2dfYmRzdHJhdChicCkpKSB7CiAJCXhmc19pb2Vycm9yX2FsZXJ0KCJ4bG9nX3N5bmMiLCBsb2ctPmxfbXAsIGJwLAogCQkJCSAgWEZTX0JVRl9BRERSKGJwKSk7CiAJCXJldHVybiBlcnJvcjsKQEAgLTE1MDIsNyArMTQzNyw3IEBACiAJCS8qIGFjY291bnQgZm9yIGludGVybmFsIGxvZyB3aGljaCBkb2Vzbid0IHN0YXJ0IGF0IGJsb2NrICMwICovCiAJCVhGU19CVUZfU0VUX0FERFIoYnAsIFhGU19CVUZfQUREUihicCkgKyBsb2ctPmxfbG9nQkJzdGFydCk7CiAJCVhGU19CVUZfV1JJVEUoYnApOwotCQlpZiAoKGVycm9yID0gWEZTX2J3cml0ZShicCkpKSB7CisJCWlmICgoZXJyb3IgPSB4bG9nX2Jkc3RyYXQoYnApKSkgewogCQkJeGZzX2lvZXJyb3JfYWxlcnQoInhsb2dfc3luYyAoc3BsaXQpIiwgbG9nLT5sX21wLAogCQkJCQkgIGJwLCBYRlNfQlVGX0FERFIoYnApKTsKIAkJCXJldHVybiBlcnJvcjsKQEAgLTI4NTQsNyArMjc4OSw2IEBACiAJbG9nLT5sX2ljbG9nID0gaWNsb2ctPmljX25leHQ7CiB9CS8qIHhsb2dfc3RhdGVfc3dpdGNoX2ljbG9ncyAqLwogCi0KIC8qCiAgKiBXcml0ZSBvdXQgYWxsIGRhdGEgaW4gdGhlIGluLWNvcmUgbG9nIGFzIG9mIHRoaXMgZXhhY3QgbW9tZW50IGluIHRpbWUuCiAgKgpAQCAtMjg4MiwxMSArMjgxNiwxNyBAQAogICoJICAgYikgd2hlbiB3ZSByZXR1cm4gZnJvbSBmbHVzaGluZyBvdXQgdGhpcyBpY2xvZywgaXQgaXMgc3RpbGwKICAqCQlub3QgaW4gdGhlIGFjdGl2ZSBub3IgZGlydHkgc3RhdGUuCiAgKi8KLVNUQVRJQyBpbnQKLXhsb2dfc3RhdGVfc3luY19hbGwoeGxvZ190ICpsb2csIHVpbnQgZmxhZ3MsIGludCAqbG9nX2ZsdXNoZWQpCitpbnQKK194ZnNfbG9nX2ZvcmNlKAorCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAorCXVpbnQJCQlmbGFncywKKwlpbnQJCQkqbG9nX2ZsdXNoZWQpCiB7Ci0JeGxvZ19pbl9jb3JlX3QJKmljbG9nOwotCXhmc19sc25fdAlsc247CisJc3RydWN0IGxvZwkJKmxvZyA9IG1wLT5tX2xvZzsKKwlzdHJ1Y3QgeGxvZ19pbl9jb3JlCSppY2xvZzsKKwl4ZnNfbHNuX3QJCWxzbjsKKworCVhGU19TVEFUU19JTkMoeHNfbG9nX2ZvcmNlKTsKIAogCXNwaW5fbG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAKQEAgLTI5MzIsNyArMjg3Miw5IEBACiAKIAkJCQlpZiAoeGxvZ19zdGF0ZV9yZWxlYXNlX2ljbG9nKGxvZywgaWNsb2cpKQogCQkJCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci0JCQkJKmxvZ19mbHVzaGVkID0gMTsKKworCQkJCWlmIChsb2dfZmx1c2hlZCkKKwkJCQkJKmxvZ19mbHVzaGVkID0gMTsKIAkJCQlzcGluX2xvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwogCQkJCWlmIChiZTY0X3RvX2NwdShpY2xvZy0+aWNfaGVhZGVyLmhfbHNuKSA9PSBsc24gJiYKIAkJCQkgICAgaWNsb2ctPmljX3N0YXRlICE9IFhMT0dfU1RBVEVfRElSVFkpCkBAIC0yOTc2LDE5ICsyOTE4LDM3IEBACiAJCSAqLwogCQlpZiAoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKQogCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwotCQkqbG9nX2ZsdXNoZWQgPSAxOwotCisJCWlmIChsb2dfZmx1c2hlZCkKKwkJCSpsb2dfZmx1c2hlZCA9IDE7CiAJfSBlbHNlIHsKIAogbm9fc2xlZXA6CiAJCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKIAl9CiAJcmV0dXJuIDA7Ci19CS8qIHhsb2dfc3RhdGVfc3luY19hbGwgKi8KLQorfQogCiAvKgotICogVXNlZCBieSBjb2RlIHdoaWNoIGltcGxlbWVudHMgc3luY2hyb25vdXMgbG9nIGZvcmNlcy4KKyAqIFdyYXBwZXIgZm9yIF94ZnNfbG9nX2ZvcmNlKCksIHRvIGJlIHVzZWQgd2hlbiBjYWxsZXIgZG9lc24ndCBjYXJlCisgKiBhYm91dCBlcnJvcnMgb3Igd2hldGhlciB0aGUgbG9nIHdhcyBmbHVzaGVkIG9yIG5vdC4gVGhpcyBpcyB0aGUgbm9ybWFsCisgKiBpbnRlcmZhY2UgdG8gdXNlIHdoZW4gdHJ5aW5nIHRvIHVucGluIGl0ZW1zIG9yIG1vdmUgdGhlIGxvZyBmb3J3YXJkLgorICovCit2b2lkCit4ZnNfbG9nX2ZvcmNlKAorCXhmc19tb3VudF90CSptcCwKKwl1aW50CQlmbGFncykKK3sKKwlpbnQJZXJyb3I7CisKKwllcnJvciA9IF94ZnNfbG9nX2ZvcmNlKG1wLCBmbGFncywgTlVMTCk7CisJaWYgKGVycm9yKSB7CisJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLCAieGZzX2xvZ19mb3JjZTogIgorCQkJImVycm9yICVkIHJldHVybmVkLiIsIGVycm9yKTsKKwl9Cit9CisKKy8qCisgKiBGb3JjZSB0aGUgaW4tY29yZSBsb2cgdG8gZGlzayBmb3IgYSBzcGVjaWZpYyBMU04uCiAgKgogICogRmluZCBpbi1jb3JlIGxvZyB3aXRoIGxzbi4KICAqCUlmIGl0IGlzIGluIHRoZSBESVJUWSBzdGF0ZSwganVzdCByZXR1cm4uCkBAIC0yOTk2LDEwOSArMjk1NiwxNDIgQEAKICAqCQlzdGF0ZSBhbmQgZ28gdG8gc2xlZXAgb3IgcmV0dXJuLgogICoJSWYgaXQgaXMgaW4gYW55IG90aGVyIHN0YXRlLCBnbyB0byBzbGVlcCBvciByZXR1cm4uCiAgKgotICogSWYgZmlsZXN5c3RlbSBhY3Rpdml0eSBnb2VzIHRvIHplcm8sIHRoZSBpY2xvZyB3aWxsIGdldCBmbHVzaGVkIG9ubHkgYnkKLSAqIGJkZmx1c2goKS4KKyAqIFN5bmNocm9ub3VzIGZvcmNlcyBhcmUgaW1wbGVtZW50ZWQgd2l0aCBhIHNpZ25hbCB2YXJpYWJsZS4gQWxsIGNhbGxlcnMKKyAqIHRvIGZvcmNlIGEgZ2l2ZW4gbHNuIHRvIGRpc2sgd2lsbCB3YWl0IG9uIGEgdGhlIHN2IGF0dGFjaGVkIHRvIHRoZQorICogc3BlY2lmaWMgaW4tY29yZSBsb2cuICBXaGVuIGdpdmVuIGluLWNvcmUgbG9nIGZpbmFsbHkgY29tcGxldGVzIGl0cworICogd3JpdGUgdG8gZGlzaywgdGhhdCB0aHJlYWQgd2lsbCB3YWtlIHVwIGFsbCB0aHJlYWRzIHdhaXRpbmcgb24gdGhlCisgKiBzdi4KICAqLwotU1RBVElDIGludAoteGxvZ19zdGF0ZV9zeW5jKHhsb2dfdAkgICpsb2csCi0JCXhmc19sc25fdCBsc24sCi0JCXVpbnQJICBmbGFncywKLQkJaW50CSAgKmxvZ19mbHVzaGVkKQoraW50CitfeGZzX2xvZ19mb3JjZV9sc24oCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJeGZzX2xzbl90CQlsc24sCisJdWludAkJCWZsYWdzLAorCWludAkJCSpsb2dfZmx1c2hlZCkKIHsKLSAgICB4bG9nX2luX2NvcmVfdAkqaWNsb2c7Ci0gICAgaW50CQkJYWxyZWFkeV9zbGVwdCA9IDA7CisJc3RydWN0IGxvZwkJKmxvZyA9IG1wLT5tX2xvZzsKKwlzdHJ1Y3QgeGxvZ19pbl9jb3JlCSppY2xvZzsKKwlpbnQJCQlhbHJlYWR5X3NsZXB0ID0gMDsKKworCUFTU0VSVChsc24gIT0gMCk7CisKKwlYRlNfU1RBVFNfSU5DKHhzX2xvZ19mb3JjZSk7CiAKIHRyeV9hZ2FpbjoKLSAgICBzcGluX2xvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwotICAgIGljbG9nID0gbG9nLT5sX2ljbG9nOwotCi0gICAgaWYgKGljbG9nLT5pY19zdGF0ZSAmIFhMT0dfU1RBVEVfSU9FUlJPUikgewotCSAgICBzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7Ci0JICAgIHJldHVybiBYRlNfRVJST1IoRUlPKTsKLSAgICB9Ci0KLSAgICBkbyB7Ci0JaWYgKGJlNjRfdG9fY3B1KGljbG9nLT5pY19oZWFkZXIuaF9sc24pICE9IGxzbikgewotCQlpY2xvZyA9IGljbG9nLT5pY19uZXh0OwotCQljb250aW51ZTsKLQl9Ci0KLQlpZiAoaWNsb2ctPmljX3N0YXRlID09IFhMT0dfU1RBVEVfRElSVFkpIHsKKwlzcGluX2xvY2soJmxvZy0+bF9pY2xvZ2xvY2spOworCWljbG9nID0gbG9nLT5sX2ljbG9nOworCWlmIChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpIHsKIAkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwogCX0KIAotCWlmIChpY2xvZy0+aWNfc3RhdGUgPT0gWExPR19TVEFURV9BQ1RJVkUpIHsKLQkJLyoKLQkJICogV2Ugc2xlZXAgaGVyZSBpZiB3ZSBoYXZlbid0IGFscmVhZHkgc2xlcHQgKGUuZy4KLQkJICogdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBsb29rZWQgYXQgdGhlIGNvcnJlY3QKLQkJICogaWNsb2cgYnVmKSBhbmQgdGhlIGJ1ZmZlciBiZWZvcmUgdXMgaXMgZ29pbmcgdG8KLQkJICogYmUgc3luYydlZC4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IGlmIHdlCi0JCSAqIGFyZSBkb2luZyBzeW5jIHRyYW5zYWN0aW9ucyBoZXJlLCBieSB3YWl0aW5nIGZvcgotCQkgKiB0aGUgcHJldmlvdXMgSS9PIHRvIGNvbXBsZXRlLCB3ZSBjYW4gYWxsb3cgYSBmZXcKLQkJICogbW9yZSB0cmFuc2FjdGlvbnMgaW50byB0aGlzIGljbG9nIGJlZm9yZSB3ZSBjbG9zZQotCQkgKiBpdCBkb3duLgotCQkgKgotCQkgKiBPdGhlcndpc2UsIHdlIG1hcmsgdGhlIGJ1ZmZlciBXQU5UX1NZTkMsIGFuZCBidW1wCi0JCSAqIHVwIHRoZSByZWZjbnQgc28gd2UgY2FuIHJlbGVhc2UgdGhlIGxvZyAod2hpY2ggZHJvcHMKLQkJICogdGhlIHJlZiBjb3VudCkuICBUaGUgc3RhdGUgc3dpdGNoIGtlZXBzIG5ldyB0cmFuc2FjdGlvbgotCQkgKiBjb21taXRzIGZyb20gdXNpbmcgdGhpcyBidWZmZXIuICBXaGVuIHRoZSBjdXJyZW50IGNvbW1pdHMKLQkJICogZmluaXNoIHdyaXRpbmcgaW50byB0aGUgYnVmZmVyLCB0aGUgcmVmY291bnQgd2lsbCBkcm9wIHRvCi0JCSAqIHplcm8gYW5kIHRoZSBidWZmZXIgd2lsbCBnbyBvdXQgdGhlbi4KLQkJICovCi0JCWlmICghYWxyZWFkeV9zbGVwdCAmJgotCQkgICAgKGljbG9nLT5pY19wcmV2LT5pY19zdGF0ZSAmIChYTE9HX1NUQVRFX1dBTlRfU1lOQyB8Ci0JCQkJCQkgWExPR19TVEFURV9TWU5DSU5HKSkpIHsKLQkJCUFTU0VSVCghKGljbG9nLT5pY19zdGF0ZSAmIFhMT0dfU1RBVEVfSU9FUlJPUikpOwotCQkJWEZTX1NUQVRTX0lOQyh4c19sb2dfZm9yY2Vfc2xlZXApOwotCQkJc3Zfd2FpdCgmaWNsb2ctPmljX3ByZXYtPmljX3dyaXRlX3dhaXQsIFBTV1AsCi0JCQkJJmxvZy0+bF9pY2xvZ2xvY2ssIHMpOwotCQkJKmxvZ19mbHVzaGVkID0gMTsKLQkJCWFscmVhZHlfc2xlcHQgPSAxOwotCQkJZ290byB0cnlfYWdhaW47Ci0JCX0gZWxzZSB7CisJZG8geworCQlpZiAoYmU2NF90b19jcHUoaWNsb2ctPmljX2hlYWRlci5oX2xzbikgIT0gbHNuKSB7CisJCQlpY2xvZyA9IGljbG9nLT5pY19uZXh0OworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoaWNsb2ctPmljX3N0YXRlID09IFhMT0dfU1RBVEVfRElSVFkpIHsKKwkJCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKGljbG9nLT5pY19zdGF0ZSA9PSBYTE9HX1NUQVRFX0FDVElWRSkgeworCQkJLyoKKwkJCSAqIFdlIHNsZWVwIGhlcmUgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IHNsZXB0IChlLmcuCisJCQkgKiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIGxvb2tlZCBhdCB0aGUgY29ycmVjdAorCQkJICogaWNsb2cgYnVmKSBhbmQgdGhlIGJ1ZmZlciBiZWZvcmUgdXMgaXMgZ29pbmcgdG8KKwkJCSAqIGJlIHN5bmMnZWQuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBpZiB3ZQorCQkJICogYXJlIGRvaW5nIHN5bmMgdHJhbnNhY3Rpb25zIGhlcmUsIGJ5IHdhaXRpbmcgZm9yCisJCQkgKiB0aGUgcHJldmlvdXMgSS9PIHRvIGNvbXBsZXRlLCB3ZSBjYW4gYWxsb3cgYSBmZXcKKwkJCSAqIG1vcmUgdHJhbnNhY3Rpb25zIGludG8gdGhpcyBpY2xvZyBiZWZvcmUgd2UgY2xvc2UKKwkJCSAqIGl0IGRvd24uCisJCQkgKgorCQkJICogT3RoZXJ3aXNlLCB3ZSBtYXJrIHRoZSBidWZmZXIgV0FOVF9TWU5DLCBhbmQgYnVtcAorCQkJICogdXAgdGhlIHJlZmNudCBzbyB3ZSBjYW4gcmVsZWFzZSB0aGUgbG9nICh3aGljaAorCQkJICogZHJvcHMgdGhlIHJlZiBjb3VudCkuICBUaGUgc3RhdGUgc3dpdGNoIGtlZXBzIG5ldworCQkJICogdHJhbnNhY3Rpb24gY29tbWl0cyBmcm9tIHVzaW5nIHRoaXMgYnVmZmVyLiAgV2hlbgorCQkJICogdGhlIGN1cnJlbnQgY29tbWl0cyBmaW5pc2ggd3JpdGluZyBpbnRvIHRoZSBidWZmZXIsCisJCQkgKiB0aGUgcmVmY291bnQgd2lsbCBkcm9wIHRvIHplcm8gYW5kIHRoZSBidWZmZXIgd2lsbAorCQkJICogZ28gb3V0IHRoZW4uCisJCQkgKi8KKwkJCWlmICghYWxyZWFkeV9zbGVwdCAmJgorCQkJICAgIChpY2xvZy0+aWNfcHJldi0+aWNfc3RhdGUgJgorCQkJICAgICAoWExPR19TVEFURV9XQU5UX1NZTkMgfCBYTE9HX1NUQVRFX1NZTkNJTkcpKSkgeworCQkJCUFTU0VSVCghKGljbG9nLT5pY19zdGF0ZSAmIFhMT0dfU1RBVEVfSU9FUlJPUikpOworCisJCQkJWEZTX1NUQVRTX0lOQyh4c19sb2dfZm9yY2Vfc2xlZXApOworCisJCQkJc3Zfd2FpdCgmaWNsb2ctPmljX3ByZXYtPmljX3dyaXRlX3dhaXQsCisJCQkJCVBTV1AsICZsb2ctPmxfaWNsb2dsb2NrLCBzKTsKKwkJCQlpZiAobG9nX2ZsdXNoZWQpCisJCQkJCSpsb2dfZmx1c2hlZCA9IDE7CisJCQkJYWxyZWFkeV9zbGVwdCA9IDE7CisJCQkJZ290byB0cnlfYWdhaW47CisJCQl9CiAJCQlhdG9taWNfaW5jKCZpY2xvZy0+aWNfcmVmY250KTsKIAkJCXhsb2dfc3RhdGVfc3dpdGNoX2ljbG9ncyhsb2csIGljbG9nLCAwKTsKIAkJCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKIAkJCWlmICh4bG9nX3N0YXRlX3JlbGVhc2VfaWNsb2cobG9nLCBpY2xvZykpCiAJCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwotCQkJKmxvZ19mbHVzaGVkID0gMTsKKwkJCWlmIChsb2dfZmx1c2hlZCkKKwkJCQkqbG9nX2ZsdXNoZWQgPSAxOwogCQkJc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKIAkJfQotCX0KIAotCWlmICgoZmxhZ3MgJiBYRlNfTE9HX1NZTkMpICYmIC8qIHNsZWVwICovCi0JICAgICEoaWNsb2ctPmljX3N0YXRlICYgKFhMT0dfU1RBVEVfQUNUSVZFIHwgWExPR19TVEFURV9ESVJUWSkpKSB7CisJCWlmICgoZmxhZ3MgJiBYRlNfTE9HX1NZTkMpICYmIC8qIHNsZWVwICovCisJCSAgICAhKGljbG9nLT5pY19zdGF0ZSAmCisJCSAgICAgIChYTE9HX1NUQVRFX0FDVElWRSB8IFhMT0dfU1RBVEVfRElSVFkpKSkgeworCQkJLyoKKwkJCSAqIERvbid0IHdhaXQgb24gY29tcGxldGlvbiBpZiB3ZSBrbm93IHRoYXQgd2UndmUKKwkJCSAqIGdvdHRlbiBhIGxvZyB3cml0ZSBlcnJvci4KKwkJCSAqLworCQkJaWYgKGljbG9nLT5pY19zdGF0ZSAmIFhMT0dfU1RBVEVfSU9FUlJPUikgeworCQkJCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKKwkJCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CisJCQl9CisJCQlYRlNfU1RBVFNfSU5DKHhzX2xvZ19mb3JjZV9zbGVlcCk7CisJCQlzdl93YWl0KCZpY2xvZy0+aWNfZm9yY2Vfd2FpdCwgUFNXUCwgJmxvZy0+bF9pY2xvZ2xvY2ssIHMpOworCQkJLyoKKwkJCSAqIE5vIG5lZWQgdG8gZ3JhYiB0aGUgbG9nIGxvY2sgaGVyZSBzaW5jZSB3ZSdyZQorCQkJICogb25seSBkZWNpZGluZyB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gRUlPCisJCQkgKiBhbmQgdGhlIG1lbW9yeSByZWFkIHNob3VsZCBiZSBhdG9taWMuCisJCQkgKi8KKwkJCWlmIChpY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpCisJCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwogCi0JCS8qCi0JCSAqIERvbid0IHdhaXQgb24gY29tcGxldGlvbiBpZiB3ZSBrbm93IHRoYXQgd2UndmUKLQkJICogZ290dGVuIGEgbG9nIHdyaXRlIGVycm9yLgotCQkgKi8KLQkJaWYgKGljbG9nLT5pY19zdGF0ZSAmIFhMT0dfU1RBVEVfSU9FUlJPUikgeworCQkJaWYgKGxvZ19mbHVzaGVkKQorCQkJCSpsb2dfZmx1c2hlZCA9IDE7CisJCX0gZWxzZSB7CQkvKiBqdXN0IHJldHVybiAqLwogCQkJc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwotCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwogCQl9Ci0JCVhGU19TVEFUU19JTkMoeHNfbG9nX2ZvcmNlX3NsZWVwKTsKLQkJc3Zfd2FpdCgmaWNsb2ctPmljX2ZvcmNlX3dhaXQsIFBTV1AsICZsb2ctPmxfaWNsb2dsb2NrLCBzKTsKLQkJLyoKLQkJICogTm8gbmVlZCB0byBncmFiIHRoZSBsb2cgbG9jayBoZXJlIHNpbmNlIHdlJ3JlCi0JCSAqIG9ubHkgZGVjaWRpbmcgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIEVJTwotCQkgKiBhbmQgdGhlIG1lbW9yeSByZWFkIHNob3VsZCBiZSBhdG9taWMuCi0JCSAqLwotCQlpZiAoaWNsb2ctPmljX3N0YXRlICYgWExPR19TVEFURV9JT0VSUk9SKQotCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwotCQkqbG9nX2ZsdXNoZWQgPSAxOwotCX0gZWxzZSB7CQkvKiBqdXN0IHJldHVybiAqLwotCQlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7Ci0JfQorCisJCXJldHVybiAwOworCX0gd2hpbGUgKGljbG9nICE9IGxvZy0+bF9pY2xvZyk7CisKKwlzcGluX3VubG9jaygmbG9nLT5sX2ljbG9nbG9jayk7CiAJcmV0dXJuIDA7Cit9CiAKLSAgICB9IHdoaWxlIChpY2xvZyAhPSBsb2ctPmxfaWNsb2cpOworLyoKKyAqIFdyYXBwZXIgZm9yIF94ZnNfbG9nX2ZvcmNlX2xzbigpLCB0byBiZSB1c2VkIHdoZW4gY2FsbGVyIGRvZXNuJ3QgY2FyZQorICogYWJvdXQgZXJyb3JzIG9yIHdoZXRoZXIgdGhlIGxvZyB3YXMgZmx1c2hlZCBvciBub3QuIFRoaXMgaXMgdGhlIG5vcm1hbAorICogaW50ZXJmYWNlIHRvIHVzZSB3aGVuIHRyeWluZyB0byB1bnBpbiBpdGVtcyBvciBtb3ZlIHRoZSBsb2cgZm9yd2FyZC4KKyAqLwordm9pZAoreGZzX2xvZ19mb3JjZV9sc24oCisJeGZzX21vdW50X3QJKm1wLAorCXhmc19sc25fdAlsc24sCisJdWludAkJZmxhZ3MpCit7CisJaW50CWVycm9yOwogCi0gICAgc3Bpbl91bmxvY2soJmxvZy0+bF9pY2xvZ2xvY2spOwotICAgIHJldHVybiAwOwotfQkvKiB4bG9nX3N0YXRlX3N5bmMgKi8KLQorCWVycm9yID0gX3hmc19sb2dfZm9yY2VfbHNuKG1wLCBsc24sIGZsYWdzLCBOVUxMKTsKKwlpZiAoZXJyb3IpIHsKKwkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsICJ4ZnNfbG9nX2ZvcmNlOiAiCisJCQkiZXJyb3IgJWQgcmV0dXJuZWQuIiwgZXJyb3IpOworCX0KK30KIAogLyoKICAqIENhbGxlZCB3aGVuIHdlIHdhbnQgdG8gbWFyayB0aGUgY3VycmVudCBpY2xvZyBhcyBiZWluZyByZWFkeSB0byBzeW5jIHRvCkBAIC0zNDYzLDcgKzM0NTYsNiBAQAogCXhsb2dfdGlja2V0X3QJKnRpYzsKIAl4bG9nX3QJCSpsb2c7CiAJaW50CQlyZXR2YWw7Ci0JaW50CQlkdW1teTsKIAogCWxvZyA9IG1wLT5tX2xvZzsKIApAQCAtMzUzNywxMyArMzUyOSwxNCBAQAogCX0KIAlzcGluX3VubG9jaygmbG9nLT5sX2dyYW50X2xvY2spOwogCi0JaWYgKCEgKGxvZy0+bF9pY2xvZy0+aWNfc3RhdGUgJiBYTE9HX1NUQVRFX0lPRVJST1IpKSB7CisJaWYgKCEobG9nLT5sX2ljbG9nLT5pY19zdGF0ZSAmIFhMT0dfU1RBVEVfSU9FUlJPUikpIHsKIAkJQVNTRVJUKCFsb2dlcnJvcik7CiAJCS8qCiAJCSAqIEZvcmNlIHRoZSBpbmNvcmUgbG9ncyB0byBkaXNrIGJlZm9yZSBzaHV0dGluZyB0aGUKIAkJICogbG9nIGRvd24gY29tcGxldGVseS4KIAkJICovCi0JCXhsb2dfc3RhdGVfc3luY19hbGwobG9nLCBYRlNfTE9HX0ZPUkNFfFhGU19MT0dfU1lOQywgJmR1bW15KTsKKwkJX3hmc19sb2dfZm9yY2UobXAsIFhGU19MT0dfU1lOQywgTlVMTCk7CisKIAkJc3Bpbl9sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKIAkJcmV0dmFsID0geGxvZ19zdGF0ZV9pb2Vycm9yKGxvZyk7CiAJCXNwaW5fdW5sb2NrKCZsb2ctPmxfaWNsb2dsb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nLmggYi9mcy94ZnMveGZzX2xvZy5oCmluZGV4IGQwYzliYWEuLjcwNzRiZTkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nLmgKKysrIGIvZnMveGZzL3hmc19sb2cuaApAQCAtNzAsMTQgKzcwLDggQEAKICAqIEZsYWdzIHRvIHhmc19sb2dfZm9yY2UoKQogICoKICAqCVhGU19MT0dfU1lOQzoJU3luY2hyb25vdXMgZm9yY2UgaW4tY29yZSBsb2cgdG8gZGlzawotICoJWEZTX0xPR19GT1JDRToJU3RhcnQgaW4tY29yZSBsb2cgd3JpdGUgbm93LgotICoJWEZTX0xPR19VUkdFOglTdGFydCB3cml0ZSB3aXRoaW4gc29tZSB3aW5kb3cgb2YgdGltZS4KLSAqCi0gKiBOb3RlOiBFaXRoZXIgWEZTX0xPR19GT1JDRSBvciBYRlNfTE9HX1VSR0UgbXVzdCBiZSBzZXQuCiAgKi8KICNkZWZpbmUgWEZTX0xPR19TWU5DCQkweDEKLSNkZWZpbmUgWEZTX0xPR19GT1JDRQkJMHgyCi0jZGVmaW5lIFhGU19MT0dfVVJHRQkJMHg0CiAKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKQEAgLTExMCwxMCArMTA0LDggQEAKICNkZWZpbmUgWExPR19SRUdfVFlQRV9UUkFOU0hEUgkJMTkKICNkZWZpbmUgWExPR19SRUdfVFlQRV9NQVgJCTE5CiAKLSNkZWZpbmUgWExPR19WRUNfU0VUX1RZUEUodmVjcCwgdCkgKCh2ZWNwKS0+aV90eXBlID0gKHQpKQotCiB0eXBlZGVmIHN0cnVjdCB4ZnNfbG9nX2lvdmVjIHsKLQl4ZnNfY2FkZHJfdAkJaV9hZGRyOwkJLyogYmVnaW5uaW5nIGFkZHJlc3Mgb2YgcmVnaW9uICovCisJeGZzX2NhZGRyX3QJaV9hZGRyOwkJLyogYmVnaW5uaW5nIGFkZHJlc3Mgb2YgcmVnaW9uICovCiAJaW50CQlpX2xlbjsJCS8qIGxlbmd0aCBpbiBieXRlcyBvZiByZWdpb24gKi8KIAl1aW50CQlpX3R5cGU7CQkvKiB0eXBlIG9mIHJlZ2lvbiAqLwogfSB4ZnNfbG9nX2lvdmVjX3Q7CkBAIC0xNDAsMTIgKzEzMiwxNyBAQAogCQkgICAgICAgdm9pZAkJKippY2xvZywKIAkJICAgICAgIHVpbnQJCWZsYWdzKTsKIGludAkgIF94ZnNfbG9nX2ZvcmNlKHN0cnVjdCB4ZnNfbW91bnQgKm1wLAotCQkJIHhmc19sc25fdAlsc24sCiAJCQkgdWludAkJZmxhZ3MsCiAJCQkgaW50CQkqbG9nX2ZvcmNlZCk7CiB2b2lkCSAgeGZzX2xvZ19mb3JjZShzdHJ1Y3QgeGZzX21vdW50CSptcCwKLQkJCXhmc19sc25fdAkJbHNuLAogCQkJdWludAkJCWZsYWdzKTsKK2ludAkgIF94ZnNfbG9nX2ZvcmNlX2xzbihzdHJ1Y3QgeGZzX21vdW50ICptcCwKKwkJCSAgICAgeGZzX2xzbl90CQlsc24sCisJCQkgICAgIHVpbnQJCWZsYWdzLAorCQkJICAgICBpbnQJCSpsb2dfZm9yY2VkKTsKK3ZvaWQJICB4ZnNfbG9nX2ZvcmNlX2xzbihzdHJ1Y3QgeGZzX21vdW50CSptcCwKKwkJCSAgICB4ZnNfbHNuX3QJCWxzbiwKKwkJCSAgICB1aW50CQlmbGFncyk7CiBpbnQJICB4ZnNfbG9nX21vdW50KHN0cnVjdCB4ZnNfbW91bnQJKm1wLAogCQkJc3RydWN0IHhmc19idWZ0YXJnCSpsb2dfdGFyZ2V0LAogCQkJeGZzX2RhZGRyX3QJCXN0YXJ0X2Jsb2NrLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcHJpdi5oIGIvZnMveGZzL3hmc19sb2dfcHJpdi5oCmluZGV4IGQ1NTY2MmQuLmZkMDJhMTggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaAorKysgYi9mcy94ZnMveGZzX2xvZ19wcml2LmgKQEAgLTQ0MywxNCArNDQzLDkgQEAKIAogLyogY29tbW9uIHJvdXRpbmVzICovCiBleHRlcm4geGZzX2xzbl90IHhsb2dfYXNzaWduX3RhaWxfbHNuKHN0cnVjdCB4ZnNfbW91bnQgKm1wKTsKLWV4dGVybiBpbnQJIHhsb2dfZmluZF90YWlsKHhsb2dfdAkqbG9nLAotCQkJCXhmc19kYWRkcl90ICpoZWFkX2JsaywKLQkJCQl4ZnNfZGFkZHJfdCAqdGFpbF9ibGspOwogZXh0ZXJuIGludAkgeGxvZ19yZWNvdmVyKHhsb2dfdCAqbG9nKTsKIGV4dGVybiBpbnQJIHhsb2dfcmVjb3Zlcl9maW5pc2goeGxvZ190ICpsb2cpOwogZXh0ZXJuIHZvaWQJIHhsb2dfcGFja19kYXRhKHhsb2dfdCAqbG9nLCB4bG9nX2luX2NvcmVfdCAqaWNsb2csIGludCk7Ci1leHRlcm4gc3RydWN0IHhmc19idWYgKnhsb2dfZ2V0X2JwKHhsb2dfdCAqLCBpbnQpOwotZXh0ZXJuIHZvaWQJIHhsb2dfcHV0X2JwKHN0cnVjdCB4ZnNfYnVmICopOwogCiBleHRlcm4ga21lbV96b25lX3QJKnhmc19sb2dfdGlja2V0X3pvbmU7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYwppbmRleCA2OWFjMmU1Li4yMmU2ZWZkIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKKysrIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCkBAIC01MCw4ICs1MCw2IEBACiAKIFNUQVRJQyBpbnQJeGxvZ19maW5kX3plcm9lZCh4bG9nX3QgKiwgeGZzX2RhZGRyX3QgKik7CiBTVEFUSUMgaW50CXhsb2dfY2xlYXJfc3RhbGVfYmxvY2tzKHhsb2dfdCAqLCB4ZnNfbHNuX3QpOwotU1RBVElDIHZvaWQJeGxvZ19yZWNvdmVyX2luc2VydF9pdGVtX2JhY2txKHhsb2dfcmVjb3Zlcl9pdGVtX3QgKipxLAotCQkJCQkgICAgICAgeGxvZ19yZWNvdmVyX2l0ZW1fdCAqaXRlbSk7CiAjaWYgZGVmaW5lZChERUJVRykKIFNUQVRJQyB2b2lkCXhsb2dfcmVjb3Zlcl9jaGVja19zdW1tYXJ5KHhsb2dfdCAqKTsKICNlbHNlCkBAIC02OCw3ICs2Niw3IEBACiAJKChiYnMgKyAobG9nKS0+bF9zZWN0YmJfbWFzayArIDEpICYgfihsb2cpLT5sX3NlY3RiYl9tYXNrKSA6IChiYnMpICkKICNkZWZpbmUgWExPR19TRUNUT1JfUk9VTkRET1dOX0JMS05PKGxvZywgYm5vKQkoKGJubykgJiB+KGxvZyktPmxfc2VjdGJiX21hc2spCiAKLXhmc19idWZfdCAqCitTVEFUSUMgeGZzX2J1Zl90ICoKIHhsb2dfZ2V0X2JwKAogCXhsb2dfdAkJKmxvZywKIAlpbnQJCW5iYmxrcykKQEAgLTg4LDcgKzg2LDcgQEAKIAlyZXR1cm4geGZzX2J1Zl9nZXRfbm9hZGRyKEJCVE9CKG5iYmxrcyksIGxvZy0+bF9tcC0+bV9sb2dkZXZfdGFyZ3ApOwogfQogCi12b2lkCitTVEFUSUMgdm9pZAogeGxvZ19wdXRfYnAoCiAJeGZzX2J1Zl90CSpicCkKIHsKQEAgLTgwNSw3ICs4MDMsNyBAQAogICogV2UgY291bGQgc3BlZWQgdXAgc2VhcmNoIGJ5IHVzaW5nIGN1cnJlbnQgaGVhZF9ibGsgYnVmZmVyLCBidXQgaXQgaXMgbm90CiAgKiBhdmFpbGFibGUuCiAgKi8KLWludAorU1RBVElDIGludAogeGxvZ19maW5kX3RhaWwoCiAJeGxvZ190CQkJKmxvZywKIAl4ZnNfZGFkZHJfdAkJKmhlYWRfYmxrLApAQCAtMTM2NywzNiArMTM2NSw0NSBAQAogCiBTVEFUSUMgeGxvZ19yZWNvdmVyX3QgKgogeGxvZ19yZWNvdmVyX2ZpbmRfdGlkKAotCXhsb2dfcmVjb3Zlcl90CQkqcSwKKwlzdHJ1Y3QgaGxpc3RfaGVhZAkqaGVhZCwKIAl4bG9nX3RpZF90CQl0aWQpCiB7Ci0JeGxvZ19yZWNvdmVyX3QJCSpwID0gcTsKKwl4bG9nX3JlY292ZXJfdAkJKnRyYW5zOworCXN0cnVjdCBobGlzdF9ub2RlCSpuOwogCi0Jd2hpbGUgKHAgIT0gTlVMTCkgewotCQlpZiAocC0+cl9sb2dfdGlkID09IHRpZCkKLQkJICAgIGJyZWFrOwotCQlwID0gcC0+cl9uZXh0OworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyYW5zLCBuLCBoZWFkLCByX2xpc3QpIHsKKwkJaWYgKHRyYW5zLT5yX2xvZ190aWQgPT0gdGlkKQorCQkJcmV0dXJuIHRyYW5zOwogCX0KLQlyZXR1cm4gcDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogU1RBVElDIHZvaWQKLXhsb2dfcmVjb3Zlcl9wdXRfaGFzaHEoCi0JeGxvZ19yZWNvdmVyX3QJCSoqcSwKLQl4bG9nX3JlY292ZXJfdAkJKnRyYW5zKQoreGxvZ19yZWNvdmVyX25ld190aWQoCisJc3RydWN0IGhsaXN0X2hlYWQJKmhlYWQsCisJeGxvZ190aWRfdAkJdGlkLAorCXhmc19sc25fdAkJbHNuKQogewotCXRyYW5zLT5yX25leHQgPSAqcTsKLQkqcSA9IHRyYW5zOworCXhsb2dfcmVjb3Zlcl90CQkqdHJhbnM7CisKKwl0cmFucyA9IGttZW1femFsbG9jKHNpemVvZih4bG9nX3JlY292ZXJfdCksIEtNX1NMRUVQKTsKKwl0cmFucy0+cl9sb2dfdGlkICAgPSB0aWQ7CisJdHJhbnMtPnJfbHNuCSAgID0gbHNuOworCUlOSVRfTElTVF9IRUFEKCZ0cmFucy0+cl9pdGVtcSk7CisKKwlJTklUX0hMSVNUX05PREUoJnRyYW5zLT5yX2xpc3QpOworCWhsaXN0X2FkZF9oZWFkKCZ0cmFucy0+cl9saXN0LCBoZWFkKTsKIH0KIAogU1RBVElDIHZvaWQKIHhsb2dfcmVjb3Zlcl9hZGRfaXRlbSgKLQl4bG9nX3JlY292ZXJfaXRlbV90CSoqaXRlbXEpCisJc3RydWN0IGxpc3RfaGVhZAkqaGVhZCkKIHsKIAl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtOwogCiAJaXRlbSA9IGttZW1femFsbG9jKHNpemVvZih4bG9nX3JlY292ZXJfaXRlbV90KSwgS01fU0xFRVApOwotCXhsb2dfcmVjb3Zlcl9pbnNlcnRfaXRlbV9iYWNrcShpdGVtcSwgaXRlbSk7CisJSU5JVF9MSVNUX0hFQUQoJml0ZW0tPnJpX2xpc3QpOworCWxpc3RfYWRkX3RhaWwoJml0ZW0tPnJpX2xpc3QsIGhlYWQpOwogfQogCiBTVEFUSUMgaW50CkBAIC0xNDA5LDggKzE0MTYsNyBAQAogCXhmc19jYWRkcl90CQlwdHIsIG9sZF9wdHI7CiAJaW50CQkJb2xkX2xlbjsKIAotCWl0ZW0gPSB0cmFucy0+cl9pdGVtcTsKLQlpZiAoaXRlbSA9PSBOVUxMKSB7CisJaWYgKGxpc3RfZW1wdHkoJnRyYW5zLT5yX2l0ZW1xKSkgewogCQkvKiBmaW5pc2ggY29weWluZyByZXN0IG9mIHRyYW5zIGhlYWRlciAqLwogCQl4bG9nX3JlY292ZXJfYWRkX2l0ZW0oJnRyYW5zLT5yX2l0ZW1xKTsKIAkJcHRyID0gKHhmc19jYWRkcl90KSAmdHJhbnMtPnJfdGhlYWRlciArCkBAIC0xNDE4LDcgKzE0MjQsOCBAQAogCQltZW1jcHkocHRyLCBkcCwgbGVuKTsgLyogZCwgcywgbCAqLwogCQlyZXR1cm4gMDsKIAl9Ci0JaXRlbSA9IGl0ZW0tPnJpX3ByZXY7CisJLyogdGFrZSB0aGUgdGFpbCBlbnRyeSAqLworCWl0ZW0gPSBsaXN0X2VudHJ5KHRyYW5zLT5yX2l0ZW1xLnByZXYsIHhsb2dfcmVjb3Zlcl9pdGVtX3QsIHJpX2xpc3QpOwogCiAJb2xkX3B0ciA9IGl0ZW0tPnJpX2J1ZltpdGVtLT5yaV9jbnQtMV0uaV9hZGRyOwogCW9sZF9sZW4gPSBpdGVtLT5yaV9idWZbaXRlbS0+cmlfY250LTFdLmlfbGVuOwpAQCAtMTQ1NSw4ICsxNDYyLDcgQEAKIAogCWlmICghbGVuKQogCQlyZXR1cm4gMDsKLQlpdGVtID0gdHJhbnMtPnJfaXRlbXE7Ci0JaWYgKGl0ZW0gPT0gTlVMTCkgeworCWlmIChsaXN0X2VtcHR5KCZ0cmFucy0+cl9pdGVtcSkpIHsKIAkJLyogd2UgbmVlZCB0byBjYXRjaCBsb2cgY29ycnVwdGlvbnMgaGVyZSAqLwogCQlpZiAoKih1aW50ICopZHAgIT0gWEZTX1RSQU5TX0hFQURFUl9NQUdJQykgewogCQkJeGxvZ193YXJuKCJYRlM6IHhsb2dfcmVjb3Zlcl9hZGRfdG9fdHJhbnM6ICIKQEAgLTE0NzQsMTIgKzE0ODAsMTUgQEAKIAltZW1jcHkocHRyLCBkcCwgbGVuKTsKIAlpbl9mID0gKHhmc19pbm9kZV9sb2dfZm9ybWF0X3QgKilwdHI7CiAKLQlpZiAoaXRlbS0+cmlfcHJldi0+cmlfdG90YWwgIT0gMCAmJgotCSAgICAgaXRlbS0+cmlfcHJldi0+cmlfdG90YWwgPT0gaXRlbS0+cmlfcHJldi0+cmlfY250KSB7CisJLyogdGFrZSB0aGUgdGFpbCBlbnRyeSAqLworCWl0ZW0gPSBsaXN0X2VudHJ5KHRyYW5zLT5yX2l0ZW1xLnByZXYsIHhsb2dfcmVjb3Zlcl9pdGVtX3QsIHJpX2xpc3QpOworCWlmIChpdGVtLT5yaV90b3RhbCAhPSAwICYmCisJICAgICBpdGVtLT5yaV90b3RhbCA9PSBpdGVtLT5yaV9jbnQpIHsKKwkJLyogdGFpbCBpdGVtIGlzIGluIHVzZSwgZ2V0IGEgbmV3IG9uZSAqLwogCQl4bG9nX3JlY292ZXJfYWRkX2l0ZW0oJnRyYW5zLT5yX2l0ZW1xKTsKKwkJaXRlbSA9IGxpc3RfZW50cnkodHJhbnMtPnJfaXRlbXEucHJldiwKKwkJCQkJeGxvZ19yZWNvdmVyX2l0ZW1fdCwgcmlfbGlzdCk7CiAJfQotCWl0ZW0gPSB0cmFucy0+cl9pdGVtcTsKLQlpdGVtID0gaXRlbS0+cmlfcHJldjsKIAogCWlmIChpdGVtLT5yaV90b3RhbCA9PSAwKSB7CQkvKiBmaXJzdCByZWdpb24gdG8gYmUgYWRkZWQgKi8KIAkJaWYgKGluX2YtPmlsZl9zaXplID09IDAgfHwKQEAgLTE1MDQsOTYgKzE1MTMsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAotU1RBVElDIHZvaWQKLXhsb2dfcmVjb3Zlcl9uZXdfdGlkKAotCXhsb2dfcmVjb3Zlcl90CQkqKnEsCi0JeGxvZ190aWRfdAkJdGlkLAotCXhmc19sc25fdAkJbHNuKQotewotCXhsb2dfcmVjb3Zlcl90CQkqdHJhbnM7Ci0KLQl0cmFucyA9IGttZW1femFsbG9jKHNpemVvZih4bG9nX3JlY292ZXJfdCksIEtNX1NMRUVQKTsKLQl0cmFucy0+cl9sb2dfdGlkICAgPSB0aWQ7Ci0JdHJhbnMtPnJfbHNuCSAgID0gbHNuOwotCXhsb2dfcmVjb3Zlcl9wdXRfaGFzaHEocSwgdHJhbnMpOwotfQotCi1TVEFUSUMgaW50Ci14bG9nX3JlY292ZXJfdW5saW5rX3RpZCgKLQl4bG9nX3JlY292ZXJfdAkJKipxLAotCXhsb2dfcmVjb3Zlcl90CQkqdHJhbnMpCi17Ci0JeGxvZ19yZWNvdmVyX3QJCSp0cDsKLQlpbnQJCQlmb3VuZCA9IDA7Ci0KLQlBU1NFUlQodHJhbnMgIT0gTlVMTCk7Ci0JaWYgKHRyYW5zID09ICpxKSB7Ci0JCSpxID0gKCpxKS0+cl9uZXh0OwotCX0gZWxzZSB7Ci0JCXRwID0gKnE7Ci0JCXdoaWxlICh0cCkgewotCQkJaWYgKHRwLT5yX25leHQgPT0gdHJhbnMpIHsKLQkJCQlmb3VuZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQl0cCA9IHRwLT5yX25leHQ7Ci0JCX0KLQkJaWYgKCFmb3VuZCkgewotCQkJeGxvZ193YXJuKAotCQkJICAgICAiWEZTOiB4bG9nX3JlY292ZXJfdW5saW5rX3RpZDogdHJhbnMgbm90IGZvdW5kIik7Ci0JCQlBU1NFUlQoMCk7Ci0JCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci0JCX0KLQkJdHAtPnJfbmV4dCA9IHRwLT5yX25leHQtPnJfbmV4dDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLVNUQVRJQyB2b2lkCi14bG9nX3JlY292ZXJfaW5zZXJ0X2l0ZW1fYmFja3EoCi0JeGxvZ19yZWNvdmVyX2l0ZW1fdAkqKnEsCi0JeGxvZ19yZWNvdmVyX2l0ZW1fdAkqaXRlbSkKLXsKLQlpZiAoKnEgPT0gTlVMTCkgewotCQlpdGVtLT5yaV9wcmV2ID0gaXRlbS0+cmlfbmV4dCA9IGl0ZW07Ci0JCSpxID0gaXRlbTsKLQl9IGVsc2UgewotCQlpdGVtLT5yaV9uZXh0CQk9ICpxOwotCQlpdGVtLT5yaV9wcmV2CQk9ICgqcSktPnJpX3ByZXY7Ci0JCSgqcSktPnJpX3ByZXYJCT0gaXRlbTsKLQkJaXRlbS0+cmlfcHJldi0+cmlfbmV4dAk9IGl0ZW07Ci0JfQotfQotCi1TVEFUSUMgdm9pZAoteGxvZ19yZWNvdmVyX2luc2VydF9pdGVtX2Zyb250cSgKLQl4bG9nX3JlY292ZXJfaXRlbV90CSoqcSwKLQl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtKQotewotCXhsb2dfcmVjb3Zlcl9pbnNlcnRfaXRlbV9iYWNrcShxLCBpdGVtKTsKLQkqcSA9IGl0ZW07Ci19Ci0KKy8qCisgKiBTb3J0IHRoZSBsb2cgaXRlbXMgaW4gdGhlIHRyYW5zYWN0aW9uLiBDYW5jZWxsZWQgYnVmZmVycyBuZWVkCisgKiB0byBiZSBwdXQgZmlyc3Qgc28gdGhleSBhcmUgcHJvY2Vzc2VkIGJlZm9yZSBhbnkgaXRlbXMgdGhhdCBtaWdodAorICogbW9kaWZ5IHRoZSBidWZmZXJzLiBJZiB0aGV5IGFyZSBjYW5jZWxsZWQsIHRoZW4gdGhlIG1vZGlmaWNhdGlvbnMKKyAqIGRvbid0IG5lZWQgdG8gYmUgcmVwbGF5ZWQuCisgKi8KIFNUQVRJQyBpbnQKIHhsb2dfcmVjb3Zlcl9yZW9yZGVyX3RyYW5zKAogCXhsb2dfcmVjb3Zlcl90CQkqdHJhbnMpCiB7Ci0JeGxvZ19yZWNvdmVyX2l0ZW1fdAkqZmlyc3RfaXRlbSwgKml0ZW1xLCAqaXRlbXFfbmV4dDsKLQl4ZnNfYnVmX2xvZ19mb3JtYXRfdAkqYnVmX2Y7Ci0JdXNob3J0CQkJZmxhZ3MgPSAwOworCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKml0ZW0sICpuOworCUxJU1RfSEVBRChzb3J0X2xpc3QpOwogCi0JZmlyc3RfaXRlbSA9IGl0ZW1xID0gdHJhbnMtPnJfaXRlbXE7Ci0JdHJhbnMtPnJfaXRlbXEgPSBOVUxMOwotCWRvIHsKLQkJaXRlbXFfbmV4dCA9IGl0ZW1xLT5yaV9uZXh0OwotCQlidWZfZiA9ICh4ZnNfYnVmX2xvZ19mb3JtYXRfdCAqKWl0ZW1xLT5yaV9idWZbMF0uaV9hZGRyOworCWxpc3Rfc3BsaWNlX2luaXQoJnRyYW5zLT5yX2l0ZW1xLCAmc29ydF9saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXRlbSwgbiwgJnNvcnRfbGlzdCwgcmlfbGlzdCkgeworCQl4ZnNfYnVmX2xvZ19mb3JtYXRfdAkqYnVmX2Y7CiAKLQkJc3dpdGNoIChJVEVNX1RZUEUoaXRlbXEpKSB7CisJCWJ1Zl9mID0gKHhmc19idWZfbG9nX2Zvcm1hdF90ICopaXRlbS0+cmlfYnVmWzBdLmlfYWRkcjsKKworCQlzd2l0Y2ggKElURU1fVFlQRShpdGVtKSkgewogCQljYXNlIFhGU19MSV9CVUY6Ci0JCQlmbGFncyA9IGJ1Zl9mLT5ibGZfZmxhZ3M7Ci0JCQlpZiAoIShmbGFncyAmIFhGU19CTElfQ0FOQ0VMKSkgewotCQkJCXhsb2dfcmVjb3Zlcl9pbnNlcnRfaXRlbV9mcm9udHEoJnRyYW5zLT5yX2l0ZW1xLAotCQkJCQkJCQlpdGVtcSk7CisJCQlpZiAoIShidWZfZi0+YmxmX2ZsYWdzICYgWEZTX0JMSV9DQU5DRUwpKSB7CisJCQkJbGlzdF9tb3ZlKCZpdGVtLT5yaV9saXN0LCAmdHJhbnMtPnJfaXRlbXEpOwogCQkJCWJyZWFrOwogCQkJfQogCQljYXNlIFhGU19MSV9JTk9ERToKQEAgLTE2MDEsNyArMTU0Myw3IEBACiAJCWNhc2UgWEZTX0xJX1FVT1RBT0ZGOgogCQljYXNlIFhGU19MSV9FRkQ6CiAJCWNhc2UgWEZTX0xJX0VGSToKLQkJCXhsb2dfcmVjb3Zlcl9pbnNlcnRfaXRlbV9iYWNrcSgmdHJhbnMtPnJfaXRlbXEsIGl0ZW1xKTsKKwkJCWxpc3RfbW92ZV90YWlsKCZpdGVtLT5yaV9saXN0LCAmdHJhbnMtPnJfaXRlbXEpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQl4bG9nX3dhcm4oCkBAIC0xNjA5LDggKzE1NTEsOCBAQAogCQkJQVNTRVJUKDApOwogCQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwogCQl9Ci0JCWl0ZW1xID0gaXRlbXFfbmV4dDsKLQl9IHdoaWxlIChmaXJzdF9pdGVtICE9IGl0ZW1xKTsKKwl9CisJQVNTRVJUKGxpc3RfZW1wdHkoJnNvcnRfbGlzdCkpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjQyLDkgKzIxODQsOSBAQAogCX0KIAogCW1wID0gbG9nLT5sX21wOwotCWJ1Zl9mbGFncyA9IFhGU19CVUZfTE9DSzsKKwlidWZfZmxhZ3MgPSBYQkZfTE9DSzsKIAlpZiAoIShmbGFncyAmIFhGU19CTElfSU5PREVfQlVGKSkKLQkJYnVmX2ZsYWdzIHw9IFhGU19CVUZfTUFQUEVEOworCQlidWZfZmxhZ3MgfD0gWEJGX01BUFBFRDsKIAogCWJwID0geGZzX2J1Zl9yZWFkKG1wLT5tX2RkZXZfdGFyZ3AsIGJsa25vLCBsZW4sIGJ1Zl9mbGFncyk7CiAJaWYgKFhGU19CVUZfSVNFUlJPUihicCkpIHsKQEAgLTIzNDYsNyArMjI4OCw3IEBACiAJfQogCiAJYnAgPSB4ZnNfYnVmX3JlYWQobXAtPm1fZGRldl90YXJncCwgaW5fZi0+aWxmX2Jsa25vLCBpbl9mLT5pbGZfbGVuLAotCQkJICBYRlNfQlVGX0xPQ0spOworCQkJICBYQkZfTE9DSyk7CiAJaWYgKFhGU19CVUZfSVNFUlJPUihicCkpIHsKIAkJeGZzX2lvZXJyb3JfYWxlcnQoInhsb2dfcmVjb3Zlcl9kby4uKHJlYWQjMikiLCBtcCwKIAkJCQkgIGJwLCBpbl9mLT5pbGZfYmxrbm8pOwpAQCAtMjgxNCwxNCArMjc1NiwxMyBAQAogCWludAkJCXBhc3MpCiB7CiAJaW50CQkJZXJyb3IgPSAwOwotCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKml0ZW0sICpmaXJzdF9pdGVtOworCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKml0ZW07CiAKIAllcnJvciA9IHhsb2dfcmVjb3Zlcl9yZW9yZGVyX3RyYW5zKHRyYW5zKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCWZpcnN0X2l0ZW0gPSBpdGVtID0gdHJhbnMtPnJfaXRlbXE7Ci0JZG8geworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlbSwgJnRyYW5zLT5yX2l0ZW1xLCByaV9saXN0KSB7CiAJCXN3aXRjaCAoSVRFTV9UWVBFKGl0ZW0pKSB7CiAJCWNhc2UgWEZTX0xJX0JVRjoKIAkJCWVycm9yID0geGxvZ19yZWNvdmVyX2RvX2J1ZmZlcl90cmFucyhsb2csIGl0ZW0sIHBhc3MpOwpAQCAtMjg1NCw4ICsyNzk1LDcgQEAKIAogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7Ci0JCWl0ZW0gPSBpdGVtLT5yaV9uZXh0OwotCX0gd2hpbGUgKGZpcnN0X2l0ZW0gIT0gaXRlbSk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODY5LDIxICsyODA5LDE4IEBACiB4bG9nX3JlY292ZXJfZnJlZV90cmFucygKIAl4bG9nX3JlY292ZXJfdAkJKnRyYW5zKQogewotCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKmZpcnN0X2l0ZW0sICppdGVtLCAqZnJlZV9pdGVtOworCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKml0ZW0sICpuOwogCWludAkJCWk7CiAKLQlpdGVtID0gZmlyc3RfaXRlbSA9IHRyYW5zLT5yX2l0ZW1xOwotCWRvIHsKLQkJZnJlZV9pdGVtID0gaXRlbTsKLQkJaXRlbSA9IGl0ZW0tPnJpX25leHQ7Ci0JCSAvKiBGcmVlIHRoZSByZWdpb25zIGluIHRoZSBpdGVtLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgZnJlZV9pdGVtLT5yaV9jbnQ7IGkrKykgewotCQkJa21lbV9mcmVlKGZyZWVfaXRlbS0+cmlfYnVmW2ldLmlfYWRkcik7Ci0JCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXRlbSwgbiwgJnRyYW5zLT5yX2l0ZW1xLCByaV9saXN0KSB7CisJCS8qIEZyZWUgdGhlIHJlZ2lvbnMgaW4gdGhlIGl0ZW0uICovCisJCWxpc3RfZGVsKCZpdGVtLT5yaV9saXN0KTsKKwkJZm9yIChpID0gMDsgaSA8IGl0ZW0tPnJpX2NudDsgaSsrKQorCQkJa21lbV9mcmVlKGl0ZW0tPnJpX2J1ZltpXS5pX2FkZHIpOwogCQkvKiBGcmVlIHRoZSBpdGVtIGl0c2VsZiAqLwotCQlrbWVtX2ZyZWUoZnJlZV9pdGVtLT5yaV9idWYpOwotCQlrbWVtX2ZyZWUoZnJlZV9pdGVtKTsKLQl9IHdoaWxlIChmaXJzdF9pdGVtICE9IGl0ZW0pOworCQlrbWVtX2ZyZWUoaXRlbS0+cmlfYnVmKTsKKwkJa21lbV9mcmVlKGl0ZW0pOworCX0KIAkvKiBGcmVlIHRoZSB0cmFuc2FjdGlvbiByZWNvdmVyIHN0cnVjdHVyZSAqLwogCWttZW1fZnJlZSh0cmFucyk7CiB9CkBAIC0yODkxLDE0ICsyODI4LDEyIEBACiBTVEFUSUMgaW50CiB4bG9nX3JlY292ZXJfY29tbWl0X3RyYW5zKAogCXhsb2dfdAkJCSpsb2csCi0JeGxvZ19yZWNvdmVyX3QJCSoqcSwKIAl4bG9nX3JlY292ZXJfdAkJKnRyYW5zLAogCWludAkJCXBhc3MpCiB7CiAJaW50CQkJZXJyb3I7CiAKLQlpZiAoKGVycm9yID0geGxvZ19yZWNvdmVyX3VubGlua190aWQocSwgdHJhbnMpKSkKLQkJcmV0dXJuIGVycm9yOworCWhsaXN0X2RlbCgmdHJhbnMtPnJfbGlzdCk7CiAJaWYgKChlcnJvciA9IHhsb2dfcmVjb3Zlcl9kb190cmFucyhsb2csIHRyYW5zLCBwYXNzKSkpCiAJCXJldHVybiBlcnJvcjsKIAl4bG9nX3JlY292ZXJfZnJlZV90cmFucyh0cmFucyk7CQkJLyogbm8gZXJyb3IgKi8KQEAgLTI5MjYsNyArMjg2MSw3IEBACiBTVEFUSUMgaW50CiB4bG9nX3JlY292ZXJfcHJvY2Vzc19kYXRhKAogCXhsb2dfdAkJCSpsb2csCi0JeGxvZ19yZWNvdmVyX3QJCSpyaGFzaFtdLAorCXN0cnVjdCBobGlzdF9oZWFkCXJoYXNoW10sCiAJeGxvZ19yZWNfaGVhZGVyX3QJKnJoZWFkLAogCXhmc19jYWRkcl90CQlkcCwKIAlpbnQJCQlwYXNzKQpAQCAtMjk2MCw3ICsyODk1LDcgQEAKIAkJfQogCQl0aWQgPSBiZTMyX3RvX2NwdShvaGVhZC0+b2hfdGlkKTsKIAkJaGFzaCA9IFhMT0dfUkhBU0godGlkKTsKLQkJdHJhbnMgPSB4bG9nX3JlY292ZXJfZmluZF90aWQocmhhc2hbaGFzaF0sIHRpZCk7CisJCXRyYW5zID0geGxvZ19yZWNvdmVyX2ZpbmRfdGlkKCZyaGFzaFtoYXNoXSwgdGlkKTsKIAkJaWYgKHRyYW5zID09IE5VTEwpIHsJCSAgIC8qIG5vdCBmb3VuZDsgYWRkIG5ldyB0aWQgKi8KIAkJCWlmIChvaGVhZC0+b2hfZmxhZ3MgJiBYTE9HX1NUQVJUX1RSQU5TKQogCQkJCXhsb2dfcmVjb3Zlcl9uZXdfdGlkKCZyaGFzaFtoYXNoXSwgdGlkLApAQCAtMjk3OCw3ICsyOTEzLDcgQEAKIAkJCXN3aXRjaCAoZmxhZ3MpIHsKIAkJCWNhc2UgWExPR19DT01NSVRfVFJBTlM6CiAJCQkJZXJyb3IgPSB4bG9nX3JlY292ZXJfY29tbWl0X3RyYW5zKGxvZywKLQkJCQkJCSZyaGFzaFtoYXNoXSwgdHJhbnMsIHBhc3MpOworCQkJCQkJCQl0cmFucywgcGFzcyk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFhMT0dfVU5NT1VOVF9UUkFOUzoKIAkJCQllcnJvciA9IHhsb2dfcmVjb3Zlcl91bm1vdW50X3RyYW5zKHRyYW5zKTsKQEAgLTMyMTEsNyArMzE0Niw3IEBACiAJLyoKIAkgKiBHZXQgdGhlIG9uIGRpc2sgaW5vZGUgdG8gZmluZCB0aGUgbmV4dCBpbm9kZSBpbiB0aGUgYnVja2V0LgogCSAqLwotCWVycm9yID0geGZzX2l0b2JwKG1wLCBOVUxMLCBpcCwgJmRpcCwgJmlicCwgWEZTX0JVRl9MT0NLKTsKKwllcnJvciA9IHhmc19pdG9icChtcCwgTlVMTCwgaXAsICZkaXAsICZpYnAsIFhCRl9MT0NLKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbF9pcHV0OwogCkBAIC0zNTE3LDcgKzM0NTIsNyBAQAogCWludAkJCWVycm9yID0gMCwgaF9zaXplOwogCWludAkJCWJibGtzLCBzcGxpdF9iYmxrczsKIAlpbnQJCQloYmxrcywgc3BsaXRfaGJsa3MsIHdyYXBwZWRfaGJsa3M7Ci0JeGxvZ19yZWNvdmVyX3QJCSpyaGFzaFtYTE9HX1JIQVNIX1NJWkVdOworCXN0cnVjdCBobGlzdF9oZWFkCXJoYXNoW1hMT0dfUkhBU0hfU0laRV07CiAKIAlBU1NFUlQoaGVhZF9ibGsgIT0gdGFpbF9ibGspOwogCkBAIC0zOTc4LDggKzM5MTMsNyBAQAogCQkgKiBjYXNlIHRoZSB1bmxpbmsgdHJhbnNhY3Rpb25zIHdvdWxkIGhhdmUgcHJvYmxlbXMKIAkJICogcHVzaGluZyB0aGUgRUZJcyBvdXQgb2YgdGhlIHdheS4KIAkJICovCi0JCXhmc19sb2dfZm9yY2UobG9nLT5sX21wLCAoeGZzX2xzbl90KTAsCi0JCQkgICAgICAoWEZTX0xPR19GT1JDRSB8IFhGU19MT0dfU1lOQykpOworCQl4ZnNfbG9nX2ZvcmNlKGxvZy0+bF9tcCwgWEZTX0xPR19TWU5DKTsKIAogCQl4bG9nX3JlY292ZXJfcHJvY2Vzc19pdW5saW5rcyhsb2cpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmggYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmgKaW5kZXggYjIyNTQ1NS4uNzVkNzQ5MiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5oCisrKyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuaApAQCAtMzUsMjIgKzM1LDIxIEBACiAgKiBpdGVtIGhlYWRlcnMgYXJlIGluIHJpX2J1ZlswXS4gIEFkZGl0aW9uYWwgYnVmZmVycyBmb2xsb3cuCiAgKi8KIHR5cGVkZWYgc3RydWN0IHhsb2dfcmVjb3Zlcl9pdGVtIHsKLQlzdHJ1Y3QgeGxvZ19yZWNvdmVyX2l0ZW0gKnJpX25leHQ7Ci0Jc3RydWN0IHhsb2dfcmVjb3Zlcl9pdGVtICpyaV9wcmV2OwotCWludAkJCSByaV90eXBlOwotCWludAkJCSByaV9jbnQ7CS8qIGNvdW50IG9mIHJlZ2lvbnMgZm91bmQgKi8KLQlpbnQJCQkgcmlfdG90YWw7CS8qIHRvdGFsIHJlZ2lvbnMgKi8KLQl4ZnNfbG9nX2lvdmVjX3QJCSAqcmlfYnVmOwkvKiBwdHIgdG8gcmVnaW9ucyBidWZmZXIgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXJpX2xpc3Q7CisJaW50CQkJcmlfdHlwZTsKKwlpbnQJCQlyaV9jbnQ7CS8qIGNvdW50IG9mIHJlZ2lvbnMgZm91bmQgKi8KKwlpbnQJCQlyaV90b3RhbDsJLyogdG90YWwgcmVnaW9ucyAqLworCXhmc19sb2dfaW92ZWNfdAkJKnJpX2J1ZjsJLyogcHRyIHRvIHJlZ2lvbnMgYnVmZmVyICovCiB9IHhsb2dfcmVjb3Zlcl9pdGVtX3Q7CiAKIHN0cnVjdCB4bG9nX3RpZDsKIHR5cGVkZWYgc3RydWN0IHhsb2dfcmVjb3ZlciB7Ci0Jc3RydWN0IHhsb2dfcmVjb3ZlciAqcl9uZXh0OwotCXhsb2dfdGlkX3QJICAgIHJfbG9nX3RpZDsJCS8qIGxvZydzIHRyYW5zYWN0aW9uIGlkICovCi0JeGZzX3RyYW5zX2hlYWRlcl90ICByX3RoZWFkZXI7CQkvKiB0cmFucyBoZWFkZXIgZm9yIHBhcnRpYWwgKi8KLQlpbnQJCSAgICByX3N0YXRlOwkJLyogbm90IG5lZWRlZCAqLwotCXhmc19sc25fdAkgICAgcl9sc247CQkvKiB4YWN0IGxzbiAqLwotCXhsb2dfcmVjb3Zlcl9pdGVtX3QgKnJfaXRlbXE7CQkvKiBxIGZvciBpdGVtcyAqLworCXN0cnVjdCBobGlzdF9ub2RlCXJfbGlzdDsKKwl4bG9nX3RpZF90CQlyX2xvZ190aWQ7CS8qIGxvZydzIHRyYW5zYWN0aW9uIGlkICovCisJeGZzX3RyYW5zX2hlYWRlcl90CXJfdGhlYWRlcjsJLyogdHJhbnMgaGVhZGVyIGZvciBwYXJ0aWFsICovCisJaW50CQkJcl9zdGF0ZTsJLyogbm90IG5lZWRlZCAqLworCXhmc19sc25fdAkJcl9sc247CQkvKiB4YWN0IGxzbiAqLworCXN0cnVjdCBsaXN0X2hlYWQJcl9pdGVtcTsJLyogcSBmb3IgaXRlbXMgKi8KIH0geGxvZ19yZWNvdmVyX3Q7CiAKICNkZWZpbmUgSVRFTV9UWVBFKGkpCSgqKHVzaG9ydCAqKShpKS0+cmlfYnVmWzBdLmlfYWRkcikKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbW91bnQuYyBiL2ZzL3hmcy94ZnNfbW91bnQuYwppbmRleCBlYjQwM2I0Li42YWZhYWViIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21vdW50LmMKKysrIGIvZnMveGZzL3hmc19tb3VudC5jCkBAIC0yMDEsNiArMjAxLDM4IEBACiAKIAogLyoKKyAqIFJlZmVyZW5jZSBjb3VudGluZyBhY2Nlc3Mgd3JhcHBlcnMgdG8gdGhlIHBlcmFnIHN0cnVjdHVyZXMuCisgKi8KK3N0cnVjdCB4ZnNfcGVyYWcgKgoreGZzX3BlcmFnX2dldChzdHJ1Y3QgeGZzX21vdW50ICptcCwgeGZzX2FnbnVtYmVyX3QgYWdubykKK3sKKwlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWc7CisJaW50CQkJcmVmID0gMDsKKworCXNwaW5fbG9jaygmbXAtPm1fcGVyYWdfbG9jayk7CisJcGFnID0gcmFkaXhfdHJlZV9sb29rdXAoJm1wLT5tX3BlcmFnX3RyZWUsIGFnbm8pOworCWlmIChwYWcpIHsKKwkJQVNTRVJUKGF0b21pY19yZWFkKCZwYWctPnBhZ19yZWYpID49IDApOworCQkvKiBjYXRjaCBsZWFrcyBpbiB0aGUgcG9zaXRpdmUgZGlyZWN0aW9uIGR1cmluZyB0ZXN0aW5nICovCisJCUFTU0VSVChhdG9taWNfcmVhZCgmcGFnLT5wYWdfcmVmKSA8IDEwMDApOworCQlyZWYgPSBhdG9taWNfaW5jX3JldHVybigmcGFnLT5wYWdfcmVmKTsKKwl9CisJc3Bpbl91bmxvY2soJm1wLT5tX3BlcmFnX2xvY2spOworCXRyYWNlX3hmc19wZXJhZ19nZXQobXAsIGFnbm8sIHJlZiwgX1JFVF9JUF8pOworCXJldHVybiBwYWc7Cit9CisKK3ZvaWQKK3hmc19wZXJhZ19wdXQoc3RydWN0IHhmc19wZXJhZyAqcGFnKQoreworCWludAlyZWY7CisKKwlBU1NFUlQoYXRvbWljX3JlYWQoJnBhZy0+cGFnX3JlZikgPiAwKTsKKwlyZWYgPSBhdG9taWNfZGVjX3JldHVybigmcGFnLT5wYWdfcmVmKTsKKwl0cmFjZV94ZnNfcGVyYWdfcHV0KHBhZy0+cGFnX21vdW50LCBwYWctPnBhZ19hZ25vLCByZWYsIF9SRVRfSVBfKTsKK30KKworLyoKICAqIEZyZWUgdXAgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBtb3VudCBzdHJ1Y3R1cmUuICBBc3N1bWUgdGhhdAogICogdGhlIHN0cnVjdHVyZSB3YXMgaW5pdGlhbGx5IHplcm9lZCwgc28gd2UgY2FuIHRlbGwgd2hpY2ggZmllbGRzIGdvdAogICogaW5pdGlhbGl6ZWQuCkBAIC0yMDksMTMgKzI0MSwxNiBAQAogeGZzX2ZyZWVfcGVyYWcoCiAJeGZzX21vdW50X3QJKm1wKQogewotCWlmIChtcC0+bV9wZXJhZykgewotCQlpbnQJYWdubzsKKwl4ZnNfYWdudW1iZXJfdAlhZ25vOworCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZzsKIAotCQlmb3IgKGFnbm8gPSAwOyBhZ25vIDwgbXAtPm1fbWF4YWdpOyBhZ25vKyspCi0JCQlpZiAobXAtPm1fcGVyYWdbYWdub10ucGFnYl9saXN0KQotCQkJCWttZW1fZnJlZShtcC0+bV9wZXJhZ1thZ25vXS5wYWdiX2xpc3QpOwotCQlrbWVtX2ZyZWUobXAtPm1fcGVyYWcpOworCWZvciAoYWdubyA9IDA7IGFnbm8gPCBtcC0+bV9zYi5zYl9hZ2NvdW50OyBhZ25vKyspIHsKKwkJc3Bpbl9sb2NrKCZtcC0+bV9wZXJhZ19sb2NrKTsKKwkJcGFnID0gcmFkaXhfdHJlZV9kZWxldGUoJm1wLT5tX3BlcmFnX3RyZWUsIGFnbm8pOworCQlBU1NFUlQocGFnKTsKKwkJQVNTRVJUKGF0b21pY19yZWFkKCZwYWctPnBhZ19yZWYpID09IDApOworCQlzcGluX3VubG9jaygmbXAtPm1fcGVyYWdfbG9jayk7CisJCWttZW1fZnJlZShwYWcpOwogCX0KIH0KIApAQCAtMzg5LDIyICs0MjQsNTcgQEAKIAl9CiB9CiAKLXhmc19hZ251bWJlcl90CitpbnQKIHhmc19pbml0aWFsaXplX3BlcmFnKAogCXhmc19tb3VudF90CSptcCwKLQl4ZnNfYWdudW1iZXJfdAlhZ2NvdW50KQorCXhmc19hZ251bWJlcl90CWFnY291bnQsCisJeGZzX2FnbnVtYmVyX3QJKm1heGFnaSkKIHsKIAl4ZnNfYWdudW1iZXJfdAlpbmRleCwgbWF4X21ldGFkYXRhOworCXhmc19hZ251bWJlcl90CWZpcnN0X2luaXRpYWxpc2VkID0gMDsKIAl4ZnNfcGVyYWdfdAkqcGFnOwogCXhmc19hZ2lub190CWFnaW5vOwogCXhmc19pbm9fdAlpbm87CiAJeGZzX3NiX3QJKnNicCA9ICZtcC0+bV9zYjsKIAl4ZnNfaW5vX3QJbWF4X2ludW0gPSBYRlNfTUFYSU5VTUJFUl8zMjsKKwlpbnQJCWVycm9yID0gLUVOT01FTTsKIAogCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgZmlsZXN5c3RlbSBjYW4gb3ZlcmZsb3cgMzIgYml0IGlub2RlcyAqLwogCWFnaW5vID0gWEZTX09GRkJOT19UT19BR0lOTyhtcCwgc2JwLT5zYl9hZ2Jsb2NrcyAtIDEsIDApOwogCWlubyA9IFhGU19BR0lOT19UT19JTk8obXAsIGFnY291bnQgLSAxLCBhZ2lubyk7CiAKKwkvKgorCSAqIFdhbGsgdGhlIGN1cnJlbnQgcGVyLWFnIHRyZWUgc28gd2UgZG9uJ3QgdHJ5IHRvIGluaXRpYWxpc2UgQUdzCisJICogdGhhdCBhbHJlYWR5IGV4aXN0IChncm93ZnMgY2FzZSkuIEFsbG9jYXRlIGFuZCBpbnNlcnQgYWxsIHRoZQorCSAqIEFHcyB3ZSBkb24ndCBmaW5kIHJlYWR5IGZvciBpbml0aWFsaXNhdGlvbi4KKwkgKi8KKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhZ2NvdW50OyBpbmRleCsrKSB7CisJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGluZGV4KTsKKwkJaWYgKHBhZykgeworCQkJeGZzX3BlcmFnX3B1dChwYWcpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFmaXJzdF9pbml0aWFsaXNlZCkKKwkJCWZpcnN0X2luaXRpYWxpc2VkID0gaW5kZXg7CisJCXBhZyA9IGttZW1femFsbG9jKHNpemVvZigqcGFnKSwgS01fTUFZRkFJTCk7CisJCWlmICghcGFnKQorCQkJZ290byBvdXRfdW53aW5kOworCQlpZiAocmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9OT0ZTKSkKKwkJCWdvdG8gb3V0X3Vud2luZDsKKwkJc3Bpbl9sb2NrKCZtcC0+bV9wZXJhZ19sb2NrKTsKKwkJaWYgKHJhZGl4X3RyZWVfaW5zZXJ0KCZtcC0+bV9wZXJhZ190cmVlLCBpbmRleCwgcGFnKSkgeworCQkJQlVHKCk7CisJCQlzcGluX3VubG9jaygmbXAtPm1fcGVyYWdfbG9jayk7CisJCQlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CisJCQllcnJvciA9IC1FRVhJU1Q7CisJCQlnb3RvIG91dF91bndpbmQ7CisJCX0KKwkJcGFnLT5wYWdfYWdubyA9IGluZGV4OworCQlwYWctPnBhZ19tb3VudCA9IG1wOworCQlzcGluX3VubG9jaygmbXAtPm1fcGVyYWdfbG9jayk7CisJCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKKwl9CisKIAkvKiBDbGVhciB0aGUgbW91bnQgZmxhZyBpZiBubyBpbm9kZSBjYW4gb3ZlcmZsb3cgMzIgYml0cwogCSAqIG9uIHRoaXMgZmlsZXN5c3RlbSwgb3IgaWYgc3BlY2lmaWNhbGx5IHJlcXVlc3RlZC4uCiAJICovCkBAIC00MzgsMjEgKzUwOCwzMyBAQAogCQkJfQogCiAJCQkvKiBUaGlzIGFnIGlzIHByZWZlcnJlZCBmb3IgaW5vZGVzICovCi0JCQlwYWcgPSAmbXAtPm1fcGVyYWdbaW5kZXhdOworCQkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgaW5kZXgpOwogCQkJcGFnLT5wYWdpX2lub2Rlb2sgPSAxOwogCQkJaWYgKGluZGV4IDwgbWF4X21ldGFkYXRhKQogCQkJCXBhZy0+cGFnZl9tZXRhZGF0YSA9IDE7CiAJCQl4ZnNfaW5pdGlhbGl6ZV9wZXJhZ19pY2FjaGUocGFnKTsKKwkJCXhmc19wZXJhZ19wdXQocGFnKTsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIFNldHVwIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHNtYWxsZXIgZmlsZXN5c3RlbXMgKi8KIAkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYWdjb3VudDsgaW5kZXgrKykgewotCQkJcGFnID0gJm1wLT5tX3BlcmFnW2luZGV4XTsKKwkJCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGluZGV4KTsKIAkJCXBhZy0+cGFnaV9pbm9kZW9rID0gMTsKIAkJCXhmc19pbml0aWFsaXplX3BlcmFnX2ljYWNoZShwYWcpOworCQkJeGZzX3BlcmFnX3B1dChwYWcpOwogCQl9CiAJfQotCXJldHVybiBpbmRleDsKKwlpZiAobWF4YWdpKQorCQkqbWF4YWdpID0gaW5kZXg7CisJcmV0dXJuIDA7CisKK291dF91bndpbmQ6CisJa21lbV9mcmVlKHBhZyk7CisJZm9yICg7IGluZGV4ID4gZmlyc3RfaW5pdGlhbGlzZWQ7IGluZGV4LS0pIHsKKwkJcGFnID0gcmFkaXhfdHJlZV9kZWxldGUoJm1wLT5tX3BlcmFnX3RyZWUsIGluZGV4KTsKKwkJa21lbV9mcmVlKHBhZyk7CisJfQorCXJldHVybiBlcnJvcjsKIH0KIAogdm9pZApAQCAtNTgzLDcgKzY2NSw3IEBACiAJICogYWNjZXNzIHRvIHRoZSBzdXBlcmJsb2NrLgogCSAqLwogCXNlY3Rvcl9zaXplID0geGZzX2dldHNpemVfYnVmdGFyZyhtcC0+bV9kZGV2X3RhcmdwKTsKLQlleHRyYV9mbGFncyA9IFhGU19CVUZfTE9DSyB8IFhGU19CVUZfTUFOQUdFIHwgWEZTX0JVRl9NQVBQRUQ7CisJZXh0cmFfZmxhZ3MgPSBYQkZfTE9DSyB8IFhCRl9GU19NQU5BR0VEIHwgWEJGX01BUFBFRDsKIAogCWJwID0geGZzX2J1Zl9yZWFkKG1wLT5tX2RkZXZfdGFyZ3AsIFhGU19TQl9EQUREUiwgQlRPQkIoc2VjdG9yX3NpemUpLAogCQkJICBleHRyYV9mbGFncyk7CkBAIC03MzEsMTIgKzgxMywxMyBAQAogCQllcnJvciA9IHhmc19pYWxsb2NfcGFnaV9pbml0KG1wLCBOVUxMLCBpbmRleCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKLQkJcGFnID0gJm1wLT5tX3BlcmFnW2luZGV4XTsKKwkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgaW5kZXgpOwogCQlpZnJlZSArPSBwYWctPnBhZ2lfZnJlZWNvdW50OwogCQlpYWxsb2MgKz0gcGFnLT5wYWdpX2NvdW50OwogCQliZnJlZSArPSBwYWctPnBhZ2ZfZnJlZWJsa3M7CiAJCWJmcmVlbHN0ICs9IHBhZy0+cGFnZl9mbGNvdW50OwogCQlidHJlZSArPSBwYWctPnBhZ2ZfYnRyZWVibGtzOworCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CiAJfQogCS8qCiAJICogT3ZlcndyaXRlIGluY29yZSBzdXBlcmJsb2NrIGNvdW50ZXJzIHdpdGgganVzdC1yZWFkIGRhdGEKQEAgLTEwMDgsNiArMTA5MSwyMiBAQAogCXJldHVybiB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKIH0KIAorX191aW50NjRfdAoreGZzX2RlZmF1bHRfcmVzYmxrcyh4ZnNfbW91bnRfdCAqbXApCit7CisJX191aW50NjRfdCByZXNibGtzOworCisJLyoKKwkgKiBXZSBkZWZhdWx0IHRvIDUlIG9yIDEwMjQgZnNicyBvZiBzcGFjZSByZXNlcnZlZCwgd2hpY2hldmVyIGlzIHNtYWxsZXIuCisJICogVGhpcyBtYXkgZHJpdmUgdXMgc3RyYWlnaHQgdG8gRU5PU1BDIG9uIG1vdW50LCBidXQgdGhhdCBpbXBsaWVzCisJICogd2Ugd2VyZSBhbHJlYWR5IHRoZXJlIG9uIHRoZSBsYXN0IHVubW91bnQuIFdhcm4gaWYgdGhpcyBvY2N1cnMuCisJICovCisJcmVzYmxrcyA9IG1wLT5tX3NiLnNiX2RibG9ja3M7CisJZG9fZGl2KHJlc2Jsa3MsIDIwKTsKKwlyZXNibGtzID0gbWluX3QoX191aW50NjRfdCwgcmVzYmxrcywgMTAyNCk7CisJcmV0dXJuIHJlc2Jsa3M7Cit9CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIGZvbGxvd2luZyBvbiBhbiBpbml0aWFsIG1vdW50IG9mIGEgZmlsZSBzeXN0ZW06CiAgKgktIHJlYWRzIHRoZSBzdXBlcmJsb2NrIGZyb20gZGlzayBhbmQgaW5pdCB0aGUgbW91bnQgc3RydWN0CkBAIC0xMTUyLDEzICsxMjUxLDEzIEBACiAJLyoKIAkgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgcGVyLWFnIGRhdGEuCiAJICovCi0JaW5pdF9yd3NlbSgmbXAtPm1fcGVyYWdsb2NrKTsKLQltcC0+bV9wZXJhZyA9IGttZW1femFsbG9jKHNicC0+c2JfYWdjb3VudCAqIHNpemVvZih4ZnNfcGVyYWdfdCksCi0JCQkJICBLTV9NQVlGQUlMKTsKLQlpZiAoIW1wLT5tX3BlcmFnKQorCXNwaW5fbG9ja19pbml0KCZtcC0+bV9wZXJhZ19sb2NrKTsKKwlJTklUX1JBRElYX1RSRUUoJm1wLT5tX3BlcmFnX3RyZWUsIEdGUF9OT0ZTKTsKKwllcnJvciA9IHhmc19pbml0aWFsaXplX3BlcmFnKG1wLCBzYnAtPnNiX2FnY291bnQsICZtcC0+bV9tYXhhZ2kpOworCWlmIChlcnJvcikgeworCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IEZhaWxlZCBwZXItYWcgaW5pdDogJWQiLCBlcnJvcik7CiAJCWdvdG8gb3V0X3JlbW92ZV91dWlkOwotCi0JbXAtPm1fbWF4YWdpID0geGZzX2luaXRpYWxpemVfcGVyYWcobXAsIHNicC0+c2JfYWdjb3VudCk7CisJfQogCiAJaWYgKCFzYnAtPnNiX2xvZ2Jsb2NrcykgewogCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IG5vIGxvZyBkZWZpbmVkIik7CkBAIC0xMzE4LDE4ICsxNDE3LDE0IEBACiAJICogd2hlbiBhdCBFTk9TUEMuIFRoaXMgaXMgbmVlZGVkIGZvciBvcGVyYXRpb25zIGxpa2UgY3JlYXRlIHdpdGgKIAkgKiBhdHRyLCB1bndyaXR0ZW4gZXh0ZW50IGNvbnZlcnNpb24gYXQgRU5PU1BDLCBldGMuIERhdGEgYWxsb2NhdGlvbnMKIAkgKiBhcmUgbm90IGFsbG93ZWQgdG8gdXNlIHRoaXMgcmVzZXJ2ZWQgc3BhY2UuCi0JICoKLQkgKiBXZSBkZWZhdWx0IHRvIDUlIG9yIDEwMjQgZnNicyBvZiBzcGFjZSByZXNlcnZlZCwgd2hpY2hldmVyIGlzIHNtYWxsZXIuCi0JICogVGhpcyBtYXkgZHJpdmUgdXMgc3RyYWlnaHQgdG8gRU5PU1BDIG9uIG1vdW50LCBidXQgdGhhdCBpbXBsaWVzCi0JICogd2Ugd2VyZSBhbHJlYWR5IHRoZXJlIG9uIHRoZSBsYXN0IHVubW91bnQuIFdhcm4gaWYgdGhpcyBvY2N1cnMuCiAJICovCi0JcmVzYmxrcyA9IG1wLT5tX3NiLnNiX2RibG9ja3M7Ci0JZG9fZGl2KHJlc2Jsa3MsIDIwKTsKLQlyZXNibGtzID0gbWluX3QoX191aW50NjRfdCwgcmVzYmxrcywgMTAyNCk7Ci0JZXJyb3IgPSB4ZnNfcmVzZXJ2ZV9ibG9ja3MobXAsICZyZXNibGtzLCBOVUxMKTsKLQlpZiAoZXJyb3IpCi0JCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogVW5hYmxlIHRvIGFsbG9jYXRlIHJlc2VydmUgYmxvY2tzLiAiCi0JCQkJIkNvbnRpbnVpbmcgd2l0aG91dCBhIHJlc2VydmUgcG9vbC4iKTsKKwlpZiAoIShtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRE9OTFkpKSB7CisJCXJlc2Jsa3MgPSB4ZnNfZGVmYXVsdF9yZXNibGtzKG1wKTsKKwkJZXJyb3IgPSB4ZnNfcmVzZXJ2ZV9ibG9ja3MobXAsICZyZXNibGtzLCBOVUxMKTsKKwkJaWYgKGVycm9yKQorCQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBVbmFibGUgdG8gYWxsb2NhdGUgcmVzZXJ2ZSAiCisJCQkJImJsb2Nrcy4gQ29udGludWluZyB3aXRob3V0IGEgcmVzZXJ2ZSBwb29sLiIpOworCX0KIAogCXJldHVybiAwOwogCkBAIC0xMzcyLDggKzE0NjcsMTkgQEAKIAkgKiBwdXNoIG91dCB0aGUgaWNsb2cgd2Ugd2lsbCBuZXZlciBnZXQgdGhhdCB1bmxvY2tlZC4gaGVuY2Ugd2UKIAkgKiBuZWVkIHRvIGZvcmNlIHRoZSBsb2cgZmlyc3QuCiAJICovCi0JeGZzX2xvZ19mb3JjZShtcCwgKHhmc19sc25fdCkwLCBYRlNfTE9HX0ZPUkNFIHwgWEZTX0xPR19TWU5DKTsKLQl4ZnNfcmVjbGFpbV9pbm9kZXMobXAsIFhGU19JRkxVU0hfQVNZTkMpOworCXhmc19sb2dfZm9yY2UobXAsIFhGU19MT0dfU1lOQyk7CisKKwkvKgorCSAqIERvIGEgZGVsd3JpIHJlY2xhaW0gcGFzcyBmaXJzdCBzbyB0aGF0IGFzIG1hbnkgZGlydHkgaW5vZGVzIGFyZQorCSAqIHF1ZXVlZCB1cCBmb3IgSU8gYXMgcG9zc2libGUuIFRoZW4gZmx1c2ggdGhlIGJ1ZmZlcnMgYmVmb3JlIG1ha2luZworCSAqIGEgc3luY2hyb25vdXMgcGF0aCB0byBjYXRjaCBhbGwgdGhlIHJlbWFpbmluZyBpbm9kZXMgYXJlIHJlY2xhaW1lZC4KKwkgKiBUaGlzIG1ha2VzIHRoZSByZWNsYWltIHByb2Nlc3MgYXMgcXVpY2sgYXMgcG9zc2libGUgYnkgYXZvaWRpbmcKKwkgKiBzeW5jaHJvbm91cyB3cml0ZW91dCBhbmQgYmxvY2tpbmcgb24gaW5vZGVzIGFscmVhZHkgaW4gdGhlIGRlbHdyaQorCSAqIHN0YXRlIGFzIG11Y2ggYXMgcG9zc2libGUuCisJICovCisJeGZzX3JlY2xhaW1faW5vZGVzKG1wLCAwKTsKKwlYRlNfYmZsdXNoKG1wLT5tX2RkZXZfdGFyZ3ApOworCXhmc19yZWNsYWltX2lub2RlcyhtcCwgU1lOQ19XQUlUKTsKIAogCXhmc19xbV91bm1vdW50KG1wKTsKIApAQCAtMTM4Miw3ICsxNDg4LDcgQEAKIAkgKiB0aGF0IG5vdGhpbmcgaXMgcGlubmVkLiAgVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBiZmx1c2goKQogCSAqIHdpbGwgc2tpcCBwaW5uZWQgYnVmZmVycy4KIAkgKi8KLQl4ZnNfbG9nX2ZvcmNlKG1wLCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMpOworCXhmc19sb2dfZm9yY2UobXAsIFhGU19MT0dfU1lOQyk7CiAKIAl4ZnNfYmludmFsKG1wLT5tX2RkZXZfdGFyZ3ApOwogCWlmIChtcC0+bV9ydGRldl90YXJncCkgewpAQCAtMTU0OCwxNSArMTY1NCwxNCBAQAogCXhmc19zYl90b19kaXNrKFhGU19CVUZfVE9fU0JQKGJwKSwgJm1wLT5tX3NiLCBmaWVsZHMpOwogCiAJLyogZmluZCBtb2RpZmllZCByYW5nZSAqLworCWYgPSAoeGZzX3NiX2ZpZWxkX3QpeGZzX2hpZ2hiaXQ2NCgoX191aW50NjRfdClmaWVsZHMpOworCUFTU0VSVCgoMUxMIDw8IGYpICYgWEZTX1NCX01PRF9CSVRTKTsKKwlsYXN0ID0geGZzX3NiX2luZm9bZiArIDFdLm9mZnNldCAtIDE7CiAKIAlmID0gKHhmc19zYl9maWVsZF90KXhmc19sb3diaXQ2NCgoX191aW50NjRfdClmaWVsZHMpOwogCUFTU0VSVCgoMUxMIDw8IGYpICYgWEZTX1NCX01PRF9CSVRTKTsKIAlmaXJzdCA9IHhmc19zYl9pbmZvW2ZdLm9mZnNldDsKIAotCWYgPSAoeGZzX3NiX2ZpZWxkX3QpeGZzX2hpZ2hiaXQ2NCgoX191aW50NjRfdClmaWVsZHMpOwotCUFTU0VSVCgoMUxMIDw8IGYpICYgWEZTX1NCX01PRF9CSVRTKTsKLQlsYXN0ID0geGZzX3NiX2luZm9bZiArIDFdLm9mZnNldCAtIDE7Ci0KIAl4ZnNfdHJhbnNfbG9nX2J1Zih0cCwgYnAsIGZpcnN0LCBsYXN0KTsKIH0KIApAQCAtMTg4Nyw3ICsxOTkyLDcgQEAKIAogCUFTU0VSVChtcC0+bV9zYl9icCAhPSBOVUxMKTsKIAlicCA9IG1wLT5tX3NiX2JwOwotCWlmIChmbGFncyAmIFhGU19CVUZfVFJZTE9DSykgeworCWlmIChmbGFncyAmIFhCRl9UUllMT0NLKSB7CiAJCWlmICghWEZTX0JVRl9DUFNFTUEoYnApKSB7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3VudC5oCmluZGV4IDFkZjdlNDUuLjcwNTA0ZmMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaAorKysgYi9mcy94ZnMveGZzX21vdW50LmgKQEAgLTc4LDcgKzc4LDggQEAKIHR5cGVkZWYgaW50CSgqeGZzX3NlbmRfbmFtZXNwX3QpKGRtX2V2ZW50dHlwZV90LCBzdHJ1Y3QgeGZzX21vdW50ICosCiAJCQlzdHJ1Y3QgeGZzX2lub2RlICosIGRtX3JpZ2h0X3QsCiAJCQlzdHJ1Y3QgeGZzX2lub2RlICosIGRtX3JpZ2h0X3QsCi0JCQljb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgbW9kZV90LCBpbnQsIGludCk7CisJCQljb25zdCB1bnNpZ25lZCBjaGFyICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwKKwkJCW1vZGVfdCwgaW50LCBpbnQpOwogdHlwZWRlZiBpbnQJKCp4ZnNfc2VuZF9tb3VudF90KShzdHJ1Y3QgeGZzX21vdW50ICosIGRtX3JpZ2h0X3QsCiAJCQljaGFyICosIGNoYXIgKik7CiB0eXBlZGVmIHZvaWQJKCp4ZnNfc2VuZF91bm1vdW50X3QpKHN0cnVjdCB4ZnNfbW91bnQgKiwgc3RydWN0IHhmc19pbm9kZSAqLApAQCAtMjA3LDggKzIwOCw4IEBACiAJdWludAkJCW1fYWdfbWF4bGV2ZWxzOwkvKiBYRlNfQUdfTUFYTEVWRUxTICovCiAJdWludAkJCW1fYm1fbWF4bGV2ZWxzWzJdOyAvKiBYRlNfQk1fTUFYTEVWRUxTICovCiAJdWludAkJCW1faW5fbWF4bGV2ZWxzOwkvKiBtYXggaW5vYnQgYnRyZWUgbGV2ZWxzLiAqLwotCXN0cnVjdCB4ZnNfcGVyYWcJKm1fcGVyYWc7CS8qIHBlci1hZyBhY2NvdW50aW5nIGluZm8gKi8KLQlzdHJ1Y3Qgcndfc2VtYXBob3JlCW1fcGVyYWdsb2NrOwkvKiBsb2NrIGZvciBtX3BlcmFnIChwb2ludGVyKSAqLworCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QJbV9wZXJhZ190cmVlOwkvKiBwZXItYWcgYWNjb3VudGluZyBpbmZvICovCisJc3BpbmxvY2tfdAkJbV9wZXJhZ19sb2NrOwkvKiBsb2NrIGZvciBtX3BlcmFnX3RyZWUgKi8KIAlzdHJ1Y3QgbXV0ZXgJCW1fZ3Jvd2xvY2s7CS8qIGdyb3dmcyBtdXRleCAqLwogCWludAkJCW1fZml4ZWRmc2lkWzJdOwkvKiB1bmNoYW5nZWQgZm9yIGxpZmUgb2YgRlMgKi8KIAl1aW50CQkJbV9kbWV2bWFzazsJLyogRE1JIGV2ZW50cyBmb3IgdGhpcyBGUyAqLwpAQCAtMjI0LDYgKzIyNSw3IEBACiAJX191aW50NjRfdAkJbV9tYXhpb2Zmc2V0OwkvKiBtYXhpbXVtIGlub2RlIG9mZnNldCAqLwogCV9fdWludDY0X3QJCW1fcmVzYmxrczsJLyogdG90YWwgcmVzZXJ2ZWQgYmxvY2tzICovCiAJX191aW50NjRfdAkJbV9yZXNibGtzX2F2YWlsOy8qIGF2YWlsYWJsZSByZXNlcnZlZCBibG9ja3MgKi8KKwlfX3VpbnQ2NF90CQltX3Jlc2Jsa3Nfc2F2ZTsJLyogcmVzZXJ2ZWQgYmxrcyBAIHJlbW91bnQscm8gKi8KIAlpbnQJCQltX2RhbGlnbjsJLyogc3RyaXBlIHVuaXQgKi8KIAlpbnQJCQltX3N3aWR0aDsJLyogc3RyaXBlIHdpZHRoICovCiAJaW50CQkJbV9zaW5vYWxpZ247CS8qIHN0cmlwZSB1bml0IGlub2RlIGFsaWdubWVudCAqLwpAQCAtMzg0LDE5ICszODYsMTAgQEAKIH0KIAogLyoKLSAqIHBlcmFnIGdldC9wdXQgd3JhcHBlcnMgZm9yIGV2ZW50dWFsIHJlZiBjb3VudGluZworICogcGVyYWcgZ2V0L3B1dCB3cmFwcGVycyBmb3IgcmVmIGNvdW50aW5nCiAgKi8KLXN0YXRpYyBpbmxpbmUgeGZzX3BlcmFnX3QgKgoteGZzX2dldF9wZXJhZyhzdHJ1Y3QgeGZzX21vdW50ICptcCwgeGZzX2lub190IGlubykKLXsKLQlyZXR1cm4gJm1wLT5tX3BlcmFnW1hGU19JTk9fVE9fQUdOTyhtcCwgaW5vKV07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAoteGZzX3B1dF9wZXJhZyhzdHJ1Y3QgeGZzX21vdW50ICptcCwgeGZzX3BlcmFnX3QgKnBhZykKLXsKLQkvKiBub3RoaW5nIHRvIHNlZSBoZXJlLCBtb3ZlIGFsb25nICovCi19CitzdHJ1Y3QgeGZzX3BlcmFnICp4ZnNfcGVyYWdfZ2V0KHN0cnVjdCB4ZnNfbW91bnQgKm1wLCB4ZnNfYWdudW1iZXJfdCBhZ25vKTsKK3ZvaWQJeGZzX3BlcmFnX3B1dChzdHJ1Y3QgeGZzX3BlcmFnICpwYWcpOwogCiAvKgogICogUGVyLWNwdSBzdXBlcmJsb2NrIGxvY2tpbmcgZnVuY3Rpb25zCkBAIC00MjgsNiArNDIxLDcgQEAKIH0geGZzX21vZF9zYl90OwogCiBleHRlcm4gaW50CXhmc19sb2dfc2Jjb3VudCh4ZnNfbW91bnRfdCAqLCB1aW50KTsKK2V4dGVybiBfX3VpbnQ2NF90IHhmc19kZWZhdWx0X3Jlc2Jsa3MoeGZzX21vdW50X3QgKm1wKTsKIGV4dGVybiBpbnQJeGZzX21vdW50ZnMoeGZzX21vdW50X3QgKm1wKTsKIAogZXh0ZXJuIHZvaWQJeGZzX3VubW91bnRmcyh4ZnNfbW91bnRfdCAqKTsKQEAgLTQ1MCw3ICs0NDQsOCBAQAogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KIAogZXh0ZXJuIHZvaWQJeGZzX21vZF9zYihzdHJ1Y3QgeGZzX3RyYW5zICosIF9faW50NjRfdCk7Ci1leHRlcm4geGZzX2FnbnVtYmVyX3QJeGZzX2luaXRpYWxpemVfcGVyYWcoc3RydWN0IHhmc19tb3VudCAqLCB4ZnNfYWdudW1iZXJfdCk7CitleHRlcm4gaW50CXhmc19pbml0aWFsaXplX3BlcmFnKHN0cnVjdCB4ZnNfbW91bnQgKiwgeGZzX2FnbnVtYmVyX3QsCisJCQkJCXhmc19hZ251bWJlcl90ICopOwogZXh0ZXJuIHZvaWQJeGZzX3NiX2Zyb21fZGlzayhzdHJ1Y3QgeGZzX3NiICosIHN0cnVjdCB4ZnNfZHNiICopOwogZXh0ZXJuIHZvaWQJeGZzX3NiX3RvX2Rpc2soc3RydWN0IHhmc19kc2IgKiwgc3RydWN0IHhmc19zYiAqLCBfX2ludDY0X3QpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21ydV9jYWNoZS5jIGIvZnMveGZzL3hmc19tcnVfY2FjaGUuYwppbmRleCA0YjA2MTNkLi40NWNlMTVkIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21ydV9jYWNoZS5jCisrKyBiL2ZzL3hmcy94ZnNfbXJ1X2NhY2hlLmMKQEAgLTM5OCw3ICszOTgsNyBAQAogICogZ3VhcmFudGVlZCB0aGF0IGFsbCB0aGUgZnJlZSBmdW5jdGlvbnMgZm9yIGFsbCB0aGUgZWxlbWVudHMgaGF2ZSBmaW5pc2hlZAogICogZXhlY3V0aW5nIGFuZCB0aGUgcmVhcGVyIGlzIG5vdCBydW5uaW5nLgogICovCi12b2lkCitzdGF0aWMgdm9pZAogeGZzX21ydV9jYWNoZV9mbHVzaCgKIAl4ZnNfbXJ1X2NhY2hlX3QJCSptcnUpCiB7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21ydV9jYWNoZS5oIGIvZnMveGZzL3hmc19tcnVfY2FjaGUuaAppbmRleCA1ZDQzOWYzLi4zNmRkM2VjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21ydV9jYWNoZS5oCisrKyBiL2ZzL3hmcy94ZnNfbXJ1X2NhY2hlLmgKQEAgLTQyLDcgKzQyLDYgQEAKIGludCB4ZnNfbXJ1X2NhY2hlX2NyZWF0ZShzdHJ1Y3QgeGZzX21ydV9jYWNoZSAqKm1ydXAsIHVuc2lnbmVkIGludCBsaWZldGltZV9tcywKIAkJCSAgICAgdW5zaWduZWQgaW50IGdycF9jb3VudCwKIAkJCSAgICAgeGZzX21ydV9jYWNoZV9mcmVlX2Z1bmNfdCBmcmVlX2Z1bmMpOwotdm9pZCB4ZnNfbXJ1X2NhY2hlX2ZsdXNoKHhmc19tcnVfY2FjaGVfdCAqbXJ1KTsKIHZvaWQgeGZzX21ydV9jYWNoZV9kZXN0cm95KHN0cnVjdCB4ZnNfbXJ1X2NhY2hlICptcnUpOwogaW50IHhmc19tcnVfY2FjaGVfaW5zZXJ0KHN0cnVjdCB4ZnNfbXJ1X2NhY2hlICptcnUsIHVuc2lnbmVkIGxvbmcga2V5LAogCQkJCXZvaWQgKnZhbHVlKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcXVvdGEuaCBiL2ZzL3hmcy94ZnNfcXVvdGEuaAppbmRleCA5MWJmZDYwLi5mZGNhYjNmIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3F1b3RhLmgKKysrIGIvZnMveGZzL3hmc19xdW90YS5oCkBAIC0yMjMsMTYgKzIyMyw5IEBACiAjZGVmaW5lIFhGU19RTU9QVF9SRVNfSU5PUwkweDA4MDAwMDAKIAogLyoKLSAqIGZsYWdzIGZvciBkcWZsdXNoIGFuZCBkcWZsdXNoX2FsbC4KLSAqLwotI2RlZmluZSBYRlNfUU1PUFRfU1lOQwkJMHgxMDAwMDAwCi0jZGVmaW5lIFhGU19RTU9QVF9BU1lOQwkJMHgyMDAwMDAwCi0jZGVmaW5lIFhGU19RTU9QVF9ERUxXUkkJMHg0MDAwMDAwCi0KLS8qCiAgKiBmbGFncyBmb3IgZHFhbGxvYy4KICAqLwotI2RlZmluZSBYRlNfUU1PUFRfSU5IRVJJVAkweDgwMDAwMDAKKyNkZWZpbmUgWEZTX1FNT1BUX0lOSEVSSVQJMHgxMDAwMDAwCiAKIC8qCiAgKiBmbGFncyB0byB4ZnNfdHJhbnNfbW9kX2RxdW90LgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ydy5jIGIvZnMveGZzL3hmc19ydy5jCmluZGV4IDVhYTA3Y2EuLmUzMzY3NDIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcncuYworKysgYi9mcy94ZnMveGZzX3J3LmMKQEAgLTQ3LDQ4ICs0Nyw2IEBACiAjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKIC8qCi0gKiBUaGlzIGlzIGEgc3Vicm91dGluZSBmb3IgeGZzX3dyaXRlKCkgYW5kIG90aGVyIHdyaXRlcnMgKHhmc19pb2N0bCkKLSAqIHdoaWNoIGNsZWFycyB0aGUgc2V0dWlkIGFuZCBzZXRnaWQgYml0cyB3aGVuIGEgZmlsZSBpcyB3cml0dGVuLgotICovCi1pbnQKLXhmc193cml0ZV9jbGVhcl9zZXR1aWQoCi0JeGZzX2lub2RlX3QJKmlwKQotewotCXhmc19tb3VudF90CSptcDsKLQl4ZnNfdHJhbnNfdAkqdHA7Ci0JaW50CQllcnJvcjsKLQotCW1wID0gaXAtPmlfbW91bnQ7Ci0JdHAgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFhGU19UUkFOU19XUklURUlEKTsKLQlpZiAoKGVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsCi0JCQkJICAgICAgWEZTX1dSSVRFSURfTE9HX1JFUyhtcCksCi0JCQkJICAgICAgMCwgMCwgMCkpKSB7Ci0JCXhmc190cmFuc19jYW5jZWwodHAsIDApOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCXhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JTE9DS19FWENMKTsKLQl4ZnNfdHJhbnNfaWhvbGQodHAsIGlwKTsKLQlpcC0+aV9kLmRpX21vZGUgJj0gflNfSVNVSUQ7Ci0KLQkvKgotCSAqIE5vdGUgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IG1hbmRhdG9yeQotCSAqIGZpbGUgbG9ja2luZyBiZWluZyBkaXNhYmxlZCBoZXJlIGJlY2F1c2Ugd2Ugb25seQotCSAqIGNsZWFyIHRoZSBTX0lTR0lEIGJpdCBpZiB0aGUgR3JvdXAgZXhlY3V0ZSBiaXQgaXMKLQkgKiBvbiwgYnV0IGlmIGl0IHdhcyBvbiB0aGVuIG1hbmRhdG9yeSBsb2NraW5nIHdvdWxkbid0Ci0JICogaGF2ZSBiZWVuIGVuYWJsZWQuCi0JICovCi0JaWYgKGlwLT5pX2QuZGlfbW9kZSAmIFNfSVhHUlApIHsKLQkJaXAtPmlfZC5kaV9tb2RlICY9IH5TX0lTR0lEOwotCX0KLQl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7Ci0JeGZzX3RyYW5zX3NldF9zeW5jKHRwKTsKLQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDApOwotCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCiAgKiBGb3JjZSBhIHNodXRkb3duIG9mIHRoZSBmaWxlc3lzdGVtIGluc3RhbnRseSB3aGlsZSBrZWVwaW5nCiAgKiB0aGUgZmlsZXN5c3RlbSBjb25zaXN0ZW50LiBXZSBkb24ndCBkbyBhbiB1bm1vdW50IGhlcmU7IGp1c3Qgc2h1dGRvd24KICAqIHRoZSBzaG9wLCBtYWtlIHN1cmUgdGhhdCBhYnNvbHV0ZWx5IG5vdGhpbmcgcGVyc2lzdGVudCBoYXBwZW5zIHRvCkBAIC0xNTMsODggKzExMSw2IEBACiAJfQogfQogCi0KLS8qCi0gKiBDYWxsZWQgd2hlbiB3ZSB3YW50IHRvIHN0b3AgYSBidWZmZXIgZnJvbSBnZXR0aW5nIHdyaXR0ZW4gb3IgcmVhZC4KLSAqIFdlIGF0dGFjaCB0aGUgRUlPIGVycm9yLCBtdWNrIHdpdGggaXRzIGZsYWdzLCBhbmQgY2FsbCBiaW9kb25lCi0gKiBzbyB0aGF0IHRoZSBwcm9wZXIgaW9kb25lIGNhbGxiYWNrcyBnZXQgY2FsbGVkLgotICovCi1pbnQKLXhmc19iaW9lcnJvcigKLQl4ZnNfYnVmX3QgKmJwKQotewotCi0jaWZkZWYgWEZTRVJST1JERUJVRwotCUFTU0VSVChYRlNfQlVGX0lTUkVBRChicCkgfHwgYnAtPmJfaW9kb25lKTsKLSNlbmRpZgotCi0JLyoKLQkgKiBObyBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIGJ1ZmZlciBpcyB1bnBpbm5lZC4KLQkgKiBXZSBhcmVuJ3QgZmx1c2hpbmcgaXQuCi0JICovCi0JWEZTX0JVRl9FUlJPUihicCwgRUlPKTsKLQkvKgotCSAqIFdlJ3JlIGNhbGxpbmcgYmlvZG9uZSwgc28gZGVsZXRlIEJfRE9ORSBmbGFnLiBFaXRoZXIgd2F5Ci0JICogd2UgaGF2ZSB0byBjYWxsIHRoZSBpb2RvbmUgY2FsbGJhY2ssIGFuZCBjYWxsaW5nIGJpb2RvbmUKLQkgKiBwcm9iYWJseSBpcyB0aGUgYmVzdCB3YXkgc2luY2UgaXQgdGFrZXMgY2FyZSBvZgotCSAqIEdSSU8gYXMgd2VsbC4KLQkgKi8KLQlYRlNfQlVGX1VOUkVBRChicCk7Ci0JWEZTX0JVRl9VTkRFTEFZV1JJVEUoYnApOwotCVhGU19CVUZfVU5ET05FKGJwKTsKLQlYRlNfQlVGX1NUQUxFKGJwKTsKLQotCVhGU19CVUZfQ0xSX0JEU1RSQVRfRlVOQyhicCk7Ci0JeGZzX2Jpb2RvbmUoYnApOwotCi0JcmV0dXJuIChFSU8pOwotfQotCi0vKgotICogU2FtZSBhcyB4ZnNfYmlvZXJyb3IsIGV4Y2VwdCB0aGF0IHdlIGFyZSByZWxlYXNpbmcgdGhlIGJ1ZmZlcgotICogaGVyZSBvdXJzZWx2ZXMsIGFuZCBhdm9pZGluZyB0aGUgYmlvZG9uZSBjYWxsLgotICogVGhpcyBpcyBtZWFudCBmb3IgdXNlcmRhdGEgZXJyb3JzOyBtZXRhZGF0YSBidWZzIGNvbWUgd2l0aAotICogaW9kb25lIGZ1bmN0aW9ucyBhdHRhY2hlZCwgc28gdGhhdCB3ZSBjYW4gdHJhY2sgZG93biBlcnJvcnMuCi0gKi8KLWludAoteGZzX2Jpb2Vycm9yX3JlbHNlKAotCXhmc19idWZfdCAqYnApCi17Ci0JaW50NjRfdCBmbDsKLQotCUFTU0VSVChYRlNfQlVGX0lPRE9ORV9GVU5DKGJwKSAhPSB4ZnNfYnVmX2lvZG9uZV9jYWxsYmFja3MpOwotCUFTU0VSVChYRlNfQlVGX0lPRE9ORV9GVU5DKGJwKSAhPSB4bG9nX2lvZG9uZSk7Ci0KLQlmbCA9IFhGU19CVUZfQkZMQUdTKGJwKTsKLQkvKgotCSAqIE5vIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgYnVmZmVyIGlzIHVucGlubmVkLgotCSAqIFdlIGFyZW4ndCBmbHVzaGluZyBpdC4KLQkgKgotCSAqIGNodW5raG9sZCBleHBlY3RzIEJfRE9ORSB0byBiZSBzZXQsIHdoZXRoZXIKLQkgKiB3ZSBhY3R1YWxseSBmaW5pc2ggdGhlIEkvTyBvciBub3QuIFdlIGRvbid0IHdhbnQgdG8KLQkgKiBjaGFuZ2UgdGhhdCBpbnRlcmZhY2UuCi0JICovCi0JWEZTX0JVRl9VTlJFQUQoYnApOwotCVhGU19CVUZfVU5ERUxBWVdSSVRFKGJwKTsKLQlYRlNfQlVGX0RPTkUoYnApOwotCVhGU19CVUZfU1RBTEUoYnApOwotCVhGU19CVUZfQ0xSX0lPRE9ORV9GVU5DKGJwKTsKLQlYRlNfQlVGX0NMUl9CRFNUUkFUX0ZVTkMoYnApOwotCWlmICghKGZsICYgWEZTX0JfQVNZTkMpKSB7Ci0JCS8qCi0JCSAqIE1hcmsgYl9lcnJvciBhbmQgQl9FUlJPUiBfYm90aF8uCi0JCSAqIExvdCdzIG9mIGNodW5rY2FjaGUgY29kZSBhc3N1bWVzIHRoYXQuCi0JCSAqIFRoZXJlJ3Mgbm8gcmVhc29uIHRvIG1hcmsgZXJyb3IgZm9yCi0JCSAqIEFTWU5DIGJ1ZmZlcnMuCi0JCSAqLwotCQlYRlNfQlVGX0VSUk9SKGJwLCBFSU8pOwotCQlYRlNfQlVGX0ZJTklTSF9JT1dBSVQoYnApOwotCX0gZWxzZSB7Ci0JCXhmc19idWZfcmVsc2UoYnApOwotCX0KLQlyZXR1cm4gKEVJTyk7Ci19Ci0KIC8qCiAgKiBQcmludHMgb3V0IGFuIEFMRVJUIG1lc3NhZ2UgYWJvdXQgSS9PIGVycm9yLgogICovCkBAIC0zMDYsMzcgKzE4Miw2IEBACiB9CiAKIC8qCi0gKiBXcmFwcGVyIGFyb3VuZCBid3JpdGUoKSBzbyB0aGF0IHdlIGNhbiB0cmFwCi0gKiB3cml0ZSBlcnJvcnMsIGFuZCBhY3QgYWNjb3JkaW5nbHkuCi0gKi8KLWludAoteGZzX2J3cml0ZSgKLQlzdHJ1Y3QgeGZzX21vdW50ICptcCwKLQlzdHJ1Y3QgeGZzX2J1ZgkgKmJwKQotewotCWludAllcnJvcjsKLQotCS8qCi0JICogWFhYc3VwIGhvdyBkb2VzIHRoaXMgd29yayBmb3IgcXVvdGFzLgotCSAqLwotCVhGU19CVUZfU0VUX0JEU1RSQVRfRlVOQyhicCwgeGZzX2Jkc3RyYXRfY2IpOwotCWJwLT5iX21vdW50ID0gbXA7Ci0JWEZTX0JVRl9XUklURShicCk7Ci0KLQlpZiAoKGVycm9yID0gWEZTX2J3cml0ZShicCkpKSB7Ci0JCUFTU0VSVChtcCk7Ci0JCS8qCi0JCSAqIENhbm5vdCBwdXQgYSBidWZ0cmFjZSBoZXJlIHNpbmNlIGlmIHRoZSBidWZmZXIgaXMgbm90Ci0JCSAqIEJfSE9MRCB0aGVuIHdlIHdpbGwgYnJlbHNlKCkgdGhlIGJ1ZmZlciBiZWZvcmUgcmV0dXJuaW5nCi0JCSAqIGZyb20gYndyaXRlIGFuZCB3ZSBjb3VsZCBiZSB0cmFjaW5nIGEgYnVmZmVyIHRoYXQgaGFzCi0JCSAqIGJlZW4gcmV1c2VkLgotCQkgKi8KLQkJeGZzX2ZvcmNlX3NodXRkb3duKG1wLCBTSFVURE9XTl9NRVRBX0lPX0VSUk9SKTsKLQl9Ci0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLS8qCiAgKiBoZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCBleHRlbnQgc2l6ZSBoaW50IGZyb20gaW5vZGUKICAqLwogeGZzX2V4dGxlbl90CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3J3LmggYi9mcy94ZnMveGZzX3J3LmgKaW5kZXggNTcxZjIxNy4uMTFjNDFlYyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ydy5oCisrKyBiL2ZzL3hmcy94ZnNfcncuaApAQCAtMzksMTAgKzM5LDYgQEAKIC8qCiAgKiBQcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4geGZzX3J3LmMuCiAgKi8KLWV4dGVybiBpbnQgeGZzX3dyaXRlX2NsZWFyX3NldHVpZChzdHJ1Y3QgeGZzX2lub2RlICppcCk7Ci1leHRlcm4gaW50IHhmc19id3JpdGUoc3RydWN0IHhmc19tb3VudCAqbXAsIHN0cnVjdCB4ZnNfYnVmICpicCk7Ci1leHRlcm4gaW50IHhmc19iaW9lcnJvcihzdHJ1Y3QgeGZzX2J1ZiAqYnApOwotZXh0ZXJuIGludCB4ZnNfYmlvZXJyb3JfcmVsc2Uoc3RydWN0IHhmc19idWYgKmJwKTsKIGV4dGVybiBpbnQgeGZzX3JlYWRfYnVmKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCB4ZnNfYnVmdGFyZ190ICpidHAsCiAJCQl4ZnNfZGFkZHJfdCBibGtubywgaW50IGxlbiwgdWludCBmbGFncywKIAkJCXN0cnVjdCB4ZnNfYnVmICoqYnBwKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnMuYyBiL2ZzL3hmcy94ZnNfdHJhbnMuYwppbmRleCAyMzdiYWRjLi5iZTk0MmQ0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zLmMKKysrIGIvZnMveGZzL3hmc190cmFucy5jCkBAIC05ODEsOSArOTgxLDggQEAKIAkgKi8KIAlpZiAoc3luYykgewogCQlpZiAoIWVycm9yKSB7Ci0JCQllcnJvciA9IF94ZnNfbG9nX2ZvcmNlKG1wLCBjb21taXRfbHNuLAotCQkJCSAgICAgIFhGU19MT0dfRk9SQ0UgfCBYRlNfTE9HX1NZTkMsCi0JCQkJICAgICAgbG9nX2ZsdXNoZWQpOworCQkJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZV9sc24obXAsIGNvbW1pdF9sc24sCisJCQkJICAgICAgWEZTX0xPR19TWU5DLCBsb2dfZmx1c2hlZCk7CiAJCX0KIAkJWEZTX1NUQVRTX0lOQyh4c190cmFuc19zeW5jKTsKIAl9IGVsc2UgewpAQCAtMTEyMSw3ICsxMTIwLDcgQEAKIAl0cC0+dF9oZWFkZXIudGhfbnVtX2l0ZW1zID0gbml0ZW1zOwogCWxvZ192ZWN0b3ItPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmdHAtPnRfaGVhZGVyOwogCWxvZ192ZWN0b3ItPmlfbGVuID0gc2l6ZW9mKHhmc190cmFuc19oZWFkZXJfdCk7Ci0JWExPR19WRUNfU0VUX1RZUEUobG9nX3ZlY3RvciwgWExPR19SRUdfVFlQRV9UUkFOU0hEUik7CisJbG9nX3ZlY3Rvci0+aV90eXBlID0gWExPR19SRUdfVFlQRV9UUkFOU0hEUjsKIH0KIAogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zLmggYi9mcy94ZnMveGZzX3RyYW5zLmgKaW5kZXggY2E2NGYzMy4uYzkzZTNhMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFucy5oCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnMuaApAQCAtODYxLDggKzg2MSw3IEBACiAjZGVmaW5lCVhGU19JVEVNX1NVQ0NFU1MJMAogI2RlZmluZQlYRlNfSVRFTV9QSU5ORUQJCTEKICNkZWZpbmUJWEZTX0lURU1fTE9DS0VECQkyCi0jZGVmaW5lCVhGU19JVEVNX0ZMVVNISU5HCTMKLSNkZWZpbmUgWEZTX0lURU1fUFVTSEJVRgk0CisjZGVmaW5lIFhGU19JVEVNX1BVU0hCVUYJMwogCiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBtYWludGFpbiBhIGxpc3Qgb2YgYmxvY2sgcmFuZ2VzIHRoYXQgaGF2ZSBiZWVuCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zX2FpbC5jIGIvZnMveGZzL3hmc190cmFuc19haWwuYwppbmRleCAyZmZjNTcwLi5lNzk5ODI0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKQEAgLTIzNywxNCArMjM3LDE1IEBACiB9CiAKIC8qCi0gKiBGdW5jdGlvbiB0aGF0IGRvZXMgdGhlIHdvcmsgb2YgcHVzaGluZyBvbiB0aGUgQUlMCisgKiB4ZnNhaWxkX3B1c2ggZG9lcyB0aGUgd29yayBvZiBwdXNoaW5nIG9uIHRoZSBBSUwuICBSZXR1cm5pbmcgYSB0aW1lb3V0IG9mCisgKiB6ZXJvIGluZGljYXRlcyB0aGF0IHRoZSBjYWxsZXIgc2hvdWxkIHNsZWVwIHVudGlsIHdva2VuLgogICovCiBsb25nCiB4ZnNhaWxkX3B1c2goCiAJc3RydWN0IHhmc19haWwJKmFpbHAsCiAJeGZzX2xzbl90CSpsYXN0X2xzbikKIHsKLQlsb25nCQl0b3V0ID0gMTAwMDsgLyogbWlsbGlzZWNvbmRzICovCisJbG9uZwkJdG91dCA9IDA7CiAJeGZzX2xzbl90CWxhc3RfcHVzaGVkX2xzbiA9ICpsYXN0X2xzbjsKIAl4ZnNfbHNuX3QJdGFyZ2V0ID0gIGFpbHAtPnhhX3RhcmdldDsKIAl4ZnNfbHNuX3QJbHNuOwpAQCAtMjUyLDYgKzI1Myw3IEBACiAJaW50CQlmbHVzaF9sb2csIGNvdW50LCBzdHVjazsKIAl4ZnNfbW91bnRfdAkqbXAgPSBhaWxwLT54YV9tb3VudDsKIAlzdHJ1Y3QgeGZzX2FpbF9jdXJzb3IJKmN1ciA9ICZhaWxwLT54YV9jdXJzb3JzOworCWludAkJcHVzaF94ZnNidWZkID0gMDsKIAogCXNwaW5fbG9jaygmYWlscC0+eGFfbG9jayk7CiAJeGZzX3RyYW5zX2FpbF9jdXJzb3JfaW5pdChhaWxwLCBjdXIpOwpAQCAtMjYyLDcgKzI2NCw3IEBACiAJCSAqLwogCQl4ZnNfdHJhbnNfYWlsX2N1cnNvcl9kb25lKGFpbHAsIGN1cik7CiAJCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKLQkJbGFzdF9wdXNoZWRfbHNuID0gMDsKKwkJKmxhc3RfbHNuID0gMDsKIAkJcmV0dXJuIHRvdXQ7CiAJfQogCkBAIC0yNzksNyArMjgxLDYgQEAKIAkgKiBwcmV2ZW50cyB1c2UgZnJvbSBzcGlubmluZyB3aGVuIHdlIGNhbid0IGRvIGFueXRoaW5nIG9yIHRoZXJlIGlzCiAJICogbG90cyBvZiBjb250ZW50aW9uIG9uIHRoZSBBSUwgbGlzdHMuCiAJICovCi0JdG91dCA9IDEwOwogCWxzbiA9IGxpcC0+bGlfbHNuOwogCWZsdXNoX2xvZyA9IHN0dWNrID0gY291bnQgPSAwOwogCXdoaWxlICgoWEZTX0xTTl9DTVAobGlwLT5saV9sc24sIHRhcmdldCkgPCAwKSkgewpAQCAtMzA4LDYgKzMwOSw3IEBACiAJCQlYRlNfU1RBVFNfSU5DKHhzX3B1c2hfYWlsX3B1c2hidWYpOwogCQkJSU9QX1BVU0hCVUYobGlwKTsKIAkJCWxhc3RfcHVzaGVkX2xzbiA9IGxzbjsKKwkJCXB1c2hfeGZzYnVmZCA9IDE7CiAJCQlicmVhazsKIAogCQljYXNlIFhGU19JVEVNX1BJTk5FRDoKQEAgLTMyMiwxMiArMzI0LDYgQEAKIAkJCXN0dWNrKys7CiAJCQlicmVhazsKIAotCQljYXNlIFhGU19JVEVNX0ZMVVNISU5HOgotCQkJWEZTX1NUQVRTX0lOQyh4c19wdXNoX2FpbF9mbHVzaGluZyk7Ci0JCQlsYXN0X3B1c2hlZF9sc24gPSBsc247Ci0JCQlzdHVjaysrOwotCQkJYnJlYWs7Ci0KIAkJZGVmYXVsdDoKIAkJCUFTU0VSVCgwKTsKIAkJCWJyZWFrOwpAQCAtMzcxLDE5ICszNjcsMjQgQEAKIAkJICogbW92ZSBmb3J3YXJkIGluIHRoZSBBSUwuCiAJCSAqLwogCQlYRlNfU1RBVFNfSU5DKHhzX3B1c2hfYWlsX2ZsdXNoKTsKLQkJeGZzX2xvZ19mb3JjZShtcCwgKHhmc19sc25fdCkwLCBYRlNfTE9HX0ZPUkNFKTsKKwkJeGZzX2xvZ19mb3JjZShtcCwgMCk7CisJfQorCisJaWYgKHB1c2hfeGZzYnVmZCkgeworCQkvKiB3ZSd2ZSBnb3QgZGVsYXllZCB3cml0ZSBidWZmZXJzIHRvIGZsdXNoICovCisJCXdha2VfdXBfcHJvY2VzcyhtcC0+bV9kZGV2X3RhcmdwLT5idF90YXNrKTsKIAl9CiAKIAlpZiAoIWNvdW50KSB7CiAJCS8qIFdlJ3JlIHBhc3Qgb3VyIHRhcmdldCBvciBlbXB0eSwgc28gaWRsZSAqLwotCQl0b3V0ID0gMTAwMDsKKwkJbGFzdF9wdXNoZWRfbHNuID0gMDsKIAl9IGVsc2UgaWYgKFhGU19MU05fQ01QKGxzbiwgdGFyZ2V0KSA+PSAwKSB7CiAJCS8qCiAJCSAqIFdlIHJlYWNoZWQgdGhlIHRhcmdldCBzbyB3YWl0IGEgYml0IGxvbmdlciBmb3IgSS9PIHRvCiAJCSAqIGNvbXBsZXRlIGFuZCByZW1vdmUgcHVzaGVkIGl0ZW1zIGZyb20gdGhlIEFJTCBiZWZvcmUgd2UKIAkJICogc3RhcnQgdGhlIG5leHQgc2NhbiBmcm9tIHRoZSBzdGFydCBvZiB0aGUgQUlMLgogCQkgKi8KLQkJdG91dCArPSAyMDsKKwkJdG91dCA9IDUwOwogCQlsYXN0X3B1c2hlZF9sc24gPSAwOwogCX0gZWxzZSBpZiAoKHN0dWNrICogMTAwKSAvIGNvdW50ID4gOTApIHsKIAkJLyoKQEAgLTM5NSwxMSArMzk2LDE0IEBACiAJCSAqIEJhY2tvZmYgYSBiaXQgbW9yZSB0byBhbGxvdyBzb21lIEkvTyB0byBjb21wbGV0ZSBiZWZvcmUKIAkJICogY29udGludWluZyBmcm9tIHdoZXJlIHdlIHdlcmUuCiAJCSAqLwotCQl0b3V0ICs9IDEwOworCQl0b3V0ID0gMjA7CisJfSBlbHNlIHsKKwkJLyogbW9yZSB0byBkbywgYnV0IHdhaXQgYSBzaG9ydCB3aGlsZSBiZWZvcmUgY29udGludWluZyAqLworCQl0b3V0ID0gMTA7CiAJfQogCSpsYXN0X2xzbiA9IGxhc3RfcHVzaGVkX2xzbjsKIAlyZXR1cm4gdG91dDsKLX0JLyogeGZzYWlsZF9wdXNoICovCit9CiAKIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfYnVmLmMgYi9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jCmluZGV4IDQ5MTMwNjIuLjVmZmQ1NDQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnNfYnVmLmMKKysrIGIvZnMveGZzL3hmc190cmFuc19idWYuYwpAQCAtNzUsMTMgKzc1LDE0IEBACiAJeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXA7CiAKIAlpZiAoZmxhZ3MgPT0gMCkKLQkJZmxhZ3MgPSBYRlNfQlVGX0xPQ0sgfCBYRlNfQlVGX01BUFBFRDsKKwkJZmxhZ3MgPSBYQkZfTE9DSyB8IFhCRl9NQVBQRUQ7CiAKIAkvKgogCSAqIERlZmF1bHQgdG8gYSBub3JtYWwgZ2V0X2J1ZigpIGNhbGwgaWYgdGhlIHRwIGlzIE5VTEwuCiAJICovCiAJaWYgKHRwID09IE5VTEwpCi0JCXJldHVybiB4ZnNfYnVmX2dldCh0YXJnZXRfZGV2LCBibGtubywgbGVuLCBmbGFncyB8IEJVRl9CVVNZKTsKKwkJcmV0dXJuIHhmc19idWZfZ2V0KHRhcmdldF9kZXYsIGJsa25vLCBsZW4sCisJCQkJICAgZmxhZ3MgfCBYQkZfRE9OVF9CTE9DSyk7CiAKIAkvKgogCSAqIElmIHdlIGZpbmQgdGhlIGJ1ZmZlciBpbiB0aGUgY2FjaGUgd2l0aCB0aGlzIHRyYW5zYWN0aW9uCkBAIC0xMTcsMTQgKzExOCwxNCBAQAogCX0KIAogCS8qCi0JICogV2UgYWx3YXlzIHNwZWNpZnkgdGhlIEJVRl9CVVNZIGZsYWcgd2l0aGluIGEgdHJhbnNhY3Rpb24gc28KLQkgKiB0aGF0IGdldF9idWYgZG9lcyBub3QgdHJ5IHRvIHB1c2ggb3V0IGEgZGVsYXllZCB3cml0ZSBidWZmZXIKKwkgKiBXZSBhbHdheXMgc3BlY2lmeSB0aGUgWEJGX0RPTlRfQkxPQ0sgZmxhZyB3aXRoaW4gYSB0cmFuc2FjdGlvbgorCSAqIHNvIHRoYXQgZ2V0X2J1ZiBkb2VzIG5vdCB0cnkgdG8gcHVzaCBvdXQgYSBkZWxheWVkIHdyaXRlIGJ1ZmZlcgogCSAqIHdoaWNoIG1pZ2h0IGNhdXNlIGFub3RoZXIgdHJhbnNhY3Rpb24gdG8gdGFrZSBwbGFjZSAoaWYgdGhlCiAJICogYnVmZmVyIHdhcyBkZWxheWVkIGFsbG9jKS4gIFN1Y2ggcmVjdXJzaXZlIHRyYW5zYWN0aW9ucyBjYW4KIAkgKiBlYXNpbHkgZGVhZGxvY2sgd2l0aCBvdXIgY3VycmVudCB0cmFuc2FjdGlvbiBhcyB3ZWxsIGFzIGNhdXNlCiAJICogdXMgdG8gcnVuIG91dCBvZiBzdGFjayBzcGFjZS4KIAkgKi8KLQlicCA9IHhmc19idWZfZ2V0KHRhcmdldF9kZXYsIGJsa25vLCBsZW4sIGZsYWdzIHwgQlVGX0JVU1kpOworCWJwID0geGZzX2J1Zl9nZXQodGFyZ2V0X2RldiwgYmxrbm8sIGxlbiwgZmxhZ3MgfCBYQkZfRE9OVF9CTE9DSyk7CiAJaWYgKGJwID09IE5VTEwpIHsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMjkwLDE1ICsyOTEsMTUgQEAKIAlpbnQJCQllcnJvcjsKIAogCWlmIChmbGFncyA9PSAwKQotCQlmbGFncyA9IFhGU19CVUZfTE9DSyB8IFhGU19CVUZfTUFQUEVEOworCQlmbGFncyA9IFhCRl9MT0NLIHwgWEJGX01BUFBFRDsKIAogCS8qCiAJICogRGVmYXVsdCB0byBhIG5vcm1hbCBnZXRfYnVmKCkgY2FsbCBpZiB0aGUgdHAgaXMgTlVMTC4KIAkgKi8KIAlpZiAodHAgPT0gTlVMTCkgewotCQlicCA9IHhmc19idWZfcmVhZCh0YXJnZXQsIGJsa25vLCBsZW4sIGZsYWdzIHwgQlVGX0JVU1kpOworCQlicCA9IHhmc19idWZfcmVhZCh0YXJnZXQsIGJsa25vLCBsZW4sIGZsYWdzIHwgWEJGX0RPTlRfQkxPQ0spOwogCQlpZiAoIWJwKQotCQkJcmV0dXJuIChmbGFncyAmIFhGU19CVUZfVFJZTE9DSykgPworCQkJcmV0dXJuIChmbGFncyAmIFhCRl9UUllMT0NLKSA/CiAJCQkJCUVBR0FJTiA6IFhGU19FUlJPUihFTk9NRU0pOwogCiAJCWlmIChYRlNfQlVGX0dFVEVSUk9SKGJwKSAhPSAwKSB7CkBAIC0zODUsMTQgKzM4NiwxNCBAQAogCX0KIAogCS8qCi0JICogV2UgYWx3YXlzIHNwZWNpZnkgdGhlIEJVRl9CVVNZIGZsYWcgd2l0aGluIGEgdHJhbnNhY3Rpb24gc28KLQkgKiB0aGF0IGdldF9idWYgZG9lcyBub3QgdHJ5IHRvIHB1c2ggb3V0IGEgZGVsYXllZCB3cml0ZSBidWZmZXIKKwkgKiBXZSBhbHdheXMgc3BlY2lmeSB0aGUgWEJGX0RPTlRfQkxPQ0sgZmxhZyB3aXRoaW4gYSB0cmFuc2FjdGlvbgorCSAqIHNvIHRoYXQgZ2V0X2J1ZiBkb2VzIG5vdCB0cnkgdG8gcHVzaCBvdXQgYSBkZWxheWVkIHdyaXRlIGJ1ZmZlcgogCSAqIHdoaWNoIG1pZ2h0IGNhdXNlIGFub3RoZXIgdHJhbnNhY3Rpb24gdG8gdGFrZSBwbGFjZSAoaWYgdGhlCiAJICogYnVmZmVyIHdhcyBkZWxheWVkIGFsbG9jKS4gIFN1Y2ggcmVjdXJzaXZlIHRyYW5zYWN0aW9ucyBjYW4KIAkgKiBlYXNpbHkgZGVhZGxvY2sgd2l0aCBvdXIgY3VycmVudCB0cmFuc2FjdGlvbiBhcyB3ZWxsIGFzIGNhdXNlCiAJICogdXMgdG8gcnVuIG91dCBvZiBzdGFjayBzcGFjZS4KIAkgKi8KLQlicCA9IHhmc19idWZfcmVhZCh0YXJnZXQsIGJsa25vLCBsZW4sIGZsYWdzIHwgQlVGX0JVU1kpOworCWJwID0geGZzX2J1Zl9yZWFkKHRhcmdldCwgYmxrbm8sIGxlbiwgZmxhZ3MgfCBYQkZfRE9OVF9CTE9DSyk7CiAJaWYgKGJwID09IE5VTEwpIHsKIAkJKmJwcCA9IE5VTEw7CiAJCXJldHVybiAwOwpAQCAtNDcyLDggKzQ3Myw4IEBACiAJaWYgKFhGU19CVUZfSVNTVEFMRShicCkgJiYgWEZTX0JVRl9JU0RFTEFZV1JJVEUoYnApKQogCQljbW5fZXJyKENFX05PVEUsICJhYm91dCB0byBwb3AgYXNzZXJ0LCBicCA9PSAweCVwIiwgYnApOwogI2VuZGlmCi0JQVNTRVJUKChYRlNfQlVGX0JGTEFHUyhicCkgJiAoWEZTX0JfU1RBTEV8WEZTX0JfREVMV1JJKSkgIT0KLQkJCQkJCShYRlNfQl9TVEFMRXxYRlNfQl9ERUxXUkkpKTsKKwlBU1NFUlQoKFhGU19CVUZfQkZMQUdTKGJwKSAmIChYQkZfU1RBTEV8WEJGX0RFTFdSSSkpICE9CisJCQkJICAgICAoWEJGX1NUQUxFfFhCRl9ERUxXUkkpKTsKIAogCXRyYWNlX3hmc190cmFuc19yZWFkX2J1Zl9zaHV0KGJwLCBfUkVUX0lQXyk7CiAJeGZzX2J1Zl9yZWxzZShicCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3R5cGVzLmggYi9mcy94ZnMveGZzX3R5cGVzLmgKaW5kZXggZDcyNTQyOC4uYjA5OTA0NSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190eXBlcy5oCisrKyBiL2ZzL3hmcy94ZnNfdHlwZXMuaApAQCAtMTUxLDggKzE1MSw4IEBACiB9IHhmc19idG51bV90OwogCiBzdHJ1Y3QgeGZzX25hbWUgewotCWNvbnN0IGNoYXIJKm5hbWU7Ci0JaW50CQlsZW47CisJY29uc3QgdW5zaWduZWQgY2hhcgkqbmFtZTsKKwlpbnQJCQlsZW47CiB9OwogCiAjZW5kaWYJLyogX19YRlNfVFlQRVNfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKaW5kZXggNmYyNjg3NS4uZGRkMmM1ZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc192bm9kZW9wcy5jCisrKyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwpAQCAtMjU2LDcgKzI1Niw3IEBACiAJCSAgICBpYXR0ci0+aWFfc2l6ZSA+IGlwLT5pX2QuZGlfc2l6ZSkgewogCQkJY29kZSA9IHhmc19mbHVzaF9wYWdlcyhpcCwKIAkJCQkJaXAtPmlfZC5kaV9zaXplLCBpYXR0ci0+aWFfc2l6ZSwKLQkJCQkJWEZTX0JfQVNZTkMsIEZJX05PTkUpOworCQkJCQlYQkZfQVNZTkMsIEZJX05PTkUpOwogCQl9CiAKIAkJLyogd2FpdCBmb3IgYWxsIEkvTyB0byBjb21wbGV0ZSAqLwpAQCAtNTk3LDcgKzU5Nyw3IEBACiB7CiAJeGZzX3RyYW5zX3QJKnRwOwogCWludAkJZXJyb3IgPSAwOwotCWludAkJbG9nX2ZsdXNoZWQgPSAwLCBjaGFuZ2VkID0gMTsKKwlpbnQJCWxvZ19mbHVzaGVkID0gMDsKIAogCXhmc19pdHJhY2VfZW50cnkoaXApOwogCkBAIC02MjcsMTkgKzYyNywxNiBAQAogCQkgKiBkaXNrIHlldCwgdGhlIGlub2RlIHdpbGwgYmUgc3RpbGwgYmUgcGlubmVkLiAgSWYgaXQgaXMsCiAJCSAqIGZvcmNlIHRoZSBsb2cuCiAJCSAqLwotCiAJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKLQogCQlpZiAoeGZzX2lwaW5jb3VudChpcCkpIHsKLQkJCWVycm9yID0gX3hmc19sb2dfZm9yY2UoaXAtPmlfbW91bnQsICh4ZnNfbHNuX3QpMCwKLQkJCQkgICAgICBYRlNfTE9HX0ZPUkNFIHwgWEZTX0xPR19TWU5DLAotCQkJCSAgICAgICZsb2dfZmx1c2hlZCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogSWYgdGhlIGlub2RlIGlzIG5vdCBwaW5uZWQgYW5kIG5vdGhpbmcgaGFzIGNoYW5nZWQKLQkJCSAqIHdlIGRvbid0IG5lZWQgdG8gZmx1c2ggdGhlIGNhY2hlLgotCQkJICovCi0JCQljaGFuZ2VkID0gMDsKKwkJCWlmIChpcC0+aV9pdGVtcC0+aWxpX2xhc3RfbHNuKSB7CisJCQkJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZV9sc24oaXAtPmlfbW91bnQsCisJCQkJCQlpcC0+aV9pdGVtcC0+aWxpX2xhc3RfbHNuLAorCQkJCQkJWEZTX0xPR19TWU5DLCAmbG9nX2ZsdXNoZWQpOworCQkJfSBlbHNlIHsKKwkJCQllcnJvciA9IF94ZnNfbG9nX2ZvcmNlKGlwLT5pX21vdW50LAorCQkJCQkJWEZTX0xPR19TWU5DLCAmbG9nX2ZsdXNoZWQpOworCQkJfQogCQl9CiAJfSBlbHNlCXsKIAkJLyoKQEAgLTY3NCw3ICs2NzEsNyBAQAogCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCX0KIAotCWlmICgoaXAtPmlfbW91bnQtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfQkFSUklFUikgJiYgY2hhbmdlZCkgeworCWlmIChpcC0+aV9tb3VudC0+bV9mbGFncyAmIFhGU19NT1VOVF9CQVJSSUVSKSB7CiAJCS8qCiAJCSAqIElmIHRoZSBsb2cgd3JpdGUgZGlkbid0IGlzc3VlIGFuIG9yZGVyZWQgdGFnIHdlIG5lZWQKIAkJICogdG8gZmx1c2ggdGhlIGRpc2sgY2FjaGUgZm9yIHRoZSBkYXRhIGRldmljZSBub3cuCkBAIC0xMDk2LDcgKzEwOTMsNyBAQAogCQkgKi8KIAkJdHJ1bmNhdGVkID0geGZzX2lmbGFnc190ZXN0X2FuZF9jbGVhcihpcCwgWEZTX0lUUlVOQ0FURUQpOwogCQlpZiAodHJ1bmNhdGVkICYmIFZOX0RJUlRZKFZGU19JKGlwKSkgJiYgaXAtPmlfZGVsYXllZF9ibGtzID4gMCkKLQkJCXhmc19mbHVzaF9wYWdlcyhpcCwgMCwgLTEsIFhGU19CX0FTWU5DLCBGSV9OT05FKTsKKwkJCXhmc19mbHVzaF9wYWdlcyhpcCwgMCwgLTEsIFhCRl9BU1lOQywgRklfTk9ORSk7CiAJfQogCiAJaWYgKGlwLT5pX2QuZGlfbmxpbmsgIT0gMCkgewpAQCAtMjE5OSw3ICsyMTk2LDggQEAKIAlpZiAoRE1fRVZFTlRfRU5BQkxFRChkcCwgRE1fRVZFTlRfU1lNTElOSykpIHsKIAkJZXJyb3IgPSBYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX1NZTUxJTkssIGRwLAogCQkJCQlETV9SSUdIVF9OVUxMLCBOVUxMLCBETV9SSUdIVF9OVUxMLAotCQkJCQlsaW5rX25hbWUtPm5hbWUsIHRhcmdldF9wYXRoLCAwLCAwLCAwKTsKKwkJCQkJbGlua19uYW1lLT5uYW1lLAorCQkJCQkodW5zaWduZWQgY2hhciAqKXRhcmdldF9wYXRoLCAwLCAwLCAwKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTIzOTUsNyArMjM5Myw4IEBACiAJCQkJCWRwLCBETV9SSUdIVF9OVUxMLAogCQkJCQllcnJvciA/IE5VTEwgOiBpcCwKIAkJCQkJRE1fUklHSFRfTlVMTCwgbGlua19uYW1lLT5uYW1lLAotCQkJCQl0YXJnZXRfcGF0aCwgMCwgZXJyb3IsIDApOworCQkJCQkodW5zaWduZWQgY2hhciAqKXRhcmdldF9wYXRoLAorCQkJCQkwLCBlcnJvciwgMCk7CiAJfQogCiAJaWYgKCFlcnJvcikKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuaCBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuaAppbmRleCAxNjdhNDY3Li43NzRmNDA3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmgKKysrIGIvZnMveGZzL3hmc192bm9kZW9wcy5oCkBAIC00MywxMSArNDMsMTEgQEAKIGludCB4ZnNfcmVuYW1lKHN0cnVjdCB4ZnNfaW5vZGUgKnNyY19kcCwgc3RydWN0IHhmc19uYW1lICpzcmNfbmFtZSwKIAkJc3RydWN0IHhmc19pbm9kZSAqc3JjX2lwLCBzdHJ1Y3QgeGZzX2lub2RlICp0YXJnZXRfZHAsCiAJCXN0cnVjdCB4ZnNfbmFtZSAqdGFyZ2V0X25hbWUsIHN0cnVjdCB4ZnNfaW5vZGUgKnRhcmdldF9pcCk7Ci1pbnQgeGZzX2F0dHJfZ2V0KHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSwKLQkJaW50ICp2YWx1ZWxlbnAsIGludCBmbGFncyk7Ci1pbnQgeGZzX2F0dHJfc2V0KHN0cnVjdCB4ZnNfaW5vZGUgKmRwLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSwKLQkJaW50IHZhbHVlbGVuLCBpbnQgZmxhZ3MpOwotaW50IHhmc19hdHRyX3JlbW92ZShzdHJ1Y3QgeGZzX2lub2RlICpkcCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzKTsKK2ludCB4ZnNfYXR0cl9nZXQoc3RydWN0IHhmc19pbm9kZSAqaXAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsCisJCXVuc2lnbmVkIGNoYXIgKnZhbHVlLCBpbnQgKnZhbHVlbGVucCwgaW50IGZsYWdzKTsKK2ludCB4ZnNfYXR0cl9zZXQoc3RydWN0IHhmc19pbm9kZSAqZHAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsCisJCXVuc2lnbmVkIGNoYXIgKnZhbHVlLCBpbnQgdmFsdWVsZW4sIGludCBmbGFncyk7CitpbnQgeGZzX2F0dHJfcmVtb3ZlKHN0cnVjdCB4ZnNfaW5vZGUgKmRwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpOwogaW50IHhmc19hdHRyX2xpc3Qoc3RydWN0IHhmc19pbm9kZSAqZHAsIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZnNpemUsCiAJCWludCBmbGFncywgc3RydWN0IGF0dHJsaXN0X2N1cnNvcl9rZXJuICpjdXJzb3IpOwogc3NpemVfdCB4ZnNfcmVhZChzdHJ1Y3QgeGZzX2lub2RlICppcCwgc3RydWN0IGtpb2NiICppb2NiLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmggYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAppbmRleCAzY2Q5Y2NkLi41NDUwOGNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaApAQCAtMjQyLDYgKzI0Miw4IEBACiBzdHJ1Y3QgYWNwaV9kZXZpY2Vfd2FrZXVwX2ZsYWdzIHsKIAl1OCB2YWxpZDoxOwkJLyogQ2FuIHN1Y2Nlc3NmdWxseSBlbmFibGUgd2FrZXVwPyAqLwogCXU4IHJ1bl93YWtlOjE7CQkvKiBSdW4tV2FrZSBHUEUgZGV2aWNlcyAqLworCXU4IGFsd2F5c19lbmFibGVkOjE7CS8qIFJ1bi13YWtlIGRldmljZXMgdGhhdCBhcmUgYWx3YXlzIGVuYWJsZWQgKi8KKwl1OCBub3RpZmllcl9wcmVzZW50OjE7ICAvKiBXYWtlLXVwIG5vdGlmeSBoYW5kbGVyIGhhcyBiZWVuIGluc3RhbGxlZCAqLwogfTsKIAogc3RydWN0IGFjcGlfZGV2aWNlX3dha2V1cF9zdGF0ZSB7CkBAIC0yNTYsNiArMjU4LDcgQEAKIAlzdHJ1Y3QgYWNwaV9kZXZpY2Vfd2FrZXVwX3N0YXRlIHN0YXRlOwogCXN0cnVjdCBhY3BpX2RldmljZV93YWtldXBfZmxhZ3MgZmxhZ3M7CiAJaW50IHByZXBhcmVfY291bnQ7CisJaW50IHJ1bl93YWtlX2NvdW50OwogfTsKIAogLyogRGV2aWNlICovCkBAIC0zODYsNiArMzg5LDkgQEAKIHN0cnVjdCBhY3BpX3BjaV9yb290ICphY3BpX3BjaV9maW5kX3Jvb3QoYWNwaV9oYW5kbGUgaGFuZGxlKTsKICNkZWZpbmUgREVWSUNFX0FDUElfSEFORExFKGRldikgKChhY3BpX2hhbmRsZSkoKGRldiktPmFyY2hkYXRhLmFjcGlfaGFuZGxlKSkKIAoraW50IGFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYsIGludCBzdGF0ZSk7CitpbnQgYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYpOworCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBpbnQgYWNwaV9wbV9kZXZpY2Vfc2xlZXBfc3RhdGUoc3RydWN0IGRldmljZSAqLCBpbnQgKik7CiBpbnQgYWNwaV9wbV9kZXZpY2Vfc2xlZXBfd2FrZShzdHJ1Y3QgZGV2aWNlICosIGJvb2wpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGlfZHJpdmVycy5oIGIvaW5jbHVkZS9hY3BpL2FjcGlfZHJpdmVycy5oCmluZGV4IGY0OTA2ZjYuLjNhNDc2N2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3BpX2RyaXZlcnMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaV9kcml2ZXJzLmgKQEAgLTEwNCw2ICsxMDQsNyBAQAogCiBzdHJ1Y3QgcGNpX2J1cyAqcGNpX2FjcGlfc2Nhbl9yb290KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgZG9tYWluLAogCQkJCSAgIGludCBidXMpOwordm9pZCBwY2lfYWNwaV9jcnNfcXVpcmtzKHZvaWQpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc29yCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaXhmLmggYi9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKaW5kZXggODZlOTczNS4uMzk4OGY5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpeGYuaApAQCAtMjgxLDExICsyODEsMTEgQEAKIC8qCiAgKiBHUEUgSW50ZXJmYWNlcwogICovCi1hY3BpX3N0YXR1cyBhY3BpX3NldF9ncGVfdHlwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlciwgdTggdHlwZSk7CithY3BpX3N0YXR1cyBhY3BpX3NldF9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHU4IGFjdGlvbik7CiAKLWFjcGlfc3RhdHVzIGFjcGlfZW5hYmxlX2dwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlcik7CithY3BpX3N0YXR1cyBhY3BpX2VuYWJsZV9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHU4IHR5cGUpOwogCi1hY3BpX3N0YXR1cyBhY3BpX2Rpc2FibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyKTsKK2FjcGlfc3RhdHVzIGFjcGlfZGlzYWJsZV9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHU4IHR5cGUpOwogCiBhY3BpX3N0YXR1cyBhY3BpX2NsZWFyX2dwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlciwgdTMyIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaCBiL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKaW5kZXggMTUzZjEyZC4uNzNhZjQwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oCkBAIC02NjgsMTUgKzY2OCwxNiBAQAogCiAvKgogICogR1BFIGluZm8gZmxhZ3MgLSBQZXIgR1BFCi0gKiArLSstKy0rLS0tKy0tLSstKwotICogfDd8Nnw1fDQ6M3wyOjF8MHwKLSAqICstKy0rLSstLS0rLS0tKy0rCi0gKiAgfCB8IHwgIHwgICB8ICB8Ci0gKiAgfCB8IHwgIHwgICB8ICArLS0tIEludGVycnVwdCB0eXBlOiBFZGdlIG9yIExldmVsIFRyaWdnZXJlZAotICogIHwgfCB8ICB8ICAgKy0tLSBUeXBlOiBXYWtlLW9ubHksIFJ1bnRpbWUtb25seSwgb3Igd2FrZS9ydW50aW1lCisgKiArLSstKy0rLS0tKy0rLSstKworICogfDd8Nnw1fDQ6M3wyfDF8MHwKKyAqICstKy0rLSstLS0rLSstKy0rCisgKiAgfCB8IHwgIHwgIHwgfCB8CisgKiAgfCB8IHwgIHwgIHwgfCArLS0tIEludGVycnVwdCB0eXBlOiBFZGdlIG9yIExldmVsIFRyaWdnZXJlZAorICogIHwgfCB8ICB8ICB8ICstLS0gR1BFIGNhbiB3YWtlIHRoZSBzeXN0ZW0KKyAqICB8IHwgfCAgfCAgKy0tLSBVbnVzZWQKICAqICB8IHwgfCAgKy0tLSBUeXBlIG9mIGRpc3BhdGNoIC0tIHRvIG1ldGhvZCwgaGFuZGxlciwgb3Igbm9uZQotICogIHwgfCArLS0tIEVuYWJsZWQgZm9yIHJ1bnRpbWU/Ci0gKiAgfCArLS0tIEVuYWJsZWQgZm9yIHdha2U/CisgKiAgfCB8ICstLS0gVW51c2VkCisgKiAgfCArLS0tIFVudXNlZAogICogICstLS0gVW51c2VkCiAgKi8KICNkZWZpbmUgQUNQSV9HUEVfWFJVUFRfVFlQRV9NQVNLICAgICAgICAodTgpIDB4MDEKQEAgLTY4NywyMiArNjg4LDEzIEBACiAjZGVmaW5lIEFDUElfR1BFX1RZUEVfV0FLRV9SVU4gICAgICAgICAgKHU4KSAweDA2CiAjZGVmaW5lIEFDUElfR1BFX1RZUEVfV0FLRSAgICAgICAgICAgICAgKHU4KSAweDAyCiAjZGVmaW5lIEFDUElfR1BFX1RZUEVfUlVOVElNRSAgICAgICAgICAgKHU4KSAweDA0CS8qIERlZmF1bHQgKi8KKyNkZWZpbmUgQUNQSV9HUEVfQ0FOX1dBS0UJCSh1OCkgMHgwMgogCiAjZGVmaW5lIEFDUElfR1BFX0RJU1BBVENIX01BU0sgICAgICAgICAgKHU4KSAweDE4CiAjZGVmaW5lIEFDUElfR1BFX0RJU1BBVENIX0hBTkRMRVIgICAgICAgKHU4KSAweDA4CiAjZGVmaW5lIEFDUElfR1BFX0RJU1BBVENIX01FVEhPRCAgICAgICAgKHU4KSAweDEwCiAjZGVmaW5lIEFDUElfR1BFX0RJU1BBVENIX05PVF9VU0VEICAgICAgKHU4KSAweDAwCS8qIERlZmF1bHQgKi8KIAotI2RlZmluZSBBQ1BJX0dQRV9SVU5fRU5BQkxFX01BU0sgICAgICAgICh1OCkgMHgyMAotI2RlZmluZSBBQ1BJX0dQRV9SVU5fRU5BQkxFRCAgICAgICAgICAgICh1OCkgMHgyMAotI2RlZmluZSBBQ1BJX0dQRV9SVU5fRElTQUJMRUQgICAgICAgICAgICh1OCkgMHgwMAkvKiBEZWZhdWx0ICovCi0KLSNkZWZpbmUgQUNQSV9HUEVfV0FLRV9FTkFCTEVfTUFTSyAgICAgICAodTgpIDB4NDAKLSNkZWZpbmUgQUNQSV9HUEVfV0FLRV9FTkFCTEVEICAgICAgICAgICAodTgpIDB4NDAKLSNkZWZpbmUgQUNQSV9HUEVfV0FLRV9ESVNBQkxFRCAgICAgICAgICAodTgpIDB4MDAJLyogRGVmYXVsdCAqLwotCi0jZGVmaW5lIEFDUElfR1BFX0VOQUJMRV9NQVNLICAgICAgICAgICAgKHU4KSAweDYwCS8qIEJvdGggcnVuL3dha2UgKi8KLQogLyoKICAqIEZsYWdzIGZvciBHUEUgYW5kIExvY2sgaW50ZXJmYWNlcwogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9tZDUuaCBiL2luY2x1ZGUvY3J5cHRvL21kNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZjI5OWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NyeXB0by9tZDUuaApAQCAtMCwwICsxLDE3IEBACisjaWZuZGVmIF9DUllQVE9fTUQ1X0gKKyNkZWZpbmUgX0NSWVBUT19NRDVfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBNRDVfRElHRVNUX1NJWkUJCTE2CisjZGVmaW5lIE1ENV9ITUFDX0JMT0NLX1NJWkUJNjQKKyNkZWZpbmUgTUQ1X0JMT0NLX1dPUkRTCQkxNgorI2RlZmluZSBNRDVfSEFTSF9XT1JEUwkJNAorCitzdHJ1Y3QgbWQ1X3N0YXRlIHsKKwl1MzIgaGFzaFtNRDVfSEFTSF9XT1JEU107CisJdTMyIGJsb2NrW01ENV9CTE9DS19XT1JEU107CisJdTY0IGJ5dGVfY291bnQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL3BjcnlwdC5oIGIvaW5jbHVkZS9jcnlwdG8vcGNyeXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdkOGJkOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY3J5cHRvL3BjcnlwdC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBwY3J5cHQgLSBQYXJhbGxlbCBjcnlwdG8gZW5naW5lLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBzZWN1bmV0IFNlY3VyaXR5IE5ldHdvcmtzIEFHCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU3RlZmZlbiBLbGFzc2VydCA8c3RlZmZlbi5rbGFzc2VydEBzZWN1bmV0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgX0NSWVBUT19QQ1JZUFRfSAorI2RlZmluZSBfQ1JZUFRPX1BDUllQVF9ICisKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWRhdGEuaD4KKworc3RydWN0IHBjcnlwdF9yZXF1ZXN0IHsKKwlzdHJ1Y3QgcGFkYXRhX3ByaXYJcGFkYXRhOworCXZvaWQJCQkqZGF0YTsKKwl2b2lkCQkJKl9fY3R4W10gQ1JZUFRPX01JTkFMSUdOX0FUVFI7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgKnBjcnlwdF9yZXF1ZXN0X2N0eChzdHJ1Y3QgcGNyeXB0X3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gcmVxLT5fX2N0eDsKK30KKworc3RhdGljIGlubGluZQorc3RydWN0IHBhZGF0YV9wcml2ICpwY3J5cHRfcmVxdWVzdF9wYWRhdGEoc3RydWN0IHBjcnlwdF9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuICZyZXEtPnBhZGF0YTsKK30KKworc3RhdGljIGlubGluZQorc3RydWN0IHBjcnlwdF9yZXF1ZXN0ICpwY3J5cHRfcGFkYXRhX3JlcXVlc3Qoc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwYWRhdGEsIHN0cnVjdCBwY3J5cHRfcmVxdWVzdCwgcGFkYXRhKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IDc1NmY4MzEuLjkxYmUwZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC00Myw2ICs0Myw3IEBACiBoZWFkZXIteSArPSBicHFldGhlci5oCiBoZWFkZXIteSArPSBic2cuaAogaGVhZGVyLXkgKz0gY2FuLmgKK2hlYWRlci15ICs9IGNjaXNzX2RlZnMuaAogaGVhZGVyLXkgKz0gY2RrLmgKIGhlYWRlci15ICs9IGNoaW8uaAogaGVhZGVyLXkgKz0gY29kYV9wc2Rldi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oIGIvaW5jbHVkZS9saW51eC9iaXRvcHMuaAppbmRleCBjMDVhMjljLi4yNWI4YjJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvbGludXgvYml0b3BzLmgKQEAgLTI1LDcgKzI1LDcgQEAKIHN0YXRpYyBfX2lubGluZV9fIGludCBnZXRfYml0bWFza19vcmRlcih1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJaW50IG9yZGVyOwotCQorCiAJb3JkZXIgPSBmbHMoY291bnQpOwogCXJldHVybiBvcmRlcjsJLyogV2UgY291bGQgYmUgc2xpZ2h0bHkgbW9yZSBjbGV2ZXIgd2l0aCAtMSBoZXJlLi4uICovCiB9CkBAIC0zMyw3ICszMyw3IEBACiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgZ2V0X2NvdW50X29yZGVyKHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlpbnQgb3JkZXI7Ci0JCisKIAlvcmRlciA9IGZscyhjb3VudCkgLSAxOwogCWlmIChjb3VudCAmIChjb3VudCAtIDEpKQogCQlvcmRlcisrOwpAQCAtNDUsNiArNDUsMzEgQEAKIAlyZXR1cm4gc2l6ZW9mKHcpID09IDQgPyBod2VpZ2h0MzIodykgOiBod2VpZ2h0NjQodyk7CiB9CiAKKy8qCisgKiBDbGVhcmx5IHNsb3cgdmVyc2lvbnMgb2YgdGhlIGh3ZWlnaHROKCkgZnVuY3Rpb25zLCB0aGVpciBiZW5lZml0IGlzCisgKiBvZiBjb3Vyc2UgY29tcGlsZSB0aW1lIGV2YWx1YXRpb24gb2YgY29uc3RhbnQgYXJndW1lbnRzLgorICovCisjZGVmaW5lIEhXRUlHSFQ4KHcpCQkJCQlcCisgICAgICAoCUJVSUxEX0JVR19PTl9aRVJPKCFfX2J1aWx0aW5fY29uc3RhbnRfcCh3KSkgKwlcCisJKCEhKCh3KSAmICgxVUxMIDw8IDApKSkgKwkJCVwKKwkoISEoKHcpICYgKDFVTEwgPDwgMSkpKSArCQkJXAorCSghISgodykgJiAoMVVMTCA8PCAyKSkpICsJCQlcCisJKCEhKCh3KSAmICgxVUxMIDw8IDMpKSkgKwkJCVwKKwkoISEoKHcpICYgKDFVTEwgPDwgNCkpKSArCQkJXAorCSghISgodykgJiAoMVVMTCA8PCA1KSkpICsJCQlcCisJKCEhKCh3KSAmICgxVUxMIDw8IDYpKSkgKwkJCVwKKwkoISEoKHcpICYgKDFVTEwgPDwgNykpKQkpCisKKyNkZWZpbmUgSFdFSUdIVDE2KHcpIChIV0VJR0hUOCh3KSAgKyBIV0VJR0hUOCgodykgPj4gOCkpCisjZGVmaW5lIEhXRUlHSFQzMih3KSAoSFdFSUdIVDE2KHcpICsgSFdFSUdIVDE2KCh3KSA+PiAxNikpCisjZGVmaW5lIEhXRUlHSFQ2NCh3KSAoSFdFSUdIVDMyKHcpICsgSFdFSUdIVDMyKCh3KSA+PiAzMikpCisKKy8qCisgKiBUeXBlIGludmFyaWFudCB2ZXJzaW9uIHRoYXQgc2ltcGx5IGNhc3RzIHRoaW5ncyB0byB0aGUKKyAqIGxhcmdlc3QgdHlwZS4KKyAqLworI2RlZmluZSBIV0VJR0hUKHcpICAgSFdFSUdIVDY0KCh1NjQpKHcpKQorCiAvKioKICAqIHJvbDMyIC0gcm90YXRlIGEgMzItYml0IHZhbHVlIGxlZnQKICAqIEB3b3JkOiB2YWx1ZSB0byByb3RhdGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IDE4OTZlODYuLmViZDIyZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtMzE2LDggKzMxNiw3IEBACiAJdW5zaWduZWQgaW50CQlkaXNjYXJkX2FsaWdubWVudDsKIAogCXVuc2lnbmVkIHNob3J0CQlsb2dpY2FsX2Jsb2NrX3NpemU7Ci0JdW5zaWduZWQgc2hvcnQJCW1heF9od19zZWdtZW50czsKLQl1bnNpZ25lZCBzaG9ydAkJbWF4X3BoeXNfc2VnbWVudHM7CisJdW5zaWduZWQgc2hvcnQJCW1heF9zZWdtZW50czsKIAogCXVuc2lnbmVkIGNoYXIJCW1pc2FsaWduZWQ7CiAJdW5zaWduZWQgY2hhcgkJZGlzY2FyZF9taXNhbGlnbmVkOwpAQCAtNDYyLDYgKzQ2MSw3IEBACiAjZGVmaW5lIFFVRVVFX0ZMQUdfVklSVCAgICAgICAgUVVFVUVfRkxBR19OT05ST1QgLyogcGFyYXZpcnQgZGV2aWNlICovCiAjZGVmaW5lIFFVRVVFX0ZMQUdfSU9fU1RBVCAgICAgMTUJLyogZG8gSU8gc3RhdHMgKi8KICNkZWZpbmUgUVVFVUVfRkxBR19ESVNDQVJEICAgICAxNgkvKiBzdXBwb3J0cyBESVNDQVJEICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfTk9YTUVSR0VTICAgMTcJLyogTm8gZXh0ZW5kZWQgbWVyZ2VzICovCiAKICNkZWZpbmUgUVVFVUVfRkxBR19ERUZBVUxUCSgoMSA8PCBRVUVVRV9GTEFHX0lPX1NUQVQpIHwJCVwKIAkJCQkgKDEgPDwgUVVFVUVfRkxBR19DTFVTVEVSKSB8CQlcCkBAIC01ODcsNiArNTg3LDggQEAKICNkZWZpbmUgYmxrX3F1ZXVlX3RhZ2dlZChxKQl0ZXN0X2JpdChRVUVVRV9GTEFHX1FVRVVFRCwgJihxKS0+cXVldWVfZmxhZ3MpCiAjZGVmaW5lIGJsa19xdWV1ZV9zdG9wcGVkKHEpCXRlc3RfYml0KFFVRVVFX0ZMQUdfU1RPUFBFRCwgJihxKS0+cXVldWVfZmxhZ3MpCiAjZGVmaW5lIGJsa19xdWV1ZV9ub21lcmdlcyhxKQl0ZXN0X2JpdChRVUVVRV9GTEFHX05PTUVSR0VTLCAmKHEpLT5xdWV1ZV9mbGFncykKKyNkZWZpbmUgYmxrX3F1ZXVlX25veG1lcmdlcyhxKQlcCisJdGVzdF9iaXQoUVVFVUVfRkxBR19OT1hNRVJHRVMsICYocSktPnF1ZXVlX2ZsYWdzKQogI2RlZmluZSBibGtfcXVldWVfbm9ucm90KHEpCXRlc3RfYml0KFFVRVVFX0ZMQUdfTk9OUk9ULCAmKHEpLT5xdWV1ZV9mbGFncykKICNkZWZpbmUgYmxrX3F1ZXVlX2lvX3N0YXQocSkJdGVzdF9iaXQoUVVFVUVfRkxBR19JT19TVEFULCAmKHEpLT5xdWV1ZV9mbGFncykKICNkZWZpbmUgYmxrX3F1ZXVlX2ZsdXNoaW5nKHEpCSgocSktPm9yZHNlcSkKQEAgLTkxOCwxMCArOTIwLDI3IEBACiBleHRlcm4gdm9pZCBibGtfY2xlYW51cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9tYWtlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgbWFrZV9yZXF1ZXN0X2ZuICopOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1NjQpOwotZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX21heF9zZWN0b3JzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIGJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBzaG9ydCk7Ci1leHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHVuc2lnbmVkIHNob3J0KTsKKworLyogVGVtcG9yYXJ5IGNvbXBhdGliaWxpdHkgd3JhcHBlciAqLworc3RhdGljIGlubGluZSB2b2lkIGJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgaW50IG1heCkKK3sKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMocSwgbWF4KTsKK30KKworZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX21heF9zZWdtZW50cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBzaG9ydCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIHNob3J0IG1heCkKK3sKKwlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHEsIG1heCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1bnNpZ25lZCBzaG9ydCBtYXgpCit7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhxLCBtYXgpOworfQorCisKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X2Rpc2NhcmRfc2VjdG9ycyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKIAkJdW5zaWduZWQgaW50IG1heF9kaXNjYXJkX3NlY3RvcnMpOwpAQCAtMTAxNCwxMSArMTAzMywxNSBAQAogI2RlZmluZSBNQVhfUEhZU19TRUdNRU5UUyAxMjgKICNkZWZpbmUgTUFYX0hXX1NFR01FTlRTIDEyOAogI2RlZmluZSBTQUZFX01BWF9TRUNUT1JTIDI1NQotI2RlZmluZSBCTEtfREVGX01BWF9TRUNUT1JTIDEwMjQKLQogI2RlZmluZSBNQVhfU0VHTUVOVF9TSVpFCTY1NTM2CiAKLSNkZWZpbmUgQkxLX1NFR19CT1VOREFSWV9NQVNLCTB4RkZGRkZGRkZVTAorZW51bSBibGtfZGVmYXVsdF9saW1pdHMgeworCUJMS19NQVhfU0VHTUVOVFMJPSAxMjgsCisJQkxLX1NBRkVfTUFYX1NFQ1RPUlMJPSAyNTUsCisJQkxLX0RFRl9NQVhfU0VDVE9SUwk9IDEwMjQsCisJQkxLX01BWF9TRUdNRU5UX1NJWkUJPSA2NTUzNiwKKwlCTEtfU0VHX0JPVU5EQVJZX01BU0sJPSAweEZGRkZGRkZGVUwsCit9OwogCiAjZGVmaW5lIGJsa2Rldl9lbnRyeV90b19yZXF1ZXN0KGVudHJ5KSBsaXN0X2VudHJ5KChlbnRyeSksIHN0cnVjdCByZXF1ZXN0LCBxdWV1ZWxpc3QpCiAKQEAgLTEwNDIsMTQgKzEwNjUsOSBAQAogCXJldHVybiBxLT5saW1pdHMubWF4X2h3X3NlY3RvcnM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgcXVldWVfbWF4X2h3X3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBxdWV1ZV9tYXhfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7Ci0JcmV0dXJuIHEtPmxpbWl0cy5tYXhfaHdfc2VnbWVudHM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgcXVldWVfbWF4X3BoeXNfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCi17Ci0JcmV0dXJuIHEtPmxpbWl0cy5tYXhfcGh5c19zZWdtZW50czsKKwlyZXR1cm4gcS0+bGltaXRzLm1heF9zZWdtZW50czsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKQEAgLTExMTAsMTggKzExMjgsMTMgQEAKIAlyZXR1cm4gcS0+bGltaXRzLmFsaWdubWVudF9vZmZzZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX2xpbWl0X2FsaWdubWVudF9vZmZzZXQoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCBzZWN0b3JfdCBvZmZzZXQpCitzdGF0aWMgaW5saW5lIGludCBxdWV1ZV9saW1pdF9hbGlnbm1lbnRfb2Zmc2V0KHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwgc2VjdG9yX3Qgc2VjdG9yKQogewogCXVuc2lnbmVkIGludCBncmFudWxhcml0eSA9IG1heChsaW0tPnBoeXNpY2FsX2Jsb2NrX3NpemUsIGxpbS0+aW9fbWluKTsKKwl1bnNpZ25lZCBpbnQgYWxpZ25tZW50ID0gKHNlY3RvciA8PCA5KSAmIChncmFudWxhcml0eSAtIDEpOwogCi0Jb2Zmc2V0ICY9IGdyYW51bGFyaXR5IC0gMTsKLQlyZXR1cm4gKGdyYW51bGFyaXR5ICsgbGltLT5hbGlnbm1lbnRfb2Zmc2V0IC0gb2Zmc2V0KSAmIChncmFudWxhcml0eSAtIDEpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBxdWV1ZV9zZWN0b3JfYWxpZ25tZW50X29mZnNldChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKLQkJCQkJCXNlY3Rvcl90IHNlY3RvcikKLXsKLQlyZXR1cm4gcXVldWVfbGltaXRfYWxpZ25tZW50X29mZnNldCgmcS0+bGltaXRzLCBzZWN0b3IgPDwgOSk7CisJcmV0dXJuIChncmFudWxhcml0eSArIGxpbS0+YWxpZ25tZW50X29mZnNldCAtIGFsaWdubWVudCkKKwkJJiAoZ3JhbnVsYXJpdHkgLSAxKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYmRldl9hbGlnbm1lbnRfb2Zmc2V0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCkBAIC0xMTQ1LDEwICsxMTU4LDggQEAKIAlyZXR1cm4gcS0+bGltaXRzLmRpc2NhcmRfYWxpZ25tZW50OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBxdWV1ZV9zZWN0b3JfZGlzY2FyZF9hbGlnbm1lbnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCi0JCQkJCQkgc2VjdG9yX3Qgc2VjdG9yKQorc3RhdGljIGlubGluZSBpbnQgcXVldWVfbGltaXRfZGlzY2FyZF9hbGlnbm1lbnQoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCBzZWN0b3JfdCBzZWN0b3IpCiB7Ci0Jc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltID0gJnEtPmxpbWl0czsKIAl1bnNpZ25lZCBpbnQgYWxpZ25tZW50ID0gKHNlY3RvciA8PCA5KSAmIChsaW0tPmRpc2NhcmRfZ3JhbnVsYXJpdHkgLSAxKTsKIAogCXJldHVybiAobGltLT5kaXNjYXJkX2dyYW51bGFyaXR5ICsgbGltLT5kaXNjYXJkX2FsaWdubWVudCAtIGFsaWdubWVudCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2Npc3NfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9jY2lzc19kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2YjY3MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY2Npc3NfZGVmcy5oCkBAIC0wLDAgKzEsMTMwIEBACisjaWZuZGVmIENDSVNTX0RFRlNfSAorI2RlZmluZSBDQ0lTU19ERUZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIGdlbmVyYWwgYm91bmRhcnkgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0VOU0VJTkZPQllURVMgICAgICAgICAgMzIgLyogbm90ZSB0aGF0IHRoaXMgdmFsdWUgbWF5IHZhcnkKKwkJCQkgICAgICBiZXR3ZWVuIGhvc3QgaW1wbGVtZW50YXRpb25zICovCisKKy8qIENvbW1hbmQgU3RhdHVzIHZhbHVlICovCisjZGVmaW5lIENNRF9TVUNDRVNTICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBDTURfVEFSR0VUX1NUQVRVUyAgICAgICAweDAwMDEKKyNkZWZpbmUgQ01EX0RBVEFfVU5ERVJSVU4gICAgICAgMHgwMDAyCisjZGVmaW5lIENNRF9EQVRBX09WRVJSVU4gICAgICAgIDB4MDAwMworI2RlZmluZSBDTURfSU5WQUxJRCAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgQ01EX1BST1RPQ09MX0VSUiAgICAgICAgMHgwMDA1CisjZGVmaW5lIENNRF9IQVJEV0FSRV9FUlIgICAgICAgIDB4MDAwNgorI2RlZmluZSBDTURfQ09OTkVDVElPTl9MT1NUICAgICAweDAwMDcKKyNkZWZpbmUgQ01EX0FCT1JURUQgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIENNRF9BQk9SVF9GQUlMRUQgICAgICAgIDB4MDAwOQorI2RlZmluZSBDTURfVU5TT0xJQ0lURURfQUJPUlQgICAweDAwMEEKKyNkZWZpbmUgQ01EX1RJTUVPVVQgICAgICAgICAgICAgMHgwMDBCCisjZGVmaW5lIENNRF9VTkFCT1JUQUJMRQkJMHgwMDBDCisKKy8qIHRyYW5zZmVyIGRpcmVjdGlvbiAqLworI2RlZmluZSBYRkVSX05PTkUgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFhGRVJfV1JJVEUgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgWEZFUl9SRUFEICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBYRkVSX1JTVkQgICAgICAgICAgICAgICAweDAzCisKKy8qIHRhc2sgYXR0cmlidXRlICovCisjZGVmaW5lIEFUVFJfVU5UQUdHRUQgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQVRUUl9TSU1QTEUgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBBVFRSX0hFQURPRlFVRVVFICAgICAgICAweDA1CisjZGVmaW5lIEFUVFJfT1JERVJFRCAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgQVRUUl9BQ0EgICAgICAgICAgICAgICAgMHgwNworCisvKiBjZGIgdHlwZSAqLworI2RlZmluZSBUWVBFX0NNRAkJCQkweDAwCisjZGVmaW5lIFRZUEVfTVNHCQkJCTB4MDEKKworLyogVHlwZSBkZWZzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBzdHJ1Y3RzICovCisjZGVmaW5lIEJZVEUgX191OAorI2RlZmluZSBXT1JEIF9fdTE2CisjZGVmaW5lIEhXT1JEIF9fdTE2CisjZGVmaW5lIERXT1JEIF9fdTMyCisKKyNkZWZpbmUgQ0lTU19NQVhfTFVOCTEwMjQKKworI2RlZmluZSBMRVZFTDJMVU4gICAxIC8qIGluZGV4IGludG8gVGFyZ2V0KHgpIHN0cnVjdHVyZSwgZHVlIHRvIGJ5dGUgc3dhcHBpbmcgKi8KKyNkZWZpbmUgTEVWRUwzTFVOICAgMAorCisjcHJhZ21hIHBhY2soMSkKKworLyogQ29tbWFuZCBMaXN0IFN0cnVjdHVyZSAqLwordHlwZWRlZiB1bmlvbiBfU0NTSTNBZGRyX3N0cnVjdCB7CisgICBzdHJ1Y3QgeworICAgIEJZVEUgRGV2OworICAgIEJZVEUgQnVzOjY7CisgICAgQllURSBNb2RlOjI7ICAgICAgICAvKiBiMDAgKi8KKyAgfSBQZXJpcERldjsKKyAgIHN0cnVjdCB7CisgICAgQllURSBEZXZMU0I7CisgICAgQllURSBEZXZNU0I6NjsKKyAgICBCWVRFIE1vZGU6MjsgICAgICAgIC8qIGIwMSAqLworICB9IExvZ0RldjsKKyAgIHN0cnVjdCB7CisgICAgQllURSBEZXY6NTsKKyAgICBCWVRFIEJ1czozOworICAgIEJZVEUgVGFyZzo2OworICAgIEJZVEUgTW9kZToyOyAgICAgICAgLyogYjEwICovCisgIH0gTG9nVW5pdDsKK30gU0NTSTNBZGRyX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX1BoeXNEZXZBZGRyX3N0cnVjdCB7CisgIERXT1JEICAgICAgICAgICAgIFRhcmdldElkOjI0OworICBEV09SRCAgICAgICAgICAgICBCdXM6NjsKKyAgRFdPUkQgICAgICAgICAgICAgTW9kZToyOworICBTQ1NJM0FkZHJfc3RydWN0ICBUYXJnZXRbMl07IC8qIDIgbGV2ZWwgdGFyZ2V0IGRldmljZSBhZGRyICovCit9IFBoeXNEZXZBZGRyX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX0xvZ0RldkFkZHJfc3RydWN0IHsKKyAgRFdPUkQgICAgICAgICAgICBWb2xJZDozMDsKKyAgRFdPUkQgICAgICAgICAgICBNb2RlOjI7CisgIEJZVEUgICAgICAgICAgICAgcmVzZXJ2ZWRbNF07Cit9IExvZ0RldkFkZHJfc3RydWN0OworCit0eXBlZGVmIHVuaW9uIF9MVU5BZGRyX3N0cnVjdCB7CisgIEJZVEUgICAgICAgICAgICAgICBMdW5BZGRyQnl0ZXNbOF07CisgIFNDU0kzQWRkcl9zdHJ1Y3QgICBTQ1NJM0x1bls0XTsKKyAgUGh5c0RldkFkZHJfc3RydWN0IFBoeXNEZXY7CisgIExvZ0RldkFkZHJfc3RydWN0ICBMb2dEZXY7Cit9IExVTkFkZHJfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfUmVxdWVzdEJsb2NrX3N0cnVjdCB7CisgIEJZVEUgICBDREJMZW47CisgIHN0cnVjdCB7CisgICAgQllURSBUeXBlOjM7CisgICAgQllURSBBdHRyaWJ1dGU6MzsKKyAgICBCWVRFIERpcmVjdGlvbjoyOworICB9IFR5cGU7CisgIEhXT1JEICBUaW1lb3V0OworICBCWVRFICAgQ0RCWzE2XTsKK30gUmVxdWVzdEJsb2NrX3N0cnVjdDsKKwordHlwZWRlZiB1bmlvbiBfTW9yZUVyckluZm9fc3RydWN0eworICBzdHJ1Y3QgeworICAgIEJZVEUgIFJlc2VydmVkWzNdOworICAgIEJZVEUgIFR5cGU7CisgICAgRFdPUkQgRXJyb3JJbmZvOworICB9IENvbW1vbl9JbmZvOworICBzdHJ1Y3R7CisgICAgQllURSAgUmVzZXJ2ZWRbMl07CisgICAgQllURSAgb2ZmZW5zZV9zaXplOyAvKiBzaXplIG9mIG9mZmVuZGluZyBlbnRyeSAqLworICAgIEJZVEUgIG9mZmVuc2VfbnVtOyAgLyogYnl0ZSAjIG9mIG9mZmVuc2UgMC1iYXNlICovCisgICAgRFdPUkQgb2ZmZW5zZV92YWx1ZTsKKyAgfSBJbnZhbGlkX0NtZDsKK30gTW9yZUVyckluZm9fc3RydWN0OwordHlwZWRlZiBzdHJ1Y3QgX0Vycm9ySW5mb19zdHJ1Y3QgeworICBCWVRFICAgICAgICAgICAgICAgU2NzaVN0YXR1czsKKyAgQllURSAgICAgICAgICAgICAgIFNlbnNlTGVuOworICBIV09SRCAgICAgICAgICAgICAgQ29tbWFuZFN0YXR1czsKKyAgRFdPUkQgICAgICAgICAgICAgIFJlc2lkdWFsQ250OworICBNb3JlRXJySW5mb19zdHJ1Y3QgTW9yZUVyckluZm87CisgIEJZVEUgICAgICAgICAgICAgICBTZW5zZUluZm9bU0VOU0VJTkZPQllURVNdOworfSBFcnJvckluZm9fc3RydWN0OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogQ0NJU1NfREVGU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NjaXNzX2lvY3RsLmggYi9pbmNsdWRlL2xpbnV4L2NjaXNzX2lvY3RsLmgKaW5kZXggZWIxMzBiNC4uOTg2NDkzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jY2lzc19pb2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvY2Npc3NfaW9jdGwuaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9jY2lzc19kZWZzLmg+CiAKICNkZWZpbmUgQ0NJU1NfSU9DX01BR0lDICdCJwogCkBAIC0zNiwxMzMgKzM3LDYgQEAKIAogI2RlZmluZSBNQVhfS01BTExPQ19TSVpFIDEyODAwMAogCi0jaWZuZGVmIENDSVNTX0NNRF9ICi0vLyBUaGlzIGRlZmluZXMgYXJlIGR1cGxpY2F0ZWQgaW4gY2Npc3NfY21kLmggaW4gdGhlIGRyaXZlciBkaXJlY3RvcnkgCi0KLS8vZ2VuZXJhbCBib3VuZGFyeSBkZWZpbml0aW9ucwotI2RlZmluZSBTRU5TRUlORk9CWVRFUyAgICAgICAgICAzMi8vbm90ZSB0aGF0IHRoaXMgdmFsdWUgbWF5IHZhcnkgYmV0d2VlbiBob3N0IGltcGxlbWVudGF0aW9ucwotCi0vL0NvbW1hbmQgU3RhdHVzIHZhbHVlCi0jZGVmaW5lIENNRF9TVUNDRVNTICAgICAgICAgICAgIDB4MDAwMAotI2RlZmluZSBDTURfVEFSR0VUX1NUQVRVUyAgICAgICAweDAwMDEKLSNkZWZpbmUgQ01EX0RBVEFfVU5ERVJSVU4gICAgICAgMHgwMDAyCi0jZGVmaW5lIENNRF9EQVRBX09WRVJSVU4gICAgICAgIDB4MDAwMwotI2RlZmluZSBDTURfSU5WQUxJRCAgICAgICAgICAgICAweDAwMDQKLSNkZWZpbmUgQ01EX1BST1RPQ09MX0VSUiAgICAgICAgMHgwMDA1Ci0jZGVmaW5lIENNRF9IQVJEV0FSRV9FUlIgICAgICAgIDB4MDAwNgotI2RlZmluZSBDTURfQ09OTkVDVElPTl9MT1NUICAgICAweDAwMDcKLSNkZWZpbmUgQ01EX0FCT1JURUQgICAgICAgICAgICAgMHgwMDA4Ci0jZGVmaW5lIENNRF9BQk9SVF9GQUlMRUQgICAgICAgIDB4MDAwOQotI2RlZmluZSBDTURfVU5TT0xJQ0lURURfQUJPUlQgICAweDAwMEEKLSNkZWZpbmUgQ01EX1RJTUVPVVQgICAgICAgICAgICAgMHgwMDBCCi0jZGVmaW5lIENNRF9VTkFCT1JUQUJMRQkJMHgwMDBDCi0KLS8vdHJhbnNmZXIgZGlyZWN0aW9uCi0jZGVmaW5lIFhGRVJfTk9ORSAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgWEZFUl9XUklURSAgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBYRkVSX1JFQUQgICAgICAgICAgICAgICAweDAyCi0jZGVmaW5lIFhGRVJfUlNWRCAgICAgICAgICAgICAgIDB4MDMKLQotLy90YXNrIGF0dHJpYnV0ZQotI2RlZmluZSBBVFRSX1VOVEFHR0VEICAgICAgICAgICAweDAwCi0jZGVmaW5lIEFUVFJfU0lNUExFICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUgQVRUUl9IRUFET0ZRVUVVRSAgICAgICAgMHgwNQotI2RlZmluZSBBVFRSX09SREVSRUQgICAgICAgICAgICAweDA2Ci0jZGVmaW5lIEFUVFJfQUNBICAgICAgICAgICAgICAgIDB4MDcKLQotLy9jZGIgdHlwZQotI2RlZmluZSBUWVBFX0NNRAkJCQkweDAwCi0jZGVmaW5lIFRZUEVfTVNHCQkJCTB4MDEKLQotLy8gVHlwZSBkZWZzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBzdHJ1Y3RzCi0jZGVmaW5lIEJZVEUgX191OAotI2RlZmluZSBXT1JEIF9fdTE2Ci0jZGVmaW5lIEhXT1JEIF9fdTE2Ci0jZGVmaW5lIERXT1JEIF9fdTMyCi0KLSNkZWZpbmUgQ0lTU19NQVhfTFVOCTEwMjQKLQotI2RlZmluZSBMRVZFTDJMVU4gICAxICAgLy8gaW5kZXggaW50byBUYXJnZXQoeCkgc3RydWN0dXJlLCBkdWUgdG8gYnl0ZSBzd2FwcGluZwotI2RlZmluZSBMRVZFTDNMVU4gICAwCi0KLSNwcmFnbWEgcGFjaygxKQotCi0vL0NvbW1hbmQgTGlzdCBTdHJ1Y3R1cmUKLXR5cGVkZWYgdW5pb24gX1NDU0kzQWRkcl9zdHJ1Y3QgewotICAgc3RydWN0IHsKLSAgICBCWVRFIERldjsKLSAgICBCWVRFIEJ1czo2OwotICAgIEJZVEUgTW9kZToyOyAgICAgICAgLy8gYjAwCi0gIH0gUGVyaXBEZXY7Ci0gICBzdHJ1Y3QgewotICAgIEJZVEUgRGV2TFNCOwotICAgIEJZVEUgRGV2TVNCOjY7Ci0gICAgQllURSBNb2RlOjI7ICAgICAgICAvLyBiMDEKLSAgfSBMb2dEZXY7Ci0gICBzdHJ1Y3QgewotICAgIEJZVEUgRGV2OjU7Ci0gICAgQllURSBCdXM6MzsKLSAgICBCWVRFIFRhcmc6NjsKLSAgICBCWVRFIE1vZGU6MjsgICAgICAgIC8vIGIxMAotICB9IExvZ1VuaXQ7Ci19IFNDU0kzQWRkcl9zdHJ1Y3Q7Ci0KLXR5cGVkZWYgc3RydWN0IF9QaHlzRGV2QWRkcl9zdHJ1Y3QgewotICBEV09SRCAgICAgICAgICAgICBUYXJnZXRJZDoyNDsKLSAgRFdPUkQgICAgICAgICAgICAgQnVzOjY7Ci0gIERXT1JEICAgICAgICAgICAgIE1vZGU6MjsKLSAgU0NTSTNBZGRyX3N0cnVjdCAgVGFyZ2V0WzJdOyAvLzIgbGV2ZWwgdGFyZ2V0IGRldmljZSBhZGRyCi19IFBoeXNEZXZBZGRyX3N0cnVjdDsKLSAgCi10eXBlZGVmIHN0cnVjdCBfTG9nRGV2QWRkcl9zdHJ1Y3QgewotICBEV09SRCAgICAgICAgICAgIFZvbElkOjMwOwotICBEV09SRCAgICAgICAgICAgIE1vZGU6MjsKLSAgQllURSAgICAgICAgICAgICByZXNlcnZlZFs0XTsKLX0gTG9nRGV2QWRkcl9zdHJ1Y3Q7Ci0KLXR5cGVkZWYgdW5pb24gX0xVTkFkZHJfc3RydWN0IHsKLSAgQllURSAgICAgICAgICAgICAgIEx1bkFkZHJCeXRlc1s4XTsKLSAgU0NTSTNBZGRyX3N0cnVjdCAgIFNDU0kzTHVuWzRdOwotICBQaHlzRGV2QWRkcl9zdHJ1Y3QgUGh5c0RldjsKLSAgTG9nRGV2QWRkcl9zdHJ1Y3QgIExvZ0RldjsKLX0gTFVOQWRkcl9zdHJ1Y3Q7Ci0KLXR5cGVkZWYgc3RydWN0IF9SZXF1ZXN0QmxvY2tfc3RydWN0IHsKLSAgQllURSAgIENEQkxlbjsKLSAgc3RydWN0IHsKLSAgICBCWVRFIFR5cGU6MzsKLSAgICBCWVRFIEF0dHJpYnV0ZTozOwotICAgIEJZVEUgRGlyZWN0aW9uOjI7Ci0gIH0gVHlwZTsKLSAgSFdPUkQgIFRpbWVvdXQ7Ci0gIEJZVEUgICBDREJbMTZdOwotfSBSZXF1ZXN0QmxvY2tfc3RydWN0OwotCi10eXBlZGVmIHVuaW9uIF9Nb3JlRXJySW5mb19zdHJ1Y3R7Ci0gIHN0cnVjdCB7Ci0gICAgQllURSAgUmVzZXJ2ZWRbM107Ci0gICAgQllURSAgVHlwZTsKLSAgICBEV09SRCBFcnJvckluZm87Ci0gIH1Db21tb25fSW5mbzsKLSAgc3RydWN0ewotICAgIEJZVEUgIFJlc2VydmVkWzJdOwotICAgIEJZVEUgIG9mZmVuc2Vfc2l6ZTsvL3NpemUgb2Ygb2ZmZW5kaW5nIGVudHJ5Ci0gICAgQllURSAgb2ZmZW5zZV9udW07IC8vYnl0ZSAjIG9mIG9mZmVuc2UgMC1iYXNlCi0gICAgRFdPUkQgb2ZmZW5zZV92YWx1ZTsKLSAgfUludmFsaWRfQ21kOwotfU1vcmVFcnJJbmZvX3N0cnVjdDsKLXR5cGVkZWYgc3RydWN0IF9FcnJvckluZm9fc3RydWN0IHsKLSAgQllURSAgICAgICAgICAgICAgIFNjc2lTdGF0dXM7Ci0gIEJZVEUgICAgICAgICAgICAgICBTZW5zZUxlbjsKLSAgSFdPUkQgICAgICAgICAgICAgIENvbW1hbmRTdGF0dXM7Ci0gIERXT1JEICAgICAgICAgICAgICBSZXNpZHVhbENudDsKLSAgTW9yZUVyckluZm9fc3RydWN0IE1vcmVFcnJJbmZvOwotICBCWVRFICAgICAgICAgICAgICAgU2Vuc2VJbmZvW1NFTlNFSU5GT0JZVEVTXTsKLX0gRXJyb3JJbmZvX3N0cnVjdDsKLQotI3ByYWdtYSBwYWNrKCkKLSNlbmRpZiAvKiBDQ0lTU19DTURfSCAqLyAKLQogdHlwZWRlZiBzdHJ1Y3QgX0lPQ1RMX0NvbW1hbmRfc3RydWN0IHsKICAgTFVOQWRkcl9zdHJ1Y3QJICAgTFVOX2luZm87CiAgIFJlcXVlc3RCbG9ja19zdHJ1Y3QgICAgICBSZXF1ZXN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKaW5kZXggMDAwOGRlZS4uYzliYmNiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCkBAIC0yOCw2ICsyOCw3IEBACiBleHRlcm4gaW50IGNncm91cF9pbml0X2Vhcmx5KHZvaWQpOwogZXh0ZXJuIGludCBjZ3JvdXBfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGNncm91cF9sb2NrKHZvaWQpOworZXh0ZXJuIGludCBjZ3JvdXBfbG9ja19pc19oZWxkKHZvaWQpOwogZXh0ZXJuIGJvb2wgY2dyb3VwX2xvY2tfbGl2ZV9ncm91cChzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKIGV4dGVybiB2b2lkIGNncm91cF91bmxvY2sodm9pZCk7CiBleHRlcm4gdm9pZCBjZ3JvdXBfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwpAQCAtNDg2LDcgKzQ4Nyw5IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICp0YXNrX3N1YnN5c19zdGF0ZSgKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBzdWJzeXNfaWQpCiB7Ci0JcmV0dXJuIHJjdV9kZXJlZmVyZW5jZSh0YXNrLT5jZ3JvdXBzLT5zdWJzeXNbc3Vic3lzX2lkXSk7CisJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9jaGVjayh0YXNrLT5jZ3JvdXBzLT5zdWJzeXNbc3Vic3lzX2lkXSwKKwkJCQkgICAgIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8CisJCQkJICAgICBjZ3JvdXBfbG9ja19pc19oZWxkKCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjZ3JvdXAqIHRhc2tfY2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaCBiL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAppbmRleCA4YTRhMTMwLi40YmNhOGI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCkBAIC0xNTQsNiArMTU0LDcgQEAKICAqIEBtYXhfaWRsZV9uczoJbWF4IGlkbGUgdGltZSBwZXJtaXR0ZWQgYnkgdGhlIGNsb2Nrc291cmNlIChuc2VjcykKICAqIEBmbGFnczoJCWZsYWdzIGRlc2NyaWJpbmcgc3BlY2lhbCBwcm9wZXJ0aWVzCiAgKiBAdnJlYWQ6CQl2c3lzY2FsbCBiYXNlZCByZWFkCisgKiBAc3VzcGVuZDoJCXN1c3BlbmQgZnVuY3Rpb24gZm9yIHRoZSBjbG9ja3NvdXJjZSwgaWYgbmVjZXNzYXJ5CiAgKiBAcmVzdW1lOgkJcmVzdW1lIGZ1bmN0aW9uIGZvciB0aGUgY2xvY2tzb3VyY2UsIGlmIG5lY2Vzc2FyeQogICovCiBzdHJ1Y3QgY2xvY2tzb3VyY2UgewpAQCAtMTcyLDcgKzE3Myw4IEBACiAJdTY0IG1heF9pZGxlX25zOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJY3ljbGVfdCAoKnZyZWFkKSh2b2lkKTsKLQl2b2lkICgqcmVzdW1lKSh2b2lkKTsKKwl2b2lkICgqc3VzcGVuZCkoc3RydWN0IGNsb2Nrc291cmNlICpjcyk7CisJdm9pZCAoKnJlc3VtZSkoc3RydWN0IGNsb2Nrc291cmNlICpjcyk7CiAjaWZkZWYgQ09ORklHX0lBNjQKIAl2b2lkICpmc3lzX21taW87ICAgICAgICAvKiB1c2VkIGJ5IGZzeXNjYWxsIGFzbSBjb2RlICovCiAjZGVmaW5lIENMS1NSQ19GU1lTX01NSU9fU0VUKG1taW8sIGFkZHIpICAgICAgKChtbWlvKSA9IChhZGRyKSkKQEAgLTI3Nyw2ICsyNzksNyBAQAogZXh0ZXJuIHZvaWQgY2xvY2tzb3VyY2VfdG91Y2hfd2F0Y2hkb2codm9pZCk7CiBleHRlcm4gc3RydWN0IGNsb2Nrc291cmNlKiBjbG9ja3NvdXJjZV9nZXRfbmV4dCh2b2lkKTsKIGV4dGVybiB2b2lkIGNsb2Nrc291cmNlX2NoYW5nZV9yYXRpbmcoc3RydWN0IGNsb2Nrc291cmNlICpjcywgaW50IHJhdGluZyk7CitleHRlcm4gdm9pZCBjbG9ja3NvdXJjZV9zdXNwZW5kKHZvaWQpOwogZXh0ZXJuIHZvaWQgY2xvY2tzb3VyY2VfcmVzdW1lKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBjbG9ja3NvdXJjZSAqIF9faW5pdCBfX3dlYWsgY2xvY2tzb3VyY2VfZGVmYXVsdF9jbG9jayh2b2lkKTsKIGV4dGVybiB2b2lkIGNsb2Nrc291cmNlX21hcmtfdW5zdGFibGUoc3RydWN0IGNsb2Nrc291cmNlICpjcyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdW1hc2suaCBiL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCmluZGV4IGQ3N2I1NDcuLmRiY2VlNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCkBAIC0xNDMsNiArMTQzLDggQEAKIAogI2RlZmluZSBmb3JfZWFjaF9jcHUoY3B1LCBtYXNrKQkJCVwKIAlmb3IgKChjcHUpID0gMDsgKGNwdSkgPCAxOyAoY3B1KSsrLCAodm9pZCltYXNrKQorI2RlZmluZSBmb3JfZWFjaF9jcHVfbm90KGNwdSwgbWFzaykJCVwKKwlmb3IgKChjcHUpID0gMDsgKGNwdSkgPCAxOyAoY3B1KSsrLCAodm9pZCltYXNrKQogI2RlZmluZSBmb3JfZWFjaF9jcHVfYW5kKGNwdSwgbWFzaywgYW5kKQlcCiAJZm9yICgoY3B1KSA9IDA7IChjcHUpIDwgMTsgKGNwdSkrKywgKHZvaWQpbWFzaywgKHZvaWQpYW5kKQogI2Vsc2UKQEAgLTIwMyw2ICsyMDUsMTggQEAKIAkJKGNwdSkgPCBucl9jcHVfaWRzOykKIAogLyoqCisgKiBmb3JfZWFjaF9jcHVfbm90IC0gaXRlcmF0ZSBvdmVyIGV2ZXJ5IGNwdSBpbiBhIGNvbXBsZW1lbnRlZCBtYXNrCisgKiBAY3B1OiB0aGUgKG9wdGlvbmFsbHkgdW5zaWduZWQpIGludGVnZXIgaXRlcmF0b3IKKyAqIEBtYXNrOiB0aGUgY3B1bWFzayBwb2ludGVyCisgKgorICogQWZ0ZXIgdGhlIGxvb3AsIGNwdSBpcyA+PSBucl9jcHVfaWRzLgorICovCisjZGVmaW5lIGZvcl9lYWNoX2NwdV9ub3QoY3B1LCBtYXNrKQkJCQlcCisJZm9yICgoY3B1KSA9IC0xOwkJCQkJXAorCQkoY3B1KSA9IGNwdW1hc2tfbmV4dF96ZXJvKChjcHUpLCAobWFzaykpLAlcCisJCShjcHUpIDwgbnJfY3B1X2lkczspCisKKy8qKgogICogZm9yX2VhY2hfY3B1X2FuZCAtIGl0ZXJhdGUgb3ZlciBldmVyeSBjcHUgaW4gYm90aCBtYXNrcwogICogQGNwdTogdGhlIChvcHRpb25hbGx5IHVuc2lnbmVkKSBpbnRlZ2VyIGl0ZXJhdG9yCiAgKiBAbWFzazogdGhlIGZpcnN0IGNwdW1hc2sgcG9pbnRlcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcmVkLmggYi9pbmNsdWRlL2xpbnV4L2NyZWQuaAppbmRleCA0ZTMzODdhLi40ZGIwOWY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NyZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyZWQuaApAQCAtMjgwLDcgKzI4MCw3IEBACiAgKiB0YXNrIG9yIGJ5IGhvbGRpbmcgdGFza2xpc3RfbG9jayB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgdW5saW5rZWQuCiAgKi8KICNkZWZpbmUgX190YXNrX2NyZWQodGFzaykgXAotCSgoY29uc3Qgc3RydWN0IGNyZWQgKikocmN1X2RlcmVmZXJlbmNlKCh0YXNrKS0+cmVhbF9jcmVkKSkpCisJKChjb25zdCBzdHJ1Y3QgY3JlZCAqKShyY3VfZGVyZWZlcmVuY2VfY2hlY2soKHRhc2spLT5yZWFsX2NyZWQsIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8IGxvY2tkZXBfaXNfaGVsZCgmdGFza2xpc3RfbG9jaykpKSkKIAogLyoqCiAgKiBnZXRfdGFza19jcmVkIC0gR2V0IGFub3RoZXIgdGFzaydzIG9iamVjdGl2ZSBjcmVkZW50aWFscwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggYTYyNzk5Zi4uYjMwNTI3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC00NzIsNiArNDcyLDIzIEBACiAJcmV0dXJuIGRldi0+a29iai5zdGF0ZV9pbl9zeXNmczsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+cG93ZXIuc3RhdHVzID09IERQTV9PTikKKwkJZGV2LT5wb3dlci5hc3luY19zdXNwZW5kID0gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9kaXNhYmxlX2FzeW5jX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWlmIChkZXYtPnBvd2VyLnN0YXR1cyA9PSBEUE1fT04pCisJCWRldi0+cG93ZXIuYXN5bmNfc3VzcGVuZCA9IGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgZGV2aWNlX2FzeW5jX3N1c3BlbmRfZW5hYmxlZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuICEhZGV2LT5wb3dlci5hc3luY19zdXNwZW5kOworfQorCiB2b2lkIGRyaXZlcl9pbml0KHZvaWQpOwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbGYuaCBiL2luY2x1ZGUvbGludXgvZWxmLmgKaW5kZXggMGNjNGQ1NS4uYWQ5OTBjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lbGYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VsZi5oCkBAIC0zNDksNyArMzQ5LDExIEBACiAjZGVmaW5lIEVMRl9PU0FCSSBFTEZPU0FCSV9OT05FCiAjZW5kaWYKIAotLyogTm90ZXMgdXNlZCBpbiBFVF9DT1JFICovCisvKgorICogTm90ZXMgdXNlZCBpbiBFVF9DT1JFLiBBcmNoaXRlY3R1cmVzIGV4cG9ydCBzb21lIG9mIHRoZSBhcmNoIHJlZ2lzdGVyIHNldHMKKyAqIHVzaW5nIHRoZSBjb3JyZXNwb25kaW5nIG5vdGUgdHlwZXMgdmlhIHRoZSBQVFJBQ0VfR0VUUkVHU0VUIGFuZAorICogUFRSQUNFX1NFVFJFR1NFVCByZXF1ZXN0cy4KKyAqLwogI2RlZmluZSBOVF9QUlNUQVRVUwkxCiAjZGVmaW5lIE5UX1BSRlBSRUcJMgogI2RlZmluZSBOVF9QUlBTSU5GTwkzCkBAIC0zNjEsNyArMzY1LDEzIEBACiAjZGVmaW5lIE5UX1BQQ19WU1gJMHgxMDIJCS8qIFBvd2VyUEMgVlNYIHJlZ2lzdGVycyAqLwogI2RlZmluZSBOVF8zODZfVExTCTB4MjAwCQkvKiBpMzg2IFRMUyBzbG90cyAoc3RydWN0IHVzZXJfZGVzYykgKi8KICNkZWZpbmUgTlRfMzg2X0lPUEVSTQkweDIwMQkJLyogeDg2IGlvIHBlcm1pc3Npb24gYml0bWFwICgxPWRlbnkpICovCisjZGVmaW5lIE5UX1g4Nl9YU1RBVEUJMHgyMDIJCS8qIHg4NiBleHRlbmRlZCBzdGF0ZSB1c2luZyB4c2F2ZSAqLwogI2RlZmluZSBOVF9TMzkwX0hJR0hfR1BSUwkweDMwMAkvKiBzMzkwIHVwcGVyIHJlZ2lzdGVyIGhhbHZlcyAqLworI2RlZmluZSBOVF9TMzkwX1RJTUVSCTB4MzAxCQkvKiBzMzkwIHRpbWVyIHJlZ2lzdGVyICovCisjZGVmaW5lIE5UX1MzOTBfVE9EQ01QCTB4MzAyCQkvKiBzMzkwIFRPRCBjbG9jayBjb21wYXJhdG9yIHJlZ2lzdGVyICovCisjZGVmaW5lIE5UX1MzOTBfVE9EUFJFRwkweDMwMwkJLyogczM5MCBUT0QgcHJvZ3JhbW1hYmxlIHJlZ2lzdGVyICovCisjZGVmaW5lIE5UX1MzOTBfQ1RSUwkweDMwNAkJLyogczM5MCBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBOVF9TMzkwX1BSRUZJWAkweDMwNQkJLyogczM5MCBwcmVmaXggcmVnaXN0ZXIgKi8KIAogCiAvKiBOb3RlIGhlYWRlciBpbiBhIFBUX05PVEUgc2VjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mZHRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaAppbmRleCBhMmVjNzRiLi4wMTNkYzUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaApAQCAtNTcsNyArNTcsMTQgQEAKIAlzdHJ1Y3QgZmlsZSAqIGZkX2FycmF5W05SX09QRU5fREVGQVVMVF07CiB9OwogCi0jZGVmaW5lIGZpbGVzX2ZkdGFibGUoZmlsZXMpIChyY3VfZGVyZWZlcmVuY2UoKGZpbGVzKS0+ZmR0KSkKKyNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX2NoZWNrX2ZkdGFibGUoZmlsZXMsIGZkdGZkKSBcCisJKHJjdV9kZXJlZmVyZW5jZV9jaGVjaygoZmR0ZmQpLCBcCisJCQkgICAgICAgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwgXAorCQkJICAgICAgIGxvY2tkZXBfaXNfaGVsZCgmKGZpbGVzKS0+ZmlsZV9sb2NrKSB8fCBcCisJCQkgICAgICAgYXRvbWljX3JlYWQoJihmaWxlcyktPmNvdW50KSA9PSAxKSkKKworI2RlZmluZSBmaWxlc19mZHRhYmxlKGZpbGVzKSBcCisJCShyY3VfZGVyZWZlcmVuY2VfY2hlY2tfZmR0YWJsZSgoZmlsZXMpLCAoZmlsZXMpLT5mZHQpKQogCiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zOwogc3RydWN0IHZmc21vdW50OwpAQCAtNzgsNyArODUsNyBAQAogCXN0cnVjdCBmZHRhYmxlICpmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKIAogCWlmIChmZCA8IGZkdC0+bWF4X2ZkcykKLQkJZmlsZSA9IHJjdV9kZXJlZmVyZW5jZShmZHQtPmZkW2ZkXSk7CisJCWZpbGUgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2tfZmR0YWJsZShmaWxlcywgZmR0LT5mZFtmZF0pOwogCXJldHVybiBmaWxlOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaAppbmRleCAwYjRmOTdkLi4wMWU2YWRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKQEAgLTEzNCw2ICsxMzQsOCBAQAogdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmVfZnVuYyhjaGFyICpnbG9iLCBzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyAqb3BzKTsKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlX2FsbChjaGFyICpnbG9iKTsKIAorZXh0ZXJuIGludCBmdHJhY2VfdGV4dF9yZXNlcnZlZCh2b2lkICpzdGFydCwgdm9pZCAqZW5kKTsKKwogZW51bSB7CiAJRlRSQUNFX0ZMX0ZSRUUJCT0gKDEgPDwgMCksCiAJRlRSQUNFX0ZMX0ZBSUxFRAk9ICgxIDw8IDEpLApAQCAtMTQxLDcgKzE0Myw2IEBACiAJRlRSQUNFX0ZMX0VOQUJMRUQJPSAoMSA8PCAzKSwKIAlGVFJBQ0VfRkxfTk9UUkFDRQk9ICgxIDw8IDQpLAogCUZUUkFDRV9GTF9DT05WRVJURUQJPSAoMSA8PCA1KSwKLQlGVFJBQ0VfRkxfRlJPWkVOCT0gKDEgPDwgNiksCiB9OwogCiBzdHJ1Y3QgZHluX2Z0cmFjZSB7CkBAIC0yNTAsNiArMjUxLDEwIEBACiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CitzdGF0aWMgaW5saW5lIGludCBmdHJhY2VfdGV4dF9yZXNlcnZlZCh2b2lkICpzdGFydCwgdm9pZCAqZW5kKQoreworCXJldHVybiAwOworfQogI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLwogCiAvKiB0b3RhbGx5IGRpc2FibGUgZnRyYWNlIC0gY2FuIG5vdCByZS1lbmFibGUgYWZ0ZXIgdGhpcyAqLwpAQCAtNTExLDQgKzUxNiwxMCBAQAogCiAjZW5kaWYgLyogQ09ORklHX0hXX0JSQU5DSF9UUkFDRVIgKi8KIAorI2lmZGVmIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMKKwordW5zaWduZWQgbG9uZyBhcmNoX3N5c2NhbGxfYWRkcihpbnQgbnIpOworCisjZW5kaWYgLyogQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyAqLworCiAjZW5kaWYgLyogX0xJTlVYX0ZUUkFDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaAppbmRleCAyMjMzYzk4Li42YjdjNDQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHJhY2Vfc2VxLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KIAogc3RydWN0IHRyYWNlX2FycmF5Owogc3RydWN0IHRyYWNlcjsKQEAgLTEyMSw5ICsxMjIsOCBAQAogCWludAkJCSgqcmVnZnVuYykoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICopOwogCXZvaWQJCQkoKnVucmVnZnVuYykoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICopOwogCWludAkJCWlkOworCWNvbnN0IGNoYXIJCSpwcmludF9mbXQ7CiAJaW50CQkJKCpyYXdfaW5pdCkoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICopOwotCWludAkJCSgqc2hvd19mb3JtYXQpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqLAotCQkJCQkgICAgICAgc3RydWN0IHRyYWNlX3NlcSAqKTsKIAlpbnQJCQkoKmRlZmluZV9maWVsZHMpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWZpZWxkczsKIAlpbnQJCQlmaWx0ZXJfYWN0aXZlOwpAQCAtMTM4LDkgKzEzOCw2IEBACiAKICNkZWZpbmUgRlRSQUNFX01BWF9QUk9GSUxFX1NJWkUJMjA0OAogCi1leHRlcm4gY2hhciAqcGVyZl90cmFjZV9idWY7Ci1leHRlcm4gY2hhciAqcGVyZl90cmFjZV9idWZfbm1pOwotCiAjZGVmaW5lIE1BWF9GSUxURVJfUFJFRAkJMzIKICNkZWZpbmUgTUFYX0ZJTFRFUl9TVFJfVkFMCTI1NgkvKiBTaG91bGQgaGFuZGxlIEtTWU1fU1lNQk9MX0xFTiAqLwogCkBAIC0xODgsMTMgKzE4NSwyNyBAQAogCQlfX3RyYWNlX3ByaW50ayhpcCwgZm10LCAjI2FyZ3MpOwkJCVwKIH0gd2hpbGUgKDApCiAKLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogc3RydWN0IHBlcmZfZXZlbnQ7CiBleHRlcm4gaW50IGZ0cmFjZV9wcm9maWxlX2VuYWJsZShpbnQgZXZlbnRfaWQpOwogZXh0ZXJuIHZvaWQgZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZShpbnQgZXZlbnRfaWQpOwogZXh0ZXJuIGludCBmdHJhY2VfcHJvZmlsZV9zZXRfZmlsdGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGV2ZW50X2lkLAogCQkJCSAgICAgY2hhciAqZmlsdGVyX3N0cik7CiBleHRlcm4gdm9pZCBmdHJhY2VfcHJvZmlsZV9mcmVlX2ZpbHRlcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOworZXh0ZXJuIHZvaWQgKgorZnRyYWNlX3BlcmZfYnVmX3ByZXBhcmUoaW50IHNpemUsIHVuc2lnbmVkIHNob3J0IHR5cGUsIGludCAqcmN0eHAsCisJCQkgdW5zaWduZWQgbG9uZyAqaXJxX2ZsYWdzKTsKKworc3RhdGljIGlubGluZSB2b2lkCitmdHJhY2VfcGVyZl9idWZfc3VibWl0KHZvaWQgKnJhd19kYXRhLCBpbnQgc2l6ZSwgaW50IHJjdHgsIHU2NCBhZGRyLAorCQkgICAgICAgdTY0IGNvdW50LCB1bnNpZ25lZCBsb25nIGlycV9mbGFncykKK3sKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gcmF3X2RhdGE7CisKKwlwZXJmX3RwX2V2ZW50KGVudHJ5LT50eXBlLCBhZGRyLCBjb3VudCwgcmF3X2RhdGEsIHNpemUpOworCXBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQocmN0eCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKK30KICNlbmRpZgogCiAjZW5kaWYgLyogX0xJTlVYX0ZUUkFDRV9FVkVOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZC5oIGIvaW5jbHVkZS9saW51eC9oaWQuaAppbmRleCA4NzA5MzY1Li5iMTM0NGVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hpZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaGlkLmgKQEAgLTUwMSw3ICs1MDEsNyBAQAogCXZvaWQgKCpoaWRkZXZfcmVwb3J0X2V2ZW50KSAoc3RydWN0IGhpZF9kZXZpY2UgKiwgc3RydWN0IGhpZF9yZXBvcnQgKik7CiAKIAkvKiBoYW5kbGVyIGZvciByYXcgb3V0cHV0IGRhdGEsIHVzZWQgYnkgaGlkcmF3ICovCi0JaW50ICgqaGlkX291dHB1dF9yYXdfcmVwb3J0KSAoc3RydWN0IGhpZF9kZXZpY2UgKiwgX191OCAqLCBzaXplX3QpOworCWludCAoKmhpZF9vdXRwdXRfcmF3X3JlcG9ydCkgKHN0cnVjdCBoaWRfZGV2aWNlICosIF9fdTggKiwgc2l6ZV90LCB1bnNpZ25lZCBjaGFyKTsKIAogCS8qIGRlYnVnZ2luZyBzdXBwb3J0IHZpYSBkZWJ1Z2ZzICovCiAJdW5zaWduZWQgc2hvcnQgZGVidWc7CkBAIC02NjMsNyArNjYzLDcgQEAKIAogLyogQXBwbGljYXRpb25zIGZyb20gSElEIFVzYWdlIFRhYmxlcyA0LzgvOTkgVmVyc2lvbiAxLjEgKi8KIC8qIFdlIGlnbm9yZSBhIGZldyBpbnB1dCBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgbm90IHdpZGVseSB1c2VkICovCi0jZGVmaW5lIElTX0lOUFVUX0FQUExJQ0FUSU9OKGEpICgoKGEgPj0gMHgwMDAxMDAwMCkgJiYgKGEgPD0gMHgwMDAxMDAwOCkpIHx8IChhID09IDB4MDAwMTAwODApIHx8IChhID09IDB4MDAwYzAwMDEpIHx8IChhID09IDB4MDAwZDAwMDIpKQorI2RlZmluZSBJU19JTlBVVF9BUFBMSUNBVElPTihhKSAoKChhID49IDB4MDAwMTAwMDApICYmIChhIDw9IDB4MDAwMTAwMDgpKSB8fCAoYSA9PSAweDAwMDEwMDgwKSB8fCAoYSA9PSAweDAwMGMwMDAxKSB8fCAoKGEgPj0gMHgwMDBkMDAwMikgJiYgKGEgPD0gMHgwMDBkMDAwNikpKQogCiAvKiBISUQgY29yZSBBUEkgKi8KIApAQCAtNjkwLDYgKzY5MCw3IEBACiBpbnQgaGlkaW5wdXRfZmluZF9maWVsZChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIHN0cnVjdCBoaWRfZmllbGQgKipmaWVsZCk7CiB2b2lkIGhpZF9vdXRwdXRfcmVwb3J0KHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQsIF9fdTggKmRhdGEpOwogc3RydWN0IGhpZF9kZXZpY2UgKmhpZF9hbGxvY2F0ZV9kZXZpY2Uodm9pZCk7CitzdHJ1Y3QgaGlkX3JlcG9ydCAqaGlkX3JlZ2lzdGVyX3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlLCB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCBpZCk7CiBpbnQgaGlkX3BhcnNlX3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBfX3U4ICpzdGFydCwgdW5zaWduZWQgc2l6ZSk7CiBpbnQgaGlkX2NoZWNrX2tleXNfcHJlc3NlZChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKIGludCBoaWRfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBpbnQgY29ubmVjdF9tYXNrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oIGIvaW5jbHVkZS9saW51eC9oaWdobWVtLmgKaW5kZXggYWIyY2MyMC4uNzQxNTJjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWdobWVtLmgKKysrIGIvaW5jbHVkZS9saW51eC9oaWdobWVtLmgKQEAgLTE3LDYgKzE3LDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfa2VybmVsX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewogfQorc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2tlcm5lbF92bWFwX3JhbmdlKHZvaWQgKnZhZGRyLCBpbnQgc2l6ZSkKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlX2tlcm5lbF92bWFwX3JhbmdlKHZvaWQgKnZhZGRyLCBpbnQgc2l6ZSkKK3sKK30KICNlbmRpZgogCiAjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLXBueC5oIGIvaW5jbHVkZS9saW51eC9pMmMtcG54LmgKaW5kZXggOWViMDdiYi4uYTg3MTI0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMtcG54LmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMtcG54LmgKQEAgLTEyLDkgKzEyLDggQEAKICNpZm5kZWYgX19JMkNfUE5YX0hfXwogI2RlZmluZSBfX0kyQ19QTlhfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9wbS5oPgotCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOworc3RydWN0IGNsazsKIAogc3RydWN0IGkyY19wbnhfbWlmIHsKIAlpbnQJCQlyZXQ7CQkvKiBSZXR1cm4gdmFsdWUgKi8KQEAgLTI2LDIwICsyNSwxOCBAQAogfTsKIAogc3RydWN0IGkyY19wbnhfYWxnb19kYXRhIHsKLQl1MzIJCQliYXNlOwotCXUzMgkJCWlvYWRkcjsKLQlpbnQJCQlpcnE7CisJdm9pZCBfX2lvbWVtCQkqaW9hZGRyOwogCXN0cnVjdCBpMmNfcG54X21pZgltaWY7CiAJaW50CQkJbGFzdDsKKwlzdHJ1Y3QgY2xrCQkqY2xrOworCXN0cnVjdCBpMmNfcG54X2RhdGEJKmkyY19wbng7CisJc3RydWN0IGkyY19hZGFwdGVyCWFkYXB0ZXI7CiB9OwogCiBzdHJ1Y3QgaTJjX3BueF9kYXRhIHsKLQlpbnQgKCpzdXNwZW5kKSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKLQlpbnQgKCpyZXN1bWUpIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKLQl1MzIgKCpjYWxjdWxhdGVfaW5wdXRfZnJlcSkgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwotCWludCAoKnNldF9jbG9ja19ydW4pIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKLQlpbnQgKCpzZXRfY2xvY2tfc3RvcCkgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKKwljb25zdCBjaGFyICpuYW1lOworCXUzMiBiYXNlOworCWludCBpcnE7CiB9OwogCiAjZW5kaWYgLyogX19JMkNfUE5YX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvdHdsLmggYi9pbmNsdWRlL2xpbnV4L2kyYy90d2wuaAppbmRleCBiZjFjNWJlLi43ODk3ZjMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy90d2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy90d2wuaApAQCAtNTQ3LDYgKzU0NywxMCBAQAogCXVuc2lnbmVkIGludAlhdWRpb19tY2xrOwogCXN0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEJCSphdWRpbzsKIAlzdHJ1Y3QgdHdsNDAzMF9jb2RlY192aWJyYV9kYXRhCQkqdmlicmE7CisKKwkvKiB0d2w2MDMwICovCisJaW50IGF1ZHB3cm9uX2dwaW87ICAgICAgLyogYXVkaW8gcG93ZXItb24gZ3BpbyAqLworCWludCBuYXVkaW50X2lycTsgICAgICAgIC8qIGF1ZGlvIGludGVycnVwdCAqLwogfTsKIAogc3RydWN0IHR3bDQwMzBfcGxhdGZvcm1fZGF0YSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyby5oIGIvaW5jbHVkZS9saW51eC9pMm8uaAppbmRleCA0YzRlNTdkLi44NzAxOGRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyby5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJvLmgKQEAgLTM4NSw3ICszODUsNyBAQAogLyogZGVmaW5lcyBmb3IgbWF4X3NlY3RvcnMgYW5kIG1heF9waHlzX3NlZ21lbnRzICovCiAjZGVmaW5lIEkyT19NQVhfU0VDVE9SUwkJCTEwMjQKICNkZWZpbmUgSTJPX01BWF9TRUNUT1JTX0xJTUlURUQJCTEyOAotI2RlZmluZSBJMk9fTUFYX1BIWVNfU0VHTUVOVFMJCU1BWF9QSFlTX1NFR01FTlRTCisjZGVmaW5lIEkyT19NQVhfUEhZU19TRUdNRU5UUwkJQkxLX01BWF9TRUdNRU5UUwogCiAvKgogICoJTWVzc2FnZSBzdHJ1Y3R1cmVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0LmggYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKaW5kZXggNjYzMjA4YS4uZjQ0ZWU5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5wdXQuaApAQCAtNTk4LDYgKzU5OCw0OCBAQAogCiAjZGVmaW5lIEtFWV9DQU1FUkFfRk9DVVMJMHgyMTAKIAorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWQkJMHgyYzAKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxCQkweDJjMAorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTIJCTB4MmMxCisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMwkJMHgyYzIKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk0CQkweDJjMworI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTUJCTB4MmM0CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZNgkJMHgyYzUKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk3CQkweDJjNgorI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTgJCTB4MmM3CisjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZOQkJMHgyYzgKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMAkJMHgyYzkKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMQkJMHgyY2EKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMgkJMHgyY2IKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMwkJMHgyY2MKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNAkJMHgyY2QKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNQkJMHgyY2UKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNgkJMHgyY2YKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNwkJMHgyZDAKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxOAkJMHgyZDEKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxOQkJMHgyZDIKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMAkJMHgyZDMKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMQkJMHgyZDQKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMgkJMHgyZDUKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMwkJMHgyZDYKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNAkJMHgyZDcKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNQkJMHgyZDgKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNgkJMHgyZDkKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNwkJMHgyZGEKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyOAkJMHgyZGIKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyOQkJMHgyZGMKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMAkJMHgyZGQKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMQkJMHgyZGUKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMgkJMHgyZGYKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMwkJMHgyZTAKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNAkJMHgyZTEKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNQkJMHgyZTIKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNgkJMHgyZTMKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNwkJMHgyZTQKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzOAkJMHgyZTUKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzOQkJMHgyZTYKKyNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk0MAkJMHgyZTcKKwogLyogV2UgYXZvaWQgbG93IGNvbW1vbiBrZXlzIGluIG1vZHVsZSBhbGlhc2VzIHNvIHRoZXkgZG9uJ3QgZ2V0IGh1Z2UuICovCiAjZGVmaW5lIEtFWV9NSU5fSU5URVJFU1RJTkcJS0VZX01VVEUKICNkZWZpbmUgS0VZX01BWAkJCTB4MmZmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvY29udGV4dC5oIGIvaW5jbHVkZS9saW51eC9pb2NvbnRleHQuaAppbmRleCA3OGVmMDIzLi4xMTk1YTgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvY29udGV4dC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW9jb250ZXh0LmgKQEAgLTQ5LDggKzQ5LDggQEAKIAkvKgogCSAqIEZvciByZXF1ZXN0IGJhdGNoaW5nCiAJICovCi0JdW5zaWduZWQgbG9uZyBsYXN0X3dhaXRlZDsgLyogVGltZSBsYXN0IHdva2VuIGFmdGVyIHdhaXQgZm9yIHJlcXVlc3QgKi8KIAlpbnQgbnJfYmF0Y2hfcmVxdWVzdHM7ICAgICAvKiBOdW1iZXIgb2YgcmVxdWVzdHMgbGVmdCBpbiB0aGUgYmF0Y2ggKi8KKwl1bnNpZ25lZCBsb25nIGxhc3Rfd2FpdGVkOyAvKiBUaW1lIGxhc3Qgd29rZW4gYWZ0ZXIgd2FpdCBmb3IgcmVxdWVzdCAqLwogCiAJc3RydWN0IHJhZGl4X3RyZWVfcm9vdCByYWRpeF9yb290OwogCXN0cnVjdCBobGlzdF9oZWFkIGNpY19saXN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb3BvcnQuaCBiL2luY2x1ZGUvbGludXgvaW9wb3J0LmgKaW5kZXggNzEyOTUwNC4uZGRhOTg0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb3BvcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCkBAIC0xMTIsNiArMTEyLDcgQEAKIAogZXh0ZXJuIGludCByZXF1ZXN0X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcm9vdCwgc3RydWN0IHJlc291cmNlICpuZXcpOwogZXh0ZXJuIGludCByZWxlYXNlX3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqbmV3KTsKK3ZvaWQgcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpuZXcpOwogZXh0ZXJuIHZvaWQgcmVzZXJ2ZV9yZWdpb25fd2l0aF9zcGxpdChzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsCiAJCQkgICAgIHJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IGVuZCwKIAkJCSAgICAgY29uc3QgY2hhciAqbmFtZSk7CkBAIC0xMjAsOCArMTIxLDEwIEBACiBleHRlcm4gaW50IGFsbG9jYXRlX3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcm9vdCwgc3RydWN0IHJlc291cmNlICpuZXcsCiAJCQkgICAgIHJlc291cmNlX3NpemVfdCBzaXplLCByZXNvdXJjZV9zaXplX3QgbWluLAogCQkJICAgICByZXNvdXJjZV9zaXplX3QgbWF4LCByZXNvdXJjZV9zaXplX3QgYWxpZ24sCi0JCQkgICAgIHZvaWQgKCphbGlnbmYpKHZvaWQgKiwgc3RydWN0IHJlc291cmNlICosCi0JCQkJCSAgICByZXNvdXJjZV9zaXplX3QsIHJlc291cmNlX3NpemVfdCksCisJCQkgICAgIHJlc291cmNlX3NpemVfdCAoKmFsaWduZikodm9pZCAqLAorCQkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqLAorCQkJCQkJICAgICAgIHJlc291cmNlX3NpemVfdCwKKwkJCQkJCSAgICAgICByZXNvdXJjZV9zaXplX3QpLAogCQkJICAgICB2b2lkICphbGlnbmZfZGF0YSk7CiBpbnQgYWRqdXN0X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcmVzLCByZXNvdXJjZV9zaXplX3Qgc3RhcnQsCiAJCSAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCA0NTE0ODFjLi5kMTM0OTJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTkwLDcgKzkwLDcgQEAKICAqIEBzdGFydHVwOgkJc3RhcnQgdXAgdGhlIGludGVycnVwdCAoZGVmYXVsdHMgdG8gLT5lbmFibGUgaWYgTlVMTCkKICAqIEBzaHV0ZG93bjoJCXNodXQgZG93biB0aGUgaW50ZXJydXB0IChkZWZhdWx0cyB0byAtPmRpc2FibGUgaWYgTlVMTCkKICAqIEBlbmFibGU6CQllbmFibGUgdGhlIGludGVycnVwdCAoZGVmYXVsdHMgdG8gY2hpcC0+dW5tYXNrIGlmIE5VTEwpCi0gKiBAZGlzYWJsZToJCWRpc2FibGUgdGhlIGludGVycnVwdCAoZGVmYXVsdHMgdG8gY2hpcC0+bWFzayBpZiBOVUxMKQorICogQGRpc2FibGU6CQlkaXNhYmxlIHRoZSBpbnRlcnJ1cHQKICAqIEBhY2s6CQlzdGFydCBvZiBhIG5ldyBpbnRlcnJ1cHQKICAqIEBtYXNrOgkJbWFzayBhbiBpbnRlcnJ1cHQgc291cmNlCiAgKiBAbWFza19hY2s6CQlhY2sgYW5kIG1hc2sgYW4gaW50ZXJydXB0IHNvdXJjZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggMzI4YmNhNi4uMTIyMWQyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0xMjQsNyArMTI0LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQCi0gIHZvaWQgX19taWdodF9zbGVlcChjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IHByZWVtcHRfb2Zmc2V0KTsKKyAgdm9pZCBfX21pZ2h0X3NsZWVwKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgcHJlZW1wdF9vZmZzZXQpOwogLyoqCiAgKiBtaWdodF9zbGVlcCAtIGFubm90YXRpb24gZm9yIGZ1bmN0aW9ucyB0aGF0IGNhbiBzbGVlcAogICoKQEAgLTEzOCw3ICsxMzgsOCBAQAogIyBkZWZpbmUgbWlnaHRfc2xlZXAoKSBcCiAJZG8geyBfX21pZ2h0X3NsZWVwKF9fRklMRV9fLCBfX0xJTkVfXywgMCk7IG1pZ2h0X3Jlc2NoZWQoKTsgfSB3aGlsZSAoMCkKICNlbHNlCi0gIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21pZ2h0X3NsZWVwKGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgcHJlZW1wdF9vZmZzZXQpIHsgfQorICBzdGF0aWMgaW5saW5lIHZvaWQgX19taWdodF9zbGVlcChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKwkJCQkgICBpbnQgcHJlZW1wdF9vZmZzZXQpIHsgfQogIyBkZWZpbmUgbWlnaHRfc2xlZXAoKSBkbyB7IG1pZ2h0X3Jlc2NoZWQoKTsgfSB3aGlsZSAoMCkKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpc3QuaCBiL2luY2x1ZGUvbGludXgvbGlzdC5oCmluZGV4IDk2OWY2ZTkuLjVkOWM2NTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbGlzdC5oCkBAIC0yMDYsNiArMjA2LDIwIEBACiB9CiAKIC8qKgorICogbGlzdF9yb3RhdGVfbGVmdCAtIHJvdGF0ZSB0aGUgbGlzdCB0byB0aGUgbGVmdAorICogQGhlYWQ6IHRoZSBoZWFkIG9mIHRoZSBsaXN0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X3JvdGF0ZV9sZWZ0KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZmlyc3Q7CisKKwlpZiAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKKwkJZmlyc3QgPSBoZWFkLT5uZXh0OworCQlsaXN0X21vdmVfdGFpbChmaXJzdCwgaGVhZCk7CisJfQorfQorCisvKioKICAqIGxpc3RfaXNfc2luZ3VsYXIgLSB0ZXN0cyB3aGV0aGVyIGEgbGlzdCBoYXMganVzdCBvbmUgZW50cnkuCiAgKiBAaGVhZDogdGhlIGxpc3QgdG8gdGVzdC4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sbWIuaCBiL2luY2x1ZGUvbGludXgvbG1iLmgKaW5kZXggZWY4MmI4Zi4uZjNkMTQzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sbWIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xtYi5oCkBAIC00Miw2ICs0Miw3IEBACiBleHRlcm4gdm9pZCBfX2luaXQgbG1iX2FuYWx5emUodm9pZCk7CiBleHRlcm4gbG9uZyBsbWJfYWRkKHU2NCBiYXNlLCB1NjQgc2l6ZSk7CiBleHRlcm4gbG9uZyBsbWJfcmVtb3ZlKHU2NCBiYXNlLCB1NjQgc2l6ZSk7CitleHRlcm4gbG9uZyBfX2luaXQgbG1iX2ZyZWUodTY0IGJhc2UsIHU2NCBzaXplKTsKIGV4dGVybiBsb25nIF9faW5pdCBsbWJfcmVzZXJ2ZSh1NjQgYmFzZSwgdTY0IHNpemUpOwogZXh0ZXJuIHU2NCBfX2luaXQgbG1iX2FsbG9jX25pZCh1NjQgc2l6ZSwgdTY0IGFsaWduLCBpbnQgbmlkLAogCQkJCXU2NCAoKm5pZF9yYW5nZSkodTY0LCB1NjQsIGludCAqKSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCmluZGV4IDljY2YwZTIuLjEwMjA2YTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCkBAIC01MzQsNCArNTM0LDggQEAKICMgZGVmaW5lIG1pZ2h0X2xvY2tfcmVhZChsb2NrKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QUk9WRV9SQ1UKK2V4dGVybiB2b2lkIGxvY2tkZXBfcmN1X2RlcmVmZXJlbmNlKGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGludCBsaW5lKTsKKyNlbmRpZgorCiAjZW5kaWYgLyogX19MSU5VWF9MT0NLREVQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA2MGM0NjdiLi44YjJmYTg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0yNjUsNiArMjY1LDggQEAKIAlyZXR1cm4gYXRvbWljX2luY19ub3RfemVybygmcGFnZS0+X2NvdW50KTsKIH0KIAorZXh0ZXJuIGludCBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBmbik7CisKIC8qIFN1cHBvcnQgZm9yIHZpcnR1YWxseSBtYXBwZWQgcGFnZXMgKi8KIHN0cnVjdCBwYWdlICp2bWFsbG9jX3RvX3BhZ2UoY29uc3Qgdm9pZCAqYWRkcik7CiB1bnNpZ25lZCBsb25nIHZtYWxsb2NfdG9fcGZuKGNvbnN0IHZvaWQgKmFkZHIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvc2hfZmxjdGwuaCBiL2luY2x1ZGUvbGludXgvbXRkL3NoX2ZsY3RsLmgKaW5kZXggZTc3YzFjZS4uYWI3NzYwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvc2hfZmxjdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9zaF9mbGN0bC5oCkBAIC01MSw2ICs1MSw4IEBACiAjZGVmaW5lIF80RUNDQ05URU4JKDB4MSA8PCAyNCkKICNkZWZpbmUgXzRFQ0NFTgkJKDB4MSA8PCAyMykKICNkZWZpbmUgXzRFQ0NDT1JSRUNUCSgweDEgPDwgMjIpCisjZGVmaW5lIFNIQlVTU0VMCSgweDEgPDwgMjApCisjZGVmaW5lIFNFTF8xNkJJVAkoMHgxIDw8IDE5KQogI2RlZmluZSBTTkFORF9FCQkoMHgxIDw8IDE4KQkvKiBTTkFORCAoMD01MTIgMT0yMDQ4KSovCiAjZGVmaW5lIFFUU0VMX0UJCSgweDEgPDwgMTcpCiAjZGVmaW5lIEVORElBTgkJKDB4MSA8PCAxNikJLyogMSA9IGxpdHRsZSBlbmRpYW4gKi8KQEAgLTk2LDYgKzk4LDcgQEAKIHN0cnVjdCBzaF9mbGN0bCB7CiAJc3RydWN0IG10ZF9pbmZvCQltdGQ7CiAJc3RydWN0IG5hbmRfY2hpcAljaGlwOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7CiAJdm9pZCBfX2lvbWVtCQkqcmVnOwogCiAJdWludDhfdAlkb25lX2J1ZmZbMjA0OCArIDY0XTsJLyogbWF4IHNpemUgMjA0OCArIDY0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mLmggYi9pbmNsdWRlL2xpbnV4L29mLmgKaW5kZXggZTdmYWNkOC4uZjZkOWNiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vZi5oCisrKyBiL2luY2x1ZGUvbGludXgvb2YuaApAQCAtMTksNiArMTksMTEgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2lmZGVmIENPTkZJR19PRgogCiB0eXBlZGVmIHUzMiBwaGFuZGxlOwogdHlwZWRlZiB1MzIgaWhhbmRsZTsKQEAgLTM5LDEwICs0NCw3IEBACiBzdHJ1Y3QgZGV2aWNlX25vZGUgewogCWNvbnN0IGNoYXIgKm5hbWU7CiAJY29uc3QgY2hhciAqdHlwZTsKLQlwaGFuZGxlCW5vZGU7Ci0jaWYgIWRlZmluZWQoQ09ORklHX1NQQVJDKQotCXBoYW5kbGUgbGludXhfcGhhbmRsZTsKLSNlbmRpZgorCXBoYW5kbGUgcGhhbmRsZTsKIAljaGFyCSpmdWxsX25hbWU7CiAKIAlzdHJ1Y3QJcHJvcGVydHkgKnByb3BlcnRpZXM7CkBAIC02Myw2ICs2NSwxMSBAQAogI2VuZGlmCiB9OwogCisvKiBQb2ludGVyIGZvciBmaXJzdCBlbnRyeSBpbiBjaGFpbiBvZiBhbGwgbm9kZXMuICovCitleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICphbGxub2RlczsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2Nob3NlbjsKK2V4dGVybiByd2xvY2tfdCBkZXZ0cmVlX2xvY2s7CisKIHN0YXRpYyBpbmxpbmUgaW50IG9mX25vZGVfY2hlY2tfZmxhZyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm4sIHVuc2lnbmVkIGxvbmcgZmxhZykKIHsKIAlyZXR1cm4gdGVzdF9iaXQoZmxhZywgJm4tPl9mbGFncyk7CkBAIC03MywxMiArODAsNiBAQAogCXNldF9iaXQoZmxhZywgJm4tPl9mbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotc2V0X25vZGVfcHJvY19lbnRyeShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlKQotewotCWRuLT5wZGUgPSBkZTsKLX0KLQogZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9hbGxfbm9kZXMoc3RydWN0IGRldmljZV9ub2RlICpwcmV2KTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NQQVJDKQpAQCAtMTAxLDI2ICsxMDIsMzYgQEAKICAqLwogCiAvKiBIZWxwZXIgdG8gcmVhZCBhIGJpZyBudW1iZXI7IHNpemUgaXMgaW4gY2VsbHMgKG5vdCBieXRlcykgKi8KLXN0YXRpYyBpbmxpbmUgdTY0IG9mX3JlYWRfbnVtYmVyKGNvbnN0IHUzMiAqY2VsbCwgaW50IHNpemUpCitzdGF0aWMgaW5saW5lIHU2NCBvZl9yZWFkX251bWJlcihjb25zdCBfX2JlMzIgKmNlbGwsIGludCBzaXplKQogewogCXU2NCByID0gMDsKIAl3aGlsZSAoc2l6ZS0tKQotCQlyID0gKHIgPDwgMzIpIHwgKihjZWxsKyspOworCQlyID0gKHIgPDwgMzIpIHwgYmUzMl90b19jcHUoKihjZWxsKyspKTsKIAlyZXR1cm4gcjsKIH0KIAogLyogTGlrZSBvZl9yZWFkX251bWJlciwgYnV0IHdlIHdhbnQgYW4gdW5zaWduZWQgbG9uZyByZXN1bHQgKi8KLSNpZmRlZiBDT05GSUdfUFBDMzIKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvZl9yZWFkX3Vsb25nKGNvbnN0IHUzMiAqY2VsbCwgaW50IHNpemUpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgb2ZfcmVhZF91bG9uZyhjb25zdCBfX2JlMzIgKmNlbGwsIGludCBzaXplKQogewotCXJldHVybiBjZWxsW3NpemUtMV07CisJLyogdG9zcyBhd2F5IHVwcGVyIGJpdHMgaWYgdW5zaWduZWQgbG9uZyBpcyBzbWFsbGVyIHRoYW4gdTY0ICovCisJcmV0dXJuIG9mX3JlYWRfbnVtYmVyKGNlbGwsIHNpemUpOwogfQotI2Vsc2UKLSNkZWZpbmUgb2ZfcmVhZF91bG9uZyhjZWxsLCBzaXplKQlvZl9yZWFkX251bWJlcihjZWxsLCBzaXplKQotI2VuZGlmCiAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogCisvKiBEZWZhdWx0ICNhZGRyZXNzIGFuZCAjc2l6ZSBjZWxscy4gIEFsbG93IGFyY2ggYXNtL3Byb20uaCB0byBvdmVycmlkZSAqLworI2lmICFkZWZpbmVkKE9GX1JPT1RfTk9ERV9BRERSX0NFTExTX0RFRkFVTFQpCisjZGVmaW5lIE9GX1JPT1RfTk9ERV9BRERSX0NFTExTX0RFRkFVTFQgMQorI2RlZmluZSBPRl9ST09UX05PREVfU0laRV9DRUxMU19ERUZBVUxUIDEKKyNlbmRpZgorCisvKiBEZWZhdWx0IHN0cmluZyBjb21wYXJlIGZ1bmN0aW9ucywgQWxsb3cgYXJjaCBhc20vcHJvbS5oIHRvIG92ZXJyaWRlICovCisjaWYgIWRlZmluZWQob2ZfY29tcGF0X2NtcCkKKyNkZWZpbmUgb2ZfY29tcGF0X2NtcChzMSwgczIsIGwpCXN0cm5jYXNlY21wKChzMSksIChzMiksIChsKSkKKyNkZWZpbmUgb2ZfcHJvcF9jbXAoczEsIHMyKQkJc3RyY21wKChzMSksIChzMikpCisjZGVmaW5lIG9mX25vZGVfY21wKHMxLCBzMikJCXN0cmNhc2VjbXAoKHMxKSwgKHMyKSkKKyNlbmRpZgorCiAvKiBmbGFnIGRlc2NyaXB0aW9ucyAqLwogI2RlZmluZSBPRl9EWU5BTUlDCTEgLyogbm9kZSBhbmQgcHJvcGVydGllcyB3ZXJlIGFsbG9jYXRlZCB2aWEga21hbGxvYyAqLwogI2RlZmluZSBPRl9ERVRBQ0hFRAkyIC8qIG5vZGUgaGFzIGJlZW4gZGV0YWNoZWQgZnJvbSB0aGUgZGV2aWNlIHRyZWUgKi8KQEAgLTE4Nyw0ICsxOTgsMTkgQEAKIAljb25zdCBjaGFyICpsaXN0X25hbWUsIGNvbnN0IGNoYXIgKmNlbGxzX25hbWUsIGludCBpbmRleCwKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKipvdXRfbm9kZSwgY29uc3Qgdm9pZCAqKm91dF9hcmdzKTsKIAorZXh0ZXJuIGludCBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoY29uc3QgY2hhciAqY29tcGF0KTsKKworZXh0ZXJuIGludCBwcm9tX2FkZF9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUqIG5wLCBzdHJ1Y3QgcHJvcGVydHkqIHByb3ApOworZXh0ZXJuIGludCBwcm9tX3JlbW92ZV9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgcHJvcGVydHkgKnByb3ApOworZXh0ZXJuIGludCBwcm9tX3VwZGF0ZV9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCXN0cnVjdCBwcm9wZXJ0eSAqbmV3cHJvcCwKKwkJCQlzdHJ1Y3QgcHJvcGVydHkgKm9sZHByb3ApOworCisjaWYgZGVmaW5lZChDT05GSUdfT0ZfRFlOQU1JQykKKy8qIEZvciB1cGRhdGluZyB0aGUgZGV2aWNlIHRyZWUgYXQgcnVudGltZSAqLworZXh0ZXJuIHZvaWQgb2ZfYXR0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICopOworZXh0ZXJuIHZvaWQgb2ZfZGV0YWNoX25vZGUoc3RydWN0IGRldmljZV9ub2RlICopOworI2VuZGlmCisKKyNlbmRpZiAvKiBDT05GSUdfT0YgKi8KICNlbmRpZiAvKiBfTElOVVhfT0ZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZl9mZHQuaCBiL2luY2x1ZGUvbGludXgvb2ZfZmR0LmgKaW5kZXggNDFkNDMyYi4uYTFjYTkyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vZl9mZHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L29mX2ZkdC5oCkBAIC00Miw0NSArNDIsNjIgQEAKICAqIGVuZHMgd2hlbiBzaXplIGlzIDAKICAqLwogc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyIHsKLQl1MzIJbWFnaWM7CQkJLyogbWFnaWMgd29yZCBPRl9EVF9IRUFERVIgKi8KLQl1MzIJdG90YWxzaXplOwkJLyogdG90YWwgc2l6ZSBvZiBEVCBibG9jayAqLwotCXUzMglvZmZfZHRfc3RydWN0OwkJLyogb2Zmc2V0IHRvIHN0cnVjdHVyZSAqLwotCXUzMglvZmZfZHRfc3RyaW5nczsJCS8qIG9mZnNldCB0byBzdHJpbmdzICovCi0JdTMyCW9mZl9tZW1fcnN2bWFwOwkJLyogb2Zmc2V0IHRvIG1lbW9yeSByZXNlcnZlIG1hcCAqLwotCXUzMgl2ZXJzaW9uOwkJLyogZm9ybWF0IHZlcnNpb24gKi8KLQl1MzIJbGFzdF9jb21wX3ZlcnNpb247CS8qIGxhc3QgY29tcGF0aWJsZSB2ZXJzaW9uICovCisJX19iZTMyCW1hZ2ljOwkJCS8qIG1hZ2ljIHdvcmQgT0ZfRFRfSEVBREVSICovCisJX19iZTMyCXRvdGFsc2l6ZTsJCS8qIHRvdGFsIHNpemUgb2YgRFQgYmxvY2sgKi8KKwlfX2JlMzIJb2ZmX2R0X3N0cnVjdDsJCS8qIG9mZnNldCB0byBzdHJ1Y3R1cmUgKi8KKwlfX2JlMzIJb2ZmX2R0X3N0cmluZ3M7CQkvKiBvZmZzZXQgdG8gc3RyaW5ncyAqLworCV9fYmUzMglvZmZfbWVtX3Jzdm1hcDsJCS8qIG9mZnNldCB0byBtZW1vcnkgcmVzZXJ2ZSBtYXAgKi8KKwlfX2JlMzIJdmVyc2lvbjsJCS8qIGZvcm1hdCB2ZXJzaW9uICovCisJX19iZTMyCWxhc3RfY29tcF92ZXJzaW9uOwkvKiBsYXN0IGNvbXBhdGlibGUgdmVyc2lvbiAqLwogCS8qIHZlcnNpb24gMiBmaWVsZHMgYmVsb3cgKi8KLQl1MzIJYm9vdF9jcHVpZF9waHlzOwkvKiBQaHlzaWNhbCBDUFUgaWQgd2UncmUgYm9vdGluZyBvbiAqLworCV9fYmUzMglib290X2NwdWlkX3BoeXM7CS8qIFBoeXNpY2FsIENQVSBpZCB3ZSdyZSBib290aW5nIG9uICovCiAJLyogdmVyc2lvbiAzIGZpZWxkcyBiZWxvdyAqLwotCXUzMglkdF9zdHJpbmdzX3NpemU7CS8qIHNpemUgb2YgdGhlIERUIHN0cmluZ3MgYmxvY2sgKi8KKwlfX2JlMzIJZHRfc3RyaW5nc19zaXplOwkvKiBzaXplIG9mIHRoZSBEVCBzdHJpbmdzIGJsb2NrICovCiAJLyogdmVyc2lvbiAxNyBmaWVsZHMgYmVsb3cgKi8KLQl1MzIJZHRfc3RydWN0X3NpemU7CQkvKiBzaXplIG9mIHRoZSBEVCBzdHJ1Y3R1cmUgYmxvY2sgKi8KKwlfX2JlMzIJZHRfc3RydWN0X3NpemU7CQkvKiBzaXplIG9mIHRoZSBEVCBzdHJ1Y3R1cmUgYmxvY2sgKi8KIH07CiAKKy8qIFRCRDogVGVtcG9yYXJ5IGV4cG9ydCBvZiBmZHQgZ2xvYmFscyAtIHJlbW92ZSB3aGVuIGNvZGUgZnVsbHkgbWVyZ2VkICovCitleHRlcm4gaW50IF9faW5pdGRhdGEgZHRfcm9vdF9hZGRyX2NlbGxzOworZXh0ZXJuIGludCBfX2luaXRkYXRhIGR0X3Jvb3Rfc2l6ZV9jZWxsczsKK2V4dGVybiBzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgKmluaXRpYWxfYm9vdF9wYXJhbXM7CisKIC8qIEZvciBzY2FubmluZyB0aGUgZmxhdCBkZXZpY2UtdHJlZSBhdCBib290IHRpbWUgKi8KLWV4dGVybiBpbnQgX19pbml0IG9mX3NjYW5fZmxhdF9kdChpbnQgKCppdCkodW5zaWduZWQgbG9uZyBub2RlLAotCQkJCQkgICAgY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwKLQkJCQkJICAgIHZvaWQgKmRhdGEpLAotCQkJCSAgdm9pZCAqZGF0YSk7Ci1leHRlcm4gdm9pZCBfX2luaXQgKm9mX2dldF9mbGF0X2R0X3Byb3AodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCQl1bnNpZ25lZCBsb25nICpzaXplKTsKLWV4dGVybiBpbnQgX19pbml0IG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZSh1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0IG9mX2dldF9mbGF0X2R0X3Jvb3Qodm9pZCk7CitleHRlcm4gY2hhciAqZmluZF9mbGF0X2R0X3N0cmluZyh1MzIgb2Zmc2V0KTsKK2V4dGVybiBpbnQgb2Zfc2Nhbl9mbGF0X2R0KGludCAoKml0KSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLAorCQkJCSAgICAgaW50IGRlcHRoLCB2b2lkICpkYXRhKSwKKwkJCSAgIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgKm9mX2dldF9mbGF0X2R0X3Byb3AodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSB1bnNpZ25lZCBsb25nICpzaXplKTsKK2V4dGVybiBpbnQgb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBvZl9nZXRfZmxhdF9kdF9yb290KHZvaWQpOworZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9kdF9zY2FuX2Nob3Nlbl9hcmNoKHVuc2lnbmVkIGxvbmcgbm9kZSk7CitleHRlcm4gaW50IGVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW4odW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSwKKwkJCQkgICAgIGludCBkZXB0aCwgdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZCBlYXJseV9pbml0X2R0X2NoZWNrX2Zvcl9pbml0cmQodW5zaWduZWQgbG9uZyBub2RlKTsKK2V4dGVybiBpbnQgZWFybHlfaW5pdF9kdF9zY2FuX21lbW9yeSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLAorCQkJCSAgICAgaW50IGRlcHRoLCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIGVhcmx5X2luaXRfZHRfYWRkX21lbW9yeV9hcmNoKHU2NCBiYXNlLCB1NjQgc2l6ZSk7CitleHRlcm4gdTY0IGVhcmx5X2luaXRfZHRfYWxsb2NfbWVtb3J5X2FyY2godTY0IHNpemUsIHU2NCBhbGlnbik7CitleHRlcm4gdTY0IGR0X21lbV9uZXh0X2NlbGwoaW50IHMsIF9fYmUzMiAqKmNlbGxwKTsKKworLyoKKyAqIElmIEJMS19ERVZfSU5JVFJELCB0aGUgZmR0IGVhcmx5IGluaXQgY29kZSB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiwKKyAqIHRvIGJlIHByb3ZpZGVkIGJ5IHRoZSBhcmNoIGNvZGUuIHN0YXJ0IGFuZCBlbmQgYXJlIHNwZWNpZmllZCBhcworICogcGh5c2ljYWwgYWRkcmVzc2VzLgorICovCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECitleHRlcm4gdm9pZCBlYXJseV9pbml0X2R0X3NldHVwX2luaXRyZF9hcmNoKHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGVuZCk7CisjZW5kaWYKKworLyogRWFybHkgZmxhdCB0cmVlIHNjYW4gaG9va3MgKi8KK2V4dGVybiBpbnQgZWFybHlfaW5pdF9kdF9zY2FuX3Jvb3QodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSwKKwkJCQkgICBpbnQgZGVwdGgsIHZvaWQgKmRhdGEpOwogCiAvKiBPdGhlciBQcm90b3R5cGVzICovCi1leHRlcm4gdm9pZCBmaW5pc2hfZGV2aWNlX3RyZWUodm9pZCk7CiBleHRlcm4gdm9pZCB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUodm9pZCk7CiBleHRlcm4gdm9pZCBlYXJseV9pbml0X2RldnRyZWUodm9pZCAqKTsKLWV4dGVybiBpbnQgbWFjaGluZV9pc19jb21wYXRpYmxlKGNvbnN0IGNoYXIgKmNvbXBhdCk7Ci1leHRlcm4gdm9pZCBwcmludF9wcm9wZXJ0aWVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSk7Ci1leHRlcm4gaW50IHByb21fbl9pbnRyX2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSogbnApOwotZXh0ZXJuIHZvaWQgcHJvbV9nZXRfaXJxX3NlbnNlcyh1bnNpZ25lZCBjaGFyICpzZW5zZXMsIGludCBvZmYsIGludCBtYXgpOwotZXh0ZXJuIGludCBwcm9tX2FkZF9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUqIG5wLCBzdHJ1Y3QgcHJvcGVydHkqIHByb3ApOwotZXh0ZXJuIGludCBwcm9tX3JlbW92ZV9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgcHJvcGVydHkgKnByb3ApOwotZXh0ZXJuIGludCBwcm9tX3VwZGF0ZV9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJCXN0cnVjdCBwcm9wZXJ0eSAqbmV3cHJvcCwKLQkJCQlzdHJ1Y3QgcHJvcGVydHkgKm9sZHByb3ApOwogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX0xJTlVYX09GX0ZEVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZGF0YS5oIGIvaW5jbHVkZS9saW51eC9wYWRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTYxMWRhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wYWRhdGEuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogcGFkYXRhLmggLSBoZWFkZXIgZm9yIHRoZSBwYWRhdGEgcGFyYWxsZWxpemF0aW9uIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBzZWN1bmV0IFNlY3VyaXR5IE5ldHdvcmtzIEFHCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgU3RlZmZlbiBLbGFzc2VydCA8c3RlZmZlbi5rbGFzc2VydEBzZWN1bmV0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICovCisKKyNpZm5kZWYgUEFEQVRBX0gKKyNkZWZpbmUgUEFEQVRBX0gKKworI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCitzdHJ1Y3QgcGFkYXRhX3ByaXYgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YQkqcGQ7CisJaW50CQkJY2JfY3B1OworCWludAkJCXNlcV9ucjsKKwlpbnQJCQlpbmZvOworCXZvaWQgICAgICAgICAgICAgICAgICAgICgqcGFyYWxsZWwpKHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhKTsKKwl2b2lkICAgICAgICAgICAgICAgICAgICAoKnNlcmlhbCkoc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEpOworfTsKKworc3RydWN0IHBhZGF0YV9saXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBsaXN0OworCXNwaW5sb2NrX3QgICAgICAgICAgICAgIGxvY2s7Cit9OworCitzdHJ1Y3QgcGFkYXRhX3F1ZXVlIHsKKwlzdHJ1Y3QgcGFkYXRhX2xpc3QJcGFyYWxsZWw7CisJc3RydWN0IHBhZGF0YV9saXN0CXJlb3JkZXI7CisJc3RydWN0IHBhZGF0YV9saXN0CXNlcmlhbDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcHdvcms7CisJc3RydWN0IHdvcmtfc3RydWN0CXN3b3JrOworCXN0cnVjdCBwYXJhbGxlbF9kYXRhICAgICpwZDsKKwlhdG9taWNfdAkJbnVtX29iajsKKwlpbnQJCQljcHVfaW5kZXg7Cit9OworCitzdHJ1Y3QgcGFyYWxsZWxfZGF0YSB7CisJc3RydWN0IHBhZGF0YV9pbnN0YW5jZQkqcGluc3Q7CisJc3RydWN0IHBhZGF0YV9xdWV1ZQkqcXVldWU7CisJYXRvbWljX3QJCXNlcV9ucjsKKwlhdG9taWNfdAkJcmVvcmRlcl9vYmplY3RzOworCWF0b21pY190ICAgICAgICAgICAgICAgIHJlZmNudDsKKwl1bnNpZ25lZCBpbnQJCW1heF9zZXFfbnI7CisJY3B1bWFza192YXJfdAkJY3B1bWFzazsKKwlzcGlubG9ja190ICAgICAgICAgICAgICBsb2NrOworfTsKKworc3RydWN0IHBhZGF0YV9pbnN0YW5jZSB7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICAgY3B1X25vdGlmaWVyOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YQkqcGQ7CisJY3B1bWFza192YXJfdCAgICAgICAgICAgY3B1bWFzazsKKwlzdHJ1Y3QgbXV0ZXgJCWxvY2s7CisJdTgJCQlmbGFnczsKKyNkZWZpbmUJUEFEQVRBX0lOSVQJCTEKKyNkZWZpbmUJUEFEQVRBX1JFU0VUCQkyCit9OworCitleHRlcm4gc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGFkYXRhX2FsbG9jKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAorCQkJCQkgICAgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKTsKK2V4dGVybiB2b2lkIHBhZGF0YV9mcmVlKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KTsKK2V4dGVybiBpbnQgcGFkYXRhX2RvX3BhcmFsbGVsKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LAorCQkJICAgICAgc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGEsIGludCBjYl9jcHUpOworZXh0ZXJuIHZvaWQgcGFkYXRhX2RvX3NlcmlhbChzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSk7CitleHRlcm4gaW50IHBhZGF0YV9zZXRfY3B1bWFzayhzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKKwkJCSAgICAgIGNwdW1hc2tfdmFyX3QgY3B1bWFzayk7CitleHRlcm4gaW50IHBhZGF0YV9hZGRfY3B1KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LCBpbnQgY3B1KTsKK2V4dGVybiBpbnQgcGFkYXRhX3JlbW92ZV9jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUpOworZXh0ZXJuIHZvaWQgcGFkYXRhX3N0YXJ0KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KTsKK2V4dGVybiB2b2lkIHBhZGF0YV9zdG9wKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oIGIvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCmluZGV4IDkzYTdjMDhmLi5jOGI2NDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCkBAIC0xMSw2ICsxMSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KIAogI2lmZGVmIENPTkZJR19BQ1BJCitleHRlcm4gYWNwaV9zdGF0dXMgcGNpX2FjcGlfYWRkX2J1c19wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwKKwkJCQkJCSBzdHJ1Y3QgcGNpX2J1cyAqcGNpX2J1cyk7CitleHRlcm4gYWNwaV9zdGF0dXMgcGNpX2FjcGlfcmVtb3ZlX2J1c19wbV9ub3RpZmllcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldik7CitleHRlcm4gYWNwaV9zdGF0dXMgcGNpX2FjcGlfYWRkX3BtX25vdGlmaWVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KTsKK2V4dGVybiBhY3BpX3N0YXR1cyBwY2lfYWNwaV9yZW1vdmVfcG1fbm90aWZpZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYpOworCiBzdGF0aWMgaW5saW5lIGFjcGlfaGFuZGxlIGFjcGlfZmluZF9yb290X2JyaWRnZV9oYW5kbGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IHBjaV9idXMgKnBidXMgPSBwZGV2LT5idXM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCBjMTk2OGY0Li4yNTgxMzczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTE4Nyw2ICsxODcsMzMgQEAKIAlQQ0lfQlVTX0ZMQUdTX05PX01NUkJDID0gKF9fZm9yY2UgcGNpX2J1c19mbGFnc190KSAyLAogfTsKIAorLyogQmFzZWQgb24gdGhlIFBDSSBIb3RwbHVnIFNwZWMsIGJ1dCBzb21lIHZhbHVlcyBhcmUgbWFkZSB1cCBieSB1cyAqLworZW51bSBwY2lfYnVzX3NwZWVkIHsKKwlQQ0lfU1BFRURfMzNNSHoJCQk9IDB4MDAsCisJUENJX1NQRUVEXzY2TUh6CQkJPSAweDAxLAorCVBDSV9TUEVFRF82Nk1Iel9QQ0lYCQk9IDB4MDIsCisJUENJX1NQRUVEXzEwME1Iel9QQ0lYCQk9IDB4MDMsCisJUENJX1NQRUVEXzEzM01Iel9QQ0lYCQk9IDB4MDQsCisJUENJX1NQRUVEXzY2TUh6X1BDSVhfRUNDCT0gMHgwNSwKKwlQQ0lfU1BFRURfMTAwTUh6X1BDSVhfRUNDCT0gMHgwNiwKKwlQQ0lfU1BFRURfMTMzTUh6X1BDSVhfRUNDCT0gMHgwNywKKwlQQ0lfU1BFRURfNjZNSHpfUENJWF8yNjYJPSAweDA5LAorCVBDSV9TUEVFRF8xMDBNSHpfUENJWF8yNjYJPSAweDBhLAorCVBDSV9TUEVFRF8xMzNNSHpfUENJWF8yNjYJPSAweDBiLAorCUFHUF9VTktOT1dOCQkJPSAweDBjLAorCUFHUF8xWAkJCQk9IDB4MGQsCisJQUdQXzJYCQkJCT0gMHgwZSwKKwlBR1BfNFgJCQkJPSAweDBmLAorCUFHUF84WAkJCQk9IDB4MTAsCisJUENJX1NQRUVEXzY2TUh6X1BDSVhfNTMzCT0gMHgxMSwKKwlQQ0lfU1BFRURfMTAwTUh6X1BDSVhfNTMzCT0gMHgxMiwKKwlQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzCT0gMHgxMywKKwlQQ0lFX1NQRUVEXzJfNUdUCQk9IDB4MTQsCisJUENJRV9TUEVFRF81XzBHVAkJPSAweDE1LAorCVBDSUVfU1BFRURfOF8wR1QJCT0gMHgxNiwKKwlQQ0lfU1BFRURfVU5LTk9XTgkJPSAweGZmLAorfTsKKwogc3RydWN0IHBjaV9jYXBfc2F2ZWRfc3RhdGUgewogCXN0cnVjdCBobGlzdF9ub2RlIG5leHQ7CiAJY2hhciBjYXBfbnI7CkBAIC0yMzksNiArMjY2LDcgQEAKIAkJCQkJICAgY29uZmlndXJhdGlvbiBzcGFjZSAqLwogCXVuc2lnbmVkIGludAlwbWVfc3VwcG9ydDo1OwkvKiBCaXRtYXNrIG9mIHN0YXRlcyBmcm9tIHdoaWNoIFBNRSMKIAkJCQkJICAgY2FuIGJlIGdlbmVyYXRlZCAqLworCXVuc2lnbmVkIGludAlwbWVfaW50ZXJydXB0OjE7CiAJdW5zaWduZWQgaW50CWQxX3N1cHBvcnQ6MTsJLyogTG93IHBvd2VyIHN0YXRlIEQxIGlzIHN1cHBvcnRlZCAqLwogCXVuc2lnbmVkIGludAlkMl9zdXBwb3J0OjE7CS8qIExvdyBwb3dlciBzdGF0ZSBEMiBpcyBzdXBwb3J0ZWQgKi8KIAl1bnNpZ25lZCBpbnQJbm9fZDFkMjoxOwkvKiBPbmx5IGFsbG93IEQwIGFuZCBEMyAqLwpAQCAtMjc1LDcgKzMwMyw4IEBACiAJdW5zaWduZWQgaW50CW1zaXhfZW5hYmxlZDoxOwogCXVuc2lnbmVkIGludAlhcmlfZW5hYmxlZDoxOwkvKiBBUkkgZm9yd2FyZGluZyAqLwogCXVuc2lnbmVkIGludAlpc19tYW5hZ2VkOjE7Ci0JdW5zaWduZWQgaW50CWlzX3BjaWU6MTsKKwl1bnNpZ25lZCBpbnQJaXNfcGNpZToxOwkvKiBPYnNvbGV0ZS4gV2lsbCBiZSByZW1vdmVkLgorCQkJCQkgICBVc2UgcGNpX2lzX3BjaWUoKSBpbnN0ZWFkICovCiAJdW5zaWduZWQgaW50ICAgIG5lZWRzX2ZyZXNldDoxOyAvKiBEZXYgcmVxdWlyZXMgZnVuZGFtZW50YWwgcmVzZXQgKi8KIAl1bnNpZ25lZCBpbnQJc3RhdGVfc2F2ZWQ6MTsKIAl1bnNpZ25lZCBpbnQJaXNfcGh5c2ZuOjE7CkBAIC0zMzUsOSArMzY0LDI2IEBACiAJaGxpc3RfYWRkX2hlYWQoJm5ld19jYXAtPm5leHQsICZwY2lfZGV2LT5zYXZlZF9jYXBfc3BhY2UpOwogfQogCi0jaWZuZGVmIFBDSV9CVVNfTlVNX1JFU09VUkNFUwotI2RlZmluZSBQQ0lfQlVTX05VTV9SRVNPVVJDRVMJMTYKLSNlbmRpZgorLyoKKyAqIFRoZSBmaXJzdCBQQ0lfQlJJREdFX1JFU09VUkNFX05VTSBQQ0kgYnVzIHJlc291cmNlcyAodGhvc2UgdGhhdCBjb3JyZXNwb25kCisgKiB0byBQMlAgb3IgQ2FyZEJ1cyBicmlkZ2Ugd2luZG93cykgZ28gaW4gYSB0YWJsZS4gIEFkZGl0aW9uYWwgb25lcyAoZm9yCisgKiBidXNlcyBiZWxvdyBob3N0IGJyaWRnZXMgb3Igc3VidHJhY3RpdmUgZGVjb2RlIGJyaWRnZXMpIGdvIGluIHRoZSBsaXN0LgorICogVXNlIHBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoKSB0byBpdGVyYXRlIHRocm91Z2ggYWxsIHRoZSByZXNvdXJjZXMuCisgKi8KKworLyoKKyAqIFBDSV9TVUJUUkFDVElWRV9ERUNPREUgbWVhbnMgdGhlIGJyaWRnZSBmb3J3YXJkcyB0aGUgd2luZG93IGltcGxpY2l0bHkKKyAqIGFuZCB0aGVyZSdzIG5vIHdheSB0byBwcm9ncmFtIHRoZSBicmlkZ2Ugd2l0aCB0aGUgZGV0YWlscyBvZiB0aGUgd2luZG93LgorICogVGhpcyBkb2VzIG5vdCBhcHBseSB0byBBQ1BJIF9DUlMgd2luZG93cywgZXZlbiB3aXRoIHRoZSBfREVDIHN1YnRyYWN0aXZlLQorICogZGVjb2RlIGJpdCBzZXQsIGJlY2F1c2UgdGhleSBhcmUgZXhwbGljaXQgYW5kIGNhbiBiZSBwcm9ncmFtbWVkIHdpdGggX1NSUy4KKyAqLworI2RlZmluZSBQQ0lfU1VCVFJBQ1RJVkVfREVDT0RFCTB4MQorCitzdHJ1Y3QgcGNpX2J1c19yZXNvdXJjZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXVuc2lnbmVkIGludCBmbGFnczsKK307CiAKICNkZWZpbmUgUENJX1JFR0lPTl9GTEFHX01BU0sJMHgwZlUJLyogVGhlc2UgYml0cyBvZiByZXNvdXJjZSBmbGFncyB0ZWxsIHVzIHRoZSBQQ0kgcmVnaW9uIGZsYWdzICovCiAKQEAgLTM0OCw4ICszOTQsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlczsJLyogbGlzdCBvZiBkZXZpY2VzIG9uIHRoaXMgYnVzICovCiAJc3RydWN0IHBjaV9kZXYJKnNlbGY7CQkvKiBicmlkZ2UgZGV2aWNlIGFzIHNlZW4gYnkgcGFyZW50ICovCiAJc3RydWN0IGxpc3RfaGVhZCBzbG90czsJCS8qIGxpc3Qgb2Ygc2xvdHMgb24gdGhpcyBidXMgKi8KLQlzdHJ1Y3QgcmVzb3VyY2UJKnJlc291cmNlW1BDSV9CVVNfTlVNX1JFU09VUkNFU107Ci0JCQkJCS8qIGFkZHJlc3Mgc3BhY2Ugcm91dGVkIHRvIHRoaXMgYnVzICovCisJc3RydWN0IHJlc291cmNlICpyZXNvdXJjZVtQQ0lfQlJJREdFX1JFU09VUkNFX05VTV07CisJc3RydWN0IGxpc3RfaGVhZCByZXNvdXJjZXM7CS8qIGFkZHJlc3Mgc3BhY2Ugcm91dGVkIHRvIHRoaXMgYnVzICovCiAKIAlzdHJ1Y3QgcGNpX29wcwkqb3BzOwkJLyogY29uZmlndXJhdGlvbiBhY2Nlc3MgZnVuY3Rpb25zICovCiAJdm9pZAkJKnN5c2RhdGE7CS8qIGhvb2sgZm9yIHN5cy1zcGVjaWZpYyBleHRlbnNpb24gKi8KQEAgLTM1OSw2ICs0MDUsOCBAQAogCXVuc2lnbmVkIGNoYXIJcHJpbWFyeTsJLyogbnVtYmVyIG9mIHByaW1hcnkgYnJpZGdlICovCiAJdW5zaWduZWQgY2hhcglzZWNvbmRhcnk7CS8qIG51bWJlciBvZiBzZWNvbmRhcnkgYnJpZGdlICovCiAJdW5zaWduZWQgY2hhcglzdWJvcmRpbmF0ZTsJLyogbWF4IG51bWJlciBvZiBzdWJvcmRpbmF0ZSBidXNlcyAqLworCXVuc2lnbmVkIGNoYXIJbWF4X2J1c19zcGVlZDsJLyogZW51bSBwY2lfYnVzX3NwZWVkICovCisJdW5zaWduZWQgY2hhcgljdXJfYnVzX3NwZWVkOwkvKiBlbnVtIHBjaV9idXNfc3BlZWQgKi8KIAogCWNoYXIJCW5hbWVbNDhdOwogCkBAIC01NjMsNyArNjExLDggQEAKIGNoYXIgKnBjaWJpb3Nfc2V0dXAoY2hhciAqc3RyKTsKIAogLyogVXNlZCBvbmx5IHdoZW4gZHJpdmVycy9wY2kvc2V0dXAuYyBpcyB1c2VkICovCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqLCBzdHJ1Y3QgcmVzb3VyY2UgKiwgcmVzb3VyY2Vfc2l6ZV90LAorcmVzb3VyY2Vfc2l6ZV90IHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKiwKKwkJCQlyZXNvdXJjZV9zaXplX3QsCiAJCQkJcmVzb3VyY2Vfc2l6ZV90KTsKIHZvaWQgcGNpYmlvc191cGRhdGVfaXJxKHN0cnVjdCBwY2lfZGV2ICosIGludCBpcnEpOwogCkBAIC01ODksNiArNjM4LDcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgcGNpX29wcyAqb3BzLCB2b2lkICpzeXNkYXRhKTsKIHN0cnVjdCBwY2lfYnVzICpwY2lfYWRkX25ld19idXMoc3RydWN0IHBjaV9idXMgKnBhcmVudCwgc3RydWN0IHBjaV9kZXYgKmRldiwKIAkJCQlpbnQgYnVzbnIpOwordm9pZCBwY2llX3VwZGF0ZV9saW5rX3NwZWVkKHN0cnVjdCBwY2lfYnVzICpidXMsIHUxNiBsaW5rX3N0YXR1cyk7CiBzdHJ1Y3QgcGNpX3Nsb3QgKnBjaV9jcmVhdGVfc2xvdChzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50LCBpbnQgc2xvdF9uciwKIAkJCQkgY29uc3QgY2hhciAqbmFtZSwKIAkJCQkgc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Zyk7CkBAIC02MTUsMTIgKzY2NSw2IEBACiAKIC8qIEdlbmVyaWMgUENJIGZ1bmN0aW9ucyBleHBvcnRlZCB0byBjYXJkIGRyaXZlcnMgKi8KIAotI2lmZGVmIENPTkZJR19QQ0lfTEVHQUNZCi1zdHJ1Y3QgcGNpX2RldiBfX2RlcHJlY2F0ZWQgKnBjaV9maW5kX2RldmljZSh1bnNpZ25lZCBpbnQgdmVuZG9yLAotCQkJCQkgICAgIHVuc2lnbmVkIGludCBkZXZpY2UsCi0JCQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKmZyb20pOwotI2VuZGlmIC8qIENPTkZJR19QQ0lfTEVHQUNZICovCi0KIGVudW0gcGNpX2xvc3RfaW50ZXJydXB0X3JlYXNvbiB7CiAJUENJX0xPU1RfSVJRX05PX0lORk9STUFUSU9OID0gMCwKIAlQQ0lfTE9TVF9JUlFfRElTQUJMRV9NU0ksCkBAIC03NTAsMTEgKzc5NCwxOSBAQAogcGNpX3Bvd2VyX3QgcGNpX2Nob29zZV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogYm9vbCBwY2lfcG1lX2NhcGFibGUoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUpOwogdm9pZCBwY2lfcG1lX2FjdGl2ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIGVuYWJsZSk7Ci1pbnQgcGNpX2VuYWJsZV93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlLCBib29sIGVuYWJsZSk7CitpbnQgX19wY2lfZW5hYmxlX3dha2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUsCisJCSAgICAgIGJvb2wgcnVudGltZSwgYm9vbCBlbmFibGUpOwogaW50IHBjaV93YWtlX2Zyb21fZDMoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBlbmFibGUpOwogcGNpX3Bvd2VyX3QgcGNpX3RhcmdldF9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfcHJlcGFyZV90b19zbGVlcChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfYmFja19mcm9tX3NsZWVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworYm9vbCBwY2lfZGV2X3J1bl93YWtlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworCitzdGF0aWMgaW5saW5lIGludCBwY2lfZW5hYmxlX3dha2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUsCisJCQkJICBib29sIGVuYWJsZSkKK3sKKwlyZXR1cm4gX19wY2lfZW5hYmxlX3dha2UoZGV2LCBzdGF0ZSwgZmFsc2UsIGVuYWJsZSk7Cit9CiAKIC8qIEZvciB1c2UgYnkgYXJjaCB3aXRoIGN1c3RvbSBwcm9iZSBjb2RlICovCiB2b2lkIHNldF9wY2llX3BvcnRfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CkBAIC03NzYsNiArODI4LDcgQEAKIHZvaWQgcGNpX2J1c19zaXplX2JyaWRnZXMoc3RydWN0IHBjaV9idXMgKmJ1cyk7CiBpbnQgcGNpX2NsYWltX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICosIGludCk7CiB2b2lkIHBjaV9hc3NpZ25fdW5hc3NpZ25lZF9yZXNvdXJjZXModm9pZCk7Cit2b2lkIHBjaV9hc3NpZ25fdW5hc3NpZ25lZF9icmlkZ2VfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpicmlkZ2UpOwogdm9pZCBwZGV2X2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKik7CiB2b2lkIHBkZXZfc29ydF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKiwgc3RydWN0IHJlc291cmNlX2xpc3QgKik7CiBpbnQgcGNpX2VuYWJsZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKiwgaW50IG1hc2spOwpAQCAtNzkzLDEyICs4NDYsMjMgQEAKIHZvaWQgcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhzdHJ1Y3QgcGNpX2RldiAqLCBpbnQpOwogCiAvKiBkcml2ZXJzL3BjaS9idXMuYyAqLwordm9pZCBwY2lfYnVzX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgaW50IGZsYWdzKTsKK3N0cnVjdCByZXNvdXJjZSAqcGNpX2J1c19yZXNvdXJjZV9uKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBuKTsKK3ZvaWQgcGNpX2J1c19yZW1vdmVfcmVzb3VyY2VzKHN0cnVjdCBwY2lfYnVzICpidXMpOworCisjZGVmaW5lIHBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByZXMsIGkpCQkJCVwKKwlmb3IgKGkgPSAwOwkJCQkJCQlcCisJICAgIChyZXMgPSBwY2lfYnVzX3Jlc291cmNlX24oYnVzLCBpKSkgfHwgaSA8IFBDSV9CUklER0VfUkVTT1VSQ0VfTlVNOyBcCisJICAgICBpKyspCisKIGludCBfX211c3RfY2hlY2sgcGNpX2J1c19hbGxvY19yZXNvdXJjZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLAogCQkJc3RydWN0IHJlc291cmNlICpyZXMsIHJlc291cmNlX3NpemVfdCBzaXplLAogCQkJcmVzb3VyY2Vfc2l6ZV90IGFsaWduLCByZXNvdXJjZV9zaXplX3QgbWluLAogCQkJdW5zaWduZWQgaW50IHR5cGVfbWFzaywKLQkJCXZvaWQgKCphbGlnbmYpKHZvaWQgKiwgc3RydWN0IHJlc291cmNlICosCi0JCQkJcmVzb3VyY2Vfc2l6ZV90LCByZXNvdXJjZV9zaXplX3QpLAorCQkJcmVzb3VyY2Vfc2l6ZV90ICgqYWxpZ25mKSh2b2lkICosCisJCQkJCQkgIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqLAorCQkJCQkJICByZXNvdXJjZV9zaXplX3QsCisJCQkJCQkgIHJlc291cmNlX3NpemVfdCksCiAJCQl2b2lkICphbGlnbmZfZGF0YSk7CiB2b2lkIHBjaV9lbmFibGVfYnJpZGdlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIApAQCAtOTU5LDYgKzEwMjMsMTEgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUENJX0RPTUFJTlMgKi8KIAorLyogc29tZSBhcmNoaXRlY3R1cmVzIHJlcXVpcmUgYWRkaXRpb25hbCBzZXR1cCB0byBkaXJlY3QgVkdBIHRyYWZmaWMgKi8KK3R5cGVkZWYgaW50ICgqYXJjaF9zZXRfdmdhX3N0YXRlX3QpKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIGRlY29kZSwKKwkJICAgICAgdW5zaWduZWQgaW50IGNvbW1hbmRfYml0cywgYm9vbCBjaGFuZ2VfYnJpZGdlKTsKK2V4dGVybiB2b2lkIHBjaV9yZWdpc3Rlcl9zZXRfdmdhX3N0YXRlKGFyY2hfc2V0X3ZnYV9zdGF0ZV90IGZ1bmMpOworCiAjZWxzZSAvKiBDT05GSUdfUENJIGlzIG5vdCBlbmFibGVkICovCiAKIC8qCkBAIC05NzcsMTMgKzEwNDYsNiBAQAogX1BDSV9OT1BfQUxMKHJlYWQsICopCiBfUENJX05PUF9BTEwod3JpdGUsKQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9kZXZpY2UodW5zaWduZWQgaW50IHZlbmRvciwKLQkJCQkJICAgICAgdW5zaWduZWQgaW50IGRldmljZSwKLQkJCQkJICAgICAgc3RydWN0IHBjaV9kZXYgKmZyb20pCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9kZXYgKnBjaV9nZXRfZGV2aWNlKHVuc2lnbmVkIGludCB2ZW5kb3IsCiAJCQkJCSAgICAgdW5zaWduZWQgaW50IGRldmljZSwKIAkJCQkJICAgICBzdHJ1Y3QgcGNpX2RldiAqZnJvbSkKQEAgLTEyNDEsOCArMTMwMywxMiBAQAogCURFQ0xBUkVfUENJX0ZJWFVQX1NFQ1RJT04oLnBjaV9maXh1cF9zdXNwZW5kLAkJCVwKIAkJCXN1c3BlbmQjI3ZlbmRvciMjZGV2aWNlIyNob29rLCB2ZW5kb3IsIGRldmljZSwgaG9vaykKIAotCisjaWZkZWYgQ09ORklHX1BDSV9RVUlSS1MKIHZvaWQgcGNpX2ZpeHVwX2RldmljZShlbnVtIHBjaV9maXh1cF9wYXNzIHBhc3MsIHN0cnVjdCBwY2lfZGV2ICpkZXYpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZml4dXBfZGV2aWNlKGVudW0gcGNpX2ZpeHVwX3Bhc3MgcGFzcywKKwkJCQkgICAgc3RydWN0IHBjaV9kZXYgKmRldikge30KKyNlbmRpZgogCiB2b2lkIF9faW9tZW0gKnBjaW1faW9tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsIHVuc2lnbmVkIGxvbmcgbWF4bGVuKTsKIHZvaWQgcGNpbV9pb3VubWFwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkIF9faW9tZW0gKmFkZHIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaG90cGx1Zy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaG90cGx1Zy5oCmluZGV4IDY1MmJhNzkuLjVkMDljYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2hvdHBsdWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9ob3RwbHVnLmgKQEAgLTI4LDI2ICsyOCw2IEBACiAjaWZuZGVmIF9QQ0lfSE9UUExVR19ICiAjZGVmaW5lIF9QQ0lfSE9UUExVR19ICiAKLQotLyogVGhlc2UgdmFsdWVzIGNvbWUgZnJvbSB0aGUgUENJIEhvdHBsdWcgU3BlYyAqLwotZW51bSBwY2lfYnVzX3NwZWVkIHsKLQlQQ0lfU1BFRURfMzNNSHoJCQk9IDB4MDAsCi0JUENJX1NQRUVEXzY2TUh6CQkJPSAweDAxLAotCVBDSV9TUEVFRF82Nk1Iel9QQ0lYCQk9IDB4MDIsCi0JUENJX1NQRUVEXzEwME1Iel9QQ0lYCQk9IDB4MDMsCi0JUENJX1NQRUVEXzEzM01Iel9QQ0lYCQk9IDB4MDQsCi0JUENJX1NQRUVEXzY2TUh6X1BDSVhfRUNDCT0gMHgwNSwKLQlQQ0lfU1BFRURfMTAwTUh6X1BDSVhfRUNDCT0gMHgwNiwKLQlQQ0lfU1BFRURfMTMzTUh6X1BDSVhfRUNDCT0gMHgwNywKLQlQQ0lfU1BFRURfNjZNSHpfUENJWF8yNjYJPSAweDA5LAotCVBDSV9TUEVFRF8xMDBNSHpfUENJWF8yNjYJPSAweDBhLAotCVBDSV9TUEVFRF8xMzNNSHpfUENJWF8yNjYJPSAweDBiLAotCVBDSV9TUEVFRF82Nk1Iel9QQ0lYXzUzMwk9IDB4MTEsCi0JUENJX1NQRUVEXzEwME1Iel9QQ0lYXzUzMwk9IDB4MTIsCi0JUENJX1NQRUVEXzEzM01Iel9QQ0lYXzUzMwk9IDB4MTMsCi0JUENJX1NQRUVEX1VOS05PV04JCT0gMHhmZiwKLX07Ci0KIC8qIFRoZXNlIHZhbHVlcyBjb21lIGZyb20gdGhlIFBDSSBFeHByZXNzIFNwZWMgKi8KIGVudW0gcGNpZV9saW5rX3dpZHRoIHsKIAlQQ0lFX0xOS19XSURUSF9SRVNSVgk9IDB4MDAsCkBAIC02MSwxMiArNDEsNiBAQAogCVBDSUVfTE5LX1dJRFRIX1VOS05PV04gID0gMHhGRiwKIH07CiAKLWVudW0gcGNpZV9saW5rX3NwZWVkIHsKLQlQQ0lFXzJfNUdCCQk9IDB4MTQsCi0JUENJRV81XzBHQgkJPSAweDE1LAotCVBDSUVfTE5LX1NQRUVEX1VOS05PV04JPSAweEZGLAotfTsKLQogLyoqCiAgKiBzdHJ1Y3QgaG90cGx1Z19zbG90X29wcyAtdGhlIGNhbGxiYWNrcyB0aGF0IHRoZSBob3RwbHVnIHBjaSBjb3JlIGNhbiB1c2UKICAqIEBvd25lcjogVGhlIG1vZHVsZSBvd25lciBvZiB0aGlzIHN0cnVjdHVyZQpAQCAtODksMTIgKzYzLDYgQEAKICAqIEBnZXRfYWRhcHRlcl9zdGF0dXM6IENhbGxlZCB0byBnZXQgc2VlIGlmIGFuIGFkYXB0ZXIgaXMgcHJlc2VudCBpbiB0aGUgc2xvdCBvciBub3QuCiAgKglJZiB0aGlzIGZpZWxkIGlzIE5VTEwsIHRoZSB2YWx1ZSBwYXNzZWQgaW4gdGhlIHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbwogICoJd2lsbCBiZSB1c2VkIHdoZW4gdGhpcyB2YWx1ZSBpcyByZXF1ZXN0ZWQgYnkgYSB1c2VyLgotICogQGdldF9tYXhfYnVzX3NwZWVkOiBDYWxsZWQgdG8gZ2V0IHRoZSBtYXggYnVzIHNwZWVkIGZvciBhIHNsb3QuCi0gKglJZiB0aGlzIGZpZWxkIGlzIE5VTEwsIHRoZSB2YWx1ZSBwYXNzZWQgaW4gdGhlIHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbwotICoJd2lsbCBiZSB1c2VkIHdoZW4gdGhpcyB2YWx1ZSBpcyByZXF1ZXN0ZWQgYnkgYSB1c2VyLgotICogQGdldF9jdXJfYnVzX3NwZWVkOiBDYWxsZWQgdG8gZ2V0IHRoZSBjdXJyZW50IGJ1cyBzcGVlZCBmb3IgYSBzbG90LgotICoJSWYgdGhpcyBmaWVsZCBpcyBOVUxMLCB0aGUgdmFsdWUgcGFzc2VkIGluIHRoZSBzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8KLSAqCXdpbGwgYmUgdXNlZCB3aGVuIHRoaXMgdmFsdWUgaXMgcmVxdWVzdGVkIGJ5IGEgdXNlci4KICAqCiAgKiBUaGUgdGFibGUgb2YgZnVuY3Rpb24gcG9pbnRlcnMgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIGhvdHBsdWcgcGNpIGNvcmUgYnkgYQogICogaG90cGx1ZyBwY2kgZHJpdmVyLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYnkgdGhlIGhvdHBsdWcgcGNpIGNvcmUgd2hlbgpAQCAtMTEyLDE3ICs4MCwxNCBAQAogCWludCAoKmdldF9hdHRlbnRpb25fc3RhdHVzKQkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgdTggKnZhbHVlKTsKIAlpbnQgKCpnZXRfbGF0Y2hfc3RhdHVzKQkJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHU4ICp2YWx1ZSk7CiAJaW50ICgqZ2V0X2FkYXB0ZXJfc3RhdHVzKQkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgdTggKnZhbHVlKTsKLQlpbnQgKCpnZXRfbWF4X2J1c19zcGVlZCkJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpOwotCWludCAoKmdldF9jdXJfYnVzX3NwZWVkKQkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSk7CiB9OwogCiAvKioKICAqIHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyAtIHVzZWQgdG8gbm90aWZ5IHRoZSBob3RwbHVnIHBjaSBjb3JlIG9mIHRoZSBzdGF0ZSBvZiB0aGUgc2xvdAotICogQHBvd2VyOiBpZiBwb3dlciBpcyBlbmFibGVkIG9yIG5vdCAoMS8wKQorICogQHBvd2VyX3N0YXR1czogaWYgcG93ZXIgaXMgZW5hYmxlZCBvciBub3QgKDEvMCkKICAqIEBhdHRlbnRpb25fc3RhdHVzOiBpZiB0aGUgYXR0ZW50aW9uIGxpZ2h0IGlzIGVuYWJsZWQgb3Igbm90ICgxLzApCiAgKiBAbGF0Y2hfc3RhdHVzOiBpZiB0aGUgbGF0Y2ggKGlmIGFueSkgaXMgb3BlbiBvciBjbG9zZWQgKDEvMCkKLSAqIEBhZGFwdGVyX3ByZXNlbnQ6IGlmIHRoZXJlIGlzIGEgcGNpIGJvYXJkIHByZXNlbnQgaW4gdGhlIHNsb3Qgb3Igbm90ICgxLzApCi0gKiBAYWRkcmVzczogKGRvbWFpbiA8PCAxNiB8IGJ1cyA8PCA4IHwgZGV2KQorICogQGFkYXB0ZXJfc3RhdHVzOiBpZiB0aGVyZSBpcyBhIHBjaSBib2FyZCBwcmVzZW50IGluIHRoZSBzbG90IG9yIG5vdCAoMS8wKQogICoKICAqIFVzZWQgdG8gbm90aWZ5IHRoZSBob3RwbHVnIHBjaSBjb3JlIG9mIHRoZSBzdGF0dXMgb2YgYSBzcGVjaWZpYyBzbG90LgogICovCkBAIC0xMzEsOCArOTYsNiBAQAogCXU4CWF0dGVudGlvbl9zdGF0dXM7CiAJdTgJbGF0Y2hfc3RhdHVzOwogCXU4CWFkYXB0ZXJfc3RhdHVzOwotCWVudW0gcGNpX2J1c19zcGVlZAltYXhfYnVzX3NwZWVkOwotCWVudW0gcGNpX2J1c19zcGVlZAljdXJfYnVzX3NwZWVkOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IGNjYThhMDQuLjBiZTgyNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0yNDE3LDYgKzI0MTcsOSBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQwX0hCCTB4MWEyMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQ1X0hCCTB4MWEzMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVQJMHgxYTM4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfQ1BUX1NNQlVTCTB4MWMyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NQVF9MUEMxCTB4MWM0MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NQVF9MUEMyCTB4MWM0MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMAkweDI0MTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzEJMHgyNDExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV8zCTB4MjQxMwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oCmluZGV4IGE3Njg0YTUuLjc5NDY2MmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdV9jb3VudGVyLmgKQEAgLTk4LDkgKzk4LDYgQEAKIAlmYmMtPmNvdW50ID0gYW1vdW50OwogfQogCi0jZGVmaW5lIF9fcGVyY3B1X2NvdW50ZXJfYWRkKGZiYywgYW1vdW50LCBiYXRjaCkgXAotCXBlcmNwdV9jb3VudGVyX2FkZChmYmMsIGFtb3VudCkKLQogc3RhdGljIGlubGluZSB2b2lkCiBwZXJjcHVfY291bnRlcl9hZGQoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMsIHM2NCBhbW91bnQpCiB7CkBAIC0xMDksNiArMTA2LDEyIEBACiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitfX3BlcmNwdV9jb3VudGVyX2FkZChzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgKmZiYywgczY0IGFtb3VudCwgczMyIGJhdGNoKQoreworCXBlcmNwdV9jb3VudGVyX2FkZChmYmMsIGFtb3VudCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgczY0IHBlcmNwdV9jb3VudGVyX3JlYWQoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMpCiB7CiAJcmV0dXJuIGZiYy0+Y291bnQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IGExNzc2OTguLjdiMThiNGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC0yODgsNyArMjg4LDcgQEAKIH07CiAKICNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0sJCSgzIDw8IDApCi0jZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfQ1BVTU9ERV9VTktOT1dOCQkoMCA8PCAwKQorI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfVU5LTk9XTgkoMCA8PCAwKQogI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTAkJCSgxIDw8IDApCiAjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfVVNFUgkJCSgyIDw8IDApCiAjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfSFlQRVJWSVNPUgkJKDMgPDwgMCkKQEAgLTM1NCw4ICszNTQsOCBAQAogCSAqCXU2NAkJCQlzdHJlYW1faWQ7CiAJICogfTsKIAkgKi8KLQlQRVJGX1JFQ09SRF9USFJPVFRMRQkJPSA1LAotCVBFUkZfUkVDT1JEX1VOVEhST1RUTEUJCT0gNiwKKwlQRVJGX1JFQ09SRF9USFJPVFRMRQkJCT0gNSwKKwlQRVJGX1JFQ09SRF9VTlRIUk9UVExFCQkJPSA2LAogCiAJLyoKIAkgKiBzdHJ1Y3QgewpAQCAtMzY5LDEwICszNjksMTAgQEAKIAogCS8qCiAJICogc3RydWN0IHsKLQkgKiAJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKLQkgKiAJdTMyCQkJCXBpZCwgdGlkOworCSAqCXN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlcgloZWFkZXI7CisJICoJdTMyCQkJCXBpZCwgdGlkOwogCSAqCi0JICogCXN0cnVjdCByZWFkX2Zvcm1hdAkJdmFsdWVzOworCSAqCXN0cnVjdCByZWFkX2Zvcm1hdAkJdmFsdWVzOwogCSAqIH07CiAJICovCiAJUEVSRl9SRUNPUkRfUkVBRAkJCT0gOCwKQEAgLTQxMCw3ICs0MTAsNyBAQAogCSAqCSAgY2hhciAgICAgICAgICAgICAgICAgIGRhdGFbc2l6ZV07fSYmIFBFUkZfU0FNUExFX1JBVwogCSAqIH07CiAJICovCi0JUEVSRl9SRUNPUkRfU0FNUExFCQk9IDksCisJUEVSRl9SRUNPUkRfU0FNUExFCQkJPSA5LAogCiAJUEVSRl9SRUNPUkRfTUFYLAkJCS8qIG5vbi1BQkkgKi8KIH07CkBAIC00NzYsOSArNDc2LDExIEBACiAJdW5pb24gewogCQlzdHJ1Y3QgeyAvKiBoYXJkd2FyZSAqLwogCQkJdTY0CQljb25maWc7CisJCQl1NjQJCWxhc3RfdGFnOwogCQkJdW5zaWduZWQgbG9uZwljb25maWdfYmFzZTsKIAkJCXVuc2lnbmVkIGxvbmcJZXZlbnRfYmFzZTsKIAkJCWludAkJaWR4OworCQkJaW50CQlsYXN0X2NwdTsKIAkJfTsKIAkJc3RydWN0IHsgLyogc29mdHdhcmUgKi8KIAkJCXM2NAkJcmVtYWluaW5nOwpAQCAtNDk2LDkgKzQ5OCw4IEBACiAJYXRvbWljNjRfdAkJCXBlcmlvZF9sZWZ0OwogCXU2NAkJCQlpbnRlcnJ1cHRzOwogCi0JdTY0CQkJCWZyZXFfY291bnQ7Ci0JdTY0CQkJCWZyZXFfaW50ZXJydXB0czsKLQl1NjQJCQkJZnJlcV9zdGFtcDsKKwl1NjQJCQkJZnJlcV90aW1lX3N0YW1wOworCXU2NAkJCQlmcmVxX2NvdW50X3N0YW1wOwogI2VuZGlmCiB9OwogCkBAIC01MTAsNiArNTExLDggQEAKIHN0cnVjdCBwbXUgewogCWludCAoKmVuYWJsZSkJCQkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKIAl2b2lkICgqZGlzYWJsZSkJCQkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKKwlpbnQgKCpzdGFydCkJCQkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKKwl2b2lkICgqc3RvcCkJCQkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKIAl2b2lkICgqcmVhZCkJCQkoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKIAl2b2lkICgqdW50aHJvdHRsZSkJCShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOwogfTsKQEAgLTU2Myw2ICs1NjYsMTAgQEAKIAkJCQkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKiwKIAkJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCitlbnVtIHBlcmZfZ3JvdXBfZmxhZyB7CisJUEVSRl9HUk9VUF9TT0ZUV0FSRSA9IDB4MSwKK307CisKIC8qKgogICogc3RydWN0IHBlcmZfZXZlbnQgLSBwZXJmb3JtYW5jZSBldmVudCBrZXJuZWwgcmVwcmVzZW50YXRpb246CiAgKi8KQEAgLTU3Miw2ICs1NzksNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJCWV2ZW50X2VudHJ5OwogCXN0cnVjdCBsaXN0X2hlYWQJCXNpYmxpbmdfbGlzdDsKIAlpbnQJCQkJbnJfc2libGluZ3M7CisJaW50CQkJCWdyb3VwX2ZsYWdzOwogCXN0cnVjdCBwZXJmX2V2ZW50CQkqZ3JvdXBfbGVhZGVyOwogCXN0cnVjdCBwZXJmX2V2ZW50CQkqb3V0cHV0OwogCWNvbnN0IHN0cnVjdCBwbXUJCSpwbXU7CkBAIC02NTYsNyArNjY0LDcgQEAKIAogCXBlcmZfb3ZlcmZsb3dfaGFuZGxlcl90CQlvdmVyZmxvd19oYW5kbGVyOwogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfRVZFTlRfVFJBQ0lORwogCXN0cnVjdCBldmVudF9maWx0ZXIJCSpmaWx0ZXI7CiAjZW5kaWYKIApAQCAtNjgxLDcgKzY4OSw4IEBACiAJICovCiAJc3RydWN0IG11dGV4CQkJbXV0ZXg7CiAKLQlzdHJ1Y3QgbGlzdF9oZWFkCQlncm91cF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJCXBpbm5lZF9ncm91cHM7CisJc3RydWN0IGxpc3RfaGVhZAkJZmxleGlibGVfZ3JvdXBzOwogCXN0cnVjdCBsaXN0X2hlYWQJCWV2ZW50X2xpc3Q7CiAJaW50CQkJCW5yX2V2ZW50czsKIAlpbnQJCQkJbnJfYWN0aXZlOwpAQCAtNzQ0LDEwICs3NTMsOSBAQAogCiBleHRlcm4gY29uc3Qgc3RydWN0IHBtdSAqaHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CiAKLWV4dGVybiB2b2lkIHBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpOwotZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0JCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCwgaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBwZXJmX2V2ZW50X3Rhc2tfdGljayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpOworZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CitleHRlcm4gdm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KTsKK2V4dGVybiB2b2lkIHBlcmZfZXZlbnRfdGFza190aWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiBleHRlcm4gaW50IHBlcmZfZXZlbnRfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOwogZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9leGl0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7CiBleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwpAQCAtNzYyLDcgKzc3MCw3IEBACiBleHRlcm4gaW50IHBlcmZfZXZlbnRfdGFza19lbmFibGUodm9pZCk7CiBleHRlcm4gaW50IGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmdyb3VwX2xlYWRlciwKIAkgICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LCBpbnQgY3B1KTsKKwkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KTsKIGV4dGVybiB2b2lkIHBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CiBleHRlcm4gaW50IHBlcmZfZXZlbnRfcmVsZWFzZV9rZXJuZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKIGV4dGVybiBzdHJ1Y3QgcGVyZl9ldmVudCAqCkBAIC04NTEsOCArODU5LDcgQEAKIGV4dGVybiBpbnQgc3lzY3RsX3BlcmZfZXZlbnRfc2FtcGxlX3JhdGU7CiAKIGV4dGVybiB2b2lkIHBlcmZfZXZlbnRfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHBlcmZfdHBfZXZlbnQoaW50IGV2ZW50X2lkLCB1NjQgYWRkciwgdTY0IGNvdW50LAotCQkJCSB2b2lkICpyZWNvcmQsIGludCBlbnRyeV9zaXplKTsKK2V4dGVybiB2b2lkIHBlcmZfdHBfZXZlbnQoaW50IGV2ZW50X2lkLCB1NjQgYWRkciwgdTY0IGNvdW50LCB2b2lkICpyZWNvcmQsIGludCBlbnRyeV9zaXplKTsKIGV4dGVybiB2b2lkIHBlcmZfYnBfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKTsKIAogI2lmbmRlZiBwZXJmX21pc2NfZmxhZ3MKQEAgLTg3MywxMiArODgwLDEyIEBACiBleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQKLXBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpCQl7IH0KK3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCQkJeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQKIHBlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQkJICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCwgaW50IGNwdSkJCXsgfQorCQkJICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkJCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZAotcGVyZl9ldmVudF90YXNrX3RpY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY3B1KQkJCXsgfQorcGVyZl9ldmVudF90YXNrX3RpY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQkJCQl7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHBlcmZfZXZlbnRfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCXsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2V4aXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCXsgfQpAQCAtODkzLDEzICs5MDAsMTMgQEAKIHBlcmZfc3dfZXZlbnQodTMyIGV2ZW50X2lkLCB1NjQgbnIsIGludCBubWksCiAJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHU2NCBhZGRyKQkJCXsgfQogc3RhdGljIGlubGluZSB2b2lkCi1wZXJmX2JwX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSkJCXsgfQorcGVyZl9icF9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHZvaWQgKmRhdGEpCQkJeyB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X21tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2NvbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2luaXQodm9pZCkJCQkJeyB9Ci1zdGF0aWMgaW5saW5lIGludCAgcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCh2b2lkKSAgeyByZXR1cm4gLTE7IH0KK3N0YXRpYyBpbmxpbmUgaW50ICBwZXJmX3N3ZXZlbnRfZ2V0X3JlY3Vyc2lvbl9jb250ZXh0KHZvaWQpCQl7IHJldHVybiAtMTsgfQogc3RhdGljIGlubGluZSB2b2lkIHBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQoaW50IHJjdHgpCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQkJeyB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bma2V5djIuaCBiL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCmluZGV4IDIyOGIwYjYuLjBiODBjODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oCkBAIC0zMTUsNiArMzE1LDcgQEAKICNkZWZpbmUgU0FEQl9YX0VBTEdfQUVTX0dDTV9JQ1YxMgkxOQogI2RlZmluZSBTQURCX1hfRUFMR19BRVNfR0NNX0lDVjE2CTIwCiAjZGVmaW5lIFNBREJfWF9FQUxHX0NBTUVMTElBQ0JDCQkyMgorI2RlZmluZSBTQURCX1hfRUFMR19OVUxMX0FFU19HTUFDCTIzCiAjZGVmaW5lIFNBREJfRUFMR19NQVggICAgICAgICAgICAgICAgICAgMjUzIC8qIGxhc3QgRUFMRyAqLwogLyogcHJpdmF0ZSBhbGxvY2F0aW9ucyBzaG91bGQgdXNlIDI0OS0yNTUgKFJGQzI0MDcpICovCiAjZGVmaW5lIFNBREJfWF9FQUxHX1NFUlBFTlRDQkMgIDI1MiAgICAgLyogZHJhZnQtaWV0Zi1pcHNlYy1jaXBoLWFlcy1jYmMtMDAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGt0Y2R2ZC5oIGIvaW5jbHVkZS9saW51eC9wa3RjZHZkLmgKaW5kZXggNzZlNTA1My4uNzIxMzAxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wa3RjZHZkLmgKKysrIGIvaW5jbHVkZS9saW51eC9wa3RjZHZkLmgKQEAgLTE2MywxMCArMTYzLDggQEAKIAlhdG9taWNfdAkJYXR0ZW50aW9uOwkvKiBTZXQgdG8gbm9uLXplcm8gd2hlbiBxdWV1ZSBwcm9jZXNzaW5nIGlzIG5lZWRlZCAqLwogCWludAkJCXdyaXRpbmc7CS8qIE5vbi16ZXJvIHdoZW4gd3JpdGluZywgemVybyB3aGVuIHJlYWRpbmcgKi8KIAlzcGlubG9ja190CQlsb2NrOwkJLyogUHJvdGVjdGluZyByZWFkL3dyaXRlIHF1ZXVlIG1hbmlwdWxhdGlvbnMgKi8KLQlzdHJ1Y3QgYmlvCQkqcmVhZF9xdWV1ZTsKLQlzdHJ1Y3QgYmlvCQkqcmVhZF9xdWV1ZV90YWlsOwotCXN0cnVjdCBiaW8JCSp3cml0ZV9xdWV1ZTsKLQlzdHJ1Y3QgYmlvCQkqd3JpdGVfcXVldWVfdGFpbDsKKwlzdHJ1Y3QgYmlvX2xpc3QJCXJlYWRfcXVldWU7CisJc3RydWN0IGJpb19saXN0CQl3cml0ZV9xdWV1ZTsKIAlzZWN0b3JfdAkJbGFzdF93cml0ZTsJLyogVGhlIHNlY3RvciB3aGVyZSB0aGUgbGFzdCB3cml0ZSBlbmRlZCAqLwogCWludAkJCXN1Y2Nlc3NpdmVfcmVhZHM7CiB9OwpAQCAtMjA2LDggKzIwNCw4IEBACiAJc3BpbmxvY2tfdAkJbG9jazsJCS8qIExvY2sgcHJvdGVjdGluZyBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgKi8KIAkJCQkJCS8qIG9yaWdfYmlvcyBsaXN0ICovCiAKLQlzdHJ1Y3QgYmlvCQkqb3JpZ19iaW9zOwkvKiBPcmlnaW5hbCBiaW9zIHBhc3NlZCB0byBwa3RfbWFrZV9yZXF1ZXN0ICovCi0Jc3RydWN0IGJpbwkJKm9yaWdfYmlvc190YWlsOy8qIHRoYXQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoaXMgcGFja2V0ICovCisJc3RydWN0IGJpb19saXN0CQlvcmlnX2Jpb3M7CS8qIE9yaWdpbmFsIGJpb3MgcGFzc2VkIHRvIHBrdF9tYWtlX3JlcXVlc3QgKi8KKwkJCQkJCS8qIHRoYXQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoaXMgcGFja2V0ICovCiAJaW50CQkJd3JpdGVfc2l6ZTsJLyogVG90YWwgc2l6ZSBvZiBhbGwgYmlvcyBpbiB0aGUgb3JpZ19iaW9zICovCiAJCQkJCQkvKiBsaXN0LCBtZWFzdXJlZCBpbiBudW1iZXIgb2YgZnJhbWVzICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxpc3QuaCBiL2luY2x1ZGUvbGludXgvcGxpc3QuaAppbmRleCA4MjI3ZjcxLi42ODk4OTg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsaXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGlzdC5oCkBAIC00NSw3ICs0NSw3IEBACiAgKiB0aGUgaW5zZXJ0aW9uIG9mIG5ldyBub2Rlcy4gVGhlcmUgYXJlIG5vIG5vZGVzIHdpdGggZHVwbGljYXRlCiAgKiBwcmlvcml0ZXMgb24gdGhlIGxpc3QuCiAgKgotICogVGhlIG5vZGVzIG9uIHRoZSBub2RlX2xpc3QgaXMgb3JkZXJlZCBieSBwcmlvcml0eSBhbmQgY2FuIGNvbnRhaW4KKyAqIFRoZSBub2RlcyBvbiB0aGUgbm9kZV9saXN0IGFyZSBvcmRlcmVkIGJ5IHByaW9yaXR5IGFuZCBjYW4gY29udGFpbgogICogZW50cmllcyB3aGljaCBoYXZlIHRoZSBzYW1lIHByaW9yaXR5LiBUaG9zZSBlbnRyaWVzIGFyZSBvcmRlcmVkCiAgKiBGSUZPCiAgKgpAQCAtMjY1LDcgKzI2NSw3IEBACiAgKgogICogQXNzdW1lcyB0aGUgcGxpc3QgaXMgX25vdF8gZW1wdHkuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBsaXN0X25vZGUqIHBsaXN0X2ZpcnN0KGNvbnN0IHN0cnVjdCBwbGlzdF9oZWFkICpoZWFkKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcGxpc3Rfbm9kZSAqcGxpc3RfZmlyc3QoY29uc3Qgc3RydWN0IHBsaXN0X2hlYWQgKmhlYWQpCiB7CiAJcmV0dXJuIGxpc3RfZW50cnkoaGVhZC0+bm9kZV9saXN0Lm5leHQsCiAJCQkgIHN0cnVjdCBwbGlzdF9ub2RlLCBwbGlzdC5ub2RlX2xpc3QpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbS5oIGIvaW5jbHVkZS9saW51eC9wbS5oCmluZGV4IDE5OGI4ZjkuLmU4MGRmMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KIAogLyoKICAqIENhbGxiYWNrcyBmb3IgcGxhdGZvcm0gZHJpdmVycyB0byBpbXBsZW1lbnQuCkBAIC00MTIsOSArNDEzLDExIEBACiAJcG1fbWVzc2FnZV90CQlwb3dlcl9zdGF0ZTsKIAl1bnNpZ25lZCBpbnQJCWNhbl93YWtldXA6MTsKIAl1bnNpZ25lZCBpbnQJCXNob3VsZF93YWtldXA6MTsKKwl1bnNpZ25lZAkJYXN5bmNfc3VzcGVuZDoxOwogCWVudW0gZHBtX3N0YXRlCQlzdGF0dXM7CQkvKiBPd25lZCBieSB0aGUgUE0gY29yZSAqLwogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogCXN0cnVjdCBsaXN0X2hlYWQJZW50cnk7CisJc3RydWN0IGNvbXBsZXRpb24JY29tcGxldGlvbjsKICNlbmRpZgogI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCiAJc3RydWN0IHRpbWVyX2xpc3QJc3VzcGVuZF90aW1lcjsKQEAgLTQzMCw2ICs0MzMsNyBAQAogCXVuc2lnbmVkIGludAkJcmVxdWVzdF9wZW5kaW5nOjE7CiAJdW5zaWduZWQgaW50CQlkZWZlcnJlZF9yZXN1bWU6MTsKIAl1bnNpZ25lZCBpbnQJCXJ1bl93YWtlOjE7CisJdW5zaWduZWQgaW50CQlydW50aW1lX2F1dG86MTsKIAllbnVtIHJwbV9yZXF1ZXN0CXJlcXVlc3Q7CiAJZW51bSBycG1fc3RhdHVzCQlydW50aW1lX3N0YXR1czsKIAlpbnQJCQlydW50aW1lX2Vycm9yOwpAQCAtNTA4LDYgKzUxMiw3IEBACiAJCV9fc3VzcGVuZF9yZXBvcnRfcmVzdWx0KF9fZnVuY19fLCBmbiwgcmV0KTsJCVwKIAl9IHdoaWxlICgwKQogCitleHRlcm4gdm9pZCBkZXZpY2VfcG1fd2FpdF9mb3JfZGV2KHN0cnVjdCBkZXZpY2UgKnN1Yiwgc3RydWN0IGRldmljZSAqZGV2KTsKICNlbHNlIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAogI2RlZmluZSBkZXZpY2VfcG1fbG9jaygpIGRvIHt9IHdoaWxlICgwKQpAQCAtNTIwLDYgKzUyNSw3IEBACiAKICNkZWZpbmUgc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGZuLCByZXQpCQlkbyB7fSB3aGlsZSAoMCkKIAorc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV93YWl0X2Zvcl9kZXYoc3RydWN0IGRldmljZSAqYSwgc3RydWN0IGRldmljZSAqYikge30KICNlbmRpZiAvKiAhQ09ORklHX1BNX1NMRUVQICovCiAKIC8qIEhvdyB0byByZW9yZGVyIGRwbV9saXN0IGFmdGVyIGRldmljZV9tb3ZlKCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG1fcnVudGltZS5oIGIvaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmgKaW5kZXggMzcwY2UwYS4uN2Q3NzNhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmgKQEAgLTI4LDYgKzI4LDggQEAKIGV4dGVybiBpbnQgcG1fcnVudGltZV9iYXJyaWVyKHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBwbV9ydW50aW1lX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgX19wbV9ydW50aW1lX2Rpc2FibGUoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGNoZWNrX3Jlc3VtZSk7CitleHRlcm4gdm9pZCBwbV9ydW50aW1lX2FsbG93KHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBwbV9ydW50aW1lX2ZvcmJpZChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgcG1fY2hpbGRyZW5fc3VzcGVuZGVkKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTc4LDYgKzgwLDggQEAKIHN0YXRpYyBpbmxpbmUgaW50IHBtX3J1bnRpbWVfYmFycmllcihzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwbV9ydW50aW1lX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgX19wbV9ydW50aW1lX2Rpc2FibGUoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGMpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcG1fcnVudGltZV9hbGxvdyhzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcG1fcnVudGltZV9mb3JiaWQoc3RydWN0IGRldmljZSAqZGV2KSB7fQogCiBzdGF0aWMgaW5saW5lIGJvb2wgcG1fY2hpbGRyZW5fc3VzcGVuZGVkKHN0cnVjdCBkZXZpY2UgKmRldikgeyByZXR1cm4gZmFsc2U7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwbV9zdXNwZW5kX2lnbm9yZV9jaGlsZHJlbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW4pIHt9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaAppbmRleCA1NmYyZDYzLi5jNWVhYjg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKQEAgLTI3LDYgKzI3LDI2IEBACiAjZGVmaW5lIFBUUkFDRV9HRVRTSUdJTkZPCTB4NDIwMgogI2RlZmluZSBQVFJBQ0VfU0VUU0lHSU5GTwkweDQyMDMKIAorLyoKKyAqIEdlbmVyaWMgcHRyYWNlIGludGVyZmFjZSB0aGF0IGV4cG9ydHMgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyByZWdzZXRzCisgKiB1c2luZyB0aGUgY29ycmVzcG9uZGluZyBOVF8qIHR5cGVzICh3aGljaCBhcmUgYWxzbyB1c2VkIGluIHRoZSBjb3JlIGR1bXApLgorICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgTlRfUFJTVEFUVVMgbm90ZSB0eXBlIGluIGEgY29yZSBkdW1wIGNvbnRhaW5zIGEgZnVsbAorICogJ3N0cnVjdCBlbGZfcHJzdGF0dXMnLiBCdXQgdGhlIHVzZXJfcmVnc2V0IGZvciBOVF9QUlNUQVRVUyBjb250YWlucyBqdXN0IHRoZQorICogZWxmX2dyZWdzZXRfdCB0aGF0IGlzIHRoZSBwcl9yZWcgZmllbGQgb2YgJ3N0cnVjdCBlbGZfcHJzdGF0dXMnLiBGb3IgYWxsIHRoZQorICogb3RoZXIgdXNlcl9yZWdzZXQgZmxhdm9ycywgdGhlIHVzZXJfcmVnc2V0IGxheW91dCBhbmQgdGhlIEVMRiBjb3JlIGR1bXAgbm90ZQorICogcGF5bG9hZCBhcmUgZXhhY3RseSB0aGUgc2FtZSBsYXlvdXQuCisgKgorICogVGhpcyBpbnRlcmZhY2UgdXNhZ2UgaXMgYXMgZm9sbG93czoKKyAqCXN0cnVjdCBpb3ZlYyBpb3YgPSB7IGJ1ZiwgbGVufTsKKyAqCisgKglyZXQgPSBwdHJhY2UoUFRSQUNFX0dFVFJFR1NFVC9QVFJBQ0VfU0VUUkVHU0VULCBwaWQsIE5UX1hYWF9UWVBFLCAmaW92KTsKKyAqCisgKiBPbiB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCBpb3YubGVuIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUga2VybmVsLAorICogc3BlY2lmeWluZyBob3cgbXVjaCB0aGUga2VybmVsIGhhcyB3cml0dGVuL3JlYWQgdG8vZnJvbSB0aGUgdXNlcidzIGlvdi5idWYuCisgKi8KKyNkZWZpbmUgUFRSQUNFX0dFVFJFR1NFVAkweDQyMDQKKyNkZWZpbmUgUFRSQUNFX1NFVFJFR1NFVAkweDQyMDUKKwogLyogb3B0aW9ucyBzZXQgdXNpbmcgUFRSQUNFX1NFVE9QVElPTlMgKi8KICNkZWZpbmUgUFRSQUNFX09fVFJBQ0VTWVNHT09ECTB4MDAwMDAwMDEKICNkZWZpbmUgUFRSQUNFX09fVFJBQ0VGT1JLCTB4MDAwMDAwMDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZF9jbGFzcy5oIGIvaW5jbHVkZS9saW51eC9yYWlkX2NsYXNzLmgKaW5kZXggNmI1MzdmMS4uMzFlMWZmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkX2NsYXNzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkX2NsYXNzLmgKQEAgLTMyLDYgKzMyLDcgQEAKIAlSQUlEX0xFVkVMXzAsCiAJUkFJRF9MRVZFTF8xLAogCVJBSURfTEVWRUxfMTAsCisJUkFJRF9MRVZFTF8xRSwKIAlSQUlEX0xFVkVMXzMsCiAJUkFJRF9MRVZFTF80LAogCVJBSURfTEVWRUxfNSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oIGIvaW5jbHVkZS9saW51eC9yY3VsaXN0LmgKaW5kZXggMWJmMGY3MC4uNzc5ZDcwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VsaXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VsaXN0LmgKQEAgLTIwOCw3ICsyMDgsNyBAQAogICogcHJpbWl0aXZlcyBzdWNoIGFzIGxpc3RfYWRkX3JjdSgpIGFzIGxvbmcgYXMgaXQncyBndWFyZGVkIGJ5IHJjdV9yZWFkX2xvY2soKS4KICAqLwogI2RlZmluZSBsaXN0X2VudHJ5X3JjdShwdHIsIHR5cGUsIG1lbWJlcikgXAotCWNvbnRhaW5lcl9vZihyY3VfZGVyZWZlcmVuY2UocHRyKSwgdHlwZSwgbWVtYmVyKQorCWNvbnRhaW5lcl9vZihyY3VfZGVyZWZlcmVuY2VfcmF3KHB0ciksIHR5cGUsIG1lbWJlcikKIAogLyoqCiAgKiBsaXN0X2ZpcnN0X2VudHJ5X3JjdSAtIGdldCB0aGUgZmlyc3QgZWxlbWVudCBmcm9tIGEgbGlzdApAQCAtMjI1LDkgKzIyNSw5IEBACiAJbGlzdF9lbnRyeV9yY3UoKHB0ciktPm5leHQsIHR5cGUsIG1lbWJlcikKIAogI2RlZmluZSBfX2xpc3RfZm9yX2VhY2hfcmN1KHBvcywgaGVhZCkgXAotCWZvciAocG9zID0gcmN1X2RlcmVmZXJlbmNlKChoZWFkKS0+bmV4dCk7IFwKKwlmb3IgKHBvcyA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKGhlYWQpLT5uZXh0KTsgXAogCQlwb3MgIT0gKGhlYWQpOyBcCi0JCXBvcyA9IHJjdV9kZXJlZmVyZW5jZShwb3MtPm5leHQpKQorCQlwb3MgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHBvcy0+bmV4dCkpCiAKIC8qKgogICogbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UJLQlpdGVyYXRlIG92ZXIgcmN1IGxpc3Qgb2YgZ2l2ZW4gdHlwZQpAQCAtMjU3LDkgKzI1Nyw5IEBACiAgKiBhcyBsb25nIGFzIHRoZSB0cmF2ZXJzYWwgaXMgZ3VhcmRlZCBieSByY3VfcmVhZF9sb2NrKCkuCiAgKi8KICNkZWZpbmUgbGlzdF9mb3JfZWFjaF9jb250aW51ZV9yY3UocG9zLCBoZWFkKSBcCi0JZm9yICgocG9zKSA9IHJjdV9kZXJlZmVyZW5jZSgocG9zKS0+bmV4dCk7IFwKKwlmb3IgKChwb3MpID0gcmN1X2RlcmVmZXJlbmNlX3JhdygocG9zKS0+bmV4dCk7IFwKIAkJcHJlZmV0Y2goKHBvcyktPm5leHQpLCAocG9zKSAhPSAoaGVhZCk7IFwKLQkJKHBvcykgPSByY3VfZGVyZWZlcmVuY2UoKHBvcyktPm5leHQpKQorCQkocG9zKSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKHBvcyktPm5leHQpKQogCiAvKioKICAqIGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1IC0gY29udGludWUgaXRlcmF0aW9uIG92ZXIgbGlzdCBvZiBnaXZlbiB0eXBlCkBAIC00MTgsMTAgKzQxOCwxMCBAQAogICogYXMgbG9uZyBhcyB0aGUgdHJhdmVyc2FsIGlzIGd1YXJkZWQgYnkgcmN1X3JlYWRfbG9jaygpLgogICovCiAjZGVmaW5lIGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0cG9zLCBwb3MsIGhlYWQsIG1lbWJlcikJCSBcCi0JZm9yIChwb3MgPSByY3VfZGVyZWZlcmVuY2UoKGhlYWQpLT5maXJzdCk7CQkJIFwKKwlmb3IgKHBvcyA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKGhlYWQpLT5maXJzdCk7CQkJIFwKIAkJcG9zICYmICh7IHByZWZldGNoKHBvcy0+bmV4dCk7IDE7IH0pICYmCQkJIFwKIAkJKHsgdHBvcyA9IGhsaXN0X2VudHJ5KHBvcywgdHlwZW9mKCp0cG9zKSwgbWVtYmVyKTsgMTsgfSk7IFwKLQkJcG9zID0gcmN1X2RlcmVmZXJlbmNlKHBvcy0+bmV4dCkpCisJCXBvcyA9IHJjdV9kZXJlZmVyZW5jZV9yYXcocG9zLT5uZXh0KSkKIAogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3VsaXN0X251bGxzLmggYi9pbmNsdWRlL2xpbnV4L3JjdWxpc3RfbnVsbHMuaAppbmRleCA1ODlhNDA5Li5iNzBmZmU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdWxpc3RfbnVsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdWxpc3RfbnVsbHMuaApAQCAtMTAxLDEwICsxMDEsMTAgQEAKICAqCiAgKi8KICNkZWZpbmUgaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KHRwb3MsIHBvcywgaGVhZCwgbWVtYmVyKSBcCi0JZm9yIChwb3MgPSByY3VfZGVyZWZlcmVuY2UoKGhlYWQpLT5maXJzdCk7CQkJIFwKKwlmb3IgKHBvcyA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKGhlYWQpLT5maXJzdCk7CQkJIFwKIAkJKCFpc19hX251bGxzKHBvcykpICYmCQkJXAogCQkoeyB0cG9zID0gaGxpc3RfbnVsbHNfZW50cnkocG9zLCB0eXBlb2YoKnRwb3MpLCBtZW1iZXIpOyAxOyB9KTsgXAotCQlwb3MgPSByY3VfZGVyZWZlcmVuY2UocG9zLT5uZXh0KSkKKwkJcG9zID0gcmN1X2RlcmVmZXJlbmNlX3Jhdyhwb3MtPm5leHQpKQogCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCmluZGV4IDI0NDQwZjQuLmM4NDM3MzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKQEAgLTYyLDYgKzYyLDggQEAKIAogLyogSW50ZXJuYWwgdG8ga2VybmVsICovCiBleHRlcm4gdm9pZCByY3VfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgcmN1X3NjaGVkdWxlcl9hY3RpdmU7CitleHRlcm4gdm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfVFJFRV9SQ1UpIHx8IGRlZmluZWQoQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UpCiAjaW5jbHVkZSA8bGludXgvcmN1dHJlZS5oPgpAQCAtNzgsMTQgKzgwLDEyMCBAQAogfSB3aGlsZSAoMCkKIAogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisKIGV4dGVybiBzdHJ1Y3QgbG9ja2RlcF9tYXAgcmN1X2xvY2tfbWFwOwotIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZSgpCVwKLQkJCWxvY2tfYWNxdWlyZSgmcmN1X2xvY2tfbWFwLCAwLCAwLCAyLCAxLCBOVUxMLCBfVEhJU19JUF8pCisjIGRlZmluZSByY3VfcmVhZF9hY3F1aXJlKCkgXAorCQlsb2NrX2FjcXVpcmUoJnJjdV9sb2NrX21hcCwgMCwgMCwgMiwgMSwgTlVMTCwgX1RISVNfSVBfKQogIyBkZWZpbmUgcmN1X3JlYWRfcmVsZWFzZSgpCWxvY2tfcmVsZWFzZSgmcmN1X2xvY2tfbWFwLCAxLCBfVEhJU19JUF8pCi0jZWxzZQotIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZSgpCWRvIHsgfSB3aGlsZSAoMCkKLSMgZGVmaW5lIHJjdV9yZWFkX3JlbGVhc2UoKQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKKworZXh0ZXJuIHN0cnVjdCBsb2NrZGVwX21hcCByY3VfYmhfbG9ja19tYXA7CisjIGRlZmluZSByY3VfcmVhZF9hY3F1aXJlX2JoKCkgXAorCQlsb2NrX2FjcXVpcmUoJnJjdV9iaF9sb2NrX21hcCwgMCwgMCwgMiwgMSwgTlVMTCwgX1RISVNfSVBfKQorIyBkZWZpbmUgcmN1X3JlYWRfcmVsZWFzZV9iaCgpCWxvY2tfcmVsZWFzZSgmcmN1X2JoX2xvY2tfbWFwLCAxLCBfVEhJU19JUF8pCisKK2V4dGVybiBzdHJ1Y3QgbG9ja2RlcF9tYXAgcmN1X3NjaGVkX2xvY2tfbWFwOworIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZV9zY2hlZCgpIFwKKwkJbG9ja19hY3F1aXJlKCZyY3Vfc2NoZWRfbG9ja19tYXAsIDAsIDAsIDIsIDEsIE5VTEwsIF9USElTX0lQXykKKyMgZGVmaW5lIHJjdV9yZWFkX3JlbGVhc2Vfc2NoZWQoKSBcCisJCWxvY2tfcmVsZWFzZSgmcmN1X3NjaGVkX2xvY2tfbWFwLCAxLCBfVEhJU19JUF8pCisKKy8qKgorICogcmN1X3JlYWRfbG9ja19oZWxkIC0gbWlnaHQgd2UgYmUgaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uPworICoKKyAqIElmIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIHNlbGVjdGVkIGFuZCBlbmFibGVkLCByZXR1cm5zIG5vbnplcm8gaWZmIGluCisgKiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBJbiBhYnNlbmNlIG9mIENPTkZJR19QUk9WRV9MT0NLSU5HLAorICogdGhpcyBhc3N1bWVzIHdlIGFyZSBpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gdW5sZXNzIGl0IGNhbgorICogcHJvdmUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCByY3VfcmVhZF9sb2NrX2hlbGQodm9pZCkKK3sKKwlpZiAoZGVidWdfbG9ja3MpCisJCXJldHVybiBsb2NrX2lzX2hlbGQoJnJjdV9sb2NrX21hcCk7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogcmN1X3JlYWRfbG9ja19iaF9oZWxkIC0gbWlnaHQgd2UgYmUgaW4gUkNVLWJoIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uPworICoKKyAqIElmIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIHNlbGVjdGVkIGFuZCBlbmFibGVkLCByZXR1cm5zIG5vbnplcm8gaWZmIGluCisgKiBhbiBSQ1UtYmggcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBJbiBhYnNlbmNlIG9mIENPTkZJR19QUk9WRV9MT0NLSU5HLAorICogdGhpcyBhc3N1bWVzIHdlIGFyZSBpbiBhbiBSQ1UtYmggcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gdW5sZXNzIGl0IGNhbgorICogcHJvdmUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCByY3VfcmVhZF9sb2NrX2JoX2hlbGQodm9pZCkKK3sKKwlpZiAoZGVidWdfbG9ja3MpCisJCXJldHVybiBsb2NrX2lzX2hlbGQoJnJjdV9iaF9sb2NrX21hcCk7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkIC0gbWlnaHQgd2UgYmUgaW4gUkNVLXNjaGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uPworICoKKyAqIElmIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIHNlbGVjdGVkIGFuZCBlbmFibGVkLCByZXR1cm5zIG5vbnplcm8gaWZmIGluIGFuCisgKiBSQ1Utc2NoZWQgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBJbiBhYnNlbmNlIG9mIENPTkZJR19QUk9WRV9MT0NLSU5HLAorICogdGhpcyBhc3N1bWVzIHdlIGFyZSBpbiBhbiBSQ1Utc2NoZWQgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gdW5sZXNzIGl0CisgKiBjYW4gcHJvdmUgb3RoZXJ3aXNlLiAgTm90ZSB0aGF0IGRpc2FibGluZyBvZiBwcmVlbXB0aW9uIChpbmNsdWRpbmcKKyAqIGRpc2FibGluZyBpcnFzKSBjb3VudHMgYXMgYW4gUkNVLXNjaGVkIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorICovCitzdGF0aWMgaW5saW5lIGludCByY3VfcmVhZF9sb2NrX3NjaGVkX2hlbGQodm9pZCkKK3sKKwlpbnQgbG9ja2RlcF9vcGluaW9uID0gMDsKKworCWlmIChkZWJ1Z19sb2NrcykKKwkJbG9ja2RlcF9vcGluaW9uID0gbG9ja19pc19oZWxkKCZyY3Vfc2NoZWRfbG9ja19tYXApOworCXJldHVybiBsb2NrZGVwX29waW5pb24gfHwgcHJlZW1wdF9jb3VudCgpICE9IDAgfHwgIXJjdV9zY2hlZHVsZXJfYWN0aXZlOworfQorCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KKworIyBkZWZpbmUgcmN1X3JlYWRfYWNxdWlyZSgpCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSByY3VfcmVhZF9yZWxlYXNlKCkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHJjdV9yZWFkX2FjcXVpcmVfYmgoKQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgcmN1X3JlYWRfcmVsZWFzZV9iaCgpCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSByY3VfcmVhZF9hY3F1aXJlX3NjaGVkKCkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgcmN1X3JlYWRfcmVsZWFzZV9zY2hlZCgpCWRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSBpbnQgcmN1X3JlYWRfbG9ja19oZWxkKHZvaWQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJjdV9yZWFkX2xvY2tfYmhfaGVsZCh2b2lkKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludCByY3VfcmVhZF9sb2NrX3NjaGVkX2hlbGQodm9pZCkKK3sKKwlyZXR1cm4gcHJlZW1wdF9jb3VudCgpICE9IDAgfHwgIXJjdV9zY2hlZHVsZXJfYWN0aXZlOworfQorCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisKKyNpZmRlZiBDT05GSUdfUFJPVkVfUkNVCisKKy8qKgorICogcmN1X2RlcmVmZXJlbmNlX2NoZWNrIC0gcmN1X2RlcmVmZXJlbmNlIHdpdGggZGVidWcgY2hlY2tpbmcKKyAqCisgKiBEbyBhbiByY3VfZGVyZWZlcmVuY2UoKSwgYnV0IGNoZWNrIHRoYXQgdGhlIGNvbnRleHQgaXMgY29ycmVjdC4KKyAqIEZvciBleGFtcGxlLCByY3VfZGVyZWZlcmVuY2VfY2hlY2soZ3AsIHJjdV9yZWFkX2xvY2tfaGVsZCgpKSB0bworICogZW5zdXJlIHRoYXQgdGhlIHJjdV9kZXJlZmVyZW5jZV9jaGVjaygpIGV4ZWN1dGVzIHdpdGhpbiBhbiBSQ1UKKyAqIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjaGVjayBmb3IKKyAqIGxvY2tzIGJlaW5nIGhlbGQsIGZvciBleGFtcGxlLCBieSB1c2luZyBsb2NrZGVwX2lzX2hlbGQoKS4KKyAqLworI2RlZmluZSByY3VfZGVyZWZlcmVuY2VfY2hlY2socCwgYykgXAorCSh7IFwKKwkJaWYgKGRlYnVnX2xvY2tzICYmICEoYykpIFwKKwkJCWxvY2tkZXBfcmN1X2RlcmVmZXJlbmNlKF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKKwkJcmN1X2RlcmVmZXJlbmNlX3JhdyhwKTsgXAorCX0pCisKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfUFJPVkVfUkNVICovCisKKyNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHAsIGMpCXJjdV9kZXJlZmVyZW5jZV9yYXcocCkKKworI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUFJPVkVfUkNVICovCiAKIC8qKgogICogcmN1X3JlYWRfbG9jayAtIG1hcmsgdGhlIGJlZ2lubmluZyBvZiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCkBAIC0xNjAsNyArMjY4LDcgQEAKIHsKIAlfX3JjdV9yZWFkX2xvY2tfYmgoKTsKIAlfX2FjcXVpcmUoUkNVX0JIKTsKLQlyY3VfcmVhZF9hY3F1aXJlKCk7CisJcmN1X3JlYWRfYWNxdWlyZV9iaCgpOwogfQogCiAvKgpAQCAtMTcwLDcgKzI3OCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCByY3VfcmVhZF91bmxvY2tfYmgodm9pZCkKIHsKLQlyY3VfcmVhZF9yZWxlYXNlKCk7CisJcmN1X3JlYWRfcmVsZWFzZV9iaCgpOwogCV9fcmVsZWFzZShSQ1VfQkgpOwogCV9fcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiB9CkBAIC0xODgsNyArMjk2LDcgQEAKIHsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlfX2FjcXVpcmUoUkNVX1NDSEVEKTsKLQlyY3VfcmVhZF9hY3F1aXJlKCk7CisJcmN1X3JlYWRfYWNxdWlyZV9zY2hlZCgpOwogfQogCiAvKiBVc2VkIGJ5IGxvY2tkZXAgYW5kIHRyYWNpbmc6IGNhbm5vdCBiZSB0cmFjZWQsIGNhbm5vdCBjYWxsIGxvY2tkZXAuICovCkBAIC0yMDUsNyArMzEzLDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHJjdV9yZWFkX3VubG9ja19zY2hlZCh2b2lkKQogewotCXJjdV9yZWFkX3JlbGVhc2UoKTsKKwlyY3VfcmVhZF9yZWxlYXNlX3NjaGVkKCk7CiAJX19yZWxlYXNlKFJDVV9TQ0hFRCk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KQEAgLTIxOSwyMiArMzI3LDQ5IEBACiAKIAogLyoqCi0gKiByY3VfZGVyZWZlcmVuY2UgLSBmZXRjaCBhbiBSQ1UtcHJvdGVjdGVkIHBvaW50ZXIgaW4gYW4KLSAqIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIFRoaXMgcG9pbnRlciBtYXkgbGF0ZXIKLSAqIGJlIHNhZmVseSBkZXJlZmVyZW5jZWQuCisgKiByY3VfZGVyZWZlcmVuY2VfcmF3IC0gZmV0Y2ggYW4gUkNVLXByb3RlY3RlZCBwb2ludGVyCisgKgorICogVGhlIGNhbGxlciBtdXN0IGJlIHdpdGhpbiBzb21lIGZsYXZvciBvZiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsCisgKiBzZWN0aW9uLCBvciBtdXN0IGJlIG90aGVyd2lzZSBwcmV2ZW50aW5nIHRoZSBwb2ludGVyIGZyb20gY2hhbmdpbmcsCisgKiBmb3IgZXhhbXBsZSwgYnkgaG9sZGluZyBhbiBhcHByb3ByaWF0ZSBsb2NrLiAgVGhpcyBwb2ludGVyIG1heSBsYXRlcgorICogYmUgc2FmZWx5IGRlcmVmZXJlbmNlZC4gIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBoYXZlCisgKiBkb25lIHRoZSByaWdodCB0aGluZywgYXMgdGhpcyBwcmltaXRpdmUgZG9lcyBubyBjaGVja2luZyBvZiBhbnkga2luZC4KICAqCiAgKiBJbnNlcnRzIG1lbW9yeSBiYXJyaWVycyBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgcmVxdWlyZSB0aGVtCiAgKiAoY3VycmVudGx5IG9ubHkgdGhlIEFscGhhKSwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBkb2N1bWVudHMKICAqIGV4YWN0bHkgd2hpY2ggcG9pbnRlcnMgYXJlIHByb3RlY3RlZCBieSBSQ1UuCiAgKi8KLQotI2RlZmluZSByY3VfZGVyZWZlcmVuY2UocCkgICAgICh7IFwKKyNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX3JhdyhwKQkoeyBcCiAJCQkJdHlwZW9mKHApIF9fX19fX19fX3AxID0gQUNDRVNTX09OQ0UocCk7IFwKIAkJCQlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsgXAogCQkJCShfX19fX19fX19wMSk7IFwKIAkJCQl9KQogCiAvKioKKyAqIHJjdV9kZXJlZmVyZW5jZSAtIGZldGNoIGFuIFJDVS1wcm90ZWN0ZWQgcG9pbnRlciwgY2hlY2tpbmcgZm9yIFJDVQorICoKKyAqIE1ha2VzIHJjdV9kZXJlZmVyZW5jZV9jaGVjaygpIGRvIHRoZSBkaXJ0eSB3b3JrLgorICovCisjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZShwKSBcCisJcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHAsIHJjdV9yZWFkX2xvY2tfaGVsZCgpKQorCisvKioKKyAqIHJjdV9kZXJlZmVyZW5jZV9iaCAtIGZldGNoIGFuIFJDVS1wcm90ZWN0ZWQgcG9pbnRlciwgY2hlY2tpbmcgZm9yIFJDVS1iaAorICoKKyAqIE1ha2VzIHJjdV9kZXJlZmVyZW5jZV9jaGVjaygpIGRvIHRoZSBkaXJ0eSB3b3JrLgorICovCisjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9iaChwKSBcCisJCXJjdV9kZXJlZmVyZW5jZV9jaGVjayhwLCByY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSkKKworLyoqCisgKiByY3VfZGVyZWZlcmVuY2Vfc2NoZWQgLSBmZXRjaCBSQ1UtcHJvdGVjdGVkIHBvaW50ZXIsIGNoZWNraW5nIGZvciBSQ1Utc2NoZWQKKyAqCisgKiBNYWtlcyByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSBkbyB0aGUgZGlydHkgd29yay4KKyAqLworI2RlZmluZSByY3VfZGVyZWZlcmVuY2Vfc2NoZWQocCkgXAorCQlyY3VfZGVyZWZlcmVuY2VfY2hlY2socCwgcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkKCkpCisKKy8qKgogICogcmN1X2Fzc2lnbl9wb2ludGVyIC0gYXNzaWduIChwdWJsaWNpemUpIGEgcG9pbnRlciB0byBhIG5ld2x5CiAgKiBpbml0aWFsaXplZCBzdHJ1Y3R1cmUgdGhhdCB3aWxsIGJlIGRlcmVmZXJlbmNlZCBieSBSQ1UgcmVhZC1zaWRlCiAgKiBjcml0aWNhbCBzZWN0aW9ucy4gIFJldHVybnMgdGhlIHZhbHVlIGFzc2lnbmVkLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3V0aW55LmggYi9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaAppbmRleCA5NmNjMzA3Li5hNTE5NTg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaApAQCAtNjIsNiArNjIsMTggQEAKIAogZXh0ZXJuIGludCByY3VfZXhwZWRpdGVkX3RvcnR1cmVfc3RhdHMoY2hhciAqcGFnZSk7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfYmhfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3Vfc2NoZWRfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpCit7Cit9CisKICNkZWZpbmUgc3luY2hyb25pemVfcmN1IHN5bmNocm9uaXplX3NjaGVkCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKHZvaWQpCkBAIC05MywxMCArMTA1LDYgQEAKIAogI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfTk9fSFogKi8KIAotc3RhdGljIGlubGluZSB2b2lkIHJjdV9zY2hlZHVsZXJfc3RhcnRpbmcodm9pZCkKLXsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGV4aXRfcmN1KHZvaWQpCiB7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaCBiL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCmluZGV4IDgwNDRiMWIuLjQyY2MzYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCkBAIC0zNSw3ICszNSw2IEBACiBleHRlcm4gdm9pZCByY3Vfc2NoZWRfcXMoaW50IGNwdSk7CiBleHRlcm4gdm9pZCByY3VfYmhfcXMoaW50IGNwdSk7CiBleHRlcm4gaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSk7Ci1leHRlcm4gdm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpOwogZXh0ZXJuIGludCByY3VfZXhwZWRpdGVkX3RvcnR1cmVfc3RhdHMoY2hhciAqcGFnZSk7CiAKICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQpAQCAtOTksNiArOTgsOSBAQAogZXh0ZXJuIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkKHZvaWQpOwogZXh0ZXJuIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkX2JoKHZvaWQpOwogZXh0ZXJuIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkX3NjaGVkKHZvaWQpOworZXh0ZXJuIHZvaWQgcmN1X2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKTsKK2V4dGVybiB2b2lkIHJjdV9iaF9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCk7CitleHRlcm4gdm9pZCByY3Vfc2NoZWRfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX05PX0haCiB2b2lkIHJjdV9lbnRlcl9ub2h6KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZXN1bWUtdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvcmVzdW1lLXRyYWNlLmgKaW5kZXggYzliYTJmZC4uYmM4YzM4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZXN1bWUtdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jlc3VtZS10cmFjZS5oCkBAIC02LDYgKzYsMTEgQEAKIAogZXh0ZXJuIGludCBwbV90cmFjZV9lbmFibGVkOwogCitzdGF0aWMgaW5saW5lIGludCBwbV90cmFjZV9pc19lbmFibGVkKHZvaWQpCit7CisgICAgICAgcmV0dXJuIHBtX3RyYWNlX2VuYWJsZWQ7Cit9CisKIHN0cnVjdCBkZXZpY2U7CiBleHRlcm4gdm9pZCBzZXRfdHJhY2VfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKik7CiBleHRlcm4gdm9pZCBnZW5lcmF0ZV9yZXN1bWVfdHJhY2UoY29uc3Qgdm9pZCAqdHJhY2VkYXRhLCB1bnNpZ25lZCBpbnQgdXNlcik7CkBAIC0xNyw2ICsyMiw4IEBACiAKICNlbHNlCiAKK3N0YXRpYyBpbmxpbmUgaW50IHBtX3RyYWNlX2lzX2VuYWJsZWQodm9pZCkgeyByZXR1cm4gMDsgfQorCiAjZGVmaW5lIFRSQUNFX0RFVklDRShkZXYpIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgVFJBQ0VfUkVTVU1FKGRldikgZG8geyB9IHdoaWxlICgwKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAppbmRleCAwNTMzMGZjLi41YzUyZmE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKQEAgLTczNSw2ICs3MzUsOSBAQAogZXh0ZXJuIHZvaWQgcnRubF91bmxvY2sodm9pZCk7CiBleHRlcm4gaW50IHJ0bmxfdHJ5bG9jayh2b2lkKTsKIGV4dGVybiBpbnQgcnRubF9pc19sb2NrZWQodm9pZCk7CisjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKK2V4dGVybiBpbnQgbG9ja2RlcF9ydG5sX2lzX2hlbGQodm9pZCk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HICovCiAKIGV4dGVybiB2b2lkIHJ0bmV0bGlua19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgX19ydG5sX3VubG9jayh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA3OGVmZTdjLi40YjE3NTNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC05Nyw3ICs5Nyw3IEBACiBzdHJ1Y3QgZXhlY19kb21haW47CiBzdHJ1Y3QgZnV0ZXhfcGlfc3RhdGU7CiBzdHJ1Y3Qgcm9idXN0X2xpc3RfaGVhZDsKLXN0cnVjdCBiaW87CitzdHJ1Y3QgYmlvX2xpc3Q7CiBzdHJ1Y3QgZnNfc3RydWN0Owogc3RydWN0IGJ0c19jb250ZXh0Owogc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dDsKQEAgLTc0MCwxNCArNzQwLDYgQEAKIAl1aWRfdCB1aWQ7CiAJc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zOwogCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQlzdHJ1Y3QgdGFza19ncm91cCAqdGc7Ci0jaWZkZWYgQ09ORklHX1NZU0ZTCi0Jc3RydWN0IGtvYmplY3Qga29iajsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7Ci0jZW5kaWYKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiAJYXRvbWljX2xvbmdfdCBsb2NrZWRfdm07CiAjZW5kaWYKQEAgLTg3OCw3ICs4NzAsMTAgQEAKIAlpZiAoc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MpCiAJCXJldHVybiBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRTsKIAotCXJldHVybiBTRF9QUkVGRVJfU0lCTElORzsKKwlpZiAoIXNjaGVkX21jX3Bvd2VyX3NhdmluZ3MpCisJCXJldHVybiBTRF9QUkVGRVJfU0lCTElORzsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzZF9iYWxhbmNlX2Zvcl9wYWNrYWdlX3Bvd2VyKHZvaWQpCkBAIC0xMDg0LDcgKzEwNzksOCBAQAogc3RydWN0IHNjaGVkX2NsYXNzIHsKIAljb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKm5leHQ7CiAKLQl2b2lkICgqZW5xdWV1ZV90YXNrKSAoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZXVwKTsKKwl2b2lkICgqZW5xdWV1ZV90YXNrKSAoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZXVwLAorCQkJICAgICAgYm9vbCBoZWFkKTsKIAl2b2lkICgqZGVxdWV1ZV90YXNrKSAoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc2xlZXApOwogCXZvaWQgKCp5aWVsZF90YXNrKSAoc3RydWN0IHJxICpycSk7CiAKQEAgLTEwOTYsMTQgKzEwOTIsNiBAQAogI2lmZGVmIENPTkZJR19TTVAKIAlpbnQgICgqc2VsZWN0X3Rhc2tfcnEpKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHNkX2ZsYWcsIGludCBmbGFncyk7CiAKLQl1bnNpZ25lZCBsb25nICgqbG9hZF9iYWxhbmNlKSAoc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsCi0JCQlzdHJ1Y3QgcnEgKmJ1c2llc3QsIHVuc2lnbmVkIGxvbmcgbWF4X2xvYWRfbW92ZSwKLQkJCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJCWludCAqYWxsX3Bpbm5lZCwgaW50ICp0aGlzX2Jlc3RfcHJpbyk7Ci0KLQlpbnQgKCptb3ZlX29uZV90YXNrKSAoc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsCi0JCQkgICAgICBzdHJ1Y3QgcnEgKmJ1c2llc3QsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAotCQkJICAgICAgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpOwogCXZvaWQgKCpwcmVfc2NoZWR1bGUpIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAJdm9pZCAoKnBvc3Rfc2NoZWR1bGUpIChzdHJ1Y3QgcnEgKnRoaXNfcnEpOwogCXZvaWQgKCp0YXNrX3dha2luZykgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKQEAgLTE0NjYsNyArMTQ1NCw3IEBACiAJdm9pZCAqam91cm5hbF9pbmZvOwogCiAvKiBzdGFja2VkIGJsb2NrIGRldmljZSBpbmZvICovCi0Jc3RydWN0IGJpbyAqYmlvX2xpc3QsICoqYmlvX3RhaWw7CisJc3RydWN0IGJpb19saXN0ICpiaW9fbGlzdDsKIAogLyogVk0gc3RhdGUgKi8KIAlzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSAqcmVjbGFpbV9zdGF0ZTsKQEAgLTI1MTcsMTMgKzI1MDUsOSBAQAogCiBleHRlcm4gdm9pZCBub3JtYWxpemVfcnRfdGFza3Modm9pZCk7CiAKLSNpZmRlZiBDT05GSUdfR1JPVVBfU0NIRUQKKyNpZmRlZiBDT05GSUdfQ0dST1VQX1NDSEVECiAKIGV4dGVybiBzdHJ1Y3QgdGFza19ncm91cCBpbml0X3Rhc2tfZ3JvdXA7Ci0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLWV4dGVybiBzdHJ1Y3QgdGFza19ncm91cCByb290X3Rhc2tfZ3JvdXA7Ci1leHRlcm4gdm9pZCBzZXRfdGdfdWlkKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcik7Ci0jZW5kaWYKIAogZXh0ZXJuIHN0cnVjdCB0YXNrX2dyb3VwICpzY2hlZF9jcmVhdGVfZ3JvdXAoc3RydWN0IHRhc2tfZ3JvdXAgKnBhcmVudCk7CiBleHRlcm4gdm9pZCBzY2hlZF9kZXN0cm95X2dyb3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0Zyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaCBiL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oCmluZGV4IDRlZjI0NmYuLjUxZDI4OGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oCkBAIC00NSw3ICs0NSw3IEBACiAjZGVmaW5lIElOVENfU01QKHN0cmlkZSwgbnIpCiAjZW5kaWYKIAotc3RydWN0IGludGNfZGVzYyB7CitzdHJ1Y3QgaW50Y19od19kZXNjIHsKIAlzdHJ1Y3QgaW50Y192ZWN0ICp2ZWN0b3JzOwogCXVuc2lnbmVkIGludCBucl92ZWN0b3JzOwogCXN0cnVjdCBpbnRjX2dyb3VwICpncm91cHM7CkBAIC01NiwyOSArNTYsNDAgQEAKIAl1bnNpZ25lZCBpbnQgbnJfcHJpb19yZWdzOwogCXN0cnVjdCBpbnRjX3NlbnNlX3JlZyAqc2Vuc2VfcmVnczsKIAl1bnNpZ25lZCBpbnQgbnJfc2Vuc2VfcmVnczsKLQljaGFyICpuYW1lOwogCXN0cnVjdCBpbnRjX21hc2tfcmVnICphY2tfcmVnczsKIAl1bnNpZ25lZCBpbnQgbnJfYWNrX3JlZ3M7CiB9OwogCiAjZGVmaW5lIF9JTlRDX0FSUkFZKGEpIGEsIHNpemVvZihhKS9zaXplb2YoKmEpCisjZGVmaW5lIElOVENfSFdfREVTQyh2ZWN0b3JzLCBncm91cHMsIG1hc2tfcmVncywJXAorCQkgICAgIHByaW9fcmVncywJc2Vuc2VfcmVncywgYWNrX3JlZ3MpCVwKK3sJCQkJCQkJXAorCV9JTlRDX0FSUkFZKHZlY3RvcnMpLCBfSU5UQ19BUlJBWShncm91cHMpLAlcCisJX0lOVENfQVJSQVkobWFza19yZWdzKSwgX0lOVENfQVJSQVkocHJpb19yZWdzKSwJXAorCV9JTlRDX0FSUkFZKHNlbnNlX3JlZ3MpLCBfSU5UQ19BUlJBWShhY2tfcmVncyksCVwKK30KKworc3RydWN0IGludGNfZGVzYyB7CisJY2hhciAqbmFtZTsKKwlpbnRjX2VudW0gZm9yY2VfZW5hYmxlOworCWludGNfZW51bSBmb3JjZV9kaXNhYmxlOworCXN0cnVjdCBpbnRjX2h3X2Rlc2MgaHc7Cit9OworCiAjZGVmaW5lIERFQ0xBUkVfSU5UQ19ERVNDKHN5bWJvbCwgY2hpcG5hbWUsIHZlY3RvcnMsIGdyb3VwcywJCVwKIAltYXNrX3JlZ3MsIHByaW9fcmVncywgc2Vuc2VfcmVncykJCQkJXAogc3RydWN0IGludGNfZGVzYyBzeW1ib2wgX19pbml0ZGF0YSA9IHsJCQkJCVwKLQlfSU5UQ19BUlJBWSh2ZWN0b3JzKSwgX0lOVENfQVJSQVkoZ3JvdXBzKSwJCQlcCi0JX0lOVENfQVJSQVkobWFza19yZWdzKSwgX0lOVENfQVJSQVkocHJpb19yZWdzKSwJCQlcCi0JX0lOVENfQVJSQVkoc2Vuc2VfcmVncyksCQkJCQlcCi0JY2hpcG5hbWUsCQkJCQkJCVwKKwkubmFtZSA9IGNoaXBuYW1lLAkJCQkJCVwKKwkuaHcgPSBJTlRDX0hXX0RFU0ModmVjdG9ycywgZ3JvdXBzLCBtYXNrX3JlZ3MsCQkJXAorCQkJICAgcHJpb19yZWdzLCBzZW5zZV9yZWdzLCBOVUxMKSwJCVwKIH0KIAogI2RlZmluZSBERUNMQVJFX0lOVENfREVTQ19BQ0soc3ltYm9sLCBjaGlwbmFtZSwgdmVjdG9ycywgZ3JvdXBzLAlcCiAJbWFza19yZWdzLCBwcmlvX3JlZ3MsIHNlbnNlX3JlZ3MsIGFja19yZWdzKQkJCVwKIHN0cnVjdCBpbnRjX2Rlc2Mgc3ltYm9sIF9faW5pdGRhdGEgPSB7CQkJCQlcCi0JX0lOVENfQVJSQVkodmVjdG9ycyksIF9JTlRDX0FSUkFZKGdyb3VwcyksCQkJXAotCV9JTlRDX0FSUkFZKG1hc2tfcmVncyksIF9JTlRDX0FSUkFZKHByaW9fcmVncyksCQkJXAotCV9JTlRDX0FSUkFZKHNlbnNlX3JlZ3MpLAkJCQkJXAotCWNoaXBuYW1lLAkJCQkJCQlcCi0JX0lOVENfQVJSQVkoYWNrX3JlZ3MpLAkJCQkJCVwKKwkubmFtZSA9IGNoaXBuYW1lLAkJCQkJCVwKKwkuaHcgPSBJTlRDX0hXX0RFU0ModmVjdG9ycywgZ3JvdXBzLCBtYXNrX3JlZ3MsCQkJXAorCQkJICAgcHJpb19yZWdzLCBzZW5zZV9yZWdzLCBhY2tfcmVncyksCQlcCiB9CiAKIHZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL2R3X3NwaS5oIGIvaW5jbHVkZS9saW51eC9zcGkvZHdfc3BpLmgKaW5kZXggNTFiM2U3Ny4uY2M4MTNmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvZHdfc3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvZHdfc3BpLmgKQEAgLTkwLDYgKzkwLDcgQEAKIAl1bnNpZ25lZCBsb25nCQlwYWRkcjsKIAl1MzIJCQlpb2xlbjsKIAlpbnQJCQlpcnE7CisJdTMyCQkJZmlmb19sZW47CS8qIGRlcHRoIG9mIHRoZSBGSUZPIGJ1ZmZlciAqLwogCXUzMgkJCW1heF9mcmVxOwkvKiBtYXggYnVzIGZyZXEgc3VwcG9ydGVkICovCiAKIAl1MTYJCQlidXNfbnVtOwpAQCAtMTcxLDYgKzE3MiwxMCBAQAogewogCWlmIChjcyA+IGR3cy0+bnVtX2NzKQogCQlyZXR1cm47CisKKwlpZiAoZHdzLT5jc19jb250cm9sKQorCQlkd3MtPmNzX2NvbnRyb2woMSk7CisKIAlkd193cml0ZWwoZHdzLCBzZXIsIDEgPDwgY3MpOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3UuaCBiL2luY2x1ZGUvbGludXgvc3JjdS5oCmluZGV4IDQ3NjVkOTcuLjMwODRmODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3JjdS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3JjdS5oCkBAIC0zNSw2ICszNSw5IEBACiAJaW50IGNvbXBsZXRlZDsKIAlzdHJ1Y3Qgc3JjdV9zdHJ1Y3RfYXJyYXkgKnBlcl9jcHVfcmVmOwogCXN0cnVjdCBtdXRleCBtdXRleDsKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCXN0cnVjdCBsb2NrZGVwX21hcCBkZXBfbWFwOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLwogfTsKIAogI2lmbmRlZiBDT05GSUdfUFJFRU1QVApAQCAtNDMsMTIgKzQ2LDEwMCBAQAogI2RlZmluZSBzcmN1X2JhcnJpZXIoKQogI2VuZGlmIC8qICNlbHNlICNpZm5kZWYgQ09ORklHX1BSRUVNUFQgKi8KIAorI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisKK2ludCBfX2luaXRfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKKworI2RlZmluZSBpbml0X3NyY3Vfc3RydWN0KHNwKSBcCisoeyBcCisJc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX3NyY3Vfa2V5OyBcCisJXAorCV9faW5pdF9zcmN1X3N0cnVjdCgoc3ApLCAjc3AsICZfX3NyY3Vfa2V5KTsgXAorfSkKKworIyBkZWZpbmUgc3JjdV9yZWFkX2FjcXVpcmUoc3ApIFwKKwkJbG9ja19hY3F1aXJlKCYoc3ApLT5kZXBfbWFwLCAwLCAwLCAyLCAxLCBOVUxMLCBfVEhJU19JUF8pCisjIGRlZmluZSBzcmN1X3JlYWRfcmVsZWFzZShzcCkgXAorCQlsb2NrX3JlbGVhc2UoJihzcCktPmRlcF9tYXAsIDEsIF9USElTX0lQXykKKworI2Vsc2UgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisKIGludCBpbml0X3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApOworCisjIGRlZmluZSBzcmN1X3JlYWRfYWNxdWlyZShzcCkgIGRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIHNyY3VfcmVhZF9yZWxlYXNlKHNwKSAgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisKIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKTsKLWludCBzcmN1X3JlYWRfbG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKSBfX2FjcXVpcmVzKHNwKTsKLXZvaWQgc3JjdV9yZWFkX3VubG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBpbnQgaWR4KSBfX3JlbGVhc2VzKHNwKTsKK2ludCBfX3NyY3VfcmVhZF9sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApIF9fYWNxdWlyZXMoc3ApOwordm9pZCBfX3NyY3VfcmVhZF91bmxvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCwgaW50IGlkeCkgX19yZWxlYXNlcyhzcCk7CiB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCk7CiB2b2lkIHN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApOwogbG9uZyBzcmN1X2JhdGNoZXNfY29tcGxldGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApOwogCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKworLyoqCisgKiBzcmN1X3JlYWRfbG9ja19oZWxkIC0gbWlnaHQgd2UgYmUgaW4gU1JDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbj8KKyAqCisgKiBJZiBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBzZWxlY3RlZCBhbmQgZW5hYmxlZCwgcmV0dXJucyBub256ZXJvIGlmZiBpbgorICogYW4gU1JDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIEluIGFic2VuY2Ugb2YgQ09ORklHX1BST1ZFX0xPQ0tJTkcsCisgKiB0aGlzIGFzc3VtZXMgd2UgYXJlIGluIGFuIFNSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gdW5sZXNzIGl0IGNhbgorICogcHJvdmUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBzcmN1X3JlYWRfbG9ja19oZWxkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApCit7CisJaWYgKGRlYnVnX2xvY2tzKQorCQlyZXR1cm4gbG9ja19pc19oZWxkKCZzcC0+ZGVwX21hcCk7CisJcmV0dXJuIDE7Cit9CisKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLworCitzdGF0aWMgaW5saW5lIGludCBzcmN1X3JlYWRfbG9ja19oZWxkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApCit7CisJcmV0dXJuIDE7Cit9CisKKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KKworLyoqCisgKiBzcmN1X2RlcmVmZXJlbmNlIC0gZmV0Y2ggU1JDVS1wcm90ZWN0ZWQgcG9pbnRlciB3aXRoIGNoZWNraW5nCisgKgorICogTWFrZXMgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKCkgZG8gdGhlIGRpcnR5IHdvcmsuCisgKi8KKyNkZWZpbmUgc3JjdV9kZXJlZmVyZW5jZShwLCBzcCkgXAorCQlyY3VfZGVyZWZlcmVuY2VfY2hlY2socCwgc3JjdV9yZWFkX2xvY2tfaGVsZChzcCkpCisKKy8qKgorICogc3JjdV9yZWFkX2xvY2sgLSByZWdpc3RlciBhIG5ldyByZWFkZXIgZm9yIGFuIFNSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZS4KKyAqIEBzcDogc3JjdV9zdHJ1Y3QgaW4gd2hpY2ggdG8gcmVnaXN0ZXIgdGhlIG5ldyByZWFkZXIuCisgKgorICogRW50ZXIgYW4gU1JDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gIE5vdGUgdGhhdCBTUkNVIHJlYWQtc2lkZQorICogY3JpdGljYWwgc2VjdGlvbnMgbWF5IGJlIG5lc3RlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc3JjdV9yZWFkX2xvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCkgX19hY3F1aXJlcyhzcCkKK3sKKwlpbnQgcmV0dmFsID0gX19zcmN1X3JlYWRfbG9jayhzcCk7CisKKwlzcmN1X3JlYWRfYWNxdWlyZShzcCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBzcmN1X3JlYWRfdW5sb2NrIC0gdW5yZWdpc3RlciBhIG9sZCByZWFkZXIgZnJvbSBhbiBTUkNVLXByb3RlY3RlZCBzdHJ1Y3R1cmUuCisgKiBAc3A6IHNyY3Vfc3RydWN0IGluIHdoaWNoIHRvIHVucmVnaXN0ZXIgdGhlIG9sZCByZWFkZXIuCisgKiBAaWR4OiByZXR1cm4gdmFsdWUgZnJvbSBjb3JyZXNwb25kaW5nIHNyY3VfcmVhZF9sb2NrKCkuCisgKgorICogRXhpdCBhbiBTUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3JjdV9yZWFkX3VubG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBpbnQgaWR4KQorCV9fcmVsZWFzZXMoc3ApCit7CisJc3JjdV9yZWFkX3JlbGVhc2Uoc3ApOworCV9fc3JjdV9yZWFkX3VubG9jayhzcCwgaWR4KTsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKaW5kZXggMjA3NDY2YS4uODEyNmYyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApAQCAtOTksNyArOTksNyBAQAogI2RlZmluZSBfX1NDX1RFU1Q1KHQ1LCBhNSwgLi4uKQlfX1NDX1RFU1QodDUpOyBfX1NDX1RFU1Q0KF9fVkFfQVJHU19fKQogI2RlZmluZSBfX1NDX1RFU1Q2KHQ2LCBhNiwgLi4uKQlfX1NDX1RFU1QodDYpOyBfX1NDX1RFU1Q1KF9fVkFfQVJHU19fKQogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAogI2RlZmluZSBUUkFDRV9TWVNfRU5URVJfUFJPRklMRV9JTklUKHNuYW1lKQkJCQkgICAgICAgXAogCS5wcm9maWxlX2VuYWJsZSA9IHByb2Zfc3lzZW50ZXJfZW5hYmxlLAkJCQkgICAgICAgXApAQCAtMTEzLDcgKzExMyw3IEBACiAjZGVmaW5lIFRSQUNFX1NZU19FTlRFUl9QUk9GSUxFX0lOSVQoc25hbWUpCiAjZGVmaW5lIFRSQUNFX1NZU19FWElUX1BST0ZJTEUoc25hbWUpCiAjZGVmaW5lIFRSQUNFX1NZU19FWElUX1BST0ZJTEVfSU5JVChzbmFtZSkKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLwogCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUwogI2RlZmluZSBfX1NDX1NUUl9BREVDTDEodCwgYSkJCSNhCkBAIC0xMzIsNyArMTMyLDggQEAKIAogI2RlZmluZSBTWVNDQUxMX1RSQUNFX0VOVEVSX0VWRU5UKHNuYW1lKQkJCQlcCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CVwKLQlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIGV2ZW50X2VudGVyXyMjc25hbWU7CQlcCisJc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbAkJCQkJXAorCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkgZXZlbnRfZW50ZXJfIyNzbmFtZTsJCVwKIAlzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IGVudGVyX3N5c2NhbGxfcHJpbnRfIyNzbmFtZSA9IHsJXAogCQkudHJhY2UgICAgICAgICAgICAgICAgICA9IHByaW50X3N5c2NhbGxfZW50ZXIsCQlcCiAJfTsJCQkJCQkJCVwKQEAgLTE0Myw4ICsxNDQsNyBAQAogCQkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJzeXNfZW50ZXIiI3NuYW1lLAkJXAogCQkuc3lzdGVtICAgICAgICAgICAgICAgICA9ICJzeXNjYWxscyIsCQkJXAogCQkuZXZlbnQgICAgICAgICAgICAgICAgICA9ICZlbnRlcl9zeXNjYWxsX3ByaW50XyMjc25hbWUsCVwKLQkJLnJhd19pbml0CQk9IHRyYWNlX2V2ZW50X3Jhd19pbml0LAkJXAotCQkuc2hvd19mb3JtYXQJCT0gc3lzY2FsbF9lbnRlcl9mb3JtYXQsCQlcCisJCS5yYXdfaW5pdAkJPSBpbml0X3N5c2NhbGxfdHJhY2UsCQlcCiAJCS5kZWZpbmVfZmllbGRzCQk9IHN5c2NhbGxfZW50ZXJfZGVmaW5lX2ZpZWxkcywJXAogCQkucmVnZnVuYwkJPSByZWdfZXZlbnRfc3lzY2FsbF9lbnRlciwJXAogCQkudW5yZWdmdW5jCQk9IHVucmVnX2V2ZW50X3N5c2NhbGxfZW50ZXIsCVwKQEAgLTE1NCw3ICsxNTQsOCBAQAogCiAjZGVmaW5lIFNZU0NBTExfVFJBQ0VfRVhJVF9FVkVOVChzbmFtZSkJCQkJCVwKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJXAotCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgZXZlbnRfZXhpdF8jI3NuYW1lOwkJXAorCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwJCQkJCVwKKwlfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpIGV2ZW50X2V4aXRfIyNzbmFtZTsJCVwKIAlzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IGV4aXRfc3lzY2FsbF9wcmludF8jI3NuYW1lID0gewlcCiAJCS50cmFjZSAgICAgICAgICAgICAgICAgID0gcHJpbnRfc3lzY2FsbF9leGl0LAkJXAogCX07CQkJCQkJCQlcCkBAIC0xNjUsOCArMTY2LDcgQEAKIAkJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAic3lzX2V4aXQiI3NuYW1lLAkJXAogCQkuc3lzdGVtICAgICAgICAgICAgICAgICA9ICJzeXNjYWxscyIsCQkJXAogCQkuZXZlbnQgICAgICAgICAgICAgICAgICA9ICZleGl0X3N5c2NhbGxfcHJpbnRfIyNzbmFtZSwJXAotCQkucmF3X2luaXQJCT0gdHJhY2VfZXZlbnRfcmF3X2luaXQsCQlcCi0JCS5zaG93X2Zvcm1hdAkJPSBzeXNjYWxsX2V4aXRfZm9ybWF0LAkJXAorCQkucmF3X2luaXQJCT0gaW5pdF9zeXNjYWxsX3RyYWNlLAkJXAogCQkuZGVmaW5lX2ZpZWxkcwkJPSBzeXNjYWxsX2V4aXRfZGVmaW5lX2ZpZWxkcywJXAogCQkucmVnZnVuYwkJPSByZWdfZXZlbnRfc3lzY2FsbF9leGl0LAlcCiAJCS51bnJlZ2Z1bmMJCT0gdW5yZWdfZXZlbnRfc3lzY2FsbF9leGl0LAlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWV4LmggYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKaW5kZXggOTRmOGZhZS4uN2EwODJiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1leC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXguaApAQCAtMjM4LDkgKzIzOCw2IEBACiAgKiBwaGFzZS1sb2NrIGxvb3AgdmFyaWFibGVzCiAgKi8KIGV4dGVybiBpbnQgdGltZV9zdGF0dXM7CQkvKiBjbG9jayBzeW5jaHJvbml6YXRpb24gc3RhdHVzIGJpdHMgKi8KLWV4dGVybiBsb25nIHRpbWVfbWF4ZXJyb3I7CS8qIG1heGltdW0gZXJyb3IgKi8KLWV4dGVybiBsb25nIHRpbWVfZXN0ZXJyb3I7CS8qIGVzdGltYXRlZCBlcnJvciAqLwotCiBleHRlcm4gbG9uZyB0aW1lX2FkanVzdDsJLyogVGhlIGFtb3VudCBvZiBhZGp0aW1lIGxlZnQgKi8KIAogZXh0ZXJuIHZvaWQgbnRwX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaAppbmRleCBkN2FjZTFiLi4zMzJlYWVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTMzOSw2ICszMzksNyBAQAogCiAJc3RydWN0IHVzYl9kZXZtYXAgZGV2bWFwOwkvKiBkZXZpY2UgYWRkcmVzcyBhbGxvY2F0aW9uIG1hcCAqLwogCXN0cnVjdCB1c2JfZGV2aWNlICpyb290X2h1YjsJLyogUm9vdCBodWIgKi8KKwlzdHJ1Y3QgdXNiX2J1cyAqaHNfY29tcGFuaW9uOwkvKiBDb21wYW5pb24gRUhDSSBidXMsIGlmIGFueSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgYnVzX2xpc3Q7CS8qIGxpc3Qgb2YgYnVzc2VzICovCiAKIAlpbnQgYmFuZHdpZHRoX2FsbG9jYXRlZDsJLyogb24gdGhpcyBidXM6IGhvdyBtdWNoIG9mIHRoZSB0aW1lCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9hdWRpby5oIGIvaW5jbHVkZS9saW51eC91c2IvYXVkaW8uaAppbmRleCBlYWY5ZGZmLi42YmIyOTM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9hdWRpby5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2F1ZGlvLmgKQEAgLTI1LDYgKzI1LDkgQEAKICNkZWZpbmUgVVNCX1NVQkNMQVNTX0FVRElPU1RSRUFNSU5HCTB4MDIKICNkZWZpbmUgVVNCX1NVQkNMQVNTX01JRElTVFJFQU1JTkcJMHgwMwogCisjZGVmaW5lIFVBQ19WRVJTSU9OXzEJCQkweDAwCisjZGVmaW5lIFVBQ19WRVJTSU9OXzIJCQkweDIwCisKIC8qIEEuNSBBdWRpbyBDbGFzcy1TcGVjaWZpYyBBQyBJbnRlcmZhY2UgRGVzY3JpcHRvciBTdWJ0eXBlcyAqLwogI2RlZmluZSBVQUNfSEVBREVSCQkJMHgwMQogI2RlZmluZSBVQUNfSU5QVVRfVEVSTUlOQUwJCTB4MDIKQEAgLTMyLDggKzM1LDE3IEBACiAjZGVmaW5lIFVBQ19NSVhFUl9VTklUCQkJMHgwNAogI2RlZmluZSBVQUNfU0VMRUNUT1JfVU5JVAkJMHgwNQogI2RlZmluZSBVQUNfRkVBVFVSRV9VTklUCQkweDA2Ci0jZGVmaW5lIFVBQ19QUk9DRVNTSU5HX1VOSVQJCTB4MDcKLSNkZWZpbmUgVUFDX0VYVEVOU0lPTl9VTklUCQkweDA4CisjZGVmaW5lIFVBQ19QUk9DRVNTSU5HX1VOSVRfVjEJCTB4MDcKKyNkZWZpbmUgVUFDX0VYVEVOU0lPTl9VTklUX1YxCQkweDA4CisKKy8qIFVBQyB2Mi4wIHR5cGVzICovCisjZGVmaW5lIFVBQ19FRkZFQ1RfVU5JVAkJCTB4MDcKKyNkZWZpbmUgVUFDX1BST0NFU1NJTkdfVU5JVF9WMgkJMHgwOAorI2RlZmluZSBVQUNfRVhURU5TSU9OX1VOSVRfVjIJCTB4MDkKKyNkZWZpbmUgVUFDX0NMT0NLX1NPVVJDRQkJMHgwYQorI2RlZmluZSBVQUNfQ0xPQ0tfU0VMRUNUT1IJCTB4MGIKKyNkZWZpbmUgVUFDX0NMT0NLX01VTFRJUExJRVIJCTB4MGMKKyNkZWZpbmUgVUFDX1NBTVBMRV9SQVRFX0NPTlZFUlRFUgkweDBkCiAKIC8qIEEuNiBBdWRpbyBDbGFzcy1TcGVjaWZpYyBBUyBJbnRlcmZhY2UgRGVzY3JpcHRvciBTdWJ0eXBlcyAqLwogI2RlZmluZSBVQUNfQVNfR0VORVJBTAkJCTB4MDEKQEAgLTY2LDYgKzc4LDEwIEBACiAKICNkZWZpbmUgVUFDX0dFVF9TVEFUCQkJMHhmZgogCisvKiBBdWRpbyBjbGFzcyB2Mi4wIGhhbmRsZXMgYWxsIHRoZSBwYXJhbWV0ZXIgY2FsbHMgZGlmZmVyZW50bHkgKi8KKyNkZWZpbmUgVUFDMl9DU19DVVIJCQkweDAxCisjZGVmaW5lIFVBQzJfQ1NfUkFOR0UJCQkweDAyCisKIC8qIE1JREkgLSBBLjEgTVMgQ2xhc3MtU3BlY2lmaWMgSW50ZXJmYWNlIERlc2NyaXB0b3IgU3VidHlwZXMgKi8KICNkZWZpbmUgVUFDX01TX0hFQURFUgkJCTB4MDEKICNkZWZpbmUgVUFDX01JRElfSU5fSkFDSwkJMHgwMgpAQCAtODEsNyArOTcsNyBAQAogCiAvKiBUZXJtaW5hbCBDb250cm9sIFNlbGVjdG9ycyAqLwogLyogNC4zLjIgIENsYXNzLVNwZWNpZmljIEFDIEludGVyZmFjZSBEZXNjcmlwdG9yICovCi1zdHJ1Y3QgdWFjX2FjX2hlYWRlcl9kZXNjcmlwdG9yIHsKK3N0cnVjdCB1YWNfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfdjEgewogCV9fdTggIGJMZW5ndGg7CQkJLyogOCArIG4gKi8KIAlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkvKiBVU0JfRFRfQ1NfSU5URVJGQUNFICovCiAJX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOwkvKiBVQUNfTVNfSEVBREVSICovCkBAIC05NSw3ICsxMTEsNyBAQAogCiAvKiBBcyBhYm92ZSwgYnV0IG1vcmUgdXNlZnVsIGZvciBkZWZpbmluZyB5b3VyIG93biBkZXNjcmlwdG9yczogKi8KICNkZWZpbmUgREVDTEFSRV9VQUNfQUNfSEVBREVSX0RFU0NSSVBUT1IobikgCQkJXAotc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvcl8jI24gewkJCQlcCitzdHJ1Y3QgdWFjX2FjX2hlYWRlcl9kZXNjcmlwdG9yX3YxXyMjbiB7CQkJXAogCV9fdTggIGJMZW5ndGg7CQkJCQkJXAogCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCQkJCVwKIAlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CQkJCVwKQEAgLTEzMCw4ICsxNDYsMTIgQEAKICNkZWZpbmUgVUFDX0lOUFVUX1RFUk1JTkFMX01JQ1JPUEhPTkVfQVJSQVkJCTB4MjA1CiAjZGVmaW5lIFVBQ19JTlBVVF9URVJNSU5BTF9QUk9DX01JQ1JPUEhPTkVfQVJSQVkJMHgyMDYKIAorLyogVGVybWluYWxzIC0gY29udHJvbCBzZWxlY3RvcnMgKi8KKworI2RlZmluZSBVQUNfVEVSTUlOQUxfQ1NfQ09QWV9QUk9URUNUX0NPTlRST0wJCTB4MDEKKwogLyogNC4zLjIuMiBPdXRwdXQgVGVybWluYWwgRGVzY3JpcHRvciAqLwotc3RydWN0IHVhY19vdXRwdXRfdGVybWluYWxfZGVzY3JpcHRvciB7CitzdHJ1Y3QgdWFjX291dHB1dF90ZXJtaW5hbF9kZXNjcmlwdG9yX3YxIHsKIAlfX3U4ICBiTGVuZ3RoOwkJCS8qIGluIGJ5dGVzOiA5ICovCiAJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJLyogQ1NfSU5URVJGQUNFIGRlc2NyaXB0b3IgdHlwZSAqLwogCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJLyogT1VUUFVUX1RFUk1JTkFMIGRlc2NyaXB0b3Igc3VidHlwZSAqLwpAQCAtMTcxLDcgKzE5MSw3IEBACiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQogCiAvKiA0LjUuMiBDbGFzcy1TcGVjaWZpYyBBUyBJbnRlcmZhY2UgRGVzY3JpcHRvciAqLwotc3RydWN0IHVhY19hc19oZWFkZXJfZGVzY3JpcHRvciB7CitzdHJ1Y3QgdWFjX2FzX2hlYWRlcl9kZXNjcmlwdG9yX3YxIHsKIAlfX3U4ICBiTGVuZ3RoOwkJCS8qIGluIGJ5dGVzOiA3ICovCiAJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJLyogVVNCX0RUX0NTX0lOVEVSRkFDRSAqLwogCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJLyogQVNfR0VORVJBTCAqLwpAQCAtMTgwLDYgKzIwMCwxOSBAQAogCV9fbGUxNiB3Rm9ybWF0VGFnOwkJLyogVGhlIEF1ZGlvIERhdGEgRm9ybWF0ICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IHVhY19hc19oZWFkZXJfZGVzY3JpcHRvcl92MiB7CisJX191OCBiTGVuZ3RoOworCV9fdTggYkRlc2NyaXB0b3JUeXBlOworCV9fdTggYkRlc2NyaXB0b3JTdWJ0eXBlOworCV9fdTggYlRlcm1pbmFsTGluazsKKwlfX3U4IGJtQ29udHJvbHM7CisJX191OCBiRm9ybWF0VHlwZTsKKwlfX3UzMiBibUZvcm1hdHM7CisJX191OCBiTnJDaGFubmVsczsKKwlfX3UzMiBibUNoYW5uZWxDb25maWc7CisJX191OCBpQ2hhbm5lbE5hbWVzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwogI2RlZmluZSBVQUNfRFRfQVNfSEVBREVSX1NJWkUJCTcKIAogLyogRm9ybWF0cyAtIEEuMS4xIEF1ZGlvIERhdGEgRm9ybWF0IFR5cGUgSSBDb2RlcyAqLwpAQCAtMjMyLDExICsyNjUsNjIgQEAKIAogI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSV9ESVNDUkVURV9ERVNDX1NJWkUobikJKDggKyAobiAqIDMpKQogCitzdHJ1Y3QgdWFjX2Zvcm1hdF90eXBlX2lfZXh0X2Rlc2NyaXB0b3IgeworCV9fdTggYkxlbmd0aDsKKwlfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4IGJEZXNjcmlwdG9yU3VidHlwZTsKKwlfX3U4IGJTdWJzbG90U2l6ZTsKKwlfX3U4IGJGb3JtYXRUeXBlOworCV9fdTggYkJpdFJlc29sdXRpb247CisJX191OCBiSGVhZGVyTGVuZ3RoOworCV9fdTggYkNvbnRyb2xTaXplOworCV9fdTggYlNpZGVCYW5kUHJvdG9jb2w7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKy8qIEZvcm1hdHMgLSBBdWRpbyBEYXRhIEZvcm1hdCBUeXBlIEkgQ29kZXMgKi8KKworI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSUlfTVBFRwkweDEwMDEKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lJX0FDMwkweDEwMDIKKworc3RydWN0IHVhY19mb3JtYXRfdHlwZV9paV9kaXNjcmV0ZV9kZXNjcmlwdG9yIHsKKwlfX3U4IGJMZW5ndGg7CisJX191OCBiRGVzY3JpcHRvclR5cGU7CisJX191OCBiRGVzY3JpcHRvclN1YnR5cGU7CisJX191OCBiRm9ybWF0VHlwZTsKKwlfX2xlMTYgd01heEJpdFJhdGU7CisJX19sZTE2IHdTYW1wbGVzUGVyRnJhbWU7CisJX191OCBiU2FtRnJlcVR5cGU7CisJX191OCB0U2FtRnJlcVtdWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHVhY19mb3JtYXRfdHlwZV9paV9leHRfZGVzY3JpcHRvciB7CisJX191OCBiTGVuZ3RoOworCV9fdTggYkRlc2NyaXB0b3JUeXBlOworCV9fdTggYkRlc2NyaXB0b3JTdWJ0eXBlOworCV9fdTggYkZvcm1hdFR5cGU7CisJX191MTYgd01heEJpdFJhdGU7CisJX191MTYgd1NhbXBsZXNQZXJGcmFtZTsKKwlfX3U4IGJIZWFkZXJMZW5ndGg7CisJX191OCBiU2lkZUJhbmRQcm90b2NvbDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIHR5cGUgSUlJICovCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSUlfSUVDMTkzN19BQzMJMHgyMDAxCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSUlfSUVDMTkzN19NUEVHMV9MQVlFUjEJMHgyMDAyCisjZGVmaW5lIFVBQ19GT1JNQVRfVFlQRV9JSUlfSUVDMTkzN19NUEVHMl9OT0VYVAkweDIwMDMKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lJSV9JRUMxOTM3X01QRUcyX0VYVAkweDIwMDQKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lJSV9JRUMxOTM3X01QRUcyX0xBWUVSMV9MUwkweDIwMDUKKyNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0lJSV9JRUMxOTM3X01QRUcyX0xBWUVSMjNfTFMJMHgyMDA2CisKIC8qIEZvcm1hdHMgLSBBLjIgRm9ybWF0IFR5cGUgQ29kZXMgKi8KICNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX1VOREVGSU5FRAkweDAKICNkZWZpbmUgVUFDX0ZPUk1BVF9UWVBFX0kJCTB4MQogI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSUkJCTB4MgogI2RlZmluZSBVQUNfRk9STUFUX1RZUEVfSUlJCQkweDMKKyNkZWZpbmUgVUFDX0VYVF9GT1JNQVRfVFlQRV9JCQkweDgxCisjZGVmaW5lIFVBQ19FWFRfRk9STUFUX1RZUEVfSUkJCTB4ODIKKyNkZWZpbmUgVUFDX0VYVF9GT1JNQVRfVFlQRV9JSUkJCTB4ODMKIAogc3RydWN0IHVhY19pc29fZW5kcG9pbnRfZGVzY3JpcHRvciB7CiAJX191OCAgYkxlbmd0aDsJCQkvKiBpbiBieXRlczogNyAqLwpAQCAtMjUyLDcgKzMzNiwzMSBAQAogI2RlZmluZSBVQUNfRVBfQ1NfQVRUUl9QSVRDSF9DT05UUk9MCTB4MDIKICNkZWZpbmUgVUFDX0VQX0NTX0FUVFJfRklMTF9NQVgJCTB4ODAKIAorLyogQXVkaW8gY2xhc3MgdjIuMDogQ0xPQ0tfU09VUkNFIGRlc2NyaXB0b3IgKi8KKworc3RydWN0IHVhY19jbG9ja19zb3VyY2VfZGVzY3JpcHRvciB7CisJX191OCBiTGVuZ3RoOworCV9fdTggYkRlc2NyaXB0b3JUeXBlOworCV9fdTggYkRlc2NyaXB0b3JTdWJ0eXBlOworCV9fdTggYkNsb2NrSUQ7CisJX191OCBibUF0dHJpYnV0ZXM7CisJX191OCBibUNvbnRyb2xzOworCV9fdTggYkFzc29jVGVybWluYWw7CisJX191OCBpQ2xvY2tTb3VyY2U7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCiAvKiBBLjEwLjIgRmVhdHVyZSBVbml0IENvbnRyb2wgU2VsZWN0b3JzICovCisKK3N0cnVjdCB1YWNfZmVhdHVyZV91bml0X2Rlc2NyaXB0b3IgeworCV9fdTggYkxlbmd0aDsKKwlfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4IGJEZXNjcmlwdG9yU3VidHlwZTsKKwlfX3U4IGJVbml0SUQ7CisJX191OCBiU291cmNlSUQ7CisJX191OCBiQ29udHJvbFNpemU7CisJX191OCBjb250cm9sc1swXTsgLyogdmFyaWFibGUgbGVuZ3RoICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCiAjZGVmaW5lIFVBQ19GVV9DT05UUk9MX1VOREVGSU5FRAkweDAwCiAjZGVmaW5lIFVBQ19NVVRFX0NPTlRST0wJCTB4MDEKICNkZWZpbmUgVUFDX1ZPTFVNRV9DT05UUk9MCQkweDAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAppbmRleCBkNDk2MmE3Li4zNzkzZDE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKQEAgLTM1MCw2ICszNTAsNyBAQAogI2RlZmluZSBWNEwyX1BJWF9GTVRfTVBFRyAgICAgdjRsMl9mb3VyY2MoJ00nLCAnUCcsICdFJywgJ0cnKSAvKiBNUEVHLTEvMi80ICAgICovCiAKIC8qICBWZW5kb3Itc3BlY2lmaWMgZm9ybWF0cyAgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9DUElBMSAgICB2NGwyX2ZvdXJjYygnQycsICdQJywgJ0knLCAnQScpIC8qIGNwaWExIFlVViAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfV05WQSAgICAgdjRsMl9mb3VyY2MoJ1cnLCAnTicsICdWJywgJ0EnKSAvKiBXaW5ub3YgaHcgY29tcHJlc3MgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NOOUMxMFggIHY0bDJfZm91cmNjKCdTJywgJzknLCAnMScsICcwJykgLyogU045QzEweCBjb21wcmVzc2lvbiAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU045QzIwWF9JNDIwIHY0bDJfZm91cmNjKCdTJywgJzknLCAnMicsICcwJykgLyogU045QzIweCBZVVYgNDoyOjAgKi8KQEAgLTM2Miw2ICszNjMsNyBAQAogI2RlZmluZSBWNEwyX1BJWF9GTVRfU1BDQTU2MSAgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICc2JywgJzEnKSAvKiBjb21wcmVzc2VkIEdCUkcgYmF5ZXIgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1BBQzIwNyAgIHY0bDJfZm91cmNjKCdQJywgJzInLCAnMCcsICc3JykgLyogY29tcHJlc3NlZCBCR0dSIGJheWVyICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9NUjk3MzEwQSB2NGwyX2ZvdXJjYygnTScsICczJywgJzEnLCAnMCcpIC8qIGNvbXByZXNzZWQgQkdHUiBiYXllciAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU045QzIwMjggdjRsMl9mb3VyY2MoJ1MnLCAnTycsICdOJywgJ1gnKSAvKiBjb21wcmVzc2VkIEdCUkcgYmF5ZXIgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NROTA1QyAgIHY0bDJfZm91cmNjKCc5JywgJzAnLCAnNScsICdDJykgLyogY29tcHJlc3NlZCBSR0dCIGJheWVyICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9QSlBHICAgICB2NGwyX2ZvdXJjYygnUCcsICdKJywgJ1AnLCAnRycpIC8qIFBpeGFydCA3M3h4IEpQRUcgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX09WNTExICAgIHY0bDJfZm91cmNjKCdPJywgJzUnLCAnMScsICcxJykgLyogb3Y1MTEgSlBFRyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW8uaCBiL2luY2x1ZGUvbGludXgvdmlydGlvLmgKaW5kZXggMDU3YTJlMC4uZjUwOGM2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpby5oCkBAIC01MSw2ICs1MSw5IEBACiAgKglUaGlzIHJlLWVuYWJsZXMgY2FsbGJhY2tzOyBpdCByZXR1cm5zICJmYWxzZSIgaWYgdGhlcmUgYXJlIHBlbmRpbmcKICAqCWJ1ZmZlcnMgaW4gdGhlIHF1ZXVlLCB0byBkZXRlY3QgYSBwb3NzaWJsZSByYWNlIGJldHdlZW4gdGhlIGRyaXZlcgogICoJY2hlY2tpbmcgZm9yIG1vcmUgd29yaywgYW5kIGVuYWJsaW5nIGNhbGxiYWNrcy4KKyAqIEBkZXRhY2hfdW51c2VkX2J1ZjogZGV0YWNoIGZpcnN0IHVudXNlZCBidWZmZXIKKyAqIAl2cTogdGhlIHN0cnVjdCB2aXJ0cXVldWUgd2UncmUgdGFsa2luZyBhYm91dC4KKyAqIAlSZXR1cm5zIE5VTEwgb3IgdGhlICJkYXRhIiB0b2tlbiBoYW5kZWQgdG8gYWRkX2J1ZgogICoKICAqIExvY2tpbmcgcnVsZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IKICAqIGxvY2tpbmcuICBObyB0d28gb3BlcmF0aW9ucyBtYXkgYmUgaW52b2tlZCBzaW11bHRhbmVvdXNseSwgd2l0aCB0aGUgZXhjZXB0aW9uCkBAIC03MSw2ICs3NCw3IEBACiAKIAl2b2lkICgqZGlzYWJsZV9jYikoc3RydWN0IHZpcnRxdWV1ZSAqdnEpOwogCWJvb2wgKCplbmFibGVfY2IpKHN0cnVjdCB2aXJ0cXVldWUgKnZxKTsKKwl2b2lkICooKmRldGFjaF91bnVzZWRfYnVmKShzdHJ1Y3QgdmlydHF1ZXVlICp2cSk7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaAppbmRleCAxNDE4ZjA0Li5hNTBlY2QxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCkBAIC03LDYgKzcsNyBAQAogCiAvKiBUaGUgZmVhdHVyZSBiaXRtYXAgZm9yIHZpcnRpbyBiYWxsb29uICovCiAjZGVmaW5lIFZJUlRJT19CQUxMT09OX0ZfTVVTVF9URUxMX0hPU1QJMCAvKiBUZWxsIGJlZm9yZSByZWNsYWltaW5nIHBhZ2VzICovCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX0ZfU1RBVFNfVlEJMSAvKiBNZW1vcnkgU3RhdHMgdmlydHF1ZXVlICovCiAKIC8qIFNpemUgb2YgYSBQRk4gaW4gdGhlIGJhbGxvb24gaW50ZXJmYWNlLiAqLwogI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9QRk5fU0hJRlQgMTIKQEAgLTE4LDQgKzE5LDE4IEBACiAJLyogTnVtYmVyIG9mIHBhZ2VzIHdlJ3ZlIGFjdHVhbGx5IGdvdCBpbiBiYWxsb29uLiAqLwogCV9fbGUzMiBhY3R1YWw7CiB9OworCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfU1dBUF9JTiAgMCAgIC8qIEFtb3VudCBvZiBtZW1vcnkgc3dhcHBlZCBpbiAqLworI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9TX1NXQVBfT1VUIDEgICAvKiBBbW91bnQgb2YgbWVtb3J5IHN3YXBwZWQgb3V0ICovCisjZGVmaW5lIFZJUlRJT19CQUxMT09OX1NfTUFKRkxUICAgMiAgIC8qIE51bWJlciBvZiBtYWpvciBmYXVsdHMgKi8KKyNkZWZpbmUgVklSVElPX0JBTExPT05fU19NSU5GTFQgICAzICAgLyogTnVtYmVyIG9mIG1pbm9yIGZhdWx0cyAqLworI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9TX01FTUZSRUUgIDQgICAvKiBUb3RhbCBhbW91bnQgb2YgZnJlZSBtZW1vcnkgKi8KKyNkZWZpbmUgVklSVElPX0JBTExPT05fU19NRU1UT1QgICA1ICAgLyogVG90YWwgYW1vdW50IG9mIG1lbW9yeSAqLworI2RlZmluZSBWSVJUSU9fQkFMTE9PTl9TX05SICAgICAgIDYKKworc3RydWN0IHZpcnRpb19iYWxsb29uX3N0YXQgeworCXUxNiB0YWc7CisJdTY0IHZhbDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKICNlbmRpZiAvKiBfTElOVVhfVklSVElPX0JBTExPT05fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmxrLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaAppbmRleCBmZDI5NGM1Li5lNTIwMjllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaApAQCAtMTUsNiArMTUsNyBAQAogI2RlZmluZSBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUJNgkvKiBCbG9jayBzaXplIG9mIGRpc2sgaXMgYXZhaWxhYmxlKi8KICNkZWZpbmUgVklSVElPX0JMS19GX1NDU0kJNwkvKiBTdXBwb3J0cyBzY3NpIGNvbW1hbmQgcGFzc3RocnUgKi8KICNkZWZpbmUgVklSVElPX0JMS19GX0ZMVVNICTkJLyogQ2FjaGUgZmx1c2ggY29tbWFuZCBzdXBwb3J0ICovCisjZGVmaW5lIFZJUlRJT19CTEtfRl9UT1BPTE9HWQkxMAkvKiBUb3BvbG9neSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgKi8KIAogc3RydWN0IHZpcnRpb19ibGtfY29uZmlnIHsKIAkvKiBUaGUgY2FwYWNpdHkgKGluIDUxMi1ieXRlIHNlY3RvcnMpLiAqLwpAQCAtMjksOCArMzAsMjAgQEAKIAkJX191OCBoZWFkczsKIAkJX191OCBzZWN0b3JzOwogCX0gZ2VvbWV0cnk7CisKIAkvKiBibG9jayBzaXplIG9mIGRldmljZSAoaWYgVklSVElPX0JMS19GX0JMS19TSVpFKSAqLwogCV9fdTMyIGJsa19zaXplOworCisJLyogdGhlIG5leHQgNCBlbnRyaWVzIGFyZSBndWFyZGVkIGJ5IFZJUlRJT19CTEtfRl9UT1BPTE9HWSAgKi8KKwkvKiBleHBvbmVudCBmb3IgcGh5c2ljYWwgYmxvY2sgcGVyIGxvZ2ljYWwgYmxvY2suICovCisJX191OCBwaHlzaWNhbF9ibG9ja19leHA7CisJLyogYWxpZ25tZW50IG9mZnNldCBpbiBsb2dpY2FsIGJsb2Nrcy4gKi8KKwlfX3U4IGFsaWdubWVudF9vZmZzZXQ7CisJLyogbWluaW11bSBJL08gc2l6ZSB3aXRob3V0IHBlcmZvcm1hbmNlIHBlbmFsdHkgaW4gbG9naWNhbCBibG9ja3MuICovCisJX191MTYgbWluX2lvX3NpemU7CisJLyogb3B0aW1hbCBzdXN0YWluZWQgSS9PIHNpemUgaW4gbG9naWNhbCBibG9ja3MuICovCisJX191MzIgb3B0X2lvX3NpemU7CisKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKaW5kZXggZmU4ODUxNy4uYWU0ZjAzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaApAQCAtMywxOSArMyw0NSBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KLS8qIFRoaXMgaGVhZGVyLCBleGNsdWRpbmcgdGhlICNpZmRlZiBfX0tFUk5FTF9fIHBhcnQsIGlzIEJTRCBsaWNlbnNlZCBzbwotICogYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudCBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4gKi8KKy8qCisgKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KKyAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuCisgKgorICogQ29weXJpZ2h0IChDKSBSZWQgSGF0LCBJbmMuLCAyMDA5LCAyMDEwCisgKi8KIAogLyogRmVhdHVyZSBiaXRzICovCiAjZGVmaW5lIFZJUlRJT19DT05TT0xFX0ZfU0laRQkwCS8qIERvZXMgaG9zdCBwcm92aWRlIGNvbnNvbGUgc2l6ZT8gKi8KKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfRl9NVUxUSVBPUlQgMQkvKiBEb2VzIGhvc3QgcHJvdmlkZSBtdWx0aXBsZSBwb3J0cz8gKi8KIAogc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZyB7CiAJLyogY29sdW1zIG9mIHRoZSBzY3JlZW5zICovCiAJX191MTYgY29sczsKIAkvKiByb3dzIG9mIHRoZSBzY3JlZW5zICovCiAJX191MTYgcm93czsKKwkvKiBtYXguIG51bWJlciBvZiBwb3J0cyB0aGlzIGRldmljZSBjYW4gaG9sZCAqLworCV9fdTMyIG1heF9ucl9wb3J0czsKKwkvKiBudW1iZXIgb2YgcG9ydHMgYWRkZWQgc28gZmFyICovCisJX191MzIgbnJfcG9ydHM7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCisvKgorICogQSBtZXNzYWdlIHRoYXQncyBwYXNzZWQgYmV0d2VlbiB0aGUgSG9zdCBhbmQgdGhlIEd1ZXN0IGZvciBhCisgKiBwYXJ0aWN1bGFyIHBvcnQuCisgKi8KK3N0cnVjdCB2aXJ0aW9fY29uc29sZV9jb250cm9sIHsKKwlfX3UzMiBpZDsJCS8qIFBvcnQgbnVtYmVyICovCisJX191MTYgZXZlbnQ7CQkvKiBUaGUga2luZCBvZiBjb250cm9sIGV2ZW50IChzZWUgYmVsb3cpICovCisJX191MTYgdmFsdWU7CQkvKiBFeHRyYSBpbmZvcm1hdGlvbiBmb3IgdGhlIGtleSAqLworfTsKKworLyogU29tZSBldmVudHMgZm9yIGNvbnRyb2wgbWVzc2FnZXMgKi8KKyNkZWZpbmUgVklSVElPX0NPTlNPTEVfUE9SVF9SRUFEWQkwCisjZGVmaW5lIFZJUlRJT19DT05TT0xFX0NPTlNPTEVfUE9SVAkxCisjZGVmaW5lIFZJUlRJT19DT05TT0xFX1JFU0laRQkJMgorI2RlZmluZSBWSVJUSU9fQ09OU09MRV9QT1JUX09QRU4JMworI2RlZmluZSBWSVJUSU9fQ09OU09MRV9QT1JUX05BTUUJNAorI2RlZmluZSBWSVJUSU9fQ09OU09MRV9QT1JUX1JFTU9WRQk1CiAKICNpZmRlZiBfX0tFUk5FTF9fCiBpbnQgX19pbml0IHZpcnRpb19jb25zX2Vhcmx5X2luaXQoaW50ICgqcHV0X2NoYXJzKSh1MzIsIGNvbnN0IGNoYXIgKiwgaW50KSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2RhdmluY2kvaXNpZi5oIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL2lzaWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGI3NGFkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL2lzaWYuaApAQCAtMCwwICsxLDUzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiBpc2lmIGhlYWRlciBmaWxlCisgKi8KKyNpZm5kZWYgX0lTSUZfSAorI2RlZmluZSBfSVNJRl9ICisKKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL2NjZGNfdHlwZXMuaD4KKyNpbmNsdWRlIDxtZWRpYS9kYXZpbmNpL3ZwZmVfdHlwZXMuaD4KKworLyogaXNpZiBmbG9hdCB0eXBlIFM4UTgvVThROCAqLworc3RydWN0IGlzaWZfZmxvYXRfOCB7CisJLyogOCBiaXQgaW50ZWdlciBwYXJ0ICovCisJX191OCBpbnRlZ2VyOworCS8qIDggYml0IGRlY2ltYWwgcGFydCAqLworCV9fdTggZGVjaW1hbDsKK307CisKKy8qIGlzaWYgZmxvYXQgdHlwZSBVMTZRMTYvUzE2UTE2ICovCitzdHJ1Y3QgaXNpZl9mbG9hdF8xNiB7CisJLyogMTYgYml0IGludGVnZXIgcGFydCAqLworCV9fdTE2IGludGVnZXI7CisJLyogMTYgYml0IGRlY2ltYWwgcGFydCAqLworCV9fdTE2IGRlY2ltYWw7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIFZlcnRpY2FsIERlZmVjdCBDb3JyZWN0aW9uIHBhcmFtZXRlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlZmVjdCBDb3JyZWN0aW9uIChERkMpIHRhYmxlIGVudHJ5ICovCitzdHJ1Y3QgaXNpZl92ZGZjX2VudHJ5IHsKKwkvKiB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiBkZWZlY3QgKi8KKwlfX3UxNiBwb3NfdmVydDsKKwkvKiBob3Jpem9udGFsIHBvc2l0aW9uIG9mIGRlZmVjdCAqLworCV9fdTE2IHBvc19ob3J6OworCS8qCisJICogRGVmZWN0IGxldmVsIG9mIFZlcnRpY2FsIGxpbmUgZGVmZWN0IHBvc2l0aW9uLiBUaGlzIGlzIHN1YnRyYWN0ZWQKKwkgKiBmcm9tIHRoZSBkYXRhIGF0IHRoZSBkZWZlY3QgcG9zaXRpb24KKwkgKi8KKwlfX3U4IGxldmVsX2F0X3BvczsKKwkvKgorCSAqIERlZmVjdCBsZXZlbCBvZiB0aGUgcGl4ZWxzIHVwcGVyIHRoYW4gdGhlIHZlcnRpY2FsIGxpbmUgZGVmZWN0LgorCSAqIFRoaXMgaXMgc3VidHJhY3RlZCBmcm9tIHRoZSBkYXRhCisJICovCisJX191OCBsZXZlbF91cF9waXhlbHM7CisJLyoKKwkgKiBEZWZlY3QgbGV2ZWwgb2YgdGhlIHBpeGVscyBsb3dlciB0aGFuIHRoZSB2ZXJ0aWNhbCBsaW5lIGRlZmVjdC4KKwkgKiBUaGlzIGlzIHN1YnRyYWN0ZWQgZnJvbSB0aGUgZGF0YQorCSAqLworCV9fdTggbGV2ZWxfbG93X3BpeGVsczsKK307CisKKyNkZWZpbmUgSVNJRl9WREZDX1RBQkxFX1NJWkUJCTgKK3N0cnVjdCBpc2lmX2RmYyB7CisJLyogZW5hYmxlIHZlcnRpY2FsIGRlZmVjdCBjb3JyZWN0aW9uICovCisJX191OCBlbjsKKwkvKiBEZWZlY3QgbGV2ZWwgc3VidHJhY3Rpb24uIEp1c3QgZmVkIHRocm91Z2ggaWYgc2F0dXJhdGluZyAqLworI2RlZmluZQlJU0lGX1ZERkNfTk9STUFMCQkwCisJLyoKKwkgKiBEZWZlY3QgbGV2ZWwgc3VidHJhY3Rpb24uIEhvcml6b250YWwgaW50ZXJwb2xhdGlvbiAoKGktMikrKGkrMikpLzIKKwkgKiBpZiBkYXRhIHNhdHVyYXRpbmcKKwkgKi8KKyNkZWZpbmUgSVNJRl9WREZDX0hPUlpfSU5URVJQT0xfSUZfU0FUCTEKKwkvKiBIb3Jpem9udGFsIGludGVycG9sYXRpb24gKCgoaS0yKSsoaSsyKSkvMikgKi8KKyNkZWZpbmUJSVNJRl9WREZDX0hPUlpfSU5URVJQT0wJCTIKKwkvKiBvbmUgb2YgdGhlIHZlcnRpY2FsIGRlZmVjdCBjb3JyZWN0aW9uIG1vZGVzIGFib3ZlICovCisJX191OCBjb3JyX21vZGU7CisJLyogMCAtIHdob2xlIGxpbmUgY29ycmVjdGVkLCAxIC0gbm90IHBpeGVscyB1cHBlciB0aGFuIHRoZSBkZWZlY3QgKi8KKwlfX3U4IGNvcnJfd2hvbGVfbGluZTsKKyNkZWZpbmUgSVNJRl9WREZDX05PX1NISUZUCQkwCisjZGVmaW5lIElTSUZfVkRGQ19TSElGVF8xCQkxCisjZGVmaW5lIElTSUZfVkRGQ19TSElGVF8yCQkyCisjZGVmaW5lIElTSUZfVkRGQ19TSElGVF8zCQkzCisjZGVmaW5lIElTSUZfVkRGQ19TSElGVF80CQk0CisJLyoKKwkgKiBkZWZlY3QgbGV2ZWwgc2hpZnQgdmFsdWUuIGxldmVsX2F0X3BvcywgbGV2ZWxfdXBwZXJfcG9zLAorCSAqIGFuZCBsZXZlbF9sb3dlcl9wb3MgY2FuIGJlIHNoaWZ0ZWQgdXAgYnkgdGhpcyB2YWx1ZS4gQ2hvb3NlCisJICogb25lIG9mIHRoZSB2YWx1ZXMgYWJvdmUKKwkgKi8KKwlfX3U4IGRlZl9sZXZlbF9zaGlmdDsKKwkvKiBkZWZlY3Qgc2F0dXJhdGlvbiBsZXZlbCAqLworCV9fdTE2IGRlZl9zYXRfbGV2ZWw7CisJLyogbnVtYmVyIG9mIHZlcnRpY2FsIGRlZmVjdHMuIE1heCBpcyBJU0lGX1ZERkNfVEFCTEVfU0laRSAqLworCV9fdTE2IG51bV92ZGVmZWN0czsKKwkvKiBWREZDIHRhYmxlIHB0ciAqLworCXN0cnVjdCBpc2lmX3ZkZmNfZW50cnkgdGFibGVbSVNJRl9WREZDX1RBQkxFX1NJWkVdOworfTsKKworc3RydWN0IGlzaWZfaG9yel9iY2xhbXAgeworCisJLyogSG9yaXpvbnRhbCBjbGFtcCBkaXNhYmxlZC4gT25seSB2ZXJ0aWNhbCBjbGFtcCB2YWx1ZSBpcyBzdWJ0cmFjdGVkICovCisjZGVmaW5lCUlTSUZfSE9SWl9CQ19ESVNBQkxFCQkwCisJLyoKKwkgKiBIb3Jpem9udGFsIGNsYW1wIHZhbHVlIGlzIGNhbGN1bGF0ZWQgYW5kIHN1YnRyYWN0ZWQgZnJvbSBpbWFnZSBkYXRhCisJICogYWxvbmcgd2l0aCB2ZXJ0aWNhbCBjbGFtcCB2YWx1ZQorCSAqLworI2RlZmluZSBJU0lGX0hPUlpfQkNfQ0xBTVBfQ0FMQ19FTkFCTEVECTEKKwkvKgorCSAqIEhvcml6b250YWwgY2xhbXAgdmFsdWUgY2FsY3VsYXRlZCBmcm9tIHByZXZpb3VzIGltYWdlIGlzIHN1YnRyYWN0ZWQKKwkgKiBmcm9tIGltYWdlIGRhdGEgYWxvbmcgd2l0aCB2ZXJ0aWNhbCBjbGFtcCB2YWx1ZS4KKwkgKi8KKyNkZWZpbmUgSVNJRl9IT1JaX0JDX0NMQU1QX05PVF9VUERBVEVECTIKKwkvKiBob3Jpem9udGFsIGNsYW1wIG1vZGUuIE9uZSBvZiB0aGUgdmFsdWVzIGFib3ZlICovCisJX191OCBtb2RlOworCS8qCisJICogcGl4ZWwgdmFsdWUgbGltaXQgZW5hYmxlLgorCSAqICAwIC0gbGltaXQgZGlzYWJsZWQKKwkgKiAgMSAtIHBpeGVsIHZhbHVlIGxpbWl0ZWQgdG8gMTAyMworCSAqLworCV9fdTggY2xhbXBfcGl4X2xpbWl0OworCS8qIFNlbGVjdCBNb3N0IGxlZnQgd2luZG93IGZvciBiYyBjYWxjdWxhdGlvbiAqLworI2RlZmluZQlJU0lGX1NFTF9NT1NUX0xFRlRfV0lOCQkwCisJLyogU2VsZWN0IE1vc3QgcmlnaHQgd2luZG93IGZvciBiYyBjYWxjdWxhdGlvbiAqLworI2RlZmluZSBJU0lGX1NFTF9NT1NUX1JJR0hUX1dJTgkJMQorCS8qIFNlbGVjdCBtb3N0IGxlZnQgb3IgcmlnaHQgd2luZG93IGZvciBjbGFtcCB2YWwgY2FsY3VsYXRpb24gKi8KKwlfX3U4IGJhc2Vfd2luX3NlbF9jYWxjOworCS8qIFdpbmRvdyBjb3VudCBwZXIgY29sb3IgZm9yIGNhbGN1bGF0aW9uLiByYW5nZSAxLTMyICovCisJX191OCB3aW5fY291bnRfY2FsYzsKKwkvKiBXaW5kb3cgc3RhcnQgcG9zaXRpb24gLSBob3Jpem9udGFsIGZvciBjYWxjdWxhdGlvbi4gMCAtIDgxOTEgKi8KKwlfX3UxNiB3aW5fc3RhcnRfaF9jYWxjOworCS8qIFdpbmRvdyBzdGFydCBwb3NpdGlvbiAtIHZlcnRpY2FsIGZvciBjYWxjdWxhdGlvbiAwIC0gODE5MSAqLworCV9fdTE2IHdpbl9zdGFydF92X2NhbGM7CisjZGVmaW5lIElTSUZfSE9SWl9CQ19TWl9IXzJQSVhFTFMJMAorI2RlZmluZSBJU0lGX0hPUlpfQkNfU1pfSF80UElYRUxTCTEKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX1NaX0hfOFBJWEVMUwkyCisjZGVmaW5lIElTSUZfSE9SWl9CQ19TWl9IXzE2UElYRUxTCTMKKwkvKiBXaWR0aCBvZiB0aGUgc2FtcGxlIHdpbmRvdyBpbiBwaXhlbHMgZm9yIGNhbGN1bGF0aW9uICovCisJX191OCB3aW5faF9zel9jYWxjOworI2RlZmluZSBJU0lGX0hPUlpfQkNfU1pfVl8zMlBJWEVMUwkwCisjZGVmaW5lIElTSUZfSE9SWl9CQ19TWl9WXzY0UElYRUxTCTEKKyNkZWZpbmUJSVNJRl9IT1JaX0JDX1NaX1ZfMTI4UElYRUxTCTIKKyNkZWZpbmUgSVNJRl9IT1JaX0JDX1NaX1ZfMjU2UElYRUxTCTMKKwkvKiBIZWlnaHQgb2YgdGhlIHNhbXBsZSB3aW5kb3cgaW4gcGl4ZWxzIGZvciBjYWxjdWxhdGlvbiAqLworCV9fdTggd2luX3Zfc3pfY2FsYzsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBCbGFjayBDbGFtcCBwYXJhbWV0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgaXNpZl92ZXJ0X2JjbGFtcCB7CisJLyogUmVzZXQgdmFsdWUgdXNlZCBpcyB0aGUgY2xhbXAgdmFsdWUgY2FsY3VsYXRlZCAqLworI2RlZmluZQlJU0lGX1ZFUlRfQkNfVVNFX0hPUlpfQ0xBTVBfVkFMCQkwCisJLyogUmVzZXQgdmFsdWUgdXNlZCBpcyByZXNldF9jbGFtcF92YWwgY29uZmlndXJlZCAqLworI2RlZmluZQlJU0lGX1ZFUlRfQkNfVVNFX0NPTkZJR19DTEFNUF9WQUwJMQorCS8qIE5vIHVwZGF0ZSwgcHJldmlvdXMgaW1hZ2UgdmFsdWUgaXMgdXNlZCAqLworI2RlZmluZQlJU0lGX1ZFUlRfQkNfTk9fVVBEQVRFCQkJMgorCS8qCisJICogUmVzZXQgdmFsdWUgc2VsZWN0b3IgZm9yIHZlcnRpY2FsIGNsYW1wIGNhbGN1bGF0aW9uLiBVc2Ugb25lIG9mCisJICogdGhlIGFib3ZlIHZhbHVlcworCSAqLworCV9fdTggcmVzZXRfdmFsX3NlbDsKKwkvKiBVOFE4LiBMaW5lIGF2ZXJhZ2UgY29lZmZpY2llbnQgdXNlZCBpbiB2ZXJ0aWNhbCBjbGFtcCBjYWxjdWxhdGlvbiAqLworCV9fdTggbGluZV9hdmVfY29lZjsKKwkvKiBIZWlnaHQgb2YgdGhlIG9wdGljYWwgYmxhY2sgcmVnaW9uIGZvciBjYWxjdWxhdGlvbiAqLworCV9fdTE2IG9iX3Zfc3pfY2FsYzsKKwkvKiBPcHRpY2FsIGJsYWNrIHJlZ2lvbiBzdGFydCBwb3NpdGlvbiAtIGhvcml6b250YWwuIDAgLSA4MTkxICovCisJX191MTYgb2Jfc3RhcnRfaDsKKwkvKiBPcHRpY2FsIGJsYWNrIHJlZ2lvbiBzdGFydCBwb3NpdGlvbiAtIHZlcnRpY2FsIDAgLSA4MTkxICovCisJX191MTYgb2Jfc3RhcnRfdjsKK307CisKK3N0cnVjdCBpc2lmX2JsYWNrX2NsYW1wIHsKKwkvKgorCSAqIFRoaXMgb2Zmc2V0IHZhbHVlIGlzIGFkZGVkIGlycmVzcGVjdGl2ZSBvZiB0aGUgY2xhbXAgZW5hYmxlIHN0YXR1cy4KKwkgKiBTMTMKKwkgKi8KKwlfX3UxNiBkY19vZmZzZXQ7CisJLyoKKwkgKiBFbmFibGUgYmxhY2svZGlnaXRhbCBjbGFtcCB2YWx1ZSB0byBiZSBzdWJ0cmFjdGVkIGZyb20gdGhlIGltYWdlIGRhdGEKKwkgKi8KKwlfX3U4IGVuOworCS8qCisJICogYmxhY2sgY2xhbXAgbW9kZS4gc2FtZS9zZXBhcmF0ZSBjbGFtcCBmb3IgNCBjb2xvcnMKKwkgKiAwIC0gZGlzYWJsZSAtIHNhbWUgY2xhbXAgdmFsdWUgZm9yIGFsbCBjb2xvcnMKKwkgKiAxIC0gY2xhbXAgdmFsdWUgY2FsY3VsYXRlZCBzZXBhcmF0ZWx5IGZvciBhbGwgY29sb3JzCisJICovCisJX191OCBiY19tb2RlX2NvbG9yOworCS8qIFZydGljYWwgc3RhcnQgcG9zaXRpb24gZm9yIGJjIHN1YnRyYWN0aW9uICovCisJX191MTYgdmVydF9zdGFydF9zdWI7CisJLyogQmxhY2sgY2xhbXAgZm9yIGhvcml6b250YWwgZGlyZWN0aW9uICovCisJc3RydWN0IGlzaWZfaG9yel9iY2xhbXAgaG9yejsKKwkvKiBCbGFjayBjbGFtcCBmb3IgdmVydGljYWwgZGlyZWN0aW9uICovCisJc3RydWN0IGlzaWZfdmVydF9iY2xhbXAgdmVydDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiBDb2xvciBTcGFjZSBDb252ZXJ0aW9uIChDU0MpCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBJU0lGX0NTQ19OVU1fQ09FRkYJMTYKK3N0cnVjdCBpc2lmX2NvbG9yX3NwYWNlX2NvbnYgeworCS8qIEVuYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uICovCisJX191OCBlbjsKKwkvKgorCSAqIGNzYyBjb2VmZmllbnQgdGFibGUuIFM4UTUsIE0wMCBhdCBpbmRleCAwLCBNMDEgYXQgaW5kZXggMSwgYW5kCisJICogc28gZm9ydGgKKwkgKi8KKwlzdHJ1Y3QgaXNpZl9mbG9hdF84IGNvZWZmW0lTSUZfQ1NDX05VTV9DT0VGRl07Cit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiAgQmxhY2sgIENvbXBlbnNhdGlvbiBwYXJhbWV0ZXJzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGlzaWZfYmxhY2tfY29tcCB7CisJLyogQ29tcCBmb3IgUmVkICovCisJX19zOCByX2NvbXA7CisJLyogQ29tcCBmb3IgR3IgKi8KKwlfX3M4IGdyX2NvbXA7CisJLyogQ29tcCBmb3IgQmx1ZSAqLworCV9fczggYl9jb21wOworCS8qIENvbXAgZm9yIEdiICovCisJX19zOCBnYl9jb21wOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqICBHYWluIHBhcmFtZXRlcnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgaXNpZl9nYWluIHsKKwkvKiBHYWluIGZvciBSZWQgb3IgeWUgKi8KKwlzdHJ1Y3QgaXNpZl9mbG9hdF8xNiByX3llOworCS8qIEdhaW4gZm9yIEdyIG9yIGN5ICovCisJc3RydWN0IGlzaWZfZmxvYXRfMTYgZ3JfY3k7CisJLyogR2FpbiBmb3IgR2Igb3IgZyAqLworCXN0cnVjdCBpc2lmX2Zsb2F0XzE2IGdiX2c7CisJLyogR2FpbiBmb3IgQmx1ZSBvciBtZyAqLworCXN0cnVjdCBpc2lmX2Zsb2F0XzE2IGJfbWc7Cit9OworCisjZGVmaW5lIElTSUZfTElORUFSX1RBQl9TSVpFCTE5MgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqICBMaW5lYXJpemF0aW9uIHBhcmFtZXRlcnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgaXNpZl9saW5lYXJpemUgeworCS8qIEVuYWJsZSBvciBEaXNhYmxlIGxpbmVhcml6YXRpb24gb2YgZGF0YSAqLworCV9fdTggZW47CisJLyogU2hpZnQgdmFsdWUgYXBwbGllZCAqLworCV9fdTggY29ycl9zaGZ0OworCS8qIHNjYWxlIGZhY3RvciBhcHBsaWVkIFUxMVExMCAqLworCXN0cnVjdCBpc2lmX2Zsb2F0XzE2IHNjYWxlX2ZhY3Q7CisJLyogU2l6ZSBvZiB0aGUgbGluZWFyIHRhYmxlICovCisJX191MTYgdGFibGVbSVNJRl9MSU5FQVJfVEFCX1NJWkVdOworfTsKKworLyogQ29sb3IgcGF0dGVybnMgKi8KKyNkZWZpbmUgSVNJRl9SRUQJMAorI2RlZmluZQlJU0lGX0dSRUVOX1JFRAkxCisjZGVmaW5lIElTSUZfR1JFRU5fQkxVRQkyCisjZGVmaW5lIElTSUZfQkxVRQkzCitzdHJ1Y3QgaXNpZl9jb2xfcGF0IHsKKwlfX3U4IG9sb3A7CisJX191OCBvbGVwOworCV9fdTggZWxvcDsKKwlfX3U4IGVsZXA7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogIERhdGEgZm9ybWF0dGVyIHBhcmFtZXRlcnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgaXNpZl9mbXRwbGVuIHsKKwkvKgorCSAqIG51bWJlciBvZiBwcm9ncmFtIGVudHJpZXMgZm9yIFNFVDAsIHJhbmdlIDEgLSAxNgorCSAqIHdoZW4gZm10bW9kZSBpcyBJU0lGX1NQTElULCAxIC0gOCB3aGVuIGZtdG1vZGUgaXMKKwkgKiBJU0lGX0NPTUJJTkUKKwkgKi8KKwlfX3UxNiBwbGVuMDsKKwkvKgorCSAqIG51bWJlciBvZiBwcm9ncmFtIGVudHJpZXMgZm9yIFNFVDEsIHJhbmdlIDEgLSAxNgorCSAqIHdoZW4gZm10bW9kZSBpcyBJU0lGX1NQTElULCAxIC0gOCB3aGVuIGZtdG1vZGUgaXMKKwkgKiBJU0lGX0NPTUJJTkUKKwkgKi8KKwlfX3UxNiBwbGVuMTsKKwkvKioKKwkgKiBudW1iZXIgb2YgcHJvZ3JhbSBlbnRyaWVzIGZvciBTRVQyLCByYW5nZSAxIC0gMTYKKwkgKiB3aGVuIGZtdG1vZGUgaXMgSVNJRl9TUExJVCwgMSAtIDggd2hlbiBmbXRtb2RlIGlzCisJICogSVNJRl9DT01CSU5FCisJICovCisJX191MTYgcGxlbjI7CisJLyoqCisJICogbnVtYmVyIG9mIHByb2dyYW0gZW50cmllcyBmb3IgU0VUMywgcmFuZ2UgMSAtIDE2CisJICogd2hlbiBmbXRtb2RlIGlzIElTSUZfU1BMSVQsIDEgLSA4IHdoZW4gZm10bW9kZSBpcworCSAqIElTSUZfQ09NQklORQorCSAqLworCV9fdTE2IHBsZW4zOworfTsKKworc3RydWN0IGlzaWZfZm10X2NmZyB7CisjZGVmaW5lIElTSUZfU1BMSVQJCTAKKyNkZWZpbmUgSVNJRl9DT01CSU5FCQkxCisJLyogU3BsaXQgb3IgY29tYmluZSBvciBsaW5lIGFsdGVybmF0ZSAqLworCV9fdTggZm10bW9kZTsKKwkvKiBlbmFibGUgb3IgZGlzYWJsZSBsaW5lIGFsdGVybmF0aW5nIG1vZGUgKi8KKwlfX3U4IGxuX2FsdGVyX2VuOworI2RlZmluZSBJU0lGXzFMSU5FCQkwCisjZGVmaW5lCUlTSUZfMkxJTkVTCQkxCisjZGVmaW5lCUlTSUZfM0xJTkVTCQkyCisjZGVmaW5lCUlTSUZfNExJTkVTCQkzCisJLyogU3BsaXQvY29tYmluZSBsaW5lIG51bWJlciAqLworCV9fdTggbG51bTsKKwkvKiBBZGRyZXNzIGluY3JlbWVudCBSYW5nZSAxIC0gMTYgKi8KKwlfX3U4IGFkZHJpbmM7Cit9OworCitzdHJ1Y3QgaXNpZl9mbXRfYWRkcl9wdHIgeworCS8qIEluaXRpYWwgYWRkcmVzcyAqLworCV9fdTMyIGluaXRfYWRkcjsKKwkvKiBvdXRwdXQgbGluZSBudW1iZXIgKi8KKyNkZWZpbmUgSVNJRl8xU1RMSU5FCQkwCisjZGVmaW5lCUlTSUZfMk5ETElORQkJMQorI2RlZmluZQlJU0lGXzNSRExJTkUJCTIKKyNkZWZpbmUJSVNJRl80VEhMSU5FCQkzCisJX191OCBvdXRfbGluZTsKK307CisKK3N0cnVjdCBpc2lmX2ZtdHBnbV9hcCB7CisJLyogcHJvZ3JhbSBhZGRyZXNzIHBvaW50ZXIgKi8KKwlfX3U4IHBnbV9hcHRyOworCS8qIHByb2dyYW0gYWRkcmVzcyBpbmNyZW1lbnQgb3IgZGVjcmVtZW50ICovCisJX191OCBwZ211cGR0OworfTsKKworc3RydWN0IGlzaWZfZGF0YV9mb3JtYXR0ZXIgeworCS8qIEVuYWJsZS9EaXNhYmxlIGRhdGEgZm9ybWF0dGVyICovCisJX191OCBlbjsKKwkvKiBkYXRhIGZvcm1hdHRlciBjb25maWd1cmF0aW9uICovCisJc3RydWN0IGlzaWZfZm10X2NmZyBjZmc7CisJLyogRm9ybWF0dGVyIHByb2dyYW0gZW50cmllcyBsZW5ndGggKi8KKwlzdHJ1Y3QgaXNpZl9mbXRwbGVuIHBsZW47CisJLyogZmlyc3QgcGl4ZWwgaW4gYSBsaW5lIGZlZCB0byBmb3JtYXR0ZXIgKi8KKwlfX3UxNiBmbXRybGVuOworCS8qIEhEIGludGVydmFsIGZvciBvdXRwdXQgbGluZS4gT25seSB2YWxpZCB3aGVuIHNwbGl0IGxpbmUgKi8KKwlfX3UxNiBmbXRoY250OworCS8qIGZvcm1hdHRlciBhZGRyZXNzIHBvaW50ZXJzICovCisJc3RydWN0IGlzaWZfZm10X2FkZHJfcHRyIGZtdGFkZHJfcHRyWzE2XTsKKwkvKiBwcm9ncmFtIGVuYWJsZS9kaXNhYmxlICovCisJX191OCBwZ21fZW5bMzJdOworCS8qIHByb2dyYW0gYWRkcmVzcyBwb2ludGVycyAqLworCXN0cnVjdCBpc2lmX2ZtdHBnbV9hcCBmbXRwZ21fYXBbMzJdOworfTsKKworc3RydWN0IGlzaWZfZGZfY3NjIHsKKwkvKiBDb2xvciBTcGFjZSBDb252ZXJzaW9uIGNvbmZndXJhdGlvbiwgMCAtIGNzYywgMSAtIGRmICovCisJX191OCBkZl9vcl9jc2M7CisJLyogY3NjIGNvbmZpZ3VyYXRpb24gdmFsaWQgaWYgZGZfb3JfY3NjIGlzIDAgKi8KKwlzdHJ1Y3QgaXNpZl9jb2xvcl9zcGFjZV9jb252IGNzYzsKKwkvKiBkYXRhIGZvcm1hdHRlciBjb25maWd1cmF0aW9uIHZhbGlkIGlmIGRmX29yX2NzYyBpcyAxICovCisJc3RydWN0IGlzaWZfZGF0YV9mb3JtYXR0ZXIgZGY7CisJLyogc3RhcnQgcGl4ZWwgaW4gYSBsaW5lIGF0IHRoZSBpbnB1dCAqLworCV9fdTMyIHN0YXJ0X3BpeDsKKwkvKiBudW1iZXIgb2YgcGl4ZWxzIGluIGlucHV0IGxpbmUgKi8KKwlfX3UzMiBudW1fcGl4ZWxzOworCS8qIHN0YXJ0IGxpbmUgYXQgdGhlIGlucHV0ICovCisJX191MzIgc3RhcnRfbGluZTsKKwkvKiBudW1iZXIgb2YgbGluZXMgYXQgdGhlIGlucHV0ICovCisJX191MzIgbnVtX2xpbmVzOworfTsKKworc3RydWN0IGlzaWZfZ2Fpbl9vZmZzZXRzX2FkaiB7CisJLyogR2FpbiBhZGp1c3RtZW50IHBlciBjb2xvciAqLworCXN0cnVjdCBpc2lmX2dhaW4gZ2FpbjsKKwkvKiBPZmZzZXQgYWRqdXN0bWVudCAqLworCV9fdTE2IG9mZnNldDsKKwkvKiBFbmFibGUgb3IgRGlzYWJsZSBHYWluIGFkanVzdG1lbnQgZm9yIFNEUkFNIGRhdGEgKi8KKwlfX3U4IGdhaW5fc2RyYW1fZW47CisJLyogRW5hYmxlIG9yIERpc2FibGUgR2FpbiBhZGp1c3RtZW50IGZvciBJUElQRSBkYXRhICovCisJX191OCBnYWluX2lwaXBlX2VuOworCS8qIEVuYWJsZSBvciBEaXNhYmxlIEdhaW4gYWRqdXN0bWVudCBmb3IgSDNBIGRhdGEgKi8KKwlfX3U4IGdhaW5faDNhX2VuOworCS8qIEVuYWJsZSBvciBEaXNhYmxlIEdhaW4gYWRqdXN0bWVudCBmb3IgU0RSQU0gZGF0YSAqLworCV9fdTggb2Zmc2V0X3NkcmFtX2VuOworCS8qIEVuYWJsZSBvciBEaXNhYmxlIEdhaW4gYWRqdXN0bWVudCBmb3IgSVBJUEUgZGF0YSAqLworCV9fdTggb2Zmc2V0X2lwaXBlX2VuOworCS8qIEVuYWJsZSBvciBEaXNhYmxlIEdhaW4gYWRqdXN0bWVudCBmb3IgSDNBIGRhdGEgKi8KKwlfX3U4IG9mZnNldF9oM2FfZW47Cit9OworCitzdHJ1Y3QgaXNpZl9jdWwgeworCS8qIEhvcml6b250YWwgQ3VsbCBwYXR0ZXJuIGZvciBvZGQgbGluZXMgKi8KKwlfX3U4IGhjcGF0X29kZDsKKwkvKiBIb3Jpem9udGFsIEN1bGwgcGF0dGVybiBmb3IgZXZlbiBsaW5lcyAqLworCV9fdTggaGNwYXRfZXZlbjsKKwkvKiBWZXJ0aWNhbCBDdWxsIHBhdHRlcm4gKi8KKwlfX3U4IHZjcGF0OworCS8qIEVuYWJsZSBvciBkaXNhYmxlIGxwZi4gQXBwbHkgd2hlbiBjdWxsIGlzIGVuYWJsZWQgKi8KKwlfX3U4IGVuX2xwZjsKK307CisKK3N0cnVjdCBpc2lmX2NvbXByZXNzIHsKKyNkZWZpbmUgSVNJRl9BTEFXCQkwCisjZGVmaW5lIElTSUZfRFBDTQkJMQorI2RlZmluZSBJU0lGX05PX0NPTVBSRVNTSU9OCTIKKwkvKiBDb21wcmVzc2lvbiBBbGdvcml0aG0gdXNlZCAqLworCV9fdTggYWxnOworCS8qIENob29zZSBQcmVkaWN0b3IxIGZvciBEUENNIGNvbXByZXNzaW9uICovCisjZGVmaW5lIElTSUZfRFBDTV9QUkVEMQkJMAorCS8qIENob29zZSBQcmVkaWN0b3IyIGZvciBEUENNIGNvbXByZXNzaW9uICovCisjZGVmaW5lIElTSUZfRFBDTV9QUkVEMgkJMQorCS8qIFByZWRpY3RvciBmb3IgRFBDTSBjb21wcmVzc2lvbiAqLworCV9fdTggcHJlZDsKK307CisKKy8qIGFsbCB0aGUgc3R1ZmYgaW4gdGhpcyBzdHJ1Y3Qgd2lsbCBiZSBwcm92aWRlZCBieSB1c2VybGFuZCAqLworc3RydWN0IGlzaWZfY29uZmlnX3BhcmFtc19yYXcgeworCS8qIExpbmVhcml6YXRpb24gcGFyYW1ldGVycyBmb3IgaW1hZ2Ugc2Vuc29yIGRhdGEgaW5wdXQgKi8KKwlzdHJ1Y3QgaXNpZl9saW5lYXJpemUgbGluZWFyaXplOworCS8qIERhdGEgZm9ybWF0dGVyIG9yIENTQyAqLworCXN0cnVjdCBpc2lmX2RmX2NzYyBkZl9jc2M7CisJLyogRGVmZWN0IFBpeGVsIENvcnJlY3Rpb24gKERGQykgY29uZmd1cmF0aW9uICovCisJc3RydWN0IGlzaWZfZGZjIGRmYzsKKwkvKiBCbGFjay9EaWdpdGFsIENsYW1wIGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgaXNpZl9ibGFja19jbGFtcCBiY2xhbXA7CisJLyogR2Fpbiwgb2Zmc2V0IGFkanVzdG1lbnRzICovCisJc3RydWN0IGlzaWZfZ2Fpbl9vZmZzZXRzX2FkaiBnYWluX29mZnNldDsKKwkvKiBDdWxsaW5nICovCisJc3RydWN0IGlzaWZfY3VsIGN1bGxpbmc7CisJLyogQS1MYXcgYW5kIERQQ00gY29tcHJlc3Npb24gb3B0aW9ucyAqLworCXN0cnVjdCBpc2lmX2NvbXByZXNzIGNvbXByZXNzOworCS8qIGhvcml6b250YWwgb2Zmc2V0IGZvciBHYWluL0xTQy9ERkMgKi8KKwlfX3UxNiBob3J6X29mZnNldDsKKwkvKiB2ZXJ0aWNhbCBvZmZzZXQgZm9yIEdhaW4vTFNDL0RGQyAqLworCV9fdTE2IHZlcnRfb2Zmc2V0OworCS8qIGNvbG9yIHBhdHRlcm4gZm9yIGZpZWxkIDAgKi8KKwlzdHJ1Y3QgaXNpZl9jb2xfcGF0IGNvbF9wYXRfZmllbGQwOworCS8qIGNvbG9yIHBhdHRlcm4gZm9yIGZpZWxkIDEgKi8KKwlzdHJ1Y3QgaXNpZl9jb2xfcGF0IGNvbF9wYXRfZmllbGQxOworI2RlZmluZSBJU0lGX05PX1NISUZUCQkwCisjZGVmaW5lCUlTSUZfMUJJVF9TSElGVAkJMQorI2RlZmluZQlJU0lGXzJCSVRfU0hJRlQJCTIKKyNkZWZpbmUJSVNJRl8zQklUX1NISUZUCQkzCisjZGVmaW5lCUlTSUZfNEJJVF9TSElGVAkJNAorI2RlZmluZSBJU0lGXzVCSVRfU0hJRlQJCTUKKyNkZWZpbmUgSVNJRl82QklUX1NISUZUCQk2CisJLyogRGF0YSBzaGlmdCBhcHBsaWVkIGJlZm9yZSBzdG9yaW5nIHRvIFNEUkFNICovCisJX191OCBkYXRhX3NoaWZ0OworCS8qIGVuYWJsZSBpbnB1dCB0ZXN0IHBhdHRlcm4gZ2VuZXJhdGlvbiAqLworCV9fdTggdGVzdF9wYXRfZ2VuOworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBpc2lmX3ljYmNyX2NvbmZpZyB7CisJLyogaXNpZiBwaXhlbCBmb3JtYXQgKi8KKwllbnVtIGNjZGNfcGl4Zm10IHBpeF9mbXQ7CisJLyogaXNpZiBmcmFtZSBmb3JtYXQgKi8KKwllbnVtIGNjZGNfZnJtZm10IGZybV9mbXQ7CisJLyogSVNJRiBjcm9wIHdpbmRvdyAqLworCXN0cnVjdCB2NGwyX3JlY3Qgd2luOworCS8qIGZpZWxkIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgZmlkX3BvbDsKKwkvKiBpbnRlcmZhY2UgVkQgcG9sYXJpdHkgKi8KKwllbnVtIHZwZmVfcGluX3BvbCB2ZF9wb2w7CisJLyogaW50ZXJmYWNlIEhEIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgaGRfcG9sOworCS8qIGlzaWYgcGl4IG9yZGVyLiBPbmx5IHVzZWQgZm9yIHljYmNyIGNhcHR1cmUgKi8KKwllbnVtIGNjZGNfcGl4b3JkZXIgcGl4X29yZGVyOworCS8qIGlzaWYgYnVmZmVyIHR5cGUuIE9ubHkgdXNlZCBmb3IgeWNiY3IgY2FwdHVyZSAqLworCWVudW0gY2NkY19idWZ0eXBlIGJ1Zl90eXBlOworfTsKKworLyogTVNCIG9mIGltYWdlIGRhdGEgY29ubmVjdGVkIHRvIHNlbnNvciBwb3J0ICovCitlbnVtIGlzaWZfZGF0YV9tc2IgeworCUlTSUZfQklUX01TQl8xNSwKKwlJU0lGX0JJVF9NU0JfMTQsCisJSVNJRl9CSVRfTVNCXzEzLAorCUlTSUZfQklUX01TQl8xMiwKKwlJU0lGX0JJVF9NU0JfMTEsCisJSVNJRl9CSVRfTVNCXzEwLAorCUlTSUZfQklUX01TQl85LAorCUlTSUZfQklUX01TQl84LAorCUlTSUZfQklUX01TQl83Cit9OworCitlbnVtIGlzaWZfY2ZhX3BhdHRlcm4geworCUlTSUZfQ0ZBX1BBVF9NT1NBSUMsCisJSVNJRl9DRkFfUEFUX1NUUklQRQorfTsKKworc3RydWN0IGlzaWZfcGFyYW1zX3JhdyB7CisJLyogaXNpZiBwaXhlbCBmb3JtYXQgKi8KKwllbnVtIGNjZGNfcGl4Zm10IHBpeF9mbXQ7CisJLyogaXNpZiBmcmFtZSBmb3JtYXQgKi8KKwllbnVtIGNjZGNfZnJtZm10IGZybV9mbXQ7CisJLyogdmlkZW8gd2luZG93ICovCisJc3RydWN0IHY0bDJfcmVjdCB3aW47CisJLyogZmllbGQgcG9sYXJpdHkgKi8KKwllbnVtIHZwZmVfcGluX3BvbCBmaWRfcG9sOworCS8qIGludGVyZmFjZSBWRCBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIHZkX3BvbDsKKwkvKiBpbnRlcmZhY2UgSEQgcG9sYXJpdHkgKi8KKwllbnVtIHZwZmVfcGluX3BvbCBoZF9wb2w7CisJLyogYnVmZmVyIHR5cGUuIEFwcGxpY2FibGUgZm9yIGludGVybGFjZWQgbW9kZSAqLworCWVudW0gY2NkY19idWZ0eXBlIGJ1Zl90eXBlOworCS8qIEdhaW4gdmFsdWVzICovCisJc3RydWN0IGlzaWZfZ2FpbiBnYWluOworCS8qIGNmYSBwYXR0ZXJuICovCisJZW51bSBpc2lmX2NmYV9wYXR0ZXJuIGNmYV9wYXQ7CisJLyogRGF0YSBNU0IgcG9zaXRpb24gKi8KKwllbnVtIGlzaWZfZGF0YV9tc2IgZGF0YV9tc2I7CisJLyogRW5hYmxlIGhvcml6b250YWwgZmxpcCAqLworCXVuc2lnbmVkIGNoYXIgaG9yel9mbGlwX2VuOworCS8qIEVuYWJsZSBpbWFnZSBpbnZlcnQgdmVydGljYWxseSAqLworCXVuc2lnbmVkIGNoYXIgaW1hZ2VfaW52ZXJ0X2VuOworCisJLyogYWxsIHRoZSB1c2VybGFuZCBkZWZpbmVkIHN0dWZmKi8KKwlzdHJ1Y3QgaXNpZl9jb25maWdfcGFyYW1zX3JhdyBjb25maWdfcGFyYW1zOworfTsKKworZW51bSBpc2lmX2RhdGFfcGFjayB7CisJSVNJRl9QQUNLXzE2QklULAorCUlTSUZfUEFDS18xMkJJVCwKKwlJU0lGX1BBQ0tfOEJJVAorfTsKKworI2RlZmluZSBJU0lGX1dJTl9OVFNDCQkJCXswLCAwLCA3MjAsIDQ4MH0KKyNkZWZpbmUgSVNJRl9XSU5fVkdBCQkJCXswLCAwLCA2NDAsIDQ4MH0KKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS92cHNzLmggYi9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBzcy5oCmluZGV4IGZjZGZmNzQuLmM1OWNjMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS92cHNzLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3Zwc3MuaApAQCAtMjksNyArMjksMTkgQEAKIC8qIHNlbGVjdG9yIGZvciBjY2RjIGlucHV0IHNlbGVjdGlvbiBvbiBETTM1NSAqLwogZW51bSB2cHNzX2NjZGNfc291cmNlX3NlbCB7CiAJVlBTU19DQ0RDSU4sCi0JVlBTU19IU1NJSU4KKwlWUFNTX0hTU0lJTiwKKwlWUFNTX1BHTFBCSywJLyogZm9yIERNMzY1IG9ubHkgKi8KKwlWUFNTX0NDRENQRwkvKiBmb3IgRE0zNjUgb25seSAqLworfTsKKworc3RydWN0IHZwc3Nfc3luY19wb2wgeworCXVuc2lnbmVkIGludCBjY2RwZ19oZHBvbDoxOworCXVuc2lnbmVkIGludCBjY2RwZ192ZHBvbDoxOworfTsKKworc3RydWN0IHZwc3NfcGdfZnJhbWVfc2l6ZSB7CisJc2hvcnQgaGxwZnI7CisJc2hvcnQgcHBsZW47CiB9OwogCiAvKiBVc2VkIGZvciBlbmFibGUvZGlhYmxlIFZQU1MgQ2xvY2sgKi8KQEAgLTQ3LDEyICs1OSwzOCBAQAogCSAqLwogCVZQU1NfVkVOQ19DTE9DS19TRUwsCiAJVlBTU19WUEJFX0NMT0NLLAorCS8qIERNMzY1IG9ubHkgY2xvY2tzICovCisJVlBTU19JUElQRUlGX0NMT0NLLAorCVZQU1NfUlNaX0NMT0NLLAorCVZQU1NfQkxfQ0xPQ0ssCisJLyoKKwkgKiBXaGVuIHVzaW5nIFZQU1NfUENMS19JTlRFUk5BTCBpbiB2cHNzX2VuYWJsZV9jbG9jaygpIGFwaQorCSAqIGZvbGxvd2luZyBhcHBsaWVzOi0KKwkgKiBlbiA9IDAgZGlzYWJsZSBpbnRlcm5hbCBQQ0xLCisJICogZW4gPSAxIGVuYWJsZXMgaW50ZXJuYWwgUENMSworCSAqLworCVZQU1NfUENMS19JTlRFUk5BTCwKKwkvKgorCSAqIFdoZW4gdXNpbmcgVlBTU19QU1lOQ19DTE9DS19TRUwgaW4gdnBzc19lbmFibGVfY2xvY2soKSBhcGkKKwkgKiBmb2xsb3dpbmcgYXBwbGllczotCisJICogZW4gPSAwIGVuYWJsZXMgTU1SIGNsb2NrCisJICogZW4gPSAxIGVuYWJsZXMgVlBTUyBjbG9jaworCSAqLworCVZQU1NfUFNZTkNfQ0xPQ0tfU0VMLAorCVZQU1NfTERDX0NMT0NLX1NFTCwKKwlWUFNTX09TRF9DTE9DS19TRUwsCisJVlBTU19GRElGX0NMT0NLLAorCVZQU1NfTERDX0NMT0NLCiB9OwogCiAvKiBzZWxlY3QgaW5wdXQgdG8gY2NkYyBvbiBkbTM1NSAqLwogaW50IHZwc3Nfc2VsZWN0X2NjZGNfc291cmNlKGVudW0gdnBzc19jY2RjX3NvdXJjZV9zZWwgc3JjX3NlbCk7CiAvKiBlbmFibGUvZGlzYWJsZSBhIHZwc3MgY2xvY2ssIDAgLSBzdWNjZXNzLCAtMSAtIGZhaWx1cmUgKi8KIGludCB2cHNzX2VuYWJsZV9jbG9jayhlbnVtIHZwc3NfY2xvY2tfc2VsIGNsb2NrX3NlbCwgaW50IGVuKTsKKy8qIHNldCBzeW5jIHBvbGFyaXR5LCBvbmx5IGZvciBETTM2NSovCit2b2lkIGRtMzY1X3Zwc3Nfc2V0X3N5bmNfcG9sKHN0cnVjdCB2cHNzX3N5bmNfcG9sKTsKKy8qIHNldCB0aGUgUEdfRlJBTUVfU0laRSByZWdpc3Rlciwgb25seSBmb3IgRE0zNjUgKi8KK3ZvaWQgZG0zNjVfdnBzc19zZXRfcGdfZnJhbWVfc2l6ZShzdHJ1Y3QgdnBzc19wZ19mcmFtZV9zaXplKTsKIAogLyogd2JsIHJlc2V0IGZvciBkbTY0NHggKi8KIGVudW0gdnBzc193Ymxfc2VsIHsKQEAgLTY1LDUgKzEwMyw2IEBACiAJVlBTU19QQ1JfUFJFVl9XQkxfMCwKIAlWUFNTX1BDUl9DQ0RDX1dCTF9PLAogfTsKKy8qIGNsZWFyIHdibCBvdmVyZmxvdyBmbGFnIGZvciBETTY0NDYgKi8KIGludCB2cHNzX2NsZWFyX3dibF9vdmVyZmxvdyhlbnVtIHZwc3Nfd2JsX3NlbCB3Ymxfc2VsKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKaW5kZXggMmM2YWYyNC4uYzY2Mjk4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCkBAIC0zNSw3ICszNSw3IEBACiAKIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSB7CiAJLyogY29uZmlndXJhdGlvbiAqLwotCWludCAgICAgICAgICAgICAgICBpcl90eXBlOworCXU2NCAgICAgIGlyX3R5cGU7CiAKIAkvKiBrZXkgaW5mbyAqLwogCXUzMiAgICAgICAgICAgICAgICBpcl9rZXk7ICAgICAgLyogaXIgc2NhbmNvZGUgKi8KQEAgLTg0LDcgKzg0LDcgQEAKIC8qIFJvdXRpbmVzIGZyb20gaXItZnVuY3Rpb25zLmMgKi8KIAogaW50IGlyX2lucHV0X2luaXQoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgKmlyLAotCQkgICBpbnQgaXJfdHlwZSk7CisJCSAgIGNvbnN0IHU2NCBpcl90eXBlKTsKIHZvaWQgaXJfaW5wdXRfbm9rZXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgKmlyKTsKIHZvaWQgaXJfaW5wdXRfa2V5ZG93bihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIsCiAJCSAgICAgIHUzMiBpcl9rZXkpOwpAQCAtMTYyLDQgKzE2Miw2IEBACiBleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX3ZpZGVvbWF0ZV9zMzUwX3RhYmxlOwogZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19nYWRtZWlfcm0wMDh6X3RhYmxlOwogZXh0ZXJuIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSBpcl9jb2Rlc19uZWNfdGVycmF0ZWNfY2luZXJneV94c190YWJsZTsKK2V4dGVybiBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgaXJfY29kZXNfd2luZmFzdF91c2JpaV9kZWx1eGVfdGFibGU7CitleHRlcm4gc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIGlyX2NvZGVzX2t3b3JsZF8zMTV1X3RhYmxlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2lyLWNvcmUuaCBiL2luY2x1ZGUvbWVkaWEvaXItY29yZS5oCmluZGV4IDI5OWQyMDEuLjYxYzIyM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvaXItY29yZS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvaXItY29yZS5oCkBAIC0yMSwxMyArMjEsMTEgQEAKICNkZWZpbmUgSVJfZHByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pCWlmIChpcl9jb3JlX2RlYnVnID49IGxldmVsKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCAsIF9fZnVuY19fLCAjIyBhcmcpCiAKLWVudW0gaXJfdHlwZSB7Ci0JSVJfVFlQRV9VTktOT1dOCT0gMCwKLQlJUl9UWVBFX1JDNQk9IDEsCi0JSVJfVFlQRV9QRAk9IDIsCQkgLyogUHVsc2UgZGlzdGFuY2UgZW5jb2RlZCBJUiAqLwotCUlSX1RZUEVfTkVDCT0gMywKLQlJUl9UWVBFX09USEVSCT0gOTksCi19OworI2RlZmluZSBJUl9UWVBFX1VOS05PV04JMAorI2RlZmluZSBJUl9UWVBFX1JDNQkoMSAgPDwgMCkJLyogUGhpbGlwcyBSQzUgcHJvdG9jb2wgKi8KKyNkZWZpbmUgSVJfVFlQRV9QRAkoMSAgPDwgMSkJLyogUHVsc2UgZGlzdGFuY2UgZW5jb2RlZCBJUiAqLworI2RlZmluZSBJUl9UWVBFX05FQwkoMSAgPDwgMikKKyNkZWZpbmUgSVJfVFlQRV9PVEhFUgkoKCh1NjQpMSkgPDwgNjNsKQogCiBzdHJ1Y3QgaXJfc2NhbmNvZGUgewogCXUxNglzY2FuY29kZTsKQEAgLTM3LDI2ICszNSw0MCBAQAogc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlIHsKIAlzdHJ1Y3QgaXJfc2NhbmNvZGUJKnNjYW47CiAJaW50CQkJc2l6ZTsKLQllbnVtCQkJaXJfdHlwZSBpcl90eXBlOworCXU2NAkJaXJfdHlwZTsKIAlzcGlubG9ja190CQlsb2NrOwogfTsKIAotc3RydWN0IGlyX2lucHV0X2RldiB7Ci0Jc3RydWN0IGlucHV0X2RldgkJKmRldjsKLQlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUJcmNfdGFiOworc3RydWN0IGlyX2Rldl9wcm9wcyB7CisJdW5zaWduZWQgbG9uZyBhbGxvd2VkX3Byb3RvczsKKwl2b2lkIAkJKnByaXY7CisJaW50ICgqY2hhbmdlX3Byb3RvY29sKSh2b2lkICpwcml2LCB1NjQgaXJfdHlwZSk7CiB9OwogCisKK3N0cnVjdCBpcl9pbnB1dF9kZXYgeworCXN0cnVjdCBpbnB1dF9kZXYJCSpkZXY7CQkvKiBJbnB1dCBkZXZpY2UqLworCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZQlyY190YWI7CQkvKiBzY2FuL2tleSB0YWJsZSAqLworCXVuc2lnbmVkIGxvbmcJCQlkZXZubzsJCS8qIGRldmljZSBudW1iZXIgKi8KKwlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwCQlhdHRyOwkJLyogSVIgYXR0cmlidXRlcyAqLworCXN0cnVjdCBkZXZpY2UJCQkqY2xhc3NfZGV2OwkvKiB2aXJ0dWFsIGNsYXNzIGRldiAqLworCWNvbnN0IHN0cnVjdCBpcl9kZXZfcHJvcHMJKnByb3BzOwkJLyogRGV2aWNlIHByb3BlcnRpZXMgKi8KK307CisjZGVmaW5lIHRvX2lyX2lucHV0X2RldihfYXR0cikgY29udGFpbmVyX29mKF9hdHRyLCBzdHJ1Y3QgaXJfaW5wdXRfZGV2LCBhdHRyKQorCiAvKiBSb3V0aW5lcyBmcm9tIGlyLWtleXRhYmxlLmMgKi8KIAogdTMyIGlyX2dfa2V5Y29kZV9mcm9tX3RhYmxlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwKIAkJCSAgICB1MzIgc2NhbmNvZGUpOwogCi1pbnQgaXJfc2V0X2tleWNvZGVfdGFibGUoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LAotCQkJIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqcmNfdGFiKTsKLQotaW50IGlyX3JvdW5kdXBfdGFibGVzaXplKGludCBuX2VsZW1zKTsKIGludCBpcl9pbnB1dF9yZWdpc3RlcihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCi0JCSAgICAgIHN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqaXJfY29kZXMpOworCQkgICAgICBjb25zdCBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgaXJfZGV2X3Byb3BzICpwcm9wcyk7CiB2b2lkIGlyX2lucHV0X3VucmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KTsKIAorLyogUm91dGluZXMgZnJvbSBpci1zeXNmcy5jICovCisKK2ludCBpcl9yZWdpc3Rlcl9jbGFzcyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYpOwordm9pZCBpcl91bnJlZ2lzdGVyX2NsYXNzKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldik7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1rYmQtaTJjLmggYi9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaAppbmRleCBhYWY2NWU4Li45MTQyOTM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaApAQCAtMzYsNyArMzYsNyBAQAogc3RydWN0IElSX2kyY19pbml0X2RhdGEgewogCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZSAqaXJfY29kZXM7CiAJY29uc3QgY2hhciAgICAgICAgICAgICAqbmFtZTsKLQlpbnQgICAgICAgICAgICAgICAgICAgIHR5cGU7IC8qIElSX1RZUEVfUkM1LCBJUl9UWVBFX1BELCBldGMgKi8KKwl1NjQgICAgICAgICAgdHlwZTsgLyogSVJfVFlQRV9SQzUsIElSX1RZUEVfUEQsIGV0YyAqLwogCS8qCiAJICogU3BlY2lmeSBlaXRoZXIgYSBmdW5jdGlvbiBwb2ludGVyIG9yIGEgdmFsdWUgaW5kaWNhdGluZyBvbmUgb2YKIAkgKiBpcl9rYmRfaTJjJ3MgaW50ZXJuYWwgZ2V0X2tleSBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvb3Y3NzJ4LmggYi9pbmNsdWRlL21lZGlhL292NzcyeC5oCmluZGV4IDE0Yzc3ZWYuLjU0OGJmMTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvb3Y3NzJ4LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9vdjc3MnguaApAQCAtMTUsOCArMTUsOSBAQAogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KIAogLyogZm9yIGZsYWdzICovCi0jZGVmaW5lIE9WNzcyWF9GTEFHX1ZGTElQICAgICAweDAwMDAwMDAxIC8qIFZlcnRpY2FsIGZsaXAgaW1hZ2UgKi8KLSNkZWZpbmUgT1Y3NzJYX0ZMQUdfSEZMSVAgICAgIDB4MDAwMDAwMDIgLyogSG9yaXpvbnRhbCBmbGlwIGltYWdlICovCisjZGVmaW5lIE9WNzcyWF9GTEFHX1ZGTElQCSgxIDw8IDApIC8qIFZlcnRpY2FsIGZsaXAgaW1hZ2UgKi8KKyNkZWZpbmUgT1Y3NzJYX0ZMQUdfSEZMSVAJKDEgPDwgMSkgLyogSG9yaXpvbnRhbCBmbGlwIGltYWdlICovCisjZGVmaW5lIE9WNzcyWF9GTEFHXzhCSVQJKDEgPDwgMikgLyogZGVmYXVsdCAxMCBiaXQgKi8KIAogLyoKICAqIGZvciBFZGdlIGN0cmwKQEAgLTUzLDkgKzU0LDggQEAKICAqIG92NzcyeCBjYW1lcmEgaW5mbwogICovCiBzdHJ1Y3Qgb3Y3NzJ4X2NhbWVyYV9pbmZvIHsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgIGJ1c3dpZHRoOwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgZmxhZ3M7Ci0Jc3RydWN0IG92NzcyeF9lZGdlX2N0cmwgZWRnZWN0cmw7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJc3RydWN0IG92NzcyeF9lZGdlX2N0cmwJZWRnZWN0cmw7CiB9OwogCiAjZW5kaWYgLyogX19PVjc3MlhfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaCBiL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oCmluZGV4IDRhZWZmOTYuLmI5ZGExZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oCkBAIC0xODgsNiArMTg4LDcgQEAKIHZvaWQgc2FhNzE0Nl9kbWFfZnJlZShzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldixzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCiAJCQkJCQlzdHJ1Y3Qgc2FhNzE0Nl9idWYgKmJ1Zik7CiAKK2ludCBzYWE3MTQ2X3Z2X2RldmluaXQoc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYpOwogaW50IHNhYTcxNDZfdnZfaW5pdChzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldiwgc3RydWN0IHNhYTcxNDZfZXh0X3Z2ICpleHRfdnYpOwogaW50IHNhYTcxNDZfdnZfcmVsZWFzZShzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKaW5kZXggZGNjNWI4Ni4uOWQ2OWYwMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oCkBAIC04MSw2ICs4MSw4IEBACiAJaW50ICgqc2V0X2J1c19wYXJhbSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIF9fdTMyKTsKIAlpbnQgKCpnZXRfY3RybCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2NvbnRyb2wgKik7CiAJaW50ICgqc2V0X2N0cmwpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9jb250cm9sICopOworCWludCAoKmdldF9wYXJtKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqKTsKKwlpbnQgKCpzZXRfcGFybSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKik7CiAJdW5zaWduZWQgaW50ICgqcG9sbCkoc3RydWN0IGZpbGUgKiwgcG9sbF90YWJsZSAqKTsKIAljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmNvbnRyb2xzOwogCWludCBudW1fY29udHJvbHM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3RpbWJfcmFkaW8uaCBiL2luY2x1ZGUvbWVkaWEvdGltYl9yYWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZDMyYTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL3RpbWJfcmFkaW8uaApAQCAtMCwwICsxLDM2IEBACisvKgorICogdGltYl9yYWRpby5oIFBsYXRmb3JtIHN0cnVjdCBmb3IgdGhlIFRpbWJlcmRhbGUgcmFkaW8gZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9USU1CX1JBRElPXworI2RlZmluZSBfVElNQl9SQURJT18gMQorCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKK3N0cnVjdCB0aW1iX3JhZGlvX3BsYXRmb3JtX2RhdGEgeworCWludCBpMmNfYWRhcHRlcjsgLyogSTJDIGFkYXB0ZXIgd2hlcmUgdGhlIHR1bmVyIGFuZCBkc3AgYXJlIGF0dGFjaGVkICovCisJc3RydWN0IHsKKwkJY29uc3QgY2hhciAqbW9kdWxlX25hbWU7CisJCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbzsKKwl9IHR1bmVyOworCXN0cnVjdCB7CisJCWNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lOworCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm87CisJfSBkc3A7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdHVuZXIuaCBiL2luY2x1ZGUvbWVkaWEvdHVuZXIuaAppbmRleCA0ZDViNTNmLi41NTA1YzUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3R1bmVyLmgKKysrIGIvaW5jbHVkZS9tZWRpYS90dW5lci5oCkBAIC0xMjksNiArMTI5LDcgQEAKICNkZWZpbmUgVFVORVJfUEFSVFNOSUNfUFRJXzVORjA1CTgxCiAjZGVmaW5lIFRVTkVSX1BISUxJUFNfQ1UxMjE2TCAgICAgICAgICAgODIKICNkZWZpbmUgVFVORVJfTlhQX1REQTE4MjcxCQk4MworI2RlZmluZSBUVU5FUl9TT05ZX0JURl9QWE4wMVoJCTg0CiAKIC8qIHR2IGNhcmQgc3BlY2lmaWMgKi8KICNkZWZpbmUgVERBOTg4N19QUkVTRU5UIAkJKDE8PDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3R2cDcwMDIuaCBiL2luY2x1ZGUvbWVkaWEvdHZwNzAwMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNDM1MzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL3R2cDcwMDIuaApAQCAtMCwwICsxLDU2IEBACisvKiBUZXhhcyBJbnN0cnVtZW50cyBUcmlwbGUgOC0vMTAtQklUIDE2NS0vMTEwLU1TUFMgVmlkZW8gYW5kIEdyYXBoaWNzCisgKiBEaWdpdGl6ZXIgd2l0aCBIb3Jpem9udGFsIFBMTCByZWdpc3RlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jCisgKiBBdXRob3I6IFNhbnRpYWdvIE51bmV6LUNvcnJhbGVzIDxzYW50aWFnby5udW5lekByaWRnZXJ1bi5jb20+CisgKgorICogVGhpcyBjb2RlIGlzIHBhcnRpYWxseSBiYXNlZCB1cG9uIHRoZSBUVlA1MTUwIGRyaXZlcgorICogd3JpdHRlbiBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgKG1jaGVoYWJAaW5mcmFkZWFkLm9yZyksCisgKiB0aGUgVFZQNTE0eCBkcml2ZXIgd3JpdHRlbiBieSBWYWliaGF2IEhpcmVtYXRoIDxodmFpYmhhdkB0aS5jb20+CisgKiBhbmQgdGhlIFRWUDcwMDIgZHJpdmVyIGluIHRoZSBUSSBMU1AgMi4xMC4wMC4xNAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisjaWZuZGVmIF9UVlA3MDAyX0hfCisjZGVmaW5lIF9UVlA3MDAyX0hfCisKKy8qIFBsYXRmb3JtLWRlcGVuZGVudCBkYXRhCisgKgorICogY2xrX3BvbGFyaXR5OgorICogCQkJMCAtPiBkYXRhIGNsb2NrZWQgb3V0IG9uIHJpc2luZyBlZGdlIG9mIERBVEFDTEsgc2lnbmFsCisgKiAJCQkxIC0+IGRhdGEgY2xvY2tlZCBvdXQgb24gZmFsbGluZyBlZGdlIG9mIERBVEFDTEsgc2lnbmFsCisgKiBoc19wb2xhcml0eToKKyAqIAkJCTAgLT4gYWN0aXZlIGxvdyBIU1lOQyBvdXRwdXQKKyAqIAkJCTEgLT4gYWN0aXZlIGhpZ2ggSFNZTkMgb3V0cHV0CisgKiBzb2dfcG9sYXJpdHk6CisgKiAJCQkwIC0+IG5vcm1hbCBvcGVyYXRpb24KKyAqIAkJCTEgLT4gb3BlcmF0aW9uIHdpdGggcG9sYXJpdHkgaW52ZXJ0ZWQKKyAqIHZzX3BvbGFyaXR5OgorICogCQkJMCAtPiBhY3RpdmUgbG93IFZTWU5DIG91dHB1dAorICogCQkJMSAtPiBhY3RpdmUgaGlnaCBWU1lOQyBvdXRwdXQKKyAqIGZpZF9wb2xhcml0eToKKyAqCQkJMCAtPiB0aGUgZmllbGQgSUQgb3V0cHV0IGlzIHNldCB0byBsb2dpYyAxIGZvciBhbiBvZGQKKyAqCQkJICAgICBmaWVsZCAoZmllbGQgMSkgYW5kIHNldCB0byBsb2dpYyAwIGZvciBhbiBldmVuCisgKgkJCSAgICAgZmllbGQgKGZpZWxkIDApLgorICoJCQkxIC0+IG9wZXJhdGlvbiB3aXRoIHBvbGFyaXR5IGludmVydGVkLgorICovCitzdHJ1Y3QgdHZwNzAwMl9jb25maWcgeworCXU4IGNsa19wb2xhcml0eTsKKwl1OCBoc19wb2xhcml0eTsKKwl1OCB2c19wb2xhcml0eTsKKwl1OCBmaWRfcG9sYXJpdHk7CisJdTggc29nX3BvbGFyaXR5OworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90dzk5MTAuaCBiL2luY2x1ZGUvbWVkaWEvdHc5OTEwLmgKaW5kZXggNWUyODk1YS4uOTBiY2YxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS90dzk5MTAuaAorKysgYi9pbmNsdWRlL21lZGlhL3R3OTkxMC5oCkBAIC0zMCw4ICszMCw4IEBACiB9OwogCiBzdHJ1Y3QgdHc5OTEwX3ZpZGVvX2luZm8gewotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgYnVzd2lkdGg7Ci0JZW51bSB0dzk5MTBfbXBvdXRfcGluICBtcG91dDsKKwl1bnNpZ25lZCBsb25nCQlidXN3aWR0aDsKKwllbnVtIHR3OTkxMF9tcG91dF9waW4JbXBvdXQ7CiB9OwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oCmluZGV4IDZjYzEwN2QuLjU2YWJmMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaApAQCAtMzksNiArMzksNyBAQAogCiAJLyogbW9kdWxlIHNhYTcxMTU6IHJlc2VydmVkIHJhbmdlIDEwMS0xNDkgKi8KIAlWNEwyX0lERU5UX1NBQTcxMTEgPSAxMDEsCisJVjRMMl9JREVOVF9TQUE3MTExQSA9IDEwMiwKIAlWNEwyX0lERU5UX1NBQTcxMTMgPSAxMDMsCiAJVjRMMl9JREVOVF9TQUE3MTE0ID0gMTA0LAogCVY0TDJfSURFTlRfU0FBNzExNSA9IDEwNSwKQEAgLTEzNCw2ICsxMzUsOSBAQAogCS8qIG1vZHVsZXMgdGVmNjg2MjoganVzdCBpZGVudCA2ODYyICovCiAJVjRMMl9JREVOVF9URUY2ODYyID0gNjg2MiwKIAorCS8qIG1vZHVsZSB0dnA3MDAyOiBqdXN0IGlkZW50IDcwMDIgKi8KKwlWNEwyX0lERU5UX1RWUDcwMDIgPSA3MDAyLAorCiAJLyogbW9kdWxlIGFkdjcxNzA6IGp1c3QgaWRlbnQgNzE3MCAqLwogCVY0TDJfSURFTlRfQURWNzE3MCA9IDcxNzAsCiAKQEAgLTE1NSw2ICsxNTksOSBAQAogCS8qIG1vZHVsZSBhZHY3MzQzOiBqdXN0IGlkZW50IDczNDMgKi8KIAlWNEwyX0lERU5UX0FEVjczNDMgPSA3MzQzLAogCisJLyogbW9kdWxlIHNhYTc3MDZoOiBqdXN0IGlkZW50IDc3MDYgKi8KKwlWNEwyX0lERU5UX1NBQTc3MDZIID0gNzcwNiwKKwogCS8qIG1vZHVsZSB3bTg3Mzk6IGp1c3QgaWRlbnQgODczOSAqLwogCVY0TDJfSURFTlRfV004NzM5ID0gODczOSwKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oCmluZGV4IDliYTk5Y2QuLjJiY2RjYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItc3ViZGV2LmgKQEAgLTE4MCw2ICsxODAsNyBAQAogCWludCAoKnNfY2xvY2tfZnJlcSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIGZyZXEpOwogCWludCAoKnNfaTJzX2Nsb2NrX2ZyZXEpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBmcmVxKTsKIAlpbnQgKCpzX3JvdXRpbmcpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBpbnB1dCwgdTMyIG91dHB1dCwgdTMyIGNvbmZpZyk7CisJaW50ICgqc19zdHJlYW0pKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmggYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oCmluZGV4IDBmN2MzNzguLjQ1Mzc1YjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKKysrIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaApAQCAtMTc3LDcgKzE3Nyw5IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0Nl9kZXYgKgogX19pbjZfZGV2X2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiByY3VfZGVyZWZlcmVuY2UoZGV2LT5pcDZfcHRyKTsKKwlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKGRldi0+aXA2X3B0ciwKKwkJCQkgICAgIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8CisJCQkJICAgICBsb2NrZGVwX3J0bmxfaXNfaGVsZCgpKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL2RzLmggYi9pbmNsdWRlL3BjbWNpYS9kcy5oCmluZGV4IGVlMTQ4NTcuLmQ1Nzg0N2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL2RzLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvZHMuaApAQCAtNDAsNyArNDAsNyBAQAogICogRG9jdW1lbnRhdGlvbi9wY21jaWEvZHJpdmVyLnR4dCBmb3IgZGV0YWlscy4KICovCiBzdHJ1Y3QgcGNtY2lhX2R5bmlkcyB7Ci0Jc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgbXV0ZXgJCWxvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvc3MuaCBiL2luY2x1ZGUvcGNtY2lhL3NzLmgKaW5kZXggY2JmYmE4OC4uMzI4OTZhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvc3MuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9zcy5oCkBAIC0xMzQsOSArMTM0LDkgQEAKIAogc3RydWN0IHBjbWNpYV9zb2NrZXQgewogCXN0cnVjdCBtb2R1bGUJCQkqb3duZXI7Ci0Jc3BpbmxvY2tfdAkJCWxvY2s7CiAJc29ja2V0X3N0YXRlX3QJCQlzb2NrZXQ7CiAJdV9pbnQJCQkJc3RhdGU7CisJdV9pbnQJCQkJc3VzcGVuZGVkX3N0YXRlOwkvKiBzdGF0ZSBiZWZvcmUgc3VzcGVuZCAqLwogCXVfc2hvcnQJCQkJZnVuY3Rpb25zOwogCXVfc2hvcnQJCQkJbG9ja19jb3VudDsKIAlwY2NhcmRfbWVtX21hcAkJCWNpc19tZW07CkBAIC0yMDAsOSArMjAwLDE0IEBACiAJc3RydWN0IHRhc2tfc3RydWN0CQkqdGhyZWFkOwogCXN0cnVjdCBjb21wbGV0aW9uCQl0aHJlYWRfZG9uZTsKIAl1bnNpZ25lZCBpbnQJCQl0aHJlYWRfZXZlbnRzOwotCS8qIHByb3RlY3RzIHNvY2tldCBoL3cgc3RhdGUgKi8KKwl1bnNpZ25lZCBpbnQJCQlzeXNmc19ldmVudHM7CisKKwkvKiBGb3IgdGhlIG5vbi10cml2aWFsIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgbG9ja3MsCisJICogc2VlIERvY3VtZW50YXRpb24vcGNtY2lhL2xvY2tpbmcudHh0ICovCiAJc3RydWN0IG11dGV4CQkJc2t0X211dGV4OwotCS8qIHByb3RlY3RzIHRocmVhZF9ldmVudHMgKi8KKwlzdHJ1Y3QgbXV0ZXgJCQlvcHNfbXV0ZXg7CisKKwkvKiBwcm90ZWN0cyB0aHJlYWRfZXZlbnRzIGFuZCBzeXNmc19ldmVudHMgKi8KIAlzcGlubG9ja190CQkJdGhyZWFkX2xvY2s7CiAKIAkvKiBwY21jaWEgKDE2LWJpdCkgKi8KQEAgLTIyNSwzMCArMjMwLDE5IEBACiAJCXU4CQkJYnVzeToxOwogCQkvKiBwY21jaWEgbW9kdWxlIGlzIGJlaW5nIHVubG9hZGVkICovCiAJCXU4CQkJZGVhZDoxOwotCQkvKiBhIG11bHRpZnVuY3Rpb24tZGV2aWNlIGFkZCBldmVudCBpcyBwZW5kaW5nICovCi0JCXU4CQkJZGV2aWNlX2FkZF9wZW5kaW5nOjE7Ci0JCS8qIHRoZSBwZW5kaW5nIGV2ZW50IGFkZHMgYSBtZmMgKDEpIG9yIHBmYyAoMCkgKi8KLQkJdTgJCQltZmNfcGZjOjE7CisJCS8qIHRoZSBQQ01DSUEgY2FyZCBjb25zaXN0cyBvZiB0d28gcHNldWRvIGRldmljZXMgKi8KKwkJdTgJCQloYXNfcGZjOjE7CiAKLQkJdTgJCQlyZXNlcnZlZDozOworCQl1OAkJCXJlc2VydmVkOjQ7CiAJfSBwY21jaWFfc3RhdGU7CiAKIAotCS8qIGZvciBhZGRpbmcgZnVydGhlciBwc2V1ZG8tbXVsdGlmdW5jdGlvbiBkZXZpY2VzICovCi0Jc3RydWN0IHdvcmtfc3RydWN0CQlkZXZpY2VfYWRkOwotCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9JT0NUTAogCXN0cnVjdCB1c2VyX2luZm9fdAkJKnVzZXI7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJCXF1ZXVlOwogI2VuZGlmIC8qIENPTkZJR19QQ01DSUFfSU9DVEwgKi8KICNlbmRpZiAvKiBDT05GSUdfUENNQ0lBICovCiAKLQkvKiBjYXJkYnVzICgzMi1iaXQpICovCi0jaWZkZWYgQ09ORklHX0NBUkRCVVMKLQlzdHJ1Y3QgcmVzb3VyY2UJCQkqY2JfY2lzX3JlczsKLQl2b2lkIF9faW9tZW0JCQkqY2JfY2lzX3ZpcnQ7Ci0jZW5kaWYgLyogQ09ORklHX0NBUkRCVVMgKi8KLQogCS8qIHNvY2tldCBkZXZpY2UgKi8KIAlzdHJ1Y3QgZGV2aWNlCQkJZGV2OwogCS8qIGRhdGEgaW50ZXJuYWwgdG8gdGhlIHNvY2tldCBkcml2ZXIgKi8KQEAgLTI2MywxMyArMjU3LDI1IEBACiAgKiAtIHBjY2FyZF9zdGF0aWNfb3BzCQlpb21lbSBhbmQgaW9wb3J0IGFyZWFzIGFyZSBhc3NpZ25lZCBzdGF0aWNhbGx5CiAgKiAtIHBjY2FyZF9pb2R5bl9vcHMJCWlvbWVtIGFyZWFzIGlzIGFzc2lnbmVkIHN0YXRpY2FsbHksIGlvcG9ydAogICoJCQkJYXJlYXMgZHluYW1pY2FsbHkKKyAqCQkJCUlmIHRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkLCB1c2UKKyAqCQkJCSJzZWxlY3QgUENDQVJEX0lPRFlOIiBpbiBLY29uZmlnLgogICogLSBwY2NhcmRfbm9uc3RhdGljX29wcwlpb21lbSBhbmQgaW9wb3J0IGFyZWFzIGFyZSBhc3NpZ25lZCBkeW5hbWljYWxseS4KICAqCQkJCUlmIHRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkLCB1c2UKICAqCQkJCSJzZWxlY3QgUENDQVJEX05PTlNUQVRJQyIgaW4gS2NvbmZpZy4KKyAqCiAgKi8KIGV4dGVybiBzdHJ1Y3QgcGNjYXJkX3Jlc291cmNlX29wcyBwY2NhcmRfc3RhdGljX29wczsKKyNpZiBkZWZpbmVkKENPTkZJR19QQ01DSUEpIHx8IGRlZmluZWQoQ09ORklHX1BDTUNJQV9NT0RVTEUpCiBleHRlcm4gc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMgcGNjYXJkX2lvZHluX29wczsKIGV4dGVybiBzdHJ1Y3QgcGNjYXJkX3Jlc291cmNlX29wcyBwY2NhcmRfbm9uc3RhdGljX29wczsKKyNlbHNlCisvKiBJZiBQQ01DSUEgaXMgbm90IHVzZWQsIGJ1dCBvbmx5IENBUkRCVVMsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHVzZWQKKyAqIGF0IGFsbC4gVGhlcmVmb3JlLCBkbyBub3QgdXNlIHRoZSBsYXJnZSAoMjQwSyEpIHJzcmNfbm9uc3RhdGljIG1vZHVsZQorICovCisjZGVmaW5lIHBjY2FyZF9pb2R5bl9vcHMgcGNjYXJkX3N0YXRpY19vcHMKKyNkZWZpbmUgcGNjYXJkX25vbnN0YXRpY19vcHMgcGNjYXJkX3N0YXRpY19vcHMKKyNlbmRpZgorCiAKIC8qIHNvY2tldCBkcml2ZXJzIGFyZSBleHBlY3RlZCB0byB1c2UgdGhlc2UgY2FsbGJhY2tzIGluIHRoZWlyIC5kcnYgc3RydWN0ICovCiBleHRlcm4gaW50IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKaW5kZXggN2M0NDQ5OS4uZDgwYjZkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKQEAgLTM0OCw3ICszNDgsOCBAQAogCQkJICAgIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqKTsKIGV4dGVybiBpbnQgc2NzaV90ZXN0X3VuaXRfcmVhZHkoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgdGltZW91dCwKIAkJCQlpbnQgcmV0cmllcywgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcik7Ci1leHRlcm4gdW5zaWduZWQgY2hhciAqc2NzaV9nZXRfdnBkX3BhZ2Uoc3RydWN0IHNjc2lfZGV2aWNlICosIHU4IHBhZ2UpOworZXh0ZXJuIGludCBzY3NpX2dldF92cGRfcGFnZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgdTggcGFnZSwgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJICAgICBpbnQgYnVmX2xlbik7CiBleHRlcm4gaW50IHNjc2lfZGV2aWNlX3NldF9zdGF0ZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCiAJCQkJIGVudW0gc2NzaV9kZXZpY2Vfc3RhdGUgc3RhdGUpOwogZXh0ZXJuIHN0cnVjdCBzY3NpX2V2ZW50ICpzZGV2X2V2dF9hbGxvYyhlbnVtIHNjc2lfZGV2aWNlX2V2ZW50IGV2dF90eXBlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oCmluZGV4IDYxYWQzNTkuLmZmZWViYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmgKQEAgLTEwNyw2ICsxMDcsOCBAQAogCXN0cnVjdCBzYXNfcnBoeQkJcnBoeTsKIAkvKiBmbGFncyAqLwogCXVuc2lnbmVkCQlyZWFkeV9sZWRfbWVhbmluZzoxOworCXVuc2lnbmVkCQl0bHJfc3VwcG9ydGVkOjE7CisJdW5zaWduZWQJCXRscl9lbmFibGVkOjE7CiAJLyogcGFyYW1ldGVycyAqLwogCXUxNgkJCUlfVF9uZXh1c19sb3NzX3RpbWVvdXQ7CiAJdTE2CQkJaW5pdGlhdG9yX3Jlc3BvbnNlX3RpbWVvdXQ7CkBAIC0xODEsNiArMTgzLDExIEBACiBleHRlcm4gdm9pZCBzYXNfcGh5X2RlbGV0ZShzdHJ1Y3Qgc2FzX3BoeSAqKTsKIGV4dGVybiBpbnQgc2NzaV9pc19zYXNfcGh5KGNvbnN0IHN0cnVjdCBkZXZpY2UgKik7CiAKK3Vuc2lnbmVkIGludCBzYXNfdGxyX3N1cHBvcnRlZChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7Cit1bnNpZ25lZCBpbnQgc2FzX2lzX3Rscl9lbmFibGVkKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKK3ZvaWQgc2FzX2Rpc2FibGVfdGxyKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKK3ZvaWQgc2FzX2VuYWJsZV90bHIoc3RydWN0IHNjc2lfZGV2aWNlICopOworCiBleHRlcm4gc3RydWN0IHNhc19ycGh5ICpzYXNfZW5kX2RldmljZV9hbGxvYyhzdHJ1Y3Qgc2FzX3BvcnQgKik7CiBleHRlcm4gc3RydWN0IHNhc19ycGh5ICpzYXNfZXhwYW5kZXJfYWxsb2Moc3RydWN0IHNhc19wb3J0ICosIGVudW0gc2FzX2RldmljZV90eXBlKTsKIHZvaWQgc2FzX3JwaHlfZnJlZShzdHJ1Y3Qgc2FzX3JwaHkgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NvcmUuaCBiL2luY2x1ZGUvc291bmQvY29yZS5oCmluZGV4IGE2MTQ5OWMuLjg5ZTBhYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvY29yZS5oCisrKyBiL2luY2x1ZGUvc291bmQvY29yZS5oCkBAIC00NTgsNSArNDU4LDggQEAKIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICoKIHNuZF9wY2lfcXVpcmtfbG9va3VwKHN0cnVjdCBwY2lfZGV2ICpwY2ksIGNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICpsaXN0KTsKIAorY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKgorc25kX3BjaV9xdWlya19sb29rdXBfaWQodTE2IHZlbmRvciwgdTE2IGRldmljZSwKKwkJCWNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICpsaXN0KTsKIAogI2VuZGlmIC8qIF9fU09VTkRfQ09SRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NzNDZ4eF9kc3Bfc3Bvcy5oIGIvaW5jbHVkZS9zb3VuZC9jczQ2eHhfZHNwX3Nwb3MuaAppbmRleCA3YzQ0NjY3Li40OWIwM2M5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2NzNDZ4eF9kc3Bfc3Bvcy5oCisrKyBiL2luY2x1ZGUvc291bmQvY3M0Nnh4X2RzcF9zcG9zLmgKQEAgLTExOCw5ICsxMTgsMTEgQEAKIAogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqcHJvY19pbmZvOwogCWludCByZWZfY291bnQ7Ci0Jc3BpbmxvY2tfdCBsb2NrOwogCi0JaW50IGRlbGV0ZWQ7CisJdTE2IHZvbHVtZVsyXTsKKwl1bnNpZ25lZCBpbnQgZGVsZXRlZCA6MTsKKwl1bnNpZ25lZCBpbnQgdXBkYXRlZCA6MTsKKwl1bnNpZ25lZCBpbnQgdm9sdW1lX3NldCA6MTsKIH07CiAKIHN0cnVjdCBkc3BfdGFza19kZXNjcmlwdG9yIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvcGNtLmggYi9pbmNsdWRlL3NvdW5kL3BjbS5oCmluZGV4IGM4M2E0YTcuLjhiNjExYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcGNtLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9wY20uaApAQCAtMjYyLDYgKzI2Miw4IEBACiAJdW5zaWduZWQgaW50IG1hc2s7CiB9OwogCitzdHJ1Y3Qgc25kX3BjbV9od3B0cl9sb2c7CisKIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgewogCS8qIC0tIFN0YXR1cyAtLSAqLwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqdHJpZ2dlcl9tYXN0ZXI7CkBAIC0zMTAsNyArMzEyLDkgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9tbWFwX2NvbnRyb2wgKmNvbnRyb2w7CiAKIAkvKiAtLSBsb2NraW5nIC8gc2NoZWR1bGluZyAtLSAqLwotCXdhaXRfcXVldWVfaGVhZF90IHNsZWVwOworCXVuc2lnbmVkIGludCB0d2FrZTogMTsJCS8qIGRvIHRyYW5zZmVyICghcG9sbCkgd2FrZXVwICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgc2xlZXA7CS8qIHBvbGwgc2xlZXAgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCB0c2xlZXA7CS8qIHRyYW5zZmVyIHNsZWVwICovCiAJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luYzsKIAogCS8qIC0tIHByaXZhdGUgc2VjdGlvbiAtLSAqLwpAQCAtMzQwLDYgKzM0NCwxMCBAQAogCS8qIC0tIE9TUyB0aGluZ3MgLS0gKi8KIAlzdHJ1Y3Qgc25kX3BjbV9vc3NfcnVudGltZSBvc3M7CiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKKwlzdHJ1Y3Qgc25kX3BjbV9od3B0cl9sb2cgKmh3cHRyX2xvZzsKKyNlbmRpZgogfTsKIAogc3RydWN0IHNuZF9wY21fZ3JvdXAgewkJLyoga2VlcCBsaW5rZWQgc3Vic3RyZWFtcyAqLwpAQCAtODM0LDYgKzg0Miw4IEBACiBpbnQgc25kX3BjbV9saWJfaW50ZXJsZWF2ZV9sZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwogaW50IHNuZF9wY21fbGliX2lvY3RsKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOyAgICAgICAgICAgICAgICAgICAgICAKK2ludCBzbmRfcGNtX3VwZGF0ZV9zdGF0ZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKTsKIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwogaW50IHNuZF9wY21fcGxheWJhY2tfeHJ1bl9jaGVjayhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CiBpbnQgc25kX3BjbV9jYXB0dXJlX3hydW5fY2hlY2soc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwpAQCAtOTA1LDYgKzkxNSw0NCBAQAogaW50IHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgc2l6ZV90IHNpemUpOwogaW50IHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwogCitpbnQgX3NuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MpOworaW50IHNuZF9wY21fbGliX2ZyZWVfdm1hbGxvY19idWZmZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOworc3RydWN0IHBhZ2UgKnNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCSAgdW5zaWduZWQgbG9uZyBvZmZzZXQpOworI2lmIDAgLyogZm9yIGtlcm5lbC1kb2MgKi8KKy8qKgorICogc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIgLSBhbGxvY2F0ZSB2aXJ0dWFsIERNQSBidWZmZXIKKyAqIEBzdWJzdHJlYW06IHRoZSBzdWJzdHJlYW0gdG8gYWxsb2NhdGUgdGhlIGJ1ZmZlciB0bworICogQHNpemU6IHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHNpemUsIGluIGJ5dGVzCisgKgorICogQWxsb2NhdGVzIHRoZSBQQ00gc3Vic3RyZWFtIGJ1ZmZlciB1c2luZyB2bWFsbG9jKCksIGkuZS4sIHRoZSBtZW1vcnkgaXMKKyAqIGNvbnRpZ3VvdXMgaW4ga2VybmVsIHZpcnR1YWwgc3BhY2UsIGJ1dCBub3QgaW4gcGh5c2ljYWwgbWVtb3J5LiAgVXNlIHRoaXMKKyAqIGlmIHRoZSBidWZmZXIgaXMgYWNjZXNzZWQgYnkga2VybmVsIGNvZGUgYnV0IG5vdCBieSBkZXZpY2UgRE1BLgorICoKKyAqIFJldHVybnMgMSBpZiB0aGUgYnVmZmVyIHdhcyBjaGFuZ2VkLCAwIGlmIG5vdCBjaGFuZ2VkLCBvciBhIG5lZ2F0aXZlIGVycm9yCisgKiBjb2RlLgorICovCitzdGF0aWMgaW50IHNuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyCisJCQkoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIHNpemVfdCBzaXplKTsKKy8qKgorICogc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY18zMl9idWZmZXIgLSBhbGxvY2F0ZSAzMi1iaXQtYWRkcmVzc2FibGUgYnVmZmVyCisgKiBAc3Vic3RyZWFtOiB0aGUgc3Vic3RyZWFtIHRvIGFsbG9jYXRlIHRoZSBidWZmZXIgdG8KKyAqIEBzaXplOiB0aGUgcmVxdWVzdGVkIGJ1ZmZlciBzaXplLCBpbiBieXRlcworICoKKyAqIFRoaXMgZnVuY3Rpb24gd29ya3MgbGlrZSBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlcigpLCBidXQgdXNlcworICogdm1hbGxvY18zMigpLCBpLmUuLCB0aGUgcGFnZXMgYXJlIGFsbG9jYXRlZCBmcm9tIDMyLWJpdC1hZGRyZXNzYWJsZSBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbnQgc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY18zMl9idWZmZXIKKwkJCShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgc2l6ZV90IHNpemUpOworI2VuZGlmCisjZGVmaW5lIHNuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN1YnMsIHNpemUpIFwKKwlfc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIgXAorCQkJKHN1YnMsIHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNIHwgX19HRlBfWkVSTykKKyNkZWZpbmUgc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY18zMl9idWZmZXIoc3Vicywgc2l6ZSkgXAorCV9zbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlciBcCisJCQkoc3Vicywgc2l6ZSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMiB8IF9fR0ZQX1pFUk8pCisKICNpZmRlZiBDT05GSUdfU05EX0RNQV9TR0JVRgogLyoKICAqIFNHLWJ1ZmZlciBoYW5kbGluZwpAQCAtOTc1LDYgKzEwMjMsMTAgQEAKICNkZWZpbmUgc25kX3BjbV9saWJfbW1hcF9pb21lbQlOVUxMCiAjZW5kaWYKIAoraW50IHNuZF9wY21fbGliX21tYXBfbm9uY2FjaGVkKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYXJlYSk7CisjZGVmaW5lIHNuZF9wY21fbGliX21tYXBfdm1hbGxvYwlzbmRfcGNtX2xpYl9tbWFwX25vbmNhY2hlZAorCiBzdGF0aWMgaW5saW5lIHZvaWQgc25kX3BjbV9saW1pdF9pc2FfZG1hX3NpemUoaW50IGRtYSwgc2l6ZV90ICptYXgpCiB7CiAJKm1heCA9IGRtYSA8IDQgPyA2NCAqIDEwMjQgOiAxMjggKiAxMDI0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY21fb3NzLmggYi9pbmNsdWRlL3NvdW5kL3BjbV9vc3MuaAppbmRleCBjYzRlMjI2Li43NjBjOTY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3BjbV9vc3MuaAorKysgYi9pbmNsdWRlL3NvdW5kL3BjbV9vc3MuaApAQCAtNjEsNyArNjEsNyBAQAogCXN0cnVjdCBzbmRfcGNtX3BsdWdpbiAqcGx1Z2luX2ZpcnN0OwogCXN0cnVjdCBzbmRfcGNtX3BsdWdpbiAqcGx1Z2luX2xhc3Q7CiAjZW5kaWYKLQl1bnNpZ25lZCBpbnQgcHJldl9od19wdHJfaW50ZXJydXB0OworCXVuc2lnbmVkIGludCBwcmV2X2h3X3B0cl9wZXJpb2Q7CiB9OwogCiBzdHJ1Y3Qgc25kX3BjbV9vc3NfZmlsZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NiLmggYi9pbmNsdWRlL3NvdW5kL3NiLmgKaW5kZXggNGU2MmVlMS4uOTUzNTM1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zYi5oCisrKyBiL2luY2x1ZGUvc291bmQvc2IuaApAQCAtMzMsNiArMzMsNyBAQAogCVNCX0hXXzIwLAogCVNCX0hXXzIwMSwKIAlTQl9IV19QUk8sCisJU0JfSFdfSkFaWjE2LAkJLyogTWVkaWEgVmlzaW9uIEphenoxNiAqLwogCVNCX0hXXzE2LAogCVNCX0hXXzE2Q1NQLAkJLyogU0IxNiB3aXRoIENTUCBjaGlwICovCiAJU0JfSFdfQUxTMTAwLAkJLyogQXZhbmNlIExvZ2ljIEFMUzEwMCBjaGlwICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NvYy1kYWkuaCBiL2luY2x1ZGUvc291bmQvc29jLWRhaS5oCmluZGV4IGNhMjRlN2YuLjA2MWYxNmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLWRhaS5oCisrKyBiL2luY2x1ZGUvc291bmQvc29jLWRhaS5oCkBAIC0xNiw2ICsxNiw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKwogc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtOwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCmluZGV4IGM1Yzk1ZTFkLi5jMDkyMmEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCkBAIC05NSw2ICs5NSwyMSBAQAogCS5zaGlmdCA9IHdzaGlmdCwgLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIFwKIAkubnVtX2tjb250cm9scyA9IDF9CiAKKy8qIFNpbXBsaWZpZWQgdmVyc2lvbnMgb2YgYWJvdmUgbWFjcm9zLCBhc3N1bWluZyB3bmNvbnRyb2xzID0gQVJSQVlfU0laRSh3Y29udHJvbHMpICovCisjZGVmaW5lIFNPQ19QR0FfQVJSQVkod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCxcCisJIHdjb250cm9scykgXAorewkuaWQgPSBzbmRfc29jX2RhcG1fcGdhLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCisJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gQVJSQVlfU0laRSh3Y29udHJvbHMpfQorI2RlZmluZSBTT0NfTUlYRVJfQVJSQVkod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgXAorCSB3Y29udHJvbHMpXAorewkuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXIsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKKwkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSBBUlJBWV9TSVpFKHdjb250cm9scyl9CisjZGVmaW5lIFNPQ19NSVhFUl9OQU1FRF9DVExfQVJSQVkod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgXAorCSB3Y29udHJvbHMpXAoreyAgICAgICAuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgXAorCS5zaGlmdCA9IHdzaGlmdCwgLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIFwKKwkubnVtX2tjb250cm9scyA9IEFSUkFZX1NJWkUod2NvbnRyb2xzKX0KKwogLyogcGF0aCBkb21haW4gd2l0aCBldmVudCAtIGV2ZW50IGhhbmRsZXIgbXVzdCByZXR1cm4gMCBmb3Igc3VjY2VzcyAqLwogI2RlZmluZSBTTkRfU09DX0RBUE1fUEdBX0Uod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgd2NvbnRyb2xzLCBcCiAJd25jb250cm9scywgd2V2ZW50LCB3ZmxhZ3MpIFwKQEAgLTEyNiw2ICsxNDEsMjMgQEAKIAkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSAxLCBcCiAJLmV2ZW50ID0gd2V2ZW50LCAuZXZlbnRfZmxhZ3MgPSB3ZmxhZ3N9CiAKKy8qIFNpbXBsaWZpZWQgdmVyc2lvbnMgb2YgYWJvdmUgbWFjcm9zLCBhc3N1bWluZyB3bmNvbnRyb2xzID0gQVJSQVlfU0laRSh3Y29udHJvbHMpICovCisjZGVmaW5lIFNPQ19QR0FfRV9BUlJBWSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCB3Y29udHJvbHMsIFwKKwl3ZXZlbnQsIHdmbGFncykgXAorewkuaWQgPSBzbmRfc29jX2RhcG1fcGdhLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCisJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gQVJSQVlfU0laRSh3Y29udHJvbHMpLCBcCisJLmV2ZW50ID0gd2V2ZW50LCAuZXZlbnRfZmxhZ3MgPSB3ZmxhZ3N9CisjZGVmaW5lIFNPQ19NSVhFUl9FX0FSUkFZKHduYW1lLCB3cmVnLCB3c2hpZnQsIHdpbnZlcnQsIHdjb250cm9scywgXAorCXdldmVudCwgd2ZsYWdzKSBcCit7CS5pZCA9IHNuZF9zb2NfZGFwbV9taXhlciwgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAorCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gd2NvbnRyb2xzLCAubnVtX2tjb250cm9scyA9IEFSUkFZX1NJWkUod2NvbnRyb2xzKSwgXAorCS5ldmVudCA9IHdldmVudCwgLmV2ZW50X2ZsYWdzID0gd2ZsYWdzfQorI2RlZmluZSBTT0NfTUlYRVJfTkFNRURfQ1RMX0VfQVJSQVkod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgXAorCXdjb250cm9scywgd2V2ZW50LCB3ZmxhZ3MpIFwKK3sgICAgICAgLmlkID0gc25kX3NvY19kYXBtX21peGVyLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCisJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIFwKKwkubnVtX2tjb250cm9scyA9IEFSUkFZX1NJWkUod2NvbnRyb2xzKSwgLmV2ZW50ID0gd2V2ZW50LCAuZXZlbnRfZmxhZ3MgPSB3ZmxhZ3N9CisKIC8qIGV2ZW50cyB0aGF0IGFyZSBwcmUgYW5kIHBvc3QgREFQTSAqLwogI2RlZmluZSBTTkRfU09DX0RBUE1fUFJFKHduYW1lLCB3ZXZlbnQpIFwKIHsJLmlkID0gc25kX3NvY19kYXBtX3ByZSwgLm5hbWUgPSB3bmFtZSwgLmtjb250cm9scyA9IE5VTEwsIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc29jLmggYi9pbmNsdWRlL3NvdW5kL3NvYy5oCmluZGV4IDBkNzcxOGYuLjVkMjM0YTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb2MuaApAQCAtMTY5LDYgKzE2OSwyMyBAQAogCS5wcml2YXRlX3ZhbHVlID0gKHVuc2lnbmVkIGxvbmcpJnhlbnVtIH0KIAogLyoKKyAqIFNpbXBsaWZpZWQgdmVyc2lvbnMgb2YgYWJvdmUgbWFjcm9zLCBkZWNsYXJpbmcgYSBzdHJ1Y3QgYW5kIGNhbGN1bGF0aW5nCisgKiBBUlJBWV9TSVpFIGludGVybmFsbHkKKyAqLworI2RlZmluZSBTT0NfRU5VTV9ET1VCTEVfREVDTChuYW1lLCB4cmVnLCB4c2hpZnRfbCwgeHNoaWZ0X3IsIHh0ZXh0cykgXAorCXN0cnVjdCBzb2NfZW51bSBuYW1lID0gU09DX0VOVU1fRE9VQkxFKHhyZWcsIHhzaGlmdF9sLCB4c2hpZnRfciwgXAorCQkJCQkJQVJSQVlfU0laRSh4dGV4dHMpLCB4dGV4dHMpCisjZGVmaW5lIFNPQ19FTlVNX1NJTkdMRV9ERUNMKG5hbWUsIHhyZWcsIHhzaGlmdCwgeHRleHRzKSBcCisJU09DX0VOVU1fRE9VQkxFX0RFQ0wobmFtZSwgeHJlZywgeHNoaWZ0LCB4c2hpZnQsIHh0ZXh0cykKKyNkZWZpbmUgU09DX0VOVU1fU0lOR0xFX0VYVF9ERUNMKG5hbWUsIHh0ZXh0cykgXAorCXN0cnVjdCBzb2NfZW51bSBuYW1lID0gU09DX0VOVU1fU0lOR0xFX0VYVChBUlJBWV9TSVpFKHh0ZXh0cyksIHh0ZXh0cykKKyNkZWZpbmUgU09DX1ZBTFVFX0VOVU1fRE9VQkxFX0RFQ0wobmFtZSwgeHJlZywgeHNoaWZ0X2wsIHhzaGlmdF9yLCB4bWFzaywgeHRleHRzLCB4dmFsdWVzKSBcCisJc3RydWN0IHNvY19lbnVtIG5hbWUgPSBTT0NfVkFMVUVfRU5VTV9ET1VCTEUoeHJlZywgeHNoaWZ0X2wsIHhzaGlmdF9yLCB4bWFzaywgXAorCQkJCQkJCUFSUkFZX1NJWkUoeHRleHRzKSwgeHRleHRzLCB4dmFsdWVzKQorI2RlZmluZSBTT0NfVkFMVUVfRU5VTV9TSU5HTEVfREVDTChuYW1lLCB4cmVnLCB4c2hpZnQsIHhtYXNrLCB4dGV4dHMsIHh2YWx1ZXMpIFwKKwlTT0NfVkFMVUVfRU5VTV9ET1VCTEVfREVDTChuYW1lLCB4cmVnLCB4c2hpZnQsIHhzaGlmdCwgeG1hc2ssIHh0ZXh0cywgeHZhbHVlcykKKworLyoKICAqIEJpYXMgbGV2ZWxzCiAgKgogICogQE9OOiAgICAgIEJpYXMgaXMgZnVsbHkgb24gZm9yIGF1ZGlvIHBsYXliYWNrIGFuZCBjYXB0dXJlIG9wZXJhdGlvbnMuCkBAIC0yNTMsNiArMjcwLDkgQEAKIC8qIGNvZGVjIHJlZ2lzdGVyIGJpdCBhY2Nlc3MgKi8KIGludCBzbmRfc29jX3VwZGF0ZV9iaXRzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgc2hvcnQgcmVnLAogCQkJCXVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgdmFsdWUpOworaW50IHNuZF9zb2NfdXBkYXRlX2JpdHNfbG9ja2VkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIGludCBtYXNrLAorCQkJICAgICAgIHVuc2lnbmVkIGludCB2YWx1ZSk7CiBpbnQgc25kX3NvY190ZXN0X2JpdHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBzaG9ydCByZWcsCiAJCQkJdW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCB2YWx1ZSk7CiAKQEAgLTQwMiw2ICs0MjIsMTAgQEAKIAlzaG9ydCByZWdfY2FjaGVfc2l6ZTsKIAlzaG9ydCByZWdfY2FjaGVfc3RlcDsKIAorCXVuc2lnbmVkIGludCBpZGxlX2JpYXNfb2ZmOjE7IC8qIFVzZSBCSUFTX09GRiBpbnN0ZWFkIG9mIFNUQU5EQlkgKi8KKwl1bnNpZ25lZCBpbnQgY2FjaGVfb25seToxOyAgLyogU3VwcHJlc3Mgd3JpdGVzIHRvIGhhcmR3YXJlICovCisJdW5zaWduZWQgaW50IGNhY2hlX3N5bmM6MTsgLyogQ2FjaGUgbmVlZHMgdG8gYmUgc3luY2VkIHRvIGhhcmR3YXJlICovCisKIAkvKiBkYXBtICovCiAJdTMyIHBvcF90aW1lOwogCXN0cnVjdCBsaXN0X2hlYWQgZGFwbV93aWRnZXRzOwpAQCAtNDk3LDYgKzUyMSw4IEBACiAJaW50ICgqc2V0X2JpYXNfbGV2ZWwpKHN0cnVjdCBzbmRfc29jX2NhcmQgKiwKIAkJCSAgICAgIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKTsKIAorCWxvbmcgcG1kb3duX3RpbWU7CisKIAkvKiBDUFUgPC0tPiBDb2RlYyBEQUkgbGlua3MgICovCiAJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKmRhaV9saW5rOwogCWludCBudW1fbGlua3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3RsdjMyMGRhYzMzLXBsYXQuaCBiL2luY2x1ZGUvc291bmQvdGx2MzIwZGFjMzMtcGxhdC5oCmluZGV4IDU4NThkMDYuLmFjMDY2NTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvdGx2MzIwZGFjMzMtcGxhdC5oCisrKyBiL2luY2x1ZGUvc291bmQvdGx2MzIwZGFjMzMtcGxhdC5oCkBAIC0xNSw2ICsxNSw3IEBACiAKIHN0cnVjdCB0bHYzMjBkYWMzM19wbGF0Zm9ybV9kYXRhIHsKIAlpbnQgcG93ZXJfZ3BpbzsKKwl1OCBidXJzdF9iY2xrZGl2OwogfTsKIAogI2VuZGlmIC8qIF9fVExWMzIwREFDMzNfUExBVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3RwYTYxMzBhMi1wbGF0LmggYi9pbmNsdWRlL3NvdW5kL3RwYTYxMzBhMi1wbGF0LmgKaW5kZXggZThjOTAxZS4uZTI5ZmRlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC90cGE2MTMwYTItcGxhdC5oCisrKyBiL2luY2x1ZGUvc291bmQvdHBhNjEzMGEyLXBsYXQuaApAQCAtMjMsNyArMjMsMTMgQEAKICNpZm5kZWYgVFBBNjEzMEEyX1BMQVRfSAogI2RlZmluZSBUUEE2MTMwQTJfUExBVF9ICiAKK2VudW0gdHBhX21vZGVsIHsKKwlUUEE2MTMwQTIsCisJVFBBNjE0MEEyLAorfTsKKwogc3RydWN0IHRwYTYxMzBhMl9wbGF0Zm9ybV9kYXRhIHsKKwllbnVtIHRwYV9tb2RlbCBpZDsKIAlpbnQgcG93ZXJfZ3BpbzsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oIGIvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKaW5kZXggMjI5MzkxNC4uN2ZlZDIzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKKysrIGIvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKQEAgLTEsMyArMSwzIEBACiAvKiBpbmNsdWRlL3ZlcnNpb24uaCAqLwotI2RlZmluZSBDT05GSUdfU05EX1ZFUlNJT04gIjEuMC4yMSIKKyNkZWZpbmUgQ09ORklHX1NORF9WRVJTSU9OICIxLjAuMjIuMSIKICNkZWZpbmUgQ09ORklHX1NORF9EQVRFICIiCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3dtMjAwMC5oIGIvaW5jbHVkZS9zb3VuZC93bTIwMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTM4OGNhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9zb3VuZC93bTIwMDAuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogbGludXgvc291bmQvd20yMDAwLmggLS0gUGxhdGZvcm0gZGF0YSBmb3IgV00yMDAwCisgKgorICogQ29weXJpZ2h0IDIwMTAgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzLiBQTEMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfU05EX1dNMjAwMF9ICisjZGVmaW5lIF9fTElOVVhfU05EX1dNMjAwMF9ICisKK3N0cnVjdCB3bTIwMDBfcGxhdGZvcm1fZGF0YSB7CisJLyoqIEZpbGVuYW1lIGZvciBzeXN0ZW0tc3BlY2lmaWMgaW1hZ2UgdG8gZG93bmxvYWQgdG8gZGV2aWNlLiAqLworCWNvbnN0IGNoYXIgKmRvd25sb2FkX2ZpbGU7CisKKwkvKiogRGl2aWRlIE1DTEsgYnkgMiBmb3Igc3lzdGVtIGNsb2NrPyAqLworCXVuc2lnbmVkIGludCBtY2xrZGl2MjoxOworCisJLyoqIERpc2FibGUgc3BlZWNoIGNsYXJpdHkgZW5oYW5jZW1lbnQsIGZvciB1c2Ugd2hlbiBhbgorCSAqIGV4dGVybmFsIGFsZ29yaXRobSBpcyB1c2VkLiAqLworCXVuc2lnbmVkIGludCBzcGVlY2hfZW5oX2Rpc2FibGU6MTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC93bTg5MDQuaCBiL2luY2x1ZGUvc291bmQvd204OTA0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY2NTc1YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvd204OTA0LmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIFBsYXRmb3JtIGRhdGEgZm9yIFdNODkwNAorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX01GRF9XTTg5OTRfUERBVEFfSF9fCisjZGVmaW5lIF9fTUZEX1dNODk5NF9QREFUQV9IX18KKworI2RlZmluZSBXTTg5MDRfRFJDX1JFR1MgNAorI2RlZmluZSBXTTg5MDRfRVFfUkVHUyAgMjUKKworLyoqCisgKiBEUkMgY29uZmlndXJhdGlvbnMgYXJlIHNwZWNpZmllZCB3aXRoIGEgbGFiZWwgYW5kIGEgc2V0IG9mIHJlZ2lzdGVyCisgKiB2YWx1ZXMgdG8gd3JpdGUgKHRoZSBlbmFibGUgYml0cyB3aWxsIGJlIGlnbm9yZWQpLiAgQXQgcnVudGltZSBhbgorICogZW51bWVyYXRlZCBjb250cm9sIHdpbGwgYmUgcHJlc2VudGVkIGZvciBlYWNoIERSQyBibG9jayBhbGxvd2luZworICogdGhlIHVzZXIgdG8gY2hvb3NlIHRoZSBjb25maWdyYXRpb24gdG8gdXNlLgorICoKKyAqIENvbmZpZ3VyYXRpb25zIG1heSBiZSBnZW5lcmF0ZWQgYnkgaGFuZCBvciBieSB1c2luZyB0aGUgRFJDIGNvbnRyb2wKKyAqIHBhbmVsIHByb3ZpZGVkIGJ5IHRoZSBXSVNDRSAtIHNlZSAgaHR0cDovL3d3dy53b2xmc29ubWljcm8uY29tL3dpc2NlLworICogZm9yIGRldGFpbHMuCisgKi8KK3N0cnVjdCB3bTg5MDRfZHJjX2NmZyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1MTYgcmVnc1tXTTg5MDRfRFJDX1JFR1NdOworfTsKKworLyoqCisgKiBSZVR1bmUgTW9iaWxlIGNvbmZpZ3VyYXRpb25zIGFyZSBzcGVjaWZpZWQgd2l0aCBhIGxhYmVsLCBzYW1wbGUKKyAqIHJhdGUgYW5kIHNldCBvZiB2YWx1ZXMgdG8gd3JpdGUgKHRoZSBlbmFibGUgYml0cyB3aWxsIGJlIGlnbm9yZWQpLgorICoKKyAqIENvbmZpZ3VyYXRpb25zIGFyZSBleHBlY3RlZCB0byBiZSBnZW5lcmF0ZWQgdXNpbmcgdGhlIFJlVHVuZSBNb2JpbGUKKyAqIGNvbnRyb2wgcGFuZWwgaW4gV0lTQ0UgLSBzZWUgaHR0cDovL3d3dy53b2xmc29ubWljcm8uY29tL3dpc2NlLworICovCitzdHJ1Y3Qgd204OTA0X3JldHVuZV9tb2JpbGVfY2ZnIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCByYXRlOworCXUxNiByZWdzW1dNODkwNF9FUV9SRUdTXTsKK307CisKK3N0cnVjdCB3bTg5MDRfcGRhdGEgeworCWludCBudW1fZHJjX2NmZ3M7CisJc3RydWN0IHdtODkwNF9kcmNfY2ZnICpkcmNfY2ZnczsKKworCWludCBudW1fcmV0dW5lX21vYmlsZV9jZmdzOworCXN0cnVjdCB3bTg5MDRfcmV0dW5lX21vYmlsZV9jZmcgKnJldHVuZV9tb2JpbGVfY2ZnczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC93bTg5NTUuaCBiL2luY2x1ZGUvc291bmQvd204OTU1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA3NGVmNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvd204OTU1LmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIFBsYXRmb3JtIGRhdGEgZm9yIFdNODk1NQorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX1dNODk1NV9QREFUQV9IX18KKyNkZWZpbmUgX19XTTg5NTVfUERBVEFfSF9fCisKK3N0cnVjdCB3bTg5NTVfcGRhdGEgeworCS8qIENvbmZpZ3VyZSBMT1VUMi9ST1VUMiB0byBkcml2ZSBhIHNwZWFrZXIgKi8KKwl1bnNpZ25lZCBpbnQgb3V0Ml9zcGVha2VyOjE7CisKKwkvKiBDb25maWd1cmUgTU9OT0lOKy8tIGluIGRpZmZlcmVudGlhbCBtb2RlICovCisJdW5zaWduZWQgaW50IG1vbm9pbl9kaWZmOjE7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2xvY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2xvY2suaAppbmRleCBhODcwYmExLi41YzFkY2ZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9sb2NrLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbG9jay5oCkBAIC0yMCwxNCArMjAsMTcgQEAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX2ZpZWxkKHVuc2lnbmVkIGludCwgZmxhZ3MpCiAJCV9fc3RyaW5nKG5hbWUsIGxvY2stPm5hbWUpCisJCV9fZmllbGQodm9pZCAqLCBsb2NrZGVwX2FkZHIpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAogCQlfX2VudHJ5LT5mbGFncyA9ICh0cnlsb2NrID8gMSA6IDApIHwgKHJlYWQgPyAyIDogMCk7CiAJCV9fYXNzaWduX3N0cihuYW1lLCBsb2NrLT5uYW1lKTsKKwkJX19lbnRyeS0+bG9ja2RlcF9hZGRyID0gbG9jazsKIAkpLAogCi0JVFBfcHJpbnRrKCIlcyVzJXMiLCAoX19lbnRyeS0+ZmxhZ3MgJiAxKSA/ICJ0cnkgIiA6ICIiLAorCVRQX3ByaW50aygiJXAgJXMlcyVzIiwgX19lbnRyeS0+bG9ja2RlcF9hZGRyLAorCQkgIChfX2VudHJ5LT5mbGFncyAmIDEpID8gInRyeSAiIDogIiIsCiAJCSAgKF9fZW50cnktPmZsYWdzICYgMikgPyAicmVhZCAiIDogIiIsCiAJCSAgX19nZXRfc3RyKG5hbWUpKQogKTsKQEAgLTQwLDEzICs0MywxNiBAQAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19zdHJpbmcobmFtZSwgbG9jay0+bmFtZSkKKwkJX19maWVsZCh2b2lkICosIGxvY2tkZXBfYWRkcikKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCiAJCV9fYXNzaWduX3N0cihuYW1lLCBsb2NrLT5uYW1lKTsKKwkJX19lbnRyeS0+bG9ja2RlcF9hZGRyID0gbG9jazsKIAkpLAogCi0JVFBfcHJpbnRrKCIlcyIsIF9fZ2V0X3N0cihuYW1lKSkKKwlUUF9wcmludGsoIiVwICVzIiwKKwkJICBfX2VudHJ5LT5sb2NrZGVwX2FkZHIsIF9fZ2V0X3N0cihuYW1lKSkKICk7CiAKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCkBAIC01OSwxMyArNjUsMTYgQEAKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCV9fc3RyaW5nKG5hbWUsIGxvY2stPm5hbWUpCisJCV9fZmllbGQodm9pZCAqLCBsb2NrZGVwX2FkZHIpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAogCQlfX2Fzc2lnbl9zdHIobmFtZSwgbG9jay0+bmFtZSk7CisJCV9fZW50cnktPmxvY2tkZXBfYWRkciA9IGxvY2s7CiAJKSwKIAotCVRQX3ByaW50aygiJXMiLCBfX2dldF9zdHIobmFtZSkpCisJVFBfcHJpbnRrKCIlcCAlcyIsCisJCSAgX19lbnRyeS0+bG9ja2RlcF9hZGRyLCBfX2dldF9zdHIobmFtZSkpCiApOwogCiBUUkFDRV9FVkVOVChsb2NrX2FjcXVpcmVkLApAQCAtNzUsMTYgKzg0LDE4IEBACiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX3N0cmluZyhuYW1lLCBsb2NrLT5uYW1lKQotCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIHdhaXRfdXNlYykKLQkJX19maWVsZCh1bnNpZ25lZCBsb25nLCB3YWl0X25zZWNfcmVtKQorCQlfX2ZpZWxkKHM2NCwgd2FpdF9uc2VjKQorCQlfX2ZpZWxkKHZvaWQgKiwgbG9ja2RlcF9hZGRyKQogCSksCisKIAlUUF9mYXN0X2Fzc2lnbigKIAkJX19hc3NpZ25fc3RyKG5hbWUsIGxvY2stPm5hbWUpOwotCQlfX2VudHJ5LT53YWl0X25zZWNfcmVtID0gZG9fZGl2KHdhaXR0aW1lLCBOU0VDX1BFUl9VU0VDKTsKLQkJX19lbnRyeS0+d2FpdF91c2VjID0gKHVuc2lnbmVkIGxvbmcpIHdhaXR0aW1lOworCQlfX2VudHJ5LT53YWl0X25zZWMgPSB3YWl0dGltZTsKKwkJX19lbnRyeS0+bG9ja2RlcF9hZGRyID0gbG9jazsKIAkpLAotCVRQX3ByaW50aygiJXMgKCVsdS4lMDNsdSB1cykiLCBfX2dldF9zdHIobmFtZSksIF9fZW50cnktPndhaXRfdXNlYywKLQkJCQkgICAgICAgX19lbnRyeS0+d2FpdF9uc2VjX3JlbSkKKwlUUF9wcmludGsoIiVwICVzICglbGx1IG5zKSIsIF9fZW50cnktPmxvY2tkZXBfYWRkciwKKwkJICBfX2dldF9zdHIobmFtZSksCisJCSAgX19lbnRyeS0+d2FpdF9uc2VjKQogKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oIGIvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAppbmRleCBjNmZlMDNlLi4wODA0Y2Q1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKQEAgLTY1LDcgKzY1LDggQEAKIAl9OwogI3VuZGVmIERFRklORV9FVkVOVAogI2RlZmluZSBERUZJTkVfRVZFTlQodGVtcGxhdGUsIG5hbWUsIHByb3RvLCBhcmdzKQlcCi0Jc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBldmVudF8jI25hbWUKKwlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsCQkJXAorCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkgZXZlbnRfIyNuYW1lCiAKICN1bmRlZiBERUZJTkVfRVZFTlRfUFJJTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UX1BSSU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncywgcHJpbnQpCVwKQEAgLTEzMSwxMzAgKzEzMiw2IEBACiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKIAogLyoKLSAqIFNldHVwIHRoZSBzaG93aW5nIGZvcm1hdCBvZiB0cmFjZSBwb2ludC4KLSAqCi0gKiBpbnQKLSAqIGZ0cmFjZV9mb3JtYXRfIyNjYWxsKHN0cnVjdCB0cmFjZV9zZXEgKnMpCi0gKiB7Ci0gKglzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgZmllbGQ7Ci0gKglpbnQgcmV0OwotICoKLSAqCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgI3R5cGUgIiAiICNpdGVtICI7IgotICoJCQkgICAgICAgIiBvZmZzZXQ6JXU7IHNpemU6JXU7XG4iLAotICoJCQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsLCBpdGVtKSwKLSAqCQkJICAgICAgIHNpemVvZihmaWVsZC50eXBlKSk7Ci0gKgotICogfQotICovCi0KLSN1bmRlZiBUUF9TVFJVQ1RfX2VudHJ5Ci0jZGVmaW5lIFRQX1NUUlVDVF9fZW50cnkoYXJncy4uLikgYXJncwotCi0jdW5kZWYgX19maWVsZAotI2RlZmluZSBfX2ZpZWxkKHR5cGUsIGl0ZW0pCQkJCQlcCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgIiAjaXRlbSAiO1x0IglcCi0JCQkgICAgICAgIm9mZnNldDoldTtcdHNpemU6JXU7XHRzaWduZWQ6JXU7XG4iLAlcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwgXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpc2l6ZW9mKGZpZWxkLml0ZW0pLAlcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClpc19zaWduZWRfdHlwZSh0eXBlKSk7CVwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gMDsKLQotI3VuZGVmIF9fZmllbGRfZXh0Ci0jZGVmaW5lIF9fZmllbGRfZXh0KHR5cGUsIGl0ZW0sIGZpbHRlcl90eXBlKQlfX2ZpZWxkKHR5cGUsIGl0ZW0pCi0KLSN1bmRlZiBfX2FycmF5Ci0jZGVmaW5lIF9fYXJyYXkodHlwZSwgaXRlbSwgbGVuKQkJCQkJCVwKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAiICNpdGVtICJbIiAjbGVuICJdO1x0IglcCi0JCQkgICAgICAgIm9mZnNldDoldTtcdHNpemU6JXU7XHRzaWduZWQ6JXU7XG4iLAlcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwgXAotCQkJICAgICAgICh1bnNpZ25lZCBpbnQpc2l6ZW9mKGZpZWxkLml0ZW0pLAlcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClpc19zaWduZWRfdHlwZSh0eXBlKSk7CVwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gMDsKLQotI3VuZGVmIF9fZHluYW1pY19hcnJheQotI2RlZmluZSBfX2R5bmFtaWNfYXJyYXkodHlwZSwgaXRlbSwgbGVuKQkJCQkgICAgICAgXAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6X19kYXRhX2xvYyAiICN0eXBlICJbXSAiICNpdGVtICI7XHQiXAotCQkJICAgICAgICJvZmZzZXQ6JXU7XHRzaXplOiV1O1x0c2lnbmVkOiV1O1xuIiwJICAgICAgIFwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KW9mZnNldG9mKHR5cGVvZihmaWVsZCksCSAgICAgICBcCi0JCQkJCV9fZGF0YV9sb2NfIyNpdGVtKSwJCSAgICAgICBcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClzaXplb2YoZmllbGQuX19kYXRhX2xvY18jI2l0ZW0pLCBcCi0JCQkgICAgICAgKHVuc2lnbmVkIGludClpc19zaWduZWRfdHlwZSh0eXBlKSk7CVwKLQlpZiAoIXJldCkJCQkJCQkJICAgICAgIFwKLQkJcmV0dXJuIDA7Ci0KLSN1bmRlZiBfX3N0cmluZwotI2RlZmluZSBfX3N0cmluZyhpdGVtLCBzcmMpIF9fZHluYW1pY19hcnJheShjaGFyLCBpdGVtLCAtMSkKLQotI3VuZGVmIF9fZW50cnkKLSNkZWZpbmUgX19lbnRyeSBSRUMKLQotI3VuZGVmIF9fcHJpbnRfc3ltYm9saWMKLSN1bmRlZiBfX2dldF9keW5hbWljX2FycmF5Ci0jdW5kZWYgX19nZXRfc3RyCi0KLSN1bmRlZiBUUF9wcmludGsKLSNkZWZpbmUgVFBfcHJpbnRrKGZtdCwgYXJncy4uLikgIlwiJXNcIiwgJXNcbiIsIGZtdCwgX19zdHJpbmdpZnkoYXJncykKLQotI3VuZGVmIFRQX2Zhc3RfYXNzaWduCi0jZGVmaW5lIFRQX2Zhc3RfYXNzaWduKGFyZ3MuLi4pIGFyZ3MKLQotI3VuZGVmIFRQX3BlcmZfYXNzaWduCi0jZGVmaW5lIFRQX3BlcmZfYXNzaWduKGFyZ3MuLi4pCi0KLSN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCi0jZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGZ1bmMsIHByaW50KQlcCi1zdGF0aWMgaW50CQkJCQkJCQlcCi1mdHJhY2VfZm9ybWF0X3NldHVwXyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCwJCVwKLQkJCSAgIHN0cnVjdCB0cmFjZV9zZXEgKnMpCQkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsIGZpZWxkIF9fYXR0cmlidXRlX18oKHVudXNlZCkpOwkJXAotCWludCByZXQgPSAwOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JdHN0cnVjdDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCXJldHVybiByZXQ7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1zdGF0aWMgaW50CQkJCQkJCQlcCi1mdHJhY2VfZm9ybWF0XyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCwJCQlcCi0JCSAgICAgc3RydWN0IHRyYWNlX3NlcSAqcykJCQkJXAotewkJCQkJCQkJCVwKLQlpbnQgcmV0ID0gMDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCXJldCA9IGZ0cmFjZV9mb3JtYXRfc2V0dXBfIyNjYWxsKHVudXNlZCwgcyk7CQkJXAotCWlmICghcmV0KQkJCQkJCQlcCi0JCXJldHVybiByZXQ7CQkJCQkJXAotCQkJCQkJCQkJXAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiAiIHByaW50KTsJCVwKLQkJCQkJCQkJCVwKLQlyZXR1cm4gcmV0OwkJCQkJCQlcCi19Ci0KLSN1bmRlZiBERUZJTkVfRVZFTlQKLSNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncykKLQotI3VuZGVmIERFRklORV9FVkVOVF9QUklOVAotI2RlZmluZSBERUZJTkVfRVZFTlRfUFJJTlQodGVtcGxhdGUsIG5hbWUsIHByb3RvLCBhcmdzLCBwcmludCkJCVwKLXN0YXRpYyBpbnQJCQkJCQkJCVwKLWZ0cmFjZV9mb3JtYXRfIyNuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkLAkJCVwKLQkJICAgICAgc3RydWN0IHRyYWNlX3NlcSAqcykJCQkJXAotewkJCQkJCQkJCVwKLQlpbnQgcmV0ID0gMDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCXJldCA9IGZ0cmFjZV9mb3JtYXRfc2V0dXBfIyN0ZW1wbGF0ZSh1bnVzZWQsIHMpOwkJXAotCWlmICghcmV0KQkJCQkJCQlcCi0JCXJldHVybiByZXQ7CQkJCQkJXAotCQkJCQkJCQkJXAotCXRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiAiIHByaW50KTsJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHJldDsJCQkJCQkJXAotfQotCi0jaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKLQotLyoKICAqIFN0YWdlIDMgb2YgdGhlIHRyYWNlIGV2ZW50cy4KICAqCiAgKiBPdmVycmlkZSB0aGUgbWFjcm9zIGluIDx0cmFjZS90cmFjZV9ldmVudHMuaD4gdG8gaW5jbHVkZSB0aGUgZm9sbG93aW5nOgpAQCAtMzIzLDcgKzIwMCw3IEBACiAKICN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCiAjZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCVwKLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAkJCQkJCVwKK3N0YXRpYyBub3RyYWNlIGVudW0gcHJpbnRfbGluZV90CQkJCQlcCiBmdHJhY2VfcmF3X291dHB1dF9pZF8jI2NhbGwoaW50IGV2ZW50X2lkLCBjb25zdCBjaGFyICpuYW1lLAkJXAogCQkJICAgIHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQlcCiB7CQkJCQkJCQkJXApAQCAtMzU2LDcgKzIzMyw3IEBACiAKICN1bmRlZiBERUZJTkVfRVZFTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBuYW1lLCBwcm90bywgYXJncykJCQlcCi1zdGF0aWMgZW51bSBwcmludF9saW5lX3QJCQkJCQlcCitzdGF0aWMgbm90cmFjZSBlbnVtIHByaW50X2xpbmVfdAkJCQkJXAogZnRyYWNlX3Jhd19vdXRwdXRfIyNuYW1lKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQlcCiB7CQkJCQkJCQkJXAogCXJldHVybiBmdHJhY2VfcmF3X291dHB1dF9pZF8jI3RlbXBsYXRlKGV2ZW50XyMjbmFtZS5pZCwJCVwKQEAgLTM2NSw3ICsyNDIsNyBAQAogCiAjdW5kZWYgREVGSU5FX0VWRU5UX1BSSU5UCiAjZGVmaW5lIERFRklORV9FVkVOVF9QUklOVCh0ZW1wbGF0ZSwgY2FsbCwgcHJvdG8sIGFyZ3MsIHByaW50KQkJXAotc3RhdGljIGVudW0gcHJpbnRfbGluZV90CQkJCQkJXAorc3RhdGljIG5vdHJhY2UgZW51bSBwcmludF9saW5lX3QJCQkJCVwKIGZ0cmFjZV9yYXdfb3V0cHV0XyMjY2FsbChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsJCQkJXApAQCAtNDMxLDcgKzMwOCw3IEBACiAKICN1bmRlZiBERUNMQVJFX0VWRU5UX0NMQVNTCiAjZGVmaW5lIERFQ0xBUkVfRVZFTlRfQ0xBU1MoY2FsbCwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGZ1bmMsIHByaW50KQlcCi1zdGF0aWMgaW50CQkJCQkJCQlcCitzdGF0aWMgaW50IG5vdHJhY2UJCQkJCQkJXAogZnRyYWNlX2RlZmluZV9maWVsZHNfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCkJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgZmllbGQ7CQkJCQlcCkBAIC00NzksNyArMzU2LDcgQEAKIAogI3VuZGVmIERFQ0xBUkVfRVZFTlRfQ0xBU1MKICNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJXAotc3RhdGljIGlubGluZSBpbnQgZnRyYWNlX2dldF9vZmZzZXRzXyMjY2FsbCgJCQkJXAorc3RhdGljIGlubGluZSBub3RyYWNlIGludCBmdHJhY2VfZ2V0X29mZnNldHNfIyNjYWxsKAkJCVwKIAlzdHJ1Y3QgZnRyYWNlX2RhdGFfb2Zmc2V0c18jI2NhbGwgKl9fZGF0YV9vZmZzZXRzLCBwcm90bykgICAgICAgXAogewkJCQkJCQkJCVwKIAlpbnQgX19kYXRhX3NpemUgPSAwOwkJCQkJCVwKQEAgLTQ5OSw3ICszNzYsNyBAQAogCiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKIAotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiAKIC8qCiAgKiBHZW5lcmF0ZSB0aGUgZnVuY3Rpb25zIG5lZWRlZCBmb3IgdHJhY2Vwb2ludCBwZXJmX2V2ZW50IHN1cHBvcnQuCkBAIC01MjYsMTIgKzQwMywxNCBAQAogCQkJCQkJCQkJXAogc3RhdGljIHZvaWQgZnRyYWNlX3Byb2ZpbGVfIyNuYW1lKHByb3RvKTsJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIGludCBmdHJhY2VfcHJvZmlsZV9lbmFibGVfIyNuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKVwKK3N0YXRpYyBub3RyYWNlIGludAkJCQkJCQlcCitmdHJhY2VfcHJvZmlsZV9lbmFibGVfIyNuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKQkJXAogewkJCQkJCQkJCVwKIAlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VfIyNuYW1lKGZ0cmFjZV9wcm9maWxlXyMjbmFtZSk7CQlcCiB9CQkJCQkJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIHZvaWQgZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZV8jI25hbWUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp1bnVzZWQpXAorc3RhdGljIG5vdHJhY2Ugdm9pZAkJCQkJCQlcCitmdHJhY2VfcHJvZmlsZV9kaXNhYmxlXyMjbmFtZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZCkJCVwKIHsJCQkJCQkJCQlcCiAJdW5yZWdpc3Rlcl90cmFjZV8jI25hbWUoZnRyYWNlX3Byb2ZpbGVfIyNuYW1lKTsJCQlcCiB9CkBAIC01NDIsNyArNDIxLDcgQEAKIAogI2luY2x1ZGUgVFJBQ0VfSU5DTFVERShUUkFDRV9JTkNMVURFX0ZJTEUpCiAKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLwogCiAvKgogICogU3RhZ2UgNCBvZiB0aGUgdHJhY2UgZXZlbnRzLgpAQCAtNjIyLDEyICs1MDEsMTEgQEAKICAqCS5yYXdfaW5pdAkJPSB0cmFjZV9ldmVudF9yYXdfaW5pdCwKICAqCS5yZWdmdW5jCQk9IGZ0cmFjZV9yZWdfZXZlbnRfPGNhbGw+LAogICoJLnVucmVnZnVuYwkJPSBmdHJhY2VfdW5yZWdfZXZlbnRfPGNhbGw+LAotICoJLnNob3dfZm9ybWF0CQk9IGZ0cmFjZV9mb3JtYXRfPGNhbGw+LAogICogfQogICoKICAqLwogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAogI2RlZmluZSBfVFJBQ0VfUFJPRklMRV9JTklUKGNhbGwpCQkJCQlcCiAJLnByb2ZpbGVfZW5hYmxlID0gZnRyYWNlX3Byb2ZpbGVfZW5hYmxlXyMjY2FsbCwJCQlcCkBAIC02MzUsNyArNTEzLDcgQEAKIAogI2Vsc2UKICNkZWZpbmUgX1RSQUNFX1BST0ZJTEVfSU5JVChjYWxsKQotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1BFUkZfRVZFTlRTICovCiAKICN1bmRlZiBfX2VudHJ5CiAjZGVmaW5lIF9fZW50cnkgZW50cnkKQEAgLTY1NywxMCArNTM1LDE3IEBACiAjZGVmaW5lIF9fYXNzaWduX3N0cihkc3QsIHNyYykJCQkJCQlcCiAJc3RyY3B5KF9fZ2V0X3N0cihkc3QpLCBzcmMpOwogCisjdW5kZWYgVFBfZmFzdF9hc3NpZ24KKyNkZWZpbmUgVFBfZmFzdF9hc3NpZ24oYXJncy4uLikgYXJncworCisjdW5kZWYgVFBfcGVyZl9hc3NpZ24KKyNkZWZpbmUgVFBfcGVyZl9hc3NpZ24oYXJncy4uLikKKwogI3VuZGVmIERFQ0xBUkVfRVZFTlRfQ0xBU1MKICNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJXAogCQkJCQkJCQkJXAotc3RhdGljIHZvaWQgZnRyYWNlX3Jhd19ldmVudF9pZF8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsLCBcCitzdGF0aWMgbm90cmFjZSB2b2lkCQkJCQkJCVwKK2Z0cmFjZV9yYXdfZXZlbnRfaWRfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCwJXAogCQkJCSAgICAgICBwcm90bykJCQkJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgZnRyYWNlX2RhdGFfb2Zmc2V0c18jI2NhbGwgX19tYXliZV91bnVzZWQgX19kYXRhX29mZnNldHM7XApAQCAtNjk3LDE3ICs1ODIsMTkgQEAKICN1bmRlZiBERUZJTkVfRVZFTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBjYWxsLCBwcm90bywgYXJncykJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgdm9pZCBmdHJhY2VfcmF3X2V2ZW50XyMjY2FsbChwcm90bykJCQkJXAorc3RhdGljIG5vdHJhY2Ugdm9pZCBmdHJhY2VfcmF3X2V2ZW50XyMjY2FsbChwcm90bykJCQlcCiB7CQkJCQkJCQkJXAogCWZ0cmFjZV9yYXdfZXZlbnRfaWRfIyN0ZW1wbGF0ZSgmZXZlbnRfIyNjYWxsLCBhcmdzKTsJCVwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgaW50IGZ0cmFjZV9yYXdfcmVnX2V2ZW50XyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZClcCitzdGF0aWMgbm90cmFjZSBpbnQJCQkJCQkJXAorZnRyYWNlX3Jhd19yZWdfZXZlbnRfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKQkJXAogewkJCQkJCQkJCVwKIAlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VfIyNjYWxsKGZ0cmFjZV9yYXdfZXZlbnRfIyNjYWxsKTsJCVwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgdm9pZCBmdHJhY2VfcmF3X3VucmVnX2V2ZW50XyMjY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnVudXNlZClcCitzdGF0aWMgbm90cmFjZSB2b2lkCQkJCQkJCVwKK2Z0cmFjZV9yYXdfdW5yZWdfZXZlbnRfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkKQkJXAogewkJCQkJCQkJCVwKIAl1bnJlZ2lzdGVyX3RyYWNlXyMjY2FsbChmdHJhY2VfcmF3X2V2ZW50XyMjY2FsbCk7CQlcCiB9CQkJCQkJCQkJXApAQCAtNzIyLDggKzYwOSwyMCBAQAogCiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKIAorI3VuZGVmIF9fZW50cnkKKyNkZWZpbmUgX19lbnRyeSBSRUMKKworI3VuZGVmIF9fcHJpbnRfZmxhZ3MKKyN1bmRlZiBfX3ByaW50X3N5bWJvbGljCisjdW5kZWYgX19nZXRfZHluYW1pY19hcnJheQorI3VuZGVmIF9fZ2V0X3N0cgorCisjdW5kZWYgVFBfcHJpbnRrCisjZGVmaW5lIFRQX3ByaW50ayhmbXQsIGFyZ3MuLi4pICJcIiIgZm10ICJcIiwgIiAgX19zdHJpbmdpZnkoYXJncykKKwogI3VuZGVmIERFQ0xBUkVfRVZFTlRfQ0xBU1MKLSNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkKKyNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJXAorc3RhdGljIGNvbnN0IGNoYXIgcHJpbnRfZm10XyMjY2FsbFtdID0gcHJpbnQ7CiAKICN1bmRlZiBERUZJTkVfRVZFTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBjYWxsLCBwcm90bywgYXJncykJCQlcCkBAIC03MzcsNyArNjM2LDcgQEAKIAkucmF3X2luaXQJCT0gdHJhY2VfZXZlbnRfcmF3X2luaXQsCQkJXAogCS5yZWdmdW5jCQk9IGZ0cmFjZV9yYXdfcmVnX2V2ZW50XyMjY2FsbCwJCVwKIAkudW5yZWdmdW5jCQk9IGZ0cmFjZV9yYXdfdW5yZWdfZXZlbnRfIyNjYWxsLAlcCi0JLnNob3dfZm9ybWF0CQk9IGZ0cmFjZV9mb3JtYXRfIyN0ZW1wbGF0ZSwJCVwKKwkucHJpbnRfZm10CQk9IHByaW50X2ZtdF8jI3RlbXBsYXRlLAkJCVwKIAkuZGVmaW5lX2ZpZWxkcwkJPSBmdHJhY2VfZGVmaW5lX2ZpZWxkc18jI3RlbXBsYXRlLAlcCiAJX1RSQUNFX1BST0ZJTEVfSU5JVChjYWxsKQkJCQkJXAogfQpAQCAtNzQ1LDYgKzY0NCw4IEBACiAjdW5kZWYgREVGSU5FX0VWRU5UX1BSSU5UCiAjZGVmaW5lIERFRklORV9FVkVOVF9QUklOVCh0ZW1wbGF0ZSwgY2FsbCwgcHJvdG8sIGFyZ3MsIHByaW50KQkJXAogCQkJCQkJCQkJXAorc3RhdGljIGNvbnN0IGNoYXIgcHJpbnRfZm10XyMjY2FsbFtdID0gcHJpbnQ7CQkJCVwKKwkJCQkJCQkJCVwKIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQlcCiBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCQkJXAogX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XyMjY2FsbCA9IHsJCVwKQEAgLTc1NCw3ICs2NTUsNyBAQAogCS5yYXdfaW5pdAkJPSB0cmFjZV9ldmVudF9yYXdfaW5pdCwJCQlcCiAJLnJlZ2Z1bmMJCT0gZnRyYWNlX3Jhd19yZWdfZXZlbnRfIyNjYWxsLAkJXAogCS51bnJlZ2Z1bmMJCT0gZnRyYWNlX3Jhd191bnJlZ19ldmVudF8jI2NhbGwsCVwKLQkuc2hvd19mb3JtYXQJCT0gZnRyYWNlX2Zvcm1hdF8jI2NhbGwsCQkJXAorCS5wcmludF9mbXQJCT0gcHJpbnRfZm10XyMjY2FsbCwJCQlcCiAJLmRlZmluZV9maWVsZHMJCT0gZnRyYWNlX2RlZmluZV9maWVsZHNfIyN0ZW1wbGF0ZSwJXAogCV9UUkFDRV9QUk9GSUxFX0lOSVQoY2FsbCkJCQkJCVwKIH0KQEAgLTgzNSw3ICs3MzYsMTcgQEAKICAqIH0KICAqLwogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKKworI3VuZGVmIF9fZW50cnkKKyNkZWZpbmUgX19lbnRyeSBlbnRyeQorCisjdW5kZWYgX19nZXRfZHluYW1pY19hcnJheQorI2RlZmluZSBfX2dldF9keW5hbWljX2FycmF5KGZpZWxkKQlcCisJCSgodm9pZCAqKV9fZW50cnkgKyAoX19lbnRyeS0+X19kYXRhX2xvY18jI2ZpZWxkICYgMHhmZmZmKSkKKworI3VuZGVmIF9fZ2V0X3N0cgorI2RlZmluZSBfX2dldF9zdHIoZmllbGQpIChjaGFyICopX19nZXRfZHluYW1pY19hcnJheShmaWVsZCkKIAogI3VuZGVmIF9fcGVyZl9hZGRyCiAjZGVmaW5lIF9fcGVyZl9hZGRyKGEpIF9fYWRkciA9IChhKQpAQCAtODQ1LDI3ICs3NTYsMTcgQEAKIAogI3VuZGVmIERFQ0xBUkVfRVZFTlRfQ0xBU1MKICNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJXAotc3RhdGljIHZvaWQJCQkJCQkJCVwKK3N0YXRpYyBub3RyYWNlIHZvaWQJCQkJCQkJXAogZnRyYWNlX3Byb2ZpbGVfdGVtcGxfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXZlbnRfY2FsbCwJXAogCQkJICAgIHByb3RvKQkJCQkJXAogewkJCQkJCQkJCVwKIAlzdHJ1Y3QgZnRyYWNlX2RhdGFfb2Zmc2V0c18jI2NhbGwgX19tYXliZV91bnVzZWQgX19kYXRhX29mZnNldHM7XAotCWV4dGVybiBpbnQgcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCh2b2lkKTsJCVwKLQlleHRlcm4gdm9pZCBwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KGludCByY3R4KTsJXAotCWV4dGVybiB2b2lkIHBlcmZfdHBfZXZlbnQoaW50LCB1NjQsIHU2NCwgdm9pZCAqLCBpbnQpOwkJXAogCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqZW50cnk7CQkJCVwKIAl1NjQgX19hZGRyID0gMCwgX19jb3VudCA9IDE7CQkJCQlcCiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CQkJCQlcCi0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnQ7CQkJCQlcCiAJaW50IF9fZW50cnlfc2l6ZTsJCQkJCQlcCiAJaW50IF9fZGF0YV9zaXplOwkJCQkJCVwKLQljaGFyICp0cmFjZV9idWY7CQkJCQkJXAotCWNoYXIgKnJhd19kYXRhOwkJCQkJCQlcCi0JaW50IF9fY3B1OwkJCQkJCQlcCiAJaW50IHJjdHg7CQkJCQkJCVwKLQlpbnQgcGM7CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JcGMgPSBwcmVlbXB0X2NvdW50KCk7CQkJCQkJXAogCQkJCQkJCQkJXAogCV9fZGF0YV9zaXplID0gZnRyYWNlX2dldF9vZmZzZXRzXyMjY2FsbCgmX19kYXRhX29mZnNldHMsIGFyZ3MpOyBcCiAJX19lbnRyeV9zaXplID0gQUxJR04oX19kYXRhX3NpemUgKyBzaXplb2YoKmVudHJ5KSArIHNpemVvZih1MzIpLFwKQEAgLTg3NSw0NyArNzc2LDIxIEBACiAJaWYgKFdBUk5fT05DRShfX2VudHJ5X3NpemUgPiBGVFJBQ0VfTUFYX1BST0ZJTEVfU0laRSwJCVwKIAkJICAgICAgInByb2ZpbGUgYnVmZmVyIG5vdCBsYXJnZSBlbm91Z2giKSkJCVwKIAkJcmV0dXJuOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsJCQkJCVwKLQkJCQkJCQkJCVwKLQlyY3R4ID0gcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCgpOwkJCVwKLQlpZiAocmN0eCA8IDApCQkJCQkJCVwKLQkJZ290byBlbmRfcmVjdXJzaW9uOwkJCQkJXAotCQkJCQkJCQkJXAotCV9fY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChpbl9ubWkoKSkJCQkJCQkJXAotCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWZfbm1pKTsJXAotCWVsc2UJCQkJCQkJCVwKLQkJdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmKTsJCVwKLQkJCQkJCQkJCVwKLQlpZiAoIXRyYWNlX2J1ZikJCQkJCQkJXAotCQlnb3RvIGVuZDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JcmF3X2RhdGEgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIF9fY3B1KTsJCQlcCi0JCQkJCQkJCQlcCi0JKih1NjQgKikoJnJhd19kYXRhW19fZW50cnlfc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOwkJXAotCWVudHJ5ID0gKHN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqKXJhd19kYXRhOwkJCVwKLQllbnQgPSAmZW50cnktPmVudDsJCQkJCQlcCi0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShlbnQsIGlycV9mbGFncywgcGMpOwkJXAotCWVudC0+dHlwZSA9IGV2ZW50X2NhbGwtPmlkOwkJCQkJXAotCQkJCQkJCQkJXAorCWVudHJ5ID0gKHN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqKWZ0cmFjZV9wZXJmX2J1Zl9wcmVwYXJlKAlcCisJCV9fZW50cnlfc2l6ZSwgZXZlbnRfY2FsbC0+aWQsICZyY3R4LCAmaXJxX2ZsYWdzKTsJXAorCWlmICghZW50cnkpCQkJCQkJCVwKKwkJcmV0dXJuOwkJCQkJCQlcCiAJdHN0cnVjdAkJCQkJCQkJXAogCQkJCQkJCQkJXAogCXsgYXNzaWduOyB9CQkJCQkJCVwKIAkJCQkJCQkJCVwKLQlwZXJmX3RwX2V2ZW50KGV2ZW50X2NhbGwtPmlkLCBfX2FkZHIsIF9fY291bnQsIGVudHJ5LAkJXAotCQkJICAgICBfX2VudHJ5X3NpemUpOwkJCQlcCi0JCQkJCQkJCQlcCi1lbmQ6CQkJCQkJCQkJXAotCXBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQocmN0eCk7CQkJXAotZW5kX3JlY3Vyc2lvbjoJCQkJCQkJCVwKLQlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOwkJCQkJXAorCWZ0cmFjZV9wZXJmX2J1Zl9zdWJtaXQoZW50cnksIF9fZW50cnlfc2l6ZSwgcmN0eCwgX19hZGRyLAlcCisJCQkgICAgICAgX19jb3VudCwgaXJxX2ZsYWdzKTsJCQlcCiB9CiAKICN1bmRlZiBERUZJTkVfRVZFTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBjYWxsLCBwcm90bywgYXJncykJCVwKLXN0YXRpYyB2b2lkIGZ0cmFjZV9wcm9maWxlXyMjY2FsbChwcm90bykJCQlcCitzdGF0aWMgbm90cmFjZSB2b2lkIGZ0cmFjZV9wcm9maWxlXyMjY2FsbChwcm90bykJCVwKIHsJCQkJCQkJCVwKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwgPSAmZXZlbnRfIyNjYWxsOwlcCiAJCQkJCQkJCVwKQEAgLTkyNyw3ICs4MDIsNyBAQAogCURFRklORV9FVkVOVCh0ZW1wbGF0ZSwgbmFtZSwgUEFSQU1TKHByb3RvKSwgUEFSQU1TKGFyZ3MpKQogCiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKLSNlbmRpZiAvKiBDT05GSUdfRVZFTlRfUFJPRklMRSAqLworI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLwogCiAjdW5kZWYgX1RSQUNFX1BST0ZJTEVfSU5JVAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL3N5c2NhbGwuaCBiL2luY2x1ZGUvdHJhY2Uvc3lzY2FsbC5oCmluZGV4IDk2MWZkYTMuLjAzODcxMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2Uvc3lzY2FsbC5oCisrKyBiL2luY2x1ZGUvdHJhY2Uvc3lzY2FsbC5oCkBAIC0zNCwxMCArMzQsNiBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXJjaF9zeXNjYWxsX2FkZHIoaW50IG5yKTsKIGV4dGVybiBpbnQgaW5pdF9zeXNjYWxsX3RyYWNlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CiAKLWV4dGVybiBpbnQgc3lzY2FsbF9lbnRlcl9mb3JtYXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAotCQkJCXN0cnVjdCB0cmFjZV9zZXEgKnMpOwotZXh0ZXJuIGludCBzeXNjYWxsX2V4aXRfZm9ybWF0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKLQkJCQlzdHJ1Y3QgdHJhY2Vfc2VxICpzKTsKIGV4dGVybiBpbnQgc3lzY2FsbF9lbnRlcl9kZWZpbmVfZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CiBleHRlcm4gaW50IHN5c2NhbGxfZXhpdF9kZWZpbmVfZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CiBleHRlcm4gaW50IHJlZ19ldmVudF9zeXNjYWxsX2VudGVyKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CkBAIC00OSwxMiArNDUsMTIgQEAKIGVudW0gcHJpbnRfbGluZV90IHByaW50X3N5c2NhbGxfZW50ZXIoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpOwogZW51bSBwcmludF9saW5lX3QgcHJpbnRfc3lzY2FsbF9leGl0KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIGludCBwcm9mX3N5c2VudGVyX2VuYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpOwogdm9pZCBwcm9mX3N5c2VudGVyX2Rpc2FibGUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKIGludCBwcm9mX3N5c2V4aXRfZW5hYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7CiB2b2lkIHByb2Zfc3lzZXhpdF9kaXNhYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7Ci0KICNlbmRpZgogCiAjZW5kaWYgLyogX1RSQUNFX1NZU0NBTExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9zaF9tb2JpbGVfbGNkYy5oIGIvaW5jbHVkZS92aWRlby9zaF9tb2JpbGVfbGNkYy5oCmluZGV4IDI4ODIwNTQuLjJjYzg5M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vc2hfbW9iaWxlX2xjZGMuaAorKysgYi9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9sY2RjLmgKQEAgLTM0LDYgKzM0LDggQEAKICNkZWZpbmUgTENEQ19GTEFHU19IU0NOVCAoMSA8PCAzKSAvKiBEaXNhYmxlIEhTWU5DIGR1cmluZyBWQkxBTksgKi8KICNkZWZpbmUgTENEQ19GTEFHU19EV0NOVCAoMSA8PCA0KSAvKiBEaXNhYmxlIGRvdGNsb2NrIGR1cmluZyBibGFua2luZyAqLwogCisjZGVmaW5lIEZCSU9fV0FJVEZPUlZTWU5DIF9JT1coJ0YnLCAweDIwLCBfX3UzMikKKwogc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfY2ZnIHsKIAl1bnNpZ25lZCBsb25nIGxkbXQycjsKIAl1bnNpZ25lZCBsb25nIGxkbXQzcjsKZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCBkOTVjYTdjLi4wODlhMjMwIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC0zOTYsNiArMzk2LDIyIEBACiAKIAkgIFNheSBOIGlmIHVuc3VyZS4KIAorY29uZmlnIFJDVV9GQVNUX05PX0haCisJYm9vbCAiQWNjZWxlcmF0ZSBsYXN0IG5vbi1keW50aWNrLWlkbGUgQ1BVJ3MgZ3JhY2UgcGVyaW9kcyIKKwlkZXBlbmRzIG9uIFRSRUVfUkNVICYmIE5PX0haICYmIFNNUAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGNhdXNlcyBSQ1UgdG8gYXR0ZW1wdCB0byBhY2NlbGVyYXRlIGdyYWNlIHBlcmlvZHMKKwkgIGluIG9yZGVyIHRvIGFsbG93IHRoZSBmaW5hbCBDUFUgdG8gZW50ZXIgZHludGlja3MtaWRsZSBzdGF0ZQorCSAgbW9yZSBxdWlja2x5LiAgT24gdGhlIG90aGVyIGhhbmQsIHRoaXMgb3B0aW9uIGluY3JlYXNlcyB0aGUKKwkgIG92ZXJoZWFkIG9mIHRoZSBkeW50aWNrcy1pZGxlIGNoZWNraW5nLCBwYXJ0aWN1bGFybHkgb24gc3lzdGVtcworCSAgd2l0aCBsYXJnZSBudW1iZXJzIG9mIENQVXMuCisKKwkgIFNheSBZIGlmIGVuZXJneSBlZmZpY2llbmN5IGlzIGNyaXRpY2FsbHkgaW1wb3J0YW50LCBwYXJ0aWN1bGFybHkKKwkgIAlpZiB5b3UgaGF2ZSByZWxhdGl2ZWx5IGZldyBDUFVzLgorCisJICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KKwogY29uZmlnIFRSRUVfUkNVX1RSQUNFCiAJZGVmX2Jvb2wgUkNVX1RSQUNFICYmICggVFJFRV9SQ1UgfHwgVFJFRV9QUkVFTVBUX1JDVSApCiAJc2VsZWN0IERFQlVHX0ZTCkBAIC00NDUsNTcgKzQ2MSw2IEBACiBjb25maWcgSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSwogCWJvb2wKIAotY29uZmlnIEdST1VQX1NDSEVECi0JYm9vbCAiR3JvdXAgQ1BVIHNjaGVkdWxlciIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVQotCSAgYmFuZHdpZHRoIGFsbG9jYXRpb24gdG8gc3VjaCB0YXNrIGdyb3Vwcy4KLQkgIEluIG9yZGVyIHRvIGNyZWF0ZSBhIGdyb3VwIGZyb20gYXJiaXRyYXJ5IHNldCBvZiBwcm9jZXNzZXMsIHVzZQotCSAgQ09ORklHX0NHUk9VUFMuIChTZWUgQ29udHJvbCBHcm91cCBzdXBwb3J0LikKLQotY29uZmlnIEZBSVJfR1JPVVBfU0NIRUQKLQlib29sICJHcm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9PVEhFUiIKLQlkZXBlbmRzIG9uIEdST1VQX1NDSEVECi0JZGVmYXVsdCBHUk9VUF9TQ0hFRAotCi1jb25maWcgUlRfR1JPVVBfU0NIRUQKLQlib29sICJHcm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9SUi9GSUZPIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCi0JZGVwZW5kcyBvbiBHUk9VUF9TQ0hFRAotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFRoaXMgZmVhdHVyZSBsZXRzIHlvdSBleHBsaWNpdGx5IGFsbG9jYXRlIHJlYWwgQ1BVIGJhbmR3aWR0aAotCSAgdG8gdXNlcnMgb3IgY29udHJvbCBncm91cHMgKGRlcGVuZGluZyBvbiB0aGUgIkJhc2lzIGZvciBncm91cGluZyB0YXNrcyIKLQkgIHNldHRpbmcgYmVsb3cuIElmIGVuYWJsZWQsIGl0IHdpbGwgYWxzbyBtYWtlIGl0IGltcG9zc2libGUgdG8KLQkgIHNjaGVkdWxlIHJlYWx0aW1lIHRhc2tzIGZvciBub24tcm9vdCB1c2VycyB1bnRpbCB5b3UgYWxsb2NhdGUKLQkgIHJlYWx0aW1lIGJhbmR3aWR0aCBmb3IgdGhlbS4KLQkgIFNlZSBEb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1ydC1ncm91cC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0KLWNob2ljZQotCWRlcGVuZHMgb24gR1JPVVBfU0NIRUQKLQlwcm9tcHQgIkJhc2lzIGZvciBncm91cGluZyB0YXNrcyIKLQlkZWZhdWx0IFVTRVJfU0NIRUQKLQotY29uZmlnIFVTRVJfU0NIRUQKLQlib29sICJ1c2VyIGlkIgotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHdpbGwgY2hvb3NlIHVzZXJpZCBhcyB0aGUgYmFzaXMgZm9yIGdyb3VwaW5nCi0JICB0YXNrcywgdGh1cyBwcm92aWRpbmcgZXF1YWwgQ1BVIGJhbmR3aWR0aCB0byBlYWNoIHVzZXIuCi0KLWNvbmZpZyBDR1JPVVBfU0NIRUQKLQlib29sICJDb250cm9sIGdyb3VwcyIKLSAJZGVwZW5kcyBvbiBDR1JPVVBTCi0gCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY3JlYXRlIGFyYml0cmFyeSB0YXNrIGdyb3VwcwotCSAgdXNpbmcgdGhlICJjZ3JvdXAiIHBzZXVkbyBmaWxlc3lzdGVtIGFuZCBjb250cm9sCi0JICB0aGUgY3B1IGJhbmR3aWR0aCBhbGxvY2F0ZWQgdG8gZWFjaCBzdWNoIHRhc2sgZ3JvdXAuCi0JICBSZWZlciB0byBEb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQgZm9yIG1vcmUKLQkgIGluZm9ybWF0aW9uIG9uICJjZ3JvdXAiIHBzZXVkbyBmaWxlc3lzdGVtLgotCi1lbmRjaG9pY2UKLQogbWVudWNvbmZpZyBDR1JPVVBTCiAJYm9vbGVhbiAiQ29udHJvbCBHcm91cCBzdXBwb3J0IgogCWhlbHAKQEAgLTYxNiw2ICs1ODEsMzYgQEAKIAkgIE5vdywgbWVtb3J5IHVzYWdlIG9mIHN3YXBfY2dyb3VwIGlzIDIgYnl0ZXMgcGVyIGVudHJ5LiBJZiBzd2FwIHBhZ2UKIAkgIHNpemUgaXMgNDA5NmJ5dGVzLCA1MTJrIHBlciAxR2J5dGVzIG9mIHN3YXAuCiAKK21lbnVjb25maWcgQ0dST1VQX1NDSEVECisJYm9vbCAiR3JvdXAgQ1BVIHNjaGVkdWxlciIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBDR1JPVVBTCisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBmZWF0dXJlIGxldHMgQ1BVIHNjaGVkdWxlciByZWNvZ25pemUgdGFzayBncm91cHMgYW5kIGNvbnRyb2wgQ1BVCisJICBiYW5kd2lkdGggYWxsb2NhdGlvbiB0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCB1c2VzIGNncm91cHMgdG8gZ3JvdXAKKwkgIHRhc2tzLgorCitpZiBDR1JPVVBfU0NIRUQKK2NvbmZpZyBGQUlSX0dST1VQX1NDSEVECisJYm9vbCAiR3JvdXAgc2NoZWR1bGluZyBmb3IgU0NIRURfT1RIRVIiCisJZGVwZW5kcyBvbiBDR1JPVVBfU0NIRUQKKwlkZWZhdWx0IENHUk9VUF9TQ0hFRAorCitjb25maWcgUlRfR1JPVVBfU0NIRUQKKwlib29sICJHcm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9SUi9GSUZPIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBDR1JPVVBfU0NIRUQKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIGZlYXR1cmUgbGV0cyB5b3UgZXhwbGljaXRseSBhbGxvY2F0ZSByZWFsIENQVSBiYW5kd2lkdGgKKwkgIHRvIHVzZXJzIG9yIGNvbnRyb2wgZ3JvdXBzIChkZXBlbmRpbmcgb24gdGhlICJCYXNpcyBmb3IgZ3JvdXBpbmcgdGFza3MiCisJICBzZXR0aW5nIGJlbG93LiBJZiBlbmFibGVkLCBpdCB3aWxsIGFsc28gbWFrZSBpdCBpbXBvc3NpYmxlIHRvCisJICBzY2hlZHVsZSByZWFsdGltZSB0YXNrcyBmb3Igbm9uLXJvb3QgdXNlcnMgdW50aWwgeW91IGFsbG9jYXRlCisJICByZWFsdGltZSBiYW5kd2lkdGggZm9yIHRoZW0uCisJICBTZWUgRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtcnQtZ3JvdXAudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitlbmRpZiAjQ0dST1VQX1NDSEVECisKIGVuZGlmICMgQ0dST1VQUwogCiBjb25maWcgTU1fT1dORVIKQEAgLTk3NiwxOSArOTcxLDYgQEAKIAogCSAgU2F5IFkgaWYgdW5zdXJlLgogCi1jb25maWcgRVZFTlRfUFJPRklMRQotCWJvb2wgIlRyYWNlcG9pbnQgcHJvZmlsaW5nIHNvdXJjZXMiCi0JZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyAmJiBFVkVOVF9UUkFDSU5HCi0JZGVmYXVsdCB5Ci0JaGVscAotCSBBbGxvdyB0aGUgdXNlIG9mIHRyYWNlcG9pbnRzIGFzIHNvZnR3YXJlIHBlcmZvcm1hbmNlIGV2ZW50cy4KLQotCSBXaGVuIHRoaXMgaXMgZW5hYmxlZCwgeW91IGNhbiBjcmVhdGUgcGVyZiBldmVudHMgYmFzZWQgb24KLQkgdHJhY2Vwb2ludHMgdXNpbmcgUEVSRl9UWVBFX1RSQUNFUE9JTlQgYW5kIHRoZSB0cmFjZXBvaW50IElECi0JIGZvdW5kIGluIGRlYnVnZnM6Ly90cmFjaW5nL2V2ZW50cy8qLyovaWQuIChUaGUgLWUvLS1ldmVudHMKLQkgb3B0aW9uIHRvIHRoZSBwZXJmIHRvb2wgY2FuIHBhcnNlIGFuZCBpbnRlcnByZXQgc3ltYm9saWMKLQkgdHJhY2Vwb2ludHMsIGluIHRoZSBzdWJzeXN0ZW06dHJhY2Vwb2ludF9uYW1lIGZvcm1hdC4pCi0KIGNvbmZpZyBQRVJGX0NPVU5URVJTCiAJYm9vbCAiS2VybmVsIHBlcmZvcm1hbmNlIGNvdW50ZXJzIChvbGQgY29uZmlnIG9wdGlvbikiCiAJZGVwZW5kcyBvbiBIQVZFX1BFUkZfRVZFTlRTCkBAIC0xMTEyLDcgKzEwOTQsNyBAQAogCSAgU2VlIERvY3VtZW50YXRpb24vbm9tbXUtbW1hcC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIGNvbmZpZyBQUk9GSUxJTkcKLQlib29sICJQcm9maWxpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlib29sICJQcm9maWxpbmcgc3VwcG9ydCIKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgZXh0ZW5kZWQgcHJvZmlsaW5nIHN1cHBvcnQgbWVjaGFuaXNtcyB1c2VkCiAJICBieSBwcm9maWxlcnMgc3VjaCBhcyBPUHJvZmlsZS4KQEAgLTEyNjIsNCArMTI0NCw4IEBACiBjb25maWcgUFJFRU1QVF9OT1RJRklFUlMKIAlib29sCiAKK2NvbmZpZyBQQURBVEEKKwlkZXBlbmRzIG9uIFNNUAorCWJvb2wKKwogc291cmNlICJrZXJuZWwvS2NvbmZpZy5sb2NrcyIKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggNGNiNDdhMS4uYzc1ZGNkNiAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTQxNiw3ICs0MTYsOSBAQAogCWtlcm5lbF90aHJlYWQoa2VybmVsX2luaXQsIE5VTEwsIENMT05FX0ZTIHwgQ0xPTkVfU0lHSEFORCk7CiAJbnVtYV9kZWZhdWx0X3BvbGljeSgpOwogCXBpZCA9IGtlcm5lbF90aHJlYWQoa3RocmVhZGQsIE5VTEwsIENMT05FX0ZTIHwgQ0xPTkVfRklMRVMpOworCXJjdV9yZWFkX2xvY2soKTsKIAlrdGhyZWFkZF90YXNrID0gZmluZF90YXNrX2J5X3BpZF9ucyhwaWQsICZpbml0X3BpZF9ucyk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9NYWtlZmlsZSBiL2tlcm5lbC9NYWtlZmlsZQppbmRleCA4NjRmZjc1Li42YWViZGViIDEwMDY0NAotLS0gYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIva2VybmVsL01ha2VmaWxlCkBAIC0xMDAsNiArMTAwLDcgQEAKIG9iai0kKENPTkZJR19QRVJGX0VWRU5UUykgKz0gcGVyZl9ldmVudC5vCiBvYmotJChDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UKSArPSBod19icmVha3BvaW50Lm8KIG9iai0kKENPTkZJR19VU0VSX1JFVFVSTl9OT1RJRklFUikgKz0gdXNlci1yZXR1cm4tbm90aWZpZXIubworb2JqLSQoQ09ORklHX1BBREFUQSkgKz0gcGFkYXRhLm8KIAogaWZuZXEgKCQoQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUikseSkKICMgQWNjb3JkaW5nIHRvIEFsYW4gTW9kcmEgPGFsYW5AbGludXhjYXJlLmNvbS5hdT4sIHRoZSAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciBpcwpkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC5jCmluZGV4IGFhM2JlZTUuLjRmZDkwZTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAuYworKysgYi9rZXJuZWwvY2dyb3VwLmMKQEAgLTIzLDYgKzIzLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY2dyb3VwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC0xNjYsNiArMTY3LDIwIEBACiAgKi8KIHN0YXRpYyBpbnQgbmVlZF9mb3JrZXhpdF9jYWxsYmFjayBfX3JlYWRfbW9zdGx5OwogCisjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKK2ludCBjZ3JvdXBfbG9ja19pc19oZWxkKHZvaWQpCit7CisJcmV0dXJuIGxvY2tkZXBfaXNfaGVsZCgmY2dyb3VwX211dGV4KTsKK30KKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORyAqLworaW50IGNncm91cF9sb2NrX2lzX2hlbGQodm9pZCkKK3sKKwlyZXR1cm4gbXV0ZXhfaXNfbG9ja2VkKCZjZ3JvdXBfbXV0ZXgpOworfQorI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORyAqLworCitFWFBPUlRfU1lNQk9MX0dQTChjZ3JvdXBfbG9ja19pc19oZWxkKTsKKwogLyogY29udmVuaWVudCB0ZXN0cyBmb3IgdGhlc2UgYml0cyAqLwogaW5saW5lIGludCBjZ3JvdXBfaXNfcmVtb3ZlZChjb25zdCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggNTQ2Nzc0YS4uNDVlZDA0MyAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC04NSw3ICs4NSw5IEBACiAJQlVHX09OKCFzaWcpOwogCUJVR19PTighYXRvbWljX3JlYWQoJnNpZy0+Y291bnQpKTsKIAotCXNpZ2hhbmQgPSByY3VfZGVyZWZlcmVuY2UodHNrLT5zaWdoYW5kKTsKKwlzaWdoYW5kID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHRzay0+c2lnaGFuZCwKKwkJCQkJcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwKKwkJCQkJbG9ja2RlcF9pc19oZWxkKCZ0YXNrbGlzdF9sb2NrKSk7CiAJc3Bpbl9sb2NrKCZzaWdoYW5kLT5zaWdsb2NrKTsKIAogCXBvc2l4X2NwdV90aW1lcnNfZXhpdCh0c2spOwpAQCAtMTcwLDggKzE3MiwxMCBAQAogcmVwZWF0OgogCXRyYWNlaG9va19wcmVwYXJlX3JlbGVhc2VfdGFzayhwKTsKIAkvKiBkb24ndCBuZWVkIHRvIGdldCB0aGUgUkNVIHJlYWRsb2NrIGhlcmUgLSB0aGUgcHJvY2VzcyBpcyBkZWFkIGFuZAotCSAqIGNhbid0IGJlIG1vZGlmeWluZyBpdHMgb3duIGNyZWRlbnRpYWxzICovCisJICogY2FuJ3QgYmUgbW9kaWZ5aW5nIGl0cyBvd24gY3JlZGVudGlhbHMuIEJ1dCBzaHV0IFJDVS1sb2NrZGVwIHVwICovCisJcmN1X3JlYWRfbG9jaygpOwogCWF0b21pY19kZWMoJl9fdGFza19jcmVkKHApLT51c2VyLT5wcm9jZXNzZXMpOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcHJvY19mbHVzaF90YXNrKHApOwogCkBAIC00NzMsOSArNDc3LDExIEBACiAJLyoKIAkgKiBJdCBpcyBzYWZlIHRvIGRlcmVmZXJlbmNlIHRoZSBmZCB0YWJsZSB3aXRob3V0IFJDVSBvcgogCSAqIC0+ZmlsZV9sb2NrIGJlY2F1c2UgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlCi0JICogZmlsZXMgc3RydWN0dXJlLgorCSAqIGZpbGVzIHN0cnVjdHVyZS4gIEJ1dCB1c2UgUkNVIHRvIHNodXQgUkNVLWxvY2tkZXAgdXAuCiAJICovCisJcmN1X3JlYWRfbG9jaygpOwogCWZkdCA9IGZpbGVzX2ZkdGFibGUoZmlsZXMpOworCXJjdV9yZWFkX3VubG9jaygpOwogCWZvciAoOzspIHsKIAkJdW5zaWduZWQgbG9uZyBzZXQ7CiAJCWkgPSBqICogX19ORkRCSVRTOwpAQCAtNTIxLDEwICs1MjcsMTIgQEAKIAkJICogYXQgdGhlIGVuZCBvZiB0aGUgUkNVIGdyYWNlIHBlcmlvZC4gT3RoZXJ3aXNlLAogCQkgKiB5b3UgY2FuIGZyZWUgZmlsZXMgaW1tZWRpYXRlbHkuCiAJCSAqLworCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWZkdCA9IGZpbGVzX2ZkdGFibGUoZmlsZXMpOwogCQlpZiAoZmR0ICE9ICZmaWxlcy0+ZmR0YWIpCiAJCQlrbWVtX2NhY2hlX2ZyZWUoZmlsZXNfY2FjaGVwLCBmaWxlcyk7CiAJCWZyZWVfZmR0YWJsZShmZHQpOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IGY4OGJkOTguLjE3YmJmMDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtODYsNiArODYsNyBAQAogREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgcHJvY2Vzc19jb3VudHMpID0gMDsKIAogX19jYWNoZWxpbmVfYWxpZ25lZCBERUZJTkVfUldMT0NLKHRhc2tsaXN0X2xvY2spOyAgLyogb3V0ZXIgKi8KK0VYUE9SVF9TWU1CT0xfR1BMKHRhc2tsaXN0X2xvY2spOwogCiBpbnQgbnJfcHJvY2Vzc2VzKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXhfY29tcGF0LmMgYi9rZXJuZWwvZnV0ZXhfY29tcGF0LmMKaW5kZXggMjM1NzE2NS4uZDQ5YWZiMiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4X2NvbXBhdC5jCisrKyBiL2tlcm5lbC9mdXRleF9jb21wYXQuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAogCQlyZXQgPSAtRVNSQ0g7Ci0JCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJCXJjdV9yZWFkX2xvY2soKTsKIAkJcCA9IGZpbmRfdGFza19ieV92cGlkKHBpZCk7CiAJCWlmICghcCkKIAkJCWdvdG8gZXJyX3VubG9jazsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCQkgICAgIWNhcGFibGUoQ0FQX1NZU19QVFJBQ0UpKQogCQkJZ290byBlcnJfdW5sb2NrOwogCQloZWFkID0gcC0+Y29tcGF0X3JvYnVzdF9saXN0OwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KIAogCWlmIChwdXRfdXNlcihzaXplb2YoKmhlYWQpLCBsZW5fcHRyKSkKQEAgLTE2NSw3ICsxNjUsNyBAQAogCXJldHVybiBwdXRfdXNlcihwdHJfdG9fY29tcGF0KGhlYWQpLCBoZWFkX3B0cik7CiAKIGVycl91bmxvY2s6Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9rcHJvYmVzLmMgYi9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGI3ZGYzMDIuLmNjZWM3NzQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIva2VybmVsL2twcm9iZXMuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KQEAgLTkzLDYgKzk0LDcgQEAKIAl7Im5hdGl2ZV9nZXRfZGVidWdyZWciLH0sCiAJeyJpcnFfZW50cmllc19zdGFydCIsfSwKIAl7ImNvbW1vbl9pbnRlcnJ1cHQiLH0sCisJeyJtY291bnQiLH0sCS8qIG1jb3VudCBjYW4gYmUgY2FsbGVkIGZyb20gZXZlcnl3aGVyZSAqLwogCXtOVUxMfSAgICAvKiBUZXJtaW5hdG9yICovCiB9OwogCkBAIC0xMjQsMzAgKzEyNiw2IEBACiBzdGF0aWMgaW50IGtwcm9iZV9nYXJiYWdlX3Nsb3RzOwogc3RhdGljIGludCBjb2xsZWN0X2dhcmJhZ2Vfc2xvdHModm9pZCk7CiAKLXN0YXRpYyBpbnQgX19rcHJvYmVzIGNoZWNrX3NhZmV0eSh2b2lkKQotewotCWludCByZXQgPSAwOwotI2lmIGRlZmluZWQoQ09ORklHX1BSRUVNUFQpICYmIGRlZmluZWQoQ09ORklHX0ZSRUVaRVIpCi0JcmV0ID0gZnJlZXplX3Byb2Nlc3NlcygpOwotCWlmIChyZXQgPT0gMCkgewotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpxOwotCQlkb19lYWNoX3RocmVhZChwLCBxKSB7Ci0JCQlpZiAocCAhPSBjdXJyZW50ICYmIHAtPnN0YXRlID09IFRBU0tfUlVOTklORyAmJgotCQkJICAgIHAtPnBpZCAhPSAwKSB7Ci0JCQkJcHJpbnRrKCJDaGVjayBmYWlsZWQ6ICVzIGlzIHJ1bm5pbmdcbiIscC0+Y29tbSk7Ci0JCQkJcmV0ID0gLTE7Ci0JCQkJZ290byBsb29wX2VuZDsKLQkJCX0KLQkJfSB3aGlsZV9lYWNoX3RocmVhZChwLCBxKTsKLQl9Ci1sb29wX2VuZDoKLQl0aGF3X3Byb2Nlc3NlcygpOwotI2Vsc2UKLQlzeW5jaHJvbml6ZV9zY2hlZCgpOwotI2VuZGlmCi0JcmV0dXJuIHJldDsKLX0KLQogLyoqCiAgKiBfX2dldF9pbnNuX3Nsb3QoKSAtIEZpbmQgYSBzbG90IG9uIGFuIGV4ZWN1dGFibGUgcGFnZSBmb3IgYW4gaW5zdHJ1Y3Rpb24uCiAgKiBXZSBhbGxvY2F0ZSBhbiBleGVjdXRhYmxlIHBhZ2UgaWYgdGhlcmUncyBubyByb29tIG9uIGV4aXN0aW5nIG9uZXMuCkBAIC0yMzUsOSArMjEzLDggQEAKIHsKIAlzdHJ1Y3Qga3Byb2JlX2luc25fcGFnZSAqa2lwLCAqbmV4dDsKIAotCS8qIEVuc3VyZSBuby1vbmUgaXMgcHJlZXBtdGVkIG9uIHRoZSBnYXJiYWdlcyAqLwotCWlmIChjaGVja19zYWZldHkoKSkKLQkJcmV0dXJuIC1FQUdBSU47CisJLyogRW5zdXJlIG5vLW9uZSBpcyBpbnRlcnJ1cHRlZCBvbiB0aGUgZ2FyYmFnZXMgKi8KKwlzeW5jaHJvbml6ZV9zY2hlZCgpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGtpcCwgbmV4dCwgJmtwcm9iZV9pbnNuX3BhZ2VzLCBsaXN0KSB7CiAJCWludCBpOwpAQCAtNzI4LDcgKzcwNSw4IEBACiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlpZiAoIWtlcm5lbF90ZXh0X2FkZHJlc3MoKHVuc2lnbmVkIGxvbmcpIHAtPmFkZHIpIHx8Ci0JICAgIGluX2twcm9iZXNfZnVuY3Rpb25zKCh1bnNpZ25lZCBsb25nKSBwLT5hZGRyKSkgeworCSAgICBpbl9rcHJvYmVzX2Z1bmN0aW9ucygodW5zaWduZWQgbG9uZykgcC0+YWRkcikgfHwKKwkgICAgZnRyYWNlX3RleHRfcmVzZXJ2ZWQocC0+YWRkciwgcC0+YWRkcikpIHsKIAkJcHJlZW1wdF9lbmFibGUoKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL2tzeXNmcy5jIGIva2VybmVsL2tzeXNmcy5jCmluZGV4IDNmZWFmNWEuLjZiMWNjYzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rc3lzZnMuYworKysgYi9rZXJuZWwva3N5c2ZzLmMKQEAgLTE5NywxNiArMTk3LDggQEAKIAkJCWdvdG8gZ3JvdXBfZXhpdDsKIAl9CiAKLQkvKiBjcmVhdGUgdGhlIC9zeXMva2VybmVsL3VpZHMvIGRpcmVjdG9yeSAqLwotCWVycm9yID0gdWlkc19zeXNmc19pbml0KCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG5vdGVzX2V4aXQ7Ci0KIAlyZXR1cm4gMDsKIAotbm90ZXNfZXhpdDoKLQlpZiAobm90ZXNfc2l6ZSA+IDApCi0JCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZShrZXJuZWxfa29iaiwgJm5vdGVzX2F0dHIpOwogZ3JvdXBfZXhpdDoKIAlzeXNmc19yZW1vdmVfZ3JvdXAoa2VybmVsX2tvYmosICZrZXJuZWxfYXR0cl9ncm91cCk7CiBrc2V0X2V4aXQ6CmRpZmYgLS1naXQgYS9rZXJuZWwva3RocmVhZC5jIGIva2VybmVsL2t0aHJlYWQuYwppbmRleCBmYmI2MjIyLi44MmVkMGVhIDEwMDY0NAotLS0gYS9rZXJuZWwva3RocmVhZC5jCisrKyBiL2tlcm5lbC9rdGhyZWFkLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogICoKICAqIERlc2NyaXB0aW9uOiBUaGlzIGhlbHBlciBmdW5jdGlvbiBjcmVhdGVzIGFuZCBuYW1lcyBhIGtlcm5lbAogICogdGhyZWFkLiAgVGhlIHRocmVhZCB3aWxsIGJlIHN0b3BwZWQ6IHVzZSB3YWtlX3VwX3Byb2Nlc3MoKSB0byBzdGFydAotICogaXQuICBTZWUgYWxzbyBrdGhyZWFkX3J1bigpLCBrdGhyZWFkX2NyZWF0ZV9vbl9jcHUoKS4KKyAqIGl0LiAgU2VlIGFsc28ga3RocmVhZF9ydW4oKS4KICAqCiAgKiBXaGVuIHdva2VuLCB0aGUgdGhyZWFkIHdpbGwgcnVuIEB0aHJlYWRmbigpIHdpdGggQGRhdGEgYXMgaXRzCiAgKiBhcmd1bWVudC4gQHRocmVhZGZuKCkgY2FuIGVpdGhlciBjYWxsIGRvX2V4aXQoKSBkaXJlY3RseSBpZiBpdCBpcyBhCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tkZXAuYwppbmRleCBjNjJlYzE0Li4wYzMwZDA0IDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcC5jCisrKyBiL2tlcm5lbC9sb2NrZGVwLmMKQEAgLTM4MDksMyArMzgwOSwyMSBAQAogCQlsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3MoY3Vycik7CiAJfQogfQorCit2b2lkIGxvY2tkZXBfcmN1X2RlcmVmZXJlbmNlKGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGludCBsaW5lKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7CisKKwlpZiAoIWRlYnVnX2xvY2tzX29mZigpKQorCQlyZXR1cm47CisJcHJpbnRrKCJcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisJcHJpbnRrKCAgIlsgSU5GTzogc3VzcGljaW91cyByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSB1c2FnZS4gXVxuIik7CisJcHJpbnRrKCAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJcHJpbnRrKCIlczolZCBpbnZva2VkIHJjdV9kZXJlZmVyZW5jZV9jaGVjaygpIHdpdGhvdXQgcHJvdGVjdGlvbiFcbiIsCisJCQlmaWxlLCBsaW5lKTsKKwlwcmludGsoIlxub3RoZXIgaW5mbyB0aGF0IG1pZ2h0IGhlbHAgdXMgZGVidWcgdGhpczpcblxuIik7CisJbG9ja2RlcF9wcmludF9oZWxkX2xvY2tzKGN1cnIpOworCXByaW50aygiXG5zdGFjayBiYWNrdHJhY2U6XG4iKTsKKwlkdW1wX3N0YWNrKCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsb2NrZGVwX3JjdV9kZXJlZmVyZW5jZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvbm90aWZpZXIuYyBiL2tlcm5lbC9ub3RpZmllci5jCmluZGV4IGFjZDI0ZTcuLjI0ODhiYTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ub3RpZmllci5jCisrKyBiL2tlcm5lbC9ub3RpZmllci5jCkBAIC03OCwxMCArNzgsMTAgQEAKIAlpbnQgcmV0ID0gTk9USUZZX0RPTkU7CiAJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgKm5leHRfbmI7CiAKLQluYiA9IHJjdV9kZXJlZmVyZW5jZSgqbmwpOworCW5iID0gcmN1X2RlcmVmZXJlbmNlX3JhdygqbmwpOwogCiAJd2hpbGUgKG5iICYmIG5yX3RvX2NhbGwpIHsKLQkJbmV4dF9uYiA9IHJjdV9kZXJlZmVyZW5jZShuYi0+bmV4dCk7CisJCW5leHRfbmIgPSByY3VfZGVyZWZlcmVuY2VfcmF3KG5iLT5uZXh0KTsKIAogI2lmZGVmIENPTkZJR19ERUJVR19OT1RJRklFUlMKIAkJaWYgKHVubGlrZWx5KCFmdW5jX3B0cl9pc19rZXJuZWxfdGV4dChuYi0+bm90aWZpZXJfY2FsbCkpKSB7CkBAIC0zMDksNyArMzA5LDcgQEAKIAkgKiByYWN5IHRoZW4gaXQgZG9lcyBub3QgbWF0dGVyIHdoYXQgdGhlIHJlc3VsdCBvZiB0aGUgdGVzdAogCSAqIGlzLCB3ZSByZS1jaGVjayB0aGUgbGlzdCBhZnRlciBoYXZpbmcgdGFrZW4gdGhlIGxvY2sgYW55d2F5OgogCSAqLwotCWlmIChyY3VfZGVyZWZlcmVuY2UobmgtPmhlYWQpKSB7CisJaWYgKHJjdV9kZXJlZmVyZW5jZV9yYXcobmgtPmhlYWQpKSB7CiAJCWRvd25fcmVhZCgmbmgtPnJ3c2VtKTsKIAkJcmV0ID0gbm90aWZpZXJfY2FsbF9jaGFpbigmbmgtPmhlYWQsIHZhbCwgdiwgbnJfdG9fY2FsbCwKIAkJCQkJbnJfY2FsbHMpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3BhZGF0YS5jIGIva2VybmVsL3BhZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmOWJjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvcGFkYXRhLmMKQEAgLTAsMCArMSw2OTAgQEAKKy8qCisgKiBwYWRhdGEuYyAtIGdlbmVyaWMgaW50ZXJmYWNlIHRvIHByb2Nlc3MgZGF0YSBzdHJlYW1zIGluIHBhcmFsbGVsCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IHNlY3VuZXQgU2VjdXJpdHkgTmV0d29ya3MgQUcKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBTdGVmZmVuIEtsYXNzZXJ0IDxzdGVmZmVuLmtsYXNzZXJ0QHNlY3VuZXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWRhdGEuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKworI2RlZmluZSBNQVhfU0VRX05SIElOVF9NQVggLSBOUl9DUFVTCisjZGVmaW5lIE1BWF9PQkpfTlVNIDEwMDAwICogTlJfQ1BVUworCitzdGF0aWMgaW50IHBhZGF0YV9pbmRleF90b19jcHUoc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkLCBpbnQgY3B1X2luZGV4KQoreworCWludCBjcHUsIHRhcmdldF9jcHU7CisKKwl0YXJnZXRfY3B1ID0gY3B1bWFza19maXJzdChwZC0+Y3B1bWFzayk7CisJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfaW5kZXg7IGNwdSsrKQorCQl0YXJnZXRfY3B1ID0gY3B1bWFza19uZXh0KHRhcmdldF9jcHUsIHBkLT5jcHVtYXNrKTsKKworCXJldHVybiB0YXJnZXRfY3B1OworfQorCitzdGF0aWMgaW50IHBhZGF0YV9jcHVfaGFzaChzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSkKK3sKKwlpbnQgY3B1X2luZGV4OworCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKKworCXBkID0gIHBhZGF0YS0+cGQ7CisKKwkvKgorCSAqIEhhc2ggdGhlIHNlcXVlbmNlIG51bWJlcnMgdG8gdGhlIGNwdXMgYnkgdGFraW5nCisJICogc2VxX25yIG1vZC4gbnVtYmVyIG9mIGNwdXMgaW4gdXNlLgorCSAqLworCWNwdV9pbmRleCA9ICBwYWRhdGEtPnNlcV9uciAlIGNwdW1hc2tfd2VpZ2h0KHBkLT5jcHVtYXNrKTsKKworCXJldHVybiBwYWRhdGFfaW5kZXhfdG9fY3B1KHBkLCBjcHVfaW5kZXgpOworfQorCitzdGF0aWMgdm9pZCBwYWRhdGFfcGFyYWxsZWxfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcGFkYXRhX3F1ZXVlICpxdWV1ZTsKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CisJc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3Q7CisJTElTVF9IRUFEKGxvY2FsX2xpc3QpOworCisJbG9jYWxfYmhfZGlzYWJsZSgpOworCXF1ZXVlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwYWRhdGFfcXVldWUsIHB3b3JrKTsKKwlwZCA9IHF1ZXVlLT5wZDsKKwlwaW5zdCA9IHBkLT5waW5zdDsKKworCXNwaW5fbG9jaygmcXVldWUtPnBhcmFsbGVsLmxvY2spOworCWxpc3RfcmVwbGFjZV9pbml0KCZxdWV1ZS0+cGFyYWxsZWwubGlzdCwgJmxvY2FsX2xpc3QpOworCXNwaW5fdW5sb2NrKCZxdWV1ZS0+cGFyYWxsZWwubG9jayk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmxvY2FsX2xpc3QpKSB7CisJCXN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhOworCisJCXBhZGF0YSA9IGxpc3RfZW50cnkobG9jYWxfbGlzdC5uZXh0LAorCQkJCSAgICBzdHJ1Y3QgcGFkYXRhX3ByaXYsIGxpc3QpOworCisJCWxpc3RfZGVsX2luaXQoJnBhZGF0YS0+bGlzdCk7CisKKwkJcGFkYXRhLT5wYXJhbGxlbChwYWRhdGEpOworCX0KKworCWxvY2FsX2JoX2VuYWJsZSgpOworfQorCisvKgorICogcGFkYXRhX2RvX3BhcmFsbGVsIC0gcGFkYXRhIHBhcmFsbGVsaXphdGlvbiBmdW5jdGlvbgorICoKKyAqIEBwaW5zdDogcGFkYXRhIGluc3RhbmNlCisgKiBAcGFkYXRhOiBvYmplY3QgdG8gYmUgcGFyYWxsZWxpemVkCisgKiBAY2JfY3B1OiBjcHUgdGhlIHNlcmlhbGl6YXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBydW4gb24sCisgKiAgICAgICAgICBtdXN0IGJlIGluIHRoZSBjcHVtYXNrIG9mIHBhZGF0YS4KKyAqCisgKiBUaGUgcGFyYWxsZWxpemF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgcnVuIHdpdGggQkhzIG9mZi4KKyAqIE5vdGU6IEV2ZXJ5IG9iamVjdCB3aGljaCBpcyBwYXJhbGxlbGl6ZWQgYnkgcGFkYXRhX2RvX3BhcmFsbGVsCisgKiBtdXN0IGJlIHNlZW4gYnkgcGFkYXRhX2RvX3NlcmlhbC4KKyAqLworaW50IHBhZGF0YV9kb19wYXJhbGxlbChzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKKwkJICAgICAgIHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhLCBpbnQgY2JfY3B1KQoreworCWludCB0YXJnZXRfY3B1LCBlcnI7CisJc3RydWN0IHBhZGF0YV9xdWV1ZSAqcXVldWU7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkOworCisJcmN1X3JlYWRfbG9ja19iaCgpOworCisJcGQgPSByY3VfZGVyZWZlcmVuY2UocGluc3QtPnBkKTsKKworCWVyciA9IDA7CisJaWYgKCEocGluc3QtPmZsYWdzICYgUEFEQVRBX0lOSVQpKQorCQlnb3RvIG91dDsKKworCWVyciA9ICAtRUJVU1k7CisJaWYgKChwaW5zdC0+ZmxhZ3MgJiBQQURBVEFfUkVTRVQpKQorCQlnb3RvIG91dDsKKworCWlmIChhdG9taWNfcmVhZCgmcGQtPnJlZmNudCkgPj0gTUFYX09CSl9OVU0pCisJCWdvdG8gb3V0OworCisJZXJyID0gLUVJTlZBTDsKKwlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY2JfY3B1LCBwZC0+Y3B1bWFzaykpCisJCWdvdG8gb3V0OworCisJZXJyID0gLUVJTlBST0dSRVNTOworCWF0b21pY19pbmMoJnBkLT5yZWZjbnQpOworCXBhZGF0YS0+cGQgPSBwZDsKKwlwYWRhdGEtPmNiX2NwdSA9IGNiX2NwdTsKKworCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmcGQtPnNlcV9ucikgPT0gcGQtPm1heF9zZXFfbnIpKQorCQlhdG9taWNfc2V0KCZwZC0+c2VxX25yLCAtMSk7CisKKwlwYWRhdGEtPnNlcV9uciA9IGF0b21pY19pbmNfcmV0dXJuKCZwZC0+c2VxX25yKTsKKworCXRhcmdldF9jcHUgPSBwYWRhdGFfY3B1X2hhc2gocGFkYXRhKTsKKwlxdWV1ZSA9IHBlcl9jcHVfcHRyKHBkLT5xdWV1ZSwgdGFyZ2V0X2NwdSk7CisKKwlzcGluX2xvY2soJnF1ZXVlLT5wYXJhbGxlbC5sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZwYWRhdGEtPmxpc3QsICZxdWV1ZS0+cGFyYWxsZWwubGlzdCk7CisJc3Bpbl91bmxvY2soJnF1ZXVlLT5wYXJhbGxlbC5sb2NrKTsKKworCXF1ZXVlX3dvcmtfb24odGFyZ2V0X2NwdSwgcGluc3QtPndxLCAmcXVldWUtPnB3b3JrKTsKKworb3V0OgorCXJjdV9yZWFkX3VubG9ja19iaCgpOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wocGFkYXRhX2RvX3BhcmFsbGVsKTsKKworc3RhdGljIHN0cnVjdCBwYWRhdGFfcHJpdiAqcGFkYXRhX2dldF9uZXh0KHN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZCkKK3sKKwlpbnQgY3B1LCBudW1fY3B1cywgZW1wdHksIGNhbGNfc2VxX25yOworCWludCBzZXFfbnIsIG5leHRfbnIsIG92ZXJydW4sIG5leHRfb3ZlcnJ1bjsKKwlzdHJ1Y3QgcGFkYXRhX3F1ZXVlICpxdWV1ZSwgKm5leHRfcXVldWU7CisJc3RydWN0IHBhZGF0YV9wcml2ICpwYWRhdGE7CisJc3RydWN0IHBhZGF0YV9saXN0ICpyZW9yZGVyOworCisJZW1wdHkgPSAwOworCW5leHRfbnIgPSAtMTsKKwluZXh0X292ZXJydW4gPSAwOworCW5leHRfcXVldWUgPSBOVUxMOworCisJbnVtX2NwdXMgPSBjcHVtYXNrX3dlaWdodChwZC0+Y3B1bWFzayk7CisKKwlmb3JfZWFjaF9jcHUoY3B1LCBwZC0+Y3B1bWFzaykgeworCQlxdWV1ZSA9IHBlcl9jcHVfcHRyKHBkLT5xdWV1ZSwgY3B1KTsKKwkJcmVvcmRlciA9ICZxdWV1ZS0+cmVvcmRlcjsKKworCQkvKgorCQkgKiBDYWxjdWxhdGUgdGhlIHNlcV9uciBvZiB0aGUgb2JqZWN0IHRoYXQgc2hvdWxkIGJlCisJCSAqIG5leHQgaW4gdGhpcyBxdWV1ZS4KKwkJICovCisJCW92ZXJydW4gPSAwOworCQljYWxjX3NlcV9uciA9IChhdG9taWNfcmVhZCgmcXVldWUtPm51bV9vYmopICogbnVtX2NwdXMpCisJCQkgICAgICAgKyBxdWV1ZS0+Y3B1X2luZGV4OworCisJCWlmICh1bmxpa2VseShjYWxjX3NlcV9uciA+IHBkLT5tYXhfc2VxX25yKSkgeworCQkJY2FsY19zZXFfbnIgPSBjYWxjX3NlcV9uciAtIHBkLT5tYXhfc2VxX25yIC0gMTsKKwkJCW92ZXJydW4gPSAxOworCQl9CisKKwkJaWYgKCFsaXN0X2VtcHR5KCZyZW9yZGVyLT5saXN0KSkgeworCQkJcGFkYXRhID0gbGlzdF9lbnRyeShyZW9yZGVyLT5saXN0Lm5leHQsCisJCQkJCSAgICBzdHJ1Y3QgcGFkYXRhX3ByaXYsIGxpc3QpOworCisJCQlzZXFfbnIgID0gcGFkYXRhLT5zZXFfbnI7CisJCQlCVUdfT04oY2FsY19zZXFfbnIgIT0gc2VxX25yKTsKKwkJfSBlbHNlIHsKKwkJCXNlcV9uciA9IGNhbGNfc2VxX25yOworCQkJZW1wdHkrKzsKKwkJfQorCisJCWlmIChuZXh0X25yIDwgMCB8fCBzZXFfbnIgPCBuZXh0X25yCisJCSAgICB8fCAobmV4dF9vdmVycnVuICYmICFvdmVycnVuKSkgeworCQkJbmV4dF9uciA9IHNlcV9ucjsKKwkJCW5leHRfb3ZlcnJ1biA9IG92ZXJydW47CisJCQluZXh0X3F1ZXVlID0gcXVldWU7CisJCX0KKwl9CisKKwlwYWRhdGEgPSBOVUxMOworCisJaWYgKGVtcHR5ID09IG51bV9jcHVzKQorCQlnb3RvIG91dDsKKworCXJlb3JkZXIgPSAmbmV4dF9xdWV1ZS0+cmVvcmRlcjsKKworCWlmICghbGlzdF9lbXB0eSgmcmVvcmRlci0+bGlzdCkpIHsKKwkJcGFkYXRhID0gbGlzdF9lbnRyeShyZW9yZGVyLT5saXN0Lm5leHQsCisJCQkJICAgIHN0cnVjdCBwYWRhdGFfcHJpdiwgbGlzdCk7CisKKwkJaWYgKHVubGlrZWx5KG5leHRfb3ZlcnJ1bikpIHsKKwkJCWZvcl9lYWNoX2NwdShjcHUsIHBkLT5jcHVtYXNrKSB7CisJCQkJcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cXVldWUsIGNwdSk7CisJCQkJYXRvbWljX3NldCgmcXVldWUtPm51bV9vYmosIDApOworCQkJfQorCQl9CisKKwkJc3Bpbl9sb2NrKCZyZW9yZGVyLT5sb2NrKTsKKwkJbGlzdF9kZWxfaW5pdCgmcGFkYXRhLT5saXN0KTsKKwkJYXRvbWljX2RlYygmcGQtPnJlb3JkZXJfb2JqZWN0cyk7CisJCXNwaW5fdW5sb2NrKCZyZW9yZGVyLT5sb2NrKTsKKworCQlhdG9taWNfaW5jKCZuZXh0X3F1ZXVlLT5udW1fb2JqKTsKKworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobmV4dF9uciAlIG51bV9jcHVzID09IG5leHRfcXVldWUtPmNwdV9pbmRleCkgeworCQlwYWRhdGEgPSBFUlJfUFRSKC1FTk9EQVRBKTsKKwkJZ290byBvdXQ7CisJfQorCisJcGFkYXRhID0gRVJSX1BUUigtRUlOUFJPR1JFU1MpOworb3V0OgorCXJldHVybiBwYWRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIHBhZGF0YV9yZW9yZGVyKHN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZCkKK3sKKwlzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YTsKKwlzdHJ1Y3QgcGFkYXRhX3F1ZXVlICpxdWV1ZTsKKwlzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCA9IHBkLT5waW5zdDsKKwordHJ5X2FnYWluOgorCWlmICghc3Bpbl90cnlsb2NrX2JoKCZwZC0+bG9jaykpCisJCWdvdG8gb3V0OworCisJd2hpbGUgKDEpIHsKKwkJcGFkYXRhID0gcGFkYXRhX2dldF9uZXh0KHBkKTsKKworCQlpZiAoIXBhZGF0YSB8fCBQVFJfRVJSKHBhZGF0YSkgPT0gLUVJTlBST0dSRVNTKQorCQkJYnJlYWs7CisKKwkJaWYgKFBUUl9FUlIocGFkYXRhKSA9PSAtRU5PREFUQSkgeworCQkJc3Bpbl91bmxvY2tfYmgoJnBkLT5sb2NrKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcXVldWUgPSBwZXJfY3B1X3B0cihwZC0+cXVldWUsIHBhZGF0YS0+Y2JfY3B1KTsKKworCQlzcGluX2xvY2soJnF1ZXVlLT5zZXJpYWwubG9jayk7CisJCWxpc3RfYWRkX3RhaWwoJnBhZGF0YS0+bGlzdCwgJnF1ZXVlLT5zZXJpYWwubGlzdCk7CisJCXNwaW5fdW5sb2NrKCZxdWV1ZS0+c2VyaWFsLmxvY2spOworCisJCXF1ZXVlX3dvcmtfb24ocGFkYXRhLT5jYl9jcHUsIHBpbnN0LT53cSwgJnF1ZXVlLT5zd29yayk7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJnBkLT5sb2NrKTsKKworCWlmIChhdG9taWNfcmVhZCgmcGQtPnJlb3JkZXJfb2JqZWN0cykpCisJCWdvdG8gdHJ5X2FnYWluOworCitvdXQ6CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBwYWRhdGFfc2VyaWFsX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHBhZGF0YV9xdWV1ZSAqcXVldWU7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkOworCUxJU1RfSEVBRChsb2NhbF9saXN0KTsKKworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwlxdWV1ZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGFkYXRhX3F1ZXVlLCBzd29yayk7CisJcGQgPSBxdWV1ZS0+cGQ7CisKKwlzcGluX2xvY2soJnF1ZXVlLT5zZXJpYWwubG9jayk7CisJbGlzdF9yZXBsYWNlX2luaXQoJnF1ZXVlLT5zZXJpYWwubGlzdCwgJmxvY2FsX2xpc3QpOworCXNwaW5fdW5sb2NrKCZxdWV1ZS0+c2VyaWFsLmxvY2spOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZsb2NhbF9saXN0KSkgeworCQlzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YTsKKworCQlwYWRhdGEgPSBsaXN0X2VudHJ5KGxvY2FsX2xpc3QubmV4dCwKKwkJCQkgICAgc3RydWN0IHBhZGF0YV9wcml2LCBsaXN0KTsKKworCQlsaXN0X2RlbF9pbml0KCZwYWRhdGEtPmxpc3QpOworCisJCXBhZGF0YS0+c2VyaWFsKHBhZGF0YSk7CisJCWF0b21pY19kZWMoJnBkLT5yZWZjbnQpOworCX0KKwlsb2NhbF9iaF9lbmFibGUoKTsKK30KKworLyoKKyAqIHBhZGF0YV9kb19zZXJpYWwgLSBwYWRhdGEgc2VyaWFsaXphdGlvbiBmdW5jdGlvbgorICoKKyAqIEBwYWRhdGE6IG9iamVjdCB0byBiZSBzZXJpYWxpemVkLgorICoKKyAqIHBhZGF0YV9kb19zZXJpYWwgbXVzdCBiZSBjYWxsZWQgZm9yIGV2ZXJ5IHBhcmFsbGVsaXplZCBvYmplY3QuCisgKiBUaGUgc2VyaWFsaXphdGlvbiBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIHJ1biB3aXRoIEJIcyBvZmYuCisgKi8KK3ZvaWQgcGFkYXRhX2RvX3NlcmlhbChzdHJ1Y3QgcGFkYXRhX3ByaXYgKnBhZGF0YSkKK3sKKwlpbnQgY3B1OworCXN0cnVjdCBwYWRhdGFfcXVldWUgKnF1ZXVlOworCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKKworCXBkID0gcGFkYXRhLT5wZDsKKworCWNwdSA9IGdldF9jcHUoKTsKKwlxdWV1ZSA9IHBlcl9jcHVfcHRyKHBkLT5xdWV1ZSwgY3B1KTsKKworCXNwaW5fbG9jaygmcXVldWUtPnJlb3JkZXIubG9jayk7CisJYXRvbWljX2luYygmcGQtPnJlb3JkZXJfb2JqZWN0cyk7CisJbGlzdF9hZGRfdGFpbCgmcGFkYXRhLT5saXN0LCAmcXVldWUtPnJlb3JkZXIubGlzdCk7CisJc3Bpbl91bmxvY2soJnF1ZXVlLT5yZW9yZGVyLmxvY2spOworCisJcHV0X2NwdSgpOworCisJcGFkYXRhX3Jlb3JkZXIocGQpOworfQorRVhQT1JUX1NZTUJPTChwYWRhdGFfZG9fc2VyaWFsKTsKKworc3RhdGljIHN0cnVjdCBwYXJhbGxlbF9kYXRhICpwYWRhdGFfYWxsb2NfcGQoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCit7CisJaW50IGNwdSwgY3B1X2luZGV4LCBudW1fY3B1czsKKwlzdHJ1Y3QgcGFkYXRhX3F1ZXVlICpxdWV1ZTsKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CisKKwljcHVfaW5kZXggPSAwOworCisJcGQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGFyYWxsZWxfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghcGQpCisJCWdvdG8gZXJyOworCisJcGQtPnF1ZXVlID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBwYWRhdGFfcXVldWUpOworCWlmICghcGQtPnF1ZXVlKQorCQlnb3RvIGVycl9mcmVlX3BkOworCisJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmcGQtPmNwdW1hc2ssIEdGUF9LRVJORUwpKQorCQlnb3RvIGVycl9mcmVlX3F1ZXVlOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlxdWV1ZSA9IHBlcl9jcHVfcHRyKHBkLT5xdWV1ZSwgY3B1KTsKKworCQlxdWV1ZS0+cGQgPSBwZDsKKworCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdW1hc2spCisJCSAgICAmJiBjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X2FjdGl2ZV9tYXNrKSkgeworCQkJcXVldWUtPmNwdV9pbmRleCA9IGNwdV9pbmRleDsKKwkJCWNwdV9pbmRleCsrOworCQl9IGVsc2UKKwkJCXF1ZXVlLT5jcHVfaW5kZXggPSAtMTsKKworCQlJTklUX0xJU1RfSEVBRCgmcXVldWUtPnJlb3JkZXIubGlzdCk7CisJCUlOSVRfTElTVF9IRUFEKCZxdWV1ZS0+cGFyYWxsZWwubGlzdCk7CisJCUlOSVRfTElTVF9IRUFEKCZxdWV1ZS0+c2VyaWFsLmxpc3QpOworCQlzcGluX2xvY2tfaW5pdCgmcXVldWUtPnJlb3JkZXIubG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZxdWV1ZS0+cGFyYWxsZWwubG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZxdWV1ZS0+c2VyaWFsLmxvY2spOworCisJCUlOSVRfV09SSygmcXVldWUtPnB3b3JrLCBwYWRhdGFfcGFyYWxsZWxfd29ya2VyKTsKKwkJSU5JVF9XT1JLKCZxdWV1ZS0+c3dvcmssIHBhZGF0YV9zZXJpYWxfd29ya2VyKTsKKwkJYXRvbWljX3NldCgmcXVldWUtPm51bV9vYmosIDApOworCX0KKworCWNwdW1hc2tfYW5kKHBkLT5jcHVtYXNrLCBjcHVtYXNrLCBjcHVfYWN0aXZlX21hc2spOworCisJbnVtX2NwdXMgPSBjcHVtYXNrX3dlaWdodChwZC0+Y3B1bWFzayk7CisJcGQtPm1heF9zZXFfbnIgPSAoTUFYX1NFUV9OUiAvIG51bV9jcHVzKSAqIG51bV9jcHVzIC0gMTsKKworCWF0b21pY19zZXQoJnBkLT5zZXFfbnIsIC0xKTsKKwlhdG9taWNfc2V0KCZwZC0+cmVvcmRlcl9vYmplY3RzLCAwKTsKKwlhdG9taWNfc2V0KCZwZC0+cmVmY250LCAwKTsKKwlwZC0+cGluc3QgPSBwaW5zdDsKKwlzcGluX2xvY2tfaW5pdCgmcGQtPmxvY2spOworCisJcmV0dXJuIHBkOworCitlcnJfZnJlZV9xdWV1ZToKKwlmcmVlX3BlcmNwdShwZC0+cXVldWUpOworZXJyX2ZyZWVfcGQ6CisJa2ZyZWUocGQpOworZXJyOgorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwYWRhdGFfZnJlZV9wZChzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQpCit7CisJZnJlZV9jcHVtYXNrX3ZhcihwZC0+Y3B1bWFzayk7CisJZnJlZV9wZXJjcHUocGQtPnF1ZXVlKTsKKwlrZnJlZShwZCk7Cit9CisKK3N0YXRpYyB2b2lkIHBhZGF0YV9yZXBsYWNlKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0LAorCQkJICAgc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkX25ldykKK3sKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGRfb2xkID0gcGluc3QtPnBkOworCisJcGluc3QtPmZsYWdzIHw9IFBBREFUQV9SRVNFVDsKKworCXJjdV9hc3NpZ25fcG9pbnRlcihwaW5zdC0+cGQsIHBkX25ldyk7CisKKwlzeW5jaHJvbml6ZV9yY3UoKTsKKworCXdoaWxlIChhdG9taWNfcmVhZCgmcGRfb2xkLT5yZWZjbnQpICE9IDApCisJCXlpZWxkKCk7CisKKwlmbHVzaF93b3JrcXVldWUocGluc3QtPndxKTsKKworCXBhZGF0YV9mcmVlX3BkKHBkX29sZCk7CisKKwlwaW5zdC0+ZmxhZ3MgJj0gflBBREFUQV9SRVNFVDsKK30KKworLyoKKyAqIHBhZGF0YV9zZXRfY3B1bWFzayAtIHNldCB0aGUgY3B1bWFzayB0aGF0IHBhZGF0YSBzaG91bGQgdXNlCisgKgorICogQHBpbnN0OiBwYWRhdGEgaW5zdGFuY2UKKyAqIEBjcHVtYXNrOiB0aGUgY3B1bWFzayB0byB1c2UKKyAqLworaW50IHBhZGF0YV9zZXRfY3B1bWFzayhzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwKKwkJCWNwdW1hc2tfdmFyX3QgY3B1bWFzaykKK3sKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CisJaW50IGVyciA9IDA7CisKKwltaWdodF9zbGVlcCgpOworCisJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCisJcGQgPSBwYWRhdGFfYWxsb2NfcGQocGluc3QsIGNwdW1hc2spOworCWlmICghcGQpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJY3B1bWFza19jb3B5KHBpbnN0LT5jcHVtYXNrLCBjcHVtYXNrKTsKKworCXBhZGF0YV9yZXBsYWNlKHBpbnN0LCBwZCk7CisKK291dDoKKwltdXRleF91bmxvY2soJnBpbnN0LT5sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHBhZGF0YV9zZXRfY3B1bWFzayk7CisKK3N0YXRpYyBpbnQgX19wYWRhdGFfYWRkX2NwdShzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdCwgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcGFyYWxsZWxfZGF0YSAqcGQ7CisKKwlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9hY3RpdmVfbWFzaykpIHsKKwkJcGQgPSBwYWRhdGFfYWxsb2NfcGQocGluc3QsIHBpbnN0LT5jcHVtYXNrKTsKKwkJaWYgKCFwZCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXBhZGF0YV9yZXBsYWNlKHBpbnN0LCBwZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBwYWRhdGFfYWRkX2NwdSAtIGFkZCBhIGNwdSB0byB0aGUgcGFkYXRhIGNwdW1hc2sKKyAqCisgKiBAcGluc3Q6IHBhZGF0YSBpbnN0YW5jZQorICogQGNwdTogY3B1IHRvIGFkZAorICovCitpbnQgcGFkYXRhX2FkZF9jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUpCit7CisJaW50IGVycjsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwltdXRleF9sb2NrKCZwaW5zdC0+bG9jayk7CisKKwljcHVtYXNrX3NldF9jcHUoY3B1LCBwaW5zdC0+Y3B1bWFzayk7CisJZXJyID0gX19wYWRhdGFfYWRkX2NwdShwaW5zdCwgY3B1KTsKKworCW11dGV4X3VubG9jaygmcGluc3QtPmxvY2spOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wocGFkYXRhX2FkZF9jcHUpOworCitzdGF0aWMgaW50IF9fcGFkYXRhX3JlbW92ZV9jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUpCit7CisJc3RydWN0IHBhcmFsbGVsX2RhdGEgKnBkOworCisJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVfb25saW5lX21hc2spKSB7CisJCXBkID0gcGFkYXRhX2FsbG9jX3BkKHBpbnN0LCBwaW5zdC0+Y3B1bWFzayk7CisJCWlmICghcGQpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlwYWRhdGFfcmVwbGFjZShwaW5zdCwgcGQpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogcGFkYXRhX3JlbW92ZV9jcHUgLSByZW1vdmUgYSBjcHUgZnJvbSB0aGUgcGFkYXRhIGNwdW1hc2sKKyAqCisgKiBAcGluc3Q6IHBhZGF0YSBpbnN0YW5jZQorICogQGNwdTogY3B1IHRvIHJlbW92ZQorICovCitpbnQgcGFkYXRhX3JlbW92ZV9jcHUoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSAqcGluc3QsIGludCBjcHUpCit7CisJaW50IGVycjsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwltdXRleF9sb2NrKCZwaW5zdC0+bG9jayk7CisKKwljcHVtYXNrX2NsZWFyX2NwdShjcHUsIHBpbnN0LT5jcHVtYXNrKTsKKwllcnIgPSBfX3BhZGF0YV9yZW1vdmVfY3B1KHBpbnN0LCBjcHUpOworCisJbXV0ZXhfdW5sb2NrKCZwaW5zdC0+bG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChwYWRhdGFfcmVtb3ZlX2NwdSk7CisKKy8qCisgKiBwYWRhdGFfc3RhcnQgLSBzdGFydCB0aGUgcGFyYWxsZWwgcHJvY2Vzc2luZworICoKKyAqIEBwaW5zdDogcGFkYXRhIGluc3RhbmNlIHRvIHN0YXJ0CisgKi8KK3ZvaWQgcGFkYXRhX3N0YXJ0KHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KQoreworCW1pZ2h0X3NsZWVwKCk7CisKKwltdXRleF9sb2NrKCZwaW5zdC0+bG9jayk7CisJcGluc3QtPmZsYWdzIHw9IFBBREFUQV9JTklUOworCW11dGV4X3VubG9jaygmcGluc3QtPmxvY2spOworfQorRVhQT1JUX1NZTUJPTChwYWRhdGFfc3RhcnQpOworCisvKgorICogcGFkYXRhX3N0b3AgLSBzdG9wIHRoZSBwYXJhbGxlbCBwcm9jZXNzaW5nCisgKgorICogQHBpbnN0OiBwYWRhdGEgaW5zdGFuY2UgdG8gc3RvcAorICovCit2b2lkIHBhZGF0YV9zdG9wKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KQoreworCW1pZ2h0X3NsZWVwKCk7CisKKwltdXRleF9sb2NrKCZwaW5zdC0+bG9jayk7CisJcGluc3QtPmZsYWdzICY9IH5QQURBVEFfSU5JVDsKKwltdXRleF91bmxvY2soJnBpbnN0LT5sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0wocGFkYXRhX3N0b3ApOworCitzdGF0aWMgaW50IF9fY3B1aW5pdCBwYWRhdGFfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcGFkYXRhX2luc3RhbmNlICpwaW5zdDsKKwlpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKKworCXBpbnN0ID0gY29udGFpbmVyX29mKG5mYiwgc3RydWN0IHBhZGF0YV9pbnN0YW5jZSwgY3B1X25vdGlmaWVyKTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBDUFVfT05MSU5FOgorCWNhc2UgQ1BVX09OTElORV9GUk9aRU46CisJCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIHBpbnN0LT5jcHVtYXNrKSkKKwkJCWJyZWFrOworCQltdXRleF9sb2NrKCZwaW5zdC0+bG9jayk7CisJCWVyciA9IF9fcGFkYXRhX2FkZF9jcHUocGluc3QsIGNwdSk7CisJCW11dGV4X3VubG9jaygmcGluc3QtPmxvY2spOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIE5PVElGWV9CQUQ7CisJCWJyZWFrOworCisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgorCWNhc2UgQ1BVX0RPV05fUFJFUEFSRV9GUk9aRU46CisJCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIHBpbnN0LT5jcHVtYXNrKSkKKwkJCWJyZWFrOworCQltdXRleF9sb2NrKCZwaW5zdC0+bG9jayk7CisJCWVyciA9IF9fcGFkYXRhX3JlbW92ZV9jcHUocGluc3QsIGNwdSk7CisJCW11dGV4X3VubG9jaygmcGluc3QtPmxvY2spOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIE5PVElGWV9CQUQ7CisJCWJyZWFrOworCisJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6CisJY2FzZSBDUFVfVVBfQ0FOQ0VMRURfRlJPWkVOOgorCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBwaW5zdC0+Y3B1bWFzaykpCisJCQlicmVhazsKKwkJbXV0ZXhfbG9jaygmcGluc3QtPmxvY2spOworCQlfX3BhZGF0YV9yZW1vdmVfY3B1KHBpbnN0LCBjcHUpOworCQltdXRleF91bmxvY2soJnBpbnN0LT5sb2NrKTsKKworCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgorCWNhc2UgQ1BVX0RPV05fRkFJTEVEX0ZST1pFTjoKKwkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgcGluc3QtPmNwdW1hc2spKQorCQkJYnJlYWs7CisJCW11dGV4X2xvY2soJnBpbnN0LT5sb2NrKTsKKwkJX19wYWRhdGFfYWRkX2NwdShwaW5zdCwgY3B1KTsKKwkJbXV0ZXhfdW5sb2NrKCZwaW5zdC0+bG9jayk7CisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworLyoKKyAqIHBhZGF0YV9hbGxvYyAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgcGFkYXRhIGluc3RhbmNlCisgKgorICogQGNwdW1hc2s6IGNwdW1hc2sgdGhhdCBwYWRhdGEgdXNlcyBmb3IgcGFyYWxsZWxpemF0aW9uCisgKiBAd3E6IHdvcmtxdWV1ZSB0byB1c2UgZm9yIHRoZSBhbGxvY2F0ZWQgcGFkYXRhIGluc3RhbmNlCisgKi8KK3N0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBhZGF0YV9hbGxvYyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKKwkJCQkgICAgIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0OworCXN0cnVjdCBwYXJhbGxlbF9kYXRhICpwZDsKKworCXBpbnN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBhZGF0YV9pbnN0YW5jZSksIEdGUF9LRVJORUwpOworCWlmICghcGluc3QpCisJCWdvdG8gZXJyOworCisJcGQgPSBwYWRhdGFfYWxsb2NfcGQocGluc3QsIGNwdW1hc2spOworCWlmICghcGQpCisJCWdvdG8gZXJyX2ZyZWVfaW5zdDsKKworCXJjdV9hc3NpZ25fcG9pbnRlcihwaW5zdC0+cGQsIHBkKTsKKworCXBpbnN0LT53cSA9IHdxOworCisJY3B1bWFza19jb3B5KHBpbnN0LT5jcHVtYXNrLCBjcHVtYXNrKTsKKworCXBpbnN0LT5mbGFncyA9IDA7CisKKwlwaW5zdC0+Y3B1X25vdGlmaWVyLm5vdGlmaWVyX2NhbGwgPSBwYWRhdGFfY3B1X2NhbGxiYWNrOworCXBpbnN0LT5jcHVfbm90aWZpZXIucHJpb3JpdHkgPSAwOworCWVyciA9IHJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmcGluc3QtPmNwdV9ub3RpZmllcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfZnJlZV9wZDsKKworCW11dGV4X2luaXQoJnBpbnN0LT5sb2NrKTsKKworCXJldHVybiBwaW5zdDsKKworZXJyX2ZyZWVfcGQ6CisJcGFkYXRhX2ZyZWVfcGQocGQpOworZXJyX2ZyZWVfaW5zdDoKKwlrZnJlZShwaW5zdCk7CitlcnI6CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKHBhZGF0YV9hbGxvYyk7CisKKy8qCisgKiBwYWRhdGFfZnJlZSAtIGZyZWUgYSBwYWRhdGEgaW5zdGFuY2UKKyAqCisgKiBAIHBhZGF0YV9pbnN0OiBwYWRhdGEgaW5zdGFuY2UgdG8gZnJlZQorICovCit2b2lkIHBhZGF0YV9mcmVlKHN0cnVjdCBwYWRhdGFfaW5zdGFuY2UgKnBpbnN0KQoreworCXBhZGF0YV9zdG9wKHBpbnN0KTsKKworCXN5bmNocm9uaXplX3JjdSgpOworCisJd2hpbGUgKGF0b21pY19yZWFkKCZwaW5zdC0+cGQtPnJlZmNudCkgIT0gMCkKKwkJeWllbGQoKTsKKworCXVucmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZwaW5zdC0+Y3B1X25vdGlmaWVyKTsKKwlwYWRhdGFfZnJlZV9wZChwaW5zdC0+cGQpOworCWtmcmVlKHBpbnN0KTsKK30KK0VYUE9SVF9TWU1CT0wocGFkYXRhX2ZyZWUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3BlcmZfZXZlbnQuYyBiL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggMmFlNzQwOS4uYTY2MWU3OSAxMDA2NDQKLS0tIGEva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC05OCwxMSArOTgsMTIgQEAKIAogdm9pZCBfX3dlYWsgaHdfcGVyZl9ldmVudF9zZXR1cChpbnQgY3B1KQl7IGJhcnJpZXIoKTsgfQogdm9pZCBfX3dlYWsgaHdfcGVyZl9ldmVudF9zZXR1cF9vbmxpbmUoaW50IGNwdSkJeyBiYXJyaWVyKCk7IH0KK3ZvaWQgX193ZWFrIGh3X3BlcmZfZXZlbnRfc2V0dXBfb2ZmbGluZShpbnQgY3B1KQl7IGJhcnJpZXIoKTsgfQogCiBpbnQgX193ZWFrCiBod19wZXJmX2dyb3VwX3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpncm91cF9sZWFkZXIsCiAJICAgICAgIHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCi0JICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwgaW50IGNwdSkKKwkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQogewogCXJldHVybiAwOwogfQpAQCAtMjQ4LDcgKzI0OSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdTY0IHBlcmZfY2xvY2sodm9pZCkKIHsKLQlyZXR1cm4gY3B1X2Nsb2NrKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcmV0dXJuIGNwdV9jbG9jayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KIAogLyoKQEAgLTI4OSw2ICsyOTAsMTUgQEAKIAlldmVudC0+dG90YWxfdGltZV9ydW5uaW5nID0gcnVuX2VuZCAtIGV2ZW50LT50c3RhbXBfcnVubmluZzsKIH0KIAorc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKgorY3R4X2dyb3VwX2xpc3Qoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCit7CisJaWYgKGV2ZW50LT5hdHRyLnBpbm5lZCkKKwkJcmV0dXJuICZjdHgtPnBpbm5lZF9ncm91cHM7CisJZWxzZQorCQlyZXR1cm4gJmN0eC0+ZmxleGlibGVfZ3JvdXBzOworfQorCiAvKgogICogQWRkIGEgZXZlbnQgZnJvbSB0aGUgbGlzdHMgZm9yIGl0cyBjb250ZXh0LgogICogTXVzdCBiZSBjYWxsZWQgd2l0aCBjdHgtPm11dGV4IGFuZCBjdHgtPmxvY2sgaGVsZC4KQEAgLTMwMyw5ICszMTMsMTkgQEAKIAkgKiBhZGQgaXQgc3RyYWlnaHQgdG8gdGhlIGNvbnRleHQncyBldmVudCBsaXN0LCBvciB0byB0aGUgZ3JvdXAKIAkgKiBsZWFkZXIncyBzaWJsaW5nIGxpc3Q6CiAJICovCi0JaWYgKGdyb3VwX2xlYWRlciA9PSBldmVudCkKLQkJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPmdyb3VwX2VudHJ5LCAmY3R4LT5ncm91cF9saXN0KTsKLQllbHNlIHsKKwlpZiAoZ3JvdXBfbGVhZGVyID09IGV2ZW50KSB7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisKKwkJaWYgKGlzX3NvZnR3YXJlX2V2ZW50KGV2ZW50KSkKKwkJCWV2ZW50LT5ncm91cF9mbGFncyB8PSBQRVJGX0dST1VQX1NPRlRXQVJFOworCisJCWxpc3QgPSBjdHhfZ3JvdXBfbGlzdChldmVudCwgY3R4KTsKKwkJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPmdyb3VwX2VudHJ5LCBsaXN0KTsKKwl9IGVsc2UgeworCQlpZiAoZ3JvdXBfbGVhZGVyLT5ncm91cF9mbGFncyAmIFBFUkZfR1JPVVBfU09GVFdBUkUgJiYKKwkJICAgICFpc19zb2Z0d2FyZV9ldmVudChldmVudCkpCisJCQlncm91cF9sZWFkZXItPmdyb3VwX2ZsYWdzICY9IH5QRVJGX0dST1VQX1NPRlRXQVJFOworCiAJCWxpc3RfYWRkX3RhaWwoJmV2ZW50LT5ncm91cF9lbnRyeSwgJmdyb3VwX2xlYWRlci0+c2libGluZ19saXN0KTsKIAkJZ3JvdXBfbGVhZGVyLT5ucl9zaWJsaW5ncysrOwogCX0KQEAgLTM1NSw5ICszNzUsMTQgQEAKIAkgKiB0byB0aGUgY29udGV4dCBsaXN0IGRpcmVjdGx5OgogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaWJsaW5nLCB0bXAsICZldmVudC0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgeworCQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwogCi0JCWxpc3RfbW92ZV90YWlsKCZzaWJsaW5nLT5ncm91cF9lbnRyeSwgJmN0eC0+Z3JvdXBfbGlzdCk7CisJCWxpc3QgPSBjdHhfZ3JvdXBfbGlzdChldmVudCwgY3R4KTsKKwkJbGlzdF9tb3ZlX3RhaWwoJnNpYmxpbmctPmdyb3VwX2VudHJ5LCBsaXN0KTsKIAkJc2libGluZy0+Z3JvdXBfbGVhZGVyID0gc2libGluZzsKKworCQkvKiBJbmhlcml0IGdyb3VwIGZsYWdzIGZyb20gdGhlIHByZXZpb3VzIGxlYWRlciAqLworCQlzaWJsaW5nLT5ncm91cF9mbGFncyA9IGV2ZW50LT5ncm91cF9mbGFnczsKIAl9CiB9CiAKQEAgLTYwOCwxNCArNjMzLDEzIEBACiBzdGF0aWMgaW50CiBldmVudF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCiAJCSBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAotCQkgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAotCQkgaW50IGNwdSkKKwkJIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKIHsKIAlpZiAoZXZlbnQtPnN0YXRlIDw9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKQogCQlyZXR1cm4gMDsKIAogCWV2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFOwotCWV2ZW50LT5vbmNwdSA9IGNwdTsJLyogVE9ETzogcHV0ICdjcHUnIGludG8gY3B1Y3R4LT5jcHUgKi8KKwlldmVudC0+b25jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJLyoKIAkgKiBUaGUgbmV3IHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UgdHVybiBpdCBvbiBpbiB0aGUgaGFyZHdhcmU6CiAJICovCkBAIC02NDIsOCArNjY2LDcgQEAKIHN0YXRpYyBpbnQKIGdyb3VwX3NjaGVkX2luKHN0cnVjdCBwZXJmX2V2ZW50ICpncm91cF9ldmVudCwKIAkgICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKLQkgICAgICAgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAotCSAgICAgICBpbnQgY3B1KQorCSAgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCiB7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCAqcGFydGlhbF9ncm91cDsKIAlpbnQgcmV0OwpAQCAtNjUxLDE4ICs2NzQsMTggQEAKIAlpZiAoZ3JvdXBfZXZlbnQtPnN0YXRlID09IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKQogCQlyZXR1cm4gMDsKIAotCXJldCA9IGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oZ3JvdXBfZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpOworCXJldCA9IGh3X3BlcmZfZ3JvdXBfc2NoZWRfaW4oZ3JvdXBfZXZlbnQsIGNwdWN0eCwgY3R4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CiAKLQlpZiAoZXZlbnRfc2NoZWRfaW4oZ3JvdXBfZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpKQorCWlmIChldmVudF9zY2hlZF9pbihncm91cF9ldmVudCwgY3B1Y3R4LCBjdHgpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCS8qCiAJICogU2NoZWR1bGUgaW4gc2libGluZ3MgYXMgb25lIGdyb3VwIChpZiBhbnkpOgogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZncm91cF9ldmVudC0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgewotCQlpZiAoZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpKSB7CisJCWlmIChldmVudF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgpKSB7CiAJCQlwYXJ0aWFsX2dyb3VwID0gZXZlbnQ7CiAJCQlnb3RvIGdyb3VwX2Vycm9yOwogCQl9CkBAIC02ODYsMjQgKzcwOSw2IEBACiB9CiAKIC8qCi0gKiBSZXR1cm4gMSBmb3IgYSBncm91cCBjb25zaXN0aW5nIGVudGlyZWx5IG9mIHNvZnR3YXJlIGV2ZW50cywKLSAqIDAgaWYgdGhlIGdyb3VwIGNvbnRhaW5zIGFueSBoYXJkd2FyZSBldmVudHMuCi0gKi8KLXN0YXRpYyBpbnQgaXNfc29mdHdhcmVfb25seV9ncm91cChzdHJ1Y3QgcGVyZl9ldmVudCAqbGVhZGVyKQotewotCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKLQotCWlmICghaXNfc29mdHdhcmVfZXZlbnQobGVhZGVyKSkKLQkJcmV0dXJuIDA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmbGVhZGVyLT5zaWJsaW5nX2xpc3QsIGdyb3VwX2VudHJ5KQotCQlpZiAoIWlzX3NvZnR3YXJlX2V2ZW50KGV2ZW50KSkKLQkJCXJldHVybiAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qCiAgKiBXb3JrIG91dCB3aGV0aGVyIHdlIGNhbiBwdXQgdGhpcyBldmVudCBncm91cCBvbiB0aGUgQ1BVIG5vdy4KICAqLwogc3RhdGljIGludCBncm91cF9jYW5fZ29fb24oc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LApAQCAtNzEzLDcgKzcxOCw3IEBACiAJLyoKIAkgKiBHcm91cHMgY29uc2lzdGluZyBlbnRpcmVseSBvZiBzb2Z0d2FyZSBldmVudHMgY2FuIGFsd2F5cyBnbyBvbi4KIAkgKi8KLQlpZiAoaXNfc29mdHdhcmVfb25seV9ncm91cChldmVudCkpCisJaWYgKGV2ZW50LT5ncm91cF9mbGFncyAmIFBFUkZfR1JPVVBfU09GVFdBUkUpCiAJCXJldHVybiAxOwogCS8qCiAJICogSWYgYW4gZXhjbHVzaXZlIGdyb3VwIGlzIGFscmVhZHkgb24sIG5vIG90aGVyIGhhcmR3YXJlCkBAIC03NTQsNyArNzU5LDYgQEAKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBpbmZvOwogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IGV2ZW50LT5jdHg7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmxlYWRlciA9IGV2ZW50LT5ncm91cF9sZWFkZXI7Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpbnQgZXJyOwogCiAJLyoKQEAgLTgwMSw3ICs4MDUsNyBAQAogCWlmICghZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIDEpKQogCQllcnIgPSAtRUVYSVNUOwogCWVsc2UKLQkJZXJyID0gZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpOworCQllcnIgPSBldmVudF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgpOwogCiAJaWYgKGVycikgewogCQkvKgpAQCAtOTQzLDExICs5NDcsOSBAQAogCX0gZWxzZSB7CiAJCXBlcmZfZGlzYWJsZSgpOwogCQlpZiAoZXZlbnQgPT0gbGVhZGVyKQotCQkJZXJyID0gZ3JvdXBfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LAotCQkJCQkgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCQllcnIgPSBncm91cF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgpOwogCQllbHNlCi0JCQllcnIgPSBldmVudF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsCi0JCQkJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOworCQkJZXJyID0gZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4KTsKIAkJcGVyZl9lbmFibGUoKTsKIAl9CiAKQEAgLTEwNDMsOCArMTA0NSwxNSBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9fcGVyZl9ldmVudF9zY2hlZF9vdXQoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAotCQkJICAgICAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCkKK2VudW0gZXZlbnRfdHlwZV90IHsKKwlFVkVOVF9GTEVYSUJMRSA9IDB4MSwKKwlFVkVOVF9QSU5ORUQgPSAweDIsCisJRVZFTlRfQUxMID0gRVZFTlRfRkxFWElCTEUgfCBFVkVOVF9QSU5ORUQsCit9OworCitzdGF0aWMgdm9pZCBjdHhfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwKKwkJCSAgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKKwkJCSAgZW51bSBldmVudF90eXBlX3QgZXZlbnRfdHlwZSkKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CiAKQEAgLTEwNTUsMTAgKzEwNjQsMTggQEAKIAl1cGRhdGVfY29udGV4dF90aW1lKGN0eCk7CiAKIAlwZXJmX2Rpc2FibGUoKTsKLQlpZiAoY3R4LT5ucl9hY3RpdmUpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpCisJaWYgKCFjdHgtPm5yX2FjdGl2ZSkKKwkJZ290byBvdXRfZW5hYmxlOworCisJaWYgKGV2ZW50X3R5cGUgJiBFVkVOVF9QSU5ORUQpCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPnBpbm5lZF9ncm91cHMsIGdyb3VwX2VudHJ5KQogCQkJZ3JvdXBfc2NoZWRfb3V0KGV2ZW50LCBjcHVjdHgsIGN0eCk7Ci0JfQorCisJaWYgKGV2ZW50X3R5cGUgJiBFVkVOVF9GTEVYSUJMRSkKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+ZmxleGlibGVfZ3JvdXBzLCBncm91cF9lbnRyeSkKKwkJCWdyb3VwX3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOworCisgb3V0X2VuYWJsZToKIAlwZXJmX2VuYWJsZSgpOwogIG91dDoKIAlyYXdfc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7CkBAIC0xMTcwLDkgKzExODcsOSBAQAogICogbm90IHJlc3RhcnQgdGhlIGV2ZW50LgogICovCiB2b2lkIHBlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQkJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsIGludCBjcHUpCisJCQkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKIHsKLQlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gJnBlcl9jcHUocGVyZl9jcHVfY29udGV4dCwgY3B1KTsKKwlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gJl9fZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CiAJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gdGFzay0+cGVyZl9ldmVudF9jdHhwOwogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKm5leHRfY3R4OwogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKnBhcmVudDsKQEAgLTEyMjAsMTUgKzEyMzcsMTMgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChkb19zd2l0Y2gpIHsKLQkJX19wZXJmX2V2ZW50X3NjaGVkX291dChjdHgsIGNwdWN0eCk7CisJCWN0eF9zY2hlZF9vdXQoY3R4LCBjcHVjdHgsIEVWRU5UX0FMTCk7CiAJCWNwdWN0eC0+dGFza19jdHggPSBOVUxMOwogCX0KIH0KIAotLyoKLSAqIENhbGxlZCB3aXRoIElSUXMgZGlzYWJsZWQKLSAqLwotc3RhdGljIHZvaWQgX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKK3N0YXRpYyB2b2lkIHRhc2tfY3R4X3NjaGVkX291dChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCQkgICAgICAgZW51bSBldmVudF90eXBlX3QgZXZlbnRfdHlwZSkKIHsKIAlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gJl9fZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CiAKQEAgLTEyMzgsMjUgKzEyNTMsODIgQEAKIAlpZiAoV0FSTl9PTl9PTkNFKGN0eCAhPSBjcHVjdHgtPnRhc2tfY3R4KSkKIAkJcmV0dXJuOwogCi0JX19wZXJmX2V2ZW50X3NjaGVkX291dChjdHgsIGNwdWN0eCk7CisJY3R4X3NjaGVkX291dChjdHgsIGNwdWN0eCwgZXZlbnRfdHlwZSk7CiAJY3B1Y3R4LT50YXNrX2N0eCA9IE5VTEw7CiB9CiAKIC8qCiAgKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkCiAgKi8KLXN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfY3B1X3NjaGVkX291dChzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4KQorc3RhdGljIHZvaWQgX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKIHsKLQlfX3BlcmZfZXZlbnRfc2NoZWRfb3V0KCZjcHVjdHgtPmN0eCwgY3B1Y3R4KTsKKwl0YXNrX2N0eF9zY2hlZF9vdXQoY3R4LCBFVkVOVF9BTEwpOworfQorCisvKgorICogQ2FsbGVkIHdpdGggSVJRcyBkaXNhYmxlZAorICovCitzdGF0aWMgdm9pZCBjcHVfY3R4X3NjaGVkX291dChzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAorCQkJICAgICAgZW51bSBldmVudF90eXBlX3QgZXZlbnRfdHlwZSkKK3sKKwljdHhfc2NoZWRfb3V0KCZjcHVjdHgtPmN0eCwgY3B1Y3R4LCBldmVudF90eXBlKTsKIH0KIAogc3RhdGljIHZvaWQKLV9fcGVyZl9ldmVudF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCi0JCQlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LCBpbnQgY3B1KQorY3R4X3Bpbm5lZF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJCSAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPnBpbm5lZF9ncm91cHMsIGdyb3VwX2VudHJ5KSB7CisJCWlmIChldmVudC0+c3RhdGUgPD0gUEVSRl9FVkVOVF9TVEFURV9PRkYpCisJCQljb250aW51ZTsKKwkJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCQljb250aW51ZTsKKworCQlpZiAoZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIDEpKQorCQkJZ3JvdXBfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4KTsKKworCQkvKgorCQkgKiBJZiB0aGlzIHBpbm5lZCBncm91cCBoYXNuJ3QgYmVlbiBzY2hlZHVsZWQsCisJCSAqIHB1dCBpdCBpbiBlcnJvciBzdGF0ZS4KKwkJICovCisJCWlmIChldmVudC0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkgeworCQkJdXBkYXRlX2dyb3VwX3RpbWVzKGV2ZW50KTsKKwkJCWV2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfRVJST1I7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitjdHhfZmxleGlibGVfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LAorCQkgICAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4KQogewogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKIAlpbnQgY2FuX2FkZF9odyA9IDE7CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5mbGV4aWJsZV9ncm91cHMsIGdyb3VwX2VudHJ5KSB7CisJCS8qIElnbm9yZSBldmVudHMgaW4gT0ZGIG9yIEVSUk9SIHN0YXRlICovCisJCWlmIChldmVudC0+c3RhdGUgPD0gUEVSRl9FVkVOVF9TVEFURV9PRkYpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogTGlzdGVuIHRvIHRoZSAnY3B1JyBzY2hlZHVsaW5nIGZpbHRlciBjb25zdHJhaW50CisJCSAqIG9mIGV2ZW50czoKKwkJICovCisJCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJY29udGludWU7CisKKwkJaWYgKGdyb3VwX2Nhbl9nb19vbihldmVudCwgY3B1Y3R4LCBjYW5fYWRkX2h3KSkKKwkJCWlmIChncm91cF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgpKQorCQkJCWNhbl9hZGRfaHcgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQKK2N0eF9zY2hlZF9pbihzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsCisJICAgICBzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4LAorCSAgICAgZW51bSBldmVudF90eXBlX3QgZXZlbnRfdHlwZSkKK3sKIAlyYXdfc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwogCWN0eC0+aXNfYWN0aXZlID0gMTsKIAlpZiAobGlrZWx5KCFjdHgtPm5yX2V2ZW50cykpCkBAIC0xMjcwLDUxICsxMzQyLDM5IEBACiAJICogRmlyc3QgZ28gdGhyb3VnaCB0aGUgbGlzdCBhbmQgcHV0IG9uIGFueSBwaW5uZWQgZ3JvdXBzCiAJICogaW4gb3JkZXIgdG8gZ2l2ZSB0aGVtIHRoZSBiZXN0IGNoYW5jZSBvZiBnb2luZyBvbi4KIAkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkgewotCQlpZiAoZXZlbnQtPnN0YXRlIDw9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGIHx8Ci0JCSAgICAhZXZlbnQtPmF0dHIucGlubmVkKQotCQkJY29udGludWU7Ci0JCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gY3B1KQotCQkJY29udGludWU7CisJaWYgKGV2ZW50X3R5cGUgJiBFVkVOVF9QSU5ORUQpCisJCWN0eF9waW5uZWRfc2NoZWRfaW4oY3R4LCBjcHVjdHgpOwogCi0JCWlmIChncm91cF9jYW5fZ29fb24oZXZlbnQsIGNwdWN0eCwgMSkpCi0JCQlncm91cF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSk7CisJLyogVGhlbiB3YWxrIHRocm91Z2ggdGhlIGxvd2VyIHByaW8gZmxleGlibGUgZ3JvdXBzICovCisJaWYgKGV2ZW50X3R5cGUgJiBFVkVOVF9GTEVYSUJMRSkKKwkJY3R4X2ZsZXhpYmxlX3NjaGVkX2luKGN0eCwgY3B1Y3R4KTsKIAotCQkvKgotCQkgKiBJZiB0aGlzIHBpbm5lZCBncm91cCBoYXNuJ3QgYmVlbiBzY2hlZHVsZWQsCi0JCSAqIHB1dCBpdCBpbiBlcnJvciBzdGF0ZS4KLQkJICovCi0JCWlmIChldmVudC0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkgewotCQkJdXBkYXRlX2dyb3VwX3RpbWVzKGV2ZW50KTsKLQkJCWV2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfRVJST1I7Ci0JCX0KLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkgewotCQkvKgotCQkgKiBJZ25vcmUgZXZlbnRzIGluIE9GRiBvciBFUlJPUiBzdGF0ZSwgYW5kCi0JCSAqIGlnbm9yZSBwaW5uZWQgZXZlbnRzIHNpbmNlIHdlIGRpZCB0aGVtIGFscmVhZHkuCi0JCSAqLwotCQlpZiAoZXZlbnQtPnN0YXRlIDw9IFBFUkZfRVZFTlRfU1RBVEVfT0ZGIHx8Ci0JCSAgICBldmVudC0+YXR0ci5waW5uZWQpCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBMaXN0ZW4gdG8gdGhlICdjcHUnIHNjaGVkdWxpbmcgZmlsdGVyIGNvbnN0cmFpbnQKLQkJICogb2YgZXZlbnRzOgotCQkgKi8KLQkJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBjcHUpCi0JCQljb250aW51ZTsKLQotCQlpZiAoZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIGNhbl9hZGRfaHcpKQotCQkJaWYgKGdyb3VwX3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KSkKLQkJCQljYW5fYWRkX2h3ID0gMDsKLQl9CiAJcGVyZl9lbmFibGUoKTsKICBvdXQ6CiAJcmF3X3NwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwogfQogCitzdGF0aWMgdm9pZCBjcHVfY3R4X3NjaGVkX2luKHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsCisJCQkgICAgIGVudW0gZXZlbnRfdHlwZV90IGV2ZW50X3R5cGUpCit7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gJmNwdWN0eC0+Y3R4OworCisJY3R4X3NjaGVkX2luKGN0eCwgY3B1Y3R4LCBldmVudF90eXBlKTsKK30KKworc3RhdGljIHZvaWQgdGFza19jdHhfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJICAgICAgZW51bSBldmVudF90eXBlX3QgZXZlbnRfdHlwZSkKK3sKKwlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gJl9fZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gdGFzay0+cGVyZl9ldmVudF9jdHhwOworCisJaWYgKGxpa2VseSghY3R4KSkKKwkJcmV0dXJuOworCWlmIChjcHVjdHgtPnRhc2tfY3R4ID09IGN0eCkKKwkJcmV0dXJuOworCWN0eF9zY2hlZF9pbihjdHgsIGNwdWN0eCwgZXZlbnRfdHlwZSk7CisJY3B1Y3R4LT50YXNrX2N0eCA9IGN0eDsKK30KIC8qCiAgKiBDYWxsZWQgZnJvbSBzY2hlZHVsZXIgdG8gYWRkIHRoZSBldmVudHMgb2YgdGhlIGN1cnJlbnQgdGFzawogICogd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgpAQCAtMTMyNiwzOCArMTM4NiwxMjggQEAKICAqIGFjY2Vzc2luZyB0aGUgZXZlbnQgY29udHJvbCByZWdpc3Rlci4gSWYgYSBOTUkgaGl0cywgdGhlbiBpdCB3aWxsCiAgKiBrZWVwIHRoZSBldmVudCBydW5uaW5nLgogICovCi12b2lkIHBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBjcHUpCit2b2lkIHBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7Ci0Jc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZwZXJfY3B1KHBlcmZfY3B1X2NvbnRleHQsIGNwdSk7CisJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IHRhc2stPnBlcmZfZXZlbnRfY3R4cDsKIAogCWlmIChsaWtlbHkoIWN0eCkpCiAJCXJldHVybjsKKwogCWlmIChjcHVjdHgtPnRhc2tfY3R4ID09IGN0eCkKIAkJcmV0dXJuOwotCV9fcGVyZl9ldmVudF9zY2hlZF9pbihjdHgsIGNwdWN0eCwgY3B1KTsKKworCS8qCisJICogV2Ugd2FudCB0byBrZWVwIHRoZSBmb2xsb3dpbmcgcHJpb3JpdHkgb3JkZXI6CisJICogY3B1IHBpbm5lZCAodGhhdCBkb24ndCBuZWVkIHRvIG1vdmUpLCB0YXNrIHBpbm5lZCwKKwkgKiBjcHUgZmxleGlibGUsIHRhc2sgZmxleGlibGUuCisJICovCisJY3B1X2N0eF9zY2hlZF9vdXQoY3B1Y3R4LCBFVkVOVF9GTEVYSUJMRSk7CisKKwljdHhfc2NoZWRfaW4oY3R4LCBjcHVjdHgsIEVWRU5UX1BJTk5FRCk7CisJY3B1X2N0eF9zY2hlZF9pbihjcHVjdHgsIEVWRU5UX0ZMRVhJQkxFKTsKKwljdHhfc2NoZWRfaW4oY3R4LCBjcHVjdHgsIEVWRU5UX0ZMRVhJQkxFKTsKKwogCWNwdWN0eC0+dGFza19jdHggPSBjdHg7CiB9CiAKLXN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfY3B1X3NjaGVkX2luKHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsIGludCBjcHUpCi17Ci0Jc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gJmNwdWN0eC0+Y3R4OwotCi0JX19wZXJmX2V2ZW50X3NjaGVkX2luKGN0eCwgY3B1Y3R4LCBjcHUpOwotfQotCiAjZGVmaW5lIE1BWF9JTlRFUlJVUFRTICh+MFVMTCkKIAogc3RhdGljIHZvaWQgcGVyZl9sb2dfdGhyb3R0bGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZW5hYmxlKTsKIAotc3RhdGljIHZvaWQgcGVyZl9hZGp1c3RfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IGV2ZW50cykKK3N0YXRpYyB1NjQgcGVyZl9jYWxjdWxhdGVfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG5zZWMsIHU2NCBjb3VudCkKK3sKKwl1NjQgZnJlcXVlbmN5ID0gZXZlbnQtPmF0dHIuc2FtcGxlX2ZyZXE7CisJdTY0IHNlYyA9IE5TRUNfUEVSX1NFQzsKKwl1NjQgZGl2aXNvciwgZGl2aWRlbmQ7CisKKwlpbnQgY291bnRfZmxzLCBuc2VjX2ZscywgZnJlcXVlbmN5X2Zscywgc2VjX2ZsczsKKworCWNvdW50X2ZscyA9IGZsczY0KGNvdW50KTsKKwluc2VjX2ZscyA9IGZsczY0KG5zZWMpOworCWZyZXF1ZW5jeV9mbHMgPSBmbHM2NChmcmVxdWVuY3kpOworCXNlY19mbHMgPSAzMDsKKworCS8qCisJICogV2UgZ290IEBjb3VudCBpbiBAbnNlYywgd2l0aCBhIHRhcmdldCBvZiBzYW1wbGVfZnJlcSBIWgorCSAqIHRoZSB0YXJnZXQgcGVyaW9kIGJlY29tZXM6CisJICoKKwkgKiAgICAgICAgICAgICBAY291bnQgKiAxMF45CisJICogcGVyaW9kID0gLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgICAgICAgIEBuc2VjICogc2FtcGxlX2ZyZXEKKwkgKgorCSAqLworCisJLyoKKwkgKiBSZWR1Y2UgYWNjdXJhY3kgYnkgb25lIGJpdCBzdWNoIHRoYXQgQGEgYW5kIEBiIGNvbnZlcmdlCisJICogdG8gYSBzaW1pbGFyIG1hZ25pdHVkZS4KKwkgKi8KKyNkZWZpbmUgUkVEVUNFX0ZMUyhhLCBiKSAJCVwKK2RvIHsJCQkJCVwKKwlpZiAoYSMjX2ZscyA+IGIjI19mbHMpIHsJXAorCQlhID4+PSAxOwkJXAorCQlhIyNfZmxzLS07CQlcCisJfSBlbHNlIHsJCQlcCisJCWIgPj49IDE7CQlcCisJCWIjI19mbHMtLTsJCVwKKwl9CQkJCVwKK30gd2hpbGUgKDApCisKKwkvKgorCSAqIFJlZHVjZSBhY2N1cmFjeSB1bnRpbCBlaXRoZXIgdGVybSBmaXRzIGluIGEgdTY0LCB0aGVuIHByb2NlZWQgd2l0aAorCSAqIHRoZSBvdGhlciwgc28gdGhhdCBmaW5hbGx5IHdlIGNhbiBkbyBhIHU2NC91NjQgZGl2aXNpb24uCisJICovCisJd2hpbGUgKGNvdW50X2ZscyArIHNlY19mbHMgPiA2NCAmJiBuc2VjX2ZscyArIGZyZXF1ZW5jeV9mbHMgPiA2NCkgeworCQlSRURVQ0VfRkxTKG5zZWMsIGZyZXF1ZW5jeSk7CisJCVJFRFVDRV9GTFMoc2VjLCBjb3VudCk7CisJfQorCisJaWYgKGNvdW50X2ZscyArIHNlY19mbHMgPiA2NCkgeworCQlkaXZpc29yID0gbnNlYyAqIGZyZXF1ZW5jeTsKKworCQl3aGlsZSAoY291bnRfZmxzICsgc2VjX2ZscyA+IDY0KSB7CisJCQlSRURVQ0VfRkxTKGNvdW50LCBzZWMpOworCQkJZGl2aXNvciA+Pj0gMTsKKwkJfQorCisJCWRpdmlkZW5kID0gY291bnQgKiBzZWM7CisJfSBlbHNlIHsKKwkJZGl2aWRlbmQgPSBjb3VudCAqIHNlYzsKKworCQl3aGlsZSAobnNlY19mbHMgKyBmcmVxdWVuY3lfZmxzID4gNjQpIHsKKwkJCVJFRFVDRV9GTFMobnNlYywgZnJlcXVlbmN5KTsKKwkJCWRpdmlkZW5kID4+PSAxOworCQl9CisKKwkJZGl2aXNvciA9IG5zZWMgKiBmcmVxdWVuY3k7CisJfQorCisJcmV0dXJuIGRpdjY0X3U2NChkaXZpZGVuZCwgZGl2aXNvcik7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfc3RvcChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJaWYgKCFldmVudC0+cG11LT5zdG9wKQorCQlyZXR1cm4gZXZlbnQtPnBtdS0+ZGlzYWJsZShldmVudCk7CisKKwlyZXR1cm4gZXZlbnQtPnBtdS0+c3RvcChldmVudCk7Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9ldmVudF9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJaWYgKCFldmVudC0+cG11LT5zdGFydCkKKwkJcmV0dXJuIGV2ZW50LT5wbXUtPmVuYWJsZShldmVudCk7CisKKwlyZXR1cm4gZXZlbnQtPnBtdS0+c3RhcnQoZXZlbnQpOworfQorCitzdGF0aWMgdm9pZCBwZXJmX2FkanVzdF9wZXJpb2Qoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQgbnNlYywgdTY0IGNvdW50KQogewogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwogCXU2NCBwZXJpb2QsIHNhbXBsZV9wZXJpb2Q7CiAJczY0IGRlbHRhOwogCi0JZXZlbnRzICo9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKLQlwZXJpb2QgPSBkaXY2NF91NjQoZXZlbnRzLCBldmVudC0+YXR0ci5zYW1wbGVfZnJlcSk7CisJcGVyaW9kID0gcGVyZl9jYWxjdWxhdGVfcGVyaW9kKGV2ZW50LCBuc2VjLCBjb3VudCk7CiAKIAlkZWx0YSA9IChzNjQpKHBlcmlvZCAtIGh3Yy0+c2FtcGxlX3BlcmlvZCk7CiAJZGVsdGEgPSAoZGVsdGEgKyA3KSAvIDg7IC8qIGxvdyBwYXNzIGZpbHRlciAqLwpAQCAtMTM2OCwxMyArMTUxOCwyMiBAQAogCQlzYW1wbGVfcGVyaW9kID0gMTsKIAogCWh3Yy0+c2FtcGxlX3BlcmlvZCA9IHNhbXBsZV9wZXJpb2Q7CisKKwlpZiAoYXRvbWljNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCkgPiA4KnNhbXBsZV9wZXJpb2QpIHsKKwkJcGVyZl9kaXNhYmxlKCk7CisJCXBlcmZfZXZlbnRfc3RvcChldmVudCk7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgMCk7CisJCXBlcmZfZXZlbnRfc3RhcnQoZXZlbnQpOworCQlwZXJmX2VuYWJsZSgpOworCX0KIH0KIAogc3RhdGljIHZvaWQgcGVyZl9jdHhfYWRqdXN0X2ZyZXEoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQogewogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjOwotCXU2NCBpbnRlcnJ1cHRzLCBmcmVxOworCXU2NCBpbnRlcnJ1cHRzLCBub3c7CisJczY0IGRlbHRhOwogCiAJcmF3X3NwaW5fbG9jaygmY3R4LT5sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShldmVudCwgJmN0eC0+ZXZlbnRfbGlzdCwgZXZlbnRfZW50cnkpIHsKQEAgLTEzOTUsNDQgKzE1NTQsMTggQEAKIAkJaWYgKGludGVycnVwdHMgPT0gTUFYX0lOVEVSUlVQVFMpIHsKIAkJCXBlcmZfbG9nX3Rocm90dGxlKGV2ZW50LCAxKTsKIAkJCWV2ZW50LT5wbXUtPnVudGhyb3R0bGUoZXZlbnQpOwotCQkJaW50ZXJydXB0cyA9IDIqc3lzY3RsX3BlcmZfZXZlbnRfc2FtcGxlX3JhdGUvSFo7CiAJCX0KIAogCQlpZiAoIWV2ZW50LT5hdHRyLmZyZXEgfHwgIWV2ZW50LT5hdHRyLnNhbXBsZV9mcmVxKQogCQkJY29udGludWU7CiAKLQkJLyoKLQkJICogaWYgdGhlIHNwZWNpZmllZCBmcmVxIDwgSFogdGhlbiB3ZSBuZWVkIHRvIHNraXAgdGlja3MKLQkJICovCi0JCWlmIChldmVudC0+YXR0ci5zYW1wbGVfZnJlcSA8IEhaKSB7Ci0JCQlmcmVxID0gZXZlbnQtPmF0dHIuc2FtcGxlX2ZyZXE7CisJCWV2ZW50LT5wbXUtPnJlYWQoZXZlbnQpOworCQlub3cgPSBhdG9taWM2NF9yZWFkKCZldmVudC0+Y291bnQpOworCQlkZWx0YSA9IG5vdyAtIGh3Yy0+ZnJlcV9jb3VudF9zdGFtcDsKKwkJaHdjLT5mcmVxX2NvdW50X3N0YW1wID0gbm93OwogCi0JCQlod2MtPmZyZXFfY291bnQgKz0gZnJlcTsKLQkJCWh3Yy0+ZnJlcV9pbnRlcnJ1cHRzICs9IGludGVycnVwdHM7Ci0KLQkJCWlmIChod2MtPmZyZXFfY291bnQgPCBIWikKLQkJCQljb250aW51ZTsKLQotCQkJaW50ZXJydXB0cyA9IGh3Yy0+ZnJlcV9pbnRlcnJ1cHRzOwotCQkJaHdjLT5mcmVxX2ludGVycnVwdHMgPSAwOwotCQkJaHdjLT5mcmVxX2NvdW50IC09IEhaOwotCQl9IGVsc2UKLQkJCWZyZXEgPSBIWjsKLQotCQlwZXJmX2FkanVzdF9wZXJpb2QoZXZlbnQsIGZyZXEgKiBpbnRlcnJ1cHRzKTsKLQotCQkvKgotCQkgKiBJbiBvcmRlciB0byBhdm9pZCBiZWluZyBzdGFsbGVkIGJ5IGFuIChhY2NpZGVudGFsKSBodWdlCi0JCSAqIHNhbXBsZSBwZXJpb2QsIGZvcmNlIHJlc2V0IHRoZSBzYW1wbGUgcGVyaW9kIGlmIHdlIGRpZG4ndAotCQkgKiBnZXQgYW55IGV2ZW50cyBpbiB0aGlzIGZyZXEgcGVyaW9kLgotCQkgKi8KLQkJaWYgKCFpbnRlcnJ1cHRzKSB7Ci0JCQlwZXJmX2Rpc2FibGUoKTsKLQkJCWV2ZW50LT5wbXUtPmRpc2FibGUoZXZlbnQpOwotCQkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCAwKTsKLQkJCWV2ZW50LT5wbXUtPmVuYWJsZShldmVudCk7Ci0JCQlwZXJmX2VuYWJsZSgpOwotCQl9CisJCWlmIChkZWx0YSA+IDApCisJCQlwZXJmX2FkanVzdF9wZXJpb2QoZXZlbnQsIFRJQ0tfTlNFQywgZGVsdGEpOwogCX0KIAlyYXdfc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7CiB9CkBAIC0xNDQyLDI2ICsxNTc1LDE4IEBACiAgKi8KIHN0YXRpYyB2b2lkIHJvdGF0ZV9jdHgoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4KQogewotCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKLQogCWlmICghY3R4LT5ucl9ldmVudHMpCiAJCXJldHVybjsKIAogCXJhd19zcGluX2xvY2soJmN0eC0+bG9jayk7Ci0JLyoKLQkgKiBSb3RhdGUgdGhlIGZpcnN0IGVudHJ5IGxhc3QgKHdvcmtzIGp1c3QgZmluZSBmb3IgZ3JvdXAgZXZlbnRzIHRvbyk6Ci0JICovCi0JcGVyZl9kaXNhYmxlKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQkJbGlzdF9tb3ZlX3RhaWwoJmV2ZW50LT5ncm91cF9lbnRyeSwgJmN0eC0+Z3JvdXBfbGlzdCk7Ci0JCWJyZWFrOwotCX0KLQlwZXJmX2VuYWJsZSgpOworCisJLyogUm90YXRlIHRoZSBmaXJzdCBlbnRyeSBsYXN0IG9mIG5vbi1waW5uZWQgZ3JvdXBzICovCisJbGlzdF9yb3RhdGVfbGVmdCgmY3R4LT5mbGV4aWJsZV9ncm91cHMpOwogCiAJcmF3X3NwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwogfQogCi12b2lkIHBlcmZfZXZlbnRfdGFza190aWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwgaW50IGNwdSkKK3ZvaWQgcGVyZl9ldmVudF90YXNrX3RpY2soc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKQogewogCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHg7CiAJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4OwpAQCAtMTQ2OSwyNCArMTU5NCw0MyBAQAogCWlmICghYXRvbWljX3JlYWQoJm5yX2V2ZW50cykpCiAJCXJldHVybjsKIAotCWNwdWN0eCA9ICZwZXJfY3B1KHBlcmZfY3B1X2NvbnRleHQsIGNwdSk7CisJY3B1Y3R4ID0gJl9fZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7CiAJY3R4ID0gY3Vyci0+cGVyZl9ldmVudF9jdHhwOwogCisJcGVyZl9kaXNhYmxlKCk7CisKIAlwZXJmX2N0eF9hZGp1c3RfZnJlcSgmY3B1Y3R4LT5jdHgpOwogCWlmIChjdHgpCiAJCXBlcmZfY3R4X2FkanVzdF9mcmVxKGN0eCk7CiAKLQlwZXJmX2V2ZW50X2NwdV9zY2hlZF9vdXQoY3B1Y3R4KTsKKwljcHVfY3R4X3NjaGVkX291dChjcHVjdHgsIEVWRU5UX0ZMRVhJQkxFKTsKIAlpZiAoY3R4KQotCQlfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQoY3R4KTsKKwkJdGFza19jdHhfc2NoZWRfb3V0KGN0eCwgRVZFTlRfRkxFWElCTEUpOwogCiAJcm90YXRlX2N0eCgmY3B1Y3R4LT5jdHgpOwogCWlmIChjdHgpCiAJCXJvdGF0ZV9jdHgoY3R4KTsKIAotCXBlcmZfZXZlbnRfY3B1X3NjaGVkX2luKGNwdWN0eCwgY3B1KTsKKwljcHVfY3R4X3NjaGVkX2luKGNwdWN0eCwgRVZFTlRfRkxFWElCTEUpOwogCWlmIChjdHgpCi0JCXBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihjdXJyLCBjcHUpOworCQl0YXNrX2N0eF9zY2hlZF9pbihjdXJyLCBFVkVOVF9GTEVYSUJMRSk7CisKKwlwZXJmX2VuYWJsZSgpOworfQorCitzdGF0aWMgaW50IGV2ZW50X2VuYWJsZV9vbl9leGVjKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCit7CisJaWYgKCFldmVudC0+YXR0ci5lbmFibGVfb25fZXhlYykKKwkJcmV0dXJuIDA7CisKKwlldmVudC0+YXR0ci5lbmFibGVfb25fZXhlYyA9IDA7CisJaWYgKGV2ZW50LT5zdGF0ZSA+PSBQRVJGX0VWRU5UX1NUQVRFX0lOQUNUSVZFKQorCQlyZXR1cm4gMDsKKworCV9fcGVyZl9ldmVudF9tYXJrX2VuYWJsZWQoZXZlbnQsIGN0eCk7CisKKwlyZXR1cm4gMTsKIH0KIAogLyoKQEAgLTE0OTksNiArMTY0Myw3IEBACiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVuYWJsZWQgPSAwOworCWludCByZXQ7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJY3R4ID0gdGFzay0+cGVyZl9ldmVudF9jdHhwOwpAQCAtMTUwOSwxNCArMTY1NCwxNiBAQAogCiAJcmF3X3NwaW5fbG9jaygmY3R4LT5sb2NrKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KSB7Ci0JCWlmICghZXZlbnQtPmF0dHIuZW5hYmxlX29uX2V4ZWMpCi0JCQljb250aW51ZTsKLQkJZXZlbnQtPmF0dHIuZW5hYmxlX29uX2V4ZWMgPSAwOwotCQlpZiAoZXZlbnQtPnN0YXRlID49IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkUpCi0JCQljb250aW51ZTsKLQkJX19wZXJmX2V2ZW50X21hcmtfZW5hYmxlZChldmVudCwgY3R4KTsKLQkJZW5hYmxlZCA9IDE7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+cGlubmVkX2dyb3VwcywgZ3JvdXBfZW50cnkpIHsKKwkJcmV0ID0gZXZlbnRfZW5hYmxlX29uX2V4ZWMoZXZlbnQsIGN0eCk7CisJCWlmIChyZXQpCisJCQllbmFibGVkID0gMTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5mbGV4aWJsZV9ncm91cHMsIGdyb3VwX2VudHJ5KSB7CisJCXJldCA9IGV2ZW50X2VuYWJsZV9vbl9leGVjKGV2ZW50LCBjdHgpOworCQlpZiAocmV0KQorCQkJZW5hYmxlZCA9IDE7CiAJfQogCiAJLyoKQEAgLTE1MjcsNyArMTY3NCw3IEBACiAKIAlyYXdfc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7CiAKLQlwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4odGFzaywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4odGFzayk7CiAgb3V0OgogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KQEAgLTE1OTAsNyArMTczNyw4IEBACiB7CiAJcmF3X3NwaW5fbG9ja19pbml0KCZjdHgtPmxvY2spOwogCW11dGV4X2luaXQoJmN0eC0+bXV0ZXgpOwotCUlOSVRfTElTVF9IRUFEKCZjdHgtPmdyb3VwX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZjdHgtPnBpbm5lZF9ncm91cHMpOworCUlOSVRfTElTVF9IRUFEKCZjdHgtPmZsZXhpYmxlX2dyb3Vwcyk7CiAJSU5JVF9MSVNUX0hFQUQoJmN0eC0+ZXZlbnRfbGlzdCk7CiAJYXRvbWljX3NldCgmY3R4LT5yZWZjb3VudCwgMSk7CiAJY3R4LT50YXNrID0gdGFzazsKQEAgLTM2MDgsNyArMzc1Niw3IEBACiAJCQkvKiAudGlkICovCiAJCQkuc3RhcnQgID0gdm1hLT52bV9zdGFydCwKIAkJCS5sZW4gICAgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCi0JCQkucGdvZmYgID0gdm1hLT52bV9wZ29mZiwKKwkJCS5wZ29mZiAgPSAodTY0KXZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVCwKIAkJfSwKIAl9OwogCkBAIC0zNjg4LDEyICszODM2LDEyIEBACiAKIAlpZiAoZXZlbnQtPmF0dHIuZnJlcSkgewogCQl1NjQgbm93ID0gcGVyZl9jbG9jaygpOwotCQlzNjQgZGVsdGEgPSBub3cgLSBod2MtPmZyZXFfc3RhbXA7CisJCXM2NCBkZWx0YSA9IG5vdyAtIGh3Yy0+ZnJlcV90aW1lX3N0YW1wOwogCi0JCWh3Yy0+ZnJlcV9zdGFtcCA9IG5vdzsKKwkJaHdjLT5mcmVxX3RpbWVfc3RhbXAgPSBub3c7CiAKLQkJaWYgKGRlbHRhID4gMCAmJiBkZWx0YSA8IFRJQ0tfTlNFQykKLQkJCXBlcmZfYWRqdXN0X3BlcmlvZChldmVudCwgTlNFQ19QRVJfU0VDIC8gKGludClkZWx0YSk7CisJCWlmIChkZWx0YSA+IDAgJiYgZGVsdGEgPCAyKlRJQ0tfTlNFQykKKwkJCXBlcmZfYWRqdXN0X3BlcmlvZChldmVudCwgZGVsdGEsIGh3Yy0+bGFzdF9wZXJpb2QpOwogCX0KIAogCS8qCkBAIC00MTg0LDcgKzQzMzIsNyBAQAogCS5yZWFkCQk9IHRhc2tfY2xvY2tfcGVyZl9ldmVudF9yZWFkLAogfTsKIAotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX0VWRU5UX1RSQUNJTkcKIAogdm9pZCBwZXJmX3RwX2V2ZW50KGludCBldmVudF9pZCwgdTY0IGFkZHIsIHU2NCBjb3VudCwgdm9pZCAqcmVjb3JkLAogCQkJICBpbnQgZW50cnlfc2l6ZSkKQEAgLTQyODksNyArNDQzNyw3IEBACiB7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfRVZFTlRfUFJPRklMRSAqLworI2VuZGlmIC8qIENPTkZJR19FVkVOVF9UUkFDSU5HICovCiAKICNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCiBzdGF0aWMgdm9pZCBicF9wZXJmX2V2ZW50X2Rlc3Ryb3koc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQpAQCAtNDg3MCw4ICs1MDE4LDE1IEBACiAJZWxzZQogCQljaGlsZF9ldmVudC0+c3RhdGUgPSBQRVJGX0VWRU5UX1NUQVRFX09GRjsKIAotCWlmIChwYXJlbnRfZXZlbnQtPmF0dHIuZnJlcSkKLQkJY2hpbGRfZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QgPSBwYXJlbnRfZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2Q7CisJaWYgKHBhcmVudF9ldmVudC0+YXR0ci5mcmVxKSB7CisJCXU2NCBzYW1wbGVfcGVyaW9kID0gcGFyZW50X2V2ZW50LT5ody5zYW1wbGVfcGVyaW9kOworCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmNoaWxkX2V2ZW50LT5odzsKKworCQlod2MtPnNhbXBsZV9wZXJpb2QgPSBzYW1wbGVfcGVyaW9kOworCQlod2MtPmxhc3RfcGVyaW9kICAgPSBzYW1wbGVfcGVyaW9kOworCisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgc2FtcGxlX3BlcmlvZCk7CisJfQogCiAJY2hpbGRfZXZlbnQtPm92ZXJmbG93X2hhbmRsZXIgPSBwYXJlbnRfZXZlbnQtPm92ZXJmbG93X2hhbmRsZXI7CiAKQEAgLTUwMzksNyArNTE5NCwxMSBAQAogCW11dGV4X2xvY2tfbmVzdGVkKCZjaGlsZF9jdHgtPm11dGV4LCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAKIGFnYWluOgotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGlsZF9ldmVudCwgdG1wLCAmY2hpbGRfY3R4LT5ncm91cF9saXN0LAorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGlsZF9ldmVudCwgdG1wLCAmY2hpbGRfY3R4LT5waW5uZWRfZ3JvdXBzLAorCQkJCSBncm91cF9lbnRyeSkKKwkJX19wZXJmX2V2ZW50X2V4aXRfdGFzayhjaGlsZF9ldmVudCwgY2hpbGRfY3R4LCBjaGlsZCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hpbGRfZXZlbnQsIHRtcCwgJmNoaWxkX2N0eC0+ZmxleGlibGVfZ3JvdXBzLAogCQkJCSBncm91cF9lbnRyeSkKIAkJX19wZXJmX2V2ZW50X2V4aXRfdGFzayhjaGlsZF9ldmVudCwgY2hpbGRfY3R4LCBjaGlsZCk7CiAKQEAgLTUwNDgsNyArNTIwNyw4IEBACiAJICogaXRzIHNpYmxpbmdzIHRvIHRoZSBsaXN0LCBidXQgd2Ugb2J0YWluZWQgJ3RtcCcgYmVmb3JlIHRoYXQgd2hpY2gKIAkgKiB3aWxsIHN0aWxsIHBvaW50IHRvIHRoZSBsaXN0IGhlYWQgdGVybWluYXRpbmcgdGhlIGl0ZXJhdGlvbi4KIAkgKi8KLQlpZiAoIWxpc3RfZW1wdHkoJmNoaWxkX2N0eC0+Z3JvdXBfbGlzdCkpCisJaWYgKCFsaXN0X2VtcHR5KCZjaGlsZF9jdHgtPnBpbm5lZF9ncm91cHMpIHx8CisJICAgICFsaXN0X2VtcHR5KCZjaGlsZF9jdHgtPmZsZXhpYmxlX2dyb3VwcykpCiAJCWdvdG8gYWdhaW47CiAKIAltdXRleF91bmxvY2soJmNoaWxkX2N0eC0+bXV0ZXgpOwpAQCAtNTA1Niw2ICs1MjE2LDI0IEBACiAJcHV0X2N0eChjaGlsZF9jdHgpOwogfQogCitzdGF0aWMgdm9pZCBwZXJmX2ZyZWVfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAorCQkJICAgIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqcGFyZW50ID0gZXZlbnQtPnBhcmVudDsKKworCWlmIChXQVJOX09OX09OQ0UoIXBhcmVudCkpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnBhcmVudC0+Y2hpbGRfbXV0ZXgpOworCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5jaGlsZF9saXN0KTsKKwltdXRleF91bmxvY2soJnBhcmVudC0+Y2hpbGRfbXV0ZXgpOworCisJZnB1dChwYXJlbnQtPmZpbHApOworCisJbGlzdF9kZWxfZXZlbnQoZXZlbnQsIGN0eCk7CisJZnJlZV9ldmVudChldmVudCk7Cit9CisKIC8qCiAgKiBmcmVlIGFuIHVuZXhwb3NlZCwgdW51c2VkIGNvbnRleHQgYXMgY3JlYXRlZCBieSBpbmhlcml0YW5jZSBieQogICogaW5pdF90YXNrIGJlbG93LCB1c2VkIGJ5IGZvcmsoKSBpbiBjYXNlIG9mIGZhaWwuCkBAIC01MDcwLDIzICs1MjQ4LDE1IEBACiAKIAltdXRleF9sb2NrKCZjdHgtPm11dGV4KTsKIGFnYWluOgotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgdG1wLCAmY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkgewotCQlzdHJ1Y3QgcGVyZl9ldmVudCAqcGFyZW50ID0gZXZlbnQtPnBhcmVudDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZlbnQsIHRtcCwgJmN0eC0+cGlubmVkX2dyb3VwcywgZ3JvdXBfZW50cnkpCisJCXBlcmZfZnJlZV9ldmVudChldmVudCwgY3R4KTsKIAotCQlpZiAoV0FSTl9PTl9PTkNFKCFwYXJlbnQpKQotCQkJY29udGludWU7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCB0bXAsICZjdHgtPmZsZXhpYmxlX2dyb3VwcywKKwkJCQkgZ3JvdXBfZW50cnkpCisJCXBlcmZfZnJlZV9ldmVudChldmVudCwgY3R4KTsKIAotCQltdXRleF9sb2NrKCZwYXJlbnQtPmNoaWxkX211dGV4KTsKLQkJbGlzdF9kZWxfaW5pdCgmZXZlbnQtPmNoaWxkX2xpc3QpOwotCQltdXRleF91bmxvY2soJnBhcmVudC0+Y2hpbGRfbXV0ZXgpOwotCi0JCWZwdXQocGFyZW50LT5maWxwKTsKLQotCQlsaXN0X2RlbF9ldmVudChldmVudCwgY3R4KTsKLQkJZnJlZV9ldmVudChldmVudCk7Ci0JfQotCi0JaWYgKCFsaXN0X2VtcHR5KCZjdHgtPmdyb3VwX2xpc3QpKQorCWlmICghbGlzdF9lbXB0eSgmY3R4LT5waW5uZWRfZ3JvdXBzKSB8fAorCSAgICAhbGlzdF9lbXB0eSgmY3R4LT5mbGV4aWJsZV9ncm91cHMpKQogCQlnb3RvIGFnYWluOwogCiAJbXV0ZXhfdW5sb2NrKCZjdHgtPm11dGV4KTsKQEAgLTUwOTQsMTIgKzUyNjQsNTQgQEAKIAlwdXRfY3R4KGN0eCk7CiB9CiAKK3N0YXRpYyBpbnQKK2luaGVyaXRfdGFza19ncm91cChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LAorCQkgICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpwYXJlbnRfY3R4LAorCQkgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAorCQkgICBpbnQgKmluaGVyaXRlZF9hbGwpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjaGlsZF9jdHggPSBjaGlsZC0+cGVyZl9ldmVudF9jdHhwOworCisJaWYgKCFldmVudC0+YXR0ci5pbmhlcml0KSB7CisJCSppbmhlcml0ZWRfYWxsID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFjaGlsZF9jdHgpIHsKKwkJLyoKKwkJICogVGhpcyBpcyBleGVjdXRlZCBmcm9tIHRoZSBwYXJlbnQgdGFzayBjb250ZXh0LCBzbworCQkgKiBpbmhlcml0IGV2ZW50cyB0aGF0IGhhdmUgYmVlbiBtYXJrZWQgZm9yIGNsb25pbmcuCisJCSAqIEZpcnN0IGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgY29udGV4dCBmb3IgdGhlCisJCSAqIGNoaWxkLgorCQkgKi8KKworCQljaGlsZF9jdHggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0KSwKKwkJCQkgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghY2hpbGRfY3R4KQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJX19wZXJmX2V2ZW50X2luaXRfY29udGV4dChjaGlsZF9jdHgsIGNoaWxkKTsKKwkJY2hpbGQtPnBlcmZfZXZlbnRfY3R4cCA9IGNoaWxkX2N0eDsKKwkJZ2V0X3Rhc2tfc3RydWN0KGNoaWxkKTsKKwl9CisKKwlyZXQgPSBpbmhlcml0X2dyb3VwKGV2ZW50LCBwYXJlbnQsIHBhcmVudF9jdHgsCisJCQkgICAgY2hpbGQsIGNoaWxkX2N0eCk7CisKKwlpZiAocmV0KQorCQkqaW5oZXJpdGVkX2FsbCA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCisKIC8qCiAgKiBJbml0aWFsaXplIHRoZSBwZXJmX2V2ZW50IGNvbnRleHQgaW4gdGFza19zdHJ1Y3QKICAqLwogaW50IHBlcmZfZXZlbnRfaW5pdF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7Ci0Jc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY2hpbGRfY3R4ID0gTlVMTCwgKnBhcmVudF9jdHg7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY2hpbGRfY3R4LCAqcGFyZW50X2N0eDsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjbG9uZWRfY3R4OwogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCA9IGN1cnJlbnQ7CkBAIC01MTM3LDQxICs1MzQ5LDIyIEBACiAJICogV2UgZG9udCBoYXZlIHRvIGRpc2FibGUgTk1JcyAtIHdlIGFyZSBvbmx5IGxvb2tpbmcgYXQKIAkgKiB0aGUgbGlzdCwgbm90IG1hbmlwdWxhdGluZyBpdDoKIAkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmcGFyZW50X2N0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKLQotCQlpZiAoIWV2ZW50LT5hdHRyLmluaGVyaXQpIHsKLQkJCWluaGVyaXRlZF9hbGwgPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoIWNoaWxkLT5wZXJmX2V2ZW50X2N0eHApIHsKLQkJCS8qCi0JCQkgKiBUaGlzIGlzIGV4ZWN1dGVkIGZyb20gdGhlIHBhcmVudCB0YXNrIGNvbnRleHQsIHNvCi0JCQkgKiBpbmhlcml0IGV2ZW50cyB0aGF0IGhhdmUgYmVlbiBtYXJrZWQgZm9yIGNsb25pbmcuCi0JCQkgKiBGaXJzdCBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGNvbnRleHQgZm9yIHRoZQotCQkJICogY2hpbGQuCi0JCQkgKi8KLQotCQkJY2hpbGRfY3R4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCksCi0JCQkJCSAgICBHRlBfS0VSTkVMKTsKLQkJCWlmICghY2hpbGRfY3R4KSB7Ci0JCQkJcmV0ID0gLUVOT01FTTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJX19wZXJmX2V2ZW50X2luaXRfY29udGV4dChjaGlsZF9jdHgsIGNoaWxkKTsKLQkJCWNoaWxkLT5wZXJmX2V2ZW50X2N0eHAgPSBjaGlsZF9jdHg7Ci0JCQlnZXRfdGFza19zdHJ1Y3QoY2hpbGQpOwotCQl9Ci0KLQkJcmV0ID0gaW5oZXJpdF9ncm91cChldmVudCwgcGFyZW50LCBwYXJlbnRfY3R4LAotCQkJCQkgICAgIGNoaWxkLCBjaGlsZF9jdHgpOwotCQlpZiAocmV0KSB7Ci0JCQlpbmhlcml0ZWRfYWxsID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmcGFyZW50X2N0eC0+cGlubmVkX2dyb3VwcywgZ3JvdXBfZW50cnkpIHsKKwkJcmV0ID0gaW5oZXJpdF90YXNrX2dyb3VwKGV2ZW50LCBwYXJlbnQsIHBhcmVudF9jdHgsIGNoaWxkLAorCQkJCQkgJmluaGVyaXRlZF9hbGwpOworCQlpZiAocmV0KQogCQkJYnJlYWs7Ci0JCX0KIAl9CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmcGFyZW50X2N0eC0+ZmxleGlibGVfZ3JvdXBzLCBncm91cF9lbnRyeSkgeworCQlyZXQgPSBpbmhlcml0X3Rhc2tfZ3JvdXAoZXZlbnQsIHBhcmVudCwgcGFyZW50X2N0eCwgY2hpbGQsCisJCQkJCSAmaW5oZXJpdGVkX2FsbCk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisKKwljaGlsZF9jdHggPSBjaGlsZC0+cGVyZl9ldmVudF9jdHhwOworCiAJaWYgKGNoaWxkX2N0eCAmJiBpbmhlcml0ZWRfYWxsKSB7CiAJCS8qCiAJCSAqIE1hcmsgdGhlIGNoaWxkIGNvbnRleHQgYXMgYSBjbG9uZSBvZiB0aGUgcGFyZW50CkBAIC01MjIwLDcgKzU0MTMsOSBAQAogCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9ICZjcHVjdHgtPmN0eDsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsICp0bXA7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZlbnQsIHRtcCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCB0bXAsICZjdHgtPnBpbm5lZF9ncm91cHMsIGdyb3VwX2VudHJ5KQorCQlfX3BlcmZfZXZlbnRfcmVtb3ZlX2Zyb21fY29udGV4dChldmVudCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCB0bXAsICZjdHgtPmZsZXhpYmxlX2dyb3VwcywgZ3JvdXBfZW50cnkpCiAJCV9fcGVyZl9ldmVudF9yZW1vdmVfZnJvbV9jb250ZXh0KGV2ZW50KTsKIH0KIHN0YXRpYyB2b2lkIHBlcmZfZXZlbnRfZXhpdF9jcHUoaW50IGNwdSkKQEAgLTUyNTgsNiArNTQ1MywxMCBAQAogCQlwZXJmX2V2ZW50X2V4aXRfY3B1KGNwdSk7CiAJCWJyZWFrOwogCisJY2FzZSBDUFVfREVBRDoKKwkJaHdfcGVyZl9ldmVudF9zZXR1cF9vZmZsaW5lKGNwdSk7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3BpZC5jIGIva2VybmVsL3BpZC5jCmluZGV4IDJlMTdjOWMuLmIwOGU2OTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9waWQuYworKysgYi9rZXJuZWwvcGlkLmMKQEAgLTM2Nyw3ICszNjcsNyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcmVzdWx0ID0gTlVMTDsKIAlpZiAocGlkKSB7CiAJCXN0cnVjdCBobGlzdF9ub2RlICpmaXJzdDsKLQkJZmlyc3QgPSByY3VfZGVyZWZlcmVuY2UocGlkLT50YXNrc1t0eXBlXS5maXJzdCk7CisJCWZpcnN0ID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHBpZC0+dGFza3NbdHlwZV0uZmlyc3QsIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8IGxvY2tkZXBfaXNfaGVsZCgmdGFza2xpc3RfbG9jaykpOwogCQlpZiAoZmlyc3QpCiAJCQlyZXN1bHQgPSBobGlzdF9lbnRyeShmaXJzdCwgc3RydWN0IHRhc2tfc3RydWN0LCBwaWRzWyh0eXBlKV0ubm9kZSk7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvc2l4LXRpbWVycy5jIGIva2VybmVsL3Bvc2l4LXRpbWVycy5jCmluZGV4IDQ5NTQ0MDcuLjAwZDFmZGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3NpeC10aW1lcnMuYworKysgYi9rZXJuZWwvcG9zaXgtdGltZXJzLmMKQEAgLTI1Niw3ICsyNTYsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgcG9zaXhfZ2V0X2NvYXJzZV9yZXMoY29uc3QgY2xvY2tpZF90IHdoaWNoX2Nsb2NrLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKQorc3RhdGljIGludCBwb3NpeF9nZXRfY29hcnNlX3Jlcyhjb25zdCBjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssIHN0cnVjdCB0aW1lc3BlYyAqdHApCiB7CiAJKnRwID0ga3RpbWVfdG9fdGltZXNwZWMoS1RJTUVfTE9XX1JFUyk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvS2NvbmZpZyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCmluZGV4IDkxZTA5ZDMuLjVjMzZlYTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9LY29uZmlnCisrKyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCkBAIC0yNyw2ICsyNywxNSBAQAogCWNvZGUuIFRoaXMgaXMgaGVscGZ1bCB3aGVuIGRlYnVnZ2luZyBhbmQgcmVwb3J0aW5nIFBNIGJ1Z3MsIGxpa2UKIAlzdXNwZW5kIHN1cHBvcnQuCiAKK2NvbmZpZyBQTV9BRFZBTkNFRF9ERUJVRworCWJvb2wgIkV4dHJhIFBNIGF0dHJpYnV0ZXMgaW4gc3lzZnMgZm9yIGxvdy1sZXZlbCBkZWJ1Z2dpbmcvdGVzdGluZyIKKwlkZXBlbmRzIG9uIFBNX0RFQlVHCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCUFkZCBleHRyYSBzeXNmcyBhdHRyaWJ1dGVzIGFsbG93aW5nIG9uZSB0byBhY2Nlc3Mgc29tZSBQb3dlciBNYW5hZ2VtZW50CisJZmllbGRzIG9mIGRldmljZSBvYmplY3RzIGZyb20gdXNlciBzcGFjZS4gIElmIHlvdSBhcmUgbm90IGEga2VybmVsCisJZGV2ZWxvcGVyIGludGVyZXN0ZWQgaW4gZGVidWdnaW5nL3Rlc3RpbmcgUG93ZXIgTWFuYWdlbWVudCwgc2F5ICJubyIuCisKIGNvbmZpZyBQTV9WRVJCT1NFCiAJYm9vbCAiVmVyYm9zZSBQb3dlciBNYW5hZ2VtZW50IGRlYnVnZ2luZyIKIAlkZXBlbmRzIG9uIFBNX0RFQlVHCkBAIC04NSw2ICs5NCwxMSBAQAogCWRlcGVuZHMgb24gU1VTUEVORCB8fCBISUJFUk5BVElPTiB8fCBYRU5fU0FWRV9SRVNUT1JFCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBQTV9TTEVFUF9BRFZBTkNFRF9ERUJVRworCWJvb2wKKwlkZXBlbmRzIG9uIFBNX0FEVkFOQ0VEX0RFQlVHCisJZGVmYXVsdCBuCisKIGNvbmZpZyBTVVNQRU5ECiAJYm9vbCAiU3VzcGVuZCB0byBSQU0gYW5kIHN0YW5kYnkiCiAJZGVwZW5kcyBvbiBQTSAmJiBBUkNIX1NVU1BFTkRfUE9TU0lCTEUKQEAgLTIyMiwzICsyMzYsOCBAQAogCSAgYW5kIHRoZSBidXMgdHlwZSBkcml2ZXJzIG9mIHRoZSBidXNlcyB0aGUgZGV2aWNlcyBhcmUgb24gYXJlCiAJICByZXNwb25zaWJsZSBmb3IgdGhlIGFjdHVhbCBoYW5kbGluZyBvZiB0aGUgYXV0b3N1c3BlbmQgcmVxdWVzdHMgYW5kCiAJICB3YWtlLXVwIGV2ZW50cy4KKworY29uZmlnIFBNX09QUworCWJvb2wKKwlkZXBlbmRzIG9uIFBNX1NMRUVQIHx8IFBNX1JVTlRJTUUKKwlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCmluZGV4IDA5OThjNzEuLmI1ODgwMGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9tYWluLmMKKysrIGIva2VybmVsL3Bvd2VyL21haW4uYwpAQCAtNDQsNiArNDQsMzIgQEAKIAkJCT09IE5PVElGWV9CQUQpID8gLUVJTlZBTCA6IDA7CiB9CiAKKy8qIElmIHNldCwgZGV2aWNlcyBtYXkgYmUgc3VzcGVuZGVkIGFuZCByZXN1bWVkIGFzeW5jaHJvbm91c2x5LiAqLworaW50IHBtX2FzeW5jX2VuYWJsZWQgPSAxOworCitzdGF0aWMgc3NpemVfdCBwbV9hc3luY19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcG1fYXN5bmNfZW5hYmxlZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBtX2FzeW5jX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YWwgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBtX2FzeW5jX2VuYWJsZWQgPSB2YWw7CisJcmV0dXJuIG47Cit9CisKK3Bvd2VyX2F0dHIocG1fYXN5bmMpOworCiAjaWZkZWYgQ09ORklHX1BNX0RFQlVHCiBpbnQgcG1fdGVzdF9sZXZlbCA9IFRFU1RfTk9ORTsKIApAQCAtMjA4LDkgKzIzNCwxMiBAQAogI2lmZGVmIENPTkZJR19QTV9UUkFDRQogCSZwbV90cmFjZV9hdHRyLmF0dHIsCiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkgJiYgZGVmaW5lZChDT05GSUdfUE1fREVCVUcpCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCisJJnBtX2FzeW5jX2F0dHIuYXR0ciwKKyNpZmRlZiBDT05GSUdfUE1fREVCVUcKIAkmcG1fdGVzdF9hdHRyLmF0dHIsCiAjZW5kaWYKKyNlbmRpZgogCU5VTEwsCiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCmluZGV4IDM2Y2IxNjguLjgzMGNhZGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCisrKyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCkBAIC0xMTgxLDcgKzExODEsNyBAQAogCiAJbWVtb3J5X2JtX3Bvc2l0aW9uX3Jlc2V0KCZjb3B5X2JtKTsKIAotCXdoaWxlICh0b19mcmVlX25vcm1hbCA+IDAgJiYgdG9fZnJlZV9oaWdobWVtID4gMCkgeworCXdoaWxlICh0b19mcmVlX25vcm1hbCA+IDAgfHwgdG9fZnJlZV9oaWdobWVtID4gMCkgewogCQl1bnNpZ25lZCBsb25nIHBmbiA9IG1lbW9yeV9ibV9uZXh0X3BmbigmY29weV9ibSk7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIApAQCAtMTUwMCw3ICsxNTAwLDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIG5yX2hpZ2htZW07CiAKLQlwcmludGsoS0VSTl9JTkZPICJQTTogQ3JlYXRpbmcgaGliZXJuYXRpb24gaW1hZ2U6IFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiUE06IENyZWF0aW5nIGhpYmVybmF0aW9uIGltYWdlOlxuIik7CiAKIAlkcmFpbl9sb2NhbF9wYWdlcyhOVUxMKTsKIAlucl9wYWdlcyA9IGNvdW50X2RhdGFfcGFnZXMoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zd2FwLmMgYi9rZXJuZWwvcG93ZXIvc3dhcC5jCmluZGV4IDA5YjJiMGEuLjFkNTc1NzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zd2FwLmMKKysrIGIva2VybmVsL3Bvd2VyL3N3YXAuYwpAQCAtNjU3LDEwICs2NTcsNiBAQAogCXN0cnVjdCBzd3N1c3BfaW5mbyAqaGVhZGVyOwogCiAJKmZsYWdzX3AgPSBzd3N1c3BfaGVhZGVyLT5mbGFnczsKLQlpZiAoSVNfRVJSKHJlc3VtZV9iZGV2KSkgewotCQlwcl9kZWJ1ZygiUE06IEltYWdlIGRldmljZSBub3QgaW5pdGlhbGlzZWRcbiIpOwotCQlyZXR1cm4gUFRSX0VSUihyZXN1bWVfYmRldik7Ci0JfQogCiAJbWVtc2V0KCZzbmFwc2hvdCwgMCwgc2l6ZW9mKHN0cnVjdCBzbmFwc2hvdF9oYW5kbGUpKTsKIAllcnJvciA9IHNuYXBzaG90X3dyaXRlX25leHQoJnNuYXBzaG90LCBQQUdFX1NJWkUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N3c3VzcC5jIGIva2VybmVsL3Bvd2VyL3N3c3VzcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjM2MDFiLi4wMDAwMDAwCi0tLSBhL2tlcm5lbC9wb3dlci9zd3N1c3AuYworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBsaW51eC9rZXJuZWwvcG93ZXIvc3dzdXNwLmMKLSAqCi0gKiBUaGlzIGZpbGUgcHJvdmlkZXMgY29kZSB0byB3cml0ZSBzdXNwZW5kIGltYWdlIHRvIHN3YXAgYW5kIHJlYWQgaXQgYmFjay4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMSBHYWJvciBLdXRpIDxzZWFzb25zQGZvcm5heC5odT4KLSAqIENvcHlyaWdodCAoQykgMTk5OCwyMDAxLTIwMDUgUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgotICoKLSAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCi0gKgotICogSSdkIGxpa2UgdG8gdGhhbmsgdGhlIGZvbGxvd2luZyBwZW9wbGUgZm9yIHRoZWlyIHdvcms6Ci0gKgotICogUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+OgotICogTW9kaWZpY2F0aW9ucywgZGVmZWN0aXZlbmVzcyBwb2ludGluZywgYmVpbmcgd2l0aCBtZSBhdCB0aGUgdmVyeSBiZWdpbm5pbmcsCi0gKiBzdXNwZW5kIHRvIHN3YXAgc3BhY2UsIHN0b3AgYWxsIHRhc2tzLiBQb3J0IHRvIDIuNC4xOC1hYyBhbmQgMi41LjE3LgotICoKLSAqIFN0ZXZlIERvZGRpIDxkaXJrQGxvdGguZGVtb24uY28udWs+OgotICogU3VwcG9ydCB0aGUgcG9zc2liaWxpdHkgb2YgaGFyZHdhcmUgc3RhdGUgcmVzdG9yaW5nLgotICoKLSAqIFJhcGggPGdyZXkuaGF2ZW5zQGVhcnRobGluZy5uZXQ+OgotICogU3VwcG9ydCBmb3IgcHJlc2VydmluZyBzdGF0ZXMgb2YgbmV0d29yayBkZXZpY2VzIGFuZCB2aXJ0dWFsIGNvbnNvbGUKLSAqIChpbmNsdWRpbmcgWCBhbmQgc3ZnYXRleHRtb2RlKQotICoKLSAqIEt1cnQgR2FybG9mZiA8Z2FybG9mZkBzdXNlLmRlPjoKLSAqIFN0cmFpZ2h0ZW5lZCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gaW4gb3JkZXIgdG8gcHJldmVudCBjb21waWxlcnMgZnJvbQotICogcGxheWluZyB0cmlja3Mgd2l0aCBsb2NhbCB2YXJpYWJsZXMuCi0gKgotICogQW5kcmVhcyBNb2hyIDxhLm1vaHJAbWFpbHRvLmRlPgotICoKLSAqIEFsZXggQmFkZWEgPHZhbXBpcmVAZ28ucm8+OgotICogRml4ZWQgcnVuYXdheSBpbml0Ci0gKgotICogUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgotICogUmV3b3JrZWQgdGhlIGZyZWVpbmcgb2YgbWVtb3J5IGFuZCB0aGUgaGFuZGxpbmcgb2Ygc3dhcAotICoKLSAqIE1vcmUgc3RhdGUgc2F2ZXJzIGFyZSB3ZWxjb21lLiBFc3BlY2lhbGx5IGZvciB0aGUgc2NzaSBsYXllci4uLgotICoKLSAqIEZvciBUT0RPcyxGSVhNRXMgYWxzbyBsb29rIGluIERvY3VtZW50YXRpb24vcG93ZXIvc3dzdXNwLnR4dAotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc3dhcC5oPgotI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0jaW5jbHVkZSA8bGludXgvc3dhcG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgotI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgInBvd2VyLmgiCi0KLWludCBpbl9zdXNwZW5kIF9fbm9zYXZlZGF0YSA9IDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvdXNlci5jIGIva2VybmVsL3Bvd2VyL3VzZXIuYwppbmRleCBiZjAwMTRkLi40ZDIyODk2IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvdXNlci5jCisrKyBiL2tlcm5lbC9wb3dlci91c2VyLmMKQEAgLTE5NSw2ICsxOTUsMTUgQEAKIAlyZXR1cm4gcmVzOwogfQogCitzdGF0aWMgdm9pZCBzbmFwc2hvdF9kZXByZWNhdGVkX2lvY3RsKHVuc2lnbmVkIGludCBjbWQpCit7CisJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJcHJpbnRrKEtFUk5fTk9USUNFICIlcGY6IGlvY3RsICclLjh4JyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsICIKKwkJCQkiYmUgcmVtb3ZlZCBzb29uLCB1cGRhdGUgeW91ciBzdXNwZW5kLXRvLWRpc2sgIgorCQkJCSJ1dGlsaXRpZXNcbiIsCisJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCBjbWQpOworfQorCiBzdGF0aWMgbG9uZyBzbmFwc2hvdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKIAkJCQkJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTI0Niw4ICsyNTUsOSBAQAogCQlkYXRhLT5mcm96ZW4gPSAwOwogCQlicmVhazsKIAotCWNhc2UgU05BUFNIT1RfQ1JFQVRFX0lNQUdFOgogCWNhc2UgU05BUFNIT1RfQVRPTUlDX1NOQVBTSE9UOgorCQlzbmFwc2hvdF9kZXByZWNhdGVkX2lvY3RsKGNtZCk7CisJY2FzZSBTTkFQU0hPVF9DUkVBVEVfSU1BR0U6CiAJCWlmIChkYXRhLT5tb2RlICE9IE9fUkRPTkxZIHx8ICFkYXRhLT5mcm96ZW4gIHx8IGRhdGEtPnJlYWR5KSB7CiAJCQllcnJvciA9IC1FUEVSTTsKIAkJCWJyZWFrOwpAQCAtMjc1LDggKzI4NSw5IEBACiAJCWRhdGEtPnJlYWR5ID0gMDsKIAkJYnJlYWs7CiAKLQljYXNlIFNOQVBTSE9UX1BSRUZfSU1BR0VfU0laRToKIAljYXNlIFNOQVBTSE9UX1NFVF9JTUFHRV9TSVpFOgorCQlzbmFwc2hvdF9kZXByZWNhdGVkX2lvY3RsKGNtZCk7CisJY2FzZSBTTkFQU0hPVF9QUkVGX0lNQUdFX1NJWkU6CiAJCWltYWdlX3NpemUgPSBhcmc7CiAJCWJyZWFrOwogCkBAIC0yOTAsMTUgKzMwMSwxNyBAQAogCQllcnJvciA9IHB1dF91c2VyKHNpemUsIChsb2ZmX3QgX191c2VyICopYXJnKTsKIAkJYnJlYWs7CiAKLQljYXNlIFNOQVBTSE9UX0FWQUlMX1NXQVBfU0laRToKIAljYXNlIFNOQVBTSE9UX0FWQUlMX1NXQVA6CisJCXNuYXBzaG90X2RlcHJlY2F0ZWRfaW9jdGwoY21kKTsKKwljYXNlIFNOQVBTSE9UX0FWQUlMX1NXQVBfU0laRToKIAkJc2l6ZSA9IGNvdW50X3N3YXBfcGFnZXMoZGF0YS0+c3dhcCwgMSk7CiAJCXNpemUgPDw9IFBBR0VfU0hJRlQ7CiAJCWVycm9yID0gcHV0X3VzZXIoc2l6ZSwgKGxvZmZfdCBfX3VzZXIgKilhcmcpOwogCQlicmVhazsKIAotCWNhc2UgU05BUFNIT1RfQUxMT0NfU1dBUF9QQUdFOgogCWNhc2UgU05BUFNIT1RfR0VUX1NXQVBfUEFHRToKKwkJc25hcHNob3RfZGVwcmVjYXRlZF9pb2N0bChjbWQpOworCWNhc2UgU05BUFNIT1RfQUxMT0NfU1dBUF9QQUdFOgogCQlpZiAoZGF0YS0+c3dhcCA8IDAgfHwgZGF0YS0+c3dhcCA+PSBNQVhfU1dBUEZJTEVTKSB7CiAJCQllcnJvciA9IC1FTk9ERVY7CiAJCQlicmVhazsKQEAgLTMyMSw2ICszMzQsNyBAQAogCQlicmVhazsKIAogCWNhc2UgU05BUFNIT1RfU0VUX1NXQVBfRklMRTogLyogVGhpcyBpb2N0bCBpcyBkZXByZWNhdGVkICovCisJCXNuYXBzaG90X2RlcHJlY2F0ZWRfaW9jdGwoY21kKTsKIAkJaWYgKCFzd3N1c3Bfc3dhcF9pbl91c2UoKSkgewogCQkJLyoKIAkJCSAqIFVzZXIgc3BhY2UgZW5jb2RlcyBkZXZpY2UgdHlwZXMgYXMgdHdvLWJ5dGUgdmFsdWVzLApAQCAtMzYyLDYgKzM3Niw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTTkFQU0hPVF9QTU9QUzogLyogVGhpcyBpb2N0bCBpcyBkZXByZWNhdGVkICovCisJCXNuYXBzaG90X2RlcHJlY2F0ZWRfaW9jdGwoY21kKTsKIAkJZXJyb3IgPSAtRUlOVkFMOwogCiAJCXN3aXRjaCAoYXJnKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvcHRyYWNlLmMgYi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMjNiZDA5Yy4uNDJhZDhhZSAxMDA2NDQKLS0tIGEva2VybmVsL3B0cmFjZS5jCisrKyBiL2tlcm5lbC9wdHJhY2UuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdzZXQuaD4KIAogCiAvKgpAQCAtNTExLDYgKzUxMiw0NyBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqCitmaW5kX3JlZ3NldChjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXRfdmlldyAqdmlldywgdW5zaWduZWQgaW50IHR5cGUpCit7CisJY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQ7CisJaW50IG47CisKKwlmb3IgKG4gPSAwOyBuIDwgdmlldy0+bjsgKytuKSB7CisJCXJlZ3NldCA9IHZpZXctPnJlZ3NldHMgKyBuOworCQlpZiAocmVnc2V0LT5jb3JlX25vdGVfdHlwZSA9PSB0eXBlKQorCQkJcmV0dXJuIHJlZ3NldDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBwdHJhY2VfcmVnc2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHJlcSwgdW5zaWduZWQgaW50IHR5cGUsCisJCQkgc3RydWN0IGlvdmVjICpraW92KQoreworCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3ICp2aWV3ID0gdGFza191c2VyX3JlZ3NldF92aWV3KHRhc2spOworCWNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0ID0gZmluZF9yZWdzZXQodmlldywgdHlwZSk7CisJaW50IHJlZ3NldF9ubzsKKworCWlmICghcmVnc2V0IHx8IChraW92LT5pb3ZfbGVuICUgcmVnc2V0LT5zaXplKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlZ3NldF9ubyA9IHJlZ3NldCAtIHZpZXctPnJlZ3NldHM7CisJa2lvdi0+aW92X2xlbiA9IG1pbihraW92LT5pb3ZfbGVuLAorCQkJICAgIChfX2tlcm5lbF9zaXplX3QpIChyZWdzZXQtPm4gKiByZWdzZXQtPnNpemUpKTsKKworCWlmIChyZXEgPT0gUFRSQUNFX0dFVFJFR1NFVCkKKwkJcmV0dXJuIGNvcHlfcmVnc2V0X3RvX3VzZXIodGFzaywgdmlldywgcmVnc2V0X25vLCAwLAorCQkJCQkgICBraW92LT5pb3ZfbGVuLCBraW92LT5pb3ZfYmFzZSk7CisJZWxzZQorCQlyZXR1cm4gY29weV9yZWdzZXRfZnJvbV91c2VyKHRhc2ssIHZpZXcsIHJlZ3NldF9ubywgMCwKKwkJCQkJICAgICBraW92LT5pb3ZfbGVuLCBraW92LT5pb3ZfYmFzZSk7Cit9CisKKyNlbmRpZgorCiBpbnQgcHRyYWNlX3JlcXVlc3Qoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LAogCQkgICBsb25nIGFkZHIsIGxvbmcgZGF0YSkKIHsKQEAgLTU3Myw2ICs2MTUsMjYgQEAKIAkJCXJldHVybiAwOwogCQlyZXR1cm4gcHRyYWNlX3Jlc3VtZShjaGlsZCwgcmVxdWVzdCwgU0lHS0lMTCk7CiAKKyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSworCWNhc2UgUFRSQUNFX0dFVFJFR1NFVDoKKwljYXNlIFBUUkFDRV9TRVRSRUdTRVQ6CisJeworCQlzdHJ1Y3QgaW92ZWMga2lvdjsKKwkJc3RydWN0IGlvdmVjIF9fdXNlciAqdWlvdiA9IChzdHJ1Y3QgaW92ZWMgX191c2VyICopIGRhdGE7CisKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1aW92LCBzaXplb2YoKnVpb3YpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChfX2dldF91c2VyKGtpb3YuaW92X2Jhc2UsICZ1aW92LT5pb3ZfYmFzZSkgfHwKKwkJICAgIF9fZ2V0X3VzZXIoa2lvdi5pb3ZfbGVuLCAmdWlvdi0+aW92X2xlbikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXQgPSBwdHJhY2VfcmVnc2V0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCAma2lvdik7CisJCWlmICghcmV0KQorCQkJcmV0ID0gX19wdXRfdXNlcihraW92Lmlvdl9sZW4sICZ1aW92LT5pb3ZfbGVuKTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtNzExLDYgKzc3MywzMiBAQAogCQllbHNlCiAJCQlyZXQgPSBwdHJhY2Vfc2V0c2lnaW5mbyhjaGlsZCwgJnNpZ2luZm8pOwogCQlicmVhazsKKyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSworCWNhc2UgUFRSQUNFX0dFVFJFR1NFVDoKKwljYXNlIFBUUkFDRV9TRVRSRUdTRVQ6CisJeworCQlzdHJ1Y3QgaW92ZWMga2lvdjsKKwkJc3RydWN0IGNvbXBhdF9pb3ZlYyBfX3VzZXIgKnVpb3YgPQorCQkJKHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICopIGRhdGFwOworCQljb21wYXRfdXB0cl90IHB0cjsKKwkJY29tcGF0X3NpemVfdCBsZW47CisKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1aW92LCBzaXplb2YoKnVpb3YpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChfX2dldF91c2VyKHB0ciwgJnVpb3YtPmlvdl9iYXNlKSB8fAorCQkgICAgX19nZXRfdXNlcihsZW4sICZ1aW92LT5pb3ZfbGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWtpb3YuaW92X2Jhc2UgPSBjb21wYXRfcHRyKHB0cik7CisJCWtpb3YuaW92X2xlbiA9IGxlbjsKKworCQlyZXQgPSBwdHJhY2VfcmVnc2V0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCAma2lvdik7CisJCWlmICghcmV0KQorCQkJcmV0ID0gX19wdXRfdXNlcihraW92Lmlvdl9sZW4sICZ1aW92LT5pb3ZfbGVuKTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCiAKIAlkZWZhdWx0OgogCQlyZXQgPSBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1cGRhdGUuYyBiL2tlcm5lbC9yY3VwZGF0ZS5jCmluZGV4IDliN2ZkNDcuLmYxMTI1YzEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3VwZGF0ZS5jCisrKyBiL2tlcm5lbC9yY3VwZGF0ZS5jCkBAIC00NCwxNCArNDQsNDMgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAKICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwogc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSByY3VfbG9ja19rZXk7CiBzdHJ1Y3QgbG9ja2RlcF9tYXAgcmN1X2xvY2tfbWFwID0KIAlTVEFUSUNfTE9DS0RFUF9NQVBfSU5JVCgicmN1X3JlYWRfbG9jayIsICZyY3VfbG9ja19rZXkpOwogRVhQT1JUX1NZTUJPTF9HUEwocmN1X2xvY2tfbWFwKTsKKworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSByY3VfYmhfbG9ja19rZXk7CitzdHJ1Y3QgbG9ja2RlcF9tYXAgcmN1X2JoX2xvY2tfbWFwID0KKwlTVEFUSUNfTE9DS0RFUF9NQVBfSU5JVCgicmN1X3JlYWRfbG9ja19iaCIsICZyY3VfYmhfbG9ja19rZXkpOworRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JoX2xvY2tfbWFwKTsKKworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSByY3Vfc2NoZWRfbG9ja19rZXk7CitzdHJ1Y3QgbG9ja2RlcF9tYXAgcmN1X3NjaGVkX2xvY2tfbWFwID0KKwlTVEFUSUNfTE9DS0RFUF9NQVBfSU5JVCgicmN1X3JlYWRfbG9ja19zY2hlZCIsICZyY3Vfc2NoZWRfbG9ja19rZXkpOworRVhQT1JUX1NZTUJPTF9HUEwocmN1X3NjaGVkX2xvY2tfbWFwKTsKICNlbmRpZgogCitpbnQgcmN1X3NjaGVkdWxlcl9hY3RpdmUgX19yZWFkX21vc3RseTsKK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9zY2hlZHVsZXJfYWN0aXZlKTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIHNjaGVkdWxlcidzIGluaXRpYWxpemF0aW9uCisgKiBwcm9jZXNzLiAgQmVmb3JlIHRoaXMgaXMgY2FsbGVkLCB0aGUgaWRsZSB0YXNrIG1pZ2h0IGNvbnRhaW4KKyAqIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgKGR1cmluZyB3aGljaCB0aW1lLCB0aGlzIGlkbGUKKyAqIHRhc2sgaXMgYm9vdGluZyB0aGUgc3lzdGVtKS4gIEFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUKKyAqIGlkbGUgdGFza3MgYXJlIHByb2hpYml0ZWQgZnJvbSBjb250YWluaW5nIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKKyAqIHNlY3Rpb25zLgorICovCit2b2lkIHJjdV9zY2hlZHVsZXJfc3RhcnRpbmcodm9pZCkKK3sKKwlXQVJOX09OKG51bV9vbmxpbmVfY3B1cygpICE9IDEpOworCVdBUk5fT04obnJfY29udGV4dF9zd2l0Y2hlcygpID4gMCk7CisJcmN1X3NjaGVkdWxlcl9hY3RpdmUgPSAxOworfQorCiAvKgogICogQXdha2VuIHRoZSBjb3JyZXNwb25kaW5nIHN5bmNocm9uaXplX3JjdSgpIGluc3RhbmNlIG5vdyB0aGF0IGEKICAqIGdyYWNlIHBlcmlvZCBoYXMgZWxhcHNlZC4KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCmluZGV4IDliYjUyMTcuLjI1OGNkZjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0b3J0dXJlLmMKKysrIGIva2VybmVsL3JjdXRvcnR1cmUuYwpAQCAtNjEsNiArNjEsOSBAQAogc3RhdGljIGludCBzaHVmZmxlX2ludGVydmFsID0gMzsgLyogSW50ZXJ2YWwgYmV0d2VlbiBzaHVmZmxlcyAoaW4gc2VjKSovCiBzdGF0aWMgaW50IHN0dXR0ZXIgPSA1OwkJLyogU3RhcnQvc3RvcCB0ZXN0aW5nIGludGVydmFsIChpbiBzZWMpICovCiBzdGF0aWMgaW50IGlycXJlYWRlciA9IDE7CS8qIFJDVSByZWFkZXJzIGZyb20gaXJxICh0aW1lcnMpLiAqLworc3RhdGljIGludCBmcXNfZHVyYXRpb24gPSAwOwkvKiBEdXJhdGlvbiBvZiBidXJzdHMgKHVzKSwgMCB0byBkaXNhYmxlLiAqLworc3RhdGljIGludCBmcXNfaG9sZG9mZiA9IDA7CS8qIEhvbGQgdGltZSB3aXRoaW4gYnVyc3QgKHVzKS4gKi8KK3N0YXRpYyBpbnQgZnFzX3N0dXR0ZXIgPSAzOwkvKiBXYWl0IHRpbWUgYmV0d2VlbiBidXJzdHMgKHMpLiAqLwogc3RhdGljIGNoYXIgKnRvcnR1cmVfdHlwZSA9ICJyY3UiOyAvKiBXaGF0IFJDVSBpbXBsZW1lbnRhdGlvbiB0byB0b3J0dXJlLiAqLwogCiBtb2R1bGVfcGFyYW0obnJlYWRlcnMsIGludCwgMDQ0NCk7CkBAIC03OSw2ICs4MiwxMiBAQAogTU9EVUxFX1BBUk1fREVTQyhzdHV0dGVyLCAiTnVtYmVyIG9mIHNlY29uZHMgdG8gcnVuL2hhbHQgdGVzdCIpOwogbW9kdWxlX3BhcmFtKGlycXJlYWRlciwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaXJxcmVhZGVyLCAiQWxsb3cgUkNVIHJlYWRlcnMgZnJvbSBpcnEgaGFuZGxlcnMiKTsKK21vZHVsZV9wYXJhbShmcXNfZHVyYXRpb24sIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZxc19kdXJhdGlvbiwgIkR1cmF0aW9uIG9mIGZxcyBidXJzdHMgKHVzKSIpOworbW9kdWxlX3BhcmFtKGZxc19ob2xkb2ZmLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmcXNfaG9sZG9mZiwgIkhvbGRvZmYgdGltZSB3aXRoaW4gZnFzIGJ1cnN0cyAodXMpIik7Cittb2R1bGVfcGFyYW0oZnFzX3N0dXR0ZXIsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZxc19zdHV0dGVyLCAiV2FpdCB0aW1lIGJldHdlZW4gZnFzIGJ1cnN0cyAocykiKTsKIG1vZHVsZV9wYXJhbSh0b3J0dXJlX3R5cGUsIGNoYXJwLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModG9ydHVyZV90eXBlLCAiVHlwZSBvZiBSQ1UgdG8gdG9ydHVyZSAocmN1LCByY3VfYmgsIHNyY3UpIik7CiAKQEAgLTk5LDYgKzEwOCw3IEBACiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpzdGF0c190YXNrOwogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqc2h1ZmZsZXJfdGFzazsKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnN0dXR0ZXJfdGFzazsKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZxc190YXNrOwogCiAjZGVmaW5lIFJDVV9UT1JUVVJFX1BJUEVfTEVOIDEwCiAKQEAgLTI2Myw2ICsyNzMsNyBAQAogCXZvaWQgKCpkZWZlcnJlZF9mcmVlKShzdHJ1Y3QgcmN1X3RvcnR1cmUgKnApOwogCXZvaWQgKCpzeW5jKSh2b2lkKTsKIAl2b2lkICgqY2JfYmFycmllcikodm9pZCk7CisJdm9pZCAoKmZxcykodm9pZCk7CiAJaW50ICgqc3RhdHMpKGNoYXIgKnBhZ2UpOwogCWludCBpcnFfY2FwYWJsZTsKIAljaGFyICpuYW1lOwpAQCAtMzQ3LDYgKzM1OCw3IEBACiAJLmRlZmVycmVkX2ZyZWUJPSByY3VfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAogCS5zeW5jCQk9IHN5bmNocm9uaXplX3JjdSwKIAkuY2JfYmFycmllcgk9IHJjdV9iYXJyaWVyLAorCS5mcXMJCT0gcmN1X2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSwKIAkuc3RhdHMJCT0gTlVMTCwKIAkuaXJxX2NhcGFibGUJPSAxLAogCS5uYW1lCQk9ICJyY3UiCkBAIC0zODgsNiArNDAwLDcgQEAKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV9zeW5jX3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKIAkuc3luYwkJPSBzeW5jaHJvbml6ZV9yY3UsCiAJLmNiX2JhcnJpZXIJPSBOVUxMLAorCS5mcXMJCT0gcmN1X2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSwKIAkuc3RhdHMJCT0gTlVMTCwKIAkuaXJxX2NhcGFibGUJPSAxLAogCS5uYW1lCQk9ICJyY3Vfc3luYyIKQEAgLTQwMyw2ICs0MTYsNyBAQAogCS5kZWZlcnJlZF9mcmVlCT0gcmN1X3N5bmNfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAogCS5zeW5jCQk9IHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQsCiAJLmNiX2JhcnJpZXIJPSBOVUxMLAorCS5mcXMJCT0gcmN1X2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSwKIAkuc3RhdHMJCT0gTlVMTCwKIAkuaXJxX2NhcGFibGUJPSAxLAogCS5uYW1lCQk9ICJyY3VfZXhwZWRpdGVkIgpAQCAtNDY1LDYgKzQ3OSw3IEBACiAJLmRlZmVycmVkX2ZyZWUJPSByY3VfYmhfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAogCS5zeW5jCQk9IHJjdV9iaF90b3J0dXJlX3N5bmNocm9uaXplLAogCS5jYl9iYXJyaWVyCT0gcmN1X2JhcnJpZXJfYmgsCisJLmZxcwkJPSByY3VfYmhfZm9yY2VfcXVpZXNjZW50X3N0YXRlLAogCS5zdGF0cwkJPSBOVUxMLAogCS5pcnFfY2FwYWJsZQk9IDEsCiAJLm5hbWUJCT0gInJjdV9iaCIKQEAgLTQ4MCw2ICs0OTUsNyBAQAogCS5kZWZlcnJlZF9mcmVlCT0gcmN1X3N5bmNfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAogCS5zeW5jCQk9IHJjdV9iaF90b3J0dXJlX3N5bmNocm9uaXplLAogCS5jYl9iYXJyaWVyCT0gTlVMTCwKKwkuZnFzCQk9IHJjdV9iaF9mb3JjZV9xdWllc2NlbnRfc3RhdGUsCiAJLnN0YXRzCQk9IE5VTEwsCiAJLmlycV9jYXBhYmxlCT0gMSwKIAkubmFtZQkJPSAicmN1X2JoX3N5bmMiCkBAIC02MjEsNiArNjM3LDcgQEAKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV9zY2hlZF90b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gc2NoZWRfdG9ydHVyZV9zeW5jaHJvbml6ZSwKIAkuY2JfYmFycmllcgk9IHJjdV9iYXJyaWVyX3NjaGVkLAorCS5mcXMJCT0gcmN1X3NjaGVkX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSwKIAkuc3RhdHMJCT0gTlVMTCwKIAkuaXJxX2NhcGFibGUJPSAxLAogCS5uYW1lCQk9ICJzY2hlZCIKQEAgLTYzNiw2ICs2NTMsNyBAQAogCS5kZWZlcnJlZF9mcmVlCT0gcmN1X3N5bmNfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAogCS5zeW5jCQk9IHNjaGVkX3RvcnR1cmVfc3luY2hyb25pemUsCiAJLmNiX2JhcnJpZXIJPSBOVUxMLAorCS5mcXMJCT0gcmN1X3NjaGVkX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSwKIAkuc3RhdHMJCT0gTlVMTCwKIAkubmFtZQkJPSAic2NoZWRfc3luYyIKIH07CkBAIC02NTAsMTIgKzY2OCw0NSBAQAogCS5kZWZlcnJlZF9mcmVlCT0gcmN1X3N5bmNfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAogCS5zeW5jCQk9IHN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCwKIAkuY2JfYmFycmllcgk9IE5VTEwsCisJLmZxcwkJPSByY3Vfc2NoZWRfZm9yY2VfcXVpZXNjZW50X3N0YXRlLAogCS5zdGF0cwkJPSByY3VfZXhwZWRpdGVkX3RvcnR1cmVfc3RhdHMsCiAJLmlycV9jYXBhYmxlCT0gMSwKIAkubmFtZQkJPSAic2NoZWRfZXhwZWRpdGVkIgogfTsKIAogLyoKKyAqIFJDVSB0b3J0dXJlIGZvcmNlLXF1aWVzY2VudC1zdGF0ZSBrdGhyZWFkLiAgUmVwZWF0ZWRseSBpbmR1Y2VzCisgKiBidXJzdHMgb2YgY2FsbHMgdG8gZm9yY2VfcXVpZXNjZW50X3N0YXRlKCksIGluY3JlYXNpbmcgdGhlIHByb2JhYmlsaXR5CisgKiBvZiBvY2N1cnJlbmNlIG9mIHNvbWUgaW1wb3J0YW50IHR5cGVzIG9mIHJhY2UgY29uZGl0aW9ucy4KKyAqLworc3RhdGljIGludAorcmN1X3RvcnR1cmVfZnFzKHZvaWQgKmFyZykKK3sKKwl1bnNpZ25lZCBsb25nIGZxc19yZXN1bWVfdGltZTsKKwlpbnQgZnFzX2J1cnN0X3JlbWFpbmluZzsKKworCVZFUkJPU0VfUFJJTlRLX1NUUklORygicmN1X3RvcnR1cmVfZnFzIHRhc2sgc3RhcnRlZCIpOworCWRvIHsKKwkJZnFzX3Jlc3VtZV90aW1lID0gamlmZmllcyArIGZxc19zdHV0dGVyICogSFo7CisJCXdoaWxlIChqaWZmaWVzIC0gZnFzX3Jlc3VtZV90aW1lID4gTE9OR19NQVgpIHsKKwkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgxKTsKKwkJfQorCQlmcXNfYnVyc3RfcmVtYWluaW5nID0gZnFzX2R1cmF0aW9uOworCQl3aGlsZSAoZnFzX2J1cnN0X3JlbWFpbmluZyA+IDApIHsKKwkJCWN1cl9vcHMtPmZxcygpOworCQkJdWRlbGF5KGZxc19ob2xkb2ZmKTsKKwkJCWZxc19idXJzdF9yZW1haW5pbmcgLT0gZnFzX2hvbGRvZmY7CisJCX0KKwkJcmN1X3N0dXR0ZXJfd2FpdCgicmN1X3RvcnR1cmVfZnFzIik7CisJfSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJiBmdWxsc3RvcCA9PSBGVUxMU1RPUF9ET05UU1RPUCk7CisJVkVSQk9TRV9QUklOVEtfU1RSSU5HKCJyY3VfdG9ydHVyZV9mcXMgdGFzayBzdG9wcGluZyIpOworCXJjdXRvcnR1cmVfc2h1dGRvd25fYWJzb3JiKCJyY3VfdG9ydHVyZV9mcXMiKTsKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBSQ1UgdG9ydHVyZSB3cml0ZXIga3RocmVhZC4gIFJlcGVhdGVkbHkgc3Vic3RpdHV0ZXMgYSBuZXcgc3RydWN0dXJlCiAgKiBmb3IgdGhhdCBwb2ludGVkIHRvIGJ5IHJjdV90b3J0dXJlX2N1cnJlbnQsIGZyZWVpbmcgdGhlIG9sZCBzdHJ1Y3R1cmUKICAqIGFmdGVyIGEgc2VyaWVzIG9mIGdyYWNlIHBlcmlvZHMgKHRoZSAicGlwZWxpbmUiKS4KQEAgLTc0NSw3ICs3OTYsMTEgQEAKIAogCWlkeCA9IGN1cl9vcHMtPnJlYWRsb2NrKCk7CiAJY29tcGxldGVkID0gY3VyX29wcy0+Y29tcGxldGVkKCk7Ci0JcCA9IHJjdV9kZXJlZmVyZW5jZShyY3VfdG9ydHVyZV9jdXJyZW50KTsKKwlwID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHJjdV90b3J0dXJlX2N1cnJlbnQsCisJCQkJICByY3VfcmVhZF9sb2NrX2hlbGQoKSB8fAorCQkJCSAgcmN1X3JlYWRfbG9ja19iaF9oZWxkKCkgfHwKKwkJCQkgIHJjdV9yZWFkX2xvY2tfc2NoZWRfaGVsZCgpIHx8CisJCQkJICBzcmN1X3JlYWRfbG9ja19oZWxkKCZzcmN1X2N0bCkpOwogCWlmIChwID09IE5VTEwpIHsKIAkJLyogTGVhdmUgYmVjYXVzZSByY3VfdG9ydHVyZV93cml0ZXIgaXMgbm90IHlldCB1bmRlcndheSAqLwogCQljdXJfb3BzLT5yZWFkdW5sb2NrKGlkeCk7CkBAIC03OTgsMTEgKzg1MywxNSBAQAogCWRvIHsKIAkJaWYgKGlycXJlYWRlciAmJiBjdXJfb3BzLT5pcnFfY2FwYWJsZSkgewogCQkJaWYgKCF0aW1lcl9wZW5kaW5nKCZ0KSkKLQkJCQltb2RfdGltZXIoJnQsIDEpOworCQkJCW1vZF90aW1lcigmdCwgamlmZmllcyArIDEpOwogCQl9CiAJCWlkeCA9IGN1cl9vcHMtPnJlYWRsb2NrKCk7CiAJCWNvbXBsZXRlZCA9IGN1cl9vcHMtPmNvbXBsZXRlZCgpOwotCQlwID0gcmN1X2RlcmVmZXJlbmNlKHJjdV90b3J0dXJlX2N1cnJlbnQpOworCQlwID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHJjdV90b3J0dXJlX2N1cnJlbnQsCisJCQkJCSAgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwKKwkJCQkJICByY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSB8fAorCQkJCQkgIHJjdV9yZWFkX2xvY2tfc2NoZWRfaGVsZCgpIHx8CisJCQkJCSAgc3JjdV9yZWFkX2xvY2tfaGVsZCgmc3JjdV9jdGwpKTsKIAkJaWYgKHAgPT0gTlVMTCkgewogCQkJLyogV2FpdCBmb3IgcmN1X3RvcnR1cmVfd3JpdGVyIHRvIGdldCB1bmRlcndheSAqLwogCQkJY3VyX29wcy0+cmVhZHVubG9jayhpZHgpOwpAQCAtMTAzMCwxMCArMTA4OSwxMSBAQAogCXByaW50ayhLRVJOX0FMRVJUICIlcyIgVE9SVFVSRV9GTEFHCiAJCSItLS0gJXM6IG5yZWFkZXJzPSVkIG5mYWtld3JpdGVycz0lZCAiCiAJCSJzdGF0X2ludGVydmFsPSVkIHZlcmJvc2U9JWQgdGVzdF9ub19pZGxlX2h6PSVkICIKLQkJInNodWZmbGVfaW50ZXJ2YWw9JWQgc3R1dHRlcj0lZCBpcnFyZWFkZXI9JWRcbiIsCisJCSJzaHVmZmxlX2ludGVydmFsPSVkIHN0dXR0ZXI9JWQgaXJxcmVhZGVyPSVkICIKKwkJImZxc19kdXJhdGlvbj0lZCBmcXNfaG9sZG9mZj0lZCBmcXNfc3R1dHRlcj0lZFxuIiwKIAkJdG9ydHVyZV90eXBlLCB0YWcsIG5yZWFscmVhZGVycywgbmZha2V3cml0ZXJzLAogCQlzdGF0X2ludGVydmFsLCB2ZXJib3NlLCB0ZXN0X25vX2lkbGVfaHosIHNodWZmbGVfaW50ZXJ2YWwsCi0JCXN0dXR0ZXIsIGlycXJlYWRlcik7CisJCXN0dXR0ZXIsIGlycXJlYWRlciwgZnFzX2R1cmF0aW9uLCBmcXNfaG9sZG9mZiwgZnFzX3N0dXR0ZXIpOwogfQogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHJjdXRvcnR1cmVfbmIgPSB7CkBAIC0xMTA5LDYgKzExNjksMTIgQEAKIAl9CiAJc3RhdHNfdGFzayA9IE5VTEw7CiAKKwlpZiAoZnFzX3Rhc2spIHsKKwkJVkVSQk9TRV9QUklOVEtfU1RSSU5HKCJTdG9wcGluZyByY3VfdG9ydHVyZV9mcXMgdGFzayIpOworCQlrdGhyZWFkX3N0b3AoZnFzX3Rhc2spOworCX0KKwlmcXNfdGFzayA9IE5VTEw7CisKIAkvKiBXYWl0IGZvciBhbGwgUkNVIGNhbGxiYWNrcyB0byBmaXJlLiAgKi8KIAogCWlmIChjdXJfb3BzLT5jYl9iYXJyaWVyICE9IE5VTEwpCkBAIC0xMTU0LDYgKzEyMjAsMTEgQEAKIAkJbXV0ZXhfdW5sb2NrKCZmdWxsc3RvcF9tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwlpZiAoY3VyX29wcy0+ZnFzID09IE5VTEwgJiYgZnFzX2R1cmF0aW9uICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgInJjdS10b3J0dXJlOiAtPmZxcyBOVUxMIGFuZCBub24temVybyAiCisJCQkJICAiZnFzX2R1cmF0aW9uLCBmcXMgZGlzYWJsZWQuXG4iKTsKKwkJZnFzX2R1cmF0aW9uID0gMDsKKwl9CiAJaWYgKGN1cl9vcHMtPmluaXQpCiAJCWN1cl9vcHMtPmluaXQoKTsgLyogbm8gImdvdG8gdW53aW5kIiBwcmlvciB0byB0aGlzIHBvaW50ISEhICovCiAKQEAgLTEyODIsNiArMTM1MywxOSBAQAogCQkJZ290byB1bndpbmQ7CiAJCX0KIAl9CisJaWYgKGZxc19kdXJhdGlvbiA8IDApCisJCWZxc19kdXJhdGlvbiA9IDA7CisJaWYgKGZxc19kdXJhdGlvbikgeworCQkvKiBDcmVhdGUgdGhlIHN0dXR0ZXIgdGhyZWFkICovCisJCWZxc190YXNrID0ga3RocmVhZF9ydW4ocmN1X3RvcnR1cmVfZnFzLCBOVUxMLAorCQkJCSAgICAgICAicmN1X3RvcnR1cmVfZnFzIik7CisJCWlmIChJU19FUlIoZnFzX3Rhc2spKSB7CisJCQlmaXJzdGVyciA9IFBUUl9FUlIoZnFzX3Rhc2spOworCQkJVkVSQk9TRV9QUklOVEtfRVJSU1RSSU5HKCJGYWlsZWQgdG8gY3JlYXRlIGZxcyIpOworCQkJZnFzX3Rhc2sgPSBOVUxMOworCQkJZ290byB1bndpbmQ7CisJCX0KKwl9CiAJcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZyY3V0b3J0dXJlX25iKTsKIAltdXRleF91bmxvY2soJmZ1bGxzdG9wX211dGV4KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlLmMgYi9rZXJuZWwvcmN1dHJlZS5jCmluZGV4IDUzYWU5NTkuLjNlYzgxNjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlLmMKKysrIGIva2VybmVsL3JjdXRyZWUuYwpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAKICNpbmNsdWRlICJyY3V0cmVlLmgiCiAKQEAgLTY2LDExICs2NSwxMSBAQAogCS5zaWduYWxlZCA9IFJDVV9HUF9JRExFLCBcCiAJLmdwbnVtID0gLTMwMCwgXAogCS5jb21wbGV0ZWQgPSAtMzAwLCBcCi0JLm9ub2ZmbG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKCZuYW1lLm9ub2ZmbG9jayksIFwKKwkub25vZmZsb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKCZuYW1lLm9ub2ZmbG9jayksIFwKIAkub3JwaGFuX2Nic19saXN0ID0gTlVMTCwgXAogCS5vcnBoYW5fY2JzX3RhaWwgPSAmbmFtZS5vcnBoYW5fY2JzX2xpc3QsIFwKIAkub3JwaGFuX3FsZW4gPSAwLCBcCi0JLmZxc2xvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCgmbmFtZS5mcXNsb2NrKSwgXAorCS5mcXNsb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKCZuYW1lLmZxc2xvY2spLCBcCiAJLm5fZm9yY2VfcXMgPSAwLCBcCiAJLm5fZm9yY2VfcXNfbmdwID0gMCwgXAogfQpAQCAtODEsOSArODAsNiBAQAogc3RydWN0IHJjdV9zdGF0ZSByY3VfYmhfc3RhdGUgPSBSQ1VfU1RBVEVfSU5JVElBTElaRVIocmN1X2JoX3N0YXRlKTsKIERFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfZGF0YSwgcmN1X2JoX2RhdGEpOwogCi1zdGF0aWMgaW50IHJjdV9zY2hlZHVsZXJfYWN0aXZlIF9fcmVhZF9tb3N0bHk7Ci0KLQogLyoKICAqIFJldHVybiB0cnVlIGlmIGFuIFJDVSBncmFjZSBwZXJpb2QgaXMgaW4gcHJvZ3Jlc3MuICBUaGUgQUNDRVNTX09OQ0UoKXMKICAqIHBlcm1pdCB0aGlzIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgd2l0aG91dCBob2xkaW5nIHRoZSByb290IHJjdV9ub2RlCkBAIC0xNTcsNiArMTUzLDI0IEBACiBFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmF0Y2hlc19jb21wbGV0ZWRfYmgpOwogCiAvKgorICogRm9yY2UgYSBxdWllc2NlbnQgc3RhdGUgZm9yIFJDVSBCSC4KKyAqLwordm9pZCByY3VfYmhfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpCit7CisJZm9yY2VfcXVpZXNjZW50X3N0YXRlKCZyY3VfYmhfc3RhdGUsIDApOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JoX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSk7CisKKy8qCisgKiBGb3JjZSBhIHF1aWVzY2VudCBzdGF0ZSBmb3IgUkNVLXNjaGVkLgorICovCit2b2lkIHJjdV9zY2hlZF9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCkKK3sKKwlmb3JjZV9xdWllc2NlbnRfc3RhdGUoJnJjdV9zY2hlZF9zdGF0ZSwgMCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY3Vfc2NoZWRfZm9yY2VfcXVpZXNjZW50X3N0YXRlKTsKKworLyoKICAqIERvZXMgdGhlIENQVSBoYXZlIGNhbGxiYWNrcyByZWFkeSB0byBiZSBpbnZva2VkPwogICovCiBzdGF0aWMgaW50CkBAIC00MzksMTAgKzQ1MywxMCBAQAogCiAJLyogT25seSBsZXQgb25lIENQVSBjb21wbGFpbiBhYm91dCBvdGhlcnMgcGVyIHRpbWUgaW50ZXJ2YWwuICovCiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAlkZWx0YSA9IGppZmZpZXMgLSByc3AtPmppZmZpZXNfc3RhbGw7CiAJaWYgKGRlbHRhIDwgUkNVX1NUQUxMX1JBVF9ERUxBWSB8fCAhcmN1X2dwX2luX3Byb2dyZXNzKHJzcCkpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAlyc3AtPmppZmZpZXNfc3RhbGwgPSBqaWZmaWVzICsgUkNVX1NFQ09ORFNfVElMTF9TVEFMTF9SRUNIRUNLOwpAQCAtNDUyLDEzICs0NjYsMTUgQEAKIAkgKiBkdWUgdG8gQ1BVIG9mZmxpbmluZy4KIAkgKi8KIAlyY3VfcHJpbnRfdGFza19zdGFsbChybnApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAogCS8qIE9LLCB0aW1lIHRvIHJhdCBvbiBvdXIgYnVkZHkuLi4gKi8KIAogCXByaW50ayhLRVJOX0VSUiAiSU5GTzogUkNVIGRldGVjdGVkIENQVSBzdGFsbHM6Iik7CiAJcmN1X2Zvcl9lYWNoX2xlYWZfbm9kZShyc3AsIHJucCkgeworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlyY3VfcHJpbnRfdGFza19zdGFsbChybnApOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCWlmIChybnAtPnFzbWFzayA9PSAwKQogCQkJY29udGludWU7CiAJCWZvciAoY3B1ID0gMDsgY3B1IDw9IHJucC0+Z3JwaGkgLSBybnAtPmdycGxvOyBjcHUrKykKQEAgLTQ2OSw2ICs0ODUsMTAgQEAKIAkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCAobG9uZykoamlmZmllcyAtIHJzcC0+Z3Bfc3RhcnQpKTsKIAl0cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKCk7CiAKKwkvKiBJZiBzbyBjb25maWd1cmVkLCBjb21wbGFpbiBhYm91dCB0YXNrcyBibG9ja2luZyB0aGUgZ3JhY2UgcGVyaW9kLiAqLworCisJcmN1X3ByaW50X2RldGFpbF90YXNrX3N0YWxsKHJzcCk7CisKIAlmb3JjZV9xdWllc2NlbnRfc3RhdGUocnNwLCAwKTsgIC8qIEtpY2sgdGhlbSBhbGwuICovCiB9CiAKQEAgLTQ4MSwxMSArNTAxLDExIEBACiAJCQlzbXBfcHJvY2Vzc29yX2lkKCksIGppZmZpZXMgLSByc3AtPmdwX3N0YXJ0KTsKIAl0cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKCk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7Ci0JaWYgKChsb25nKShqaWZmaWVzIC0gcnNwLT5qaWZmaWVzX3N0YWxsKSA+PSAwKQorCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJaWYgKFVMT05HX0NNUF9HRShqaWZmaWVzLCByc3AtPmppZmZpZXNfc3RhbGwpKQogCQlyc3AtPmppZmZpZXNfc3RhbGwgPQogCQkJamlmZmllcyArIFJDVV9TRUNPTkRTX1RJTExfU1RBTExfUkVDSEVDSzsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAKIAlzZXRfbmVlZF9yZXNjaGVkKCk7ICAvKiBraWNrIG91cnNlbHZlcyB0byBnZXQgdGhpbmdzIGdvaW5nLiAqLwogfQpAQCAtNTQ1LDEyICs1NjUsMTIgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJcm5wID0gcmRwLT5teW5vZGU7CiAJaWYgKHJkcC0+Z3BudW0gPT0gQUNDRVNTX09OQ0Uocm5wLT5ncG51bSkgfHwgLyogb3V0c2lkZSBsb2NrLiAqLwotCSAgICAhc3Bpbl90cnlsb2NrKCZybnAtPmxvY2spKSB7IC8qIGlycXMgYWxyZWFkeSBvZmYsIHJldHJ5IGxhdGVyLiAqLworCSAgICAhcmF3X3NwaW5fdHJ5bG9jaygmcm5wLT5sb2NrKSkgeyAvKiBpcnFzIGFscmVhZHkgb2ZmLCBzbyBsYXRlci4gKi8KIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCV9fbm90ZV9uZXdfZ3BudW0ocnNwLCBybnAsIHJkcCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtNjA5LDEyICs2MjksMTIgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJcm5wID0gcmRwLT5teW5vZGU7CiAJaWYgKHJkcC0+Y29tcGxldGVkID09IEFDQ0VTU19PTkNFKHJucC0+Y29tcGxldGVkKSB8fCAvKiBvdXRzaWRlIGxvY2suICovCi0JICAgICFzcGluX3RyeWxvY2soJnJucC0+bG9jaykpIHsgLyogaXJxcyBhbHJlYWR5IG9mZiwgcmV0cnkgbGF0ZXIuICovCisJICAgICFyYXdfc3Bpbl90cnlsb2NrKCZybnAtPmxvY2spKSB7IC8qIGlycXMgYWxyZWFkeSBvZmYsIHNvIGxhdGVyLiAqLwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCXJldHVybjsKIAl9CiAJX19yY3VfcHJvY2Vzc19ncF9lbmQocnNwLCBybnAsIHJkcCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtNjU5LDEyICs2NzksMTQgQEAKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHJzcC0+cmRhW3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJc3RydWN0IHJjdV9ub2RlICpybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKIAotCWlmICghY3B1X25lZWRzX2Fub3RoZXJfZ3AocnNwLCByZHApKSB7CisJaWYgKCFjcHVfbmVlZHNfYW5vdGhlcl9ncChyc3AsIHJkcCkgfHwgcnNwLT5mcXNfYWN0aXZlKSB7CisJCWlmIChjcHVfbmVlZHNfYW5vdGhlcl9ncChyc3AsIHJkcCkpCisJCQlyc3AtPmZxc19uZWVkX2dwID0gMTsKIAkJaWYgKHJucC0+Y29tcGxldGVkID09IHJzcC0+Y29tcGxldGVkKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQotCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJIC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CSAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAogCQkvKgogCQkgKiBQcm9wYWdhdGUgbmV3IC0+Y29tcGxldGVkIHZhbHVlIHRvIHJjdV9ub2RlIHN0cnVjdHVyZXMKQEAgLTY3Miw5ICs2OTQsOSBAQAogCQkgKiBvZiB0aGUgbmV4dCBncmFjZSBwZXJpb2QgdG8gcHJvY2VzcyB0aGVpciBjYWxsYmFja3MuCiAJCSAqLwogCQlyY3VfZm9yX2VhY2hfbm9kZV9icmVhZHRoX2ZpcnN0KHJzcCwgcm5wKSB7Ci0JCQlzcGluX2xvY2soJnJucC0+bG9jayk7CSAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJCQlyYXdfc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJCQlybnAtPmNvbXBsZXRlZCA9IHJzcC0+Y29tcGxldGVkOwotCQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCQkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAkJfQogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCXJldHVybjsKQEAgLTY5NSwxNSArNzE3LDE1IEBACiAJCXJucC0+Y29tcGxldGVkID0gcnNwLT5jb21wbGV0ZWQ7CiAJCXJzcC0+c2lnbmFsZWQgPSBSQ1VfU0lHTkFMX0lOSVQ7IC8qIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSBPSy4gKi8KIAkJcmN1X3N0YXJ0X2dwX3Blcl9jcHUocnNwLCBybnAsIHJkcCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiAKLQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgIC8qIGxlYXZlIGlycXMgZGlzYWJsZWQuICovCisJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAgLyogbGVhdmUgaXJxcyBkaXNhYmxlZC4gKi8KIAogCiAJLyogRXhjbHVkZSBhbnkgY29uY3VycmVudCBDUFUtaG90cGx1ZyBvcGVyYXRpb25zLiAqLwotCXNwaW5fbG9jaygmcnNwLT5vbm9mZmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCXJhd19zcGluX2xvY2soJnJzcC0+b25vZmZsb2NrKTsgIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAogCS8qCiAJICogU2V0IHRoZSBxdWllc2NlbnQtc3RhdGUtbmVlZGVkIGJpdHMgaW4gYWxsIHRoZSByY3Vfbm9kZQpAQCAtNzIzLDIxICs3NDUsMjEgQEAKIAkgKiBpcnFzIGRpc2FibGVkLgogCSAqLwogCXJjdV9mb3JfZWFjaF9ub2RlX2JyZWFkdGhfZmlyc3QocnNwLCBybnApIHsKLQkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCQlyYXdfc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJCXJjdV9wcmVlbXB0X2NoZWNrX2Jsb2NrZWRfdGFza3Mocm5wKTsKIAkJcm5wLT5xc21hc2sgPSBybnAtPnFzbWFza2luaXQ7CiAJCXJucC0+Z3BudW0gPSByc3AtPmdwbnVtOwogCQlybnAtPmNvbXBsZXRlZCA9IHJzcC0+Y29tcGxldGVkOwogCQlpZiAocm5wID09IHJkcC0+bXlub2RlKQogCQkJcmN1X3N0YXJ0X2dwX3Blcl9jcHUocnNwLCBybnAsIHJkcCk7Ci0JCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAl9CiAKIAlybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKLQlzcGluX2xvY2soJnJucC0+bG9jayk7CQkJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJcnNwLT5zaWduYWxlZCA9IFJDVV9TSUdOQUxfSU5JVDsgLyogZm9yY2VfcXVpZXNjZW50X3N0YXRlIG5vdyBPSy4gKi8KLQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJCS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC03NzYsMTQgKzc5OCwxNCBAQAogCQlpZiAoIShybnAtPnFzbWFzayAmIG1hc2spKSB7CiAKIAkJCS8qIE91ciBiaXQgaGFzIGFscmVhZHkgYmVlbiBjbGVhcmVkLCBzbyBkb25lLiAqLwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJcm5wLT5xc21hc2sgJj0gfm1hc2s7CiAJCWlmIChybnAtPnFzbWFzayAhPSAwIHx8IHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApKSB7CiAKIAkJCS8qIE90aGVyIGJpdHMgc3RpbGwgc2V0IGF0IHRoaXMgbGV2ZWwsIHNvIGRvbmUuICovCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQogCQltYXNrID0gcm5wLT5ncnBtYXNrOwpAQCAtNzkzLDEwICs4MTUsMTAgQEAKIAogCQkJYnJlYWs7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJcm5wX2MgPSBybnA7CiAJCXJucCA9IHJucC0+cGFyZW50OwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCVdBUk5fT05fT05DRShybnBfYy0+cXNtYXNrKTsKIAl9CiAKQEAgLTgyNSw3ICs4NDcsNyBAQAogCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwogCiAJcm5wID0gcmRwLT5teW5vZGU7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJaWYgKGxhc3Rjb21wICE9IHJucC0+Y29tcGxldGVkKSB7CiAKIAkJLyoKQEAgLTgzNywxMiArODU5LDEyIEBACiAJCSAqIHJhY2Ugb2NjdXJyZWQuCiAJCSAqLwogCQlyZHAtPnBhc3NlZF9xdWllc2MgPSAwOwkvKiB0cnkgYWdhaW4gbGF0ZXIhICovCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiAJbWFzayA9IHJkcC0+Z3JwbWFzazsKIAlpZiAoKHJucC0+cXNtYXNrICYgbWFzaykgPT0gMCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCX0gZWxzZSB7CiAJCXJkcC0+cXNfcGVuZGluZyA9IDA7CiAKQEAgLTkwNiw3ICs5MjgsNyBAQAogCiAJaWYgKHJkcC0+bnh0bGlzdCA9PSBOVUxMKQogCQlyZXR1cm47ICAvKiBpcnFzIGRpc2FibGVkLCBzbyBjb21wYXJpc29uIGlzIHN0YWJsZS4gKi8KLQlzcGluX2xvY2soJnJzcC0+b25vZmZsb2NrKTsgIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl9sb2NrKCZyc3AtPm9ub2ZmbG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJKnJzcC0+b3JwaGFuX2Nic190YWlsID0gcmRwLT5ueHRsaXN0OwogCXJzcC0+b3JwaGFuX2Nic190YWlsID0gcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdOwogCXJkcC0+bnh0bGlzdCA9IE5VTEw7CkBAIC05MTQsNyArOTM2LDcgQEAKIAkJcmRwLT5ueHR0YWlsW2ldID0gJnJkcC0+bnh0bGlzdDsKIAlyc3AtPm9ycGhhbl9xbGVuICs9IHJkcC0+cWxlbjsKIAlyZHAtPnFsZW4gPSAwOwotCXNwaW5fdW5sb2NrKCZyc3AtPm9ub2ZmbG9jayk7ICAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl91bmxvY2soJnJzcC0+b25vZmZsb2NrKTsgIC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogfQogCiAvKgpAQCAtOTI1LDEwICs5NDcsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCByY3VfZGF0YSAqcmRwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwogCXJkcCA9IHJzcC0+cmRhW3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJaWYgKHJzcC0+b3JwaGFuX2Nic19saXN0ID09IE5VTEwpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiAJKnJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSA9IHJzcC0+b3JwaGFuX2Nic19saXN0OwpAQCAtOTM3LDcgKzk1OSw3IEBACiAJcnNwLT5vcnBoYW5fY2JzX2xpc3QgPSBOVUxMOwogCXJzcC0+b3JwaGFuX2Nic190YWlsID0gJnJzcC0+b3JwaGFuX2Nic19saXN0OwogCXJzcC0+b3JwaGFuX3FsZW4gPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC05NTMsMjMgKzk3NSwyMyBAQAogCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwogCiAJLyogRXhjbHVkZSBhbnkgYXR0ZW1wdHMgdG8gc3RhcnQgYSBuZXcgZ3JhY2UgcGVyaW9kLiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIAogCS8qIFJlbW92ZSB0aGUgb3V0Z29pbmcgQ1BVIGZyb20gdGhlIG1hc2tzIGluIHRoZSByY3Vfbm9kZSBoaWVyYXJjaHkuICovCiAJcm5wID0gcmRwLT5teW5vZGU7CS8qIHRoaXMgaXMgdGhlIG91dGdvaW5nIENQVSdzIHJucC4gKi8KIAltYXNrID0gcmRwLT5ncnBtYXNrOwkvKiBybnAtPmdycGxvIGlzIGNvbnN0YW50LiAqLwogCWRvIHsKLQkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCQlyYXdfc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJCXJucC0+cXNtYXNraW5pdCAmPSB+bWFzazsKIAkJaWYgKHJucC0+cXNtYXNraW5pdCAhPSAwKSB7CiAJCQlpZiAocm5wICE9IHJkcC0+bXlub2RlKQotCQkJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwkJCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHJucCA9PSByZHAtPm15bm9kZSkKIAkJCW5lZWRfcmVwb3J0ID0gcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhyc3AsIHJucCwgcmRwKTsKIAkJZWxzZQotCQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCQkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAkJbWFzayA9IHJucC0+Z3JwbWFzazsKIAkJcm5wID0gcm5wLT5wYXJlbnQ7CiAJfSB3aGlsZSAocm5wICE9IE5VTEwpOwpAQCAtOTgwLDEyICsxMDAyLDEyIEBACiAJICogYmVjYXVzZSBpbnZva2luZyByY3VfcmVwb3J0X3VuYmxvY2tfcXNfcm5wKCkgd2l0aCAtPm9ub2ZmbG9jawogCSAqIGhlbGQgbGVhZHMgdG8gZGVhZGxvY2suCiAJICovCi0Jc3Bpbl91bmxvY2soJnJzcC0+b25vZmZsb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJcmF3X3NwaW5fdW5sb2NrKCZyc3AtPm9ub2ZmbG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCXJucCA9IHJkcC0+bXlub2RlOwogCWlmIChuZWVkX3JlcG9ydCAmIFJDVV9PRkxfVEFTS1NfTk9STV9HUCkKIAkJcmN1X3JlcG9ydF91bmJsb2NrX3FzX3JucChybnAsIGZsYWdzKTsKIAllbHNlCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJaWYgKG5lZWRfcmVwb3J0ICYgUkNVX09GTF9UQVNLU19FWFBfR1ApCiAJCXJjdV9yZXBvcnRfZXhwX3JucChyc3AsIHJucCk7CiAKQEAgLTExNDQsMTEgKzExNjYsOSBAQAogLyoKICAqIFNjYW4gdGhlIGxlYWYgcmN1X25vZGUgc3RydWN0dXJlcywgcHJvY2Vzc2luZyBkeW50aWNrIHN0YXRlIGZvciBhbnkgdGhhdAogICogaGF2ZSBub3QgeWV0IGVuY291bnRlcmVkIGEgcXVpZXNjZW50IHN0YXRlLCB1c2luZyB0aGUgZnVuY3Rpb24gc3BlY2lmaWVkLgotICogUmV0dXJucyAxIGlmIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZCBlbmRzIHdoaWxlIHNjYW5uaW5nIChwb3NzaWJseQotICogYmVjYXVzZSB3ZSBtYWRlIGl0IGVuZCkuCisgKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBzdXBwcmVzc2VkIHN0YXJ0IG9mIG5ldyBncmFjZSBwZXJpb2RzLgogICovCi1zdGF0aWMgaW50IHJjdV9wcm9jZXNzX2R5bnRpY2soc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBsb25nIGxhc3Rjb21wLAotCQkJICAgICAgIGludCAoKmYpKHN0cnVjdCByY3VfZGF0YSAqKSkKK3N0YXRpYyB2b2lkIGZvcmNlX3FzX3JucChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIGludCAoKmYpKHN0cnVjdCByY3VfZGF0YSAqKSkKIHsKIAl1bnNpZ25lZCBsb25nIGJpdDsKIAlpbnQgY3B1OwpAQCAtMTE1OCwxMyArMTE3OCwxMyBAQAogCiAJcmN1X2Zvcl9lYWNoX2xlYWZfbm9kZShyc3AsIHJucCkgewogCQltYXNrID0gMDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwotCQlpZiAocm5wLT5jb21wbGV0ZWQgIT0gbGFzdGNvbXApIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIDE7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCWlmICghcmN1X2dwX2luX3Byb2dyZXNzKHJzcCkpIHsKKwkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybjsKIAkJfQogCQlpZiAocm5wLT5xc21hc2sgPT0gMCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCQljb250aW51ZTsKIAkJfQogCQljcHUgPSBybnAtPmdycGxvOwpAQCAtMTE3MywxNSArMTE5MywxNCBAQAogCQkJaWYgKChybnAtPnFzbWFzayAmIGJpdCkgIT0gMCAmJiBmKHJzcC0+cmRhW2NwdV0pKQogCQkJCW1hc2sgfD0gYml0OwogCQl9Ci0JCWlmIChtYXNrICE9IDAgJiYgcm5wLT5jb21wbGV0ZWQgPT0gbGFzdGNvbXApIHsKKwkJaWYgKG1hc2sgIT0gMCkgewogCiAJCQkvKiByY3VfcmVwb3J0X3FzX3JucCgpIHJlbGVhc2VzIHJucC0+bG9jay4gKi8KIAkJCXJjdV9yZXBvcnRfcXNfcm5wKG1hc2ssIHJzcCwgcm5wLCBmbGFncyk7CiAJCQljb250aW51ZTsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCX0KLQlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTExOTEsMzIgKzEyMTAsMjYgQEAKIHN0YXRpYyB2b2lkIGZvcmNlX3F1aWVzY2VudF9zdGF0ZShzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIGludCByZWxheGVkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9uZyBsYXN0Y29tcDsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOwotCXU4IHNpZ25hbGVkOwotCXU4IGZvcmNlbm93OwogCiAJaWYgKCFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSkKIAkJcmV0dXJuOyAgLyogTm8gZ3JhY2UgcGVyaW9kIGluIHByb2dyZXNzLCBub3RoaW5nIHRvIGZvcmNlLiAqLwotCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJnJzcC0+ZnFzbG9jaywgZmxhZ3MpKSB7CisJaWYgKCFyYXdfc3Bpbl90cnlsb2NrX2lycXNhdmUoJnJzcC0+ZnFzbG9jaywgZmxhZ3MpKSB7CiAJCXJzcC0+bl9mb3JjZV9xc19saCsrOyAvKiBJbmV4YWN0LCBjYW4gbG9zZSBjb3VudHMuICBUb3VnaCEgKi8KIAkJcmV0dXJuOwkvKiBTb21lb25lIGVsc2UgaXMgYWxyZWFkeSBvbiB0aGUgam9iLiAqLwogCX0KLQlpZiAocmVsYXhlZCAmJgotCSAgICAobG9uZykocnNwLT5qaWZmaWVzX2ZvcmNlX3FzIC0gamlmZmllcykgPj0gMCkKLQkJZ290byB1bmxvY2tfcmV0OyAvKiBubyBlbWVyZ2VuY3kgYW5kIGRvbmUgcmVjZW50bHkuICovCisJaWYgKHJlbGF4ZWQgJiYgVUxPTkdfQ01QX0dFKHJzcC0+amlmZmllc19mb3JjZV9xcywgamlmZmllcykpCisJCWdvdG8gdW5sb2NrX2Zxc19yZXQ7IC8qIG5vIGVtZXJnZW5jeSBhbmQgZG9uZSByZWNlbnRseS4gKi8KIAlyc3AtPm5fZm9yY2VfcXMrKzsKLQlzcGluX2xvY2soJnJucC0+bG9jayk7Ci0JbGFzdGNvbXAgPSByc3AtPmdwbnVtIC0gMTsKLQlzaWduYWxlZCA9IHJzcC0+c2lnbmFsZWQ7CisJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZCAqLwogCXJzcC0+amlmZmllc19mb3JjZV9xcyA9IGppZmZpZXMgKyBSQ1VfSklGRklFU19USUxMX0ZPUkNFX1FTOwogCWlmKCFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSkgewogCQlyc3AtPm5fZm9yY2VfcXNfbmdwKys7Ci0JCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwotCQlnb3RvIHVubG9ja19yZXQ7ICAvKiBubyBHUCBpbiBwcm9ncmVzcywgdGltZSB1cGRhdGVkLiAqLworCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLworCQlnb3RvIHVubG9ja19mcXNfcmV0OyAgLyogbm8gR1AgaW4gcHJvZ3Jlc3MsIHRpbWUgdXBkYXRlZC4gKi8KIAl9Ci0Jc3Bpbl91bmxvY2soJnJucC0+bG9jayk7Ci0Jc3dpdGNoIChzaWduYWxlZCkgeworCXJzcC0+ZnFzX2FjdGl2ZSA9IDE7CisJc3dpdGNoIChyc3AtPnNpZ25hbGVkKSB7CiAJY2FzZSBSQ1VfR1BfSURMRToKIAljYXNlIFJDVV9HUF9JTklUOgogCkBAIC0xMjI0LDQ1ICsxMjM3LDM4IEBACiAKIAljYXNlIFJDVV9TQVZFX0RZTlRJQ0s6CiAKKwkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KIAkJaWYgKFJDVV9TSUdOQUxfSU5JVCAhPSBSQ1VfU0FWRV9EWU5USUNLKQogCQkJYnJlYWs7IC8qIFNvIGdjYyByZWNvZ25pemVzIHRoZSBkZWFkIGNvZGUuICovCiAKIAkJLyogUmVjb3JkIGR5bnRpY2staWRsZSBzdGF0ZS4gKi8KLQkJaWYgKHJjdV9wcm9jZXNzX2R5bnRpY2socnNwLCBsYXN0Y29tcCwKLQkJCQkJZHludGlja19zYXZlX3Byb2dyZXNzX2NvdW50ZXIpKQotCQkJZ290byB1bmxvY2tfcmV0OwotCQkvKiBmYWxsIGludG8gbmV4dCBjYXNlLiAqLwotCi0JY2FzZSBSQ1VfU0FWRV9DT01QTEVURUQ6Ci0KLQkJLyogVXBkYXRlIHN0YXRlLCByZWNvcmQgY29tcGxldGlvbiBjb3VudGVyLiAqLwotCQlmb3JjZW5vdyA9IDA7Ci0JCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsKLQkJaWYgKGxhc3Rjb21wICsgMSA9PSByc3AtPmdwbnVtICYmCi0JCSAgICBsYXN0Y29tcCA9PSByc3AtPmNvbXBsZXRlZCAmJgotCQkgICAgcnNwLT5zaWduYWxlZCA9PSBzaWduYWxlZCkgeworCQlmb3JjZV9xc19ybnAocnNwLCBkeW50aWNrX3NhdmVfcHJvZ3Jlc3NfY291bnRlcik7CisJCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQgKi8KKwkJaWYgKHJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKQogCQkJcnNwLT5zaWduYWxlZCA9IFJDVV9GT1JDRV9RUzsKLQkJCXJzcC0+Y29tcGxldGVkX2ZxcyA9IGxhc3Rjb21wOwotCQkJZm9yY2Vub3cgPSBzaWduYWxlZCA9PSBSQ1VfU0FWRV9DT01QTEVURUQ7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7Ci0JCWlmICghZm9yY2Vub3cpCi0JCQlicmVhazsKLQkJLyogZmFsbCBpbnRvIG5leHQgY2FzZS4gKi8KKwkJYnJlYWs7CiAKIAljYXNlIFJDVV9GT1JDRV9RUzoKIAogCQkvKiBDaGVjayBkeW50aWNrLWlkbGUgc3RhdGUsIHNlbmQgSVBJIHRvIGxhZ2dhcnRzLiAqLwotCQlpZiAocmN1X3Byb2Nlc3NfZHludGljayhyc3AsIHJzcC0+Y29tcGxldGVkX2ZxcywKLQkJCQkJcmN1X2ltcGxpY2l0X2R5bnRpY2tzX3FzKSkKLQkJCWdvdG8gdW5sb2NrX3JldDsKKwkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KKwkJZm9yY2VfcXNfcm5wKHJzcCwgcmN1X2ltcGxpY2l0X2R5bnRpY2tzX3FzKTsKIAogCQkvKiBMZWF2ZSBzdGF0ZSBpbiBjYXNlIG1vcmUgZm9yY2luZyBpcyByZXF1aXJlZC4gKi8KIAorCQlyYXdfc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCiAJCWJyZWFrOwogCX0KLXVubG9ja19yZXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5mcXNsb2NrLCBmbGFncyk7CisJcnNwLT5mcXNfYWN0aXZlID0gMDsKKwlpZiAocnNwLT5mcXNfbmVlZF9ncCkgeworCQlyYXdfc3Bpbl91bmxvY2soJnJzcC0+ZnFzbG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCisJCXJzcC0+ZnFzX25lZWRfZ3AgPSAwOworCQlyY3Vfc3RhcnRfZ3AocnNwLCBmbGFncyk7IC8qIHJlbGVhc2VzIHJucC0+bG9jayAqLworCQlyZXR1cm47CisJfQorCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCit1bmxvY2tfZnFzX3JldDoKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5mcXNsb2NrLCBmbGFncyk7CiB9CiAKICNlbHNlIC8qICNpZmRlZiBDT05GSUdfU01QICovCkBAIC0xMjkwLDcgKzEyOTYsNyBAQAogCSAqIElmIGFuIFJDVSBHUCBoYXMgZ29uZSBsb25nIGVub3VnaCwgZ28gY2hlY2sgZm9yIGR5bnRpY2sKIAkgKiBpZGxlIENQVXMgYW5kLCBpZiBuZWVkZWQsIHNlbmQgcmVzY2hlZCBJUElzLgogCSAqLwotCWlmICgobG9uZykoQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX2ZvcmNlX3FzKSAtIGppZmZpZXMpIDwgMCkKKwlpZiAoVUxPTkdfQ01QX0xUKEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19mb3JjZV9xcyksIGppZmZpZXMpKQogCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUocnNwLCAxKTsKIAogCS8qCkBAIC0xMzA0LDcgKzEzMTAsNyBAQAogCiAJLyogRG9lcyB0aGlzIENQVSByZXF1aXJlIGEgbm90LXlldC1zdGFydGVkIGdyYWNlIHBlcmlvZD8gKi8KIAlpZiAoY3B1X25lZWRzX2Fub3RoZXJfZ3AocnNwLCByZHApKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZyY3VfZ2V0X3Jvb3QocnNwKS0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJjdV9nZXRfcm9vdChyc3ApLT5sb2NrLCBmbGFncyk7CiAJCXJjdV9zdGFydF9ncChyc3AsIGZsYWdzKTsgIC8qIHJlbGVhc2VzIGFib3ZlIGxvY2sgKi8KIAl9CiAKQEAgLTEzMzUsNiArMTM0MSw5IEBACiAJICogZ3JhY2UtcGVyaW9kIG1hbmlwdWxhdGlvbnMgYWJvdmUuCiAJICovCiAJc21wX21iKCk7IC8qIFNlZSBhYm92ZSBibG9jayBjb21tZW50LiAqLworCisJLyogSWYgd2UgYXJlIGxhc3QgQ1BVIG9uIHdheSB0byBkeW50aWNrLWlkbGUgbW9kZSwgYWNjZWxlcmF0ZSBpdC4gKi8KKwlyY3VfbmVlZHNfY3B1X2ZsdXNoKCk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMzY5LDcgKzEzNzgsNyBAQAogCQl1bnNpZ25lZCBsb25nIG5lc3RmbGFnOwogCQlzdHJ1Y3QgcmN1X25vZGUgKnJucF9yb290ID0gcmN1X2dldF9yb290KHJzcCk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJucF9yb290LT5sb2NrLCBuZXN0ZmxhZyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wX3Jvb3QtPmxvY2ssIG5lc3RmbGFnKTsKIAkJcmN1X3N0YXJ0X2dwKHJzcCwgbmVzdGZsYWcpOyAgLyogcmVsZWFzZXMgcm5wX3Jvb3QtPmxvY2suICovCiAJfQogCkBAIC0xMzg3LDcgKzEzOTYsNyBAQAogCQkJZm9yY2VfcXVpZXNjZW50X3N0YXRlKHJzcCwgMCk7CiAJCXJkcC0+bl9mb3JjZV9xc19zbmFwID0gcnNwLT5uX2ZvcmNlX3FzOwogCQlyZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgPSByZHAtPnFsZW47Ci0JfSBlbHNlIGlmICgobG9uZykoQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX2ZvcmNlX3FzKSAtIGppZmZpZXMpIDwgMCkKKwl9IGVsc2UgaWYgKFVMT05HX0NNUF9MVChBQ0NFU1NfT05DRShyc3AtPmppZmZpZXNfZm9yY2VfcXMpLCBqaWZmaWVzKSkKIAkJZm9yY2VfcXVpZXNjZW50X3N0YXRlKHJzcCwgMSk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQpAQCAtMTUyMCw3ICsxNTI5LDcgQEAKIAogCS8qIEhhcyBhbiBSQ1UgR1AgZ29uZSBsb25nIGVub3VnaCB0byBzZW5kIHJlc2NoZWQgSVBJcyAmYz8gKi8KIAlpZiAocmN1X2dwX2luX3Byb2dyZXNzKHJzcCkgJiYKLQkgICAgKChsb25nKShBQ0NFU1NfT05DRShyc3AtPmppZmZpZXNfZm9yY2VfcXMpIC0gamlmZmllcykgPCAwKSkgeworCSAgICBVTE9OR19DTVBfTFQoQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX2ZvcmNlX3FzKSwgamlmZmllcykpIHsKIAkJcmRwLT5uX3JwX25lZWRfZnFzKys7CiAJCXJldHVybiAxOwogCX0KQEAgLTE1NDUsMTAgKzE1NTQsOSBAQAogLyoKICAqIENoZWNrIHRvIHNlZSBpZiBhbnkgZnV0dXJlIFJDVS1yZWxhdGVkIHdvcmsgd2lsbCBuZWVkIHRvIGJlIGRvbmUKICAqIGJ5IHRoZSBjdXJyZW50IENQVSwgZXZlbiBpZiBub25lIG5lZWQgYmUgZG9uZSBpbW1lZGlhdGVseSwgcmV0dXJuaW5nCi0gKiAxIGlmIHNvLiAgVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBSQ1UgaW1wbGVtZW50YXRpb247IGl0IGlzIC1ub3QtCi0gKiBhbiBleHBvcnRlZCBtZW1iZXIgb2YgdGhlIFJDVSBBUEkuCisgKiAxIGlmIHNvLgogICovCi1pbnQgcmN1X25lZWRzX2NwdShpbnQgY3B1KQorc3RhdGljIGludCByY3VfbmVlZHNfY3B1X3F1aWNrX2NoZWNrKGludCBjcHUpCiB7CiAJLyogUkNVIGNhbGxiYWNrcyBlaXRoZXIgcmVhZHkgb3IgcGVuZGluZz8gKi8KIAlyZXR1cm4gcGVyX2NwdShyY3Vfc2NoZWRfZGF0YSwgY3B1KS5ueHRsaXN0IHx8CkBAIC0xNTU2LDIxICsxNTY0LDYgQEAKIAkgICAgICAgcmN1X3ByZWVtcHRfbmVlZHNfY3B1KGNwdSk7CiB9CiAKLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBzY2hlZHVsZXIncyBpbml0aWFsaXphdGlvbgotICogcHJvY2Vzcy4gIEJlZm9yZSB0aGlzIGlzIGNhbGxlZCwgdGhlIGlkbGUgdGFzayBtaWdodCBjb250YWluCi0gKiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIChkdXJpbmcgd2hpY2ggdGltZSwgdGhpcyBpZGxlCi0gKiB0YXNrIGlzIGJvb3RpbmcgdGhlIHN5c3RlbSkuICBBZnRlciB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlCi0gKiBpZGxlIHRhc2tzIGFyZSBwcm9oaWJpdGVkIGZyb20gY29udGFpbmluZyBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsCi0gKiBzZWN0aW9ucy4KLSAqLwotdm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpCi17Ci0JV0FSTl9PTihudW1fb25saW5lX2NwdXMoKSAhPSAxKTsKLQlXQVJOX09OKG5yX2NvbnRleHRfc3dpdGNoZXMoKSA+IDApOwotCXJjdV9zY2hlZHVsZXJfYWN0aXZlID0gMTsKLX0KLQogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfaGVhZCwgcmN1X2JhcnJpZXJfaGVhZCkgPSB7TlVMTH07CiBzdGF0aWMgYXRvbWljX3QgcmN1X2JhcnJpZXJfY3B1X2NvdW50Owogc3RhdGljIERFRklORV9NVVRFWChyY3VfYmFycmllcl9tdXRleCk7CkBAIC0xNjU5LDcgKzE2NTIsNyBAQAogCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmN1X2dldF9yb290KHJzcCk7CiAKIAkvKiBTZXQgdXAgbG9jYWwgc3RhdGUsIGVuc3VyaW5nIGNvbnNpc3RlbnQgdmlldyBvZiBnbG9iYWwgc3RhdGUuICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJcmRwLT5ncnBtYXNrID0gMVVMIDw8IChjcHUgLSByZHAtPm15bm9kZS0+Z3JwbG8pOwogCXJkcC0+bnh0bGlzdCA9IE5VTEw7CiAJZm9yIChpID0gMDsgaSA8IFJDVV9ORVhUX1NJWkU7IGkrKykKQEAgLTE2NjksNyArMTY2Miw3IEBACiAJcmRwLT5keW50aWNrcyA9ICZwZXJfY3B1KHJjdV9keW50aWNrcywgY3B1KTsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX05PX0haICovCiAJcmRwLT5jcHUgPSBjcHU7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtMTY4Nyw3ICsxNjgwLDcgQEAKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOwogCiAJLyogU2V0IHVwIGxvY2FsIHN0YXRlLCBlbnN1cmluZyBjb25zaXN0ZW50IHZpZXcgb2YgZ2xvYmFsIHN0YXRlLiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCXJkcC0+cGFzc2VkX3F1aWVzYyA9IDA7ICAvKiBXZSBjb3VsZCBiZSByYWNpbmcgd2l0aCBuZXcgR1AsICovCiAJcmRwLT5xc19wZW5kaW5nID0gMTsJIC8qICBzbyBzZXQgdXAgdG8gcmVzcG9uZCB0byBjdXJyZW50IEdQLiAqLwogCXJkcC0+YmVlbm9ubGluZSA9IDE7CSAvKiBXZSBoYXZlIG5vdyBiZWVuIG9ubGluZS4gKi8KQEAgLTE2OTUsNyArMTY4OCw3IEBACiAJcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrID0gMDsKIAlyZHAtPm5fZm9yY2VfcXNfc25hcCA9IHJzcC0+bl9mb3JjZV9xczsKIAlyZHAtPmJsaW1pdCA9IGJsaW1pdDsKLQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJCS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsJCS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCiAJLyoKIAkgKiBBIG5ldyBncmFjZSBwZXJpb2QgbWlnaHQgc3RhcnQgaGVyZS4gIElmIHNvLCB3ZSB3b24ndCBiZSBwYXJ0CkBAIC0xNzAzLDE0ICsxNjk2LDE0IEBACiAJICovCiAKIAkvKiBFeGNsdWRlIGFueSBhdHRlbXB0cyB0byBzdGFydCBhIG5ldyBHUCBvbiBsYXJnZSBzeXN0ZW1zLiAqLwotCXNwaW5fbG9jaygmcnNwLT5vbm9mZmxvY2spOwkJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCXJhd19zcGluX2xvY2soJnJzcC0+b25vZmZsb2NrKTsJCS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAogCS8qIEFkZCBDUFUgdG8gcmN1X25vZGUgYml0bWFza3MuICovCiAJcm5wID0gcmRwLT5teW5vZGU7CiAJbWFzayA9IHJkcC0+Z3JwbWFzazsKIAlkbyB7CiAJCS8qIEV4Y2x1ZGUgYW55IGF0dGVtcHRzIHRvIHN0YXJ0IGEgbmV3IEdQIG9uIHNtYWxsIHN5c3RlbXMuICovCi0JCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCQlyYXdfc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJCXJucC0+cXNtYXNraW5pdCB8PSBtYXNrOwogCQltYXNrID0gcm5wLT5ncnBtYXNrOwogCQlpZiAocm5wID09IHJkcC0+bXlub2RlKSB7CkBAIC0xNzE4LDExICsxNzExLDExIEBACiAJCQlyZHAtPmNvbXBsZXRlZCA9IHJucC0+Y29tcGxldGVkOwogCQkJcmRwLT5wYXNzZWRfcXVpZXNjX2NvbXBsZXRlZCA9IHJucC0+Y29tcGxldGVkIC0gMTsKIAkJfQotCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAkJcm5wID0gcm5wLT5wYXJlbnQ7CiAJfSB3aGlsZSAocm5wICE9IE5VTEwgJiYgIShybnAtPnFzbWFza2luaXQgJiBtYXNrKSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X29ubGluZV9jcHUoaW50IGNwdSkKQEAgLTE4MDYsMTEgKzE3OTksMTcgQEAKICAqLwogc3RhdGljIHZvaWQgX19pbml0IHJjdV9pbml0X29uZShzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCiB7CisJc3RhdGljIGNoYXIgKmJ1ZltdID0geyAicmN1X25vZGVfbGV2ZWxfMCIsCisJCQkgICAgICAgInJjdV9ub2RlX2xldmVsXzEiLAorCQkJICAgICAgICJyY3Vfbm9kZV9sZXZlbF8yIiwKKwkJCSAgICAgICAicmN1X25vZGVfbGV2ZWxfMyIgfTsgIC8qIE1hdGNoIE1BWF9SQ1VfTFZMUyAqLwogCWludCBjcHVzdHJpZGUgPSAxOwogCWludCBpOwogCWludCBqOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwogCisJQlVJTERfQlVHX09OKE1BWF9SQ1VfTFZMUyA+IEFSUkFZX1NJWkUoYnVmKSk7ICAvKiBGaXggYnVmW10gaW5pdCEgKi8KKwogCS8qIEluaXRpYWxpemUgdGhlIGxldmVsLXRyYWNraW5nIGFycmF5cy4gKi8KIAogCWZvciAoaSA9IDE7IGkgPCBOVU1fUkNVX0xWTFM7IGkrKykKQEAgLTE4MjMsOCArMTgyMiw5IEBACiAJCWNwdXN0cmlkZSAqPSByc3AtPmxldmVsc3ByZWFkW2ldOwogCQlybnAgPSByc3AtPmxldmVsW2ldOwogCQlmb3IgKGogPSAwOyBqIDwgcnNwLT5sZXZlbGNudFtpXTsgaisrLCBybnArKykgewotCQkJc3Bpbl9sb2NrX2luaXQoJnJucC0+bG9jayk7Ci0JCQlsb2NrZGVwX3NldF9jbGFzcygmcm5wLT5sb2NrLCAmcmN1X25vZGVfY2xhc3NbaV0pOworCQkJcmF3X3NwaW5fbG9ja19pbml0KCZybnAtPmxvY2spOworCQkJbG9ja2RlcF9zZXRfY2xhc3NfYW5kX25hbWUoJnJucC0+bG9jaywKKwkJCQkJCSAgICZyY3Vfbm9kZV9jbGFzc1tpXSwgYnVmW2ldKTsKIAkJCXJucC0+Z3BudW0gPSAwOwogCQkJcm5wLT5xc21hc2sgPSAwOwogCQkJcm5wLT5xc21hc2tpbml0ID0gMDsKQEAgLTE4NzYsNyArMTg3Niw3IEBACiAKIHZvaWQgX19pbml0IHJjdV9pbml0KHZvaWQpCiB7Ci0JaW50IGk7CisJaW50IGNwdTsKIAogCXJjdV9ib290dXBfYW5ub3VuY2UoKTsKICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgpAQCAtMTg5Niw4ICsxODk2LDggQEAKIAkgKiBvciB0aGUgc2NoZWR1bGVyIGFyZSBvcGVyYXRpb25hbC4KIAkgKi8KIAljcHVfbm90aWZpZXIocmN1X2NwdV9ub3RpZnksIDApOwotCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKLQkJcmN1X2NwdV9ub3RpZnkoTlVMTCwgQ1BVX1VQX1BSRVBBUkUsICh2b2lkICopKGxvbmcpaSk7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCXJjdV9jcHVfbm90aWZ5KE5VTEwsIENQVV9VUF9QUkVQQVJFLCAodm9pZCAqKShsb25nKWNwdSk7CiB9CiAKICNpbmNsdWRlICJyY3V0cmVlX3BsdWdpbi5oIgpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWUuaCBiL2tlcm5lbC9yY3V0cmVlLmgKaW5kZXggZDJhMDA0Ni4uMTQzOWViNSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWUuaAorKysgYi9rZXJuZWwvcmN1dHJlZS5oCkBAIC05MCwxMiArOTAsMTIgQEAKICAqIERlZmluaXRpb24gZm9yIG5vZGUgd2l0aGluIHRoZSBSQ1UgZ3JhY2UtcGVyaW9kLWRldGVjdGlvbiBoaWVyYXJjaHkuCiAgKi8KIHN0cnVjdCByY3Vfbm9kZSB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwkvKiBSb290IHJjdV9ub2RlJ3MgbG9jayBwcm90ZWN0cyBzb21lICovCisJcmF3X3NwaW5sb2NrX3QgbG9jazsJLyogUm9vdCByY3Vfbm9kZSdzIGxvY2sgcHJvdGVjdHMgc29tZSAqLwogCQkJCS8qICByY3Vfc3RhdGUgZmllbGRzIGFzIHdlbGwgYXMgZm9sbG93aW5nLiAqLwotCWxvbmcJZ3BudW07CQkvKiBDdXJyZW50IGdyYWNlIHBlcmlvZCBmb3IgdGhpcyBub2RlLiAqLworCXVuc2lnbmVkIGxvbmcgZ3BudW07CS8qIEN1cnJlbnQgZ3JhY2UgcGVyaW9kIGZvciB0aGlzIG5vZGUuICovCiAJCQkJLyogIFRoaXMgd2lsbCBlaXRoZXIgYmUgZXF1YWwgdG8gb3Igb25lICovCiAJCQkJLyogIGJlaGluZCB0aGUgcm9vdCByY3Vfbm9kZSdzIGdwbnVtLiAqLwotCWxvbmcJY29tcGxldGVkOwkvKiBMYXN0IGdyYWNlIHBlcmlvZCBjb21wbGV0ZWQgZm9yIHRoaXMgbm9kZS4gKi8KKwl1bnNpZ25lZCBsb25nIGNvbXBsZXRlZDsgLyogTGFzdCBHUCBjb21wbGV0ZWQgZm9yIHRoaXMgbm9kZS4gKi8KIAkJCQkvKiAgVGhpcyB3aWxsIGVpdGhlciBiZSBlcXVhbCB0byBvciBvbmUgKi8KIAkJCQkvKiAgYmVoaW5kIHRoZSByb290IHJjdV9ub2RlJ3MgZ3BudW0uICovCiAJdW5zaWduZWQgbG9uZyBxc21hc2s7CS8qIENQVXMgb3IgZ3JvdXBzIHRoYXQgbmVlZCB0byBzd2l0Y2ggaW4gKi8KQEAgLTE2MSwxMSArMTYxLDExIEBACiAvKiBQZXItQ1BVIGRhdGEgZm9yIHJlYWQtY29weSB1cGRhdGUuICovCiBzdHJ1Y3QgcmN1X2RhdGEgewogCS8qIDEpIHF1aWVzY2VudC1zdGF0ZSBhbmQgZ3JhY2UtcGVyaW9kIGhhbmRsaW5nIDogKi8KLQlsb25nCQljb21wbGV0ZWQ7CS8qIFRyYWNrIHJzcC0+Y29tcGxldGVkIGdwIG51bWJlciAqLworCXVuc2lnbmVkIGxvbmcJY29tcGxldGVkOwkvKiBUcmFjayByc3AtPmNvbXBsZXRlZCBncCBudW1iZXIgKi8KIAkJCQkJLyogIGluIG9yZGVyIHRvIGRldGVjdCBHUCBlbmQuICovCi0JbG9uZwkJZ3BudW07CQkvKiBIaWdoZXN0IGdwIG51bWJlciB0aGF0IHRoaXMgQ1BVICovCisJdW5zaWduZWQgbG9uZwlncG51bTsJCS8qIEhpZ2hlc3QgZ3AgbnVtYmVyIHRoYXQgdGhpcyBDUFUgKi8KIAkJCQkJLyogIGlzIGF3YXJlIG9mIGhhdmluZyBzdGFydGVkLiAqLwotCWxvbmcJCXBhc3NlZF9xdWllc2NfY29tcGxldGVkOworCXVuc2lnbmVkIGxvbmcJcGFzc2VkX3F1aWVzY19jb21wbGV0ZWQ7CiAJCQkJCS8qIFZhbHVlIG9mIGNvbXBsZXRlZCBhdCB0aW1lIG9mIHFzLiAqLwogCWJvb2wJCXBhc3NlZF9xdWllc2M7CS8qIFVzZXItbW9kZS9pZGxlIGxvb3AgZXRjLiAqLwogCWJvb2wJCXFzX3BlbmRpbmc7CS8qIENvcmUgd2FpdHMgZm9yIHF1aWVzYyBzdGF0ZS4gKi8KQEAgLTIyMSwxNCArMjIxLDE0IEBACiAJdW5zaWduZWQgbG9uZyByZXNjaGVkX2lwaTsJLyogU2VudCBhIHJlc2NoZWQgSVBJLiAqLwogCiAJLyogNSkgX19yY3VfcGVuZGluZygpIHN0YXRpc3RpY3MuICovCi0JbG9uZyBuX3JjdV9wZW5kaW5nOwkJLyogcmN1X3BlbmRpbmcoKSBjYWxscyBzaW5jZSBib290LiAqLwotCWxvbmcgbl9ycF9xc19wZW5kaW5nOwotCWxvbmcgbl9ycF9jYl9yZWFkeTsKLQlsb25nIG5fcnBfY3B1X25lZWRzX2dwOwotCWxvbmcgbl9ycF9ncF9jb21wbGV0ZWQ7Ci0JbG9uZyBuX3JwX2dwX3N0YXJ0ZWQ7Ci0JbG9uZyBuX3JwX25lZWRfZnFzOwotCWxvbmcgbl9ycF9uZWVkX25vdGhpbmc7CisJdW5zaWduZWQgbG9uZyBuX3JjdV9wZW5kaW5nOwkvKiByY3VfcGVuZGluZygpIGNhbGxzIHNpbmNlIGJvb3QuICovCisJdW5zaWduZWQgbG9uZyBuX3JwX3FzX3BlbmRpbmc7CisJdW5zaWduZWQgbG9uZyBuX3JwX2NiX3JlYWR5OworCXVuc2lnbmVkIGxvbmcgbl9ycF9jcHVfbmVlZHNfZ3A7CisJdW5zaWduZWQgbG9uZyBuX3JwX2dwX2NvbXBsZXRlZDsKKwl1bnNpZ25lZCBsb25nIG5fcnBfZ3Bfc3RhcnRlZDsKKwl1bnNpZ25lZCBsb25nIG5fcnBfbmVlZF9mcXM7CisJdW5zaWduZWQgbG9uZyBuX3JwX25lZWRfbm90aGluZzsKIAogCWludCBjcHU7CiB9OwpAQCAtMjM3LDEyICsyMzcsMTEgQEAKICNkZWZpbmUgUkNVX0dQX0lETEUJCTAJLyogTm8gZ3JhY2UgcGVyaW9kIGluIHByb2dyZXNzLiAqLwogI2RlZmluZSBSQ1VfR1BfSU5JVAkJMQkvKiBHcmFjZSBwZXJpb2QgYmVpbmcgaW5pdGlhbGl6ZWQuICovCiAjZGVmaW5lIFJDVV9TQVZFX0RZTlRJQ0sJMgkvKiBOZWVkIHRvIHNjYW4gZHludGljayBzdGF0ZS4gKi8KLSNkZWZpbmUgUkNVX1NBVkVfQ09NUExFVEVECTMJLyogTmVlZCB0byBzYXZlIHJzcC0+Y29tcGxldGVkLiAqLwotI2RlZmluZSBSQ1VfRk9SQ0VfUVMJCTQJLyogTmVlZCB0byBmb3JjZSBxdWllc2NlbnQgc3RhdGUuICovCisjZGVmaW5lIFJDVV9GT1JDRV9RUwkJMwkvKiBOZWVkIHRvIGZvcmNlIHF1aWVzY2VudCBzdGF0ZS4gKi8KICNpZmRlZiBDT05GSUdfTk9fSFoKICNkZWZpbmUgUkNVX1NJR05BTF9JTklUCQlSQ1VfU0FWRV9EWU5USUNLCiAjZWxzZSAvKiAjaWZkZWYgQ09ORklHX05PX0haICovCi0jZGVmaW5lIFJDVV9TSUdOQUxfSU5JVAkJUkNVX1NBVkVfQ09NUExFVEVECisjZGVmaW5lIFJDVV9TSUdOQUxfSU5JVAkJUkNVX0ZPUkNFX1FTCiAjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19OT19IWiAqLwogCiAjZGVmaW5lIFJDVV9KSUZGSUVTX1RJTExfRk9SQ0VfUVMJIDMJLyogZm9yIHJzcC0+amlmZmllc19mb3JjZV9xcyAqLwpAQCAtMjU2LDYgKzI1NSw5IEBACiAKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KIAorI2RlZmluZSBVTE9OR19DTVBfR0UoYSwgYikJKFVMT05HX01BWCAvIDIgPj0gKGEpIC0gKGIpKQorI2RlZmluZSBVTE9OR19DTVBfTFQoYSwgYikJKFVMT05HX01BWCAvIDIgPCAoYSkgLSAoYikpCisKIC8qCiAgKiBSQ1UgZ2xvYmFsIHN0YXRlLCBpbmNsdWRpbmcgbm9kZSBoaWVyYXJjaHkuICBUaGlzIGhpZXJhcmNoeSBpcwogICogcmVwcmVzZW50ZWQgaW4gImhlYXAiIGZvcm0gaW4gYSBkZW5zZSBhcnJheS4gIFRoZSByb290IChmaXJzdCBsZXZlbCkKQEAgLTI3NywxMiArMjc5LDE5IEBACiAKIAl1OAlzaWduYWxlZCBfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wOwogCQkJCQkJLyogRm9yY2UgUVMgc3RhdGUuICovCi0JbG9uZwlncG51bTsJCQkJLyogQ3VycmVudCBncCBudW1iZXIuICovCi0JbG9uZwljb21wbGV0ZWQ7CQkJLyogIyBvZiBsYXN0IGNvbXBsZXRlZCBncC4gKi8KKwl1OAlmcXNfYWN0aXZlOwkJCS8qIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpICovCisJCQkJCQkvKiAgaXMgcnVubmluZy4gKi8KKwl1OAlmcXNfbmVlZF9ncDsJCQkvKiBBIENQVSB3YXMgcHJldmVudGVkIGZyb20gKi8KKwkJCQkJCS8qICBzdGFydGluZyBhIG5ldyBncmFjZSAqLworCQkJCQkJLyogIHBlcmlvZCBiZWNhdXNlICovCisJCQkJCQkvKiAgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkgKi8KKwkJCQkJCS8qICB3YXMgcnVubmluZy4gKi8KKwl1bnNpZ25lZCBsb25nIGdwbnVtOwkJCS8qIEN1cnJlbnQgZ3AgbnVtYmVyLiAqLworCXVuc2lnbmVkIGxvbmcgY29tcGxldGVkOwkJLyogIyBvZiBsYXN0IGNvbXBsZXRlZCBncC4gKi8KIAogCS8qIEVuZCBvZiBmaWVsZHMgZ3VhcmRlZCBieSByb290IHJjdV9ub2RlJ3MgbG9jay4gKi8KIAotCXNwaW5sb2NrX3Qgb25vZmZsb2NrOwkJCS8qIGV4Y2x1ZGUgb24vb2ZmbGluZSBhbmQgKi8KKwlyYXdfc3BpbmxvY2tfdCBvbm9mZmxvY2s7CQkvKiBleGNsdWRlIG9uL29mZmxpbmUgYW5kICovCiAJCQkJCQkvKiAgc3RhcnRpbmcgbmV3IEdQLiAgQWxzbyAqLwogCQkJCQkJLyogIHByb3RlY3RzIHRoZSBmb2xsb3dpbmcgKi8KIAkJCQkJCS8qICBvcnBoYW5fY2JzIGZpZWxkcy4gKi8KQEAgLTI5MiwxMCArMzAxLDggQEAKIAkJCQkJCS8qICBnb2luZyBvZmZsaW5lLiAqLwogCXN0cnVjdCByY3VfaGVhZCAqKm9ycGhhbl9jYnNfdGFpbDsJLyogQW5kIHRhaWwgcG9pbnRlci4gKi8KIAlsb25nIG9ycGhhbl9xbGVuOwkJCS8qIE51bWJlciBvZiBvcnBoYW5lZCBjYnMuICovCi0Jc3BpbmxvY2tfdCBmcXNsb2NrOwkJCS8qIE9ubHkgb25lIHRhc2sgZm9yY2luZyAqLworCXJhd19zcGlubG9ja190IGZxc2xvY2s7CQkJLyogT25seSBvbmUgdGFzayBmb3JjaW5nICovCiAJCQkJCQkvKiAgcXVpZXNjZW50IHN0YXRlcy4gKi8KLQlsb25nCWNvbXBsZXRlZF9mcXM7CQkJLyogVmFsdWUgb2YgY29tcGxldGVkIEAgc25hcC4gKi8KLQkJCQkJCS8qICBQcm90ZWN0ZWQgYnkgZnFzbG9jay4gKi8KIAl1bnNpZ25lZCBsb25nIGppZmZpZXNfZm9yY2VfcXM7CQkvKiBUaW1lIGF0IHdoaWNoIHRvIGludm9rZSAqLwogCQkJCQkJLyogIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpLiAqLwogCXVuc2lnbmVkIGxvbmcgbl9mb3JjZV9xczsJCS8qIE51bWJlciBvZiBjYWxscyB0byAqLwpAQCAtMzE5LDggKzMyNiw2IEBACiAjZGVmaW5lIFJDVV9PRkxfVEFTS1NfRVhQX0dQCTB4MgkJLyogVGFza3MgYmxvY2tpbmcgZXhwZWRpdGVkICovCiAJCQkJCQkvKiAgR1Agd2VyZSBtb3ZlZCB0byByb290LiAqLwogCi0jaWZkZWYgUkNVX1RSRUVfTk9OQ09SRQotCiAvKgogICogUkNVIGltcGxlbWVudGF0aW9uIGludGVybmFsIGRlY2xhcmF0aW9uczoKICAqLwpAQCAtMzM1LDcgKzM0MCw3IEBACiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IHJjdV9kYXRhLCByY3VfcHJlZW1wdF9kYXRhKTsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KIAotI2Vsc2UgLyogI2lmZGVmIFJDVV9UUkVFX05PTkNPUkUgKi8KKyNpZm5kZWYgUkNVX1RSRUVfTk9OQ09SRQogCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgcmN1dHJlZV9wbHVnaW4uaCAqLwogc3RhdGljIHZvaWQgcmN1X2Jvb3R1cF9hbm5vdW5jZSh2b2lkKTsKQEAgLTM0Nyw2ICszNTIsNyBAQAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgorc3RhdGljIHZvaWQgcmN1X3ByaW50X2RldGFpbF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCk7CiBzdGF0aWMgdm9pZCByY3VfcHJpbnRfdGFza19zdGFsbChzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SICovCiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9jaGVja19ibG9ja2VkX3Rhc2tzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKQEAgLTM2Nyw1ICszNzMsNiBAQAogc3RhdGljIHZvaWQgX19jcHVpbml0IHJjdV9wcmVlbXB0X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSk7CiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9zZW5kX2Nic190b19vcnBoYW5hZ2Uodm9pZCk7CiBzdGF0aWMgdm9pZCBfX2luaXQgX19yY3VfaW5pdF9wcmVlbXB0KHZvaWQpOworc3RhdGljIHZvaWQgcmN1X25lZWRzX2NwdV9mbHVzaCh2b2lkKTsKIAotI2VuZGlmIC8qICNlbHNlICNpZmRlZiBSQ1VfVFJFRV9OT05DT1JFICovCisjZW5kaWYgLyogI2lmbmRlZiBSQ1VfVFJFRV9OT05DT1JFICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaCBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCmluZGV4IDM3ZmJjY2QuLjQ2NGFkMmMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCisrKyBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCkBAIC02Miw2ICs2MiwxNSBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhdGNoZXNfY29tcGxldGVkKTsKIAogLyoKKyAqIEZvcmNlIGEgcXVpZXNjZW50IHN0YXRlIGZvciBwcmVlbXB0aWJsZSBSQ1UuCisgKi8KK3ZvaWQgcmN1X2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKQoreworCWZvcmNlX3F1aWVzY2VudF9zdGF0ZSgmcmN1X3ByZWVtcHRfc3RhdGUsIDApOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSk7CisKKy8qCiAgKiBSZWNvcmQgYSBwcmVlbXB0YWJsZS1SQ1UgcXVpZXNjZW50IHN0YXRlIGZvciB0aGUgc3BlY2lmaWVkIENQVS4gIE5vdGUKICAqIHRoYXQgdGhpcyBqdXN0IG1lYW5zIHRoYXQgdGhlIHRhc2sgY3VycmVudGx5IHJ1bm5pbmcgb24gdGhlIENQVSBpcwogICogbm90IGluIGEgcXVpZXNjZW50IHN0YXRlLiAgVGhlcmUgbWlnaHQgYmUgYW55IG51bWJlciBvZiB0YXNrcyBibG9ja2VkCkBAIC0xMDIsNyArMTExLDcgQEAKIAkJLyogUG9zc2libHkgYmxvY2tpbmcgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAqLwogCQlyZHAgPSByY3VfcHJlZW1wdF9zdGF0ZS5yZGFbY3B1XTsKIAkJcm5wID0gcmRwLT5teW5vZGU7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJdC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgfD0gUkNVX1JFQURfVU5MT0NLX0JMT0NLRUQ7CiAJCXQtPnJjdV9ibG9ja2VkX25vZGUgPSBybnA7CiAKQEAgLTEyMyw3ICsxMzIsNyBAQAogCQlXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoJnQtPnJjdV9ub2RlX2VudHJ5KSk7CiAJCXBoYXNlID0gKHJucC0+Z3BudW0gKyAhKHJucC0+cXNtYXNrICYgcmRwLT5ncnBtYXNrKSkgJiAweDE7CiAJCWxpc3RfYWRkKCZ0LT5yY3Vfbm9kZV9lbnRyeSwgJnJucC0+YmxvY2tlZF90YXNrc1twaGFzZV0pOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCX0KIAogCS8qCkBAIC0xODAsNyArMTg5LDcgQEAKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucF9wOwogCiAJaWYgKHJucC0+cXNtYXNrICE9IDAgfHwgcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCkpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOyAgLyogU3RpbGwgbmVlZCBtb3JlIHF1aWVzY2VudCBzdGF0ZXMhICovCiAJfQogCkBAIC0xOTcsOCArMjA2LDggQEAKIAogCS8qIFJlcG9ydCB1cCB0aGUgcmVzdCBvZiB0aGUgaGllcmFyY2h5LiAqLwogCW1hc2sgPSBybnAtPmdycG1hc2s7Ci0Jc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwotCXNwaW5fbG9jaygmcm5wX3AtPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KKwlyYXdfc3Bpbl9sb2NrKCZybnBfcC0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAlyY3VfcmVwb3J0X3FzX3JucChtYXNrLCAmcmN1X3ByZWVtcHRfc3RhdGUsIHJucF9wLCBmbGFncyk7CiB9CiAKQEAgLTI0OCwxMCArMjU3LDEwIEBACiAJCSAqLwogCQlmb3IgKDs7KSB7CiAJCQlybnAgPSB0LT5yY3VfYmxvY2tlZF9ub2RlOwotCQkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCQkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAkJCWlmIChybnAgPT0gdC0+cmN1X2Jsb2NrZWRfbm9kZSkKIAkJCQlicmVhazsKLQkJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCQl9CiAJCWVtcHR5ID0gIXJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApOwogCQllbXB0eV9leHAgPSAhcmN1X3ByZWVtcHRlZF9yZWFkZXJzX2V4cChybnApOwpAQCAtMjY1LDcgKzI3NCw3IEBACiAJCSAqIE5vdGUgdGhhdCByY3VfcmVwb3J0X3VuYmxvY2tfcXNfcm5wKCkgcmVsZWFzZXMgcm5wLT5sb2NrLgogCQkgKi8KIAkJaWYgKGVtcHR5KQotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCWVsc2UKIAkJCXJjdV9yZXBvcnRfdW5ibG9ja19xc19ybnAocm5wLCBmbGFncyk7CiAKQEAgLTI5NSwxNiArMzA0LDIxIEBACiAJaWYgKC0tQUNDRVNTX09OQ0UodC0+cmN1X3JlYWRfbG9ja19uZXN0aW5nKSA9PSAwICYmCiAJICAgIHVubGlrZWx5KEFDQ0VTU19PTkNFKHQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsKSkpCiAJCXJjdV9yZWFkX3VubG9ja19zcGVjaWFsKHQpOworI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HCisJV0FSTl9PTl9PTkNFKEFDQ0VTU19PTkNFKHQtPnJjdV9yZWFkX2xvY2tfbmVzdGluZykgPCAwKTsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcgKi8KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fcmN1X3JlYWRfdW5sb2NrKTsKIAogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCiAKKyNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9WRVJCT1NFCisKIC8qCi0gKiBTY2FuIHRoZSBjdXJyZW50IGxpc3Qgb2YgdGFza3MgYmxvY2tlZCB3aXRoaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbAotICogc2VjdGlvbnMsIHByaW50aW5nIG91dCB0aGUgdGlkIG9mIGVhY2guCisgKiBEdW1wIGRldGFpbGVkIGluZm9ybWF0aW9uIGZvciBhbGwgdGFza3MgYmxvY2tpbmcgdGhlIGN1cnJlbnQgUkNVCisgKiBncmFjZSBwZXJpb2Qgb24gdGhlIHNwZWNpZmllZCByY3Vfbm9kZSBzdHJ1Y3R1cmUuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmludF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQorc3RhdGljIHZvaWQgcmN1X3ByaW50X2RldGFpbF90YXNrX3N0YWxsX3JucChzdHJ1Y3QgcmN1X25vZGUgKnJucCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxwOwpAQCAtMzEyLDEyICszMjYsNTEgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAKIAlpZiAocmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCkpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlwaGFzZSA9IHJucC0+Z3BudW0gJiAweDE7CisJCWxwID0gJnJucC0+YmxvY2tlZF90YXNrc1twaGFzZV07CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgbHAsIHJjdV9ub2RlX2VudHJ5KQorCQkJc2NoZWRfc2hvd190YXNrKHQpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJfQorfQorCisvKgorICogRHVtcCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBmb3IgYWxsIHRhc2tzIGJsb2NraW5nIHRoZSBjdXJyZW50IFJDVQorICogZ3JhY2UgcGVyaW9kLgorICovCitzdGF0aWMgdm9pZCByY3VfcHJpbnRfZGV0YWlsX3Rhc2tfc3RhbGwoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQoreworCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmN1X2dldF9yb290KHJzcCk7CisKKwlyY3VfcHJpbnRfZGV0YWlsX3Rhc2tfc3RhbGxfcm5wKHJucCk7CisJcmN1X2Zvcl9lYWNoX2xlYWZfbm9kZShyc3AsIHJucCkKKwkJcmN1X3ByaW50X2RldGFpbF90YXNrX3N0YWxsX3JucChybnApOworfQorCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRSAqLworCitzdGF0aWMgdm9pZCByY3VfcHJpbnRfZGV0YWlsX3Rhc2tfc3RhbGwoc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQoreworfQorCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0UgKi8KKworLyoKKyAqIFNjYW4gdGhlIGN1cnJlbnQgbGlzdCBvZiB0YXNrcyBibG9ja2VkIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsCisgKiBzZWN0aW9ucywgcHJpbnRpbmcgb3V0IHRoZSB0aWQgb2YgZWFjaC4KKyAqLworc3RhdGljIHZvaWQgcmN1X3ByaW50X3Rhc2tfc3RhbGwoc3RydWN0IHJjdV9ub2RlICpybnApCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbHA7CisJaW50IHBoYXNlOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKKworCWlmIChyY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKSkgewogCQlwaGFzZSA9IHJucC0+Z3BudW0gJiAweDE7CiAJCWxwID0gJnJucC0+YmxvY2tlZF90YXNrc1twaGFzZV07CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgbHAsIHJjdV9ub2RlX2VudHJ5KQogCQkJcHJpbnRrKCIgUCVkIiwgdC0+cGlkKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJfQogfQogCkBAIC0zODgsMTEgKzQ0MSwxMSBAQAogCQlscF9yb290ID0gJnJucF9yb290LT5ibG9ja2VkX3Rhc2tzW2ldOwogCQl3aGlsZSAoIWxpc3RfZW1wdHkobHApKSB7CiAJCQl0cCA9IGxpc3RfZW50cnkobHAtPm5leHQsIHR5cGVvZigqdHApLCByY3Vfbm9kZV9lbnRyeSk7Ci0JCQlzcGluX2xvY2soJnJucF9yb290LT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCisJCQlyYXdfc3Bpbl9sb2NrKCZybnBfcm9vdC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZCAqLwogCQkJbGlzdF9kZWwoJnRwLT5yY3Vfbm9kZV9lbnRyeSk7CiAJCQl0cC0+cmN1X2Jsb2NrZWRfbm9kZSA9IHJucF9yb290OwogCQkJbGlzdF9hZGQoJnRwLT5yY3Vfbm9kZV9lbnRyeSwgbHBfcm9vdCk7Ci0JCQlzcGluX3VubG9jaygmcm5wX3Jvb3QtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLworCQkJcmF3X3NwaW5fdW5sb2NrKCZybnBfcm9vdC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCiAJCX0KIAl9CiAJcmV0dXJuIHJldHZhbDsKQEAgLTUxNiw3ICs1NjksNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJZm9yICg7OykgewogCQlpZiAoIXN5bmNfcmN1X3ByZWVtcHRfZXhwX2RvbmUocm5wKSkKIAkJCWJyZWFrOwpAQCAtNTI1LDEyICs1NzgsMTIgQEAKIAkJCWJyZWFrOwogCQl9CiAJCW1hc2sgPSBybnAtPmdycG1hc2s7Ci0JCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLworCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCiAJCXJucCA9IHJucC0+cGFyZW50OwotCQlzcGluX2xvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCQlyYXdfc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQgKi8KIAkJcm5wLT5leHBtYXNrICY9IH5tYXNrOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC01NDUsMTEgKzU5OCwxMSBAQAogewogCWludCBtdXN0X3dhaXQ7CiAKLQlzcGluX2xvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCXJhd19zcGluX2xvY2soJnJucC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZCAqLwogCWxpc3Rfc3BsaWNlX2luaXQoJnJucC0+YmxvY2tlZF90YXNrc1swXSwgJnJucC0+YmxvY2tlZF90YXNrc1syXSk7CiAJbGlzdF9zcGxpY2VfaW5pdCgmcm5wLT5ibG9ja2VkX3Rhc2tzWzFdLCAmcm5wLT5ibG9ja2VkX3Rhc2tzWzNdKTsKIAltdXN0X3dhaXQgPSByY3VfcHJlZW1wdGVkX3JlYWRlcnNfZXhwKHJucCk7Ci0Jc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCisJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLwogCWlmICghbXVzdF93YWl0KQogCQlyY3VfcmVwb3J0X2V4cF9ybnAocnNwLCBybnApOwogfQpAQCAtNTk0LDEzICs2NDcsMTMgQEAKIAkvKiBmb3JjZSBhbGwgUkNVIHJlYWRlcnMgb250byBibG9ja2VkX3Rhc2tzW10uICovCiAJc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkKCk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiAKIAkvKiBJbml0aWFsaXplIC0+ZXhwbWFzayBmb3IgYWxsIG5vbi1sZWFmIHJjdV9ub2RlIHN0cnVjdHVyZXMuICovCiAJcmN1X2Zvcl9lYWNoX25vbmxlYWZfbm9kZV9icmVhZHRoX2ZpcnN0KHJzcCwgcm5wKSB7Ci0JCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCQlyYXdfc3Bpbl9sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJCXJucC0+ZXhwbWFzayA9IHJucC0+cXNtYXNraW5pdDsKLQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCX0KIAogCS8qIFNuYXBzaG90IGN1cnJlbnQgc3RhdGUgb2YgLT5ibG9ja2VkX3Rhc2tzW10gbGlzdHMuICovCkBAIC02MDksNyArNjYyLDcgQEAKIAlpZiAoTlVNX1JDVV9OT0RFUyA+IDEpCiAJCXN5bmNfcmN1X3ByZWVtcHRfZXhwX2luaXQocnNwLCByY3VfZ2V0X3Jvb3QocnNwKSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwogCiAJLyogV2FpdCBmb3Igc25hcHNob3R0ZWQgLT5ibG9ja2VkX3Rhc2tzW10gbGlzdHMgdG8gZHJhaW4uICovCiAJcm5wID0gcmN1X2dldF9yb290KHJzcCk7CkBAIC03MTMsNiArNzY2LDE2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmF0Y2hlc19jb21wbGV0ZWQpOwogCiAvKgorICogRm9yY2UgYSBxdWllc2NlbnQgc3RhdGUgZm9yIFJDVSwgd2hpY2gsIGJlY2F1c2UgdGhlcmUgaXMgbm8gcHJlZW1wdGlibGUKKyAqIFJDVSwgYmVjb21lcyB0aGUgc2FtZSBhcyByY3Utc2NoZWQuCisgKi8KK3ZvaWQgcmN1X2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKQoreworCXJjdV9zY2hlZF9mb3JjZV9xdWllc2NlbnRfc3RhdGUoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUpOworCisvKgogICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHdlIG5ldmVyIGhhdmUgdG8gY2hlY2sgZm9yCiAgKiBDUFVzIGJlaW5nIGluIHF1aWVzY2VudCBzdGF0ZXMuCiAgKi8KQEAgLTczNCw3ICs3OTcsNyBAQAogLyogQmVjYXVzZSBwcmVlbXB0aWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIG5vIHF1aWV0aW5nIG9mIHRhc2tzLiAqLwogc3RhdGljIHZvaWQgcmN1X3JlcG9ydF91bmJsb2NrX3FzX3JucChzdHJ1Y3QgcmN1X25vZGUgKnJucCwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiB9CiAKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVICovCkBAIC03NDUsNiArODA4LDE0IEBACiAgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgd2UgbmV2ZXIgaGF2ZSB0byBjaGVjayBmb3IKICAqIHRhc2tzIGJsb2NrZWQgd2l0aGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMuCiAgKi8KK3N0YXRpYyB2b2lkIHJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7Cit9CisKKy8qCisgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgd2UgbmV2ZXIgaGF2ZSB0byBjaGVjayBmb3IKKyAqIHRhc2tzIGJsb2NrZWQgd2l0aGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMuCisgKi8KIHN0YXRpYyB2b2lkIHJjdV9wcmludF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQogewogfQpAQCAtODg0LDMgKzk1NSwxMTMgQEAKIH0KIAogI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLworCisjaWYgIWRlZmluZWQoQ09ORklHX1JDVV9GQVNUX05PX0haKQorCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIGFueSBmdXR1cmUgUkNVLXJlbGF0ZWQgd29yayB3aWxsIG5lZWQgdG8gYmUgZG9uZQorICogYnkgdGhlIGN1cnJlbnQgQ1BVLCBldmVuIGlmIG5vbmUgbmVlZCBiZSBkb25lIGltbWVkaWF0ZWx5LCByZXR1cm5pbmcKKyAqIDEgaWYgc28uICBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIFJDVSBpbXBsZW1lbnRhdGlvbjsgaXQgaXMgLW5vdC0KKyAqIGFuIGV4cG9ydGVkIG1lbWJlciBvZiB0aGUgUkNVIEFQSS4KKyAqCisgKiBCZWNhdXNlIHdlIGhhdmUgcHJlZW1wdGlibGUgUkNVLCBqdXN0IGNoZWNrIHdoZXRoZXIgdGhpcyBDUFUgbmVlZHMKKyAqIGFueSBmbGF2b3Igb2YgUkNVLiAgRG8gbm90IGNoZXcgdXAgbG90cyBvZiBDUFUgY3ljbGVzIHdpdGggcHJlZW1wdGlvbgorICogZGlzYWJsZWQgaW4gYSBtb3N0LWxpa2VseSB2YWluIGF0dGVtcHQgdG8gY2F1c2UgUkNVIG5vdCB0byBuZWVkIHRoaXMgQ1BVLgorICovCitpbnQgcmN1X25lZWRzX2NwdShpbnQgY3B1KQoreworCXJldHVybiByY3VfbmVlZHNfY3B1X3F1aWNrX2NoZWNrKGNwdSk7Cit9CisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBjb250aW51ZSBhIGNhbGxiYWNrLWZsdXNoIG9wZXJhdGlvbnMgdG8KKyAqIGFsbG93IHRoZSBsYXN0IENQVSB0byBlbnRlciBkeW50aWNrLWlkbGUgbW9kZS4gIEJ1dCBmYXN0IGR5bnRpY2staWRsZQorICogZW50cnkgaXMgbm90IGNvbmZpZ3VyZWQsIHNvIHdlIG5ldmVyIGRvIG5lZWQgdG8uCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9uZWVkc19jcHVfZmx1c2godm9pZCkKK3sKK30KKworI2Vsc2UgLyogI2lmICFkZWZpbmVkKENPTkZJR19SQ1VfRkFTVF9OT19IWikgKi8KKworI2RlZmluZSBSQ1VfTkVFRFNfQ1BVX0ZMVVNIRVMgNQorc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgcmN1X2R5bnRpY2tfZHJhaW4pOworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHJjdV9keW50aWNrX2hvbGRvZmYpOworCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIGFueSBmdXR1cmUgUkNVLXJlbGF0ZWQgd29yayB3aWxsIG5lZWQgdG8gYmUgZG9uZQorICogYnkgdGhlIGN1cnJlbnQgQ1BVLCBldmVuIGlmIG5vbmUgbmVlZCBiZSBkb25lIGltbWVkaWF0ZWx5LCByZXR1cm5pbmcKKyAqIDEgaWYgc28uICBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIFJDVSBpbXBsZW1lbnRhdGlvbjsgaXQgaXMgLW5vdC0KKyAqIGFuIGV4cG9ydGVkIG1lbWJlciBvZiB0aGUgUkNVIEFQSS4KKyAqCisgKiBCZWNhdXNlIHdlIGFyZSBub3Qgc3VwcG9ydGluZyBwcmVlbXB0aWJsZSBSQ1UsIGF0dGVtcHQgdG8gYWNjZWxlcmF0ZQorICogYW55IGN1cnJlbnQgZ3JhY2UgcGVyaW9kcyBzbyB0aGF0IFJDVSBubyBsb25nZXIgbmVlZHMgdGhpcyBDUFUsIGJ1dAorICogb25seSBpZiBhbGwgb3RoZXIgQ1BVcyBhcmUgYWxyZWFkeSBpbiBkeW50aWNrcy1pZGxlIG1vZGUuICBUaGlzIHdpbGwKKyAqIGFsbG93IHRoZSBDUFUgY29yZXMgdG8gYmUgcG93ZXJlZCBkb3duIGltbWVkaWF0ZWx5LCBhcyBvcHBvc2VkIHRvIGFmdGVyCisgKiB3YWl0aW5nIG1hbnkgbWlsbGlzZWNvbmRzIGZvciBncmFjZSBwZXJpb2RzIHRvIGVsYXBzZS4KKyAqCisgKiBCZWNhdXNlIGl0IGlzIG5vdCBsZWdhbCB0byBpbnZva2UgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCkgd2l0aCBpcnFzCisgKiBkaXNhYmxlZCwgd2UgZG8gb25lIHBhc3Mgb2YgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCksIHRoZW4gZG8gYQorICogcmFpc2Vfc29mdGlycSgpIHRvIGNhdXNlIHJjdV9wcm9jZXNzX2NhbGxiYWNrcygpIHRvIGJlIGludm9rZWQgbGF0ZXIuCisgKiBUaGUgcGVyLWNwdSByY3VfZHludGlja19kcmFpbiB2YXJpYWJsZSBjb250cm9scyB0aGUgc2VxdWVuY2luZy4KKyAqLworaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSkKK3sKKwlpbnQgYyA9IDA7CisJaW50IHRoYXRjcHU7CisKKwkvKiBEb24ndCBib3RoZXIgdW5sZXNzIHdlIGFyZSB0aGUgbGFzdCBub24tZHludGljay1pZGxlIENQVS4gKi8KKwlmb3JfZWFjaF9jcHVfbm90KHRoYXRjcHUsIG5vaHpfY3B1X21hc2spCisJCWlmICh0aGF0Y3B1ICE9IGNwdSkgeworCQkJcGVyX2NwdShyY3VfZHludGlja19kcmFpbiwgY3B1KSA9IDA7CisJCQlwZXJfY3B1KHJjdV9keW50aWNrX2hvbGRvZmYsIGNwdSkgPSBqaWZmaWVzIC0gMTsKKwkJCXJldHVybiByY3VfbmVlZHNfY3B1X3F1aWNrX2NoZWNrKGNwdSk7CisJCX0KKworCS8qIENoZWNrIGFuZCB1cGRhdGUgdGhlIHJjdV9keW50aWNrX2RyYWluIHNlcXVlbmNpbmcuICovCisJaWYgKHBlcl9jcHUocmN1X2R5bnRpY2tfZHJhaW4sIGNwdSkgPD0gMCkgeworCQkvKiBGaXJzdCB0aW1lIHRocm91Z2gsIGluaXRpYWxpemUgdGhlIGNvdW50ZXIuICovCisJCXBlcl9jcHUocmN1X2R5bnRpY2tfZHJhaW4sIGNwdSkgPSBSQ1VfTkVFRFNfQ1BVX0ZMVVNIRVM7CisJfSBlbHNlIGlmICgtLXBlcl9jcHUocmN1X2R5bnRpY2tfZHJhaW4sIGNwdSkgPD0gMCkgeworCQkvKiBXZSBoYXZlIGhpdCB0aGUgbGltaXQsIHNvIHRpbWUgdG8gZ2l2ZSB1cC4gKi8KKwkJcGVyX2NwdShyY3VfZHludGlja19ob2xkb2ZmLCBjcHUpID0gamlmZmllczsKKwkJcmV0dXJuIHJjdV9uZWVkc19jcHVfcXVpY2tfY2hlY2soY3B1KTsKKwl9CisKKwkvKiBEbyBvbmUgc3RlcCBwdXNoaW5nIHJlbWFpbmluZyBSQ1UgY2FsbGJhY2tzIHRocm91Z2guICovCisJaWYgKHBlcl9jcHUocmN1X3NjaGVkX2RhdGEsIGNwdSkubnh0bGlzdCkgeworCQlyY3Vfc2NoZWRfcXMoY3B1KTsKKwkJZm9yY2VfcXVpZXNjZW50X3N0YXRlKCZyY3Vfc2NoZWRfc3RhdGUsIDApOworCQljID0gYyB8fCBwZXJfY3B1KHJjdV9zY2hlZF9kYXRhLCBjcHUpLm54dGxpc3Q7CisJfQorCWlmIChwZXJfY3B1KHJjdV9iaF9kYXRhLCBjcHUpLm54dGxpc3QpIHsKKwkJcmN1X2JoX3FzKGNwdSk7CisJCWZvcmNlX3F1aWVzY2VudF9zdGF0ZSgmcmN1X2JoX3N0YXRlLCAwKTsKKwkJYyA9IGMgfHwgcGVyX2NwdShyY3VfYmhfZGF0YSwgY3B1KS5ueHRsaXN0OworCX0KKworCS8qIElmIFJDVSBjYWxsYmFja3MgYXJlIHN0aWxsIHBlbmRpbmcsIFJDVSBzdGlsbCBuZWVkcyB0aGlzIENQVS4gKi8KKwlpZiAoYykgeworCQlyYWlzZV9zb2Z0aXJxKFJDVV9TT0ZUSVJRKTsKKwkJcGVyX2NwdShyY3VfZHludGlja19ob2xkb2ZmLCBjcHUpID0gamlmZmllczsKKwl9CisJcmV0dXJuIGM7Cit9CisKKy8qCisgKiBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBjb250aW51ZSBhIGNhbGxiYWNrLWZsdXNoIG9wZXJhdGlvbnMgdG8KKyAqIGFsbG93IHRoZSBsYXN0IENQVSB0byBlbnRlciBkeW50aWNrLWlkbGUgbW9kZS4KKyAqLworc3RhdGljIHZvaWQgcmN1X25lZWRzX2NwdV9mbHVzaCh2b2lkKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChwZXJfY3B1KHJjdV9keW50aWNrX2RyYWluLCBjcHUpIDw9IDApCisJCXJldHVybjsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJKHZvaWQpcmN1X25lZWRzX2NwdShjcHUpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworI2VuZGlmIC8qICNlbHNlICNpZiAhZGVmaW5lZChDT05GSUdfUkNVX0ZBU1RfTk9fSFopICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZV90cmFjZS5jIGIva2VybmVsL3JjdXRyZWVfdHJhY2UuYwppbmRleCA5ZDJjODg0Li5kNDVkYjJlIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZV90cmFjZS5jCisrKyBiL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMKQEAgLTUwLDcgKzUwLDcgQEAKIHsKIAlpZiAoIXJkcC0+YmVlbm9ubGluZSkKIAkJcmV0dXJuOwotCXNlcV9wcmludGYobSwgIiUzZCVjYz0lbGQgZz0lbGQgcHE9JWQgcHFjPSVsZCBxcD0lZCIsCisJc2VxX3ByaW50ZihtLCAiJTNkJWNjPSVsdSBnPSVsdSBwcT0lZCBwcWM9JWx1IHFwPSVkIiwKIAkJICAgcmRwLT5jcHUsCiAJCSAgIGNwdV9pc19vZmZsaW5lKHJkcC0+Y3B1KSA/ICchJyA6ICcgJywKIAkJICAgcmRwLT5jb21wbGV0ZWQsIHJkcC0+Z3BudW0sCkBAIC0xMDUsNyArMTA1LDcgQEAKIHsKIAlpZiAoIXJkcC0+YmVlbm9ubGluZSkKIAkJcmV0dXJuOwotCXNlcV9wcmludGYobSwgIiVkLCVzLCVsZCwlbGQsJWQsJWxkLCVkIiwKKwlzZXFfcHJpbnRmKG0sICIlZCwlcywlbHUsJWx1LCVkLCVsdSwlZCIsCiAJCSAgIHJkcC0+Y3B1LAogCQkgICBjcHVfaXNfb2ZmbGluZShyZHAtPmNwdSkgPyAiXCJOXCIiIDogIlwiWVwiIiwKIAkJICAgcmRwLT5jb21wbGV0ZWQsIHJkcC0+Z3BudW0sCkBAIC0xNTUsMTMgKzE1NSwxMyBAQAogCiBzdGF0aWMgdm9pZCBwcmludF9vbmVfcmN1X3N0YXRlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQogewotCWxvbmcgZ3BudW07CisJdW5zaWduZWQgbG9uZyBncG51bTsKIAlpbnQgbGV2ZWwgPSAwOwogCWludCBwaGFzZTsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKIAogCWdwbnVtID0gcnNwLT5ncG51bTsKLQlzZXFfcHJpbnRmKG0sICJjPSVsZCBnPSVsZCBzPSVkIGpmcT0lbGQgaj0leCAiCisJc2VxX3ByaW50ZihtLCAiYz0lbHUgZz0lbHUgcz0lZCBqZnE9JWxkIGo9JXggIgogCQkgICAgICAibmZxcz0lbHUvbmZxc25nPSVsdSglbHUpIGZxbGg9JWx1IG9xbGVuPSVsZFxuIiwKIAkJICAgcnNwLT5jb21wbGV0ZWQsIGdwbnVtLCByc3AtPnNpZ25hbGVkLAogCQkgICAobG9uZykocnNwLT5qaWZmaWVzX2ZvcmNlX3FzIC0gamlmZmllcyksCkBAIC0yMTUsMTIgKzIxNSwxMiBAQAogc3RhdGljIGludCBzaG93X3JjdWdwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogewogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVCi0Jc2VxX3ByaW50ZihtLCAicmN1X3ByZWVtcHQ6IGNvbXBsZXRlZD0lbGQgIGdwbnVtPSVsZFxuIiwKKwlzZXFfcHJpbnRmKG0sICJyY3VfcHJlZW1wdDogY29tcGxldGVkPSVsZCAgZ3BudW09JWx1XG4iLAogCQkgICByY3VfcHJlZW1wdF9zdGF0ZS5jb21wbGV0ZWQsIHJjdV9wcmVlbXB0X3N0YXRlLmdwbnVtKTsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KLQlzZXFfcHJpbnRmKG0sICJyY3Vfc2NoZWQ6IGNvbXBsZXRlZD0lbGQgIGdwbnVtPSVsZFxuIiwKKwlzZXFfcHJpbnRmKG0sICJyY3Vfc2NoZWQ6IGNvbXBsZXRlZD0lbGQgIGdwbnVtPSVsdVxuIiwKIAkJICAgcmN1X3NjaGVkX3N0YXRlLmNvbXBsZXRlZCwgcmN1X3NjaGVkX3N0YXRlLmdwbnVtKTsKLQlzZXFfcHJpbnRmKG0sICJyY3VfYmg6IGNvbXBsZXRlZD0lbGQgIGdwbnVtPSVsZFxuIiwKKwlzZXFfcHJpbnRmKG0sICJyY3VfYmg6IGNvbXBsZXRlZD0lbGQgIGdwbnVtPSVsdVxuIiwKIAkJICAgcmN1X2JoX3N0YXRlLmNvbXBsZXRlZCwgcmN1X2JoX3N0YXRlLmdwbnVtKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9yZXNvdXJjZS5jIGIva2VybmVsL3Jlc291cmNlLmMKaW5kZXggYWY5NmMxZS4uNGU5ZDg3ZiAxMDA2NDQKLS0tIGEva2VybmVsL3Jlc291cmNlLmMKKysrIGIva2VybmVsL3Jlc291cmNlLmMKQEAgLTE4OCw2ICsxODgsMzYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIHZvaWQgX19yZWxlYXNlX2NoaWxkX3Jlc291cmNlcyhzdHJ1Y3QgcmVzb3VyY2UgKnIpCit7CisJc3RydWN0IHJlc291cmNlICp0bXAsICpwOworCXJlc291cmNlX3NpemVfdCBzaXplOworCisJcCA9IHItPmNoaWxkOworCXItPmNoaWxkID0gTlVMTDsKKwl3aGlsZSAocCkgeworCQl0bXAgPSBwOworCQlwID0gcC0+c2libGluZzsKKworCQl0bXAtPnBhcmVudCA9IE5VTEw7CisJCXRtcC0+c2libGluZyA9IE5VTEw7CisJCV9fcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXModG1wKTsKKworCQlwcmludGsoS0VSTl9ERUJVRyAicmVsZWFzZSBjaGlsZCByZXNvdXJjZSAlcFJcbiIsIHRtcCk7CisJCS8qIG5lZWQgdG8gcmVzdG9yZSBzaXplLCBhbmQga2VlcCBmbGFncyAqLworCQlzaXplID0gcmVzb3VyY2Vfc2l6ZSh0bXApOworCQl0bXAtPnN0YXJ0ID0gMDsKKwkJdG1wLT5lbmQgPSBzaXplIC0gMTsKKwl9Cit9CisKK3ZvaWQgcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpyKQoreworCXdyaXRlX2xvY2soJnJlc291cmNlX2xvY2spOworCV9fcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXMocik7CisJd3JpdGVfdW5sb2NrKCZyZXNvdXJjZV9sb2NrKTsKK30KKwogLyoqCiAgKiByZXF1ZXN0X3Jlc291cmNlIC0gcmVxdWVzdCBhbmQgcmVzZXJ2ZSBhbiBJL08gb3IgbWVtb3J5IHJlc291cmNlCiAgKiBAcm9vdDogcm9vdCByZXNvdXJjZSBkZXNjcmlwdG9yCkBAIC0yOTcsMTQgKzMyNywyOSBAQAogCiAjZW5kaWYKIAorc3RhdGljIGludCBfX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgdm9pZCAqYXJnKQoreworCXJldHVybiAxOworfQorLyoKKyAqIFRoaXMgZ2VuZXJpYyBwYWdlX2lzX3JhbSgpIHJldHVybnMgdHJ1ZSBpZiBzcGVjaWZpZWQgYWRkcmVzcyBpcworICogcmVnaXN0ZXJlZCBhcyAiU3lzdGVtIFJBTSIgaW4gaW9tZW1fcmVzb3VyY2UgbGlzdC4KKyAqLworaW50IF9fd2VhayBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlyZXR1cm4gd2Fsa19zeXN0ZW1fcmFtX3JhbmdlKHBmbiwgMSwgTlVMTCwgX19pc19yYW0pID09IDE7Cit9CisKIC8qCiAgKiBGaW5kIGVtcHR5IHNsb3QgaW4gdGhlIHJlc291cmNlIHRyZWUgZ2l2ZW4gcmFuZ2UgYW5kIGFsaWdubWVudC4KICAqLwogc3RhdGljIGludCBmaW5kX3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcm9vdCwgc3RydWN0IHJlc291cmNlICpuZXcsCiAJCQkgcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBtaW4sCiAJCQkgcmVzb3VyY2Vfc2l6ZV90IG1heCwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduLAotCQkJIHZvaWQgKCphbGlnbmYpKHZvaWQgKiwgc3RydWN0IHJlc291cmNlICosCi0JCQkJCXJlc291cmNlX3NpemVfdCwgcmVzb3VyY2Vfc2l6ZV90KSwKKwkJCSByZXNvdXJjZV9zaXplX3QgKCphbGlnbmYpKHZvaWQgKiwKKwkJCQkJCSAgIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqLAorCQkJCQkJICAgcmVzb3VyY2Vfc2l6ZV90LAorCQkJCQkJICAgcmVzb3VyY2Vfc2l6ZV90KSwKIAkJCSB2b2lkICphbGlnbmZfZGF0YSkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnRoaXMgPSByb290LT5jaGlsZDsKQEAgLTMzMCw3ICszNzUsNyBAQAogCQkJdG1wLmVuZCA9IG1heDsKIAkJdG1wLnN0YXJ0ID0gQUxJR04odG1wLnN0YXJ0LCBhbGlnbik7CiAJCWlmIChhbGlnbmYpCi0JCQlhbGlnbmYoYWxpZ25mX2RhdGEsICZ0bXAsIHNpemUsIGFsaWduKTsKKwkJCXRtcC5zdGFydCA9IGFsaWduZihhbGlnbmZfZGF0YSwgJnRtcCwgc2l6ZSwgYWxpZ24pOwogCQlpZiAodG1wLnN0YXJ0IDwgdG1wLmVuZCAmJiB0bXAuZW5kIC0gdG1wLnN0YXJ0ID49IHNpemUgLSAxKSB7CiAJCQluZXctPnN0YXJ0ID0gdG1wLnN0YXJ0OwogCQkJbmV3LT5lbmQgPSB0bXAuc3RhcnQgKyBzaXplIC0gMTsKQEAgLTM1OCw4ICs0MDMsMTAgQEAKIGludCBhbGxvY2F0ZV9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsIHN0cnVjdCByZXNvdXJjZSAqbmV3LAogCQkgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IG1pbiwKIAkJICAgICAgcmVzb3VyY2Vfc2l6ZV90IG1heCwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduLAotCQkgICAgICB2b2lkICgqYWxpZ25mKSh2b2lkICosIHN0cnVjdCByZXNvdXJjZSAqLAotCQkJCSAgICAgcmVzb3VyY2Vfc2l6ZV90LCByZXNvdXJjZV9zaXplX3QpLAorCQkgICAgICByZXNvdXJjZV9zaXplX3QgKCphbGlnbmYpKHZvaWQgKiwKKwkJCQkJCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqLAorCQkJCQkJcmVzb3VyY2Vfc2l6ZV90LAorCQkJCQkJcmVzb3VyY2Vfc2l6ZV90KSwKIAkJICAgICAgdm9pZCAqYWxpZ25mX2RhdGEpCiB7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggM2E4ZmIzMC4uNmEyMTJjOSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTIzMyw3ICsyMzMsNyBAQAogICovCiBzdGF0aWMgREVGSU5FX01VVEVYKHNjaGVkX2RvbWFpbnNfbXV0ZXgpOwogCi0jaWZkZWYgQ09ORklHX0dST1VQX1NDSEVECisjaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRAogCiAjaW5jbHVkZSA8bGludXgvY2dyb3VwLmg+CiAKQEAgLTI0MywxMyArMjQzLDcgQEAKIAogLyogdGFzayBncm91cCByZWxhdGVkIGluZm9ybWF0aW9uICovCiBzdHJ1Y3QgdGFza19ncm91cCB7Ci0jaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRAogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGNzczsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQl1aWRfdCB1aWQ7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAJLyogc2NoZWR1bGFibGUgZW50aXRpZXMgb2YgdGhpcyBncm91cCBvbiBlYWNoIGNwdSAqLwpAQCAtMjc0LDM1ICsyNjgsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgY2hpbGRyZW47CiB9OwogCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQotLyogSGVscGVyIGZ1bmN0aW9uIHRvIHBhc3MgdWlkIGluZm9ybWF0aW9uIHRvIGNyZWF0ZV9zY2hlZF91c2VyKCkgKi8KLXZvaWQgc2V0X3RnX3VpZChzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpCi17Ci0JdXNlci0+dGctPnVpZCA9IHVzZXItPnVpZDsKLX0KLQotLyoKLSAqIFJvb3QgdGFzayBncm91cC4KLSAqCUV2ZXJ5IFVJRCB0YXNrIGdyb3VwIChpbmNsdWRpbmcgaW5pdF90YXNrX2dyb3VwIGFrYSBVSUQtMCkgd2lsbAotICoJYmUgYSBjaGlsZCB0byB0aGlzIGdyb3VwLgotICovCi1zdHJ1Y3QgdGFza19ncm91cCByb290X3Rhc2tfZ3JvdXA7Ci0KLSNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAotLyogRGVmYXVsdCB0YXNrIGdyb3VwJ3Mgc2NoZWQgZW50aXR5IG9uIGVhY2ggY3B1ICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNjaGVkX2VudGl0eSwgaW5pdF9zY2hlZF9lbnRpdHkpOwotLyogRGVmYXVsdCB0YXNrIGdyb3VwJ3MgY2ZzX3JxIG9uIGVhY2ggY3B1ICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNmc19ycSwgaW5pdF90Z19jZnNfcnEpOwotI2VuZGlmIC8qIENPTkZJR19GQUlSX0dST1VQX1NDSEVEICovCi0KLSNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5LCBpbml0X3NjaGVkX3J0X2VudGl0eSk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IHJ0X3JxLCBpbml0X3J0X3JxX3Zhcik7Ci0jZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCi0jZWxzZSAvKiAhQ09ORklHX1VTRVJfU0NIRUQgKi8KICNkZWZpbmUgcm9vdF90YXNrX2dyb3VwIGluaXRfdGFza19ncm91cAotI2VuZGlmIC8qIENPTkZJR19VU0VSX1NDSEVEICovCiAKIC8qIHRhc2tfZ3JvdXBfbG9jayBzZXJpYWxpemVzIGFkZC9yZW1vdmUgb2YgdGFzayBncm91cHMgYW5kIGFsc28gY2hhbmdlcyB0bwogICogYSB0YXNrIGdyb3VwJ3MgY3B1IHNoYXJlcy4KQEAgLTMxOCwxMSArMjg0LDcgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLSMgZGVmaW5lIElOSVRfVEFTS19HUk9VUF9MT0FECSgyKk5JQ0VfMF9MT0FEKQotI2Vsc2UgLyogIUNPTkZJR19VU0VSX1NDSEVEICovCiAjIGRlZmluZSBJTklUX1RBU0tfR1JPVVBfTE9BRAlOSUNFXzBfTE9BRAotI2VuZGlmIC8qIENPTkZJR19VU0VSX1NDSEVEICovCiAKIC8qCiAgKiBBIHdlaWdodCBvZiAwIG9yIDEgY2FuIGNhdXNlIGFyaXRobWV0aWNzIHByb2JsZW1zLgpAQCAtMzQ4LDExICszMTAsNyBAQAogewogCXN0cnVjdCB0YXNrX2dyb3VwICp0ZzsKIAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0JcmN1X3JlYWRfbG9jaygpOwotCXRnID0gX190YXNrX2NyZWQocCktPnVzZXItPnRnOwotCXJjdV9yZWFkX3VubG9jaygpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfQ0dST1VQX1NDSEVEKQorI2lmZGVmIENPTkZJR19DR1JPVVBfU0NIRUQKIAl0ZyA9IGNvbnRhaW5lcl9vZih0YXNrX3N1YnN5c19zdGF0ZShwLCBjcHVfY2dyb3VwX3N1YnN5c19pZCksCiAJCQkJc3RydWN0IHRhc2tfZ3JvdXAsIGNzcyk7CiAjZWxzZQpAQCAtMzgzLDcgKzM0MSw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLSNlbmRpZgkvKiBDT05GSUdfR1JPVVBfU0NIRUQgKi8KKyNlbmRpZgkvKiBDT05GSUdfQ0dST1VQX1NDSEVEICovCiAKIC8qIENGUy1yZWxhdGVkIGZpZWxkcyBpbiBhIHJ1bnF1ZXVlICovCiBzdHJ1Y3QgY2ZzX3JxIHsKQEAgLTQ3OCw3ICs0MzYsNiBAQAogCXN0cnVjdCBycSAqcnE7CiAJc3RydWN0IGxpc3RfaGVhZCBsZWFmX3J0X3JxX2xpc3Q7CiAJc3RydWN0IHRhc2tfZ3JvdXAgKnRnOwotCXN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlOwogI2VuZGlmCiB9OwogCkBAIC02NDUsNiArNjAyLDExIEBACiAjZW5kaWYKIH0KIAorI2RlZmluZSByY3VfZGVyZWZlcmVuY2VfY2hlY2tfc2NoZWRfZG9tYWluKHApIFwKKwlyY3VfZGVyZWZlcmVuY2VfY2hlY2soKHApLCBcCisJCQkgICAgICByY3VfcmVhZF9sb2NrX3NjaGVkX2hlbGQoKSB8fCBcCisJCQkgICAgICBsb2NrZGVwX2lzX2hlbGQoJnNjaGVkX2RvbWFpbnNfbXV0ZXgpKQorCiAvKgogICogVGhlIGRvbWFpbiB0cmVlIChycS0+c2QpIGlzIHByb3RlY3RlZCBieSBSQ1UncyBxdWllc2NlbnQgc3RhdGUgdHJhbnNpdGlvbi4KICAqIFNlZSBkZXRhY2hfZGVzdHJveV9kb21haW5zOiBzeW5jaHJvbml6ZV9zY2hlZCBmb3IgZGV0YWlscy4KQEAgLTY1Myw3ICs2MTUsNyBAQAogICogcHJlZW1wdC1kaXNhYmxlZCBzZWN0aW9ucy4KICAqLwogI2RlZmluZSBmb3JfZWFjaF9kb21haW4oY3B1LCBfX3NkKSBcCi0JZm9yIChfX3NkID0gcmN1X2RlcmVmZXJlbmNlKGNwdV9ycShjcHUpLT5zZCk7IF9fc2Q7IF9fc2QgPSBfX3NkLT5wYXJlbnQpCisJZm9yIChfX3NkID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrX3NjaGVkX2RvbWFpbihjcHVfcnEoY3B1KS0+c2QpOyBfX3NkOyBfX3NkID0gX19zZC0+cGFyZW50KQogCiAjZGVmaW5lIGNwdV9ycShjcHUpCQkoJnBlcl9jcHUocnVucXVldWVzLCAoY3B1KSkpCiAjZGVmaW5lIHRoaXNfcnEoKQkJKCZfX2dldF9jcHVfdmFyKHJ1bnF1ZXVlcykpCkBAIC05NDEsMTYgKzkwMywzMyBAQAogI2VuZGlmIC8qIF9fQVJDSF9XQU5UX1VOTE9DS0VEX0NUWFNXICovCiAKIC8qCisgKiBDaGVjayB3aGV0aGVyIHRoZSB0YXNrIGlzIHdha2luZywgd2UgdXNlIHRoaXMgdG8gc3luY2hyb25pemUgYWdhaW5zdAorICogdHR3dSgpIHNvIHRoYXQgdGFza19jcHUoKSByZXBvcnRzIGEgc3RhYmxlIG51bWJlci4KKyAqCisgKiBXZSBuZWVkIHRvIG1ha2UgYW4gZXhjZXB0aW9uIGZvciBQRl9TVEFSVElORyB0YXNrcyBiZWNhdXNlIHRoZSBmb3JrCisgKiBwYXRoIG1pZ2h0IHJlcXVpcmUgdGFza19ycV9sb2NrKCkgdG8gd29yaywgZWcuIGl0IGNhbiBjYWxsCisgKiBzZXRfY3B1c19hbGxvd2VkX3B0cigpIGZyb20gdGhlIGNwdXNldCBjbG9uZV9ucyBjb2RlLgorICovCitzdGF0aWMgaW5saW5lIGludCB0YXNrX2lzX3dha2luZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJcmV0dXJuIHVubGlrZWx5KChwLT5zdGF0ZSA9PSBUQVNLX1dBS0lORykgJiYgIShwLT5mbGFncyAmIFBGX1NUQVJUSU5HKSk7Cit9CisKKy8qCiAgKiBfX3Rhc2tfcnFfbG9jayAtIGxvY2sgdGhlIHJ1bnF1ZXVlIGEgZ2l2ZW4gdGFzayByZXNpZGVzIG9uLgogICogTXVzdCBiZSBjYWxsZWQgaW50ZXJydXB0cyBkaXNhYmxlZC4KICAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKl9fdGFza19ycV9sb2NrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAlfX2FjcXVpcmVzKHJxLT5sb2NrKQogeworCXN0cnVjdCBycSAqcnE7CisKIAlmb3IgKDs7KSB7Ci0JCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHApOworCQl3aGlsZSAodGFza19pc193YWtpbmcocCkpCisJCQljcHVfcmVsYXgoKTsKKwkJcnEgPSB0YXNrX3JxKHApOwogCQlyYXdfc3Bpbl9sb2NrKCZycS0+bG9jayk7Ci0JCWlmIChsaWtlbHkocnEgPT0gdGFza19ycShwKSkpCisJCWlmIChsaWtlbHkocnEgPT0gdGFza19ycShwKSAmJiAhdGFza19pc193YWtpbmcocCkpKQogCQkJcmV0dXJuIHJxOwogCQlyYXdfc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKIAl9CkBAIC05NjcsMTAgKzk0NiwxMiBAQAogCXN0cnVjdCBycSAqcnE7CiAKIAlmb3IgKDs7KSB7CisJCXdoaWxlICh0YXNrX2lzX3dha2luZyhwKSkKKwkJCWNwdV9yZWxheCgpOwogCQlsb2NhbF9pcnFfc2F2ZSgqZmxhZ3MpOwogCQlycSA9IHRhc2tfcnEocCk7CiAJCXJhd19zcGluX2xvY2soJnJxLT5sb2NrKTsKLQkJaWYgKGxpa2VseShycSA9PSB0YXNrX3JxKHApKSkKKwkJaWYgKGxpa2VseShycSA9PSB0YXNrX3JxKHApICYmICF0YXNrX2lzX3dha2luZyhwKSkpCiAJCQlyZXR1cm4gcnE7CiAJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgKmZsYWdzKTsKIAl9CkBAIC0xMzkwLDMyICsxMzcxLDYgQEAKICAvKiAgMTUgKi8gMTE5MzA0NjQ3LCAxNDgxMDIzMjAsIDE4NjczNzcwOCwgMjM4NjA5Mjk0LCAyODYzMzExNTMsCiB9OwogCi1zdGF0aWMgdm9pZCBhY3RpdmF0ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCk7Ci0KLS8qCi0gKiBydW5xdWV1ZSBpdGVyYXRvciwgdG8gc3VwcG9ydCBTTVAgbG9hZC1iYWxhbmNpbmcgYmV0d2VlbiBkaWZmZXJlbnQKLSAqIHNjaGVkdWxpbmcgY2xhc3Nlcywgd2l0aG91dCBoYXZpbmcgdG8gZXhwb3NlIHRoZWlyIGludGVybmFsIGRhdGEKLSAqIHN0cnVjdHVyZXMgdG8gdGhlIGxvYWQtYmFsYW5jaW5nIHByb3BlcjoKLSAqLwotc3RydWN0IHJxX2l0ZXJhdG9yIHsKLQl2b2lkICphcmc7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICooKnN0YXJ0KSh2b2lkICopOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqKCpuZXh0KSh2b2lkICopOwotfTsKLQotI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyB1bnNpZ25lZCBsb25nCi1iYWxhbmNlX3Rhc2tzKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JICAgICAgdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKLQkgICAgICBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwgaW50ICphbGxfcGlubmVkLAotCSAgICAgIGludCAqdGhpc19iZXN0X3ByaW8sIHN0cnVjdCBycV9pdGVyYXRvciAqaXRlcmF0b3IpOwotCi1zdGF0aWMgaW50Ci1pdGVyX21vdmVfb25lX3Rhc2soc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKLQkJICAgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkgICBzdHJ1Y3QgcnFfaXRlcmF0b3IgKml0ZXJhdG9yKTsKLSNlbmRpZgotCiAvKiBUaW1lIHNwZW50IGJ5IHRoZSB0YXNrcyBvZiB0aGUgY3B1IGFjY291bnRpbmcgZ3JvdXAgZXhlY3V0aW5nIGluIC4uLiAqLwogZW51bSBjcHVhY2N0X3N0YXRfaW5kZXggewogCUNQVUFDQ1RfU1RBVF9VU0VSLAkvKiAuLi4gdXNlciBtb2RlICovCkBAIC0xNTMxLDcgKzE0ODYsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNjaGVkX2dyb3VwICpncm91cF9vZihpbnQgY3B1KQogewotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gcmN1X2RlcmVmZXJlbmNlKGNwdV9ycShjcHUpLT5zZCk7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSByY3VfZGVyZWZlcmVuY2Vfc2NoZWQoY3B1X3JxKGNwdSktPnNkKTsKIAogCWlmICghc2QpCiAJCXJldHVybiBOVUxMOwpAQCAtMTcwMSwxNiArMTY1Niw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfc2hhcmVzX2xvY2tlZChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkKLXsKLQlpZiAocm9vdF90YXNrX2dyb3VwX2VtcHR5KCkpCi0JCXJldHVybjsKLQotCXJhd19zcGluX3VubG9jaygmcnEtPmxvY2spOwotCXVwZGF0ZV9zaGFyZXMoc2QpOwotCXJhd19zcGluX2xvY2soJnJxLT5sb2NrKTsKLX0KLQogc3RhdGljIHZvaWQgdXBkYXRlX2hfbG9hZChsb25nIGNwdSkKIHsKIAlpZiAocm9vdF90YXNrX2dyb3VwX2VtcHR5KCkpCkBAIC0xNzI1LDEwICsxNjcwLDYgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zaGFyZXNfbG9ja2VkKHN0cnVjdCBycSAqcnEsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKQotewotfQotCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUkVFTVBUCkBAIC0xODA1LDYgKzE3NDYsNTEgQEAKIAlyYXdfc3Bpbl91bmxvY2soJmJ1c2llc3QtPmxvY2spOwogCWxvY2tfc2V0X3N1YmNsYXNzKCZ0aGlzX3JxLT5sb2NrLmRlcF9tYXAsIDAsIF9SRVRfSVBfKTsKIH0KKworLyoKKyAqIGRvdWJsZV9ycV9sb2NrIC0gc2FmZWx5IGxvY2sgdHdvIHJ1bnF1ZXVlcworICoKKyAqIE5vdGUgdGhpcyBkb2VzIG5vdCBkaXNhYmxlIGludGVycnVwdHMgbGlrZSB0YXNrX3JxX2xvY2ssCisgKiB5b3UgbmVlZCB0byBkbyBzbyBtYW51YWxseSBiZWZvcmUgY2FsbGluZy4KKyAqLworc3RhdGljIHZvaWQgZG91YmxlX3JxX2xvY2soc3RydWN0IHJxICpycTEsIHN0cnVjdCBycSAqcnEyKQorCV9fYWNxdWlyZXMocnExLT5sb2NrKQorCV9fYWNxdWlyZXMocnEyLT5sb2NrKQoreworCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKKwlpZiAocnExID09IHJxMikgeworCQlyYXdfc3Bpbl9sb2NrKCZycTEtPmxvY2spOworCQlfX2FjcXVpcmUocnEyLT5sb2NrKTsJLyogRmFrZSBpdCBvdXQgOykgKi8KKwl9IGVsc2UgeworCQlpZiAocnExIDwgcnEyKSB7CisJCQlyYXdfc3Bpbl9sb2NrKCZycTEtPmxvY2spOworCQkJcmF3X3NwaW5fbG9ja19uZXN0ZWQoJnJxMi0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCQl9IGVsc2UgeworCQkJcmF3X3NwaW5fbG9jaygmcnEyLT5sb2NrKTsKKwkJCXJhd19zcGluX2xvY2tfbmVzdGVkKCZycTEtPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKKwkJfQorCX0KKwl1cGRhdGVfcnFfY2xvY2socnExKTsKKwl1cGRhdGVfcnFfY2xvY2socnEyKTsKK30KKworLyoKKyAqIGRvdWJsZV9ycV91bmxvY2sgLSBzYWZlbHkgdW5sb2NrIHR3byBydW5xdWV1ZXMKKyAqCisgKiBOb3RlIHRoaXMgZG9lcyBub3QgcmVzdG9yZSBpbnRlcnJ1cHRzIGxpa2UgdGFza19ycV91bmxvY2ssCisgKiB5b3UgbmVlZCB0byBkbyBzbyBtYW51YWxseSBhZnRlciBjYWxsaW5nLgorICovCitzdGF0aWMgdm9pZCBkb3VibGVfcnFfdW5sb2NrKHN0cnVjdCBycSAqcnExLCBzdHJ1Y3QgcnEgKnJxMikKKwlfX3JlbGVhc2VzKHJxMS0+bG9jaykKKwlfX3JlbGVhc2VzKHJxMi0+bG9jaykKK3sKKwlyYXdfc3Bpbl91bmxvY2soJnJxMS0+bG9jayk7CisJaWYgKHJxMSAhPSBycTIpCisJCXJhd19zcGluX3VubG9jaygmcnEyLT5sb2NrKTsKKwllbHNlCisJCV9fcmVsZWFzZShycTItPmxvY2spOworfQorCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECkBAIC0xODM0LDE4ICsxODIwLDE0IEBACiAjZW5kaWYKIH0KIAotI2luY2x1ZGUgInNjaGVkX3N0YXRzLmgiCi0jaW5jbHVkZSAic2NoZWRfaWRsZXRhc2suYyIKLSNpbmNsdWRlICJzY2hlZF9mYWlyLmMiCi0jaW5jbHVkZSAic2NoZWRfcnQuYyIKLSNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKLSMgaW5jbHVkZSAic2NoZWRfZGVidWcuYyIKLSNlbmRpZgorc3RhdGljIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyBydF9zY2hlZF9jbGFzczsKIAogI2RlZmluZSBzY2hlZF9jbGFzc19oaWdoZXN0ICgmcnRfc2NoZWRfY2xhc3MpCiAjZGVmaW5lIGZvcl9lYWNoX2NsYXNzKGNsYXNzKSBcCiAgICBmb3IgKGNsYXNzID0gc2NoZWRfY2xhc3NfaGlnaGVzdDsgY2xhc3M7IGNsYXNzID0gY2xhc3MtPm5leHQpCiAKKyNpbmNsdWRlICJzY2hlZF9zdGF0cy5oIgorCiBzdGF0aWMgdm9pZCBpbmNfbnJfcnVubmluZyhzdHJ1Y3QgcnEgKnJxKQogewogCXJxLT5ucl9ydW5uaW5nKys7CkBAIC0xODgzLDEzICsxODY1LDE0IEBACiAJKmF2ZyArPSBkaWZmID4+IDM7CiB9CiAKLXN0YXRpYyB2b2lkIGVucXVldWVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXApCitzdGF0aWMgdm9pZAorZW5xdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCwgYm9vbCBoZWFkKQogewogCWlmICh3YWtldXApCiAJCXAtPnNlLnN0YXJ0X3J1bnRpbWUgPSBwLT5zZS5zdW1fZXhlY19ydW50aW1lOwogCiAJc2NoZWRfaW5mb19xdWV1ZWQocCk7Ci0JcC0+c2NoZWRfY2xhc3MtPmVucXVldWVfdGFzayhycSwgcCwgd2FrZXVwKTsKKwlwLT5zY2hlZF9jbGFzcy0+ZW5xdWV1ZV90YXNrKHJxLCBwLCB3YWtldXAsIGhlYWQpOwogCXAtPnNlLm9uX3JxID0gMTsKIH0KIApAQCAtMTkxMiw2ICsxODk1LDM3IEBACiB9CiAKIC8qCisgKiBhY3RpdmF0ZV90YXNrIC0gbW92ZSBhIHRhc2sgdG8gdGhlIHJ1bnF1ZXVlLgorICovCitzdGF0aWMgdm9pZCBhY3RpdmF0ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCkKK3sKKwlpZiAodGFza19jb250cmlidXRlc190b19sb2FkKHApKQorCQlycS0+bnJfdW5pbnRlcnJ1cHRpYmxlLS07CisKKwllbnF1ZXVlX3Rhc2socnEsIHAsIHdha2V1cCwgZmFsc2UpOworCWluY19ucl9ydW5uaW5nKHJxKTsKK30KKworLyoKKyAqIGRlYWN0aXZhdGVfdGFzayAtIHJlbW92ZSBhIHRhc2sgZnJvbSB0aGUgcnVucXVldWUuCisgKi8KK3N0YXRpYyB2b2lkIGRlYWN0aXZhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzbGVlcCkKK3sKKwlpZiAodGFza19jb250cmlidXRlc190b19sb2FkKHApKQorCQlycS0+bnJfdW5pbnRlcnJ1cHRpYmxlKys7CisKKwlkZXF1ZXVlX3Rhc2socnEsIHAsIHNsZWVwKTsKKwlkZWNfbnJfcnVubmluZyhycSk7Cit9CisKKyNpbmNsdWRlICJzY2hlZF9pZGxldGFzay5jIgorI2luY2x1ZGUgInNjaGVkX2ZhaXIuYyIKKyNpbmNsdWRlICJzY2hlZF9ydC5jIgorI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRworIyBpbmNsdWRlICJzY2hlZF9kZWJ1Zy5jIgorI2VuZGlmCisKKy8qCiAgKiBfX25vcm1hbF9wcmlvIC0gcmV0dXJuIHRoZSBwcmlvcml0eSB0aGF0IGlzIGJhc2VkIG9uIHRoZSBzdGF0aWMgcHJpbwogICovCiBzdGF0aWMgaW5saW5lIGludCBfX25vcm1hbF9wcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKQEAgLTE5NTcsMzAgKzE5NzEsNiBAQAogCXJldHVybiBwLT5wcmlvOwogfQogCi0vKgotICogYWN0aXZhdGVfdGFzayAtIG1vdmUgYSB0YXNrIHRvIHRoZSBydW5xdWV1ZS4KLSAqLwotc3RhdGljIHZvaWQgYWN0aXZhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXApCi17Ci0JaWYgKHRhc2tfY29udHJpYnV0ZXNfdG9fbG9hZChwKSkKLQkJcnEtPm5yX3VuaW50ZXJydXB0aWJsZS0tOwotCi0JZW5xdWV1ZV90YXNrKHJxLCBwLCB3YWtldXApOwotCWluY19ucl9ydW5uaW5nKHJxKTsKLX0KLQotLyoKLSAqIGRlYWN0aXZhdGVfdGFzayAtIHJlbW92ZSBhIHRhc2sgZnJvbSB0aGUgcnVucXVldWUuCi0gKi8KLXN0YXRpYyB2b2lkIGRlYWN0aXZhdGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzbGVlcCkKLXsKLQlpZiAodGFza19jb250cmlidXRlc190b19sb2FkKHApKQotCQlycS0+bnJfdW5pbnRlcnJ1cHRpYmxlKys7Ci0KLQlkZXF1ZXVlX3Rhc2socnEsIHAsIHNsZWVwKTsKLQlkZWNfbnJfcnVubmluZyhycSk7Ci19Ci0KIC8qKgogICogdGFza19jdXJyIC0gaXMgdGhpcyB0YXNrIGN1cnJlbnRseSBleGVjdXRpbmcgb24gYSBDUFU/CiAgKiBAcDogdGhlIHRhc2sgaW4gcXVlc3Rpb24uCkBAIC0yNDA4LDE0ICsyMzk4LDI3IEBACiAJX190YXNrX3JxX3VubG9jayhycSk7CiAKIAljcHUgPSBzZWxlY3RfdGFza19ycShwLCBTRF9CQUxBTkNFX1dBS0UsIHdha2VfZmxhZ3MpOwotCWlmIChjcHUgIT0gb3JpZ19jcHUpCisJaWYgKGNwdSAhPSBvcmlnX2NwdSkgeworCQkvKgorCQkgKiBTaW5jZSB3ZSBtaWdyYXRlIHRoZSB0YXNrIHdpdGhvdXQgaG9sZGluZyBhbnkgcnEtPmxvY2ssCisJCSAqIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRhc2tfcnFfbG9jaygpLCBzaW5jZSB0aGF0CisJCSAqIG1pZ2h0IGVuZCB1cCBsb2NraW5nIGFuIGludmFsaWQgcnEuCisJCSAqLwogCQlzZXRfdGFza19jcHUocCwgY3B1KTsKKwl9CiAKLQlycSA9IF9fdGFza19ycV9sb2NrKHApOworCXJxID0gY3B1X3JxKGNwdSk7CisJcmF3X3NwaW5fbG9jaygmcnEtPmxvY2spOwogCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAKKwkvKgorCSAqIFdlIG1pZ3JhdGVkIHRoZSB0YXNrIHdpdGhvdXQgaG9sZGluZyBlaXRoZXIgcnEtPmxvY2ssIGhvd2V2ZXIKKwkgKiBzaW5jZSB0aGUgdGFzayBpcyBub3Qgb24gdGhlIHRhc2sgbGlzdCBpdHNlbGYsIG5vYm9keSBlbHNlCisJICogd2lsbCB0cnkgYW5kIG1pZ3JhdGUgdGhlIHRhc2ssIGhlbmNlIHRoZSBycSBzaG91bGQgbWF0Y2ggdGhlCisJICogY3B1IHdlIGp1c3QgbW92ZWQgaXQgdG8uCisJICovCisJV0FSTl9PTih0YXNrX2NwdShwKSAhPSBjcHUpOwogCVdBUk5fT04ocC0+c3RhdGUgIT0gVEFTS19XQUtJTkcpOwotCWNwdSA9IHRhc2tfY3B1KHApOwogCiAjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKIAlzY2hlZHN0YXRfaW5jKHJxLCB0dHd1X2NvdW50KTsKQEAgLTI2NjMsNyArMjY2NiwxMyBAQAogCXNldF90YXNrX2NwdShwLCBjcHUpOwogI2VuZGlmCiAKLQlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOworCS8qCisJICogU2luY2UgdGhlIHRhc2sgaXMgbm90IG9uIHRoZSBycSBhbmQgd2Ugc3RpbGwgaGF2ZSBUQVNLX1dBS0lORyBzZXQKKwkgKiBub2JvZHkgZWxzZSB3aWxsIG1pZ3JhdGUgdGhpcyB0YXNrLgorCSAqLworCXJxID0gY3B1X3JxKGNwdSk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOworCiAJQlVHX09OKHAtPnN0YXRlICE9IFRBU0tfV0FLSU5HKTsKIAlwLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKIAl1cGRhdGVfcnFfY2xvY2socnEpOwpAQCAtMjc5NCw3ICsyODAzLDEzIEBACiAJICovCiAJcHJldl9zdGF0ZSA9IHByZXYtPnN0YXRlOwogCWZpbmlzaF9hcmNoX3N3aXRjaChwcmV2KTsKLQlwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oY3VycmVudCwgY3B1X29mKHJxKSk7CisjaWZkZWYgX19BUkNIX1dBTlRfSU5URVJSVVBUU19PTl9DVFhTVworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisjZW5kaWYgLyogX19BUkNIX1dBTlRfSU5URVJSVVBUU19PTl9DVFhTVyAqLworCXBlcmZfZXZlbnRfdGFza19zY2hlZF9pbihjdXJyZW50KTsKKyNpZmRlZiBfX0FSQ0hfV0FOVF9JTlRFUlJVUFRTX09OX0NUWFNXCisJbG9jYWxfaXJxX2VuYWJsZSgpOworI2VuZGlmIC8qIF9fQVJDSF9XQU5UX0lOVEVSUlVQVFNfT05fQ1RYU1cgKi8KIAlmaW5pc2hfbG9ja19zd2l0Y2gocnEsIHByZXYpOwogCiAJZmlyZV9zY2hlZF9pbl9wcmVlbXB0X25vdGlmaWVycyhjdXJyZW50KTsKQEAgLTMwOTksNTAgKzMxMTQsNiBAQAogI2lmZGVmIENPTkZJR19TTVAKIAogLyoKLSAqIGRvdWJsZV9ycV9sb2NrIC0gc2FmZWx5IGxvY2sgdHdvIHJ1bnF1ZXVlcwotICoKLSAqIE5vdGUgdGhpcyBkb2VzIG5vdCBkaXNhYmxlIGludGVycnVwdHMgbGlrZSB0YXNrX3JxX2xvY2ssCi0gKiB5b3UgbmVlZCB0byBkbyBzbyBtYW51YWxseSBiZWZvcmUgY2FsbGluZy4KLSAqLwotc3RhdGljIHZvaWQgZG91YmxlX3JxX2xvY2soc3RydWN0IHJxICpycTEsIHN0cnVjdCBycSAqcnEyKQotCV9fYWNxdWlyZXMocnExLT5sb2NrKQotCV9fYWNxdWlyZXMocnEyLT5sb2NrKQotewotCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKLQlpZiAocnExID09IHJxMikgewotCQlyYXdfc3Bpbl9sb2NrKCZycTEtPmxvY2spOwotCQlfX2FjcXVpcmUocnEyLT5sb2NrKTsJLyogRmFrZSBpdCBvdXQgOykgKi8KLQl9IGVsc2UgewotCQlpZiAocnExIDwgcnEyKSB7Ci0JCQlyYXdfc3Bpbl9sb2NrKCZycTEtPmxvY2spOwotCQkJcmF3X3NwaW5fbG9ja19uZXN0ZWQoJnJxMi0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwotCQl9IGVsc2UgewotCQkJcmF3X3NwaW5fbG9jaygmcnEyLT5sb2NrKTsKLQkJCXJhd19zcGluX2xvY2tfbmVzdGVkKCZycTEtPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKLQkJfQotCX0KLQl1cGRhdGVfcnFfY2xvY2socnExKTsKLQl1cGRhdGVfcnFfY2xvY2socnEyKTsKLX0KLQotLyoKLSAqIGRvdWJsZV9ycV91bmxvY2sgLSBzYWZlbHkgdW5sb2NrIHR3byBydW5xdWV1ZXMKLSAqCi0gKiBOb3RlIHRoaXMgZG9lcyBub3QgcmVzdG9yZSBpbnRlcnJ1cHRzIGxpa2UgdGFza19ycV91bmxvY2ssCi0gKiB5b3UgbmVlZCB0byBkbyBzbyBtYW51YWxseSBhZnRlciBjYWxsaW5nLgotICovCi1zdGF0aWMgdm9pZCBkb3VibGVfcnFfdW5sb2NrKHN0cnVjdCBycSAqcnExLCBzdHJ1Y3QgcnEgKnJxMikKLQlfX3JlbGVhc2VzKHJxMS0+bG9jaykKLQlfX3JlbGVhc2VzKHJxMi0+bG9jaykKLXsKLQlyYXdfc3Bpbl91bmxvY2soJnJxMS0+bG9jayk7Ci0JaWYgKHJxMSAhPSBycTIpCi0JCXJhd19zcGluX3VubG9jaygmcnEyLT5sb2NrKTsKLQllbHNlCi0JCV9fcmVsZWFzZShycTItPmxvY2spOwotfQotCi0vKgogICogc2NoZWRfZXhlYyAtIGV4ZWN2ZSgpIGlzIGEgdmFsdWFibGUgYmFsYW5jaW5nIG9wcG9ydHVuaXR5LCBiZWNhdXNlIGF0CiAgKiB0aGlzIHBvaW50IHRoZSB0YXNrIGhhcyB0aGUgc21hbGxlc3QgZWZmZWN0aXZlIG1lbW9yeSBhbmQgY2FjaGUgZm9vdHByaW50LgogICovCkBAIC0zMTkwLDE3NzEgKzMxNjEsNiBAQAogCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwogfQogCi0vKgotICogcHVsbF90YXNrIC0gbW92ZSBhIHRhc2sgZnJvbSBhIHJlbW90ZSBydW5xdWV1ZSB0byB0aGUgbG9jYWwgcnVucXVldWUuCi0gKiBCb3RoIHJ1bnF1ZXVlcyBtdXN0IGJlIGxvY2tlZC4KLSAqLwotc3RhdGljIHZvaWQgcHVsbF90YXNrKHN0cnVjdCBycSAqc3JjX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCi0JCSAgICAgIHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1KQotewotCWRlYWN0aXZhdGVfdGFzayhzcmNfcnEsIHAsIDApOwotCXNldF90YXNrX2NwdShwLCB0aGlzX2NwdSk7Ci0JYWN0aXZhdGVfdGFzayh0aGlzX3JxLCBwLCAwKTsKLQljaGVja19wcmVlbXB0X2N1cnIodGhpc19ycSwgcCwgMCk7Ci19Ci0KLS8qCi0gKiBjYW5fbWlncmF0ZV90YXNrIC0gbWF5IHRhc2sgcCBmcm9tIHJ1bnF1ZXVlIHJxIGJlIG1pZ3JhdGVkIHRvIHRoaXNfY3B1PwotICovCi1zdGF0aWMKLWludCBjYW5fbWlncmF0ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHJxICpycSwgaW50IHRoaXNfY3B1LAotCQkgICAgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJICAgICBpbnQgKmFsbF9waW5uZWQpCi17Ci0JaW50IHRza19jYWNoZV9ob3QgPSAwOwotCS8qCi0JICogV2UgZG8gbm90IG1pZ3JhdGUgdGFza3MgdGhhdCBhcmU6Ci0JICogMSkgcnVubmluZyAob2J2aW91c2x5KSwgb3IKLQkgKiAyKSBjYW5ub3QgYmUgbWlncmF0ZWQgdG8gdGhpcyBDUFUgZHVlIHRvIGNwdXNfYWxsb3dlZCwgb3IKLQkgKiAzKSBhcmUgY2FjaGUtaG90IG9uIHRoZWlyIGN1cnJlbnQgQ1BVLgotCSAqLwotCWlmICghY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwgJnAtPmNwdXNfYWxsb3dlZCkpIHsKLQkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl9mYWlsZWRfbWlncmF0aW9uc19hZmZpbmUpOwotCQlyZXR1cm4gMDsKLQl9Ci0JKmFsbF9waW5uZWQgPSAwOwotCi0JaWYgKHRhc2tfcnVubmluZyhycSwgcCkpIHsKLQkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl9mYWlsZWRfbWlncmF0aW9uc19ydW5uaW5nKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBBZ2dyZXNzaXZlIG1pZ3JhdGlvbiBpZjoKLQkgKiAxKSB0YXNrIGlzIGNhY2hlIGNvbGQsIG9yCi0JICogMikgdG9vIG1hbnkgYmFsYW5jZSBhdHRlbXB0cyBoYXZlIGZhaWxlZC4KLQkgKi8KLQotCXRza19jYWNoZV9ob3QgPSB0YXNrX2hvdChwLCBycS0+Y2xvY2ssIHNkKTsKLQlpZiAoIXRza19jYWNoZV9ob3QgfHwKLQkJc2QtPm5yX2JhbGFuY2VfZmFpbGVkID4gc2QtPmNhY2hlX25pY2VfdHJpZXMpIHsKLSNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwotCQlpZiAodHNrX2NhY2hlX2hvdCkgewotCQkJc2NoZWRzdGF0X2luYyhzZCwgbGJfaG90X2dhaW5lZFtpZGxlXSk7Ci0JCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZvcmNlZF9taWdyYXRpb25zKTsKLQkJfQotI2VuZGlmCi0JCXJldHVybiAxOwotCX0KLQotCWlmICh0c2tfY2FjaGVfaG90KSB7Ci0JCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfZmFpbGVkX21pZ3JhdGlvbnNfaG90KTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZwotYmFsYW5jZV90YXNrcyhzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAotCSAgICAgIHVuc2lnbmVkIGxvbmcgbWF4X2xvYWRfbW92ZSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCi0JICAgICAgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCAqYWxsX3Bpbm5lZCwKLQkgICAgICBpbnQgKnRoaXNfYmVzdF9wcmlvLCBzdHJ1Y3QgcnFfaXRlcmF0b3IgKml0ZXJhdG9yKQotewotCWludCBsb29wcyA9IDAsIHB1bGxlZCA9IDAsIHBpbm5lZCA9IDA7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwOwotCWxvbmcgcmVtX2xvYWRfbW92ZSA9IG1heF9sb2FkX21vdmU7Ci0KLQlpZiAobWF4X2xvYWRfbW92ZSA9PSAwKQotCQlnb3RvIG91dDsKLQotCXBpbm5lZCA9IDE7Ci0KLQkvKgotCSAqIFN0YXJ0IHRoZSBsb2FkLWJhbGFuY2luZyBpdGVyYXRvcjoKLQkgKi8KLQlwID0gaXRlcmF0b3ItPnN0YXJ0KGl0ZXJhdG9yLT5hcmcpOwotbmV4dDoKLQlpZiAoIXAgfHwgbG9vcHMrKyA+IHN5c2N0bF9zY2hlZF9ucl9taWdyYXRlKQotCQlnb3RvIG91dDsKLQotCWlmICgocC0+c2UubG9hZC53ZWlnaHQgPj4gMSkgPiByZW1fbG9hZF9tb3ZlIHx8Ci0JICAgICFjYW5fbWlncmF0ZV90YXNrKHAsIGJ1c2llc3QsIHRoaXNfY3B1LCBzZCwgaWRsZSwgJnBpbm5lZCkpIHsKLQkJcCA9IGl0ZXJhdG9yLT5uZXh0KGl0ZXJhdG9yLT5hcmcpOwotCQlnb3RvIG5leHQ7Ci0JfQotCi0JcHVsbF90YXNrKGJ1c2llc3QsIHAsIHRoaXNfcnEsIHRoaXNfY3B1KTsKLQlwdWxsZWQrKzsKLQlyZW1fbG9hZF9tb3ZlIC09IHAtPnNlLmxvYWQud2VpZ2h0OwotCi0jaWZkZWYgQ09ORklHX1BSRUVNUFQKLQkvKgotCSAqIE5FV0lETEUgYmFsYW5jaW5nIGlzIGEgc291cmNlIG9mIGxhdGVuY3ksIHNvIHByZWVtcHRpYmxlIGtlcm5lbHMKLQkgKiB3aWxsIHN0b3AgYWZ0ZXIgdGhlIGZpcnN0IHRhc2sgaXMgcHVsbGVkIHRvIG1pbmltaXplIHRoZSBjcml0aWNhbAotCSAqIHNlY3Rpb24uCi0JICovCi0JaWYgKGlkbGUgPT0gQ1BVX05FV0xZX0lETEUpCi0JCWdvdG8gb3V0OwotI2VuZGlmCi0KLQkvKgotCSAqIFdlIG9ubHkgd2FudCB0byBzdGVhbCB1cCB0byB0aGUgcHJlc2NyaWJlZCBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZC4KLQkgKi8KLQlpZiAocmVtX2xvYWRfbW92ZSA+IDApIHsKLQkJaWYgKHAtPnByaW8gPCAqdGhpc19iZXN0X3ByaW8pCi0JCQkqdGhpc19iZXN0X3ByaW8gPSBwLT5wcmlvOwotCQlwID0gaXRlcmF0b3ItPm5leHQoaXRlcmF0b3ItPmFyZyk7Ci0JCWdvdG8gbmV4dDsKLQl9Ci1vdXQ6Ci0JLyoKLQkgKiBSaWdodCBub3csIHRoaXMgaXMgb25lIG9mIG9ubHkgdHdvIHBsYWNlcyBwdWxsX3Rhc2soKSBpcyBjYWxsZWQsCi0JICogc28gd2UgY2FuIHNhZmVseSBjb2xsZWN0IHB1bGxfdGFzaygpIHN0YXRzIGhlcmUgcmF0aGVyIHRoYW4KLQkgKiBpbnNpZGUgcHVsbF90YXNrKCkuCi0JICovCi0Jc2NoZWRzdGF0X2FkZChzZCwgbGJfZ2FpbmVkW2lkbGVdLCBwdWxsZWQpOwotCi0JaWYgKGFsbF9waW5uZWQpCi0JCSphbGxfcGlubmVkID0gcGlubmVkOwotCi0JcmV0dXJuIG1heF9sb2FkX21vdmUgLSByZW1fbG9hZF9tb3ZlOwotfQotCi0vKgotICogbW92ZV90YXNrcyB0cmllcyB0byBtb3ZlIHVwIHRvIG1heF9sb2FkX21vdmUgd2VpZ2h0ZWQgbG9hZCBmcm9tIGJ1c2llc3QgdG8KLSAqIHRoaXNfcnEsIGFzIHBhcnQgb2YgYSBiYWxhbmNpbmcgb3BlcmF0aW9uIHdpdGhpbiBkb21haW4gInNkIi4KLSAqIFJldHVybnMgMSBpZiBzdWNjZXNzZnVsIGFuZCAwIG90aGVyd2lzZS4KLSAqCi0gKiBDYWxsZWQgd2l0aCBib3RoIHJ1bnF1ZXVlcyBsb2NrZWQuCi0gKi8KLXN0YXRpYyBpbnQgbW92ZV90YXNrcyhzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAotCQkgICAgICB1bnNpZ25lZCBsb25nIG1heF9sb2FkX21vdmUsCi0JCSAgICAgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJICAgICAgaW50ICphbGxfcGlubmVkKQotewotCWNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqY2xhc3MgPSBzY2hlZF9jbGFzc19oaWdoZXN0OwotCXVuc2lnbmVkIGxvbmcgdG90YWxfbG9hZF9tb3ZlZCA9IDA7Ci0JaW50IHRoaXNfYmVzdF9wcmlvID0gdGhpc19ycS0+Y3Vyci0+cHJpbzsKLQotCWRvIHsKLQkJdG90YWxfbG9hZF9tb3ZlZCArPQotCQkJY2xhc3MtPmxvYWRfYmFsYW5jZSh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKLQkJCQltYXhfbG9hZF9tb3ZlIC0gdG90YWxfbG9hZF9tb3ZlZCwKLQkJCQlzZCwgaWRsZSwgYWxsX3Bpbm5lZCwgJnRoaXNfYmVzdF9wcmlvKTsKLQkJY2xhc3MgPSBjbGFzcy0+bmV4dDsKLQotI2lmZGVmIENPTkZJR19QUkVFTVBUCi0JCS8qCi0JCSAqIE5FV0lETEUgYmFsYW5jaW5nIGlzIGEgc291cmNlIG9mIGxhdGVuY3ksIHNvIHByZWVtcHRpYmxlCi0JCSAqIGtlcm5lbHMgd2lsbCBzdG9wIGFmdGVyIHRoZSBmaXJzdCB0YXNrIGlzIHB1bGxlZCB0byBtaW5pbWl6ZQotCQkgKiB0aGUgY3JpdGljYWwgc2VjdGlvbi4KLQkJICovCi0JCWlmIChpZGxlID09IENQVV9ORVdMWV9JRExFICYmIHRoaXNfcnEtPm5yX3J1bm5pbmcpCi0JCQlicmVhazsKLSNlbmRpZgotCX0gd2hpbGUgKGNsYXNzICYmIG1heF9sb2FkX21vdmUgPiB0b3RhbF9sb2FkX21vdmVkKTsKLQotCXJldHVybiB0b3RhbF9sb2FkX21vdmVkID4gMDsKLX0KLQotc3RhdGljIGludAotaXRlcl9tb3ZlX29uZV90YXNrKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JCSAgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJICAgc3RydWN0IHJxX2l0ZXJhdG9yICppdGVyYXRvcikKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBpdGVyYXRvci0+c3RhcnQoaXRlcmF0b3ItPmFyZyk7Ci0JaW50IHBpbm5lZCA9IDA7Ci0KLQl3aGlsZSAocCkgewotCQlpZiAoY2FuX21pZ3JhdGVfdGFzayhwLCBidXNpZXN0LCB0aGlzX2NwdSwgc2QsIGlkbGUsICZwaW5uZWQpKSB7Ci0JCQlwdWxsX3Rhc2soYnVzaWVzdCwgcCwgdGhpc19ycSwgdGhpc19jcHUpOwotCQkJLyoKLQkJCSAqIFJpZ2h0IG5vdywgdGhpcyBpcyBvbmx5IHRoZSBzZWNvbmQgcGxhY2UgcHVsbF90YXNrKCkKLQkJCSAqIGlzIGNhbGxlZCwgc28gd2UgY2FuIHNhZmVseSBjb2xsZWN0IHB1bGxfdGFzaygpCi0JCQkgKiBzdGF0cyBoZXJlIHJhdGhlciB0aGFuIGluc2lkZSBwdWxsX3Rhc2soKS4KLQkJCSAqLwotCQkJc2NoZWRzdGF0X2luYyhzZCwgbGJfZ2FpbmVkW2lkbGVdKTsKLQotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJcCA9IGl0ZXJhdG9yLT5uZXh0KGl0ZXJhdG9yLT5hcmcpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogbW92ZV9vbmVfdGFzayB0cmllcyB0byBtb3ZlIGV4YWN0bHkgb25lIHRhc2sgZnJvbSBidXNpZXN0IHRvIHRoaXNfcnEsIGFzCi0gKiBwYXJ0IG9mIGFjdGl2ZSBiYWxhbmNpbmcgb3BlcmF0aW9ucyB3aXRoaW4gImRvbWFpbiIuCi0gKiBSZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBhbmQgMCBvdGhlcndpc2UuCi0gKgotICogQ2FsbGVkIHdpdGggYm90aCBydW5xdWV1ZXMgbG9ja2VkLgotICovCi1zdGF0aWMgaW50IG1vdmVfb25lX3Rhc2soc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKLQkJCSBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCi17Ci0JY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpjbGFzczsKLQotCWZvcl9lYWNoX2NsYXNzKGNsYXNzKSB7Ci0JCWlmIChjbGFzcy0+bW92ZV9vbmVfdGFzayh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwgc2QsIGlkbGUpKQotCQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0vKioqKioqKioqKiBIZWxwZXJzIGZvciBmaW5kX2J1c2llc3RfZ3JvdXAgKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIHNkX2xiX3N0YXRzIC0gU3RydWN0dXJlIHRvIHN0b3JlIHRoZSBzdGF0aXN0aWNzIG9mIGEgc2NoZWRfZG9tYWluCi0gKiAJCWR1cmluZyBsb2FkIGJhbGFuY2luZy4KLSAqLwotc3RydWN0IHNkX2xiX3N0YXRzIHsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmJ1c2llc3Q7IC8qIEJ1c2llc3QgZ3JvdXAgaW4gdGhpcyBzZCAqLwotCXN0cnVjdCBzY2hlZF9ncm91cCAqdGhpczsgIC8qIExvY2FsIGdyb3VwIGluIHRoaXMgc2QgKi8KLQl1bnNpZ25lZCBsb25nIHRvdGFsX2xvYWQ7ICAvKiBUb3RhbCBsb2FkIG9mIGFsbCBncm91cHMgaW4gc2QgKi8KLQl1bnNpZ25lZCBsb25nIHRvdGFsX3B3cjsgICAvKglUb3RhbCBwb3dlciBvZiBhbGwgZ3JvdXBzIGluIHNkICovCi0JdW5zaWduZWQgbG9uZyBhdmdfbG9hZDsJICAgLyogQXZlcmFnZSBsb2FkIGFjcm9zcyBhbGwgZ3JvdXBzIGluIHNkICovCi0KLQkvKiogU3RhdGlzdGljcyBvZiB0aGlzIGdyb3VwICovCi0JdW5zaWduZWQgbG9uZyB0aGlzX2xvYWQ7Ci0JdW5zaWduZWQgbG9uZyB0aGlzX2xvYWRfcGVyX3Rhc2s7Ci0JdW5zaWduZWQgbG9uZyB0aGlzX25yX3J1bm5pbmc7Ci0KLQkvKiBTdGF0aXN0aWNzIG9mIHRoZSBidXNpZXN0IGdyb3VwICovCi0JdW5zaWduZWQgbG9uZyBtYXhfbG9hZDsKLQl1bnNpZ25lZCBsb25nIGJ1c2llc3RfbG9hZF9wZXJfdGFzazsKLQl1bnNpZ25lZCBsb25nIGJ1c2llc3RfbnJfcnVubmluZzsKLQotCWludCBncm91cF9pbWI7IC8qIElzIHRoZXJlIGltYmFsYW5jZSBpbiB0aGlzIHNkICovCi0jaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKLQlpbnQgcG93ZXJfc2F2aW5nc19iYWxhbmNlOyAvKiBJcyBwb3dlcnNhdmUgYmFsYW5jZSBuZWVkZWQgZm9yIHRoaXMgc2QgKi8KLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwX21pbjsgLyogTGVhc3QgbG9hZGVkIGdyb3VwIGluIHNkICovCi0Jc3RydWN0IHNjaGVkX2dyb3VwICpncm91cF9sZWFkZXI7IC8qIEdyb3VwIHdoaWNoIHJlbGlldmVzIGdyb3VwX21pbiAqLwotCXVuc2lnbmVkIGxvbmcgbWluX2xvYWRfcGVyX3Rhc2s7IC8qIGxvYWRfcGVyX3Rhc2sgaW4gZ3JvdXBfbWluICovCi0JdW5zaWduZWQgbG9uZyBsZWFkZXJfbnJfcnVubmluZzsgLyogTnIgcnVubmluZyBvZiBncm91cF9sZWFkZXIgKi8KLQl1bnNpZ25lZCBsb25nIG1pbl9ucl9ydW5uaW5nOyAvKiBOciBydW5uaW5nIG9mIGdyb3VwX21pbiAqLwotI2VuZGlmCi19OwotCi0vKgotICogc2dfbGJfc3RhdHMgLSBzdGF0cyBvZiBhIHNjaGVkX2dyb3VwIHJlcXVpcmVkIGZvciBsb2FkX2JhbGFuY2luZwotICovCi1zdHJ1Y3Qgc2dfbGJfc3RhdHMgewotCXVuc2lnbmVkIGxvbmcgYXZnX2xvYWQ7IC8qQXZnIGxvYWQgYWNyb3NzIHRoZSBDUFVzIG9mIHRoZSBncm91cCAqLwotCXVuc2lnbmVkIGxvbmcgZ3JvdXBfbG9hZDsgLyogVG90YWwgbG9hZCBvdmVyIHRoZSBDUFVzIG9mIHRoZSBncm91cCAqLwotCXVuc2lnbmVkIGxvbmcgc3VtX25yX3J1bm5pbmc7IC8qIE5yIHRhc2tzIHJ1bm5pbmcgaW4gdGhlIGdyb3VwICovCi0JdW5zaWduZWQgbG9uZyBzdW1fd2VpZ2h0ZWRfbG9hZDsgLyogV2VpZ2h0ZWQgbG9hZCBvZiBncm91cCdzIHRhc2tzICovCi0JdW5zaWduZWQgbG9uZyBncm91cF9jYXBhY2l0eTsKLQlpbnQgZ3JvdXBfaW1iOyAvKiBJcyB0aGVyZSBhbiBpbWJhbGFuY2UgaW4gdGhlIGdyb3VwID8gKi8KLX07Ci0KLS8qKgotICogZ3JvdXBfZmlyc3RfY3B1IC0gUmV0dXJucyB0aGUgZmlyc3QgY3B1IGluIHRoZSBjcHVtYXNrIG9mIGEgc2NoZWRfZ3JvdXAuCi0gKiBAZ3JvdXA6IFRoZSBncm91cCB3aG9zZSBmaXJzdCBjcHUgaXMgdG8gYmUgcmV0dXJuZWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdyb3VwX2ZpcnN0X2NwdShzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwKQotewotCXJldHVybiBjcHVtYXNrX2ZpcnN0KHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKTsKLX0KLQotLyoqCi0gKiBnZXRfc2RfbG9hZF9pZHggLSBPYnRhaW4gdGhlIGxvYWQgaW5kZXggZm9yIGEgZ2l2ZW4gc2NoZWQgZG9tYWluLgotICogQHNkOiBUaGUgc2NoZWRfZG9tYWluIHdob3NlIGxvYWRfaWR4IGlzIHRvIGJlIG9idGFpbmVkLgotICogQGlkbGU6IFRoZSBJZGxlIHN0YXR1cyBvZiB0aGUgQ1BVIGZvciB3aG9zZSBzZCBsb2FkX2ljeCBpcyBvYnRhaW5lZC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgZ2V0X3NkX2xvYWRfaWR4KHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAotCQkJCQllbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKLXsKLQlpbnQgbG9hZF9pZHg7Ci0KLQlzd2l0Y2ggKGlkbGUpIHsKLQljYXNlIENQVV9OT1RfSURMRToKLQkJbG9hZF9pZHggPSBzZC0+YnVzeV9pZHg7Ci0JCWJyZWFrOwotCi0JY2FzZSBDUFVfTkVXTFlfSURMRToKLQkJbG9hZF9pZHggPSBzZC0+bmV3aWRsZV9pZHg7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWxvYWRfaWR4ID0gc2QtPmlkbGVfaWR4OwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gbG9hZF9pZHg7Ci19Ci0KLQotI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEX01DKSB8fCBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCi0vKioKLSAqIGluaXRfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyAtIEluaXRpYWxpemUgcG93ZXIgc2F2aW5ncyBzdGF0aXN0aWNzIGZvcgotICogdGhlIGdpdmVuIHNjaGVkX2RvbWFpbiwgZHVyaW5nIGxvYWQgYmFsYW5jaW5nLgotICoKLSAqIEBzZDogU2NoZWQgZG9tYWluIHdob3NlIHBvd2VyLXNhdmluZ3Mgc3RhdGlzdGljcyBhcmUgdG8gYmUgaW5pdGlhbGl6ZWQuCi0gKiBAc2RzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIGZvciBzZC4KLSAqIEBpZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGUgQ1BVIGF0IHdoaWNoIHdlJ3JlIHBlcmZvcm1pbmcgbG9hZC1iYWxhbmNpbmcuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCi0Jc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQotewotCS8qCi0JICogQnVzeSBwcm9jZXNzb3JzIHdpbGwgbm90IHBhcnRpY2lwYXRlIGluIHBvd2VyIHNhdmluZ3MKLQkgKiBiYWxhbmNlLgotCSAqLwotCWlmIChpZGxlID09IENQVV9OT1RfSURMRSB8fCAhKHNkLT5mbGFncyAmIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKLQkJc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UgPSAwOwotCWVsc2UgewotCQlzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSA9IDE7Ci0JCXNkcy0+bWluX25yX3J1bm5pbmcgPSBVTE9OR19NQVg7Ci0JCXNkcy0+bGVhZGVyX25yX3J1bm5pbmcgPSAwOwotCX0KLX0KLQotLyoqCi0gKiB1cGRhdGVfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyAtIFVwZGF0ZSB0aGUgcG93ZXIgc2F2aW5nIHN0YXRzIGZvciBhCi0gKiBzY2hlZF9kb21haW4gd2hpbGUgcGVyZm9ybWluZyBsb2FkIGJhbGFuY2luZy4KLSAqCi0gKiBAZ3JvdXA6IHNjaGVkX2dyb3VwIGJlbG9uZ2luZyB0byB0aGUgc2NoZWRfZG9tYWluIHVuZGVyIGNvbnNpZGVyYXRpb24uCi0gKiBAc2RzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4KLSAqIEBsb2NhbF9ncm91cDogRG9lcyBncm91cCBjb250YWluIHRoZSBDUFUgZm9yIHdoaWNoIHdlJ3JlIHBlcmZvcm1pbmcKLSAqIAkJbG9hZCBiYWxhbmNpbmcgPwotICogQHNnczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBvZiB0aGUgZ3JvdXAuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLAotCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBpbnQgbG9jYWxfZ3JvdXAsIHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKQotewotCi0JaWYgKCFzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBJZiB0aGUgbG9jYWwgZ3JvdXAgaXMgaWRsZSBvciBjb21wbGV0ZWx5IGxvYWRlZAotCSAqIG5vIG5lZWQgdG8gZG8gcG93ZXIgc2F2aW5ncyBiYWxhbmNlIGF0IHRoaXMgZG9tYWluCi0JICovCi0JaWYgKGxvY2FsX2dyb3VwICYmIChzZHMtPnRoaXNfbnJfcnVubmluZyA+PSBzZ3MtPmdyb3VwX2NhcGFjaXR5IHx8Ci0JCQkJIXNkcy0+dGhpc19ucl9ydW5uaW5nKSkKLQkJc2RzLT5wb3dlcl9zYXZpbmdzX2JhbGFuY2UgPSAwOwotCi0JLyoKLQkgKiBJZiBhIGdyb3VwIGlzIGFscmVhZHkgcnVubmluZyBhdCBmdWxsIGNhcGFjaXR5IG9yIGlkbGUsCi0JICogZG9uJ3QgaW5jbHVkZSB0aGF0IGdyb3VwIGluIHBvd2VyIHNhdmluZ3MgY2FsY3VsYXRpb25zCi0JICovCi0JaWYgKCFzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSB8fAotCQlzZ3MtPnN1bV9ucl9ydW5uaW5nID49IHNncy0+Z3JvdXBfY2FwYWNpdHkgfHwKLQkJIXNncy0+c3VtX25yX3J1bm5pbmcpCi0JCXJldHVybjsKLQotCS8qCi0JICogQ2FsY3VsYXRlIHRoZSBncm91cCB3aGljaCBoYXMgdGhlIGxlYXN0IG5vbi1pZGxlIGxvYWQuCi0JICogVGhpcyBpcyB0aGUgZ3JvdXAgZnJvbSB3aGVyZSB3ZSBuZWVkIHRvIHBpY2sgdXAgdGhlIGxvYWQKLQkgKiBmb3Igc2F2aW5nIHBvd2VyCi0JICovCi0JaWYgKChzZ3MtPnN1bV9ucl9ydW5uaW5nIDwgc2RzLT5taW5fbnJfcnVubmluZykgfHwKLQkgICAgKHNncy0+c3VtX25yX3J1bm5pbmcgPT0gc2RzLT5taW5fbnJfcnVubmluZyAmJgotCSAgICAgZ3JvdXBfZmlyc3RfY3B1KGdyb3VwKSA+IGdyb3VwX2ZpcnN0X2NwdShzZHMtPmdyb3VwX21pbikpKSB7Ci0JCXNkcy0+Z3JvdXBfbWluID0gZ3JvdXA7Ci0JCXNkcy0+bWluX25yX3J1bm5pbmcgPSBzZ3MtPnN1bV9ucl9ydW5uaW5nOwotCQlzZHMtPm1pbl9sb2FkX3Blcl90YXNrID0gc2dzLT5zdW1fd2VpZ2h0ZWRfbG9hZCAvCi0JCQkJCQlzZ3MtPnN1bV9ucl9ydW5uaW5nOwotCX0KLQotCS8qCi0JICogQ2FsY3VsYXRlIHRoZSBncm91cCB3aGljaCBpcyBhbG1vc3QgbmVhciBpdHMKLQkgKiBjYXBhY2l0eSBidXQgc3RpbGwgaGFzIHNvbWUgc3BhY2UgdG8gcGljayB1cCBzb21lIGxvYWQKLQkgKiBmcm9tIG90aGVyIGdyb3VwIGFuZCBzYXZlIG1vcmUgcG93ZXIKLQkgKi8KLQlpZiAoc2dzLT5zdW1fbnJfcnVubmluZyArIDEgPiBzZ3MtPmdyb3VwX2NhcGFjaXR5KQotCQlyZXR1cm47Ci0KLQlpZiAoc2dzLT5zdW1fbnJfcnVubmluZyA+IHNkcy0+bGVhZGVyX25yX3J1bm5pbmcgfHwKLQkgICAgKHNncy0+c3VtX25yX3J1bm5pbmcgPT0gc2RzLT5sZWFkZXJfbnJfcnVubmluZyAmJgotCSAgICAgZ3JvdXBfZmlyc3RfY3B1KGdyb3VwKSA8IGdyb3VwX2ZpcnN0X2NwdShzZHMtPmdyb3VwX2xlYWRlcikpKSB7Ci0JCXNkcy0+Z3JvdXBfbGVhZGVyID0gZ3JvdXA7Ci0JCXNkcy0+bGVhZGVyX25yX3J1bm5pbmcgPSBzZ3MtPnN1bV9ucl9ydW5uaW5nOwotCX0KLX0KLQotLyoqCi0gKiBjaGVja19wb3dlcl9zYXZlX2J1c2llc3RfZ3JvdXAgLSBzZWUgaWYgdGhlcmUgaXMgcG90ZW50aWFsIGZvciBzb21lIHBvd2VyLXNhdmluZ3MgYmFsYW5jZQotICogQHNkczogVmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluCi0gKgl1bmRlciBjb25zaWRlcmF0aW9uLgotICogQHRoaXNfY3B1OiBDcHUgYXQgd2hpY2ggd2UncmUgY3VycmVudGx5IHBlcmZvcm1pbmcgbG9hZC1iYWxhbmNpbmcuCi0gKiBAaW1iYWxhbmNlOiBWYXJpYWJsZSB0byBzdG9yZSB0aGUgaW1iYWxhbmNlLgotICoKLSAqIERlc2NyaXB0aW9uOgotICogQ2hlY2sgaWYgd2UgaGF2ZSBwb3RlbnRpYWwgdG8gcGVyZm9ybSBzb21lIHBvd2VyLXNhdmluZ3MgYmFsYW5jZS4KLSAqIElmIHllcywgc2V0IHRoZSBidXNpZXN0IGdyb3VwIHRvIGJlIHRoZSBsZWFzdCBsb2FkZWQgZ3JvdXAgaW4gdGhlCi0gKiBzY2hlZF9kb21haW4sIHNvIHRoYXQgaXQncyBDUFVzIGNhbiBiZSBwdXQgdG8gaWRsZS4KLSAqCi0gKiBSZXR1cm5zIDEgaWYgdGhlcmUgaXMgcG90ZW50aWFsIHRvIHBlcmZvcm0gcG93ZXItc2F2aW5ncyBiYWxhbmNlLgotICogRWxzZSByZXR1cm5zIDAuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cChzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywKLQkJCQkJaW50IHRoaXNfY3B1LCB1bnNpZ25lZCBsb25nICppbWJhbGFuY2UpCi17Ci0JaWYgKCFzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoc2RzLT50aGlzICE9IHNkcy0+Z3JvdXBfbGVhZGVyIHx8Ci0JCQlzZHMtPmdyb3VwX2xlYWRlciA9PSBzZHMtPmdyb3VwX21pbikKLQkJcmV0dXJuIDA7Ci0KLQkqaW1iYWxhbmNlID0gc2RzLT5taW5fbG9hZF9wZXJfdGFzazsKLQlzZHMtPmJ1c2llc3QgPSBzZHMtPmdyb3VwX21pbjsKLQotCXJldHVybiAxOwotCi19Ci0jZWxzZSAvKiBDT05GSUdfU0NIRURfTUMgfHwgQ09ORklHX1NDSEVEX1NNVCAqLwotc3RhdGljIGlubGluZSB2b2lkIGluaXRfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKLQlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwKLQlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgaW50IGxvY2FsX2dyb3VwLCBzdHJ1Y3Qgc2dfbGJfc3RhdHMgKnNncykKLXsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cChzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywKLQkJCQkJaW50IHRoaXNfY3B1LCB1bnNpZ25lZCBsb25nICppbWJhbGFuY2UpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1NDSEVEX01DIHx8IENPTkZJR19TQ0hFRF9TTVQgKi8KLQotCi11bnNpZ25lZCBsb25nIGRlZmF1bHRfc2NhbGVfZnJlcV9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKLXsKLQlyZXR1cm4gU0NIRURfTE9BRF9TQ0FMRTsKLX0KLQotdW5zaWduZWQgbG9uZyBfX3dlYWsgYXJjaF9zY2FsZV9mcmVxX3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQotewotCXJldHVybiBkZWZhdWx0X3NjYWxlX2ZyZXFfcG93ZXIoc2QsIGNwdSk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgZGVmYXVsdF9zY2FsZV9zbXRfcG93ZXIoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCi17Ci0JdW5zaWduZWQgbG9uZyB3ZWlnaHQgPSBjcHVtYXNrX3dlaWdodChzY2hlZF9kb21haW5fc3BhbihzZCkpOwotCXVuc2lnbmVkIGxvbmcgc210X2dhaW4gPSBzZC0+c210X2dhaW47Ci0KLQlzbXRfZ2FpbiAvPSB3ZWlnaHQ7Ci0KLQlyZXR1cm4gc210X2dhaW47Ci19Ci0KLXVuc2lnbmVkIGxvbmcgX193ZWFrIGFyY2hfc2NhbGVfc210X3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQotewotCXJldHVybiBkZWZhdWx0X3NjYWxlX3NtdF9wb3dlcihzZCwgY3B1KTsKLX0KLQotdW5zaWduZWQgbG9uZyBzY2FsZV9ydF9wb3dlcihpbnQgY3B1KQotewotCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKLQl1NjQgdG90YWwsIGF2YWlsYWJsZTsKLQotCXNjaGVkX2F2Z191cGRhdGUocnEpOwotCi0JdG90YWwgPSBzY2hlZF9hdmdfcGVyaW9kKCkgKyAocnEtPmNsb2NrIC0gcnEtPmFnZV9zdGFtcCk7Ci0JYXZhaWxhYmxlID0gdG90YWwgLSBycS0+cnRfYXZnOwotCi0JaWYgKHVubGlrZWx5KChzNjQpdG90YWwgPCBTQ0hFRF9MT0FEX1NDQUxFKSkKLQkJdG90YWwgPSBTQ0hFRF9MT0FEX1NDQUxFOwotCi0JdG90YWwgPj49IFNDSEVEX0xPQURfU0hJRlQ7Ci0KLQlyZXR1cm4gZGl2X3U2NChhdmFpbGFibGUsIHRvdGFsKTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlX2NwdV9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKLXsKLQl1bnNpZ25lZCBsb25nIHdlaWdodCA9IGNwdW1hc2tfd2VpZ2h0KHNjaGVkX2RvbWFpbl9zcGFuKHNkKSk7Ci0JdW5zaWduZWQgbG9uZyBwb3dlciA9IFNDSEVEX0xPQURfU0NBTEU7Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICpzZGcgPSBzZC0+Z3JvdXBzOwotCi0JaWYgKHNjaGVkX2ZlYXQoQVJDSF9QT1dFUikpCi0JCXBvd2VyICo9IGFyY2hfc2NhbGVfZnJlcV9wb3dlcihzZCwgY3B1KTsKLQllbHNlCi0JCXBvd2VyICo9IGRlZmF1bHRfc2NhbGVfZnJlcV9wb3dlcihzZCwgY3B1KTsKLQotCXBvd2VyID4+PSBTQ0hFRF9MT0FEX1NISUZUOwotCi0JaWYgKChzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUikgJiYgd2VpZ2h0ID4gMSkgewotCQlpZiAoc2NoZWRfZmVhdChBUkNIX1BPV0VSKSkKLQkJCXBvd2VyICo9IGFyY2hfc2NhbGVfc210X3Bvd2VyKHNkLCBjcHUpOwotCQllbHNlCi0JCQlwb3dlciAqPSBkZWZhdWx0X3NjYWxlX3NtdF9wb3dlcihzZCwgY3B1KTsKLQotCQlwb3dlciA+Pj0gU0NIRURfTE9BRF9TSElGVDsKLQl9Ci0KLQlwb3dlciAqPSBzY2FsZV9ydF9wb3dlcihjcHUpOwotCXBvd2VyID4+PSBTQ0hFRF9MT0FEX1NISUZUOwotCi0JaWYgKCFwb3dlcikKLQkJcG93ZXIgPSAxOwotCi0Jc2RnLT5jcHVfcG93ZXIgPSBwb3dlcjsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlX2dyb3VwX3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQotewotCXN0cnVjdCBzY2hlZF9kb21haW4gKmNoaWxkID0gc2QtPmNoaWxkOwotCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsICpzZGcgPSBzZC0+Z3JvdXBzOwotCXVuc2lnbmVkIGxvbmcgcG93ZXI7Ci0KLQlpZiAoIWNoaWxkKSB7Ci0JCXVwZGF0ZV9jcHVfcG93ZXIoc2QsIGNwdSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwb3dlciA9IDA7Ci0KLQlncm91cCA9IGNoaWxkLT5ncm91cHM7Ci0JZG8gewotCQlwb3dlciArPSBncm91cC0+Y3B1X3Bvd2VyOwotCQlncm91cCA9IGdyb3VwLT5uZXh0OwotCX0gd2hpbGUgKGdyb3VwICE9IGNoaWxkLT5ncm91cHMpOwotCi0Jc2RnLT5jcHVfcG93ZXIgPSBwb3dlcjsKLX0KLQotLyoqCi0gKiB1cGRhdGVfc2dfbGJfc3RhdHMgLSBVcGRhdGUgc2NoZWRfZ3JvdXAncyBzdGF0aXN0aWNzIGZvciBsb2FkIGJhbGFuY2luZy4KLSAqIEBzZDogVGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgotICogQGdyb3VwOiBzY2hlZF9ncm91cCB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgotICogQHRoaXNfY3B1OiBDcHUgZm9yIHdoaWNoIGxvYWQgYmFsYW5jZSBpcyBjdXJyZW50bHkgcGVyZm9ybWVkLgotICogQGlkbGU6IElkbGUgc3RhdHVzIG9mIHRoaXNfY3B1Ci0gKiBAbG9hZF9pZHg6IExvYWQgaW5kZXggb2Ygc2NoZWRfZG9tYWluIG9mIHRoaXNfY3B1IGZvciBsb2FkIGNhbGMuCi0gKiBAc2RfaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhlIHNjaGVkX2RvbWFpbiBjb250YWluaW5nIGdyb3VwLgotICogQGxvY2FsX2dyb3VwOiBEb2VzIGdyb3VwIGNvbnRhaW4gdGhpc19jcHUuCi0gKiBAY3B1czogU2V0IG9mIGNwdXMgY29uc2lkZXJlZCBmb3IgbG9hZCBiYWxhbmNpbmcuCi0gKiBAYmFsYW5jZTogU2hvdWxkIHdlIGJhbGFuY2UuCi0gKiBAc2dzOiB2YXJpYWJsZSB0byBob2xkIHRoZSBzdGF0aXN0aWNzIGZvciB0aGlzIGdyb3VwLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NnX2xiX3N0YXRzKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAotCQkJc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwgaW50IHRoaXNfY3B1LAotCQkJZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCBsb2FkX2lkeCwgaW50ICpzZF9pZGxlLAotCQkJaW50IGxvY2FsX2dyb3VwLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywKLQkJCWludCAqYmFsYW5jZSwgc3RydWN0IHNnX2xiX3N0YXRzICpzZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBsb2FkLCBtYXhfY3B1X2xvYWQsIG1pbl9jcHVfbG9hZDsKLQlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgYmFsYW5jZV9jcHUgPSAtMSwgZmlyc3RfaWRsZV9jcHUgPSAwOwotCXVuc2lnbmVkIGxvbmcgc3VtX2F2Z19sb2FkX3Blcl90YXNrOwotCXVuc2lnbmVkIGxvbmcgYXZnX2xvYWRfcGVyX3Rhc2s7Ci0KLQlpZiAobG9jYWxfZ3JvdXApIHsKLQkJYmFsYW5jZV9jcHUgPSBncm91cF9maXJzdF9jcHUoZ3JvdXApOwotCQlpZiAoYmFsYW5jZV9jcHUgPT0gdGhpc19jcHUpCi0JCQl1cGRhdGVfZ3JvdXBfcG93ZXIoc2QsIHRoaXNfY3B1KTsKLQl9Ci0KLQkvKiBUYWxseSB1cCB0aGUgbG9hZCBvZiBhbGwgQ1BVcyBpbiB0aGUgZ3JvdXAgKi8KLQlzdW1fYXZnX2xvYWRfcGVyX3Rhc2sgPSBhdmdfbG9hZF9wZXJfdGFzayA9IDA7Ci0JbWF4X2NwdV9sb2FkID0gMDsKLQltaW5fY3B1X2xvYWQgPSB+MFVMOwotCi0JZm9yX2VhY2hfY3B1X2FuZChpLCBzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSwgY3B1cykgewotCQlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGkpOwotCi0JCWlmICgqc2RfaWRsZSAmJiBycS0+bnJfcnVubmluZykKLQkJCSpzZF9pZGxlID0gMDsKLQotCQkvKiBCaWFzIGJhbGFuY2luZyB0b3dhcmQgY3B1cyBvZiBvdXIgZG9tYWluICovCi0JCWlmIChsb2NhbF9ncm91cCkgewotCQkJaWYgKGlkbGVfY3B1KGkpICYmICFmaXJzdF9pZGxlX2NwdSkgewotCQkJCWZpcnN0X2lkbGVfY3B1ID0gMTsKLQkJCQliYWxhbmNlX2NwdSA9IGk7Ci0JCQl9Ci0KLQkJCWxvYWQgPSB0YXJnZXRfbG9hZChpLCBsb2FkX2lkeCk7Ci0JCX0gZWxzZSB7Ci0JCQlsb2FkID0gc291cmNlX2xvYWQoaSwgbG9hZF9pZHgpOwotCQkJaWYgKGxvYWQgPiBtYXhfY3B1X2xvYWQpCi0JCQkJbWF4X2NwdV9sb2FkID0gbG9hZDsKLQkJCWlmIChtaW5fY3B1X2xvYWQgPiBsb2FkKQotCQkJCW1pbl9jcHVfbG9hZCA9IGxvYWQ7Ci0JCX0KLQotCQlzZ3MtPmdyb3VwX2xvYWQgKz0gbG9hZDsKLQkJc2dzLT5zdW1fbnJfcnVubmluZyArPSBycS0+bnJfcnVubmluZzsKLQkJc2dzLT5zdW1fd2VpZ2h0ZWRfbG9hZCArPSB3ZWlnaHRlZF9jcHVsb2FkKGkpOwotCi0JCXN1bV9hdmdfbG9hZF9wZXJfdGFzayArPSBjcHVfYXZnX2xvYWRfcGVyX3Rhc2soaSk7Ci0JfQotCi0JLyoKLQkgKiBGaXJzdCBpZGxlIGNwdSBvciB0aGUgZmlyc3QgY3B1KGJ1c2llc3QpIGluIHRoaXMgc2NoZWQgZ3JvdXAKLQkgKiBpcyBlbGlnaWJsZSBmb3IgZG9pbmcgbG9hZCBiYWxhbmNpbmcgYXQgdGhpcyBhbmQgYWJvdmUKLQkgKiBkb21haW5zLiBJbiB0aGUgbmV3bHkgaWRsZSBjYXNlLCB3ZSB3aWxsIGFsbG93IGFsbCB0aGUgY3B1J3MKLQkgKiB0byBkbyB0aGUgbmV3bHkgaWRsZSBsb2FkIGJhbGFuY2UuCi0JICovCi0JaWYgKGlkbGUgIT0gQ1BVX05FV0xZX0lETEUgJiYgbG9jYWxfZ3JvdXAgJiYKLQkgICAgYmFsYW5jZV9jcHUgIT0gdGhpc19jcHUgJiYgYmFsYW5jZSkgewotCQkqYmFsYW5jZSA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBBZGp1c3QgYnkgcmVsYXRpdmUgQ1BVIHBvd2VyIG9mIHRoZSBncm91cCAqLwotCXNncy0+YXZnX2xvYWQgPSAoc2dzLT5ncm91cF9sb2FkICogU0NIRURfTE9BRF9TQ0FMRSkgLyBncm91cC0+Y3B1X3Bvd2VyOwotCi0KLQkvKgotCSAqIENvbnNpZGVyIHRoZSBncm91cCB1bmJhbGFuY2VkIHdoZW4gdGhlIGltYmFsYW5jZSBpcyBsYXJnZXIKLQkgKiB0aGFuIHRoZSBhdmVyYWdlIHdlaWdodCBvZiB0d28gdGFza3MuCi0JICoKLQkgKiBBUFo6IHdpdGggY2dyb3VwIHRoZSBhdmcgdGFzayB3ZWlnaHQgY2FuIHZhcnkgd2lsZGx5IGFuZAotCSAqICAgICAgbWlnaHQgbm90IGJlIGEgc3VpdGFibGUgbnVtYmVyIC0gc2hvdWxkIHdlIGtlZXAgYQotCSAqICAgICAgbm9ybWFsaXplZCBucl9ydW5uaW5nIG51bWJlciBzb21ld2hlcmUgdGhhdCBuZWdhdGVzCi0JICogICAgICB0aGUgaGllcmFyY2h5PwotCSAqLwotCWF2Z19sb2FkX3Blcl90YXNrID0gKHN1bV9hdmdfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpIC8KLQkJZ3JvdXAtPmNwdV9wb3dlcjsKLQotCWlmICgobWF4X2NwdV9sb2FkIC0gbWluX2NwdV9sb2FkKSA+IDIqYXZnX2xvYWRfcGVyX3Rhc2spCi0JCXNncy0+Z3JvdXBfaW1iID0gMTsKLQotCXNncy0+Z3JvdXBfY2FwYWNpdHkgPQotCQlESVZfUk9VTkRfQ0xPU0VTVChncm91cC0+Y3B1X3Bvd2VyLCBTQ0hFRF9MT0FEX1NDQUxFKTsKLX0KLQotLyoqCi0gKiB1cGRhdGVfc2RfbGJfc3RhdHMgLSBVcGRhdGUgc2NoZWRfZ3JvdXAncyBzdGF0aXN0aWNzIGZvciBsb2FkIGJhbGFuY2luZy4KLSAqIEBzZDogc2NoZWRfZG9tYWluIHdob3NlIHN0YXRpc3RpY3MgYXJlIHRvIGJlIHVwZGF0ZWQuCi0gKiBAdGhpc19jcHU6IENwdSBmb3Igd2hpY2ggbG9hZCBiYWxhbmNlIGlzIGN1cnJlbnRseSBwZXJmb3JtZWQuCi0gKiBAaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhpc19jcHUKLSAqIEBzZF9pZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGUgc2NoZWRfZG9tYWluIGNvbnRhaW5pbmcgZ3JvdXAuCi0gKiBAY3B1czogU2V0IG9mIGNwdXMgY29uc2lkZXJlZCBmb3IgbG9hZCBiYWxhbmNpbmcuCi0gKiBAYmFsYW5jZTogU2hvdWxkIHdlIGJhbGFuY2UuCi0gKiBAc2RzOiB2YXJpYWJsZSB0byBob2xkIHRoZSBzdGF0aXN0aWNzIGZvciB0aGlzIHNjaGVkX2RvbWFpbi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZF9sYl9zdGF0cyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IHRoaXNfY3B1LAotCQkJZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCAqc2RfaWRsZSwKLQkJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzLCBpbnQgKmJhbGFuY2UsCi0JCQlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcykKLXsKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpjaGlsZCA9IHNkLT5jaGlsZDsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwID0gc2QtPmdyb3VwczsKLQlzdHJ1Y3Qgc2dfbGJfc3RhdHMgc2dzOwotCWludCBsb2FkX2lkeCwgcHJlZmVyX3NpYmxpbmcgPSAwOwotCi0JaWYgKGNoaWxkICYmIGNoaWxkLT5mbGFncyAmIFNEX1BSRUZFUl9TSUJMSU5HKQotCQlwcmVmZXJfc2libGluZyA9IDE7Ci0KLQlpbml0X3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoc2QsIHNkcywgaWRsZSk7Ci0JbG9hZF9pZHggPSBnZXRfc2RfbG9hZF9pZHgoc2QsIGlkbGUpOwotCi0JZG8gewotCQlpbnQgbG9jYWxfZ3JvdXA7Ci0KLQkJbG9jYWxfZ3JvdXAgPSBjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LAotCQkJCQkgICAgICAgc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpOwotCQltZW1zZXQoJnNncywgMCwgc2l6ZW9mKHNncykpOwotCQl1cGRhdGVfc2dfbGJfc3RhdHMoc2QsIGdyb3VwLCB0aGlzX2NwdSwgaWRsZSwgbG9hZF9pZHgsIHNkX2lkbGUsCi0JCQkJbG9jYWxfZ3JvdXAsIGNwdXMsIGJhbGFuY2UsICZzZ3MpOwotCi0JCWlmIChsb2NhbF9ncm91cCAmJiBiYWxhbmNlICYmICEoKmJhbGFuY2UpKQotCQkJcmV0dXJuOwotCi0JCXNkcy0+dG90YWxfbG9hZCArPSBzZ3MuZ3JvdXBfbG9hZDsKLQkJc2RzLT50b3RhbF9wd3IgKz0gZ3JvdXAtPmNwdV9wb3dlcjsKLQotCQkvKgotCQkgKiBJbiBjYXNlIHRoZSBjaGlsZCBkb21haW4gcHJlZmVycyB0YXNrcyBnbyB0byBzaWJsaW5ncwotCQkgKiBmaXJzdCwgbG93ZXIgdGhlIGdyb3VwIGNhcGFjaXR5IHRvIG9uZSBzbyB0aGF0IHdlJ2xsIHRyeQotCQkgKiBhbmQgbW92ZSBhbGwgdGhlIGV4Y2VzcyB0YXNrcyBhd2F5LgotCQkgKi8KLQkJaWYgKHByZWZlcl9zaWJsaW5nKQotCQkJc2dzLmdyb3VwX2NhcGFjaXR5ID0gbWluKHNncy5ncm91cF9jYXBhY2l0eSwgMVVMKTsKLQotCQlpZiAobG9jYWxfZ3JvdXApIHsKLQkJCXNkcy0+dGhpc19sb2FkID0gc2dzLmF2Z19sb2FkOwotCQkJc2RzLT50aGlzID0gZ3JvdXA7Ci0JCQlzZHMtPnRoaXNfbnJfcnVubmluZyA9IHNncy5zdW1fbnJfcnVubmluZzsKLQkJCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrID0gc2dzLnN1bV93ZWlnaHRlZF9sb2FkOwotCQl9IGVsc2UgaWYgKHNncy5hdmdfbG9hZCA+IHNkcy0+bWF4X2xvYWQgJiYKLQkJCSAgIChzZ3Muc3VtX25yX3J1bm5pbmcgPiBzZ3MuZ3JvdXBfY2FwYWNpdHkgfHwKLQkJCQlzZ3MuZ3JvdXBfaW1iKSkgewotCQkJc2RzLT5tYXhfbG9hZCA9IHNncy5hdmdfbG9hZDsKLQkJCXNkcy0+YnVzaWVzdCA9IGdyb3VwOwotCQkJc2RzLT5idXNpZXN0X25yX3J1bm5pbmcgPSBzZ3Muc3VtX25yX3J1bm5pbmc7Ci0JCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayA9IHNncy5zdW1fd2VpZ2h0ZWRfbG9hZDsKLQkJCXNkcy0+Z3JvdXBfaW1iID0gc2dzLmdyb3VwX2ltYjsKLQkJfQotCi0JCXVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKGdyb3VwLCBzZHMsIGxvY2FsX2dyb3VwLCAmc2dzKTsKLQkJZ3JvdXAgPSBncm91cC0+bmV4dDsKLQl9IHdoaWxlIChncm91cCAhPSBzZC0+Z3JvdXBzKTsKLX0KLQotLyoqCi0gKiBmaXhfc21hbGxfaW1iYWxhbmNlIC0gQ2FsY3VsYXRlIHRoZSBtaW5vciBpbWJhbGFuY2UgdGhhdCBleGlzdHMKLSAqCQkJYW1vbmdzdCB0aGUgZ3JvdXBzIG9mIGEgc2NoZWRfZG9tYWluLCBkdXJpbmcKLSAqCQkJbG9hZCBiYWxhbmNpbmcuCi0gKiBAc2RzOiBTdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4gd2hvc2UgaW1iYWxhbmNlIGlzIHRvIGJlIGNhbGN1bGF0ZWQuCi0gKiBAdGhpc19jcHU6IFRoZSBjcHUgYXQgd2hvc2Ugc2NoZWRfZG9tYWluIHdlJ3JlIHBlcmZvcm1pbmcgbG9hZC1iYWxhbmNlLgotICogQGltYmFsYW5jZTogVmFyaWFibGUgdG8gc3RvcmUgdGhlIGltYmFsYW5jZS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGZpeF9zbWFsbF9pbWJhbGFuY2Uoc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsCi0JCQkJaW50IHRoaXNfY3B1LCB1bnNpZ25lZCBsb25nICppbWJhbGFuY2UpCi17Ci0JdW5zaWduZWQgbG9uZyB0bXAsIHB3cl9ub3cgPSAwLCBwd3JfbW92ZSA9IDA7Ci0JdW5zaWduZWQgaW50IGltYm4gPSAyOwotCi0JaWYgKHNkcy0+dGhpc19ucl9ydW5uaW5nKSB7Ci0JCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrIC89IHNkcy0+dGhpc19ucl9ydW5uaW5nOwotCQlpZiAoc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgPgotCQkJCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrKQotCQkJaW1ibiA9IDE7Ci0JfSBlbHNlCi0JCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrID0KLQkJCWNwdV9hdmdfbG9hZF9wZXJfdGFzayh0aGlzX2NwdSk7Ci0KLQlpZiAoc2RzLT5tYXhfbG9hZCAtIHNkcy0+dGhpc19sb2FkICsgc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgPj0KLQkJCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogaW1ibikgewotCQkqaW1iYWxhbmNlID0gc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2s7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIE9LLCB3ZSBkb24ndCBoYXZlIGVub3VnaCBpbWJhbGFuY2UgdG8ganVzdGlmeSBtb3ZpbmcgdGFza3MsCi0JICogaG93ZXZlciB3ZSBtYXkgYmUgYWJsZSB0byBpbmNyZWFzZSB0b3RhbCBDUFUgcG93ZXIgdXNlZCBieQotCSAqIG1vdmluZyB0aGVtLgotCSAqLwotCi0JcHdyX25vdyArPSBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlciAqCi0JCQltaW4oc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2ssIHNkcy0+bWF4X2xvYWQpOwotCXB3cl9ub3cgKz0gc2RzLT50aGlzLT5jcHVfcG93ZXIgKgotCQkJbWluKHNkcy0+dGhpc19sb2FkX3Blcl90YXNrLCBzZHMtPnRoaXNfbG9hZCk7Ci0JcHdyX25vdyAvPSBTQ0hFRF9MT0FEX1NDQUxFOwotCi0JLyogQW1vdW50IG9mIGxvYWQgd2UnZCBzdWJ0cmFjdCAqLwotCXRtcCA9IChzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpIC8KLQkJc2RzLT5idXNpZXN0LT5jcHVfcG93ZXI7Ci0JaWYgKHNkcy0+bWF4X2xvYWQgPiB0bXApCi0JCXB3cl9tb3ZlICs9IHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyICoKLQkJCW1pbihzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzaywgc2RzLT5tYXhfbG9hZCAtIHRtcCk7Ci0KLQkvKiBBbW91bnQgb2YgbG9hZCB3ZSdkIGFkZCAqLwotCWlmIChzZHMtPm1heF9sb2FkICogc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIgPAotCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayAqIFNDSEVEX0xPQURfU0NBTEUpCi0JCXRtcCA9IChzZHMtPm1heF9sb2FkICogc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIpIC8KLQkJCXNkcy0+dGhpcy0+Y3B1X3Bvd2VyOwotCWVsc2UKLQkJdG1wID0gKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSkgLwotCQkJc2RzLT50aGlzLT5jcHVfcG93ZXI7Ci0JcHdyX21vdmUgKz0gc2RzLT50aGlzLT5jcHVfcG93ZXIgKgotCQkJbWluKHNkcy0+dGhpc19sb2FkX3Blcl90YXNrLCBzZHMtPnRoaXNfbG9hZCArIHRtcCk7Ci0JcHdyX21vdmUgLz0gU0NIRURfTE9BRF9TQ0FMRTsKLQotCS8qIE1vdmUgaWYgd2UgZ2FpbiB0aHJvdWdocHV0ICovCi0JaWYgKHB3cl9tb3ZlID4gcHdyX25vdykKLQkJKmltYmFsYW5jZSA9IHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrOwotfQotCi0vKioKLSAqIGNhbGN1bGF0ZV9pbWJhbGFuY2UgLSBDYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBpbWJhbGFuY2UgcHJlc2VudCB3aXRoaW4gdGhlCi0gKgkJCSBncm91cHMgb2YgYSBnaXZlbiBzY2hlZF9kb21haW4gZHVyaW5nIGxvYWQgYmFsYW5jZS4KLSAqIEBzZHM6IHN0YXRpc3RpY3Mgb2YgdGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBpbWJhbGFuY2UgaXMgdG8gYmUgY2FsY3VsYXRlZC4KLSAqIEB0aGlzX2NwdTogQ3B1IGZvciB3aGljaCBjdXJyZW50bHkgbG9hZCBiYWxhbmNlIGlzIGJlaW5nIHBlcmZvcm1lZC4KLSAqIEBpbWJhbGFuY2U6IFRoZSB2YXJpYWJsZSB0byBzdG9yZSB0aGUgaW1iYWxhbmNlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlX2ltYmFsYW5jZShzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgaW50IHRoaXNfY3B1LAotCQl1bnNpZ25lZCBsb25nICppbWJhbGFuY2UpCi17Ci0JdW5zaWduZWQgbG9uZyBtYXhfcHVsbDsKLQkvKgotCSAqIEluIHRoZSBwcmVzZW5jZSBvZiBzbXAgbmljZSBiYWxhbmNpbmcsIGNlcnRhaW4gc2NlbmFyaW9zIGNhbiBoYXZlCi0JICogbWF4IGxvYWQgbGVzcyB0aGFuIGF2ZyBsb2FkKGFzIHdlIHNraXAgdGhlIGdyb3VwcyBhdCBvciBiZWxvdwotCSAqIGl0cyBjcHVfcG93ZXIsIHdoaWxlIGNhbGN1bGF0aW5nIG1heF9sb2FkLi4pCi0JICovCi0JaWYgKHNkcy0+bWF4X2xvYWQgPCBzZHMtPmF2Z19sb2FkKSB7Ci0JCSppbWJhbGFuY2UgPSAwOwotCQlyZXR1cm4gZml4X3NtYWxsX2ltYmFsYW5jZShzZHMsIHRoaXNfY3B1LCBpbWJhbGFuY2UpOwotCX0KLQotCS8qIERvbid0IHdhbnQgdG8gcHVsbCBzbyBtYW55IHRhc2tzIHRoYXQgYSBncm91cCB3b3VsZCBnbyBpZGxlICovCi0JbWF4X3B1bGwgPSBtaW4oc2RzLT5tYXhfbG9hZCAtIHNkcy0+YXZnX2xvYWQsCi0JCQlzZHMtPm1heF9sb2FkIC0gc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2spOwotCi0JLyogSG93IG11Y2ggbG9hZCB0byBhY3R1YWxseSBtb3ZlIHRvIGVxdWFsaXNlIHRoZSBpbWJhbGFuY2UgKi8KLQkqaW1iYWxhbmNlID0gbWluKG1heF9wdWxsICogc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIsCi0JCShzZHMtPmF2Z19sb2FkIC0gc2RzLT50aGlzX2xvYWQpICogc2RzLT50aGlzLT5jcHVfcG93ZXIpCi0JCQkvIFNDSEVEX0xPQURfU0NBTEU7Ci0KLQkvKgotCSAqIGlmICppbWJhbGFuY2UgaXMgbGVzcyB0aGFuIHRoZSBhdmVyYWdlIGxvYWQgcGVyIHJ1bm5hYmxlIHRhc2sKLQkgKiB0aGVyZSBpcyBubyBnYXVyYW50ZWUgdGhhdCBhbnkgdGFza3Mgd2lsbCBiZSBtb3ZlZCBzbyB3ZSdsbCBoYXZlCi0JICogYSB0aGluayBhYm91dCBidW1waW5nIGl0cyB2YWx1ZSB0byBmb3JjZSBhdCBsZWFzdCBvbmUgdGFzayB0byBiZQotCSAqIG1vdmVkCi0JICovCi0JaWYgKCppbWJhbGFuY2UgPCBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzaykKLQkJcmV0dXJuIGZpeF9zbWFsbF9pbWJhbGFuY2Uoc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKTsKLQotfQotLyoqKioqKiogZmluZF9idXNpZXN0X2dyb3VwKCkgaGVscGVycyBlbmQgaGVyZSAqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKgotICogZmluZF9idXNpZXN0X2dyb3VwIC0gUmV0dXJucyB0aGUgYnVzaWVzdCBncm91cCB3aXRoaW4gdGhlIHNjaGVkX2RvbWFpbgotICogaWYgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLiBJZiB0aGVyZSBpc24ndCBhbiBpbWJhbGFuY2UsIGFuZAotICogdGhlIHVzZXIgaGFzIG9wdGVkIGZvciBwb3dlci1zYXZpbmdzLCBpdCByZXR1cm5zIGEgZ3JvdXAgd2hvc2UKLSAqIENQVXMgY2FuIGJlIHB1dCB0byBpZGxlIGJ5IHJlYmFsYW5jaW5nIHRob3NlIHRhc2tzIGVsc2V3aGVyZSwgaWYKLSAqIHN1Y2ggYSBncm91cCBleGlzdHMuCi0gKgotICogQWxzbyBjYWxjdWxhdGVzIHRoZSBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZCB3aGljaCBzaG91bGQgYmUgbW92ZWQKLSAqIHRvIHJlc3RvcmUgYmFsYW5jZS4KLSAqCi0gKiBAc2Q6IFRoZSBzY2hlZF9kb21haW4gd2hvc2UgYnVzaWVzdCBncm91cCBpcyB0byBiZSByZXR1cm5lZC4KLSAqIEB0aGlzX2NwdTogVGhlIGNwdSBmb3Igd2hpY2ggbG9hZCBiYWxhbmNpbmcgaXMgY3VycmVudGx5IGJlaW5nIHBlcmZvcm1lZC4KLSAqIEBpbWJhbGFuY2U6IFZhcmlhYmxlIHdoaWNoIHN0b3JlcyBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZCB3aGljaCBzaG91bGQKLSAqCQliZSBtb3ZlZCB0byByZXN0b3JlIGJhbGFuY2UvcHV0IGEgZ3JvdXAgdG8gaWRsZS4KLSAqIEBpZGxlOiBUaGUgaWRsZSBzdGF0dXMgb2YgdGhpc19jcHUuCi0gKiBAc2RfaWRsZTogVGhlIGlkbGVuZXNzIG9mIHNkCi0gKiBAY3B1czogVGhlIHNldCBvZiBDUFVzIHVuZGVyIGNvbnNpZGVyYXRpb24gZm9yIGxvYWQtYmFsYW5jaW5nLgotICogQGJhbGFuY2U6IFBvaW50ZXIgdG8gYSB2YXJpYWJsZSBpbmRpY2F0aW5nIGlmIHRoaXNfY3B1Ci0gKglpcyB0aGUgYXBwcm9wcmlhdGUgY3B1IHRvIHBlcmZvcm0gbG9hZCBiYWxhbmNpbmcgYXQgdGhpc19sZXZlbC4KLSAqCi0gKiBSZXR1cm5zOgktIHRoZSBidXNpZXN0IGdyb3VwIGlmIGltYmFsYW5jZSBleGlzdHMuCi0gKgkJLSBJZiBubyBpbWJhbGFuY2UgYW5kIHVzZXIgaGFzIG9wdGVkIGZvciBwb3dlci1zYXZpbmdzIGJhbGFuY2UsCi0gKgkJICAgcmV0dXJuIHRoZSBsZWFzdCBsb2FkZWQgZ3JvdXAgd2hvc2UgQ1BVcyBjYW4gYmUKLSAqCQkgICBwdXQgdG8gaWRsZSBieSByZWJhbGFuY2luZyBpdHMgdGFza3Mgb250byBvdXIgZ3JvdXAuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKgotZmluZF9idXNpZXN0X2dyb3VwKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgdGhpc19jcHUsCi0JCSAgIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCi0JCSAgIGludCAqc2RfaWRsZSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMsIGludCAqYmFsYW5jZSkKLXsKLQlzdHJ1Y3Qgc2RfbGJfc3RhdHMgc2RzOwotCi0JbWVtc2V0KCZzZHMsIDAsIHNpemVvZihzZHMpKTsKLQotCS8qCi0JICogQ29tcHV0ZSB0aGUgdmFyaW91cyBzdGF0aXN0aWNzIHJlbGF2ZW50IGZvciBsb2FkIGJhbGFuY2luZyBhdAotCSAqIHRoaXMgbGV2ZWwuCi0JICovCi0JdXBkYXRlX3NkX2xiX3N0YXRzKHNkLCB0aGlzX2NwdSwgaWRsZSwgc2RfaWRsZSwgY3B1cywKLQkJCQkJYmFsYW5jZSwgJnNkcyk7Ci0KLQkvKiBDYXNlcyB3aGVyZSBpbWJhbGFuY2UgZG9lcyBub3QgZXhpc3QgZnJvbSBQT1Ygb2YgdGhpc19jcHUgKi8KLQkvKiAxKSB0aGlzX2NwdSBpcyBub3QgdGhlIGFwcHJvcHJpYXRlIGNwdSB0byBwZXJmb3JtIGxvYWQgYmFsYW5jaW5nCi0JICogICAgYXQgdGhpcyBsZXZlbC4KLQkgKiAyKSBUaGVyZSBpcyBubyBidXN5IHNpYmxpbmcgZ3JvdXAgdG8gcHVsbCBmcm9tLgotCSAqIDMpIFRoaXMgZ3JvdXAgaXMgdGhlIGJ1c2llc3QgZ3JvdXAuCi0JICogNCkgVGhpcyBncm91cCBpcyBtb3JlIGJ1c3kgdGhhbiB0aGUgYXZnIGJ1c2llbmVzcyBhdCB0aGlzCi0JICogICAgc2NoZWRfZG9tYWluLgotCSAqIDUpIFRoZSBpbWJhbGFuY2UgaXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgbGltaXQuCi0JICogNikgQW55IHJlYmFsYW5jZSB3b3VsZCBsZWFkIHRvIHBpbmctcG9uZwotCSAqLwotCWlmIChiYWxhbmNlICYmICEoKmJhbGFuY2UpKQotCQlnb3RvIHJldDsKLQotCWlmICghc2RzLmJ1c2llc3QgfHwgc2RzLmJ1c2llc3RfbnJfcnVubmluZyA9PSAwKQotCQlnb3RvIG91dF9iYWxhbmNlZDsKLQotCWlmIChzZHMudGhpc19sb2FkID49IHNkcy5tYXhfbG9hZCkKLQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0KLQlzZHMuYXZnX2xvYWQgPSAoU0NIRURfTE9BRF9TQ0FMRSAqIHNkcy50b3RhbF9sb2FkKSAvIHNkcy50b3RhbF9wd3I7Ci0KLQlpZiAoc2RzLnRoaXNfbG9hZCA+PSBzZHMuYXZnX2xvYWQpCi0JCWdvdG8gb3V0X2JhbGFuY2VkOwotCi0JaWYgKDEwMCAqIHNkcy5tYXhfbG9hZCA8PSBzZC0+aW1iYWxhbmNlX3BjdCAqIHNkcy50aGlzX2xvYWQpCi0JCWdvdG8gb3V0X2JhbGFuY2VkOwotCi0Jc2RzLmJ1c2llc3RfbG9hZF9wZXJfdGFzayAvPSBzZHMuYnVzaWVzdF9ucl9ydW5uaW5nOwotCWlmIChzZHMuZ3JvdXBfaW1iKQotCQlzZHMuYnVzaWVzdF9sb2FkX3Blcl90YXNrID0KLQkJCW1pbihzZHMuYnVzaWVzdF9sb2FkX3Blcl90YXNrLCBzZHMuYXZnX2xvYWQpOwotCi0JLyoKLQkgKiBXZSdyZSB0cnlpbmcgdG8gZ2V0IGFsbCB0aGUgY3B1cyB0byB0aGUgYXZlcmFnZV9sb2FkLCBzbyB3ZSBkb24ndAotCSAqIHdhbnQgdG8gcHVzaCBvdXJzZWx2ZXMgYWJvdmUgdGhlIGF2ZXJhZ2UgbG9hZCwgbm9yIGRvIHdlIHdpc2ggdG8KLQkgKiByZWR1Y2UgdGhlIG1heCBsb2FkZWQgY3B1IGJlbG93IHRoZSBhdmVyYWdlIGxvYWQsIGFzIGVpdGhlciBvZiB0aGVzZQotCSAqIGFjdGlvbnMgd291bGQganVzdCByZXN1bHQgaW4gbW9yZSByZWJhbGFuY2luZyBsYXRlciwgYW5kIHBpbmctcG9uZwotCSAqIHRhc2tzIGFyb3VuZC4gVGh1cyB3ZSBsb29rIGZvciB0aGUgbWluaW11bSBwb3NzaWJsZSBpbWJhbGFuY2UuCi0JICogTmVnYXRpdmUgaW1iYWxhbmNlcyAoKndlKiBhcmUgbW9yZSBsb2FkZWQgdGhhbiBhbnlvbmUgZWxzZSkgd2lsbAotCSAqIGJlIGNvdW50ZWQgYXMgbm8gaW1iYWxhbmNlIGZvciB0aGVzZSBwdXJwb3NlcyAtLSB3ZSBjYW4ndCBmaXggdGhhdAotCSAqIGJ5IHB1bGxpbmcgdGFza3MgdG8gdXMuIEJlIGNhcmVmdWwgb2YgbmVnYXRpdmUgbnVtYmVycyBhcyB0aGV5J2xsCi0JICogYXBwZWFyIGFzIHZlcnkgbGFyZ2UgdmFsdWVzIHdpdGggdW5zaWduZWQgbG9uZ3MuCi0JICovCi0JaWYgKHNkcy5tYXhfbG9hZCA8PSBzZHMuYnVzaWVzdF9sb2FkX3Blcl90YXNrKQotCQlnb3RvIG91dF9iYWxhbmNlZDsKLQotCS8qIExvb2tzIGxpa2UgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLiBDb21wdXRlIGl0ICovCi0JY2FsY3VsYXRlX2ltYmFsYW5jZSgmc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKTsKLQlyZXR1cm4gc2RzLmJ1c2llc3Q7Ci0KLW91dF9iYWxhbmNlZDoKLQkvKgotCSAqIFRoZXJlIGlzIG5vIG9idmlvdXMgaW1iYWxhbmNlLiBCdXQgY2hlY2sgaWYgd2UgY2FuIGRvIHNvbWUgYmFsYW5jaW5nCi0JICogdG8gc2F2ZSBwb3dlci4KLQkgKi8KLQlpZiAoY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwKCZzZHMsIHRoaXNfY3B1LCBpbWJhbGFuY2UpKQotCQlyZXR1cm4gc2RzLmJ1c2llc3Q7Ci1yZXQ6Ci0JKmltYmFsYW5jZSA9IDA7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBmaW5kX2J1c2llc3RfcXVldWUgLSBmaW5kIHRoZSBidXNpZXN0IHJ1bnF1ZXVlIGFtb25nIHRoZSBjcHVzIGluIGdyb3VwLgotICovCi1zdGF0aWMgc3RydWN0IHJxICoKLWZpbmRfYnVzaWVzdF9xdWV1ZShzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJICAgdW5zaWduZWQgbG9uZyBpbWJhbGFuY2UsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzKQotewotCXN0cnVjdCBycSAqYnVzaWVzdCA9IE5VTEwsICpycTsKLQl1bnNpZ25lZCBsb25nIG1heF9sb2FkID0gMDsKLQlpbnQgaTsKLQotCWZvcl9lYWNoX2NwdShpLCBzY2hlZF9ncm91cF9jcHVzKGdyb3VwKSkgewotCQl1bnNpZ25lZCBsb25nIHBvd2VyID0gcG93ZXJfb2YoaSk7Ci0JCXVuc2lnbmVkIGxvbmcgY2FwYWNpdHkgPSBESVZfUk9VTkRfQ0xPU0VTVChwb3dlciwgU0NIRURfTE9BRF9TQ0FMRSk7Ci0JCXVuc2lnbmVkIGxvbmcgd2w7Ci0KLQkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGksIGNwdXMpKQotCQkJY29udGludWU7Ci0KLQkJcnEgPSBjcHVfcnEoaSk7Ci0JCXdsID0gd2VpZ2h0ZWRfY3B1bG9hZChpKSAqIFNDSEVEX0xPQURfU0NBTEU7Ci0JCXdsIC89IHBvd2VyOwotCi0JCWlmIChjYXBhY2l0eSAmJiBycS0+bnJfcnVubmluZyA9PSAxICYmIHdsID4gaW1iYWxhbmNlKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHdsID4gbWF4X2xvYWQpIHsKLQkJCW1heF9sb2FkID0gd2w7Ci0JCQlidXNpZXN0ID0gcnE7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gYnVzaWVzdDsKLX0KLQotLyoKLSAqIE1heCBiYWNrb2ZmIGlmIHdlIGVuY291bnRlciBwaW5uZWQgdGFza3MuIFByZXR0eSBhcmJpdHJhcnkgdmFsdWUsIGJ1dAotICogc28gbG9uZyBhcyBpdCBpcyBsYXJnZSBlbm91Z2guCi0gKi8KLSNkZWZpbmUgTUFYX1BJTk5FRF9JTlRFUlZBTAk1MTIKLQotLyogV29ya2luZyBjcHVtYXNrIGZvciBsb2FkX2JhbGFuY2UgYW5kIGxvYWRfYmFsYW5jZV9uZXdpZGxlLiAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKGNwdW1hc2tfdmFyX3QsIGxvYWRfYmFsYW5jZV90bXBtYXNrKTsKLQotLyoKLSAqIENoZWNrIHRoaXNfY3B1IHRvIGVuc3VyZSBpdCBpcyBiYWxhbmNlZCB3aXRoaW4gZG9tYWluLiBBdHRlbXB0IHRvIG1vdmUKLSAqIHRhc2tzIGlmIHRoZXJlIGlzIGFuIGltYmFsYW5jZS4KLSAqLwotc3RhdGljIGludCBsb2FkX2JhbGFuY2UoaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKnRoaXNfcnEsCi0JCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCi0JCQlpbnQgKmJhbGFuY2UpCi17Ci0JaW50IGxkX21vdmVkLCBhbGxfcGlubmVkID0gMCwgYWN0aXZlX2JhbGFuY2UgPSAwLCBzZF9pZGxlID0gMDsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwOwotCXVuc2lnbmVkIGxvbmcgaW1iYWxhbmNlOwotCXN0cnVjdCBycSAqYnVzaWVzdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBjcHVtYXNrICpjcHVzID0gX19nZXRfY3B1X3Zhcihsb2FkX2JhbGFuY2VfdG1wbWFzayk7Ci0KLQljcHVtYXNrX2NvcHkoY3B1cywgY3B1X2FjdGl2ZV9tYXNrKTsKLQotCS8qCi0JICogV2hlbiBwb3dlciBzYXZpbmdzIHBvbGljeSBpcyBlbmFibGVkIGZvciB0aGUgcGFyZW50IGRvbWFpbiwgaWRsZQotCSAqIHNpYmxpbmcgY2FuIHBpY2sgdXAgbG9hZCBpcnJlc3BlY3RpdmUgb2YgYnVzeSBzaWJsaW5ncy4gSW4gdGhpcyBjYXNlLAotCSAqIGxldCB0aGUgc3RhdGUgb2YgaWRsZSBzaWJsaW5nIHBlcmNvbGF0ZSB1cCBhcyBDUFVfSURMRSwgaW5zdGVhZCBvZgotCSAqIHBvcnRyYXlpbmcgaXQgYXMgQ1BVX05PVF9JRExFLgotCSAqLwotCWlmIChpZGxlICE9IENQVV9OT1RfSURMRSAmJiBzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJgotCSAgICAhdGVzdF9zZF9wYXJlbnQoc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKLQkJc2RfaWRsZSA9IDE7Ci0KLQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9jb3VudFtpZGxlXSk7Ci0KLXJlZG86Ci0JdXBkYXRlX3NoYXJlcyhzZCk7Ci0JZ3JvdXAgPSBmaW5kX2J1c2llc3RfZ3JvdXAoc2QsIHRoaXNfY3B1LCAmaW1iYWxhbmNlLCBpZGxlLCAmc2RfaWRsZSwKLQkJCQkgICBjcHVzLCBiYWxhbmNlKTsKLQotCWlmICgqYmFsYW5jZSA9PSAwKQotCQlnb3RvIG91dF9iYWxhbmNlZDsKLQotCWlmICghZ3JvdXApIHsKLQkJc2NoZWRzdGF0X2luYyhzZCwgbGJfbm9idXN5Z1tpZGxlXSk7Ci0JCWdvdG8gb3V0X2JhbGFuY2VkOwotCX0KLQotCWJ1c2llc3QgPSBmaW5kX2J1c2llc3RfcXVldWUoZ3JvdXAsIGlkbGUsIGltYmFsYW5jZSwgY3B1cyk7Ci0JaWYgKCFidXNpZXN0KSB7Ci0JCXNjaGVkc3RhdF9pbmMoc2QsIGxiX25vYnVzeXFbaWRsZV0pOwotCQlnb3RvIG91dF9iYWxhbmNlZDsKLQl9Ci0KLQlCVUdfT04oYnVzaWVzdCA9PSB0aGlzX3JxKTsKLQotCXNjaGVkc3RhdF9hZGQoc2QsIGxiX2ltYmFsYW5jZVtpZGxlXSwgaW1iYWxhbmNlKTsKLQotCWxkX21vdmVkID0gMDsKLQlpZiAoYnVzaWVzdC0+bnJfcnVubmluZyA+IDEpIHsKLQkJLyoKLQkJICogQXR0ZW1wdCB0byBtb3ZlIHRhc2tzLiBJZiBmaW5kX2J1c2llc3RfZ3JvdXAgaGFzIGZvdW5kCi0JCSAqIGFuIGltYmFsYW5jZSBidXQgYnVzaWVzdC0+bnJfcnVubmluZyA8PSAxLCB0aGUgZ3JvdXAgaXMKLQkJICogc3RpbGwgdW5iYWxhbmNlZC4gbGRfbW92ZWQgc2ltcGx5IHN0YXlzIHplcm8sIHNvIGl0IGlzCi0JCSAqIGNvcnJlY3RseSB0cmVhdGVkIGFzIGFuIGltYmFsYW5jZS4KLQkJICovCi0JCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJZG91YmxlX3JxX2xvY2sodGhpc19ycSwgYnVzaWVzdCk7Ci0JCWxkX21vdmVkID0gbW92ZV90YXNrcyh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKLQkJCQkgICAgICBpbWJhbGFuY2UsIHNkLCBpZGxlLCAmYWxsX3Bpbm5lZCk7Ci0JCWRvdWJsZV9ycV91bmxvY2sodGhpc19ycSwgYnVzaWVzdCk7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCQkvKgotCQkgKiBzb21lIG90aGVyIGNwdSBkaWQgdGhlIGxvYWQgYmFsYW5jZSBmb3IgdXMuCi0JCSAqLwotCQlpZiAobGRfbW92ZWQgJiYgdGhpc19jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQkJcmVzY2hlZF9jcHUodGhpc19jcHUpOwotCi0JCS8qIEFsbCB0YXNrcyBvbiB0aGlzIHJ1bnF1ZXVlIHdlcmUgcGlubmVkIGJ5IENQVSBhZmZpbml0eSAqLwotCQlpZiAodW5saWtlbHkoYWxsX3Bpbm5lZCkpIHsKLQkJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdV9vZihidXNpZXN0KSwgY3B1cyk7Ci0JCQlpZiAoIWNwdW1hc2tfZW1wdHkoY3B1cykpCi0JCQkJZ290byByZWRvOwotCQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0JCX0KLQl9Ci0KLQlpZiAoIWxkX21vdmVkKSB7Ci0JCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2ZhaWxlZFtpZGxlXSk7Ci0JCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCsrOwotCi0JCWlmICh1bmxpa2VseShzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPiBzZC0+Y2FjaGVfbmljZV90cmllcysyKSkgewotCi0JCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJ1c2llc3QtPmxvY2ssIGZsYWdzKTsKLQotCQkJLyogZG9uJ3Qga2ljayB0aGUgbWlncmF0aW9uX3RocmVhZCwgaWYgdGhlIGN1cnIKLQkJCSAqIHRhc2sgb24gYnVzaWVzdCBjcHUgY2FuJ3QgYmUgbW92ZWQgdG8gdGhpc19jcHUKLQkJCSAqLwotCQkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LAotCQkJCQkgICAgICAmYnVzaWVzdC0+Y3Vyci0+Y3B1c19hbGxvd2VkKSkgewotCQkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZidXNpZXN0LT5sb2NrLAotCQkJCQkJCSAgICBmbGFncyk7Ci0JCQkJYWxsX3Bpbm5lZCA9IDE7Ci0JCQkJZ290byBvdXRfb25lX3Bpbm5lZDsKLQkJCX0KLQotCQkJaWYgKCFidXNpZXN0LT5hY3RpdmVfYmFsYW5jZSkgewotCQkJCWJ1c2llc3QtPmFjdGl2ZV9iYWxhbmNlID0gMTsKLQkJCQlidXNpZXN0LT5wdXNoX2NwdSA9IHRoaXNfY3B1OwotCQkJCWFjdGl2ZV9iYWxhbmNlID0gMTsKLQkJCX0KLQkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZidXNpZXN0LT5sb2NrLCBmbGFncyk7Ci0JCQlpZiAoYWN0aXZlX2JhbGFuY2UpCi0JCQkJd2FrZV91cF9wcm9jZXNzKGJ1c2llc3QtPm1pZ3JhdGlvbl90aHJlYWQpOwotCi0JCQkvKgotCQkJICogV2UndmUga2lja2VkIGFjdGl2ZSBiYWxhbmNpbmcsIHJlc2V0IHRoZSBmYWlsdXJlCi0JCQkgKiBjb3VudGVyLgotCQkJICovCi0JCQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPSBzZC0+Y2FjaGVfbmljZV90cmllcysxOwotCQl9Ci0JfSBlbHNlCi0JCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA9IDA7Ci0KLQlpZiAobGlrZWx5KCFhY3RpdmVfYmFsYW5jZSkpIHsKLQkJLyogV2Ugd2VyZSB1bmJhbGFuY2VkLCBzbyByZXNldCB0aGUgYmFsYW5jaW5nIGludGVydmFsICovCi0JCXNkLT5iYWxhbmNlX2ludGVydmFsID0gc2QtPm1pbl9pbnRlcnZhbDsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBJZiB3ZSd2ZSBiZWd1biBhY3RpdmUgYmFsYW5jaW5nLCBzdGFydCB0byBiYWNrIG9mZi4gVGhpcwotCQkgKiBjYXNlIG1heSBub3QgYmUgY292ZXJlZCBieSB0aGUgYWxsX3Bpbm5lZCBsb2dpYyBpZiB0aGVyZQotCQkgKiBpcyBvbmx5IDEgdGFzayBvbiB0aGUgYnVzeSBydW5xdWV1ZSAoYmVjYXVzZSB3ZSBkb24ndCBjYWxsCi0JCSAqIG1vdmVfdGFza3MpLgotCQkgKi8KLQkJaWYgKHNkLT5iYWxhbmNlX2ludGVydmFsIDwgc2QtPm1heF9pbnRlcnZhbCkKLQkJCXNkLT5iYWxhbmNlX2ludGVydmFsICo9IDI7Ci0JfQotCi0JaWYgKCFsZF9tb3ZlZCAmJiAhc2RfaWRsZSAmJiBzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJgotCSAgICAhdGVzdF9zZF9wYXJlbnQoc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKLQkJbGRfbW92ZWQgPSAtMTsKLQotCWdvdG8gb3V0OwotCi1vdXRfYmFsYW5jZWQ6Ci0Jc2NoZWRzdGF0X2luYyhzZCwgbGJfYmFsYW5jZWRbaWRsZV0pOwotCi0Jc2QtPm5yX2JhbGFuY2VfZmFpbGVkID0gMDsKLQotb3V0X29uZV9waW5uZWQ6Ci0JLyogdHVuZSB1cCB0aGUgYmFsYW5jaW5nIGludGVydmFsICovCi0JaWYgKChhbGxfcGlubmVkICYmIHNkLT5iYWxhbmNlX2ludGVydmFsIDwgTUFYX1BJTk5FRF9JTlRFUlZBTCkgfHwKLQkJCShzZC0+YmFsYW5jZV9pbnRlcnZhbCA8IHNkLT5tYXhfaW50ZXJ2YWwpKQotCQlzZC0+YmFsYW5jZV9pbnRlcnZhbCAqPSAyOwotCi0JaWYgKCFzZF9pZGxlICYmIHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCi0JICAgICF0ZXN0X3NkX3BhcmVudChzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQotCQlsZF9tb3ZlZCA9IC0xOwotCWVsc2UKLQkJbGRfbW92ZWQgPSAwOwotb3V0OgotCWlmIChsZF9tb3ZlZCkKLQkJdXBkYXRlX3NoYXJlcyhzZCk7Ci0JcmV0dXJuIGxkX21vdmVkOwotfQotCi0vKgotICogQ2hlY2sgdGhpc19jcHUgdG8gZW5zdXJlIGl0IGlzIGJhbGFuY2VkIHdpdGhpbiBkb21haW4uIEF0dGVtcHQgdG8gbW92ZQotICogdGFza3MgaWYgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLgotICoKLSAqIENhbGxlZCBmcm9tIHNjaGVkdWxlIHdoZW4gdGhpc19ycSBpcyBhYm91dCB0byBiZWNvbWUgaWRsZSAoQ1BVX05FV0xZX0lETEUpLgotICogdGhpc19ycSBpcyBsb2NrZWQuCi0gKi8KLXN0YXRpYyBpbnQKLWxvYWRfYmFsYW5jZV9uZXdpZGxlKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkKLXsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwOwotCXN0cnVjdCBycSAqYnVzaWVzdCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBpbWJhbGFuY2U7Ci0JaW50IGxkX21vdmVkID0gMDsKLQlpbnQgc2RfaWRsZSA9IDA7Ci0JaW50IGFsbF9waW5uZWQgPSAwOwotCXN0cnVjdCBjcHVtYXNrICpjcHVzID0gX19nZXRfY3B1X3Zhcihsb2FkX2JhbGFuY2VfdG1wbWFzayk7Ci0KLQljcHVtYXNrX2NvcHkoY3B1cywgY3B1X2FjdGl2ZV9tYXNrKTsKLQotCS8qCi0JICogV2hlbiBwb3dlciBzYXZpbmdzIHBvbGljeSBpcyBlbmFibGVkIGZvciB0aGUgcGFyZW50IGRvbWFpbiwgaWRsZQotCSAqIHNpYmxpbmcgY2FuIHBpY2sgdXAgbG9hZCBpcnJlc3BlY3RpdmUgb2YgYnVzeSBzaWJsaW5ncy4gSW4gdGhpcyBjYXNlLAotCSAqIGxldCB0aGUgc3RhdGUgb2YgaWRsZSBzaWJsaW5nIHBlcmNvbGF0ZSB1cCBhcyBJRExFLCBpbnN0ZWFkIG9mCi0JICogcG9ydHJheWluZyBpdCBhcyBDUFVfTk9UX0lETEUuCi0JICovCi0JaWYgKHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCi0JICAgICF0ZXN0X3NkX3BhcmVudChzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQotCQlzZF9pZGxlID0gMTsKLQotCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2NvdW50W0NQVV9ORVdMWV9JRExFXSk7Ci1yZWRvOgotCXVwZGF0ZV9zaGFyZXNfbG9ja2VkKHRoaXNfcnEsIHNkKTsKLQlncm91cCA9IGZpbmRfYnVzaWVzdF9ncm91cChzZCwgdGhpc19jcHUsICZpbWJhbGFuY2UsIENQVV9ORVdMWV9JRExFLAotCQkJCSAgICZzZF9pZGxlLCBjcHVzLCBOVUxMKTsKLQlpZiAoIWdyb3VwKSB7Ci0JCXNjaGVkc3RhdF9pbmMoc2QsIGxiX25vYnVzeWdbQ1BVX05FV0xZX0lETEVdKTsKLQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0JfQotCi0JYnVzaWVzdCA9IGZpbmRfYnVzaWVzdF9xdWV1ZShncm91cCwgQ1BVX05FV0xZX0lETEUsIGltYmFsYW5jZSwgY3B1cyk7Ci0JaWYgKCFidXNpZXN0KSB7Ci0JCXNjaGVkc3RhdF9pbmMoc2QsIGxiX25vYnVzeXFbQ1BVX05FV0xZX0lETEVdKTsKLQkJZ290byBvdXRfYmFsYW5jZWQ7Ci0JfQotCi0JQlVHX09OKGJ1c2llc3QgPT0gdGhpc19ycSk7Ci0KLQlzY2hlZHN0YXRfYWRkKHNkLCBsYl9pbWJhbGFuY2VbQ1BVX05FV0xZX0lETEVdLCBpbWJhbGFuY2UpOwotCi0JbGRfbW92ZWQgPSAwOwotCWlmIChidXNpZXN0LT5ucl9ydW5uaW5nID4gMSkgewotCQkvKiBBdHRlbXB0IHRvIG1vdmUgdGFza3MgKi8KLQkJZG91YmxlX2xvY2tfYmFsYW5jZSh0aGlzX3JxLCBidXNpZXN0KTsKLQkJLyogdGhpc19ycS0+Y2xvY2sgaXMgYWxyZWFkeSB1cGRhdGVkICovCi0JCXVwZGF0ZV9ycV9jbG9jayhidXNpZXN0KTsKLQkJbGRfbW92ZWQgPSBtb3ZlX3Rhc2tzKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAotCQkJCQlpbWJhbGFuY2UsIHNkLCBDUFVfTkVXTFlfSURMRSwKLQkJCQkJJmFsbF9waW5uZWQpOwotCQlkb3VibGVfdW5sb2NrX2JhbGFuY2UodGhpc19ycSwgYnVzaWVzdCk7Ci0KLQkJaWYgKHVubGlrZWx5KGFsbF9waW5uZWQpKSB7Ci0JCQljcHVtYXNrX2NsZWFyX2NwdShjcHVfb2YoYnVzaWVzdCksIGNwdXMpOwotCQkJaWYgKCFjcHVtYXNrX2VtcHR5KGNwdXMpKQotCQkJCWdvdG8gcmVkbzsKLQkJfQotCX0KLQotCWlmICghbGRfbW92ZWQpIHsKLQkJaW50IGFjdGl2ZV9iYWxhbmNlID0gMDsKLQotCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9mYWlsZWRbQ1BVX05FV0xZX0lETEVdKTsKLQkJaWYgKCFzZF9pZGxlICYmIHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCi0JCSAgICAhdGVzdF9zZF9wYXJlbnQoc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKLQkJCXJldHVybiAtMTsKLQotCQlpZiAoc2NoZWRfbWNfcG93ZXJfc2F2aW5ncyA8IFBPV0VSU0FWSU5HU19CQUxBTkNFX1dBS0VVUCkKLQkJCXJldHVybiAtMTsKLQotCQlpZiAoc2QtPm5yX2JhbGFuY2VfZmFpbGVkKysgPCAyKQotCQkJcmV0dXJuIC0xOwotCi0JCS8qCi0JCSAqIFRoZSBvbmx5IHRhc2sgcnVubmluZyBpbiBhIG5vbi1pZGxlIGNwdSBjYW4gYmUgbW92ZWQgdG8gdGhpcwotCQkgKiBjcHUgaW4gYW4gYXR0ZW1wdCB0byBjb21wbGV0ZWx5IGZyZWV1cCB0aGUgb3RoZXIgQ1BVCi0JCSAqIHBhY2thZ2UuIFRoZSBzYW1lIG1ldGhvZCB1c2VkIHRvIG1vdmUgdGFzayBpbiBsb2FkX2JhbGFuY2UoKQotCQkgKiBoYXZlIGJlZW4gZXh0ZW5kZWQgZm9yIGxvYWRfYmFsYW5jZV9uZXdpZGxlKCkgdG8gc3BlZWR1cAotCQkgKiBjb25zb2xpZGF0aW9uIGF0IHNjaGVkX21jPVBPV0VSU0FWSU5HU19CQUxBTkNFX1dBS0VVUCAoMikKLQkJICoKLQkJICogVGhlIHBhY2thZ2UgcG93ZXIgc2F2aW5nIGxvZ2ljIGNvbWVzIGZyb20KLQkJICogZmluZF9idXNpZXN0X2dyb3VwKCkuICBJZiB0aGVyZSBhcmUgbm8gaW1iYWxhbmNlLCB0aGVuCi0JCSAqIGZfYl9nKCkgd2lsbCByZXR1cm4gTlVMTC4gIEhvd2V2ZXIgd2hlbiBzY2hlZF9tYz17MSwyfSB0aGVuCi0JCSAqIGZfYl9nKCkgd2lsbCBzZWxlY3QgYSBncm91cCBmcm9tIHdoaWNoIGEgcnVubmluZyB0YXNrIG1heSBiZQotCQkgKiBwdWxsZWQgdG8gdGhpcyBjcHUgaW4gb3JkZXIgdG8gbWFrZSB0aGUgb3RoZXIgcGFja2FnZSBpZGxlLgotCQkgKiBJZiB0aGVyZSBpcyBubyBvcHBvcnR1bml0eSB0byBtYWtlIGEgcGFja2FnZSBpZGxlIGFuZCBpZgotCQkgKiB0aGVyZSBhcmUgbm8gaW1iYWxhbmNlLCB0aGVuIGZfYl9nKCkgd2lsbCByZXR1cm4gTlVMTCBhbmQgbm8KLQkJICogYWN0aW9uIHdpbGwgYmUgdGFrZW4gaW4gbG9hZF9iYWxhbmNlX25ld2lkbGUoKS4KLQkJICoKLQkJICogVW5kZXIgbm9ybWFsIHRhc2sgcHVsbCBvcGVyYXRpb24gZHVlIHRvIGltYmFsYW5jZSwgdGhlcmUKLQkJICogd2lsbCBiZSBtb3JlIHRoYW4gb25lIHRhc2sgaW4gdGhlIHNvdXJjZSBydW4gcXVldWUgYW5kCi0JCSAqIG1vdmVfdGFza3MoKSB3aWxsIHN1Y2NlZWQuICBsZF9tb3ZlZCB3aWxsIGJlIHRydWUgYW5kIHRoaXMKLQkJICogYWN0aXZlIGJhbGFuY2UgY29kZSB3aWxsIG5vdCBiZSB0cmlnZ2VyZWQuCi0JCSAqLwotCi0JCS8qIExvY2sgYnVzaWVzdCBpbiBjb3JyZWN0IG9yZGVyIHdoaWxlIHRoaXNfcnEgaXMgaGVsZCAqLwotCQlkb3VibGVfbG9ja19iYWxhbmNlKHRoaXNfcnEsIGJ1c2llc3QpOwotCi0JCS8qCi0JCSAqIGRvbid0IGtpY2sgdGhlIG1pZ3JhdGlvbl90aHJlYWQsIGlmIHRoZSBjdXJyCi0JCSAqIHRhc2sgb24gYnVzaWVzdCBjcHUgY2FuJ3QgYmUgbW92ZWQgdG8gdGhpc19jcHUKLQkJICovCi0JCWlmICghY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwgJmJ1c2llc3QtPmN1cnItPmNwdXNfYWxsb3dlZCkpIHsKLQkJCWRvdWJsZV91bmxvY2tfYmFsYW5jZSh0aGlzX3JxLCBidXNpZXN0KTsKLQkJCWFsbF9waW5uZWQgPSAxOwotCQkJcmV0dXJuIGxkX21vdmVkOwotCQl9Ci0KLQkJaWYgKCFidXNpZXN0LT5hY3RpdmVfYmFsYW5jZSkgewotCQkJYnVzaWVzdC0+YWN0aXZlX2JhbGFuY2UgPSAxOwotCQkJYnVzaWVzdC0+cHVzaF9jcHUgPSB0aGlzX2NwdTsKLQkJCWFjdGl2ZV9iYWxhbmNlID0gMTsKLQkJfQotCi0JCWRvdWJsZV91bmxvY2tfYmFsYW5jZSh0aGlzX3JxLCBidXNpZXN0KTsKLQkJLyoKLQkJICogU2hvdWxkIG5vdCBjYWxsIHR0d3Ugd2hpbGUgaG9sZGluZyBhIHJxLT5sb2NrCi0JCSAqLwotCQlyYXdfc3Bpbl91bmxvY2soJnRoaXNfcnEtPmxvY2spOwotCQlpZiAoYWN0aXZlX2JhbGFuY2UpCi0JCQl3YWtlX3VwX3Byb2Nlc3MoYnVzaWVzdC0+bWlncmF0aW9uX3RocmVhZCk7Ci0JCXJhd19zcGluX2xvY2soJnRoaXNfcnEtPmxvY2spOwotCi0JfSBlbHNlCi0JCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA9IDA7Ci0KLQl1cGRhdGVfc2hhcmVzX2xvY2tlZCh0aGlzX3JxLCBzZCk7Ci0JcmV0dXJuIGxkX21vdmVkOwotCi1vdXRfYmFsYW5jZWQ6Ci0Jc2NoZWRzdGF0X2luYyhzZCwgbGJfYmFsYW5jZWRbQ1BVX05FV0xZX0lETEVdKTsKLQlpZiAoIXNkX2lkbGUgJiYgc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIgJiYKLQkgICAgIXRlc3Rfc2RfcGFyZW50KHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkpCi0JCXJldHVybiAtMTsKLQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBpZGxlX2JhbGFuY2UgaXMgY2FsbGVkIGJ5IHNjaGVkdWxlKCkgaWYgdGhpc19jcHUgaXMgYWJvdXQgdG8gYmVjb21lCi0gKiBpZGxlLiBBdHRlbXB0cyB0byBwdWxsIHRhc2tzIGZyb20gb3RoZXIgQ1BVcy4KLSAqLwotc3RhdGljIHZvaWQgaWRsZV9iYWxhbmNlKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxKQotewotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwotCWludCBwdWxsZWRfdGFzayA9IDA7Ci0JdW5zaWduZWQgbG9uZyBuZXh0X2JhbGFuY2UgPSBqaWZmaWVzICsgSFo7Ci0KLQl0aGlzX3JxLT5pZGxlX3N0YW1wID0gdGhpc19ycS0+Y2xvY2s7Ci0KLQlpZiAodGhpc19ycS0+YXZnX2lkbGUgPCBzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3QpCi0JCXJldHVybjsKLQotCWZvcl9lYWNoX2RvbWFpbih0aGlzX2NwdSwgc2QpIHsKLQkJdW5zaWduZWQgbG9uZyBpbnRlcnZhbDsKLQotCQlpZiAoIShzZC0+ZmxhZ3MgJiBTRF9MT0FEX0JBTEFOQ0UpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHNkLT5mbGFncyAmIFNEX0JBTEFOQ0VfTkVXSURMRSkKLQkJCS8qIElmIHdlJ3ZlIHB1bGxlZCB0YXNrcyBvdmVyIHN0b3Agc2VhcmNoaW5nOiAqLwotCQkJcHVsbGVkX3Rhc2sgPSBsb2FkX2JhbGFuY2VfbmV3aWRsZSh0aGlzX2NwdSwgdGhpc19ycSwKLQkJCQkJCQkgICBzZCk7Ci0KLQkJaW50ZXJ2YWwgPSBtc2Vjc190b19qaWZmaWVzKHNkLT5iYWxhbmNlX2ludGVydmFsKTsKLQkJaWYgKHRpbWVfYWZ0ZXIobmV4dF9iYWxhbmNlLCBzZC0+bGFzdF9iYWxhbmNlICsgaW50ZXJ2YWwpKQotCQkJbmV4dF9iYWxhbmNlID0gc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsOwotCQlpZiAocHVsbGVkX3Rhc2spIHsKLQkJCXRoaXNfcnEtPmlkbGVfc3RhbXAgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKHB1bGxlZF90YXNrIHx8IHRpbWVfYWZ0ZXIoamlmZmllcywgdGhpc19ycS0+bmV4dF9iYWxhbmNlKSkgewotCQkvKgotCQkgKiBXZSBhcmUgZ29pbmcgaWRsZS4gbmV4dF9iYWxhbmNlIG1heSBiZSBzZXQgYmFzZWQgb24KLQkJICogYSBidXN5IHByb2Nlc3Nvci4gU28gcmVzZXQgbmV4dF9iYWxhbmNlLgotCQkgKi8KLQkJdGhpc19ycS0+bmV4dF9iYWxhbmNlID0gbmV4dF9iYWxhbmNlOwotCX0KLX0KLQotLyoKLSAqIGFjdGl2ZV9sb2FkX2JhbGFuY2UgaXMgcnVuIGJ5IG1pZ3JhdGlvbiB0aHJlYWRzLiBJdCBwdXNoZXMgcnVubmluZyB0YXNrcwotICogb2ZmIHRoZSBidXNpZXN0IENQVSBvbnRvIGlkbGUgQ1BVcy4gSXQgcmVxdWlyZXMgYXQgbGVhc3QgMSB0YXNrIHRvIGJlCi0gKiBydW5uaW5nIG9uIGVhY2ggcGh5c2ljYWwgQ1BVIHdoZXJlIHBvc3NpYmxlLCBhbmQgYXZvaWRzIHBoeXNpY2FsIC8KLSAqIGxvZ2ljYWwgaW1iYWxhbmNlcy4KLSAqCi0gKiBDYWxsZWQgd2l0aCBidXNpZXN0X3JxIGxvY2tlZC4KLSAqLwotc3RhdGljIHZvaWQgYWN0aXZlX2xvYWRfYmFsYW5jZShzdHJ1Y3QgcnEgKmJ1c2llc3RfcnEsIGludCBidXNpZXN0X2NwdSkKLXsKLQlpbnQgdGFyZ2V0X2NwdSA9IGJ1c2llc3RfcnEtPnB1c2hfY3B1OwotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwotCXN0cnVjdCBycSAqdGFyZ2V0X3JxOwotCi0JLyogSXMgdGhlcmUgYW55IHRhc2sgdG8gbW92ZT8gKi8KLQlpZiAoYnVzaWVzdF9ycS0+bnJfcnVubmluZyA8PSAxKQotCQlyZXR1cm47Ci0KLQl0YXJnZXRfcnEgPSBjcHVfcnEodGFyZ2V0X2NwdSk7Ci0KLQkvKgotCSAqIFRoaXMgY29uZGl0aW9uIGlzICJpbXBvc3NpYmxlIiwgaWYgaXQgb2NjdXJzCi0JICogd2UgbmVlZCB0byBmaXggaXQuIE9yaWdpbmFsbHkgcmVwb3J0ZWQgYnkKLQkgKiBCam9ybiBIZWxnYWFzIG9uIGEgMTI4LWNwdSBzZXR1cC4KLQkgKi8KLQlCVUdfT04oYnVzaWVzdF9ycSA9PSB0YXJnZXRfcnEpOwotCi0JLyogbW92ZSBhIHRhc2sgZnJvbSBidXNpZXN0X3JxIHRvIHRhcmdldF9ycSAqLwotCWRvdWJsZV9sb2NrX2JhbGFuY2UoYnVzaWVzdF9ycSwgdGFyZ2V0X3JxKTsKLQl1cGRhdGVfcnFfY2xvY2soYnVzaWVzdF9ycSk7Ci0JdXBkYXRlX3JxX2Nsb2NrKHRhcmdldF9ycSk7Ci0KLQkvKiBTZWFyY2ggZm9yIGFuIHNkIHNwYW5uaW5nIHVzIGFuZCB0aGUgdGFyZ2V0IENQVS4gKi8KLQlmb3JfZWFjaF9kb21haW4odGFyZ2V0X2NwdSwgc2QpIHsKLQkJaWYgKChzZC0+ZmxhZ3MgJiBTRF9MT0FEX0JBTEFOQ0UpICYmCi0JCSAgICBjcHVtYXNrX3Rlc3RfY3B1KGJ1c2llc3RfY3B1LCBzY2hlZF9kb21haW5fc3BhbihzZCkpKQotCQkJCWJyZWFrOwotCX0KLQotCWlmIChsaWtlbHkoc2QpKSB7Ci0JCXNjaGVkc3RhdF9pbmMoc2QsIGFsYl9jb3VudCk7Ci0KLQkJaWYgKG1vdmVfb25lX3Rhc2sodGFyZ2V0X3JxLCB0YXJnZXRfY3B1LCBidXNpZXN0X3JxLAotCQkJCSAgc2QsIENQVV9JRExFKSkKLQkJCXNjaGVkc3RhdF9pbmMoc2QsIGFsYl9wdXNoZWQpOwotCQllbHNlCi0JCQlzY2hlZHN0YXRfaW5jKHNkLCBhbGJfZmFpbGVkKTsKLQl9Ci0JZG91YmxlX3VubG9ja19iYWxhbmNlKGJ1c2llc3RfcnEsIHRhcmdldF9ycSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfTk9fSFoKLXN0YXRpYyBzdHJ1Y3QgewotCWF0b21pY190IGxvYWRfYmFsYW5jZXI7Ci0JY3B1bWFza192YXJfdCBjcHVfbWFzazsKLQljcHVtYXNrX3Zhcl90IGlsYl9ncnBfbm9oel9tYXNrOwotfSBub2h6IF9fX19jYWNoZWxpbmVfYWxpZ25lZCA9IHsKLQkubG9hZF9iYWxhbmNlciA9IEFUT01JQ19JTklUKC0xKSwKLX07Ci0KLWludCBnZXRfbm9oel9sb2FkX2JhbGFuY2VyKHZvaWQpCi17Ci0JcmV0dXJuIGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKLS8qKgotICogbG93ZXN0X2ZsYWdfZG9tYWluIC0gUmV0dXJuIGxvd2VzdCBzY2hlZF9kb21haW4gY29udGFpbmluZyBmbGFnLgotICogQGNwdToJVGhlIGNwdSB3aG9zZSBsb3dlc3QgbGV2ZWwgb2Ygc2NoZWQgZG9tYWluIGlzIHRvCi0gKgkJYmUgcmV0dXJuZWQuCi0gKiBAZmxhZzoJVGhlIGZsYWcgdG8gY2hlY2sgZm9yIHRoZSBsb3dlc3Qgc2NoZWRfZG9tYWluCi0gKgkJZm9yIHRoZSBnaXZlbiBjcHUuCi0gKgotICogUmV0dXJucyB0aGUgbG93ZXN0IHNjaGVkX2RvbWFpbiBvZiBhIGNwdSB3aGljaCBjb250YWlucyB0aGUgZ2l2ZW4gZmxhZy4KLSAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpsb3dlc3RfZmxhZ19kb21haW4oaW50IGNwdSwgaW50IGZsYWcpCi17Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7Ci0KLQlmb3JfZWFjaF9kb21haW4oY3B1LCBzZCkKLQkJaWYgKHNkICYmIChzZC0+ZmxhZ3MgJiBmbGFnKSkKLQkJCWJyZWFrOwotCi0JcmV0dXJuIHNkOwotfQotCi0vKioKLSAqIGZvcl9lYWNoX2ZsYWdfZG9tYWluIC0gSXRlcmF0ZXMgb3ZlciBzY2hlZF9kb21haW5zIGNvbnRhaW5pbmcgdGhlIGZsYWcuCi0gKiBAY3B1OglUaGUgY3B1IHdob3NlIGRvbWFpbnMgd2UncmUgaXRlcmF0aW5nIG92ZXIuCi0gKiBAc2Q6CQl2YXJpYWJsZSBob2xkaW5nIHRoZSB2YWx1ZSBvZiB0aGUgcG93ZXJfc2F2aW5nc19zZAotICoJCWZvciBjcHUuCi0gKiBAZmxhZzoJVGhlIGZsYWcgdG8gZmlsdGVyIHRoZSBzY2hlZF9kb21haW5zIHRvIGJlIGl0ZXJhdGVkLgotICoKLSAqIEl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBzY2hlZHVsZXIgZG9tYWlucyBmb3IgYSBnaXZlbiBjcHUgdGhhdCBoYXMgdGhlICdmbGFnJwotICogc2V0LCBzdGFydGluZyBmcm9tIHRoZSBsb3dlc3Qgc2NoZWRfZG9tYWluIHRvIHRoZSBoaWdoZXN0LgotICovCi0jZGVmaW5lIGZvcl9lYWNoX2ZsYWdfZG9tYWluKGNwdSwgc2QsIGZsYWcpIFwKLQlmb3IgKHNkID0gbG93ZXN0X2ZsYWdfZG9tYWluKGNwdSwgZmxhZyk7IFwKLQkJKHNkICYmIChzZC0+ZmxhZ3MgJiBmbGFnKSk7IHNkID0gc2QtPnBhcmVudCkKLQotLyoqCi0gKiBpc19zZW1pX2lkbGVfZ3JvdXAgLSBDaGVja3MgaWYgdGhlIGdpdmVuIHNjaGVkX2dyb3VwIGlzIHNlbWktaWRsZS4KLSAqIEBpbGJfZ3JvdXA6CWdyb3VwIHRvIGJlIGNoZWNrZWQgZm9yIHNlbWktaWRsZW5lc3MKLSAqCi0gKiBSZXR1cm5zOgkxIGlmIHRoZSBncm91cCBpcyBzZW1pLWlkbGUuIDAgb3RoZXJ3aXNlLgotICoKLSAqIFdlIGRlZmluZSBhIHNjaGVkX2dyb3VwIHRvIGJlIHNlbWkgaWRsZSBpZiBpdCBoYXMgYXRsZWFzdCBvbmUgaWRsZS1DUFUKLSAqIGFuZCBhdGxlYXN0IG9uZSBub24taWRsZSBDUFUuIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgZ2l2ZW4KLSAqIHNjaGVkX2dyb3VwIGlzIHNlbWktaWRsZSBvciBub3QuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGlzX3NlbWlfaWRsZV9ncm91cChzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmlsYl9ncm91cCkKLXsKLQljcHVtYXNrX2FuZChub2h6LmlsYl9ncnBfbm9oel9tYXNrLCBub2h6LmNwdV9tYXNrLAotCQkJCQlzY2hlZF9ncm91cF9jcHVzKGlsYl9ncm91cCkpOwotCi0JLyoKLQkgKiBBIHNjaGVkX2dyb3VwIGlzIHNlbWktaWRsZSB3aGVuIGl0IGhhcyBhdGxlYXN0IG9uZSBidXN5IGNwdQotCSAqIGFuZCBhdGxlYXN0IG9uZSBpZGxlIGNwdS4KLQkgKi8KLQlpZiAoY3B1bWFza19lbXB0eShub2h6LmlsYl9ncnBfbm9oel9tYXNrKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoY3B1bWFza19lcXVhbChub2h6LmlsYl9ncnBfbm9oel9tYXNrLCBzY2hlZF9ncm91cF9jcHVzKGlsYl9ncm91cCkpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwotfQotLyoqCi0gKiBmaW5kX25ld19pbGIgLSBGaW5kcyB0aGUgb3B0aW11bSBpZGxlIGxvYWQgYmFsYW5jZXIgZm9yIG5vbWluYXRpb24uCi0gKiBAY3B1OglUaGUgY3B1IHdoaWNoIGlzIG5vbWluYXRpbmcgYSBuZXcgaWRsZV9sb2FkX2JhbGFuY2VyLgotICoKLSAqIFJldHVybnM6CVJldHVybnMgdGhlIGlkIG9mIHRoZSBpZGxlIGxvYWQgYmFsYW5jZXIgaWYgaXQgZXhpc3RzLAotICoJCUVsc2UsIHJldHVybnMgPj0gbnJfY3B1X2lkcy4KLSAqCi0gKiBUaGlzIGFsZ29yaXRobSBwaWNrcyB0aGUgaWRsZSBsb2FkIGJhbGFuY2VyIHN1Y2ggdGhhdCBpdCBiZWxvbmdzIHRvIGEKLSAqIHNlbWktaWRsZSBwb3dlcnNhdmluZ3Mgc2NoZWRfZG9tYWluLiBUaGUgaWRlYSBpcyB0byB0cnkgYW5kIGF2b2lkCi0gKiBjb21wbGV0ZWx5IGlkbGUgcGFja2FnZXMvY29yZXMganVzdCBmb3IgdGhlIHB1cnBvc2Ugb2YgaWRsZSBsb2FkIGJhbGFuY2luZwotICogd2hlbiB0aGVyZSBhcmUgb3RoZXIgaWRsZSBjcHUncyB3aGljaCBhcmUgYmV0dGVyIHN1aXRlZCBmb3IgdGhhdCBqb2IuCi0gKi8KLXN0YXRpYyBpbnQgZmluZF9uZXdfaWxiKGludCBjcHUpCi17Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICppbGJfZ3JvdXA7Ci0KLQkvKgotCSAqIEhhdmUgaWRsZSBsb2FkIGJhbGFuY2VyIHNlbGVjdGlvbiBmcm9tIHNlbWktaWRsZSBwYWNrYWdlcyBvbmx5Ci0JICogd2hlbiBwb3dlci1hd2FyZSBsb2FkIGJhbGFuY2luZyBpcyBlbmFibGVkCi0JICovCi0JaWYgKCEoc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MgfHwgc2NoZWRfbWNfcG93ZXJfc2F2aW5ncykpCi0JCWdvdG8gb3V0X2RvbmU7Ci0KLQkvKgotCSAqIE9wdGltaXplIGZvciB0aGUgY2FzZSB3aGVuIHdlIGhhdmUgbm8gaWRsZSBDUFVzIG9yIG9ubHkgb25lCi0JICogaWRsZSBDUFUuIERvbid0IHdhbGsgdGhlIHNjaGVkX2RvbWFpbiBoaWVyYXJjaHkgaW4gc3VjaCBjYXNlcwotCSAqLwotCWlmIChjcHVtYXNrX3dlaWdodChub2h6LmNwdV9tYXNrKSA8IDIpCi0JCWdvdG8gb3V0X2RvbmU7Ci0KLQlmb3JfZWFjaF9mbGFnX2RvbWFpbihjcHUsIHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkgewotCQlpbGJfZ3JvdXAgPSBzZC0+Z3JvdXBzOwotCi0JCWRvIHsKLQkJCWlmIChpc19zZW1pX2lkbGVfZ3JvdXAoaWxiX2dyb3VwKSkKLQkJCQlyZXR1cm4gY3B1bWFza19maXJzdChub2h6LmlsYl9ncnBfbm9oel9tYXNrKTsKLQotCQkJaWxiX2dyb3VwID0gaWxiX2dyb3VwLT5uZXh0OwotCi0JCX0gd2hpbGUgKGlsYl9ncm91cCAhPSBzZC0+Z3JvdXBzKTsKLQl9Ci0KLW91dF9kb25lOgotCXJldHVybiBjcHVtYXNrX2ZpcnN0KG5vaHouY3B1X21hc2spOwotfQotI2Vsc2UgLyogIChDT05GSUdfU0NIRURfTUMgfHwgQ09ORklHX1NDSEVEX1NNVCkgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV3X2lsYihpbnQgY2FsbF9jcHUpCi17Ci0JcmV0dXJuIGNwdW1hc2tfZmlyc3Qobm9oei5jcHVfbWFzayk7Ci19Ci0jZW5kaWYKLQotLyoKLSAqIFRoaXMgcm91dGluZSB3aWxsIHRyeSB0byBub21pbmF0ZSB0aGUgaWxiIChpZGxlIGxvYWQgYmFsYW5jaW5nKQotICogb3duZXIgYW1vbmcgdGhlIGNwdXMgd2hvc2UgdGlja3MgYXJlIHN0b3BwZWQuIGlsYiBvd25lciB3aWxsIGRvIHRoZSBpZGxlCi0gKiBsb2FkIGJhbGFuY2luZyBvbiBiZWhhbGYgb2YgYWxsIHRob3NlIGNwdXMuIElmIGFsbCB0aGUgY3B1cyBpbiB0aGUgc3lzdGVtCi0gKiBnbyBpbnRvIHRoaXMgdGlja2xlc3MgbW9kZSwgdGhlbiB0aGVyZSB3aWxsIGJlIG5vIGlsYiBvd25lciAoYXMgdGhlcmUgaXMKLSAqIG5vIG5lZWQgZm9yIG9uZSkgYW5kIGFsbCB0aGUgY3B1cyB3aWxsIHNsZWVwIHRpbGwgdGhlIG5leHQgd2FrZXVwIGV2ZW50Ci0gKiBhcnJpdmVzLi4uCi0gKgotICogRm9yIHRoZSBpbGIgb3duZXIsIHRpY2sgaXMgbm90IHN0b3BwZWQuIEFuZCB0aGlzIHRpY2sgd2lsbCBiZSB1c2VkCi0gKiBmb3IgaWRsZSBsb2FkIGJhbGFuY2luZy4gaWxiIG93bmVyIHdpbGwgc3RpbGwgYmUgcGFydCBvZgotICogbm9oei5jcHVfbWFzay4uCi0gKgotICogV2hpbGUgc3RvcHBpbmcgdGhlIHRpY2ssIHRoaXMgY3B1IHdpbGwgYmVjb21lIHRoZSBpbGIgb3duZXIgaWYgdGhlcmUKLSAqIGlzIG5vIG90aGVyIG93bmVyLiBBbmQgd2lsbCBiZSB0aGUgb3duZXIgdGlsbCB0aGF0IGNwdSBiZWNvbWVzIGJ1c3kKLSAqIG9yIGlmIGFsbCBjcHVzIGluIHRoZSBzeXN0ZW0gc3RvcCB0aGVpciB0aWNrcyBhdCB3aGljaCBwb2ludAotICogdGhlcmUgaXMgbm8gbmVlZCBmb3IgaWxiIG93bmVyLgotICoKLSAqIFdoZW4gdGhlIGlsYiBvd25lciBiZWNvbWVzIGJ1c3ksIGl0IG5vbWluYXRlcyBhbm90aGVyIG93bmVyLCBkdXJpbmcgdGhlCi0gKiBuZXh0IGJ1c3kgc2NoZWR1bGVyX3RpY2soKQotICovCi1pbnQgc2VsZWN0X25vaHpfbG9hZF9iYWxhbmNlcihpbnQgc3RvcF90aWNrKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlpZiAoc3RvcF90aWNrKSB7Ci0JCWNwdV9ycShjcHUpLT5pbl9ub2h6X3JlY2VudGx5ID0gMTsKLQotCQlpZiAoIWNwdV9hY3RpdmUoY3B1KSkgewotCQkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpICE9IGNwdSkKLQkJCQlyZXR1cm4gMDsKLQotCQkJLyoKLQkJCSAqIElmIHdlIGFyZSBnb2luZyBvZmZsaW5lIGFuZCBzdGlsbCB0aGUgbGVhZGVyLAotCQkJICogZ2l2ZSB1cCEKLQkJCSAqLwotCQkJaWYgKGF0b21pY19jbXB4Y2hnKCZub2h6LmxvYWRfYmFsYW5jZXIsIGNwdSwgLTEpICE9IGNwdSkKLQkJCQlCVUcoKTsKLQotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQljcHVtYXNrX3NldF9jcHUoY3B1LCBub2h6LmNwdV9tYXNrKTsKLQotCQkvKiB0aW1lIGZvciBpbGIgb3duZXIgYWxzbyB0byBzbGVlcCAqLwotCQlpZiAoY3B1bWFza193ZWlnaHQobm9oei5jcHVfbWFzaykgPT0gbnVtX2FjdGl2ZV9jcHVzKCkpIHsKLQkJCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUpCi0JCQkJYXRvbWljX3NldCgmbm9oei5sb2FkX2JhbGFuY2VyLCAtMSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSAtMSkgewotCQkJLyogbWFrZSBtZSB0aGUgaWxiIG93bmVyICovCi0JCQlpZiAoYXRvbWljX2NtcHhjaGcoJm5vaHoubG9hZF9iYWxhbmNlciwgLTEsIGNwdSkgPT0gLTEpCi0JCQkJcmV0dXJuIDE7Ci0JCX0gZWxzZSBpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gY3B1KSB7Ci0JCQlpbnQgbmV3X2lsYjsKLQotCQkJaWYgKCEoc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MgfHwKLQkJCQkJCXNjaGVkX21jX3Bvd2VyX3NhdmluZ3MpKQotCQkJCXJldHVybiAxOwotCQkJLyoKLQkJCSAqIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhIG1vcmUgcG93ZXItZWZmaWNpZW50Ci0JCQkgKiBpbGIuCi0JCQkgKi8KLQkJCW5ld19pbGIgPSBmaW5kX25ld19pbGIoY3B1KTsKLQkJCWlmIChuZXdfaWxiIDwgbnJfY3B1X2lkcyAmJiBuZXdfaWxiICE9IGNwdSkgewotCQkJCWF0b21pY19zZXQoJm5vaHoubG9hZF9iYWxhbmNlciwgLTEpOwotCQkJCXJlc2NoZWRfY3B1KG5ld19pbGIpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBub2h6LmNwdV9tYXNrKSkKLQkJCXJldHVybiAwOwotCi0JCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9oei5jcHVfbWFzayk7Ci0KLQkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSkKLQkJCWlmIChhdG9taWNfY21weGNoZygmbm9oei5sb2FkX2JhbGFuY2VyLCBjcHUsIC0xKSAhPSBjcHUpCi0JCQkJQlVHKCk7Ci0JfQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYmFsYW5jaW5nKTsKLQotLyoKLSAqIEl0IGNoZWNrcyBlYWNoIHNjaGVkdWxpbmcgZG9tYWluIHRvIHNlZSBpZiBpdCBpcyBkdWUgdG8gYmUgYmFsYW5jZWQsCi0gKiBhbmQgaW5pdGlhdGVzIGEgYmFsYW5jaW5nIG9wZXJhdGlvbiBpZiBzby4KLSAqCi0gKiBCYWxhbmNpbmcgcGFyYW1ldGVycyBhcmUgc2V0IHVwIGluIGFyY2hfaW5pdF9zY2hlZF9kb21haW5zLgotICovCi1zdGF0aWMgdm9pZCByZWJhbGFuY2VfZG9tYWlucyhpbnQgY3B1LCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKLXsKLQlpbnQgYmFsYW5jZSA9IDE7Ci0Jc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOwotCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWw7Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7Ci0JLyogRWFybGllc3QgdGltZSB3aGVuIHdlIGhhdmUgdG8gZG8gcmViYWxhbmNlIGFnYWluICovCi0JdW5zaWduZWQgbG9uZyBuZXh0X2JhbGFuY2UgPSBqaWZmaWVzICsgNjAqSFo7Ci0JaW50IHVwZGF0ZV9uZXh0X2JhbGFuY2UgPSAwOwotCWludCBuZWVkX3NlcmlhbGl6ZTsKLQotCWZvcl9lYWNoX2RvbWFpbihjcHUsIHNkKSB7Ci0JCWlmICghKHNkLT5mbGFncyAmIFNEX0xPQURfQkFMQU5DRSkpCi0JCQljb250aW51ZTsKLQotCQlpbnRlcnZhbCA9IHNkLT5iYWxhbmNlX2ludGVydmFsOwotCQlpZiAoaWRsZSAhPSBDUFVfSURMRSkKLQkJCWludGVydmFsICo9IHNkLT5idXN5X2ZhY3RvcjsKLQotCQkvKiBzY2FsZSBtcyB0byBqaWZmaWVzICovCi0JCWludGVydmFsID0gbXNlY3NfdG9famlmZmllcyhpbnRlcnZhbCk7Ci0JCWlmICh1bmxpa2VseSghaW50ZXJ2YWwpKQotCQkJaW50ZXJ2YWwgPSAxOwotCQlpZiAoaW50ZXJ2YWwgPiBIWipOUl9DUFVTLzEwKQotCQkJaW50ZXJ2YWwgPSBIWipOUl9DUFVTLzEwOwotCi0JCW5lZWRfc2VyaWFsaXplID0gc2QtPmZsYWdzICYgU0RfU0VSSUFMSVpFOwotCi0JCWlmIChuZWVkX3NlcmlhbGl6ZSkgewotCQkJaWYgKCFzcGluX3RyeWxvY2soJmJhbGFuY2luZykpCi0JCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBzZC0+bGFzdF9iYWxhbmNlICsgaW50ZXJ2YWwpKSB7Ci0JCQlpZiAobG9hZF9iYWxhbmNlKGNwdSwgcnEsIHNkLCBpZGxlLCAmYmFsYW5jZSkpIHsKLQkJCQkvKgotCQkJCSAqIFdlJ3ZlIHB1bGxlZCB0YXNrcyBvdmVyIHNvIGVpdGhlciB3ZSdyZSBubwotCQkJCSAqIGxvbmdlciBpZGxlLCBvciBvbmUgb2Ygb3VyIFNNVCBzaWJsaW5ncyBpcwotCQkJCSAqIG5vdCBpZGxlLgotCQkJCSAqLwotCQkJCWlkbGUgPSBDUFVfTk9UX0lETEU7Ci0JCQl9Ci0JCQlzZC0+bGFzdF9iYWxhbmNlID0gamlmZmllczsKLQkJfQotCQlpZiAobmVlZF9zZXJpYWxpemUpCi0JCQlzcGluX3VubG9jaygmYmFsYW5jaW5nKTsKLW91dDoKLQkJaWYgKHRpbWVfYWZ0ZXIobmV4dF9iYWxhbmNlLCBzZC0+bGFzdF9iYWxhbmNlICsgaW50ZXJ2YWwpKSB7Ci0JCQluZXh0X2JhbGFuY2UgPSBzZC0+bGFzdF9iYWxhbmNlICsgaW50ZXJ2YWw7Ci0JCQl1cGRhdGVfbmV4dF9iYWxhbmNlID0gMTsKLQkJfQotCi0JCS8qCi0JCSAqIFN0b3AgdGhlIGxvYWQgYmFsYW5jZSBhdCB0aGlzIGxldmVsLiBUaGVyZSBpcyBhbm90aGVyCi0JCSAqIENQVSBpbiBvdXIgc2NoZWQgZ3JvdXAgd2hpY2ggaXMgZG9pbmcgbG9hZCBiYWxhbmNpbmcgbW9yZQotCQkgKiBhY3RpdmVseS4KLQkJICovCi0JCWlmICghYmFsYW5jZSkKLQkJCWJyZWFrOwotCX0KLQotCS8qCi0JICogbmV4dF9iYWxhbmNlIHdpbGwgYmUgdXBkYXRlZCBvbmx5IHdoZW4gdGhlcmUgaXMgYSBuZWVkLgotCSAqIFdoZW4gdGhlIGNwdSBpcyBhdHRhY2hlZCB0byBudWxsIGRvbWFpbiBmb3IgZXgsIGl0IHdpbGwgbm90IGJlCi0JICogdXBkYXRlZC4KLQkgKi8KLQlpZiAobGlrZWx5KHVwZGF0ZV9uZXh0X2JhbGFuY2UpKQotCQlycS0+bmV4dF9iYWxhbmNlID0gbmV4dF9iYWxhbmNlOwotfQotCi0vKgotICogcnVuX3JlYmFsYW5jZV9kb21haW5zIGlzIHRyaWdnZXJlZCB3aGVuIG5lZWRlZCBmcm9tIHRoZSBzY2hlZHVsZXIgdGljay4KLSAqIEluIENPTkZJR19OT19IWiBjYXNlLCB0aGUgaWRsZSBsb2FkIGJhbGFuY2Ugb3duZXIgd2lsbCBkbyB0aGUKLSAqIHJlYmFsYW5jaW5nIGZvciBhbGwgdGhlIGNwdXMgZm9yIHdob20gc2NoZWR1bGVyIHRpY2tzIGFyZSBzdG9wcGVkLgotICovCi1zdGF0aWMgdm9pZCBydW5fcmViYWxhbmNlX2RvbWFpbnMoc3RydWN0IHNvZnRpcnFfYWN0aW9uICpoKQotewotCWludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlzdHJ1Y3QgcnEgKnRoaXNfcnEgPSBjcHVfcnEodGhpc19jcHUpOwotCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlID0gdGhpc19ycS0+aWRsZV9hdF90aWNrID8KLQkJCQkJCUNQVV9JRExFIDogQ1BVX05PVF9JRExFOwotCi0JcmViYWxhbmNlX2RvbWFpbnModGhpc19jcHUsIGlkbGUpOwotCi0jaWZkZWYgQ09ORklHX05PX0haCi0JLyoKLQkgKiBJZiB0aGlzIGNwdSBpcyB0aGUgb3duZXIgZm9yIGlkbGUgbG9hZCBiYWxhbmNpbmcsIHRoZW4gZG8gdGhlCi0JICogYmFsYW5jaW5nIG9uIGJlaGFsZiBvZiB0aGUgb3RoZXIgaWRsZSBjcHVzIHdob3NlIHRpY2tzIGFyZQotCSAqIHN0b3BwZWQuCi0JICovCi0JaWYgKHRoaXNfcnEtPmlkbGVfYXRfdGljayAmJgotCSAgICBhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSB0aGlzX2NwdSkgewotCQlzdHJ1Y3QgcnEgKnJxOwotCQlpbnQgYmFsYW5jZV9jcHU7Ci0KLQkJZm9yX2VhY2hfY3B1KGJhbGFuY2VfY3B1LCBub2h6LmNwdV9tYXNrKSB7Ci0JCQlpZiAoYmFsYW5jZV9jcHUgPT0gdGhpc19jcHUpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qCi0JCQkgKiBJZiB0aGlzIGNwdSBnZXRzIHdvcmsgdG8gZG8sIHN0b3AgdGhlIGxvYWQgYmFsYW5jaW5nCi0JCQkgKiB3b3JrIGJlaW5nIGRvbmUgZm9yIG90aGVyIGNwdXMuIE5leHQgbG9hZAotCQkJICogYmFsYW5jaW5nIG93bmVyIHdpbGwgcGljayBpdCB1cC4KLQkJCSAqLwotCQkJaWYgKG5lZWRfcmVzY2hlZCgpKQotCQkJCWJyZWFrOwotCi0JCQlyZWJhbGFuY2VfZG9tYWlucyhiYWxhbmNlX2NwdSwgQ1BVX0lETEUpOwotCi0JCQlycSA9IGNwdV9ycShiYWxhbmNlX2NwdSk7Ci0JCQlpZiAodGltZV9hZnRlcih0aGlzX3JxLT5uZXh0X2JhbGFuY2UsIHJxLT5uZXh0X2JhbGFuY2UpKQotCQkJCXRoaXNfcnEtPm5leHRfYmFsYW5jZSA9IHJxLT5uZXh0X2JhbGFuY2U7Ci0JCX0KLQl9Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBpbnQgb25fbnVsbF9kb21haW4oaW50IGNwdSkKLXsKLQlyZXR1cm4gIXJjdV9kZXJlZmVyZW5jZShjcHVfcnEoY3B1KS0+c2QpOwotfQotCi0vKgotICogVHJpZ2dlciB0aGUgU0NIRURfU09GVElSUSBpZiBpdCBpcyB0aW1lIHRvIGRvIHBlcmlvZGljIGxvYWQgYmFsYW5jaW5nLgotICoKLSAqIEluIGNhc2Ugb2YgQ09ORklHX05PX0haLCB0aGlzIGlzIHRoZSBwbGFjZSB3aGVyZSB3ZSBub21pbmF0ZSBhIG5ldwotICogaWRsZSBsb2FkIGJhbGFuY2luZyBvd25lciBvciBkZWNpZGUgdG8gc3RvcCB0aGUgcGVyaW9kaWMgbG9hZCBiYWxhbmNpbmcsCi0gKiBpZiB0aGUgd2hvbGUgc3lzdGVtIGlzIGlkbGUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmlnZ2VyX2xvYWRfYmFsYW5jZShzdHJ1Y3QgcnEgKnJxLCBpbnQgY3B1KQotewotI2lmZGVmIENPTkZJR19OT19IWgotCS8qCi0JICogSWYgd2Ugd2VyZSBpbiB0aGUgbm9oeiBtb2RlIHJlY2VudGx5IGFuZCBidXN5IGF0IHRoZSBjdXJyZW50Ci0JICogc2NoZWR1bGVyIHRpY2ssIHRoZW4gY2hlY2sgaWYgd2UgbmVlZCB0byBub21pbmF0ZSBuZXcgaWRsZQotCSAqIGxvYWQgYmFsYW5jZXIuCi0JICovCi0JaWYgKHJxLT5pbl9ub2h6X3JlY2VudGx5ICYmICFycS0+aWRsZV9hdF90aWNrKSB7Ci0JCXJxLT5pbl9ub2h6X3JlY2VudGx5ID0gMDsKLQotCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gY3B1KSB7Ci0JCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG5vaHouY3B1X21hc2spOwotCQkJYXRvbWljX3NldCgmbm9oei5sb2FkX2JhbGFuY2VyLCAtMSk7Ci0JCX0KLQotCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gLTEpIHsKLQkJCWludCBpbGIgPSBmaW5kX25ld19pbGIoY3B1KTsKLQotCQkJaWYgKGlsYiA8IG5yX2NwdV9pZHMpCi0JCQkJcmVzY2hlZF9jcHUoaWxiKTsKLQkJfQotCX0KLQotCS8qCi0JICogSWYgdGhpcyBjcHUgaXMgaWRsZSBhbmQgZG9pbmcgaWRsZSBsb2FkIGJhbGFuY2luZyBmb3IgYWxsIHRoZQotCSAqIGNwdXMgd2l0aCB0aWNrcyBzdG9wcGVkLCBpcyBpdCB0aW1lIGZvciB0aGF0IHRvIHN0b3A/Ci0JICovCi0JaWYgKHJxLT5pZGxlX2F0X3RpY2sgJiYgYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gY3B1ICYmCi0JICAgIGNwdW1hc2tfd2VpZ2h0KG5vaHouY3B1X21hc2spID09IG51bV9vbmxpbmVfY3B1cygpKSB7Ci0JCXJlc2NoZWRfY3B1KGNwdSk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIElmIHRoaXMgY3B1IGlzIGlkbGUgYW5kIHRoZSBpZGxlIGxvYWQgYmFsYW5jaW5nIGlzIGRvbmUgYnkKLQkgKiBzb21lb25lIGVsc2UsIHRoZW4gbm8gbmVlZCByYWlzZSB0aGUgU0NIRURfU09GVElSUQotCSAqLwotCWlmIChycS0+aWRsZV9hdF90aWNrICYmIGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpICE9IGNwdSAmJgotCSAgICBjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbm9oei5jcHVfbWFzaykpCi0JCXJldHVybjsKLSNlbmRpZgotCS8qIERvbid0IG5lZWQgdG8gcmViYWxhbmNlIHdoaWxlIGF0dGFjaGVkIHRvIE5VTEwgZG9tYWluICovCi0JaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgcnEtPm5leHRfYmFsYW5jZSkgJiYKLQkgICAgbGlrZWx5KCFvbl9udWxsX2RvbWFpbihjcHUpKSkKLQkJcmFpc2Vfc29mdGlycShTQ0hFRF9TT0ZUSVJRKTsKLX0KLQotI2Vsc2UJLyogQ09ORklHX1NNUCAqLwotCi0vKgotICogb24gVVAgd2UgZG8gbm90IG5lZWQgdG8gYmFsYW5jZSBiZXR3ZWVuIENQVXM6Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZGxlX2JhbGFuY2UoaW50IGNwdSwgc3RydWN0IHJxICpycSkKLXsKLX0KLQogI2VuZGlmCiAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBrZXJuZWxfc3RhdCwga3N0YXQpOwpAQCAtNTMwOSw3ICszNTE1LDcgQEAKIAljdXJyLT5zY2hlZF9jbGFzcy0+dGFza190aWNrKHJxLCBjdXJyLCAwKTsKIAlyYXdfc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKIAotCXBlcmZfZXZlbnRfdGFza190aWNrKGN1cnIsIGNwdSk7CisJcGVyZl9ldmVudF90YXNrX3RpY2soY3Vycik7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJcnEtPmlkbGVfYXRfdGljayA9IGlkbGVfY3B1KGNwdSk7CkBAIC01NTIzLDcgKzM3MjksNyBAQAogCiAJaWYgKGxpa2VseShwcmV2ICE9IG5leHQpKSB7CiAJCXNjaGVkX2luZm9fc3dpdGNoKHByZXYsIG5leHQpOwotCQlwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHByZXYsIG5leHQsIGNwdSk7CisJCXBlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQocHJldiwgbmV4dCk7CiAKIAkJcnEtPm5yX3N3aXRjaGVzKys7CiAJCXJxLT5jdXJyID0gbmV4dDsKQEAgLTYwNTQsNyArNDI2MCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgb2xkcHJpbywgb25fcnEsIHJ1bm5pbmc7CiAJc3RydWN0IHJxICpycTsKLQljb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKnByZXZfY2xhc3MgPSBwLT5zY2hlZF9jbGFzczsKKwljb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKnByZXZfY2xhc3M7CiAKIAlCVUdfT04ocHJpbyA8IDAgfHwgcHJpbyA+IE1BWF9QUklPKTsKIApAQCAtNjA2Miw2ICs0MjY4LDcgQEAKIAl1cGRhdGVfcnFfY2xvY2socnEpOwogCiAJb2xkcHJpbyA9IHAtPnByaW87CisJcHJldl9jbGFzcyA9IHAtPnNjaGVkX2NsYXNzOwogCW9uX3JxID0gcC0+c2Uub25fcnE7CiAJcnVubmluZyA9IHRhc2tfY3VycmVudChycSwgcCk7CiAJaWYgKG9uX3JxKQpAQCAtNjA3OSw3ICs0Mjg2LDcgQEAKIAlpZiAocnVubmluZykKIAkJcC0+c2NoZWRfY2xhc3MtPnNldF9jdXJyX3Rhc2socnEpOwogCWlmIChvbl9ycSkgewotCQllbnF1ZXVlX3Rhc2socnEsIHAsIDApOworCQllbnF1ZXVlX3Rhc2socnEsIHAsIDAsIG9sZHByaW8gPCBwcmlvKTsKIAogCQljaGVja19jbGFzc19jaGFuZ2VkKHJxLCBwLCBwcmV2X2NsYXNzLCBvbGRwcmlvLCBydW5uaW5nKTsKIAl9CkBAIC02MTIzLDcgKzQzMzAsNyBAQAogCWRlbHRhID0gcC0+cHJpbyAtIG9sZF9wcmlvOwogCiAJaWYgKG9uX3JxKSB7Ci0JCWVucXVldWVfdGFzayhycSwgcCwgMCk7CisJCWVucXVldWVfdGFzayhycSwgcCwgMCwgZmFsc2UpOwogCQkvKgogCQkgKiBJZiB0aGUgdGFzayBpbmNyZWFzZWQgaXRzIHByaW9yaXR5IG9yIGlzIHJ1bm5pbmcgYW5kCiAJCSAqIGxvd2VyZWQgaXRzIHByaW9yaXR5LCB0aGVuIHJlc2NoZWR1bGUgaXRzIENQVToKQEAgLTYyODEsNyArNDQ4OCw3IEBACiB7CiAJaW50IHJldHZhbCwgb2xkcHJpbywgb2xkcG9saWN5ID0gLTEsIG9uX3JxLCBydW5uaW5nOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpwcmV2X2NsYXNzID0gcC0+c2NoZWRfY2xhc3M7CisJY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpwcmV2X2NsYXNzOwogCXN0cnVjdCBycSAqcnE7CiAJaW50IHJlc2V0X29uX2Zvcms7CiAKQEAgLTYzOTUsNiArNDYwMiw3IEBACiAJcC0+c2NoZWRfcmVzZXRfb25fZm9yayA9IHJlc2V0X29uX2Zvcms7CiAKIAlvbGRwcmlvID0gcC0+cHJpbzsKKwlwcmV2X2NsYXNzID0gcC0+c2NoZWRfY2xhc3M7CiAJX19zZXRzY2hlZHVsZXIocnEsIHAsIHBvbGljeSwgcGFyYW0tPnNjaGVkX3ByaW9yaXR5KTsKIAogCWlmIChydW5uaW5nKQpAQCAtNzE0NSwyNyArNTM1Myw4IEBACiAJc3RydWN0IHJxICpycTsKIAlpbnQgcmV0ID0gMDsKIAotCS8qCi0JICogU2luY2Ugd2UgcmVseSBvbiB3YWtlLXVwcyB0byBtaWdyYXRlIHNsZWVwaW5nIHRhc2tzLCBkb24ndCBjaGFuZ2UKLQkgKiB0aGUgLT5jcHVzX2FsbG93ZWQgbWFzayBmcm9tIHVuZGVyIHdha2luZyB0YXNrcywgd2hpY2ggd291bGQgYmUKLQkgKiBwb3NzaWJsZSB3aGVuIHdlIGNoYW5nZSBycS0+bG9jayBpbiB0dHd1KCksIHNvIHN5bmNocm9uaXplIGFnYWluc3QKLQkgKiBUQVNLX1dBS0lORyB0byBhdm9pZCB0aGF0LgotCSAqCi0JICogTWFrZSBhbiBleGNlcHRpb24gZm9yIGZyZXNobHkgY2xvbmVkIHRhc2tzLCBzaW5jZSBjcHVzZXQgbmFtZXNwYWNlcwotCSAqIG1pZ2h0IG1vdmUgdGhlIHRhc2sgYWJvdXQsIHdlIGhhdmUgdG8gdmFsaWRhdGUgdGhlIHRhcmdldCBpbgotCSAqIHdha2VfdXBfbmV3X3Rhc2soKSBhbnl3YXkgc2luY2UgdGhlIGNwdSBtaWdodCBoYXZlIGdvbmUgYXdheS4KLQkgKi8KLWFnYWluOgotCXdoaWxlIChwLT5zdGF0ZSA9PSBUQVNLX1dBS0lORyAmJiAhKHAtPmZsYWdzICYgUEZfU1RBUlRJTkcpKQotCQljcHVfcmVsYXgoKTsKLQogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CiAKLQlpZiAocC0+c3RhdGUgPT0gVEFTS19XQUtJTkcgJiYgIShwLT5mbGFncyAmIFBGX1NUQVJUSU5HKSkgewotCQl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKLQkJZ290byBhZ2FpbjsKLQl9Ci0KIAlpZiAoIWNwdW1hc2tfaW50ZXJzZWN0cyhuZXdfbWFzaywgY3B1X2FjdGl2ZV9tYXNrKSkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKQEAgLTk0NTIsNyArNzY0MSw2IEBACiAJdGctPnJ0X3JxW2NwdV0gPSBydF9ycTsKIAlpbml0X3J0X3JxKHJ0X3JxLCBycSk7CiAJcnRfcnEtPnRnID0gdGc7Ci0JcnRfcnEtPnJ0X3NlID0gcnRfc2U7CiAJcnRfcnEtPnJ0X3J1bnRpbWUgPSB0Zy0+cnRfYmFuZHdpZHRoLnJ0X3J1bnRpbWU7CiAJaWYgKGFkZCkKIAkJbGlzdF9hZGQoJnJ0X3JxLT5sZWFmX3J0X3JxX2xpc3QsICZycS0+bGVhZl9ydF9ycV9saXN0KTsKQEAgLTk0ODMsOSArNzY3MSw2IEBACiAjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECiAJYWxsb2Nfc2l6ZSArPSAyICogbnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0JYWxsb2Nfc2l6ZSAqPSAyOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0NQVU1BU0tfT0ZGU1RBQ0sKIAlhbGxvY19zaXplICs9IG51bV9wb3NzaWJsZV9jcHVzKCkgKiBjcHVtYXNrX3NpemUoKTsKICNlbmRpZgpAQCAtOTQ5OSwxMyArNzY4NCw2IEBACiAJCWluaXRfdGFza19ncm91cC5jZnNfcnEgPSAoc3RydWN0IGNmc19ycSAqKilwdHI7CiAJCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwogCi0jaWZkZWYgQ09ORklHX1VTRVJfU0NIRUQKLQkJcm9vdF90YXNrX2dyb3VwLnNlID0gKHN0cnVjdCBzY2hlZF9lbnRpdHkgKiopcHRyOwotCQlwdHIgKz0gbnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKTsKLQotCQlyb290X3Rhc2tfZ3JvdXAuY2ZzX3JxID0gKHN0cnVjdCBjZnNfcnEgKiopcHRyOwotCQlwdHIgKz0gbnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKTsKLSNlbmRpZiAvKiBDT05GSUdfVVNFUl9TQ0hFRCAqLwogI2VuZGlmIC8qIENPTkZJR19GQUlSX0dST1VQX1NDSEVEICovCiAjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECiAJCWluaXRfdGFza19ncm91cC5ydF9zZSA9IChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICoqKXB0cjsKQEAgLTk1MTQsMTMgKzc2OTIsNiBAQAogCQlpbml0X3Rhc2tfZ3JvdXAucnRfcnEgPSAoc3RydWN0IHJ0X3JxICoqKXB0cjsKIAkJcHRyICs9IG5yX2NwdV9pZHMgKiBzaXplb2Yodm9pZCAqKik7CiAKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCQlyb290X3Rhc2tfZ3JvdXAucnRfc2UgPSAoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqKilwdHI7Ci0JCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwotCi0JCXJvb3RfdGFza19ncm91cC5ydF9ycSA9IChzdHJ1Y3QgcnRfcnEgKiopcHRyOwotCQlwdHIgKz0gbnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKTsKLSNlbmRpZiAvKiBDT05GSUdfVVNFUl9TQ0hFRCAqLwogI2VuZGlmIC8qIENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLwogI2lmZGVmIENPTkZJR19DUFVNQVNLX09GRlNUQUNLCiAJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CkBAIC05NTQwLDIyICs3NzExLDEzIEBACiAjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECiAJaW5pdF9ydF9iYW5kd2lkdGgoJmluaXRfdGFza19ncm91cC5ydF9iYW5kd2lkdGgsCiAJCQlnbG9iYWxfcnRfcGVyaW9kKCksIGdsb2JhbF9ydF9ydW50aW1lKCkpOwotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0JaW5pdF9ydF9iYW5kd2lkdGgoJnJvb3RfdGFza19ncm91cC5ydF9iYW5kd2lkdGgsCi0JCQlnbG9iYWxfcnRfcGVyaW9kKCksIFJVTlRJTUVfSU5GKTsKLSNlbmRpZiAvKiBDT05GSUdfVVNFUl9TQ0hFRCAqLwogI2VuZGlmIC8qIENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLwogCi0jaWZkZWYgQ09ORklHX0dST1VQX1NDSEVECisjaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRAogCWxpc3RfYWRkKCZpbml0X3Rhc2tfZ3JvdXAubGlzdCwgJnRhc2tfZ3JvdXBzKTsKIAlJTklUX0xJU1RfSEVBRCgmaW5pdF90YXNrX2dyb3VwLmNoaWxkcmVuKTsKIAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0JSU5JVF9MSVNUX0hFQUQoJnJvb3RfdGFza19ncm91cC5jaGlsZHJlbik7Ci0JaW5pdF90YXNrX2dyb3VwLnBhcmVudCA9ICZyb290X3Rhc2tfZ3JvdXA7Ci0JbGlzdF9hZGQoJmluaXRfdGFza19ncm91cC5zaWJsaW5ncywgJnJvb3RfdGFza19ncm91cC5jaGlsZHJlbik7Ci0jZW5kaWYgLyogQ09ORklHX1VTRVJfU0NIRUQgKi8KLSNlbmRpZiAvKiBDT05GSUdfR1JPVVBfU0NIRUQgKi8KKyNlbmRpZiAvKiBDT05GSUdfQ0dST1VQX1NDSEVEICovCiAKICNpZiBkZWZpbmVkIENPTkZJR19GQUlSX0dST1VQX1NDSEVEICYmIGRlZmluZWQgQ09ORklHX1NNUAogCXVwZGF0ZV9zaGFyZXNfZGF0YSA9IF9fYWxsb2NfcGVyY3B1KG5yX2NwdV9pZHMgKiBzaXplb2YodW5zaWduZWQgbG9uZyksCkBAIC05NTk1LDI1ICs3NzU3LDYgQEAKIAkJICogZGlyZWN0bHkgaW4gcnEtPmNmcyAoaS5lIGluaXRfdGFza19ncm91cC0+c2VbXSA9IE5VTEwpLgogCQkgKi8KIAkJaW5pdF90Z19jZnNfZW50cnkoJmluaXRfdGFza19ncm91cCwgJnJxLT5jZnMsIE5VTEwsIGksIDEsIE5VTEwpOwotI2VsaWYgZGVmaW5lZCBDT05GSUdfVVNFUl9TQ0hFRAotCQlyb290X3Rhc2tfZ3JvdXAuc2hhcmVzID0gTklDRV8wX0xPQUQ7Ci0JCWluaXRfdGdfY2ZzX2VudHJ5KCZyb290X3Rhc2tfZ3JvdXAsICZycS0+Y2ZzLCBOVUxMLCBpLCAwLCBOVUxMKTsKLQkJLyoKLQkJICogSW4gY2FzZSBvZiB0YXNrLWdyb3VwcyBmb3JtZWQgdGhyJyB0aGUgdXNlciBpZCBvZiB0YXNrcywKLQkJICogaW5pdF90YXNrX2dyb3VwIHJlcHJlc2VudHMgdGFza3MgYmVsb25naW5nIHRvIHJvb3QgdXNlci4KLQkJICogSGVuY2UgaXQgZm9ybXMgYSBzaWJsaW5nIG9mIGFsbCBzdWJzZXF1ZW50IGdyb3VwcyBmb3JtZWQuCi0JCSAqIEluIHRoaXMgY2FzZSwgaW5pdF90YXNrX2dyb3VwIGdldHMgb25seSBhIGZyYWN0aW9uIG9mIG92ZXJhbGwKLQkJICogc3lzdGVtIGNwdSByZXNvdXJjZSwgYmFzZWQgb24gdGhlIHdlaWdodCBhc3NpZ25lZCB0byByb290Ci0JCSAqIHVzZXIncyBjcHUgc2hhcmUgKElOSVRfVEFTS19HUk9VUF9MT0FEKS4gVGhpcyBpcyBhY2NvbXBsaXNoZWQKLQkJICogYnkgbGV0dGluZyB0YXNrcyBvZiBpbml0X3Rhc2tfZ3JvdXAgc2l0IGluIGEgc2VwYXJhdGUgY2ZzX3JxCi0JCSAqIChpbml0X3RnX2Nmc19ycSkgYW5kIGhhdmluZyBvbmUgZW50aXR5IHJlcHJlc2VudCB0aGlzIGdyb3VwIG9mCi0JCSAqIHRhc2tzIGluIHJxLT5jZnMgKGkuZSBpbml0X3Rhc2tfZ3JvdXAtPnNlW10gIT0gTlVMTCkuCi0JCSAqLwotCQlpbml0X3RnX2Nmc19lbnRyeSgmaW5pdF90YXNrX2dyb3VwLAotCQkJCSZwZXJfY3B1KGluaXRfdGdfY2ZzX3JxLCBpKSwKLQkJCQkmcGVyX2NwdShpbml0X3NjaGVkX2VudGl0eSwgaSksIGksIDEsCi0JCQkJcm9vdF90YXNrX2dyb3VwLnNlW2ldKTsKLQogI2VuZGlmCiAjZW5kaWYgLyogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgKi8KIApAQCAtOTYyMiwxMiArNzc2NSw2IEBACiAJCUlOSVRfTElTVF9IRUFEKCZycS0+bGVhZl9ydF9ycV9saXN0KTsKICNpZmRlZiBDT05GSUdfQ0dST1VQX1NDSEVECiAJCWluaXRfdGdfcnRfZW50cnkoJmluaXRfdGFza19ncm91cCwgJnJxLT5ydCwgTlVMTCwgaSwgMSwgTlVMTCk7Ci0jZWxpZiBkZWZpbmVkIENPTkZJR19VU0VSX1NDSEVECi0JCWluaXRfdGdfcnRfZW50cnkoJnJvb3RfdGFza19ncm91cCwgJnJxLT5ydCwgTlVMTCwgaSwgMCwgTlVMTCk7Ci0JCWluaXRfdGdfcnRfZW50cnkoJmluaXRfdGFza19ncm91cCwKLQkJCQkmcGVyX2NwdShpbml0X3J0X3JxX3ZhciwgaSksCi0JCQkJJnBlcl9jcHUoaW5pdF9zY2hlZF9ydF9lbnRpdHksIGkpLCBpLCAxLAotCQkJCXJvb3RfdGFza19ncm91cC5ydF9zZVtpXSk7CiAjZW5kaWYKICNlbmRpZgogCkBAIC05NzEyLDcgKzc4NDksNyBAQAogCXJldHVybiAobmVzdGVkID09IFBSRUVNUFRfSU5BVE9NSUNfQkFTRSArIHByZWVtcHRfb2Zmc2V0KTsKIH0KIAotdm9pZCBfX21pZ2h0X3NsZWVwKGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgcHJlZW1wdF9vZmZzZXQpCit2b2lkIF9fbWlnaHRfc2xlZXAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCBwcmVlbXB0X29mZnNldCkKIHsKICNpZmRlZiBpbl9hdG9taWMKIAlzdGF0aWMgdW5zaWduZWQgbG9uZyBwcmV2X2ppZmZ5OwkvKiByYXRlbGltaXRpbmcgKi8KQEAgLTEwMDIzLDcgKzgxNjAsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLwogCi0jaWZkZWYgQ09ORklHX0dST1VQX1NDSEVECisjaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRAogc3RhdGljIHZvaWQgZnJlZV9zY2hlZF9ncm91cChzdHJ1Y3QgdGFza19ncm91cCAqdGcpCiB7CiAJZnJlZV9mYWlyX3NjaGVkX2dyb3VwKHRnKTsKQEAgLTEwMTI4LDExICs4MjY1LDExIEBACiAJaWYgKHVubGlrZWx5KHJ1bm5pbmcpKQogCQl0c2stPnNjaGVkX2NsYXNzLT5zZXRfY3Vycl90YXNrKHJxKTsKIAlpZiAob25fcnEpCi0JCWVucXVldWVfdGFzayhycSwgdHNrLCAwKTsKKwkJZW5xdWV1ZV90YXNrKHJxLCB0c2ssIDAsIGZhbHNlKTsKIAogCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwogfQotI2VuZGlmIC8qIENPTkZJR19HUk9VUF9TQ0hFRCAqLworI2VuZGlmIC8qIENPTkZJR19DR1JPVVBfU0NIRUQgKi8KIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiBzdGF0aWMgdm9pZCBfX3NldF9zZV9zaGFyZXMoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIHVuc2lnbmVkIGxvbmcgc2hhcmVzKQpAQCAtMTAyNzQsMTMgKzg0MTEsNiBAQAogCQlydW50aW1lID0gZC0+cnRfcnVudGltZTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCWlmICh0ZyA9PSAmcm9vdF90YXNrX2dyb3VwKSB7Ci0JCXBlcmlvZCA9IGdsb2JhbF9ydF9wZXJpb2QoKTsKLQkJcnVudGltZSA9IGdsb2JhbF9ydF9ydW50aW1lKCk7Ci0JfQotI2VuZGlmCi0KIAkvKgogCSAqIENhbm5vdCBoYXZlIG1vcmUgcnVudGltZSB0aGFuIHRoZSBwZXJpb2QuCiAJICovCkBAIC0xMDkwMCwxMiArOTAzMCwzMCBAQAogfQogCiAvKgorICogV2hlbiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORyBpcyBlbmFibGVkIG9uZSBqaWZmeSBjYW4gYmUgdmVyeSBsYXJnZQorICogaW4gY3B1dGltZV90IHVuaXRzLiBBcyBhIHJlc3VsdCwgY3B1YWNjdF91cGRhdGVfc3RhdHMgY2FsbHMKKyAqIHBlcmNwdV9jb3VudGVyX2FkZCB3aXRoIHZhbHVlcyBsYXJnZSBlbm91Z2ggdG8gYWx3YXlzIG92ZXJmbG93IHRoZQorICogcGVyIGNwdSBiYXRjaCBsaW1pdCBjYXVzaW5nIGJhZCBTTVAgc2NhbGFiaWxpdHkuCisgKgorICogVG8gZml4IHRoaXMgd2Ugc2NhbGUgcGVyY3B1X2NvdW50ZXJfYmF0Y2ggYnkgY3B1dGltZV9vbmVfamlmZnkgc28gd2UKKyAqIGJhdGNoIHRoZSBzYW1lIGFtb3VudCBvZiB0aW1lIHdpdGggQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcgZGlzYWJsZWQKKyAqIGFuZCBlbmFibGVkLiBXZSBjYXAgaXQgYXQgSU5UX01BWCB3aGljaCBpcyB0aGUgbGFyZ2VzdCBhbGxvd2VkIGJhdGNoIHZhbHVlLgorICovCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBDUFVBQ0NUX0JBVENICVwKKwltaW5fdChsb25nLCBwZXJjcHVfY291bnRlcl9iYXRjaCAqIGNwdXRpbWVfb25lX2ppZmZ5LCBJTlRfTUFYKQorI2Vsc2UKKyNkZWZpbmUgQ1BVQUNDVF9CQVRDSAkwCisjZW5kaWYKKworLyoKICAqIENoYXJnZSB0aGUgc3lzdGVtL3VzZXIgdGltZSB0byB0aGUgdGFzaydzIGFjY291bnRpbmcgZ3JvdXAuCiAgKi8KIHN0YXRpYyB2b2lkIGNwdWFjY3RfdXBkYXRlX3N0YXRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAogCQllbnVtIGNwdWFjY3Rfc3RhdF9pbmRleCBpZHgsIGNwdXRpbWVfdCB2YWwpCiB7CiAJc3RydWN0IGNwdWFjY3QgKmNhOworCWludCBiYXRjaCA9IENQVUFDQ1RfQkFUQ0g7CiAKIAlpZiAodW5saWtlbHkoIWNwdWFjY3Rfc3Vic3lzLmFjdGl2ZSkpCiAJCXJldHVybjsKQEAgLTEwOTE0LDcgKzkwNjIsNyBAQAogCWNhID0gdGFza19jYSh0c2spOwogCiAJZG8gewotCQlwZXJjcHVfY291bnRlcl9hZGQoJmNhLT5jcHVzdGF0W2lkeF0sIHZhbCk7CisJCV9fcGVyY3B1X2NvdW50ZXJfYWRkKCZjYS0+Y3B1c3RhdFtpZHhdLCB2YWwsIGJhdGNoKTsKIAkJY2EgPSBjYS0+cGFyZW50OwogCX0gd2hpbGUgKGNhKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9jcHVwcmkuYyBiL2tlcm5lbC9zY2hlZF9jcHVwcmkuYwppbmRleCA1OTdiMzMwLi5lZWIzNTA2IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfY3B1cHJpLmMKKysrIGIva2VybmVsL3NjaGVkX2NwdXByaS5jCkBAIC00Nyw5ICs0Nyw3IEBACiB9CiAKICNkZWZpbmUgZm9yX2VhY2hfY3B1cHJpX2FjdGl2ZShhcnJheSwgaWR4KSAgICAgICAgICAgICAgICAgICAgXAotICBmb3IgKGlkeCA9IGZpbmRfZmlyc3RfYml0KGFycmF5LCBDUFVQUklfTlJfUFJJT1JJVElFUyk7ICAgICBcCi0gICAgICAgaWR4IDwgQ1BVUFJJX05SX1BSSU9SSVRJRVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBpZHggPSBmaW5kX25leHRfYml0KGFycmF5LCBDUFVQUklfTlJfUFJJT1JJVElFUywgaWR4KzEpKQorCWZvcl9lYWNoX2JpdChpZHgsIGFycmF5LCBDUFVQUklfTlJfUFJJT1JJVElFUykKIAogLyoqCiAgKiBjcHVwcmlfZmluZCAtIGZpbmQgdGhlIGJlc3QgKGxvd2VzdC1wcmkpIENQVSBpbiB0aGUgc3lzdGVtCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZmFpci5jIGIva2VybmVsL3NjaGVkX2ZhaXIuYwppbmRleCA4ZmU3ZWU4Li4zZTFmZDk2IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKQEAgLTEwNTMsNyArMTA1Myw4IEBACiAgKiBpbmNyZWFzZWQuIEhlcmUgd2UgdXBkYXRlIHRoZSBmYWlyIHNjaGVkdWxpbmcgc3RhdHMgYW5kCiAgKiB0aGVuIHB1dCB0aGUgdGFzayBpbnRvIHRoZSByYnRyZWU6CiAgKi8KLXN0YXRpYyB2b2lkIGVucXVldWVfdGFza19mYWlyKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCkKK3N0YXRpYyB2b2lkCitlbnF1ZXVlX3Rhc2tfZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtldXAsIGJvb2wgaGVhZCkKIHsKIAlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnE7CiAJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSAmcC0+c2U7CkBAIC0xODE1LDU3ICsxODE2LDE2NCBAQAogICovCiAKIC8qCi0gKiBMb2FkLWJhbGFuY2luZyBpdGVyYXRvci4gTm90ZTogd2hpbGUgdGhlIHJ1bnF1ZXVlIHN0YXlzIGxvY2tlZAotICogZHVyaW5nIHRoZSB3aG9sZSBpdGVyYXRpb24sIHRoZSBjdXJyZW50IHRhc2sgbWlnaHQgYmUKLSAqIGRlcXVldWVkIHNvIHRoZSBpdGVyYXRvciBoYXMgdG8gYmUgZGVxdWV1ZS1zYWZlLiBIZXJlIHdlCi0gKiBhY2hpZXZlIHRoYXQgYnkgYWx3YXlzIHByZS1pdGVyYXRpbmcgYmVmb3JlIHJldHVybmluZwotICogdGhlIGN1cnJlbnQgdGFzazoKKyAqIHB1bGxfdGFzayAtIG1vdmUgYSB0YXNrIGZyb20gYSByZW1vdGUgcnVucXVldWUgdG8gdGhlIGxvY2FsIHJ1bnF1ZXVlLgorICogQm90aCBydW5xdWV1ZXMgbXVzdCBiZSBsb2NrZWQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKgotX19sb2FkX2JhbGFuY2VfaXRlcmF0b3Ioc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0KQorc3RhdGljIHZvaWQgcHVsbF90YXNrKHN0cnVjdCBycSAqc3JjX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCisJCSAgICAgIHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1KQogewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IE5VTEw7Ci0Jc3RydWN0IHNjaGVkX2VudGl0eSAqc2U7Ci0KLQlpZiAobmV4dCA9PSAmY2ZzX3JxLT50YXNrcykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlzZSA9IGxpc3RfZW50cnkobmV4dCwgc3RydWN0IHNjaGVkX2VudGl0eSwgZ3JvdXBfbm9kZSk7Ci0JcCA9IHRhc2tfb2Yoc2UpOwotCWNmc19ycS0+YmFsYW5jZV9pdGVyYXRvciA9IG5leHQtPm5leHQ7Ci0KLQlyZXR1cm4gcDsKKwlkZWFjdGl2YXRlX3Rhc2soc3JjX3JxLCBwLCAwKTsKKwlzZXRfdGFza19jcHUocCwgdGhpc19jcHUpOworCWFjdGl2YXRlX3Rhc2sodGhpc19ycSwgcCwgMCk7CisJY2hlY2tfcHJlZW1wdF9jdXJyKHRoaXNfcnEsIHAsIDApOwogfQogCi1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpsb2FkX2JhbGFuY2Vfc3RhcnRfZmFpcih2b2lkICphcmcpCisvKgorICogY2FuX21pZ3JhdGVfdGFzayAtIG1heSB0YXNrIHAgZnJvbSBydW5xdWV1ZSBycSBiZSBtaWdyYXRlZCB0byB0aGlzX2NwdT8KKyAqLworc3RhdGljCitpbnQgY2FuX21pZ3JhdGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBycSAqcnEsIGludCB0aGlzX2NwdSwKKwkJICAgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCisJCSAgICAgaW50ICphbGxfcGlubmVkKQogewotCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IGFyZzsKKwlpbnQgdHNrX2NhY2hlX2hvdCA9IDA7CisJLyoKKwkgKiBXZSBkbyBub3QgbWlncmF0ZSB0YXNrcyB0aGF0IGFyZToKKwkgKiAxKSBydW5uaW5nIChvYnZpb3VzbHkpLCBvcgorCSAqIDIpIGNhbm5vdCBiZSBtaWdyYXRlZCB0byB0aGlzIENQVSBkdWUgdG8gY3B1c19hbGxvd2VkLCBvcgorCSAqIDMpIGFyZSBjYWNoZS1ob3Qgb24gdGhlaXIgY3VycmVudCBDUFUuCisJICovCisJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LCAmcC0+Y3B1c19hbGxvd2VkKSkgeworCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZhaWxlZF9taWdyYXRpb25zX2FmZmluZSk7CisJCXJldHVybiAwOworCX0KKwkqYWxsX3Bpbm5lZCA9IDA7CiAKLQlyZXR1cm4gX19sb2FkX2JhbGFuY2VfaXRlcmF0b3IoY2ZzX3JxLCBjZnNfcnEtPnRhc2tzLm5leHQpOworCWlmICh0YXNrX3J1bm5pbmcocnEsIHApKSB7CisJCXNjaGVkc3RhdF9pbmMocCwgc2UubnJfZmFpbGVkX21pZ3JhdGlvbnNfcnVubmluZyk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogQWdncmVzc2l2ZSBtaWdyYXRpb24gaWY6CisJICogMSkgdGFzayBpcyBjYWNoZSBjb2xkLCBvcgorCSAqIDIpIHRvbyBtYW55IGJhbGFuY2UgYXR0ZW1wdHMgaGF2ZSBmYWlsZWQuCisJICovCisKKwl0c2tfY2FjaGVfaG90ID0gdGFza19ob3QocCwgcnEtPmNsb2NrLCBzZCk7CisJaWYgKCF0c2tfY2FjaGVfaG90IHx8CisJCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA+IHNkLT5jYWNoZV9uaWNlX3RyaWVzKSB7CisjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKKwkJaWYgKHRza19jYWNoZV9ob3QpIHsKKwkJCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2hvdF9nYWluZWRbaWRsZV0pOworCQkJc2NoZWRzdGF0X2luYyhwLCBzZS5ucl9mb3JjZWRfbWlncmF0aW9ucyk7CisJCX0KKyNlbmRpZgorCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAodHNrX2NhY2hlX2hvdCkgeworCQlzY2hlZHN0YXRfaW5jKHAsIHNlLm5yX2ZhaWxlZF9taWdyYXRpb25zX2hvdCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqbG9hZF9iYWxhbmNlX25leHRfZmFpcih2b2lkICphcmcpCisvKgorICogbW92ZV9vbmVfdGFzayB0cmllcyB0byBtb3ZlIGV4YWN0bHkgb25lIHRhc2sgZnJvbSBidXNpZXN0IHRvIHRoaXNfcnEsIGFzCisgKiBwYXJ0IG9mIGFjdGl2ZSBiYWxhbmNpbmcgb3BlcmF0aW9ucyB3aXRoaW4gImRvbWFpbiIuCisgKiBSZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBhbmQgMCBvdGhlcndpc2UuCisgKgorICogQ2FsbGVkIHdpdGggYm90aCBydW5xdWV1ZXMgbG9ja2VkLgorICovCitzdGF0aWMgaW50Cittb3ZlX29uZV90YXNrKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCisJICAgICAgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQogewotCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IGFyZzsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpuOworCXN0cnVjdCBjZnNfcnEgKmNmc19ycTsKKwlpbnQgcGlubmVkID0gMDsKIAotCXJldHVybiBfX2xvYWRfYmFsYW5jZV9pdGVyYXRvcihjZnNfcnEsIGNmc19ycS0+YmFsYW5jZV9pdGVyYXRvcik7CisJZm9yX2VhY2hfbGVhZl9jZnNfcnEoYnVzaWVzdCwgY2ZzX3JxKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmY2ZzX3JxLT50YXNrcywgc2UuZ3JvdXBfbm9kZSkgeworCisJCQlpZiAoIWNhbl9taWdyYXRlX3Rhc2socCwgYnVzaWVzdCwgdGhpc19jcHUsCisJCQkJCQlzZCwgaWRsZSwgJnBpbm5lZCkpCisJCQkJY29udGludWU7CisKKwkJCXB1bGxfdGFzayhidXNpZXN0LCBwLCB0aGlzX3JxLCB0aGlzX2NwdSk7CisJCQkvKgorCQkJICogUmlnaHQgbm93LCB0aGlzIGlzIG9ubHkgdGhlIHNlY29uZCBwbGFjZSBwdWxsX3Rhc2soKQorCQkJICogaXMgY2FsbGVkLCBzbyB3ZSBjYW4gc2FmZWx5IGNvbGxlY3QgcHVsbF90YXNrKCkKKwkJCSAqIHN0YXRzIGhlcmUgcmF0aGVyIHRoYW4gaW5zaWRlIHB1bGxfdGFzaygpLgorCQkJICovCisJCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9nYWluZWRbaWRsZV0pOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcKLV9fbG9hZF9iYWxhbmNlX2ZhaXIoc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKLQkJdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKLQkJZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCAqYWxsX3Bpbm5lZCwgaW50ICp0aGlzX2Jlc3RfcHJpbywKLQkJc3RydWN0IGNmc19ycSAqY2ZzX3JxKQorYmFsYW5jZV90YXNrcyhzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAorCSAgICAgIHVuc2lnbmVkIGxvbmcgbWF4X2xvYWRfbW92ZSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCisJICAgICAgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsIGludCAqYWxsX3Bpbm5lZCwKKwkgICAgICBpbnQgKnRoaXNfYmVzdF9wcmlvLCBzdHJ1Y3QgY2ZzX3JxICpidXNpZXN0X2Nmc19ycSkKIHsKLQlzdHJ1Y3QgcnFfaXRlcmF0b3IgY2ZzX3JxX2l0ZXJhdG9yOworCWludCBsb29wcyA9IDAsIHB1bGxlZCA9IDAsIHBpbm5lZCA9IDA7CisJbG9uZyByZW1fbG9hZF9tb3ZlID0gbWF4X2xvYWRfbW92ZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpuOwogCi0JY2ZzX3JxX2l0ZXJhdG9yLnN0YXJ0ID0gbG9hZF9iYWxhbmNlX3N0YXJ0X2ZhaXI7Ci0JY2ZzX3JxX2l0ZXJhdG9yLm5leHQgPSBsb2FkX2JhbGFuY2VfbmV4dF9mYWlyOwotCWNmc19ycV9pdGVyYXRvci5hcmcgPSBjZnNfcnE7CisJaWYgKG1heF9sb2FkX21vdmUgPT0gMCkKKwkJZ290byBvdXQ7CiAKLQlyZXR1cm4gYmFsYW5jZV90YXNrcyh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKLQkJCW1heF9sb2FkX21vdmUsIHNkLCBpZGxlLCBhbGxfcGlubmVkLAotCQkJdGhpc19iZXN0X3ByaW8sICZjZnNfcnFfaXRlcmF0b3IpOworCXBpbm5lZCA9IDE7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJmJ1c2llc3RfY2ZzX3JxLT50YXNrcywgc2UuZ3JvdXBfbm9kZSkgeworCQlpZiAobG9vcHMrKyA+IHN5c2N0bF9zY2hlZF9ucl9taWdyYXRlKQorCQkJYnJlYWs7CisKKwkJaWYgKChwLT5zZS5sb2FkLndlaWdodCA+PiAxKSA+IHJlbV9sb2FkX21vdmUgfHwKKwkJICAgICFjYW5fbWlncmF0ZV90YXNrKHAsIGJ1c2llc3QsIHRoaXNfY3B1LCBzZCwgaWRsZSwgJnBpbm5lZCkpCisJCQljb250aW51ZTsKKworCQlwdWxsX3Rhc2soYnVzaWVzdCwgcCwgdGhpc19ycSwgdGhpc19jcHUpOworCQlwdWxsZWQrKzsKKwkJcmVtX2xvYWRfbW92ZSAtPSBwLT5zZS5sb2FkLndlaWdodDsKKworI2lmZGVmIENPTkZJR19QUkVFTVBUCisJCS8qCisJCSAqIE5FV0lETEUgYmFsYW5jaW5nIGlzIGEgc291cmNlIG9mIGxhdGVuY3ksIHNvIHByZWVtcHRpYmxlCisJCSAqIGtlcm5lbHMgd2lsbCBzdG9wIGFmdGVyIHRoZSBmaXJzdCB0YXNrIGlzIHB1bGxlZCB0byBtaW5pbWl6ZQorCQkgKiB0aGUgY3JpdGljYWwgc2VjdGlvbi4KKwkJICovCisJCWlmIChpZGxlID09IENQVV9ORVdMWV9JRExFKQorCQkJYnJlYWs7CisjZW5kaWYKKworCQkvKgorCQkgKiBXZSBvbmx5IHdhbnQgdG8gc3RlYWwgdXAgdG8gdGhlIHByZXNjcmliZWQgYW1vdW50IG9mCisJCSAqIHdlaWdodGVkIGxvYWQuCisJCSAqLworCQlpZiAocmVtX2xvYWRfbW92ZSA8PSAwKQorCQkJYnJlYWs7CisKKwkJaWYgKHAtPnByaW8gPCAqdGhpc19iZXN0X3ByaW8pCisJCQkqdGhpc19iZXN0X3ByaW8gPSBwLT5wcmlvOworCX0KK291dDoKKwkvKgorCSAqIFJpZ2h0IG5vdywgdGhpcyBpcyBvbmUgb2Ygb25seSB0d28gcGxhY2VzIHB1bGxfdGFzaygpIGlzIGNhbGxlZCwKKwkgKiBzbyB3ZSBjYW4gc2FmZWx5IGNvbGxlY3QgcHVsbF90YXNrKCkgc3RhdHMgaGVyZSByYXRoZXIgdGhhbgorCSAqIGluc2lkZSBwdWxsX3Rhc2soKS4KKwkgKi8KKwlzY2hlZHN0YXRfYWRkKHNkLCBsYl9nYWluZWRbaWRsZV0sIHB1bGxlZCk7CisKKwlpZiAoYWxsX3Bpbm5lZCkKKwkJKmFsbF9waW5uZWQgPSBwaW5uZWQ7CisKKwlyZXR1cm4gbWF4X2xvYWRfbW92ZSAtIHJlbV9sb2FkX21vdmU7CiB9CiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRApAQCAtMTg5Nyw5ICsyMDA1LDkgQEAKIAkJcmVtX2xvYWQgPSAodTY0KXJlbV9sb2FkX21vdmUgKiBidXNpZXN0X3dlaWdodDsKIAkJcmVtX2xvYWQgPSBkaXZfdTY0KHJlbV9sb2FkLCBidXNpZXN0X2hfbG9hZCArIDEpOwogCi0JCW1vdmVkX2xvYWQgPSBfX2xvYWRfYmFsYW5jZV9mYWlyKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAorCQltb3ZlZF9sb2FkID0gYmFsYW5jZV90YXNrcyh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKIAkJCQlyZW1fbG9hZCwgc2QsIGlkbGUsIGFsbF9waW5uZWQsIHRoaXNfYmVzdF9wcmlvLAotCQkJCXRnLT5jZnNfcnFbYnVzaWVzdF9jcHVdKTsKKwkJCQlidXNpZXN0X2Nmc19ycSk7CiAKIAkJaWYgKCFtb3ZlZF9sb2FkKQogCQkJY29udGludWU7CkBAIC0xOTIyLDM1ICsyMDMwLDE1MDkgQEAKIAkJICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCiAJCSAgaW50ICphbGxfcGlubmVkLCBpbnQgKnRoaXNfYmVzdF9wcmlvKQogewotCXJldHVybiBfX2xvYWRfYmFsYW5jZV9mYWlyKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAorCXJldHVybiBiYWxhbmNlX3Rhc2tzKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAogCQkJbWF4X2xvYWRfbW92ZSwgc2QsIGlkbGUsIGFsbF9waW5uZWQsCiAJCQl0aGlzX2Jlc3RfcHJpbywgJmJ1c2llc3QtPmNmcyk7CiB9CiAjZW5kaWYKIAotc3RhdGljIGludAotbW92ZV9vbmVfdGFza19mYWlyKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JCSAgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKKy8qCisgKiBtb3ZlX3Rhc2tzIHRyaWVzIHRvIG1vdmUgdXAgdG8gbWF4X2xvYWRfbW92ZSB3ZWlnaHRlZCBsb2FkIGZyb20gYnVzaWVzdCB0bworICogdGhpc19ycSwgYXMgcGFydCBvZiBhIGJhbGFuY2luZyBvcGVyYXRpb24gd2l0aGluIGRvbWFpbiAic2QiLgorICogUmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgYW5kIDAgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlZCB3aXRoIGJvdGggcnVucXVldWVzIGxvY2tlZC4KKyAqLworc3RhdGljIGludCBtb3ZlX3Rhc2tzKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgbWF4X2xvYWRfbW92ZSwKKwkJICAgICAgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAorCQkgICAgICBpbnQgKmFsbF9waW5uZWQpCiB7Ci0Jc3RydWN0IGNmc19ycSAqYnVzeV9jZnNfcnE7Ci0Jc3RydWN0IHJxX2l0ZXJhdG9yIGNmc19ycV9pdGVyYXRvcjsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX2xvYWRfbW92ZWQgPSAwLCBsb2FkX21vdmVkOworCWludCB0aGlzX2Jlc3RfcHJpbyA9IHRoaXNfcnEtPmN1cnItPnByaW87CiAKLQljZnNfcnFfaXRlcmF0b3Iuc3RhcnQgPSBsb2FkX2JhbGFuY2Vfc3RhcnRfZmFpcjsKLQljZnNfcnFfaXRlcmF0b3IubmV4dCA9IGxvYWRfYmFsYW5jZV9uZXh0X2ZhaXI7CisJZG8geworCQlsb2FkX21vdmVkID0gbG9hZF9iYWxhbmNlX2ZhaXIodGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsCisJCQkJbWF4X2xvYWRfbW92ZSAtIHRvdGFsX2xvYWRfbW92ZWQsCisJCQkJc2QsIGlkbGUsIGFsbF9waW5uZWQsICZ0aGlzX2Jlc3RfcHJpbyk7CiAKLQlmb3JfZWFjaF9sZWFmX2Nmc19ycShidXNpZXN0LCBidXN5X2Nmc19ycSkgeworCQl0b3RhbF9sb2FkX21vdmVkICs9IGxvYWRfbW92ZWQ7CisKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAogCQkvKgotCQkgKiBwYXNzIGJ1c3lfY2ZzX3JxIGFyZ3VtZW50IGludG8KLQkJICogbG9hZF9iYWxhbmNlX1tzdGFydHxuZXh0XV9mYWlyIGl0ZXJhdG9ycworCQkgKiBORVdJRExFIGJhbGFuY2luZyBpcyBhIHNvdXJjZSBvZiBsYXRlbmN5LCBzbyBwcmVlbXB0aWJsZQorCQkgKiBrZXJuZWxzIHdpbGwgc3RvcCBhZnRlciB0aGUgZmlyc3QgdGFzayBpcyBwdWxsZWQgdG8gbWluaW1pemUKKwkJICogdGhlIGNyaXRpY2FsIHNlY3Rpb24uCiAJCSAqLwotCQljZnNfcnFfaXRlcmF0b3IuYXJnID0gYnVzeV9jZnNfcnE7Ci0JCWlmIChpdGVyX21vdmVfb25lX3Rhc2sodGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsIHNkLCBpZGxlLAotCQkJCSAgICAgICAmY2ZzX3JxX2l0ZXJhdG9yKSkKLQkJICAgIHJldHVybiAxOworCQlpZiAoaWRsZSA9PSBDUFVfTkVXTFlfSURMRSAmJiB0aGlzX3JxLT5ucl9ydW5uaW5nKQorCQkJYnJlYWs7CisKKwkJaWYgKHJhd19zcGluX2lzX2NvbnRlbmRlZCgmdGhpc19ycS0+bG9jaykgfHwKKwkJCQlyYXdfc3Bpbl9pc19jb250ZW5kZWQoJmJ1c2llc3QtPmxvY2spKQorCQkJYnJlYWs7CisjZW5kaWYKKwl9IHdoaWxlIChsb2FkX21vdmVkICYmIG1heF9sb2FkX21vdmUgPiB0b3RhbF9sb2FkX21vdmVkKTsKKworCXJldHVybiB0b3RhbF9sb2FkX21vdmVkID4gMDsKK30KKworLyoqKioqKioqKiogSGVscGVycyBmb3IgZmluZF9idXNpZXN0X2dyb3VwICoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBzZF9sYl9zdGF0cyAtIFN0cnVjdHVyZSB0byBzdG9yZSB0aGUgc3RhdGlzdGljcyBvZiBhIHNjaGVkX2RvbWFpbgorICogCQlkdXJpbmcgbG9hZCBiYWxhbmNpbmcuCisgKi8KK3N0cnVjdCBzZF9sYl9zdGF0cyB7CisJc3RydWN0IHNjaGVkX2dyb3VwICpidXNpZXN0OyAvKiBCdXNpZXN0IGdyb3VwIGluIHRoaXMgc2QgKi8KKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnRoaXM7ICAvKiBMb2NhbCBncm91cCBpbiB0aGlzIHNkICovCisJdW5zaWduZWQgbG9uZyB0b3RhbF9sb2FkOyAgLyogVG90YWwgbG9hZCBvZiBhbGwgZ3JvdXBzIGluIHNkICovCisJdW5zaWduZWQgbG9uZyB0b3RhbF9wd3I7ICAgLyoJVG90YWwgcG93ZXIgb2YgYWxsIGdyb3VwcyBpbiBzZCAqLworCXVuc2lnbmVkIGxvbmcgYXZnX2xvYWQ7CSAgIC8qIEF2ZXJhZ2UgbG9hZCBhY3Jvc3MgYWxsIGdyb3VwcyBpbiBzZCAqLworCisJLyoqIFN0YXRpc3RpY3Mgb2YgdGhpcyBncm91cCAqLworCXVuc2lnbmVkIGxvbmcgdGhpc19sb2FkOworCXVuc2lnbmVkIGxvbmcgdGhpc19sb2FkX3Blcl90YXNrOworCXVuc2lnbmVkIGxvbmcgdGhpc19ucl9ydW5uaW5nOworCisJLyogU3RhdGlzdGljcyBvZiB0aGUgYnVzaWVzdCBncm91cCAqLworCXVuc2lnbmVkIGxvbmcgbWF4X2xvYWQ7CisJdW5zaWduZWQgbG9uZyBidXNpZXN0X2xvYWRfcGVyX3Rhc2s7CisJdW5zaWduZWQgbG9uZyBidXNpZXN0X25yX3J1bm5pbmc7CisJdW5zaWduZWQgbG9uZyBidXNpZXN0X2dyb3VwX2NhcGFjaXR5OworCisJaW50IGdyb3VwX2ltYjsgLyogSXMgdGhlcmUgaW1iYWxhbmNlIGluIHRoaXMgc2QgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQorCWludCBwb3dlcl9zYXZpbmdzX2JhbGFuY2U7IC8qIElzIHBvd2Vyc2F2ZSBiYWxhbmNlIG5lZWRlZCBmb3IgdGhpcyBzZCAqLworCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXBfbWluOyAvKiBMZWFzdCBsb2FkZWQgZ3JvdXAgaW4gc2QgKi8KKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwX2xlYWRlcjsgLyogR3JvdXAgd2hpY2ggcmVsaWV2ZXMgZ3JvdXBfbWluICovCisJdW5zaWduZWQgbG9uZyBtaW5fbG9hZF9wZXJfdGFzazsgLyogbG9hZF9wZXJfdGFzayBpbiBncm91cF9taW4gKi8KKwl1bnNpZ25lZCBsb25nIGxlYWRlcl9ucl9ydW5uaW5nOyAvKiBOciBydW5uaW5nIG9mIGdyb3VwX2xlYWRlciAqLworCXVuc2lnbmVkIGxvbmcgbWluX25yX3J1bm5pbmc7IC8qIE5yIHJ1bm5pbmcgb2YgZ3JvdXBfbWluICovCisjZW5kaWYKK307CisKKy8qCisgKiBzZ19sYl9zdGF0cyAtIHN0YXRzIG9mIGEgc2NoZWRfZ3JvdXAgcmVxdWlyZWQgZm9yIGxvYWRfYmFsYW5jaW5nCisgKi8KK3N0cnVjdCBzZ19sYl9zdGF0cyB7CisJdW5zaWduZWQgbG9uZyBhdmdfbG9hZDsgLypBdmcgbG9hZCBhY3Jvc3MgdGhlIENQVXMgb2YgdGhlIGdyb3VwICovCisJdW5zaWduZWQgbG9uZyBncm91cF9sb2FkOyAvKiBUb3RhbCBsb2FkIG92ZXIgdGhlIENQVXMgb2YgdGhlIGdyb3VwICovCisJdW5zaWduZWQgbG9uZyBzdW1fbnJfcnVubmluZzsgLyogTnIgdGFza3MgcnVubmluZyBpbiB0aGUgZ3JvdXAgKi8KKwl1bnNpZ25lZCBsb25nIHN1bV93ZWlnaHRlZF9sb2FkOyAvKiBXZWlnaHRlZCBsb2FkIG9mIGdyb3VwJ3MgdGFza3MgKi8KKwl1bnNpZ25lZCBsb25nIGdyb3VwX2NhcGFjaXR5OworCWludCBncm91cF9pbWI7IC8qIElzIHRoZXJlIGFuIGltYmFsYW5jZSBpbiB0aGUgZ3JvdXAgPyAqLworfTsKKworLyoqCisgKiBncm91cF9maXJzdF9jcHUgLSBSZXR1cm5zIHRoZSBmaXJzdCBjcHUgaW4gdGhlIGNwdW1hc2sgb2YgYSBzY2hlZF9ncm91cC4KKyAqIEBncm91cDogVGhlIGdyb3VwIHdob3NlIGZpcnN0IGNwdSBpcyB0byBiZSByZXR1cm5lZC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ3JvdXBfZmlyc3RfY3B1KHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXApCit7CisJcmV0dXJuIGNwdW1hc2tfZmlyc3Qoc2NoZWRfZ3JvdXBfY3B1cyhncm91cCkpOworfQorCisvKioKKyAqIGdldF9zZF9sb2FkX2lkeCAtIE9idGFpbiB0aGUgbG9hZCBpbmRleCBmb3IgYSBnaXZlbiBzY2hlZCBkb21haW4uCisgKiBAc2Q6IFRoZSBzY2hlZF9kb21haW4gd2hvc2UgbG9hZF9pZHggaXMgdG8gYmUgb2J0YWluZWQuCisgKiBAaWRsZTogVGhlIElkbGUgc3RhdHVzIG9mIHRoZSBDUFUgZm9yIHdob3NlIHNkIGxvYWRfaWN4IGlzIG9idGFpbmVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBnZXRfc2RfbG9hZF9pZHgoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCisJCQkJCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQoreworCWludCBsb2FkX2lkeDsKKworCXN3aXRjaCAoaWRsZSkgeworCWNhc2UgQ1BVX05PVF9JRExFOgorCQlsb2FkX2lkeCA9IHNkLT5idXN5X2lkeDsKKwkJYnJlYWs7CisKKwljYXNlIENQVV9ORVdMWV9JRExFOgorCQlsb2FkX2lkeCA9IHNkLT5uZXdpZGxlX2lkeDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbG9hZF9pZHggPSBzZC0+aWRsZV9pZHg7CisJCWJyZWFrOwogCX0KIAorCXJldHVybiBsb2FkX2lkeDsKK30KKworCisjaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKKy8qKgorICogaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzIC0gSW5pdGlhbGl6ZSBwb3dlciBzYXZpbmdzIHN0YXRpc3RpY3MgZm9yCisgKiB0aGUgZ2l2ZW4gc2NoZWRfZG9tYWluLCBkdXJpbmcgbG9hZCBiYWxhbmNpbmcuCisgKgorICogQHNkOiBTY2hlZCBkb21haW4gd2hvc2UgcG93ZXItc2F2aW5ncyBzdGF0aXN0aWNzIGFyZSB0byBiZSBpbml0aWFsaXplZC4KKyAqIEBzZHM6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3MgZm9yIHNkLgorICogQGlkbGU6IElkbGUgc3RhdHVzIG9mIHRoZSBDUFUgYXQgd2hpY2ggd2UncmUgcGVyZm9ybWluZyBsb2FkLWJhbGFuY2luZy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGluaXRfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKKwlzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCit7CisJLyoKKwkgKiBCdXN5IHByb2Nlc3NvcnMgd2lsbCBub3QgcGFydGljaXBhdGUgaW4gcG93ZXIgc2F2aW5ncworCSAqIGJhbGFuY2UuCisJICovCisJaWYgKGlkbGUgPT0gQ1BVX05PVF9JRExFIHx8ICEoc2QtPmZsYWdzICYgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQorCQlzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSA9IDA7CisJZWxzZSB7CisJCXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlID0gMTsKKwkJc2RzLT5taW5fbnJfcnVubmluZyA9IFVMT05HX01BWDsKKwkJc2RzLT5sZWFkZXJfbnJfcnVubmluZyA9IDA7CisJfQorfQorCisvKioKKyAqIHVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzIC0gVXBkYXRlIHRoZSBwb3dlciBzYXZpbmcgc3RhdHMgZm9yIGEKKyAqIHNjaGVkX2RvbWFpbiB3aGlsZSBwZXJmb3JtaW5nIGxvYWQgYmFsYW5jaW5nLgorICoKKyAqIEBncm91cDogc2NoZWRfZ3JvdXAgYmVsb25naW5nIHRvIHRoZSBzY2hlZF9kb21haW4gdW5kZXIgY29uc2lkZXJhdGlvbi4KKyAqIEBzZHM6IFZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0YXRpc3RpY3Mgb2YgdGhlIHNjaGVkX2RvbWFpbgorICogQGxvY2FsX2dyb3VwOiBEb2VzIGdyb3VwIGNvbnRhaW4gdGhlIENQVSBmb3Igd2hpY2ggd2UncmUgcGVyZm9ybWluZworICogCQlsb2FkIGJhbGFuY2luZyA/CisgKiBAc2dzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIG9mIHRoZSBncm91cC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsCisJc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsIGludCBsb2NhbF9ncm91cCwgc3RydWN0IHNnX2xiX3N0YXRzICpzZ3MpCit7CisKKwlpZiAoIXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElmIHRoZSBsb2NhbCBncm91cCBpcyBpZGxlIG9yIGNvbXBsZXRlbHkgbG9hZGVkCisJICogbm8gbmVlZCB0byBkbyBwb3dlciBzYXZpbmdzIGJhbGFuY2UgYXQgdGhpcyBkb21haW4KKwkgKi8KKwlpZiAobG9jYWxfZ3JvdXAgJiYgKHNkcy0+dGhpc19ucl9ydW5uaW5nID49IHNncy0+Z3JvdXBfY2FwYWNpdHkgfHwKKwkJCQkhc2RzLT50aGlzX25yX3J1bm5pbmcpKQorCQlzZHMtPnBvd2VyX3NhdmluZ3NfYmFsYW5jZSA9IDA7CisKKwkvKgorCSAqIElmIGEgZ3JvdXAgaXMgYWxyZWFkeSBydW5uaW5nIGF0IGZ1bGwgY2FwYWNpdHkgb3IgaWRsZSwKKwkgKiBkb24ndCBpbmNsdWRlIHRoYXQgZ3JvdXAgaW4gcG93ZXIgc2F2aW5ncyBjYWxjdWxhdGlvbnMKKwkgKi8KKwlpZiAoIXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlIHx8CisJCXNncy0+c3VtX25yX3J1bm5pbmcgPj0gc2dzLT5ncm91cF9jYXBhY2l0eSB8fAorCQkhc2dzLT5zdW1fbnJfcnVubmluZykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIGdyb3VwIHdoaWNoIGhhcyB0aGUgbGVhc3Qgbm9uLWlkbGUgbG9hZC4KKwkgKiBUaGlzIGlzIHRoZSBncm91cCBmcm9tIHdoZXJlIHdlIG5lZWQgdG8gcGljayB1cCB0aGUgbG9hZAorCSAqIGZvciBzYXZpbmcgcG93ZXIKKwkgKi8KKwlpZiAoKHNncy0+c3VtX25yX3J1bm5pbmcgPCBzZHMtPm1pbl9ucl9ydW5uaW5nKSB8fAorCSAgICAoc2dzLT5zdW1fbnJfcnVubmluZyA9PSBzZHMtPm1pbl9ucl9ydW5uaW5nICYmCisJICAgICBncm91cF9maXJzdF9jcHUoZ3JvdXApID4gZ3JvdXBfZmlyc3RfY3B1KHNkcy0+Z3JvdXBfbWluKSkpIHsKKwkJc2RzLT5ncm91cF9taW4gPSBncm91cDsKKwkJc2RzLT5taW5fbnJfcnVubmluZyA9IHNncy0+c3VtX25yX3J1bm5pbmc7CisJCXNkcy0+bWluX2xvYWRfcGVyX3Rhc2sgPSBzZ3MtPnN1bV93ZWlnaHRlZF9sb2FkIC8KKwkJCQkJCXNncy0+c3VtX25yX3J1bm5pbmc7CisJfQorCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIGdyb3VwIHdoaWNoIGlzIGFsbW9zdCBuZWFyIGl0cworCSAqIGNhcGFjaXR5IGJ1dCBzdGlsbCBoYXMgc29tZSBzcGFjZSB0byBwaWNrIHVwIHNvbWUgbG9hZAorCSAqIGZyb20gb3RoZXIgZ3JvdXAgYW5kIHNhdmUgbW9yZSBwb3dlcgorCSAqLworCWlmIChzZ3MtPnN1bV9ucl9ydW5uaW5nICsgMSA+IHNncy0+Z3JvdXBfY2FwYWNpdHkpCisJCXJldHVybjsKKworCWlmIChzZ3MtPnN1bV9ucl9ydW5uaW5nID4gc2RzLT5sZWFkZXJfbnJfcnVubmluZyB8fAorCSAgICAoc2dzLT5zdW1fbnJfcnVubmluZyA9PSBzZHMtPmxlYWRlcl9ucl9ydW5uaW5nICYmCisJICAgICBncm91cF9maXJzdF9jcHUoZ3JvdXApIDwgZ3JvdXBfZmlyc3RfY3B1KHNkcy0+Z3JvdXBfbGVhZGVyKSkpIHsKKwkJc2RzLT5ncm91cF9sZWFkZXIgPSBncm91cDsKKwkJc2RzLT5sZWFkZXJfbnJfcnVubmluZyA9IHNncy0+c3VtX25yX3J1bm5pbmc7CisJfQorfQorCisvKioKKyAqIGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cCAtIHNlZSBpZiB0aGVyZSBpcyBwb3RlbnRpYWwgZm9yIHNvbWUgcG93ZXItc2F2aW5ncyBiYWxhbmNlCisgKiBAc2RzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4KKyAqCXVuZGVyIGNvbnNpZGVyYXRpb24uCisgKiBAdGhpc19jcHU6IENwdSBhdCB3aGljaCB3ZSdyZSBjdXJyZW50bHkgcGVyZm9ybWluZyBsb2FkLWJhbGFuY2luZy4KKyAqIEBpbWJhbGFuY2U6IFZhcmlhYmxlIHRvIHN0b3JlIHRoZSBpbWJhbGFuY2UuCisgKgorICogRGVzY3JpcHRpb246CisgKiBDaGVjayBpZiB3ZSBoYXZlIHBvdGVudGlhbCB0byBwZXJmb3JtIHNvbWUgcG93ZXItc2F2aW5ncyBiYWxhbmNlLgorICogSWYgeWVzLCBzZXQgdGhlIGJ1c2llc3QgZ3JvdXAgdG8gYmUgdGhlIGxlYXN0IGxvYWRlZCBncm91cCBpbiB0aGUKKyAqIHNjaGVkX2RvbWFpbiwgc28gdGhhdCBpdCdzIENQVXMgY2FuIGJlIHB1dCB0byBpZGxlLgorICoKKyAqIFJldHVybnMgMSBpZiB0aGVyZSBpcyBwb3RlbnRpYWwgdG8gcGVyZm9ybSBwb3dlci1zYXZpbmdzIGJhbGFuY2UuCisgKiBFbHNlIHJldHVybnMgMC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLAorCQkJCQlpbnQgdGhpc19jcHUsIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKK3sKKwlpZiAoIXNkcy0+cG93ZXJfc2F2aW5nc19iYWxhbmNlKQorCQlyZXR1cm4gMDsKKworCWlmIChzZHMtPnRoaXMgIT0gc2RzLT5ncm91cF9sZWFkZXIgfHwKKwkJCXNkcy0+Z3JvdXBfbGVhZGVyID09IHNkcy0+Z3JvdXBfbWluKQorCQlyZXR1cm4gMDsKKworCSppbWJhbGFuY2UgPSBzZHMtPm1pbl9sb2FkX3Blcl90YXNrOworCXNkcy0+YnVzaWVzdCA9IHNkcy0+Z3JvdXBfbWluOworCisJcmV0dXJuIDE7CisKK30KKyNlbHNlIC8qIENPTkZJR19TQ0hFRF9NQyB8fCBDT05GSUdfU0NIRURfU01UICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAorCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLAorCXN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBpbnQgbG9jYWxfZ3JvdXAsIHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcG93ZXJfc2F2ZV9idXNpZXN0X2dyb3VwKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLAorCQkJCQlpbnQgdGhpc19jcHUsIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKK3sKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiBDT05GSUdfU0NIRURfTUMgfHwgQ09ORklHX1NDSEVEX1NNVCAqLworCisKK3Vuc2lnbmVkIGxvbmcgZGVmYXVsdF9zY2FsZV9mcmVxX3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQoreworCXJldHVybiBTQ0hFRF9MT0FEX1NDQUxFOworfQorCit1bnNpZ25lZCBsb25nIF9fd2VhayBhcmNoX3NjYWxlX2ZyZXFfcG93ZXIoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCit7CisJcmV0dXJuIGRlZmF1bHRfc2NhbGVfZnJlcV9wb3dlcihzZCwgY3B1KTsKK30KKwordW5zaWduZWQgbG9uZyBkZWZhdWx0X3NjYWxlX3NtdF9wb3dlcihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIHdlaWdodCA9IGNwdW1hc2tfd2VpZ2h0KHNjaGVkX2RvbWFpbl9zcGFuKHNkKSk7CisJdW5zaWduZWQgbG9uZyBzbXRfZ2FpbiA9IHNkLT5zbXRfZ2FpbjsKKworCXNtdF9nYWluIC89IHdlaWdodDsKKworCXJldHVybiBzbXRfZ2FpbjsKK30KKwordW5zaWduZWQgbG9uZyBfX3dlYWsgYXJjaF9zY2FsZV9zbXRfcG93ZXIoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCit7CisJcmV0dXJuIGRlZmF1bHRfc2NhbGVfc210X3Bvd2VyKHNkLCBjcHUpOworfQorCit1bnNpZ25lZCBsb25nIHNjYWxlX3J0X3Bvd2VyKGludCBjcHUpCit7CisJc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOworCXU2NCB0b3RhbCwgYXZhaWxhYmxlOworCisJc2NoZWRfYXZnX3VwZGF0ZShycSk7CisKKwl0b3RhbCA9IHNjaGVkX2F2Z19wZXJpb2QoKSArIChycS0+Y2xvY2sgLSBycS0+YWdlX3N0YW1wKTsKKwlhdmFpbGFibGUgPSB0b3RhbCAtIHJxLT5ydF9hdmc7CisKKwlpZiAodW5saWtlbHkoKHM2NCl0b3RhbCA8IFNDSEVEX0xPQURfU0NBTEUpKQorCQl0b3RhbCA9IFNDSEVEX0xPQURfU0NBTEU7CisKKwl0b3RhbCA+Pj0gU0NIRURfTE9BRF9TSElGVDsKKworCXJldHVybiBkaXZfdTY0KGF2YWlsYWJsZSwgdG90YWwpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfY3B1X3Bvd2VyKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgd2VpZ2h0ID0gY3B1bWFza193ZWlnaHQoc2NoZWRfZG9tYWluX3NwYW4oc2QpKTsKKwl1bnNpZ25lZCBsb25nIHBvd2VyID0gU0NIRURfTE9BRF9TQ0FMRTsKKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnNkZyA9IHNkLT5ncm91cHM7CisKKwlpZiAoc2NoZWRfZmVhdChBUkNIX1BPV0VSKSkKKwkJcG93ZXIgKj0gYXJjaF9zY2FsZV9mcmVxX3Bvd2VyKHNkLCBjcHUpOworCWVsc2UKKwkJcG93ZXIgKj0gZGVmYXVsdF9zY2FsZV9mcmVxX3Bvd2VyKHNkLCBjcHUpOworCisJcG93ZXIgPj49IFNDSEVEX0xPQURfU0hJRlQ7CisKKwlpZiAoKHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSKSAmJiB3ZWlnaHQgPiAxKSB7CisJCWlmIChzY2hlZF9mZWF0KEFSQ0hfUE9XRVIpKQorCQkJcG93ZXIgKj0gYXJjaF9zY2FsZV9zbXRfcG93ZXIoc2QsIGNwdSk7CisJCWVsc2UKKwkJCXBvd2VyICo9IGRlZmF1bHRfc2NhbGVfc210X3Bvd2VyKHNkLCBjcHUpOworCisJCXBvd2VyID4+PSBTQ0hFRF9MT0FEX1NISUZUOworCX0KKworCXBvd2VyICo9IHNjYWxlX3J0X3Bvd2VyKGNwdSk7CisJcG93ZXIgPj49IFNDSEVEX0xPQURfU0hJRlQ7CisKKwlpZiAoIXBvd2VyKQorCQlwb3dlciA9IDE7CisKKwlzZGctPmNwdV9wb3dlciA9IHBvd2VyOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfZ3JvdXBfcG93ZXIoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCit7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqY2hpbGQgPSBzZC0+Y2hpbGQ7CisJc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCwgKnNkZyA9IHNkLT5ncm91cHM7CisJdW5zaWduZWQgbG9uZyBwb3dlcjsKKworCWlmICghY2hpbGQpIHsKKwkJdXBkYXRlX2NwdV9wb3dlcihzZCwgY3B1KTsKKwkJcmV0dXJuOworCX0KKworCXBvd2VyID0gMDsKKworCWdyb3VwID0gY2hpbGQtPmdyb3VwczsKKwlkbyB7CisJCXBvd2VyICs9IGdyb3VwLT5jcHVfcG93ZXI7CisJCWdyb3VwID0gZ3JvdXAtPm5leHQ7CisJfSB3aGlsZSAoZ3JvdXAgIT0gY2hpbGQtPmdyb3Vwcyk7CisKKwlzZGctPmNwdV9wb3dlciA9IHBvd2VyOworfQorCisvKioKKyAqIHVwZGF0ZV9zZ19sYl9zdGF0cyAtIFVwZGF0ZSBzY2hlZF9ncm91cCdzIHN0YXRpc3RpY3MgZm9yIGxvYWQgYmFsYW5jaW5nLgorICogQHNkOiBUaGUgc2NoZWRfZG9tYWluIHdob3NlIHN0YXRpc3RpY3MgYXJlIHRvIGJlIHVwZGF0ZWQuCisgKiBAZ3JvdXA6IHNjaGVkX2dyb3VwIHdob3NlIHN0YXRpc3RpY3MgYXJlIHRvIGJlIHVwZGF0ZWQuCisgKiBAdGhpc19jcHU6IENwdSBmb3Igd2hpY2ggbG9hZCBiYWxhbmNlIGlzIGN1cnJlbnRseSBwZXJmb3JtZWQuCisgKiBAaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhpc19jcHUKKyAqIEBsb2FkX2lkeDogTG9hZCBpbmRleCBvZiBzY2hlZF9kb21haW4gb2YgdGhpc19jcHUgZm9yIGxvYWQgY2FsYy4KKyAqIEBzZF9pZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGUgc2NoZWRfZG9tYWluIGNvbnRhaW5pbmcgZ3JvdXAuCisgKiBAbG9jYWxfZ3JvdXA6IERvZXMgZ3JvdXAgY29udGFpbiB0aGlzX2NwdS4KKyAqIEBjcHVzOiBTZXQgb2YgY3B1cyBjb25zaWRlcmVkIGZvciBsb2FkIGJhbGFuY2luZy4KKyAqIEBiYWxhbmNlOiBTaG91bGQgd2UgYmFsYW5jZS4KKyAqIEBzZ3M6IHZhcmlhYmxlIHRvIGhvbGQgdGhlIHN0YXRpc3RpY3MgZm9yIHRoaXMgZ3JvdXAuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2dfbGJfc3RhdHMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsCisJCQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLCBpbnQgdGhpc19jcHUsCisJCQllbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwgaW50IGxvYWRfaWR4LCBpbnQgKnNkX2lkbGUsCisJCQlpbnQgbG9jYWxfZ3JvdXAsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzLAorCQkJaW50ICpiYWxhbmNlLCBzdHJ1Y3Qgc2dfbGJfc3RhdHMgKnNncykKK3sKKwl1bnNpZ25lZCBsb25nIGxvYWQsIG1heF9jcHVfbG9hZCwgbWluX2NwdV9sb2FkOworCWludCBpOworCXVuc2lnbmVkIGludCBiYWxhbmNlX2NwdSA9IC0xLCBmaXJzdF9pZGxlX2NwdSA9IDA7CisJdW5zaWduZWQgbG9uZyBhdmdfbG9hZF9wZXJfdGFzayA9IDA7CisKKwlpZiAobG9jYWxfZ3JvdXApCisJCWJhbGFuY2VfY3B1ID0gZ3JvdXBfZmlyc3RfY3B1KGdyb3VwKTsKKworCS8qIFRhbGx5IHVwIHRoZSBsb2FkIG9mIGFsbCBDUFVzIGluIHRoZSBncm91cCAqLworCW1heF9jcHVfbG9hZCA9IDA7CisJbWluX2NwdV9sb2FkID0gfjBVTDsKKworCWZvcl9lYWNoX2NwdV9hbmQoaSwgc2NoZWRfZ3JvdXBfY3B1cyhncm91cCksIGNwdXMpIHsKKwkJc3RydWN0IHJxICpycSA9IGNwdV9ycShpKTsKKworCQlpZiAoKnNkX2lkbGUgJiYgcnEtPm5yX3J1bm5pbmcpCisJCQkqc2RfaWRsZSA9IDA7CisKKwkJLyogQmlhcyBiYWxhbmNpbmcgdG93YXJkIGNwdXMgb2Ygb3VyIGRvbWFpbiAqLworCQlpZiAobG9jYWxfZ3JvdXApIHsKKwkJCWlmIChpZGxlX2NwdShpKSAmJiAhZmlyc3RfaWRsZV9jcHUpIHsKKwkJCQlmaXJzdF9pZGxlX2NwdSA9IDE7CisJCQkJYmFsYW5jZV9jcHUgPSBpOworCQkJfQorCisJCQlsb2FkID0gdGFyZ2V0X2xvYWQoaSwgbG9hZF9pZHgpOworCQl9IGVsc2UgeworCQkJbG9hZCA9IHNvdXJjZV9sb2FkKGksIGxvYWRfaWR4KTsKKwkJCWlmIChsb2FkID4gbWF4X2NwdV9sb2FkKQorCQkJCW1heF9jcHVfbG9hZCA9IGxvYWQ7CisJCQlpZiAobWluX2NwdV9sb2FkID4gbG9hZCkKKwkJCQltaW5fY3B1X2xvYWQgPSBsb2FkOworCQl9CisKKwkJc2dzLT5ncm91cF9sb2FkICs9IGxvYWQ7CisJCXNncy0+c3VtX25yX3J1bm5pbmcgKz0gcnEtPm5yX3J1bm5pbmc7CisJCXNncy0+c3VtX3dlaWdodGVkX2xvYWQgKz0gd2VpZ2h0ZWRfY3B1bG9hZChpKTsKKworCX0KKworCS8qCisJICogRmlyc3QgaWRsZSBjcHUgb3IgdGhlIGZpcnN0IGNwdShidXNpZXN0KSBpbiB0aGlzIHNjaGVkIGdyb3VwCisJICogaXMgZWxpZ2libGUgZm9yIGRvaW5nIGxvYWQgYmFsYW5jaW5nIGF0IHRoaXMgYW5kIGFib3ZlCisJICogZG9tYWlucy4gSW4gdGhlIG5ld2x5IGlkbGUgY2FzZSwgd2Ugd2lsbCBhbGxvdyBhbGwgdGhlIGNwdSdzCisJICogdG8gZG8gdGhlIG5ld2x5IGlkbGUgbG9hZCBiYWxhbmNlLgorCSAqLworCWlmIChpZGxlICE9IENQVV9ORVdMWV9JRExFICYmIGxvY2FsX2dyb3VwICYmCisJICAgIGJhbGFuY2VfY3B1ICE9IHRoaXNfY3B1KSB7CisJCSpiYWxhbmNlID0gMDsKKwkJcmV0dXJuOworCX0KKworCXVwZGF0ZV9ncm91cF9wb3dlcihzZCwgdGhpc19jcHUpOworCisJLyogQWRqdXN0IGJ5IHJlbGF0aXZlIENQVSBwb3dlciBvZiB0aGUgZ3JvdXAgKi8KKwlzZ3MtPmF2Z19sb2FkID0gKHNncy0+Z3JvdXBfbG9hZCAqIFNDSEVEX0xPQURfU0NBTEUpIC8gZ3JvdXAtPmNwdV9wb3dlcjsKKworCS8qCisJICogQ29uc2lkZXIgdGhlIGdyb3VwIHVuYmFsYW5jZWQgd2hlbiB0aGUgaW1iYWxhbmNlIGlzIGxhcmdlcgorCSAqIHRoYW4gdGhlIGF2ZXJhZ2Ugd2VpZ2h0IG9mIHR3byB0YXNrcy4KKwkgKgorCSAqIEFQWjogd2l0aCBjZ3JvdXAgdGhlIGF2ZyB0YXNrIHdlaWdodCBjYW4gdmFyeSB3aWxkbHkgYW5kCisJICogICAgICBtaWdodCBub3QgYmUgYSBzdWl0YWJsZSBudW1iZXIgLSBzaG91bGQgd2Uga2VlcCBhCisJICogICAgICBub3JtYWxpemVkIG5yX3J1bm5pbmcgbnVtYmVyIHNvbWV3aGVyZSB0aGF0IG5lZ2F0ZXMKKwkgKiAgICAgIHRoZSBoaWVyYXJjaHk/CisJICovCisJaWYgKHNncy0+c3VtX25yX3J1bm5pbmcpCisJCWF2Z19sb2FkX3Blcl90YXNrID0gc2dzLT5zdW1fd2VpZ2h0ZWRfbG9hZCAvIHNncy0+c3VtX25yX3J1bm5pbmc7CisKKwlpZiAoKG1heF9jcHVfbG9hZCAtIG1pbl9jcHVfbG9hZCkgPiAyKmF2Z19sb2FkX3Blcl90YXNrKQorCQlzZ3MtPmdyb3VwX2ltYiA9IDE7CisKKwlzZ3MtPmdyb3VwX2NhcGFjaXR5ID0KKwkJRElWX1JPVU5EX0NMT1NFU1QoZ3JvdXAtPmNwdV9wb3dlciwgU0NIRURfTE9BRF9TQ0FMRSk7Cit9CisKKy8qKgorICogdXBkYXRlX3NkX2xiX3N0YXRzIC0gVXBkYXRlIHNjaGVkX2dyb3VwJ3Mgc3RhdGlzdGljcyBmb3IgbG9hZCBiYWxhbmNpbmcuCisgKiBAc2Q6IHNjaGVkX2RvbWFpbiB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgorICogQHRoaXNfY3B1OiBDcHUgZm9yIHdoaWNoIGxvYWQgYmFsYW5jZSBpcyBjdXJyZW50bHkgcGVyZm9ybWVkLgorICogQGlkbGU6IElkbGUgc3RhdHVzIG9mIHRoaXNfY3B1CisgKiBAc2RfaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhlIHNjaGVkX2RvbWFpbiBjb250YWluaW5nIGdyb3VwLgorICogQGNwdXM6IFNldCBvZiBjcHVzIGNvbnNpZGVyZWQgZm9yIGxvYWQgYmFsYW5jaW5nLgorICogQGJhbGFuY2U6IFNob3VsZCB3ZSBiYWxhbmNlLgorICogQHNkczogdmFyaWFibGUgdG8gaG9sZCB0aGUgc3RhdGlzdGljcyBmb3IgdGhpcyBzY2hlZF9kb21haW4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2RfbGJfc3RhdHMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCB0aGlzX2NwdSwKKwkJCWVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLCBpbnQgKnNkX2lkbGUsCisJCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1cywgaW50ICpiYWxhbmNlLAorCQkJc3RydWN0IHNkX2xiX3N0YXRzICpzZHMpCit7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqY2hpbGQgPSBzZC0+Y2hpbGQ7CisJc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCA9IHNkLT5ncm91cHM7CisJc3RydWN0IHNnX2xiX3N0YXRzIHNnczsKKwlpbnQgbG9hZF9pZHgsIHByZWZlcl9zaWJsaW5nID0gMDsKKworCWlmIChjaGlsZCAmJiBjaGlsZC0+ZmxhZ3MgJiBTRF9QUkVGRVJfU0lCTElORykKKwkJcHJlZmVyX3NpYmxpbmcgPSAxOworCisJaW5pdF9zZF9wb3dlcl9zYXZpbmdzX3N0YXRzKHNkLCBzZHMsIGlkbGUpOworCWxvYWRfaWR4ID0gZ2V0X3NkX2xvYWRfaWR4KHNkLCBpZGxlKTsKKworCWRvIHsKKwkJaW50IGxvY2FsX2dyb3VwOworCisJCWxvY2FsX2dyb3VwID0gY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwKKwkJCQkJICAgICAgIHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKTsKKwkJbWVtc2V0KCZzZ3MsIDAsIHNpemVvZihzZ3MpKTsKKwkJdXBkYXRlX3NnX2xiX3N0YXRzKHNkLCBncm91cCwgdGhpc19jcHUsIGlkbGUsIGxvYWRfaWR4LCBzZF9pZGxlLAorCQkJCWxvY2FsX2dyb3VwLCBjcHVzLCBiYWxhbmNlLCAmc2dzKTsKKworCQlpZiAobG9jYWxfZ3JvdXAgJiYgISgqYmFsYW5jZSkpCisJCQlyZXR1cm47CisKKwkJc2RzLT50b3RhbF9sb2FkICs9IHNncy5ncm91cF9sb2FkOworCQlzZHMtPnRvdGFsX3B3ciArPSBncm91cC0+Y3B1X3Bvd2VyOworCisJCS8qCisJCSAqIEluIGNhc2UgdGhlIGNoaWxkIGRvbWFpbiBwcmVmZXJzIHRhc2tzIGdvIHRvIHNpYmxpbmdzCisJCSAqIGZpcnN0LCBsb3dlciB0aGUgZ3JvdXAgY2FwYWNpdHkgdG8gb25lIHNvIHRoYXQgd2UnbGwgdHJ5CisJCSAqIGFuZCBtb3ZlIGFsbCB0aGUgZXhjZXNzIHRhc2tzIGF3YXkuCisJCSAqLworCQlpZiAocHJlZmVyX3NpYmxpbmcpCisJCQlzZ3MuZ3JvdXBfY2FwYWNpdHkgPSBtaW4oc2dzLmdyb3VwX2NhcGFjaXR5LCAxVUwpOworCisJCWlmIChsb2NhbF9ncm91cCkgeworCQkJc2RzLT50aGlzX2xvYWQgPSBzZ3MuYXZnX2xvYWQ7CisJCQlzZHMtPnRoaXMgPSBncm91cDsKKwkJCXNkcy0+dGhpc19ucl9ydW5uaW5nID0gc2dzLnN1bV9ucl9ydW5uaW5nOworCQkJc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2sgPSBzZ3Muc3VtX3dlaWdodGVkX2xvYWQ7CisJCX0gZWxzZSBpZiAoc2dzLmF2Z19sb2FkID4gc2RzLT5tYXhfbG9hZCAmJgorCQkJICAgKHNncy5zdW1fbnJfcnVubmluZyA+IHNncy5ncm91cF9jYXBhY2l0eSB8fAorCQkJCXNncy5ncm91cF9pbWIpKSB7CisJCQlzZHMtPm1heF9sb2FkID0gc2dzLmF2Z19sb2FkOworCQkJc2RzLT5idXNpZXN0ID0gZ3JvdXA7CisJCQlzZHMtPmJ1c2llc3RfbnJfcnVubmluZyA9IHNncy5zdW1fbnJfcnVubmluZzsKKwkJCXNkcy0+YnVzaWVzdF9ncm91cF9jYXBhY2l0eSA9IHNncy5ncm91cF9jYXBhY2l0eTsKKwkJCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrID0gc2dzLnN1bV93ZWlnaHRlZF9sb2FkOworCQkJc2RzLT5ncm91cF9pbWIgPSBzZ3MuZ3JvdXBfaW1iOworCQl9CisKKwkJdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoZ3JvdXAsIHNkcywgbG9jYWxfZ3JvdXAsICZzZ3MpOworCQlncm91cCA9IGdyb3VwLT5uZXh0OworCX0gd2hpbGUgKGdyb3VwICE9IHNkLT5ncm91cHMpOworfQorCisvKioKKyAqIGZpeF9zbWFsbF9pbWJhbGFuY2UgLSBDYWxjdWxhdGUgdGhlIG1pbm9yIGltYmFsYW5jZSB0aGF0IGV4aXN0cworICoJCQlhbW9uZ3N0IHRoZSBncm91cHMgb2YgYSBzY2hlZF9kb21haW4sIGR1cmluZworICoJCQlsb2FkIGJhbGFuY2luZy4KKyAqIEBzZHM6IFN0YXRpc3RpY3Mgb2YgdGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBpbWJhbGFuY2UgaXMgdG8gYmUgY2FsY3VsYXRlZC4KKyAqIEB0aGlzX2NwdTogVGhlIGNwdSBhdCB3aG9zZSBzY2hlZF9kb21haW4gd2UncmUgcGVyZm9ybWluZyBsb2FkLWJhbGFuY2UuCisgKiBAaW1iYWxhbmNlOiBWYXJpYWJsZSB0byBzdG9yZSB0aGUgaW1iYWxhbmNlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZml4X3NtYWxsX2ltYmFsYW5jZShzdHJ1Y3Qgc2RfbGJfc3RhdHMgKnNkcywKKwkJCQlpbnQgdGhpc19jcHUsIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcCwgcHdyX25vdyA9IDAsIHB3cl9tb3ZlID0gMDsKKwl1bnNpZ25lZCBpbnQgaW1ibiA9IDI7CisJdW5zaWduZWQgbG9uZyBzY2FsZWRfYnVzeV9sb2FkX3Blcl90YXNrOworCisJaWYgKHNkcy0+dGhpc19ucl9ydW5uaW5nKSB7CisJCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrIC89IHNkcy0+dGhpc19ucl9ydW5uaW5nOworCQlpZiAoc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgPgorCQkJCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrKQorCQkJaW1ibiA9IDE7CisJfSBlbHNlCisJCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrID0KKwkJCWNwdV9hdmdfbG9hZF9wZXJfdGFzayh0aGlzX2NwdSk7CisKKwlzY2FsZWRfYnVzeV9sb2FkX3Blcl90YXNrID0gc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sKKwkJCQkJCSAqIFNDSEVEX0xPQURfU0NBTEU7CisJc2NhbGVkX2J1c3lfbG9hZF9wZXJfdGFzayAvPSBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlcjsKKworCWlmIChzZHMtPm1heF9sb2FkIC0gc2RzLT50aGlzX2xvYWQgKyBzY2FsZWRfYnVzeV9sb2FkX3Blcl90YXNrID49CisJCQkoc2NhbGVkX2J1c3lfbG9hZF9wZXJfdGFzayAqIGltYm4pKSB7CisJCSppbWJhbGFuY2UgPSBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzazsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogT0ssIHdlIGRvbid0IGhhdmUgZW5vdWdoIGltYmFsYW5jZSB0byBqdXN0aWZ5IG1vdmluZyB0YXNrcywKKwkgKiBob3dldmVyIHdlIG1heSBiZSBhYmxlIHRvIGluY3JlYXNlIHRvdGFsIENQVSBwb3dlciB1c2VkIGJ5CisJICogbW92aW5nIHRoZW0uCisJICovCisKKwlwd3Jfbm93ICs9IHNkcy0+YnVzaWVzdC0+Y3B1X3Bvd2VyICoKKwkJCW1pbihzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzaywgc2RzLT5tYXhfbG9hZCk7CisJcHdyX25vdyArPSBzZHMtPnRoaXMtPmNwdV9wb3dlciAqCisJCQltaW4oc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2ssIHNkcy0+dGhpc19sb2FkKTsKKwlwd3Jfbm93IC89IFNDSEVEX0xPQURfU0NBTEU7CisKKwkvKiBBbW91bnQgb2YgbG9hZCB3ZSdkIHN1YnRyYWN0ICovCisJdG1wID0gKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSkgLworCQlzZHMtPmJ1c2llc3QtPmNwdV9wb3dlcjsKKwlpZiAoc2RzLT5tYXhfbG9hZCA+IHRtcCkKKwkJcHdyX21vdmUgKz0gc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIgKgorCQkJbWluKHNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrLCBzZHMtPm1heF9sb2FkIC0gdG1wKTsKKworCS8qIEFtb3VudCBvZiBsb2FkIHdlJ2QgYWRkICovCisJaWYgKHNkcy0+bWF4X2xvYWQgKiBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlciA8CisJCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrICogU0NIRURfTE9BRF9TQ0FMRSkKKwkJdG1wID0gKHNkcy0+bWF4X2xvYWQgKiBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlcikgLworCQkJc2RzLT50aGlzLT5jcHVfcG93ZXI7CisJZWxzZQorCQl0bXAgPSAoc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2sgKiBTQ0hFRF9MT0FEX1NDQUxFKSAvCisJCQlzZHMtPnRoaXMtPmNwdV9wb3dlcjsKKwlwd3JfbW92ZSArPSBzZHMtPnRoaXMtPmNwdV9wb3dlciAqCisJCQltaW4oc2RzLT50aGlzX2xvYWRfcGVyX3Rhc2ssIHNkcy0+dGhpc19sb2FkICsgdG1wKTsKKwlwd3JfbW92ZSAvPSBTQ0hFRF9MT0FEX1NDQUxFOworCisJLyogTW92ZSBpZiB3ZSBnYWluIHRocm91Z2hwdXQgKi8KKwlpZiAocHdyX21vdmUgPiBwd3Jfbm93KQorCQkqaW1iYWxhbmNlID0gc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2s7Cit9CisKKy8qKgorICogY2FsY3VsYXRlX2ltYmFsYW5jZSAtIENhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIGltYmFsYW5jZSBwcmVzZW50IHdpdGhpbiB0aGUKKyAqCQkJIGdyb3VwcyBvZiBhIGdpdmVuIHNjaGVkX2RvbWFpbiBkdXJpbmcgbG9hZCBiYWxhbmNlLgorICogQHNkczogc3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluIHdob3NlIGltYmFsYW5jZSBpcyB0byBiZSBjYWxjdWxhdGVkLgorICogQHRoaXNfY3B1OiBDcHUgZm9yIHdoaWNoIGN1cnJlbnRseSBsb2FkIGJhbGFuY2UgaXMgYmVpbmcgcGVyZm9ybWVkLgorICogQGltYmFsYW5jZTogVGhlIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBpbWJhbGFuY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVfaW1iYWxhbmNlKHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLCBpbnQgdGhpc19jcHUsCisJCXVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKK3sKKwl1bnNpZ25lZCBsb25nIG1heF9wdWxsLCBsb2FkX2Fib3ZlX2NhcGFjaXR5ID0gfjBVTDsKKworCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrIC89IHNkcy0+YnVzaWVzdF9ucl9ydW5uaW5nOworCWlmIChzZHMtPmdyb3VwX2ltYikgeworCQlzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzayA9CisJCQltaW4oc2RzLT5idXNpZXN0X2xvYWRfcGVyX3Rhc2ssIHNkcy0+YXZnX2xvYWQpOworCX0KKworCS8qCisJICogSW4gdGhlIHByZXNlbmNlIG9mIHNtcCBuaWNlIGJhbGFuY2luZywgY2VydGFpbiBzY2VuYXJpb3MgY2FuIGhhdmUKKwkgKiBtYXggbG9hZCBsZXNzIHRoYW4gYXZnIGxvYWQoYXMgd2Ugc2tpcCB0aGUgZ3JvdXBzIGF0IG9yIGJlbG93CisJICogaXRzIGNwdV9wb3dlciwgd2hpbGUgY2FsY3VsYXRpbmcgbWF4X2xvYWQuLikKKwkgKi8KKwlpZiAoc2RzLT5tYXhfbG9hZCA8IHNkcy0+YXZnX2xvYWQpIHsKKwkJKmltYmFsYW5jZSA9IDA7CisJCXJldHVybiBmaXhfc21hbGxfaW1iYWxhbmNlKHNkcywgdGhpc19jcHUsIGltYmFsYW5jZSk7CisJfQorCisJaWYgKCFzZHMtPmdyb3VwX2ltYikgeworCQkvKgorCQkgKiBEb24ndCB3YW50IHRvIHB1bGwgc28gbWFueSB0YXNrcyB0aGF0IGEgZ3JvdXAgd291bGQgZ28gaWRsZS4KKwkJICovCisJCWxvYWRfYWJvdmVfY2FwYWNpdHkgPSAoc2RzLT5idXNpZXN0X25yX3J1bm5pbmcgLQorCQkJCQkJc2RzLT5idXNpZXN0X2dyb3VwX2NhcGFjaXR5KTsKKworCQlsb2FkX2Fib3ZlX2NhcGFjaXR5ICo9IChTQ0hFRF9MT0FEX1NDQUxFICogU0NIRURfTE9BRF9TQ0FMRSk7CisKKwkJbG9hZF9hYm92ZV9jYXBhY2l0eSAvPSBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlcjsKKwl9CisKKwkvKgorCSAqIFdlJ3JlIHRyeWluZyB0byBnZXQgYWxsIHRoZSBjcHVzIHRvIHRoZSBhdmVyYWdlX2xvYWQsIHNvIHdlIGRvbid0CisJICogd2FudCB0byBwdXNoIG91cnNlbHZlcyBhYm92ZSB0aGUgYXZlcmFnZSBsb2FkLCBub3IgZG8gd2Ugd2lzaCB0bworCSAqIHJlZHVjZSB0aGUgbWF4IGxvYWRlZCBjcHUgYmVsb3cgdGhlIGF2ZXJhZ2UgbG9hZC4gQXQgdGhlIHNhbWUgdGltZSwKKwkgKiB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gcmVkdWNlIHRoZSBncm91cCBsb2FkIGJlbG93IHRoZSBncm91cCBjYXBhY2l0eQorCSAqIChzbyB0aGF0IHdlIGNhbiBpbXBsZW1lbnQgcG93ZXItc2F2aW5ncyBwb2xpY2llcyBldGMpLiBUaHVzIHdlIGxvb2sKKwkgKiBmb3IgdGhlIG1pbmltdW0gcG9zc2libGUgaW1iYWxhbmNlLgorCSAqIEJlIGNhcmVmdWwgb2YgbmVnYXRpdmUgbnVtYmVycyBhcyB0aGV5J2xsIGFwcGVhciBhcyB2ZXJ5IGxhcmdlIHZhbHVlcworCSAqIHdpdGggdW5zaWduZWQgbG9uZ3MuCisJICovCisJbWF4X3B1bGwgPSBtaW4oc2RzLT5tYXhfbG9hZCAtIHNkcy0+YXZnX2xvYWQsIGxvYWRfYWJvdmVfY2FwYWNpdHkpOworCisJLyogSG93IG11Y2ggbG9hZCB0byBhY3R1YWxseSBtb3ZlIHRvIGVxdWFsaXNlIHRoZSBpbWJhbGFuY2UgKi8KKwkqaW1iYWxhbmNlID0gbWluKG1heF9wdWxsICogc2RzLT5idXNpZXN0LT5jcHVfcG93ZXIsCisJCShzZHMtPmF2Z19sb2FkIC0gc2RzLT50aGlzX2xvYWQpICogc2RzLT50aGlzLT5jcHVfcG93ZXIpCisJCQkvIFNDSEVEX0xPQURfU0NBTEU7CisKKwkvKgorCSAqIGlmICppbWJhbGFuY2UgaXMgbGVzcyB0aGFuIHRoZSBhdmVyYWdlIGxvYWQgcGVyIHJ1bm5hYmxlIHRhc2sKKwkgKiB0aGVyZSBpcyBubyBnYXVyYW50ZWUgdGhhdCBhbnkgdGFza3Mgd2lsbCBiZSBtb3ZlZCBzbyB3ZSdsbCBoYXZlCisJICogYSB0aGluayBhYm91dCBidW1waW5nIGl0cyB2YWx1ZSB0byBmb3JjZSBhdCBsZWFzdCBvbmUgdGFzayB0byBiZQorCSAqIG1vdmVkCisJICovCisJaWYgKCppbWJhbGFuY2UgPCBzZHMtPmJ1c2llc3RfbG9hZF9wZXJfdGFzaykKKwkJcmV0dXJuIGZpeF9zbWFsbF9pbWJhbGFuY2Uoc2RzLCB0aGlzX2NwdSwgaW1iYWxhbmNlKTsKKworfQorLyoqKioqKiogZmluZF9idXNpZXN0X2dyb3VwKCkgaGVscGVycyBlbmQgaGVyZSAqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogZmluZF9idXNpZXN0X2dyb3VwIC0gUmV0dXJucyB0aGUgYnVzaWVzdCBncm91cCB3aXRoaW4gdGhlIHNjaGVkX2RvbWFpbgorICogaWYgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLiBJZiB0aGVyZSBpc24ndCBhbiBpbWJhbGFuY2UsIGFuZAorICogdGhlIHVzZXIgaGFzIG9wdGVkIGZvciBwb3dlci1zYXZpbmdzLCBpdCByZXR1cm5zIGEgZ3JvdXAgd2hvc2UKKyAqIENQVXMgY2FuIGJlIHB1dCB0byBpZGxlIGJ5IHJlYmFsYW5jaW5nIHRob3NlIHRhc2tzIGVsc2V3aGVyZSwgaWYKKyAqIHN1Y2ggYSBncm91cCBleGlzdHMuCisgKgorICogQWxzbyBjYWxjdWxhdGVzIHRoZSBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZCB3aGljaCBzaG91bGQgYmUgbW92ZWQKKyAqIHRvIHJlc3RvcmUgYmFsYW5jZS4KKyAqCisgKiBAc2Q6IFRoZSBzY2hlZF9kb21haW4gd2hvc2UgYnVzaWVzdCBncm91cCBpcyB0byBiZSByZXR1cm5lZC4KKyAqIEB0aGlzX2NwdTogVGhlIGNwdSBmb3Igd2hpY2ggbG9hZCBiYWxhbmNpbmcgaXMgY3VycmVudGx5IGJlaW5nIHBlcmZvcm1lZC4KKyAqIEBpbWJhbGFuY2U6IFZhcmlhYmxlIHdoaWNoIHN0b3JlcyBhbW91bnQgb2Ygd2VpZ2h0ZWQgbG9hZCB3aGljaCBzaG91bGQKKyAqCQliZSBtb3ZlZCB0byByZXN0b3JlIGJhbGFuY2UvcHV0IGEgZ3JvdXAgdG8gaWRsZS4KKyAqIEBpZGxlOiBUaGUgaWRsZSBzdGF0dXMgb2YgdGhpc19jcHUuCisgKiBAc2RfaWRsZTogVGhlIGlkbGVuZXNzIG9mIHNkCisgKiBAY3B1czogVGhlIHNldCBvZiBDUFVzIHVuZGVyIGNvbnNpZGVyYXRpb24gZm9yIGxvYWQtYmFsYW5jaW5nLgorICogQGJhbGFuY2U6IFBvaW50ZXIgdG8gYSB2YXJpYWJsZSBpbmRpY2F0aW5nIGlmIHRoaXNfY3B1CisgKglpcyB0aGUgYXBwcm9wcmlhdGUgY3B1IHRvIHBlcmZvcm0gbG9hZCBiYWxhbmNpbmcgYXQgdGhpc19sZXZlbC4KKyAqCisgKiBSZXR1cm5zOgktIHRoZSBidXNpZXN0IGdyb3VwIGlmIGltYmFsYW5jZSBleGlzdHMuCisgKgkJLSBJZiBubyBpbWJhbGFuY2UgYW5kIHVzZXIgaGFzIG9wdGVkIGZvciBwb3dlci1zYXZpbmdzIGJhbGFuY2UsCisgKgkJICAgcmV0dXJuIHRoZSBsZWFzdCBsb2FkZWQgZ3JvdXAgd2hvc2UgQ1BVcyBjYW4gYmUKKyAqCQkgICBwdXQgdG8gaWRsZSBieSByZWJhbGFuY2luZyBpdHMgdGFza3Mgb250byBvdXIgZ3JvdXAuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKgorZmluZF9idXNpZXN0X2dyb3VwKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgdGhpc19jcHUsCisJCSAgIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCisJCSAgIGludCAqc2RfaWRsZSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMsIGludCAqYmFsYW5jZSkKK3sKKwlzdHJ1Y3Qgc2RfbGJfc3RhdHMgc2RzOworCisJbWVtc2V0KCZzZHMsIDAsIHNpemVvZihzZHMpKTsKKworCS8qCisJICogQ29tcHV0ZSB0aGUgdmFyaW91cyBzdGF0aXN0aWNzIHJlbGF2ZW50IGZvciBsb2FkIGJhbGFuY2luZyBhdAorCSAqIHRoaXMgbGV2ZWwuCisJICovCisJdXBkYXRlX3NkX2xiX3N0YXRzKHNkLCB0aGlzX2NwdSwgaWRsZSwgc2RfaWRsZSwgY3B1cywKKwkJCQkJYmFsYW5jZSwgJnNkcyk7CisKKwkvKiBDYXNlcyB3aGVyZSBpbWJhbGFuY2UgZG9lcyBub3QgZXhpc3QgZnJvbSBQT1Ygb2YgdGhpc19jcHUgKi8KKwkvKiAxKSB0aGlzX2NwdSBpcyBub3QgdGhlIGFwcHJvcHJpYXRlIGNwdSB0byBwZXJmb3JtIGxvYWQgYmFsYW5jaW5nCisJICogICAgYXQgdGhpcyBsZXZlbC4KKwkgKiAyKSBUaGVyZSBpcyBubyBidXN5IHNpYmxpbmcgZ3JvdXAgdG8gcHVsbCBmcm9tLgorCSAqIDMpIFRoaXMgZ3JvdXAgaXMgdGhlIGJ1c2llc3QgZ3JvdXAuCisJICogNCkgVGhpcyBncm91cCBpcyBtb3JlIGJ1c3kgdGhhbiB0aGUgYXZnIGJ1c2llbmVzcyBhdCB0aGlzCisJICogICAgc2NoZWRfZG9tYWluLgorCSAqIDUpIFRoZSBpbWJhbGFuY2UgaXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgbGltaXQuCisJICovCisJaWYgKCEoKmJhbGFuY2UpKQorCQlnb3RvIHJldDsKKworCWlmICghc2RzLmJ1c2llc3QgfHwgc2RzLmJ1c2llc3RfbnJfcnVubmluZyA9PSAwKQorCQlnb3RvIG91dF9iYWxhbmNlZDsKKworCWlmIChzZHMudGhpc19sb2FkID49IHNkcy5tYXhfbG9hZCkKKwkJZ290byBvdXRfYmFsYW5jZWQ7CisKKwlzZHMuYXZnX2xvYWQgPSAoU0NIRURfTE9BRF9TQ0FMRSAqIHNkcy50b3RhbF9sb2FkKSAvIHNkcy50b3RhbF9wd3I7CisKKwlpZiAoc2RzLnRoaXNfbG9hZCA+PSBzZHMuYXZnX2xvYWQpCisJCWdvdG8gb3V0X2JhbGFuY2VkOworCisJaWYgKDEwMCAqIHNkcy5tYXhfbG9hZCA8PSBzZC0+aW1iYWxhbmNlX3BjdCAqIHNkcy50aGlzX2xvYWQpCisJCWdvdG8gb3V0X2JhbGFuY2VkOworCisJLyogTG9va3MgbGlrZSB0aGVyZSBpcyBhbiBpbWJhbGFuY2UuIENvbXB1dGUgaXQgKi8KKwljYWxjdWxhdGVfaW1iYWxhbmNlKCZzZHMsIHRoaXNfY3B1LCBpbWJhbGFuY2UpOworCXJldHVybiBzZHMuYnVzaWVzdDsKKworb3V0X2JhbGFuY2VkOgorCS8qCisJICogVGhlcmUgaXMgbm8gb2J2aW91cyBpbWJhbGFuY2UuIEJ1dCBjaGVjayBpZiB3ZSBjYW4gZG8gc29tZSBiYWxhbmNpbmcKKwkgKiB0byBzYXZlIHBvd2VyLgorCSAqLworCWlmIChjaGVja19wb3dlcl9zYXZlX2J1c2llc3RfZ3JvdXAoJnNkcywgdGhpc19jcHUsIGltYmFsYW5jZSkpCisJCXJldHVybiBzZHMuYnVzaWVzdDsKK3JldDoKKwkqaW1iYWxhbmNlID0gMDsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGZpbmRfYnVzaWVzdF9xdWV1ZSAtIGZpbmQgdGhlIGJ1c2llc3QgcnVucXVldWUgYW1vbmcgdGhlIGNwdXMgaW4gZ3JvdXAuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcnEgKgorZmluZF9idXNpZXN0X3F1ZXVlKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXAsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAorCQkgICB1bnNpZ25lZCBsb25nIGltYmFsYW5jZSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMpCit7CisJc3RydWN0IHJxICpidXNpZXN0ID0gTlVMTCwgKnJxOworCXVuc2lnbmVkIGxvbmcgbWF4X2xvYWQgPSAwOworCWludCBpOworCisJZm9yX2VhY2hfY3B1KGksIHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKSB7CisJCXVuc2lnbmVkIGxvbmcgcG93ZXIgPSBwb3dlcl9vZihpKTsKKwkJdW5zaWduZWQgbG9uZyBjYXBhY2l0eSA9IERJVl9ST1VORF9DTE9TRVNUKHBvd2VyLCBTQ0hFRF9MT0FEX1NDQUxFKTsKKwkJdW5zaWduZWQgbG9uZyB3bDsKKworCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoaSwgY3B1cykpCisJCQljb250aW51ZTsKKworCQlycSA9IGNwdV9ycShpKTsKKwkJd2wgPSB3ZWlnaHRlZF9jcHVsb2FkKGkpOworCisJCS8qCisJCSAqIFdoZW4gY29tcGFyaW5nIHdpdGggaW1iYWxhbmNlLCB1c2Ugd2VpZ2h0ZWRfY3B1bG9hZCgpCisJCSAqIHdoaWNoIGlzIG5vdCBzY2FsZWQgd2l0aCB0aGUgY3B1IHBvd2VyLgorCQkgKi8KKwkJaWYgKGNhcGFjaXR5ICYmIHJxLT5ucl9ydW5uaW5nID09IDEgJiYgd2wgPiBpbWJhbGFuY2UpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBGb3IgdGhlIGxvYWQgY29tcGFyaXNvbnMgd2l0aCB0aGUgb3RoZXIgY3B1J3MsIGNvbnNpZGVyCisJCSAqIHRoZSB3ZWlnaHRlZF9jcHVsb2FkKCkgc2NhbGVkIHdpdGggdGhlIGNwdSBwb3dlciwgc28gdGhhdAorCQkgKiB0aGUgbG9hZCBjYW4gYmUgbW92ZWQgYXdheSBmcm9tIHRoZSBjcHUgdGhhdCBpcyBwb3RlbnRpYWxseQorCQkgKiBydW5uaW5nIGF0IGEgbG93ZXIgY2FwYWNpdHkuCisJCSAqLworCQl3bCA9ICh3bCAqIFNDSEVEX0xPQURfU0NBTEUpIC8gcG93ZXI7CisKKwkJaWYgKHdsID4gbWF4X2xvYWQpIHsKKwkJCW1heF9sb2FkID0gd2w7CisJCQlidXNpZXN0ID0gcnE7CisJCX0KKwl9CisKKwlyZXR1cm4gYnVzaWVzdDsKK30KKworLyoKKyAqIE1heCBiYWNrb2ZmIGlmIHdlIGVuY291bnRlciBwaW5uZWQgdGFza3MuIFByZXR0eSBhcmJpdHJhcnkgdmFsdWUsIGJ1dAorICogc28gbG9uZyBhcyBpdCBpcyBsYXJnZSBlbm91Z2guCisgKi8KKyNkZWZpbmUgTUFYX1BJTk5FRF9JTlRFUlZBTAk1MTIKKworLyogV29ya2luZyBjcHVtYXNrIGZvciBsb2FkX2JhbGFuY2UgYW5kIGxvYWRfYmFsYW5jZV9uZXdpZGxlLiAqLworc3RhdGljIERFRklORV9QRVJfQ1BVKGNwdW1hc2tfdmFyX3QsIGxvYWRfYmFsYW5jZV90bXBtYXNrKTsKKworc3RhdGljIGludCBuZWVkX2FjdGl2ZV9iYWxhbmNlKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgc2RfaWRsZSwgaW50IGlkbGUpCit7CisJaWYgKGlkbGUgPT0gQ1BVX05FV0xZX0lETEUpIHsKKwkJLyoKKwkJICogVGhlIG9ubHkgdGFzayBydW5uaW5nIGluIGEgbm9uLWlkbGUgY3B1IGNhbiBiZSBtb3ZlZCB0byB0aGlzCisJCSAqIGNwdSBpbiBhbiBhdHRlbXB0IHRvIGNvbXBsZXRlbHkgZnJlZXVwIHRoZSBvdGhlciBDUFUKKwkJICogcGFja2FnZS4KKwkJICoKKwkJICogVGhlIHBhY2thZ2UgcG93ZXIgc2F2aW5nIGxvZ2ljIGNvbWVzIGZyb20KKwkJICogZmluZF9idXNpZXN0X2dyb3VwKCkuIElmIHRoZXJlIGFyZSBubyBpbWJhbGFuY2UsIHRoZW4KKwkJICogZl9iX2coKSB3aWxsIHJldHVybiBOVUxMLiBIb3dldmVyIHdoZW4gc2NoZWRfbWM9ezEsMn0gdGhlbgorCQkgKiBmX2JfZygpIHdpbGwgc2VsZWN0IGEgZ3JvdXAgZnJvbSB3aGljaCBhIHJ1bm5pbmcgdGFzayBtYXkgYmUKKwkJICogcHVsbGVkIHRvIHRoaXMgY3B1IGluIG9yZGVyIHRvIG1ha2UgdGhlIG90aGVyIHBhY2thZ2UgaWRsZS4KKwkJICogSWYgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gbWFrZSBhIHBhY2thZ2UgaWRsZSBhbmQgaWYKKwkJICogdGhlcmUgYXJlIG5vIGltYmFsYW5jZSwgdGhlbiBmX2JfZygpIHdpbGwgcmV0dXJuIE5VTEwgYW5kIG5vCisJCSAqIGFjdGlvbiB3aWxsIGJlIHRha2VuIGluIGxvYWRfYmFsYW5jZV9uZXdpZGxlKCkuCisJCSAqCisJCSAqIFVuZGVyIG5vcm1hbCB0YXNrIHB1bGwgb3BlcmF0aW9uIGR1ZSB0byBpbWJhbGFuY2UsIHRoZXJlCisJCSAqIHdpbGwgYmUgbW9yZSB0aGFuIG9uZSB0YXNrIGluIHRoZSBzb3VyY2UgcnVuIHF1ZXVlIGFuZAorCQkgKiBtb3ZlX3Rhc2tzKCkgd2lsbCBzdWNjZWVkLiAgbGRfbW92ZWQgd2lsbCBiZSB0cnVlIGFuZCB0aGlzCisJCSAqIGFjdGl2ZSBiYWxhbmNlIGNvZGUgd2lsbCBub3QgYmUgdHJpZ2dlcmVkLgorCQkgKi8KKwkJaWYgKCFzZF9pZGxlICYmIHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCisJCSAgICAhdGVzdF9zZF9wYXJlbnQoc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKKwkJCXJldHVybiAwOworCisJCWlmIChzY2hlZF9tY19wb3dlcl9zYXZpbmdzIDwgUE9XRVJTQVZJTkdTX0JBTEFOQ0VfV0FLRVVQKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHVubGlrZWx5KHNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA+IHNkLT5jYWNoZV9uaWNlX3RyaWVzKzIpOworfQorCisvKgorICogQ2hlY2sgdGhpc19jcHUgdG8gZW5zdXJlIGl0IGlzIGJhbGFuY2VkIHdpdGhpbiBkb21haW4uIEF0dGVtcHQgdG8gbW92ZQorICogdGFza3MgaWYgdGhlcmUgaXMgYW4gaW1iYWxhbmNlLgorICovCitzdGF0aWMgaW50IGxvYWRfYmFsYW5jZShpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqdGhpc19ycSwKKwkJCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKKwkJCWludCAqYmFsYW5jZSkKK3sKKwlpbnQgbGRfbW92ZWQsIGFsbF9waW5uZWQgPSAwLCBhY3RpdmVfYmFsYW5jZSA9IDAsIHNkX2lkbGUgPSAwOworCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXA7CisJdW5zaWduZWQgbG9uZyBpbWJhbGFuY2U7CisJc3RydWN0IHJxICpidXNpZXN0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNwdW1hc2sgKmNwdXMgPSBfX2dldF9jcHVfdmFyKGxvYWRfYmFsYW5jZV90bXBtYXNrKTsKKworCWNwdW1hc2tfY29weShjcHVzLCBjcHVfYWN0aXZlX21hc2spOworCisJLyoKKwkgKiBXaGVuIHBvd2VyIHNhdmluZ3MgcG9saWN5IGlzIGVuYWJsZWQgZm9yIHRoZSBwYXJlbnQgZG9tYWluLCBpZGxlCisJICogc2libGluZyBjYW4gcGljayB1cCBsb2FkIGlycmVzcGVjdGl2ZSBvZiBidXN5IHNpYmxpbmdzLiBJbiB0aGlzIGNhc2UsCisJICogbGV0IHRoZSBzdGF0ZSBvZiBpZGxlIHNpYmxpbmcgcGVyY29sYXRlIHVwIGFzIENQVV9JRExFLCBpbnN0ZWFkIG9mCisJICogcG9ydHJheWluZyBpdCBhcyBDUFVfTk9UX0lETEUuCisJICovCisJaWYgKGlkbGUgIT0gQ1BVX05PVF9JRExFICYmIHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCisJICAgICF0ZXN0X3NkX3BhcmVudChzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQorCQlzZF9pZGxlID0gMTsKKworCXNjaGVkc3RhdF9pbmMoc2QsIGxiX2NvdW50W2lkbGVdKTsKKworcmVkbzoKKwl1cGRhdGVfc2hhcmVzKHNkKTsKKwlncm91cCA9IGZpbmRfYnVzaWVzdF9ncm91cChzZCwgdGhpc19jcHUsICZpbWJhbGFuY2UsIGlkbGUsICZzZF9pZGxlLAorCQkJCSAgIGNwdXMsIGJhbGFuY2UpOworCisJaWYgKCpiYWxhbmNlID09IDApCisJCWdvdG8gb3V0X2JhbGFuY2VkOworCisJaWYgKCFncm91cCkgeworCQlzY2hlZHN0YXRfaW5jKHNkLCBsYl9ub2J1c3lnW2lkbGVdKTsKKwkJZ290byBvdXRfYmFsYW5jZWQ7CisJfQorCisJYnVzaWVzdCA9IGZpbmRfYnVzaWVzdF9xdWV1ZShncm91cCwgaWRsZSwgaW1iYWxhbmNlLCBjcHVzKTsKKwlpZiAoIWJ1c2llc3QpIHsKKwkJc2NoZWRzdGF0X2luYyhzZCwgbGJfbm9idXN5cVtpZGxlXSk7CisJCWdvdG8gb3V0X2JhbGFuY2VkOworCX0KKworCUJVR19PTihidXNpZXN0ID09IHRoaXNfcnEpOworCisJc2NoZWRzdGF0X2FkZChzZCwgbGJfaW1iYWxhbmNlW2lkbGVdLCBpbWJhbGFuY2UpOworCisJbGRfbW92ZWQgPSAwOworCWlmIChidXNpZXN0LT5ucl9ydW5uaW5nID4gMSkgeworCQkvKgorCQkgKiBBdHRlbXB0IHRvIG1vdmUgdGFza3MuIElmIGZpbmRfYnVzaWVzdF9ncm91cCBoYXMgZm91bmQKKwkJICogYW4gaW1iYWxhbmNlIGJ1dCBidXNpZXN0LT5ucl9ydW5uaW5nIDw9IDEsIHRoZSBncm91cCBpcworCQkgKiBzdGlsbCB1bmJhbGFuY2VkLiBsZF9tb3ZlZCBzaW1wbHkgc3RheXMgemVybywgc28gaXQgaXMKKwkJICogY29ycmVjdGx5IHRyZWF0ZWQgYXMgYW4gaW1iYWxhbmNlLgorCQkgKi8KKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlkb3VibGVfcnFfbG9jayh0aGlzX3JxLCBidXNpZXN0KTsKKwkJbGRfbW92ZWQgPSBtb3ZlX3Rhc2tzKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAorCQkJCSAgICAgIGltYmFsYW5jZSwgc2QsIGlkbGUsICZhbGxfcGlubmVkKTsKKwkJZG91YmxlX3JxX3VubG9jayh0aGlzX3JxLCBidXNpZXN0KTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJCS8qCisJCSAqIHNvbWUgb3RoZXIgY3B1IGRpZCB0aGUgbG9hZCBiYWxhbmNlIGZvciB1cy4KKwkJICovCisJCWlmIChsZF9tb3ZlZCAmJiB0aGlzX2NwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCQlyZXNjaGVkX2NwdSh0aGlzX2NwdSk7CisKKwkJLyogQWxsIHRhc2tzIG9uIHRoaXMgcnVucXVldWUgd2VyZSBwaW5uZWQgYnkgQ1BVIGFmZmluaXR5ICovCisJCWlmICh1bmxpa2VseShhbGxfcGlubmVkKSkgeworCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1X29mKGJ1c2llc3QpLCBjcHVzKTsKKwkJCWlmICghY3B1bWFza19lbXB0eShjcHVzKSkKKwkJCQlnb3RvIHJlZG87CisJCQlnb3RvIG91dF9iYWxhbmNlZDsKKwkJfQorCX0KKworCWlmICghbGRfbW92ZWQpIHsKKwkJc2NoZWRzdGF0X2luYyhzZCwgbGJfZmFpbGVkW2lkbGVdKTsKKwkJc2QtPm5yX2JhbGFuY2VfZmFpbGVkKys7CisKKwkJaWYgKG5lZWRfYWN0aXZlX2JhbGFuY2Uoc2QsIHNkX2lkbGUsIGlkbGUpKSB7CisJCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmJ1c2llc3QtPmxvY2ssIGZsYWdzKTsKKworCQkJLyogZG9uJ3Qga2ljayB0aGUgbWlncmF0aW9uX3RocmVhZCwgaWYgdGhlIGN1cnIKKwkJCSAqIHRhc2sgb24gYnVzaWVzdCBjcHUgY2FuJ3QgYmUgbW92ZWQgdG8gdGhpc19jcHUKKwkJCSAqLworCQkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LAorCQkJCQkgICAgICAmYnVzaWVzdC0+Y3Vyci0+Y3B1c19hbGxvd2VkKSkgeworCQkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZidXNpZXN0LT5sb2NrLAorCQkJCQkJCSAgICBmbGFncyk7CisJCQkJYWxsX3Bpbm5lZCA9IDE7CisJCQkJZ290byBvdXRfb25lX3Bpbm5lZDsKKwkJCX0KKworCQkJaWYgKCFidXNpZXN0LT5hY3RpdmVfYmFsYW5jZSkgeworCQkJCWJ1c2llc3QtPmFjdGl2ZV9iYWxhbmNlID0gMTsKKwkJCQlidXNpZXN0LT5wdXNoX2NwdSA9IHRoaXNfY3B1OworCQkJCWFjdGl2ZV9iYWxhbmNlID0gMTsKKwkJCX0KKwkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZidXNpZXN0LT5sb2NrLCBmbGFncyk7CisJCQlpZiAoYWN0aXZlX2JhbGFuY2UpCisJCQkJd2FrZV91cF9wcm9jZXNzKGJ1c2llc3QtPm1pZ3JhdGlvbl90aHJlYWQpOworCisJCQkvKgorCQkJICogV2UndmUga2lja2VkIGFjdGl2ZSBiYWxhbmNpbmcsIHJlc2V0IHRoZSBmYWlsdXJlCisJCQkgKiBjb3VudGVyLgorCQkJICovCisJCQlzZC0+bnJfYmFsYW5jZV9mYWlsZWQgPSBzZC0+Y2FjaGVfbmljZV90cmllcysxOworCQl9CisJfSBlbHNlCisJCXNkLT5ucl9iYWxhbmNlX2ZhaWxlZCA9IDA7CisKKwlpZiAobGlrZWx5KCFhY3RpdmVfYmFsYW5jZSkpIHsKKwkJLyogV2Ugd2VyZSB1bmJhbGFuY2VkLCBzbyByZXNldCB0aGUgYmFsYW5jaW5nIGludGVydmFsICovCisJCXNkLT5iYWxhbmNlX2ludGVydmFsID0gc2QtPm1pbl9pbnRlcnZhbDsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBJZiB3ZSd2ZSBiZWd1biBhY3RpdmUgYmFsYW5jaW5nLCBzdGFydCB0byBiYWNrIG9mZi4gVGhpcworCQkgKiBjYXNlIG1heSBub3QgYmUgY292ZXJlZCBieSB0aGUgYWxsX3Bpbm5lZCBsb2dpYyBpZiB0aGVyZQorCQkgKiBpcyBvbmx5IDEgdGFzayBvbiB0aGUgYnVzeSBydW5xdWV1ZSAoYmVjYXVzZSB3ZSBkb24ndCBjYWxsCisJCSAqIG1vdmVfdGFza3MpLgorCQkgKi8KKwkJaWYgKHNkLT5iYWxhbmNlX2ludGVydmFsIDwgc2QtPm1heF9pbnRlcnZhbCkKKwkJCXNkLT5iYWxhbmNlX2ludGVydmFsICo9IDI7CisJfQorCisJaWYgKCFsZF9tb3ZlZCAmJiAhc2RfaWRsZSAmJiBzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUiAmJgorCSAgICAhdGVzdF9zZF9wYXJlbnQoc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSkKKwkJbGRfbW92ZWQgPSAtMTsKKworCWdvdG8gb3V0OworCitvdXRfYmFsYW5jZWQ6CisJc2NoZWRzdGF0X2luYyhzZCwgbGJfYmFsYW5jZWRbaWRsZV0pOworCisJc2QtPm5yX2JhbGFuY2VfZmFpbGVkID0gMDsKKworb3V0X29uZV9waW5uZWQ6CisJLyogdHVuZSB1cCB0aGUgYmFsYW5jaW5nIGludGVydmFsICovCisJaWYgKChhbGxfcGlubmVkICYmIHNkLT5iYWxhbmNlX2ludGVydmFsIDwgTUFYX1BJTk5FRF9JTlRFUlZBTCkgfHwKKwkJCShzZC0+YmFsYW5jZV9pbnRlcnZhbCA8IHNkLT5tYXhfaW50ZXJ2YWwpKQorCQlzZC0+YmFsYW5jZV9pbnRlcnZhbCAqPSAyOworCisJaWYgKCFzZF9pZGxlICYmIHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSICYmCisJICAgICF0ZXN0X3NkX3BhcmVudChzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpKQorCQlsZF9tb3ZlZCA9IC0xOworCWVsc2UKKwkJbGRfbW92ZWQgPSAwOworb3V0OgorCWlmIChsZF9tb3ZlZCkKKwkJdXBkYXRlX3NoYXJlcyhzZCk7CisJcmV0dXJuIGxkX21vdmVkOworfQorCisvKgorICogaWRsZV9iYWxhbmNlIGlzIGNhbGxlZCBieSBzY2hlZHVsZSgpIGlmIHRoaXNfY3B1IGlzIGFib3V0IHRvIGJlY29tZQorICogaWRsZS4gQXR0ZW1wdHMgdG8gcHVsbCB0YXNrcyBmcm9tIG90aGVyIENQVXMuCisgKi8KK3N0YXRpYyB2b2lkIGlkbGVfYmFsYW5jZShpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqdGhpc19ycSkKK3sKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKKwlpbnQgcHVsbGVkX3Rhc2sgPSAwOworCXVuc2lnbmVkIGxvbmcgbmV4dF9iYWxhbmNlID0gamlmZmllcyArIEhaOworCisJdGhpc19ycS0+aWRsZV9zdGFtcCA9IHRoaXNfcnEtPmNsb2NrOworCisJaWYgKHRoaXNfcnEtPmF2Z19pZGxlIDwgc3lzY3RsX3NjaGVkX21pZ3JhdGlvbl9jb3N0KQorCQlyZXR1cm47CisKKwkvKgorCSAqIERyb3AgdGhlIHJxLT5sb2NrLCBidXQga2VlcCBJUlEvcHJlZW1wdCBkaXNhYmxlZC4KKwkgKi8KKwlyYXdfc3Bpbl91bmxvY2soJnRoaXNfcnEtPmxvY2spOworCisJZm9yX2VhY2hfZG9tYWluKHRoaXNfY3B1LCBzZCkgeworCQl1bnNpZ25lZCBsb25nIGludGVydmFsOworCQlpbnQgYmFsYW5jZSA9IDE7CisKKwkJaWYgKCEoc2QtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzZC0+ZmxhZ3MgJiBTRF9CQUxBTkNFX05FV0lETEUpIHsKKwkJCS8qIElmIHdlJ3ZlIHB1bGxlZCB0YXNrcyBvdmVyIHN0b3Agc2VhcmNoaW5nOiAqLworCQkJcHVsbGVkX3Rhc2sgPSBsb2FkX2JhbGFuY2UodGhpc19jcHUsIHRoaXNfcnEsCisJCQkJCQkgICBzZCwgQ1BVX05FV0xZX0lETEUsICZiYWxhbmNlKTsKKwkJfQorCisJCWludGVydmFsID0gbXNlY3NfdG9famlmZmllcyhzZC0+YmFsYW5jZV9pbnRlcnZhbCk7CisJCWlmICh0aW1lX2FmdGVyKG5leHRfYmFsYW5jZSwgc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsKSkKKwkJCW5leHRfYmFsYW5jZSA9IHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbDsKKwkJaWYgKHB1bGxlZF90YXNrKSB7CisJCQl0aGlzX3JxLT5pZGxlX3N0YW1wID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmF3X3NwaW5fbG9jaygmdGhpc19ycS0+bG9jayk7CisKKwlpZiAocHVsbGVkX3Rhc2sgfHwgdGltZV9hZnRlcihqaWZmaWVzLCB0aGlzX3JxLT5uZXh0X2JhbGFuY2UpKSB7CisJCS8qCisJCSAqIFdlIGFyZSBnb2luZyBpZGxlLiBuZXh0X2JhbGFuY2UgbWF5IGJlIHNldCBiYXNlZCBvbgorCQkgKiBhIGJ1c3kgcHJvY2Vzc29yLiBTbyByZXNldCBuZXh0X2JhbGFuY2UuCisJCSAqLworCQl0aGlzX3JxLT5uZXh0X2JhbGFuY2UgPSBuZXh0X2JhbGFuY2U7CisJfQorfQorCisvKgorICogYWN0aXZlX2xvYWRfYmFsYW5jZSBpcyBydW4gYnkgbWlncmF0aW9uIHRocmVhZHMuIEl0IHB1c2hlcyBydW5uaW5nIHRhc2tzCisgKiBvZmYgdGhlIGJ1c2llc3QgQ1BVIG9udG8gaWRsZSBDUFVzLiBJdCByZXF1aXJlcyBhdCBsZWFzdCAxIHRhc2sgdG8gYmUKKyAqIHJ1bm5pbmcgb24gZWFjaCBwaHlzaWNhbCBDUFUgd2hlcmUgcG9zc2libGUsIGFuZCBhdm9pZHMgcGh5c2ljYWwgLworICogbG9naWNhbCBpbWJhbGFuY2VzLgorICoKKyAqIENhbGxlZCB3aXRoIGJ1c2llc3RfcnEgbG9ja2VkLgorICovCitzdGF0aWMgdm9pZCBhY3RpdmVfbG9hZF9iYWxhbmNlKHN0cnVjdCBycSAqYnVzaWVzdF9ycSwgaW50IGJ1c2llc3RfY3B1KQoreworCWludCB0YXJnZXRfY3B1ID0gYnVzaWVzdF9ycS0+cHVzaF9jcHU7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CisJc3RydWN0IHJxICp0YXJnZXRfcnE7CisKKwkvKiBJcyB0aGVyZSBhbnkgdGFzayB0byBtb3ZlPyAqLworCWlmIChidXNpZXN0X3JxLT5ucl9ydW5uaW5nIDw9IDEpCisJCXJldHVybjsKKworCXRhcmdldF9ycSA9IGNwdV9ycSh0YXJnZXRfY3B1KTsKKworCS8qCisJICogVGhpcyBjb25kaXRpb24gaXMgImltcG9zc2libGUiLCBpZiBpdCBvY2N1cnMKKwkgKiB3ZSBuZWVkIHRvIGZpeCBpdC4gT3JpZ2luYWxseSByZXBvcnRlZCBieQorCSAqIEJqb3JuIEhlbGdhYXMgb24gYSAxMjgtY3B1IHNldHVwLgorCSAqLworCUJVR19PTihidXNpZXN0X3JxID09IHRhcmdldF9ycSk7CisKKwkvKiBtb3ZlIGEgdGFzayBmcm9tIGJ1c2llc3RfcnEgdG8gdGFyZ2V0X3JxICovCisJZG91YmxlX2xvY2tfYmFsYW5jZShidXNpZXN0X3JxLCB0YXJnZXRfcnEpOworCXVwZGF0ZV9ycV9jbG9jayhidXNpZXN0X3JxKTsKKwl1cGRhdGVfcnFfY2xvY2sodGFyZ2V0X3JxKTsKKworCS8qIFNlYXJjaCBmb3IgYW4gc2Qgc3Bhbm5pbmcgdXMgYW5kIHRoZSB0YXJnZXQgQ1BVLiAqLworCWZvcl9lYWNoX2RvbWFpbih0YXJnZXRfY3B1LCBzZCkgeworCQlpZiAoKHNkLT5mbGFncyAmIFNEX0xPQURfQkFMQU5DRSkgJiYKKwkJICAgIGNwdW1hc2tfdGVzdF9jcHUoYnVzaWVzdF9jcHUsIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSkpCisJCQkJYnJlYWs7CisJfQorCisJaWYgKGxpa2VseShzZCkpIHsKKwkJc2NoZWRzdGF0X2luYyhzZCwgYWxiX2NvdW50KTsKKworCQlpZiAobW92ZV9vbmVfdGFzayh0YXJnZXRfcnEsIHRhcmdldF9jcHUsIGJ1c2llc3RfcnEsCisJCQkJICBzZCwgQ1BVX0lETEUpKQorCQkJc2NoZWRzdGF0X2luYyhzZCwgYWxiX3B1c2hlZCk7CisJCWVsc2UKKwkJCXNjaGVkc3RhdF9pbmMoc2QsIGFsYl9mYWlsZWQpOworCX0KKwlkb3VibGVfdW5sb2NrX2JhbGFuY2UoYnVzaWVzdF9ycSwgdGFyZ2V0X3JxKTsKK30KKworI2lmZGVmIENPTkZJR19OT19IWgorc3RhdGljIHN0cnVjdCB7CisJYXRvbWljX3QgbG9hZF9iYWxhbmNlcjsKKwljcHVtYXNrX3Zhcl90IGNwdV9tYXNrOworCWNwdW1hc2tfdmFyX3QgaWxiX2dycF9ub2h6X21hc2s7Cit9IG5vaHogX19fX2NhY2hlbGluZV9hbGlnbmVkID0geworCS5sb2FkX2JhbGFuY2VyID0gQVRPTUlDX0lOSVQoLTEpLAorfTsKKworaW50IGdldF9ub2h6X2xvYWRfYmFsYW5jZXIodm9pZCkKK3sKKwlyZXR1cm4gYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcik7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQorLyoqCisgKiBsb3dlc3RfZmxhZ19kb21haW4gLSBSZXR1cm4gbG93ZXN0IHNjaGVkX2RvbWFpbiBjb250YWluaW5nIGZsYWcuCisgKiBAY3B1OglUaGUgY3B1IHdob3NlIGxvd2VzdCBsZXZlbCBvZiBzY2hlZCBkb21haW4gaXMgdG8KKyAqCQliZSByZXR1cm5lZC4KKyAqIEBmbGFnOglUaGUgZmxhZyB0byBjaGVjayBmb3IgdGhlIGxvd2VzdCBzY2hlZF9kb21haW4KKyAqCQlmb3IgdGhlIGdpdmVuIGNwdS4KKyAqCisgKiBSZXR1cm5zIHRoZSBsb3dlc3Qgc2NoZWRfZG9tYWluIG9mIGEgY3B1IHdoaWNoIGNvbnRhaW5zIHRoZSBnaXZlbiBmbGFnLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzY2hlZF9kb21haW4gKmxvd2VzdF9mbGFnX2RvbWFpbihpbnQgY3B1LCBpbnQgZmxhZykKK3sKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKKworCWZvcl9lYWNoX2RvbWFpbihjcHUsIHNkKQorCQlpZiAoc2QgJiYgKHNkLT5mbGFncyAmIGZsYWcpKQorCQkJYnJlYWs7CisKKwlyZXR1cm4gc2Q7Cit9CisKKy8qKgorICogZm9yX2VhY2hfZmxhZ19kb21haW4gLSBJdGVyYXRlcyBvdmVyIHNjaGVkX2RvbWFpbnMgY29udGFpbmluZyB0aGUgZmxhZy4KKyAqIEBjcHU6CVRoZSBjcHUgd2hvc2UgZG9tYWlucyB3ZSdyZSBpdGVyYXRpbmcgb3Zlci4KKyAqIEBzZDoJCXZhcmlhYmxlIGhvbGRpbmcgdGhlIHZhbHVlIG9mIHRoZSBwb3dlcl9zYXZpbmdzX3NkCisgKgkJZm9yIGNwdS4KKyAqIEBmbGFnOglUaGUgZmxhZyB0byBmaWx0ZXIgdGhlIHNjaGVkX2RvbWFpbnMgdG8gYmUgaXRlcmF0ZWQuCisgKgorICogSXRlcmF0ZXMgb3ZlciBhbGwgdGhlIHNjaGVkdWxlciBkb21haW5zIGZvciBhIGdpdmVuIGNwdSB0aGF0IGhhcyB0aGUgJ2ZsYWcnCisgKiBzZXQsIHN0YXJ0aW5nIGZyb20gdGhlIGxvd2VzdCBzY2hlZF9kb21haW4gdG8gdGhlIGhpZ2hlc3QuCisgKi8KKyNkZWZpbmUgZm9yX2VhY2hfZmxhZ19kb21haW4oY3B1LCBzZCwgZmxhZykgXAorCWZvciAoc2QgPSBsb3dlc3RfZmxhZ19kb21haW4oY3B1LCBmbGFnKTsgXAorCQkoc2QgJiYgKHNkLT5mbGFncyAmIGZsYWcpKTsgc2QgPSBzZC0+cGFyZW50KQorCisvKioKKyAqIGlzX3NlbWlfaWRsZV9ncm91cCAtIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc2NoZWRfZ3JvdXAgaXMgc2VtaS1pZGxlLgorICogQGlsYl9ncm91cDoJZ3JvdXAgdG8gYmUgY2hlY2tlZCBmb3Igc2VtaS1pZGxlbmVzcworICoKKyAqIFJldHVybnM6CTEgaWYgdGhlIGdyb3VwIGlzIHNlbWktaWRsZS4gMCBvdGhlcndpc2UuCisgKgorICogV2UgZGVmaW5lIGEgc2NoZWRfZ3JvdXAgdG8gYmUgc2VtaSBpZGxlIGlmIGl0IGhhcyBhdGxlYXN0IG9uZSBpZGxlLUNQVQorICogYW5kIGF0bGVhc3Qgb25lIG5vbi1pZGxlIENQVS4gVGhpcyBoZWxwZXIgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBnaXZlbgorICogc2NoZWRfZ3JvdXAgaXMgc2VtaS1pZGxlIG9yIG5vdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaXNfc2VtaV9pZGxlX2dyb3VwKHN0cnVjdCBzY2hlZF9ncm91cCAqaWxiX2dyb3VwKQoreworCWNwdW1hc2tfYW5kKG5vaHouaWxiX2dycF9ub2h6X21hc2ssIG5vaHouY3B1X21hc2ssCisJCQkJCXNjaGVkX2dyb3VwX2NwdXMoaWxiX2dyb3VwKSk7CisKKwkvKgorCSAqIEEgc2NoZWRfZ3JvdXAgaXMgc2VtaS1pZGxlIHdoZW4gaXQgaGFzIGF0bGVhc3Qgb25lIGJ1c3kgY3B1CisJICogYW5kIGF0bGVhc3Qgb25lIGlkbGUgY3B1LgorCSAqLworCWlmIChjcHVtYXNrX2VtcHR5KG5vaHouaWxiX2dycF9ub2h6X21hc2spKQorCQlyZXR1cm4gMDsKKworCWlmIChjcHVtYXNrX2VxdWFsKG5vaHouaWxiX2dycF9ub2h6X21hc2ssIHNjaGVkX2dyb3VwX2NwdXMoaWxiX2dyb3VwKSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisvKioKKyAqIGZpbmRfbmV3X2lsYiAtIEZpbmRzIHRoZSBvcHRpbXVtIGlkbGUgbG9hZCBiYWxhbmNlciBmb3Igbm9taW5hdGlvbi4KKyAqIEBjcHU6CVRoZSBjcHUgd2hpY2ggaXMgbm9taW5hdGluZyBhIG5ldyBpZGxlX2xvYWRfYmFsYW5jZXIuCisgKgorICogUmV0dXJuczoJUmV0dXJucyB0aGUgaWQgb2YgdGhlIGlkbGUgbG9hZCBiYWxhbmNlciBpZiBpdCBleGlzdHMsCisgKgkJRWxzZSwgcmV0dXJucyA+PSBucl9jcHVfaWRzLgorICoKKyAqIFRoaXMgYWxnb3JpdGhtIHBpY2tzIHRoZSBpZGxlIGxvYWQgYmFsYW5jZXIgc3VjaCB0aGF0IGl0IGJlbG9uZ3MgdG8gYQorICogc2VtaS1pZGxlIHBvd2Vyc2F2aW5ncyBzY2hlZF9kb21haW4uIFRoZSBpZGVhIGlzIHRvIHRyeSBhbmQgYXZvaWQKKyAqIGNvbXBsZXRlbHkgaWRsZSBwYWNrYWdlcy9jb3JlcyBqdXN0IGZvciB0aGUgcHVycG9zZSBvZiBpZGxlIGxvYWQgYmFsYW5jaW5nCisgKiB3aGVuIHRoZXJlIGFyZSBvdGhlciBpZGxlIGNwdSdzIHdoaWNoIGFyZSBiZXR0ZXIgc3VpdGVkIGZvciB0aGF0IGpvYi4KKyAqLworc3RhdGljIGludCBmaW5kX25ld19pbGIoaW50IGNwdSkKK3sKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmlsYl9ncm91cDsKKworCS8qCisJICogSGF2ZSBpZGxlIGxvYWQgYmFsYW5jZXIgc2VsZWN0aW9uIGZyb20gc2VtaS1pZGxlIHBhY2thZ2VzIG9ubHkKKwkgKiB3aGVuIHBvd2VyLWF3YXJlIGxvYWQgYmFsYW5jaW5nIGlzIGVuYWJsZWQKKwkgKi8KKwlpZiAoIShzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncyB8fCBzY2hlZF9tY19wb3dlcl9zYXZpbmdzKSkKKwkJZ290byBvdXRfZG9uZTsKKworCS8qCisJICogT3B0aW1pemUgZm9yIHRoZSBjYXNlIHdoZW4gd2UgaGF2ZSBubyBpZGxlIENQVXMgb3Igb25seSBvbmUKKwkgKiBpZGxlIENQVS4gRG9uJ3Qgd2FsayB0aGUgc2NoZWRfZG9tYWluIGhpZXJhcmNoeSBpbiBzdWNoIGNhc2VzCisJICovCisJaWYgKGNwdW1hc2tfd2VpZ2h0KG5vaHouY3B1X21hc2spIDwgMikKKwkJZ290byBvdXRfZG9uZTsKKworCWZvcl9lYWNoX2ZsYWdfZG9tYWluKGNwdSwgc2QsIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFKSB7CisJCWlsYl9ncm91cCA9IHNkLT5ncm91cHM7CisKKwkJZG8geworCQkJaWYgKGlzX3NlbWlfaWRsZV9ncm91cChpbGJfZ3JvdXApKQorCQkJCXJldHVybiBjcHVtYXNrX2ZpcnN0KG5vaHouaWxiX2dycF9ub2h6X21hc2spOworCisJCQlpbGJfZ3JvdXAgPSBpbGJfZ3JvdXAtPm5leHQ7CisKKwkJfSB3aGlsZSAoaWxiX2dyb3VwICE9IHNkLT5ncm91cHMpOworCX0KKworb3V0X2RvbmU6CisJcmV0dXJuIGNwdW1hc2tfZmlyc3Qobm9oei5jcHVfbWFzayk7Cit9CisjZWxzZSAvKiAgKENPTkZJR19TQ0hFRF9NQyB8fCBDT05GSUdfU0NIRURfU01UKSAqLworc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXdfaWxiKGludCBjYWxsX2NwdSkKK3sKKwlyZXR1cm4gY3B1bWFza19maXJzdChub2h6LmNwdV9tYXNrKTsKK30KKyNlbmRpZgorCisvKgorICogVGhpcyByb3V0aW5lIHdpbGwgdHJ5IHRvIG5vbWluYXRlIHRoZSBpbGIgKGlkbGUgbG9hZCBiYWxhbmNpbmcpCisgKiBvd25lciBhbW9uZyB0aGUgY3B1cyB3aG9zZSB0aWNrcyBhcmUgc3RvcHBlZC4gaWxiIG93bmVyIHdpbGwgZG8gdGhlIGlkbGUKKyAqIGxvYWQgYmFsYW5jaW5nIG9uIGJlaGFsZiBvZiBhbGwgdGhvc2UgY3B1cy4gSWYgYWxsIHRoZSBjcHVzIGluIHRoZSBzeXN0ZW0KKyAqIGdvIGludG8gdGhpcyB0aWNrbGVzcyBtb2RlLCB0aGVuIHRoZXJlIHdpbGwgYmUgbm8gaWxiIG93bmVyIChhcyB0aGVyZSBpcworICogbm8gbmVlZCBmb3Igb25lKSBhbmQgYWxsIHRoZSBjcHVzIHdpbGwgc2xlZXAgdGlsbCB0aGUgbmV4dCB3YWtldXAgZXZlbnQKKyAqIGFycml2ZXMuLi4KKyAqCisgKiBGb3IgdGhlIGlsYiBvd25lciwgdGljayBpcyBub3Qgc3RvcHBlZC4gQW5kIHRoaXMgdGljayB3aWxsIGJlIHVzZWQKKyAqIGZvciBpZGxlIGxvYWQgYmFsYW5jaW5nLiBpbGIgb3duZXIgd2lsbCBzdGlsbCBiZSBwYXJ0IG9mCisgKiBub2h6LmNwdV9tYXNrLi4KKyAqCisgKiBXaGlsZSBzdG9wcGluZyB0aGUgdGljaywgdGhpcyBjcHUgd2lsbCBiZWNvbWUgdGhlIGlsYiBvd25lciBpZiB0aGVyZQorICogaXMgbm8gb3RoZXIgb3duZXIuIEFuZCB3aWxsIGJlIHRoZSBvd25lciB0aWxsIHRoYXQgY3B1IGJlY29tZXMgYnVzeQorICogb3IgaWYgYWxsIGNwdXMgaW4gdGhlIHN5c3RlbSBzdG9wIHRoZWlyIHRpY2tzIGF0IHdoaWNoIHBvaW50CisgKiB0aGVyZSBpcyBubyBuZWVkIGZvciBpbGIgb3duZXIuCisgKgorICogV2hlbiB0aGUgaWxiIG93bmVyIGJlY29tZXMgYnVzeSwgaXQgbm9taW5hdGVzIGFub3RoZXIgb3duZXIsIGR1cmluZyB0aGUKKyAqIG5leHQgYnVzeSBzY2hlZHVsZXJfdGljaygpCisgKi8KK2ludCBzZWxlY3Rfbm9oel9sb2FkX2JhbGFuY2VyKGludCBzdG9wX3RpY2spCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChzdG9wX3RpY2spIHsKKwkJY3B1X3JxKGNwdSktPmluX25vaHpfcmVjZW50bHkgPSAxOworCisJCWlmICghY3B1X2FjdGl2ZShjcHUpKSB7CisJCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgIT0gY3B1KQorCQkJCXJldHVybiAwOworCisJCQkvKgorCQkJICogSWYgd2UgYXJlIGdvaW5nIG9mZmxpbmUgYW5kIHN0aWxsIHRoZSBsZWFkZXIsCisJCQkgKiBnaXZlIHVwIQorCQkJICovCisJCQlpZiAoYXRvbWljX2NtcHhjaGcoJm5vaHoubG9hZF9iYWxhbmNlciwgY3B1LCAtMSkgIT0gY3B1KQorCQkJCUJVRygpOworCisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWNwdW1hc2tfc2V0X2NwdShjcHUsIG5vaHouY3B1X21hc2spOworCisJCS8qIHRpbWUgZm9yIGlsYiBvd25lciBhbHNvIHRvIHNsZWVwICovCisJCWlmIChjcHVtYXNrX3dlaWdodChub2h6LmNwdV9tYXNrKSA9PSBudW1fYWN0aXZlX2NwdXMoKSkgeworCQkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSkKKwkJCQlhdG9taWNfc2V0KCZub2h6LmxvYWRfYmFsYW5jZXIsIC0xKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IC0xKSB7CisJCQkvKiBtYWtlIG1lIHRoZSBpbGIgb3duZXIgKi8KKwkJCWlmIChhdG9taWNfY21weGNoZygmbm9oei5sb2FkX2JhbGFuY2VyLCAtMSwgY3B1KSA9PSAtMSkKKwkJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIGlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUpIHsKKwkJCWludCBuZXdfaWxiOworCisJCQlpZiAoIShzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncyB8fAorCQkJCQkJc2NoZWRfbWNfcG93ZXJfc2F2aW5ncykpCisJCQkJcmV0dXJuIDE7CisJCQkvKgorCQkJICogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbW9yZSBwb3dlci1lZmZpY2llbnQKKwkJCSAqIGlsYi4KKwkJCSAqLworCQkJbmV3X2lsYiA9IGZpbmRfbmV3X2lsYihjcHUpOworCQkJaWYgKG5ld19pbGIgPCBucl9jcHVfaWRzICYmIG5ld19pbGIgIT0gY3B1KSB7CisJCQkJYXRvbWljX3NldCgmbm9oei5sb2FkX2JhbGFuY2VyLCAtMSk7CisJCQkJcmVzY2hlZF9jcHUobmV3X2lsYik7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlyZXR1cm4gMTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIG5vaHouY3B1X21hc2spKQorCQkJcmV0dXJuIDA7CisKKwkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBub2h6LmNwdV9tYXNrKTsKKworCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gY3B1KQorCQkJaWYgKGF0b21pY19jbXB4Y2hnKCZub2h6LmxvYWRfYmFsYW5jZXIsIGNwdSwgLTEpICE9IGNwdSkKKwkJCQlCVUcoKTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIERFRklORV9TUElOTE9DSyhiYWxhbmNpbmcpOworCisvKgorICogSXQgY2hlY2tzIGVhY2ggc2NoZWR1bGluZyBkb21haW4gdG8gc2VlIGlmIGl0IGlzIGR1ZSB0byBiZSBiYWxhbmNlZCwKKyAqIGFuZCBpbml0aWF0ZXMgYSBiYWxhbmNpbmcgb3BlcmF0aW9uIGlmIHNvLgorICoKKyAqIEJhbGFuY2luZyBwYXJhbWV0ZXJzIGFyZSBzZXQgdXAgaW4gYXJjaF9pbml0X3NjaGVkX2RvbWFpbnMuCisgKi8KK3N0YXRpYyB2b2lkIHJlYmFsYW5jZV9kb21haW5zKGludCBjcHUsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlKQoreworCWludCBiYWxhbmNlID0gMTsKKwlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CisJdW5zaWduZWQgbG9uZyBpbnRlcnZhbDsKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKKwkvKiBFYXJsaWVzdCB0aW1lIHdoZW4gd2UgaGF2ZSB0byBkbyByZWJhbGFuY2UgYWdhaW4gKi8KKwl1bnNpZ25lZCBsb25nIG5leHRfYmFsYW5jZSA9IGppZmZpZXMgKyA2MCpIWjsKKwlpbnQgdXBkYXRlX25leHRfYmFsYW5jZSA9IDA7CisJaW50IG5lZWRfc2VyaWFsaXplOworCisJZm9yX2VhY2hfZG9tYWluKGNwdSwgc2QpIHsKKwkJaWYgKCEoc2QtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSkKKwkJCWNvbnRpbnVlOworCisJCWludGVydmFsID0gc2QtPmJhbGFuY2VfaW50ZXJ2YWw7CisJCWlmIChpZGxlICE9IENQVV9JRExFKQorCQkJaW50ZXJ2YWwgKj0gc2QtPmJ1c3lfZmFjdG9yOworCisJCS8qIHNjYWxlIG1zIHRvIGppZmZpZXMgKi8KKwkJaW50ZXJ2YWwgPSBtc2Vjc190b19qaWZmaWVzKGludGVydmFsKTsKKwkJaWYgKHVubGlrZWx5KCFpbnRlcnZhbCkpCisJCQlpbnRlcnZhbCA9IDE7CisJCWlmIChpbnRlcnZhbCA+IEhaKk5SX0NQVVMvMTApCisJCQlpbnRlcnZhbCA9IEhaKk5SX0NQVVMvMTA7CisKKwkJbmVlZF9zZXJpYWxpemUgPSBzZC0+ZmxhZ3MgJiBTRF9TRVJJQUxJWkU7CisKKwkJaWYgKG5lZWRfc2VyaWFsaXplKSB7CisJCQlpZiAoIXNwaW5fdHJ5bG9jaygmYmFsYW5jaW5nKSkKKwkJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbCkpIHsKKwkJCWlmIChsb2FkX2JhbGFuY2UoY3B1LCBycSwgc2QsIGlkbGUsICZiYWxhbmNlKSkgeworCQkJCS8qCisJCQkJICogV2UndmUgcHVsbGVkIHRhc2tzIG92ZXIgc28gZWl0aGVyIHdlJ3JlIG5vCisJCQkJICogbG9uZ2VyIGlkbGUsIG9yIG9uZSBvZiBvdXIgU01UIHNpYmxpbmdzIGlzCisJCQkJICogbm90IGlkbGUuCisJCQkJICovCisJCQkJaWRsZSA9IENQVV9OT1RfSURMRTsKKwkJCX0KKwkJCXNkLT5sYXN0X2JhbGFuY2UgPSBqaWZmaWVzOworCQl9CisJCWlmIChuZWVkX3NlcmlhbGl6ZSkKKwkJCXNwaW5fdW5sb2NrKCZiYWxhbmNpbmcpOworb3V0OgorCQlpZiAodGltZV9hZnRlcihuZXh0X2JhbGFuY2UsIHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbCkpIHsKKwkJCW5leHRfYmFsYW5jZSA9IHNkLT5sYXN0X2JhbGFuY2UgKyBpbnRlcnZhbDsKKwkJCXVwZGF0ZV9uZXh0X2JhbGFuY2UgPSAxOworCQl9CisKKwkJLyoKKwkJICogU3RvcCB0aGUgbG9hZCBiYWxhbmNlIGF0IHRoaXMgbGV2ZWwuIFRoZXJlIGlzIGFub3RoZXIKKwkJICogQ1BVIGluIG91ciBzY2hlZCBncm91cCB3aGljaCBpcyBkb2luZyBsb2FkIGJhbGFuY2luZyBtb3JlCisJCSAqIGFjdGl2ZWx5LgorCQkgKi8KKwkJaWYgKCFiYWxhbmNlKQorCQkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBuZXh0X2JhbGFuY2Ugd2lsbCBiZSB1cGRhdGVkIG9ubHkgd2hlbiB0aGVyZSBpcyBhIG5lZWQuCisJICogV2hlbiB0aGUgY3B1IGlzIGF0dGFjaGVkIHRvIG51bGwgZG9tYWluIGZvciBleCwgaXQgd2lsbCBub3QgYmUKKwkgKiB1cGRhdGVkLgorCSAqLworCWlmIChsaWtlbHkodXBkYXRlX25leHRfYmFsYW5jZSkpCisJCXJxLT5uZXh0X2JhbGFuY2UgPSBuZXh0X2JhbGFuY2U7Cit9CisKKy8qCisgKiBydW5fcmViYWxhbmNlX2RvbWFpbnMgaXMgdHJpZ2dlcmVkIHdoZW4gbmVlZGVkIGZyb20gdGhlIHNjaGVkdWxlciB0aWNrLgorICogSW4gQ09ORklHX05PX0haIGNhc2UsIHRoZSBpZGxlIGxvYWQgYmFsYW5jZSBvd25lciB3aWxsIGRvIHRoZQorICogcmViYWxhbmNpbmcgZm9yIGFsbCB0aGUgY3B1cyBmb3Igd2hvbSBzY2hlZHVsZXIgdGlja3MgYXJlIHN0b3BwZWQuCisgKi8KK3N0YXRpYyB2b2lkIHJ1bl9yZWJhbGFuY2VfZG9tYWlucyhzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKmgpCit7CisJaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBycSAqdGhpc19ycSA9IGNwdV9ycSh0aGlzX2NwdSk7CisJZW51bSBjcHVfaWRsZV90eXBlIGlkbGUgPSB0aGlzX3JxLT5pZGxlX2F0X3RpY2sgPworCQkJCQkJQ1BVX0lETEUgOiBDUFVfTk9UX0lETEU7CisKKwlyZWJhbGFuY2VfZG9tYWlucyh0aGlzX2NwdSwgaWRsZSk7CisKKyNpZmRlZiBDT05GSUdfTk9fSFoKKwkvKgorCSAqIElmIHRoaXMgY3B1IGlzIHRoZSBvd25lciBmb3IgaWRsZSBsb2FkIGJhbGFuY2luZywgdGhlbiBkbyB0aGUKKwkgKiBiYWxhbmNpbmcgb24gYmVoYWxmIG9mIHRoZSBvdGhlciBpZGxlIGNwdXMgd2hvc2UgdGlja3MgYXJlCisJICogc3RvcHBlZC4KKwkgKi8KKwlpZiAodGhpc19ycS0+aWRsZV9hdF90aWNrICYmCisJICAgIGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IHRoaXNfY3B1KSB7CisJCXN0cnVjdCBycSAqcnE7CisJCWludCBiYWxhbmNlX2NwdTsKKworCQlmb3JfZWFjaF9jcHUoYmFsYW5jZV9jcHUsIG5vaHouY3B1X21hc2spIHsKKwkJCWlmIChiYWxhbmNlX2NwdSA9PSB0aGlzX2NwdSkKKwkJCQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIElmIHRoaXMgY3B1IGdldHMgd29yayB0byBkbywgc3RvcCB0aGUgbG9hZCBiYWxhbmNpbmcKKwkJCSAqIHdvcmsgYmVpbmcgZG9uZSBmb3Igb3RoZXIgY3B1cy4gTmV4dCBsb2FkCisJCQkgKiBiYWxhbmNpbmcgb3duZXIgd2lsbCBwaWNrIGl0IHVwLgorCQkJICovCisJCQlpZiAobmVlZF9yZXNjaGVkKCkpCisJCQkJYnJlYWs7CisKKwkJCXJlYmFsYW5jZV9kb21haW5zKGJhbGFuY2VfY3B1LCBDUFVfSURMRSk7CisKKwkJCXJxID0gY3B1X3JxKGJhbGFuY2VfY3B1KTsKKwkJCWlmICh0aW1lX2FmdGVyKHRoaXNfcnEtPm5leHRfYmFsYW5jZSwgcnEtPm5leHRfYmFsYW5jZSkpCisJCQkJdGhpc19ycS0+bmV4dF9iYWxhbmNlID0gcnEtPm5leHRfYmFsYW5jZTsKKwkJfQorCX0KKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIGludCBvbl9udWxsX2RvbWFpbihpbnQgY3B1KQoreworCXJldHVybiAhcmN1X2RlcmVmZXJlbmNlKGNwdV9ycShjcHUpLT5zZCk7Cit9CisKKy8qCisgKiBUcmlnZ2VyIHRoZSBTQ0hFRF9TT0ZUSVJRIGlmIGl0IGlzIHRpbWUgdG8gZG8gcGVyaW9kaWMgbG9hZCBiYWxhbmNpbmcuCisgKgorICogSW4gY2FzZSBvZiBDT05GSUdfTk9fSFosIHRoaXMgaXMgdGhlIHBsYWNlIHdoZXJlIHdlIG5vbWluYXRlIGEgbmV3CisgKiBpZGxlIGxvYWQgYmFsYW5jaW5nIG93bmVyIG9yIGRlY2lkZSB0byBzdG9wIHRoZSBwZXJpb2RpYyBsb2FkIGJhbGFuY2luZywKKyAqIGlmIHRoZSB3aG9sZSBzeXN0ZW0gaXMgaWRsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHRyaWdnZXJfbG9hZF9iYWxhbmNlKHN0cnVjdCBycSAqcnEsIGludCBjcHUpCit7CisjaWZkZWYgQ09ORklHX05PX0haCisJLyoKKwkgKiBJZiB3ZSB3ZXJlIGluIHRoZSBub2h6IG1vZGUgcmVjZW50bHkgYW5kIGJ1c3kgYXQgdGhlIGN1cnJlbnQKKwkgKiBzY2hlZHVsZXIgdGljaywgdGhlbiBjaGVjayBpZiB3ZSBuZWVkIHRvIG5vbWluYXRlIG5ldyBpZGxlCisJICogbG9hZCBiYWxhbmNlci4KKwkgKi8KKwlpZiAocnEtPmluX25vaHpfcmVjZW50bHkgJiYgIXJxLT5pZGxlX2F0X3RpY2spIHsKKwkJcnEtPmluX25vaHpfcmVjZW50bHkgPSAwOworCisJCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUpIHsKKwkJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9oei5jcHVfbWFzayk7CisJCQlhdG9taWNfc2V0KCZub2h6LmxvYWRfYmFsYW5jZXIsIC0xKTsKKwkJfQorCisJCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSAtMSkgeworCQkJaW50IGlsYiA9IGZpbmRfbmV3X2lsYihjcHUpOworCisJCQlpZiAoaWxiIDwgbnJfY3B1X2lkcykKKwkJCQlyZXNjaGVkX2NwdShpbGIpOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB0aGlzIGNwdSBpcyBpZGxlIGFuZCBkb2luZyBpZGxlIGxvYWQgYmFsYW5jaW5nIGZvciBhbGwgdGhlCisJICogY3B1cyB3aXRoIHRpY2tzIHN0b3BwZWQsIGlzIGl0IHRpbWUgZm9yIHRoYXQgdG8gc3RvcD8KKwkgKi8KKwlpZiAocnEtPmlkbGVfYXRfdGljayAmJiBhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUgJiYKKwkgICAgY3B1bWFza193ZWlnaHQobm9oei5jcHVfbWFzaykgPT0gbnVtX29ubGluZV9jcHVzKCkpIHsKKwkJcmVzY2hlZF9jcHUoY3B1KTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgdGhpcyBjcHUgaXMgaWRsZSBhbmQgdGhlIGlkbGUgbG9hZCBiYWxhbmNpbmcgaXMgZG9uZSBieQorCSAqIHNvbWVvbmUgZWxzZSwgdGhlbiBubyBuZWVkIHJhaXNlIHRoZSBTQ0hFRF9TT0ZUSVJRCisJICovCisJaWYgKHJxLT5pZGxlX2F0X3RpY2sgJiYgYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgIT0gY3B1ICYmCisJICAgIGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBub2h6LmNwdV9tYXNrKSkKKwkJcmV0dXJuOworI2VuZGlmCisJLyogRG9uJ3QgbmVlZCB0byByZWJhbGFuY2Ugd2hpbGUgYXR0YWNoZWQgdG8gTlVMTCBkb21haW4gKi8KKwlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBycS0+bmV4dF9iYWxhbmNlKSAmJgorCSAgICBsaWtlbHkoIW9uX251bGxfZG9tYWluKGNwdSkpKQorCQlyYWlzZV9zb2Z0aXJxKFNDSEVEX1NPRlRJUlEpOworfQogCiBzdGF0aWMgdm9pZCBycV9vbmxpbmVfZmFpcihzdHJ1Y3QgcnEgKnJxKQogewpAQCAtMTk2Miw2ICszNTQ0LDE1IEBACiAJdXBkYXRlX3N5c2N0bCgpOwogfQogCisjZWxzZQkvKiBDT05GSUdfU01QICovCisKKy8qCisgKiBvbiBVUCB3ZSBkbyBub3QgbmVlZCB0byBiYWxhbmNlIGJldHdlZW4gQ1BVczoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGlkbGVfYmFsYW5jZShpbnQgY3B1LCBzdHJ1Y3QgcnEgKnJxKQoreworfQorCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAvKgpAQCAtMjA3Niw3ICszNjY3LDcgQEAKIH0KICNlbmRpZgogCi11bnNpZ25lZCBpbnQgZ2V0X3JyX2ludGVydmFsX2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQorc3RhdGljIHVuc2lnbmVkIGludCBnZXRfcnJfaW50ZXJ2YWxfZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSAmdGFzay0+c2U7CiAJdW5zaWduZWQgaW50IHJyX2ludGVydmFsID0gMDsKQEAgLTIxMDgsOCArMzY5OSw2IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCS5zZWxlY3RfdGFza19ycQkJPSBzZWxlY3RfdGFza19ycV9mYWlyLAogCi0JLmxvYWRfYmFsYW5jZQkJPSBsb2FkX2JhbGFuY2VfZmFpciwKLQkubW92ZV9vbmVfdGFzawkJPSBtb3ZlX29uZV90YXNrX2ZhaXIsCiAJLnJxX29ubGluZQkJPSBycV9vbmxpbmVfZmFpciwKIAkucnFfb2ZmbGluZQkJPSBycV9vZmZsaW5lX2ZhaXIsCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9pZGxldGFzay5jIGIva2VybmVsL3NjaGVkX2lkbGV0YXNrLmMKaW5kZXggNWY5M2I1Ny4uYThhNmQ4YSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2lkbGV0YXNrLmMKKysrIGIva2VybmVsL3NjaGVkX2lkbGV0YXNrLmMKQEAgLTQ0LDI0ICs0NCw2IEBACiB7CiB9CiAKLSNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgdW5zaWduZWQgbG9uZwotbG9hZF9iYWxhbmNlX2lkbGUoc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKLQkJICB1bnNpZ25lZCBsb25nIG1heF9sb2FkX21vdmUsCi0JCSAgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkgIGludCAqYWxsX3Bpbm5lZCwgaW50ICp0aGlzX2Jlc3RfcHJpbykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbW92ZV9vbmVfdGFza19pZGxlKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JCSAgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgdm9pZCB0YXNrX3RpY2tfaWRsZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIGludCBxdWV1ZWQpCiB7CiB9CkBAIC05Nyw3ICs3OSw3IEBACiAJCWNoZWNrX3ByZWVtcHRfY3VycihycSwgcCwgMCk7CiB9CiAKLXVuc2lnbmVkIGludCBnZXRfcnJfaW50ZXJ2YWxfaWRsZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9ycl9pbnRlcnZhbF9pZGxlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTExOSw5ICsxMDEsNiBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCS5zZWxlY3RfdGFza19ycQkJPSBzZWxlY3RfdGFza19ycV9pZGxlLAotCi0JLmxvYWRfYmFsYW5jZQkJPSBsb2FkX2JhbGFuY2VfaWRsZSwKLQkubW92ZV9vbmVfdGFzawkJPSBtb3ZlX29uZV90YXNrX2lkbGUsCiAjZW5kaWYKIAogCS5zZXRfY3Vycl90YXNrICAgICAgICAgID0gc2V0X2N1cnJfdGFza19pZGxlLApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3J0LmMgYi9rZXJuZWwvc2NoZWRfcnQuYwppbmRleCBmNDgzMjhhLi5iZjNlMzhmIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfcnQuYworKysgYi9rZXJuZWwvc2NoZWRfcnQuYwpAQCAtMTk0LDE3ICsxOTQsMjAgQEAKIAlyZXR1cm4gcnRfc2UtPm15X3E7CiB9CiAKLXN0YXRpYyB2b2lkIGVucXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKTsKK3N0YXRpYyB2b2lkIGVucXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBib29sIGhlYWQpOwogc3RhdGljIHZvaWQgZGVxdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpOwogCiBzdGF0aWMgdm9pZCBzY2hlZF9ydF9ycV9lbnF1ZXVlKHN0cnVjdCBydF9ycSAqcnRfcnEpCiB7CisJaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IHJxX29mX3J0X3JxKHJ0X3JxKS0+Y3VycjsKLQlzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSA9IHJ0X3JxLT5ydF9zZTsKKwlzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZTsKKworCXJ0X3NlID0gcnRfcnEtPnRnLT5ydF9zZVt0aGlzX2NwdV07CiAKIAlpZiAocnRfcnEtPnJ0X25yX3J1bm5pbmcpIHsKIAkJaWYgKHJ0X3NlICYmICFvbl9ydF9ycShydF9zZSkpCi0JCQllbnF1ZXVlX3J0X2VudGl0eShydF9zZSk7CisJCQllbnF1ZXVlX3J0X2VudGl0eShydF9zZSwgZmFsc2UpOwogCQlpZiAocnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyIDwgY3Vyci0+cHJpbykKIAkJCXJlc2NoZWRfdGFzayhjdXJyKTsKIAl9CkBAIC0yMTIsNyArMjE1LDEwIEBACiAKIHN0YXRpYyB2b2lkIHNjaGVkX3J0X3JxX2RlcXVldWUoc3RydWN0IHJ0X3JxICpydF9ycSkKIHsKLQlzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSA9IHJ0X3JxLT5ydF9zZTsKKwlpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2U7CisKKwlydF9zZSA9IHJ0X3JxLT50Zy0+cnRfc2VbdGhpc19jcHVdOwogCiAJaWYgKHJ0X3NlICYmIG9uX3J0X3JxKHJ0X3NlKSkKIAkJZGVxdWV1ZV9ydF9lbnRpdHkocnRfc2UpOwpAQCAtODAzLDcgKzgwOSw3IEBACiAJZGVjX3J0X2dyb3VwKHJ0X3NlLCBydF9ycSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZW5xdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCitzdGF0aWMgdm9pZCBfX2VucXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBib29sIGhlYWQpCiB7CiAJc3RydWN0IHJ0X3JxICpydF9ycSA9IHJ0X3JxX29mX3NlKHJ0X3NlKTsKIAlzdHJ1Y3QgcnRfcHJpb19hcnJheSAqYXJyYXkgPSAmcnRfcnEtPmFjdGl2ZTsKQEAgLTgxOSw3ICs4MjUsMTAgQEAKIAlpZiAoZ3JvdXBfcnEgJiYgKHJ0X3JxX3Rocm90dGxlZChncm91cF9ycSkgfHwgIWdyb3VwX3JxLT5ydF9ucl9ydW5uaW5nKSkKIAkJcmV0dXJuOwogCi0JbGlzdF9hZGRfdGFpbCgmcnRfc2UtPnJ1bl9saXN0LCBxdWV1ZSk7CisJaWYgKGhlYWQpCisJCWxpc3RfYWRkKCZydF9zZS0+cnVuX2xpc3QsIHF1ZXVlKTsKKwllbHNlCisJCWxpc3RfYWRkX3RhaWwoJnJ0X3NlLT5ydW5fbGlzdCwgcXVldWUpOwogCV9fc2V0X2JpdChydF9zZV9wcmlvKHJ0X3NlKSwgYXJyYXktPmJpdG1hcCk7CiAKIAlpbmNfcnRfdGFza3MocnRfc2UsIHJ0X3JxKTsKQEAgLTg1NiwxMSArODY1LDExIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBlbnF1ZXVlX3J0X2VudGl0eShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKK3N0YXRpYyB2b2lkIGVucXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBib29sIGhlYWQpCiB7CiAJZGVxdWV1ZV9ydF9zdGFjayhydF9zZSk7CiAJZm9yX2VhY2hfc2NoZWRfcnRfZW50aXR5KHJ0X3NlKQotCQlfX2VucXVldWVfcnRfZW50aXR5KHJ0X3NlKTsKKwkJX19lbnF1ZXVlX3J0X2VudGl0eShydF9zZSwgaGVhZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRlcXVldWVfcnRfZW50aXR5KHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQpAQCAtODcxLDIxICs4ODAsMjIgQEAKIAkJc3RydWN0IHJ0X3JxICpydF9ycSA9IGdyb3VwX3J0X3JxKHJ0X3NlKTsKIAogCQlpZiAocnRfcnEgJiYgcnRfcnEtPnJ0X25yX3J1bm5pbmcpCi0JCQlfX2VucXVldWVfcnRfZW50aXR5KHJ0X3NlKTsKKwkJCV9fZW5xdWV1ZV9ydF9lbnRpdHkocnRfc2UsIGZhbHNlKTsKIAl9CiB9CiAKIC8qCiAgKiBBZGRpbmcvcmVtb3ZpbmcgYSB0YXNrIHRvL2Zyb20gYSBwcmlvcml0eSBhcnJheToKICAqLwotc3RhdGljIHZvaWQgZW5xdWV1ZV90YXNrX3J0KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2V1cCkKK3N0YXRpYyB2b2lkCitlbnF1ZXVlX3Rhc2tfcnQoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZXVwLCBib29sIGhlYWQpCiB7CiAJc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UgPSAmcC0+cnQ7CiAKIAlpZiAod2FrZXVwKQogCQlydF9zZS0+dGltZW91dCA9IDA7CiAKLQllbnF1ZXVlX3J0X2VudGl0eShydF9zZSk7CisJZW5xdWV1ZV9ydF9lbnRpdHkocnRfc2UsIGhlYWQpOwogCiAJaWYgKCF0YXNrX2N1cnJlbnQocnEsIHApICYmIHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA+IDEpCiAJCWVucXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CkBAIC0xNDgxLDI0ICsxNDkxLDYgQEAKIAkJcHVzaF9ydF90YXNrcyhycSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nCi1sb2FkX2JhbGFuY2VfcnQoc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKLQkJdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLAotCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCi0JCWludCAqYWxsX3Bpbm5lZCwgaW50ICp0aGlzX2Jlc3RfcHJpbykKLXsKLQkvKiBkb24ndCB0b3VjaCBSVCB0YXNrcyAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1tb3ZlX29uZV90YXNrX3J0KHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCi0JCSBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpCi17Ci0JLyogZG9uJ3QgdG91Y2ggUlQgdGFza3MgKi8KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgc2V0X2NwdXNfYWxsb3dlZF9ydChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld19tYXNrKQogewpAQCAtMTcyMSw3ICsxNzEzLDcgQEAKIAlkZXF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOwogfQogCi11bnNpZ25lZCBpbnQgZ2V0X3JyX2ludGVydmFsX3J0KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3JyX2ludGVydmFsX3J0KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAkvKgogCSAqIFRpbWUgc2xpY2UgaXMgMCBmb3IgU0NIRURfRklGTyB0YXNrcwpAQCAtMTc0Niw4ICsxNzM4LDYgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJLnNlbGVjdF90YXNrX3JxCQk9IHNlbGVjdF90YXNrX3JxX3J0LAogCi0JLmxvYWRfYmFsYW5jZQkJPSBsb2FkX2JhbGFuY2VfcnQsCi0JLm1vdmVfb25lX3Rhc2sJCT0gbW92ZV9vbmVfdGFza19ydCwKIAkuc2V0X2NwdXNfYWxsb3dlZCAgICAgICA9IHNldF9jcHVzX2FsbG93ZWRfcnQsCiAJLnJxX29ubGluZSAgICAgICAgICAgICAgPSBycV9vbmxpbmVfcnQsCiAJLnJxX29mZmxpbmUgICAgICAgICAgICAgPSBycV9vZmZsaW5lX3J0LApkaWZmIC0tZ2l0IGEva2VybmVsL3NtcC5jIGIva2VybmVsL3NtcC5jCmluZGV4IGYxMDQwODQuLjk4NjdiNmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zbXAuYworKysgYi9rZXJuZWwvc21wLmMKQEAgLTEyLDggKzEyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjYWxsX3NpbmdsZV9xdWV1ZSwgY2FsbF9zaW5nbGVfcXVldWUpOwotCiBzdGF0aWMgc3RydWN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXF1ZXVlOwogCXJhd19zcGlubG9ja190CQlsb2NrOwpAQCAtMzMsMTIgKzMxLDE0IEBACiAJY3B1bWFza192YXJfdAkJY3B1bWFzazsKIH07CiAKK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgY2FsbF9mdW5jdGlvbl9kYXRhLCBjZmRfZGF0YSk7CisKIHN0cnVjdCBjYWxsX3NpbmdsZV9xdWV1ZSB7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCXJhd19zcGlubG9ja190CQlsb2NrOwogfTsKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjYWxsX2Z1bmN0aW9uX2RhdGEsIGNmZF9kYXRhKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgY2FsbF9zaW5nbGVfcXVldWUsIGNhbGxfc2luZ2xlX3F1ZXVlKTsKIAogc3RhdGljIGludAogaG90cGx1Z19jZmQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQpAQCAtMjU2LDcgKzI1Niw3IEBACiAJfQogfQogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEsIGNzZF9kYXRhKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSwgY3NkX2RhdGEpOwogCiAvKgogICogc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlIC0gUnVuIGEgZnVuY3Rpb24gb24gYSBzcGVjaWZpYyBDUFUKZGlmZiAtLWdpdCBhL2tlcm5lbC9zcmN1LmMgYi9rZXJuZWwvc3JjdS5jCmluZGV4IDgxOGQ3ZDkuLmJkZTQyOTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zcmN1LmMKKysrIGIva2VybmVsL3NyY3UuYwpAQCAtMzQsNiArMzQsMzAgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zcmN1Lmg+CiAKK3N0YXRpYyBpbnQgaW5pdF9zcmN1X3N0cnVjdF9maWVsZHMoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCkKK3sKKwlzcC0+Y29tcGxldGVkID0gMDsKKwltdXRleF9pbml0KCZzcC0+bXV0ZXgpOworCXNwLT5wZXJfY3B1X3JlZiA9IGFsbG9jX3BlcmNwdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3RfYXJyYXkpOworCXJldHVybiBzcC0+cGVyX2NwdV9yZWYgPyAwIDogLUVOT01FTTsKK30KKworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisKK2ludCBfX2luaXRfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KQoreworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisJLyogRG9uJ3QgcmUtaW5pdGlhbGl6ZSBhIGxvY2sgd2hpbGUgaXQgaXMgaGVsZC4gKi8KKwlkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZCgodm9pZCAqKXNwLCBzaXplb2YoKnNwKSk7CisJbG9ja2RlcF9pbml0X21hcCgmc3AtPmRlcF9tYXAsIG5hbWUsIGtleSwgMCk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisJcmV0dXJuIGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHNwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9faW5pdF9zcmN1X3N0cnVjdCk7CisKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqLworCiAvKioKICAqIGluaXRfc3JjdV9zdHJ1Y3QgLSBpbml0aWFsaXplIGEgc2xlZXAtUkNVIHN0cnVjdHVyZQogICogQHNwOiBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZS4KQEAgLTQ0LDEzICs2OCwxMiBAQAogICovCiBpbnQgaW5pdF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKQogewotCXNwLT5jb21wbGV0ZWQgPSAwOwotCW11dGV4X2luaXQoJnNwLT5tdXRleCk7Ci0Jc3AtPnBlcl9jcHVfcmVmID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBzcmN1X3N0cnVjdF9hcnJheSk7Ci0JcmV0dXJuIChzcC0+cGVyX2NwdV9yZWYgPyAwIDogLUVOT01FTSk7CisJcmV0dXJuIGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHNwKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3QpOwogCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovCisKIC8qCiAgKiBzcmN1X3JlYWRlcnNfYWN0aXZlX2lkeCAtLSByZXR1cm5zIGFwcHJveGltYXRlIG51bWJlciBvZiByZWFkZXJzCiAgKglhY3RpdmUgb24gdGhlIHNwZWNpZmllZCByYW5rIG9mIHBlci1DUFUgY291bnRlcnMuCkBAIC0xMDAsMTUgKzEyMywxMiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2xlYW51cF9zcmN1X3N0cnVjdCk7CiAKLS8qKgotICogc3JjdV9yZWFkX2xvY2sgLSByZWdpc3RlciBhIG5ldyByZWFkZXIgZm9yIGFuIFNSQ1UtcHJvdGVjdGVkIHN0cnVjdHVyZS4KLSAqIEBzcDogc3JjdV9zdHJ1Y3QgaW4gd2hpY2ggdG8gcmVnaXN0ZXIgdGhlIG5ldyByZWFkZXIuCi0gKgorLyoKICAqIENvdW50cyB0aGUgbmV3IHJlYWRlciBpbiB0aGUgYXBwcm9wcmlhdGUgcGVyLUNQVSBlbGVtZW50IG9mIHRoZQogICogc3JjdV9zdHJ1Y3QuICBNdXN0IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dC4KICAqIFJldHVybnMgYW4gaW5kZXggdGhhdCBtdXN0IGJlIHBhc3NlZCB0byB0aGUgbWF0Y2hpbmcgc3JjdV9yZWFkX3VubG9jaygpLgogICovCi1pbnQgc3JjdV9yZWFkX2xvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCkKK2ludCBfX3NyY3VfcmVhZF9sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApCiB7CiAJaW50IGlkeDsKIApAQCAtMTIwLDMxICsxNDAsMjcgQEAKIAlwcmVlbXB0X2VuYWJsZSgpOwogCXJldHVybiBpZHg7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChzcmN1X3JlYWRfbG9jayk7CitFWFBPUlRfU1lNQk9MX0dQTChfX3NyY3VfcmVhZF9sb2NrKTsKIAotLyoqCi0gKiBzcmN1X3JlYWRfdW5sb2NrIC0gdW5yZWdpc3RlciBhIG9sZCByZWFkZXIgZnJvbSBhbiBTUkNVLXByb3RlY3RlZCBzdHJ1Y3R1cmUuCi0gKiBAc3A6IHNyY3Vfc3RydWN0IGluIHdoaWNoIHRvIHVucmVnaXN0ZXIgdGhlIG9sZCByZWFkZXIuCi0gKiBAaWR4OiByZXR1cm4gdmFsdWUgZnJvbSBjb3JyZXNwb25kaW5nIHNyY3VfcmVhZF9sb2NrKCkuCi0gKgorLyoKICAqIFJlbW92ZXMgdGhlIGNvdW50IGZvciB0aGUgb2xkIHJlYWRlciBmcm9tIHRoZSBhcHByb3ByaWF0ZSBwZXItQ1BVCiAgKiBlbGVtZW50IG9mIHRoZSBzcmN1X3N0cnVjdC4gIE5vdGUgdGhhdCB0aGlzIG1heSB3ZWxsIGJlIGEgZGlmZmVyZW50CiAgKiBDUFUgdGhhbiB0aGF0IHdoaWNoIHdhcyBpbmNyZW1lbnRlZCBieSB0aGUgY29ycmVzcG9uZGluZyBzcmN1X3JlYWRfbG9jaygpLgogICogTXVzdCBiZSBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQuCiAgKi8KLXZvaWQgc3JjdV9yZWFkX3VubG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBpbnQgaWR4KQordm9pZCBfX3NyY3VfcmVhZF91bmxvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzcCwgaW50IGlkeCkKIHsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlzcmN1X2JhcnJpZXIoKTsgIC8qIGVuc3VyZSBjb21waWxlciB3b24ndCBtaXNvcmRlciBjcml0aWNhbCBzZWN0aW9uLiAqLwogCXBlcl9jcHVfcHRyKHNwLT5wZXJfY3B1X3JlZiwgc21wX3Byb2Nlc3Nvcl9pZCgpKS0+Y1tpZHhdLS07CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfcmVhZF91bmxvY2spOworRVhQT1JUX1NZTUJPTF9HUEwoX19zcmN1X3JlYWRfdW5sb2NrKTsKIAogLyoKICAqIEhlbHBlciBmdW5jdGlvbiBmb3Igc3luY2hyb25pemVfc3JjdSgpIGFuZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgpLgogICovCi12b2lkIF9fc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCB2b2lkICgqc3luY19mdW5jKSh2b2lkKSkKK3N0YXRpYyB2b2lkIF9fc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCB2b2lkICgqc3luY19mdW5jKSh2b2lkKSkKIHsKIAlpbnQgaWR4OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggMThiZGU5Ny4uODc3ZmU0ZiAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtNTcxLDExICs1NzEsNiBAQAogCWlmICghbmV3X3VzZXIpCiAJCXJldHVybiAtRUFHQUlOOwogCi0JaWYgKCF0YXNrX2Nhbl9zd2l0Y2hfdXNlcihuZXdfdXNlciwgY3VycmVudCkpIHsKLQkJZnJlZV91aWQobmV3X3VzZXIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlpZiAoYXRvbWljX3JlYWQoJm5ld191c2VyLT5wcm9jZXNzZXMpID49CiAJCQkJY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9OUFJPQ10ucmxpbV9jdXIgJiYKIAkJCW5ld191c2VyICE9IElOSVRfVVNFUikgewpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKaW5kZXggMTM3MDA4My4uMWY2NjNkMiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYworKysgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCkBAIC00NTMsNiArNDUzLDE4IEBACiAjZW5kaWYgLyogQ09ORklHX0NMT0NLU09VUkNFX1dBVENIRE9HICovCiAKIC8qKgorICogY2xvY2tzb3VyY2Vfc3VzcGVuZCAtIHN1c3BlbmQgdGhlIGNsb2Nrc291cmNlKHMpCisgKi8KK3ZvaWQgY2xvY2tzb3VyY2Vfc3VzcGVuZCh2b2lkKQoreworCXN0cnVjdCBjbG9ja3NvdXJjZSAqY3M7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoY3MsICZjbG9ja3NvdXJjZV9saXN0LCBsaXN0KQorCQlpZiAoY3MtPnN1c3BlbmQpCisJCQljcy0+c3VzcGVuZChjcyk7Cit9CisKKy8qKgogICogY2xvY2tzb3VyY2VfcmVzdW1lIC0gcmVzdW1lIHRoZSBjbG9ja3NvdXJjZShzKQogICovCiB2b2lkIGNsb2Nrc291cmNlX3Jlc3VtZSh2b2lkKQpAQCAtNDYxLDcgKzQ3Myw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNzLCAmY2xvY2tzb3VyY2VfbGlzdCwgbGlzdCkKIAkJaWYgKGNzLT5yZXN1bWUpCi0JCQljcy0+cmVzdW1lKCk7CisJCQljcy0+cmVzdW1lKGNzKTsKIAogCWNsb2Nrc291cmNlX3Jlc3VtZV93YXRjaGRvZygpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvbnRwLmMgYi9rZXJuZWwvdGltZS9udHAuYwppbmRleCA0ODAwZjkzLi43YzBmMTgwIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9udHAuYworKysgYi9rZXJuZWwvdGltZS9udHAuYwpAQCAtNTgsMTAgKzU4LDEwIEBACiBzdGF0aWMgbG9uZwkJCXRpbWVfY29uc3RhbnQgPSAyOwogCiAvKiBtYXhpbXVtIGVycm9yICh1c2Vjcyk6CQkJCQkJKi8KLWxvbmcJCQkJdGltZV9tYXhlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKK3N0YXRpYyBsb25nCQkJdGltZV9tYXhlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKIAogLyogZXN0aW1hdGVkIGVycm9yICh1c2Vjcyk6CQkJCQkJKi8KLWxvbmcJCQkJdGltZV9lc3RlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKK3N0YXRpYyBsb25nCQkJdGltZV9lc3RlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKIAogLyogZnJlcXVlbmN5IG9mZnNldCAoc2NhbGVkIG5zZWNzL3NlY3MpOgkJCQkqLwogc3RhdGljIHM2NAkJCXRpbWVfZnJlcTsKQEAgLTE0MiwxMSArMTQyLDExIEBACiAJICogU2VsZWN0IGhvdyB0aGUgZnJlcXVlbmN5IGlzIHRvIGJlIGNvbnRyb2xsZWQKIAkgKiBhbmQgaW4gd2hpY2ggbW9kZSAoUExMIG9yIEZMTCkuCiAJICovCi0Jc2VjcyA9IHh0aW1lLnR2X3NlYyAtIHRpbWVfcmVmdGltZTsKKwlzZWNzID0gZ2V0X3NlY29uZHMoKSAtIHRpbWVfcmVmdGltZTsKIAlpZiAodW5saWtlbHkodGltZV9zdGF0dXMgJiBTVEFfRlJFUUhPTEQpKQogCQlzZWNzID0gMDsKIAotCXRpbWVfcmVmdGltZSA9IHh0aW1lLnR2X3NlYzsKKwl0aW1lX3JlZnRpbWUgPSBnZXRfc2Vjb25kcygpOwogCiAJb2Zmc2V0NjQgICAgPSBvZmZzZXQ7CiAJZnJlcV9hZGogICAgPSAob2Zmc2V0NjQgKiBzZWNzKSA8PApAQCAtMzY4LDcgKzM2OCw3IEBACiAJICogcmVmZXJlbmNlIHRpbWUgdG8gY3VycmVudCB0aW1lLgogCSAqLwogCWlmICghKHRpbWVfc3RhdHVzICYgU1RBX1BMTCkgJiYgKHR4Yy0+c3RhdHVzICYgU1RBX1BMTCkpCi0JCXRpbWVfcmVmdGltZSA9IHh0aW1lLnR2X3NlYzsKKwkJdGltZV9yZWZ0aW1lID0gZ2V0X3NlY29uZHMoKTsKIAogCS8qIG9ubHkgc2V0IGFsbG93ZWQgYml0cyAqLwogCXRpbWVfc3RhdHVzICY9IFNUQV9ST05MWTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCmluZGV4IGUyYWIwNjQuLjE2NzM2MzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKKysrIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwpAQCAtNjIyLDYgKzYyMiw3IEBACiAJd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKIAogCWNsb2NrZXZlbnRzX25vdGlmeShDTE9DS19FVlRfTk9USUZZX1NVU1BFTkQsIE5VTEwpOworCWNsb2Nrc291cmNlX3N1c3BlbmQoKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL0tjb25maWcgYi9rZXJuZWwvdHJhY2UvS2NvbmZpZwppbmRleCA2MGUyY2UwLi4xM2UxM2Q0IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvS2NvbmZpZworKysgYi9rZXJuZWwvdHJhY2UvS2NvbmZpZwpAQCAtMzI4LDE1ICszMjgsNiBAQAogCiAJICBTYXkgTiBpZiB1bnN1cmUuCiAKLWNvbmZpZyBQT1dFUl9UUkFDRVIKLQlib29sICJUcmFjZSBwb3dlciBjb25zdW1wdGlvbiBiZWhhdmlvciIKLQlkZXBlbmRzIG9uIFg4NgotCXNlbGVjdCBHRU5FUklDX1RSQUNFUgotCWhlbHAKLQkgIFRoaXMgdHJhY2VyIGhlbHBzIGRldmVsb3BlcnMgdG8gYW5hbHl6ZSBhbmQgb3B0aW1pemUgdGhlIGtlcm5lbCdzCi0JICBwb3dlciBtYW5hZ2VtZW50IGRlY2lzaW9ucywgc3BlY2lmaWNhbGx5IHRoZSBDLXN0YXRlIGFuZCBQLXN0YXRlCi0JICBiZWhhdmlvci4KLQogY29uZmlnIEtTWU1fVFJBQ0VSCiAJYm9vbCAiVHJhY2UgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIG9uIGtlcm5lbCBtZW1vcnkgbG9jYXRpb25zIgogCWRlcGVuZHMgb24gSEFWRV9IV19CUkVBS1BPSU5UCkBAIC00NDksNyArNDQwLDcgQEAKIAogY29uZmlnIEtQUk9CRV9FVkVOVAogCWRlcGVuZHMgb24gS1BST0JFUwotCWRlcGVuZHMgb24gWDg2CisJZGVwZW5kcyBvbiBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUEkKIAlib29sICJFbmFibGUga3Byb2Jlcy1iYXNlZCBkeW5hbWljIGV2ZW50cyIKIAlzZWxlY3QgVFJBQ0lORwogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL01ha2VmaWxlIGIva2VybmVsL3RyYWNlL01ha2VmaWxlCmluZGV4IGNkOWVjZDguLmQwMGM2ZmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9NYWtlZmlsZQorKysgYi9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKQEAgLTUxLDcgKzUxLDkgQEAKIG9iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSArPSB0cmFjZV9ldmVudHMubwogb2JqLSQoQ09ORklHX0VWRU5UX1RSQUNJTkcpICs9IHRyYWNlX2V4cG9ydC5vCiBvYmotJChDT05GSUdfRlRSQUNFX1NZU0NBTExTKSArPSB0cmFjZV9zeXNjYWxscy5vCi1vYmotJChDT05GSUdfRVZFTlRfUFJPRklMRSkgKz0gdHJhY2VfZXZlbnRfcHJvZmlsZS5vCitpZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSkKK29iai0kKENPTkZJR19FVkVOVF9UUkFDSU5HKSArPSB0cmFjZV9ldmVudF9wcm9maWxlLm8KK2VuZGlmCiBvYmotJChDT05GSUdfRVZFTlRfVFJBQ0lORykgKz0gdHJhY2VfZXZlbnRzX2ZpbHRlci5vCiBvYmotJChDT05GSUdfS1BST0JFX0VWRU5UKSArPSB0cmFjZV9rcHJvYmUubwogb2JqLSQoQ09ORklHX0tTWU1fVFJBQ0VSKSArPSB0cmFjZV9rc3ltLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMKaW5kZXggZDlkNjIwNi4uMDdmOTQ1YTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCkBAIC01NDAsOSArNTQwLDEwIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYnV0cywgc2l6ZW9mKGJ1dHMpKSkKKwlpZiAoY29weV90b191c2VyKGFyZywgJmJ1dHMsIHNpemVvZihidXRzKSkpIHsKKwkJYmxrX3RyYWNlX3JlbW92ZShxKTsKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0KKwl9CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChibGtfdHJhY2Vfc2V0dXApOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Z0cmFjZS5jCmluZGV4IDFlNjY0MGYuLjgzNzgzNTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KQEAgLTg5OCwzNiArODk3LDYgQEAKIAkJfQkJCQlcCiAJfQogCi0jaWZkZWYgQ09ORklHX0tQUk9CRVMKLQotc3RhdGljIGludCBmcm96ZW5fcmVjb3JkX2NvdW50OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZXplX3JlY29yZChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKQotewotCWlmICghKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRlJPWkVOKSkgewotCQlyZWMtPmZsYWdzIHw9IEZUUkFDRV9GTF9GUk9aRU47Ci0JCWZyb3plbl9yZWNvcmRfY291bnQrKzsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmZyZWV6ZV9yZWNvcmQoc3RydWN0IGR5bl9mdHJhY2UgKnJlYykKLXsKLQlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GUk9aRU4pIHsKLQkJcmVjLT5mbGFncyAmPSB+RlRSQUNFX0ZMX0ZST1pFTjsKLQkJZnJvemVuX3JlY29yZF9jb3VudC0tOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBpbnQgcmVjb3JkX2Zyb3plbihzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKQotewotCXJldHVybiByZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZST1pFTjsKLX0KLSNlbHNlCi0jIGRlZmluZSBmcmVlemVfcmVjb3JkKHJlYykJCQkoeyAwOyB9KQotIyBkZWZpbmUgdW5mcmVlemVfcmVjb3JkKHJlYykJCQkoeyAwOyB9KQotIyBkZWZpbmUgcmVjb3JkX2Zyb3plbihyZWMpCQkJKHsgMDsgfSkKLSNlbmRpZiAvKiBDT05GSUdfS1BST0JFUyAqLwotCiBzdGF0aWMgdm9pZCBmdHJhY2VfZnJlZV9yZWMoc3RydWN0IGR5bl9mdHJhY2UgKnJlYykKIHsKIAlyZWMtPmZyZWVsaXN0ID0gZnRyYWNlX2ZyZWVfcmVjb3JkczsKQEAgLTEwMjUsNiArOTk0LDIxIEBACiB9CiAKIAorLyogUmV0dXJuIDEgaWYgdGhlIGFkZHJlc3MgcmFuZ2UgaXMgcmVzZXJ2ZWQgZm9yIGZ0cmFjZSAqLworaW50IGZ0cmFjZV90ZXh0X3Jlc2VydmVkKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCit7CisJc3RydWN0IGR5bl9mdHJhY2UgKnJlYzsKKwlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOworCisJZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKSB7CisJCWlmIChyZWMtPmlwIDw9ICh1bnNpZ25lZCBsb25nKWVuZCAmJgorCQkgICAgcmVjLT5pcCArIE1DT1VOVF9JTlNOX1NJWkUgPiAodW5zaWduZWQgbG9uZylzdGFydCkKKwkJCXJldHVybiAxOworCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpOworCXJldHVybiAwOworfQorCisKIHN0YXRpYyBpbnQKIF9fZnRyYWNlX3JlcGxhY2VfY29kZShzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCBpbnQgZW5hYmxlKQogewpAQCAtMTA3NiwxNCArMTA2MCw2IEBACiAJCSAgICAhKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfQ09OVkVSVEVEKSkKIAkJCWNvbnRpbnVlOwogCi0JCS8qIGlnbm9yZSB1cGRhdGVzIHRvIHRoaXMgcmVjb3JkJ3MgbWNvdW50IHNpdGUgKi8KLQkJaWYgKGdldF9rcHJvYmUoKHZvaWQgKilyZWMtPmlwKSkgewotCQkJZnJlZXplX3JlY29yZChyZWMpOwotCQkJY29udGludWU7Ci0JCX0gZWxzZSB7Ci0JCQl1bmZyZWV6ZV9yZWNvcmQocmVjKTsKLQkJfQotCiAJCWZhaWxlZCA9IF9fZnRyYWNlX3JlcGxhY2VfY29kZShyZWMsIGVuYWJsZSk7CiAJCWlmIChmYWlsZWQpIHsKIAkJCXJlYy0+ZmxhZ3MgfD0gRlRSQUNFX0ZMX0ZBSUxFRDsKQEAgLTI0MjYsNiArMjQwMiw3IEBACiBzdGF0aWMgREVGSU5FX01VVEVYKGdyYXBoX2xvY2spOwogCiBpbnQgZnRyYWNlX2dyYXBoX2NvdW50OworaW50IGZ0cmFjZV9ncmFwaF9maWx0ZXJfZW5hYmxlZDsKIHVuc2lnbmVkIGxvbmcgZnRyYWNlX2dyYXBoX2Z1bmNzW0ZUUkFDRV9HUkFQSF9NQVhfRlVOQ1NdIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyB2b2lkICoKQEAgLTI0NDgsNyArMjQyNSw3IEBACiAJbXV0ZXhfbG9jaygmZ3JhcGhfbG9jayk7CiAKIAkvKiBOb3RoaW5nLCB0ZWxsIGdfc2hvdyB0byBwcmludCBhbGwgZnVuY3Rpb25zIGFyZSBlbmFibGVkICovCi0JaWYgKCFmdHJhY2VfZ3JhcGhfY291bnQgJiYgISpwb3MpCisJaWYgKCFmdHJhY2VfZ3JhcGhfZmlsdGVyX2VuYWJsZWQgJiYgISpwb3MpCiAJCXJldHVybiAodm9pZCAqKTE7CiAKIAlyZXR1cm4gX19nX25leHQobSwgcG9zKTsKQEAgLTI0OTQsNiArMjQ3MSw3IEBACiAJbXV0ZXhfbG9jaygmZ3JhcGhfbG9jayk7CiAJaWYgKChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgJiYKIAkgICAgKGZpbGUtPmZfZmxhZ3MgJiBPX1RSVU5DKSkgeworCQlmdHJhY2VfZ3JhcGhfZmlsdGVyX2VuYWJsZWQgPSAwOwogCQlmdHJhY2VfZ3JhcGhfY291bnQgPSAwOwogCQltZW1zZXQoZnRyYWNlX2dyYXBoX2Z1bmNzLCAwLCBzaXplb2YoZnRyYWNlX2dyYXBoX2Z1bmNzKSk7CiAJfQpAQCAtMjUxOSw3ICsyNDk3LDcgQEAKIAlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjOwogCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7CiAJaW50IHNlYXJjaF9sZW47Ci0JaW50IGZvdW5kID0gMDsKKwlpbnQgZmFpbCA9IDE7CiAJaW50IHR5cGUsIG5vdDsKIAljaGFyICpzZWFyY2g7CiAJYm9vbCBleGlzdHM7CkBAIC0yNTMwLDM3ICsyNTA4LDUxIEBACiAKIAkvKiBkZWNvZGUgcmVnZXggKi8KIAl0eXBlID0gZmlsdGVyX3BhcnNlX3JlZ2V4KGJ1ZmZlciwgc3RybGVuKGJ1ZmZlciksICZzZWFyY2gsICZub3QpOwotCWlmIChub3QpCi0JCXJldHVybiAtRUlOVkFMOworCWlmICghbm90ICYmICppZHggPj0gRlRSQUNFX0dSQVBIX01BWF9GVU5DUykKKwkJcmV0dXJuIC1FQlVTWTsKIAogCXNlYXJjaF9sZW4gPSBzdHJsZW4oc2VhcmNoKTsKIAogCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKIAlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKIAotCQlpZiAoKmlkeCA+PSBGVFJBQ0VfR1JBUEhfTUFYX0ZVTkNTKQotCQkJYnJlYWs7Ci0KIAkJaWYgKHJlYy0+ZmxhZ3MgJiAoRlRSQUNFX0ZMX0ZBSUxFRCB8IEZUUkFDRV9GTF9GUkVFKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChmdHJhY2VfbWF0Y2hfcmVjb3JkKHJlYywgc2VhcmNoLCBzZWFyY2hfbGVuLCB0eXBlKSkgewotCQkJLyogZW5zdXJlIGl0IGlzIG5vdCBhbHJlYWR5IGluIHRoZSBhcnJheSAqLworCQkJLyogaWYgaXQgaXMgaW4gdGhlIGFycmF5ICovCiAJCQlleGlzdHMgPSBmYWxzZTsKLQkJCWZvciAoaSA9IDA7IGkgPCAqaWR4OyBpKyspCisJCQlmb3IgKGkgPSAwOyBpIDwgKmlkeDsgaSsrKSB7CiAJCQkJaWYgKGFycmF5W2ldID09IHJlYy0+aXApIHsKIAkJCQkJZXhpc3RzID0gdHJ1ZTsKIAkJCQkJYnJlYWs7CiAJCQkJfQotCQkJaWYgKCFleGlzdHMpCi0JCQkJYXJyYXlbKCppZHgpKytdID0gcmVjLT5pcDsKLQkJCWZvdW5kID0gMTsKKwkJCX0KKworCQkJaWYgKCFub3QpIHsKKwkJCQlmYWlsID0gMDsKKwkJCQlpZiAoIWV4aXN0cykgeworCQkJCQlhcnJheVsoKmlkeCkrK10gPSByZWMtPmlwOworCQkJCQlpZiAoKmlkeCA+PSBGVFJBQ0VfR1JBUEhfTUFYX0ZVTkNTKQorCQkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoZXhpc3RzKSB7CisJCQkJCWFycmF5W2ldID0gYXJyYXlbLS0oKmlkeCldOworCQkJCQlhcnJheVsqaWR4XSA9IDA7CisJCQkJCWZhaWwgPSAwOworCQkJCX0KKwkJCX0KIAkJfQogCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpOwotCitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiAKLQlyZXR1cm4gZm91bmQgPyAwIDogLUVJTlZBTDsKKwlpZiAoZmFpbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmdHJhY2VfZ3JhcGhfZmlsdGVyX2VuYWJsZWQgPSAxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3NpemVfdApAQCAtMjU3MCwxNiArMjU2MiwxMSBAQAogCXN0cnVjdCB0cmFjZV9wYXJzZXIgcGFyc2VyOwogCXNzaXplX3QgcmVhZCwgcmV0OwogCi0JaWYgKCFjbnQgfHwgY250IDwgMCkKKwlpZiAoIWNudCkKIAkJcmV0dXJuIDA7CiAKIAltdXRleF9sb2NrKCZncmFwaF9sb2NrKTsKIAotCWlmIChmdHJhY2VfZ3JhcGhfY291bnQgPj0gRlRSQUNFX0dSQVBIX01BWF9GVU5DUykgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KIAlpZiAodHJhY2VfcGFyc2VyX2dldF9pbml0KCZwYXJzZXIsIEZUUkFDRV9CVUZGX01BWCkpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfdW5sb2NrOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwppbmRleCBlYWM2ODc1Li4wMzJjNTdjIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwbGljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgpAQCAtMTAyLDkgKzEwMyw2IEBACiAKIHN0YXRpYyBjcHVtYXNrX3Zhcl90IF9fcmVhZF9tb3N0bHkJdHJhY2luZ19idWZmZXJfbWFzazsKIAotLyogRGVmaW5lIHdoaWNoIGNwdSBidWZmZXJzIGFyZSBjdXJyZW50bHkgcmVhZCBpbiB0cmFjZV9waXBlICovCi1zdGF0aWMgY3B1bWFza192YXJfdAkJCXRyYWNpbmdfcmVhZGVyX2NwdW1hc2s7Ci0KICNkZWZpbmUgZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KQlcCiAJZm9yX2VhY2hfY3B1KGNwdSwgdHJhY2luZ19idWZmZXJfbWFzaykKIApAQCAtMjQzLDEyICsyNDEsOTEgQEAKIAogLyoKICAqIHRyYWNlX3R5cGVzX2xvY2sgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSB0cmFjZV90eXBlcyBsaXN0LgotICogVGhpcyBsb2NrIGlzIGFsc28gdXNlZCB0byBrZWVwIHVzZXIgYWNjZXNzIHNlcmlhbGl6ZWQuCi0gKiBBY2Nlc3NlcyBmcm9tIHVzZXJzcGFjZSB3aWxsIGdyYWIgdGhpcyBsb2NrIHdoaWxlIHVzZXJzcGFjZQotICogYWN0aXZpdGllcyBoYXBwZW4gaW5zaWRlIHRoZSBrZXJuZWwuCiAgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgodHJhY2VfdHlwZXNfbG9jayk7CiAKKy8qCisgKiBzZXJpYWxpemUgdGhlIGFjY2VzcyBvZiB0aGUgcmluZyBidWZmZXIKKyAqCisgKiByaW5nIGJ1ZmZlciBzZXJpYWxpemVzIHJlYWRlcnMsIGJ1dCBpdCBpcyBsb3cgbGV2ZWwgcHJvdGVjdGlvbi4KKyAqIFRoZSB2YWxpZGl0eSBvZiB0aGUgZXZlbnRzICh3aGljaCByZXR1cm5zIGJ5IHJpbmdfYnVmZmVyX3BlZWsoKSAuLmV0YykKKyAqIGFyZSBub3QgcHJvdGVjdGVkIGJ5IHJpbmcgYnVmZmVyLgorICoKKyAqIFRoZSBjb250ZW50IG9mIGV2ZW50cyBtYXkgYmVjb21lIGdhcmJhZ2UgaWYgd2UgYWxsb3cgb3RoZXIgcHJvY2VzcyBjb25zdW1lcworICogdGhlc2UgZXZlbnRzIGNvbmN1cnJlbnRseToKKyAqICAgQSkgdGhlIHBhZ2Ugb2YgdGhlIGNvbnN1bWVkIGV2ZW50cyBtYXkgYmVjb21lIGEgbm9ybWFsIHBhZ2UKKyAqICAgICAgKG5vdCByZWFkZXIgcGFnZSkgaW4gcmluZyBidWZmZXIsIGFuZCB0aGlzIHBhZ2Ugd2lsbCBiZSByZXdyaXRlZAorICogICAgICBieSBldmVudHMgcHJvZHVjZXIuCisgKiAgIEIpIFRoZSBwYWdlIG9mIHRoZSBjb25zdW1lZCBldmVudHMgbWF5IGJlY29tZSBhIHBhZ2UgZm9yIHNwbGljZV9yZWFkLAorICogICAgICBhbmQgdGhpcyBwYWdlIHdpbGwgYmUgcmV0dXJuZWQgdG8gc3lzdGVtLgorICoKKyAqIFRoZXNlIHByaW1pdGl2ZXMgYWxsb3cgbXVsdGkgcHJvY2VzcyBhY2Nlc3MgdG8gZGlmZmVyZW50IGNwdSByaW5nIGJ1ZmZlcgorICogY29uY3VycmVudGx5LgorICoKKyAqIFRoZXNlIHByaW1pdGl2ZXMgZG9uJ3QgZGlzdGluZ3Vpc2ggcmVhZC1vbmx5IGFuZCByZWFkLWNvbnN1bWUgYWNjZXNzLgorICogTXVsdGkgcmVhZC1vbmx5IGFjY2VzcyBhcmUgYWxzbyBzZXJpYWxpemVkLgorICovCisKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgREVDTEFSRV9SV1NFTShhbGxfY3B1X2FjY2Vzc19sb2NrKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbXV0ZXgsIGNwdV9hY2Nlc3NfbG9jayk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9hY2Nlc3NfbG9jayhpbnQgY3B1KQoreworCWlmIChjcHUgPT0gVFJBQ0VfUElQRV9BTExfQ1BVKSB7CisJCS8qIGdhaW4gaXQgZm9yIGFjY2Vzc2luZyB0aGUgd2hvbGUgcmluZyBidWZmZXIuICovCisJCWRvd25fd3JpdGUoJmFsbF9jcHVfYWNjZXNzX2xvY2spOworCX0gZWxzZSB7CisJCS8qIGdhaW4gaXQgZm9yIGFjY2Vzc2luZyBhIGNwdSByaW5nIGJ1ZmZlci4gKi8KKworCQkvKiBGaXJzdGx5IGJsb2NrIG90aGVyIHRyYWNlX2FjY2Vzc19sb2NrKFRSQUNFX1BJUEVfQUxMX0NQVSkuICovCisJCWRvd25fcmVhZCgmYWxsX2NwdV9hY2Nlc3NfbG9jayk7CisKKwkJLyogU2Vjb25kbHkgYmxvY2sgb3RoZXIgYWNjZXNzIHRvIHRoaXMgQGNwdSByaW5nIGJ1ZmZlci4gKi8KKwkJbXV0ZXhfbG9jaygmcGVyX2NwdShjcHVfYWNjZXNzX2xvY2ssIGNwdSkpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX2FjY2Vzc191bmxvY2soaW50IGNwdSkKK3sKKwlpZiAoY3B1ID09IFRSQUNFX1BJUEVfQUxMX0NQVSkgeworCQl1cF93cml0ZSgmYWxsX2NwdV9hY2Nlc3NfbG9jayk7CisJfSBlbHNlIHsKKwkJbXV0ZXhfdW5sb2NrKCZwZXJfY3B1KGNwdV9hY2Nlc3NfbG9jaywgY3B1KSk7CisJCXVwX3JlYWQoJmFsbF9jcHVfYWNjZXNzX2xvY2spOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX2FjY2Vzc19sb2NrX2luaXQodm9pZCkKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJbXV0ZXhfaW5pdCgmcGVyX2NwdShjcHVfYWNjZXNzX2xvY2ssIGNwdSkpOworfQorCisjZWxzZQorCitzdGF0aWMgREVGSU5FX01VVEVYKGFjY2Vzc19sb2NrKTsKKworc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX2FjY2Vzc19sb2NrKGludCBjcHUpCit7CisJKHZvaWQpY3B1OworCW11dGV4X2xvY2soJmFjY2Vzc19sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX2FjY2Vzc191bmxvY2soaW50IGNwdSkKK3sKKwkodm9pZCljcHU7CisJbXV0ZXhfdW5sb2NrKCZhY2Nlc3NfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9hY2Nlc3NfbG9ja19pbml0KHZvaWQpCit7Cit9CisKKyNlbmRpZgorCiAvKiB0cmFjZV93YWl0IGlzIGEgd2FpdHF1ZXVlIGZvciB0YXNrcyBibG9ja2VkIG9uIHRyYWNlX3BvbGwgKi8KIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh0cmFjZV93YWl0KTsKIApAQCAtMTMyMCw4ICsxMzk3LDEwIEBACiAJZW50cnktPmZtdAkJCT0gZm10OwogCiAJbWVtY3B5KGVudHJ5LT5idWYsIHRyYWNlX2J1Ziwgc2l6ZW9mKHUzMikgKiBsZW4pOwotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKQorCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKSB7CiAJCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCk7CisJCWZ0cmFjZV90cmFjZV9zdGFjayhidWZmZXIsIGZsYWdzLCA2LCBwYyk7CisJfQogCiBvdXRfdW5sb2NrOgogCWFyY2hfc3Bpbl91bmxvY2soJnRyYWNlX2J1Zl9sb2NrKTsKQEAgLTEzOTQsOCArMTQ3MywxMCBAQAogCiAJbWVtY3B5KCZlbnRyeS0+YnVmLCB0cmFjZV9idWYsIGxlbik7CiAJZW50cnktPmJ1ZltsZW5dID0gJ1wwJzsKLQlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCBidWZmZXIsIGV2ZW50KSkKKwlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCBidWZmZXIsIGV2ZW50KSkgewogCQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQpOworCQlmdHJhY2VfdHJhY2Vfc3RhY2soYnVmZmVyLCBpcnFfZmxhZ3MsIDYsIHBjKTsKKwl9CiAKICBvdXRfdW5sb2NrOgogCWFyY2hfc3Bpbl91bmxvY2soJnRyYWNlX2J1Zl9sb2NrKTsKQEAgLTE1ODUsMTIgKzE2NjYsNiBAQAogfQogCiAvKgotICogTm8gbmVjZXNzYXJ5IGxvY2tpbmcgaGVyZS4gVGhlIHdvcnN0IHRoaW5nIHdoaWNoIGNhbgotICogaGFwcGVuIGlzIGxvb3NpbmcgZXZlbnRzIGNvbnN1bWVkIGF0IHRoZSBzYW1lIHRpbWUKLSAqIGJ5IGEgdHJhY2VfcGlwZSByZWFkZXIuCi0gKiBPdGhlciB0aGFuIHRoYXQsIHdlIGRvbid0IHJpc2sgdG8gY3Jhc2ggdGhlIHJpbmcgYnVmZmVyCi0gKiBiZWNhdXNlIGl0IHNlcmlhbGl6ZXMgdGhlIHJlYWRlcnMuCi0gKgogICogVGhlIGN1cnJlbnQgdHJhY2VyIGlzIGNvcGllZCB0byBhdm9pZCBhIGdsb2JhbCBsb2NraW5nCiAgKiBhbGwgYXJvdW5kLgogICovCkBAIC0xNjQ1LDEyICsxNzIwLDE2IEBACiAJfQogCiAJdHJhY2VfZXZlbnRfcmVhZF9sb2NrKCk7CisJdHJhY2VfYWNjZXNzX2xvY2soY3B1X2ZpbGUpOwogCXJldHVybiBwOwogfQogCiBzdGF0aWMgdm9pZCBzX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQogeworCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IG0tPnByaXZhdGU7CisKIAlhdG9taWNfZGVjKCZ0cmFjZV9yZWNvcmRfY21kbGluZV9kaXNhYmxlZCk7CisJdHJhY2VfYWNjZXNzX3VubG9jayhpdGVyLT5jcHVfZmlsZSk7CiAJdHJhY2VfZXZlbnRfcmVhZF91bmxvY2soKTsKIH0KIApAQCAtMjg0MSwyMiArMjkyMCw2IEBACiAKIAltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAotCS8qIFdlIG9ubHkgYWxsb3cgb25lIHJlYWRlciBwZXIgY3B1ICovCi0JaWYgKGNwdV9maWxlID09IFRSQUNFX1BJUEVfQUxMX0NQVSkgewotCQlpZiAoIWNwdW1hc2tfZW1wdHkodHJhY2luZ19yZWFkZXJfY3B1bWFzaykpIHsKLQkJCXJldCA9IC1FQlVTWTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWNwdW1hc2tfc2V0YWxsKHRyYWNpbmdfcmVhZGVyX2NwdW1hc2spOwotCX0gZWxzZSB7Ci0JCWlmICghY3B1bWFza190ZXN0X2NwdShjcHVfZmlsZSwgdHJhY2luZ19yZWFkZXJfY3B1bWFzaykpCi0JCQljcHVtYXNrX3NldF9jcHUoY3B1X2ZpbGUsIHRyYWNpbmdfcmVhZGVyX2NwdW1hc2spOwotCQllbHNlIHsKLQkJCXJldCA9IC1FQlVTWTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCiAJLyogY3JlYXRlIGEgYnVmZmVyIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiB0byBwYXNzIHRvIHVzZXJzcGFjZSAqLwogCWl0ZXIgPSBremFsbG9jKHNpemVvZigqaXRlciksIEdGUF9LRVJORUwpOwogCWlmICghaXRlcikgewpAQCAtMjkxMiwxMiArMjk3NSw2IEBACiAKIAltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAotCWlmIChpdGVyLT5jcHVfZmlsZSA9PSBUUkFDRV9QSVBFX0FMTF9DUFUpCi0JCWNwdW1hc2tfY2xlYXIodHJhY2luZ19yZWFkZXJfY3B1bWFzayk7Ci0JZWxzZQotCQljcHVtYXNrX2NsZWFyX2NwdShpdGVyLT5jcHVfZmlsZSwgdHJhY2luZ19yZWFkZXJfY3B1bWFzayk7Ci0KLQogCWlmIChpdGVyLT50cmFjZS0+cGlwZV9jbG9zZSkKIAkJaXRlci0+dHJhY2UtPnBpcGVfY2xvc2UoaXRlcik7CiAKQEAgLTMwNzksNiArMzEzNiw3IEBACiAJaXRlci0+cG9zID0gLTE7CiAKIAl0cmFjZV9ldmVudF9yZWFkX2xvY2soKTsKKwl0cmFjZV9hY2Nlc3NfbG9jayhpdGVyLT5jcHVfZmlsZSk7CiAJd2hpbGUgKGZpbmRfbmV4dF9lbnRyeV9pbmMoaXRlcikgIT0gTlVMTCkgewogCQllbnVtIHByaW50X2xpbmVfdCByZXQ7CiAJCWludCBsZW4gPSBpdGVyLT5zZXEubGVuOwpAQCAtMzA5NSw2ICszMTUzLDcgQEAKIAkJaWYgKGl0ZXItPnNlcS5sZW4gPj0gY250KQogCQkJYnJlYWs7CiAJfQorCXRyYWNlX2FjY2Vzc191bmxvY2soaXRlci0+Y3B1X2ZpbGUpOwogCXRyYWNlX2V2ZW50X3JlYWRfdW5sb2NrKCk7CiAKIAkvKiBOb3cgY29weSB3aGF0IHdlIGhhdmUgdG8gdGhlIHVzZXIgKi8KQEAgLTMyMjAsNiArMzI3OSw3IEBACiAJfQogCiAJdHJhY2VfZXZlbnRfcmVhZF9sb2NrKCk7CisJdHJhY2VfYWNjZXNzX2xvY2soaXRlci0+Y3B1X2ZpbGUpOwogCiAJLyogRmlsbCBhcyBtYW55IHBhZ2VzIGFzIHBvc3NpYmxlLiAqLwogCWZvciAoaSA9IDAsIHJlbSA9IGxlbjsgaSA8IFBJUEVfQlVGRkVSUyAmJiByZW07IGkrKykgewpAQCAtMzI0Myw2ICszMzAzLDcgQEAKIAkJdHJhY2Vfc2VxX2luaXQoJml0ZXItPnNlcSk7CiAJfQogCisJdHJhY2VfYWNjZXNzX3VubG9jayhpdGVyLT5jcHVfZmlsZSk7CiAJdHJhY2VfZXZlbnRfcmVhZF91bmxvY2soKTsKIAltdXRleF91bmxvY2soJml0ZXItPm11dGV4KTsKIApAQCAtMzU0NCwxMCArMzYwNSwxMiBAQAogCiAJaW5mby0+cmVhZCA9IDA7CiAKKwl0cmFjZV9hY2Nlc3NfbG9jayhpbmZvLT5jcHUpOwogCXJldCA9IHJpbmdfYnVmZmVyX3JlYWRfcGFnZShpbmZvLT50ci0+YnVmZmVyLAogCQkJCSAgICAmaW5mby0+c3BhcmUsCiAJCQkJICAgIGNvdW50LAogCQkJCSAgICBpbmZvLT5jcHUsIDApOworCXRyYWNlX2FjY2Vzc191bmxvY2soaW5mby0+Y3B1KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIDA7CiAKQEAgLTM2NzUsNiArMzczOCw3IEBACiAJCWxlbiAmPSBQQUdFX01BU0s7CiAJfQogCisJdHJhY2VfYWNjZXNzX2xvY2soaW5mby0+Y3B1KTsKIAllbnRyaWVzID0gcmluZ19idWZmZXJfZW50cmllc19jcHUoaW5mby0+dHItPmJ1ZmZlciwgaW5mby0+Y3B1KTsKIAogCWZvciAoaSA9IDA7IGkgPCBQSVBFX0JVRkZFUlMgJiYgbGVuICYmIGVudHJpZXM7IGkrKywgbGVuIC09IFBBR0VfU0laRSkgewpAQCAtMzcyMiw2ICszNzg2LDcgQEAKIAkJZW50cmllcyA9IHJpbmdfYnVmZmVyX2VudHJpZXNfY3B1KGluZm8tPnRyLT5idWZmZXIsIGluZm8tPmNwdSk7CiAJfQogCisJdHJhY2VfYWNjZXNzX3VubG9jayhpbmZvLT5jcHUpOwogCXNwZC5ucl9wYWdlcyA9IGk7CiAKIAkvKiBkaWQgd2UgcmVhZCBhbnl0aGluZz8gKi8KQEAgLTQxNTgsNiArNDIyMyw4IEBACiAJc3RydWN0IGRlbnRyeSAqZF90cmFjZXI7CiAJaW50IGNwdTsKIAorCXRyYWNlX2FjY2Vzc19sb2NrX2luaXQoKTsKKwogCWRfdHJhY2VyID0gdHJhY2luZ19pbml0X2RlbnRyeSgpOwogCiAJdHJhY2VfY3JlYXRlX2ZpbGUoInRyYWNpbmdfZW5hYmxlZCIsIDA2NDQsIGRfdHJhY2VyLApAQCAtNDM5Miw5ICs0NDU5LDYgQEAKIAlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZ0cmFjaW5nX2NwdW1hc2ssIEdGUF9LRVJORUwpKQogCQlnb3RvIG91dF9mcmVlX2J1ZmZlcl9tYXNrOwogCi0JaWYgKCF6YWxsb2NfY3B1bWFza192YXIoJnRyYWNpbmdfcmVhZGVyX2NwdW1hc2ssIEdGUF9LRVJORUwpKQotCQlnb3RvIG91dF9mcmVlX3RyYWNpbmdfY3B1bWFzazsKLQogCS8qIFRvIHNhdmUgbWVtb3J5LCBrZWVwIHRoZSByaW5nIGJ1ZmZlciBzaXplIHRvIGl0cyBtaW5pbXVtICovCiAJaWYgKHJpbmdfYnVmZmVyX2V4cGFuZGVkKQogCQlyaW5nX2J1Zl9zaXplID0gdHJhY2VfYnVmX3NpemU7CkBAIC00NDUyLDggKzQ1MTYsNiBAQAogCXJldHVybiAwOwogCiBvdXRfZnJlZV9jcHVtYXNrOgotCWZyZWVfY3B1bWFza192YXIodHJhY2luZ19yZWFkZXJfY3B1bWFzayk7Ci1vdXRfZnJlZV90cmFjaW5nX2NwdW1hc2s6CiAJZnJlZV9jcHVtYXNrX3Zhcih0cmFjaW5nX2NwdW1hc2spOwogb3V0X2ZyZWVfYnVmZmVyX21hc2s6CiAJZnJlZV9jcHVtYXNrX3Zhcih0cmFjaW5nX2J1ZmZlcl9tYXNrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5oIGIva2VybmVsL3RyYWNlL3RyYWNlLmgKaW5kZXggNGRmNmE3Ny4uZmQwNWJjYSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmgKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmgKQEAgLTQ5Nyw2ICs0OTcsNyBAQAogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogLyogVE9ETzogbWFrZSB0aGlzIHZhcmlhYmxlICovCiAjZGVmaW5lIEZUUkFDRV9HUkFQSF9NQVhfRlVOQ1MJCTMyCitleHRlcm4gaW50IGZ0cmFjZV9ncmFwaF9maWx0ZXJfZW5hYmxlZDsKIGV4dGVybiBpbnQgZnRyYWNlX2dyYXBoX2NvdW50OwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZnRyYWNlX2dyYXBoX2Z1bmNzW0ZUUkFDRV9HUkFQSF9NQVhfRlVOQ1NdOwogCkBAIC01MDQsNyArNTA1LDcgQEAKIHsKIAlpbnQgaTsKIAotCWlmICghZnRyYWNlX2dyYXBoX2NvdW50IHx8IHRlc3RfdHNrX3RyYWNlX2dyYXBoKGN1cnJlbnQpKQorCWlmICghZnRyYWNlX2dyYXBoX2ZpbHRlcl9lbmFibGVkKQogCQlyZXR1cm4gMTsKIAogCWZvciAoaSA9IDA7IGkgPCBmdHJhY2VfZ3JhcGhfY291bnQ7IGkrKykgewpAQCAtNzkxLDcgKzc5Miw4IEBACiAKICN1bmRlZiBGVFJBQ0VfRU5UUlkKICNkZWZpbmUgRlRSQUNFX0VOVFJZKGNhbGwsIHN0cnVjdF9uYW1lLCBpZCwgdHN0cnVjdCwgcHJpbnQpCQlcCi0JZXh0ZXJuIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBldmVudF8jI2NhbGw7CisJZXh0ZXJuIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbAkJCQkJXAorCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkgZXZlbnRfIyNjYWxsOwogI3VuZGVmIEZUUkFDRV9FTlRSWV9EVVAKICNkZWZpbmUgRlRSQUNFX0VOVFJZX0RVUChjYWxsLCBzdHJ1Y3RfbmFtZSwgaWQsIHRzdHJ1Y3QsIHByaW50KQkJXAogCUZUUkFDRV9FTlRSWShjYWxsLCBzdHJ1Y3RfbmFtZSwgaWQsIFBBUkFNUyh0c3RydWN0KSwgUEFSQU1TKHByaW50KSkKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYyBiL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYwppbmRleCA0YTE5NGYwLi5iOWJjNGQ0IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jCkBAIC0zMDcsOCArMzA3LDIzIEBACiAJCXJldHVybiAtMTsKIAlpZiAocGVyY2VudF9hID4gcGVyY2VudF9iKQogCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiAwOworCisJaWYgKGEtPmluY29ycmVjdCA8IGItPmluY29ycmVjdCkKKwkJcmV0dXJuIC0xOworCWlmIChhLT5pbmNvcnJlY3QgPiBiLT5pbmNvcnJlY3QpCisJCXJldHVybiAxOworCisJLyoKKwkgKiBTaW5jZSB0aGUgYWJvdmUgc2hvd3Mgd29yc2UgKGluY29ycmVjdCkgY2FzZXMKKwkgKiBmaXJzdCwgd2UgY29udGludWUgdGhhdCBieSBzaG93aW5nIGJlc3QgKGNvcnJlY3QpCisJICogY2FzZXMgbGFzdC4KKwkgKi8KKwlpZiAoYS0+Y29ycmVjdCA+IGItPmNvcnJlY3QpCisJCXJldHVybiAtMTsKKwlpZiAoYS0+Y29ycmVjdCA8IGItPmNvcnJlY3QpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VyX3N0YXQgYW5ub3RhdGVkX2JyYW5jaF9zdGF0cyA9IHsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jCmluZGV4IDllMjU1NzMuLmYwZDY5MzAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYwpAQCAtNiwxNCArNiwxMiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSAidHJhY2UuaCIKIAogCi1jaGFyICpwZXJmX3RyYWNlX2J1ZjsKLUVYUE9SVF9TWU1CT0xfR1BMKHBlcmZfdHJhY2VfYnVmKTsKLQotY2hhciAqcGVyZl90cmFjZV9idWZfbm1pOwotRVhQT1JUX1NZTUJPTF9HUEwocGVyZl90cmFjZV9idWZfbm1pKTsKK3N0YXRpYyBjaGFyICpwZXJmX3RyYWNlX2J1ZjsKK3N0YXRpYyBjaGFyICpwZXJmX3RyYWNlX2J1Zl9ubWk7CiAKIHR5cGVkZWYgdHlwZW9mKGNoYXIgW0ZUUkFDRV9NQVhfUFJPRklMRV9TSVpFXSkgcGVyZl90cmFjZV90IDsKIApAQCAtMTIwLDMgKzExOCw0NyBAQAogCX0KIAltdXRleF91bmxvY2soJmV2ZW50X211dGV4KTsKIH0KKworX19rcHJvYmVzIHZvaWQgKmZ0cmFjZV9wZXJmX2J1Zl9wcmVwYXJlKGludCBzaXplLCB1bnNpZ25lZCBzaG9ydCB0eXBlLAorCQkJCQlpbnQgKnJjdHhwLCB1bnNpZ25lZCBsb25nICppcnFfZmxhZ3MpCit7CisJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKKwljaGFyICp0cmFjZV9idWYsICpyYXdfZGF0YTsKKwlpbnQgcGMsIGNwdTsKKworCXBjID0gcHJlZW1wdF9jb3VudCgpOworCisJLyogUHJvdGVjdCB0aGUgcGVyIGNwdSBidWZmZXIsIGJlZ2luIHRoZSByY3UgcmVhZCBzaWRlICovCisJbG9jYWxfaXJxX3NhdmUoKmlycV9mbGFncyk7CisKKwkqcmN0eHAgPSBwZXJmX3N3ZXZlbnRfZ2V0X3JlY3Vyc2lvbl9jb250ZXh0KCk7CisJaWYgKCpyY3R4cCA8IDApCisJCWdvdG8gZXJyX3JlY3Vyc2lvbjsKKworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChpbl9ubWkoKSkKKwkJdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmX25taSk7CisJZWxzZQorCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWYpOworCisJaWYgKCF0cmFjZV9idWYpCisJCWdvdG8gZXJyOworCisJcmF3X2RhdGEgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIGNwdSk7CisKKwkvKiB6ZXJvIHRoZSBkZWFkIGJ5dGVzIGZyb20gYWxpZ24gdG8gbm90IGxlYWsgc3RhY2sgdG8gdXNlciAqLworCSoodTY0ICopKCZyYXdfZGF0YVtzaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7CisKKwllbnRyeSA9IChzdHJ1Y3QgdHJhY2VfZW50cnkgKilyYXdfZGF0YTsKKwl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKGVudHJ5LCAqaXJxX2ZsYWdzLCBwYyk7CisJZW50cnktPnR5cGUgPSB0eXBlOworCisJcmV0dXJuIHJhd19kYXRhOworZXJyOgorCXBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQoKnJjdHhwKTsKK2Vycl9yZWN1cnNpb246CisJbG9jYWxfaXJxX3Jlc3RvcmUoKmlycV9mbGFncyk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmdHJhY2VfcGVyZl9idWZfcHJlcGFyZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKaW5kZXggMTg5YjA5Yi4uM2Y5NzJhZDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKQEAgLTYwLDEwICs2MCw4IEBACiAJcmV0dXJuIDA7CiAKIGVycjoKLQlpZiAoZmllbGQpIHsKKwlpZiAoZmllbGQpCiAJCWtmcmVlKGZpZWxkLT5uYW1lKTsKLQkJa2ZyZWUoZmllbGQtPnR5cGUpOwotCX0KIAlrZnJlZShmaWVsZCk7CiAKIAlyZXR1cm4gLUVOT01FTTsKQEAgLTUyMCw0MSArNTE4LDE2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotZXh0ZXJuIGNoYXIgKl9fYmFkX3R5cGVfc2l6ZSh2b2lkKTsKLQotI3VuZGVmIEZJRUxECi0jZGVmaW5lIEZJRUxEKHR5cGUsIG5hbWUpCQkJCQkJXAotCXNpemVvZih0eXBlKSAhPSBzaXplb2YoZmllbGQubmFtZSkgPyBfX2JhZF90eXBlX3NpemUoKSA6CVwKLQkjdHlwZSwgImNvbW1vbl8iICNuYW1lLCBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBuYW1lKSwJCVwKLQkJc2l6ZW9mKGZpZWxkLm5hbWUpLCBpc19zaWduZWRfdHlwZSh0eXBlKQotCi1zdGF0aWMgaW50IHRyYWNlX3dyaXRlX2hlYWRlcihzdHJ1Y3QgdHJhY2Vfc2VxICpzKQotewotCXN0cnVjdCB0cmFjZV9lbnRyeSBmaWVsZDsKLQotCS8qIHN0cnVjdCB0cmFjZV9lbnRyeSAqLwotCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsCi0JCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcdHNpZ25lZDoldTtcbiIKLQkJCSJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIgotCQkJIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XHRzaWduZWQ6JXU7XG4iCi0JCQkiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTtcdHNpZ25lZDoldTtcbiIKLQkJCSJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIgotCQkJIlxuIiwKLQkJCUZJRUxEKHVuc2lnbmVkIHNob3J0LCB0eXBlKSwKLQkJCUZJRUxEKHVuc2lnbmVkIGNoYXIsIGZsYWdzKSwKLQkJCUZJRUxEKHVuc2lnbmVkIGNoYXIsIHByZWVtcHRfY291bnQpLAotCQkJRklFTEQoaW50LCBwaWQpLAotCQkJRklFTEQoaW50LCBsb2NrX2RlcHRoKSk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90CiBldmVudF9mb3JtYXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQsCiAJCSAgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2ZpZWxkICpmaWVsZDsKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzOworCWludCBjb21tb25fZmllbGRfY291bnQgPSA1OwogCWNoYXIgKmJ1ZjsKLQlpbnQgcjsKKwlpbnQgciA9IDA7CiAKIAlpZiAoKnBwb3MpCiAJCXJldHVybiAwOwpAQCAtNTY1LDE0ICs1MzgsNDggQEAKIAogCXRyYWNlX3NlcV9pbml0KHMpOwogCi0JLyogSWYgYW55IG9mIHRoZSBmaXJzdCB3cml0ZXMgZmFpbCwgc28gd2lsbCB0aGUgc2hvd19mb3JtYXQuICovCi0KIAl0cmFjZV9zZXFfcHJpbnRmKHMsICJuYW1lOiAlc1xuIiwgY2FsbC0+bmFtZSk7CiAJdHJhY2Vfc2VxX3ByaW50ZihzLCAiSUQ6ICVkXG4iLCBjYWxsLT5pZCk7CiAJdHJhY2Vfc2VxX3ByaW50ZihzLCAiZm9ybWF0OlxuIik7Ci0JdHJhY2Vfd3JpdGVfaGVhZGVyKHMpOwogCi0JciA9IGNhbGwtPnNob3dfZm9ybWF0KGNhbGwsIHMpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShmaWVsZCwgJmNhbGwtPmZpZWxkcywgbGluaykgeworCQkvKgorCQkgKiBTbWFydGx5IHNob3dzIHRoZSBhcnJheSB0eXBlKGV4Y2VwdCBkeW5hbWljIGFycmF5KS4KKwkJICogTm9ybWFsOgorCQkgKglmaWVsZDpUWVBFIFZBUgorCQkgKiBJZiBUWVBFIDo9IFRZUEVbTEVOXSwgaXQgaXMgc2hvd246CisJCSAqCWZpZWxkOlRZUEUgVkFSW0xFTl0KKwkJICovCisJCWNvbnN0IGNoYXIgKmFycmF5X2Rlc2NyaXB0b3IgPSBzdHJjaHIoZmllbGQtPnR5cGUsICdbJyk7CisKKwkJaWYgKCFzdHJuY21wKGZpZWxkLT50eXBlLCAiX19kYXRhX2xvYyIsIDEwKSkKKwkJCWFycmF5X2Rlc2NyaXB0b3IgPSBOVUxMOworCisJCWlmICghYXJyYXlfZGVzY3JpcHRvcikgeworCQkJciA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXU7IgorCQkJCQkiXHRzaXplOiV1O1x0c2lnbmVkOiVkO1xuIiwKKwkJCQkJZmllbGQtPnR5cGUsIGZpZWxkLT5uYW1lLCBmaWVsZC0+b2Zmc2V0LAorCQkJCQlmaWVsZC0+c2l6ZSwgISFmaWVsZC0+aXNfc2lnbmVkKTsKKwkJfSBlbHNlIHsKKwkJCXIgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiUuKnMgJXMlcztcdG9mZnNldDoldTsiCisJCQkJCSJcdHNpemU6JXU7XHRzaWduZWQ6JWQ7XG4iLAorCQkJCQkoaW50KShhcnJheV9kZXNjcmlwdG9yIC0gZmllbGQtPnR5cGUpLAorCQkJCQlmaWVsZC0+dHlwZSwgZmllbGQtPm5hbWUsCisJCQkJCWFycmF5X2Rlc2NyaXB0b3IsIGZpZWxkLT5vZmZzZXQsCisJCQkJCWZpZWxkLT5zaXplLCAhIWZpZWxkLT5pc19zaWduZWQpOworCQl9CisKKwkJaWYgKC0tY29tbW9uX2ZpZWxkX2NvdW50ID09IDApCisJCQlyID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG4iKTsKKworCQlpZiAoIXIpCisJCQlicmVhazsKKwl9CisKKwlpZiAocikKKwkJciA9IHRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiAlc1xuIiwKKwkJCQljYWxsLT5wcmludF9mbXQpOworCiAJaWYgKCFyKSB7CiAJCS8qCiAJCSAqIHVnISAgVGhlIGZvcm1hdCBvdXRwdXQgaXMgYmlnZ2VyIHRoYW4gYSBQQUdFISEKQEAgLTk0OCwxMCArOTU1LDYgQEAKIAkJCQkgIGZpbHRlcik7CiAJfQogCi0JLyogQSB0cmFjZSBtYXkgbm90IHdhbnQgdG8gZXhwb3J0IGl0cyBmb3JtYXQgKi8KLQlpZiAoIWNhbGwtPnNob3dfZm9ybWF0KQotCQlyZXR1cm4gMDsKLQogCXRyYWNlX2NyZWF0ZV9maWxlKCJmb3JtYXQiLCAwNDQ0LCBjYWxsLT5kaXIsIGNhbGwsCiAJCQkgIGZvcm1hdCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCmluZGV4IGU0MmFmOWEuLjQ2MTVmNjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYwpAQCAtMTM3MSw3ICsxMzcxLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAogdm9pZCBmdHJhY2VfcHJvZmlsZV9mcmVlX2ZpbHRlcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CkBAIC0xNDM5LDUgKzE0MzksNSBAQAogCXJldHVybiBlcnI7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfRVZFTlRfUFJPRklMRSAqLworI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKaW5kZXggZDRmYTVkYy4uZTA5MWY2NCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwpAQCAtNjIsNzggKzYyLDYgQEAKIAogI2luY2x1ZGUgInRyYWNlX2VudHJpZXMuaCIKIAotCi0jdW5kZWYgX19maWVsZAotI2RlZmluZSBfX2ZpZWxkKHR5cGUsIGl0ZW0pCQkJCQkJXAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICIgI2l0ZW0gIjtcdCIJXAotCQkJICAgICAgICJvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XHRzaWduZWQ6JXU7XG4iLAlcCi0JCQkgICAgICAgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksCQlcCi0JCQkgICAgICAgc2l6ZW9mKGZpZWxkLml0ZW0pLCBpc19zaWduZWRfdHlwZSh0eXBlKSk7IFwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gMDsKLQotI3VuZGVmIF9fZmllbGRfZGVzYwotI2RlZmluZSBfX2ZpZWxkX2Rlc2ModHlwZSwgY29udGFpbmVyLCBpdGVtKQkJCQlcCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgIiAjaXRlbSAiO1x0IglcCi0JCQkgICAgICAgIm9mZnNldDolenU7XHRzaXplOiV6dTtcdHNpZ25lZDoldTtcbiIsCVwKLQkJCSAgICAgICBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBjb250YWluZXIuaXRlbSksCVwKLQkJCSAgICAgICBzaXplb2YoZmllbGQuY29udGFpbmVyLml0ZW0pLAkJXAotCQkJICAgICAgIGlzX3NpZ25lZF90eXBlKHR5cGUpKTsJCQlcCi0JaWYgKCFyZXQpCQkJCQkJCVwKLQkJcmV0dXJuIDA7Ci0KLSN1bmRlZiBfX2FycmF5Ci0jZGVmaW5lIF9fYXJyYXkodHlwZSwgaXRlbSwgbGVuKQkJCQkJXAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICIgI2l0ZW0gIlsiICNsZW4gIl07XHQiIFwKLQkJCSAgICAgICAib2Zmc2V0OiV6dTtcdHNpemU6JXp1O1x0c2lnbmVkOiV1O1xuIiwJXAotCQkJICAgICAgIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLAkJXAotCQkJICAgICAgIHNpemVvZihmaWVsZC5pdGVtKSwgaXNfc2lnbmVkX3R5cGUodHlwZSkpOyBcCi0JaWYgKCFyZXQpCQkJCQkJCVwKLQkJcmV0dXJuIDA7Ci0KLSN1bmRlZiBfX2FycmF5X2Rlc2MKLSNkZWZpbmUgX19hcnJheV9kZXNjKHR5cGUsIGNvbnRhaW5lciwgaXRlbSwgbGVuKQkJCVwKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAiICNpdGVtICJbIiAjbGVuICJdO1x0IiBcCi0JCQkgICAgICAgIm9mZnNldDolenU7XHRzaXplOiV6dTtcdHNpZ25lZDoldTtcbiIsCVwKLQkJCSAgICAgICBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBjb250YWluZXIuaXRlbSksCVwKLQkJCSAgICAgICBzaXplb2YoZmllbGQuY29udGFpbmVyLml0ZW0pLAkJXAotCQkJICAgICAgIGlzX3NpZ25lZF90eXBlKHR5cGUpKTsJCQlcCi0JaWYgKCFyZXQpCQkJCQkJCVwKLQkJcmV0dXJuIDA7Ci0KLSN1bmRlZiBfX2R5bmFtaWNfYXJyYXkKLSNkZWZpbmUgX19keW5hbWljX2FycmF5KHR5cGUsIGl0ZW0pCQkJCQlcCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgIiAjaXRlbSAiO1x0IglcCi0JCQkgICAgICAgIm9mZnNldDolenU7XHRzaXplOjA7XHRzaWduZWQ6JXU7XG4iLAlcCi0JCQkgICAgICAgb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksCQlcCi0JCQkgICAgICAgaXNfc2lnbmVkX3R5cGUodHlwZSkpOwkJCVwKLQlpZiAoIXJldCkJCQkJCQkJXAotCQlyZXR1cm4gMDsKLQotI3VuZGVmIEZfcHJpbnRrCi0jZGVmaW5lIEZfcHJpbnRrKGZtdCwgYXJncy4uLikgIiVzLCAlc1xuIiwgI2ZtdCwgX19zdHJpbmdpZnkoYXJncykKLQotI3VuZGVmIF9fZW50cnkKLSNkZWZpbmUgX19lbnRyeSBSRUMKLQotI3VuZGVmIEZUUkFDRV9FTlRSWQotI2RlZmluZSBGVFJBQ0VfRU5UUlkobmFtZSwgc3RydWN0X25hbWUsIGlkLCB0c3RydWN0LCBwcmludCkJCVwKLXN0YXRpYyBpbnQJCQkJCQkJCVwKLWZ0cmFjZV9mb3JtYXRfIyNuYW1lKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqdW51c2VkLAkJCVwKLQkJICAgICBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQkJCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCBzdHJ1Y3RfbmFtZSBmaWVsZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKTsJCVwKLQlpbnQgcmV0ID0gMDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCXRzdHJ1Y3Q7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQl0cmFjZV9zZXFfcHJpbnRmKHMsICJcbnByaW50IGZtdDogIiBwcmludCk7CQkJXAotCQkJCQkJCQkJXAotCXJldHVybiByZXQ7CQkJCQkJCVwKLX0KLQotI2luY2x1ZGUgInRyYWNlX2VudHJpZXMuaCIKLQogI3VuZGVmIF9fZmllbGQKICNkZWZpbmUgX19maWVsZCh0eXBlLCBpdGVtKQkJCQkJCVwKIAlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoZXZlbnRfY2FsbCwgI3R5cGUsICNpdGVtLAkJXApAQCAtMTc1LDcgKzEwMywxMiBAQAogCQlyZXR1cm4gcmV0OwogCiAjdW5kZWYgX19keW5hbWljX2FycmF5Ci0jZGVmaW5lIF9fZHluYW1pY19hcnJheSh0eXBlLCBpdGVtKQorI2RlZmluZSBfX2R5bmFtaWNfYXJyYXkodHlwZSwgaXRlbSkJCQkJCVwKKwlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoZXZlbnRfY2FsbCwgI3R5cGUsICNpdGVtLAkJXAorCQkJCSBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwJCVwKKwkJCQkgMCwgaXNfc2lnbmVkX3R5cGUodHlwZSksIEZJTFRFUl9PVEhFUik7XAorCWlmIChyZXQpCQkJCQkJCVwKKwkJcmV0dXJuIHJldDsKIAogI3VuZGVmIEZUUkFDRV9FTlRSWQogI2RlZmluZSBGVFJBQ0VfRU5UUlkobmFtZSwgc3RydWN0X25hbWUsIGlkLCB0c3RydWN0LCBwcmludCkJCVwKQEAgLTE5OCw2ICsxMzEsOSBAQAogCXJldHVybiAwOwogfQogCisjdW5kZWYgX19lbnRyeQorI2RlZmluZSBfX2VudHJ5IFJFQworCiAjdW5kZWYgX19maWVsZAogI2RlZmluZSBfX2ZpZWxkKHR5cGUsIGl0ZW0pCiAKQEAgLTIxMyw2ICsxNDksOSBAQAogI3VuZGVmIF9fZHluYW1pY19hcnJheQogI2RlZmluZSBfX2R5bmFtaWNfYXJyYXkodHlwZSwgaXRlbSkKIAorI3VuZGVmIEZfcHJpbnRrCisjZGVmaW5lIEZfcHJpbnRrKGZtdCwgYXJncy4uLikgI2ZtdCAiLCAiICBfX3N0cmluZ2lmeShhcmdzKQorCiAjdW5kZWYgRlRSQUNFX0VOVFJZCiAjZGVmaW5lIEZUUkFDRV9FTlRSWShjYWxsLCBzdHJ1Y3RfbmFtZSwgdHlwZSwgdHN0cnVjdCwgcHJpbnQpCQlcCiAJCQkJCQkJCQlcCkBAIC0yMjMsNyArMTYyLDcgQEAKIAkuaWQJCQk9IHR5cGUsCQkJCQlcCiAJLnN5c3RlbQkJCT0gX19zdHJpbmdpZnkoVFJBQ0VfU1lTVEVNKSwJCVwKIAkucmF3X2luaXQJCT0gZnRyYWNlX3Jhd19pbml0X2V2ZW50LAkJXAotCS5zaG93X2Zvcm1hdAkJPSBmdHJhY2VfZm9ybWF0XyMjY2FsbCwJCQlcCisJLnByaW50X2ZtdAkJPSBwcmludCwJCQkJXAogCS5kZWZpbmVfZmllbGRzCQk9IGZ0cmFjZV9kZWZpbmVfZmllbGRzXyMjY2FsbCwJCVwKIH07CQkJCQkJCQkJXAogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKaW5kZXggYjEzNDJjNS4uZTk5OGE4MiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYwpAQCAtMTgsNiArMTgsNyBAQAogCXBpZF90CQlsYXN0X3BpZDsKIAlpbnQJCWRlcHRoOwogCWludAkJaWdub3JlOworCXVuc2lnbmVkIGxvbmcJZW50ZXJfZnVuY3NbRlRSQUNFX1JFVEZVTkNfREVQVEhdOwogfTsKIAogc3RydWN0IGZncmFwaF9kYXRhIHsKQEAgLTIxMiwxMyArMjEzLDExIEBACiAJaW50IGNwdTsKIAlpbnQgcGM7CiAKLQlpZiAodW5saWtlbHkoIXRyKSkKLQkJcmV0dXJuIDA7Ci0KIAlpZiAoIWZ0cmFjZV90cmFjZV90YXNrKGN1cnJlbnQpKQogCQlyZXR1cm4gMDsKIAotCWlmICghZnRyYWNlX2dyYXBoX2FkZHIodHJhY2UtPmZ1bmMpKQorCS8qIHRyYWNlIGl0IHdoZW4gaXQgaXMtbmVzdGVkLWluIG9yIGlzIGEgZnVuY3Rpb24gZW5hYmxlZC4gKi8KKwlpZiAoISh0cmFjZS0+ZGVwdGggfHwgZnRyYWNlX2dyYXBoX2FkZHIodHJhY2UtPmZ1bmMpKSkKIAkJcmV0dXJuIDA7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CkBAIC0yMzEsOSArMjMwLDYgQEAKIAl9IGVsc2UgewogCQlyZXQgPSAwOwogCX0KLQkvKiBPbmx5IGRvIHRoZSBhdG9taWMgaWYgaXQgaXMgbm90IGFscmVhZHkgc2V0ICovCi0JaWYgKCF0ZXN0X3Rza190cmFjZV9ncmFwaChjdXJyZW50KSkKLQkJc2V0X3Rza190cmFjZV9ncmFwaChjdXJyZW50KTsKIAogCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC0yODEsMTcgKzI3NywyNCBAQAogCQlwYyA9IHByZWVtcHRfY291bnQoKTsKIAkJX190cmFjZV9ncmFwaF9yZXR1cm4odHIsIHRyYWNlLCBmbGFncywgcGMpOwogCX0KLQlpZiAoIXRyYWNlLT5kZXB0aCkKLQkJY2xlYXJfdHNrX3RyYWNlX2dyYXBoKGN1cnJlbnQpOwogCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKK3ZvaWQgc2V0X2dyYXBoX2FycmF5KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJZ3JhcGhfYXJyYXkgPSB0cjsKKworCS8qIE1ha2UgZ3JhcGhfYXJyYXkgdmlzaWJsZSBiZWZvcmUgd2Ugc3RhcnQgdHJhY2luZyAqLworCisJc21wX21iKCk7Cit9CisKIHN0YXRpYyBpbnQgZ3JhcGhfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCWludCByZXQ7CiAKLQlncmFwaF9hcnJheSA9IHRyOworCXNldF9ncmFwaF9hcnJheSh0cik7CiAJcmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2dyYXBoKCZ0cmFjZV9ncmFwaF9yZXR1cm4sCiAJCQkJICAgICZ0cmFjZV9ncmFwaF9lbnRyeSk7CiAJaWYgKHJldCkKQEAgLTMwMSwxMSArMzA0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBzZXRfZ3JhcGhfYXJyYXkoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQlncmFwaF9hcnJheSA9IHRyOwotfQotCiBzdGF0aWMgdm9pZCBncmFwaF90cmFjZV9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCXRyYWNpbmdfc3RvcF9jbWRsaW5lX3JlY29yZCgpOwpAQCAtNjczLDE1ICs2NzEsMjEgQEAKIAlkdXJhdGlvbiA9IGdyYXBoX3JldC0+cmV0dGltZSAtIGdyYXBoX3JldC0+Y2FsbHRpbWU7CiAKIAlpZiAoZGF0YSkgeworCQlzdHJ1Y3QgZmdyYXBoX2NwdV9kYXRhICpjcHVfZGF0YTsKIAkJaW50IGNwdSA9IGl0ZXItPmNwdTsKLQkJaW50ICpkZXB0aCA9ICYocGVyX2NwdV9wdHIoZGF0YS0+Y3B1X2RhdGEsIGNwdSktPmRlcHRoKTsKKworCQljcHVfZGF0YSA9IHBlcl9jcHVfcHRyKGRhdGEtPmNwdV9kYXRhLCBjcHUpOwogCiAJCS8qCiAJCSAqIENvbW1lbnRzIGRpc3BsYXkgYXQgKyAxIHRvIGRlcHRoLiBTaW5jZQogCQkgKiB0aGlzIGlzIGEgbGVhZiBmdW5jdGlvbiwga2VlcCB0aGUgY29tbWVudHMKIAkJICogZXF1YWwgdG8gdGhpcyBkZXB0aC4KIAkJICovCi0JCSpkZXB0aCA9IGNhbGwtPmRlcHRoIC0gMTsKKwkJY3B1X2RhdGEtPmRlcHRoID0gY2FsbC0+ZGVwdGggLSAxOworCisJCS8qIE5vIG5lZWQgdG8ga2VlcCB0aGlzIGZ1bmN0aW9uIGFyb3VuZCBmb3IgdGhpcyBkZXB0aCAqLworCQlpZiAoY2FsbC0+ZGVwdGggPCBGVFJBQ0VfUkVURlVOQ19ERVBUSCkKKwkJCWNwdV9kYXRhLT5lbnRlcl9mdW5jc1tjYWxsLT5kZXB0aF0gPSAwOwogCX0KIAogCS8qIE92ZXJoZWFkICovCkBAIC03MjEsMTAgKzcyNSwxNSBAQAogCWludCBpOwogCiAJaWYgKGRhdGEpIHsKKwkJc3RydWN0IGZncmFwaF9jcHVfZGF0YSAqY3B1X2RhdGE7CiAJCWludCBjcHUgPSBpdGVyLT5jcHU7Ci0JCWludCAqZGVwdGggPSAmKHBlcl9jcHVfcHRyKGRhdGEtPmNwdV9kYXRhLCBjcHUpLT5kZXB0aCk7CiAKLQkJKmRlcHRoID0gY2FsbC0+ZGVwdGg7CisJCWNwdV9kYXRhID0gcGVyX2NwdV9wdHIoZGF0YS0+Y3B1X2RhdGEsIGNwdSk7CisJCWNwdV9kYXRhLT5kZXB0aCA9IGNhbGwtPmRlcHRoOworCisJCS8qIFNhdmUgdGhpcyBmdW5jdGlvbiBwb2ludGVyIHRvIHNlZSBpZiB0aGUgZXhpdCBtYXRjaGVzICovCisJCWlmIChjYWxsLT5kZXB0aCA8IEZUUkFDRV9SRVRGVU5DX0RFUFRIKQorCQkJY3B1X2RhdGEtPmVudGVyX2Z1bmNzW2NhbGwtPmRlcHRoXSA9IGNhbGwtPmZ1bmM7CiAJfQogCiAJLyogTm8gb3ZlcmhlYWQgKi8KQEAgLTg1NCwxOSArODYzLDI4IEBACiAJc3RydWN0IGZncmFwaF9kYXRhICpkYXRhID0gaXRlci0+cHJpdmF0ZTsKIAlwaWRfdCBwaWQgPSBlbnQtPnBpZDsKIAlpbnQgY3B1ID0gaXRlci0+Y3B1OworCWludCBmdW5jX21hdGNoID0gMTsKIAlpbnQgcmV0OwogCWludCBpOwogCiAJaWYgKGRhdGEpIHsKKwkJc3RydWN0IGZncmFwaF9jcHVfZGF0YSAqY3B1X2RhdGE7CiAJCWludCBjcHUgPSBpdGVyLT5jcHU7Ci0JCWludCAqZGVwdGggPSAmKHBlcl9jcHVfcHRyKGRhdGEtPmNwdV9kYXRhLCBjcHUpLT5kZXB0aCk7CisKKwkJY3B1X2RhdGEgPSBwZXJfY3B1X3B0cihkYXRhLT5jcHVfZGF0YSwgY3B1KTsKIAogCQkvKgogCQkgKiBDb21tZW50cyBkaXNwbGF5IGF0ICsgMSB0byBkZXB0aC4gVGhpcyBpcyB0aGUKIAkJICogcmV0dXJuIGZyb20gYSBmdW5jdGlvbiwgd2Ugbm93IHdhbnQgdGhlIGNvbW1lbnRzCiAJCSAqIHRvIGRpc3BsYXkgYXQgdGhlIHNhbWUgbGV2ZWwgb2YgdGhlIGJyYWNrZXQuCiAJCSAqLwotCQkqZGVwdGggPSB0cmFjZS0+ZGVwdGggLSAxOworCQljcHVfZGF0YS0+ZGVwdGggPSB0cmFjZS0+ZGVwdGggLSAxOworCisJCWlmICh0cmFjZS0+ZGVwdGggPCBGVFJBQ0VfUkVURlVOQ19ERVBUSCkgeworCQkJaWYgKGNwdV9kYXRhLT5lbnRlcl9mdW5jc1t0cmFjZS0+ZGVwdGhdICE9IHRyYWNlLT5mdW5jKQorCQkJCWZ1bmNfbWF0Y2ggPSAwOworCQkJY3B1X2RhdGEtPmVudGVyX2Z1bmNzW3RyYWNlLT5kZXB0aF0gPSAwOworCQl9CiAJfQogCiAJaWYgKHByaW50X2dyYXBoX3Byb2xvZ3VlKGl0ZXIsIHMsIDAsIDApKQpAQCAtODkxLDkgKzkwOSwyMSBAQAogCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCX0KIAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIn1cbiIpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJLyoKKwkgKiBJZiB0aGUgcmV0dXJuIGZ1bmN0aW9uIGRvZXMgbm90IGhhdmUgYSBtYXRjaGluZyBlbnRyeSwKKwkgKiB0aGVuIHRoZSBlbnRyeSB3YXMgbG9zdC4gSW5zdGVhZCBvZiBqdXN0IHByaW50aW5nCisJICogdGhlICd9JyBhbmQgbGV0dGluZyB0aGUgdXNlciBndWVzcyB3aGF0IGZ1bmN0aW9uIHRoaXMKKwkgKiBiZWxvbmdzIHRvLCB3cml0ZSBvdXQgdGhlIGZ1bmN0aW9uIG5hbWUuCisJICovCisJaWYgKGZ1bmNfbWF0Y2gpIHsKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAifVxuIik7CisJCWlmICghcmV0KQorCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCX0gZWxzZSB7CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIn0gKCVwcylcbiIsICh2b2lkICopdHJhY2UtPmZ1bmMpOworCQlpZiAoIXJldCkKKwkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwl9CiAKIAkvKiBPdmVycnVuICovCiAJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9PVkVSUlVOKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKaW5kZXggNTBiMWI4Mi4uNTA1YzkyMiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYwpAQCAtOTEsMTEgKzkxLDYgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgX19rcHJvYmVzIHVuc2lnbmVkIGxvbmcgZmV0Y2hfYXJndW1lbnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKm51bSkKLXsKLQlyZXR1cm4gcmVnc19nZXRfYXJndW1lbnRfbnRoKHJlZ3MsICh1bnNpZ25lZCBpbnQpKCh1bnNpZ25lZCBsb25nKW51bSkpOwotfQotCiBzdGF0aWMgX19rcHJvYmVzIHVuc2lnbmVkIGxvbmcgZmV0Y2hfcmV0dmFsdWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkJCSAgICAgIHZvaWQgKmR1bW15KQogewpAQCAtMjMxLDkgKzIyNiw3IEBACiB7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKLQlpZiAoZmYtPmZ1bmMgPT0gZmV0Y2hfYXJndW1lbnQpCi0JCXJldCA9IHNucHJpbnRmKGJ1ZiwgbiwgIiRhcmclbHUiLCAodW5zaWduZWQgbG9uZylmZi0+ZGF0YSk7Ci0JZWxzZSBpZiAoZmYtPmZ1bmMgPT0gZmV0Y2hfcmVnaXN0ZXIpIHsKKwlpZiAoZmYtPmZ1bmMgPT0gZmV0Y2hfcmVnaXN0ZXIpIHsKIAkJY29uc3QgY2hhciAqbmFtZTsKIAkJbmFtZSA9IHJlZ3NfcXVlcnlfcmVnaXN0ZXJfbmFtZSgodW5zaWduZWQgaW50KSgobG9uZylmZi0+ZGF0YSkpOwogCQlyZXQgPSBzbnByaW50ZihidWYsIG4sICIlJSVzIiwgbmFtZSk7CkBAIC00ODksMTQgKzQ4Miw2IEBACiAJCQl9CiAJCX0gZWxzZQogCQkJcmV0ID0gLUVJTlZBTDsKLQl9IGVsc2UgaWYgKHN0cm5jbXAoYXJnLCAiYXJnIiwgMykgPT0gMCAmJiBpc2RpZ2l0KGFyZ1szXSkpIHsKLQkJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYXJnICsgMywgMTAsICZwYXJhbSk7Ci0JCWlmIChyZXQgfHwgcGFyYW0gPiBQQVJBTV9NQVhfQVJHUykKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCWVsc2UgewotCQkJZmYtPmZ1bmMgPSBmZXRjaF9hcmd1bWVudDsKLQkJCWZmLT5kYXRhID0gKHZvaWQgKilwYXJhbTsKLQkJfQogCX0gZWxzZQogCQlyZXQgPSAtRUlOVkFMOwogCXJldHVybiByZXQ7CkBAIC02MTEsNyArNTk2LDYgQEAKIAkgKiAgLSBBZGQga3Byb2JlOiBwWzpbR1JQL11FVkVOVF0gS1NZTVsrT0ZGU118S0FERFIgW0ZFVENIQVJHU10KIAkgKiAgLSBBZGQga3JldHByb2JlOiByWzpbR1JQL11FVkVOVF0gS1NZTVsrMF0gW0ZFVENIQVJHU10KIAkgKiBGZXRjaCBhcmdzOgotCSAqICAkYXJnTgk6IGZldGNoIE50aCBvZiBmdW5jdGlvbiBhcmd1bWVudC4gKE46MC0pCiAJICogICRyZXR2YWwJOiBmZXRjaCByZXR1cm4gdmFsdWUKIAkgKiAgJHN0YWNrCTogZmV0Y2ggc3RhY2sgYWRkcmVzcwogCSAqICAkc3RhY2tOCTogZmV0Y2ggTnRoIG9mIHN0YWNrIChOOjAtKQpAQCAtNjUxLDEyICs2MzUsMTIgQEAKIAkJCWV2ZW50ID0gc3RyY2hyKGdyb3VwLCAnLycpICsgMTsKIAkJCWV2ZW50Wy0xXSA9ICdcMCc7CiAJCQlpZiAoc3RybGVuKGdyb3VwKSA9PSAwKSB7Ci0JCQkJcHJfaW5mbygiR3JvdXAgbmFtZSBpcyBub3Qgc3BlY2lmaWxlZFxuIik7CisJCQkJcHJfaW5mbygiR3JvdXAgbmFtZSBpcyBub3Qgc3BlY2lmaWVkXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJfQogCQlpZiAoc3RybGVuKGV2ZW50KSA9PSAwKSB7Ci0JCQlwcl9pbmZvKCJFdmVudCBuYW1lIGlzIG5vdCBzcGVjaWZpbGVkXG4iKTsKKwkJCXByX2luZm8oIkV2ZW50IG5hbWUgaXMgbm90IHNwZWNpZmllZFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTk1OCw3ICs5NDIsNyBAQAogfTsKIAogLyogS3Byb2JlIGhhbmRsZXIgKi8KLXN0YXRpYyBfX2twcm9iZXMgaW50IGtwcm9iZV90cmFjZV9mdW5jKHN0cnVjdCBrcHJvYmUgKmtwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBfX2twcm9iZXMgdm9pZCBrcHJvYmVfdHJhY2VfZnVuYyhzdHJ1Y3Qga3Byb2JlICprcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHRyYWNlX3Byb2JlICp0cCA9IGNvbnRhaW5lcl9vZihrcCwgc3RydWN0IHRyYWNlX3Byb2JlLCBycC5rcCk7CiAJc3RydWN0IGtwcm9iZV90cmFjZV9lbnRyeSAqZW50cnk7CkBAIC05NzgsNyArOTYyLDcgQEAKIAlldmVudCA9IHRyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgmYnVmZmVyLCBjYWxsLT5pZCwgc2l6ZSwKIAkJCQkJCSAgaXJxX2ZsYWdzLCBwYyk7CiAJaWYgKCFldmVudCkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAogCWVudHJ5ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CiAJZW50cnktPm5hcmdzID0gdHAtPm5yX2FyZ3M7CkBAIC05ODgsMTEgKzk3MiwxMCBAQAogCiAJaWYgKCFmaWx0ZXJfY3VycmVudF9jaGVja19kaXNjYXJkKGJ1ZmZlciwgY2FsbCwgZW50cnksIGV2ZW50KSkKIAkJdHJhY2Vfbm93YWtlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncywgcGMpOwotCXJldHVybiAwOwogfQogCiAvKiBLcmV0cHJvYmUgaGFuZGxlciAqLwotc3RhdGljIF9fa3Byb2JlcyBpbnQga3JldHByb2JlX3RyYWNlX2Z1bmMoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCitzdGF0aWMgX19rcHJvYmVzIHZvaWQga3JldHByb2JlX3RyYWNlX2Z1bmMoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCiAJCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHRyYWNlX3Byb2JlICp0cCA9IGNvbnRhaW5lcl9vZihyaS0+cnAsIHN0cnVjdCB0cmFjZV9wcm9iZSwgcnApOwpAQCAtMTAxMSw3ICs5OTQsNyBAQAogCWV2ZW50ID0gdHJhY2VfY3VycmVudF9idWZmZXJfbG9ja19yZXNlcnZlKCZidWZmZXIsIGNhbGwtPmlkLCBzaXplLAogCQkJCQkJICBpcnFfZmxhZ3MsIHBjKTsKIAlpZiAoIWV2ZW50KQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJZW50cnkgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKIAllbnRyeS0+bmFyZ3MgPSB0cC0+bnJfYXJnczsKQEAgLTEwMjIsOCArMTAwNSw2IEBACiAKIAlpZiAoIWZpbHRlcl9jdXJyZW50X2NoZWNrX2Rpc2NhcmQoYnVmZmVyLCBjYWxsLCBlbnRyeSwgZXZlbnQpKQogCQl0cmFjZV9ub3dha2VfYnVmZmVyX3VubG9ja19jb21taXQoYnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzLCBwYyk7Ci0KLQlyZXR1cm4gMDsKIH0KIAogLyogRXZlbnQgZW50cnkgcHJpbnRlcnMgKi8KQEAgLTExNzQsMjEzICsxMTU1LDEyMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fcHJvYmVfZXZlbnRfc2hvd19mb3JtYXQoc3RydWN0IHRyYWNlX3NlcSAqcywKLQkJCQkgICAgIHN0cnVjdCB0cmFjZV9wcm9iZSAqdHAsIGNvbnN0IGNoYXIgKmZtdCwKLQkJCQkgICAgIGNvbnN0IGNoYXIgKmFyZykKK3N0YXRpYyBpbnQgX19zZXRfcHJpbnRfZm10KHN0cnVjdCB0cmFjZV9wcm9iZSAqdHAsIGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgaTsKKwlpbnQgcG9zID0gMDsKIAotCS8qIFNob3cgZm9ybWF0ICovCi0JaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICJcbnByaW50IGZtdDogXCIlcyIsIGZtdCkpCi0JCXJldHVybiAwOworCWNvbnN0IGNoYXIgKmZtdCwgKmFyZzsKIAotCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQotCQlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIiAlcz0lJWx4IiwgdHAtPmFyZ3NbaV0ubmFtZSkpCi0JCQlyZXR1cm4gMDsKKwlpZiAoIXByb2JlX2lzX3JldHVybih0cCkpIHsKKwkJZm10ID0gIiglbHgpIjsKKwkJYXJnID0gIlJFQy0+IiBGSUVMRF9TVFJJTkdfSVA7CisJfSBlbHNlIHsKKwkJZm10ID0gIiglbHggPC0gJWx4KSI7CisJCWFyZyA9ICJSRUMtPiIgRklFTERfU1RSSU5HX0ZVTkMgIiwgUkVDLT4iIEZJRUxEX1NUUklOR19SRVRJUDsKKwl9CiAKLQlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIlwiLCAlcyIsIGFyZykpCi0JCXJldHVybiAwOworCS8qIFdoZW4gbGVuPTAsIHdlIGp1c3QgY2FsY3VsYXRlIHRoZSBuZWVkZWQgbGVuZ3RoICovCisjZGVmaW5lIExFTl9PUl9aRVJPIChsZW4gPyBsZW4gLSBwb3MgOiAwKQogCi0JZm9yIChpID0gMDsgaSA8IHRwLT5ucl9hcmdzOyBpKyspCi0JCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiLCBSRUMtPiVzIiwgdHAtPmFyZ3NbaV0ubmFtZSkpCi0JCQlyZXR1cm4gMDsKKwlwb3MgKz0gc25wcmludGYoYnVmICsgcG9zLCBMRU5fT1JfWkVSTywgIlwiJXMiLCBmbXQpOwogCi0JcmV0dXJuIHRyYWNlX3NlcV9wdXRzKHMsICJcbiIpOworCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKSB7CisJCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLCAiICVzPSUlbHgiLAorCQkJCXRwLT5hcmdzW2ldLm5hbWUpOworCX0KKworCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLCAiXCIsICVzIiwgYXJnKTsKKworCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKSB7CisJCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLCAiLCBSRUMtPiVzIiwKKwkJCQl0cC0+YXJnc1tpXS5uYW1lKTsKKwl9CisKKyN1bmRlZiBMRU5fT1JfWkVSTworCisJLyogcmV0dXJuIHRoZSBsZW5ndGggb2YgcHJpbnRfZm10ICovCisJcmV0dXJuIHBvczsKIH0KIAotI3VuZGVmIFNIT1dfRklFTEQKLSNkZWZpbmUgU0hPV19GSUVMRCh0eXBlLCBpdGVtLCBuYW1lKQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDoiICN0eXBlICIgJXM7XHQiCVwKLQkJCQkib2Zmc2V0OiV1O1x0c2l6ZToldTtcdHNpZ25lZDolZDtcbiIsIG5hbWUsXAotCQkJCSh1bnNpZ25lZCBpbnQpb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksXAotCQkJCSh1bnNpZ25lZCBpbnQpc2l6ZW9mKHR5cGUpLAkJXAotCQkJCWlzX3NpZ25lZF90eXBlKHR5cGUpKTsJCQlcCi0JCWlmICghcmV0KQkJCQkJCVwKLQkJCXJldHVybiAwOwkJCQkJXAotCX0gd2hpbGUgKDApCi0KLXN0YXRpYyBpbnQga3Byb2JlX2V2ZW50X3Nob3dfZm9ybWF0KHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKLQkJCQkgICAgc3RydWN0IHRyYWNlX3NlcSAqcykKK3N0YXRpYyBpbnQgc2V0X3ByaW50X2ZtdChzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwKQogewotCXN0cnVjdCBrcHJvYmVfdHJhY2VfZW50cnkgZmllbGQgX19hdHRyaWJ1dGVfXygodW51c2VkKSk7Ci0JaW50IHJldCwgaTsKLQlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gKHN0cnVjdCB0cmFjZV9wcm9iZSAqKWNhbGwtPmRhdGE7CisJaW50IGxlbjsKKwljaGFyICpwcmludF9mbXQ7CiAKLQlTSE9XX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGlwLCBGSUVMRF9TVFJJTkdfSVApOwotCVNIT1dfRklFTEQoaW50LCBuYXJncywgRklFTERfU1RSSU5HX05BUkdTKTsKKwkvKiBGaXJzdDogY2FsbGVkIHdpdGggMCBsZW5ndGggdG8gY2FsY3VsYXRlIHRoZSBuZWVkZWQgbGVuZ3RoICovCisJbGVuID0gX19zZXRfcHJpbnRfZm10KHRwLCBOVUxMLCAwKTsKKwlwcmludF9mbXQgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOworCWlmICghcHJpbnRfZm10KQorCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qIFNob3cgZmllbGRzICovCi0JZm9yIChpID0gMDsgaSA8IHRwLT5ucl9hcmdzOyBpKyspCi0JCVNIT1dfRklFTEQodW5zaWduZWQgbG9uZywgYXJnc1tpXSwgdHAtPmFyZ3NbaV0ubmFtZSk7Ci0JdHJhY2Vfc2VxX3B1dHMocywgIlxuIik7CisJLyogU2Vjb25kOiBhY3R1YWxseSB3cml0ZSB0aGUgQHByaW50X2ZtdCAqLworCV9fc2V0X3ByaW50X2ZtdCh0cCwgcHJpbnRfZm10LCBsZW4gKyAxKTsKKwl0cC0+Y2FsbC5wcmludF9mbXQgPSBwcmludF9mbXQ7CiAKLQlyZXR1cm4gX19wcm9iZV9ldmVudF9zaG93X2Zvcm1hdChzLCB0cCwgIiglbHgpIiwKLQkJCQkJICJSRUMtPiIgRklFTERfU1RSSU5HX0lQKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBrcmV0cHJvYmVfZXZlbnRfc2hvd19mb3JtYXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLAotCQkJCSAgICAgICBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQotewotCXN0cnVjdCBrcmV0cHJvYmVfdHJhY2VfZW50cnkgZmllbGQgX19hdHRyaWJ1dGVfXygodW51c2VkKSk7Ci0JaW50IHJldCwgaTsKLQlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gKHN0cnVjdCB0cmFjZV9wcm9iZSAqKWNhbGwtPmRhdGE7Ci0KLQlTSE9XX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGZ1bmMsIEZJRUxEX1NUUklOR19GVU5DKTsKLQlTSE9XX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIHJldF9pcCwgRklFTERfU1RSSU5HX1JFVElQKTsKLQlTSE9XX0ZJRUxEKGludCwgbmFyZ3MsIEZJRUxEX1NUUklOR19OQVJHUyk7Ci0KLQkvKiBTaG93IGZpZWxkcyAqLwotCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQotCQlTSE9XX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGFyZ3NbaV0sIHRwLT5hcmdzW2ldLm5hbWUpOwotCXRyYWNlX3NlcV9wdXRzKHMsICJcbiIpOwotCi0JcmV0dXJuIF9fcHJvYmVfZXZlbnRfc2hvd19mb3JtYXQocywgdHAsICIoJWx4IDwtICVseCkiLAotCQkJCQkgIlJFQy0+IiBGSUVMRF9TVFJJTkdfRlVOQwotCQkJCQkgIiwgUkVDLT4iIEZJRUxEX1NUUklOR19SRVRJUCk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCiAvKiBLcHJvYmUgcHJvZmlsZSBoYW5kbGVyICovCi1zdGF0aWMgX19rcHJvYmVzIGludCBrcHJvYmVfcHJvZmlsZV9mdW5jKHN0cnVjdCBrcHJvYmUgKmtwLAorc3RhdGljIF9fa3Byb2JlcyB2b2lkIGtwcm9iZV9wcm9maWxlX2Z1bmMoc3RydWN0IGtwcm9iZSAqa3AsCiAJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gY29udGFpbmVyX29mKGtwLCBzdHJ1Y3QgdHJhY2VfcHJvYmUsIHJwLmtwKTsKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmdHAtPmNhbGw7CiAJc3RydWN0IGtwcm9iZV90cmFjZV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnQ7Ci0JaW50IHNpemUsIF9fc2l6ZSwgaSwgcGMsIF9fY3B1OworCWludCBzaXplLCBfX3NpemUsIGk7CiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Ci0JY2hhciAqdHJhY2VfYnVmOwotCWNoYXIgKnJhd19kYXRhOwogCWludCByY3R4OwogCi0JcGMgPSBwcmVlbXB0X2NvdW50KCk7CiAJX19zaXplID0gU0laRU9GX0tQUk9CRV9UUkFDRV9FTlRSWSh0cC0+bnJfYXJncyk7CiAJc2l6ZSA9IEFMSUdOKF9fc2l6ZSArIHNpemVvZih1MzIpLCBzaXplb2YodTY0KSk7CiAJc2l6ZSAtPSBzaXplb2YodTMyKTsKIAlpZiAoV0FSTl9PTkNFKHNpemUgPiBGVFJBQ0VfTUFYX1BST0ZJTEVfU0laRSwKIAkJICAgICAicHJvZmlsZSBidWZmZXIgbm90IGxhcmdlIGVub3VnaCIpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCi0JLyoKLQkgKiBQcm90ZWN0IHRoZSBub24gbm1pIGJ1ZmZlcgotCSAqIFRoaXMgYWxzbyBwcm90ZWN0cyB0aGUgcmN1IHJlYWQgc2lkZQotCSAqLwotCWxvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7CisJZW50cnkgPSBmdHJhY2VfcGVyZl9idWZfcHJlcGFyZShzaXplLCBjYWxsLT5pZCwgJnJjdHgsICZpcnFfZmxhZ3MpOworCWlmICghZW50cnkpCisJCXJldHVybjsKIAotCXJjdHggPSBwZXJmX3N3ZXZlbnRfZ2V0X3JlY3Vyc2lvbl9jb250ZXh0KCk7Ci0JaWYgKHJjdHggPCAwKQotCQlnb3RvIGVuZF9yZWN1cnNpb247Ci0KLQlfX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWlmIChpbl9ubWkoKSkKLQkJdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmX25taSk7Ci0JZWxzZQotCQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWYpOwotCi0JaWYgKCF0cmFjZV9idWYpCi0JCWdvdG8gZW5kOwotCi0JcmF3X2RhdGEgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIF9fY3B1KTsKLQotCS8qIFplcm8gZGVhZCBieXRlcyBmcm9tIGFsaWdubWVudCB0byBhdm9pZCBidWZmZXIgbGVhayB0byB1c2Vyc3BhY2UgKi8KLQkqKHU2NCAqKSgmcmF3X2RhdGFbc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOwotCWVudHJ5ID0gKHN0cnVjdCBrcHJvYmVfdHJhY2VfZW50cnkgKilyYXdfZGF0YTsKLQllbnQgPSAmZW50cnktPmVudDsKLQotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoZW50LCBpcnFfZmxhZ3MsIHBjKTsKLQllbnQtPnR5cGUgPSBjYWxsLT5pZDsKIAllbnRyeS0+bmFyZ3MgPSB0cC0+bnJfYXJnczsKIAllbnRyeS0+aXAgPSAodW5zaWduZWQgbG9uZylrcC0+YWRkcjsKIAlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKIAkJZW50cnktPmFyZ3NbaV0gPSBjYWxsX2ZldGNoKCZ0cC0+YXJnc1tpXS5mZXRjaCwgcmVncyk7Ci0JcGVyZl90cF9ldmVudChjYWxsLT5pZCwgZW50cnktPmlwLCAxLCBlbnRyeSwgc2l6ZSk7CiAKLWVuZDoKLQlwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KHJjdHgpOwotZW5kX3JlY3Vyc2lvbjoKLQlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOwotCi0JcmV0dXJuIDA7CisJZnRyYWNlX3BlcmZfYnVmX3N1Ym1pdChlbnRyeSwgc2l6ZSwgcmN0eCwgZW50cnktPmlwLCAxLCBpcnFfZmxhZ3MpOwogfQogCiAvKiBLcmV0cHJvYmUgcHJvZmlsZSBoYW5kbGVyICovCi1zdGF0aWMgX19rcHJvYmVzIGludCBrcmV0cHJvYmVfcHJvZmlsZV9mdW5jKHN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpLAorc3RhdGljIF9fa3Byb2JlcyB2b2lkIGtyZXRwcm9iZV9wcm9maWxlX2Z1bmMoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCiAJCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwID0gY29udGFpbmVyX29mKHJpLT5ycCwgc3RydWN0IHRyYWNlX3Byb2JlLCBycCk7CiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJnRwLT5jYWxsOwogCXN0cnVjdCBrcmV0cHJvYmVfdHJhY2VfZW50cnkgKmVudHJ5OwotCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50OwotCWludCBzaXplLCBfX3NpemUsIGksIHBjLCBfX2NwdTsKKwlpbnQgc2l6ZSwgX19zaXplLCBpOwogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwotCWNoYXIgKnRyYWNlX2J1ZjsKLQljaGFyICpyYXdfZGF0YTsKIAlpbnQgcmN0eDsKIAotCXBjID0gcHJlZW1wdF9jb3VudCgpOwogCV9fc2l6ZSA9IFNJWkVPRl9LUkVUUFJPQkVfVFJBQ0VfRU5UUlkodHAtPm5yX2FyZ3MpOwogCXNpemUgPSBBTElHTihfX3NpemUgKyBzaXplb2YodTMyKSwgc2l6ZW9mKHU2NCkpOwogCXNpemUgLT0gc2l6ZW9mKHUzMik7CiAJaWYgKFdBUk5fT05DRShzaXplID4gRlRSQUNFX01BWF9QUk9GSUxFX1NJWkUsCiAJCSAgICAgInByb2ZpbGUgYnVmZmVyIG5vdCBsYXJnZSBlbm91Z2giKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAotCS8qCi0JICogUHJvdGVjdCB0aGUgbm9uIG5taSBidWZmZXIKLQkgKiBUaGlzIGFsc28gcHJvdGVjdHMgdGhlIHJjdSByZWFkIHNpZGUKLQkgKi8KLQlsb2NhbF9pcnFfc2F2ZShpcnFfZmxhZ3MpOworCWVudHJ5ID0gZnRyYWNlX3BlcmZfYnVmX3ByZXBhcmUoc2l6ZSwgY2FsbC0+aWQsICZyY3R4LCAmaXJxX2ZsYWdzKTsKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm47CiAKLQlyY3R4ID0gcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCgpOwotCWlmIChyY3R4IDwgMCkKLQkJZ290byBlbmRfcmVjdXJzaW9uOwotCi0JX19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlpZiAoaW5fbm1pKCkpCi0JCXRyYWNlX2J1ZiA9IHJjdV9kZXJlZmVyZW5jZShwZXJmX3RyYWNlX2J1Zl9ubWkpOwotCWVsc2UKLQkJdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmKTsKLQotCWlmICghdHJhY2VfYnVmKQotCQlnb3RvIGVuZDsKLQotCXJhd19kYXRhID0gcGVyX2NwdV9wdHIodHJhY2VfYnVmLCBfX2NwdSk7Ci0KLQkvKiBaZXJvIGRlYWQgYnl0ZXMgZnJvbSBhbGlnbm1lbnQgdG8gYXZvaWQgYnVmZmVyIGxlYWsgdG8gdXNlcnNwYWNlICovCi0JKih1NjQgKikoJnJhd19kYXRhW3NpemUgLSBzaXplb2YodTY0KV0pID0gMFVMTDsKLQllbnRyeSA9IChzdHJ1Y3Qga3JldHByb2JlX3RyYWNlX2VudHJ5ICopcmF3X2RhdGE7Ci0JZW50ID0gJmVudHJ5LT5lbnQ7Ci0KLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKGVudCwgaXJxX2ZsYWdzLCBwYyk7Ci0JZW50LT50eXBlID0gY2FsbC0+aWQ7CiAJZW50cnktPm5hcmdzID0gdHAtPm5yX2FyZ3M7CiAJZW50cnktPmZ1bmMgPSAodW5zaWduZWQgbG9uZyl0cC0+cnAua3AuYWRkcjsKIAllbnRyeS0+cmV0X2lwID0gKHVuc2lnbmVkIGxvbmcpcmktPnJldF9hZGRyOwogCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQogCQllbnRyeS0+YXJnc1tpXSA9IGNhbGxfZmV0Y2goJnRwLT5hcmdzW2ldLmZldGNoLCByZWdzKTsKLQlwZXJmX3RwX2V2ZW50KGNhbGwtPmlkLCBlbnRyeS0+cmV0X2lwLCAxLCBlbnRyeSwgc2l6ZSk7CiAKLWVuZDoKLQlwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KHJjdHgpOwotZW5kX3JlY3Vyc2lvbjoKLQlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOwotCi0JcmV0dXJuIDA7CisJZnRyYWNlX3BlcmZfYnVmX3N1Ym1pdChlbnRyeSwgc2l6ZSwgcmN0eCwgZW50cnktPnJldF9pcCwgMSwgaXJxX2ZsYWdzKTsKIH0KIAogc3RhdGljIGludCBwcm9iZV9wcm9maWxlX2VuYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCkBAIC0xNDA4LDcgKzEyOTksNyBAQAogCQkJZGlzYWJsZV9rcHJvYmUoJnRwLT5ycC5rcCk7CiAJfQogfQotI2VuZGlmCS8qIENPTkZJR19FVkVOVF9QUk9GSUxFICovCisjZW5kaWYJLyogQ09ORklHX1BFUkZfRVZFTlRTICovCiAKIAogc3RhdGljIF9fa3Byb2JlcwpAQCAtMTQxOCwxMCArMTMwOSwxMCBAQAogCiAJaWYgKHRwLT5mbGFncyAmIFRQX0ZMQUdfVFJBQ0UpCiAJCWtwcm9iZV90cmFjZV9mdW5jKGtwLCByZWdzKTsKLSNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogCWlmICh0cC0+ZmxhZ3MgJiBUUF9GTEFHX1BST0ZJTEUpCiAJCWtwcm9iZV9wcm9maWxlX2Z1bmMoa3AsIHJlZ3MpOwotI2VuZGlmCS8qIENPTkZJR19FVkVOVF9QUk9GSUxFICovCisjZW5kaWYKIAlyZXR1cm4gMDsJLyogV2UgZG9uJ3QgdHdlZWsga2VybmVsLCBzbyBqdXN0IHJldHVybiAwICovCiB9CiAKQEAgLTE0MzIsMTAgKzEzMjMsMTAgQEAKIAogCWlmICh0cC0+ZmxhZ3MgJiBUUF9GTEFHX1RSQUNFKQogCQlrcmV0cHJvYmVfdHJhY2VfZnVuYyhyaSwgcmVncyk7Ci0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAlpZiAodHAtPmZsYWdzICYgVFBfRkxBR19QUk9GSUxFKQogCQlrcmV0cHJvYmVfcHJvZmlsZV9mdW5jKHJpLCByZWdzKTsKLSNlbmRpZgkvKiBDT05GSUdfRVZFTlRfUFJPRklMRSAqLworI2VuZGlmCiAJcmV0dXJuIDA7CS8qIFdlIGRvbid0IHR3ZWVrIGtlcm5lbCwgc28ganVzdCByZXR1cm4gMCAqLwogfQogCkBAIC0xNDQ4LDIzICsxMzM5LDI1IEBACiAJaWYgKHByb2JlX2lzX3JldHVybih0cCkpIHsKIAkJdHAtPmV2ZW50LnRyYWNlID0gcHJpbnRfa3JldHByb2JlX2V2ZW50OwogCQljYWxsLT5yYXdfaW5pdCA9IHByb2JlX2V2ZW50X3Jhd19pbml0OwotCQljYWxsLT5zaG93X2Zvcm1hdCA9IGtyZXRwcm9iZV9ldmVudF9zaG93X2Zvcm1hdDsKIAkJY2FsbC0+ZGVmaW5lX2ZpZWxkcyA9IGtyZXRwcm9iZV9ldmVudF9kZWZpbmVfZmllbGRzOwogCX0gZWxzZSB7CiAJCXRwLT5ldmVudC50cmFjZSA9IHByaW50X2twcm9iZV9ldmVudDsKIAkJY2FsbC0+cmF3X2luaXQgPSBwcm9iZV9ldmVudF9yYXdfaW5pdDsKLQkJY2FsbC0+c2hvd19mb3JtYXQgPSBrcHJvYmVfZXZlbnRfc2hvd19mb3JtYXQ7CiAJCWNhbGwtPmRlZmluZV9maWVsZHMgPSBrcHJvYmVfZXZlbnRfZGVmaW5lX2ZpZWxkczsKIAl9CisJaWYgKHNldF9wcmludF9mbXQodHApIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJY2FsbC0+ZXZlbnQgPSAmdHAtPmV2ZW50OwogCWNhbGwtPmlkID0gcmVnaXN0ZXJfZnRyYWNlX2V2ZW50KCZ0cC0+ZXZlbnQpOwotCWlmICghY2FsbC0+aWQpCisJaWYgKCFjYWxsLT5pZCkgeworCQlrZnJlZShjYWxsLT5wcmludF9mbXQpOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAJY2FsbC0+ZW5hYmxlZCA9IDA7CiAJY2FsbC0+cmVnZnVuYyA9IHByb2JlX2V2ZW50X2VuYWJsZTsKIAljYWxsLT51bnJlZ2Z1bmMgPSBwcm9iZV9ldmVudF9kaXNhYmxlOwogCi0jaWZkZWYgQ09ORklHX0VWRU5UX1BST0ZJTEUKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAljYWxsLT5wcm9maWxlX2VuYWJsZSA9IHByb2JlX3Byb2ZpbGVfZW5hYmxlOwogCWNhbGwtPnByb2ZpbGVfZGlzYWJsZSA9IHByb2JlX3Byb2ZpbGVfZGlzYWJsZTsKICNlbmRpZgpAQCAtMTQ3Miw2ICsxMzY1LDcgQEAKIAlyZXQgPSB0cmFjZV9hZGRfZXZlbnRfY2FsbChjYWxsKTsKIAlpZiAocmV0KSB7CiAJCXByX2luZm8oIkZhaWxlZCB0byByZWdpc3RlciBrcHJvYmUgZXZlbnQ6ICVzXG4iLCBjYWxsLT5uYW1lKTsKKwkJa2ZyZWUoY2FsbC0+cHJpbnRfZm10KTsKIAkJdW5yZWdpc3Rlcl9mdHJhY2VfZXZlbnQoJnRwLT5ldmVudCk7CiAJfQogCXJldHVybiByZXQ7CkBAIC0xNDgxLDYgKzEzNzUsNyBAQAogewogCS8qIHRwLT5ldmVudCBpcyB1bnJlZ2lzdGVyZWQgaW4gdHJhY2VfcmVtb3ZlX2V2ZW50X2NhbGwoKSAqLwogCXRyYWNlX3JlbW92ZV9ldmVudF9jYWxsKCZ0cC0+Y2FsbCk7CisJa2ZyZWUodHAtPmNhbGwucHJpbnRfZm10KTsKIH0KIAogLyogTWFrZSBhIGRlYnVnZnMgaW50ZXJmYWNlIGZvciBjb250cm9saW5nIHByb2JlIHBvaW50cyAqLwpAQCAtMTUyMywyOCArMTQxOCw2NyBAQAogCiBzdGF0aWMgX19pbml0IGludCBrcHJvYmVfdHJhY2Vfc2VsZl90ZXN0c19pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCB3YXJuID0gMDsKIAlpbnQgKCp0YXJnZXQpKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpOworCXN0cnVjdCB0cmFjZV9wcm9iZSAqdHA7CiAKIAl0YXJnZXQgPSBrcHJvYmVfdHJhY2Vfc2VsZnRlc3RfdGFyZ2V0OwogCiAJcHJfaW5mbygiVGVzdGluZyBrcHJvYmUgdHJhY2luZzogIik7CiAKIAlyZXQgPSBjb21tYW5kX3RyYWNlX3Byb2JlKCJwOnRlc3Rwcm9iZSBrcHJvYmVfdHJhY2Vfc2VsZnRlc3RfdGFyZ2V0ICIKLQkJCQkgICIkYXJnMSAkYXJnMiAkYXJnMyAkYXJnNCAkc3RhY2sgJHN0YWNrMCIpOwotCWlmIChXQVJOX09OX09OQ0UocmV0KSkKLQkJcHJfd2FybmluZygiZXJyb3IgZW5hYmxpbmcgZnVuY3Rpb24gZW50cnlcbiIpOworCQkJCSAgIiRzdGFjayAkc3RhY2swICswKCRzdGFjaykiKTsKKwlpZiAoV0FSTl9PTl9PTkNFKHJldCkpIHsKKwkJcHJfd2FybmluZygiZXJyb3Igb24gcHJvYmluZyBmdW5jdGlvbiBlbnRyeS5cbiIpOworCQl3YXJuKys7CisJfSBlbHNlIHsKKwkJLyogRW5hYmxlIHRyYWNlIHBvaW50ICovCisJCXRwID0gZmluZF9wcm9iZV9ldmVudCgidGVzdHByb2JlIiwgS1BST0JFX0VWRU5UX1NZU1RFTSk7CisJCWlmIChXQVJOX09OX09OQ0UodHAgPT0gTlVMTCkpIHsKKwkJCXByX3dhcm5pbmcoImVycm9yIG9uIGdldHRpbmcgbmV3IHByb2JlLlxuIik7CisJCQl3YXJuKys7CisJCX0gZWxzZQorCQkJcHJvYmVfZXZlbnRfZW5hYmxlKCZ0cC0+Y2FsbCk7CisJfQogCiAJcmV0ID0gY29tbWFuZF90cmFjZV9wcm9iZSgicjp0ZXN0cHJvYmUyIGtwcm9iZV90cmFjZV9zZWxmdGVzdF90YXJnZXQgIgogCQkJCSAgIiRyZXR2YWwiKTsKLQlpZiAoV0FSTl9PTl9PTkNFKHJldCkpCi0JCXByX3dhcm5pbmcoImVycm9yIGVuYWJsaW5nIGZ1bmN0aW9uIHJldHVyblxuIik7CisJaWYgKFdBUk5fT05fT05DRShyZXQpKSB7CisJCXByX3dhcm5pbmcoImVycm9yIG9uIHByb2JpbmcgZnVuY3Rpb24gcmV0dXJuLlxuIik7CisJCXdhcm4rKzsKKwl9IGVsc2UgeworCQkvKiBFbmFibGUgdHJhY2UgcG9pbnQgKi8KKwkJdHAgPSBmaW5kX3Byb2JlX2V2ZW50KCJ0ZXN0cHJvYmUyIiwgS1BST0JFX0VWRU5UX1NZU1RFTSk7CisJCWlmIChXQVJOX09OX09OQ0UodHAgPT0gTlVMTCkpIHsKKwkJCXByX3dhcm5pbmcoImVycm9yIG9uIGdldHRpbmcgbmV3IHByb2JlLlxuIik7CisJCQl3YXJuKys7CisJCX0gZWxzZQorCQkJcHJvYmVfZXZlbnRfZW5hYmxlKCZ0cC0+Y2FsbCk7CisJfQorCisJaWYgKHdhcm4pCisJCWdvdG8gZW5kOwogCiAJcmV0ID0gdGFyZ2V0KDEsIDIsIDMsIDQsIDUsIDYpOwogCi0JY2xlYW51cF9hbGxfcHJvYmVzKCk7CisJcmV0ID0gY29tbWFuZF90cmFjZV9wcm9iZSgiLTp0ZXN0cHJvYmUiKTsKKwlpZiAoV0FSTl9PTl9PTkNFKHJldCkpIHsKKwkJcHJfd2FybmluZygiZXJyb3Igb24gZGVsZXRpbmcgYSBwcm9iZS5cbiIpOworCQl3YXJuKys7CisJfQogCi0JcHJfY29udCgiT0tcbiIpOworCXJldCA9IGNvbW1hbmRfdHJhY2VfcHJvYmUoIi06dGVzdHByb2JlMiIpOworCWlmIChXQVJOX09OX09OQ0UocmV0KSkgeworCQlwcl93YXJuaW5nKCJlcnJvciBvbiBkZWxldGluZyBhIHByb2JlLlxuIik7CisJCXdhcm4rKzsKKwl9CisKK2VuZDoKKwljbGVhbnVwX2FsbF9wcm9iZXMoKTsKKwlpZiAod2FybikKKwkJcHJfY29udCgiTkc6IFNvbWUgdGVzdHMgYXJlIGZhaWxlZC4gUGxlYXNlIGNoZWNrIHRoZW0uXG4iKTsKKwllbHNlCisJCXByX2NvbnQoIk9LXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwppbmRleCA3NTI4OWYzLi5jYmE0N2Q3IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwpAQCAtMTQzLDcwICsxNDMsNjUgQEAKIAkJI3R5cGUsICNuYW1lLCBvZmZzZXRvZih0eXBlb2YodHJhY2UpLCBuYW1lKSwJCVwKIAkJc2l6ZW9mKHRyYWNlLm5hbWUpLCBpc19zaWduZWRfdHlwZSh0eXBlKQogCi1pbnQgc3lzY2FsbF9lbnRlcl9mb3JtYXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQorc3RhdGljCitpbnQgIF9fc2V0X2VudGVyX3ByaW50X2ZtdChzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqZW50cnksIGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgaTsKLQlpbnQgcmV0OwotCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICplbnRyeSA9IGNhbGwtPmRhdGE7Ci0Jc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIgdHJhY2U7Ci0JaW50IG9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBzeXNjYWxsX3RyYWNlX2VudGVyLCBhcmdzKTsKKwlpbnQgcG9zID0gMDsKIAotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7IgotCQkJICAgICAgICJcdHNpZ25lZDoldTtcbiIsCi0JCQkgICAgICAgU1lTQ0FMTF9GSUVMRChpbnQsIG5yKSk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiAwOworCS8qIFdoZW4gbGVuPTAsIHdlIGp1c3QgY2FsY3VsYXRlIHRoZSBuZWVkZWQgbGVuZ3RoICovCisjZGVmaW5lIExFTl9PUl9aRVJPIChsZW4gPyBsZW4gLSBwb3MgOiAwKQorCisJcG9zICs9IHNucHJpbnRmKGJ1ZiArIHBvcywgTEVOX09SX1pFUk8sICJcIiIpOworCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bmJfYXJnczsgaSsrKSB7CisJCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLCAiJXM6IDB4JSUwJXp1bHglcyIsCisJCQkJZW50cnktPmFyZ3NbaV0sIHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJCQlpID09IGVudHJ5LT5uYl9hcmdzIC0gMSA/ICIiIDogIiwgIik7CisJfQorCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLCAiXCIiKTsKIAogCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bmJfYXJnczsgaSsrKSB7Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6JXMgJXM7IiwgZW50cnktPnR5cGVzW2ldLAotCQkJCSAgICAgICAgZW50cnktPmFyZ3NbaV0pOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiAwOwotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdG9mZnNldDolZDtcdHNpemU6JXp1OyIKLQkJCQkgICAgICAgIlx0c2lnbmVkOiV1O1xuIiwgb2Zmc2V0LAotCQkJCSAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZyksCi0JCQkJICAgICAgIGlzX3NpZ25lZF90eXBlKHVuc2lnbmVkIGxvbmcpKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gMDsKLQkJb2Zmc2V0ICs9IHNpemVvZih1bnNpZ25lZCBsb25nKTsKKwkJcG9zICs9IHNucHJpbnRmKGJ1ZiArIHBvcywgTEVOX09SX1pFUk8sCisJCQkJIiwgKCh1bnNpZ25lZCBsb25nKShSRUMtPiVzKSkiLCBlbnRyeS0+YXJnc1tpXSk7CiAJfQogCi0JdHJhY2Vfc2VxX3B1dHMocywgIlxucHJpbnQgZm10OiBcIiIpOwotCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bmJfYXJnczsgaSsrKSB7Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVzOiAweCUlMCV6dWx4JXMiLCBlbnRyeS0+YXJnc1tpXSwKLQkJCQkgICAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nKSwKLQkJCQkJaSA9PSBlbnRyeS0+bmJfYXJncyAtIDEgPyAiIiA6ICIsICIpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiAwOwotCX0KLQl0cmFjZV9zZXFfcHV0YyhzLCAnIicpOworI3VuZGVmIExFTl9PUl9aRVJPCiAKLQlmb3IgKGkgPSAwOyBpIDwgZW50cnktPm5iX2FyZ3M7IGkrKykgewotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIsICgodW5zaWduZWQgbG9uZykoUkVDLT4lcykpIiwKLQkJCQkgICAgICAgZW50cnktPmFyZ3NbaV0pOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiAwOwotCX0KLQotCXJldHVybiB0cmFjZV9zZXFfcHV0YyhzLCAnXG4nKTsKKwkvKiByZXR1cm4gdGhlIGxlbmd0aCBvZiBwcmludF9mbXQgKi8KKwlyZXR1cm4gcG9zOwogfQogCi1pbnQgc3lzY2FsbF9leGl0X2Zvcm1hdChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIHN0cnVjdCB0cmFjZV9zZXEgKnMpCitzdGF0aWMgaW50IHNldF9zeXNjYWxsX3ByaW50X2ZtdChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCiB7Ci0JaW50IHJldDsKLQlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0IHRyYWNlOworCWNoYXIgKnByaW50X2ZtdDsKKwlpbnQgbGVuOworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICplbnRyeSA9IGNhbGwtPmRhdGE7CiAKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsCi0JCQkgICAgICAgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7IgotCQkJICAgICAgICJcdHNpZ25lZDoldTtcbiIKLQkJCSAgICAgICAiXHRmaWVsZDolcyAlcztcdG9mZnNldDolenU7XHRzaXplOiV6dTsiCi0JCQkgICAgICAgIlx0c2lnbmVkOiV1O1xuIiwKLQkJCSAgICAgICBTWVNDQUxMX0ZJRUxEKGludCwgbnIpLAotCQkJICAgICAgIFNZU0NBTExfRklFTEQobG9uZywgcmV0KSk7Ci0JaWYgKCFyZXQpCisJaWYgKGVudHJ5LT5lbnRlcl9ldmVudCAhPSBjYWxsKSB7CisJCWNhbGwtPnByaW50X2ZtdCA9ICJcIjB4JWx4XCIsIFJFQy0+cmV0IjsKIAkJcmV0dXJuIDA7CisJfQogCi0JcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiBcIjB4JSVseFwiLCBSRUMtPnJldFxuIik7CisJLyogRmlyc3Q6IGNhbGxlZCB3aXRoIDAgbGVuZ3RoIHRvIGNhbGN1bGF0ZSB0aGUgbmVlZGVkIGxlbmd0aCAqLworCWxlbiA9IF9fc2V0X2VudGVyX3ByaW50X2ZtdChlbnRyeSwgTlVMTCwgMCk7CisKKwlwcmludF9mbXQgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOworCWlmICghcHJpbnRfZm10KQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIFNlY29uZDogYWN0dWFsbHkgd3JpdGUgdGhlIEBwcmludF9mbXQgKi8KKwlfX3NldF9lbnRlcl9wcmludF9mbXQoZW50cnksIHByaW50X2ZtdCwgbGVuICsgMSk7CisJY2FsbC0+cHJpbnRfZm10ID0gcHJpbnRfZm10OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfc3lzY2FsbF9wcmludF9mbXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQoreworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICplbnRyeSA9IGNhbGwtPmRhdGE7CisKKwlpZiAoZW50cnktPmVudGVyX2V2ZW50ID09IGNhbGwpCisJCWtmcmVlKGNhbGwtPnByaW50X2ZtdCk7CiB9CiAKIGludCBzeXNjYWxsX2VudGVyX2RlZmluZV9maWVsZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQpAQCAtMzg2LDEyICszODEsMjIgQEAKIHsKIAlpbnQgaWQ7CiAKLQlpZCA9IHJlZ2lzdGVyX2Z0cmFjZV9ldmVudChjYWxsLT5ldmVudCk7Ci0JaWYgKCFpZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JY2FsbC0+aWQgPSBpZDsKLQlJTklUX0xJU1RfSEVBRCgmY2FsbC0+ZmllbGRzKTsKLQlyZXR1cm4gMDsKKwlpZiAoc2V0X3N5c2NhbGxfcHJpbnRfZm10KGNhbGwpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZCA9IHRyYWNlX2V2ZW50X3Jhd19pbml0KGNhbGwpOworCisJaWYgKGlkIDwgMCkgeworCQlmcmVlX3N5c2NhbGxfcHJpbnRfZm10KGNhbGwpOworCQlyZXR1cm4gaWQ7CisJfQorCisJcmV0dXJuIGlkOworfQorCit1bnNpZ25lZCBsb25nIF9faW5pdCBhcmNoX3N5c2NhbGxfYWRkcihpbnQgbnIpCit7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKXN5c19jYWxsX3RhYmxlW25yXTsKIH0KIAogaW50IF9faW5pdCBpbml0X2Z0cmFjZV9zeXNjYWxscyh2b2lkKQpAQCAtNDIxLDcgKzQyNiw3IEBACiB9CiBjb3JlX2luaXRjYWxsKGluaXRfZnRyYWNlX3N5c2NhbGxzKTsKIAotI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCiAKIHN0YXRpYyBERUNMQVJFX0JJVE1BUChlbmFibGVkX3Byb2ZfZW50ZXJfc3lzY2FsbHMsIE5SX3N5c2NhbGxzKTsKIHN0YXRpYyBERUNMQVJFX0JJVE1BUChlbmFibGVkX3Byb2ZfZXhpdF9zeXNjYWxscywgTlJfc3lzY2FsbHMpOwpAQCAtNDMzLDEyICs0MzgsOSBAQAogCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzeXNfZGF0YTsKIAlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9lbnRlciAqcmVjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JY2hhciAqdHJhY2VfYnVmOwotCWNoYXIgKnJhd19kYXRhOwogCWludCBzeXNjYWxsX25yOwogCWludCByY3R4OwogCWludCBzaXplOwotCWludCBjcHU7CiAKIAlzeXNjYWxsX25yID0gc3lzY2FsbF9nZXRfbnIoY3VycmVudCwgcmVncyk7CiAJaWYgKCF0ZXN0X2JpdChzeXNjYWxsX25yLCBlbmFibGVkX3Byb2ZfZW50ZXJfc3lzY2FsbHMpKQpAQCAtNDU3LDM3ICs0NTksMTUgQEAKIAkJICAgICAgInByb2ZpbGUgYnVmZmVyIG5vdCBsYXJnZSBlbm91Z2giKSkKIAkJcmV0dXJuOwogCi0JLyogUHJvdGVjdCB0aGUgcGVyIGNwdSBidWZmZXIsIGJlZ2luIHRoZSByY3UgcmVhZCBzaWRlICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJlYyA9IChzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9lbnRlciAqKWZ0cmFjZV9wZXJmX2J1Zl9wcmVwYXJlKHNpemUsCisJCQkJc3lzX2RhdGEtPmVudGVyX2V2ZW50LT5pZCwgJnJjdHgsICZmbGFncyk7CisJaWYgKCFyZWMpCisJCXJldHVybjsKIAotCXJjdHggPSBwZXJmX3N3ZXZlbnRfZ2V0X3JlY3Vyc2lvbl9jb250ZXh0KCk7Ci0JaWYgKHJjdHggPCAwKQotCQlnb3RvIGVuZF9yZWN1cnNpb247Ci0KLQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQl0cmFjZV9idWYgPSByY3VfZGVyZWZlcmVuY2UocGVyZl90cmFjZV9idWYpOwotCi0JaWYgKCF0cmFjZV9idWYpCi0JCWdvdG8gZW5kOwotCi0JcmF3X2RhdGEgPSBwZXJfY3B1X3B0cih0cmFjZV9idWYsIGNwdSk7Ci0KLQkvKiB6ZXJvIHRoZSBkZWFkIGJ5dGVzIGZyb20gYWxpZ24gdG8gbm90IGxlYWsgc3RhY2sgdG8gdXNlciAqLwotCSoodTY0ICopKCZyYXdfZGF0YVtzaXplIC0gc2l6ZW9mKHU2NCldKSA9IDBVTEw7Ci0KLQlyZWMgPSAoc3RydWN0IHN5c2NhbGxfdHJhY2VfZW50ZXIgKikgcmF3X2RhdGE7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmcmVjLT5lbnQsIDAsIDApOwotCXJlYy0+ZW50LnR5cGUgPSBzeXNfZGF0YS0+ZW50ZXJfZXZlbnQtPmlkOwogCXJlYy0+bnIgPSBzeXNjYWxsX25yOwogCXN5c2NhbGxfZ2V0X2FyZ3VtZW50cyhjdXJyZW50LCByZWdzLCAwLCBzeXNfZGF0YS0+bmJfYXJncywKIAkJCSAgICAgICAodW5zaWduZWQgbG9uZyAqKSZyZWMtPmFyZ3MpOwotCXBlcmZfdHBfZXZlbnQoc3lzX2RhdGEtPmVudGVyX2V2ZW50LT5pZCwgMCwgMSwgcmVjLCBzaXplKTsKLQotZW5kOgotCXBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQocmN0eCk7Ci1lbmRfcmVjdXJzaW9uOgotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlmdHJhY2VfcGVyZl9idWZfc3VibWl0KHJlYywgc2l6ZSwgcmN0eCwgMCwgMSwgZmxhZ3MpOwogfQogCiBpbnQgcHJvZl9zeXNlbnRlcl9lbmFibGUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQpAQCAtNTMxLDExICs1MTEsOCBAQAogCXN0cnVjdCBzeXNjYWxsX3RyYWNlX2V4aXQgKnJlYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzeXNjYWxsX25yOwotCWNoYXIgKnRyYWNlX2J1ZjsKLQljaGFyICpyYXdfZGF0YTsKIAlpbnQgcmN0eDsKIAlpbnQgc2l6ZTsKLQlpbnQgY3B1OwogCiAJc3lzY2FsbF9uciA9IHN5c2NhbGxfZ2V0X25yKGN1cnJlbnQsIHJlZ3MpOwogCWlmICghdGVzdF9iaXQoc3lzY2FsbF9uciwgZW5hYmxlZF9wcm9mX2V4aXRfc3lzY2FsbHMpKQpAQCAtNTU3LDM4ICs1MzQsMTUgQEAKIAkJImV4aXQgZXZlbnQgaGFzIGdyb3duIGFib3ZlIHByb2ZpbGUgYnVmZmVyIHNpemUiKSkKIAkJcmV0dXJuOwogCi0JLyogUHJvdGVjdCB0aGUgcGVyIGNwdSBidWZmZXIsIGJlZ2luIHRoZSByY3UgcmVhZCBzaWRlICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJlYyA9IChzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0ICopZnRyYWNlX3BlcmZfYnVmX3ByZXBhcmUoc2l6ZSwKKwkJCQlzeXNfZGF0YS0+ZXhpdF9ldmVudC0+aWQsICZyY3R4LCAmZmxhZ3MpOworCWlmICghcmVjKQorCQlyZXR1cm47CiAKLQlyY3R4ID0gcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCgpOwotCWlmIChyY3R4IDwgMCkKLQkJZ290byBlbmRfcmVjdXJzaW9uOwotCi0JY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JdHJhY2VfYnVmID0gcmN1X2RlcmVmZXJlbmNlKHBlcmZfdHJhY2VfYnVmKTsKLQotCWlmICghdHJhY2VfYnVmKQotCQlnb3RvIGVuZDsKLQotCXJhd19kYXRhID0gcGVyX2NwdV9wdHIodHJhY2VfYnVmLCBjcHUpOwotCi0JLyogemVybyB0aGUgZGVhZCBieXRlcyBmcm9tIGFsaWduIHRvIG5vdCBsZWFrIHN0YWNrIHRvIHVzZXIgKi8KLQkqKHU2NCAqKSgmcmF3X2RhdGFbc2l6ZSAtIHNpemVvZih1NjQpXSkgPSAwVUxMOwotCi0JcmVjID0gKHN0cnVjdCBzeXNjYWxsX3RyYWNlX2V4aXQgKilyYXdfZGF0YTsKLQotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJnJlYy0+ZW50LCAwLCAwKTsKLQlyZWMtPmVudC50eXBlID0gc3lzX2RhdGEtPmV4aXRfZXZlbnQtPmlkOwogCXJlYy0+bnIgPSBzeXNjYWxsX25yOwogCXJlYy0+cmV0ID0gc3lzY2FsbF9nZXRfcmV0dXJuX3ZhbHVlKGN1cnJlbnQsIHJlZ3MpOwogCi0JcGVyZl90cF9ldmVudChzeXNfZGF0YS0+ZXhpdF9ldmVudC0+aWQsIDAsIDEsIHJlYywgc2l6ZSk7Ci0KLWVuZDoKLQlwZXJmX3N3ZXZlbnRfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KHJjdHgpOwotZW5kX3JlY3Vyc2lvbjoKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJZnRyYWNlX3BlcmZfYnVmX3N1Ym1pdChyZWMsIHNpemUsIHJjdHgsIDAsIDEsIGZsYWdzKTsKIH0KIAogaW50IHByb2Zfc3lzZXhpdF9lbmFibGUoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQpAQCAtNjAzLDcgKzU1Nyw3IEBACiAJCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3N5c19leGl0KHByb2Zfc3lzY2FsbF9leGl0KTsKIAlpZiAocmV0KSB7CiAJCXByX2luZm8oImV2ZW50IHRyYWNlOiBDb3VsZCBub3QgYWN0aXZhdGUiCi0JCQkJInN5c2NhbGwgZW50cnkgdHJhY2UgcG9pbnQiKTsKKwkJCQkic3lzY2FsbCBleGl0IHRyYWNlIHBvaW50Iik7CiAJfSBlbHNlIHsKIAkJc2V0X2JpdChudW0sIGVuYWJsZWRfcHJvZl9leGl0X3N5c2NhbGxzKTsKIAkJc3lzX3Byb2ZfcmVmY291bnRfZXhpdCsrOwpAQCAtNjI2LDYgKzU4MCw1IEBACiAJbXV0ZXhfdW5sb2NrKCZzeXNjYWxsX3RyYWNlX2xvY2spOwogfQogCi0jZW5kaWYKLQorI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlci5jIGIva2VybmVsL3VzZXIuYwppbmRleCA0NmQwMTY1Li43NjY0NjdiIDEwMDY0NAotLS0gYS9rZXJuZWwvdXNlci5jCisrKyBiL2tlcm5lbC91c2VyLmMKQEAgLTU2LDkgKzU2LDYgQEAKIAkuc2lncGVuZGluZwk9IEFUT01JQ19JTklUKDApLAogCS5sb2NrZWRfc2htICAgICA9IDAsCiAJLnVzZXJfbnMJPSAmaW5pdF91c2VyX25zLAotI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECi0JLnRnCQk9ICZpbml0X3Rhc2tfZ3JvdXAsCi0jZW5kaWYKIH07CiAKIC8qCkBAIC03NSwyNjggKzcyLDYgQEAKIAlwdXRfdXNlcl9ucyh1cC0+dXNlcl9ucyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAotCi1zdGF0aWMgdm9pZCBzY2hlZF9kZXN0cm95X3VzZXIoc3RydWN0IHVzZXJfc3RydWN0ICp1cCkKLXsKLQlzY2hlZF9kZXN0cm95X2dyb3VwKHVwLT50Zyk7Ci19Ci0KLXN0YXRpYyBpbnQgc2NoZWRfY3JlYXRlX3VzZXIoc3RydWN0IHVzZXJfc3RydWN0ICp1cCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JdXAtPnRnID0gc2NoZWRfY3JlYXRlX2dyb3VwKCZyb290X3Rhc2tfZ3JvdXApOwotCWlmIChJU19FUlIodXAtPnRnKSkKLQkJcmMgPSAtRU5PTUVNOwotCi0Jc2V0X3RnX3VpZCh1cCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLSNlbHNlCS8qIENPTkZJR19VU0VSX1NDSEVEICovCi0KLXN0YXRpYyB2b2lkIHNjaGVkX2Rlc3Ryb3lfdXNlcihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwKSB7IH0KLXN0YXRpYyBpbnQgc2NoZWRfY3JlYXRlX3VzZXIoc3RydWN0IHVzZXJfc3RydWN0ICp1cCkgeyByZXR1cm4gMDsgfQotCi0jZW5kaWYJLyogQ09ORklHX1VTRVJfU0NIRUQgKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1VTRVJfU0NIRUQpICYmIGRlZmluZWQoQ09ORklHX1NZU0ZTKQotCi1zdGF0aWMgc3RydWN0IHVzZXJfc3RydWN0ICp1aWRfaGFzaF9maW5kKHVpZF90IHVpZCwgc3RydWN0IGhsaXN0X2hlYWQgKmhhc2hlbnQpCi17Ci0Jc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyOwotCXN0cnVjdCBobGlzdF9ub2RlICpoOwotCi0JaGxpc3RfZm9yX2VhY2hfZW50cnkodXNlciwgaCwgaGFzaGVudCwgdWlkaGFzaF9ub2RlKSB7Ci0JCWlmICh1c2VyLT51aWQgPT0gdWlkKSB7Ci0JCQkvKiBwb3NzaWJseSByZXN1cnJlY3QgYW4gImFsbW9zdCBkZWxldGVkIiBvYmplY3QgKi8KLQkJCWlmIChhdG9taWNfaW5jX3JldHVybigmdXNlci0+X19jb3VudCkgPT0gMSkKLQkJCQljYW5jZWxfZGVsYXllZF93b3JrKCZ1c2VyLT53b3JrKTsKLQkJCXJldHVybiB1c2VyOwotCQl9Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qga3NldCAqdWlkc19rc2V0OyAvKiByZXByZXNlbnRzIHRoZSAvc3lzL2tlcm5lbC91aWRzLyBkaXJlY3RvcnkgKi8KLXN0YXRpYyBERUZJTkVfTVVURVgodWlkc19tdXRleCk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1aWRzX211dGV4X2xvY2sodm9pZCkKLXsKLQltdXRleF9sb2NrKCZ1aWRzX211dGV4KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVpZHNfbXV0ZXhfdW5sb2NrKHZvaWQpCi17Ci0JbXV0ZXhfdW5sb2NrKCZ1aWRzX211dGV4KTsKLX0KLQotLyogdWlkIGRpcmVjdG9yeSBhdHRyaWJ1dGVzICovCi0jaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKLXN0YXRpYyBzc2l6ZV90IGNwdV9zaGFyZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCSAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXAgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHVzZXJfc3RydWN0LCBrb2JqKTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgc2NoZWRfZ3JvdXBfc2hhcmVzKHVwLT50ZykpOwotfQotCi1zdGF0aWMgc3NpemVfdCBjcHVfc2hhcmVzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQotewotCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXAgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHVzZXJfc3RydWN0LCBrb2JqKTsKLQl1bnNpZ25lZCBsb25nIHNoYXJlczsKLQlpbnQgcmM7Ci0KLQlzc2NhbmYoYnVmLCAiJWx1IiwgJnNoYXJlcyk7Ci0KLQlyYyA9IHNjaGVkX2dyb3VwX3NldF9zaGFyZXModXAtPnRnLCBzaGFyZXMpOwotCi0JcmV0dXJuIChyYyA/IHJjIDogc2l6ZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY3B1X3NoYXJlX2F0dHIgPQotCV9fQVRUUihjcHVfc2hhcmUsIDA2NDQsIGNwdV9zaGFyZXNfc2hvdywgY3B1X3NoYXJlc19zdG9yZSk7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAotc3RhdGljIHNzaXplX3QgY3B1X3J0X3J1bnRpbWVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgY2hhciAqYnVmKQotewotCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXAgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHVzZXJfc3RydWN0LCBrb2JqKTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgc2NoZWRfZ3JvdXBfcnRfcnVudGltZSh1cC0+dGcpKTsKLX0KLQotc3RhdGljIHNzaXplX3QgY3B1X3J0X3J1bnRpbWVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCB1c2VyX3N0cnVjdCwga29iaik7Ci0JdW5zaWduZWQgbG9uZyBydF9ydW50aW1lOwotCWludCByYzsKLQotCXNzY2FuZihidWYsICIlbGQiLCAmcnRfcnVudGltZSk7Ci0KLQlyYyA9IHNjaGVkX2dyb3VwX3NldF9ydF9ydW50aW1lKHVwLT50ZywgcnRfcnVudGltZSk7Ci0KLQlyZXR1cm4gKHJjID8gcmMgOiBzaXplKTsKLX0KLQotc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjcHVfcnRfcnVudGltZV9hdHRyID0KLQlfX0FUVFIoY3B1X3J0X3J1bnRpbWUsIDA2NDQsIGNwdV9ydF9ydW50aW1lX3Nob3csIGNwdV9ydF9ydW50aW1lX3N0b3JlKTsKLQotc3RhdGljIHNzaXplX3QgY3B1X3J0X3BlcmlvZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHVzZXJfc3RydWN0ICp1cCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgdXNlcl9zdHJ1Y3QsIGtvYmopOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCBzY2hlZF9ncm91cF9ydF9wZXJpb2QodXAtPnRnKSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGNwdV9ydF9wZXJpb2Rfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCB1c2VyX3N0cnVjdCwga29iaik7Ci0JdW5zaWduZWQgbG9uZyBydF9wZXJpb2Q7Ci0JaW50IHJjOwotCi0Jc3NjYW5mKGJ1ZiwgIiVsdSIsICZydF9wZXJpb2QpOwotCi0JcmMgPSBzY2hlZF9ncm91cF9zZXRfcnRfcGVyaW9kKHVwLT50ZywgcnRfcGVyaW9kKTsKLQotCXJldHVybiAocmMgPyByYyA6IHNpemUpOwotfQotCi1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNwdV9ydF9wZXJpb2RfYXR0ciA9Ci0JX19BVFRSKGNwdV9ydF9wZXJpb2QsIDA2NDQsIGNwdV9ydF9wZXJpb2Rfc2hvdywgY3B1X3J0X3BlcmlvZF9zdG9yZSk7Ci0jZW5kaWYKLQotLyogZGVmYXVsdCBhdHRyaWJ1dGVzIHBlciB1aWQgZGlyZWN0b3J5ICovCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdWlkc19hdHRyaWJ1dGVzW10gPSB7Ci0jaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKLQkmY3B1X3NoYXJlX2F0dHIuYXR0ciwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19SVF9HUk9VUF9TQ0hFRAotCSZjcHVfcnRfcnVudGltZV9hdHRyLmF0dHIsCi0JJmNwdV9ydF9wZXJpb2RfYXR0ci5hdHRyLAotI2VuZGlmCi0JTlVMTAotfTsKLQotLyogdGhlIGxpZmV0aW1lIG9mIHVzZXJfc3RydWN0IGlzIG5vdCBtYW5hZ2VkIGJ5IHRoZSBjb3JlIChub3cpICovCi1zdGF0aWMgdm9pZCB1aWRzX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgc3RydWN0IGtvYmpfdHlwZSB1aWRzX2t0eXBlID0gewotCS5zeXNmc19vcHMgPSAma29ial9zeXNmc19vcHMsCi0JLmRlZmF1bHRfYXR0cnMgPSB1aWRzX2F0dHJpYnV0ZXMsCi0JLnJlbGVhc2UgPSB1aWRzX3JlbGVhc2UsCi19OwotCi0vKgotICogQ3JlYXRlIC9zeXMva2VybmVsL3VpZHMvPHVpZD4vY3B1X3NoYXJlIGZpbGUgZm9yIHRoaXMgdXNlcgotICogV2UgZG8gbm90IGNyZWF0ZSB0aGlzIGZpbGUgZm9yIHVzZXJzIGluIGEgdXNlciBuYW1lc3BhY2UgKHVudGlsCi0gKiBzeXNmcyB0YWdnaW5nIGlzIGltcGxlbWVudGVkKS4KLSAqCi0gKiBTZWUgRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZGVzaWduLUNGUy50eHQgZm9yIHJhbWlmaWNhdGlvbnMuCi0gKi8KLXN0YXRpYyBpbnQgdWlkc191c2VyX2NyZWF0ZShzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwKQotewotCXN0cnVjdCBrb2JqZWN0ICprb2JqID0gJnVwLT5rb2JqOwotCWludCBlcnJvcjsKLQotCW1lbXNldChrb2JqLCAwLCBzaXplb2Yoc3RydWN0IGtvYmplY3QpKTsKLQlpZiAodXAtPnVzZXJfbnMgIT0gJmluaXRfdXNlcl9ucykKLQkJcmV0dXJuIDA7Ci0Ja29iai0+a3NldCA9IHVpZHNfa3NldDsKLQllcnJvciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKGtvYmosICZ1aWRzX2t0eXBlLCBOVUxMLCAiJWQiLCB1cC0+dWlkKTsKLQlpZiAoZXJyb3IpIHsKLQkJa29iamVjdF9wdXQoa29iaik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlrb2JqZWN0X3VldmVudChrb2JqLCBLT0JKX0FERCk7Ci1kb25lOgotCXJldHVybiBlcnJvcjsKLX0KLQotLyogY3JlYXRlIHRoZXNlIGVudHJpZXMgaW4gc3lzZnM6Ci0gKiAJIi9zeXMva2VybmVsL3VpZHMiIGRpcmVjdG9yeQotICogCSIvc3lzL2tlcm5lbC91aWRzLzAiIGRpcmVjdG9yeSAoZm9yIHJvb3QgdXNlcikKLSAqIAkiL3N5cy9rZXJuZWwvdWlkcy8wL2NwdV9zaGFyZSIgZmlsZSAoZm9yIHJvb3QgdXNlcikKLSAqLwotaW50IF9faW5pdCB1aWRzX3N5c2ZzX2luaXQodm9pZCkKLXsKLQl1aWRzX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKCJ1aWRzIiwgTlVMTCwga2VybmVsX2tvYmopOwotCWlmICghdWlkc19rc2V0KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJldHVybiB1aWRzX3VzZXJfY3JlYXRlKCZyb290X3VzZXIpOwotfQotCi0vKiBkZWxheWVkIHdvcmsgZnVuY3Rpb24gdG8gcmVtb3ZlIHN5c2ZzIGRpcmVjdG9yeSBmb3IgYSB1c2VyIGFuZCBmcmVlIHVwCi0gKiBjb3JyZXNwb25kaW5nIHN0cnVjdHVyZXMuCi0gKi8KLXN0YXRpYyB2b2lkIGNsZWFudXBfdXNlcl9zdHJ1Y3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3KQotewotCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXAgPSBjb250YWluZXJfb2Yodywgc3RydWN0IHVzZXJfc3RydWN0LCB3b3JrLndvcmspOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJlbW92ZV91c2VyID0gMDsKLQotCS8qIE1ha2UgdWlkX2hhc2hfcmVtb3ZlKCkgKyBzeXNmc19yZW1vdmVfZmlsZSgpICsga29iamVjdF9kZWwoKQotCSAqIGF0b21pYy4KLQkgKi8KLQl1aWRzX211dGV4X2xvY2soKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ1aWRoYXNoX2xvY2ssIGZsYWdzKTsKLQlpZiAoYXRvbWljX3JlYWQoJnVwLT5fX2NvdW50KSA9PSAwKSB7Ci0JCXVpZF9oYXNoX3JlbW92ZSh1cCk7Ci0JCXJlbW92ZV91c2VyID0gMTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWlkaGFzaF9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIXJlbW92ZV91c2VyKQotCQlnb3RvIGRvbmU7Ci0KLQlpZiAodXAtPnVzZXJfbnMgPT0gJmluaXRfdXNlcl9ucykgewotCQlrb2JqZWN0X3VldmVudCgmdXAtPmtvYmosIEtPQkpfUkVNT1ZFKTsKLQkJa29iamVjdF9kZWwoJnVwLT5rb2JqKTsKLQkJa29iamVjdF9wdXQoJnVwLT5rb2JqKTsKLQl9Ci0KLQlzY2hlZF9kZXN0cm95X3VzZXIodXApOwotCWtleV9wdXQodXAtPnVpZF9rZXlyaW5nKTsKLQlrZXlfcHV0KHVwLT5zZXNzaW9uX2tleXJpbmcpOwotCWttZW1fY2FjaGVfZnJlZSh1aWRfY2FjaGVwLCB1cCk7Ci0KLWRvbmU6Ci0JdWlkc19tdXRleF91bmxvY2soKTsKLX0KLQotLyogSVJRcyBhcmUgZGlzYWJsZWQgYW5kIHVpZGhhc2hfbG9jayBpcyBoZWxkIHVwb24gZnVuY3Rpb24gZW50cnkuCi0gKiBJUlEgc3RhdGUgKGFzIHN0b3JlZCBpbiBmbGFncykgaXMgcmVzdG9yZWQgYW5kIHVpZGhhc2hfbG9jayByZWxlYXNlZAotICogdXBvbiBmdW5jdGlvbiBleGl0LgotICovCi1zdGF0aWMgdm9pZCBmcmVlX3VzZXIoc3RydWN0IHVzZXJfc3RydWN0ICp1cCwgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQlJTklUX0RFTEFZRURfV09SSygmdXAtPndvcmssIGNsZWFudXBfdXNlcl9zdHJ1Y3QpOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdXAtPndvcmssIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVpZGhhc2hfbG9jaywgZmxhZ3MpOwotfQotCi0jZWxzZQkvKiBDT05GSUdfVVNFUl9TQ0hFRCAmJiBDT05GSUdfU1lTRlMgKi8KLQogc3RhdGljIHN0cnVjdCB1c2VyX3N0cnVjdCAqdWlkX2hhc2hfZmluZCh1aWRfdCB1aWQsIHN0cnVjdCBobGlzdF9oZWFkICpoYXNoZW50KQogewogCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKQEAgLTM1MiwxMSArODcsNiBAQAogCXJldHVybiBOVUxMOwogfQogCi1pbnQgdWlkc19zeXNmc19pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHVpZHNfdXNlcl9jcmVhdGUoc3RydWN0IHVzZXJfc3RydWN0ICp1cCkgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIHVpZHNfbXV0ZXhfbG9jayh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1aWRzX211dGV4X3VubG9jayh2b2lkKSB7IH0KLQogLyogSVJRcyBhcmUgZGlzYWJsZWQgYW5kIHVpZGhhc2hfbG9jayBpcyBoZWxkIHVwb24gZnVuY3Rpb24gZW50cnkuCiAgKiBJUlEgc3RhdGUgKGFzIHN0b3JlZCBpbiBmbGFncykgaXMgcmVzdG9yZWQgYW5kIHVpZGhhc2hfbG9jayByZWxlYXNlZAogICogdXBvbiBmdW5jdGlvbiBleGl0LgpAQCAtMzY1LDMyICs5NSwxMSBAQAogewogCXVpZF9oYXNoX3JlbW92ZSh1cCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWlkaGFzaF9sb2NrLCBmbGFncyk7Ci0Jc2NoZWRfZGVzdHJveV91c2VyKHVwKTsKIAlrZXlfcHV0KHVwLT51aWRfa2V5cmluZyk7CiAJa2V5X3B1dCh1cC0+c2Vzc2lvbl9rZXlyaW5nKTsKIAlrbWVtX2NhY2hlX2ZyZWUodWlkX2NhY2hlcCwgdXApOwogfQogCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1JUX0dST1VQX1NDSEVEKSAmJiBkZWZpbmVkKENPTkZJR19VU0VSX1NDSEVEKQotLyoKLSAqIFdlIG5lZWQgdG8gY2hlY2sgaWYgYSBzZXR1aWQgY2FuIHRha2UgcGxhY2UuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZAotICogYmVmb3JlIHN1Y2Nlc3NmdWxseSBjb21wbGV0aW5nIHRoZSBzZXR1aWQuCi0gKi8KLWludCB0YXNrX2Nhbl9zd2l0Y2hfdXNlcihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQotCXJldHVybiBzY2hlZF9ydF9jYW5fYXR0YWNoKHVwLT50ZywgdHNrKTsKLQotfQotI2Vsc2UKLWludCB0YXNrX2Nhbl9zd2l0Y2hfdXNlcihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlyZXR1cm4gMTsKLX0KLSNlbmRpZgotCiAvKgogICogTG9jYXRlIHRoZSB1c2VyX3N0cnVjdCBmb3IgdGhlIHBhc3NlZCBVSUQuICBJZiBmb3VuZCwgdGFrZSBhIHJlZiBvbiBpdC4gIFRoZQogICogY2FsbGVyIG11c3QgdW5kbyB0aGF0IHJlZiB3aXRoIGZyZWVfdWlkKCkuCkBAIC00MzEsOCArMTQwLDYgQEAKIAkvKiBNYWtlIHVpZF9oYXNoX2ZpbmQoKSArIHVpZHNfdXNlcl9jcmVhdGUoKSArIHVpZF9oYXNoX2luc2VydCgpCiAJICogYXRvbWljLgogCSAqLwotCXVpZHNfbXV0ZXhfbG9jaygpOwotCiAJc3Bpbl9sb2NrX2lycSgmdWlkaGFzaF9sb2NrKTsKIAl1cCA9IHVpZF9oYXNoX2ZpbmQodWlkLCBoYXNoZW50KTsKIAlzcGluX3VubG9ja19pcnEoJnVpZGhhc2hfbG9jayk7CkBAIC00NDUsMTQgKzE1Miw4IEBACiAJCW5ldy0+dWlkID0gdWlkOwogCQlhdG9taWNfc2V0KCZuZXctPl9fY291bnQsIDEpOwogCi0JCWlmIChzY2hlZF9jcmVhdGVfdXNlcihuZXcpIDwgMCkKLQkJCWdvdG8gb3V0X2ZyZWVfdXNlcjsKLQogCQluZXctPnVzZXJfbnMgPSBnZXRfdXNlcl9ucyhucyk7CiAKLQkJaWYgKHVpZHNfdXNlcl9jcmVhdGUobmV3KSkKLQkJCWdvdG8gb3V0X2Rlc3RveV9zY2hlZDsKLQogCQkvKgogCQkgKiBCZWZvcmUgYWRkaW5nIHRoaXMsIGNoZWNrIHdoZXRoZXIgd2UgcmFjZWQKIAkJICogb24gYWRkaW5nIHRoZSBzYW1lIHVzZXIgYWxyZWFkeS4uCkBAIC00NzUsMTcgKzE3NiwxMSBAQAogCQlzcGluX3VubG9ja19pcnEoJnVpZGhhc2hfbG9jayk7CiAJfQogCi0JdWlkc19tdXRleF91bmxvY2soKTsKLQogCXJldHVybiB1cDsKIAotb3V0X2Rlc3RveV9zY2hlZDoKLQlzY2hlZF9kZXN0cm95X3VzZXIobmV3KTsKIAlwdXRfdXNlcl9ucyhuZXctPnVzZXJfbnMpOwotb3V0X2ZyZWVfdXNlcjoKIAlrbWVtX2NhY2hlX2ZyZWUodWlkX2NhY2hlcCwgbmV3KTsKIG91dF91bmxvY2s6Ci0JdWlkc19tdXRleF91bmxvY2soKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCAyNWMzZWQ1Li41ZTM0MDdkIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtMzU1LDcgKzM1NSw3IEBACiBjb25maWcgREVCVUdfS01FTUxFQUsKIAlib29sICJLZXJuZWwgbWVtb3J5IGxlYWsgZGV0ZWN0b3IiCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgRVhQRVJJTUVOVEFMICYmICFNRU1PUllfSE9UUExVRyAmJiBcCi0JCShYODYgfHwgQVJNIHx8IFBQQyB8fCBTMzkwKQorCQkoWDg2IHx8IEFSTSB8fCBQUEMgfHwgUzM5MCB8fCBTVVBFUkgpCiAKIAlzZWxlY3QgREVCVUdfRlMgaWYgU1lTRlMKIAlzZWxlY3QgU1RBQ0tUUkFDRSBpZiBTVEFDS1RSQUNFX1NVUFBPUlQKQEAgLTQ5OSw2ICs0OTksMTggQEAKIAogCSBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgRG9jdW1lbnRhdGlvbi9sb2NrZGVwLWRlc2lnbi50eHQuCiAKK2NvbmZpZyBQUk9WRV9SQ1UKKwlib29sICJSQ1UgZGVidWdnaW5nOiBwcm92ZSBSQ1UgY29ycmVjdG5lc3MiCisJZGVwZW5kcyBvbiBQUk9WRV9MT0NLSU5HCisJZGVmYXVsdCBuCisJaGVscAorCSBUaGlzIGZlYXR1cmUgZW5hYmxlcyBsb2NrZGVwIGV4dGVuc2lvbnMgdGhhdCBjaGVjayBmb3IgY29ycmVjdAorCSB1c2Ugb2YgUkNVIEFQSXMuICBUaGlzIGlzIGN1cnJlbnRseSB1bmRlciBkZXZlbG9wbWVudC4gIFNheSBZCisJIGlmIHlvdSB3YW50IHRvIGRlYnVnIFJDVSB1c2FnZSBvciBoZWxwIHdvcmsgb24gdGhlIFBST1ZFX1JDVQorCSBmZWF0dXJlLgorCisJIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgorCiBjb25maWcgTE9DS0RFUAogCWJvb2wKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBUUkFDRV9JUlFGTEFHU19TVVBQT1JUICYmIFNUQUNLVFJBQ0VfU1VQUE9SVCAmJiBMT0NLREVQX1NVUFBPUlQKQEAgLTc2NSwxMCArNzc3LDIyIEBACiAJICBDUFVzIGFyZSBkZWxheWluZyB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QsIGJ1dCBvbmx5IHdoZW4KIAkgIHRoZSBncmFjZSBwZXJpb2QgZXh0ZW5kcyBmb3IgZXhjZXNzaXZlIHRpbWUgcGVyaW9kcy4KIAotCSAgU2F5IFkgaWYgeW91IHdhbnQgUkNVIHRvIHBlcmZvcm0gc3VjaCBjaGVja3MuCisJICBTYXkgTiBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIHN1Y2ggY2hlY2tzLgorCisJICBTYXkgWSBpZiB5b3UgYXJlIHVuc3VyZS4KKworY29uZmlnIFJDVV9DUFVfU1RBTExfVkVSQk9TRQorCWJvb2wgIlByaW50IGFkZGl0aW9uYWwgcGVyLXRhc2sgaW5mb3JtYXRpb24gZm9yIFJDVV9DUFVfU1RBTExfREVURUNUT1IiCisJZGVwZW5kcyBvbiBSQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SICYmIFRSRUVfUFJFRU1QVF9SQ1UKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIG9wdGlvbiBjYXVzZXMgUkNVIHRvIHByaW50ayBkZXRhaWxlZCBwZXItdGFzayBpbmZvcm1hdGlvbgorCSAgZm9yIGFueSB0YXNrcyB0aGF0IGFyZSBzdGFsbGluZyB0aGUgY3VycmVudCBSQ1UgZ3JhY2UgcGVyaW9kLgogCiAJICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KIAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1Y2ggY2hlY2tzLgorCiBjb25maWcgS1BST0JFU19TQU5JVFlfVEVTVAogCWJvb2wgIktwcm9iZXMgc2FuaXR5IHRlc3RzIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCmRpZmYgLS1naXQgYS9saWIvZGVidWdfbG9ja3MuYyBiL2xpYi9kZWJ1Z19sb2Nrcy5jCmluZGV4IGJjM2IxMTcuLjViZjAwMjAgMTAwNjQ0Ci0tLSBhL2xpYi9kZWJ1Z19sb2Nrcy5jCisrKyBiL2xpYi9kZWJ1Z19sb2Nrcy5jCkBAIC0yMyw2ICsyMyw3IEBACiAgKiBzaHV0IHVwIGFmdGVyIHRoYXQuCiAgKi8KIGludCBkZWJ1Z19sb2NrcyA9IDE7CitFWFBPUlRfU1lNQk9MX0dQTChkZWJ1Z19sb2Nrcyk7CiAKIC8qCiAgKiBUaGUgbG9ja2luZy10ZXN0c3VpdGUgdXNlcyA8ZGVidWdfbG9ja3Nfc2lsZW50PiB0byBnZXQgYQpkaWZmIC0tZ2l0IGEvbGliL2h3ZWlnaHQuYyBiL2xpYi9od2VpZ2h0LmMKaW5kZXggMzg5NDI0ZS4uNjNlZTRlYiAxMDA2NDQKLS0tIGEvbGliL2h3ZWlnaHQuYworKysgYi9saWIvaHdlaWdodC5jCkBAIC0xMSwxMSArMTEsMTggQEAKIAogdW5zaWduZWQgaW50IGh3ZWlnaHQzMih1bnNpZ25lZCBpbnQgdykKIHsKKyNpZmRlZiBBUkNIX0hBU19GQVNUX01VTFRJUExJRVIKKwl3IC09ICh3ID4+IDEpICYgMHg1NTU1NTU1NTsKKwl3ID0gICh3ICYgMHgzMzMzMzMzMykgKyAoKHcgPj4gMikgJiAweDMzMzMzMzMzKTsKKwl3ID0gICh3ICsgKHcgPj4gNCkpICYgMHgwZjBmMGYwZjsKKwlyZXR1cm4gKHcgKiAweDAxMDEwMTAxKSA+PiAyNDsKKyNlbHNlCiAJdW5zaWduZWQgaW50IHJlcyA9IHcgLSAoKHcgPj4gMSkgJiAweDU1NTU1NTU1KTsKIAlyZXMgPSAocmVzICYgMHgzMzMzMzMzMykgKyAoKHJlcyA+PiAyKSAmIDB4MzMzMzMzMzMpOwogCXJlcyA9IChyZXMgKyAocmVzID4+IDQpKSAmIDB4MEYwRjBGMEY7CiAJcmVzID0gcmVzICsgKHJlcyA+PiA4KTsKIAlyZXR1cm4gKHJlcyArIChyZXMgPj4gMTYpKSAmIDB4MDAwMDAwRkY7CisjZW5kaWYKIH0KIEVYUE9SVF9TWU1CT0woaHdlaWdodDMyKTsKIApkaWZmIC0tZ2l0IGEvbGliL2lkci5jIGIvbGliL2lkci5jCmluZGV4IDBkYzc4MjIuLjJlYjFkY2EgMTAwNjQ0Ci0tLSBhL2xpYi9pZHIuYworKysgYi9saWIvaWRyLmMKQEAgLTUwNCw3ICs1MDQsNyBAQAogCWludCBuOwogCXN0cnVjdCBpZHJfbGF5ZXIgKnA7CiAKLQlwID0gcmN1X2RlcmVmZXJlbmNlKGlkcC0+dG9wKTsKKwlwID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhpZHAtPnRvcCk7CiAJaWYgKCFwKQogCQlyZXR1cm4gTlVMTDsKIAluID0gKHAtPmxheWVyKzEpICogSURSX0JJVFM7CkBAIC01MTksNyArNTE5LDcgQEAKIAl3aGlsZSAobiA+IDAgJiYgcCkgewogCQluIC09IElEUl9CSVRTOwogCQlCVUdfT04obiAhPSBwLT5sYXllcipJRFJfQklUUyk7Ci0JCXAgPSByY3VfZGVyZWZlcmVuY2UocC0+YXJ5WyhpZCA+PiBuKSAmIElEUl9NQVNLXSk7CisJCXAgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHAtPmFyeVsoaWQgPj4gbikgJiBJRFJfTUFTS10pOwogCX0KIAlyZXR1cm4oKHZvaWQgKilwKTsKIH0KQEAgLTU1Miw3ICs1NTIsNyBAQAogCXN0cnVjdCBpZHJfbGF5ZXIgKipwYWEgPSAmcGFbMF07CiAKIAluID0gaWRwLT5sYXllcnMgKiBJRFJfQklUUzsKLQlwID0gcmN1X2RlcmVmZXJlbmNlKGlkcC0+dG9wKTsKKwlwID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhpZHAtPnRvcCk7CiAJbWF4ID0gMSA8PCBuOwogCiAJaWQgPSAwOwpAQCAtNTYwLDcgKzU2MCw3IEBACiAJCXdoaWxlIChuID4gMCAmJiBwKSB7CiAJCQluIC09IElEUl9CSVRTOwogCQkJKnBhYSsrID0gcDsKLQkJCXAgPSByY3VfZGVyZWZlcmVuY2UocC0+YXJ5WyhpZCA+PiBuKSAmIElEUl9NQVNLXSk7CisJCQlwID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhwLT5hcnlbKGlkID4+IG4pICYgSURSX01BU0tdKTsKIAkJfQogCiAJCWlmIChwKSB7CmRpZmYgLS1naXQgYS9saWIvbG1iLmMgYi9saWIvbG1iLmMKaW5kZXggOWNlZTE3MS4uYjFmYzUyNiAxMDA2NDQKLS0tIGEvbGliL2xtYi5jCisrKyBiL2xpYi9sbWIuYwpAQCAtMjA1LDkgKzIwNSw4IEBACiAKIH0KIAotbG9uZyBsbWJfcmVtb3ZlKHU2NCBiYXNlLCB1NjQgc2l6ZSkKK3N0YXRpYyBsb25nIF9fbG1iX3JlbW92ZShzdHJ1Y3QgbG1iX3JlZ2lvbiAqcmduLCB1NjQgYmFzZSwgdTY0IHNpemUpCiB7Ci0Jc3RydWN0IGxtYl9yZWdpb24gKnJnbiA9ICYobG1iLm1lbW9yeSk7CiAJdTY0IHJnbmJlZ2luLCByZ25lbmQ7CiAJdTY0IGVuZCA9IGJhc2UgKyBzaXplOwogCWludCBpOwpAQCAtMjU0LDYgKzI1MywxNiBAQAogCXJldHVybiBsbWJfYWRkX3JlZ2lvbihyZ24sIGVuZCwgcmduZW5kIC0gZW5kKTsKIH0KIAorbG9uZyBsbWJfcmVtb3ZlKHU2NCBiYXNlLCB1NjQgc2l6ZSkKK3sKKwlyZXR1cm4gX19sbWJfcmVtb3ZlKCZsbWIubWVtb3J5LCBiYXNlLCBzaXplKTsKK30KKworbG9uZyBfX2luaXQgbG1iX2ZyZWUodTY0IGJhc2UsIHU2NCBzaXplKQoreworCXJldHVybiBfX2xtYl9yZW1vdmUoJmxtYi5yZXNlcnZlZCwgYmFzZSwgc2l6ZSk7Cit9CisKIGxvbmcgX19pbml0IGxtYl9yZXNlcnZlKHU2NCBiYXNlLCB1NjQgc2l6ZSkKIHsKIAlzdHJ1Y3QgbG1iX3JlZ2lvbiAqX3JnbiA9ICZsbWIucmVzZXJ2ZWQ7CmRpZmYgLS1naXQgYS9saWIvcmFkaXgtdHJlZS5jIGIvbGliL3JhZGl4LXRyZWUuYwppbmRleCA5MmNkZDk5Li42Yjk2NzBkIDEwMDY0NAotLS0gYS9saWIvcmFkaXgtdHJlZS5jCisrKyBiL2xpYi9yYWRpeC10cmVlLmMKQEAgLTM2NCw3ICszNjQsNyBAQAogCXVuc2lnbmVkIGludCBoZWlnaHQsIHNoaWZ0OwogCXN0cnVjdCByYWRpeF90cmVlX25vZGUgKm5vZGUsICoqc2xvdDsKIAotCW5vZGUgPSByY3VfZGVyZWZlcmVuY2Uocm9vdC0+cm5vZGUpOworCW5vZGUgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHJvb3QtPnJub2RlKTsKIAlpZiAobm9kZSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMzg0LDcgKzM4NCw3IEBACiAJZG8gewogCQlzbG90ID0gKHN0cnVjdCByYWRpeF90cmVlX25vZGUgKiopCiAJCQkobm9kZS0+c2xvdHMgKyAoKGluZGV4Pj5zaGlmdCkgJiBSQURJWF9UUkVFX01BUF9NQVNLKSk7Ci0JCW5vZGUgPSByY3VfZGVyZWZlcmVuY2UoKnNsb3QpOworCQlub2RlID0gcmN1X2RlcmVmZXJlbmNlX3Jhdygqc2xvdCk7CiAJCWlmIChub2RlID09IE5VTEwpCiAJCQlyZXR1cm4gTlVMTDsKIApAQCAtNTY4LDcgKzU2OCw3IEBACiAJaWYgKCFyb290X3RhZ19nZXQocm9vdCwgdGFnKSkKIAkJcmV0dXJuIDA7CiAKLQlub2RlID0gcmN1X2RlcmVmZXJlbmNlKHJvb3QtPnJub2RlKTsKKwlub2RlID0gcmN1X2RlcmVmZXJlbmNlX3Jhdyhyb290LT5ybm9kZSk7CiAJaWYgKG5vZGUgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKQEAgLTYwMiw3ICs2MDIsNyBAQAogCQkJQlVHX09OKHJldCAmJiBzYXdfdW5zZXRfdGFnKTsKIAkJCXJldHVybiAhIXJldDsKIAkJfQotCQlub2RlID0gcmN1X2RlcmVmZXJlbmNlKG5vZGUtPnNsb3RzW29mZnNldF0pOworCQlub2RlID0gcmN1X2RlcmVmZXJlbmNlX3Jhdyhub2RlLT5zbG90c1tvZmZzZXRdKTsKIAkJc2hpZnQgLT0gUkFESVhfVFJFRV9NQVBfU0hJRlQ7CiAJCWhlaWdodC0tOwogCX0KQEAgLTcxMSw3ICs3MTEsNyBAQAogCQl9CiAKIAkJc2hpZnQgLT0gUkFESVhfVFJFRV9NQVBfU0hJRlQ7Ci0JCXNsb3QgPSByY3VfZGVyZWZlcmVuY2Uoc2xvdC0+c2xvdHNbaV0pOworCQlzbG90ID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhzbG90LT5zbG90c1tpXSk7CiAJCWlmIChzbG90ID09IE5VTEwpCiAJCQlnb3RvIG91dDsKIAl9CkBAIC03NTgsNyArNzU4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGN1cl9pbmRleCA9IGZpcnN0X2luZGV4OwogCXVuc2lnbmVkIGludCByZXQ7CiAKLQlub2RlID0gcmN1X2RlcmVmZXJlbmNlKHJvb3QtPnJub2RlKTsKKwlub2RlID0gcmN1X2RlcmVmZXJlbmNlX3Jhdyhyb290LT5ybm9kZSk7CiAJaWYgKCFub2RlKQogCQlyZXR1cm4gMDsKIApAQCAtNzg3LDcgKzc4Nyw3IEBACiAJCQlzbG90ID0gKigoKHZvaWQgKioqKXJlc3VsdHMpW3JldCArIGldKTsKIAkJCWlmICghc2xvdCkKIAkJCQljb250aW51ZTsKLQkJCXJlc3VsdHNbcmV0ICsgbnJfZm91bmRdID0gcmN1X2RlcmVmZXJlbmNlKHNsb3QpOworCQkJcmVzdWx0c1tyZXQgKyBucl9mb3VuZF0gPSByY3VfZGVyZWZlcmVuY2VfcmF3KHNsb3QpOwogCQkJbnJfZm91bmQrKzsKIAkJfQogCQlyZXQgKz0gbnJfZm91bmQ7CkBAIC04MjYsNyArODI2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGN1cl9pbmRleCA9IGZpcnN0X2luZGV4OwogCXVuc2lnbmVkIGludCByZXQ7CiAKLQlub2RlID0gcmN1X2RlcmVmZXJlbmNlKHJvb3QtPnJub2RlKTsKKwlub2RlID0gcmN1X2RlcmVmZXJlbmNlX3Jhdyhyb290LT5ybm9kZSk7CiAJaWYgKCFub2RlKQogCQlyZXR1cm4gMDsKIApAQCAtOTE1LDcgKzkxNSw3IEBACiAJCQl9CiAJCX0KIAkJc2hpZnQgLT0gUkFESVhfVFJFRV9NQVBfU0hJRlQ7Ci0JCXNsb3QgPSByY3VfZGVyZWZlcmVuY2Uoc2xvdC0+c2xvdHNbaV0pOworCQlzbG90ID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhzbG90LT5zbG90c1tpXSk7CiAJCWlmIChzbG90ID09IE5VTEwpCiAJCQlicmVhazsKIAl9CkBAIC05NTEsNyArOTUxLDcgQEAKIAlpZiAoIXJvb3RfdGFnX2dldChyb290LCB0YWcpKQogCQlyZXR1cm4gMDsKIAotCW5vZGUgPSByY3VfZGVyZWZlcmVuY2Uocm9vdC0+cm5vZGUpOworCW5vZGUgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHJvb3QtPnJub2RlKTsKIAlpZiAoIW5vZGUpCiAJCXJldHVybiAwOwogCkBAIC05ODAsNyArOTgwLDcgQEAKIAkJCXNsb3QgPSAqKCgodm9pZCAqKiopcmVzdWx0cylbcmV0ICsgaV0pOwogCQkJaWYgKCFzbG90KQogCQkJCWNvbnRpbnVlOwotCQkJcmVzdWx0c1tyZXQgKyBucl9mb3VuZF0gPSByY3VfZGVyZWZlcmVuY2Uoc2xvdCk7CisJCQlyZXN1bHRzW3JldCArIG5yX2ZvdW5kXSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoc2xvdCk7CiAJCQlucl9mb3VuZCsrOwogCQl9CiAJCXJldCArPSBucl9mb3VuZDsKQEAgLTEwMjAsNyArMTAyMCw3IEBACiAJaWYgKCFyb290X3RhZ19nZXQocm9vdCwgdGFnKSkKIAkJcmV0dXJuIDA7CiAKLQlub2RlID0gcmN1X2RlcmVmZXJlbmNlKHJvb3QtPnJub2RlKTsKKwlub2RlID0gcmN1X2RlcmVmZXJlbmNlX3Jhdyhyb290LT5ybm9kZSk7CiAJaWYgKCFub2RlKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWcKaW5kZXggMTdiODk0Ny4uZDM0YzJiOSAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZworKysgYi9tbS9LY29uZmlnCkBAIC0xOTUsNyArMTk1LDcgQEAKIGNvbmZpZyBOUl9RVUlDSwogCWludAogCWRlcGVuZHMgb24gUVVJQ0tMSVNUCi0JZGVmYXVsdCAiMiIgaWYgU1VQRVJIIHx8IEFWUjMyCisJZGVmYXVsdCAiMiIgaWYgQVZSMzIKIAlkZWZhdWx0ICIxIgogCiBjb25maWcgVklSVF9UT19CVVMKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCAyZDE2ZmE2Li4zYTVhZWIzIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKKysrIGIvbW0vaHVnZXRsYi5jCkBAIC0yMDg3LDcgKzIwODcsNyBAQAogCiAJZW50cnkgPSBwdGVfbWt3cml0ZShwdGVfbWtkaXJ0eShodWdlX3B0ZXBfZ2V0KHB0ZXApKSk7CiAJaWYgKGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgYWRkcmVzcywgcHRlcCwgZW50cnksIDEpKSB7Ci0JCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBlbnRyeSk7CisJCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGVwKTsKIAl9CiB9CiAKQEAgLTI1NTgsNyArMjU1OCw3IEBACiAJZW50cnkgPSBwdGVfbWt5b3VuZyhlbnRyeSk7CiAJaWYgKGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgYWRkcmVzcywgcHRlcCwgZW50cnksCiAJCQkJCQlmbGFncyAmIEZBVUxUX0ZMQUdfV1JJVEUpKQotCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgZW50cnkpOworCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlcCk7CiAKIG91dF9wYWdlX3RhYmxlX2xvY2s6CiAJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCAwOWU0YjFiLi43MmZiNWYzIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtMTU5Myw3ICsxNTkzLDcgQEAKIAkvKiBPaywgZmluYWxseSBqdXN0IGluc2VydCB0aGUgdGhpbmcuLiAqLwogCWVudHJ5ID0gcHRlX21rc3BlY2lhbChwZm5fcHRlKHBmbiwgcHJvdCkpOwogCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgZW50cnkpOwotCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyLCBlbnRyeSk7IC8qIFhYWDogd2h5IG5vdCBmb3IgaW5zZXJ0X3BhZ2U/ICovCisJdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHIsIHB0ZSk7IC8qIFhYWDogd2h5IG5vdCBmb3IgaW5zZXJ0X3BhZ2U/ICovCiAKIAlyZXR2YWwgPSAwOwogb3V0X3VubG9jazoKQEAgLTIxMTYsNyArMjExNiw3IEBACiAJCWVudHJ5ID0gcHRlX21reW91bmcob3JpZ19wdGUpOwogCQllbnRyeSA9IG1heWJlX21rd3JpdGUocHRlX21rZGlydHkoZW50cnkpLCB2bWEpOwogCQlpZiAocHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgYWRkcmVzcywgcGFnZV90YWJsZSwgZW50cnksMSkpCi0JCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgZW50cnkpOworCQkJdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIHBhZ2VfdGFibGUpOwogCQlyZXQgfD0gVk1fRkFVTFRfV1JJVEU7CiAJCWdvdG8gdW5sb2NrOwogCX0KQEAgLTIxODUsNyArMjE4NSw3IEBACiAJCSAqIG5ldyBwYWdlIHRvIGJlIG1hcHBlZCBkaXJlY3RseSBpbnRvIHRoZSBzZWNvbmRhcnkgcGFnZSB0YWJsZS4KIAkJICovCiAJCXNldF9wdGVfYXRfbm90aWZ5KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7Ci0JCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBlbnRyeSk7CisJCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwYWdlX3RhYmxlKTsKIAkJaWYgKG9sZF9wYWdlKSB7CiAJCQkvKgogCQkJICogT25seSBhZnRlciBzd2l0Y2hpbmcgdGhlIHB0ZSB0byB0aGUgbmV3IHBhZ2UgbWF5CkBAIC0yNjI5LDcgKzI2MjksNyBAQAogCX0KIAogCS8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSAtIGl0IHdhcyBub24tcHJlc2VudCBiZWZvcmUgKi8KLQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlKTsKKwl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcGFnZV90YWJsZSk7CiB1bmxvY2s6CiAJcHRlX3VubWFwX3VubG9jayhwYWdlX3RhYmxlLCBwdGwpOwogb3V0OgpAQCAtMjY5NCw3ICsyNjk0LDcgQEAKIAlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7CiAKIAkvKiBObyBuZWVkIHRvIGludmFsaWRhdGUgLSBpdCB3YXMgbm9uLXByZXNlbnQgYmVmb3JlICovCi0JdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIGVudHJ5KTsKKwl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcGFnZV90YWJsZSk7CiB1bmxvY2s6CiAJcHRlX3VubWFwX3VubG9jayhwYWdlX3RhYmxlLCBwdGwpOwogCXJldHVybiAwOwpAQCAtMjg1NSw3ICsyODU1LDcgQEAKIAkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcGFnZV90YWJsZSwgZW50cnkpOwogCiAJCS8qIG5vIG5lZWQgdG8gaW52YWxpZGF0ZTogYSBub3QtcHJlc2VudCBwYWdlIHdvbid0IGJlIGNhY2hlZCAqLwotCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgZW50cnkpOworCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcGFnZV90YWJsZSk7CiAJfSBlbHNlIHsKIAkJaWYgKGNoYXJnZWQpCiAJCQltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UocGFnZSk7CkBAIC0yOTkyLDcgKzI5OTIsNyBAQAogCX0KIAllbnRyeSA9IHB0ZV9ta3lvdW5nKGVudHJ5KTsKIAlpZiAocHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgYWRkcmVzcywgcHRlLCBlbnRyeSwgZmxhZ3MgJiBGQVVMVF9GTEFHX1dSSVRFKSkgewotCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgZW50cnkpOworCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBUaGlzIGlzIG5lZWRlZCBvbmx5IGZvciBwcm90ZWN0aW9uIGZhdWx0cyBidXQgdGhlIGFyY2ggY29kZQpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDg4MGJkNTkuLmVkYjYxMDEgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYworKysgYi9tbS9taWdyYXRlLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCQlwYWdlX2FkZF9maWxlX3JtYXAobmV3KTsKIAogCS8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSAtIGl0IHdhcyBub24tcHJlc2VudCBiZWZvcmUgKi8KLQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkciwgcHRlKTsKKwl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkciwgcHRlcCk7CiB1bmxvY2s6CiAJcHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpOwogb3V0OgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKaW5kZXggZmM2ZWMxZS4uMjgwNTI5YSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCkBAIC0zMTMsMTAgKzMxMywyMSBAQAogCXJldHVybiBoaWRwX3F1ZXVlX3JlcG9ydChzZXNzaW9uLCBidWYsIHJzaXplKTsKIH0KIAotc3RhdGljIGludCBoaWRwX291dHB1dF9yYXdfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBpbnQgaGlkcF9vdXRwdXRfcmF3X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgY291bnQsCisJCXVuc2lnbmVkIGNoYXIgcmVwb3J0X3R5cGUpCiB7Ci0JaWYgKGhpZHBfc2VuZF9jdHJsX21lc3NhZ2UoaGlkLT5kcml2ZXJfZGF0YSwKLQkJCUhJRFBfVFJBTlNfU0VUX1JFUE9SVCB8IEhJRFBfREFUQV9SVFlQRV9GRUFUVVJFLAorCXN3aXRjaCAocmVwb3J0X3R5cGUpIHsKKwljYXNlIEhJRF9GRUFUVVJFX1JFUE9SVDoKKwkJcmVwb3J0X3R5cGUgPSBISURQX1RSQU5TX1NFVF9SRVBPUlQgfCBISURQX0RBVEFfUlRZUEVfRkVBVFVSRTsKKwkJYnJlYWs7CisJY2FzZSBISURfT1VUUFVUX1JFUE9SVDoKKwkJcmVwb3J0X3R5cGUgPSBISURQX1RSQU5TX0RBVEEgfCBISURQX0RBVEFfUlRZUEVfT1VQVVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChoaWRwX3NlbmRfY3RybF9tZXNzYWdlKGhpZC0+ZHJpdmVyX2RhdGEsIHJlcG9ydF90eXBlLAogCQkJZGF0YSwgY291bnQpKQogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXR1cm4gY291bnQ7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IGVjODc0MjEuLmJiMWYxZGEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0yMDQxLDcgKzIwNDEsNyBAQAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAogCXR4cSA9IGRldl9waWNrX3R4KGRldiwgc2tiKTsKLQlxID0gcmN1X2RlcmVmZXJlbmNlKHR4cS0+cWRpc2MpOworCXEgPSByY3VfZGVyZWZlcmVuY2VfYmgodHhxLT5xZGlzYyk7CiAKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKIAlza2ItPnRjX3ZlcmQgPSBTRVRfVENfQVQoc2tiLT50Y192ZXJkLCBBVF9FR1JFU1MpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCAwOGRiN2I5Li4zNTQxYWE0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYworKysgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtODYsNyArODYsNyBAQAogCQlyZXR1cm4gZXJyOwogCiAJcmN1X3JlYWRfbG9ja19iaCgpOwotCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZShzay0+c2tfZmlsdGVyKTsKKwlmaWx0ZXIgPSByY3VfZGVyZWZlcmVuY2VfYmgoc2stPnNrX2ZpbHRlcik7CiAJaWYgKGZpbHRlcikgewogCQl1bnNpZ25lZCBpbnQgcGt0X2xlbiA9IHNrX3J1bl9maWx0ZXIoc2tiLCBmaWx0ZXItPmluc25zLAogCQkJCWZpbHRlci0+bGVuKTsKQEAgLTUyMSw3ICs1MjEsNyBAQAogCX0KIAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQlvbGRfZnAgPSByY3VfZGVyZWZlcmVuY2Uoc2stPnNrX2ZpbHRlcik7CisJb2xkX2ZwID0gcmN1X2RlcmVmZXJlbmNlX2JoKHNrLT5za19maWx0ZXIpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihzay0+c2tfZmlsdGVyLCBmcCk7CiAJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAKQEAgLTUzNiw3ICs1MzYsNyBAQAogCXN0cnVjdCBza19maWx0ZXIgKmZpbHRlcjsKIAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQlmaWx0ZXIgPSByY3VfZGVyZWZlcmVuY2Uoc2stPnNrX2ZpbHRlcik7CisJZmlsdGVyID0gcmN1X2RlcmVmZXJlbmNlX2JoKHNrLT5za19maWx0ZXIpOwogCWlmIChmaWx0ZXIpIHsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHNrLT5za19maWx0ZXIsIE5VTEwpOwogCQlza19maWx0ZXJfZGVsYXllZF91bmNoYXJnZShzaywgZmlsdGVyKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggNzk0YmNiOC4uNGM3ZDNmNiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTg5LDYgKzg5LDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MKHJ0bmxfaXNfbG9ja2VkKTsKIAorI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HCitpbnQgbG9ja2RlcF9ydG5sX2lzX2hlbGQodm9pZCkKK3sKKwlyZXR1cm4gbG9ja2RlcF9pc19oZWxkKCZydG5sX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0wobG9ja2RlcF9ydG5sX2lzX2hlbGQpOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORyAqLworCiBzdGF0aWMgc3RydWN0IHJ0bmxfbGluayAqcnRubF9tc2dfaGFuZGxlcnNbTlBST1RPXTsKIAogc3RhdGljIGlubGluZSBpbnQgcnRtX21zZ2luZGV4KGludCBtc2d0eXBlKQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IGUxZjZmMjIuLjMwNWNiYTQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYworKysgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTEwNzMsNyArMTA3Myw4IEBACiAJaWYgKHNrLT5za19kZXN0cnVjdCkKIAkJc2stPnNrX2Rlc3RydWN0KHNrKTsKIAotCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZShzay0+c2tfZmlsdGVyKTsKKwlmaWx0ZXIgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2soc2stPnNrX2ZpbHRlciwKKwkJCQkgICAgICAgYXRvbWljX3JlYWQoJnNrLT5za193bWVtX2FsbG9jKSA9PSAwKTsKIAlpZiAoZmlsdGVyKSB7CiAJCXNrX2ZpbHRlcl91bmNoYXJnZShzaywgZmlsdGVyKTsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHNrLT5za19maWx0ZXIsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCmluZGV4IGEwMzI4NDAuLmE3YmYwM2MgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fcm91dGUuYworKysgYi9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKQEAgLTExNTUsOCArMTE1NSw4IEBACiAKIAlpZiAoIShmbGFncyAmIE1TR19UUllIQVJEKSkgewogCQlyY3VfcmVhZF9sb2NrX2JoKCk7Ci0JCWZvcihydCA9IHJjdV9kZXJlZmVyZW5jZShkbl9ydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluKTsgcnQ7Ci0JCQlydCA9IHJjdV9kZXJlZmVyZW5jZShydC0+dS5kc3QuZG5fbmV4dCkpIHsKKwkJZm9yIChydCA9IHJjdV9kZXJlZmVyZW5jZV9iaChkbl9ydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluKTsgcnQ7CisJCQlydCA9IHJjdV9kZXJlZmVyZW5jZV9iaChydC0+dS5kc3QuZG5fbmV4dCkpIHsKIAkJCWlmICgoZmxwLT5mbGRfZHN0ID09IHJ0LT5mbC5mbGRfZHN0KSAmJgogCQkJICAgIChmbHAtPmZsZF9zcmMgPT0gcnQtPmZsLmZsZF9zcmMpICYmCiAJCQkgICAgKGZscC0+bWFyayA9PSBydC0+ZmwubWFyaykgJiYKQEAgLTE2MTgsOSArMTYxOCw5IEBACiAJCWlmIChoID4gc19oKQogCQkJc19pZHggPSAwOwogCQlyY3VfcmVhZF9sb2NrX2JoKCk7Ci0JCWZvcihydCA9IHJjdV9kZXJlZmVyZW5jZShkbl9ydF9oYXNoX3RhYmxlW2hdLmNoYWluKSwgaWR4ID0gMDsKKwkJZm9yKHJ0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKGRuX3J0X2hhc2hfdGFibGVbaF0uY2hhaW4pLCBpZHggPSAwOwogCQkJcnQ7Ci0JCQlydCA9IHJjdV9kZXJlZmVyZW5jZShydC0+dS5kc3QuZG5fbmV4dCksIGlkeCsrKSB7CisJCQlydCA9IHJjdV9kZXJlZmVyZW5jZV9iaChydC0+dS5kc3QuZG5fbmV4dCksIGlkeCsrKSB7CiAJCQlpZiAoaWR4IDwgc19pZHgpCiAJCQkJY29udGludWU7CiAJCQlza2JfZHN0X3NldChza2IsIGRzdF9jbG9uZSgmcnQtPnUuZHN0KSk7CkBAIC0xNjU0LDEyICsxNjU0LDEyIEBACiAKIAlmb3Iocy0+YnVja2V0ID0gZG5fcnRfaGFzaF9tYXNrOyBzLT5idWNrZXQgPj0gMDsgLS1zLT5idWNrZXQpIHsKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwotCQlydCA9IGRuX3J0X2hhc2hfdGFibGVbcy0+YnVja2V0XS5jaGFpbjsKKwkJcnQgPSByY3VfZGVyZWZlcmVuY2VfYmgoZG5fcnRfaGFzaF90YWJsZVtzLT5idWNrZXRdLmNoYWluKTsKIAkJaWYgKHJ0KQogCQkJYnJlYWs7CiAJCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCX0KLQlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKHJ0KTsKKwlyZXR1cm4gcnQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG5fcm91dGUgKmRuX3J0X2NhY2hlX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZG5fcm91dGUgKnJ0KQpAQCAtMTY3NCw3ICsxNjc0LDcgQEAKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwogCQlydCA9IGRuX3J0X2hhc2hfdGFibGVbcy0+YnVja2V0XS5jaGFpbjsKIAl9Ci0JcmV0dXJuIHJjdV9kZXJlZmVyZW5jZShydCk7CisJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9iaChydCk7CiB9CiAKIHN0YXRpYyB2b2lkICpkbl9ydF9jYWNoZV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggZDYyYjA1ZC4uNGYxMWZhYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0yODcsMTIgKzI4NywxMiBAQAogCQlpZiAoIXJ0X2hhc2hfdGFibGVbc3QtPmJ1Y2tldF0uY2hhaW4pCiAJCQljb250aW51ZTsKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwotCQlyID0gcmN1X2RlcmVmZXJlbmNlKHJ0X2hhc2hfdGFibGVbc3QtPmJ1Y2tldF0uY2hhaW4pOworCQlyID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0X2hhc2hfdGFibGVbc3QtPmJ1Y2tldF0uY2hhaW4pOwogCQl3aGlsZSAocikgewogCQkJaWYgKGRldl9uZXQoci0+dS5kc3QuZGV2KSA9PSBzZXFfZmlsZV9uZXQoc2VxKSAmJgogCQkJICAgIHItPnJ0X2dlbmlkID09IHN0LT5nZW5pZCkKIAkJCQlyZXR1cm4gcjsKLQkJCXIgPSByY3VfZGVyZWZlcmVuY2Uoci0+dS5kc3QucnRfbmV4dCk7CisJCQlyID0gcmN1X2RlcmVmZXJlbmNlX2JoKHItPnUuZHN0LnJ0X25leHQpOwogCQl9CiAJCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCX0KQEAgLTMxNCw3ICszMTQsNyBAQAogCQlyY3VfcmVhZF9sb2NrX2JoKCk7CiAJCXIgPSBydF9oYXNoX3RhYmxlW3N0LT5idWNrZXRdLmNoYWluOwogCX0KLQlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKHIpOworCXJldHVybiByY3VfZGVyZWZlcmVuY2VfYmgocik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICpydF9jYWNoZV9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKQEAgLTI2ODksOCArMjY4OSw4IEBACiAJaGFzaCA9IHJ0X2hhc2goZmxwLT5mbDRfZHN0LCBmbHAtPmZsNF9zcmMsIGZscC0+b2lmLCBydF9nZW5pZChuZXQpKTsKIAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQlmb3IgKHJ0aCA9IHJjdV9kZXJlZmVyZW5jZShydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluKTsgcnRoOwotCQlydGggPSByY3VfZGVyZWZlcmVuY2UocnRoLT51LmRzdC5ydF9uZXh0KSkgeworCWZvciAocnRoID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4pOyBydGg7CisJCXJ0aCA9IHJjdV9kZXJlZmVyZW5jZV9iaChydGgtPnUuZHN0LnJ0X25leHQpKSB7CiAJCWlmIChydGgtPmZsLmZsNF9kc3QgPT0gZmxwLT5mbDRfZHN0ICYmCiAJCSAgICBydGgtPmZsLmZsNF9zcmMgPT0gZmxwLT5mbDRfc3JjICYmCiAJCSAgICBydGgtPmZsLmlpZiA9PSAwICYmCkBAIC0zMDA4LDggKzMwMDgsOCBAQAogCQlpZiAoIXJ0X2hhc2hfdGFibGVbaF0uY2hhaW4pCiAJCQljb250aW51ZTsKIAkJcmN1X3JlYWRfbG9ja19iaCgpOwotCQlmb3IgKHJ0ID0gcmN1X2RlcmVmZXJlbmNlKHJ0X2hhc2hfdGFibGVbaF0uY2hhaW4pLCBpZHggPSAwOyBydDsKLQkJICAgICBydCA9IHJjdV9kZXJlZmVyZW5jZShydC0+dS5kc3QucnRfbmV4dCksIGlkeCsrKSB7CisJCWZvciAocnQgPSByY3VfZGVyZWZlcmVuY2VfYmgocnRfaGFzaF90YWJsZVtoXS5jaGFpbiksIGlkeCA9IDA7IHJ0OworCQkgICAgIHJ0ID0gcmN1X2RlcmVmZXJlbmNlX2JoKHJ0LT51LmRzdC5ydF9uZXh0KSwgaWR4KyspIHsKIAkJCWlmICghbmV0X2VxKGRldl9uZXQocnQtPnUuZHN0LmRldiksIG5ldCkgfHwgaWR4IDwgc19pZHgpCiAJCQkJY29udGludWU7CiAJCQlpZiAocnRfaXNfZXhwaXJlZChydCkpCmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCBmMTI2ZDE4Li45Mzk0NzFlIDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTUwOCw3ICs1MDgsNyBAQAogCXN0cnVjdCBza19maWx0ZXIgKmZpbHRlcjsKIAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQlmaWx0ZXIgPSByY3VfZGVyZWZlcmVuY2Uoc2stPnNrX2ZpbHRlcik7CisJZmlsdGVyID0gcmN1X2RlcmVmZXJlbmNlX2JoKHNrLT5za19maWx0ZXIpOwogCWlmIChmaWx0ZXIgIT0gTlVMTCkKIAkJcmVzID0gc2tfcnVuX2ZpbHRlcihza2IsIGZpbHRlci0+aW5zbnMsIGZpbHRlci0+bGVuKTsKIAlyY3VfcmVhZF91bmxvY2tfYmgoKTsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fYWxnby5jIGIvbmV0L3hmcm0veGZybV9hbGdvLmMKaW5kZXggNzQzYzAxMy4uOGI0ZDZlMyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9hbGdvLmMKKysrIGIvbmV0L3hmcm0veGZybV9hbGdvLmMKQEAgLTEyNSw2ICsxMjUsMjIgQEAKIAkJLnNhZGJfYWxnX21heGJpdHMgPSAyNTYKIAl9CiB9LAoreworCS5uYW1lID0gInJmYzQ1NDMoZ2NtKGFlcykpIiwKKworCS51aW5mbyA9IHsKKwkJLmFlYWQgPSB7CisJCQkuaWN2X3RydW5jYml0cyA9IDEyOCwKKwkJfQorCX0sCisKKwkuZGVzYyA9IHsKKwkJLnNhZGJfYWxnX2lkID0gU0FEQl9YX0VBTEdfTlVMTF9BRVNfR01BQywKKwkJLnNhZGJfYWxnX2l2bGVuID0gOCwKKwkJLnNhZGJfYWxnX21pbmJpdHMgPSAxMjgsCisJCS5zYWRiX2FsZ19tYXhiaXRzID0gMjU2CisJfQorfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgYWFsZ19saXN0W10gPSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzLy5naXRpZ25vcmUgYi9zY3JpcHRzLy5naXRpZ25vcmUKaW5kZXggNTJjYWI0NmEuLmM1ZDVkYjUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvLmdpdGlnbm9yZQorKysgYi9zY3JpcHRzLy5naXRpZ25vcmUKQEAgLTYsNSArNiw0IEBACiBwbm10b2xvZ28KIGJpbjJjCiB1bmlmZGVmCi1iaW5vZmZzZXQKIGloZXgyZncKZGlmZiAtLWdpdCBhL3NjcmlwdHMvYmlub2Zmc2V0LmMgYi9zY3JpcHRzL2Jpbm9mZnNldC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTJlMzliLi4wMDAwMDAwCi0tLSBhL3NjcmlwdHMvYmlub2Zmc2V0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogYmlub2Zmc2V0LmMKLSAqIChDKSAyMDAyIFJhbmR5IER1bmxhcCA8cmR1bmxhcEB4ZW5vdGltZS5uZXQ+Ci0KLSMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0jIGJpbm9mZnNldC5jOgotIyAtIHNlYXJjaGVzIGEgKGJpbmFyeSkgZmlsZSBmb3IgYSBzcGVjaWZpZWQgKGJpbmFyeSkgcGF0dGVybgotIyAtIHJldHVybnMgdGhlIG9mZnNldCBvZiB0aGUgbG9jYXRlZCBwYXR0ZXJuIG9yIH4wIGlmIG5vdCBmb3VuZAotIyAtIGV4aXRzIHdpdGggZXhpdCBzdGF0dXMgMCBub3JtYWxseSBvciBub24tMCBpZiBwYXR0ZXJuIGlzIG5vdCBmb3VuZAotIyAgIG9yIGFueSBvdGhlciBlcnJvciBvY2N1cnMuCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0KLSNkZWZpbmUgVkVSU0lPTgkJIjAuMSIKLSNkZWZpbmUgQlVGX1NJWkUJKDE2ICogMTAyNCkKLSNkZWZpbmUgUEFUX1NJWkUJMTAwCi0KLWNoYXIJCSpwcm9nbmFtZTsKLWNoYXIJCSppbnB1dG5hbWU7Ci1pbnQJCWlucHV0ZmQ7Ci11bnNpZ25lZCBpbnQJYml4OwkJCS8qIGJ1ZiBpbmRleCAqLwotdW5zaWduZWQgY2hhcglwYXR0ZXJucyBbUEFUX1NJWkVdID0gezB9OyAvKiBieXRlLXNpemVkIHBhdHRlcm4gYXJyYXkgKi8KLWludAkJcGF0X2xlbjsJCS8qIGFjdHVhbCBudW1iZXIgb2YgcGF0dGVybiBieXRlcyAqLwotdW5zaWduZWQgY2hhcgkqbWFkcjsJCQkvKiBtbWFwIGFkZHJlc3MgKi8KLXNpemVfdAkJZmlsZXNpemU7Ci1pbnQJCW51bV9tYXRjaGVzID0gMDsKLW9mZl90CQlmaXJzdGxvYyA9IDA7Ci0KLXZvaWQgdXNhZ2UgKHZvaWQpCi17Ci0JZnByaW50ZiAoc3RkZXJyLCAiJXMgdmVyLiAlc1xuIiwgcHJvZ25hbWUsIFZFUlNJT04pOwotCWZwcmludGYgKHN0ZGVyciwgInVzYWdlOiAgJXMgZmlsZW5hbWUgcGF0dGVybl9ieXRlc1xuIiwKLQkJCXByb2duYW1lKTsKLQlmcHJpbnRmIChzdGRlcnIsICIgICAgICAgIFtwcmludHMgbG9jYXRpb24gb2YgcGF0dGVybl9ieXRlcyBpbiBmaWxlXVxuIik7Ci0JZXhpdCAoMSk7Ci19Ci0KLXZvaWQgZ2V0X3BhdHRlcm4gKGludCBwYXRfY291bnQsIGNoYXIgKnBhdHMgW10pCi17Ci0JaW50IGl4LCBlcnIsIHRtcDsKLQotI2lmZGVmIERFQlVHCi0JZnByaW50ZiAoc3RkZXJyLCJnZXRfcGF0dGVybjogY291bnQgPSAlZFxuIiwgcGF0X2NvdW50KTsKLQlmb3IgKGl4ID0gMDsgaXggPCBwYXRfY291bnQ7IGl4KyspCi0JCWZwcmludGYgKHN0ZGVyciwgIiAgcGF0ICMgJWQ6ICBbJXNdXG4iLCBpeCwgcGF0c1tpeF0pOwotI2VuZGlmCi0KLQlmb3IgKGl4ID0gMDsgaXggPCBwYXRfY291bnQ7IGl4KyspIHsKLQkJdG1wID0gMDsKLQkJZXJyID0gc3NjYW5mIChwYXRzW2l4XSwgIiU1aSIsICZ0bXApOwotCQlpZiAoZXJyICE9IDEgfHwgdG1wID4gMHhmZikgewotCQkJZnByaW50ZiAoc3RkZXJyLCAicGF0dGVybiBvciB2YWx1ZSBlcnJvciBpbiBwYXR0ZXJuICMgJWQgWyVzXVxuIiwKLQkJCQkJaXgsIHBhdHNbaXhdKTsKLQkJCXVzYWdlICgpOwotCQl9Ci0JCXBhdHRlcm5zIFtpeF0gPSB0bXA7Ci0JfQotCXBhdF9sZW4gPSBwYXRfY291bnQ7Ci19Ci0KLXZvaWQgc2VhcmNoX3BhdHRlcm4gKHZvaWQpCi17Ci0JZm9yIChiaXggPSAwOyBiaXggPCBmaWxlc2l6ZTsgYml4KyspIHsKLQkJaWYgKG1hZHJbYml4XSA9PSBwYXR0ZXJuc1swXSkgewotCQkJaWYgKG1lbWNtcCAoJm1hZHJbYml4XSwgcGF0dGVybnMsIHBhdF9sZW4pID09IDApIHsKLQkJCQlpZiAobnVtX21hdGNoZXMgPT0gMCkKLQkJCQkJZmlyc3Rsb2MgPSBiaXg7Ci0JCQkJbnVtX21hdGNoZXMrKzsKLQkJCX0KLQkJfQotCX0KLX0KLQotI2lmZGVmIE5PVERFRgotc2l6ZV90IGdldF9maWxlc2l6ZSAoaW50IGZkKQotewotCW9mZl90IGVuZF9vZmYgPSBsc2VlayAoZmQsIDAsIFNFRUtfRU5EKTsKLQlsc2VlayAoZmQsIDAsIFNFRUtfU0VUKTsKLQlyZXR1cm4gKHNpemVfdCkgZW5kX29mZjsKLX0KLSNlbmRpZgotCi1zaXplX3QgZ2V0X2ZpbGVzaXplIChpbnQgZmQpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3Qgc3RhdCBzdGF0OwotCi0JZXJyID0gZnN0YXQgKGZkLCAmc3RhdCk7Ci0JZnByaW50ZiAoc3RkZXJyLCAiZmlsZXNpemU6ICVsZFxuIiwgZXJyIDwgMCA/IChsb25nKWVyciA6IHN0YXQuc3Rfc2l6ZSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JcmV0dXJuIChzaXplX3QpIHN0YXQuc3Rfc2l6ZTsKLX0KLQotaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2IFtdKQotewotCXByb2duYW1lID0gYXJndlswXTsKLQotCWlmIChhcmdjIDwgMykKLQkJdXNhZ2UgKCk7Ci0KLQlnZXRfcGF0dGVybiAoYXJnYyAtIDIsIGFyZ3YgKyAyKTsKLQotCWlucHV0bmFtZSA9IGFyZ3ZbMV07Ci0KLQlpbnB1dGZkID0gb3BlbiAoaW5wdXRuYW1lLCBPX1JET05MWSk7Ci0JaWYgKGlucHV0ZmQgPT0gLTEpIHsKLQkJZnByaW50ZiAoc3RkZXJyLCAiJXM6IGNhbm5vdCBvcGVuICclcydcbiIsCi0JCQkJcHJvZ25hbWUsIGlucHV0bmFtZSk7Ci0JCWV4aXQgKDMpOwotCX0KLQotCWZpbGVzaXplID0gZ2V0X2ZpbGVzaXplIChpbnB1dGZkKTsKLQotCW1hZHIgPSBtbWFwICgwLCBmaWxlc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgaW5wdXRmZCwgMCk7Ci0JaWYgKG1hZHIgPT0gTUFQX0ZBSUxFRCkgewotCQlmcHJpbnRmIChzdGRlcnIsICJtbWFwIGVycm9yID0gJWRcbiIsIGVycm5vKTsKLQkJY2xvc2UgKGlucHV0ZmQpOwotCQlleGl0ICg0KTsKLQl9Ci0KLQlzZWFyY2hfcGF0dGVybiAoKTsKLQotCWlmIChtdW5tYXAgKG1hZHIsIGZpbGVzaXplKSkKLQkJZnByaW50ZiAoc3RkZXJyLCAibXVubWFwIGVycm9yID0gJWRcbiIsIGVycm5vKTsKLQotCWlmIChjbG9zZSAoaW5wdXRmZCkpCi0JCWZwcmludGYgKHN0ZGVyciwgIiVzOiBlcnJvciAlZCBjbG9zaW5nICclcydcbiIsCi0JCQkJcHJvZ25hbWUsIGVycm5vLCBpbnB1dG5hbWUpOwotCi0JZnByaW50ZiAoc3RkZXJyLCAibnVtYmVyIG9mIHBhdHRlcm4gbWF0Y2hlcyA9ICVkXG4iLCBudW1fbWF0Y2hlcyk7Ci0JaWYgKG51bV9tYXRjaGVzID09IDApCi0JCWZpcnN0bG9jID0gfjA7Ci0JcHJpbnRmICgiJWxkXG4iLCBmaXJzdGxvYyk7Ci0JZnByaW50ZiAoc3RkZXJyLCAiJWxkXG4iLCBmaXJzdGxvYyk7Ci0KLQlleGl0IChudW1fbWF0Y2hlcyA/IDAgOiAyKTsKLX0KLQotLyogZW5kIGJpbm9mZnNldC5jICovCmRpZmYgLS1naXQgYS9zY3JpcHRzL2V4dHJhY3QtaWtjb25maWcgYi9zY3JpcHRzL2V4dHJhY3QtaWtjb25maWcKaW5kZXggZGUyMzNmZi4uMzdmMzBkMyAxMDA3NTUKLS0tIGEvc2NyaXB0cy9leHRyYWN0LWlrY29uZmlnCisrKyBiL3NjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZwpAQCAtMSw5MiArMSw1MyBAQAogIyEvYmluL3NoCi0jIGV4dHJhY3RzIC5jb25maWcgaW5mbyBmcm9tIGEgW2JdekltYWdlIGZpbGUKLSMgdXNlczogYmlub2Zmc2V0IChuZXcpLCBkZCwgemNhdCwgc3RyaW5ncywgZ3JlcAotIyAkYXJnMSBpcyBbYl16SW1hZ2UgZmlsZW5hbWUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBleHRyYWN0LWlrY29uZmlnIC0gRXh0cmFjdCB0aGUgLmNvbmZpZyBmaWxlIGZyb20gYSBrZXJuZWwgaW1hZ2UKKyMKKyMgVGhpcyB3aWxsIG9ubHkgd29yayB3aGVuIHRoZSBrZXJuZWwgd2FzIGNvbXBpbGVkIHdpdGggQ09ORklHX0lLQ09ORklHLgorIworIyBUaGUgb2JzY3VyZSB1c2Ugb2YgdGhlICJ0ciIgZmlsdGVyIGlzIHRvIHdvcmsgYXJvdW5kIG9sZGVyIHZlcnNpb25zIG9mCisjICJncmVwIiB0aGF0IHJlcG9ydCB0aGUgYnl0ZSBvZmZzZXQgb2YgdGhlIGxpbmUgaW5zdGVhZCBvZiB0aGUgcGF0dGVybi4KKyMKKyMgKGMpIDIwMDksIERpY2sgU3RyZWVmbGFuZCA8ZGlja0BzdHJlZWZsYW5kLm5ldD4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1iaW5vZmZzZXQ9Ii4vc2NyaXB0cy9iaW5vZmZzZXQiCi10ZXN0IC1lICRiaW5vZmZzZXQgfHwgY2MgLW8gJGJpbm9mZnNldCAuL3NjcmlwdHMvYmlub2Zmc2V0LmMgfHwgZXhpdCAxCitnejE9J1wwMzdcMjEzXDAxMCcKK2d6Mj0nMDEnCitjZjE9J0lLQ0ZHX1NUXDAzN1wyMTNcMDEwJworY2YyPScwMTIzNDU2Nzg5JwogCi1JS0NGR19TVD0iMHg0OSAweDRiIDB4NDMgMHg0NiAweDQ3IDB4NWYgMHg1MyAweDU0IgotSUtDRkdfRUQ9IjB4NDkgMHg0YiAweDQzIDB4NDYgMHg0NyAweDVmIDB4NDUgMHg0NCIKLWR1bXBfY29uZmlnKCkgewotICAgIGZpbGU9IiQxIgotCi0gICAgc3RhcnQ9YCRiaW5vZmZzZXQgJGZpbGUgJElLQ0ZHX1NUIDI+L2Rldi9udWxsYAotICAgIFsgIiQ/IiAhPSAiMCIgXSAmJiBzdGFydD0iLTEiCi0gICAgaWYgWyAiJHN0YXJ0IiAtZXEgIi0xIiBdOyB0aGVuCi0JcmV0dXJuCi0gICAgZmkKLSAgICBlbmQ9YCRiaW5vZmZzZXQgJGZpbGUgJElLQ0ZHX0VEIDI+L2Rldi9udWxsYAotICAgIFsgIiQ/IiAhPSAiMCIgXSAmJiBlbmQ9Ii0xIgotICAgIGlmIFsgIiRlbmQiIC1lcSAiLTEiIF07IHRoZW4KLQlyZXR1cm4KLSAgICBmaQotCi0gICAgc3RhcnQ9YGV4cHIgJHN0YXJ0ICsgOGAKLSAgICBzaXplPWBleHByICRlbmQgLSAkc3RhcnRgCi0KLSAgICBkZCBpZj0iJGZpbGUiIGlicz0xIHNraXA9IiRzdGFydCIgY291bnQ9IiRzaXplIiAyPi9kZXYvbnVsbCB8IHpjYXQKLQotICAgIGNsZWFuX3VwCi0gICAgZXhpdCAwCi19Ci0KLQotdXNhZ2UoKQorZHVtcF9jb25maWcoKQogewotCWVjaG8gIiAgdXNhZ2U6IGV4dHJhY3QtaWtjb25maWcgW2JdekltYWdlX2ZpbGVuYW1lIgotfQotCi1jbGVhbl91cCgpCi17Ci0JaWYgWyAiJFRNUEZJTEUiICE9ICIiIF07IHRoZW4KLQkJcm0gLWYgJFRNUEZJTEUKKwlpZglwb3M9YHRyICIkY2YxXG4kY2YyIiAiXG4kY2YyPSIgPCAiJDEiIHwgZ3JlcCAtYWJvICJeJGNmMiJgCisJdGhlbgorCQlwb3M9JHtwb3MlJToqfQorCQl0YWlsIC1jKyQoKCRwb3MrOCkpICIkMSIgfCB6Y2F0IC1xCisJCWV4aXQgMAogCWZpCiB9CiAKLWlmIFsgJCMgLWx0IDEgXQorIyBDaGVjayBpbnZvY2F0aW9uOgorbWU9JHswIyMqL30KK2ltZz0kMQoraWYJWyAkIyAtbmUgMSAtbyAhIC1zICIkaW1nIiBdCiB0aGVuCi0JdXNhZ2UKLQlleGl0IDEKKwllY2hvICJVc2FnZTogJG1lIDxrZXJuZWwtaW1hZ2U+IiA+JjIKKwlleGl0IDIKIGZpCiAKLVRNUEZJTEU9YG1rdGVtcCAtdCBpa2NvbmZpZy1YWFhYWFhgIHx8IGV4aXQgMQotaW1hZ2U9IiQxIgorIyBJbml0aWFsIGF0dGVtcHQgZm9yIHVuY29tcHJlc3NlZCBpbWFnZXMgb3Igb2JqZWN0czoKK2R1bXBfY29uZmlnICIkaW1nIgogCi0jIHZtbGludXg6IEF0dGVtcHQgdG8gZHVtcCB0aGUgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBmaWxlIGRpcmVjdGx5Ci1kdW1wX2NvbmZpZyAiJGltYWdlIgorIyBUaGF0IGRpZG4ndCB3b3JrLCBzbyBkZWNvbXByZXNzIGFuZCB0cnkgYWdhaW46Cit0bXA9L3RtcC9pa2NvbmZpZyQkCit0cmFwICJybSAtZiAkdG1wIiAwCitmb3IJcG9zIGluIGB0ciAiJGd6MVxuJGd6MiIgIlxuJGd6Mj0iIDwgIiRpbWciIHwgZ3JlcCAtYWJvICJeJGd6MiJgCitkbworCXBvcz0ke3BvcyUlOip9CisJdGFpbCAtYyskcG9zICIkaW1nIiB8IHpjYXQgMj4gL2Rldi9udWxsID4gJHRtcAorCWR1bXBfY29uZmlnICR0bXAKK2RvbmUKIAotR1pIRFIxPSIweDFmIDB4OGIgMHgwOCAweDAwIgotR1pIRFIyPSIweDFmIDB4OGIgMHgwOCAweDA4IgotCi1FTEZIRFI9IjB4N2YgMHg0NSAweDRjIDB4NDYiCi0KLSMgdm1saW51eC5nejogQ2hlY2sgZm9yIGEgY29tcHJlc3NlZCBpbWFnZXMKLW9mZj1gJGJpbm9mZnNldCAiJGltYWdlIiAkR1pIRFIxIDI+L2Rldi9udWxsYAotWyAiJD8iICE9ICIwIiBdICYmIG9mZj0iLTEiCi1pZiBbICIkb2ZmIiAtZXEgIi0xIiBdOyB0aGVuCi0Jb2ZmPWAkYmlub2Zmc2V0ICIkaW1hZ2UiICRHWkhEUjIgMj4vZGV2L251bGxgCi0JWyAiJD8iICE9ICIwIiBdICYmIG9mZj0iLTEiCi1maQotaWYgWyAiJG9mZiIgLWVxICIwIiBdOyB0aGVuCi0JemNhdCA8IiRpbWFnZSIgPiIkVE1QRklMRSIKLQlkdW1wX2NvbmZpZyAiJFRNUEZJTEUiCi1lbGlmIFsgIiRvZmYiIC1uZSAiLTEiIF07IHRoZW4KLQkoZGQgaWJzPSIkb2ZmIiBza2lwPTEgY291bnQ9MCAmJiBkZCBicz01MTJrKSA8IiRpbWFnZSIgMj4vZGV2L251bGwgfCBcCi0JCXpjYXQgPiIkVE1QRklMRSIKLQlkdW1wX2NvbmZpZyAiJFRNUEZJTEUiCi0KLSMgY2hlY2sgaWYgdGhpcyBpcyBzaW1wbHkgYW4gRUxGIGZpbGUKLWVsc2UKLQlvZmY9YCRiaW5vZmZzZXQgIiRpbWFnZSIgJEVMRkhEUiAyPi9kZXYvbnVsbGAKLQlbICIkPyIgIT0gIjAiIF0gJiYgb2ZmPSItMSIKLQlpZiBbICIkb2ZmIiAtZXEgIjAiIF07IHRoZW4KLQkJZHVtcF9jb25maWcgIiRpbWFnZSIKLQlmaQotZmkKLQotZWNobyAiRVJST1I6IFVuYWJsZSB0byBleHRyYWN0IGtlcm5lbCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiIKLWVjaG8gIiAgICAgICBUaGlzIGtlcm5lbCBpbWFnZSBtYXkgbm90IGhhdmUgdGhlIGNvbmZpZyBpbmZvLiIKLQotY2xlYW5fdXAKKyMgQmFpbCBvdXQ6CitlY2hvICIkbWU6IENhbm5vdCBmaW5kIGtlcm5lbCBjb25maWcuIiA+JjIKIGV4aXQgMQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlIGIvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCmluZGV4IDk5OWU4YTcuLjE4NmM0NjYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQorKysgYi9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKQEAgLTMwLDggKzMwLDE3IEBACiAJJChRKW1rZGlyIC1wIGluY2x1ZGUvZ2VuZXJhdGVkCiAJJDwgLXMgJChLY29uZmlnKQogCisjIGlmIG5vIHBhdGggaXMgZ2l2ZW4sIHRoZW4gdXNlIHNyYyBkaXJlY3RvcnkgdG8gZmluZCBmaWxlCitpZmRlZiBMU01PRAorTFNNT0RfRiA6PSAkKExTTU9EKQoraWZlcSAoJChmaW5kc3RyaW5nIC8sJChMU01PRCkpLCkKKyAgTFNNT0RfRiA6PSAkKG9ianRyZWUpLyQoTFNNT0QpCitlbmRpZgorZW5kaWYKKwogbG9jYWxtb2Rjb25maWc6ICQob2JqKS9zdHJlYW1saW5lX2NvbmZpZy5wbCAkKG9iaikvY29uZgotCSQoUSlwZXJsICQ8ICQoc3JjdHJlZSkgJChLY29uZmlnKSA+IC50bXAuY29uZmlnCisJJChRKW1rZGlyIC1wIGluY2x1ZGUvZ2VuZXJhdGVkCisJJChRKXBlcmwgJDwgJChzcmN0cmVlKSAkKEtjb25maWcpICQoTFNNT0RfRikgPiAudG1wLmNvbmZpZwogCSQoUSlpZiBbIC1mIC5jb25maWcgXTsgdGhlbiAJCQkJXAogCQkJY21wIC1zIC50bXAuY29uZmlnIC5jb25maWcgfHwJCVwKIAkJCShtdiAtZiAuY29uZmlnIC5jb25maWcub2xkLjE7CQlcCkBAIC00NSw3ICs1NCw4IEBACiAJJChRKXJtIC1mIC50bXAuY29uZmlnCiAKIGxvY2FseWVzY29uZmlnOiAkKG9iaikvc3RyZWFtbGluZV9jb25maWcucGwgJChvYmopL2NvbmYKLQkkKFEpcGVybCAkPCAkKHNyY3RyZWUpICQoS2NvbmZpZykgPiAudG1wLmNvbmZpZworCSQoUSlta2RpciAtcCBpbmNsdWRlL2dlbmVyYXRlZAorCSQoUSlwZXJsICQ8ICQoc3JjdHJlZSkgJChLY29uZmlnKSAkKExTTU9EX0YpID4gLnRtcC5jb25maWcKIAkkKFEpc2VkIC1pIHMvPW0vPXkvIC50bXAuY29uZmlnCiAJJChRKWlmIFsgLWYgLmNvbmZpZyBdOyB0aGVuIAkJCQlcCiAJCQljbXAgLXMgLnRtcC5jb25maWcgLmNvbmZpZyB8fAkJXApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsIGIvc2NyaXB0cy9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsCmluZGV4IDBkODAwODIuLmFmYmQ1NGEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9zdHJlYW1saW5lX2NvbmZpZy5wbAorKysgYi9zY3JpcHRzL2tjb25maWcvc3RyZWFtbGluZV9jb25maWcucGwKQEAgLTExMyw2ICsxMTMsNyBAQAogIyBHZXQgdGhlIGJ1aWxkIHNvdXJjZSBhbmQgdG9wIGxldmVsIEtjb25maWcgZmlsZSAocGFzc2VkIGluKQogbXkgJGtzb3VyY2UgPSAkQVJHVlswXTsKIG15ICRrY29uZmlnID0gJEFSR1ZbMV07CitteSAkbHNtb2RfZmlsZSA9ICRBUkdWWzJdOwogCiBteSBAbWFrZWZpbGVzID0gYGZpbmQgJGtzb3VyY2UgLW5hbWUgTWFrZWZpbGVgOwogbXkgJWRlcGVuZHM7CkBAIC0xMjEsNiArMTIyLDggQEAKIG15ICVvYmplY3RzOwogbXkgJHZhcjsKIG15ICRjb250ID0gMDsKK215ICRpZmxldmVsID0gMDsKK215IEBpZmRlcHM7CiAKICMgcHJldmVudCByZWN1cnNpb24KIG15ICVyZWFkX2tjb25maWdzOwpAQCAtMTQ2LDYgKzE0OSwxNSBAQAogCSAgICAkc3RhdGUgPSAiTkVXIjsKIAkgICAgJGNvbmZpZyA9ICQxOwogCisJICAgIGZvciAobXkgJGkgPSAwOyAkaSA8ICRpZmxldmVsOyAkaSsrKSB7CisJCWlmICgkaSkgeworCQkgICAgJGRlcGVuZHN7JGNvbmZpZ30gLj0gIiAiIC4gJGlmZGVwc1skaV07CisJCX0gZWxzZSB7CisJCSAgICAkZGVwZW5kc3skY29uZmlnfSA9ICRpZmRlcHNbJGldOworCQl9CisJCSRzdGF0ZSA9ICJERVAiOworCSAgICB9CisKIAkjIGNvbGxlY3QgdGhlIGRlcGVuZHMgZm9yIHRoZSBjb25maWcKIAl9IGVsc2lmICgkc3RhdGUgZXEgIk5FVyIgJiYgL15ccypkZXBlbmRzXHMrb25ccysoLiopJC8pIHsKIAkgICAgJHN0YXRlID0gIkRFUCI7CkBAIC0xNjYsNiArMTc4LDIxIEBACiAJICAgICMgbm90ZSBpZiB0aGUgY29uZmlnIGhhcyBhIHByb21wdAogCSAgICAkcHJvbXB0eyRjb25maWd9ID0gMTsKIAorCSMgQ2hlY2sgZm9yIGlmIHN0YXRlbWVudHMKKwl9IGVsc2lmICgvXmlmXHMrKC4qXFMpXHMqJC8pIHsKKwkgICAgbXkgJGRlcHMgPSAkMTsKKwkgICAgIyByZW1vdmUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgbm9uIHRleHQKKwkgICAgJGRlcHMgPX4gcy9eW15hLXpBLVowLTlfXSovLzsKKwkgICAgJGRlcHMgPX4gcy9bXmEtekEtWjAtOV9dKiQvLzsKKworCSAgICBteSBAZGVwcyA9IHNwbGl0IC9bXmEtekEtWjAtOV9dKy8sICRkZXBzOworCisJICAgICRpZmRlcHNbJGlmbGV2ZWwrK10gPSBqb2luICc6JywgQGRlcHM7CisKKwl9IGVsc2lmICgvXmVuZGlmLykgeworCisJICAgICRpZmxldmVsLS0gaWYgKCRpZmxldmVsKTsKKwogCSMgc3RvcCBvbiAiaGVscCIKIAl9IGVsc2lmICgvXlxzKmhlbHBccyokLykgewogCSAgICAkc3RhdGUgPSAiTk9ORSI7CkBAIC0yMzcsOCArMjY0LDM2IEBACiAKIG15ICVtb2R1bGVzOwogCi0jIHNlZSB3aGF0IG1vZHVsZXMgYXJlIGxvYWRlZCBvbiB0aGlzIHN5c3RlbQotb3BlbihMSU4sIi9zYmluL2xzbW9kfCIpIHx8IGRpZSAiQ2FudCBsc21vZCI7CitpZiAoZGVmaW5lZCgkbHNtb2RfZmlsZSkpIHsKKyAgICBpZiAoICEgLWYgJGxzbW9kX2ZpbGUpIHsKKwlkaWUgIiRsc21vZF9maWxlIG5vdCBmb3VuZCI7CisgICAgfQorICAgIGlmICggLXggJGxzbW9kX2ZpbGUpIHsKKwkjIHRoZSBmaWxlIGlzIGV4ZWN1dGFibGUsIHJ1biBpdAorCW9wZW4oTElOLCAiJGxzbW9kX2ZpbGV8Iik7CisgICAgfSBlbHNlIHsKKwkjIEp1c3QgcmVhZCB0aGUgY29udGVudHMKKwlvcGVuKExJTiwgIiRsc21vZF9maWxlIik7CisgICAgfQorfSBlbHNlIHsKKworICAgICMgc2VlIHdoYXQgbW9kdWxlcyBhcmUgbG9hZGVkIG9uIHRoaXMgc3lzdGVtCisgICAgbXkgJGxzbW9kOworCisgICAgZm9yZWFjaCAkZGlyICggKCIvc2JpbiIsICIvYmluIiwgIi91c3Ivc2JpbiIsICIvdXNyL2JpbiIpICkgeworCWlmICggLXggIiRkaXIvbHNtb2QiICkgeworCSAgICAkbHNtb2QgPSAiJGRpci9sc21vZCI7CisJICAgIGxhc3Q7CisJfQorfQorICAgIGlmICghZGVmaW5lZCgkbHNtb2QpKSB7CisJIyB0cnkganVzdCB0aGUgcGF0aAorCSRsc21vZCA9ICJsc21vZCI7CisgICAgfQorCisgICAgb3BlbihMSU4sIiRsc21vZHwiKSB8fCBkaWUgIkNhbiBub3QgY2FsbCBsc21vZCB3aXRoICRsc21vZCI7Cit9CisKIHdoaWxlICg8TElOPikgewogCW5leHQgaWYgKC9eTW9kdWxlLyk7ICAjIFNraXAgdGhlIGZpcnN0IGxpbmUuCiAJaWYgKC9eKFxTKykvKSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tlcm5lbC1kb2MgYi9zY3JpcHRzL2tlcm5lbC1kb2MKaW5kZXggMjQxMzEwZS4uMjA4YWQzYiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9rZXJuZWwtZG9jCisrKyBiL3NjcmlwdHMva2VybmVsLWRvYwpAQCAtMTMsOCArMTMsNiBAQAogIyMgVGhpcyBzb2Z0d2FyZSBmYWxscyB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICAgICAjIwogIyMgUGxlYXNlIHJlYWQgdGhlIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiAgICAgICAgICAgICAjIwogCi0jIHcuby4gMDMtMTEtMjAwMDogYWRkZWQgdGhlICctZmlsZWxpc3QnIG9wdGlvbi4KLQogIyAxOC8wMS8yMDAxIC0gCUNsZWFudXBzCiAjIAkJRnVuY3Rpb25zIHByb3RvdHlwZWQgYXMgZm9vKHZvaWQpIHNhbWUgYXMgZm9vKCkKICMgCQlTdG9wIGV2YWwnaW5nIHdoZXJlIHdlIGRvbid0IG5lZWQgdG8uCkBAIC0yNDUsNyArMjQzLDcgQEAKICMgY291bGQgY2F1c2UgInVzZSBvZiB1bmRlZmluZWQgdmFsdWUiIG9yIG90aGVyIGJ1Z3MuCiBteSAoJGZ1bmN0aW9uLCAlZnVuY3Rpb25fdGFibGUsICVwYXJhbWV0ZXJ0eXBlcywgJGRlY2xhcmF0aW9uX3B1cnBvc2UpOwogbXkgKCR0eXBlLCAkZGVjbGFyYXRpb25fbmFtZSwgJHJldHVybl90eXBlKTsKLW15ICgkbmV3c2VjdGlvbiwgJG5ld2NvbnRlbnRzLCAkcHJvdG90eXBlLCAkZmlsZWxpc3QsICRicmNvdW50LCAlc291cmNlX21hcCk7CitteSAoJG5ld3NlY3Rpb24sICRuZXdjb250ZW50cywgJHByb3RvdHlwZSwgJGJyY291bnQsICVzb3VyY2VfbWFwKTsKIAogaWYgKGRlZmluZWQoJEVOVnsnS0JVSUxEX1ZFUkJPU0UnfSkpIHsKIAkkdmVyYm9zZSA9ICIkRU5WeydLQlVJTERfVkVSQk9TRSd9IjsKQEAgLTMzOCw4ICszMzYsNiBAQAogCSR2ZXJib3NlID0gMTsKICAgICB9IGVsc2lmICgoJGNtZCBlcSAiLWgiKSB8fCAoJGNtZCBlcSAiLS1oZWxwIikpIHsKIAl1c2FnZSgpOwotICAgIH0gZWxzaWYgKCRjbWQgZXEgJy1maWxlbGlzdCcpIHsKLQkgICAgJGZpbGVsaXN0ID0gc2hpZnQgQEFSR1Y7CiAgICAgfSBlbHNpZiAoJGNtZCBlcSAnLW5vLWRvYy1zZWN0aW9ucycpIHsKIAkgICAgJG5vX2RvY19zZWN0aW9ucyA9IDE7CiAgICAgfQpAQCAtMTgxMSwxNCArMTgwNyw2IEBACiAJY2xvc2UoU09VUkNFX01BUCk7CiB9CiAKLWlmICgkZmlsZWxpc3QpIHsKLQlvcGVuKEZMSVNULCI8JGZpbGVsaXN0Iikgb3IgZGllICJDYW4ndCBvcGVuIGZpbGUgbGlzdCAkZmlsZWxpc3QiOwotCXdoaWxlKDxGTElTVD4pIHsKLQkJY2hvcDsKLQkJcHJvY2Vzc19maWxlKCRfKTsKLQl9Ci19Ci0KIGZvcmVhY2ggKEBBUkdWKSB7CiAgICAgY2hvbXA7CiAgICAgcHJvY2Vzc19maWxlKCRfKTsKQEAgLTIwMjMsNiArMjAxMSw4IEBACiAJcmV0dXJuOwogICAgIH0KIAorICAgICQuID0gMTsKKwogICAgICRzZWN0aW9uX2NvdW50ZXIgPSAwOwogICAgIHdoaWxlICg8SU4+KSB7CiAJaWYgKCRzdGF0ZSA9PSAwKSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbCBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCmluZGV4IGVhNmY2ZTMuLmYzYzljMGEgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCisrKyBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCkBAIC0xMzYsMTMgKzEzNiwxNCBAQAogICAgICAiLnRleHQudW5saWtlbHkiID0+IDEsCiApOwogCi0kb2JqZHVtcCA9ICJvYmpkdW1wIiBpZiAoKGxlbmd0aCAkb2JqZHVtcCkgPT0gMCk7Ci0kb2JqY29weSA9ICJvYmpjb3B5IiBpZiAoKGxlbmd0aCAkb2JqY29weSkgPT0gMCk7Ci0kY2MgPSAiZ2NjIiBpZiAoKGxlbmd0aCAkY2MpID09IDApOwotJGxkID0gImxkIiBpZiAoKGxlbmd0aCAkbGQpID09IDApOwotJG5tID0gIm5tIiBpZiAoKGxlbmd0aCAkbm0pID09IDApOwotJHJtID0gInJtIiBpZiAoKGxlbmd0aCAkcm0pID09IDApOwotJG12ID0gIm12IiBpZiAoKGxlbmd0aCAkbXYpID09IDApOworIyBOb3RlOiB3ZSBhcmUgbmljZSB0byBDLXByb2dyYW1tZXJzIGhlcmUsIHRodXMgd2Ugc2tpcCB0aGUgJ3x8PSctaWRpb20uCiskb2JqZHVtcCA9ICdvYmpkdW1wJyBpZiAoISRvYmpkdW1wKTsKKyRvYmpjb3B5ID0gJ29iamNvcHknIGlmICghJG9iamNvcHkpOworJGNjID0gJ2djYycgaWYgKCEkY2MpOworJGxkID0gJ2xkJyBpZiAoISRsZCk7Ciskbm0gPSAnbm0nIGlmICghJG5tKTsKKyRybSA9ICdybScgaWYgKCEkcm0pOworJG12ID0gJ212JyBpZiAoISRtdik7CiAKICNwcmludCBTVERFUlIgInJ1bm5pbmc6ICRQICckYXJjaCcgJyRvYmpkdW1wJyAnJG9iamNvcHknICckY2MnICckbGQnICIgLgogIyAgICAiJyRubScgJyRybScgJyRtdicgJyRpbnB1dGZpbGUnXG4iOwpAQCAtNDMyLDE0ICs0MzMsMTQgQEAKIAogICAgICMgTG9vcCB0aHJvdWdoIGFsbCB0aGUgbWNvdW50IGNhbGxlciBvZmZzZXRzIGFuZCBwcmludCBhIHJlZmVyZW5jZQogICAgICMgdG8gdGhlIGNhbGxlciBiYXNlZCBmcm9tIHRoZSByZWZfZnVuYy4KLSAgICBmb3IgKG15ICRpPTA7ICRpIDw9ICQjb2Zmc2V0czsgJGkrKykgewotCWlmICghJG9wZW5lZCkgewotCSAgICBvcGVuKEZJTEUsICI+JG1jb3VudF9zIikgfHwgZGllICJjYW4ndCBjcmVhdGUgJG1jb3VudF9zXG4iOwotCSAgICAkb3BlbmVkID0gMTsKLQkgICAgcHJpbnQgRklMRSAiXHQuc2VjdGlvbiAkbWNvdW50X3NlY3Rpb24sXCJhXCIsJHNlY3Rpb25fdHlwZVxuIjsKLQkgICAgcHJpbnQgRklMRSAiXHQuYWxpZ24gJGFsaWdubWVudFxuIiBpZiAoZGVmaW5lZCgkYWxpZ25tZW50KSk7Ci0JfQotCXByaW50ZiBGSUxFICJcdCVzICVzICsgJWRcbiIsICR0eXBlLCAkcmVmX2Z1bmMsICRvZmZzZXRzWyRpXSAtICRvZmZzZXQ7CisgICAgaWYgKCEkb3BlbmVkKSB7CisJb3BlbihGSUxFLCAiPiRtY291bnRfcyIpIHx8IGRpZSAiY2FuJ3QgY3JlYXRlICRtY291bnRfc1xuIjsKKwkkb3BlbmVkID0gMTsKKwlwcmludCBGSUxFICJcdC5zZWN0aW9uICRtY291bnRfc2VjdGlvbixcImFcIiwkc2VjdGlvbl90eXBlXG4iOworCXByaW50IEZJTEUgIlx0LmFsaWduICRhbGlnbm1lbnRcbiIgaWYgKGRlZmluZWQoJGFsaWdubWVudCkpOworICAgIH0KKyAgICBmb3JlYWNoIG15ICRjdXJfb2Zmc2V0IChAb2Zmc2V0cykgeworCXByaW50ZiBGSUxFICJcdCVzICVzICsgJWRcbiIsICR0eXBlLCAkcmVmX2Z1bmMsICRjdXJfb2Zmc2V0IC0gJG9mZnNldDsKICAgICB9CiB9CiAKQEAgLTQ3NiwxMSArNDc3LDcgQEAKIAkkcmVhZF9oZWFkZXJzID0gMDsKIAogCSMgT25seSByZWNvcmQgdGV4dCBzZWN0aW9ucyB0aGF0IHdlIGtub3cgYXJlIHNhZmUKLQlpZiAoZGVmaW5lZCgkdGV4dF9zZWN0aW9uc3skMX0pKSB7Ci0JICAgICRyZWFkX2Z1bmN0aW9uID0gMTsKLQl9IGVsc2UgewotCSAgICAkcmVhZF9mdW5jdGlvbiA9IDA7Ci0JfQorCSRyZWFkX2Z1bmN0aW9uID0gZGVmaW5lZCgkdGV4dF9zZWN0aW9uc3skMX0pOwogCSMgcHJpbnQgb3V0IGFueSByZWNvcmRlZCBvZmZzZXRzCiAJdXBkYXRlX2Z1bmNzKCk7CiAKQEAgLTUxNCw3ICs1MTEsNyBAQAogICAgIH0KICAgICAjIGlzIHRoaXMgYSBjYWxsIHNpdGUgdG8gbWNvdW50PyBJZiBzbywgcmVjb3JkIGl0IHRvIHByaW50IGxhdGVyCiAgICAgaWYgKCR0ZXh0X2ZvdW5kICYmIC8kbWNvdW50X3JlZ2V4LykgewotCSRvZmZzZXRzWyQjb2Zmc2V0cyArIDFdID0gaGV4ICQxOworCXB1c2goQG9mZnNldHMsIGhleCAkMSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMKaW5kZXggMGQ4M2VkYy4uMmQ0ZDA1ZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaWludC5jCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYwpAQCAtNjMsMTIgKzYzLDExIEBACiAJc3Bpbl9sb2NrKCZpbWFfaWludF9sb2NrKTsKIAlyYyA9IHJhZGl4X3RyZWVfaW5zZXJ0KCZpbWFfaWludF9zdG9yZSwgKHVuc2lnbmVkIGxvbmcpaW5vZGUsIGlpbnQpOwogCXNwaW5fdW5sb2NrKCZpbWFfaWludF9sb2NrKTsKKwlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CiBvdXQ6CiAJaWYgKHJjIDwgMCkKIAkJa21lbV9jYWNoZV9mcmVlKGlpbnRfY2FjaGUsIGlpbnQpOwogCi0JcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwotCiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2djLmMgYi9zZWN1cml0eS9rZXlzL2djLmMKaW5kZXggNDc3MGJlMy4uMTk5MDIzMSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9nYy5jCisrKyBiL3NlY3VyaXR5L2tleXMvZ2MuYwpAQCAtNzcsNyArNzcsOCBAQAogCQlnb3RvIGRvbnRfZ2M7CiAKIAkvKiBzY2FuIHRoZSBrZXlyaW5nIGxvb2tpbmcgZm9yIGRlYWQga2V5cyAqLwotCWtsaXN0ID0gcmN1X2RlcmVmZXJlbmNlKGtleXJpbmctPnBheWxvYWQuc3Vic2NyaXB0aW9ucyk7CisJa2xpc3QgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2soa2V5cmluZy0+cGF5bG9hZC5zdWJzY3JpcHRpb25zLAorCQkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZCgma2V5X3NlcmlhbF9sb2NrKSk7CiAJaWYgKCFrbGlzdCkKIAkJZ290byBkb250X2djOwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleXJpbmcuYyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCmluZGV4IDhlYzAyNzQuLmU4MTRkMjEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCisrKyBiL3NlY3VyaXR5L2tleXMva2V5cmluZy5jCkBAIC0xNTEsNyArMTUxLDkgQEAKIAkJd3JpdGVfdW5sb2NrKCZrZXlyaW5nX25hbWVfbG9jayk7CiAJfQogCi0Ja2xpc3QgPSByY3VfZGVyZWZlcmVuY2Uoa2V5cmluZy0+cGF5bG9hZC5zdWJzY3JpcHRpb25zKTsKKwlrbGlzdCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhrZXlyaW5nLT5wYXlsb2FkLnN1YnNjcmlwdGlvbnMsCisJCQkJICAgICAgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwKKwkJCQkgICAgICBhdG9taWNfcmVhZCgma2V5cmluZy0+dXNhZ2UpID09IDApOwogCWlmIChrbGlzdCkgewogCQlmb3IgKGxvb3AgPSBrbGlzdC0+bmtleXMgLSAxOyBsb29wID49IDA7IGxvb3AtLSkKIAkJCWtleV9wdXQoa2xpc3QtPmtleXNbbG9vcF0pOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9lYml0bWFwLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYwppbmRleCA2OGM3MzQ4Li4wNGI2MTQ1IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJCQljbWFwX2lkeCA9IGRlbHRhIC8gTkVUTEJMX0NBVE1BUF9NQVBTSVpFOwogCQkJY21hcF9zZnQgPSBkZWx0YSAlIE5FVExCTF9DQVRNQVBfTUFQU0laRTsKIAkJCWNfaXRlci0+Yml0bWFwW2NtYXBfaWR4XQotCQkJCXw9IGVfaXRlci0+bWFwc1tjbWFwX2lkeF0gPDwgY21hcF9zZnQ7CisJCQkJfD0gZV9pdGVyLT5tYXBzW2ldIDw8IGNtYXBfc2Z0OwogCQl9CiAJCWVfaXRlciA9IGVfaXRlci0+bmV4dDsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9hb2EvZmFicmljcy9sYXlvdXQuYyBiL3NvdW5kL2FvYS9mYWJyaWNzL2xheW91dC5jCmluZGV4IDU4Njk2NWYuLjdhNDM3ZGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9mYWJyaWNzL2xheW91dC5jCisrKyBiL3NvdW5kL2FvYS9mYWJyaWNzL2xheW91dC5jCkBAIC03NjgsNyArNzY4LDcgQEAKIAkJCQkicmVxdWlyZWQgcHJvcGVydHkgJXMgbm90IHByZXNlbnRcbiIsIHByb3BuYW1lKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9Ci0JCWlmICgqcmVmICE9IGNvZGVjLT5ub2RlLT5saW51eF9waGFuZGxlKSB7CisJCWlmICgqcmVmICE9IGNvZGVjLT5ub2RlLT5waGFuZGxlKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJzbmQtYW9hLWZhYnJpYy1sYXlvdXQ6ICIKIAkJCQkiJXMgZG9lc24ndCBtYXRjaCFcbiIsIHByb3BuYW1lKTsKIAkJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9jb250cm9sLmMgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwppbmRleCAyNjhhYjc0Li40MzljZTY0IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2NvbnRyb2wuYworKysgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwpAQCAtMjM3LDggKzIzNyw5IEBACiAJYWNjZXNzID0gbmNvbnRyb2wtPmFjY2VzcyA9PSAwID8gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSA6CiAJCSAobmNvbnRyb2wtPmFjY2VzcyAmIChTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFfAogCQkJCSAgICAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRXwKLQkJIAkJICAgICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEV1JJVEV8Ci0JCSAJCSAgICAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfQ0FMTEJBQ0spKTsKKwkJCQkgICAgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQURXUklURXwKKwkJCQkgICAgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX0NPTU1BTkR8CisJCQkJICAgICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9DQUxMQkFDSykpOwogCWtjdGwuaW5mbyA9IG5jb250cm9sLT5pbmZvOwogCWtjdGwuZ2V0ID0gbmNvbnRyb2wtPmdldDsKIAlrY3RsLnB1dCA9IG5jb250cm9sLT5wdXQ7CkBAIC0xMDk5LDcgKzExMDAsNyBAQAogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bHYsIF90bHYsIHNpemVvZih0bHYpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKHRsdi5sZW5ndGggPCBzaXplb2YodW5zaWduZWQgaW50KSAqIDMpCisJaWYgKHRsdi5sZW5ndGggPCBzaXplb2YodW5zaWduZWQgaW50KSAqIDIpCiAJCXJldHVybiAtRUlOVkFMOwogCWRvd25fcmVhZCgmY2FyZC0+Y29udHJvbHNfcndzZW0pOwogCWtjdGwgPSBzbmRfY3RsX2ZpbmRfbnVtaWQoY2FyZCwgdGx2Lm51bWlkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvbWlzYy5jIGIvc291bmQvY29yZS9taXNjLmMKaW5kZXggMjNhMDMyYy4uM2RhNGY5MiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9taXNjLmMKKysrIGIvc291bmQvY29yZS9taXNjLmMKQEAgLTEwMSw2ICsxMDEsMzUgQEAKICNpZmRlZiBDT05GSUdfUENJCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAvKioKKyAqIHNuZF9wY2lfcXVpcmtfbG9va3VwX2lkIC0gbG9vayB1cCBhIFBDSSBTU0lEIHF1aXJrIGxpc3QKKyAqIEB2ZW5kb3I6IFBDSSBTU1YgaWQKKyAqIEBkZXZpY2U6IFBDSSBTU0QgaWQKKyAqIEBsaXN0OiBxdWlyayBsaXN0LCB0ZXJtaW5hdGVkIGJ5IGEgbnVsbCBlbnRyeQorICoKKyAqIExvb2sgdGhyb3VnaCB0aGUgZ2l2ZW4gcXVpcmsgbGlzdCBhbmQgZmluZHMgYSBtYXRjaGluZyBlbnRyeQorICogd2l0aCB0aGUgc2FtZSBQQ0kgU1NJRC4gIFdoZW4gc3ViZGV2aWNlIGlzIDAsIGFsbCBzdWJkZXZpY2UKKyAqIHZhbHVlcyBtYXkgbWF0Y2guCisgKgorICogUmV0dXJucyB0aGUgbWF0Y2hlZCBlbnRyeSBwb2ludGVyLCBvciBOVUxMIGlmIG5vdGhpbmcgbWF0Y2hlZC4KKyAqLworY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKgorc25kX3BjaV9xdWlya19sb29rdXBfaWQodTE2IHZlbmRvciwgdTE2IGRldmljZSwKKwkJCWNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICpsaXN0KQoreworCWNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICpxOworCisJZm9yIChxID0gbGlzdDsgcS0+c3VidmVuZG9yOyBxKyspIHsKKwkJaWYgKHEtPnN1YnZlbmRvciAhPSB2ZW5kb3IpCisJCQljb250aW51ZTsKKwkJaWYgKCFxLT5zdWJkZXZpY2UgfHwKKwkJICAgIChkZXZpY2UgJiBxLT5zdWJkZXZpY2VfbWFzaykgPT0gcS0+c3ViZGV2aWNlKQorCQkJcmV0dXJuIHE7CisJfQorCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChzbmRfcGNpX3F1aXJrX2xvb2t1cF9pZCk7CisKKy8qKgogICogc25kX3BjaV9xdWlya19sb29rdXAgLSBsb29rIHVwIGEgUENJIFNTSUQgcXVpcmsgbGlzdAogICogQHBjaTogcGNpX2RldiBoYW5kbGUKICAqIEBsaXN0OiBxdWlyayBsaXN0LCB0ZXJtaW5hdGVkIGJ5IGEgbnVsbCBlbnRyeQpAQCAtMTE0LDE2ICsxNDMsOSBAQAogY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKgogc25kX3BjaV9xdWlya19sb29rdXAoc3RydWN0IHBjaV9kZXYgKnBjaSwgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKmxpc3QpCiB7Ci0JY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKnE7Ci0KLQlmb3IgKHEgPSBsaXN0OyBxLT5zdWJ2ZW5kb3I7IHErKykgewotCQlpZiAocS0+c3VidmVuZG9yICE9IHBjaS0+c3Vic3lzdGVtX3ZlbmRvcikKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXEtPnN1YmRldmljZSB8fAotCQkgICAgKHBjaS0+c3Vic3lzdGVtX2RldmljZSAmIHEtPnN1YmRldmljZV9tYXNrKSA9PSBxLT5zdWJkZXZpY2UpCi0JCQlyZXR1cm4gcTsKLQl9Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHNuZF9wY2lfcXVpcmtfbG9va3VwX2lkKHBjaS0+c3Vic3lzdGVtX3ZlbmRvciwKKwkJCQkgICAgICAgcGNpLT5zdWJzeXN0ZW1fZGV2aWNlLAorCQkJCSAgICAgICBsaXN0KTsKIH0KIEVYUE9SVF9TWU1CT0woc25kX3BjaV9xdWlya19sb29rdXApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKaW5kZXggZDljOTYzNS4uODJkNGUzMyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYwpAQCAtNjMyLDYgKzYzMiwxMiBAQAogCXJldHVybiBieXRlc190b19mcmFtZXMocnVudGltZSwgKGJ1ZmZlcl9zaXplICogYnl0ZXMpIC8gcnVudGltZS0+b3NzLmJ1ZmZlcl9ieXRlcyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUKK3NuZF9wY21fdWZyYW1lc190IGdldF9od19wdHJfcGVyaW9kKHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCit7CisJcmV0dXJuIHJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQ7Cit9CisKIC8qIGRlZmluZSBleHRlbmRlZCBmb3JtYXRzIGluIHRoZSByZWNlbnQgT1NTIHZlcnNpb25zIChpZiBhbnkpICovCiAvKiBsaW5lYXIgZm9ybWF0cyAqLwogI2RlZmluZSBBRk1UX1MzMl9MRSAgICAgIDB4MDAwMDEwMDAKQEAgLTExMDIsNyArMTEwOCw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCXJ1bnRpbWUtPm9zcy5wcmVwYXJlID0gMDsKLQlydW50aW1lLT5vc3MucHJldl9od19wdHJfaW50ZXJydXB0ID0gMDsKKwlydW50aW1lLT5vc3MucHJldl9od19wdHJfcGVyaW9kID0gMDsKIAlydW50aW1lLT5vc3MucGVyaW9kX3B0ciA9IDA7CiAJcnVudGltZS0+b3NzLmJ1ZmZlcl91c2VkID0gMDsKIApAQCAtMTk1MCw3ICsxOTU2LDggQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCBzbmRfcGNtX29zc19zaW11bGF0ZV9maWxsKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBzbmRfcGNtX3VmcmFtZXNfdCBod19wdHIpCitzdGF0aWMgdm9pZCBzbmRfcGNtX29zc19zaW11bGF0ZV9maWxsKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgIHNuZF9wY21fdWZyYW1lc190IGh3X3B0cikKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXNuZF9wY21fdWZyYW1lc190IGFwcGxfcHRyOwpAQCAtMTk4Niw3ICsxOTkzLDggQEAKIAkJCWlmIChydW50aW1lLT5vc3MudHJpZ2dlcikKIAkJCQlnb3RvIF9za2lwMTsKIAkJCWlmIChhdG9taWNfcmVhZCgmcHN1YnN0cmVhbS0+bW1hcF9jb3VudCkpCi0JCQkJc25kX3BjbV9vc3Nfc2ltdWxhdGVfZmlsbChwc3Vic3RyZWFtLCBydW50aW1lLT5od19wdHJfaW50ZXJydXB0KTsKKwkJCQlzbmRfcGNtX29zc19zaW11bGF0ZV9maWxsKHBzdWJzdHJlYW0sCisJCQkJCQlnZXRfaHdfcHRyX3BlcmlvZChydW50aW1lKSk7CiAJCQlydW50aW1lLT5vc3MudHJpZ2dlciA9IDE7CiAJCQlydW50aW1lLT5zdGFydF90aHJlc2hvbGQgPSAxOwogCQkJY21kID0gU05EUlZfUENNX0lPQ1RMX1NUQVJUOwpAQCAtMjEwNSwxMSArMjExMywxMiBAQAogCWluZm8ucHRyID0gc25kX3BjbV9vc3NfYnl0ZXMoc3Vic3RyZWFtLCBydW50aW1lLT5zdGF0dXMtPmh3X3B0ciAlIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKTsKIAlpZiAoYXRvbWljX3JlYWQoJnN1YnN0cmVhbS0+bW1hcF9jb3VudCkpIHsKIAkJc25kX3BjbV9zZnJhbWVzX3QgbjsKLQkJbiA9IChkZWxheSA9IHJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQpIC0gcnVudGltZS0+b3NzLnByZXZfaHdfcHRyX2ludGVycnVwdDsKKwkJZGVsYXkgPSBnZXRfaHdfcHRyX3BlcmlvZChydW50aW1lKTsKKwkJbiA9IGRlbGF5IC0gcnVudGltZS0+b3NzLnByZXZfaHdfcHRyX3BlcmlvZDsKIAkJaWYgKG4gPCAwKQogCQkJbiArPSBydW50aW1lLT5ib3VuZGFyeTsKIAkJaW5mby5ibG9ja3MgPSBuIC8gcnVudGltZS0+cGVyaW9kX3NpemU7Ci0JCXJ1bnRpbWUtPm9zcy5wcmV2X2h3X3B0cl9pbnRlcnJ1cHQgPSBkZWxheTsKKwkJcnVudGltZS0+b3NzLnByZXZfaHdfcHRyX3BlcmlvZCA9IGRlbGF5OwogCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKIAkJCXNuZF9wY21fb3NzX3NpbXVsYXRlX2ZpbGwoc3Vic3RyZWFtLCBkZWxheSk7CiAJCWluZm8uYnl0ZXMgPSBzbmRfcGNtX29zc19ieXRlcyhzdWJzdHJlYW0sIHJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyKSAmIElOVF9NQVg7CkBAIC0yNjczLDE4ICsyNjgyLDIyIEBACiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlpZiAoYXRvbWljX3JlYWQoJnN1YnN0cmVhbS0+bW1hcF9jb3VudCkpCi0JCXJldHVybiBydW50aW1lLT5vc3MucHJldl9od19wdHJfaW50ZXJydXB0ICE9IHJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQ7CisJCXJldHVybiBydW50aW1lLT5vc3MucHJldl9od19wdHJfcGVyaW9kICE9CisJCQkJCQlnZXRfaHdfcHRyX3BlcmlvZChydW50aW1lKTsKIAllbHNlCi0JCXJldHVybiBzbmRfcGNtX3BsYXliYWNrX2F2YWlsKHJ1bnRpbWUpID49IHJ1bnRpbWUtPm9zcy5wZXJpb2RfZnJhbWVzOworCQlyZXR1cm4gc25kX3BjbV9wbGF5YmFja19hdmFpbChydW50aW1lKSA+PQorCQkJCQkJcnVudGltZS0+b3NzLnBlcmlvZF9mcmFtZXM7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3BjbV9vc3NfY2FwdHVyZV9yZWFkeShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCWlmIChhdG9taWNfcmVhZCgmc3Vic3RyZWFtLT5tbWFwX2NvdW50KSkKLQkJcmV0dXJuIHJ1bnRpbWUtPm9zcy5wcmV2X2h3X3B0cl9pbnRlcnJ1cHQgIT0gcnVudGltZS0+aHdfcHRyX2ludGVycnVwdDsKKwkJcmV0dXJuIHJ1bnRpbWUtPm9zcy5wcmV2X2h3X3B0cl9wZXJpb2QgIT0KKwkJCQkJCWdldF9od19wdHJfcGVyaW9kKHJ1bnRpbWUpOwogCWVsc2UKLQkJcmV0dXJuIHNuZF9wY21fY2FwdHVyZV9hdmFpbChydW50aW1lKSA+PSBydW50aW1lLT5vc3MucGVyaW9kX2ZyYW1lczsKKwkJcmV0dXJuIHNuZF9wY21fY2FwdHVyZV9hdmFpbChydW50aW1lKSA+PQorCQkJCQkJcnVudGltZS0+b3NzLnBlcmlvZF9mcmFtZXM7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc25kX3BjbV9vc3NfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbS5jIGIvc291bmQvY29yZS9wY20uYwppbmRleCA2ODg0YWUwLi4wZDQyOGQwIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtLmMKQEAgLTg5NCw2ICs4OTQsNyBAQAogCW1lbXNldCgodm9pZCopcnVudGltZS0+Y29udHJvbCwgMCwgc2l6ZSk7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZydW50aW1lLT5zbGVlcCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcnVudGltZS0+dHNsZWVwKTsKIAogCXJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPSBTTkRSVl9QQ01fU1RBVEVfT1BFTjsKIApAQCAtOTIxLDYgKzkyMiwxMCBAQAogCXNuZF9mcmVlX3BhZ2VzKCh2b2lkKilydW50aW1lLT5jb250cm9sLAogCQkgICAgICAgUEFHRV9BTElHTihzaXplb2Yoc3RydWN0IHNuZF9wY21fbW1hcF9jb250cm9sKSkpOwogCWtmcmVlKHJ1bnRpbWUtPmh3X2NvbnN0cmFpbnRzLnJ1bGVzKTsKKyNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCisJaWYgKHJ1bnRpbWUtPmh3cHRyX2xvZykKKwkJa2ZyZWUocnVudGltZS0+aHdwdHJfbG9nKTsKKyNlbmRpZgogCWtmcmVlKHJ1bnRpbWUpOwogCXN1YnN0cmVhbS0+cnVudGltZSA9IE5VTEw7CiAJcHV0X3BpZChzdWJzdHJlYW0tPnBpZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9saWIuYyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCmluZGV4IGEyNzU0NWIyLi5iNTQ2YWMyIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9saWIuYworKysgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwpAQCAtMTI2LDE3ICsxMjYsNiBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKLSNkZWZpbmUgeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIG1hc2spCSgoc3Vic3RyZWFtKS0+cHN0ci0+eHJ1bl9kZWJ1ZyAmIChtYXNrKSkKLSNlbHNlCi0jZGVmaW5lIHhydW5fZGVidWcoc3Vic3RyZWFtLCBtYXNrKQkwCi0jZW5kaWYKLQotI2RlZmluZSBkdW1wX3N0YWNrX29uX3hydW4oc3Vic3RyZWFtKSBkbyB7CQlcCi0JCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgMikpCQlcCi0JCQlkdW1wX3N0YWNrKCk7CQkJXAotCX0gd2hpbGUgKDApCi0KIHN0YXRpYyB2b2lkIHBjbV9kZWJ1Z19uYW1lKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJICAgY2hhciAqbmFtZSwgc2l6ZV90IGxlbikKIHsKQEAgLTE0Nyw2ICsxMzYsMjQgQEAKIAkJIHN1YnN0cmVhbS0+bnVtYmVyKTsKIH0KIAorI2RlZmluZSBYUlVOX0RFQlVHX0JBU0lDCSgxPDwwKQorI2RlZmluZSBYUlVOX0RFQlVHX1NUQUNLCSgxPDwxKQkvKiBkdW1wIGFsc28gc3RhY2sgKi8KKyNkZWZpbmUgWFJVTl9ERUJVR19KSUZGSUVTQ0hFQ0sJKDE8PDIpCS8qIGRvIGppZmZpZXMgY2hlY2sgKi8KKyNkZWZpbmUgWFJVTl9ERUJVR19QRVJJT0RVUERBVEUJKDE8PDMpCS8qIGZ1bGwgcGVyaW9kIHVwZGF0ZSBpbmZvICovCisjZGVmaW5lIFhSVU5fREVCVUdfSFdQVFJVUERBVEUJKDE8PDQpCS8qIGZ1bGwgaHdwdHIgdXBkYXRlIGluZm8gKi8KKyNkZWZpbmUgWFJVTl9ERUJVR19MT0cJCSgxPDw1KQkvKiBzaG93IGxhc3QgMTAgcG9zaXRpb25zIG9uIGVyciAqLworI2RlZmluZSBYUlVOX0RFQlVHX0xPR09OQ0UJKDE8PDYpCS8qIGRvIGFib3ZlIG9ubHkgb25jZSAqLworCisjaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRworCisjZGVmaW5lIHhydW5fZGVidWcoc3Vic3RyZWFtLCBtYXNrKSBcCisJCQkoKHN1YnN0cmVhbSktPnBzdHItPnhydW5fZGVidWcgJiAobWFzaykpCisKKyNkZWZpbmUgZHVtcF9zdGFja19vbl94cnVuKHN1YnN0cmVhbSkgZG8gewkJCVwKKwkJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtLCBYUlVOX0RFQlVHX1NUQUNLKSkJXAorCQkJZHVtcF9zdGFjaygpOwkJCQlcCisJfSB3aGlsZSAoMCkKKwogc3RhdGljIHZvaWQgeHJ1bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwpAQCAtMTU0LDcgKzE2MSw3IEBACiAJaWYgKHJ1bnRpbWUtPnRzdGFtcF9tb2RlID09IFNORFJWX1BDTV9UU1RBTVBfRU5BQkxFKQogCQlzbmRfcGNtX2dldHRpbWUocnVudGltZSwgKHN0cnVjdCB0aW1lc3BlYyAqKSZydW50aW1lLT5zdGF0dXMtPnRzdGFtcCk7CiAJc25kX3BjbV9zdG9wKHN1YnN0cmVhbSwgU05EUlZfUENNX1NUQVRFX1hSVU4pOwotCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgMSkpIHsKKwlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIFhSVU5fREVCVUdfQkFTSUMpKSB7CiAJCWNoYXIgbmFtZVsxNl07CiAJCXBjbV9kZWJ1Z19uYW1lKHN1YnN0cmVhbSwgbmFtZSwgc2l6ZW9mKG5hbWUpKTsKIAkJc25kX3ByaW50ZChLRVJOX0RFQlVHICJYUlVOOiAlc1xuIiwgbmFtZSk7CkBAIC0xNjIsMzIgKzE2OSwxMDIgQEAKIAl9CiB9CiAKLXN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAotc25kX3BjbV91cGRhdGVfaHdfcHRyX3BvcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCSAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKLXsKLQlzbmRfcGNtX3VmcmFtZXNfdCBwb3M7CisjZGVmaW5lIGh3X3B0cl9lcnJvcihzdWJzdHJlYW0sIGZtdCwgYXJncy4uLikJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtLCBYUlVOX0RFQlVHX0JBU0lDKSkgewkJXAorCQkJeHJ1bl9sb2dfc2hvdyhzdWJzdHJlYW0pOwkJCVwKKwkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsJCQlcCisJCQkJc25kX3ByaW50ZCgiUENNOiAiIGZtdCwgIyNhcmdzKTsJXAorCQkJfQkJCQkJCVwKKwkJCWR1bXBfc3RhY2tfb25feHJ1bihzdWJzdHJlYW0pOwkJCVwKKwkJfQkJCQkJCQlcCisJfSB3aGlsZSAoMCkKIAotCXBvcyA9IHN1YnN0cmVhbS0+b3BzLT5wb2ludGVyKHN1YnN0cmVhbSk7Ci0JaWYgKHBvcyA9PSBTTkRSVl9QQ01fUE9TX1hSVU4pCi0JCXJldHVybiBwb3M7IC8qIFhSVU4gKi8KLQlpZiAocG9zID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7Ci0JCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsKLQkJCWNoYXIgbmFtZVsxNl07Ci0JCQlwY21fZGVidWdfbmFtZShzdWJzdHJlYW0sIG5hbWUsIHNpemVvZihuYW1lKSk7Ci0JCQlzbmRfcHJpbnRkKEtFUk5fRVJSICAiQlVHOiAlcywgcG9zID0gMHglbHgsICIKLQkJCQkgICAiYnVmZmVyIHNpemUgPSAweCVseCwgcGVyaW9kIHNpemUgPSAweCVseFxuIiwKLQkJCQkgICBuYW1lLCBwb3MsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAotCQkJCSAgIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKLQkJfQotCQlwb3MgPSAwOworI2RlZmluZSBYUlVOX0xPR19DTlQJMTAKKworc3RydWN0IGh3cHRyX2xvZ19lbnRyeSB7CisJdW5zaWduZWQgbG9uZyBqaWZmaWVzOworCXNuZF9wY21fdWZyYW1lc190IHBvczsKKwlzbmRfcGNtX3VmcmFtZXNfdCBwZXJpb2Rfc2l6ZTsKKwlzbmRfcGNtX3VmcmFtZXNfdCBidWZmZXJfc2l6ZTsKKwlzbmRfcGNtX3VmcmFtZXNfdCBvbGRfaHdfcHRyOworCXNuZF9wY21fdWZyYW1lc190IGh3X3B0cl9iYXNlOworfTsKKworc3RydWN0IHNuZF9wY21faHdwdHJfbG9nIHsKKwl1bnNpZ25lZCBpbnQgaWR4OworCXVuc2lnbmVkIGludCBoaXQ6IDE7CisJc3RydWN0IGh3cHRyX2xvZ19lbnRyeSBlbnRyaWVzW1hSVU5fTE9HX0NOVF07Cit9OworCitzdGF0aWMgdm9pZCB4cnVuX2xvZyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJICAgICBzbmRfcGNtX3VmcmFtZXNfdCBwb3MpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX3BjbV9od3B0cl9sb2cgKmxvZyA9IHJ1bnRpbWUtPmh3cHRyX2xvZzsKKwlzdHJ1Y3QgaHdwdHJfbG9nX2VudHJ5ICplbnRyeTsKKworCWlmIChsb2cgPT0gTlVMTCkgeworCQlsb2cgPSBremFsbG9jKHNpemVvZigqbG9nKSwgR0ZQX0FUT01JQyk7CisJCWlmIChsb2cgPT0gTlVMTCkKKwkJCXJldHVybjsKKwkJcnVudGltZS0+aHdwdHJfbG9nID0gbG9nOworCX0gZWxzZSB7CisJCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgWFJVTl9ERUJVR19MT0dPTkNFKSAmJiBsb2ctPmhpdCkKKwkJCXJldHVybjsKIAl9Ci0JcG9zIC09IHBvcyAlIHJ1bnRpbWUtPm1pbl9hbGlnbjsKLQlyZXR1cm4gcG9zOworCWVudHJ5ID0gJmxvZy0+ZW50cmllc1tsb2ctPmlkeF07CisJZW50cnktPmppZmZpZXMgPSBqaWZmaWVzOworCWVudHJ5LT5wb3MgPSBwb3M7CisJZW50cnktPnBlcmlvZF9zaXplID0gcnVudGltZS0+cGVyaW9kX3NpemU7CisJZW50cnktPmJ1ZmZlcl9zaXplID0gcnVudGltZS0+YnVmZmVyX3NpemU7OworCWVudHJ5LT5vbGRfaHdfcHRyID0gcnVudGltZS0+c3RhdHVzLT5od19wdHI7CisJZW50cnktPmh3X3B0cl9iYXNlID0gcnVudGltZS0+aHdfcHRyX2Jhc2U7CisJbG9nLT5pZHggPSAobG9nLT5pZHggKyAxKSAlIFhSVU5fTE9HX0NOVDsKIH0KIAotc3RhdGljIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zdChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQorc3RhdGljIHZvaWQgeHJ1bl9sb2dfc2hvdyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9od3B0cl9sb2cgKmxvZyA9IHN1YnN0cmVhbS0+cnVudGltZS0+aHdwdHJfbG9nOworCXN0cnVjdCBod3B0cl9sb2dfZW50cnkgKmVudHJ5OworCWNoYXIgbmFtZVsxNl07CisJdW5zaWduZWQgaW50IGlkeDsKKwlpbnQgY250OworCisJaWYgKGxvZyA9PSBOVUxMKQorCQlyZXR1cm47CisJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtLCBYUlVOX0RFQlVHX0xPR09OQ0UpICYmIGxvZy0+aGl0KQorCQlyZXR1cm47CisJcGNtX2RlYnVnX25hbWUoc3Vic3RyZWFtLCBuYW1lLCBzaXplb2YobmFtZSkpOworCWZvciAoY250ID0gMCwgaWR4ID0gbG9nLT5pZHg7IGNudCA8IFhSVU5fTE9HX0NOVDsgY250KyspIHsKKwkJZW50cnkgPSAmbG9nLT5lbnRyaWVzW2lkeF07CisJCWlmIChlbnRyeS0+cGVyaW9kX3NpemUgPT0gMCkKKwkJCWJyZWFrOworCQlzbmRfcHJpbnRkKCJod3B0ciBsb2c6ICVzOiBqPSVsdSwgcG9zPSVsZC8lbGQvJWxkLCAiCisJCQkgICAiaHdwdHI9JWxkLyVsZFxuIiwKKwkJCSAgIG5hbWUsIGVudHJ5LT5qaWZmaWVzLCAodW5zaWduZWQgbG9uZyllbnRyeS0+cG9zLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpZW50cnktPnBlcmlvZF9zaXplLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpZW50cnktPmJ1ZmZlcl9zaXplLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpZW50cnktPm9sZF9od19wdHIsCisJCQkgICAodW5zaWduZWQgbG9uZyllbnRyeS0+aHdfcHRyX2Jhc2UpOworCQlpZHgrKzsKKwkJaWR4ICU9IFhSVU5fTE9HX0NOVDsKKwl9CisJbG9nLT5oaXQgPSAxOworfQorCisjZWxzZSAvKiAhIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcgKi8KKworI2RlZmluZSB4cnVuX2RlYnVnKHN1YnN0cmVhbSwgbWFzaykJMAorI2RlZmluZSB4cnVuKHN1YnN0cmVhbSkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGh3X3B0cl9lcnJvcihzdWJzdHJlYW0sIGZtdCwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB4cnVuX2xvZyhzdWJzdHJlYW0sIHBvcykJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB4cnVuX2xvZ19zaG93KHN1YnN0cmVhbSkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKKworaW50IHNuZF9wY21fdXBkYXRlX3N0YXRlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCiB7CiAJc25kX3BjbV91ZnJhbWVzX3QgYXZhaWw7CiAKQEAgLTIwOSw4OCArMjg2LDk0IEBACiAJCX0KIAl9CiAJaWYgKGF2YWlsID49IHJ1bnRpbWUtPmNvbnRyb2wtPmF2YWlsX21pbikKLQkJd2FrZV91cCgmcnVudGltZS0+c2xlZXApOworCQl3YWtlX3VwKHJ1bnRpbWUtPnR3YWtlID8gJnJ1bnRpbWUtPnRzbGVlcCA6ICZydW50aW1lLT5zbGVlcCk7CiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwgZm10LCBhcmdzLi4uKQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIDEpKSB7CQkJCVwKLQkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsJCQlcCi0JCQkJc25kX3ByaW50ZCgiUENNOiAiIGZtdCwgIyNhcmdzKTsJXAotCQkJfQkJCQkJCVwKLQkJCWR1bXBfc3RhY2tfb25feHJ1bihzdWJzdHJlYW0pOwkJCVwKLQkJfQkJCQkJCQlcCi0JfSB3aGlsZSAoMCkKLQotc3RhdGljIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHJfaW50ZXJydXB0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorc3RhdGljIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHIwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgdW5zaWduZWQgaW50IGluX2ludGVycnVwdCkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXNuZF9wY21fdWZyYW1lc190IHBvczsKLQlzbmRfcGNtX3VmcmFtZXNfdCBvbGRfaHdfcHRyLCBuZXdfaHdfcHRyLCBod19wdHJfaW50ZXJydXB0LCBod19iYXNlOworCXNuZF9wY21fdWZyYW1lc190IG9sZF9od19wdHIsIG5ld19od19wdHIsIGh3X2Jhc2U7CiAJc25kX3BjbV9zZnJhbWVzX3QgaGRlbHRhLCBkZWx0YTsKIAl1bnNpZ25lZCBsb25nIGpkZWx0YTsKIAogCW9sZF9od19wdHIgPSBydW50aW1lLT5zdGF0dXMtPmh3X3B0cjsKLQlwb3MgPSBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zKHN1YnN0cmVhbSwgcnVudGltZSk7CisJcG9zID0gc3Vic3RyZWFtLT5vcHMtPnBvaW50ZXIoc3Vic3RyZWFtKTsKIAlpZiAocG9zID09IFNORFJWX1BDTV9QT1NfWFJVTikgewogCQl4cnVuKHN1YnN0cmVhbSk7CiAJCXJldHVybiAtRVBJUEU7CiAJfQotCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgOCkpIHsKLQkJY2hhciBuYW1lWzE2XTsKLQkJcGNtX2RlYnVnX25hbWUoc3Vic3RyZWFtLCBuYW1lLCBzaXplb2YobmFtZSkpOwotCQlzbmRfcHJpbnRkKCJwZXJpb2RfdXBkYXRlOiAlczogcG9zPTB4JXgvMHgleC8weCV4LCAiCi0JCQkgICAiaHdwdHI9MHglbHgsIGh3X2Jhc2U9MHglbHgsIGh3X2ludHI9MHglbHhcbiIsCi0JCQkgICBuYW1lLCAodW5zaWduZWQgaW50KXBvcywKLQkJCSAgICh1bnNpZ25lZCBpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsCi0JCQkgICAodW5zaWduZWQgaW50KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAotCQkJICAgKHVuc2lnbmVkIGxvbmcpb2xkX2h3X3B0ciwKLQkJCSAgICh1bnNpZ25lZCBsb25nKXJ1bnRpbWUtPmh3X3B0cl9iYXNlLAotCQkJICAgKHVuc2lnbmVkIGxvbmcpcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCk7CisJaWYgKHBvcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CisJCQljaGFyIG5hbWVbMTZdOworCQkJcGNtX2RlYnVnX25hbWUoc3Vic3RyZWFtLCBuYW1lLCBzaXplb2YobmFtZSkpOworCQkJeHJ1bl9sb2dfc2hvdyhzdWJzdHJlYW0pOworCQkJc25kX3ByaW50ZChLRVJOX0VSUiAgIkJVRzogJXMsIHBvcyA9ICVsZCwgIgorCQkJCSAgICJidWZmZXIgc2l6ZSA9ICVsZCwgcGVyaW9kIHNpemUgPSAlbGRcbiIsCisJCQkJICAgbmFtZSwgcG9zLCBydW50aW1lLT5idWZmZXJfc2l6ZSwKKwkJCQkgICBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisJCX0KKwkJcG9zID0gMDsKIAl9CisJcG9zIC09IHBvcyAlIHJ1bnRpbWUtPm1pbl9hbGlnbjsKKwlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0sIFhSVU5fREVCVUdfTE9HKSkKKwkJeHJ1bl9sb2coc3Vic3RyZWFtLCBwb3MpOwogCWh3X2Jhc2UgPSBydW50aW1lLT5od19wdHJfYmFzZTsKIAluZXdfaHdfcHRyID0gaHdfYmFzZSArIHBvczsKLQlod19wdHJfaW50ZXJydXB0ID0gcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCArIHJ1bnRpbWUtPnBlcmlvZF9zaXplOwotCWRlbHRhID0gbmV3X2h3X3B0ciAtIGh3X3B0cl9pbnRlcnJ1cHQ7Ci0JaWYgKGh3X3B0cl9pbnRlcnJ1cHQgPj0gcnVudGltZS0+Ym91bmRhcnkpIHsKLQkJaHdfcHRyX2ludGVycnVwdCAtPSBydW50aW1lLT5ib3VuZGFyeTsKLQkJaWYgKGh3X2Jhc2UgPCBydW50aW1lLT5ib3VuZGFyeSAvIDIpCi0JCQkvKiBod19iYXNlIHdhcyBhbHJlYWR5IGxhcHBlZDsgcmVjYWxjIGRlbHRhICovCi0JCQlkZWx0YSA9IG5ld19od19wdHIgLSBod19wdHJfaW50ZXJydXB0OwotCX0KLQlpZiAoZGVsdGEgPCAwKSB7Ci0JCWlmIChydW50aW1lLT5wZXJpb2RzID09IDEgfHwgbmV3X2h3X3B0ciA8IG9sZF9od19wdHIpCi0JCQlkZWx0YSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQkJaWYgKGRlbHRhIDwgMCkgewotCQkJaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwgCi0JCQkJICAgICAiVW5leHBlY3RlZCBod19wb2ludGVyIHZhbHVlICIKLQkJCQkgICAgICIoc3RyZWFtPSVpLCBwb3M9JWxkLCBpbnRyX3B0cj0lbGQpXG4iLAotCQkJCSAgICAgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKXBvcywKLQkJCQkgICAgIChsb25nKWh3X3B0cl9pbnRlcnJ1cHQpOwotI2lmIDEKLQkJCS8qIHNpbXBseSBza2lwcGluZyB0aGUgaHdwdHIgdXBkYXRlIHNlZW1zIG1vcmUKLQkJCSAqIHJvYnVzdCBpbiBzb21lIGNhc2VzLCBlLmcuIG9uIFZNd2FyZSB3aXRoCi0JCQkgKiBpbmFjY3VyYXRlIHRpbWVyIHNvdXJjZQotCQkJICovCi0JCQlyZXR1cm4gMDsgLyogc2tpcCB0aGlzIHVwZGF0ZSAqLwotI2Vsc2UKLQkJCS8qIHJlYmFzZSB0byBpbnRlcnJ1cHQgcG9zaXRpb24gKi8KLQkJCWh3X2Jhc2UgPSBuZXdfaHdfcHRyID0gaHdfcHRyX2ludGVycnVwdDsKLQkJCS8qIGFsaWduIGh3X2Jhc2UgdG8gYnVmZmVyX3NpemUgKi8KLQkJCWh3X2Jhc2UgLT0gaHdfYmFzZSAlIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCQkJZGVsdGEgPSAwOwotI2VuZGlmCi0JCX0gZWxzZSB7CisJaWYgKGluX2ludGVycnVwdCkgeworCQkvKiB3ZSBrbm93IHRoYXQgb25lIHBlcmlvZCB3YXMgcHJvY2Vzc2VkICovCisJCS8qIGRlbHRhID0gImV4cGVjdGVkIG5leHQgaHdfcHRyIiBmb3IgaW5faW50ZXJydXB0ICE9IDAgKi8KKwkJZGVsdGEgPSBydW50aW1lLT5od19wdHJfaW50ZXJydXB0ICsgcnVudGltZS0+cGVyaW9kX3NpemU7CisJCWlmIChkZWx0YSA+IG5ld19od19wdHIpIHsKIAkJCWh3X2Jhc2UgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7CiAJCQlpZiAoaHdfYmFzZSA+PSBydW50aW1lLT5ib3VuZGFyeSkKIAkJCQlod19iYXNlID0gMDsKIAkJCW5ld19od19wdHIgPSBod19iYXNlICsgcG9zOworCQkJZ290byBfX2RlbHRhOwogCQl9CiAJfQorCS8qIG5ld19od19wdHIgbWlnaHQgYmUgbG93ZXIgdGhhbiBvbGRfaHdfcHRyIGluIGNhc2Ugd2hlbiAqLworCS8qIHBvaW50ZXIgY3Jvc3NlcyB0aGUgZW5kIG9mIHRoZSByaW5nIGJ1ZmZlciAqLworCWlmIChuZXdfaHdfcHRyIDwgb2xkX2h3X3B0cikgeworCQlod19iYXNlICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQlpZiAoaHdfYmFzZSA+PSBydW50aW1lLT5ib3VuZGFyeSkKKwkJCWh3X2Jhc2UgPSAwOworCQluZXdfaHdfcHRyID0gaHdfYmFzZSArIHBvczsKKwl9CisgICAgICBfX2RlbHRhOgorCWRlbHRhID0gKG5ld19od19wdHIgLSBvbGRfaHdfcHRyKSAlIHJ1bnRpbWUtPmJvdW5kYXJ5OworCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSwgaW5faW50ZXJydXB0ID8KKwkJCVhSVU5fREVCVUdfUEVSSU9EVVBEQVRFIDogWFJVTl9ERUJVR19IV1BUUlVQREFURSkpIHsKKwkJY2hhciBuYW1lWzE2XTsKKwkJcGNtX2RlYnVnX25hbWUoc3Vic3RyZWFtLCBuYW1lLCBzaXplb2YobmFtZSkpOworCQlzbmRfcHJpbnRkKCIlc191cGRhdGU6ICVzOiBwb3M9JXUvJXUvJXUsICIKKwkJCSAgICJod3B0cj0lbGQvJWxkLyVsZC8lbGRcbiIsCisJCQkgICBpbl9pbnRlcnJ1cHQgPyAicGVyaW9kIiA6ICJod3B0ciIsCisJCQkgICBuYW1lLAorCQkJICAgKHVuc2lnbmVkIGludClwb3MsCisJCQkgICAodW5zaWduZWQgaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLAorCQkJICAgKHVuc2lnbmVkIGludClydW50aW1lLT5idWZmZXJfc2l6ZSwKKwkJCSAgICh1bnNpZ25lZCBsb25nKWRlbHRhLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpb2xkX2h3X3B0ciwKKwkJCSAgICh1bnNpZ25lZCBsb25nKW5ld19od19wdHIsCisJCQkgICAodW5zaWduZWQgbG9uZylydW50aW1lLT5od19wdHJfYmFzZSk7CisJfQorCS8qIHNvbWV0aGluZyBtdXN0IGJlIHJlYWxseSB3cm9uZyAqLworCWlmIChkZWx0YSA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSArIHJ1bnRpbWUtPnBlcmlvZF9zaXplKSB7CisJCWh3X3B0cl9lcnJvcihzdWJzdHJlYW0sCisJCQkgICAgICAgIlVuZXhwZWN0ZWQgaHdfcG9pbnRlciB2YWx1ZSAlcyIKKwkJCSAgICAgICAiKHN0cmVhbT0laSwgcG9zPSVsZCwgbmV3X2h3X3B0cj0lbGQsICIKKwkJCSAgICAgICAib2xkX2h3X3B0cj0lbGQpXG4iLAorCQkJCSAgICAgaW5faW50ZXJydXB0ID8gIltRXSAiIDogIltQXSIsCisJCQkJICAgICBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpcG9zLAorCQkJCSAgICAgKGxvbmcpbmV3X2h3X3B0ciwgKGxvbmcpb2xkX2h3X3B0cik7CisJCXJldHVybiAwOworCX0KIAogCS8qIERvIGppZmZpZXMgY2hlY2sgb25seSBpbiB4cnVuX2RlYnVnIG1vZGUgKi8KLQlpZiAoIXhydW5fZGVidWcoc3Vic3RyZWFtLCA0KSkKKwlpZiAoIXhydW5fZGVidWcoc3Vic3RyZWFtLCBYUlVOX0RFQlVHX0pJRkZJRVNDSEVDSykpCiAJCWdvdG8gbm9famlmZmllc19jaGVjazsKIAogCS8qIFNraXAgdGhlIGppZmZpZXMgY2hlY2sgZm9yIGhhcmR3YXJlcyB3aXRoIEJBVENIIGZsYWcuCkBAIC0yOTksNyArMzgyLDcgQEAKIAkgKi8KIAlpZiAocnVudGltZS0+aHcuaW5mbyAmIFNORFJWX1BDTV9JTkZPX0JBVENIKQogCQlnb3RvIG5vX2ppZmZpZXNfY2hlY2s7Ci0JaGRlbHRhID0gbmV3X2h3X3B0ciAtIG9sZF9od19wdHI7CisJaGRlbHRhID0gZGVsdGE7CiAJaWYgKGhkZWx0YSA8IHJ1bnRpbWUtPmRlbGF5KQogCQlnb3RvIG5vX2ppZmZpZXNfY2hlY2s7CiAJaGRlbHRhIC09IHJ1bnRpbWUtPmRlbGF5OwpAQCAtMzA4LDEzMCArMzkxLDY4IEBACiAJCWRlbHRhID0gamRlbHRhIC8KIAkJCSgoKHJ1bnRpbWUtPnBlcmlvZF9zaXplICogSFopIC8gcnVudGltZS0+cmF0ZSkKIAkJCQkJCQkJKyBIWi8xMDApOworCQkvKiBtb3ZlIG5ld19od19wdHIgYWNjb3JkaW5nIGppZmZpZXMgbm90IHBvcyB2YXJpYWJsZSAqLworCQluZXdfaHdfcHRyID0gb2xkX2h3X3B0cjsKKwkJaHdfYmFzZSA9IGRlbHRhOworCQkvKiB1c2UgbG9vcCB0byBhdm9pZCBjaGVja3MgZm9yIGRlbHRhIG92ZXJmbG93cyAqLworCQkvKiB0aGUgZGVsdGEgdmFsdWUgaXMgc21hbGwgb3IgemVybyBpbiBtb3N0IGNhc2VzICovCisJCXdoaWxlIChkZWx0YSA+IDApIHsKKwkJCW5ld19od19wdHIgKz0gcnVudGltZS0+cGVyaW9kX3NpemU7CisJCQlpZiAobmV3X2h3X3B0ciA+PSBydW50aW1lLT5ib3VuZGFyeSkKKwkJCQluZXdfaHdfcHRyIC09IHJ1bnRpbWUtPmJvdW5kYXJ5OworCQkJZGVsdGEtLTsKKwkJfQorCQkvKiBhbGlnbiBod19iYXNlIHRvIGJ1ZmZlcl9zaXplICovCiAJCWh3X3B0cl9lcnJvcihzdWJzdHJlYW0sCi0JCQkgICAgICJod19wdHIgc2tpcHBpbmchIFtRXSAiCisJCQkgICAgICJod19wdHIgc2tpcHBpbmchICVzIgogCQkJICAgICAiKHBvcz0lbGQsIGRlbHRhPSVsZCwgcGVyaW9kPSVsZCwgIgotCQkJICAgICAiamRlbHRhPSVsdS8lbHUvJWx1KVxuIiwKKwkJCSAgICAgImpkZWx0YT0lbHUvJWx1LyVsdSwgaHdfcHRyPSVsZC8lbGQpXG4iLAorCQkJICAgICBpbl9pbnRlcnJ1cHQgPyAiW1FdICIgOiAiIiwKIAkJCSAgICAgKGxvbmcpcG9zLCAobG9uZyloZGVsdGEsCiAJCQkgICAgIChsb25nKXJ1bnRpbWUtPnBlcmlvZF9zaXplLCBqZGVsdGEsCi0JCQkgICAgICgoaGRlbHRhICogSFopIC8gcnVudGltZS0+cmF0ZSksIGRlbHRhKTsKLQkJaHdfcHRyX2ludGVycnVwdCA9IHJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQgKwotCQkJCSAgIHJ1bnRpbWUtPnBlcmlvZF9zaXplICogZGVsdGE7Ci0JCWlmIChod19wdHJfaW50ZXJydXB0ID49IHJ1bnRpbWUtPmJvdW5kYXJ5KQotCQkJaHdfcHRyX2ludGVycnVwdCAtPSBydW50aW1lLT5ib3VuZGFyeTsKLQkJLyogcmViYXNlIHRvIGludGVycnVwdCBwb3NpdGlvbiAqLwotCQlod19iYXNlID0gbmV3X2h3X3B0ciA9IGh3X3B0cl9pbnRlcnJ1cHQ7Ci0JCS8qIGFsaWduIGh3X2Jhc2UgdG8gYnVmZmVyX3NpemUgKi8KLQkJaHdfYmFzZSAtPSBod19iYXNlICUgcnVudGltZS0+YnVmZmVyX3NpemU7CisJCQkgICAgICgoaGRlbHRhICogSFopIC8gcnVudGltZS0+cmF0ZSksIGh3X2Jhc2UsCisJCQkgICAgICh1bnNpZ25lZCBsb25nKW9sZF9od19wdHIsCisJCQkgICAgICh1bnNpZ25lZCBsb25nKW5ld19od19wdHIpOworCQkvKiByZXNldCB2YWx1ZXMgdG8gcHJvcGVyIHN0YXRlICovCiAJCWRlbHRhID0gMDsKKwkJaHdfYmFzZSA9IG5ld19od19wdHIgLSAobmV3X2h3X3B0ciAlIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKTsKIAl9CiAgbm9famlmZmllc19jaGVjazoKIAlpZiAoZGVsdGEgPiBydW50aW1lLT5wZXJpb2Rfc2l6ZSArIHJ1bnRpbWUtPnBlcmlvZF9zaXplIC8gMikgewogCQlod19wdHJfZXJyb3Ioc3Vic3RyZWFtLAotCQkJICAgICAiTG9zdCBpbnRlcnJ1cHRzPyAiCi0JCQkgICAgICIoc3RyZWFtPSVpLCBkZWx0YT0lbGQsIGludHJfcHRyPSVsZClcbiIsCisJCQkgICAgICJMb3N0IGludGVycnVwdHM/ICVzIgorCQkJICAgICAiKHN0cmVhbT0laSwgZGVsdGE9JWxkLCBuZXdfaHdfcHRyPSVsZCwgIgorCQkJICAgICAib2xkX2h3X3B0cj0lbGQpXG4iLAorCQkJICAgICBpbl9pbnRlcnJ1cHQgPyAiW1FdICIgOiAiIiwKIAkJCSAgICAgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKWRlbHRhLAotCQkJICAgICAobG9uZylod19wdHJfaW50ZXJydXB0KTsKLQkJLyogcmViYXNlIGh3X3B0cl9pbnRlcnJ1cHQgKi8KLQkJaHdfcHRyX2ludGVycnVwdCA9Ci0JCQluZXdfaHdfcHRyIC0gbmV3X2h3X3B0ciAlIHJ1bnRpbWUtPnBlcmlvZF9zaXplOworCQkJICAgICAobG9uZyluZXdfaHdfcHRyLAorCQkJICAgICAobG9uZylvbGRfaHdfcHRyKTsKIAl9Ci0JcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCA9IGh3X3B0cl9pbnRlcnJ1cHQ7CisKKwlpZiAocnVudGltZS0+c3RhdHVzLT5od19wdHIgPT0gbmV3X2h3X3B0cikKKwkJcmV0dXJuIDA7CiAKIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyAmJgogCSAgICBydW50aW1lLT5zaWxlbmNlX3NpemUgPiAwKQogCQlzbmRfcGNtX3BsYXliYWNrX3NpbGVuY2Uoc3Vic3RyZWFtLCBuZXdfaHdfcHRyKTsKIAotCWlmIChydW50aW1lLT5zdGF0dXMtPmh3X3B0ciA9PSBuZXdfaHdfcHRyKQotCQlyZXR1cm4gMDsKLQorCWlmIChpbl9pbnRlcnJ1cHQpIHsKKwkJcnVudGltZS0+aHdfcHRyX2ludGVycnVwdCA9IG5ld19od19wdHIgLQorCQkJCShuZXdfaHdfcHRyICUgcnVudGltZS0+cGVyaW9kX3NpemUpOworCX0KIAlydW50aW1lLT5od19wdHJfYmFzZSA9IGh3X2Jhc2U7CiAJcnVudGltZS0+c3RhdHVzLT5od19wdHIgPSBuZXdfaHdfcHRyOwogCXJ1bnRpbWUtPmh3X3B0cl9qaWZmaWVzID0gamlmZmllczsKIAlpZiAocnVudGltZS0+dHN0YW1wX21vZGUgPT0gU05EUlZfUENNX1RTVEFNUF9FTkFCTEUpCiAJCXNuZF9wY21fZ2V0dGltZShydW50aW1lLCAoc3RydWN0IHRpbWVzcGVjICopJnJ1bnRpbWUtPnN0YXR1cy0+dHN0YW1wKTsKIAotCXJldHVybiBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zdChzdWJzdHJlYW0sIHJ1bnRpbWUpOworCXJldHVybiBzbmRfcGNtX3VwZGF0ZV9zdGF0ZShzdWJzdHJlYW0sIHJ1bnRpbWUpOwogfQogCiAvKiBDQVVUSU9OOiBjYWxsIGl0IHdpdGggaXJxIGRpc2FibGVkICovCiBpbnQgc25kX3BjbV91cGRhdGVfaHdfcHRyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc25kX3BjbV91ZnJhbWVzX3QgcG9zOwotCXNuZF9wY21fdWZyYW1lc190IG9sZF9od19wdHIsIG5ld19od19wdHIsIGh3X2Jhc2U7Ci0Jc25kX3BjbV9zZnJhbWVzX3QgZGVsdGE7Ci0JdW5zaWduZWQgbG9uZyBqZGVsdGE7Ci0KLQlvbGRfaHdfcHRyID0gcnVudGltZS0+c3RhdHVzLT5od19wdHI7Ci0JcG9zID0gc25kX3BjbV91cGRhdGVfaHdfcHRyX3BvcyhzdWJzdHJlYW0sIHJ1bnRpbWUpOwotCWlmIChwb3MgPT0gU05EUlZfUENNX1BPU19YUlVOKSB7Ci0JCXhydW4oc3Vic3RyZWFtKTsKLQkJcmV0dXJuIC1FUElQRTsKLQl9Ci0JaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtLCAxNikpIHsKLQkJY2hhciBuYW1lWzE2XTsKLQkJcGNtX2RlYnVnX25hbWUoc3Vic3RyZWFtLCBuYW1lLCBzaXplb2YobmFtZSkpOwotCQlzbmRfcHJpbnRkKCJod191cGRhdGU6ICVzOiBwb3M9MHgleC8weCV4LzB4JXgsICIKLQkJCSAgICJod3B0cj0weCVseCwgaHdfYmFzZT0weCVseCwgaHdfaW50cj0weCVseFxuIiwKLQkJCSAgIG5hbWUsICh1bnNpZ25lZCBpbnQpcG9zLAotCQkJICAgKHVuc2lnbmVkIGludClydW50aW1lLT5wZXJpb2Rfc2l6ZSwKLQkJCSAgICh1bnNpZ25lZCBpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsCi0JCQkgICAodW5zaWduZWQgbG9uZylvbGRfaHdfcHRyLAotCQkJICAgKHVuc2lnbmVkIGxvbmcpcnVudGltZS0+aHdfcHRyX2Jhc2UsCi0JCQkgICAodW5zaWduZWQgbG9uZylydW50aW1lLT5od19wdHJfaW50ZXJydXB0KTsKLQl9Ci0KLQlod19iYXNlID0gcnVudGltZS0+aHdfcHRyX2Jhc2U7Ci0JbmV3X2h3X3B0ciA9IGh3X2Jhc2UgKyBwb3M7Ci0KLQlkZWx0YSA9IG5ld19od19wdHIgLSBvbGRfaHdfcHRyOwotCWpkZWx0YSA9IGppZmZpZXMgLSBydW50aW1lLT5od19wdHJfamlmZmllczsKLQlpZiAoZGVsdGEgPCAwKSB7Ci0JCWRlbHRhICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCQlpZiAoZGVsdGEgPCAwKSB7Ci0JCQlod19wdHJfZXJyb3Ioc3Vic3RyZWFtLCAKLQkJCQkgICAgICJVbmV4cGVjdGVkIGh3X3BvaW50ZXIgdmFsdWUgWzJdICIKLQkJCQkgICAgICIoc3RyZWFtPSVpLCBwb3M9JWxkLCBvbGRfcHRyPSVsZCwgamRlbHRhPSVsaSlcbiIsCi0JCQkJICAgICBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpcG9zLAotCQkJCSAgICAgKGxvbmcpb2xkX2h3X3B0ciwgamRlbHRhKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWh3X2Jhc2UgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7Ci0JCWlmIChod19iYXNlID49IHJ1bnRpbWUtPmJvdW5kYXJ5KQotCQkJaHdfYmFzZSA9IDA7Ci0JCW5ld19od19wdHIgPSBod19iYXNlICsgcG9zOwotCX0KLQkvKiBEbyBqaWZmaWVzIGNoZWNrIG9ubHkgaW4geHJ1bl9kZWJ1ZyBtb2RlICovCi0JaWYgKCF4cnVuX2RlYnVnKHN1YnN0cmVhbSwgNCkpCi0JCWdvdG8gbm9famlmZmllc19jaGVjazsKLQlpZiAoZGVsdGEgPCBydW50aW1lLT5kZWxheSkKLQkJZ290byBub19qaWZmaWVzX2NoZWNrOwotCWRlbHRhIC09IHJ1bnRpbWUtPmRlbGF5OwotCWlmICgoKGRlbHRhICogSFopIC8gcnVudGltZS0+cmF0ZSkgPiBqZGVsdGEgKyBIWi8xMDApIHsKLQkJaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwKLQkJCSAgICAgImh3X3B0ciBza2lwcGluZyEgIgotCQkJICAgICAiKHBvcz0lbGQsIGRlbHRhPSVsZCwgcGVyaW9kPSVsZCwgamRlbHRhPSVsdS8lbHUpXG4iLAotCQkJICAgICAobG9uZylwb3MsIChsb25nKWRlbHRhLAotCQkJICAgICAobG9uZylydW50aW1lLT5wZXJpb2Rfc2l6ZSwgamRlbHRhLAotCQkJICAgICAoKGRlbHRhICogSFopIC8gcnVudGltZS0+cmF0ZSkpOwotCQlyZXR1cm4gMDsKLQl9Ci0gbm9famlmZmllc19jaGVjazoKLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyAmJgotCSAgICBydW50aW1lLT5zaWxlbmNlX3NpemUgPiAwKQotCQlzbmRfcGNtX3BsYXliYWNrX3NpbGVuY2Uoc3Vic3RyZWFtLCBuZXdfaHdfcHRyKTsKLQotCWlmIChydW50aW1lLT5zdGF0dXMtPmh3X3B0ciA9PSBuZXdfaHdfcHRyKQotCQlyZXR1cm4gMDsKLQotCXJ1bnRpbWUtPmh3X3B0cl9iYXNlID0gaHdfYmFzZTsKLQlydW50aW1lLT5zdGF0dXMtPmh3X3B0ciA9IG5ld19od19wdHI7Ci0JcnVudGltZS0+aHdfcHRyX2ppZmZpZXMgPSBqaWZmaWVzOwotCWlmIChydW50aW1lLT50c3RhbXBfbW9kZSA9PSBTTkRSVl9QQ01fVFNUQU1QX0VOQUJMRSkKLQkJc25kX3BjbV9nZXR0aW1lKHJ1bnRpbWUsIChzdHJ1Y3QgdGltZXNwZWMgKikmcnVudGltZS0+c3RhdHVzLT50c3RhbXApOwotCi0JcmV0dXJuIHNuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3N0KHN1YnN0cmVhbSwgcnVudGltZSk7CisJcmV0dXJuIHNuZF9wY21fdXBkYXRlX2h3X3B0cjAoc3Vic3RyZWFtLCAwKTsKIH0KIAogLyoqCkBAIC03NDUsMTAgKzc2NiwxMyBAQAogCQkJdW5zaWduZWQgaW50IHJhdHNfY291bnQsIHN0cnVjdCBzbmRfcmF0bnVtICpyYXRzLAogCQkJdW5zaWduZWQgaW50ICpudW1wLCB1bnNpZ25lZCBpbnQgKmRlbnApCiB7Ci0JdW5zaWduZWQgaW50IGJlc3RfbnVtLCBiZXN0X2RpZmYsIGJlc3RfZGVuOworCXVuc2lnbmVkIGludCBiZXN0X251bSwgYmVzdF9kZW47CisJaW50IGJlc3RfZGlmZjsKIAl1bnNpZ25lZCBpbnQgazsKIAlzdHJ1Y3Qgc25kX2ludGVydmFsIHQ7CiAJaW50IGVycjsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0X251bSwgcmVzdWx0X2RlbjsKKwlpbnQgcmVzdWx0X2RpZmY7CiAKIAliZXN0X251bSA9IGJlc3RfZGVuID0gYmVzdF9kaWZmID0gMDsKIAlmb3IgKGsgPSAwOyBrIDwgcmF0c19jb3VudDsgKytrKSB7CkBAIC03NzAsNiArNzk0LDggQEAKIAkJCQlkZW4gLT0gcjsKIAkJfQogCQlkaWZmID0gbnVtIC0gcSAqIGRlbjsKKwkJaWYgKGRpZmYgPCAwKQorCQkJZGlmZiA9IC1kaWZmOwogCQlpZiAoYmVzdF9udW0gPT0gMCB8fAogCQkgICAgZGlmZiAqIGJlc3RfZGVuIDwgYmVzdF9kaWZmICogZGVuKSB7CiAJCQliZXN0X2RpZmYgPSBkaWZmOwpAQCAtNzg0LDYgKzgxMCw5IEBACiAJdC5taW4gPSBkaXZfZG93bihiZXN0X251bSwgYmVzdF9kZW4pOwogCXQub3Blbm1pbiA9ICEhKGJlc3RfbnVtICUgYmVzdF9kZW4pOwogCQorCXJlc3VsdF9udW0gPSBiZXN0X251bTsKKwlyZXN1bHRfZGlmZiA9IGJlc3RfZGlmZjsKKwlyZXN1bHRfZGVuID0gYmVzdF9kZW47CiAJYmVzdF9udW0gPSBiZXN0X2RlbiA9IGJlc3RfZGlmZiA9IDA7CiAJZm9yIChrID0gMDsgayA8IHJhdHNfY291bnQ7ICsraykgewogCQl1bnNpZ25lZCBpbnQgbnVtID0gcmF0c1trXS5udW07CkBAIC04MDYsNiArODM1LDggQEAKIAkJCQlkZW4gKz0gcmF0c1trXS5kZW5fc3RlcCAtIHI7CiAJCX0KIAkJZGlmZiA9IHEgKiBkZW4gLSBudW07CisJCWlmIChkaWZmIDwgMCkKKwkJCWRpZmYgPSAtZGlmZjsKIAkJaWYgKGJlc3RfbnVtID09IDAgfHwKIAkJICAgIGRpZmYgKiBiZXN0X2RlbiA8IGJlc3RfZGlmZiAqIGRlbikgewogCQkJYmVzdF9kaWZmID0gZGlmZjsKQEAgLTgyNSwxMCArODU2LDE0IEBACiAJCXJldHVybiBlcnI7CiAKIAlpZiAoc25kX2ludGVydmFsX3NpbmdsZShpKSkgeworCQlpZiAoYmVzdF9kaWZmICogcmVzdWx0X2RlbiA8IHJlc3VsdF9kaWZmICogYmVzdF9kZW4pIHsKKwkJCXJlc3VsdF9udW0gPSBiZXN0X251bTsKKwkJCXJlc3VsdF9kZW4gPSBiZXN0X2RlbjsKKwkJfQogCQlpZiAobnVtcCkKLQkJCSpudW1wID0gYmVzdF9udW07CisJCQkqbnVtcCA9IHJlc3VsdF9udW07CiAJCWlmIChkZW5wKQotCQkJKmRlbnAgPSBiZXN0X2RlbjsKKwkJCSpkZW5wID0gcmVzdWx0X2RlbjsKIAl9CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE2NDMsNyArMTY3OCw3IEBACiAKIAlzbmRfcGNtX3N0cmVhbV9sb2NrX2lycXNhdmUoc3Vic3RyZWFtLCBmbGFncyk7CiAJaWYgKCFzbmRfcGNtX3J1bm5pbmcoc3Vic3RyZWFtKSB8fAotCSAgICBzbmRfcGNtX3VwZGF0ZV9od19wdHJfaW50ZXJydXB0KHN1YnN0cmVhbSkgPCAwKQorCSAgICBzbmRfcGNtX3VwZGF0ZV9od19wdHIwKHN1YnN0cmVhbSwgMSkgPCAwKQogCQlnb3RvIF9lbmQ7CiAKIAlpZiAoc3Vic3RyZWFtLT50aW1lcl9ydW5uaW5nKQpAQCAtMTY3NCw3ICsxNzA5LDcgQEAKIAlsb25nIHRvdXQ7CiAKIAlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7Ci0JYWRkX3dhaXRfcXVldWUoJnJ1bnRpbWUtPnNsZWVwLCAmd2FpdCk7CisJYWRkX3dhaXRfcXVldWUoJnJ1bnRpbWUtPnRzbGVlcCwgJndhaXQpOwogCWZvciAoOzspIHsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQllcnIgPSAtRVJFU1RBUlRTWVM7CkBAIC0xNzE3LDcgKzE3NTIsNyBAQAogCQkJYnJlYWs7CiAJfQogIF9lbmRsb29wOgotCXJlbW92ZV93YWl0X3F1ZXVlKCZydW50aW1lLT5zbGVlcCwgJndhaXQpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZydW50aW1lLT50c2xlZXAsICZ3YWl0KTsKIAkqYXZhaWxwID0gYXZhaWw7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE3NzYsNiArMTgxMSw3IEBACiAJCWdvdG8gX2VuZF91bmxvY2s7CiAJfQogCisJcnVudGltZS0+dHdha2UgPSAxOwogCXdoaWxlIChzaXplID4gMCkgewogCQlzbmRfcGNtX3VmcmFtZXNfdCBmcmFtZXMsIGFwcGxfcHRyLCBhcHBsX29mczsKIAkJc25kX3BjbV91ZnJhbWVzX3QgYXZhaWw7CkBAIC0xNzk3LDE1ICsxODMzLDE3IEBACiAJCWlmIChmcmFtZXMgPiBjb250KQogCQkJZnJhbWVzID0gY29udDsKIAkJaWYgKHNuZF9CVUdfT04oIWZyYW1lcykpIHsKKwkJCXJ1bnRpbWUtPnR3YWtlID0gMDsKIAkJCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWFwcGxfcHRyID0gcnVudGltZS0+Y29udHJvbC0+YXBwbF9wdHI7CiAJCWFwcGxfb2ZzID0gYXBwbF9wdHIgJSBydW50aW1lLT5idWZmZXJfc2l6ZTsKIAkJc25kX3BjbV9zdHJlYW1fdW5sb2NrX2lycShzdWJzdHJlYW0pOwotCQlpZiAoKGVyciA9IHRyYW5zZmVyKHN1YnN0cmVhbSwgYXBwbF9vZnMsIGRhdGEsIG9mZnNldCwgZnJhbWVzKSkgPCAwKQotCQkJZ290byBfZW5kOworCQllcnIgPSB0cmFuc2ZlcihzdWJzdHJlYW0sIGFwcGxfb2ZzLCBkYXRhLCBvZmZzZXQsIGZyYW1lcyk7CiAJCXNuZF9wY21fc3RyZWFtX2xvY2tfaXJxKHN1YnN0cmVhbSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBfZW5kX3VubG9jazsKIAkJc3dpdGNoIChydW50aW1lLT5zdGF0dXMtPnN0YXRlKSB7CiAJCWNhc2UgU05EUlZfUENNX1NUQVRFX1hSVU46CiAJCQllcnIgPSAtRVBJUEU7CkBAIC0xODM0LDggKzE4NzIsMTAgQEAKIAkJfQogCX0KICBfZW5kX3VubG9jazoKKwlydW50aW1lLT50d2FrZSA9IDA7CisJaWYgKHhmZXIgPiAwICYmIGVyciA+PSAwKQorCQlzbmRfcGNtX3VwZGF0ZV9zdGF0ZShzdWJzdHJlYW0sIHJ1bnRpbWUpOwogCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKLSBfZW5kOgogCXJldHVybiB4ZmVyID4gMCA/IChzbmRfcGNtX3NmcmFtZXNfdCl4ZmVyIDogZXJyOwogfQogCkBAIC0xOTkzLDYgKzIwMzMsNyBAQAogCQlnb3RvIF9lbmRfdW5sb2NrOwogCX0KIAorCXJ1bnRpbWUtPnR3YWtlID0gMTsKIAl3aGlsZSAoc2l6ZSA+IDApIHsKIAkJc25kX3BjbV91ZnJhbWVzX3QgZnJhbWVzLCBhcHBsX3B0ciwgYXBwbF9vZnM7CiAJCXNuZF9wY21fdWZyYW1lc190IGF2YWlsOwpAQCAtMjAyMSwxNSArMjA2MiwxNyBAQAogCQlpZiAoZnJhbWVzID4gY29udCkKIAkJCWZyYW1lcyA9IGNvbnQ7CiAJCWlmIChzbmRfQlVHX09OKCFmcmFtZXMpKSB7CisJCQlydW50aW1lLT50d2FrZSA9IDA7CiAJCQlzbmRfcGNtX3N0cmVhbV91bmxvY2tfaXJxKHN1YnN0cmVhbSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlhcHBsX3B0ciA9IHJ1bnRpbWUtPmNvbnRyb2wtPmFwcGxfcHRyOwogCQlhcHBsX29mcyA9IGFwcGxfcHRyICUgcnVudGltZS0+YnVmZmVyX3NpemU7CiAJCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKLQkJaWYgKChlcnIgPSB0cmFuc2ZlcihzdWJzdHJlYW0sIGFwcGxfb2ZzLCBkYXRhLCBvZmZzZXQsIGZyYW1lcykpIDwgMCkKLQkJCWdvdG8gX2VuZDsKKwkJZXJyID0gdHJhbnNmZXIoc3Vic3RyZWFtLCBhcHBsX29mcywgZGF0YSwgb2Zmc2V0LCBmcmFtZXMpOwogCQlzbmRfcGNtX3N0cmVhbV9sb2NrX2lycShzdWJzdHJlYW0pOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gX2VuZF91bmxvY2s7CiAJCXN3aXRjaCAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSkgewogCQljYXNlIFNORFJWX1BDTV9TVEFURV9YUlVOOgogCQkJZXJyID0gLUVQSVBFOwpAQCAtMjA1Miw4ICsyMDk1LDEwIEBACiAJCXhmZXIgKz0gZnJhbWVzOwogCX0KICBfZW5kX3VubG9jazoKKwlydW50aW1lLT50d2FrZSA9IDA7CisJaWYgKHhmZXIgPiAwICYmIGVyciA+PSAwKQorCQlzbmRfcGNtX3VwZGF0ZV9zdGF0ZShzdWJzdHJlYW0sIHJ1bnRpbWUpOwogCXNuZF9wY21fc3RyZWFtX3VubG9ja19pcnEoc3Vic3RyZWFtKTsKLSBfZW5kOgogCXJldHVybiB4ZmVyID4gMCA/IChzbmRfcGNtX3NmcmFtZXNfdCl4ZmVyIDogZXJyOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9tZW1vcnkuYyBiL3NvdW5kL2NvcmUvcGNtX21lbW9yeS5jCmluZGV4IGNhYTc3OTYuLmQ2ZDQ5ZDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX21lbW9yeS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX21lbW9yeS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgpAQCAtNDM0LDMgKzQzNSw1NyBAQAogfQogCiBFWFBPUlRfU1lNQk9MKHNuZF9wY21fbGliX2ZyZWVfcGFnZXMpOworCitpbnQgX3NuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKKworCWlmIChQQ01fUlVOVElNRV9DSEVDSyhzdWJzdHJlYW0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCWlmIChydW50aW1lLT5kbWFfYXJlYSkgeworCQlpZiAocnVudGltZS0+ZG1hX2J5dGVzID49IHNpemUpCisJCQlyZXR1cm4gMDsgLyogYWxyZWFkeSBsYXJnZSBlbm91Z2ggKi8KKwkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOworCX0KKwlydW50aW1lLT5kbWFfYXJlYSA9IF9fdm1hbGxvYyhzaXplLCBnZnBfZmxhZ3MsIFBBR0VfS0VSTkVMKTsKKwlpZiAoIXJ1bnRpbWUtPmRtYV9hcmVhKQorCQlyZXR1cm4gLUVOT01FTTsKKwlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOworCXJldHVybiAxOworfQorRVhQT1JUX1NZTUJPTChfc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIpOworCisvKioKKyAqIHNuZF9wY21fbGliX2ZyZWVfdm1hbGxvY19idWZmZXIgLSBmcmVlIHZtYWxsb2MgYnVmZmVyCisgKiBAc3Vic3RyZWFtOiB0aGUgc3Vic3RyZWFtIHdpdGggYSBidWZmZXIgYWxsb2NhdGVkIGJ5CisgKglzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlcigpCisgKi8KK2ludCBzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CisKKwlpZiAoUENNX1JVTlRJTUVfQ0hFQ0soc3Vic3RyZWFtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7CisJcnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKTsKKworLyoqCisgKiBzbmRfcGNtX2xpYl9nZXRfdm1hbGxvY19wYWdlIC0gbWFwIHZtYWxsb2MgYnVmZmVyIG9mZnNldCB0byBwYWdlIHN0cnVjdAorICogQHN1YnN0cmVhbTogdGhlIHN1YnN0cmVhbSB3aXRoIGEgYnVmZmVyIGFsbG9jYXRlZCBieQorICoJc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIoKQorICogQG9mZnNldDogb2Zmc2V0IGluIHRoZSBidWZmZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRvIGJlIHVzZWQgYXMgdGhlIHBhZ2UgY2FsbGJhY2sgaW4gdGhlIFBDTSBvcHMuCisgKi8KK3N0cnVjdCBwYWdlICpzbmRfcGNtX2xpYl9nZXRfdm1hbGxvY19wYWdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXJldHVybiB2bWFsbG9jX3RvX3BhZ2Uoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSArIG9mZnNldCk7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwppbmRleCAyNWIwNjQxLi44NzI4ODc2IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYworKysgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtX3Fvc19wYXJhbXMuaD4KICNpbmNsdWRlIDxsaW51eC91aW8uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgpAQCAtMzE1LDEwICszMTYsMTAgQEAKIAlpZiAoIXBhcmFtcy0+aW5mbykKIAkJcGFyYW1zLT5pbmZvID0gaHctPmluZm8gJiB+U05EUlZfUENNX0lORk9fRklGT19JTl9GUkFNRVM7CiAJaWYgKCFwYXJhbXMtPmZpZm9fc2l6ZSkgewotCQlpZiAoc25kX21hc2tfbWluKCZwYXJhbXMtPm1hc2tzW1NORFJWX1BDTV9IV19QQVJBTV9GT1JNQVRdKSA9PQotCQkgICAgc25kX21hc2tfbWF4KCZwYXJhbXMtPm1hc2tzW1NORFJWX1BDTV9IV19QQVJBTV9GT1JNQVRdKSAmJgotICAgICAgICAgICAgICAgICAgICBzbmRfbWFza19taW4oJnBhcmFtcy0+bWFza3NbU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTXSkgPT0KLSAgICAgICAgICAgICAgICAgICAgc25kX21hc2tfbWF4KCZwYXJhbXMtPm1hc2tzW1NORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMU10pKSB7CisJCW0gPSBod19wYXJhbV9tYXNrKHBhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCk7CisJCWkgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUyk7CisJCWlmIChzbmRfbWFza19taW4obSkgPT0gc25kX21hc2tfbWF4KG0pICYmCisgICAgICAgICAgICAgICAgICAgIHNuZF9pbnRlcnZhbF9taW4oaSkgPT0gc25kX2ludGVydmFsX21heChpKSkgewogCQkJY2hhbmdlZCA9IHN1YnN0cmVhbS0+b3BzLT5pb2N0bChzdWJzdHJlYW0sCiAJCQkJCVNORFJWX1BDTV9JT0NUTDFfRklGT19TSVpFLCBwYXJhbXMpOwogCQkJaWYgKGNoYW5nZWQgPCAwKQpAQCAtMzY2LDYgKzM2NywzOCBAQAogCXJldHVybiB1c2VjczsKIH0KIAorc3RhdGljIGludCBjYWxjX2JvdW5kYXJ5KHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCit7CisJdV9pbnQ2NF90IGJvdW5kYXJ5OworCisJYm91bmRhcnkgPSAodV9pbnQ2NF90KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplICoKKwkJICAgKHVfaW50NjRfdClydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKyNpZiBCSVRTX1BFUl9MT05HIDwgNjQKKwkvKiB0cnkgdG8gZmluZCBsb3dlc3QgY29tbW9uIG11bHRpcGxlIGZvciBidWZmZXIgYW5kIHBlcmlvZCAqLworCWlmIChib3VuZGFyeSA+IExPTkdfTUFYIC0gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKKwkJdV9pbnQzMl90IHJlbWFpbmRlciA9IC0xOworCQl1X2ludDMyX3QgZGl2aWRlbnQgPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJdV9pbnQzMl90IGRpdmlzb3IgPSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwkJd2hpbGUgKHJlbWFpbmRlcikgeworCQkJcmVtYWluZGVyID0gZGl2aWRlbnQgJSBkaXZpc29yOworCQkJaWYgKHJlbWFpbmRlcikgeworCQkJCWRpdmlkZW50ID0gZGl2aXNvcjsKKwkJCQlkaXZpc29yID0gcmVtYWluZGVyOworCQkJfQorCQl9CisJCWJvdW5kYXJ5ID0gZGl2X3U2NChib3VuZGFyeSwgZGl2aXNvcik7CisJCWlmIChib3VuZGFyeSA+IExPTkdfTUFYIC0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCQlyZXR1cm4gLUVSQU5HRTsKKwl9CisjZW5kaWYKKwlpZiAoYm91bmRhcnkgPT0gMCkKKwkJcmV0dXJuIC1FUkFOR0U7CisJcnVudGltZS0+Ym91bmRhcnkgPSBib3VuZGFyeTsKKwl3aGlsZSAocnVudGltZS0+Ym91bmRhcnkgKiAyIDw9IExPTkdfTUFYIC0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCXJ1bnRpbWUtPmJvdW5kYXJ5ICo9IDI7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc25kX3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQogewpAQCAtNDQxLDkgKzQ3NCw5IEBACiAJcnVudGltZS0+c3RvcF90aHJlc2hvbGQgPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKIAlydW50aW1lLT5zaWxlbmNlX3RocmVzaG9sZCA9IDA7CiAJcnVudGltZS0+c2lsZW5jZV9zaXplID0gMDsKLQlydW50aW1lLT5ib3VuZGFyeSA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCXdoaWxlIChydW50aW1lLT5ib3VuZGFyeSAqIDIgPD0gTE9OR19NQVggLSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJcnVudGltZS0+Ym91bmRhcnkgKj0gMjsKKwllcnIgPSBjYWxjX2JvdW5kYXJ5KHJ1bnRpbWUpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIF9lcnJvcjsKIAogCXNuZF9wY21fdGltZXJfcmVzb2x1dGlvbl9jaGFuZ2Uoc3Vic3RyZWFtKTsKIAlydW50aW1lLT5zdGF0dXMtPnN0YXRlID0gU05EUlZfUENNX1NUQVRFX1NFVFVQOwpAQCAtNTE2LDYgKzU0OSw3IEBACiAJCQkgICAgIHN0cnVjdCBzbmRfcGNtX3N3X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CisJaW50IGVycjsKIAogCWlmIChQQ01fUlVOVElNRV9DSEVDSyhzdWJzdHJlYW0pKQogCQlyZXR1cm4gLUVOWElPOwpAQCAtNTQwLDYgKzU3NCw3IEBACiAJCWlmIChwYXJhbXMtPnNpbGVuY2VfdGhyZXNob2xkID4gcnVudGltZS0+YnVmZmVyX3NpemUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJZXJyID0gMDsKIAlzbmRfcGNtX3N0cmVhbV9sb2NrX2lycShzdWJzdHJlYW0pOwogCXJ1bnRpbWUtPnRzdGFtcF9tb2RlID0gcGFyYW1zLT50c3RhbXBfbW9kZTsKIAlydW50aW1lLT5wZXJpb2Rfc3RlcCA9IHBhcmFtcy0+cGVyaW9kX3N0ZXA7CkBAIC01NTMsMTAgKzU4OCwxMCBAQAogCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyAmJgogCQkgICAgcnVudGltZS0+c2lsZW5jZV9zaXplID4gMCkKIAkJCXNuZF9wY21fcGxheWJhY2tfc2lsZW5jZShzdWJzdHJlYW0sIFVMT05HX01BWCk7Ci0JCXdha2VfdXAoJnJ1bnRpbWUtPnNsZWVwKTsKKwkJZXJyID0gc25kX3BjbV91cGRhdGVfc3RhdGUoc3Vic3RyZWFtLCBydW50aW1lKTsKIAl9CiAJc25kX3BjbV9zdHJlYW1fdW5sb2NrX2lycShzdWJzdHJlYW0pOwotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3BjbV9zd19wYXJhbXNfdXNlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKQEAgLTkxNyw2ICs5NTIsNyBAQAogCQlydW50aW1lLT5zdGF0dXMtPnN0YXRlID0gc3RhdGU7CiAJfQogCXdha2VfdXAoJnJ1bnRpbWUtPnNsZWVwKTsKKwl3YWtlX3VwKCZydW50aW1lLT50c2xlZXApOwogfQogCiBzdGF0aWMgc3RydWN0IGFjdGlvbl9vcHMgc25kX3BjbV9hY3Rpb25fc3RvcCA9IHsKQEAgLTEwMDIsNiArMTAzOCw3IEBACiAJCQkJCSBTTkRSVl9USU1FUl9FVkVOVF9NUEFVU0UsCiAJCQkJCSAmcnVudGltZS0+dHJpZ2dlcl90c3RhbXApOwogCQl3YWtlX3VwKCZydW50aW1lLT5zbGVlcCk7CisJCXdha2VfdXAoJnJ1bnRpbWUtPnRzbGVlcCk7CiAJfSBlbHNlIHsKIAkJcnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9IFNORFJWX1BDTV9TVEFURV9SVU5OSU5HOwogCQlpZiAoc3Vic3RyZWFtLT50aW1lcikKQEAgLTEwNTksNiArMTA5Niw3IEBACiAJcnVudGltZS0+c3RhdHVzLT5zdXNwZW5kZWRfc3RhdGUgPSBydW50aW1lLT5zdGF0dXMtPnN0YXRlOwogCXJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPSBTTkRSVl9QQ01fU1RBVEVfU1VTUEVOREVEOwogCXdha2VfdXAoJnJ1bnRpbWUtPnNsZWVwKTsKKwl3YWtlX3VwKCZydW50aW1lLT50c2xlZXApOwogfQogCiBzdGF0aWMgc3RydWN0IGFjdGlvbl9vcHMgc25kX3BjbV9hY3Rpb25fc3VzcGVuZCA9IHsKQEAgLTMxNjIsOSArMzIwMCw3IEBACiAJbG9uZyBzaXplOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCi0jaWZkZWYgcGdwcm90X25vbmNhY2hlZAogCWFyZWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQoYXJlYS0+dm1fcGFnZV9wcm90KTsKLSNlbmRpZgogCWFyZWEtPnZtX2ZsYWdzIHw9IFZNX0lPOwogCXNpemUgPSBhcmVhLT52bV9lbmQgLSBhcmVhLT52bV9zdGFydDsKIAlvZmZzZXQgPSBhcmVhLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOwpAQCAtMzE3OCw2ICszMjE0LDE1IEBACiBFWFBPUlRfU1lNQk9MKHNuZF9wY21fbGliX21tYXBfaW9tZW0pOwogI2VuZGlmIC8qIFNORFJWX1BDTV9JTkZPX01NQVAgKi8KIAorLyogbW1hcCBjYWxsYmFjayB3aXRoIHBncHJvdF9ub25jYWNoZWQgKi8KK2ludCBzbmRfcGNtX2xpYl9tbWFwX25vbmNhY2hlZChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpCit7CisJYXJlYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZChhcmVhLT52bV9wYWdlX3Byb3QpOworCXJldHVybiBzbmRfcGNtX2RlZmF1bHRfbW1hcChzdWJzdHJlYW0sIGFyZWEpOworfQorRVhQT1JUX1NZTUJPTChzbmRfcGNtX2xpYl9tbWFwX25vbmNhY2hlZCk7CisKIC8qCiAgKiBtbWFwIERNQSBidWZmZXIKICAqLwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5jIGIvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5jCmluZGV4IDhjYTJiZTMuLjQ4ZWNhOWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9jbGllbnRtZ3IuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfY2xpZW50bWdyLmMKQEAgLTIxOTAsNyArMjE5MCw3IEBACiAJCWlmIChwLT5jbWQgPT0gY21kKQogCQkJcmV0dXJuIHAtPmZ1bmMoY2xpZW50LCBhcmcpOwogCX0KLQlzbmRfcHJpbnRkKCJzZXEgdW5rbm93biBpb2N0bCgpIDB4JXggKHR5cGU9JyVjJywgbnVtYmVyPTB4JTJ4KVxuIiwKKwlzbmRfcHJpbnRkKCJzZXEgdW5rbm93biBpb2N0bCgpIDB4JXggKHR5cGU9JyVjJywgbnVtYmVyPTB4JTAyeClcbiIsCiAJCSAgIGNtZCwgX0lPQ19UWVBFKGNtZCksIF9JT0NfTlIoY21kKSk7CiAJcmV0dXJuIC1FTk9UVFk7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfdGltZXIuYyBiL3NvdW5kL2NvcmUvc2VxL3NlcV90aW1lci5jCmluZGV4IGY3NDVjMzEuLjE2MGIxYmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV90aW1lci5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV90aW1lci5jCkBAIC0zMywyMiArMzMsMjEgQEAKIAogI2RlZmluZSBTS0VXX0JBU0UJMHgxMDAwMAkvKiAxNmJpdCBzaGlmdCAqLwogCi1zdGF0aWMgdm9pZCBzbmRfc2VxX3RpbWVyX3NldF90aWNrX3Jlc29sdXRpb24oc3RydWN0IHNuZF9zZXFfdGltZXJfdGljayAqdGljaywKLQkJCQkJICAgICAgaW50IHRlbXBvLCBpbnQgcHBxKQorc3RhdGljIHZvaWQgc25kX3NlcV90aW1lcl9zZXRfdGlja19yZXNvbHV0aW9uKHN0cnVjdCBzbmRfc2VxX3RpbWVyICp0bXIpCiB7Ci0JaWYgKHRlbXBvIDwgMTAwMDAwMCkKLQkJdGljay0+cmVzb2x1dGlvbiA9ICh0ZW1wbyAqIDEwMDApIC8gcHBxOworCWlmICh0bXItPnRlbXBvIDwgMTAwMDAwMCkKKwkJdG1yLT50aWNrLnJlc29sdXRpb24gPSAodG1yLT50ZW1wbyAqIDEwMDApIC8gdG1yLT5wcHE7CiAJZWxzZSB7CiAJCS8qIG1pZ2h0IG92ZXJmbG93Li4gKi8KIAkJdW5zaWduZWQgaW50IHM7Ci0JCXMgPSB0ZW1wbyAlIHBwcTsKLQkJcyA9IChzICogMTAwMCkgLyBwcHE7Ci0JCXRpY2stPnJlc29sdXRpb24gPSAodGVtcG8gLyBwcHEpICogMTAwMDsKLQkJdGljay0+cmVzb2x1dGlvbiArPSBzOworCQlzID0gdG1yLT50ZW1wbyAlIHRtci0+cHBxOworCQlzID0gKHMgKiAxMDAwKSAvIHRtci0+cHBxOworCQl0bXItPnRpY2sucmVzb2x1dGlvbiA9ICh0bXItPnRlbXBvIC8gdG1yLT5wcHEpICogMTAwMDsKKwkJdG1yLT50aWNrLnJlc29sdXRpb24gKz0gczsKIAl9Ci0JaWYgKHRpY2stPnJlc29sdXRpb24gPD0gMCkKLQkJdGljay0+cmVzb2x1dGlvbiA9IDE7Ci0Jc25kX3NlcV90aW1lcl91cGRhdGVfdGljayh0aWNrLCAwKTsKKwlpZiAodG1yLT50aWNrLnJlc29sdXRpb24gPD0gMCkKKwkJdG1yLT50aWNrLnJlc29sdXRpb24gPSAxOworCXNuZF9zZXFfdGltZXJfdXBkYXRlX3RpY2soJnRtci0+dGljaywgMCk7CiB9CiAKIC8qIGNyZWF0ZSBuZXcgdGltZXIgKGNvbnN0cnVjdG9yKSAqLwpAQCAtOTYsNyArOTUsNyBAQAogCS8qIHNldHVwIGRlZmF1bHRzICovCiAJdG1yLT5wcHEgPSA5NjsJCS8qIDk2IFBQUSAqLwogCXRtci0+dGVtcG8gPSA1MDAwMDA7CS8qIDEyMCBCUE0gKi8KLQlzbmRfc2VxX3RpbWVyX3NldF90aWNrX3Jlc29sdXRpb24oJnRtci0+dGljaywgdG1yLT50ZW1wbywgdG1yLT5wcHEpOworCXNuZF9zZXFfdGltZXJfc2V0X3RpY2tfcmVzb2x1dGlvbih0bXIpOwogCXRtci0+cnVubmluZyA9IDA7CiAKIAl0bXItPnR5cGUgPSBTTkRSVl9TRVFfVElNRVJfQUxTQTsKQEAgLTE4MCw3ICsxNzksNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0bXItPmxvY2ssIGZsYWdzKTsKIAlpZiAoKHVuc2lnbmVkIGludCl0ZW1wbyAhPSB0bXItPnRlbXBvKSB7CiAJCXRtci0+dGVtcG8gPSB0ZW1wbzsKLQkJc25kX3NlcV90aW1lcl9zZXRfdGlja19yZXNvbHV0aW9uKCZ0bXItPnRpY2ssIHRtci0+dGVtcG8sIHRtci0+cHBxKTsKKwkJc25kX3NlcV90aW1lcl9zZXRfdGlja19yZXNvbHV0aW9uKHRtcik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRtci0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwpAQCAtMjA1LDcgKzIwNCw3IEBACiAJfQogCiAJdG1yLT5wcHEgPSBwcHE7Ci0Jc25kX3NlcV90aW1lcl9zZXRfdGlja19yZXNvbHV0aW9uKCZ0bXItPnRpY2ssIHRtci0+dGVtcG8sIHRtci0+cHBxKTsKKwlzbmRfc2VxX3RpbWVyX3NldF90aWNrX3Jlc29sdXRpb24odG1yKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0bXItPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvZHVtbXkuYyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwppbmRleCAyNTJlMDRjLi43ZjQxOTkwIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMKKysrIGIvc291bmQvZHJpdmVycy9kdW1teS5jCkBAIC00NSwxMDkgKzQ1LDIzIEBACiAjZGVmaW5lIE1BWF9QQ01fU1VCU1RSRUFNUwkxMjgKICNkZWZpbmUgTUFYX01JRElfREVWSUNFUwkyCiAKLSNpZiAwIC8qIGVtdTEwazEgZW11bGF0aW9uICovCi0jZGVmaW5lIE1BWF9CVUZGRVJfU0laRQkJKDEyOCAqIDEwMjQpCi1zdGF0aWMgaW50IGVtdTEwazFfcGxheWJhY2tfY29uc3RyYWludHMoc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKLXsKLQlpbnQgZXJyOwotCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfQllURVMsIDI1NiwgVUlOVF9NQVgpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiAwOwotfQotI2RlZmluZSBhZGRfcGxheWJhY2tfY29uc3RyYWludHMgZW11MTBrMV9wbGF5YmFja19jb25zdHJhaW50cwotI2VuZGlmCi0KLSNpZiAwIC8qIFJNRTk2NTIgZW11bGF0aW9uICovCi0jZGVmaW5lIE1BWF9CVUZGRVJfU0laRQkJKDI2ICogNjQgKiAxMDI0KQotI2RlZmluZSBVU0VfRk9STUFUUwkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUKLSNkZWZpbmUgVVNFX0NIQU5ORUxTX01JTgkyNgotI2RlZmluZSBVU0VfQ0hBTk5FTFNfTUFYCTI2Ci0jZGVmaW5lIFVTRV9QRVJJT0RTX01JTgkJMgotI2RlZmluZSBVU0VfUEVSSU9EU19NQVgJCTIKLSNlbmRpZgotCi0jaWYgMCAvKiBJQ0UxNzEyIGVtdWxhdGlvbiAqLwotI2RlZmluZSBNQVhfQlVGRkVSX1NJWkUJCSgyNTYgKiAxMDI0KQotI2RlZmluZSBVU0VfRk9STUFUUwkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUKLSNkZWZpbmUgVVNFX0NIQU5ORUxTX01JTgkxMAotI2RlZmluZSBVU0VfQ0hBTk5FTFNfTUFYCTEwCi0jZGVmaW5lIFVTRV9QRVJJT0RTX01JTgkJMQotI2RlZmluZSBVU0VfUEVSSU9EU19NQVgJCTEwMjQKLSNlbmRpZgotCi0jaWYgMCAvKiBVREExMzQxIGVtdWxhdGlvbiAqLwotI2RlZmluZSBNQVhfQlVGRkVSX1NJWkUJCSgxNjM4MCkKLSNkZWZpbmUgVVNFX0ZPUk1BVFMJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFCi0jZGVmaW5lIFVTRV9DSEFOTkVMU19NSU4JMgotI2RlZmluZSBVU0VfQ0hBTk5FTFNfTUFYCTIKLSNkZWZpbmUgVVNFX1BFUklPRFNfTUlOCQkyCi0jZGVmaW5lIFVTRV9QRVJJT0RTX01BWAkJMjU1Ci0jZW5kaWYKLQotI2lmIDAgLyogc2ltcGxlIEFDOTcgYnJpZGdlIChpbnRlbDh4MCkgd2l0aCA0OGtIeiBBQzk3IG9ubHkgY29kZWMgKi8KLSNkZWZpbmUgVVNFX0ZPUk1BVFMJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFCi0jZGVmaW5lIFVTRV9DSEFOTkVMU19NSU4JMgotI2RlZmluZSBVU0VfQ0hBTk5FTFNfTUFYCTIKLSNkZWZpbmUgVVNFX1JBVEUJCVNORFJWX1BDTV9SQVRFXzQ4MDAwCi0jZGVmaW5lIFVTRV9SQVRFX01JTgkJNDgwMDAKLSNkZWZpbmUgVVNFX1JBVEVfTUFYCQk0ODAwMAotI2VuZGlmCi0KLSNpZiAwIC8qIENBMDEwNiAqLwotI2RlZmluZSBVU0VfRk9STUFUUwkJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUKLSNkZWZpbmUgVVNFX0NIQU5ORUxTX01JTgkyCi0jZGVmaW5lIFVTRV9DSEFOTkVMU19NQVgJMgotI2RlZmluZSBVU0VfUkFURQkJKFNORFJWX1BDTV9SQVRFXzQ4MDAwfFNORFJWX1BDTV9SQVRFXzk2MDAwfFNORFJWX1BDTV9SQVRFXzE5MjAwMCkgCi0jZGVmaW5lIFVTRV9SQVRFX01JTgkJNDgwMDAgCi0jZGVmaW5lIFVTRV9SQVRFX01BWAkJMTkyMDAwCi0jZGVmaW5lIE1BWF9CVUZGRVJfU0laRQkJKCg2NTUzNi02NCkqOCkKLSNkZWZpbmUgTUFYX1BFUklPRF9TSVpFCQkoNjU1MzYtNjQpCi0jZGVmaW5lIFVTRV9QRVJJT0RTX01JTgkJMgotI2RlZmluZSBVU0VfUEVSSU9EU19NQVgJCTgKLSNlbmRpZgotCi0KIC8qIGRlZmF1bHRzICovCi0jaWZuZGVmIE1BWF9CVUZGRVJfU0laRQogI2RlZmluZSBNQVhfQlVGRkVSX1NJWkUJCSg2NCoxMDI0KQotI2VuZGlmCi0jaWZuZGVmIE1BWF9QRVJJT0RfU0laRQorI2RlZmluZSBNSU5fUEVSSU9EX1NJWkUJCTY0CiAjZGVmaW5lIE1BWF9QRVJJT0RfU0laRQkJTUFYX0JVRkZFUl9TSVpFCi0jZW5kaWYKLSNpZm5kZWYgVVNFX0ZPUk1BVFMKICNkZWZpbmUgVVNFX0ZPUk1BVFMgCQkoU05EUlZfUENNX0ZNVEJJVF9VOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFKQotI2VuZGlmCi0jaWZuZGVmIFVTRV9SQVRFCiAjZGVmaW5lIFVTRV9SQVRFCQlTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTIHwgU05EUlZfUENNX1JBVEVfODAwMF80ODAwMAogI2RlZmluZSBVU0VfUkFURV9NSU4JCTU1MDAKICNkZWZpbmUgVVNFX1JBVEVfTUFYCQk0ODAwMAotI2VuZGlmCi0jaWZuZGVmIFVTRV9DSEFOTkVMU19NSU4KICNkZWZpbmUgVVNFX0NIQU5ORUxTX01JTiAJMQotI2VuZGlmCi0jaWZuZGVmIFVTRV9DSEFOTkVMU19NQVgKICNkZWZpbmUgVVNFX0NIQU5ORUxTX01BWCAJMgotI2VuZGlmCi0jaWZuZGVmIFVTRV9QRVJJT0RTX01JTgogI2RlZmluZSBVU0VfUEVSSU9EU19NSU4gCTEKLSNlbmRpZgotI2lmbmRlZiBVU0VfUEVSSU9EU19NQVgKICNkZWZpbmUgVVNFX1BFUklPRFNfTUFYIAkxMDI0Ci0jZW5kaWYKLSNpZm5kZWYgYWRkX3BsYXliYWNrX2NvbnN0cmFpbnRzCi0jZGVmaW5lIGFkZF9wbGF5YmFja19jb25zdHJhaW50cyh4KSAwCi0jZW5kaWYKLSNpZm5kZWYgYWRkX2NhcHR1cmVfY29uc3RyYWludHMKLSNkZWZpbmUgYWRkX2NhcHR1cmVfY29uc3RyYWludHMoeCkgMAotI2VuZGlmCiAKIHN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CS8qIEluZGV4IDAtTUFYICovCiBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KIHN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IHsxLCBbMSAuLi4gKFNORFJWX0NBUkRTIC0gMSldID0gMH07CitzdGF0aWMgY2hhciAqbW9kZWxbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSBOVUxMfTsKIHN0YXRpYyBpbnQgcGNtX2RldnNbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSAxfTsKIHN0YXRpYyBpbnQgcGNtX3N1YnN0cmVhbXNbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSA4fTsKIC8vc3RhdGljIGludCBtaWRpX2RldnNbU05EUlZfQ0FSRFNdID0ge1swIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSAyfTsKQEAgLTE2Miw2ICs3Niw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciBkdW1teSBzb3VuZGNhcmQuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIHRoaXMgZHVtbXkgc291bmRjYXJkLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KG1vZGVsLCBjaGFycCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1vZGVsLCAiU291bmRjYXJkIG1vZGVsLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KHBjbV9kZXZzLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhwY21fZGV2cywgIlBDTSBkZXZpY2VzICMgKDAtNCkgZm9yIGR1bW15IGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShwY21fc3Vic3RyZWFtcywgaW50LCBOVUxMLCAwNDQ0KTsKQEAgLTE5Myw5ICsxMDksMjggQEAKIAlzbmRfcGNtX3VmcmFtZXNfdCAoKnBvaW50ZXIpKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqKTsKIH07CiAKK3N0cnVjdCBkdW1teV9tb2RlbCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgKCpwbGF5YmFja19jb25zdHJhaW50cykoc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSk7CisJaW50ICgqY2FwdHVyZV9jb25zdHJhaW50cykoc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSk7CisJdTY0IGZvcm1hdHM7CisJc2l6ZV90IGJ1ZmZlcl9ieXRlc19tYXg7CisJc2l6ZV90IHBlcmlvZF9ieXRlc19taW47CisJc2l6ZV90IHBlcmlvZF9ieXRlc19tYXg7CisJdW5zaWduZWQgaW50IHBlcmlvZHNfbWluOworCXVuc2lnbmVkIGludCBwZXJpb2RzX21heDsKKwl1bnNpZ25lZCBpbnQgcmF0ZXM7CisJdW5zaWduZWQgaW50IHJhdGVfbWluOworCXVuc2lnbmVkIGludCByYXRlX21heDsKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbHNfbWluOworCXVuc2lnbmVkIGludCBjaGFubmVsc19tYXg7Cit9OworCiBzdHJ1Y3Qgc25kX2R1bW15IHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IGR1bW15X21vZGVsICptb2RlbDsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCXN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHBjbV9odzsKIAlzcGlubG9ja190IG1peGVyX2xvY2s7CiAJaW50IG1peGVyX3ZvbHVtZVtNSVhFUl9BRERSX0xBU1QrMV1bMl07CiAJaW50IGNhcHR1cmVfc291cmNlW01JWEVSX0FERFJfTEFTVCsxXVsyXTsKQEAgLTIwMyw2ICsxMzgsOTIgQEAKIH07CiAKIC8qCisgKiBjYXJkIG1vZGVscworICovCisKK3N0YXRpYyBpbnQgZW11MTBrMV9wbGF5YmFja19jb25zdHJhaW50cyhzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQoreworCWludCBlcnI7CisJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX0JVRkZFUl9CWVRFUywgMjU2LCBVSU5UX01BWCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkdW1teV9tb2RlbCBtb2RlbF9lbXUxMGsxID0geworCS5uYW1lID0gImVtdTEwazEiLAorCS5wbGF5YmFja19jb25zdHJhaW50cyA9IGVtdTEwazFfcGxheWJhY2tfY29uc3RyYWludHMsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAxMjggKiAxMDI0LAorfTsKKworc3RydWN0IGR1bW15X21vZGVsIG1vZGVsX3JtZTk2NTIgPSB7CisJLm5hbWUgPSAicm1lOTY1MiIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAyNiAqIDY0ICogMTAyNCwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFLAorCS5jaGFubmVsc19taW4gPSAyNiwKKwkuY2hhbm5lbHNfbWF4ID0gMjYsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSAyLAorfTsKKworc3RydWN0IGR1bW15X21vZGVsIG1vZGVsX2ljZTE3MTIgPSB7CisJLm5hbWUgPSAiaWNlMTcxMiIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAyNTYgKiAxMDI0LAorCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCisJLmNoYW5uZWxzX21pbiA9IDEwLAorCS5jaGFubmVsc19tYXggPSAxMCwKKwkucGVyaW9kc19taW4gPSAxLAorCS5wZXJpb2RzX21heCA9IDEwMjQsCit9OworCitzdHJ1Y3QgZHVtbXlfbW9kZWwgbW9kZWxfdWRhMTM0MSA9IHsKKwkubmFtZSA9ICJ1ZGExMzQxIiwKKwkuYnVmZmVyX2J5dGVzX21heCA9IDE2MzgwLAorCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLmNoYW5uZWxzX21pbiA9IDIsCisJLmNoYW5uZWxzX21heCA9IDIsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSAyNTUsCit9OworCitzdHJ1Y3QgZHVtbXlfbW9kZWwgbW9kZWxfYWM5NyA9IHsKKwkubmFtZSA9ICJhYzk3IiwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAorCS5yYXRlX21pbiA9IDQ4MDAwLAorCS5yYXRlX21heCA9IDQ4MDAwLAorfTsKKworc3RydWN0IGR1bW15X21vZGVsIG1vZGVsX2NhMDEwNiA9IHsKKwkubmFtZSA9ICJjYTAxMDYiLAorCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAoKDY1NTM2LTY0KSo4KSwKKwkucGVyaW9kX2J5dGVzX21heCA9ICg2NTUzNi02NCksCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSA4LAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwfFNORFJWX1BDTV9SQVRFXzk2MDAwfFNORFJWX1BDTV9SQVRFXzE5MjAwMCwKKwkucmF0ZV9taW4gPSA0ODAwMCwKKwkucmF0ZV9tYXggPSAxOTIwMDAsCit9OworCitzdHJ1Y3QgZHVtbXlfbW9kZWwgKmR1bW15X21vZGVsc1tdID0geworCSZtb2RlbF9lbXUxMGsxLAorCSZtb2RlbF9ybWU5NjUyLAorCSZtb2RlbF9pY2UxNzEyLAorCSZtb2RlbF91ZGExMzQxLAorCSZtb2RlbF9hYzk3LAorCSZtb2RlbF9jYTAxMDYsCisJTlVMTAorfTsKKworLyoKICAqIHN5c3RlbSB0aW1lciBpbnRlcmZhY2UKICAqLwogCkBAIC01MDksNyArNTMwLDcgQEAKIAkuY2hhbm5lbHNfbWluID0JCVVTRV9DSEFOTkVMU19NSU4sCiAJLmNoYW5uZWxzX21heCA9CQlVU0VfQ0hBTk5FTFNfTUFYLAogCS5idWZmZXJfYnl0ZXNfbWF4ID0JTUFYX0JVRkZFUl9TSVpFLAotCS5wZXJpb2RfYnl0ZXNfbWluID0JNjQsCisJLnBlcmlvZF9ieXRlc19taW4gPQlNSU5fUEVSSU9EX1NJWkUsCiAJLnBlcmlvZF9ieXRlc19tYXggPQlNQVhfUEVSSU9EX1NJWkUsCiAJLnBlcmlvZHNfbWluID0JCVVTRV9QRVJJT0RTX01JTiwKIAkucGVyaW9kc19tYXggPQkJVVNFX1BFUklPRFNfTUFYLApAQCAtNTM4LDYgKzU1OSw3IEBACiBzdGF0aWMgaW50IGR1bW15X3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfZHVtbXkgKmR1bW15ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBkdW1teV9tb2RlbCAqbW9kZWwgPSBkdW1teS0+bW9kZWw7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlpbnQgZXJyOwogCkBAIC01NTEsNyArNTczLDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCXJ1bnRpbWUtPmh3ID0gZHVtbXlfcGNtX2hhcmR3YXJlOworCXJ1bnRpbWUtPmh3ID0gZHVtbXktPnBjbV9odzsKIAlpZiAoc3Vic3RyZWFtLT5wY20tPmRldmljZSAmIDEpIHsKIAkJcnVudGltZS0+aHcuaW5mbyAmPSB+U05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQ7CiAJCXJ1bnRpbWUtPmh3LmluZm8gfD0gU05EUlZfUENNX0lORk9fTk9OSU5URVJMRUFWRUQ7CkBAIC01NjAsMTAgKzU4MiwxNiBAQAogCQlydW50aW1lLT5ody5pbmZvICY9IH4oU05EUlZfUENNX0lORk9fTU1BUCB8CiAJCQkJICAgICAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCk7CiAKLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJZXJyID0gYWRkX3BsYXliYWNrX2NvbnN0cmFpbnRzKHN1YnN0cmVhbS0+cnVudGltZSk7Ci0JZWxzZQotCQllcnIgPSBhZGRfY2FwdHVyZV9jb25zdHJhaW50cyhzdWJzdHJlYW0tPnJ1bnRpbWUpOworCWlmIChtb2RlbCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCWlmIChtb2RlbC0+cGxheWJhY2tfY29uc3RyYWludHMpCisJCQllcnIgPSBtb2RlbC0+cGxheWJhY2tfY29uc3RyYWludHMoc3Vic3RyZWFtLT5ydW50aW1lKTsKKwl9IGVsc2UgeworCQlpZiAobW9kZWwtPmNhcHR1cmVfY29uc3RyYWludHMpCisJCQllcnIgPSBtb2RlbC0+Y2FwdHVyZV9jb25zdHJhaW50cyhzdWJzdHJlYW0tPnJ1bnRpbWUpOworCX0KIAlpZiAoZXJyIDwgMCkgewogCQlkdW1teS0+dGltZXJfb3BzLT5mcmVlKHN1YnN0cmVhbSk7CiAJCXJldHVybiBlcnI7CkBAIC04MjMsMTcgKzg1MSwxOSBAQAogLyoKICAqIHByb2MgaW50ZXJmYWNlCiAgKi8KLXN0YXRpYyB2b2lkIHByaW50X2Zvcm1hdHMoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQorc3RhdGljIHZvaWQgcHJpbnRfZm9ybWF0cyhzdHJ1Y3Qgc25kX2R1bW15ICpkdW1teSwKKwkJCSAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFNORFJWX1BDTV9GT1JNQVRfTEFTVDsgaSsrKSB7Ci0JCWlmIChkdW1teV9wY21faGFyZHdhcmUuZm9ybWF0cyAmICgxVUxMIDw8IGkpKQorCQlpZiAoZHVtbXktPnBjbV9ody5mb3JtYXRzICYgKDFVTEwgPDwgaSkpCiAJCQlzbmRfaXByaW50ZihidWZmZXIsICIgJXMiLCBzbmRfcGNtX2Zvcm1hdF9uYW1lKGkpKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50X3JhdGVzKHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKK3N0YXRpYyB2b2lkIHByaW50X3JhdGVzKHN0cnVjdCBzbmRfZHVtbXkgKmR1bW15LAorCQkJc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQogewogCXN0YXRpYyBpbnQgcmF0ZXNbXSA9IHsKIAkJNTUxMiwgODAwMCwgMTEwMjUsIDE2MDAwLCAyMjA1MCwgMzIwMDAsIDQ0MTAwLCA0ODAwMCwKQEAgLTg0MSwxOSArODcxLDE5IEBACiAJfTsKIAlpbnQgaTsKIAotCWlmIChkdW1teV9wY21faGFyZHdhcmUucmF0ZXMgJiBTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTKQorCWlmIChkdW1teS0+cGNtX2h3LnJhdGVzICYgU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUykKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiIGNvbnRpbnVvdXMiKTsKLQlpZiAoZHVtbXlfcGNtX2hhcmR3YXJlLnJhdGVzICYgU05EUlZfUENNX1JBVEVfS05PVCkKKwlpZiAoZHVtbXktPnBjbV9ody5yYXRlcyAmIFNORFJWX1BDTV9SQVRFX0tOT1QpCiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiBrbm90Iik7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmF0ZXMpOyBpKyspCi0JCWlmIChkdW1teV9wY21faGFyZHdhcmUucmF0ZXMgJiAoMSA8PCBpKSkKKwkJaWYgKGR1bW15LT5wY21faHcucmF0ZXMgJiAoMSA8PCBpKSkKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAlZCIsIHJhdGVzW2ldKTsKIH0KIAotI2RlZmluZSBnZXRfZHVtbXlfaW50X3B0cihvZnMpIFwKLQkodW5zaWduZWQgaW50ICopKChjaGFyICopJmR1bW15X3BjbV9oYXJkd2FyZSArIChvZnMpKQotI2RlZmluZSBnZXRfZHVtbXlfbGxfcHRyKG9mcykgXAotCSh1bnNpZ25lZCBsb25nIGxvbmcgKikoKGNoYXIgKikmZHVtbXlfcGNtX2hhcmR3YXJlICsgKG9mcykpCisjZGVmaW5lIGdldF9kdW1teV9pbnRfcHRyKGR1bW15LCBvZnMpIFwKKwkodW5zaWduZWQgaW50ICopKChjaGFyICopJigoZHVtbXkpLT5wY21faHcpICsgKG9mcykpCisjZGVmaW5lIGdldF9kdW1teV9sbF9wdHIoZHVtbXksIG9mcykgXAorCSh1bnNpZ25lZCBsb25nIGxvbmcgKikoKGNoYXIgKikmKChkdW1teSktPnBjbV9odykgKyAob2ZzKSkKIAogc3RydWN0IGR1bW15X2h3X2ZpZWxkIHsKIAljb25zdCBjaGFyICpuYW1lOwpAQCAtODg0LDIwICs5MTQsMjEgQEAKIHN0YXRpYyB2b2lkIGR1bW15X3Byb2NfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAogCQkJICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKIHsKKwlzdHJ1Y3Qgc25kX2R1bW15ICpkdW1teSA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmaWVsZHMpOyBpKyspIHsKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiJXMgIiwgZmllbGRzW2ldLm5hbWUpOwogCQlpZiAoZmllbGRzW2ldLnNpemUgPT0gc2l6ZW9mKGludCkpCiAJCQlzbmRfaXByaW50ZihidWZmZXIsIGZpZWxkc1tpXS5mb3JtYXQsCi0JCQkJICAgICpnZXRfZHVtbXlfaW50X3B0cihmaWVsZHNbaV0ub2Zmc2V0KSk7CisJCQkJKmdldF9kdW1teV9pbnRfcHRyKGR1bW15LCBmaWVsZHNbaV0ub2Zmc2V0KSk7CiAJCWVsc2UKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgZmllbGRzW2ldLmZvcm1hdCwKLQkJCQkgICAgKmdldF9kdW1teV9sbF9wdHIoZmllbGRzW2ldLm9mZnNldCkpOworCQkJCSpnZXRfZHVtbXlfbGxfcHRyKGR1bW15LCBmaWVsZHNbaV0ub2Zmc2V0KSk7CiAJCWlmICghc3RyY21wKGZpZWxkc1tpXS5uYW1lLCAiZm9ybWF0cyIpKQotCQkJcHJpbnRfZm9ybWF0cyhidWZmZXIpOworCQkJcHJpbnRfZm9ybWF0cyhkdW1teSwgYnVmZmVyKTsKIAkJZWxzZSBpZiAoIXN0cmNtcChmaWVsZHNbaV0ubmFtZSwgInJhdGVzIikpCi0JCQlwcmludF9yYXRlcyhidWZmZXIpOworCQkJcHJpbnRfcmF0ZXMoZHVtbXksIGJ1ZmZlcik7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiAJfQogfQpAQCAtOTA1LDYgKzkzNiw3IEBACiBzdGF0aWMgdm9pZCBkdW1teV9wcm9jX3dyaXRlKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCiAJCQkgICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKIHsKKwlzdHJ1Y3Qgc25kX2R1bW15ICpkdW1teSA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CiAJY2hhciBsaW5lWzY0XTsKIAogCXdoaWxlICghc25kX2luZm9fZ2V0X2xpbmUoYnVmZmVyLCBsaW5lLCBzaXplb2YobGluZSkpKSB7CkBAIC05MjQsOSArOTU2LDkgQEAKIAkJaWYgKHN0cmljdF9zdHJ0b3VsbChpdGVtLCAwLCAmdmFsKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoZmllbGRzW2ldLnNpemUgPT0gc2l6ZW9mKGludCkpCi0JCQkqZ2V0X2R1bW15X2ludF9wdHIoZmllbGRzW2ldLm9mZnNldCkgPSB2YWw7CisJCQkqZ2V0X2R1bW15X2ludF9wdHIoZHVtbXksIGZpZWxkc1tpXS5vZmZzZXQpID0gdmFsOwogCQllbHNlCi0JCQkqZ2V0X2R1bW15X2xsX3B0cihmaWVsZHNbaV0ub2Zmc2V0KSA9IHZhbDsKKwkJCSpnZXRfZHVtbXlfbGxfcHRyKGR1bW15LCBmaWVsZHNbaV0ub2Zmc2V0KSA9IHZhbDsKIAl9CiB9CiAKQEAgLTkzOCw2ICs5NzAsNyBAQAogCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIGNoaXAsIGR1bW15X3Byb2NfcmVhZCk7CiAJCWVudHJ5LT5jLnRleHQud3JpdGUgPSBkdW1teV9wcm9jX3dyaXRlOwogCQllbnRyeS0+bW9kZSB8PSBTX0lXVVNSOworCQllbnRyeS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKIAl9CiB9CiAjZWxzZQpAQCAtOTQ4LDYgKzk4MSw3IEBACiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfZHVtbXkgKmR1bW15OworCXN0cnVjdCBkdW1teV9tb2RlbCAqbSA9IE5VTEwsICoqbWRsOwogCWludCBpZHgsIGVycjsKIAlpbnQgZGV2ID0gZGV2cHRyLT5pZDsKIApAQCAtOTU3LDYgKzk5MSwxNSBAQAogCQlyZXR1cm4gZXJyOwogCWR1bW15ID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWR1bW15LT5jYXJkID0gY2FyZDsKKwlmb3IgKG1kbCA9IGR1bW15X21vZGVsczsgKm1kbCAmJiBtb2RlbFtkZXZdOyBtZGwrKykgeworCQlpZiAoc3RyY21wKG1vZGVsW2Rldl0sICgqbWRsKS0+bmFtZSkgPT0gMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCSJzbmQtZHVtbXk6IFVzaW5nIG1vZGVsICclcycgZm9yIGNhcmQgJWlcbiIsCisJCQkJKCptZGwpLT5uYW1lLCBjYXJkLT5udW1iZXIpOworCQkJbSA9IGR1bW15LT5tb2RlbCA9ICptZGw7CisJCQlicmVhazsKKwkJfQorCX0KIAlmb3IgKGlkeCA9IDA7IGlkeCA8IE1BWF9QQ01fREVWSUNFUyAmJiBpZHggPCBwY21fZGV2c1tkZXZdOyBpZHgrKykgewogCQlpZiAocGNtX3N1YnN0cmVhbXNbZGV2XSA8IDEpCiAJCQlwY21fc3Vic3RyZWFtc1tkZXZdID0gMTsKQEAgLTk2Niw2ICsxMDA5LDMzIEBACiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBfX25vZGV2OwogCX0KKworCWR1bW15LT5wY21faHcgPSBkdW1teV9wY21faGFyZHdhcmU7CisJaWYgKG0pIHsKKwkJaWYgKG0tPmZvcm1hdHMpCisJCQlkdW1teS0+cGNtX2h3LmZvcm1hdHMgPSBtLT5mb3JtYXRzOworCQlpZiAobS0+YnVmZmVyX2J5dGVzX21heCkKKwkJCWR1bW15LT5wY21faHcuYnVmZmVyX2J5dGVzX21heCA9IG0tPmJ1ZmZlcl9ieXRlc19tYXg7CisJCWlmIChtLT5wZXJpb2RfYnl0ZXNfbWluKQorCQkJZHVtbXktPnBjbV9ody5wZXJpb2RfYnl0ZXNfbWluID0gbS0+cGVyaW9kX2J5dGVzX21pbjsKKwkJaWYgKG0tPnBlcmlvZF9ieXRlc19tYXgpCisJCQlkdW1teS0+cGNtX2h3LnBlcmlvZF9ieXRlc19tYXggPSBtLT5wZXJpb2RfYnl0ZXNfbWF4OworCQlpZiAobS0+cGVyaW9kc19taW4pCisJCQlkdW1teS0+cGNtX2h3LnBlcmlvZHNfbWluID0gbS0+cGVyaW9kc19taW47CisJCWlmIChtLT5wZXJpb2RzX21heCkKKwkJCWR1bW15LT5wY21faHcucGVyaW9kc19tYXggPSBtLT5wZXJpb2RzX21heDsKKwkJaWYgKG0tPnJhdGVzKQorCQkJZHVtbXktPnBjbV9ody5yYXRlcyA9IG0tPnJhdGVzOworCQlpZiAobS0+cmF0ZV9taW4pCisJCQlkdW1teS0+cGNtX2h3LnJhdGVfbWluID0gbS0+cmF0ZV9taW47CisJCWlmIChtLT5yYXRlX21heCkKKwkJCWR1bW15LT5wY21faHcucmF0ZV9tYXggPSBtLT5yYXRlX21heDsKKwkJaWYgKG0tPmNoYW5uZWxzX21pbikKKwkJCWR1bW15LT5wY21faHcuY2hhbm5lbHNfbWluID0gbS0+Y2hhbm5lbHNfbWluOworCQlpZiAobS0+Y2hhbm5lbHNfbWF4KQorCQkJZHVtbXktPnBjbV9ody5jaGFubmVsc19tYXggPSBtLT5jaGFubmVsc19tYXg7CisJfQorCiAJZXJyID0gc25kX2NhcmRfZHVtbXlfbmV3X21peGVyKGR1bW15KTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBfX25vZGV2OwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy92eC92eF9wY20uYyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfcGNtLmMKaW5kZXggNjY0NGQwMC4uMzVhMmY3MSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92eC92eF9wY20uYworKysgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3BjbS5jCkBAIC00Niw3ICs0Niw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KQEAgLTU2LDU1ICs1NSw2IEBACiAKIAogLyoKLSAqIHdlIHVzZSBhIHZtYWxsb2MnZWQgKHNnLSlidWZmZXIKLSAqLwotCi0vKiBnZXQgdGhlIHBoeXNpY2FsIHBhZ2UgcG9pbnRlciBvbiB0aGUgZ2l2ZW4gb2Zmc2V0ICovCi1zdGF0aWMgc3RydWN0IHBhZ2UgKnNuZF9wY21fZ2V0X3ZtYWxsb2NfcGFnZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0Jdm9pZCAqcGFnZXB0ciA9IHN1YnMtPnJ1bnRpbWUtPmRtYV9hcmVhICsgb2Zmc2V0OwotCXJldHVybiB2bWFsbG9jX3RvX3BhZ2UocGFnZXB0cik7Ci19Ci0KLS8qCi0gKiBhbGxvY2F0ZSBhIGJ1ZmZlciB2aWEgdm1hbGxvY18zMigpLgotICogY2FsbGVkIGZyb20gaHdfcGFyYW1zCi0gKiBOT1RFOiB0aGlzIG1heSBiZSBjYWxsZWQgbm90IG9ubHkgb25jZSBwZXIgcGNtIG9wZW4hCi0gKi8KLXN0YXRpYyBpbnQgc25kX3BjbV9hbGxvY192bWFsbG9jX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMsIHNpemVfdCBzaXplKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzLT5ydW50aW1lOwotCWlmIChydW50aW1lLT5kbWFfYXJlYSkgewotCQkvKiBhbHJlYWR5IGFsbG9jYXRlZCAqLwotCQlpZiAocnVudGltZS0+ZG1hX2J5dGVzID49IHNpemUpCi0JCQlyZXR1cm4gMDsgLyogYWxyZWFkeSBlbm91Z2ggbGFyZ2UgKi8KLQkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOwotCX0KLQlydW50aW1lLT5kbWFfYXJlYSA9IHZtYWxsb2NfMzIoc2l6ZSk7Ci0JaWYgKCEgcnVudGltZS0+ZG1hX2FyZWEpCi0JCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChydW50aW1lLT5kbWFfYXJlYSwgMCwgc2l6ZSk7Ci0JcnVudGltZS0+ZG1hX2J5dGVzID0gc2l6ZTsKLQlyZXR1cm4gMTsgLyogY2hhbmdlZCAqLwotfQotCi0vKgotICogZnJlZSB0aGUgYnVmZmVyLgotICogY2FsbGVkIGZyb20gaHdfZnJlZSBjYWxsYmFjawotICogTk9URTogdGhpcyBtYXkgYmUgY2FsbGVkIG5vdCBvbmx5IG9uY2UgcGVyIHBjbSBvcGVuIQotICovCi1zdGF0aWMgaW50IHNuZF9wY21fZnJlZV92bWFsbG9jX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMpCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnMtPnJ1bnRpbWU7Ci0KLQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7Ci0JcnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOwotCXJldHVybiAwOwotfQotCi0KLS8qCiAgKiByZWFkIHRocmVlIHBlbmRpbmcgcGNtIGJ5dGVzIHZpYSBpbmIoKQogICovCiBzdGF0aWMgdm9pZCB2eF9wY21fcmVhZF9wZXJfYnl0ZXMoc3RydWN0IHZ4X2NvcmUgKmNoaXAsIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUsCkBAIC04NjUsNyArODE1LDggQEAKIHN0YXRpYyBpbnQgdnhfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMsCiAJCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKIHsKLQlyZXR1cm4gc25kX3BjbV9hbGxvY192bWFsbG9jX2J1ZmZlcihzdWJzLCBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCXJldHVybiBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jXzMyX2J1ZmZlcgorCQkJCQkoc3VicywgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKIH0KIAogLyoKQEAgLTg3Myw3ICs4MjQsNyBAQAogICovCiBzdGF0aWMgaW50IHZ4X3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicykKIHsKLQlyZXR1cm4gc25kX3BjbV9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN1YnMpOworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN1YnMpOwogfQogCiAvKgpAQCAtOTUzLDcgKzkwNCw4IEBACiAJLnByZXBhcmUgPQl2eF9wY21fcHJlcGFyZSwKIAkudHJpZ2dlciA9CXZ4X3BjbV90cmlnZ2VyLAogCS5wb2ludGVyID0JdnhfcGNtX3BsYXliYWNrX3BvaW50ZXIsCi0JLnBhZ2UgPQkJc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlLAorCS5wYWdlID0JCXNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UsCisJLm1tYXAgPQkJc25kX3BjbV9saWJfbW1hcF92bWFsbG9jLAogfTsKIAogCkBAIC0xMTczLDcgKzExMjUsOCBAQAogCS5wcmVwYXJlID0JdnhfcGNtX3ByZXBhcmUsCiAJLnRyaWdnZXIgPQl2eF9wY21fdHJpZ2dlciwKIAkucG9pbnRlciA9CXZ4X3BjbV9jYXB0dXJlX3BvaW50ZXIsCi0JLnBhZ2UgPQkJc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlLAorCS5wYWdlID0JCXNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UsCisJLm1tYXAgPQkJc25kX3BjbV9saWJfbW1hcF92bWFsbG9jLAogfTsKIAogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvS2NvbmZpZyBiL3NvdW5kL2lzYS9LY29uZmlnCmluZGV4IDAyZmU4MWMuLjc1NWEwYTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9LY29uZmlnCisrKyBiL3NvdW5kL2lzYS9LY29uZmlnCkBAIC02MywxNSArNjMsMTYgQEAKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1hZDE4NDguCiAKIGNvbmZpZyBTTkRfQUxTMTAwCi0JdHJpc3RhdGUgIkF2YW5jZSBMb2dpYyBBTFMxMDAvQUxTMTIwIgorCXRyaXN0YXRlICJEaWFtb25kIFRlY2guIERULTAxOXggYW5kIEF2YW5jZSBMb2dpYyBBTFN4eHgiCiAJZGVwZW5kcyBvbiBQTlAKIAlzZWxlY3QgSVNBUE5QCiAJc2VsZWN0IFNORF9PUEwzX0xJQgogCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKIAlzZWxlY3QgU05EX1NCMTZfRFNQCiAJaGVscAotCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHNvdW5kY2FyZHMgYmFzZWQgb24gQXZhbmNlCi0JICBMb2dpYyBBTFMxMDAsIEFMUzExMCwgQUxTMTIwIGFuZCBBTFMyMDAgY2hpcHMuCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3Igc291bmRjYXJkcyBiYXNlZCBvbiB0aGUKKwkgIERpYW1vbmQgVGVjaG5vbG9naWVzIERULTAxOVggb3IgQXZhbmNlIExvZ2ljIGNoaXBzOiBBTFMwMDcsCisJICBBTFMxMDAsIEFMUzExMCwgQUxTMTIwIGFuZCBBTFMyMDAgY2hpcHMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1hbHMxMDAuCkBAIC0xMjcsMjAgKzEyOCw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtY3M0MjM2LgogCi1jb25maWcgU05EX0RUMDE5WAotCXRyaXN0YXRlICJEaWFtb25kIFRlY2hub2xvZ2llcyBEVC0wMTlYLCBBdmFuY2UgTG9naWMgQUxTLTAwNyIKLQlkZXBlbmRzIG9uIFBOUAotCXNlbGVjdCBJU0FQTlAKLQlzZWxlY3QgU05EX09QTDNfTElCCi0Jc2VsZWN0IFNORF9NUFU0MDFfVUFSVAotCXNlbGVjdCBTTkRfU0IxNl9EU1AKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3Igc291bmRjYXJkcyBiYXNlZCBvbiB0aGUKLQkgIERpYW1vbmQgVGVjaG5vbG9naWVzIERULTAxOVggb3IgQXZhbmNlIExvZ2ljIEFMUy0wMDcgY2hpcHMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIHNuZC1kdDAxOXguCi0KIGNvbmZpZyBTTkRfRVM5NjgKIAl0cmlzdGF0ZSAiR2VuZXJpYyBFU1MgRVM5NjggZHJpdmVyIgogCWRlcGVuZHMgb24gUE5QCkBAIC0yNTIsNiArMjM5LDIyIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtaW50ZXJ3YXZlLXN0Yi4KIAorY29uZmlnIFNORF9KQVpaMTYKKwl0cmlzdGF0ZSAiTWVkaWEgVmlzaW9uIEphenoxNiBjYXJkIGFuZCBjb21wYXRpYmxlcyIKKwlzZWxlY3QgU05EX09QTDNfTElCCisJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAorCXNlbGVjdCBTTkRfU0I4X0RTUAorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBzb3VuZGNhcmRzIGJhc2VkIG9uIHRoZQorCSAgTWVkaWEgVmlzaW9uIEphenoxNiBjaGlwc2V0OiBkaWdpdGFsIGNoaXAgTVZEMTIxNiAoSmF6ejE2KSwKKwkgIGNvZGVjIE1WQTQxNiAoQ1M0MjE2KSBhbmQgbWl4ZXIgTVZBNTE0IChJQ1MyNTE0KS4KKwkgIE1lZGlhIFZpc2lvbidzIEphenoxNiBjYXJkcyB3ZXJlIHNvbGQgdW5kZXIgbmFtZXMgUHJvIFNvbmljIDE2LAorCSAgUHJlbWl1bSAzLUQgYW5kIFBybyAzLUQuIFRoZXJlIHdlcmUgYWxzbyBPRU1zIGNhcmRzIHdpdGggdGhlCisJICBKYXp6MTYgY2hpcHNldC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLWphenoxNi4KKwogY29uZmlnIFNORF9PUEwzU0EyCiAJdHJpc3RhdGUgIllhbWFoYSBPUEwzLVNBMi9TQTMiCiAJc2VsZWN0IFNORF9PUEwzX0xJQgpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL01ha2VmaWxlIGIvc291bmQvaXNhL01ha2VmaWxlCmluZGV4IGI5MDZiOWEuLmM3M2QzMGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9NYWtlZmlsZQorKysgYi9zb3VuZC9pc2EvTWFrZWZpbGUKQEAgLTcsNyArNyw2IEBACiBzbmQtYWxzMTAwLW9ianMgOj0gYWxzMTAwLm8KIHNuZC1henQyMzIwLW9ianMgOj0gYXp0MjMyMC5vCiBzbmQtY21pODMzMC1vYmpzIDo9IGNtaTgzMzAubwotc25kLWR0MDE5eC1vYmpzIDo9IGR0MDE5eC5vCiBzbmQtZXMxOHh4LW9ianMgOj0gZXMxOHh4Lm8KIHNuZC1vcGwzc2EyLW9ianMgOj0gb3BsM3NhMi5vCiBzbmQtc2M2MDAwLW9ianMgOj0gc2M2MDAwLm8KQEAgLTE5LDcgKzE4LDYgQEAKIG9iai0kKENPTkZJR19TTkRfQUxTMTAwKSArPSBzbmQtYWxzMTAwLm8KIG9iai0kKENPTkZJR19TTkRfQVpUMjMyMCkgKz0gc25kLWF6dDIzMjAubwogb2JqLSQoQ09ORklHX1NORF9DTUk4MzMwKSArPSBzbmQtY21pODMzMC5vCi1vYmotJChDT05GSUdfU05EX0RUMDE5WCkgKz0gc25kLWR0MDE5eC5vCiBvYmotJChDT05GSUdfU05EX0VTMThYWCkgKz0gc25kLWVzMTh4eC5vCiBvYmotJChDT05GSUdfU05EX09QTDNTQTIpICs9IHNuZC1vcGwzc2EyLm8KIG9iai0kKENPTkZJR19TTkRfU0M2MDAwKSArPSBzbmQtc2M2MDAwLm8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hbHMxMDAuYyBiL3NvdW5kL2lzYS9hbHMxMDAuYwppbmRleCA1ZmQ1MmU0Li4yMGJlY2M4IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWxzMTAwLmMKKysrIGIvc291bmQvaXNhL2FsczEwMC5jCkBAIC0yLDkgKzIsMTMgQEAKIC8qCiAgICAgY2FyZC1hbHMxMDAuYyAtIGRyaXZlciBmb3IgQXZhbmNlIExvZ2ljIEFMUzEwMCBiYXNlZCBzb3VuZGNhcmRzLgogICAgIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIGJ5IE1hc3NpbW8gUGljY2lvbmkgPGRhZmFzdGlkaW9AbGliZXJvLml0PgorICAgIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIGJ5IE1hc3NpbW8gUGljY2lvbmkgPGRhZmFzdGlkaW9AbGliZXJvLml0PgogCiAgICAgVGhhbmtzIHRvIFBpZXJmcmFuY2VzY28gJ3FNMicgUGFzc2VyaW5pLgogCisgICAgR2VuZXJhbGlzZWQgZm9yIHNvdW5kY2FyZHMgYmFzZWQgb24gRFQtMDE5NiBhbmQgQUxTLTAwNyBjaGlwcworICAgIGJ5IEpvbmF0aGFuIFdvaXRoZSA8andvaXRoZUBwaHlzaWNzLmFkZWxhaWRlLmVkdS5hdT46IEp1bmUgMjAwMi4KKwogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtMzMsMTAgKzM3LDEwIEBACiAKICNkZWZpbmUgUEZYICJhbHMxMDA6ICIKIAotTU9EVUxFX0FVVEhPUigiTWFzc2ltbyBQaWNjaW9uaSA8ZGFmYXN0aWRpb0BsaWJlcm8uaXQ+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkF2YW5jZSBMb2dpYyBBTFMxWDAiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e0F2YW5jZSBMb2dpYyxBTFMxMDAgLSBQUk8xNlBOUH0sIgorTU9EVUxFX0RFU0NSSVBUSU9OKCJBdmFuY2UgTG9naWMgQUxTMDA3L0FMUzFYMCIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7RGlhbW9uZCBUZWNobm9sb2dpZXMgRFQtMDE5WH0sIgorCQkie0F2YW5jZSBMb2dpYyBBTFMtMDA3fX0iCisJCSJ7e0F2YW5jZSBMb2dpYyxBTFMxMDAgLSBQUk8xNlBOUH0sIgogCSAgICAgICAgIntBdmFuY2UgTG9naWMsQUxTMTEwfSwiCiAJICAgICAgICAie0F2YW5jZSBMb2dpYyxBTFMxMjB9LCIKIAkgICAgICAgICJ7QXZhbmNlIExvZ2ljLEFMUzIwMH0sIgpAQCAtNDUsOSArNDksMTIgQEAKIAkgICAgICAgICJ7QXZhbmNlIExvZ2ljLEFMUzEyMH0sIgogCSAgICAgICAgIntSVEwsUlRMMzAwMH19Iik7CiAKK01PRFVMRV9BVVRIT1IoIk1hc3NpbW8gUGljY2lvbmkgPGRhZmFzdGlkaW9AbGliZXJvLml0PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCiBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwkvKiBJbmRleCAwLU1BWCAqLwogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCi1zdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9JU0FQTlA7IC8qIEVuYWJsZSB0aGlzIGNhcmQgKi8KK3N0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFOwkvKiBFbmFibGUgdGhpcyBjYXJkICovCiBzdGF0aWMgbG9uZyBwb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsJLyogUG5QIHNldHVwICovCiBzdGF0aWMgbG9uZyBtcHVfcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CS8qIFBuUCBzZXR1cCAqLwogc3RhdGljIGxvbmcgZm1fcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CS8qIFBuUCBzZXR1cCAqLwpAQCAtNTcsMTQgKzY0LDE1IEBACiBzdGF0aWMgaW50IGRtYTE2W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRE1BOwkvKiBQblAgc2V0dXAgKi8KIAogbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBhbHMxMDAgYmFzZWQgc291bmRjYXJkLiIpOworTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBBdmFuY2UgTG9naWMgYmFzZWQgc291bmRjYXJkLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGlkLCBjaGFycCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciBhbHMxMDAgYmFzZWQgc291bmRjYXJkLiIpOworTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgQXZhbmNlIExvZ2ljIGJhc2VkIHNvdW5kY2FyZC4iKTsKIG1vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgYWxzMTAwIGJhc2VkIHNvdW5kY2FyZC4iKTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIEF2YW5jZSBMb2dpYyBiYXNlZCBzb3VuZGNhcmQuIik7CisKK01PRFVMRV9BTElBUygic25kLWR0MDE5eCIpOwogCiBzdHJ1Y3Qgc25kX2NhcmRfYWxzMTAwIHsKLQlpbnQgZGV2X25vOwogCXN0cnVjdCBwbnBfZGV2ICpkZXY7CiAJc3RydWN0IHBucF9kZXYgKmRldm1wdTsKIAlzdHJ1Y3QgcG5wX2RldiAqZGV2b3BsOwpAQCAtNzIsMjUgKzgwLDQzIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCBzbmRfYWxzMTAwX3BucGlkc1tdID0geworCS8qIERUMTk3QTMwICovCisJeyAuaWQgPSAiUldCMTY4OCIsCisJICAuZGV2cyA9IHsgeyAiQEBAMDAwMSIgfSwgeyAiQFhAMDAwMSIgfSwgeyAiQEhAMDAwMSIgfSB9LAorCSAgLmRyaXZlcl9kYXRhID0gU0JfSFdfRFQwMTlYIH0sCisJLyogRFQwMTk2IC8gQUxTLTAwNyAqLworCXsgLmlkID0gIkFMUzAwMDciLAorCSAgLmRldnMgPSB7IHsgIkBAQDAwMDEiIH0sIHsgIkBYQDAwMDEiIH0sIHsgIkBIQDAwMDEiIH0gfSwKKwkgIC5kcml2ZXJfZGF0YSA9IFNCX0hXX0RUMDE5WCB9LAogCS8qIEFMUzEwMCAtIFBSTzE2UE5QICovCi0JeyAuaWQgPSAiQUxTMDAwMSIsIC5kZXZzID0geyB7ICJAQEAwMDAxIiB9LCB7ICJAWEAwMDAxIiB9LCB7ICJASEAwMDAxIiB9IH0gfSwKKwl7IC5pZCA9ICJBTFMwMDAxIiwKKwkgIC5kZXZzID0geyB7ICJAQEAwMDAxIiB9LCB7ICJAWEAwMDAxIiB9LCB7ICJASEAwMDAxIiB9IH0sCisJICAuZHJpdmVyX2RhdGEgPSBTQl9IV19BTFMxMDAgfSwKIAkvKiBBTFMxMTAgLSBNRjEwMDAgLSBEaWdpbWF0ZSAzRCBTb3VuZCAqLwotCXsgLmlkID0gIkFMUzAxMTAiLCAuZGV2cyA9IHsgeyAiQEBAMTAwMSIgfSwgeyAiQFhAMTAwMSIgfSwgeyAiQEhAMTAwMSIgfSB9IH0sCisJeyAuaWQgPSAiQUxTMDExMCIsCisJICAuZGV2cyA9IHsgeyAiQEBAMTAwMSIgfSwgeyAiQFhAMTAwMSIgfSwgeyAiQEhAMTAwMSIgfSB9LAorCSAgLmRyaXZlcl9kYXRhID0gU0JfSFdfQUxTMTAwIH0sCiAJLyogQUxTMTIwICovCi0JeyAuaWQgPSAiQUxTMDEyMCIsIC5kZXZzID0geyB7ICJAQEAyMDAxIiB9LCB7ICJAWEAyMDAxIiB9LCB7ICJASEAyMDAxIiB9IH0gfSwKKwl7IC5pZCA9ICJBTFMwMTIwIiwKKwkgIC5kZXZzID0geyB7ICJAQEAyMDAxIiB9LCB7ICJAWEAyMDAxIiB9LCB7ICJASEAyMDAxIiB9IH0sCisJICAuZHJpdmVyX2RhdGEgPSBTQl9IV19BTFMxMDAgfSwKIAkvKiBBTFMyMDAgKi8KLQl7IC5pZCA9ICJBTFMwMjAwIiwgLmRldnMgPSB7IHsgIkBAQDAwMjAiIH0sIHsgIkBYQDAwMjAiIH0sIHsgIkBIQDAwMDEiIH0gfSB9LAorCXsgLmlkID0gIkFMUzAyMDAiLAorCSAgLmRldnMgPSB7IHsgIkBAQDAwMjAiIH0sIHsgIkBYQDAwMjAiIH0sIHsgIkBIQDAwMDEiIH0gfSwKKwkgIC5kcml2ZXJfZGF0YSA9IFNCX0hXX0FMUzEwMCB9LAogCS8qIEFMUzIwMCBPRU0gKi8KLQl7IC5pZCA9ICJBTFMwMjAwIiwgLmRldnMgPSB7IHsgIkBAQDAwMjAiIH0sIHsgIkBYQDAwMjAiIH0sIHsgIkBIQDAwMjAiIH0gfSB9LAorCXsgLmlkID0gIkFMUzAyMDAiLAorCSAgLmRldnMgPSB7IHsgIkBAQDAwMjAiIH0sIHsgIkBYQDAwMjAiIH0sIHsgIkBIQDAwMjAiIH0gfSwKKwkgIC5kcml2ZXJfZGF0YSA9IFNCX0hXX0FMUzEwMCB9LAogCS8qIFJUTDMwMDAgKi8KLQl7IC5pZCA9ICJSVEwzMDAwIiwgLmRldnMgPSB7IHsgIkBAQDIwMDEiIH0sIHsgIkBYQDIwMDEiIH0sIHsgIkBIQDIwMDEiIH0gfSB9LAotCXsgLmlkID0gIiIsIH0gLyogZW5kICovCisJeyAuaWQgPSAiUlRMMzAwMCIsCisJICAuZGV2cyA9IHsgeyAiQEBAMjAwMSIgfSwgeyAiQFhAMjAwMSIgfSwgeyAiQEhAMjAwMSIgfSB9LAorCSAgLmRyaXZlcl9kYXRhID0gU0JfSFdfQUxTMTAwIH0sCisJeyAuaWQgPSAiIiB9IC8qIGVuZCAqLwogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwbnBfY2FyZCwgc25kX2FsczEwMF9wbnBpZHMpOwogCi0jZGVmaW5lIERSSVZFUl9OQU1FCSJzbmQtY2FyZC1hbHMxMDAiCi0KIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jYXJkX2FsczEwMF9wbnAoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkX2FsczEwMCAqYWNhcmQsCiAJCQkJCSBzdHJ1Y3QgcG5wX2NhcmRfbGluayAqY2FyZCwKIAkJCQkJIGNvbnN0IHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgKmlkKQpAQCAtMTEzLDggKzEzOSwxMiBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAlwb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKLQlkbWE4W2Rldl0gPSBwbnBfZG1hKHBkZXYsIDEpOwotCWRtYTE2W2Rldl0gPSBwbnBfZG1hKHBkZXYsIDApOworCWlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gU0JfSFdfRFQwMTlYKQorCQlkbWE4W2Rldl0gPSBwbnBfZG1hKHBkZXYsIDApOworCWVsc2UgeworCQlkbWE4W2Rldl0gPSBwbnBfZG1hKHBkZXYsIDEpOworCQlkbWExNltkZXZdID0gcG5wX2RtYShwZGV2LCAwKTsKKwl9CiAJaXJxW2Rldl0gPSBwbnBfaXJxKHBkZXYsIDApOwogCiAJcGRldiA9IGFjYXJkLT5kZXZtcHU7CkBAIC0xNzUsMjIgKzIwNSwzMyBAQAogCX0KIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2FyZC0+Y2FyZC0+ZGV2KTsKIAotCWlmICgoZXJyb3IgPSBzbmRfc2Jkc3BfY3JlYXRlKGNhcmQsIHBvcnRbZGV2XSwKLQkJCQkgICAgICBpcnFbZGV2XSwKLQkJCQkgICAgICBzbmRfc2IxNmRzcF9pbnRlcnJ1cHQsCi0JCQkJICAgICAgZG1hOFtkZXZdLAotCQkJCSAgICAgIGRtYTE2W2Rldl0sCi0JCQkJICAgICAgU0JfSFdfQUxTMTAwLCAmY2hpcCkpIDwgMCkgeworCWlmIChwaWQtPmRyaXZlcl9kYXRhID09IFNCX0hXX0RUMDE5WCkKKwkJZG1hMTZbZGV2XSA9IC0xOworCisJZXJyb3IgPSBzbmRfc2Jkc3BfY3JlYXRlKGNhcmQsIHBvcnRbZGV2XSwgaXJxW2Rldl0sCisJCQkJICBzbmRfc2IxNmRzcF9pbnRlcnJ1cHQsCisJCQkJICBkbWE4W2Rldl0sIGRtYTE2W2Rldl0sCisJCQkJICBwaWQtPmRyaXZlcl9kYXRhLAorCQkJCSAgJmNoaXApOworCWlmIChlcnJvciA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIAlhY2FyZC0+Y2hpcCA9IGNoaXA7CiAKLQlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQUxTMTAwIik7Ci0Jc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkF2YW5jZSBMb2dpYyBBTFMxMDAiKTsKLQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMsICVzIGF0IDB4JWx4LCBpcnEgJWQsIGRtYSAlZCYlZCIsCi0JCWNhcmQtPnNob3J0bmFtZSwgY2hpcC0+bmFtZSwgY2hpcC0+cG9ydCwKLQkJaXJxW2Rldl0sIGRtYThbZGV2XSwgZG1hMTZbZGV2XSk7CisJaWYgKHBpZC0+ZHJpdmVyX2RhdGEgPT0gU0JfSFdfRFQwMTlYKSB7CisJCXN0cmNweShjYXJkLT5kcml2ZXIsICJEVC0wMTlYIik7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJEaWFtb25kIFRlY2guIERULTAxOVgiKTsKKwkJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzLCAlcyBhdCAweCVseCwgaXJxICVkLCBkbWEgJWQiLAorCQkJY2FyZC0+c2hvcnRuYW1lLCBjaGlwLT5uYW1lLCBjaGlwLT5wb3J0LAorCQkJaXJxW2Rldl0sIGRtYThbZGV2XSk7CisJfSBlbHNlIHsKKwkJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkFMUzEwMCIpOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQXZhbmNlIExvZ2ljIEFMUzEwMCIpOworCQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMsICVzIGF0IDB4JWx4LCBpcnEgJWQsIGRtYSAlZCYlZCIsCisJCQljYXJkLT5zaG9ydG5hbWUsIGNoaXAtPm5hbWUsIGNoaXAtPnBvcnQsCisJCQlpcnFbZGV2XSwgZG1hOFtkZXZdLCBkbWExNltkZXZdKTsKKwl9CiAKIAlpZiAoKGVycm9yID0gc25kX3NiMTZkc3BfcGNtKGNoaXAsIDAsIE5VTEwpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKQEAgLTIwMyw5ICsyNDQsMTkgQEAKIAl9CiAKIAlpZiAobXB1X3BvcnRbZGV2XSA+IDAgJiYgbXB1X3BvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJaWYgKHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX0FMUzEwMCwKKwkJaW50IG1wdV90eXBlID0gTVBVNDAxX0hXX0FMUzEwMDsKKworCQlpZiAobXB1X2lycVtkZXZdID09IFNORFJWX0FVVE9fSVJRKQorCQkJbXB1X2lycVtkZXZdID0gLTE7CisKKwkJaWYgKHBpZC0+ZHJpdmVyX2RhdGEgPT0gU0JfSFdfRFQwMTlYKQorCQkJbXB1X3R5cGUgPSBNUFU0MDFfSFdfTVBVNDAxOworCisJCWlmIChzbmRfbXB1NDAxX3VhcnRfbmV3KGNhcmQsIDAsCisJCQkJCW1wdV90eXBlLAogCQkJCQltcHVfcG9ydFtkZXZdLCAwLCAKLQkJCQkJbXB1X2lycVtkZXZdLCBJUlFGX0RJU0FCTEVELAorCQkJCQltcHVfaXJxW2Rldl0sCisJCQkJCW1wdV9pcnFbZGV2XSA+PSAwID8gSVJRRl9ESVNBQkxFRCA6IDAsCiAJCQkJCU5VTEwpIDwgMCkKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJubyBNUFUtNDAxIGRldmljZSBhdCAweCVseFxuIiwgbXB1X3BvcnRbZGV2XSk7CiAJfQpAQCAtMjkxLDcgKzM0Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZHJpdmVyIGFsczEwMF9wbnBjX2RyaXZlciA9IHsKIAkuZmxhZ3MgICAgICAgICAgPSBQTlBfRFJJVkVSX1JFU19ESVNBQkxFLAotICAgICAgICAubmFtZSAgICAgICAgICAgPSAiYWxzMTAwIiwKKwkubmFtZQkJPSAiYWxzMTAwIiwKICAgICAgICAgLmlkX3RhYmxlICAgICAgID0gc25kX2FsczEwMF9wbnBpZHMsCiAgICAgICAgIC5wcm9iZSAgICAgICAgICA9IHNuZF9hbHMxMDBfcG5wX2RldGVjdCwKICAgICAgICAgLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3Aoc25kX2FsczEwMF9wbnBfcmVtb3ZlKSwKQEAgLTMxMiw3ICszNjMsNyBAQAogCWlmICghYWxzMTAwX2RldmljZXMpIHsKIAkJcG5wX3VucmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmFsczEwMF9wbnBjX2RyaXZlcik7CiAjaWZkZWYgTU9EVUxFCi0JCXNuZF9wcmludGsoS0VSTl9FUlIgIm5vIEFMUzEwMCBiYXNlZCBzb3VuZGNhcmRzIGZvdW5kXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAibm8gQXZhbmNlIExvZ2ljIGJhc2VkIHNvdW5kY2FyZHMgZm91bmRcbiIpOwogI2VuZGlmCiAJCXJldHVybiAtRU5PREVWOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9kdDAxOXguYyBiL3NvdW5kL2lzYS9kdDAxOXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmNWIxYS4uMDAwMDAwMAotLS0gYS9zb3VuZC9pc2EvZHQwMTl4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjEgKzAsMCBAQAotCi0vKgotICAgIGR0MDE5eC5jIC0gZHJpdmVyIGZvciBEaWFtb25kIFRlY2hub2xvZ2llcyBEVC0wMTk3SCBiYXNlZCBzb3VuZGNhcmRzLgotICAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMiBieSBNYXNzaW1vIFBpY2Npb25pIDxkYWZhc3RpZGlvQGxpYmVyby5pdD4KLQotICAgIEdlbmVyYWxpc2VkIGZvciBzb3VuZGNhcmRzIGJhc2VkIG9uIERULTAxOTYgYW5kIEFMUy0wMDcgY2hpcHMgCi0gICAgYnkgSm9uYXRoYW4gV29pdGhlIDxqd29pdGhlQHBoeXNpY3MuYWRlbGFpZGUuZWR1LmF1PjogSnVuZSAyMDAyLgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCi0qLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbnAuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+Ci0jaW5jbHVkZSA8c291bmQvbXB1NDAxLmg+Ci0jaW5jbHVkZSA8c291bmQvb3BsMy5oPgotI2luY2x1ZGUgPHNvdW5kL3NiLmg+Ci0KLSNkZWZpbmUgUEZYICJkdDAxOXg6ICIKLQotTU9EVUxFX0FVVEhPUigiTWFzc2ltbyBQaWNjaW9uaSA8ZGFmYXN0aWRpb0BsaWJlcm8uaXQ+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkRpYW1vbmQgVGVjaG5vbG9naWVzIERULTAxOVggLyBBdmFuY2UgTG9naWMgQUxTLTAwNyIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7RGlhbW9uZCBUZWNobm9sb2dpZXMgRFQtMDE5WH0sIgotCSAgICAgICAie0F2YW5jZSBMb2dpYyBBTFMtMDA3fX0iKTsKLQotc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsJLyogSW5kZXggMC1NQVggKi8KLXN0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLwotc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEU7CS8qIEVuYWJsZSB0aGlzIGNhcmQgKi8KLXN0YXRpYyBsb25nIHBvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOwkvKiBQblAgc2V0dXAgKi8KLXN0YXRpYyBsb25nIG1wdV9wb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsJLyogUG5QIHNldHVwICovCi1zdGF0aWMgbG9uZyBmbV9wb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsJLyogUG5QIHNldHVwICovCi1zdGF0aWMgaW50IGlycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsJLyogUG5QIHNldHVwICovCi1zdGF0aWMgaW50IG1wdV9pcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CS8qIFBuUCBzZXR1cCAqLwotc3RhdGljIGludCBkbWE4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRE1BOwkvKiBQblAgc2V0dXAgKi8KLQotbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBEVC0wMTlYIGJhc2VkIHNvdW5kY2FyZC4iKTsKLW1vZHVsZV9wYXJhbV9hcnJheShpZCwgY2hhcnAsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgRFQtMDE5WCBiYXNlZCBzb3VuZGNhcmQuIik7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIERULTAxOVggYmFzZWQgc291bmRjYXJkLiIpOwotCi1zdHJ1Y3Qgc25kX2NhcmRfZHQwMTl4IHsKLQlzdHJ1Y3QgcG5wX2RldiAqZGV2OwotCXN0cnVjdCBwbnBfZGV2ICpkZXZtcHU7Ci0Jc3RydWN0IHBucF9kZXYgKmRldm9wbDsKLQlzdHJ1Y3Qgc25kX3NiICpjaGlwOwotfTsKLQotc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgc25kX2R0MDE5eF9wbnBpZHNbXSA9IHsKLQkvKiBEVDE5N0EzMCAqLwotCXsgLmlkID0gIlJXQjE2ODgiLCAuZGV2cyA9IHsgeyAiQEBAMDAwMSIgfSwgeyAiQFhAMDAwMSIgfSwgeyAiQEhAMDAwMSIgfSwgfSB9LAotCS8qIERUMDE5NiAvIEFMUy0wMDcgKi8KLQl7IC5pZCA9ICJBTFMwMDA3IiwgLmRldnMgPSB7IHsgIkBAQDAwMDEiIH0sIHsgIkBYQDAwMDEiIH0sIHsgIkBIQDAwMDEiIH0sIH0gfSwKLQl7IC5pZCA9ICIiLCAgfQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRShwbnBfY2FyZCwgc25kX2R0MDE5eF9wbnBpZHMpOwotCi0KLSNkZWZpbmUgRFJJVkVSX05BTUUJInNuZC1jYXJkLWR0MDE5eCIKLQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY2FyZF9kdDAxOXhfcG5wKGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZF9kdDAxOXggKmFjYXJkLAotCQkJCQkgc3RydWN0IHBucF9jYXJkX2xpbmsgKmNhcmQsCi0JCQkJCSBjb25zdCBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICpwaWQpCi17Ci0Jc3RydWN0IHBucF9kZXYgKnBkZXY7Ci0JaW50IGVycjsKLQotCWFjYXJkLT5kZXYgPSBwbnBfcmVxdWVzdF9jYXJkX2RldmljZShjYXJkLCBwaWQtPmRldnNbMF0uaWQsIE5VTEwpOwotCWlmIChhY2FyZC0+ZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JYWNhcmQtPmRldm1wdSA9IHBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlKGNhcmQsIHBpZC0+ZGV2c1sxXS5pZCwgTlVMTCk7Ci0JYWNhcmQtPmRldm9wbCA9IHBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlKGNhcmQsIHBpZC0+ZGV2c1syXS5pZCwgTlVMTCk7Ci0KLQlwZGV2ID0gYWNhcmQtPmRldjsKLQotCWVyciA9IHBucF9hY3RpdmF0ZV9kZXYocGRldik7Ci0JaWYgKGVyciA8IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIkRULTAxOVggQVVESU8gcG5wIGNvbmZpZ3VyZSBmYWlsdXJlXG4iKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlwb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKLQlkbWE4W2Rldl0gPSBwbnBfZG1hKHBkZXYsIDApOwotCWlycVtkZXZdID0gcG5wX2lycShwZGV2LCAwKTsKLQlzbmRfcHJpbnRkZCgiZHQwMTl4OiBmb3VuZCBhdWRpbyBpbnRlcmZhY2U6IHBvcnQ9MHglbHgsIGlycT0weCV4LCBkbWE9MHgleFxuIiwKLQkJCXBvcnRbZGV2XSxpcnFbZGV2XSxkbWE4W2Rldl0pOwotCi0JcGRldiA9IGFjYXJkLT5kZXZtcHU7Ci0JaWYgKHBkZXYgIT0gTlVMTCkgewotCQllcnIgPSBwbnBfYWN0aXZhdGVfZGV2KHBkZXYpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJcG5wX3JlbGVhc2VfY2FyZF9kZXZpY2UocGRldik7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiRFQtMDE5WCBNUFU0MDEgcG5wIGNvbmZpZ3VyZSBmYWlsdXJlLCBza2lwcGluZ1xuIik7Ci0JCQlnb3RvIF9fbXB1X2Vycm9yOwotCQl9Ci0JCW1wdV9wb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKLQkJbXB1X2lycVtkZXZdID0gcG5wX2lycShwZGV2LCAwKTsKLQkJc25kX3ByaW50ZGQoImR0MDE5eDogZm91bmQgTVBVLTQwMTogcG9ydD0weCVseCwgaXJxPTB4JXhcbiIsCi0JCQkgCW1wdV9wb3J0W2Rldl0sbXB1X2lycVtkZXZdKTsKLQl9IGVsc2UgewotCV9fbXB1X2Vycm9yOgotCQlhY2FyZC0+ZGV2bXB1ID0gTlVMTDsKLQkJbXB1X3BvcnRbZGV2XSA9IC0xOwotCX0KLQotCXBkZXYgPSBhY2FyZC0+ZGV2b3BsOwotCWlmIChwZGV2ICE9IE5VTEwpIHsKLQkJZXJyID0gcG5wX2FjdGl2YXRlX2RldihwZGV2KTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXBucF9yZWxlYXNlX2NhcmRfZGV2aWNlKHBkZXYpOwotCQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIkRULTAxOVggT1BMMyBwbnAgY29uZmlndXJlIGZhaWx1cmUsIHNraXBwaW5nXG4iKTsKLQkJCWdvdG8gX19mbV9lcnJvcjsKLQkJfQotCQlmbV9wb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKLQkJc25kX3ByaW50ZGQoImR0MDE5eDogZm91bmQgT1BMMyBzeW50aDogcG9ydD0weCVseFxuIixmbV9wb3J0W2Rldl0pOwotCX0gZWxzZSB7Ci0JX19mbV9lcnJvcjoKLQkJYWNhcmQtPmRldm9wbCA9IE5VTEw7Ci0JCWZtX3BvcnRbZGV2XSA9IC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY2FyZF9kdDAxOXhfcHJvYmUoaW50IGRldiwgc3RydWN0IHBucF9jYXJkX2xpbmsgKnBjYXJkLCBjb25zdCBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICpwaWQpCi17Ci0JaW50IGVycm9yOwotCXN0cnVjdCBzbmRfc2IgKmNoaXA7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkOwotCXN0cnVjdCBzbmRfY2FyZF9kdDAxOXggKmFjYXJkOwotCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKLQotCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJCXNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfZHQwMTl4KSwgJmNhcmQpOwotCWlmIChlcnJvciA8IDApCi0JCXJldHVybiBlcnJvcjsKLQlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLQotCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjYXJkLT5jYXJkLT5kZXYpOwotCWlmICgoZXJyb3IgPSBzbmRfY2FyZF9kdDAxOXhfcG5wKGRldiwgYWNhcmQsIHBjYXJkLCBwaWQpKSkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JaWYgKChlcnJvciA9IHNuZF9zYmRzcF9jcmVhdGUoY2FyZCwgcG9ydFtkZXZdLAotCQkJCSAgICAgIGlycVtkZXZdLAotCQkJCSAgICAgIHNuZF9zYjE2ZHNwX2ludGVycnVwdCwKLQkJCQkgICAgICBkbWE4W2Rldl0sCi0JCQkJICAgICAgLTEsCi0JCQkJICAgICAgU0JfSFdfRFQwMTlYLAotCQkJCSAgICAgICZjaGlwKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0JYWNhcmQtPmNoaXAgPSBjaGlwOwotCi0Jc3RyY3B5KGNhcmQtPmRyaXZlciwgIkRULTAxOVgiKTsKLQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiRGlhbW9uZCBUZWNoLiBEVC0wMTlYIik7Ci0Jc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzLCAlcyBhdCAweCVseCwgaXJxICVkLCBkbWEgJWQiLAotCQljYXJkLT5zaG9ydG5hbWUsIGNoaXAtPm5hbWUsIGNoaXAtPnBvcnQsCi0JCWlycVtkZXZdLCBkbWE4W2Rldl0pOwotCi0JaWYgKChlcnJvciA9IHNuZF9zYjE2ZHNwX3BjbShjaGlwLCAwLCBOVUxMKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0JaWYgKChlcnJvciA9IHNuZF9zYm1peGVyX25ldyhjaGlwKSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KLQlpZiAobXB1X3BvcnRbZGV2XSA+IDAgJiYgbXB1X3BvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKLQkJaWYgKG1wdV9pcnFbZGV2XSA9PSBTTkRSVl9BVVRPX0lSUSkKLQkJCW1wdV9pcnFbZGV2XSA9IC0xOwotCQlpZiAoc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLAotLyoJCQkJCU1QVTQwMV9IV19TQiwqLwotCQkJCQlNUFU0MDFfSFdfTVBVNDAxLAotCQkJCQltcHVfcG9ydFtkZXZdLCAwLAotCQkJCQltcHVfaXJxW2Rldl0sCi0JCQkJCW1wdV9pcnFbZGV2XSA+PSAwID8gSVJRRl9ESVNBQkxFRCA6IDAsCi0JCQkJCU5VTEwpIDwgMCkKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJubyBNUFUtNDAxIGRldmljZSBhdCAweCVseCA/XG4iLCBtcHVfcG9ydFtkZXZdKTsKLQl9Ci0KLQlpZiAoZm1fcG9ydFtkZXZdID4gMCAmJiBmbV9wb3J0W2Rldl0gIT0gU05EUlZfQVVUT19QT1JUKSB7Ci0JCWlmIChzbmRfb3BsM19jcmVhdGUoY2FyZCwKLQkJCQkgICAgZm1fcG9ydFtkZXZdLAotCQkJCSAgICBmbV9wb3J0W2Rldl0gKyAyLAotCQkJCSAgICBPUEwzX0hXX0FVVE8sIDAsICZvcGwzKSA8IDApIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJubyBPUEwgZGV2aWNlIGF0IDB4JWx4LTB4JWx4ID9cbiIsCi0JCQkJICAgZm1fcG9ydFtkZXZdLCBmbV9wb3J0W2Rldl0gKyAyKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoZXJyb3IgPSBzbmRfb3BsM190aW1lcl9uZXcob3BsMywgMCwgMSkpIDwgMCkgewotCQkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCQkJcmV0dXJuIGVycm9yOwotCQkJfQotCQkJaWYgKChlcnJvciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKSkgPCAwKSB7Ci0JCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJCQlyZXR1cm4gZXJyb3I7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoKGVycm9yID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCkpIDwgMCkgewotCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCXBucF9zZXRfY2FyZF9kcnZkYXRhKHBjYXJkLCBjYXJkKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBfX2RldmluaXRkYXRhIGR0MDE5eF9kZXZpY2VzOwotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfZHQwMTl4X3BucF9wcm9iZShzdHJ1Y3QgcG5wX2NhcmRfbGluayAqY2FyZCwKLQkJCQkJICBjb25zdCBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICpwaWQpCi17Ci0Jc3RhdGljIGludCBkZXY7Ci0JaW50IHJlczsKLQotCWZvciAoIDsgZGV2IDwgU05EUlZfQ0FSRFM7IGRldisrKSB7Ci0JCWlmICghZW5hYmxlW2Rldl0pCi0JCQljb250aW51ZTsKLQkJcmVzID0gc25kX2NhcmRfZHQwMTl4X3Byb2JlKGRldiwgY2FyZCwgcGlkKTsKLQkJaWYgKHJlcyA8IDApCi0JCQlyZXR1cm4gcmVzOwotCQlkZXYrKzsKLQkJZHQwMTl4X2RldmljZXMrKzsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAtRU5PREVWOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgc25kX2R0MDE5eF9wbnBfcmVtb3ZlKHN0cnVjdCBwbnBfY2FyZF9saW5rICogcGNhcmQpCi17Ci0Jc25kX2NhcmRfZnJlZShwbnBfZ2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCkpOwotCXBucF9zZXRfY2FyZF9kcnZkYXRhKHBjYXJkLCBOVUxMKTsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzbmRfZHQwMTl4X3BucF9zdXNwZW5kKHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBucF9nZXRfY2FyZF9kcnZkYXRhKHBjYXJkKTsKLQlzdHJ1Y3Qgc25kX2NhcmRfZHQwMTl4ICphY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NiICpjaGlwID0gYWNhcmQtPmNoaXA7Ci0KLQlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EM2hvdCk7Ci0Jc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5wY20pOwotCXNuZF9zYm1peGVyX3N1c3BlbmQoY2hpcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX2R0MDE5eF9wbnBfcmVzdW1lKHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCkKLXsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbnBfZ2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCk7Ci0Jc3RydWN0IHNuZF9jYXJkX2R0MDE5eCAqYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zYiAqY2hpcCA9IGFjYXJkLT5jaGlwOwotCi0Jc25kX3NiZHNwX3Jlc2V0KGNoaXApOwotCXNuZF9zYm1peGVyX3Jlc3VtZShjaGlwKTsKLQlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kcml2ZXIgZHQwMTl4X3BucGNfZHJpdmVyID0gewotCS5mbGFncyAgICAgICAgICA9IFBOUF9EUklWRVJfUkVTX0RJU0FCTEUsCi0JLm5hbWUgICAgICAgICAgID0gImR0MDE5eCIsCi0JLmlkX3RhYmxlICAgICAgID0gc25kX2R0MDE5eF9wbnBpZHMsCi0JLnByb2JlICAgICAgICAgID0gc25kX2R0MDE5eF9wbnBfcHJvYmUsCi0JLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3Aoc25kX2R0MDE5eF9wbnBfcmVtb3ZlKSwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAk9IHNuZF9kdDAxOXhfcG5wX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzbmRfZHQwMTl4X3BucF9yZXN1bWUsCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9kdDAxOXhfaW5pdCh2b2lkKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBwbnBfcmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmR0MDE5eF9wbnBjX2RyaXZlcik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWlmICghZHQwMTl4X2RldmljZXMpIHsKLQkJcG5wX3VucmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmR0MDE5eF9wbnBjX2RyaXZlcik7Ci0jaWZkZWYgTU9EVUxFCi0JCXNuZF9wcmludGsoS0VSTl9FUlIgIm5vIERULTAxOVggLyBBTFMtMDA3IGJhc2VkIHNvdW5kY2FyZHMgZm91bmRcbiIpOwotI2VuZGlmCi0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9kdDAxOXhfZXhpdCh2b2lkKQotewotCXBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKCZkdDAxOXhfcG5wY19kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChhbHNhX2NhcmRfZHQwMTl4X2luaXQpCi1tb2R1bGVfZXhpdChhbHNhX2NhcmRfZHQwMTl4X2V4aXQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jIGIvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYwppbmRleCBjOGE4ZGEwLi5hNGFmNTNiIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCisrKyBiL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogI2luY2x1ZGUgPHNvdW5kL3dzcy5oPgogI2luY2x1ZGUgPHNvdW5kL21wdTQwMS5oPgogI2luY2x1ZGUgPHNvdW5kL29wbDMuaD4KQEAgLTU0Niw2ICs1NDcsOTMgQEAKIAogI2lmZGVmIE9QVGk5M1gKIAorc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRiX3NjYWxlXzViaXRfM2RiX3N0ZXAsIC05MzAwLCAzMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRiX3NjYWxlXzViaXQsIC00NjUwLCAxNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRiX3NjYWxlXzRiaXRfMTJkYl9tYXgsIC0zMzAwLCAzMDAsIDApOworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX29wdGk5M3hfY29udHJvbHNbXSA9IHsKK1dTU19ET1VCTEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAwLAorCQlPUFRpOTNYX09VVF9MRUZULCBPUFRpOTNYX09VVF9SSUdIVCwgNywgNywgMSwgMSksCitXU1NfRE9VQkxFX1RMVigiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDAsCisJCU9QVGk5M1hfT1VUX0xFRlQsIE9QVGk5M1hfT1VUX1JJR0hULCAxLCAxLCAzMSwgMSwKKwkJZGJfc2NhbGVfNWJpdF8zZGJfc3RlcCksCitXU1NfRE9VQkxFX1RMVigiUENNIFBsYXliYWNrIFZvbHVtZSIsIDAsCisJCUNTNDIzMV9MRUZUX09VVFBVVCwgQ1M0MjMxX1JJR0hUX09VVFBVVCwgMCwgMCwgMzEsIDEsCisJCWRiX3NjYWxlXzViaXQpLAorV1NTX0RPVUJMRV9UTFYoIkZNIFBsYXliYWNrIFZvbHVtZSIsIDAsCisJCUNTNDIzMV9BVVgyX0xFRlRfSU5QVVQsIENTNDIzMV9BVVgyX1JJR0hUX0lOUFVULCAxLCAxLCAxNSwgMSwKKwkJZGJfc2NhbGVfNGJpdF8xMmRiX21heCksCitXU1NfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDAsCisJCUNTNDIzMV9MRUZUX0xJTkVfSU4sIENTNDIzMV9SSUdIVF9MSU5FX0lOLCA3LCA3LCAxLCAxKSwKK1dTU19ET1VCTEVfVExWKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDAsCisJCUNTNDIzMV9MRUZUX0xJTkVfSU4sIENTNDIzMV9SSUdIVF9MSU5FX0lOLCAwLCAwLCAxNSwgMSwKKwkJZGJfc2NhbGVfNGJpdF8xMmRiX21heCksCitXU1NfRE9VQkxFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMCwKKwkJT1BUaTkzWF9NSUNfTEVGVF9JTlBVVCwgT1BUaTkzWF9NSUNfUklHSFRfSU5QVVQsIDcsIDcsIDEsIDEpLAorV1NTX0RPVUJMRV9UTFYoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAwLAorCQlPUFRpOTNYX01JQ19MRUZUX0lOUFVULCBPUFRpOTNYX01JQ19SSUdIVF9JTlBVVCwgMSwgMSwgMTUsIDEsCisJCWRiX3NjYWxlXzRiaXRfMTJkYl9tYXgpLAorV1NTX0RPVUJMRV9UTFYoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDAsCisJCUNTNDIzMV9BVVgxX0xFRlRfSU5QVVQsIENTNDIzMV9BVVgxX1JJR0hUX0lOUFVULCAxLCAxLCAxNSwgMSwKKwkJZGJfc2NhbGVfNGJpdF8xMmRiX21heCksCitXU1NfRE9VQkxFKCJBdXggUGxheWJhY2sgU3dpdGNoIiwgMCwKKwkJT1BUaTkzMV9BVVhfTEVGVF9JTlBVVCwgT1BUaTkzMV9BVVhfUklHSFRfSU5QVVQsIDcsIDcsIDEsIDEpLAorV1NTX0RPVUJMRV9UTFYoIkF1eCBQbGF5YmFjayBWb2x1bWUiLCAwLAorCQlPUFRpOTMxX0FVWF9MRUZUX0lOUFVULCBPUFRpOTMxX0FVWF9SSUdIVF9JTlBVVCwgMSwgMSwgMTUsIDEsCisJCWRiX3NjYWxlXzRiaXRfMTJkYl9tYXgpLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgc25kX29wdGk5M3hfbWl4ZXIoc3RydWN0IHNuZF93c3MgKmNoaXApCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXVuc2lnbmVkIGludCBpZHg7CisJc3RydWN0IHNuZF9jdGxfZWxlbV9pZCBpZDEsIGlkMjsKKwlpbnQgZXJyOworCisJaWYgKHNuZF9CVUdfT04oIWNoaXAgfHwgIWNoaXAtPnBjbSkpCisJCXJldHVybiAtRUlOVkFMOworCisJY2FyZCA9IGNoaXAtPmNhcmQ7CisKKwlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCBjaGlwLT5wY20tPm5hbWUpOworCisJbWVtc2V0KCZpZDEsIDAsIHNpemVvZihpZDEpKTsKKwltZW1zZXQoJmlkMiwgMCwgc2l6ZW9mKGlkMikpOworCWlkMS5pZmFjZSA9IGlkMi5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSOworCS8qIHJlYXNzaWduIEFVWDAgc3dpdGNoIHRvIENEICovCisJc3RyY3B5KGlkMS5uYW1lLCAiQXV4IFBsYXliYWNrIFN3aXRjaCIpOworCXN0cmNweShpZDIubmFtZSwgIkNEIFBsYXliYWNrIFN3aXRjaCIpOworCWVyciA9IHNuZF9jdGxfcmVuYW1lX2lkKGNhcmQsICZpZDEsICZpZDIpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIkNhbm5vdCByZW5hbWUgb3B0aTkzeCBjb250cm9sXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJLyogcmVhc3NpZ24gQVVYMSBzd2l0Y2ggdG8gRk0gKi8KKwlzdHJjcHkoaWQxLm5hbWUsICJBdXggUGxheWJhY2sgU3dpdGNoIik7IGlkMS5pbmRleCA9IDE7CisJc3RyY3B5KGlkMi5uYW1lLCAiRk0gUGxheWJhY2sgU3dpdGNoIik7CisJZXJyID0gc25kX2N0bF9yZW5hbWVfaWQoY2FyZCwgJmlkMSwgJmlkMik7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiQ2Fubm90IHJlbmFtZSBvcHRpOTN4IGNvbnRyb2xcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKwkvKiByZW1vdmUgQVVYMSB2b2x1bWUgKi8KKwlzdHJjcHkoaWQxLm5hbWUsICJBdXggUGxheWJhY2sgVm9sdW1lIik7IGlkMS5pbmRleCA9IDE7CisJc25kX2N0bF9yZW1vdmVfaWQoY2FyZCwgJmlkMSk7CisKKwkvKiBSZXBsYWNlIFdTUyB2b2x1bWUgY29udHJvbHMgd2l0aCBPUFRpOTN4IHZvbHVtZSBjb250cm9scyAqLworCWlkMS5pbmRleCA9IDA7CisJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHNuZF9vcHRpOTN4X2NvbnRyb2xzKTsgaWR4KyspIHsKKwkJc3RyY3B5KGlkMS5uYW1lLCBzbmRfb3B0aTkzeF9jb250cm9sc1tpZHhdLm5hbWUpOworCQlzbmRfY3RsX3JlbW92ZV9pZChjYXJkLCAmaWQxKTsKKworCQllcnIgPSBzbmRfY3RsX2FkZChjYXJkLAorCQkJCXNuZF9jdGxfbmV3MSgmc25kX29wdGk5M3hfY29udHJvbHNbaWR4XSwgY2hpcCkpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX29wdGk5M3hfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3Qgc25kX29wdGk5eHggKmNoaXAgPSBkZXZfaWQ7CkBAIC03NTQsNiArODQyLDExIEBACiAJZXJyb3IgPSBzbmRfd3NzX21peGVyKGNvZGVjKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlyZXR1cm4gZXJyb3I7CisjaWZkZWYgT1BUaTkzWAorCWVycm9yID0gc25kX29wdGk5M3hfbWl4ZXIoY29kZWMpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKKyNlbmRpZgogI2lmZGVmIENTNDIzMQogCWVycm9yID0gc25kX3dzc190aW1lcihjb2RlYywgMCwgJnRpbWVyKTsKIAlpZiAoZXJyb3IgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL01ha2VmaWxlIGIvc291bmQvaXNhL3NiL01ha2VmaWxlCmluZGV4IGZhZWZmY2ViLi5hZjM2Njk2IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2IvTWFrZWZpbGUKKysrIGIvc291bmQvaXNhL3NiL01ha2VmaWxlCkBAIC0xMiw2ICsxMiw3IEBACiBzbmQtc2Jhd2Utb2JqcyA6PSBzYmF3ZS5vIGVtdTgwMDAubwogc25kLWVtdTgwMDAtc3ludGgtb2JqcyA6PSBlbXU4MDAwX3N5bnRoLm8gZW11ODAwMF9jYWxsYmFjay5vIGVtdTgwMDBfcGF0Y2gubyBlbXU4MDAwX3BjbS5vCiBzbmQtZXM5Njgtb2JqcyA6PSBlczk2OC5vCitzbmQtamF6ejE2LW9ianMgOj0gamF6ejE2Lm8KIAogIyBUb3BsZXZlbCBNb2R1bGUgRGVwZW5kZW5jeQogb2JqLSQoQ09ORklHX1NORF9TQl9DT01NT04pICs9IHNuZC1zYi1jb21tb24ubwpAQCAtMjEsNiArMjIsNyBAQAogb2JqLSQoQ09ORklHX1NORF9TQjE2KSArPSBzbmQtc2IxNi5vCiBvYmotJChDT05GSUdfU05EX1NCQVdFKSArPSBzbmQtc2Jhd2Uubwogb2JqLSQoQ09ORklHX1NORF9FUzk2OCkgKz0gc25kLWVzOTY4Lm8KK29iai0kKENPTkZJR19TTkRfSkFaWjE2KSArPSBzbmQtamF6ejE2Lm8KIGlmZXEgKCQoQ09ORklHX1NORF9TQjE2X0NTUCkseSkKICAgb2JqLSQoQ09ORklHX1NORF9TQjE2KSArPSBzbmQtc2IxNi1jc3AubwogICBvYmotJChDT05GSUdfU05EX1NCQVdFKSArPSBzbmQtc2IxNi1jc3AubwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL2phenoxNi5jIGIvc291bmQvaXNhL3NiL2phenoxNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMjFhM2YKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2Evc2IvamF6ejE2LmMKQEAgLTAsMCArMSw0MDQgQEAKKworLyoKKyAqIGphenoxNi5jIC0gZHJpdmVyIGZvciBNZWRpYSBWaXNpb24gSmF6ejE2IGJhc2VkIHNvdW5kY2FyZHMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgS3J6eXN6dG9mIEhlbHQgPGtyenlzenRvZi5oMUB3cC5wbD4KKyAqIEJhc2VkIG9uIHBhdGNoZXMgcG9zdGVkIGJ5IFJhc2sgSW5nZW1hbm4gTGFtYmVydHNlbiBhbmQgUmVuZSBIZXJtYW4uCisgKiBCYXNlZCBvbiBPU1MgU291bmQgQmxhc3RlciBkcml2ZXIuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGxpbnV4L2lzYS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9tcHU0MDEuaD4KKyNpbmNsdWRlIDxzb3VuZC9vcGwzLmg+CisjaW5jbHVkZSA8c291bmQvc2IuaD4KKyNkZWZpbmUgU05EUlZfTEVHQUNZX0ZJTkRfRlJFRV9JUlEKKyNkZWZpbmUgU05EUlZfTEVHQUNZX0ZJTkRfRlJFRV9ETUEKKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisKKyNkZWZpbmUgUEZYICJqYXp6MTY6ICIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYSBWaXNpb24gSmF6ejE2Iik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tNZWRpYSBWaXNpb24gPz8/IH0sIgorCQkie1JUTCxSVEwzMDAwfX0iKTsKKworTU9EVUxFX0FVVEhPUigiS3J6eXN6dG9mIEhlbHQgPGtyenlzenRvZi5oMUB3cC5wbD4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsJLyogSW5kZXggMC1NQVggKi8KK3N0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLworc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEU7CS8qIEVuYWJsZSB0aGlzIGNhcmQgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXB1X3BvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIGludCBpcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CitzdGF0aWMgaW50IG1wdV9pcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CitzdGF0aWMgaW50IGRtYThbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9ETUE7CitzdGF0aWMgaW50IGRtYTE2W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRE1BOworCittb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIE1lZGlhIFZpc2lvbiBKYXp6MTYgYmFzZWQgc291bmRjYXJkLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KGlkLCBjaGFycCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciBNZWRpYSBWaXNpb24gSmF6ejE2IGJhc2VkIHNvdW5kY2FyZC4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgTWVkaWEgVmlzaW9uIEphenoxNiBiYXNlZCBzb3VuZGNhcmQuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkocG9ydCwgbG9uZywgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHBvcnQsICJQb3J0ICMgZm9yIGphenoxNiBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkobXB1X3BvcnQsIGxvbmcsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtcHVfcG9ydCwgIk1QVS00MDEgcG9ydCAjIGZvciBqYXp6MTYgZHJpdmVyLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KGlycSwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxLCAiSVJRICMgZm9yIGphenoxNiBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkobXB1X2lycSwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobXB1X2lycSwgIk1QVS00MDEgSVJRICMgZm9yIGphenoxNiBkcml2ZXIuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoZG1hOCwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZG1hOCwgIkRNQTggIyBmb3IgamF6ejE2IGRyaXZlci4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShkbWExNiwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZG1hMTYsICJETUExNiAjIGZvciBqYXp6MTYgZHJpdmVyLiIpOworCisjZGVmaW5lIFNCX0pBWloxNl9XQUtFVVAJMHhhZgorI2RlZmluZSBTQl9KQVpaMTZfU0VUX1BPUlRTCTB4NTAKKyNkZWZpbmUgU0JfRFNQX0dFVF9KQVpaX0JSRF9SRVYJMHhmYQorI2RlZmluZSBTQl9KQVpaMTZfU0VUX0RNQUlOVFIJMHhmYgorI2RlZmluZSBTQl9EU1BfR0VUX0pBWlpfTU9ERUwJMHhmZQorCitzdHJ1Y3Qgc25kX2NhcmRfamF6ejE2IHsKKwlzdHJ1Y3Qgc25kX3NiICpjaGlwOworfTsKKworc3RhdGljIGlycXJldHVybl90IGphenoxNl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqY2hpcCkKK3sKKwlyZXR1cm4gc25kX3NiOGRzcF9pbnRlcnJ1cHQoY2hpcCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGphenoxNl9jb25maWd1cmVfcG9ydHModW5zaWduZWQgbG9uZyBwb3J0LAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBtcHVfcG9ydCwgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKworCWlmICghcmVxdWVzdF9yZWdpb24oMHgyMDEsIDEsICJqYXp6MTYgY29uZmlnIikpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY29uZmlnIHBvcnQgcmVnaW9uIGlzIGFscmVhZHkgaW4gdXNlLlxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCW91dGIoU0JfSkFaWjE2X1dBS0VVUCAtIGlkeCwgMHgyMDEpOworCXVkZWxheSgxMDApOworCW91dGIoU0JfSkFaWjE2X1NFVF9QT1JUUyArIGlkeCwgMHgyMDEpOworCXVkZWxheSgxMDApOworCXZhbCA9IHBvcnQgJiAweDcwOworCXZhbCB8PSAobXB1X3BvcnQgJiAweDMwKSA+PiA0OworCW91dGIodmFsLCAweDIwMSk7CisKKwlyZWxlYXNlX3JlZ2lvbigweDIwMSwgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGphenoxNl9kZXRlY3RfYm9hcmQodW5zaWduZWQgbG9uZyBwb3J0LAorCQkJCQkgdW5zaWduZWQgbG9uZyBtcHVfcG9ydCkKK3sKKwlpbnQgZXJyOworCWludCB2YWw7CisJc3RydWN0IHNuZF9zYiBjaGlwOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihwb3J0LCAweDEwLCAiamF6ejE2IikpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiSS9PIHBvcnQgcmVnaW9uIGlzIGFscmVhZHkgaW4gdXNlLlxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCS8qIGp1c3QgdG8gY2FsbCBzbmRfc2Jkc3BfY29tbWFuZC9yZXNldC9nZXRfYnl0ZSgpICovCisJY2hpcC5wb3J0ID0gcG9ydDsKKworCWVyciA9IHNuZF9zYmRzcF9yZXNldCgmY2hpcCk7CisJaWYgKGVyciA8IDApCisJCWZvciAodmFsID0gMDsgdmFsIDwgNDsgdmFsKyspIHsKKwkJCWVyciA9IGphenoxNl9jb25maWd1cmVfcG9ydHMocG9ydCwgbXB1X3BvcnQsIHZhbCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlicmVhazsKKworCQkJZXJyID0gc25kX3NiZHNwX3Jlc2V0KCZjaGlwKTsKKwkJCWlmICghZXJyKQorCQkJCWJyZWFrOworCQl9CisJaWYgKGVyciA8IDApIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfdW5tYXA7CisJfQorCWlmICghc25kX3NiZHNwX2NvbW1hbmQoJmNoaXAsIFNCX0RTUF9HRVRfSkFaWl9CUkRfUkVWKSkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3VubWFwOworCX0KKwl2YWwgPSBzbmRfc2Jkc3BfZ2V0X2J5dGUoJmNoaXApOworCWlmICh2YWwgPj0gMHgzMCkKKwkJc25kX3NiZHNwX2dldF9ieXRlKCZjaGlwKTsKKworCWlmICgodmFsICYgMHhmMCkgIT0gMHgxMCkgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl91bm1hcDsKKwl9CisJaWYgKCFzbmRfc2Jkc3BfY29tbWFuZCgmY2hpcCwgU0JfRFNQX0dFVF9KQVpaX01PREVMKSkgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3VubWFwOworCX0KKwlzbmRfc2Jkc3BfZ2V0X2J5dGUoJmNoaXApOworCWVyciA9IHNuZF9zYmRzcF9nZXRfYnl0ZSgmY2hpcCk7CisJc25kX3ByaW50ZCgiTWVkaWEgVmlzaW9uIEphenoxNiBib2FyZCBkZXRlY3RlZDogcmV2IDB4JXgsIG1vZGVsIDB4JXhcbiIsCisJCSAgIHZhbCwgZXJyKTsKKworCWVyciA9IDA7CisKK2Vycl91bm1hcDoKKwlyZWxlYXNlX3JlZ2lvbihwb3J0LCAweDEwKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBqYXp6MTZfY29uZmlndXJlX2JvYXJkKHN0cnVjdCBzbmRfc2IgKmNoaXAsIGludCBtcHVfaXJxKQoreworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGphenpfaXJxX2JpdHNbXSA9IHsgMCwgMCwgMiwgMywgMCwgMSwgMCwgNCwKKwkJCQkJCSAwLCAyLCA1LCAwLCAwLCAwLCAwLCA2IH07CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgamF6el9kbWFfYml0c1tdID0geyAwLCAxLCAwLCAyLCAwLCAzLCAwLCA0IH07CisKKwlpZiAoamF6el9kbWFfYml0c1tjaGlwLT5kbWE4XSA9PSAwIHx8CisJICAgIGphenpfZG1hX2JpdHNbY2hpcC0+ZG1hMTZdID09IDAgfHwKKwkgICAgamF6el9pcnFfYml0c1tjaGlwLT5pcnFdID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9KQVpaMTZfU0VUX0RNQUlOVFIpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKCFzbmRfc2Jkc3BfY29tbWFuZChjaGlwLAorCQkJICAgICAgIGphenpfZG1hX2JpdHNbY2hpcC0+ZG1hOF0gfAorCQkJICAgICAgIChqYXp6X2RtYV9iaXRzW2NoaXAtPmRtYTE2XSA8PCA0KSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoIXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsCisJCQkgICAgICAgamF6el9pcnFfYml0c1tjaGlwLT5pcnFdIHwKKwkJCSAgICAgICAoamF6el9pcnFfYml0c1ttcHVfaXJxXSA8PCA0KSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX2phenoxNl9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIHVuc2lnbmVkIGludCBkZXYpCit7CisJaWYgKCFlbmFibGVbZGV2XSkKKwkJcmV0dXJuIDA7CisJaWYgKHBvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAicGxlYXNlIHNwZWNpZnkgcG9ydFxuIik7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAocG9ydFtkZXZdID09IDB4MjAwIHx8IChwb3J0W2Rldl0gJiB+MHgyNzApKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImluY29ycmVjdCBwb3J0IHNwZWNpZmllZFxuIik7CisJCXJldHVybiAwOworCX0KKwlpZiAoZG1hOFtkZXZdICE9IFNORFJWX0FVVE9fRE1BICYmCisJICAgIGRtYThbZGV2XSAhPSAxICYmIGRtYThbZGV2XSAhPSAzKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImRtYTggbXVzdCBiZSAxIG9yIDNcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGRtYTE2W2Rldl0gIT0gU05EUlZfQVVUT19ETUEgJiYKKwkgICAgZG1hMTZbZGV2XSAhPSA1ICYmIGRtYTE2W2Rldl0gIT0gNykgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJkbWExNiBtdXN0IGJlIDUgb3IgN1xuIik7CisJCXJldHVybiAwOworCX0KKwlpZiAobXB1X3BvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQgJiYKKwkgICAgKG1wdV9wb3J0W2Rldl0gJiB+MHgwMzApICE9IDB4MzAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImluY29ycmVjdCBtcHVfcG9ydCBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG1wdV9pcnFbZGV2XSAhPSBTTkRSVl9BVVRPX0RNQSAmJgorCSAgICBtcHVfaXJxW2Rldl0gIT0gMiAmJiBtcHVfaXJxW2Rldl0gIT0gMyAmJgorCSAgICBtcHVfaXJxW2Rldl0gIT0gNSAmJiBtcHVfaXJxW2Rldl0gIT0gNykgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJtcHVfaXJxIG11c3QgYmUgMiwgMywgNSBvciA3XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfamF6ejE2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwgdW5zaWduZWQgaW50IGRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHNuZF9jYXJkX2phenoxNiAqamF6ejE2OworCXN0cnVjdCBzbmRfc2IgKmNoaXA7CisJc3RydWN0IHNuZF9vcGwzICpvcGwzOworCXN0YXRpYyBpbnQgcG9zc2libGVfaXJxc1tdID0gezIsIDMsIDUsIDcsIDksIDEwLCAxNSwgLTF9OworCXN0YXRpYyBpbnQgcG9zc2libGVfZG1hczhbXSA9IHsxLCAzLCAtMX07CisJc3RhdGljIGludCBwb3NzaWJsZV9kbWFzMTZbXSA9IHs1LCA3LCAtMX07CisJaW50IGVyciwgeGlycSwgeGRtYTgsIHhkbWExNiwgeG1wdV9wb3J0LCB4bXB1X2lycTsKKworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfamF6ejE2KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJamF6ejE2ID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCisJeGlycSA9IGlycVtkZXZdOworCWlmICh4aXJxID09IFNORFJWX0FVVE9fSVJRKSB7CisJCXhpcnEgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9pcnEocG9zc2libGVfaXJxcyk7CisJCWlmICh4aXJxIDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIElSUVxuIik7CisJCQllcnIgPSAtRUJVU1k7CisJCQlnb3RvIGVycl9mcmVlOworCQl9CisJfQorCXhkbWE4ID0gZG1hOFtkZXZdOworCWlmICh4ZG1hOCA9PSBTTkRSVl9BVVRPX0RNQSkgeworCQl4ZG1hOCA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2RtYShwb3NzaWJsZV9kbWFzOCk7CisJCWlmICh4ZG1hOCA8IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUE4XG4iKTsKKwkJCWVyciA9IC1FQlVTWTsKKwkJCWdvdG8gZXJyX2ZyZWU7CisJCX0KKwl9CisJeGRtYTE2ID0gZG1hMTZbZGV2XTsKKwlpZiAoeGRtYTE2ID09IFNORFJWX0FVVE9fRE1BKSB7CisJCXhkbWExNiA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2RtYShwb3NzaWJsZV9kbWFzMTYpOworCQlpZiAoeGRtYTE2IDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIERNQTE2XG4iKTsKKwkJCWVyciA9IC1FQlVTWTsKKwkJCWdvdG8gZXJyX2ZyZWU7CisJCX0KKwl9CisKKwl4bXB1X3BvcnQgPSBtcHVfcG9ydFtkZXZdOworCWlmICh4bXB1X3BvcnQgPT0gU05EUlZfQVVUT19QT1JUKQorCQl4bXB1X3BvcnQgPSAwOworCWVyciA9IGphenoxNl9kZXRlY3RfYm9hcmQocG9ydFtkZXZdLCB4bXB1X3BvcnQpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTWVkaWEgVmlzaW9uIEphenoxNiBib2FyZCBub3QgZGV0ZWN0ZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKwllcnIgPSBzbmRfc2Jkc3BfY3JlYXRlKGNhcmQsIHBvcnRbZGV2XSwgaXJxW2Rldl0sCisJCQkgICAgICAgamF6ejE2X2ludGVycnVwdCwKKwkJCSAgICAgICBkbWE4W2Rldl0sIGRtYTE2W2Rldl0sCisJCQkgICAgICAgU0JfSFdfSkFaWjE2LAorCQkJICAgICAgICZjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfZnJlZTsKKworCXhtcHVfaXJxID0gbXB1X2lycVtkZXZdOworCWlmICh4bXB1X2lycSA9PSBTTkRSVl9BVVRPX0lSUSB8fCBtcHVfcG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkKKwkJeG1wdV9pcnEgPSAwOworCWVyciA9IGphenoxNl9jb25maWd1cmVfYm9hcmQoY2hpcCwgeG1wdV9pcnEpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTWVkaWEgVmlzaW9uIEphenoxNiBjb25maWd1cmF0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJamF6ejE2LT5jaGlwID0gY2hpcDsKKworCXN0cmNweShjYXJkLT5kcml2ZXIsICJqYXp6MTYiKTsKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiTWVkaWEgVmlzaW9uIEphenoxNiIpOworCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsCisJCSJNZWRpYSBWaXNpb24gSmF6ejE2IGF0IDB4JWx4LCBpcnEgJWQsIGRtYTggJWQsIGRtYTE2ICVkIiwKKwkJcG9ydFtkZXZdLCB4aXJxLCB4ZG1hOCwgeGRtYTE2KTsKKworCWVyciA9IHNuZF9zYjhkc3BfcGNtKGNoaXAsIDAsIE5VTEwpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9mcmVlOworCWVyciA9IHNuZF9zYm1peGVyX25ldyhjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfZnJlZTsKKworCWVyciA9IHNuZF9vcGwzX2NyZWF0ZShjYXJkLCBjaGlwLT5wb3J0LCBjaGlwLT5wb3J0ICsgMiwKKwkJCSAgICAgIE9QTDNfSFdfQVVUTywgMSwgJm9wbDMpOworCWlmIChlcnIgPCAwKQorCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAibm8gT1BMIGRldmljZSBhdCAweCVseC0weCVseFxuIiwKKwkJCSAgIGNoaXAtPnBvcnQsIGNoaXAtPnBvcnQgKyAyKTsKKwllbHNlIHsKKwkJZXJyID0gc25kX29wbDNfaHdkZXBfbmV3KG9wbDMsIDAsIDEsIE5VTEwpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyX2ZyZWU7CisJfQorCWlmIChtcHVfcG9ydFtkZXZdID4gMCAmJiBtcHVfcG9ydFtkZXZdICE9IFNORFJWX0FVVE9fUE9SVCkgeworCQlpZiAobXB1X2lycVtkZXZdID09IFNORFJWX0FVVE9fSVJRKQorCQkJbXB1X2lycVtkZXZdID0gLTE7CisKKwkJaWYgKHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwKKwkJCQkJTVBVNDAxX0hXX01QVTQwMSwKKwkJCQkJbXB1X3BvcnRbZGV2XSwgMCwKKwkJCQkJbXB1X2lycVtkZXZdLAorCQkJCQltcHVfaXJxW2Rldl0gPj0gMCA/IElSUUZfRElTQUJMRUQgOiAwLAorCQkJCQlOVUxMKSA8IDApCisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJubyBNUFUtNDAxIGRldmljZSBhdCAweCVseFxuIiwKKwkJCQkJbXB1X3BvcnRbZGV2XSk7CisJfQorCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBkZXZwdHIpOworCisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2cHRyLCBjYXJkKTsKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWU6CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfamF6ejE2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZwdHIsIHVuc2lnbmVkIGludCBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldnB0cik7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHNuZF9qYXp6MTZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgbiwKKwkJCSAgICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfY2FyZF9qYXp6MTYgKmFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc2IgKmNoaXAgPSBhY2FyZC0+Y2hpcDsKKworCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QzaG90KTsKKwlzbmRfcGNtX3N1c3BlbmRfYWxsKGNoaXAtPnBjbSk7CisJc25kX3NibWl4ZXJfc3VzcGVuZChjaGlwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfamF6ejE2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgbikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9jYXJkX2phenoxNiAqYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zYiAqY2hpcCA9IGFjYXJkLT5jaGlwOworCisJc25kX3NiZHNwX3Jlc2V0KGNoaXApOworCXNuZF9zYm1peGVyX3Jlc3VtZShjaGlwKTsKKwlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBpc2FfZHJpdmVyIHNuZF9qYXp6MTZfZHJpdmVyID0geworCS5tYXRjaAkJPSBzbmRfamF6ejE2X21hdGNoLAorCS5wcm9iZQkJPSBzbmRfamF6ejE2X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc25kX2phenoxNl9yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCT0gc25kX2phenoxNl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gc25kX2phenoxNl9yZXN1bWUsCisjZW5kaWYKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiamF6ejE2IgorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhbHNhX2NhcmRfamF6ejE2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaXNhX3JlZ2lzdGVyX2RyaXZlcigmc25kX2phenoxNl9kcml2ZXIsIFNORFJWX0NBUkRTKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9qYXp6MTZfZXhpdCh2b2lkKQoreworCWlzYV91bnJlZ2lzdGVyX2RyaXZlcigmc25kX2phenoxNl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhbHNhX2NhcmRfamF6ejE2X2luaXQpCittb2R1bGVfZXhpdChhbHNhX2NhcmRfamF6ejE2X2V4aXQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2Ivc2I4X21haW4uYyBiL3NvdW5kL2lzYS9zYi9zYjhfbWFpbi5jCmluZGV4IDY1OGQ1NTcuLjdkODRjOWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9zYjhfbWFpbi5jCisrKyBiL3NvdW5kL2lzYS9zYi9zYjhfbWFpbi5jCkBAIC0xMDYsOSArMTA2LDIxIEBACiAJc3RydWN0IHNuZF9zYiAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXVuc2lnbmVkIGludCBtaXhyZWcsIHJhdGUsIHNpemUsIGNvdW50OworCXVuc2lnbmVkIGNoYXIgZm9ybWF0OworCXVuc2lnbmVkIGNoYXIgc3RlcmVvID0gcnVudGltZS0+Y2hhbm5lbHMgPiAxOworCWludCBkbWE7CiAKIAlyYXRlID0gcnVudGltZS0+cmF0ZTsKIAlzd2l0Y2ggKGNoaXAtPmhhcmR3YXJlKSB7CisJY2FzZSBTQl9IV19KQVpaMTY6CisJCWlmIChydW50aW1lLT5mb3JtYXQgPT0gU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUpIHsKKwkJCWlmIChjaGlwLT5tb2RlICYgU0JfTU9ERV9DQVBUVVJFXzE2KQorCQkJCXJldHVybiAtRUJVU1k7CisJCQllbHNlCisJCQkJY2hpcC0+bW9kZSB8PSBTQl9NT0RFX1BMQVlCQUNLXzE2OworCQl9CisJCWNoaXAtPnBsYXliYWNrX2Zvcm1hdCA9IFNCX0RTUF9MT19PVVRQVVRfQVVUTzsKKwkJYnJlYWs7CiAJY2FzZSBTQl9IV19QUk86CiAJCWlmIChydW50aW1lLT5jaGFubmVscyA+IDEpIHsKIAkJCWlmIChzbmRfQlVHX09OKHJhdGUgIT0gU0I4X1JBVEUoMTEwMjUpICYmCkBAIC0xMzMsMTEgKzE0NSwyMSBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwlpZiAoY2hpcC0+bW9kZSAmIFNCX01PREVfUExBWUJBQ0tfMTYpIHsKKwkJZm9ybWF0ID0gc3RlcmVvID8gU0JfRFNQX1NURVJFT18xNkJJVCA6IFNCX0RTUF9NT05PXzE2QklUOworCQlkbWEgPSBjaGlwLT5kbWExNjsKKwl9IGVsc2UgeworCQlmb3JtYXQgPSBzdGVyZW8gPyBTQl9EU1BfU1RFUkVPXzhCSVQgOiBTQl9EU1BfTU9OT184QklUOworCQljaGlwLT5tb2RlIHw9IFNCX01PREVfUExBWUJBQ0tfODsKKwkJZG1hID0gY2hpcC0+ZG1hODsKKwl9CiAJc2l6ZSA9IGNoaXAtPnBfZG1hX3NpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKIAljb3VudCA9IGNoaXAtPnBfcGVyaW9kX3NpemUgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9EU1BfU1BFQUtFUl9PTik7Ci0JaWYgKHJ1bnRpbWUtPmNoYW5uZWxzID4gMSkgeworCWlmIChjaGlwLT5oYXJkd2FyZSA9PSBTQl9IV19KQVpaMTYpCisJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIGZvcm1hdCk7CisJZWxzZSBpZiAoc3RlcmVvKSB7CiAJCS8qIHNldCBwbGF5YmFjayBzdGVyZW8gbW9kZSAqLwogCQlzcGluX2xvY2soJmNoaXAtPm1peGVyX2xvY2spOwogCQltaXhyZWcgPSBzbmRfc2JtaXhlcl9yZWFkKGNoaXAsIFNCX0RTUF9TVEVSRU9fU1cpOwpAQCAtMTQ3LDE1ICsxNjksMTQgQEAKIAkJLyogU291bmRibGFzdGVyIGhhcmR3YXJlIHByb2dyYW1taW5nIHJlZmVyZW5jZSBndWlkZSwgMy0yMyAqLwogCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9EU1BfRE1BOF9FWElUKTsKIAkJcnVudGltZS0+ZG1hX2FyZWFbMF0gPSAweDgwOwotCQlzbmRfZG1hX3Byb2dyYW0oY2hpcC0+ZG1hOCwgcnVudGltZS0+ZG1hX2FkZHIsIDEsIERNQV9NT0RFX1dSSVRFKTsKKwkJc25kX2RtYV9wcm9ncmFtKGRtYSwgcnVudGltZS0+ZG1hX2FkZHIsIDEsIERNQV9NT0RFX1dSSVRFKTsKIAkJLyogZm9yY2UgaW50ZXJydXB0ICovCi0JCWNoaXAtPm1vZGUgPSBTQl9NT0RFX0hBTFQ7CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9PVVRQVVQpOwogCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCAwKTsKIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgMCk7CiAJfQogCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9TQU1QTEVfUkFURSk7Ci0JaWYgKHJ1bnRpbWUtPmNoYW5uZWxzID4gMSkgeworCWlmIChzdGVyZW8pIHsKIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgMjU2IC0gcnVudGltZS0+cmF0ZV9kZW4gLyAyKTsKIAkJc3Bpbl9sb2NrKCZjaGlwLT5taXhlcl9sb2NrKTsKIAkJLyogc2F2ZSBvdXRwdXQgZmlsdGVyIHN0YXR1cyBhbmQgdHVybiBpdCBvZmYgKi8KQEAgLTE2OCwxMyArMTg5LDE1IEBACiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIDI1NiAtIHJ1bnRpbWUtPnJhdGVfZGVuKTsKIAl9CiAJaWYgKGNoaXAtPnBsYXliYWNrX2Zvcm1hdCAhPSBTQl9EU1BfT1VUUFVUKSB7CisJCWlmIChjaGlwLT5tb2RlICYgU0JfTU9ERV9QTEFZQkFDS18xNikKKwkJCWNvdW50IC89IDI7CiAJCWNvdW50LS07CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9CTE9DS19TSVpFKTsKIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgY291bnQgJiAweGZmKTsKIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgY291bnQgPj4gOCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0Jc25kX2RtYV9wcm9ncmFtKGNoaXAtPmRtYTgsIHJ1bnRpbWUtPmRtYV9hZGRyLAorCXNuZF9kbWFfcHJvZ3JhbShkbWEsIHJ1bnRpbWUtPmRtYV9hZGRyLAogCQkJc2l6ZSwgRE1BX01PREVfV1JJVEUgfCBETUFfQVVUT0lOSVQpOwogCXJldHVybiAwOwogfQpAQCAtMjEyLDcgKzIzNSw2IEBACiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9TUEVBS0VSX09GRik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0JY2hpcC0+bW9kZSA9IChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RBUlQpID8gU0JfTU9ERV9QTEFZQkFDS184IDogU0JfTU9ERV9IQUxUOwogCXJldHVybiAwOwogfQogCkBAIC0yMzQsOSArMjU2LDIxIEBACiAJc3RydWN0IHNuZF9zYiAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXVuc2lnbmVkIGludCBtaXhyZWcsIHJhdGUsIHNpemUsIGNvdW50OworCXVuc2lnbmVkIGNoYXIgZm9ybWF0OworCXVuc2lnbmVkIGNoYXIgc3RlcmVvID0gcnVudGltZS0+Y2hhbm5lbHMgPiAxOworCWludCBkbWE7CiAKIAlyYXRlID0gcnVudGltZS0+cmF0ZTsKIAlzd2l0Y2ggKGNoaXAtPmhhcmR3YXJlKSB7CisJY2FzZSBTQl9IV19KQVpaMTY6CisJCWlmIChydW50aW1lLT5mb3JtYXQgPT0gU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUpIHsKKwkJCWlmIChjaGlwLT5tb2RlICYgU0JfTU9ERV9QTEFZQkFDS18xNikKKwkJCQlyZXR1cm4gLUVCVVNZOworCQkJZWxzZQorCQkJCWNoaXAtPm1vZGUgfD0gU0JfTU9ERV9DQVBUVVJFXzE2OworCQl9CisJCWNoaXAtPmNhcHR1cmVfZm9ybWF0ID0gU0JfRFNQX0xPX0lOUFVUX0FVVE87CisJCWJyZWFrOwogCWNhc2UgU0JfSFdfUFJPOgogCQlpZiAocnVudGltZS0+Y2hhbm5lbHMgPiAxKSB7CiAJCQlpZiAoc25kX0JVR19PTihyYXRlICE9IFNCOF9SQVRFKDExMDI1KSAmJgpAQCAtMjYyLDE0ICsyOTYsMjQgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJaWYgKGNoaXAtPm1vZGUgJiBTQl9NT0RFX0NBUFRVUkVfMTYpIHsKKwkJZm9ybWF0ID0gc3RlcmVvID8gU0JfRFNQX1NURVJFT18xNkJJVCA6IFNCX0RTUF9NT05PXzE2QklUOworCQlkbWEgPSBjaGlwLT5kbWExNjsKKwl9IGVsc2UgeworCQlmb3JtYXQgPSBzdGVyZW8gPyBTQl9EU1BfU1RFUkVPXzhCSVQgOiBTQl9EU1BfTU9OT184QklUOworCQljaGlwLT5tb2RlIHw9IFNCX01PREVfQ0FQVFVSRV84OworCQlkbWEgPSBjaGlwLT5kbWE4OworCX0KIAlzaXplID0gY2hpcC0+Y19kbWFfc2l6ZSA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOwogCWNvdW50ID0gY2hpcC0+Y19wZXJpb2Rfc2l6ZSA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9TUEVBS0VSX09GRik7Ci0JaWYgKHJ1bnRpbWUtPmNoYW5uZWxzID4gMSkKKwlpZiAoY2hpcC0+aGFyZHdhcmUgPT0gU0JfSFdfSkFaWjE2KQorCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBmb3JtYXQpOworCWVsc2UgaWYgKHN0ZXJlbykKIAkJc25kX3NiZHNwX2NvbW1hbmQoY2hpcCwgU0JfRFNQX1NURVJFT184QklUKTsKIAlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9EU1BfU0FNUExFX1JBVEUpOwotCWlmIChydW50aW1lLT5jaGFubmVscyA+IDEpIHsKKwlpZiAoc3RlcmVvKSB7CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIDI1NiAtIHJ1bnRpbWUtPnJhdGVfZGVuIC8gMik7CiAJCXNwaW5fbG9jaygmY2hpcC0+bWl4ZXJfbG9jayk7CiAJCS8qIHNhdmUgaW5wdXQgZmlsdGVyIHN0YXR1cyBhbmQgdHVybiBpdCBvZmYgKi8KQEAgLTI4MiwxMyArMzI2LDE1IEBACiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIDI1NiAtIHJ1bnRpbWUtPnJhdGVfZGVuKTsKIAl9CiAJaWYgKGNoaXAtPmNhcHR1cmVfZm9ybWF0ICE9IFNCX0RTUF9JTlBVVCkgeworCQlpZiAoY2hpcC0+bW9kZSAmIFNCX01PREVfUExBWUJBQ0tfMTYpCisJCQljb3VudCAvPSAyOwogCQljb3VudC0tOwogCQlzbmRfc2Jkc3BfY29tbWFuZChjaGlwLCBTQl9EU1BfQkxPQ0tfU0laRSk7CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIGNvdW50ICYgMHhmZik7CiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIGNvdW50ID4+IDgpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotCXNuZF9kbWFfcHJvZ3JhbShjaGlwLT5kbWE4LCBydW50aW1lLT5kbWFfYWRkciwKKwlzbmRfZG1hX3Byb2dyYW0oZG1hLCBydW50aW1lLT5kbWFfYWRkciwKIAkJCXNpemUsIERNQV9NT0RFX1JFQUQgfCBETUFfQVVUT0lOSVQpOwogCXJldHVybiAwOwogfQpAQCAtMzI4LDcgKzM3NCw2IEBACiAJCXNuZF9zYmRzcF9jb21tYW5kKGNoaXAsIFNCX0RTUF9TUEVBS0VSX09GRik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0JY2hpcC0+bW9kZSA9IChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RBUlQpID8gU0JfTU9ERV9DQVBUVVJFXzggOiBTQl9NT0RFX0hBTFQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzOSwxMyArMzg0LDIxIEBACiAKIAlzbmRfc2JfYWNrXzhiaXQoY2hpcCk7CiAJc3dpdGNoIChjaGlwLT5tb2RlKSB7Ci0JY2FzZSBTQl9NT0RFX1BMQVlCQUNLXzg6CS8qIG9rLi4gcGxheWJhY2sgaXMgYWN0aXZlICovCisJY2FzZSBTQl9NT0RFX1BMQVlCQUNLXzE2OgkvKiBvay4uIHBsYXliYWNrIGlzIGFjdGl2ZSAqLworCQlpZiAoY2hpcC0+aGFyZHdhcmUgIT0gU0JfSFdfSkFaWjE2KQorCQkJYnJlYWs7CisJCS8qIGZhbGx0aHJ1ICovCisJY2FzZSBTQl9NT0RFX1BMQVlCQUNLXzg6CiAJCXN1YnN0cmVhbSA9IGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbTsKIAkJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAkJaWYgKGNoaXAtPnBsYXliYWNrX2Zvcm1hdCA9PSBTQl9EU1BfT1VUUFVUKQogCQkgICAgCXNuZF9zYjhfcGxheWJhY2tfdHJpZ2dlcihzdWJzdHJlYW0sIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKTsKIAkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOwogCQlicmVhazsKKwljYXNlIFNCX01PREVfQ0FQVFVSRV8xNjoKKwkJaWYgKGNoaXAtPmhhcmR3YXJlICE9IFNCX0hXX0pBWloxNikKKwkJCWJyZWFrOworCQkvKiBmYWxsdGhydSAqLwogCWNhc2UgU0JfTU9ERV9DQVBUVVJFXzg6CiAJCXN1YnN0cmVhbSA9IGNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtOwogCQlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwpAQCAtMzYxLDEwICs0MTQsMTUgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NiICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXNpemVfdCBwdHI7CisJaW50IGRtYTsKIAotCWlmIChjaGlwLT5tb2RlICE9IFNCX01PREVfUExBWUJBQ0tfOCkKKwlpZiAoY2hpcC0+bW9kZSAmIFNCX01PREVfUExBWUJBQ0tfOCkKKwkJZG1hID0gY2hpcC0+ZG1hODsKKwllbHNlIGlmIChjaGlwLT5tb2RlICYgU0JfTU9ERV9QTEFZQkFDS18xNikKKwkJZG1hID0gY2hpcC0+ZG1hMTY7CisJZWxzZQogCQlyZXR1cm4gMDsKLQlwdHIgPSBzbmRfZG1hX3BvaW50ZXIoY2hpcC0+ZG1hOCwgY2hpcC0+cF9kbWFfc2l6ZSk7CisJcHRyID0gc25kX2RtYV9wb2ludGVyKGRtYSwgY2hpcC0+cF9kbWFfc2l6ZSk7CiAJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWJzdHJlYW0tPnJ1bnRpbWUsIHB0cik7CiB9CiAKQEAgLTM3MiwxMCArNDMwLDE1IEBACiB7CiAJc3RydWN0IHNuZF9zYiAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzaXplX3QgcHRyOworCWludCBkbWE7CiAKLQlpZiAoY2hpcC0+bW9kZSAhPSBTQl9NT0RFX0NBUFRVUkVfOCkKKwlpZiAoY2hpcC0+bW9kZSAmIFNCX01PREVfQ0FQVFVSRV84KQorCQlkbWEgPSBjaGlwLT5kbWE4OworCWVsc2UgaWYgKGNoaXAtPm1vZGUgJiBTQl9NT0RFX0NBUFRVUkVfMTYpCisJCWRtYSA9IGNoaXAtPmRtYTE2OworCWVsc2UKIAkJcmV0dXJuIDA7Ci0JcHRyID0gc25kX2RtYV9wb2ludGVyKGNoaXAtPmRtYTgsIGNoaXAtPmNfZG1hX3NpemUpOworCXB0ciA9IHNuZF9kbWFfcG9pbnRlcihkbWEsIGNoaXAtPmNfZG1hX3NpemUpOwogCXJldHVybiBieXRlc190b19mcmFtZXMoc3Vic3RyZWFtLT5ydW50aW1lLCBwdHIpOwogfQogCkBAIC00NDYsNiArNTA5LDE0IEBACiAJCXJ1bnRpbWUtPmh3ID0gc25kX3NiOF9jYXB0dXJlOwogCX0KIAlzd2l0Y2ggKGNoaXAtPmhhcmR3YXJlKSB7CisJY2FzZSBTQl9IV19KQVpaMTY6CisJCWlmIChjaGlwLT5kbWExNiA9PSA1IHx8IGNoaXAtPmRtYTE2ID09IDcpCisJCQlydW50aW1lLT5ody5mb3JtYXRzIHw9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFOworCQlydW50aW1lLT5ody5yYXRlcyB8PSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwOworCQlydW50aW1lLT5ody5yYXRlX21pbiA9IDQwMDA7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWF4ID0gNTAwMDA7CisJCXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCA9IDI7CisJCWJyZWFrOwogCWNhc2UgU0JfSFdfUFJPOgogCQlydW50aW1lLT5ody5yYXRlX21heCA9IDQ0MTAwOwogCQlydW50aW1lLT5ody5jaGFubmVsc19tYXggPSAyOwpAQCAtNDY4LDYgKzUzOSwxNCBAQAogCX0KIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmF0bnVtcyhydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKIAkJCQkgICAgICAmaHdfY29uc3RyYWludHNfY2xvY2spOworCWlmIChjaGlwLT5kbWE4ID4gMyB8fCBjaGlwLT5kbWExNiA+PSAwKSB7CisJCXNuZF9wY21faHdfY29uc3RyYWludF9zdGVwKHJ1bnRpbWUsIDAsCisJCQkJCSAgIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfQllURVMsIDIpOworCQlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfc3RlcChydW50aW1lLCAwLAorCQkJCQkgICBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX0JZVEVTLCAyKTsKKwkJcnVudGltZS0+aHcuYnVmZmVyX2J5dGVzX21heCA9IDEyOCAqIDEwMjQgKiAxMDI0OworCQlydW50aW1lLT5ody5wZXJpb2RfYnl0ZXNfbWF4ID0gMTI4ICogMTAyNCAqIDEwMjQ7CisJfQogCXJldHVybiAwOwkKIH0KIApAQCAtNDgwLDYgKzU1OSwxMCBAQAogCWNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtID0gTlVMTDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+b3Blbl9sb2NrLCBmbGFncyk7CiAJY2hpcC0+b3BlbiAmPSB+U0JfT1BFTl9QQ007CisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCWNoaXAtPm1vZGUgJj0gflNCX01PREVfUExBWUJBQ0s7CisJZWxzZQorCQljaGlwLT5tb2RlICY9IH5TQl9NT0RFX0NBUFRVUkU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+b3Blbl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CkBAIC01MTUsNiArNTk4LDcgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBjaGlwLT5jYXJkOwogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycjsKKwlzaXplX3QgbWF4X3ByZWFsbG9jID0gNjQgKiAxMDI0OwogCiAJaWYgKHJwY20pCiAJCSpycGNtID0gTlVMTDsKQEAgLTUyNyw5ICs2MTEsMTEgQEAKIAlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCAmc25kX3NiOF9wbGF5YmFja19vcHMpOwogCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJnNuZF9zYjhfY2FwdHVyZV9vcHMpOwogCisJaWYgKGNoaXAtPmRtYTggPiAzIHx8IGNoaXAtPmRtYTE2ID49IDApCisJCW1heF9wcmVhbGxvYyA9IDEyOCAqIDEwMjQ7CiAJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKIAkJCQkJICAgICAgc25kX2RtYV9pc2FfZGF0YSgpLAotCQkJCQkgICAgICA2NCoxMDI0LCA2NCoxMDI0KTsKKwkJCQkJICAgICAgNjQqMTAyNCwgbWF4X3ByZWFsbG9jKTsKIAogCWlmIChycGNtKQogCQkqcnBjbSA9IHBjbTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYl9jb21tb24uYyBiL3NvdW5kL2lzYS9zYi9zYl9jb21tb24uYwppbmRleCAyN2E2NTE1Li5lYWU2YzFjIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2JfY29tbW9uLmMKKysrIGIvc291bmQvaXNhL3NiL3NiX2NvbW1vbi5jCkBAIC0xNzAsNiArMTcwLDkgQEAKIAljYXNlIFNCX0hXX0NTNTUzMDoKIAkJc3RyID0gIjE2IChDUzU1MzApIjsKIAkJYnJlYWs7CisJY2FzZSBTQl9IV19KQVpaMTY6CisJCXN0ciA9ICJQcm8gKEphenoxNikiOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYyBiL3NvdW5kL2lzYS9zYi9zYl9taXhlci5jCmluZGV4IDMxOGZmMGMuLjY0OTY4MjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9zYl9taXhlci5jCisrKyBiL3NvdW5kL2lzYS9zYi9zYl9taXhlci5jCkBAIC01MjgsMjAgKzUyOCwxMSBAQAogICogU0IgMi4wIHNwZWNpZmljIG1peGVyIGVsZW1lbnRzCiAgKi8KIAotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjIwX2N0bF9tYXN0ZXJfcGxheV92b2wgPQotCVNCX1NJTkdMRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUDIwX01BU1RFUl9ERVYsIDEsIDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjIwX2N0bF9wY21fcGxheV92b2wgPQotCVNCX1NJTkdMRSgiUENNIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUDIwX1BDTV9ERVYsIDEsIDMpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjIwX2N0bF9zeW50aF9wbGF5X3ZvbCA9Ci0JU0JfU0lOR0xFKCJTeW50aCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1AyMF9GTV9ERVYsIDEsIDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjIwX2N0bF9jZF9wbGF5X3ZvbCA9Ci0JU0JfU0lOR0xFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1AyMF9DRF9ERVYsIDEsIDcpOwotCi1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gKnNuZF9zYjIwX2NvbnRyb2xzW10gPSB7Ci0JJnNuZF9zYjIwX2N0bF9tYXN0ZXJfcGxheV92b2wsCi0JJnNuZF9zYjIwX2N0bF9wY21fcGxheV92b2wsCi0JJnNuZF9zYjIwX2N0bF9zeW50aF9wbGF5X3ZvbCwKLQkmc25kX3NiMjBfY3RsX2NkX3BsYXlfdm9sCitzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMjBfY29udHJvbHNbXSA9IHsKKwlTQl9TSU5HTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1AyMF9NQVNURVJfREVWLCAxLCA3KSwKKwlTQl9TSU5HTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1AyMF9QQ01fREVWLCAxLCAzKSwKKwlTQl9TSU5HTEUoIlN5bnRoIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUDIwX0ZNX0RFViwgMSwgNyksCisJU0JfU0lOR0xFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1AyMF9DRF9ERVYsIDEsIDcpCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBzbmRfc2IyMF9pbml0X3ZhbHVlc1tdWzJdID0gewpAQCAtNTUyLDQxICs1NDMsMjQgQEAKIC8qCiAgKiBTQiBQcm8gc3BlY2lmaWMgbWl4ZXIgZWxlbWVudHMKICAqLwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jdGxfbWFzdGVyX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1BfTUFTVEVSX0RFViwgU0JfRFNQX01BU1RFUl9ERVYsIDUsIDEsIDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jdGxfcGNtX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1BfUENNX0RFViwgU0JfRFNQX1BDTV9ERVYsIDUsIDEsIDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jdGxfcGNtX3BsYXlfZmlsdGVyID0KLQlTQl9TSU5HTEUoIlBDTSBQbGF5YmFjayBGaWx0ZXIiLCBTQl9EU1BfUExBWUJBQ0tfRklMVCwgNSwgMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NicHJvX2N0bF9zeW50aF9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJTeW50aCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1BfRk1fREVWLCBTQl9EU1BfRk1fREVWLCA1LCAxLCA3KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2Jwcm9fY3RsX2NkX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUF9DRF9ERVYsIFNCX0RTUF9DRF9ERVYsIDUsIDEsIDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jdGxfbGluZV9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUF9MSU5FX0RFViwgU0JfRFNQX0xJTkVfREVWLCA1LCAxLCA3KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2Jwcm9fY3RsX21pY19wbGF5X3ZvbCA9Ci0JU0JfU0lOR0xFKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQX01JQ19ERVYsIDEsIDMpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jdGxfY2FwdHVyZV9zb3VyY2UgPQorc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYnByb19jb250cm9sc1tdID0geworCVNCX0RPVUJMRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgU0JfRFNQX01BU1RFUl9ERVYsIFNCX0RTUF9NQVNURVJfREVWLCA1LCAxLCA3KSwKKwlTQl9ET1VCTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLAorCQkgIFNCX0RTUF9QQ01fREVWLCBTQl9EU1BfUENNX0RFViwgNSwgMSwgNyksCisJU0JfU0lOR0xFKCJQQ00gUGxheWJhY2sgRmlsdGVyIiwgU0JfRFNQX1BMQVlCQUNLX0ZJTFQsIDUsIDEpLAorCVNCX0RPVUJMRSgiU3ludGggUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EU1BfRk1fREVWLCBTQl9EU1BfRk1fREVWLCA1LCAxLCA3KSwKKwlTQl9ET1VCTEUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUF9DRF9ERVYsIFNCX0RTUF9DRF9ERVYsIDUsIDEsIDcpLAorCVNCX0RPVUJMRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLAorCQkgIFNCX0RTUF9MSU5FX0RFViwgU0JfRFNQX0xJTkVfREVWLCA1LCAxLCA3KSwKKwlTQl9TSU5HTEUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1BfTUlDX0RFViwgMSwgMyksCiAJewogCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCiAJCS50eXBlID0gU0JfTUlYX0NBUFRVUkVfUFJPCi0JfTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2Jwcm9fY3RsX2NhcHR1cmVfZmlsdGVyID0KLQlTQl9TSU5HTEUoIkNhcHR1cmUgRmlsdGVyIiwgU0JfRFNQX0NBUFRVUkVfRklMVCwgNSwgMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NicHJvX2N0bF9jYXB0dXJlX2xvd19maWx0ZXIgPQotCVNCX1NJTkdMRSgiQ2FwdHVyZSBMb3ctUGFzcyBGaWx0ZXIiLCBTQl9EU1BfQ0FQVFVSRV9GSUxULCAzLCAxKTsKLQotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtICpzbmRfc2Jwcm9fY29udHJvbHNbXSA9IHsKLQkmc25kX3NicHJvX2N0bF9tYXN0ZXJfcGxheV92b2wsCi0JJnNuZF9zYnByb19jdGxfcGNtX3BsYXlfdm9sLAotCSZzbmRfc2Jwcm9fY3RsX3BjbV9wbGF5X2ZpbHRlciwKLQkmc25kX3NicHJvX2N0bF9zeW50aF9wbGF5X3ZvbCwKLQkmc25kX3NicHJvX2N0bF9jZF9wbGF5X3ZvbCwKLQkmc25kX3NicHJvX2N0bF9saW5lX3BsYXlfdm9sLAotCSZzbmRfc2Jwcm9fY3RsX21pY19wbGF5X3ZvbCwKLQkmc25kX3NicHJvX2N0bF9jYXB0dXJlX3NvdXJjZSwKLQkmc25kX3NicHJvX2N0bF9jYXB0dXJlX2ZpbHRlciwKLQkmc25kX3NicHJvX2N0bF9jYXB0dXJlX2xvd19maWx0ZXIKKwl9LAorCVNCX1NJTkdMRSgiQ2FwdHVyZSBGaWx0ZXIiLCBTQl9EU1BfQ0FQVFVSRV9GSUxULCA1LCAxKSwKKwlTQl9TSU5HTEUoIkNhcHR1cmUgTG93LVBhc3MgRmlsdGVyIiwgU0JfRFNQX0NBUFRVUkVfRklMVCwgMywgMSkKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNuZF9zYnByb19pbml0X3ZhbHVlc1tdWzJdID0gewpAQCAtNTk4LDY4ICs1NzIsNDIgQEAKIC8qCiAgKiBTQjE2IHNwZWNpZmljIG1peGVyIGVsZW1lbnRzCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfbWFzdGVyX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1A0X01BU1RFUl9ERVYsIChTQl9EU1A0X01BU1RFUl9ERVYgKyAxKSwgMywgMywgMzEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF8zZF9lbmhhbmNlX3N3aXRjaCA9Ci0JU0JfU0lOR0xFKCIzRCBFbmhhbmNlbWVudCBTd2l0Y2giLCBTQl9EU1A0XzNEU0UsIDAsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF90b25lX2Jhc3MgPQotCVNCX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gQmFzcyIsIFNCX0RTUDRfQkFTU19ERVYsIChTQl9EU1A0X0JBU1NfREVWICsgMSksIDQsIDQsIDE1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfdG9uZV90cmVibGUgPQotCVNCX0RPVUJMRSgiVG9uZSBDb250cm9sIC0gVHJlYmxlIiwgU0JfRFNQNF9UUkVCTEVfREVWLCAoU0JfRFNQNF9UUkVCTEVfREVWICsgMSksIDQsIDQsIDE1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfcGNtX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1A0X1BDTV9ERVYsIChTQl9EU1A0X1BDTV9ERVYgKyAxKSwgMywgMywgMzEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF9zeW50aF9jYXB0dXJlX3JvdXRlID0KLQlTQjE2X0lOUFVUX1NXKCJTeW50aCBDYXB0dXJlIFJvdXRlIiwgU0JfRFNQNF9JTlBVVF9MRUZULCBTQl9EU1A0X0lOUFVUX1JJR0hULCA2LCA1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfc3ludGhfcGxheV92b2wgPQotCVNCX0RPVUJMRSgiU3ludGggUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQNF9TWU5USF9ERVYsIChTQl9EU1A0X1NZTlRIX0RFViArIDEpLCAzLCAzLCAzMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX2NkX2NhcHR1cmVfcm91dGUgPQotCVNCMTZfSU5QVVRfU1coIkNEIENhcHR1cmUgUm91dGUiLCBTQl9EU1A0X0lOUFVUX0xFRlQsIFNCX0RTUDRfSU5QVVRfUklHSFQsIDIsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF9jZF9wbGF5X3N3aXRjaCA9Ci0JU0JfRE9VQkxFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCBTQl9EU1A0X09VVFBVVF9TVywgU0JfRFNQNF9PVVRQVVRfU1csIDIsIDEsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF9jZF9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EU1A0X0NEX0RFViwgKFNCX0RTUDRfQ0RfREVWICsgMSksIDMsIDMsIDMxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfbGluZV9jYXB0dXJlX3JvdXRlID0KLQlTQjE2X0lOUFVUX1NXKCJMaW5lIENhcHR1cmUgUm91dGUiLCBTQl9EU1A0X0lOUFVUX0xFRlQsIFNCX0RTUDRfSU5QVVRfUklHSFQsIDQsIDMpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9zYjE2X2N0bF9saW5lX3BsYXlfc3dpdGNoID0KLQlTQl9ET1VCTEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgU0JfRFNQNF9PVVRQVVRfU1csIFNCX0RTUDRfT1VUUFVUX1NXLCA0LCAzLCAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUDRfTElORV9ERVYsIChTQl9EU1A0X0xJTkVfREVWICsgMSksIDMsIDMsIDMxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfbWljX2NhcHR1cmVfcm91dGUgPQotCVNCMTZfSU5QVVRfU1coIk1pYyBDYXB0dXJlIFJvdXRlIiwgU0JfRFNQNF9JTlBVVF9MRUZULCBTQl9EU1A0X0lOUFVUX1JJR0hULCAwLCAwKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfbWljX3BsYXlfc3dpdGNoID0KLQlTQl9TSU5HTEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCBTQl9EU1A0X09VVFBVVF9TVywgMCwgMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX21pY19wbGF5X3ZvbCA9Ci0JU0JfU0lOR0xFKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQNF9NSUNfREVWLCAzLCAzMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX3BjX3NwZWFrZXJfdm9sID0KLQlTQl9TSU5HTEUoIkJlZXAgVm9sdW1lIiwgU0JfRFNQNF9TUEVBS0VSX0RFViwgNiwgMyk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX3NiMTZfY3RsX2NhcHR1cmVfdm9sID0KLQlTQl9ET1VCTEUoIkNhcHR1cmUgVm9sdW1lIiwgU0JfRFNQNF9JR0FJTl9ERVYsIChTQl9EU1A0X0lHQUlOX0RFViArIDEpLCA2LCA2LCAzKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfcGxheV92b2wgPQotCVNCX0RPVUJMRSgiUGxheWJhY2sgVm9sdW1lIiwgU0JfRFNQNF9PR0FJTl9ERVYsIChTQl9EU1A0X09HQUlOX0RFViArIDEpLCA2LCA2LCAzKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jdGxfYXV0b19taWNfZ2FpbiA9Ci0JU0JfU0lOR0xFKCJNaWMgQXV0byBHYWluIiwgU0JfRFNQNF9NSUNfQUdDLCAwLCAxKTsKLQotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtICpzbmRfc2IxNl9jb250cm9sc1tdID0gewotCSZzbmRfc2IxNl9jdGxfbWFzdGVyX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfM2RfZW5oYW5jZV9zd2l0Y2gsCi0JJnNuZF9zYjE2X2N0bF90b25lX2Jhc3MsCi0JJnNuZF9zYjE2X2N0bF90b25lX3RyZWJsZSwKLQkmc25kX3NiMTZfY3RsX3BjbV9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX3N5bnRoX2NhcHR1cmVfcm91dGUsCi0JJnNuZF9zYjE2X2N0bF9zeW50aF9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX2NkX2NhcHR1cmVfcm91dGUsCi0JJnNuZF9zYjE2X2N0bF9jZF9wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX2NkX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfbGluZV9jYXB0dXJlX3JvdXRlLAotCSZzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX2xpbmVfcGxheV92b2wsCi0JJnNuZF9zYjE2X2N0bF9taWNfY2FwdHVyZV9yb3V0ZSwKLQkmc25kX3NiMTZfY3RsX21pY19wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX21pY19wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX3BjX3NwZWFrZXJfdm9sLAotCSZzbmRfc2IxNl9jdGxfY2FwdHVyZV92b2wsCi0JJnNuZF9zYjE2X2N0bF9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX2F1dG9fbWljX2dhaW4KK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfc2IxNl9jb250cm9sc1tdID0geworCVNCX0RPVUJMRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgU0JfRFNQNF9NQVNURVJfREVWLCAoU0JfRFNQNF9NQVNURVJfREVWICsgMSksIDMsIDMsIDMxKSwKKwlTQl9ET1VCTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLAorCQkgIFNCX0RTUDRfUENNX0RFViwgKFNCX0RTUDRfUENNX0RFViArIDEpLCAzLCAzLCAzMSksCisJU0IxNl9JTlBVVF9TVygiU3ludGggQ2FwdHVyZSBSb3V0ZSIsCisJCSAgICAgIFNCX0RTUDRfSU5QVVRfTEVGVCwgU0JfRFNQNF9JTlBVVF9SSUdIVCwgNiwgNSksCisJU0JfRE9VQkxFKCJTeW50aCBQbGF5YmFjayBWb2x1bWUiLAorCQkgIFNCX0RTUDRfU1lOVEhfREVWLCAoU0JfRFNQNF9TWU5USF9ERVYgKyAxKSwgMywgMywgMzEpLAorCVNCMTZfSU5QVVRfU1coIkNEIENhcHR1cmUgUm91dGUiLAorCQkgICAgICBTQl9EU1A0X0lOUFVUX0xFRlQsIFNCX0RTUDRfSU5QVVRfUklHSFQsIDIsIDEpLAorCVNCX0RPVUJMRSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwKKwkJICBTQl9EU1A0X09VVFBVVF9TVywgU0JfRFNQNF9PVVRQVVRfU1csIDIsIDEsIDEpLAorCVNCX0RPVUJMRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EU1A0X0NEX0RFViwgKFNCX0RTUDRfQ0RfREVWICsgMSksIDMsIDMsIDMxKSwKKwlTQjE2X0lOUFVUX1NXKCJNaWMgQ2FwdHVyZSBSb3V0ZSIsCisJCSAgICAgIFNCX0RTUDRfSU5QVVRfTEVGVCwgU0JfRFNQNF9JTlBVVF9SSUdIVCwgMCwgMCksCisJU0JfU0lOR0xFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgU0JfRFNQNF9PVVRQVVRfU1csIDAsIDEpLAorCVNCX1NJTkdMRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RTUDRfTUlDX0RFViwgMywgMzEpLAorCVNCX1NJTkdMRSgiQmVlcCBWb2x1bWUiLCBTQl9EU1A0X1NQRUFLRVJfREVWLCA2LCAzKSwKKwlTQl9ET1VCTEUoIkNhcHR1cmUgVm9sdW1lIiwKKwkJICBTQl9EU1A0X0lHQUlOX0RFViwgKFNCX0RTUDRfSUdBSU5fREVWICsgMSksIDYsIDYsIDMpLAorCVNCX0RPVUJMRSgiUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EU1A0X09HQUlOX0RFViwgKFNCX0RTUDRfT0dBSU5fREVWICsgMSksIDYsIDYsIDMpLAorCVNCMTZfSU5QVVRfU1coIkxpbmUgQ2FwdHVyZSBSb3V0ZSIsCisJCSAgICAgIFNCX0RTUDRfSU5QVVRfTEVGVCwgU0JfRFNQNF9JTlBVVF9SSUdIVCwgNCwgMyksCisJU0JfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsCisJCSAgU0JfRFNQNF9PVVRQVVRfU1csIFNCX0RTUDRfT1VUUFVUX1NXLCA0LCAzLCAxKSwKKwlTQl9ET1VCTEUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EU1A0X0xJTkVfREVWLCAoU0JfRFNQNF9MSU5FX0RFViArIDEpLCAzLCAzLCAzMSksCisJU0JfU0lOR0xFKCJNaWMgQXV0byBHYWluIiwgU0JfRFNQNF9NSUNfQUdDLCAwLCAxKSwKKwlTQl9TSU5HTEUoIjNEIEVuaGFuY2VtZW50IFN3aXRjaCIsIFNCX0RTUDRfM0RTRSwgMCwgMSksCisJU0JfRE9VQkxFKCJUb25lIENvbnRyb2wgLSBCYXNzIiwKKwkJICBTQl9EU1A0X0JBU1NfREVWLCAoU0JfRFNQNF9CQVNTX0RFViArIDEpLCA0LCA0LCAxNSksCisJU0JfRE9VQkxFKCJUb25lIENvbnRyb2wgLSBUcmVibGUiLAorCQkgIFNCX0RTUDRfVFJFQkxFX0RFViwgKFNCX0RTUDRfVFJFQkxFX0RFViArIDEpLCA0LCA0LCAxNSkKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNuZF9zYjE2X2luaXRfdmFsdWVzW11bMl0gPSB7CkBAIC02NzgsNDYgKzYyNiwzNCBAQAogLyoKICAqIERUMDE5eCBzcGVjaWZpYyBtaXhlciBlbGVtZW50cwogICovCi1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2R0MDE5eF9jdGxfbWFzdGVyX3BsYXlfdm9sID0KLQlTQl9ET1VCTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBTQl9EVDAxOVhfTUFTVEVSX0RFViwgU0JfRFQwMTlYX01BU1RFUl9ERVYsIDQsMCwgMTUpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9kdDAxOXhfY3RsX3BjbV9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgU0JfRFQwMTlYX1BDTV9ERVYsIFNCX0RUMDE5WF9QQ01fREVWLCA0LDAsIDE1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfZHQwMTl4X2N0bF9zeW50aF9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJTeW50aCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EVDAxOVhfU1lOVEhfREVWLCBTQl9EVDAxOVhfU1lOVEhfREVWLCA0LDAsIDE1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfZHQwMTl4X2N0bF9jZF9wbGF5X3ZvbCA9Ci0JU0JfRE9VQkxFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCBTQl9EVDAxOVhfQ0RfREVWLCBTQl9EVDAxOVhfQ0RfREVWLCA0LDAsIDE1KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfZHQwMTl4X2N0bF9taWNfcGxheV92b2wgPQotCVNCX1NJTkdMRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RUMDE5WF9NSUNfREVWLCA0LCA3KTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfZHQwMTl4X2N0bF9wY19zcGVha2VyX3ZvbCA9Ci0JU0JfU0lOR0xFKCJCZWVwIFZvbHVtZSIsIFNCX0RUMDE5WF9TUEtSX0RFViwgMCwgIDcpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9kdDAxOXhfY3RsX2xpbmVfcGxheV92b2wgPQotCVNCX0RPVUJMRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCBTQl9EVDAxOVhfTElORV9ERVYsIFNCX0RUMDE5WF9MSU5FX0RFViwgNCwwLCAxNSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2R0MDE5eF9jdGxfcGNtX3BsYXlfc3dpdGNoID0KLQlTQl9ET1VCTEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCBTQl9EVDAxOVhfT1VUUFVUX1NXMiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIDIsMSwgMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV9zd2l0Y2ggPQotCVNCX0RPVUJMRSgiU3ludGggUGxheWJhY2sgU3dpdGNoIiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCA0LDMsIDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9kdDAxOXhfY3RsX2NhcHR1cmVfc291cmNlID0KK3N0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfZHQwMTl4X2NvbnRyb2xzW10gPSB7CisJLyogQUxTNDAwMCBiZWxvdyBoYXMgc29tZSBwYXJ0cyB3aGljaCB3ZSBtaWdodCBiZSBsYWNraW5nLAorCSAqIGUuZy4gc25kX2FsczQwMDBfY3RsX21vbm9fcGxheWJhY2tfc3dpdGNoIC0gY2hlY2sgaXQhICovCisJU0JfRE9VQkxFKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EVDAxOVhfTUFTVEVSX0RFViwgU0JfRFQwMTlYX01BU1RFUl9ERVYsIDQsIDAsIDE1KSwKKwlTQl9ET1VCTEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLAorCQkgIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCBTQl9EVDAxOVhfT1VUUFVUX1NXMiwgMiwgMSwgMSksCisJU0JfRE9VQkxFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EVDAxOVhfUENNX0RFViwgU0JfRFQwMTlYX1BDTV9ERVYsIDQsIDAsIDE1KSwKKwlTQl9ET1VCTEUoIlN5bnRoIFBsYXliYWNrIFN3aXRjaCIsCisJCSAgU0JfRFQwMTlYX09VVFBVVF9TVzIsIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCA0LCAzLCAxKSwKKwlTQl9ET1VCTEUoIlN5bnRoIFBsYXliYWNrIFZvbHVtZSIsCisJCSAgU0JfRFQwMTlYX1NZTlRIX0RFViwgU0JfRFQwMTlYX1NZTlRIX0RFViwgNCwgMCwgMTUpLAorCVNCX0RPVUJMRSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwKKwkJICBTQl9EU1A0X09VVFBVVF9TVywgU0JfRFNQNF9PVVRQVVRfU1csIDIsIDEsIDEpLAorCVNCX0RPVUJMRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EVDAxOVhfQ0RfREVWLCBTQl9EVDAxOVhfQ0RfREVWLCA0LCAwLCAxNSksCisJU0JfU0lOR0xFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgU0JfRFNQNF9PVVRQVVRfU1csIDAsIDEpLAorCVNCX1NJTkdMRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIFNCX0RUMDE5WF9NSUNfREVWLCA0LCA3KSwKKwlTQl9TSU5HTEUoIkJlZXAgVm9sdW1lIiwgU0JfRFQwMTlYX1NQS1JfREVWLCAwLCAgNyksCisJU0JfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsCisJCSAgU0JfRFNQNF9PVVRQVVRfU1csIFNCX0RTUDRfT1VUUFVUX1NXLCA0LCAzLCAxKSwKKwlTQl9ET1VCTEUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwKKwkJICBTQl9EVDAxOVhfTElORV9ERVYsIFNCX0RUMDE5WF9MSU5FX0RFViwgNCwgMCwgMTUpLAogCXsKIAkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAogCQkudHlwZSA9IFNCX01JWF9DQVBUVVJFX0RUMDE5WAotCX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSAqc25kX2R0MDE5eF9jb250cm9sc1tdID0gewotCS8qIEFMUzQwMDAgYmVsb3cgaGFzIHNvbWUgcGFydHMgd2hpY2ggd2UgbWlnaHQgYmUgbGFja2luZywKLQkgKiBlLmcuIHNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCAtIGNoZWNrIGl0ISAqLwotCSZzbmRfZHQwMTl4X2N0bF9tYXN0ZXJfcGxheV92b2wsCi0JJnNuZF9kdDAxOXhfY3RsX3BjbV9wbGF5X3ZvbCwKLQkmc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV92b2wsCi0JJnNuZF9kdDAxOXhfY3RsX2NkX3BsYXlfdm9sLAotCSZzbmRfZHQwMTl4X2N0bF9taWNfcGxheV92b2wsCi0JJnNuZF9kdDAxOXhfY3RsX3BjX3NwZWFrZXJfdm9sLAotCSZzbmRfZHQwMTl4X2N0bF9saW5lX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfbWljX3BsYXlfc3dpdGNoLAotCSZzbmRfc2IxNl9jdGxfY2RfcGxheV9zd2l0Y2gsCi0JJnNuZF9zYjE2X2N0bF9saW5lX3BsYXlfc3dpdGNoLAotCSZzbmRfZHQwMTl4X2N0bF9wY21fcGxheV9zd2l0Y2gsCi0JJnNuZF9kdDAxOXhfY3RsX3N5bnRoX3BsYXlfc3dpdGNoLAotCSZzbmRfZHQwMTl4X2N0bF9jYXB0dXJlX3NvdXJjZQorCX0KIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNuZF9kdDAxOXhfaW5pdF92YWx1ZXNbXVsyXSA9IHsKQEAgLTczNSw4MiArNjcxLDM3IEBACiAvKgogICogQUxTNDAwMCBzcGVjaWZpYyBtaXhlciBlbGVtZW50cwogICovCi1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21hc3Rlcl9tb25vX3BsYXliYWNrX3N3aXRjaCA9Ci0JU0JfU0lOR0xFKCJNYXN0ZXIgTW9ubyBQbGF5YmFjayBTd2l0Y2giLCBTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCwgNSwgMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczRrX2N0bF9tYXN0ZXJfbW9ub19jYXB0dXJlX3JvdXRlID0geworc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2NvbnRyb2xzW10gPSB7CisJU0JfRE9VQkxFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwKKwkJICBTQl9EVDAxOVhfT1VUUFVUX1NXMiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIDIsIDEsIDEpLAorCVNCX0RPVUJMRSgiU3ludGggUGxheWJhY2sgU3dpdGNoIiwKKwkJICBTQl9EVDAxOVhfT1VUUFVUX1NXMiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIDQsIDMsIDEpLAorCVNCX1NJTkdMRSgiTWljIEJvb3N0ICgrMjBkQikiLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCAwLCAweDAzKSwKKwlTQl9TSU5HTEUoIk1hc3RlciBNb25vIFBsYXliYWNrIFN3aXRjaCIsIFNCX0FMUzQwMDBfTU9OT19JT19DVFJMLCA1LCAxKSwKKwl7CiAJCS5uYW1lID0gIk1hc3RlciBNb25vIENhcHR1cmUgUm91dGUiLAogCQkudHlwZSA9IFNCX01JWF9NT05PX0NBUFRVUkVfQUxTNEsKLQl9Owotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9tb25vX3BsYXliYWNrX3N3aXRjaCA9Ci0JU0JfU0lOR0xFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIFNCX0RUMDE5WF9PVVRQVVRfU1cyLCAwLCAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWljXzIwZGJfYm9vc3QgPQotCVNCX1NJTkdMRSgiTWljIEJvb3N0ICgrMjBkQikiLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCAwLCAweDAzKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfYW5hbG9nX2xvb3BiYWNrID0KLQlTQl9TSU5HTEUoIkFuYWxvZyBMb29wYmFjayBTd2l0Y2giLCBTQl9BTFM0MDAwX01JQ19JTl9HQUlOLCA3LCAweDAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfZGlnaXRhbF9sb29wYmFjayA9CisJfSwKKwlTQl9TSU5HTEUoIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgU0JfRFQwMTlYX09VVFBVVF9TVzIsIDAsIDEpLAorCVNCX1NJTkdMRSgiQW5hbG9nIExvb3BiYWNrIFN3aXRjaCIsIFNCX0FMUzQwMDBfTUlDX0lOX0dBSU4sIDcsIDB4MDEpLAorCVNCX1NJTkdMRSgiM0QgQ29udHJvbCAtIFN3aXRjaCIsIFNCX0FMUzQwMDBfM0RfU05EX0ZYLCA2LCAweDAxKSwKIAlTQl9TSU5HTEUoIkRpZ2l0YWwgTG9vcGJhY2sgU3dpdGNoIiwKLQkJICBTQl9BTFM0MDAwX0NSM19DT05GSUdVUkFUSU9OLCA3LCAweDAxKTsKLS8qIEZJWE1FOiBmdW5jdGlvbmFsaXR5IG9mIDNEIGNvbnRyb2xzIG1pZ2h0IGJlIHN3YXBwZWQsIEkgZGlkbid0IGZpbmQKLSAqIGEgZGVzY3JpcHRpb24gb2YgaG93IHRvIGlkZW50aWZ5IHdoYXQgaXMgc3VwcG9zZWQgdG8gYmUgd2hhdCAqLwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfc3dpdGNoID0KLQlTQl9TSU5HTEUoIjNEIENvbnRyb2wgLSBTd2l0Y2giLCBTQl9BTFM0MDAwXzNEX1NORF9GWCwgNiwgMHgwMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfM2RfY29udHJvbF9yYXRpbyA9Ci0JU0JfU0lOR0xFKCIzRCBDb250cm9sIC0gTGV2ZWwiLCBTQl9BTFM0MDAwXzNEX1NORF9GWCwgMCwgMHgwNyk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfM2RfY29udHJvbF9mcmVxID0KKwkJICBTQl9BTFM0MDAwX0NSM19DT05GSUdVUkFUSU9OLCA3LCAweDAxKSwKKwkvKiBGSVhNRTogZnVuY3Rpb25hbGl0eSBvZiAzRCBjb250cm9scyBtaWdodCBiZSBzd2FwcGVkLCBJIGRpZG4ndCBmaW5kCisJICogYSBkZXNjcmlwdGlvbiBvZiBob3cgdG8gaWRlbnRpZnkgd2hhdCBpcyBzdXBwb3NlZCB0byBiZSB3aGF0ICovCisJU0JfU0lOR0xFKCIzRCBDb250cm9sIC0gTGV2ZWwiLCBTQl9BTFM0MDAwXzNEX1NORF9GWCwgMCwgMHgwNyksCiAJLyogRklYTUU6IG1heWJlIHRoZXJlJ3MgYWN0dWFsbHkgc29tZSBzdGFuZGFyZCAzRCBjdHJsIG5hbWUgZm9yIGl0Pz8gKi8KLQlTQl9TSU5HTEUoIjNEIENvbnRyb2wgLSBGcmVxIiwgU0JfQUxTNDAwMF8zRF9TTkRfRlgsIDQsIDB4MDMpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfZGVsYXkgPQorCVNCX1NJTkdMRSgiM0QgQ29udHJvbCAtIEZyZXEiLCBTQl9BTFM0MDAwXzNEX1NORF9GWCwgNCwgMHgwMyksCiAJLyogRklYTUU6IEFMUzQwMDBhLnBkZiBtZW50aW9ucyBCQkQgKEJ1Y2tldCBCcmlnYWRlIERldmljZSkgdGltZSBkZWxheSwKIAkgKiBidXQgd2hhdCBBTFNBIDNEIGF0dHJpYnV0ZSBpcyB0aGF0IGFjdHVhbGx5PyAiQ2VudGVyIiwgIkRlcHRoIiwKIAkgKiAiV2lkZSIgb3IgIlNwYWNlIiBvciBldmVuICJMZXZlbCI/IEFzc3VtaW5nICJXaWRlIiBmb3Igbm93Li4uICovCi0JU0JfU0lOR0xFKCIzRCBDb250cm9sIC0gV2lkZSIsIFNCX0FMUzQwMDBfM0RfVElNRV9ERUxBWSwgMCwgMHgwZik7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfM2RfY29udHJvbF9wb3dlcm9mZl9zd2l0Y2ggPQotCVNCX1NJTkdMRSgiM0QgUG93ZXJPZmYgU3dpdGNoIiwgU0JfQUxTNDAwMF8zRF9USU1FX0RFTEFZLCA0LCAweDAxKTsKLXN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfM2RiX2ZyZXFfY29udHJvbF9zd2l0Y2ggPQorCVNCX1NJTkdMRSgiM0QgQ29udHJvbCAtIFdpZGUiLCBTQl9BTFM0MDAwXzNEX1RJTUVfREVMQVksIDAsIDB4MGYpLAorCVNCX1NJTkdMRSgiM0QgUG93ZXJPZmYgU3dpdGNoIiwgU0JfQUxTNDAwMF8zRF9USU1FX0RFTEFZLCA0LCAweDAxKSwKIAlTQl9TSU5HTEUoIk1hc3RlciBQbGF5YmFjayA4a0h6IC8gMjBrSHogTFBGIFN3aXRjaCIsCi0JCSAgU0JfQUxTNDAwMF9GTURBQywgNSwgMHgwMSk7CisJCSAgU0JfQUxTNDAwMF9GTURBQywgNSwgMHgwMSksCiAjaWZkZWYgTk9UX0FWQUlMQUJMRQotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9mbWRhYyA9Ci0JU0JfU0lOR0xFKCJGTURBQyBTd2l0Y2ggKE9wdGlvbiA/KSIsIFNCX0FMUzQwMDBfRk1EQUMsIDAsIDB4MDEpOwotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9xc291bmQgPQotCVNCX1NJTkdMRSgiUVNvdW5kIE1vZGUiLCBTQl9BTFM0MDAwX1FTT1VORCwgMSwgMHgxZik7Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtICpzbmRfYWxzNDAwMF9jb250cm9sc1tdID0gewotCQkJCQkJLyogQUxTNDAwMGEuUERGIHJlZ3MgcGFnZSAqLwotCSZzbmRfc2IxNl9jdGxfbWFzdGVyX3BsYXlfdm9sLAkJLyogTVgzMC8zMSAxMiAqLwotCSZzbmRfZHQwMTl4X2N0bF9wY21fcGxheV9zd2l0Y2gsCS8qIE1YNEMgICAgMTYgKi8KLQkmc25kX3NiMTZfY3RsX3BjbV9wbGF5X3ZvbCwJCS8qIE1YMzIvMzMgMTIgKi8KLQkmc25kX3NiMTZfY3RsX3N5bnRoX2NhcHR1cmVfcm91dGUsCS8qIE1YM0QvM0UgMTQgKi8KLQkmc25kX2R0MDE5eF9jdGxfc3ludGhfcGxheV9zd2l0Y2gsCS8qIE1YNEMgICAgMTYgKi8KLQkmc25kX3NiMTZfY3RsX3N5bnRoX3BsYXlfdm9sLAkJLyogTVgzNC8zNSAxMi8xMyAqLwotCSZzbmRfc2IxNl9jdGxfY2RfY2FwdHVyZV9yb3V0ZSwJCS8qIE1YM0QvM0UgMTQgKi8KLQkmc25kX3NiMTZfY3RsX2NkX3BsYXlfc3dpdGNoLAkJLyogTVgzQyAgICAxNCAqLwotCSZzbmRfc2IxNl9jdGxfY2RfcGxheV92b2wsCQkvKiBNWDM2LzM3IDEzICovCi0JJnNuZF9zYjE2X2N0bF9saW5lX2NhcHR1cmVfcm91dGUsCS8qIE1YM0QvM0UgMTQgKi8KLQkmc25kX3NiMTZfY3RsX2xpbmVfcGxheV9zd2l0Y2gsCQkvKiBNWDNDICAgIDE0ICovCi0JJnNuZF9zYjE2X2N0bF9saW5lX3BsYXlfdm9sLAkJLyogTVgzOC8zOSAxMyAqLwotCSZzbmRfc2IxNl9jdGxfbWljX2NhcHR1cmVfcm91dGUsCS8qIE1YM0QvM0UgMTQgKi8KLQkmc25kX2FsczQwMDBfY3RsX21pY18yMGRiX2Jvb3N0LAkvKiBNWDREICAgIDE2ICovCi0JJnNuZF9zYjE2X2N0bF9taWNfcGxheV9zd2l0Y2gsCQkvKiBNWDNDICAgIDE0ICovCi0JJnNuZF9zYjE2X2N0bF9taWNfcGxheV92b2wsCQkvKiBNWDNBICAgIDEzICovCi0JJnNuZF9zYjE2X2N0bF9wY19zcGVha2VyX3ZvbCwJCS8qIE1YM0IgICAgMTQgKi8KLQkmc25kX3NiMTZfY3RsX2NhcHR1cmVfdm9sLAkJLyogTVgzRi80MCAxNSAqLwotCSZzbmRfc2IxNl9jdGxfcGxheV92b2wsCQkJLyogTVg0MS80MiAxNSAqLwotCSZzbmRfYWxzNDAwMF9jdGxfbWFzdGVyX21vbm9fcGxheWJhY2tfc3dpdGNoLCAvKiBNWDRDIDE2ICovCi0JJnNuZF9hbHM0a19jdGxfbWFzdGVyX21vbm9fY2FwdHVyZV9yb3V0ZSwgLyogTVg0QiAgMTYgKi8KLQkmc25kX2FsczQwMDBfY3RsX21vbm9fcGxheWJhY2tfc3dpdGNoLAkvKiBNWDRDICAgIDE2ICovCi0JJnNuZF9hbHM0MDAwX2N0bF9taXhlcl9hbmFsb2dfbG9vcGJhY2ssIC8qIE1YNEQgICAgMTYgKi8KLQkmc25kX2FsczQwMDBfY3RsX21peGVyX2RpZ2l0YWxfbG9vcGJhY2ssIC8qIENSMyAgICAyMSAqLwotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3N3aXRjaCwJCSAvKiBNWDUwICAgMTcgKi8KLQkmc25kX2FsczQwMDBfM2RfY29udHJvbF9yYXRpbywJCSAvKiBNWDUwICAgMTcgKi8KLQkmc25kX2FsczQwMDBfM2RfY29udHJvbF9mcmVxLAkJIC8qIE1YNTAgICAxNyAqLwotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX2RlbGF5LAkJIC8qIE1YNTEgICAxOCAqLwotCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3Bvd2Vyb2ZmX3N3aXRjaCwJLyogTVg1MSAgICAxOCAqLwotCSZzbmRfYWxzNDAwMF9jdGxfM2RiX2ZyZXFfY29udHJvbF9zd2l0Y2gsCS8qIE1YNEYgICAgMTcgKi8KLSNpZmRlZiBOT1RfQVZBSUxBQkxFCi0JJnNuZF9hbHM0MDAwX2N0bF9mbWRhYywKLQkmc25kX2FsczQwMDBfY3RsX3Fzb3VuZCwKKwlTQl9TSU5HTEUoIkZNREFDIFN3aXRjaCAoT3B0aW9uID8pIiwgU0JfQUxTNDAwMF9GTURBQywgMCwgMHgwMSksCisJU0JfU0lOR0xFKCJRU291bmQgTW9kZSIsIFNCX0FMUzQwMDBfUVNPVU5ELCAxLCAweDFmKSwKICNlbmRpZgogfTsKIApAQCAtODI5LDExICs3MjAsMTAgQEAKIAl7IFNCX0FMUzQwMDBfTUlDX0lOX0dBSU4sIDAgfSwKIH07CiAKLQogLyoKICAqLwogc3RhdGljIGludCBzbmRfc2JtaXhlcl9pbml0KHN0cnVjdCBzbmRfc2IgKmNoaXAsCi0JCQkgICAgc3RydWN0IHNibWl4X2VsZW0gKipjb250cm9scywKKwkJCSAgICBzdHJ1Y3Qgc2JtaXhfZWxlbSAqY29udHJvbHMsCiAJCQkgICAgaW50IGNvbnRyb2xzX2NvdW50LAogCQkJICAgIHVuc2lnbmVkIGNoYXIgbWFwW11bMl0sCiAJCQkgICAgaW50IG1hcF9jb3VudCwKQEAgLTg1Niw3ICs3NDYsOCBAQAogCX0KIAogCWZvciAoaWR4ID0gMDsgaWR4IDwgY29udHJvbHNfY291bnQ7IGlkeCsrKSB7Ci0JCWlmICgoZXJyID0gc25kX3NibWl4ZXJfYWRkX2N0bF9lbGVtKGNoaXAsIGNvbnRyb2xzW2lkeF0pKSA8IDApCisJCWVyciA9IHNuZF9zYm1peGVyX2FkZF9jdGxfZWxlbShjaGlwLCAmY29udHJvbHNbaWR4XSk7CisJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CiAJc25kX2NvbXBvbmVudF9hZGQoY2FyZCwgbmFtZSk7CkBAIC04ODgsNiArNzc5LDcgQEAKIAkJCXJldHVybiBlcnI7CiAJCWJyZWFrOwogCWNhc2UgU0JfSFdfUFJPOgorCWNhc2UgU0JfSFdfSkFaWjE2OgogCQlpZiAoKGVyciA9IHNuZF9zYm1peGVyX2luaXQoY2hpcCwKIAkJCQkJICAgIHNuZF9zYnByb19jb250cm9scywKIAkJCQkJICAgIEFSUkFZX1NJWkUoc25kX3NicHJvX2NvbnRyb2xzKSwKQEAgLTkwOCw2ICs4MDAsMTUgQEAKIAkJCXJldHVybiBlcnI7CiAJCWJyZWFrOwogCWNhc2UgU0JfSFdfQUxTNDAwMDoKKwkJLyogdXNlIG9ubHkgdGhlIGZpcnN0IDE2IGNvbnRyb2xzIGZyb20gU0IxNiAqLworCQllcnIgPSBzbmRfc2JtaXhlcl9pbml0KGNoaXAsCisJCQkJCXNuZF9zYjE2X2NvbnRyb2xzLAorCQkJCQkxNiwKKwkJCQkJc25kX3NiMTZfaW5pdF92YWx1ZXMsCisJCQkJCUFSUkFZX1NJWkUoc25kX3NiMTZfaW5pdF92YWx1ZXMpLAorCQkJCQkiQUxTNDAwMCIpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAJCWlmICgoZXJyID0gc25kX3NibWl4ZXJfaW5pdChjaGlwLAogCQkJCQkgICAgc25kX2FsczQwMDBfY29udHJvbHMsCiAJCQkJCSAgICBBUlJBWV9TSVpFKHNuZF9hbHM0MDAwX2NvbnRyb2xzKSwKQEAgLTEwMjksNiArOTMwLDcgQEAKIAkJc2F2ZV9taXhlcihjaGlwLCBzYjIwX3NhdmVkX3JlZ3MsIEFSUkFZX1NJWkUoc2IyMF9zYXZlZF9yZWdzKSk7CiAJCWJyZWFrOwogCWNhc2UgU0JfSFdfUFJPOgorCWNhc2UgU0JfSFdfSkFaWjE2OgogCQlzYXZlX21peGVyKGNoaXAsIHNicHJvX3NhdmVkX3JlZ3MsIEFSUkFZX1NJWkUoc2Jwcm9fc2F2ZWRfcmVncykpOwogCQlicmVhazsKIAljYXNlIFNCX0hXXzE2OgpAQCAtMTA1NSw2ICs5NTcsNyBAQAogCQlyZXN0b3JlX21peGVyKGNoaXAsIHNiMjBfc2F2ZWRfcmVncywgQVJSQVlfU0laRShzYjIwX3NhdmVkX3JlZ3MpKTsKIAkJYnJlYWs7CiAJY2FzZSBTQl9IV19QUk86CisJY2FzZSBTQl9IV19KQVpaMTY6CiAJCXJlc3RvcmVfbWl4ZXIoY2hpcCwgc2Jwcm9fc2F2ZWRfcmVncywgQVJSQVlfU0laRShzYnByb19zYXZlZF9yZWdzKSk7CiAJCWJyZWFrOwogCWNhc2UgU0JfSFdfMTY6CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evd3NzL3dzc19saWIuYyBiL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCmluZGV4IDViOWQ2YzEuLjkxOTFiMzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCisrKyBiL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jCkBAIC0yMDE0LDYgKzIwMTQsNyBAQAogCWNhc2UgV1NTX0hXX0lOVEVSV0FWRToKIAkJcHRleHRzID0gZ3VzbWF4X3RleHRzOwogCQlicmVhazsKKwljYXNlIFdTU19IV19PUFRJOTNYOgogCWNhc2UgV1NTX0hXX09QTDNTQTI6CiAJCXB0ZXh0cyA9IG9wbDNzYV90ZXh0czsKIAkJYnJlYWs7CkBAIC0yMjQ2LDU0ICsyMjQ3LDEyIEBACiAJCUNTNDIzMV9NT05PX0NUUkwsIDUsIDEsIDApLAogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9vcHRpOTN4X2NvbnRyb2xzW10gPSB7Ci1XU1NfRE9VQkxFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMCwKLQkJT1BUaTkzWF9PVVRfTEVGVCwgT1BUaTkzWF9PVVRfUklHSFQsIDcsIDcsIDEsIDEpLAotV1NTX0RPVUJMRV9UTFYoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAwLAotCQlPUFRpOTNYX09VVF9MRUZULCBPUFRpOTNYX09VVF9SSUdIVCwgMSwgMSwgMzEsIDEsCi0JCWRiX3NjYWxlXzZiaXQpLAotV1NTX0RPVUJMRSgiUENNIFBsYXliYWNrIFN3aXRjaCIsIDAsCi0JCUNTNDIzMV9MRUZUX09VVFBVVCwgQ1M0MjMxX1JJR0hUX09VVFBVVCwgNywgNywgMSwgMSksCi1XU1NfRE9VQkxFKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgMCwKLQkJQ1M0MjMxX0xFRlRfT1VUUFVULCBDUzQyMzFfUklHSFRfT1VUUFVULCAwLCAwLCAzMSwgMSksCi1XU1NfRE9VQkxFKCJGTSBQbGF5YmFjayBTd2l0Y2giLCAwLAotCQlDUzQyMzFfQVVYMl9MRUZUX0lOUFVULCBDUzQyMzFfQVVYMl9SSUdIVF9JTlBVVCwgNywgNywgMSwgMSksCi1XU1NfRE9VQkxFKCJGTSBQbGF5YmFjayBWb2x1bWUiLCAwLAotCQlDUzQyMzFfQVVYMl9MRUZUX0lOUFVULCBDUzQyMzFfQVVYMl9SSUdIVF9JTlBVVCwgMSwgMSwgMTUsIDEpLAotV1NTX0RPVUJMRSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAwLAotCQlDUzQyMzFfTEVGVF9MSU5FX0lOLCBDUzQyMzFfUklHSFRfTElORV9JTiwgNywgNywgMSwgMSksCi1XU1NfRE9VQkxFKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDAsCi0JCUNTNDIzMV9MRUZUX0xJTkVfSU4sIENTNDIzMV9SSUdIVF9MSU5FX0lOLCAwLCAwLCAxNSwgMSksCi1XU1NfRE9VQkxFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMCwKLQkJT1BUaTkzWF9NSUNfTEVGVF9JTlBVVCwgT1BUaTkzWF9NSUNfUklHSFRfSU5QVVQsIDcsIDcsIDEsIDEpLAotV1NTX0RPVUJMRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDAsCi0JCU9QVGk5M1hfTUlDX0xFRlRfSU5QVVQsIE9QVGk5M1hfTUlDX1JJR0hUX0lOUFVULCAxLCAxLCAxNSwgMSksCi1XU1NfRE9VQkxFKCJNaWMgQm9vc3QiLCAwLAotCQlDUzQyMzFfTEVGVF9JTlBVVCwgQ1M0MjMxX1JJR0hUX0lOUFVULCA1LCA1LCAxLCAwKSwKLVdTU19ET1VCTEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDAsCi0JCUNTNDIzMV9BVVgxX0xFRlRfSU5QVVQsIENTNDIzMV9BVVgxX1JJR0hUX0lOUFVULCA3LCA3LCAxLCAxKSwKLVdTU19ET1VCTEUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDAsCi0JCUNTNDIzMV9BVVgxX0xFRlRfSU5QVVQsIENTNDIzMV9BVVgxX1JJR0hUX0lOUFVULCAxLCAxLCAxNSwgMSksCi1XU1NfRE9VQkxFKCJBdXggUGxheWJhY2sgU3dpdGNoIiwgMCwKLQkJT1BUaTkzMV9BVVhfTEVGVF9JTlBVVCwgT1BUaTkzMV9BVVhfUklHSFRfSU5QVVQsIDcsIDcsIDEsIDEpLAotV1NTX0RPVUJMRSgiQXV4IFBsYXliYWNrIFZvbHVtZSIsIDAsCi0JCU9QVGk5MzFfQVVYX0xFRlRfSU5QVVQsIE9QVGk5MzFfQVVYX1JJR0hUX0lOUFVULCAxLCAxLCAxNSwgMSksCi1XU1NfRE9VQkxFKCJDYXB0dXJlIFZvbHVtZSIsIDAsCi0JCUNTNDIzMV9MRUZUX0lOUFVULCBDUzQyMzFfUklHSFRfSU5QVVQsIDAsIDAsIDE1LCAwKSwKLXsKLQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCi0JLmluZm8gPSBzbmRfd3NzX2luZm9fbXV4LAotCS5nZXQgPSBzbmRfd3NzX2dldF9tdXgsCi0JLnB1dCA9IHNuZF93c3NfcHV0X211eCwKLX0KLX07Ci0KIGludCBzbmRfd3NzX21peGVyKHN0cnVjdCBzbmRfd3NzICpjaGlwKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAl1bnNpZ25lZCBpbnQgaWR4OwogCWludCBlcnI7CisJaW50IGNvdW50ID0gQVJSQVlfU0laRShzbmRfd3NzX2NvbnRyb2xzKTsKIAogCWlmIChzbmRfQlVHX09OKCFjaGlwIHx8ICFjaGlwLT5wY20pKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIzMDIsMjggKzIyNjEsMTkgQEAKIAogCXN0cmNweShjYXJkLT5taXhlcm5hbWUsIGNoaXAtPnBjbS0+bmFtZSk7CiAKLQlpZiAoY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX09QVEk5M1gpCi0JCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShzbmRfb3B0aTkzeF9jb250cm9scyk7IGlkeCsrKSB7Ci0JCQllcnIgPSBzbmRfY3RsX2FkZChjYXJkLAotCQkJCQlzbmRfY3RsX25ldzEoJnNuZF9vcHRpOTN4X2NvbnRyb2xzW2lkeF0sCi0JCQkJCQkgICAgIGNoaXApKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCXJldHVybiBlcnI7Ci0JCX0KLQllbHNlIHsKLQkJaW50IGNvdW50ID0gQVJSQVlfU0laRShzbmRfd3NzX2NvbnRyb2xzKTsKKwkvKiBVc2Ugb25seSB0aGUgZmlyc3QgMTEgZW50cmllcyBvbiBBRDE4NDggKi8KKwlpZiAoY2hpcC0+aGFyZHdhcmUgJiBXU1NfSFdfQUQxODQ4X01BU0spCisJCWNvdW50ID0gMTE7CisJLyogVGhlcmUgaXMgbm8gbG9vcGJhY2sgb24gT1BUSTkzWCAqLworCWVsc2UgaWYgKGNoaXAtPmhhcmR3YXJlID09IFdTU19IV19PUFRJOTNYKQorCQljb3VudCA9IDk7CiAKLQkJLyogVXNlIG9ubHkgdGhlIGZpcnN0IDExIGVudHJpZXMgb24gQUQxODQ4ICovCi0JCWlmIChjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19BRDE4NDhfTUFTSykKLQkJCWNvdW50ID0gMTE7Ci0KLQkJZm9yIChpZHggPSAwOyBpZHggPCBjb3VudDsgaWR4KyspIHsKLQkJCWVyciA9IHNuZF9jdGxfYWRkKGNhcmQsCi0JCQkJCXNuZF9jdGxfbmV3MSgmc25kX3dzc19jb250cm9sc1tpZHhdLAotCQkJCQkJICAgICBjaGlwKSk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOwotCQl9CisJZm9yIChpZHggPSAwOyBpZHggPCBjb3VudDsgaWR4KyspIHsKKwkJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwKKwkJCQlzbmRfY3RsX25ldzEoJnNuZF93c3NfY29udHJvbHNbaWR4XSwKKwkJCQkJICAgICBjaGlwKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYyBiL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCmluZGV4IGYxZDlkMTYuLjZhZmYyMTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCisrKyBiL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtNjAzLDI1ICs2MDIsMTQgQEAKIHN0YXRpYyBpbnQgc25kX3NnaW8yYXVkaW9fcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCiB7Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlpbnQgc2l6ZSA9IHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKTsKLQotCS8qIGFsbG9jIHZpcnR1YWwgJ2RtYScgYXJlYSAqLwotCWlmIChydW50aW1lLT5kbWFfYXJlYSkKLQkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOwotCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvY191c2VyKHNpemUpOwotCWlmIChydW50aW1lLT5kbWFfYXJlYSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOwotCXJldHVybiAwOworCXJldHVybiBzbmRfcGNtX2xpYl9hbGxvY192bWFsbG9jX2J1ZmZlcihzdWJzdHJlYW0sCisJCQkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOwogfQogCiAvKiBod19mcmVlIGNhbGxiYWNrICovCiBzdGF0aWMgaW50IHNuZF9zZ2lvMmF1ZGlvX3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewotCXZmcmVlKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEpOwotCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOwotCXJldHVybiAwOworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSk7CiB9CiAKIC8qIHByZXBhcmUgY2FsbGJhY2sgKi8KQEAgLTY5MiwxMyArNjgwLDYgQEAKIAkJCSAgICAgICBjaGlwLT5jaGFubmVsW2NoYW4tPmlkeF0ucG9zKTsKIH0KIAotLyogZ2V0IHRoZSBwaHlzaWNhbCBwYWdlIHBvaW50ZXIgb24gdGhlIGdpdmVuIG9mZnNldCAqLwotc3RhdGljIHN0cnVjdCBwYWdlICpzbmRfc2dpbzJhdWRpb19wYWdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCkKLXsKLQlyZXR1cm4gdm1hbGxvY190b19wYWdlKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgKyBvZmZzZXQpOwotfQotCiAvKiBvcGVyYXRvcnMgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX3NnaW8yYXVkaW9fcGxheWJhY2sxX29wcyA9IHsKIAkub3BlbiA9ICAgICAgICBzbmRfc2dpbzJhdWRpb19wbGF5YmFjazFfb3BlbiwKQEAgLTcwOSw3ICs2OTAsOCBAQAogCS5wcmVwYXJlID0gICAgIHNuZF9zZ2lvMmF1ZGlvX3BjbV9wcmVwYXJlLAogCS50cmlnZ2VyID0gICAgIHNuZF9zZ2lvMmF1ZGlvX3BjbV90cmlnZ2VyLAogCS5wb2ludGVyID0gICAgIHNuZF9zZ2lvMmF1ZGlvX3BjbV9wb2ludGVyLAotCS5wYWdlID0gICAgICAgIHNuZF9zZ2lvMmF1ZGlvX3BhZ2UsCisJLnBhZ2UgPSAgICAgICAgc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZSwKKwkubW1hcCA9ICAgICAgICBzbmRfcGNtX2xpYl9tbWFwX3ZtYWxsb2MsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9zZ2lvMmF1ZGlvX3BsYXliYWNrMl9vcHMgPSB7CkBAIC03MjEsNyArNzAzLDggQEAKIAkucHJlcGFyZSA9ICAgICBzbmRfc2dpbzJhdWRpb19wY21fcHJlcGFyZSwKIAkudHJpZ2dlciA9ICAgICBzbmRfc2dpbzJhdWRpb19wY21fdHJpZ2dlciwKIAkucG9pbnRlciA9ICAgICBzbmRfc2dpbzJhdWRpb19wY21fcG9pbnRlciwKLQkucGFnZSA9ICAgICAgICBzbmRfc2dpbzJhdWRpb19wYWdlLAorCS5wYWdlID0gICAgICAgIHNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UsCisJLm1tYXAgPSAgICAgICAgc25kX3BjbV9saWJfbW1hcF92bWFsbG9jLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfc2dpbzJhdWRpb19jYXB0dXJlX29wcyA9IHsKQEAgLTczMyw3ICs3MTYsOCBAQAogCS5wcmVwYXJlID0gICAgIHNuZF9zZ2lvMmF1ZGlvX3BjbV9wcmVwYXJlLAogCS50cmlnZ2VyID0gICAgIHNuZF9zZ2lvMmF1ZGlvX3BjbV90cmlnZ2VyLAogCS5wb2ludGVyID0gICAgIHNuZF9zZ2lvMmF1ZGlvX3BjbV9wb2ludGVyLAotCS5wYWdlID0gICAgICAgIHNuZF9zZ2lvMmF1ZGlvX3BhZ2UsCisJLnBhZ2UgPSAgICAgICAgc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZSwKKwkubW1hcCA9ICAgICAgICBzbmRfcGNtX2xpYl9tbWFwX3ZtYWxsb2MsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMgYi9zb3VuZC9vc3MvYXUxNTUwX2FjOTcuYwppbmRleCA0MTkxYWNjLi5jMTA3MGUzIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvYXUxNTUwX2FjOTcuYworKysgYi9zb3VuZC9vc3MvYXUxNTUwX2FjOTcuYwpAQCAtNjE0LDcgKzYxNCw4IEBACiAJLyogUHV0IHR3byBidWZmZXJzIG9uIHRoZSByaW5nIHRvIGdldCB0aGluZ3Mgc3RhcnRlZC4KIAkqLwogCWZvciAoaT0wOyBpPDI7IGkrKykgewotCQlhdTF4eHhfZGJkbWFfcHV0X2Rlc3QoZGItPmRtYW5yLCBkYi0+bmV4dEluLCBkYi0+ZG1hX2ZyYWdzaXplKTsKKwkJYXUxeHh4X2RiZG1hX3B1dF9kZXN0KGRiLT5kbWFuciwgdmlydF90b19waHlzKGRiLT5uZXh0SW4pLAorCQkJCWRiLT5kbWFfZnJhZ3NpemUsIERETUFfRkxBR1NfSUUpOwogCiAJCWRiLT5uZXh0SW4gKz0gZGItPmRtYV9mcmFnc2l6ZTsKIAkJaWYgKGRiLT5uZXh0SW4gPj0gZGItPnJhd2J1ZiArIGRiLT5kbWFzaXplKQpAQCAtNzMyLDggKzczMyw5IEBACiAJZGItPmRtYV9xY291bnQtLTsKIAogCWlmIChkYi0+Y291bnQgPj0gZGItPmZyYWdzaXplKSB7Ci0JCWlmIChhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShkYi0+ZG1hbnIsIGRiLT5uZXh0T3V0LAotCQkJCQkJCWRiLT5mcmFnc2l6ZSkgPT0gMCkgeworCQlpZiAoYXUxeHh4X2RiZG1hX3B1dF9zb3VyY2UoZGItPmRtYW5yLAorCQkJCXZpcnRfdG9fcGh5cyhkYi0+bmV4dE91dCksIGRiLT5mcmFnc2l6ZSwKKwkJCQlERE1BX0ZMQUdTX0lFKSA9PSAwKSB7CiAJCQllcnIoInFjb3VudCA8IDIgYW5kIG5vIHJpbmcgcm9vbSEiKTsKIAkJfQogCQlkYi0+bmV4dE91dCArPSBkYi0+ZnJhZ3NpemU7CkBAIC03NzcsNyArNzc5LDggQEAKIAogCS8qIFB1dCBhIG5ldyBlbXB0eSBidWZmZXIgb24gdGhlIGRlc3RpbmF0aW9uIERNQS4KIAkqLwotCWF1MXh4eF9kYmRtYV9wdXRfZGVzdChkcC0+ZG1hbnIsIGRwLT5uZXh0SW4sIGRwLT5kbWFfZnJhZ3NpemUpOworCWF1MXh4eF9kYmRtYV9wdXRfZGVzdChkcC0+ZG1hbnIsIHZpcnRfdG9fcGh5cyhkcC0+bmV4dEluKSwKKwkJCSAgICAgIGRwLT5kbWFfZnJhZ3NpemUsIERETUFfRkxBR1NfSUUpOwogCiAJZHAtPm5leHRJbiArPSBkcC0+ZG1hX2ZyYWdzaXplOwogCWlmIChkcC0+bmV4dEluID49IGRwLT5yYXdidWYgKyBkcC0+ZG1hc2l6ZSkKQEAgLTExNzcsOCArMTE4MCw5IEBACiAJCSAqIHdlIGtub3cgdGhlIGRtYSBoYXMgc3RvcHBlZC4KIAkJICovCiAJCXdoaWxlICgoZGItPmRtYV9xY291bnQgPCAyKSAmJiAoZGItPmNvdW50ID49IGRiLT5mcmFnc2l6ZSkpIHsKLQkJCWlmIChhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShkYi0+ZG1hbnIsIGRiLT5uZXh0T3V0LAotCQkJCQkJCWRiLT5mcmFnc2l6ZSkgPT0gMCkgeworCQkJaWYgKGF1MXh4eF9kYmRtYV9wdXRfc291cmNlKGRiLT5kbWFuciwKKwkJCQl2aXJ0X3RvX3BoeXMoZGItPm5leHRPdXQpLCBkYi0+ZnJhZ3NpemUsCisJCQkJRERNQV9GTEFHU19JRSkgPT0gMCkgewogCQkJCWVycigicWNvdW50IDwgMiBhbmQgbm8gcmluZyByb29tISIpOwogCQkJfQogCQkJZGItPm5leHRPdXQgKz0gZGItPmZyYWdzaXplOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2thaGx1YS5jIGIvc291bmQvb3NzL2thaGx1YS5jCmluZGV4IDg5NDY2YjAuLjI0ZDE1MmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9rYWhsdWEuYworKysgYi9zb3VuZC9vc3Mva2FobHVhLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogICoJNTUzMCBvbmx5LiBUaGUgNTUxMC81NTIwIGRlY29kZSBpcyBkaWZmZXJlbnQuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlkX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGlkX3RibCkgPSB7CiAJeyBQQ0lfVkRFVklDRShDWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTMwX0FVRElPKSwgMCB9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zb3VuZGNhcmQuYyBiL3NvdW5kL29zcy9zb3VuZGNhcmQuYwppbmRleCBjNjI1MzA5Li5mZGU3YzEyIDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc291bmRjYXJkLmMKKysrIGIvc291bmQvb3NzL3NvdW5kY2FyZC5jCkBAIC0zMjgsMTEgKzMyOCwxMSBAQAogCXJldHVybiBtaXhlcl9kZXZzW21peGRldl0tPmlvY3RsKG1peGRldiwgY21kLCBhcmcpOwogfQogCi1zdGF0aWMgaW50IHNvdW5kX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyBzb3VuZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50IGxlbiA9IDAsIGR0eXBlOwotCWludCBkZXYgPSBpbWlub3IoaW5vZGUpOworCWludCBkZXYgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCWxvbmcgcmV0ID0gLUVJTlZBTDsKIAl2b2lkIF9fdXNlciAqcCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAogCWlmIChfU0lPQ19ESVIoY21kKSAhPSBfU0lPQ19OT05FICYmIF9TSU9DX0RJUihjbWQpICE9IDApIHsKQEAgLTM1Myw2ICszNTMsNyBAQAogCWlmIChjbWQgPT0gT1NTX0dFVFZFUlNJT04pCiAJCXJldHVybiBfX3B1dF91c2VyKFNPVU5EX1ZFUlNJT04sIChpbnQgX191c2VyICopcCk7CiAJCisJbG9ja19rZXJuZWwoKTsKIAlpZiAoX0lPQ19UWVBFKGNtZCkgPT0gJ00nICYmIG51bV9taXhlcnMgPiAwICYmICAgLyogTWl4ZXIgaW9jdGwgKi8KIAkgICAgKGRldiAmIDB4MGYpICE9IFNORF9ERVZfQ1RMKSB7ICAgICAgICAgICAgICAKIAkJZHR5cGUgPSBkZXYgJiAweDBmOwpAQCAtMzYwLDI0ICszNjEsMzEgQEAKIAkJY2FzZSBTTkRfREVWX0RTUDoKIAkJY2FzZSBTTkRfREVWX0RTUDE2OgogCQljYXNlIFNORF9ERVZfQVVESU86Ci0JCQlyZXR1cm4gc291bmRfbWl4ZXJfaW9jdGwoYXVkaW9fZGV2c1tkZXYgPj4gNF0tPm1peGVyX2RldiwKKwkJCXJldCA9IHNvdW5kX21peGVyX2lvY3RsKGF1ZGlvX2RldnNbZGV2ID4+IDRdLT5taXhlcl9kZXYsCiAJCQkJCQkgY21kLCBwKTsKLQkJCQorCQkJYnJlYWs7CQkJCiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gc291bmRfbWl4ZXJfaW9jdGwoZGV2ID4+IDQsIGNtZCwgcCk7CisJCQlyZXQgPSBzb3VuZF9taXhlcl9pb2N0bChkZXYgPj4gNCwgY21kLCBwKTsKKwkJCWJyZWFrOwogCQl9CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIHJldDsKIAl9CisKIAlzd2l0Y2ggKGRldiAmIDB4MGYpIHsKIAljYXNlIFNORF9ERVZfQ1RMOgogCQlpZiAoY21kID09IFNPVU5EX01JWEVSX0dFVExFVkVMUykKLQkJCXJldHVybiBnZXRfbWl4ZXJfbGV2ZWxzKHApOwotCQlpZiAoY21kID09IFNPVU5EX01JWEVSX1NFVExFVkVMUykKLQkJCXJldHVybiBzZXRfbWl4ZXJfbGV2ZWxzKHApOwotCQlyZXR1cm4gc291bmRfbWl4ZXJfaW9jdGwoZGV2ID4+IDQsIGNtZCwgcCk7CisJCQlyZXQgPSBnZXRfbWl4ZXJfbGV2ZWxzKHApOworCQllbHNlIGlmIChjbWQgPT0gU09VTkRfTUlYRVJfU0VUTEVWRUxTKQorCQkJcmV0ID0gc2V0X21peGVyX2xldmVscyhwKTsKKwkJZWxzZQorCQkJcmV0ID0gc291bmRfbWl4ZXJfaW9jdGwoZGV2ID4+IDQsIGNtZCwgcCk7CisJCWJyZWFrOwogCiAJY2FzZSBTTkRfREVWX1NFUToKIAljYXNlIFNORF9ERVZfU0VRMjoKLQkJcmV0dXJuIHNlcXVlbmNlcl9pb2N0bChkZXYsIGZpbGUsIGNtZCwgcCk7CisJCXJldCA9IHNlcXVlbmNlcl9pb2N0bChkZXYsIGZpbGUsIGNtZCwgcCk7CisJCWJyZWFrOwogCiAJY2FzZSBTTkRfREVWX0RTUDoKIAljYXNlIFNORF9ERVZfRFNQMTY6CkBAIC0zOTAsNyArMzk4LDggQEAKIAkJYnJlYWs7CiAKIAl9Ci0JcmV0dXJuIC1FSU5WQUw7CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc291bmRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpCkBAIC00OTAsNyArNDk5LDcgQEAKIAkucmVhZAkJPSBzb3VuZF9yZWFkLAogCS53cml0ZQkJPSBzb3VuZF93cml0ZSwKIAkucG9sbAkJPSBzb3VuZF9wb2xsLAotCS5pb2N0bAkJPSBzb3VuZF9pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwJPSBzb3VuZF9pb2N0bCwKIAkubW1hcAkJPSBzb3VuZF9tbWFwLAogCS5vcGVuCQk9IHNvdW5kX29wZW4sCiAJLnJlbGVhc2UJPSBzb3VuZF9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL0tjb25maWcgYi9zb3VuZC9wY2kvS2NvbmZpZwppbmRleCAzNTE2NTRjLi4xMjk4YzY4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvS2NvbmZpZworKysgYi9zb3VuZC9wY2kvS2NvbmZpZwpAQCAtNzg5LDYgKzc4OSw3IEBACiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gdGhlCiAJICBBc3VzIEFWMTAwL0FWMjAwIGNoaXBzLCBpLmUuLCBYb25hciBEMSwgRFgsIEQyLCBEMlgsCiAJICBFc3NlbmNlIFNUIChEZWx1eGUpLCBhbmQgRXNzZW5jZSBTVFguCisJICBTdXBwb3J0IGZvciB0aGUgRFMgaXMgZXhwZXJpbWVudGFsLgogCSAgU3VwcG9ydCBmb3IgdGhlIEhEQVYxLjMgKERlbHV4ZSkgaXMgdmVyeSBleHBlcmltZW50YWwuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYwppbmRleCBkOTI2NmJhLi4xY2FmNWUzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMKKysrIGIvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jCkBAIC01NDQsMjUgKzU0NCwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBhdGNoX3dvbGZzb25fd205NzA1X3NwZWNpZmljKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpCi17Ci0JaW50IGVyciwgaTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTk3eHhfc25kX2FjOTdfY29udHJvbHMpOyBpKyspIHsKLQkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChhYzk3LT5idXMtPmNhcmQsIHNuZF9hYzk3X2NuZXcoJndtOTd4eF9zbmRfYWM5N19jb250cm9sc1tpXSwgYWM5NykpKSA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlzbmRfYWM5N193cml0ZV9jYWNoZShhYzk3LCAgMHg3MiwgMHgwODA4KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzbmRfYWM5N19idWlsZF9vcHMgcGF0Y2hfd29sZnNvbl93bTk3MDVfb3BzID0gewotCS5idWlsZF9zcGVjaWZpYyA9IHBhdGNoX3dvbGZzb25fd205NzA1X3NwZWNpZmljLAotfTsKLQogc3RhdGljIGludCBwYXRjaF93b2xmc29uMDUoc3RydWN0IHNuZF9hYzk3ICogYWM5NykKIHsKIAkvKiBXTTk3MDUsIFdNOTcxMCAqLwotCWFjOTctPmJ1aWxkX29wcyA9ICZwYXRjaF93b2xmc29uX3dtOTcwNV9vcHM7CisJYWM5Ny0+YnVpbGRfb3BzID0gJnBhdGNoX3dvbGZzb25fd205NzAzX29wczsKICNpZmRlZiBDT05GSUdfVE9VQ0hTQ1JFRU5fV005NzA1CiAJLyogV005NzA1IHRvdWNoc2NyZWVuIHVzZXMgQVVYIGFuZCBWSURFTyBmb3IgdG91Y2ggKi8KIAlhYzk3LT5mbGFncyB8PSBBQzk3X0hBU19OT19WSURFTyB8IEFDOTdfSEFTX05PX0FVWDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hZDE4ODkuYyBiL3NvdW5kL3BjaS9hZDE4ODkuYwppbmRleCA4ZjUwOThmLi40MzgyZDBmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWQxODg5LmMKKysrIGIvc291bmQvcGNpL2FkMTg4OS5jCkBAIC0xMDQ4LDcgKzEwNDgsNyBAQAogCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2FkMTg4OV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfYWQxODg5X2lkcykgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU5BTE9HX0RFVklDRVMsIFBDSV9ERVZJQ0VfSURfQUQxODg5SlMpIH0sCiAJeyAwLCB9LAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwppbmRleCBhYWY0ZGE2Li41YzZlMzIyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKKysrIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCkBAIC0yNzUsNyArMjc1LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9hbGlfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2FsaV9pZHMpID0gewogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTU0NTEpLCAwLCAwLCAwfSwKIAl7MCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHMzMDAuYyBiL3NvdW5kL3BjaS9hbHMzMDAuYwppbmRleCAzYWEzNWFmLi5kNzY1M2NiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxzMzAwLmMKKysrIGIvc291bmQvcGNpL2FsczMwMC5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAlpbnQgYmxvY2tfY291bnRlcl9yZWdpc3RlcjsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYWxzMzAwX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9hbHMzMDBfaWRzKSA9IHsKIAl7IDB4NDAwNSwgMHgwMzAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBERVZJQ0VfQUxTMzAwIH0sCiAJeyAweDQwMDUsIDB4MDMwOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgREVWSUNFX0FMUzMwMF9QTFVTIH0sCiAJeyAwLCB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWxzNDAwMC5jIGIvc291bmQvcGNpL2FsczQwMDAuYwppbmRleCAzZGJhY2RlLi5kNzVjZjdiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxzNDAwMC5jCisrKyBiL3NvdW5kL3BjaS9hbHM0MDAwLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2FsczQwMDBfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2FsczQwMDBfaWRzKSA9IHsKIAl7IDB4NDAwNSwgMHg0MDAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LCAgIC8qIEFMUzQwMDAgKi8KIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwLmMgYi9zb3VuZC9wY2kvYXRpaXhwLmMKaW5kZXggNDJiNGZiYi4uNDlkNTcyYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cC5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHAuYwpAQCAtMjg2LDcgKzI4Niw3IEBACiAKIC8qCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYXRpaXhwX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9hdGlpeHBfaWRzKSA9IHsKIAl7IFBDSV9WREVWSUNFKEFUSSwgMHg0MzQxKSwgMCB9LCAvKiBTQjIwMCAqLwogCXsgUENJX1ZERVZJQ0UoQVRJLCAweDQzNjEpLCAwIH0sIC8qIFNCMzAwICovCiAJeyBQQ0lfVkRFVklDRShBVEksIDB4NDM3MCksIDAgfSwgLyogU0I0MDAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYyBiL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYwppbmRleCBlN2UxNDdiLi45MWQ3MDM2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKKysrIGIvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCkBAIC0yNjEsNyArMjYxLDcgQEAKIAogLyoKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9hdGlpeHBfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2F0aWl4cF9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoQVRJLCAweDQzNGQpLCAwIH0sIC8qIFNCMjAwICovCiAJeyBQQ0lfVkRFVklDRShBVEksIDB4NDM3OCksIDAgfSwgLyogU0I0MDAgKi8KIAl7IDAsIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODEwLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODgxMC5jCmluZGV4IGMwZThjNmIuLmFhNTFjYzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODEwLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4MTAuYwpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJhdTg4MTAuaCIKICNpbmNsdWRlICJhdTg4eDAuaCIKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfdm9ydGV4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF92b3J0ZXhfaWRzKSA9IHsKIAl7UENJX1ZERVZJQ0UoQVVSRUFMLCBQQ0lfREVWSUNFX0lEX0FVUkVBTF9BRFZBTlRBR0UpLCAxLH0sCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODIwLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODgyMC5jCmluZGV4IGE2NTI3MzMuLjJmMzIxZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODIwLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4MjAuYwpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJhdTg4MjAuaCIKICNpbmNsdWRlICJhdTg4eDAuaCIKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfdm9ydGV4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF92b3J0ZXhfaWRzKSA9IHsKIAl7UENJX1ZERVZJQ0UoQVVSRUFMLCBQQ0lfREVWSUNFX0lEX0FVUkVBTF9WT1JURVhfMSksIDAsfSwKIAl7MCx9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4MzAuYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4ODMwLmMKaW5kZXggNmM3MDJhZC4uMjc5Yjc4ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4MzAuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODgzMC5jCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgImF1ODgzMC5oIgogI2luY2x1ZGUgImF1ODh4MC5oIgotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92b3J0ZXhfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3ZvcnRleF9pZHMpID0gewogCXtQQ0lfVkRFVklDRShBVVJFQUwsIFBDSV9ERVZJQ0VfSURfQVVSRUFMX1ZPUlRFWF8yKSwgMCx9LAogCXswLH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMgYi9zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMKaW5kZXggNGQzNGJiMC4uNjc5MjFmOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jCisrKyBiL3NvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIEF1ZGlvd2VyazIgc291bmRjYXJkLiIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2F3Ml9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfYXcyX2lkcykgPSB7CiAJe1BDSV9WRU5ET1JfSURfU0FBNzE0NiwgUENJX0RFVklDRV9JRF9TQUE3MTQ2LCAwLCAwLAogCSAwLCAwLCAwfSwKIAl7MH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9henQzMzI4LmMgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCmluZGV4IDY5ODY3YWMuLjQ2NzllZDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9henQzMzI4LmMKKysrIGIvc291bmQvcGNpL2F6dDMzMjguYwpAQCAtMzUwLDcgKzM1MCw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYXpmMzMyOF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfYXpmMzMyOF9pZHMpID0gewogCXsgMHgxMjJELCAweDUwREMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgICAvKiBQQ0kxNjgvMzMyOCAqLwogCXsgMHgxMjJELCAweDgwREEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgICAvKiAzMzI4ICovCiAJeyAwLCB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYnQ4N3guYyBiL3NvdW5kL3BjaS9idDg3eC5jCmluZGV4IDRlMmI5MjUuLjM3ZTFiNWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9idDg3eC5jCisrKyBiL3NvdW5kL3BjaS9idDg3eC5jCkBAIC03OTUsNyArNzk1LDcgQEAKIAkgIC5kcml2ZXJfZGF0YSA9IFNORF9CVDg3WF9CT0FSRF8gIyMgaWQgfQogLyogZHJpdmVyX2RhdGEgaXMgdGhlIGNhcmQgaWQgZm9yIHRoYXQgZGV2aWNlICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYnQ4N3hfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2J0ODd4X2lkcykgPSB7CiAJLyogSGF1cHBhdWdlIFdpblRWIHNlcmllcyAqLwogCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIDB4MDA3MCwgMHgxM2ViLCBHRU5FUklDKSwKIAkvKiBIYXVwcGF1Z2UgV2luVFYgc2VyaWVzICovCkBAIC05NjQsNyArOTY0LDcgQEAKIAogLyogZGVmYXVsdCBlbnRyaWVzIGZvciBhbGwgQnQ4N3ggY2FyZHMgLSBpdCdzIG5vdCBleHBvcnRlZCAqLwogLyogZHJpdmVyX2RhdGEgaXMgc2V0IHRvIDAgdG8gY2FsbCBkZXRlY3Rpb24gKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfYnQ4N3hfZGVmYXVsdF9pZHNbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9idDg3eF9kZWZhdWx0X2lkcykgPSB7CiAJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgVU5LTk9XTiksCiAJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgVU5LTk9XTiksCiAJeyB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKaW5kZXggMTVlNDEzOC4uMGEzZDNkNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwpAQCAtMTg3NSw3ICsxODc1LDcgQEAKICNlbmRpZgogCiAvLyBQQ0kgSURzCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2NhMDEwNl9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfY2EwMTA2X2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShDUkVBVElWRSwgMHgwMDA3KSwgMCB9LAkvKiBBdWRpZ3kgTFMgb3IgTGl2ZSAyNGJpdCAqLwogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jbWlwY2kuYyBiL3NvdW5kL3BjaS9jbWlwY2kuYwppbmRleCBhMzEyYmFlLi4xZGVkNjRlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY21pcGNpLmMKKysrIGIvc291bmQvcGNpL2NtaXBjaS5jCkBAIC0yNzk2LDcgKzI3OTYsNyBAQAogI2VuZGlmCiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9jbWlwY2lfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2NtaXBjaV9pZHMpID0gewogCXtQQ0lfVkRFVklDRShDTUVESUEsIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODMzOEEpLCAwfSwKIAl7UENJX1ZERVZJQ0UoQ01FRElBLCBQQ0lfREVWSUNFX0lEX0NNRURJQV9DTTgzMzhCKSwgMH0sCiAJe1BDSV9WREVWSUNFKENNRURJQSwgUENJX0RFVklDRV9JRF9DTUVESUFfQ004NzM4KSwgMH0sCkBAIC0zMDE4LDcgKzMwMTgsNyBAQAogCWludCBpbnRlZ3JhdGVkX21pZGkgPSAwOwogCWNoYXIgbW9kZWxzdHJbMTZdOwogCWludCBwY21faW5kZXgsIHBjbV9zcGRpZl9pbmRleDsKLQlzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaW50ZWxfODI0Mzd2eFtdID0geworCXN0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShpbnRlbF84MjQzN3Z4KSA9IHsKIAkJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0MzdWWCkgfSwKIAkJeyB9LAogCX07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0MjgxLmMgYi9zb3VuZC9wY2kvY3M0MjgxLmMKaW5kZXggZTJlMDM1OS4uOWVkYzY1MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDI4MS5jCisrKyBiL3NvdW5kL3BjaS9jczQyODEuYwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzbmRfY3M0MjgxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2NzNDI4MV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfY3M0MjgxX2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShDSVJSVVMsIDB4NjAwNSksIDAsIH0sCS8qIENTNDI4MSAqLwogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCmluZGV4IDAzM2FlYzQuLjc2N2ZhN2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKKysrIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYwpAQCAtNjQsNyArNjQsNyBAQAogbW9kdWxlX3BhcmFtX2FycmF5KG1tYXBfdmFsaWQsIGJvb2wsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhtbWFwX3ZhbGlkLCAiU3VwcG9ydCBPU1MgbW1hcC4iKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9jczQ2eHhfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2NzNDZ4eF9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoQ0lSUlVTLCAweDYwMDEpLCAwLCB9LCAgIC8qIENTNDI4MCAqLwogCXsgUENJX1ZERVZJQ0UoQ0lSUlVTLCAweDYwMDMpLCAwLCB9LCAgIC8qIENTNDYxMiAqLwogCXsgUENJX1ZERVZJQ0UoQ0lSUlVTLCAweDYwMDQpLCAwLCB9LCAgIC8qIENTNDYxNSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwppbmRleCAxYmU5NmVhLi4zZjk5YTVlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwpAQCAtMjIzOCwxMSArMjIzOCwxMSBAQAogCiAJLyogc2V0IHRoZSBkZXNpcmVkIENPREVDIG1vZGUgKi8KIAlpZiAoYWM5Ny0+bnVtID09IENTNDZYWF9QUklNQVJZX0NPREVDX0lOREVYKSB7Ci0JCXNuZF9wcmludGRkKCJjczQ2eHg6IENPRE9FQzEgbW9kZSAlMDR4XG4iLDB4MCk7Ci0JCXNuZF9jczQ2eHhfYWM5N193cml0ZShhYzk3LEFDOTdfQ1NSX0FDTU9ERSwweDApOworCQlzbmRfcHJpbnRkZCgiY3M0Nnh4OiBDT0RFQzEgbW9kZSAlMDR4XG4iLCAweDApOworCQlzbmRfY3M0Nnh4X2FjOTdfd3JpdGUoYWM5NywgQUM5N19DU1JfQUNNT0RFLCAweDApOwogCX0gZWxzZSBpZiAoYWM5Ny0+bnVtID09IENTNDZYWF9TRUNPTkRBUllfQ09ERUNfSU5ERVgpIHsKLQkJc25kX3ByaW50ZGQoImNzNDZ4eDogQ09ET0VDMiBtb2RlICUwNHhcbiIsMHgzKTsKLQkJc25kX2NzNDZ4eF9hYzk3X3dyaXRlKGFjOTcsQUM5N19DU1JfQUNNT0RFLDB4Myk7CisJCXNuZF9wcmludGRkKCJjczQ2eHg6IENPREVDMiBtb2RlICUwNHhcbiIsIDB4Myk7CisJCXNuZF9jczQ2eHhfYWM5N193cml0ZShhYzk3LCBBQzk3X0NTUl9BQ01PREUsIDB4Myk7CiAJfSBlbHNlIHsKIAkJc25kX0JVRygpOyAvKiBzaG91bGQgbmV2ZXIgaGFwcGVuIC4uLiAqLwogCX0KQEAgLTIyNjYsNyArMjI2Niw3IEBACiAJCQlyZXR1cm47CiAKIAkJLyogdGVzdCBpZiB3ZSBjYW4gd3JpdGUgdG8gdGhlIHJlY29yZCBnYWluIHZvbHVtZSByZWdpc3RlciAqLwotCQlzbmRfYWM5N193cml0ZV9jYWNoZShhYzk3LCBBQzk3X1JFQ19HQUlOLCAweDhhMDUpOworCQlzbmRfYWM5N193cml0ZShhYzk3LCBBQzk3X1JFQ19HQUlOLCAweDhhMDUpOwogCQlpZiAoKGVyciA9IHNuZF9hYzk3X3JlYWQoYWM5NywgQUM5N19SRUNfR0FJTikpID09IDB4OGEwNSkKIAkJCXJldHVybjsKIApAQCAtMzU5Nyw3ICszNTk3LDcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2F2ZWRfcmVnc1tdID0gewogCUJBMF9BQ09TViwKLQlCQTBfQVNFUl9GQUREUiwKKwkvKkJBMF9BU0VSX0ZBRERSLCovCiAJQkEwX0FTRVJfTUFTVEVSLAogCUJBMV9QVk9MLAogCUJBMV9DVk9MLApAQCAtMzY0NCw2ICszNjQ0LDcgQEAKICNpZmRlZiBDT05GSUdfU05EX0NTNDZYWF9ORVdfRFNQCiAJaW50IGk7CiAjZW5kaWYKKwl1bnNpZ25lZCBpbnQgdG1wOwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKQEAgLTM2ODUsNiArMzY4NiwxNSBAQAogCXNuZF9hYzk3X3Jlc3VtZShjaGlwLT5hYzk3W0NTNDZYWF9QUklNQVJZX0NPREVDX0lOREVYXSk7CiAJc25kX2FjOTdfcmVzdW1lKGNoaXAtPmFjOTdbQ1M0NlhYX1NFQ09OREFSWV9DT0RFQ19JTkRFWF0pOwogCisJLyoKKyAgICAgICAgICogIFN0b3AgY2FwdHVyZSBETUEuCisJICovCisJdG1wID0gc25kX2NzNDZ4eF9wZWVrKGNoaXAsIEJBMV9DQ1RMKTsKKwljaGlwLT5jYXB0LmN0bCA9IHRtcCAmIDB4MDAwMGZmZmY7CisJc25kX2NzNDZ4eF9wb2tlKGNoaXAsIEJBMV9DQ1RMLCB0bXAgJiAweGZmZmYwMDAwKTsKKworCW1kZWxheSg1KTsKKwogCS8qIHJlc2V0IHBsYXliYWNrL2NhcHR1cmUgKi8KIAlzbmRfY3M0Nnh4X3NldF9wbGF5X3NhbXBsZV9yYXRlKGNoaXAsIDgwMDApOwogCXNuZF9jczQ2eHhfc2V0X2NhcHR1cmVfc2FtcGxlX3JhdGUoY2hpcCwgODAwMCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zLmMKaW5kZXggZjRmMGM4Zi4uM2U1Y2E4ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvcy5jCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvZHNwX3Nwb3MuYwpAQCAtMjk4LDYgKzI5OCw5IEBACiAJCWlmIChpbnMtPnNjYnNbaV0uZGVsZXRlZCkgY29udGludWU7CiAKIAkJY3M0Nnh4X2RzcF9wcm9jX2ZyZWVfc2NiX2Rlc2MgKCAoaW5zLT5zY2JzICsgaSkgKTsKKyNpZmRlZiBDT05GSUdfUE0KKwkJa2ZyZWUoaW5zLT5zY2JzW2ldLmRhdGEpOworI2VuZGlmCiAJfQogCiAJa2ZyZWUoaW5zLT5jb2RlLmRhdGEpOwpAQCAtOTc0LDEzICs5NzcsMTEgQEAKIAogCWluZGV4ID0gZmluZF9mcmVlX3NjYl9pbmRleCAoaW5zKTsKIAorCW1lbXNldCgmaW5zLT5zY2JzW2luZGV4XSwgMCwgc2l6ZW9mKGlucy0+c2Nic1tpbmRleF0pKTsKIAlzdHJjcHkoaW5zLT5zY2JzW2luZGV4XS5zY2JfbmFtZSwgbmFtZSk7CiAJaW5zLT5zY2JzW2luZGV4XS5hZGRyZXNzID0gZGVzdDsKIAlpbnMtPnNjYnNbaW5kZXhdLmluZGV4ID0gaW5kZXg7Ci0JaW5zLT5zY2JzW2luZGV4XS5wcm9jX2luZm8gPSBOVUxMOwogCWlucy0+c2Nic1tpbmRleF0ucmVmX2NvdW50ID0gMTsKLQlpbnMtPnNjYnNbaW5kZXhdLmRlbGV0ZWQgPSAwOwotCXNwaW5fbG9ja19pbml0KCZpbnMtPnNjYnNbaW5kZXhdLmxvY2spOwogCiAJZGVzYyA9IChpbnMtPnNjYnMgKyBpbmRleCk7CiAJaW5zLT5zY2JzW2luZGV4XS5zY2Jfc3ltYm9sID0gYWRkX3N5bWJvbCAoY2hpcCwgbmFtZSwgZGVzdCwgU1lNQk9MX1BBUkFNRVRFUik7CkBAIC0xMDIyLDE3ICsxMDIzLDI5IEBACiAJcmV0dXJuIGRlc2M7CiB9CiAKKyNkZWZpbmUgU0NCX0JZVEVTCSgweDEwICogNCkKKwogc3RydWN0IGRzcF9zY2JfZGVzY3JpcHRvciAqCiBjczQ2eHhfZHNwX2NyZWF0ZV9zY2IgKHN0cnVjdCBzbmRfY3M0Nnh4ICpjaGlwLCBjaGFyICogbmFtZSwgdTMyICogc2NiX2RhdGEsIHUzMiBkZXN0KQogewogCXN0cnVjdCBkc3Bfc2NiX2Rlc2NyaXB0b3IgKiBkZXNjOwogCisjaWZkZWYgQ09ORklHX1BNCisJLyogY29weSB0aGUgZGF0YSBmb3IgcmVzdW1lICovCisJc2NiX2RhdGEgPSBrbWVtZHVwKHNjYl9kYXRhLCBTQ0JfQllURVMsIEdGUF9LRVJORUwpOworCWlmICghc2NiX2RhdGEpCisJCXJldHVybiBOVUxMOworI2VuZGlmCisKIAlkZXNjID0gX21hcF9zY2IgKGNoaXAsbmFtZSxkZXN0KTsKIAlpZiAoZGVzYykgewogCQlkZXNjLT5kYXRhID0gc2NiX2RhdGE7CiAJCV9kc3BfY3JlYXRlX3NjYihjaGlwLHNjYl9kYXRhLGRlc3QpOwogCX0gZWxzZSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImRzcF9zcG9zOiBmYWlsZWQgdG8gbWFwIFNDQlxuIik7CisjaWZkZWYgQ09ORklHX1BNCisJCWtmcmVlKHNjYl9kYXRhKTsKKyNlbmRpZgogCX0KIAogCXJldHVybiBkZXNjOwpAQCAtMTk4OCw3ICsyMDAxLDI4IEBACiAJCQljb250aW51ZTsKIAkJX2RzcF9jcmVhdGVfc2NiKGNoaXAsIHMtPmRhdGEsIHMtPmFkZHJlc3MpOwogCX0KLQorCWZvciAoaSA9IDA7IGkgPCBpbnMtPm5zY2I7IGkrKykgeworCQlzdHJ1Y3QgZHNwX3NjYl9kZXNjcmlwdG9yICpzID0gJmlucy0+c2Nic1tpXTsKKwkJaWYgKHMtPmRlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKHMtPnVwZGF0ZWQpCisJCQljczQ2eHhfZHNwX3Nwb3NfdXBkYXRlX3NjYihjaGlwLCBzKTsKKwkJaWYgKHMtPnZvbHVtZV9zZXQpCisJCQljczQ2eHhfZHNwX3NjYl9zZXRfdm9sdW1lKGNoaXAsIHMsCisJCQkJCQkgIHMtPnZvbHVtZVswXSwgcy0+dm9sdW1lWzFdKTsKKwl9CisJaWYgKGlucy0+c3BkaWZfc3RhdHVzX291dCAmIERTUF9TUERJRl9TVEFUVVNfSFdfRU5BQkxFRCkgeworCQljczQ2eHhfZHNwX2VuYWJsZV9zcGRpZl9odyhjaGlwKTsKKwkJc25kX2NzNDZ4eF9wb2tlKGNoaXAsIChpbnMtPnJlZl9zbm9vcF9zY2ItPmFkZHJlc3MgKyAyKSA8PCAyLAorCQkJCShPVVRQVVRfU05PT1BfQlVGRkVSICsgMHgxMCkgPDwgMHgxMCk7CisJCWlmIChpbnMtPnNwZGlmX3N0YXR1c19vdXQgJiBEU1BfU1BESUZfU1RBVFVTX1BMQVlCQUNLX09QRU4pCisJCQljczQ2eHhfcG9rZV92aWFfZHNwKGNoaXAsIFNQX1NQRE9VVF9DU1VWLAorCQkJCQkgICAgaW5zLT5zcGRpZl9jc3V2X3N0cmVhbSk7CisJfQorCWlmIChjaGlwLT5kc3Bfc3Bvc19pbnN0YW5jZS0+c3BkaWZfc3RhdHVzX2luKSB7CisJCWNzNDZ4eF9wb2tlX3ZpYV9kc3AoY2hpcCwgU1BfQVNFUl9DT1VOVERPV04sIDB4ODAwMDAwMDUpOworCQljczQ2eHhfcG9rZV92aWFfZHNwKGNoaXAsIFNQX1NQRElOX0NPTlRST0wsIDB4ODAwMDAzZmYpOworCX0KIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvcy5oIGIvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvcy5oCmluZGV4IGY5ZTE2OWQuLmNhNDdhODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQ2eHgvZHNwX3Nwb3MuaAorKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zLmgKQEAgLTIxMiw2ICsyMTIsNyBAQAogCQkJKHNjYi0+YWRkcmVzcyArIFNDQnN1Ykxpc3RQdHIpIDw8IDIsCiAJCQkoc2NiLT5zdWJfbGlzdF9wdHItPmFkZHJlc3MgPDwgMHgxMCkgfAogCQkJKHNjYi0+bmV4dF9zY2JfcHRyLT5hZGRyZXNzKSk7CQorCXNjYi0+dXBkYXRlZCA9IDE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjczQ2eHhfZHNwX3NjYl9zZXRfdm9sdW1lIChzdHJ1Y3Qgc25kX2NzNDZ4eCAqIGNoaXAsCkBAIC0yMjIsNiArMjIzLDkgQEAKIAogCXNuZF9jczQ2eHhfcG9rZShjaGlwLCAoc2NiLT5hZGRyZXNzICsgU0NCVm9sdW1lQ3RybCkgPDwgMiwgdmFsKTsKIAlzbmRfY3M0Nnh4X3Bva2UoY2hpcCwgKHNjYi0+YWRkcmVzcyArIFNDQlZvbHVtZUN0cmwgKyAxKSA8PCAyLCB2YWwpOworCXNjYi0+dm9sdW1lX3NldCA9IDE7CisJc2NiLT52b2x1bWVbMF0gPSBsZWZ0OworCXNjYi0+dm9sdW1lWzFdID0gcmlnaHQ7CiB9CiAjZW5kaWYgLyogX19EU1BfU1BPU19IX18gKi8KICNlbmRpZiAvKiBDT05GSUdfU05EX0NTNDZYWF9ORVdfRFNQICAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvc19zY2JfbGliLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zX3NjYl9saWIuYwppbmRleCBkZDdjNDFiLi4wMGIxNDhhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zX3NjYl9saWIuYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zX3NjYl9saWIuYwpAQCAtMTE1LDcgKzExNSw2IEBACiBzdGF0aWMgdm9pZCBfZHNwX3VubGlua19zY2IgKHN0cnVjdCBzbmRfY3M0Nnh4ICpjaGlwLCBzdHJ1Y3QgZHNwX3NjYl9kZXNjcmlwdG9yICogc2NiKQogewogCXN0cnVjdCBkc3Bfc3Bvc19pbnN0YW5jZSAqIGlucyA9IGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIHNjYi0+cGFyZW50X3NjYl9wdHIgKSB7CiAJCS8qIHVubGluayBwYXJlbnQgU0NCICovCkBAIC0xNTMsOCArMTUyLDYgQEAKIAkJCXNjYi0+bmV4dF9zY2JfcHRyID0gaW5zLT50aGVfbnVsbF9zY2I7CiAJCX0KIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsgICAgCi0KIAkJLyogdXBkYXRlIHBhcmVudCBmaXJzdCBlbnRyeSBpbiBEU1AgUkFNICovCiAJCWNzNDZ4eF9kc3Bfc3Bvc191cGRhdGVfc2NiKGNoaXAsc2NiLT5wYXJlbnRfc2NiX3B0cik7CiAKQEAgLTE2Miw3ICsxNTksNiBAQAogCQljczQ2eHhfZHNwX3Nwb3NfdXBkYXRlX3NjYihjaGlwLHNjYik7CiAKIAkJc2NiLT5wYXJlbnRfc2NiX3B0ciA9IE5VTEw7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJfQogfQogCkBAIC0xOTcsOSArMTkzLDkgQEAKIAkJZ290byBfZW5kOwogI2VuZGlmCiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2NiLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7ICAgIAogCV9kc3BfdW5saW5rX3NjYiAoY2hpcCxzY2IpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjYi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAKIAljczQ2eHhfZHNwX3Byb2NfZnJlZV9zY2JfZGVzYyhzY2IpOwogCWlmIChzbmRfQlVHX09OKCFzY2ItPnNjYl9zeW1ib2wpKQpAQCAtMjA3LDYgKzIwMywxMCBAQAogCXJlbW92ZV9zeW1ib2wgKGNoaXAsc2NiLT5zY2Jfc3ltYm9sKTsKIAogCWlucy0+c2Nic1tzY2ItPmluZGV4XS5kZWxldGVkID0gMTsKKyNpZmRlZiBDT05GSUdfUE0KKwlrZnJlZShpbnMtPnNjYnNbc2NiLT5pbmRleF0uZGF0YSk7CisJaW5zLT5zY2JzW3NjYi0+aW5kZXhdLmRhdGEgPSBOVUxMOworI2VuZGlmCiAKIAlpZiAoc2NiLT5pbmRleCA8IGlucy0+c2NiX2hpZ2hlc3RfZnJhZ19pbmRleCkKIAkJaW5zLT5zY2JfaGlnaGVzdF9mcmFnX2luZGV4ID0gc2NiLT5pbmRleDsKQEAgLTE1MDgsMjAgKzE1MDgsMTcgQEAKIAkJICAgICAgIGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlLT5ucGNtX2NoYW5uZWxzIDw9IDApKQogCQlyZXR1cm4gLUVJTzsKIAotCXNwaW5fbG9jaygmcGNtX2NoYW5uZWwtPnNyY19zY2ItPmxvY2spOwotCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJaWYgKHBjbV9jaGFubmVsLT51bmxpbmtlZCkgewotCQlzcGluX3VubG9jaygmcGNtX2NoYW5uZWwtPnNyY19zY2ItPmxvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlwY21fY2hhbm5lbC0+dW5saW5rZWQgPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAKIAlfZHNwX3VubGlua19zY2IgKGNoaXAscGNtX2NoYW5uZWwtPnBjbV9yZWFkZXJfc2NiKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCi0Jc3Bpbl91bmxvY2soJnBjbV9jaGFubmVsLT5zcmNfc2NiLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUzMywxMCArMTUzMCwxMCBAQAogCXN0cnVjdCBkc3Bfc2NiX2Rlc2NyaXB0b3IgKiBzcmNfc2NiID0gcGNtX2NoYW5uZWwtPnNyY19zY2I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmcGNtX2NoYW5uZWwtPnNyY19zY2ItPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHBjbV9jaGFubmVsLT51bmxpbmtlZCA9PSAwKSB7Ci0JCXNwaW5fdW5sb2NrKCZwY21fY2hhbm5lbC0+c3JjX3NjYi0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTU1Miw4ICsxNTQ5LDYgQEAKIAlzbmRfQlVHX09OKHBjbV9jaGFubmVsLT5wY21fcmVhZGVyX3NjYi0+cGFyZW50X3NjYl9wdHIpOwogCXBjbV9jaGFubmVsLT5wY21fcmVhZGVyX3NjYi0+cGFyZW50X3NjYl9wdHIgPSBwYXJlbnRfc2NiOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0KIAkvKiB1cGRhdGUgU0NCIGVudHJ5IGluIERTUCBSQU0gKi8KIAljczQ2eHhfZHNwX3Nwb3NfdXBkYXRlX3NjYihjaGlwLHBjbV9jaGFubmVsLT5wY21fcmVhZGVyX3NjYik7CiAKQEAgLTE1NjIsOCArMTU1Nyw2IEBACiAKIAlwY21fY2hhbm5lbC0+dW5saW5rZWQgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0KLQlzcGluX3VubG9jaygmcGNtX2NoYW5uZWwtPnNyY19zY2ItPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xNTk2LDEzICsxNTg5LDE3IEBACiAKIGludCBjczQ2eHhfc3JjX3VubGluayhzdHJ1Y3Qgc25kX2NzNDZ4eCAqY2hpcCwgc3RydWN0IGRzcF9zY2JfZGVzY3JpcHRvciAqIHNyYykKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJaWYgKHNuZF9CVUdfT04oIXNyYy0+cGFyZW50X3NjYl9wdHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIG11dGUgU0NCICovCiAJY3M0Nnh4X2RzcF9zY2Jfc2V0X3ZvbHVtZSAoY2hpcCxzcmMsMCwwKTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCV9kc3BfdW5saW5rX3NjYiAoY2hpcCxzcmMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzAuYyBiL3NvdW5kL3BjaS9jczU1MzAuYwppbmRleCBkYzQ2NDMyLi4yMDc0NzlhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M1NTMwLmMKKysrIGIvc291bmQvcGNpL2NzNTUzMC5jCkBAIC01OCw3ICs1OCw3IEBACiAJdW5zaWduZWQgbG9uZyBwY2lfYmFzZTsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfY3M1NTMwX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9jczU1MzBfaWRzKSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9DWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTMwX0FVRElPLCBQQ0lfQU5ZX0lELAogCQkJCQkJCVBDSV9BTllfSUQsIDAsIDB9LAogCXswLH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKaW5kZXggOTFlN2ZhZi4uYWZiODAzNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKKysrIGIvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMKQEAgLTY2LDcgKzY2LDcgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgIiBEUklWRVJfTkFNRSk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfY3M1NTM1YXVkaW9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2NzNTUzNWF1ZGlvX2lkcykgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlMsIFBDSV9ERVZJQ0VfSURfTlNfQ1M1NTM1X0FVRElPKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0FVRElPKSB9LAogCXt9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYyBiL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jCmluZGV4IDQ1OWMxZjYuLjQ4MGNiMWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jCisrKyBiL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jCkBAIC0xMjE0LDEwICsxMjE0LDExIEBACiAJcmV0dXJuIGN0X2F0Y19kZXN0cm95KGF0Yyk7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGF0Y19pZGVudGlmeV9jYXJkKHN0cnVjdCBjdF9hdGMgKmF0YykKK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0Y19pZGVudGlmeV9jYXJkKHN0cnVjdCBjdF9hdGMgKmF0YywgdW5zaWduZWQgaW50IHNzaWQpCiB7CiAJY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKnA7CiAJY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKmxpc3Q7CisJdTE2IHZlbmRvcl9pZCwgZGV2aWNlX2lkOwogCiAJc3dpdGNoIChhdGMtPmNoaXBfdHlwZSkgewogCWNhc2UgQVRDMjBLMToKQEAgLTEyMzEsMTMgKzEyMzIsMTkgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0JcCA9IHNuZF9wY2lfcXVpcmtfbG9va3VwKGF0Yy0+cGNpLCBsaXN0KTsKKwlpZiAoc3NpZCkgeworCQl2ZW5kb3JfaWQgPSBzc2lkID4+IDE2OworCQlkZXZpY2VfaWQgPSBzc2lkICYgMHhmZmZmOworCX0gZWxzZSB7CisJCXZlbmRvcl9pZCA9IGF0Yy0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yOworCQlkZXZpY2VfaWQgPSBhdGMtPnBjaS0+c3Vic3lzdGVtX2RldmljZTsKKwl9CisJcCA9IHNuZF9wY2lfcXVpcmtfbG9va3VwX2lkKHZlbmRvcl9pZCwgZGV2aWNlX2lkLCBsaXN0KTsKIAlpZiAocCkgewogCQlpZiAocC0+dmFsdWUgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImN0eGZpOiAiCiAJCQkgICAgICAgIkRldmljZSAlMDR4OiUwNHggaXMgYmxhY2stbGlzdGVkXG4iLAotCQkJICAgICAgIGF0Yy0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yLAotCQkJICAgICAgIGF0Yy0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlKTsKKwkJCSAgICAgICB2ZW5kb3JfaWQsIGRldmljZV9pZCk7CiAJCQlyZXR1cm4gLUVOT0VOVDsKIAkJfQogCQlhdGMtPm1vZGVsID0gcC0+dmFsdWU7CkBAIC0xMjUwLDggKzEyNTcsNyBAQAogCWF0Yy0+bW9kZWxfbmFtZSA9IGN0X3N1YnN5c19uYW1lW2F0Yy0+bW9kZWxdOwogCXNuZF9wcmludGQoImN0eGZpOiBjaGlwICVzIG1vZGVsICVzICglMDR4OiUwNHgpIGlzIGZvdW5kXG4iLAogCQkgICBhdGMtPmNoaXBfbmFtZSwgYXRjLT5tb2RlbF9uYW1lLAotCQkgICBhdGMtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvciwKLQkJICAgYXRjLT5wY2ktPnN1YnN5c3RlbV9kZXZpY2UpOworCQkgICB2ZW5kb3JfaWQsIGRldmljZV9pZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2MjUsNyArMTYzMSw4IEBACiAKIGludCBfX2RldmluaXQgY3RfYXRjX2NyZWF0ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBwY2lfZGV2ICpwY2ksCiAJCQkgICAgdW5zaWduZWQgaW50IHJzciwgdW5zaWduZWQgaW50IG1zciwKLQkJCSAgICBpbnQgY2hpcF90eXBlLCBzdHJ1Y3QgY3RfYXRjICoqcmF0YykKKwkJCSAgICBpbnQgY2hpcF90eXBlLCB1bnNpZ25lZCBpbnQgc3NpZCwKKwkJCSAgICBzdHJ1Y3QgY3RfYXRjICoqcmF0YykKIHsKIAlzdHJ1Y3QgY3RfYXRjICphdGM7CiAJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CkBAIC0xNjUxLDcgKzE2NTgsNyBAQAogCW11dGV4X2luaXQoJmF0Yy0+YXRjX211dGV4KTsKIAogCS8qIEZpbmQgY2FyZCBtb2RlbCAqLwotCWVyciA9IGF0Y19pZGVudGlmeV9jYXJkKGF0Yyk7CisJZXJyID0gYXRjX2lkZW50aWZ5X2NhcmQoYXRjLCBzc2lkKTsKIAlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImN0YXRjOiBDYXJkIG5vdCByZWNvZ25pc2VkXG4iKTsKIAkJZ290byBlcnJvcjE7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuaCBiL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5oCmluZGV4IDlmZDhhNTcuLjcxNjdjMDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5oCisrKyBiL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5oCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAogaW50IF9fZGV2aW5pdCBjdF9hdGNfY3JlYXRlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHBjaV9kZXYgKnBjaSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgcnNyLCB1bnNpZ25lZCBpbnQgbXNyLCBpbnQgY2hpcF90eXBlLAotCQkJICAgIHN0cnVjdCBjdF9hdGMgKipyYXRjKTsKKwkJCSAgICB1bnNpZ25lZCBpbnQgc3Vic3lzaWQsIHN0cnVjdCBjdF9hdGMgKipyYXRjKTsKIGludCBfX2RldmluaXQgY3RfYXRjX2NyZWF0ZV9hbHNhX2RldnMoc3RydWN0IGN0X2F0YyAqYXRjKTsKIAogI2VuZGlmIC8qIENUQVRDX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jdHhmaS94ZmkuYyBiL3NvdW5kL3BjaS9jdHhmaS94ZmkuYwppbmRleCA3NjU0MTc0Li5mNDJlN2UxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3R4ZmkveGZpLmMKKysrIGIvc291bmQvcGNpL2N0eGZpL3hmaS5jCkBAIC0zMiw2ICszMiw3IEBACiBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwogc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEVfUE5QOworc3RhdGljIHVuc2lnbmVkIGludCBzdWJzeXN0ZW1bU05EUlZfQ0FSRFNdOwogCiBtb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIENyZWF0aXZlIFgtRmkgZHJpdmVyIik7CkBAIC0zOSw4ICs0MCwxMCBAQAogTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgQ3JlYXRpdmUgWC1GaSBkcml2ZXIiKTsKIG1vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgQ3JlYXRpdmUgWC1GaSBkcml2ZXIiKTsKK21vZHVsZV9wYXJhbV9hcnJheShzdWJzeXN0ZW0sIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHN1YnN5c3RlbSwgIk92ZXJyaWRlIHN1YnN5c3RlbSBJRCBmb3IgQ3JlYXRpdmUgWC1GaSBkcml2ZXIiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGN0X3BjaV9kZXZfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY3RfcGNpX2Rldl9pZHMpID0gewogCS8qIG9ubHkgWC1GaSBpcyBzdXBwb3J0ZWQsIHNvLi4uICovCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ1JFQVRJVkUsIFBDSV9ERVZJQ0VfSURfQ1JFQVRJVkVfMjBLMSksCiAJICAuZHJpdmVyX2RhdGEgPSBBVEMyMEsxLApAQCAtODUsNyArODgsNyBAQAogCQltdWx0aXBsZSA9IDI7CiAJfQogCWVyciA9IGN0X2F0Y19jcmVhdGUoY2FyZCwgcGNpLCByZWZlcmVuY2VfcmF0ZSwgbXVsdGlwbGUsCi0JCQkgICAgcGNpX2lkLT5kcml2ZXJfZGF0YSwgJmF0Yyk7CisJCQkgICAgcGNpX2lkLT5kcml2ZXJfZGF0YSwgc3Vic3lzdGVtW2Rldl0sICZhdGMpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycm9yOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjAuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMC5jCmluZGV4IDhjNmRiM2EuLmE2NWJhZmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMC5jCkBAIC02Myw3ICs2Myw3IEBACiAJezAsICJkYXJsYTIwX2RzcC5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDE4MDEsIDB4RUNDMCwgMHgwMDEwLCAwLCAwLCAwfSwJLyogRFNQIDU2MzAxIERhcmxhMjAgcmV2LjAgKi8KIAl7MCx9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTIwX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTIwX2RzcC5jCmluZGV4IDI5MDQzMzAuLjIwYzdjYmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjBfZHNwLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0RBUkxBMjBfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfREFSTEEyMF9EU1A7CiAJY2hpcC0+c3BkaWZfc3RhdHVzID0gR0RfU1BESUZfU1RBVFVTX1VOREVGOwogCWNoaXAtPmNsb2NrX3N0YXRlID0gR0RfQ0xPQ0tfVU5ERUY7CiAJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCkBAIC01NywxNSArNTcsMTkgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogLyogVGhlIERhcmxhMjAgaGFzIG5vIGV4dGVybmFsIGNsb2NrIHNvdXJjZXMgKi8KIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0LmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjQuYwppbmRleCAwNGNiZjNlLi4wYTZjNTBiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjQuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjQuYwpAQCAtNjcsNyArNjcsNyBAQAogCXswLCAiZGFybGEyNF9kc3AuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgxODAxLCAweEVDQzAsIDB4MDA0MCwgMCwgMCwgMH0sCS8qIERTUCA1NjMwMSBEYXJsYTI0IHJldi4wICovCiAJezB4MTA1NywgMHgxODAxLCAweEVDQzAsIDB4MDA0MSwgMCwgMCwgMH0sCS8qIERTUCA1NjMwMSBEYXJsYTI0IHJldi4xICovCiAJezAsfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0X2RzcC5jCmluZGV4IDYwMjI4NzMuLjZkYTY2NjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyNF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjRfZHNwLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0RBUkxBMjRfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfREFSTEEyNF9EU1A7CiAJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCiAJICAgd29ya3MgT0sgKi8KIAljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CkBAIC01NiwxNSArNTYsMTkgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCiB7CiAJdTMyIGNsb2Nrc19mcm9tX2RzcCwgY2xvY2tfYml0czsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZy5jCmluZGV4IDQwMjJlNDMuLmY1MTQyNzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvM2cuYwpAQCAtODEsNyArODEsNyBAQAogCXswLCAiM2dfYXNpYy5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMTAwLCAwLCAwLCAwfSwJLyogRWNobyAzRyAqLwogCXswLH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZ19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCmluZGV4IDU3OTY3ZTUuLjNjZGMyZWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jCkBAIC02MSw3ICs2MSw3IEBACiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CiAJY2hpcC0+aGFzX21pZGkgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19FQ0hPM0dfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfRUNITzNHX0RTUDsKIAogCS8qIExvYWQgdGhlIERTUCBjb2RlIGFuZCB0aGUgQVNJQyBvbiB0aGUgUENJIGNhcmQgYW5kIGdldAogCXdoYXQgdHlwZSBvZiBleHRlcm5hbCBib3ggaXMgYXR0YWNoZWQgKi8KQEAgLTk3LDIwICs5Nyw2IEBACiAJY2hpcC0+ZGlnaXRhbF9tb2RlcyA9CUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfUkNBIHwKIAkJCQlFQ0hPQ0FQU19IQVNfRElHSVRBTF9NT0RFX1NQRElGX09QVElDQUwgfAogCQkJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfQURBVDsKLQljaGlwLT5kaWdpdGFsX21vZGUgPQlESUdJVEFMX01PREVfU1BESUZfUkNBOwotCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IEZBTFNFOwotCWNoaXAtPm5vbl9hdWRpb19zcGRpZiA9IEZBTFNFOwotCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwotCi0JaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gc2V0X2RpZ2l0YWxfbW9kZShjaGlwLCBESUdJVEFMX01PREVfU1BESUZfUkNBKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBzZXRfcGhhbnRvbV9wb3dlcihjaGlwLCAwKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKGNoaXAsIFRSVUUpOwogCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CkBAIC0xMTgsNiArMTA0LDE4IEBACiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWNoaXAtPmRpZ2l0YWxfbW9kZSA9IERJR0lUQUxfTU9ERV9TUERJRl9SQ0E7CisJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gRkFMU0U7CisJY2hpcC0+bm9uX2F1ZGlvX3NwZGlmID0gRkFMU0U7CisJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CisJY2hpcC0+cGhhbnRvbV9wb3dlciA9IEZBTFNFOworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIGludCBzZXRfcGhhbnRvbV9wb3dlcihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIG9uKQogewogCXUzMiBjb250cm9sX3JlZyA9IGxlMzJfdG9fY3B1KGNoaXAtPmNvbW1fcGFnZS0+Y29udHJvbF9yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYwppbmRleCAxMzA1ZjdjLi44ZGFiODJkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKQEAgLTM2LDIyICszNiw2MSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBjaGFubmVsc19saXN0WzEwXSA9IHsxLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0LCAxNiwgOTk5OTk5fTsKIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYl9zY2FsZV9vdXRwdXRfZ2FpbiwgLTEyODAwLCAxMDAsIDEpOwogCisKKwogc3RhdGljIGludCBnZXRfZmlybXdhcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZndfZW50cnksCi0JCQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZybSwgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKKwkJCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNvbnN0IHNob3J0IGZ3X2luZGV4KQogewogCWludCBlcnI7CiAJY2hhciBuYW1lWzMwXTsKLQlERV9BQ1QoKCJmaXJtd2FyZSByZXF1ZXN0ZWQ6ICVzXG4iLCBmcm0tPmRhdGEpKTsKLQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJlYS8lcyIsIGZybS0+ZGF0YSk7Ci0JaWYgKChlcnIgPSByZXF1ZXN0X2Zpcm13YXJlKGZ3X2VudHJ5LCBuYW1lLCBwY2lfZGV2aWNlKGNoaXApKSkgPCAwKQorCisjaWZkZWYgQ09ORklHX1BNCisJaWYgKGNoaXAtPmZ3X2NhY2hlW2Z3X2luZGV4XSkgeworCQlERV9BQ1QoKCJmaXJtd2FyZSByZXF1ZXN0ZWQ6ICVzIGlzIGNhY2hlZFxuIiwgY2FyZF9md1tmd19pbmRleF0uZGF0YSkpOworCQkqZndfZW50cnkgPSBjaGlwLT5md19jYWNoZVtmd19pbmRleF07CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCisJREVfQUNUKCgiZmlybXdhcmUgcmVxdWVzdGVkOiAlc1xuIiwgY2FyZF9md1tmd19pbmRleF0uZGF0YSkpOworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImVhLyVzIiwgY2FyZF9md1tmd19pbmRleF0uZGF0YSk7CisJZXJyID0gcmVxdWVzdF9maXJtd2FyZShmd19lbnRyeSwgbmFtZSwgcGNpX2RldmljZShjaGlwKSk7CisJaWYgKGVyciA8IDApCiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImdldF9maXJtd2FyZSgpOiBGaXJtd2FyZSBub3QgYXZhaWxhYmxlICglZClcbiIsIGVycik7CisjaWZkZWYgQ09ORklHX1BNCisJZWxzZQorCQljaGlwLT5md19jYWNoZVtmd19pbmRleF0gPSAqZndfZW50cnk7CisjZW5kaWYKIAlyZXR1cm4gZXJyOwogfQogCisKKwogc3RhdGljIHZvaWQgZnJlZV9maXJtd2FyZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5KQogeworI2lmZGVmIENPTkZJR19QTQorCURFX0FDVCgoImZpcm13YXJlIG5vdCByZWxlYXNlZCAoa2VwdCBpbiBjYWNoZSlcbiIpKTsKKyNlbHNlCiAJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CiAJREVfQUNUKCgiZmlybXdhcmUgcmVsZWFzZWRcbiIpKTsKKyNlbmRpZgorfQorCisKKworc3RhdGljIHZvaWQgZnJlZV9maXJtd2FyZV9jYWNoZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworI2lmZGVmIENPTkZJR19QTQorCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDggOyBpKyspCisJCWlmIChjaGlwLT5md19jYWNoZVtpXSkgeworCQkJcmVsZWFzZV9maXJtd2FyZShjaGlwLT5md19jYWNoZVtpXSk7CisJCQlERV9BQ1QoKCJyZWxlYXNlX2Zpcm13YXJlKCVkKVxuIiwgaSkpOworCQl9CisKKwlERV9BQ1QoKCJmaXJtd2FyZV9jYWNoZSByZWxlYXNlZFxuIikpOworI2VuZGlmCiB9CiAKIApAQCAtNzE0LDYgKzc1Myw4IEBACiAKIAlzcGluX2xvY2soJmNoaXAtPmxvY2spOwogCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJCURFX0FDVCgoInBjbV90cmlnZ2VyIHJlc3VtZVxuIikpOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgogCQlERV9BQ1QoKCJwY21fdHJpZ2dlciBzdGFydFxuIikpOwpAQCAtNzM3LDYgKzc3OCw4IEBACiAJCWVyciA9IHN0YXJ0X3RyYW5zcG9ydChjaGlwLCBjaGFubmVsbWFzaywKIAkJCQkgICAgICBjaGlwLT5waXBlX2N5Y2xpY19tYXNrKTsKIAkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCQlERV9BQ1QoKCJwY21fdHJpZ2dlciBzdXNwZW5kXG4iKSk7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgogCQlERV9BQ1QoKCJwY21fdHJpZ2dlciBzdG9wXG4iKSk7CiAJCWZvciAoaSA9IDA7IGkgPCBEU1BfTUFYUElQRVM7IGkrKykgewpAQCAtMTgyMSw3ICsxODY0LDkgQEAKIAkvKiBUaGUgaGFyZHdhcmUgZG9lc24ndCB0ZWxsIHVzIHdoaWNoIHN1YnN0cmVhbSBjYXVzZWQgdGhlIGlycSwKIAl0aHVzIHdlIGhhdmUgdG8gY2hlY2sgYWxsIHJ1bm5pbmcgc3Vic3RyZWFtcy4gKi8KIAlmb3IgKHNzID0gMDsgc3MgPCBEU1BfTUFYUElQRVM7IHNzKyspIHsKLQkJaWYgKChzdWJzdHJlYW0gPSBjaGlwLT5zdWJzdHJlYW1bc3NdKSkgeworCQlzdWJzdHJlYW0gPSBjaGlwLT5zdWJzdHJlYW1bc3NdOworCQlpZiAoc3Vic3RyZWFtICYmICgoc3RydWN0IGF1ZGlvcGlwZSAqKXN1YnN0cmVhbS0+cnVudGltZS0+CisJCQkJcHJpdmF0ZV9kYXRhKS0+c3RhdGUgPT0gUElQRV9TVEFURV9TVEFSVEVEKSB7CiAJCQlwZXJpb2QgPSBwY21fcG9pbnRlcihzdWJzdHJlYW0pIC8KIAkJCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPnBlcmlvZF9zaXplOwogCQkJaWYgKHBlcmlvZCAhPSBjaGlwLT5sYXN0X3BlcmlvZFtzc10pIHsKQEAgLTE4NzQsNiArMTkxOSw3IEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CiAKIAkvKiByZWxlYXNlIGNoaXAgZGF0YSAqLworCWZyZWVfZmlybXdhcmVfY2FjaGUoY2hpcCk7CiAJa2ZyZWUoY2hpcCk7CiAJREVfSU5JVCgoIkNoaXAgZnJlZWQuXG4iKSk7CiAJcmV0dXJuIDA7CkBAIC0xOTExLDE4ICsxOTU3LDI3IEBACiAJCXJldHVybiBlcnI7CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAotCS8qIGFsbG9jYXRlIGEgY2hpcC1zcGVjaWZpYyBkYXRhICovCi0JY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjaGlwKSB7Ci0JCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkvKiBBbGxvY2F0ZSBjaGlwIGlmIG5lZWRlZCAqLworCWlmICghKnJjaGlwKSB7CisJCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworCQlpZiAoIWNoaXApIHsKKwkJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJREVfSU5JVCgoImNoaXA9JXBcbiIsIGNoaXApKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPmxvY2spOworCQljaGlwLT5jYXJkID0gY2FyZDsKKwkJY2hpcC0+cGNpID0gcGNpOworCQljaGlwLT5pcnEgPSAtMTsKKwkJYXRvbWljX3NldCgmY2hpcC0+b3BlbmNvdW50LCAwKTsKKwkJbXV0ZXhfaW5pdCgmY2hpcC0+bW9kZV9tdXRleCk7CisJCWNoaXAtPmNhbl9zZXRfcmF0ZSA9IDE7CisJfSBlbHNlIHsKKwkJLyogSWYgdGhpcyB3YXMgY2FsbGVkIGZyb20gdGhlIHJlc3VtZSBmdW5jdGlvbiwgY2hpcCBpcworCQkgKiBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgaXQgY29udGFpbnMgY3VycmVudCBjYXJkIHNldHRpbmdzLgorCQkgKi8KKwkJY2hpcCA9ICpyY2hpcDsKIAl9Ci0JREVfSU5JVCgoImNoaXA9JXBcbiIsIGNoaXApKTsKLQotCXNwaW5fbG9ja19pbml0KCZjaGlwLT5sb2NrKTsKLQljaGlwLT5jYXJkID0gY2FyZDsKLQljaGlwLT5wY2kgPSBwY2k7Ci0JY2hpcC0+aXJxID0gLTE7CiAKIAkvKiBQQ0kgcmVzb3VyY2UgYWxsb2NhdGlvbiAqLwogCWNoaXAtPmRzcF9yZWdpc3RlcnNfcGh5cyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOwpAQCAtMTk2Miw3ICsyMDE3LDkgQEAKIAljaGlwLT5jb21tX3BhZ2UgPSAoc3RydWN0IGNvbW1fcGFnZSAqKWNoaXAtPmNvbW1wYWdlX2RtYV9idWYuYXJlYTsKIAogCWVyciA9IGluaXRfaHcoY2hpcCwgY2hpcC0+cGNpLT5kZXZpY2UsIGNoaXAtPnBjaS0+c3Vic3lzdGVtX2RldmljZSk7Ci0JaWYgKGVycikgeworCWlmIChlcnIgPj0gMCkKKwkJZXJyID0gc2V0X21peGVyX2RlZmF1bHRzKGNoaXApOworCWlmIChlcnIgPCAwKSB7CiAJCURFX0lOSVQoKCJpbml0X2h3IGVycj0lZFxuIiwgZXJyKSk7CiAJCXNuZF9lY2hvX2ZyZWUoY2hpcCk7CiAJCXJldHVybiBlcnI7CkBAIC0xOTczLDkgKzIwMzAsNiBAQAogCQlzbmRfZWNob19mcmVlKGNoaXApOwogCQlyZXR1cm4gZXJyOwogCX0KLQlhdG9taWNfc2V0KCZjaGlwLT5vcGVuY291bnQsIDApOwotCW11dGV4X2luaXQoJmNoaXAtPm1vZGVfbXV0ZXgpOwotCWNoaXAtPmNhbl9zZXRfcmF0ZSA9IDE7CiAJKnJjaGlwID0gY2hpcDsKIAkvKiBJbml0IGRvbmUgISAqLwogCXJldHVybiAwOwpAQCAtMjAwOCw2ICsyMDYyLDcgQEAKIAogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKIAorCWNoaXAgPSBOVUxMOwkvKiBUZWxscyBzbmRfZWNob19jcmVhdGUgdG8gYWxsb2NhdGUgY2hpcCAqLwogCWlmICgoZXJyID0gc25kX2VjaG9fY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKQEAgLTIxNDcsNiArMjIwMiwxMTIgQEAKIAogCiAKKyNpZiBkZWZpbmVkKENPTkZJR19QTSkKKworc3RhdGljIGludCBzbmRfZWNob19zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwID0gcGNpX2dldF9kcnZkYXRhKHBjaSk7CisKKwlERV9JTklUKCgic3VzcGVuZCBzdGFydFxuIikpOworCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+YW5hbG9nX3BjbSk7CisJc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5kaWdpdGFsX3BjbSk7CisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfTUlESQorCS8qIFRoaXMgY2FsbCBjYW4gc2xlZXAgKi8KKwlpZiAoY2hpcC0+bWlkaV9vdXQpCisJCXNuZF9lY2hvX21pZGlfb3V0cHV0X3RyaWdnZXIoY2hpcC0+bWlkaV9vdXQsIDApOworI2VuZGlmCisJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJCXJldHVybiAtRUlPOworCX0KKwljbGVhcl9oYW5kc2hha2UoY2hpcCk7CisJaWYgKHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19HT19DT01BVE9TRSkgPCAwKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+bG9jayk7CisJCXJldHVybiAtRUlPOworCX0KKwlzcGluX3VubG9ja19pcnEoJmNoaXAtPmxvY2spOworCisJY2hpcC0+ZHNwX2NvZGUgPSBOVUxMOworCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CisJY2hpcC0+aXJxID0gLTE7CisJcGNpX3NhdmVfc3RhdGUocGNpKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKKworCURFX0lOSVQoKCJzdXNwZW5kIGRvbmVcbiIpKTsKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbnQgc25kX2VjaG9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwY2kpCit7CisJc3RydWN0IGVjaG9hdWRpbyAqY2hpcCA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpOworCXN0cnVjdCBjb21tX3BhZ2UgKmNvbW1wYWdlLCAqY29tbXBhZ2VfYmFrOworCXUzMiBwaXBlX2FsbG9jX21hc2s7CisJaW50IGVycjsKKworCURFX0lOSVQoKCJyZXN1bWUgc3RhcnRcbiIpKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOworCWNvbW1wYWdlX2JhayA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBlY2hvYXVkaW8pLCBHRlBfS0VSTkVMKTsKKwljb21tcGFnZSA9IGNoaXAtPmNvbW1fcGFnZTsKKwltZW1jcHkoY29tbXBhZ2VfYmFrLCBjb21tcGFnZSwgc2l6ZW9mKHN0cnVjdCBjb21tX3BhZ2UpKTsKKworCWVyciA9IGluaXRfaHcoY2hpcCwgY2hpcC0+cGNpLT5kZXZpY2UsIGNoaXAtPnBjaS0+c3Vic3lzdGVtX2RldmljZSk7CisJaWYgKGVyciA8IDApIHsKKwkJa2ZyZWUoY29tbXBhZ2VfYmFrKTsKKwkJREVfSU5JVCgoInJlc3VtZSBpbml0X2h3IGVycj0lZFxuIiwgZXJyKSk7CisJCXNuZF9lY2hvX2ZyZWUoY2hpcCk7CisJCXJldHVybiBlcnI7CisJfQorCURFX0lOSVQoKCJyZXN1bWUgaW5pdCBPS1xuIikpOworCisJLyogVGVtcG9yYXJpbHkgc2V0IGNoaXAtPnBpcGVfYWxsb2NfbWFzaz0wIG90aGVyd2lzZQorCSAqIHJlc3RvcmVfZHNwX3NldHRpbmdzKCkgZmFpbHMuCisJICovCisJcGlwZV9hbGxvY19tYXNrID0gY2hpcC0+cGlwZV9hbGxvY19tYXNrOworCWNoaXAtPnBpcGVfYWxsb2NfbWFzayA9IDA7CisJZXJyID0gcmVzdG9yZV9kc3BfcmV0dGluZ3MoY2hpcCk7CisJY2hpcC0+cGlwZV9hbGxvY19tYXNrID0gcGlwZV9hbGxvY19tYXNrOworCWlmIChlcnIgPCAwKSB7CisJCWtmcmVlKGNvbW1wYWdlX2Jhayk7CisJCXJldHVybiBlcnI7CisJfQorCURFX0lOSVQoKCJyZXN1bWUgcmVzdG9yZSBPS1xuIikpOworCisJbWVtY3B5KCZjb21tcGFnZS0+YXVkaW9fZm9ybWF0LCAmY29tbXBhZ2VfYmFrLT5hdWRpb19mb3JtYXQsCisJCXNpemVvZihjb21tcGFnZS0+YXVkaW9fZm9ybWF0KSk7CisJbWVtY3B5KCZjb21tcGFnZS0+c2dsaXN0X2FkZHIsICZjb21tcGFnZV9iYWstPnNnbGlzdF9hZGRyLAorCQlzaXplb2YoY29tbXBhZ2UtPnNnbGlzdF9hZGRyKSk7CisJbWVtY3B5KCZjb21tcGFnZS0+bWlkaV9vdXRwdXQsICZjb21tcGFnZV9iYWstPm1pZGlfb3V0cHV0LAorCQlzaXplb2YoY29tbXBhZ2UtPm1pZGlfb3V0cHV0KSk7CisJa2ZyZWUoY29tbXBhZ2VfYmFrKTsKKworCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2VjaG9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCUVDSE9DQVJEX05BTUUsIGNoaXApKSB7CisJCXNuZF9lY2hvX2ZyZWUoY2hpcCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBncmFiIGlycVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWNoaXAtPmlycSA9IHBjaS0+aXJxOworCURFX0lOSVQoKCJyZXN1bWUgaXJxPSVkXG4iLCBjaGlwLT5pcnEpKTsKKworI2lmZGVmIEVDSE9DQVJEX0hBU19NSURJCisJaWYgKGNoaXAtPm1pZGlfaW5wdXRfZW5hYmxlZCkKKwkJZW5hYmxlX21pZGlfaW5wdXQoY2hpcCwgVFJVRSk7CisJaWYgKGNoaXAtPm1pZGlfb3V0KQorCQlzbmRfZWNob19taWRpX291dHB1dF90cmlnZ2VyKGNoaXAtPm1pZGlfb3V0LCAxKTsKKyNlbmRpZgorCisJREVfSU5JVCgoInJlc3VtZSBkb25lXG4iKSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworCisKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfZWNob19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSkKIHsKIAlzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwOwpAQCAtMjE2OSw2ICsyMzMwLDEwIEBACiAJLmlkX3RhYmxlID0gc25kX2VjaG9faWRzLAogCS5wcm9iZSA9IHNuZF9lY2hvX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfZWNob19yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gc25kX2VjaG9fc3VzcGVuZCwKKwkucmVzdW1lID0gc25kX2VjaG9fcmVzdW1lLAorI2VuZGlmIC8qIENPTkZJR19QTSAqLwogfTsKIAogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5oIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uaAppbmRleCBmOTQ5MGFlLi4xZGY5NzRkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5oCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmgKQEAgLTQ0MiwxMyArNDQyLDE2IEBACiAJdTE2IGRldmljZV9pZCwgc3ViZGV2aWNlX2lkOwogCXUxNiAqZHNwX2NvZGU7CQkJLyogQ3VycmVudCBEU1AgY29kZSBsb2FkZWQsCiAJCQkJCSAqIE5VTEwgaWYgbm90aGluZyBsb2FkZWQgKi8KLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmRzcF9jb2RlX3RvX2xvYWQ7LyogRFNQIGNvZGUgdG8gbG9hZCAqLwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYXNpY19jb2RlOwkvKiBDdXJyZW50IEFTSUMgY29kZSAqLworCXNob3J0IGRzcF9jb2RlX3RvX2xvYWQ7CQkvKiBEU1AgY29kZSB0byBsb2FkICovCisJc2hvcnQgYXNpY19jb2RlOwkJLyogQ3VycmVudCBBU0lDIGNvZGUgKi8KIAl1MzIgY29tbV9wYWdlX3BoeXM7CQkJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUKIAkJCQkJCSAqIG1lbW9yeSBzZWVuIGJ5IERTUCAqLwogCXZvbGF0aWxlIHUzMiBfX2lvbWVtICpkc3BfcmVnaXN0ZXJzOwkvKiBEU1AncyByZWdpc3RlciBiYXNlICovCiAJdTMyIGFjdGl2ZV9tYXNrOwkJCS8qIENocy4gYWN0aXZlIG1hc2sgb3IKIAkJCQkJCSAqIHB1bmtzIG91dCAqLworI2lmZGVmIENPTkZJR19QTQorCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfY2FjaGVbOF07CS8qIENhY2hlZCBmaXJtd2FyZXMgKi8KKyNlbmRpZgogCiAjaWZkZWYgRUNIT0NBUkRfSEFTX01JREkKIAl1MTYgbXRjX3N0YXRlOwkJCQkvKiBTdGF0ZSBmb3IgTUlESSBpbnB1dCBwYXJzaW5nIHN0YXRlIG1hY2hpbmUgKi8KQEAgLTQ2NCwxMSArNDY3LDEzIEBACiBzdGF0aWMgaW50IHdhaXRfaGFuZHNoYWtlKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOwogc3RhdGljIGludCBzZW5kX3ZlY3RvcihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY29tbWFuZCk7CiBzdGF0aWMgaW50IGdldF9maXJtd2FyZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmd19lbnRyeSwKLQkJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnJtLCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKKwkJCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNvbnN0IHNob3J0IGZ3X2luZGV4KTsKIHN0YXRpYyB2b2lkIGZyZWVfZmlybXdhcmUoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeSk7CiAKICNpZmRlZiBFQ0hPQ0FSRF9IQVNfTUlESQogc3RhdGljIGludCBlbmFibGVfbWlkaV9pbnB1dChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIGVuYWJsZSk7CitzdGF0aWMgdm9pZCBzbmRfZWNob19taWRpX291dHB1dF90cmlnZ2VyKAorCQkJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgdXApOwogc3RhdGljIGludCBtaWRpX3NlcnZpY2VfaXJxKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOwogc3RhdGljIGludCBfX2RldmluaXQgc25kX2VjaG9fbWlkaV9jcmVhdGUoc3RydWN0IHNuZF9jYXJkICpjYXJkLAogCQkJCQkgIHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMKaW5kZXggZTMyYTc0OC4uNjU4ZGI0NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb18zZy5jCkBAIC0yMjcsMTIgKzIyNywxMSBAQAogCS8qIEdpdmUgdGhlIERTUCBhIGZldyBtaWxsaXNlY29uZHMgdG8gc2V0dGxlIGRvd24gKi8KIAltZGVsYXkoMik7CiAKLQllcnIgPSBsb2FkX2FzaWNfZ2VuZXJpYyhjaGlwLCBEU1BfRk5DX0xPQURfM0dfQVNJQywKLQkJCQkmY2FyZF9md1tGV18zR19BU0lDXSk7CisJZXJyID0gbG9hZF9hc2ljX2dlbmVyaWMoY2hpcCwgRFNQX0ZOQ19MT0FEXzNHX0FTSUMsIEZXXzNHX0FTSUMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY2hpcC0+YXNpY19jb2RlID0gJmNhcmRfZndbRldfM0dfQVNJQ107CisJY2hpcC0+YXNpY19jb2RlID0gRldfM0dfQVNJQzsKIAogCS8qIE5vdyBnaXZlIHRoZSBuZXcgQVNJQyBzb21lIHRpbWUgdG8gc2V0IHVwICovCiAJbXNsZWVwKDEwMDApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuYwppbmRleCA0ZGY1MWVmLi42NDQxN2E3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuYwpAQCAtMTc1LDE1ICsxNzUsMTUgQEAKICNpZmRlZiBFQ0hPQ0FSRF9IQVNfQVNJQwogCiAvKiBMb2FkIEFTSUMgY29kZSAtIGRvbmUgYWZ0ZXIgdGhlIERTUCBpcyBsb2FkZWQgKi8KLXN0YXRpYyBpbnQgbG9hZF9hc2ljX2dlbmVyaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNtZCwKLQkJCSAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljKQorc3RhdGljIGludCBsb2FkX2FzaWNfZ2VuZXJpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY21kLCBzaG9ydCBhc2ljKQogewogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJaW50IGVycjsKIAl1MzIgaSwgc2l6ZTsKIAl1OCAqY29kZTsKIAotCWlmICgoZXJyID0gZ2V0X2Zpcm13YXJlKCZmdywgYXNpYywgY2hpcCkpIDwgMCkgeworCWVyciA9IGdldF9maXJtd2FyZSgmZncsIGNoaXAsIGFzaWMpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJGaXJtd2FyZSBub3QgZm91bmQgIVxuIik7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMjQ1LDcgKzI0NSw4IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmICgoaSA9IGdldF9maXJtd2FyZSgmZncsICZjYXJkX2Z3W0ZXXzM2MV9MT0FERVJdLCBjaGlwKSkgPCAwKSB7CisJaSA9IGdldF9maXJtd2FyZSgmZncsIGNoaXAsIEZXXzM2MV9MT0FERVIpOworCWlmIChpIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiRmlybXdhcmUgbm90IGZvdW5kICFcbiIpOwogCQlyZXR1cm4gaTsKIAl9CkBAIC00ODUsNyArNDg2LDggQEAKIAkJY2hpcC0+ZHNwX2NvZGUgPSBOVUxMOwogCX0KIAotCWlmICgoZXJyID0gZ2V0X2Zpcm13YXJlKCZmdywgY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCwgY2hpcCkpIDwgMCkKKwllcnIgPSBnZXRfZmlybXdhcmUoJmZ3LCBjaGlwLCBjaGlwLT5kc3BfY29kZV90b19sb2FkKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAllcnIgPSBsb2FkX2RzcChjaGlwLCAodTE2ICopZnctPmRhdGEpOwogCWZyZWVfZmlybXdhcmUoZncpOwpAQCAtNDk1LDkgKzQ5Nyw2IEBACiAJaWYgKChib3hfdHlwZSA9IGxvYWRfYXNpYyhjaGlwKSkgPCAwKQogCQlyZXR1cm4gYm94X3R5cGU7CS8qIGVycm9yICovCiAKLQlpZiAoKGVyciA9IHJlc3RvcmVfZHNwX3JldHRpbmdzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KIAlyZXR1cm4gYm94X3R5cGU7CiB9CiAKQEAgLTY1NywyNSArNjU2LDg5IEBACiAKIHN0YXRpYyBpbnQgcmVzdG9yZV9kc3BfcmV0dGluZ3Moc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKIHsKLQlpbnQgZXJyOworCWludCBpLCBvLCBlcnI7CiAJREVfSU5JVCgoInJlc3RvcmVfZHNwX3NldHRpbmdzXG4iKSk7CiAKIAlpZiAoKGVyciA9IGNoZWNrX2FzaWNfc3RhdHVzKGNoaXApKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQkvKiBAIEdpbmEyMC9EYXJsYTIwIG9ubHkuIFNob3VsZCBiZSBoYXJtbGVzcyBmb3Igb3RoZXIgY2FyZHMuICovCisJLyogR2luYTIwL0RhcmxhMjAgb25seS4gU2hvdWxkIGJlIGhhcm1sZXNzIGZvciBvdGhlciBjYXJkcy4gKi8KIAljaGlwLT5jb21tX3BhZ2UtPmdkX2Nsb2NrX3N0YXRlID0gR0RfQ0xPQ0tfVU5ERUY7CiAJY2hpcC0+Y29tbV9wYWdlLT5nZF9zcGRpZl9zdGF0dXMgPSBHRF9TUERJRl9TVEFUVVNfVU5ERUY7CiAJY2hpcC0+Y29tbV9wYWdlLT5oYW5kc2hha2UgPSAweGZmZmZmZmZmOwogCi0JaWYgKChlcnIgPSBzZXRfc2FtcGxlX3JhdGUoY2hpcCwgY2hpcC0+c2FtcGxlX3JhdGUpKSA8IDApCisJLyogUmVzdG9yZSBvdXRwdXQgYnVzc2VzICovCisJZm9yIChpID0gMDsgaSA8IG51bV9idXNzZXNfb3V0KGNoaXApOyBpKyspIHsKKwkJZXJyID0gc2V0X291dHB1dF9nYWluKGNoaXAsIGksIGNoaXAtPm91dHB1dF9nYWluW2ldKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworI2lmZGVmIEVDSE9DQVJEX0hBU19WTUlYRVIKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BpcGVzX291dChjaGlwKTsgaSsrKQorCQlmb3IgKG8gPSAwOyBvIDwgbnVtX2J1c3Nlc19vdXQoY2hpcCk7IG8rKykgeworCQkJZXJyID0gc2V0X3ZtaXhlcl9nYWluKGNoaXAsIG8sIGksCisJCQkJCQljaGlwLT52bWl4ZXJfZ2FpbltvXVtpXSk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJaWYgKHVwZGF0ZV92bWl4ZXJfbGV2ZWwoY2hpcCkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKyNlbmRpZiAvKiBFQ0hPQ0FSRF9IQVNfVk1JWEVSICovCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfTU9OSVRPUgorCWZvciAobyA9IDA7IG8gPCBudW1fYnVzc2VzX291dChjaGlwKTsgbysrKQorCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1c3Nlc19pbihjaGlwKTsgaSsrKSB7CisJCQllcnIgPSBzZXRfbW9uaXRvcl9nYWluKGNoaXAsIG8sIGksCisJCQkJCQljaGlwLT5tb25pdG9yX2dhaW5bb11baV0pOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJfQorI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19NT05JVE9SICovCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfSU5QVVRfR0FJTgorCWZvciAoaSA9IDA7IGkgPCBudW1fYnVzc2VzX2luKGNoaXApOyBpKyspIHsKKwkJZXJyID0gc2V0X2lucHV0X2dhaW4oY2hpcCwgaSwgY2hpcC0+aW5wdXRfZ2FpbltpXSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisjZW5kaWYgLyogRUNIT0NBUkRfSEFTX0lOUFVUX0dBSU4gKi8KKworCWVyciA9IHVwZGF0ZV9vdXRwdXRfbGluZV9sZXZlbChjaGlwKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWlmIChjaGlwLT5tZXRlcnNfZW5hYmxlZCkKLQkJaWYgKHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19NRVRFUlNfT04pIDwgMCkKLQkJCXJldHVybiAtRUlPOworCWVyciA9IHVwZGF0ZV9pbnB1dF9saW5lX2xldmVsKGNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gc2V0X3NhbXBsZV9yYXRlKGNoaXAsIGNoaXAtPnNhbXBsZV9yYXRlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmIChjaGlwLT5tZXRlcnNfZW5hYmxlZCkgeworCQllcnIgPSBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfTUVURVJTX09OKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworI2lmZGVmIEVDSE9DQVJEX0hBU19ESUdJVEFMX01PREVfU1dJVENICisJaWYgKHNldF9kaWdpdGFsX21vZGUoY2hpcCwgY2hpcC0+ZGlnaXRhbF9tb2RlKSA8IDApCisJCXJldHVybiAtRUlPOworI2VuZGlmCisKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfRElHSVRBTF9JTworCWlmIChzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKGNoaXAsIGNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKyNlbmRpZgorCisjaWZkZWYgRUNIT0NBUkRfSEFTX1BIQU5UT01fUE9XRVIKKwlpZiAoc2V0X3BoYW50b21fcG93ZXIoY2hpcCwgY2hpcC0+cGhhbnRvbV9wb3dlcikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKyNlbmRpZgogCiAjaWZkZWYgRUNIT0NBUkRfSEFTX0VYVEVSTkFMX0NMT0NLCisJLyogc2V0X2lucHV0X2Nsb2NrKCkgYWxzbyByZXN0b3JlcyBhdXRvbXV0ZSBzZXR0aW5nICovCiAJaWYgKHNldF9pbnB1dF9jbG9jayhjaGlwLCBjaGlwLT5pbnB1dF9jbG9jaykgPCAwKQogCQlyZXR1cm4gLUVJTzsKICNlbmRpZgpAQCAtNjg1LDIzICs3NDgsMTQgQEAKIAkJcmV0dXJuIC1FSU87CiAjZW5kaWYKIAotCWlmICh1cGRhdGVfb3V0cHV0X2xpbmVfbGV2ZWwoY2hpcCkgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmICh1cGRhdGVfaW5wdXRfbGluZV9sZXZlbChjaGlwKSA8IDApCi0JCXJldHVybiAtRUlPOwotCi0jaWZkZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgotCWlmICh1cGRhdGVfdm1peGVyX2xldmVsKGNoaXApIDwgMCkKLQkJcmV0dXJuIC1FSU87Ci0jZW5kaWYKLQogCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSA8IDApCiAJCXJldHVybiAtRUlPOwogCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKKwlpZiAoc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1VQREFURV9GTEFHUykgPCAwKQorCQlyZXR1cm4gLUVJTzsKIAogCURFX0lOSVQoKCJyZXN0b3JlX2RzcF9yZXR0aW5ncyBkb25lXG4iKSk7Ci0JcmV0dXJuIHNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19VUERBVEVfRkxBR1MpOworCXJldHVybiAwOwogfQogCiAKQEAgLTkxOCw5ICs5NzIsNiBAQAogCWNoaXAtPmNhcmRfbmFtZSA9IEVDSE9DQVJEX05BTUU7CiAJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsJLyogU2V0IFRSVUUgdW50aWwgRFNQIGxvYWRlZCAqLwogCWNoaXAtPmRzcF9jb2RlID0gTlVMTDsJLyogQ3VycmVudCBEU1AgY29kZSBub3QgbG9hZGVkICovCi0JY2hpcC0+ZGlnaXRhbF9tb2RlID0gRElHSVRBTF9NT0RFX05PTkU7Ci0JY2hpcC0+aW5wdXRfY2xvY2sgPSBFQ0hPX0NMT0NLX0lOVEVSTkFMOwotCWNoaXAtPm91dHB1dF9jbG9jayA9IEVDSE9fQ0xPQ0tfV09SRDsKIAljaGlwLT5hc2ljX2xvYWRlZCA9IEZBTFNFOwogCW1lbXNldChjaGlwLT5jb21tX3BhZ2UsIDAsIHNpemVvZihzdHJ1Y3QgY29tbV9wYWdlKSk7CiAKQEAgLTkzMSw3ICs5ODIsNiBAQAogCWNoaXAtPmNvbW1fcGFnZS0+bWlkaV9vdXRfZnJlZV9jb3VudCA9CiAJCWNwdV90b19sZTMyKERTUF9NSURJX09VVF9GSUZPX1NJWkUpOwogCWNoaXAtPmNvbW1fcGFnZS0+c2FtcGxlX3JhdGUgPSBjcHVfdG9fbGUzMig0NDEwMCk7Ci0JY2hpcC0+c2FtcGxlX3JhdGUgPSA0NDEwMDsKIAogCS8qIFNldCBsaW5lIGxldmVscyBzbyB3ZSBkb24ndCBibGFzdCBhbnkgaW5wdXRzIG9uIHN0YXJ0dXAgKi8KIAltZW1zZXQoY2hpcC0+Y29tbV9wYWdlLT5tb25pdG9ycywgRUNIT0dBSU5fTVVURUQsIE1PTklUT1JfQVJSQVlfU0laRSk7CkBAIC05NDIsNTAgKzk5MiwyMSBAQAogCiAKIAotLyogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgc2V2ZXJhbCB2b2x1bWUgY29udHJvbHMgZm9yIGJ1c3NlcyBhbmQgcGlwZXMuCi1UaGlzIE1VU1QgYmUgY2FsbGVkIGFmdGVyIHRoZSBEU1AgaXMgdXAgYW5kIHJ1bm5pbmcgISAqLworLyogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgY2hpcCBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcywgaWUuIGFsbAorICogbXV0ZWQgYW5kIGludGVybmFsIGNsb2NrIHNvdXJjZS4gVGhlbiBpdCBjb3BpZXMgdGhlIHNldHRpbmdzIHRvIHRoZSBEU1AuCisgKiBUaGlzIE1VU1QgYmUgY2FsbGVkIGFmdGVyIHRoZSBEU1AgaXMgdXAgYW5kIHJ1bm5pbmcgIQorICovCiBzdGF0aWMgaW50IGluaXRfbGluZV9sZXZlbHMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKIHsKLQlpbnQgc3QsIGksIG87Ci0KIAlERV9JTklUKCgiaW5pdF9saW5lX2xldmVsc1xuIikpOwotCi0JLyogTXV0ZSBvdXRwdXQgYnVzc2VzICovCi0JZm9yIChpID0gMDsgaSA8IG51bV9idXNzZXNfb3V0KGNoaXApOyBpKyspCi0JCWlmICgoc3QgPSBzZXRfb3V0cHV0X2dhaW4oY2hpcCwgaSwgRUNIT0dBSU5fTVVURUQpKSkKLQkJCXJldHVybiBzdDsKLQlpZiAoKHN0ID0gdXBkYXRlX291dHB1dF9saW5lX2xldmVsKGNoaXApKSkKLQkJcmV0dXJuIHN0OwotCi0jaWZkZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgotCS8qIE11dGUgdGhlIFZtaXhlciAqLwotCWZvciAoaSA9IDA7IGkgPCBudW1fcGlwZXNfb3V0KGNoaXApOyBpKyspCi0JCWZvciAobyA9IDA7IG8gPCBudW1fYnVzc2VzX291dChjaGlwKTsgbysrKQotCQkJaWYgKChzdCA9IHNldF92bWl4ZXJfZ2FpbihjaGlwLCBvLCBpLCBFQ0hPR0FJTl9NVVRFRCkpKQotCQkJCXJldHVybiBzdDsKLQlpZiAoKHN0ID0gdXBkYXRlX3ZtaXhlcl9sZXZlbChjaGlwKSkpCi0JCXJldHVybiBzdDsKLSNlbmRpZiAvKiBFQ0hPQ0FSRF9IQVNfVk1JWEVSICovCi0KLSNpZmRlZiBFQ0hPQ0FSRF9IQVNfTU9OSVRPUgotCS8qIE11dGUgdGhlIG1vbml0b3IgbWl4ZXIgKi8KLQlmb3IgKG8gPSAwOyBvIDwgbnVtX2J1c3Nlc19vdXQoY2hpcCk7IG8rKykKLQkJZm9yIChpID0gMDsgaSA8IG51bV9idXNzZXNfaW4oY2hpcCk7IGkrKykKLQkJCWlmICgoc3QgPSBzZXRfbW9uaXRvcl9nYWluKGNoaXAsIG8sIGksIEVDSE9HQUlOX01VVEVEKSkpCi0JCQkJcmV0dXJuIHN0OwotCWlmICgoc3QgPSB1cGRhdGVfb3V0cHV0X2xpbmVfbGV2ZWwoY2hpcCkpKQotCQlyZXR1cm4gc3Q7Ci0jZW5kaWYgLyogRUNIT0NBUkRfSEFTX01PTklUT1IgKi8KLQotI2lmZGVmIEVDSE9DQVJEX0hBU19JTlBVVF9HQUlOCi0JZm9yIChpID0gMDsgaSA8IG51bV9idXNzZXNfaW4oY2hpcCk7IGkrKykKLQkJaWYgKChzdCA9IHNldF9pbnB1dF9nYWluKGNoaXAsIGksIEVDSE9HQUlOX01VVEVEKSkpCi0JCQlyZXR1cm4gc3Q7Ci0JaWYgKChzdCA9IHVwZGF0ZV9pbnB1dF9saW5lX2xldmVsKGNoaXApKSkKLQkJcmV0dXJuIHN0OwotI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19JTlBVVF9HQUlOICovCi0KLQlyZXR1cm4gMDsKKwltZW1zZXQoY2hpcC0+b3V0cHV0X2dhaW4sIEVDSE9HQUlOX01VVEVELCBzaXplb2YoY2hpcC0+b3V0cHV0X2dhaW4pKTsKKwltZW1zZXQoY2hpcC0+aW5wdXRfZ2FpbiwgRUNIT0dBSU5fTVVURUQsIHNpemVvZihjaGlwLT5pbnB1dF9nYWluKSk7CisJbWVtc2V0KGNoaXAtPm1vbml0b3JfZ2FpbiwgRUNIT0dBSU5fTVVURUQsIHNpemVvZihjaGlwLT5tb25pdG9yX2dhaW4pKTsKKwltZW1zZXQoY2hpcC0+dm1peGVyX2dhaW4sIEVDSE9HQUlOX01VVEVELCBzaXplb2YoY2hpcC0+dm1peGVyX2dhaW4pKTsKKwljaGlwLT5pbnB1dF9jbG9jayA9IEVDSE9fQ0xPQ0tfSU5URVJOQUw7CisJY2hpcC0+b3V0cHV0X2Nsb2NrID0gRUNIT19DTE9DS19XT1JEOworCWNoaXAtPnNhbXBsZV9yYXRlID0gNDQxMDA7CisJcmV0dXJuIHJlc3RvcmVfZHNwX3JldHRpbmdzKGNoaXApOwogfQogCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMC5jCmluZGV4IGMwZTY0YjguLjIzNjRmOGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjAuYwpAQCAtNjcsNyArNjcsNyBAQAogCXswLCAiZ2luYTIwX2RzcC5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDE4MDEsIDB4RUNDMCwgMHgwMDIwLCAwLCAwLCAwfSwJLyogRFNQIDU2MzAxIEdpbmEyMCByZXYuMCAqLwogCXswLH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwX2RzcC5jCmluZGV4IDNmMWU3NDcuLmQxNjE1YTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwX2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwX2RzcC5jCkBAIC00OSw3ICs0OSw3IEBACiAJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOwogCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKIAljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19HSU5BMjBfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfR0lOQTIwX0RTUDsKIAljaGlwLT5zcGRpZl9zdGF0dXMgPSBHRF9TUERJRl9TVEFUVVNfVU5ERUY7CiAJY2hpcC0+Y2xvY2tfc3RhdGUgPSBHRF9DTE9DS19VTkRFRjsKIAkvKiBTaW5jZSB0aGlzIGNhcmQgaGFzIG5vIEFTSUMsIG1hcmsgaXQgYXMgbG9hZGVkIHNvIGV2ZXJ5dGhpbmcKQEAgLTYyLDE3ICs2MiwyMCBAQAogCQlyZXR1cm4gZXJyOwogCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwogCi0JaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKGNoaXAsIFRSVUUpOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IEZBTFNFOworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCiB7CiAJdTMyIGNsb2Nrc19mcm9tX2RzcCwgY2xvY2tfYml0czsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTI0LmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyNC5jCmluZGV4IGMzNmE3OGQuLjYxNmI1NTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTI0LmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjQuYwpAQCAtODUsNyArODUsNyBAQAogCXswLCAiZ2luYTI0XzM2MV9hc2ljLmZ3In0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfZWNob19pZHMpID0gewogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwNTAsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgR2luYTI0IHJldi4wICovCiAJezB4MTA1NywgMHgxODAxLCAweEVDQzAsIDB4MDA1MSwgMCwgMCwgMH0sCS8qIERTUCA1NjMwMSBHaW5hMjQgcmV2LjEgKi8KIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMDUwLCAwLCAwLCAwfSwJLyogRFNQIDU2MzYxIEdpbmEyNCByZXYuMCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjRfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyNF9kc3AuYwppbmRleCAyZmVmMzdhLi45OGY3Y2ZhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyNF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyNF9kc3AuYwpAQCAtMzMsOCArMzMsNyBAQAogc3RhdGljIGludCBzZXRfaW5wdXRfY2xvY2soc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IGNsb2NrKTsKIHN0YXRpYyBpbnQgc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIHByb2YpOwogc3RhdGljIGludCBzZXRfZGlnaXRhbF9tb2RlKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHU4IG1vZGUpOwotc3RhdGljIGludCBsb2FkX2FzaWNfZ2VuZXJpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY21kLAotCQkJICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmFzaWMpOworc3RhdGljIGludCBsb2FkX2FzaWNfZ2VuZXJpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY21kLCBzaG9ydCBhc2ljKTsKIHN0YXRpYyBpbnQgY2hlY2tfYXNpY19zdGF0dXMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCk7CiAKIApAQCAtNTgsMTkgKzU3LDE2IEBACiAJCUVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMIHwgRUNIT19DTE9DS19CSVRfU1BESUYgfAogCQlFQ0hPX0NMT0NLX0JJVF9FU1lOQyB8IEVDSE9fQ0xPQ0tfQklUX0VTWU5DOTYgfAogCQlFQ0hPX0NMT0NLX0JJVF9BREFUOwotCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IEZBTFNFOwotCWNoaXAtPmRpZ2l0YWxfaW5fYXV0b211dGUgPSBUUlVFOwotCWNoaXAtPmRpZ2l0YWxfbW9kZSA9IERJR0lUQUxfTU9ERV9TUERJRl9SQ0E7CiAKIAkvKiBHaW5hMjQgY29tZXMgaW4gYm90aCAnMzAxIGFuZCAnMzYxIGZsYXZvcnMgKi8KIAlpZiAoY2hpcC0+ZGV2aWNlX2lkID09IERFVklDRV9JRF81NjM2MSkgewotCQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfR0lOQTI0XzM2MV9EU1BdOworCQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfR0lOQTI0XzM2MV9EU1A7CiAJCWNoaXAtPmRpZ2l0YWxfbW9kZXMgPQogCQkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9TUERJRl9SQ0EgfAogCQkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9TUERJRl9PUFRJQ0FMIHwKIAkJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfQURBVDsKIAl9IGVsc2UgewotCQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfR0lOQTI0XzMwMV9EU1BdOworCQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfR0lOQTI0XzMwMV9EU1A7CiAJCWNoaXAtPmRpZ2l0YWxfbW9kZXMgPQogCQkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9TUERJRl9SQ0EgfAogCQkJRUNIT0NBUFNfSEFTX0RJR0lUQUxfTU9ERV9TUERJRl9PUFRJQ0FMIHwKQEAgLTgyLDE5ICs3OCwyMiBAQAogCQlyZXR1cm4gZXJyOwogCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwogCi0JaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gc2V0X2RpZ2l0YWxfbW9kZShjaGlwLCBESUdJVEFMX01PREVfU1BESUZfUkNBKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKGNoaXAsIFRSVUUpOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCWNoaXAtPmRpZ2l0YWxfbW9kZSA9IERJR0lUQUxfTU9ERV9TUERJRl9SQ0E7CisJY2hpcC0+cHJvZmVzc2lvbmFsX3NwZGlmID0gRkFMU0U7CisJY2hpcC0+ZGlnaXRhbF9pbl9hdXRvbXV0ZSA9IFRSVUU7CisJcmV0dXJuIGluaXRfbGluZV9sZXZlbHMoY2hpcCk7Cit9CisKKworCiBzdGF0aWMgdTMyIGRldGVjdF9pbnB1dF9jbG9ja3MoY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKIHsKIAl1MzIgY2xvY2tzX2Zyb21fZHNwLCBjbG9ja19iaXRzOwpAQCAtMTI1LDcgKzEyNCw3IEBACiB7CiAJdTMyIGNvbnRyb2xfcmVnOwogCWludCBlcnI7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlzaG9ydCBhc2ljOwogCiAJaWYgKGNoaXAtPmFzaWNfbG9hZGVkKQogCQlyZXR1cm4gMTsKQEAgLTEzNSwxNCArMTM0LDE1IEBACiAKIAkvKiBQaWNrIHRoZSBjb3JyZWN0IEFTSUMgZm9yICczMDEgb3IgJzM2MSBHaW5hMjQgKi8KIAlpZiAoY2hpcC0+ZGV2aWNlX2lkID09IERFVklDRV9JRF81NjM2MSkKLQkJZncgPSAmY2FyZF9md1tGV19HSU5BMjRfMzYxX0FTSUNdOworCQlhc2ljID0gRldfR0lOQTI0XzM2MV9BU0lDOwogCWVsc2UKLQkJZncgPSAmY2FyZF9md1tGV19HSU5BMjRfMzAxX0FTSUNdOworCQlhc2ljID0gRldfR0lOQTI0XzMwMV9BU0lDOwogCi0JaWYgKChlcnIgPSBsb2FkX2FzaWNfZ2VuZXJpYyhjaGlwLCBEU1BfRk5DX0xPQURfR0lOQTI0X0FTSUMsIGZ3KSkgPCAwKQorCWVyciA9IGxvYWRfYXNpY19nZW5lcmljKGNoaXAsIERTUF9GTkNfTE9BRF9HSU5BMjRfQVNJQywgYXNpYyk7CisJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQljaGlwLT5hc2ljX2NvZGUgPSBmdzsKKwljaGlwLT5hc2ljX2NvZGUgPSBhc2ljOwogCiAJLyogTm93IGdpdmUgdGhlIG5ldyBBU0lDIGEgbGl0dGxlIHRpbWUgdG8gc2V0IHVwICovCiAJbWRlbGF5KDEwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnby5jCmluZGV4IDBhNThhN2MuLjc3NjE3NWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ28uYwpAQCAtNjgsNyArNjgsNyBAQAogCXswLCAiaW5kaWdvX2RzcC5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMDkwLCAwLCAwLCAwfSwJLyogSW5kaWdvICovCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZHNwLmMKaW5kZXggMGIyY2Q5Yy4uNWU4NWYxNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZHNwLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0lORElHT19EU1BdOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSBGV19JTkRJR09fRFNQOwogCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZwogCSAgIHdvcmtzIE9LICovCiAJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOwpAQCAtNjAsMTUgKzYwLDE5IEBACiAJCXJldHVybiBlcnI7CiAJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CiAKLQlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpIDwgMCkKLQkJcmV0dXJuIGVycjsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQogCiAKIAorc3RhdGljIGludCBzZXRfbWl4ZXJfZGVmYXVsdHMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlyZXR1cm4gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKK30KKworCisKIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewogCXJldHVybiBFQ0hPX0NMT0NLX0JJVF9JTlRFUk5BTDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2V4cHJlc3NfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19leHByZXNzX2RzcC5jCmluZGV4IDlhYjYyNWUuLjJlNGFiM2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2V4cHJlc3NfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZXhwcmVzc19kc3AuYwpAQCAtNjEsNiArNjEsNyBAQAogCiAJY29udHJvbF9yZWcgfD0gY2xvY2s7CiAJaWYgKGNvbnRyb2xfcmVnICE9IG9sZF9jb250cm9sX3JlZykgeworCQlERV9BQ1QoKCJzZXRfc2FtcGxlX3JhdGU6ICVkIGNsb2NrICVkXG4iLCByYXRlLCBjbG9jaykpOwogCQljaGlwLT5jb21tX3BhZ2UtPmNvbnRyb2xfcmVnaXN0ZXIgPSBjcHVfdG9fbGUzMihjb250cm9sX3JlZyk7CiAJCWNoaXAtPnNhbXBsZV9yYXRlID0gcmF0ZTsKIAkJY2xlYXJfaGFuZHNoYWtlKGNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kai5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kai5jCmluZGV4IDJkYjI0ZDIuLjg4MTZiMGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGouYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAl7MCwgImluZGlnb19kal9kc3AuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDBCMCwgMCwgMCwgMH0sCS8qIEluZGlnbyBESiovCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGpfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqX2RzcC5jCmluZGV4IDA4MzkyOTEuLjY4ZjNjOGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGpfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kal9kc3AuYwpAQCAtNTAsNyArNTAsNyBAQAogCWNoaXAtPmRldmljZV9pZCA9IGRldmljZV9pZDsKIAljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CiAJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKLQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfSU5ESUdPX0RKX0RTUF07CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX0lORElHT19ESl9EU1A7CiAJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCiAJICAgd29ya3MgT0sgKi8KIAljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CkBAIC02MCwxNSArNjAsMTkgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCiB7CiAJcmV0dXJuIEVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanguYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4LmMKaW5kZXggMmU0NDMxNi4uYjFlMzY1MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanguYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeC5jCkBAIC02OCw3ICs2OCw3IEBACiAJezAsICJpbmRpZ29fZGp4X2RzcC5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMEUwLCAwLCAwLCAwfSwJLyogSW5kaWdvIERKeCovCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanhfZHNwLmMKaW5kZXggZjU5MWZjMi4uYmI5NjMyYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanhfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanhfZHNwLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0lORElHT19ESlhfRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfSU5ESUdPX0RKWF9EU1A7CiAJLyogU2luY2UgdGhpcyBjYXJkIGhhcyBubyBBU0lDLCBtYXJrIGl0IGFzIGxvYWRlZCBzbyBldmVyeXRoaW5nCiAJICAgd29ya3MgT0sgKi8KIAljaGlwLT5hc2ljX2xvYWRlZCA9IFRSVUU7CkBAIC01OSwxMCArNTksMTMgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KKworCisKK3N0YXRpYyBpbnQgc2V0X21peGVyX2RlZmF1bHRzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIGluaXRfbGluZV9sZXZlbHMoY2hpcCk7Cit9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvLmMKaW5kZXggYTYwYzBhMC4uMTAzNTEyNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pby5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW8uYwpAQCAtNjksNyArNjksNyBAQAogCXswLCAiaW5kaWdvX2lvX2RzcC5mdyJ9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VjaG9faWRzKSA9IHsKIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMEEwLCAwLCAwLCAwfSwJLyogSW5kaWdvIElPKi8KIAl7MCx9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb19kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW9fZHNwLmMKaW5kZXggMDYwNGM4YS4uYmViOWE1YiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvX2RzcC5jCkBAIC01MCw3ICs1MCw3IEBACiAJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOwogCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKIAljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19JTkRJR09fSU9fRFNQXTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gRldfSU5ESUdPX0lPX0RTUDsKIAkvKiBTaW5jZSB0aGlzIGNhcmQgaGFzIG5vIEFTSUMsIG1hcmsgaXQgYXMgbG9hZGVkIHNvIGV2ZXJ5dGhpbmcKIAkgICB3b3JrcyBPSyAqLwogCWNoaXAtPmFzaWNfbG9hZGVkID0gVFJVRTsKQEAgLTYwLDE1ICs2MCwxOSBAQAogCQlyZXR1cm4gZXJyOwogCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwogCi0JaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KIAogCiAKK3N0YXRpYyBpbnQgc2V0X21peGVyX2RlZmF1bHRzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJcmV0dXJuIGluaXRfbGluZV9sZXZlbHMoY2hpcCk7Cit9CisKKworCiBzdGF0aWMgdTMyIGRldGVjdF9pbnB1dF9jbG9ja3MoY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKIHsKIAlyZXR1cm4gRUNIT19DTE9DS19CSVRfSU5URVJOQUw7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lveC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3guYwppbmRleCBlYjM4MTlmLi42MGI3Y2IyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lveC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94LmMKQEAgLTY5LDcgKzY5LDcgQEAKIAl7MCwgImluZGlnb19pb3hfZHNwLmZ3In0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfZWNob19pZHMpID0gewogCXsweDEwNTcsIDB4MzQxMCwgMHhFQ0MwLCAweDAwRDAsIDAsIDAsIDB9LAkvKiBJbmRpZ28gSU94ICovCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb3hfZHNwLmMKaW5kZXggZjM1NzUyMS4uMzk0YzZlNzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94X2RzcC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94X2RzcC5jCkBAIC00OCw3ICs0OCw3IEBACiAJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOwogCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKIAljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19JTkRJR09fSU9YX0RTUF07CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX0lORElHT19JT1hfRFNQOwogCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZwogCSAgIHdvcmtzIE9LICovCiAJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOwpAQCAtNTksMTAgKzU5LDEzIEBACiAJCXJldHVybiBlcnI7CiAJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CiAKLQllcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CisKKworCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjAuYwppbmRleCA1MDYxOTQ2Li44YzNmNWM1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjAuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjAuYwpAQCAtNzYsNyArNzYsNyBAQAogCXswLCAibGF5bGEyMF9hc2ljLmZ3In0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfZWNob19pZHMpID0gewogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwMzAsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgTGF5bGEyMCByZXYuMCAqLwogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwMzEsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgTGF5bGEyMCByZXYuMSAqLwogCXswLH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMF9kc3AuYwppbmRleCA4Mzc1MGU5Li41M2NlOTQ2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjBfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwX2RzcC5jCkBAIC0zMSw4ICszMSw3IEBACiAKIHN0YXRpYyBpbnQgcmVhZF9kc3Aoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyICpkYXRhKTsKIHN0YXRpYyBpbnQgc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjaGFyIHByb2YpOwotc3RhdGljIGludCBsb2FkX2FzaWNfZ2VuZXJpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY21kLAotCQkJICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmFzaWMpOworc3RhdGljIGludCBsb2FkX2FzaWNfZ2VuZXJpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MzIgY21kLCBzaG9ydCBhc2ljKTsKIHN0YXRpYyBpbnQgY2hlY2tfYXNpY19zdGF0dXMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCk7CiBzdGF0aWMgaW50IHVwZGF0ZV9mbGFncyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKIApAQCAtNTQsNyArNTMsNyBAQAogCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKIAljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOwogCWNoaXAtPmhhc19taWRpID0gVFJVRTsKLQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfTEFZTEEyMF9EU1BdOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSBGV19MQVlMQTIwX0RTUDsKIAljaGlwLT5pbnB1dF9jbG9ja190eXBlcyA9CiAJCUVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMIHwgRUNIT19DTE9DS19CSVRfU1BESUYgfAogCQlFQ0hPX0NMT0NLX0JJVF9XT1JEIHwgRUNIT19DTE9DS19CSVRfU1VQRVI7CkBAIC02NSwxNyArNjQsMjAgQEAKIAkJcmV0dXJuIGVycjsKIAljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKIAotCWlmICgoZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gc2V0X3Byb2Zlc3Npb25hbF9zcGRpZihjaGlwLCBUUlVFKTsKLQogCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKIAlyZXR1cm4gZXJyOwogfQogCiAKIAorc3RhdGljIGludCBzZXRfbWl4ZXJfZGVmYXVsdHMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBGQUxTRTsKKwlyZXR1cm4gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKK30KKworCisKIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewogCXUzMiBjbG9ja3NfZnJvbV9kc3AsIGNsb2NrX2JpdHM7CkBAIC0xNDQsNyArMTQ2LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAllcnIgPSBsb2FkX2FzaWNfZ2VuZXJpYyhjaGlwLCBEU1BfRk5DX0xPQURfTEFZTEFfQVNJQywKLQkJCQkmY2FyZF9md1tGV19MQVlMQTIwX0FTSUNdKTsKKwkJCQlGV19MQVlMQTIwX0FTSUMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjQuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNC5jCmluZGV4IGUwOWUzZWEuLmVkMWNjMGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNC5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJezAsICJsYXlsYTI0XzJTX2FzaWMuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDA2MCwgMCwgMCwgMH0sCS8qIERTUCA1NjM2MSBMYXlsYTI0IHJldi4wICovCiAJezAsfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNF9kc3AuYwppbmRleCBkNjFiNWNiLi44YzA0MTY0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjRfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTI0X2RzcC5jCkBAIC0zMiw4ICszMiw3IEBACiBzdGF0aWMgaW50IHNldF9pbnB1dF9jbG9jayhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgY2xvY2spOwogc3RhdGljIGludCBzZXRfcHJvZmVzc2lvbmFsX3NwZGlmKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIGNoYXIgcHJvZik7CiBzdGF0aWMgaW50IHNldF9kaWdpdGFsX21vZGUoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTggbW9kZSk7Ci1zdGF0aWMgaW50IGxvYWRfYXNpY19nZW5lcmljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiBjbWQsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYXNpYyk7CitzdGF0aWMgaW50IGxvYWRfYXNpY19nZW5lcmljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiBjbWQsIHNob3J0IGFzaWMpOwogc3RhdGljIGludCBjaGVja19hc2ljX3N0YXR1cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKIAogCkBAIC01NCw3ICs1Myw3IEBACiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CiAJY2hpcC0+aGFzX21pZGkgPSBUUlVFOwotCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19MQVlMQTI0X0RTUF07CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX0xBWUxBMjRfRFNQOwogCWNoaXAtPmlucHV0X2Nsb2NrX3R5cGVzID0KIAkJRUNIT19DTE9DS19CSVRfSU5URVJOQUwgfCBFQ0hPX0NMT0NLX0JJVF9TUERJRiB8CiAJCUVDSE9fQ0xPQ0tfQklUX1dPUkQgfCBFQ0hPX0NMT0NLX0JJVF9BREFUOwpAQCAtNjIsOSArNjEsNiBAQAogCQlFQ0hPQ0FQU19IQVNfRElHSVRBTF9NT0RFX1NQRElGX1JDQSB8CiAJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfU1BESUZfT1BUSUNBTCB8CiAJCUVDSE9DQVBTX0hBU19ESUdJVEFMX01PREVfQURBVDsKLQljaGlwLT5kaWdpdGFsX21vZGUgPQkJRElHSVRBTF9NT0RFX1NQRElGX1JDQTsKLQljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBGQUxTRTsKLQljaGlwLT5kaWdpdGFsX2luX2F1dG9tdXRlID0gVFJVRTsKIAogCWlmICgoZXJyID0gbG9hZF9maXJtd2FyZShjaGlwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtNzMsMTcgKzY5LDIyIEBACiAJaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBzZXRfZGlnaXRhbF9tb2RlKGNoaXAsIERJR0lUQUxfTU9ERV9TUERJRl9SQ0EpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWVyciA9IHNldF9wcm9mZXNzaW9uYWxfc3BkaWYoY2hpcCwgVFJVRSk7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KIAogCiAKK3N0YXRpYyBpbnQgc2V0X21peGVyX2RlZmF1bHRzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJY2hpcC0+ZGlnaXRhbF9tb2RlID0gRElHSVRBTF9NT0RFX1NQRElGX1JDQTsKKwljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBGQUxTRTsKKwljaGlwLT5kaWdpdGFsX2luX2F1dG9tdXRlID0gVFJVRTsKKwlyZXR1cm4gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKK30KKworCisKIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewogCXUzMiBjbG9ja3NfZnJvbV9kc3AsIGNsb2NrX2JpdHM7CkBAIC0xMjMsMTggKzEyNCwxOCBAQAogCiAJLyogTG9hZCB0aGUgQVNJQyBmb3IgdGhlIFBDSSBjYXJkICovCiAJZXJyID0gbG9hZF9hc2ljX2dlbmVyaWMoY2hpcCwgRFNQX0ZOQ19MT0FEX0xBWUxBMjRfUENJX0NBUkRfQVNJQywKLQkJCQkmY2FyZF9md1tGV19MQVlMQTI0XzFfQVNJQ10pOworCQkJCUZXX0xBWUxBMjRfMV9BU0lDKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWNoaXAtPmFzaWNfY29kZSA9ICZjYXJkX2Z3W0ZXX0xBWUxBMjRfMlNfQVNJQ107CisJY2hpcC0+YXNpY19jb2RlID0gRldfTEFZTEEyNF8yU19BU0lDOwogCiAJLyogTm93IGdpdmUgdGhlIG5ldyBBU0lDIGEgbGl0dGxlIHRpbWUgdG8gc2V0IHVwICovCiAJbWRlbGF5KDEwKTsKIAogCS8qIERvIHRoZSBleHRlcm5hbCBvbmUgKi8KIAllcnIgPSBsb2FkX2FzaWNfZ2VuZXJpYyhjaGlwLCBEU1BfRk5DX0xPQURfTEFZTEEyNF9FWFRFUk5BTF9BU0lDLAotCQkJCSZjYXJkX2Z3W0ZXX0xBWUxBMjRfMlNfQVNJQ10pOworCQkJCUZXX0xBWUxBMjRfMlNfQVNJQyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBGQUxTRTsKIApAQCAtMjk5LDcgKzMwMCw3IEBACiAvKiBEZXBlbmRpbmcgb24gd2hhdCBkaWdpdGFsIG1vZGUgeW91IHdhbnQsIExheWxhMjQgbmVlZHMgZGlmZmVyZW50IEFTSUNzCiBsb2FkZWQuICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgQVNJQyBuZWVkZWQgZm9yIHRoZSBuZXcgbW9kZSBhbmQgc2VlcwogaWYgaXQgbWF0Y2hlcyB0aGUgb25lIGFscmVhZHkgbG9hZGVkLiAqLwotc3RhdGljIGludCBzd2l0Y2hfYXNpYyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmFzaWMpCitzdGF0aWMgaW50IHN3aXRjaF9hc2ljKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHNob3J0IGFzaWMpCiB7CiAJczggKm1vbml0b3JzOwogCkBAIC0zMzUsNyArMzM2LDcgQEAKIHsKIAl1MzIgY29udHJvbF9yZWc7CiAJaW50IGVyciwgaW5jb21wYXRpYmxlX2Nsb2NrOwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYXNpYzsKKwlzaG9ydCBhc2ljOwogCiAJLyogU2V0IGNsb2NrIHRvICJpbnRlcm5hbCIgaWYgaXQncyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcgbW9kZSAqLwogCWluY29tcGF0aWJsZV9jbG9jayA9IEZBTFNFOwpAQCAtMzQ0LDEyICszNDUsMTIgQEAKIAljYXNlIERJR0lUQUxfTU9ERV9TUERJRl9SQ0E6CiAJCWlmIChjaGlwLT5pbnB1dF9jbG9jayA9PSBFQ0hPX0NMT0NLX0FEQVQpCiAJCQlpbmNvbXBhdGlibGVfY2xvY2sgPSBUUlVFOwotCQlhc2ljID0gJmNhcmRfZndbRldfTEFZTEEyNF8yU19BU0lDXTsKKwkJYXNpYyA9IEZXX0xBWUxBMjRfMlNfQVNJQzsKIAkJYnJlYWs7CiAJY2FzZSBESUdJVEFMX01PREVfQURBVDoKIAkJaWYgKGNoaXAtPmlucHV0X2Nsb2NrID09IEVDSE9fQ0xPQ0tfU1BESUYpCiAJCQlpbmNvbXBhdGlibGVfY2xvY2sgPSBUUlVFOwotCQlhc2ljID0gJmNhcmRfZndbRldfTEFZTEEyNF8yQV9BU0lDXTsKKwkJYXNpYyA9IEZXX0xBWUxBMjRfMkFfQVNJQzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJREVfQUNUKCgiRGlnaXRhbCBtb2RlIG5vdCBzdXBwb3J0ZWQ6ICVkXG4iLCBtb2RlKSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYS5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWEuYwppbmRleCBmMDVjOGMwLi5jYzJiYmZjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYS5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAl7MCwgIm1pYV9kc3AuZncifQogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lY2hvX2lkcykgPSB7CiAJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDA4MCwgMCwgMCwgMH0sCS8qIERTUCA1NjM2MSBNaWEgcmV2LjAgKi8KIAl7MHgxMDU3LCAweDM0MTAsIDB4RUNDMCwgMHgwMDgxLCAwLCAwLCAwfSwJLyogRFNQIDU2MzYxIE1pYSByZXYuMSAqLwogCXswLH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWFfZHNwLmMKaW5kZXggNTUxNDA1MS4uNmViZmE2ZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9taWFfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWFfZHNwLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CiAJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOwogCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7Ci0JY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX01JQV9EU1BdOworCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSBGV19NSUFfRFNQOwogCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZwogCSAgIHdvcmtzIE9LICovCiAJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOwpAQCAtNjYsMTUgKzY2LDE5IEBACiAJCXJldHVybiBlcnI7CiAJY2hpcC0+YmFkX2JvYXJkID0gRkFMU0U7CiAKLQlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpKQotCQlyZXR1cm4gZXJyOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CiAKIAogCitzdGF0aWMgaW50IHNldF9taXhlcl9kZWZhdWx0cyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQoreworCXJldHVybiBpbml0X2xpbmVfbGV2ZWxzKGNoaXApOworfQorCisKKwogc3RhdGljIHUzMiBkZXRlY3RfaW5wdXRfY2xvY2tzKGNvbnN0IHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCiB7CiAJdTMyIGNsb2Nrc19mcm9tX2RzcCwgY2xvY2tfYml0czsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbW9uYS5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9tb25hLmMKaW5kZXggYjA1YmFkOS4uM2U3ZTAxOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9tb25hLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9tb25hLmMKQEAgLTkyLDcgKzkyLDcgQEAKIAl7MCwgIm1vbmFfMl9hc2ljLmZ3In0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZWNob19pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfZWNob19pZHMpID0gewogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwNzAsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgTW9uYSByZXYuMCAqLwogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwNzEsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgTW9uYSByZXYuMSAqLwogCXsweDEwNTcsIDB4MTgwMSwgMHhFQ0MwLCAweDAwNzIsIDAsIDAsIDB9LAkvKiBEU1AgNTYzMDEgTW9uYSByZXYuMiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9tb25hX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9tb25hX2RzcC5jCmluZGV4IGVhYTYxOWIuLjZlNmE3ZWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbW9uYV9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21vbmFfZHNwLmMKQEAgLTMzLDggKzMzLDcgQEAKIHN0YXRpYyBpbnQgc2V0X2lucHV0X2Nsb2NrKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBjbG9jayk7CiBzdGF0aWMgaW50IHNldF9wcm9mZXNzaW9uYWxfc3BkaWYoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgY2hhciBwcm9mKTsKIHN0YXRpYyBpbnQgc2V0X2RpZ2l0YWxfbW9kZShzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1OCBtb2RlKTsKLXN0YXRpYyBpbnQgbG9hZF9hc2ljX2dlbmVyaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNtZCwKLQkJCSAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljKTsKK3N0YXRpYyBpbnQgbG9hZF9hc2ljX2dlbmVyaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTMyIGNtZCwgc2hvcnQgYXNpYyk7CiBzdGF0aWMgaW50IGNoZWNrX2FzaWNfc3RhdHVzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOwogCiAKQEAgLTY0LDMyICs2MywzMCBAQAogCiAJLyogTW9uYSBjb21lcyBpbiBib3RoICczMDEgYW5kICczNjEgZmxhdm9ycyAqLwogCWlmIChjaGlwLT5kZXZpY2VfaWQgPT0gREVWSUNFX0lEXzU2MzYxKQotCQljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfTU9OQV8zNjFfRFNQXTsKKwkJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX01PTkFfMzYxX0RTUDsKIAllbHNlCi0JCWNoaXAtPmRzcF9jb2RlX3RvX2xvYWQgPSAmY2FyZF9md1tGV19NT05BXzMwMV9EU1BdOwotCi0JY2hpcC0+ZGlnaXRhbF9tb2RlID0gRElHSVRBTF9NT0RFX1NQRElGX1JDQTsKLQljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBGQUxTRTsKLQljaGlwLT5kaWdpdGFsX2luX2F1dG9tdXRlID0gVFJVRTsKKwkJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9IEZXX01PTkFfMzAxX0RTUDsKIAogCWlmICgoZXJyID0gbG9hZF9maXJtd2FyZShjaGlwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOwogCi0JaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBzZXRfZGlnaXRhbF9tb2RlKGNoaXAsIERJR0lUQUxfTU9ERV9TUERJRl9SQ0EpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWVyciA9IHNldF9wcm9mZXNzaW9uYWxfc3BkaWYoY2hpcCwgVFJVRSk7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KIAogCiAKK3N0YXRpYyBpbnQgc2V0X21peGVyX2RlZmF1bHRzKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApCit7CisJY2hpcC0+ZGlnaXRhbF9tb2RlID0gRElHSVRBTF9NT0RFX1NQRElGX1JDQTsKKwljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBGQUxTRTsKKwljaGlwLT5kaWdpdGFsX2luX2F1dG9tdXRlID0gVFJVRTsKKwlyZXR1cm4gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKK30KKworCisKIHN0YXRpYyB1MzIgZGV0ZWN0X2lucHV0X2Nsb2Nrcyhjb25zdCBzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKQogewogCXUzMiBjbG9ja3NfZnJvbV9kc3AsIGNsb2NrX2JpdHM7CkBAIC0xMjAsNyArMTE3LDcgQEAKIHsKIAl1MzIgY29udHJvbF9yZWc7CiAJaW50IGVycjsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmFzaWM7CisJc2hvcnQgYXNpYzsKIAogCWlmIChjaGlwLT5hc2ljX2xvYWRlZCkKIAkJcmV0dXJuIDA7CkBAIC0xMjgsOSArMTI1LDkgQEAKIAltZGVsYXkoMTApOwogCiAJaWYgKGNoaXAtPmRldmljZV9pZCA9PSBERVZJQ0VfSURfNTYzNjEpCi0JCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzM2MV8xX0FTSUM0OF07CisJCWFzaWMgPSBGV19NT05BXzM2MV8xX0FTSUM0ODsKIAllbHNlCi0JCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzMwMV8xX0FTSUM0OF07CisJCWFzaWMgPSBGV19NT05BXzMwMV8xX0FTSUM0ODsKIAogCWVyciA9IGxvYWRfYXNpY19nZW5lcmljKGNoaXAsIERTUF9GTkNfTE9BRF9NT05BX1BDSV9DQVJEX0FTSUMsIGFzaWMpOwogCWlmIChlcnIgPCAwKQpAQCAtMTQxLDcgKzEzOCw3IEBACiAKIAkvKiBEbyB0aGUgZXh0ZXJuYWwgb25lICovCiAJZXJyID0gbG9hZF9hc2ljX2dlbmVyaWMoY2hpcCwgRFNQX0ZOQ19MT0FEX01PTkFfRVhURVJOQUxfQVNJQywKLQkJCQkmY2FyZF9md1tGV19NT05BXzJfQVNJQ10pOworCQkJCUZXX01PTkFfMl9BU0lDKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMTY1LDIyICsxNjIsMjIgQEAKIGlmIGl0IG1hdGNoZXMgdGhlIG9uZSBhbHJlYWR5IGxvYWRlZC4gKi8KIHN0YXRpYyBpbnQgc3dpdGNoX2FzaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgY2hhciBkb3VibGVfc3BlZWQpCiB7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljOwogCWludCBlcnI7CisJc2hvcnQgYXNpYzsKIAogCS8qIENoZWNrIHRoZSBjbG9jayBkZXRlY3QgYml0cyB0byBzZWUgaWYgdGhpcyBpcwogCWEgc2luZ2xlLXNwZWVkIGNsb2NrIG9yIGEgZG91YmxlLXNwZWVkIGNsb2NrOyBsb2FkCiAJYSBuZXcgQVNJQyBpZiBuZWNlc3NhcnkuICovCiAJaWYgKGNoaXAtPmRldmljZV9pZCA9PSBERVZJQ0VfSURfNTYzNjEpIHsKIAkJaWYgKGRvdWJsZV9zcGVlZCkKLQkJCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzM2MV8xX0FTSUM5Nl07CisJCQlhc2ljID0gRldfTU9OQV8zNjFfMV9BU0lDOTY7CiAJCWVsc2UKLQkJCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzM2MV8xX0FTSUM0OF07CisJCQlhc2ljID0gRldfTU9OQV8zNjFfMV9BU0lDNDg7CiAJfSBlbHNlIHsKIAkJaWYgKGRvdWJsZV9zcGVlZCkKLQkJCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzMwMV8xX0FTSUM5Nl07CisJCQlhc2ljID0gRldfTU9OQV8zMDFfMV9BU0lDOTY7CiAJCWVsc2UKLQkJCWFzaWMgPSAmY2FyZF9md1tGV19NT05BXzMwMV8xX0FTSUM0OF07CisJCQlhc2ljID0gRldfTU9OQV8zMDFfMV9BU0lDNDg7CiAJfQogCiAJaWYgKGFzaWMgIT0gY2hpcC0+YXNpY19jb2RlKSB7CkBAIC0yMDAsNyArMTk3LDcgQEAKIHN0YXRpYyBpbnQgc2V0X3NhbXBsZV9yYXRlKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiByYXRlKQogewogCXUzMiBjb250cm9sX3JlZywgY2xvY2s7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICphc2ljOworCXNob3J0IGFzaWM7CiAJY2hhciBmb3JjZV93cml0ZTsKIAogCS8qIE9ubHkgc2V0IHRoZSBjbG9jayBmb3IgaW50ZXJuYWwgbW9kZS4gKi8KQEAgLTIxOCwxNCArMjE1LDE0IEBACiAJCWlmIChjaGlwLT5kaWdpdGFsX21vZGUgPT0gRElHSVRBTF9NT0RFX0FEQVQpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGNoaXAtPmRldmljZV9pZCA9PSBERVZJQ0VfSURfNTYzNjEpCi0JCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zNjFfMV9BU0lDOTZdOworCQkJYXNpYyA9IEZXX01PTkFfMzYxXzFfQVNJQzk2OwogCQllbHNlCi0JCQlhc2ljID0gJmNhcmRfZndbRldfTU9OQV8zMDFfMV9BU0lDOTZdOworCQkJYXNpYyA9IEZXX01PTkFfMzAxXzFfQVNJQzk2OwogCX0gZWxzZSB7CiAJCWlmIChjaGlwLT5kZXZpY2VfaWQgPT0gREVWSUNFX0lEXzU2MzYxKQotCQkJYXNpYyA9ICZjYXJkX2Z3W0ZXX01PTkFfMzYxXzFfQVNJQzQ4XTsKKwkJCWFzaWMgPSBGV19NT05BXzM2MV8xX0FTSUM0ODsKIAkJZWxzZQotCQkJYXNpYyA9ICZjYXJkX2Z3W0ZXX01PTkFfMzAxXzFfQVNJQzQ4XTsKKwkJCWFzaWMgPSBGV19NT05BXzMwMV8xX0FTSUM0ODsKIAl9CiAKIAlmb3JjZV93cml0ZSA9IDA7CkBAIC00MTAsOCArNDA3LDggQEAKIAljYXNlIERJR0lUQUxfTU9ERV9BREFUOgogCQkvKiBJZiB0aGUgY3VycmVudCBBU0lDIGlzIHRoZSA5NktIeiBBU0lDLCBzd2l0Y2ggdGhlIEFTSUMKIAkJICAgYW5kIHNldCB0byA0OCBLSHogKi8KLQkJaWYgKGNoaXAtPmFzaWNfY29kZSA9PSAmY2FyZF9md1tGV19NT05BXzM2MV8xX0FTSUM5Nl0gfHwKLQkJICAgIGNoaXAtPmFzaWNfY29kZSA9PSAmY2FyZF9md1tGV19NT05BXzMwMV8xX0FTSUM5Nl0pIHsKKwkJaWYgKGNoaXAtPmFzaWNfY29kZSA9PSBGV19NT05BXzM2MV8xX0FTSUM5NiB8fAorCQkgICAgY2hpcC0+YXNpY19jb2RlID09IEZXX01PTkFfMzAxXzFfQVNJQzk2KSB7CiAJCQlzZXRfc2FtcGxlX3JhdGUoY2hpcCwgNDgwMDApOwogCQl9CiAJCWNvbnRyb2xfcmVnIHw9IEdNTF9BREFUX01PREU7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKaW5kZXggMTY4YWY2Ny4uNDIwMzc4MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYwpAQCAtNzYsNyArNzYsNyBAQAogLyoKICAqIENsYXNzIDA0MDE6IDExMDI6MDAwOCAocmV2IDAwKSBTdWJzeXN0ZW06IDExMDI6MTAwMSAtPiBBdWRpZ3kyIFZhbHVlICBNb2RlbDpTQjA0MDAKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lbXUxMGsxX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lbXUxMGsxX2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShDUkVBVElWRSwgMHgwMDAyKSwgMCB9LAkvKiBFTVUxMEsxICovCiAJeyBQQ0lfVkRFVklDRShDUkVBVElWRSwgMHgwMDA0KSwgMSB9LAkvKiBBdWRpZ3kgKi8KIAl7IFBDSV9WREVWSUNFKENSRUFUSVZFLCAweDAwMDgpLCAxIH0sCS8qIEF1ZGlneSAyIFZhbHVlIFNCMDQwMCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKaW5kZXggMWQzNjlmZi4uZGY0N2Y3MyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCkBAIC0xNjA1LDcgKzE2MDUsNyBAQAogfQogCiAvLyBQQ0kgSURzCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VtdTEwazF4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lbXUxMGsxeF9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoQ1JFQVRJVkUsIDB4MDAwNiksIDAgfSwJLyogRGVsbCBPRU0gdmVyc2lvbiAoRU1VMTBLMSkgKi8KIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW5zMTM3MC5jIGIvc291bmQvcGNpL2VuczEzNzAuYwppbmRleCAyYjgyYzVjLi5jN2ZiYTUzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW5zMTM3MC5jCisrKyBiL3NvdW5kL3BjaS9lbnMxMzcwLmMKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2F1ZGlvcGNpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2F1ZGlvcGNpX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9hdWRpb3BjaV9pZHMpID0gewogI2lmZGVmIENISVAxMzcwCiAJeyBQQ0lfVkRFVklDRShFTlNPTklRLCAweDUwMDApLCAwLCB9LAkvKiBFUzEzNzAgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VzMTkzOC5jIGIvc291bmQvcGNpL2VzMTkzOC5jCmluZGV4IGZiODNlMWYuLjU1M2I3NTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5MzguYworKysgYi9zb3VuZC9wY2kvZXMxOTM4LmMKQEAgLTI0Myw3ICsyNDMsNyBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX2VzMTkzOF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lczE5MzhfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2VzMTkzOF9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoRVNTLCAweDE5NjkpLCAwLCB9LCAgIC8qIFNvbG8tMSAqLwogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lczE5NjguYyBiL3NvdW5kL3BjaS9lczE5NjguYwppbmRleCBhMTFmNDUzLi5lY2FlYTlmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZXMxOTY4LmMKKysrIGIvc291bmQvcGNpL2VzMTk2OC5jCkBAIC01NTEsNyArNTUxLDcgQEAKIAogc3RhdGljIGlycXJldHVybl90IHNuZF9lczE5NjhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZXMxOTY4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9lczE5NjhfaWRzKSA9IHsKIAkvKiBNYWVzdHJvIDEgKi8KICAgICAgICAgeyAweDEyODUsIDB4MDEwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwgMHhmZmZmMDAsIFRZUEVfTUFFU1RSTyB9LAogCS8qIE1hZXN0cm8gMiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ZtODAxLmMgYi9zb3VuZC9wY2kvZm04MDEuYwppbmRleCA4MzUwOGIzLi5lMWJhYWQ3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZm04MDEuYworKysgYi9zb3VuZC9wY2kvZm04MDEuYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfZm04MDFfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2ZtODAxX2lkcykgPSB7CiAJeyAweDEzMTksIDB4MDgwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwgMHhmZmZmMDAsIDAsIH0sICAgLyogRk04MDEgKi8KIAl7IDB4NTIxMywgMHgwNTEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfTVVMVElNRURJQV9BVURJTyA8PCA4LCAweGZmZmYwMCwgMCwgfSwgICAvKiBHYWxsYW50IE9keXNzZXkgU291bmQgNCAqLwogCXsgMCwgfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggZjk4YjQ3Yy4uNzZkM2M0YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCkBAIC04MjQsNiArODI0LDkgQEAKIAlzdHJ1Y3QgaGRhX3BpbmNmZyAqcGluOwogCXVuc2lnbmVkIGludCBvbGRjZmc7CiAKKwlpZiAoZ2V0X3djYXBzX3R5cGUoZ2V0X3djYXBzKGNvZGVjLCBuaWQpKSAhPSBBQ19XSURfUElOKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW9sZGNmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAlwaW4gPSBsb29rX3VwX3BpbmNmZyhjb2RlYywgbGlzdCwgbmlkKTsKIAlpZiAoIXBpbikgewpAQCAtODk5LDYgKzkwMiwyNSBAQAogCX0KIH0KIAorLyoqCisgKiBzbmRfaGRhX3NodXR1cF9waW5zIC0gU2h1dCB1cCBhbGwgcGlucworICogQGNvZGVjOiB0aGUgSERBIGNvZGVjCisgKgorICogQ2xlYXIgYWxsIHBpbiBjb250cm9scyB0byBzaHVwIHVwIGJlZm9yZSBzdXNwZW5kIGZvciBhdm9pZGluZyBjbGljayBub2lzZS4KKyAqIFRoZSBjb250cm9scyBhcmVuJ3QgY2FjaGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcmVzdW1lZCBwcm9wZXJseS4KKyAqLwordm9pZCBzbmRfaGRhX3NodXR1cF9waW5zKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+aW5pdF9waW5zLnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX3BpbmNmZyAqcGluID0gc25kX2FycmF5X2VsZW0oJmNvZGVjLT5pbml0X3BpbnMsIGkpOworCQkvKiB1c2UgcmVhZCBoZXJlIGZvciBzeW5jaW5nIGFmdGVyIGlzc3VpbmcgZWFjaCB2ZXJiICovCisJCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgcGluLT5uaWQsIDAsCisJCQkJICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX3NodXR1cF9waW5zKTsKKwogc3RhdGljIHZvaWQgaW5pdF9oZGFfY2FjaGUoc3RydWN0IGhkYV9jYWNoZV9yZWMgKmNhY2hlLAogCQkJICAgdW5zaWduZWQgaW50IHJlY29yZF9zaXplKTsKIHN0YXRpYyB2b2lkIGZyZWVfaGRhX2NhY2hlKHN0cnVjdCBoZGFfY2FjaGVfcmVjICpjYWNoZSk7CkBAIC05MzEsNiArOTUzLDcgQEAKICNlbmRpZgogCWxpc3RfZGVsKCZjb2RlYy0+bGlzdCk7CiAJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5taXhlcnMpOworCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+bmlkcyk7CiAJY29kZWMtPmJ1cy0+Y2FkZHJfdGJsW2NvZGVjLT5hZGRyXSA9IE5VTEw7CiAJaWYgKGNvZGVjLT5wYXRjaF9vcHMuZnJlZSkKIAkJY29kZWMtPnBhdGNoX29wcy5mcmVlKGNvZGVjKTsKQEAgLTk4NSw3ICsxMDA4LDggQEAKIAltdXRleF9pbml0KCZjb2RlYy0+Y29udHJvbF9tdXRleCk7CiAJaW5pdF9oZGFfY2FjaGUoJmNvZGVjLT5hbXBfY2FjaGUsIHNpemVvZihzdHJ1Y3QgaGRhX2FtcF9pbmZvKSk7CiAJaW5pdF9oZGFfY2FjaGUoJmNvZGVjLT5jbWRfY2FjaGUsIHNpemVvZihzdHJ1Y3QgaGRhX2NhY2hlX2hlYWQpKTsKLQlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPm1peGVycywgc2l6ZW9mKHN0cnVjdCBoZGFfbmlkX2l0ZW0pLCA2MCk7CisJc25kX2FycmF5X2luaXQoJmNvZGVjLT5taXhlcnMsIHNpemVvZihzdHJ1Y3QgaGRhX25pZF9pdGVtKSwgMzIpOworCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+bmlkcywgc2l6ZW9mKHN0cnVjdCBoZGFfbmlkX2l0ZW0pLCAzMik7CiAJc25kX2FycmF5X2luaXQoJmNvZGVjLT5pbml0X3BpbnMsIHNpemVvZihzdHJ1Y3QgaGRhX3BpbmNmZyksIDE2KTsKIAlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPmRyaXZlcl9waW5zLCBzaXplb2Yoc3RydWN0IGhkYV9waW5jZmcpLCAxNik7CiAJaWYgKGNvZGVjLT5idXMtPm1vZGVsbmFtZSkgewpAQCAtMTcwOCw3ICsxNzMyLDcgQEAKIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfZmluZF9taXhlcl9jdGwpOwogCiAvKioKLSAqIHNuZF9oZGFfY3RsLWFkZCAtIEFkZCBhIGNvbnRyb2wgZWxlbWVudCBhbmQgYXNzaWduIHRvIHRoZSBjb2RlYworICogc25kX2hkYV9jdGxfYWRkIC0gQWRkIGEgY29udHJvbCBlbGVtZW50IGFuZCBhc3NpZ24gdG8gdGhlIGNvZGVjCiAgKiBAY29kZWM6IEhELWF1ZGlvIGNvZGVjCiAgKiBAbmlkOiBjb3JyZXNwb25kaW5nIE5JRCAob3B0aW9uYWwpCiAgKiBAa2N0bDogdGhlIGNvbnRyb2wgZWxlbWVudCB0byBhc3NpZ24KQEAgLTE3MjMsMTkgKzE3NDcsMjUgQEAKICAqCiAgKiBzbmRfaGRhX2N0bF9hZGQoKSBjaGVja3MgdGhlIGNvbnRyb2wgc3ViZGV2IGlkIGZpZWxkIHdoZXRoZXIKICAqICNIREFfU1VCREVWX05JRF9GTEFHIGJpdCBpcyBzZXQuICBJZiBzZXQgKGFuZCBAbmlkIGlzIHplcm8pLCB0aGUgbG93ZXIKLSAqIGJpdHMgdmFsdWUgaXMgdGFrZW4gYXMgdGhlIE5JRCB0byBhc3NpZ24uCisgKiBiaXRzIHZhbHVlIGlzIHRha2VuIGFzIHRoZSBOSUQgdG8gYXNzaWduLiBUaGUgI0hEQV9OSURfSVRFTV9BTVAgYml0CisgKiBzcGVjaWZpZXMgaWYga2N0bC0+cHJpdmF0ZV92YWx1ZSBpcyBhIEhEQSBhbXBsaWZpZXIgdmFsdWUuCiAgKi8KIGludCBzbmRfaGRhX2N0bF9hZGQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCiAJCSAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsKQogewogCWludCBlcnI7CisJdW5zaWduZWQgc2hvcnQgZmxhZ3MgPSAwOwogCXN0cnVjdCBoZGFfbmlkX2l0ZW0gKml0ZW07CiAKLQlpZiAoa2N0bC0+aWQuc3ViZGV2aWNlICYgSERBX1NVQkRFVl9OSURfRkxBRykgeworCWlmIChrY3RsLT5pZC5zdWJkZXZpY2UgJiBIREFfU1VCREVWX0FNUF9GTEFHKSB7CisJCWZsYWdzIHw9IEhEQV9OSURfSVRFTV9BTVA7CiAJCWlmIChuaWQgPT0gMCkKLQkJCW5pZCA9IGtjdGwtPmlkLnN1YmRldmljZSAmIDB4ZmZmZjsKLQkJa2N0bC0+aWQuc3ViZGV2aWNlID0gMDsKKwkJCW5pZCA9IGdldF9hbXBfbmlkXyhrY3RsLT5wcml2YXRlX3ZhbHVlKTsKIAl9CisJaWYgKChrY3RsLT5pZC5zdWJkZXZpY2UgJiBIREFfU1VCREVWX05JRF9GTEFHKSAhPSAwICYmIG5pZCA9PSAwKQorCQluaWQgPSBrY3RsLT5pZC5zdWJkZXZpY2UgJiAweGZmZmY7CisJaWYgKGtjdGwtPmlkLnN1YmRldmljZSAmIChIREFfU1VCREVWX05JRF9GTEFHfEhEQV9TVUJERVZfQU1QX0ZMQUcpKQorCQlrY3RsLT5pZC5zdWJkZXZpY2UgPSAwOwogCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5idXMtPmNhcmQsIGtjdGwpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMTc0NCwxMSArMTc3NCw0MSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlpdGVtLT5rY3RsID0ga2N0bDsKIAlpdGVtLT5uaWQgPSBuaWQ7CisJaXRlbS0+ZmxhZ3MgPSBmbGFnczsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY3RsX2FkZCk7CiAKIC8qKgorICogc25kX2hkYV9hZGRfbmlkIC0gQXNzaWduIGEgTklEIHRvIGEgY29udHJvbCBlbGVtZW50CisgKiBAY29kZWM6IEhELWF1ZGlvIGNvZGVjCisgKiBAbmlkOiBjb3JyZXNwb25kaW5nIE5JRCAob3B0aW9uYWwpCisgKiBAa2N0bDogdGhlIGNvbnRyb2wgZWxlbWVudCB0byBhc3NpZ24KKyAqIEBpbmRleDogaW5kZXggdG8ga2N0bAorICoKKyAqIEFkZCB0aGUgZ2l2ZW4gY29udHJvbCBlbGVtZW50IHRvIGFuIGFycmF5IGluc2lkZSB0aGUgY29kZWMgaW5zdGFuY2UuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiAjc25kX2hkYV9jdGxfYWRkIGNhbm5vdCBiZSB1c2VkIGZvciAxOjEKKyAqIE5JRDpLQ1RMIG1hcHBpbmcgLSBmb3IgZXhhbXBsZSAiQ2FwdHVyZSBTb3VyY2UiIHNlbGVjdG9yLgorICovCitpbnQgc25kX2hkYV9hZGRfbmlkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLAorCQkgICAgdW5zaWduZWQgaW50IGluZGV4LCBoZGFfbmlkX3QgbmlkKQoreworCXN0cnVjdCBoZGFfbmlkX2l0ZW0gKml0ZW07CisKKwlpZiAobmlkID4gMCkgeworCQlpdGVtID0gc25kX2FycmF5X25ldygmY29kZWMtPm5pZHMpOworCQlpZiAoIWl0ZW0pCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJaXRlbS0+a2N0bCA9IGtjdGw7CisJCWl0ZW0tPmluZGV4ID0gaW5kZXg7CisJCWl0ZW0tPm5pZCA9IG5pZDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9hZGRfbmlkKTsKKworLyoqCiAgKiBzbmRfaGRhX2N0bHNfY2xlYXIgLSBDbGVhciBhbGwgY29udHJvbHMgYXNzaWduZWQgdG8gdGhlIGdpdmVuIGNvZGVjCiAgKiBAY29kZWM6IEhELWF1ZGlvIGNvZGVjCiAgKi8KQEAgLTE3NTksNiArMTgxOSw3IEBACiAJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5taXhlcnMudXNlZDsgaSsrKQogCQlzbmRfY3RsX3JlbW92ZShjb2RlYy0+YnVzLT5jYXJkLCBpdGVtc1tpXS5rY3RsKTsKIAlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPm1peGVycyk7CisJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5uaWRzKTsKIH0KIAogLyogcHNldWRvIGRldmljZSBsb2NraW5nCkBAIC0yNzA2LDcgKzI3NjcsOCBAQAogCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgZmcsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLAogCQkJICAgIHBvd2VyX3N0YXRlKTsKIAkvKiBwYXJ0aWFsIHdvcmthcm91bmQgZm9yICJhenhfZ2V0X3Jlc3BvbnNlIHRpbWVvdXQiICovCi0JaWYgKHBvd2VyX3N0YXRlID09IEFDX1BXUlNUX0QwKQorCWlmIChwb3dlcl9zdGF0ZSA9PSBBQ19QV1JTVF9EMCAmJgorCSAgICAoY29kZWMtPnZlbmRvcl9pZCAmIDB4ZmZmZjAwMDApID09IDB4MTRmMTAwMDApCiAJCW1zbGVlcCgxMCk7CiAKIAluaWQgPSBjb2RlYy0+c3RhcnRfbmlkOwpAQCAtMjc0MCw3ICsyODAyLDYgQEAKIAlpZiAocG93ZXJfc3RhdGUgPT0gQUNfUFdSU1RfRDApIHsKIAkJdW5zaWduZWQgbG9uZyBlbmRfdGltZTsKIAkJaW50IHN0YXRlOwotCQltc2xlZXAoMTApOwogCQkvKiB3YWl0IHVudGlsIHRoZSBjb2RlYyByZWFjaHMgdG8gRDAgKi8KIAkJZW5kX3RpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MDApOwogCQlkbyB7CkBAIC0zMjE0LDYgKzMyNzUsOCBAQAogCiAvKgogICogZ2V0IHRoZSBlbXB0eSBQQ00gZGV2aWNlIG51bWJlciB0byBhc3NpZ24KKyAqCisgKiBub3RlIHRoZSBtYXggZGV2aWNlIG51bWJlciBpcyBsaW1pdGVkIGJ5IEhEQV9NQVhfUENNUywgY3VycmVudGx5IDEwCiAgKi8KIHN0YXRpYyBpbnQgZ2V0X2VtcHR5X3BjbV9kZXZpY2Uoc3RydWN0IGhkYV9idXMgKmJ1cywgaW50IHR5cGUpCiB7CkBAIC0zNDc4LDYgKzM1NDEsOCBAQAogCiAJZm9yICg7IGtuZXctPm5hbWU7IGtuZXcrKykgewogCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCQlpZiAoa25ldy0+aWZhY2UgPT0gLTEpCS8qIHNraXAgdGhpcyBjb2RlYyBwcml2YXRlIHZhbHVlICovCisJCQljb250aW51ZTsKIAkJa2N0bCA9IHNuZF9jdGxfbmV3MShrbmV3LCBjb2RlYyk7CiAJCWlmICgha2N0bCkKIAkJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKaW5kZXggMGE3NzBhMi4uYjc1ZGE0NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCkBAIC01MjcsNiArNTI3LDkgQEAKIC8qIG1heC4gY29kZWMgYWRkcmVzcyAqLwogI2RlZmluZSBIREFfTUFYX0NPREVDX0FERFJFU1MJMHgwZgogCisvKiBtYXggbnVtYmVyIG9mIFBDTSBkZXZpY3MgcGVyIGNhcmQgKi8KKyNkZWZpbmUgSERBX01BWF9QQ01TCQkxMAorCiAvKgogICogZ2VuZXJpYyBhcnJheXMKICAqLwpAQCAtNzg5LDYgKzc5Miw3IEBACiAJdTMyICp3Y2FwczsKIAogCXN0cnVjdCBzbmRfYXJyYXkgbWl4ZXJzOwkvKiBsaXN0IG9mIGFzc2lnbmVkIG1peGVyIGVsZW1lbnRzICovCisJc3RydWN0IHNuZF9hcnJheSBuaWRzOwkJLyogbGlzdCBvZiBtYXBwZWQgbWl4ZXIgZWxlbWVudHMgKi8KIAogCXN0cnVjdCBoZGFfY2FjaGVfcmVjIGFtcF9jYWNoZTsJLyogY2FjaGUgZm9yIGFtcCBhY2Nlc3MgKi8KIAlzdHJ1Y3QgaGRhX2NhY2hlX3JlYyBjbWRfY2FjaGU7CS8qIGNhY2hlIGZvciBvdGhlciBjb21tYW5kcyAqLwpAQCAtODk4LDYgKzkwMiw3IEBACiAJCQkgICAgIHVuc2lnbmVkIGludCBjZmcpOwogaW50IHNuZF9oZGFfYWRkX3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IHNuZF9hcnJheSAqbGlzdCwKIAkJICAgICAgIGhkYV9uaWRfdCBuaWQsIHVuc2lnbmVkIGludCBjZmcpOyAvKiBmb3IgaHdkZXAgKi8KK3ZvaWQgc25kX2hkYV9zaHV0dXBfcGlucyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAKIC8qCiAgKiBNaXhlcgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jIGIvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jCmluZGV4IDA5MmM2YTcuLjVlYTIxMjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMKQEAgLTg2MSw3ICs4NjEsOCBAQAogCX0KIAogCS8qIGNyZWF0ZSBpbnB1dCBNVVggaWYgbXVsdGlwbGUgc291cmNlcyBhcmUgYXZhaWxhYmxlICovCi0JZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCAwLCBzbmRfY3RsX25ldzEoJmNhcF9zZWwsIGNvZGVjKSk7CisJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCBzcGVjLT5hZGNfbm9kZS0+bmlkLAorCQkJICAgICAgc25kX2N0bF9uZXcxKCZjYXBfc2VsLCBjb2RlYykpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYwppbmRleCA0MGNjYjQxLi5hMWZjODM3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMKQEAgLTI5Myw4ICsyOTMsMTEgQEAKIHsJCQkJCQkJCVwKIAlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsJCVwKLQljaGFyICphZnRlcjsJCQkJCQlcCi0JY29kZWMtPnR5cGUgPSBzaW1wbGVfc3RydG91bChidWYsICZhZnRlciwgMCk7CQlcCisJdW5zaWduZWQgbG9uZyB2YWw7CQkJCQlcCisJaW50IGVyciA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCk7CQkJXAorCWlmIChlcnIgPCAwKQkJCQkJCVwKKwkJcmV0dXJuIGVycjsJCQkJCVwKKwljb2RlYy0+dHlwZSA9IHZhbDsJCQkJCVwKIAlyZXR1cm4gY291bnQ7CQkJCQkJXAogfQogCkBAIC02MjIsNiArNjI1LDEwIEBACiAJTElORV9NT0RFX1BJTkNGRywKIAlMSU5FX01PREVfVkVSQiwKIAlMSU5FX01PREVfSElOVCwKKwlMSU5FX01PREVfVkVORE9SX0lELAorCUxJTkVfTU9ERV9TVUJTWVNURU1fSUQsCisJTElORV9NT0RFX1JFVklTSU9OX0lELAorCUxJTkVfTU9ERV9DSElQX05BTUUsCiAJTlVNX0xJTkVfTU9ERVMsCiB9OwogCkBAIC02NTEsNTMgKzY1OCw3MSBAQAogfQogCiAvKiBwYXJzZSB0aGUgY29udGVudHMgYWZ0ZXIgdGhlIG90aGVyIGNvbW1hbmQgdGFncywgW3BpbmNmZ10sIFt2ZXJiXSwKLSAqIFtoaW50XSBhbmQgW21vZGVsXQorICogW3ZlbmRvcl9pZF0sIFtzdWJzeXN0ZW1faWRdLCBbcmV2aXNpb25faWRdLCBbY2hpcF9uYW1lXSwgW2hpbnRdIGFuZCBbbW9kZWxdCiAgKiBqdXN0IHBhc3MgdG8gdGhlIHN5c2ZzIGhlbHBlciAob25seSB3aGVuIGFueSBjb2RlYyB3YXMgc3BlY2lmaWVkKQogICovCiBzdGF0aWMgdm9pZCBwYXJzZV9waW5jZmdfbW9kZShjaGFyICpidWYsIHN0cnVjdCBoZGFfYnVzICpidXMsCiAJCQkgICAgICBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKQogewotCWlmICghKmNvZGVjcCkKLQkJcmV0dXJuOwogCXBhcnNlX3VzZXJfcGluX2NvbmZpZ3MoKmNvZGVjcCwgYnVmKTsKIH0KIAogc3RhdGljIHZvaWQgcGFyc2VfdmVyYl9tb2RlKGNoYXIgKmJ1Ziwgc3RydWN0IGhkYV9idXMgKmJ1cywKIAkJCSAgICBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKQogewotCWlmICghKmNvZGVjcCkKLQkJcmV0dXJuOwogCXBhcnNlX2luaXRfdmVyYnMoKmNvZGVjcCwgYnVmKTsKIH0KIAogc3RhdGljIHZvaWQgcGFyc2VfaGludF9tb2RlKGNoYXIgKmJ1Ziwgc3RydWN0IGhkYV9idXMgKmJ1cywKIAkJCSAgICBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKQogewotCWlmICghKmNvZGVjcCkKLQkJcmV0dXJuOwogCXBhcnNlX2hpbnRzKCpjb2RlY3AsIGJ1Zik7CiB9CiAKIHN0YXRpYyB2b2lkIHBhcnNlX21vZGVsX21vZGUoY2hhciAqYnVmLCBzdHJ1Y3QgaGRhX2J1cyAqYnVzLAogCQkJICAgICBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKQogewotCWlmICghKmNvZGVjcCkKLQkJcmV0dXJuOwogCWtmcmVlKCgqY29kZWNwKS0+bW9kZWxuYW1lKTsKIAkoKmNvZGVjcCktPm1vZGVsbmFtZSA9IGtzdHJkdXAoYnVmLCBHRlBfS0VSTkVMKTsKIH0KIAorc3RhdGljIHZvaWQgcGFyc2VfY2hpcF9uYW1lX21vZGUoY2hhciAqYnVmLCBzdHJ1Y3QgaGRhX2J1cyAqYnVzLAorCQkJCSBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKQoreworCWtmcmVlKCgqY29kZWNwKS0+Y2hpcF9uYW1lKTsKKwkoKmNvZGVjcCktPmNoaXBfbmFtZSA9IGtzdHJkdXAoYnVmLCBHRlBfS0VSTkVMKTsKK30KKworI2RlZmluZSBERUZJTkVfUEFSU0VfSURfTU9ERShuYW1lKSBcCitzdGF0aWMgdm9pZCBwYXJzZV8jI25hbWUjI19tb2RlKGNoYXIgKmJ1Ziwgc3RydWN0IGhkYV9idXMgKmJ1cywgXAorCQkJCSBzdHJ1Y3QgaGRhX2NvZGVjICoqY29kZWNwKSBcCit7IFwKKwl1bnNpZ25lZCBsb25nIHZhbDsgXAorCWlmICghc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKSkgXAorCQkoKmNvZGVjcCktPm5hbWUgPSB2YWw7IFwKK30KKworREVGSU5FX1BBUlNFX0lEX01PREUodmVuZG9yX2lkKTsKK0RFRklORV9QQVJTRV9JRF9NT0RFKHN1YnN5c3RlbV9pZCk7CitERUZJTkVfUEFSU0VfSURfTU9ERShyZXZpc2lvbl9pZCk7CisKKwogc3RydWN0IGhkYV9wYXRjaF9pdGVtIHsKIAljb25zdCBjaGFyICp0YWc7CiAJdm9pZCAoKnBhcnNlcikoY2hhciAqYnVmLCBzdHJ1Y3QgaGRhX2J1cyAqYnVzLCBzdHJ1Y3QgaGRhX2NvZGVjICoqcmV0Yyk7CisJaW50IG5lZWRfY29kZWM7CiB9OwogCiBzdGF0aWMgc3RydWN0IGhkYV9wYXRjaF9pdGVtIHBhdGNoX2l0ZW1zW05VTV9MSU5FX01PREVTXSA9IHsKLQlbTElORV9NT0RFX0NPREVDXSA9IHsgIltjb2RlY10iLCBwYXJzZV9jb2RlY19tb2RlIH0sCi0JW0xJTkVfTU9ERV9NT0RFTF0gPSB7ICJbbW9kZWxdIiwgcGFyc2VfbW9kZWxfbW9kZSB9LAotCVtMSU5FX01PREVfVkVSQl0gPSB7ICJbdmVyYl0iLCBwYXJzZV92ZXJiX21vZGUgfSwKLQlbTElORV9NT0RFX1BJTkNGR10gPSB7ICJbcGluY2ZnXSIsIHBhcnNlX3BpbmNmZ19tb2RlIH0sCi0JW0xJTkVfTU9ERV9ISU5UXSA9IHsgIltoaW50XSIsIHBhcnNlX2hpbnRfbW9kZSB9LAorCVtMSU5FX01PREVfQ09ERUNdID0geyAiW2NvZGVjXSIsIHBhcnNlX2NvZGVjX21vZGUsIDAgfSwKKwlbTElORV9NT0RFX01PREVMXSA9IHsgIlttb2RlbF0iLCBwYXJzZV9tb2RlbF9tb2RlLCAxIH0sCisJW0xJTkVfTU9ERV9WRVJCXSA9IHsgIlt2ZXJiXSIsIHBhcnNlX3ZlcmJfbW9kZSwgMSB9LAorCVtMSU5FX01PREVfUElOQ0ZHXSA9IHsgIltwaW5jZmddIiwgcGFyc2VfcGluY2ZnX21vZGUsIDEgfSwKKwlbTElORV9NT0RFX0hJTlRdID0geyAiW2hpbnRdIiwgcGFyc2VfaGludF9tb2RlLCAxIH0sCisJW0xJTkVfTU9ERV9WRU5ET1JfSURdID0geyAiW3ZlbmRvcl9pZF0iLCBwYXJzZV92ZW5kb3JfaWRfbW9kZSwgMSB9LAorCVtMSU5FX01PREVfU1VCU1lTVEVNX0lEXSA9IHsgIltzdWJzeXN0ZW1faWRdIiwgcGFyc2Vfc3Vic3lzdGVtX2lkX21vZGUsIDEgfSwKKwlbTElORV9NT0RFX1JFVklTSU9OX0lEXSA9IHsgIltyZXZpc2lvbl9pZF0iLCBwYXJzZV9yZXZpc2lvbl9pZF9tb2RlLCAxIH0sCisJW0xJTkVfTU9ERV9DSElQX05BTUVdID0geyAiW2NoaXBfbmFtZV0iLCBwYXJzZV9jaGlwX25hbWVfbW9kZSwgMSB9LAogfTsKIAogLyogY2hlY2sgdGhlIGxpbmUgc3RhcnRpbmcgd2l0aCAnWycgLS0gY2hhbmdlIHRoZSBwYXJzZXIgbW9kZSBhY2NvZGluZ2x5ICovCkBAIC03ODAsNyArODA1LDggQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoKmJ1ZiA9PSAnWycpCiAJCQlsaW5lX21vZGUgPSBwYXJzZV9saW5lX21vZGUoYnVmLCBidXMpOwotCQllbHNlIGlmIChwYXRjaF9pdGVtc1tsaW5lX21vZGVdLnBhcnNlcikKKwkJZWxzZSBpZiAocGF0Y2hfaXRlbXNbbGluZV9tb2RlXS5wYXJzZXIgJiYKKwkJCSAoY29kZWMgfHwgIXBhdGNoX2l0ZW1zW2xpbmVfbW9kZV0ubmVlZF9jb2RlYykpCiAJCQlwYXRjaF9pdGVtc1tsaW5lX21vZGVdLnBhcnNlcihidWYsIGJ1cywgJmNvZGVjKTsKIAl9CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwppbmRleCBmZjZkYTZmLi5kNWM5M2FkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKQEAgLTEyNSw2ICsxMjUsNyBAQAogCQkJICJ7SW50ZWwsIElDSDl9LCIKIAkJCSAie0ludGVsLCBJQ0gxMH0sIgogCQkJICJ7SW50ZWwsIFBDSH0sIgorCQkJICJ7SW50ZWwsIENQVH0sIgogCQkJICJ7SW50ZWwsIFNDSH0sIgogCQkJICJ7QVRJLCBTQjQ1MH0sIgogCQkJICJ7QVRJLCBTQjYwMH0sIgpAQCAtMjU5LDggKzI2MCw2IEBACiAjZGVmaW5lIEFaWF9NQVhfRlJBRwkJMzIKIC8qIG1heCBidWZmZXIgc2l6ZSAtIG5vIGgvdyBsaW1pdCwgeW91IGNhbiBpbmNyZWFzZSBhcyB5b3UgbGlrZSAqLwogI2RlZmluZSBBWlhfTUFYX0JVRl9TSVpFCSgxMDI0KjEwMjQqMTAyNCkKLS8qIG1heCBudW1iZXIgb2YgUENNIGRldmljcyBwZXIgY2FyZCAqLwotI2RlZmluZSBBWlhfTUFYX1BDTVMJCTgKIAogLyogUklSQiBpbnQgbWFzazogb3ZlcnJ1blsyXSwgcmVzcG9uc2VbMF0gKi8KICNkZWZpbmUgUklSQl9JTlRfUkVTUE9OU0UJMHgwMQpAQCAtNDA4LDcgKzQwNyw3IEBACiAJc3RydWN0IGF6eF9kZXYgKmF6eF9kZXY7CiAKIAkvKiBQQ00gKi8KLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtW0FaWF9NQVhfUENNU107CisJc3RydWN0IHNuZF9wY20gKnBjbVtIREFfTUFYX1BDTVNdOwogCiAJLyogSEQgY29kZWMgKi8KIAl1bnNpZ25lZCBzaG9ydCBjb2RlY19tYXNrOwpAQCAtNDQ5LDYgKzQ0OCw3IEBACiAvKiBkcml2ZXIgdHlwZXMgKi8KIGVudW0gewogCUFaWF9EUklWRVJfSUNILAorCUFaWF9EUklWRVJfUENILAogCUFaWF9EUklWRVJfU0NILAogCUFaWF9EUklWRVJfQVRJLAogCUFaWF9EUklWRVJfQVRJSERNSSwKQEAgLTQ2Myw2ICs0NjMsNyBAQAogCiBzdGF0aWMgY2hhciAqZHJpdmVyX3Nob3J0X25hbWVzW10gX19kZXZpbml0ZGF0YSA9IHsKIAlbQVpYX0RSSVZFUl9JQ0hdID0gIkhEQSBJbnRlbCIsCisJW0FaWF9EUklWRVJfUENIXSA9ICJIREEgSW50ZWwgUENIIiwKIAlbQVpYX0RSSVZFUl9TQ0hdID0gIkhEQSBJbnRlbCBNSUQiLAogCVtBWlhfRFJJVkVSX0FUSV0gPSAiSERBIEFUSSBTQiIsCiAJW0FaWF9EUklWRVJfQVRJSERNSV0gPSAiSERBIEFUSSBIRE1JIiwKQEAgLTk2OCw4ICs5NjksOCBAQAogCWF6eF9kZXYtPmluc3VmZmljaWVudCA9IDE7CiAKIAkvKiBlbmFibGUgU0lFICovCi0JYXp4X3dyaXRlYihjaGlwLCBJTlRDVEwsCi0JCSAgIGF6eF9yZWFkYihjaGlwLCBJTlRDVEwpIHwgKDEgPDwgYXp4X2Rldi0+aW5kZXgpKTsKKwlhenhfd3JpdGVsKGNoaXAsIElOVENUTCwKKwkJICAgYXp4X3JlYWRsKGNoaXAsIElOVENUTCkgfCAoMSA8PCBhenhfZGV2LT5pbmRleCkpOwogCS8qIHNldCBETUEgc3RhcnQgYW5kIGludGVycnVwdCBtYXNrICovCiAJYXp4X3NkX3dyaXRlYihhenhfZGV2LCBTRF9DVEwsIGF6eF9zZF9yZWFkYihhenhfZGV2LCBTRF9DVEwpIHwKIAkJICAgICAgU0RfQ1RMX0RNQV9TVEFSVCB8IFNEX0lOVF9NQVNLKTsKQEAgLTk4OCw4ICs5ODksOCBAQAogewogCWF6eF9zdHJlYW1fY2xlYXIoY2hpcCwgYXp4X2Rldik7CiAJLyogZGlzYWJsZSBTSUUgKi8KLQlhenhfd3JpdGViKGNoaXAsIElOVENUTCwKLQkJICAgYXp4X3JlYWRiKGNoaXAsIElOVENUTCkgJiB+KDEgPDwgYXp4X2Rldi0+aW5kZXgpKTsKKwlhenhfd3JpdGVsKGNoaXAsIElOVENUTCwKKwkJICAgYXp4X3JlYWRsKGNoaXAsIElOVENUTCkgJiB+KDEgPDwgYXp4X2Rldi0+aW5kZXgpKTsKIH0KIAogCkBAIC0xMDY1LDYgKzEwNjYsNyBAQAogCQkJCTB4MDEsIE5WSURJQV9IREFfRU5BQkxFX0NPSEJJVCk7CiAJCWJyZWFrOwogCWNhc2UgQVpYX0RSSVZFUl9TQ0g6CisJY2FzZSBBWlhfRFJJVkVSX1BDSDoKIAkJcGNpX3JlYWRfY29uZmlnX3dvcmQoY2hpcC0+cGNpLCBJTlRFTF9TQ0hfSERBX0RFVkMsICZzbm9vcCk7CiAJCWlmIChzbm9vcCAmIElOVEVMX1NDSF9IREFfREVWQ19OT1NOT09QKSB7CiAJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoY2hpcC0+cGNpLCBJTlRFTF9TQ0hfSERBX0RFVkMsCkBAIC0xMzUwLDcgKzEzNTIsNyBAQAogCWlmIChjaGlwLT5pbml0aWFsaXplZCkgewogCQlpbnQgaTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgQVpYX01BWF9QQ01TOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBIREFfTUFYX1BDTVM7IGkrKykKIAkJCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtW2ldKTsKIAkJc25kX2hkYV9zdXNwZW5kKGNoaXAtPmJ1cyk7CiAJCXNuZF9oZGFfcmVzdW1lKGNoaXAtPmJ1cyk7CkBAIC0xNDEyLDcgKzE0MTQsNyBAQAogCQkJCWNoaXAtPmNvZGVjX21hc2sgJj0gfigxIDw8IGMpOwogCQkJCS8qIE1vcmUgYmFkbHksIGFjY2Vzc2luZyB0byBhIG5vbi1leGlzdGluZwogCQkJCSAqIGNvZGVjIG9mdGVuIHNjcmV3cyB1cCB0aGUgY29udHJvbGxlciBjaGlwLAotCQkJCSAqIGFuZCBkaXN0cnVicyB0aGUgZnVydGhlciBjb21tdW5pY2F0aW9ucy4KKwkJCQkgKiBhbmQgZGlzdHVyYnMgdGhlIGZ1cnRoZXIgY29tbXVuaWNhdGlvbnMuCiAJCQkJICogVGh1cyBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHByb2JpbmcsCiAJCQkJICogYmV0dGVyIHRvIHJlc2V0IHRoZSBjb250cm9sbGVyIGNoaXAgdG8KIAkJCQkgKiBnZXQgYmFjayB0byB0aGUgc2FuaXR5IHN0YXRlLgpAQCAtMTk4Myw3ICsxOTg1LDcgQEAKIAlpbnQgcGNtX2RldiA9IGNwY20tPmRldmljZTsKIAlpbnQgcywgZXJyOwogCi0JaWYgKHBjbV9kZXYgPj0gQVpYX01BWF9QQ01TKSB7CisJaWYgKHBjbV9kZXYgPj0gSERBX01BWF9QQ01TKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgU0ZYICJJbnZhbGlkIFBDTSBkZXZpY2UgbnVtYmVyICVkXG4iLAogCQkJICAgcGNtX2Rldik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjEzOSw3ICsyMTQxLDcgQEAKIAogCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QzaG90KTsKIAlhenhfY2xlYXJfaXJxX3BlbmRpbmcoY2hpcCk7Ci0JZm9yIChpID0gMDsgaSA8IEFaWF9NQVhfUENNUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBIREFfTUFYX1BDTVM7IGkrKykKIAkJc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5wY21baV0pOwogCWlmIChjaGlwLT5pbml0aWFsaXplZCkKIAkJc25kX2hkYV9zdXNwZW5kKGNoaXAtPmJ1cyk7CkBAIC0yMjYyLDYgKzIyNjQsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAxY2MsICJEZWxsIEQ4MjAiLCBQT1NfRklYX0xQSUIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAxZGUsICJEZWxsIFByZWNpc2lvbiAzOTAiLCBQT1NfRklYX0xQSUIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwNmQsICJIUCBkdjMiLCBQT1NfRklYX0xQSUIpLAorCVNORF9QQ0lfUVVJUksoMHgxMTA2LCAweDMyODgsICJBU1VTIE0yVi1NWCBTRSIsIFBPU19GSVhfTFBJQiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODEzZCwgIkFTVVMgUDVBRDIiLCBQT1NfRklYX0xQSUIpLAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDEwMDIsICJNU0kgV2luZCBVMTE1IiwgUE9TX0ZJWF9MUElCKSwKIAl7fQpAQCAtMjQxOCw2ICsyNDIxLDcgQEAKIAlpZiAoYmRsX3Bvc19hZGpbZGV2XSA8IDApIHsKIAkJc3dpdGNoIChjaGlwLT5kcml2ZXJfdHlwZSkgewogCQljYXNlIEFaWF9EUklWRVJfSUNIOgorCQljYXNlIEFaWF9EUklWRVJfUENIOgogCQkJYmRsX3Bvc19hZGpbZGV2XSA9IDE7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTI2ODMsNyArMjY4Nyw3IEBACiB9CiAKIC8qIFBDSSBJRHMgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhenhfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYXp4X2lkcykgPSB7CiAJLyogSUNIIDYuLjEwICovCiAJeyBQQ0lfREVWSUNFKDB4ODA4NiwgMHgyNjY4KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9JQ0ggfSwKIAl7IFBDSV9ERVZJQ0UoMHg4MDg2LCAweDI3ZDgpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX0lDSCB9LApAQCAtMjY5Niw2ICsyNzAwLDggQEAKIAl7IFBDSV9ERVZJQ0UoMHg4MDg2LCAweDNhNmUpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX0lDSCB9LAogCS8qIFBDSCAqLwogCXsgUENJX0RFVklDRSgweDgwODYsIDB4M2I1NiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfSUNIIH0sCisJLyogQ1BUICovCisJeyBQQ0lfREVWSUNFKDB4ODA4NiwgMHgxYzIwKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9QQ0ggfSwKIAkvKiBTQ0ggKi8KIAl7IFBDSV9ERVZJQ0UoMHg4MDg2LCAweDgxMWIpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX1NDSCB9LAogCS8qIEFUSSBTQiA0NTAvNjAwICovCkBAIC0yNzIzLDMyICsyNzI5LDEwIEBACiAJLyogVUxJIE01NDYxICovCiAJeyBQQ0lfREVWSUNFKDB4MTBiOSwgMHg1NDYxKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9VTEkgfSwKIAkvKiBOVklESUEgTUNQICovCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwMjZjKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDAzNzEpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDNlNCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwM2YwKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA0NGEpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDQ0YiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNTVjKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA1NWQpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDU5MCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNzc0KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA3NzUpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDc3NiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNzc3KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA3ZmMpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDdmZCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYWMwKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBhYzEpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGFjMiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYWMzKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBiZTIpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGJlMyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYmU0KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBkOTQpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGQ5NSksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwZDk2KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBkOTcpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0FOWV9JRCksCisJICAuY2xhc3MgPSBQQ0lfQ0xBU1NfTVVMVElNRURJQV9IRF9BVURJTyA8PCA4LAorCSAgLmNsYXNzX21hc2sgPSAweGZmZmZmZiwKKwkgIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJLyogVGVyYWRpY2kgKi8KIAl7IFBDSV9ERVZJQ0UoMHg2NTQ5LCAweDEyMDApLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX1RFUkEgfSwKIAkvKiBDcmVhdGl2ZSBYLUZpIChDQTAxMTAtSUJHKSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmgKaW5kZXggNTc3OGFlOC4uN2NlZTM2NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oCkBAIC0zMSw2ICszMSw3IEBACiAgKiBpbiBzbmRfaGRhX2N0bF9hZGQoKSwgc28gdGhhdCB0aGlzIHZhbHVlIHdvbid0IGFwcGVhciBpbiB0aGUgb3V0c2lkZS4KICAqLwogI2RlZmluZSBIREFfU1VCREVWX05JRF9GTEFHCSgxVSA8PCAzMSkKKyNkZWZpbmUgSERBX1NVQkRFVl9BTVBfRkxBRwkoMVUgPDwgMzApCiAKIC8qCiAgKiBmb3IgbWl4ZXIgY29udHJvbHMKQEAgLTQyLDcgKzQzLDcgQEAKIC8qIG1vbm8gdm9sdW1lIHdpdGggaW5kZXggKGluZGV4PTAsMSwuLi4pIChjaGFubmVsPTEsMikgKi8KICNkZWZpbmUgSERBX0NPREVDX1ZPTFVNRV9NT05PX0lEWCh4bmFtZSwgeGNpZHgsIG5pZCwgY2hhbm5lbCwgeGluZGV4LCBkaXJlY3Rpb24pIFwKIAl7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5kZXggPSB4Y2lkeCwgIFwKLQkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgKG5pZCksIFwKKwkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLCBcCiAJICAuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8IFwKIAkgIAkgICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHwgXAogCSAgCSAgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX0NBTExCQUNLLCBcCkBAIC02Myw3ICs2NCw3IEBACiAvKiBtb25vIG11dGUgc3dpdGNoIHdpdGggaW5kZXggKGluZGV4PTAsMSwuLi4pIChjaGFubmVsPTEsMikgKi8KICNkZWZpbmUgSERBX0NPREVDX01VVEVfTU9OT19JRFgoeG5hbWUsIHhjaWR4LCBuaWQsIGNoYW5uZWwsIHhpbmRleCwgZGlyZWN0aW9uKSBcCiAJeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0geGNpZHgsIFwKLQkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgKG5pZCksIFwKKwkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLCBcCiAJICAuaW5mbyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9pbmZvLCBcCiAJICAuZ2V0ID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2dldCwgXAogCSAgLnB1dCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9wdXQsIFwKQEAgLTgxLDcgKzgyLDcgQEAKIC8qIHNwZWNpYWwgYmVlcCBtb25vIG11dGUgc3dpdGNoIHdpdGggaW5kZXggKGluZGV4PTAsMSwuLi4pIChjaGFubmVsPTEsMikgKi8KICNkZWZpbmUgSERBX0NPREVDX01VVEVfQkVFUF9NT05PX0lEWCh4bmFtZSwgeGNpZHgsIG5pZCwgY2hhbm5lbCwgeGluZGV4LCBkaXJlY3Rpb24pIFwKIAl7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5kZXggPSB4Y2lkeCwgXAotCSAgLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCAobmlkKSwgXAorCSAgLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsIFwKIAkgIC5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sIFwKIAkgIC5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LCBcCiAJICAucHV0ID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX3B1dF9iZWVwLCBcCkBAIC00NjQsMTMgKzQ2NSwyMCBAQAogdTMyIHNuZF9oZGFfcGluX3NlbnNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKTsKIGludCBzbmRfaGRhX2phY2tfZGV0ZWN0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKTsKIAorLyogZmxhZ3MgZm9yIGhkYV9uaWRfaXRlbSAqLworI2RlZmluZSBIREFfTklEX0lURU1fQU1QCSgxPDwwKQorCiBzdHJ1Y3QgaGRhX25pZF9pdGVtIHsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCXVuc2lnbmVkIGludCBpbmRleDsKIAloZGFfbmlkX3QgbmlkOworCXVuc2lnbmVkIHNob3J0IGZsYWdzOwogfTsKIAogaW50IHNuZF9oZGFfY3RsX2FkZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKIAkJICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwpOworaW50IHNuZF9oZGFfYWRkX25pZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwKKwkJICAgIHVuc2lnbmVkIGludCBpbmRleCwgaGRhX25pZF90IG5pZCk7CiB2b2lkIHNuZF9oZGFfY3Rsc19jbGVhcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMKaW5kZXggYzlhZmMwNC4uZjk3ZDM1ZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYwpAQCAtNjEsMTggKzYxLDI5IEBACiAJCXJldHVybiAiVU5LTk9XTiBXaWRnZXQiOwogfQogCi1zdGF0aWMgdm9pZCBwcmludF9uaWRfbWl4ZXJzKHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlciwKLQkJCSAgICAgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCitzdGF0aWMgdm9pZCBwcmludF9uaWRfYXJyYXkoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyLAorCQkJICAgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJICAgIHN0cnVjdCBzbmRfYXJyYXkgKmFycmF5KQogewogCWludCBpOwotCXN0cnVjdCBoZGFfbmlkX2l0ZW0gKml0ZW1zID0gY29kZWMtPm1peGVycy5saXN0OworCXN0cnVjdCBoZGFfbmlkX2l0ZW0gKml0ZW1zID0gYXJyYXktPmxpc3QsICppdGVtOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7Ci0JZm9yIChpID0gMDsgaSA8IGNvZGVjLT5taXhlcnMudXNlZDsgaSsrKSB7Ci0JCWlmIChpdGVtc1tpXS5uaWQgPT0gbmlkKSB7Ci0JCQlrY3RsID0gaXRlbXNbaV0ua2N0bDsKKwlmb3IgKGkgPSAwOyBpIDwgYXJyYXktPnVzZWQ7IGkrKykgeworCQlpdGVtID0gJml0ZW1zW2ldOworCQlpZiAoaXRlbS0+bmlkID09IG5pZCkgeworCQkJa2N0bCA9IGl0ZW0tPmtjdGw7CiAJCQlzbmRfaXByaW50ZihidWZmZXIsCiAJCQkgICIgIENvbnRyb2w6IG5hbWU9XCIlc1wiLCBpbmRleD0laSwgZGV2aWNlPSVpXG4iLAotCQkJICBrY3RsLT5pZC5uYW1lLCBrY3RsLT5pZC5pbmRleCwga2N0bC0+aWQuZGV2aWNlKTsKKwkJCSAga2N0bC0+aWQubmFtZSwga2N0bC0+aWQuaW5kZXggKyBpdGVtLT5pbmRleCwKKwkJCSAga2N0bC0+aWQuZGV2aWNlKTsKKwkJCWlmIChpdGVtLT5mbGFncyAmIEhEQV9OSURfSVRFTV9BTVApCisJCQkJc25kX2lwcmludGYoYnVmZmVyLAorCQkJCSAgIiAgICBDb250cm9sQW1wOiBjaHM9JWx1LCBkaXI9JXMsICIKKwkJCQkgICJpZHg9JWx1LCBvZnM9JWx1XG4iLAorCQkJCSAgZ2V0X2FtcF9jaGFubmVscyhrY3RsKSwKKwkJCQkgIGdldF9hbXBfZGlyZWN0aW9uKGtjdGwpID8gIk91dCIgOiAiSW4iLAorCQkJCSAgZ2V0X2FtcF9pbmRleChrY3RsKSwKKwkJCQkgIGdldF9hbXBfb2Zmc2V0KGtjdGwpKTsKIAkJfQogCX0KIH0KQEAgLTUyOCw3ICs1MzksOCBAQAogCQkJICAgIChkYXRhICYgKDE8PGkpKSA/IDEgOiAwLAogCQkJICAgICh1bnNvbCAmICgxPDxpKSkgPyAxIDogMCk7CiAJLyogRklYTUU6IGFkZCBHUE8gYW5kIEdQSSBwaW4gaW5mb3JtYXRpb24gKi8KLQlwcmludF9uaWRfbWl4ZXJzKGJ1ZmZlciwgY29kZWMsIG5pZCk7CisJcHJpbnRfbmlkX2FycmF5KGJ1ZmZlciwgY29kZWMsIG5pZCwgJmNvZGVjLT5taXhlcnMpOworCXByaW50X25pZF9hcnJheShidWZmZXIsIGNvZGVjLCBuaWQsICZjb2RlYy0+bmlkcyk7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X2NvZGVjX2luZm8oc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKQEAgLTYwOCw3ICs2MjAsOCBAQAogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiIENQIik7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiAKLQkJcHJpbnRfbmlkX21peGVycyhidWZmZXIsIGNvZGVjLCBuaWQpOworCQlwcmludF9uaWRfYXJyYXkoYnVmZmVyLCBjb2RlYywgbmlkLCAmY29kZWMtPm1peGVycyk7CisJCXByaW50X25pZF9hcnJheShidWZmZXIsIGNvZGVjLCBuaWQsICZjb2RlYy0+bmlkcyk7CiAJCXByaW50X25pZF9wY21zKGJ1ZmZlciwgY29kZWMsIG5pZCk7CiAKIAkJLyogdm9sdW1lIGtub2IgaXMgYSBzcGVjaWFsIHdpZGdldCB0aGF0IGFsd2F5cyBoYXZlIGNvbm5lY3Rpb24KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCmluZGV4IDY5YTk0MWMuLmU2ZDFiZGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwpAQCAtMTc0LDYgKzE3NCw3IEBACiBzdGF0aWMgaW50IGFkMTk4eF9idWlsZF9jb250cm9scyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOwogCXVuc2lnbmVkIGludCBpOwogCWludCBlcnI7CiAKQEAgLTIwOCw5ICsyMDksNyBAQAogCQkJaWYgKCFrY3RsKQogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJa2N0bC0+cHJpdmF0ZV92YWx1ZSA9IHNwZWMtPmJlZXBfYW1wOwotCQkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLAotCQkJCQkJZ2V0X2FtcF9uaWRfKHNwZWMtPmJlZXBfYW1wKSwKLQkJCQkJCWtjdGwpOworCQkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCAwLCBrY3RsKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CiAJCX0KQEAgLTIzOSw2ICsyMzgsMjcgQEAKIAl9CiAKIAlhZDE5OHhfZnJlZV9rY3Rscyhjb2RlYyk7IC8qIG5vIGxvbmdlciBuZWVkZWQgKi8KKworCS8qIGFzc2lnbiBDYXB0dXJlIFNvdXJjZSBlbnVtcyB0byBOSUQgKi8KKwlrY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIkNhcHR1cmUgU291cmNlIik7CisJaWYgKCFrY3RsKQorCQlrY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIklucHV0IFNvdXJjZSIpOworCWZvciAoaSA9IDA7IGtjdGwgJiYgaSA8IGtjdGwtPmNvdW50OyBpKyspIHsKKwkJZXJyID0gc25kX2hkYV9hZGRfbmlkKGNvZGVjLCBrY3RsLCBpLCBzcGVjLT5jYXBzcmNfbmlkc1tpXSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBhc3NpZ24gSUVDOTU4IGVudW1zIHRvIE5JRCAqLworCWtjdGwgPSBzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLAorCQkJU05EUlZfQ1RMX05BTUVfSUVDOTU4KCIiLFBMQVlCQUNLLE5PTkUpICJTb3VyY2UiKTsKKwlpZiAoa2N0bCkgeworCQllcnIgPSBzbmRfaGRhX2FkZF9uaWQoY29kZWMsIGtjdGwsIDAsCisJCQkJICAgICAgc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQyMSw2ICs0NDEsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGFkMTk4eF9zaHV0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc25kX2hkYV9zaHV0dXBfcGlucyhjb2RlYyk7Cit9CisKIHN0YXRpYyB2b2lkIGFkMTk4eF9mcmVlX2tjdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtNDM0LDYgKzQ1OSw0NiBAQAogCXNuZF9hcnJheV9mcmVlKCZzcGVjLT5rY3Rscyk7CiB9CiAKK3N0YXRpYyB2b2lkIGFkMTk4eF9wb3dlcl9lYXBkX3dyaXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgZnJvbnQsCisJCQkJaGRhX25pZF90IGhwKQoreworCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGZyb250LCAwLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwKKwkJCSAgICAhc3BlYy0+aW52X2VhcGQgPyAweDAwIDogMHgwMik7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgaHAsIDAsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLAorCQkJICAgICFzcGVjLT5pbnZfZWFwZCA/IDB4MDAgOiAweDAyKTsKK30KKworc3RhdGljIHZvaWQgYWQxOTh4X3Bvd2VyX2VhcGQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJLyogV2UgY3VycmVudGx5IG9ubHkgaGFuZGxlIGZyb250LCBIUCAqLworCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgeworCWNhc2UgMHgxMWQ0MTg4MjoKKwljYXNlIDB4MTFkNDg4MmE6CisJY2FzZSAweDExZDQxODg0OgorCWNhc2UgMHgxMWQ0MTk4NDoKKwljYXNlIDB4MTFkNDE4ODM6CisJY2FzZSAweDExZDQxODRhOgorCWNhc2UgMHgxMWQ0MTk0YToKKwljYXNlIDB4MTFkNDE5NGI6CisJCWFkMTk4eF9wb3dlcl9lYXBkX3dyaXRlKGNvZGVjLCAweDEyLCAweDExKTsKKwkJYnJlYWs7CisJY2FzZSAweDExZDQxOTgxOgorCWNhc2UgMHgxMWQ0MTk4MzoKKwkJYWQxOTh4X3Bvd2VyX2VhcGRfd3JpdGUoY29kZWMsIDB4MDUsIDB4MDYpOworCQlicmVhazsKKwljYXNlIDB4MTFkNDE5ODY6CisJCWFkMTk4eF9wb3dlcl9lYXBkX3dyaXRlKGNvZGVjLCAweDFiLCAweDFhKTsKKwkJYnJlYWs7CisJY2FzZSAweDExZDQxOTg4OgorCWNhc2UgMHgxMWQ0MTk4YjoKKwljYXNlIDB4MTFkNDk4OWE6CisJY2FzZSAweDExZDQ5ODliOgorCQlhZDE5OHhfcG93ZXJfZWFwZF93cml0ZShjb2RlYywgMHgyOSwgMHgyMik7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIHZvaWQgYWQxOTh4X2ZyZWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC00NDEsMTEgKzUwNiwyOSBAQAogCWlmICghc3BlYykKIAkJcmV0dXJuOwogCisJYWQxOTh4X3NodXR1cChjb2RlYyk7CiAJYWQxOTh4X2ZyZWVfa2N0bHMoY29kZWMpOwogCWtmcmVlKHNwZWMpOwogCXNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKGNvZGVjKTsKIH0KIAorI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCitzdGF0aWMgaW50IGFkMTk4eF9zdXNwZW5kKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJYWQxOTh4X3NodXR1cChjb2RlYyk7CisJYWQxOTh4X3Bvd2VyX2VhcGQoY29kZWMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkMTk4eF9yZXN1bWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJYWQxOTh4X2luaXQoY29kZWMpOworCXNuZF9oZGFfY29kZWNfcmVzdW1lX2FtcChjb2RlYyk7CisJc25kX2hkYV9jb2RlY19yZXN1bWVfY2FjaGUoY29kZWMpOworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBhZDE5OHhfcGF0Y2hfb3BzID0gewogCS5idWlsZF9jb250cm9scyA9IGFkMTk4eF9idWlsZF9jb250cm9scywKIAkuYnVpbGRfcGNtcyA9IGFkMTk4eF9idWlsZF9wY21zLApAQCAtNDU0LDYgKzUzNywxMSBAQAogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAkuY2hlY2tfcG93ZXJfc3RhdHVzID0gYWQxOTh4X2NoZWNrX3Bvd2VyX3N0YXR1cywKICNlbmRpZgorI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCisJLnN1c3BlbmQgPSBhZDE5OHhfc3VzcGVuZCwKKwkucmVzdW1lID0gYWQxOTh4X3Jlc3VtZSwKKyNlbmRpZgorCS5yZWJvb3Rfbm90aWZ5ID0gYWQxOTh4X3NodXR1cCwKIH07CiAKIApAQCAtNzAxLDYgKzc4OSw3IEBACiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiRXh0ZXJuYWwgQW1wbGlmaWVyIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCAweDFiLAogCQkuaW5mbyA9IGFkMTk4eF9lYXBkX2luZm8sCiAJCS5nZXQgPSBhZDE5OHhfZWFwZF9nZXQsCiAJCS5wdXQgPSBhZDE5OHhfZWFwZF9wdXQsCkBAIC04MDgsNiArODk3LDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsCiAJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LAogCQkucHV0ID0gYWQxOTg2YV9ocF9tYXN0ZXJfc3dfcHV0LApAQCAtMTAwOCw3ICsxMDk4LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MWNiLCAiQVNVUyBNMk4iLCBBRDE5ODZBXzNTVEFDSyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODIzNCwgIkFTVVMgTTJOIiwgQUQxOTg2QV8zU1RBQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxMGRlLCAweGNiODQsICJBU1VTIEE4Ti1WTSIsIEFEMTk4NkFfM1NUQUNLKSwKLQlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjQwLCAiVG9zaGliYSIsIEFEMTk4NkFfTEFQVE9QX0VBUEQpLAorCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmNDAsICJUb3NoaWJhIFNhdGVsbGl0ZSBMNDAtMTBRIiwgQUQxOTg2QV8zU1RBQ0spLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGIwM2MsICJTYW1zdW5nIFI1NSIsIEFEMTk4NkFfM1NUQUNLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDFlLCAiRlNDIFYyMDYwIiwgQUQxOTg2QV9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMjQsICJTYW1zdW5nIFA1MCIsIEFEMTk4NkFfU0FNU1VOR19QNTApLApAQCAtMTYxMiw2ICsxNzAyLDcgQEAKIAlIREFfQklORF9WT0woIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAmYWQxOTgxX2hwX2JpbmRfbWFzdGVyX3ZvbCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCAweDA1LAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKIAkJLmluZm8gPSBhZDE5OHhfZWFwZF9pbmZvLAogCQkuZ2V0ID0gYWQxOTh4X2VhcGRfZ2V0LApAQCAtMjEzNiw2ICsyMjI3LDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJFeHRlcm5hbCBBbXBsaWZpZXIiLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IDB4MTIsCiAJCS5pbmZvID0gYWQxOTh4X2VhcGRfaW5mbywKIAkJLmdldCA9IGFkMTk4eF9lYXBkX2dldCwKIAkJLnB1dCA9IGFkMTk4eF9lYXBkX3B1dCwKQEAgLTIyNTcsNiArMjM0OSw3IEBACiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiSUVDOTU4IFBsYXliYWNrIFNvdXJjZSIsCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgMHgxYiwKIAkJLmluZm8gPSBhZDE5ODhfc3BkaWZfcGxheWJhY2tfc291cmNlX2luZm8sCiAJCS5nZXQgPSBhZDE5ODhfc3BkaWZfcGxheWJhY2tfc291cmNlX2dldCwKIAkJLnB1dCA9IGFkMTk4OF9zcGRpZl9wbGF5YmFja19zb3VyY2VfcHV0LApAQCAtMjM3Miw2ICsyNDY1LDEyIEBACiAJeyB9CiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4OF9zcGRpZl9pbl9pbml0X3ZlcmJzW10gPSB7CisJLyogdW5tdXRlIFNQRElGIGlucHV0IHBpbiAqLworCXsweDFjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7IH0KK307CisKIC8qIEFEMTk4OSBoYXMgbm8gQURDIC0+IFNQRElGIHJvdXRlICovCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4OV9zcGRpZl9pbml0X3ZlcmJzW10gPSB7CiAJLyogU1BESUYtMSBvdXQgcGluICovCkBAIC0yNTg5LDcgKzI2ODgsNyBAQAogCWlmICghIGtuZXctPm5hbWUpCiAJCXJldHVybiAtRU5PTUVNOwogCWlmIChnZXRfYW1wX25pZF8odmFsKSkKLQkJa25ldy0+c3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IGdldF9hbXBfbmlkXyh2YWwpOworCQlrbmV3LT5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHOwogCWtuZXctPnByaXZhdGVfdmFsdWUgPSB2YWw7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMTA3LDggKzMyMDYsMTEgQEAKIAkJCQlhZDE5ODhfc3BkaWZfaW5pdF92ZXJiczsKIAkJfQogCX0KLQlpZiAoc3BlYy0+ZGlnX2luX25pZCAmJiBjb2RlYy0+dmVuZG9yX2lkIDwgMHgxMWQ0OTg5YSkKKwlpZiAoc3BlYy0+ZGlnX2luX25pZCAmJiBjb2RlYy0+dmVuZG9yX2lkIDwgMHgxMWQ0OTg5YSkgewogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGFkMTk4OF9zcGRpZl9pbl9taXhlcnM7CisJCXNwZWMtPmluaXRfdmVyYnNbc3BlYy0+bnVtX2luaXRfdmVyYnMrK10gPQorCQkJYWQxOTg4X3NwZGlmX2luX2luaXRfdmVyYnM7CisJfQogCiAJY29kZWMtPnBhdGNoX29wcyA9IGFkMTk4eF9wYXRjaF9vcHM7CiAJc3dpdGNoIChib2FyZF9jb25maWcpIHsKQEAgLTM3NDcsNiArMzg0OSw3IEBACiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLAogCQkuaW5mbyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9pbmZvLAogCQkuZ2V0ID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2dldCwKIAkJLnB1dCA9IGFkMTg4NGFfbW9iaWxlX21hc3Rlcl9zd19wdXQsCkBAIC0zNzc1LDYgKzM4NzgsNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhZDE4ODRhX21vYmlsZV9tYXN0ZXJfc3dfcHV0LApAQCAtNDExNiw2ICs0MjIwLDcgQEAKIC8qCUhEQV9DT0RFQ19NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwqLwogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYwppbmRleCBmZTA0MjNjLi43ZGU3ODJhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY2lycnVzLmMKQEAgLTUwMSw3ICs1MDEsOCBAQAogCWtuZXcucHJpdmF0ZV92YWx1ZSA9IHB2YWw7CiAJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVzICVzIFN3aXRjaCIsIG5hbWUsIGRpcl9zZnhbZGlyXSk7CiAJKmtjdGxwID0gc25kX2N0bF9uZXcxKCZrbmV3LCBjb2RlYyk7Ci0JcmV0dXJuIHNuZF9oZGFfY3RsX2FkZChjb2RlYywgZ2V0X2FtcF9uaWRfKHB2YWwpLCAqa2N0bHApOworCSgqa2N0bHApLT5pZC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHOworCXJldHVybiBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIDAsICprY3RscCk7CiB9CiAKIHN0YXRpYyBpbnQgYWRkX3ZvbHVtZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqbmFtZSwKQEAgLTUxNCw3ICs1MTUsOCBAQAogCWtuZXcucHJpdmF0ZV92YWx1ZSA9IHB2YWw7CiAJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVzICVzIFZvbHVtZSIsIG5hbWUsIGRpcl9zZnhbZGlyXSk7CiAJKmtjdGxwID0gc25kX2N0bF9uZXcxKCZrbmV3LCBjb2RlYyk7Ci0JcmV0dXJuIHNuZF9oZGFfY3RsX2FkZChjb2RlYywgZ2V0X2FtcF9uaWRfKHB2YWwpLCAqa2N0bHApOworCSgqa2N0bHApLT5pZC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHOworCXJldHVybiBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIDAsICprY3RscCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZpeF92b2x1bWVfY2FwcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IGRhYykKQEAgLTc1MSw2ICs3NTMsNyBAQAogCXNwZWMtPmNhcHR1cmVfYmluZFsxXSA9IG1ha2VfYmluZF9jYXB0dXJlKGNvZGVjLCAmc25kX2hkYV9iaW5kX3ZvbCk7CiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCQlpbnQgbjsKIAkJaWYgKCFzcGVjLT5jYXB0dXJlX2JpbmRbaV0pCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJa2N0bCA9IHNuZF9jdGxfbmV3MSgmY3NfY2FwdHVyZV9jdGxzW2ldLCBjb2RlYyk7CkBAIC03NjAsNiArNzYzLDEzIEBACiAJCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywgMCwga2N0bCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKKwkJZm9yIChuID0gMDsgbiA8IEFVVE9fUElOX0xBU1Q7IG4rKykgeworCQkJaWYgKCFzcGVjLT5hZGNfbmlkW25dKQorCQkJCWNvbnRpbnVlOworCQkJZXJyID0gc25kX2hkYV9hZGRfbmlkKGNvZGVjLCBrY3RsLCAwLCBzcGVjLT5hZGNfbmlkW2ldKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCX0KIAl9CiAJCiAJaWYgKHNwZWMtPm51bV9pbnB1dHMgPiAxICYmICFzcGVjLT5taWNfZGV0ZWN0KSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jbWVkaWEuYwppbmRleCBhNDVjMTE2Li5mZjYwOTA4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMKQEAgLTMxNSw3ICszMTUsOCBAQAogc3RhdGljIGludCBjbWk5ODgwX2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBjbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBlcnI7CisJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwlpbnQgaSwgZXJyOwogCiAJZXJyID0gc25kX2hkYV9hZGRfbmV3X2N0bHMoY29kZWMsIGNtaTk4ODBfYmFzaWNfbWl4ZXIpOwogCWlmIChlcnIgPCAwKQpAQCAtMzQwLDYgKzM0MSwxNCBAQAogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQorCisJLyogYXNzaWduIENhcHR1cmUgU291cmNlIGVudW1zIHRvIE5JRCAqLworCWtjdGwgPSBzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiQ2FwdHVyZSBTb3VyY2UiKTsKKwlmb3IgKGkgPSAwOyBrY3RsICYmIGkgPCBrY3RsLT5jb3VudDsgaSsrKSB7CisJCWVyciA9IHNuZF9oZGFfYWRkX25pZChjb2RlYywga2N0bCwgaSwgc3BlYy0+YWRjX25pZHNbaV0pOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKaW5kZXggYzU3OGMyOC4uMTk0YTI4YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwpAQCAtNDIsMTAgKzQyLDEyIEBACiAKIC8qIENvbmV4YW50IDUwNTEgc3BlY2lmaWMgKi8KIAotI2RlZmluZSBDWFQ1MDUxX1NQRElGX09VVAkweDFDCisjZGVmaW5lIENYVDUwNTFfU1BESUZfT1VUCTB4MTIKICNkZWZpbmUgQ1hUNTA1MV9QT1JUQl9FVkVOVAkweDM4CiAjZGVmaW5lIENYVDUwNTFfUE9SVENfRVZFTlQJMHgzOQogCisjZGVmaW5lIEFVVE9fTUlDX1BPUlRCCQkoMSA8PCAxKQorI2RlZmluZSBBVVRPX01JQ19QT1JUQwkJKDEgPDwgMikKIAogc3RydWN0IGNvbmV4YW50X2phY2sgewogCkBAIC03NCw3ICs3Niw3IEBACiAJCQkJCSAqLwogCXVuc2lnbmVkIGludCBjdXJfZWFwZDsKIAl1bnNpZ25lZCBpbnQgaHBfcHJlc2VudDsKLQl1bnNpZ25lZCBpbnQgbm9fYXV0b19taWM7CisJdW5zaWduZWQgaW50IGF1dG9fbWljOwogCXVuc2lnbmVkIGludCBuZWVkX2RhY19maXg7CiAKIAkvKiBjYXB0dXJlICovCkBAIC0xMTEsOCArMTEzLDIzIEBACiAKIAl1bnNpZ25lZCBpbnQgZGVsbF9hdXRvbXV0ZTsKIAl1bnNpZ25lZCBpbnQgcG9ydF9kX21vZGU7Ci0JdW5zaWduZWQgY2hhciBleHRfbWljX2JpYXM7Ci0JdW5zaWduZWQgaW50IGRlbGxfdm9zdHJvOworCXVuc2lnbmVkIGludCBkZWxsX3Zvc3RybzoxOworCXVuc2lnbmVkIGludCBpZGVhcGFkOjE7CisKKwl1bnNpZ25lZCBpbnQgZXh0X21pY19wcmVzZW50OworCXVuc2lnbmVkIGludCByZWNvcmRpbmc7CisJdm9pZCAoKmNhcHR1cmVfcHJlcGFyZSkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOworCXZvaWQgKCpjYXB0dXJlX2NsZWFudXApKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKKworCS8qIE9MUEMgWE8tMS41IHN1cHBvcnRzIERDIGlucHV0IG1vZGUgKGUuZy4gZm9yIHVzZSB3aXRoIGFuYWxvZyBzZW5zb3JzKQorCSAqIHRocm91Z2ggdGhlIG1pY3JvcGhvbmUgamFjay4KKwkgKiBXaGVuIHRoZSB1c2VyIGVuYWJsZXMgdGhpcyB0aHJvdWdoIGEgbWl4ZXIgc3dpdGNoLCBib3RoIGludGVybmFsIGFuZAorCSAqIGV4dGVybmFsIG1pY3JvcGhvbmVzIGFyZSBkaXNhYmxlZC4gR2FpbiBpcyBmaXhlZCBhdCAwZEIuIEluIHRoaXMgbW9kZSwKKwkgKiB3ZSBhbHNvIGFsbG93IHRoZSBiaWFzIHRvIGJlIGNvbmZpZ3VyZWQgdGhyb3VnaCBhIHNlcGFyYXRlIG1peGVyCisJICogY29udHJvbC4gKi8KKwl1bnNpZ25lZCBpbnQgZGNfZW5hYmxlOworCXVuc2lnbmVkIGludCBkY19pbnB1dF9iaWFzOyAvKiBvZmZzZXQgaW50byBjeHQ1MDY2X29scGNfZGNfYmlhcyAqLworCXVuc2lnbmVkIGludCBtaWNfYm9vc3Q7IC8qIG9mZnNldCBpbnRvIGN4dDUwNjZfYW5hbG9nX21pY19ib29zdCAqLwogfTsKIAogc3RhdGljIGludCBjb25leGFudF9wbGF5YmFja19wY21fb3BlbihzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLApAQCAtMTg1LDYgKzIwMiw4IEBACiAJCQkJICAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpZiAoc3BlYy0+Y2FwdHVyZV9wcmVwYXJlKQorCQlzcGVjLT5jYXB0dXJlX3ByZXBhcmUoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKGNvZGVjLCBzcGVjLT5hZGNfbmlkc1tzdWJzdHJlYW0tPm51bWJlcl0sCiAJCQkJICAgc3RyZWFtX3RhZywgMCwgZm9ybWF0KTsKIAlyZXR1cm4gMDsKQEAgLTE5Niw2ICsyMTUsOCBAQAogewogCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc25kX2hkYV9jb2RlY19jbGVhbnVwX3N0cmVhbShjb2RlYywgc3BlYy0+YWRjX25pZHNbc3Vic3RyZWFtLT5udW1iZXJdKTsKKwlpZiAoc3BlYy0+Y2FwdHVyZV9jbGVhbnVwKQorCQlzcGVjLT5jYXB0dXJlX2NsZWFudXAoY29kZWMpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTg1LDYgKzE2MDYsMTEgQEAKIHsKIAlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXVuc2lnbmVkIGludCBwaW5jdGw7CisJLyogaGVhZHBob25lIHBpbiAqLworCXBpbmN0bCA9IChzcGVjLT5ocF9wcmVzZW50ICYmIHNwZWMtPmN1cl9lYXBkKSA/IFBJTl9IUCA6IDA7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxNiwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQkJICAgIHBpbmN0bCk7CisJLyogc3BlYWtlciBwaW4gKi8KIAlwaW5jdGwgPSAoIXNwZWMtPmhwX3ByZXNlbnQgJiYgc3BlYy0+Y3VyX2VhcGQpID8gUElOX09VVCA6IDA7CiAJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxYSwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAogCQkJICAgIHBpbmN0bCk7CkBAIC0xNjA4LDcgKzE2MzQsNyBAQAogCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJdW5zaWduZWQgaW50IHByZXNlbnQ7CiAKLQlpZiAoc3BlYy0+bm9fYXV0b19taWMpCisJaWYgKCEoc3BlYy0+YXV0b19taWMgJiBBVVRPX01JQ19QT1JUQikpCiAJCXJldHVybjsKIAlwcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgxNyk7CiAJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxNCwgMCwKQEAgLTE2MjMsNyArMTY0OSw3IEBACiAJdW5zaWduZWQgaW50IHByZXNlbnQ7CiAJaGRhX25pZF90IG5ld19hZGM7CiAKLQlpZiAoc3BlYy0+bm9fYXV0b19taWMpCisJaWYgKCEoc3BlYy0+YXV0b19taWMgJiBBVVRPX01JQ19QT1JUQykpCiAJCXJldHVybjsKIAlwcmVzZW50ID0gc25kX2hkYV9qYWNrX2RldGVjdChjb2RlYywgMHgxOCk7CiAJaWYgKHByZXNlbnQpCkBAIC0xNjY5LDEzICsxNjk1LDcgQEAKIAljb25leGFudF9yZXBvcnRfamFjayhjb2RlYywgbmlkKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfbWl4ZXJzW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFZvbHVtZSIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBTd2l0Y2giLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkV4dGVybmFsIE1pYyBWb2x1bWUiLCAweDE0LCAweDAxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJFeHRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJEb2NraW5nIE1pYyBWb2x1bWUiLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJEb2NraW5nIE1pYyBTd2l0Y2giLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfcGxheWJhY2tfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCkBAIC0xNjg1LDcgKzE3MDUsMTYgQEAKIAkJLnB1dCA9IGN4dDUwNTFfaHBfbWFzdGVyX3N3X3B1dCwKIAkJLnByaXZhdGVfdmFsdWUgPSAweDFhLAogCX0sCisJe30KK307CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDUxX2NhcHR1cmVfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFZvbHVtZSIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBTd2l0Y2giLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkV4dGVybmFsIE1pYyBWb2x1bWUiLCAweDE0LCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJFeHRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJEb2NraW5nIE1pYyBWb2x1bWUiLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJEb2NraW5nIE1pYyBTd2l0Y2giLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAogCXt9CiB9OwogCkBAIC0xNjk0LDMyICsxNzIzLDI2IEBACiAJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBTd2l0Y2giLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkV4dGVybmFsIE1pYyBWb2x1bWUiLCAweDE1LCAweDAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJFeHRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNSwgMHgwMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCi0JCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKLQkJLmdldCA9IGN4dF9lYXBkX2dldCwKLQkJLnB1dCA9IGN4dDUwNTFfaHBfbWFzdGVyX3N3X3B1dCwKLQkJLnByaXZhdGVfdmFsdWUgPSAweDFhLAotCX0sCi0KIAl7fQogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNTFfaHBfZHY2NzM2X21peGVyc1tdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBWb2x1bWUiLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCi0JCS5pbmZvID0gY3h0X2VhcGRfaW5mbywKLQkJLmdldCA9IGN4dF9lYXBkX2dldCwKLQkJLnB1dCA9IGN4dDUwNTFfaHBfbWFzdGVyX3N3X3B1dCwKLQkJLnByaXZhdGVfdmFsdWUgPSAweDFhLAotCX0sCisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCisJe30KK307CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDUxX2Y3MDBfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDE0LCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTQsIDB4MDEsIEhEQV9JTlBVVCksCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDUxX3Rvc2hpYmFfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFZvbHVtZSIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBTd2l0Y2giLCAweDE0LCAweDAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkV4dGVybmFsIE1pYyBWb2x1bWUiLCAweDE0LCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJFeHRlcm5hbCBNaWMgU3dpdGNoIiwgMHgxNCwgMHgwMSwgSERBX0lOUFVUKSwKIAl7fQogfTsKIApAQCAtMTc0OCw4ICsxNzcxLDYgQEAKIAkvKiBFQVBEICovCiAJezB4MWEsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLCAweDJ9LCAvKiBkZWZhdWx0IG9uICovIAogCXsweDE2LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENPTkVYQU5UX0hQX0VWRU5UfSwKLQl7MHgxNywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDWFQ1MDUxX1BPUlRCX0VWRU5UfSwKLQl7MHgxOCwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDWFQ1MDUxX1BPUlRDX0VWRU5UfSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xNzc1LDcgKzE3OTYsNiBAQAogCS8qIEVBUEQgKi8KIAl7MHgxYSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4Mn0sIC8qIGRlZmF1bHQgb24gKi8KIAl7MHgxNiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDT05FWEFOVF9IUF9FVkVOVH0sCi0JezB4MTcsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q1hUNTA1MV9QT1JUQl9FVkVOVH0sCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTgwNywxNyArMTgyNyw2MCBAQAogCS8qIEVBUEQgKi8KIAl7MHgxYSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4Mn0sIC8qIGRlZmF1bHQgb24gKi8KIAl7MHgxNiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDT05FWEFOVF9IUF9FVkVOVH0sCi0JezB4MTcsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q1hUNTA1MV9QT1JUQl9FVkVOVH0sCi0JezB4MTgsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q1hUNTA1MV9QT1JUQ19FVkVOVH0sCiAJezB4MTksIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q09ORVhBTlRfSFBfRVZFTlR9LAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA1MV9mNzAwX2luaXRfdmVyYnNbXSA9IHsKKwkvKiBMaW5lIGluLCBNaWMgKi8KKwl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4MDN9LAorCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MH0sCisJezB4MWQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwfSwKKwkvKiBTUEsgICovCisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBIUCwgQW1wICAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MTYsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBEQUMxICovCisJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBSZWNvcmQgc2VsZWN0b3I6IEludCBtaWMgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKSB8IDB4NDR9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKKwkvKiBTUERJRiByb3V0ZTogUENNICovCisJezB4MWMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAorCS8qIEVBUEQgKi8KKwl7MHgxYSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4Mn0sIC8qIGRlZmF1bHQgb24gKi8KKwl7MHgxNiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDT05FWEFOVF9IUF9FVkVOVH0sCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHZvaWQgY3h0NTA1MV9pbml0X21pY19wb3J0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJCSB1bnNpZ25lZCBpbnQgZXZlbnQpCit7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJICAgIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKKwkJCSAgICBBQ19VU1JTUF9FTiB8IGV2ZW50KTsKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9JTlBVVF9KQUNLCisJY29uZXhhbnRfYWRkX2phY2soY29kZWMsIG5pZCwgU05EX0pBQ0tfTUlDUk9QSE9ORSk7CisJY29uZXhhbnRfcmVwb3J0X2phY2soY29kZWMsIG5pZCk7CisjZW5kaWYKK30KKwogLyogaW5pdGlhbGl6ZSBqYWNrLXNlbnNpbmcsIHRvbyAqLwogc3RhdGljIGludCBjeHQ1MDUxX2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwogCWNvbmV4YW50X2luaXQoY29kZWMpOwogCWNvbmV4YW50X2luaXRfamFja3MoY29kZWMpOworCisJaWYgKHNwZWMtPmF1dG9fbWljICYgQVVUT19NSUNfUE9SVEIpCisJCWN4dDUwNTFfaW5pdF9taWNfcG9ydChjb2RlYywgMHgxNywgQ1hUNTA1MV9QT1JUQl9FVkVOVCk7CisJaWYgKHNwZWMtPmF1dG9fbWljICYgQVVUT19NSUNfUE9SVEMpCisJCWN4dDUwNTFfaW5pdF9taWNfcG9ydChjb2RlYywgMHgxOCwgQ1hUNTA1MV9QT1JUQ19FVkVOVCk7CisKIAlpZiAoY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCkgewogCQljeHQ1MDUxX2hwX2F1dG9tdXRlKGNvZGVjKTsKIAkJY3h0NTA1MV9wb3J0Yl9hdXRvbWljKGNvZGVjKTsKQEAgLTE4MzIsNiArMTg5NSw4IEBACiAJQ1hUNTA1MV9IUCwJLyogbm8gZG9ja2luZyAqLwogCUNYVDUwNTFfSFBfRFY2NzM2LAkvKiBIUCB3aXRob3V0IG1pYyBzd2l0Y2ggKi8KIAlDWFQ1MDUxX0xFTk9WT19YMjAwLAkvKiBMZW5vdm8gWDIwMCBsYXB0b3AgKi8KKwlDWFQ1MDUxX0Y3MDAsICAgICAgIC8qIEhQIENvbXBhcSBQcmVzYXJpbyBGNzAwICovCisJQ1hUNTA1MV9UT1NISUJBLAkvKiBUb3NoaWJhIE0zMDAgJiBjbyAqLwogCUNYVDUwNTFfTU9ERUxTCiB9OwogCkBAIC0xODQwLDExICsxOTA1LDE1IEBACiAJW0NYVDUwNTFfSFBdCQk9ICJocCIsCiAJW0NYVDUwNTFfSFBfRFY2NzM2XQk9ICJocC1kdjY3MzYiLAogCVtDWFQ1MDUxX0xFTk9WT19YMjAwXQk9ICJsZW5vdm8teDIwMCIsCisJW0NYVDUwNTFfRjcwMF0gICAgICAgICAgPSAiaHAtNzAwIiwKKwlbQ1hUNTA1MV9UT1NISUJBXQk9ICJ0b3NoaWJhIiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjeHQ1MDUxX2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGNmLCAiSFAgRFY2NzM2IiwgQ1hUNTA1MV9IUF9EVjY3MzYpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDM2MGIsICJDb21wYXEgUHJlc2FyaW8gQ1E2MCIsIENYVDUwNTFfSFApLAorCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwZWEsICJDb21wYXEgUHJlc2FyaW8gRjcwMCIsIENYVDUwNTFfRjcwMCksCisJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmY1MCwgIlRvc2hpYmEgTTMweCIsIENYVDUwNTFfVE9TSElCQSksCiAJU05EX1BDSV9RVUlSSygweDE0ZjEsIDB4MDEwMSwgIkNvbmV4YW50IFJlZmVyZW5jZSBib2FyZCIsCiAJCSAgICAgIENYVDUwNTFfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTRmMSwgMHg1MDUxLCAiSFAgU3BhcnRhbiAxLjEiLCBDWFQ1MDUxX0hQKSwKQEAgLTE4NzIsOCArMTk0MSw5IEBACiAJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBDWFQ1MDUxX1NQRElGX09VVDsKIAlzcGVjLT5udW1fYWRjX25pZHMgPSAxOyAvKiBub3QgMjsgdmlhIGF1dG8tbWljIHN3aXRjaCAqLwogCXNwZWMtPmFkY19uaWRzID0gY3h0NTA1MV9hZGNfbmlkczsKLQlzcGVjLT5udW1fbWl4ZXJzID0gMTsKLQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDUxX21peGVyczsKKwlzcGVjLT5udW1fbWl4ZXJzID0gMjsKKwlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDUxX2NhcHR1cmVfbWl4ZXJzOworCXNwZWMtPm1peGVyc1sxXSA9IGN4dDUwNTFfcGxheWJhY2tfbWl4ZXJzOwogCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMTsKIAlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA1MV9pbml0X3ZlcmJzOwogCXNwZWMtPnNwZGlmX3JvdXRlID0gMDsKQEAgLTE4ODcsNiArMTk1Nyw3IEBACiAJYm9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIENYVDUwNTFfTU9ERUxTLAogCQkJCQkJICBjeHQ1MDUxX21vZGVscywKIAkJCQkJCSAgY3h0NTA1MV9jZmdfdGJsKTsKKwlzcGVjLT5hdXRvX21pYyA9IEFVVE9fTUlDX1BPUlRCIHwgQVVUT19NSUNfUE9SVEM7CiAJc3dpdGNoIChib2FyZF9jb25maWcpIHsKIAljYXNlIENYVDUwNTFfSFA6CiAJCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNTFfaHBfbWl4ZXJzOwpAQCAtMTg5NCwxMSArMTk2NSwyMCBAQAogCWNhc2UgQ1hUNTA1MV9IUF9EVjY3MzY6CiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDUxX2hwX2R2NjczNl9pbml0X3ZlcmJzOwogCQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDUxX2hwX2R2NjczNl9taXhlcnM7Ci0JCXNwZWMtPm5vX2F1dG9fbWljID0gMTsKKwkJc3BlYy0+YXV0b19taWMgPSAwOwogCQlicmVhazsKIAljYXNlIENYVDUwNTFfTEVOT1ZPX1gyMDA6CiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDUxX2xlbm92b194MjAwX2luaXRfdmVyYnM7CiAJCWJyZWFrOworCWNhc2UgQ1hUNTA1MV9GNzAwOgorCQlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA1MV9mNzAwX2luaXRfdmVyYnM7CisJCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNTFfZjcwMF9taXhlcnM7CisJCXNwZWMtPmF1dG9fbWljID0gMDsKKwkJYnJlYWs7CisJY2FzZSBDWFQ1MDUxX1RPU0hJQkE6CisJCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNTFfdG9zaGliYV9taXhlcnM7CisJCXNwZWMtPmF1dG9fbWljID0gQVVUT19NSUNfUE9SVEI7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTk2Niw1MyArMjA0Niw5NyBAQAogCXJldHVybiAxOwogfQogCi0vKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KLXN0YXRpYyB2b2lkIGN4dDUwNjZfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDY2X29scGNfZGNfYmlhcyA9IHsKKwkubnVtX2l0ZW1zID0gMywKKwkuaXRlbXMgPSB7CisJCXsgIk9mZiIsIFBJTl9JTiB9LAorCQl7ICI1MCUiLCBQSU5fVlJFRjUwIH0sCisJCXsgIjgwJSIsIFBJTl9WUkVGODAgfSwKKwl9LAorfTsKKworc3RhdGljIGludCBjeHQ1MDY2X3NldF9vbHBjX2RjX2JpYXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlzdHJ1Y3QgaGRhX3ZlcmIgZXh0X21pY19wcmVzZW50W10gPSB7Ci0JCS8qIGVuYWJsZSBleHRlcm5hbCBtaWMsIHBvcnQgQiAqLwotCQl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBzcGVjLT5leHRfbWljX2JpYXN9LAorCS8qIEV2ZW4gdGhvdWdoIHBvcnQgRiBpcyB0aGUgREMgaW5wdXQsIHRoZSBiaWFzIGlzIGNvbnRyb2xsZWQgb24gcG9ydCBCLgorCSAqIHdlIGFsc28gbGVhdmUgdGhhdCBwb3J0IGFzIGFuIGFjdGl2ZSBpbnB1dCAoYnV0IHVuc2VsZWN0ZWQpIGluIERDIG1vZGUKKwkgKiBqdXN0IGluIGNhc2UgdGhhdCBpcyBuZWNlc3NhcnkgdG8gbWFrZSB0aGUgYmlhcyBzZXR0aW5nIHRha2UgZWZmZWN0LiAqLworCXJldHVybiBzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDFhLCAwLAorCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCWN4dDUwNjZfb2xwY19kY19iaWFzLml0ZW1zW3NwZWMtPmRjX2lucHV0X2JpYXNdLmluZGV4KTsKK30KIAotCQkvKiBzd2l0Y2ggdG8gZXh0ZXJuYWwgbWljIGlucHV0ICovCi0JCXsweDE3LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMH0sCisvKiBPTFBDIGRlZmVycyBtaWMgd2lkZ2V0IGNvbnRyb2wgdW50aWwgd2hlbiBjYXB0dXJlIGlzIHN0YXJ0ZWQgYmVjYXVzZSB0aGUKKyAqIG1pY3JvcGhvbmUgTEVEIGNvbWVzIG9uIGFzIHNvb24gYXMgdGhlc2Ugc2V0dGluZ3MgYXJlIHB1dCBpbiBwbGFjZS4gaWYgd2UKKyAqIGRpZCB0aGlzIGJlZm9yZSByZWNvcmRpbmcsIGl0IHdvdWxkIGdpdmUgdGhlIGZhbHNlIGluZGljYXRpb24gdGhhdCByZWNvcmRpbmcKKyAqIGlzIGhhcHBlbmluZyB3aGVuIGl0IGlzIG5vdC4gKi8KK3N0YXRpYyB2b2lkIGN4dDUwNjZfb2xwY19zZWxlY3RfbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaWYgKCFzcGVjLT5yZWNvcmRpbmcpCisJCXJldHVybjsKIAotCQkvKiBkaXNhYmxlIGludGVybmFsIG1pYywgcG9ydCBDICovCi0JCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAotCQl7fQotCX07Ci0Jc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBleHRfbWljX2Fic2VudFtdID0gewotCQkvKiBlbmFibGUgaW50ZXJuYWwgbWljLCBwb3J0IEMgKi8KLQkJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJaWYgKHNwZWMtPmRjX2VuYWJsZSkgeworCQkvKiBpbiBEQyBtb2RlIHdlIGlnbm9yZSBwcmVzZW5jZSBkZXRlY3Rpb24gYW5kIGp1c3QgdXNlIHRoZSBqYWNrCisJCSAqIHRocm91Z2ggb3VyIHNwZWNpYWwgREMgcG9ydCAqLworCQljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgZW5hYmxlX2RjX21vZGVbXSA9IHsKKwkJCS8qIGRpc2JsZSBpbnRlcm5hbCBtaWMsIHBvcnQgQyAqLworCQkJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCiAKLQkJLyogc3dpdGNoIHRvIGludGVybmFsIG1pYyBpbnB1dCAqLwotCQl7MHgxNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDF9LAorCQkJLyogZW5hYmxlIERDIGNhcHR1cmUsIHBvcnQgRiAqLworCQkJezB4MWUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwkJCXt9LAorCQl9OwogCi0JCS8qIGRpc2FibGUgZXh0ZXJuYWwgbWljLCBwb3J0IEIgKi8KLQkJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCi0JCXt9Ci0JfTsKKwkJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgZW5hYmxlX2RjX21vZGUpOworCQkvKiBwb3J0IEIgaW5wdXQgZGlzYWJsZWQgKGFuZCBiaWFzIHNldCkgdGhyb3VnaCB0aGUgZm9sbG93aW5nIGNhbGwgKi8KKwkJY3h0NTA2Nl9zZXRfb2xwY19kY19iaWFzKGNvZGVjKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGRpc2FibGUgREMgKHBvcnQgRikgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFlLCAwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDApOworCisJLyogZXh0ZXJuYWwgbWljLCBwb3J0IEIgKi8KKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFhLCAwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCXNwZWMtPmV4dF9taWNfcHJlc2VudCA/IENYVDUwNjZfT0xQQ19FWFRfTUlDX0JJQVMgOiAwKTsKKworCS8qIGludGVybmFsIG1pYywgcG9ydCBDICovCisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxYiwgMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQlzcGVjLT5leHRfbWljX3ByZXNlbnQgPyAwIDogUElOX1ZSRUY4MCk7Cit9CisKKy8qIHRvZ2dsZSBpbnB1dCBvZiBidWlsdC1pbiBhbmQgbWljIGphY2sgYXBwcm9wcmlhdGVseSAqLworc3RhdGljIHZvaWQgY3h0NTA2Nl9vbHBjX2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKIAotCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCAweDFhKTsKLQlpZiAocHJlc2VudCkgeworCWlmIChzcGVjLT5kY19lbmFibGUpIC8qIGRvbid0IGRvIHByZXNlbmNlIGRldGVjdGlvbiBpbiBEQyBtb2RlICovCisJCXJldHVybjsKKworCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MWEsIDAsCisJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKKwlpZiAocHJlc2VudCkKIAkJc25kX3ByaW50ZGQoIkNYVDUwNjY6IGV4dGVybmFsIG1pY3JvcGhvbmUgZGV0ZWN0ZWRcbiIpOwotCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCBleHRfbWljX3ByZXNlbnQpOwotCX0gZWxzZSB7CisJZWxzZQogCQlzbmRfcHJpbnRkZCgiQ1hUNTA2NjogZXh0ZXJuYWwgbWljcm9waG9uZSBhYnNlbnRcbiIpOwotCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCBleHRfbWljX2Fic2VudCk7Ci0JfQorCisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxNywgMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCisJCXByZXNlbnQgPyAwIDogMSk7CisJc3BlYy0+ZXh0X21pY19wcmVzZW50ID0gISFwcmVzZW50OworCisJY3h0NTA2Nl9vbHBjX3NlbGVjdF9taWMoY29kZWMpOwogfQogCiAvKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gZGlnaXRhbCBtaWMgYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KIHN0YXRpYyB2b2lkIGN4dDUwNjZfdm9zdHJvX2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKIAogCXN0cnVjdCBoZGFfdmVyYiBleHRfbWljX3ByZXNlbnRbXSA9IHsKIAkJLyogZW5hYmxlIGV4dGVybmFsIG1pYywgcG9ydCBCICovCi0JCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIHNwZWMtPmV4dF9taWNfYmlhc30sCisJCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAogCiAJCS8qIHN3aXRjaCB0byBleHRlcm5hbCBtaWMgaW5wdXQgKi8KIAkJezB4MTcsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKQEAgLTIwNDQsNiArMjE2OCwzNCBAQAogCX0KIH0KIAorLyogdG9nZ2xlIGlucHV0IG9mIGJ1aWx0LWluIGRpZ2l0YWwgbWljIGFuZCBtaWMgamFjayBhcHByb3ByaWF0ZWx5ICovCitzdGF0aWMgdm9pZCBjeHQ1MDY2X2lkZWFwYWRfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKworCXN0cnVjdCBoZGFfdmVyYiBleHRfbWljX3ByZXNlbnRbXSA9IHsKKwkJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKKwkJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJCXsweDIzLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCQl7fQorCX07CisJc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBleHRfbWljX2Fic2VudFtdID0geworCQl7MHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDJ9LAorCQl7MHgyMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCQl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwkJe30KKwl9OworCisJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MWIpOworCWlmIChwcmVzZW50KSB7CisJCXNuZF9wcmludGRkKCJDWFQ1MDY2OiBleHRlcm5hbCBtaWNyb3Bob25lIGRldGVjdGVkXG4iKTsKKwkJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgZXh0X21pY19wcmVzZW50KTsKKwl9IGVsc2UgeworCQlzbmRfcHJpbnRkZCgiQ1hUNTA2NjogZXh0ZXJuYWwgbWljcm9waG9uZSBhYnNlbnRcbiIpOworCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCBleHRfbWljX2Fic2VudCk7CisJfQorfQorCiAvKiBtdXRlIGludGVybmFsIHNwZWFrZXIgaWYgSFAgaXMgcGx1Z2dlZCAqLwogc3RhdGljIHZvaWQgY3h0NTA2Nl9ocF9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTIwNjMsMTUgKzIyMTUsMTggQEAKIH0KIAogLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIGphY2sgc2Vuc2luZyAqLwotc3RhdGljIHZvaWQgY3h0NTA2Nl91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKK3N0YXRpYyB2b2lkIGN4dDUwNjZfb2xwY191bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKIHsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXNuZF9wcmludGRkKCJDWFQ1MDY2OiB1bnNvbCBldmVudCAleCAoJXgpXG4iLCByZXMsIHJlcyA+PiAyNik7CiAJc3dpdGNoIChyZXMgPj4gMjYpIHsKIAljYXNlIENPTkVYQU5UX0hQX0VWRU5UOgogCQljeHQ1MDY2X2hwX2F1dG9tdXRlKGNvZGVjKTsKIAkJYnJlYWs7CiAJY2FzZSBDT05FWEFOVF9NSUNfRVZFTlQ6Ci0JCWN4dDUwNjZfYXV0b21pYyhjb2RlYyk7CisJCS8qIGlnbm9yZSBtaWMgZXZlbnRzIGluIERDIG1vZGU7IHdlJ3JlIGFsd2F5cyB1c2luZyB0aGUgamFjayAqLworCQlpZiAoIXNwZWMtPmRjX2VuYWJsZSkKKwkJCWN4dDUwNjZfb2xwY19hdXRvbWljKGNvZGVjKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMjA5MCw2ICsyMjQ1LDIwIEBACiAJfQogfQogCisvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgamFjayBzZW5zaW5nICovCitzdGF0aWMgdm9pZCBjeHQ1MDY2X2lkZWFwYWRfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCit7CisJc25kX3ByaW50ZGQoIkNYVDUwNjZfaWRlYXBhZDogdW5zb2wgZXZlbnQgJXggKCV4KVxuIiwgcmVzLCByZXMgPj4gMjYpOworCXN3aXRjaCAocmVzID4+IDI2KSB7CisJY2FzZSBDT05FWEFOVF9IUF9FVkVOVDoKKwkJY3h0NTA2Nl9ocF9hdXRvbXV0ZShjb2RlYyk7CisJCWJyZWFrOworCWNhc2UgQ09ORVhBTlRfTUlDX0VWRU5UOgorCQljeHQ1MDY2X2lkZWFwYWRfYXV0b21pYyhjb2RlYyk7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNjZfYW5hbG9nX21pY19ib29zdCA9IHsKIAkubnVtX2l0ZW1zID0gNSwKIAkuaXRlbXMgPSB7CkBAIC0yMTAxLDYgKzIyNzAsMjMgQEAKIAl9LAogfTsKIAorc3RhdGljIHZvaWQgY3h0NTA2Nl9zZXRfbWljX2Jvb3N0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHgxNywgMCwKKwkJQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJQUNfQU1QX1NFVF9SSUdIVCB8IEFDX0FNUF9TRVRfTEVGVCB8IEFDX0FNUF9TRVRfT1VUUFVUIHwKKwkJCWN4dDUwNjZfYW5hbG9nX21pY19ib29zdC5pdGVtc1tzcGVjLT5taWNfYm9vc3RdLmluZGV4KTsKKwlpZiAoc3BlYy0+aWRlYXBhZCkgeworCQkvKiBhZGp1c3QgdGhlIGludGVybmFsIG1pYyBhcyB3ZWxsLi4uaXQgaXMgbm90IHRocm91Z2ggMHgxNyAqLworCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCAweDIzLCAwLAorCQkJQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJCUFDX0FNUF9TRVRfUklHSFQgfCBBQ19BTVBfU0VUX0xFRlQgfCBBQ19BTVBfU0VUX0lOUFVUIHwKKwkJCQljeHQ1MDY2X2FuYWxvZ19taWNfYm9vc3QuCisJCQkJCWl0ZW1zW3NwZWMtPm1pY19ib29zdF0uaW5kZXgpOworCX0KK30KKwogc3RhdGljIGludCBjeHQ1MDY2X21pY19ib29zdF9tdXhfZW51bV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewpAQCAtMjExMSwxNSArMjI5Nyw4IEBACiAJCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JaW50IHZhbDsKLQloZGFfbmlkX3QgbmlkID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmOwotCWludCBpbm91dCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4MTAwKSA/Ci0JCUFDX0FNUF9HRVRfSU5QVVQgOiBBQ19BTVBfR0VUX09VVFBVVDsKLQotCXZhbCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQlBQ19WRVJCX0dFVF9BTVBfR0FJTl9NVVRFLCBpbm91dCk7Ci0KLQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gdmFsICYgQUNfQU1QX0dBSU47CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gc3BlYy0+bWljX2Jvb3N0OwogCXJldHVybiAwOwogfQogCkBAIC0yMTI3LDI2ICsyMzA2LDEzMiBAQAogCQkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmY3h0NTA2Nl9hbmFsb2dfbWljX2Jvb3N0OwogCXVuc2lnbmVkIGludCBpZHg7Ci0JaGRhX25pZF90IG5pZCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZjsKLQlpbnQgaW5vdXQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweDEwMCkgPwotCQlBQ19BTVBfU0VUX0lOUFVUIDogQUNfQU1QX1NFVF9PVVRQVVQ7Ci0KLQlpZiAoIWltdXgtPm51bV9pdGVtcykKLQkJcmV0dXJuIDA7CiAJaWR4ID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKIAlpZiAoaWR4ID49IGltdXgtPm51bV9pdGVtcykKIAkJaWR4ID0gaW11eC0+bnVtX2l0ZW1zIC0gMTsKIAotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKLQkJQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKLQkJQUNfQU1QX1NFVF9SSUdIVCB8IEFDX0FNUF9TRVRfTEVGVCB8IGlub3V0IHwKLQkJCWltdXgtPml0ZW1zW2lkeF0uaW5kZXgpOworCXNwZWMtPm1pY19ib29zdCA9IGlkeDsKKwlpZiAoIXNwZWMtPmRjX2VuYWJsZSkKKwkJY3h0NTA2Nl9zZXRfbWljX2Jvb3N0KGNvZGVjKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgY3h0NTA2Nl9lbmFibGVfZGMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJY29uc3Qgc3RydWN0IGhkYV92ZXJiIGVuYWJsZV9kY19tb2RlW10gPSB7CisJCS8qIGRpc2FibGUgZ2FpbiAqLworCQl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCisJCS8qIHN3aXRjaCB0byBEQyBpbnB1dCAqLworCQl7MHgxNywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDN9LAorCQl7fQorCX07CisKKwkvKiBjb25maWd1cmUgYXMgaW5wdXQgc291cmNlICovCisJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgZW5hYmxlX2RjX21vZGUpOworCWN4dDUwNjZfb2xwY19zZWxlY3RfbWljKGNvZGVjKTsgLyogYWxzbyBzZXRzIGNvbmZpZ3VyZWQgYmlhcyAqLworfQorCitzdGF0aWMgdm9pZCBjeHQ1MDY2X2Rpc2FibGVfZGMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJLyogcmVjb25maWd1cmUgaW5wdXQgc291cmNlICovCisJY3h0NTA2Nl9zZXRfbWljX2Jvb3N0KGNvZGVjKTsKKwkvKiBhdXRvbWljIGFsc28gc2VsZWN0cyB0aGUgcmlnaHQgbWljIGlmIHdlJ3JlIHJlY29yZGluZyAqLworCWN4dDUwNjZfb2xwY19hdXRvbWljKGNvZGVjKTsKK30KKworc3RhdGljIGludCBjeHQ1MDY2X29scGNfZGNfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gc3BlYy0+ZGNfZW5hYmxlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4dDUwNjZfb2xwY19kY19wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGRjX2VuYWJsZSA9ICEhdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwlpZiAoZGNfZW5hYmxlID09IHNwZWMtPmRjX2VuYWJsZSkKKwkJcmV0dXJuIDA7CisKKwlzcGVjLT5kY19lbmFibGUgPSBkY19lbmFibGU7CisJaWYgKGRjX2VuYWJsZSkKKwkJY3h0NTA2Nl9lbmFibGVfZGMoY29kZWMpOworCWVsc2UKKwkJY3h0NTA2Nl9kaXNhYmxlX2RjKGNvZGVjKTsKIAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IGN4dDUwNjZfb2xwY19kY19iaWFzX2VudW1faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlyZXR1cm4gc25kX2hkYV9pbnB1dF9tdXhfaW5mbygmY3h0NTA2Nl9vbHBjX2RjX2JpYXMsIHVpbmZvKTsKK30KKworc3RhdGljIGludCBjeHQ1MDY2X29scGNfZGNfYmlhc19lbnVtX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBzcGVjLT5kY19pbnB1dF9iaWFzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4dDUwNjZfb2xwY19kY19iaWFzX2VudW1fcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmY3h0NTA2Nl9hbmFsb2dfbWljX2Jvb3N0OworCXVuc2lnbmVkIGludCBpZHg7CisKKwlpZHggPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCWlmIChpZHggPj0gaW11eC0+bnVtX2l0ZW1zKQorCQlpZHggPSBpbXV4LT5udW1faXRlbXMgLSAxOworCisJc3BlYy0+ZGNfaW5wdXRfYmlhcyA9IGlkeDsKKwlpZiAoc3BlYy0+ZGNfZW5hYmxlKQorCQljeHQ1MDY2X3NldF9vbHBjX2RjX2JpYXMoY29kZWMpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBjeHQ1MDY2X29scGNfY2FwdHVyZV9wcmVwYXJlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJLyogbWFyayBhcyByZWNvcmRpbmcgYW5kIGNvbmZpZ3VyZSB0aGUgbWljcm9waG9uZSB3aWRnZXQgc28gdGhhdCB0aGUKKwkgKiByZWNvcmRpbmcgTEVEIGNvbWVzIG9uLiAqLworCXNwZWMtPnJlY29yZGluZyA9IDE7CisJY3h0NTA2Nl9vbHBjX3NlbGVjdF9taWMoY29kZWMpOworfQorCitzdGF0aWMgdm9pZCBjeHQ1MDY2X29scGNfY2FwdHVyZV9jbGVhbnVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJY29uc3Qgc3RydWN0IGhkYV92ZXJiIGRpc2FibGVfbWljc1tdID0geworCQkvKiBkaXNhYmxlIGV4dGVybmFsIG1pYywgcG9ydCBCICovCisJCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCisJCS8qIGRpc2JsZSBpbnRlcm5hbCBtaWMsIHBvcnQgQyAqLworCQl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKworCQkvKiBkaXNhYmxlIERDIGNhcHR1cmUsIHBvcnQgRiAqLworCQl7MHgxZSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwkJe30sCisJfTsKKworCXNuZF9oZGFfc2VxdWVuY2Vfd3JpdGUoY29kZWMsIGRpc2FibGVfbWljcyk7CisJc3BlYy0+cmVjb3JkaW5nID0gMDsKK30KKwogc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNjZfY2FwdHVyZV9zb3VyY2UgPSB7CiAJLm51bV9pdGVtcyA9IDQsCiAJLml0ZW1zID0gewpAQCAtMjE4Nyw2ICsyNDcyLDcgQEAKIAkJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfAogCQkJCSAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHwKIAkJCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfQ0FMTEJBQ0ssCisJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHLAogCQkuaW5mbyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9pbmZvLAogCQkuZ2V0ID0gc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2dldCwKIAkJLnB1dCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9wdXQsCkBAIC0yMTk4LDYgKzI0ODQsMjQgQEAKIAl7fQogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNjZfbWl4ZXJfb2xwY19kY1tdID0geworCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkRDIE1vZGUgRW5hYmxlIFN3aXRjaCIsCisJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKKwkJLmdldCA9IGN4dDUwNjZfb2xwY19kY19nZXQsCisJCS5wdXQgPSBjeHQ1MDY2X29scGNfZGNfcHV0LAorCX0sCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiREMgSW5wdXQgQmlhcyBFbnVtIiwKKwkJLmluZm8gPSBjeHQ1MDY2X29scGNfZGNfYmlhc19lbnVtX2luZm8sCisJCS5nZXQgPSBjeHQ1MDY2X29scGNfZGNfYmlhc19lbnVtX2dldCwKKwkJLnB1dCA9IGN4dDUwNjZfb2xwY19kY19iaWFzX2VudW1fcHV0LAorCX0sCisJe30KK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDY2X21peGVyc1tdID0gewogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCkBAIC0yMjEwLDExICsyNTE0LDEwIEBACiAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJFeHQgTWljIEJvb3N0IENhcHR1cmUgRW51bSIsCisJCS5uYW1lID0gIkFuYWxvZyBNaWMgQm9vc3QgQ2FwdHVyZSBFbnVtIiwKIAkJLmluZm8gPSBjeHQ1MDY2X21pY19ib29zdF9tdXhfZW51bV9pbmZvLAogCQkuZ2V0ID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1fZ2V0LAogCQkucHV0ID0gY3h0NTA2Nl9taWNfYm9vc3RfbXV4X2VudW1fcHV0LAotCQkucHJpdmF0ZV92YWx1ZSA9IDB4MTcsCiAJfSwKIAogCUhEQV9CSU5EX1ZPTCgiQ2FwdHVyZSBWb2x1bWUiLCAmY3h0NTA2Nl9iaW5kX2NhcHR1cmVfdm9sX290aGVycyksCkBAIC0yMjk2LDEwICsyNTk5LDEwIEBACiAJezB4MTksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwgLyogREFDMSAqLwogCiAJLyogUG9ydCBCOiBleHRlcm5hbCBtaWNyb3Bob25lICovCi0JezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgQ1hUNTA2Nl9PTFBDX0VYVF9NSUNfQklBU30sCisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCiAKIAkvKiBQb3J0IEM6IGludGVybmFsIG1pY3JvcGhvbmUgKi8KLQl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKIAogCS8qIFBvcnQgRDogdW51c2VkICovCiAJezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCkBAIC0yMzA4LDcgKzI2MTEsNyBAQAogCXsweDFkLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAogCXsweDFkLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgyfSwgLyogZGVmYXVsdCBvbiAqLwogCi0JLyogUG9ydCBGOiB1bnVzZWQgKi8KKwkvKiBQb3J0IEY6IGV4dGVybmFsIERDIGlucHV0IHRocm91Z2ggbWljcm9waG9uZSBwb3J0ICovCiAJezB4MWUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCiAKIAkvKiBQb3J0IEc6IGludGVybmFsIHNwZWFrZXJzICovCkBAIC0yNDEyLDYgKzI3MTUsNTYgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNjZfaW5pdF92ZXJic19pZGVhcGFkW10gPSB7CisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sIC8qIFBvcnQgQiAqLworCXsweDFiLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LCAvKiBQb3J0IEMgKi8KKwl7MHgxZSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LCAvKiBQb3J0IEYgKi8KKwl7MHgxZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LCAvKiBQb3J0IEUgKi8KKworCS8qIFNwZWFrZXJzICAqLworCXsweDFmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDFmLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sIC8qIERBQzEgKi8KKworCS8qIEhQLCBBbXAgICovCisJezB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LCAvKiBEQUMxICovCisKKwl7MHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDFjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sIC8qIERBQzEgKi8KKworCS8qIERBQzEgKi8KKwl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCisJLyogTm9kZSAxNCBjb25uZWN0aW9uczogMHgxNyAweDE4IDB4MjMgMHgyNCAweDI3ICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDUwfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDIpIHwgMHg1MH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMn0sCS8qIGRlZmF1bHQgdG8gaW50ZXJuYWwgbWljICovCisKKwkvKiBBdWRpbyBpbnB1dCBzZWxlY3RvciAqLworCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB8IDB4Mn0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAxfSwJLyogcm91dGUgZXh0IG1pYyAqLworCisJLyogU1BESUYgcm91dGU6IFBDTSAqLworCXsweDIwLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKKwl7MHgyMiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCisKKwl7MHgyMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgyMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKworCS8qIGludGVybmFsIG1pY3JvcGhvbmUgKi8KKwl7MHgyMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LCAvKiBlbmFibGUgaW50IG1pYyAqLworCisJLyogRUFQRCAqLworCXsweDFkLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgyfSwgLyogZGVmYXVsdCBvbiAqLworCisJezB4MTksIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9IUF9FVkVOVH0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9NSUNfRVZFTlR9LAorCXsgfSAvKiBlbmQgKi8KK307CisKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA2Nl9pbml0X3ZlcmJzX3BvcnRkX2xvW10gPSB7CiAJezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCiAJeyB9IC8qIGVuZCAqLwpAQCAtMjQyOCw4ICsyNzgxLDI0IEBACiAJCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOwogCQlpZiAoc3BlYy0+ZGVsbF92b3N0cm8pCiAJCQljeHQ1MDY2X3Zvc3Ryb19hdXRvbWljKGNvZGVjKTsKLQkJZWxzZQotCQkJY3h0NTA2Nl9hdXRvbWljKGNvZGVjKTsKKwkJZWxzZSBpZiAoc3BlYy0+aWRlYXBhZCkKKwkJCWN4dDUwNjZfaWRlYXBhZF9hdXRvbWljKGNvZGVjKTsKKwl9CisJY3h0NTA2Nl9zZXRfbWljX2Jvb3N0KGNvZGVjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeHQ1MDY2X29scGNfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNuZF9wcmludGRkKCJDWFQ1MDY2OiBpbml0XG4iKTsKKwljb25leGFudF9pbml0KGNvZGVjKTsKKwljeHQ1MDY2X2hwX2F1dG9tdXRlKGNvZGVjKTsKKwlpZiAoIXNwZWMtPmRjX2VuYWJsZSkgeworCQljeHQ1MDY2X3NldF9taWNfYm9vc3QoY29kZWMpOworCQljeHQ1MDY2X29scGNfYXV0b21pYyhjb2RlYyk7CisJfSBlbHNlIHsKKwkJY3h0NTA2Nl9lbmFibGVfZGMoY29kZWMpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTI0MzksNiArMjgwOCw3IEBACiAJQ1hUNTA2Nl9ERUxMX0xBUFRPUCwJLyogRGVsbCBMYXB0b3AgKi8KIAlDWFQ1MDY2X09MUENfWE9fMV81LAkvKiBPTFBDIFhPIDEuNSAqLwogCUNYVDUwNjZfREVMTF9WT1NUTywJLyogRGVsbCBWb3N0cm8gMTAxNWkgKi8KKwlDWFQ1MDY2X0lERUFQQUQsCS8qIExlbm92byBJZGVhUGFkIFUxNTAgKi8KIAlDWFQ1MDY2X01PREVMUwogfTsKIApAQCAtMjQ0Niw3ICsyODE2LDggQEAKIAlbQ1hUNTA2Nl9MQVBUT1BdCQk9ICJsYXB0b3AiLAogCVtDWFQ1MDY2X0RFTExfTEFQVE9QXQk9ICJkZWxsLWxhcHRvcCIsCiAJW0NYVDUwNjZfT0xQQ19YT18xXzVdCT0gIm9scGMteG8tMV81IiwKLQlbQ1hUNTA2Nl9ERUxMX1ZPU1RPXSAgICA9ICJkZWxsLXZvc3RybyIKKwlbQ1hUNTA2Nl9ERUxMX1ZPU1RPXSAgICA9ICJkZWxsLXZvc3RybyIsCisJW0NYVDUwNjZfSURFQVBBRF0JPSAiaWRlYXBhZCIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3h0NTA2Nl9jZmdfdGJsW10gPSB7CkBAIC0yNDU2LDYgKzI4MjcsNyBAQAogCQkgICAgICBDWFQ1MDY2X0RFTExfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTUyZCwgMHgwODMzLCAiT0xQQyBYTy0xLjUiLCBDWFQ1MDY2X09MUENfWE9fMV81KSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNDAyLCAiRGVsbCBWb3N0cm8iLCBDWFQ1MDY2X0RFTExfVk9TVE8pLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDNhMGQsICJpZGVhcGFkIiwgQ1hUNTA2Nl9JREVBUEFEKSwKIAl7fQogfTsKIApAQCAtMjQ3MCw3ICsyODQyLDcgQEAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gY29uZXhhbnRfcGF0Y2hfb3BzOwotCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNjZfaW5pdDsKKwljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjb25leGFudF9pbml0OwogCiAJc3BlYy0+ZGVsbF9hdXRvbXV0ZSA9IDA7CiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKQEAgLTI0ODMsNyArMjg1NSw2IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJmN4dDUwNjZfY2FwdHVyZV9zb3VyY2U7CiAKIAlzcGVjLT5wb3J0X2RfbW9kZSA9IFBJTl9IUDsKLQlzcGVjLT5leHRfbWljX2JpYXMgPSBQSU5fVlJFRjgwOwogCiAJc3BlYy0+bnVtX2luaXRfdmVyYnMgPSAxOwogCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnM7CkBAIC0yNTEwLDIwICsyODgxLDI4IEBACiAJCXNwZWMtPmRlbGxfYXV0b211dGUgPSAxOwogCQlicmVhazsKIAljYXNlIENYVDUwNjZfT0xQQ19YT18xXzU6Ci0JCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDY2X3Vuc29sX2V2ZW50OworCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBjeHQ1MDY2X29scGNfaW5pdDsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfb2xwY191bnNvbF9ldmVudDsKIAkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNjZfaW5pdF92ZXJic19vbHBjOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJfbWFzdGVyX29scGM7CisJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcl9vbHBjX2RjOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJzOwogCQlzcGVjLT5wb3J0X2RfbW9kZSA9IDA7Ci0JCXNwZWMtPmV4dF9taWNfYmlhcyA9IENYVDUwNjZfT0xQQ19FWFRfTUlDX0JJQVM7CisJCXNwZWMtPm1pY19ib29zdCA9IDM7IC8qIGRlZmF1bHQgMzBkQiBnYWluICovCiAKIAkJLyogbm8gUy9QRElGIG91dCAqLwogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CiAKIAkJLyogaW5wdXQgc291cmNlIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgKi8KIAkJc3BlYy0+aW5wdXRfbXV4ID0gTlVMTDsKKworCQkvKiBvdXIgY2FwdHVyZSBob29rcyB3aGljaCBhbGxvdyB1cyB0byB0dXJuIG9uIHRoZSBtaWNyb3Bob25lIExFRAorCQkgKiBhdCB0aGUgcmlnaHQgdGltZSAqLworCQlzcGVjLT5jYXB0dXJlX3ByZXBhcmUgPSBjeHQ1MDY2X29scGNfY2FwdHVyZV9wcmVwYXJlOworCQlzcGVjLT5jYXB0dXJlX2NsZWFudXAgPSBjeHQ1MDY2X29scGNfY2FwdHVyZV9jbGVhbnVwOwogCQlicmVhazsKIAljYXNlIENYVDUwNjZfREVMTF9WT1NUTzoKKwkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY3h0NTA2Nl9pbml0OwogCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA2Nl92b3N0cm9fZXZlbnQ7CiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnNfdm9zdHJvOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJfbWFzdGVyX29scGM7CkBAIC0yNTMxLDYgKzI5MTAsNyBAQAogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfdm9zdHJvX21peGVyczsKIAkJc3BlYy0+cG9ydF9kX21vZGUgPSAwOwogCQlzcGVjLT5kZWxsX3Zvc3RybyA9IDE7CisJCXNwZWMtPm1pY19ib29zdCA9IDM7IC8qIGRlZmF1bHQgMzBkQiBnYWluICovCiAJCXNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEzKTsKIAogCQkvKiBubyBTL1BESUYgb3V0ICovCkBAIC0yNTM5LDYgKzI5MTksMjIgQEAKIAkJLyogaW5wdXQgc291cmNlIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgKi8KIAkJc3BlYy0+aW5wdXRfbXV4ID0gTlVMTDsKIAkJYnJlYWs7CisJY2FzZSBDWFQ1MDY2X0lERUFQQUQ6CisJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNjZfaW5pdDsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfaWRlYXBhZF9ldmVudDsKKwkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyX21hc3RlcjsKKwkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyczsKKwkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNjZfaW5pdF92ZXJic19pZGVhcGFkOworCQlzcGVjLT5wb3J0X2RfbW9kZSA9IDA7CisJCXNwZWMtPmlkZWFwYWQgPSAxOworCQlzcGVjLT5taWNfYm9vc3QgPSAyOwkvKiBkZWZhdWx0IDIwZEIgZ2FpbiAqLworCisJCS8qIG5vIFMvUERJRiBvdXQgKi8KKwkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSAwOworCisJCS8qIGlucHV0IHNvdXJjZSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkICovCisJCXNwZWMtPmlucHV0X211eCA9IE5VTEw7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCBkYTM0MDk1Li5lOGNiZTIxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMTMxLDggKzEzMSwxMCBAQAogZW51bSB7CiAJQUxDMjY5X0JBU0lDLAogCUFMQzI2OV9RVUFOVEFfRkwxLAotCUFMQzI2OV9BU1VTX0FNSUMsCi0JQUxDMjY5X0FTVVNfRE1JQywKKwlBTEMyNjlfQU1JQywKKwlBTEMyNjlfRE1JQywKKwlBTEMyNjlWQl9BTUlDLAorCUFMQzI2OVZCX0RNSUMsCiAJQUxDMjY5X0ZVSklUU1UsCiAJQUxDMjY5X0xJRkVCT09LLAogCUFMQzI2OV9BVVRPLApAQCAtMjA3LDggKzIwOSwxMCBAQAogCUFMQzg4Ml9BU1VTX0E3SiwKIAlBTEM4ODJfQVNVU19BN00sCiAJQUxDODg1X01BQ1BSTywKKwlBTEM4ODVfTUJBMjEsCiAJQUxDODg1X01CUDMsCiAJQUxDODg1X01CNSwKKwlBTEM4ODVfTUFDTUlOSTMsCiAJQUxDODg1X0lNQUMyNCwKIAlBTEM4ODVfSU1BQzkxLAogCUFMQzg4M18zU1RfMmNoX0RJRywKQEAgLTMzOCw3ICszNDIsNyBAQAogCXZvaWQgKCppbml0X2hvb2spKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIAl2b2lkICgqdW5zb2xfZXZlbnQpKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKTsKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi0Jdm9pZCAoKnBvd2VyX2hvb2spKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgcG93ZXIpOworCXZvaWQgKCpwb3dlcl9ob29rKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAjZW5kaWYKIAogCS8qIGZvciBwaW4gc2Vuc2luZyAqLwpAQCAtMzkxLDcgKzM5NSw3IEBACiAJdm9pZCAoKmluaXRfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqKTsKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJc3RydWN0IGhkYV9hbXBfbGlzdCAqbG9vcGJhY2tzOwotCXZvaWQgKCpwb3dlcl9ob29rKShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IHBvd2VyKTsKKwl2b2lkICgqcG93ZXJfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogI2VuZGlmCiB9OwogCkBAIC02MzMsNiArNjM3LDcgQEAKIAogI2RlZmluZSBBTENfUElOX01PREUoeG5hbWUsIG5pZCwgZGlyKSBcCiAJeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0gMCwgIFwKKwkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgbmlkLCBcCiAJICAuaW5mbyA9IGFsY19waW5fbW9kZV9pbmZvLCBcCiAJICAuZ2V0ID0gYWxjX3Bpbl9tb2RlX2dldCwgXAogCSAgLnB1dCA9IGFsY19waW5fbW9kZV9wdXQsIFwKQEAgLTY4NCw2ICs2ODksNyBAQAogfQogI2RlZmluZSBBTENfR1BJT19EQVRBX1NXSVRDSCh4bmFtZSwgbmlkLCBtYXNrKSBcCiAJeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0gMCwgIFwKKwkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgbmlkLCBcCiAJICAuaW5mbyA9IGFsY19ncGlvX2RhdGFfaW5mbywgXAogCSAgLmdldCA9IGFsY19ncGlvX2RhdGFfZ2V0LCBcCiAJICAucHV0ID0gYWxjX2dwaW9fZGF0YV9wdXQsIFwKQEAgLTczOCw2ICs3NDQsNyBAQAogfQogI2RlZmluZSBBTENfU1BESUZfQ1RSTF9TV0lUQ0goeG5hbWUsIG5pZCwgbWFzaykgXAogCXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IDAsICBcCisJICAuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IG5pZCwgXAogCSAgLmluZm8gPSBhbGNfc3BkaWZfY3RybF9pbmZvLCBcCiAJICAuZ2V0ID0gYWxjX3NwZGlmX2N0cmxfZ2V0LCBcCiAJICAucHV0ID0gYWxjX3NwZGlmX2N0cmxfcHV0LCBcCkBAIC03OTEsNiArNzk4LDcgQEAKIAogI2RlZmluZSBBTENfRUFQRF9DVFJMX1NXSVRDSCh4bmFtZSwgbmlkLCBtYXNrKSBcCiAJeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0gMCwgIFwKKwkgIC5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgbmlkLCBcCiAJICAuaW5mbyA9IGFsY19lYXBkX2N0cmxfaW5mbywgXAogCSAgLmdldCA9IGFsY19lYXBkX2N0cmxfZ2V0LCBcCiAJICAucHV0ID0gYWxjX2VhcGRfY3RybF9wdXQsIFwKQEAgLTgzNywyNyArODQ1LDYgQEAKIAlzcGVjLT5pbml0X3ZlcmJzW3NwZWMtPm51bV9pbml0X3ZlcmJzKytdID0gdmVyYjsKIH0KIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0vKgotICogaG9vayBmb3IgcHJvYwotICovCi1zdGF0aWMgdm9pZCBwcmludF9yZWFsdGVrX2NvZWYoc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyLAotCQkJICAgICAgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQotewotCWludCBjb2VmZjsKLQotCWlmIChuaWQgIT0gMHgyMCkKLQkJcmV0dXJuOwotCWNvZWZmID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfR0VUX1BST0NfQ09FRiwgMCk7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiICBQcm9jZXNzaW5nIENvZWZmaWNpZW50OiAweCUwMnhcbiIsIGNvZWZmKTsKLQljb2VmZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCSAgIEFDX1ZFUkJfR0VUX0NPRUZfSU5ERVgsIDApOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgQ29lZmZpY2llbnQgSW5kZXg6IDB4JTAyeFxuIiwgY29lZmYpOwotfQotI2Vsc2UKLSNkZWZpbmUgcHJpbnRfcmVhbHRla19jb2VmCU5VTEwKLSNlbmRpZgotCiAvKgogICogc2V0IHVwIGZyb20gdGhlIHByZXNldCB0YWJsZQogICovCkBAIC0xMTYyLDYgKzExNDksNyBAQAogCQljYXNlIDB4MTBlYzA4ODg6CiAJCQlhbGM4ODhfY29lZl9pbml0KGNvZGVjKTsKIAkJCWJyZWFrOworI2lmIDAgLyogWFhYOiBUaGlzIG1heSBjYXVzZSB0aGUgc2lsZW50IG91dHB1dCBvbiBzcGVha2VyIG9uIHNvbWUgbWFjaGluZXMgKi8KIAkJY2FzZSAweDEwZWMwMjY3OgogCQljYXNlIDB4MTBlYzAyNjg6CiAJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDIwLCAwLApAQCAtMTE3NCw2ICsxMTYyLDcgQEAKIAkJCQkJICAgIEFDX1ZFUkJfU0VUX1BST0NfQ09FRiwKIAkJCQkJICAgIHRtcCB8IDB4MzAwMCk7CiAJCQlicmVhazsKKyNlbmRpZiAvKiBYWFggKi8KIAkJfQogCQlicmVhazsKIAl9CkBAIC0xMjY1LDcgKzEyNTQsNyBAQAogICovCiBzdGF0aWMgaW50IGFsY19zdWJzeXN0ZW1faWQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkgICAgaGRhX25pZF90IHBvcnRhLCBoZGFfbmlkX3QgcG9ydGUsCi0JCQkgICAgaGRhX25pZF90IHBvcnRkKQorCQkJICAgIGhkYV9uaWRfdCBwb3J0ZCwgaGRhX25pZF90IHBvcnRpKQogewogCXVuc2lnbmVkIGludCBhc3MsIHRtcCwgaTsKIAl1bnNpZ25lZCBuaWQ7CkBAIC0xMjkxLDcgKzEyODAsNyBAQAogCXNuZF9wcmludGQoInJlYWx0ZWs6IE5vIHZhbGlkIFNTSUQsICIKIAkJICAgImNoZWNraW5nIHBpbmNmZyAweCUwOHggZm9yIE5JRCAweCV4XG4iLAogCQkgICBhc3MsIG5pZCk7Ci0JaWYgKCEoYXNzICYgMSkgJiYgIShhc3MgJiAweDEwMDAwMCkpCisJaWYgKCEoYXNzICYgMSkpCiAJCXJldHVybiAwOwogCWlmICgoYXNzID4+IDMwKSAhPSAxKQkvKiBubyBwaHlzaWNhbCBjb25uZWN0aW9uICovCiAJCXJldHVybiAwOwpAQCAtMTM1MSw2ICsxMzQwLDggQEAKIAkJCW5pZCA9IHBvcnRlOwogCQllbHNlIGlmICh0bXAgPT0gMikKIAkJCW5pZCA9IHBvcnRkOworCQllbHNlIGlmICh0bXAgPT0gMykKKwkJCW5pZCA9IHBvcnRpOwogCQllbHNlCiAJCQlyZXR1cm4gMTsKIAkJZm9yIChpID0gMDsgaSA8IHNwZWMtPmF1dG9jZmcubGluZV9vdXRzOyBpKyspCkBAIC0xMzY1LDkgKzEzNTYsMTAgQEAKIH0KIAogc3RhdGljIHZvaWQgYWxjX3NzaWRfY2hlY2soc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkgICBoZGFfbmlkX3QgcG9ydGEsIGhkYV9uaWRfdCBwb3J0ZSwgaGRhX25pZF90IHBvcnRkKQorCQkJICAgaGRhX25pZF90IHBvcnRhLCBoZGFfbmlkX3QgcG9ydGUsCisJCQkgICBoZGFfbmlkX3QgcG9ydGQsIGhkYV9uaWRfdCBwb3J0aSkKIHsKLQlpZiAoIWFsY19zdWJzeXN0ZW1faWQoY29kZWMsIHBvcnRhLCBwb3J0ZSwgcG9ydGQpKSB7CisJaWYgKCFhbGNfc3Vic3lzdGVtX2lkKGNvZGVjLCBwb3J0YSwgcG9ydGUsIHBvcnRkLCBwb3J0aSkpIHsKIAkJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJCXNuZF9wcmludGQoInJlYWx0ZWs6ICIKIAkJCSAgICJFbmFibGUgZGVmYXVsdCBzZXR1cCBmb3IgYXV0byBtb2RlIGFzIGZhbGxiYWNrXG4iKTsKQEAgLTE4NDAsMTQgKzE4MzIsNiBAQAogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzJdID0gMHgxYjsKIH0KIAotI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKLXN0YXRpYyB2b2lkIGFsYzg4OV9wb3dlcl9lYXBkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgcG93ZXIpCi17Ci0Jc2V0X2VhcGQoY29kZWMsIDB4MTQsIHBvd2VyKTsKLQlzZXRfZWFwZChjb2RlYywgMHgxNSwgcG93ZXIpOwotfQotI2VuZGlmCi0KIC8qCiAgKiBBTEM4ODAgMy1zdGFjayBtb2RlbAogICoKQEAgLTI0NTAsNiArMjQzNCwxNSBAQAogICogYnVpbGQgY29udHJvbCBlbGVtZW50cwogICovCiAKKyNkZWZpbmUgTklEX01BUFBJTkcJCSgtMSkKKworI2RlZmluZSBTVUJERVZfU1BFQUtFUl8JCSgwIDw8IDYpCisjZGVmaW5lIFNVQkRFVl9IUF8JCSgxIDw8IDYpCisjZGVmaW5lIFNVQkRFVl9MSU5FXwkJKDIgPDwgNikKKyNkZWZpbmUgU1VCREVWX1NQRUFLRVIoeCkJKFNVQkRFVl9TUEVBS0VSXyB8ICgoeCkgJiAweDNmKSkKKyNkZWZpbmUgU1VCREVWX0hQKHgpCQkoU1VCREVWX0hQXyB8ICgoeCkgJiAweDNmKSkKKyNkZWZpbmUgU1VCREVWX0xJTkUoeCkJCShTVUJERVZfTElORV8gfCAoKHgpICYgMHgzZikpCisKIHN0YXRpYyB2b2lkIGFsY19mcmVlX2tjdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIAogI2lmZGVmIENPTkZJR19TTkRfSERBX0lOUFVUX0JFRVAKQEAgLTI0NjQsOCArMjQ1NywxMSBAQAogc3RhdGljIGludCBhbGNfYnVpbGRfY29udHJvbHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IGVycjsKLQlpbnQgaTsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OworCWludCBpLCBqLCBlcnI7CisJdW5zaWduZWQgaW50IHU7CisJaGRhX25pZF90IG5pZDsKIAogCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fbWl4ZXJzOyBpKyspIHsKIAkJZXJyID0gc25kX2hkYV9hZGRfbmV3X2N0bHMoY29kZWMsIHNwZWMtPm1peGVyc1tpXSk7CkBAIC0yNTA2LDggKzI1MDIsNyBAQAogCQkJaWYgKCFrY3RsKQogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJa2N0bC0+cHJpdmF0ZV92YWx1ZSA9IHNwZWMtPmJlZXBfYW1wOwotCQkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLAotCQkJCQlnZXRfYW1wX25pZF8oc3BlYy0+YmVlcF9hbXApLCBrY3RsKTsKKwkJCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywgMCwga2N0bCk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0yNTM0LDYgKzI1MjksNzUgQEAKIAl9CiAKIAlhbGNfZnJlZV9rY3Rscyhjb2RlYyk7IC8qIG5vIGxvbmdlciBuZWVkZWQgKi8KKworCS8qIGFzc2lnbiBDYXB0dXJlIFNvdXJjZSBlbnVtcyB0byBOSUQgKi8KKwlrY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIkNhcHR1cmUgU291cmNlIik7CisJaWYgKCFrY3RsKQorCQlrY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIklucHV0IFNvdXJjZSIpOworCWZvciAoaSA9IDA7IGtjdGwgJiYgaSA8IGtjdGwtPmNvdW50OyBpKyspIHsKKwkJaGRhX25pZF90ICpuaWRzID0gc3BlYy0+Y2Fwc3JjX25pZHM7CisJCWlmICghbmlkcykKKwkJCW5pZHMgPSBzcGVjLT5hZGNfbmlkczsKKwkJZXJyID0gc25kX2hkYV9hZGRfbmlkKGNvZGVjLCBrY3RsLCBpLCBuaWRzW2ldKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwlpZiAoc3BlYy0+Y2FwX21peGVyKSB7CisJCWNvbnN0IGNoYXIgKmtuYW1lID0ga2N0bCA/IGtjdGwtPmlkLm5hbWUgOiBOVUxMOworCQlmb3IgKGtuZXcgPSBzcGVjLT5jYXBfbWl4ZXI7IGtuZXctPm5hbWU7IGtuZXcrKykgeworCQkJaWYgKGtuYW1lICYmIHN0cmNtcChrbmV3LT5uYW1lLCBrbmFtZSkgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJCWtjdGwgPSBzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCBrbmV3LT5uYW1lKTsKKwkJCWZvciAoaSA9IDA7IGtjdGwgJiYgaSA8IGtjdGwtPmNvdW50OyBpKyspIHsKKwkJCQllcnIgPSBzbmRfaGRhX2FkZF9uaWQoY29kZWMsIGtjdGwsIGksCisJCQkJCQkgICAgICBzcGVjLT5hZGNfbmlkc1tpXSk7CisJCQkJaWYgKGVyciA8IDApCisJCQkJCXJldHVybiBlcnI7CisJCQl9CisJCX0KKwl9CisKKwkvKiBvdGhlciBuaWQtPmNvbnRyb2wgbWFwcGluZyAqLworCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fbWl4ZXJzOyBpKyspIHsKKwkJZm9yIChrbmV3ID0gc3BlYy0+bWl4ZXJzW2ldOyBrbmV3LT5uYW1lOyBrbmV3KyspIHsKKwkJCWlmIChrbmV3LT5pZmFjZSAhPSBOSURfTUFQUElORykKKwkJCQljb250aW51ZTsKKwkJCWtjdGwgPSBzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCBrbmV3LT5uYW1lKTsKKwkJCWlmIChrY3RsID09IE5VTEwpCisJCQkJY29udGludWU7CisJCQl1ID0ga25ldy0+c3ViZGV2aWNlOworCQkJZm9yIChqID0gMDsgaiA8IDQ7IGorKywgdSA+Pj0gOCkgeworCQkJCW5pZCA9IHUgJiAweDNmOworCQkJCWlmIChuaWQgPT0gMCkKKwkJCQkJY29udGludWU7CisJCQkJc3dpdGNoICh1ICYgMHhjMCkgeworCQkJCWNhc2UgU1VCREVWX1NQRUFLRVJfOgorCQkJCQluaWQgPSBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1tuaWRdOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNVQkRFVl9MSU5FXzoKKwkJCQkJbmlkID0gc3BlYy0+YXV0b2NmZy5saW5lX291dF9waW5zW25pZF07CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU1VCREVWX0hQXzoKKwkJCQkJbmlkID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zW25pZF07CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQllcnIgPSBzbmRfaGRhX2FkZF9uaWQoY29kZWMsIGtjdGwsIDAsIG5pZCk7CisJCQkJaWYgKGVyciA8IDApCisJCQkJCXJldHVybiBlcnI7CisJCQl9CisJCQl1ID0ga25ldy0+cHJpdmF0ZV92YWx1ZTsKKwkJCWZvciAoaiA9IDA7IGogPCA0OyBqKyssIHUgPj49IDgpIHsKKwkJCQluaWQgPSB1ICYgMHhmZjsKKwkJCQlpZiAobmlkID09IDApCisJCQkJCWNvbnRpbnVlOworCQkJCWVyciA9IHNuZF9oZGFfYWRkX25pZChjb2RlYywga2N0bCwgMCwgbmlkKTsKKwkJCQlpZiAoZXJyIDwgMCkKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzYxNiw2ICszNjgwLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhbGNfc2h1dHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXNuZF9oZGFfc2h1dHVwX3BpbnMoY29kZWMpOworfQorCiBzdGF0aWMgdm9pZCBhbGNfZnJlZV9rY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTM2MzYsMTcgKzM3MDUsNDQgQEAKIAlpZiAoIXNwZWMpCiAJCXJldHVybjsKIAorCWFsY19zaHV0dXAoY29kZWMpOwogCWFsY19mcmVlX2tjdGxzKGNvZGVjKTsKIAlrZnJlZShzcGVjKTsKIAlzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZShjb2RlYyk7CiB9CiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCitzdGF0aWMgdm9pZCBhbGNfcG93ZXJfZWFwZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwkvKiBXZSBjdXJyZW50bHkgb25seSBoYW5kbGUgZnJvbnQsIEhQICovCisJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CisJY2FzZSAweDEwZWMwMjYwOgorCQlzZXRfZWFwZChjb2RlYywgMHgwZiwgMCk7CisJCXNldF9lYXBkKGNvZGVjLCAweDEwLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAweDEwZWMwMjYyOgorCWNhc2UgMHgxMGVjMDI2NzoKKwljYXNlIDB4MTBlYzAyNjg6CisJY2FzZSAweDEwZWMwMjY5OgorCWNhc2UgMHgxMGVjMDI3MDoKKwljYXNlIDB4MTBlYzAyNzI6CisJY2FzZSAweDEwZWMwNjYwOgorCWNhc2UgMHgxMGVjMDY2MjoKKwljYXNlIDB4MTBlYzA2NjM6CisJY2FzZSAweDEwZWMwODYyOgorCWNhc2UgMHgxMGVjMDg4OToKKwkJc2V0X2VhcGQoY29kZWMsIDB4MTQsIDApOworCQlzZXRfZWFwZChjb2RlYywgMHgxNSwgMCk7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGludCBhbGNfc3VzcGVuZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWFsY19zaHV0dXAoY29kZWMpOwogCWlmIChzcGVjICYmIHNwZWMtPnBvd2VyX2hvb2spCi0JCXNwZWMtPnBvd2VyX2hvb2soY29kZWMsIDApOworCQlzcGVjLT5wb3dlcl9ob29rKGNvZGVjKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtMzY1NCwxNiArMzc1MCw5IEBACiAjaWZkZWYgU05EX0hEQV9ORUVEU19SRVNVTUUKIHN0YXRpYyBpbnQgYWxjX3Jlc3VtZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLSNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi0Jc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0jZW5kaWYKIAljb2RlYy0+cGF0Y2hfb3BzLmluaXQoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfcmVzdW1lX2FtcChjb2RlYyk7CiAJc25kX2hkYV9jb2RlY19yZXN1bWVfY2FjaGUoY29kZWMpOwotI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKLQlpZiAoc3BlYyAmJiBzcGVjLT5wb3dlcl9ob29rKQotCQlzcGVjLT5wb3dlcl9ob29rKGNvZGVjLCAxKTsKLSNlbmRpZgogCXJldHVybiAwOwogfQogI2VuZGlmCkBAIC0zNjgzLDYgKzM3NzIsNyBAQAogCS5zdXNwZW5kID0gYWxjX3N1c3BlbmQsCiAJLmNoZWNrX3Bvd2VyX3N0YXR1cyA9IGFsY19jaGVja19wb3dlcl9zdGF0dXMsCiAjZW5kaWYKKwkucmVib290X25vdGlmeSA9IGFsY19zaHV0dXAsCiB9OwogCiAKQEAgLTM4MzksNiArMzkyOSw3IEBACiAjZGVmaW5lIFBJTl9DVExfVEVTVCh4bmFtZSxuaWQpIHsJCQlcCiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAlcCiAJCQkubmFtZSA9IHhuYW1lLAkJICAgICAgIFwKKwkJCS5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgbmlkLCBcCiAJCQkuaW5mbyA9IGFsY190ZXN0X3Bpbl9jdGxfaW5mbywgXAogCQkJLmdldCA9IGFsY190ZXN0X3Bpbl9jdGxfZ2V0LCAgIFwKIAkJCS5wdXQgPSBhbGNfdGVzdF9waW5fY3RsX3B1dCwgICBcCkBAIC0zODQ4LDYgKzM5MzksNyBAQAogI2RlZmluZSBQSU5fU1JDX1RFU1QoeG5hbWUsbmlkKSB7CQkJXAogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwJXAogCQkJLm5hbWUgPSB4bmFtZSwJCSAgICAgICBcCisJCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IG5pZCwgXAogCQkJLmluZm8gPSBhbGNfdGVzdF9waW5fc3JjX2luZm8sIFwKIAkJCS5nZXQgPSBhbGNfdGVzdF9waW5fc3JjX2dldCwgICBcCiAJCQkucHV0ID0gYWxjX3Rlc3RfcGluX3NyY19wdXQsICAgXApAQCAtNDM4Nyw3ICs0NDc5LDcgQEAKIAlpZiAoIWtuZXctPm5hbWUpCiAJCXJldHVybiAtRU5PTUVNOwogCWlmIChnZXRfYW1wX25pZF8odmFsKSkKLQkJa25ldy0+c3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IGdldF9hbXBfbmlkXyh2YWwpOworCQlrbmV3LT5zdWJkZXZpY2UgPSBIREFfU1VCREVWX0FNUF9GTEFHOwogCWtuZXctPnByaXZhdGVfdmFsdWUgPSB2YWw7CiAJcmV0dXJuIDA7CiB9CkBAIC00NzcwLDcgKzQ4NjIsNyBAQAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAotCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0KTsKKwlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCwgMCk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTQ5NzQsNyArNTA2Niw2IEBACiAJaWYgKCFzcGVjLT5sb29wYmFjay5hbXBsaXN0KQogCQlzcGVjLT5sb29wYmFjay5hbXBsaXN0ID0gYWxjODgwX2xvb3BiYWNrczsKICNlbmRpZgotCWNvZGVjLT5wcm9jX3dpZGdldF9ob29rID0gcHJpbnRfcmVhbHRla19jb2VmOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MTgyLDYgKzUyNzMsNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IDB4MTEsCiAJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKIAkJLmdldCA9IGFsYzI2MF9ocF9tYXN0ZXJfc3dfZ2V0LAogCQkucHV0ID0gYWxjMjYwX2hwX21hc3Rlcl9zd19wdXQsCkBAIC01MjIwLDYgKzUzMTIsNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IDB4MTEsCiAJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKIAkJLmdldCA9IGFsYzI2MF9ocF9tYXN0ZXJfc3dfZ2V0LAogCQkucHV0ID0gYWxjMjYwX2hwX21hc3Rlcl9zd19wdXQsCkBAIC02MzAzLDcgKzYzOTYsNyBAQAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAotCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDEwLCAweDE1LCAweDBmKTsKKwlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxMCwgMHgxNSwgMHgwZiwgMCk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTY1ODIsNyArNjY3NSw2IEBACiAJaWYgKCFzcGVjLT5sb29wYmFjay5hbXBsaXN0KQogCQlzcGVjLT5sb29wYmFjay5hbXBsaXN0ID0gYWxjMjYwX2xvb3BiYWNrczsKICNlbmRpZgotCWNvZGVjLT5wcm9jX3dpZGdldF9ob29rID0gcHJpbnRfcmVhbHRla19jb2VmOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NjY0LDYgKzY3NTYsMTQgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IG1hY21pbmkzX2NhcHR1cmVfc291cmNlID0geworCS5udW1faXRlbXMgPSAyLAorCS5pdGVtcyA9IHsKKwkJeyAiTGluZSIsIDB4MiB9LAorCQl7ICJDRCIsIDB4NCB9LAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgzXzNzdGFja182Y2hfaW50ZWwgPSB7CiAJLm51bV9pdGVtcyA9IDQsCiAJLml0ZW1zID0gewpAQCAtNjg1Miw2ICs2OTUyLDEzIEBACiAJeyA4LCBhbGM4ODJfc2l4c3RhY2tfY2g4X2luaXQgfSwKIH07CiAKKworLyogTWFjYm9vayBBaXIgMiwxICovCisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODVfbWJhMjFfY2hfbW9kZXNbMV0gPSB7CisgICAgICB7IDIsIE5VTEwgfSwKK307CisKIC8qCiAgKiBtYWNib29rIHBybyBBTEM4ODUgY2FuIHN3aXRjaCBMaW5lSW4gdG8gTGluZU91dCB3aXRob3V0IGxvc2luZyBNaWMKICAqLwpAQCAtNjkxMiw2ICs3MDE5LDcgQEAKIAl7IDYsIGFsYzg4NV9tYjVfY2g2X2luaXQgfSwKIH07CiAKKyNkZWZpbmUgYWxjODg1X21hY21pbmkzXzZjaF9tb2RlcwlhbGM4ODVfbWI1XzZjaF9tb2RlcwogCiAvKgogICogMmNoIG1vZGUKQEAgLTcxMjMsNiArNzIzMSwxNSBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKKy8qIE1hY2Jvb2sgQWlyIDIsMSBzYW1lIGNvbnRyb2wgZm9yIEhQIGFuZCBpbnRlcm5hbCBTcGVha2VyICovCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODVfbWJhMjFfbWl4ZXJbXSA9IHsKKyAgICAgIEhEQV9DT0RFQ19WT0xVTUUoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwMCwgSERBX09VVFBVVCksCisgICAgICBIREFfQklORF9NVVRFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDB4MDIsIEhEQV9PVVRQVVQpLAorICAgICB7IH0KK307CisKKwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4NV9tYnAzX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAwLCBIREFfT1VUUFVUKSwKIAlIREFfQklORF9NVVRFICAgKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDB4MDIsIEhEQV9JTlBVVCksCkBAIC03MTU2LDYgKzcyNzMsMjEgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg1X21hY21pbmkzX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwMCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSAgICgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFICAgKCJTdXJyb3VuZCBQbGF5YmFjayBTd2l0Y2giLCAweDBkLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxGRSBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAweDAwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFICAgKCJMRkUgUGxheWJhY2sgU3dpdGNoIiwgMHgwZSwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwZiwgMHgwMCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSAgICgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGYsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA3LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFICAoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNywgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIEJvb3N0IiwgMHgxNSwgMHgwMCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODg1X2ltYWM5MV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUtT3V0IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUgICAoIkxpbmUtT3V0IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDB4MDIsIEhEQV9JTlBVVCksCkBAIC03MjQ3LDI5ICs3Mzc5LDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgyX2Jhc2VfaW5pdF92ZXJic1tdID0gewogCS8qIEZyb250IG1peGVyOiB1bm11dGUgaW5wdXQvb3V0cHV0IGFtcCBsZWZ0IGFuZCByaWdodCAodm9sdW1lID0gMCkgKi8KLQl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKIAl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCiAJLyogUmVhciBtaXhlciAqLwotCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAogCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCiAJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKIAkvKiBDTEZFIG1peGVyICovCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAJezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKIAl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAogCS8qIFNpZGUgbWl4ZXIgKi8KLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKIAl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCiAKLQkvKiBtdXRlIGFuYWxvZyBpbnB1dCBsb29wYmFja3MgKi8KLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCi0KIAkvKiBGcm9udCBQaW46IG91dHB1dCAwICgweDBjKSAqLwogCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAogCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCkBAIC03MzA2LDE0ICs3NDI3LDggQEAKIAkvKiBNaXhlciBlbGVtZW50czogMHgxOCwgMTksIDFhLCAxYiwgMWMsIDFkLCAxNCwgMTUsIDE2LCAxNywgMGIgKi8KIAkvKiBJbnB1dCBtaXhlcjIgKi8KIAl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKLQl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCiAJLyogSW5wdXQgbWl4ZXIzICovCiAJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAogCS8qIEFEQzI6IG11dGUgYW1wIGxlZnQgYW5kIHJpZ2h0ICovCiAJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKIAl7MHgwOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LApAQCAtNzM1NywyNiArNzQ3MiwxNyBAQAogCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4NV9pbml0X3ZlcmJzW10gPSB7CiAJLyogRnJvbnQgbWl4ZXI6IHVubXV0ZSBpbnB1dC9vdXRwdXQgYW1wIGxlZnQgYW5kIHJpZ2h0ICh2b2x1bWUgPSAwKSAqLwotCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAogCS8qIFJlYXIgbWl4ZXIgKi8KLQl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKLQl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKIAkvKiBDTEZFIG1peGVyICovCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKLQl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAJLyogU2lkZSBtaXhlciAqLwotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKLQotCS8qIG11dGUgYW5hbG9nIGlucHV0IGxvb3BiYWNrcyAqLwotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAKIAkvKiBGcm9udCBIUCBQaW46IG91dHB1dCAwICgweDBjKSAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCkBAIC03NDEwLDE3ICs3NTE2LDExIEBACiAKIAkvKiBNaXhlciBlbGVtZW50czogMHgxOCwgLCAweDFhLCAweDFiICovCiAJLyogSW5wdXQgbWl4ZXIxICovCi0JezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMyl9LAotCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKKwl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogSW5wdXQgbWl4ZXIyICovCiAJezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCi0JezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKIAkvKiBJbnB1dCBtaXhlcjMgKi8KLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgyKX0sCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAorCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAkvKiBBREMyOiBtdXRlIGFtcCBsZWZ0IGFuZCByaWdodCAqLwogCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCiAJLyogQURDMzogbXV0ZSBhbXAgbGVmdCBhbmQgcmlnaHQgKi8KQEAgLTc1NjIsNiArNzY2Miw3NiBAQAogCXsgfQogfTsKIAorLyogTWFjbWluaSAzLDEgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg1X21hY21pbmkzX2luaXRfdmVyYnNbXSA9IHsKKwkvKiBEQUNzICovCisJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MDUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBGcm9udCBtaXhlciAqLworCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwkvKiBTdXJyb3VuZCBtaXhlciAqLworCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwkvKiBMRkUgbWl4ZXIgKi8KKwl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJLyogSFAgbWl4ZXIgKi8KKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJLyogRnJvbnQgUGluICgweDBjKSAqLworCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfCAweDAxfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisJLyogTEZFIFBpbiAoMHgwZSkgKi8KKwl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUIHwgMHgwMX0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDJ9LAorCS8qIEhQIFBpbiAoMHgwZikgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwM30sCisJezB4MTQsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUxDODgwX0hQX0VWRU5UIHwgQUNfVVNSU1BfRU59LAorCS8qIExpbmUgSW4gcGluICovCisJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKworCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgyNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAorCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCisJezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKKwl7IH0KK307CisKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODVfbWJhMjFfaW5pdF92ZXJic1tdID0geworCS8qSW50ZXJuYWwgYW5kIEhQIFNwZWFrZXIgTWl4ZXIqLworCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJLypJbnRlcm5hbCBTcGVha2VyIFBpbiAoMHgwYykqLworCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIChQSU5fT1VUIHwgQUNfUElOQ1RMX1ZSRUZfNTApIH0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCS8qIEhQIFBpbjogb3V0cHV0IDAgKDB4MGUpICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHhjNH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIChBTEM4ODBfSFBfRVZFTlQgfCBBQ19VU1JTUF9FTil9LAorCS8qIExpbmUgaW4gKGlzIGhwIHdoZW4gamFjayBjb25uZWN0ZWQpKi8KKwl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBBQ19QSU5DVExfVlJFRl81MH0sCisJezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisKKwl7IH0KKyB9OworCisKIC8qIE1hY2Jvb2sgUHJvIHJldjMgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg1X21icDNfaW5pdF92ZXJic1tdID0gewogCS8qIEZyb250IG1peGVyOiB1bm11dGUgaW5wdXQvb3V0cHV0IGFtcCBsZWZ0IGFuZCByaWdodCAodm9sdW1lID0gMCkgKi8KQEAgLTc3MjQsNiArNzg5NCwyMCBAQAogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzFdID0gMHgxYTsKIH0KIAorI2RlZmluZSBhbGM4ODVfbWI1X3NldHVwCWFsYzg4NV9pbWFjMjRfc2V0dXAKKyNkZWZpbmUgYWxjODg1X21hY21pbmkzX3NldHVwCWFsYzg4NV9pbWFjMjRfc2V0dXAKKworLyogTWFjYm9vayBBaXIgMiwxICovCitzdGF0aWMgdm9pZCBhbGM4ODVfbWJhMjFfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisgICAgICAgc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKyAgICAgICBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE0OworICAgICAgIHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxODsKK30KKworCisKIHN0YXRpYyB2b2lkIGFsYzg4NV9tYnAzX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtNzczMiw0NiArNzkxNiwxMyBAQAogCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKIH0KIAotc3RhdGljIHZvaWQgYWxjODg1X21iNV9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIGFsYzg4NV9pbWFjOTFfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0JdW5zaWduZWQgaW50IHByZXNlbnQ7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAKLQlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE0LCAwLAotCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7Ci0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE4LCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIHByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwKTsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWEsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDApOwotCi19Ci0KLXN0YXRpYyB2b2lkIGFsYzg4NV9tYjVfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJICAgIHVuc2lnbmVkIGludCByZXMpCi17Ci0JLyogSGVhZHBob25lIGluc2VydGlvbiBvciByZW1vdmFsLiAqLwotCWlmICgocmVzID4+IDI2KSA9PSBBTEM4ODBfSFBfRVZFTlQpCi0JCWFsYzg4NV9tYjVfYXV0b211dGUoY29kZWMpOwotfQotCi1zdGF0aWMgdm9pZCBhbGM4ODVfaW1hYzkxX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotIAl1bnNpZ25lZCBpbnQgcHJlc2VudDsKLQotCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTQsIDAsCi0JCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKLQlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTUsIEhEQV9PVVRQVVQsIDAsCi0JCQkJIEhEQV9BTVBfTVVURSwgcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDApOwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxYSwgSERBX09VVFBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBwcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMCk7Ci0KLX0KLQotc3RhdGljIHZvaWQgYWxjODg1X2ltYWM5MV91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkgICAgdW5zaWduZWQgaW50IHJlcykKLXsKLQkvKiBIZWFkcGhvbmUgaW5zZXJ0aW9uIG9yIHJlbW92YWwuICovCi0JaWYgKChyZXMgPj4gMjYpID09IEFMQzg4MF9IUF9FVkVOVCkKLQkJYWxjODg1X2ltYWM5MV9hdXRvbXV0ZShjb2RlYyk7CisJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNDsKKwlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTU7CisJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMV0gPSAweDFhOwogfQogCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4Ml90YXJnYV92ZXJic1tdID0gewpAQCAtNzkwNiwxOCArODA1Nyw2IEBACiAJezB4MDksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKIAl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAKLQkvKiBNdXRlIGlucHV0IGFtcHMgKENELCBMaW5lIEluLCBNaWMgMSAmIE1pYyAyKSBvZiB0aGUgYW5hbG9nLWxvb3BiYWNrCi0JICogbWl4ZXIgd2lkZ2V0Ci0JICogTm90ZTogUEFTRCBtb3RoZXJib2FyZHMgdXNlcyB0aGUgTGluZSBJbiAyIGFzIHRoZSBpbnB1dCBmb3IKLQkgKiBmcm9udCBwYW5lbCBtaWMgKG1pYyAyKQotCSAqLwotCS8qIEFtcCBJbmRpY2VzOiBNaWMxID0gMCwgTWljMiA9IDEsIExpbmUxID0gMiwgTGluZTIgPSAzLCBDRCA9IDQgKi8KLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sCi0KIAkvKgogCSAqIFNldCB1cCBvdXRwdXQgbWl4ZXJzICgweDBjIC0gMHgwZikKIAkgKi8KQEAgLTc5NDIsMTYgKzgwODEsOSBAQAogCS8qIEZJWE1FOiB1c2UgbWF0cml4LXR5cGUgaW5wdXQgc291cmNlIHNlbGVjdGlvbiAqLwogCS8qIE1peGVyIGVsZW1lbnRzOiAweDE4LCAxOSwgMWEsIDFiLCAxYywgMWQsIDE0LCAxNSwgMTYsIDE3LCAwYiAqLwogCS8qIElucHV0IG1peGVyMiAqLwotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDAwIHwgKDB4MDAgPDwgOCkpfSwKLQl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzA4MCB8ICgweDAzIDw8IDgpKX0sCi0JezB4MjMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwODAgfCAoMHgwMiA8PCA4KSl9LAotCXsweDIzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDgwIHwgKDB4MDQgPDwgOCkpfSwKKwl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogSW5wdXQgbWl4ZXIzICovCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwMDAgfCAoMHgwMCA8PCA4KSl9LAotCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAoMHg3MDgwIHwgKDB4MDMgPDwgOCkpfSwKLQl7MHgyMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgKDB4NzA4MCB8ICgweDAyIDw8IDgpKX0sCi0JezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwODAgfCAoMHgwNCA8PCA4KSl9LAotCisJezB4MjIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsgfQogfTsKIApAQCAtODkzOCw2ICs5MDcwLDggQEAKIAlbQUxDODgyX0FTVVNfQTdNXQk9ICJhc3VzLWE3bSIsCiAJW0FMQzg4NV9NQUNQUk9dCQk9ICJtYWNwcm8iLAogCVtBTEM4ODVfTUI1XQkJPSAibWI1IiwKKwlbQUxDODg1X01BQ01JTkkzXQk9ICJtYWNtaW5pMyIsCisJW0FMQzg4NV9NQkEyMV0JCT0gIm1iYTIxIiwKIAlbQUxDODg1X01CUDNdCQk9ICJtYnAzIiwKIAlbQUxDODg1X0lNQUMyNF0JCT0gImltYWMyNCIsCiAJW0FMQzg4NV9JTUFDOTFdCQk9ICJpbWFjOTEiLApAQCAtOTEyMSw2ICs5MjU1LDcgQEAKIAkgKi8KIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0MDAwLCAiTWFjYm9va1BybyA1LDEiLCBBTEM4ODVfTUI1KSwKIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0NjAwLCAiTWFjYm9va1BybyA1LDIiLCBBTEM4ODVfTUI1KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0MTAwLCAiTWFjbWluaSAzLDEiLCBBTEM4ODVfTUFDTUlOSTMpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKQEAgLTkxNzIsNiArOTMwNywxOCBAQAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4Ml9jYXB0dXJlX3NvdXJjZSwKIAkJLmRpZ19vdXRfbmlkID0gQUxDODgyX0RJR09VVF9OSUQsCiAJfSwKKwkgICBbQUxDODg1X01CQTIxXSA9IHsKKwkJCS5taXhlcnMgPSB7IGFsYzg4NV9tYmEyMV9taXhlciB9LAorCQkJLmluaXRfdmVyYnMgPSB7IGFsYzg4NV9tYmEyMV9pbml0X3ZlcmJzLCBhbGM4ODBfZ3BpbzFfaW5pdF92ZXJicyB9LAorCQkJLm51bV9kYWNzID0gMiwKKwkJCS5kYWNfbmlkcyA9IGFsYzg4Ml9kYWNfbmlkcywKKwkJCS5jaGFubmVsX21vZGUgPSBhbGM4ODVfbWJhMjFfY2hfbW9kZXMsCisJCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODg1X21iYTIxX2NoX21vZGVzKSwKKwkJCS5pbnB1dF9tdXggPSAmYWxjODgyX2NhcHR1cmVfc291cmNlLAorCQkJLnVuc29sX2V2ZW50ID0gYWxjX2F1dG9tdXRlX2FtcF91bnNvbF9ldmVudCwKKwkJCS5zZXR1cCA9IGFsYzg4NV9tYmEyMV9zZXR1cCwKKwkJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAorICAgICAgIH0sCiAJW0FMQzg4NV9NQlAzXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODg1X21icDNfbWl4ZXIsIGFsYzg4Ml9jaG1vZGVfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzg4NV9tYnAzX2luaXRfdmVyYnMsCkBAIC05MTk5LDggKzkzNDYsMjQgQEAKIAkJLmlucHV0X211eCA9ICZtYjVfY2FwdHVyZV9zb3VyY2UsCiAJCS5kaWdfb3V0X25pZCA9IEFMQzg4Ml9ESUdPVVRfTklELAogCQkuZGlnX2luX25pZCA9IEFMQzg4Ml9ESUdJTl9OSUQsCi0JCS51bnNvbF9ldmVudCA9IGFsYzg4NV9tYjVfdW5zb2xfZXZlbnQsCi0JCS5pbml0X2hvb2sgPSBhbGM4ODVfbWI1X2F1dG9tdXRlLAorCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM4ODVfbWI1X3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKKwl9LAorCVtBTEM4ODVfTUFDTUlOSTNdID0geworCQkubWl4ZXJzID0geyBhbGM4ODVfbWFjbWluaTNfbWl4ZXIsIGFsYzg4Ml9jaG1vZGVfbWl4ZXIgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzg4NV9tYWNtaW5pM19pbml0X3ZlcmJzLAorCQkJCWFsYzg4MF9ncGlvMV9pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjODgyX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjODgyX2RhY19uaWRzLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjODg1X21hY21pbmkzXzZjaF9tb2RlcywKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzg4NV9tYWNtaW5pM182Y2hfbW9kZXMpLAorCQkuaW5wdXRfbXV4ID0gJm1hY21pbmkzX2NhcHR1cmVfc291cmNlLAorCQkuZGlnX291dF9uaWQgPSBBTEM4ODJfRElHT1VUX05JRCwKKwkJLmRpZ19pbl9uaWQgPSBBTEM4ODJfRElHSU5fTklELAorCQkudW5zb2xfZXZlbnQgPSBhbGNfYXV0b211dGVfYW1wX3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGM4ODVfbWFjbWluaTNfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiAJW0FMQzg4NV9NQUNQUk9dID0gewogCQkubWl4ZXJzID0geyBhbGM4ODJfbWFjcHJvX21peGVyIH0sCkBAIC05MjM5LDggKzk0MDIsOSBAQAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4Ml9jYXB0dXJlX3NvdXJjZSwKIAkJLmRpZ19vdXRfbmlkID0gQUxDODgyX0RJR09VVF9OSUQsCiAJCS5kaWdfaW5fbmlkID0gQUxDODgyX0RJR0lOX05JRCwKLQkJLnVuc29sX2V2ZW50ID0gYWxjODg1X2ltYWM5MV91bnNvbF9ldmVudCwKLQkJLmluaXRfaG9vayA9IGFsYzg4NV9pbWFjOTFfYXV0b211dGUsCisJCS51bnNvbF9ldmVudCA9IGFsY19hdXRvbXV0ZV9hbXBfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzg4NV9pbWFjOTFfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiAJW0FMQzg4Ml9UQVJHQV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzg4Ml90YXJnYV9taXhlciwgYWxjODgyX2NobW9kZV9taXhlciB9LApAQCAtOTUyOCw3ICs5NjkyLDcgQEAKIAkJLnNldHVwID0gYWxjODg5X2FjZXJfYXNwaXJlXzg5MzBnX3NldHVwLAogCQkuaW5pdF9ob29rID0gYWxjX2F1dG9tdXRlX2FtcCwKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi0JCS5wb3dlcl9ob29rID0gYWxjODg5X3Bvd2VyX2VhcGQsCisJCS5wb3dlcl9ob29rID0gYWxjX3Bvd2VyX2VhcGQsCiAjZW5kaWYKIAl9LAogCVtBTEM4ODhfQUNFUl9BU1BJUkVfNzczMEddID0gewpAQCAtMTAwNjMsNyArMTAyMjcsNyBAQAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAotCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0KTsKKwlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCwgMCk7CiAKIAllcnIgPSBhbGNfYXV0b19hZGRfbWljX2Jvb3N0KGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTEwMjAxLDcgKzEwMzY1LDYgQEAKIAlpZiAoIXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QpCiAJCXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QgPSBhbGM4ODJfbG9vcGJhY2tzOwogI2VuZGlmCi0JY29kZWMtPnByb2Nfd2lkZ2V0X2hvb2sgPSBwcmludF9yZWFsdGVrX2NvZWY7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMzI0LDggKzEwNDg3LDE0IEBACiAJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywJCVwKIAkJLmdldCA9IGFsYzI2Ml9ocF9tYXN0ZXJfc3dfZ2V0LAkJCVwKIAkJLnB1dCA9IGFsYzI2Ml9ocF9tYXN0ZXJfc3dfcHV0LAkJCVwKKwl9LCBcCisJewkJCQkJCQlcCisJCS5pZmFjZSA9IE5JRF9NQVBQSU5HLAkJCQlcCisJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAkJXAorCQkucHJpdmF0ZV92YWx1ZSA9IDB4MTUgfCAoMHgxNiA8PCA4KSB8ICgweDFiIDw8IDE2KSwJXAogCX0KIAorCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX0hQX0JQQ19taXhlcltdID0gewogCUFMQzI2Ml9IUF9NQVNURVJfU1dJVENILAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xMDQ4Myw2ICsxMDY1MiwxMiBAQAogCQkuaW5mbyA9IHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8sCQlcCiAJCS5nZXQgPSBhbGMyNjJfaGlwcG9fbWFzdGVyX3N3X2dldCwJCVwKIAkJLnB1dCA9IGFsYzI2Ml9oaXBwb19tYXN0ZXJfc3dfcHV0LAkJXAorCX0sCQkJCQkJCVwKKwl7CQkJCQkJCVwKKwkJLmlmYWNlID0gTklEX01BUFBJTkcsCQkJCVwKKwkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCQlcCisJCS5zdWJkZXZpY2UgPSBTVUJERVZfSFAoMCkgfCAoU1VCREVWX0xJTkUoMCkgPDwgOCkgfCBcCisJCQkgICAgIChTVUJERVZfU1BFQUtFUigwKSA8PCAxNiksIFwKIAl9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfaGlwcG9fbWl4ZXJbXSA9IHsKQEAgLTEwOTYzLDExICsxMTEzOCwxNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhbGMyNjJfZnVqaXRzdV9tYXN0ZXJfc3dfcHV0LAogCQkucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwoMHgxNCwgMywgMCwgSERBX09VVFBVVCksCiAJfSwKKwl7CisJCS5pZmFjZSA9IE5JRF9NQVBQSU5HLAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnByaXZhdGVfdmFsdWUgPSAweDFiLAorCX0sCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLApAQCAtMTA5OTgsNiArMTExNzksNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhbGMyNjJfbGVub3ZvXzMwMDBfbWFzdGVyX3N3X3B1dCwKQEAgLTExMTUyLDYgKzExMzM0LDExIEBACiAJCS5nZXQgPSBhbGNfbXV4X2VudW1fZ2V0LAogCQkucHV0ID0gYWxjMjYyX3VsdHJhX211eF9lbnVtX3B1dCwKIAl9LAorCXsKKwkJLmlmYWNlID0gTklEX01BUFBJTkcsCisJCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKKwkJLnByaXZhdGVfdmFsdWUgPSAweDE1LAorCX0sCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTE1OTgsNyArMTE3ODUsNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MTQsIDB4MWIpOworCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0LCAwKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTIwNDEsNyArMTIyMjgsNiBAQAogCWlmICghc3BlYy0+bG9vcGJhY2suYW1wbGlzdCkKIAkJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IGFsYzI2Ml9sb29wYmFja3M7CiAjZW5kaWYKLQljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHByaW50X3JlYWx0ZWtfY29lZjsKIAogCXJldHVybiAwOwogfQpAQCAtMTIxNzAsNiArMTIzNTYsNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhbGMyNjhfYWNlcl9tYXN0ZXJfc3dfcHV0LApAQCAtMTIxODUsNiArMTIzNzIsNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhbGMyNjhfYWNlcl9tYXN0ZXJfc3dfcHV0LApAQCAtMTIyMDIsNiArMTIzOTAsNyBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuc3ViZGV2aWNlID0gSERBX1NVQkRFVl9BTVBfRkxBRywKIAkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBhbGMyNjhfYWNlcl9tYXN0ZXJfc3dfcHV0LApAQCAtMTI1NDcsNyArMTI3MzYsNiBAQAogCQlkYWMgPSAweDAyOwogCQlicmVhazsKIAljYXNlIDB4MTU6Ci0JY2FzZSAweDIxOgogCQlkYWMgPSAweDAzOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTI3NjgsNyArMTI5NTYsNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MWIsIDB4MTQpOworCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0LCAwKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTMxMDUsOCArMTMyOTMsNiBAQAogCWlmIChib2FyZF9jb25maWcgPT0gQUxDMjY4X0FVVE8pCiAJCXNwZWMtPmluaXRfaG9vayA9IGFsYzI2OF9hdXRvX2luaXQ7CiAKLQljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHByaW50X3JlYWx0ZWtfY29lZjsKLQogCXJldHVybiAwOwogfQogCkBAIC0xMzEyNiw2ICsxMzMxMiwxNSBAQAogCTB4MjMsCiB9OwogCitzdGF0aWMgaGRhX25pZF90IGFsYzI2OXZiX2FkY19uaWRzWzFdID0geworCS8qIEFEQzEgKi8KKwkweDA5LAorfTsKKworc3RhdGljIGhkYV9uaWRfdCBhbGMyNjl2Yl9jYXBzcmNfbmlkc1sxXSA9IHsKKwkweDIyLAorfTsKKwogLyogTk9URTogQURDMiAoMHgwNykgaXMgY29ubmVjdGVkIGZyb20gYSByZWNvcmRpbmcgKk1JWEVSKiAoMHgyNCksCiAgKiAgICAgICBub3QgYSBtdXghCiAgKi8KQEAgLTEzMTU1LDYgKzEzMzUwLDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsCiAJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LAogCQkucHV0ID0gYWxjMjY4X2FjZXJfbWFzdGVyX3N3X3B1dCwKQEAgLTEzMTc1LDYgKzEzMzcxLDcgQEAKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUcsCiAJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LAogCQkucHV0ID0gYWxjMjY4X2FjZXJfbWFzdGVyX3N3X3B1dCwKQEAgLTEzMTkyLDcgKzEzMzg5LDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjlfZWVlcGNfbWl4ZXJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjlfbGFwdG9wX21peGVyW10gPSB7CiAJSERBX0NPREVDX01VVEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxNCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDIsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMTMyMDAsMTYgKzEzMzk3LDQ3IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OXZiX2xhcHRvcF9taXhlcltdID0geworCUhEQV9DT0RFQ19NVVRFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MTQsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDAyLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJIZWFkcGhvbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwMywgMHgwLCBIREFfT1VUUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCiAvKiBjYXB0dXJlIG1peGVyIGVsZW1lbnRzICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY5X2VwY19jYXB0dXJlX21peGVyW10gPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY5X2xhcHRvcF9hbmFsb2dfY2FwdHVyZV9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OV9sYXB0b3BfZGlnaXRhbF9jYXB0dXJlX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OXZiX2xhcHRvcF9hbmFsb2dfY2FwdHVyZV9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2OXZiX2xhcHRvcF9kaWdpdGFsX2NhcHR1cmVfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDksIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCiAvKiBGU0MgYW1pbG8gKi8KLSNkZWZpbmUgYWxjMjY5X2Z1aml0c3VfbWl4ZXIJYWxjMjY5X2VlZXBjX21peGVyCisjZGVmaW5lIGFsYzI2OV9mdWppdHN1X21peGVyCWFsYzI2OV9sYXB0b3BfbWl4ZXIKIAogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfcXVhbnRhX2ZsMV92ZXJic1tdID0gewogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCkBAIC0xMzM1Miw3ICsxMzU4MCw3IEBACiAJYWxjMjY5X2xpZmVib29rX21pY19hdXRvc3dpdGNoKGNvZGVjKTsKIH0KIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfZWVlcGNfZG1pY19pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OV9sYXB0b3BfZG1pY19pbml0X3ZlcmJzW10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKIAl7MHgyMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDV9LAogCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMjYgfSwKQEAgLTEzMzYzLDcgKzEzNTkxLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfZWVlcGNfYW1pY19pbml0X3ZlcmJzW10gPSB7CitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OV9sYXB0b3BfYW1pY19pbml0X3ZlcmJzW10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKIAl7MHgyMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAogCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMjYgfSwKQEAgLTEzMzczLDYgKzEzNjAxLDI4IEBACiAJe30KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY5dmJfbGFwdG9wX2RtaWNfaW5pdF92ZXJic1tdID0geworCXsweDIxLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCisJezB4MjIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDA2fSwKKwl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDI2IH0sCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwMTkgfCAoMHgwMCA8PCA4KSl9LAorCXsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfTUlDX0VWRU5UfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjY5dmJfbGFwdG9wX2FtaWNfaW5pdF92ZXJic1tdID0geworCXsweDIxLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCisJezB4MjIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKKwl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDI2IH0sCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsICgweDcwMTkgfCAoMHgwMCA8PCA4KSl9LAorCXsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTEM4ODBfTUlDX0VWRU5UfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVH0sCisJe30KK307CisKIC8qIHRvZ2dsZSBzcGVha2VyLW91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIGhwLWphY2sgc3RhdGUgKi8KIHN0YXRpYyB2b2lkIGFsYzI2OV9zcGVha2VyX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtMTMzOTAsNyArMTM2NDAsNyBAQAogfQogCiAvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgSFAgamFjayBzZW5zaW5nICovCi1zdGF0aWMgdm9pZCBhbGMyNjlfZWVlcGNfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCitzdGF0aWMgdm9pZCBhbGMyNjlfbGFwdG9wX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCSAgICAgdW5zaWduZWQgaW50IHJlcykKIHsKIAlzd2l0Y2ggKHJlcyA+PiAyNikgewpAQCAtMTM0MDMsNyArMTM2NTMsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYWxjMjY5X2VlZXBjX2RtaWNfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdm9pZCBhbGMyNjlfbGFwdG9wX2RtaWNfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OwpAQCAtMTM0MTMsNyArMTM2NjMsMTcgQEAKIAlzcGVjLT5hdXRvX21pYyA9IDE7CiB9CiAKLXN0YXRpYyB2b2lkIGFsYzI2OV9lZWVwY19hbWljX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjMjY5dmJfbGFwdG9wX2RtaWNfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OworCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CisJc3BlYy0+aW50X21pYy5waW4gPSAweDEyOworCXNwZWMtPmludF9taWMubXV4X2lkeCA9IDY7CisJc3BlYy0+YXV0b19taWMgPSAxOworfQorCitzdGF0aWMgdm9pZCBhbGMyNjlfbGFwdG9wX2FtaWNfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OwpAQCAtMTM0MjMsNyArMTM2ODMsNyBAQAogCXNwZWMtPmF1dG9fbWljID0gMTsKIH0KIAotc3RhdGljIHZvaWQgYWxjMjY5X2VlZXBjX2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjMjY5X2xhcHRvcF9pbml0aG9vayhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlhbGMyNjlfc3BlYWtlcl9hdXRvbXV0ZShjb2RlYyk7CiAJYWxjX21pY19hdXRvbXV0ZShjb2RlYyk7CkBAIC0xMzQzNiwyMiArMTM2OTYsMTAgQEAKIAkvKgogCSAqIFVubXV0ZSBBREMwIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCiAJICovCi0JezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCi0JLyogTXV0ZSBpbnB1dCBhbXBzIChQQ0JlZXAsIExpbmUgSW4sIE1pYyAxICYgTWljIDIpIG9mIHRoZQotCSAqIGFuYWxvZy1sb29wYmFjayBtaXhlciB3aWRnZXQKLQkgKiBOb3RlOiBQQVNEIG1vdGhlcmJvYXJkcyB1c2VzIHRoZSBMaW5lIEluIDIgYXMgdGhlIGlucHV0IGZvcgotCSAqIGZyb250IHBhbmVsIG1pYyAobWljIDIpCi0JICovCi0JLyogQW1wIEluZGljZXM6IE1pYzEgPSAwLCBNaWMyID0gMSwgTGluZTEgPSAyLCBMaW5lMiA9IDMsIENEID0gNCAqLwotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAKIAkvKgotCSAqIFNldCB1cCBvdXRwdXQgbWl4ZXJzICgweDBjIC0gMHgwZSkKKwkgKiBTZXQgdXAgb3V0cHV0IG1peGVycyAoMHgwMiAtIDB4MDMpCiAJICovCiAJLyogc2V0IHZvbD0wIHRvIG91dHB1dCBtaXhlcnMgKi8KIAl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKQEAgLTEzNDc2LDI2ICsxMzcyNCw1NyBAQAogCiAJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAotCXsweDE2LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCi0JezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKLQl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAotCi0JLyogRklYTUU6IHVzZSBtYXRyaXgtdHlwZSBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICovCisJLyogRklYTUU6IHVzZSBNdXgtdHlwZSBpbnB1dCBzb3VyY2Ugc2VsZWN0aW9uICovCiAJLyogTWl4ZXIgZWxlbWVudHM6IDB4MTgsIDE5LCAxYSwgMWIsIDFkLCAwYiAqLwogCS8qIElucHV0IG1peGVyMTogdW5tdXRlIE1pYywgRi1NaWMsIExpbmUsIENEIGlucHV0cyAqLwotCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCXsweDI0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCi0JezB4MjQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKKwl7MHgyMywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAogCiAJLyogc2V0IEVBUEQgKi8KIAl7MHgxNCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDJ9LAotCXsweDE1LCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMn0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OXZiX2luaXRfdmVyYnNbXSA9IHsKKwkvKgorCSAqIFVubXV0ZSBBREMwIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCisJICovCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCisJLyoKKwkgKiBTZXQgdXAgb3V0cHV0IG1peGVycyAoMHgwMiAtIDB4MDMpCisJICovCisJLyogc2V0IHZvbD0wIHRvIG91dHB1dCBtaXhlcnMgKi8KKwl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKworCS8qIHNldCB1cCBpbnB1dCBhbXBzIGZvciBhbmFsb2cgbG9vcGJhY2sgKi8KKwkvKiBBbXAgSW5kaWNlczogREFDID0gMCwgbWl4ZXIgPSAxICovCisJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisJezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisKKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKworCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKworCS8qIEZJWE1FOiB1c2UgTXV4LXR5cGUgaW5wdXQgc291cmNlIHNlbGVjdGlvbiAqLworCS8qIE1peGVyIGVsZW1lbnRzOiAweDE4LCAxOSwgMWEsIDFiLCAxZCwgMGIgKi8KKwkvKiBJbnB1dCBtaXhlcjE6IHVubXV0ZSBNaWMsIEYtTWljLCBMaW5lLCBDRCBpbnB1dHMgKi8KKwl7MHgyMiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCisJLyogc2V0IEVBUEQgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDJ9LAogCXsgfQogfTsKIApAQCAtMTM1NDMsNiArMTM4MjIsNyBAQAogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBlcnI7CiAJc3RhdGljIGhkYV9uaWRfdCBhbGMyNjlfaWdub3JlW10gPSB7IDB4MWQsIDAgfTsKKwloZGFfbmlkX3QgcmVhbF9jYXBzcmNfbmlkczsKIAogCWVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsICZzcGVjLT5hdXRvY2ZnLAogCQkJCQkgICBhbGMyNjlfaWdub3JlKTsKQEAgLTEzNTY0LDExICsxMzg0NCwyMCBAQAogCWlmIChzcGVjLT5rY3Rscy5saXN0KQogCQlhZGRfbWl4ZXIoc3BlYywgc3BlYy0+a2N0bHMubGlzdCk7CiAKLQlhZGRfdmVyYihzcGVjLCBhbGMyNjlfaW5pdF92ZXJicyk7CisJaWYgKChhbGNfcmVhZF9jb2VmX2lkeChjb2RlYywgMCkgJiAweDAwZjApID09IDB4MDAxMCkgeworCQlhZGRfdmVyYihzcGVjLCBhbGMyNjl2Yl9pbml0X3ZlcmJzKTsKKwkJcmVhbF9jYXBzcmNfbmlkcyA9IGFsYzI2OXZiX2NhcHNyY19uaWRzWzBdOworCQlhbGNfc3NpZF9jaGVjayhjb2RlYywgMCwgMHgxYiwgMHgxNCwgMHgyMSk7CisJfSBlbHNlIHsKKwkJYWRkX3ZlcmIoc3BlYywgYWxjMjY5X2luaXRfdmVyYnMpOworCQlyZWFsX2NhcHNyY19uaWRzID0gYWxjMjY5X2NhcHNyY19uaWRzWzBdOworCQlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCwgMCk7CisJfQorCiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCS8qIHNldCBkZWZhdWx0IGlucHV0IHNvdXJjZSAqLwotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIGFsYzI2OV9jYXBzcmNfbmlkc1swXSwKKwlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCByZWFsX2NhcHNyY19uaWRzLAogCQkJCSAgMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCiAJCQkJICBzcGVjLT5pbnB1dF9tdXgtPml0ZW1zWzBdLmluZGV4KTsKIApAQCAtMTM1NzksOCArMTM4NjgsNiBAQAogCWlmICghc3BlYy0+Y2FwX21peGVyICYmICFzcGVjLT5ub19hbmFsb2cpCiAJCXNldF9jYXB0dXJlX21peGVyKGNvZGVjKTsKIAotCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0KTsKLQogCXJldHVybiAxOwogfQogCkBAIC0xMzYwNiw4ICsxMzg5Myw4IEBACiBzdGF0aWMgY29uc3QgY2hhciAqYWxjMjY5X21vZGVsc1tBTEMyNjlfTU9ERUxfTEFTVF0gPSB7CiAJW0FMQzI2OV9CQVNJQ10JCQk9ICJiYXNpYyIsCiAJW0FMQzI2OV9RVUFOVEFfRkwxXQkJPSAicXVhbnRhIiwKLQlbQUxDMjY5X0FTVVNfQU1JQ10JCT0gImFzdXMtYW1pYyIsCi0JW0FMQzI2OV9BU1VTX0RNSUNdCQk9ICJhc3VzLWRtaWMiLAorCVtBTEMyNjlfQU1JQ10JCQk9ICJsYXB0b3AtYW1pYyIsCisJW0FMQzI2OV9ETUlDXQkJCT0gImxhcHRvcC1kbWljIiwKIAlbQUxDMjY5X0ZVSklUU1VdCQk9ICJmdWppdHN1IiwKIAlbQUxDMjY5X0xJRkVCT09LXQkJPSAibGlmZWJvb2siLAogCVtBTEMyNjlfQVVUT10JCQk9ICJhdXRvIiwKQEAgLTEzNjE2LDQzICsxMzkwMyw1NyBAQAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzI2OV9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4M2JmOCwgIlF1YW50YSBGTDEiLCBBTEMyNjlfUVVBTlRBX0ZMMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODMzMCwgIkFTVVMgRWVlcGMgUDcwMyBQOTAwQSIsCi0JCSAgICAgIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExMzMsICJBU1VTIFVKMjBmdCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyNzMsICJBU1VTIFVMODBKVCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyODMsICJBU1VTIFU1M0pjIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTJiMywgIkFTVVMgTjgySnYiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxM2EzLCAiQVNVUyBVTDMwVnQiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzczLCAiQVNVUyBHNzNKWCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzODMsICJBU1VTIFVKMzBKYyIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzZDMsICJBU1VTIE42MUpBIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQxMywgIkFTVVMgVUw1MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0NDMsICJBU1VTIFVMMzAiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNDUzLCAiQVNVUyBNNjBKdiIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0ODMsICJBU1VTIFVMODAiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNGYzLCAiQVNVUyBGODNWZiIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0ZTMsICJBU1VTIFVMMjAiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNTEzLCAiQVNVUyBVWDMwIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVhMywgIkFTVVMgTjYwSnYiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNWIzLCAiQVNVUyBONjBEcCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1YzMsICJBU1VTIE43MERlIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVlMywgIkFTVVMgRjgzVCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2NDMsICJBU1VTIE02MEoiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjUzLCAiQVNVUyBVNTAiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjkzLCAiQVNVUyBGNTBOIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZhMywgIkFTVVMgRjVRIiwgQUxDMjY5X0FTVVNfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZlMywgIkFTVVMgVVg1MCIsIEFMQzI2OV9BU1VTX0RNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3MjMsICJBU1VTIFA4MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NDMsICJBU1VTIFU4MCIsIEFMQzI2OV9BU1VTX0FNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NzMsICJBU1VTIFUyMEEiLCBBTEMyNjlfQVNVU19BTUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODgzLCAiQVNVUyBGODFTZSIsIEFMQzI2OV9BU1VTX0FNSUMpLAorCQkgICAgICBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTAxMywgIkFTVVMgTjYxRGEiLCBBTEMyNjlWQl9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMTEzLCAiQVNVUyBONjNKbiIsIEFMQzI2OVZCX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExNDMsICJBU1VTIEI1M2YiLCBBTEMyNjlWQl9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMTMzLCAiQVNVUyBVSjIwZnQiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTE4MywgIkFTVVMgSzcyRFIiLCBBTEMyNjlWQl9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWIzLCAiQVNVUyBLNTJEUiIsIEFMQzI2OVZCX0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExZTMsICJBU1VTIFUzM0pjIiwgQUxDMjY5VkJfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTI3MywgIkFTVVMgVUw4MEp0IiwgQUxDMjY5VkJfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTI4MywgIkFTVVMgVTUzSmMiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTJiMywgIkFTVVMgTjgySnYiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTJkMywgIkFTVVMgTjYxSnYiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTNhMywgIkFTVVMgVUwzMFZ0IiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzNzMsICJBU1VTIEc3M0pYIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzODMsICJBU1VTIFVKMzBKYyIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxM2QzLCAiQVNVUyBONjFKQSIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNDEzLCAiQVNVUyBVTDUwIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE0NDMsICJBU1VTIFVMMzAiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQ1MywgIkFTVVMgTTYwSnYiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTQ4MywgIkFTVVMgVUw4MCIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNGYzLCAiQVNVUyBGODNWZiIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNGUzLCAiQVNVUyBVTDIwIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE1MTMsICJBU1VTIFVYMzAiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTU5MywgIkFTVVMgTjUxVm4iLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVhMywgIkFTVVMgTjYwSnYiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTViMywgIkFTVVMgTjYwRHAiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVjMywgIkFTVVMgTjcwRGUiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTVlMywgIkFTVVMgRjgzVCIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjQzLCAiQVNVUyBNNjBKIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2NTMsICJBU1VTIFU1MCIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjkzLCAiQVNVUyBGNTBOIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2YTMsICJBU1VTIEY1USIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNmUzLCAiQVNVUyBVWDUwIiwgQUxDMjY5X0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3MjMsICJBU1VTIFA4MCIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNzQzLCAiQVNVUyBVODAiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc3MywgIkFTVVMgVTIwQSIsIEFMQzI2OV9BTUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODgzLCAiQVNVUyBGODFTZSIsIEFMQzI2OV9BTUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MzFhLCAiQVNVUyBFZWVwYyBQOTAxIiwKLQkJICAgICAgQUxDMjY5X0FTVVNfRE1JQyksCisJCSAgICAgIEFMQzI2OV9ETUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MzRhLCAiQVNVUyBFZWVwYyBTMTAxIiwKLQkJICAgICAgQUxDMjY5X0FTVVNfRE1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODM5OCwgIkFTVVMgUDEwMDVIQSIsIEFMQzI2OV9BU1VTX0RNSUMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzY2UsICJBU1VTIFAxMDA1SEEiLCBBTEMyNjlfQVNVU19ETUlDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTczNCwgMHgxMTVkLCAiRlNDIEFtaWxvIiwgQUxDMjY5X0ZVSklUU1UpLAorCQkgICAgICBBTEMyNjlfRE1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODM5OCwgIkFTVVMgUDEwMDVIQSIsIEFMQzI2OV9ETUlDKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4M2NlLCAiQVNVUyBQMTAwNUhBIiwgQUxDMjY5X0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwNzEsICJTT05ZIFhUQiIsIEFMQzI2OV9ETUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTBjZiwgMHgxNDc1LCAiTGlmZWJvb2sgSUNIOU0tYmFzZWQiLCBBTEMyNjlfTElGRUJPT0spLAorCVNORF9QQ0lfUVVJUksoMHgxNTJkLCAweDE3NzgsICJRdWFudGEgT04xIiwgQUxDMjY5X0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxNzM0LCAweDExNWQsICJGU0MgQW1pbG8iLCBBTEMyNjlfRlVKSVRTVSksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4M2JlOSwgIlF1YW50YSBXaXN0cm9uIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDNiZjgsICJRdWFudGEgRkwxIiwgQUxDMjY5X0FNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxN2ZmLCAweDA1OWEsICJRdWFudGEgRUwzIiwgQUxDMjY5X0RNSUMpLAorCVNORF9QQ0lfUVVJUksoMHgxN2ZmLCAweDA1OWIsICJRdWFudGEgSlIxIiwgQUxDMjY5X0RNSUMpLAogCXt9CiB9OwogCkBAIC0xMzY4MCw0NyArMTM5ODEsNzUgQEAKIAkJLnNldHVwID0gYWxjMjY5X3F1YW50YV9mbDFfc2V0dXAsCiAJCS5pbml0X2hvb2sgPSBhbGMyNjlfcXVhbnRhX2ZsMV9pbml0X2hvb2ssCiAJfSwKLQlbQUxDMjY5X0FTVVNfQU1JQ10gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzI2OV9lZWVwY19taXhlciB9LAotCQkuY2FwX21peGVyID0gYWxjMjY5X2VwY19jYXB0dXJlX21peGVyLAorCVtBTEMyNjlfQU1JQ10gPSB7CisJCS5taXhlcnMgPSB7IGFsYzI2OV9sYXB0b3BfbWl4ZXIgfSwKKwkJLmNhcF9taXhlciA9IGFsYzI2OV9sYXB0b3BfYW5hbG9nX2NhcHR1cmVfbWl4ZXIsCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjlfaW5pdF92ZXJicywKLQkJCQlhbGMyNjlfZWVlcGNfYW1pY19pbml0X3ZlcmJzIH0sCisJCQkJYWxjMjY5X2xhcHRvcF9hbWljX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjlfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGMyNjlfZGFjX25pZHMsCiAJCS5ocF9uaWQgPSAweDAzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjY5X21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OV9tb2RlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2VlZXBjX3Vuc29sX2V2ZW50LAotCQkuc2V0dXAgPSBhbGMyNjlfZWVlcGNfYW1pY19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzI2OV9lZWVwY19pbml0aG9vaywKKwkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2xhcHRvcF91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjMjY5X2xhcHRvcF9hbWljX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjMjY5X2xhcHRvcF9pbml0aG9vaywKIAl9LAotCVtBTEMyNjlfQVNVU19ETUlDXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjMjY5X2VlZXBjX21peGVyIH0sCi0JCS5jYXBfbWl4ZXIgPSBhbGMyNjlfZXBjX2NhcHR1cmVfbWl4ZXIsCisJW0FMQzI2OV9ETUlDXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjMjY5X2xhcHRvcF9taXhlciB9LAorCQkuY2FwX21peGVyID0gYWxjMjY5X2xhcHRvcF9kaWdpdGFsX2NhcHR1cmVfbWl4ZXIsCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjlfaW5pdF92ZXJicywKLQkJCQlhbGMyNjlfZWVlcGNfZG1pY19pbml0X3ZlcmJzIH0sCisJCQkJYWxjMjY5X2xhcHRvcF9kbWljX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjlfZGFjX25pZHMpLAogCQkuZGFjX25pZHMgPSBhbGMyNjlfZGFjX25pZHMsCiAJCS5ocF9uaWQgPSAweDAzLAogCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjY5X21vZGVzKSwKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OV9tb2RlcywKLQkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2VlZXBjX3Vuc29sX2V2ZW50LAotCQkuc2V0dXAgPSBhbGMyNjlfZWVlcGNfZG1pY19zZXR1cCwKLQkJLmluaXRfaG9vayA9IGFsYzI2OV9lZWVwY19pbml0aG9vaywKKwkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2xhcHRvcF91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjMjY5X2xhcHRvcF9kbWljX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjMjY5X2xhcHRvcF9pbml0aG9vaywKKwl9LAorCVtBTEMyNjlWQl9BTUlDXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjMjY5dmJfbGFwdG9wX21peGVyIH0sCisJCS5jYXBfbWl4ZXIgPSBhbGMyNjl2Yl9sYXB0b3BfYW5hbG9nX2NhcHR1cmVfbWl4ZXIsCisJCS5pbml0X3ZlcmJzID0geyBhbGMyNjl2Yl9pbml0X3ZlcmJzLAorCQkJCWFsYzI2OXZiX2xhcHRvcF9hbWljX2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjlfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGMyNjlfZGFjX25pZHMsCisJCS5ocF9uaWQgPSAweDAzLAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjMjY5X21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzI2OV9tb2RlcywKKwkJLnVuc29sX2V2ZW50ID0gYWxjMjY5X2xhcHRvcF91bnNvbF9ldmVudCwKKwkJLnNldHVwID0gYWxjMjY5X2xhcHRvcF9hbWljX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjMjY5X2xhcHRvcF9pbml0aG9vaywKKwl9LAorCVtBTEMyNjlWQl9ETUlDXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjMjY5dmJfbGFwdG9wX21peGVyIH0sCisJCS5jYXBfbWl4ZXIgPSBhbGMyNjl2Yl9sYXB0b3BfZGlnaXRhbF9jYXB0dXJlX21peGVyLAorCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY5dmJfaW5pdF92ZXJicywKKwkJCQlhbGMyNjl2Yl9sYXB0b3BfZG1pY19pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjY5X2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjMjY5X2RhY19uaWRzLAorCQkuaHBfbmlkID0gMHgwMywKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2OV9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGMyNjlfbW9kZXMsCisJCS51bnNvbF9ldmVudCA9IGFsYzI2OV9sYXB0b3BfdW5zb2xfZXZlbnQsCisJCS5zZXR1cCA9IGFsYzI2OXZiX2xhcHRvcF9kbWljX3NldHVwLAorCQkuaW5pdF9ob29rID0gYWxjMjY5X2xhcHRvcF9pbml0aG9vaywKIAl9LAogCVtBTEMyNjlfRlVKSVRTVV0gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2OV9mdWppdHN1X21peGVyIH0sCi0JCS5jYXBfbWl4ZXIgPSBhbGMyNjlfZXBjX2NhcHR1cmVfbWl4ZXIsCisJCS5jYXBfbWl4ZXIgPSBhbGMyNjlfbGFwdG9wX2RpZ2l0YWxfY2FwdHVyZV9taXhlciwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OV9pbml0X3ZlcmJzLAotCQkJCWFsYzI2OV9lZWVwY19kbWljX2luaXRfdmVyYnMgfSwKKwkJCQlhbGMyNjlfbGFwdG9wX2RtaWNfaW5pdF92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2OV9kYWNfbmlkcyksCiAJCS5kYWNfbmlkcyA9IGFsYzI2OV9kYWNfbmlkcywKIAkJLmhwX25pZCA9IDB4MDMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjlfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjMjY5X21vZGVzLAotCQkudW5zb2xfZXZlbnQgPSBhbGMyNjlfZWVlcGNfdW5zb2xfZXZlbnQsCi0JCS5zZXR1cCA9IGFsYzI2OV9lZWVwY19kbWljX3NldHVwLAotCQkuaW5pdF9ob29rID0gYWxjMjY5X2VlZXBjX2luaXRob29rLAorCQkudW5zb2xfZXZlbnQgPSBhbGMyNjlfbGFwdG9wX3Vuc29sX2V2ZW50LAorCQkuc2V0dXAgPSBhbGMyNjlfbGFwdG9wX2RtaWNfc2V0dXAsCisJCS5pbml0X2hvb2sgPSBhbGMyNjlfbGFwdG9wX2luaXRob29rLAogCX0sCiAJW0FMQzI2OV9MSUZFQk9PS10gPSB7CiAJCS5taXhlcnMgPSB7IGFsYzI2OV9saWZlYm9va19taXhlciB9LApAQCAtMTM3NDEsNiArMTQwNzAsNyBAQAogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYzsKIAlpbnQgYm9hcmRfY29uZmlnOwogCWludCBlcnI7CisJaW50IGlzX2FsYzI2OXZiID0gMDsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0xMzc1Nyw2ICsxNDA4Nyw3IEBACiAJCQlhbGNfZnJlZShjb2RlYyk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQorCQlpc19hbGMyNjl2YiA9IDE7CiAJfQogCiAJYm9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIEFMQzI2OV9NT0RFTF9MQVNULApAQCAtMTM3OTIsNyArMTQxMjMsNyBAQAogCWlmIChib2FyZF9jb25maWcgIT0gQUxDMjY5X0FVVE8pCiAJCXNldHVwX3ByZXNldChjb2RlYywgJmFsYzI2OV9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCi0JaWYgKGNvZGVjLT5zdWJzeXN0ZW1faWQgPT0gMHgxN2FhM2JmOCkgeworCWlmIChib2FyZF9jb25maWcgPT0gQUxDMjY5X1FVQU5UQV9GTDEpIHsKIAkJLyogRHVlIHRvIGEgaGFyZHdhcmUgcHJvYmxlbSBvbiBMZW5vdm8gSWRlYWRwYWQsIHdlIG5lZWQgdG8KIAkJICogZml4IHRoZSBzYW1wbGUgcmF0ZSBvZiBhbmFsb2cgSS9PIHRvIDQ0LjFrSHoKIAkJICovCkBAIC0xMzgwNSw5ICsxNDEzNiwxNiBAQAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzI2OV9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzI2OV9wY21fZGlnaXRhbF9jYXB0dXJlOwogCi0Jc3BlYy0+YWRjX25pZHMgPSBhbGMyNjlfYWRjX25pZHM7Ci0Jc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGMyNjlfYWRjX25pZHMpOwotCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjMjY5X2NhcHNyY19uaWRzOworCWlmICghaXNfYWxjMjY5dmIpIHsKKwkJc3BlYy0+YWRjX25pZHMgPSBhbGMyNjlfYWRjX25pZHM7CisJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjMjY5X2FkY19uaWRzKTsKKwkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGMyNjlfY2Fwc3JjX25pZHM7CisJfSBlbHNlIHsKKwkJc3BlYy0+YWRjX25pZHMgPSBhbGMyNjl2Yl9hZGNfbmlkczsKKwkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGMyNjl2Yl9hZGNfbmlkcyk7CisJCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjMjY5dmJfY2Fwc3JjX25pZHM7CisJfQorCiAJaWYgKCFzcGVjLT5jYXBfbWl4ZXIpCiAJCXNldF9jYXB0dXJlX21peGVyKGNvZGVjKTsKIAlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNCwgSERBX0lOUFVUKTsKQEAgLTEzODIxLDcgKzE0MTU5LDYgQEAKIAlpZiAoIXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QpCiAJCXNwZWMtPmxvb3BiYWNrLmFtcGxpc3QgPSBhbGMyNjlfbG9vcGJhY2tzOwogI2VuZGlmCi0JY29kZWMtPnByb2Nfd2lkZ2V0X2hvb2sgPSBwcmludF9yZWFsdGVrX2NvZWY7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0Njg0LDcgKzE1MDIxLDcgQEAKIAlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg2MV9hZGNfbmlkcyk7CiAJc2V0X2NhcHR1cmVfbWl4ZXIoY29kZWMpOwogCi0JYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MGUsIDB4MGYsIDB4MGIpOworCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDBlLCAweDBmLCAweDBiLCAwKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTQ5MzksMTMgKzE1Mjc2LDE2IEBACiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDAzOwogCiAJY29kZWMtPnBhdGNoX29wcyA9IGFsY19wYXRjaF9vcHM7Ci0JaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEM4NjFfQVVUTykKKwlpZiAoYm9hcmRfY29uZmlnID09IEFMQzg2MV9BVVRPKSB7CiAJCXNwZWMtPmluaXRfaG9vayA9IGFsYzg2MV9hdXRvX2luaXQ7CiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorCQlzcGVjLT5wb3dlcl9ob29rID0gYWxjX3Bvd2VyX2VhcGQ7CisjZW5kaWYKKwl9CisjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogCWlmICghc3BlYy0+bG9vcGJhY2suYW1wbGlzdCkKIAkJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IGFsYzg2MV9sb29wYmFja3M7CiAjZW5kaWYKLQljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHByaW50X3JlYWx0ZWtfY29lZjsKIAogCXJldHVybiAwOwogfQpAQCAtMTU1NzIsNyArMTU5MTIsNyBAQAogc3RhdGljIGludCBhbGM4NjF2ZF9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXJldHVybiBhbGNfYXV0b19jcmVhdGVfaW5wdXRfY3Rscyhjb2RlYywgY2ZnLCAweDE1LCAweDIyLCAwKTsKKwlyZXR1cm4gYWxjX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMoY29kZWMsIGNmZywgMHgxNSwgMHgwOSwgMCk7CiB9CiAKIApAQCAtMTU4MDgsNyArMTYxNDgsNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MWIsIDB4MTQpOworCWFsY19zc2lkX2NoZWNrKGNvZGVjLCAweDE1LCAweDFiLCAweDE0LCAwKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTU5MjUsNyArMTYyNjUsNiBAQAogCWlmICghc3BlYy0+bG9vcGJhY2suYW1wbGlzdCkKIAkJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IGFsYzg2MXZkX2xvb3BiYWNrczsKICNlbmRpZgotCWNvZGVjLT5wcm9jX3dpZGdldF9ob29rID0gcHJpbnRfcmVhbHRla19jb2VmOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjM5MiwxMyArMTY3MzEsNiBAQAogCS8qIEFEQzogbXV0ZSBhbXAgbGVmdCBhbmQgcmlnaHQgKi8KIAl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDA5LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCi0JLyogRnJvbnQgbWl4ZXI6IHVubXV0ZSBpbnB1dC9vdXRwdXQgYW1wIGxlZnQgYW5kIHJpZ2h0ICh2b2x1bWUgPSAwKSAqLwotCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAogCiAJezB4MGMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKQEAgLTE2NDQ4LDYgKzE2NzgwLDI4IEBACiAJeyB9CiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzY2M19pbml0X3ZlcmJzW10gPSB7CisJezB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgyMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI3Ml9pbml0X3ZlcmJzW10gPSB7CisJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDIxLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7IH0KK307CisKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYyX3N1ZV9pbml0X3ZlcmJzW10gPSB7CiAJezB4MTQsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58QUxDODgwX0ZST05UX0VWRU5UfSwKIAl7MHgxYiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxBTEM4ODBfSFBfRVZFTlR9LApAQCAtMTY0NjcsNjEgKzE2ODIxLDYgQEAKIAl7fQogfTsKIAotLyoKLSAqIGdlbmVyaWMgaW5pdGlhbGl6YXRpb24gb2YgQURDLCBpbnB1dCBtaXhlcnMgYW5kIG91dHB1dCBtaXhlcnMKLSAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2NjJfYXV0b19pbml0X3ZlcmJzW10gPSB7Ci0JLyoKLQkgKiBVbm11dGUgQURDIGFuZCBzZXQgdGhlIGRlZmF1bHQgaW5wdXQgdG8gbWljLWluCi0JICovCi0JezB4MDksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKLQl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0KLQkvKiBVbm11dGUgaW5wdXQgYW1wcyAoQ0QsIExpbmUgSW4sIE1pYyAxICYgTWljIDIpIG9mIHRoZSBhbmFsb2ctbG9vcGJhY2sKLQkgKiBtaXhlciB3aWRnZXQKLQkgKiBOb3RlOiBQQVNEIG1vdGhlcmJvYXJkcyB1c2VzIHRoZSBMaW5lIEluIDIgYXMgdGhlIGlucHV0IGZvciBmcm9udAotCSAqIHBhbmVsIG1pYyAobWljIDIpCi0JICovCi0JLyogQW1wIEluZGljZXM6IE1pYzEgPSAwLCBNaWMyID0gMSwgTGluZTEgPSAyLCBMaW5lMiA9IDMsIENEID0gNCAqLwotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKLQl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAotCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCi0JezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKLQotCS8qCi0JICogU2V0IHVwIG91dHB1dCBtaXhlcnMgKDB4MGMgLSAweDBmKQotCSAqLwotCS8qIHNldCB2b2w9MCB0byBvdXRwdXQgbWl4ZXJzICovCi0JezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0JezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0JezB4MDQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCi0KLQkvKiBzZXQgdXAgaW5wdXQgYW1wcyBmb3IgYW5hbG9nIGxvb3BiYWNrICovCi0JLyogQW1wIEluZGljZXM6IERBQyA9IDAsIG1peGVyID0gMSAqLwotCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCi0JezB4MGQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKLQl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAotCi0KLQkvKiBGSVhNRTogdXNlIG1hdHJpeC10eXBlIGlucHV0IHNvdXJjZSBzZWxlY3Rpb24gKi8KLQkvKiBNaXhlciBlbGVtZW50czogMHgxOCwgMTksIDFhLCAxYiwgMWMsIDFkLCAxNCwgMTUsIDE2LCAxNywgMGIgKi8KLQkvKiBJbnB1dCBtaXhlciAqLwotCXsweDIyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgyMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JeyB9Ci19OwotCi0vKiBhZGRpdGlvbmFsIHZlcmJzIGZvciBBTEM2NjMgKi8KLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYzX2F1dG9faW5pdF92ZXJic1tdID0gewotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCi0JeyB9Ci19OwotCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzY2M19tNTF2YV9pbml0X3ZlcmJzW10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKIAl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LApAQCAtMTcyNzIsNiArMTc1NzEsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyZjQsICJERUxMIFpNMSIsIEFMQzI3Ml9ERUxMX1pNMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTAwMCwgIkFTVVMgTjUwVm0iLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTA5MiwgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTE3MywgIkFTVVMgSzczSm4iLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFjMywgIkFTVVMgTTcwViIsIEFMQzY2M19BU1VTX01PREUzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWQzLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWYzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKQEAgLTE3MzA3LDYgKzE3NjA3LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODkzLCAiQVNVUyBNNTBWbSIsIEFMQzY2M19BU1VTX01PREUzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODk0LCAiQVNVUyBYNTUiLCBBTEM2NjNfQVNVU19NT0RFMyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MThiMywgIkFTVVMgTjgwVmMiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MThjMywgIkFTVVMgVlg1IiwgQUxDNjYzX0FTVVNfTU9ERTEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4ZDMsICJBU1VTIE44MVRlIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4ZjMsICJBU1VTIE41MDVUcCIsIEFMQzY2M19BU1VTX01PREUxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTAzLCAiQVNVUyBGNUdMIiwgQUxDNjYzX0FTVVNfTU9ERTEpLApAQCAtMTczMzQsNiArMTc2MzUsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGNhMDAsICJTYW1zdW5nIE5DMTAiLCBBTEMyNzJfU0FNU1VOR19OQzEwKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ1OCwgMHhhMDAyLCAiR2lnYWJ5dGUgOTQ1R0NNLVMyTCIsCiAJCSAgICAgIEFMQzY2Ml8zU1RfNmNoX0RJRyksCisJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MjMwNCwgIlF1YW50YSBXSDEiLCBBTEM2NjNfQVNVU19IMTMpLAogCVNORF9QQ0lfUVVJUksoMHgxNTY1LCAweDgyMGYsICJCaW9zdGFyIFRBNzgwRyBNMisiLCBBTEM2NjJfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNjMxLCAweGMxMGMsICJQQiBSUzY1IiwgQUxDNjYzX0FTVVNfTTUxVkEpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDEwMWUsICJMZW5vdm8iLCBBTEM2NjJfTEVOT1ZPXzEwMUUpLApAQCAtMTc5NTIsMTUgKzE4MjU0LDIzIEBACiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCi0JYWRkX3ZlcmIoc3BlYywgYWxjNjYyX2F1dG9faW5pdF92ZXJicyk7Ci0JaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY2MykKLQkJYWRkX3ZlcmIoc3BlYywgYWxjNjYzX2F1dG9faW5pdF92ZXJicyk7CisJYWRkX3ZlcmIoc3BlYywgYWxjNjYyX2luaXRfdmVyYnMpOworCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzAyNzIgfHwgY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwNjYzIHx8CisJICAgIGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY2NSkKKwkJYWRkX3ZlcmIoc3BlYywgYWxjNjYzX2luaXRfdmVyYnMpOworCisJaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDI3MikKKwkJYWRkX3ZlcmIoc3BlYywgYWxjMjcyX2luaXRfdmVyYnMpOwogCiAJZXJyID0gYWxjX2F1dG9fYWRkX21pY19ib29zdChjb2RlYyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlhbGNfc3NpZF9jaGVjayhjb2RlYywgMHgxNSwgMHgxYiwgMHgxNCk7CisJaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDI3MiB8fCBjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA2NjMgfHwKKwkgICAgY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwNjY1IHx8IGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY3MCkKKwkgICAgYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MWIsIDB4MTQsIDB4MjEpOworCWVsc2UKKwkgICAgYWxjX3NzaWRfY2hlY2soY29kZWMsIDB4MTUsIDB4MWIsIDB4MTQsIDApOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0xODA0NiwxMSArMTgzNTYsMjAgQEAKIAogCWlmICghc3BlYy0+Y2FwX21peGVyKQogCQlzZXRfY2FwdHVyZV9taXhlcihjb2RlYyk7Ci0JaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY2MikKLQkJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7Ci0JZWxzZQotCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNCwgSERBX0lOUFVUKTsKIAorCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgeworCWNhc2UgMHgxMGVjMDY2MjoKKwkJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CisJCWJyZWFrOworCWNhc2UgMHgxMGVjMDI3MjoKKwljYXNlIDB4MTBlYzA2NjM6CisJY2FzZSAweDEwZWMwNjY1OgorCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNCwgSERBX0lOUFVUKTsKKwkJYnJlYWs7CisJY2FzZSAweDEwZWMwMjczOgorCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwMywgSERBX0lOUFVUKTsKKwkJYnJlYWs7CisJfQogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwMjsKIAogCWNvZGVjLT5wYXRjaF9vcHMgPSBhbGNfcGF0Y2hfb3BzOwpAQCAtMTgwNjAsNyArMTgzNzksNiBAQAogCWlmICghc3BlYy0+bG9vcGJhY2suYW1wbGlzdCkKIAkJc3BlYy0+bG9vcGJhY2suYW1wbGlzdCA9IGFsYzY2Ml9sb29wYmFja3M7CiAjZW5kaWYKLQljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHByaW50X3JlYWx0ZWtfY29lZjsKIAogCXJldHVybiAwOwogfQpAQCAtMTgxMDEsNiArMTg0MTksOCBAQAogCXsgLmlkID0gMHgxMGVjMDY2MiwgLnJldiA9IDB4MTAwMTAxLCAubmFtZSA9ICJBTEM2NjIgcmV2MSIsCiAJICAucGF0Y2ggPSBwYXRjaF9hbGM2NjIgfSwKIAl7IC5pZCA9IDB4MTBlYzA2NjMsIC5uYW1lID0gIkFMQzY2MyIsIC5wYXRjaCA9IHBhdGNoX2FsYzY2MiB9LAorCXsgLmlkID0gMHgxMGVjMDY2NSwgLm5hbWUgPSAiQUxDNjY1IiwgLnBhdGNoID0gcGF0Y2hfYWxjNjYyIH0sCisJeyAuaWQgPSAweDEwZWMwNjcwLCAubmFtZSA9ICJBTEM2NzAiLCAucGF0Y2ggPSBwYXRjaF9hbGM2NjIgfSwKIAl7IC5pZCA9IDB4MTBlYzA4ODAsIC5uYW1lID0gIkFMQzg4MCIsIC5wYXRjaCA9IHBhdGNoX2FsYzg4MCB9LAogCXsgLmlkID0gMHgxMGVjMDg4MiwgLm5hbWUgPSAiQUxDODgyIiwgLnBhdGNoID0gcGF0Y2hfYWxjODgyIH0sCiAJeyAuaWQgPSAweDEwZWMwODgzLCAubmFtZSA9ICJBTEM4ODMiLCAucGF0Y2ggPSBwYXRjaF9hbGM4ODIgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2kzMDU0LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpMzA1NC5jCmluZGV4IDQzYjQzNmMuLmY0MTllZTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2kzMDU0LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaTMwNTQuYwpAQCAtMTIyLDYgKzEyMiw3IEBACiAjZGVmaW5lIFNJMzA1NF9LQ09OVFJPTChrbmFtZSxyZWcsbWFzaykgeyBcCiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKIAkubmFtZSA9IGtuYW1lLCBcCisJLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCByZWcsIFwKIAkuaW5mbyA9IHNpMzA1NF9zd2l0Y2hfaW5mbywgXAogCS5nZXQgID0gc2kzMDU0X3N3aXRjaF9nZXQsIFwKIAkucHV0ICA9IHNpMzA1NF9zd2l0Y2hfcHV0LCBcCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggNzk5YmEyNS4uOGM0MTZiYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwpAQCAtNTY4LDYgKzU2OCwxMSBAQAogCTB4MGYsIDB4MTAsIDB4MTEsIDB4MWYsIDB4MjAsCiB9OwogCitzdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkODh4eHhfcGluX25pZHNbMTBdID0geworCTB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsCisJMHgwZiwgMHgxMSwgMHgxZiwgMHgyMCwKK307CisKICNkZWZpbmUgU1RBQzkySEQ3MUJYWF9OVU1fUElOUyAxMwogc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDcxYnh4X3Bpbl9uaWRzXzRwb3J0W1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0gewogCTB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MDAsCkBAIC0yNjg4LDcgKzI2OTMsNyBAQAogc3RhY19jb250cm9sX25ldyhzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYywKIAkJIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprdGVtcCwKIAkJIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSBoZGFfbmlkX3QgbmlkKQorCQkgdW5zaWduZWQgaW50IHN1YmRldikKIHsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldzsKIApAQCAtMjcwNCw4ICsyNzA5LDcgQEAKIAkJc3BlYy0+a2N0bHMuYWxsb2NlZC0tOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JaWYgKG5pZCkKLQkJa25ldy0+c3ViZGV2aWNlID0gSERBX1NVQkRFVl9OSURfRkxBRyB8IG5pZDsKKwlrbmV3LT5zdWJkZXZpY2UgPSBzdWJkZXY7CiAJcmV0dXJuIGtuZXc7CiB9CiAKQEAgLTI3MTUsNyArMjcxOSw3IEBACiAJCQkJICAgICB1bnNpZ25lZCBsb25nIHZhbCkKIHsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldyA9IHN0YWNfY29udHJvbF9uZXcoc3BlYywga3RlbXAsIG5hbWUsCi0JCQkJCQkJIGdldF9hbXBfbmlkXyh2YWwpKTsKKwkJCQkJCQkgSERBX1NVQkRFVl9BTVBfRkxBRyk7CiAJaWYgKCFrbmV3KQogCQlyZXR1cm4gLUVOT01FTTsKIAlrbmV3LT5pbmRleCA9IGlkeDsKQEAgLTI4NzQsNiArMjg3OCwxMyBAQAogCiAJY29ubl9sZW4gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLCBjb25uLAogCQkJCQkgICBIREFfTUFYX0NPTk5FQ1RJT05TKTsKKwkvKiA5MkhEODg6IHRyYWNlIGJhY2sgdXAgdGhlIGxpbmsgb2YgbmlkcyB0byBmaW5kIHRoZSBEQUMgKi8KKwl3aGlsZSAoY29ubl9sZW4gPT0gMSAmJiAoZ2V0X3djYXBzX3R5cGUoZ2V0X3djYXBzKGNvZGVjLCBjb25uWzBdKSkKKwkJCQkJIT0gQUNfV0lEX0FVRF9PVVQpKSB7CisJCW5pZCA9IGNvbm5bMF07CisJCWNvbm5fbGVuID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgY29ubiwKKwkJCUhEQV9NQVhfQ09OTkVDVElPTlMpOworCX0KIAlmb3IgKGogPSAwOyBqIDwgY29ubl9sZW47IGorKykgewogCQl3Y2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgY29ubltqXSk7CiAJCXd0eXBlID0gZ2V0X3djYXBzX3R5cGUod2NhcHMpOwpAQCAtNDE2MCwzNCArNDE3MSw1MiBAQAogc3RhdGljIHZvaWQgc3RhY190b2dnbGVfcG93ZXJfbWFwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAogCQkJCSAgaW50IGVuYWJsZSk7CiAKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9pbnRfaGludChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqa2V5LAorCQkJICAgICAgIGludCAqdmFscCkKK3sKKwljb25zdCBjaGFyICpwOworCXAgPSBzbmRfaGRhX2dldF9oaW50KGNvZGVjLCBrZXkpOworCWlmIChwKSB7CisJCXVuc2lnbmVkIGxvbmcgdmFsOworCQlpZiAoIXN0cmljdF9zdHJ0b3VsKHAsIDAsICZ2YWwpKSB7CisJCQkqdmFscCA9IHZhbDsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCiAvKiBvdmVycmlkZSBzb21lIGhpbnRzIGZyb20gdGhlIGh3ZGVwIGVudHJ5ICovCiBzdGF0aWMgdm9pZCBzdGFjX3N0b3JlX2hpbnRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JY29uc3QgY2hhciAqcDsKIAlpbnQgdmFsOwogCiAJdmFsID0gc25kX2hkYV9nZXRfYm9vbF9oaW50KGNvZGVjLCAiaHBfZGV0ZWN0Iik7CiAJaWYgKHZhbCA+PSAwKQogCQlzcGVjLT5ocF9kZXRlY3QgPSB2YWw7Ci0JcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsICJncGlvX21hc2siKTsKLQlpZiAocCkgewotCQlzcGVjLT5ncGlvX21hc2sgPSBzaW1wbGVfc3RydG91bChwLCBOVUxMLCAwKTsKKwlpZiAoZ2V0X2ludF9oaW50KGNvZGVjLCAiZ3Bpb19tYXNrIiwgJnNwZWMtPmdwaW9fbWFzaykpIHsKIAkJc3BlYy0+ZWFwZF9tYXNrID0gc3BlYy0+Z3Bpb19kaXIgPSBzcGVjLT5ncGlvX2RhdGEgPQogCQkJc3BlYy0+Z3Bpb19tYXNrOwogCX0KLQlwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywgImdwaW9fZGlyIik7Ci0JaWYgKHApCi0JCXNwZWMtPmdwaW9fZGlyID0gc2ltcGxlX3N0cnRvdWwocCwgTlVMTCwgMCkgJiBzcGVjLT5ncGlvX21hc2s7Ci0JcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsICJncGlvX2RhdGEiKTsKLQlpZiAocCkKLQkJc3BlYy0+Z3Bpb19kYXRhID0gc2ltcGxlX3N0cnRvdWwocCwgTlVMTCwgMCkgJiBzcGVjLT5ncGlvX21hc2s7Ci0JcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsICJlYXBkX21hc2siKTsKLQlpZiAocCkKLQkJc3BlYy0+ZWFwZF9tYXNrID0gc2ltcGxlX3N0cnRvdWwocCwgTlVMTCwgMCkgJiBzcGVjLT5ncGlvX21hc2s7CisJaWYgKGdldF9pbnRfaGludChjb2RlYywgImdwaW9fZGlyIiwgJnNwZWMtPmdwaW9fZGlyKSkKKwkJc3BlYy0+Z3Bpb19tYXNrICY9IHNwZWMtPmdwaW9fbWFzazsKKwlpZiAoZ2V0X2ludF9oaW50KGNvZGVjLCAiZ3Bpb19kYXRhIiwgJnNwZWMtPmdwaW9fZGF0YSkpCisJCXNwZWMtPmdwaW9fZGlyICY9IHNwZWMtPmdwaW9fbWFzazsKKwlpZiAoZ2V0X2ludF9oaW50KGNvZGVjLCAiZWFwZF9tYXNrIiwgJnNwZWMtPmVhcGRfbWFzaykpCisJCXNwZWMtPmVhcGRfbWFzayAmPSBzcGVjLT5ncGlvX21hc2s7CisJaWYgKGdldF9pbnRfaGludChjb2RlYywgImdwaW9fbXV0ZSIsICZzcGVjLT5ncGlvX211dGUpKQorCQlzcGVjLT5ncGlvX211dGUgJj0gc3BlYy0+Z3Bpb19tYXNrOwogCXZhbCA9IHNuZF9oZGFfZ2V0X2Jvb2xfaGludChjb2RlYywgImVhcGRfc3dpdGNoIik7CiAJaWYgKHZhbCA+PSAwKQogCQlzcGVjLT5lYXBkX3N3aXRjaCA9IHZhbDsKKwlnZXRfaW50X2hpbnQoY29kZWMsICJncGlvX2xlZF9wb2xhcml0eSIsICZzcGVjLT5ncGlvX2xlZF9wb2xhcml0eSk7CisJaWYgKGdldF9pbnRfaGludChjb2RlYywgImdwaW9fbGVkIiwgJnNwZWMtPmdwaW9fbGVkKSkgeworCQlzcGVjLT5ncGlvX21hc2sgfD0gc3BlYy0+Z3Bpb19sZWQ7CisJCXNwZWMtPmdwaW9fZGlyIHw9IHNwZWMtPmdwaW9fbGVkOworCQlpZiAoc3BlYy0+Z3Bpb19sZWRfcG9sYXJpdHkpCisJCQlzcGVjLT5ncGlvX2RhdGEgfD0gc3BlYy0+Z3Bpb19sZWQ7CisJfQogfQogCiBzdGF0aWMgaW50IHN0YWM5Mnh4X2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC00MzM0LDYgKzQzNjMsMTIgQEAKIAkJaWYgKGVuYWJsZV9waW5fZGV0ZWN0KGNvZGVjLCBuaWQsIFNUQUNfUFdSX0VWRU5UKSkKIAkJCXN0YWNfaXNzdWVfdW5zb2xfZXZlbnQoY29kZWMsIG5pZCk7CiAJfQorCisjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorCS8qIHN5bmMgbXV0ZSBMRUQgKi8KKwlpZiAoc3BlYy0+Z3Bpb19sZWQgJiYgY29kZWMtPnBhdGNoX29wcy5jaGVja19wb3dlcl9zdGF0dXMpCisJCWNvZGVjLT5wYXRjaF9vcHMuY2hlY2tfcG93ZXJfc3RhdHVzKGNvZGVjLCAweDAxKTsKKyNlbmRpZgkKIAlpZiAoc3BlYy0+ZGFjX2xpc3QpCiAJCXN0YWM5Mnh4X3Bvd2VyX2Rvd24oY29kZWMpOwogCXJldHVybiAwOwpAQCAtNDM3MiwxOCArNDQwNyw4IEBACiBzdGF0aWMgdm9pZCBzdGFjOTJ4eF9zaHV0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgaTsKLQloZGFfbmlkX3QgbmlkOwogCi0JLyogcmVzZXQgZWFjaCBwaW4gYmVmb3JlIHBvd2VyaW5nIGRvd24gREFDL0FEQyB0byBhdm9pZCBjbGljayBub2lzZSAqLwotCW5pZCA9IGNvZGVjLT5zdGFydF9uaWQ7Ci0JZm9yIChpID0gMDsgaSA8IGNvZGVjLT5udW1fbm9kZXM7IGkrKywgbmlkKyspIHsKLQkJdW5zaWduZWQgaW50IHdjYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBuaWQpOwotCQl1bnNpZ25lZCBpbnQgd2lkX3R5cGUgPSBnZXRfd2NhcHNfdHlwZSh3Y2Fwcyk7Ci0JCWlmICh3aWRfdHlwZSA9PSBBQ19XSURfUElOKQotCQkJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCi0JCQkJQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwKTsKLQl9CisJc25kX2hkYV9zaHV0dXBfcGlucyhjb2RlYyk7CiAKIAlpZiAoc3BlYy0+ZWFwZF9tYXNrKQogCQlzdGFjX2dwaW9fc2V0KGNvZGVjLCBzcGVjLT5ncGlvX21hc2ssCkBAIC00NzM1LDE5ICs0NzYwLDE0IEBACiBzdGF0aWMgdm9pZCBzZXRfaHBfbGVkX2dwaW8oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKLQljYXNlIDB4MTExZDc2MDg6Ci0JCS8qIEdQSU8gMCAqLwotCQlzcGVjLT5ncGlvX2xlZCA9IDB4MDE7Ci0JCWJyZWFrOwotCWNhc2UgMHgxMTFkNzYwMDoKLQljYXNlIDB4MTExZDc2MDE6Ci0JY2FzZSAweDExMWQ3NjAyOgotCWNhc2UgMHgxMTFkNzYwMzoKLQkJLyogR1BJTyAzICovCi0JCXNwZWMtPmdwaW9fbGVkID0gMHgwODsKLQkJYnJlYWs7Ci0JfQorCXVuc2lnbmVkIGludCBncGlvOworCisJZ3BpbyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgY29kZWMtPmFmZywgQUNfUEFSX0dQSU9fQ0FQKTsKKwlncGlvICY9IEFDX0dQSU9fSU9fQ09VTlQ7CisJaWYgKGdwaW8gPiAzKQorCQlzcGVjLT5ncGlvX2xlZCA9IDB4MDg7IC8qIEdQSU8gMyAqLworCWVsc2UKKwkJc3BlYy0+Z3Bpb19sZWQgPSAweDAxOyAvKiBHUElPIDAgKi8KIH0KIAogLyoKQEAgLTQ3NzAsNyArNDc5MCw3IEBACiAgKiBOZWVkIG1vcmUgaW5mb3JtYXRpb24gb24gd2hldGhlciBpdCBpcyB0cnVlIGFjcm9zcyB0aGUgZW50aXJlIHNlcmllcy4KICAqIC0tIGt1bmFsCiAgKi8KLXN0YXRpYyBpbnQgZmluZF9tdXRlX2xlZF9ncGlvKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIGludCBmaW5kX211dGVfbGVkX2dwaW8oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBkZWZhdWx0X3BvbGFyaXR5KQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJY29uc3Qgc3RydWN0IGRtaV9kZXZpY2UgKmRldiA9IE5VTEw7CkBAIC00Nzk3LDcgKzQ4MTcsNyBAQAogCQkgKi8KIAkJaWYgKCFocF9ibGlrZV9zeXN0ZW0oY29kZWMtPnN1YnN5c3RlbV9pZCkpIHsKIAkJCXNldF9ocF9sZWRfZ3Bpbyhjb2RlYyk7Ci0JCQlzcGVjLT5ncGlvX2xlZF9wb2xhcml0eSA9IDE7CisJCQlzcGVjLT5ncGlvX2xlZF9wb2xhcml0eSA9IGRlZmF1bHRfcG9sYXJpdHk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0KQEAgLTQ4OTUsNiArNDkxNSwxMSBAQAogCQkJc3RhY19pc3N1ZV91bnNvbF9ldmVudChjb2RlYywKIAkJCQkJICAgICAgIHNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGluc1swXSk7CiAJfQorI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwkvKiBzeW5jIG11dGUgTEVEICovCisJaWYgKHNwZWMtPmdwaW9fbGVkICYmIGNvZGVjLT5wYXRjaF9vcHMuY2hlY2tfcG93ZXJfc3RhdHVzKQorCQljb2RlYy0+cGF0Y2hfb3BzLmNoZWNrX3Bvd2VyX3N0YXR1cyhjb2RlYywgMHgwMSk7CisjZW5kaWYJCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ5MTQsNDMgKzQ5MzksMjkgQEAKIAkJCQkJICAgICAgaGRhX25pZF90IG5pZCkKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBpLCBtdXRlZCA9IDE7CiAKLQlpZiAobmlkID09IDB4MTApIHsKLQkJaWYgKHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIG5pZCwgMCwgSERBX09VVFBVVCwgMCkgJgotCQkgICAgSERBX0FNUF9NVVRFKQotCQkJc3BlYy0+Z3Bpb19kYXRhICY9IH5zcGVjLT5ncGlvX2xlZDsgLyogb3JhbmdlICovCi0JCWVsc2UKLQkJCXNwZWMtPmdwaW9fZGF0YSB8PSBzcGVjLT5ncGlvX2xlZDsgLyogd2hpdGUgKi8KLQotCQlpZiAoIXNwZWMtPmdwaW9fbGVkX3BvbGFyaXR5KSB7Ci0JCQkvKiBMRUQgc3RhdGUgaXMgaW52ZXJ0ZWQgb24gdGhlc2Ugc3lzdGVtcyAqLwotCQkJc3BlYy0+Z3Bpb19kYXRhIF49IHNwZWMtPmdwaW9fbGVkOworCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5tdWx0aW91dC5udW1fZGFjczsgaSsrKSB7CisJCW5pZCA9IHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldOworCQlpZiAoIShzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCBuaWQsIDAsIEhEQV9PVVRQVVQsIDApICYKKwkJICAgICAgSERBX0FNUF9NVVRFKSkgeworCQkJbXV0ZWQgPSAwOyAvKiBzb21ldGhpbmcgaGVhcmQgKi8KKwkJCWJyZWFrOwogCQl9CisJfQorCWlmIChtdXRlZCkKKwkJc3BlYy0+Z3Bpb19kYXRhICY9IH5zcGVjLT5ncGlvX2xlZDsgLyogb3JhbmdlICovCisJZWxzZQorCQlzcGVjLT5ncGlvX2RhdGEgfD0gc3BlYy0+Z3Bpb19sZWQ7IC8qIHdoaXRlICovCiAKLQkJc3RhY19ncGlvX3NldChjb2RlYywgc3BlYy0+Z3Bpb19tYXNrLAotCQkJICAgICAgc3BlYy0+Z3Bpb19kaXIsCi0JCQkgICAgICBzcGVjLT5ncGlvX2RhdGEpOworCWlmICghc3BlYy0+Z3Bpb19sZWRfcG9sYXJpdHkpIHsKKwkJLyogTEVEIHN0YXRlIGlzIGludmVydGVkIG9uIHRoZXNlIHN5c3RlbXMgKi8KKwkJc3BlYy0+Z3Bpb19kYXRhIF49IHNwZWMtPmdwaW9fbGVkOwogCX0KIAotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlkdDkyaGQ4M3h4eF9ocF9jaGVja19wb3dlcl9zdGF0dXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJCSAgICAgIGhkYV9uaWRfdCBuaWQpCi17Ci0Jc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQotCWlmIChuaWQgIT0gMHgxMykKLQkJcmV0dXJuIDA7Ci0JaWYgKHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIG5pZCwgMCwgSERBX09VVFBVVCwgMCkgJiBIREFfQU1QX01VVEUpCi0JCXNwZWMtPmdwaW9fZGF0YSB8PSBzcGVjLT5ncGlvX2xlZDsgLyogbXV0ZSBMRUQgb24gKi8KLQllbHNlCi0JCXNwZWMtPmdwaW9fZGF0YSAmPSB+c3BlYy0+Z3Bpb19sZWQ7IC8qIG11dGUgTEVEIG9mZiAqLwogCXN0YWNfZ3Bpb19zZXQoY29kZWMsIHNwZWMtPmdwaW9fbWFzaywgc3BlYy0+Z3Bpb19kaXIsIHNwZWMtPmdwaW9fZGF0YSk7Ci0KIAlyZXR1cm4gMDsKIH0KLQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgc3RhYzkyeHhfc3VzcGVuZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtNTI3Miw3ICs1MjgzLDYgQEAKIAloZGFfbmlkX3QgY29ubltTVEFDOTJIRDgzX0RBQ19DT1VOVCArIDFdOwogCWludCBlcnI7CiAJaW50IG51bV9kYWNzOwotCWhkYV9uaWRfdCBuaWQ7CiAKIAlzcGVjICA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTUzMTEsNyArNTMyMSwxOCBAQAogCQkJCXN0YWM5MmhkODN4eHhfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKIAogCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgeworCWNhc2UgMHgxMTFkNzY2NjoKKwljYXNlIDB4MTExZDc2Njc6CisJY2FzZSAweDExMWQ3NjY4OgorCWNhc2UgMHgxMTFkNzY2OToKKwkJc3BlYy0+bnVtX3BpbnMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkODh4eHhfcGluX25pZHMpOworCQlzcGVjLT5waW5fbmlkcyA9IHN0YWM5MmhkODh4eHhfcGluX25pZHM7CisJCXNwZWMtPm1vbm9fbmlkID0gMDsKKwkJc3BlYy0+ZGlnYmVlcF9uaWQgPSAwOworCQlzcGVjLT5udW1fcHdycyA9IDA7CisJCWJyZWFrOwogCWNhc2UgMHgxMTFkNzYwNDoKKwljYXNlIDB4MTExZDc2ZDQ6CiAJY2FzZSAweDExMWQ3NjA1OgogCWNhc2UgMHgxMTFkNzZkNToKIAkJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA9PSBTVEFDXzkySEQ4M1hYWF9QV1JfUkVGKQpAQCAtNTMyMiw4ICs1MzQzLDEwIEBACiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gc3RhYzkyeHhfcGF0Y2hfb3BzOwogCi0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA9PSBTVEFDXzkySEQ4M1hYWF9IUCkKLQkJc3BlYy0+Z3Bpb19sZWQgPSAweDAxOworCWlmIChmaW5kX211dGVfbGVkX2dwaW8oY29kZWMsIDApKQorCQlzbmRfcHJpbnRkKCJtdXRlIExFRCBncGlvICVkIHBvbGFyaXR5ICVkXG4iLAorCQkJCXNwZWMtPmdwaW9fbGVkLAorCQkJCXNwZWMtPmdwaW9fbGVkX3BvbGFyaXR5KTsKIAogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAlpZiAoc3BlYy0+Z3Bpb19sZWQpIHsKQEAgLTUzMzIsNyArNTM1NSw3IEBACiAJCXNwZWMtPmdwaW9fZGF0YSB8PSBzcGVjLT5ncGlvX2xlZDsKIAkJLyogcmVnaXN0ZXIgY2hlY2tfcG93ZXJfc3RhdHVzIGNhbGxiYWNrLiAqLwogCQljb2RlYy0+cGF0Y2hfb3BzLmNoZWNrX3Bvd2VyX3N0YXR1cyA9Ci0JCQlpZHQ5MmhkODN4eHhfaHBfY2hlY2tfcG93ZXJfc3RhdHVzOworCQkJc3RhYzkyeHhfaHBfY2hlY2tfcG93ZXJfc3RhdHVzOwogCX0KICNlbmRpZgkKIApAQCAtNTM1MiwyNCArNTM3NSwyMSBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCXN3aXRjaCAoc3BlYy0+Ym9hcmRfY29uZmlnKSB7Ci0JY2FzZSBTVEFDX0RFTExfUzE0OgotCQluaWQgPSAweGY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCW5pZCA9IDB4ZTsKLQkJYnJlYWs7Ci0JfQotCi0JbnVtX2RhY3MgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLAorCS8qIGRvY2tpbmcgb3V0cHV0IHN1cHBvcnQgKi8KKwludW1fZGFjcyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCAweEYsCiAJCQkJY29ubiwgU1RBQzkySEQ4M19EQUNfQ09VTlQgKyAxKSAtIDE7Ci0JaWYgKG51bV9kYWNzIDwgMCkKLQkJbnVtX2RhY3MgPSBTVEFDOTJIRDgzX0RBQ19DT1VOVDsKLQotCS8qIHNldCBwb3J0IFggdG8gc2VsZWN0IHRoZSBsYXN0IERBQwotCSAqLwotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKKwkvKiBza2lwIG5vbi1EQUMgY29ubmVjdGlvbnMgKi8KKwl3aGlsZSAobnVtX2RhY3MgPj0gMCAmJgorCQkJKGdldF93Y2Fwc190eXBlKGdldF93Y2Fwcyhjb2RlYywgY29ubltudW1fZGFjc10pKQorCQkJCQkhPSBBQ19XSURfQVVEX09VVCkpCisJCW51bV9kYWNzLS07CisJLyogc2V0IHBvcnQgRSBhbmQgRiB0byBzZWxlY3QgdGhlIGxhc3QgREFDICovCisJaWYgKG51bV9kYWNzID49IDApIHsKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHhFLCAwLAogCQkJQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIG51bV9kYWNzKTsKKwkJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgMHhGLCAwLAorCQkJQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIG51bV9kYWNzKTsKKwl9CiAKIAljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHN0YWM5MmhkX3Byb2NfaG9vazsKIApAQCAtNTQzMSw2ICs1NDUxLDU0IEBACiAJCXJldHVybiAwOwogfQogCisvKiBIUCBkdjcgYmFzcyBzd2l0Y2ggLSBHUElPNSAqLworI2RlZmluZSBzdGFjX2hwX2Jhc3NfZ3Bpb19pbmZvCXNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8KK3N0YXRpYyBpbnQgc3RhY19ocF9iYXNzX2dwaW9fZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gISEoc3BlYy0+Z3Bpb19kYXRhICYgMHgyMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RhY19ocF9iYXNzX2dwaW9fcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVuc2lnbmVkIGludCBncGlvX2RhdGE7CisKKwlncGlvX2RhdGEgPSAoc3BlYy0+Z3Bpb19kYXRhICYgfjB4MjApIHwKKwkJKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID8gMHgyMCA6IDApOworCWlmIChncGlvX2RhdGEgPT0gc3BlYy0+Z3Bpb19kYXRhKQorCQlyZXR1cm4gMDsKKwlzcGVjLT5ncGlvX2RhdGEgPSBncGlvX2RhdGE7CisJc3RhY19ncGlvX3NldChjb2RlYywgc3BlYy0+Z3Bpb19tYXNrLCBzcGVjLT5ncGlvX2Rpciwgc3BlYy0+Z3Bpb19kYXRhKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWNfaHBfYmFzc19zd19jdHJsID0geworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5pbmZvID0gc3RhY19ocF9iYXNzX2dwaW9faW5mbywKKwkuZ2V0ID0gc3RhY19ocF9iYXNzX2dwaW9fZ2V0LAorCS5wdXQgPSBzdGFjX2hwX2Jhc3NfZ3Bpb19wdXQsCit9OworCitzdGF0aWMgaW50IHN0YWNfYWRkX2hwX2Jhc3Nfc3dpdGNoKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKwlpZiAoIXN0YWNfY29udHJvbF9uZXcoc3BlYywgJnN0YWNfaHBfYmFzc19zd19jdHJsLAorCQkJICAgICAgIkJhc3MgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAwKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGVjLT5ncGlvX21hc2sgfD0gMHgyMDsKKwlzcGVjLT5ncGlvX2RpciB8PSAweDIwOworCXNwZWMtPmdwaW9fZGF0YSB8PSAweDIwOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHBhdGNoX3N0YWM5MmhkNzFieHgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWM7CkBAIC01NjAyLDcgKzU2NzAsNiBAQAogCQkgKi8KIAkJc3BlYy0+bnVtX3NtdXhlcyA9IDE7CiAJCXNwZWMtPm51bV9kbXV4ZXMgPSAxOwotCQlzcGVjLT5ncGlvX2xlZCA9IDB4MDE7CiAJCS8qIGZhbGx0aHJvdWdoICovCiAJY2FzZSBTVEFDX0hQX0RWNToKIAkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBkLCAweDkwMTcwMDEwKTsKQEAgLTU2MTcsOCArNTY4NCw2IEBACiAJCXNwZWMtPm51bV9kbWljcyA9IDE7CiAJCXNwZWMtPm51bV9kbXV4ZXMgPSAxOwogCQlzcGVjLT5udW1fc211eGVzID0gMTsKLQkJLyogb3JhbmdlL3doaXRlIG11dGUgbGVkIG9uIEdQSU8zLCBvcmFuZ2U9MCwgd2hpdGU9MSAqLwotCQlzcGVjLT5ncGlvX2xlZCA9IDB4MDg7CiAJCWJyZWFrOwogCX0KIApAQCAtNTY0MCw3ICs1NzA1LDcgQEAKIAkJfQogCX0KIAotCWlmIChmaW5kX211dGVfbGVkX2dwaW8oY29kZWMpKQorCWlmIChmaW5kX211dGVfbGVkX2dwaW8oY29kZWMsIDEpKQogCQlzbmRfcHJpbnRkKCJtdXRlIExFRCBncGlvICVkIHBvbGFyaXR5ICVkXG4iLAogCQkJCXNwZWMtPmdwaW9fbGVkLAogCQkJCXNwZWMtPmdwaW9fbGVkX3BvbGFyaXR5KTsKQEAgLTU2NzQsNiArNTczOSwxNSBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAorCS8qIGVuYWJsZSBiYXNzIG9uIEhQIGR2NyAqLworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPT0gU1RBQ19IUF9EVjUpIHsKKwkJdW5zaWduZWQgaW50IGNhcDsKKwkJY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCAweDEsIEFDX1BBUl9HUElPX0NBUCk7CisJCWNhcCAmPSBBQ19HUElPX0lPX0NPVU5UOworCQlpZiAoY2FwID49IDYpCisJCQlzdGFjX2FkZF9ocF9iYXNzX3N3aXRjaChjb2RlYyk7CisJfQorCiAJY29kZWMtPnByb2Nfd2lkZ2V0X2hvb2sgPSBzdGFjOTJoZDd4X3Byb2NfaG9vazsKIAogCXJldHVybiAwOwpAQCAtNjE3Miw4ICs2MjQ2LDEzIEBACiAgCXsgLmlkID0gMHg4Mzg0NzZhNywgLm5hbWUgPSAiU1RBQzkyNTREIiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyMDUgfSwKIAl7IC5pZCA9IDB4MTExZDc2MDMsIC5uYW1lID0gIjkySEQ3NUIzWDUiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDcxYnh4fSwKIAl7IC5pZCA9IDB4MTExZDc2MDQsIC5uYW1lID0gIjkySEQ4M0MxWDUiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDgzeHh4fSwKKwl7IC5pZCA9IDB4MTExZDc2ZDQsIC5uYW1lID0gIjkySEQ4M0MxQzUiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDgzeHh4fSwKIAl7IC5pZCA9IDB4MTExZDc2MDUsIC5uYW1lID0gIjkySEQ4MUIxWDUiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDgzeHh4fSwKIAl7IC5pZCA9IDB4MTExZDc2ZDUsIC5uYW1lID0gIjkySEQ4MUIxQzUiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDgzeHh4fSwKKwl7IC5pZCA9IDB4MTExZDc2NjYsIC5uYW1lID0gIjkySEQ4OEIzIiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ4M3h4eH0sCisJeyAuaWQgPSAweDExMWQ3NjY3LCAubmFtZSA9ICI5MkhEODhCMSIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MmhkODN4eHh9LAorCXsgLmlkID0gMHgxMTFkNzY2OCwgLm5hbWUgPSAiOTJIRDg4QjIiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDgzeHh4fSwKKwl7IC5pZCA9IDB4MTExZDc2NjksIC5uYW1lID0gIjkySEQ4OEI0IiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ4M3h4eH0sCiAJeyAuaWQgPSAweDExMWQ3NjA4LCAubmFtZSA9ICI5MkhENzVCMlg1IiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ3MWJ4eH0sCiAJeyAuaWQgPSAweDExMWQ3Njc0LCAubmFtZSA9ICI5MkhENzNEMVg1IiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ3M3h4IH0sCiAJeyAuaWQgPSAweDExMWQ3Njc1LCAubmFtZSA9ICI5MkhENzNDMVg1IiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ3M3h4IH0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYwppbmRleCBiNzBlMjZhLi45ZGRjMzczIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKQEAgLTU0LDYgKzU0LDggQEAKICNpbmNsdWRlICJoZGFfY29kZWMuaCIKICNpbmNsdWRlICJoZGFfbG9jYWwuaCIKIAorI2RlZmluZSBOSURfTUFQUElORwkJKC0xKQorCiAvKiBhbXAgdmFsdWVzICovCiAjZGVmaW5lIEFNUF9WQUxfSURYX1NISUZUCTE5CiAjZGVmaW5lIEFNUF9WQUxfSURYX01BU0sJKDB4MGY8PDE5KQpAQCAtMTU3LDYgKzE1OSwxOSBAQAogI2VuZGlmCiB9OwogCitzdGF0aWMgc3RydWN0IHZpYV9zcGVjICogdmlhX25ld19zcGVjKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB2aWFfc3BlYyAqc3BlYzsKKworCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCWlmIChzcGVjID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJY29kZWMtPnNwZWMgPSBzcGVjOworCXNwZWMtPmNvZGVjID0gY29kZWM7CisJcmV0dXJuIHNwZWM7Cit9CisKIHN0YXRpYyBlbnVtIFZJQV9IREFfQ09ERUMgZ2V0X2NvZGVjX3R5cGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJdTMyIHZlbmRvcl9pZCA9IGNvZGVjLT52ZW5kb3JfaWQ7CkBAIC00NDMsMTEgKzQ1OCwyNyBAQAogCWlmICgha25ldy0+bmFtZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKGdldF9hbXBfbmlkXyh2YWwpKQotCQlrbmV3LT5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgZ2V0X2FtcF9uaWRfKHZhbCk7CisJCWtuZXctPnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUc7CiAJa25ldy0+cHJpdmF0ZV92YWx1ZSA9IHZhbDsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICp2aWFfY2xvbmVfY29udHJvbChzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMsCisJCQkJCQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqdG1wbCkKK3sKKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldzsKKworCXNuZF9hcnJheV9pbml0KCZzcGVjLT5rY3Rscywgc2l6ZW9mKCprbmV3KSwgMzIpOworCWtuZXcgPSBzbmRfYXJyYXlfbmV3KCZzcGVjLT5rY3Rscyk7CisJaWYgKCFrbmV3KQorCQlyZXR1cm4gTlVMTDsKKwkqa25ldyA9ICp0bXBsOworCWtuZXctPm5hbWUgPSBrc3RyZHVwKHRtcGwtPm5hbWUsIEdGUF9LRVJORUwpOworCWlmICgha25ldy0+bmFtZSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIHZpYV9mcmVlX2tjdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCB2aWFfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtMTA4OCwyNCArMTExOSw5IEBACiAJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQloZGFfbmlkX3QgbmlkOworCWhkYV9uaWRfdCBuaWQgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAl1bnNpZ25lZCBpbnQgcGluc2VsOwogCi0Jc3dpdGNoIChzcGVjLT5jb2RlY190eXBlKSB7Ci0JY2FzZSBWVDE3MThTOgotCQluaWQgPSAweDM0OwotCQlicmVhazsKLQljYXNlIFZUMjAwMlA6Ci0JCW5pZCA9IDB4MzU7Ci0JCWJyZWFrOwotCWNhc2UgVlQxODEyOgotCQluaWQgPSAweDNkOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQluaWQgPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF07Ci0JCWJyZWFrOwotCX0KIAkvKiB1c2UgISEgdG8gdHJhbnNsYXRlIGNvbm4gc2VsIDIgZm9yIFZUMTcxOFMgKi8KIAlwaW5zZWwgPSAhIXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAogCQkJCSAgICAgIEFDX1ZFUkJfR0VUX0NPTk5FQ1RfU0VMLApAQCAtMTEyNywyOSArMTE0MywyNCBAQAogCX0KIH0KIAorc3RhdGljIGhkYV9uaWRfdCBzaWRlX211dGVfY2hhbm5lbChzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMpCit7CisJc3dpdGNoIChzcGVjLT5jb2RlY190eXBlKSB7CisJY2FzZSBWVDE3MDg6CQlyZXR1cm4gMHgxYjsKKwljYXNlIFZUMTcwOV8xMENIOglyZXR1cm4gMHgyOTsKKwljYXNlIFZUMTcwOEJfOENIOgkvKiBmYWxsIHRocnUgKi8KKwljYXNlIFZUMTcwOFM6CQlyZXR1cm4gMHgyNzsKKwlkZWZhdWx0OgkJcmV0dXJuIDA7CisJfQorfQorCiBzdGF0aWMgaW50IHVwZGF0ZV9zaWRlX211dGVfc3RhdHVzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCS8qIG11dGUgc2lkZSBjaGFubmVsICovCiAJc3RydWN0IHZpYV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJdW5zaWduZWQgaW50IHBhcm0gPSBzcGVjLT5ocF9pbmRlcGVuZGVudF9tb2RlCiAJCT8gQU1QX09VVF9NVVRFIDogQU1QX09VVF9VTk1VVEU7Ci0JaGRhX25pZF90IHN3MzsKLQotCXN3aXRjaCAoc3BlYy0+Y29kZWNfdHlwZSkgewotCWNhc2UgVlQxNzA4OgotCQlzdzMgPSAweDFiOwotCQlicmVhazsKLQljYXNlIFZUMTcwOV8xMENIOgotCQlzdzMgPSAweDI5OwotCQlicmVhazsKLQljYXNlIFZUMTcwOEJfOENIOgotCWNhc2UgVlQxNzA4UzoKLQkJc3czID0gMHgyNzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJc3czID0gMDsKLQkJYnJlYWs7Ci0JfQorCWhkYV9uaWRfdCBzdzMgPSBzaWRlX211dGVfY2hhbm5lbChzcGVjKTsKIAogCWlmIChzdzMpCiAJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHN3MywgMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKQEAgLTExNjIsMjggKzExNzMsMTEgQEAKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOworCWhkYV9uaWRfdCBuaWQgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAl1bnNpZ25lZCBpbnQgcGluc2VsID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKIAkvKiBHZXQgSW5kZXBlbmRlbnQgTW9kZSBpbmRleCBvZiBoZWFkcGhvbmUgcGluIHdpZGdldCAqLwogCXNwZWMtPmhwX2luZGVwZW5kZW50X21vZGUgPSBzcGVjLT5ocF9pbmRlcGVuZGVudF9tb2RlX2luZGV4ID09IHBpbnNlbAogCQk/IDEgOiAwOwotCi0Jc3dpdGNoIChzcGVjLT5jb2RlY190eXBlKSB7Ci0JY2FzZSBWVDE3MThTOgotCQluaWQgPSAweDM0OwotCQlwaW5zZWwgPSBwaW5zZWwgPyAyIDogMDsgLyogaW5kZXAgSFAgdXNlIEFPVzQgKGluZGV4IDIpICovCi0JCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gNDsKLQkJYnJlYWs7Ci0JY2FzZSBWVDIwMDJQOgotCQluaWQgPSAweDM1OwotCQlicmVhazsKLQljYXNlIFZUMTgxMjoKLQkJbmlkID0gMHgzZDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbmlkID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOwotCQlicmVhazsKLQl9CiAJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgcGluc2VsKTsKIAogCWlmIChzcGVjLT5tdWx0aW91dC5ocF9uaWQgJiYgc3BlYy0+bXVsdGlvdXQuaHBfbmlkCkBAIC0xMjA3LDE4ICsxMjAxLDU1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2aWFfaHBfbWl4ZXJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2aWFfaHBfbWl4ZXJbMl0gPSB7CiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiSW5kZXBlbmRlbnQgSFAiLAotCQkuY291bnQgPSAxLAogCQkuaW5mbyA9IHZpYV9pbmRlcGVuZGVudF9ocF9pbmZvLAogCQkuZ2V0ID0gdmlhX2luZGVwZW5kZW50X2hwX2dldCwKIAkJLnB1dCA9IHZpYV9pbmRlcGVuZGVudF9ocF9wdXQsCiAJfSwKLQl7IH0gLyogZW5kICovCisJeworCQkuaWZhY2UgPSBOSURfTUFQUElORywKKwkJLm5hbWUgPSAiSW5kZXBlbmRlbnQgSFAiLAorCX0sCiB9OwogCitzdGF0aWMgaW50IHZpYV9ocF9idWlsZChzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMpCit7CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CisJaGRhX25pZF90IG5pZDsKKworCWtuZXcgPSB2aWFfY2xvbmVfY29udHJvbChzcGVjLCAmdmlhX2hwX21peGVyWzBdKTsKKwlpZiAoa25ldyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN3aXRjaCAoc3BlYy0+Y29kZWNfdHlwZSkgeworCWNhc2UgVlQxNzE4UzoKKwkJbmlkID0gMHgzNDsKKwkJYnJlYWs7CisJY2FzZSBWVDIwMDJQOgorCQluaWQgPSAweDM1OworCQlicmVhazsKKwljYXNlIFZUMTgxMjoKKwkJbmlkID0gMHgzZDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbmlkID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOworCQlicmVhazsKKwl9CisKKwlrbmV3LT5zdWJkZXZpY2UgPSBIREFfU1VCREVWX05JRF9GTEFHIHwgbmlkOworCWtuZXctPnByaXZhdGVfdmFsdWUgPSBuaWQ7CisKKwlrbmV3ID0gdmlhX2Nsb25lX2NvbnRyb2woc3BlYywgJnZpYV9ocF9taXhlclsxXSk7CisJaWYgKGtuZXcgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJa25ldy0+c3ViZGV2aWNlID0gc2lkZV9tdXRlX2NoYW5uZWwoc3BlYyk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgbm90aWZ5X2FhX3BhdGhfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlpbnQgaTsKQEAgLTEzNzYsNyArMTQwNyw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2aWFfc21hcnQ1MV9taXhlcltdID0geworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHZpYV9zbWFydDUxX21peGVyWzJdID0gewogCXsKIAkgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJIC5uYW1lID0gIlNtYXJ0IDUuMSIsCkBAIC0xMzg1LDkgKzE0MTYsMzYgQEAKIAkgLmdldCA9IHZpYV9zbWFydDUxX2dldCwKIAkgLnB1dCA9IHZpYV9zbWFydDUxX3B1dCwKIAkgfSwKLQl7fQkJCS8qIGVuZCAqLworCXsKKwkgLmlmYWNlID0gTklEX01BUFBJTkcsCisJIC5uYW1lID0gIlNtYXJ0IDUuMSIsCisJfQogfTsKIAorc3RhdGljIGludCB2aWFfc21hcnQ1MV9idWlsZChzdHJ1Y3QgdmlhX3NwZWMgKnNwZWMpCit7CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmtuZXc7CisJaW50IGluZGV4W10gPSB7IEFVVE9fUElOX01JQywgQVVUT19QSU5fRlJPTlRfTUlDLCBBVVRPX1BJTl9MSU5FIH07CisJaGRhX25pZF90IG5pZDsKKwlpbnQgaTsKKworCWtuZXcgPSB2aWFfY2xvbmVfY29udHJvbChzcGVjLCAmdmlhX3NtYXJ0NTFfbWl4ZXJbMF0pOworCWlmIChrbmV3ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5kZXgpOyBpKyspIHsKKwkJbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2luZGV4W2ldXTsKKwkJaWYgKG5pZCkgeworCQkJa25ldyA9IHZpYV9jbG9uZV9jb250cm9sKHNwZWMsICZ2aWFfc21hcnQ1MV9taXhlclsxXSk7CisJCQlpZiAoa25ldyA9PSBOVUxMKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJa25ldy0+c3ViZGV2aWNlID0gbmlkOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qIGNhcHR1cmUgbWl4ZXIgZWxlbWVudHMgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB2dDE3MDhfY2FwdHVyZV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLApAQCAtMTgxOSw4ICsxODc3LDkgQEAKIHN0YXRpYyBpbnQgdmlhX2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCB2aWFfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBlcnI7Ci0JaW50IGk7CisJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldzsKKwlpbnQgZXJyLCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9taXhlcnM7IGkrKykgewogCQllcnIgPSBzbmRfaGRhX2FkZF9uZXdfY3Rscyhjb2RlYywgc3BlYy0+bWl4ZXJzW2ldKTsKQEAgLTE4NDUsNiArMTkwNCwyNyBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKKwkvKiBhc3NpZ24gQ2FwdHVyZSBTb3VyY2UgZW51bXMgdG8gTklEICovCisJa2N0bCA9IHNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJJbnB1dCBTb3VyY2UiKTsKKwlmb3IgKGkgPSAwOyBrY3RsICYmIGkgPCBrY3RsLT5jb3VudDsgaSsrKSB7CisJCWVyciA9IHNuZF9oZGFfYWRkX25pZChjb2RlYywga2N0bCwgaSwgc3BlYy0+bXV4X25pZHNbaV0pOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCisJLyogb3RoZXIgbmlkLT5jb250cm9sIG1hcHBpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX21peGVyczsgaSsrKSB7CisJCWZvciAoa25ldyA9IHNwZWMtPm1peGVyc1tpXTsga25ldy0+bmFtZTsga25ldysrKSB7CisJCQlpZiAoa25ldy0+aWZhY2UgIT0gTklEX01BUFBJTkcpCisJCQkJY29udGludWU7CisJCQlrY3RsID0gc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywga25ldy0+bmFtZSk7CisJCQlpZiAoa2N0bCA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOworCQkJZXJyID0gc25kX2hkYV9hZGRfbmlkKGNvZGVjLCBrY3RsLCAwLAorCQkJCQkgICAgICBrbmV3LT5zdWJkZXZpY2UpOworCQl9CisJfQorCiAJLyogaW5pdCBwb3dlciBzdGF0ZXMgKi8KIAlzZXRfamFja19wb3dlcl9zdGF0ZShjb2RlYyk7CiAJYW5hbG9nX2xvd19jdXJyZW50X21vZGUoY29kZWMsIDEpOwpAQCAtMjQ4MSw5ICsyNTYxLDkgQEAKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJaWYgKHNwZWMtPmhwX211eCkKLQkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSB2aWFfaHBfbWl4ZXI7CisJCXZpYV9ocF9idWlsZChzcGVjKTsKIAotCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX3NtYXJ0NTFfbWl4ZXI7CisJdmlhX3NtYXJ0NTFfYnVpbGQoc3BlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTI1NTQsMTIgKzI2MzQsMTAgQEAKIAlpbnQgZXJyOwogCiAJLyogY3JlYXRlIGEgY29kZWMgc3BlY2lmaWMgcmVjb3JkICovCi0Jc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IHZpYV9uZXdfc3BlYyhjb2RlYyk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljb2RlYy0+c3BlYyA9IHNwZWM7Ci0KIAkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KIAllcnIgPSB2dDE3MDhfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CkBAIC0yNTk3LDcgKzI2NzUsNiBAQAogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAlzcGVjLT5sb29wYmFjay5hbXBsaXN0ID0gdnQxNzA4X2xvb3BiYWNrczsKICNlbmRpZgotCXNwZWMtPmNvZGVjID0gY29kZWM7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnNwZWMtPnZ0MTcwOF9ocF93b3JrLCB2dDE3MDhfdXBkYXRlX2hwX2phY2tfc3RhdGUpOwogCXJldHVybiAwOwogfQpAQCAtMzAxMCw5ICszMDg3LDkgQEAKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJaWYgKHNwZWMtPmhwX211eCkKLQkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSB2aWFfaHBfbWl4ZXI7CisJCXZpYV9ocF9idWlsZChzcGVjKTsKIAotCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX3NtYXJ0NTFfbWl4ZXI7CisJdmlhX3NtYXJ0NTFfYnVpbGQoc3BlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTMwMzIsMTIgKzMxMDksMTAgQEAKIAlpbnQgZXJyOwogCiAJLyogY3JlYXRlIGEgY29kZWMgc3BlY2lmaWMgcmVjb3JkICovCi0Jc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IHZpYV9uZXdfc3BlYyhjb2RlYyk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljb2RlYy0+c3BlYyA9IHNwZWM7Ci0KIAllcnIgPSB2dDE3MDlfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CiAJCXZpYV9mcmVlKGNvZGVjKTsKQEAgLTMxMjYsMTIgKzMyMDEsMTAgQEAKIAlpbnQgZXJyOwogCiAJLyogY3JlYXRlIGEgY29kZWMgc3BlY2lmaWMgcmVjb3JkICovCi0Jc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IHZpYV9uZXdfc3BlYyhjb2RlYyk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljb2RlYy0+c3BlYyA9IHNwZWM7Ci0KIAllcnIgPSB2dDE3MDlfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CiAJCXZpYV9mcmVlKGNvZGVjKTsKQEAgLTM1ODEsOSArMzY1NCw5IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWlmIChzcGVjLT5ocF9tdXgpCi0JCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX2hwX21peGVyOworCQl2aWFfaHBfYnVpbGQoc3BlYyk7CiAKLQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9zbWFydDUxX21peGVyOworCXZpYV9zbWFydDUxX2J1aWxkKHNwZWMpOwogCXJldHVybiAxOwogfQogCkBAIC0zNjA1LDEyICszNjc4LDEwIEBACiAJaWYgKGdldF9jb2RlY190eXBlKGNvZGVjKSA9PSBWVDE3MDhCQ0UpCiAJCXJldHVybiBwYXRjaF92dDE3MDhTKGNvZGVjKTsKIAkvKiBjcmVhdGUgYSBjb2RlYyBzcGVjaWZpYyByZWNvcmQgKi8KLQlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzcGVjID0gdmlhX25ld19zcGVjKGNvZGVjKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNvZGVjLT5zcGVjID0gc3BlYzsKLQogCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwogCWVyciA9IHZ0MTcwOEJfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CkBAIC0zNjU3LDEyICszNzI4LDEwIEBACiAJaW50IGVycjsKIAogCS8qIGNyZWF0ZSBhIGNvZGVjIHNwZWNpZmljIHJlY29yZCAqLwotCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSB2aWFfbmV3X3NwZWMoY29kZWMpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMtPnNwZWMgPSBzcGVjOwotCiAJLyogYXV0b21hdGljIHBhcnNlIGZyb20gdGhlIEJJT1MgY29uZmlnICovCiAJZXJyID0gdnQxNzA4Ql9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CiAJaWYgKGVyciA8IDApIHsKQEAgLTQwNzEsOSArNDE0MCw5IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWlmIChzcGVjLT5ocF9tdXgpCi0JCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX2hwX21peGVyOworCQl2aWFfaHBfYnVpbGQoc3BlYyk7CiAKLQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9zbWFydDUxX21peGVyOworCXZpYV9zbWFydDUxX2J1aWxkKHNwZWMpOwogCXJldHVybiAxOwogfQogCkBAIC00MTAzLDEyICs0MTcyLDEwIEBACiAJaW50IGVycjsKIAogCS8qIGNyZWF0ZSBhIGNvZGVjIHNwZWNpZmljIHJlY29yZCAqLwotCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSB2aWFfbmV3X3NwZWMoY29kZWMpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMtPnNwZWMgPSBzcGVjOwotCiAJLyogYXV0b21hdGljIHBhcnNlIGZyb20gdGhlIEJJT1MgY29uZmlnICovCiAJZXJyID0gdnQxNzA4U19wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CiAJaWYgKGVyciA8IDApIHsKQEAgLTQ0NDMsNyArNDUxMCw3IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWlmIChzcGVjLT5ocF9tdXgpCi0JCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX2hwX21peGVyOworCQl2aWFfaHBfYnVpbGQoc3BlYyk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTQ0NjQsMTIgKzQ1MzEsMTAgQEAKIAlpbnQgZXJyOwogCiAJLyogY3JlYXRlIGEgY29kZWMgc3BlY2lmaWMgcmVjb3JkICovCi0Jc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IHZpYV9uZXdfc3BlYyhjb2RlYyk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljb2RlYy0+c3BlYyA9IHNwZWM7Ci0KIAkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KIAllcnIgPSB2dDE3MDJfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CkBAIC00ODY1LDkgKzQ5MzAsOSBAQAogCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAKIAlpZiAoc3BlYy0+aHBfbXV4KQotCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9ocF9taXhlcjsKKwkJdmlhX2hwX2J1aWxkKHNwZWMpOwogCi0Jc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSB2aWFfc21hcnQ1MV9taXhlcjsKKwl2aWFfc21hcnQ1MV9idWlsZChzcGVjKTsKIAogCXJldHVybiAxOwogfQpAQCAtNDg4OCwxMiArNDk1MywxMCBAQAogCWludCBlcnI7CiAKIAkvKiBjcmVhdGUgYSBjb2RlYyBzcGVjaWZpYyByZWNvcmQgKi8KLQlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzcGVjID0gdmlhX25ld19zcGVjKGNvZGVjKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNvZGVjLT5zcGVjID0gc3BlYzsKLQogCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwogCWVyciA9IHZ0MTcxOFNfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCWlmIChlcnIgPCAwKSB7CkBAIC01MDE0LDYgKzUwNzcsNyBAQAogCXsKIAkgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJIC5uYW1lID0gIkRpZ2l0YWwgTWljIENhcHR1cmUgU3dpdGNoIiwKKwkgLnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCAweDI2LAogCSAuY291bnQgPSAxLAogCSAuaW5mbyA9IHZ0MTcxNnNfZG1pY19pbmZvLAogCSAuZ2V0ID0gdnQxNzE2c19kbWljX2dldCwKQEAgLTUzNjEsOSArNTQyNSw5IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWlmIChzcGVjLT5ocF9tdXgpCi0JCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX2hwX21peGVyOworCQl2aWFfaHBfYnVpbGQoc3BlYyk7CiAKLQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IHZpYV9zbWFydDUxX21peGVyOworCXZpYV9zbWFydDUxX2J1aWxkKHNwZWMpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC01Mzg0LDEyICs1NDQ4LDEwIEBACiAJaW50IGVycjsKIAogCS8qIGNyZWF0ZSBhIGNvZGVjIHNwZWNpZmljIHJlY29yZCAqLwotCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOworCXNwZWMgPSB2aWFfbmV3X3NwZWMoY29kZWMpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY29kZWMtPnNwZWMgPSBzcGVjOwotCiAJLyogYXV0b21hdGljIHBhcnNlIGZyb20gdGhlIEJJT1MgY29uZmlnICovCiAJZXJyID0gdnQxNzE2U19wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CiAJaWYgKGVyciA8IDApIHsKQEAgLTU3MTksNyArNTc4MSw3IEBACiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWlmIChzcGVjLT5ocF9tdXgpCi0JCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gdmlhX2hwX21peGVyOworCQl2aWFfaHBfYnVpbGQoc3BlYyk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTU3NDEsMTIgKzU4MDMsMTAgQEAKIAlpbnQgZXJyOwogCiAJLyogY3JlYXRlIGEgY29kZWMgc3BlY2lmaWMgcmVjb3JkICovCi0Jc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJc3BlYyA9IHZpYV9uZXdfc3BlYyhjb2RlYyk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljb2RlYy0+c3BlYyA9IHNwZWM7Ci0KIAkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KIAllcnIgPSB2dDIwMDJQX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkgewpAQCAtNjA3MCw3ICs2MTMwLDcgQEAKIAlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJaWYgKHNwZWMtPmhwX211eCkKLQkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSB2aWFfaHBfbWl4ZXI7CisJCXZpYV9ocF9idWlsZChzcGVjKTsKIAogCXJldHVybiAxOwogfQpAQCAtNjA5MiwxMiArNjE1MiwxMCBAQAogCWludCBlcnI7CiAKIAkvKiBjcmVhdGUgYSBjb2RlYyBzcGVjaWZpYyByZWNvcmQgKi8KLQlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlzcGVjID0gdmlhX25ld19zcGVjKGNvZGVjKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWNvZGVjLT5zcGVjID0gc3BlYzsKLQogCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwogCWVyciA9IHZ0MTgxMl9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwppbmRleCBjN2NmZjZmLi40ZmM2ZDhiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZHhyX2VuYWJsZSwgIkVuYWJsZSBEWFIgc3VwcG9ydCBmb3IgVGVycmF0ZWMgRE1YNkZJUkUuIik7CiAKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9pY2UxNzEyX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9pY2UxNzEyX2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShJQ0UsIFBDSV9ERVZJQ0VfSURfSUNFXzE3MTIpLCAwIH0sICAgLyogSUNFMTcxMiAqLwogCXsgMCwgfQogfTsKQEAgLTExODAsNiArMTE4MCwxMCBAQAogCXNuZF9wY21fc2V0X3N5bmMoc3Vic3RyZWFtKTsKIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbXNiaXRzKHJ1bnRpbWUsIDAsIDMyLCAyNCk7CiAJc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsICZod19jb25zdHJhaW50c19yYXRlcyk7CisJaWYgKGlzX3Byb19yYXRlX2xvY2tlZChpY2UpKSB7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWluID0gUFJPX1JBVEVfREVGQVVMVDsKKwkJcnVudGltZS0+aHcucmF0ZV9tYXggPSBQUk9fUkFURV9ERUZBVUxUOworCX0KIAogCWlmIChpY2UtPnNwZGlmLm9wcy5vcGVuKQogCQlpY2UtPnNwZGlmLm9wcy5vcGVuKGljZSwgc3Vic3RyZWFtKTsKQEAgLTExOTcsNiArMTIwMSwxMSBAQAogCXNuZF9wY21fc2V0X3N5bmMoc3Vic3RyZWFtKTsKIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbXNiaXRzKHJ1bnRpbWUsIDAsIDMyLCAyNCk7CiAJc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsICZod19jb25zdHJhaW50c19yYXRlcyk7CisJaWYgKGlzX3Byb19yYXRlX2xvY2tlZChpY2UpKSB7CisJCXJ1bnRpbWUtPmh3LnJhdGVfbWluID0gUFJPX1JBVEVfREVGQVVMVDsKKwkJcnVudGltZS0+aHcucmF0ZV9tYXggPSBQUk9fUkFURV9ERUZBVUxUOworCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKaW5kZXggYWUyOTA3My4uYzE0OThmYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwpAQCAtOTQsNyArOTQsNyBAQAogCiAKIC8qIEJvdGggVlQxNzIwIGFuZCBWVDE3MjQgaGF2ZSB0aGUgc2FtZSBQQ0kgSURzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3Z0MTcyNF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfdnQxNzI0X2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShJQ0UsIFBDSV9ERVZJQ0VfSURfVlQxNzI0KSwgMCB9LAogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jIGIvc291bmQvcGNpL2ludGVsOHgwLmMKaW5kZXggYjk5MDE0My4uNjQzM2U2NSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ludGVsOHgwLmMKKysrIGIvc291bmQvcGNpL2ludGVsOHgwLmMKQEAgLTQyMCw3ICs0MjAsNyBAQAogCXUzMiBpbnRfc3RhX21hc2s7CQkvKiBpbnRlcnJ1cHQgc3RhdHVzIG1hc2sgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfaW50ZWw4eDBfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2ludGVsOHgwX2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyNDE1KSwgREVWSUNFX0lOVEVMIH0sCS8qIDgyODAxQUEgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI0MjUpLCBERVZJQ0VfSU5URUwgfSwJLyogODI5MDFBQiAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjQ0NSksIERFVklDRV9JTlRFTCB9LAkvKiA4MjgwMUJBICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaW50ZWw4eDBtLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKaW5kZXggOWU3ZDEyZS4uMTNjZWMxZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ludGVsOHgwbS5jCisrKyBiL3NvdW5kL3BjaS9pbnRlbDh4MG0uYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJdW5zaWduZWQgaW50IHBjbV9wb3Nfc2hpZnQ7CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2ludGVsOHgwbV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfaW50ZWw4eDBtX2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyNDE2KSwgREVWSUNFX0lOVEVMIH0sCS8qIDgyODAxQUEgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDI0MjYpLCBERVZJQ0VfSU5URUwgfSwJLyogODI5MDFBQiAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjQ0NiksIERFVklDRV9JTlRFTCB9LAkvKiA4MjgwMUJBICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCmluZGV4IDdjYzM4YTEuLjZkNzk1NzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCisrKyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCkBAIC00MTgsNyArNDE4LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiRW5hYmxlIEtvcmcgMTIxMiBzb3VuZGNhcmQuIik7CiBNT0RVTEVfQVVUSE9SKCJIYXJvbGRvIEdhbWFsIDxnYW1hbEBhbHRlcm5leC5jb20uYnI+Iik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfa29yZzEyMTJfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2tvcmcxMjEyX2lkcykgPSB7CiAJewogCQkudmVuZG9yCSAgID0gMHgxMGI1LAogCQkuZGV2aWNlCSAgID0gMHg5MDZkLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2x4NjQ2NGVzL2x4NjQ2NGVzLmMgYi9zb3VuZC9wY2kvbHg2NDY0ZXMvbHg2NDY0ZXMuYwppbmRleCAxMWI4YzY1Li4wY2NhNTYwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbHg2NDY0ZXMvbHg2NDY0ZXMuYworKysgYi9zb3VuZC9wY2kvbHg2NDY0ZXMvbHg2NDY0ZXMuYwpAQCAtNTUsNyArNTUsNyBAQAogCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX0xYNjQ2NEVTCQlQQ0lfREVWSUNFX0lEX1BMWF85MDU2CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbHg2NDY0ZXNfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2x4NjQ2NGVzX2lkcykgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUExYLCBQQ0lfREVWSUNFX0lEX1BMWF9MWDY0NjRFUyksCiAJICAuc3VidmVuZG9yID0gUENJX1ZFTkRPUl9JRF9ESUdJR1JBTSwKIAkgIC5zdWJkZXZpY2UgPSBQQ0lfU1VCREVWSUNFX0lEX0RJR0lHUkFNX0xYNjQ2NEVTX1NFUklBTF9TVUJTWVNURU0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9tYWVzdHJvMy5jIGIvc291bmQvcGNpL21hZXN0cm8zLmMKaW5kZXggNzUyODNmYmIuLmI2NGU3ODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9tYWVzdHJvMy5jCisrKyBiL3NvdW5kL3BjaS9tYWVzdHJvMy5jCkBAIC04NjEsNyArODYxLDcgQEAKIC8qCiAgKiBwY2kgaWRzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbTNfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX20zX2lkcykgPSB7CiAJe1BDSV9WRU5ET1JfSURfRVNTLCBQQ0lfREVWSUNFX0lEX0VTU19BTExFR1JPXzEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCiAJIFBDSV9DTEFTU19NVUxUSU1FRElBX0FVRElPIDw8IDgsIDB4ZmZmZjAwLCAwfSwKIAl7UENJX1ZFTkRPUl9JRF9FU1MsIFBDSV9ERVZJQ0VfSURfRVNTX0FMTEVHUk8sIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jIGIvc291bmQvcGNpL21peGFydC9taXhhcnQuYwppbmRleCBhODNkMTk2Li43ZThlN2RhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCisrKyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKQEAgLTYwLDcgKzYwLDcgQEAKIC8qCiAgKi8KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9taXhhcnRfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX21peGFydF9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoTU9UT1JPTEEsIDB4MDAwMyksIDAsIH0sIC8qIE1DODI0MCAqLwogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jIGIvc291bmQvcGNpL25tMjU2L25tMjU2LmMKaW5kZXggOTdhMDczMS4uNWE2MDQ5MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL25tMjU2L25tMjU2LmMKKysrIGIvc291bmQvcGNpL25tMjU2L25tMjU2LmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogLyoKICAqIFBDSSBpZHMKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9ubTI1Nl9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfbm0yNTZfaWRzKSA9IHsKIAl7UENJX1ZERVZJQ0UoTkVPTUFHSUMsIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTk0yNTZBVl9BVURJTyksIDB9LAogCXtQQ0lfVkRFVklDRShORU9NQUdJQywgUENJX0RFVklDRV9JRF9ORU9NQUdJQ19OTTI1NlpYX0FVRElPKSwgMH0sCiAJe1BDSV9WREVWSUNFKE5FT01BR0lDLCBQQ0lfREVWSUNFX0lEX05FT01BR0lDX05NMjU2WExfUExVU19BVURJTyksIDB9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9NYWtlZmlsZSBiL3NvdW5kL3BjaS9veHlnZW4vTWFrZWZpbGUKaW5kZXggMzg5OTQxYy4uYWNkOGYxNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9NYWtlZmlsZQorKysgYi9zb3VuZC9wY2kvb3h5Z2VuL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogc25kLWhpZmllci1vYmpzIDo9IGhpZmllci5vCiBzbmQtb3h5Z2VuLW9ianMgOj0gb3h5Z2VuLm8KIHNuZC12aXJ0dW9zby1vYmpzIDo9IHZpcnR1b3NvLm8geG9uYXJfbGliLm8gXAotCXhvbmFyX3BjbTE3OXgubyB4b25hcl9jczQzeHgubyB4b25hcl9oZG1pLm8KKwl4b25hcl9wY20xNzl4Lm8geG9uYXJfY3M0M3h4Lm8geG9uYXJfd204N3g2Lm8geG9uYXJfaGRtaS5vCiAKIG9iai0kKENPTkZJR19TTkRfT1hZR0VOX0xJQikgKz0gc25kLW94eWdlbi1saWIubwogb2JqLSQoQ09ORklHX1NORF9ISUZJRVIpICs9IHNuZC1oaWZpZXIubwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYyBiL3NvdW5kL3BjaS9veHlnZW4vaGlmaWVyLmMKaW5kZXggZTNjMjI5Yi4uNWE4N2Q2OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL2hpZmllci5jCkBAIC00OCw3ICs0OCw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiZW5hYmxlIGNhcmQiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhpZmllcl9pZHNbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGhpZmllcl9pZHMpID0gewogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDE0YzMsIDB4MTcxMCkgfSwKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxNGMzLCAweDE3MTEpIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEX0JST0tFTl9FRVBST00gfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5jCmluZGV4IGFjYmVkZWIuLjI4OWNiNGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uYwpAQCAtNzIsNyArNzIsNyBAQAogCU1PREVMX0NMQVJPX0hBTE8sCS8qIEhULU9tZWdhIENsYXJvIGhhbG8gKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBveHlnZW5faWRzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShveHlnZW5faWRzKSA9IHsKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMGIwLCAweDAyMTYpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTUVESUFfUkVGIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTBiMCwgMHgwMjE4KSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ01FRElBX1JFRiB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwYjAsIDB4MDIxOSksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NNRURJQV9SRUYgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vdmlydHVvc28uYyBiL3NvdW5kL3BjaS9veHlnZW4vdmlydHVvc28uYwppbmRleCA2YWNjYWY5Li5mMDNhMmYyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL3ZpcnR1b3NvLmMKKysrIGIvc291bmQvcGNpL294eWdlbi92aXJ0dW9zby5jCkBAIC00MCw3ICs0MCw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiZW5hYmxlIGNhcmQiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHhvbmFyX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoeG9uYXJfaWRzKSA9IHsKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMDQzLCAweDgyNjkpIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTA0MywgMHg4Mjc1KSB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODJiNykgfSwKQEAgLTQ5LDYgKzQ5LDcgQEAKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMDQzLCAweDgzNGYpIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTA0MywgMHg4MzVjKSB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODM1ZCkgfSwKKwl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMDQzLCAweDgzOGUpIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEX0JST0tFTl9FRVBST00gfSwKIAl7IH0KIH07CkBAIC02MSw2ICs2Miw4IEBACiAJCXJldHVybiAwOwogCWlmIChnZXRfeG9uYXJfY3M0M3h4X21vZGVsKGNoaXAsIGlkKSA+PSAwKQogCQlyZXR1cm4gMDsKKwlpZiAoZ2V0X3hvbmFyX3dtODd4Nl9tb2RlbChjaGlwLCBpZCkgPj0gMCkKKwkJcmV0dXJuIDA7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vd204NzY2LmggYi9zb3VuZC9wY2kvb3h5Z2VuL3dtODc2Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZTg0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvb3h5Z2VuL3dtODc2Ni5oCkBAIC0wLDAgKzEsNzMgQEAKKyNpZm5kZWYgV004NzY2X0hfSU5DTFVERUQKKyNkZWZpbmUgV004NzY2X0hfSU5DTFVERUQKKworI2RlZmluZSBXTTg3NjZfTERBMQkJMHgwMAorI2RlZmluZSBXTTg3NjZfUkRBMQkJMHgwMQorI2RlZmluZSBXTTg3NjZfREFDX0NUUkwJCTB4MDIKKyNkZWZpbmUgV004NzY2X0lOVF9DVFJMCQkweDAzCisjZGVmaW5lIFdNODc2Nl9MREEyCQkweDA0CisjZGVmaW5lIFdNODc2Nl9SREEyCQkweDA1CisjZGVmaW5lIFdNODc2Nl9MREEzCQkweDA2CisjZGVmaW5lIFdNODc2Nl9SREEzCQkweDA3CisjZGVmaW5lIFdNODc2Nl9NQVNUREEJCTB4MDgKKyNkZWZpbmUgV004NzY2X0RBQ19DVFJMMgkweDA5CisjZGVmaW5lIFdNODc2Nl9EQUNfQ1RSTDMJMHgwYQorI2RlZmluZSBXTTg3NjZfTVVURTEJCTB4MGMKKyNkZWZpbmUgV004NzY2X01VVEUyCQkweDBmCisjZGVmaW5lIFdNODc2Nl9SRVNFVAkJMHgxZgorCisvKiBMREF4L1JEQXgvTUFTVERBICovCisjZGVmaW5lIFdNODc2Nl9BVFRfTUFTSwkJMHgwZmYKKyNkZWZpbmUgV004NzY2X1VQREFURQkJMHgxMDAKKy8qIERBQ19DVFJMICovCisjZGVmaW5lIFdNODc2Nl9NVVRFQUxMCQkweDAwMQorI2RlZmluZSBXTTg3NjZfREVFTVBBTEwJCTB4MDAyCisjZGVmaW5lIFdNODc2Nl9QV0ROCQkweDAwNAorI2RlZmluZSBXTTg3NjZfQVRDCQkweDAwOAorI2RlZmluZSBXTTg3NjZfSVpECQkweDAxMAorI2RlZmluZSBXTTg3NjZfUExfTEVGVF9NQVNLCTB4MDYwCisjZGVmaW5lIFdNODc2Nl9QTF9MRUZUX01VVEUJMHgwMDAKKyNkZWZpbmUgV004NzY2X1BMX0xFRlRfTEVGVAkweDAyMAorI2RlZmluZSBXTTg3NjZfUExfTEVGVF9SSUdIVAkweDA0MAorI2RlZmluZSBXTTg3NjZfUExfTEVGVF9MUk1JWAkweDA2MAorI2RlZmluZSBXTTg3NjZfUExfUklHSFRfTUFTSwkweDE4MAorI2RlZmluZSBXTTg3NjZfUExfUklHSFRfTVVURQkweDAwMAorI2RlZmluZSBXTTg3NjZfUExfUklHSFRfTEVGVAkweDA4MAorI2RlZmluZSBXTTg3NjZfUExfUklHSFRfUklHSFQJMHgxMDAKKyNkZWZpbmUgV004NzY2X1BMX1JJR0hUX0xSTUlYCTB4MTgwCisvKiBJTlRfQ1RSTCAqLworI2RlZmluZSBXTTg3NjZfRk1UX01BU0sJCTB4MDAzCisjZGVmaW5lIFdNODc2Nl9GTVRfUkpVU1QJMHgwMDAKKyNkZWZpbmUgV004NzY2X0ZNVF9MSlVTVAkweDAwMQorI2RlZmluZSBXTTg3NjZfRk1UX0kyUwkJMHgwMDIKKyNkZWZpbmUgV004NzY2X0ZNVF9EU1AJCTB4MDAzCisjZGVmaW5lIFdNODc2Nl9MUlAJCTB4MDA0CisjZGVmaW5lIFdNODc2Nl9CQ1AJCTB4MDA4CisjZGVmaW5lIFdNODc2Nl9JV0xfTUFTSwkJMHgwMzAKKyNkZWZpbmUgV004NzY2X0lXTF8xNgkJMHgwMDAKKyNkZWZpbmUgV004NzY2X0lXTF8yMAkJMHgwMTAKKyNkZWZpbmUgV004NzY2X0lXTF8yNAkJMHgwMjAKKyNkZWZpbmUgV004NzY2X0lXTF8zMgkJMHgwMzAKKyNkZWZpbmUgV004NzY2X1BIQVNFX01BU0sJMHgxYzAKKy8qIERBQ19DVFJMMiAqLworI2RlZmluZSBXTTg3NjZfWkNECQkweDAwMQorI2RlZmluZSBXTTg3NjZfRFpGTV9NQVNLCTB4MDA2CisjZGVmaW5lIFdNODc2Nl9ETVVURV9NQVNLCTB4MDM4CisjZGVmaW5lIFdNODc2Nl9ERUVNUF9NQVNLCTB4MWMwCisvKiBEQUNfQ1RSTDMgKi8KKyNkZWZpbmUgV004NzY2X0RBQ1BEX01BU0sJMHgwMGUKKyNkZWZpbmUgV004NzY2X1BXUkROQUxMCQkweDAxMAorI2RlZmluZSBXTTg3NjZfTVMJCTB4MDIwCisjZGVmaW5lIFdNODc2Nl9SQVRFX01BU0sJMHgxYzAKKyNkZWZpbmUgV004NzY2X1JBVEVfMTI4CQkweDAwMAorI2RlZmluZSBXTTg3NjZfUkFURV8xOTIJCTB4MDQwCisjZGVmaW5lIFdNODc2Nl9SQVRFXzI1NgkJMHgwODAKKyNkZWZpbmUgV004NzY2X1JBVEVfMzg0CQkweDBjMAorI2RlZmluZSBXTTg3NjZfUkFURV81MTIJCTB4MTAwCisjZGVmaW5lIFdNODc2Nl9SQVRFXzc2OAkJMHgxNDAKKy8qIE1VVEUxICovCisjZGVmaW5lIFdNODc2Nl9NUEQxCQkweDA0MAorLyogTVVURTIgKi8KKyNkZWZpbmUgV004NzY2X01QRDIJCTB4MDIwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi93bTg3NzYuaCBiL3NvdW5kL3BjaS9veHlnZW4vd204Nzc2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE5NmY1NgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vd204Nzc2LmgKQEAgLTAsMCArMSwxNzcgQEAKKyNpZm5kZWYgV004Nzc2X0hfSU5DTFVERUQKKyNkZWZpbmUgV004Nzc2X0hfSU5DTFVERUQKKworLyoKKyAqIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXIgbmFtZXMgYXJlIGZyb206CisgKiB3bTg3NzYuaCAgLS0gIFdNODc3NiBBU29DIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMKKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2RlZmluZSBXTTg3NzZfSFBMVk9MCQkweDAwCisjZGVmaW5lIFdNODc3Nl9IUFJWT0wJCTB4MDEKKyNkZWZpbmUgV004Nzc2X0hQTUFTVEVSCQkweDAyCisjZGVmaW5lIFdNODc3Nl9EQUNMVk9MCQkweDAzCisjZGVmaW5lIFdNODc3Nl9EQUNSVk9MCQkweDA0CisjZGVmaW5lIFdNODc3Nl9EQUNNQVNURVIJMHgwNQorI2RlZmluZSBXTTg3NzZfUEhBU0VTV0FQCTB4MDYKKyNkZWZpbmUgV004Nzc2X0RBQ0NUUkwxCQkweDA3CisjZGVmaW5lIFdNODc3Nl9EQUNNVVRFCQkweDA4CisjZGVmaW5lIFdNODc3Nl9EQUNDVFJMMgkJMHgwOQorI2RlZmluZSBXTTg3NzZfREFDSUZDVFJMCTB4MGEKKyNkZWZpbmUgV004Nzc2X0FEQ0lGQ1RSTAkweDBiCisjZGVmaW5lIFdNODc3Nl9NU1RSQ1RSTAkJMHgwYworI2RlZmluZSBXTTg3NzZfUFdSRE9XTgkJMHgwZAorI2RlZmluZSBXTTg3NzZfQURDTFZPTAkJMHgwZQorI2RlZmluZSBXTTg3NzZfQURDUlZPTAkJMHgwZgorI2RlZmluZSBXTTg3NzZfQUxDQ1RSTDEJCTB4MTAKKyNkZWZpbmUgV004Nzc2X0FMQ0NUUkwyCQkweDExCisjZGVmaW5lIFdNODc3Nl9BTENDVFJMMwkJMHgxMgorI2RlZmluZSBXTTg3NzZfTk9JU0VHQVRFCTB4MTMKKyNkZWZpbmUgV004Nzc2X0xJTUlURVIJCTB4MTQKKyNkZWZpbmUgV004Nzc2X0FEQ01VWAkJMHgxNQorI2RlZmluZSBXTTg3NzZfT1VUTVVYCQkweDE2CisjZGVmaW5lIFdNODc3Nl9SRVNFVAkJMHgxNworCisKKy8qIEhQTFZPTC9IUFJWT0wvSFBNQVNURVIgKi8KKyNkZWZpbmUgV004Nzc2X0hQQVRUX01BU0sJMHgwN2YKKyNkZWZpbmUgV004Nzc2X0hQWkNFTgkJMHgwODAKKyNkZWZpbmUgV004Nzc2X1VQREFURQkJMHgxMDAKKworLyogREFDTFZPTC9EQUNSVk9ML0RBQ01BU1RFUiAqLworI2RlZmluZSBXTTg3NzZfREFUVF9NQVNLCTB4MGZmCisvKiNkZWZpbmUgV004Nzc2X1VQREFURQkJMHgxMDAqLworCisvKiBQSEFTRVNXQVAgKi8KKyNkZWZpbmUgV004Nzc2X1BIX01BU0sJCTB4MDAzCisKKy8qIERBQ0NUUkwxICovCisjZGVmaW5lIFdNODc3Nl9EWkNFTgkJMHgwMDEKKyNkZWZpbmUgV004Nzc2X0FUQwkJMHgwMDIKKyNkZWZpbmUgV004Nzc2X0laRAkJMHgwMDQKKyNkZWZpbmUgV004Nzc2X1RPRAkJMHgwMDgKKyNkZWZpbmUgV004Nzc2X1BMX0xFRlRfTUFTSwkweDAzMAorI2RlZmluZSBXTTg3NzZfUExfTEVGVF9NVVRFCTB4MDAwCisjZGVmaW5lIFdNODc3Nl9QTF9MRUZUX0xFRlQJMHgwMTAKKyNkZWZpbmUgV004Nzc2X1BMX0xFRlRfUklHSFQJMHgwMjAKKyNkZWZpbmUgV004Nzc2X1BMX0xFRlRfTFJNSVgJMHgwMzAKKyNkZWZpbmUgV004Nzc2X1BMX1JJR0hUX01BU0sJMHgwYzAKKyNkZWZpbmUgV004Nzc2X1BMX1JJR0hUX01VVEUJMHgwMDAKKyNkZWZpbmUgV004Nzc2X1BMX1JJR0hUX0xFRlQJMHgwNDAKKyNkZWZpbmUgV004Nzc2X1BMX1JJR0hUX1JJR0hUCTB4MDgwCisjZGVmaW5lIFdNODc3Nl9QTF9SSUdIVF9MUk1JWAkweDBjMAorCisvKiBEQUNNVVRFICovCisjZGVmaW5lIFdNODc3Nl9ETVVURQkJMHgwMDEKKworLyogREFDQ1RSTDIgKi8KKyNkZWZpbmUgV004Nzc2X0RFRU1QSAkJMHgwMDEKKyNkZWZpbmUgV004Nzc2X0RaRk1fTUFTSwkweDAwNgorI2RlZmluZSBXTTg3NzZfRFpGTV9OT05FCTB4MDAwCisjZGVmaW5lIFdNODc3Nl9EWkZNX0xSCQkweDAwMgorI2RlZmluZSBXTTg3NzZfRFpGTV9CT1RICTB4MDA0CisjZGVmaW5lIFdNODc3Nl9EWkZNX0VJVEhFUgkweDAwNgorCisvKiBEQUNJRkNUUkwgKi8KKyNkZWZpbmUgV004Nzc2X0RBQ0ZNVF9NQVNLCTB4MDAzCisjZGVmaW5lIFdNODc3Nl9EQUNGTVRfUkpVU1QJMHgwMDAKKyNkZWZpbmUgV004Nzc2X0RBQ0ZNVF9MSlVTVAkweDAwMQorI2RlZmluZSBXTTg3NzZfREFDRk1UX0kyUwkweDAwMgorI2RlZmluZSBXTTg3NzZfREFDRk1UX0RTUAkweDAwMworI2RlZmluZSBXTTg3NzZfREFDTFJQCQkweDAwNAorI2RlZmluZSBXTTg3NzZfREFDQkNQCQkweDAwOAorI2RlZmluZSBXTTg3NzZfREFDV0xfTUFTSwkweDAzMAorI2RlZmluZSBXTTg3NzZfREFDV0xfMTYJCTB4MDAwCisjZGVmaW5lIFdNODc3Nl9EQUNXTF8yMAkJMHgwMTAKKyNkZWZpbmUgV004Nzc2X0RBQ1dMXzI0CQkweDAyMAorI2RlZmluZSBXTTg3NzZfREFDV0xfMzIJCTB4MDMwCisKKy8qIEFEQ0lGQ1RSTCAqLworI2RlZmluZSBXTTg3NzZfQURDRk1UX01BU0sJMHgwMDMKKyNkZWZpbmUgV004Nzc2X0FEQ0ZNVF9SSlVTVAkweDAwMAorI2RlZmluZSBXTTg3NzZfQURDRk1UX0xKVVNUCTB4MDAxCisjZGVmaW5lIFdNODc3Nl9BRENGTVRfSTJTCTB4MDAyCisjZGVmaW5lIFdNODc3Nl9BRENGTVRfRFNQCTB4MDAzCisjZGVmaW5lIFdNODc3Nl9BRENMUlAJCTB4MDA0CisjZGVmaW5lIFdNODc3Nl9BRENCQ1AJCTB4MDA4CisjZGVmaW5lIFdNODc3Nl9BRENXTF9NQVNLCTB4MDMwCisjZGVmaW5lIFdNODc3Nl9BRENXTF8xNgkJMHgwMDAKKyNkZWZpbmUgV004Nzc2X0FEQ1dMXzIwCQkweDAxMAorI2RlZmluZSBXTTg3NzZfQURDV0xfMjQJCTB4MDIwCisjZGVmaW5lIFdNODc3Nl9BRENXTF8zMgkJMHgwMzAKKyNkZWZpbmUgV004Nzc2X0FEQ01DTEsJCTB4MDQwCisjZGVmaW5lIFdNODc3Nl9BRENIUEQJCTB4MTAwCisKKy8qIE1TVFJDVFJMICovCisjZGVmaW5lIFdNODc3Nl9BRENSQVRFX01BU0sJMHgwMDcKKyNkZWZpbmUgV004Nzc2X0FEQ1JBVEVfMjU2CTB4MDAyCisjZGVmaW5lIFdNODc3Nl9BRENSQVRFXzM4NAkweDAwMworI2RlZmluZSBXTTg3NzZfQURDUkFURV81MTIJMHgwMDQKKyNkZWZpbmUgV004Nzc2X0FEQ1JBVEVfNzY4CTB4MDA1CisjZGVmaW5lIFdNODc3Nl9BRENPU1IJCTB4MDA4CisjZGVmaW5lIFdNODc3Nl9EQUNSQVRFX01BU0sJMHgwNzAKKyNkZWZpbmUgV004Nzc2X0RBQ1JBVEVfMTI4CTB4MDAwCisjZGVmaW5lIFdNODc3Nl9EQUNSQVRFXzE5MgkweDAxMAorI2RlZmluZSBXTTg3NzZfREFDUkFURV8yNTYJMHgwMjAKKyNkZWZpbmUgV004Nzc2X0RBQ1JBVEVfMzg0CTB4MDMwCisjZGVmaW5lIFdNODc3Nl9EQUNSQVRFXzUxMgkweDA0MAorI2RlZmluZSBXTTg3NzZfREFDUkFURV83NjgJMHgwNTAKKyNkZWZpbmUgV004Nzc2X0RBQ01TCQkweDA4MAorI2RlZmluZSBXTTg3NzZfQURDTVMJCTB4MTAwCisKKy8qIFBXUkRPV04gKi8KKyNkZWZpbmUgV004Nzc2X1BEV04JCTB4MDAxCisjZGVmaW5lIFdNODc3Nl9BRENQRAkJMHgwMDIKKyNkZWZpbmUgV004Nzc2X0RBQ1BECQkweDAwNAorI2RlZmluZSBXTTg3NzZfSFBQRAkJMHgwMDgKKyNkZWZpbmUgV004Nzc2X0FJTlBECQkweDA0MAorCisvKiBBRENMVk9ML0FEQ1JWT0wgKi8KKyNkZWZpbmUgV004Nzc2X0FHTUFTSwkJMHgwZmYKKyNkZWZpbmUgV004Nzc2X1pDQQkJMHgxMDAKKworLyogQUxDQ1RSTDEgKi8KKyNkZWZpbmUgV004Nzc2X0xDVF9NQVNLCQkweDAwZgorI2RlZmluZSBXTTg3NzZfTUFYR0FJTl9NQVNLCTB4MDcwCisjZGVmaW5lIFdNODc3Nl9MQ1NFTF9NQVNLCTB4MTgwCisjZGVmaW5lIFdNODc3Nl9MQ1NFTF9MSU1JVEVSCTB4MDAwCisjZGVmaW5lIFdNODc3Nl9MQ1NFTF9BTENfUklHSFQgMHgwODAKKyNkZWZpbmUgV004Nzc2X0xDU0VMX0FMQ19MRUZUCTB4MTAwCisjZGVmaW5lIFdNODc3Nl9MQ1NFTF9BTENfU1RFUkVPCTB4MTgwCisKKy8qIEFMQ0NUUkwyICovCisjZGVmaW5lIFdNODc3Nl9ITERfTUFTSwkJMHgwMGYKKyNkZWZpbmUgV004Nzc2X0FMQ1pDCQkweDA4MAorI2RlZmluZSBXTTg3NzZfTENFTgkJMHgxMDAKKworLyogQUxDQ1RSTDMgKi8KKyNkZWZpbmUgV004Nzc2X0FUS19NQVNLCQkweDAwZgorI2RlZmluZSBXTTg3NzZfRENZX01BU0sJCTB4MGYwCisKKy8qIE5PSVNFR0FURSAqLworI2RlZmluZSBXTTg3NzZfTkdBVAkJMHgwMDEKKyNkZWZpbmUgV004Nzc2X05HVEhfTUFTSwkweDAxYworCisvKiBMSU1JVEVSICovCisjZGVmaW5lIFdNODc3Nl9NQVhBVFRFTl9NQVNLCTB4MDBmCisjZGVmaW5lIFdNODc3Nl9UUkFOV0lOX01BU0sJMHgwNzAKKworLyogQURDTVVYICovCisjZGVmaW5lIFdNODc3Nl9BTVhfTUFTSwkJMHgwMWYKKyNkZWZpbmUgV004Nzc2X01VVEVSQQkJMHgwNDAKKyNkZWZpbmUgV004Nzc2X01VVEVMQQkJMHgwODAKKyNkZWZpbmUgV004Nzc2X0xSQk9USAkJMHgxMDAKKworLyogT1VUTVVYICovCisjZGVmaW5lIFdNODc3Nl9NWF9EQUMJCTB4MDAxCisjZGVmaW5lIFdNODc3Nl9NWF9BVVgJCTB4MDAyCisjZGVmaW5lIFdNODc3Nl9NWF9CWVBBU1MJMHgwMDQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyLmggYi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyLmgKaW5kZXggODliM2VkOC4uYjM1MzQzYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi94b25hci5oCisrKyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXIuaApAQCAtMzUsNiArMzUsOCBAQAogCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCk7CiBpbnQgZ2V0X3hvbmFyX2NzNDN4eF9tb2RlbChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAogCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKTsKK2ludCBnZXRfeG9uYXJfd204N3g2X21vZGVsKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOwogCiAvKiBIRE1JIGhlbHBlciBmdW5jdGlvbnMgKi8KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi94b25hcl93bTg3eDYuYyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfd204N3g2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1NGRiMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfd204N3g2LmMKQEAgLTAsMCArMSwxMDIxIEBACisvKgorICogY2FyZCBkcml2ZXIgZm9yIG1vZGVscyB3aXRoIFdNODc3Ni9XTTg3NjYgREFDcyAoWG9uYXIgRFMpCisgKgorICogQ29weXJpZ2h0IChjKSBDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KKyAqCisgKgorICogIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisgKgorICogIFRoaXMgZHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgZHJpdmVyOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyoKKyAqIFhvbmFyIERTCisgKiAtLS0tLS0tLQorICoKKyAqIENNSTg3ODg6CisgKgorICogU1BJIDAgLT4gV004NzY2IChzdXJyb3VuZCwgY2VudGVyL0xGRSwgYmFjaykKKyAqIFNQSSAxIC0+IFdNODc3NiAoZnJvbnQsIGlucHV0KQorICoKKyAqIEdQSU8gNCA8LSBoZWFkcGhvbmUgZGV0ZWN0CisgKiBHUElPIDYgLT4gcm91dGUgaW5wdXQgamFjayB0byBpbnB1dCAxLzIgKDEvMCkKKyAqIEdQSU8gNyAtPiBlbmFibGUgb3V0cHV0IHRvIHNwZWFrZXJzCisgKiBHUElPIDggLT4gZW5hYmxlIG91dHB1dCB0byBzcGVha2VycworICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgInhvbmFyLmgiCisjaW5jbHVkZSAid204Nzc2LmgiCisjaW5jbHVkZSAid204NzY2LmgiCisKKyNkZWZpbmUgR1BJT19EU19IUF9ERVRFQ1QJMHgwMDEwCisjZGVmaW5lIEdQSU9fRFNfSU5QVVRfUk9VVEUJMHgwMDQwCisjZGVmaW5lIEdQSU9fRFNfT1VUUFVUX0VOQUJMRQkweDAxODAKKworI2RlZmluZSBMQ19DT05UUk9MX0xJTUlURVIJMHg0MDAwMDAwMAorI2RlZmluZSBMQ19DT05UUk9MX0FMQwkJMHgyMDAwMDAwMAorCitzdHJ1Y3QgeG9uYXJfd204N3g2IHsKKwlzdHJ1Y3QgeG9uYXJfZ2VuZXJpYyBnZW5lcmljOworCXUxNiB3bTg3NzZfcmVnc1sweDE3XTsKKwl1MTYgd204NzY2X3JlZ3NbMHgxMF07CisJc3RydWN0IHNuZF9rY29udHJvbCAqbGNfY29udHJvbHNbMTNdOworfTsKKworc3RhdGljIHZvaWQgd204Nzc2X3dyaXRlKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJb3h5Z2VuX3dyaXRlX3NwaShjaGlwLCBPWFlHRU5fU1BJX1RSSUdHRVIgfAorCQkJIE9YWUdFTl9TUElfREFUQV9MRU5HVEhfMiB8CisJCQkgT1hZR0VOX1NQSV9DTE9DS18xNjAgfAorCQkJICgxIDw8IE9YWUdFTl9TUElfQ09ERUNfU0hJRlQpIHwKKwkJCSBPWFlHRU5fU1BJX0NFTl9MQVRDSF9DTE9DS19MTywKKwkJCSAocmVnIDw8IDkpIHwgdmFsdWUpOworCWlmIChyZWcgPCBBUlJBWV9TSVpFKGRhdGEtPndtODc3Nl9yZWdzKSkgeworCQlpZiAocmVnID49IFdNODc3Nl9IUExWT0wgfHwgcmVnIDw9IFdNODc3Nl9EQUNNQVNURVIpCisJCQl2YWx1ZSAmPSB+V004Nzc2X1VQREFURTsKKwkJZGF0YS0+d204Nzc2X3JlZ3NbcmVnXSA9IHZhbHVlOworCX0KK30KKworc3RhdGljIHZvaWQgd204Nzc2X3dyaXRlX2NhY2hlZChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCXVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCWlmIChyZWcgPj0gQVJSQVlfU0laRShkYXRhLT53bTg3NzZfcmVncykgfHwKKwkgICAgdmFsdWUgIT0gZGF0YS0+d204Nzc2X3JlZ3NbcmVnXSkKKwkJd204Nzc2X3dyaXRlKGNoaXAsIHJlZywgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCB3bTg3NjZfd3JpdGUoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCSB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlveHlnZW5fd3JpdGVfc3BpKGNoaXAsIE9YWUdFTl9TUElfVFJJR0dFUiB8CisJCQkgT1hZR0VOX1NQSV9EQVRBX0xFTkdUSF8yIHwKKwkJCSBPWFlHRU5fU1BJX0NMT0NLXzE2MCB8CisJCQkgKDAgPDwgT1hZR0VOX1NQSV9DT0RFQ19TSElGVCkgfAorCQkJIE9YWUdFTl9TUElfQ0VOX0xBVENIX0NMT0NLX0xPLAorCQkJIChyZWcgPDwgOSkgfCB2YWx1ZSk7CisJaWYgKHJlZyA8IEFSUkFZX1NJWkUoZGF0YS0+d204NzY2X3JlZ3MpKQorCQlkYXRhLT53bTg3NjZfcmVnc1tyZWddID0gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIHdtODc2Nl93cml0ZV9jYWNoZWQoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQl1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlpZiAocmVnID49IEFSUkFZX1NJWkUoZGF0YS0+d204NzY2X3JlZ3MpIHx8CisJICAgIHZhbHVlICE9IGRhdGEtPndtODc2Nl9yZWdzW3JlZ10pIHsKKwkJaWYgKChyZWcgPj0gV004NzY2X0xEQTEgJiYgcmVnIDw9IFdNODc2Nl9SREExKSB8fAorCQkgICAgKHJlZyA+PSBXTTg3NjZfTERBMiAmJiByZWcgPD0gV004NzY2X01BU1REQSkpCisJCQl2YWx1ZSAmPSB+V004NzY2X1VQREFURTsKKwkJd204NzY2X3dyaXRlKGNoaXAsIHJlZywgdmFsdWUpOworCX0KK30KKworc3RhdGljIHZvaWQgd204Nzc2X3JlZ2lzdGVyc19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X1JFU0VULCAwKTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0RBQ0NUUkwxLCBXTTg3NzZfRFpDRU4gfAorCQkgICAgIFdNODc3Nl9QTF9MRUZUX0xFRlQgfCBXTTg3NzZfUExfUklHSFRfUklHSFQpOworCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfREFDTVVURSwgY2hpcC0+ZGFjX211dGUgPyBXTTg3NzZfRE1VVEUgOiAwKTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0RBQ0lGQ1RSTCwKKwkJICAgICBXTTg3NzZfREFDRk1UX0xKVVNUIHwgV004Nzc2X0RBQ1dMXzI0KTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0FEQ0lGQ1RSTCwKKwkJICAgICBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDSUZDVFJMXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9NU1RSQ1RSTCwgZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X01TVFJDVFJMXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9QV1JET1dOLCBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfUFdSRE9XTl0pOworCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfSFBMVk9MLCBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfSFBMVk9MXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9IUFJWT0wsIGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9IUFJWT0xdIHwKKwkJICAgICBXTTg3NzZfVVBEQVRFKTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0FEQ0xWT0wsIGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENMVk9MXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9BRENSVk9MLCBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDUlZPTF0pOworCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfQURDTVVYLCBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDTVVYXSk7CisJd204Nzc2X3dyaXRlKGNoaXAsIFdNODc3Nl9EQUNMVk9MLCBjaGlwLT5kYWNfdm9sdW1lWzBdKTsKKwl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0RBQ1JWT0wsIGNoaXAtPmRhY192b2x1bWVbMV0gfCBXTTg3NzZfVVBEQVRFKTsKK30KKworc3RhdGljIHZvaWQgd204NzY2X3JlZ2lzdGVyc19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJd204NzY2X3dyaXRlKGNoaXAsIFdNODc2Nl9SRVNFVCwgMCk7CisJd204NzY2X3dyaXRlKGNoaXAsIFdNODc2Nl9JTlRfQ1RSTCwgV004NzY2X0ZNVF9MSlVTVCB8IFdNODc2Nl9JV0xfMjQpOworCXdtODc2Nl93cml0ZShjaGlwLCBXTTg3NjZfREFDX0NUUkwyLAorCQkgICAgIFdNODc2Nl9aQ0QgfCAoY2hpcC0+ZGFjX211dGUgPyBXTTg3NjZfRE1VVEVfTUFTSyA6IDApKTsKKwl3bTg3NjZfd3JpdGUoY2hpcCwgV004NzY2X0xEQTEsIGNoaXAtPmRhY192b2x1bWVbMl0pOworCXdtODc2Nl93cml0ZShjaGlwLCBXTTg3NjZfUkRBMSwgY2hpcC0+ZGFjX3ZvbHVtZVszXSk7CisJd204NzY2X3dyaXRlKGNoaXAsIFdNODc2Nl9MREEyLCBjaGlwLT5kYWNfdm9sdW1lWzRdKTsKKwl3bTg3NjZfd3JpdGUoY2hpcCwgV004NzY2X1JEQTIsIGNoaXAtPmRhY192b2x1bWVbNV0pOworCXdtODc2Nl93cml0ZShjaGlwLCBXTTg3NjZfTERBMywgY2hpcC0+ZGFjX3ZvbHVtZVs2XSk7CisJd204NzY2X3dyaXRlKGNoaXAsIFdNODc2Nl9SREEzLCBjaGlwLT5kYWNfdm9sdW1lWzddIHwgV004NzY2X1VQREFURSk7Cit9CisKK3N0YXRpYyB2b2lkIHdtODc3Nl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfSFBMVk9MXSA9ICgweDc5IC0gNjApIHwgV004Nzc2X0hQWkNFTjsKKwlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfSFBSVk9MXSA9ICgweDc5IC0gNjApIHwgV004Nzc2X0hQWkNFTjsKKwlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDSUZDVFJMXSA9CisJCVdNODc3Nl9BRENGTVRfTEpVU1QgfCBXTTg3NzZfQURDV0xfMjQgfCBXTTg3NzZfQURDTUNMSzsKKwlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfTVNUUkNUUkxdID0KKwkJV004Nzc2X0FEQ1JBVEVfMjU2IHwgV004Nzc2X0RBQ1JBVEVfMjU2OworCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9QV1JET1dOXSA9IFdNODc3Nl9IUFBEOworCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENMVk9MXSA9IDB4YTUgfCBXTTg3NzZfWkNBOworCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENSVk9MXSA9IDB4YTUgfCBXTTg3NzZfWkNBOworCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENNVVhdID0gMHgwMDE7CisJd204Nzc2X3JlZ2lzdGVyc19pbml0KGNoaXApOworfQorCitzdGF0aWMgdm9pZCB4b25hcl9kc19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwlkYXRhLT5nZW5lcmljLmFudGlfcG9wX2RlbGF5ID0gMzAwOworCWRhdGEtPmdlbmVyaWMub3V0cHV0X2VuYWJsZV9iaXQgPSBHUElPX0RTX09VVFBVVF9FTkFCTEU7CisKKwl3bTg3NzZfaW5pdChjaGlwKTsKKwl3bTg3NjZfcmVnaXN0ZXJzX2luaXQoY2hpcCk7CisKKwlveHlnZW5fd3JpdGUxNl9tYXNrZWQoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwgR1BJT19EU19JTlBVVF9ST1VURSwKKwkJCSAgICAgIEdQSU9fRFNfSFBfREVURUNUIHwgR1BJT19EU19JTlBVVF9ST1VURSk7CisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwgR1BJT19EU19JTlBVVF9ST1VURSk7CisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fSU5URVJSVVBUX01BU0ssIEdQSU9fRFNfSFBfREVURUNUKTsKKwljaGlwLT5pbnRlcnJ1cHRfbWFzayB8PSBPWFlHRU5fSU5UX0dQSU87CisKKwl4b25hcl9lbmFibGVfb3V0cHV0KGNoaXApOworCisJc25kX2NvbXBvbmVudF9hZGQoY2hpcC0+Y2FyZCwgIldNODc3NiIpOworCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJXTTg3NjYiKTsKK30KKworc3RhdGljIHZvaWQgeG9uYXJfZHNfY2xlYW51cChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXhvbmFyX2Rpc2FibGVfb3V0cHV0KGNoaXApOworfQorCitzdGF0aWMgdm9pZCB4b25hcl9kc19zdXNwZW5kKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJeG9uYXJfZHNfY2xlYW51cChjaGlwKTsKK30KKworc3RhdGljIHZvaWQgeG9uYXJfZHNfcmVzdW1lKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJd204Nzc2X3JlZ2lzdGVyc19pbml0KGNoaXApOworCXdtODc2Nl9yZWdpc3RlcnNfaW5pdChjaGlwKTsKKwl4b25hcl9lbmFibGVfb3V0cHV0KGNoaXApOworfQorCitzdGF0aWMgdm9pZCB3bTg3NzZfYWRjX2hhcmR3YXJlX2ZpbHRlcih1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwkJCQkgICAgICAgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgKmhhcmR3YXJlKQoreworCWlmIChjaGFubmVsID09IFBDTV9BKSB7CisJCWhhcmR3YXJlLT5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzMyMDAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzQ4MDAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzY0MDAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzg4MjAwIHwKKwkJCQkgIFNORFJWX1BDTV9SQVRFXzk2MDAwOworCQloYXJkd2FyZS0+cmF0ZV9tYXggPSA5NjAwMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF93bTg3eDZfZGFjX3BhcmFtcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7Cit9CisKK3N0YXRpYyB2b2lkIHNldF93bTg3NzZfYWRjX3BhcmFtcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJdTE2IHJlZzsKKworCXJlZyA9IFdNODc3Nl9BRENSQVRFXzI1NiB8IFdNODc3Nl9EQUNSQVRFXzI1NjsKKwlpZiAocGFyYW1zX3JhdGUocGFyYW1zKSA+IDQ4MDAwKQorCQlyZWcgfD0gV004Nzc2X0FEQ09TUjsKKwl3bTg3NzZfd3JpdGVfY2FjaGVkKGNoaXAsIFdNODc3Nl9NU1RSQ1RSTCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3dtODc3Nl92b2x1bWUoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKwl1OCB0b19jaGFuZ2U7CisKKwlpZiAoY2hpcC0+ZGFjX3ZvbHVtZVswXSA9PSBjaGlwLT5kYWNfdm9sdW1lWzFdKSB7CisJCWlmIChjaGlwLT5kYWNfdm9sdW1lWzBdICE9IGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9EQUNMVk9MXSB8fAorCQkgICAgY2hpcC0+ZGFjX3ZvbHVtZVsxXSAhPSBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfREFDUlZPTF0pIHsKKwkJCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfREFDTUFTVEVSLAorCQkJCSAgICAgY2hpcC0+ZGFjX3ZvbHVtZVswXSB8IFdNODc3Nl9VUERBVEUpOworCQkJZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0RBQ0xWT0xdID0gY2hpcC0+ZGFjX3ZvbHVtZVswXTsKKwkJCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9EQUNSVk9MXSA9IGNoaXAtPmRhY192b2x1bWVbMF07CisJCX0KKwl9IGVsc2UgeworCQl0b19jaGFuZ2UgPSAoY2hpcC0+ZGFjX3ZvbHVtZVswXSAhPQorCQkJICAgICBkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfREFDTFZPTF0pIDw8IDA7CisJCXRvX2NoYW5nZSB8PSAoY2hpcC0+ZGFjX3ZvbHVtZVsxXSAhPQorCQkJICAgICAgZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0RBQ0xWT0xdKSA8PCAxOworCQlpZiAodG9fY2hhbmdlICYgMSkKKwkJCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfREFDTFZPTCwgY2hpcC0+ZGFjX3ZvbHVtZVswXSB8CisJCQkJICAgICAoKHRvX2NoYW5nZSAmIDIpID8gMCA6IFdNODc3Nl9VUERBVEUpKTsKKwkJaWYgKHRvX2NoYW5nZSAmIDIpCisJCQl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0RBQ1JWT0wsCisJCQkJICAgICBjaGlwLT5kYWNfdm9sdW1lWzFdIHwgV004Nzc2X1VQREFURSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfd204N3g2X3ZvbHVtZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXN0YXRpYyBjb25zdCB1OCB3bTg3NjZfcmVnc1s2XSA9IHsKKwkJV004NzY2X0xEQTEsIFdNODc2Nl9SREExLAorCQlXTTg3NjZfTERBMiwgV004NzY2X1JEQTIsCisJCVdNODc2Nl9MREEzLCBXTTg3NjZfUkRBMywKKwl9OworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCBpOworCXU4IHRvX2NoYW5nZTsKKworCXVwZGF0ZV93bTg3NzZfdm9sdW1lKGNoaXApOworCWlmIChjaGlwLT5kYWNfdm9sdW1lWzJdID09IGNoaXAtPmRhY192b2x1bWVbM10gJiYKKwkgICAgY2hpcC0+ZGFjX3ZvbHVtZVsyXSA9PSBjaGlwLT5kYWNfdm9sdW1lWzRdICYmCisJICAgIGNoaXAtPmRhY192b2x1bWVbMl0gPT0gY2hpcC0+ZGFjX3ZvbHVtZVs1XSAmJgorCSAgICBjaGlwLT5kYWNfdm9sdW1lWzJdID09IGNoaXAtPmRhY192b2x1bWVbNl0gJiYKKwkgICAgY2hpcC0+ZGFjX3ZvbHVtZVsyXSA9PSBjaGlwLT5kYWNfdm9sdW1lWzddKSB7CisJCXRvX2NoYW5nZSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCA2OyArK2kpCisJCQlpZiAoY2hpcC0+ZGFjX3ZvbHVtZVsyXSAhPQorCQkJICAgIGRhdGEtPndtODc2Nl9yZWdzW3dtODc2Nl9yZWdzW2ldXSkKKwkJCQl0b19jaGFuZ2UgPSAxOworCQlpZiAodG9fY2hhbmdlKSB7CisJCQl3bTg3NjZfd3JpdGUoY2hpcCwgV004NzY2X01BU1REQSwKKwkJCQkgICAgIGNoaXAtPmRhY192b2x1bWVbMl0gfCBXTTg3NjZfVVBEQVRFKTsKKwkJCWZvciAoaSA9IDA7IGkgPCA2OyArK2kpCisJCQkJZGF0YS0+d204NzY2X3JlZ3Nbd204NzY2X3JlZ3NbaV1dID0KKwkJCQkJY2hpcC0+ZGFjX3ZvbHVtZVsyXTsKKwkJfQorCX0gZWxzZSB7CisJCXRvX2NoYW5nZSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCA2OyArK2kpCisJCQl0b19jaGFuZ2UgfD0gKGNoaXAtPmRhY192b2x1bWVbMiArIGldICE9CisJCQkJICAgICAgZGF0YS0+d204NzY2X3JlZ3Nbd204NzY2X3JlZ3NbaV1dKSA8PCBpOworCQlmb3IgKGkgPSAwOyBpIDwgNjsgKytpKQorCQkJaWYgKHRvX2NoYW5nZSAmICgxIDw8IGkpKQorCQkJCXdtODc2Nl93cml0ZShjaGlwLCB3bTg3NjZfcmVnc1tpXSwKKwkJCQkJICAgICBjaGlwLT5kYWNfdm9sdW1lWzIgKyBpXSB8CisJCQkJCSAgICAgKCh0b19jaGFuZ2UgJiAoMHgzZSA8PCBpKSkKKwkJCQkJICAgICAgPyAwIDogV004NzY2X1VQREFURSkpOworCX0KK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3dtODc3Nl9tdXRlKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJd204Nzc2X3dyaXRlX2NhY2hlZChjaGlwLCBXTTg3NzZfREFDTVVURSwKKwkJCSAgICBjaGlwLT5kYWNfbXV0ZSA/IFdNODc3Nl9ETVVURSA6IDApOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfd204N3g2X211dGUoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwl1cGRhdGVfd204Nzc2X211dGUoY2hpcCk7CisJd204NzY2X3dyaXRlX2NhY2hlZChjaGlwLCBXTTg3NjZfREFDX0NUUkwyLCBXTTg3NjZfWkNEIHwKKwkJCSAgICAoY2hpcC0+ZGFjX211dGUgPyBXTTg3NjZfRE1VVEVfTUFTSyA6IDApKTsKK30KKworc3RhdGljIHZvaWQgeG9uYXJfZHNfZ3Bpb19jaGFuZ2VkKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJdTE2IGJpdHM7CisKKwliaXRzID0gb3h5Z2VuX3JlYWQxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBKTsKKwlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiSFAgZGV0ZWN0OiAlZFxuIiwgISEoYml0cyAmIEdQSU9fRFNfSFBfREVURUNUKSk7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2JpdF9zd2l0Y2hfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXUxNiBiaXQgPSBjdGwtPnByaXZhdGVfdmFsdWUgJiAweGZmZmY7CisJdW5zaWduZWQgaW50IHJlZ19pbmRleCA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHhmZjsKKwlib29sIGludmVydCA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMjQpICYgMTsKKworCXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0KKwkJKChkYXRhLT53bTg3NzZfcmVnc1tyZWdfaW5kZXhdICYgYml0KSAhPSAwKSBeIGludmVydDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NzZfYml0X3N3aXRjaF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdTE2IGJpdCA9IGN0bC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmZmZjsKKwl1MTYgcmVnX3ZhbHVlOworCXVuc2lnbmVkIGludCByZWdfaW5kZXggPSAoY3RsLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4ZmY7CisJYm9vbCBpbnZlcnQgPSAoY3RsLT5wcml2YXRlX3ZhbHVlID4+IDI0KSAmIDE7CisJaW50IGNoYW5nZWQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJcmVnX3ZhbHVlID0gZGF0YS0+d204Nzc2X3JlZ3NbcmVnX2luZGV4XSAmIH5iaXQ7CisJaWYgKHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIF4gaW52ZXJ0KQorCQlyZWdfdmFsdWUgfD0gYml0OworCWNoYW5nZWQgPSByZWdfdmFsdWUgIT0gZGF0YS0+d204Nzc2X3JlZ3NbcmVnX2luZGV4XTsKKwlpZiAoY2hhbmdlZCkKKwkJd204Nzc2X3dyaXRlKGNoaXAsIHJlZ19pbmRleCwgcmVnX3ZhbHVlKTsKKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlyZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIGludCB3bTg3NzZfZmllbGRfZW51bV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgaGxkWzE2XSA9IHsKKwkJIjAgbXMiLCAiMi42NyBtcyIsICI1LjMzIG1zIiwgIjEwLjYgbXMiLAorCQkiMjEuMyBtcyIsICI0Mi43IG1zIiwgIjg1LjMgbXMiLCAiMTcxIG1zIiwKKwkJIjM0MSBtcyIsICI2ODMgbXMiLCAiMS4zNyBzIiwgIjIuNzMgcyIsCisJCSI1LjQ2IHMiLCAiMTAuOSBzIiwgIjIxLjggcyIsICI0My43IHMiLAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGF0a19saW1bMTFdID0geworCQkiMC4yNSBtcyIsICIwLjUgbXMiLCAiMSBtcyIsICIyIG1zIiwKKwkJIjQgbXMiLCAiOCBtcyIsICIxNiBtcyIsICIzMiBtcyIsCisJCSI2NCBtcyIsICIxMjggbXMiLCAiMjU2IG1zIiwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBhdGtfYWxjWzExXSA9IHsKKwkJIjguNDAgbXMiLCAiMTYuOCBtcyIsICIzMy42IG1zIiwgIjY3LjIgbXMiLAorCQkiMTM0IG1zIiwgIjI2OSBtcyIsICI1MzggbXMiLCAiMS4wOCBzIiwKKwkJIjIuMTUgcyIsICI0LjMgcyIsICI4LjYgcyIsCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZGN5X2xpbVsxMV0gPSB7CisJCSIxLjIgbXMiLCAiMi40IG1zIiwgIjQuOCBtcyIsICI5LjYgbXMiLAorCQkiMTkuMiBtcyIsICIzOC40IG1zIiwgIjc2LjggbXMiLCAiMTU0IG1zIiwKKwkJIjMwNyBtcyIsICI2MTQgbXMiLCAiMS4yMyBzIiwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBkY3lfYWxjWzExXSA9IHsKKwkJIjMzLjUgbXMiLCAiNjcuMCBtcyIsICIxMzQgbXMiLCAiMjY4IG1zIiwKKwkJIjUzNiBtcyIsICIxLjA3IHMiLCAiMi4xNCBzIiwgIjQuMjkgcyIsCisJCSI4LjU4IHMiLCAiMTcuMiBzIiwgIjM0LjMgcyIsCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdHJhbndpbls4XSA9IHsKKwkJIjAgdXMiLCAiNjIuNSB1cyIsICIxMjUgdXMiLCAiMjUwIHVzIiwKKwkJIjUwMCB1cyIsICIxIG1zIiwgIjIgbXMiLCAiNCBtcyIsCisJfTsKKwl1OCBtYXg7CisJY29uc3QgY2hhciAqY29uc3QgKm5hbWVzOworCisJbWF4ID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAxMikgJiAweGY7CisJaW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKKwlpbmZvLT5jb3VudCA9IDE7CisJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IG1heCArIDE7CisJaWYgKGluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+IG1heCkKKwkJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gbWF4OworCXN3aXRjaCAoKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAyNCkgJiAweDFmKSB7CisJY2FzZSBXTTg3NzZfQUxDQ1RSTDI6CisJCW5hbWVzID0gaGxkOworCQlicmVhazsKKwljYXNlIFdNODc3Nl9BTENDVFJMMzoKKwkJaWYgKCgoY3RsLT5wcml2YXRlX3ZhbHVlID4+IDIwKSAmIDB4ZikgPT0gMCkgeworCQkJaWYgKGN0bC0+cHJpdmF0ZV92YWx1ZSAmIExDX0NPTlRST0xfTElNSVRFUikKKwkJCQluYW1lcyA9IGF0a19saW07CisJCQllbHNlCisJCQkJbmFtZXMgPSBhdGtfYWxjOworCQl9IGVsc2UgeworCQkJaWYgKGN0bC0+cHJpdmF0ZV92YWx1ZSAmIExDX0NPTlRST0xfTElNSVRFUikKKwkJCQluYW1lcyA9IGRjeV9saW07CisJCQllbHNlCisJCQkJbmFtZXMgPSBkY3lfYWxjOworCQl9CisJCWJyZWFrOworCWNhc2UgV004Nzc2X0xJTUlURVI6CisJCW5hbWVzID0gdHJhbndpbjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJc3RyY3B5KGluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgbmFtZXNbaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2ZpZWxkX3ZvbHVtZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICppbmZvKQoreworCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJaW5mby0+Y291bnQgPSAxOworCWluZm8tPnZhbHVlLmludGVnZXIubWluID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiA4KSAmIDB4ZjsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMTIpICYgMHhmOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bTg3NzZfZmllbGRfc2V0X2Zyb21fY3RsKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdW5zaWduZWQgaW50IHZhbHVlLCByZWdfaW5kZXgsIG1vZGU7CisJdTggbWluLCBtYXgsIHNoaWZ0OworCXUxNiBtYXNrLCByZWdfdmFsdWU7CisJYm9vbCBpbnZlcnQ7CisKKwlpZiAoKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BTENDVFJMMV0gJiBXTTg3NzZfTENTRUxfTUFTSykgPT0KKwkgICAgV004Nzc2X0xDU0VMX0xJTUlURVIpCisJCW1vZGUgPSBMQ19DT05UUk9MX0xJTUlURVI7CisJZWxzZQorCQltb2RlID0gTENfQ09OVFJPTF9BTEM7CisJaWYgKCEoY3RsLT5wcml2YXRlX3ZhbHVlICYgbW9kZSkpCisJCXJldHVybjsKKworCXZhbHVlID0gY3RsLT5wcml2YXRlX3ZhbHVlICYgMHhmOworCW1pbiA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gOCkgJiAweGY7CisJbWF4ID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAxMikgJiAweGY7CisJbWFzayA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHhmOworCXNoaWZ0ID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAyMCkgJiAweGY7CisJcmVnX2luZGV4ID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiAyNCkgJiAweDFmOworCWludmVydCA9IChjdGwtPnByaXZhdGVfdmFsdWUgPj4gMjkpICYgMHgxOworCisJaWYgKGludmVydCkKKwkJdmFsdWUgPSBtYXggLSAodmFsdWUgLSBtaW4pOworCXJlZ192YWx1ZSA9IGRhdGEtPndtODc3Nl9yZWdzW3JlZ19pbmRleF07CisJcmVnX3ZhbHVlICY9IH4obWFzayA8PCBzaGlmdCk7CisJcmVnX3ZhbHVlIHw9IHZhbHVlIDw8IHNoaWZ0OworCXdtODc3Nl93cml0ZV9jYWNoZWQoY2hpcCwgcmVnX2luZGV4LCByZWdfdmFsdWUpOworfQorCitzdGF0aWMgaW50IHdtODc3Nl9maWVsZF9zZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXU4IG1pbiwgbWF4OworCWludCBjaGFuZ2VkOworCisJbWluID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSA+PiA4KSAmIDB4ZjsKKwltYXggPSAoY3RsLT5wcml2YXRlX3ZhbHVlID4+IDEyKSAmIDB4ZjsKKwlpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpCisJCXJldHVybiAtRUlOVkFMOworCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKKwljaGFuZ2VkID0gdmFsdWUgIT0gKGN0bC0+cHJpdmF0ZV92YWx1ZSAmIDB4Zik7CisJaWYgKGNoYW5nZWQpIHsKKwkJY3RsLT5wcml2YXRlX3ZhbHVlID0gKGN0bC0+cHJpdmF0ZV92YWx1ZSAmIH4weGYpIHwgdmFsdWU7CisJCXdtODc3Nl9maWVsZF9zZXRfZnJvbV9jdGwoY3RsKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2ZpZWxkX2VudW1fZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGN0bC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NzZfZmllbGRfdm9sdW1lX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjdGwtPnByaXZhdGVfdmFsdWUgJiAweGY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2ZpZWxkX2VudW1fcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJcmV0dXJuIHdtODc3Nl9maWVsZF9zZXQoY3RsLCB2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKTsKK30KKworc3RhdGljIGludCB3bTg3NzZfZmllbGRfdm9sdW1lX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJcmV0dXJuIHdtODc3Nl9maWVsZF9zZXQoY3RsLCB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2hwX3ZvbF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCWluZm8tPmNvdW50ID0gMjsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDB4NzkgLSA2MDsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDB4N2Y7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2hwX3ZvbF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPQorCQlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfSFBMVk9MXSAmIFdNODc3Nl9IUEFUVF9NQVNLOworCXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0KKwkJZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0hQUlZPTF0gJiBXTTg3NzZfSFBBVFRfTUFTSzsKKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NzZfaHBfdm9sX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKwl1OCB0b191cGRhdGU7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJdG9fdXBkYXRlID0gKHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICE9CisJCSAgICAgKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9IUExWT0xdICYgV004Nzc2X0hQQVRUX01BU0spKQorCQk8PCAwOworCXRvX3VwZGF0ZSB8PSAodmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gIT0KKwkJICAgICAgKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9IUFJWT0xdICYgV004Nzc2X0hQQVRUX01BU0spKQorCQk8PCAxOworCWlmICh2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9PSB2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSkgeworCQlpZiAodG9fdXBkYXRlKSB7CisJCQl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0hQTUFTVEVSLAorCQkJCSAgICAgdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gfAorCQkJCSAgICAgV004Nzc2X0hQWkNFTiB8IFdNODc3Nl9VUERBVEUpOworCQkJZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0hQTFZPTF0gPQorCQkJCXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIHwgV004Nzc2X0hQWkNFTjsKKwkJCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9IUFJWT0xdID0KKwkJCQl2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSB8IFdNODc3Nl9IUFpDRU47CisJCX0KKwl9IGVsc2UgeworCQlpZiAodG9fdXBkYXRlICYgMSkKKwkJCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfSFBMVk9MLAorCQkJCSAgICAgdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gfAorCQkJCSAgICAgV004Nzc2X0hQWkNFTiB8CisJCQkJICAgICAoKHRvX3VwZGF0ZSAmIDIpID8gMCA6IFdNODc3Nl9VUERBVEUpKTsKKwkJaWYgKHRvX3VwZGF0ZSAmIDIpCisJCQl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0hQUlZPTCwKKwkJCQkgICAgIHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdIHwKKwkJCQkgICAgIFdNODc3Nl9IUFpDRU4gfCBXTTg3NzZfVVBEQVRFKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIHRvX3VwZGF0ZSAhPSAwOworfQorCitzdGF0aWMgaW50IHdtODc3Nl9pbnB1dF9tdXhfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJdW5zaWduZWQgaW50IG11eF9iaXQgPSBjdGwtPnByaXZhdGVfdmFsdWU7CisKKwl2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9CisJCSEhKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENNVVhdICYgbXV4X2JpdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2lucHV0X211eF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKwl1bnNpZ25lZCBpbnQgbXV4X2JpdCA9IGN0bC0+cHJpdmF0ZV92YWx1ZTsKKwl1MTYgcmVnOworCWludCBjaGFuZ2VkOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCXJlZyA9IGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENNVVhdOworCWlmICh2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkgeworCQlyZWcgJj0gfjB4MDAzOworCQlyZWcgfD0gbXV4X2JpdDsKKwl9IGVsc2UKKwkJcmVnICY9IH5tdXhfYml0OworCWNoYW5nZWQgPSByZWcgIT0gZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ01VWF07CisJaWYgKGNoYW5nZWQpIHsKKwkJb3h5Z2VuX3dyaXRlMTZfbWFza2VkKGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsCisJCQkJICAgICAgcmVnICYgMSA/IEdQSU9fRFNfSU5QVVRfUk9VVEUgOiAwLAorCQkJCSAgICAgIEdQSU9fRFNfSU5QVVRfUk9VVEUpOworCQl3bTg3NzZfd3JpdGUoY2hpcCwgV004Nzc2X0FEQ01VWCwgcmVnKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2lucHV0X3ZvbF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICppbmZvKQoreworCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJaW5mby0+Y291bnQgPSAyOworCWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMHhhNTsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDB4ZmY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2lucHV0X3ZvbF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgeG9uYXJfd204N3g2ICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKKwl2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9CisJCWRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENMVk9MXSAmIFdNODc3Nl9BR01BU0s7CisJdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPQorCQlkYXRhLT53bTg3NzZfcmVnc1tXTTg3NzZfQURDUlZPTF0gJiBXTTg3NzZfQUdNQVNLOworCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODc3Nl9pbnB1dF92b2xfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhvbmFyX3dtODd4NiAqZGF0YSA9IGNoaXAtPm1vZGVsX2RhdGE7CisJaW50IGNoYW5nZWQgPSAwOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCWNoYW5nZWQgPSAodmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gIT0KKwkJICAgKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BRENMVk9MXSAmIFdNODc3Nl9BR01BU0spKSB8fAorCQkgICh2YWx1ZS0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSAhPQorCQkgICAoZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ1JWT0xdICYgV004Nzc2X0FHTUFTSykpOworCXdtODc3Nl93cml0ZV9jYWNoZWQoY2hpcCwgV004Nzc2X0FEQ0xWT0wsCisJCQkgICAgdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gfCBXTTg3NzZfWkNBKTsKKwl3bTg3NzZfd3JpdGVfY2FjaGVkKGNoaXAsIFdNODc3Nl9BRENSVk9MLAorCQkJICAgIHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdIHwgV004Nzc2X1pDQSk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2xldmVsX2NvbnRyb2xfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsCisJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmluZm8pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzWzNdID0geworCQkiTm9uZSIsICJQZWFrIExpbWl0ZXIiLCAiQXV0b21hdGljIExldmVsIENvbnRyb2wiCisJfTsKKwlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworCWluZm8tPmNvdW50ID0gMTsKKwlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKKwlpZiAoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IDMpCisJCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDI7CisJc3RyY3B5KGluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgbmFtZXNbaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2xldmVsX2NvbnRyb2xfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJaWYgKCEoZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FMQ0NUUkwyXSAmIFdNODc3Nl9MQ0VOKSkKKwkJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDA7CisJZWxzZSBpZiAoKGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BTENDVFJMMV0gJiBXTTg3NzZfTENTRUxfTUFTSykgPT0KKwkJIFdNODc3Nl9MQ1NFTF9MSU1JVEVSKQorCQl2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMTsKKwllbHNlCisJCXZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAyOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhY3RpdmF0ZV9jb250cm9sKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwgdW5zaWduZWQgaW50IG1vZGUpCit7CisJdW5zaWduZWQgaW50IGFjY2VzczsKKworCWlmIChjdGwtPnByaXZhdGVfdmFsdWUgJiBtb2RlKQorCQlhY2Nlc3MgPSAwOworCWVsc2UKKwkJYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFOworCWlmICgoY3RsLT52ZFswXS5hY2Nlc3MgJiBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkUpICE9IGFjY2VzcykgeworCQljdGwtPnZkWzBdLmFjY2VzcyBePSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkU7CisJCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX0lORk8sICZjdGwtPmlkKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgd204Nzc2X2xldmVsX2NvbnRyb2xfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCBtb2RlID0gMCwgaTsKKwl1MTYgY3RybDEsIGN0cmwyOworCWludCBjaGFuZ2VkOworCisJaWYgKHZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPj0gMykKKwkJcmV0dXJuIC1FSU5WQUw7CisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCWNoYW5nZWQgPSB2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdICE9IGN0bC0+cHJpdmF0ZV92YWx1ZTsKKwlpZiAoY2hhbmdlZCkgeworCQljdGwtPnByaXZhdGVfdmFsdWUgPSB2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCQljdHJsMSA9IGRhdGEtPndtODc3Nl9yZWdzW1dNODc3Nl9BTENDVFJMMV07CisJCWN0cmwyID0gZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FMQ0NUUkwyXTsKKwkJc3dpdGNoICh2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKSB7CisJCWRlZmF1bHQ6CisJCQl3bTg3NzZfd3JpdGVfY2FjaGVkKGNoaXAsIFdNODc3Nl9BTENDVFJMMiwKKwkJCQkJICAgIGN0cmwyICYgfldNODc3Nl9MQ0VOKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl3bTg3NzZfd3JpdGVfY2FjaGVkKGNoaXAsIFdNODc3Nl9BTENDVFJMMSwKKwkJCQkJICAgIChjdHJsMSAmIH5XTTg3NzZfTENTRUxfTUFTSykgfAorCQkJCQkgICAgV004Nzc2X0xDU0VMX0xJTUlURVIpOworCQkJd204Nzc2X3dyaXRlX2NhY2hlZChjaGlwLCBXTTg3NzZfQUxDQ1RSTDIsCisJCQkJCSAgICBjdHJsMiB8IFdNODc3Nl9MQ0VOKTsKKwkJCW1vZGUgPSBMQ19DT05UUk9MX0xJTUlURVI7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJd204Nzc2X3dyaXRlX2NhY2hlZChjaGlwLCBXTTg3NzZfQUxDQ1RSTDEsCisJCQkJCSAgICAoY3RybDEgJiB+V004Nzc2X0xDU0VMX01BU0spIHwKKwkJCQkJICAgIFdNODc3Nl9MQ1NFTF9BTENfU1RFUkVPKTsKKwkJCXdtODc3Nl93cml0ZV9jYWNoZWQoY2hpcCwgV004Nzc2X0FMQ0NUUkwyLAorCQkJCQkgICAgY3RybDIgfCBXTTg3NzZfTENFTik7CisJCQltb2RlID0gTENfQ09OVFJPTF9BTEM7CisJCQlicmVhazsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhLT5sY19jb250cm9scyk7ICsraSkKKwkJCWFjdGl2YXRlX2NvbnRyb2woY2hpcCwgZGF0YS0+bGNfY29udHJvbHNbaV0sIG1vZGUpOworCX0KKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlyZXR1cm4gY2hhbmdlZDsKK30KKworc3RhdGljIGludCBocGZfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGwsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbmFtZXNbMl0gPSB7CisJCSJOb25lIiwgIkhpZ2gtcGFzcyBGaWx0ZXIiCisJfTsKKworCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisJaW5mby0+Y291bnQgPSAxOworCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSAyOworCWlmIChpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gMikKKwkJaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gMTsKKwlzdHJjcHkoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCBuYW1lc1tpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBocGZfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9CisJCSEoZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ0lGQ1RSTF0gJiBXTTg3NzZfQURDSFBEKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBocGZfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IG94eWdlbiAqY2hpcCA9IGN0bC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCByZWc7CisJaW50IGNoYW5nZWQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJcmVnID0gZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ0lGQ1RSTF0gJiB+V004Nzc2X0FEQ0hQRDsKKwlpZiAoIXZhbHVlLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pCisJCXJlZyB8PSBXTTg3NzZfQURDSFBEOworCWNoYW5nZWQgPSByZWcgIT0gZGF0YS0+d204Nzc2X3JlZ3NbV004Nzc2X0FEQ0lGQ1RSTF07CisJaWYgKGNoYW5nZWQpCisJCXdtODc3Nl93cml0ZShjaGlwLCBXTTg3NzZfQURDSUZDVFJMLCByZWcpOworCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCXJldHVybiBjaGFuZ2VkOworfQorCisjZGVmaW5lIFdNODc3Nl9CSVRfU1dJVENIKHhuYW1lLCByZWcsIGJpdCwgaW52ZXJ0LCBmbGFncykgeyBcCisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKKwkubmFtZSA9IHhuYW1lLCBcCisJLmluZm8gPSBzbmRfY3RsX2Jvb2xlYW5fbW9ub19pbmZvLCBcCisJLmdldCA9IHdtODc3Nl9iaXRfc3dpdGNoX2dldCwgXAorCS5wdXQgPSB3bTg3NzZfYml0X3N3aXRjaF9wdXQsIFwKKwkucHJpdmF0ZV92YWx1ZSA9ICgocmVnKSA8PCAxNikgfCAoYml0KSB8ICgoaW52ZXJ0KSA8PCAyNCkgfCAoZmxhZ3MpLCBcCit9CisjZGVmaW5lIF9XTTg3NzZfRklFTERfQ1RMKHhuYW1lLCByZWcsIHNoaWZ0LCBpbml0dmFsLCBtaW4sIG1heCwgbWFzaywgZmxhZ3MpIFwKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAorCS5uYW1lID0geG5hbWUsIFwKKwkucHJpdmF0ZV92YWx1ZSA9IChpbml0dmFsKSB8ICgobWluKSA8PCA4KSB8ICgobWF4KSA8PCAxMikgfCBcCisJKChtYXNrKSA8PCAxNikgfCAoKHNoaWZ0KSA8PCAyMCkgfCAoKHJlZykgPDwgMjQpIHwgKGZsYWdzKQorI2RlZmluZSBXTTg3NzZfRklFTERfQ1RMX0VOVU0oeG5hbWUsIHJlZywgc2hpZnQsIGluaXQsIG1pbiwgbWF4LCBtYXNrLCBmbGFncykge1wKKwlfV004Nzc2X0ZJRUxEX0NUTCh4bmFtZSAiIENhcHR1cmUgRW51bSIsIFwKKwkJCSAgcmVnLCBzaGlmdCwgaW5pdCwgbWluLCBtYXgsIG1hc2ssIGZsYWdzKSwgXAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwgXAorCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRSwgXAorCS5pbmZvID0gd204Nzc2X2ZpZWxkX2VudW1faW5mbywgXAorCS5nZXQgPSB3bTg3NzZfZmllbGRfZW51bV9nZXQsIFwKKwkucHV0ID0gd204Nzc2X2ZpZWxkX2VudW1fcHV0LCBcCit9CisjZGVmaW5lIFdNODc3Nl9GSUVMRF9DVExfVk9MVU1FKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIHRsdl9wKSB7IFwKKwlfV004Nzc2X0ZJRUxEX0NUTChhICIgQ2FwdHVyZSBWb2x1bWUiLCBiLCBjLCBkLCBlLCBmLCBnLCBoKSwgXAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwgXAorCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRSB8IFwKKwkJICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQsIFwKKwkuaW5mbyA9IHdtODc3Nl9maWVsZF92b2x1bWVfaW5mbywgXAorCS5nZXQgPSB3bTg3NzZfZmllbGRfdm9sdW1lX2dldCwgXAorCS5wdXQgPSB3bTg3NzZfZmllbGRfdm9sdW1lX3B1dCwgXAorCS50bHYgPSB7IC5wID0gdGx2X3AgfSwgXAorfQorCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUod204N3g2X2RhY19kYl9zY2FsZSwgLTYwMDAsIDUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRSh3bTg3NzZfYWRjX2RiX3NjYWxlLCAtMjEwMCwgNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHdtODc3Nl9ocF9kYl9zY2FsZSwgLTYwMDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUod204Nzc2X2xjdF9kYl9zY2FsZSwgLTE2MDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUod204Nzc2X21heGdhaW5fZGJfc2NhbGUsIDAsIDQwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUod204Nzc2X25ndGhfZGJfc2NhbGUsIC03ODAwLCA2MDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHdtODc3Nl9tYXhhdHRlbl9saW1fZGJfc2NhbGUsIC0xMjAwLCAxMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHdtODc3Nl9tYXhhdHRlbl9hbGNfZGJfc2NhbGUsIC0yMTAwLCA0MDAsIDApOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZHNfY29udHJvbHNbXSA9IHsKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwKKwkJLmluZm8gPSB3bTg3NzZfaHBfdm9sX2luZm8sCisJCS5nZXQgPSB3bTg3NzZfaHBfdm9sX2dldCwKKwkJLnB1dCA9IHdtODc3Nl9ocF92b2xfcHV0LAorCQkudGx2ID0geyAucCA9IHdtODc3Nl9ocF9kYl9zY2FsZSB9LAorCX0sCisJV004Nzc2X0JJVF9TV0lUQ0goIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLAorCQkJICBXTTg3NzZfUFdSRE9XTiwgV004Nzc2X0hQUEQsIDEsIDApLAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIklucHV0IENhcHR1cmUgVm9sdW1lIiwKKwkJLmluZm8gPSB3bTg3NzZfaW5wdXRfdm9sX2luZm8sCisJCS5nZXQgPSB3bTg3NzZfaW5wdXRfdm9sX2dldCwKKwkJLnB1dCA9IHdtODc3Nl9pbnB1dF92b2xfcHV0LAorCQkudGx2ID0geyAucCA9IHdtODc3Nl9hZGNfZGJfc2NhbGUgfSwKKwl9LAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkxpbmUgQ2FwdHVyZSBTd2l0Y2giLAorCQkuaW5mbyA9IHNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8sCisJCS5nZXQgPSB3bTg3NzZfaW5wdXRfbXV4X2dldCwKKwkJLnB1dCA9IHdtODc3Nl9pbnB1dF9tdXhfcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IDEgPDwgMCwKKwl9LAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIk1pYyBDYXB0dXJlIFN3aXRjaCIsCisJCS5pbmZvID0gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbywKKwkJLmdldCA9IHdtODc3Nl9pbnB1dF9tdXhfZ2V0LAorCQkucHV0ID0gd204Nzc2X2lucHV0X211eF9wdXQsCisJCS5wcml2YXRlX3ZhbHVlID0gMSA8PCAxLAorCX0sCisJV004Nzc2X0JJVF9TV0lUQ0goIkF1eCIsIFdNODc3Nl9BRENNVVgsIDEgPDwgMiwgMCwgMCksCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiQURDIEZpbHRlciBDYXB0dXJlIEVudW0iLAorCQkuaW5mbyA9IGhwZl9pbmZvLAorCQkuZ2V0ID0gaHBmX2dldCwKKwkJLnB1dCA9IGhwZl9wdXQsCisJfSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJMZXZlbCBDb250cm9sIENhcHR1cmUgRW51bSIsCisJCS5pbmZvID0gd204Nzc2X2xldmVsX2NvbnRyb2xfaW5mbywKKwkJLmdldCA9IHdtODc3Nl9sZXZlbF9jb250cm9sX2dldCwKKwkJLnB1dCA9IHdtODc3Nl9sZXZlbF9jb250cm9sX3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSAwLAorCX0sCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxjX2NvbnRyb2xzW10gPSB7CisJV004Nzc2X0ZJRUxEX0NUTF9WT0xVTUUoIkxpbWl0ZXIgVGhyZXNob2xkIiwKKwkJCQlXTTg3NzZfQUxDQ1RSTDEsIDAsIDExLCAwLCAxNSwgMHhmLAorCQkJCUxDX0NPTlRST0xfTElNSVRFUiwgd204Nzc2X2xjdF9kYl9zY2FsZSksCisJV004Nzc2X0ZJRUxEX0NUTF9FTlVNKCJMaW1pdGVyIEF0dGFjayBUaW1lIiwKKwkJCSAgICAgIFdNODc3Nl9BTENDVFJMMywgMCwgMiwgMCwgMTAsIDB4ZiwKKwkJCSAgICAgIExDX0NPTlRST0xfTElNSVRFUiksCisJV004Nzc2X0ZJRUxEX0NUTF9FTlVNKCJMaW1pdGVyIERlY2F5IFRpbWUiLAorCQkJICAgICAgV004Nzc2X0FMQ0NUUkwzLCA0LCAzLCAwLCAxMCwgMHhmLAorCQkJICAgICAgTENfQ09OVFJPTF9MSU1JVEVSKSwKKwlXTTg3NzZfRklFTERfQ1RMX0VOVU0oIkxpbWl0ZXIgVHJhbnNpZW50IFdpbmRvdyIsCisJCQkgICAgICBXTTg3NzZfTElNSVRFUiwgNCwgMiwgMCwgNywgMHg3LAorCQkJICAgICAgTENfQ09OVFJPTF9MSU1JVEVSKSwKKwlXTTg3NzZfRklFTERfQ1RMX1ZPTFVNRSgiTGltaXRlciBNYXhpbXVtIEF0dGVudWF0aW9uIiwKKwkJCQlXTTg3NzZfTElNSVRFUiwgMCwgNiwgMywgMTIsIDB4ZiwKKwkJCQlMQ19DT05UUk9MX0xJTUlURVIsCisJCQkJd204Nzc2X21heGF0dGVuX2xpbV9kYl9zY2FsZSksCisJV004Nzc2X0ZJRUxEX0NUTF9WT0xVTUUoIkFMQyBUYXJnZXQgTGV2ZWwiLAorCQkJCVdNODc3Nl9BTENDVFJMMSwgMCwgMTEsIDAsIDE1LCAweGYsCisJCQkJTENfQ09OVFJPTF9BTEMsIHdtODc3Nl9sY3RfZGJfc2NhbGUpLAorCVdNODc3Nl9GSUVMRF9DVExfRU5VTSgiQUxDIEF0dGFjayBUaW1lIiwKKwkJCSAgICAgIFdNODc3Nl9BTENDVFJMMywgMCwgMiwgMCwgMTAsIDB4ZiwKKwkJCSAgICAgIExDX0NPTlRST0xfQUxDKSwKKwlXTTg3NzZfRklFTERfQ1RMX0VOVU0oIkFMQyBEZWNheSBUaW1lIiwKKwkJCSAgICAgIFdNODc3Nl9BTENDVFJMMywgNCwgMywgMCwgMTAsIDB4ZiwKKwkJCSAgICAgIExDX0NPTlRST0xfQUxDKSwKKwlXTTg3NzZfRklFTERfQ1RMX1ZPTFVNRSgiQUxDIE1heGltdW0gR2FpbiIsCisJCQkJV004Nzc2X0FMQ0NUUkwxLCA0LCA3LCAxLCA3LCAweDcsCisJCQkJTENfQ09OVFJPTF9BTEMsIHdtODc3Nl9tYXhnYWluX2RiX3NjYWxlKSwKKwlXTTg3NzZfRklFTERfQ1RMX1ZPTFVNRSgiQUxDIE1heGltdW0gQXR0ZW51YXRpb24iLAorCQkJCVdNODc3Nl9MSU1JVEVSLCAwLCAxMCwgMTAsIDE1LCAweGYsCisJCQkJTENfQ09OVFJPTF9BTEMsIHdtODc3Nl9tYXhhdHRlbl9hbGNfZGJfc2NhbGUpLAorCVdNODc3Nl9GSUVMRF9DVExfRU5VTSgiQUxDIEhvbGQgVGltZSIsCisJCQkgICAgICBXTTg3NzZfQUxDQ1RSTDIsIDAsIDAsIDAsIDE1LCAweGYsCisJCQkgICAgICBMQ19DT05UUk9MX0FMQyksCisJV004Nzc2X0JJVF9TV0lUQ0goIk5vaXNlIEdhdGUgQ2FwdHVyZSBTd2l0Y2giLAorCQkJICBXTTg3NzZfTk9JU0VHQVRFLCBXTTg3NzZfTkdBVCwgMCwKKwkJCSAgTENfQ09OVFJPTF9BTEMpLAorCVdNODc3Nl9GSUVMRF9DVExfVk9MVU1FKCJOb2lzZSBHYXRlIFRocmVzaG9sZCIsCisJCQkJV004Nzc2X05PSVNFR0FURSwgMiwgMCwgMCwgNywgMHg3LAorCQkJCUxDX0NPTlRST0xfQUxDLCB3bTg3NzZfbmd0aF9kYl9zY2FsZSksCit9OworCitzdGF0aWMgaW50IHhvbmFyX2RzX2NvbnRyb2xfZmlsdGVyKHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICp0ZW1wbGF0ZSkKK3sKKwlpZiAoIXN0cm5jbXAodGVtcGxhdGUtPm5hbWUsICJDRCBDYXB0dXJlICIsIDExKSkKKwkJcmV0dXJuIDE7IC8qIG5vIENEIGlucHV0ICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeG9uYXJfZHNfbWl4ZXJfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXN0cnVjdCB4b25hcl93bTg3eDYgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bDsKKwlpbnQgZXJyOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHNfY29udHJvbHMpOyArK2kpIHsKKwkJY3RsID0gc25kX2N0bF9uZXcxKCZkc19jb250cm9sc1tpXSwgY2hpcCk7CisJCWlmICghY3RsKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIGN0bCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUobGNfY29udHJvbHMpICE9IEFSUkFZX1NJWkUoZGF0YS0+bGNfY29udHJvbHMpKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsY19jb250cm9scyk7ICsraSkgeworCQljdGwgPSBzbmRfY3RsX25ldzEoJmxjX2NvbnRyb2xzW2ldLCBjaGlwKTsKKwkJaWYgKCFjdGwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgY3RsKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQlkYXRhLT5sY19jb250cm9sc1tpXSA9IGN0bDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsIG1vZGVsX3hvbmFyX2RzID0geworCS5zaG9ydG5hbWUgPSAiWG9uYXIgRFMiLAorCS5sb25nbmFtZSA9ICJBc3VzIFZpcnR1b3NvIDIwMCIsCisJLmNoaXAgPSAiQVYyMDAiLAorCS5pbml0ID0geG9uYXJfZHNfaW5pdCwKKwkuY29udHJvbF9maWx0ZXIgPSB4b25hcl9kc19jb250cm9sX2ZpbHRlciwKKwkubWl4ZXJfaW5pdCA9IHhvbmFyX2RzX21peGVyX2luaXQsCisJLmNsZWFudXAgPSB4b25hcl9kc19jbGVhbnVwLAorCS5zdXNwZW5kID0geG9uYXJfZHNfc3VzcGVuZCwKKwkucmVzdW1lID0geG9uYXJfZHNfcmVzdW1lLAorCS5wY21faGFyZHdhcmVfZmlsdGVyID0gd204Nzc2X2FkY19oYXJkd2FyZV9maWx0ZXIsCisJLmdldF9pMnNfbWNsayA9IG94eWdlbl9kZWZhdWx0X2kyc19tY2xrLAorCS5zZXRfZGFjX3BhcmFtcyA9IHNldF93bTg3eDZfZGFjX3BhcmFtcywKKwkuc2V0X2FkY19wYXJhbXMgPSBzZXRfd204Nzc2X2FkY19wYXJhbXMsCisJLnVwZGF0ZV9kYWNfdm9sdW1lID0gdXBkYXRlX3dtODd4Nl92b2x1bWUsCisJLnVwZGF0ZV9kYWNfbXV0ZSA9IHVwZGF0ZV93bTg3eDZfbXV0ZSwKKwkuZ3Bpb19jaGFuZ2VkID0geG9uYXJfZHNfZ3Bpb19jaGFuZ2VkLAorCS5kYWNfdGx2ID0gd204N3g2X2RhY19kYl9zY2FsZSwKKwkubW9kZWxfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCB4b25hcl93bTg3eDYpLAorCS5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfAorCQkJIFBMQVlCQUNLXzFfVE9fU1BESUYgfAorCQkJIENBUFRVUkVfMF9GUk9NX0kyU18xLAorCS5kYWNfY2hhbm5lbHMgPSA4LAorCS5kYWNfdm9sdW1lX21pbiA9IDI1NSAtIDIqNjAsCisJLmRhY192b2x1bWVfbWF4ID0gMjU1LAorCS5mdW5jdGlvbl9mbGFncyA9IE9YWUdFTl9GVU5DVElPTl9TUEksCisJLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCisJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCit9OworCitpbnQgX19kZXZpbml0IGdldF94b25hcl93bTg3eDZfbW9kZWwoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzd2l0Y2ggKGlkLT5zdWJkZXZpY2UpIHsKKwljYXNlIDB4ODM4ZToKKwkJY2hpcC0+bW9kZWwgPSBtb2RlbF94b25hcl9kczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYwppbmRleCA4MzNlOWM3Li45NWNmZGUyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYwpAQCAtOTQsNyArOTQsNyBAQAogCVBDSV9JRF9MQVNUCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGN4aHJfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGN4aHJfaWRzKSA9IHsKIAl7IDB4MTBiNSwgMHg5NjU2LCAweDEzNjksIDB4YjAwMSwgMCwgMCwgUENJX0lEX1ZYODgySFIsIH0sCiAJeyAweDEwYjUsIDB4OTY1NiwgMHgxMzY5LCAweGIxMDEsIDAsIDAsIFBDSV9JRF9QQ1g4ODJIUiwgfSwKIAl7IDB4MTBiNSwgMHg5NjU2LCAweDEzNjksIDB4YjIwMSwgMCwgMCwgUENJX0lEX1ZYODgxSFIsIH0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMgYi9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKaW5kZXggZTY2ZWYyYi4uOTYwYTIyNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCisrKyBiL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYwpAQCAtNTA2LDcgKzUwNiw3IEBACiAvKgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfcmlwdGlkZV9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbmRfcmlwdGlkZV9pZHMpID0gewogCXsgUENJX0RFVklDRSgweDEyN2EsIDB4NDMxMCkgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMjdhLCAweDQzMjApIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTI3YSwgMHg0MzMwKSB9LApAQCAtNTE1LDcgKzUxNSw3IEBACiB9OwogCiAjaWZkZWYgU1VQUE9SVF9KT1lTVElDSwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9yaXB0aWRlX2pveXN0aWNrX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3JpcHRpZGVfam95c3RpY2tfaWRzKSA9IHsKIAl7IFBDSV9ERVZJQ0UoMHgxMjdhLCAweDQzMTIpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTI3YSwgMHg0MzIyKSB9LAogCXsgUENJX0RFVklDRSgweDEyN2EsIDB4NDMzMikgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWUzMi5jIGIvc291bmQvcGNpL3JtZTMyLmMKaW5kZXggZjk3N2RiYS4uZDVlMWM2ZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTMyLmMKKysrIGIvc291bmQvcGNpL3JtZTMyLmMKQEAgLTIyNiw3ICsyMjYsNyBAQAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKnNwZGlmX2N0bDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfcm1lMzJfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3JtZTMyX2lkcykgPSB7CiAJe1BDSV9WREVWSUNFKFhJTElOWF9STUUsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMiksIDAsfSwKIAl7UENJX1ZERVZJQ0UoWElMSU5YX1JNRSwgUENJX0RFVklDRV9JRF9STUVfRElHSTMyXzgpLCAwLH0sCiAJe1BDSV9WREVWSUNFKFhJTElOWF9STUUsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMl9QUk8pLCAwLH0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTYuYyBiL3NvdW5kL3BjaS9ybWU5Ni5jCmluZGV4IDJiYTVjMGYuLjlkNTI1MmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5Ni5jCisrKyBiL3NvdW5kL3BjaS9ybWU5Ni5jCkBAIC0yMzEsNyArMjMxLDcgQEAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICAgKnNwZGlmX2N0bDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfcm1lOTZfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3JtZTk2X2lkcykgPSB7CiAJeyBQQ0lfVkRFVklDRShYSUxJTlgsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5NiksIDAsIH0sCiAJeyBQQ0lfVkRFVklDRShYSUxJTlgsIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5Nl84KSwgMCwgfSwKIAl7IFBDSV9WREVWSUNFKFhJTElOWCwgUENJX0RFVklDRV9JRF9STUVfRElHSTk2XzhfUFJPKSwgMCwgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYwppbmRleCA3YmI4MjdjLi41MmM2ZWI1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCkBAIC01ODUsNyArNTg1LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2hkc3BfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX2hkc3BfaWRzKSA9IHsKIAl7CiAJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1hJTElOWCwKIAkJLmRldmljZSA9IFBDSV9ERVZJQ0VfSURfWElMSU5YX0hBTU1FUkZBTExfRFNQLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKaW5kZXggYTFiMTBkMS4uM2Q3MmMxZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCkBAIC01MTIsNyArNTEyLDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9oZHNwbV9pZHNbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9oZHNwbV9pZHMpID0gewogCXsKIAkgLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfWElMSU5YLAogCSAuZGV2aWNlID0gUENJX0RFVklDRV9JRF9YSUxJTlhfSEFNTUVSRkFMTF9EU1BfTUFESSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYyBiL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYwppbmRleCBiYzUzOWFiLi40NGEzZTJkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCkBAIC0zMTQsNyArMzE0LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3JtZTk2NTJfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3JtZTk2NTJfaWRzKSA9IHsKIAl7CiAJCS52ZW5kb3IJICAgPSAweDEwZWUsCiAJCS5kZXZpY2UJICAgPSAweDNmYzQsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc2lzNzAxOS5jIGIvc291bmQvcGNpL3NpczcwMTkuYwppbmRleCAxYTVmZjA2Li43ZTNlOGZiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc2lzNzAxOS5jCisrKyBiL3NvdW5kL3BjaS9zaXM3MDE5LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIG1vZHVsZV9wYXJhbShlbmFibGUsIGJvb2wsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgU2lTNzAxOSBBdWRpbyBBY2NlbGVyYXRvci4iKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9zaXM3MDE5X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9zaXM3MDE5X2lkcykgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0ksIDB4NzAxOSkgfSwKIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jIGIvc291bmQvcGNpL3NvbmljdmliZXMuYwppbmRleCAxZjY0MDZjLi4zMzdiOWZhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCisrKyBiL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3NvbmljX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF9zb25pY19pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoUzMsIDB4Y2EwMCksIDAsIH0sCiAgICAgICAgIHsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYwppbmRleCAyMWNlZjk3Li42ZDA1ODE4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMKKysrIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jCkBAIC02Miw3ICs2Miw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkod2F2ZXRhYmxlX3NpemUsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdhdmV0YWJsZV9zaXplLCAiTWF4aW11bSBtZW1vcnkgc2l6ZSBpbiBrQiBmb3Igd2F2ZXRhYmxlIHN5bnRoLiIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3RyaWRlbnRfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3RyaWRlbnRfaWRzKSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1RSSURFTlQsIFBDSV9ERVZJQ0VfSURfVFJJREVOVF80RFdBVkVfRFgpLCAKIAkJUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwgMHhmZmZmMDAsIDB9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVFJJREVOVCwgUENJX0RFVklDRV9JRF9UUklERU5UXzREV0FWRV9OWCksIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHguYyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKaW5kZXggOGEzMzJkMi4uN2U0OTRiNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHguYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCkBAIC00MDEsNyArNDAxLDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF92aWE4Mnh4X2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNuZF92aWE4Mnh4X2lkcykgPSB7CiAJLyogMHgxMTA2LCAweDMwNTggKi8KIAl7IFBDSV9WREVWSUNFKFZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNjg2XzUpLCBUWVBFX0NBUkRfVklBNjg2LCB9LAkvKiA2ODZBICovCiAJLyogMHgxMTA2LCAweDMwNTkgKi8KQEAgLTE3OTEsNiArMTc5MSwxMiBAQAogCQkudHlwZSA9IEFDOTdfVFVORV9IUF9PTkxZCiAJfSwKIAl7CisJCS5zdWJ2ZW5kb3IgPSAweDExMGEsCisJCS5zdWJkZXZpY2UgPSAweDAwNzksCisJCS5uYW1lID0gIkZ1aml0c3UgU2llbWVucyBEMTI4OSIsCisJCS50eXBlID0gQUM5N19UVU5FX0hQX09OTFkKKwl9LAorCXsKIAkJLnN1YnZlbmRvciA9IDB4MTAxOSwKIAkJLnN1YmRldmljZSA9IDB4MGE4MSwKIAkJLm5hbWUgPSAiRUNTIEs3VlRBMyIsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jIGIvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYwppbmRleCA0N2ViNjE1Li5mN2U4YmJiZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCkBAIC0yNjAsNyArMjYwLDcgQEAKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKnByb2NfZW50cnk7CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX3ZpYTgyeHhfbW9kZW1faWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3ZpYTgyeHhfbW9kZW1faWRzKSA9IHsKIAl7IFBDSV9WREVWSUNFKFZJQSwgMHgzMDY4KSwgVFlQRV9DQVJEX1ZJQTgyWFhfTU9ERU0sIH0sCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwppbmRleCBmYzkxMzZjLi45OWE5YTgxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdngyMjIvdngyMjIuYworKysgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwpAQCAtNjAsNyArNjAsNyBAQAogCVZYX1BDSV9WWDIyMl9ORVcKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfdngyMjJfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3Z4MjIyX2lkcykgPSB7CiAJeyAweDEwYjUsIDB4OTA1MCwgMHgxMzY5LCBQQ0lfQU5ZX0lELCAwLCAwLCBWWF9QQ0lfVlgyMjJfT0xELCB9LCAgIC8qIFBMWCAqLwogCXsgMHgxMGI1LCAweDkwMzAsIDB4MTM2OSwgUENJX0FOWV9JRCwgMCwgMCwgVlhfUENJX1ZYMjIyX05FVywgfSwgICAvKiBQTFggKi8KIAl7IDAsIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCmluZGV4IGU2YjE4YjkuLjgwYzY4MjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKKysrIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYwpAQCAtNjYsNyArNjYsNyBAQAogbW9kdWxlX3BhcmFtX2FycmF5KHJlYXJfc3dpdGNoLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmVhcl9zd2l0Y2gsICJFbmFibGUgc2hhcmVkIHJlYXIvbGluZS1pbiBzd2l0Y2giKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF95bWZwY2lfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc25kX3ltZnBjaV9pZHMpID0gewogCXsgUENJX1ZERVZJQ0UoWUFNQUhBLCAweDAwMDQpLCAwLCB9LCAgIC8qIFlNRjcyNCAqLwogCXsgUENJX1ZERVZJQ0UoWUFNQUhBLCAweDAwMGQpLCAwLCB9LCAgIC8qIFlNRjcyNEYgKi8KIAl7IFBDSV9WREVWSUNFKFlBTUFIQSwgMHgwMDBhKSwgMCwgfSwgICAvKiBZTUY3NDAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmX3BjbS5jIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfcGNtLmMKaW5kZXggNWNmYTYwOC4uMGQ2NjhmNCAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfcGNtLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfcGNtLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgpAQCAtMjksNDkgKzI4LDYgQEAKIAogCiAvKgotICogd2UgdXNlIGEgdm1hbGxvYydlZCAoc2ctKWJ1ZmZlcgotICovCi0KLS8qIGdldCB0aGUgcGh5c2ljYWwgcGFnZSBwb2ludGVyIG9uIHRoZSBnaXZlbiBvZmZzZXQgKi8KLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicywgdW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0Jdm9pZCAqcGFnZXB0ciA9IHN1YnMtPnJ1bnRpbWUtPmRtYV9hcmVhICsgb2Zmc2V0OwotCXJldHVybiB2bWFsbG9jX3RvX3BhZ2UocGFnZXB0cik7Ci19Ci0KLS8qCi0gKiBod19wYXJhbXMgY2FsbGJhY2sKLSAqIE5PVEU6IHRoaXMgbWF5IGJlIGNhbGxlZCBub3Qgb25seSBvbmNlIHBlciBwY20gb3BlbiEKLSAqLwotc3RhdGljIGludCBzbmRfcGNtX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vicywgc2l6ZV90IHNpemUpCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnMtPnJ1bnRpbWU7Ci0JaWYgKHJ1bnRpbWUtPmRtYV9hcmVhKSB7Ci0JCWlmIChydW50aW1lLT5kbWFfYnl0ZXMgPj0gc2l6ZSkKLQkJCXJldHVybiAwOyAvKiBhbHJlYWR5IGVub3VnaCBsYXJnZSAqLwotCQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7Ci0JfQotCXJ1bnRpbWUtPmRtYV9hcmVhID0gdm1hbGxvY18zMl91c2VyKHNpemUpOwotCWlmICghIHJ1bnRpbWUtPmRtYV9hcmVhKQotCQlyZXR1cm4gLUVOT01FTTsKLQlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOwotCXJldHVybiAwOwotfQotCi0vKgotICogaHdfZnJlZSBjYWxsYmFjawotICogTk9URTogdGhpcyBtYXkgYmUgY2FsbGVkIG5vdCBvbmx5IG9uY2UgcGVyIHBjbSBvcGVuIQotICovCi1zdGF0aWMgaW50IHNuZF9wY21fZnJlZV92bWFsbG9jX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMpCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnMtPnJ1bnRpbWU7Ci0KLQl2ZnJlZShydW50aW1lLT5kbWFfYXJlYSk7Ci0JcnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOwotCXJldHVybiAwOwotfQotCi0vKgogICogY2xlYXIgdGhlIFNSQU0gY29udGVudHMKICAqLwogc3RhdGljIGludCBwZGFjZl9wY21fY2xlYXJfc3JhbShzdHJ1Y3Qgc25kX3BkYWNmICpjaGlwKQpAQCAtMTQ3LDcgKzEwMyw4IEBACiBzdGF0aWMgaW50IHBkYWNmX3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzLAogCQkJCSAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCiB7Ci0JcmV0dXJuIHNuZF9wY21fYWxsb2Nfdm1hbGxvY19idWZmZXIoc3VicywgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlyZXR1cm4gc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY18zMl9idWZmZXIKKwkJCQkJKHN1YnMsIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CiB9CiAKIC8qCkBAIC0xNTUsNyArMTEyLDcgQEAKICAqLwogc3RhdGljIGludCBwZGFjZl9wY21faHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMpCiB7Ci0JcmV0dXJuIHNuZF9wY21fZnJlZV92bWFsbG9jX2J1ZmZlcihzdWJzKTsKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV92bWFsbG9jX2J1ZmZlcihzdWJzKTsKIH0KIAogLyoKQEAgLTMxOSw3ICsyNzYsOCBAQAogCS5wcmVwYXJlID0JcGRhY2ZfcGNtX3ByZXBhcmUsCiAJLnRyaWdnZXIgPQlwZGFjZl9wY21fdHJpZ2dlciwKIAkucG9pbnRlciA9CXBkYWNmX3BjbV9jYXB0dXJlX3BvaW50ZXIsCi0JLnBhZ2UgPQkJc25kX3BjbV9nZXRfdm1hbGxvY19wYWdlLAorCS5wYWdlID0JCXNuZF9wY21fbGliX2dldF92bWFsbG9jX3BhZ2UsCisJLm1tYXAgPQkJc25kX3BjbV9saWJfbW1hcF92bWFsbG9jLAogfTsKIAogCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvYXdhY3MuYyBiL3NvdW5kL3BwYy9hd2Fjcy5jCmluZGV4IDJlMTU2NDYuLmIzNjY3OTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9hd2Fjcy5jCisrKyBiL3NvdW5kL3BwYy9hd2Fjcy5jCkBAIC03NTEsOCArNzUxLDggQEAKIAogc3RhdGljIHZvaWQgc25kX3BtYWNfYXdhY3NfcmVzdW1lKHN0cnVjdCBzbmRfcG1hYyAqY2hpcCkKIHsKLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDEiKQotCSAgICB8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMiIpKSB7CisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywxIikKKwkgICAgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDIiKSkgewogCQltc2xlZXAoMTAwKTsKIAkJc25kX3BtYWNfYXdhY3Nfd3JpdGVfcmVnKGNoaXAsIDEsCiAJCQljaGlwLT5hd2Fjc19yZWdbMV0gJiB+TUFTS19QQVJPVVQpOwpAQCAtNzgwLDE2ICs3ODAsMTYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAotI2RlZmluZSBJU19QTTc1MDAgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCw3NTAwIikgXAotCQl8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsODUwMCIpIFwKLQkJfHwgbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDk1MDAiKSkKLSNkZWZpbmUgSVNfUE01NTAwIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsZTQxMSIpKQotI2RlZmluZSBJU19CRUlHRSAobWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLEdvc3NhbWVyIikpCi0jZGVmaW5lIElTX0lNQUMxIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwxIikpCi0jZGVmaW5lIElTX0lNQUMyIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMiwyIikgXAotCQl8fCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNCwxIikpCi0jZGVmaW5lIElTX0c0QUdQIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjMywxIikpCi0jZGVmaW5lIElTX0xPTUJBUkQgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikpCisjZGVmaW5lIElTX1BNNzUwMCAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDc1MDAiKSBcCisJCXx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCw4NTAwIikgXAorCQl8fCBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsOTUwMCIpKQorI2RlZmluZSBJU19QTTU1MDAgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxlNDExIikpCisjZGVmaW5lIElTX0JFSUdFIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsR29zc2FtZXIiKSkKKyNkZWZpbmUgSVNfSU1BQzEgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMyLDEiKSkKKyNkZWZpbmUgSVNfSU1BQzIgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMyLDIiKSBcCisJCXx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM0LDEiKSkKKyNkZWZpbmUgSVNfRzRBR1AgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMzLDEiKSkKKyNkZWZpbmUgSVNfTE9NQkFSRCAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKSkKIAogc3RhdGljIGludCBpbWFjMSwgaW1hYzI7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9idXJndW5keS5jIGIvc291bmQvcHBjL2J1cmd1bmR5LmMKaW5kZXggMGFjY2ZlNC4uMWY3MmUxYyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL2J1cmd1bmR5LmMKKysrIGIvc291bmQvcHBjL2J1cmd1bmR5LmMKQEAgLTU4Miw3ICs1ODIsNyBAQAogc3RhdGljIHZvaWQgc25kX3BtYWNfYnVyZ3VuZHlfdXBkYXRlX2F1dG9tdXRlKHN0cnVjdCBzbmRfcG1hYyAqY2hpcCwgaW50IGRvX25vdGlmeSkKIHsKIAlpZiAoY2hpcC0+YXV0b19tdXRlKSB7Ci0JCWludCBpbWFjID0gbWFjaGluZV9pc19jb21wYXRpYmxlKCJpTWFjIik7CisJCWludCBpbWFjID0gb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJpTWFjIik7CiAJCWludCByZWcsIG9yZWc7CiAJCXJlZyA9IG9yZWcgPSBzbmRfcG1hY19idXJndW5keV9yY2IoY2hpcCwKIAkJCQlNQVNLX0FERFJfQlVSR1VORFlfTU9SRV9PVVRQVVRFTkFCTEVTKTsKQEAgLTYyMCw3ICs2MjAsNyBAQAogICovCiBpbnQgX19kZXZpbml0IHNuZF9wbWFjX2J1cmd1bmR5X2luaXQoc3RydWN0IHNuZF9wbWFjICpjaGlwKQogewotCWludCBpbWFjID0gbWFjaGluZV9pc19jb21wYXRpYmxlKCJpTWFjIik7CisJaW50IGltYWMgPSBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoImlNYWMiKTsKIAlpbnQgaSwgZXJyOwogCiAJLyogQ2hlY2tzIHRvIHNlZSB0aGUgY2hpcCBpcyBhbGl2ZSBhbmQga2lja2luZyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3BtYWMuYyBiL3NvdW5kL3BwYy9wbWFjLmMKaW5kZXggN2JjNDkyZS4uODUwODExNyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3BtYWMuYworKysgYi9zb3VuZC9wcGMvcG1hYy5jCkBAIC05MjIsMTEgKzkyMiwxMSBAQAogCX0KIAogCS8qIGl0IHNlZW1zIHRoZSBQaXNtbyAmIGlCb29rIGNhbid0IGJ5dGUtc3dhcCBpbiBoYXJkd2FyZS4gKi8KLQlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDEiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMSIpIHx8CisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMiwxIikpCiAJCWNoaXAtPmNhbl9ieXRlX3N3YXAgPSAwIDsKIAotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKQorCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazIsMSIpKQogCQljaGlwLT5jYW5fZHVwbGV4ID0gMDsKIH0KIApAQCAtOTU5LDExICs5NTksMTEgQEAKIAljaGlwLT5jb250cm9sX21hc2sgPSBNQVNLX0lFUEMgfCBNQVNLX0lFRSB8IDB4MTE7IC8qIGRlZmF1bHQgKi8KIAogCS8qIGNoZWNrIG1hY2hpbmUgdHlwZSAqLwotCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzQwMC8yNDAwIikKLQkgICAgfHwgbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDM1MDAiKSkKKwlpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDM0MDAvMjQwMCIpCisJICAgIHx8IG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNTAwIikpCiAJCWNoaXAtPmlzX3Bib29rXzM0MDAgPSAxOwotCWVsc2UgaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikKLQkJIHx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCxQb3dlckJvb2sxOTk4IikpCisJZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2sxLDEiKQorCQkgfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFBvd2VyQm9vazE5OTgiKSkKIAkJY2hpcC0+aXNfcGJvb2tfRzMgPSAxOwogCWNoaXAtPm5vZGUgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiYXdhY3MiKTsKIAlzb3VuZCA9IG9mX25vZGVfZ2V0KGNoaXAtPm5vZGUpOwpAQCAtMTAzMyw4ICsxMDMzLDggQEAKIAl9CiAJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHNvdW5kLCAidHVtYmxlciIpKSB7CiAJCWNoaXAtPm1vZGVsID0gUE1BQ19UVU1CTEVSOwotCQljaGlwLT5jYW5fY2FwdHVyZSA9IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM0LDIiKQotCQkJCXx8IG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rNCwxIik7CisJCWNoaXAtPmNhbl9jYXB0dXJlID0gb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzQsMiIpCisJCQkJfHwgb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2s0LDEiKTsKIAkJY2hpcC0+Y2FuX2R1cGxleCA9IDA7CiAJCS8vIGNoaXAtPmNhbl9ieXRlX3N3YXAgPSAwOyAvKiBGSVhNRTogY2hlY2sgdGhpcyAqLwogCQljaGlwLT5udW1fZnJlcXMgPSBBUlJBWV9TSVpFKHR1bWJsZXJfZnJlcXMpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F1MXgvS2NvbmZpZyBiL3NvdW5kL3NvYy9hdTF4L0tjb25maWcKaW5kZXggNDEwYTg5My4uNGI2NzE0MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F1MXgvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvYXUxeC9LY29uZmlnCkBAIC0yMiwxMSArMjIsMTMgQEAKICMjCiAjIyBCb2FyZHMKICMjCi1jb25maWcgU05EX1NPQ19TQU1QTEVfUFNDX0FDOTcKLQl0cmlzdGF0ZSAiU2FtcGxlIEF1MTJ4MC9BdTE1NTAgUFNDIEFDOTcgc291bmQgbWFjaGluZSIKK2NvbmZpZyBTTkRfU09DX0RCMTIwMAorCXRyaXN0YXRlICJEQjEyMDAgQUM5NytJMlMgYXVkaW8gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNORF9TT0NfQVUxWFBTQwogCXNlbGVjdCBTTkRfU09DX0FVMVhQU0NfQUM5NwogCXNlbGVjdCBTTkRfU09DX0FDOTdfQ09ERUMKKwlzZWxlY3QgU05EX1NPQ19BVTFYUFNDX0kyUworCXNlbGVjdCBTTkRfU09DX1dNODczMQogCWhlbHAKLQkgIFRoaXMgaXMgYSBzYW1wbGUgQUM5NyBzb3VuZCBtYWNoaW5lIGZvciB1c2UgaW4gQXUxMngwL0F1MTU1MAotCSAgYmFzZWQgc3lzdGVtcyB3aGljaCBoYXZlIGF1ZGlvIG9uIFBTQzEgKGUuZy4gRGIxMjAwIGRlbW9ib2FyZCkuCisJICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gZW5hYmxlIGF1ZGlvIChBQzk3IG9yIEkyUykgb24gdGhlCisJICBBbGNoZW15L0FNRC9STUkgREIxMjAwIGRlbW9ib2FyZC4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L01ha2VmaWxlIGIvc291bmQvc29jL2F1MXgvTWFrZWZpbGUKaW5kZXggNmM2OTUwYi4uMTY4NzMwNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F1MXgvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2F1MXgvTWFrZWZpbGUKQEAgLTgsNiArOCw2IEBACiBvYmotJChDT05GSUdfU05EX1NPQ19BVTFYUFNDX0FDOTcpICs9IHNuZC1zb2MtYXUxeHBzYy1hYzk3Lm8KIAogIyBCb2FyZHMKLXNuZC1zb2Mtc2FtcGxlLWFjOTctb2JqcyA6PSBzYW1wbGUtYWM5Ny5vCitzbmQtc29jLWRiMTIwMC1vYmpzIDo9IGRiMTIwMC5vCiAKLW9iai0kKENPTkZJR19TTkRfU09DX1NBTVBMRV9QU0NfQUM5NykgKz0gc25kLXNvYy1zYW1wbGUtYWM5Ny5vCitvYmotJChDT05GSUdfU05EX1NPQ19EQjEyMDApICs9IHNuZC1zb2MtZGIxMjAwLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L2RiMTIwMC5jIGIvc291bmQvc29jL2F1MXgvZGIxMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmN2JlMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9hdTF4L2RiMTIwMC5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogREIxMjAwIEFTb0MgYXVkaW8gZmFicmljIHN1cHBvcnQgY29kZS4KKyAqCisgKiAoYykgMjAwOC05IE1hbnVlbCBMYXVzcyA8bWFudWVsLmxhdXNzQGdtYWlsLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtZGIxeDAwL2Jjc3IuaD4KKworI2luY2x1ZGUgIi4uL2NvZGVjcy9hYzk3LmgiCisjaW5jbHVkZSAiLi4vY29kZWNzL3dtODczMS5oIgorI2luY2x1ZGUgInBzYy5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEFDOTcgUEFSVCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGRiMTIwMF9hYzk3X2RhaSA9IHsKKwkubmFtZQkJPSAiQUM5NyIsCisJLnN0cmVhbV9uYW1lCT0gIkFDOTcgSGlGaSIsCisJLmNwdV9kYWkJPSAmYXUxeHBzY19hYzk3X2RhaSwKKwkuY29kZWNfZGFpCT0gJmFjOTdfZGFpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgZGIxMjAwX2FjOTdfbWFjaGluZSA9IHsKKwkubmFtZQkJPSAiREIxMjAwX0FDOTciLAorCS5kYWlfbGluawk9ICZkYjEyMDBfYWM5N19kYWksCisJLm51bV9saW5rcwk9IDEsCisJLnBsYXRmb3JtCT0gJmF1MXhwc2Nfc29jX3BsYXRmb3JtLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBkYjEyMDBfYWM5N19kZXZkYXRhID0geworCS5jYXJkCQk9ICZkYjEyMDBfYWM5N19tYWNoaW5lLAorCS5jb2RlY19kZXYJPSAmc29jX2NvZGVjX2Rldl9hYzk3LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBJMlMgUEFSVCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBkYjEyMDBfaTJzX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKwlpbnQgcmV0OworCisJLyogV004NzMxIGhhcyBpdHMgb3duIDEyTUh6IGNyeXN0YWwgKi8KKwlzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgV004NzMxX1NZU0NMSywKKwkJCQkxMjAwMDAwMCwgU05EX1NPQ19DTE9DS19JTik7CisKKwkvKiBjb2RlYyBpcyBiaXRjbG9jayBhbmQgbHJjbGsgbWFzdGVyICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0xFRlRfSiB8CisJCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8IFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfTEVGVF9KIHwKKwkJCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gMDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGRiMTIwMF9pMnNfd204NzMxX29wcyA9IHsKKwkuc3RhcnR1cAk9IGRiMTIwMF9pMnNfc3RhcnR1cCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBkYjEyMDBfaTJzX2RhaSA9IHsKKwkubmFtZQkJPSAiV004NzMxIiwKKwkuc3RyZWFtX25hbWUJPSAiV004NzMxIFBDTSIsCisJLmNwdV9kYWkJPSAmYXUxeHBzY19pMnNfZGFpLAorCS5jb2RlY19kYWkJPSAmd204NzMxX2RhaSwKKwkub3BzCQk9ICZkYjEyMDBfaTJzX3dtODczMV9vcHMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBkYjEyMDBfaTJzX21hY2hpbmUgPSB7CisJLm5hbWUJCT0gIkRCMTIwMF9JMlMiLAorCS5kYWlfbGluawk9ICZkYjEyMDBfaTJzX2RhaSwKKwkubnVtX2xpbmtzCT0gMSwKKwkucGxhdGZvcm0JPSAmYXUxeHBzY19zb2NfcGxhdGZvcm0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGRiMTIwMF9pMnNfZGV2ZGF0YSA9IHsKKwkuY2FyZAkJPSAmZGIxMjAwX2kyc19tYWNoaW5lLAorCS5jb2RlY19kZXYJPSAmc29jX2NvZGVjX2Rldl93bTg3MzEsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENPTU1PTiBQQVJUICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGIxMjAwX2Fzb2NfZGV2OworCitzdGF0aWMgaW50IF9faW5pdCBkYjEyMDBfYXVkaW9fbG9hZCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSAtRU5PTUVNOworCWRiMTIwMF9hc29jX2RldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghZGIxMjAwX2Fzb2NfZGV2KQorCQlnb3RvIG91dDsKKworCS8qIERCMTIwMCBib2FyZCBzZXR1cCBzZXQgUFNDMU1VWCB0byBwcmVmZXJyZWQgYXVkaW8gZGV2aWNlICovCisJaWYgKGJjc3JfcmVhZChCQ1NSX1JFU0VUUykgJiBCQ1NSX1JFU0VUU19QU0MxTVVYKQorCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkYjEyMDBfYXNvY19kZXYsICZkYjEyMDBfaTJzX2RldmRhdGEpOworCWVsc2UKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGIxMjAwX2Fzb2NfZGV2LCAmZGIxMjAwX2FjOTdfZGV2ZGF0YSk7CisKKwlkYjEyMDBfYWM5N19kZXZkYXRhLmRldiA9ICZkYjEyMDBfYXNvY19kZXYtPmRldjsKKwlkYjEyMDBfaTJzX2RldmRhdGEuZGV2ID0gJmRiMTIwMF9hc29jX2Rldi0+ZGV2OworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoZGIxMjAwX2Fzb2NfZGV2KTsKKworCWlmIChyZXQpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChkYjEyMDBfYXNvY19kZXYpOworCQlkYjEyMDBfYXNvY19kZXYgPSBOVUxMOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZGIxMjAwX2F1ZGlvX3VubG9hZCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRiMTIwMF9hc29jX2Rldik7Cit9CisKK21vZHVsZV9pbml0KGRiMTIwMF9hdWRpb19sb2FkKTsKK21vZHVsZV9leGl0KGRiMTIwMF9hdWRpb191bmxvYWQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRCMTIwMCBBU29DIGF1ZGlvIHN1cHBvcnQiKTsKK01PRFVMRV9BVVRIT1IoIk1hbnVlbCBMYXVzcyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F1MXgvZGJkbWEyLmMgYi9zb3VuZC9zb2MvYXUxeC9kYmRtYTIuYwppbmRleCAxOWU0ZDM3Li42ZDlmNGM2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXUxeC9kYmRtYTIuYworKysgYi9zb3VuZC9zb2MvYXUxeC9kYmRtYTIuYwpAQCAtNTEsOCArNTEsOCBAQAogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCXVuc2lnbmVkIGxvbmcgY3Vycl9wZXJpb2Q7CS8qIGN1cnJlbnQgc2VnbWVudCBERE1BIGlzIHdvcmtpbmcgb24gKi8KIAl1bnNpZ25lZCBsb25nIHFfcGVyaW9kOwkJLyogcXVldWUgcGVyaW9kKHMpICovCi0JdW5zaWduZWQgbG9uZyBkbWFfYXJlYTsJCS8qIGFkZHJlc3Mgb2YgcXVldWVkIERNQSBhcmVhICovCi0JdW5zaWduZWQgbG9uZyBkbWFfYXJlYV9zOwkvKiBzdGFydCBhZGRyZXNzIG9mIERNQSBhcmVhICovCisJZG1hX2FkZHJfdCBkbWFfYXJlYTsJCS8qIGFkZHJlc3Mgb2YgcXVldWVkIERNQSBhcmVhICovCisJZG1hX2FkZHJfdCBkbWFfYXJlYV9zOwkJLyogc3RhcnQgYWRkcmVzcyBvZiBETUEgYXJlYSAqLwogCXVuc2lnbmVkIGxvbmcgcG9zOwkJLyogY3VycmVudCBieXRlIHBvc2l0aW9uIGJlaW5nIHBsYXllZCAqLwogCXVuc2lnbmVkIGxvbmcgcGVyaW9kczsJCS8qIG51bWJlciBvZiBTRyBzZWdtZW50cyBpbiB0b3RhbCAqLwogCXVuc2lnbmVkIGxvbmcgcGVyaW9kX2J5dGVzOwkvKiBzaXplIGluIGJ5dGVzIG9mIG9uZSBTRyBzZWdtZW50ICovCkBAIC05NCw4ICs5NCw3IEBACiAKIHN0YXRpYyB2b2lkIGF1MXhfcGNtX3F1ZXVlX3R4KHN0cnVjdCBhdTF4cHNjX2F1ZGlvX2RtYWRhdGEgKmNkKQogewotCWF1MXh4eF9kYmRtYV9wdXRfc291cmNlX2ZsYWdzKGNkLT5kZG1hX2NoYW4sCi0JCQkJKHZvaWQgKilwaHlzX3RvX3ZpcnQoY2QtPmRtYV9hcmVhKSwKKwlhdTF4eHhfZGJkbWFfcHV0X3NvdXJjZShjZC0+ZGRtYV9jaGFuLCBjZC0+ZG1hX2FyZWEsCiAJCQkJY2QtPnBlcmlvZF9ieXRlcywgRERNQV9GTEFHU19JRSk7CiAKIAkvKiB1cGRhdGUgbmV4dC10by1xdWV1ZSBwZXJpb2QgKi8KQEAgLTEwOSw5ICsxMDgsOCBAQAogCiBzdGF0aWMgdm9pZCBhdTF4X3BjbV9xdWV1ZV9yeChzdHJ1Y3QgYXUxeHBzY19hdWRpb19kbWFkYXRhICpjZCkKIHsKLQlhdTF4eHhfZGJkbWFfcHV0X2Rlc3RfZmxhZ3MoY2QtPmRkbWFfY2hhbiwKLQkJCQkodm9pZCAqKXBoeXNfdG9fdmlydChjZC0+ZG1hX2FyZWEpLAotCQkJCWNkLT5wZXJpb2RfYnl0ZXMsIERETUFfRkxBR1NfSUUpOworCWF1MXh4eF9kYmRtYV9wdXRfZGVzdChjZC0+ZGRtYV9jaGFuLCBjZC0+ZG1hX2FyZWEsCisJCQkgICAgICBjZC0+cGVyaW9kX2J5dGVzLCBERE1BX0ZMQUdTX0lFKTsKIAogCS8qIHVwZGF0ZSBuZXh0LXRvLXF1ZXVlIHBlcmlvZCAqLwogCSsrY2QtPnFfcGVyaW9kOwpAQCAtMjMzLDcgKzIzMSw3IEBACiAJcGNkLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CiAJcGNkLT5wZXJpb2RfYnl0ZXMgPSBwYXJhbXNfcGVyaW9kX2J5dGVzKHBhcmFtcyk7CiAJcGNkLT5wZXJpb2RzID0gcGFyYW1zX3BlcmlvZHMocGFyYW1zKTsKLQlwY2QtPmRtYV9hcmVhX3MgPSBwY2QtPmRtYV9hcmVhID0gKHVuc2lnbmVkIGxvbmcpcnVudGltZS0+ZG1hX2FkZHI7CisJcGNkLT5kbWFfYXJlYV9zID0gcGNkLT5kbWFfYXJlYSA9IHJ1bnRpbWUtPmRtYV9hZGRyOwogCXBjZC0+cV9wZXJpb2QgPSAwOwogCXBjZC0+Y3Vycl9wZXJpb2QgPSAwOwogCXBjZC0+cG9zID0gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdTF4L3NhbXBsZS1hYzk3LmMgYi9zb3VuZC9zb2MvYXUxeC9zYW1wbGUtYWM5Ny5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzY4M2ViLi4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9hdTF4L3NhbXBsZS1hYzk3LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqIFNhbXBsZSBBdTEyeDAvQXUxNTUwIFBTQyBBQzk3IHNvdW5kIG1hY2hpbmUuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggTWFudWVsIExhdXNzIDxtYW5vQHJvYXJpbmVsay5ob21lbGludXgubmV0PgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvdXRsaW5lZCBpbiB0aGUgZmlsZSBDT1BZSU5HIGF0IHRoZSByb290IG9mIHRoaXMKLSAqICBzb3VyY2UgYXJjaGl2ZS4KLSAqCi0gKiBUaGlzIGlzIGEgdmVyeSBnZW5lcmljIEFDOTcgc291bmQgbWFjaGluZSBkcml2ZXIgZm9yIGJvYXJkcyB3aGljaAotICogaGF2ZSAoQUM5NykgYXVkaW8gYXQgUFNDMSAoZS5nLiBEQjEyMDAgZGVtb2JvYXJkcykuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmg+Ci0KLSNpbmNsdWRlICIuLi9jb2RlY3MvYWM5Ny5oIgotI2luY2x1ZGUgInBzYy5oIgotCi1zdGF0aWMgaW50IGF1MXhwc2Nfc2FtcGxlX2FjOTdfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgYXUxeHBzY19zYW1wbGVfYWM5N19kYWkgPSB7Ci0JLm5hbWUJCT0gIkFDOTciLAotCS5zdHJlYW1fbmFtZQk9ICJBQzk3IEhpRmkiLAotCS5jcHVfZGFpCT0gJmF1MXhwc2NfYWM5N19kYWksCS8qIHNlZSBwc2MtYWM5Ny5jICovCi0JLmNvZGVjX2RhaQk9ICZhYzk3X2RhaSwJCS8qIHNlZSBjb2RlY3MvYWM5Ny5jICovCi0JLmluaXQJCT0gYXUxeHBzY19zYW1wbGVfYWM5N19pbml0LAotCS5vcHMJCT0gTlVMTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGF1MXhwc2Nfc2FtcGxlX2FjOTdfbWFjaGluZSA9IHsKLQkubmFtZQkJPSAiQXUxeHh4IFBTQyBBQzk3IEF1ZGlvIiwKLQkuZGFpX2xpbmsJPSAmYXUxeHBzY19zYW1wbGVfYWM5N19kYWksCi0JLm51bV9saW5rcwk9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2ZGF0YSA9IHsKLQkuY2FyZAkJPSAmYXUxeHBzY19zYW1wbGVfYWM5N19tYWNoaW5lLAotCS5wbGF0Zm9ybQk9ICZhdTF4cHNjX3NvY19wbGF0Zm9ybSwgLyogc2VlIGRiZG1hMi5jICovCi0JLmNvZGVjX2Rldgk9ICZzb2NfY29kZWNfZGV2X2FjOTcsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGF1MXhwc2NfcHNjMV9yZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IENQSFlTQUREUihQU0MxX0JBU0VfQUREUiksCi0JCS5lbmQJPSBDUEhZU0FERFIoUFNDMV9CQVNFX0FERFIpICsgMHgwMDBmZmZmZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0jaWZkZWYgQ09ORklHX1NPQ19BVTEyMDAKLQkJLnN0YXJ0CT0gQVUxMjAwX1BTQzFfSU5ULAotCQkuZW5kCT0gQVUxMjAwX1BTQzFfSU5ULAotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKLQkJLnN0YXJ0CT0gQVUxNTUwX1BTQzFfSU5ULAotCQkuZW5kCT0gQVUxNTUwX1BTQzFfSU5ULAotI2VuZGlmCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBEU0NSX0NNRDBfUFNDMV9UWCwKLQkJLmVuZAk9IERTQ1JfQ01EMF9QU0MxX1RYLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKLQl9LAotCVszXSA9IHsKLQkJLnN0YXJ0CT0gRFNDUl9DTUQwX1BTQzFfUlgsCi0JCS5lbmQJPSBEU0NSX0NNRDBfUFNDMV9SWCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdTF4cHNjX3NhbXBsZV9hYzk3X2RldjsKLQotc3RhdGljIGludCBfX2luaXQgYXUxeHBzY19zYW1wbGVfYWM5N19sb2FkKHZvaWQpCi17Ci0JaW50IHJldDsKLQotI2lmZGVmIENPTkZJR19TT0NfQVUxMjAwCi0JdW5zaWduZWQgbG9uZyBpbzsKLQotCS8qIG1vZGlmeSBzeXNfcGluZnVuYyBmb3IgQUM5NyBvbiBQU0MxICovCi0JaW8gPSBhdV9yZWFkbChTWVNfUElORlVOQyk7Ci0JaW8gfD0gU1lTX1BJTkZVTkNfUDFDOwotCWlvICY9IH4oU1lTX1BJTkZVTkNfUDFBIHwgU1lTX1BJTkZVTkNfUDFCKTsKLQlhdV93cml0ZWwoaW8sIFNZU19QSU5GVU5DKTsKLQlhdV9zeW5jKCk7Ci0jZW5kaWYKLQotCXJldCA9IC1FTk9NRU07Ci0KLQkvKiBzZXR1cCBQU0MgY2xvY2sgc291cmNlIGZvciBBQzk3IHBhcnQ6IGV4dGVybmFsIGNsb2NrIHByb3ZpZGVkCi0JICogYnkgY29kZWMuICBUaGUgcHNjLWFjOTcuYyBkcml2ZXIgZGVwZW5kcyBvbiB0aGlzIHNldHRpbmchCi0JICovCi0JYXVfd3JpdGVsKFBTQ19TRUxfQ0xLX1NFUkNMSywgUFNDMV9CQVNFX0FERFIgKyBQU0NfU0VMX09GRlNFVCk7Ci0JYXVfc3luYygpOwotCi0JYXUxeHBzY19zYW1wbGVfYWM5N19kZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKLQlpZiAoIWF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2KQotCQlnb3RvIG91dDsKLQotCWF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2LT5yZXNvdXJjZSA9Ci0JCWttZW1kdXAoYXUxeHBzY19wc2MxX3Jlcywgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKgotCQkJQVJSQVlfU0laRShhdTF4cHNjX3BzYzFfcmVzKSwgR0ZQX0tFUk5FTCk7Ci0JYXUxeHBzY19zYW1wbGVfYWM5N19kZXYtPm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGF1MXhwc2NfcHNjMV9yZXMpOwotCWF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2LT5pZCA9IDE7Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShhdTF4cHNjX3NhbXBsZV9hYzk3X2RldiwKLQkJCSAgICAgJmF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2ZGF0YSk7Ci0JYXUxeHBzY19zYW1wbGVfYWM5N19kZXZkYXRhLmRldiA9ICZhdTF4cHNjX3NhbXBsZV9hYzk3X2Rldi0+ZGV2OwotCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoYXUxeHBzY19zYW1wbGVfYWM5N19kZXYpOwotCi0JaWYgKHJldCkgewotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGF1MXhwc2Nfc2FtcGxlX2FjOTdfZGV2KTsKLQkJYXUxeHBzY19zYW1wbGVfYWM5N19kZXYgPSBOVUxMOwotCX0KLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBhdTF4cHNjX3NhbXBsZV9hYzk3X2V4aXQodm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihhdTF4cHNjX3NhbXBsZV9hYzk3X2Rldik7Ci19Ci0KLW1vZHVsZV9pbml0KGF1MXhwc2Nfc2FtcGxlX2FjOTdfbG9hZCk7Ci1tb2R1bGVfZXhpdChhdTF4cHNjX3NhbXBsZV9hYzk3X2V4aXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkF1MXh4eCBQU0Mgc2FtcGxlIEFDOTcgbWFjaGluZSIpOwotTU9EVUxFX0FVVEhPUigiTWFudWVsIExhdXNzIDxtYW5vQHJvYXJpbmVsay5ob21lbGludXgubmV0PiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTctcGNtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYwppbmRleCBjZjBkZmI3Li42N2NiZmU3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYwpAQCAtMzQ5LDkgKzM0OSw3IEBACiAJCQlzcG9ydF9oYW5kbGUtPnR4X2RtYV9idWYgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgXAogCQkJCXNpemUsICZzcG9ydF9oYW5kbGUtPnR4X2RtYV9waHksIEdGUF9LRVJORUwpOwogCQkJaWYgKCFzcG9ydF9oYW5kbGUtPnR4X2RtYV9idWYpIHsKLQkJCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHR4IGRtYSBcCi0JCQkJCWJ1ZiAtIFBsZWFzZSBpbmNyZWFzZSB1bmNhY2hlZCBETUEgXAotCQkJCQltZW1vcnkgcmVnaW9uXG4iKTsKKwkJCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHR4IGRtYSBidWYgLSBQbGVhc2UgaW5jcmVhc2UgdW5jYWNoZWQgRE1BIG1lbW9yeSByZWdpb25cbiIpOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfSBlbHNlCiAJCQkJbWVtc2V0KHNwb3J0X2hhbmRsZS0+dHhfZG1hX2J1ZiwgMCwgc2l6ZSk7CkBAIC0zNjIsOSArMzYwLDcgQEAKIAkJCXNwb3J0X2hhbmRsZS0+cnhfZG1hX2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBcCiAJCQkJc2l6ZSwgJnNwb3J0X2hhbmRsZS0+cnhfZG1hX3BoeSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXNwb3J0X2hhbmRsZS0+cnhfZG1hX2J1ZikgewotCQkJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcnggZG1hIFwKLQkJCQkJYnVmIC0gUGxlYXNlIGluY3JlYXNlIHVuY2FjaGVkIERNQSBcCi0JCQkJCW1lbW9yeSByZWdpb25cbiIpOworCQkJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcnggZG1hIGJ1ZiAtIFBsZWFzZSBpbmNyZWFzZSB1bmNhY2hlZCBETUEgbWVtb3J5IHJlZ2lvblxuIik7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9IGVsc2UKIAkJCQltZW1zZXQoc3BvcnRfaGFuZGxlLT5yeF9kbWFfYnVmLCAwLCBzaXplKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLXBjbS5jCmluZGV4IDYyZmJiODQuLmM2YzZhNGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMtcGNtLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy1wY20uYwpAQCAtMjA3LDggKzIwNyw3IEBACiAJYnVmLT5hcmVhID0gZG1hX2FsbG9jX2NvaGVyZW50KHBjbS0+Y2FyZC0+ZGV2LCBzaXplLAogCQkJJmJ1Zi0+YWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYtPmFyZWEpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZG1hIG1lbW9yeSBcCi0JCQlQbGVhc2UgaW5jcmVhc2UgdW5jYWNoZWQgRE1BIG1lbW9yeSByZWdpb25cbiIpOworCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgbWVtb3J5IC0gUGxlYXNlIGluY3JlYXNlIHVuY2FjaGVkIERNQSBtZW1vcnkgcmVnaW9uXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWJ1Zi0+Ynl0ZXMgPSBzaXplOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS1wY20uYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0tcGNtLmMKaW5kZXggYThjNzNjYi4uNWUwM2JiMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS1wY20uYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLXBjbS5jCkBAIC0yNDQsOCArMjQ0LDcgQEAKIAlidWYtPmFyZWEgPSBkbWFfYWxsb2NfY29oZXJlbnQocGNtLT5jYXJkLT5kZXYsIHNpemUgKiA0LAogCQkmYnVmLT5hZGRyLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1Zi0+YXJlYSkgewotCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgbWVtb3J5IFwKLQkJCVBsZWFzZSBpbmNyZWFzZSB1bmNhY2hlZCBETUEgbWVtb3J5IHJlZ2lvblxuIik7CisJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIGRtYSBtZW1vcnkgLSBQbGVhc2UgaW5jcmVhc2UgdW5jYWNoZWQgRE1BIG1lbW9yeSByZWdpb25cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJYnVmLT5ieXRlcyA9IHNpemU7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcgYi9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKaW5kZXggNTJiMDA1Zi4uMTc0M2Q1NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZwpAQCAtMjMsNiArMjMsNyBAQAogCXNlbGVjdCBTTkRfU09DX0FLNDY3MSBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19DUzQyNzAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfTUFYOTg3NyBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19EQTcyMTAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfUENNMzAwOAogCXNlbGVjdCBTTkRfU09DX1NQRElGCiAJc2VsZWN0IFNORF9TT0NfU1NNMjYwMiBpZiBJMkMKQEAgLTM1LDYgKzM2LDcgQEAKIAlzZWxlY3QgU05EX1NPQ19UV0w0MDMwIGlmIFRXTDQwMzBfQ09SRQogCXNlbGVjdCBTTkRfU09DX1VEQTEzNFgKIAlzZWxlY3QgU05EX1NPQ19VREExMzgwIGlmIEkyQworCXNlbGVjdCBTTkRfU09DX1dNMjAwMCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTgzNTAgaWYgTUZEX1dNODM1MAogCXNlbGVjdCBTTkRfU09DX1dNODQwMCBpZiBNRkRfV004NDAwCiAJc2VsZWN0IFNORF9TT0NfV004NTEwIGlmIFNORF9TT0NfSTJDX0FORF9TUEkKQEAgLTQ5LDE0ICs1MSwxOCBAQAogCXNlbGVjdCBTTkRfU09DX1dNODc3NiBpZiBTTkRfU09DX0kyQ19BTkRfU1BJCiAJc2VsZWN0IFNORF9TT0NfV004OTAwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODkwMyBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19XTTg5MDQgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTQwIGlmIEkyQworCXNlbGVjdCBTTkRfU09DX1dNODk1NSBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5NjAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfV004OTYxIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODk3MSBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTg5NzQgaWYgSTJDCisJc2VsZWN0IFNORF9TT0NfV004OTc4IGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODk4OCBpZiBTTkRfU09DX0kyQ19BTkRfU1BJCiAJc2VsZWN0IFNORF9TT0NfV004OTkwIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODk5MyBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19XTTg5OTQgaWYgTUZEX1dNODk5NAogCXNlbGVjdCBTTkRfU09DX1dNOTA4MSBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19XTTk3MDUgaWYgU05EX1NPQ19BQzk3X0JVUwogCXNlbGVjdCBTTkRfU09DX1dNOTcxMiBpZiBTTkRfU09DX0FDOTdfQlVTCkBAIC0xMTIsNiArMTE4LDkgQEAKIGNvbmZpZyBTTkRfU09DX0NTNDI3MAogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX0RBNzIxMAorICAgICAgICB0cmlzdGF0ZQorCiAjIENpcnJ1cyBMb2dpYyBDUzQyNzAgQ29kZWMgVkQgPSAzLjNWIEVycmF0YQogIyBTZWxlY3QgaWYgeW91IGFyZSBhZmZlY3RlZCBieSB0aGUgZXJyYXRhIHdoZXJlIHRoZSBwYXJ0IHdpbGwgbm90IGZ1bmN0aW9uCiAjIGlmIE1DTEsgZGl2aWRlLWJ5LTEuNSBpcyBzZWxlY3RlZCBhbmQgVkQgaXMgc2V0IHRvIDMuM1YuICBUaGUgZHJpdmVyIHdpbGwKQEAgLTIwMyw5ICsyMTIsMTUgQEAKIGNvbmZpZyBTTkRfU09DX1dNODkwMwogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX1dNODkwNAorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX1dNODk0MAogICAgICAgICB0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19XTTg5NTUKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19XTTg5NjAKIAl0cmlzdGF0ZQogCkBAIC0yMTgsNiArMjMzLDkgQEAKIGNvbmZpZyBTTkRfU09DX1dNODk3NAogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX1dNODk3OAorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX1dNODk4OAogCXRyaXN0YXRlCiAKQEAgLTIyNyw2ICsyNDUsOSBAQAogY29uZmlnIFNORF9TT0NfV004OTkzCiAJdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfV004OTk0CisJdHJpc3RhdGUKKwogY29uZmlnIFNORF9TT0NfV005MDgxCiAJdHJpc3RhdGUKIApAQCAtMjQ1LDMgKzI2Niw2IEBACiAKIGNvbmZpZyBTTkRfU09DX1RQQTYxMzBBMgogCXRyaXN0YXRlCisKK2NvbmZpZyBTTkRfU09DX1dNMjAwMAorCXRyaXN0YXRlCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlIGIvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQppbmRleCBkYmFlY2IxLi5kZDVjZTZkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKQEAgLTEwLDYgKzEwLDcgQEAKIHNuZC1zb2MtYWs0NjcxLW9ianMgOj0gYWs0NjcxLm8KIHNuZC1zb2MtY3M0MjcwLW9ianMgOj0gY3M0MjcwLm8KIHNuZC1zb2MtY3gyMDQ0Mi1vYmpzIDo9IGN4MjA0NDIubworc25kLXNvYy1kYTcyMTAtb2JqcyA6PSBkYTcyMTAubwogc25kLXNvYy1sMy1vYmpzIDo9IGwzLm8KIHNuZC1zb2MtcGNtMzAwOC1vYmpzIDo9IHBjbTMwMDgubwogc25kLXNvYy1zcGRpZi1vYmpzIDo9IHNwZGlmX3RyYW5zY2lldmVyLm8KQEAgLTM2LDE0ICszNywxOCBAQAogc25kLXNvYy13bTg3NzYtb2JqcyA6PSB3bTg3NzYubwogc25kLXNvYy13bTg5MDAtb2JqcyA6PSB3bTg5MDAubwogc25kLXNvYy13bTg5MDMtb2JqcyA6PSB3bTg5MDMubworc25kLXNvYy13bTg5MDQtb2JqcyA6PSB3bTg5MDQubwogc25kLXNvYy13bTg5NDAtb2JqcyA6PSB3bTg5NDAubworc25kLXNvYy13bTg5NTUtb2JqcyA6PSB3bTg5NTUubwogc25kLXNvYy13bTg5NjAtb2JqcyA6PSB3bTg5NjAubwogc25kLXNvYy13bTg5NjEtb2JqcyA6PSB3bTg5NjEubwogc25kLXNvYy13bTg5NzEtb2JqcyA6PSB3bTg5NzEubwogc25kLXNvYy13bTg5NzQtb2JqcyA6PSB3bTg5NzQubworc25kLXNvYy13bTg5Nzgtb2JqcyA6PSB3bTg5Nzgubwogc25kLXNvYy13bTg5ODgtb2JqcyA6PSB3bTg5ODgubwogc25kLXNvYy13bTg5OTAtb2JqcyA6PSB3bTg5OTAubwogc25kLXNvYy13bTg5OTMtb2JqcyA6PSB3bTg5OTMubworc25kLXNvYy13bTg5OTQtb2JqcyA6PSB3bTg5OTQubwogc25kLXNvYy13bTkwODEtb2JqcyA6PSB3bTkwODEubwogc25kLXNvYy13bTk3MDUtb2JqcyA6PSB3bTk3MDUubwogc25kLXNvYy13bTk3MTItb2JqcyA6PSB3bTk3MTIubwpAQCAtNTMsNiArNTgsNyBAQAogIyBBbXAKIHNuZC1zb2MtbWF4OTg3Ny1vYmpzIDo9IG1heDk4Nzcubwogc25kLXNvYy10cGE2MTMwYTItb2JqcyA6PSB0cGE2MTMwYTIubworc25kLXNvYy13bTIwMDAtb2JqcyA6PSB3bTIwMDAubwogCiBvYmotJChDT05GSUdfU05EX1NPQ19BQzk3X0NPREVDKQkrPSBzbmQtc29jLWFjOTcubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQUQxODM2KQkrPSBzbmQtc29jLWFkMTgzNi5vCkBAIC02Niw2ICs3Miw3IEBACiBvYmotJChDT05GSUdfU05EX1NPQ19BSzQ2NzEpCSs9IHNuZC1zb2MtYWs0NjcxLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0NTNDI3MCkJKz0gc25kLXNvYy1jczQyNzAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQ1gyMDQ0MikJKz0gc25kLXNvYy1jeDIwNDQyLm8KK29iai0kKENPTkZJR19TTkRfU09DX0RBNzIxMCkJKz0gc25kLXNvYy1kYTcyMTAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfTDMpCSs9IHNuZC1zb2MtbDMubwogb2JqLSQoQ09ORklHX1NORF9TT0NfUENNMzAwOCkJKz0gc25kLXNvYy1wY20zMDA4Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1NQRElGKQkrPSBzbmQtc29jLXNwZGlmLm8KQEAgLTkyLDE0ICs5OSwxOCBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfV004Nzc2KQkrPSBzbmQtc29jLXdtODc3Ni5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5MDApCSs9IHNuZC1zb2Mtd204OTAwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODkwMykJKz0gc25kLXNvYy13bTg5MDMubwotb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTcxKQkrPSBzbmQtc29jLXdtODk3MS5vCi1vYmotJChDT05GSUdfU05EX1NPQ19XTTg5NzQpCSs9IHNuZC1zb2Mtd204OTc0Lm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNODkwNCkJKz0gc25kLXNvYy13bTg5MDQubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTQwKQkrPSBzbmQtc29jLXdtODk0MC5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTg5NTUpCSs9IHNuZC1zb2Mtd204OTU1Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk2MCkJKz0gc25kLXNvYy13bTg5NjAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTYxKQkrPSBzbmQtc29jLXdtODk2MS5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTg5NzEpCSs9IHNuZC1zb2Mtd204OTcxLm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNODk3NCkJKz0gc25kLXNvYy13bTg5NzQubworb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTc4KQkrPSBzbmQtc29jLXdtODk3OC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg5ODgpCSs9IHNuZC1zb2Mtd204OTg4Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODk5MCkJKz0gc25kLXNvYy13bTg5OTAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004OTkzKQkrPSBzbmQtc29jLXdtODk5My5vCitvYmotJChDT05GSUdfU05EX1NPQ19XTTg5OTQpCSs9IHNuZC1zb2Mtd204OTk0Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNOTA4MSkJKz0gc25kLXNvYy13bTkwODEubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV005NzA1KQkrPSBzbmQtc29jLXdtOTcwNS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTk3MTIpCSs9IHNuZC1zb2Mtd205NzEyLm8KQEAgLTEwOSwzICsxMjAsNCBAQAogIyBBbXAKIG9iai0kKENPTkZJR19TTkRfU09DX01BWDk4NzcpCSs9IHNuZC1zb2MtbWF4OTg3Ny5vCiBvYmotJChDT05GSUdfU05EX1NPQ19UUEE2MTMwQTIpCSs9IHNuZC1zb2MtdHBhNjEzMGEyLm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNMjAwMCkJKz0gc25kLXNvYy13bTIwMDAubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmMKaW5kZXggMmMxOGUzZC4uM2M4MDEzNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5jCkBAIC0xNzEsNTcgKzE3MSwzNSBAQAogCXJldHVybiAwOwogfQogCi0KLS8qCi0gKiBpbnRlcmZhY2UgdG8gcmVhZC93cml0ZSBhZDE4MzYgcmVnaXN0ZXIKLSAqLwotI2RlZmluZSBBRDE4MzZfU1BJX1JFR19TSEZUIDEyCi0jZGVmaW5lIEFEMTgzNl9TUElfUkVBRCAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIEFEMTgzNl9TUElfVkFMX01TSyAgMHgzRkYKLQotLyoKLSAqIHdyaXRlIHRvIHRoZSBhZDE4MzYgcmVnaXN0ZXIgc3BhY2UKLSAqLwotCi1zdGF0aWMgaW50IGFkMTgzNl93cml0ZV9yZWcoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAotCQl1bnNpZ25lZCBpbnQgdmFsdWUpCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGFkMTgzNl9zb2Nfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JdTE2ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCWludCByZXQgPSAwOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAotCWlmICh2YWx1ZSAhPSByZWdfY2FjaGVbcmVnXSkgewotCQl1bnNpZ25lZCBzaG9ydCBidWY7Ci0JCXN0cnVjdCBzcGlfdHJhbnNmZXIgdCA9IHsKLQkJCS50eF9idWYgPSAmYnVmLAotCQkJLmxlbiA9IDIsCi0JCX07Ci0JCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCS8qIHJlc2V0IGNsb2NrIGNvbnRyb2wgbW9kZSAqLworCXUxNiBhZGNfY3RybDIgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFEMTgzNl9BRENfQ1RSTDIpOworCWFkY19jdHJsMiAmPSB+QUQxODM2X0FEQ19TRVJGTVRfTUFTSzsKIAotCQlidWYgPSAocmVnIDw8IEFEMTgzNl9TUElfUkVHX1NIRlQpIHwKLQkJCSh2YWx1ZSAmIEFEMTgzNl9TUElfVkFMX01TSyk7Ci0JCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOwotCQlyZXQgPSBzcGlfc3luYyhjb2RlYy0+Y29udHJvbF9kYXRhLCAmbSk7Ci0JCWlmIChyZXQgPT0gMCkKLQkJCXJlZ19jYWNoZVtyZWddID0gdmFsdWU7Ci0JfQotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgQUQxODM2X0FEQ19DVFJMMiwgYWRjX2N0cmwyKTsKIH0KIAotLyoKLSAqIHJlYWQgZnJvbSB0aGUgYWQxODM2IHJlZ2lzdGVyIHNwYWNlIGNhY2hlCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYWQxODM2X3JlYWRfcmVnX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQkJCQkJICB1bnNpZ25lZCBpbnQgcmVnKQorc3RhdGljIGludCBhZDE4MzZfc29jX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXUxNiAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKLQlpZiAocmVnID49IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJLyogcmVzdG9yZSBjbG9jayBjb250cm9sIG1vZGUgKi8KKwl1MTYgYWRjX2N0cmwyID0gc25kX3NvY19yZWFkKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwyKTsKKwlhZGNfY3RybDIgfD0gQUQxODM2X0FEQ19BVVg7CiAKLQlyZXR1cm4gcmVnX2NhY2hlW3JlZ107CisJcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTgzNl9BRENfQ1RSTDIsIGFkY19jdHJsMik7CiB9CisjZWxzZQorI2RlZmluZSBhZDE4MzZfc29jX3N1c3BlbmQgTlVMTAorI2RlZmluZSBhZDE4MzZfc29jX3Jlc3VtZSAgTlVMTAorI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFkMTgzNl9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKQEAgLTMwNiwzMiArMjg0LDM4IEBACiAJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJY29kZWMtPmRhaSA9ICZhZDE4MzZfZGFpOwogCWNvZGVjLT5udW1fZGFpID0gMTsKLQljb2RlYy0+d3JpdGUgPSBhZDE4MzZfd3JpdGVfcmVnOwotCWNvZGVjLT5yZWFkID0gYWQxODM2X3JlYWRfcmVnX2NhY2hlOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwogCiAJYWQxODM2X2RhaS5kZXYgPSBjb2RlYy0+ZGV2OwogCWFkMTgzNl9jb2RlYyA9IGNvZGVjOwogCisJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDQsIDEyLCBTTkRfU09DX1NQSSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLAorCQkJCXJldCk7CisJCWtmcmVlKGFkMTgzNik7CisJCXJldHVybiByZXQ7CisJfQorCiAJLyogZGVmYXVsdCBzZXR0aW5nIGZvciBhZDE4MzYgKi8KIAkvKiBkZS1lbXBoYXNpczogNDhrSHosIHBvd2VyLW9uIGRhYyAqLwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0RBQ19DVFJMMSwgMHgzMDApOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfQ1RSTDEsIDB4MzAwKTsKIAkvKiB1bm11dGUgZGFjIGNoYW5uZWxzICovCi0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE4MzZfREFDX0NUUkwyLCAweDApOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfQ1RSTDIsIDB4MCk7CiAJLyogaGlnaC1wYXNzIGZpbHRlciBlbmFibGUsIHBvd2VyLW9uIGFkYyAqLwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0FEQ19DVFJMMSwgMHgxMDApOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTgzNl9BRENfQ1RSTDEsIDB4MTAwKTsKIAkvKiB1bm11dGUgYWRjIGNoYW5ubGVzLCBhZGMgYXV4IG1vZGUgKi8KLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTgzNl9BRENfQ1RSTDIsIDB4MTgwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfQURDX0NUUkwyLCAweDE4MCk7CiAJLyogbGVmdC9yaWdodCBkaWZmOlBHQS9NVVggKi8KLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTgzNl9BRENfQ1RSTDMsIDB4M0EpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTgzNl9BRENfQ1RSTDMsIDB4M0EpOwogCS8qIHZvbHVtZSAqLwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0RBQ19MMV9WT0wsIDB4M0ZGKTsKLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfUjFfVk9MLCAweDNGRik7Ci0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE4MzZfREFDX0wyX1ZPTCwgMHgzRkYpOwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxODM2X0RBQ19SMl9WT0wsIDB4M0ZGKTsKLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfTDNfVk9MLCAweDNGRik7Ci0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE4MzZfREFDX1IzX1ZPTCwgMHgzRkYpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfTDFfVk9MLCAweDNGRik7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxODM2X0RBQ19SMV9WT0wsIDB4M0ZGKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfREFDX0wyX1ZPTCwgMHgzRkYpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTgzNl9EQUNfUjJfVk9MLCAweDNGRik7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxODM2X0RBQ19MM19WT0wsIDB4M0ZGKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE4MzZfREFDX1IzX1ZPTCwgMHgzRkYpOwogCiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CiAJaWYgKHJldCAhPSAwKSB7CkBAIC00MDQsNiArMzg4LDggQEAKIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X2FkMTgzNiA9IHsKIAkucHJvYmUgPSAJYWQxODM2X3Byb2JlLAogCS5yZW1vdmUgPSAJYWQxODM2X3JlbW92ZSwKKwkuc3VzcGVuZCA9ICAgICAgYWQxODM2X3NvY19zdXNwZW5kLAorCS5yZXN1bWUgPSAgICAgICBhZDE4MzZfc29jX3Jlc3VtZSwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X2FkMTgzNik7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmggYi9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5oCmluZGV4IDc2NjBlZTYuLmU5ZDkwZDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmgKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuaApAQCAtNTQsNiArNTQsNyBAQAogI2RlZmluZSBBRDE4MzZfQURDX1NFUkZNVF9NQVNLCSAgICAgICAoNyA8PCA2KQogI2RlZmluZSBBRDE4MzZfQURDX1NFUkZNVF9QQ0syNTYgICAgICAgKDB4NCA8PCA2KQogI2RlZmluZSBBRDE4MzZfQURDX1NFUkZNVF9QQ0sxMjggICAgICAgKDB4NSA8PCA2KQorI2RlZmluZSBBRDE4MzZfQURDX0FVWCAgICAgICAgICAgICAgICAgKDB4NiA8PCA2KQogCiAjZGVmaW5lIEFEMTgzNl9BRENfQ1RSTDMgICAgICAgICAgICAgICAxNAogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkMTkzOC5jIGIvc291bmQvc29jL2NvZGVjcy9hZDE5MzguYwppbmRleCA1ZDQ4OTE4Li5jMjMzODEwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FkMTkzOC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTM4LmMKQEAgLTQ2LDYgKzQ2LDExIEBACiAJdTggcmVnX2NhY2hlW0FEMTkzOF9OVU1fUkVHU107CiB9OwogCisvKiBhZDE5MzggcmVnaXN0ZXIgY2FjaGUgJiBkZWZhdWx0IHJlZ2lzdGVyIHNldHRpbmdzICovCitzdGF0aWMgY29uc3QgdTggYWQxOTM4X3JlZ1tBRDE5MzhfTlVNX1JFR1NdID0geworCTAsIDAsIDAsIDAsIDAsIDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDAsIDAsIDAsCit9OworCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKmFkMTkzOF9jb2RlYzsKIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X2FkMTkzODsKIHN0YXRpYyBpbnQgYWQxOTM4X3JlZ2lzdGVyKHN0cnVjdCBhZDE5MzhfcHJpdiAqYWQxOTM4KTsKQEAgLTk3LDYgKzEwMiw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgYWQxOTM4X2RhcG1fd2lkZ2V0c1tdID0gewogCVNORF9TT0NfREFQTV9EQUMoIkRBQyIsICJQbGF5YmFjayIsIEFEMTkzOF9EQUNfQ1RSTDAsIDAsIDEpLAogCVNORF9TT0NfREFQTV9BREMoIkFEQyIsICJDYXB0dXJlIiwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJQTExfUFdSIiwgQUQxOTM4X1BMTF9DTEtfQ1RSTDAsIDAsIDEsIE5VTEwsIDApLAogCVNORF9TT0NfREFQTV9TVVBQTFkoIkFEQ19QV1IiLCBBRDE5MzhfQURDX0NUUkwwLCAwLCAxLCBOVUxMLCAwKSwKIAlTTkRfU09DX0RBUE1fT1VUUFVUKCJEQUMxT1VUIiksCiAJU05EX1NPQ19EQVBNX09VVFBVVCgiREFDMk9VVCIpLApAQCAtMTA3LDYgKzExMyw4IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19wYXRoc1tdID0geworCXsgIkRBQyIsIE5VTEwsICJQTExfUFdSIiB9LAorCXsgIkFEQyIsIE5VTEwsICJQTExfUFdSIiB9LAogCXsgIkRBQyIsIE5VTEwsICJBRENfUFdSIiB9LAogCXsgIkFEQyIsIE5VTEwsICJBRENfUFdSIiB9LAogCXsgIkRBQzFPVVQiLCAiREFDMSBTd2l0Y2giLCAiREFDIiB9LApAQCAtMTI2LDMwICsxMzQsMjAgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwogCWludCByZWc7CiAKLQlyZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUQxOTM4X0RBQ19DVFJMMik7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwyKTsKIAlyZWcgPSAobXV0ZSA+IDApID8gcmVnIHwgQUQxOTM4X0RBQ19NQVNURVJfTVVURSA6IHJlZyAmCiAJCSh+QUQxOTM4X0RBQ19NQVNURVJfTVVURSk7Ci0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwyLCByZWcpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFkMTkzOF9wbGxfcG93ZXJjdHJsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGNtZCkKLXsKLQlpbnQgcmVnID0gY29kZWMtPnJlYWQoY29kZWMsIEFEMTkzOF9QTExfQ0xLX0NUUkwwKTsKLQlyZWcgPSAoY21kID4gMCkgPyByZWcgJiAofkFEMTkzOF9QTExfUE9XRVJET1dOKSA6IHJlZyB8Ci0JCUFEMTkzOF9QTExfUE9XRVJET1dOOwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X1BMTF9DTEtfQ1RSTDAsIHJlZyk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DVFJMMiwgcmVnKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFkMTkzOF9zZXRfdGRtX3Nsb3Qoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHVuc2lnbmVkIGludCB0eF9tYXNrLAotCQkJICAgICAgIHVuc2lnbmVkIGludCBtYXNrLCBpbnQgc2xvdHMsIGludCB3aWR0aCkKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgcnhfbWFzaywgaW50IHNsb3RzLCBpbnQgd2lkdGgpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKLQlpbnQgZGFjX3JlZyA9IGNvZGVjLT5yZWFkKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwxKTsKLQlpbnQgYWRjX3JlZyA9IGNvZGVjLT5yZWFkKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwyKTsKKwlpbnQgZGFjX3JlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUQxOTM4X0RBQ19DVFJMMSk7CisJaW50IGFkY19yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDIpOwogCiAJZGFjX3JlZyAmPSB+QUQxOTM4X0RBQ19DSEFOX01BU0s7CiAJYWRjX3JlZyAmPSB+QUQxOTM4X0FEQ19DSEFOX01BU0s7CkBAIC0xNzUsOCArMTczLDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwxLCBkYWNfcmVnKTsKLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDIsIGFkY19yZWcpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDEsIGRhY19yZWcpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDIsIGFkY19yZWcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODcsOCArMTg1LDggQEAKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOwogCWludCBhZGNfcmVnLCBkYWNfcmVnOwogCi0JYWRjX3JlZyA9IGNvZGVjLT5yZWFkKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwyKTsKLQlkYWNfcmVnID0gY29kZWMtPnJlYWQoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDEpOworCWFkY19yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDIpOworCWRhY19yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFEMTkzOF9EQUNfQ1RSTDEpOwogCiAJLyogQXQgcHJlc2VudCwgdGhlIGRyaXZlciBvbmx5IHN1cHBvcnQgQVVYIEFEQyBtb2RlKFNORF9TT0NfREFJRk1UX0kyUwogCSAqIHdpdGggVERNKSBhbmQgQURDJkRBQyBURE0gbW9kZShTTkRfU09DX0RBSUZNVF9EU1BfQSkKQEAgLTI2NSw4ICsyNjMsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDIsIGFkY19yZWcpOwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DVFJMMSwgZGFjX3JlZyk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X0FEQ19DVFJMMiwgYWRjX3JlZyk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DVFJMMSwgZGFjX3JlZyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI5NSwxMzQgKzI5MywxMyBAQAogCQlicmVhazsKIAl9CiAKLQlyZWcgPSBjb2RlYy0+cmVhZChjb2RlYywgQUQxOTM4X0RBQ19DVFJMMik7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwyKTsKIAlyZWcgPSAocmVnICYgKH5BRDE5MzhfREFDX1dPUkRfTEVOX01BU0spKSB8IHdvcmRfbGVuOwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DVFJMMiwgcmVnKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwyLCByZWcpOwogCi0JcmVnID0gY29kZWMtPnJlYWQoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDEpOworCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUQxOTM4X0FEQ19DVFJMMSk7CiAJcmVnID0gKHJlZyAmICh+QUQxOTM4X0FEQ19XT1JEX0xFTl9NQVNLKSkgfCB3b3JkX2xlbjsKLQljb2RlYy0+d3JpdGUoY29kZWMsIEFEMTkzOF9BRENfQ1RSTDEsIHJlZyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZDE5Mzhfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCQllbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKLXsKLQlzd2l0Y2ggKGxldmVsKSB7Ci0JY2FzZSBTTkRfU09DX0JJQVNfT046Ci0JCWFkMTkzOF9wbGxfcG93ZXJjdHJsKGNvZGVjLCAxKTsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKLQljYXNlIFNORF9TT0NfQklBU19PRkY6Ci0JCWFkMTkzOF9wbGxfcG93ZXJjdHJsKGNvZGVjLCAwKTsKLQkJYnJlYWs7Ci0JfQotCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBpbnRlcmZhY2UgdG8gcmVhZC93cml0ZSBhZDE5MzggcmVnaXN0ZXIKLSAqLwotCi0jZGVmaW5lIEFEMTkzOF9TUElfQUREUiAgICAweDQKLSNkZWZpbmUgQUQxOTM4X1NQSV9SRUFEICAgIDB4MQotI2RlZmluZSBBRDE5MzhfU1BJX0JVRkxFTiAgMwotCi0vKgotICogd3JpdGUgdG8gdGhlIGFkMTkzOCByZWdpc3RlciBzcGFjZQotICovCi0KLXN0YXRpYyBpbnQgYWQxOTM4X3dyaXRlX3JlZyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCi0JCXVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQl1OCAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICh2YWx1ZSAhPSByZWdfY2FjaGVbcmVnXSkgewotCQl1aW50OF90IGJ1ZltBRDE5MzhfU1BJX0JVRkxFTl07Ci0JCXN0cnVjdCBzcGlfdHJhbnNmZXIgdCA9IHsKLQkJCS50eF9idWYgPSBidWYsCi0JCQkubGVuID0gQUQxOTM4X1NQSV9CVUZMRU4sCi0JCX07Ci0JCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwotCi0JCWJ1ZlswXSA9IEFEMTkzOF9TUElfQUREUiA8PCAxOwotCQlidWZbMV0gPSByZWc7Ci0JCWJ1ZlsyXSA9IHZhbHVlOwotCQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKLQkJcmV0ID0gc3BpX3N5bmMoY29kZWMtPmNvbnRyb2xfZGF0YSwgJm0pOwotCQlpZiAocmV0ID09IDApCi0JCQlyZWdfY2FjaGVbcmVnXSA9IHZhbHVlOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiByZWFkIGZyb20gdGhlIGFkMTkzOCByZWdpc3RlciBzcGFjZSBjYWNoZQotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYWQxOTM4X3JlYWRfcmVnX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKLQkJCQkJICB1bnNpZ25lZCBpbnQgcmVnKQotewotCXU4ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCi0JaWYgKHJlZyA+PSBjb2RlYy0+cmVnX2NhY2hlX3NpemUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHJlZ19jYWNoZVtyZWddOwotfQotCi0vKgotICogcmVhZCBmcm9tIHRoZSBhZDE5MzggcmVnaXN0ZXIgc3BhY2UKLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGFkMTkzOF9yZWFkX3JlZyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCi0JCQkJCQl1bnNpZ25lZCBpbnQgcmVnKQotewotCWNoYXIgd19idWZbQUQxOTM4X1NQSV9CVUZMRU5dOwotCWNoYXIgcl9idWZbQUQxOTM4X1NQSV9CVUZMRU5dOwotCWludCByZXQ7Ci0KLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQgPSB7Ci0JCS50eF9idWYgPSB3X2J1ZiwKLQkJLnJ4X2J1ZiA9IHJfYnVmLAotCQkubGVuID0gQUQxOTM4X1NQSV9CVUZMRU4sCi0JfTsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKLQotCXdfYnVmWzBdID0gKEFEMTkzOF9TUElfQUREUiA8PCAxKSB8IEFEMTkzOF9TUElfUkVBRDsKLQl3X2J1ZlsxXSA9IHJlZzsKLQl3X2J1ZlsyXSA9IDA7Ci0KLQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOwotCXJldCA9IHNwaV9zeW5jKGNvZGVjLT5jb250cm9sX2RhdGEsICZtKTsKLQlpZiAocmV0ID09IDApCi0JCXJldHVybglyX2J1ZlsyXTsKLQllbHNlCi0JCXJldHVybiAtRUlPOwotfQotCi1zdGF0aWMgaW50IGFkMTkzOF9maWxsX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQlpbnQgaTsKLQl1OCAqcmVnX2NhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKLQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY29kZWMtPmNvbnRyb2xfZGF0YTsKLQotCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+cmVnX2NhY2hlX3NpemU7IGkrKykgewotCQlpbnQgcmV0ID0gYWQxOTM4X3JlYWRfcmVnKGNvZGVjLCBpKTsKLQkJaWYgKHJldCA9PSAtRUlPKSB7Ci0JCQlkZXZfZXJyKCZzcGktPmRldiwgIkFEMTkzOCBTUEkgcmVhZCBmYWlsdXJlXG4iKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJcmVnX2NhY2hlW2ldID0gcmV0OwotCX0KKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwxLCByZWcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MTIsMzIgKzM4OSwzNyBAQAogCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOwogCWNvZGVjLT5kYWkgPSAmYWQxOTM4X2RhaTsKIAljb2RlYy0+bnVtX2RhaSA9IDE7Ci0JY29kZWMtPndyaXRlID0gYWQxOTM4X3dyaXRlX3JlZzsKLQljb2RlYy0+cmVhZCA9IGFkMTkzOF9yZWFkX3JlZ19jYWNoZTsKLQljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSBhZDE5Mzhfc2V0X2JpYXNfbGV2ZWw7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOwogCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CiAKIAlhZDE5MzhfZGFpLmRldiA9IGNvZGVjLT5kZXY7CiAJYWQxOTM4X2NvZGVjID0gY29kZWM7CiAKKwltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgYWQxOTM4X3JlZywgQUQxOTM4X05VTV9SRUdTKTsKKworCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCAxNiwgOCwgU05EX1NPQ19TUEkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwKKwkJCQlyZXQpOworCQlrZnJlZShhZDE5MzgpOworCQlyZXR1cm4gcmV0OworCX0KKwogCS8qIGRlZmF1bHQgc2V0dGluZyBmb3IgYWQxOTM4ICovCiAKIAkvKiB1bm11dGUgZGFjIGNoYW5uZWxzICovCi0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfREFDX0NITkxfTVVURSwgMHgwKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5MzhfREFDX0NITkxfTVVURSwgMHgwKTsKIAkvKiBkZS1lbXBoYXNpczogNDhrSHosIHBvd2Vkb3duIGRhYyAqLwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DVFJMMiwgMHgxQSk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X0RBQ19DVFJMMiwgMHgxQSk7CiAJLyogcG93ZXJkb3duIGRhYywgZGFjIGluIHRkbSBtb2RlICovCi0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwwLCAweDQxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5MzhfREFDX0NUUkwwLCAweDQxKTsKIAkvKiBoaWdoLXBhc3MgZmlsdGVyIGVuYWJsZSAqLwotCWNvZGVjLT53cml0ZShjb2RlYywgQUQxOTM4X0FEQ19DVFJMMCwgMHgzKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwwLCAweDMpOwogCS8qIHNhdGEgZGVsYXk9MSwgYWRjIGF1eCBtb2RlICovCi0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwxLCAweDQzKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5MzhfQURDX0NUUkwxLCAweDQzKTsKIAkvKiBwbGwgaW5wdXQ6IG1jbGtpL3hpICovCi0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfUExMX0NMS19DVFJMMCwgMHg5RCk7Ci0JY29kZWMtPndyaXRlKGNvZGVjLCBBRDE5MzhfUExMX0NMS19DVFJMMSwgMHgwNCk7Ci0KLQlhZDE5MzhfZmlsbF9jYWNoZShjb2RlYyk7CisJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTM4X1BMTF9DTEtfQ1RSTDAsIDB4OUQpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzOF9QTExfQ0xLX0NUUkwxLCAweDA0KTsKIAogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOwogCWlmIChyZXQgIT0gMCkgewpAQCAtNTU5LDcgKzQ0MSw2IEBACiAKIHN0YXRpYyB2b2lkIGFkMTkzOF91bnJlZ2lzdGVyKHN0cnVjdCBhZDE5MzhfcHJpdiAqYWQxOTM4KQogewotCWFkMTkzOF9zZXRfYmlhc19sZXZlbCgmYWQxOTM4LT5jb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmYWQxOTM4X2RhaSk7CiAJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZhZDE5MzgtPmNvZGVjKTsKIAlrZnJlZShhZDE5MzgpOwpAQCAtNTkzLDcgKzQ3NCw2IEBACiAJCQkJICBBUlJBWV9TSVpFKGFkMTkzOF9kYXBtX3dpZGdldHMpKTsKIAlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fcGF0aHMsIEFSUkFZX1NJWkUoYXVkaW9fcGF0aHMpKTsKIAotCWFkMTkzOF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCiBwY21fZXJyOgogCXJldHVybiByZXQ7CkBAIC02MTAsMzcgKzQ5MCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgYWQxOTM4X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKLQotCWFkMTkzOF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWQxOTM4X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKLQotCWlmIChjb2RlYy0+c3VzcGVuZF9iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PTikKLQkJYWQxOTM4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT04pOwotCi0JcmV0dXJuIDA7Ci19Ci0jZWxzZQotI2RlZmluZSBhZDE5Mzhfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIGFkMTkzOF9yZXN1bWUgTlVMTAotI2VuZGlmCi0KIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X2FkMTkzOCA9IHsKIAkucHJvYmUgPSAJYWQxOTM4X3Byb2JlLAogCS5yZW1vdmUgPSAJYWQxOTM4X3JlbW92ZSwKLQkuc3VzcGVuZCA9ICAgICAgYWQxOTM4X3N1c3BlbmQsCi0JLnJlc3VtZSA9ICAgICAgIGFkMTkzOF9yZXN1bWUsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl9hZDE5MzgpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5jIGIvc291bmQvc29jL2NvZGVjcy9hazQxMDQuYwppbmRleCAzYTE0YzZmLi5iOWVmN2U0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmMKQEAgLTE4NSw5ICsxODUsNyBAQAogCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAogCQkuY2hhbm5lbHNfbWluID0gMiwKIAkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwKLQkJCSBTTkRSVl9QQ01fUkFURV80ODAwMCB8Ci0JCQkgU05EUlZfUENNX1JBVEVfMzIwMDAsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfMTkyMDAwLAogCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFICB8CiAJCQkgICBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfAogCQkJICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvY3M0MjcwLmMgYi9zb3VuZC9zb2MvY29kZWNzL2NzNDI3MC5jCmluZGV4IGZmZTEyMmQuLmRmYmViMmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvY3M0MjcwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9jczQyNzAuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCiAjaW5jbHVkZSAiY3M0MjcwLmgiCiAKQEAgLTEwNiw2ICsxMDcsMTAgQEAKICNkZWZpbmUgQ1M0MjcwX01VVEVfREFDX0EJMHgwMQogI2RlZmluZSBDUzQyNzBfTVVURV9EQUNfQgkweDAyCiAKK3N0YXRpYyBjb25zdCBjaGFyICpzdXBwbHlfbmFtZXNbXSA9IHsKKwkidmEiLCAidmQiLCAidmxjIgorfTsKKwogLyogUHJpdmF0ZSBkYXRhIGZvciB0aGUgQ1M0MjcwICovCiBzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgewogCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOwpAQCAtMTE0LDYgKzExOSw5IEBACiAJdW5zaWduZWQgaW50IG1vZGU7IC8qIFRoZSBtb2RlIChJMlMgb3IgbGVmdC1qdXN0aWZpZWQpICovCiAJdW5zaWduZWQgaW50IHNsYXZlX21vZGU7CiAJdW5zaWduZWQgaW50IG1hbnVhbF9tdXRlOworCisJLyogcG93ZXIgZG9tYWluIHJlZ3VsYXRvcnMgKi8KKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tBUlJBWV9TSVpFKHN1cHBseV9uYW1lcyldOwogfTsKIAogLyoqCkBAIC0xOTIsNiArMjAwLDExIEBACiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJ5IHRoZSBtYWNoaW5lIGRyaXZlcidzICdzdGFydHVwJyBmdW5jdGlvbiwKICAqIG90aGVyd2lzZSB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgc2FtcGxlIHJhdGVzIHdpbGwgbm90IGJlIGF2YWlsYWJsZSBpbgogICogdGltZSBmb3IgQUxTQS4KKyAqCisgKiBGb3Igc2V0dXBzIHdpdGggdmFyaWFibGUgTUNMS3MsIHBhc3MgMCBhcyAnZnJlcScgYXJndW1lbnQuIFRoaXMgd2lsbCBjYXVzZQorICogdGhlb3JldGljYWxseSBwb3NzaWJsZSBzYW1wbGUgcmF0ZXMgdG8gYmUgZW5hYmxlZC4gQ2FsbCBpdCBhZ2FpbiB3aXRoIGEKKyAqIHByb3BlciB2YWx1ZSBzZXQgb25lIHRoZSBleHRlcm5hbCBjbG9jayBpcyBzZXQgKG1vc3QgcHJvYmFibHkgeW91IHdvdWxkIGRvCisgKiB0aGF0IGZyb20gYSBtYWNoaW5lJ3MgZHJpdmVyICdod19wYXJhbScgaG9vay4KICAqLwogc3RhdGljIGludCBjczQyNzBfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCiAJCQkJIGludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQpAQCAtMjA1LDIwICsyMTgsMjcgQEAKIAogCWNzNDI3MC0+bWNsayA9IGZyZXE7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX01DTEtfUkFUSU9TOyBpKyspIHsKLQkJdW5zaWduZWQgaW50IHJhdGUgPSBmcmVxIC8gY3M0MjcwX21vZGVfcmF0aW9zW2ldLnJhdGlvOwotCQlyYXRlcyB8PSBzbmRfcGNtX3JhdGVfdG9fcmF0ZV9iaXQocmF0ZSk7Ci0JCWlmIChyYXRlIDwgcmF0ZV9taW4pCi0JCQlyYXRlX21pbiA9IHJhdGU7Ci0JCWlmIChyYXRlID4gcmF0ZV9tYXgpCi0JCQlyYXRlX21heCA9IHJhdGU7Ci0JfQotCS8qIEZJWE1FOiBzb2Mgc2hvdWxkIHN1cHBvcnQgYSByYXRlIGxpc3QgKi8KLQlyYXRlcyAmPSB+U05EUlZfUENNX1JBVEVfS05PVDsKKwlpZiAoY3M0MjcwLT5tY2xrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBOVU1fTUNMS19SQVRJT1M7IGkrKykgeworCQkJdW5zaWduZWQgaW50IHJhdGUgPSBmcmVxIC8gY3M0MjcwX21vZGVfcmF0aW9zW2ldLnJhdGlvOworCQkJcmF0ZXMgfD0gc25kX3BjbV9yYXRlX3RvX3JhdGVfYml0KHJhdGUpOworCQkJaWYgKHJhdGUgPCByYXRlX21pbikKKwkJCQlyYXRlX21pbiA9IHJhdGU7CisJCQlpZiAocmF0ZSA+IHJhdGVfbWF4KQorCQkJCXJhdGVfbWF4ID0gcmF0ZTsKKwkJfQorCQkvKiBGSVhNRTogc29jIHNob3VsZCBzdXBwb3J0IGEgcmF0ZSBsaXN0ICovCisJCXJhdGVzICY9IH5TTkRSVl9QQ01fUkFURV9LTk9UOwogCi0JaWYgKCFyYXRlcykgewotCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJjb3VsZCBub3QgZmluZCBhIHZhbGlkIHNhbXBsZSByYXRlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghcmF0ZXMpIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwgImNvdWxkIG5vdCBmaW5kIGEgdmFsaWQgc2FtcGxlIHJhdGVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgeworCQkvKiBlbmFibGUgYWxsIHBvc3NpYmxlIHJhdGVzICovCisJCXJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF8xOTIwMDA7CisJCXJhdGVfbWluID0gODAwMDsKKwkJcmF0ZV9tYXggPSAxOTIwMDA7CiAJfQogCiAJY29kZWNfZGFpLT5wbGF5YmFjay5yYXRlcyA9IHJhdGVzOwpAQCAtNTc5LDcgKzU5OSw4IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjczQyNzBfY29kZWM7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgKmNzNDI3MCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGksIHJldDsKIAogCS8qIENvbm5lY3QgdGhlIGNvZGVjIHRvIHRoZSBzb2NkZXYuICBzbmRfc29jX25ld19wY21zKCkgbmVlZHMgdGhpcy4gKi8KIAlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY29kZWM7CkBAIC01OTksOCArNjIwLDI2IEBACiAJCWdvdG8gZXJyb3JfZnJlZV9wY21zOwogCX0KIAorCS8qIGdldCB0aGUgcG93ZXIgc3VwcGx5IHJlZ3VsYXRvcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdXBwbHlfbmFtZXMpOyBpKyspCisJCWNzNDI3MC0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gc3VwcGx5X25hbWVzW2ldOworCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZ2V0KGNvZGVjLT5kZXYsIEFSUkFZX1NJWkUoY3M0MjcwLT5zdXBwbGllcyksCisJCQkJIGNzNDI3MC0+c3VwcGxpZXMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yX2ZyZWVfcGNtczsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKGNzNDI3MC0+c3VwcGxpZXMpLAorCQkJCSAgICBjczQyNzAtPnN1cHBsaWVzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl9mcmVlX3JlZ3VsYXRvcnM7CisKIAlyZXR1cm4gMDsKIAorZXJyb3JfZnJlZV9yZWd1bGF0b3JzOgorCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRShjczQyNzAtPnN1cHBsaWVzKSwKKwkJCSAgICBjczQyNzAtPnN1cHBsaWVzKTsKKwogZXJyb3JfZnJlZV9wY21zOgogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CiAKQEAgLTYxNiw4ICs2NTUsMTIgQEAKIHN0YXRpYyBpbnQgY3M0MjcwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY3M0MjcwX2NvZGVjOworCXN0cnVjdCBjczQyNzBfcHJpdmF0ZSAqY3M0MjcwID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGNzNDI3MC0+c3VwcGxpZXMpLCBjczQyNzAtPnN1cHBsaWVzKTsKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUoY3M0MjcwLT5zdXBwbGllcyksIGNzNDI3MC0+c3VwcGxpZXMpOwogCiAJcmV0dXJuIDA7CiB9OwpAQCAtNzk5LDE3ICs4NDIsMzMgQEAKIHN0YXRpYyBpbnQgY3M0MjcwX3NvY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNzNDI3MF9jb2RlYzsKLQlpbnQgcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBDUzQyNzBfUFdSQ1RMKSB8IENTNDI3MF9QV1JDVExfUEROX0FMTDsKKwlzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgKmNzNDI3MCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJlZywgcmV0OwogCi0JcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIENTNDI3MF9QV1JDVEwsIHJlZyk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBDUzQyNzBfUFdSQ1RMKSB8IENTNDI3MF9QV1JDVExfUEROX0FMTDsKKwlpZiAocmVnIDwgMCkKKwkJcmV0dXJuIHJlZzsKKworCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIENTNDI3MF9QV1JDVEwsIHJlZyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoY3M0MjcwLT5zdXBwbGllcyksCisJCQkgICAgICAgY3M0MjcwLT5zdXBwbGllcyk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjczQyNzBfc29jX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNzNDI3MF9jb2RlYzsKKwlzdHJ1Y3QgY3M0MjcwX3ByaXZhdGUgKmNzNDI3MCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGkyY19jbGllbnQgKmkyY19jbGllbnQgPSBjb2RlYy0+Y29udHJvbF9kYXRhOwogCWludCByZWc7CiAKKwlyZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShjczQyNzAtPnN1cHBsaWVzKSwKKwkJCSAgICAgIGNzNDI3MC0+c3VwcGxpZXMpOworCiAJLyogSW4gY2FzZSB0aGUgZGV2aWNlIHdhcyBwdXQgdG8gaGFyZCByZXNldCBkdXJpbmcgc2xlZXAsIHdlIG5lZWQgdG8KIAkgKiB3YWl0IDUwMG5zIGhlcmUgYmVmb3JlIGFueSBJMkMgY29tbXVuaWNhdGlvbi4gKi8KIAluZGVsYXkoNTAwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvZGE3MjEwLmMgYi9zb3VuZC9zb2MvY29kZWNzL2RhNzIxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMjk3NWEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL2RhNzIxMC5jCkBAIC0wLDAgKzEsNTg5IEBACisvKgorICogREE3MjEwIEFMU0EgU29jIGNvZGVjIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogV3JpdHRlbiBieSBEYXZpZCBDaGVuIDxEYWp1bi5jaGVuQGRpYXNlbWkuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogQ2xlYW51cHMgYnkgS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICoKKyAqIFRlc3RlZCBvbiBTdXBlckggRWNvdmVjMjQgYm9hcmQgd2l0aCBTMTYvUzI0IExFIGluIDQ4S0h6IHVzaW5nIEkyUworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisjaW5jbHVkZSAiZGE3MjEwLmgiCisKKy8qIERBNzIxMCByZWdpc3RlciBzcGFjZSAqLworI2RlZmluZSBEQTcyMTBfU1RBVFVTCQkJMHgwMgorI2RlZmluZSBEQTcyMTBfU1RBUlRVUDEJCQkweDAzCisjZGVmaW5lIERBNzIxMF9NSUNfTAkJCTB4MDcKKyNkZWZpbmUgREE3MjEwX01JQ19SCQkJMHgwOAorI2RlZmluZSBEQTcyMTBfSU5NSVhfTAkJCTB4MEQKKyNkZWZpbmUgREE3MjEwX0lOTUlYX1IJCQkweDBFCisjZGVmaW5lIERBNzIxMF9BRENfSFBGCQkJMHgwRgorI2RlZmluZSBEQTcyMTBfQURDCQkJMHgxMAorI2RlZmluZSBEQTcyMTBfREFDX0hQRgkJCTB4MTQKKyNkZWZpbmUgREE3MjEwX0RBQ19MCQkJMHgxNQorI2RlZmluZSBEQTcyMTBfREFDX1IJCQkweDE2CisjZGVmaW5lIERBNzIxMF9EQUNfU0VMCQkJMHgxNworI2RlZmluZSBEQTcyMTBfT1VUTUlYX0wJCQkweDFDCisjZGVmaW5lIERBNzIxMF9PVVRNSVhfUgkJCTB4MUQKKyNkZWZpbmUgREE3MjEwX0hQX0xfVk9MCQkJMHgyMQorI2RlZmluZSBEQTcyMTBfSFBfUl9WT0wJCQkweDIyCisjZGVmaW5lIERBNzIxMF9IUF9DRkcJCQkweDIzCisjZGVmaW5lIERBNzIxMF9EQUlfU1JDX1NFTAkJMHgyNQorI2RlZmluZSBEQTcyMTBfREFJX0NGRzEJCQkweDI2CisjZGVmaW5lIERBNzIxMF9EQUlfQ0ZHMwkJCTB4MjgKKyNkZWZpbmUgREE3MjEwX1BMTF9ESVYzCQkJMHgyQgorI2RlZmluZSBEQTcyMTBfUExMCQkJMHgyQworCisvKiBTVEFSVFVQMSBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9TQ19NU1RfRU4JCSgxIDw8IDApCisKKy8qIE1JQ19MIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX01JQ0JJQVNfRU4JCSgxIDw8IDYpCisjZGVmaW5lIERBNzIxMF9NSUNfTF9FTgkJCSgxIDw8IDcpCisKKy8qIE1JQ19SIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX01JQ19SX0VOCQkJKDEgPDwgNykKKworLyogSU5NSVhfTCBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9JTl9MX0VOCQkJKDEgPDwgNykKKworLyogSU5NSVhfUiBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9JTl9SX0VOCQkJKDEgPDwgNykKKworLyogQURDX0hQRiBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9BRENfVk9JQ0VfRU4JCSgxIDw8IDcpCisKKy8qIEFEQyBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9BRENfTF9FTgkJCSgxIDw8IDMpCisjZGVmaW5lIERBNzIxMF9BRENfUl9FTgkJCSgxIDw8IDcpCisKKy8qIERBQ19IUEYgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9EQUNfVk9JQ0VfRU4JCSgxIDw8IDcpCisKKy8qIERBQ19TRUwgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfREFDX0xfU1JDX0RBSV9MCQkoNCA8PCAwKQorI2RlZmluZSBEQTcyMTBfREFDX0xfRU4JCQkoMSA8PCAzKQorI2RlZmluZSBEQTcyMTBfREFDX1JfU1JDX0RBSV9SCQkoNSA8PCA0KQorI2RlZmluZSBEQTcyMTBfREFDX1JfRU4JCQkoMSA8PCA3KQorCisvKiBPVVRNSVhfTCBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9PVVRfTF9FTgkJCSgxIDw8IDcpCisKKy8qIE9VVE1JWF9SIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX09VVF9SX0VOCQkJKDEgPDwgNykKKworLyogSFBfQ0ZHIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX0hQXzJDQVBfTU9ERQkJKDEgPDwgMSkKKyNkZWZpbmUgREE3MjEwX0hQX1NFTlNFX0VOCQkoMSA8PCAyKQorI2RlZmluZSBEQTcyMTBfSFBfTF9FTgkJCSgxIDw8IDMpCisjZGVmaW5lIERBNzIxMF9IUF9NT0RFCQkJKDEgPDwgNikKKyNkZWZpbmUgREE3MjEwX0hQX1JfRU4JCQkoMSA8PCA3KQorCisvKiBEQUlfU1JDX1NFTCBiaXQgZmllbGRzICovCisjZGVmaW5lIERBNzIxMF9EQUlfT1VUX0xfU1JDCQkoNiA8PCAwKQorI2RlZmluZSBEQTcyMTBfREFJX09VVF9SX1NSQwkJKDcgPDwgNCkKKworLyogREFJX0NGRzEgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfREFJX1dPUkRfUzE2X0xFCQkoMCA8PCAwKQorI2RlZmluZSBEQTcyMTBfREFJX1dPUkRfUzI0X0xFCQkoMiA8PCAwKQorI2RlZmluZSBEQTcyMTBfREFJX0ZMRU5fNjRCSVQJCSgxIDw8IDIpCisjZGVmaW5lIERBNzIxMF9EQUlfTU9ERV9NQVNURVIJCSgxIDw8IDcpCisKKy8qIERBSV9DRkczIGJpdCBmaWVsZHMgKi8KKyNkZWZpbmUgREE3MjEwX0RBSV9GT1JNQVRfSTJTTU9ERQkoMCA8PCAwKQorI2RlZmluZSBEQTcyMTBfREFJX09FCQkJKDEgPDwgMykKKyNkZWZpbmUgREE3MjEwX0RBSV9FTgkJCSgxIDw8IDcpCisKKy8qUExMX0RJVjMgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfTUNMS19SQU5HRV8xMF8yMF9NSFoJKDEgPDwgNCkKKyNkZWZpbmUgREE3MjEwX1BMTF9CWVAJCQkoMSA8PCA2KQorCisvKiBQTEwgYml0IGZpZWxkcyAqLworI2RlZmluZSBEQTcyMTBfUExMX0ZTXzQ4MDAwCQkoMTEgPDwgMCkKKworI2RlZmluZSBEQTcyMTBfVkVSU0lPTiAiMC4wLjEiCisKKy8qIENvZGVjIHByaXZhdGUgZGF0YSAqLworc3RydWN0IGRhNzIxMF9wcml2IHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqZGE3MjEwX2NvZGVjOworCisvKgorICogUmVnaXN0ZXIgY2FjaGUKKyAqLworc3RhdGljIGNvbnN0IHU4IGRhNzIxMF9yZWdbXSA9IHsKKwkweDAwLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAkvKiBSMCAgLSBSNyAgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAkvKiBSOCAgLSBSRiAgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDEwLCAweDEwLCAweDU0LAkvKiBSMTAgLSBSMTcgKi8KKwkweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAkvKiBSMTggLSBSMUYgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDc2LCAweDAwLCAweDAwLAkvKiBSMjAgLSBSMjcgKi8KKwkweDA0LCAweDAwLCAweDAwLCAweDMwLCAweDJBLCAweDAwLCAweDQwLCAweDAwLAkvKiBSMjggLSBSMkYgKi8KKwkweDQwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLCAweDAwLAkvKiBSMzAgLSBSMzcgKi8KKwkweDQwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAkvKiBSMzggLSBSM0YgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAkvKiBSNDAgLSBSNEYgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAkvKiBSNDggLSBSNEYgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAkvKiBSNTAgLSBSNTcgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAkvKiBSNTggLSBSNUYgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAkvKiBSNjAgLSBSNjcgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAkvKiBSNjggLSBSNkYgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAkvKiBSNzAgLSBSNzcgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDU0LCAweDAwLAkvKiBSNzggLSBSN0YgKi8KKwkweDAwLCAweDAwLCAweDJDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAkvKiBSODAgLSBSODcgKi8KKwkweDAwLAkJCQkJCS8qIFI4OCAgICAgICAqLworfTsKKworLyoKKyAqIFJlYWQgZGE3MjEwIHJlZ2lzdGVyIGNhY2hlCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGRhNzIxMF9yZWFkX3JlZ19jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHUzMiByZWcpCit7CisJdTggKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlCVUdfT04ocmVnID4gQVJSQVlfU0laRShkYTcyMTBfcmVnKSk7CisJcmV0dXJuIGNhY2hlW3JlZ107Cit9CisKKy8qCisgKiBXcml0ZSB0byB0aGUgZGE3MjEwIHJlZ2lzdGVyIHNwYWNlCisgKi8KK3N0YXRpYyBpbnQgZGE3MjEwX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdTMyIHJlZywgdTMyIHZhbHVlKQoreworCXU4ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJdTggZGF0YVsyXTsKKworCUJVR19PTihjb2RlYy0+dm9sYXRpbGVfcmVnaXN0ZXIpOworCisJZGF0YVswXSA9IHJlZyAmIDB4ZmY7CisJZGF0YVsxXSA9IHZhbHVlICYgMHhmZjsKKworCWlmIChyZWcgPj0gY29kZWMtPnJlZ19jYWNoZV9zaXplKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICgyICE9IGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKSkKKwkJcmV0dXJuIC1FSU87CisKKwljYWNoZVtyZWddID0gdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWFkIGZyb20gdGhlIGRhNzIxMCByZWdpc3RlciBzcGFjZS4KKyAqLworc3RhdGljIGlubGluZSB1MzIgZGE3MjEwX3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1MzIgcmVnKQoreworCWlmIChEQTcyMTBfU1RBVFVTID09IHJlZykKKwkJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjb2RlYy0+Y29udHJvbF9kYXRhLCByZWcpOworCisJcmV0dXJuIGRhNzIxMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgcmVnKTsKK30KKworc3RhdGljIGludCBkYTcyMTBfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJaW50IGlzX3BsYXkgPSBzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisKKwlpZiAoaXNfcGxheSkgeworCQkvKiBQbGF5QmFjayBWb2x1bWUgNDAgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjEwX0hQX0xfVk9MLCAweDNGLCA0MCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxMF9IUF9SX1ZPTCwgMHgzRiwgNDApOworCisJCS8qIEVuYWJsZSBPdXQgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjEwX09VVE1JWF9MLCAweDFGLCAweDEwKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjEwX09VVE1JWF9SLCAweDFGLCAweDEwKTsKKworCX0gZWxzZSB7CisJCS8qIFZvbHVtZSA3ICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxMF9NSUNfTCwgMHg3LCAweDcpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMTBfTUlDX1IsIDB4NywgMHg3KTsKKworCQkvKiBFbmFibGUgTWljICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxMF9JTk1JWF9MLCAweDFGLCAweDEpOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBEQTcyMTBfSU5NSVhfUiwgMHgxRiwgMHgxKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCBQQ00gREFJIHdvcmQgbGVuZ3RoLgorICovCitzdGF0aWMgaW50IGRhNzIxMF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwl1MzIgZGFpX2NmZzE7CisJdTMyIHJlZywgbWFzazsKKworCS8qIHNldCBEQUkgc291cmNlIHRvIExlZnQgYW5kIFJpZ2h0IEFEQyAqLworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX0RBSV9TUkNfU0VMLAorCQkgICAgIERBNzIxMF9EQUlfT1VUX1JfU1JDIHwgREE3MjEwX0RBSV9PVVRfTF9TUkMpOworCisJLyogRW5hYmxlIERBSSAqLworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX0RBSV9DRkczLCBEQTcyMTBfREFJX09FIHwgREE3MjEwX0RBSV9FTik7CisKKwlkYWlfY2ZnMSA9IDB4RkMgJiBkYTcyMTBfcmVhZChjb2RlYywgREE3MjEwX0RBSV9DRkcxKTsKKworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJZGFpX2NmZzEgfD0gREE3MjEwX0RBSV9XT1JEX1MxNl9MRTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJZGFpX2NmZzEgfD0gREE3MjEwX0RBSV9XT1JEX1MyNF9MRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfREFJX0NGRzEsIGRhaV9jZmcxKTsKKworCS8qIEZJWE1FCisJICoKKwkgKiBJdCBzdXBwb3J0IDQ4SyBvbmx5IG5vdworCSAqLworCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgeworCWNhc2UgNDgwMDA6CisJCWlmIChTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLID09IHN1YnN0cmVhbS0+c3RyZWFtKSB7CisJCQlyZWcgID0gREE3MjEwX0RBQ19IUEY7CisJCQltYXNrID0gREE3MjEwX0RBQ19WT0lDRV9FTjsKKwkJfSBlbHNlIHsKKwkJCXJlZyAgPSBEQTcyMTBfQURDX0hQRjsKKwkJCW1hc2sgPSBEQTcyMTBfQURDX1ZPSUNFX0VOOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJlZywgbWFzaywgMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCBEQUkgbW9kZSBhbmQgRm9ybWF0CisgKi8KK3N0YXRpYyBpbnQgZGE3MjEwX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLCB1MzIgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJdTMyIGRhaV9jZmcxOworCXUzMiBkYWlfY2ZnMzsKKworCWRhaV9jZmcxID0gMHg3ZiAmIGRhNzIxMF9yZWFkKGNvZGVjLCBEQTcyMTBfREFJX0NGRzEpOworCWRhaV9jZmczID0gMHhmYyAmIGRhNzIxMF9yZWFkKGNvZGVjLCBEQTcyMTBfREFJX0NGRzMpOworCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJZGFpX2NmZzEgfD0gREE3MjEwX0RBSV9NT0RFX01BU1RFUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRklYTUUKKwkgKgorCSAqIEl0IHN1cHBvcnQgSTJTIG9ubHkgbm93CisJICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlkYWlfY2ZnMyB8PSBEQTcyMTBfREFJX0ZPUk1BVF9JMlNNT0RFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBGSVhNRQorCSAqCisJICogSXQgc3VwcG9ydCA2NGJpdCBkYXRhIHRyYW5zbWlzc2lvbiBvbmx5IG5vdworCSAqLworCWRhaV9jZmcxIHw9IERBNzIxMF9EQUlfRkxFTl82NEJJVDsKKworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX0RBSV9DRkcxLCBkYWlfY2ZnMSk7CisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfREFJX0NGRzMsIGRhaV9jZmczKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIERBNzIxMF9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFKQorCisvKiBEQUkgb3BlcmF0aW9ucyAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgZGE3MjEwX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBkYTcyMTBfc3RhcnR1cCwKKwkuaHdfcGFyYW1zCT0gZGE3MjEwX2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IGRhNzIxMF9zZXRfZGFpX2ZtdCwKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaSBkYTcyMTBfZGFpID0geworCS5uYW1lID0gIkRBNzIxMCBJSVMiLAorCS5pZCA9IDAsCisJLyogcGxheWJhY2sgY2FwYWJpbGl0aWVzICovCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAsCisJCS5mb3JtYXRzID0gREE3MjEwX0ZPUk1BVFMsCisJfSwKKwkvKiBjYXB0dXJlIGNhcGFiaWxpdGllcyAqLworCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKKwkJLmZvcm1hdHMgPSBEQTcyMTBfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmZGE3MjEwX2RhaV9vcHMsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoZGE3MjEwX2RhaSk7CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBEQTcyMTAgZHJpdmVyCisgKiByZWdpc3RlciB0aGUgbWl4ZXIgYW5kIGRzcCBpbnRlcmZhY2VzIHdpdGggdGhlIGtlcm5lbAorICovCitzdGF0aWMgaW50IGRhNzIxMF9pbml0KHN0cnVjdCBkYTcyMTBfcHJpdiAqZGE3MjEwKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZkYTcyMTAtPmNvZGVjOworCWludCByZXQgPSAwOworCisJaWYgKGRhNzIxMF9jb2RlYykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJBbm90aGVyIGRhNzIxMCBpcyByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCWNvZGVjLT5wcml2YXRlX2RhdGEJPSBkYTcyMTA7CisJY29kZWMtPm5hbWUJCT0gIkRBNzIxMCI7CisJY29kZWMtPm93bmVyCQk9IFRISVNfTU9EVUxFOworCWNvZGVjLT5yZWFkCQk9IGRhNzIxMF9yZWFkOworCWNvZGVjLT53cml0ZQkJPSBkYTcyMTBfd3JpdGU7CisJY29kZWMtPmRhaQkJPSAmZGE3MjEwX2RhaTsKKwljb2RlYy0+bnVtX2RhaQkJPSAxOworCWNvZGVjLT5od193cml0ZQkJPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplCT0gQVJSQVlfU0laRShkYTcyMTBfcmVnKTsKKwljb2RlYy0+cmVnX2NhY2hlCT0ga21lbWR1cChkYTcyMTBfcmVnLAorCQkJCQkgIHNpemVvZihkYTcyMTBfcmVnKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWNvZGVjLT5yZWdfY2FjaGUpCisJCXJldHVybiAtRU5PTUVNOworCisJZGE3MjEwX2RhaS5kZXYgPSBjb2RlYy0+ZGV2OworCWRhNzIxMF9jb2RlYyA9IGNvZGVjOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgQ09ERUM6ICVkXG4iLCByZXQpOworCQlnb3RvIGluaXRfZXJyOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZkYTcyMTBfZGFpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUk6ICVkXG4iLCByZXQpOworCQlnb3RvIGluaXRfZXJyOworCX0KKworCS8qIEZJWE1FCisJICoKKwkgKiBUaGlzIGRyaXZlciB1c2UgZml4ZWQgdmFsdWUgaGVyZQorCSAqLworCisJLyoKKwkgKiBBREMgc2V0dGluZ3MKKwkgKi8KKworCS8qIEVuYWJsZSBMZWZ0ICYgUmlnaHQgTUlDIFBHQSBhbmQgTWljIEJpYXMgKi8KKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9NSUNfTCwgREE3MjEwX01JQ19MX0VOIHwgREE3MjEwX01JQ0JJQVNfRU4pOworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX01JQ19SLCBEQTcyMTBfTUlDX1JfRU4pOworCisJLyogRW5hYmxlIExlZnQgYW5kIFJpZ2h0IGlucHV0IFBHQSAqLworCWRhNzIxMF93cml0ZShjb2RlYywgREE3MjEwX0lOTUlYX0wsIERBNzIxMF9JTl9MX0VOKTsKKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9JTk1JWF9SLCBEQTcyMTBfSU5fUl9FTik7CisKKwkvKiBFbmFibGUgTGVmdCBhbmQgUmlnaHQgQURDICovCisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfQURDLCBEQTcyMTBfQURDX0xfRU4gfCBEQTcyMTBfQURDX1JfRU4pOworCisJLyoKKwkgKiBEQUMgc2V0dGluZ3MKKwkgKi8KKworCS8qIEVuYWJsZSBMZWZ0IGFuZCBSaWdodCBEQUMgKi8KKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9EQUNfU0VMLAorCQkgICAgIERBNzIxMF9EQUNfTF9TUkNfREFJX0wgfCBEQTcyMTBfREFDX0xfRU4gfAorCQkgICAgIERBNzIxMF9EQUNfUl9TUkNfREFJX1IgfCBEQTcyMTBfREFDX1JfRU4pOworCisJLyogRW5hYmxlIExlZnQgYW5kIFJpZ2h0IG91dCBQR0EgKi8KKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9PVVRNSVhfTCwgREE3MjEwX09VVF9MX0VOKTsKKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9PVVRNSVhfUiwgREE3MjEwX09VVF9SX0VOKTsKKworCS8qIEVuYWJsZSBMZWZ0IGFuZCBSaWdodCBIZWFkUGhvbmUgUEdBICovCisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfSFBfQ0ZHLAorCQkgICAgIERBNzIxMF9IUF8yQ0FQX01PREUgfCBEQTcyMTBfSFBfU0VOU0VfRU4gfAorCQkgICAgIERBNzIxMF9IUF9MX0VOIHwgREE3MjEwX0hQX01PREUgfCBEQTcyMTBfSFBfUl9FTik7CisKKwkvKiBEaWFibGUgUExMIGFuZCBieXBhc3MgaXQgKi8KKwlkYTcyMTBfd3JpdGUoY29kZWMsIERBNzIxMF9QTEwsIERBNzIxMF9QTExfRlNfNDgwMDApOworCisJLyogQnlwYXNzIFBMTCBhbmQgc2V0IE1DTEsgZnJlcSByYW5nIHRvIDEwLTIwTUh6ICovCisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfUExMX0RJVjMsCisJCSAgICAgREE3MjEwX01DTEtfUkFOR0VfMTBfMjBfTUhaIHwgREE3MjEwX1BMTF9CWVApOworCisJLyogQWN0aXZhdGUgYWxsIGVuYWJsZWQgc3Vic3lzdGVtICovCisJZGE3MjEwX3dyaXRlKGNvZGVjLCBEQTcyMTBfU1RBUlRVUDEsIERBNzIxMF9TQ19NU1RfRU4pOworCisJcmV0dXJuIHJldDsKKworaW5pdF9lcnI6CisJa2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CisJY29kZWMtPnJlZ19jYWNoZSA9IE5VTEw7CisKKwlyZXR1cm4gcmV0OworCit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkYTcyMTBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkgICAJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBkYTcyMTBfcHJpdiAqZGE3MjEwOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0OworCisJZGE3MjEwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRhNzIxMF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYTcyMTApCisJCXJldHVybiAtRU5PTUVNOworCisJY29kZWMgPSAmZGE3MjEwLT5jb2RlYzsKKwljb2RlYy0+ZGV2ID0gJmkyYy0+ZGV2OworCisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgZGE3MjEwKTsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOworCisJcmV0ID0gZGE3MjEwX2luaXQoZGE3MjEwKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJfZXJyKCJGYWlsZWQgdG8gaW5pdGlhbGlzZSBkYTcyMTAgYXVkaW8gY29kZWNcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZGE3MjEwX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgZGE3MjEwX3ByaXYgKmRhNzIxMCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmZGE3MjEwX2RhaSk7CisJa2ZyZWUoZGE3MjEwLT5jb2RlYy5yZWdfY2FjaGUpOworCWtmcmVlKGRhNzIxMCk7CisJZGE3MjEwX2NvZGVjID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgZGE3MjEwX2kyY19pZFtdID0geworCXsgImRhNzIxMCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgZGE3MjEwX2kyY19pZCk7CisKKy8qIEkyQyBjb2RlYyBjb250cm9sIGxheWVyICovCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZGE3MjEwX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiREE3MjEwIEkyQyBDb2RlYyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gZGE3MjEwX2kyY19wcm9iZSwKKwkucmVtb3ZlID0gIF9fZGV2ZXhpdF9wKGRhNzIxMF9pMmNfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBkYTcyMTBfaTJjX2lkLAorfTsKKyNlbmRpZgorCitzdGF0aWMgaW50IGRhNzIxMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQ7CisKKwlpZiAoIWRhNzIxMF9jb2RlYykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb2RlYyBkZXZpY2Ugbm90IHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gZGE3MjEwX2NvZGVjOworCWNvZGVjID0gZGE3MjEwX2NvZGVjOworCisJLyogUmVnaXN0ZXIgcGNtcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gcGNtX2VycjsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJEQTcyMTAgQXVkaW8gQ29kZWMgJXNcbiIsIERBNzIxMF9WRVJTSU9OKTsKKworcGNtX2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRhNzIxMF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X2RhNzIxMCA9IHsKKwkucHJvYmUgPQlkYTcyMTBfcHJvYmUsCisJLnJlbW92ZSA9CWRhNzIxMF9yZW1vdmUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl9kYTcyMTApOworCitzdGF0aWMgaW50IF9faW5pdCBkYTcyMTBfbW9kaW5pdCh2b2lkKQoreworCWludCByZXQgPSAwOworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmZGE3MjEwX2kyY19kcml2ZXIpOworI2VuZGlmCisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KGRhNzIxMF9tb2Rpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGRhNzIxMF9leGl0KHZvaWQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCWkyY19kZWxfZHJpdmVyKCZkYTcyMTBfaTJjX2RyaXZlcik7CisjZW5kaWYKK30KK21vZHVsZV9leGl0KGRhNzIxMF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIERBNzIxMCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkRhdmlkIENoZW4sIEt1bmlub3JpIE1vcmltb3RvIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2RhNzIxMC5oIGIvc291bmQvc29jL2NvZGVjcy9kYTcyMTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTBkNjIxCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9kYTcyMTAuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogZGE3MjEwLmggIC0tICBhdWRpbyBkcml2ZXIgZm9yIGRhNzIxMAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBEaWFsb2cgU2VtaWNvbmR1Y3RvcgorICogV3JpdHRlbiBieSBEYXZpZCBDaGVuIDxEYWp1bi5jaGVuQGRpYXNlbWkuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogQ2xlYW51cHMgYnkgS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX0RBNzIxMF9ICisjZGVmaW5lIF9EQTcyMTBfSAorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIGRhNzIxMF9kYWk7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfZGE3MjEwOworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCmluZGV4IDJiNGRjMmIuLmU0Yjk0NmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKQEAgLTc2NSw5ICs3NjUsMTAgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCBhaWMzeF9wcml2ICphaWMzeCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CiAJaW50IGNvZGVjX2NsayA9IDAsIGJ5cGFzc19wbGwgPSAwLCBmc3JlZiwgbGFzdF9jbGsgPSAwOwotCXU4IGRhdGEsIHIsIHAsIHBsbF9xLCBwbGxfcCA9IDEsIHBsbF9yID0gMSwgcGxsX2ogPSAxOwotCXUxNiBwbGxfZCA9IDE7CisJdTggZGF0YSwgaiwgciwgcCwgcGxsX3EsIHBsbF9wID0gMSwgcGxsX3IgPSAxLCBwbGxfaiA9IDE7CisJdTE2IGQsIHBsbF9kID0gMTsKIAl1OCByZWc7CisJaW50IGNsazsKIAogCS8qIHNlbGVjdCBkYXRhIHdvcmQgbGVuZ3RoICovCiAJZGF0YSA9CkBAIC04MzMsNDggKzgzNCw3MCBAQAogCWlmIChieXBhc3NfcGxsKQogCQlyZXR1cm4gMDsKIAotCS8qIFVzZSBQTEwKLQkgKiBmaW5kIGFuIGFwcm9wcmlhdGUgc2V0dXAgZm9yIGosIGQsIHIgYW5kIHAgYnkgaXRlcmF0aW5nIG92ZXIKLQkgKiBwIGFuZCByIC0gaiBhbmQgZCBhcmUgY2FsY3VsYXRlZCBmb3IgZWFjaCBmcmFjdGlvbi4KLQkgKiBVcCB0byAxMjggdmFsdWVzIGFyZSBwcm9iZWQsIHRoZSBjbG9zZXN0IG9uZSB3aW5zIHRoZSBnYW1lLgorCS8qIFVzZSBQTEwsIGNvbXB1dGUgYXByb3ByaWF0ZSBzZXR1cCBmb3IgaiwgZCwgciBhbmQgcCwgdGhlIGNsb3Nlc3QKKwkgKiBvbmUgd2lucyB0aGUgZ2FtZS4gVHJ5IHdpdGggZD09MCBmaXJzdCwgbmV4dCB3aXRoIGQhPTAuCisJICogQ29uc3RyYWludHMgZm9yIGogYXJlIGFjY29yZGluZyB0byB0aGUgZGF0YXNoZWV0LgogCSAqIFRoZSBzeXNjbGsgaXMgZGl2aWRlZCBieSAxMDAwIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MuCiAJICovCisKIAljb2RlY19jbGsgPSAoMjA0OCAqIGZzcmVmKSAvIChhaWMzeC0+c3lzY2xrIC8gMTAwMCk7CiAKIAlmb3IgKHIgPSAxOyByIDw9IDE2OyByKyspCiAJCWZvciAocCA9IDE7IHAgPD0gODsgcCsrKSB7Ci0JCQlpbnQgY2xrLCB0bXAgPSAoY29kZWNfY2xrICogcGxsX3IgKiAxMCkgLyBwbGxfcDsKLQkJCXU4IGogPSB0bXAgLyAxMDAwMDsKLQkJCXUxNiBkID0gdG1wICUgMTAwMDA7CisJCQlmb3IgKGogPSA0OyBqIDw9IDU1OyBqKyspIHsKKwkJCQkvKiBUaGlzIGlzIGFjdHVhbGx5IDEwMDAqKChqKyhkLzEwMDAwKSkqcikvcAorCQkJCSAqIFRoZSB0ZXJtIGhhZCB0byBiZSBjb252ZXJ0ZWQgdG8gZ2V0CisJCQkJICogcmlkIG9mIHRoZSBkaXZpc2lvbiBieSAxMDAwMDsgZCA9IDAgaGVyZQorCQkJCSAqLworCQkJCWludCB0bXBfY2xrID0gKDEwMDAgKiBqICogcikgLyBwOwogCi0JCQlpZiAoaiA+IDYzKQotCQkJCWNvbnRpbnVlOworCQkJCS8qIENoZWNrIHdoZXRoZXIgdGhpcyB2YWx1ZXMgZ2V0IGNsb3NlciB0aGFuCisJCQkJICogdGhlIGJlc3Qgb25lcyB3ZSBoYWQgYmVmb3JlCisJCQkJICovCisJCQkJaWYgKGFicyhjb2RlY19jbGsgLSB0bXBfY2xrKSA8CisJCQkJCWFicyhjb2RlY19jbGsgLSBsYXN0X2NsaykpIHsKKwkJCQkJcGxsX2ogPSBqOyBwbGxfZCA9IDA7CisJCQkJCXBsbF9yID0gcjsgcGxsX3AgPSBwOworCQkJCQlsYXN0X2NsayA9IHRtcF9jbGs7CisJCQkJfQogCi0JCQlpZiAoZCAhPSAwICYmIGFpYzN4LT5zeXNjbGsgPCAxMDAwMDAwMCkKLQkJCQljb250aW51ZTsKLQotCQkJLyogVGhpcyBpcyBhY3R1YWxseSAxMDAwICogKChqICsgKGQvMTAwMDApKSAqIHIpIC8gcAotCQkJICogVGhlIHRlcm0gaGFkIHRvIGJlIGNvbnZlcnRlZCB0byBnZXQgcmlkIG9mIHRoZQotCQkJICogZGl2aXNpb24gYnkgMTAwMDAgKi8KLQkJCWNsayA9ICgoMTAwMDAgKiBqICogcikgKyAoZCAqIHIpKSAvICgxMCAqIHApOwotCi0JCQkvKiBjaGVjayB3aGV0aGVyIHRoaXMgdmFsdWVzIGdldCBjbG9zZXIgdGhhbiB0aGUgYmVzdAotCQkJICogb25lcyB3ZSBoYWQgYmVmb3JlICovCi0JCQlpZiAoYWJzKGNvZGVjX2NsayAtIGNsaykgPCBhYnMoY29kZWNfY2xrIC0gbGFzdF9jbGspKSB7Ci0JCQkJcGxsX2ogPSBqOyBwbGxfZCA9IGQ7IHBsbF9yID0gcjsgcGxsX3AgPSBwOwotCQkJCWxhc3RfY2xrID0gY2xrOworCQkJCS8qIEVhcmx5IGV4aXQgZm9yIGV4YWN0IG1hdGNoZXMgKi8KKwkJCQlpZiAodG1wX2NsayA9PSBjb2RlY19jbGspCisJCQkJCWdvdG8gZm91bmQ7CiAJCQl9Ci0KLQkJCS8qIEVhcmx5IGV4aXQgZm9yIGV4YWN0IG1hdGNoZXMgKi8KLQkJCWlmIChjbGsgPT0gY29kZWNfY2xrKQotCQkJCWJyZWFrOwogCQl9CiAKKwkvKiB0cnkgd2l0aCBkICE9IDAgKi8KKwlmb3IgKHAgPSAxOyBwIDw9IDg7IHArKykgeworCQlqID0gY29kZWNfY2xrICogcCAvIDEwMDA7CisKKwkJaWYgKGogPCA0IHx8IGogPiAxMSkKKwkJCWNvbnRpbnVlOworCisJCS8qIGRvIG5vdCB1c2UgY29kZWNfY2xrIGhlcmUgc2luY2Ugd2UnZCBsb29zZSBwcmVjaXNpb24gKi8KKwkJZCA9ICgoMjA0OCAqIHAgKiBmc3JlZikgLSBqICogYWljM3gtPnN5c2NsaykKKwkJCSogMTAwIC8gKGFpYzN4LT5zeXNjbGsvMTAwKTsKKworCQljbGsgPSAoMTAwMDAgKiBqICsgZCkgLyAoMTAgKiBwKTsKKworCQkvKiBjaGVjayB3aGV0aGVyIHRoaXMgdmFsdWVzIGdldCBjbG9zZXIgdGhhbiB0aGUgYmVzdAorCQkgKiBvbmVzIHdlIGhhZCBiZWZvcmUgKi8KKwkJaWYgKGFicyhjb2RlY19jbGsgLSBjbGspIDwgYWJzKGNvZGVjX2NsayAtIGxhc3RfY2xrKSkgeworCQkJcGxsX2ogPSBqOyBwbGxfZCA9IGQ7IHBsbF9yID0gMTsgcGxsX3AgPSBwOworCQkJbGFzdF9jbGsgPSBjbGs7CisJCX0KKworCQkvKiBFYXJseSBleGl0IGZvciBleGFjdCBtYXRjaGVzICovCisJCWlmIChjbGsgPT0gY29kZWNfY2xrKQorCQkJZ290byBmb3VuZDsKKwl9CisKIAlpZiAobGFzdF9jbGsgPT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzKCk6IHVuYWJsZSB0byBzZXR1cCBQTExcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCitmb3VuZDoKIAlkYXRhID0gYWljM3hfcmVhZF9yZWdfY2FjaGUoY29kZWMsIEFJQzNYX1BMTF9QUk9HQV9SRUcpOwogCWFpYzN4X3dyaXRlKGNvZGVjLCBBSUMzWF9QTExfUFJPR0FfUkVHLCBkYXRhIHwgKHBsbF9wIDw8IFBMTFBfU0hJRlQpKTsKIAlhaWMzeF93cml0ZShjb2RlYywgQUlDM1hfT1ZSRl9TVEFUVVNfQU5EX1BMTFJfUkVHLCBwbGxfciA8PCBQTExSX1NISUZUKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwZGFjMzMuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwZGFjMzMuYwppbmRleCA5Yzg5MDNkLi5mOWYzNjdkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGRhYzMzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBkYWMzMy5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CkBAIC01OCwxMSArNTksMjYgQEAKIAlEQUMzM19GTFVTSCwKIH07CiAKK2VudW0gZGFjMzNfZmlmb19tb2RlcyB7CisJREFDMzNfRklGT19CWVBBU1MgPSAwLAorCURBQzMzX0ZJRk9fTU9ERTEsCisJREFDMzNfRklGT19NT0RFNywKKwlEQUMzM19GSUZPX0xBU1RfTU9ERSwKK307CisKKyNkZWZpbmUgREFDMzNfTlVNX1NVUFBMSUVTIDMKK3N0YXRpYyBjb25zdCBjaGFyICpkYWMzM19zdXBwbHlfbmFtZXNbREFDMzNfTlVNX1NVUFBMSUVTXSA9IHsKKwkiQVZERCIsCisJIkRWREQiLAorCSJJT1ZERCIsCit9OworCiBzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiB7CiAJc3RydWN0IG11dGV4IG11dGV4OwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkYWMzM193cTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tEQUMzM19OVU1fU1VQUExJRVNdOwogCWludCBwb3dlcl9ncGlvOwogCWludCBjaGlwX3Bvd2VyOwogCWludCBpcnE7CkBAIC03Myw4ICs4OSw5IEBACiAJCQkJCSAqIHRoaXMgKi8KIAl1bnNpZ25lZCBpbnQgbnNhbXBsZV9tYXg7CS8qIG5zYW1wbGUgc2hvdWxkIG5vdCBiZSBoaWdoZXIgdGhhbgogCQkJCQkgKiB0aGlzICovCi0JdW5zaWduZWQgaW50IG5zYW1wbGVfc3dpdGNoOwkvKiBVc2UgRklGTyBvciBieXBhc3MgRklGTyBzd2l0Y2ggKi8KKwllbnVtIGRhYzMzX2ZpZm9fbW9kZXMgZmlmb19tb2RlOy8qIEZJRk8gbW9kZSBzZWxlY3Rpb24gKi8KIAl1bnNpZ25lZCBpbnQgbnNhbXBsZTsJCS8qIGJ1cnN0IHJlYWQgYW1vdW50IGZyb20gaG9zdCAqLworCXU4IGJ1cnN0X2JjbGtkaXY7CQkvKiBCQ0xLIGRpdmlkZXIgdmFsdWUgaW4gYnVyc3QgbW9kZSAqLwogCiAJZW51bSBkYWMzM19zdGF0ZSBzdGF0ZTsKIH07CkBAIC0yOTcsMjggKzMxNCw0OSBAQAogCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19QV1JfQ1RSTCwgcmVnKTsKIH0KIAotc3RhdGljIHZvaWQgZGFjMzNfaGFyZF9wb3dlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBwb3dlcikKK3N0YXRpYyBpbnQgZGFjMzNfaGFyZF9wb3dlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBwb3dlcikKIHsKIAlzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZkYWMzMy0+bXV0ZXgpOwogCWlmIChwb3dlcikgewotCQlpZiAoZGFjMzMtPnBvd2VyX2dwaW8gPj0gMCkgewotCQkJZ3Bpb19zZXRfdmFsdWUoZGFjMzMtPnBvd2VyX2dwaW8sIDEpOwotCQkJZGFjMzMtPmNoaXBfcG93ZXIgPSAxOwotCQkJLyogUmVzdG9yZSByZWdpc3RlcnMgKi8KLQkJCWRhYzMzX3Jlc3RvcmVfcmVncyhjb2RlYyk7CisJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKGRhYzMzLT5zdXBwbGllcyksCisJCQkJCSAgZGFjMzMtPnN1cHBsaWVzKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkJIkZhaWxlZCB0byBlbmFibGUgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQkJCWdvdG8gZXhpdDsKIAkJfQorCisJCWlmIChkYWMzMy0+cG93ZXJfZ3BpbyA+PSAwKQorCQkJZ3Bpb19zZXRfdmFsdWUoZGFjMzMtPnBvd2VyX2dwaW8sIDEpOworCisJCWRhYzMzLT5jaGlwX3Bvd2VyID0gMTsKKworCQkvKiBSZXN0b3JlIHJlZ2lzdGVycyAqLworCQlkYWMzM19yZXN0b3JlX3JlZ3MoY29kZWMpOworCiAJCWRhYzMzX3NvZnRfcG93ZXIoY29kZWMsIDEpOwogCX0gZWxzZSB7CiAJCWRhYzMzX3NvZnRfcG93ZXIoY29kZWMsIDApOwotCQlpZiAoZGFjMzMtPnBvd2VyX2dwaW8gPj0gMCkgeworCQlpZiAoZGFjMzMtPnBvd2VyX2dwaW8gPj0gMCkKIAkJCWdwaW9fc2V0X3ZhbHVlKGRhYzMzLT5wb3dlcl9ncGlvLCAwKTsKLQkJCWRhYzMzLT5jaGlwX3Bvd2VyID0gMDsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmRhYzMzLT5tdXRleCk7CiAKKwkJcmV0ID0gcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGRhYzMzLT5zdXBwbGllcyksCisJCQkJCSAgICAgZGFjMzMtPnN1cHBsaWVzKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkJIkZhaWxlZCB0byBkaXNhYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCWRhYzMzLT5jaGlwX3Bvd2VyID0gMDsKKwl9CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZkYWMzMy0+bXV0ZXgpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZGFjMzNfZ2V0X25zYW1wbGUoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCkBAIC0zNTEsMzkgKzM4OSw0OCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZGFjMzNfZ2V0X25zYW1wbGVfc3dpdGNoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorc3RhdGljIGludCBkYWMzM19nZXRfZmlmb19tb2RlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCi0JdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBkYWMzMy0+bnNhbXBsZV9zd2l0Y2g7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBkYWMzMy0+Zmlmb19tb2RlOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZGFjMzNfc2V0X25zYW1wbGVfc3dpdGNoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorc3RhdGljIGludCBkYWMzM19zZXRfZmlmb19tb2RlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCWludCByZXQgPSAwOwogCi0JaWYgKGRhYzMzLT5uc2FtcGxlX3N3aXRjaCA9PSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkKKwlpZiAoZGFjMzMtPmZpZm9fbW9kZSA9PSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkKIAkJcmV0dXJuIDA7CiAJLyogRG8gbm90IGFsbG93IGNoYW5nZXMgd2hpbGUgc3RyZWFtIGlzIHJ1bm5pbmcqLwogCWlmIChjb2RlYy0+YWN0aXZlKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIDwgMCB8fAotCSAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA+IDEpCisJICAgIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID49IERBQzMzX0ZJRk9fTEFTVF9NT0RFKQogCQlyZXQgPSAtRUlOVkFMOwogCWVsc2UKLQkJZGFjMzMtPm5zYW1wbGVfc3dpdGNoID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisJCWRhYzMzLT5maWZvX21vZGUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKIAogCXJldHVybiByZXQ7CiB9CiAKKy8qIENvZGVjIG9wZXJhdGlvbiBtb2RlcyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmRhYzMzX2ZpZm9fbW9kZV90ZXh0c1tdID0geworCSJCeXBhc3MiLCAiTW9kZSAxIiwgIk1vZGUgNyIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZGFjMzNfZmlmb19tb2RlX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRV9FWFQoQVJSQVlfU0laRShkYWMzM19maWZvX21vZGVfdGV4dHMpLAorCQkJICAgIGRhYzMzX2ZpZm9fbW9kZV90ZXh0cyk7CisKIC8qCiAgKiBEQUNML1IgZGlnaXRhbCB2b2x1bWUgY29udHJvbDoKICAqIGZyb20gMCBkQiB0byAtNjMuNSBpbiAwLjUgZEIgc3RlcHMKQEAgLTQwNiw4ICs0NTMsOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhYzMzX25zYW1wbGVfc25kX2NvbnRyb2xzW10gPSB7CiAJU09DX1NJTkdMRV9FWFQoIm5TYW1wbGUiLCAwLCAwLCA1OTAwLCAwLAogCQkgZGFjMzNfZ2V0X25zYW1wbGUsIGRhYzMzX3NldF9uc2FtcGxlKSwKLQlTT0NfU0lOR0xFX0VYVCgiblNhbXBsZSBTd2l0Y2giLCAwLCAwLCAxLCAwLAotCQkgZGFjMzNfZ2V0X25zYW1wbGVfc3dpdGNoLCBkYWMzM19zZXRfbnNhbXBsZV9zd2l0Y2gpLAorCVNPQ19FTlVNX0VYVCgiRklGTyBNb2RlIiwgZGFjMzNfZmlmb19tb2RlX2VudW0sCisJCSBkYWMzM19nZXRfZmlmb19tb2RlLCBkYWMzM19zZXRfZmlmb19tb2RlKSwKIH07CiAKIC8qIEFuYWxvZyBieXBhc3MgKi8KQEAgLTQ2OSw2ICs1MTYsOCBAQAogc3RhdGljIGludCBkYWMzM19zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCiB7CisJaW50IHJldDsKKwogCXN3aXRjaCAobGV2ZWwpIHsKIAljYXNlIFNORF9TT0NfQklBU19PTjoKIAkJZGFjMzNfc29mdF9wb3dlcihjb2RlYywgMSk7CkBAIC00NzYsMTIgKzUyNSwxOSBAQAogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6Ci0JCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKQotCQkJZGFjMzNfaGFyZF9wb3dlcihjb2RlYywgMSk7CisJCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQlyZXQgPSBkYWMzM19oYXJkX3Bvd2VyKGNvZGVjLCAxKTsKKwkJCWlmIChyZXQgIT0gMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisKIAkJZGFjMzNfc29mdF9wb3dlcihjb2RlYywgMCk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKLQkJZGFjMzNfaGFyZF9wb3dlcihjb2RlYywgMCk7CisJCXJldCA9IGRhYzMzX2hhcmRfcG93ZXIoY29kZWMsIDApOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCiAJCWJyZWFrOwogCX0KIAljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOwpAQCAtNDg5LDYgKzU0NSw1MSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZGFjMzNfcHJlZmlsbF9oYW5kbGVyKHN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisKKwljb2RlYyA9ICZkYWMzMy0+Y29kZWM7CisKKwlzd2l0Y2ggKGRhYzMzLT5maWZvX21vZGUpIHsKKwljYXNlIERBQzMzX0ZJRk9fTU9ERTE6CisJCWRhYzMzX3dyaXRlMTYoY29kZWMsIERBQzMzX05TQU1QTEVfTVNCLAorCQkJCURBQzMzX1RIUlJFRyhkYWMzMy0+bnNhbXBsZSkpOworCQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19QUkVGSUxMX01TQiwKKwkJCQlEQUMzM19USFJSRUcoZGFjMzMtPmFsYXJtX3RocmVzaG9sZCkpOworCQlicmVhazsKKwljYXNlIERBQzMzX0ZJRk9fTU9ERTc6CisJCWRhYzMzX3dyaXRlMTYoY29kZWMsIERBQzMzX1BSRUZJTExfTVNCLAorCQkJCURBQzMzX1RIUlJFRygxMCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiVW5oYW5kbGVkIEZJRk8gbW9kZTogJWRcbiIsCisJCQkJCQkJZGFjMzMtPmZpZm9fbW9kZSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGRhYzMzX3BsYXliYWNrX2hhbmRsZXIoc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKworCWNvZGVjID0gJmRhYzMzLT5jb2RlYzsKKworCXN3aXRjaCAoZGFjMzMtPmZpZm9fbW9kZSkgeworCWNhc2UgREFDMzNfRklGT19NT0RFMToKKwkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfTlNBTVBMRV9NU0IsCisJCQkJREFDMzNfVEhSUkVHKGRhYzMzLT5uc2FtcGxlKSk7CisJCWJyZWFrOworCWNhc2UgREFDMzNfRklGT19NT0RFNzoKKwkJLyogQXQgdGhlIG1vbWVudCB3ZSBhcmUgbm90IHVzaW5nIGludGVycnVwdHMgaW4gbW9kZTcgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4oY29kZWMtPmRldiwgIlVuaGFuZGxlZCBGSUZPIG1vZGU6ICVkXG4iLAorCQkJCQkJCWRhYzMzLT5maWZvX21vZGUpOworCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGRhYzMzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKQEAgLTUwMiwxNCArNjAzLDEwIEBACiAJc3dpdGNoIChkYWMzMy0+c3RhdGUpIHsKIAljYXNlIERBQzMzX1BSRUZJTEw6CiAJCWRhYzMzLT5zdGF0ZSA9IERBQzMzX1BMQVlCQUNLOwotCQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19OU0FNUExFX01TQiwKLQkJCQlEQUMzM19USFJSRUcoZGFjMzMtPm5zYW1wbGUpKTsKLQkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfUFJFRklMTF9NU0IsCi0JCQkJREFDMzNfVEhSUkVHKGRhYzMzLT5hbGFybV90aHJlc2hvbGQpKTsKKwkJZGFjMzNfcHJlZmlsbF9oYW5kbGVyKGRhYzMzKTsKIAkJYnJlYWs7CiAJY2FzZSBEQUMzM19QTEFZQkFDSzoKLQkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfTlNBTVBMRV9NU0IsCi0JCQkJREFDMzNfVEhSUkVHKGRhYzMzLT5uc2FtcGxlKSk7CisJCWRhYzMzX3BsYXliYWNrX2hhbmRsZXIoZGFjMzMpOwogCQlicmVhazsKIAljYXNlIERBQzMzX0lETEU6CiAJCWJyZWFrOwpAQCAtNTQ3LDcgKzY0NCw3IEBACiAJdW5zaWduZWQgaW50IHB3cl9jdHJsOwogCiAJLyogU3RvcCBwZW5kaW5nIHdvcmtxdWV1ZSAqLwotCWlmIChkYWMzMy0+bnNhbXBsZV9zd2l0Y2gpCisJaWYgKGRhYzMzLT5maWZvX21vZGUpCiAJCWNhbmNlbF93b3JrX3N5bmMoJmRhYzMzLT53b3JrKTsKIAogCW11dGV4X2xvY2soJmRhYzMzLT5tdXRleCk7CkBAIC02MDMsNyArNzAwLDcgQEAKIH0KIAogI2RlZmluZSBDQUxDX09TQ1NFVChyYXRlLCByZWZjbGspICggXAotCSgoKChyYXRlICogMTAwMDApIC8gcmVmY2xrKSAqIDQwOTYpICsgNTAwMCkgLyAxMDAwMCkKKwkoKCgocmF0ZSAqIDEwMDAwKSAvIHJlZmNsaykgKiA0MDk2KSArIDcwMDApIC8gMTAwMDApCiAjZGVmaW5lIENBTENfUkFUSU9TRVQocmF0ZSwgcmVmY2xrKSAoIFwKIAkoKCgocmVmY2xrICAqIDEwMDAwMCkgLyByYXRlKSAqIDE2Mzg0KSArIDUwMDAwKSAvIDEwMDAwMCkKIApAQCAtNjE5LDcgKzcxNiw3IEBACiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAlzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGludCBvc2NzZXQsIHJhdGlvc2V0LCBwd3JfY3RybCwgcmVnX3RtcDsKLQl1OCBhaWN0cmxfYSwgZmlmb2N0cmxfYTsKKwl1OCBhaWN0cmxfYSwgYWljdHJsX2IsIGZpZm9jdHJsX2E7CiAKIAlzd2l0Y2ggKHN1YnN0cmVhbS0+cnVudGltZS0+cmF0ZSkgewogCWNhc2UgNDQxMDA6CkBAIC02MzcsNyArNzM0LDEwIEBACiAKIAlhaWN0cmxfYSA9IGRhYzMzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0EpOwogCWFpY3RybF9hICY9IH4oREFDMzNfTkNZQ0xfTUFTSyB8IERBQzMzX1dMRU5fTUFTSyk7CisJLyogUmVhZCBGSUZPIGNvbnRyb2wgQSwgYW5kIGNsZWFyIEZJRk8gZmx1c2ggYml0ICovCiAJZmlmb2N0cmxfYSA9IGRhYzMzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBEQUMzM19GSUZPX0NUUkxfQSk7CisJZmlmb2N0cmxfYSAmPSB+REFDMzNfRklGT0ZMVVNIOworCiAJZmlmb2N0cmxfYSAmPSB+REFDMzNfV0lEVEg7CiAJc3dpdGNoIChzdWJzdHJlYW0tPnJ1bnRpbWUtPmZvcm1hdCkgewogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CkBAIC02NzUsNyArNzc1LDggQEAKIAogCWRhYzMzX29zY3dhaXQoY29kZWMpOwogCi0JaWYgKGRhYzMzLT5uc2FtcGxlX3N3aXRjaCkgeworCWlmIChkYWMzMy0+Zmlmb19tb2RlKSB7CisJCS8qIEdlbmVyaWMgZm9yIGFsbCBGSUZPIG1vZGVzICovCiAJCS8qIDUwLTUxIDogQVNSQyBDb250cm9sIHJlZ2lzdGVycyAqLwogCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfQVNSQ19DVFJMX0EsICgxIDw8IDQpKTsgLyogZGl2PTIgKi8KIAkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0FTUkNfQ1RSTF9CLCAxKTsgLyogPz8/ICovCkBAIC02ODUsMzggKzc4NiwxMDEgQEAKIAogCQkvKiBTZXQgaW50ZXJydXB0cyB0byBoaWdoIGFjdGl2ZSAqLwogCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfSU5UUF9DVFJMX0EsIERBQzMzX0lOVFBNX0FISUdIKTsKLQotCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfRklGT19JUlFfTU9ERV9CLAotCQkJICAgIERBQzMzX0FUTShEQUMzM19GSUZPX0lSUV9NT0RFX0xFVkVMKSk7Ci0JCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19GSUZPX0lSUV9NQVNLLCBEQUMzM19NQVQpOwogCX0gZWxzZSB7CisJCS8qIEZJRk8gYnlwYXNzIG1vZGUgKi8KIAkJLyogNTAtNTEgOiBBU1JDIENvbnRyb2wgcmVnaXN0ZXJzICovCiAJCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19BU1JDX0NUUkxfQSwgREFDMzNfU1JDQllQKTsKIAkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0FTUkNfQ1RSTF9CLCAwKTsgLyogPz8/ICovCiAJfQogCi0JaWYgKGRhYzMzLT5uc2FtcGxlX3N3aXRjaCkKKwkvKiBJbnRlcnJ1cHQgYmVoYXZpb3VyIGNvbmZpZ3VyYXRpb24gKi8KKwlzd2l0Y2ggKGRhYzMzLT5maWZvX21vZGUpIHsKKwljYXNlIERBQzMzX0ZJRk9fTU9ERTE6CisJCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19GSUZPX0lSUV9NT0RFX0IsCisJCQkgICAgREFDMzNfQVRNKERBQzMzX0ZJRk9fSVJRX01PREVfTEVWRUwpKTsKKwkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0ZJRk9fSVJRX01BU0ssIERBQzMzX01BVCk7CisJCWJyZWFrOworCWNhc2UgREFDMzNfRklGT19NT0RFNzoKKwkJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfRklGT19JUlFfTUFTSywgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGluIEZJRk8gYnlwYXNzIG1vZGUsIHRoZSBpbnRlcnJ1cHRzIGFyZSBub3QgdXNlZCAqLworCQlicmVhazsKKwl9CisKKwlhaWN0cmxfYiA9IGRhYzMzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0IpOworCisJc3dpdGNoIChkYWMzMy0+Zmlmb19tb2RlKSB7CisJY2FzZSBEQUMzM19GSUZPX01PREUxOgorCQkvKgorCQkgKiBGb3IgbW9kZTE6CisJCSAqIERpc2FibGUgdGhlIEZJRk8gYnlwYXNzIChFbmFibGUgdGhlIHVzZSBvZiBGSUZPKQorCQkgKiBTZWxlY3QgblNhbXBsZSBtb2RlCisJCSAqIEJDTEsgaXMgb25seSBydW5uaW5nIHdoZW4gZGF0YSBpcyBuZWVkZWQgYnkgREFDMzMKKwkJICovCiAJCWZpZm9jdHJsX2EgJj0gfkRBQzMzX0ZCWVBBUzsKLQllbHNlCisJCWZpZm9jdHJsX2EgJj0gfkRBQzMzX0ZBVVRPOworCQlhaWN0cmxfYiAmPSB+REFDMzNfQkNMS09OOworCQlicmVhazsKKwljYXNlIERBQzMzX0ZJRk9fTU9ERTc6CisJCS8qCisJCSAqIEZvciBtb2RlMToKKwkJICogRGlzYWJsZSB0aGUgRklGTyBieXBhc3MgKEVuYWJsZSB0aGUgdXNlIG9mIEZJRk8pCisJCSAqIFNlbGVjdCBUaHJlc2hvbGQgbW9kZQorCQkgKiBCQ0xLIGlzIG9ubHkgcnVubmluZyB3aGVuIGRhdGEgaXMgbmVlZGVkIGJ5IERBQzMzCisJCSAqLworCQlmaWZvY3RybF9hICY9IH5EQUMzM19GQllQQVM7CisJCWZpZm9jdHJsX2EgfD0gREFDMzNfRkFVVE87CisJCWFpY3RybF9iICY9IH5EQUMzM19CQ0xLT047CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qCisJCSAqIEZvciBGSUZPIGJ5cGFzcyBtb2RlOgorCQkgKiBFbmFibGUgdGhlIEZJRk8gYnlwYXNzIChEaXNhYmxlIHRoZSBGSUZPIHVzZSkKKwkJICogU2V0IHRoZSBCQ0xLIGFzIGNvbnRpbm91cworCQkgKi8KIAkJZmlmb2N0cmxfYSB8PSBEQUMzM19GQllQQVM7CisJCWFpY3RybF9iIHw9IERBQzMzX0JDTEtPTjsKKwkJYnJlYWs7CisJfQorCiAJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX0ZJRk9fQ1RSTF9BLCBmaWZvY3RybF9hKTsKLQogCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0EsIGFpY3RybF9hKTsKLQlyZWdfdG1wID0gZGFjMzNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQik7Ci0JaWYgKGRhYzMzLT5uc2FtcGxlX3N3aXRjaCkKLQkJcmVnX3RtcCAmPSB+REFDMzNfQkNMS09OOworCWRhYzMzX3dyaXRlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0IsIGFpY3RybF9iKTsKKworCS8qCisJICogQkNMSyBkaXZpZGUgcmF0aW8KKwkgKiAwOiAxLjUKKwkgKiAxOiAxCisJICogMjogMgorCSAqIC4uLgorCSAqIDI1NDogMjU0CisJICogMjU1OiAyNTUKKwkgKi8KKwlpZiAoZGFjMzMtPmZpZm9fbW9kZSkKKwkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQywKKwkJCQkJCQlkYWMzMy0+YnVyc3RfYmNsa2Rpdik7CiAJZWxzZQotCQlyZWdfdG1wIHw9IERBQzMzX0JDTEtPTjsKLQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9CLCByZWdfdG1wKTsKKwkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQywgMzIpOwogCi0JaWYgKGRhYzMzLT5uc2FtcGxlX3N3aXRjaCkgewotCQkvKiAyMDogQkNMSyBkaXZpZGUgcmF0aW8gKi8KLQkJZGFjMzNfd3JpdGUoY29kZWMsIERBQzMzX1NFUl9BVURJT0lGX0NUUkxfQywgMyk7Ci0KKwlzd2l0Y2ggKGRhYzMzLT5maWZvX21vZGUpIHsKKwljYXNlIERBQzMzX0ZJRk9fTU9ERTE6CiAJCWRhYzMzX3dyaXRlMTYoY29kZWMsIERBQzMzX0FUSFJfTVNCLAogCQkJICAgICAgREFDMzNfVEhSUkVHKGRhYzMzLT5hbGFybV90aHJlc2hvbGQpKTsKLQl9IGVsc2UgewotCQlkYWMzM193cml0ZShjb2RlYywgREFDMzNfU0VSX0FVRElPSUZfQ1RSTF9DLCAzMik7CisJCWJyZWFrOworCWNhc2UgREFDMzNfRklGT19NT0RFNzoKKwkJLyoKKwkJICogQ29uZmlndXJlIHRoZSB0aHJlc2hvbGQgbGV2ZWxzLCBhbmQgbGVhdmUgMTAgc2FtcGxlIHNwYWNlCisJCSAqIGF0IHRoZSBib3R0b20sIGFuZCBhbHNvIGF0IHRoZSB0b3Agb2YgdGhlIEZJRk8KKwkJICovCisJCWRhYzMzX3dyaXRlMTYoY29kZWMsIERBQzMzX1VUSFJfTVNCLAorCQkJREFDMzNfVEhSUkVHKERBQzMzX0JVRkZFUl9TSVpFX1NBTVBMRVMgLSAxMCkpOworCQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19MVEhSX01TQiwKKwkJCURBQzMzX1RIUlJFRygxMCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAKIAltdXRleF91bmxvY2soJmRhYzMzLT5tdXRleCk7CkBAIC03ODksNyArOTUzLDcgQEAKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKLQkJaWYgKGRhYzMzLT5uc2FtcGxlX3N3aXRjaCkgeworCQlpZiAoZGFjMzMtPmZpZm9fbW9kZSkgewogCQkJZGFjMzMtPnN0YXRlID0gREFDMzNfUFJFRklMTDsKIAkJCXF1ZXVlX3dvcmsoZGFjMzMtPmRhYzMzX3dxLCAmZGFjMzMtPndvcmspOwogCQl9CkBAIC03OTcsNyArOTYxLDcgQEAKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKLQkJaWYgKGRhYzMzLT5uc2FtcGxlX3N3aXRjaCkgeworCQlpZiAoZGFjMzMtPmZpZm9fbW9kZSkgewogCQkJZGFjMzMtPnN0YXRlID0gREFDMzNfRkxVU0g7CiAJCQlxdWV1ZV93b3JrKGRhYzMzLT5kYWMzM193cSwgJmRhYzMzLT53b3JrKTsKIAkJfQpAQCAtODQzLDYgKzEwMDcsNyBAQAogCQkJICAgICB1bnNpZ25lZCBpbnQgZm10KQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKIAl1OCBhaWN0cmxfYSwgYWljdHJsX2I7CiAKIAlhaWN0cmxfYSA9IGRhYzMzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBEQUMzM19TRVJfQVVESU9JRl9DVFJMX0EpOwpAQCAtODU1LDcgKzEwMjAsMTEgQEAKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgogCQkvKiBDb2RlYyBTbGF2ZSAqLwotCQlhaWN0cmxfYSAmPSB+KERBQzMzX01TQkNMSyB8IERBQzMzX01TV0NMSyk7CisJCWlmIChkYWMzMy0+Zmlmb19tb2RlKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGSUZPIG1vZGUgcmVxdWlyZXMgbWFzdGVyIG1vZGVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0gZWxzZQorCQkJYWljdHJsX2EgJj0gfihEQUMzM19NU0JDTEsgfCBEQUMzM19NU1dDTEspOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTk1OSw2ICsxMTI4LDkgQEAKIAkvKiBwb3dlciBvbiBkZXZpY2UgKi8KIAlkYWMzM19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCisJLyogQmlhcyBsZXZlbCBjb25maWd1cmF0aW9uIGhhcyBlbmFibGVkIHJlZ3VsYXRvciBhbiBleHRyYSB0aW1lICovCisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGRhYzMzLT5zdXBwbGllcyksIGRhYzMzLT5zdXBwbGllcyk7CisKIAlyZXR1cm4gMDsKIAogcGNtX2VycjoKQEAgLTEwMzMsMTMgKzEyMDUsMTMgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChkYWMzM19kYWkpOwogCi1zdGF0aWMgaW50IGRhYzMzX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQorc3RhdGljIGludCBfX2RldmluaXQgZGFjMzNfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHRsdjMyMGRhYzMzX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMzsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldCwgaTsKIAogCWlmIChjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhID09IE5VTEwpIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJQbGF0Zm9ybSBkYXRhIG5vdCBzZXRcbiIpOwpAQCAtMTA4MCwxMCArMTI1MiwxMSBAQAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhYzMzKTsKIAogCWRhYzMzLT5wb3dlcl9ncGlvID0gcGRhdGEtPnBvd2VyX2dwaW87CisJZGFjMzMtPmJ1cnN0X2JjbGtkaXYgPSBwZGF0YS0+YnVyc3RfYmNsa2RpdjsKIAlkYWMzMy0+aXJxID0gY2xpZW50LT5pcnE7CiAJZGFjMzMtPm5zYW1wbGUgPSBOU0FNUExFX01BWDsKIAkvKiBEaXNhYmxlIEZJRk8gdXNlIGJ5IGRlZmF1bHQgKi8KLQlkYWMzMy0+bnNhbXBsZV9zd2l0Y2ggPSAwOworCWRhYzMzLT5maWZvX21vZGUgPSBEQUMzM19GSUZPX0JZUEFTUzsKIAogCXRsdjMyMGRhYzMzX2NvZGVjID0gY29kZWM7CiAKQEAgLTExMzAsNiArMTMwMywyNCBAQAogCQl9CiAJfQogCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGFjMzMtPnN1cHBsaWVzKTsgaSsrKQorCQlkYWMzMy0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gZGFjMzNfc3VwcGx5X25hbWVzW2ldOworCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZ2V0KGNvZGVjLT5kZXYsIEFSUkFZX1NJWkUoZGFjMzMtPnN1cHBsaWVzKSwKKwkJCQkgZGFjMzMtPnN1cHBsaWVzKTsKKworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2dldDsKKwl9CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShkYWMzMy0+c3VwcGxpZXMpLAorCQkJCSAgICBkYWMzMy0+c3VwcGxpZXMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZW5hYmxlOworCX0KKwogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOwogCWlmIChyZXQgIT0gMCkgewogCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29kZWM6ICVkXG4iLCByZXQpOwpAQCAtMTE0OSw2ICsxMzQwLDEwIEBACiAJcmV0dXJuIHJldDsKIAogZXJyb3JfY29kZWM6CisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGRhYzMzLT5zdXBwbGllcyksIGRhYzMzLT5zdXBwbGllcyk7CitlcnJfZW5hYmxlOgorCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRShkYWMzMy0+c3VwcGxpZXMpLCBkYWMzMy0+c3VwcGxpZXMpOworZXJyX2dldDoKIAlpZiAoZGFjMzMtPmlycSA+PSAwKSB7CiAJCWZyZWVfaXJxKGRhYzMzLT5pcnEsICZkYWMzMy0+Y29kZWMpOwogCQlkZXN0cm95X3dvcmtxdWV1ZShkYWMzMy0+ZGFjMzNfd3EpOwpAQCAtMTE2NSw3ICsxMzYwLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGRhYzMzX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IGRhYzMzX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzM7CiAKQEAgLTExNzcsNiArMTM3Miw4IEBACiAJaWYgKGRhYzMzLT5pcnEgPj0gMCkKIAkJZnJlZV9pcnEoZGFjMzMtPmlycSwgJmRhYzMzLT5jb2RlYyk7CiAKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUoZGFjMzMtPnN1cHBsaWVzKSwgZGFjMzMtPnN1cHBsaWVzKTsKKwogCWRlc3Ryb3lfd29ya3F1ZXVlKGRhYzMzLT5kYWMzM193cSk7CiAJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmZGFjMzNfZGFpKTsKIAlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJmRhYzMzLT5jb2RlYyk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RwYTYxMzBhMi5jIGIvc291bmQvc29jL2NvZGVjcy90cGE2MTMwYTIuYwppbmRleCA2YjY1MGMxLi45NThkNDljIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RwYTYxMzBhMi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdHBhNjEzMGEyLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8c291bmQvdHBhNjEzMGEyLXBsYXQuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgpAQCAtMzQsMTAgKzM1LDIyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCAqdHBhNjEzMGEyX2NsaWVudDsKIAorI2RlZmluZSBUUEE2MTMwQTJfTlVNX1NVUFBMSUVTIDIKK3N0YXRpYyBjb25zdCBjaGFyICp0cGE2MTMwYTJfc3VwcGx5X25hbWVzW1RQQTYxMzBBMl9OVU1fU1VQUExJRVNdID0geworCSJDUFZTUyIsCisJIlZkZCIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqdHBhNjE0MGEyX3N1cHBseV9uYW1lc1tUUEE2MTMwQTJfTlVNX1NVUFBMSUVTXSA9IHsKKwkiSFBWZGQiLAorCSJBVmRkIiwKK307CisKIC8qIFRoaXMgc3RydWN0IGlzIHVzZWQgdG8gc2F2ZSB0aGUgY29udGV4dCAqLwogc3RydWN0IHRwYTYxMzBhMl9kYXRhIHsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiAJdW5zaWduZWQgY2hhciByZWdzW1RQQTYxMzBBMl9DQUNIRVJFR05VTV07CisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbVFBBNjEzMEEyX05VTV9TVVBQTElFU107CiAJaW50IHBvd2VyX2dwaW87CiAJdW5zaWduZWQgY2hhciBwb3dlcl9zdGF0ZTsKIH07CkBAIC0xMDYsMTAgKzExOSwxMSBAQAogCQl0cGE2MTMwYTJfaTJjX3dyaXRlKGksIGRhdGEtPnJlZ3NbaV0pOwogfQogCi1zdGF0aWMgdm9pZCB0cGE2MTMwYTJfcG93ZXIoaW50IHBvd2VyKQorc3RhdGljIGludCB0cGE2MTMwYTJfcG93ZXIoaW50IHBvd2VyKQogewogCXN0cnVjdAl0cGE2MTMwYTJfZGF0YSAqZGF0YTsKIAl1OAl2YWw7CisJaW50CXJldDsKIAogCUJVR19PTih0cGE2MTMwYTJfY2xpZW50ID09IE5VTEwpOwogCWRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEodHBhNjEzMGEyX2NsaWVudCk7CkBAIC0xMTcsMTEgKzEzMSwyMCBAQAogCW11dGV4X2xvY2soJmRhdGEtPm11dGV4KTsKIAlpZiAocG93ZXIpIHsKIAkJLyogUG93ZXIgb24gKi8KLQkJaWYgKGRhdGEtPnBvd2VyX2dwaW8gPj0gMCkgeworCQlpZiAoZGF0YS0+cG93ZXJfZ3BpbyA+PSAwKQogCQkJZ3Bpb19zZXRfdmFsdWUoZGF0YS0+cG93ZXJfZ3BpbywgMSk7Ci0JCQlkYXRhLT5wb3dlcl9zdGF0ZSA9IDE7Ci0JCQl0cGE2MTMwYTJfaW5pdGlhbGl6ZSgpOworCisJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKGRhdGEtPnN1cHBsaWVzKSwKKwkJCQkJICAgIGRhdGEtPnN1cHBsaWVzKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkZXZfZXJyKCZ0cGE2MTMwYTJfY2xpZW50LT5kZXYsCisJCQkJIkZhaWxlZCB0byBlbmFibGUgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQkJZ290byBleGl0OwogCQl9CisKKwkJZGF0YS0+cG93ZXJfc3RhdGUgPSAxOworCQl0cGE2MTMwYTJfaW5pdGlhbGl6ZSgpOworCiAJCS8qIENsZWFyIFNXUyAqLwogCQl2YWwgPSB0cGE2MTMwYTJfcmVhZChUUEE2MTMwQTJfUkVHX0NPTlRST0wpOwogCQl2YWwgJj0gflRQQTYxMzBBMl9TV1M7CkBAIC0xMzEsMTMgKzE1NCwyNSBAQAogCQl2YWwgPSB0cGE2MTMwYTJfcmVhZChUUEE2MTMwQTJfUkVHX0NPTlRST0wpOwogCQl2YWwgfD0gVFBBNjEzMEEyX1NXUzsKIAkJdHBhNjEzMGEyX2kyY193cml0ZShUUEE2MTMwQTJfUkVHX0NPTlRST0wsIHZhbCk7CisKIAkJLyogUG93ZXIgb2ZmICovCi0JCWlmIChkYXRhLT5wb3dlcl9ncGlvID49IDApIHsKKwkJaWYgKGRhdGEtPnBvd2VyX2dwaW8gPj0gMCkKIAkJCWdwaW9fc2V0X3ZhbHVlKGRhdGEtPnBvd2VyX2dwaW8sIDApOwotCQkJZGF0YS0+cG93ZXJfc3RhdGUgPSAwOworCisJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShkYXRhLT5zdXBwbGllcyksCisJCQkJCSAgICAgZGF0YS0+c3VwcGxpZXMpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoJnRwYTYxMzBhMl9jbGllbnQtPmRldiwKKwkJCQkiRmFpbGVkIHRvIGRpc2FibGUgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQkJZ290byBleGl0OwogCQl9CisKKwkJZGF0YS0+cG93ZXJfc3RhdGUgPSAwOwogCX0KKworZXhpdDoKIAltdXRleF91bmxvY2soJmRhdGEtPm11dGV4KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHRwYTYxMzBhMl9nZXRfcmVnKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLApAQCAtMjM3LDEyICsyNzIsOCBAQAogICovCiBzdGF0aWMgdm9pZCB0cGE2MTMwYTJfY2hhbm5lbF9lbmFibGUodTggY2hhbm5lbCwgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3QJdHBhNjEzMGEyX2RhdGEgKmRhdGE7CiAJdTgJdmFsOwogCi0JQlVHX09OKHRwYTYxMzBhMl9jbGllbnQgPT0gTlVMTCk7Ci0JZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YSh0cGE2MTMwYTJfY2xpZW50KTsKLQogCWlmIChlbmFibGUpIHsKIAkJLyogRW5hYmxlIGNoYW5uZWwgKi8KIAkJLyogRW5hYmxlIGFtcGxpZmllciAqLwpAQCAtMjk5LDE1ICszMzAsMTcgQEAKIHN0YXRpYyBpbnQgdHBhNjEzMGEyX3N1cHBseV9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKKwlpbnQgcmV0ID0gMDsKKwogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKLQkJdHBhNjEzMGEyX3Bvd2VyKDEpOworCQlyZXQgPSB0cGE2MTMwYTJfcG93ZXIoMSk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgotCQl0cGE2MTMwYTJfcG93ZXIoMCk7CisJCXJldCA9IHRwYTYxMzBhMl9wb3dlcigwKTsKIAkJYnJlYWs7CiAJfQotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB0cGE2MTMwYTJfZGFwbV93aWRnZXRzW10gPSB7CkBAIC0zNDYsMTMgKzM3OSwxMyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBhNjEzMGEyX2FkZF9jb250cm9scyk7CiAKLXN0YXRpYyBpbnQgdHBhNjEzMGEyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0cGE2MTMwYTJfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IHRwYTYxMzBhMl9kYXRhICpkYXRhOwogCXN0cnVjdCB0cGE2MTMwYTJfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0JaW50IHJldDsKKwlpbnQgaSwgcmV0OwogCiAJZGV2ID0gJmNsaWVudC0+ZGV2OwogCkBAIC0zODcsMTUgKzQyMCwzOCBAQAogCQlpZiAocmV0IDwgMCkgewogCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBwb3dlciBHUElPICglZClcbiIsCiAJCQkJZGF0YS0+cG93ZXJfZ3Bpbyk7Ci0JCQlnb3RvIGZhaWw7CisJCQlnb3RvIGVycl9ncGlvOwogCQl9CiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChkYXRhLT5wb3dlcl9ncGlvLCAwKTsKLQl9IGVsc2UgewotCQlkYXRhLT5wb3dlcl9zdGF0ZSA9IDE7Ci0JCXRwYTYxMzBhMl9pbml0aWFsaXplKCk7CiAJfQogCi0JdHBhNjEzMGEyX3Bvd2VyKDEpOworCXN3aXRjaCAocGRhdGEtPmlkKSB7CisJY2FzZSBUUEE2MTMwQTI6CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEtPnN1cHBsaWVzKTsgaSsrKQorCQkJZGF0YS0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gdHBhNjEzMGEyX3N1cHBseV9uYW1lc1tpXTsKKwkJYnJlYWs7CisJY2FzZSBUUEE2MTQwQTI6CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEtPnN1cHBsaWVzKTsgaSsrKQorCQkJZGF0YS0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gdHBhNjE0MGEyX3N1cHBseV9uYW1lc1tpXTs7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl93YXJuKGRldiwgIlVua25vd24gVFBBIG1vZGVsICglZCkuIEFzc3VtaW5nIDYxMzBBMlxuIiwKKwkJCSBwZGF0YS0+aWQpOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhLT5zdXBwbGllcyk7IGkrKykKKwkJCWRhdGEtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHRwYTYxMzBhMl9zdXBwbHlfbmFtZXNbaV07CisJfQorCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZ2V0KGRldiwgQVJSQVlfU0laRShkYXRhLT5zdXBwbGllcyksCisJCQkJIGRhdGEtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3JlZ3VsYXRvcjsKKwl9CisKKwlyZXQgPSB0cGE2MTMwYTJfcG93ZXIoMSk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGVycl9wb3dlcjsKKwogCiAJLyogUmVhZCB2ZXJzaW9uICovCiAJcmV0ID0gdHBhNjEzMGEyX2kyY19yZWFkKFRQQTYxMzBBMl9SRUdfVkVSU0lPTikgJgpAQCAtNDA0LDEwICs0NjAsMTggQEAKIAkJZGV2X3dhcm4oZGV2LCAiVU5URVNURUQgdmVyc2lvbiBkZXRlY3RlZCAoJWQpXG4iLCByZXQpOwogCiAJLyogRGlzYWJsZSB0aGUgY2hpcCAqLwotCXRwYTYxMzBhMl9wb3dlcigwKTsKKwlyZXQgPSB0cGE2MTMwYTJfcG93ZXIoMCk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGVycl9wb3dlcjsKIAogCXJldHVybiAwOwotZmFpbDoKKworZXJyX3Bvd2VyOgorCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRShkYXRhLT5zdXBwbGllcyksIGRhdGEtPnN1cHBsaWVzKTsKK2Vycl9yZWd1bGF0b3I6CisJaWYgKGRhdGEtPnBvd2VyX2dwaW8gPj0gMCkKKwkJZ3Bpb19mcmVlKGRhdGEtPnBvd2VyX2dwaW8pOworZXJyX2dwaW86CiAJa2ZyZWUoZGF0YSk7CiAJaTJjX3NldF9jbGllbnRkYXRhKHRwYTYxMzBhMl9jbGllbnQsIE5VTEwpOwogCXRwYTYxMzBhMl9jbGllbnQgPSBOVUxMOwpAQCAtNDE1LDcgKzQ3OSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB0cGE2MTMwYTJfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0cGE2MTMwYTJfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IHRwYTYxMzBhMl9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKQEAgLTQyMyw2ICs0ODcsOSBAQAogCiAJaWYgKGRhdGEtPnBvd2VyX2dwaW8gPj0gMCkKIAkJZ3Bpb19mcmVlKGRhdGEtPnBvd2VyX2dwaW8pOworCisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKGRhdGEtPnN1cHBsaWVzKSwgZGF0YS0+c3VwcGxpZXMpOworCiAJa2ZyZWUoZGF0YSk7CiAJdHBhNjEzMGEyX2NsaWVudCA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKaW5kZXggMmEyN2Y3Yi4uNmY1ZDRhZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAkweDBjLCAvKiBSRUdfQVRYUjFQR0EJCSgweEIpCSovCiAJMHgwMCwgLyogUkVHX0FWVFhMMlBHQQkJKDB4QykJKi8KIAkweDAwLCAvKiBSRUdfQVZUWFIyUEdBCQkoMHhEKQkqLwotCTB4MDEsIC8qIFJFR19BVURJT19JRgkJKDB4RSkJKi8KKwkweDAwLCAvKiBSRUdfQVVESU9fSUYJCSgweEUpCSovCiAJMHgwMCwgLyogUkVHX1ZPSUNFX0lGCQkoMHhGKQkqLwogCTB4MDAsIC8qIFJFR19BUlhSMVBHQQkJKDB4MTApCSovCiAJMHgwMCwgLyogUkVHX0FSWEwxUEdBCQkoMHgxMSkJKi8KQEAgLTY0LDE5ICs2NCwxOSBAQAogCTB4MDAsIC8qIFJFR19WUlhQR0EJCSgweDE0KQkqLwogCTB4MDAsIC8qIFJFR19WU1RQR0EJCSgweDE1KQkqLwogCTB4MDAsIC8qIFJFR19WUlgyQVJYUEdBCQkoMHgxNikJKi8KLQkweDBjLCAvKiBSRUdfQVZEQUNfQ1RMCQkoMHgxNykJKi8KKwkweDAwLCAvKiBSRUdfQVZEQUNfQ1RMCQkoMHgxNykJKi8KIAkweDAwLCAvKiBSRUdfQVJYMlZUWFBHQQkJKDB4MTgpCSovCiAJMHgwMCwgLyogUkVHX0FSWEwxX0FQR0FfQ1RMCSgweDE5KQkqLwogCTB4MDAsIC8qIFJFR19BUlhSMV9BUEdBX0NUTAkoMHgxQSkJKi8KLQkweDRiLCAvKiBSRUdfQVJYTDJfQVBHQV9DVEwJKDB4MUIpCSovCi0JMHg0YiwgLyogUkVHX0FSWFIyX0FQR0FfQ1RMCSgweDFDKQkqLworCTB4NGEsIC8qIFJFR19BUlhMMl9BUEdBX0NUTAkoMHgxQikJKi8KKwkweDRhLCAvKiBSRUdfQVJYUjJfQVBHQV9DVEwJKDB4MUMpCSovCiAJMHgwMCwgLyogUkVHX0FUWDJBUlhQR0EJCSgweDFEKQkqLwogCTB4MDAsIC8qIFJFR19CVF9JRgkJKDB4MUUpCSovCiAJMHgwMCwgLyogUkVHX0JUUEdBCQkoMHgxRikJKi8KIAkweDAwLCAvKiBSRUdfQlRTVFBHQQkJKDB4MjApCSovCiAJMHgwMCwgLyogUkVHX0VBUl9DVEwJCSgweDIxKQkqLwotCTB4MjQsIC8qIFJFR19IU19TRUwJCSgweDIyKQkqLwotCTB4MGEsIC8qIFJFR19IU19HQUlOX1NFVAkoMHgyMykJKi8KKwkweDAwLCAvKiBSRUdfSFNfU0VMCQkoMHgyMikJKi8KKwkweDAwLCAvKiBSRUdfSFNfR0FJTl9TRVQJKDB4MjMpCSovCiAJMHgwMCwgLyogUkVHX0hTX1BPUE5fU0VUCSgweDI0KQkqLwogCTB4MDAsIC8qIFJFR19QUkVETF9DVEwJCSgweDI1KQkqLwogCTB4MDAsIC8qIFJFR19QUkVEUl9DVEwJCSgweDI2KQkqLwpAQCAtOTksNyArOTksNyBAQAogCTB4MDAsIC8qIFJFR19JMlNfUlhfU0NSQU1CTEVfSAkoMHgzNykJKi8KIAkweDAwLCAvKiBSRUdfSTJTX1JYX1NDUkFNQkxFX00JKDB4MzgpCSovCiAJMHgwMCwgLyogUkVHX0kyU19SWF9TQ1JBTUJMRV9MCSgweDM5KQkqLwotCTB4MTYsIC8qIFJFR19BUExMX0NUTAkJKDB4M0EpCSovCisJMHgwNiwgLyogUkVHX0FQTExfQ1RMCQkoMHgzQSkJKi8KIAkweDAwLCAvKiBSRUdfRFRNRl9DVEwJCSgweDNCKQkqLwogCTB4MDAsIC8qIFJFR19EVE1GX1BHQV9DVEwyCSgweDNDKQkqLwogCTB4MDAsIC8qIFJFR19EVE1GX1BHQV9DVEwxCSgweDNEKQkqLwpAQCAtMTIwMyw2ICsxMjAzLDggQEAKIAlTTkRfU09DX0RBUE1fU1VQUExZKCJBUExMIEVuYWJsZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgYXBsbF9ldmVudCwKIAkJCSAgICBTTkRfU09DX0RBUE1fUFJFX1BNVXxTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAogCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiQUlGIEVuYWJsZSIsIFRXTDQwMzBfUkVHX0FVRElPX0lGLCAwLCAwLCBOVUxMLCAwKSwKKwogCS8qIE91dHB1dCBNSVhFUiBjb250cm9scyAqLwogCS8qIEVhcnBpZWNlICovCiAJU05EX1NPQ19EQVBNX01JWEVSKCJFYXJwaWVjZSBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKQEAgLTEzMzcsNiArMTMzOSwxMSBAQAogCXsiRGlnaXRhbCBMMiBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJBUExMIEVuYWJsZSJ9LAogCXsiRGlnaXRhbCBWb2ljZSBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJBUExMIEVuYWJsZSJ9LAogCisJeyJEaWdpdGFsIFIxIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkFJRiBFbmFibGUifSwKKwl7IkRpZ2l0YWwgTDEgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiQUlGIEVuYWJsZSJ9LAorCXsiRGlnaXRhbCBSMiBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJBSUYgRW5hYmxlIn0sCisJeyJEaWdpdGFsIEwyIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkFJRiBFbmFibGUifSwKKwogCXsiQW5hbG9nIEwxIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkRpZ2l0YWwgTDEgUGxheWJhY2sgTWl4ZXIifSwKIAl7IkFuYWxvZyBSMSBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJEaWdpdGFsIFIxIFBsYXliYWNrIE1peGVyIn0sCiAJeyJBbmFsb2cgTDIgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiRGlnaXRhbCBMMiBQbGF5YmFjayBNaXhlciJ9LApAQCAtMTQ1NSw2ICsxNDYyLDExIEBACiAJeyJBREMgVmlydHVhbCBMZWZ0MiIsIE5VTEwsICJBUExMIEVuYWJsZSJ9LAogCXsiQURDIFZpcnR1YWwgUmlnaHQyIiwgTlVMTCwgIkFQTEwgRW5hYmxlIn0sCiAKKwl7IkFEQyBWaXJ0dWFsIExlZnQxIiwgTlVMTCwgIkFJRiBFbmFibGUifSwKKwl7IkFEQyBWaXJ0dWFsIFJpZ2h0MSIsIE5VTEwsICJBSUYgRW5hYmxlIn0sCisJeyJBREMgVmlydHVhbCBMZWZ0MiIsIE5VTEwsICJBSUYgRW5hYmxlIn0sCisJeyJBREMgVmlydHVhbCBSaWdodDIiLCBOVUxMLCAiQUlGIEVuYWJsZSJ9LAorCiAJLyogQW5hbG9nIGJ5cGFzcyByb3V0ZXMgKi8KIAl7IlJpZ2h0MSBBbmFsb2cgTG9vcGJhY2siLCAiU3dpdGNoIiwgIkFuYWxvZyBSaWdodCJ9LAogCXsiTGVmdDEgQW5hbG9nIExvb3BiYWNrIiwgIlN3aXRjaCIsICJBbmFsb2cgTGVmdCJ9LApAQCAtMjE1Miw4ICsyMTY0LDYgQEAKIAl0d2w0MDMwX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOwogCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7Ci0Ja2ZyZWUoY29kZWMtPnByaXZhdGVfZGF0YSk7Ci0Ja2ZyZWUoY29kZWMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTkyLDcgKzIyMDIsNyBAQAogCWNvZGVjLT53cml0ZSA9IHR3bDQwMzBfd3JpdGU7CiAJY29kZWMtPnNldF9iaWFzX2xldmVsID0gdHdsNDAzMF9zZXRfYmlhc19sZXZlbDsKIAljb2RlYy0+ZGFpID0gdHdsNDAzMF9kYWk7Ci0JY29kZWMtPm51bV9kYWkgPSBBUlJBWV9TSVpFKHR3bDQwMzBfZGFpKSwKKwljb2RlYy0+bnVtX2RhaSA9IEFSUkFZX1NJWkUodHdsNDAzMF9kYWkpOwogCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IHNpemVvZih0d2w0MDMwX3JlZyk7CiAJY29kZWMtPnJlZ19jYWNoZSA9IGttZW1kdXAodHdsNDAzMF9yZWcsIHNpemVvZih0d2w0MDMwX3JlZyksCiAJCQkJCUdGUF9LRVJORUwpOwpAQCAtMjIzNyw2ICsyMjQ3LDkgQEAKIHsKIAlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcygmdHdsNDAzMF9kYWlbMF0sIEFSUkFZX1NJWkUodHdsNDAzMF9kYWkpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJnR3bDQwMzAtPmNvZGVjKTsKKwlrZnJlZSh0d2w0MDMwLT5jb2RlYy5yZWdfY2FjaGUpOwogCWtmcmVlKHR3bDQwMzApOwogCiAJdHdsNDAzMF9jb2RlYyA9IE5VTEw7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuaCBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5oCmluZGV4IGRkNjM5NmUuLmYyMDZkMjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5oCkBAIC0yNSw3ICsyNSw3IEBACiAvKiBSZWdpc3RlciBkZXNjcmlwdGlvbnMgYXJlIGhlcmUgKi8KICNpbmNsdWRlIDxsaW51eC9tZmQvdHdsNDAzMC1jb2RlYy5oPgogCi0vKiBTZ2Fkb3cgcmVnaXN0ZXIgdXNlZCBieSB0aGUgYXVkaW8gZHJpdmVyICovCisvKiBTaGFkb3cgcmVnaXN0ZXIgdXNlZCBieSB0aGUgYXVkaW8gZHJpdmVyICovCiAjZGVmaW5lIFRXTDQwMzBfUkVHX1NXX1NIQURPVwkJMHg0QQogI2RlZmluZSBUV0w0MDMwX0NBQ0hFUkVHTlVNCShUV0w0MDMwX1JFR19TV19TSEFET1cgKyAxKQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtMjAwMC5jIGIvc291bmQvc29jL2NvZGVjcy93bTIwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTdiMDI2Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTIwMDAuYwpAQCAtMCwwICsxLDg4OCBAQAorLyoKKyAqIHdtMjAwMC5jICAtLSAgV00yMDAwIEFMU0EgU29jIEF1ZGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhlIGRvd25sb2FkIGltYWdlIGZvciB0aGUgV00yMDAwIHdpbGwgYmUgcmVxdWVzdGVkIGFzCisgKiAnd20yMDAwX2FuYy5iaW4nIGJ5IGRlZmF1bHQgKG92ZXJyaWRhYmxlIHZpYSBwbGF0Zm9ybSBkYXRhKSBhdAorICogcnVudGltZSBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gZmxhdCBiaW5hcnkgZm9ybWF0LiAgVGhpcyBpcworICogZ2VuZXJhdGVkIGJ5IFdvbGZzb24gY29uZmlndXJhdGlvbiB0b29scyBhbmQgaW5jbHVkZXMKKyAqIHN5c3RlbS1zcGVjaWZpYyBjYWxsaWJyYXRpb24gaW5mb3JtYXRpb24uICBJZiBzdXBwbGllZCBhcyBhCisgKiBzZXF1ZW5jZSBvZiBBU0NJSS1lbmNvZGVkIGhleGlkZWNpbWFsIGJ5dGVzIHRoaXMgY2FuIGJlIGNvbnZlcnRlZAorICogaW50byBhIGZsYXQgYmluYXJ5IHdpdGggYSBjb21tYW5kIHN1Y2ggYXMgdGhpcyBvbiB0aGUgY29tbWFuZCBsaW5lOgorICoKKyAqIHBlcmwgLWUgJ3doaWxlICg8PikgeyBzL1tcclxuXSsvLyA7IHByaW50ZigiJWMiLCBoZXgoJF8pKTsgfScKKyAqICAgICAgICAgICAgICAgICA8IGZpbGUgID4gd20yMDAwX2FuYy5iaW4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorCisjaW5jbHVkZSA8c291bmQvd20yMDAwLmg+CisKKyNpbmNsdWRlICJ3bTIwMDAuaCIKKworZW51bSB3bTIwMDBfYW5jX21vZGUgeworCUFOQ19BQ1RJVkUgPSAwLAorCUFOQ19CWVBBU1MgPSAxLAorCUFOQ19TVEFOREJZID0gMiwKKwlBTkNfT0ZGID0gMywKK307CisKK3N0cnVjdCB3bTIwMDBfcHJpdiB7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYzsKKworCWVudW0gd20yMDAwX2FuY19tb2RlIGFuY19tb2RlOworCisJdW5zaWduZWQgaW50IGFuY19hY3RpdmU6MTsKKwl1bnNpZ25lZCBpbnQgYW5jX2VuZ19lbmE6MTsKKwl1bnNpZ25lZCBpbnQgc3BrX2VuYToxOworCisJdW5zaWduZWQgaW50IG1jbGtfZGl2OjE7CisJdW5zaWduZWQgaW50IHNwZWVjaF9jbGFyaXR5OjE7CisKKwlpbnQgYW5jX2Rvd25sb2FkX3NpemU7CisJY2hhciAqYW5jX2Rvd25sb2FkOworfTsKKworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50ICp3bTIwMDBfaTJjOworCitzdGF0aWMgaW50IHdtMjAwMF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCB1bnNpZ25lZCBpbnQgcmVnLAorCQkJdW5zaWduZWQgaW50IHZhbHVlKQoreworCXU4IGRhdGFbM107CisJaW50IHJldDsKKworCWRhdGFbMF0gPSAocmVnID4+IDgpICYgMHhmZjsKKwlkYXRhWzFdID0gcmVnICYgMHhmZjsKKwlkYXRhWzJdID0gdmFsdWUgJiAweGZmOworCisJZGV2X3ZkYmcoJmkyYy0+ZGV2LCAid3JpdGUgJXggPSAleFxuIiwgcmVnLCB2YWx1ZSk7CisKKwlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoaTJjLCBkYXRhLCAzKTsKKwlpZiAocmV0ID09IDMpCisJCXJldHVybiAwOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UKKwkJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgd20yMDAwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmkyYywgdW5zaWduZWQgaW50IHIpCit7CisJc3RydWN0IGkyY19tc2cgeGZlclsyXTsKKwl1OCByZWdbMl07CisJdTggZGF0YTsKKwlpbnQgcmV0OworCisJLyogV3JpdGUgcmVnaXN0ZXIgKi8KKwlyZWdbMF0gPSAociA+PiA4KSAmIDB4ZmY7CisJcmVnWzFdID0gciAmIDB4ZmY7CisJeGZlclswXS5hZGRyID0gaTJjLT5hZGRyOworCXhmZXJbMF0uZmxhZ3MgPSAwOworCXhmZXJbMF0ubGVuID0gc2l6ZW9mKHJlZyk7CisJeGZlclswXS5idWYgPSAmcmVnWzBdOworCisJLyogUmVhZCBkYXRhICovCisJeGZlclsxXS5hZGRyID0gaTJjLT5hZGRyOworCXhmZXJbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKKwl4ZmVyWzFdLmxlbiA9IDE7CisJeGZlclsxXS5idWYgPSAmZGF0YTsKKworCXJldCA9IGkyY190cmFuc2ZlcihpMmMtPmFkYXB0ZXIsIHhmZXIsIDIpOworCWlmIChyZXQgIT0gMikgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgImkyY190cmFuc2ZlcigpIHJldHVybmVkICVkXG4iLCByZXQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlkZXZfdmRiZygmaTJjLT5kZXYsICJyZWFkICV4IGZyb20gJXhcbiIsIGRhdGEsIHIpOworCisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIHdtMjAwMF9yZXNldChzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gd20yMDAwLT5pMmM7CisKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLCBXTTIwMDBfQU5DX0VOR19DTFIpOworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsIFdNMjAwMF9SQU1fQ0xSKTsKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX0lEMSwgMCk7CisKKwl3bTIwMDAtPmFuY19tb2RlID0gQU5DX09GRjsKK30KKworc3RhdGljIGludCB3bTIwMDBfcG9sbF9iaXQoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCSAgIHVuc2lnbmVkIGludCByZWcsIHU4IG1hc2ssIGludCB0aW1lb3V0KQoreworCWludCB2YWw7CisKKwl2YWwgPSB3bTIwMDBfcmVhZChpMmMsIHJlZyk7CisKKwl3aGlsZSAoISh2YWwgJiBtYXNrKSAmJiAtLXRpbWVvdXQpIHsKKwkJbXNsZWVwKDEpOworCQl2YWwgPSB3bTIwMDBfcmVhZChpMmMsIHJlZyk7CisJfQorCisJaWYgKHRpbWVvdXQgPT0gMCkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB3bTIwMDBfcG93ZXJfdXAoc3RydWN0IGkyY19jbGllbnQgKmkyYywgaW50IGFuYWxvZ3VlKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZpMmMtPmRldik7CisJaW50IHJldCwgdGltZW91dDsKKworCUJVR19PTih3bTIwMDAtPmFuY19tb2RlICE9IEFOQ19PRkYpOworCisJZGV2X2RiZygmaTJjLT5kZXYsICJCZWdpbm5pbmcgcG93ZXIgdXBcbiIpOworCisJaWYgKCF3bTIwMDAtPm1jbGtfZGl2KSB7CisJCWRldl9kYmcoJmkyYy0+ZGV2LCAiRGlzYWJsaW5nIE1DTEsgZGl2aWRlclxuIik7CisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsCisJCQkgICAgIFdNMjAwMF9NQ0xLX0RJVjJfRU5BX0NMUik7CisJfSBlbHNlIHsKKwkJZGV2X2RiZygmaTJjLT5kZXYsICJFbmFibGluZyBNQ0xLIGRpdmlkZXJcbiIpOworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLAorCQkJICAgICBXTTIwMDBfTUNMS19ESVYyX0VOQV9TRVQpOworCX0KKworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsIFdNMjAwMF9BTkNfRU5HX0NMUik7CisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMiwgV00yMDAwX0FOQ19FTkdfU0VUKTsKKworCS8qIFdhaXQgZm9yIEFOQyBlbmdpbmUgdG8gYmVjb21lIHJlYWR5ICovCisJaWYgKCF3bTIwMDBfcG9sbF9iaXQoaTJjLCBXTTIwMDBfUkVHX0FOQ19TVEFULAorCQkJICAgICBXTTIwMDBfQU5DX0VOR19JRExFLCAxKSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIkFOQyBlbmdpbmUgZmFpbGVkIHRvIHJlc2V0XG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJaWYgKCF3bTIwMDBfcG9sbF9iaXQoaTJjLCBXTTIwMDBfUkVHX1NZU19TVEFUVVMsCisJCQkgICAgIFdNMjAwMF9TVEFUVVNfQk9PVF9DT01QTEVURSwgMSkpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJBTkMgZW5naW5lIGZhaWxlZCB0byBpbml0aWFsaXNlXG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMiwgV00yMDAwX1JBTV9TRVQpOworCisJLyogT3BlbiBjb2RlIGRvd25sb2FkIG9mIHRoZSBkYXRhIHNpbmNlIGl0IGlzIHRoZSBvbmx5IGJ1bGsKKwkgKiB3cml0ZSB3ZSBkby4gKi8KKwlkZXZfZGJnKCZpMmMtPmRldiwgIkRvd25sb2FkaW5nICVkIGJ5dGVzXG4iLAorCQl3bTIwMDAtPmFuY19kb3dubG9hZF9zaXplIC0gMik7CisKKwlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoaTJjLCB3bTIwMDAtPmFuY19kb3dubG9hZCwKKwkJCSAgICAgIHdtMjAwMC0+YW5jX2Rvd25sb2FkX3NpemUpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiaTJjX3RyYW5zZmVyKCkgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKHJldCAhPSB3bTIwMDAtPmFuY19kb3dubG9hZF9zaXplKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiaTJjX3RyYW5zZmVyKCkgZmFpbGVkLCAlZCAhPSAlZFxuIiwKKwkJCXJldCwgd20yMDAwLT5hbmNfZG93bmxvYWRfc2l6ZSk7CisJCXJldHVybiAtRUlPOworCX0KKworCWRldl9kYmcoJmkyYy0+ZGV2LCAiRG93bmxvYWQgY29tcGxldGVcbiIpOworCisJaWYgKGFuYWxvZ3VlKSB7CisJCXRpbWVvdXQgPSAyNDg7CisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfQU5BX1ZNSURfUFVfVElNRSwgdGltZW91dCAvIDQpOworCisJCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX01PREVfQ05UUkwsCisJCQkgICAgIFdNMjAwMF9NT0RFX0FOQV9TRVFfSU5DTFVERSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX01PVVNFX0VOQUJMRSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX1RIRVJNQUxfRU5BQkxFKTsKKwl9IGVsc2UgeworCQl0aW1lb3V0ID0gMTA7CisKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfTU9ERV9DTlRSTCwKKwkJCSAgICAgV00yMDAwX01PREVfTU9VU0VfRU5BQkxFIHwKKwkJCSAgICAgV00yMDAwX01PREVfVEhFUk1BTF9FTkFCTEUpOworCX0KKworCXJldCA9IHdtMjAwMF9yZWFkKGkyYywgV00yMDAwX1JFR19TUEVFQ0hfQ0xBUklUWSk7CisJaWYgKHdtMjAwMC0+c3BlZWNoX2NsYXJpdHkpCisJCXJldCAmPSB+V00yMDAwX1NQRUVDSF9DTEFSSVRZOworCWVsc2UKKwkJcmV0IHw9IFdNMjAwMF9TUEVFQ0hfQ0xBUklUWTsKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NQRUVDSF9DTEFSSVRZLCByZXQpOworCisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfU1RBUlQwLCAweDMzKTsKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19TVEFSVDEsIDB4MDIpOworCisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMiwgV00yMDAwX0FOQ19JTlRfTl9DTFIpOworCisJaWYgKCF3bTIwMDBfcG9sbF9iaXQoaTJjLCBXTTIwMDBfUkVHX1NZU19TVEFUVVMsCisJCQkgICAgIFdNMjAwMF9TVEFUVVNfTU9VU0VfQUNUSVZFLCB0aW1lb3V0KSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBkZXZpY2UgYWZ0ZXIgJWRtc1xuIiwKKwkJCXRpbWVvdXQgKiAxMCk7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCWRldl9kYmcoJmkyYy0+ZGV2LCAiQU5DIGFjdGl2ZVxuIik7CisJaWYgKGFuYWxvZ3VlKQorCQlkZXZfZGJnKCZpMmMtPmRldiwgIkFuYWxvZ3VlIGFjdGl2ZVxuIik7CisJd20yMDAwLT5hbmNfbW9kZSA9IEFOQ19BQ1RJVkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTIwMDBfcG93ZXJfZG93bihzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgYW5hbG9ndWUpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJmkyYy0+ZGV2KTsKKwlpbnQgdGltZW91dDsKKworCWlmIChhbmFsb2d1ZSkgeworCQl0aW1lb3V0ID0gMjQ4OworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX0FOQV9WTUlEX1BEX1RJTUUsIHRpbWVvdXQgLyA0KTsKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfTU9ERV9DTlRSTCwKKwkJCSAgICAgV00yMDAwX01PREVfQU5BX1NFUV9JTkNMVURFIHwKKwkJCSAgICAgV00yMDAwX01PREVfUE9XRVJfRE9XTik7CisJfSBlbHNlIHsKKwkJdGltZW91dCA9IDEwOworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19NT0RFX0NOVFJMLAorCQkJICAgICBXTTIwMDBfTU9ERV9QT1dFUl9ET1dOKTsKKwl9CisKKwlpZiAoIXdtMjAwMF9wb2xsX2JpdChpMmMsIFdNMjAwMF9SRUdfU1lTX1NUQVRVUywKKwkJCSAgICAgV00yMDAwX1NUQVRVU19QT1dFUl9ET1dOX0NPTVBMRVRFLCB0aW1lb3V0KSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIlRpbWVvdXQgd2FpdGluZyBmb3IgQU5DIHBvd2VyIGRvd25cbiIpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlpZiAoIXdtMjAwMF9wb2xsX2JpdChpMmMsIFdNMjAwMF9SRUdfQU5DX1NUQVQsCisJCQkgICAgIFdNMjAwMF9BTkNfRU5HX0lETEUsIDEpKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiVGltZW91dCB3YWl0aW5nIGZvciBBTkMgZW5naW5lIGlkbGVcbiIpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlkZXZfZGJnKCZpMmMtPmRldiwgInBvd2VyZWQgb2ZmXG4iKTsKKwl3bTIwMDAtPmFuY19tb2RlID0gQU5DX09GRjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtMjAwMF9lbnRlcl9ieXBhc3Moc3RydWN0IGkyY19jbGllbnQgKmkyYywgaW50IGFuYWxvZ3VlKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZpMmMtPmRldik7CisKKwlCVUdfT04od20yMDAwLT5hbmNfbW9kZSAhPSBBTkNfQUNUSVZFKTsKKworCWlmIChhbmFsb2d1ZSkgeworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19NT0RFX0NOVFJMLAorCQkJICAgICBXTTIwMDBfTU9ERV9BTkFfU0VRX0lOQ0xVREUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9USEVSTUFMX0VOQUJMRSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX0JZUEFTU19FTlRSWSk7CisJfSBlbHNlIHsKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfTU9ERV9DTlRSTCwKKwkJCSAgICAgV00yMDAwX01PREVfVEhFUk1BTF9FTkFCTEUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9CWVBBU1NfRU5UUlkpOworCX0KKworCWlmICghd20yMDAwX3BvbGxfYml0KGkyYywgV00yMDAwX1JFR19TWVNfU1RBVFVTLAorCQkJICAgICBXTTIwMDBfU1RBVFVTX0FOQ19ESVNBQkxFRCwgMTApKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LCAiVGltZW91dCB3YWl0aW5nIGZvciBBTkMgZGlzYWJsZVxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCWlmICghd20yMDAwX3BvbGxfYml0KGkyYywgV00yMDAwX1JFR19BTkNfU1RBVCwKKwkJCSAgICAgV00yMDAwX0FOQ19FTkdfSURMRSwgMSkpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJUaW1lb3V0IHdhaXRpbmcgZm9yIEFOQyBlbmdpbmUgaWRsZVxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDEsIFdNMjAwMF9TWVNfU1RCWSk7CisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMiwgV00yMDAwX1JBTV9DTFIpOworCisJd20yMDAwLT5hbmNfbW9kZSA9IEFOQ19CWVBBU1M7CisJZGV2X2RiZygmaTJjLT5kZXYsICJieXBhc3MgZW5hYmxlZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTIwMDBfZXhpdF9ieXBhc3Moc3RydWN0IGkyY19jbGllbnQgKmkyYywgaW50IGFuYWxvZ3VlKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZpMmMtPmRldik7CisKKwlCVUdfT04od20yMDAwLT5hbmNfbW9kZSAhPSBBTkNfQllQQVNTKTsKKwkKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwxLCAwKTsKKworCWlmIChhbmFsb2d1ZSkgeworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19NT0RFX0NOVFJMLAorCQkJICAgICBXTTIwMDBfTU9ERV9BTkFfU0VRX0lOQ0xVREUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9NT1VTRV9FTkFCTEUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9USEVSTUFMX0VOQUJMRSk7CisJfSBlbHNlIHsKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfTU9ERV9DTlRSTCwKKwkJCSAgICAgV00yMDAwX01PREVfTU9VU0VfRU5BQkxFIHwKKwkJCSAgICAgV00yMDAwX01PREVfVEhFUk1BTF9FTkFCTEUpOworCX0KKworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsIFdNMjAwMF9SQU1fU0VUKTsKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwyLCBXTTIwMDBfQU5DX0lOVF9OX0NMUik7CisKKwlpZiAoIXdtMjAwMF9wb2xsX2JpdChpMmMsIFdNMjAwMF9SRUdfU1lTX1NUQVRVUywKKwkJCSAgICAgV00yMDAwX1NUQVRVU19NT1VTRV9BQ1RJVkUsIDEwKSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBNT1VTRVxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCXdtMjAwMC0+YW5jX21vZGUgPSBBTkNfQUNUSVZFOworCWRldl9kYmcoJmkyYy0+ZGV2LCAiTU9VU0UgYWN0aXZlXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtMjAwMF9lbnRlcl9zdGFuZGJ5KHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCBhbmFsb2d1ZSkKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmaTJjLT5kZXYpOworCWludCB0aW1lb3V0OworCisJQlVHX09OKHdtMjAwMC0+YW5jX21vZGUgIT0gQU5DX0FDVElWRSk7CisKKwlpZiAoYW5hbG9ndWUpIHsKKwkJdGltZW91dCA9IDI0ODsKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19BTkFfVk1JRF9QRF9USU1FLCB0aW1lb3V0IC8gNCk7CisKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfTU9ERV9DTlRSTCwKKwkJCSAgICAgV00yMDAwX01PREVfQU5BX1NFUV9JTkNMVURFIHwKKwkJCSAgICAgV00yMDAwX01PREVfVEhFUk1BTF9FTkFCTEUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9TVEFOREJZX0VOVFJZKTsKKwl9IGVsc2UgeworCQl0aW1lb3V0ID0gMTA7CisKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfTU9ERV9DTlRSTCwKKwkJCSAgICAgV00yMDAwX01PREVfVEhFUk1BTF9FTkFCTEUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9TVEFOREJZX0VOVFJZKTsKKwl9CisKKwlpZiAoIXdtMjAwMF9wb2xsX2JpdChpMmMsIFdNMjAwMF9SRUdfU1lTX1NUQVRVUywKKwkJCSAgICAgV00yMDAwX1NUQVRVU19BTkNfRElTQUJMRUQsIHRpbWVvdXQpKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LAorCQkJIlRpbWVkIG91dCB3YWl0aW5nIGZvciBBTkMgZGlzYWJsZSBhZnRlciAxbXNcbiIpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlpZiAoIXdtMjAwMF9wb2xsX2JpdChpMmMsIFdNMjAwMF9SRUdfQU5DX1NUQVQsIFdNMjAwMF9BTkNfRU5HX0lETEUsCisJCQkgICAgIDEpKSB7CisJCWRldl9lcnIoJmkyYy0+ZGV2LAorCQkJIlRpbWVkIG91dCB3YWl0aW5nIGZvciBzdGFuZGJ5IGFmdGVyICVkbXNcbiIsCisJCQl0aW1lb3V0ICogMTApOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19DVEwxLCBXTTIwMDBfU1lTX1NUQlkpOworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsIFdNMjAwMF9SQU1fQ0xSKTsKKworCXdtMjAwMC0+YW5jX21vZGUgPSBBTkNfU1RBTkRCWTsKKwlkZXZfZGJnKCZpMmMtPmRldiwgInN0YW5kYnlcbiIpOworCWlmIChhbmFsb2d1ZSkKKwkJZGV2X2RiZygmaTJjLT5kZXYsICJBbmFsb2d1ZSBkaXNhYmxlZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTIwMDBfZXhpdF9zdGFuZGJ5KHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCBhbmFsb2d1ZSkKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmaTJjLT5kZXYpOworCWludCB0aW1lb3V0OworCisJQlVHX09OKHdtMjAwMC0+YW5jX21vZGUgIT0gQU5DX1NUQU5EQlkpOworCisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMSwgMCk7CisKKwlpZiAoYW5hbG9ndWUpIHsKKwkJdGltZW91dCA9IDI0ODsKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19BTkFfVk1JRF9QVV9USU1FLCB0aW1lb3V0IC8gNCk7CisKKwkJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfTU9ERV9DTlRSTCwKKwkJCSAgICAgV00yMDAwX01PREVfQU5BX1NFUV9JTkNMVURFIHwKKwkJCSAgICAgV00yMDAwX01PREVfVEhFUk1BTF9FTkFCTEUgfAorCQkJICAgICBXTTIwMDBfTU9ERV9NT1VTRV9FTkFCTEUpOworCX0gZWxzZSB7CisJCXRpbWVvdXQgPSAxMDsKKworCQl3bTIwMDBfd3JpdGUoaTJjLCBXTTIwMDBfUkVHX1NZU19NT0RFX0NOVFJMLAorCQkJICAgICBXTTIwMDBfTU9ERV9USEVSTUFMX0VOQUJMRSB8CisJCQkgICAgIFdNMjAwMF9NT0RFX01PVVNFX0VOQUJMRSk7CisJfQorCisJd20yMDAwX3dyaXRlKGkyYywgV00yMDAwX1JFR19TWVNfQ1RMMiwgV00yMDAwX1JBTV9TRVQpOworCXdtMjAwMF93cml0ZShpMmMsIFdNMjAwMF9SRUdfU1lTX0NUTDIsIFdNMjAwMF9BTkNfSU5UX05fQ0xSKTsKKworCWlmICghd20yMDAwX3BvbGxfYml0KGkyYywgV00yMDAwX1JFR19TWVNfU1RBVFVTLAorCQkJICAgICBXTTIwMDBfU1RBVFVTX01PVVNFX0FDVElWRSwgdGltZW91dCkpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgTU9VU0UgYWZ0ZXIgJWRtc1xuIiwKKwkJCXRpbWVvdXQgKiAxMCk7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCXdtMjAwMC0+YW5jX21vZGUgPSBBTkNfQUNUSVZFOworCWRldl9kYmcoJmkyYy0+ZGV2LCAiTU9VU0UgYWN0aXZlXG4iKTsKKwlpZiAoYW5hbG9ndWUpCisJCWRldl9kYmcoJmkyYy0+ZGV2LCAiQW5hbG9ndWUgZW5hYmxlZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKwordHlwZWRlZiBpbnQgKCp3bTIwMDBfbW9kZV9mbikoc3RydWN0IGkyY19jbGllbnQgKmkyYywgaW50IGFuYWxvZ3VlKTsKKworc3RhdGljIHN0cnVjdCB7CisJZW51bSB3bTIwMDBfYW5jX21vZGUgc291cmNlOworCWVudW0gd20yMDAwX2FuY19tb2RlIGRlc3Q7CisJaW50IGFuYWxvZ3VlOworCXdtMjAwMF9tb2RlX2ZuIHN0ZXBbMl07Cit9IGFuY190cmFuc2l0aW9uc1tdID0geworCXsKKwkJLnNvdXJjZSA9IEFOQ19PRkYsCisJCS5kZXN0ID0gQU5DX0FDVElWRSwKKwkJLmFuYWxvZ3VlID0gMSwKKwkJLnN0ZXAgPSB7CisJCQl3bTIwMDBfcG93ZXJfdXAsCisJCX0sCisJfSwKKwl7CisJCS5zb3VyY2UgPSBBTkNfT0ZGLAorCQkuZGVzdCA9IEFOQ19TVEFOREJZLAorCQkuc3RlcCA9IHsKKwkJCXdtMjAwMF9wb3dlcl91cCwKKwkJCXdtMjAwMF9lbnRlcl9zdGFuZGJ5LAorCQl9LAorCX0sCisJeworCQkuc291cmNlID0gQU5DX09GRiwKKwkJLmRlc3QgPSBBTkNfQllQQVNTLAorCQkuYW5hbG9ndWUgPSAxLAorCQkuc3RlcCA9IHsKKwkJCXdtMjAwMF9wb3dlcl91cCwKKwkJCXdtMjAwMF9lbnRlcl9ieXBhc3MsCisJCX0sCisJfSwKKwl7CisJCS5zb3VyY2UgPSBBTkNfQUNUSVZFLAorCQkuZGVzdCA9IEFOQ19CWVBBU1MsCisJCS5hbmFsb2d1ZSA9IDEsCisJCS5zdGVwID0geworCQkJd20yMDAwX2VudGVyX2J5cGFzcywKKwkJfSwKKwl9LAorCXsKKwkJLnNvdXJjZSA9IEFOQ19BQ1RJVkUsCisJCS5kZXN0ID0gQU5DX1NUQU5EQlksCisJCS5hbmFsb2d1ZSA9IDEsCisJCS5zdGVwID0geworCQkJd20yMDAwX2VudGVyX3N0YW5kYnksCisJCX0sCisJfSwKKwl7CisJCS5zb3VyY2UgPSBBTkNfQUNUSVZFLAorCQkuZGVzdCA9IEFOQ19PRkYsCisJCS5hbmFsb2d1ZSA9IDEsCisJCS5zdGVwID0geworCQkJd20yMDAwX3Bvd2VyX2Rvd24sCisJCX0sCisJfSwKKwl7CisJCS5zb3VyY2UgPSBBTkNfQllQQVNTLAorCQkuZGVzdCA9IEFOQ19BQ1RJVkUsCisJCS5hbmFsb2d1ZSA9IDEsCisJCS5zdGVwID0geworCQkJd20yMDAwX2V4aXRfYnlwYXNzLAorCQl9LAorCX0sCisJeworCQkuc291cmNlID0gQU5DX0JZUEFTUywKKwkJLmRlc3QgPSBBTkNfU1RBTkRCWSwKKwkJLmFuYWxvZ3VlID0gMSwKKwkJLnN0ZXAgPSB7CisJCQl3bTIwMDBfZXhpdF9ieXBhc3MsCisJCQl3bTIwMDBfZW50ZXJfc3RhbmRieSwKKwkJfSwKKwl9LAorCXsKKwkJLnNvdXJjZSA9IEFOQ19CWVBBU1MsCisJCS5kZXN0ID0gQU5DX09GRiwKKwkJLnN0ZXAgPSB7CisJCQl3bTIwMDBfZXhpdF9ieXBhc3MsCisJCQl3bTIwMDBfcG93ZXJfZG93biwKKwkJfSwKKwl9LAorCXsKKwkJLnNvdXJjZSA9IEFOQ19TVEFOREJZLAorCQkuZGVzdCA9IEFOQ19BQ1RJVkUsCisJCS5hbmFsb2d1ZSA9IDEsCisJCS5zdGVwID0geworCQkJd20yMDAwX2V4aXRfc3RhbmRieSwKKwkJfSwKKwl9LAorCXsKKwkJLnNvdXJjZSA9IEFOQ19TVEFOREJZLAorCQkuZGVzdCA9IEFOQ19CWVBBU1MsCisJCS5hbmFsb2d1ZSA9IDEsCisJCS5zdGVwID0geworCQkJd20yMDAwX2V4aXRfc3RhbmRieSwKKwkJCXdtMjAwMF9lbnRlcl9ieXBhc3MsCisJCX0sCisJfSwKKwl7CisJCS5zb3VyY2UgPSBBTkNfU1RBTkRCWSwKKwkJLmRlc3QgPSBBTkNfT0ZGLAorCQkuc3RlcCA9IHsKKwkJCXdtMjAwMF9leGl0X3N0YW5kYnksCisJCQl3bTIwMDBfcG93ZXJfZG93biwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIGludCB3bTIwMDBfYW5jX3RyYW5zaXRpb24oc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAsCisJCQkJIGVudW0gd20yMDAwX2FuY19tb2RlIG1vZGUpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IHdtMjAwMC0+aTJjOworCWludCBpLCBqOworCWludCByZXQ7CisKKwlpZiAod20yMDAwLT5hbmNfbW9kZSA9PSBtb2RlKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFuY190cmFuc2l0aW9ucyk7IGkrKykKKwkJaWYgKGFuY190cmFuc2l0aW9uc1tpXS5zb3VyY2UgPT0gd20yMDAwLT5hbmNfbW9kZSAmJgorCQkgICAgYW5jX3RyYW5zaXRpb25zW2ldLmRlc3QgPT0gbW9kZSkKKwkJCWJyZWFrOworCWlmIChpID09IEFSUkFZX1NJWkUoYW5jX3RyYW5zaXRpb25zKSkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIk5vIHRyYW5zaXRpb24gZm9yICVkLT4lZFxuIiwKKwkJCXdtMjAwMC0+YW5jX21vZGUsIG1vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShhbmNfdHJhbnNpdGlvbnNbal0uc3RlcCk7IGorKykgeworCQlpZiAoIWFuY190cmFuc2l0aW9uc1tpXS5zdGVwW2pdKQorCQkJYnJlYWs7CisJCXJldCA9IGFuY190cmFuc2l0aW9uc1tpXS5zdGVwW2pdKGkyYywKKwkJCQkJCSBhbmNfdHJhbnNpdGlvbnNbaV0uYW5hbG9ndWUpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtMjAwMF9hbmNfc2V0X21vZGUoc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IHdtMjAwMC0+aTJjOworCWVudW0gd20yMDAwX2FuY19tb2RlIG1vZGU7CisKKwlpZiAod20yMDAwLT5hbmNfZW5nX2VuYSAmJiB3bTIwMDAtPnNwa19lbmEpCisJCWlmICh3bTIwMDAtPmFuY19hY3RpdmUpCisJCQltb2RlID0gQU5DX0FDVElWRTsKKwkJZWxzZQorCQkJbW9kZSA9IEFOQ19CWVBBU1M7CisJZWxzZQorCQltb2RlID0gQU5DX1NUQU5EQlk7CisKKwlkZXZfZGJnKCZpMmMtPmRldiwgIlNldCBtb2RlICVkIChlbmFibGVkICVkLCBtdXRlICVkLCBhY3RpdmUgJWQpXG4iLAorCQltb2RlLCB3bTIwMDAtPmFuY19lbmdfZW5hLCAhd20yMDAwLT5zcGtfZW5hLAorCQl3bTIwMDAtPmFuY19hY3RpdmUpOworCisJcmV0dXJuIHdtMjAwMF9hbmNfdHJhbnNpdGlvbih3bTIwMDAsIG1vZGUpOworfQorCitzdGF0aWMgaW50IHdtMjAwMF9hbmNfbW9kZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJndtMjAwMF9pMmMtPmRldik7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gd20yMDAwLT5hbmNfYWN0aXZlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd20yMDAwX2FuY19tb2RlX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmd20yMDAwX2kyYy0+ZGV2KTsKKwlpbnQgYW5jX2FjdGl2ZSA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CisKKwlpZiAoYW5jX2FjdGl2ZSA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJd20yMDAwLT5hbmNfYWN0aXZlID0gYW5jX2FjdGl2ZTsKKworCXJldHVybiB3bTIwMDBfYW5jX3NldF9tb2RlKHdtMjAwMCk7Cit9CisKK3N0YXRpYyBpbnQgd20yMDAwX3NwZWFrZXJfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJndtMjAwMF9pMmMtPmRldik7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gd20yMDAwLT5zcGtfZW5hOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd20yMDAwX3NwZWFrZXJfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoJndtMjAwMF9pMmMtPmRldik7CisJaW50IHZhbCA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CisKKwlpZiAodmFsID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3bTIwMDAtPnNwa19lbmEgPSB2YWw7CisKKwlyZXR1cm4gd20yMDAwX2FuY19zZXRfbW9kZSh3bTIwMDApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd20yMDAwX2NvbnRyb2xzW10gPSB7CisJU09DX1NJTkdMRV9CT09MX0VYVCgiV00yMDAwIEFOQyBTd2l0Y2giLCAwLAorCQkJICAgIHdtMjAwMF9hbmNfbW9kZV9nZXQsCisJCQkgICAgd20yMDAwX2FuY19tb2RlX3B1dCksCisJU09DX1NJTkdMRV9CT09MX0VYVCgiV00yMDAwIFN3aXRjaCIsIDAsCisJCQkgICAgd20yMDAwX3NwZWFrZXJfZ2V0LAorCQkJICAgIHdtMjAwMF9zcGVha2VyX3B1dCksCit9OworCitzdGF0aWMgaW50IHdtMjAwMF9hbmNfcG93ZXJfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkJICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZ3bTIwMDBfaTJjLT5kZXYpOworCisJaWYgKFNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpCisJCXdtMjAwMC0+YW5jX2VuZ19lbmEgPSAxOworCisJaWYgKFNORF9TT0NfREFQTV9FVkVOVF9PRkYoZXZlbnQpKQorCQl3bTIwMDAtPmFuY19lbmdfZW5hID0gMDsKKworCXJldHVybiB3bTIwMDBfYW5jX3NldF9tb2RlKHdtMjAwMCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTIwMDBfZGFwbV93aWRnZXRzW10gPSB7CisvKiBFeHRlcm5hbGx5IHZpc2libGUgcGlucyAqLworU05EX1NPQ19EQVBNX09VVFBVVCgiV00yMDAwIFNQS04iKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIldNMjAwMCBTUEtQIiksCisKK1NORF9TT0NfREFQTV9JTlBVVCgiV00yMDAwIExJTk4iKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiV00yMDAwIExJTlAiKSwKKworU05EX1NPQ19EQVBNX1BHQV9FKCJBTkMgRW5naW5lIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCQkgICB3bTIwMDBfYW5jX3Bvd2VyX2V2ZW50LAorCQkgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCit9OworCisvKiBUYXJnZXQsIFBhdGgsIFNvdXJjZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJeyAiV00yMDAwIFNQS04iLCBOVUxMLCAiQU5DIEVuZ2luZSIgfSwKKwl7ICJXTTIwMDAgU1BLUCIsIE5VTEwsICJBTkMgRW5naW5lIiB9LAorCXsgIkFOQyBFbmdpbmUiLCBOVUxMLCAiV00yMDAwIExJTk4iIH0sCisJeyAiQU5DIEVuZ2luZSIsIE5VTEwsICJXTTIwMDAgTElOUCIgfSwKK307CisKKy8qIENhbGxlZCBmcm9tIHRoZSBtYWNoaW5lIGRyaXZlciAqLworaW50IHdtMjAwMF9hZGRfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCByZXQ7CisKKwlpZiAoIXdtMjAwMF9pMmMpIHsKKwkJcHJfZXJyKCJXTTIwMDAgbm90IHlldCBwcm9iZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSBzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTIwMDBfZGFwbV93aWRnZXRzLAorCQkJCQlBUlJBWV9TSVpFKHdtMjAwMF9kYXBtX3dpZGdldHMpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhdWRpb19tYXAsIEFSUkFZX1NJWkUoYXVkaW9fbWFwKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtMjAwMF9jb250cm9scywKKwkJCUFSUkFZX1NJWkUod20yMDAwX2NvbnRyb2xzKSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTIwMDBfYWRkX2NvbnRyb2xzKTsKKworc3RhdGljIGludCBfX2RldmluaXQgd20yMDAwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppMmNfaWQpCit7CisJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDA7CisJc3RydWN0IHdtMjAwMF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCByZWcsIHJldDsKKwl1MTYgaWQ7CisKKwlpZiAod20yMDAwX2kyYykgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIkFub3RoZXIgV00yMDAwIGlzIGFscmVhZHkgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdtMjAwMCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTIwMDBfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh3bTIwMDAgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBwcml2YXRlIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBWZXJpZnkgdGhhdCB0aGlzIGlzIGEgV00yMDAwICovCisJcmVnID0gd20yMDAwX3JlYWQoaTJjLCBXTTIwMDBfUkVHX0lEMSk7CisJaWQgPSByZWcgPDwgODsKKwlyZWcgPSB3bTIwMDBfcmVhZChpMmMsIFdNMjAwMF9SRUdfSUQyKTsKKwlpZCB8PSByZWcgJiAweGZmOworCisJaWYgKGlkICE9IDB4MjAwMCkgeworCQlkZXZfZXJyKCZpMmMtPmRldiwgIkRldmljZSBpcyBub3QgYSBXTTIwMDAgLSBJRCAleFxuIiwgaWQpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycjsKKwl9CisKKwlyZWcgPSB3bTIwMDBfcmVhZChpMmMsIFdNMjAwMF9SRUdfUkVWSVNPTik7CisJZGV2X2luZm8oJmkyYy0+ZGV2LCAicmV2aXNpb24gJWNcbiIsIHJlZyArICdBJyk7CisKKwlmaWxlbmFtZSA9ICJ3bTIwMDBfYW5jLmJpbiI7CisJcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZpMmMtPmRldik7CisJaWYgKHBkYXRhKSB7CisJCXdtMjAwMC0+bWNsa19kaXYgPSBwZGF0YS0+bWNsa2RpdjI7CisJCXdtMjAwMC0+c3BlZWNoX2NsYXJpdHkgPSAhcGRhdGEtPnNwZWVjaF9lbmhfZGlzYWJsZTsKKworCQlpZiAocGRhdGEtPmRvd25sb2FkX2ZpbGUpCisJCQlmaWxlbmFtZSA9IHBkYXRhLT5kb3dubG9hZF9maWxlOworCX0KKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmaWxlbmFtZSwgJmkyYy0+ZGV2KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJGYWlsZWQgdG8gYWNxdWlyZSBBTkMgZGF0YTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCS8qIFByZS1jb29rIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSByZWdpc3RlciBhZGRyZXNzIG9udG8gdGhlIGltYWdlICovCisJd20yMDAwLT5hbmNfZG93bmxvYWRfc2l6ZSA9IGZ3LT5zaXplICsgMjsKKwl3bTIwMDAtPmFuY19kb3dubG9hZCA9IGttYWxsb2Mod20yMDAwLT5hbmNfZG93bmxvYWRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdtMjAwMC0+YW5jX2Rvd25sb2FkID09IE5VTEwpIHsKKwkJZGV2X2VycigmaTJjLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnc7CisJfQorCisJd20yMDAwLT5hbmNfZG93bmxvYWRbMF0gPSAweDgwOworCXdtMjAwMC0+YW5jX2Rvd25sb2FkWzFdID0gMHgwMDsKKwltZW1jcHkod20yMDAwLT5hbmNfZG93bmxvYWQgKyAyLCBmdy0+ZGF0YSwgZnctPnNpemUpOworCisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisKKwlkZXZfc2V0X2RydmRhdGEoJmkyYy0+ZGV2LCB3bTIwMDApOworCXdtMjAwMC0+YW5jX2VuZ19lbmEgPSAxOworCXdtMjAwMC0+aTJjID0gaTJjOworCisJd20yMDAwX3Jlc2V0KHdtMjAwMCk7CisKKwkvKiBUaGlzIHdpbGwgdHJpZ2dlciBhIHRyYW5zaXRpb24gdG8gc3RhbmRieSBtb2RlIGJ5IGRlZmF1bHQgKi8KKwl3bTIwMDBfYW5jX3NldF9tb2RlKHdtMjAwMCk7CQorCisJd20yMDAwX2kyYyA9IGkyYzsKKworCXJldHVybiAwOworCitlcnJfZnc6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CitlcnI6CisJa2ZyZWUod20yMDAwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19kZXZleGl0IGludCB3bTIwMDBfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZpMmMtPmRldik7CisKKwl3bTIwMDBfYW5jX3RyYW5zaXRpb24od20yMDAwLCBBTkNfT0ZGKTsKKworCXdtMjAwMF9pMmMgPSBOVUxMOworCWtmcmVlKHdtMjAwMC0+YW5jX2Rvd25sb2FkKTsKKwlrZnJlZSh3bTIwMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdtMjAwMF9pMmNfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmkyYykKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmaTJjLT5kZXYpOworCisJd20yMDAwX2FuY190cmFuc2l0aW9uKHdtMjAwMCwgQU5DX09GRik7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgd20yMDAwX2kyY19zdXNwZW5kKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIHBtX21lc3NhZ2VfdCBtZXNnKQoreworCXN0cnVjdCB3bTIwMDBfcHJpdiAqd20yMDAwID0gZGV2X2dldF9kcnZkYXRhKCZpMmMtPmRldik7CisKKwlyZXR1cm4gd20yMDAwX2FuY190cmFuc2l0aW9uKHdtMjAwMCwgQU5DX09GRik7Cit9CisKK3N0YXRpYyBpbnQgd20yMDAwX2kyY19yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmkyYykKK3sKKwlzdHJ1Y3Qgd20yMDAwX3ByaXYgKndtMjAwMCA9IGRldl9nZXRfZHJ2ZGF0YSgmaTJjLT5kZXYpOworCisJcmV0dXJuIHdtMjAwMF9hbmNfc2V0X21vZGUod20yMDAwKTsKK30KKyNlbHNlCisjZGVmaW5lIHdtMjAwMF9pMmNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtMjAwMF9pMmNfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd20yMDAwX2kyY19pZFtdID0geworCXsgIndtMjAwMCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgd20yMDAwX2kyY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTIwMDBfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ3bTIwMDAiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IHdtMjAwMF9pMmNfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHdtMjAwMF9pMmNfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9IHdtMjAwMF9pMmNfc3VzcGVuZCwKKwkucmVzdW1lID0gd20yMDAwX2kyY19yZXN1bWUsCisJLnNodXRkb3duID0gd20yMDAwX2kyY19zaHV0ZG93biwKKwkuaWRfdGFibGUgPSB3bTIwMDBfaTJjX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd20yMDAwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJndtMjAwMF9pMmNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHdtMjAwMF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtMjAwMF9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJndtMjAwMF9pMmNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHdtMjAwMF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIFdNMjAwMCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmb25taWNyby5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtMjAwMC5oIGIvc291bmQvc29jL2NvZGVjcy93bTIwMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMThlMjYxCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTIwMDAuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogd20yMDAwLmggIC0tICBXTTIwMDAgU29jIEF1ZGlvIGRyaXZlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfV00yMDAwX0gKKyNkZWZpbmUgX1dNMjAwMF9ICisKK3N0cnVjdCB3bTIwMDBfc2V0dXBfZGF0YSB7CisJdW5zaWduZWQgc2hvcnQgaTJjX2FkZHJlc3M7CisJaW50IG1jbGtfZGl2OyAgIC8qIFNldCB0byBhIG5vbi16ZXJvIHZhbHVlIGlmIE1DTEtfRElWXzIgcmVxdWlyZWQgKi8KK307CisKK2V4dGVybiBpbnQgd20yMDAwX2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpOworCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHdtMjAwMF9kYWk7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd20yMDAwOworCisjZGVmaW5lIFdNMjAwMF9SRUdfU1lTX1NUQVJUCSAgICAweDgwMDAKKyNkZWZpbmUgV00yMDAwX1JFR19TUEVFQ0hfQ0xBUklUWSAgIDB4OGZlZgorI2RlZmluZSBXTTIwMDBfUkVHX1NZU19XQVRDSERPRyAgICAgMHg4ZmY2CisjZGVmaW5lIFdNMjAwMF9SRUdfQU5BX1ZNSURfUERfVElNRSAweDhmZjcKKyNkZWZpbmUgV00yMDAwX1JFR19BTkFfVk1JRF9QVV9USU1FIDB4OGZmOAorI2RlZmluZSBXTTIwMDBfUkVHX0NBVF9GTFRSX0lORFggICAgMHg4ZmY5CisjZGVmaW5lIFdNMjAwMF9SRUdfQ0FUX0dBSU5fMCAgICAgICAweDhmZmEKKyNkZWZpbmUgV00yMDAwX1JFR19TWVNfU1RBVFVTICAgICAgIDB4OGZmYworI2RlZmluZSBXTTIwMDBfUkVHX1NZU19NT0RFX0NOVFJMICAgMHg4ZmZkCisjZGVmaW5lIFdNMjAwMF9SRUdfU1lTX1NUQVJUMCAgICAgICAweDhmZmUKKyNkZWZpbmUgV00yMDAwX1JFR19TWVNfU1RBUlQxICAgICAgIDB4OGZmZgorI2RlZmluZSBXTTIwMDBfUkVHX0lEMSAgICAgICAgICAgICAgMHhmMDAwCisjZGVmaW5lIFdNMjAwMF9SRUdfSUQyICAgICAgICAgICAgICAweGYwMDEKKyNkZWZpbmUgV00yMDAwX1JFR19SRVZJU09OICAgICAgICAgIDB4ZjAwMgorI2RlZmluZSBXTTIwMDBfUkVHX1NZU19DVEwxICAgICAgICAgMHhmMDAzCisjZGVmaW5lIFdNMjAwMF9SRUdfU1lTX0NUTDIgICAgICAgICAweGYwMDQKKyNkZWZpbmUgV00yMDAwX1JFR19BTkNfU1RBVCAgICAgICAgIDB4ZjAwNQorI2RlZmluZSBXTTIwMDBfUkVHX0lGX0NUTCAgICAgICAgICAgMHhmMDA2CisKKy8qIFNQRUVDSF9DTEFSSVRZICovCisjZGVmaW5lIFdNMjAwMF9TUEVFQ0hfQ0xBUklUWSAgIDB4MDEKKworLyogU1lTX1NUQVRVUyAqLworI2RlZmluZSBXTTIwMDBfU1RBVFVTX01PVVNFX0FDVElWRSAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBXTTIwMDBfU1RBVFVTX0NBVF9GUkVRX0NPTVBMRVRFICAgICAgICAgMHgyMAorI2RlZmluZSBXTTIwMDBfU1RBVFVTX0NBVF9HQUlOX0NPTVBMRVRFICAgICAgICAgMHgxMAorI2RlZmluZSBXTTIwMDBfU1RBVFVTX1RIRVJNQUxfU0hVVERPV05fQ09NUExFVEUgMHgwOAorI2RlZmluZSBXTTIwMDBfU1RBVFVTX0FOQ19ESVNBQkxFRCAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBXTTIwMDBfU1RBVFVTX1BPV0VSX0RPV05fQ09NUExFVEUgICAgICAgMHgwMgorI2RlZmluZSBXTTIwMDBfU1RBVFVTX0JPT1RfQ09NUExFVEUgICAgICAgICAgICAgMHgwMQorCisvKiBTWVNfTU9ERV9DTlRSTCAqLworI2RlZmluZSBXTTIwMDBfTU9ERV9BTkFfU0VRX0lOQ0xVREUgMHg4MAorI2RlZmluZSBXTTIwMDBfTU9ERV9NT1VTRV9FTkFCTEUgICAgMHg0MAorI2RlZmluZSBXTTIwMDBfTU9ERV9DQVRfRlJFUV9FTkFCTEUgMHgyMAorI2RlZmluZSBXTTIwMDBfTU9ERV9DQVRfR0FJTl9FTkFCTEUgMHgxMAorI2RlZmluZSBXTTIwMDBfTU9ERV9CWVBBU1NfRU5UUlkgICAgMHgwOAorI2RlZmluZSBXTTIwMDBfTU9ERV9TVEFOREJZX0VOVFJZICAgMHgwNAorI2RlZmluZSBXTTIwMDBfTU9ERV9USEVSTUFMX0VOQUJMRSAgMHgwMgorI2RlZmluZSBXTTIwMDBfTU9ERV9QT1dFUl9ET1dOICAgICAgMHgwMQorCisvKiBTWVNfQ1RMMSAqLworI2RlZmluZSBXTTIwMDBfU1lTX1NUQlkgICAgICAgICAgMHgwMQorCisvKiBTWVNfQ1RMMiAqLworI2RlZmluZSBXTTIwMDBfTUNMS19ESVYyX0VOQV9DTFIgMHg4MAorI2RlZmluZSBXTTIwMDBfTUNMS19ESVYyX0VOQV9TRVQgMHg0MAorI2RlZmluZSBXTTIwMDBfQU5DX0VOR19DTFIgICAgICAgMHgyMAorI2RlZmluZSBXTTIwMDBfQU5DX0VOR19TRVQgICAgICAgMHgxMAorI2RlZmluZSBXTTIwMDBfQU5DX0lOVF9OX0NMUiAgICAgMHgwOAorI2RlZmluZSBXTTIwMDBfQU5DX0lOVF9OX1NFVCAgICAgMHgwNAorI2RlZmluZSBXTTIwMDBfUkFNX0NMUiAgICAgICAgICAgMHgwMgorI2RlZmluZSBXTTIwMDBfUkFNX1NFVCAgICAgICAgICAgMHgwMQorCisvKiBBTkNfU1RBVCAqLworI2RlZmluZSBXTTIwMDBfQU5DX0VOR19JRExFICAgICAgMHgwMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI3LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODcyNy5jCmluZGV4IGQ4ZmZiZDYuLjYzYTI1NGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzI3LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3MjcuYwpAQCAtNDQsMjMgKzQ0LDE2IEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwod204NzI3X2RhaSk7CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204NzI3X2NvZGVjOworCiBzdGF0aWMgaW50IHdtODcyN19zb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAlpbnQgcmV0ID0gMDsKIAotCWNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY29kZWMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKLQljb2RlYy0+bmFtZSA9ICJXTTg3MjciOwotCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOwotCWNvZGVjLT5kYWkgPSAmd204NzI3X2RhaTsKLQljb2RlYy0+bnVtX2RhaSA9IDE7Ci0Jc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOwotCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKLQlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCUJVR19PTighd204NzI3X2NvZGVjKTsKKworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB3bTg3MjdfY29kZWM7CiAKIAkvKiByZWdpc3RlciBwY21zICovCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKQEAgLTgwLDEyICs3Myw5IEBACiBzdGF0aWMgaW50IHdtODcyN19zb2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCi0JaWYgKGNvZGVjID09IE5VTEwpCi0JCXJldHVybiAwOwogCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7Ci0Ja2ZyZWUoY29kZWMpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk4LDEzICs4OCw1NSBAQAogCiBzdGF0aWMgX19kZXZpbml0IGludCB3bTg3MjdfcGxhdGZvcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldDsKKworCWlmICh3bTg3MjdfY29kZWMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQW5vdGhlciBXTTg3MjcgaXMgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJY29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOworCWlmIChjb2RlYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwl3bTg3MjdfY29kZWMgPSBjb2RlYzsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNvZGVjKTsKKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJY29kZWMtPmRldiA9ICZwZGV2LT5kZXY7CisJY29kZWMtPm5hbWUgPSAiV004NzI3IjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+ZGFpID0gJndtODcyN19kYWk7CisJY29kZWMtPm51bV9kYWkgPSAxOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCiAJd204NzI3X2RhaS5kZXYgPSAmcGRldi0+ZGV2OwotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmd204NzI3X2RhaSk7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIENPREVDOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJndtODcyN19kYWkpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfY29kZWM7CisJfQorCitlcnJfY29kZWM6CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKK2VycjoKKwlrZnJlZShjb2RlYyk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgd204NzI3X3BsYXRmb3JtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODcyN19kYWkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jCmluZGV4IDNhNDk3ODEuLjVhMjYxOWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3MzEuYwpAQCAtNDU2LDYgKzQ1Niw5IEBACiAKIAkvKiBTeW5jIHJlZ19jYWNoZSB3aXRoIHRoZSBoYXJkd2FyZSAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODczMV9yZWcpOyBpKyspIHsKKwkJaWYgKGNhY2hlW2ldID09IHdtODczMV9yZWdbaV0pCisJCQljb250aW51ZTsKKwogCQlkYXRhWzBdID0gKGkgPDwgMSkgfCAoKGNhY2hlW2ldID4+IDgpICYgMHgwMDAxKTsKIAkJZGF0YVsxXSA9IGNhY2hlW2ldICYgMHgwMGZmOwogCQljb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYwppbmRleCBkNjg1MGRhLi5jMjQ0NGU3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKQEAgLTE1MDcsMTAgKzE1MDcsNiBAQAogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAotCS8qIHdlIG9ubHkgbmVlZCB0byBzdXNwZW5kIGlmIHdlIGFyZSBhIHZhbGlkIGNhcmQgKi8KLQlpZiAoIWNvZGVjLT5jYXJkKQotCQlyZXR1cm4gMDsKLQogCXdtODc1M19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTIzLDEwICsxNTE5LDYgQEAKIAl1OCBkYXRhWzJdOwogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwogCi0JLyogd2Ugb25seSBuZWVkIHRvIHJlc3VtZSBpZiB3ZSBhcmUgYSB2YWxpZCBjYXJkICovCi0JaWYgKCFjb2RlYy0+Y2FyZCkKLQkJcmV0dXJuIDA7Ci0KIAkvKiBTeW5jIHJlZ19jYWNoZSB3aXRoIHRoZSBoYXJkd2FyZSAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODc1M19yZWcpOyBpKyspIHsKIAkJaWYgKGkgKyAxID09IFdNODc1M19SRVNFVCkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204Nzc2LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc3Ni5jCmluZGV4IGFiMmMwZGEuLjQ0ZTdkOWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204Nzc2LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NzYuYwpAQCAtNDA2LDYgKzQwNiw4IEBACiAKIAkvKiBTeW5jIHJlZ19jYWNoZSB3aXRoIHRoZSBoYXJkd2FyZSAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODc3Nl9yZWcpOyBpKyspIHsKKwkJaWYgKGNhY2hlW2ldID09IHdtODc3Nl9yZWdbaV0pCisJCQljb250aW51ZTsKIAkJZGF0YVswXSA9IChpIDw8IDEpIHwgKChjYWNoZVtpXSA+PiA4KSAmIDB4MDAwMSk7CiAJCWRhdGFbMV0gPSBjYWNoZVtpXSAmIDB4MDBmZjsKIAkJY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5MDQuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzZTQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmMKQEAgLTAsMCArMSwyNjU2IEBACisvKgorICogd204OTA0LmMgIC0tICBXTTg5MDQgQUxTQSBTb0MgQXVkaW8gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIHBsYworICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPHNvdW5kL3dtODkwNC5oPgorCisjaW5jbHVkZSAid204OTA0LmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204OTA0X2NvZGVjOworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTA0OworCitlbnVtIHdtODkwNF90eXBlIHsKKwlXTTg5MDQsCisJV004OTEyLAorfTsKKworI2RlZmluZSBXTTg5MDRfTlVNX0RDU19DSEFOTkVMUyA0CisKKyNkZWZpbmUgV004OTA0X05VTV9TVVBQTElFUyA1CitzdGF0aWMgY29uc3QgY2hhciAqd204OTA0X3N1cHBseV9uYW1lc1tXTTg5MDRfTlVNX1NVUFBMSUVTXSA9IHsKKwkiRENWREQiLAorCSJEQlZERCIsCisJIkFWREQiLAorCSJDUFZERCIsCisJIk1JQ1ZERCIsCit9OworCisvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCB3bTg5MDRfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdTE2IHJlZ19jYWNoZVtXTTg5MDRfTUFYX1JFR0lTVEVSICsgMV07CisKKwllbnVtIHdtODkwNF90eXBlIGRldnR5cGU7CisKKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tXTTg5MDRfTlVNX1NVUFBMSUVTXTsKKworCXN0cnVjdCB3bTg5MDRfcGRhdGEgKnBkYXRhOworCisJaW50IGRlZW1waDsKKworCS8qIFBsYXRmb3JtIHByb3ZpZGVkIERSQyBjb25maWd1cmF0aW9uICovCisJY29uc3QgY2hhciAqKmRyY190ZXh0czsKKwlpbnQgZHJjX2NmZzsKKwlzdHJ1Y3Qgc29jX2VudW0gZHJjX2VudW07CisKKwkvKiBQbGF0Zm9ybSBwcm92aWRlZCBSZVR1bmUgbW9iaWxlIGNvbmZpZ3VyYXRpb24gKi8KKwlpbnQgbnVtX3JldHVuZV9tb2JpbGVfdGV4dHM7CisJY29uc3QgY2hhciAqKnJldHVuZV9tb2JpbGVfdGV4dHM7CisJaW50IHJldHVuZV9tb2JpbGVfY2ZnOworCXN0cnVjdCBzb2NfZW51bSByZXR1bmVfbW9iaWxlX2VudW07CisKKwkvKiBGTEwgc2V0dXAgKi8KKwlpbnQgZmxsX3NyYzsKKwlpbnQgZmxsX2ZyZWY7CisJaW50IGZsbF9mb3V0OworCisJLyogQ2xvY2tpbmcgY29uZmlndXJhdGlvbiAqLworCXVuc2lnbmVkIGludCBtY2xrX3JhdGU7CisJaW50IHN5c2Nsa19zcmM7CisJdW5zaWduZWQgaW50IHN5c2Nsa19yYXRlOworCisJaW50IHRkbV93aWR0aDsKKwlpbnQgdGRtX3Nsb3RzOworCWludCBiY2xrOworCWludCBmczsKKworCS8qIERDIHNlcnZvIGNvbmZpZ3VyYXRpb24gLSBjYWNoZWQgb2Zmc2V0IHZhbHVlcyAqLworCWludCBkY3Nfc3RhdGVbV004OTA0X05VTV9EQ1NfQ0hBTk5FTFNdOworfTsKKworc3RhdGljIGNvbnN0IHUxNiB3bTg5MDRfcmVnW1dNODkwNF9NQVhfUkVHSVNURVIgKyAxXSA9IHsKKwkweDg5MDQsICAgICAvKiBSMCAgIC0gU1cgUmVzZXQgYW5kIElEICovCisJMHgwMDAwLCAgICAgLyogUjEgICAtIFJldmlzaW9uICovCisJMHgwMDAwLCAgICAgLyogUjIgKi8KKwkweDAwMDAsICAgICAvKiBSMyAqLworCTB4MDAxOCwgICAgIC8qIFI0ICAgLSBCaWFzIENvbnRyb2wgMCAqLworCTB4MDAwMCwgICAgIC8qIFI1ICAgLSBWTUlEIENvbnRyb2wgMCAqLworCTB4MDAwMCwgICAgIC8qIFI2ICAgLSBNaWMgQmlhcyBDb250cm9sIDAgKi8KKwkweDAwMDAsICAgICAvKiBSNyAgIC0gTWljIEJpYXMgQ29udHJvbCAxICovCisJMHgwMDAxLCAgICAgLyogUjggICAtIEFuYWxvZ3VlIERBQyAwICovCisJMHg5Njk2LCAgICAgLyogUjkgICAtIG1pYyBGaWx0ZXIgQ29udHJvbCAqLworCTB4MDAwMSwgICAgIC8qIFIxMCAgLSBBbmFsb2d1ZSBBREMgMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMSAqLworCTB4MDAwMCwgICAgIC8qIFIxMiAgLSBQb3dlciBNYW5hZ2VtZW50IDAgKi8KKwkweDAwMDAsICAgICAvKiBSMTMgKi8KKwkweDAwMDAsICAgICAvKiBSMTQgIC0gUG93ZXIgTWFuYWdlbWVudCAyICovCisJMHgwMDAwLCAgICAgLyogUjE1ICAtIFBvd2VyIE1hbmFnZW1lbnQgMyAqLworCTB4MDAwMCwgICAgIC8qIFIxNiAqLworCTB4MDAwMCwgICAgIC8qIFIxNyAqLworCTB4MDAwMCwgICAgIC8qIFIxOCAgLSBQb3dlciBNYW5hZ2VtZW50IDYgKi8KKwkweDAwMDAsICAgICAvKiBSMTkgKi8KKwkweDk0NUUsICAgICAvKiBSMjAgIC0gQ2xvY2sgUmF0ZXMgMCAqLworCTB4MEMwNSwgICAgIC8qIFIyMSAgLSBDbG9jayBSYXRlcyAxICovCisJMHgwMDA2LCAgICAgLyogUjIyICAtIENsb2NrIFJhdGVzIDIgKi8KKwkweDAwMDAsICAgICAvKiBSMjMgKi8KKwkweDAwNTAsICAgICAvKiBSMjQgIC0gQXVkaW8gSW50ZXJmYWNlIDAgKi8KKwkweDAwMEEsICAgICAvKiBSMjUgIC0gQXVkaW8gSW50ZXJmYWNlIDEgKi8KKwkweDAwRTQsICAgICAvKiBSMjYgIC0gQXVkaW8gSW50ZXJmYWNlIDIgKi8KKwkweDAwNDAsICAgICAvKiBSMjcgIC0gQXVkaW8gSW50ZXJmYWNlIDMgKi8KKwkweDAwMDAsICAgICAvKiBSMjggKi8KKwkweDAwMDAsICAgICAvKiBSMjkgKi8KKwkweDAwQzAsICAgICAvKiBSMzAgIC0gREFDIERpZ2l0YWwgVm9sdW1lIExlZnQgKi8KKwkweDAwQzAsICAgICAvKiBSMzEgIC0gREFDIERpZ2l0YWwgVm9sdW1lIFJpZ2h0ICovCisJMHgwMDAwLCAgICAgLyogUjMyICAtIERBQyBEaWdpdGFsIDAgKi8KKwkweDAwMDgsICAgICAvKiBSMzMgIC0gREFDIERpZ2l0YWwgMSAqLworCTB4MDAwMCwgICAgIC8qIFIzNCAqLworCTB4MDAwMCwgICAgIC8qIFIzNSAqLworCTB4MDBDMCwgICAgIC8qIFIzNiAgLSBBREMgRGlnaXRhbCBWb2x1bWUgTGVmdCAqLworCTB4MDBDMCwgICAgIC8qIFIzNyAgLSBBREMgRGlnaXRhbCBWb2x1bWUgUmlnaHQgKi8KKwkweDAwMTAsICAgICAvKiBSMzggIC0gQURDIERpZ2l0YWwgMCAqLworCTB4MDAwMCwgICAgIC8qIFIzOSAgLSBEaWdpdGFsIE1pY3JvcGhvbmUgMCAqLworCTB4MDFBRiwgICAgIC8qIFI0MCAgLSBEUkMgMCAqLworCTB4MzI0OCwgICAgIC8qIFI0MSAgLSBEUkMgMSAqLworCTB4MDAwMCwgICAgIC8qIFI0MiAgLSBEUkMgMiAqLworCTB4MDAwMCwgICAgIC8qIFI0MyAgLSBEUkMgMyAqLworCTB4MDA4NSwgICAgIC8qIFI0NCAgLSBBbmFsb2d1ZSBMZWZ0IElucHV0IDAgKi8KKwkweDAwODUsICAgICAvKiBSNDUgIC0gQW5hbG9ndWUgUmlnaHQgSW5wdXQgMCAqLworCTB4MDA0NCwgICAgIC8qIFI0NiAgLSBBbmFsb2d1ZSBMZWZ0IElucHV0IDEgKi8KKwkweDAwNDQsICAgICAvKiBSNDcgIC0gQW5hbG9ndWUgUmlnaHQgSW5wdXQgMSAqLworCTB4MDAwMCwgICAgIC8qIFI0OCAqLworCTB4MDAwMCwgICAgIC8qIFI0OSAqLworCTB4MDAwMCwgICAgIC8qIFI1MCAqLworCTB4MDAwMCwgICAgIC8qIFI1MSAqLworCTB4MDAwMCwgICAgIC8qIFI1MiAqLworCTB4MDAwMCwgICAgIC8qIFI1MyAqLworCTB4MDAwMCwgICAgIC8qIFI1NCAqLworCTB4MDAwMCwgICAgIC8qIFI1NSAqLworCTB4MDAwMCwgICAgIC8qIFI1NiAqLworCTB4MDAyRCwgICAgIC8qIFI1NyAgLSBBbmFsb2d1ZSBPVVQxIExlZnQgKi8KKwkweDAwMkQsICAgICAvKiBSNTggIC0gQW5hbG9ndWUgT1VUMSBSaWdodCAqLworCTB4MDAzOSwgICAgIC8qIFI1OSAgLSBBbmFsb2d1ZSBPVVQyIExlZnQgKi8KKwkweDAwMzksICAgICAvKiBSNjAgIC0gQW5hbG9ndWUgT1VUMiBSaWdodCAqLworCTB4MDAwMCwgICAgIC8qIFI2MSAgLSBBbmFsb2d1ZSBPVVQxMiBaQyAqLworCTB4MDAwMCwgICAgIC8qIFI2MiAqLworCTB4MDAwMCwgICAgIC8qIFI2MyAqLworCTB4MDAwMCwgICAgIC8qIFI2NCAqLworCTB4MDAwMCwgICAgIC8qIFI2NSAqLworCTB4MDAwMCwgICAgIC8qIFI2NiAqLworCTB4MDAwMCwgICAgIC8qIFI2NyAgLSBEQyBTZXJ2byAwICovCisJMHgwMDAwLCAgICAgLyogUjY4ICAtIERDIFNlcnZvIDEgKi8KKwkweEFBQUEsICAgICAvKiBSNjkgIC0gREMgU2Vydm8gMiAqLworCTB4MDAwMCwgICAgIC8qIFI3MCAqLworCTB4QUFBQSwgICAgIC8qIFI3MSAgLSBEQyBTZXJ2byA0ICovCisJMHhBQUFBLCAgICAgLyogUjcyICAtIERDIFNlcnZvIDUgKi8KKwkweDAwMDAsICAgICAvKiBSNzMgIC0gREMgU2Vydm8gNiAqLworCTB4MDAwMCwgICAgIC8qIFI3NCAgLSBEQyBTZXJ2byA3ICovCisJMHgwMDAwLCAgICAgLyogUjc1ICAtIERDIFNlcnZvIDggKi8KKwkweDAwMDAsICAgICAvKiBSNzYgIC0gREMgU2Vydm8gOSAqLworCTB4MDAwMCwgICAgIC8qIFI3NyAgLSBEQyBTZXJ2byBSZWFkYmFjayAwICovCisJMHgwMDAwLCAgICAgLyogUjc4ICovCisJMHgwMDAwLCAgICAgLyogUjc5ICovCisJMHgwMDAwLCAgICAgLyogUjgwICovCisJMHgwMDAwLCAgICAgLyogUjgxICovCisJMHgwMDAwLCAgICAgLyogUjgyICovCisJMHgwMDAwLCAgICAgLyogUjgzICovCisJMHgwMDAwLCAgICAgLyogUjg0ICovCisJMHgwMDAwLCAgICAgLyogUjg1ICovCisJMHgwMDAwLCAgICAgLyogUjg2ICovCisJMHgwMDAwLCAgICAgLyogUjg3ICovCisJMHgwMDAwLCAgICAgLyogUjg4ICovCisJMHgwMDAwLCAgICAgLyogUjg5ICovCisJMHgwMDAwLCAgICAgLyogUjkwICAtIEFuYWxvZ3VlIEhQIDAgKi8KKwkweDAwMDAsICAgICAvKiBSOTEgKi8KKwkweDAwMDAsICAgICAvKiBSOTIgKi8KKwkweDAwMDAsICAgICAvKiBSOTMgKi8KKwkweDAwMDAsICAgICAvKiBSOTQgIC0gQW5hbG9ndWUgTGluZW91dCAwICovCisJMHgwMDAwLCAgICAgLyogUjk1ICovCisJMHgwMDAwLCAgICAgLyogUjk2ICovCisJMHgwMDAwLCAgICAgLyogUjk3ICovCisJMHgwMDAwLCAgICAgLyogUjk4ICAtIENoYXJnZSBQdW1wIDAgKi8KKwkweDAwMDAsICAgICAvKiBSOTkgKi8KKwkweDAwMDAsICAgICAvKiBSMTAwICovCisJMHgwMDAwLCAgICAgLyogUjEwMSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDIgKi8KKwkweDAwMDAsICAgICAvKiBSMTAzICovCisJMHgwMDA0LCAgICAgLyogUjEwNCAtIENsYXNzIFcgMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMDUgKi8KKwkweDAwMDAsICAgICAvKiBSMTA2ICovCisJMHgwMDAwLCAgICAgLyogUjEwNyAqLworCTB4MDAwMCwgICAgIC8qIFIxMDggLSBXcml0ZSBTZXF1ZW5jZXIgMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMDkgLSBXcml0ZSBTZXF1ZW5jZXIgMSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTAgLSBXcml0ZSBTZXF1ZW5jZXIgMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMTEgLSBXcml0ZSBTZXF1ZW5jZXIgMyAqLworCTB4MDAwMCwgICAgIC8qIFIxMTIgLSBXcml0ZSBTZXF1ZW5jZXIgNCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTMgKi8KKwkweDAwMDAsICAgICAvKiBSMTE0ICovCisJMHgwMDAwLCAgICAgLyogUjExNSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTYgLSBGTEwgQ29udHJvbCAxICovCisJMHgwMDA3LCAgICAgLyogUjExNyAtIEZMTCBDb250cm9sIDIgKi8KKwkweDAwMDAsICAgICAvKiBSMTE4IC0gRkxMIENvbnRyb2wgMyAqLworCTB4MkVFMCwgICAgIC8qIFIxMTkgLSBGTEwgQ29udHJvbCA0ICovCisJMHgwMDA0LCAgICAgLyogUjEyMCAtIEZMTCBDb250cm9sIDUgKi8KKwkweDAwMTQsICAgICAvKiBSMTIxIC0gR1BJTyBDb250cm9sIDEgKi8KKwkweDAwMTAsICAgICAvKiBSMTIyIC0gR1BJTyBDb250cm9sIDIgKi8KKwkweDAwMTAsICAgICAvKiBSMTIzIC0gR1BJTyBDb250cm9sIDMgKi8KKwkweDAwMDAsICAgICAvKiBSMTI0IC0gR1BJTyBDb250cm9sIDQgKi8KKwkweDAwMDAsICAgICAvKiBSMTI1ICovCisJMHgwMDAwLCAgICAgLyogUjEyNiAtIERpZ2l0YWwgUHVsbHMgKi8KKwkweDAwMDAsICAgICAvKiBSMTI3IC0gSW50ZXJydXB0IFN0YXR1cyAqLworCTB4RkZGRiwgICAgIC8qIFIxMjggLSBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMTI5IC0gSW50ZXJydXB0IFBvbGFyaXR5ICovCisJMHgwMDAwLCAgICAgLyogUjEzMCAtIEludGVycnVwdCBEZWJvdW5jZSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzEgKi8KKwkweDAwMDAsICAgICAvKiBSMTMyICovCisJMHgwMDAwLCAgICAgLyogUjEzMyAqLworCTB4MDAwMCwgICAgIC8qIFIxMzQgLSBFUTEgKi8KKwkweDAwMEMsICAgICAvKiBSMTM1IC0gRVEyICovCisJMHgwMDBDLCAgICAgLyogUjEzNiAtIEVRMyAqLworCTB4MDAwQywgICAgIC8qIFIxMzcgLSBFUTQgKi8KKwkweDAwMEMsICAgICAvKiBSMTM4IC0gRVE1ICovCisJMHgwMDBDLCAgICAgLyogUjEzOSAtIEVRNiAqLworCTB4MEZDQSwgICAgIC8qIFIxNDAgLSBFUTcgKi8KKwkweDA0MDAsICAgICAvKiBSMTQxIC0gRVE4ICovCisJMHgwMEQ4LCAgICAgLyogUjE0MiAtIEVROSAqLworCTB4MUVCNSwgICAgIC8qIFIxNDMgLSBFUTEwICovCisJMHhGMTQ1LCAgICAgLyogUjE0NCAtIEVRMTEgKi8KKwkweDBCNzUsICAgICAvKiBSMTQ1IC0gRVExMiAqLworCTB4MDFDNSwgICAgIC8qIFIxNDYgLSBFUTEzICovCisJMHgxQzU4LCAgICAgLyogUjE0NyAtIEVRMTQgKi8KKwkweEYzNzMsICAgICAvKiBSMTQ4IC0gRVExNSAqLworCTB4MEE1NCwgICAgIC8qIFIxNDkgLSBFUTE2ICovCisJMHgwNTU4LCAgICAgLyogUjE1MCAtIEVRMTcgKi8KKwkweDE2OEUsICAgICAvKiBSMTUxIC0gRVExOCAqLworCTB4RjgyOSwgICAgIC8qIFIxNTIgLSBFUTE5ICovCisJMHgwN0FELCAgICAgLyogUjE1MyAtIEVRMjAgKi8KKwkweDExMDMsICAgICAvKiBSMTU0IC0gRVEyMSAqLworCTB4MDU2NCwgICAgIC8qIFIxNTUgLSBFUTIyICovCisJMHgwNTU5LCAgICAgLyogUjE1NiAtIEVRMjMgKi8KKwkweDQwMDAsICAgICAvKiBSMTU3IC0gRVEyNCAqLworCTB4MDAwMCwgICAgIC8qIFIxNTggKi8KKwkweDAwMDAsICAgICAvKiBSMTU5ICovCisJMHgwMDAwLCAgICAgLyogUjE2MCAqLworCTB4MDAwMCwgICAgIC8qIFIxNjEgLSBDb250cm9sIEludGVyZmFjZSBUZXN0IDEgKi8KKwkweDAwMDAsICAgICAvKiBSMTYyICovCisJMHgwMDAwLCAgICAgLyogUjE2MyAqLworCTB4MDAwMCwgICAgIC8qIFIxNjQgKi8KKwkweDAwMDAsICAgICAvKiBSMTY1ICovCisJMHgwMDAwLCAgICAgLyogUjE2NiAqLworCTB4MDAwMCwgICAgIC8qIFIxNjcgKi8KKwkweDAwMDAsICAgICAvKiBSMTY4ICovCisJMHgwMDAwLCAgICAgLyogUjE2OSAqLworCTB4MDAwMCwgICAgIC8qIFIxNzAgKi8KKwkweDAwMDAsICAgICAvKiBSMTcxICovCisJMHgwMDAwLCAgICAgLyogUjE3MiAqLworCTB4MDAwMCwgICAgIC8qIFIxNzMgKi8KKwkweDAwMDAsICAgICAvKiBSMTc0ICovCisJMHgwMDAwLCAgICAgLyogUjE3NSAqLworCTB4MDAwMCwgICAgIC8qIFIxNzYgKi8KKwkweDAwMDAsICAgICAvKiBSMTc3ICovCisJMHgwMDAwLCAgICAgLyogUjE3OCAqLworCTB4MDAwMCwgICAgIC8qIFIxNzkgKi8KKwkweDAwMDAsICAgICAvKiBSMTgwICovCisJMHgwMDAwLCAgICAgLyogUjE4MSAqLworCTB4MDAwMCwgICAgIC8qIFIxODIgKi8KKwkweDAwMDAsICAgICAvKiBSMTgzICovCisJMHgwMDAwLCAgICAgLyogUjE4NCAqLworCTB4MDAwMCwgICAgIC8qIFIxODUgKi8KKwkweDAwMDAsICAgICAvKiBSMTg2ICovCisJMHgwMDAwLCAgICAgLyogUjE4NyAqLworCTB4MDAwMCwgICAgIC8qIFIxODggKi8KKwkweDAwMDAsICAgICAvKiBSMTg5ICovCisJMHgwMDAwLCAgICAgLyogUjE5MCAqLworCTB4MDAwMCwgICAgIC8qIFIxOTEgKi8KKwkweDAwMDAsICAgICAvKiBSMTkyICovCisJMHgwMDAwLCAgICAgLyogUjE5MyAqLworCTB4MDAwMCwgICAgIC8qIFIxOTQgKi8KKwkweDAwMDAsICAgICAvKiBSMTk1ICovCisJMHgwMDAwLCAgICAgLyogUjE5NiAqLworCTB4MDAwMCwgICAgIC8qIFIxOTcgKi8KKwkweDAwMDAsICAgICAvKiBSMTk4ICovCisJMHgwMDAwLCAgICAgLyogUjE5OSAqLworCTB4MDAwMCwgICAgIC8qIFIyMDAgKi8KKwkweDAwMDAsICAgICAvKiBSMjAxICovCisJMHgwMDAwLCAgICAgLyogUjIwMiAqLworCTB4MDAwMCwgICAgIC8qIFIyMDMgKi8KKwkweDAwMDAsICAgICAvKiBSMjA0IC0gQW5hbG9ndWUgT3V0cHV0IEJpYXMgMCAqLworCTB4MDAwMCwgICAgIC8qIFIyMDUgKi8KKwkweDAwMDAsICAgICAvKiBSMjA2ICovCisJMHgwMDAwLCAgICAgLyogUjIwNyAqLworCTB4MDAwMCwgICAgIC8qIFIyMDggKi8KKwkweDAwMDAsICAgICAvKiBSMjA5ICovCisJMHgwMDAwLCAgICAgLyogUjIxMCAqLworCTB4MDAwMCwgICAgIC8qIFIyMTEgKi8KKwkweDAwMDAsICAgICAvKiBSMjEyICovCisJMHgwMDAwLCAgICAgLyogUjIxMyAqLworCTB4MDAwMCwgICAgIC8qIFIyMTQgKi8KKwkweDAwMDAsICAgICAvKiBSMjE1ICovCisJMHgwMDAwLCAgICAgLyogUjIxNiAqLworCTB4MDAwMCwgICAgIC8qIFIyMTcgKi8KKwkweDAwMDAsICAgICAvKiBSMjE4ICovCisJMHgwMDAwLCAgICAgLyogUjIxOSAqLworCTB4MDAwMCwgICAgIC8qIFIyMjAgKi8KKwkweDAwMDAsICAgICAvKiBSMjIxICovCisJMHgwMDAwLCAgICAgLyogUjIyMiAqLworCTB4MDAwMCwgICAgIC8qIFIyMjMgKi8KKwkweDAwMDAsICAgICAvKiBSMjI0ICovCisJMHgwMDAwLCAgICAgLyogUjIyNSAqLworCTB4MDAwMCwgICAgIC8qIFIyMjYgKi8KKwkweDAwMDAsICAgICAvKiBSMjI3ICovCisJMHgwMDAwLCAgICAgLyogUjIyOCAqLworCTB4MDAwMCwgICAgIC8qIFIyMjkgKi8KKwkweDAwMDAsICAgICAvKiBSMjMwICovCisJMHgwMDAwLCAgICAgLyogUjIzMSAqLworCTB4MDAwMCwgICAgIC8qIFIyMzIgKi8KKwkweDAwMDAsICAgICAvKiBSMjMzICovCisJMHgwMDAwLCAgICAgLyogUjIzNCAqLworCTB4MDAwMCwgICAgIC8qIFIyMzUgKi8KKwkweDAwMDAsICAgICAvKiBSMjM2ICovCisJMHgwMDAwLCAgICAgLyogUjIzNyAqLworCTB4MDAwMCwgICAgIC8qIFIyMzggKi8KKwkweDAwMDAsICAgICAvKiBSMjM5ICovCisJMHgwMDAwLCAgICAgLyogUjI0MCAqLworCTB4MDAwMCwgICAgIC8qIFIyNDEgKi8KKwkweDAwMDAsICAgICAvKiBSMjQyICovCisJMHgwMDAwLCAgICAgLyogUjI0MyAqLworCTB4MDAwMCwgICAgIC8qIFIyNDQgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ1ICovCisJMHgwMDAwLCAgICAgLyogUjI0NiAqLworCTB4MDAwMCwgICAgIC8qIFIyNDcgLSBGTEwgTkNPIFRlc3QgMCAqLworCTB4MDAxOSwgICAgIC8qIFIyNDggLSBGTEwgTkNPIFRlc3QgMSAqLworfTsKKworc3RhdGljIHN0cnVjdCB7CisJaW50IHJlYWRhYmxlOworCWludCB3cml0YWJsZTsKKwlpbnQgdm9sOworfSB3bTg5MDRfYWNjZXNzW10gPSB7CisJeyAweEZGRkYsIDB4RkZGRiwgMSB9LCAvKiBSMCAgIC0gU1cgUmVzZXQgYW5kIElEICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMSAgIC0gUmV2aXNpb24gKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMyAqLworCXsgMHgwMDFGLCAweDAwMUYsIDAgfSwgLyogUjQgICAtIEJpYXMgQ29udHJvbCAwICovCisJeyAweDAwNDcsIDB4MDA0NywgMCB9LCAvKiBSNSAgIC0gVk1JRCBDb250cm9sIDAgKi8KKwl7IDB4MDA3RiwgMHgwMDdGLCAwIH0sIC8qIFI2ICAgLSBNaWMgQmlhcyBDb250cm9sIDAgKi8KKwl7IDB4QzAwNywgMHhDMDA3LCAwIH0sIC8qIFI3ICAgLSBNaWMgQmlhcyBDb250cm9sIDEgKi8KKwl7IDB4MDAxRSwgMHgwMDFFLCAwIH0sIC8qIFI4ICAgLSBBbmFsb2d1ZSBEQUMgMCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjkgICAtIG1pYyBGaWx0ZXIgQ29udHJvbCAqLworCXsgMHgwMDAxLCAweDAwMDEsIDAgfSwgLyogUjEwICAtIEFuYWxvZ3VlIEFEQyAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTEgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAwIH0sIC8qIFIxMiAgLSBQb3dlciBNYW5hZ2VtZW50IDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMyAqLworCXsgMHgwMDAzLCAweDAwMDMsIDAgfSwgLyogUjE0ICAtIFBvd2VyIE1hbmFnZW1lbnQgMiAqLworCXsgMHgwMDAzLCAweDAwMDMsIDAgfSwgLyogUjE1ICAtIFBvd2VyIE1hbmFnZW1lbnQgMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTcgKi8KKwl7IDB4MDAwRiwgMHgwMDBGLCAwIH0sIC8qIFIxOCAgLSBQb3dlciBNYW5hZ2VtZW50IDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxOSAqLworCXsgMHg3MDAxLCAweDcwMDEsIDAgfSwgLyogUjIwICAtIENsb2NrIFJhdGVzIDAgKi8KKwl7IDB4M0MwNywgMHgzQzA3LCAwIH0sIC8qIFIyMSAgLSBDbG9jayBSYXRlcyAxICovCisJeyAweEQwMEYsIDB4RDAwRiwgMCB9LCAvKiBSMjIgIC0gQ2xvY2sgUmF0ZXMgMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIzICovCisJeyAweDFGRkYsIDB4MUZGRiwgMCB9LCAvKiBSMjQgIC0gQXVkaW8gSW50ZXJmYWNlIDAgKi8KKwl7IDB4M0RERiwgMHgzRERGLCAwIH0sIC8qIFIyNSAgLSBBdWRpbyBJbnRlcmZhY2UgMSAqLworCXsgMHgwRjFGLCAweDBGMUYsIDAgfSwgLyogUjI2ICAtIEF1ZGlvIEludGVyZmFjZSAyICovCisJeyAweDBGRkYsIDB4MEZGRiwgMCB9LCAvKiBSMjcgIC0gQXVkaW8gSW50ZXJmYWNlIDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjI5ICovCisJeyAweDAwRkYsIDB4MDFGRiwgMCB9LCAvKiBSMzAgIC0gREFDIERpZ2l0YWwgVm9sdW1lIExlZnQgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAwIH0sIC8qIFIzMSAgLSBEQUMgRGlnaXRhbCBWb2x1bWUgUmlnaHQgKi8KKwl7IDB4MEZGRiwgMHgwRkZGLCAwIH0sIC8qIFIzMiAgLSBEQUMgRGlnaXRhbCAwICovCisJeyAweDFFNEUsIDB4MUU0RSwgMCB9LCAvKiBSMzMgIC0gREFDIERpZ2l0YWwgMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMzUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAwIH0sIC8qIFIzNiAgLSBBREMgRGlnaXRhbCBWb2x1bWUgTGVmdCAqLworCXsgMHgwMEZGLCAweDAxRkYsIDAgfSwgLyogUjM3ICAtIEFEQyBEaWdpdGFsIFZvbHVtZSBSaWdodCAqLworCXsgMHgwMDczLCAweDAwNzMsIDAgfSwgLyogUjM4ICAtIEFEQyBEaWdpdGFsIDAgKi8KKwl7IDB4MTgwMCwgMHgxODAwLCAwIH0sIC8qIFIzOSAgLSBEaWdpdGFsIE1pY3JvcGhvbmUgMCAqLworCXsgMHhERkVGLCAweERGRUYsIDAgfSwgLyogUjQwICAtIERSQyAwICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSNDEgIC0gRFJDIDEgKi8KKwl7IDB4MDAzRiwgMHgwMDNGLCAwIH0sIC8qIFI0MiAgLSBEUkMgMiAqLworCXsgMHgwN0ZGLCAweDA3RkYsIDAgfSwgLyogUjQzICAtIERSQyAzICovCisJeyAweDAwOUYsIDB4MDA5RiwgMCB9LCAvKiBSNDQgIC0gQW5hbG9ndWUgTGVmdCBJbnB1dCAwICovCisJeyAweDAwOUYsIDB4MDA5RiwgMCB9LCAvKiBSNDUgIC0gQW5hbG9ndWUgUmlnaHQgSW5wdXQgMCAqLworCXsgMHgwMDdGLCAweDAwN0YsIDAgfSwgLyogUjQ2ICAtIEFuYWxvZ3VlIExlZnQgSW5wdXQgMSAqLworCXsgMHgwMDdGLCAweDAwN0YsIDAgfSwgLyogUjQ3ICAtIEFuYWxvZ3VlIFJpZ2h0IElucHV0IDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjUyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjU1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNTYgKi8KKwl7IDB4MDE3RiwgMHgwMUZGLCAwIH0sIC8qIFI1NyAgLSBBbmFsb2d1ZSBPVVQxIExlZnQgKi8KKwl7IDB4MDE3RiwgMHgwMUZGLCAwIH0sIC8qIFI1OCAgLSBBbmFsb2d1ZSBPVVQxIFJpZ2h0ICovCisJeyAweDAxN0YsIDB4MDFGRiwgMCB9LCAvKiBSNTkgIC0gQW5hbG9ndWUgT1VUMiBMZWZ0ICovCisJeyAweDAxN0YsIDB4MDFGRiwgMCB9LCAvKiBSNjAgIC0gQW5hbG9ndWUgT1VUMiBSaWdodCAqLworCXsgMHgwMDBGLCAweDAwMEYsIDAgfSwgLyogUjYxICAtIEFuYWxvZ3VlIE9VVDEyIFpDICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI2NiAqLworCXsgMHgwMDBGLCAweDAwMEYsIDAgfSwgLyogUjY3ICAtIERDIFNlcnZvIDAgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAxIH0sIC8qIFI2OCAgLSBEQyBTZXJ2byAxICovCisJeyAweDBGMEYsIDB4MEYwRiwgMCB9LCAvKiBSNjkgIC0gREMgU2Vydm8gMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjcwICovCisJeyAweDAwN0YsIDB4MDA3RiwgMCB9LCAvKiBSNzEgIC0gREMgU2Vydm8gNCAqLworCXsgMHgwMDdGLCAweDAwN0YsIDAgfSwgLyogUjcyICAtIERDIFNlcnZvIDUgKi8KKwl7IDB4MDBGRiwgMHgwMEZGLCAxIH0sIC8qIFI3MyAgLSBEQyBTZXJ2byA2ICovCisJeyAweDAwRkYsIDB4MDBGRiwgMSB9LCAvKiBSNzQgIC0gREMgU2Vydm8gNyAqLworCXsgMHgwMEZGLCAweDAwRkYsIDEgfSwgLyogUjc1ICAtIERDIFNlcnZvIDggKi8KKwl7IDB4MDBGRiwgMHgwMEZGLCAxIH0sIC8qIFI3NiAgLSBEQyBTZXJ2byA5ICovCisJeyAweDBGRkYsIDB4MDAwMCwgMSB9LCAvKiBSNzcgIC0gREMgU2Vydm8gUmVhZGJhY2sgMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSNzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjg3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI4OSAqLworCXsgMHgwMEZGLCAweDAwRkYsIDAgfSwgLyogUjkwICAtIEFuYWxvZ3VlIEhQIDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSOTMgKi8KKwl7IDB4MDBGRiwgMHgwMEZGLCAwIH0sIC8qIFI5NCAgLSBBbmFsb2d1ZSBMaW5lb3V0IDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFI5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjk2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSOTcgKi8KKwl7IDB4MDAwMSwgMHgwMDAxLCAwIH0sIC8qIFI5OCAgLSBDaGFyZ2UgUHVtcCAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSOTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMDMgKi8KKwl7IDB4MDAwMSwgMHgwMDAxLCAwIH0sIC8qIFIxMDQgLSBDbGFzcyBXIDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIxMDcgKi8KKwl7IDB4MDExRiwgMHgwMTFGLCAwIH0sIC8qIFIxMDggLSBXcml0ZSBTZXF1ZW5jZXIgMCAqLworCXsgMHg3RkZGLCAweDdGRkYsIDAgfSwgLyogUjEwOSAtIFdyaXRlIFNlcXVlbmNlciAxICovCisJeyAweDRGRkYsIDB4NEZGRiwgMCB9LCAvKiBSMTEwIC0gV3JpdGUgU2VxdWVuY2VyIDIgKi8KKwl7IDB4MDAzRiwgMHgwMzNGLCAwIH0sIC8qIFIxMTEgLSBXcml0ZSBTZXF1ZW5jZXIgMyAqLworCXsgMHgwM0YxLCAweDAwMDAsIDAgfSwgLyogUjExMiAtIFdyaXRlIFNlcXVlbmNlciA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTE1ICovCisJeyAweDAwMDcsIDB4MDAwNywgMCB9LCAvKiBSMTE2IC0gRkxMIENvbnRyb2wgMSAqLworCXsgMHgzRjc3LCAweDNGNzcsIDAgfSwgLyogUjExNyAtIEZMTCBDb250cm9sIDIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxMTggLSBGTEwgQ29udHJvbCAzICovCisJeyAweDdGRUYsIDB4N0ZFRiwgMCB9LCAvKiBSMTE5IC0gRkxMIENvbnRyb2wgNCAqLworCXsgMHgwMDFCLCAweDAwMUIsIDAgfSwgLyogUjEyMCAtIEZMTCBDb250cm9sIDUgKi8KKwl7IDB4MDAzRiwgMHgwMDNGLCAwIH0sIC8qIFIxMjEgLSBHUElPIENvbnRyb2wgMSAqLworCXsgMHgwMDNGLCAweDAwM0YsIDAgfSwgLyogUjEyMiAtIEdQSU8gQ29udHJvbCAyICovCisJeyAweDAwM0YsIDB4MDAzRiwgMCB9LCAvKiBSMTIzIC0gR1BJTyBDb250cm9sIDMgKi8KKwl7IDB4MDM4RiwgMHgwMzhGLCAwIH0sIC8qIFIxMjQgLSBHUElPIENvbnRyb2wgNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjEyNSAqLworCXsgMHgwMEZGLCAweDAwRkYsIDAgfSwgLyogUjEyNiAtIERpZ2l0YWwgUHVsbHMgKi8KKwl7IDB4MDdGRiwgMHgwM0ZGLCAxIH0sIC8qIFIxMjcgLSBJbnRlcnJ1cHQgU3RhdHVzICovCisJeyAweDAzRkYsIDB4MDNGRiwgMCB9LCAvKiBSMTI4IC0gSW50ZXJydXB0IFN0YXR1cyBNYXNrICovCisJeyAweDAzRkYsIDB4MDNGRiwgMCB9LCAvKiBSMTI5IC0gSW50ZXJydXB0IFBvbGFyaXR5ICovCisJeyAweDAzRkYsIDB4MDNGRiwgMCB9LCAvKiBSMTMwIC0gSW50ZXJydXB0IERlYm91bmNlICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMCB9LCAvKiBSMTMzICovCisJeyAweDAwMDEsIDB4MDAwMSwgMCB9LCAvKiBSMTM0IC0gRVExICovCisJeyAweDAwMUYsIDB4MDAxRiwgMCB9LCAvKiBSMTM1IC0gRVEyICovCisJeyAweDAwMUYsIDB4MDAxRiwgMCB9LCAvKiBSMTM2IC0gRVEzICovCisJeyAweDAwMUYsIDB4MDAxRiwgMCB9LCAvKiBSMTM3IC0gRVE0ICovCisJeyAweDAwMUYsIDB4MDAxRiwgMCB9LCAvKiBSMTM4IC0gRVE1ICovCisJeyAweDAwMUYsIDB4MDAxRiwgMCB9LCAvKiBSMTM5IC0gRVE2ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTQwIC0gRVE3ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTQxIC0gRVE4ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTQyIC0gRVE5ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTQzIC0gRVExMCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE0NCAtIEVRMTEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNDUgLSBFUTEyICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTQ2IC0gRVExMyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE0NyAtIEVRMTQgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNDggLSBFUTE1ICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTQ5IC0gRVExNiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE1MCAtIEVRMTcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNTF3bTg1MjNfZGFpIC0gRVExOCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE1MiAtIEVRMTkgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNTMgLSBFUTIwICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTU0IC0gRVEyMSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDAgfSwgLyogUjE1NSAtIEVRMjIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAwIH0sIC8qIFIxNTYgLSBFUTIzICovCisJeyAweEZGRkYsIDB4RkZGRiwgMCB9LCAvKiBSMTU3IC0gRVEyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE1OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2MCAqLworCXsgMHgwMDAyLCAweDAwMDIsIDAgfSwgLyogUjE2MSAtIENvbnRyb2wgSW50ZXJmYWNlIFRlc3QgMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE2OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjE5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDAgfSwgLyogUjIwMyAqLworCXsgMHgwMDcwLCAweDAwNzAsIDAgfSwgLyogUjIwNCAtIEFuYWxvZ3VlIE91dHB1dCBCaWFzIDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyMzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyNDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyNDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyNDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyNDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyNDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyNDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAwIH0sIC8qIFIyNDYgKi8KKwl7IDB4MDAwMSwgMHgwMDAxLCAwIH0sIC8qIFIyNDcgLSBGTEwgTkNPIFRlc3QgMCAqLworCXsgMHgwMDNGLCAweDAwM0YsIDAgfSwgLyogUjI0OCAtIEZMTCBOQ08gVGVzdCAxICovCit9OworCitzdGF0aWMgaW50IHdtODkwNF92b2xhdGlsZV9yZWdpc3Rlcih1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiB3bTg5MDRfYWNjZXNzW3JlZ10udm9sOworfQorCitzdGF0aWMgaW50IHdtODkwNF9yZXNldChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwNF9TV19SRVNFVF9BTkRfSUQsIDApOworfQorCitzdGF0aWMgaW50IHdtODkwNF9jb25maWd1cmVfY2xvY2tpbmcoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgY2xvY2swLCBjbG9jazIsIHJhdGU7CisKKwkvKiBHYXRlIHRoZSBjbG9jayB3aGlsZSB3ZSdyZSB1cGRhdGluZyB0byBhdm9pZCBtaXNjbG9ja2luZyAqLworCWNsb2NrMiA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTA0X0NMT0NLX1JBVEVTXzIpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9DTE9DS19SQVRFU18yLAorCQkJICAgIFdNODkwNF9TWVNDTEtfU1JDLCAwKTsKKworCS8qIFRoaXMgc2hvdWxkIGJlIGRvbmUgb24gaW5pdCgpIGZvciBieXBhc3MgcGF0aHMgKi8KKwlzd2l0Y2ggKHdtODkwNC0+c3lzY2xrX3NyYykgeworCWNhc2UgV004OTA0X0NMS19NQ0xLOgorCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJVc2luZyAlZEh6IE1DTEtcbiIsIHdtODkwNC0+bWNsa19yYXRlKTsKKworCQljbG9jazIgJj0gfldNODkwNF9TWVNDTEtfU1JDOworCQlyYXRlID0gd204OTA0LT5tY2xrX3JhdGU7CisKKwkJLyogRW5zdXJlIHRoZSBGTEwgaXMgc3RvcHBlZCAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfMSwKKwkJCQkgICAgV004OTA0X0ZMTF9PU0NfRU5BIHwgV004OTA0X0ZMTF9FTkEsIDApOworCQlicmVhazsKKworCWNhc2UgV004OTA0X0NMS19GTEw6CisJCWRldl9kYmcoY29kZWMtPmRldiwgIlVzaW5nICVkSHogRkxMIGNsb2NrXG4iLAorCQkJd204OTA0LT5mbGxfZm91dCk7CisKKwkJY2xvY2syIHw9IFdNODkwNF9TWVNDTEtfU1JDOworCQlyYXRlID0gd204OTA0LT5mbGxfZm91dDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJTeXN0ZW0gY2xvY2sgbm90IGNvbmZpZ3VyZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBTWVNDTEsgc2hvdWxkbid0IGJlIG92ZXIgMTMuNU1IeiAqLworCWlmIChyYXRlID4gMTM1MDAwMDApIHsKKwkJY2xvY2swID0gV004OTA0X01DTEtfRElWOworCQl3bTg5MDQtPnN5c2Nsa19yYXRlID0gcmF0ZSAvIDI7CisJfSBlbHNlIHsKKwkJY2xvY2swID0gMDsKKwkJd204OTA0LT5zeXNjbGtfcmF0ZSA9IHJhdGU7CisJfQorCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0NMT0NLX1JBVEVTXzAsIFdNODkwNF9NQ0xLX0RJViwKKwkJCSAgICBjbG9jazApOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0NMT0NLX1JBVEVTXzIsCisJCQkgICAgV004OTA0X0NMS19TWVNfRU5BIHwgV004OTA0X1NZU0NMS19TUkMsIGNsb2NrMik7CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJDTEtfU1lTIGlzICVkSHpcbiIsIHdtODkwNC0+c3lzY2xrX3JhdGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdtODkwNF9zZXRfZHJjKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHdtODkwNF9wZGF0YSAqcGRhdGEgPSB3bTg5MDQtPnBkYXRhOworCWludCBzYXZlLCBpOworCisJLyogU2F2ZSBhbnkgZW5hYmxlczsgdGhlIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGNsZWFyIHRoZW0uICovCisJc2F2ZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTA0X0RSQ18wKTsKKworCWZvciAoaSA9IDA7IGkgPCBXTTg5MDRfRFJDX1JFR1M7IGkrKykKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0RSQ18wICsgaSwgMHhmZmZmLAorCQkJCSAgICBwZGF0YS0+ZHJjX2NmZ3Nbd204OTA0LT5kcmNfY2ZnXS5yZWdzW2ldKTsKKworCS8qIFJlZW5hYmxlIHRoZSBEUkMgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRFJDXzAsCisJCQkgICAgV004OTA0X0RSQ19FTkEgfCBXTTg5MDRfRFJDX0RBQ19QQVRILCBzYXZlKTsKK30KKworc3RhdGljIGludCB3bTg5MDRfcHV0X2RyY19lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CQorCXN0cnVjdCB3bTg5MDRfcGRhdGEgKnBkYXRhID0gd204OTA0LT5wZGF0YTsKKwlpbnQgdmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCWlmICh2YWx1ZSA+PSBwZGF0YS0+bnVtX2RyY19jZmdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdtODkwNC0+ZHJjX2NmZyA9IHZhbHVlOworCisJd204OTA0X3NldF9kcmMoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X2dldF9kcmNfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHdtODkwNC0+ZHJjX2NmZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bTg5MDRfc2V0X3JldHVuZV9tb2JpbGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgd204OTA0X3BkYXRhICpwZGF0YSA9IHdtODkwNC0+cGRhdGE7CisJaW50IGJlc3QsIGJlc3RfdmFsLCBzYXZlLCBpLCBjZmc7CisKKwlpZiAoIXBkYXRhIHx8ICF3bTg5MDQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzKQorCQlyZXR1cm47CisKKwkvKiBGaW5kIHRoZSB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY29uZmlndXJhdGlvbgorCSAqIHdpdGggdGhlIG5lYXJlc3Qgc2FtcGxlIHJhdGUuICovCisJY2ZnID0gd204OTA0LT5yZXR1bmVfbW9iaWxlX2NmZzsKKwliZXN0ID0gMDsKKwliZXN0X3ZhbCA9IElOVF9NQVg7CisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fcmV0dW5lX21vYmlsZV9jZmdzOyBpKyspIHsKKwkJaWYgKHN0cmNtcChwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2ldLm5hbWUsCisJCQkgICB3bTg5MDQtPnJldHVuZV9tb2JpbGVfdGV4dHNbY2ZnXSkgPT0gMCAmJgorCQkgICAgYWJzKHBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ucmF0ZQorCQkJLSB3bTg5MDQtPmZzKSA8IGJlc3RfdmFsKSB7CisJCQliZXN0ID0gaTsKKwkJCWJlc3RfdmFsID0gYWJzKHBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ucmF0ZQorCQkJCSAgICAgICAtIHdtODkwNC0+ZnMpOworCQl9CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiUmVUdW5lIE1vYmlsZSAlcy8lZEh6IGZvciAlZEh6IHNhbXBsZSByYXRlXG4iLAorCQlwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2Jlc3RdLm5hbWUsCisJCXBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbYmVzdF0ucmF0ZSwKKwkJd204OTA0LT5mcyk7CisKKwkvKiBUaGUgRVEgd2lsbCBiZSBkaXNhYmxlZCB3aGlsZSByZWNvbmZpZ3VyaW5nIGl0LCByZW1lbWJlciB0aGUKKwkgKiBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIAorCSAqLworCXNhdmUgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwNF9FUTEpOworCisJZm9yIChpID0gMDsgaSA8IFdNODkwNF9FUV9SRUdTOyBpKyspCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9FUTEgKyBpLCAweGZmZmYsCisJCQkJcGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tiZXN0XS5yZWdzW2ldKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9FUTEsIFdNODkwNF9FUV9FTkEsIHNhdmUpOworfQorCitzdGF0aWMgaW50IHdtODkwNF9wdXRfcmV0dW5lX21vYmlsZV9lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsJCisJc3RydWN0IHdtODkwNF9wZGF0YSAqcGRhdGEgPSB3bTg5MDQtPnBkYXRhOworCWludCB2YWx1ZSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCisJaWYgKHZhbHVlID49IHBkYXRhLT5udW1fcmV0dW5lX21vYmlsZV9jZmdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdtODkwNC0+cmV0dW5lX21vYmlsZV9jZmcgPSB2YWx1ZTsKKworCXdtODkwNF9zZXRfcmV0dW5lX21vYmlsZShjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5MDRfZ2V0X3JldHVuZV9tb2JpbGVfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gd204OTA0LT5yZXR1bmVfbW9iaWxlX2NmZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlZW1waF9zZXR0aW5nc1tdID0geyAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwIH07CisKK3N0YXRpYyBpbnQgd204OTA0X3NldF9kZWVtcGgoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgdmFsLCBpLCBiZXN0OworCisJLyogSWYgd2UncmUgdXNpbmcgZGVlbXBoYXNpcyBzZWxlY3QgdGhlIG5lYXJlc3QgYXZhaWxhYmxlIHNhbXBsZSAKKwkgKiByYXRlLgorCSAqLworCWlmICh3bTg5MDQtPmRlZW1waCkgeworCQliZXN0ID0gMTsKKwkJZm9yIChpID0gMjsgaSA8IEFSUkFZX1NJWkUoZGVlbXBoX3NldHRpbmdzKTsgaSsrKSB7CisJCQlpZiAoYWJzKGRlZW1waF9zZXR0aW5nc1tpXSAtIHdtODkwNC0+ZnMpIDwKKwkJCSAgICBhYnMoZGVlbXBoX3NldHRpbmdzW2Jlc3RdIC0gd204OTA0LT5mcykpCisJCQkJYmVzdCA9IGk7CisJCX0KKworCQl2YWwgPSBiZXN0IDw8IFdNODkwNF9ERUVNUEhfU0hJRlQ7CisJfSBlbHNlIHsKKwkJdmFsID0gMDsKKwl9CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJTZXQgZGVlbXBoYXNpcyAlZFxuIiwgdmFsKTsKKworCXJldHVybiBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfREFDX0RJR0lUQUxfMSwKKwkJCQkgICBXTTg5MDRfREVFTVBIX01BU0ssIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X2dldF9kZWVtcGgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gd204OTA0LT5kZWVtcGg7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X3B1dF9kZWVtcGgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBkZWVtcGggPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCisJaWYgKGRlZW1waCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJd204OTA0LT5kZWVtcGggPSBkZWVtcGg7CisKKwlyZXR1cm4gd204OTA0X3NldF9kZWVtcGgoY29kZWMpOworfQorCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZGFjX2Jvb3N0X3RsdiwgMCwgNjAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkaWdpdGFsX3RsdiwgLTcyMDAsIDc1LCAxKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShvdXRfdGx2LCAtNTcwMCwgMTAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShzaWRldG9uZV90bHYsIC0zNjAwLCAzMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGVxX3RsdiwgLTEyMDAsIDEwMCwgMCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICppbnB1dF9tb2RlX3RleHRbXSA9IHsKKwkiU2luZ2xlLUVuZGVkIiwgIkRpZmZlcmVudGlhbCBMaW5lIiwgIkRpZmZlcmVudGlhbCBNaWMiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGxpbl9tb2RlID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0FOQUxPR1VFX0xFRlRfSU5QVVRfMSwgMCwgMywgaW5wdXRfbW9kZV90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSByaW5fbW9kZSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BTkFMT0dVRV9SSUdIVF9JTlBVVF8xLCAwLCAzLCBpbnB1dF9tb2RlX3RleHQpOworCitzdGF0aWMgY29uc3QgY2hhciAqaHBmX21vZGVfdGV4dFtdID0geworCSJIaS1maSIsICJWb2ljZSAxIiwgIlZvaWNlIDIiLCAiVm9pY2UgMyIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gaHBmX21vZGUgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQURDX0RJR0lUQUxfMCwgNSwgNCwgaHBmX21vZGVfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5MDRfYWRjX3NuZF9jb250cm9sc1tdID0geworU09DX0RPVUJMRV9SX1RMVigiRGlnaXRhbCBDYXB0dXJlIFZvbHVtZSIsIFdNODkwNF9BRENfRElHSVRBTF9WT0xVTUVfTEVGVCwKKwkJIFdNODkwNF9BRENfRElHSVRBTF9WT0xVTUVfUklHSFQsIDEsIDExOSwgMCwgZGlnaXRhbF90bHYpLAorCitTT0NfRU5VTSgiTGVmdCBDYXB1dHVyZSBNb2RlIiwgbGluX21vZGUpLAorU09DX0VOVU0oIlJpZ2h0IENhcHR1cmUgTW9kZSIsIHJpbl9tb2RlKSwKKworLyogTm8gVExWIHNpbmNlIGl0IGRlcGVuZHMgb24gbW9kZSAqLworU09DX0RPVUJMRV9SKCJDYXB0dXJlIFZvbHVtZSIsIFdNODkwNF9BTkFMT0dVRV9MRUZUX0lOUFVUXzAsCisJICAgICBXTTg5MDRfQU5BTE9HVUVfUklHSFRfSU5QVVRfMCwgMCwgMzEsIDApLAorU09DX0RPVUJMRV9SKCJDYXB0dXJlIFN3aXRjaCIsIFdNODkwNF9BTkFMT0dVRV9MRUZUX0lOUFVUXzAsCisJICAgICBXTTg5MDRfQU5BTE9HVUVfUklHSFRfSU5QVVRfMCwgNywgMSwgMCksCisKK1NPQ19TSU5HTEUoIkhpZ2ggUGFzcyBGaWx0ZXIgU3dpdGNoIiwgV004OTA0X0FEQ19ESUdJVEFMXzAsIDQsIDEsIDApLAorU09DX0VOVU0oIkhpZ2ggUGFzcyBGaWx0ZXIgTW9kZSIsIGhwZl9tb2RlKSwKKworU09DX1NJTkdMRSgiQURDIDEyOHggT1NSIFN3aXRjaCIsIFdNODkwNF9BTkFMT0dVRV9BRENfMCwgMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqZHJjX3BhdGhfdGV4dFtdID0geworCSJBREMiLCAiREFDIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBkcmNfcGF0aCA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9EUkNfMCwgMTQsIDIsIGRyY19wYXRoX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTA0X2RhY19zbmRfY29udHJvbHNbXSA9IHsKK1NPQ19TSU5HTEVfVExWKCJEaWdpdGFsIFBsYXliYWNrIEJvb3N0IFZvbHVtZSIsIAorCSAgICAgICBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzAsIDksIDMsIDAsIGRhY19ib29zdF90bHYpLAorU09DX0RPVUJMRV9SX1RMVigiRGlnaXRhbCBQbGF5YmFjayBWb2x1bWUiLCBXTTg5MDRfREFDX0RJR0lUQUxfVk9MVU1FX0xFRlQsCisJCSBXTTg5MDRfREFDX0RJR0lUQUxfVk9MVU1FX1JJR0hULCAxLCA5NiwgMCwgZGlnaXRhbF90bHYpLAorCitTT0NfRE9VQkxFX1JfVExWKCJIZWFkcGhvbmUgVm9sdW1lIiwgV004OTA0X0FOQUxPR1VFX09VVDFfTEVGVCwKKwkJIFdNODkwNF9BTkFMT0dVRV9PVVQxX1JJR0hULCAwLCA2MywgMCwgb3V0X3RsdiksCitTT0NfRE9VQkxFX1IoIkhlYWRwaG9uZSBTd2l0Y2giLCBXTTg5MDRfQU5BTE9HVUVfT1VUMV9MRUZULAorCSAgICAgV004OTA0X0FOQUxPR1VFX09VVDFfUklHSFQsIDgsIDEsIDEpLAorU09DX0RPVUJMRV9SKCJIZWFkcGhvbmUgWkMgU3dpdGNoIiwgV004OTA0X0FOQUxPR1VFX09VVDFfTEVGVCwKKwkgICAgIFdNODkwNF9BTkFMT0dVRV9PVVQxX1JJR0hULCA2LCAxLCAwKSwKKworU09DX0RPVUJMRV9SX1RMVigiTGluZSBPdXRwdXQgVm9sdW1lIiwgV004OTA0X0FOQUxPR1VFX09VVDJfTEVGVCwKKwkJIFdNODkwNF9BTkFMT0dVRV9PVVQyX1JJR0hULCAwLCA2MywgMCwgb3V0X3RsdiksCitTT0NfRE9VQkxFX1IoIkxpbmUgT3V0cHV0IFN3aXRjaCIsIFdNODkwNF9BTkFMT0dVRV9PVVQyX0xFRlQsCisJICAgICBXTTg5MDRfQU5BTE9HVUVfT1VUMl9SSUdIVCwgOCwgMSwgMSksCitTT0NfRE9VQkxFX1IoIkxpbmUgT3V0cHV0IFpDIFN3aXRjaCIsIFdNODkwNF9BTkFMT0dVRV9PVVQyX0xFRlQsCisJICAgICBXTTg5MDRfQU5BTE9HVUVfT1VUMl9SSUdIVCwgNiwgMSwgMCksCisKK1NPQ19TSU5HTEUoIkVRIFN3aXRjaCIsIFdNODkwNF9FUTEsIDAsIDEsIDApLAorU09DX1NJTkdMRSgiRFJDIFN3aXRjaCIsIFdNODkwNF9EUkNfMCwgMTUsIDEsIDApLAorU09DX0VOVU0oIkRSQyBQYXRoIiwgZHJjX3BhdGgpLAorU09DX1NJTkdMRSgiREFDIE9TUngyIFN3aXRjaCIsIFdNODkwNF9EQUNfRElHSVRBTF8xLCA2LCAxLCAwKSwKK1NPQ19TSU5HTEVfQk9PTF9FWFQoIkRBQyBEZWVtcGhhc2lzIFN3aXRjaCIsIDAsCisJCSAgICB3bTg5MDRfZ2V0X2RlZW1waCwgd204OTA0X3B1dF9kZWVtcGgpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODkwNF9zbmRfY29udHJvbHNbXSA9IHsKK1NPQ19ET1VCTEVfVExWKCJEaWdpdGFsIFNpZGV0b25lIFZvbHVtZSIsIFdNODkwNF9EQUNfRElHSVRBTF8wLCA0LCA4LCAxNSwgMCwKKwkgICAgICAgc2lkZXRvbmVfdGx2KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5MDRfZXFfY29udHJvbHNbXSA9IHsKK1NPQ19TSU5HTEVfVExWKCJFUTEgVm9sdW1lIiwgV004OTA0X0VRMiwgMCwgMjQsIDAsIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiRVEyIFZvbHVtZSIsIFdNODkwNF9FUTMsIDAsIDI0LCAwLCBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkVRMyBWb2x1bWUiLCBXTTg5MDRfRVE0LCAwLCAyNCwgMCwgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJFUTQgVm9sdW1lIiwgV004OTA0X0VRNSwgMCwgMjQsIDAsIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiRVE1IFZvbHVtZSIsIFdNODkwNF9FUTYsIDAsIDI0LCAwLCBlcV90bHYpLAorfTsKKworc3RhdGljIGludCBjcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJQlVHX09OKGV2ZW50ICE9IFNORF9TT0NfREFQTV9QT1NUX1BNVSk7CisKKwkvKiBNYXhpbXVtIHN0YXJ0dXAgdGltZSAqLworCXVkZWxheSg1MDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3lzY2xrX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CisJCS8qIElmIHdlJ3JlIHVzaW5nIHRoZSBGTEwgdGhlbiB3ZSBvbmx5IHN0YXJ0IGl0IHdoZW4KKwkJICogcmVxdWlyZWQ7IHdlIGFzc3VtZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGhhcyBiZWVuCisJCSAqIGRvbmUgcHJldmlvdXNseSBhbmQgYWxsIHdlIG5lZWQgdG8gZG8gaXMga2ljayBpdAorCQkgKiBvZmYuCisJCSAqLworCQlzd2l0Y2ggKHdtODkwNC0+c3lzY2xrX3NyYykgeworCQljYXNlIFdNODkwNF9DTEtfRkxMOgorCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzEsCisJCQkJCSAgICBXTTg5MDRfRkxMX09TQ19FTkEsCisJCQkJCSAgICBXTTg5MDRfRkxMX09TQ19FTkEpOworCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfMSwKKwkJCQkJICAgIFdNODkwNF9GTExfRU5BLAorCQkJCQkgICAgV004OTA0X0ZMTF9FTkEpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF8xLAorCQkJCSAgICBXTTg5MDRfRkxMX09TQ19FTkEgfCBXTTg5MDRfRkxMX0VOQSwgMCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG91dF9wZ2FfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJlZywgdmFsOworCWludCBkY3NfbWFzazsKKwlpbnQgZGNzX2wsIGRjc19yOworCWludCBkY3NfbF9yZWcsIGRjc19yX3JlZzsKKwlpbnQgdGltZW91dDsKKwlpbnQgcHdyX3JlZzsKKworCS8qIFRoaXMgY29kZSBpcyBzaGFyZWQgYmV0d2VlbiBIUCBhbmQgTElORU9VVDsgd2UgZG8gYWxsIG91cgorCSAqIHBvd2VyIG1hbmFnZW1lbnQgaW4gc3RlcmVvIHBhaXJzIHRvIGF2b2lkIGxhdGVuY3kgaXNzdWVzIHNvCisJICogd2UgcmV1c2Ugc2hpZnQgdG8gaWRlbnRpZnkgd2hpY2ggcmF0aGVyIHRoYW4gc3RyY21wKCkgdGhlCisJICogbmFtZS4gKi8KKwlyZWcgPSB3LT5zaGlmdDsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBXTTg5MDRfQU5BTE9HVUVfSFBfMDoKKwkJcHdyX3JlZyA9IFdNODkwNF9QT1dFUl9NQU5BR0VNRU5UXzI7CisJCWRjc19tYXNrID0gV004OTA0X0RDU19FTkFfQ0hBTl8wIHwgV004OTA0X0RDU19FTkFfQ0hBTl8xOworCQlkY3Nfcl9yZWcgPSBXTTg5MDRfRENfU0VSVk9fODsKKwkJZGNzX2xfcmVnID0gV004OTA0X0RDX1NFUlZPXzk7CisJCWRjc19sID0gMDsKKwkJZGNzX3IgPSAxOworCQlicmVhazsKKwljYXNlIFdNODkwNF9BTkFMT0dVRV9MSU5FT1VUXzA6CisJCXB3cl9yZWcgPSBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF8zOworCQlkY3NfbWFzayA9IFdNODkwNF9EQ1NfRU5BX0NIQU5fMiB8IFdNODkwNF9EQ1NfRU5BX0NIQU5fMzsKKwkJZGNzX3JfcmVnID0gV004OTA0X0RDX1NFUlZPXzY7CisJCWRjc19sX3JlZyA9IFdNODkwNF9EQ19TRVJWT183OworCQlkY3NfbCA9IDI7CisJCWRjc19yID0gMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgorCQkvKiBQb3dlciBvbiB0aGUgUEdBcyAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBwd3JfcmVnLAorCQkJCSAgICBXTTg5MDRfSFBMX1BHQV9FTkEgfCBXTTg5MDRfSFBSX1BHQV9FTkEsCisJCQkJICAgIFdNODkwNF9IUExfUEdBX0VOQSB8IFdNODkwNF9IUFJfUEdBX0VOQSk7CisKKwkJLyogUG93ZXIgb24gdGhlIGFtcGxpZmllciAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsCisJCQkJICAgIFdNODkwNF9IUExfRU5BIHwgV004OTA0X0hQUl9FTkEsCisJCQkJICAgIFdNODkwNF9IUExfRU5BIHwgV004OTA0X0hQUl9FTkEpOworCisKKwkJLyogRW5hYmxlIHRoZSBmaXJzdCBzdGFnZSAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsCisJCQkJICAgIFdNODkwNF9IUExfRU5BX0RMWSB8IFdNODkwNF9IUFJfRU5BX0RMWSwKKwkJCQkgICAgV004OTA0X0hQTF9FTkFfRExZIHwgV004OTA0X0hQUl9FTkFfRExZKTsKKworCQkvKiBQb3dlciB1cCB0aGUgREMgc2Vydm8gKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0RDX1NFUlZPXzAsCisJCQkJICAgIGRjc19tYXNrLCBkY3NfbWFzayk7CisKKwkJLyogRWl0aGVyIGNhbGlicmF0ZSB0aGUgREMgc2Vydm8gb3IgcmVzdG9yZSBjYWNoZWQgc3RhdGUKKwkJICogaWYgd2UgaGF2ZSB0aGF0LgorCQkgKi8KKwkJaWYgKHdtODkwNC0+ZGNzX3N0YXRlW2Rjc19sXSB8fCB3bTg5MDQtPmRjc19zdGF0ZVtkY3Nfcl0pIHsKKwkJCWRldl9kYmcoY29kZWMtPmRldiwgIlJlc3RvcmluZyBEQyBzZXJ2byBzdGF0ZVxuIik7CisKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIGRjc19sX3JlZywKKwkJCQkgICAgICB3bTg5MDQtPmRjc19zdGF0ZVtkY3NfbF0pOworCQkJc25kX3NvY193cml0ZShjb2RlYywgZGNzX3JfcmVnLAorCQkJCSAgICAgIHdtODkwNC0+ZGNzX3N0YXRlW2Rjc19yXSk7CisKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODkwNF9EQ19TRVJWT18xLCBkY3NfbWFzayk7CisKKwkJCXRpbWVvdXQgPSAyMDsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoY29kZWMtPmRldiwgIkNhbGlicmF0aW5nIERDIHNlcnZvXG4iKTsKKworCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTA0X0RDX1NFUlZPXzEsCisJCQkJZGNzX21hc2sgPDwgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMF9TSElGVCk7CisKKwkJCXRpbWVvdXQgPSA1MDA7CisJCX0KKworCQkvKiBXYWl0IGZvciBEQyBzZXJ2byB0byBjb21wbGV0ZSAqLworCQlkY3NfbWFzayA8PD0gV004OTA0X0RDU19DQUxfQ09NUExFVEVfU0hJRlQ7CisJCWRvIHsKKwkJCXZhbCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTA0X0RDX1NFUlZPX1JFQURCQUNLXzApOworCQkJaWYgKCh2YWwgJiBkY3NfbWFzaykgPT0gZGNzX21hc2spCisJCQkJYnJlYWs7CisKKwkJCW1zbGVlcCgxKTsKKwkJfSB3aGlsZSAoLS10aW1lb3V0KTsKKworCQlpZiAoKHZhbCAmIGRjc19tYXNrKSAhPSBkY3NfbWFzaykKKwkJCWRldl93YXJuKGNvZGVjLT5kZXYsICJEQyBzZXJ2byB0aW1lZCBvdXRcbiIpOworCQllbHNlCisJCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJEQyBzZXJ2byByZWFkeVxuIik7CisKKwkJLyogRW5hYmxlIHRoZSBvdXRwdXQgc3RhZ2UgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcmVnLAorCQkJCSAgICBXTTg5MDRfSFBMX0VOQV9PVVRQIHwgV004OTA0X0hQUl9FTkFfT1VUUCwKKwkJCQkgICAgV004OTA0X0hQTF9FTkFfT1VUUCB8IFdNODkwNF9IUFJfRU5BX09VVFApOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCQkvKiBVbnNob3J0IHRoZSBvdXRwdXQgaXRzZWxmICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJlZywKKwkJCQkgICAgV004OTA0X0hQTF9STVZfU0hPUlQgfAorCQkJCSAgICBXTTg5MDRfSFBSX1JNVl9TSE9SVCwKKwkJCQkgICAgV004OTA0X0hQTF9STVZfU0hPUlQgfAorCQkJCSAgICBXTTg5MDRfSFBSX1JNVl9TSE9SVCk7CisKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgorCQkvKiBTaG9ydCB0aGUgb3V0cHV0ICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJlZywKKwkJCQkgICAgV004OTA0X0hQTF9STVZfU0hPUlQgfAorCQkJCSAgICBXTTg5MDRfSFBSX1JNVl9TSE9SVCwgMCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CisJCS8qIENhY2hlIHRoZSBEQyBzZXJ2byBjb25maWd1cmF0aW9uOyB0aGlzIHdpbGwgYmUKKwkJICogaW52YWxpZGF0ZWQgaWYgd2UgY2hhbmdlIHRoZSBjb25maWd1cmF0aW9uLiAqLworCQl3bTg5MDQtPmRjc19zdGF0ZVtkY3NfbF0gPSBzbmRfc29jX3JlYWQoY29kZWMsIGRjc19sX3JlZyk7CisJCXdtODkwNC0+ZGNzX3N0YXRlW2Rjc19yXSA9IHNuZF9zb2NfcmVhZChjb2RlYywgZGNzX3JfcmVnKTsKKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRENfU0VSVk9fMCwKKwkJCQkgICAgZGNzX21hc2ssIDApOworCisJCS8qIERpc2FibGUgdGhlIGFtcGxpZmllciBpbnB1dCBhbmQgb3V0cHV0IHN0YWdlcyAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsCisJCQkJICAgIFdNODkwNF9IUExfRU5BIHwgV004OTA0X0hQUl9FTkEgfAorCQkJCSAgICBXTTg5MDRfSFBMX0VOQV9ETFkgfCBXTTg5MDRfSFBSX0VOQV9ETFkgfAorCQkJCSAgICBXTTg5MDRfSFBMX0VOQV9PVVRQIHwgV004OTA0X0hQUl9FTkFfT1VUUCwKKwkJCQkgICAgMCk7CisKKwkJLyogUEdBcyB0b28gKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcHdyX3JlZywKKwkJCQkgICAgV004OTA0X0hQTF9QR0FfRU5BIHwgV004OTA0X0hQUl9QR0FfRU5BLAorCQkJCSAgICAwKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpsaW5fdGV4dFtdID0geworCSJJTjFMIiwgIklOMkwiLCAiSU4zTCIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gbGluX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQU5BTE9HVUVfTEVGVF9JTlBVVF8xLCAyLCAzLCBsaW5fdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsaW5fbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJMZWZ0IENhcHR1cmUgTXV4IiwgbGluX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGxpbl9pbnZfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BTkFMT0dVRV9MRUZUX0lOUFVUXzEsIDQsIDMsIGxpbl90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxpbl9pbnZfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJMZWZ0IENhcHR1cmUgSW52ZXRpbmcgTXV4IiwgbGluX2ludl9lbnVtKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnJpbl90ZXh0W10gPSB7CisJIklOMVIiLCAiSU4yUiIsICJJTjNSIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSByaW5fZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BTkFMT0dVRV9SSUdIVF9JTlBVVF8xLCAyLCAzLCByaW5fdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyByaW5fbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJSaWdodCBDYXB0dXJlIE11eCIsIHJpbl9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSByaW5faW52X2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQU5BTE9HVUVfUklHSFRfSU5QVVRfMSwgNCwgMywgcmluX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcmluX2ludl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIlJpZ2h0IENhcHR1cmUgSW52ZXRpbmcgTXV4IiwgcmluX2ludl9lbnVtKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFpZl90ZXh0W10gPSB7CisJIkxlZnQiLCAiUmlnaHQiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFpZm91dGxfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMCwgNywgMiwgYWlmX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmb3V0bF9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFJRk9VVEwgTXV4IiwgYWlmb3V0bF9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhaWZvdXRyX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQVVESU9fSU5URVJGQUNFXzAsIDYsIDIsIGFpZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZm91dHJfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJBSUZPVVRSIE11eCIsIGFpZm91dHJfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmaW5sX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQVVESU9fSU5URVJGQUNFXzAsIDUsIDIsIGFpZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZmlubF9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFJRklOTCBNdXgiLCBhaWZpbmxfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gYWlmaW5yX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQVVESU9fSU5URVJGQUNFXzAsIDQsIDIsIGFpZl90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZmlucl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFJRklOUiBNdXgiLCBhaWZpbnJfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5MDRfY29yZV9kYXBtX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9TVVBQTFkoIlNZU0NMSyIsIFdNODkwNF9DTE9DS19SQVRFU18yLCAyLCAwLCBzeXNjbGtfZXZlbnQsCisJCSAgICBTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCitTTkRfU09DX0RBUE1fU1VQUExZKCJDTEtfRFNQIiwgV004OTA0X0NMT0NLX1JBVEVTXzIsIDEsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1NVUFBMWSgiVE9DTEsiLCBXTTg5MDRfQ0xPQ0tfUkFURVNfMiwgMCwgMCwgTlVMTCwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204OTA0X2FkY19kYXBtX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9JTlBVVCgiSU4xTCIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJJTjFSIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIklOMkwiKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiSU4yUiIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJJTjNMIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIklOM1IiKSwKKworU05EX1NPQ19EQVBNX01JQ0JJQVMoIk1JQ0JJQVMiLCBXTTg5MDRfTUlDX0JJQVNfQ09OVFJPTF8wLCAwLCAwKSwKKworU05EX1NPQ19EQVBNX01VWCgiTGVmdCBDYXB0dXJlIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmxpbl9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiTGVmdCBDYXB0dXJlIEludmVydGluZyBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAmbGluX2ludl9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiUmlnaHQgQ2FwdHVyZSBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZyaW5fbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIlJpZ2h0IENhcHR1cmUgSW52ZXJ0aW5nIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICZyaW5faW52X211eCksCisKK1NORF9TT0NfREFQTV9QR0EoIkxlZnQgQ2FwdHVyZSBQR0EiLCBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF8wLCAxLCAwLAorCQkgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJSaWdodCBDYXB0dXJlIFBHQSIsIFdNODkwNF9QT1dFUl9NQU5BR0VNRU5UXzAsIDAsIDAsCisJCSBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX0FEQygiQURDTCIsIE5VTEwsIFdNODkwNF9QT1dFUl9NQU5BR0VNRU5UXzYsIDEsIDApLAorU05EX1NPQ19EQVBNX0FEQygiQURDUiIsIE5VTEwsIFdNODkwNF9QT1dFUl9NQU5BR0VNRU5UXzYsIDAsIDApLAorCitTTkRfU09DX0RBUE1fTVVYKCJBSUZPVVRMIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmFpZm91dGxfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIkFJRk9VVFIgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmb3V0cl9tdXgpLAorCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGT1VUTCIsICJDYXB0dXJlIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUZPVVRSIiwgIkNhcHR1cmUiLCAxLCBTTkRfU09DX05PUE0sIDAsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODkwNF9kYWNfZGFwbV93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUZJTkwiLCAiUGxheWJhY2siLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGSU5SIiwgIlBsYXliYWNrIiwgMSwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKworU05EX1NPQ19EQVBNX01VWCgiREFDTCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZhaWZpbmxfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIkRBQ1IgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmaW5yX211eCksCisKK1NORF9TT0NfREFQTV9EQUMoIkRBQ0wiLCBOVUxMLCBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF82LCAzLCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIkRBQ1IiLCBOVUxMLCBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF82LCAyLCAwKSwKKworU05EX1NPQ19EQVBNX1NVUFBMWSgiQ2hhcmdlIHB1bXAiLCBXTTg5MDRfQ0hBUkdFX1BVTVBfMCwgMCwgMCwgY3BfZXZlbnQsCisJCSAgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorCitTTkRfU09DX0RBUE1fUEdBKCJIUEwgUEdBIiwgU05EX1NPQ19OT1BNLCAxLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIkhQUiBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fUEdBKCJMSU5FTCBQR0EiLCBTTkRfU09DX05PUE0sIDEsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiTElORVIgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX1BHQV9FKCJIZWFkcGhvbmUgT3V0cHV0IiwgU05EX1NPQ19OT1BNLCBXTTg5MDRfQU5BTE9HVUVfSFBfMCwKKwkJICAgMCwgTlVMTCwgMCwgb3V0X3BnYV9ldmVudCwKKwkJICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCitTTkRfU09DX0RBUE1fUEdBX0UoIkxpbmUgT3V0cHV0IiwgU05EX1NPQ19OT1BNLCBXTTg5MDRfQU5BTE9HVUVfTElORU9VVF8wLAorCQkgICAwLCBOVUxMLCAwLCBvdXRfcGdhX2V2ZW50LAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNVSB8CisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1EIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKworU05EX1NPQ19EQVBNX09VVFBVVCgiSFBPVVRMIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJIUE9VVFIiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkxJTkVPVVRMIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJMSU5FT1VUUiIpLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKm91dF9tdXhfdGV4dFtdID0geworCSJEQUMiLCAiQnlwYXNzIgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBocGxfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9BTkFMT0dVRV9PVVQxMl9aQywgMywgMiwgb3V0X211eF90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGhwbF9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkhQTCBNdXgiLCBocGxfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gaHByX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQU5BTE9HVUVfT1VUMTJfWkMsIDIsIDIsIG91dF9tdXhfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBocHJfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJIUFIgTXV4IiwgaHByX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGxpbmVsX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQU5BTE9HVUVfT1VUMTJfWkMsIDEsIDIsIG91dF9tdXhfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsaW5lbF9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkxJTkVMIE11eCIsIGxpbmVsX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGxpbmVyX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5MDRfQU5BTE9HVUVfT1VUMTJfWkMsIDAsIDIsIG91dF9tdXhfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsaW5lcl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkxJTkVMIE11eCIsIGxpbmVyX2VudW0pOworCitzdGF0aWMgY29uc3QgY2hhciAqc2lkZXRvbmVfdGV4dFtdID0geworCSJOb25lIiwgIkxlZnQiLCAiUmlnaHQiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGRhY2xfc2lkZXRvbmVfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODkwNF9EQUNfRElHSVRBTF8wLCAyLCAzLCBzaWRldG9uZV90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhY2xfc2lkZXRvbmVfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJMZWZ0IFNpZGV0b25lIE11eCIsIGRhY2xfc2lkZXRvbmVfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gZGFjcl9zaWRldG9uZV9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTA0X0RBQ19ESUdJVEFMXzAsIDAsIDMsIHNpZGV0b25lX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGFjcl9zaWRldG9uZV9tdXggPQorCVNPQ19EQVBNX0VOVU0oIlJpZ2h0IFNpZGV0b25lIE11eCIsIGRhY3Jfc2lkZXRvbmVfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5MDRfZGFwbV93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fU1VQUExZKCJDbGFzcyBHIiwgV004OTA0X0NMQVNTX1dfMCwgMCwgMSwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IEJ5cGFzcyIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJSaWdodCBCeXBhc3MiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fTVVYKCJMZWZ0IFNpZGV0b25lIiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmZGFjbF9zaWRldG9uZV9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiUmlnaHQgU2lkZXRvbmUiLCBTTkRfU09DX05PUE0sIDAsIDAsICZkYWNyX3NpZGV0b25lX211eCksCisKK1NORF9TT0NfREFQTV9NVVgoIkhQTCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZocGxfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIkhQUiBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZocHJfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIkxJTkVMIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmxpbmVsX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJMSU5FUiBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZsaW5lcl9tdXgpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgY29yZV9pbnRlcmNvbltdID0geworCXsgIkNMS19EU1AiLCBOVUxMLCAiU1lTQ0xLIiB9LAorCXsgIlRPQ0xLIiwgTlVMTCwgIlNZU0NMSyIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGFkY19pbnRlcmNvbltdID0geworCXsgIkxlZnQgQ2FwdHVyZSBNdXgiLCAiSU4xTCIsICJJTjFMIiB9LAorCXsgIkxlZnQgQ2FwdHVyZSBNdXgiLCAiSU4yTCIsICJJTjJMIiB9LAorCXsgIkxlZnQgQ2FwdHVyZSBNdXgiLCAiSU4zTCIsICJJTjNMIiB9LAorCisJeyAiTGVmdCBDYXB0dXJlIEludmVydGluZyBNdXgiLCAiSU4xTCIsICJJTjFMIiB9LAorCXsgIkxlZnQgQ2FwdHVyZSBJbnZlcnRpbmcgTXV4IiwgIklOMkwiLCAiSU4yTCIgfSwKKwl7ICJMZWZ0IENhcHR1cmUgSW52ZXJ0aW5nIE11eCIsICJJTjNMIiwgIklOM0wiIH0sCisKKwl7ICJSaWdodCBDYXB0dXJlIE11eCIsICJJTjFSIiwgIklOMVIiIH0sCisJeyAiUmlnaHQgQ2FwdHVyZSBNdXgiLCAiSU4yUiIsICJJTjJSIiB9LAorCXsgIlJpZ2h0IENhcHR1cmUgTXV4IiwgIklOM1IiLCAiSU4zUiIgfSwKKworCXsgIlJpZ2h0IENhcHR1cmUgSW52ZXJ0aW5nIE11eCIsICJJTjFSIiwgIklOMVIiIH0sCisJeyAiUmlnaHQgQ2FwdHVyZSBJbnZlcnRpbmcgTXV4IiwgIklOMlIiLCAiSU4yUiIgfSwKKwl7ICJSaWdodCBDYXB0dXJlIEludmVydGluZyBNdXgiLCAiSU4zUiIsICJJTjNSIiB9LAorCisJeyAiTGVmdCBDYXB0dXJlIFBHQSIsIE5VTEwsICJMZWZ0IENhcHR1cmUgTXV4IiB9LAorCXsgIkxlZnQgQ2FwdHVyZSBQR0EiLCBOVUxMLCAiTGVmdCBDYXB0dXJlIEludmVydGluZyBNdXgiIH0sCisKKwl7ICJSaWdodCBDYXB0dXJlIFBHQSIsIE5VTEwsICJSaWdodCBDYXB0dXJlIE11eCIgfSwKKwl7ICJSaWdodCBDYXB0dXJlIFBHQSIsIE5VTEwsICJSaWdodCBDYXB0dXJlIEludmVydGluZyBNdXgiIH0sCisKKwl7ICJBSUZPVVRMIiwgIkxlZnQiLCAgIkFEQ0wiIH0sCisJeyAiQUlGT1VUTCIsICJSaWdodCIsICJBRENSIiB9LAorCXsgIkFJRk9VVFIiLCAiTGVmdCIsICAiQURDTCIgfSwKKwl7ICJBSUZPVVRSIiwgIlJpZ2h0IiwgIkFEQ1IiIH0sCisKKwl7ICJBRENMIiwgTlVMTCwgIkNMS19EU1AiIH0sCisJeyAiQURDTCIsIE5VTEwsICJMZWZ0IENhcHR1cmUgUEdBIiB9LAorCisJeyAiQURDUiIsIE5VTEwsICJDTEtfRFNQIiB9LAorCXsgIkFEQ1IiLCBOVUxMLCAiUmlnaHQgQ2FwdHVyZSBQR0EiIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBkYWNfaW50ZXJjb25bXSA9IHsKKwl7ICJEQUNMIiwgIlJpZ2h0IiwgIkFJRklOUiIgfSwKKwl7ICJEQUNMIiwgIkxlZnQiLCAgIkFJRklOTCIgfSwKKwl7ICJEQUNMIiwgTlVMTCwgIkNMS19EU1AiIH0sCisKKwl7ICJEQUNSIiwgIlJpZ2h0IiwgIkFJRklOUiIgfSwKKwl7ICJEQUNSIiwgIkxlZnQiLCAgIkFJRklOTCIgfSwKKwl7ICJEQUNSIiwgTlVMTCwgIkNMS19EU1AiIH0sCisKKwl7ICJDaGFyZ2UgcHVtcCIsIE5VTEwsICJTWVNDTEsiIH0sCisKKwl7ICJIZWFkcGhvbmUgT3V0cHV0IiwgTlVMTCwgIkhQTCBQR0EiIH0sCisJeyAiSGVhZHBob25lIE91dHB1dCIsIE5VTEwsICJIUFIgUEdBIiB9LAorCXsgIkhlYWRwaG9uZSBPdXRwdXQiLCBOVUxMLCAiQ2hhcmdlIHB1bXAiIH0sCisJeyAiSGVhZHBob25lIE91dHB1dCIsIE5VTEwsICJUT0NMSyIgfSwKKworCXsgIkxpbmUgT3V0cHV0IiwgTlVMTCwgIkxJTkVMIFBHQSIgfSwKKwl7ICJMaW5lIE91dHB1dCIsIE5VTEwsICJMSU5FUiBQR0EiIH0sCisJeyAiTGluZSBPdXRwdXQiLCBOVUxMLCAiQ2hhcmdlIHB1bXAiIH0sCisJeyAiTGluZSBPdXRwdXQiLCBOVUxMLCAiVE9DTEsiIH0sCisKKwl7ICJIUE9VVEwiLCBOVUxMLCAiSGVhZHBob25lIE91dHB1dCIgfSwKKwl7ICJIUE9VVFIiLCBOVUxMLCAiSGVhZHBob25lIE91dHB1dCIgfSwKKworCXsgIkxJTkVPVVRMIiwgTlVMTCwgIkxpbmUgT3V0cHV0IiB9LAorCXsgIkxJTkVPVVRSIiwgTlVMTCwgIkxpbmUgT3V0cHV0IiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204OTA0X2ludGVyY29uW10gPSB7CisJeyAiTGVmdCBTaWRldG9uZSIsICJMZWZ0IiwgIkFEQ0wiIH0sCisJeyAiTGVmdCBTaWRldG9uZSIsICJSaWdodCIsICJBRENSIiB9LAorCXsgIkRBQ0wiLCBOVUxMLCAiTGVmdCBTaWRldG9uZSIgfSwKKwkKKwl7ICJSaWdodCBTaWRldG9uZSIsICJMZWZ0IiwgIkFEQ0wiIH0sCisJeyAiUmlnaHQgU2lkZXRvbmUiLCAiUmlnaHQiLCAiQURDUiIgfSwKKwl7ICJEQUNSIiwgTlVMTCwgIlJpZ2h0IFNpZGV0b25lIiB9LAorCisJeyAiTGVmdCBCeXBhc3MiLCBOVUxMLCAiQ2xhc3MgRyIgfSwKKwl7ICJMZWZ0IEJ5cGFzcyIsIE5VTEwsICJMZWZ0IENhcHR1cmUgUEdBIiB9LAorCisJeyAiUmlnaHQgQnlwYXNzIiwgTlVMTCwgIkNsYXNzIEciIH0sCisJeyAiUmlnaHQgQnlwYXNzIiwgTlVMTCwgIlJpZ2h0IENhcHR1cmUgUEdBIiB9LAorCisJeyAiSFBMIE11eCIsICJEQUMiLCAiREFDTCIgfSwKKwl7ICJIUEwgTXV4IiwgIkJ5cGFzcyIsICJMZWZ0IEJ5cGFzcyIgfSwKKworCXsgIkhQUiBNdXgiLCAiREFDIiwgIkRBQ1IiIH0sCisJeyAiSFBSIE11eCIsICJCeXBhc3MiLCAiUmlnaHQgQnlwYXNzIiB9LAorCisJeyAiTElORUwgTXV4IiwgIkRBQyIsICJEQUNMIiB9LAorCXsgIkxJTkVMIE11eCIsICJCeXBhc3MiLCAiTGVmdCBCeXBhc3MiIH0sCisKKwl7ICJMSU5FUiBNdXgiLCAiREFDIiwgIkRBQ1IiIH0sCisJeyAiTElORVIgTXV4IiwgIkJ5cGFzcyIsICJSaWdodCBCeXBhc3MiIH0sCisKKwl7ICJIUEwgUEdBIiwgTlVMTCwgIkhQTCBNdXgiIH0sCisJeyAiSFBSIFBHQSIsIE5VTEwsICJIUFIgTXV4IiB9LAorCisJeyAiTElORUwgUEdBIiwgTlVMTCwgIkxJTkVMIE11eCIgfSwKKwl7ICJMSU5FUiBQR0EiLCBOVUxMLCAiTElORVIgTXV4IiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204OTEyX2ludGVyY29uW10gPSB7CisJeyAiSFBMIFBHQSIsIE5VTEwsICJEQUNMIiB9LAorCXsgIkhQUiBQR0EiLCBOVUxMLCAiREFDUiIgfSwKKworCXsgIkxJTkVMIFBHQSIsIE5VTEwsICJEQUNMIiB9LAorCXsgIkxJTkVSIFBHQSIsIE5VTEwsICJEQUNSIiB9LAorfTsKKworc3RhdGljIGludCB3bTg5MDRfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODkwNF9jb3JlX2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUod204OTA0X2NvcmVfZGFwbV93aWRnZXRzKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGNvcmVfaW50ZXJjb24sCisJCQkJQVJSQVlfU0laRShjb3JlX2ludGVyY29uKSk7CisKKwlzd2l0Y2ggKHdtODkwNC0+ZGV2dHlwZSkgeworCWNhc2UgV004OTA0OgorCQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204OTA0X2FkY19zbmRfY29udHJvbHMsCisJCQkJICAgICBBUlJBWV9TSVpFKHdtODkwNF9hZGNfc25kX2NvbnRyb2xzKSk7CisJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5MDRfZGFjX3NuZF9jb250cm9scywKKwkJCQkgICAgIEFSUkFZX1NJWkUod204OTA0X2RhY19zbmRfY29udHJvbHMpKTsKKwkJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODkwNF9zbmRfY29udHJvbHMsCisJCQkJICAgICBBUlJBWV9TSVpFKHdtODkwNF9zbmRfY29udHJvbHMpKTsKKworCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg5MDRfYWRjX2RhcG1fd2lkZ2V0cywKKwkJCQkJICBBUlJBWV9TSVpFKHdtODkwNF9hZGNfZGFwbV93aWRnZXRzKSk7CisJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODkwNF9kYWNfZGFwbV93aWRnZXRzLAorCQkJCQkgIEFSUkFZX1NJWkUod204OTA0X2RhY19kYXBtX3dpZGdldHMpKTsKKwkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTA0X2RhcG1fd2lkZ2V0cywKKwkJCQkJICBBUlJBWV9TSVpFKHdtODkwNF9kYXBtX3dpZGdldHMpKTsKKworCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgY29yZV9pbnRlcmNvbiwKKwkJCQkJQVJSQVlfU0laRShjb3JlX2ludGVyY29uKSk7CisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBhZGNfaW50ZXJjb24sCisJCQkJCUFSUkFZX1NJWkUoYWRjX2ludGVyY29uKSk7CisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBkYWNfaW50ZXJjb24sCisJCQkJCUFSUkFZX1NJWkUoZGFjX2ludGVyY29uKSk7CisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCB3bTg5MDRfaW50ZXJjb24sCisJCQkJCUFSUkFZX1NJWkUod204OTA0X2ludGVyY29uKSk7CisJCWJyZWFrOworCisJY2FzZSBXTTg5MTI6CisJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5MDRfZGFjX3NuZF9jb250cm9scywKKwkJCQkgICAgIEFSUkFZX1NJWkUod204OTA0X2RhY19zbmRfY29udHJvbHMpKTsKKworCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg5MDRfZGFjX2RhcG1fd2lkZ2V0cywKKwkJCQkJICBBUlJBWV9TSVpFKHdtODkwNF9kYWNfZGFwbV93aWRnZXRzKSk7CisKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGRhY19pbnRlcmNvbiwKKwkJCQkJQVJSQVlfU0laRShkYWNfaW50ZXJjb24pKTsKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIHdtODkxMl9pbnRlcmNvbiwKKwkJCQkJQVJSQVlfU0laRSh3bTg5MTJfaW50ZXJjb24pKTsKKwkJYnJlYWs7CisJfQorCisJc25kX3NvY19kYXBtX25ld193aWRnZXRzKGNvZGVjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB7CisJaW50IHJhdGlvOworCXVuc2lnbmVkIGludCBjbGtfc3lzX3JhdGU7Cit9IGNsa19zeXNfcmF0ZXNbXSA9IHsKKwl7ICAgNjQsICAwIH0sCisJeyAgMTI4LCAgMSB9LAorCXsgIDE5MiwgIDIgfSwKKwl7ICAyNTYsICAzIH0sCisJeyAgMzg0LCAgNCB9LAorCXsgIDUxMiwgIDUgfSwKKwl7ICA3ODYsICA2IH0sCisJeyAxMDI0LCAgNyB9LAorCXsgMTQwOCwgIDggfSwKKwl7IDE1MzYsICA5IH0sCit9OworCitzdGF0aWMgc3RydWN0IHsKKwlpbnQgcmF0ZTsKKwlpbnQgc2FtcGxlX3JhdGU7Cit9IHNhbXBsZV9yYXRlc1tdID0geworCXsgODAwMCwgIDAgIH0sCisJeyAxMTAyNSwgMSAgfSwKKwl7IDEyMDAwLCAxICB9LAorCXsgMTYwMDAsIDIgIH0sCisJeyAyMjA1MCwgMyAgfSwKKwl7IDI0MDAwLCAzICB9LAorCXsgMzIwMDAsIDQgIH0sCisJeyA0NDEwMCwgNSAgfSwKKwl7IDQ4MDAwLCA1ICB9LAorfTsKKworc3RhdGljIHN0cnVjdCB7CisJaW50IGRpdjsgLyogKjEwIGR1ZSB0byAuNXMgKi8KKwlpbnQgYmNsa19kaXY7Cit9IGJjbGtfZGl2c1tdID0geworCXsgMTAsICAwICB9LAorCXsgMTUsICAxICB9LAorCXsgMjAsICAyICB9LAorCXsgMzAsICAzICB9LAorCXsgNDAsICA0ICB9LAorCXsgNTAsICA1ICB9LAorCXsgNTUsICA2ICB9LAorCXsgNjAsICA3ICB9LAorCXsgODAsICA4ICB9LAorCXsgMTAwLCA5ICB9LAorCXsgMTEwLCAxMCB9LAorCXsgMTIwLCAxMSB9LAorCXsgMTYwLCAxMiB9LAorCXsgMjAwLCAxMyB9LAorCXsgMjIwLCAxNCB9LAorCXsgMjQwLCAxNiB9LAorCXsgMjAwLCAxNyB9LAorCXsgMzIwLCAxOCB9LAorCXsgNDQwLCAxOSB9LAorCXsgNDgwLCAyMCB9LAorfTsKKworCitzdGF0aWMgaW50IHdtODkwNF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJldCwgaSwgYmVzdCwgYmVzdF92YWwsIGN1cl92YWw7CisJdW5zaWduZWQgaW50IGFpZjEgPSAwOworCXVuc2lnbmVkIGludCBhaWYyID0gMDsKKwl1bnNpZ25lZCBpbnQgYWlmMyA9IDA7CisJdW5zaWduZWQgaW50IGNsb2NrMSA9IDA7CisJdW5zaWduZWQgaW50IGRhY19kaWdpdGFsMSA9IDA7CisKKwkvKiBXaGF0IEJDTEsgZG8gd2UgbmVlZD8gKi8KKwl3bTg5MDQtPmZzID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKwlpZiAod204OTA0LT50ZG1fc2xvdHMpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQ29uZmlndXJpbmcgZm9yICVkICVkIGJpdCBURE0gc2xvdHNcbiIsCisJCQl3bTg5MDQtPnRkbV9zbG90cywgd204OTA0LT50ZG1fd2lkdGgpOworCQl3bTg5MDQtPmJjbGsgPSBzbmRfc29jX2NhbGNfYmNsayh3bTg5MDQtPmZzLAorCQkJCQkJIHdtODkwNC0+dGRtX3dpZHRoLCAyLAorCQkJCQkJIHdtODkwNC0+dGRtX3Nsb3RzKTsKKwl9IGVsc2UgeworCQl3bTg5MDQtPmJjbGsgPSBzbmRfc29jX3BhcmFtc190b19iY2xrKHBhcmFtcyk7CisJfQorCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJYWlmMSB8PSAweDQwOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQlhaWYxIHw9IDB4ODA7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6CisJCWFpZjEgfD0gMHhjMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJUYXJnZXQgQkNMSyBpcyAlZEh6XG4iLCB3bTg5MDQtPmJjbGspOworCisJcmV0ID0gd204OTA0X2NvbmZpZ3VyZV9jbG9ja2luZyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJLyogU2VsZWN0IG5lYXJlc3QgQ0xLX1NZU19SQVRFICovCisJYmVzdCA9IDA7CisJYmVzdF92YWwgPSBhYnMoKHdtODkwNC0+c3lzY2xrX3JhdGUgLyBjbGtfc3lzX3JhdGVzWzBdLnJhdGlvKQorCQkgICAgICAgLSB3bTg5MDQtPmZzKTsKKwlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRShjbGtfc3lzX3JhdGVzKTsgaSsrKSB7CisJCWN1cl92YWwgPSBhYnMoKHdtODkwNC0+c3lzY2xrX3JhdGUgLworCQkJICAgICAgIGNsa19zeXNfcmF0ZXNbaV0ucmF0aW8pIC0gd204OTA0LT5mcyk7OworCQlpZiAoY3VyX3ZhbCA8IGJlc3RfdmFsKSB7CisJCQliZXN0ID0gaTsKKwkJCWJlc3RfdmFsID0gY3VyX3ZhbDsKKwkJfQorCX0KKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJTZWxlY3RlZCBDTEtfU1lTX1JBVElPIG9mICVkXG4iLAorCQljbGtfc3lzX3JhdGVzW2Jlc3RdLnJhdGlvKTsKKwljbG9jazEgfD0gKGNsa19zeXNfcmF0ZXNbYmVzdF0uY2xrX3N5c19yYXRlCisJCSAgIDw8IFdNODkwNF9DTEtfU1lTX1JBVEVfU0hJRlQpOworCisJLyogU0FNUExFX1JBVEUgKi8KKwliZXN0ID0gMDsKKwliZXN0X3ZhbCA9IGFicyh3bTg5MDQtPmZzIC0gc2FtcGxlX3JhdGVzWzBdLnJhdGUpOworCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKHNhbXBsZV9yYXRlcyk7IGkrKykgeworCQkvKiBDbG9zZXN0IG1hdGNoICovCisJCWN1cl92YWwgPSBhYnMod204OTA0LT5mcyAtIHNhbXBsZV9yYXRlc1tpXS5yYXRlKTsKKwkJaWYgKGN1cl92YWwgPCBiZXN0X3ZhbCkgeworCQkJYmVzdCA9IGk7CisJCQliZXN0X3ZhbCA9IGN1cl92YWw7CisJCX0KKwl9CisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU2VsZWN0ZWQgU0FNUExFX1JBVEUgb2YgJWRIelxuIiwKKwkJc2FtcGxlX3JhdGVzW2Jlc3RdLnJhdGUpOworCWNsb2NrMSB8PSAoc2FtcGxlX3JhdGVzW2Jlc3RdLnNhbXBsZV9yYXRlCisJCSAgIDw8IFdNODkwNF9TQU1QTEVfUkFURV9TSElGVCk7CisKKwkvKiBFbmFibGUgc2xvcGluZyBzdG9wYmFuZCBmaWx0ZXIgZm9yIGxvdyBzYW1wbGUgcmF0ZXMgKi8KKwlpZiAod204OTA0LT5mcyA8PSAyNDAwMCkKKwkJZGFjX2RpZ2l0YWwxIHw9IFdNODkwNF9EQUNfU0JfRklMVDsKKworCS8qIEJDTEtfRElWICovCisJYmVzdCA9IDA7CisJYmVzdF92YWwgPSBJTlRfTUFYOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJjbGtfZGl2cyk7IGkrKykgeworCQljdXJfdmFsID0gKCh3bTg5MDQtPnN5c2Nsa19yYXRlICogMTApIC8gYmNsa19kaXZzW2ldLmRpdikKKwkJCS0gd204OTA0LT5iY2xrOworCQlpZiAoY3VyX3ZhbCA8IDApIC8qIFRhYmxlIGlzIHNvcnRlZCAqLworCQkJYnJlYWs7CisJCWlmIChjdXJfdmFsIDwgYmVzdF92YWwpIHsKKwkJCWJlc3QgPSBpOworCQkJYmVzdF92YWwgPSBjdXJfdmFsOworCQl9CisJfQorCXdtODkwNC0+YmNsayA9ICh3bTg5MDQtPnN5c2Nsa19yYXRlICogMTApIC8gYmNsa19kaXZzW2Jlc3RdLmRpdjsKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJTZWxlY3RlZCBCQ0xLX0RJViBvZiAlZCBmb3IgJWRIeiBCQ0xLXG4iLAorCQliY2xrX2RpdnNbYmVzdF0uZGl2LCB3bTg5MDQtPmJjbGspOworCWFpZjIgfD0gYmNsa19kaXZzW2Jlc3RdLmJjbGtfZGl2OworCisJLyogTFJDTEsgaXMgYSBzaW1wbGUgZnJhY3Rpb24gb2YgQkNMSyAqLworCWRldl9kYmcoY29kZWMtPmRldiwgIkxSQ0xLX1JBVEUgaXMgJWRcbiIsIHdtODkwNC0+YmNsayAvIHdtODkwNC0+ZnMpOworCWFpZjMgfD0gd204OTA0LT5iY2xrIC8gd204OTA0LT5mczsKKworCS8qIEFwcGx5IHRoZSBzZXR0aW5ncyAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9EQUNfRElHSVRBTF8xLAorCQkJICAgIFdNODkwNF9EQUNfU0JfRklMVCwgZGFjX2RpZ2l0YWwxKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzEsCisJCQkgICAgV004OTA0X0FJRl9XTF9NQVNLLCBhaWYxKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzIsCisJCQkgICAgV004OTA0X0JDTEtfRElWX01BU0ssIGFpZjIpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMywKKwkJCSAgICBXTTg5MDRfTFJDTEtfUkFURV9NQVNLLCBhaWYzKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQ0xPQ0tfUkFURVNfMSwKKwkJCSAgICBXTTg5MDRfU0FNUExFX1JBVEVfTUFTSyB8CisJCQkgICAgV004OTA0X0NMS19TWVNfUkFURV9NQVNLLCBjbG9jazEpOworCisJLyogVXBkYXRlIGZpbHRlcnMgZm9yIHRoZSBuZXcgc2V0dGluZ3MgKi8KKwl3bTg5MDRfc2V0X3JldHVuZV9tb2JpbGUoY29kZWMpOworCXdtODkwNF9zZXRfZGVlbXBoKGNvZGVjKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgd204OTA0X3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBjbGtfaWQsCisJCQkgICAgIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHdtODkwNF9wcml2ICpwcml2ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoY2xrX2lkKSB7CisJY2FzZSBXTTg5MDRfQ0xLX01DTEs6CisJCXByaXYtPnN5c2Nsa19zcmMgPSBjbGtfaWQ7CisJCXByaXYtPm1jbGtfcmF0ZSA9IGZyZXE7CisJCWJyZWFrOworCisJY2FzZSBXTTg5MDRfQ0xLX0ZMTDoKKwkJcHJpdi0+c3lzY2xrX3NyYyA9IGNsa19pZDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXZfZGJnKGRhaS0+ZGV2LCAiQ2xvY2sgc291cmNlIGlzICVkIGF0ICV1SHpcbiIsIGNsa19pZCwgZnJlcSk7CisKKwl3bTg5MDRfY29uZmlndXJlX2Nsb2NraW5nKGNvZGVjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODkwNF9zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJdW5zaWduZWQgaW50IGFpZjEgPSAwOworCXVuc2lnbmVkIGludCBhaWYzID0gMDsKKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGTToKKwkJYWlmMyB8PSBXTTg5MDRfTFJDTEtfRElSOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRlM6CisJCWFpZjEgfD0gV004OTA0X0JDTEtfRElSOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWFpZjEgfD0gV004OTA0X0JDTEtfRElSOworCQlhaWYzIHw9IFdNODkwNF9MUkNMS19ESVI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQlhaWYxIHw9IFdNODkwNF9BSUZfTFJDTEtfSU5WOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCWFpZjEgfD0gMHgzOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJYWlmMSB8PSAweDI7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCWFpZjEgfD0gMHgxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQkvKiBmcmFtZSBpbnZlcnNpb24gbm90IHZhbGlkIGZvciBEU1AgbW9kZXMgKi8KKwkJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCQlhaWYxIHw9IFdNODkwNF9BSUZfQkNMS19JTlY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJCWFpZjEgfD0gV004OTA0X0FJRl9CQ0xLX0lOViB8IFdNODkwNF9BSUZfTFJDTEtfSU5WOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCQlhaWYxIHw9IFdNODkwNF9BSUZfQkNMS19JTlY7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKKwkJCWFpZjEgfD0gV004OTA0X0FJRl9MUkNMS19JTlY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMSwKKwkJCSAgICBXTTg5MDRfQUlGX0JDTEtfSU5WIHwgV004OTA0X0FJRl9MUkNMS19JTlYgfAorCQkJICAgIFdNODkwNF9BSUZfRk1UX01BU0sgfCBXTTg5MDRfQkNMS19ESVIsIGFpZjEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9BVURJT19JTlRFUkZBQ0VfMywKKwkJCSAgICBXTTg5MDRfTFJDTEtfRElSLCBhaWYzKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgd204OTA0X3NldF90ZG1fc2xvdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgdW5zaWduZWQgaW50IHR4X21hc2ssCisJCQkgICAgICAgdW5zaWduZWQgaW50IHJ4X21hc2ssIGludCBzbG90cywgaW50IHNsb3Rfd2lkdGgpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGFpZjEgPSAwOworCisJLyogRG9uJ3QgbmVlZCB0byB2YWxpZGF0ZSBhbnl0aGluZyBpZiB3ZSdyZSB0dXJuaW5nIG9mZiBURE0gKi8KKwlpZiAoc2xvdHMgPT0gMCkKKwkJZ290byBvdXQ7CisKKwkvKiBOb3RlIHRoYXQgd2UgYWxsb3cgY29uZmlndXJhdGlvbnMgd2UgY2FuJ3QgaGFuZGxlIG91cnNlbHZlcyAtIAorCSAqIGZvciBleGFtcGxlLCB3ZSBjYW4gZ2VuZXJhdGUgY2xvY2tzIGZvciBzbG90cyAyIGFuZCB1cCBldmVuIGlmCisJICogd2UgY2FuJ3QgdXNlIHRob3NlIHNsb3RzIG91cnNlbHZlcy4KKwkgKi8KKwlhaWYxIHw9IFdNODkwNF9BSUZBRENfVERNIHwgV004OTA0X0FJRkRBQ19URE07CisKKwlzd2l0Y2ggKHJ4X21hc2spIHsKKwljYXNlIDM6CisJCWJyZWFrOworCWNhc2UgMHhjOgorCQlhaWYxIHw9IFdNODkwNF9BSUZBRENfVERNX0NIQU47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCisJc3dpdGNoICh0eF9tYXNrKSB7CisJY2FzZSAzOgorCQlicmVhazsKKwljYXNlIDB4YzoKKwkJYWlmMSB8PSBXTTg5MDRfQUlGREFDX1RETV9DSEFOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKK291dDoKKwl3bTg5MDQtPnRkbV93aWR0aCA9IHNsb3Rfd2lkdGg7CisJd204OTA0LT50ZG1fc2xvdHMgPSBzbG90cyAvIDI7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzEsCisJCQkgICAgV004OTA0X0FJRkFEQ19URE0gfCBXTTg5MDRfQUlGQURDX1RETV9DSEFOIHwKKwkJCSAgICBXTTg5MDRfQUlGREFDX1RETSB8IFdNODkwNF9BSUZEQUNfVERNX0NIQU4sIGFpZjEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBfZmxsX2RpdiB7CisJdTE2IGZsbF9mcmF0aW87CisJdTE2IGZsbF9vdXRkaXY7CisJdTE2IGZsbF9jbGtfcmVmX2RpdjsKKwl1MTYgbjsKKwl1MTYgazsKK307CisKKy8qIFRoZSBzaXplIGluIGJpdHMgb2YgdGhlIEZMTCBkaXZpZGUgbXVsdGlwbGllZCBieSAxMAorICogdG8gYWxsb3cgcm91bmRpbmcgbGF0ZXIgKi8KKyNkZWZpbmUgRklYRURfRkxMX1NJWkUgKCgxIDw8IDE2KSAqIDEwKQorCitzdGF0aWMgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgbWluOworCXVuc2lnbmVkIGludCBtYXg7CisJdTE2IGZsbF9mcmF0aW87CisJaW50IHJhdGlvOworfSBmbGxfZnJhdGlvc1tdID0geworCXsgICAgICAgMCwgICAgNjQwMDAsIDQsIDE2IH0sCisJeyAgIDY0MDAwLCAgIDEyODAwMCwgMywgIDggfSwKKwl7ICAxMjgwMDAsICAgMjU2MDAwLCAyLCAgNCB9LAorCXsgIDI1NjAwMCwgIDEwMDAwMDAsIDEsICAyIH0sCisJeyAxMDAwMDAwLCAxMzUwMDAwMCwgMCwgIDEgfSwKK307CisKK3N0YXRpYyBpbnQgZmxsX2ZhY3RvcnMoc3RydWN0IF9mbGxfZGl2ICpmbGxfZGl2LCB1bnNpZ25lZCBpbnQgRnJlZiwKKwkJICAgICAgIHVuc2lnbmVkIGludCBGb3V0KQoreworCXU2NCBLcGFydDsKKwl1bnNpZ25lZCBpbnQgSywgTmRpdiwgTm1vZCwgdGFyZ2V0OworCXVuc2lnbmVkIGludCBkaXY7CisJaW50IGk7CisKKwkvKiBGcmVmIG11c3QgYmUgPD0xMy41TUh6ICovCisJZGl2ID0gMTsKKwlmbGxfZGl2LT5mbGxfY2xrX3JlZl9kaXYgPSAwOworCXdoaWxlICgoRnJlZiAvIGRpdikgPiAxMzUwMDAwMCkgeworCQlkaXYgKj0gMjsKKwkJZmxsX2Rpdi0+ZmxsX2Nsa19yZWZfZGl2Kys7CisKKwkJaWYgKGRpdiA+IDgpIHsKKwkJCXByX2VycigiQ2FuJ3Qgc2NhbGUgJWRNSHogaW5wdXQgZG93biB0byA8PTEzLjVNSHpcbiIsCisJCQkgICAgICAgRnJlZik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXByX2RlYnVnKCJGcmVmPSV1IEZvdXQ9JXVcbiIsIEZyZWYsIEZvdXQpOworCisJLyogQXBwbHkgdGhlIGRpdmlzaW9uIGZvciBvdXIgcmVtYWluaW5nIGNhbGN1bGF0aW9ucyAqLworCUZyZWYgLz0gZGl2OworCisJLyogRnZjbyBzaG91bGQgYmUgOTAtMTAwTUh6OyBkb24ndCBjaGVjayB0aGUgdXBwZXIgYm91bmQgKi8KKwlkaXYgPSA0OworCXdoaWxlIChGb3V0ICogZGl2IDwgOTAwMDAwMDApIHsKKwkJZGl2Kys7CisJCWlmIChkaXYgPiA2NCkgeworCQkJcHJfZXJyKCJVbmFibGUgdG8gZmluZCBGTExfT1VURElWIGZvciBGb3V0PSV1SHpcbiIsCisJCQkgICAgICAgRm91dCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwl0YXJnZXQgPSBGb3V0ICogZGl2OworCWZsbF9kaXYtPmZsbF9vdXRkaXYgPSBkaXYgLSAxOworCisJcHJfZGVidWcoIkZ2Y289JWRIelxuIiwgdGFyZ2V0KTsKKworCS8qIEZpbmQgYW4gYXBwcm9wcmFpdGUgRkxMX0ZSQVRJTyBhbmQgZmFjdG9yIGl0IG91dCBvZiB0aGUgdGFyZ2V0ICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmxsX2ZyYXRpb3MpOyBpKyspIHsKKwkJaWYgKGZsbF9mcmF0aW9zW2ldLm1pbiA8PSBGcmVmICYmIEZyZWYgPD0gZmxsX2ZyYXRpb3NbaV0ubWF4KSB7CisJCQlmbGxfZGl2LT5mbGxfZnJhdGlvID0gZmxsX2ZyYXRpb3NbaV0uZmxsX2ZyYXRpbzsKKwkJCXRhcmdldCAvPSBmbGxfZnJhdGlvc1tpXS5yYXRpbzsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChpID09IEFSUkFZX1NJWkUoZmxsX2ZyYXRpb3MpKSB7CisJCXByX2VycigiVW5hYmxlIHRvIGZpbmQgRkxMX0ZSQVRJTyBmb3IgRnJlZj0ldUh6XG4iLCBGcmVmKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogTm93LCBjYWxjdWxhdGUgTi5LICovCisJTmRpdiA9IHRhcmdldCAvIEZyZWY7CisKKwlmbGxfZGl2LT5uID0gTmRpdjsKKwlObW9kID0gdGFyZ2V0ICUgRnJlZjsKKwlwcl9kZWJ1ZygiTm1vZD0lZFxuIiwgTm1vZCk7CisKKwkvKiBDYWxjdWxhdGUgZnJhY3Rpb25hbCBwYXJ0IC0gc2NhbGUgdXAgc28gd2UgY2FuIHJvdW5kLiAqLworCUtwYXJ0ID0gRklYRURfRkxMX1NJWkUgKiAobG9uZyBsb25nKU5tb2Q7CisKKwlkb19kaXYoS3BhcnQsIEZyZWYpOworCisJSyA9IEtwYXJ0ICYgMHhGRkZGRkZGRjsKKworCWlmICgoSyAlIDEwKSA+PSA1KQorCQlLICs9IDU7CisKKwkvKiBNb3ZlIGRvd24gdG8gcHJvcGVyIHJhbmdlIG5vdyByb3VuZGluZyBpcyBkb25lICovCisJZmxsX2Rpdi0+ayA9IEsgLyAxMDsKKworCXByX2RlYnVnKCJOPSV4IEs9JXggRkxMX0ZSQVRJTz0leCBGTExfT1VURElWPSV4IEZMTF9DTEtfUkVGX0RJVj0leFxuIiwKKwkJIGZsbF9kaXYtPm4sIGZsbF9kaXYtPmssCisJCSBmbGxfZGl2LT5mbGxfZnJhdGlvLCBmbGxfZGl2LT5mbGxfb3V0ZGl2LAorCQkgZmxsX2Rpdi0+ZmxsX2Nsa19yZWZfZGl2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODkwNF9zZXRfZmxsKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgZmxsX2lkLCBpbnQgc291cmNlLAorCQkJICB1bnNpZ25lZCBpbnQgRnJlZiwgdW5zaWduZWQgaW50IEZvdXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IF9mbGxfZGl2IGZsbF9kaXY7CisJaW50IHJldCwgdmFsOworCWludCBjbG9jazIsIGZsbDE7CisKKwkvKiBBbnkgY2hhbmdlPyAqLworCWlmIChzb3VyY2UgPT0gd204OTA0LT5mbGxfc3JjICYmIEZyZWYgPT0gd204OTA0LT5mbGxfZnJlZiAmJgorCSAgICBGb3V0ID09IHdtODkwNC0+ZmxsX2ZvdXQpCisJCXJldHVybiAwOworCisJY2xvY2syID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDRfQ0xPQ0tfUkFURVNfMik7CisKKwlpZiAoRm91dCA9PSAwKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkZMTCBkaXNhYmxlZFxuIik7CisKKwkJd204OTA0LT5mbGxfZnJlZiA9IDA7CisJCXdtODkwNC0+ZmxsX2ZvdXQgPSAwOworCisJCS8qIEdhdGUgU1lTQ0xLIHRvIGF2b2lkIGdsaXRjaGVzICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9DTE9DS19SQVRFU18yLAorCQkJCSAgICBXTTg5MDRfQ0xLX1NZU19FTkEsIDApOworCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF8xLAorCQkJCSAgICBXTTg5MDRfRkxMX09TQ19FTkEgfCBXTTg5MDRfRkxMX0VOQSwgMCk7CisKKwkJZ290byBvdXQ7CisJfQorCisJLyogVmFsaWRhdGUgdGhlIEZMTCBJRCAqLworCXN3aXRjaCAoc291cmNlKSB7CisJY2FzZSBXTTg5MDRfRkxMX01DTEs6CisJY2FzZSBXTTg5MDRfRkxMX0xSQ0xLOgorCWNhc2UgV004OTA0X0ZMTF9CQ0xLOgorCQlyZXQgPSBmbGxfZmFjdG9ycygmZmxsX2RpdiwgRnJlZiwgRm91dCk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJCWJyZWFrOworCisJY2FzZSBXTTg5MDRfRkxMX0ZSRUVfUlVOTklORzoKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiVXNpbmcgZnJlZSBydW5uaW5nIEZMTFxuIik7CisJCS8qIEZvcmNlIDEyTUh6IGFuZCBvdXRwdXQvNCBmb3Igbm93ICovCisJCUZvdXQgPSAxMjAwMDAwMDsKKwkJRnJlZiA9IDEyMDAwMDAwOworCisJCW1lbXNldCgmZmxsX2RpdiwgMCwgc2l6ZW9mKGZsbF9kaXYpKTsKKwkJZmxsX2Rpdi5mbGxfb3V0ZGl2ID0gMzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJVbmtub3duIEZMTCBJRCAlZFxuIiwgZmxsX2lkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogU2F2ZSBjdXJyZW50IHN0YXRlIHRoZW4gZGlzYWJsZSB0aGUgRkxMIGFuZCBTWVNDTEsgdG8gYXZvaWQKKwkgKiBtaXNjbG9ja2luZyAqLworCWZsbDEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF8xKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQ0xPQ0tfUkFURVNfMiwKKwkJCSAgICBXTTg5MDRfQ0xLX1NZU19FTkEsIDApOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF8xLAorCQkJICAgIFdNODkwNF9GTExfT1NDX0VOQSB8IFdNODkwNF9GTExfRU5BLCAwKTsKKworCS8qIFVubG9jayBmb3JjZWQgb3NjaWxhdG9yIGNvbnRyb2wgdG8gc3dpdGNoIGl0IG9uL29mZiAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9DT05UUk9MX0lOVEVSRkFDRV9URVNUXzEsCisJCQkgICAgV004OTA0X1VTRVJfS0VZLCBXTTg5MDRfVVNFUl9LRVkpOworCisJaWYgKGZsbF9pZCA9PSBXTTg5MDRfRkxMX0ZSRUVfUlVOTklORykgeworCQl2YWwgPSBXTTg5MDRfRkxMX0ZSQ19OQ087CisJfSBlbHNlIHsKKwkJdmFsID0gMDsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX05DT19URVNUXzEsIFdNODkwNF9GTExfRlJDX05DTywKKwkJCSAgICB2YWwpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9DT05UUk9MX0lOVEVSRkFDRV9URVNUXzEsCisJCQkgICAgV004OTA0X1VTRVJfS0VZLCAwKTsKKworCXN3aXRjaCAoZmxsX2lkKSB7CisJY2FzZSBXTTg5MDRfRkxMX01DTEs6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF81LAorCQkJCSAgICBXTTg5MDRfRkxMX0NMS19SRUZfU1JDX01BU0ssIDApOworCQlicmVhazsKKworCWNhc2UgV004OTA0X0ZMTF9MUkNMSzoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzUsCisJCQkJICAgIFdNODkwNF9GTExfQ0xLX1JFRl9TUkNfTUFTSywgMSk7CisJCWJyZWFrOworCisJY2FzZSBXTTg5MDRfRkxMX0JDTEs6CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF81LAorCQkJCSAgICBXTTg5MDRfRkxMX0NMS19SRUZfU1JDX01BU0ssIDIpOworCQlicmVhazsKKwl9CisKKwlpZiAoZmxsX2Rpdi5rKQorCQl2YWwgPSBXTTg5MDRfRkxMX0ZSQUNOX0VOQTsKKwllbHNlCisJCXZhbCA9IDA7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzEsCisJCQkgICAgV004OTA0X0ZMTF9GUkFDTl9FTkEsIHZhbCk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfMiwKKwkJCSAgICBXTTg5MDRfRkxMX09VVERJVl9NQVNLIHwgV004OTA0X0ZMTF9GUkFUSU9fTUFTSywKKwkJCSAgICAoZmxsX2Rpdi5mbGxfb3V0ZGl2IDw8IFdNODkwNF9GTExfT1VURElWX1NISUZUKSB8CisJCQkgICAgKGZsbF9kaXYuZmxsX2ZyYXRpbyA8PCBXTTg5MDRfRkxMX0ZSQVRJT19TSElGVCkpOworCisJc25kX3NvY193cml0ZShjb2RlYywgV004OTA0X0ZMTF9DT05UUk9MXzMsIGZsbF9kaXYuayk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfNCwgV004OTA0X0ZMTF9OX01BU0ssCisJCQkgICAgZmxsX2Rpdi5uIDw8IFdNODkwNF9GTExfTl9TSElGVCk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfNSwKKwkJCSAgICBXTTg5MDRfRkxMX0NMS19SRUZfRElWX01BU0ssCisJCQkgICAgZmxsX2Rpdi5mbGxfY2xrX3JlZl9kaXYgCisJCQkgICAgPDwgV004OTA0X0ZMTF9DTEtfUkVGX0RJVl9TSElGVCk7CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJGTEwgY29uZmlndXJlZCBmb3IgJWRIei0+JWRIelxuIiwgRnJlZiwgRm91dCk7CisKKwl3bTg5MDQtPmZsbF9mcmVmID0gRnJlZjsKKwl3bTg5MDQtPmZsbF9mb3V0ID0gRm91dDsKKwl3bTg5MDQtPmZsbF9zcmMgPSBzb3VyY2U7CisKKwkvKiBFbmFibGUgdGhlIEZMTCBpZiBpdCB3YXMgcHJldmlvdXNseSBhY3RpdmUgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfRkxMX0NPTlRST0xfMSwKKwkJCSAgICBXTTg5MDRfRkxMX09TQ19FTkEsIGZsbDEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9GTExfQ09OVFJPTF8xLAorCQkJICAgIFdNODkwNF9GTExfRU5BLCBmbGwxKTsKKworb3V0OgorCS8qIFJlZW5hYmxlIFNZU0NMSyBpZiBpdCB3YXMgcHJldmlvdXNseSBhY3RpdmUgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQ0xPQ0tfUkFURVNfMiwKKwkJCSAgICBXTTg5MDRfQ0xLX1NZU19FTkEsIGNsb2NrMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5MDRfZGlnaXRhbF9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLCBpbnQgbXV0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCWludCB2YWw7CisKKwlpZiAobXV0ZSkKKwkJdmFsID0gV004OTA0X0RBQ19NVVRFOworCWVsc2UKKwkJdmFsID0gMDsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9EQUNfRElHSVRBTF8xLCBXTTg5MDRfREFDX01VVEUsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd204OTA0X3N5bmNfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgaTsKKworCWlmICghY29kZWMtPmNhY2hlX3N5bmMpCisJCXJldHVybjsKKworCWNvZGVjLT5jYWNoZV9vbmx5ID0gMDsKKworCS8qIFN5bmMgYmFjayBjYWNoZWQgdmFsdWVzIGlmIHRoZXkncmUgZGlmZmVyZW50IGZyb20gdGhlCisJICogaGFyZHdhcmUgZGVmYXVsdC4KKwkgKi8KKwlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRSh3bTg5MDQtPnJlZ19jYWNoZSk7IGkrKykgeworCQlpZiAoIXdtODkwNF9hY2Nlc3NbaV0ud3JpdGFibGUpCisJCQljb250aW51ZTsKKworCQlpZiAod204OTA0LT5yZWdfY2FjaGVbaV0gPT0gd204OTA0X3JlZ1tpXSkKKwkJCWNvbnRpbnVlOworCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIGksIHdtODkwNC0+cmVnX2NhY2hlW2ldKTsKKwl9CisKKwljb2RlYy0+Y2FjaGVfc3luYyA9IDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCByZXQ7CisKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJLyogVk1JRCByZXNpc3RhbmNlIDIqNTBrICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkwNF9WTUlEX0NPTlRST0xfMCwKKwkJCQkgICAgV004OTA0X1ZNSURfUkVTX01BU0ssCisJCQkJICAgIDB4MSA8PCBXTTg5MDRfVk1JRF9SRVNfU0hJRlQpOworCisJCS8qIE5vcm1hbCBiaWFzIGN1cnJlbnQgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0JJQVNfQ09OVFJPTF8wLAorCQkJCSAgICBXTTg5MDRfSVNFTF9NQVNLLCAyIDw8IFdNODkwNF9JU0VMX1NISUZUKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQkJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUod204OTA0LT5zdXBwbGllcyksCisJCQkJCQkgICAgd204OTA0LT5zdXBwbGllcyk7CisJCQlpZiAocmV0ICE9IDApIHsKKwkJCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkJCSJGYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzOiAlZFxuIiwKKwkJCQkJcmV0KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCisJCQl3bTg5MDRfc3luY19jYWNoZShjb2RlYyk7CisKKwkJCS8qIEVuYWJsZSBiaWFzICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfQklBU19DT05UUk9MXzAsCisJCQkJCSAgICBXTTg5MDRfQklBU19FTkEsIFdNODkwNF9CSUFTX0VOQSk7CisKKwkJCS8qIEVuYWJsZSBWTUlELCBWTUlEIGJ1ZmZlcmluZywgMio1ayByZXNpc3RhbmNlICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDRfVk1JRF9DT05UUk9MXzAsCisJCQkJCSAgICBXTTg5MDRfVk1JRF9FTkEgfAorCQkJCQkgICAgV004OTA0X1ZNSURfUkVTX01BU0ssCisJCQkJCSAgICBXTTg5MDRfVk1JRF9FTkEgfAorCQkJCQkgICAgMHgzIDw8IFdNODkwNF9WTUlEX1JFU19TSElGVCk7CisKKwkJCS8qIExldCBWTUlEIHJhbXAgKi8KKwkJCW1zbGVlcCgxKTsKKwkJfQorCisJCS8qIE1haW50YWluIFZNSUQgd2l0aCAyKjI1MGsgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X1ZNSURfQ09OVFJPTF8wLAorCQkJCSAgICBXTTg5MDRfVk1JRF9SRVNfTUFTSywKKwkJCQkgICAgMHgyIDw8IFdNODkwNF9WTUlEX1JFU19TSElGVCk7CisKKwkJLyogQmlhcyBjdXJyZW50ICowLjUgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0JJQVNfQ09OVFJPTF8wLAorCQkJCSAgICBXTTg5MDRfSVNFTF9NQVNLLCAwKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19PRkY6CisJCS8qIFR1cm4gb2ZmIFZNSUQgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X1ZNSURfQ09OVFJPTF8wLAorCQkJCSAgICBXTTg5MDRfVk1JRF9SRVNfTUFTSyB8IFdNODkwNF9WTUlEX0VOQSwgMCk7CisKKwkJLyogU3RvcCBiaWFzIGdlbmVyYXRpb24gKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTA0X0JJQVNfQ09OVFJPTF8wLAorCQkJCSAgICBXTTg5MDRfQklBU19FTkEsIDApOworCisjaWZkZWYgQ09ORklHX1JFR1VMQVRPUgorCQkvKiBQb3N0IDIuNi4zNCB3ZSB3aWxsIGJlIGFibGUgdG8gZ2V0IGEgY2FsbGJhY2sgd2hlbgorCQkgKiB0aGUgcmVndWxhdG9ycyBhcmUgZGlzYWJsZWQgd2hpY2ggd2UgY2FuIHVzZSBidXQKKwkJICogZm9yIG5vdyBqdXN0IGFzc3VtZSB0aGF0IHRoZSBwb3dlciB3aWxsIGJlIGN1dCBpZgorCQkgKiB0aGUgcmVndWxhdG9yIEFQSSBpcyBpbiB1c2UuCisJCSAqLworCQljb2RlYy0+Y2FjaGVfc3luYyA9IDE7CisjZW5kaWYKKworCQlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204OTA0LT5zdXBwbGllcyksCisJCQkJICAgICAgIHdtODkwNC0+c3VwcGxpZXMpOworCQlicmVhazsKKwl9CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBXTTg5MDRfUkFURVMgU05EUlZfUENNX1JBVEVfODAwMF85NjAwMAorCisjZGVmaW5lIFdNODkwNF9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204OTA0X2RhaV9vcHMgPSB7CisJLnNldF9zeXNjbGsgPSB3bTg5MDRfc2V0X3N5c2NsaywKKwkuc2V0X2ZtdCA9IHdtODkwNF9zZXRfZm10LAorCS5zZXRfdGRtX3Nsb3QgPSB3bTg5MDRfc2V0X3RkbV9zbG90LAorCS5zZXRfcGxsID0gd204OTA0X3NldF9mbGwsCisJLmh3X3BhcmFtcyA9IHdtODkwNF9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZSA9IHdtODkwNF9kaWdpdGFsX211dGUsCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTA0X2RhaSA9IHsKKwkubmFtZSA9ICJXTTg5MDQiLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBXTTg5MDRfUkFURVMsCisJCS5mb3JtYXRzID0gV004OTA0X0ZPUk1BVFMsCisJfSwKKwkuY2FwdHVyZSA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAorCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFdNODkwNF9SQVRFUywKKwkJLmZvcm1hdHMgPSBXTTg5MDRfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmd204OTA0X2RhaV9vcHMsCisJLnN5bW1ldHJpY19yYXRlcyA9IDEsCit9OworRVhQT1JUX1NZTUJPTF9HUEwod204OTA0X2RhaSk7CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgd204OTA0X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCXdtODkwNF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5MDRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCisJd204OTA0X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHdtODkwNF9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgd204OTA0X3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIHZvaWQgd204OTA0X2hhbmRsZV9yZXR1bmVfbW9iaWxlX3BkYXRhKHN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg5MDQtPmNvZGVjOworCXN0cnVjdCB3bTg5MDRfcGRhdGEgKnBkYXRhID0gd204OTA0LT5wZGF0YTsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjb250cm9sID0KKwkJU09DX0VOVU1fRVhUKCJFUSBNb2RlIiwKKwkJCSAgICAgd204OTA0LT5yZXR1bmVfbW9iaWxlX2VudW0sCisJCQkgICAgIHdtODkwNF9nZXRfcmV0dW5lX21vYmlsZV9lbnVtLAorCQkJICAgICB3bTg5MDRfcHV0X3JldHVuZV9tb2JpbGVfZW51bSk7CisJaW50IHJldCwgaSwgajsKKwljb25zdCBjaGFyICoqdDsKKworCS8qIFdlIG5lZWQgYW4gYXJyYXkgb2YgdGV4dHMgZm9yIHRoZSBlbnVtIEFQSSBidXQgdGhlIG51bWJlcgorCSAqIG9mIHRleHRzIGlzIGxpa2VseSB0byBiZSBsZXNzIHRoYW4gdGhlIG51bWJlciBvZgorCSAqIGNvbmZpZ3VyYXRpb25zIGR1ZSB0byB0aGUgc2FtcGxlIHJhdGUgZGVwZW5kZW5jeSBvZiB0aGUKKwkgKiBjb25maWd1cmF0aW9ucy4gKi8KKwl3bTg5MDQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzID0gMDsKKwl3bTg5MDQtPnJldHVuZV9tb2JpbGVfdGV4dHMgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2ZnczsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCB3bTg5MDQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzOyBqKyspIHsKKwkJCWlmIChzdHJjbXAocGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tpXS5uYW1lLAorCQkJCSAgIHdtODkwNC0+cmV0dW5lX21vYmlsZV90ZXh0c1tqXSkgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChqICE9IHdtODkwNC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMpCisJCQljb250aW51ZTsKKworCQkvKiBFeHBhbmQgdGhlIGFycmF5Li4uICovCisJCXQgPSBrcmVhbGxvYyh3bTg5MDQtPnJldHVuZV9tb2JpbGVfdGV4dHMsCisJCQkgICAgIHNpemVvZihjaGFyICopICogCisJCQkgICAgICh3bTg5MDQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzICsgMSksCisJCQkgICAgIEdGUF9LRVJORUwpOworCQlpZiAodCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJLyogLi4uc3RvcmUgdGhlIG5ldyBlbnRyeS4uLiAqLworCQl0W3dtODkwNC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHNdID0gCisJCQlwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2ldLm5hbWU7CisKKwkJLyogLi4uYW5kIHJlbWVtYmVyIHRoZSBuZXcgdmVyc2lvbi4gKi8KKwkJd204OTA0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cysrOworCQl3bTg5MDQtPnJldHVuZV9tb2JpbGVfdGV4dHMgPSB0OworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIkFsbG9jYXRlZCAlZCB1bmlxdWUgUmVUdW5lIE1vYmlsZSBuYW1lc1xuIiwKKwkJd204OTA0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cyk7CisKKwl3bTg5MDQtPnJldHVuZV9tb2JpbGVfZW51bS5tYXggPSB3bTg5MDQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzOworCXdtODkwNC0+cmV0dW5lX21vYmlsZV9lbnVtLnRleHRzID0gd204OTA0LT5yZXR1bmVfbW9iaWxlX3RleHRzOworCisJcmV0ID0gc25kX3NvY19hZGRfY29udHJvbHMoJndtODkwNC0+Y29kZWMsICZjb250cm9sLCAxKTsKKwlpZiAocmV0ICE9IDApCisJCWRldl9lcnIod204OTA0LT5jb2RlYy5kZXYsCisJCQkiRmFpbGVkIHRvIGFkZCBSZVR1bmUgTW9iaWxlIGNvbnRyb2w6ICVkXG4iLCByZXQpOworfQorCitzdGF0aWMgdm9pZCB3bTg5MDRfaGFuZGxlX3BkYXRhKHN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg5MDQtPmNvZGVjOworCXN0cnVjdCB3bTg5MDRfcGRhdGEgKnBkYXRhID0gd204OTA0LT5wZGF0YTsKKwlpbnQgcmV0LCBpOworCisJaWYgKCFwZGF0YSkgeworCQlzbmRfc29jX2FkZF9jb250cm9scygmd204OTA0LT5jb2RlYywgd204OTA0X2VxX2NvbnRyb2xzLAorCQkJCSAgICAgQVJSQVlfU0laRSh3bTg5MDRfZXFfY29udHJvbHMpKTsKKwkJcmV0dXJuOworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVkIERSQyBjb25maWd1cmF0aW9uc1xuIiwgcGRhdGEtPm51bV9kcmNfY2Zncyk7CisKKwlpZiAocGRhdGEtPm51bV9kcmNfY2ZncykgeworCQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjb250cm9sID0KKwkJCVNPQ19FTlVNX0VYVCgiRFJDIE1vZGUiLCB3bTg5MDQtPmRyY19lbnVtLAorCQkJCSAgICAgd204OTA0X2dldF9kcmNfZW51bSwgd204OTA0X3B1dF9kcmNfZW51bSk7CisKKwkJLyogV2UgbmVlZCBhbiBhcnJheSBvZiB0ZXh0cyBmb3IgdGhlIGVudW0gQVBJICovCisJCXdtODkwNC0+ZHJjX3RleHRzID0ga21hbGxvYyhzaXplb2YoY2hhciAqKQorCQkJCQkgICAgKiBwZGF0YS0+bnVtX2RyY19jZmdzLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF3bTg5MDQtPmRyY190ZXh0cykgeworCQkJZGV2X2Vycih3bTg5MDQtPmNvZGVjLmRldiwKKwkJCQkiRmFpbGVkIHRvIGFsbG9jYXRlICVkIERSQyBjb25maWcgdGV4dHNcbiIsCisJCQkJcGRhdGEtPm51bV9kcmNfY2Zncyk7CisJCQlyZXR1cm47CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9kcmNfY2ZnczsgaSsrKQorCQkJd204OTA0LT5kcmNfdGV4dHNbaV0gPSBwZGF0YS0+ZHJjX2NmZ3NbaV0ubmFtZTsKKworCQl3bTg5MDQtPmRyY19lbnVtLm1heCA9IHBkYXRhLT5udW1fZHJjX2NmZ3M7CisJCXdtODkwNC0+ZHJjX2VudW0udGV4dHMgPSB3bTg5MDQtPmRyY190ZXh0czsKKworCQlyZXQgPSBzbmRfc29jX2FkZF9jb250cm9scygmd204OTA0LT5jb2RlYywgJmNvbnRyb2wsIDEpOworCQlpZiAocmV0ICE9IDApCisJCQlkZXZfZXJyKHdtODkwNC0+Y29kZWMuZGV2LAorCQkJCSJGYWlsZWQgdG8gYWRkIERSQyBtb2RlIGNvbnRyb2w6ICVkXG4iLCByZXQpOworCisJCXdtODkwNF9zZXRfZHJjKGNvZGVjKTsKKwl9CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICIlZCBSZVR1bmUgTW9iaWxlIGNvbmZpZ3VyYXRpb25zXG4iLAorCQlwZGF0YS0+bnVtX3JldHVuZV9tb2JpbGVfY2Zncyk7CisKKwlpZiAocGRhdGEtPm51bV9yZXR1bmVfbW9iaWxlX2NmZ3MpCisJCXdtODkwNF9oYW5kbGVfcmV0dW5lX21vYmlsZV9wZGF0YSh3bTg5MDQpOworCWVsc2UKKwkJc25kX3NvY19hZGRfY29udHJvbHMoJndtODkwNC0+Y29kZWMsIHdtODkwNF9lcV9jb250cm9scywKKwkJCQkgICAgIEFSUkFZX1NJWkUod204OTA0X2VxX2NvbnRyb2xzKSk7Cit9CisKK3N0YXRpYyBpbnQgd204OTA0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldCA9IDA7CisKKwlpZiAod204OTA0X2NvZGVjID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ29kZWMgZGV2aWNlIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IHdtODkwNF9jb2RlYzsKKwljb2RlYyA9IHdtODkwNF9jb2RlYzsKKworCS8qIHJlZ2lzdGVyIHBjbXMgKi8KKwlyZXQgPSBzbmRfc29jX25ld19wY21zKHNvY2RldiwgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNtczogJWRcbiIsIHJldCk7CisJCWdvdG8gcGNtX2VycjsKKwl9CisKKwl3bTg5MDRfaGFuZGxlX3BkYXRhKGNvZGVjLT5wcml2YXRlX2RhdGEpOworCisJd204OTA0X2FkZF93aWRnZXRzKGNvZGVjKTsKKworCXJldHVybiByZXQ7CisKK3BjbV9lcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bTg5MDRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg5MDQgPSB7CisJLnByb2JlID0gCXdtODkwNF9wcm9iZSwKKwkucmVtb3ZlID0gCXdtODkwNF9yZW1vdmUsCisJLnN1c3BlbmQgPSAJd204OTA0X3N1c3BlbmQsCisJLnJlc3VtZSA9CXdtODkwNF9yZXN1bWUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg5MDQpOworCitzdGF0aWMgaW50IHdtODkwNF9yZWdpc3RlcihzdHJ1Y3Qgd204OTA0X3ByaXYgKndtODkwNCwKKwkJCSAgIGVudW0gc25kX3NvY19jb250cm9sX3R5cGUgY29udHJvbCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg5MDQtPmNvZGVjOworCWludCBpOworCisJaWYgKHdtODkwNF9jb2RlYykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJBbm90aGVyIFdNODkwNCBpcyByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKKworCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg5MDQ7CisJY29kZWMtPm5hbWUgPSAiV004OTA0IjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CisJY29kZWMtPnNldF9iaWFzX2xldmVsID0gd204OTA0X3NldF9iaWFzX2xldmVsOworCWNvZGVjLT5kYWkgPSAmd204OTA0X2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDE7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gV004OTA0X01BWF9SRUdJU1RFUjsKKwljb2RlYy0+cmVnX2NhY2hlID0gJndtODkwNC0+cmVnX2NhY2hlOworCWNvZGVjLT52b2xhdGlsZV9yZWdpc3RlciA9IHdtODkwNF92b2xhdGlsZV9yZWdpc3RlcjsKKwljb2RlYy0+Y2FjaGVfc3luYyA9IDE7CisJY29kZWMtPmlkbGVfYmlhc19vZmYgPSAxOworCisJc3dpdGNoICh3bTg5MDQtPmRldnR5cGUpIHsKKwljYXNlIFdNODkwNDoKKwkJYnJlYWs7CisJY2FzZSBXTTg5MTI6CisJCW1lbXNldCgmd204OTA0X2RhaS5jYXB0dXJlLCAwLCBzaXplb2Yod204OTA0X2RhaS5jYXB0dXJlKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoY29kZWMtPmRldiwgIlVua25vd24gZGV2aWNlIHR5cGUgJWRcbiIsCisJCQl3bTg5MDQtPmRldnR5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgd204OTA0X3JlZywgc2l6ZW9mKHdtODkwNF9yZWcpKTsKKworCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA4LCAxNiwgY29udHJvbCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTA0LT5zdXBwbGllcyk7IGkrKykKKwkJd204OTA0LT5zdXBwbGllc1tpXS5zdXBwbHkgPSB3bTg5MDRfc3VwcGx5X25hbWVzW2ldOworCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZ2V0KGNvZGVjLT5kZXYsIEFSUkFZX1NJWkUod204OTA0LT5zdXBwbGllcyksCisJCQkJIHdtODkwNC0+c3VwcGxpZXMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODkwNC0+c3VwcGxpZXMpLAorCQkJCSAgICB3bTg5MDQtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2dldDsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwNF9TV19SRVNFVF9BTkRfSUQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWFkIElEIHJlZ2lzdGVyXG4iKTsKKwkJZ290byBlcnJfZW5hYmxlOworCX0KKwlpZiAocmV0ICE9IHdtODkwNF9yZWdbV004OTA0X1NXX1JFU0VUX0FORF9JRF0pIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRGV2aWNlIGlzIG5vdCBhIFdNODkwNCwgSUQgaXMgJXhcbiIsIHJldCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODkwNF9SRVZJU0lPTik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgZGV2aWNlIHJldmlzaW9uOiAlZFxuIiwKKwkJCXJldCk7CisJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisJZGV2X2luZm8oY29kZWMtPmRldiwgInJldmlzaW9uICVjXG4iLCByZXQgKyAnQScpOworCisJcmV0ID0gd204OTA0X3Jlc2V0KGNvZGVjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXRcbiIpOworCQlnb3RvIGVycl9lbmFibGU7CisJfQorCisJd204OTA0X2RhaS5kZXYgPSBjb2RlYy0+ZGV2OworCisJLyogQ2hhbmdlIHNvbWUgZGVmYXVsdCBzZXR0aW5ncyAtIGxhdGNoIFZVIGFuZCBlbmFibGUgWkMgKi8KKwl3bTg5MDQtPnJlZ19jYWNoZVtXTTg5MDRfQURDX0RJR0lUQUxfVk9MVU1FX0xFRlRdIHw9IFdNODkwNF9BRENfVlU7CisJd204OTA0LT5yZWdfY2FjaGVbV004OTA0X0FEQ19ESUdJVEFMX1ZPTFVNRV9SSUdIVF0gfD0gV004OTA0X0FEQ19WVTsKKwl3bTg5MDQtPnJlZ19jYWNoZVtXTTg5MDRfREFDX0RJR0lUQUxfVk9MVU1FX0xFRlRdIHw9IFdNODkwNF9EQUNfVlU7CisJd204OTA0LT5yZWdfY2FjaGVbV004OTA0X0RBQ19ESUdJVEFMX1ZPTFVNRV9SSUdIVF0gfD0gV004OTA0X0RBQ19WVTsKKwl3bTg5MDQtPnJlZ19jYWNoZVtXTTg5MDRfQU5BTE9HVUVfT1VUMV9MRUZUXSB8PSBXTTg5MDRfSFBPVVRfVlUgfAorCQlXTTg5MDRfSFBPVVRMWkM7CisJd204OTA0LT5yZWdfY2FjaGVbV004OTA0X0FOQUxPR1VFX09VVDFfUklHSFRdIHw9IFdNODkwNF9IUE9VVF9WVSB8CisJCVdNODkwNF9IUE9VVFJaQzsKKwl3bTg5MDQtPnJlZ19jYWNoZVtXTTg5MDRfQU5BTE9HVUVfT1VUMl9MRUZUXSB8PSBXTTg5MDRfTElORU9VVF9WVSB8CisJCVdNODkwNF9MSU5FT1VUTFpDOworCXdtODkwNC0+cmVnX2NhY2hlW1dNODkwNF9BTkFMT0dVRV9PVVQyX1JJR0hUXSB8PSBXTTg5MDRfTElORU9VVF9WVSB8CisJCVdNODkwNF9MSU5FT1VUUlpDOworCXdtODkwNC0+cmVnX2NhY2hlW1dNODkwNF9DTE9DS19SQVRFU18wXSAmPSB+V004OTA0X1NSX01PREU7CisKKwkvKiBTZXQgQ2xhc3MgVyBieSBkZWZhdWx0IC0gdGhpcyB3aWxsIGJlIG1hbmFnZWQgYnkgdGhlIENsYXNzCisJICogRyB3aWRnZXQgYXQgcnVudGltZSB3aGVyZSBieXBhc3MgcGF0aHMgYXJlIGF2YWlsYWJsZS4KKwkgKi8KKwl3bTg5MDQtPnJlZ19jYWNoZVtXTTg5MDRfQ0xBU1NfV18wXSB8PSBXTTg5MDRfQ1BfRFlOX1BXUjsKKworCS8qIFVzZSBub3JtYWwgYmlhcyBzb3VyY2UgKi8KKwl3bTg5MDQtPnJlZ19jYWNoZVtXTTg5MDRfQklBU19DT05UUk9MXzBdICY9IH5XTTg5MDRfUE9CQ1RSTDsKKworCXdtODkwNF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJLyogQmlhcyBsZXZlbCBjb25maWd1cmF0aW9uIHdpbGwgaGF2ZSBkb25lIGFuIGV4dHJhIGVuYWJsZSAqLworCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5MDQtPnN1cHBsaWVzKSwgd204OTA0LT5zdXBwbGllcyk7CisKKwl3bTg5MDRfY29kZWMgPSBjb2RlYzsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29kZWM6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZ3bTg5MDRfZGFpKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7CisJCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9lbmFibGU6CisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODkwNC0+c3VwcGxpZXMpLCB3bTg5MDQtPnN1cHBsaWVzKTsKK2Vycl9nZXQ6CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHdtODkwNC0+c3VwcGxpZXMpLCB3bTg5MDQtPnN1cHBsaWVzKTsKK2VycjoKKwlrZnJlZSh3bTg5MDQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdtODkwNF91bnJlZ2lzdGVyKHN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0KQoreworCXdtODkwNF9zZXRfYmlhc19sZXZlbCgmd204OTA0LT5jb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJcmVndWxhdG9yX2J1bGtfZnJlZShBUlJBWV9TSVpFKHdtODkwNC0+c3VwcGxpZXMpLCB3bTg5MDQtPnN1cHBsaWVzKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZ3bTg5MDRfZGFpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJndtODkwNC0+Y29kZWMpOworCWtmcmVlKHdtODkwNCk7CisJd204OTA0X2NvZGVjID0gTlVMTDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKK3N0YXRpYyBfX2RldmluaXQgaW50IHdtODkwNF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCisJd204OTA0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODkwNF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdtODkwNCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjID0gJndtODkwNC0+Y29kZWM7CisJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOworCisJd204OTA0LT5kZXZ0eXBlID0gaWQtPmRyaXZlcl9kYXRhOworCisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgd204OTA0KTsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOworCXdtODkwNC0+cGRhdGEgPSBpMmMtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJY29kZWMtPmRldiA9ICZpMmMtPmRldjsKKworCXJldHVybiB3bTg5MDRfcmVnaXN0ZXIod204OTA0LCBTTkRfU09DX0kyQyk7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgaW50IHdtODkwNF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl3bTg5MDRfdW5yZWdpc3Rlcih3bTg5MDQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204OTA0X2kyY19pZFtdID0geworCXsgIndtODkwNCIsIFdNODkwNCB9LAorCXsgIndtODkxMiIsIFdNODkxMiB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg5MDRfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODkwNF9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIldNODkwNCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gICAgd204OTA0X2kyY19wcm9iZSwKKwkucmVtb3ZlID0gICBfX2RldmV4aXRfcCh3bTg5MDRfaTJjX3JlbW92ZSksCisJLmlkX3RhYmxlID0gd204OTA0X2kyY19pZCwKK307CisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgd204OTA0X21vZGluaXQodm9pZCkKK3sKKwlpbnQgcmV0OworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmd204OTA0X2kyY19kcml2ZXIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBXTTg5MDQgSTJDIGRyaXZlcjogJWRcbiIsCisJCSAgICAgICByZXQpOworCX0KKyNlbmRpZgorCXJldHVybiAwOworfQorbW9kdWxlX2luaXQod204OTA0X21vZGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd204OTA0X2V4aXQodm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9kcml2ZXIoJndtODkwNF9pMmNfZHJpdmVyKTsKKyNlbmRpZgorfQorbW9kdWxlX2V4aXQod204OTA0X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgV004OTA0IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwNC5oIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjg4ODZkCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDQuaApAQCAtMCwwICsxLDE2ODEgQEAKKy8qCisgKiB3bTg5MDQuaCAgLS0gIFdNODkwNCBBU29DIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcywgcGxjCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX1dNODkwNF9ICisjZGVmaW5lIF9XTTg5MDRfSAorCisjZGVmaW5lIFdNODkwNF9DTEtfTUNMSyAxCisjZGVmaW5lIFdNODkwNF9DTEtfRkxMICAyCisKKyNkZWZpbmUgV004OTA0X0ZMTF9NQ0xLICAgICAgICAgIDEKKyNkZWZpbmUgV004OTA0X0ZMTF9CQ0xLICAgICAgICAgIDIKKyNkZWZpbmUgV004OTA0X0ZMTF9MUkNMSyAgICAgICAgIDMKKyNkZWZpbmUgV004OTA0X0ZMTF9GUkVFX1JVTk5JTkcgIDQKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg5MDRfZGFpOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODkwNDsKKworLyoKKyAqIFJlZ2lzdGVyIHZhbHVlcy4KKyAqLworI2RlZmluZSBXTTg5MDRfU1dfUkVTRVRfQU5EX0lEICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBXTTg5MDRfUkVWSVNJT04JCQkJMHgwMQorI2RlZmluZSBXTTg5MDRfQklBU19DT05UUk9MXzAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBXTTg5MDRfVk1JRF9DT05UUk9MXzAgICAgICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBXTTg5MDRfTUlDX0JJQVNfQ09OVFJPTF8wICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBXTTg5MDRfTUlDX0JJQVNfQ09OVFJPTF8xICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfREFDXzAgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBXTTg5MDRfTUlDX0ZJTFRFUl9DT05UUk9MICAgICAgICAgICAgICAgMHgwOQorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfQURDXzAgICAgICAgICAgICAgICAgICAgMHgwQQorI2RlZmluZSBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF8wICAgICAgICAgICAgICAgMHgwQworI2RlZmluZSBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF8yICAgICAgICAgICAgICAgMHgwRQorI2RlZmluZSBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF8zICAgICAgICAgICAgICAgMHgwRgorI2RlZmluZSBXTTg5MDRfUE9XRVJfTUFOQUdFTUVOVF82ICAgICAgICAgICAgICAgMHgxMgorI2RlZmluZSBXTTg5MDRfQ0xPQ0tfUkFURVNfMCAgICAgICAgICAgICAgICAgICAgMHgxNAorI2RlZmluZSBXTTg5MDRfQ0xPQ0tfUkFURVNfMSAgICAgICAgICAgICAgICAgICAgMHgxNQorI2RlZmluZSBXTTg5MDRfQ0xPQ0tfUkFURVNfMiAgICAgICAgICAgICAgICAgICAgMHgxNgorI2RlZmluZSBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzAgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzEgICAgICAgICAgICAgICAgMHgxOQorI2RlZmluZSBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzIgICAgICAgICAgICAgICAgMHgxQQorI2RlZmluZSBXTTg5MDRfQVVESU9fSU5URVJGQUNFXzMgICAgICAgICAgICAgICAgMHgxQgorI2RlZmluZSBXTTg5MDRfREFDX0RJR0lUQUxfVk9MVU1FX0xFRlQgICAgICAgICAgMHgxRQorI2RlZmluZSBXTTg5MDRfREFDX0RJR0lUQUxfVk9MVU1FX1JJR0hUICAgICAgICAgMHgxRgorI2RlZmluZSBXTTg5MDRfREFDX0RJR0lUQUxfMCAgICAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBXTTg5MDRfREFDX0RJR0lUQUxfMSAgICAgICAgICAgICAgICAgICAgMHgyMQorI2RlZmluZSBXTTg5MDRfQURDX0RJR0lUQUxfVk9MVU1FX0xFRlQgICAgICAgICAgMHgyNAorI2RlZmluZSBXTTg5MDRfQURDX0RJR0lUQUxfVk9MVU1FX1JJR0hUICAgICAgICAgMHgyNQorI2RlZmluZSBXTTg5MDRfQURDX0RJR0lUQUxfMCAgICAgICAgICAgICAgICAgICAgMHgyNgorI2RlZmluZSBXTTg5MDRfRElHSVRBTF9NSUNST1BIT05FXzAgICAgICAgICAgICAgMHgyNworI2RlZmluZSBXTTg5MDRfRFJDXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBXTTg5MDRfRFJDXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyOQorI2RlZmluZSBXTTg5MDRfRFJDXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyQQorI2RlZmluZSBXTTg5MDRfRFJDXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyQgorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfTEVGVF9JTlBVVF8wICAgICAgICAgICAgMHgyQworI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfUklHSFRfSU5QVVRfMCAgICAgICAgICAgMHgyRAorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfTEVGVF9JTlBVVF8xICAgICAgICAgICAgMHgyRQorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfUklHSFRfSU5QVVRfMSAgICAgICAgICAgMHgyRgorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfT1VUMV9MRUZUICAgICAgICAgICAgICAgMHgzOQorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfT1VUMV9SSUdIVCAgICAgICAgICAgICAgMHgzQQorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfT1VUMl9MRUZUICAgICAgICAgICAgICAgMHgzQgorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfT1VUMl9SSUdIVCAgICAgICAgICAgICAgMHgzQworI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfT1VUMTJfWkMgICAgICAgICAgICAgICAgMHgzRAorI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fMCAgICAgICAgICAgICAgICAgICAgICAgMHg0MworI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fMSAgICAgICAgICAgICAgICAgICAgICAgMHg0NAorI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fMiAgICAgICAgICAgICAgICAgICAgICAgMHg0NQorI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fNCAgICAgICAgICAgICAgICAgICAgICAgMHg0NworI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fNSAgICAgICAgICAgICAgICAgICAgICAgMHg0OAorI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fNiAgICAgICAgICAgICAgICAgICAgICAgMHg0OQorI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fNyAgICAgICAgICAgICAgICAgICAgICAgMHg0QQorI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fOCAgICAgICAgICAgICAgICAgICAgICAgMHg0QgorI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fOSAgICAgICAgICAgICAgICAgICAgICAgMHg0QworI2RlZmluZSBXTTg5MDRfRENfU0VSVk9fUkVBREJBQ0tfMCAgICAgICAgICAgICAgMHg0RAorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfSFBfMCAgICAgICAgICAgICAgICAgICAgMHg1QQorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfTElORU9VVF8wICAgICAgICAgICAgICAgMHg1RQorI2RlZmluZSBXTTg5MDRfQ0hBUkdFX1BVTVBfMCAgICAgICAgICAgICAgICAgICAgMHg2MgorI2RlZmluZSBXTTg5MDRfQ0xBU1NfV18wICAgICAgICAgICAgICAgICAgICAgICAgMHg2OAorI2RlZmluZSBXTTg5MDRfV1JJVEVfU0VRVUVOQ0VSXzAgICAgICAgICAgICAgICAgMHg2QworI2RlZmluZSBXTTg5MDRfV1JJVEVfU0VRVUVOQ0VSXzEgICAgICAgICAgICAgICAgMHg2RAorI2RlZmluZSBXTTg5MDRfV1JJVEVfU0VRVUVOQ0VSXzIgICAgICAgICAgICAgICAgMHg2RQorI2RlZmluZSBXTTg5MDRfV1JJVEVfU0VRVUVOQ0VSXzMgICAgICAgICAgICAgICAgMHg2RgorI2RlZmluZSBXTTg5MDRfV1JJVEVfU0VRVUVOQ0VSXzQgICAgICAgICAgICAgICAgMHg3MAorI2RlZmluZSBXTTg5MDRfRkxMX0NPTlRST0xfMSAgICAgICAgICAgICAgICAgICAgMHg3NAorI2RlZmluZSBXTTg5MDRfRkxMX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgICAgMHg3NQorI2RlZmluZSBXTTg5MDRfRkxMX0NPTlRST0xfMyAgICAgICAgICAgICAgICAgICAgMHg3NgorI2RlZmluZSBXTTg5MDRfRkxMX0NPTlRST0xfNCAgICAgICAgICAgICAgICAgICAgMHg3NworI2RlZmluZSBXTTg5MDRfRkxMX0NPTlRST0xfNSAgICAgICAgICAgICAgICAgICAgMHg3OAorI2RlZmluZSBXTTg5MDRfR1BJT19DT05UUk9MXzEgICAgICAgICAgICAgICAgICAgMHg3OQorI2RlZmluZSBXTTg5MDRfR1BJT19DT05UUk9MXzIgICAgICAgICAgICAgICAgICAgMHg3QQorI2RlZmluZSBXTTg5MDRfR1BJT19DT05UUk9MXzMgICAgICAgICAgICAgICAgICAgMHg3QgorI2RlZmluZSBXTTg5MDRfR1BJT19DT05UUk9MXzQgICAgICAgICAgICAgICAgICAgMHg3QworI2RlZmluZSBXTTg5MDRfRElHSVRBTF9QVUxMUyAgICAgICAgICAgICAgICAgICAgMHg3RQorI2RlZmluZSBXTTg5MDRfSU5URVJSVVBUX1NUQVRVUyAgICAgICAgICAgICAgICAgMHg3RgorI2RlZmluZSBXTTg5MDRfSU5URVJSVVBUX1NUQVRVU19NQVNLICAgICAgICAgICAgMHg4MAorI2RlZmluZSBXTTg5MDRfSU5URVJSVVBUX1BPTEFSSVRZICAgICAgICAgICAgICAgMHg4MQorI2RlZmluZSBXTTg5MDRfSU5URVJSVVBUX0RFQk9VTkNFICAgICAgICAgICAgICAgMHg4MgorI2RlZmluZSBXTTg5MDRfRVExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NgorI2RlZmluZSBXTTg5MDRfRVEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NworI2RlZmluZSBXTTg5MDRfRVEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OAorI2RlZmluZSBXTTg5MDRfRVE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OQorI2RlZmluZSBXTTg5MDRfRVE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QQorI2RlZmluZSBXTTg5MDRfRVE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QgorI2RlZmluZSBXTTg5MDRfRVE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QworI2RlZmluZSBXTTg5MDRfRVE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RAorI2RlZmluZSBXTTg5MDRfRVE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RQorI2RlZmluZSBXTTg5MDRfRVExMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RgorI2RlZmluZSBXTTg5MDRfRVExMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MAorI2RlZmluZSBXTTg5MDRfRVExMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MQorI2RlZmluZSBXTTg5MDRfRVExMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MgorI2RlZmluZSBXTTg5MDRfRVExNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MworI2RlZmluZSBXTTg5MDRfRVExNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5NAorI2RlZmluZSBXTTg5MDRfRVExNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5NQorI2RlZmluZSBXTTg5MDRfRVExNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5NgorI2RlZmluZSBXTTg5MDRfRVExOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5NworI2RlZmluZSBXTTg5MDRfRVExOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OAorI2RlZmluZSBXTTg5MDRfRVEyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OQorI2RlZmluZSBXTTg5MDRfRVEyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5QQorI2RlZmluZSBXTTg5MDRfRVEyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5QgorI2RlZmluZSBXTTg5MDRfRVEyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5QworI2RlZmluZSBXTTg5MDRfRVEyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5RAorI2RlZmluZSBXTTg5MDRfQ09OVFJPTF9JTlRFUkZBQ0VfVEVTVF8xICAgICAgICAgMHhBMQorI2RlZmluZSBXTTg5MDRfQU5BTE9HVUVfT1VUUFVUX0JJQVNfMCAgICAgICAgICAgMHhDQworI2RlZmluZSBXTTg5MDRfRkxMX05DT19URVNUXzAgICAgICAgICAgICAgICAgICAgMHhGNworI2RlZmluZSBXTTg5MDRfRkxMX05DT19URVNUXzEgICAgICAgICAgICAgICAgICAgMHhGOAorCisjZGVmaW5lIFdNODkwNF9SRUdJU1RFUl9DT1VOVCAgICAgICAgICAgICAgICAgICAxMDEKKyNkZWZpbmUgV004OTA0X01BWF9SRUdJU1RFUiAgICAgICAgICAgICAgICAgICAgIDB4RjgKKworLyoKKyAqIEZpZWxkIERlZmluaXRpb25zLgorICovCisKKy8qCisgKiBSMCAoMHgwMCkgLSBTVyBSZXNldCBhbmQgSUQKKyAqLworI2RlZmluZSBXTTg5MDRfU1dfUlNUX0RFVl9JRDFfTUFTSyAgICAgICAgICAgICAgMHhGRkZGICAvKiBTV19SU1RfREVWX0lEMSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfU1dfUlNUX0RFVl9JRDFfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBTV19SU1RfREVWX0lEMSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfU1dfUlNUX0RFVl9JRDFfV0lEVEggICAgICAgICAgICAgICAgIDE2ICAvKiBTV19SU1RfREVWX0lEMSAtIFsxNTowXSAqLworCisvKgorICogUjEgKDB4MDEpIC0gUmV2aXNpb24KKyAqLworI2RlZmluZSBXTTg5MDRfUkVWSVNJT05fTUFTSyAgICAgICAgICAgICAgCTB4MDAwRiAgLyogUkVWSVNJT04gLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfUkVWSVNJT05fU0hJRlQgICAgICAgICAgICAgCSAgICAgMCAgLyogUkVWSVNJT04gLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfUkVWSVNJT05fV0lEVEggICAgICAgICAgICAgCSAgICAxNiAgLyogUkVWSVNJT04gLSBbMzowXSAqLworCisvKgorICogUjQgKDB4MDQpIC0gQmlhcyBDb250cm9sIDAKKyAqLworI2RlZmluZSBXTTg5MDRfUE9CQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBQT0JDVFJMICovCisjZGVmaW5lIFdNODkwNF9QT0JDVFJMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFBPQkNUUkwgKi8KKyNkZWZpbmUgV004OTA0X1BPQkNUUkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogUE9CQ1RSTCAqLworI2RlZmluZSBXTTg5MDRfUE9CQ1RSTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBQT0JDVFJMICovCisjZGVmaW5lIFdNODkwNF9JU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEMgIC8qIElTRUwgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfSVNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBJU0VMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0lTRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogSVNFTCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9TVEFSVFVQX0JJQVNfRU5BICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFNUQVJUVVBfQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X1NUQVJUVVBfQklBU19FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogU1RBUlRVUF9CSUFTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfU1RBUlRVUF9CSUFTX0VOQV9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBTVEFSVFVQX0JJQVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9TVEFSVFVQX0JJQVNfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIFNUQVJUVVBfQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0JJQVNfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0JJQVNfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0JJQVNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0JJQVNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQklBU19FTkEgKi8KKworLyoKKyAqIFI1ICgweDA1KSAtIFZNSUQgQ29udHJvbCAwCisgKi8KKyNkZWZpbmUgV004OTA0X1ZNSURfQlVGX0VOQSAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVk1JRF9CVUZfRU5BICovCisjZGVmaW5lIFdNODkwNF9WTUlEX0JVRl9FTkFfTUFTSyAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFZNSURfQlVGX0VOQSAqLworI2RlZmluZSBXTTg5MDRfVk1JRF9CVUZfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICA2ICAvKiBWTUlEX0JVRl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X1ZNSURfQlVGX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogVk1JRF9CVUZfRU5BICovCisjZGVmaW5lIFdNODkwNF9WTUlEX1JFU19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDYgIC8qIFZNSURfUkVTIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTA0X1ZNSURfUkVTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVk1JRF9SRVMgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5MDRfVk1JRF9SRVNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBWTUlEX1JFUyAtIFsyOjFdICovCisjZGVmaW5lIFdNODkwNF9WTUlEX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFZNSURfRU5BICovCisjZGVmaW5lIFdNODkwNF9WTUlEX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFZNSURfRU5BICovCisjZGVmaW5lIFdNODkwNF9WTUlEX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFZNSURfRU5BICovCisjZGVmaW5lIFdNODkwNF9WTUlEX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFZNSURfRU5BICovCisKKy8qCisgKiBSNiAoMHgwNikgLSBNaWMgQmlhcyBDb250cm9sIDAKKyAqLworI2RlZmluZSBXTTg5MDRfTUlDREVUX1RIUl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDcwICAvKiBNSUNERVRfVEhSIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTA0X01JQ0RFVF9USFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTUlDREVUX1RIUiAtIFs2OjRdICovCisjZGVmaW5lIFdNODkwNF9NSUNERVRfVEhSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIE1JQ0RFVF9USFIgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5MDRfTUlDU0hPUlRfVEhSX01BU0sgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBNSUNTSE9SVF9USFIgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfTUlDU0hPUlRfVEhSX1NISUZUICAgICAgICAgICAgICAgICAgICAyICAvKiBNSUNTSE9SVF9USFIgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfTUlDU0hPUlRfVEhSX1dJRFRIICAgICAgICAgICAgICAgICAgICAyICAvKiBNSUNTSE9SVF9USFIgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfTUlDREVUX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNERVRfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNERVRfRU5BX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ0RFVF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ0RFVF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDREVUX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTUlDREVUX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNERVRfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNCSUFTX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0JJQVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNCSUFTX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0JJQVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNCSUFTX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1JQ0JJQVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNCSUFTX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0JJQVNfRU5BICovCisKKy8qCisgKiBSNyAoMHgwNykgLSBNaWMgQmlhcyBDb250cm9sIDEKKyAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9GSUxURVJfRU5BICAgICAgICAgICAgICAgMHg4MDAwICAvKiBNSUNfREVUX0ZJTFRFUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRklMVEVSX0VOQV9NQVNLICAgICAgICAgIDB4ODAwMCAgLyogTUlDX0RFVF9GSUxURVJfRU5BICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0ZJTFRFUl9FTkFfU0hJRlQgICAgICAgICAgICAgMTUgIC8qIE1JQ19ERVRfRklMVEVSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9GSUxURVJfRU5BX1dJRFRIICAgICAgICAgICAgICAxICAvKiBNSUNfREVUX0ZJTFRFUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSE9SVF9GSUxURVJfRU5BICAgICAgICAgICAgIDB4NDAwMCAgLyogTUlDX1NIT1JUX0ZJTFRFUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSE9SVF9GSUxURVJfRU5BX01BU0sgICAgICAgIDB4NDAwMCAgLyogTUlDX1NIT1JUX0ZJTFRFUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSE9SVF9GSUxURVJfRU5BX1NISUZUICAgICAgICAgICAxNCAgLyogTUlDX1NIT1JUX0ZJTFRFUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSE9SVF9GSUxURVJfRU5BX1dJRFRIICAgICAgICAgICAgMSAgLyogTUlDX1NIT1JUX0ZJTFRFUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X01JQ0JJQVNfU0VMX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogTUlDQklBU19TRUwgLSBbMjowXSAqLworI2RlZmluZSBXTTg5MDRfTUlDQklBU19TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBNSUNCSUFTX1NFTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODkwNF9NSUNCSUFTX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIE1JQ0JJQVNfU0VMIC0gWzI6MF0gKi8KKworLyoKKyAqIFI4ICgweDA4KSAtIEFuYWxvZ3VlIERBQyAwCisgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19CSUFTX1NFTF9NQVNLICAgICAgICAgICAgICAgIDB4MDAxOCAgLyogREFDX0JJQVNfU0VMIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTA0X0RBQ19CSUFTX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgMyAgLyogREFDX0JJQVNfU0VMIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTA0X0RBQ19CSUFTX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgMiAgLyogREFDX0JJQVNfU0VMIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTA0X0RBQ19WTUlEX0JJQVNfU0VMX01BU0sgICAgICAgICAgIDB4MDAwNiAgLyogREFDX1ZNSURfQklBU19TRUwgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5MDRfREFDX1ZNSURfQklBU19TRUxfU0hJRlQgICAgICAgICAgICAgICAxICAvKiBEQUNfVk1JRF9CSUFTX1NFTCAtIFsyOjFdICovCisjZGVmaW5lIFdNODkwNF9EQUNfVk1JRF9CSUFTX1NFTF9XSURUSCAgICAgICAgICAgICAgIDIgIC8qIERBQ19WTUlEX0JJQVNfU0VMIC0gWzI6MV0gKi8KKworLyoKKyAqIFI5ICgweDA5KSAtIG1pYyBGaWx0ZXIgQ29udHJvbAorICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX1NFVF9USFJFU0hPTERfTUFTSyAgICAgICAweEYwMDAgIC8qIE1JQ19ERVRfU0VUX1RIUkVTSE9MRCAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfU0VUX1RIUkVTSE9MRF9TSElGVCAgICAgICAgICAxMiAgLyogTUlDX0RFVF9TRVRfVEhSRVNIT0xEIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9TRVRfVEhSRVNIT0xEX1dJRFRIICAgICAgICAgICA0ICAvKiBNSUNfREVUX1NFVF9USFJFU0hPTEQgLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX1JFU0VUX1RIUkVTSE9MRF9NQVNLICAgICAweDBGMDAgIC8qIE1JQ19ERVRfUkVTRVRfVEhSRVNIT0xEIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX1JFU0VUX1RIUkVTSE9MRF9TSElGVCAgICAgICAgIDggIC8qIE1JQ19ERVRfUkVTRVRfVEhSRVNIT0xEIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX1JFU0VUX1RIUkVTSE9MRF9XSURUSCAgICAgICAgIDQgIC8qIE1JQ19ERVRfUkVTRVRfVEhSRVNIT0xEIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hPUlRfU0VUX1RIUkVTSE9MRF9NQVNLICAgICAweDAwRjAgIC8qIE1JQ19TSE9SVF9TRVRfVEhSRVNIT0xEIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSE9SVF9TRVRfVEhSRVNIT0xEX1NISUZUICAgICAgICAgNCAgLyogTUlDX1NIT1JUX1NFVF9USFJFU0hPTEQgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIT1JUX1NFVF9USFJFU0hPTERfV0lEVEggICAgICAgICA0ICAvKiBNSUNfU0hPUlRfU0VUX1RIUkVTSE9MRCAtIFs3OjRdICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hPUlRfUkVTRVRfVEhSRVNIT0xEX01BU0sgICAweDAwMEYgIC8qIE1JQ19TSE9SVF9SRVNFVF9USFJFU0hPTEQgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIT1JUX1JFU0VUX1RIUkVTSE9MRF9TSElGVCAgICAgICAwICAvKiBNSUNfU0hPUlRfUkVTRVRfVEhSRVNIT0xEIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSE9SVF9SRVNFVF9USFJFU0hPTERfV0lEVEggICAgICAgNCAgLyogTUlDX1NIT1JUX1JFU0VUX1RIUkVTSE9MRCAtIFszOjBdICovCisKKy8qCisgKiBSMTAgKDB4MEEpIC0gQW5hbG9ndWUgQURDIDAKKyAqLworI2RlZmluZSBXTTg5MDRfQURDX09TUjEyOCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENfT1NSMTI4ICovCisjZGVmaW5lIFdNODkwNF9BRENfT1NSMTI4X01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFEQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTA0X0FEQ19PU1IxMjhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDX09TUjEyOCAqLworI2RlZmluZSBXTTg5MDRfQURDX09TUjEyOF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENfT1NSMTI4ICovCisKKy8qCisgKiBSMTIgKDB4MEMpIC0gUG93ZXIgTWFuYWdlbWVudCAwCisgKi8KKyNkZWZpbmUgV004OTA0X0lOTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU5MX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSU5MX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBJTkxfRU5BICovCisjZGVmaW5lIFdNODkwNF9JTkxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0lOTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU5MX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSU5SX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBJTlJfRU5BICovCisjZGVmaW5lIFdNODkwNF9JTlJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIElOUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0lOUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSU5SX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSU5SX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTlJfRU5BICovCisKKy8qCisgKiBSMTQgKDB4MEUpIC0gUG93ZXIgTWFuYWdlbWVudCAyCisgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9QR0FfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFBMX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9QR0FfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFBMX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9QR0FfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBMX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9QR0FfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBMX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9QR0FfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSFBSX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9QR0FfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSFBSX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9QR0FfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFBSX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9QR0FfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBSX1BHQV9FTkEgKi8KKworLyoKKyAqIFIxNSAoMHgwRikgLSBQb3dlciBNYW5hZ2VtZW50IDMKKyAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfUEdBX0VOQSAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBMSU5FT1VUTF9QR0FfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9QR0FfRU5BX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIExJTkVPVVRMX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX1BHQV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVExfUEdBX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfUEdBX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUTF9QR0FfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9QR0FfRU5BICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExJTkVPVVRSX1BHQV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX1BHQV9FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwMSAgLyogTElORU9VVFJfUEdBX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfUEdBX0VOQV9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBMSU5FT1VUUl9QR0FfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9QR0FfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRSX1BHQV9FTkEgKi8KKworLyoKKyAqIFIxOCAoMHgxMikgLSBQb3dlciBNYW5hZ2VtZW50IDYKKyAqLworI2RlZmluZSBXTTg5MDRfREFDTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfREFDTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfREFDTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBEQUNMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfREFDTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfREFDUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQUNSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfREFDUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQUNSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfREFDUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBEQUNSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfREFDUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQURDTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQURDTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQURDTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQURDTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQURDUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQURDUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQURDUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBBRENSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQURDUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENSX0VOQSAqLworCisvKgorICogUjIwICgweDE0KSAtIENsb2NrIFJhdGVzIDAKKyAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfUkFURV9ESVYxNiAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBUT0NMS19SQVRFX0RJVjE2ICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19SQVRFX0RJVjE2X01BU0sgICAgICAgICAgICAweDQwMDAgIC8qIFRPQ0xLX1JBVEVfRElWMTYgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX1JBVEVfRElWMTZfU0hJRlQgICAgICAgICAgICAgICAxNCAgLyogVE9DTEtfUkFURV9ESVYxNiAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfUkFURV9ESVYxNl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBUT0NMS19SQVRFX0RJVjE2ICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19SQVRFX1g0ICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIFRPQ0xLX1JBVEVfWDQgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX1JBVEVfWDRfTUFTSyAgICAgICAgICAgICAgIDB4MjAwMCAgLyogVE9DTEtfUkFURV9YNCAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfUkFURV9YNF9TSElGVCAgICAgICAgICAgICAgICAgIDEzICAvKiBUT0NMS19SQVRFX1g0ICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19SQVRFX1g0X1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIFRPQ0xLX1JBVEVfWDQgKi8KKyNkZWZpbmUgV004OTA0X1NSX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogU1JfTU9ERSAqLworI2RlZmluZSBXTTg5MDRfU1JfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBTUl9NT0RFICovCisjZGVmaW5lIFdNODkwNF9TUl9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIFNSX01PREUgKi8KKyNkZWZpbmUgV004OTA0X1NSX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1JfTU9ERSAqLworI2RlZmluZSBXTTg5MDRfTUNMS19ESVYgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNQ0xLX0RJViAqLworI2RlZmluZSBXTTg5MDRfTUNMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNQ0xLX0RJViAqLworI2RlZmluZSBXTTg5MDRfTUNMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBNQ0xLX0RJViAqLworI2RlZmluZSBXTTg5MDRfTUNMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0xLX0RJViAqLworCisvKgorICogUjIxICgweDE1KSAtIENsb2NrIFJhdGVzIDEKKyAqLworI2RlZmluZSBXTTg5MDRfQ0xLX1NZU19SQVRFX01BU0sgICAgICAgICAgICAgICAgMHgzQzAwICAvKiBDTEtfU1lTX1JBVEUgLSBbMTM6MTBdICovCisjZGVmaW5lIFdNODkwNF9DTEtfU1lTX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgMTAgIC8qIENMS19TWVNfUkFURSAtIFsxMzoxMF0gKi8KKyNkZWZpbmUgV004OTA0X0NMS19TWVNfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgNCAgLyogQ0xLX1NZU19SQVRFIC0gWzEzOjEwXSAqLworI2RlZmluZSBXTTg5MDRfU0FNUExFX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBTQU1QTEVfUkFURSAtIFsyOjBdICovCisjZGVmaW5lIFdNODkwNF9TQU1QTEVfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNBTVBMRV9SQVRFIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTA0X1NBTVBMRV9SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMyAgLyogU0FNUExFX1JBVEUgLSBbMjowXSAqLworCisvKgorICogUjIyICgweDE2KSAtIENsb2NrIFJhdGVzIDIKKyAqLworI2RlZmluZSBXTTg5MDRfTUNMS19JTlYgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBNQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MDRfTUNMS19JTlZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBNQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MDRfTUNMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBNQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MDRfTUNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MDRfU1lTQ0xLX1NSQyAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBTWVNDTEtfU1JDICovCisjZGVmaW5lIFdNODkwNF9TWVNDTEtfU1JDX01BU0sgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFNZU0NMS19TUkMgKi8KKyNkZWZpbmUgV004OTA0X1NZU0NMS19TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxNCAgLyogU1lTQ0xLX1NSQyAqLworI2RlZmluZSBXTTg5MDRfU1lTQ0xLX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTWVNDTEtfU1JDICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19SQVRFICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIFRPQ0xLX1JBVEUgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogVE9DTEtfUkFURSAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBUT0NMS19SQVRFICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRPQ0xLX1JBVEUgKi8KKyNkZWZpbmUgV004OTA0X09QQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODkwNF9PUENMS19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIE9QQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5MDRfT1BDTEtfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBPUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTA0X09QQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODkwNF9DTEtfU1lTX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIENMS19TWVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9DTEtfU1lTX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIENMS19TWVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9DTEtfU1lTX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIENMS19TWVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9DTEtfU1lTX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENMS19TWVNfRU5BICovCisjZGVmaW5lIFdNODkwNF9DTEtfRFNQX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIENMS19EU1BfRU5BICovCisjZGVmaW5lIFdNODkwNF9DTEtfRFNQX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIENMS19EU1BfRU5BICovCisjZGVmaW5lIFdNODkwNF9DTEtfRFNQX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENMS19EU1BfRU5BICovCisjZGVmaW5lIFdNODkwNF9DTEtfRFNQX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENMS19EU1BfRU5BICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFRPQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5MDRfVE9DTEtfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBUT0NMS19FTkEgKi8KKyNkZWZpbmUgV004OTA0X1RPQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogVE9DTEtfRU5BICovCisjZGVmaW5lIFdNODkwNF9UT0NMS19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRPQ0xLX0VOQSAqLworCisvKgorICogUjI0ICgweDE4KSAtIEF1ZGlvIEludGVyZmFjZSAwCisgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0xfREFUSU5WICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogREFDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0xfREFUSU5WX01BU0sgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogREFDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0xfREFUSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAxMiAgLyogREFDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0xfREFUSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTF9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0RBQ1JfREFUSU5WICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogREFDUl9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0RBQ1JfREFUSU5WX01BU0sgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogREFDUl9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0RBQ1JfREFUSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAxMSAgLyogREFDUl9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0RBQ1JfREFUSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDUl9EQVRJTlYgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19CT09TVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDYwMCAgLyogREFDX0JPT1NUIC0gWzEwOjldICovCisjZGVmaW5lIFdNODkwNF9EQUNfQk9PU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERBQ19CT09TVCAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5MDRfREFDX0JPT1NUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBEQUNfQk9PU1QgLSBbMTA6OV0gKi8KKyNkZWZpbmUgV004OTA0X0xPT1BCQUNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTE9PUEJBQ0sgKi8KKyNkZWZpbmUgV004OTA0X0xPT1BCQUNLX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTE9PUEJBQ0sgKi8KKyNkZWZpbmUgV004OTA0X0xPT1BCQUNLX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTE9PUEJBQ0sgKi8KKyNkZWZpbmUgV004OTA0X0xPT1BCQUNLX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE9PUEJBQ0sgKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ0xfU1JDICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ0xfU1JDX01BU0sgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ0xfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgNyAgLyogQUlGQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ0xfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ1JfU1JDICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogQUlGQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ1JfU1JDX01BU0sgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogQUlGQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ1JfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgNiAgLyogQUlGQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ1JfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ0xfU1JDICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQUlGREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ0xfU1JDX01BU0sgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQUlGREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ0xfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogQUlGREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ0xfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ1JfU1JDICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGREFDUl9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ1JfU1JDX01BU0sgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGREFDUl9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ1JfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgNCAgLyogQUlGREFDUl9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ1JfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGREFDUl9TUkMgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19DT01QICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19DT01QX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19DT01QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19DT01QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19DT01QTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODkwNF9BRENfQ09NUE1PREVfTUFTSyAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFEQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5MDRfQURDX0NPTVBNT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAyICAvKiBBRENfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19DT01QTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODkwNF9EQUNfQ09NUCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQ19DT01QICovCisjZGVmaW5lIFdNODkwNF9EQUNfQ09NUF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQ19DT01QICovCisjZGVmaW5lIFdNODkwNF9EQUNfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19DT01QICovCisjZGVmaW5lIFdNODkwNF9EQUNfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19DT01QICovCisjZGVmaW5lIFdNODkwNF9EQUNfQ09NUE1PREUgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5MDRfREFDX0NPTVBNT0RFX01BU0sgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19DT01QTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODkwNF9EQUNfQ09NUE1PREVfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19DT01QTU9ERSAqLworCisvKgorICogUjI1ICgweDE5KSAtIEF1ZGlvIEludGVyZmFjZSAxCisgKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ19URE0gICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGREFDX1RETSAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDX1RETV9NQVNLICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUZEQUNfVERNICovCisjZGVmaW5lIFdNODkwNF9BSUZEQUNfVERNX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIEFJRkRBQ19URE0gKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ19URE1fV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGREFDX1RETSAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDX1RETV9DSEFOICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUZEQUNfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTA0X0FJRkRBQ19URE1fQ0hBTl9NQVNLICAgICAgICAgICAgIDB4MTAwMCAgLyogQUlGREFDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODkwNF9BSUZEQUNfVERNX0NIQU5fU0hJRlQgICAgICAgICAgICAgICAgMTIgIC8qIEFJRkRBQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5MDRfQUlGREFDX1RETV9DSEFOX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBBSUZEQUNfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ19URE0gICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQUlGQURDX1RETSAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDX1RETV9NQVNLICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBBSUZBRENfVERNICovCisjZGVmaW5lIFdNODkwNF9BSUZBRENfVERNX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIEFJRkFEQ19URE0gKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ19URE1fV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGQURDX1RETSAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDX1RETV9DSEFOICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBBSUZBRENfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTA0X0FJRkFEQ19URE1fQ0hBTl9NQVNLICAgICAgICAgICAgIDB4MDQwMCAgLyogQUlGQURDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODkwNF9BSUZBRENfVERNX0NIQU5fU0hJRlQgICAgICAgICAgICAgICAgMTAgIC8qIEFJRkFEQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5MDRfQUlGQURDX1RETV9DSEFOX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBBSUZBRENfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTA0X0FJRl9UUklTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGX1RSSVMgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9UUklTX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGX1RSSVMgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9UUklTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGX1RSSVMgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9UUklTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGX1RSSVMgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9CQ0xLX0lOViAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODkwNF9BSUZfQkNMS19JTlZfTUFTSyAgICAgICAgICAgICAgICAweDAwODAgIC8qIEFJRl9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MDRfQUlGX0JDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICA3ICAvKiBBSUZfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9CQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEJDTEtfRElSICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX0RJUl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEJDTEtfRElSICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX0RJUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEJDTEtfRElSICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX0RJUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEtfRElSICovCisjZGVmaW5lIFdNODkwNF9BSUZfTFJDTEtfSU5WICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFJRl9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9MUkNMS19JTlZfTUFTSyAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5MDRfQUlGX0xSQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUZfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODkwNF9BSUZfTFJDTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRl9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTA0X0FJRl9XTF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwQyAgLyogQUlGX1dMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0FJRl9XTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGX1dMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0FJRl9XTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGX1dMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0FJRl9GTVRfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogQUlGX0ZNVCAtIFsxOjBdICovCisjZGVmaW5lIFdNODkwNF9BSUZfRk1UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRl9GTVQgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MDRfQUlGX0ZNVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUZfRk1UIC0gWzE6MF0gKi8KKworLyoKKyAqIFIyNiAoMHgxQSkgLSBBdWRpbyBJbnRlcmZhY2UgMgorICovCisjZGVmaW5lIFdNODkwNF9PUENMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAweDBGMDAgIC8qIE9QQ0xLX0RJViAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfT1BDTEtfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBPUENMS19ESVYgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X09QQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogT1BDTEtfRElWIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIEJDTEtfRElWIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQkNMS19ESVYgLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfQkNMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBCQ0xLX0RJViAtIFs0OjBdICovCisKKy8qCisgKiBSMjcgKDB4MUIpIC0gQXVkaW8gSW50ZXJmYWNlIDMKKyAqLworI2RlZmluZSBXTTg5MDRfTFJDTEtfRElSICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBMUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX0RJUl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogTFJDTEtfRElSICovCisjZGVmaW5lIFdNODkwNF9MUkNMS19ESVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIExSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5MDRfTFJDTEtfRElSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDdGRiAgLyogTFJDTEtfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg5MDRfTFJDTEtfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMUkNMS19SQVRFIC0gWzEwOjBdICovCisjZGVmaW5lIFdNODkwNF9MUkNMS19SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIExSQ0xLX1JBVEUgLSBbMTA6MF0gKi8KKworLyoKKyAqIFIzMCAoMHgxRSkgLSBEQUMgRGlnaXRhbCBWb2x1bWUgTGVmdAorICovCisjZGVmaW5lIFdNODkwNF9EQUNfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg5MDRfREFDX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDX1ZVICovCisjZGVmaW5lIFdNODkwNF9EQUNfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg5MDRfREFDTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEQUNMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9EQUNMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQ0xfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RBQ0xfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDTF9WT0wgLSBbNzowXSAqLworCisvKgorICogUjMxICgweDFGKSAtIERBQyBEaWdpdGFsIFZvbHVtZSBSaWdodAorICovCisjZGVmaW5lIFdNODkwNF9EQUNfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg5MDRfREFDX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDX1ZVICovCisjZGVmaW5lIFdNODkwNF9EQUNfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg5MDRfREFDUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEQUNSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9EQUNSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQ1JfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RBQ1JfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDUl9WT0wgLSBbNzowXSAqLworCisvKgorICogUjMyICgweDIwKSAtIERBQyBEaWdpdGFsIDAKKyAqLworI2RlZmluZSBXTTg5MDRfQURDTF9EQUNfU1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwRjAwICAvKiBBRENMX0RBQ19TVk9MIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9BRENMX0RBQ19TVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDggIC8qIEFEQ0xfREFDX1NWT0wgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ0xfREFDX1NWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgNCAgLyogQURDTF9EQUNfU1ZPTCAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfQURDUl9EQUNfU1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwMEYwICAvKiBBRENSX0RBQ19TVk9MIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ1JfREFDX1NWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogQURDUl9EQUNfU1ZPTCAtIFs3OjRdICovCisjZGVmaW5lIFdNODkwNF9BRENSX0RBQ19TVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ1JfREFDX1NWT0wgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5MDRfQURDX1RPX0RBQ0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBBRENfVE9fREFDTCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9BRENfVE9fREFDTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFEQ19UT19EQUNMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ19UT19EQUNMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogQURDX1RPX0RBQ0wgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfQURDX1RPX0RBQ1JfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBBRENfVE9fREFDUiAtIFsxOjBdICovCisjZGVmaW5lIFdNODkwNF9BRENfVE9fREFDUl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ19UT19EQUNSIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ19UT19EQUNSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogQURDX1RPX0RBQ1IgLSBbMTowXSAqLworCisvKgorICogUjMzICgweDIxKSAtIERBQyBEaWdpdGFsIDEKKyAqLworI2RlZmluZSBXTTg5MDRfREFDX01PTk8gICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBEQUNfTU9OTyAqLworI2RlZmluZSBXTTg5MDRfREFDX01PTk9fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBEQUNfTU9OTyAqLworI2RlZmluZSBXTTg5MDRfREFDX01PTk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBEQUNfTU9OTyAqLworI2RlZmluZSBXTTg5MDRfREFDX01PTk9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfTU9OTyAqLworI2RlZmluZSBXTTg5MDRfREFDX1NCX0ZJTFQgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBEQUNfU0JfRklMVCAqLworI2RlZmluZSBXTTg5MDRfREFDX1NCX0ZJTFRfTUFTSyAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBEQUNfU0JfRklMVCAqLworI2RlZmluZSBXTTg5MDRfREFDX1NCX0ZJTFRfU0hJRlQgICAgICAgICAgICAgICAgICAgIDExICAvKiBEQUNfU0JfRklMVCAqLworI2RlZmluZSBXTTg5MDRfREFDX1NCX0ZJTFRfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfU0JfRklMVCAqLworI2RlZmluZSBXTTg5MDRfREFDX01VVEVSQVRFICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19NVVRFUkFURV9NQVNLICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogREFDX01VVEVSQVRFICovCisjZGVmaW5lIFdNODkwNF9EQUNfTVVURVJBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgMTAgIC8qIERBQ19NVVRFUkFURSAqLworI2RlZmluZSBXTTg5MDRfREFDX01VVEVSQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19VTk1VVEVfUkFNUCAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODkwNF9EQUNfVU5NVVRFX1JBTVBfTUFTSyAgICAgICAgICAgICAweDAyMDAgIC8qIERBQ19VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5MDRfREFDX1VOTVVURV9SQU1QX1NISUZUICAgICAgICAgICAgICAgICA5ICAvKiBEQUNfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19VTk1VVEVfUkFNUF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogREFDX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODkwNF9EQUNfT1NSMTI4ICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIERBQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTA0X0RBQ19PU1IxMjhfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogREFDX09TUjEyOCAqLworI2RlZmluZSBXTTg5MDRfREFDX09TUjEyOF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBEQUNfT1NSMTI4ICovCisjZGVmaW5lIFdNODkwNF9EQUNfT1NSMTI4X1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTA0X0RBQ19NVVRFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19NVVRFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogREFDX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ19NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0RFRU1QSF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNiAgLyogREVFTVBIIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTA0X0RFRU1QSF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREVFTVBIIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTA0X0RFRU1QSF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogREVFTVBIIC0gWzI6MV0gKi8KKworLyoKKyAqIFIzNiAoMHgyNCkgLSBBREMgRGlnaXRhbCBWb2x1bWUgTGVmdAorICovCisjZGVmaW5lIFdNODkwNF9BRENfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg5MDRfQURDX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBRENfVlUgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODkwNF9BRENfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg5MDRfQURDTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBBRENMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9BRENMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ0xfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ0xfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQURDTF9WT0wgLSBbNzowXSAqLworCisvKgorICogUjM3ICgweDI1KSAtIEFEQyBEaWdpdGFsIFZvbHVtZSBSaWdodAorICovCisjZGVmaW5lIFdNODkwNF9BRENfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg5MDRfQURDX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBRENfVlUgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODkwNF9BRENfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg5MDRfQURDUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBBRENSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9BRENSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ1JfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ1JfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQURDUl9WT0wgLSBbNzowXSAqLworCisvKgorICogUjM4ICgweDI2KSAtIEFEQyBEaWdpdGFsIDAKKyAqLworI2RlZmluZSBXTTg5MDRfQURDX0hQRl9DVVRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDYwICAvKiBBRENfSFBGX0NVVCAtIFs2OjVdICovCisjZGVmaW5lIFdNODkwNF9BRENfSFBGX0NVVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ19IUEZfQ1VUIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTA0X0FEQ19IUEZfQ1VUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogQURDX0hQRl9DVVQgLSBbNjo1XSAqLworI2RlZmluZSBXTTg5MDRfQURDX0hQRiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBRENfSFBGICovCisjZGVmaW5lIFdNODkwNF9BRENfSFBGX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFEQ19IUEYgKi8KKyNkZWZpbmUgV004OTA0X0FEQ19IUEZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogQURDX0hQRiAqLworI2RlZmluZSBXTTg5MDRfQURDX0hQRl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENfSFBGICovCisjZGVmaW5lIFdNODkwNF9BRENMX0RBVElOViAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQ0xfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9BRENMX0RBVElOVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQ0xfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9BRENMX0RBVElOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0xfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9BRENMX0RBVElOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0xfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9BRENSX0RBVElOViAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFEQ1JfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9BRENSX0RBVElOVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFEQ1JfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9BRENSX0RBVElOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ1JfREFUSU5WICovCisjZGVmaW5lIFdNODkwNF9BRENSX0RBVElOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ1JfREFUSU5WICovCisKKy8qCisgKiBSMzkgKDB4MjcpIC0gRGlnaXRhbCBNaWNyb3Bob25lIDAKKyAqLworI2RlZmluZSBXTTg5MDRfRE1JQ19FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBETUlDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRE1JQ19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBETUlDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRE1JQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBETUlDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRE1JQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRE1JQ19TUkMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBETUlDX1NSQyAqLworI2RlZmluZSBXTTg5MDRfRE1JQ19TUkNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBETUlDX1NSQyAqLworI2RlZmluZSBXTTg5MDRfRE1JQ19TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDExICAvKiBETUlDX1NSQyAqLworI2RlZmluZSBXTTg5MDRfRE1JQ19TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDX1NSQyAqLworCisvKgorICogUjQwICgweDI4KSAtIERSQyAwCisgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogRFJDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBEUkNfRU5BICovCisjZGVmaW5lIFdNODkwNF9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIERSQ19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFJDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0RBQ19QQVRIICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBEUkNfREFDX1BBVEggKi8KKyNkZWZpbmUgV004OTA0X0RSQ19EQUNfUEFUSF9NQVNLICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogRFJDX0RBQ19QQVRIICovCisjZGVmaW5lIFdNODkwNF9EUkNfREFDX1BBVEhfU0hJRlQgICAgICAgICAgICAgICAgICAgMTQgIC8qIERSQ19EQUNfUEFUSCAqLworI2RlZmluZSBXTTg5MDRfRFJDX0RBQ19QQVRIX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEUkNfREFDX1BBVEggKi8KKyNkZWZpbmUgV004OTA0X0RSQ19HU19IWVNUX0xWTF9NQVNLICAgICAgICAgICAgIDB4MTgwMCAgLyogRFJDX0dTX0hZU1RfTFZMIC0gWzEyOjExXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0dTX0hZU1RfTFZMX1NISUZUICAgICAgICAgICAgICAgIDExICAvKiBEUkNfR1NfSFlTVF9MVkwgLSBbMTI6MTFdICovCisjZGVmaW5lIFdNODkwNF9EUkNfR1NfSFlTVF9MVkxfV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIERSQ19HU19IWVNUX0xWTCAtIFsxMjoxMV0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19TVEFSVFVQX0dBSU5fTUFTSyAgICAgICAgICAgIDB4MDdDMCAgLyogRFJDX1NUQVJUVVBfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX1NUQVJUVVBfR0FJTl9TSElGVCAgICAgICAgICAgICAgICA2ICAvKiBEUkNfU1RBUlRVUF9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODkwNF9EUkNfU1RBUlRVUF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgIDUgIC8qIERSQ19TVEFSVFVQX0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19GRl9ERUxBWSAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRFJDX0ZGX0RFTEFZICovCisjZGVmaW5lIFdNODkwNF9EUkNfRkZfREVMQVlfTUFTSyAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERSQ19GRl9ERUxBWSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0ZGX0RFTEFZX1NISUZUICAgICAgICAgICAgICAgICAgICA1ICAvKiBEUkNfRkZfREVMQVkgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19GRl9ERUxBWV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogRFJDX0ZGX0RFTEFZICovCisjZGVmaW5lIFdNODkwNF9EUkNfR1NfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERSQ19HU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19HU19FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogRFJDX0dTX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0dTX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAzICAvKiBEUkNfR1NfRU5BICovCisjZGVmaW5lIFdNODkwNF9EUkNfR1NfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERSQ19HU19FTkEgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19RUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRFJDX1FSICovCisjZGVmaW5lIFdNODkwNF9EUkNfUVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERSQ19RUiAqLworI2RlZmluZSBXTTg5MDRfRFJDX1FSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBEUkNfUVIgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19RUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFJDX1FSICovCisjZGVmaW5lIFdNODkwNF9EUkNfQU5USUNMSVAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERSQ19BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5MDRfRFJDX0FOVElDTElQX01BU0sgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEUkNfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19BTlRJQ0xJUF9TSElGVCAgICAgICAgICAgICAgICAgICAgMSAgLyogRFJDX0FOVElDTElQICovCisjZGVmaW5lIFdNODkwNF9EUkNfQU5USUNMSVBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERSQ19BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5MDRfRFJDX0dTX0hZU1QgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEUkNfR1NfSFlTVCAqLworI2RlZmluZSBXTTg5MDRfRFJDX0dTX0hZU1RfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEUkNfR1NfSFlTVCAqLworI2RlZmluZSBXTTg5MDRfRFJDX0dTX0hZU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBEUkNfR1NfSFlTVCAqLworI2RlZmluZSBXTTg5MDRfRFJDX0dTX0hZU1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBEUkNfR1NfSFlTVCAqLworCisvKgorICogUjQxICgweDI5KSAtIERSQyAxCisgKi8KKyNkZWZpbmUgV004OTA0X0RSQ19BVEtfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RjAwMCAgLyogRFJDX0FUSyAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19BVEtfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMiAgLyogRFJDX0FUSyAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19BVEtfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogRFJDX0FUSyAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19EQ1lfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MEYwMCAgLyogRFJDX0RDWSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0RDWV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEUkNfRENZIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9EUkNfRENZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERSQ19EQ1kgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19RUl9USFJfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDBDMCAgLyogRFJDX1FSX1RIUiAtIFs3OjZdICovCisjZGVmaW5lIFdNODkwNF9EUkNfUVJfVEhSX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIERSQ19RUl9USFIgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX1FSX1RIUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBEUkNfUVJfVEhSIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19RUl9EQ1lfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAzMCAgLyogRFJDX1FSX0RDWSAtIFs1OjRdICovCisjZGVmaW5lIFdNODkwNF9EUkNfUVJfRENZX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERSQ19RUl9EQ1kgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX1FSX0RDWV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBEUkNfUVJfRENZIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19NSU5HQUlOX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwQyAgLyogRFJDX01JTkdBSU4gLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX01JTkdBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAyICAvKiBEUkNfTUlOR0FJTiAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9EUkNfTUlOR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERSQ19NSU5HQUlOIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19NQVhHQUlOX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogRFJDX01BWEdBSU4gLSBbMTowXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX01BWEdBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBEUkNfTUFYR0FJTiAtIFsxOjBdICovCisjZGVmaW5lIFdNODkwNF9EUkNfTUFYR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERSQ19NQVhHQUlOIC0gWzE6MF0gKi8KKworLyoKKyAqIFI0MiAoMHgyQSkgLSBEUkMgMgorICovCisjZGVmaW5lIFdNODkwNF9EUkNfSElfQ09NUF9NQVNLICAgICAgICAgICAgICAgICAweDAwMzggIC8qIERSQ19ISV9DT01QIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19ISV9DT01QX1NISUZUICAgICAgICAgICAgICAgICAgICAgMyAgLyogRFJDX0hJX0NPTVAgLSBbNTozXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0hJX0NPTVBfV0lEVEggICAgICAgICAgICAgICAgICAgICAzICAvKiBEUkNfSElfQ09NUCAtIFs1OjNdICovCisjZGVmaW5lIFdNODkwNF9EUkNfTE9fQ09NUF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIERSQ19MT19DT01QIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19MT19DT01QX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRFJDX0xPX0NPTVAgLSBbMjowXSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0xPX0NPTVBfV0lEVEggICAgICAgICAgICAgICAgICAgICAzICAvKiBEUkNfTE9fQ09NUCAtIFsyOjBdICovCisKKy8qCisgKiBSNDMgKDB4MkIpIC0gRFJDIDMKKyAqLworI2RlZmluZSBXTTg5MDRfRFJDX0tORUVfSVBfTUFTSyAgICAgICAgICAgICAgICAgMHgwN0UwICAvKiBEUkNfS05FRV9JUCAtIFsxMDo1XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0tORUVfSVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICA1ICAvKiBEUkNfS05FRV9JUCAtIFsxMDo1XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0tORUVfSVBfV0lEVEggICAgICAgICAgICAgICAgICAgICA2ICAvKiBEUkNfS05FRV9JUCAtIFsxMDo1XSAqLworI2RlZmluZSBXTTg5MDRfRFJDX0tORUVfT1BfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBEUkNfS05FRV9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9EUkNfS05FRV9PUF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERSQ19LTkVFX09QIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0RSQ19LTkVFX09QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgNSAgLyogRFJDX0tORUVfT1AgLSBbNDowXSAqLworCisvKgorICogUjQ0ICgweDJDKSAtIEFuYWxvZ3VlIExlZnQgSW5wdXQgMAorICovCisjZGVmaW5lIFdNODkwNF9MSU5NVVRFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJTk1VVEUgKi8KKyNkZWZpbmUgV004OTA0X0xJTk1VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElOTVVURSAqLworI2RlZmluZSBXTTg5MDRfTElOTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMSU5NVVRFICovCisjZGVmaW5lIFdNODkwNF9MSU5NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTk1VVEUgKi8KKyNkZWZpbmUgV004OTA0X0xJTl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogTElOX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9MSU5fVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExJTl9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfTElOX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMSU5fVk9MIC0gWzQ6MF0gKi8KKworLyoKKyAqIFI0NSAoMHgyRCkgLSBBbmFsb2d1ZSBSaWdodCBJbnB1dCAwCisgKi8KKyNkZWZpbmUgV004OTA0X1JJTk1VVEUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUklOTVVURSAqLworI2RlZmluZSBXTTg5MDRfUklOTVVURV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSSU5NVVRFICovCisjZGVmaW5lIFdNODkwNF9SSU5NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJJTk1VVEUgKi8KKyNkZWZpbmUgV004OTA0X1JJTk1VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUklOTVVURSAqLworI2RlZmluZSBXTTg5MDRfUklOX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBSSU5fVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X1JJTl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUklOX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODkwNF9SSU5fVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFJJTl9WT0wgLSBbNDowXSAqLworCisvKgorICogUjQ2ICgweDJFKSAtIEFuYWxvZ3VlIExlZnQgSW5wdXQgMQorICovCisjZGVmaW5lIFdNODkwNF9JTkxfQ01fRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElOTF9DTV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0lOTF9DTV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU5MX0NNX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSU5MX0NNX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBJTkxfQ01fRU5BICovCisjZGVmaW5lIFdNODkwNF9JTkxfQ01fRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOTF9DTV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xfSVBfU0VMX05fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAzMCAgLyogTF9JUF9TRUxfTiAtIFs1OjRdICovCisjZGVmaW5lIFdNODkwNF9MX0lQX1NFTF9OX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIExfSVBfU0VMX04gLSBbNTo0XSAqLworI2RlZmluZSBXTTg5MDRfTF9JUF9TRUxfTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBMX0lQX1NFTF9OIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTA0X0xfSVBfU0VMX1BfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwQyAgLyogTF9JUF9TRUxfUCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9MX0lQX1NFTF9QX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExfSVBfU0VMX1AgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfTF9JUF9TRUxfUF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBMX0lQX1NFTF9QIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X0xfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogTF9NT0RFIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTA0X0xfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTF9NT0RFIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTA0X0xfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTF9NT0RFIC0gWzE6MF0gKi8KKworLyoKKyAqIFI0NyAoMHgyRikgLSBBbmFsb2d1ZSBSaWdodCBJbnB1dCAxCisgKi8KKyNkZWZpbmUgV004OTA0X0lOUl9DTV9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU5SX0NNX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSU5SX0NNX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTlJfQ01fRU5BICovCisjZGVmaW5lIFdNODkwNF9JTlJfQ01fRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIElOUl9DTV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0lOUl9DTV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU5SX0NNX0VOQSAqLworI2RlZmluZSBXTTg5MDRfUl9JUF9TRUxfTl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDMwICAvKiBSX0lQX1NFTF9OIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTA0X1JfSVBfU0VMX05fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogUl9JUF9TRUxfTiAtIFs1OjRdICovCisjZGVmaW5lIFdNODkwNF9SX0lQX1NFTF9OX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFJfSVBfU0VMX04gLSBbNTo0XSAqLworI2RlZmluZSBXTTg5MDRfUl9JUF9TRUxfUF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBSX0lQX1NFTF9QIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTA0X1JfSVBfU0VMX1BfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMiAgLyogUl9JUF9TRUxfUCAtIFszOjJdICovCisjZGVmaW5lIFdNODkwNF9SX0lQX1NFTF9QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFJfSVBfU0VMX1AgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5MDRfUl9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBSX01PREUgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MDRfUl9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBSX01PREUgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MDRfUl9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBSX01PREUgLSBbMTowXSAqLworCisvKgorICogUjU3ICgweDM5KSAtIEFuYWxvZ3VlIE9VVDEgTGVmdAorICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExfTVVURSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEhQT1VUTF9NVVRFICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExfTVVURV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEhQT1VUTF9NVVRFICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIEhQT1VUTF9NVVRFICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUTF9NVVRFICovCisjZGVmaW5lIFdNODkwNF9IUE9VVF9WVSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9IUE9VVF9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9IUE9VVF9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEhQT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9IUE9VVF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExaQyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUTFpDICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExaQ19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUTFpDICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEhQT1VUTFpDICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUTFpDICovCisjZGVmaW5lIFdNODkwNF9IUE9VVExfVk9MX01BU0sgICAgICAgICAgICAgICAgICAweDAwM0YgIC8qIEhQT1VUTF9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBIUE9VVExfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgNiAgLyogSFBPVVRMX1ZPTCAtIFs1OjBdICovCisKKy8qCisgKiBSNTggKDB4M0EpIC0gQW5hbG9ndWUgT1VUMSBSaWdodAorICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJfTVVURSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEhQT1VUUl9NVVRFICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJfTVVURV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEhQT1VUUl9NVVRFICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIEhQT1VUUl9NVVRFICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUUl9NVVRFICovCisjZGVmaW5lIFdNODkwNF9IUE9VVF9WVSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9IUE9VVF9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9IUE9VVF9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEhQT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9IUE9VVF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJaQyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUUlpDICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJaQ19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUUlpDICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEhQT1VUUlpDICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUUlpDICovCisjZGVmaW5lIFdNODkwNF9IUE9VVFJfVk9MX01BU0sgICAgICAgICAgICAgICAgICAweDAwM0YgIC8qIEhQT1VUUl9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5MDRfSFBPVVRSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBIUE9VVFJfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0hQT1VUUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgNiAgLyogSFBPVVRSX1ZPTCAtIFs1OjBdICovCisKKy8qCisgKiBSNTkgKDB4M0IpIC0gQW5hbG9ndWUgT1VUMiBMZWZ0CisgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX01VVEUgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTElORU9VVExfTVVURSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfTVVURV9NQVNLICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMSU5FT1VUTF9NVVRFICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgIDggIC8qIExJTkVPVVRMX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVExfTVVURSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVF9WVSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSU5FT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUX1ZVX01BU0sgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJTkVPVVRfVlUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTElORU9VVF9WVSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTFpDICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJTkVPVVRMWkMgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMWkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTElORU9VVExaQyAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBMSU5FT1VUTFpDICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTFpDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRMWkMgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX1ZPTF9NQVNLICAgICAgICAgICAgICAgIDB4MDAzRiAgLyogTElORU9VVExfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogTElORU9VVExfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgNiAgLyogTElORU9VVExfVk9MIC0gWzU6MF0gKi8KKworLyoKKyAqIFI2MCAoMHgzQykgLSBBbmFsb2d1ZSBPVVQyIFJpZ2h0CisgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX01VVEUgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTElORU9VVFJfTVVURSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfTVVURV9NQVNLICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMSU5FT1VUUl9NVVRFICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgIDggIC8qIExJTkVPVVRSX01VVEUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVFJfTVVURSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVF9WVSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSU5FT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUX1ZVX01BU0sgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJTkVPVVRfVlUgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTElORU9VVF9WVSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUX1ZVICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUlpDICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJTkVPVVRSWkMgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSWkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTElORU9VVFJaQyAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBMSU5FT1VUUlpDICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUlpDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRSWkMgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX1ZPTF9NQVNLICAgICAgICAgICAgICAgIDB4MDAzRiAgLyogTElORU9VVFJfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogTElORU9VVFJfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgNiAgLyogTElORU9VVFJfVk9MIC0gWzU6MF0gKi8KKworLyoKKyAqIFI2MSAoMHgzRCkgLSBBbmFsb2d1ZSBPVVQxMiBaQworICovCisjZGVmaW5lIFdNODkwNF9IUExfQllQX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEhQTF9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUExfQllQX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEhQTF9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUExfQllQX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEhQTF9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUExfQllQX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQTF9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUFJfQllQX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQUl9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUFJfQllQX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQUl9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUFJfQllQX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEhQUl9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUFJfQllQX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQUl9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9CWVBfRU5BICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIExJTkVPVVRMX0JZUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0JZUF9FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogTElORU9VVExfQllQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfQllQX0VOQV9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUTF9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9CWVBfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRMX0JZUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0JZUF9FTkEgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTElORU9VVFJfQllQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfQllQX0VOQV9NQVNLICAgICAgICAgICAgMHgwMDAxICAvKiBMSU5FT1VUUl9CWVBfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9CWVBfRU5BX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIExJTkVPVVRSX0JZUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0JZUF9FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogTElORU9VVFJfQllQX0VOQSAqLworCisvKgorICogUjY3ICgweDQzKSAtIERDIFNlcnZvIDAKKyAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzMgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfRU5BX0NIQU5fMyAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzNfTUFTSyAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfRU5BX0NIQU5fMyAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzNfU0hJRlQgICAgICAgICAgICAgICAgICAzICAvKiBEQ1NfRU5BX0NIQU5fMyAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzNfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMyAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzIgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQ1NfRU5BX0NIQU5fMiAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzJfTUFTSyAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQ1NfRU5BX0NIQU5fMiAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzJfU0hJRlQgICAgICAgICAgICAgICAgICAyICAvKiBEQ1NfRU5BX0NIQU5fMiAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzJfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMiAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzEgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzFfTUFTSyAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzFfU0hJRlQgICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzFfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzBfTUFTSyAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzBfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworI2RlZmluZSBXTTg5MDRfRENTX0VOQV9DSEFOXzBfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworCisvKgorICogUjY4ICgweDQ0KSAtIERDIFNlcnZvIDEKKyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzMgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBEQ1NfVFJJR19TSU5HTEVfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzNfTUFTSyAgICAgICAgICAgMHg4MDAwICAvKiBEQ1NfVFJJR19TSU5HTEVfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzNfU0hJRlQgICAgICAgICAgICAgIDE1ICAvKiBEQ1NfVFJJR19TSU5HTEVfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzNfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TSU5HTEVfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzIgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBEQ1NfVFJJR19TSU5HTEVfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzJfTUFTSyAgICAgICAgICAgMHg0MDAwICAvKiBEQ1NfVFJJR19TSU5HTEVfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzJfU0hJRlQgICAgICAgICAgICAgIDE0ICAvKiBEQ1NfVFJJR19TSU5HTEVfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzJfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TSU5HTEVfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzEgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBEQ1NfVFJJR19TSU5HTEVfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzFfTUFTSyAgICAgICAgICAgMHgyMDAwICAvKiBEQ1NfVFJJR19TSU5HTEVfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzFfU0hJRlQgICAgICAgICAgICAgIDEzICAvKiBEQ1NfVFJJR19TSU5HTEVfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzFfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TSU5HTEVfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBEQ1NfVFJJR19TSU5HTEVfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzBfTUFTSyAgICAgICAgICAgMHgxMDAwICAvKiBEQ1NfVFJJR19TSU5HTEVfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzBfU0hJRlQgICAgICAgICAgICAgIDEyICAvKiBEQ1NfVFJJR19TSU5HTEVfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0lOR0xFXzBfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TSU5HTEVfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzMgICAgICAgICAgICAgICAgMHgwODAwICAvKiBEQ1NfVFJJR19TRVJJRVNfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzNfTUFTSyAgICAgICAgICAgMHgwODAwICAvKiBEQ1NfVFJJR19TRVJJRVNfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzNfU0hJRlQgICAgICAgICAgICAgIDExICAvKiBEQ1NfVFJJR19TRVJJRVNfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzNfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TRVJJRVNfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzIgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBEQ1NfVFJJR19TRVJJRVNfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzJfTUFTSyAgICAgICAgICAgMHgwNDAwICAvKiBEQ1NfVFJJR19TRVJJRVNfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzJfU0hJRlQgICAgICAgICAgICAgIDEwICAvKiBEQ1NfVFJJR19TRVJJRVNfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzJfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TRVJJRVNfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzEgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQ1NfVFJJR19TRVJJRVNfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzFfTUFTSyAgICAgICAgICAgMHgwMjAwICAvKiBEQ1NfVFJJR19TRVJJRVNfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzFfU0hJRlQgICAgICAgICAgICAgICA5ICAvKiBEQ1NfVFJJR19TRVJJRVNfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzFfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TRVJJRVNfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQ1NfVFJJR19TRVJJRVNfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzBfTUFTSyAgICAgICAgICAgMHgwMTAwICAvKiBEQ1NfVFJJR19TRVJJRVNfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzBfU0hJRlQgICAgICAgICAgICAgICA4ICAvKiBEQ1NfVFJJR19TRVJJRVNfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU0VSSUVTXzBfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TRVJJRVNfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8zICAgICAgICAgICAgICAgMHgwMDgwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfM19NQVNLICAgICAgICAgIDB4MDA4MCAgLyogRENTX1RSSUdfU1RBUlRVUF8zICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzNfU0hJRlQgICAgICAgICAgICAgIDcgIC8qIERDU19UUklHX1NUQVJUVVBfMyAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8zX1dJRFRIICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TVEFSVFVQXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMiAgICAgICAgICAgICAgIDB4MDA0MCAgLyogRENTX1RSSUdfU1RBUlRVUF8yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzJfTUFTSyAgICAgICAgICAweDAwNDAgIC8qIERDU19UUklHX1NUQVJUVVBfMiAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8yX1NISUZUICAgICAgICAgICAgICA2ICAvKiBEQ1NfVFJJR19TVEFSVFVQXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMl9XSURUSCAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU1RBUlRVUF8yICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzEgICAgICAgICAgICAgICAweDAwMjAgIC8qIERDU19UUklHX1NUQVJUVVBfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8xX01BU0sgICAgICAgICAgMHgwMDIwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMV9TSElGVCAgICAgICAgICAgICAgNSAgLyogRENTX1RSSUdfU1RBUlRVUF8xICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzFfV0lEVEggICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NUQVJUVVBfMSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8wICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX1NUQVJUVVBfMF9NQVNLICAgICAgICAgIDB4MDAxMCAgLyogRENTX1RSSUdfU1RBUlRVUF8wICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVFJJR19TVEFSVFVQXzBfU0hJRlQgICAgICAgICAgICAgIDQgIC8qIERDU19UUklHX1NUQVJUVVBfMCAqLworI2RlZmluZSBXTTg5MDRfRENTX1RSSUdfU1RBUlRVUF8wX1dJRFRIICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TVEFSVFVQXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8zICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogRENTX1RSSUdfREFDX1dSXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8zX01BU0sgICAgICAgICAgIDB4MDAwOCAgLyogRENTX1RSSUdfREFDX1dSXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8zX1NISUZUICAgICAgICAgICAgICAgMyAgLyogRENTX1RSSUdfREFDX1dSXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8zX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfREFDX1dSXzMgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8yICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRENTX1RSSUdfREFDX1dSXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8yX01BU0sgICAgICAgICAgIDB4MDAwNCAgLyogRENTX1RSSUdfREFDX1dSXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8yX1NISUZUICAgICAgICAgICAgICAgMiAgLyogRENTX1RSSUdfREFDX1dSXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8yX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfREFDX1dSXzIgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8xICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRENTX1RSSUdfREFDX1dSXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8xX01BU0sgICAgICAgICAgIDB4MDAwMiAgLyogRENTX1RSSUdfREFDX1dSXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8xX1NISUZUICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfREFDX1dSXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8xX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfREFDX1dSXzEgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8wICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRENTX1RSSUdfREFDX1dSXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8wX01BU0sgICAgICAgICAgIDB4MDAwMSAgLyogRENTX1RSSUdfREFDX1dSXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8wX1NISUZUICAgICAgICAgICAgICAgMCAgLyogRENTX1RSSUdfREFDX1dSXzAgKi8KKyNkZWZpbmUgV004OTA0X0RDU19UUklHX0RBQ19XUl8wX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfREFDX1dSXzAgKi8KKworLyoKKyAqIFI2OSAoMHg0NSkgLSBEQyBTZXJ2byAyCisgKi8KKyNkZWZpbmUgV004OTA0X0RDU19USU1FUl9QRVJJT0RfMjNfTUFTSyAgICAgICAgIDB4MEYwMCAgLyogRENTX1RJTUVSX1BFUklPRF8yMyAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RJTUVSX1BFUklPRF8yM19TSElGVCAgICAgICAgICAgICA4ICAvKiBEQ1NfVElNRVJfUEVSSU9EXzIzIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVElNRVJfUEVSSU9EXzIzX1dJRFRIICAgICAgICAgICAgIDQgIC8qIERDU19USU1FUl9QRVJJT0RfMjMgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19USU1FUl9QRVJJT0RfMDFfTUFTSyAgICAgICAgIDB4MDAwRiAgLyogRENTX1RJTUVSX1BFUklPRF8wMSAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfVElNRVJfUEVSSU9EXzAxX1NISUZUICAgICAgICAgICAgIDAgIC8qIERDU19USU1FUl9QRVJJT0RfMDEgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX1RJTUVSX1BFUklPRF8wMV9XSURUSCAgICAgICAgICAgICA0ICAvKiBEQ1NfVElNRVJfUEVSSU9EXzAxIC0gWzM6MF0gKi8KKworLyoKKyAqIFI3MSAoMHg0NykgLSBEQyBTZXJ2byA0CisgKi8KKyNkZWZpbmUgV004OTA0X0RDU19TRVJJRVNfTk9fMjNfTUFTSyAgICAgICAgICAgIDB4MDA3RiAgLyogRENTX1NFUklFU19OT18yMyAtIFs2OjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfU0VSSUVTX05PXzIzX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERDU19TRVJJRVNfTk9fMjMgLSBbNjowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX1NFUklFU19OT18yM19XSURUSCAgICAgICAgICAgICAgICA3ICAvKiBEQ1NfU0VSSUVTX05PXzIzIC0gWzY6MF0gKi8KKworLyoKKyAqIFI3MiAoMHg0OCkgLSBEQyBTZXJ2byA1CisgKi8KKyNkZWZpbmUgV004OTA0X0RDU19TRVJJRVNfTk9fMDFfTUFTSyAgICAgICAgICAgIDB4MDA3RiAgLyogRENTX1NFUklFU19OT18wMSAtIFs2OjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfU0VSSUVTX05PXzAxX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERDU19TRVJJRVNfTk9fMDEgLSBbNjowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX1NFUklFU19OT18wMV9XSURUSCAgICAgICAgICAgICAgICA3ICAvKiBEQ1NfU0VSSUVTX05PXzAxIC0gWzY6MF0gKi8KKworLyoKKyAqIFI3MyAoMHg0OSkgLSBEQyBTZXJ2byA2CisgKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfVkFMXzNfTUFTSyAgICAgICAgICAgIDB4MDBGRiAgLyogRENTX0RBQ19XUl9WQUxfMyAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX1ZBTF8zX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERDU19EQUNfV1JfVkFMXzMgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9WQUxfM19XSURUSCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfREFDX1dSX1ZBTF8zIC0gWzc6MF0gKi8KKworLyoKKyAqIFI3NCAoMHg0QSkgLSBEQyBTZXJ2byA3CisgKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfVkFMXzJfTUFTSyAgICAgICAgICAgIDB4MDBGRiAgLyogRENTX0RBQ19XUl9WQUxfMiAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX1ZBTF8yX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERDU19EQUNfV1JfVkFMXzIgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9WQUxfMl9XSURUSCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfREFDX1dSX1ZBTF8yIC0gWzc6MF0gKi8KKworLyoKKyAqIFI3NSAoMHg0QikgLSBEQyBTZXJ2byA4CisgKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfVkFMXzFfTUFTSyAgICAgICAgICAgIDB4MDBGRiAgLyogRENTX0RBQ19XUl9WQUxfMSAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX1ZBTF8xX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERDU19EQUNfV1JfVkFMXzEgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9WQUxfMV9XSURUSCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfREFDX1dSX1ZBTF8xIC0gWzc6MF0gKi8KKworLyoKKyAqIFI3NiAoMHg0QykgLSBEQyBTZXJ2byA5CisgKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfVkFMXzBfTUFTSyAgICAgICAgICAgIDB4MDBGRiAgLyogRENTX0RBQ19XUl9WQUxfMCAtIFs3OjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX1ZBTF8wX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERDU19EQUNfV1JfVkFMXzAgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9WQUxfMF9XSURUSCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfREFDX1dSX1ZBTF8wIC0gWzc6MF0gKi8KKworLyoKKyAqIFI3NyAoMHg0RCkgLSBEQyBTZXJ2byBSZWFkYmFjayAwCisgKi8KKyNkZWZpbmUgV004OTA0X0RDU19DQUxfQ09NUExFVEVfTUFTSyAgICAgICAgICAgIDB4MEYwMCAgLyogRENTX0NBTF9DT01QTEVURSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfRENTX0NBTF9DT01QTEVURV9TSElGVCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfQ0FMX0NPTVBMRVRFIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfQ0FMX0NPTVBMRVRFX1dJRFRIICAgICAgICAgICAgICAgIDQgIC8qIERDU19DQUxfQ09NUExFVEUgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19EQUNfV1JfQ09NUExFVEVfTUFTSyAgICAgICAgIDB4MDBGMCAgLyogRENTX0RBQ19XUl9DT01QTEVURSAtIFs3OjRdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfREFDX1dSX0NPTVBMRVRFX1NISUZUICAgICAgICAgICAgIDQgIC8qIERDU19EQUNfV1JfQ09NUExFVEUgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5MDRfRENTX0RBQ19XUl9DT01QTEVURV9XSURUSCAgICAgICAgICAgICA0ICAvKiBEQ1NfREFDX1dSX0NPTVBMRVRFIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTA0X0RDU19TVEFSVFVQX0NPTVBMRVRFX01BU0sgICAgICAgIDB4MDAwRiAgLyogRENTX1NUQVJUVVBfQ09NUExFVEUgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfRENTX1NUQVJUVVBfQ09NUExFVEVfU0hJRlQgICAgICAgICAgICAwICAvKiBEQ1NfU1RBUlRVUF9DT01QTEVURSAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9EQ1NfU1RBUlRVUF9DT01QTEVURV9XSURUSCAgICAgICAgICAgIDQgIC8qIERDU19TVEFSVFVQX0NPTVBMRVRFIC0gWzM6MF0gKi8KKworLyoKKyAqIFI5MCAoMHg1QSkgLSBBbmFsb2d1ZSBIUCAwCisgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9STVZfU0hPUlQgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfSFBMX1JNVl9TSE9SVF9NQVNLICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUExfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9IUExfUk1WX1NIT1JUX1NISUZUICAgICAgICAgICAgICAgICAgIDcgIC8qIEhQTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9STVZfU0hPUlRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSFBMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfSFBMX0VOQV9PVVRQICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBIUExfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkFfT1VUUF9NQVNLICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBMX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9IUExfRU5BX09VVFBfU0hJRlQgICAgICAgICAgICAgICAgICAgIDYgIC8qIEhQTF9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfSFBMX0VOQV9PVVRQX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBIUExfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkFfRExZICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSFBMX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkFfRExZX01BU0sgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSFBMX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkFfRExZX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogSFBMX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkFfRExZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBMX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSFBMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBIUExfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUExfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEhQTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBSX1JNVl9TSE9SVCAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBIUFJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9IUFJfUk1WX1NIT1JUX01BU0sgICAgICAgICAgICAgICAweDAwMDggIC8qIEhQUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9STVZfU0hPUlRfU0hJRlQgICAgICAgICAgICAgICAgICAgMyAgLyogSFBSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfSFBSX1JNVl9TSE9SVF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBIUFJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9IUFJfRU5BX09VVFAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQUl9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQV9PVVRQX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUFJfRU5BX09VVFAgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9FTkFfT1VUUF9TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogSFBSX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9IUFJfRU5BX09VVFBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQUl9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQV9ETFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUFJfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQV9ETFlfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUFJfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQV9ETFlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUFJfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQV9ETFlfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUFJfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBIUFJfRU5BICovCisjZGVmaW5lIFdNODkwNF9IUFJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEhQUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0hQUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFBSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfSFBSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUFJfRU5BICovCisKKy8qCisgKiBSOTQgKDB4NUUpIC0gQW5hbG9ndWUgTGluZW91dCAwCisgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX1JNVl9TSE9SVCAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElORU9VVExfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9STVZfU0hPUlRfTUFTSyAgICAgICAgICAweDAwODAgIC8qIExJTkVPVVRMX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfUk1WX1NIT1JUX1NISUZUICAgICAgICAgICAgICA3ICAvKiBMSU5FT1VUTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX1JNVl9TSE9SVF9XSURUSCAgICAgICAgICAgICAgMSAgLyogTElORU9VVExfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkFfT1VUUCAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJTkVPVVRMX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkFfT1VUUF9NQVNLICAgICAgICAgICAweDAwNDAgIC8qIExJTkVPVVRMX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkFfT1VUUF9TSElGVCAgICAgICAgICAgICAgIDYgIC8qIExJTkVPVVRMX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkFfT1VUUF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRMX0VOQV9PVVRQICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkFfRExZICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExJTkVPVVRMX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0VOQV9ETFlfTUFTSyAgICAgICAgICAgIDB4MDAyMCAgLyogTElORU9VVExfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfRU5BX0RMWV9TSElGVCAgICAgICAgICAgICAgICA1ICAvKiBMSU5FT1VUTF9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkFfRExZX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRMX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0VOQSAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTElORU9VVExfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExJTkVPVVRMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVExfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICA0ICAvKiBMSU5FT1VUTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVExfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9STVZfU0hPUlQgICAgICAgICAgICAgICAweDAwMDggIC8qIExJTkVPVVRSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfUk1WX1NIT1JUX01BU0sgICAgICAgICAgMHgwMDA4ICAvKiBMSU5FT1VUUl9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX1JNVl9TSE9SVF9TSElGVCAgICAgICAgICAgICAgMyAgLyogTElORU9VVFJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9STVZfU0hPUlRfV0lEVEggICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BX09VVFAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBMSU5FT1VUUl9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BX09VVFBfTUFTSyAgICAgICAgICAgMHgwMDA0ICAvKiBMSU5FT1VUUl9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BX09VVFBfU0hJRlQgICAgICAgICAgICAgICAyICAvKiBMSU5FT1VUUl9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BX09VVFBfV0lEVEggICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUUl9FTkFfT1VUUCAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BX0RMWSAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBMSU5FT1VUUl9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9FTkFfRExZX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIExJTkVPVVRSX0VOQV9ETFkgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0VOQV9ETFlfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVFJfRU5BX0RMWSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BX0RMWV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUUl9FTkFfRExZICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9FTkEgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExJTkVPVVRSX0VOQSAqLworI2RlZmluZSBXTTg5MDRfTElORU9VVFJfRU5BX01BU0sgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMSU5FT1VUUl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0xJTkVPVVRSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogTElORU9VVFJfRU5BICovCisjZGVmaW5lIFdNODkwNF9MSU5FT1VUUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVRSX0VOQSAqLworCisvKgorICogUjk4ICgweDYyKSAtIENoYXJnZSBQdW1wIDAKKyAqLworI2RlZmluZSBXTTg5MDRfQ1BfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBDUF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0NQX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQ1BfRU5BICovCisjZGVmaW5lIFdNODkwNF9DUF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIENQX0VOQSAqLworI2RlZmluZSBXTTg5MDRfQ1BfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBDUF9FTkEgKi8KKworLyoKKyAqIFIxMDQgKDB4NjgpIC0gQ2xhc3MgVyAwCisgKi8KKyNkZWZpbmUgV004OTA0X0NQX0RZTl9QV1IgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQ1BfRFlOX1BXUiAqLworI2RlZmluZSBXTTg5MDRfQ1BfRFlOX1BXUl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBDUF9EWU5fUFdSICovCisjZGVmaW5lIFdNODkwNF9DUF9EWU5fUFdSX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIENQX0RZTl9QV1IgKi8KKyNkZWZpbmUgV004OTA0X0NQX0RZTl9QV1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ1BfRFlOX1BXUiAqLworCisvKgorICogUjEwOCAoMHg2QykgLSBXcml0ZSBTZXF1ZW5jZXIgMAorICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfRU5BICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfRU5BICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfRU5BICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfRU5BICovCisjZGVmaW5lIFdNODkwNF9XU0VRX1dSSVRFX0lOREVYX01BU0sgICAgICAgICAgICAweDAwMUYgIC8qIFdTRVFfV1JJVEVfSU5ERVggLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9XUklURV9JTkRFWF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBXU0VRX1dSSVRFX0lOREVYIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfV1JJVEVfSU5ERVhfV0lEVEggICAgICAgICAgICAgICAgNSAgLyogV1NFUV9XUklURV9JTkRFWCAtIFs0OjBdICovCisKKy8qCisgKiBSMTA5ICgweDZEKSAtIFdyaXRlIFNlcXVlbmNlciAxCisgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfREFUQV9XSURUSF9NQVNLICAgICAgICAgICAgIDB4NzAwMCAgLyogV1NFUV9EQVRBX1dJRFRIIC0gWzE0OjEyXSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9EQVRBX1dJRFRIX1NISUZUICAgICAgICAgICAgICAgIDEyICAvKiBXU0VRX0RBVEFfV0lEVEggLSBbMTQ6MTJdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0RBVEFfV0lEVEhfV0lEVEggICAgICAgICAgICAgICAgIDMgIC8qIFdTRVFfREFUQV9XSURUSCAtIFsxNDoxMl0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfREFUQV9TVEFSVF9NQVNLICAgICAgICAgICAgIDB4MEYwMCAgLyogV1NFUV9EQVRBX1NUQVJUIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0RBVEFfU1RBUlRfU0hJRlQgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfREFUQV9TVEFSVCAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9EQVRBX1NUQVJUX1dJRFRIICAgICAgICAgICAgICAgICA0ICAvKiBXU0VRX0RBVEFfU1RBUlQgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQUREUl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogV1NFUV9BRERSIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQUREUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogV1NFUV9BRERSIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQUREUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogV1NFUV9BRERSIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMTAgKDB4NkUpIC0gV3JpdGUgU2VxdWVuY2VyIDIKKyAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FT1MgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBXU0VRX0VPUyAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FT1NfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBXU0VRX0VPUyAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FT1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBXU0VRX0VPUyAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FT1NfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0VPUyAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9ERUxBWV9NQVNLICAgICAgICAgICAgICAgICAgMHgwRjAwICAvKiBXU0VRX0RFTEFZIC0gWzExOjhdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0RFTEFZX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfREVMQVkgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfREVMQVlfV0lEVEggICAgICAgICAgICAgICAgICAgICAgNCAgLyogV1NFUV9ERUxBWSAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9EQVRBX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBXU0VRX0RBVEEgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9EQVRBX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBXU0VRX0RBVEEgLSBbNzowXSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9EQVRBX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBXU0VRX0RBVEEgLSBbNzowXSAqLworCisvKgorICogUjExMSAoMHg2RikgLSBXcml0ZSBTZXF1ZW5jZXIgMworICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0FCT1JUICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIFdTRVFfQUJPUlQgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQUJPUlRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogV1NFUV9BQk9SVCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9BQk9SVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBXU0VRX0FCT1JUICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0FCT1JUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfQUJPUlQgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9TVEFSVCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9TVEFSVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX1NUQVJUICovCisjZGVmaW5lIFdNODkwNF9XU0VRX1NUQVJUX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfU1RBUlQgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfU1RBUlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9TVEFSVCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9TVEFSVF9JTkRFWF9NQVNLICAgICAgICAgICAgMHgwMDNGICAvKiBXU0VRX1NUQVJUX0lOREVYIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfU1RBUlRfSU5ERVhfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogV1NFUV9TVEFSVF9JTkRFWCAtIFs1OjBdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX1NUQVJUX0lOREVYX1dJRFRIICAgICAgICAgICAgICAgIDYgIC8qIFdTRVFfU1RBUlRfSU5ERVggLSBbNTowXSAqLworCisvKgorICogUjExMiAoMHg3MCkgLSBXcml0ZSBTZXF1ZW5jZXIgNAorICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0NVUlJFTlRfSU5ERVhfTUFTSyAgICAgICAgICAweDAzRjAgIC8qIFdTRVFfQ1VSUkVOVF9JTkRFWCAtIFs5OjRdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0NVUlJFTlRfSU5ERVhfU0hJRlQgICAgICAgICAgICAgIDQgIC8qIFdTRVFfQ1VSUkVOVF9JTkRFWCAtIFs5OjRdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0NVUlJFTlRfSU5ERVhfV0lEVEggICAgICAgICAgICAgIDYgIC8qIFdTRVFfQ1VSUkVOVF9JTkRFWCAtIFs5OjRdICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFdTRVFfQlVTWSAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9CVVNZX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBXU0VRX0JVU1kgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfQlVTWV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogV1NFUV9CVVNZICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0JVU1lfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfQlVTWSAqLworCisvKgorICogUjExNiAoMHg3NCkgLSBGTEwgQ29udHJvbCAxCisgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkFDTl9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX0ZSQUNOX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0ZSQUNOX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfRlJBQ05fRU5BICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJBQ05fRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDIgIC8qIEZMTF9GUkFDTl9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkFDTl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX0ZSQUNOX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRkxMX09TQ19FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBGTExfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRkxMX09TQ19FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBGTExfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRkxMX09TQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRkxMX09TQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBGTExfRU5BICovCisjZGVmaW5lIFdNODkwNF9GTExfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEZMTF9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfRU5BICovCisKKy8qCisgKiBSMTE3ICgweDc1KSAtIEZMTCBDb250cm9sIDIKKyAqLworI2RlZmluZSBXTTg5MDRfRkxMX09VVERJVl9NQVNLICAgICAgICAgICAgICAgICAgMHgzRjAwICAvKiBGTExfT1VURElWIC0gWzEzOjhdICovCisjZGVmaW5lIFdNODkwNF9GTExfT1VURElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEZMTF9PVVRESVYgLSBbMTM6OF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9PVVRESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgNiAgLyogRkxMX09VVERJViAtIFsxMzo4XSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0NUUkxfUkFURV9NQVNLICAgICAgICAgICAgICAgMHgwMDcwICAvKiBGTExfQ1RSTF9SQVRFIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9DVFJMX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogRkxMX0NUUkxfUkFURSAtIFs2OjRdICovCisjZGVmaW5lIFdNODkwNF9GTExfQ1RSTF9SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgIDMgIC8qIEZMTF9DVFJMX1JBVEUgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0ZSQVRJT19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBGTExfRlJBVElPIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkFUSU9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0ZSQVRJTyAtIFsyOjBdICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJBVElPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEZMTF9GUkFUSU8gLSBbMjowXSAqLworCisvKgorICogUjExOCAoMHg3NikgLSBGTEwgQ29udHJvbCAzCisgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9LX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRkxMX0sgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9LX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0sgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9LX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRkxMX0sgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTkgKDB4NzcpIC0gRkxMIENvbnRyb2wgNAorICovCisjZGVmaW5lIFdNODkwNF9GTExfTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDdGRTAgIC8qIEZMTF9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODkwNF9GTExfTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEZMTF9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODkwNF9GTExfTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIEZMTF9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODkwNF9GTExfR0FJTl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEZMTF9HQUlOIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0dBSU4gLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBGTExfR0FJTiAtIFszOjBdICovCisKKy8qCisgKiBSMTIwICgweDc4KSAtIEZMTCBDb250cm9sIDUKKyAqLworI2RlZmluZSBXTTg5MDRfRkxMX0NMS19SRUZfRElWX01BU0sgICAgICAgICAgICAgMHgwMDE4ICAvKiBGTExfQ0xLX1JFRl9ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0NMS19SRUZfRElWX1NISUZUICAgICAgICAgICAgICAgICAzICAvKiBGTExfQ0xLX1JFRl9ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0NMS19SRUZfRElWX1dJRFRIICAgICAgICAgICAgICAgICAyICAvKiBGTExfQ0xLX1JFRl9ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0NMS19SRUZfU1JDX01BU0sgICAgICAgICAgICAgMHgwMDAzICAvKiBGTExfQ0xLX1JFRl9TUkMgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0NMS19SRUZfU1JDX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBGTExfQ0xLX1JFRl9TUkMgLSBbMTowXSAqLworI2RlZmluZSBXTTg5MDRfRkxMX0NMS19SRUZfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAyICAvKiBGTExfQ0xLX1JFRl9TUkMgLSBbMTowXSAqLworCisvKgorICogUjEyMSAoMHg3OSkgLSBHUElPIENvbnRyb2wgMQorICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9QVSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8xX1BVICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8xX1BVICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEdQSU8xX1BVICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8xX1BVICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9QRCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSU8xX1BEICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9QRF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSU8xX1BEICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSU8xX1BEICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8xX1BEICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEdQSU8xX1NFTCAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEdQSU8xX1NFTCAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSU8xX1NFTCAtIFszOjBdICovCisKKy8qCisgKiBSMTIyICgweDdBKSAtIEdQSU8gQ29udHJvbCAyCisgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzJfUFUgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1BVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzJfUFUgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogR1BJTzJfUFUgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzJfUFUgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJTzJfUEQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1BEX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJTzJfUEQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1BJTzJfUEQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzJfUEQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogR1BJTzJfU0VMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1BJTzJfU0VMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1BJTzJfU0VMIC0gWzM6MF0gKi8KKworLyoKKyAqIFIxMjMgKDB4N0IpIC0gR1BJTyBDb250cm9sIDMKKyAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPM19QVSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPM19QVSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBHUElPM19QVSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPM19QVSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUElPM19QRCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUElPM19QRCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUElPM19QRCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPM19QRCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBHUElPM19TRUwgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBHUElPM19TRUwgLSBbMzowXSAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUElPM19TRUwgLSBbMzowXSAqLworCisvKgorICogUjEyNCAoMHg3QykgLSBHUElPIENvbnRyb2wgNAorICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQSTdfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQSTdfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIEdQSTdfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSTdfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEdQSThfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEdQSThfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEdQSThfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSThfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfTU9ERV9FTkEgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU9fQkNMS19NT0RFX0VOQSAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX01PREVfRU5BX01BU0sgICAgICAgICAgMHgwMDgwICAvKiBHUElPX0JDTEtfTU9ERV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19NT0RFX0VOQV9TSElGVCAgICAgICAgICAgICAgNyAgLyogR1BJT19CQ0xLX01PREVfRU5BICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfTU9ERV9FTkFfV0lEVEggICAgICAgICAgICAgIDEgIC8qIEdQSU9fQkNMS19NT0RFX0VOQSAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX1NFTF9NQVNLICAgICAgICAgICAgICAgMHgwMDBGICAvKiBHUElPX0JDTEtfU0VMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogR1BJT19CQ0xLX1NFTCAtIFszOjBdICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSU9fQkNMS19TRUwgLSBbMzowXSAqLworCisvKgorICogUjEyNiAoMHg3RSkgLSBEaWdpdGFsIFB1bGxzCisgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfUFUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUNMS19QVSAqLworI2RlZmluZSBXTTg5MDRfTUNMS19QVV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBNQ0xLX1BVICovCisjZGVmaW5lIFdNODkwNF9NQ0xLX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIE1DTEtfUFUgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUNMS19QVSAqLworI2RlZmluZSBXTTg5MDRfTUNMS19QRCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNQ0xLX1BEICovCisjZGVmaW5lIFdNODkwNF9NQ0xLX1BEX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIE1DTEtfUEQgKi8KKyNkZWZpbmUgV004OTA0X01DTEtfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTUNMS19QRCAqLworI2RlZmluZSBXTTg5MDRfTUNMS19QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0xLX1BEICovCisjZGVmaW5lIFdNODkwNF9EQUNEQVRfUFUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERBQ0RBVF9QVSAqLworI2RlZmluZSBXTTg5MDRfREFDREFUX1BVX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBEQUNEQVRfUFUgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0RBVF9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogREFDREFUX1BVICovCisjZGVmaW5lIFdNODkwNF9EQUNEQVRfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0RBVF9QVSAqLworI2RlZmluZSBXTTg5MDRfREFDREFUX1BEICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQUNEQVRfUEQgKi8KKyNkZWZpbmUgV004OTA0X0RBQ0RBVF9QRF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogREFDREFUX1BEICovCisjZGVmaW5lIFdNODkwNF9EQUNEQVRfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERBQ0RBVF9QRCAqLworI2RlZmluZSBXTTg5MDRfREFDREFUX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNEQVRfUEQgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogTFJDTEtfUFUgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1BVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogTFJDTEtfUFUgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTFJDTEtfUFUgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTFJDTEtfUFUgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTFJDTEtfUEQgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1BEX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTFJDTEtfUEQgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTFJDTEtfUEQgKi8KKyNkZWZpbmUgV004OTA0X0xSQ0xLX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTFJDTEtfUEQgKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfUFUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQkNMS19QVSAqLworI2RlZmluZSBXTTg5MDRfQkNMS19QVV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBCQ0xLX1BVICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEtfUFUgKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQkNMS19QVSAqLworI2RlZmluZSBXTTg5MDRfQkNMS19QRCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBCQ0xLX1BEICovCisjZGVmaW5lIFdNODkwNF9CQ0xLX1BEX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEJDTEtfUEQgKi8KKyNkZWZpbmUgV004OTA0X0JDTEtfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQkNMS19QRCAqLworI2RlZmluZSBXTTg5MDRfQkNMS19QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQ0xLX1BEICovCisKKy8qCisgKiBSMTI3ICgweDdGKSAtIEludGVycnVwdCBTdGF0dXMKKyAqLworI2RlZmluZSBXTTg5MDRfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBJUlEgKi8KKyNkZWZpbmUgV004OTA0X0lSUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogSVJRICovCisjZGVmaW5lIFdNODkwNF9JUlFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIElSUSAqLworI2RlZmluZSBXTTg5MDRfSVJRX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJUlEgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19FSU5UICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1BJT19CQ0xLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19FSU5UX01BU0sgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1BJT19CQ0xLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgOSAgLyogR1BJT19CQ0xLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogR1BJT19CQ0xLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBXU0VRX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU8zX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BJTzNfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBHUElPM19FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8zX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX0VJTlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BJTzJfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUElPMl9FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEdQSU8yX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzJfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPMV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8xX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNSAgLyogR1BJTzFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPMV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSThfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUEk4X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1BJOF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSThfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBHUEk3X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogR1BJN19FSU5UICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEdQSTdfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUEk3X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9MT0NLX0VJTlQgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfRkxMX0xPQ0tfRUlOVF9NQVNLICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9GTExfTE9DS19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgIDIgIC8qIEZMTF9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9MT0NLX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVCAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hSVF9FSU5UX01BU0sgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ19TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSFJUX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDX1NIUlRfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0VJTlQgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9FSU5UX01BU0sgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogTUlDX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ19ERVRfRUlOVCAqLworCisvKgorICogUjEyOCAoMHg4MCkgLSBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sKKyAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJT19CQ0xLX0VJTlQgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBJTV9HUElPX0JDTEtfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJT19CQ0xLX0VJTlRfTUFTSyAgICAgICAgICAgMHgwMjAwICAvKiBJTV9HUElPX0JDTEtfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJT19CQ0xLX0VJTlRfU0hJRlQgICAgICAgICAgICAgICA5ICAvKiBJTV9HUElPX0JDTEtfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJT19CQ0xLX0VJTlRfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTV9HUElPX0JDTEtfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fV1NFUV9FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTV9XU0VRX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX1dTRVFfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSU1fV1NFUV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9XU0VRX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgIDggIC8qIElNX1dTRVFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fV1NFUV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9XU0VRX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU8zX0VJTlQgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU1fR1BJTzNfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJTzNfRUlOVF9NQVNLICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTV9HUElPM19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPM19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgIDcgIC8qIElNX0dQSU8zX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU8zX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1BJTzNfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJTzJfRUlOVCAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTV9HUElPMl9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPMl9FSU5UX01BU0sgICAgICAgICAgICAgICAweDAwNDAgIC8qIElNX0dQSU8yX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU8yX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgNiAgLyogSU1fR1BJTzJfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJTzJfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUElPMl9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPMV9FSU5UICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElNX0dQSU8xX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSU8xX0VJTlRfTUFTSyAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU1fR1BJTzFfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJTzFfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICA1ICAvKiBJTV9HUElPMV9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUElPMV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQSU8xX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSThfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSU1fR1BJOF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUEk4X0VJTlRfTUFTSyAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElNX0dQSThfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJOF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICA0ICAvKiBJTV9HUEk4X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSThfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1BJOF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUEk3X0VJTlQgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIElNX0dQSTdfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fR1BJN19FSU5UX01BU0sgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBJTV9HUEk3X0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0dQSTdfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMyAgLyogSU1fR1BJN19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9HUEk3X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQSTdfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fRkxMX0xPQ0tfRUlOVCAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBJTV9GTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9GTExfTE9DS19FSU5UX01BU0sgICAgICAgICAgICAweDAwMDQgIC8qIElNX0ZMTF9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX0ZMTF9MT0NLX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgMiAgLyogSU1fRkxMX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fRkxMX0xPQ0tfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBJTV9GTExfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9NSUNfU0hSVF9FSU5UICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIElNX01JQ19TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX01JQ19TSFJUX0VJTlRfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogSU1fTUlDX1NIUlRfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fTUlDX1NIUlRfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBJTV9NSUNfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9NSUNfU0hSVF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIElNX01JQ19TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX01JQ19ERVRfRUlOVCAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSU1fTUlDX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODkwNF9JTV9NSUNfREVUX0VJTlRfTUFTSyAgICAgICAgICAgICAweDAwMDEgIC8qIElNX01JQ19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5MDRfSU1fTUlDX0RFVF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBJTV9NSUNfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTA0X0lNX01JQ19ERVRfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogSU1fTUlDX0RFVF9FSU5UICovCisKKy8qCisgKiBSMTI5ICgweDgxKSAtIEludGVycnVwdCBQb2xhcml0eQorICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfRUlOVF9QT0wgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQSU9fQkNMS19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJT19CQ0xLX0VJTlRfUE9MX01BU0sgICAgICAgICAgMHgwMjAwICAvKiBHUElPX0JDTEtfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSU9fQkNMS19FSU5UX1BPTF9TSElGVCAgICAgICAgICAgICAgOSAgLyogR1BJT19CQ0xLX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfRUlOVF9QT0xfV0lEVEggICAgICAgICAgICAgIDEgIC8qIEdQSU9fQkNMS19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FSU5UX1BPTCAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VJTlRfUE9MX01BU0sgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRUlOVF9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgOCAgLyogV1NFUV9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FSU5UX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UX1BPTCAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU8zX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UX1BPTF9NQVNLICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU8zX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgIDcgIC8qIEdQSU8zX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8zX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UX1BPTCAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQSU8yX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UX1BPTF9NQVNLICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQSU8yX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgIDYgIC8qIEdQSU8yX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8yX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9FSU5UX1BPTCAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8xX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9FSU5UX1BPTF9NQVNLICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU8xX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9FSU5UX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgIDUgIC8qIEdQSU8xX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9FSU5UX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8xX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VJTlRfUE9MICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSThfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRUlOVF9QT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJOF9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FSU5UX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBHUEk4X0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VJTlRfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSThfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRUlOVF9QT0wgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogR1BJN19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FSU5UX1BPTF9NQVNLICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBHUEk3X0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VJTlRfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgIDMgIC8qIEdQSTdfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRUlOVF9QT0xfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogR1BJN19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfRkxMX0xPQ0tfRUlOVF9QT0wgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfTE9DS19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfRkxMX0xPQ0tfRUlOVF9QT0xfTUFTSyAgICAgICAgICAgMHgwMDA0ICAvKiBGTExfTE9DS19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfRkxMX0xPQ0tfRUlOVF9QT0xfU0hJRlQgICAgICAgICAgICAgICAyICAvKiBGTExfTE9DS19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfRkxMX0xPQ0tfRUlOVF9QT0xfV0lEVEggICAgICAgICAgICAgICAxICAvKiBGTExfTE9DS19FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVF9QT0wgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNfU0hSVF9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVF9QT0xfTUFTSyAgICAgICAgICAgMHgwMDAyICAvKiBNSUNfU0hSVF9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVF9QT0xfU0hJRlQgICAgICAgICAgICAgICAxICAvKiBNSUNfU0hSVF9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVF9QT0xfV0lEVEggICAgICAgICAgICAgICAxICAvKiBNSUNfU0hSVF9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9FSU5UX1BPTCAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNfREVUX0VJTlRfUE9MICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0VJTlRfUE9MX01BU0sgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ19ERVRfRUlOVF9QT0wgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRUlOVF9QT0xfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogTUlDX0RFVF9FSU5UX1BPTCAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9FSU5UX1BPTF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBNSUNfREVUX0VJTlRfUE9MICovCisKKy8qCisgKiBSMTMwICgweDgyKSAtIEludGVycnVwdCBEZWJvdW5jZQorICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfRUlOVF9EQiAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQSU9fQkNMS19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfRUlOVF9EQl9NQVNLICAgICAgICAgICAweDAyMDAgIC8qIEdQSU9fQkNMS19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfRUlOVF9EQl9TSElGVCAgICAgICAgICAgICAgIDkgIC8qIEdQSU9fQkNMS19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPX0JDTEtfRUlOVF9EQl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEdQSU9fQkNMS19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VJTlRfREIgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfV1NFUV9FSU5UX0RCX01BU0sgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X1dTRVFfRUlOVF9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgOCAgLyogV1NFUV9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9XU0VRX0VJTlRfREJfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfRUlOVF9EQiAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUElPM19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPM19FSU5UX0RCX01BU0sgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU8zX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8zX0VJTlRfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgNyAgLyogR1BJTzNfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJTzNfRUlOVF9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPM19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UX0RCICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQSU8yX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8yX0VJTlRfREJfTUFTSyAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BJTzJfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJTzJfRUlOVF9EQl9TSElGVCAgICAgICAgICAgICAgICAgICA2ICAvKiBHUElPMl9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPMl9FSU5UX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8yX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX0VJTlRfREIgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzFfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJTzFfRUlOVF9EQl9NQVNLICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPMV9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUElPMV9FSU5UX0RCX1NISUZUICAgICAgICAgICAgICAgICAgIDUgIC8qIEdQSU8xX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSU8xX0VJTlRfREJfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzFfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FSU5UX0RCICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUEk4X0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSThfRUlOVF9EQl9NQVNLICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJOF9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUEk4X0VJTlRfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSThfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJOF9FSU5UX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBHUEk4X0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRUlOVF9EQiAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogR1BJN19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9HUEk3X0VJTlRfREJfTUFTSyAgICAgICAgICAgICAgICAweDAwMDggIC8qIEdQSTdfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfR1BJN19FSU5UX0RCX1NISUZUICAgICAgICAgICAgICAgICAgICAzICAvKiBHUEk3X0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0dQSTdfRUlOVF9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJN19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9GTExfTE9DS19FSU5UX0RCICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEZMTF9MT0NLX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9MT0NLX0VJTlRfREJfTUFTSyAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMX0xPQ0tfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfRkxMX0xPQ0tfRUlOVF9EQl9TSElGVCAgICAgICAgICAgICAgICAyICAvKiBGTExfTE9DS19FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9GTExfTE9DS19FSU5UX0RCX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9MT0NLX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSFJUX0VJTlRfREIgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDX1NIUlRfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfTUlDX1NIUlRfRUlOVF9EQl9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNfU0hSVF9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9NSUNfU0hSVF9FSU5UX0RCX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIE1JQ19TSFJUX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X01JQ19TSFJUX0VJTlRfREJfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogTUlDX1NIUlRfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9FSU5UX0RCICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNfREVUX0VJTlRfREIgKi8KKyNkZWZpbmUgV004OTA0X01JQ19ERVRfRUlOVF9EQl9NQVNLICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDX0RFVF9FSU5UX0RCICovCisjZGVmaW5lIFdNODkwNF9NSUNfREVUX0VJTlRfREJfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIE1JQ19ERVRfRUlOVF9EQiAqLworI2RlZmluZSBXTTg5MDRfTUlDX0RFVF9FSU5UX0RCX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBNSUNfREVUX0VJTlRfREIgKi8KKworLyoKKyAqIFIxMzQgKDB4ODYpIC0gRVExCisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRVFfRU5BICovCisjZGVmaW5lIFdNODkwNF9FUV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEVRX0VOQSAqLworI2RlZmluZSBXTTg5MDRfRVFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9FTkEgKi8KKyNkZWZpbmUgV004OTA0X0VRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRVFfRU5BICovCisKKy8qCisgKiBSMTM1ICgweDg3KSAtIEVRMgorICovCisjZGVmaW5lIFdNODkwNF9FUV9CMV9HQUlOX01BU0sgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIEVRX0IxX0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjFfR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CMV9HQUlOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IxX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgNSAgLyogRVFfQjFfR0FJTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTM2ICgweDg4KSAtIEVRMworICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9HQUlOX01BU0sgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIEVRX0IyX0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CMl9HQUlOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgNSAgLyogRVFfQjJfR0FJTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTM3ICgweDg5KSAtIEVRNAorICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19HQUlOX01BU0sgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIEVRX0IzX0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CM19HQUlOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgNSAgLyogRVFfQjNfR0FJTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTM4ICgweDhBKSAtIEVRNQorICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9HQUlOX01BU0sgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIEVRX0I0X0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CNF9HQUlOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgNSAgLyogRVFfQjRfR0FJTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTM5ICgweDhCKSAtIEVRNgorICovCisjZGVmaW5lIFdNODkwNF9FUV9CNV9HQUlOX01BU0sgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIEVRX0I1X0dBSU4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjVfR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CNV9HQUlOIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I1X0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgNSAgLyogRVFfQjVfR0FJTiAtIFs0OjBdICovCisKKy8qCisgKiBSMTQwICgweDhDKSAtIEVRNworICovCisjZGVmaW5lIFdNODkwNF9FUV9CMV9BX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IxX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IxX0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjFfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjFfQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CMV9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQxICgweDhEKSAtIEVROAorICovCisjZGVmaW5lIFdNODkwNF9FUV9CMV9CX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IxX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IxX0JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjFfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjFfQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CMV9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQyICgweDhFKSAtIEVROQorICovCisjZGVmaW5lIFdNODkwNF9FUV9CMV9QR19NQVNLICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IxX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMV9QR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IxX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMV9QR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IxX1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQzICgweDhGKSAtIEVRMTAKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CMl9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IyX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX0FfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjJfQSAtIFsxNTowXSAqLworCisvKgorICogUjE0NCAoMHg5MCkgLSBFUTExCisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX0JfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjJfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CMl9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9CX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IyX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDUgKDB4OTEpIC0gRVExMgorICovCisjZGVmaW5lIFdNODkwNF9FUV9CMl9DX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IyX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IyX0NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjJfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CMl9DIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQ2ICgweDkyKSAtIEVRMTMKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfUEdfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CMl9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfUEdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CMl9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjJfUEdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CMl9QRyAtIFsxNTowXSAqLworCisvKgorICogUjE0NyAoMHg5MykgLSBFUTE0CisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX0FfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjNfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CM19BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0IzX0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDggKDB4OTQpIC0gRVExNQorICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19CX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0IzX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX0JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjNfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CM19CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQ5ICgweDk1KSAtIEVRMTYKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjNfQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CM19DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CM19DX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0IzX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX0NfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjNfQyAtIFsxNTowXSAqLworCisvKgorICogUjE1MCAoMHg5NikgLSBFUTE3CisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX1BHX01BU0sgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjNfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX1BHX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjNfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0IzX1BHX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjNfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNTEgKDB4OTcpIC0gRVExOAorICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9BX01BU0sgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0I0X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X0FfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRVFfQjRfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBFUV9CNF9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTUyICgweDk4KSAtIEVRMTkKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfQl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CNF9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9CX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0I0X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X0JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjRfQiAtIFsxNTowXSAqLworCisvKgorICogUjE1MyAoMHg5OSkgLSBFUTIwCisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0I0X0NfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjRfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjRfQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CNF9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9DX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0I0X0MgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNTQgKDB4OUEpIC0gRVEyMQorICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9QR19NQVNLICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0I0X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9QR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0I0X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNF9QR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0I0X1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTU1ICgweDlCKSAtIEVRMjIKKyAqLworI2RlZmluZSBXTTg5MDRfRVFfQjVfQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBFUV9CNV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNV9BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0I1X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0VRX0I1X0FfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRVFfQjVfQSAtIFsxNTowXSAqLworCisvKgorICogUjE1NiAoMHg5QykgLSBFUTIzCisgKi8KKyNkZWZpbmUgV004OTA0X0VRX0I1X0JfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRVFfQjVfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5MDRfRVFfQjVfQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBFUV9CNV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNV9CX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0I1X0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNTcgKDB4OUQpIC0gRVEyNAorICovCisjZGVmaW5lIFdNODkwNF9FUV9CNV9QR19NQVNLICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEVRX0I1X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNV9QR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEVRX0I1X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODkwNF9FUV9CNV9QR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEVRX0I1X1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTYxICgweEExKSAtIENvbnRyb2wgSW50ZXJmYWNlIFRlc3QgMQorICovCisjZGVmaW5lIFdNODkwNF9VU0VSX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFVTRVJfS0VZICovCisjZGVmaW5lIFdNODkwNF9VU0VSX0tFWV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFVTRVJfS0VZICovCisjZGVmaW5lIFdNODkwNF9VU0VSX0tFWV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFVTRVJfS0VZICovCisjZGVmaW5lIFdNODkwNF9VU0VSX0tFWV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFVTRVJfS0VZICovCisKKy8qCisgKiBSMjA0ICgweENDKSAtIEFuYWxvZ3VlIE91dHB1dCBCaWFzIDAKKyAqLworI2RlZmluZSBXTTg5MDRfUEdBX0JJQVNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDcwICAvKiBQR0FfQklBUyAtIFs2OjRdICovCisjZGVmaW5lIFdNODkwNF9QR0FfQklBU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFBHQV9CSUFTIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTA0X1BHQV9CSUFTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogUEdBX0JJQVMgLSBbNjo0XSAqLworCisvKgorICogUjI0NyAoMHhGNykgLSBGTEwgTkNPIFRlc3QgMAorICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJDX05DTyAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEZMTF9GUkNfTkNPICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJDX05DT19NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEZMTF9GUkNfTkNPICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJDX05DT19TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9GUkNfTkNPICovCisjZGVmaW5lIFdNODkwNF9GTExfRlJDX05DT19XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9GUkNfTkNPICovCisKKy8qCisgKiBSMjQ4ICgweEY4KSAtIEZMTCBOQ08gVGVzdCAxCisgKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkNfTkNPX1ZBTF9NQVNLICAgICAgICAgICAgIDB4MDAzRiAgLyogRkxMX0ZSQ19OQ09fVkFMIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkNfTkNPX1ZBTF9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0ZSQ19OQ09fVkFMIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTA0X0ZMTF9GUkNfTkNPX1ZBTF9XSURUSCAgICAgICAgICAgICAgICAgNiAgLyogRkxMX0ZSQ19OQ09fVkFMIC0gWzU6MF0gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk1NS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTVkYWIyCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NTUuYwpAQCAtMCwwICsxLDExNTEgQEAKKy8qCisgKiB3bTg5NTUuYyAgLS0gIFdNODk1NSBBTFNBIFNvQyBBdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgcGxjCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDxzb3VuZC93bTg5NTUuaD4KKworI2luY2x1ZGUgIndtODk1NS5oIgorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODk1NV9jb2RlYzsKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODk1NTsKKworI2RlZmluZSBXTTg5NTVfTlVNX1NVUFBMSUVTIDQKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NTVfc3VwcGx5X25hbWVzW1dNODk1NV9OVU1fU1VQUExJRVNdID0geworCSJEQ1ZERCIsCisJIkRCVkREIiwKKwkiSFBWREQiLAorCSJBVkREIiwKK307CisKKy8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLworc3RydWN0IHdtODk1NV9wcml2IHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1MTYgcmVnX2NhY2hlW1dNODk1NV9NQVhfUkVHSVNURVIgKyAxXTsKKworCXVuc2lnbmVkIGludCBtY2xrX3JhdGU7CisKKwlpbnQgZGVlbXBoOworCWludCBmczsKKworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW1dNODk1NV9OVU1fU1VQUExJRVNdOworCisJc3RydWN0IHdtODk1NV9wZGF0YSAqcGRhdGE7Cit9OworCitzdGF0aWMgY29uc3QgdTE2IHdtODk1NV9yZWdbV004OTU1X01BWF9SRUdJU1RFUiArIDFdID0geworCTB4MDAwMCwgICAgIC8qIFIwICovCisJMHgwMDAwLCAgICAgLyogUjEgKi8KKwkweDAwNzksICAgICAvKiBSMiAgLSBMT1VUMSB2b2x1bWUgKi8KKwkweDAwNzksICAgICAvKiBSMyAgLSBST1VUMSB2b2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSNCAqLworCTB4MDAwOCwgICAgIC8qIFI1ICAtIERBQyBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjYgKi8KKwkweDAwMEEsICAgICAvKiBSNyAgLSBBdWRpbyBJbnRlcmZhY2UgKi8KKwkweDAwMDAsICAgICAvKiBSOCAgLSBTYW1wbGUgUmF0ZSAqLworCTB4MDAwMCwgICAgIC8qIFI5ICovCisJMHgwMEZGLCAgICAgLyogUjEwIC0gTGVmdCBEQUMgdm9sdW1lICovCisJMHgwMEZGLCAgICAgLyogUjExIC0gUmlnaHQgREFDIHZvbHVtZSAqLworCTB4MDAwRiwgICAgIC8qIFIxMiAtIEJhc3MgY29udHJvbCAqLworCTB4MDAwRiwgICAgIC8qIFIxMyAtIFRyZWJsZSBjb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjE0ICovCisJMHgwMDAwLCAgICAgLyogUjE1IC0gUmVzZXQgKi8KKwkweDAwMDAsICAgICAvKiBSMTYgKi8KKwkweDAwMDAsICAgICAvKiBSMTcgKi8KKwkweDAwMDAsICAgICAvKiBSMTggKi8KKwkweDAwMDAsICAgICAvKiBSMTkgKi8KKwkweDAwMDAsICAgICAvKiBSMjAgKi8KKwkweDAwMDAsICAgICAvKiBSMjEgKi8KKwkweDAwMDAsICAgICAvKiBSMjIgKi8KKwkweDAwQzEsICAgICAvKiBSMjMgLSBBZGRpdGlvbmFsIGNvbnRyb2wgKDEpICovCisJMHgwMDAwLCAgICAgLyogUjI0IC0gQWRkaXRpb25hbCBjb250cm9sICgyKSAqLworCTB4MDAwMCwgICAgIC8qIFIyNSAtIFBvd2VyIE1hbmFnZW1lbnQgKDEpICovCisJMHgwMDAwLCAgICAgLyogUjI2IC0gUG93ZXIgTWFuYWdlbWVudCAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSMjcgLSBBZGRpdGlvbmFsIENvbnRyb2wgKDMpICovCisJMHgwMDAwLCAgICAgLyogUjI4ICovCisJMHgwMDAwLCAgICAgLyogUjI5ICovCisJMHgwMDAwLCAgICAgLyogUjMwICovCisJMHgwMDAwLCAgICAgLyogUjMxICovCisJMHgwMDAwLCAgICAgLyogUjMyICovCisJMHgwMDAwLCAgICAgLyogUjMzICovCisJMHgwMDUwLCAgICAgLyogUjM0IC0gTGVmdCBvdXQgTWl4ICgxKSAqLworCTB4MDA1MCwgICAgIC8qIFIzNSAtIExlZnQgb3V0IE1peCAoMikgKi8KKwkweDAwNTAsICAgICAvKiBSMzYgLSBSaWdodCBvdXQgTWl4ICgxKSAqLworCTB4MDA1MCwgICAgIC8qIFIzNyAtIFJpZ2h0IE91dCBNaXggKDIpICovCisJMHgwMDUwLCAgICAgLyogUjM4IC0gTW9ubyBvdXQgTWl4ICgxKSAqLworCTB4MDA1MCwgICAgIC8qIFIzOSAtIE1vbm8gb3V0IE1peCAoMikgKi8KKwkweDAwNzksICAgICAvKiBSNDAgLSBMT1VUMiB2b2x1bWUgKi8KKwkweDAwNzksICAgICAvKiBSNDEgLSBST1VUMiB2b2x1bWUgKi8KKwkweDAwNzksICAgICAvKiBSNDIgLSBNT05PT1VUIHZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFI0MyAtIENsb2NraW5nIC8gUExMICovCisJMHgwMTAzLCAgICAgLyogUjQ0IC0gUExMIENvbnRyb2wgMSAqLworCTB4MDAyNCwgICAgIC8qIFI0NSAtIFBMTCBDb250cm9sIDIgKi8KKwkweDAxQkEsICAgICAvKiBSNDYgLSBQTEwgQ29udHJvbCAzICovCisJMHgwMDAwLCAgICAgLyogUjQ3ICovCisJMHgwMDAwLCAgICAgLyogUjQ4ICovCisJMHgwMDAwLCAgICAgLyogUjQ5ICovCisJMHgwMDAwLCAgICAgLyogUjUwICovCisJMHgwMDAwLCAgICAgLyogUjUxICovCisJMHgwMDAwLCAgICAgLyogUjUyICovCisJMHgwMDAwLCAgICAgLyogUjUzICovCisJMHgwMDAwLCAgICAgLyogUjU0ICovCisJMHgwMDAwLCAgICAgLyogUjU1ICovCisJMHgwMDAwLCAgICAgLyogUjU2ICovCisJMHgwMDAwLCAgICAgLyogUjU3ICovCisJMHgwMDAwLCAgICAgLyogUjU4ICovCisJMHgwMDAwLCAgICAgLyogUjU5IC0gUExMIENvbnRyb2wgNCAqLworfTsKKworc3RhdGljIGludCB3bTg5NTVfcmVzZXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NTVfUkVTRVQsIDApOworfQorCitzdHJ1Y3QgcGxsX2ZhY3RvcnMgeworCWludCBuOworCWludCBrOworCWludCBvdXRkaXY7Cit9OworCisvKiBUaGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSBGTEwgZGl2aWRlIG11bHRpcGxpZWQgYnkgMTAKKyAqIHRvIGFsbG93IHJvdW5kaW5nIGxhdGVyICovCisjZGVmaW5lIEZJWEVEX0ZMTF9TSVpFICgoMSA8PCAyMikgKiAxMCkKKworc3RhdGljIGludCB3bTg5OTVfcGxsX2ZhY3RvcnMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgaW50IEZyZWYsIGludCBGb3V0LCBzdHJ1Y3QgcGxsX2ZhY3RvcnMgKnBsbCkKK3sKKwl1NjQgS3BhcnQ7CisJdW5zaWduZWQgaW50IEssIE5kaXYsIE5tb2QsIHRhcmdldDsKKworCWRldl9kYmcoZGV2LCAiRnJlZj0ldSBGb3V0PSV1XG4iLCBGcmVmLCBGb3V0KTsKKworCS8qIFRoZSBvc2NpbGF0b3Igc2hvdWxkIHJ1biBhdCBzaG91bGQgYmUgOTAtMTAwTUh6LCBhbmQKKwkgKiB0aGVyZSdzIGEgZGl2aWRlIGJ5IDQgcGx1cyBhbiBvcHRpb25hbCBkaXZpZGUgYnkgMiBpbiB0aGUKKwkgKiBvdXRwdXQgcGF0aCB0byBnZW5lcmF0ZSB0aGUgc3lzdGVtIGNsb2NrLiAgVGhlIGNsb2NrIHRhYmxlCisJICogaXMgc29ydGQgc28gd2Ugc2hvdWxkIGFsd2F5cyBnZW5lcmF0ZSBhIHN1aXRhYmxlIHRhcmdldC4gKi8KKwl0YXJnZXQgPSBGb3V0ICogNDsKKwlpZiAodGFyZ2V0IDwgOTAwMDAwMDApIHsKKwkJcGxsLT5vdXRkaXYgPSAxOworCQl0YXJnZXQgKj0gMjsKKwl9IGVsc2UgeworCQlwbGwtPm91dGRpdiA9IDA7CisJfQorCisJV0FSTl9PTih0YXJnZXQgPCA5MDAwMDAwMCB8fCB0YXJnZXQgPiAxMDAwMDAwMDApOworCisJZGV2X2RiZyhkZXYsICJGdmNvPSVkSHpcbiIsIHRhcmdldCk7CisKKwkvKiBOb3csIGNhbGN1bGF0ZSBOLksgKi8KKwlOZGl2ID0gdGFyZ2V0IC8gRnJlZjsKKworCXBsbC0+biA9IE5kaXY7CisJTm1vZCA9IHRhcmdldCAlIEZyZWY7CisJZGV2X2RiZyhkZXYsICJObW9kPSVkXG4iLCBObW9kKTsKKworCS8qIENhbGN1bGF0ZSBmcmFjdGlvbmFsIHBhcnQgLSBzY2FsZSB1cCBzbyB3ZSBjYW4gcm91bmQuICovCisJS3BhcnQgPSBGSVhFRF9GTExfU0laRSAqIChsb25nIGxvbmcpTm1vZDsKKworCWRvX2RpdihLcGFydCwgRnJlZik7CisKKwlLID0gS3BhcnQgJiAweEZGRkZGRkZGOworCisJaWYgKChLICUgMTApID49IDUpCisJCUsgKz0gNTsKKworCS8qIE1vdmUgZG93biB0byBwcm9wZXIgcmFuZ2Ugbm93IHJvdW5kaW5nIGlzIGRvbmUgKi8KKwlwbGwtPmsgPSBLIC8gMTA7CisKKwlkZXZfZGJnKGRldiwgIk49JXggSz0leCBPVVRESVY9JXhcbiIsIHBsbC0+biwgcGxsLT5rLCBwbGwtPm91dGRpdik7CisKKwlyZXR1cm4gMDsKK30KKworLyogTG9va3VwIHRhYmxlIHNwZWNpZml5aW5nIFNSQVRFICh0YWJsZSAyNSBpbiBkYXRhc2hlZXQpOyBzb21lIG9mIHRoZQorICogb3V0cHV0IGZyZXF1ZW5jaWVzIGhhdmUgYmVlbiByb3VuZGVkIHRvIHRoZSBzdGFuZGFyZCBmcmVxdWVuY2llcworICogdGhleSBhcmUgaW50ZW5kZWQgdG8gbWF0Y2ggd2hlcmUgdGhlIGVycm9yIGlzIHNsaWdodC4gKi8KK3N0YXRpYyBzdHJ1Y3QgeworCWludCBtY2xrOworCWludCBmczsKKwlpbnQgdXNiOworCWludCBzcjsKK30gY2xvY2tfY2Znc1tdID0geworCXsgMTg0MzIwMDAsICA4MDAwLCAwLCAgMywgfSwKKwl7IDE4NDMyMDAwLCAxMjAwMCwgMCwgIDksIH0sCisJeyAxODQzMjAwMCwgMTYwMDAsIDAsIDExLCB9LAorCXsgMTg0MzIwMDAsIDI0MDAwLCAwLCAyOSwgfSwKKwl7IDE4NDMyMDAwLCAzMjAwMCwgMCwgMTMsIH0sCisJeyAxODQzMjAwMCwgNDgwMDAsIDAsICAxLCB9LAorCXsgMTg0MzIwMDAsIDk2MDAwLCAwLCAxNSwgfSwKKworCXsgMTY5MzQ0MDAsICA4MDE4LCAwLCAxOSwgfSwKKwl7IDE2OTM0NDAwLCAxMTAyNSwgMCwgMjUsIH0sCisJeyAxNjkzNDQwMCwgMjIwNTAsIDAsIDI3LCB9LAorCXsgMTY5MzQ0MDAsIDQ0MTAwLCAwLCAxNywgfSwKKwl7IDE2OTM0NDAwLCA4ODIwMCwgMCwgMzEsIH0sCisKKwl7IDEyMDAwMDAwLCAgODAwMCwgMSwgIDIsIH0sCisJeyAxMjAwMDAwMCwgMTEwMjUsIDEsIDI1LCB9LAorCXsgMTIwMDAwMDAsIDEyMDAwLCAxLCAgOCwgfSwKKwl7IDEyMDAwMDAwLCAxNjAwMCwgMSwgMTAsIH0sCisJeyAxMjAwMDAwMCwgMjIwNTAsIDEsIDI3LCB9LAorCXsgMTIwMDAwMDAsIDI0MDAwLCAxLCAyOCwgfSwKKwl7IDEyMDAwMDAwLCAzMjAwMCwgMSwgMTIsIH0sCisJeyAxMjAwMDAwMCwgNDQxMDAsIDEsIDE3LCB9LAorCXsgMTIwMDAwMDAsIDQ4MDAwLCAxLCAgMCwgfSwKKwl7IDEyMDAwMDAwLCA4ODIwMCwgMSwgMzEsIH0sCisJeyAxMjAwMDAwMCwgOTYwMDAsIDEsIDE0LCB9LAorCisJeyAxMjI4ODAwMCwgIDgwMDAsIDAsICAyLCB9LAorCXsgMTIyODgwMDAsIDEyMDAwLCAwLCAgOCwgfSwKKwl7IDEyMjg4MDAwLCAxNjAwMCwgMCwgMTAsIH0sCisJeyAxMjI4ODAwMCwgMjQwMDAsIDAsIDI4LCB9LAorCXsgMTIyODgwMDAsIDMyMDAwLCAwLCAxMiwgfSwKKwl7IDEyMjg4MDAwLCA0ODAwMCwgMCwgIDAsIH0sCisJeyAxMjI4ODAwMCwgOTYwMDAsIDAsIDE0LCB9LAorCisJeyAxMjI4OTYwMCwgIDgwMTgsIDAsIDE4LCB9LAorCXsgMTIyODk2MDAsIDExMDI1LCAwLCAyNCwgfSwKKwl7IDEyMjg5NjAwLCAyMjA1MCwgMCwgMjYsIH0sCisJeyAxMTI4OTYwMCwgNDQxMDAsIDAsIDE2LCB9LAorCXsgMTEyODk2MDAsIDg4MjAwLCAwLCAzMSwgfSwKK307CisKK3N0YXRpYyBpbnQgd204OTU1X2NvbmZpZ3VyZV9jbG9ja2luZyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODk1NV9wcml2ICp3bTg5NTUgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBpLCByZXQsIHZhbDsKKwlpbnQgY2xvY2tpbmcgPSAwOworCWludCBzcmF0ZSA9IDA7CisJaW50IHNyID0gLTE7CisJc3RydWN0IHBsbF9mYWN0b3JzIHBsbDsKKworCS8qIElmIHdlJ3JlIG5vdCBydW5uaW5nIGEgc2FtcGxlIHJhdGUgY3VycmVudGx5IGp1c3QgcGljayBvbmUgKi8KKwlpZiAod204OTU1LT5mcyA9PSAwKQorCQl3bTg5NTUtPmZzID0gODAwMDsKKworCS8qIENhbiB3ZSBnZW5lcmF0ZSBhbiBleGFjdCBvdXRwdXQ/ICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2xvY2tfY2Zncyk7IGkrKykgeworCQlpZiAod204OTU1LT5mcyAhPSBjbG9ja19jZmdzW2ldLmZzKQorCQkJY29udGludWU7CisJCXNyID0gaTsKKworCQlpZiAod204OTU1LT5tY2xrX3JhdGUgPT0gY2xvY2tfY2Znc1tpXS5tY2xrKQorCQkJYnJlYWs7CisJfQorCisJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIHdpdGggYW4gdW5zdXBwb3J0ZWQgc2FtcGxlIHJhdGUgKi8KKwlpZiAoc3IgPT0gLTEpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiU2FtcGxlIHJhdGUgJWRIeiB1bnN1cHBvcnRlZFxuIiwKKwkJCXdtODk1NS0+ZnMpOworCQlXQVJOX09OKHNyID09IC0xKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGkgPT0gQVJSQVlfU0laRShjbG9ja19jZmdzKSkgeworCQkvKiBJZiB3ZSBjYW4ndCBnZW5lcmF0ZSB0aGUgcmlnaHQgY2xvY2sgZnJvbSBNQ0xLIHRoZW4KKwkJICogd2Ugc2hvdWxkIGNvbmZpZ3VyZSB0aGUgUExMIHRvIHN1cHBseSB1cyB3aXRoIGFuCisJCSAqIGFwcHJvcHJpYXRlIGNsb2NrLgorCQkgKi8KKwkJY2xvY2tpbmcgfD0gV004OTU1X01DTEtTRUw7CisKKwkJLyogVXNlIHRoZSBsYXN0IGRpdmlkZXIgY29uZmlndXJhdGlvbiB3ZSBzYXcgZm9yIHRoZQorCQkgKiBzYW1wbGUgcmF0ZS4gKi8KKwkJcmV0ID0gd204OTk1X3BsbF9mYWN0b3JzKGNvZGVjLT5kZXYsIHdtODk1NS0+bWNsa19yYXRlLAorCQkJCQkgY2xvY2tfY2Znc1tzcl0ubWNsaywgJnBsbCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCSJVbmFibGUgdG8gZ2VuZXJhdGUgJWRIeiBmcm9tICVkSHogTUNMS1xuIiwKKwkJCQl3bTg5NTUtPmZzLCB3bTg5NTUtPm1jbGtfcmF0ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9QTExfQ09OVFJPTF8xLAorCQkJCSAgICBXTTg5NTVfTl9NQVNLIHwgV004OTU1X0tfMjFfMThfTUFTSywKKwkJCQkgICAgKHBsbC5uIDw8IFdNODk1NV9OX1NISUZUKSB8CisJCQkJICAgIHBsbC5rID4+IDE4KTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1BMTF9DT05UUk9MXzIsCisJCQkJICAgIFdNODk1NV9LXzE3XzlfTUFTSywKKwkJCQkgICAgKHBsbC5rID4+IDkpICYgV004OTU1X0tfMTdfOV9NQVNLKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1BMTF9DT05UUk9MXzIsCisJCQkJICAgIFdNODk1NV9LXzhfMF9NQVNLLAorCQkJCSAgICBwbGwuayAmIFdNODk1NV9LXzhfMF9NQVNLKTsKKwkJaWYgKHBsbC5rKQorCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1BMTF9DT05UUk9MXzQsCisJCQkJCSAgICBXTTg5NTVfS0VOLCBXTTg5NTVfS0VOKTsKKwkJZWxzZQorCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1BMTF9DT05UUk9MXzQsCisJCQkJCSAgICBXTTg5NTVfS0VOLCAwKTsKKworCQlpZiAocGxsLm91dGRpdikKKwkJCXZhbCA9IFdNODk1NV9QTExfUkIgfCBXTTg5NTVfUExMT1VURElWMjsKKwkJZWxzZQorCQkJdmFsID0gV004OTU1X1BMTF9SQjsKKworCQkvKiBOb3cgc3RhcnQgdGhlIFBMTCBydW5uaW5nICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9DTE9DS0lOR19QTEwsCisJCQkJICAgIFdNODk1NV9QTExfUkIgfCBXTTg5NTVfUExMT1VURElWMiwgdmFsKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X0NMT0NLSU5HX1BMTCwKKwkJCQkgICAgV004OTU1X1BMTEVOLCBXTTg5NTVfUExMRU4pOworCX0KKworCXNyYXRlID0gY2xvY2tfY2Znc1tzcl0udXNiIHwgKGNsb2NrX2NmZ3Nbc3JdLnNyIDw8IFdNODk1NV9TUl9TSElGVCk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfU0FNUExFX1JBVEUsCisJCQkgICAgV004OTU1X1VTQiB8IFdNODk1NV9TUl9NQVNLLCBzcmF0ZSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X0NMT0NLSU5HX1BMTCwKKwkJCSAgICBXTTg5NTVfTUNMS1NFTCwgY2xvY2tpbmcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTU1X3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCSBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCWludCByZXQgPSAwOworCisJLyogQWx3YXlzIGRpc2FibGUgdGhlIGNsb2NrcyAtIGlmIHdlJ3JlIGRvaW5nIHJlY29uZmlndXJhdGlvbiB0aGlzCisJICogYXZvaWRzIG1pc2Nsb2NraW5nLgorCSAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkgICAgV004OTU1X0RJR0VOQiwgMCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X0NMT0NLSU5HX1BMTCwKKwkJCSAgICBXTTg5NTVfUExMX1JCIHwgV004OTU1X1BMTEVOLCAwKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKKwkJcmV0ID0gd204OTU1X2NvbmZpZ3VyZV9jbG9ja2luZyhjb2RlYyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGVlbXBoX3NldHRpbmdzW10gPSB7IDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAgfTsKKworc3RhdGljIGludCB3bTg5NTVfc2V0X2RlZW1waChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODk1NV9wcml2ICp3bTg5NTUgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCB2YWwsIGksIGJlc3Q7CisKKwkvKiBJZiB3ZSdyZSB1c2luZyBkZWVtcGhhc2lzIHNlbGVjdCB0aGUgbmVhcmVzdCBhdmFpbGFibGUgc2FtcGxlCisJICogcmF0ZS4KKwkgKi8KKwlpZiAod204OTU1LT5kZWVtcGgpIHsKKwkJYmVzdCA9IDE7CisJCWZvciAoaSA9IDI7IGkgPCBBUlJBWV9TSVpFKGRlZW1waF9zZXR0aW5ncyk7IGkrKykgeworCQkJaWYgKGFicyhkZWVtcGhfc2V0dGluZ3NbaV0gLSB3bTg5NTUtPmZzKSA8CisJCQkgICAgYWJzKGRlZW1waF9zZXR0aW5nc1tiZXN0XSAtIHdtODk1NS0+ZnMpKQorCQkJCWJlc3QgPSBpOworCQl9CisKKwkJdmFsID0gYmVzdCA8PCBXTTg5NTVfREVFTVBIX1NISUZUOworCX0gZWxzZSB7CisJCXZhbCA9IDA7CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiU2V0IGRlZW1waGFzaXMgJWRcbiIsIHZhbCk7CisKKwlyZXR1cm4gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X0RBQ19DT05UUk9MLAorCQkJCSAgIFdNODk1NV9ERUVNUEhfTUFTSywgdmFsKTsKK30KKworc3RhdGljIGludCB3bTg5NTVfZ2V0X2RlZW1waChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5NTVfcHJpdiAqd204OTU1ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiB3bTg5NTUtPmRlZW1waDsKK30KKworc3RhdGljIGludCB3bTg5NTVfcHV0X2RlZW1waChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5NTVfcHJpdiAqd204OTU1ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgZGVlbXBoID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKKworCWlmIChkZWVtcGggPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdtODk1NS0+ZGVlbXBoID0gZGVlbXBoOworCisJcmV0dXJuIHdtODk1NV9zZXRfZGVlbXBoKGNvZGVjKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmJhc3NfbW9kZV90ZXh0W10gPSB7CisJIkxpbmVhciIsICJBZGFwdGl2ZSIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGJhc3NfbW9kZSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk1NV9CQVNTX0NPTlRST0wsIDcsIDIsIGJhc3NfbW9kZV90ZXh0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmJhc3NfY3V0b2ZmX3RleHRbXSA9IHsKKwkiTG93IiwgIkhpZ2giCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGJhc3NfY3V0b2ZmID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTU1X0JBU1NfQ09OVFJPTCwgNiwgMiwgYmFzc19jdXRvZmZfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICp0cmVibGVfY3V0b2ZmX3RleHRbXSA9IHsKKwkiSGlnaCIsICJMb3ciCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHRyZWJsZV9jdXRvZmYgPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5NTVfVFJFQkxFX0NPTlRST0wsIDYsIDIsIHRyZWJsZV9jdXRvZmZfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkaWdpdGFsX3RsdiwgLTEyNzUwLCA1MCwgMSk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoYXR0ZW5fdGx2LCAtNjAwLCA2MDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGJ5cGFzc190bHYsIC0xNTAwLCAzMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKG1vbm9fdGx2LCAtMjEwMCwgMzAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShvdXRfdGx2LCAtMTIxMDAsIDEwMCwgMSk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUodHJlYmxlX3RsdiwgLTEyMDAsIDE1MCwgMSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5NTVfc25kX2NvbnRyb2xzW10gPSB7CitTT0NfRE9VQkxFX1JfVExWKCJEaWdpdGFsIFBsYXliYWNrIFZvbHVtZSIsIFdNODk1NV9MRUZUX0RBQ19WT0xVTUUsCisJCSBXTTg5NTVfUklHSFRfREFDX1ZPTFVNRSwgMCwgMjU1LCAwLCBkaWdpdGFsX3RsdiksCitTT0NfU0lOR0xFX1RMVigiUGxheWJhY2sgQXR0ZW51YXRpb24gVm9sdW1lIiwgV004OTU1X0RBQ19DT05UUk9MLCA3LCAxLCAxLAorCSAgICAgICBhdHRlbl90bHYpLAorU09DX1NJTkdMRV9CT09MX0VYVCgiREFDIERlZW1waGFzaXMgU3dpdGNoIiwgMCwKKwkJICAgIHdtODk1NV9nZXRfZGVlbXBoLCB3bTg5NTVfcHV0X2RlZW1waCksCisKK1NPQ19FTlVNKCJCYXNzIE1vZGUiLCBiYXNzX21vZGUpLAorU09DX0VOVU0oIkJhc3MgQ3V0b2ZmIiwgYmFzc19jdXRvZmYpLAorU09DX1NJTkdMRSgiQmFzcyBWb2x1bWUiLCBXTTg5NTVfQkFTU19DT05UUk9MLCAwLCAxNSwgMSksCisKK1NPQ19FTlVNKCJUcmVibGUgQ3V0b2ZmIiwgdHJlYmxlX2N1dG9mZiksCitTT0NfU0lOR0xFX1RMVigiVHJlYmxlIFZvbHVtZSIsIFdNODk1NV9UUkVCTEVfQ09OVFJPTCwgMCwgMTQsIDEsIHRyZWJsZV90bHYpLAorCitTT0NfU0lOR0xFX1RMVigiTGVmdCBCeXBhc3MgVm9sdW1lIiwgV004OTU1X0xFRlRfT1VUX01JWF8xLCA0LCA3LCAxLAorCSAgICAgICBieXBhc3NfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJMZWZ0IE1vbm8gVm9sdW1lIiwgV004OTU1X0xFRlRfT1VUX01JWF8yLCA0LCA3LCAxLAorCSAgICAgICBieXBhc3NfdGx2KSwKKworU09DX1NJTkdMRV9UTFYoIlJpZ2h0IE1vbm8gVm9sdW1lIiwgV004OTU1X1JJR0hUX09VVF9NSVhfMSwgNCwgNywgMSwKKwkgICAgICAgYnlwYXNzX3RsdiksCitTT0NfU0lOR0xFX1RMVigiUmlnaHQgQnlwYXNzIFZvbHVtZSIsIFdNODk1NV9SSUdIVF9PVVRfTUlYXzIsIDQsIDcsIDEsCisJICAgICAgIGJ5cGFzc190bHYpLAorCisvKiBOb3QgYSBzdGVyZW8gcGFpciBzbyB0aGV5IGxpbmUgdXAgd2l0aCB0aGUgREFQTSBzd2l0Y2hlcyAqLworU09DX1NJTkdMRV9UTFYoIk1vbm8gTGVmdCBCeXBhc3MgVm9sdW1lIiwgV004OTU1X01PTk9fT1VUX01JWF8xLCA0LCA3LCAxLAorCSAgICAgICBtb25vX3RsdiksCitTT0NfU0lOR0xFX1RMVigiTW9ubyBSaWdodCBCeXBhc3MgVm9sdW1lIiwgV004OTU1X01PTk9fT1VUX01JWF8yLCA0LCA3LCAxLAorCSAgICAgICBtb25vX3RsdiksCisKK1NPQ19ET1VCTEVfUl9UTFYoIkhlYWRwaG9uZSBWb2x1bWUiLCBXTTg5NTVfTE9VVDFfVk9MVU1FLAorCQkgV004OTU1X1JPVVQxX1ZPTFVNRSwgMCwgMTI3LCAwLCBvdXRfdGx2KSwKK1NPQ19ET1VCTEVfUigiSGVhZHBob25lIFpDIFN3aXRjaCIsIFdNODk1NV9MT1VUMV9WT0xVTUUsCisJICAgICBXTTg5NTVfUk9VVDFfVk9MVU1FLCA3LCAxLCAwKSwKKworU09DX0RPVUJMRV9SX1RMVigiU3BlYWtlciBWb2x1bWUiLCBXTTg5NTVfTE9VVDJfVk9MVU1FLAorCQkgV004OTU1X1JPVVQyX1ZPTFVNRSwgMCwgMTI3LCAwLCBvdXRfdGx2KSwKK1NPQ19ET1VCTEVfUigiU3BlYWtlciBaQyBTd2l0Y2giLCBXTTg5NTVfTE9VVDJfVk9MVU1FLAorCSAgICAgV004OTU1X1JPVVQyX1ZPTFVNRSwgNywgMSwgMCksCisKK1NPQ19TSU5HTEVfVExWKCJNb25vIFZvbHVtZSIsIFdNODk1NV9NT05PT1VUX1ZPTFVNRSwgMCwgMTI3LCAwLCBvdXRfdGx2KSwKK1NPQ19TSU5HTEUoIk1vbm8gWkMgU3dpdGNoIiwgV004OTU1X01PTk9PVVRfVk9MVU1FLCA3LCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsbWl4ZXJbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiUGxheWJhY2sgU3dpdGNoIiwgV004OTU1X0xFRlRfT1VUX01JWF8xLCA4LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiQnlwYXNzIFN3aXRjaCIsIFdNODk1NV9MRUZUX09VVF9NSVhfMSwgNywgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IFBsYXliYWNrIFN3aXRjaCIsIFdNODk1NV9MRUZUX09VVF9NSVhfMiwgOCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIk1vbm8gU3dpdGNoIiwgV004OTU1X0xFRlRfT1VUX01JWF8yLCA3LCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBybWl4ZXJbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiTGVmdCBQbGF5YmFjayBTd2l0Y2giLCBXTTg5NTVfUklHSFRfT1VUX01JWF8xLCA4LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTW9ubyBTd2l0Y2giLCBXTTg5NTVfUklHSFRfT1VUX01JWF8xLCA3LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiUGxheWJhY2sgU3dpdGNoIiwgV004OTU1X1JJR0hUX09VVF9NSVhfMiwgOCwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkJ5cGFzcyBTd2l0Y2giLCBXTTg5NTVfUklHSFRfT1VUX01JWF8yLCA3LCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBtbWl4ZXJbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiTGVmdCBQbGF5YmFjayBTd2l0Y2giLCBXTTg5NTVfTU9OT19PVVRfTUlYXzEsIDgsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMZWZ0IEJ5cGFzcyBTd2l0Y2giLCBXTTg5NTVfTU9OT19PVVRfTUlYXzEsIDcsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJSaWdodCBQbGF5YmFjayBTd2l0Y2giLCBXTTg5NTVfTU9OT19PVVRfTUlYXzIsIDgsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJSaWdodCBCeXBhc3MgU3dpdGNoIiwgV004OTU1X01PTk9fT1VUX01JWF8yLCA3LCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5NTVfZGFwbV93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fSU5QVVQoIk1PTk9JTi0iKSwKK1NORF9TT0NfREFQTV9JTlBVVCgiTU9OT0lOKyIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJMSU5FSU5SIiksCitTTkRfU09DX0RBUE1fSU5QVVQoIkxJTkVJTkwiKSwKKworU05EX1NPQ19EQVBNX1BHQSgiTW9ubyBJbnB1dCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9TVVBQTFkoIlNZU0NMSyIsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzEsIDAsIDEsIHdtODk1NV9zeXNjbGssCisJCSAgICBTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCitTTkRfU09DX0RBUE1fU1VQUExZKCJUU0RFTiIsIFdNODk1NV9BRERJVElPTkFMX0NPTlRST0xfMSwgOCwgMCwgTlVMTCwgMCksCisKK1NORF9TT0NfREFQTV9EQUMoIkRBQ0wiLCAiUGxheWJhY2siLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8yLCA4LCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIkRBQ1IiLCAiUGxheWJhY2siLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8yLCA3LCAwKSwKKworU05EX1NPQ19EQVBNX1BHQSgiTE9VVDEgUEdBIiwgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMiwgNiwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJST1VUMSBQR0EiLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8yLCA1LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0EoIkxPVVQyIFBHQSIsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzIsIDQsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiUk9VVDIgUEdBIiwgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMiwgMywgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBKCJNT1VUIFBHQSIsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzIsIDIsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQSgiT1VUMyBQR0EiLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8yLCAxLCAwLCBOVUxMLCAwKSwKKworLyogVGhlIG5hbWVzIGFyZSBjaG9zZW4gdG8gbWFrZSB0aGUgY29udHJvbCBuYW1lcyBuaWNlICovCitTTkRfU09DX0RBUE1fTUlYRVIoIkxlZnQiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAgIGxtaXhlciwgQVJSQVlfU0laRShsbWl4ZXIpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiUmlnaHQiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAgIHJtaXhlciwgQVJSQVlfU0laRShybWl4ZXIpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiTW9ubyIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJICAgbW1peGVyLCBBUlJBWV9TSVpFKG1taXhlcikpLAorCitTTkRfU09DX0RBUE1fT1VUUFVUKCJMT1VUMSIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiUk9VVDEiKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIkxPVVQyIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJST1VUMiIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiTU9OT09VVCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiT1VUMyIpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204OTU1X2ludGVyY29uW10gPSB7CisJeyAiREFDTCIsIE5VTEwsICJTWVNDTEsiIH0sCisJeyAiREFDUiIsIE5VTEwsICJTWVNDTEsiIH0sCisKKwl7ICJNb25vIElucHV0IiwgTlVMTCwgIk1PTk9JTi0iIH0sCisJeyAiTW9ubyBJbnB1dCIsIE5VTEwsICJNT05PSU4rIiB9LAorCisJeyAiTGVmdCIsICJQbGF5YmFjayBTd2l0Y2giLCAiREFDTCIgfSwKKwl7ICJMZWZ0IiwgIlJpZ2h0IFBsYXliYWNrIFN3aXRjaCIsICJEQUNSIiB9LAorCXsgIkxlZnQiLCAiQnlwYXNzIFN3aXRjaCIsICJMSU5FSU5MIiB9LAorCXsgIkxlZnQiLCAiTW9ubyBTd2l0Y2giLCAiTW9ubyBJbnB1dCIgfSwKKworCXsgIlJpZ2h0IiwgIlBsYXliYWNrIFN3aXRjaCIsICJEQUNSIiB9LAorCXsgIlJpZ2h0IiwgIkxlZnQgUGxheWJhY2sgU3dpdGNoIiwgIkRBQ0wiIH0sCisJeyAiUmlnaHQiLCAiQnlwYXNzIFN3aXRjaCIsICJMSU5FSU5SIiB9LAorCXsgIlJpZ2h0IiwgIk1vbm8gU3dpdGNoIiwgIk1vbm8gSW5wdXQiIH0sCisKKwl7ICJNb25vIiwgIkxlZnQgUGxheWJhY2sgU3dpdGNoIiwgIkRBQ0wiIH0sCisJeyAiTW9ubyIsICJSaWdodCBQbGF5YmFjayBTd2l0Y2giLCAiREFDUiIgfSwKKwl7ICJNb25vIiwgIkxlZnQgQnlwYXNzIFN3aXRjaCIsICJMSU5FSU5MIiB9LAorCXsgIk1vbm8iLCAiUmlnaHQgQnlwYXNzIFN3aXRjaCIsICJMSU5FSU5SIiB9LAorCisJeyAiTE9VVDEgUEdBIiwgTlVMTCwgIkxlZnQiIH0sCisJeyAiTE9VVDEiLCBOVUxMLCAiVFNERU4iIH0sCisJeyAiTE9VVDEiLCBOVUxMLCAiTE9VVDEgUEdBIiB9LAorCisJeyAiUk9VVDEgUEdBIiwgTlVMTCwgIlJpZ2h0IiB9LAorCXsgIlJPVVQxIiwgTlVMTCwgIlRTREVOIiB9LAorCXsgIlJPVVQxIiwgTlVMTCwgIlJPVVQxIFBHQSIgfSwKKworCXsgIkxPVVQyIFBHQSIsIE5VTEwsICJMZWZ0IiB9LAorCXsgIkxPVVQyIiwgTlVMTCwgIlRTREVOIiB9LAorCXsgIkxPVVQyIiwgTlVMTCwgIkxPVVQyIFBHQSIgfSwKKworCXsgIlJPVVQyIFBHQSIsIE5VTEwsICJSaWdodCIgfSwKKwl7ICJST1VUMiIsIE5VTEwsICJUU0RFTiIgfSwKKwl7ICJST1VUMiIsIE5VTEwsICJST1VUMiBQR0EiIH0sCisKKwl7ICJNT1VUIFBHQSIsIE5VTEwsICJNb25vIiB9LAorCXsgIk1PTk9PVVQiLCBOVUxMLCAiTU9VVCBQR0EiIH0sCisKKwkvKiBPVVQzIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQgKi8KKwl7ICJPVVQzIiwgTlVMTCwgIk9VVDMgUEdBIiB9LAorfTsKKworc3RhdGljIGludCB3bTg5NTVfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5NTVfc25kX2NvbnRyb2xzLAorCQkJICAgICBBUlJBWV9TSVpFKHdtODk1NV9zbmRfY29udHJvbHMpKTsKKworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODk1NV9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHdtODk1NV9kYXBtX3dpZGdldHMpKTsKKworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCB3bTg5NTVfaW50ZXJjb24sCisJCQkJQVJSQVlfU0laRSh3bTg5NTVfaW50ZXJjb24pKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk1NV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTU1X3ByaXYgKndtODk1NSA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKKwlpbnQgd2w7CisKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCXdsID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6CisJCXdsID0gMHg0OworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQl3bCA9IDB4ODsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJd2wgPSAweGM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfQVVESU9fSU5URVJGQUNFLAorCQkJICAgIFdNODk1NV9XTF9NQVNLLCB3bCk7CisKKwl3bTg5NTUtPmZzID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKwl3bTg5NTVfc2V0X2RlZW1waChjb2RlYyk7CisKKwkvKiBJZiB0aGUgY2hpcCBpcyBjbG9ja2VkIHRoZW4gZGlzYWJsZSB0aGUgY2xvY2tzIGFuZCBmb3JjZSBhCisJICogcmVjb25maWd1cmF0aW9uLCBvdGhlcndpc2UgREFQTSB3aWxsIHBvd2VyIHVwIHRoZQorCSAqIGNsb2NrcyBmb3IgdXMgbGF0ZXIuICovCisJcmV0ID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8xKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocmV0ICYgV004OTU1X0RJR0VOQikgeworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCSAgICBXTTg5NTVfRElHRU5CLCAwKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X0NMT0NLSU5HX1BMTCwKKwkJCQkgICAgV004OTU1X1BMTF9SQiB8IFdNODk1NV9QTExFTiwgMCk7CisKKwkJd204OTU1X2NvbmZpZ3VyZV9jbG9ja2luZyhjb2RlYyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB3bTg5NTVfc2V0X3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IGNsa19pZCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTU1X3ByaXYgKnByaXYgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBkaXY7CisKKwlzd2l0Y2ggKGNsa19pZCkgeworCWNhc2UgV004OTU1X0NMS19NQ0xLOgorCQlpZiAoZnJlcSA+IDE1MDAwMDAwKSB7CisJCQlwcml2LT5tY2xrX3JhdGUgPSBmcmVxIC89IDI7CisJCQlkaXYgPSBXTTg5NTVfTUNMS0RJVjI7CisJCX0gZWxzZSB7CisJCQlwcml2LT5tY2xrX3JhdGUgPSBmcmVxOworCQkJZGl2ID0gMDsKKwkJfQorCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9TQU1QTEVfUkFURSwKKwkJCQkgICAgV004OTU1X01DTEtESVYyLCBkaXYpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9kYmcoZGFpLT5kZXYsICJDbG9jayBzb3VyY2UgaXMgJWQgYXQgJXVIelxuIiwgY2xrX2lkLCBmcmVxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk1NV9zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJdTE2IGFpZiA9IDA7CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWFpZiB8PSBXTTg5NTVfTVM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQlhaWYgfD0gV004OTU1X0xSUDsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQlhaWYgfD0gMHgzOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJYWlmIHw9IDB4MjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJYWlmIHw9IDB4MTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJLyogZnJhbWUgaW52ZXJzaW9uIG5vdCB2YWxpZCBmb3IgRFNQIG1vZGVzICovCisJCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQkJYWlmIHw9IFdNODk1NV9CQ0xLSU5WOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6CisJCQlhaWYgfD0gV004OTU1X0JDTEtJTlYgfCBXTTg5NTVfTFJQOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCQlhaWYgfD0gV004OTU1X0JDTEtJTlY7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKKwkJCWFpZiB8PSBXTTg5NTVfTFJQOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfQVVESU9fSU5URVJGQUNFLAorCQkJICAgIFdNODk1NV9NUyB8IFdNODk1NV9GT1JNQVRfTUFTSyB8IFdNODk1NV9CQ0xLSU5WIHwKKwkJCSAgICBXTTg5NTVfTFJQLCBhaWYpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB3bTg5NTVfZGlnaXRhbF9tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLCBpbnQgbXV0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCWludCB2YWw7CisKKwlpZiAobXV0ZSkKKwkJdmFsID0gV004OTU1X0RBQ01VOworCWVsc2UKKwkJdmFsID0gMDsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9EQUNfQ09OVFJPTCwgV004OTU1X0RBQ01VLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTU1X3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCQkgZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJc3RydWN0IHdtODk1NV9wcml2ICp3bTg5NTUgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCByZXQsIGk7CisKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJLyogVk1JRCByZXNpc3RhbmNlIDIqNTBrICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJICAgIFdNODk1NV9WTUlEU0VMX01BU0ssCisJCQkJICAgIDB4MSA8PCBXTTg5NTVfVk1JRFNFTF9TSElGVCk7CisKKwkJLyogRGVmYXVsdCBiaWFzIGN1cnJlbnQgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X0FERElUSU9OQUxfQ09OVFJPTF8xLAorCQkJCSAgICBXTTg5NTVfVlNFTF9NQVNLLAorCQkJCSAgICAweDIgPDwgV004OTU1X1ZTRUxfU0hJRlQpOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CisJCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKSB7CisJCQlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRSh3bTg5NTUtPnN1cHBsaWVzKSwKKwkJCQkJCSAgICB3bTg5NTUtPnN1cHBsaWVzKTsKKwkJCWlmIChyZXQgIT0gMCkgeworCQkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkJIkZhaWxlZCB0byBlbmFibGUgc3VwcGxpZXM6ICVkXG4iLAorCQkJCQlyZXQpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisKKwkJCS8qIFN5bmMgYmFjayBjYWNoZWQgdmFsdWVzIGlmIHRoZXkncmUKKwkJCSAqIGRpZmZlcmVudCBmcm9tIHRoZSBoYXJkd2FyZSBkZWZhdWx0LgorCQkJICovCisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg5NTUtPnJlZ19jYWNoZSk7IGkrKykgeworCQkJCWlmIChpID09IFdNODk1NV9SRVNFVCkKKwkJCQkJY29udGludWU7CisKKwkJCQlpZiAod204OTU1LT5yZWdfY2FjaGVbaV0gPT0gd204OTU1X3JlZ1tpXSkKKwkJCQkJY29udGludWU7CisKKwkJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBpLCB3bTg5NTUtPnJlZ19jYWNoZVtpXSk7CisJCQl9CisKKwkJCS8qIEVuYWJsZSBWUkVGIGFuZCBWTUlEICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCQkgICAgV004OTU1X1ZSRUYgfAorCQkJCQkgICAgV004OTU1X1ZNSURTRUxfTUFTSywKKwkJCQkJICAgIFdNODk1NV9WUkVGIHwKKwkJCQkJICAgIDB4MyA8PCBXTTg5NTVfVlJFRl9TSElGVCk7CisKKwkJCS8qIExldCBWTUlEIHJhbXAgKi8KKwkJCW1zbGVlcCg1MDApOworCisJCQkvKiBIaWdoIHJlc2lzdGFuY2UgVlJPSSB0byBtYWludGFpbiBvdXRwdXRzICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLAorCQkJCQkgICAgV004OTU1X0FERElUSU9OQUxfQ09OVFJPTF8zLAorCQkJCQkgICAgV004OTU1X1ZST0ksIFdNODk1NV9WUk9JKTsKKwkJfQorCisJCS8qIE1haW50YWluIFZNSUQgd2l0aCAyKjI1MGsgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTU1X1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkgICAgV004OTU1X1ZNSURTRUxfTUFTSywKKwkJCQkgICAgMHgyIDw8IFdNODk1NV9WTUlEU0VMX1NISUZUKTsKKworCQkvKiBNaW5pbXVtIGJpYXMgY3VycmVudCAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NTVfQURESVRJT05BTF9DT05UUk9MXzEsCisJCQkJICAgIFdNODk1NV9WU0VMX01BU0ssIDApOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJLyogTG93IHJlc2lzdGFuY2UgVlJPSSB0byBoZWxwIGRpc2NoYXJnZSAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLAorCQkJCSAgICBXTTg5NTVfQURESVRJT05BTF9DT05UUk9MXzMsCisJCQkJICAgIFdNODk1NV9WUk9JLCAwKTsKKworCQkvKiBUdXJuIG9mZiBWTUlEIGFuZCBWUkVGICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk1NV9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJICAgIFdNODk1NV9WUkVGIHwKKwkJCQkgICAgV004OTU1X1ZNSURTRUxfTUFTSywgMCk7CisKKwkJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODk1NS0+c3VwcGxpZXMpLAorCQkJCSAgICAgICB3bTg5NTUtPnN1cHBsaWVzKTsKKwkJYnJlYWs7CisJfQorCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgV004OTU1X1JBVEVTIFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAKKworI2RlZmluZSBXTTg5NTVfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODk1NV9kYWlfb3BzID0geworCS5zZXRfc3lzY2xrID0gd204OTU1X3NldF9zeXNjbGssCisJLnNldF9mbXQgPSB3bTg5NTVfc2V0X2ZtdCwKKwkuaHdfcGFyYW1zID0gd204OTU1X2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlID0gd204OTU1X2RpZ2l0YWxfbXV0ZSwKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaSB3bTg5NTVfZGFpID0geworCS5uYW1lID0gIldNODk1NSIsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFdNODk1NV9SQVRFUywKKwkJLmZvcm1hdHMgPSBXTTg5NTVfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmd204OTU1X2RhaV9vcHMsCit9OworRVhQT1JUX1NZTUJPTF9HUEwod204OTU1X2RhaSk7CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgd204OTU1X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCXdtODk1NV9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NTVfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCisJd204OTU1X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHdtODk1NV9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgd204OTU1X3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIGludCB3bTg5NTVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh3bTg5NTVfY29kZWMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb2RlYyBkZXZpY2Ugbm90IHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204OTU1X2NvZGVjOworCWNvZGVjID0gd204OTU1X2NvZGVjOworCisJLyogcmVnaXN0ZXIgcGNtcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zOiAlZFxuIiwgcmV0KTsKKwkJZ290byBwY21fZXJyOworCX0KKworCXdtODk1NV9hZGRfd2lkZ2V0cyhjb2RlYyk7CisKKwlyZXR1cm4gcmV0OworCitwY21fZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204OTU1X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTU1ID0geworCS5wcm9iZSA9IAl3bTg5NTVfcHJvYmUsCisJLnJlbW92ZSA9IAl3bTg5NTVfcmVtb3ZlLAorCS5zdXNwZW5kID0gCXdtODk1NV9zdXNwZW5kLAorCS5yZXN1bWUgPQl3bTg5NTVfcmVzdW1lLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204OTU1KTsKKworc3RhdGljIGludCB3bTg5NTVfcmVnaXN0ZXIoc3RydWN0IHdtODk1NV9wcml2ICp3bTg5NTUsCisJCQkgICBlbnVtIHNuZF9zb2NfY29udHJvbF90eXBlIGNvbnRyb2wpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmd204OTU1LT5jb2RlYzsKKwlpbnQgaTsKKworCWlmICh3bTg5NTVfY29kZWMpIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQW5vdGhlciBXTTg5NTUgaXMgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+cHJpdmF0ZV9kYXRhID0gd204OTU1OworCWNvZGVjLT5uYW1lID0gIldNODk1NSI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOworCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHdtODk1NV9zZXRfYmlhc19sZXZlbDsKKwljb2RlYy0+ZGFpID0gJndtODk1NV9kYWk7CisJY29kZWMtPm51bV9kYWkgPSAxOworCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSA9IFdNODk1NV9NQVhfUkVHSVNURVI7CisJY29kZWMtPnJlZ19jYWNoZSA9ICZ3bTg5NTUtPnJlZ19jYWNoZTsKKworCW1lbWNweShjb2RlYy0+cmVnX2NhY2hlLCB3bTg5NTVfcmVnLCBzaXplb2Yod204OTU1X3JlZykpOworCisJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDcsIDksIGNvbnRyb2wpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk1NS0+c3VwcGxpZXMpOyBpKyspCisJCXdtODk1NS0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gd204OTU1X3N1cHBseV9uYW1lc1tpXTsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2dldChjb2RlYy0+ZGV2LCBBUlJBWV9TSVpFKHdtODk1NS0+c3VwcGxpZXMpLAorCQkJCSB3bTg5NTUtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3Qgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRSh3bTg5NTUtPnN1cHBsaWVzKSwKKwkJCQkgICAgd204OTU1LT5zdXBwbGllcyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBlbmFibGUgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9nZXQ7CisJfQorCisJcmV0ID0gd204OTU1X3Jlc2V0KGNvZGVjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9lbmFibGU7CisJfQorCisJd204OTU1X2RhaS5kZXYgPSBjb2RlYy0+ZGV2OworCisJLyogQ2hhbmdlIHNvbWUgZGVmYXVsdCBzZXR0aW5ncyAtIGxhdGNoIFZVIGFuZCBlbmFibGUgWkMgKi8KKwl3bTg5NTUtPnJlZ19jYWNoZVtXTTg5NTVfTEVGVF9EQUNfVk9MVU1FXSB8PSBXTTg5NTVfTERWVTsKKwl3bTg5NTUtPnJlZ19jYWNoZVtXTTg5NTVfUklHSFRfREFDX1ZPTFVNRV0gfD0gV004OTU1X1JEVlU7CisJd204OTU1LT5yZWdfY2FjaGVbV004OTU1X0xPVVQxX1ZPTFVNRV0gfD0gV004OTU1X0xPMVZVIHwgV004OTU1X0xPMVpDOworCXdtODk1NS0+cmVnX2NhY2hlW1dNODk1NV9ST1VUMV9WT0xVTUVdIHw9IFdNODk1NV9STzFWVSB8IFdNODk1NV9STzFaQzsKKwl3bTg5NTUtPnJlZ19jYWNoZVtXTTg5NTVfTE9VVDJfVk9MVU1FXSB8PSBXTTg5NTVfTE8yVlUgfCBXTTg5NTVfTE8yWkM7CisJd204OTU1LT5yZWdfY2FjaGVbV004OTU1X1JPVVQyX1ZPTFVNRV0gfD0gV004OTU1X1JPMlZVIHwgV004OTU1X1JPMlpDOworCXdtODk1NS0+cmVnX2NhY2hlW1dNODk1NV9NT05PT1VUX1ZPTFVNRV0gfD0gV004OTU1X01PWkM7CisKKwkvKiBBbHNvIGVuYWJsZSBhZGFwdGl2ZSBiYXNzIGJvb3N0IGJ5IGRlZmF1bHQgKi8KKwl3bTg5NTUtPnJlZ19jYWNoZVtXTTg5NTVfQkFTU19DT05UUk9MXSB8PSBXTTg5NTVfQkI7CisKKwkvKiBTZXQgcGxhdGZvcm0gZGF0YSB2YWx1ZXMgKi8KKwlpZiAod204OTU1LT5wZGF0YSkgeworCQlpZiAod204OTU1LT5wZGF0YS0+b3V0Ml9zcGVha2VyKQorCQkJd204OTU1LT5yZWdfY2FjaGVbV004OTU1X0FERElUSU9OQUxfQ09OVFJPTF8yXQorCQkJCXw9IFdNODk1NV9ST1VUMklOVjsKKworCQlpZiAod204OTU1LT5wZGF0YS0+bW9ub2luX2RpZmYpCisJCQl3bTg5NTUtPnJlZ19jYWNoZVtXTTg5NTVfTU9OT19PVVRfTUlYXzFdCisJCQkJfD0gV004OTU1X0RNRU47CisJfQorCisJd204OTU1X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwkvKiBCaWFzIGxldmVsIGNvbmZpZ3VyYXRpb24gd2lsbCBoYXZlIGRvbmUgYW4gZXh0cmEgZW5hYmxlICovCisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODk1NS0+c3VwcGxpZXMpLCB3bTg5NTUtPnN1cHBsaWVzKTsKKworCXdtODk1NV9jb2RlYyA9IGNvZGVjOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJndtODk1NV9kYWkpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJOiAlZFxuIiwgcmV0KTsKKwkJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2VuYWJsZToKKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204OTU1LT5zdXBwbGllcyksIHdtODk1NS0+c3VwcGxpZXMpOworZXJyX2dldDoKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204OTU1LT5zdXBwbGllcyksIHdtODk1NS0+c3VwcGxpZXMpOworZXJyOgorCWtmcmVlKHdtODk1NSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd204OTU1X3VucmVnaXN0ZXIoc3RydWN0IHdtODk1NV9wcml2ICp3bTg5NTUpCit7CisJd204OTU1X3NldF9iaWFzX2xldmVsKCZ3bTg5NTUtPmNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204OTU1LT5zdXBwbGllcyksIHdtODk1NS0+c3VwcGxpZXMpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODk1NV9kYWkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmd204OTU1LT5jb2RlYyk7CisJa2ZyZWUod204OTU1KTsKKwl3bTg5NTVfY29kZWMgPSBOVUxMOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorc3RhdGljIF9fZGV2aW5pdCBpbnQgd204OTU1X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgd204OTU1X3ByaXYgKndtODk1NTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisKKwl3bTg5NTUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204OTU1X3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAod204OTU1ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY29kZWMgPSAmd204OTU1LT5jb2RlYzsKKwljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCB3bTg5NTUpOworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CisJd204OTU1LT5wZGF0YSA9IGkyYy0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwljb2RlYy0+ZGV2ID0gJmkyYy0+ZGV2OworCisJcmV0dXJuIHdtODk1NV9yZWdpc3Rlcih3bTg5NTUsIFNORF9TT0NfSTJDKTsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204OTU1X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgd204OTU1X3ByaXYgKndtODk1NSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXdtODk1NV91bnJlZ2lzdGVyKHdtODk1NSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTg5NTVfaTJjX2lkW10gPSB7CisJeyAid204OTU1IiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg5NTVfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdtODk1NV9pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIndtODk1NSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gICAgd204OTU1X2kyY19wcm9iZSwKKwkucmVtb3ZlID0gICBfX2RldmV4aXRfcCh3bTg5NTVfaTJjX3JlbW92ZSksCisJLmlkX3RhYmxlID0gd204OTU1X2kyY19pZCwKK307CisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgd204OTU1X21vZGluaXQodm9pZCkKK3sKKwlpbnQgcmV0OworI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmd204OTU1X2kyY19kcml2ZXIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBXTTg5NTUgSTJDIGRyaXZlcjogJWRcbiIsCisJCSAgICAgICByZXQpOworCX0KKyNlbmRpZgorCXJldHVybiAwOworfQorbW9kdWxlX2luaXQod204OTU1X21vZGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd204OTU1X2V4aXQodm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9kcml2ZXIoJndtODk1NV9pMmNfZHJpdmVyKTsKKyNlbmRpZgorfQorbW9kdWxlX2V4aXQod204OTU1X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgV004OTU1IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk1NS5oIGIvc291bmQvc29jL2NvZGVjcy93bTg5NTUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTM0OWM4Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NTUuaApAQCAtMCwwICsxLDQ4OSBAQAorLyoKKyAqIHdtODk1NS5oICAtLSAgV004OTA0IEFTb0MgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzLCBwbGMKKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfV004OTU1X0gKKyNkZWZpbmUgX1dNODk1NV9ICisKKyNkZWZpbmUgV004OTU1X0NMS19NQ0xLIDEKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSB3bTg5NTVfZGFpOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODk1NTsKKworLyoKKyAqIFJlZ2lzdGVyIHZhbHVlcy4KKyAqLworI2RlZmluZSBXTTg5NTVfTE9VVDFfVk9MVU1FICAgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBXTTg5NTVfUk9VVDFfVk9MVU1FICAgICAgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBXTTg5NTVfREFDX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBXTTg5NTVfQVVESU9fSU5URVJGQUNFICAgICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBXTTg5NTVfU0FNUExFX1JBVEUgICAgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBXTTg5NTVfTEVGVF9EQUNfVk9MVU1FICAgICAgICAgICAgICAgICAgMHgwQQorI2RlZmluZSBXTTg5NTVfUklHSFRfREFDX1ZPTFVNRSAgICAgICAgICAgICAgICAgMHgwQgorI2RlZmluZSBXTTg5NTVfQkFTU19DT05UUk9MICAgICAgICAgICAgICAgICAgICAgMHgwQworI2RlZmluZSBXTTg5NTVfVFJFQkxFX0NPTlRST0wgICAgICAgICAgICAgICAgICAgMHgwRAorI2RlZmluZSBXTTg5NTVfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRgorI2RlZmluZSBXTTg5NTVfQURESVRJT05BTF9DT05UUk9MXzEgICAgICAgICAgICAgMHgxNworI2RlZmluZSBXTTg5NTVfQURESVRJT05BTF9DT05UUk9MXzIgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8xICAgICAgICAgICAgICAgMHgxOQorI2RlZmluZSBXTTg5NTVfUE9XRVJfTUFOQUdFTUVOVF8yICAgICAgICAgICAgICAgMHgxQQorI2RlZmluZSBXTTg5NTVfQURESVRJT05BTF9DT05UUk9MXzMgICAgICAgICAgICAgMHgxQgorI2RlZmluZSBXTTg5NTVfTEVGVF9PVVRfTUlYXzEgICAgICAgICAgICAgICAgICAgMHgyMgorI2RlZmluZSBXTTg5NTVfTEVGVF9PVVRfTUlYXzIgICAgICAgICAgICAgICAgICAgMHgyMworI2RlZmluZSBXTTg5NTVfUklHSFRfT1VUX01JWF8xICAgICAgICAgICAgICAgICAgMHgyNAorI2RlZmluZSBXTTg5NTVfUklHSFRfT1VUX01JWF8yICAgICAgICAgICAgICAgICAgMHgyNQorI2RlZmluZSBXTTg5NTVfTU9OT19PVVRfTUlYXzEgICAgICAgICAgICAgICAgICAgMHgyNgorI2RlZmluZSBXTTg5NTVfTU9OT19PVVRfTUlYXzIgICAgICAgICAgICAgICAgICAgMHgyNworI2RlZmluZSBXTTg5NTVfTE9VVDJfVk9MVU1FICAgICAgICAgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBXTTg5NTVfUk9VVDJfVk9MVU1FICAgICAgICAgICAgICAgICAgICAgMHgyOQorI2RlZmluZSBXTTg5NTVfTU9OT09VVF9WT0xVTUUgICAgICAgICAgICAgICAgICAgMHgyQQorI2RlZmluZSBXTTg5NTVfQ0xPQ0tJTkdfUExMICAgICAgICAgICAgICAgICAgICAgMHgyQgorI2RlZmluZSBXTTg5NTVfUExMX0NPTlRST0xfMSAgICAgICAgICAgICAgICAgICAgMHgyQworI2RlZmluZSBXTTg5NTVfUExMX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgICAgMHgyRAorI2RlZmluZSBXTTg5NTVfUExMX0NPTlRST0xfMyAgICAgICAgICAgICAgICAgICAgMHgyRQorI2RlZmluZSBXTTg5NTVfUExMX0NPTlRST0xfNCAgICAgICAgICAgICAgICAgICAgMHgzQgorCisjZGVmaW5lIFdNODk1NV9SRUdJU1RFUl9DT1VOVCAgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBXTTg5NTVfTUFYX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgICAgMHgzQgorCisvKgorICogRmllbGQgRGVmaW5pdGlvbnMuCisgKi8KKworLyoKKyAqIFIyICgweDAyKSAtIExPVVQxIHZvbHVtZQorICovCisjZGVmaW5lIFdNODk1NV9MTzFWVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExPMVZVICovCisjZGVmaW5lIFdNODk1NV9MTzFWVV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExPMVZVICovCisjZGVmaW5lIFdNODk1NV9MTzFWVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIExPMVZVICovCisjZGVmaW5lIFdNODk1NV9MTzFWVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPMVZVICovCisjZGVmaW5lIFdNODk1NV9MTzFaQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExPMVpDICovCisjZGVmaW5lIFdNODk1NV9MTzFaQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExPMVpDICovCisjZGVmaW5lIFdNODk1NV9MTzFaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExPMVpDICovCisjZGVmaW5lIFdNODk1NV9MTzFaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPMVpDICovCisjZGVmaW5lIFdNODk1NV9MT1VUVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwN0YgIC8qIExPVVRWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg5NTVfTE9VVFZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMT1VUVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTU1X0xPVVRWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTE9VVFZPTCAtIFs2OjBdICovCisKKy8qCisgKiBSMyAoMHgwMykgLSBST1VUMSB2b2x1bWUKKyAqLworI2RlZmluZSBXTTg5NTVfUk8xVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSTzFWVSAqLworI2RlZmluZSBXTTg5NTVfUk8xVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSTzFWVSAqLworI2RlZmluZSBXTTg5NTVfUk8xVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBSTzFWVSAqLworI2RlZmluZSBXTTg5NTVfUk8xVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSTzFWVSAqLworI2RlZmluZSBXTTg5NTVfUk8xWkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSTzFaQyAqLworI2RlZmluZSBXTTg5NTVfUk8xWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSTzFaQyAqLworI2RlZmluZSBXTTg5NTVfUk8xWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBSTzFaQyAqLworI2RlZmluZSBXTTg5NTVfUk8xWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSTzFaQyAqLworI2RlZmluZSBXTTg5NTVfUk9VVFZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDdGICAvKiBST1VUVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTU1X1JPVVRWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUk9VVFZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk1NV9ST1VUVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJPVVRWT0wgLSBbNjowXSAqLworCisvKgorICogUjUgKDB4MDUpIC0gREFDIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTg5NTVfREFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBEQVQgKi8KKyNkZWZpbmUgV004OTU1X0RBVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogREFUICovCisjZGVmaW5lIFdNODk1NV9EQVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIERBVCAqLworI2RlZmluZSBXTTg5NTVfREFUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQVQgKi8KKyNkZWZpbmUgV004OTU1X0RBQ01VICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDTVUgKi8KKyNkZWZpbmUgV004OTU1X0RBQ01VX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDTVUgKi8KKyNkZWZpbmUgV004OTU1X0RBQ01VX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogREFDTVUgKi8KKyNkZWZpbmUgV004OTU1X0RBQ01VX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTVUgKi8KKyNkZWZpbmUgV004OTU1X0RFRU1QSF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNiAgLyogREVFTVBIIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTU1X0RFRU1QSF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREVFTVBIIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTU1X0RFRU1QSF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogREVFTVBIIC0gWzI6MV0gKi8KKworLyoKKyAqIFI3ICgweDA3KSAtIEF1ZGlvIEludGVyZmFjZQorICovCisjZGVmaW5lIFdNODk1NV9CQ0xLSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEJDTEtJTlYgKi8KKyNkZWZpbmUgV004OTU1X0JDTEtJTlZfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQkNMS0lOViAqLworI2RlZmluZSBXTTg5NTVfQkNMS0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBCQ0xLSU5WICovCisjZGVmaW5lIFdNODk1NV9CQ0xLSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEtJTlYgKi8KKyNkZWZpbmUgV004OTU1X01TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTVMgKi8KKyNkZWZpbmUgV004OTU1X01TX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTVMgKi8KKyNkZWZpbmUgV004OTU1X01TX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTVMgKi8KKyNkZWZpbmUgV004OTU1X01TX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTVMgKi8KKyNkZWZpbmUgV004OTU1X0xSU1dBUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTFJTV0FQICovCisjZGVmaW5lIFdNODk1NV9MUlNXQVBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExSU1dBUCAqLworI2RlZmluZSBXTTg5NTVfTFJTV0FQX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMUlNXQVAgKi8KKyNkZWZpbmUgV004OTU1X0xSU1dBUF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTFJTV0FQICovCisjZGVmaW5lIFdNODk1NV9MUlAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExSUCAqLworI2RlZmluZSBXTTg5NTVfTFJQX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMUlAgKi8KKyNkZWZpbmUgV004OTU1X0xSUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTFJQICovCisjZGVmaW5lIFdNODk1NV9MUlBfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExSUCAqLworI2RlZmluZSBXTTg5NTVfV0xfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBXTCAtIFszOjJdICovCisjZGVmaW5lIFdNODk1NV9XTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFdMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004OTU1X1dMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogV0wgLSBbMzoyXSAqLworI2RlZmluZSBXTTg5NTVfRk9STUFUX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBGT1JNQVQgLSBbMTowXSAqLworI2RlZmluZSBXTTg5NTVfRk9STUFUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBGT1JNQVQgLSBbMTowXSAqLworI2RlZmluZSBXTTg5NTVfRk9STUFUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBGT1JNQVQgLSBbMTowXSAqLworCisvKgorICogUjggKDB4MDgpIC0gU2FtcGxlIFJhdGUKKyAqLworI2RlZmluZSBXTTg5NTVfQkNMS0RJVjIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBCQ0xLRElWMiAqLworI2RlZmluZSBXTTg5NTVfQkNMS0RJVjJfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBCQ0xLRElWMiAqLworI2RlZmluZSBXTTg5NTVfQkNMS0RJVjJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBCQ0xLRElWMiAqLworI2RlZmluZSBXTTg5NTVfQkNMS0RJVjJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQ0xLRElWMiAqLworI2RlZmluZSBXTTg5NTVfTUNMS0RJVjIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNQ0xLRElWMiAqLworI2RlZmluZSBXTTg5NTVfTUNMS0RJVjJfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNQ0xLRElWMiAqLworI2RlZmluZSBXTTg5NTVfTUNMS0RJVjJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBNQ0xLRElWMiAqLworI2RlZmluZSBXTTg5NTVfTUNMS0RJVjJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0xLRElWMiAqLworI2RlZmluZSBXTTg5NTVfU1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDNFICAvKiBTUiAtIFs1OjFdICovCisjZGVmaW5lIFdNODk1NV9TUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNSIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTU1X1NSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogU1IgLSBbNToxXSAqLworI2RlZmluZSBXTTg5NTVfVVNCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBVU0IgKi8KKyNkZWZpbmUgV004OTU1X1VTQl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVVNCICovCisjZGVmaW5lIFdNODk1NV9VU0JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFVTQiAqLworI2RlZmluZSBXTTg5NTVfVVNCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBVU0IgKi8KKworLyoKKyAqIFIxMCAoMHgwQSkgLSBMZWZ0IERBQyB2b2x1bWUKKyAqLworI2RlZmluZSBXTTg5NTVfTERWVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMRFZVICovCisjZGVmaW5lIFdNODk1NV9MRFZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExEVlUgKi8KKyNkZWZpbmUgV004OTU1X0xEVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTERWVSAqLworI2RlZmluZSBXTTg5NTVfTERWVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRFZVICovCisjZGVmaW5lIFdNODk1NV9MREFDVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIExEQUNWT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5NTVfTERBQ1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMREFDVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTU1X0xEQUNWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTERBQ1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTEgKDB4MEIpIC0gUmlnaHQgREFDIHZvbHVtZQorICovCisjZGVmaW5lIFdNODk1NV9SRFZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJEVlUgKi8KKyNkZWZpbmUgV004OTU1X1JEVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUkRWVSAqLworI2RlZmluZSBXTTg5NTVfUkRWVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBSRFZVICovCisjZGVmaW5lIFdNODk1NV9SRFZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJEVlUgKi8KKyNkZWZpbmUgV004OTU1X1JEQUNWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogUkRBQ1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk1NV9SREFDVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJEQUNWT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5NTVfUkRBQ1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBSREFDVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMiAoMHgwQykgLSBCYXNzIGNvbnRyb2wKKyAqLworI2RlZmluZSBXTTg5NTVfQkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBCQiAqLworI2RlZmluZSBXTTg5NTVfQkJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBCQiAqLworI2RlZmluZSBXTTg5NTVfQkJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBCQiAqLworI2RlZmluZSBXTTg5NTVfQkJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQiAqLworI2RlZmluZSBXTTg5NTVfQkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBCQyAqLworI2RlZmluZSBXTTg5NTVfQkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBCQyAqLworI2RlZmluZSBXTTg5NTVfQkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBCQyAqLworI2RlZmluZSBXTTg5NTVfQkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQyAqLworI2RlZmluZSBXTTg5NTVfQkFTU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBCQVNTIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTU1X0JBU1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQkFTUyAtIFszOjBdICovCisjZGVmaW5lIFdNODk1NV9CQVNTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEJBU1MgLSBbMzowXSAqLworCisvKgorICogUjEzICgweDBEKSAtIFRyZWJsZSBjb250cm9sCisgKi8KKyNkZWZpbmUgV004OTU1X1RDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVEMgKi8KKyNkZWZpbmUgV004OTU1X1RDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVEMgKi8KKyNkZWZpbmUgV004OTU1X1RDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogVEMgKi8KKyNkZWZpbmUgV004OTU1X1RDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVEMgKi8KKyNkZWZpbmUgV004OTU1X1RSQkxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogVFJCTCAtIFszOjBdICovCisjZGVmaW5lIFdNODk1NV9UUkJMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFRSQkwgLSBbMzowXSAqLworI2RlZmluZSBXTTg5NTVfVFJCTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBUUkJMIC0gWzM6MF0gKi8KKworLyoKKyAqIFIxNSAoMHgwRikgLSBSZXNldAorICovCisjZGVmaW5lIFdNODk1NV9SRVNFVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxRkYgIC8qIFJFU0VUIC0gWzg6MF0gKi8KKyNkZWZpbmUgV004OTU1X1JFU0VUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUkVTRVQgLSBbODowXSAqLworI2RlZmluZSBXTTg5NTVfUkVTRVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBSRVNFVCAtIFs4OjBdICovCisKKy8qCisgKiBSMjMgKDB4MTcpIC0gQWRkaXRpb25hbCBjb250cm9sICgxKQorICovCisjZGVmaW5lIFdNODk1NV9UU0RFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFRTREVOICovCisjZGVmaW5lIFdNODk1NV9UU0RFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFRTREVOICovCisjZGVmaW5lIFdNODk1NV9UU0RFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFRTREVOICovCisjZGVmaW5lIFdNODk1NV9UU0RFTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRTREVOICovCisjZGVmaW5lIFdNODk1NV9WU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwQzAgIC8qIFZTRUwgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5NTVfVlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBWU0VMIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTU1X1ZTRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogVlNFTCAtIFs3OjZdICovCisjZGVmaW5lIFdNODk1NV9ETU9OT01JWF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMzAgIC8qIERNT05PTUlYIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTU1X0RNT05PTUlYX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogRE1PTk9NSVggLSBbNTo0XSAqLworI2RlZmluZSBXTTg5NTVfRE1PTk9NSVhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBETU9OT01JWCAtIFs1OjRdICovCisjZGVmaW5lIFdNODk1NV9EQUNJTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQ0lOViAqLworI2RlZmluZSBXTTg5NTVfREFDSU5WX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQUNJTlYgKi8KKyNkZWZpbmUgV004OTU1X0RBQ0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDSU5WICovCisjZGVmaW5lIFdNODk1NV9EQUNJTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0lOViAqLworI2RlZmluZSBXTTg5NTVfVE9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBUT0VOICovCisjZGVmaW5lIFdNODk1NV9UT0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFRPRU4gKi8KKyNkZWZpbmUgV004OTU1X1RPRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogVE9FTiAqLworI2RlZmluZSBXTTg5NTVfVE9FTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBUT0VOICovCisKKy8qCisgKiBSMjQgKDB4MTgpIC0gQWRkaXRpb25hbCBjb250cm9sICgyKQorICovCisjZGVmaW5lIFdNODk1NV9PVVQzU1dfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxODAgIC8qIE9VVDNTVyAtIFs4OjddICovCisjZGVmaW5lIFdNODk1NV9PVVQzU1dfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIE9VVDNTVyAtIFs4OjddICovCisjZGVmaW5lIFdNODk1NV9PVVQzU1dfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIE9VVDNTVyAtIFs4OjddICovCisjZGVmaW5lIFdNODk1NV9ST1VUMklOViAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFJPVVQySU5WICovCisjZGVmaW5lIFdNODk1NV9ST1VUMklOVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFJPVVQySU5WICovCisjZGVmaW5lIFdNODk1NV9ST1VUMklOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFJPVVQySU5WICovCisjZGVmaW5lIFdNODk1NV9ST1VUMklOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPVVQySU5WICovCisjZGVmaW5lIFdNODk1NV9EQUNPU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ09TUiAqLworI2RlZmluZSBXTTg5NTVfREFDT1NSX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNPU1IgKi8KKyNkZWZpbmUgV004OTU1X0RBQ09TUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDT1NSICovCisjZGVmaW5lIFdNODk1NV9EQUNPU1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ09TUiAqLworCisvKgorICogUjI1ICgweDE5KSAtIFBvd2VyIE1hbmFnZW1lbnQgKDEpCisgKi8KKyNkZWZpbmUgV004OTU1X1ZNSURTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDE4MCAgLyogVk1JRFNFTCAtIFs4OjddICovCisjZGVmaW5lIFdNODk1NV9WTUlEU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFZNSURTRUwgLSBbODo3XSAqLworI2RlZmluZSBXTTg5NTVfVk1JRFNFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBWTUlEU0VMIC0gWzg6N10gKi8KKyNkZWZpbmUgV004OTU1X1ZSRUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVlJFRiAqLworI2RlZmluZSBXTTg5NTVfVlJFRl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBWUkVGICovCisjZGVmaW5lIFdNODk1NV9WUkVGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFZSRUYgKi8KKyNkZWZpbmUgV004OTU1X1ZSRUZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVlJFRiAqLworI2RlZmluZSBXTTg5NTVfRElHRU5CICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBESUdFTkIgKi8KKyNkZWZpbmUgV004OTU1X0RJR0VOQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRElHRU5CICovCisjZGVmaW5lIFdNODk1NV9ESUdFTkJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERJR0VOQiAqLworI2RlZmluZSBXTTg5NTVfRElHRU5CX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBESUdFTkIgKi8KKworLyoKKyAqIFIyNiAoMHgxQSkgLSBQb3dlciBNYW5hZ2VtZW50ICgyKQorICovCisjZGVmaW5lIFdNODk1NV9EQUNMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQ0wgKi8KKyNkZWZpbmUgV004OTU1X0RBQ0xfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDTCAqLworI2RlZmluZSBXTTg5NTVfREFDTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUNMICovCisjZGVmaW5lIFdNODk1NV9EQUNMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0wgKi8KKyNkZWZpbmUgV004OTU1X0RBQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogREFDUiAqLworI2RlZmluZSBXTTg5NTVfREFDUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBEQUNSICovCisjZGVmaW5lIFdNODk1NV9EQUNSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIERBQ1IgKi8KKyNkZWZpbmUgV004OTU1X0RBQ1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDUiAqLworI2RlZmluZSBXTTg5NTVfTE9VVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMT1VUMSAqLworI2RlZmluZSBXTTg5NTVfTE9VVDFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMT1VUMSAqLworI2RlZmluZSBXTTg5NTVfTE9VVDFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBMT1VUMSAqLworI2RlZmluZSBXTTg5NTVfTE9VVDFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMT1VUMSAqLworI2RlZmluZSBXTTg5NTVfUk9VVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBST1VUMSAqLworI2RlZmluZSBXTTg5NTVfUk9VVDFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBST1VUMSAqLworI2RlZmluZSBXTTg5NTVfUk9VVDFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBST1VUMSAqLworI2RlZmluZSBXTTg5NTVfUk9VVDFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBST1VUMSAqLworI2RlZmluZSBXTTg5NTVfTE9VVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMT1VUMiAqLworI2RlZmluZSBXTTg5NTVfTE9VVDJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMT1VUMiAqLworI2RlZmluZSBXTTg5NTVfTE9VVDJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBMT1VUMiAqLworI2RlZmluZSBXTTg5NTVfTE9VVDJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMT1VUMiAqLworI2RlZmluZSBXTTg5NTVfUk9VVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBST1VUMiAqLworI2RlZmluZSBXTTg5NTVfUk9VVDJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBST1VUMiAqLworI2RlZmluZSBXTTg5NTVfUk9VVDJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBST1VUMiAqLworI2RlZmluZSBXTTg5NTVfUk9VVDJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBST1VUMiAqLworI2RlZmluZSBXTTg5NTVfTU9OTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBNT05PICovCisjZGVmaW5lIFdNODk1NV9NT05PX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIE1PTk8gKi8KKyNkZWZpbmUgV004OTU1X01PTk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTU9OTyAqLworI2RlZmluZSBXTTg5NTVfTU9OT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNT05PICovCisjZGVmaW5lIFdNODk1NV9PVVQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE9VVDMgKi8KKyNkZWZpbmUgV004OTU1X09VVDNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogT1VUMyAqLworI2RlZmluZSBXTTg5NTVfT1VUM19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBPVVQzICovCisjZGVmaW5lIFdNODk1NV9PVVQzX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE9VVDMgKi8KKworLyoKKyAqIFIyNyAoMHgxQikgLSBBZGRpdGlvbmFsIENvbnRyb2wgKDMpCisgKi8KKyNkZWZpbmUgV004OTU1X1ZST0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVlJPSSAqLworI2RlZmluZSBXTTg5NTVfVlJPSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBWUk9JICovCisjZGVmaW5lIFdNODk1NV9WUk9JX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFZST0kgKi8KKyNkZWZpbmUgV004OTU1X1ZST0lfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVlJPSSAqLworCisvKgorICogUjM0ICgweDIyKSAtIExlZnQgb3V0IE1peCAoMSkKKyAqLworI2RlZmluZSBXTTg5NTVfTEQyTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMRDJMTyAqLworI2RlZmluZSBXTTg5NTVfTEQyTE9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMRDJMTyAqLworI2RlZmluZSBXTTg5NTVfTEQyTE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBMRDJMTyAqLworI2RlZmluZSBXTTg5NTVfTEQyTE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRDJMTyAqLworI2RlZmluZSBXTTg5NTVfTEkyTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSTJMTyAqLworI2RlZmluZSBXTTg5NTVfTEkyTE9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSTJMTyAqLworI2RlZmluZSBXTTg5NTVfTEkyTE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMSTJMTyAqLworI2RlZmluZSBXTTg5NTVfTEkyTE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMSTJMTyAqLworI2RlZmluZSBXTTg5NTVfTEkyTE9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDcwICAvKiBMSTJMT1ZPTCAtIFs2OjRdICovCisjZGVmaW5lIFdNODk1NV9MSTJMT1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIExJMkxPVk9MIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTU1X0xJMkxPVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTEkyTE9WT0wgLSBbNjo0XSAqLworCisvKgorICogUjM1ICgweDIzKSAtIExlZnQgb3V0IE1peCAoMikKKyAqLworI2RlZmluZSBXTTg5NTVfUkQyTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSRDJMTyAqLworI2RlZmluZSBXTTg5NTVfUkQyTE9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSRDJMTyAqLworI2RlZmluZSBXTTg5NTVfUkQyTE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBSRDJMTyAqLworI2RlZmluZSBXTTg5NTVfUkQyTE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSRDJMTyAqLworI2RlZmluZSBXTTg5NTVfUkkyTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSSTJMTyAqLworI2RlZmluZSBXTTg5NTVfUkkyTE9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSSTJMTyAqLworI2RlZmluZSBXTTg5NTVfUkkyTE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBSSTJMTyAqLworI2RlZmluZSBXTTg5NTVfUkkyTE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSSTJMTyAqLworI2RlZmluZSBXTTg5NTVfUkkyTE9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDcwICAvKiBSSTJMT1ZPTCAtIFs2OjRdICovCisjZGVmaW5lIFdNODk1NV9SSTJMT1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFJJMkxPVk9MIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTU1X1JJMkxPVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogUkkyTE9WT0wgLSBbNjo0XSAqLworCisvKgorICogUjM2ICgweDI0KSAtIFJpZ2h0IG91dCBNaXggKDEpCisgKi8KKyNkZWZpbmUgV004OTU1X0xEMlJPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTEQyUk8gKi8KKyNkZWZpbmUgV004OTU1X0xEMlJPX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTEQyUk8gKi8KKyNkZWZpbmUgV004OTU1X0xEMlJPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTEQyUk8gKi8KKyNkZWZpbmUgV004OTU1X0xEMlJPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTEQyUk8gKi8KKyNkZWZpbmUgV004OTU1X0xJMlJPICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTEkyUk8gKi8KKyNkZWZpbmUgV004OTU1X0xJMlJPX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTEkyUk8gKi8KKyNkZWZpbmUgV004OTU1X0xJMlJPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTEkyUk8gKi8KKyNkZWZpbmUgV004OTU1X0xJMlJPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTEkyUk8gKi8KKyNkZWZpbmUgV004OTU1X0xJMlJPVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3MCAgLyogTEkyUk9WT0wgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NTVfTEkyUk9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBMSTJST1ZPTCAtIFs2OjRdICovCisjZGVmaW5lIFdNODk1NV9MSTJST1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExJMlJPVk9MIC0gWzY6NF0gKi8KKworLyoKKyAqIFIzNyAoMHgyNSkgLSBSaWdodCBPdXQgTWl4ICgyKQorICovCisjZGVmaW5lIFdNODk1NV9SRDJSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJEMlJPICovCisjZGVmaW5lIFdNODk1NV9SRDJST19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJEMlJPICovCisjZGVmaW5lIFdNODk1NV9SRDJST19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFJEMlJPICovCisjZGVmaW5lIFdNODk1NV9SRDJST19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJEMlJPICovCisjZGVmaW5lIFdNODk1NV9SSTJSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJJMlJPICovCisjZGVmaW5lIFdNODk1NV9SSTJST19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJJMlJPICovCisjZGVmaW5lIFdNODk1NV9SSTJST19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJJMlJPICovCisjZGVmaW5lIFdNODk1NV9SSTJST19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJJMlJPICovCisjZGVmaW5lIFdNODk1NV9SSTJST1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNzAgIC8qIFJJMlJPVk9MIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTU1X1JJMlJPVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogUkkyUk9WT0wgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NTVfUkkyUk9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBSSTJST1ZPTCAtIFs2OjRdICovCisKKy8qCisgKiBSMzggKDB4MjYpIC0gTW9ubyBvdXQgTWl4ICgxKQorICovCisjZGVmaW5lIFdNODk1NV9MRDJNTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExEMk1PICovCisjZGVmaW5lIFdNODk1NV9MRDJNT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIExEMk1PICovCisjZGVmaW5lIFdNODk1NV9MRDJNT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIExEMk1PICovCisjZGVmaW5lIFdNODk1NV9MRDJNT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExEMk1PICovCisjZGVmaW5lIFdNODk1NV9MSTJNTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJMk1PICovCisjZGVmaW5lIFdNODk1NV9MSTJNT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJMk1PICovCisjZGVmaW5lIFdNODk1NV9MSTJNT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExJMk1PICovCisjZGVmaW5lIFdNODk1NV9MSTJNT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJMk1PICovCisjZGVmaW5lIFdNODk1NV9MSTJNT1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNzAgIC8qIExJMk1PVk9MIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTU1X0xJMk1PVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTEkyTU9WT0wgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NTVfTEkyTU9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBMSTJNT1ZPTCAtIFs2OjRdICovCisjZGVmaW5lIFdNODk1NV9ETUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERNRU4gKi8KKyNkZWZpbmUgV004OTU1X0RNRU5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRE1FTiAqLworI2RlZmluZSBXTTg5NTVfRE1FTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBETUVOICovCisjZGVmaW5lIFdNODk1NV9ETUVOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERNRU4gKi8KKworLyoKKyAqIFIzOSAoMHgyNykgLSBNb25vIG91dCBNaXggKDIpCisgKi8KKyNkZWZpbmUgV004OTU1X1JEMk1PICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUkQyTU8gKi8KKyNkZWZpbmUgV004OTU1X1JEMk1PX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUkQyTU8gKi8KKyNkZWZpbmUgV004OTU1X1JEMk1PX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogUkQyTU8gKi8KKyNkZWZpbmUgV004OTU1X1JEMk1PX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUkQyTU8gKi8KKyNkZWZpbmUgV004OTU1X1JJMk1PICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUkkyTU8gKi8KKyNkZWZpbmUgV004OTU1X1JJMk1PX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUkkyTU8gKi8KKyNkZWZpbmUgV004OTU1X1JJMk1PX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogUkkyTU8gKi8KKyNkZWZpbmUgV004OTU1X1JJMk1PX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUkkyTU8gKi8KKyNkZWZpbmUgV004OTU1X1JJMk1PVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3MCAgLyogUkkyTU9WT0wgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5NTVfUkkyTU9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBSSTJNT1ZPTCAtIFs2OjRdICovCisjZGVmaW5lIFdNODk1NV9SSTJNT1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFJJMk1PVk9MIC0gWzY6NF0gKi8KKworLyoKKyAqIFI0MCAoMHgyOCkgLSBMT1VUMiB2b2x1bWUKKyAqLworI2RlZmluZSBXTTg5NTVfTE8yVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMTzJWVSAqLworI2RlZmluZSBXTTg5NTVfTE8yVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBMTzJWVSAqLworI2RlZmluZSBXTTg5NTVfTE8yVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBMTzJWVSAqLworI2RlZmluZSBXTTg5NTVfTE8yVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMTzJWVSAqLworI2RlZmluZSBXTTg5NTVfTE8yWkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMTzJaQyAqLworI2RlZmluZSBXTTg5NTVfTE8yWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMTzJaQyAqLworI2RlZmluZSBXTTg5NTVfTE8yWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMTzJaQyAqLworI2RlZmluZSBXTTg5NTVfTE8yWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMTzJaQyAqLworI2RlZmluZSBXTTg5NTVfTE9VVDJWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDdGICAvKiBMT1VUMlZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk1NV9MT1VUMlZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExPVVQyVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTU1X0xPVVQyVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTE9VVDJWT0wgLSBbNjowXSAqLworCisvKgorICogUjQxICgweDI5KSAtIFJPVVQyIHZvbHVtZQorICovCisjZGVmaW5lIFdNODk1NV9STzJWVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJPMlZVICovCisjZGVmaW5lIFdNODk1NV9STzJWVV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFJPMlZVICovCisjZGVmaW5lIFdNODk1NV9STzJWVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFJPMlZVICovCisjZGVmaW5lIFdNODk1NV9STzJWVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPMlZVICovCisjZGVmaW5lIFdNODk1NV9STzJaQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJPMlpDICovCisjZGVmaW5lIFdNODk1NV9STzJaQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJPMlpDICovCisjZGVmaW5lIFdNODk1NV9STzJaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJPMlpDICovCisjZGVmaW5lIFdNODk1NV9STzJaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPMlpDICovCisjZGVmaW5lIFdNODk1NV9ST1VUMlZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwN0YgIC8qIFJPVVQyVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTU1X1JPVVQyVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUk9VVDJWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg5NTVfUk9VVDJWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBST1VUMlZPTCAtIFs2OjBdICovCisKKy8qCisgKiBSNDIgKDB4MkEpIC0gTU9OT09VVCB2b2x1bWUKKyAqLworI2RlZmluZSBXTTg5NTVfTU9aQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBNT1pDICovCisjZGVmaW5lIFdNODk1NV9NT1pDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1PWkMgKi8KKyNkZWZpbmUgV004OTU1X01PWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTU9aQyAqLworI2RlZmluZSBXTTg5NTVfTU9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNT1pDICovCisjZGVmaW5lIFdNODk1NV9NT1VUVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwN0YgIC8qIE1PVVRWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg5NTVfTU9VVFZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBNT1VUVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTU1X01PVVRWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTU9VVFZPTCAtIFs2OjBdICovCisKKy8qCisgKiBSNDMgKDB4MkIpIC0gQ2xvY2tpbmcgLyBQTEwKKyAqLworI2RlZmluZSBXTTg5NTVfTUNMS1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBNQ0xLU0VMICovCisjZGVmaW5lIFdNODk1NV9NQ0xLU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE1DTEtTRUwgKi8KKyNkZWZpbmUgV004OTU1X01DTEtTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTUNMS1NFTCAqLworI2RlZmluZSBXTTg5NTVfTUNMS1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0xLU0VMICovCisjZGVmaW5lIFdNODk1NV9QTExPVVRESVYyICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFBMTE9VVERJVjIgKi8KKyNkZWZpbmUgV004OTU1X1BMTE9VVERJVjJfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogUExMT1VURElWMiAqLworI2RlZmluZSBXTTg5NTVfUExMT1VURElWMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBQTExPVVRESVYyICovCisjZGVmaW5lIFdNODk1NV9QTExPVVRESVYyX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFBMTE9VVERJVjIgKi8KKyNkZWZpbmUgV004OTU1X1BMTF9SQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUExMX1JCICovCisjZGVmaW5lIFdNODk1NV9QTExfUkJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFBMTF9SQiAqLworI2RlZmluZSBXTTg5NTVfUExMX1JCX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBQTExfUkIgKi8KKyNkZWZpbmUgV004OTU1X1BMTF9SQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUExMX1JCICovCisjZGVmaW5lIFdNODk1NV9QTExFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFBMTEVOICovCisjZGVmaW5lIFdNODk1NV9QTExFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFBMTEVOICovCisjZGVmaW5lIFdNODk1NV9QTExFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFBMTEVOICovCisjZGVmaW5lIFdNODk1NV9QTExFTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFBMTEVOICovCisKKy8qCisgKiBSNDQgKDB4MkMpIC0gUExMIENvbnRyb2wgMQorICovCisjZGVmaW5lIFdNODk1NV9OX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxRTAgIC8qIE4gLSBbODo1XSAqLworI2RlZmluZSBXTTg5NTVfTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBOIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTU1X05fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTiAtIFs4OjVdICovCisjZGVmaW5lIFdNODk1NV9LXzIxXzE4X01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEsoMjE6MTgpIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTU1X0tfMjFfMThfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSygyMToxOCkgLSBbMzowXSAqLworI2RlZmluZSBXTTg5NTVfS18yMV8xOF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBLKDIxOjE4KSAtIFszOjBdICovCisKKy8qCisgKiBSNDUgKDB4MkQpIC0gUExMIENvbnRyb2wgMgorICovCisjZGVmaW5lIFdNODk1NV9LXzE3XzlfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxRkYgIC8qIEsoMTc6OSkgLSBbODowXSAqLworI2RlZmluZSBXTTg5NTVfS18xN185X1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBLKDE3OjkpIC0gWzg6MF0gKi8KKyNkZWZpbmUgV004OTU1X0tfMTdfOV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogSygxNzo5KSAtIFs4OjBdICovCisKKy8qCisgKiBSNDYgKDB4MkUpIC0gUExMIENvbnRyb2wgMworICovCisjZGVmaW5lIFdNODk1NV9LXzhfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAxRkYgIC8qIEsoODowKSAtIFs4OjBdICovCisjZGVmaW5lIFdNODk1NV9LXzhfMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEsoODowKSAtIFs4OjBdICovCisjZGVmaW5lIFdNODk1NV9LXzhfMF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIEsoODowKSAtIFs4OjBdICovCisKKy8qCisgKiBSNTkgKDB4M0IpIC0gUExMIENvbnRyb2wgNAorICovCisjZGVmaW5lIFdNODk1NV9LRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEtFTiAqLworI2RlZmluZSBXTTg5NTVfS0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBLRU4gKi8KKyNkZWZpbmUgV004OTU1X0tFTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogS0VOICovCisjZGVmaW5lIFdNODk1NV9LRU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEtFTiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2MS5jCmluZGV4IGE4MDA3ZDUuLmQyMzQyYzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NjEuYwpAQCAtMTAyMiw2ICsxMDIyLDkgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+cmVnX2NhY2hlX3NpemU7IGkrKykgeworCQlpZiAocmVnX2NhY2hlW2ldID09IHdtODk2MV9yZWdfZGVmYXVsdHNbaV0pCisJCQljb250aW51ZTsKKwogCQlpZiAoaSA9PSBXTTg5NjFfU09GVFdBUkVfUkVTRVQpCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NzQuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmMKaW5kZXggODgxMjc1MS4uZWU2MzdhZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NzQuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5jCkBAIC0xNzAsNiArMTcwLDEwIEBACiAKIFNPQ19TSU5HTEUoIkNhcHR1cmUgQm9vc3QoKzIwZEIpIiwgV004OTc0X0FEQ0JPT1NULCAgOCwgMSwgMCksCiBTT0NfU0lOR0xFKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIFdNODk3NF9NT05PTUlYLCA2LCAxLCAxKSwKKworLyogREFDIC8gQURDIG92ZXJzYW1wbGluZyAqLworU09DX1NJTkdMRSgiREFDIDEyOHggT3ZlcnNhbXBsaW5nIFN3aXRjaCIsIFdNODk3NF9EQUMsIDgsIDEsIDApLAorU09DX1NJTkdMRSgiQURDIDEyOHggT3ZlcnNhbXBsaW5nIFN3aXRjaCIsIFdNODk3NF9BREMsIDgsIDEsIDApLAogfTsKIAogLyogU3BlYWtlciBPdXRwdXQgTWl4ZXIgKi8KQEAgLTM4MSwxNCArMzg1LDYgQEAKIAkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzRfQ0xPQ0spICYgMHgxMWY7CiAJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3NF9DTE9DSywgcmVnIHwgZGl2KTsKIAkJYnJlYWs7Ci0JY2FzZSBXTTg5NzRfQURDQ0xLOgotCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3NF9BREMpICYgMHgxZjc7Ci0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3NF9BREMsIHJlZyB8IGRpdik7Ci0JCWJyZWFrOwotCWNhc2UgV004OTc0X0RBQ0NMSzoKLQkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NzRfREFDKSAmIDB4MWY3OwotCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzRfREFDLCByZWcgfCBkaXYpOwotCQlicmVhazsKIAljYXNlIFdNODk3NF9CQ0xLRElWOgogCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3NF9DTE9DSykgJiAweDFlMzsKIAkJc25kX3NvY193cml0ZShjb2RlYywgV004OTc0X0NMT0NLLCByZWcgfCBkaXYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NzQuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmgKaW5kZXggOThkZTk1Ni4uODk2YTdmMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NzQuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5oCkBAIC01NywxNyArNTcsNyBAQAogLyogQ2xvY2sgZGl2aWRlciBJZCdzICovCiAjZGVmaW5lIFdNODk3NF9PUENMS0RJVgkJMAogI2RlZmluZSBXTTg5NzRfTUNMS0RJVgkJMQotI2RlZmluZSBXTTg5NzRfQURDQ0xLCQkyCi0jZGVmaW5lIFdNODk3NF9EQUNDTEsJCTMKLSNkZWZpbmUgV004OTc0X0JDTEtESVYJCTQKLQotLyogREFDIGNsb2NrIGRpdmlkZXJzICovCi0jZGVmaW5lIFdNODk3NF9EQUNDTEtfRjIJKDEgPDwgMykKLSNkZWZpbmUgV004OTc0X0RBQ0NMS19GNAkoMCA8PCAzKQotCi0vKiBBREMgY2xvY2sgZGl2aWRlcnMgKi8KLSNkZWZpbmUgV004OTc0X0FEQ0NMS19GMgkoMSA8PCAzKQotI2RlZmluZSBXTTg5NzRfQURDQ0xLX0Y0CSgwIDw8IDMpCisjZGVmaW5lIFdNODk3NF9CQ0xLRElWCQkyCiAKIC8qIFBMTCBPdXQgZGl2aWRlcnMgKi8KICNkZWZpbmUgV004OTc0X09QQ0xLRElWXzEJKDAgPDwgNCkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YmI1OWUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3OC5jCkBAIC0wLDAgKzEsMTE0OSBAQAorLyoKKyAqIHdtODk3OC5jICAtLSAgV004OTc4IEFMU0EgU29DIEF1ZGlvIENvZGVjIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA3IENhcmxvcyBNdW5veiA8Y2FybG9zQGtlbmF0aS5jb20+CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKiBCYXNlZCBvbiB3bTg5NzQgYW5kIHdtODk5MCBieSBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisjaW5jbHVkZSAid204OTc4LmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204OTc4X2NvZGVjOworCisvKiB3bTg5NzggcmVnaXN0ZXIgY2FjaGUuIE5vdGUgdGhhdCByZWdpc3RlciAwIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgY2FjaGUuICovCitzdGF0aWMgY29uc3QgdTE2IHdtODk3OF9yZWdbV004OTc4X0NBQ0hFUkVHTlVNXSA9IHsKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qIDB4MDAuLi4weDAzICovCisJMHgwMDUwLCAweDAwMDAsIDB4MDE0MCwgMHgwMDAwLAkvKiAweDA0Li4uMHgwNyAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDBmZiwJLyogMHgwOC4uLjB4MGIgKi8KKwkweDAwZmYsIDB4MDAwMCwgMHgwMTAwLCAweDAwZmYsCS8qIDB4MGMuLi4weDBmICovCisJMHgwMGZmLCAweDAwMDAsIDB4MDEyYywgMHgwMDJjLAkvKiAweDEwLi4uMHgxMyAqLworCTB4MDAyYywgMHgwMDJjLCAweDAwMmMsIDB4MDAwMCwJLyogMHgxNC4uLjB4MTcgKi8KKwkweDAwMzIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qIDB4MTguLi4weDFiICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKiAweDFjLi4uMHgxZiAqLworCTB4MDAzOCwgMHgwMDBiLCAweDAwMzIsIDB4MDAwMCwJLyogMHgyMC4uLjB4MjMgKi8KKwkweDAwMDgsIDB4MDAwYywgMHgwMDkzLCAweDAwZTksCS8qIDB4MjQuLi4weDI3ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAkvKiAweDI4Li4uMHgyYiAqLworCTB4MDAzMywgMHgwMDEwLCAweDAwMTAsIDB4MDEwMCwJLyogMHgyYy4uLjB4MmYgKi8KKwkweDAxMDAsIDB4MDAwMiwgMHgwMDAxLCAweDAwMDEsCS8qIDB4MzAuLi4weDMzICovCisJMHgwMDM5LCAweDAwMzksIDB4MDAzOSwgMHgwMDM5LAkvKiAweDM0Li4uMHgzNyAqLworCTB4MDAwMSwJMHgwMDAxLAkJCS8qIDB4MzguLi4weDNiICovCit9OworCisvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCB3bTg5NzhfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdW5zaWduZWQgaW50IGZfcGxsb3V0OworCXVuc2lnbmVkIGludCBmX21jbGs7CisJdW5zaWduZWQgaW50IGZfMjU2ZnM7CisJdW5zaWduZWQgaW50IGZfb3BjbGs7CisJaW50IG1jbGtfaWR4OworCWVudW0gd204OTc4X3N5c2Nsa19zcmMgc3lzY2xrOworCXUxNiByZWdfY2FjaGVbV004OTc4X0NBQ0hFUkVHTlVNXTsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfY29tcGFuZGluZ1tdID0geyJPZmYiLCAiTkMiLCAidS1sYXciLCAiQS1sYXcifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfZXFtb2RlW10gPSB7IkNhcHR1cmUiLCAiUGxheWJhY2sifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfYndbXSA9IHsiTmFycm93IiwgIldpZGUifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfZXExW10gPSB7IjgwSHoiLCAiMTA1SHoiLCAiMTM1SHoiLCAiMTc1SHoifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfZXEyW10gPSB7IjIzMEh6IiwgIjMwMEh6IiwgIjM4NUh6IiwgIjUwMEh6In07CitzdGF0aWMgY29uc3QgY2hhciAqd204OTc4X2VxM1tdID0geyI2NTBIeiIsICI4NTBIeiIsICIxLjFrSHoiLCAiMS40a0h6In07CitzdGF0aWMgY29uc3QgY2hhciAqd204OTc4X2VxNFtdID0geyIxLjhrSHoiLCAiMi40a0h6IiwgIjMuMmtIeiIsICI0LjFrSHoifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfZXE1W10gPSB7IjUuM2tIeiIsICI2LjlrSHoiLCAiOWtIeiIsICIxMS43a0h6In07CitzdGF0aWMgY29uc3QgY2hhciAqd204OTc4X2FsYzNbXSA9IHsiQUxDIiwgIkxpbWl0ZXIifTsKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5NzhfYWxjMVtdID0geyJPZmYiLCAiUmlnaHQiLCAiTGVmdCIsICJCb3RoIn07CisKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChhZGNfY29tcGFuZCwgV004OTc4X0NPTVBBTkRJTkdfQ09OVFJPTCwgMSwKKwkJCQkgIHdtODk3OF9jb21wYW5kaW5nKTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChkYWNfY29tcGFuZCwgV004OTc4X0NPTVBBTkRJTkdfQ09OVFJPTCwgMywKKwkJCQkgIHdtODk3OF9jb21wYW5kaW5nKTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChlcW1vZGUsIFdNODk3OF9FUTEsIDgsIHdtODk3OF9lcW1vZGUpOworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKGVxMSwgV004OTc4X0VRMSwgNSwgd204OTc4X2VxMSk7CitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woZXEyYncsIFdNODk3OF9FUTIsIDgsIHdtODk3OF9idyk7CitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woZXEyLCBXTTg5NzhfRVEyLCA1LCB3bTg5NzhfZXEyKTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChlcTNidywgV004OTc4X0VRMywgOCwgd204OTc4X2J3KTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChlcTMsIFdNODk3OF9FUTMsIDUsIHdtODk3OF9lcTMpOworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKGVxNGJ3LCBXTTg5NzhfRVE0LCA4LCB3bTg5NzhfYncpOworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKGVxNCwgV004OTc4X0VRNCwgNSwgd204OTc4X2VxNCk7CitzdGF0aWMgY29uc3QgU09DX0VOVU1fU0lOR0xFX0RFQ0woZXE1LCBXTTg5NzhfRVE1LCA1LCB3bTg5NzhfZXE1KTsKK3N0YXRpYyBjb25zdCBTT0NfRU5VTV9TSU5HTEVfREVDTChhbGMzLCBXTTg5NzhfQUxDX0NPTlRST0xfMywgOCwgd204OTc4X2FsYzMpOworc3RhdGljIGNvbnN0IFNPQ19FTlVNX1NJTkdMRV9ERUNMKGFsYzEsIFdNODk3OF9BTENfQ09OVFJPTF8xLCA3LCB3bTg5NzhfYWxjMSk7CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkaWdpdGFsX3RsdiwgLTEyNzUwLCA1MCwgMSk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoZXFfdGx2LCAtMTIwMCwgMTAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShpbnBnYV90bHYsIC0xMjAwLCA3NSwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoc3BrX3RsdiwgLTU3MDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoYm9vc3RfdGx2LCAtMTUwMCwgMzAwLCAxKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk3OF9zbmRfY29udHJvbHNbXSA9IHsKKworCVNPQ19TSU5HTEUoIkRpZ2l0YWwgTG9vcGJhY2sgU3dpdGNoIiwKKwkJV004OTc4X0NPTVBBTkRJTkdfQ09OVFJPTCwgMCwgMSwgMCksCisKKwlTT0NfRU5VTSgiQURDIENvbXBhbmRpbmciLCBhZGNfY29tcGFuZCksCisJU09DX0VOVU0oIkRBQyBDb21wYW5kaW5nIiwgZGFjX2NvbXBhbmQpLAorCisJU09DX0RPVUJMRSgiREFDIEludmVyc2lvbiBTd2l0Y2giLCBXTTg5NzhfREFDX0NPTlRST0wsIDAsIDEsIDEsIDApLAorCisJU09DX0RPVUJMRV9SX1RMVigiUENNIFZvbHVtZSIsCisJCVdNODk3OF9MRUZUX0RBQ19ESUdJVEFMX1ZPTFVNRSwgV004OTc4X1JJR0hUX0RBQ19ESUdJVEFMX1ZPTFVNRSwKKwkJMCwgMjU1LCAwLCBkaWdpdGFsX3RsdiksCisKKwlTT0NfU0lOR0xFKCJIaWdoIFBhc3MgRmlsdGVyIFN3aXRjaCIsIFdNODk3OF9BRENfQ09OVFJPTCwgOCwgMSwgMCksCisJU09DX1NJTkdMRSgiSGlnaCBQYXNzIEN1dCBPZmYiLCBXTTg5NzhfQURDX0NPTlRST0wsIDQsIDcsIDApLAorCVNPQ19ET1VCTEUoIkFEQyBJbnZlcnNpb24gU3dpdGNoIiwgV004OTc4X0FEQ19DT05UUk9MLCAwLCAxLCAxLCAwKSwKKworCVNPQ19ET1VCTEVfUl9UTFYoIkFEQyBWb2x1bWUiLAorCQlXTTg5NzhfTEVGVF9BRENfRElHSVRBTF9WT0xVTUUsIFdNODk3OF9SSUdIVF9BRENfRElHSVRBTF9WT0xVTUUsCisJCTAsIDI1NSwgMCwgZGlnaXRhbF90bHYpLAorCisJU09DX0VOVU0oIkVxdWFsaXNlciBGdW5jdGlvbiIsIGVxbW9kZSksCisJU09DX0VOVU0oIkVRMSBDdXQgT2ZmIiwgZXExKSwKKwlTT0NfU0lOR0xFX1RMVigiRVExIFZvbHVtZSIsIFdNODk3OF9FUTEsICAwLCAyNCwgMSwgZXFfdGx2KSwKKworCVNPQ19FTlVNKCJFcXVhbGlzZXIgRVEyIEJhbmR3aXRoIiwgZXEyYncpLAorCVNPQ19FTlVNKCJFUTIgQ3V0IE9mZiIsIGVxMiksCisJU09DX1NJTkdMRV9UTFYoIkVRMiBWb2x1bWUiLCBXTTg5NzhfRVEyLCAgMCwgMjQsIDEsIGVxX3RsdiksCisKKwlTT0NfRU5VTSgiRXF1YWxpc2VyIEVRMyBCYW5kd2l0aCIsIGVxM2J3KSwKKwlTT0NfRU5VTSgiRVEzIEN1dCBPZmYiLCBlcTMpLAorCVNPQ19TSU5HTEVfVExWKCJFUTMgVm9sdW1lIiwgV004OTc4X0VRMywgIDAsIDI0LCAxLCBlcV90bHYpLAorCisJU09DX0VOVU0oIkVxdWFsaXNlciBFUTQgQmFuZHdpdGgiLCBlcTRidyksCisJU09DX0VOVU0oIkVRNCBDdXQgT2ZmIiwgZXE0KSwKKwlTT0NfU0lOR0xFX1RMVigiRVE0IFZvbHVtZSIsIFdNODk3OF9FUTQsICAwLCAyNCwgMSwgZXFfdGx2KSwKKworCVNPQ19FTlVNKCJFUTUgQ3V0IE9mZiIsIGVxNSksCisJU09DX1NJTkdMRV9UTFYoIkVRNSBWb2x1bWUiLCBXTTg5NzhfRVE1LCAwLCAyNCwgMSwgZXFfdGx2KSwKKworCVNPQ19TSU5HTEUoIkRBQyBQbGF5YmFjayBMaW1pdGVyIFN3aXRjaCIsCisJCVdNODk3OF9EQUNfTElNSVRFUl8xLCA4LCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJEQUMgUGxheWJhY2sgTGltaXRlciBEZWNheSIsCisJCVdNODk3OF9EQUNfTElNSVRFUl8xLCA0LCAxNSwgMCksCisJU09DX1NJTkdMRSgiREFDIFBsYXliYWNrIExpbWl0ZXIgQXR0YWNrIiwKKwkJV004OTc4X0RBQ19MSU1JVEVSXzEsIDAsIDE1LCAwKSwKKworCVNPQ19TSU5HTEUoIkRBQyBQbGF5YmFjayBMaW1pdGVyIFRocmVzaG9sZCIsCisJCVdNODk3OF9EQUNfTElNSVRFUl8yLCA0LCA3LCAwKSwKKwlTT0NfU0lOR0xFKCJEQUMgUGxheWJhY2sgTGltaXRlciBCb29zdCIsCisJCVdNODk3OF9EQUNfTElNSVRFUl8yLCAwLCAxNSwgMCksCisKKwlTT0NfRU5VTSgiQUxDIEVuYWJsZSBTd2l0Y2giLCBhbGMxKSwKKwlTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBNaW4gR2FpbiIsIFdNODk3OF9BTENfQ09OVFJPTF8xLCAwLCA3LCAwKSwKKwlTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBNYXggR2FpbiIsIFdNODk3OF9BTENfQ09OVFJPTF8xLCAzLCA3LCAwKSwKKworCVNPQ19TSU5HTEUoIkFMQyBDYXB0dXJlIEhvbGQiLCBXTTg5NzhfQUxDX0NPTlRST0xfMiwgNCwgNywgMCksCisJU09DX1NJTkdMRSgiQUxDIENhcHR1cmUgVGFyZ2V0IiwgV004OTc4X0FMQ19DT05UUk9MXzIsIDAsIDE1LCAwKSwKKworCVNPQ19FTlVNKCJBTEMgQ2FwdHVyZSBNb2RlIiwgYWxjMyksCisJU09DX1NJTkdMRSgiQUxDIENhcHR1cmUgRGVjYXkiLCBXTTg5NzhfQUxDX0NPTlRST0xfMywgNCwgMTUsIDApLAorCVNPQ19TSU5HTEUoIkFMQyBDYXB0dXJlIEF0dGFjayIsIFdNODk3OF9BTENfQ09OVFJPTF8zLCAwLCAxNSwgMCksCisKKwlTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBOb2lzZSBHYXRlIFN3aXRjaCIsIFdNODk3OF9OT0lTRV9HQVRFLCAzLCAxLCAwKSwKKwlTT0NfU0lOR0xFKCJBTEMgQ2FwdHVyZSBOb2lzZSBHYXRlIFRocmVzaG9sZCIsCisJCVdNODk3OF9OT0lTRV9HQVRFLCAwLCA3LCAwKSwKKworCVNPQ19ET1VCTEVfUigiQ2FwdHVyZSBQR0EgWkMgU3dpdGNoIiwKKwkJV004OTc4X0xFRlRfSU5QX1BHQV9DT05UUk9MLCBXTTg5NzhfUklHSFRfSU5QX1BHQV9DT05UUk9MLAorCQk3LCAxLCAwKSwKKworCS8qIE9VVDEgLSBIZWFkcGhvbmVzICovCisJU09DX0RPVUJMRV9SKCJIZWFkcGhvbmUgUGxheWJhY2sgWkMgU3dpdGNoIiwKKwkJV004OTc4X0xPVVQxX0hQX0NPTlRST0wsIFdNODk3OF9ST1VUMV9IUF9DT05UUk9MLCA3LCAxLCAwKSwKKworCVNPQ19ET1VCTEVfUl9UTFYoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLAorCQlXTTg5NzhfTE9VVDFfSFBfQ09OVFJPTCwgV004OTc4X1JPVVQxX0hQX0NPTlRST0wsCisJCTAsIDYzLCAwLCBzcGtfdGx2KSwKKworCS8qIE9VVDIgLSBTcGVha2VycyAqLworCVNPQ19ET1VCTEVfUigiU3BlYWtlciBQbGF5YmFjayBaQyBTd2l0Y2giLAorCQlXTTg5NzhfTE9VVDJfU1BLX0NPTlRST0wsIFdNODk3OF9ST1VUMl9TUEtfQ09OVFJPTCwgNywgMSwgMCksCisKKwlTT0NfRE9VQkxFX1JfVExWKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsCisJCVdNODk3OF9MT1VUMl9TUEtfQ09OVFJPTCwgV004OTc4X1JPVVQyX1NQS19DT05UUk9MLAorCQkwLCA2MywgMCwgc3BrX3RsdiksCisKKwkvKiBPVVQzLzQgLSBMaW5lIE91dHB1dCAqLworCVNPQ19ET1VCTEVfUigiTGluZSBQbGF5YmFjayBTd2l0Y2giLAorCQlXTTg5NzhfT1VUM19NSVhFUl9DT05UUk9MLCBXTTg5NzhfT1VUNF9NSVhFUl9DT05UUk9MLCA2LCAxLCAxKSwKKworCS8qIE1peGVyICMzOiBCb29zdCAoSW5wdXQpIG1peGVyICovCisJU09DX0RPVUJMRV9SKCJQR0EgQm9vc3QgKCsyMGRCKSIsCisJCVdNODk3OF9MRUZUX0FEQ19CT09TVF9DT05UUk9MLCBXTTg5NzhfUklHSFRfQURDX0JPT1NUX0NPTlRST0wsCisJCTgsIDEsIDApLAorCVNPQ19ET1VCTEVfUl9UTFYoIkwyL1IyIEJvb3N0IFZvbHVtZSIsCisJCVdNODk3OF9MRUZUX0FEQ19CT09TVF9DT05UUk9MLCBXTTg5NzhfUklHSFRfQURDX0JPT1NUX0NPTlRST0wsCisJCTQsIDcsIDAsIGJvb3N0X3RsdiksCisJU09DX0RPVUJMRV9SX1RMVigiQXV4IEJvb3N0IFZvbHVtZSIsCisJCVdNODk3OF9MRUZUX0FEQ19CT09TVF9DT05UUk9MLCBXTTg5NzhfUklHSFRfQURDX0JPT1NUX0NPTlRST0wsCisJCTAsIDcsIDAsIGJvb3N0X3RsdiksCisKKwkvKiBJbnB1dCBQR0Egdm9sdW1lICovCisJU09DX0RPVUJMRV9SX1RMVigiSW5wdXQgUEdBIFZvbHVtZSIsCisJCVdNODk3OF9MRUZUX0lOUF9QR0FfQ09OVFJPTCwgV004OTc4X1JJR0hUX0lOUF9QR0FfQ09OVFJPTCwKKwkJMCwgNjMsIDAsIGlucGdhX3RsdiksCisKKwkvKiBIZWFkcGhvbmUgKi8KKwlTT0NfRE9VQkxFX1IoIkhlYWRwaG9uZSBTd2l0Y2giLAorCQlXTTg5NzhfTE9VVDFfSFBfQ09OVFJPTCwgV004OTc4X1JPVVQxX0hQX0NPTlRST0wsIDYsIDEsIDEpLAorCisJLyogU3BlYWtlciAqLworCVNPQ19ET1VCTEVfUigiU3BlYWtlciBTd2l0Y2giLAorCQlXTTg5NzhfTE9VVDJfU1BLX0NPTlRST0wsIFdNODk3OF9ST1VUMl9TUEtfQ09OVFJPTCwgNiwgMSwgMSksCisKKwkvKiBEQUMgLyBBREMgb3ZlcnNhbXBsaW5nICovCisJU09DX1NJTkdMRSgiREFDIDEyOHggT3ZlcnNhbXBsaW5nIFN3aXRjaCIsIFdNODk3OF9EQUNfQ09OVFJPTCwgOCwgMSwgMCksCisJU09DX1NJTkdMRSgiQURDIDEyOHggT3ZlcnNhbXBsaW5nIFN3aXRjaCIsIFdNODk3OF9BRENfQ09OVFJPTCwgOCwgMSwgMCksCit9OworCisvKiBNaXhlciAjMTogT3V0cHV0IChPVVQxLCBPVVQyKSBNaXhlcjogbWl4IEFVWCwgSW5wdXQgbWl4ZXIgb3V0cHV0IGFuZCBEQUMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5NzhfbGVmdF9vdXRfbWl4ZXJbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkxpbmUgQnlwYXNzIFN3aXRjaCIsIFdNODk3OF9MRUZUX01JWEVSX0NPTlRST0wsIDEsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiQXV4IFBsYXliYWNrIFN3aXRjaCIsIFdNODk3OF9MRUZUX01JWEVSX0NPTlRST0wsIDUsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiUENNIFBsYXliYWNrIFN3aXRjaCIsIFdNODk3OF9MRUZUX01JWEVSX0NPTlRST0wsIDAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk3OF9yaWdodF9vdXRfbWl4ZXJbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkxpbmUgQnlwYXNzIFN3aXRjaCIsIFdNODk3OF9SSUdIVF9NSVhFUl9DT05UUk9MLCAxLCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkF1eCBQbGF5YmFjayBTd2l0Y2giLCBXTTg5NzhfUklHSFRfTUlYRVJfQ09OVFJPTCwgNSwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgV004OTc4X1JJR0hUX01JWEVSX0NPTlRST0wsIDAsIDEsIDApLAorfTsKKworLyogT1VUMy9PVVQ0IE1peGVyIG5vdCBpbXBsZW1lbnRlZCAqLworCisvKiBNaXhlciAjMjogSW5wdXQgUEdBIE11dGUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5NzhfbGVmdF9pbnB1dF9taXhlcltdID0geworCVNPQ19EQVBNX1NJTkdMRSgiTDIgU3dpdGNoIiwgV004OTc4X0lOUFVUX0NPTlRST0wsIDIsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTWljTiBTd2l0Y2giLCBXTTg5NzhfSU5QVVRfQ09OVFJPTCwgMSwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNaWNQIFN3aXRjaCIsIFdNODk3OF9JTlBVVF9DT05UUk9MLCAwLCAxLCAwKSwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTc4X3JpZ2h0X2lucHV0X21peGVyW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJSMiBTd2l0Y2giLCBXTTg5NzhfSU5QVVRfQ09OVFJPTCwgNiwgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJNaWNOIFN3aXRjaCIsIFdNODk3OF9JTlBVVF9DT05UUk9MLCA1LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIk1pY1AgU3dpdGNoIiwgV004OTc4X0lOUFVUX0NPTlRST0wsIDQsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk3OF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fREFDKCJMZWZ0IERBQyIsICJMZWZ0IEhpRmkgUGxheWJhY2siLAorCQkJIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMsIDAsIDApLAorCVNORF9TT0NfREFQTV9EQUMoIlJpZ2h0IERBQyIsICJSaWdodCBIaUZpIFBsYXliYWNrIiwKKwkJCSBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8zLCAxLCAwKSwKKwlTTkRfU09DX0RBUE1fQURDKCJMZWZ0IEFEQyIsICJMZWZ0IEhpRmkgQ2FwdHVyZSIsCisJCQkgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMiwgMCwgMCksCisJU05EX1NPQ19EQVBNX0FEQygiUmlnaHQgQURDIiwgIlJpZ2h0IEhpRmkgQ2FwdHVyZSIsCisJCQkgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMiwgMSwgMCksCisKKwkvKiBNaXhlciAjMTogT1VUMSwyICovCisJU09DX01JWEVSX0FSUkFZKCJMZWZ0IE91dHB1dCBNaXhlciIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJCQkyLCAwLCB3bTg5NzhfbGVmdF9vdXRfbWl4ZXIpLAorCVNPQ19NSVhFUl9BUlJBWSgiUmlnaHQgT3V0cHV0IE1peGVyIiwgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMywKKwkJCTMsIDAsIHdtODk3OF9yaWdodF9vdXRfbWl4ZXIpLAorCisJU09DX01JWEVSX0FSUkFZKCJMZWZ0IElucHV0IE1peGVyIiwgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMiwKKwkJCTIsIDAsIHdtODk3OF9sZWZ0X2lucHV0X21peGVyKSwKKwlTT0NfTUlYRVJfQVJSQVkoIlJpZ2h0IElucHV0IE1peGVyIiwgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMiwKKwkJCTMsIDAsIHdtODk3OF9yaWdodF9pbnB1dF9taXhlciksCisKKwlTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IEJvb3N0IE1peGVyIiwgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMiwKKwkJCSA0LCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJSaWdodCBCb29zdCBNaXhlciIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCQkgNSwgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IENhcHR1cmUgUEdBIiwgV004OTc4X0xFRlRfSU5QX1BHQV9DT05UUk9MLAorCQkJIDYsIDEsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIlJpZ2h0IENhcHR1cmUgUEdBIiwgV004OTc4X1JJR0hUX0lOUF9QR0FfQ09OVFJPTCwKKwkJCSA2LCAxLCBOVUxMLCAwKSwKKworCVNORF9TT0NfREFQTV9QR0EoIkxlZnQgSGVhZHBob25lIE91dCIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCQkgNywgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQSgiUmlnaHQgSGVhZHBob25lIE91dCIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzIsCisJCQkgOCwgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fUEdBKCJMZWZ0IFNwZWFrZXIgT3V0IiwgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMywKKwkJCSA2LCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJSaWdodCBTcGVha2VyIE91dCIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJCQkgNSwgMCwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fTUlYRVIoIk9VVDQgVk1JRCIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMsCisJCQkgICA4LCAwLCBOVUxMLCAwKSwKKworCVNORF9TT0NfREFQTV9NSUNCSUFTKCJNaWMgQmlhcyIsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEsIDQsIDApLAorCisJU05EX1NPQ19EQVBNX0lOUFVUKCJMTUlDTiIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTE1JQ1AiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIlJNSUNOIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJSTUlDUCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTEFVWCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiUkFVWCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTDIiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIlIyIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiTEhQIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiUkhQIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiTFNQSyIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIlJTUEsiKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCS8qIE91dHB1dCBtaXhlciAqLworCXsiUmlnaHQgT3V0cHV0IE1peGVyIiwgIlBDTSBQbGF5YmFjayBTd2l0Y2giLCAiUmlnaHQgREFDIn0sCisJeyJSaWdodCBPdXRwdXQgTWl4ZXIiLCAiQXV4IFBsYXliYWNrIFN3aXRjaCIsICJSQVVYIn0sCisJeyJSaWdodCBPdXRwdXQgTWl4ZXIiLCAiTGluZSBCeXBhc3MgU3dpdGNoIiwgIlJpZ2h0IEJvb3N0IE1peGVyIn0sCisKKwl7IkxlZnQgT3V0cHV0IE1peGVyIiwgIlBDTSBQbGF5YmFjayBTd2l0Y2giLCAiTGVmdCBEQUMifSwKKwl7IkxlZnQgT3V0cHV0IE1peGVyIiwgIkF1eCBQbGF5YmFjayBTd2l0Y2giLCAiTEFVWCJ9LAorCXsiTGVmdCBPdXRwdXQgTWl4ZXIiLCAiTGluZSBCeXBhc3MgU3dpdGNoIiwgIkxlZnQgQm9vc3QgTWl4ZXIifSwKKworCS8qIE91dHB1dHMgKi8KKwl7IlJpZ2h0IEhlYWRwaG9uZSBPdXQiLCBOVUxMLCAiUmlnaHQgT3V0cHV0IE1peGVyIn0sCisJeyJSSFAiLCBOVUxMLCAiUmlnaHQgSGVhZHBob25lIE91dCJ9LAorCisJeyJMZWZ0IEhlYWRwaG9uZSBPdXQiLCBOVUxMLCAiTGVmdCBPdXRwdXQgTWl4ZXIifSwKKwl7IkxIUCIsIE5VTEwsICJMZWZ0IEhlYWRwaG9uZSBPdXQifSwKKworCXsiUmlnaHQgU3BlYWtlciBPdXQiLCBOVUxMLCAiUmlnaHQgT3V0cHV0IE1peGVyIn0sCisJeyJSU1BLIiwgTlVMTCwgIlJpZ2h0IFNwZWFrZXIgT3V0In0sCisKKwl7IkxlZnQgU3BlYWtlciBPdXQiLCBOVUxMLCAiTGVmdCBPdXRwdXQgTWl4ZXIifSwKKwl7IkxTUEsiLCBOVUxMLCAiTGVmdCBTcGVha2VyIE91dCJ9LAorCisJLyogQm9vc3QgTWl4ZXIgKi8KKwl7IlJpZ2h0IEFEQyIsIE5VTEwsICJSaWdodCBCb29zdCBNaXhlciJ9LAorCisJeyJSaWdodCBCb29zdCBNaXhlciIsIE5VTEwsICJSQVVYIn0sCisJeyJSaWdodCBCb29zdCBNaXhlciIsIE5VTEwsICJSaWdodCBDYXB0dXJlIFBHQSJ9LAorCXsiUmlnaHQgQm9vc3QgTWl4ZXIiLCBOVUxMLCAiUjIifSwKKworCXsiTGVmdCBBREMiLCBOVUxMLCAiTGVmdCBCb29zdCBNaXhlciJ9LAorCisJeyJMZWZ0IEJvb3N0IE1peGVyIiwgTlVMTCwgIkxBVVgifSwKKwl7IkxlZnQgQm9vc3QgTWl4ZXIiLCBOVUxMLCAiTGVmdCBDYXB0dXJlIFBHQSJ9LAorCXsiTGVmdCBCb29zdCBNaXhlciIsIE5VTEwsICJMMiJ9LAorCisJLyogSW5wdXQgUEdBICovCisJeyJSaWdodCBDYXB0dXJlIFBHQSIsIE5VTEwsICJSaWdodCBJbnB1dCBNaXhlciJ9LAorCXsiTGVmdCBDYXB0dXJlIFBHQSIsIE5VTEwsICJMZWZ0IElucHV0IE1peGVyIn0sCisKKwl7IlJpZ2h0IElucHV0IE1peGVyIiwgIlIyIFN3aXRjaCIsICJSMiJ9LAorCXsiUmlnaHQgSW5wdXQgTWl4ZXIiLCAiTWljTiBTd2l0Y2giLCAiUk1JQ04ifSwKKwl7IlJpZ2h0IElucHV0IE1peGVyIiwgIk1pY1AgU3dpdGNoIiwgIlJNSUNQIn0sCisKKwl7IkxlZnQgSW5wdXQgTWl4ZXIiLCAiTDIgU3dpdGNoIiwgIkwyIn0sCisJeyJMZWZ0IElucHV0IE1peGVyIiwgIk1pY04gU3dpdGNoIiwgIkxNSUNOIn0sCisJeyJMZWZ0IElucHV0IE1peGVyIiwgIk1pY1AgU3dpdGNoIiwgIkxNSUNQIn0sCit9OworCitzdGF0aWMgaW50IHdtODk3OF9hZGRfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204OTc4X2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUod204OTc4X2RhcG1fd2lkZ2V0cykpOworCisJLyogc2V0IHVwIHRoZSBXTTg5NzggYXVkaW8gbWFwICovCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKworCXJldHVybiAwOworfQorCisvKiBQTEwgZGl2aXNvcnMgKi8KK3N0cnVjdCB3bTg5NzhfcGxsX2RpdiB7CisJdTMyIGs7CisJdTggbjsKKwl1OCBkaXYyOworfTsKKworI2RlZmluZSBGSVhFRF9QTExfU0laRSAoMSA8PCAyNCkKKworc3RhdGljIHZvaWQgcGxsX2ZhY3RvcnMoc3RydWN0IHdtODk3OF9wbGxfZGl2ICpwbGxfZGl2LCB1bnNpZ25lZCBpbnQgdGFyZ2V0LAorCQkJdW5zaWduZWQgaW50IHNvdXJjZSkKK3sKKwl1NjQga19wYXJ0OworCXVuc2lnbmVkIGludCBrLCBuX2Rpdiwgbl9tb2Q7CisKKwluX2RpdiA9IHRhcmdldCAvIHNvdXJjZTsKKwlpZiAobl9kaXYgPCA2KSB7CisJCXNvdXJjZSA+Pj0gMTsKKwkJcGxsX2Rpdi0+ZGl2MiA9IDE7CisJCW5fZGl2ID0gdGFyZ2V0IC8gc291cmNlOworCX0gZWxzZSB7CisJCXBsbF9kaXYtPmRpdjIgPSAwOworCX0KKworCWlmIChuX2RpdiA8IDYgfHwgbl9kaXYgPiAxMikKKwkJZGV2X3dhcm4od204OTc4X2NvZGVjLT5kZXYsCisJCQkgIldNODk3OCBOIHZhbHVlIGV4Y2VlZHMgcmVjb21tZW5kZWQgcmFuZ2UhIE4gPSAldVxuIiwKKwkJCSBuX2Rpdik7CisKKwlwbGxfZGl2LT5uID0gbl9kaXY7CisJbl9tb2QgPSB0YXJnZXQgLSBzb3VyY2UgKiBuX2RpdjsKKwlrX3BhcnQgPSBGSVhFRF9QTExfU0laRSAqIChsb25nIGxvbmcpbl9tb2QgKyBzb3VyY2UgLyAyOworCisJZG9fZGl2KGtfcGFydCwgc291cmNlKTsKKworCWsgPSBrX3BhcnQgJiAweEZGRkZGRkZGOworCisJcGxsX2Rpdi0+ayA9IGs7Cit9CisKKy8qIE1DTEsgZGl2aWRlcnMgKi8KK3N0YXRpYyBjb25zdCBpbnQgbWNsa19udW1lcmF0b3JbXQk9IHsxLCAzLCAyLCAzLCA0LCA2LCA4LCAxMn07CitzdGF0aWMgY29uc3QgaW50IG1jbGtfZGVub21pbmF0b3JbXQk9IHsxLCAyLCAxLCAxLCAxLCAxLCAxLCAxfTsKKworLyoKKyAqIGZpbmQgaW5kZXggPj0gaWR4LCBzdWNoIHRoYXQsIGZvciBhIGdpdmVuIGZfb3V0LAorICogMyAqIGZfbWNsayAvIDQgPD0gZl9QTExPVVQgPCAxMyAqIGZfbWNsayAvIDQKKyAqIGZfb3V0IGNhbiBiZSBmXzI1NmZzIG9yIGZfb3BjbGssIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIGZfMjU2ZnMuIENhbiBiZQorICogZ2VuZXJhbGlzZWQgZm9yIGZfb3BjbGsgd2l0aCBzdWl0YWJsZSBjb2VmZmljaWVudCBhcnJheXMsIGJ1dCBjdXJyZW50bHkKKyAqIHRoZSBPUENMSyBkaXZpc29yIGlzIGNhbGN1bGF0ZWQgZGlyZWN0bHksIG5vdCBpdGVyYXRpdmVseS4KKyAqLworc3RhdGljIGludCB3bTg5NzhfZW51bV9tY2xrKHVuc2lnbmVkIGludCBmX291dCwgdW5zaWduZWQgaW50IGZfbWNsaywKKwkJCSAgICB1bnNpZ25lZCBpbnQgKmZfcGxsb3V0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWNsa19udW1lcmF0b3IpOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGZfcGxsb3V0X3g0ID0gNCAqIGZfb3V0ICogbWNsa19udW1lcmF0b3JbaV0gLworCQkJbWNsa19kZW5vbWluYXRvcltpXTsKKwkJaWYgKDMgKiBmX21jbGsgPD0gZl9wbGxvdXRfeDQgJiYgZl9wbGxvdXRfeDQgPCAxMyAqIGZfbWNsaykgeworCQkJKmZfcGxsb3V0ID0gZl9wbGxvdXRfeDQgLyA0OworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIENhbGN1bGF0ZSBpbnRlcm5hbCBmcmVxdWVuY2llcyBhbmQgZGl2aWRlcnMsIGFjY29yZGluZyB0byBGaWd1cmUgNDAKKyAqICJQTEwgYW5kIENsb2NrIFNlbGVjdCBDaXJjdWl0IiBpbiBXTTg5NzggZGF0YXNoZWV0IFJldi4gMi42CisgKi8KK3N0YXRpYyBpbnQgd204OTc4X2NvbmZpZ3VyZV9wbGwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCB3bTg5NzhfcHJpdiAqd204OTc4ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgd204OTc4X3BsbF9kaXYgcGxsX2RpdjsKKwl1bnNpZ25lZCBpbnQgZl9vcGNsayA9IHdtODk3OC0+Zl9vcGNsaywgZl9tY2xrID0gd204OTc4LT5mX21jbGssCisJCWZfMjU2ZnMgPSB3bTg5NzgtPmZfMjU2ZnM7CisJdW5zaWduZWQgaW50IGYyOworCisJaWYgKCFmX21jbGspCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZfb3BjbGspIHsKKwkJdW5zaWduZWQgaW50IG9wY2xrX2RpdjsKKwkJLyogQ2Fubm90IHNldCB1cCBNQ0xLIGRpdmlkZXIgbm93LCBkbyBsYXRlciAqLworCQl3bTg5NzgtPm1jbGtfaWR4ID0gLTE7CisKKwkJLyoKKwkJICogVGhlIHVzZXIgbmVlZHMgT1BDTEsuIENob29zZSBPUENMS0RJViB0byBwdXQKKwkJICogNiA8PSBSID0gZjIgLyBmMSA8IDEzLCAxIDw9IE9QQ0xLRElWIDw9IDQuCisJCSAqIGZfb3BjbGsgPSBmX21jbGsgKiBwcmVzY2FsZSAqIFIgLyA0IC8gT1BDTEtESVYsIHdoZXJlCisJCSAqIHByZXNjYWxlID0gMSwgb3IgcHJlc2NhbGUgPSAyLiBQcmVzY2FsZSBpcyBjYWxjdWxhdGVkIGluc2lkZQorCQkgKiBwbGxfZmFjdG9ycygpLiBXZSBoYXZlIHRvIHNlbGVjdCBmX1BMTE9VVCwgc3VjaCB0aGF0CisJCSAqIGZfbWNsayAqIDMgLyA0IDw9IGZfUExMT1VUIDwgZl9tY2xrICogMTMgLyA0LiBNdXN0IGJlCisJCSAqIGZfbWNsayAqIDMgLyAxNiA8PSBmX29wY2xrIDwgZl9tY2xrICogMTMgLyA0LgorCQkgKi8KKwkJaWYgKDE2ICogZl9vcGNsayA8IDMgKiBmX21jbGsgfHwgNCAqIGZfb3BjbGsgPj0gMTMgKiBmX21jbGspCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoNCAqIGZfb3BjbGsgPCAzICogZl9tY2xrKQorCQkJLyogSGF2ZSB0byB1c2UgT1BDTEtESVYgKi8KKwkJCW9wY2xrX2RpdiA9ICgzICogZl9tY2xrIC8gNCArIGZfb3BjbGsgLSAxKSAvIGZfb3BjbGs7CisJCWVsc2UKKwkJCW9wY2xrX2RpdiA9IDE7CisKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiJXM6IE9QQ0xLRElWPSVkXG4iLCBfX2Z1bmNfXywgb3BjbGtfZGl2KTsKKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfR1BJT19DT05UUk9MLCAweDMwLAorCQkJCSAgICAob3BjbGtfZGl2IC0gMSkgPDwgNCk7CisKKwkJd204OTc4LT5mX3BsbG91dCA9IGZfb3BjbGsgKiBvcGNsa19kaXY7CisJfSBlbHNlIGlmIChmXzI1NmZzKSB7CisJCS8qCisJCSAqIE5vdCB1c2luZyBPUENMSywgYnV0IFBMTCBpcyB1c2VkIGZvciB0aGUgY29kZWMsIGNob29zZSBSOgorCQkgKiA2IDw9IFIgPSBmMiAvIGYxIDwgMTMsIHRvIHB1dCAxIDw9IE1DTEtESVYgPD0gMTIuCisJCSAqIGZfMjU2ZnMgPSBmX21jbGsgKiBwcmVzY2FsZSAqIFIgLyA0IC8gTUNMS0RJViwgd2hlcmUKKwkJICogcHJlc2NhbGUgPSAxLCBvciBwcmVzY2FsZSA9IDIuIFByZXNjYWxlIGlzIGNhbGN1bGF0ZWQgaW5zaWRlCisJCSAqIHBsbF9mYWN0b3JzKCkuIFdlIGhhdmUgdG8gc2VsZWN0IGZfUExMT1VULCBzdWNoIHRoYXQKKwkJICogZl9tY2xrICogMyAvIDQgPD0gZl9QTExPVVQgPCBmX21jbGsgKiAxMyAvIDQuIE11c3QgYmUKKwkJICogZl9tY2xrICogMyAvIDQ4IDw9IGZfMjU2ZnMgPCBmX21jbGsgKiAxMyAvIDQuIFRoaXMgbWVhbnMgTUNMSworCQkgKiBtdXN0IGJlIDMuNzgxTUh6IDw9IGZfTUNMSyA8PSAzMi43NjhNSHoKKwkJICovCisJCWludCBpZHggPSB3bTg5NzhfZW51bV9tY2xrKGZfMjU2ZnMsIGZfbWNsaywgJndtODk3OC0+Zl9wbGxvdXQpOworCQlpZiAoaWR4IDwgMCkKKwkJCXJldHVybiBpZHg7CisKKwkJd204OTc4LT5tY2xrX2lkeCA9IGlkeDsKKworCQkvKiBHUElPMSBpbnRvIGRlZmF1bHQgbW9kZSBhcyBpbnB1dCAtIGJlZm9yZSBjb25maWd1cmluZyBQTEwgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0dQSU9fQ09OVFJPTCwgNywgMCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZjIgPSB3bTg5NzgtPmZfcGxsb3V0ICogNDsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVzOiBmX01DTEs9JXVIeiwgZl9QTExPVVQ9JXVIelxuIiwgX19mdW5jX18sCisJCXdtODk3OC0+Zl9tY2xrLCB3bTg5NzgtPmZfcGxsb3V0KTsKKworCXBsbF9mYWN0b3JzKCZwbGxfZGl2LCBmMiwgd204OTc4LT5mX21jbGspOworCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiJXM6IGNhbGN1bGF0ZWQgUExMIE49MHgleCwgSz0weCV4LCBkaXYyPSVkXG4iLAorCQlfX2Z1bmNfXywgcGxsX2Rpdi5uLCBwbGxfZGl2LmssIHBsbF9kaXYuZGl2Mik7CisKKwkvKiBUdXJuIFBMTCBvZmYgZm9yIGNvbmZpZ3VyYXRpb24uLi4gKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8xLCAweDIwLCAwKTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9QTExfTiwgKHBsbF9kaXYuZGl2MiA8PCA0KSB8IHBsbF9kaXYubik7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X1BMTF9LMSwgcGxsX2Rpdi5rID4+IDE4KTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfUExMX0syLCAocGxsX2Rpdi5rID4+IDkpICYgMHgxZmYpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9QTExfSzMsIHBsbF9kaXYuayAmIDB4MWZmKTsKKworCS8qIC4uLmFuZCBvbiBhZ2FpbiAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4MjAsIDB4MjApOworCisJaWYgKGZfb3BjbGspCisJCS8qIE91dHB1dCBQTEwgKE9QQ0xLKSB0byBHUElPMSAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfR1BJT19DT05UUk9MLCA3LCA0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogQ29uZmlndXJlIFdNODk3OCBjbG9jayBkaXZpZGVycy4KKyAqLworc3RhdGljIGludCB3bTg5Nzhfc2V0X2RhaV9jbGtkaXYoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCQkJIGludCBkaXZfaWQsIGludCBkaXYpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTc4X3ByaXYgKndtODk3OCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGRpdl9pZCkgeworCWNhc2UgV004OTc4X09QQ0xLUkFURToKKwkJd204OTc4LT5mX29wY2xrID0gZGl2OworCisJCWlmICh3bTg5NzgtPmZfbWNsaykKKwkJCS8qCisJCQkgKiBXZSBrbm93IHRoZSBNQ0xLIGZyZXF1ZW5jeSwgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZAorCQkJICogT1BDTEssIGNvbmZpZ3VyZSB0aGUgUExMIGJhc2VkIG9uIHRoYXQgYW5kIHN0YXJ0IGl0CisJCQkgKiBhbmQgT1BDTEsgaW1tZWRpYXRlbHkuIFdlIHdpbGwgY29uZmlndXJlIFBMTCB0byBtYXRjaAorCQkJICogdXNlci1yZXF1ZXN0ZWQgT1BDTEsgZnJxdWVuY3kgYXMgZ29vZCBhcyBwb3NzaWJsZS4KKwkJCSAqIEluIGZhY3QsIGl0IGlzIGxpa2VseSwgdGhhdCBtYXRjaGluZyB0aGUgc2FtcGxpbmcKKwkJCSAqIHJhdGUsIHdoZW4gaXQgYmVjb21lcyBrbm93biwgaXMgbW9yZSBpbXBvcnRhbnQsIGFuZAorCQkJICogd2Ugd2lsbCBub3QgYmUgcmVjb25maWd1cmluZyBQTEwgdGhlbiwgYmVjYXVzZSB3ZQorCQkJICogbXVzdCBub3QgaW50ZXJydXB0IE9QQ0xLLiBCdXQgaXQgc2hvdWxkIGJlIGZpbmUsCisJCQkgKiBiZWNhdXNlIHR5cGljYWxseSB0aGUgdXNlciB3aWxsIHJlcXVlc3QgT1BDTEsgdG8gcnVuCisJCQkgKiBhdCAyNTZmcyBvciA1MTJmcywgYW5kIGZvciB0aGVzZSBjYXNlcyB3ZSB3aWxsIGFsc28KKwkJCSAqIGZpbmQgYW4gZXhhY3QgTUNMSyBkaXZpZGVyIGNvbmZpZ3VyYXRpb24gLSBpdCB3aWxsCisJCQkgKiBiZSBlcXVhbCB0byBvciBkb3VibGUgdGhlIE9QQ0xLIGRpdmlzb3IuCisJCQkgKi8KKwkJCXJldCA9IHdtODk3OF9jb25maWd1cmVfcGxsKGNvZGVjKTsKKwkJYnJlYWs7CisJY2FzZSBXTTg5NzhfQkNMS0RJVjoKKwkJaWYgKGRpdiAmIH4weDFjKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9DTE9DS0lORywgMHgxYywgZGl2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiJXM6IElEICVkLCB2YWx1ZSAldVxuIiwgX19mdW5jX18sIGRpdl9pZCwgZGl2KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBAZnJlcToJd2hlbiAuc2V0X3BsbCgpIHVzIG5vdCB1c2VkLCBmcmVxIGlzIGNvZGVjIE1DTEsgaW5wdXQgZnJlcXVlbmN5CisgKi8KK3N0YXRpYyBpbnQgd204OTc4X3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLCBpbnQgY2xrX2lkLAorCQkJCSB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCB3bTg5NzhfcHJpdiAqd204OTc4ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVzOiBJRCAlZCwgZnJlcSAldVxuIiwgX19mdW5jX18sIGNsa19pZCwgZnJlcSk7CisKKwlpZiAoZnJlcSkgeworCQl3bTg5NzgtPmZfbWNsayA9IGZyZXE7CisKKwkJLyogRXZlbiBpZiBNQ0xLIGlzIHVzZWQgZm9yIHN5c3RlbSBjbG9jaywgbWlnaHQgaGF2ZSB0byBkcml2ZSBPUENMSyAqLworCQlpZiAod204OTc4LT5mX29wY2xrKQorCQkJcmV0ID0gd204OTc4X2NvbmZpZ3VyZV9wbGwoY29kZWMpOworCisJCS8qIE91ciBzeXNjbGsgaXMgZml4ZWQgdG8gMjU2ICogZnMsIHdpbGwgY29uZmlndXJlIGluIC5od19wYXJhbXMoKSAgKi8KKworCQlpZiAoIXJldCkKKwkJCXdtODk3OC0+c3lzY2xrID0gY2xrX2lkOworCX0KKworCWlmICh3bTg5NzgtPnN5c2NsayA9PSBXTTg5NzhfUExMICYmICghZnJlcSB8fCBjbGtfaWQgPT0gV004OTc4X01DTEspKSB7CisJCS8qIENsb2NrIENPREVDIGRpcmVjdGx5IGZyb20gTUNMSyAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfQ0xPQ0tJTkcsIDB4MTAwLCAwKTsKKworCQkvKiBHUElPMSBpbnRvIGRlZmF1bHQgbW9kZSBhcyBpbnB1dCAtIGJlZm9yZSBjb25maWd1cmluZyBQTEwgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0dQSU9fQ09OVFJPTCwgNywgMCk7CisKKwkJLyogVHVybiBvZmYgUExMICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEsIDB4MjAsIDApOworCQl3bTg5NzgtPnN5c2NsayA9IFdNODk3OF9NQ0xLOworCQl3bTg5NzgtPmZfcGxsb3V0ID0gMDsKKwkJd204OTc4LT5mX29wY2xrID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU2V0IEFEQyBhbmQgVm9pY2UgREFDIGZvcm1hdC4KKyAqLworc3RhdGljIGludCB3bTg5Nzhfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksIHVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwkvKgorCSAqIEJDTEsgcG9sYXJpdHkgbWFzayA9IDB4MTAwLCBMUkMgY2xvY2sgcG9sYXJpdHkgbWFzayA9IDB4ODAsCisJICogRGF0YSBGb3JtYXQgbWFzayA9IDB4MTg6IGFsbCB3aWxsIGJlIGNhbGN1bGF0ZWQgYW5ldworCSAqLworCXUxNiBpZmFjZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTc4X0FVRElPX0lOVEVSRkFDRSkgJiB+MHgxOTg7CisJdTE2IGNsayA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTc4X0NMT0NLSU5HKTsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBzZXQgbWFzdGVyL3NsYXZlIGF1ZGlvIGludGVyZmFjZSAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWNsayB8PSAxOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCWNsayAmPSB+MTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogaW50ZXJmYWNlIGZvcm1hdCAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJaWZhY2UgfD0gMHgxMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJaWZhY2UgfD0gMHg4OworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQlpZmFjZSB8PSAweDE4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBjbG9jayBpbnZlcnNpb24gKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJaWZhY2UgfD0gMHgxODA7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCWlmYWNlIHw9IDB4MTAwOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQlpZmFjZSB8PSAweDgwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfQVVESU9fSU5URVJGQUNFLCBpZmFjZSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X0NMT0NLSU5HLCBjbGspOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgUENNIERBSSBiaXQgc2l6ZSBhbmQgc2FtcGxlIHJhdGUuCisgKi8KK3N0YXRpYyBpbnQgd204OTc4X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCXN0cnVjdCB3bTg5NzhfcHJpdiAqd204OTc4ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwkvKiBXb3JkIGxlbmd0aCBtYXNrID0gMHg2MCAqLworCXUxNiBpZmFjZV9jdGwgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3OF9BVURJT19JTlRFUkZBQ0UpICYgfjB4NjA7CisJLyogU2FtcGxpbmcgcmF0ZSBtYXNrID0gMHhlIChmb3IgZmlsdGVycykgKi8KKwl1MTYgYWRkX2N0bCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTc4X0FERElUSU9OQUxfQ09OVFJPTCkgJiB+MHhlOworCXUxNiBjbGtpbmcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3OF9DTE9DS0lORyk7CisJZW51bSB3bTg5Nzhfc3lzY2xrX3NyYyBjdXJyZW50X2Nsa19pZCA9IGNsa2luZyAmIDB4MTAwID8KKwkJV004OTc4X1BMTCA6IFdNODk3OF9NQ0xLOworCXVuc2lnbmVkIGludCBmX3NlbCwgZGlmZiwgZGlmZl9iZXN0ID0gSU5UX01BWDsKKwlpbnQgaSwgYmVzdCA9IDA7CisKKwlpZiAoIXdtODk3OC0+Zl9tY2xrKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGJpdCBzaXplICovCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJaWZhY2VfY3RsIHw9IDB4MjA7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCWlmYWNlX2N0bCB8PSAweDQwOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQlpZmFjZV9jdGwgfD0gMHg2MDsKKwkJYnJlYWs7CisJfQorCisJLyogZmlsdGVyIGNvZWZmaWNpZW50ICovCisJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7CisJY2FzZSA4MDAwOgorCQlhZGRfY3RsIHw9IDB4NSA8PCAxOworCQlicmVhazsKKwljYXNlIDExMDI1OgorCQlhZGRfY3RsIHw9IDB4NCA8PCAxOworCQlicmVhazsKKwljYXNlIDE2MDAwOgorCQlhZGRfY3RsIHw9IDB4MyA8PCAxOworCQlicmVhazsKKwljYXNlIDIyMDUwOgorCQlhZGRfY3RsIHw9IDB4MiA8PCAxOworCQlicmVhazsKKwljYXNlIDMyMDAwOgorCQlhZGRfY3RsIHw9IDB4MSA8PCAxOworCQlicmVhazsKKwljYXNlIDQ0MTAwOgorCWNhc2UgNDgwMDA6CisJCWJyZWFrOworCX0KKworCS8qIFNhbXBsaW5nIHJhdGUgaXMga25vd24gbm93LCBjYW4gY29uZmlndXJlIHRoZSBNQ0xLIGRpdmlkZXIgKi8KKwl3bTg5NzgtPmZfMjU2ZnMgPSBwYXJhbXNfcmF0ZShwYXJhbXMpICogMjU2OworCisJaWYgKHdtODk3OC0+c3lzY2xrID09IFdNODk3OF9NQ0xLKSB7CisJCXdtODk3OC0+bWNsa19pZHggPSAtMTsKKwkJZl9zZWwgPSB3bTg5NzgtPmZfbWNsazsKKwl9IGVsc2UgeworCQlpZiAoIXdtODk3OC0+Zl9wbGxvdXQpIHsKKwkJCS8qIFdlIG9ubHkgZW50ZXIgaGVyZSwgaWYgT1BDTEsgaXMgbm90IHVzZWQgKi8KKwkJCWludCByZXQgPSB3bTg5NzhfY29uZmlndXJlX3BsbChjb2RlYyk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCWZfc2VsID0gd204OTc4LT5mX3BsbG91dDsKKwl9CisKKwlpZiAod204OTc4LT5tY2xrX2lkeCA8IDApIHsKKwkJLyogRWl0aGVyIE1DTEsgaXMgdXNlZCBkaXJlY3RseSwgb3IgT1BDTEsgaXMgdXNlZCAqLworCQlpZiAoZl9zZWwgPCB3bTg5NzgtPmZfMjU2ZnMgfHwgZl9zZWwgPiAxMiAqIHdtODk3OC0+Zl8yNTZmcykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1jbGtfbnVtZXJhdG9yKTsgaSsrKSB7CisJCQlkaWZmID0gYWJzKHdtODk3OC0+Zl8yNTZmcyAqIDMgLQorCQkJCSAgIGZfc2VsICogMyAqIG1jbGtfZGVub21pbmF0b3JbaV0gLyBtY2xrX251bWVyYXRvcltpXSk7CisKKwkJCWlmIChkaWZmIDwgZGlmZl9iZXN0KSB7CisJCQkJZGlmZl9iZXN0ID0gZGlmZjsKKwkJCQliZXN0ID0gaTsKKwkJCX0KKworCQkJaWYgKCFkaWZmKQorCQkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJLyogT1BDTEsgbm90IHVzZWQsIGNvZGVjIGRyaXZlbiBieSBQTEwgKi8KKwkJYmVzdCA9IHdtODk3OC0+bWNsa19pZHg7CisJCWRpZmYgPSAwOworCX0KKworCWlmIChkaWZmKQorCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiSW1wcmVjaXNlIHNhbXBsaW5nIHJhdGU6ICV1SHolc1xuIiwKKwkJCWZfc2VsICogbWNsa19kZW5vbWluYXRvcltiZXN0XSAvIG1jbGtfbnVtZXJhdG9yW2Jlc3RdIC8gMjU2LAorCQkJd204OTc4LT5zeXNjbGsgPT0gV004OTc4X01DTEsgPworCQkJIiwgY29uc2lkZXIgdXNpbmcgUExMIiA6ICIiKTsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVzOiBmbXQgJWQsIHJhdGUgJXUsIE1DTEsgZGl2aXNvciAjJWRcbiIsIF9fZnVuY19fLAorCQlwYXJhbXNfZm9ybWF0KHBhcmFtcyksIHBhcmFtc19yYXRlKHBhcmFtcyksIGJlc3QpOworCisJLyogTUNMSyBkaXZpc29yIG1hc2sgPSAweGUwICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0NMT0NLSU5HLCAweGUwLCBiZXN0IDw8IDUpOworCisJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X0FVRElPX0lOVEVSRkFDRSwgaWZhY2VfY3RsKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfQURESVRJT05BTF9DT05UUk9MLCBhZGRfY3RsKTsKKworCWlmICh3bTg5NzgtPnN5c2NsayAhPSBjdXJyZW50X2Nsa19pZCkgeworCQlpZiAod204OTc4LT5zeXNjbGsgPT0gV004OTc4X1BMTCkKKwkJCS8qIFJ1biBDT0RFQyBmcm9tIFBMTCBpbnN0ZWFkIG9mIE1DTEsgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9DTE9DS0lORywKKwkJCQkJICAgIDB4MTAwLCAweDEwMCk7CisJCWVsc2UKKwkJCS8qIENsb2NrIENPREVDIGRpcmVjdGx5IGZyb20gTUNMSyAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0NMT0NLSU5HLCAweDEwMCwgMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTc4X211dGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBtdXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICIlczogJWRcbiIsIF9fZnVuY19fLCBtdXRlKTsKKworCWlmIChtdXRlKQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NzhfREFDX0NPTlRST0wsIDB4NDAsIDB4NDApOworCWVsc2UKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X0RBQ19DT05UUk9MLCAweDQwLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk3OF9zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQoreworCXUxNiBwb3dlcjEgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEpICYgfjM7CisKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJcG93ZXIxIHw9IDE7ICAvKiBWTUlEIDc1ayAqLworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8xLCBwb3dlcjEpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQkvKiBiaXQgMzogZW5hYmxlIGJpYXMsIGJpdCAyOiBlbmFibGUgSS9PIHRpZSBvZmYgYnVmZmVyICovCisJCXBvd2VyMSB8PSAweGM7CisKKwkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCS8qIEluaXRpYWwgY2FwIGNoYXJnZSBhdCBWTUlEIDVrICovCisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCSAgICAgIHBvd2VyMSB8IDB4Myk7CisJCQltZGVsYXkoMTAwKTsKKwkJfQorCisJCXBvd2VyMSB8PSAweDI7ICAvKiBWTUlEIDUwMGsgKi8KKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMSwgcG93ZXIxKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgorCQkvKiBQcmVzZXJ2ZSBQTEwgLSBPUENMSyBtYXkgYmUgdXNlZCBieSBzb21lb25lICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEsIH4weDIwLCAwKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMiwgMCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMsIDApOworCQlicmVhazsKKwl9CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICIlczogJWQsICV4XG4iLCBfX2Z1bmNfXywgbGV2ZWwsIHBvd2VyMSk7CisKKwljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFdNODk3OF9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFwKKwlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyB3bTg5NzhfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gd204OTc4X2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlCT0gd204OTc4X211dGUsCisJLnNldF9mbXQJPSB3bTg5Nzhfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSB3bTg5Nzhfc2V0X2RhaV9jbGtkaXYsCisJLnNldF9zeXNjbGsJPSB3bTg5Nzhfc2V0X2RhaV9zeXNjbGssCit9OworCisvKiBBbHNvIHN1cHBvcnRzIDEya0h6ICovCitzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTc4X2RhaSA9IHsKKwkubmFtZSA9ICJXTTg5NzggSGlGaSIsCisJLmlkID0gMSwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJLmZvcm1hdHMgPSBXTTg5NzhfRk9STUFUUywKKwl9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJLmZvcm1hdHMgPSBXTTg5NzhfRk9STUFUUywKKwl9LAorCS5vcHMgPSAmd204OTc4X2RhaV9vcHMsCit9OworRVhQT1JUX1NZTUJPTF9HUEwod204OTc4X2RhaSk7CisKK3N0YXRpYyBpbnQgd204OTc4X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCXdtODk3OF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJLyogQWxzbyBzd2l0Y2ggUExMIG9mZiAqLworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzEsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTc4X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTc4X3ByaXYgKndtODk3OCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGk7CisJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisKKwkvKiBTeW5jIHJlZ19jYWNoZSB3aXRoIHRoZSBoYXJkd2FyZSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk3OF9yZWcpOyBpKyspIHsKKwkJaWYgKGkgPT0gV004OTc4X1JFU0VUKQorCQkJY29udGludWU7CisJCWlmIChjYWNoZVtpXSAhPSB3bTg5NzhfcmVnW2ldKQorCQkJc25kX3NvY193cml0ZShjb2RlYywgaSwgY2FjaGVbaV0pOworCX0KKworCXdtODk3OF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJaWYgKHdtODk3OC0+Zl9wbGxvdXQpCisJCS8qIFN3aXRjaCBQTEwgb24gKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMSwgMHgyMCwgMHgyMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5NzhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh3bTg5NzhfY29kZWMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb2RlYyBkZXZpY2Ugbm90IHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gd204OTc4X2NvZGVjOworCWNvZGVjID0gd204OTc4X2NvZGVjOworCisJLyogcmVnaXN0ZXIgcGNtcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zOiAlZFxuIiwgcmV0KTsKKwkJZ290byBwY21fZXJyOworCX0KKworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5Nzhfc25kX2NvbnRyb2xzLAorCQkJICAgICBBUlJBWV9TSVpFKHdtODk3OF9zbmRfY29udHJvbHMpKTsKKwl3bTg5NzhfYWRkX3dpZGdldHMoY29kZWMpOworCitwY21fZXJyOgorCXJldHVybiByZXQ7Cit9CisKKy8qIHBvd2VyIGRvd24gY2hpcCAqLworc3RhdGljIGludCB3bTg5NzhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg5NzggPSB7CisJLnByb2JlCQk9IHdtODk3OF9wcm9iZSwKKwkucmVtb3ZlCQk9IHdtODk3OF9yZW1vdmUsCisJLnN1c3BlbmQJPSB3bTg5Nzhfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHdtODk3OF9yZXN1bWUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl93bTg5NzgpOworCisvKgorICogVGhlc2UgcmVnaXN0ZXJzIGNvbnRhaW4gYW4gInVwZGF0ZSIgYml0IC0gYml0IDguIFRoaXMgbWVhbnMsIGZvciBleGFtcGxlLAorICogdGhhdCBvbmUgY2FuIHdyaXRlIG5ldyBEQUMgZGlnaXRhbCB2b2x1bWUgZm9yIGJvdGggY2hhbm5lbHMsIGJ1dCBvbmx5IHdoZW4KKyAqIHRoZSB1cGRhdGUgYml0IGlzIHNldCwgd2lsbCBhbHNvIHRoZSB2b2x1bWUgYmUgdXBkYXRlZCAtIHNpbXVsdGFuZW91c2x5IGZvcgorICogYm90aCBjaGFubmVscy4KKyAqLworc3RhdGljIGNvbnN0IGludCB1cGRhdGVfcmVnW10gPSB7CisJV004OTc4X0xFRlRfREFDX0RJR0lUQUxfVk9MVU1FLAorCVdNODk3OF9SSUdIVF9EQUNfRElHSVRBTF9WT0xVTUUsCisJV004OTc4X0xFRlRfQURDX0RJR0lUQUxfVk9MVU1FLAorCVdNODk3OF9SSUdIVF9BRENfRElHSVRBTF9WT0xVTUUsCisJV004OTc4X0xFRlRfSU5QX1BHQV9DT05UUk9MLAorCVdNODk3OF9SSUdIVF9JTlBfUEdBX0NPTlRST0wsCisJV004OTc4X0xPVVQxX0hQX0NPTlRST0wsCisJV004OTc4X1JPVVQxX0hQX0NPTlRST0wsCisJV004OTc4X0xPVVQyX1NQS19DT05UUk9MLAorCVdNODk3OF9ST1VUMl9TUEtfQ09OVFJPTCwKK307CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHdtODk3OF9yZWdpc3RlcihzdHJ1Y3Qgd204OTc4X3ByaXYgKndtODk3OCkKK3sKKwlpbnQgcmV0LCBpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg5NzgtPmNvZGVjOworCisJaWYgKHdtODk3OF9jb2RlYykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJBbm90aGVyIFdNODk3OCBpcyByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBTZXQgZGVmYXVsdCBzeXN0ZW0gY2xvY2sgdG8gUExMLCBpdCBpcyBtb3JlIHByZWNpc2UsIHRoaXMgaXMgYWxzbyB0aGUKKwkgKiBkZWZhdWx0IGhhcmR3YXJlIHNldHRpbmcKKwkgKi8KKwl3bTg5NzgtPnN5c2NsayA9IFdNODk3OF9QTEw7CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODk3ODsKKwljb2RlYy0+bmFtZSA9ICJXTTg5NzgiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKKwljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg5Nzhfc2V0X2JpYXNfbGV2ZWw7CisJY29kZWMtPmRhaSA9ICZ3bTg5NzhfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBXTTg5NzhfQ0FDSEVSRUdOVU07CisJY29kZWMtPnJlZ19jYWNoZSA9ICZ3bTg5NzgtPnJlZ19jYWNoZTsKKworCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA3LCA5LCBTTkRfU09DX0kyQyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwltZW1jcHkoY29kZWMtPnJlZ19jYWNoZSwgd204OTc4X3JlZywgc2l6ZW9mKHdtODk3OF9yZWcpKTsKKworCS8qCisJICogU2V0IHRoZSB1cGRhdGUgYml0IGluIGFsbCByZWdpc3RlcnMsIHRoYXQgaGF2ZSBvbmUuIFRoaXMgd2F5IGFsbAorCSAqIHdyaXRlcyB0byB0aG9zZSByZWdpc3RlcnMgd2lsbCBhbHNvIGNhdXNlIHRoZSB1cGRhdGUgYml0IHRvIGJlCisJICogd3JpdHRlbi4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh1cGRhdGVfcmVnKTsgaSsrKQorCQkoKHUxNiAqKWNvZGVjLT5yZWdfY2FjaGUpW3VwZGF0ZV9yZWdbaV1dIHw9IDB4MTAwOworCisJLyogUmVzZXQgdGhlIGNvZGVjICovCisJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgV004OTc4X1JFU0VULCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwl3bTg5NzhfZGFpLmRldiA9IGNvZGVjLT5kZXY7CisKKwl3bTg5Nzhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCXdtODk3OF9jb2RlYyA9IGNvZGVjOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZ3bTg5NzhfZGFpKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NvZGVjOworCX0KKworCXJldHVybiAwOworCitlcnJfY29kZWM6CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKK2VycjoKKwlrZnJlZSh3bTg5NzgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgdm9pZCB3bTg5NzhfdW5yZWdpc3RlcihzdHJ1Y3Qgd204OTc4X3ByaXYgKndtODk3OCkKK3sKKwl3bTg5Nzhfc2V0X2JpYXNfbGV2ZWwoJndtODk3OC0+Y29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODk3OF9kYWkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmd204OTc4LT5jb2RlYyk7CisJa2ZyZWUod204OTc4KTsKKwl3bTg5NzhfY29kZWMgPSBOVUxMOworfQorCitzdGF0aWMgX19kZXZpbml0IGludCB3bTg5NzhfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB3bTg5NzhfcHJpdiAqd204OTc4OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKworCXdtODk3OCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg5NzhfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh3bTg5NzggPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYyA9ICZ3bTg5NzgtPmNvZGVjOworCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODk3OCk7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKKworCWNvZGVjLT5kZXYgPSAmaTJjLT5kZXY7CisKKwlyZXR1cm4gd204OTc4X3JlZ2lzdGVyKHdtODk3OCk7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgaW50IHdtODk3OF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdtODk3OF9wcml2ICp3bTg5NzggPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl3bTg5NzhfdW5yZWdpc3Rlcih3bTg5NzgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204OTc4X2kyY19pZFtdID0geworCXsgIndtODk3OCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgd204OTc4X2kyY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTg5NzhfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJXTTg5NzgiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9ICAgIHdtODk3OF9pMmNfcHJvYmUsCisJLnJlbW92ZSA9ICAgX19kZXZleGl0X3Aod204OTc4X2kyY19yZW1vdmUpLAorCS5pZF90YWJsZSA9IHdtODk3OF9pMmNfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bTg5NzhfbW9kaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmd204OTc4X2kyY19kcml2ZXIpOworfQorbW9kdWxlX2luaXQod204OTc4X21vZGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd204OTc4X2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmd204OTc4X2kyY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204OTc4X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgV004OTc4IGNvZGVjIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3OC5oIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmVjODMyCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzguaApAQCAtMCwwICsxLDg2IEBACisvKgorICogd204OTc4LmgJCS0tICBjb2RlYyBkcml2ZXIgZm9yIFdNODk3OAorICoKKyAqIENvcHlyaWdodCAyMDA5IEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX1dNODk3OF9IX18KKyNkZWZpbmUgX19XTTg5NzhfSF9fCisKKy8qCisgKiBSZWdpc3RlciB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgV004OTc4X1JFU0VUCQkJCTB4MDAKKyNkZWZpbmUgV004OTc4X1BPV0VSX01BTkFHRU1FTlRfMQkJMHgwMQorI2RlZmluZSBXTTg5NzhfUE9XRVJfTUFOQUdFTUVOVF8yCQkweDAyCisjZGVmaW5lIFdNODk3OF9QT1dFUl9NQU5BR0VNRU5UXzMJCTB4MDMKKyNkZWZpbmUgV004OTc4X0FVRElPX0lOVEVSRkFDRQkJCTB4MDQKKyNkZWZpbmUgV004OTc4X0NPTVBBTkRJTkdfQ09OVFJPTAkJMHgwNQorI2RlZmluZSBXTTg5NzhfQ0xPQ0tJTkcJCQkJMHgwNgorI2RlZmluZSBXTTg5NzhfQURESVRJT05BTF9DT05UUk9MCQkweDA3CisjZGVmaW5lIFdNODk3OF9HUElPX0NPTlRST0wJCQkweDA4CisjZGVmaW5lIFdNODk3OF9KQUNLX0RFVEVDVF9DT05UUk9MXzEJCTB4MDkKKyNkZWZpbmUgV004OTc4X0RBQ19DT05UUk9MCQkJMHgwQQorI2RlZmluZSBXTTg5NzhfTEVGVF9EQUNfRElHSVRBTF9WT0xVTUUJCTB4MEIKKyNkZWZpbmUgV004OTc4X1JJR0hUX0RBQ19ESUdJVEFMX1ZPTFVNRQkJMHgwQworI2RlZmluZSBXTTg5NzhfSkFDS19ERVRFQ1RfQ09OVFJPTF8yCQkweDBECisjZGVmaW5lIFdNODk3OF9BRENfQ09OVFJPTAkJCTB4MEUKKyNkZWZpbmUgV004OTc4X0xFRlRfQURDX0RJR0lUQUxfVk9MVU1FCQkweDBGCisjZGVmaW5lIFdNODk3OF9SSUdIVF9BRENfRElHSVRBTF9WT0xVTUUJCTB4MTAKKyNkZWZpbmUgV004OTc4X0VRMQkJCQkweDEyCisjZGVmaW5lIFdNODk3OF9FUTIJCQkJMHgxMworI2RlZmluZSBXTTg5NzhfRVEzCQkJCTB4MTQKKyNkZWZpbmUgV004OTc4X0VRNAkJCQkweDE1CisjZGVmaW5lIFdNODk3OF9FUTUJCQkJMHgxNgorI2RlZmluZSBXTTg5NzhfREFDX0xJTUlURVJfMQkJCTB4MTgKKyNkZWZpbmUgV004OTc4X0RBQ19MSU1JVEVSXzIJCQkweDE5CisjZGVmaW5lIFdNODk3OF9OT1RDSF9GSUxURVJfMQkJCTB4MWIKKyNkZWZpbmUgV004OTc4X05PVENIX0ZJTFRFUl8yCQkJMHgxYworI2RlZmluZSBXTTg5NzhfTk9UQ0hfRklMVEVSXzMJCQkweDFkCisjZGVmaW5lIFdNODk3OF9OT1RDSF9GSUxURVJfNAkJCTB4MWUKKyNkZWZpbmUgV004OTc4X0FMQ19DT05UUk9MXzEJCQkweDIwCisjZGVmaW5lIFdNODk3OF9BTENfQ09OVFJPTF8yCQkJMHgyMQorI2RlZmluZSBXTTg5NzhfQUxDX0NPTlRST0xfMwkJCTB4MjIKKyNkZWZpbmUgV004OTc4X05PSVNFX0dBVEUJCQkweDIzCisjZGVmaW5lIFdNODk3OF9QTExfTgkJCQkweDI0CisjZGVmaW5lIFdNODk3OF9QTExfSzEJCQkJMHgyNQorI2RlZmluZSBXTTg5NzhfUExMX0syCQkJCTB4MjYKKyNkZWZpbmUgV004OTc4X1BMTF9LMwkJCQkweDI3CisjZGVmaW5lIFdNODk3OF8zRF9DT05UUk9MCQkJMHgyOQorI2RlZmluZSBXTTg5NzhfQkVFUF9DT05UUk9MCQkJMHgyYgorI2RlZmluZSBXTTg5NzhfSU5QVVRfQ09OVFJPTAkJCTB4MmMKKyNkZWZpbmUgV004OTc4X0xFRlRfSU5QX1BHQV9DT05UUk9MCQkweDJkCisjZGVmaW5lIFdNODk3OF9SSUdIVF9JTlBfUEdBX0NPTlRST0wJCTB4MmUKKyNkZWZpbmUgV004OTc4X0xFRlRfQURDX0JPT1NUX0NPTlRST0wJCTB4MmYKKyNkZWZpbmUgV004OTc4X1JJR0hUX0FEQ19CT09TVF9DT05UUk9MCQkweDMwCisjZGVmaW5lIFdNODk3OF9PVVRQVVRfQ09OVFJPTAkJCTB4MzEKKyNkZWZpbmUgV004OTc4X0xFRlRfTUlYRVJfQ09OVFJPTAkJMHgzMgorI2RlZmluZSBXTTg5NzhfUklHSFRfTUlYRVJfQ09OVFJPTAkJMHgzMworI2RlZmluZSBXTTg5NzhfTE9VVDFfSFBfQ09OVFJPTAkJCTB4MzQKKyNkZWZpbmUgV004OTc4X1JPVVQxX0hQX0NPTlRST0wJCQkweDM1CisjZGVmaW5lIFdNODk3OF9MT1VUMl9TUEtfQ09OVFJPTAkJMHgzNgorI2RlZmluZSBXTTg5NzhfUk9VVDJfU1BLX0NPTlRST0wJCTB4MzcKKyNkZWZpbmUgV004OTc4X09VVDNfTUlYRVJfQ09OVFJPTAkJMHgzOAorI2RlZmluZSBXTTg5NzhfT1VUNF9NSVhFUl9DT05UUk9MCQkweDM5CisKKyNkZWZpbmUgV004OTc4X0NBQ0hFUkVHTlVNCQkJNTgKKworLyogQ2xvY2sgZGl2aWRlciBJZCdzICovCitlbnVtIHdtODk3OF9jbGtfaWQgeworCVdNODk3OF9PUENMS1JBVEUsCisJV004OTc4X0JDTEtESVYsCit9OworCitlbnVtIHdtODk3OF9zeXNjbGtfc3JjIHsKKwlXTTg5NzhfUExMLAorCVdNODk3OF9NQ0xLCit9OworCitleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHdtODk3OF9kYWk7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTc4OworCisjZW5kaWYJLyogX19XTTg5NzhfSF9fICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYwppbmRleCAzNDE0ODFlLi5hNTRkYzc3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMKQEAgLTEzMTksMTAgKzEzMTksNiBAQAogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAotCS8qIHdlIG9ubHkgbmVlZCB0byBzdXNwZW5kIGlmIHdlIGFyZSBhIHZhbGlkIGNhcmQgKi8KLQlpZiAoIWNvZGVjLT5jYXJkKQotCQlyZXR1cm4gMDsKLQogCXdtODk5MF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzM1LDEwICsxMzMxLDYgQEAKIAl1OCBkYXRhWzJdOwogCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwogCi0JLyogd2Ugb25seSBuZWVkIHRvIHJlc3VtZSBpZiB3ZSBhcmUgYSB2YWxpZCBjYXJkICovCi0JaWYgKCFjb2RlYy0+Y2FyZCkKLQkJcmV0dXJuIDA7Ci0KIAkvKiBTeW5jIHJlZ19jYWNoZSB3aXRoIHRoZSBoYXJkd2FyZSAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk5MF9yZWcpOyBpKyspIHsKIAkJaWYgKGkgKyAxID09IFdNODk5MF9SRVNFVCkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5My5jCmluZGV4IDI5ODFhZmEuLmJmMDIyZjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiB3bTg5OTMuYyAtLSBXTTg5OTMgQUxTQSBTb0MgYXVkaW8gZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIHBsYworICogQ29weXJpZ2h0IDIwMDksIDIwMTAgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIHBsYwogICoKICAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CiAgKgpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtMjksNiArMzAsMTYgQEAKICNpbmNsdWRlICJ3bTg5OTMuaCIKICNpbmNsdWRlICJ3bV9odWJzLmgiCiAKKyNkZWZpbmUgV004OTkzX05VTV9TVVBQTElFUyA2CitzdGF0aWMgY29uc3QgY2hhciAqd204OTkzX3N1cHBseV9uYW1lc1tXTTg5OTNfTlVNX1NVUFBMSUVTXSA9IHsKKwkiRENWREQiLAorCSJEQlZERCIsCisJIkFWREQxIiwKKwkiQVZERDIiLAorCSJDUFZERCIsCisJIlNQS1ZERCIsCit9OworCiBzdGF0aWMgdTE2IHdtODk5M19yZWdfZGVmYXVsdHNbV004OTkzX1JFR0lTVEVSX0NPVU5UXSA9IHsKIAkweDg5OTMsICAgICAvKiBSMCAgIC0gU29mdHdhcmUgUmVzZXQgKi8KIAkweDAwMDAsICAgICAvKiBSMSAgIC0gUG93ZXIgTWFuYWdlbWVudCAoMSkgKi8KQEAgLTIxMyw3ICsyMjQsOSBAQAogfTsKIAogc3RydWN0IHdtODk5M19wcml2IHsKKwlzdHJ1Y3Qgd21faHVic19kYXRhIGh1YnNfZGF0YTsKIAl1MTYgcmVnX2NhY2hlW1dNODk5M19SRUdJU1RFUl9DT1VOVF07CisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbV004OTkzX05VTV9TVVBQTElFU107CiAJc3RydWN0IHdtODk5M19wbGF0Zm9ybV9kYXRhIHBkYXRhOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOwogCWludCBtYXN0ZXI7CkBAIC0yMjcsMzYgKzI0MCw5IEBACiAJaW50IGNsYXNzX3dfdXNlcnM7CiAJdW5zaWduZWQgaW50IGZsbF9mcmVmOwogCXVuc2lnbmVkIGludCBmbGxfZm91dDsKKwlpbnQgZmxsX3NyYzsKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgd204OTkzX3JlYWRfaHcoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1OCByZWcpCi17Ci0Jc3RydWN0IGkyY19tc2cgeGZlclsyXTsKLQl1MTYgZGF0YTsKLQlpbnQgcmV0OwotCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSBjb2RlYy0+Y29udHJvbF9kYXRhOwotCi0JLyogV3JpdGUgcmVnaXN0ZXIgKi8KLQl4ZmVyWzBdLmFkZHIgPSBpMmMtPmFkZHI7Ci0JeGZlclswXS5mbGFncyA9IDA7Ci0JeGZlclswXS5sZW4gPSAxOwotCXhmZXJbMF0uYnVmID0gJnJlZzsKLQotCS8qIFJlYWQgZGF0YSAqLwotCXhmZXJbMV0uYWRkciA9IGkyYy0+YWRkcjsKLQl4ZmVyWzFdLmZsYWdzID0gSTJDX01fUkQ7Ci0JeGZlclsxXS5sZW4gPSAyOwotCXhmZXJbMV0uYnVmID0gKHU4ICopJmRhdGE7Ci0KLQlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLT5hZGFwdGVyLCB4ZmVyLCAyKTsKLQlpZiAocmV0ICE9IDIpIHsKLQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgMHgleDogJWRcbiIsIHJlZywgcmV0KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIChkYXRhID4+IDgpIHwgKChkYXRhICYgMHhmZikgPDwgOCk7Ci19Ci0KIHN0YXRpYyBpbnQgd204OTkzX3ZvbGF0aWxlKHVuc2lnbmVkIGludCByZWcpCiB7CiAJc3dpdGNoIChyZWcpIHsKQEAgLTI3MSw0OCArMjU3LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgd204OTkzX3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCQkJCXVuc2lnbmVkIGludCByZWcpCi17Ci0JdTE2ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOwotCi0JQlVHX09OKHJlZyA+IFdNODk5M19NQVhfUkVHSVNURVIpOwotCi0JaWYgKHdtODk5M192b2xhdGlsZShyZWcpKQotCQlyZXR1cm4gd204OTkzX3JlYWRfaHcoY29kZWMsIHJlZyk7Ci0JZWxzZQotCQlyZXR1cm4gcmVnX2NhY2hlW3JlZ107Ci19Ci0KLXN0YXRpYyBpbnQgd204OTkzX3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKLQkJCXVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQl1MTYgKnJlZ19jYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JdTggZGF0YVszXTsKLQlpbnQgcmV0OwotCi0JQlVHX09OKHJlZyA+IFdNODk5M19NQVhfUkVHSVNURVIpOwotCi0JLyogZGF0YSBpcwotCSAqICAgRDE1Li5EOSBXTTg5OTMgcmVnaXN0ZXIgb2Zmc2V0Ci0JICogICBEOC4uLkQwIHJlZ2lzdGVyIGRhdGEKLQkgKi8KLQlkYXRhWzBdID0gcmVnOwotCWRhdGFbMV0gPSB2YWx1ZSA+PiA4OwotCWRhdGFbMl0gPSB2YWx1ZSAmIDB4MDBmZjsKLQotCWlmICghd204OTkzX3ZvbGF0aWxlKHJlZykpCi0JCXJlZ19jYWNoZVtyZWddID0gdmFsdWU7Ci0KLQlyZXQgPSBjb2RlYy0+aHdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgZGF0YSwgMyk7Ci0KLQlpZiAocmV0ID09IDMpCi0JCXJldHVybiAwOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCXJldHVybiAtRUlPOwotfQotCiBzdHJ1Y3QgX2ZsbF9kaXYgewogCXUxNiBmbGxfZnJhdGlvOwogCXUxNiBmbGxfb3V0ZGl2OwpAQCAtNDQxLDkgKzM4NSw5IEBACiAJCXdtODk5My0+ZmxsX2ZyZWYgPSAwOwogCQl3bTg5OTMtPmZsbF9mb3V0ID0gMDsKIAotCQlyZWcxID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xKTsKKwkJcmVnMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzEpOwogCQlyZWcxICY9IH5XTTg5OTNfRkxMX0VOQTsKLQkJd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMSwgcmVnMSk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xLCByZWcxKTsKIAogCQlyZXR1cm4gMDsKIAl9CkBAIC00NTIsNyArMzk2LDcgQEAKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZWc1ID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF81KTsKKwlyZWc1ID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfNSk7CiAJcmVnNSAmPSB+V004OTkzX0ZMTF9DTEtfU1JDX01BU0s7CiAKIAlzd2l0Y2ggKGZsbF9pZCkgewpAQCAtNDc0LDM4ICs0MTgsMzkgQEAKIAogCS8qIEFueSBGTEwgY29uZmlndXJhdGlvbiBjaGFuZ2UgcmVxdWlyZXMgdGhhdCB0aGUgRkxMIGJlCiAJICogZGlzYWJsZWQgZmlyc3QuICovCi0JcmVnMSA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMSk7CisJcmVnMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzEpOwogCXJlZzEgJj0gfldNODk5M19GTExfRU5BOwotCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzEsIHJlZzEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xLCByZWcxKTsKIAogCS8qIEFwcGx5IHRoZSBjb25maWd1cmF0aW9uICovCiAJaWYgKGZsbF9kaXYuaykKIAkJcmVnMSB8PSBXTTg5OTNfRkxMX0ZSQUNfTUFTSzsKIAllbHNlCiAJCXJlZzEgJj0gfldNODk5M19GTExfRlJBQ19NQVNLOwotCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzEsIHJlZzEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8xLCByZWcxKTsKIAotCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzIsCi0JCSAgICAgKGZsbF9kaXYuZmxsX291dGRpdiA8PCBXTTg5OTNfRkxMX09VVERJVl9TSElGVCkgfAotCQkgICAgIChmbGxfZGl2LmZsbF9mcmF0aW8gPDwgV004OTkzX0ZMTF9GUkFUSU9fU0hJRlQpKTsKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8zLCBmbGxfZGl2LmspOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF8yLAorCQkgICAgICAoZmxsX2Rpdi5mbGxfb3V0ZGl2IDw8IFdNODk5M19GTExfT1VURElWX1NISUZUKSB8CisJCSAgICAgIChmbGxfZGl2LmZsbF9mcmF0aW8gPDwgV004OTkzX0ZMTF9GUkFUSU9fU0hJRlQpKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfMywgZmxsX2Rpdi5rKTsKIAotCXJlZzQgPSB3bTg5OTNfcmVhZChjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzQpOworCXJlZzQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF80KTsKIAlyZWc0ICY9IH5XTTg5OTNfRkxMX05fTUFTSzsKIAlyZWc0IHw9IGZsbF9kaXYubiA8PCBXTTg5OTNfRkxMX05fU0hJRlQ7Ci0Jd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfNCwgcmVnNCk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzQsIHJlZzQpOwogCiAJcmVnNSAmPSB+V004OTkzX0ZMTF9DTEtfUkVGX0RJVl9NQVNLOwogCXJlZzUgfD0gZmxsX2Rpdi5mbGxfY2xrX3JlZl9kaXYgPDwgV004OTkzX0ZMTF9DTEtfUkVGX0RJVl9TSElGVDsKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19GTExfQ09OVFJPTF81LCByZWc1KTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfRkxMX0NPTlRST0xfNSwgcmVnNSk7CiAKIAkvKiBFbmFibGUgdGhlIEZMTCAqLwotCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzEsIHJlZzEgfCBXTTg5OTNfRkxMX0VOQSk7CisJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0ZMTF9DT05UUk9MXzEsIHJlZzEgfCBXTTg5OTNfRkxMX0VOQSk7CiAKIAlkZXZfZGJnKGNvZGVjLT5kZXYsICJGTEwgZW5hYmxlZCBhdCAlZEh6LT4lZEh6XG4iLCBGcmVmLCBGb3V0KTsKIAogCXdtODk5My0+ZmxsX2ZyZWYgPSBGcmVmOwogCXdtODk5My0+ZmxsX2ZvdXQgPSBGb3V0OworCXdtODk5My0+ZmxsX3NyYyA9IHNvdXJjZTsKIAogCXJldHVybiAwOwogfQpAQCAtNTIwLDcgKzQ2NSw3IEBACiAJY2FzZSBXTTg5OTNfU1lTQ0xLX01DTEs6CiAJCWRldl9kYmcoY29kZWMtPmRldiwgIlVzaW5nICVkSHogTUNMS1xuIiwgd204OTkzLT5tY2xrX3JhdGUpOwogCi0JCXJlZyA9IHdtODk5M19yZWFkKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMik7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0NMT0NLSU5HXzIpOwogCQlyZWcgJj0gfihXTTg5OTNfTUNMS19ESVYgfCBXTTg5OTNfU1lTQ0xLX1NSQyk7CiAJCWlmICh3bTg5OTMtPm1jbGtfcmF0ZSA+IDEzNTAwMDAwKSB7CiAJCQlyZWcgfD0gV004OTkzX01DTEtfRElWOwpAQCAtNTI5LDE0ICs0NzQsMTQgQEAKIAkJCXJlZyAmPSB+V004OTkzX01DTEtfRElWOwogCQkJd204OTkzLT5zeXNjbGtfcmF0ZSA9IHdtODk5My0+bWNsa19yYXRlOwogCQl9Ci0JCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0NMT0NLSU5HXzIsIHJlZyk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19DTE9DS0lOR18yLCByZWcpOwogCQlicmVhazsKIAogCWNhc2UgV004OTkzX1NZU0NMS19GTEw6CiAJCWRldl9kYmcoY29kZWMtPmRldiwgIlVzaW5nICVkSHogRkxMIGNsb2NrXG4iLAogCQkJd204OTkzLT5mbGxfZm91dCk7CiAKLQkJcmVnID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19DTE9DS0lOR18yKTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMik7CiAJCXJlZyB8PSBXTTg5OTNfU1lTQ0xLX1NSQzsKIAkJaWYgKHdtODk5My0+ZmxsX2ZvdXQgPiAxMzUwMDAwMCkgewogCQkJcmVnIHw9IFdNODk5M19NQ0xLX0RJVjsKQEAgLTU0NSw3ICs0OTAsNyBAQAogCQkJcmVnICY9IH5XTTg5OTNfTUNMS19ESVY7CiAJCQl3bTg5OTMtPnN5c2Nsa19yYXRlID0gd204OTkzLT5mbGxfZm91dDsKIAkJfQotCQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19DTE9DS0lOR18yLCByZWcpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMiwgcmVnKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtOTc4LDEwICs5MjMsMzMgQEAKIAl7ICJSaWdodCBIZWFkcGhvbmUgTXV4IiwgIkRBQyIsICJEQUNSIiB9LAogfTsKIAorc3RhdGljIHZvaWQgd204OTkzX2NhY2hlX3Jlc3RvcmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCWludCBpOworCisJaWYgKCFjb2RlYy0+Y2FjaGVfc3luYykKKwkJcmV0dXJuOworCisJLyogUmVlbmFibGUgaGFyZHdhcmUgd3JpdGVzICovCisJY29kZWMtPmNhY2hlX29ubHkgPSAwOworCisJLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXIgc2V0dGluZ3MgKi8KKwlmb3IgKGkgPSAxOyBpIDwgV004OTkzX01BWF9SRUdJU1RFUjsgaSsrKSB7CisJCWlmIChjYWNoZVtpXSA9PSB3bTg5OTNfcmVnX2RlZmF1bHRzW2ldKQorCQkJY29udGludWU7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIGksIGNhY2hlW2ldKTsKKwl9CisKKwkvKiBXZSdyZSBpbiBzeW5jIGFnYWluICovCisJY29kZWMtPmNhY2hlX3N5bmMgPSAwOworfQorCiBzdGF0aWMgaW50IHdtODk5M19zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogewogCXN0cnVjdCB3bTg5OTNfcHJpdiAqd204OTkzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0OwogCiAJc3dpdGNoIChsZXZlbCkgewogCWNhc2UgU05EX1NPQ19CSUFTX09OOgpAQCAtOTk1LDYgKzk2MywxOCBAQAogCiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKIAkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODk5My0+c3VwcGxpZXMpLAorCQkJCQkJICAgIHdtODk5My0+c3VwcGxpZXMpOworCQkJaWYgKHJldCAhPSAwKQorCQkJCXJldHVybiByZXQ7CisKKwkJCXdtODk5M19jYWNoZV9yZXN0b3JlKGNvZGVjKTsKKworCQkJLyogVHVuZSBEQyBzZXJ2byBjb25maWd1cmF0aW9uICovCisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCAweDQ0LCAzKTsKKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIDB4NTYsIDMpOworCQkJc25kX3NvY193cml0ZShjb2RlYywgMHg0NCwgMCk7CisKIAkJCS8qIEJyaW5nIHVwIFZNSUQgd2l0aCBmYXN0IHNvZnQgc3RhcnQgKi8KIAkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19BTlRJUE9QMiwKIAkJCQkJICAgIFdNODk5M19TVEFSVFVQX0JJQVNfRU5BIHwKQEAgLTEwNDIsNiArMTAyMiwxOCBAQAogCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8xLAogCQkJCSAgICBXTTg5OTNfVk1JRF9TRUxfTUFTSyB8IFdNODk5M19CSUFTX0VOQSwKIAkJCQkgICAgMCk7CisKKyNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCisgICAgICAgICAgICAgICAvKiBQb3N0IDIuNi4zNCB3ZSB3aWxsIGJlIGFibGUgdG8gZ2V0IGEgY2FsbGJhY2sgd2hlbgorICAgICAgICAgICAgICAgICogdGhlIHJlZ3VsYXRvcnMgYXJlIGRpc2FibGVkIHdoaWNoIHdlIGNhbiB1c2UgYnV0CisJCSogZm9yIG5vdyBqdXN0IGFzc3VtZSB0aGF0IHRoZSBwb3dlciB3aWxsIGJlIGN1dCBpZgorCQkqIHRoZSByZWd1bGF0b3IgQVBJIGlzIGluIHVzZS4KKwkJKi8KKwkJY29kZWMtPmNhY2hlX3N5bmMgPSAxOworI2VuZGlmCisKKwkJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODk5My0+c3VwcGxpZXMpLAorCQkJCSAgICAgICB3bTg5OTMtPnN1cHBsaWVzKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xMDc1LDggKzEwNjcsOCBAQAogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CiAJc3RydWN0IHdtODk5M19wcml2ICp3bTg5OTMgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGludCBhaWYxID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfMSk7Ci0JdW5zaWduZWQgaW50IGFpZjQgPSB3bTg5OTNfcmVhZChjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV80KTsKKwl1bnNpZ25lZCBpbnQgYWlmMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV8xKTsKKwl1bnNpZ25lZCBpbnQgYWlmNCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV80KTsKIAogCWFpZjEgJj0gfihXTTg5OTNfQkNMS19ESVIgfCBXTTg5OTNfQUlGX0JDTEtfSU5WIHwKIAkJICBXTTg5OTNfQUlGX0xSQ0xLX0lOViB8IFdNODk5M19BSUZfRk1UX01BU0spOwpAQCAtMTE1OSw4ICsxMTUxLDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzEsIGFpZjEpOwotCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV80LCBhaWY0KTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzEsIGFpZjEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfNCwgYWlmNCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExNzQsMTYgKzExNjYsMTYgQEAKIAlpbnQgcmV0LCBpLCBiZXN0LCBiZXN0X3ZhbCwgY3VyX3ZhbDsKIAl1bnNpZ25lZCBpbnQgY2xvY2tpbmcxLCBjbG9ja2luZzMsIGFpZjEsIGFpZjQ7CiAKLQljbG9ja2luZzEgPSB3bTg5OTNfcmVhZChjb2RlYywgV004OTkzX0NMT0NLSU5HXzEpOworCWNsb2NraW5nMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0NMT0NLSU5HXzEpOwogCWNsb2NraW5nMSAmPSB+V004OTkzX0JDTEtfRElWX01BU0s7CiAKLQljbG9ja2luZzMgPSB3bTg5OTNfcmVhZChjb2RlYywgV004OTkzX0NMT0NLSU5HXzMpOworCWNsb2NraW5nMyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0NMT0NLSU5HXzMpOwogCWNsb2NraW5nMyAmPSB+KFdNODk5M19DTEtfU1lTX1JBVEVfTUFTSyB8IFdNODk5M19TQU1QTEVfUkFURV9NQVNLKTsKIAotCWFpZjEgPSB3bTg5OTNfcmVhZChjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV8xKTsKKwlhaWYxID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzEpOwogCWFpZjEgJj0gfldNODk5M19BSUZfV0xfTUFTSzsKIAotCWFpZjQgPSB3bTg5OTNfcmVhZChjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV80KTsKKwlhaWY0ID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzQpOwogCWFpZjQgJj0gfldNODk5M19MUkNMS19SQVRFX01BU0s7CiAKIAkvKiBXaGF0IEJDTEsgZG8gd2UgbmVlZD8gKi8KQEAgLTEyNzYsMTQgKzEyNjgsMTQgQEAKIAlkZXZfZGJnKGNvZGVjLT5kZXYsICJMUkNMS19SQVRFIGlzICVkXG4iLCB3bTg5OTMtPmJjbGsgLyB3bTg5OTMtPmZzKTsKIAlhaWY0IHw9IHdtODk5My0+YmNsayAvIHdtODk5My0+ZnM7CiAKLQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19DTE9DS0lOR18xLCBjbG9ja2luZzEpOwotCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0NMT0NLSU5HXzMsIGNsb2NraW5nMyk7Ci0Jd204OTkzX3dyaXRlKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzEsIGFpZjEpOwotCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0FVRElPX0lOVEVSRkFDRV80LCBhaWY0KTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMSwgY2xvY2tpbmcxKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfQ0xPQ0tJTkdfMywgY2xvY2tpbmczKTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfQVVESU9fSU5URVJGQUNFXzEsIGFpZjEpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19BVURJT19JTlRFUkZBQ0VfNCwgYWlmNCk7CiAKIAkvKiBSZVR1bmUgTW9iaWxlPyAqLwogCWlmICh3bTg5OTMtPnBkYXRhLm51bV9yZXR1bmVfY29uZmlncykgewotCQl1MTYgZXExID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19FUTEpOworCQl1MTYgZXExID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfRVExKTsKIAkJc3RydWN0IHdtODk5M19yZXR1bmVfbW9iaWxlX3NldHRpbmcgKnM7CiAKIAkJYmVzdCA9IDA7CkBAIC0xMzA2LDcgKzEyOTgsNyBAQAogCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfRVExLCBXTTg5OTNfRVFfRU5BLCAwKTsKIAogCQlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRShzLT5jb25maWcpOyBpKyspCi0JCQl3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19FUTEgKyBpLCBzLT5jb25maWdbaV0pOworCQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0VRMSArIGksIHMtPmNvbmZpZ1tpXSk7CiAKIAkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0VRMSwgV004OTkzX0VRX0VOQSwgZXExKTsKIAl9CkBAIC0xMzE5LDE0ICsxMzExLDE0IEBACiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCi0JcmVnID0gd204OTkzX3JlYWQoY29kZWMsIFdNODk5M19EQUNfQ1RSTCk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfREFDX0NUUkwpOwogCiAJaWYgKG11dGUpCiAJCXJlZyB8PSBXTTg5OTNfREFDX01VVEU7CiAJZWxzZQogCQlyZWcgJj0gfldNODk5M19EQUNfTVVURTsKIAotCXdtODk5M193cml0ZShjb2RlYywgV004OTkzX0RBQ19DVFJMLCByZWcpOworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19EQUNfQ1RSTCwgcmVnKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQ4MCw5ICsxNDcyLDY2IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgd204OTkzX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTkzX3ByaXYgKndtODk5MyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGZsbF9mb3V0ID0gd204OTkzLT5mbGxfZm91dDsKKwlpbnQgZmxsX2ZyZWYgID0gd204OTkzLT5mbGxfZnJlZjsKKwlpbnQgcmV0OworCisJLyogU3RvcCB0aGUgRkxMIGluIGFuIG9yZGVybHkgZmFzaGlvbiAqLworCXJldCA9IHdtODk5M19zZXRfZmxsKGNvZGVjLT5kYWksIDAsIDAsIDAsIDApOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gc3RvcCBGTExcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXdtODk5My0+ZmxsX2ZvdXQgPSBmbGxfZm91dDsKKwl3bTg5OTMtPmZsbF9mcmVmID0gZmxsX2ZyZWY7CisKKwl3bTg5OTNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTkzX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTkzX3ByaXYgKndtODk5MyA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKKworCXdtODk5M19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJLyogUmVzdGFydCB0aGUgRkxMPyAqLworCWlmICh3bTg5OTMtPmZsbF9mb3V0KSB7CisJCWludCBmbGxfZm91dCA9IHdtODk5My0+ZmxsX2ZvdXQ7CisJCWludCBmbGxfZnJlZiAgPSB3bTg5OTMtPmZsbF9mcmVmOworCisJCXdtODk5My0+ZmxsX2ZyZWYgPSAwOworCQl3bTg5OTMtPmZsbF9mb3V0ID0gMDsKKworCQlyZXQgPSB3bTg5OTNfc2V0X2ZsbChjb2RlYy0+ZGFpLCAwLCB3bTg5OTMtPmZsbF9zcmMsCisJCQkJICAgICBmbGxfZnJlZiwgZmxsX2ZvdXQpOworCQlpZiAocmV0ICE9IDApCisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVzdGFydCBGTExcbiIpOworCX0KKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgd204OTkzX3N1c3BlbmQgTlVMTAorI2RlZmluZSB3bTg5OTNfcmVzdW1lIE5VTEwKKyNlbmRpZgorCiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg5OTMgPSB7CiAJLnByb2JlID0gCXdtODk5M19wcm9iZSwKIAkucmVtb3ZlID0gCXdtODk5M19yZW1vdmUsCisJLnN1c3BlbmQgPQl3bTg5OTNfc3VzcGVuZCwKKwkucmVzdW1lID0Jd204OTkzX3Jlc3VtZSwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODk5Myk7CiAKQEAgLTE0OTMsNiArMTU0Miw3IEBACiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCXVuc2lnbmVkIGludCB2YWw7CiAJaW50IHJldDsKKwlpbnQgaTsKIAogCWlmICh3bTg5OTNfY29kZWMpIHsKIAkJZGV2X2VycigmaTJjLT5kZXYsICJBIFdNODk5MyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIpOwpAQCAtMTUxMyw5ICsxNTYzLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOwogCiAJY29kZWMtPm5hbWUgPSAiV004OTkzIjsKLQljb2RlYy0+cmVhZCA9IHdtODk5M19yZWFkOwotCWNvZGVjLT53cml0ZSA9IHdtODk5M193cml0ZTsKLQljb2RlYy0+aHdfd3JpdGUgPSAoaHdfd3JpdGVfdClpMmNfbWFzdGVyX3NlbmQ7CisJY29kZWMtPnZvbGF0aWxlX3JlZ2lzdGVyID0gd204OTkzX3ZvbGF0aWxlOwogCWNvZGVjLT5yZWdfY2FjaGUgPSB3bTg5OTMtPnJlZ19jYWNoZTsKIAljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHdtODk5My0+cmVnX2NhY2hlKTsKIAljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7CkBAIC0xNTI0LDI1ICsxNTcyLDUzIEBACiAJY29kZWMtPm51bV9kYWkgPSAxOwogCWNvZGVjLT5wcml2YXRlX2RhdGEgPSB3bTg5OTM7CiAKKwl3bTg5OTMtPmh1YnNfZGF0YS5ocF9zdGFydHVwX21vZGUgPSAxOworCXdtODk5My0+aHVic19kYXRhLmRjc19jb2RlcyA9IC0yOworCiAJbWVtY3B5KHdtODk5My0+cmVnX2NhY2hlLCB3bTg5OTNfcmVnX2RlZmF1bHRzLAogCSAgICAgICBzaXplb2Yod204OTkzLT5yZWdfY2FjaGUpKTsKIAorCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA4LCAxNiwgU05EX1NPQ19JMkMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKwogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODk5Myk7CiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKIAl3bTg5OTNfY29kZWMgPSBjb2RlYzsKIAogCWNvZGVjLT5kZXYgPSAmaTJjLT5kZXY7CiAKLQl2YWwgPSB3bTg5OTNfcmVhZF9odyhjb2RlYywgV004OTkzX1NPRlRXQVJFX1JFU0VUKTsKLQlpZiAodmFsICE9IHdtODk5M19yZWdfZGVmYXVsdHNbV004OTkzX1NPRlRXQVJFX1JFU0VUXSkgewotCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJJbnZhbGlkIElEIHJlZ2lzdGVyIHZhbHVlICV4XG4iLCB2YWwpOwotCQlyZXQgPSAtRUlOVkFMOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk5My0+c3VwcGxpZXMpOyBpKyspCisJCXdtODk5My0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gd204OTkzX3N1cHBseV9uYW1lc1tpXTsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2dldChjb2RlYy0+ZGV2LCBBUlJBWV9TSVpFKHdtODk5My0+c3VwcGxpZXMpLAorCQkJCSB3bTg5OTMtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3Qgc3VwcGxpZXM6ICVkXG4iLCByZXQpOwogCQlnb3RvIGVycjsKIAl9CiAKLQlyZXQgPSB3bTg5OTNfd3JpdGUoY29kZWMsIFdNODk5M19TT0ZUV0FSRV9SRVNFVCwgMHhmZmZmKTsKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRSh3bTg5OTMtPnN1cHBsaWVzKSwKKwkJCQkgICAgd204OTkzLT5zdXBwbGllcyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBlbmFibGUgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9nZXQ7CisJfQorCisJdmFsID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfU09GVFdBUkVfUkVTRVQpOworCWlmICh2YWwgIT0gd204OTkzX3JlZ19kZWZhdWx0c1tXTTg5OTNfU09GVFdBUkVfUkVTRVRdKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkludmFsaWQgSUQgcmVnaXN0ZXIgdmFsdWUgJXhcbiIsIHZhbCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfU09GVFdBUkVfUkVTRVQsIDB4ZmZmZik7CiAJaWYgKHJldCAhPSAwKQotCQlnb3RvIGVycjsKKwkJZ290byBlcnJfZW5hYmxlOworCisJY29kZWMtPmNhY2hlX29ubHkgPSAxOwogCiAJLyogQnkgZGVmYXVsdCB3ZSdyZSB1c2luZyB0aGUgb3V0cHV0IG1peGVycyAqLwogCXdtODk5My0+Y2xhc3Nfd191c2VycyA9IDI7CkBAIC0xNTcyLDcgKzE2NDgsNyBAQAogCQkJICAgICAKIAlyZXQgPSB3bTg5OTNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAlpZiAocmV0ICE9IDApCi0JCWdvdG8gZXJyOworCQlnb3RvIGVycl9lbmFibGU7CiAKIAl3bTg5OTNfZGFpLmRldiA9IGNvZGVjLT5kZXY7CiAKQEAgLTE1ODYsNiArMTY2MiwxMCBAQAogCiBlcnJfYmlhczoKIAl3bTg5OTNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworZXJyX2VuYWJsZToKKwlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUod204OTkzLT5zdXBwbGllcyksIHdtODk5My0+c3VwcGxpZXMpOworZXJyX2dldDoKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204OTkzLT5zdXBwbGllcyksIHdtODk5My0+c3VwcGxpZXMpOwogZXJyOgogCXdtODk5M19jb2RlYyA9IE5VTEw7CiAJa2ZyZWUod204OTkzKTsKQEAgLTE2MDAsNiArMTY4MCw3IEBACiAJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmd204OTkzX2RhaSk7CiAKIAl3bTg5OTNfc2V0X2JpYXNfbGV2ZWwoJndtODk5My0+Y29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRSh3bTg5OTMtPnN1cHBsaWVzKSwgd204OTkzLT5zdXBwbGllcyk7CiAJa2ZyZWUod204OTkzKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlmMzc3MQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMKQEAgLTAsMCArMSwzODY3IEBACisvKgorICogd204OTk0LmMgIC0tICBXTTg5OTQgQUxTQSBTb0MgQXVkaW8gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIHBsYworICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgorCisjaW5jbHVkZSA8bGludXgvbWZkL3dtODk5NC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODk5NC9yZWdpc3RlcnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204OTk0L3BkYXRhLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODk5NC9ncGlvLmg+CisKKyNpbmNsdWRlICJ3bTg5OTQuaCIKKyNpbmNsdWRlICJ3bV9odWJzLmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqd204OTk0X2NvZGVjOworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTk0OworCitzdHJ1Y3QgZmxsX2NvbmZpZyB7CisJaW50IHNyYzsKKwlpbnQgaW47CisJaW50IG91dDsKK307CisKKyNkZWZpbmUgV004OTk0X05VTV9EUkMgMworI2RlZmluZSBXTTg5OTRfTlVNX0VRICAzCisKK3N0YXRpYyBpbnQgd204OTk0X2RyY19iYXNlW10gPSB7CisJV004OTk0X0FJRjFfRFJDMV8xLAorCVdNODk5NF9BSUYxX0RSQzJfMSwKKwlXTTg5OTRfQUlGMl9EUkNfMSwKK307CisKK3N0YXRpYyBpbnQgd204OTk0X3JldHVuZV9tb2JpbGVfYmFzZVtdID0geworCVdNODk5NF9BSUYxX0RBQzFfRVFfR0FJTlNfMSwKKwlXTTg5OTRfQUlGMV9EQUMyX0VRX0dBSU5TXzEsCisJV004OTk0X0FJRjJfRVFfR0FJTlNfMSwKK307CisKKyNkZWZpbmUgV004OTk0X1JFR19DQUNIRV9TSVpFICAweDYyMQorCisvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCB3bTg5OTRfcHJpdiB7CisJc3RydWN0IHdtX2h1YnNfZGF0YSBodWJzOworCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworCXUxNiByZWdfY2FjaGVbV004OTk0X1JFR19DQUNIRV9TSVpFICsgMV07CisJaW50IHN5c2Nsa1syXTsKKwlpbnQgc3lzY2xrX3JhdGVbMl07CisJaW50IG1jbGtbMl07CisJaW50IGFpZmNsa1syXTsKKwlzdHJ1Y3QgZmxsX2NvbmZpZyBmbGxbMl0sIGZsbF9zdXNwZW5kWzJdOworCisJaW50IGRhY19yYXRlc1syXTsKKwlpbnQgbHJjbGtfc2hhcmVkWzJdOworCisJLyogUGxhdGZvcm0gZGVwZW5kYW50IERSQyBjb25maWd1cmF0aW9uICovCisJY29uc3QgY2hhciAqKmRyY190ZXh0czsKKwlpbnQgZHJjX2NmZ1tXTTg5OTRfTlVNX0RSQ107CisJc3RydWN0IHNvY19lbnVtIGRyY19lbnVtOworCisJLyogUGxhdGZvcm0gZGVwZW5kYW50IFJlVHVuZSBtb2JpbGUgY29uZmlndXJhdGlvbiAqLworCWludCBudW1fcmV0dW5lX21vYmlsZV90ZXh0czsKKwljb25zdCBjaGFyICoqcmV0dW5lX21vYmlsZV90ZXh0czsKKwlpbnQgcmV0dW5lX21vYmlsZV9jZmdbV004OTk0X05VTV9FUV07CisJc3RydWN0IHNvY19lbnVtIHJldHVuZV9tb2JpbGVfZW51bTsKKworCXN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhOworfTsKKworc3RhdGljIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgIHJlYWRhYmxlOyAgIC8qIE1hc2sgb2YgcmVhZGFibGUgYml0cyAqLworCXVuc2lnbmVkIHNob3J0ICB3cml0YWJsZTsgICAvKiBNYXNrIG9mIHdyaXRhYmxlIGJpdHMgKi8KKwl1bnNpZ25lZCBzaG9ydCAgdm9sOyAgICAgICAgLyogTWFzayBvZiB2b2xhdGlsZSBiaXRzICovCit9IGFjY2Vzc19tYXNrc1tdID0geworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMCAgICAgLSBTb2Z0d2FyZSBSZXNldCAqLworCXsgMHgzQjM3LCAweDNCMzcsIDB4MDAwMCB9LCAvKiBSMSAgICAgLSBQb3dlciBNYW5hZ2VtZW50ICgxKSAqLworCXsgMHg2QkYwLCAweDZCRjAsIDB4MDAwMCB9LCAvKiBSMiAgICAgLSBQb3dlciBNYW5hZ2VtZW50ICgyKSAqLworCXsgMHgzRkYwLCAweDNGRjAsIDB4MDAwMCB9LCAvKiBSMyAgICAgLSBQb3dlciBNYW5hZ2VtZW50ICgzKSAqLworCXsgMHgzRjNGLCAweDNGM0YsIDB4MDAwMCB9LCAvKiBSNCAgICAgLSBQb3dlciBNYW5hZ2VtZW50ICg0KSAqLworCXsgMHgzRjBGLCAweDNGMEYsIDB4MDAwMCB9LCAvKiBSNSAgICAgLSBQb3dlciBNYW5hZ2VtZW50ICg1KSAqLworCXsgMHgwMDNGLCAweDAwM0YsIDB4MDAwMCB9LCAvKiBSNiAgICAgLSBQb3dlciBNYW5hZ2VtZW50ICg2KSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIwICovCisJeyAweDAxQzAsIDB4MDFDMCwgMHgwMDAwIH0sIC8qIFIyMSAgICAtIElucHV0IE1peGVyICgxKSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzICovCisJeyAweDAwREYsIDB4MDFERiwgMHgwMDAwIH0sIC8qIFIyNCAgICAtIExlZnQgTGluZSBJbnB1dCAxJjIgVm9sdW1lICovCisJeyAweDAwREYsIDB4MDFERiwgMHgwMDAwIH0sIC8qIFIyNSAgICAtIExlZnQgTGluZSBJbnB1dCAzJjQgVm9sdW1lICovCisJeyAweDAwREYsIDB4MDFERiwgMHgwMDAwIH0sIC8qIFIyNiAgICAtIFJpZ2h0IExpbmUgSW5wdXQgMSYyIFZvbHVtZSAqLworCXsgMHgwMERGLCAweDAxREYsIDB4MDAwMCB9LCAvKiBSMjcgICAgLSBSaWdodCBMaW5lIElucHV0IDMmNCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjI4ICAgIC0gTGVmdCBPdXRwdXQgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIyOSAgICAtIFJpZ2h0IE91dHB1dCBWb2x1bWUgKi8KKwl7IDB4MDA3NywgMHgwMDc3LCAweDAwMDAgfSwgLyogUjMwICAgIC0gTGluZSBPdXRwdXRzIFZvbHVtZSAqLworCXsgMHgwMDMwLCAweDAwMzAsIDB4MDAwMCB9LCAvKiBSMzEgICAgLSBIUE9VVDIgVm9sdW1lICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIzMiAgICAtIExlZnQgT1BHQSBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjMzICAgIC0gUmlnaHQgT1BHQSBWb2x1bWUgKi8KKwl7IDB4MDA3RiwgMHgwMDdGLCAweDAwMDAgfSwgLyogUjM0ICAgIC0gU1BLTUlYTCBBdHRlbnVhdGlvbiAqLworCXsgMHgwMTdGLCAweDAxN0YsIDB4MDAwMCB9LCAvKiBSMzUgICAgLSBTUEtNSVhSIEF0dGVudWF0aW9uICovCisJeyAweDAwM0YsIDB4MDAzRiwgMHgwMDAwIH0sIC8qIFIzNiAgICAtIFNQS09VVCBNaXhlcnMgKi8KKwl7IDB4MDAzRiwgMHgwMDNGLCAweDAwMDAgfSwgLyogUjM3ICAgIC0gQ2xhc3NEICovCisJeyAweDAwRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFIzOCAgICAtIFNwZWFrZXIgVm9sdW1lIExlZnQgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjM5ICAgIC0gU3BlYWtlciBWb2x1bWUgUmlnaHQgKi8KKwl7IDB4MDBGRiwgMHgwMEZGLCAweDAwMDAgfSwgLyogUjQwICAgIC0gSW5wdXQgTWl4ZXIgKDIpICovCisJeyAweDAxQjcsIDB4MDFCNywgMHgwMDAwIH0sIC8qIFI0MSAgICAtIElucHV0IE1peGVyICgzKSAqLworCXsgMHgwMUI3LCAweDAxQjcsIDB4MDAwMCB9LCAvKiBSNDIgICAgLSBJbnB1dCBNaXhlciAoNCkgKi8KKwl7IDB4MDFDNywgMHgwMUM3LCAweDAwMDAgfSwgLyogUjQzICAgIC0gSW5wdXQgTWl4ZXIgKDUpICovCisJeyAweDAxQzcsIDB4MDFDNywgMHgwMDAwIH0sIC8qIFI0NCAgICAtIElucHV0IE1peGVyICg2KSAqLworCXsgMHgwMUZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSNDUgICAgLSBPdXRwdXQgTWl4ZXIgKDEpICovCisJeyAweDAxRkYsIDB4MDFGRiwgMHgwMDAwIH0sIC8qIFI0NiAgICAtIE91dHB1dCBNaXhlciAoMikgKi8KKwl7IDB4MEZGRiwgMHgwRkZGLCAweDAwMDAgfSwgLyogUjQ3ICAgIC0gT3V0cHV0IE1peGVyICgzKSAqLworCXsgMHgwRkZGLCAweDBGRkYsIDB4MDAwMCB9LCAvKiBSNDggICAgLSBPdXRwdXQgTWl4ZXIgKDQpICovCisJeyAweDBGRkYsIDB4MEZGRiwgMHgwMDAwIH0sIC8qIFI0OSAgICAtIE91dHB1dCBNaXhlciAoNSkgKi8KKwl7IDB4MEZGRiwgMHgwRkZGLCAweDAwMDAgfSwgLyogUjUwICAgIC0gT3V0cHV0IE1peGVyICg2KSAqLworCXsgMHgwMDM4LCAweDAwMzgsIDB4MDAwMCB9LCAvKiBSNTEgICAgLSBIUE9VVDIgTWl4ZXIgKi8KKwl7IDB4MDA3NywgMHgwMDc3LCAweDAwMDAgfSwgLyogUjUyICAgIC0gTGluZSBNaXhlciAoMSkgKi8KKwl7IDB4MDA3NywgMHgwMDc3LCAweDAwMDAgfSwgLyogUjUzICAgIC0gTGluZSBNaXhlciAoMikgKi8KKwl7IDB4MDNGRiwgMHgwM0ZGLCAweDAwMDAgfSwgLyogUjU0ICAgIC0gU3BlYWtlciBNaXhlciAqLworCXsgMHgwMEMxLCAweDAwQzEsIDB4MDAwMCB9LCAvKiBSNTUgICAgLSBBZGRpdGlvbmFsIENvbnRyb2wgKi8KKwl7IDB4MDBGMCwgMHgwMEYwLCAweDAwMDAgfSwgLyogUjU2ICAgIC0gQW50aVBPUCAoMSkgKi8KKwl7IDB4MDFFRiwgMHgwMUVGLCAweDAwMDAgfSwgLyogUjU3ICAgIC0gQW50aVBPUCAoMikgKi8KKwl7IDB4MDBGRiwgMHgwMEZGLCAweDAwMDAgfSwgLyogUjU4ICAgIC0gTUlDQklBUyAqLworCXsgMHgwMDBGLCAweDAwMEYsIDB4MDAwMCB9LCAvKiBSNTkgICAgLSBMRE8gMSAqLworCXsgMHgwMDA3LCAweDAwMDcsIDB4MDAwMCB9LCAvKiBSNjAgICAgLSBMRE8gMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NSAqLworCXsgMHg4MDAwLCAweDgwMDAsIDB4MDAwMCB9LCAvKiBSNzYgICAgLSBDaGFyZ2UgUHVtcCAoMSkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwICovCisJeyAweDAzMDEsIDB4MDMwMSwgMHgwMDAwIH0sIC8qIFI4MSAgICAtIENsYXNzIFcgKDEpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODMgKi8KKwl7IDB4MzMzRiwgMHgzMzNGLCAweDAwMDAgfSwgLyogUjg0ICAgIC0gREMgU2Vydm8gKDEpICovCisJeyAweDBGRUYsIDB4MEZFRiwgMHgwMDAwIH0sIC8qIFI4NSAgICAtIERDIFNlcnZvICgyKSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODYgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjg3ICAgIC0gREMgU2Vydm8gKDQpICovCisJeyAweDAzMzMsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4OCAgICAtIERDIFNlcnZvIFJlYWRiYWNrICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NSAqLworCXsgMHgwMEVFLCAweDAwRUUsIDB4MDAwMCB9LCAvKiBSOTYgICAgLSBBbmFsb2d1ZSBIUCAoMSkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTY3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTcwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE3MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTczICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE3NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTc2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTc5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTg1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE4NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTg4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTkxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTk0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIwOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIxMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjEyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIxNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjE1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIxNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjIxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjI0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjI3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjMwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjM2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjM5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI0MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI0NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQ1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI0NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQ4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjUxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI1MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjU0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTUgKi8KKwl7IDB4MDAwRiwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI1NiAgIC0gQ2hpcCBSZXZpc2lvbiAqLworCXsgMHgwMDc0LCAweDAwNzQsIDB4MDAwMCB9LCAvKiBSMjU3ICAgLSBDb250cm9sIEludGVyZmFjZSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjU4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI2MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjY3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI2OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjcwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNzEgKi8KKwl7IDB4ODA3RiwgMHg4MzdGLCAweDAwMDAgfSwgLyogUjI3MiAgIC0gV3JpdGUgU2VxdWVuY2VyIEN0cmwgKDEpICovCisJeyAweDAxN0YsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNzMgICAtIFdyaXRlIFNlcXVlbmNlciBDdHJsICgyKSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjgwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjg5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyOTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyOTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjk1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyOTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyOTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzA3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMwOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMxOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMyNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjMzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzQzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzUyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzU1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM1NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzU4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzY3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM2OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzcwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzczICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzc2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzNzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzc5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzg1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM4NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzg4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzkxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzOTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzk0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzOTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMzk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIzOTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjM5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQwOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDEyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDE1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQxNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDIxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDI0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDI3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQyOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDMwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDM2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0MzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQzOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDM5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDQyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDQ1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ0NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDQ4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDUxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDU0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDU3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ1OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDYwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDY5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDcyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDc1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0ODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0ODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDg3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0ODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDkwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0OTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0OTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDk2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0OTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNDk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUxMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTExICovCisJeyAweDAwMUYsIDB4MDAxRiwgMHgwMDAwIH0sIC8qIFI1MTIgICAtIEFJRjEgQ2xvY2tpbmcgKDEpICovCisJeyAweDAwM0YsIDB4MDAzRiwgMHgwMDAwIH0sIC8qIFI1MTMgICAtIEFJRjEgQ2xvY2tpbmcgKDIpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUxNSAqLworCXsgMHgwMDFGLCAweDAwMUYsIDB4MDAwMCB9LCAvKiBSNTE2ICAgLSBBSUYyIENsb2NraW5nICgxKSAqLworCXsgMHgwMDNGLCAweDAwM0YsIDB4MDAwMCB9LCAvKiBSNTE3ICAgLSBBSUYyIENsb2NraW5nICgyKSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MTkgKi8KKwl7IDB4MDAxRiwgMHgwMDFGLCAweDAwMDAgfSwgLyogUjUyMCAgIC0gQ2xvY2tpbmcgKDEpICovCisJeyAweDA3NzcsIDB4MDc3NywgMHgwMDAwIH0sIC8qIFI1MjEgICAtIENsb2NraW5nICgyKSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUyNyAqLworCXsgMHgwMEZGLCAweDAwRkYsIDB4MDAwMCB9LCAvKiBSNTI4ICAgLSBBSUYxIFJhdGUgKi8KKwl7IDB4MDBGRiwgMHgwMEZGLCAweDAwMDAgfSwgLyogUjUyOSAgIC0gQUlGMiBSYXRlICovCisJeyAweDAwMEYsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzAgICAtIFJhdGUgU3RhdHVzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTM2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1MzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUzOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTM5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU0MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTQyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NDMgKi8KKwl7IDB4MDAwNywgMHgwMDA3LCAweDAwMDAgfSwgLyogUjU0NCAgIC0gRkxMMSBDb250cm9sICgxKSAqLworCXsgMHgzRjc3LCAweDNGNzcsIDB4MDAwMCB9LCAvKiBSNTQ1ICAgLSBGTEwxIENvbnRyb2wgKDIpICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFI1NDYgICAtIEZMTDEgQ29udHJvbCAoMykgKi8KKwl7IDB4N0ZFRiwgMHg3RkVGLCAweDAwMDAgfSwgLyogUjU0NyAgIC0gRkxMMSBDb250cm9sICg0KSAqLworCXsgMHgxRkRCLCAweDFGREIsIDB4MDAwMCB9LCAvKiBSNTQ4ICAgLSBGTEwxIENvbnRyb2wgKDUpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTUxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU1MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTU0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU1NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTU3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU1OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTYwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTY5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU3MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTcyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTc1ICovCisJeyAweDAwMDcsIDB4MDAwNywgMHgwMDAwIH0sIC8qIFI1NzYgICAtIEZMTDIgQ29udHJvbCAoMSkgKi8KKwl7IDB4M0Y3NywgMHgzRjc3LCAweDAwMDAgfSwgLyogUjU3NyAgIC0gRkxMMiBDb250cm9sICgyKSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSNTc4ICAgLSBGTEwyIENvbnRyb2wgKDMpICovCisJeyAweDdGRUYsIDB4N0ZFRiwgMHgwMDAwIH0sIC8qIFI1NzkgICAtIEZMTDIgQ29udHJvbCAoNCkgKi8KKwl7IDB4MUZEQiwgMHgxRkRCLCAweDAwMDAgfSwgLyogUjU4MCAgIC0gRkxMMiBDb250cm9sICg1KSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTg3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1ODggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTkwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTk2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1OTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYxMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjExICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYxMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYxNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYxOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY0MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjQ0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjUzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY1NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjU2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjcxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2NzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjgwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2ODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjg5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjk1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2OTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcwMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzA3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcwOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcxMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcxNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcxOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcyNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjczMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjczMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjczNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3MzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjczOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzQzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc0NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzUyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzU1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc1NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzU4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc2MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzY3ICovCisJeyAweEUxRjgsIDB4RTFGOCwgMHgwMDAwIH0sIC8qIFI3NjggICAtIEFJRjEgQ29udHJvbCAoMSkgKi8KKwl7IDB4Q0QxRiwgMHhDRDFGLCAweDAwMDAgfSwgLyogUjc2OSAgIC0gQUlGMSBDb250cm9sICgyKSAqLworCXsgMHhGMDAwLCAweEYwMDAsIDB4MDAwMCB9LCAvKiBSNzcwICAgLSBBSUYxIE1hc3Rlci9TbGF2ZSAqLworCXsgMHgwMUYwLCAweDAxRjAsIDB4MDAwMCB9LCAvKiBSNzcxICAgLSBBSUYxIEJDTEsgKi8KKwl7IDB4MEZGRiwgMHgwRkZGLCAweDAwMDAgfSwgLyogUjc3MiAgIC0gQUlGMUFEQyBMUkNMSyAqLworCXsgMHgwRkZGLCAweDBGRkYsIDB4MDAwMCB9LCAvKiBSNzczICAgLSBBSUYxREFDIExSQ0xLICovCisJeyAweDAwMDMsIDB4MDAwMywgMHgwMDAwIH0sIC8qIFI3NzQgICAtIEFJRjFEQUMgRGF0YSAqLworCXsgMHgwMDAzLCAweDAwMDMsIDB4MDAwMCB9LCAvKiBSNzc1ICAgLSBBSUYxQURDIERhdGEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzgwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3ODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzgzICovCisJeyAweEYxRjgsIDB4RjFGOCwgMHgwMDAwIH0sIC8qIFI3ODQgICAtIEFJRjIgQ29udHJvbCAoMSkgKi8KKwl7IDB4RkQxRiwgMHhGRDFGLCAweDAwMDAgfSwgLyogUjc4NSAgIC0gQUlGMiBDb250cm9sICgyKSAqLworCXsgMHhGMDAwLCAweEYwMDAsIDB4MDAwMCB9LCAvKiBSNzg2ICAgLSBBSUYyIE1hc3Rlci9TbGF2ZSAqLworCXsgMHgwMUYwLCAweDAxRjAsIDB4MDAwMCB9LCAvKiBSNzg3ICAgLSBBSUYyIEJDTEsgKi8KKwl7IDB4MEZGRiwgMHgwRkZGLCAweDAwMDAgfSwgLyogUjc4OCAgIC0gQUlGMkFEQyBMUkNMSyAqLworCXsgMHgwRkZGLCAweDBGRkYsIDB4MDAwMCB9LCAvKiBSNzg5ICAgLSBBSUYyREFDIExSQ0xLICovCisJeyAweDAwMDMsIDB4MDAwMywgMHgwMDAwIH0sIC8qIFI3OTAgICAtIEFJRjJEQUMgRGF0YSAqLworCXsgMHgwMDAzLCAweDAwMDMsIDB4MDAwMCB9LCAvKiBSNzkxICAgLSBBSUYyQURDIERhdGEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3OTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzk2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3OTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjc5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODExICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgxOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4MzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODQ0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODUzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODU2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODcxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODgwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4ODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4ODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4ODcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODg5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4OTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4OTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODk1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4OTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4OTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTA3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkwOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MTEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkxOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkyNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjkzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTQzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTUyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTU1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk1NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTU4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTY3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk2OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTcwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTczICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTc2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTc5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5ODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5ODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTg1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5ODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk4NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTg4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5ODkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTkxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5OTIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTk0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5OTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5OTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjk5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAwMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAwOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAwOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAxMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAxMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAxMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAxMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAxNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAxNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAxNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAxNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAxOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAxOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAyMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAyMyAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMTAyNCAgLSBBSUYxIEFEQzEgTGVmdCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjEwMjUgIC0gQUlGMSBBREMxIFJpZ2h0IFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMTAyNiAgLSBBSUYxIERBQzEgTGVmdCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjEwMjcgIC0gQUlGMSBEQUMxIFJpZ2h0IFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMTAyOCAgLSBBSUYxIEFEQzIgTGVmdCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjEwMjkgIC0gQUlGMSBBREMyIFJpZ2h0IFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMTAzMCAgLSBBSUYxIERBQzIgTGVmdCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjEwMzEgIC0gQUlGMSBEQUMyIFJpZ2h0IFZvbHVtZSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAzOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAzOSAqLworCXsgMHhGODAwLCAweEY4MDAsIDB4MDAwMCB9LCAvKiBSMTA0MCAgLSBBSUYxIEFEQzEgRmlsdGVycyAqLworCXsgMHg3ODAwLCAweDc4MDAsIDB4MDAwMCB9LCAvKiBSMTA0MSAgLSBBSUYxIEFEQzIgRmlsdGVycyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA0MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA0NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA0NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA0NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA1MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA1NSAqLworCXsgMHgwMkI2LCAweDAyQjYsIDB4MDAwMCB9LCAvKiBSMTA1NiAgLSBBSUYxIERBQzEgRmlsdGVycyAoMSkgKi8KKwl7IDB4M0YwMCwgMHgzRjAwLCAweDAwMDAgfSwgLyogUjEwNTcgIC0gQUlGMSBEQUMxIEZpbHRlcnMgKDIpICovCisJeyAweDAyQjYsIDB4MDJCNiwgMHgwMDAwIH0sIC8qIFIxMDU4ICAtIEFJRjEgREFDMiBGaWx0ZXJzICgxKSAqLworCXsgMHgzRjAwLCAweDNGMDAsIDB4MDAwMCB9LCAvKiBSMTA1OSAgLSBBSUYxIERBQzIgRmlsdGVycyAoMikgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwNzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwODAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwODEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwODMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwODQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwODYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwODcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjEwODggIC0gQUlGMSBEUkMxICgxKSAqLworCXsgMHgxRkZGLCAweDFGRkYsIDB4MDAwMCB9LCAvKiBSMTA4OSAgLSBBSUYxIERSQzEgKDIpICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMDkwICAtIEFJRjEgRFJDMSAoMykgKi8KKwl7IDB4MDdGRiwgMHgwN0ZGLCAweDAwMDAgfSwgLyogUjEwOTEgIC0gQUlGMSBEUkMxICg0KSAqLworCXsgMHgwM0ZGLCAweDAzRkYsIDB4MDAwMCB9LCAvKiBSMTA5MiAgLSBBSUYxIERSQzEgKDUpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDk0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDk1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDk2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTAzICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTA0ICAtIEFJRjEgRFJDMiAoMSkgKi8KKwl7IDB4MUZGRiwgMHgxRkZGLCAweDAwMDAgfSwgLyogUjExMDUgIC0gQUlGMSBEUkMyICgyKSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTEwNiAgLSBBSUYxIERSQzIgKDMpICovCisJeyAweDA3RkYsIDB4MDdGRiwgMHgwMDAwIH0sIC8qIFIxMTA3ICAtIEFJRjEgRFJDMiAoNCkgKi8KKwl7IDB4MDNGRiwgMHgwM0ZGLCAweDAwMDAgfSwgLyogUjExMDggIC0gQUlGMSBEUkMyICg1KSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEwOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTExOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEyMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEyMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEyNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEyNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEyOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEzMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEzOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTEzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE1MSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE1MiAgLSBBSUYxIERBQzEgRVEgR2FpbnMgKDEpICovCisJeyAweEZGQzAsIDB4RkZDMCwgMHgwMDAwIH0sIC8qIFIxMTUzICAtIEFJRjEgREFDMSBFUSBHYWlucyAoMikgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNTQgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMSBBICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTU1ICAtIEFJRjEgREFDMSBFUSBCYW5kIDEgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE1NiAgLSBBSUYxIERBQzEgRVEgQmFuZCAxIFBHICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTU3ICAtIEFJRjEgREFDMSBFUSBCYW5kIDIgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE1OCAgLSBBSUYxIERBQzEgRVEgQmFuZCAyIEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNTkgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMiBDICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTYwICAtIEFJRjEgREFDMSBFUSBCYW5kIDIgUEcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNjEgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMyBBICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTYyICAtIEFJRjEgREFDMSBFUSBCYW5kIDMgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE2MyAgLSBBSUYxIERBQzEgRVEgQmFuZCAzIEMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNjQgIC0gQUlGMSBEQUMxIEVRIEJhbmQgMyBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE2NSAgLSBBSUYxIERBQzEgRVEgQmFuZCA0IEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNjYgIC0gQUlGMSBEQUMxIEVRIEJhbmQgNCBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTY3ICAtIEFJRjEgREFDMSBFUSBCYW5kIDQgQyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE2OCAgLSBBSUYxIERBQzEgRVEgQmFuZCA0IFBHICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTY5ICAtIEFJRjEgREFDMSBFUSBCYW5kIDUgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE3MCAgLSBBSUYxIERBQzEgRVEgQmFuZCA1IEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExNzEgIC0gQUlGMSBEQUMxIEVRIEJhbmQgNSBQRyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE3MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE3NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE4MyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE4NCAgLSBBSUYxIERBQzIgRVEgR2FpbnMgKDEpICovCisJeyAweEZGQzAsIDB4RkZDMCwgMHgwMDAwIH0sIC8qIFIxMTg1ICAtIEFJRjEgREFDMiBFUSBHYWlucyAoMikgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExODYgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMSBBICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTg3ICAtIEFJRjEgREFDMiBFUSBCYW5kIDEgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE4OCAgLSBBSUYxIERBQzIgRVEgQmFuZCAxIFBHICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTg5ICAtIEFJRjEgREFDMiBFUSBCYW5kIDIgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE5MCAgLSBBSUYxIERBQzIgRVEgQmFuZCAyIEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExOTEgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMiBDICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTkyICAtIEFJRjEgREFDMiBFUSBCYW5kIDIgUEcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExOTMgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMyBBICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTk0ICAtIEFJRjEgREFDMiBFUSBCYW5kIDMgQiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE5NSAgLSBBSUYxIERBQzIgRVEgQmFuZCAzIEMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExOTYgIC0gQUlGMSBEQUMyIEVRIEJhbmQgMyBQRyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTE5NyAgLSBBSUYxIERBQzIgRVEgQmFuZCA0IEEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjExOTggIC0gQUlGMSBEQUMyIEVRIEJhbmQgNCBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMTk5ICAtIEFJRjEgREFDMiBFUSBCYW5kIDQgQyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTIwMCAgLSBBSUYxIERBQzIgRVEgQmFuZCA0IFBHICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxMjAxICAtIEFJRjEgREFDMiBFUSBCYW5kIDUgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTIwMiAgLSBBSUYxIERBQzIgRVEgQmFuZCA1IEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjEyMDMgIC0gQUlGMSBEQUMyIEVRIEJhbmQgNSBQRyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIwNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIwOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIwOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIxMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIxMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIxMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIxMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIxNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIxNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIxNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIxNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIxOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIxOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI0MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI0MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI0MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI0NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI0NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI0NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI2OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI3MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI3MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI3NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI3OSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMTI4MCAgLSBBSUYyIEFEQyBMZWZ0IFZvbHVtZSAqLworCXsgMHgwMEZGLCAweDAxRkYsIDB4MDAwMCB9LCAvKiBSMTI4MSAgLSBBSUYyIEFEQyBSaWdodCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjEyODIgIC0gQUlGMiBEQUMgTGVmdCBWb2x1bWUgKi8KKwl7IDB4MDBGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjEyODMgIC0gQUlGMiBEQUMgUmlnaHQgVm9sdW1lICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjg1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjg3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjg4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjg5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjkwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjkxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjk0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjk1ICovCisJeyAweEY4MDAsIDB4RjgwMCwgMHgwMDAwIH0sIC8qIFIxMjk2ICAtIEFJRjIgQURDIEZpbHRlcnMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyOTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyOTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyOTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMDUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMTEgKi8KKwl7IDB4MDJCNiwgMHgwMkI2LCAweDAwMDAgfSwgLyogUjEzMTIgIC0gQUlGMiBEQUMgRmlsdGVycyAoMSkgKi8KKwl7IDB4M0YwMCwgMHgzRjAwLCAweDAwMDAgfSwgLyogUjEzMTMgIC0gQUlGMiBEQUMgRmlsdGVycyAoMikgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMTQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMTUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMTYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMTggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMTkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMjEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMjQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMjUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMjcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMjggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMjkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMzAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMzEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMzIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMzMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMzQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMzYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMzcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzMzkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNDAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNDIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNDMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjEzNDQgIC0gQUlGMiBEUkMgKDEpICovCisJeyAweDFGRkYsIDB4MUZGRiwgMHgwMDAwIH0sIC8qIFIxMzQ1ICAtIEFJRjIgRFJDICgyKSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTM0NiAgLSBBSUYyIERSQyAoMykgKi8KKwl7IDB4MDdGRiwgMHgwN0ZGLCAweDAwMDAgfSwgLyogUjEzNDcgIC0gQUlGMiBEUkMgKDQpICovCisJeyAweDAzRkYsIDB4MDNGRiwgMHgwMDAwIH0sIC8qIFIxMzQ4ICAtIEFJRjIgRFJDICg1KSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM1OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM2MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM2NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM2OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM4OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM5MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM5MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM5MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM5NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM5NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM5NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM5OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM5OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQwMCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQwMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQwMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQwNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQwNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQwNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQwNyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQwOCAgLSBBSUYyIEVRIEdhaW5zICgxKSAqLworCXsgMHhGRkMwLCAweEZGQzAsIDB4MDAwMCB9LCAvKiBSMTQwOSAgLSBBSUYyIEVRIEdhaW5zICgyKSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQxMCAgLSBBSUYyIEVRIEJhbmQgMSBBICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDExICAtIEFJRjIgRVEgQmFuZCAxIEIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MTIgIC0gQUlGMiBFUSBCYW5kIDEgUEcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MTMgIC0gQUlGMiBFUSBCYW5kIDIgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQxNCAgLSBBSUYyIEVRIEJhbmQgMiBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDE1ICAtIEFJRjIgRVEgQmFuZCAyIEMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MTYgIC0gQUlGMiBFUSBCYW5kIDIgUEcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MTcgIC0gQUlGMiBFUSBCYW5kIDMgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQxOCAgLSBBSUYyIEVRIEJhbmQgMyBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDE5ICAtIEFJRjIgRVEgQmFuZCAzIEMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MjAgIC0gQUlGMiBFUSBCYW5kIDMgUEcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MjEgIC0gQUlGMiBFUSBCYW5kIDQgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQyMiAgLSBBSUYyIEVRIEJhbmQgNCBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDIzICAtIEFJRjIgRVEgQmFuZCA0IEMgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MjQgIC0gQUlGMiBFUSBCYW5kIDQgUEcgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE0MjUgIC0gQUlGMiBFUSBCYW5kIDUgQSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQyNiAgLSBBSUYyIEVRIEJhbmQgNSBCICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNDI3ICAtIEFJRjIgRVEgQmFuZCA1IFBHICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDMwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDM1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDM2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDM4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDM5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQ0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQ1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQ4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDQ5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDUxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDUyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDUzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDU0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDU1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDU2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDU3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDU4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDU5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDYwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDYxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDYyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDYzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDY0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDY1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDY2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDY3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDY4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDY5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDcwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDcxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDcyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDczICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDc0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDc1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDc2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDc3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDc4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDc5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDgwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDgxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDgyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDg0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDg1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDg3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDg4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDg5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDkwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDkxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDkyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDkzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDk0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDk1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDk2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDk3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDk4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDk5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTAwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTAxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTAzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTA0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTA1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTA2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTA3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTA5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTEwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTExICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTEyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTE0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTE1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTE2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTE3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTE4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTIwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTIxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTIzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTI0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTI2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTI3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTI5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTMwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTMxICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTMyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTMzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTM1ICovCisJeyAweDAxRUYsIDB4MDFFRiwgMHgwMDAwIH0sIC8qIFIxNTM2ICAtIERBQzEgTWl4ZXIgVm9sdW1lcyAqLworCXsgMHgwMDM3LCAweDAwMzcsIDB4MDAwMCB9LCAvKiBSMTUzNyAgLSBEQUMxIExlZnQgTWl4ZXIgUm91dGluZyAqLworCXsgMHgwMDM3LCAweDAwMzcsIDB4MDAwMCB9LCAvKiBSMTUzOCAgLSBEQUMxIFJpZ2h0IE1peGVyIFJvdXRpbmcgKi8KKwl7IDB4MDFFRiwgMHgwMUVGLCAweDAwMDAgfSwgLyogUjE1MzkgIC0gREFDMiBNaXhlciBWb2x1bWVzICovCisJeyAweDAwMzcsIDB4MDAzNywgMHgwMDAwIH0sIC8qIFIxNTQwICAtIERBQzIgTGVmdCBNaXhlciBSb3V0aW5nICovCisJeyAweDAwMzcsIDB4MDAzNywgMHgwMDAwIH0sIC8qIFIxNTQxICAtIERBQzIgUmlnaHQgTWl4ZXIgUm91dGluZyAqLworCXsgMHgwMDAzLCAweDAwMDMsIDB4MDAwMCB9LCAvKiBSMTU0MiAgLSBBSUYxIEFEQzEgTGVmdCBNaXhlciBSb3V0aW5nICovCisJeyAweDAwMDMsIDB4MDAwMywgMHgwMDAwIH0sIC8qIFIxNTQzICAtIEFJRjEgQURDMSBSaWdodCBNaXhlciBSb3V0aW5nICovCisJeyAweDAwMDMsIDB4MDAwMywgMHgwMDAwIH0sIC8qIFIxNTQ0ICAtIEFJRjEgQURDMiBMZWZ0IE1peGVyIFJvdXRpbmcgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAweDAwMDAgfSwgLyogUjE1NDUgIC0gQUlGMSBBREMyIFJpZ2h0IG1peGVyIFJvdXRpbmcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NDYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NDcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NTAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE1NTEgKi8KKwl7IDB4MDJGRiwgMHgwM0ZGLCAweDAwMDAgfSwgLyogUjE1NTIgIC0gREFDMSBMZWZ0IFZvbHVtZSAqLworCXsgMHgwMkZGLCAweDAzRkYsIDB4MDAwMCB9LCAvKiBSMTU1MyAgLSBEQUMxIFJpZ2h0IFZvbHVtZSAqLworCXsgMHgwMkZGLCAweDAzRkYsIDB4MDAwMCB9LCAvKiBSMTU1NCAgLSBEQUMyIExlZnQgVm9sdW1lICovCisJeyAweDAyRkYsIDB4MDNGRiwgMHgwMDAwIH0sIC8qIFIxNTU1ICAtIERBQzIgUmlnaHQgVm9sdW1lICovCisJeyAweDAwMDMsIDB4MDAwMywgMHgwMDAwIH0sIC8qIFIxNTU2ICAtIERBQyBTb2Z0bXV0ZSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU1NyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU1OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU2MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU2MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU2NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU2NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU2NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTU2NyAqLworCXsgMHgwMDAzLCAweDAwMDMsIDB4MDAwMCB9LCAvKiBSMTU2OCAgLSBPdmVyc2FtcGxpbmcgKi8KKwl7IDB4MDNDMywgMHgwM0MzLCAweDAwMDAgfSwgLyogUjE1NjkgIC0gU2lkZXRvbmUgKi8KK307CisKK3N0YXRpYyBpbnQgd204OTk0X3JlYWRhYmxlKHVuc2lnbmVkIGludCByZWcpCit7CisJaWYgKHJlZyA+PSBBUlJBWV9TSVpFKGFjY2Vzc19tYXNrcykpCisJCXJldHVybiAwOworCXJldHVybiBhY2Nlc3NfbWFza3NbcmVnXS5yZWFkYWJsZSAhPSAwOworfQorCitzdGF0aWMgaW50IHdtODk5NF92b2xhdGlsZSh1bnNpZ25lZCBpbnQgcmVnKQoreworCWlmIChyZWcgPj0gV004OTk0X1JFR19DQUNIRV9TSVpFKQorCQlyZXR1cm4gMTsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBXTTg5OTRfU09GVFdBUkVfUkVTRVQ6CisJY2FzZSBXTTg5OTRfQ0hJUF9SRVZJU0lPTjoKKwljYXNlIFdNODk5NF9EQ19TRVJWT18xOgorCWNhc2UgV004OTk0X0RDX1NFUlZPX1JFQURCQUNLOgorCWNhc2UgV004OTk0X1JBVEVfU1RBVFVTOgorCWNhc2UgV004OTk0X0xET18xOgorCWNhc2UgV004OTk0X0xET18yOgorCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwl1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCisJQlVHX09OKHJlZyA+IFdNODk5NF9NQVhfUkVHSVNURVIpOworCisJaWYgKCF3bTg5OTRfdm9sYXRpbGUocmVnKSkKKwkJd204OTk0LT5yZWdfY2FjaGVbcmVnXSA9IHZhbHVlOworCisJcmV0dXJuIHdtODk5NF9yZWdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgcmVnLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgd204OTk0X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCXVuc2lnbmVkIGludCByZWcpCit7CisJdTE2ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCisJQlVHX09OKHJlZyA+IFdNODk5NF9NQVhfUkVHSVNURVIpOworCisJaWYgKHdtODk5NF92b2xhdGlsZShyZWcpKQorCQlyZXR1cm4gd204OTk0X3JlZ19yZWFkKGNvZGVjLT5jb250cm9sX2RhdGEsIHJlZyk7CisJZWxzZQorCQlyZXR1cm4gcmVnX2NhY2hlW3JlZ107Cit9CisKK3N0YXRpYyBpbnQgY29uZmlndXJlX2FpZl9jbG9jayhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBhaWYpCit7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCByYXRlOworCWludCByZWcxID0gMDsKKwlpbnQgb2Zmc2V0OworCisJaWYgKGFpZikKKwkJb2Zmc2V0ID0gNDsKKwllbHNlCisJCW9mZnNldCA9IDA7CisKKwlzd2l0Y2ggKHdtODk5NC0+c3lzY2xrW2FpZl0pIHsKKwljYXNlIFdNODk5NF9TWVNDTEtfTUNMSzE6CisJCXJhdGUgPSB3bTg5OTQtPm1jbGtbMF07CisJCWJyZWFrOworCisJY2FzZSBXTTg5OTRfU1lTQ0xLX01DTEsyOgorCQlyZWcxIHw9IDB4ODsKKwkJcmF0ZSA9IHdtODk5NC0+bWNsa1sxXTsKKwkJYnJlYWs7CisKKwljYXNlIFdNODk5NF9TWVNDTEtfRkxMMToKKwkJcmVnMSB8PSAweDEwOworCQlyYXRlID0gd204OTk0LT5mbGxbMF0ub3V0OworCQlicmVhazsKKworCWNhc2UgV004OTk0X1NZU0NMS19GTEwyOgorCQlyZWcxIHw9IDB4MTg7CisJCXJhdGUgPSB3bTg5OTQtPmZsbFsxXS5vdXQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHJhdGUgPj0gMTM1MDAwMDApIHsKKwkJcmF0ZSAvPSAyOworCQlyZWcxIHw9IFdNODk5NF9BSUYxQ0xLX0RJVjsKKworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJEaXZpZGluZyBBSUYlZCBjbG9jayB0byAlZEh6XG4iLAorCQkJYWlmICsgMSwgcmF0ZSk7CisJfQorCXdtODk5NC0+YWlmY2xrW2FpZl0gPSByYXRlOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfQ0xPQ0tJTkdfMSArIG9mZnNldCwKKwkJCSAgICBXTTg5OTRfQUlGMUNMS19TUkNfTUFTSyB8IFdNODk5NF9BSUYxQ0xLX0RJViwKKwkJCSAgICByZWcxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbmZpZ3VyZV9jbG9jayhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCWludCBvbGQsIG5ldzsKKworCS8qIEJyaW5nIHVwIHRoZSBBSUYgY2xvY2tzIGZpcnN0ICovCisJY29uZmlndXJlX2FpZl9jbG9jayhjb2RlYywgMCk7CisJY29uZmlndXJlX2FpZl9jbG9jayhjb2RlYywgMSk7CisKKwkvKiBUaGVuIHN3aXRjaCBDTEtfU1lTIG92ZXIgdG8gdGhlIGhpZ2hlciBvZiB0aGVtOyBhIGNoYW5nZQorCSAqIGNhbiBvbmx5IGhhcHBlbiBhcyBhIHJlc3VsdCBvZiBhIGNsb2NraW5nIGNoYW5nZSB3aGljaCBjYW4KKwkgKiBvbmx5IGJlIG1hZGUgb3V0c2lkZSBvZiBEQVBNIHNvIHdlIGNhbiBzYWZlbHkgcmVkbyB0aGUKKwkgKiBjbG9ja2luZy4KKwkgKi8KKworCS8qIElmIHRoZXkncmUgZXF1YWwgaXQgZG9lc24ndCBtYXR0ZXIgd2hpY2ggaXMgdXNlZCAqLworCWlmICh3bTg5OTQtPmFpZmNsa1swXSA9PSB3bTg5OTQtPmFpZmNsa1sxXSkKKwkJcmV0dXJuIDA7CisKKwlpZiAod204OTk0LT5haWZjbGtbMF0gPCB3bTg5OTQtPmFpZmNsa1sxXSkKKwkJbmV3ID0gV004OTk0X1NZU0NMS19TUkM7CisJZWxzZQorCQluZXcgPSAwOworCisJb2xkID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTRfQ0xPQ0tJTkdfMSkgJiBXTTg5OTRfU1lTQ0xLX1NSQzsKKworCS8qIElmIHRoZXJlJ3Mgbm8gY2hhbmdlIHRoZW4gd2UncmUgZG9uZS4gKi8KKwlpZiAob2xkID09IG5ldykKKwkJcmV0dXJuIDA7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQ0xPQ0tJTkdfMSwgV004OTk0X1NZU0NMS19TUkMsIG5ldyk7CisKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja19jbGtfc3lzKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzb3VyY2UsCisJCQkgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNpbmspCit7CisJaW50IHJlZyA9IHNuZF9zb2NfcmVhZChzb3VyY2UtPmNvZGVjLCBXTTg5OTRfQ0xPQ0tJTkdfMSk7CisJY29uc3QgY2hhciAqY2xrOworCisJLyogQ2hlY2sgd2hhdCB3ZSdyZSBjdXJyZW50bHkgdXNpbmcgZm9yIENMS19TWVMgKi8KKwlpZiAocmVnICYgV004OTk0X1NZU0NMS19TUkMpCisJCWNsayA9ICJBSUYyQ0xLIjsKKwllbHNlCisJCWNsayA9ICJBSUYxQ0xLIjsKKworCXJldHVybiBzdHJjbXAoc291cmNlLT5uYW1lLCBjbGspID09IDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpzaWRldG9uZV9ocGZfdGV4dFtdID0geworCSIyLjdrSHoiLCAiMS4zNWtIeiIsICI2NzVIeiIsICIzNzBIeiIsICIxODBIeiIsICI5MEh6IiwgIjQ1SHoiCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHNpZGV0b25lX2hwZiA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9TSURFVE9ORSwgNywgNywgc2lkZXRvbmVfaHBmX3RleHQpOworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoYWlmX3RsdiwgMCwgNjAwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkaWdpdGFsX3RsdiwgLTcyMDAsIDc1LCAxKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShzdF90bHYsIC0zNjAwLCAzMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHdtODk5NF8zZF90bHYsIC0xNjAwLCAxODMsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGVxX3RsdiwgLTEyMDAsIDEwMCwgMCk7CisKKyNkZWZpbmUgV004OTk0X0RSQ19TV0lUQ0goeG5hbWUsIHJlZywgc2hpZnQpIFwKK3sJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIFwKKwkuaW5mbyA9IHNuZF9zb2NfaW5mb192b2xzdywgLmdldCA9IHNuZF9zb2NfZ2V0X3ZvbHN3LFwKKwkucHV0ID0gd204OTk0X3B1dF9kcmNfc3csIFwKKwkucHJpdmF0ZV92YWx1ZSA9ICBTT0NfU0lOR0xFX1ZBTFVFKHJlZywgc2hpZnQsIDEsIDApIH0KKworc3RhdGljIGludCB3bTg5OTRfcHV0X2RyY19zdyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptYyA9CisJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaW50IG1hc2ssIHJldDsKKworCS8qIENhbid0IGVuYWJsZSBib3RoIEFEQyBhbmQgREFDIHBhdGhzIHNpbXVsdGFuZW91c2x5ICovCisJaWYgKG1jLT5zaGlmdCA9PSBXTTg5OTRfQUlGMURBQzFfRFJDX0VOQV9TSElGVCkKKwkJbWFzayA9IFdNODk5NF9BSUYxQURDMUxfRFJDX0VOQV9NQVNLIHwKKwkJCVdNODk5NF9BSUYxQURDMVJfRFJDX0VOQV9NQVNLOworCWVsc2UKKwkJbWFzayA9IFdNODk5NF9BSUYxREFDMV9EUkNfRU5BX01BU0s7CisKKwlyZXQgPSBzbmRfc29jX3JlYWQoY29kZWMsIG1jLT5yZWcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmIChyZXQgJiBtYXNrKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBzbmRfc29jX3B1dF92b2xzdyhrY29udHJvbCwgdWNvbnRyb2wpOworfQorCisKKworc3RhdGljIHZvaWQgd204OTk0X3NldF9kcmMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgZHJjKQoreworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YSA9IHdtODk5NC0+cGRhdGE7CisJaW50IGJhc2UgPSB3bTg5OTRfZHJjX2Jhc2VbZHJjXTsKKwlpbnQgY2ZnID0gd204OTk0LT5kcmNfY2ZnW2RyY107CisJaW50IHNhdmUsIGk7CisKKwkvKiBTYXZlIGFueSBlbmFibGVzOyB0aGUgY29uZmlndXJhdGlvbiBzaG91bGQgY2xlYXIgdGhlbS4gKi8KKwlzYXZlID0gc25kX3NvY19yZWFkKGNvZGVjLCBiYXNlKTsKKwlzYXZlICY9IFdNODk5NF9BSUYxREFDMV9EUkNfRU5BIHwgV004OTk0X0FJRjFBREMxTF9EUkNfRU5BIHwKKwkJV004OTk0X0FJRjFBREMxUl9EUkNfRU5BOworCisJZm9yIChpID0gMDsgaSA8IFdNODk5NF9EUkNfUkVHUzsgaSsrKQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBiYXNlICsgaSwgMHhmZmZmLAorCQkJCSAgICBwZGF0YS0+ZHJjX2NmZ3NbY2ZnXS5yZWdzW2ldKTsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGJhc2UsIFdNODk5NF9BSUYxREFDMV9EUkNfRU5BIHwKKwkJCSAgICAgV004OTk0X0FJRjFBREMxTF9EUkNfRU5BIHwKKwkJCSAgICAgV004OTk0X0FJRjFBREMxUl9EUkNfRU5BLCBzYXZlKTsKK30KKworLyogSWNreSBhcyBoZWxsIGJ1dCBzYXZlcyBjb2RlIGR1cGxpY2F0aW9uICovCitzdGF0aWMgaW50IHdtODk5NF9nZXRfZHJjKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKHN0cmNtcChuYW1lLCAiQUlGMURSQzEgTW9kZSIpID09IDApCisJCXJldHVybiAwOworCWlmIChzdHJjbXAobmFtZSwgIkFJRjFEUkMyIE1vZGUiKSA9PSAwKQorCQlyZXR1cm4gMTsKKwlpZiAoc3RyY21wKG5hbWUsICJBSUYyRFJDIE1vZGUiKSA9PSAwKQorCQlyZXR1cm4gMjsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB3bTg5OTRfcHV0X2RyY19lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CQorCXN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhID0gd204OTk0LT5wZGF0YTsKKwlpbnQgZHJjID0gd204OTk0X2dldF9kcmMoa2NvbnRyb2wtPmlkLm5hbWUpOworCWludCB2YWx1ZSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCisJaWYgKGRyYyA8IDApCisJCXJldHVybiBkcmM7CisKKwlpZiAodmFsdWUgPj0gcGRhdGEtPm51bV9kcmNfY2ZncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3bTg5OTQtPmRyY19jZmdbZHJjXSA9IHZhbHVlOworCisJd204OTk0X3NldF9kcmMoY29kZWMsIGRyYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfZ2V0X2RyY19lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGRyYyA9IHdtODk5NF9nZXRfZHJjKGtjb250cm9sLT5pZC5uYW1lKTsKKworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSB3bTg5OTQtPmRyY19jZmdbZHJjXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bTg5OTRfc2V0X3JldHVuZV9tb2JpbGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBpbnQgYmxvY2spCit7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBjb2RlYy0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhID0gd204OTk0LT5wZGF0YTsKKwlpbnQgYmFzZSA9IHdtODk5NF9yZXR1bmVfbW9iaWxlX2Jhc2VbYmxvY2tdOworCWludCBpZmFjZSwgYmVzdCwgYmVzdF92YWwsIHNhdmUsIGksIGNmZzsKKworCWlmICghcGRhdGEgfHwgIXdtODk5NC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMpCisJCXJldHVybjsKKworCXN3aXRjaCAoYmxvY2spIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCQlpZmFjZSA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaWZhY2UgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJLyogRmluZCB0aGUgdmVyc2lvbiBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNvbmZpZ3VyYXRpb24KKwkgKiB3aXRoIHRoZSBuZWFyZXN0IHNhbXBsZSByYXRlLiAqLworCWNmZyA9IHdtODk5NC0+cmV0dW5lX21vYmlsZV9jZmdbYmxvY2tdOworCWJlc3QgPSAwOworCWJlc3RfdmFsID0gSU5UX01BWDsKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9yZXR1bmVfbW9iaWxlX2NmZ3M7IGkrKykgeworCQlpZiAoc3RyY21wKHBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ubmFtZSwKKwkJCSAgIHdtODk5NC0+cmV0dW5lX21vYmlsZV90ZXh0c1tjZmddKSA9PSAwICYmCisJCSAgICBhYnMocGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tpXS5yYXRlCisJCQktIHdtODk5NC0+ZGFjX3JhdGVzW2lmYWNlXSkgPCBiZXN0X3ZhbCkgeworCQkJYmVzdCA9IGk7CisJCQliZXN0X3ZhbCA9IGFicyhwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2ldLnJhdGUKKwkJCQkgICAgICAgLSB3bTg5OTQtPmRhY19yYXRlc1tpZmFjZV0pOworCQl9CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiUmVUdW5lIE1vYmlsZSAlZCAlcy8lZEh6IGZvciAlZEh6IHNhbXBsZSByYXRlXG4iLAorCQlibG9jaywKKwkJcGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tiZXN0XS5uYW1lLAorCQlwZGF0YS0+cmV0dW5lX21vYmlsZV9jZmdzW2Jlc3RdLnJhdGUsCisJCXdtODk5NC0+ZGFjX3JhdGVzW2lmYWNlXSk7CisKKwkvKiBUaGUgRVEgd2lsbCBiZSBkaXNhYmxlZCB3aGlsZSByZWNvbmZpZ3VyaW5nIGl0LCByZW1lbWJlciB0aGUKKwkgKiBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIAorCSAqLworCXNhdmUgPSBzbmRfc29jX3JlYWQoY29kZWMsIGJhc2UpOworCXNhdmUgJj0gV004OTk0X0FJRjFEQUMxX0VRX0VOQTsKKworCWZvciAoaSA9IDA7IGkgPCBXTTg5OTRfRVFfUkVHUzsgaSsrKQorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBiYXNlICsgaSwgMHhmZmZmLAorCQkJCXBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbYmVzdF0ucmVnc1tpXSk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBiYXNlLCBXTTg5OTRfQUlGMURBQzFfRVFfRU5BLCBzYXZlKTsKK30KKworLyogSWNreSBhcyBoZWxsIGJ1dCBzYXZlcyBjb2RlIGR1cGxpY2F0aW9uICovCitzdGF0aWMgaW50IHdtODk5NF9nZXRfcmV0dW5lX21vYmlsZV9ibG9jayhjb25zdCBjaGFyICpuYW1lKQoreworCWlmIChzdHJjbXAobmFtZSwgIkFJRjEuMSBFUSBNb2RlIikgPT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKHN0cmNtcChuYW1lLCAiQUlGMS4yIEVRIE1vZGUiKSA9PSAwKQorCQlyZXR1cm4gMTsKKwlpZiAoc3RyY21wKG5hbWUsICJBSUYyIEVRIE1vZGUiKSA9PSAwKQorCQlyZXR1cm4gMjsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB3bTg5OTRfcHV0X3JldHVuZV9tb2JpbGVfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CQorCXN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhID0gd204OTk0LT5wZGF0YTsKKwlpbnQgYmxvY2sgPSB3bTg5OTRfZ2V0X3JldHVuZV9tb2JpbGVfYmxvY2soa2NvbnRyb2wtPmlkLm5hbWUpOworCWludCB2YWx1ZSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCisJaWYgKGJsb2NrIDwgMCkKKwkJcmV0dXJuIGJsb2NrOworCisJaWYgKHZhbHVlID49IHBkYXRhLT5udW1fcmV0dW5lX21vYmlsZV9jZmdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdtODk5NC0+cmV0dW5lX21vYmlsZV9jZmdbYmxvY2tdID0gdmFsdWU7CisKKwl3bTg5OTRfc2V0X3JldHVuZV9tb2JpbGUoY29kZWMsIGJsb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5NF9nZXRfcmV0dW5lX21vYmlsZV9lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgYmxvY2sgPSB3bTg5OTRfZ2V0X3JldHVuZV9tb2JpbGVfYmxvY2soa2NvbnRyb2wtPmlkLm5hbWUpOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHdtODk5NC0+cmV0dW5lX21vYmlsZV9jZmdbYmxvY2tdOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB3bTg5OTRfc25kX2NvbnRyb2xzW10gPSB7CitTT0NfRE9VQkxFX1JfVExWKCJBSUYxQURDMSBWb2x1bWUiLCBXTTg5OTRfQUlGMV9BREMxX0xFRlRfVk9MVU1FLAorCQkgV004OTk0X0FJRjFfQURDMV9SSUdIVF9WT0xVTUUsCisJCSAxLCAxMTksIDAsIGRpZ2l0YWxfdGx2KSwKK1NPQ19ET1VCTEVfUl9UTFYoIkFJRjFBREMyIFZvbHVtZSIsIFdNODk5NF9BSUYxX0FEQzJfTEVGVF9WT0xVTUUsCisJCSBXTTg5OTRfQUlGMV9BREMyX1JJR0hUX1ZPTFVNRSwKKwkJIDEsIDExOSwgMCwgZGlnaXRhbF90bHYpLAorU09DX0RPVUJMRV9SX1RMVigiQUlGMkFEQyBWb2x1bWUiLCBXTTg5OTRfQUlGMl9BRENfTEVGVF9WT0xVTUUsCisJCSBXTTg5OTRfQUlGMl9BRENfUklHSFRfVk9MVU1FLAorCQkgMSwgMTE5LCAwLCBkaWdpdGFsX3RsdiksCisKK1NPQ19ET1VCTEVfUl9UTFYoIkFJRjFEQUMxIFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzFfTEVGVF9WT0xVTUUsCisJCSBXTTg5OTRfQUlGMV9EQUMxX1JJR0hUX1ZPTFVNRSwgMSwgOTYsIDAsIGRpZ2l0YWxfdGx2KSwKK1NPQ19ET1VCTEVfUl9UTFYoIkFJRjFEQUMyIFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzJfTEVGVF9WT0xVTUUsCisJCSBXTTg5OTRfQUlGMV9EQUMyX1JJR0hUX1ZPTFVNRSwgMSwgOTYsIDAsIGRpZ2l0YWxfdGx2KSwKK1NPQ19ET1VCTEVfUl9UTFYoIkFJRjJEQUMgVm9sdW1lIiwgV004OTk0X0FJRjJfREFDX0xFRlRfVk9MVU1FLAorCQkgV004OTk0X0FJRjJfREFDX1JJR0hUX1ZPTFVNRSwgMSwgOTYsIDAsIGRpZ2l0YWxfdGx2KSwKKworU09DX1NJTkdMRV9UTFYoIkFJRjEgQm9vc3QgVm9sdW1lIiwgV004OTk0X0FJRjFfQ09OVFJPTF8yLCAxMCwgMywgMCwgYWlmX3RsdiksCitTT0NfU0lOR0xFX1RMVigiQUlGMiBCb29zdCBWb2x1bWUiLCBXTTg5OTRfQUlGMl9DT05UUk9MXzIsIDEwLCAzLCAwLCBhaWZfdGx2KSwKKworU09DX1NJTkdMRSgiQUlGMURBQzEgRVEgU3dpdGNoIiwgV004OTk0X0FJRjFfREFDMV9FUV9HQUlOU18xLCAwLCAxLCAwKSwKK1NPQ19TSU5HTEUoIkFJRjFEQUMyIEVRIFN3aXRjaCIsIFdNODk5NF9BSUYxX0RBQzJfRVFfR0FJTlNfMSwgMCwgMSwgMCksCitTT0NfU0lOR0xFKCJBSUYyIEVRIFN3aXRjaCIsIFdNODk5NF9BSUYyX0VRX0dBSU5TXzEsIDAsIDEsIDApLAorCitXTTg5OTRfRFJDX1NXSVRDSCgiQUlGMURBQzEgRFJDIFN3aXRjaCIsIFdNODk5NF9BSUYxX0RSQzFfMSwgMiksCitXTTg5OTRfRFJDX1NXSVRDSCgiQUlGMUFEQzFMIERSQyBTd2l0Y2giLCBXTTg5OTRfQUlGMV9EUkMxXzEsIDEpLAorV004OTk0X0RSQ19TV0lUQ0goIkFJRjFBREMxUiBEUkMgU3dpdGNoIiwgV004OTk0X0FJRjFfRFJDMV8xLCAwKSwKKworV004OTk0X0RSQ19TV0lUQ0goIkFJRjFEQUMyIERSQyBTd2l0Y2giLCBXTTg5OTRfQUlGMV9EUkMyXzEsIDIpLAorV004OTk0X0RSQ19TV0lUQ0goIkFJRjFBREMyTCBEUkMgU3dpdGNoIiwgV004OTk0X0FJRjFfRFJDMl8xLCAxKSwKK1dNODk5NF9EUkNfU1dJVENIKCJBSUYxQURDMlIgRFJDIFN3aXRjaCIsIFdNODk5NF9BSUYxX0RSQzJfMSwgMCksCisKK1dNODk5NF9EUkNfU1dJVENIKCJBSUYyREFDIERSQyBTd2l0Y2giLCBXTTg5OTRfQUlGMl9EUkNfMSwgMiksCitXTTg5OTRfRFJDX1NXSVRDSCgiQUlGMkFEQ0wgRFJDIFN3aXRjaCIsIFdNODk5NF9BSUYyX0RSQ18xLCAxKSwKK1dNODk5NF9EUkNfU1dJVENIKCJBSUYyQURDUiBEUkMgU3dpdGNoIiwgV004OTk0X0FJRjJfRFJDXzEsIDApLAorCitTT0NfU0lOR0xFX1RMVigiREFDMSBSaWdodCBTaWRldG9uZSBWb2x1bWUiLCBXTTg5OTRfREFDMV9NSVhFUl9WT0xVTUVTLAorCSAgICAgICA1LCAxMiwgMCwgc3RfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJEQUMxIExlZnQgU2lkZXRvbmUgVm9sdW1lIiwgV004OTk0X0RBQzFfTUlYRVJfVk9MVU1FUywKKwkgICAgICAgMCwgMTIsIDAsIHN0X3RsdiksCitTT0NfU0lOR0xFX1RMVigiREFDMiBSaWdodCBTaWRldG9uZSBWb2x1bWUiLCBXTTg5OTRfREFDMl9NSVhFUl9WT0xVTUVTLAorCSAgICAgICA1LCAxMiwgMCwgc3RfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJEQUMyIExlZnQgU2lkZXRvbmUgVm9sdW1lIiwgV004OTk0X0RBQzJfTUlYRVJfVk9MVU1FUywKKwkgICAgICAgMCwgMTIsIDAsIHN0X3RsdiksCitTT0NfRU5VTSgiU2lkZXRvbmUgSFBGIE11eCIsIHNpZGV0b25lX2hwZiksCitTT0NfU0lOR0xFKCJTaWRldG9uZSBIUEYgU3dpdGNoIiwgV004OTk0X1NJREVUT05FLCA2LCAxLCAwKSwKKworU09DX0RPVUJMRV9SX1RMVigiREFDMSBWb2x1bWUiLCBXTTg5OTRfREFDMV9MRUZUX1ZPTFVNRSwKKwkJIFdNODk5NF9EQUMxX1JJR0hUX1ZPTFVNRSwgMSwgOTYsIDAsIGRpZ2l0YWxfdGx2KSwKK1NPQ19ET1VCTEVfUigiREFDMSBTd2l0Y2giLCBXTTg5OTRfREFDMV9MRUZUX1ZPTFVNRSwKKwkgICAgIFdNODk5NF9EQUMxX1JJR0hUX1ZPTFVNRSwgOSwgMSwgMSksCisKK1NPQ19ET1VCTEVfUl9UTFYoIkRBQzIgVm9sdW1lIiwgV004OTk0X0RBQzJfTEVGVF9WT0xVTUUsCisJCSBXTTg5OTRfREFDMl9SSUdIVF9WT0xVTUUsIDEsIDk2LCAwLCBkaWdpdGFsX3RsdiksCitTT0NfRE9VQkxFX1IoIkRBQzIgU3dpdGNoIiwgV004OTk0X0RBQzJfTEVGVF9WT0xVTUUsCisJICAgICBXTTg5OTRfREFDMl9SSUdIVF9WT0xVTUUsIDksIDEsIDEpLAorCitTT0NfU0lOR0xFX1RMVigiU1BLTCBEQUMyIFZvbHVtZSIsIFdNODk5NF9TUEtNSVhMX0FUVEVOVUFUSU9OLAorCSAgICAgICA2LCAxLCAxLCB3bV9odWJzX3Nwa21peF90bHYpLAorU09DX1NJTkdMRV9UTFYoIlNQS0wgREFDMSBWb2x1bWUiLCBXTTg5OTRfU1BLTUlYTF9BVFRFTlVBVElPTiwKKwkgICAgICAgMiwgMSwgMSwgd21faHVic19zcGttaXhfdGx2KSwKKworU09DX1NJTkdMRV9UTFYoIlNQS1IgREFDMiBWb2x1bWUiLCBXTTg5OTRfU1BLTUlYUl9BVFRFTlVBVElPTiwKKwkgICAgICAgNiwgMSwgMSwgd21faHVic19zcGttaXhfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJTUEtSIERBQzEgVm9sdW1lIiwgV004OTk0X1NQS01JWFJfQVRURU5VQVRJT04sCisJICAgICAgIDIsIDEsIDEsIHdtX2h1YnNfc3BrbWl4X3RsdiksCisKK1NPQ19TSU5HTEVfVExWKCJBSUYxREFDMSAzRCBTdGVyZW8gVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMV9GSUxURVJTXzIsCisJICAgICAgIDEwLCAxNSwgMCwgd204OTk0XzNkX3RsdiksCitTT0NfU0lOR0xFKCJBSUYxREFDMSAzRCBTdGVyZW8gU3dpdGNoIiwgV004OTk0X0FJRjFfREFDMl9GSUxURVJTXzIsCisJICAgOCwgMSwgMCksCitTT0NfU0lOR0xFX1RMVigiQUlGMURBQzIgM0QgU3RlcmVvIFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzJfRklMVEVSU18yLAorCSAgICAgICAxMCwgMTUsIDAsIHdtODk5NF8zZF90bHYpLAorU09DX1NJTkdMRSgiQUlGMURBQzIgM0QgU3RlcmVvIFN3aXRjaCIsIFdNODk5NF9BSUYxX0RBQzJfRklMVEVSU18yLAorCSAgIDgsIDEsIDApLAorU09DX1NJTkdMRV9UTFYoIkFJRjJEQUMgM0QgU3RlcmVvIFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzFfRklMVEVSU18yLAorCSAgICAgICAxMCwgMTUsIDAsIHdtODk5NF8zZF90bHYpLAorU09DX1NJTkdMRSgiQUlGMkRBQyAzRCBTdGVyZW8gU3dpdGNoIiwgV004OTk0X0FJRjFfREFDMl9GSUxURVJTXzIsCisJICAgOCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgd204OTk0X2VxX2NvbnRyb2xzW10gPSB7CitTT0NfU0lOR0xFX1RMVigiQUlGMURBQzEgRVExIFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzFfRVFfR0FJTlNfMSwgMTEsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFJRjFEQUMxIEVRMiBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMxX0VRX0dBSU5TXzEsIDYsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFJRjFEQUMxIEVRMyBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMxX0VRX0dBSU5TXzEsIDEsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFJRjFEQUMxIEVRNCBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMxX0VRX0dBSU5TXzIsIDExLCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJBSUYxREFDMSBFUTUgVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMV9FUV9HQUlOU18yLCA2LCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKKworU09DX1NJTkdMRV9UTFYoIkFJRjFEQUMyIEVRMSBWb2x1bWUiLCBXTTg5OTRfQUlGMV9EQUMyX0VRX0dBSU5TXzEsIDExLCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJBSUYxREFDMiBFUTIgVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMl9FUV9HQUlOU18xLCA2LCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJBSUYxREFDMiBFUTMgVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMl9FUV9HQUlOU18xLCAxLCAzMSwgMCwKKwkgICAgICAgZXFfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJBSUYxREFDMiBFUTQgVm9sdW1lIiwgV004OTk0X0FJRjFfREFDMl9FUV9HQUlOU18yLCAxMSwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiQUlGMURBQzIgRVE1IFZvbHVtZSIsIFdNODk5NF9BSUYxX0RBQzJfRVFfR0FJTlNfMiwgNiwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCisKK1NPQ19TSU5HTEVfVExWKCJBSUYyIEVRMSBWb2x1bWUiLCBXTTg5OTRfQUlGMl9FUV9HQUlOU18xLCAxMSwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiQUlGMiBFUTIgVm9sdW1lIiwgV004OTk0X0FJRjJfRVFfR0FJTlNfMSwgNiwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiQUlGMiBFUTMgVm9sdW1lIiwgV004OTk0X0FJRjJfRVFfR0FJTlNfMSwgMSwgMzEsIDAsCisJICAgICAgIGVxX3RsdiksCitTT0NfU0lOR0xFX1RMVigiQUlGMiBFUTQgVm9sdW1lIiwgV004OTk0X0FJRjJfRVFfR0FJTlNfMiwgMTEsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorU09DX1NJTkdMRV9UTFYoIkFJRjIgRVE1IFZvbHVtZSIsIFdNODk5NF9BSUYyX0VRX0dBSU5TXzIsIDYsIDMxLCAwLAorCSAgICAgICBlcV90bHYpLAorfTsKKworc3RhdGljIGludCBjbGtfc3lzX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKKwkJcmV0dXJuIGNvbmZpZ3VyZV9jbG9jayhjb2RlYyk7CisKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKKwkJY29uZmlndXJlX2Nsb2NrKGNvZGVjKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdtODk5NF91cGRhdGVfY2xhc3NfdyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaW50IGVuYWJsZSA9IDE7CisJaW50IHNvdXJjZSA9IDA7ICAvKiBHQ0MgZmxvdyBhbmFseXNpcyBjYW4ndCB0cmFjayBlbmFibGUgKi8KKwlpbnQgcmVnLCByZWdfcjsKKworCS8qIE9ubHkgc3VwcG9ydCBkaXJlY3QgREFDLT5oZWFkcGhvbmUgcGF0aHMgKi8KKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5NF9PVVRQVVRfTUlYRVJfMSk7CisJaWYgKCEocmVnICYgV004OTk0X0RBQzFMX1RPX0hQT1VUMUwpKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkhQTCBjb25uZWN0ZWQgdG8gb3V0cHV0IG1peGVyXG4iKTsKKwkJZW5hYmxlID0gMDsKKwl9CisKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5NF9PVVRQVVRfTUlYRVJfMik7CisJaWYgKCEocmVnICYgV004OTk0X0RBQzFSX1RPX0hQT1VUMVIpKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkhQUiBjb25uZWN0ZWQgdG8gb3V0cHV0IG1peGVyXG4iKTsKKwkJZW5hYmxlID0gMDsKKwl9CisKKwkvKiBXZSBhbHNvIG5lZWQgdGhlIHNhbWUgc2V0dGluZyBmb3IgTC9SIGFuZCBvbmx5IG9uZSBwYXRoICovCisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTRfREFDMV9MRUZUX01JWEVSX1JPVVRJTkcpOworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBXTTg5OTRfQUlGMkRBQ0xfVE9fREFDMUw6CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkNsYXNzIFcgc291cmNlIEFJRjJEQUNcbiIpOworCQlzb3VyY2UgPSAyIDw8IFdNODk5NF9DUF9EWU5fU1JDX1NFTF9TSElGVDsKKwkJYnJlYWs7CisJY2FzZSBXTTg5OTRfQUlGMURBQzJMX1RPX0RBQzFMOgorCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJDbGFzcyBXIHNvdXJjZSBBSUYxREFDMlxuIik7CisJCXNvdXJjZSA9IDEgPDwgV004OTk0X0NQX0RZTl9TUkNfU0VMX1NISUZUOworCQlicmVhazsKKwljYXNlIFdNODk5NF9BSUYxREFDMUxfVE9fREFDMUw6CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkNsYXNzIFcgc291cmNlIEFJRjFEQUMxXG4iKTsKKwkJc291cmNlID0gMCA8PCBXTTg5OTRfQ1BfRFlOX1NSQ19TRUxfU0hJRlQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkRBQyBtaXhlciBzZXR0aW5nOiAleFxuIiwgcmVnKTsKKwkJZW5hYmxlID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmVnX3IgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5NF9EQUMxX1JJR0hUX01JWEVSX1JPVVRJTkcpOworCWlmIChyZWdfciAhPSByZWcpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiTGVmdCBhbmQgcmlnaHQgREFDIG1peGVycyBkaWZmZXJlbnRcbiIpOworCQllbmFibGUgPSAwOworCX0KKworCWlmIChlbmFibGUpIHsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQ2xhc3MgVyBlbmFibGVkXG4iKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0NMQVNTX1dfMSwKKwkJCQkgICAgV004OTk0X0NQX0RZTl9QV1IgfAorCQkJCSAgICBXTTg5OTRfQ1BfRFlOX1NSQ19TRUxfTUFTSywKKwkJCQkgICAgc291cmNlIHwgV004OTk0X0NQX0RZTl9QV1IpOworCQkKKwl9IGVsc2UgeworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJDbGFzcyBXIGRpc2FibGVkXG4iKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0NMQVNTX1dfMSwKKwkJCQkgICAgV004OTk0X0NQX0RZTl9QV1IsIDApOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmhwX211eF90ZXh0W10gPSB7CisJIk1peGVyIiwKKwkiREFDIiwKK307CisKKyNkZWZpbmUgV004OTk0X0hQX0VOVU0oeG5hbWUsIHhlbnVtKSBcCit7CS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCBcCisJLmluZm8gPSBzbmRfc29jX2luZm9fZW51bV9kb3VibGUsIFwKKyAJLmdldCA9IHNuZF9zb2NfZGFwbV9nZXRfZW51bV9kb3VibGUsIFwKKyAJLnB1dCA9IHdtODk5NF9wdXRfaHBfZW51bSwgXAorICAJLnByaXZhdGVfdmFsdWUgPSAodW5zaWduZWQgbG9uZykmeGVudW0gfQorCitzdGF0aWMgaW50IHdtODk5NF9wdXRfaHBfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCWludCByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhcG1fcHV0X2VudW1fZG91YmxlKGtjb250cm9sLCB1Y29udHJvbCk7CisKKwl3bTg5OTRfdXBkYXRlX2NsYXNzX3coY29kZWMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBocGxfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9PVVRQVVRfTUlYRVJfMSwgOCwgMiwgaHBfbXV4X3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaHBsX211eCA9CisJV004OTk0X0hQX0VOVU0oIkxlZnQgSGVhZHBob25lIE11eCIsIGhwbF9lbnVtKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBocHJfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9PVVRQVVRfTUlYRVJfMiwgOCwgMiwgaHBfbXV4X3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaHByX211eCA9CisJV004OTk0X0hQX0VOVU0oIlJpZ2h0IEhlYWRwaG9uZSBNdXgiLCBocHJfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICphZGNfbXV4X3RleHRbXSA9IHsKKwkiQURDIiwKKwkiRE1JQyIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFkY19lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoMCwgMCwgMiwgYWRjX211eF90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkY2xfbXV4ID0KKwlTT0NfREFQTV9FTlVNX1ZJUlQoIkFEQ0wgTXV4IiwgYWRjX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWRjcl9tdXggPQorCVNPQ19EQVBNX0VOVU1fVklSVCgiQURDUiBNdXgiLCBhZGNfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBsZWZ0X3NwZWFrZXJfbWl4ZXJbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiREFDMiBTd2l0Y2giLCBXTTg5OTRfU1BFQUtFUl9NSVhFUiwgOSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIklucHV0IFN3aXRjaCIsIFdNODk5NF9TUEVBS0VSX01JWEVSLCA3LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiSU4xTFAgU3dpdGNoIiwgV004OTk0X1NQRUFLRVJfTUlYRVIsIDUsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJPdXRwdXQgU3dpdGNoIiwgV004OTk0X1NQRUFLRVJfTUlYRVIsIDMsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJEQUMxIFN3aXRjaCIsIFdNODk5NF9TUEVBS0VSX01JWEVSLCAxLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyByaWdodF9zcGVha2VyX21peGVyW10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkRBQzIgU3dpdGNoIiwgV004OTk0X1NQRUFLRVJfTUlYRVIsIDgsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJJbnB1dCBTd2l0Y2giLCBXTTg5OTRfU1BFQUtFUl9NSVhFUiwgNiwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIklOMVJQIFN3aXRjaCIsIFdNODk5NF9TUEVBS0VSX01JWEVSLCA0LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiT3V0cHV0IFN3aXRjaCIsIFdNODk5NF9TUEVBS0VSX01JWEVSLCAyLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiREFDMSBTd2l0Y2giLCBXTTg5OTRfU1BFQUtFUl9NSVhFUiwgMCwgMSwgMCksCit9OworCisvKiBEZWJ1Z2dpbmc7IGR1bXAgY2hpcCBzdGF0dXMgYWZ0ZXIgREFQTSB0cmFuc2l0aW9ucyAqLworc3RhdGljIGludCBwb3N0X2V2KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCSAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCWRldl9kYmcoY29kZWMtPmRldiwgIlNSQyBzdGF0dXM6ICV4XG4iLAorCQlzbmRfc29jX3JlYWQoY29kZWMsCisJCQkgICAgIFdNODk5NF9SQVRFX1NUQVRVUykpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmMWFkYzFsX21peFtdID0geworU09DX0RBUE1fU0lOR0xFKCJBREMvRE1JQyBTd2l0Y2giLCBXTTg5OTRfQUlGMV9BREMxX0xFRlRfTUlYRVJfUk9VVElORywKKwkJMSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkFJRjIgU3dpdGNoIiwgV004OTk0X0FJRjFfQURDMV9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZjFhZGMxcl9taXhbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiQURDL0RNSUMgU3dpdGNoIiwgV004OTk0X0FJRjFfQURDMV9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkxLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiQUlGMiBTd2l0Y2giLCBXTTg5OTRfQUlGMV9BREMxX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCTAsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZjJkYWMybF9taXhbXSA9IHsKK1NPQ19EQVBNX1NJTkdMRSgiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTk0X0RBQzJfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQk1LCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCBXTTg5OTRfREFDMl9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJBSUYyIFN3aXRjaCIsIFdNODk5NF9EQUMyX0xFRlRfTUlYRVJfUk9VVElORywKKwkJMiwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkFJRjEuMiBTd2l0Y2giLCBXTTg5OTRfREFDMl9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTEsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJBSUYxLjEgU3dpdGNoIiwgV004OTk0X0RBQzJfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYyZGFjMnJfbWl4W10gPSB7CitTT0NfREFQTV9TSU5HTEUoIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsIFdNODk5NF9EQUMyX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCTUsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsIFdNODk5NF9EQUMyX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCTQsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJBSUYyIFN3aXRjaCIsIFdNODk5NF9EQUMyX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCTIsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJBSUYxLjIgU3dpdGNoIiwgV004OTk0X0RBQzJfUklHSFRfTUlYRVJfUk9VVElORywKKwkJMSwgMSwgMCksCitTT0NfREFQTV9TSU5HTEUoIkFJRjEuMSBTd2l0Y2giLCBXTTg5OTRfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkwLCAxLCAwKSwKK307CisKKyNkZWZpbmUgV004OTk0X0NMQVNTX1dfU1dJVENIKHhuYW1lLCByZWcsIHNoaWZ0LCBtYXgsIGludmVydCkgXAorewkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgXAorCS5pbmZvID0gc25kX3NvY19pbmZvX3ZvbHN3LCBcCisJLmdldCA9IHNuZF9zb2NfZGFwbV9nZXRfdm9sc3csIC5wdXQgPSB3bTg5OTRfcHV0X2NsYXNzX3csIFwKKwkucHJpdmF0ZV92YWx1ZSA9ICBTT0NfU0lOR0xFX1ZBTFVFKHJlZywgc2hpZnQsIG1heCwgaW52ZXJ0KSB9CisKK3N0YXRpYyBpbnQgd204OTk0X3B1dF9jbGFzc193KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJaW50IHJldDsKKworCXJldCA9IHNuZF9zb2NfZGFwbV9wdXRfdm9sc3coa2NvbnRyb2wsIHVjb250cm9sKTsKKworCXdtODk5NF91cGRhdGVfY2xhc3Nfdyhjb2RlYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGFjMWxfbWl4W10gPSB7CitXTTg5OTRfQ0xBU1NfV19TV0lUQ0goIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsIFdNODk5NF9EQUMxX0xFRlRfTUlYRVJfUk9VVElORywKKwkJICAgICAgNSwgMSwgMCksCitXTTg5OTRfQ0xBU1NfV19TV0lUQ0goIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTk0X0RBQzFfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkgICAgICA0LCAxLCAwKSwKK1dNODk5NF9DTEFTU19XX1NXSVRDSCgiQUlGMiBTd2l0Y2giLCBXTTg5OTRfREFDMV9MRUZUX01JWEVSX1JPVVRJTkcsCisJCSAgICAgIDIsIDEsIDApLAorV004OTk0X0NMQVNTX1dfU1dJVENIKCJBSUYxLjIgU3dpdGNoIiwgV004OTk0X0RBQzFfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkgICAgICAxLCAxLCAwKSwKK1dNODk5NF9DTEFTU19XX1NXSVRDSCgiQUlGMS4xIFN3aXRjaCIsIFdNODk5NF9EQUMxX0xFRlRfTUlYRVJfUk9VVElORywKKwkJICAgICAgMCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGFjMXJfbWl4W10gPSB7CitXTTg5OTRfQ0xBU1NfV19TV0lUQ0goIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsIFdNODk5NF9EQUMxX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCSAgICAgIDUsIDEsIDApLAorV004OTk0X0NMQVNTX1dfU1dJVENIKCJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsIFdNODk5NF9EQUMxX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCSAgICAgIDQsIDEsIDApLAorV004OTk0X0NMQVNTX1dfU1dJVENIKCJBSUYyIFN3aXRjaCIsIFdNODk5NF9EQUMxX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCSAgICAgIDIsIDEsIDApLAorV004OTk0X0NMQVNTX1dfU1dJVENIKCJBSUYxLjIgU3dpdGNoIiwgV004OTk0X0RBQzFfUklHSFRfTUlYRVJfUk9VVElORywKKwkJICAgICAgMSwgMSwgMCksCitXTTg5OTRfQ0xBU1NfV19TV0lUQ0goIkFJRjEuMSBTd2l0Y2giLCBXTTg5OTRfREFDMV9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkgICAgICAwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpzaWRldG9uZV90ZXh0W10gPSB7CisJIkFEQy9ETUlDMSIsICJETUlDMiIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHNpZGV0b25lMV9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk0X1NJREVUT05FLCAwLCAyLCBzaWRldG9uZV90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNpZGV0b25lMV9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkxlZnQgU2lkZXRvbmUgTXV4Iiwgc2lkZXRvbmUxX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHNpZGV0b25lMl9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoV004OTk0X1NJREVUT05FLCAxLCAyLCBzaWRldG9uZV90ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNpZGV0b25lMl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIlJpZ2h0IFNpZGV0b25lIE11eCIsIHNpZGV0b25lMl9lbnVtKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFpZjFkYWNfdGV4dFtdID0geworCSJBSUYxREFDREFUIiwgIkFJRjNEQUNEQVQiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhaWYxZGFjX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF82LCAwLCAyLCBhaWYxZGFjX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmMWRhY19tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFJRjFEQUMgTXV4IiwgYWlmMWRhY19lbnVtKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFpZjJkYWNfdGV4dFtdID0geworCSJBSUYyREFDREFUIiwgIkFJRjNEQUNEQVQiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhaWYyZGFjX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF82LCAxLCAyLCBhaWYyZGFjX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmMmRhY19tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFJRjJEQUMgTXV4IiwgYWlmMmRhY19lbnVtKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFpZjJhZGNfdGV4dFtdID0geworCSJBSUYyQURDREFUIiwgIkFJRjNEQUNEQVQiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBhaWYyYWRjX2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF82LCAyLCAyLCBhaWYyYWRjX3RleHQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWlmMmFkY19tdXggPQorCVNPQ19EQVBNX0VOVU0oIkFJRjJBREMgTXV4IiwgYWlmMmFkY19lbnVtKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFpZjNhZGNfdGV4dFtdID0geworCSJBSUYxQURDREFUIiwgIkFJRjJBRENEQVQiLCAiQUlGMkRBQ0RBVCIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIGFpZjNhZGNfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzYsIDMsIDMsIGFpZjNhZGNfdGV4dCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYzYWRjX211eCA9CisJU09DX0RBUE1fRU5VTSgiQUlGM0FEQyBNdXgiLCBhaWYzYWRjX2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204OTk0X2RhcG1fd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX0lOUFVUKCJETUlDMURBVCIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJETUlDMkRBVCIpLAorCitTTkRfU09DX0RBUE1fU1VQUExZKCJDTEtfU1lTIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBjbGtfc3lzX2V2ZW50LAorCQkgICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLAorCitTTkRfU09DX0RBUE1fU1VQUExZKCJEU1AxQ0xLIiwgV004OTk0X0NMT0NLSU5HXzEsIDMsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1NVUFBMWSgiRFNQMkNMSyIsIFdNODk5NF9DTE9DS0lOR18xLCAyLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9TVVBQTFkoIkRTUElOVENMSyIsIFdNODk5NF9DTE9DS0lOR18xLCAxLCAwLCBOVUxMLCAwKSwKKworU05EX1NPQ19EQVBNX1NVUFBMWSgiQUlGMUNMSyIsIFdNODk5NF9BSUYxX0NMT0NLSU5HXzEsIDAsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1NVUFBMWSgiQUlGMkNMSyIsIFdNODk5NF9BSUYyX0NMT0NLSU5HXzEsIDAsIDAsIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQzFMIiwgIkFJRjEgQ2FwdHVyZSIsCisJCSAgICAgMCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgOSwgMCksCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQzFSIiwgIkFJRjEgQ2FwdHVyZSIsCisJCSAgICAgMCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgOCwgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYxREFDMUwiLCBOVUxMLCAwLAorCQkgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgOSwgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYxREFDMVIiLCBOVUxMLCAwLAorCQkgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgOCwgMCksCisKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxQURDMkwiLCAiQUlGMSBDYXB0dXJlIiwKKwkJICAgICAwLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCAxMSwgMCksCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQzJSIiwgIkFJRjEgQ2FwdHVyZSIsCisJCSAgICAgMCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMTAsIDApLAorU05EX1NPQ19EQVBNX0FJRl9JTigiQUlGMURBQzJMIiwgTlVMTCwgMCwKKwkJICAgIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDExLCAwKSwKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjFEQUMyUiIsIE5VTEwsIDAsCisJCSAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAxMCwgMCksCisKK1NORF9TT0NfREFQTV9NSVhFUigiQUlGMUFEQzFMIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBhaWYxYWRjMWxfbWl4LCBBUlJBWV9TSVpFKGFpZjFhZGMxbF9taXgpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiQUlGMUFEQzFSIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBhaWYxYWRjMXJfbWl4LCBBUlJBWV9TSVpFKGFpZjFhZGMxcl9taXgpKSwKKworU05EX1NPQ19EQVBNX01JWEVSKCJBSUYyREFDMkwgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAgIGFpZjJkYWMybF9taXgsIEFSUkFZX1NJWkUoYWlmMmRhYzJsX21peCkpLAorU05EX1NPQ19EQVBNX01JWEVSKCJBSUYyREFDMlIgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSAgIGFpZjJkYWMycl9taXgsIEFSUkFZX1NJWkUoYWlmMmRhYzJyX21peCkpLAorCitTTkRfU09DX0RBUE1fTVVYKCJMZWZ0IFNpZGV0b25lIiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmc2lkZXRvbmUxX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJSaWdodCBTaWRldG9uZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJnNpZGV0b25lMl9tdXgpLAorCitTTkRfU09DX0RBUE1fTUlYRVIoIkRBQzFMIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBkYWMxbF9taXgsIEFSUkFZX1NJWkUoZGFjMWxfbWl4KSksCitTTkRfU09DX0RBUE1fTUlYRVIoIkRBQzFSIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBkYWMxcl9taXgsIEFSUkFZX1NJWkUoZGFjMXJfbWl4KSksCisKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYyQURDTCIsIE5VTEwsIDAsCisJCSAgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMTMsIDApLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjJBRENSIiwgTlVMTCwgMCwKKwkJICAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCAxMiwgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYyREFDTCIsIE5VTEwsIDAsCisJCSAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAxMywgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYyREFDUiIsIE5VTEwsIDAsCisJCSAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAxMiwgMCksCisKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjFEQUNEQVQiLCAiQUlGMSBQbGF5YmFjayIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYyREFDREFUIiwgIkFJRjIgUGxheWJhY2siLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjJBRENEQVQiLCAiQUlGMiBDYXB0dXJlIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKworU05EX1NPQ19EQVBNX01VWCgiQUlGMURBQyBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZhaWYxZGFjX211eCksCitTTkRfU09DX0RBUE1fTVVYKCJBSUYyREFDIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmFpZjJkYWNfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIkFJRjJBREMgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmMmFkY19tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiQUlGM0FEQyBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZhaWYzYWRjX211eCksCisKK1NORF9TT0NfREFQTV9BSUZfSU4oIkFJRjNEQUNEQVQiLCAiQUlGMyBQbGF5YmFjayIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCitTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYzQURDREFUIiwgIkFJRjMgQ2FwdHVyZSIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCisKK1NORF9TT0NfREFQTV9TVVBQTFkoIlRPQ0xLIiwgV004OTk0X0NMT0NLSU5HXzEsIDQsIDAsIE5VTEwsIDApLAorCitTTkRfU09DX0RBUE1fQURDKCJETUlDMkwiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCA1LCAwKSwKK1NORF9TT0NfREFQTV9BREMoIkRNSUMyUiIsIE5VTEwsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDQsIDApLAorU05EX1NPQ19EQVBNX0FEQygiRE1JQzFMIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMywgMCksCitTTkRfU09DX0RBUE1fQURDKCJETUlDMVIiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCAyLCAwKSwKKworLyogUG93ZXIgaXMgZG9uZSB3aXRoIHRoZSBtdXhlcyBzaW5jZSB0aGUgQURDIHBvd2VyIGFsc28gY29udHJvbHMgdGhlCisgKiBkb3duc2FtcGxpbmcgY2hhaW4sIHRoZSBjaGlwIHdpbGwgYXV0b21hdGljYWxseSBtYW5hZ2UgdGhlIGFuYWxvZ3VlCisgKiBzcGVjaWZpYyBwb3J0aW9ucy4KKyAqLworU05EX1NPQ19EQVBNX0FEQygiQURDTCIsIE5VTEwsIFNORF9TT0NfTk9QTSwgMSwgMCksCitTTkRfU09DX0RBUE1fQURDKCJBRENSIiwgTlVMTCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKworU05EX1NPQ19EQVBNX01VWCgiQURDTCBNdXgiLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCAxLCAwLCAmYWRjbF9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiQURDUiBNdXgiLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCAwLCAwLCAmYWRjcl9tdXgpLAorCitTTkRfU09DX0RBUE1fREFDKCJEQUMyTCIsIE5VTEwsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDMsIDApLAorU05EX1NPQ19EQVBNX0RBQygiREFDMlIiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAyLCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIkRBQzFMIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMSwgMCksCitTTkRfU09DX0RBUE1fREFDKCJEQUMxUiIsIE5VTEwsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDAsIDApLAorCitTTkRfU09DX0RBUE1fTVVYKCJMZWZ0IEhlYWRwaG9uZSBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZocGxfbXV4KSwKK1NORF9TT0NfREFQTV9NVVgoIlJpZ2h0IEhlYWRwaG9uZSBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsICZocHJfbXV4KSwKKworU05EX1NPQ19EQVBNX01JWEVSKCJTUEtMIiwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfMywgOCwgMCwKKwkJICAgbGVmdF9zcGVha2VyX21peGVyLCBBUlJBWV9TSVpFKGxlZnRfc3BlYWtlcl9taXhlcikpLAorU05EX1NPQ19EQVBNX01JWEVSKCJTUEtSIiwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfMywgOSwgMCwKKwkJICAgcmlnaHRfc3BlYWtlcl9taXhlciwgQVJSQVlfU0laRShyaWdodF9zcGVha2VyX21peGVyKSksCisKK1NORF9TT0NfREFQTV9QT1NUKCJEZWJ1ZyBsb2ciLCBwb3N0X2V2KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGludGVyY29uW10gPSB7CisKKwl7ICJDTEtfU1lTIiwgTlVMTCwgIkFJRjFDTEsiLCBjaGVja19jbGtfc3lzIH0sCisJeyAiQ0xLX1NZUyIsIE5VTEwsICJBSUYyQ0xLIiwgY2hlY2tfY2xrX3N5cyB9LAorCisJeyAiRFNQMUNMSyIsIE5VTEwsICJDTEtfU1lTIiB9LAorCXsgIkRTUDJDTEsiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKwl7ICJEU1BJTlRDTEsiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKworCXsgIkFJRjFBREMxTCIsIE5VTEwsICJBSUYxQ0xLIiB9LAorCXsgIkFJRjFBREMxTCIsIE5VTEwsICJEU1AxQ0xLIiB9LAorCXsgIkFJRjFBREMxUiIsIE5VTEwsICJBSUYxQ0xLIiB9LAorCXsgIkFJRjFBREMxUiIsIE5VTEwsICJEU1AxQ0xLIiB9LAorCXsgIkFJRjFBREMxUiIsIE5VTEwsICJEU1BJTlRDTEsiIH0sCisKKwl7ICJBSUYxREFDMUwiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBSUYxREFDMUwiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJBSUYxREFDMVIiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBSUYxREFDMVIiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJBSUYxREFDMVIiLCBOVUxMLCAiRFNQSU5UQ0xLIiB9LAorCisJeyAiQUlGMUFEQzJMIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiQUlGMUFEQzJMIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiQUlGMUFEQzJSIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiQUlGMUFEQzJSIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiQUlGMUFEQzJSIiwgTlVMTCwgIkRTUElOVENMSyIgfSwKKworCXsgIkFJRjFEQUMyTCIsIE5VTEwsICJBSUYxQ0xLIiB9LAorCXsgIkFJRjFEQUMyTCIsIE5VTEwsICJEU1AxQ0xLIiB9LAorCXsgIkFJRjFEQUMyUiIsIE5VTEwsICJBSUYxQ0xLIiB9LAorCXsgIkFJRjFEQUMyUiIsIE5VTEwsICJEU1AxQ0xLIiB9LAorCXsgIkFJRjFEQUMyUiIsIE5VTEwsICJEU1BJTlRDTEsiIH0sCisKKwl7ICJBSUYyQURDTCIsIE5VTEwsICJBSUYyQ0xLIiB9LAorCXsgIkFJRjJBRENMIiwgTlVMTCwgIkRTUDJDTEsiIH0sCisJeyAiQUlGMkFEQ1IiLCBOVUxMLCAiQUlGMkNMSyIgfSwKKwl7ICJBSUYyQURDUiIsIE5VTEwsICJEU1AyQ0xLIiB9LAorCXsgIkFJRjJBRENSIiwgTlVMTCwgIkRTUElOVENMSyIgfSwKKworCXsgIkFJRjJEQUNMIiwgTlVMTCwgIkFJRjJDTEsiIH0sCisJeyAiQUlGMkRBQ0wiLCBOVUxMLCAiRFNQMkNMSyIgfSwKKwl7ICJBSUYyREFDUiIsIE5VTEwsICJBSUYyQ0xLIiB9LAorCXsgIkFJRjJEQUNSIiwgTlVMTCwgIkRTUDJDTEsiIH0sCisJeyAiQUlGMkRBQ1IiLCBOVUxMLCAiRFNQSU5UQ0xLIiB9LAorCisJeyAiRE1JQzFMIiwgTlVMTCwgIkRNSUMxREFUIiB9LAorCXsgIkRNSUMxTCIsIE5VTEwsICJDTEtfU1lTIiB9LAorCXsgIkRNSUMxUiIsIE5VTEwsICJETUlDMURBVCIgfSwKKwl7ICJETUlDMVIiLCBOVUxMLCAiQ0xLX1NZUyIgfSwKKwl7ICJETUlDMkwiLCBOVUxMLCAiRE1JQzJEQVQiIH0sCisJeyAiRE1JQzJMIiwgTlVMTCwgIkNMS19TWVMiIH0sCisJeyAiRE1JQzJSIiwgTlVMTCwgIkRNSUMyREFUIiB9LAorCXsgIkRNSUMyUiIsIE5VTEwsICJDTEtfU1lTIiB9LAorCisJeyAiQURDTCIsIE5VTEwsICJBSUYxQ0xLIiB9LAorCXsgIkFEQ0wiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJBRENMIiwgTlVMTCwgIkRTUElOVENMSyIgfSwKKworCXsgIkFEQ1IiLCBOVUxMLCAiQUlGMUNMSyIgfSwKKwl7ICJBRENSIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiQURDUiIsIE5VTEwsICJEU1BJTlRDTEsiIH0sCisKKwl7ICJBRENMIE11eCIsICJBREMiLCAiQURDTCIgfSwKKwl7ICJBRENMIE11eCIsICJETUlDIiwgIkRNSUMxTCIgfSwKKwl7ICJBRENSIE11eCIsICJBREMiLCAiQURDUiIgfSwKKwl7ICJBRENSIE11eCIsICJETUlDIiwgIkRNSUMxUiIgfSwKKworCXsgIkRBQzFMIiwgTlVMTCwgIkFJRjFDTEsiIH0sCisJeyAiREFDMUwiLCBOVUxMLCAiRFNQMUNMSyIgfSwKKwl7ICJEQUMxTCIsIE5VTEwsICJEU1BJTlRDTEsiIH0sCisKKwl7ICJEQUMxUiIsIE5VTEwsICJBSUYxQ0xLIiB9LAorCXsgIkRBQzFSIiwgTlVMTCwgIkRTUDFDTEsiIH0sCisJeyAiREFDMVIiLCBOVUxMLCAiRFNQSU5UQ0xLIiB9LAorCisJeyAiREFDMkwiLCBOVUxMLCAiQUlGMkNMSyIgfSwKKwl7ICJEQUMyTCIsIE5VTEwsICJEU1AyQ0xLIiB9LAorCXsgIkRBQzJMIiwgTlVMTCwgIkRTUElOVENMSyIgfSwKKworCXsgIkRBQzJSIiwgTlVMTCwgIkFJRjJEQUNSIiB9LAorCXsgIkRBQzJSIiwgTlVMTCwgIkFJRjJDTEsiIH0sCisJeyAiREFDMlIiLCBOVUxMLCAiRFNQMkNMSyIgfSwKKwl7ICJEQUMyUiIsIE5VTEwsICJEU1BJTlRDTEsiIH0sCisKKwl7ICJUT0NMSyIsIE5VTEwsICJDTEtfU1lTIiB9LAorCisJLyogQUlGMSBvdXRwdXRzICovCisJeyAiQUlGMUFEQzFMIiwgTlVMTCwgIkFJRjFBREMxTCBNaXhlciIgfSwKKwl7ICJBSUYxQURDMUwgTWl4ZXIiLCAiQURDL0RNSUMgU3dpdGNoIiwgIkFEQ0wgTXV4IiB9LAorCXsgIkFJRjFBREMxTCBNaXhlciIsICJBSUYyIFN3aXRjaCIsICJBSUYyREFDTCIgfSwKKworCXsgIkFJRjFBREMxUiIsIE5VTEwsICJBSUYxQURDMVIgTWl4ZXIiIH0sCisJeyAiQUlGMUFEQzFSIE1peGVyIiwgIkFEQy9ETUlDIFN3aXRjaCIsICJBRENSIE11eCIgfSwKKwl7ICJBSUYxQURDMVIgTWl4ZXIiLCAiQUlGMiBTd2l0Y2giLCAiQUlGMkRBQ1IiIH0sCisKKwkvKiBQaW4gbGV2ZWwgcm91dGluZyBmb3IgQUlGMyAqLworCXsgIkFJRjFEQUMxTCIsIE5VTEwsICJBSUYxREFDIE11eCIgfSwKKwl7ICJBSUYxREFDMVIiLCBOVUxMLCAiQUlGMURBQyBNdXgiIH0sCisJeyAiQUlGMURBQzJMIiwgTlVMTCwgIkFJRjFEQUMgTXV4IiB9LAorCXsgIkFJRjFEQUMyUiIsIE5VTEwsICJBSUYxREFDIE11eCIgfSwKKworCXsgIkFJRjJEQUNMIiwgTlVMTCwgIkFJRjJEQUMgTXV4IiB9LAorCXsgIkFJRjJEQUNSIiwgTlVMTCwgIkFJRjJEQUMgTXV4IiB9LAorCisJeyAiQUlGMURBQyBNdXgiLCAiQUlGMURBQ0RBVCIsICJBSUYxREFDREFUIiB9LAorCXsgIkFJRjFEQUMgTXV4IiwgIkFJRjNEQUNEQVQiLCAiQUlGM0RBQ0RBVCIgfSwKKwl7ICJBSUYyREFDIE11eCIsICJBSUYyREFDREFUIiwgIkFJRjJEQUNEQVQiIH0sCisJeyAiQUlGMkRBQyBNdXgiLCAiQUlGM0RBQ0RBVCIsICJBSUYzREFDREFUIiB9LAorCXsgIkFJRjJBREMgTXV4IiwgIkFJRjJBRENEQVQiLCAiQUlGMkFEQ0wiIH0sCisJeyAiQUlGMkFEQyBNdXgiLCAiQUlGMkFEQ0RBVCIsICJBSUYyQURDUiIgfSwKKwl7ICJBSUYyQURDIE11eCIsICJBSUYzREFDREFUIiwgIkFJRjNBRENEQVQiIH0sCisKKwkvKiBEQUMxIGlucHV0cyAqLworCXsgIkRBQzFMIiwgTlVMTCwgIkRBQzFMIE1peGVyIiB9LAorCXsgIkRBQzFMIE1peGVyIiwgIkFJRjIgU3dpdGNoIiwgIkFJRjJEQUNMIiB9LAorCXsgIkRBQzFMIE1peGVyIiwgIkFJRjEuMiBTd2l0Y2giLCAiQUlGMURBQzJMIiB9LAorCXsgIkRBQzFMIE1peGVyIiwgIkFJRjEuMSBTd2l0Y2giLCAiQUlGMURBQzFMIiB9LAorCXsgIkRBQzFMIE1peGVyIiwgIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgIkxlZnQgU2lkZXRvbmUiIH0sCisJeyAiREFDMUwgTWl4ZXIiLCAiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgIlJpZ2h0IFNpZGV0b25lIiB9LAorCisJeyAiREFDMVIiLCBOVUxMLCAiREFDMVIgTWl4ZXIiIH0sCisJeyAiREFDMVIgTWl4ZXIiLCAiQUlGMiBTd2l0Y2giLCAiQUlGMkRBQ1IiIH0sCisJeyAiREFDMVIgTWl4ZXIiLCAiQUlGMS4yIFN3aXRjaCIsICJBSUYxREFDMlIiIH0sCisJeyAiREFDMVIgTWl4ZXIiLCAiQUlGMS4xIFN3aXRjaCIsICJBSUYxREFDMVIiIH0sCisJeyAiREFDMVIgTWl4ZXIiLCAiTGVmdCBTaWRldG9uZSBTd2l0Y2giLCAiTGVmdCBTaWRldG9uZSIgfSwKKwl7ICJEQUMxUiBNaXhlciIsICJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCAiUmlnaHQgU2lkZXRvbmUiIH0sCisKKwkvKiBEQUMyL0FJRjIgb3V0cHV0cyAgKi8KKwl7ICJBSUYyQURDTCIsIE5VTEwsICJBSUYyREFDMkwgTWl4ZXIiIH0sCisJeyAiREFDMkwiLCBOVUxMLCAiQUlGMkRBQzJMIE1peGVyIiB9LAorCXsgIkFJRjJEQUMyTCBNaXhlciIsICJBSUYyIFN3aXRjaCIsICJBSUYyREFDTCIgfSwKKwl7ICJBSUYyREFDMkwgTWl4ZXIiLCAiQUlGMS4yIFN3aXRjaCIsICJBSUYxREFDMkwiIH0sCisJeyAiQUlGMkRBQzJMIE1peGVyIiwgIkFJRjEuMSBTd2l0Y2giLCAiQUlGMURBQzFMIiB9LAorCXsgIkFJRjJEQUMyTCBNaXhlciIsICJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsICJMZWZ0IFNpZGV0b25lIiB9LAorCXsgIkFJRjJEQUMyTCBNaXhlciIsICJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCAiUmlnaHQgU2lkZXRvbmUiIH0sCisKKwl7ICJBSUYyQURDUiIsIE5VTEwsICJBSUYyREFDMlIgTWl4ZXIiIH0sCisJeyAiREFDMlIiLCBOVUxMLCAiQUlGMkRBQzJSIE1peGVyIiB9LAorCXsgIkFJRjJEQUMyUiBNaXhlciIsICJBSUYyIFN3aXRjaCIsICJBSUYyREFDUiIgfSwKKwl7ICJBSUYyREFDMlIgTWl4ZXIiLCAiQUlGMS4yIFN3aXRjaCIsICJBSUYxREFDMlIiIH0sCisJeyAiQUlGMkRBQzJSIE1peGVyIiwgIkFJRjEuMSBTd2l0Y2giLCAiQUlGMURBQzFSIiB9LAorCXsgIkFJRjJEQUMyUiBNaXhlciIsICJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsICJMZWZ0IFNpZGV0b25lIiB9LAorCXsgIkFJRjJEQUMyUiBNaXhlciIsICJSaWdodCBTaWRldG9uZSBTd2l0Y2giLCAiUmlnaHQgU2lkZXRvbmUiIH0sCisKKwl7ICJBSUYyQURDREFUIiwgTlVMTCwgIkFJRjJBREMgTXV4IiB9LAorCisJLyogQUlGMyBvdXRwdXQgKi8KKwl7ICJBSUYzQURDREFUIiwgIkFJRjFBRENEQVQiLCAiQUlGMUFEQzFMIiB9LAorCXsgIkFJRjNBRENEQVQiLCAiQUlGMUFEQ0RBVCIsICJBSUYxQURDMVIiIH0sCisJeyAiQUlGM0FEQ0RBVCIsICJBSUYxQURDREFUIiwgIkFJRjFBREMyTCIgfSwKKwl7ICJBSUYzQURDREFUIiwgIkFJRjFBRENEQVQiLCAiQUlGMUFEQzJSIiB9LAorCXsgIkFJRjNBRENEQVQiLCAiQUlGMkFEQ0RBVCIsICJBSUYyQURDTCIgfSwKKwl7ICJBSUYzQURDREFUIiwgIkFJRjJBRENEQVQiLCAiQUlGMkFEQ1IiIH0sCisJeyAiQUlGM0FEQ0RBVCIsICJBSUYyREFDREFUIiwgIkFJRjJEQUNMIiB9LAorCXsgIkFJRjNBRENEQVQiLCAiQUlGMkRBQ0RBVCIsICJBSUYyREFDUiIgfSwKKworCS8qIFNpZGV0b25lICovCisJeyAiTGVmdCBTaWRldG9uZSIsICJBREMvRE1JQzEiLCAiQURDTCBNdXgiIH0sCisJeyAiTGVmdCBTaWRldG9uZSIsICJETUlDMiIsICJETUlDMkwiIH0sCisJeyAiUmlnaHQgU2lkZXRvbmUiLCAiQURDL0RNSUMxIiwgIkFEQ1IgTXV4IiB9LAorCXsgIlJpZ2h0IFNpZGV0b25lIiwgIkRNSUMyIiwgIkRNSUMyUiIgfSwKKworCS8qIE91dHB1dCBzdGFnZXMgKi8KKwl7ICJMZWZ0IE91dHB1dCBNaXhlciIsICJEQUMgU3dpdGNoIiwgIkRBQzFMIiB9LAorCXsgIlJpZ2h0IE91dHB1dCBNaXhlciIsICJEQUMgU3dpdGNoIiwgIkRBQzFSIiB9LAorCisJeyAiU1BLTCIsICJEQUMxIFN3aXRjaCIsICJEQUMxTCIgfSwKKwl7ICJTUEtMIiwgIkRBQzIgU3dpdGNoIiwgIkRBQzJMIiB9LAorCisJeyAiU1BLUiIsICJEQUMxIFN3aXRjaCIsICJEQUMxUiIgfSwKKwl7ICJTUEtSIiwgIkRBQzIgU3dpdGNoIiwgIkRBQzJSIiB9LAorCisJeyAiTGVmdCBIZWFkcGhvbmUgTXV4IiwgIkRBQyIsICJEQUMxTCIgfSwKKwl7ICJSaWdodCBIZWFkcGhvbmUgTXV4IiwgIkRBQyIsICJEQUMxUiIgfSwKK307CisKKy8qIFRoZSBzaXplIGluIGJpdHMgb2YgdGhlIEZMTCBkaXZpZGUgbXVsdGlwbGllZCBieSAxMAorICogdG8gYWxsb3cgcm91bmRpbmcgbGF0ZXIgKi8KKyNkZWZpbmUgRklYRURfRkxMX1NJWkUgKCgxIDw8IDE2KSAqIDEwKQorCitzdHJ1Y3QgZmxsX2RpdiB7CisJdTE2IG91dGRpdjsKKwl1MTYgbjsKKwl1MTYgazsKKwl1MTYgY2xrX3JlZl9kaXY7CisJdTE2IGZsbF9mcmF0aW87Cit9OworCitzdGF0aWMgaW50IHdtODk5NF9nZXRfZmxsX2NvbmZpZyhzdHJ1Y3QgZmxsX2RpdiAqZmxsLAorCQkJCSBpbnQgZnJlcV9pbiwgaW50IGZyZXFfb3V0KQoreworCXU2NCBLcGFydDsKKwl1bnNpZ25lZCBpbnQgSywgTmRpdiwgTm1vZDsKKworCXByX2RlYnVnKCJGTEwgaW5wdXQ9JWRIeiwgb3V0cHV0PSVkSHpcbiIsIGZyZXFfaW4sIGZyZXFfb3V0KTsKKworCS8qIFNjYWxlIHRoZSBpbnB1dCBmcmVxdWVuY3kgZG93biB0byA8PSAxMy41TUh6ICovCisJZmxsLT5jbGtfcmVmX2RpdiA9IDA7CisJd2hpbGUgKGZyZXFfaW4gPiAxMzUwMDAwMCkgeworCQlmbGwtPmNsa19yZWZfZGl2Kys7CisJCWZyZXFfaW4gLz0gMjsKKworCQlpZiAoZmxsLT5jbGtfcmVmX2RpdiA+IDMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcHJfZGVidWcoIkNMS19SRUZfRElWPSVkLCBGcmVmPSVkSHpcbiIsIGZsbC0+Y2xrX3JlZl9kaXYsIGZyZXFfaW4pOworCisJLyogU2NhbGUgdGhlIG91dHB1dCB0byBnaXZlIDkwTUh6PD1GdmNvPD0xMDBNSHogKi8KKwlmbGwtPm91dGRpdiA9IDM7CisJd2hpbGUgKGZyZXFfb3V0ICogKGZsbC0+b3V0ZGl2ICsgMSkgPCA5MDAwMDAwMCkgeworCQlmbGwtPm91dGRpdisrOworCQlpZiAoZmxsLT5vdXRkaXYgPiA2MykKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlmcmVxX291dCAqPSBmbGwtPm91dGRpdiArIDE7CisJcHJfZGVidWcoIk9VVERJVj0lZCwgRnZjbz0lZEh6XG4iLCBmbGwtPm91dGRpdiwgZnJlcV9vdXQpOworCisJaWYgKGZyZXFfaW4gPiAxMDAwMDAwKSB7CisJCWZsbC0+ZmxsX2ZyYXRpbyA9IDA7CisJfSBlbHNlIHsKKwkJZmxsLT5mbGxfZnJhdGlvID0gMzsKKwkJZnJlcV9pbiAqPSA4OworCX0KKwlwcl9kZWJ1ZygiRkxMX0ZSQVRJTz0lZCwgRnJlZj0lZEh6XG4iLCBmbGwtPmZsbF9mcmF0aW8sIGZyZXFfaW4pOworCisJLyogTm93LCBjYWxjdWxhdGUgTi5LICovCisJTmRpdiA9IGZyZXFfb3V0IC8gZnJlcV9pbjsKKworCWZsbC0+biA9IE5kaXY7CisJTm1vZCA9IGZyZXFfb3V0ICUgZnJlcV9pbjsKKwlwcl9kZWJ1ZygiTm1vZD0lZFxuIiwgTm1vZCk7CisKKwkvKiBDYWxjdWxhdGUgZnJhY3Rpb25hbCBwYXJ0IC0gc2NhbGUgdXAgc28gd2UgY2FuIHJvdW5kLiAqLworCUtwYXJ0ID0gRklYRURfRkxMX1NJWkUgKiAobG9uZyBsb25nKU5tb2Q7CisKKwlkb19kaXYoS3BhcnQsIGZyZXFfaW4pOworCisJSyA9IEtwYXJ0ICYgMHhGRkZGRkZGRjsKKworCWlmICgoSyAlIDEwKSA+PSA1KQorCQlLICs9IDU7CisKKwkvKiBNb3ZlIGRvd24gdG8gcHJvcGVyIHJhbmdlIG5vdyByb3VuZGluZyBpcyBkb25lICovCisJZmxsLT5rID0gSyAvIDEwOworCisJcHJfZGVidWcoIk49JXggSz0leFxuIiwgZmxsLT5uLCBmbGwtPmspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X3NldF9mbGwoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBpZCwgaW50IHNyYywKKwkJCSAgdW5zaWduZWQgaW50IGZyZXFfaW4sIHVuc2lnbmVkIGludCBmcmVxX291dCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmVnX29mZnNldCwgcmV0OworCXN0cnVjdCBmbGxfZGl2IGZsbDsKKwl1MTYgcmVnLCBhaWYxLCBhaWYyOworCisJYWlmMSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk0X0FJRjFfQ0xPQ0tJTkdfMSkKKwkJJiBXTTg5OTRfQUlGMUNMS19FTkE7CisKKwlhaWYyID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTRfQUlGMl9DTE9DS0lOR18xKQorCQkmIFdNODk5NF9BSUYyQ0xLX0VOQTsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIFdNODk5NF9GTEwxOgorCQlyZWdfb2Zmc2V0ID0gMDsKKwkJaWQgPSAwOworCQlicmVhazsKKwljYXNlIFdNODk5NF9GTEwyOgorCQlyZWdfb2Zmc2V0ID0gMHgyMDsKKwkJaWQgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBBcmUgd2UgY2hhbmdpbmcgYW55dGhpbmc/ICovCisJaWYgKHdtODk5NC0+ZmxsW2lkXS5zcmMgPT0gc3JjICYmCisJICAgIHdtODk5NC0+ZmxsW2lkXS5pbiA9PSBmcmVxX2luICYmIHdtODk5NC0+ZmxsW2lkXS5vdXQgPT0gZnJlcV9vdXQpCisJCXJldHVybiAwOworCisJLyogSWYgd2UncmUgc3RvcHBpbmcgdGhlIEZMTCByZWRvIHRoZSBvbGQgY29uZmlnIC0gbm8KKwkgKiByZWdpc3RlcnMgd2lsbCBhY3R1YWxseSBiZSB3cml0dGVuIGJ1dCB3ZSBhdm9pZCBHQ0MgZmxvdworCSAqIGFuYWx5c2lzIGJ1Z3Mgc3Bld2luZyB3YXJuaW5ncy4KKwkgKi8KKwlpZiAoZnJlcV9vdXQpCisJCXJldCA9IHdtODk5NF9nZXRfZmxsX2NvbmZpZygmZmxsLCBmcmVxX2luLCBmcmVxX291dCk7CisJZWxzZQorCQlyZXQgPSB3bTg5OTRfZ2V0X2ZsbF9jb25maWcoJmZsbCwgd204OTk0LT5mbGxbaWRdLmluLAorCQkJCQkgICAgd204OTk0LT5mbGxbaWRdLm91dCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBHYXRlIHRoZSBBSUYgY2xvY2tzIHdoaWxlIHdlIHJlY2xvY2sgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9DTE9DS0lOR18xLAorCQkJICAgIFdNODk5NF9BSUYxQ0xLX0VOQSwgMCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjJfQ0xPQ0tJTkdfMSwKKwkJCSAgICBXTTg5OTRfQUlGMkNMS19FTkEsIDApOworCisJLyogV2UgYWx3YXlzIG5lZWQgdG8gZGlzYWJsZSB0aGUgRkxMIHdoaWxlIHJlY29uZmlndXJpbmcgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfRkxMMV9DT05UUk9MXzEgKyByZWdfb2Zmc2V0LAorCQkJICAgIFdNODk5NF9GTEwxX0VOQSwgMCk7CisKKwlyZWcgPSAoZmxsLm91dGRpdiA8PCBXTTg5OTRfRkxMMV9PVVRESVZfU0hJRlQpIHwKKwkJKGZsbC5mbGxfZnJhdGlvIDw8IFdNODk5NF9GTEwxX0ZSQVRJT19TSElGVCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0ZMTDFfQ09OVFJPTF8yICsgcmVnX29mZnNldCwKKwkJCSAgICBXTTg5OTRfRkxMMV9PVVRESVZfTUFTSyB8CisJCQkgICAgV004OTk0X0ZMTDFfRlJBVElPX01BU0ssIHJlZyk7CisKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTRfRkxMMV9DT05UUk9MXzMgKyByZWdfb2Zmc2V0LCBmbGwuayk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfRkxMMV9DT05UUk9MXzQgKyByZWdfb2Zmc2V0LAorCQkJICAgIFdNODk5NF9GTEwxX05fTUFTSywKKwkJCQkgICAgZmxsLm4gPDwgV004OTk0X0ZMTDFfTl9TSElGVCk7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfRkxMMV9DT05UUk9MXzUgKyByZWdfb2Zmc2V0LAorCQkJICAgIFdNODk5NF9GTEwxX1JFRkNMS19ESVZfTUFTSywKKwkJCSAgICBmbGwuY2xrX3JlZl9kaXYgPDwgV004OTk0X0ZMTDFfUkVGQ0xLX0RJVl9TSElGVCk7CisKKwkvKiBFbmFibGUgKHdpdGggZnJhY3Rpb25hbCBtb2RlIGlmIHJlcXVpcmVkKSAqLworCWlmIChmcmVxX291dCkgeworCQlpZiAoZmxsLmspCisJCQlyZWcgPSBXTTg5OTRfRkxMMV9FTkEgfCBXTTg5OTRfRkxMMV9GUkFDOworCQllbHNlCisJCQlyZWcgPSBXTTg5OTRfRkxMMV9FTkE7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9GTEwxX0NPTlRST0xfMSArIHJlZ19vZmZzZXQsCisJCQkJICAgIFdNODk5NF9GTEwxX0VOQSB8IFdNODk5NF9GTEwxX0ZSQUMsCisJCQkJICAgIHJlZyk7CisJfQorCisJd204OTk0LT5mbGxbaWRdLmluID0gZnJlcV9pbjsKKwl3bTg5OTQtPmZsbFtpZF0ub3V0ID0gZnJlcV9vdXQ7CisKKwkvKiBFbmFibGUgYW55IGdhdGVkIEFJRiBjbG9ja3MgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9DTE9DS0lOR18xLAorCQkJICAgIFdNODk5NF9BSUYxQ0xLX0VOQSwgYWlmMSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjJfQ0xPQ0tJTkdfMSwKKwkJCSAgICBXTTg5OTRfQUlGMkNMS19FTkEsIGFpZjIpOworCisJY29uZmlndXJlX2Nsb2NrKGNvZGVjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5NF9zZXRfZGFpX3N5c2NsayhzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwkJaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGRhaS0+aWQpIHsKKwljYXNlIDE6CisJY2FzZSAyOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIEFJRjMgc2hhcmVzIGNsb2NraW5nIHdpdGggQUlGMS8yICovCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoY2xrX2lkKSB7CisJY2FzZSBXTTg5OTRfU1lTQ0xLX01DTEsxOgorCQl3bTg5OTQtPnN5c2Nsa1tkYWktPmlkIC0gMV0gPSBXTTg5OTRfU1lTQ0xLX01DTEsxOworCQl3bTg5OTQtPm1jbGtbMF0gPSBmcmVxOworCQlkZXZfZGJnKGRhaS0+ZGV2LCAiQUlGJWQgdXNpbmcgTUNMSzEgYXQgJXVIelxuIiwKKwkJCWRhaS0+aWQsIGZyZXEpOworCQlicmVhazsKKworCWNhc2UgV004OTk0X1NZU0NMS19NQ0xLMjoKKwkJLyogVE9ETzogU2V0IEdQSU8gQUYgKi8KKwkJd204OTk0LT5zeXNjbGtbZGFpLT5pZCAtIDFdID0gV004OTk0X1NZU0NMS19NQ0xLMjsKKwkJd204OTk0LT5tY2xrWzFdID0gZnJlcTsKKwkJZGV2X2RiZyhkYWktPmRldiwgIkFJRiVkIHVzaW5nIE1DTEsyIGF0ICV1SHpcbiIsCisJCQlkYWktPmlkLCBmcmVxKTsKKwkJYnJlYWs7CisKKwljYXNlIFdNODk5NF9TWVNDTEtfRkxMMToKKwkJd204OTk0LT5zeXNjbGtbZGFpLT5pZCAtIDFdID0gV004OTk0X1NZU0NMS19GTEwxOworCQlkZXZfZGJnKGRhaS0+ZGV2LCAiQUlGJWQgdXNpbmcgRkxMMVxuIiwgZGFpLT5pZCk7CisJCWJyZWFrOworCisJY2FzZSBXTTg5OTRfU1lTQ0xLX0ZMTDI6CisJCXdtODk5NC0+c3lzY2xrW2RhaS0+aWQgLSAxXSA9IFdNODk5NF9TWVNDTEtfRkxMMjsKKwkJZGV2X2RiZyhkYWktPmRldiwgIkFJRiVkIHVzaW5nIEZMTDJcbiIsIGRhaS0+aWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNvbmZpZ3VyZV9jbG9jayhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKK3sKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTTkRfU09DX0JJQVNfT046CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKKwkJLyogVk1JRD0yeDQwayAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCSAgICBXTTg5OTRfVk1JRF9TRUxfTUFTSywgMHgyKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQkJLyogVHdlYWsgREMgc2Vydm8gY29uZmlndXJhdGlvbiBmb3IgaW1wcm92ZWQKKwkJCSAqIHBlcmZvcm1hbmNlLiAqLworCQkJc25kX3NvY193cml0ZShjb2RlYywgMHgxMDIsIDB4Myk7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCAweDU2LCAweDMpOworCQkJc25kX3NvY193cml0ZShjb2RlYywgMHgxMDIsIDApOworCisJCQkvKiBEaXNjaGFyZ2UgTElORU9VVDEgJiAyICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQU5USVBPUF8xLAorCQkJCQkgICAgV004OTk0X0xJTkVPVVQxX0RJU0NIIHwKKwkJCQkJICAgIFdNODk5NF9MSU5FT1VUMl9ESVNDSCwKKwkJCQkJICAgIFdNODk5NF9MSU5FT1VUMV9ESVNDSCB8CisJCQkJCSAgICBXTTg5OTRfTElORU9VVDJfRElTQ0gpOworCisJCQkvKiBTdGFydHVwIGJpYXMsIFZNSUQgcmFtcCAmIGJ1ZmZlciAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FOVElQT1BfMiwKKwkJCQkJICAgIFdNODk5NF9TVEFSVFVQX0JJQVNfRU5BIHwKKwkJCQkJICAgIFdNODk5NF9WTUlEX0JVRl9FTkEgfAorCQkJCQkgICAgV004OTk0X1ZNSURfUkFNUF9NQVNLLAorCQkJCQkgICAgV004OTk0X1NUQVJUVVBfQklBU19FTkEgfAorCQkJCQkgICAgV004OTk0X1ZNSURfQlVGX0VOQSB8CisJCQkJCSAgICAoMHgxMSA8PCBXTTg5OTRfVk1JRF9SQU1QX1NISUZUKSk7CisKKwkJCS8qIE1haW4gYmlhcyBlbmFibGUsIFZNSUQ9Mng0MGsgKi8KKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzEsCisJCQkJCSAgICBXTTg5OTRfQklBU19FTkEgfAorCQkJCQkgICAgV004OTk0X1ZNSURfU0VMX01BU0ssCisJCQkJCSAgICBXTTg5OTRfQklBU19FTkEgfCAweDIpOworCisJCQltc2xlZXAoMjApOworCQl9CisKKwkJLyogVk1JRD0yeDUwMGsgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkgICAgV004OTk0X1ZNSURfU0VMX01BU0ssIDB4NCk7CisKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19PRkY6CisJCS8qIFN3aXRjaCBvdmVyIHRvIHN0YXJ0dXAgYmlhc2VzICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BTlRJUE9QXzIsCisJCQkJICAgIFdNODk5NF9CSUFTX1NSQyB8IFdNODk5NF9TVEFSVFVQX0JJQVNfRU5BIHwKKwkJCQkgICAgV004OTk0X1ZNSURfQlVGX0VOQSB8CisJCQkJICAgIFdNODk5NF9WTUlEX1JBTVBfTUFTSywKKwkJCQkgICAgV004OTk0X0JJQVNfU1JDIHwgV004OTk0X1NUQVJUVVBfQklBU19FTkEgfAorCQkJCSAgICBXTTg5OTRfVk1JRF9CVUZfRU5BIHwKKwkJCQkgICAgKDEgPDwgV004OTk0X1ZNSURfUkFNUF9TSElGVCkpOworCisJCS8qIERpc2FibGUgbWFpbiBiaWFzZXMgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfMSwKKwkJCQkgICAgV004OTk0X0JJQVNfRU5BIHwgV004OTk0X1ZNSURfU0VMX01BU0ssIDApOworCisJCS8qIERpc2NoYXJnZSBsaW5lICovCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BTlRJUE9QXzEsCisJCQkJICAgIFdNODk5NF9MSU5FT1VUMV9ESVNDSCB8CisJCQkJICAgIFdNODk5NF9MSU5FT1VUMl9ESVNDSCwKKwkJCQkgICAgV004OTk0X0xJTkVPVVQxX0RJU0NIIHwKKwkJCQkgICAgV004OTk0X0xJTkVPVVQyX0RJU0NIKTsKKworCQltc2xlZXAoNSk7CisKKwkJLyogU3dpdGNoIG9mZiBzdGFydHVwIGJpYXNlcyAqLworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQU5USVBPUF8yLAorCQkJCSAgICBXTTg5OTRfQklBU19TUkMgfCBXTTg5OTRfU1RBUlRVUF9CSUFTX0VOQSB8CisJCQkJICAgIFdNODk5NF9WTUlEX0JVRl9FTkEgfAorCQkJCSAgICBXTTg5OTRfVk1JRF9SQU1QX01BU0ssIDApOworCisJCWJyZWFrOworCX0KKwljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5NF9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCWludCBtc19yZWc7CisJaW50IGFpZjFfcmVnOworCWludCBtcyA9IDA7CisJaW50IGFpZjEgPSAwOworCisJc3dpdGNoIChkYWktPmlkKSB7CisJY2FzZSAxOgorCQltc19yZWcgPSBXTTg5OTRfQUlGMV9NQVNURVJfU0xBVkU7CisJCWFpZjFfcmVnID0gV004OTk0X0FJRjFfQ09OVFJPTF8xOworCQlicmVhazsKKwljYXNlIDI6CisJCW1zX3JlZyA9IFdNODk5NF9BSUYyX01BU1RFUl9TTEFWRTsKKwkJYWlmMV9yZWcgPSBXTTg5OTRfQUlGMl9DT05UUk9MXzE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJbXMgPSBXTTg5OTRfQUlGMV9NU1RSOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJYWlmMSB8PSBXTTg5OTRfQUlGMV9MUkNMS19JTlY7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJYWlmMSB8PSAweDE4OworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJYWlmMSB8PSAweDEwOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlhaWYxIHw9IDB4ODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJLyogZnJhbWUgaW52ZXJzaW9uIG5vdCB2YWxpZCBmb3IgRFNQIG1vZGVzICovCisJCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQkJYWlmMSB8PSBXTTg5OTRfQUlGMV9CQ0xLX0lOVjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgorCQkJYWlmMSB8PSBXTTg5OTRfQUlGMV9CQ0xLX0lOViB8IFdNODk5NF9BSUYxX0xSQ0xLX0lOVjsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQkJYWlmMSB8PSBXTTg5OTRfQUlGMV9CQ0xLX0lOVjsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQkJYWlmMSB8PSBXTTg5OTRfQUlGMV9MUkNMS19JTlY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGFpZjFfcmVnLAorCQkJICAgIFdNODk5NF9BSUYxX0JDTEtfSU5WIHwgV004OTk0X0FJRjFfTFJDTEtfSU5WIHwKKwkJCSAgICBXTTg5OTRfQUlGMV9GTVRfTUFTSywKKwkJCSAgICBhaWYxKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBtc19yZWcsIFdNODk5NF9BSUYxX01TVFIsCisJCQkgICAgbXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeworCWludCB2YWwsIHJhdGU7Cit9IHNyc1tdID0geworCXsgMCwgICA4MDAwIH0sCisJeyAxLCAgMTEwMjUgfSwKKwl7IDIsICAxMjAwMCB9LAorCXsgMywgIDE2MDAwIH0sCisJeyA0LCAgMjIwNTAgfSwKKwl7IDUsICAyNDAwMCB9LAorCXsgNiwgIDMyMDAwIH0sCisJeyA3LCAgNDQxMDAgfSwKKwl7IDgsICA0ODAwMCB9LAorCXsgOSwgIDg4MjAwIH0sCisJeyAxMCwgOTYwMDAgfSwKK307CisKK3N0YXRpYyBpbnQgZnNfcmF0aW9zW10gPSB7CisJNjQsIDEyOCwgMTkyLCAyNTYsIDM0OCwgNTEyLCA3NjgsIDEwMjQsIDE0MDgsIDE1MzYKK307CisKK3N0YXRpYyBpbnQgYmNsa19kaXZzW10gPSB7CisJMTAsIDE1LCAyMCwgMzAsIDQwLCA1MCwgNjAsIDgwLCAxMTAsIDEyMCwgMTYwLCAyMjAsIDI0MCwgMzIwLCA0NDAsIDQ4MCwKKwk2NDAsIDg4MCwgOTYwLCAxMjgwLCAxNzYwLCAxOTIwCit9OworCitzdGF0aWMgaW50IHdtODk5NF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJaW50IGFpZjFfcmVnOworCWludCBiY2xrX3JlZzsKKwlpbnQgbHJjbGtfcmVnOworCWludCByYXRlX3JlZzsKKwlpbnQgYWlmMSA9IDA7CisJaW50IGJjbGsgPSAwOworCWludCBscmNsayA9IDA7CisJaW50IHJhdGVfdmFsID0gMDsKKwlpbnQgaWQgPSBkYWktPmlkIC0gMTsKKworCWludCBpLCBjdXJfdmFsLCBiZXN0X3ZhbCwgYmNsa19yYXRlLCBiZXN0OworCisJc3dpdGNoIChkYWktPmlkKSB7CisJY2FzZSAxOgorCQlhaWYxX3JlZyA9IFdNODk5NF9BSUYxX0NPTlRST0xfMTsKKwkJYmNsa19yZWcgPSBXTTg5OTRfQUlGMV9CQ0xLOworCQlyYXRlX3JlZyA9IFdNODk5NF9BSUYxX1JBVEU7CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLIHx8CisJCSAgICB3bTg5OTQtPmxyY2xrX3NoYXJlZFswXSkKKwkJCWxyY2xrX3JlZyA9IFdNODk5NF9BSUYxREFDX0xSQ0xLOworCQllbHNlCisJCQlscmNsa19yZWcgPSBXTTg5OTRfQUlGMUFEQ19MUkNMSzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlhaWYxX3JlZyA9IFdNODk5NF9BSUYyX0NPTlRST0xfMTsKKwkJYmNsa19yZWcgPSBXTTg5OTRfQUlGMl9CQ0xLOworCQlyYXRlX3JlZyA9IFdNODk5NF9BSUYyX1JBVEU7CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLIHx8CisJCSAgICB3bTg5OTQtPmxyY2xrX3NoYXJlZFsxXSkKKwkJCWxyY2xrX3JlZyA9IFdNODk5NF9BSUYyREFDX0xSQ0xLOworCQllbHNlCisJCQlscmNsa19yZWcgPSBXTTg5OTRfQUlGMkFEQ19MUkNMSzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYmNsa19yYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKSAqIDI7CisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQliY2xrX3JhdGUgKj0gMTY7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgorCQliY2xrX3JhdGUgKj0gMjA7CisJCWFpZjEgfD0gMHgyMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJYmNsa19yYXRlICo9IDI0OworCQlhaWYxIHw9IDB4NDA7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6CisJCWJjbGtfcmF0ZSAqPSAzMjsKKwkJYWlmMSB8PSAweDYwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUcnkgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBzYW1wbGUgcmF0ZTsgbG9vayBmb3IgYW4gZXhhY3QgbWF0Y2guICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3JzKTsgaSsrKQorCQlpZiAoc3JzW2ldLnJhdGUgPT0gcGFyYW1zX3JhdGUocGFyYW1zKSkKKwkJCWJyZWFrOworCWlmIChpID09IEFSUkFZX1NJWkUoc3JzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmF0ZV92YWwgfD0gc3JzW2ldLnZhbCA8PCBXTTg5OTRfQUlGMV9TUl9TSElGVDsKKworCWRldl9kYmcoZGFpLT5kZXYsICJTYW1wbGUgcmF0ZSBpcyAlZEh6XG4iLCBzcnNbaV0ucmF0ZSk7CisJZGV2X2RiZyhkYWktPmRldiwgIkFJRiVkQ0xLIGlzICVkSHosIHRhcmdldCBCQ0xLICVkSHpcbiIsCisJCWRhaS0+aWQsIHdtODk5NC0+YWlmY2xrW2lkXSwgYmNsa19yYXRlKTsKKworCWlmICh3bTg5OTQtPmFpZmNsa1tpZF0gPT0gMCkgeworCQlkZXZfZXJyKGRhaS0+ZGV2LCAiQUlGJWRDTEsgbm90IGNvbmZpZ3VyZWRcbiIsIGRhaS0+aWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBBSUZDTEsvZnMgcmF0aW87IGxvb2sgZm9yIGEgY2xvc2UgbWF0Y2ggaW4gZWl0aGVyIGRpcmVjdGlvbiAqLworCWJlc3QgPSAwOworCWJlc3RfdmFsID0gYWJzKChmc19yYXRpb3NbMF0gKiBwYXJhbXNfcmF0ZShwYXJhbXMpKQorCQkgICAgICAgLSB3bTg5OTQtPmFpZmNsa1tpZF0pOworCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKGZzX3JhdGlvcyk7IGkrKykgeworCQljdXJfdmFsID0gYWJzKChmc19yYXRpb3NbaV0gKiBwYXJhbXNfcmF0ZShwYXJhbXMpKQorCQkJICAgICAgLSB3bTg5OTQtPmFpZmNsa1tpZF0pOworCQlpZiAoY3VyX3ZhbCA+PSBiZXN0X3ZhbCkKKwkJCWNvbnRpbnVlOworCQliZXN0ID0gaTsKKwkJYmVzdF92YWwgPSBjdXJfdmFsOworCX0KKwlkZXZfZGJnKGRhaS0+ZGV2LCAiU2VsZWN0ZWQgQUlGJWRDTEsvZnMgPSAlZFxuIiwKKwkJZGFpLT5pZCwgZnNfcmF0aW9zW2Jlc3RdKTsKKwlyYXRlX3ZhbCB8PSBiZXN0OworCisJLyogV2UgbWF5IG5vdCBnZXQgcXVpdGUgdGhlIHJpZ2h0IGZyZXF1ZW5jeSBpZiB1c2luZworCSAqIGFwcHJveGltYXRlIGNsb2NrcyBzbyBsb29rIGZvciB0aGUgY2xvc2VzdCBtYXRjaCB0aGF0IGlzCisJICogaGlnaGVyIHRoYW4gdGhlIHRhcmdldCAod2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGVyZSBlbm91Z2gKKwkgKiBCQ0xLcyB0byBjbG9jayBvdXQgdGhlIHNhbXBsZXMpLgorCSAqLworCWJlc3QgPSAwOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJjbGtfZGl2cyk7IGkrKykgeworCQljdXJfdmFsID0gKHdtODk5NC0+YWlmY2xrW2lkXSAqIDEwIC8gYmNsa19kaXZzW2ldKSAtIGJjbGtfcmF0ZTsKKwkJaWYgKGN1cl92YWwgPCAwKSAvKiBCQ0xLIHRhYmxlIGlzIHNvcnRlZCAqLworCQkJYnJlYWs7CisJCWJlc3QgPSBpOworCX0KKwliY2xrX3JhdGUgPSB3bTg5OTQtPmFpZmNsa1tpZF0gKiAxMCAvIGJjbGtfZGl2c1tiZXN0XTsKKwlkZXZfZGJnKGRhaS0+ZGV2LCAiVXNpbmcgQkNMS19ESVYgJWQgZm9yIGFjdHVhbCBCQ0xLICVkSHpcbiIsCisJCWJjbGtfZGl2c1tiZXN0XSwgYmNsa19yYXRlKTsKKwliY2xrIHw9IGJlc3QgPDwgV004OTk0X0FJRjFfQkNMS19ESVZfU0hJRlQ7CisKKwlscmNsayA9IGJjbGtfcmF0ZSAvIHBhcmFtc19yYXRlKHBhcmFtcyk7CisJZGV2X2RiZyhkYWktPmRldiwgIlVzaW5nIExSQ0xLIHJhdGUgJWQgZm9yIGFjdHVhbCBMUkNMSyAlZEh6XG4iLAorCQlscmNsaywgYmNsa19yYXRlIC8gbHJjbGspOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgYWlmMV9yZWcsIFdNODk5NF9BSUYxX1dMX01BU0ssIGFpZjEpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIGJjbGtfcmVnLCBXTTg5OTRfQUlGMV9CQ0xLX0RJVl9NQVNLLCBiY2xrKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBscmNsa19yZWcsIFdNODk5NF9BSUYxREFDX1JBVEVfTUFTSywKKwkJCSAgICBscmNsayk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcmF0ZV9yZWcsIFdNODk5NF9BSUYxX1NSX01BU0sgfAorCQkJICAgIFdNODk5NF9BSUYxQ0xLX1JBVEVfTUFTSywgcmF0ZV92YWwpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJc3dpdGNoIChkYWktPmlkKSB7CisJCWNhc2UgMToKKwkJCXdtODk5NC0+ZGFjX3JhdGVzWzBdID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKwkJCXdtODk5NF9zZXRfcmV0dW5lX21vYmlsZShjb2RlYywgMCk7CisJCQl3bTg5OTRfc2V0X3JldHVuZV9tb2JpbGUoY29kZWMsIDEpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXdtODk5NC0+ZGFjX3JhdGVzWzFdID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKwkJCXdtODk5NF9zZXRfcmV0dW5lX21vYmlsZShjb2RlYywgMik7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5NF9haWZfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwgaW50IG11dGUpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwlpbnQgbXV0ZV9yZWc7CisJaW50IHJlZzsKKworCXN3aXRjaCAoY29kZWNfZGFpLT5pZCkgeworCWNhc2UgMToKKwkJbXV0ZV9yZWcgPSBXTTg5OTRfQUlGMV9EQUMxX0ZJTFRFUlNfMTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQltdXRlX3JlZyA9IFdNODk5NF9BSUYyX0RBQ19GSUxURVJTXzE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChtdXRlKQorCQlyZWcgPSBXTTg5OTRfQUlGMURBQzFfTVVURTsKKwllbHNlCisJCXJlZyA9IDA7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBtdXRlX3JlZywgV004OTk0X0FJRjFEQUMxX01VVEUsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBXTTg5OTRfUkFURVMgU05EUlZfUENNX1JBVEVfODAwMF85NjAwMAorCisjZGVmaW5lIFdNODk5NF9GT1JNQVRTIChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8XAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODk5NF9haWYxX2RhaV9vcHMgPSB7CisJLnNldF9zeXNjbGsJPSB3bTg5OTRfc2V0X2RhaV9zeXNjbGssCisJLnNldF9mbXQJPSB3bTg5OTRfc2V0X2RhaV9mbXQsCisJLmh3X3BhcmFtcwk9IHdtODk5NF9od19wYXJhbXMsCisJLmRpZ2l0YWxfbXV0ZQk9IHdtODk5NF9haWZfbXV0ZSwKKwkuc2V0X3BsbAk9IHdtODk5NF9zZXRfZmxsLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgd204OTk0X2FpZjJfZGFpX29wcyA9IHsKKwkuc2V0X3N5c2Nsawk9IHdtODk5NF9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X2ZtdAk9IHdtODk5NF9zZXRfZGFpX2ZtdCwKKwkuaHdfcGFyYW1zCT0gd204OTk0X2h3X3BhcmFtcywKKwkuZGlnaXRhbF9tdXRlICAgPSB3bTg5OTRfYWlmX211dGUsCisJLnNldF9wbGwJPSB3bTg5OTRfc2V0X2ZsbCwKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaSB3bTg5OTRfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJXTTg5OTQgQUlGMSIsCisJCS5pZCA9IDEsCisJCS5wbGF5YmFjayA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJBSUYxIFBsYXliYWNrIiwKKwkJCS5jaGFubmVsc19taW4gPSAyLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBXTTg5OTRfUkFURVMsCisJCQkuZm9ybWF0cyA9IFdNODk5NF9GT1JNQVRTLAorCQl9LAorCQkuY2FwdHVyZSA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJBSUYxIENhcHR1cmUiLAorCQkJLmNoYW5uZWxzX21pbiA9IDIsCisJCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCS5yYXRlcyA9IFdNODk5NF9SQVRFUywKKwkJCS5mb3JtYXRzID0gV004OTk0X0ZPUk1BVFMsCisJCSB9LAorCQkub3BzID0gJndtODk5NF9haWYxX2RhaV9vcHMsCisJfSwKKwl7CisJCS5uYW1lID0gIldNODk5NCBBSUYyIiwKKwkJLmlkID0gMiwKKwkJLnBsYXliYWNrID0geworCQkJLnN0cmVhbV9uYW1lID0gIkFJRjIgUGxheWJhY2siLAorCQkJLmNoYW5uZWxzX21pbiA9IDIsCisJCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCS5yYXRlcyA9IFdNODk5NF9SQVRFUywKKwkJCS5mb3JtYXRzID0gV004OTk0X0ZPUk1BVFMsCisJCX0sCisJCS5jYXB0dXJlID0geworCQkJLnN0cmVhbV9uYW1lID0gIkFJRjIgQ2FwdHVyZSIsCisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gV004OTk0X1JBVEVTLAorCQkJLmZvcm1hdHMgPSBXTTg5OTRfRk9STUFUUywKKwkJfSwKKwkJLm9wcyA9ICZ3bTg5OTRfYWlmMl9kYWlfb3BzLAorCX0sCisJeworCQkubmFtZSA9ICJXTTg5OTQgQUlGMyIsCisJCS5wbGF5YmFjayA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJBSUYzIFBsYXliYWNrIiwKKwkJCS5jaGFubmVsc19taW4gPSAyLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBXTTg5OTRfUkFURVMsCisJCQkuZm9ybWF0cyA9IFdNODk5NF9GT1JNQVRTLAorCQl9LAorCQkucGxheWJhY2sgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUlGMyBDYXB0dXJlIiwKKwkJCS5jaGFubmVsc19taW4gPSAyLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBXTTg5OTRfUkFURVMsCisJCQkuZm9ybWF0cyA9IFdNODk5NF9GT1JNQVRTLAorCQl9LAorCX0KK307CitFWFBPUlRfU1lNQk9MX0dQTCh3bTg5OTRfZGFpKTsKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB3bTg5OTRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwlpbnQgaSwgcmV0OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTk0LT5mbGwpOyBpKyspIHsKKwkJbWVtY3B5KCZ3bTg5OTQtPmZsbF9zdXNwZW5kW2ldLCAmd204OTk0LT5mbGxbaV0sCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGZsbF9jb25maWcpKTsKKwkJcmV0ID0gd204OTk0X3NldF9mbGwoJmNvZGVjLT5kYWlbMF0sIGkgKyAxLCAwLCAwLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHN0b3AgRkxMJWQ6ICVkXG4iLAorCQkJCSBpICsgMSwgcmV0KTsKKwl9CisKKwl3bTg5OTRfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IGNvZGVjLT5wcml2YXRlX2RhdGE7CisJdTE2ICpyZWdfY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCWludCBpLCByZXQ7CisKKwkvKiBSZXN0b3JlIHRoZSByZWdpc3RlcnMgKi8KKwlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRSh3bTg5OTQtPnJlZ19jYWNoZSk7IGkrKykgeworCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSBXTTg5OTRfTERPXzE6CisJCWNhc2UgV004OTk0X0xET18yOgorCQljYXNlIFdNODk5NF9TT0ZUV0FSRV9SRVNFVDoKKwkJCS8qIEhhbmRsZWQgYnkgb3RoZXIgTUZEIGRyaXZlcnMgKi8KKwkJCWNvbnRpbnVlOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlpZiAoIWFjY2Vzc19tYXNrc1tpXS53cml0YWJsZSkKKwkJCWNvbnRpbnVlOworCisJCXdtODk5NF9yZWdfd3JpdGUoY29kZWMtPmNvbnRyb2xfZGF0YSwgaSwgcmVnX2NhY2hlW2ldKTsKKwl9CisKKwl3bTg5OTRfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk5NC0+ZmxsKTsgaSsrKSB7CisJCXJldCA9IHdtODk5NF9zZXRfZmxsKCZjb2RlYy0+ZGFpWzBdLCBpICsgMSwKKwkJCQkgICAgIHdtODk5NC0+ZmxsX3N1c3BlbmRbaV0uc3JjLAorCQkJCSAgICAgd204OTk0LT5mbGxfc3VzcGVuZFtpXS5pbiwKKwkJCQkgICAgIHdtODk5NC0+ZmxsX3N1c3BlbmRbaV0ub3V0KTsKKwkJaWYgKHJldCA8IDApCisJCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlc3RvcmUgRkxMJWQ6ICVkXG4iLAorCQkJCSBpICsgMSwgcmV0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHdtODk5NF9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgd204OTk0X3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIHZvaWQgd204OTk0X2hhbmRsZV9yZXR1bmVfbW9iaWxlX3BkYXRhKHN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9ICZ3bTg5OTQtPmNvZGVjOworCXN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhID0gd204OTk0LT5wZGF0YTsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjb250cm9sc1tdID0geworCQlTT0NfRU5VTV9FWFQoIkFJRjEuMSBFUSBNb2RlIiwKKwkJCSAgICAgd204OTk0LT5yZXR1bmVfbW9iaWxlX2VudW0sCisJCQkgICAgIHdtODk5NF9nZXRfcmV0dW5lX21vYmlsZV9lbnVtLAorCQkJICAgICB3bTg5OTRfcHV0X3JldHVuZV9tb2JpbGVfZW51bSksCisJCVNPQ19FTlVNX0VYVCgiQUlGMS4yIEVRIE1vZGUiLAorCQkJICAgICB3bTg5OTQtPnJldHVuZV9tb2JpbGVfZW51bSwKKwkJCSAgICAgd204OTk0X2dldF9yZXR1bmVfbW9iaWxlX2VudW0sCisJCQkgICAgIHdtODk5NF9wdXRfcmV0dW5lX21vYmlsZV9lbnVtKSwKKwkJU09DX0VOVU1fRVhUKCJBSUYyIEVRIE1vZGUiLAorCQkJICAgICB3bTg5OTQtPnJldHVuZV9tb2JpbGVfZW51bSwKKwkJCSAgICAgd204OTk0X2dldF9yZXR1bmVfbW9iaWxlX2VudW0sCisJCQkgICAgIHdtODk5NF9wdXRfcmV0dW5lX21vYmlsZV9lbnVtKSwKKwl9OworCWludCByZXQsIGksIGo7CisJY29uc3QgY2hhciAqKnQ7CisKKwkvKiBXZSBuZWVkIGFuIGFycmF5IG9mIHRleHRzIGZvciB0aGUgZW51bSBBUEkgYnV0IHRoZSBudW1iZXIKKwkgKiBvZiB0ZXh0cyBpcyBsaWtlbHkgdG8gYmUgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YKKwkgKiBjb25maWd1cmF0aW9ucyBkdWUgdG8gdGhlIHNhbXBsZSByYXRlIGRlcGVuZGVuY3kgb2YgdGhlCisJICogY29uZmlndXJhdGlvbnMuICovCisJd204OTk0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cyA9IDA7CisJd204OTk0LT5yZXR1bmVfbW9iaWxlX3RleHRzID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9yZXR1bmVfbW9iaWxlX2NmZ3M7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgd204OTk0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0czsgaisrKSB7CisJCQlpZiAoc3RyY21wKHBkYXRhLT5yZXR1bmVfbW9iaWxlX2NmZ3NbaV0ubmFtZSwKKwkJCQkgICB3bTg5OTQtPnJldHVuZV9tb2JpbGVfdGV4dHNbal0pID09IDApCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaiAhPSB3bTg5OTQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzKQorCQkJY29udGludWU7CisKKwkJLyogRXhwYW5kIHRoZSBhcnJheS4uLiAqLworCQl0ID0ga3JlYWxsb2Mod204OTk0LT5yZXR1bmVfbW9iaWxlX3RleHRzLAorCQkJICAgICBzaXplb2YoY2hhciAqKSAqIAorCQkJICAgICAod204OTk0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0cyArIDEpLAorCQkJICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKHQgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCS8qIC4uLnN0b3JlIHRoZSBuZXcgZW50cnkuLi4gKi8KKwkJdFt3bTg5OTQtPm51bV9yZXR1bmVfbW9iaWxlX3RleHRzXSA9IAorCQkJcGRhdGEtPnJldHVuZV9tb2JpbGVfY2Znc1tpXS5uYW1lOworCisJCS8qIC4uLmFuZCByZW1lbWJlciB0aGUgbmV3IHZlcnNpb24uICovCisJCXdtODk5NC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMrKzsKKwkJd204OTk0LT5yZXR1bmVfbW9iaWxlX3RleHRzID0gdDsKKwl9CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJBbGxvY2F0ZWQgJWQgdW5pcXVlIFJlVHVuZSBNb2JpbGUgbmFtZXNcbiIsCisJCXdtODk5NC0+bnVtX3JldHVuZV9tb2JpbGVfdGV4dHMpOworCisJd204OTk0LT5yZXR1bmVfbW9iaWxlX2VudW0ubWF4ID0gd204OTk0LT5udW1fcmV0dW5lX21vYmlsZV90ZXh0czsKKwl3bTg5OTQtPnJldHVuZV9tb2JpbGVfZW51bS50ZXh0cyA9IHdtODk5NC0+cmV0dW5lX21vYmlsZV90ZXh0czsKKworCXJldCA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKCZ3bTg5OTQtPmNvZGVjLCBjb250cm9scywKKwkJCQkgICBBUlJBWV9TSVpFKGNvbnRyb2xzKSk7CisJaWYgKHJldCAhPSAwKQorCQlkZXZfZXJyKHdtODk5NC0+Y29kZWMuZGV2LAorCQkJIkZhaWxlZCB0byBhZGQgUmVUdW5lIE1vYmlsZSBjb250cm9sczogJWRcbiIsIHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIHdtODk5NF9oYW5kbGVfcGRhdGEoc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJndtODk5NC0+Y29kZWM7CisJc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGEgPSB3bTg5OTQtPnBkYXRhOworCWludCByZXQsIGk7CisKKwlpZiAoIXBkYXRhKQorCQlyZXR1cm47CisKKwl3bV9odWJzX2hhbmRsZV9hbmFsb2d1ZV9wZGF0YShjb2RlYywgcGRhdGEtPmxpbmVvdXQxX2RpZmYsCisJCQkJICAgICAgcGRhdGEtPmxpbmVvdXQyX2RpZmYsCisJCQkJICAgICAgcGRhdGEtPmxpbmVvdXQxZmIsCisJCQkJICAgICAgcGRhdGEtPmxpbmVvdXQyZmIsCisJCQkJICAgICAgcGRhdGEtPmpkX3NjdGhyLAorCQkJCSAgICAgIHBkYXRhLT5qZF90aHIsCisJCQkJICAgICAgcGRhdGEtPm1pY2JpYXMxX2x2bCwKKwkJCQkgICAgICBwZGF0YS0+bWljYmlhczJfbHZsKTsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIiVkIERSQyBjb25maWd1cmF0aW9uc1xuIiwgcGRhdGEtPm51bV9kcmNfY2Zncyk7CisKKwlpZiAocGRhdGEtPm51bV9kcmNfY2ZncykgeworCQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjb250cm9sc1tdID0geworCQkJU09DX0VOVU1fRVhUKCJBSUYxRFJDMSBNb2RlIiwgd204OTk0LT5kcmNfZW51bSwKKwkJCQkgICAgIHdtODk5NF9nZXRfZHJjX2VudW0sIHdtODk5NF9wdXRfZHJjX2VudW0pLAorCQkJU09DX0VOVU1fRVhUKCJBSUYxRFJDMiBNb2RlIiwgd204OTk0LT5kcmNfZW51bSwKKwkJCQkgICAgIHdtODk5NF9nZXRfZHJjX2VudW0sIHdtODk5NF9wdXRfZHJjX2VudW0pLAorCQkJU09DX0VOVU1fRVhUKCJBSUYyRFJDIE1vZGUiLCB3bTg5OTQtPmRyY19lbnVtLAorCQkJCSAgICAgd204OTk0X2dldF9kcmNfZW51bSwgd204OTk0X3B1dF9kcmNfZW51bSksCisJCX07CisKKwkJLyogV2UgbmVlZCBhbiBhcnJheSBvZiB0ZXh0cyBmb3IgdGhlIGVudW0gQVBJICovCisJCXdtODk5NC0+ZHJjX3RleHRzID0ga21hbGxvYyhzaXplb2YoY2hhciAqKQorCQkJCQkgICAgKiBwZGF0YS0+bnVtX2RyY19jZmdzLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF3bTg5OTQtPmRyY190ZXh0cykgeworCQkJZGV2X2Vycih3bTg5OTQtPmNvZGVjLmRldiwKKwkJCQkiRmFpbGVkIHRvIGFsbG9jYXRlICVkIERSQyBjb25maWcgdGV4dHNcbiIsCisJCQkJcGRhdGEtPm51bV9kcmNfY2Zncyk7CisJCQlyZXR1cm47CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9kcmNfY2ZnczsgaSsrKQorCQkJd204OTk0LT5kcmNfdGV4dHNbaV0gPSBwZGF0YS0+ZHJjX2NmZ3NbaV0ubmFtZTsKKworCQl3bTg5OTQtPmRyY19lbnVtLm1heCA9IHBkYXRhLT5udW1fZHJjX2NmZ3M7CisJCXdtODk5NC0+ZHJjX2VudW0udGV4dHMgPSB3bTg5OTQtPmRyY190ZXh0czsKKworCQlyZXQgPSBzbmRfc29jX2FkZF9jb250cm9scygmd204OTk0LT5jb2RlYywgY29udHJvbHMsCisJCQkJCSAgIEFSUkFZX1NJWkUoY29udHJvbHMpKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZGV2X2Vycih3bTg5OTQtPmNvZGVjLmRldiwKKwkJCQkiRmFpbGVkIHRvIGFkZCBEUkMgbW9kZSBjb250cm9sczogJWRcbiIsIHJldCk7CisKKwkJZm9yIChpID0gMDsgaSA8IFdNODk5NF9OVU1fRFJDOyBpKyspCisJCQl3bTg5OTRfc2V0X2RyYyhjb2RlYywgaSk7CisJfQorCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiJWQgUmVUdW5lIE1vYmlsZSBjb25maWd1cmF0aW9uc1xuIiwKKwkJcGRhdGEtPm51bV9yZXR1bmVfbW9iaWxlX2NmZ3MpOworCisJaWYgKHBkYXRhLT5udW1fcmV0dW5lX21vYmlsZV9jZmdzKQorCQl3bTg5OTRfaGFuZGxlX3JldHVuZV9tb2JpbGVfcGRhdGEod204OTk0KTsKKwllbHNlCisJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKCZ3bTg5OTQtPmNvZGVjLCB3bTg5OTRfZXFfY29udHJvbHMsCisJCQkJICAgICBBUlJBWV9TSVpFKHdtODk5NF9lcV9jb250cm9scykpOworfQorCitzdGF0aWMgaW50IHdtODk5NF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQgPSAwOworCisJaWYgKHdtODk5NF9jb2RlYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvZGVjIGRldmljZSBub3QgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB3bTg5OTRfY29kZWM7CisJY29kZWMgPSB3bTg5OTRfY29kZWM7CisKKwkvKiByZWdpc3RlciBwY21zICovCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjbXM6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXdtODk5NF9oYW5kbGVfcGRhdGEoY29kZWMtPnByaXZhdGVfZGF0YSk7CisKKwl3bV9odWJzX2FkZF9hbmFsb2d1ZV9jb250cm9scyhjb2RlYyk7CisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODk5NF9zbmRfY29udHJvbHMsCisJCQkgICAgIEFSUkFZX1NJWkUod204OTk0X3NuZF9jb250cm9scykpOworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODk5NF9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHdtODk5NF9kYXBtX3dpZGdldHMpKTsKKwl3bV9odWJzX2FkZF9hbmFsb2d1ZV9yb3V0ZXMoY29kZWMsIDAsIDApOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204OTk0ID0geworCS5wcm9iZSA9IAl3bTg5OTRfcHJvYmUsCisJLnJlbW92ZSA9IAl3bTg5OTRfcmVtb3ZlLAorCS5zdXNwZW5kID0gCXdtODk5NF9zdXNwZW5kLAorCS5yZXN1bWUgPQl3bTg5OTRfcmVzdW1lLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfd204OTk0KTsKKworc3RhdGljIGludCB3bTg5OTRfY29kZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgaTsKKwl1MTYgcmV2OworCisJaWYgKHdtODk5NF9jb2RlYykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJBbm90aGVyIFdNODk5NCBpcyByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd204OTk0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODk5NF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3bTg5OTQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHByaXZhdGUgZGF0YVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNvZGVjID0gJndtODk5NC0+Y29kZWM7CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPnByaXZhdGVfZGF0YSA9IHdtODk5NDsKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCWNvZGVjLT5uYW1lID0gIldNODk5NCI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPnJlYWQgPSB3bTg5OTRfcmVhZDsKKwljb2RlYy0+d3JpdGUgPSB3bTg5OTRfd3JpdGU7CisJY29kZWMtPnJlYWRhYmxlX3JlZ2lzdGVyID0gd204OTk0X3JlYWRhYmxlOworCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKKwljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB3bTg5OTRfc2V0X2JpYXNfbGV2ZWw7CisJY29kZWMtPmRhaSA9ICZ3bTg5OTRfZGFpWzBdOworCWNvZGVjLT5udW1fZGFpID0gMzsKKwljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBXTTg5OTRfTUFYX1JFR0lTVEVSOworCWNvZGVjLT5yZWdfY2FjaGUgPSAmd204OTk0LT5yZWdfY2FjaGU7CisJY29kZWMtPmRldiA9ICZwZGV2LT5kZXY7CisKKwl3bTg5OTQtPnBkYXRhID0gcGRldi0+ZGV2LnBhcmVudC0+cGxhdGZvcm1fZGF0YTsKKworCS8qIEZpbGwgdGhlIGNhY2hlIHdpdGggcGh5c2ljYWwgdmFsdWVzIHdlIGluaGVyaXRlZDsgZG9uJ3QgcmVzZXQgKi8KKwlyZXQgPSB3bTg5OTRfYnVsa19yZWFkKGNvZGVjLT5jb250cm9sX2RhdGEsIDAsCisJCQkgICAgICAgQVJSQVlfU0laRSh3bTg5OTQtPnJlZ19jYWNoZSkgLSAxLAorCQkJICAgICAgIGNvZGVjLT5yZWdfY2FjaGUpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBmaWxsIHJlZ2lzdGVyIGNhY2hlOiAlZFxuIiwKKwkJCXJldCk7CisJCWdvdG8gZXJyOworCX0KKworCS8qIENsZWFyIHRoZSBjYWNoZWQgdmFsdWVzIGZvciB1bnJlYWRhYmxlL3ZvbGF0aWxlIHJlZ2lzdGVycyB0bworCSAqIGF2b2lkIHBvdGVudGlhbCBjb25mdXNpb24uCisJICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTk0LT5yZWdfY2FjaGUpOyBpKyspCisJCWlmICh3bTg5OTRfdm9sYXRpbGUoaSkgfHwgIXdtODk5NF9yZWFkYWJsZShpKSkKKwkJCXdtODk5NC0+cmVnX2NhY2hlW2ldID0gMDsKKworCS8qIFNldCByZXZpc2lvbi1zcGVjaWZpYyBjb25maWd1cmF0aW9uICovCisJcmV2ID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTRfQ0hJUF9SRVZJU0lPTik7CisJc3dpdGNoIChyZXYpIHsKKwljYXNlIDI6CisJY2FzZSAzOgorCQl3bTg5OTQtPmh1YnMuZGNzX2NvZGVzID0gLTU7CisJCXdtODk5NC0+aHVicy5ocF9zdGFydHVwX21vZGUgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJCQkgICAKKworCS8qIFJlbWVtYmVyIGlmIEFJRm5MUkNMSyBpcyBjb25maWd1cmVkIGFzIGEgR1BJTy4gIFRoaXMgc2hvdWxkIGJlCisJICogY29uZmlndXJlZCBvbiBpbml0IC0gaWYgYSBzeXN0ZW0gd2FudHMgdG8gZG8gdGhpcyBkeW5hbWljYWxseQorCSAqIGF0IHJ1bnRpbWUgd2UgY2FuIGRlYWwgd2l0aCB0aGF0IHRoZW4uCisJICovCisJcmV0ID0gd204OTk0X3JlZ19yZWFkKGNvZGVjLT5jb250cm9sX2RhdGEsIFdNODk5NF9HUElPXzEpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWFkIEdQSU8xIHN0YXRlOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCWlmICgocmV0ICYgV004OTk0X0dQTl9GTl9NQVNLKSAhPSBXTTg5OTRfR1BfRk5fUElOX1NQRUNJRklDKSB7CisJCXdtODk5NC0+bHJjbGtfc2hhcmVkWzBdID0gMTsKKwkJd204OTk0X2RhaVswXS5zeW1tZXRyaWNfcmF0ZXMgPSAxOworCX0gZWxzZSB7CisJCXdtODk5NC0+bHJjbGtfc2hhcmVkWzBdID0gMDsKKwl9CisKKwlyZXQgPSB3bTg5OTRfcmVnX3JlYWQoY29kZWMtPmNvbnRyb2xfZGF0YSwgV004OTk0X0dQSU9fNik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgR1BJTzYgc3RhdGU6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisJaWYgKChyZXQgJiBXTTg5OTRfR1BOX0ZOX01BU0spICE9IFdNODk5NF9HUF9GTl9QSU5fU1BFQ0lGSUMpIHsKKwkJd204OTk0LT5scmNsa19zaGFyZWRbMV0gPSAxOworCQl3bTg5OTRfZGFpWzFdLnN5bW1ldHJpY19yYXRlcyA9IDE7CisJfSBlbHNlIHsKKwkJd204OTk0LT5scmNsa19zaGFyZWRbMV0gPSAwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODk5NF9kYWkpOyBpKyspCisJCXdtODk5NF9kYWlbaV0uZGV2ID0gY29kZWMtPmRldjsKKworCXdtODk5NF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworCisJd204OTk0X2NvZGVjID0gY29kZWM7CisKKwkvKiBMYXRjaCB2b2x1bWUgdXBkYXRlcyAocmlnaHQgb25seTsgd2UgYWx3YXlzIGRvIGxlZnQgdGhlbiByaWdodCkuICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfREFDMV9SSUdIVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0FJRjFEQUMxX1ZVLCBXTTg5OTRfQUlGMURBQzFfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0RBQzJfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9BSUYxREFDMl9WVSwgV004OTk0X0FJRjFEQUMyX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMl9EQUNfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9BSUYyREFDX1ZVLCBXTTg5OTRfQUlGMkRBQ19WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfQURDMV9SSUdIVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0FJRjFBREMxX1ZVLCBXTTg5OTRfQUlGMUFEQzFfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0FEQzJfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9BSUYxQURDMl9WVSwgV004OTk0X0FJRjFBREMyX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMl9BRENfUklHSFRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9BSUYyQURDX1ZVLCBXTTg5OTRfQUlGMUFEQzJfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9EQUMxX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfREFDMV9WVSwgV004OTk0X0RBQzFfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9EQUMyX1JJR0hUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfREFDMl9WVSwgV004OTk0X0RBQzJfVlUpOworCisJLyogU2V0IHRoZSBsb3cgYml0IG9mIHRoZSAzRCBzdGVyZW8gZGVwdGggc28gVExWIG1hdGNoZXMgKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9EQUMxX0ZJTFRFUlNfMiwKKwkJCSAgICAxIDw8IFdNODk5NF9BSUYxREFDMV8zRF9HQUlOX1NISUZULAorCQkJICAgIDEgPDwgV004OTk0X0FJRjFEQUMxXzNEX0dBSU5fU0hJRlQpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0RBQzJfRklMVEVSU18yLAorCQkJICAgIDEgPDwgV004OTk0X0FJRjFEQUMyXzNEX0dBSU5fU0hJRlQsCisJCQkgICAgMSA8PCBXTTg5OTRfQUlGMURBQzJfM0RfR0FJTl9TSElGVCk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjJfREFDX0ZJTFRFUlNfMiwKKwkJCSAgICAxIDw8IFdNODk5NF9BSUYyREFDXzNEX0dBSU5fU0hJRlQsCisJCQkgICAgMSA8PCBXTTg5OTRfQUlGMkRBQ18zRF9HQUlOX1NISUZUKTsKKworCXdtODk5NF91cGRhdGVfY2xhc3Nfdyhjb2RlYyk7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWlzKHdtODk5NF9kYWksIEFSUkFZX1NJWkUod204OTk0X2RhaSkpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NvZGVjOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHdtODk5NCk7CisKKwlyZXR1cm4gMDsKKworZXJyX2NvZGVjOgorCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CitlcnI6CisJa2ZyZWUod204OTk0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3bTg5OTRfY29kZWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSAmd204OTk0LT5jb2RlYzsKKworCXdtODk5NF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CisJc25kX3NvY191bnJlZ2lzdGVyX2RhaXMod204OTk0X2RhaSwgQVJSQVlfU0laRSh3bTg5OTRfZGFpKSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZ3bTg5OTQtPmNvZGVjKTsKKwlrZnJlZSh3bTg5OTQpOworCXdtODk5NF9jb2RlYyA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgd204OTk0X2NvZGVjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJ3bTg5OTQtY29kZWMiLAorCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJICAgfSwKKwkucHJvYmUgPSB3bTg5OTRfY29kZWNfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHdtODk5NF9jb2RlY19yZW1vdmUpLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgd204OTk0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3bTg5OTRfY29kZWNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHdtODk5NF9pbml0KTsKKworc3RhdGljIF9fZXhpdCB2b2lkIHdtODk5NF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndtODk5NF9jb2RlY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204OTk0X2V4aXQpOworCisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBXTTg5OTQgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06d204OTk0LWNvZGVjIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5oIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTVlMTQyCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTQuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogd204OTk0LmggIC0tICBXTTg5OTQgU29jIEF1ZGlvIGRyaXZlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfV004OTk0X0gKKyNkZWZpbmUgX1dNODk5NF9ICisKKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODk5NDsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204OTk0X2RhaVtdOworCisvKiBTb3VyY2VzIGZvciBBSUYxLzIgU1lTQ0xLIC0gdXNlIHdpdGggc2V0X2RhaV9zeXNjbGsoKSAqLworI2RlZmluZSBXTTg5OTRfU1lTQ0xLX01DTEsxIDEKKyNkZWZpbmUgV004OTk0X1NZU0NMS19NQ0xLMiAyCisjZGVmaW5lIFdNODk5NF9TWVNDTEtfRkxMMSAgMworI2RlZmluZSBXTTg5OTRfU1lTQ0xLX0ZMTDIgIDQKKworI2RlZmluZSBXTTg5OTRfRkxMMSAxCisjZGVmaW5lIFdNODk5NF9GTEwyIDIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYwppbmRleCBjNThhYWIzLi5jZWI4NmI0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMKQEAgLTIzLDEzICsyMywxMiBAQAogI2luY2x1ZGUgPHNvdW5kL2FjOTdfY29kZWMuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAKICNpbmNsdWRlICJ3bTk3MTMuaCIKIAotI2RlZmluZSBXTTk3MTNfVkVSU0lPTiAiMC4xNSIKLQogc3RydWN0IHdtOTcxM19wcml2IHsKIAl1MzIgcGxsX2luOyAvKiBQTEwgaW5wdXQgZnJlcXVlbmN5ICovCiB9OwpAQCAtMTE1LDE1ICsxMTQsMjcgQEAKIFNPQ19FTlVNX1NJTkdMRShNSUNCX01VWCwgMCwgMiwgd205NzEzX21pY2Jfc2VsZWN0KSwgLyogbWljIHNlbGVjdGlvbiAxOSAqLwogfTsKIAorc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKG91dF90bHYsIC00NjUwLCAxNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKG1haW5fdGx2LCAtMzQ1MCwgMTUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShtaXNjX3RsdiwgLTE1MDAsIDMwMCwgMCk7CitzdGF0aWMgdW5zaWduZWQgaW50IG1pY190bHZbXSA9IHsKKwlUTFZfREJfUkFOR0VfSEVBRCgyKSwKKwkwLCAyLCBUTFZfREJfU0NBTEVfSVRFTSgxMjAwLCA2MDAsIDApLAorCTMsIDMsIFRMVl9EQl9TQ0FMRV9JVEVNKDMwMDAsIDAsIDApLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtOTcxM19zbmRfYWM5N19jb250cm9sc1tdID0gewotU09DX0RPVUJMRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X01BU1RFUiwgOCwgMCwgMzEsIDEpLAorU09DX0RPVUJMRV9UTFYoIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19NQVNURVIsIDgsIDAsIDMxLCAxLCBvdXRfdGx2KSwKIFNPQ19ET1VCTEUoIlNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgQUM5N19NQVNURVIsIDE1LCA3LCAxLCAxKSwKLVNPQ19ET1VCTEUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X0hFQURQSE9ORSwgOCwgMCwgMzEsIDEpLAorU09DX0RPVUJMRV9UTFYoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X0hFQURQSE9ORSwgOCwgMCwgMzEsIDEsCisJICAgICAgIG91dF90bHYpLAogU09DX0RPVUJMRSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIEFDOTdfSEVBRFBIT05FLCAxNSwgNywgMSwgMSksCi1TT0NfRE9VQkxFKCJMaW5lIEluIFZvbHVtZSIsIEFDOTdfUENfQkVFUCwgOCwgMCwgMzEsIDEpLAotU09DX0RPVUJMRSgiUENNIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfUEhPTkUsIDgsIDAsIDMxLCAxKSwKLVNPQ19TSU5HTEUoIk1pYyAxIFZvbHVtZSIsIEFDOTdfTUlDLCA4LCAzMSwgMSksCi1TT0NfU0lOR0xFKCJNaWMgMiBWb2x1bWUiLCBBQzk3X01JQywgMCwgMzEsIDEpLAorU09DX0RPVUJMRV9UTFYoIkxpbmUgSW4gVm9sdW1lIiwgQUM5N19QQ19CRUVQLCA4LCAwLCAzMSwgMSwgbWFpbl90bHYpLAorU09DX0RPVUJMRV9UTFYoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X1BIT05FLCA4LCAwLCAzMSwgMSwgbWFpbl90bHYpLAorU09DX1NJTkdMRV9UTFYoIk1pYyAxIFZvbHVtZSIsIEFDOTdfTUlDLCA4LCAzMSwgMSwgbWFpbl90bHYpLAorU09DX1NJTkdMRV9UTFYoIk1pYyAyIFZvbHVtZSIsIEFDOTdfTUlDLCAwLCAzMSwgMSwgbWFpbl90bHYpLAorU09DX1NJTkdMRV9UTFYoIk1pYyAxIFByZWFtcCBWb2x1bWUiLCBBQzk3XzNEX0NPTlRST0wsIDEwLCAzLCAwLCBtaWNfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJNaWMgMiBQcmVhbXAgVm9sdW1lIiwgQUM5N18zRF9DT05UUk9MLCAxMiwgMywgMCwgbWljX3RsdiksCiAKIFNPQ19TSU5HTEUoIk1pYyBCb29zdCAoKzIwZEIpIFN3aXRjaCIsIEFDOTdfTElORSwgNSwgMSwgMCksCiBTT0NfU0lOR0xFKCJNaWMgSGVhZHBob25lIE1peGVyIFZvbHVtZSIsIEFDOTdfTElORSwgMCwgNywgMSksCkBAIC0xMzMsNyArMTQ0LDcgQEAKIFNPQ19ET1VCTEUoIkNhcHR1cmUgVm9sdW1lIiwgQUM5N19DRCwgOCwgMCwgMzEsIDApLAogU09DX1NJTkdMRSgiQ2FwdHVyZSBaQyBTd2l0Y2giLCBBQzk3X0NELCA3LCAxLCAwKSwKIAotU09DX1NJTkdMRSgiQ2FwdHVyZSB0byBIZWFkcGhvbmUgVm9sdW1lIiwgQUM5N19WSURFTywgMTEsIDcsIDEpLAorU09DX1NJTkdMRV9UTFYoIkNhcHR1cmUgdG8gSGVhZHBob25lIFZvbHVtZSIsIEFDOTdfVklERU8sIDExLCA3LCAxLCBtaXNjX3RsdiksCiBTT0NfU0lOR0xFKCJDYXB0dXJlIHRvIE1vbm8gQm9vc3QgKCsyMGRCKSBTd2l0Y2giLCBBQzk3X1ZJREVPLCA4LCAxLCAwKSwKIFNPQ19TSU5HTEUoIkNhcHR1cmUgQURDIEJvb3N0ICgrMjBkQikgU3dpdGNoIiwgQUM5N19WSURFTywgNiwgMSwgMCksCiAKQEAgLTE1NCwyOCArMTY1LDQzIEBACiAKIFNPQ19TSU5HTEUoIk91dDQgUGxheWJhY2sgU3dpdGNoIiwgQUM5N19NQVNURVJfTU9OTywgMTUsIDEsIDEpLAogU09DX1NJTkdMRSgiT3V0NCBQbGF5YmFjayBaQyBTd2l0Y2giLCBBQzk3X01BU1RFUl9NT05PLCAxNCwgMSwgMCksCi1TT0NfU0lOR0xFKCJPdXQ0IFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfTUFTVEVSX01PTk8sIDgsIDYzLCAxKSwKK1NPQ19TSU5HTEVfVExWKCJPdXQ0IFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfTUFTVEVSX01PTk8sIDgsIDMxLCAxLCBvdXRfdGx2KSwKIAogU09DX1NJTkdMRSgiT3V0MyBQbGF5YmFjayBTd2l0Y2giLCBBQzk3X01BU1RFUl9NT05PLCA3LCAxLCAxKSwKIFNPQ19TSU5HTEUoIk91dDMgUGxheWJhY2sgWkMgU3dpdGNoIiwgQUM5N19NQVNURVJfTU9OTywgNiwgMSwgMCksCi1TT0NfU0lOR0xFKCJPdXQzIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfTUFTVEVSX01PTk8sIDAsIDYzLCAxKSwKK1NPQ19TSU5HTEVfVExWKCJPdXQzIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfTUFTVEVSX01PTk8sIDAsIDMxLCAxLCBvdXRfdGx2KSwKIAotU09DX1NJTkdMRSgiTW9ubyBDYXB0dXJlIFZvbHVtZSIsIEFDOTdfTUFTVEVSX1RPTkUsIDgsIDMxLCAxKSwKK1NPQ19TSU5HTEVfVExWKCJNb25vIENhcHR1cmUgVm9sdW1lIiwgQUM5N19NQVNURVJfVE9ORSwgOCwgMzEsIDEsIG1haW5fdGx2KSwKIFNPQ19TSU5HTEUoIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgQUM5N19NQVNURVJfVE9ORSwgNywgMSwgMSksCiBTT0NfU0lOR0xFKCJNb25vIFBsYXliYWNrIFpDIFN3aXRjaCIsIEFDOTdfTUFTVEVSX1RPTkUsIDYsIDEsIDApLAotU09DX1NJTkdMRSgiTW9ubyBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X01BU1RFUl9UT05FLCAwLCAzMSwgMSksCitTT0NfU0lOR0xFX1RMVigiTW9ubyBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X01BU1RFUl9UT05FLCAwLCAzMSwgMSwgb3V0X3RsdiksCiAKLVNPQ19TSU5HTEUoIkJlZXAgUGxheWJhY2sgSGVhZHBob25lIFZvbHVtZSIsIEFDOTdfQVVYLCAxMiwgNywgMSksCi1TT0NfU0lOR0xFKCJCZWVwIFBsYXliYWNrIFNwZWFrZXIgVm9sdW1lIiwgQUM5N19BVVgsIDgsIDcsIDEpLAotU09DX1NJTkdMRSgiQmVlcCBQbGF5YmFjayBNb25vIFZvbHVtZSIsIEFDOTdfQVVYLCA0LCA3LCAxKSwKK1NPQ19TSU5HTEVfVExWKCJIZWFkcGhvbmUgTWl4ZXIgQmVlcCBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X0FVWCwgMTIsIDcsIDEsCisJICAgICAgIG1pc2NfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJTcGVha2VyIE1peGVyIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19BVVgsIDgsIDcsIDEsCisJICAgICAgIG1pc2NfdGx2KSwKK1NPQ19TSU5HTEVfVExWKCJNb25vIE1peGVyIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgQUM5N19BVVgsIDQsIDcsIDEsIG1pc2NfdGx2KSwKIAotU09DX1NJTkdMRSgiVm9pY2UgUGxheWJhY2sgSGVhZHBob25lIFZvbHVtZSIsIEFDOTdfUENNLCAxMiwgNywgMSksCitTT0NfU0lOR0xFX1RMVigiVm9pY2UgUGxheWJhY2sgSGVhZHBob25lIFZvbHVtZSIsIEFDOTdfUENNLCAxMiwgNywgMSwKKwkgICAgICAgbWlzY190bHYpLAogU09DX1NJTkdMRSgiVm9pY2UgUGxheWJhY2sgTWFzdGVyIFZvbHVtZSIsIEFDOTdfUENNLCA4LCA3LCAxKSwKIFNPQ19TSU5HTEUoIlZvaWNlIFBsYXliYWNrIE1vbm8gVm9sdW1lIiwgQUM5N19QQ00sIDQsIDcsIDEpLAogCitTT0NfU0lOR0xFX1RMVigiSGVhZHBob25lIE1peGVyIEF1eCBQbGF5YmFjayBWb2x1bWUiLCBBQzk3X1JFQ19TRUwsIDEyLCA3LCAxLAorCSAgICAgICBtaXNjX3RsdiksCisKK1NPQ19TSU5HTEVfVExWKCJTcGVha2VyIE1peGVyIFZvaWNlIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfUENNLCA4LCA3LCAxLAorCSAgICAgICBtaXNjX3RsdiksCitTT0NfU0lOR0xFX1RMVigiU3BlYWtlciBNaXhlciBBdXggUGxheWJhY2sgVm9sdW1lIiwgQUM5N19SRUNfU0VMLCA4LCA3LCAxLAorCSAgICAgICBtaXNjX3RsdiksCisKK1NPQ19TSU5HTEVfVExWKCJNb25vIE1peGVyIFZvaWNlIFBsYXliYWNrIFZvbHVtZSIsIEFDOTdfUENNLCA0LCA3LCAxLAorCSAgICAgICBtaXNjX3RsdiksCitTT0NfU0lOR0xFX1RMVigiTW9ubyBNaXhlciBBdXggUGxheWJhY2sgVm9sdW1lIiwgQUM5N19SRUNfU0VMLCA0LCA3LCAxLAorCSAgICAgICBtaXNjX3RsdiksCisKIFNPQ19TSU5HTEUoIkF1eCBQbGF5YmFjayBIZWFkcGhvbmUgVm9sdW1lIiwgQUM5N19SRUNfU0VMLCAxMiwgNywgMSksCiBTT0NfU0lOR0xFKCJBdXggUGxheWJhY2sgTWFzdGVyIFZvbHVtZSIsIEFDOTdfUkVDX1NFTCwgOCwgNywgMSksCi1TT0NfU0lOR0xFKCJBdXggUGxheWJhY2sgTW9ubyBWb2x1bWUiLCBBQzk3X1JFQ19TRUwsIDQsIDcsIDEpLAogCiBTT0NfRU5VTSgiQmFzcyBDb250cm9sIiwgd205NzEzX2VudW1bMTZdKSwKIFNPQ19TSU5HTEUoIkJhc3MgQ3V0LW9mZiBTd2l0Y2giLCBBQzk3X0dFTkVSQUxfUFVSUE9TRSwgMTIsIDEsIDEpLApAQCAtMTE4Niw4ICsxMjEyLDYgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CiAJaW50IHJldCA9IDAsIHJlZzsKIAotCXByaW50ayhLRVJOX0lORk8gIldNOTcxMy9XTTk3MTQgU29DIEF1ZGlvIENvZGVjICVzXG4iLCBXTTk3MTNfVkVSU0lPTik7Ci0KIAlzb2NkZXYtPmNhcmQtPmNvZGVjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9zb2NfY29kZWMpLAogCQkJCSAgICAgIEdGUF9LRVJORUwpOwogCWlmIChzb2NkZXYtPmNhcmQtPmNvZGVjID09IE5VTEwpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jCmluZGV4IGQ3M2MzMDUuLjBhZDlmNWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jCkBAIC02OCwyNCArNjgsNzcgQEAKIAlpbnQgY291bnQgPSAwOwogCiAJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiV2FpdGluZyBmb3IgREMgc2Vydm8uLi5cbiIpOworCiAJZG8gewogCQljb3VudCsrOwogCQltc2xlZXAoMSk7CiAJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0RDX1NFUlZPX1JFQURCQUNLXzApOwotCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJEQyBzZXJ2byBzdGF0dXM6ICV4XG4iLCByZWcpOwotCX0gd2hpbGUgKChyZWcgJiBXTTg5OTNfRENTX0NBTF9DT01QTEVURV9NQVNLKQotCQkgIT0gV004OTkzX0RDU19DQUxfQ09NUExFVEVfTUFTSyAmJiBjb3VudCA8IDEwMDApOworCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJEQyBzZXJ2bzogJXhcbiIsIHJlZyk7CisJfSB3aGlsZSAocmVnICYgV004OTkzX0RDU19EQVRBUEFUSF9CVVNZKTsKIAotCWlmICgocmVnICYgV004OTkzX0RDU19DQUxfQ09NUExFVEVfTUFTSykKLQkgICAgIT0gV004OTkzX0RDU19DQUxfQ09NUExFVEVfTUFTSykKKwlpZiAocmVnICYgV004OTkzX0RDU19EQVRBUEFUSF9CVVNZKQogCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgREMgU2Vydm9cbiIpOwogfQogCiAvKgorICogU3RhcnR1cCBjYWxpYnJhdGlvbiBvZiB0aGUgREMgc2Vydm8KKyAqLworc3RhdGljIHZvaWQgY2FsaWJyYXRlX2RjX3NlcnZvKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgd21faHVic19kYXRhICpodWJzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKwl1MTYgcmVnLCBkY3NfY2ZnOworCisJLyogU2V0IGZvciAzMiBzZXJpZXMgdXBkYXRlcyAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19EQ19TRVJWT18xLAorCQkJICAgIFdNODk5M19EQ1NfU0VSSUVTX05PXzAxX01BU0ssCisJCQkgICAgMzIgPDwgV004OTkzX0RDU19TRVJJRVNfTk9fMDFfU0hJRlQpOworCisJLyogRW5hYmxlIHRoZSBEQyBzZXJ2by4gIFdyaXRlIGFsbCBiaXRzIHRvIGF2b2lkIHRyaWdnZXJpbmcgc3RhcnR1cAorCSAqIG9yIHdyaXRlIGNhbGlicmF0aW9uLgorCSAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19EQ19TRVJWT18wLAorCQkJICAgIDB4RkZGRiwKKwkJCSAgICBXTTg5OTNfRENTX0VOQV9DSEFOXzAgfAorCQkJICAgIFdNODk5M19EQ1NfRU5BX0NIQU5fMSB8CisJCQkgICAgV004OTkzX0RDU19UUklHX1NFUklFU18xIHwKKwkJCSAgICBXTTg5OTNfRENTX1RSSUdfU0VSSUVTXzApOworCisJd2FpdF9mb3JfZGNfc2Vydm8oY29kZWMpOworCisJLyogQXBwbHkgY29ycmVjdGlvbiB0byBEQyBzZXJ2byByZXN1bHQgKi8KKwlpZiAoaHVicy0+ZGNzX2NvZGVzKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIkFwcGx5aW5nICVkIGNvZGUgREMgc2Vydm8gY29ycmVjdGlvblxuIiwKKwkJCWh1YnMtPmRjc19jb2Rlcyk7CisKKwkJLyogSFBPVVQxTCAqLworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5M19EQ19TRVJWT19SRUFEQkFDS18xKSAmCisJCQlXTTg5OTNfRENTX0lOVEVHX0NIQU5fMF9NQVNLOzsKKwkJcmVnICs9IGh1YnMtPmRjc19jb2RlczsKKwkJZGNzX2NmZyA9IHJlZyA8PCBXTTg5OTNfRENTX0RBQ19XUl9WQUxfMV9TSElGVDsKKworCQkvKiBIUE9VVDFSICovCisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0RDX1NFUlZPX1JFQURCQUNLXzIpICYKKwkJCVdNODk5M19EQ1NfSU5URUdfQ0hBTl8xX01BU0s7CisJCXJlZyArPSBodWJzLT5kY3NfY29kZXM7CisJCWRjc19jZmcgfD0gcmVnOworCisJCS8qIERvIGl0ICovCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19EQ19TRVJWT18zLCBkY3NfY2ZnKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0RDX1NFUlZPXzAsCisJCQkJICAgIFdNODk5M19EQ1NfVFJJR19EQUNfV1JfMCB8CisJCQkJICAgIFdNODk5M19EQ1NfVFJJR19EQUNfV1JfMSwKKwkJCQkgICAgV004OTkzX0RDU19UUklHX0RBQ19XUl8wIHwKKwkJCQkgICAgV004OTkzX0RDU19UUklHX0RBQ19XUl8xKTsKKworCQl3YWl0X2Zvcl9kY19zZXJ2byhjb2RlYyk7CisJfQorfQorCisvKgogICogVXBkYXRlIHRoZSBEQyBzZXJ2byBjYWxpYnJhdGlvbiBvbiBnYWluIGNoYW5nZXMKICAqLwogc3RhdGljIGludCB3bTg5OTNfcHV0X2RjX3NlcnZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCByZXQ7CkBAIC0yNTEsNiArMzA0LDQ3IEBACiAJICAgICAgIGxpbmVfdGx2KSwKIH07CiAKK3N0YXRpYyBpbnQgaHBfc3VwcGx5X2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgd21faHVic19kYXRhICpodWJzID0gY29kZWMtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgorCQlzd2l0Y2ggKGh1YnMtPmhwX3N0YXJ0dXBfbW9kZSkgeworCQljYXNlIDA6CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJLyogRW5hYmxlIHRoZSBoZWFkcGhvbmUgYW1wICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8xLAorCQkJCQkgICAgV004OTkzX0hQT1VUMUxfRU5BIHwKKwkJCQkJICAgIFdNODk5M19IUE9VVDFSX0VOQSwKKwkJCQkJICAgIFdNODk5M19IUE9VVDFMX0VOQSB8CisJCQkJCSAgICBXTTg5OTNfSFBPVVQxUl9FTkEpOworCisJCQkvKiBFbmFibGUgdGhlIHNlY29uZCBzdGFnZSAqLworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0FOQUxPR1VFX0hQXzAsCisJCQkJCSAgICBXTTg5OTNfSFBPVVQxTF9ETFkgfAorCQkJCQkgICAgV004OTkzX0hQT1VUMVJfRExZLAorCQkJCQkgICAgV004OTkzX0hQT1VUMUxfRExZIHwKKwkJCQkJICAgIFdNODk5M19IUE9VVDFSX0RMWSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoY29kZWMtPmRldiwgIlVua25vd24gSFAgc3RhcnR1cCBtb2RlICVkXG4iLAorCQkJCWh1YnMtPmhwX3N0YXJ0dXBfbW9kZSk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNRDoKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0NIQVJHRV9QVU1QXzEsCisJCQkJICAgIFdNODk5M19DUF9FTkEsIDApOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBocF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7CkBAIC0yNzEsMTQgKzM2NSwxMSBAQAogCQlyZWcgfD0gV004OTkzX0hQT1VUMUxfRExZIHwgV004OTkzX0hQT1VUMVJfRExZOwogCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5OTNfQU5BTE9HVUVfSFBfMCwgcmVnKTsKIAotCQkvKiBTdGFydCB0aGUgREMgc2Vydm8gKi8KLQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0RDX1NFUlZPXzAsCi0JCQkJICAgIDB4RkZGRiwKLQkJCQkgICAgV004OTkzX0RDU19FTkFfQ0hBTl8wIHwKLQkJCQkgICAgV004OTkzX0RDU19FTkFfQ0hBTl8xIHwKLQkJCQkgICAgV004OTkzX0RDU19UUklHX1NUQVJUVVBfMSB8Ci0JCQkJICAgIFdNODk5M19EQ1NfVFJJR19TVEFSVFVQXzApOwotCQl3YWl0X2Zvcl9kY19zZXJ2byhjb2RlYyk7CisJCS8qIFNtYWxsZXN0IHN1cHBvcnRlZCB1cGRhdGUgaW50ZXJ2YWwgKi8KKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0RDX1NFUlZPXzEsCisJCQkJICAgIFdNODk5M19EQ1NfVElNRVJfUEVSSU9EXzAxX01BU0ssIDEpOworCisJCWNhbGlicmF0ZV9kY19zZXJ2byhjb2RlYyk7CiAKIAkJcmVnIHw9IFdNODk5M19IUE9VVDFSX09VVFAgfCBXTTg5OTNfSFBPVVQxUl9STVZfU0hPUlQgfAogCQkJV004OTkzX0hQT1VUMUxfT1VUUCB8IFdNODk5M19IUE9VVDFMX1JNVl9TSE9SVDsKQEAgLTI4NiwyMyArMzc3LDE5IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNRDoKLQkJcmVnICY9IH4oV004OTkzX0hQT1VUMUxfUk1WX1NIT1JUIHwKLQkJCSBXTTg5OTNfSFBPVVQxTF9ETFkgfAotCQkJIFdNODk5M19IUE9VVDFMX09VVFAgfAotCQkJIFdNODk5M19IUE9VVDFSX1JNVl9TSE9SVCB8Ci0JCQkgV004OTkzX0hQT1VUMVJfRExZIHwKLQkJCSBXTTg5OTNfSFBPVVQxUl9PVVRQKTsKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0FOQUxPR1VFX0hQXzAsCisJCQkJICAgIFdNODk5M19IUE9VVDFMX0RMWSB8CisJCQkJICAgIFdNODk5M19IUE9VVDFSX0RMWSB8CisJCQkJICAgIFdNODk5M19IUE9VVDFMX1JNVl9TSE9SVCB8CisJCQkJICAgIFdNODk5M19IUE9VVDFSX1JNVl9TSE9SVCwgMCk7CiAKLQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0RDX1NFUlZPXzAsCi0JCQkJICAgIDB4ZmZmZiwgMCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19BTkFMT0dVRV9IUF8wLAorCQkJCSAgICBXTTg5OTNfSFBPVVQxTF9PVVRQIHwKKwkJCQkgICAgV004OTkzX0hQT1VUMVJfT1VUUCwgMCk7CiAKLQkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkzX0FOQUxPR1VFX0hQXzAsIHJlZyk7CiAJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5M19QT1dFUl9NQU5BR0VNRU5UXzEsCiAJCQkJICAgIFdNODk5M19IUE9VVDFMX0VOQSB8IFdNODk5M19IUE9VVDFSX0VOQSwKIAkJCQkgICAgMCk7Ci0KLQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTkzX0NIQVJHRV9QVU1QXzEsCi0JCQkJICAgIFdNODk5M19DUF9FTkEsIDApOwogCQlicmVhazsKIAl9CiAKQEAgLTQ3Myw2ICs1NjAsOCBAQAogU05EX1NPQ19EQVBNX1BHQSgiTGVmdCBPdXRwdXQgUEdBIiwgV004OTkzX1BPV0VSX01BTkFHRU1FTlRfMywgNywgMCwgTlVMTCwgMCksCiBTTkRfU09DX0RBUE1fUEdBKCJSaWdodCBPdXRwdXQgUEdBIiwgV004OTkzX1BPV0VSX01BTkFHRU1FTlRfMywgNiwgMCwgTlVMTCwgMCksCiAKK1NORF9TT0NfREFQTV9TVVBQTFkoIkhlYWRwaG9uZSBTdXBwbHkiLCBTTkRfU09DX05PUE0sIDAsIDAsIGhwX3N1cHBseV9ldmVudCwgCisJCSAgICBTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKIFNORF9TT0NfREFQTV9QR0FfRSgiSGVhZHBob25lIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKIAkJICAgTlVMTCwgMCwKIAkJICAgaHBfZXZlbnQsIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKQEAgLTYyNiw2ICs3MTUsNyBAQAogCXsgIkhlYWRwaG9uZSBQR0EiLCBOVUxMLCAiTGVmdCBIZWFkcGhvbmUgTXV4IiB9LAogCXsgIkhlYWRwaG9uZSBQR0EiLCBOVUxMLCAiUmlnaHQgSGVhZHBob25lIE11eCIgfSwKIAl7ICJIZWFkcGhvbmUgUEdBIiwgTlVMTCwgIkNMS19TWVMiIH0sCisJeyAiSGVhZHBob25lIFBHQSIsIE5VTEwsICJIZWFkcGhvbmUgU3VwcGx5IiB9LAogCiAJeyAiSFBPVVQxTCIsIE5VTEwsICJIZWFkcGhvbmUgUEdBIiB9LAogCXsgIkhQT1VUMVIiLCBOVUxMLCAiSGVhZHBob25lIFBHQSIgfSwKQEAgLTc1Myw2ICs4NDMsMTIgQEAKIAkJCQkgICAgV004OTkzX0xJTkVPVVQyX01PREUsCiAJCQkJICAgIFdNODk5M19MSU5FT1VUMl9NT0RFKTsKIAorCS8qIElmIHRoZSBsaW5lIG91dHB1dHMgYXJlIGRpZmZlcmVudGlhbCB0aGVuIHdlIGFyZW4ndCBwcmVzZW50aW5nCisJICogVk1JRCBhcyBhbiBvdXRwdXQgYW5kIGNhbiBkaXNhYmxlIGl0LgorCSAqLworCWlmIChsaW5lb3V0MV9kaWZmICYmIGxpbmVvdXQyX2RpZmYpCisJCWNvZGVjLT5pZGxlX2JpYXNfb2ZmID0gMTsKKwogCWlmIChsaW5lb3V0MWZiKQogCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfQURESVRJT05BTF9DT05UUk9MLAogCQkJCSAgICBXTTg5OTNfTElORU9VVDFfRkIsIFdNODk5M19MSU5FT1VUMV9GQik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5oCmluZGV4IDM2ZDNmYmEuLjQyMDEwNGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5oCkBAIC0xOCw2ICsxOCwxMiBAQAogCiBleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IHdtX2h1YnNfc3BrbWl4X3RsdltdOwogCisvKiBUaGlzICptdXN0KiBiZSB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgY29kZWMtPnByaXZhdGVfZGF0YSBzdHJ1Y3QgKi8KK3N0cnVjdCB3bV9odWJzX2RhdGEgeworCWludCBkY3NfY29kZXM7CisJaW50IGhwX3N0YXJ0dXBfbW9kZTsKK307CisKIGV4dGVybiBpbnQgd21faHVic19hZGRfYW5hbG9ndWVfY29udHJvbHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKik7CiBleHRlcm4gaW50IHdtX2h1YnNfYWRkX2FuYWxvZ3VlX3JvdXRlcyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqLCBpbnQsIGludCk7CiBleHRlcm4gaW50IHdtX2h1YnNfaGFuZGxlX2FuYWxvZ3VlX3BkYXRhKHN0cnVjdCBzbmRfc29jX2NvZGVjICosCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKaW5kZXggMGEzMDJlMS4uYWI2NTE4ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYwpAQCAtNzY3LDE0ICs3NjcsMjYgQEAKIAlpbnQgcmV0ID0gMDsKIAogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJaWYgKCFkZXYtPmNsa19hY3RpdmUpIHsKKwkJCWNsa19lbmFibGUoZGV2LT5jbGspOworCQkJZGV2LT5jbGtfYWN0aXZlID0gMTsKKwkJfQogCQlkYXZpbmNpX21jYXNwX3N0YXJ0KGRldiwgc3Vic3RyZWFtLT5zdHJlYW0pOwogCQlicmVhazsKIAotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJCWRhdmluY2lfbWNhc3Bfc3RvcChkZXYsIHN1YnN0cmVhbS0+c3RyZWFtKTsKKwkJaWYgKGRldi0+Y2xrX2FjdGl2ZSkgeworCQkJY2xrX2Rpc2FibGUoZGV2LT5jbGspOworCQkJZGV2LT5jbGtfYWN0aXZlID0gMDsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKIAkJZGF2aW5jaV9tY2FzcF9zdG9wKGRldiwgc3Vic3RyZWFtLT5zdHJlYW0pOwogCQlicmVhazsKQEAgLTg2Niw2ICs4NzgsNyBAQAogCX0KIAogCWNsa19lbmFibGUoZGV2LT5jbGspOworCWRldi0+Y2xrX2FjdGl2ZSA9IDE7CiAKIAlkZXYtPmJhc2UgPSAodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhtZW0tPnN0YXJ0KTsKIAlkZXYtPm9wX21vZGUgPSBwZGF0YS0+b3BfbW9kZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuaCBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuaAppbmRleCA1ODJjOTI0Li5lNzU1YjUxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmgKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5oCkBAIC00NCw2ICs0NCw3IEBACiAJaW50IHNhbXBsZV9yYXRlOwogCXN0cnVjdCBjbGsgKmNsazsKIAl1bnNpZ25lZCBpbnQgY29kZWNfZm10OworCXU4IGNsa19hY3RpdmU7CiAKIAkvKiBNY0FTUCBzcGVjaWZpYyBkYXRhICovCiAJaW50CXRkbV9zbG90czsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jCmluZGV4IGFkNGQ3ZjQuLjgwYzdmZGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYwpAQCAtNDksNyArNDksNyBAQAogc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHBjbV9oYXJkd2FyZV9wbGF5YmFjayA9IHsKIAkuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8IFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKIAkJIFNORFJWX1BDTV9JTkZPX01NQVAgfCBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKLQkJIFNORFJWX1BDTV9JTkZPX1BBVVNFKSwKKwkJIFNORFJWX1BDTV9JTkZPX1BBVVNFIHwgU05EUlZfUENNX0lORk9fUkVTVU1FKSwKIAkuZm9ybWF0cyA9IChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSksCiAJLnJhdGVzID0gKFNORFJWX1BDTV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xNjAwMCB8CiAJCSAgU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV8zMjAwMCB8CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2VmaWthLWF1ZGlvLWZhYnJpYy5jIGIvc291bmQvc29jL2ZzbC9lZmlrYS1hdWRpby1mYWJyaWMuYwppbmRleCAzMzI2ZTJhLi4xYTViOGUwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2VmaWthLWF1ZGlvLWZhYnJpYy5jCisrKyBiL3NvdW5kL3NvYy9mc2wvZWZpa2EtYXVkaW8tZmFicmljLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCWludCByYzsKIAotCWlmICghbWFjaGluZV9pc19jb21wYXRpYmxlKCJicGxhbixlZmlrYSIpKQorCWlmICghb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJicGxhbixlZmlrYSIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWNhcmQucGxhdGZvcm0gPSAmbXBjNTIwMF9hdWRpb19kbWFfcGxhdGZvcm07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL3BjbTAzMC1hdWRpby1mYWJyaWMuYyBiL3NvdW5kL3NvYy9mc2wvcGNtMDMwLWF1ZGlvLWZhYnJpYy5jCmluZGV4IGI5MjhlZjcuLjY2NDRjYmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvcGNtMDMwLWF1ZGlvLWZhYnJpYy5jCisrKyBiL3NvdW5kL3NvYy9mc2wvcGNtMDMwLWF1ZGlvLWZhYnJpYy5jCkBAIC01NSw3ICs1NSw3IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAlpbnQgcmM7CiAKLQlpZiAoIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgicGh5dGVjLHBjbTAzMCIpKQorCWlmICghb2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJwaHl0ZWMscGNtMDMwIikpCiAJCXJldHVybiAtRU5PREVWOwogCiAJY2FyZC5wbGF0Zm9ybSA9ICZtcGM1MjAwX2F1ZGlvX2RtYV9wbGF0Zm9ybTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvS2NvbmZpZyBiL3NvdW5kL3NvYy9pbXgvS2NvbmZpZwppbmRleCBhNzAwNTYyLi5jN2QwZmQ5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW14L0tjb25maWcKKysrIGIvc291bmQvc29jL2lteC9LY29uZmlnCkBAIC0xLDIxICsxLDEzIEBACi1jb25maWcgU05EX01YMV9NWDJfU09DCi0JdHJpc3RhdGUgIlNvQyBBdWRpbyBmb3IgRnJlZWNhbGUgaS5NWDF4IGkuTVgyeCBDUFVzIgotCWRlcGVuZHMgb24gQVJDSF9NWDIgfHwgQVJDSF9NWDEKK2NvbmZpZyBTTkRfSU1YX1NPQworCXRyaXN0YXRlICJTb0MgQXVkaW8gZm9yIEZyZWVzY2FsZSBpLk1YIENQVXMiCisJZGVwZW5kcyBvbiBBUkNIX01YQyAmJiBCUk9LRU4KIAlzZWxlY3QgU05EX1BDTQorCXNlbGVjdCBGSVEKKwlzZWxlY3QgU05EX1NPQ19BQzk3X0JVUwogCWhlbHAKIAkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIGNvZGVjcyBhdHRhY2hlZCB0bwotCSAgdGhlIE1YMSBvciBNWDIgU1NJIGludGVyZmFjZS4KKwkgIHRoZSBpLk1YIFNTSSBpbnRlcmZhY2UuCiAKIGNvbmZpZyBTTkRfTVhDX1NPQ19TU0kKIAl0cmlzdGF0ZQogCi1jb25maWcgU05EX1NPQ19NWDI3VklTX1dNODk3NAotCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgTVgyNyAtIFdNODk3NCBWaXNzdHJpbV9zbTEwIGJvYXJkIgotCWRlcGVuZHMgb24gU05EX01YMV9NWDJfU09DICYmIE1BQ0hfTVgyNyAmJiBNQUNIX0lNWDI3X1ZJU1NUUklNX00xMAotCXNlbGVjdCBTTkRfTVhDX1NPQ19TU0kKLQlzZWxlY3QgU05EX1NPQ19XTTg5NzQKLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIFZpc3N0cmltIFNNMTAKLQkgIGJvYXJkIHdpdGggV004OTc0LgotCi0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvTWFrZWZpbGUgYi9zb3VuZC9zb2MvaW14L01ha2VmaWxlCmluZGV4IGMyZmZkMmMuLjlmOGJiOTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2lteC9NYWtlZmlsZQpAQCAtMSwxMCArMSwxMiBAQAogIyBpLk1YIFBsYXRmb3JtIFN1cHBvcnQKLXNuZC1zb2MtbXgxX214Mi1vYmpzIDo9IG14MV9teDItcGNtLm8KLXNuZC1zb2MtbXhjLXNzaS1vYmpzIDo9IG14Yy1zc2kubworc25kLXNvYy1pbXgtb2JqcyA6PSBpbXgtc3NpLm8gaW14LXBjbS1maXEubwogCi1vYmotJChDT05GSUdfU05EX01YMV9NWDJfU09DKSArPSBzbmQtc29jLW14MV9teDIubwotb2JqLSQoQ09ORklHX1NORF9NWENfU09DX1NTSSkgKz0gc25kLXNvYy1teGMtc3NpLm8KK2lmZGVmIENPTkZJR19NQUNIX01YMjcKK3NuZC1zb2MtaW14LW9ianMgKz0gaW14LXBjbS1kbWEtbXgyLm8KK2VuZGlmCisKK29iai0kKENPTkZJR19TTkRfSU1YX1NPQykgKz0gc25kLXNvYy1pbXgubwogCiAjIGkuTVggTWFjaGluZSBTdXBwb3J0Ci1zbmQtc29jLW14Mjd2aXMtd204OTc0LW9ianMgOj0gbXgyN3Zpc193bTg5NzQubwotb2JqLSQoQ09ORklHX1NORF9TT0NfTVgyN1ZJU19XTTg5NzQpICs9IHNuZC1zb2MtbXgyN3Zpcy13bTg5NzQubworc25kLXNvYy1waHljb3JlLWFjOTctb2JqcyA6PSBwaHljb3JlLWFjOTcubworb2JqLSQoQ09ORklHX1NORF9TT0NfUEhZQ09SRV9BQzk3KSArPSBzbmQtc29jLXBoeWNvcmUtYWM5Ny5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L2lteC1wY20tZG1hLW14Mi5jIGIvc291bmQvc29jL2lteC9pbXgtcGNtLWRtYS1teDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTQ1MmU0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2lteC9pbXgtcGNtLWRtYS1teDIuYwpAQCAtMCwwICsxLDMxMyBAQAorLyoKKyAqIGlteC1wY20tZG1hLW14Mi5jICAtLSAgQUxTQSBTb2MgQXVkaW8gTGF5ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGNvZGUgY29weXJpZ2h0ZWQgYnkgRnJlZXNjYWxlLAorICogTGlhbSBHaXJkd29vZCwgSmF2aWVyIE1hcnRpbiBhbmQgcHJvYmFibHkgb3RoZXJzLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSA8bWFjaC9kbWEtbXgxLW14Mi5oPgorCisjaW5jbHVkZSAiaW14LXNzaS5oIgorCitzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgeworCWludCBzZ19jb3VudDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2xpc3Q7CisJaW50IHBlcmlvZDsKKwlpbnQgcGVyaW9kczsKKwl1bnNpZ25lZCBsb25nIGRtYV9hZGRyOworCWludCBkbWE7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGxvbmcgcGVyaW9kX2NudDsKKwl2b2lkICpidWY7CisJaW50IHBlcmlvZF90aW1lOworfTsKKworLyogQ2FsbGVkIGJ5IHRoZSBETUEgZnJhbWV3b3JrIHdoZW4gYSBwZXJpb2QgaGFzIGVsYXBzZWQgKi8KK3N0YXRpYyB2b2lkIGlteF9zc2lfZG1hX3Byb2dyZXNzaW9uKGludCBjaGFubmVsLCB2b2lkICpkYXRhLAorCQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoIXNnKQorCQlyZXR1cm47CisKKwlydW50aW1lID0gaXBydGQtPnN1YnN0cmVhbS0+cnVudGltZTsKKworCWlwcnRkLT5vZmZzZXQgPSBzZy0+ZG1hX2FkZHJlc3MgLSBydW50aW1lLT5kbWFfYWRkcjsKKworCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoaXBydGQtPnN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkIGlteF9zc2lfZG1hX2NhbGxiYWNrKGludCBjaGFubmVsLCB2b2lkICpkYXRhKQoreworCXByX2VycigiJXMgc2hvdWxkbid0IGJlIGNhbGxlZFxuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgdm9pZCBzbmRfaW14X2RtYV9lcnJfY2FsbGJhY2soaW50IGNoYW5uZWwsIHZvaWQgKmRhdGEsIGludCBlcnIpCit7CisJcHJfZXJyKCJETUEgZXJyb3IgY2FsbGJhY2sgY2FsbGVkXG4iKTsKKworCXByX2VycigiRE1BIHRpbWVvdXQgb24gY2hhbm5lbCAlZCAtJXMlcyVzJXNcbiIsCisJCSBjaGFubmVsLAorCQkgZXJyICYgSU1YX0RNQV9FUlJfQlVSU1QgPyAgICAiIGJ1cnN0IiA6ICIiLAorCQkgZXJyICYgSU1YX0RNQV9FUlJfUkVRVUVTVCA/ICAiIHJlcXVlc3QiIDogIiIsCisJCSBlcnIgJiBJTVhfRE1BX0VSUl9UUkFOU0ZFUiA/ICIgdHJhbnNmZXIiIDogIiIsCisJCSBlcnIgJiBJTVhfRE1BX0VSUl9CVUZGRVIgPyAgICIgYnVmZmVyIiA6ICIiKTsKK30KKworc3RhdGljIGludCBpbXhfc3NpX2RtYV9hbGxvYyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGlteF9wY21fZG1hX3BhcmFtcyAqZG1hX3BhcmFtcyA9IHJ0ZC0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKKworCWlwcnRkLT5kbWEgPSBpbXhfZG1hX3JlcXVlc3RfYnlfcHJpbyhEUlZfTkFNRSwgRE1BX1BSSU9fSElHSCk7CisJaWYgKGlwcnRkLT5kbWEgPCAwKSB7CisJCXByX2VycigiRmFpbGVkIHRvIGNsYWltIHRoZSBhdWRpbyBETUFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSBpbXhfZG1hX3NldHVwX2hhbmRsZXJzKGlwcnRkLT5kbWEsCisJCQkJaW14X3NzaV9kbWFfY2FsbGJhY2ssCisJCQkJc25kX2lteF9kbWFfZXJyX2NhbGxiYWNrLCBzdWJzdHJlYW0pOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gaW14X2RtYV9zZXR1cF9wcm9ncmVzc2lvbl9oYW5kbGVyKGlwcnRkLT5kbWEsCisJCQlpbXhfc3NpX2RtYV9wcm9ncmVzc2lvbik7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIkZhaWxlZCB0byBzZXR1cCB0aGUgRE1BIGhhbmRsZXJcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBpbXhfZG1hX2NvbmZpZ19jaGFubmVsKGlwcnRkLT5kbWEsCisJCQlJTVhfRE1BX01FTVNJWkVfMTYgfCBJTVhfRE1BX1RZUEVfRklGTywKKwkJCUlNWF9ETUFfTUVNU0laRV8zMiB8IElNWF9ETUFfVFlQRV9MSU5FQVIsCisJCQlkbWFfcGFyYW1zLT5kbWEsIDEpOworCWlmIChyZXQgPCAwKSB7CisJCXByX2VycigiQ2Fubm90IGNvbmZpZ3VyZSBETUEgY2hhbm5lbDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlteF9kbWFfY29uZmlnX2J1cnN0bGVuKGlwcnRkLT5kbWEsIGRtYV9wYXJhbXMtPmJ1cnN0c2l6ZSAqIDIpOworCisJcmV0dXJuIDA7CitvdXQ6CisJaW14X2RtYV9mcmVlKGlwcnRkLT5kbWEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc25kX2lteF9wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGRtYV9hZGRyOworCisJaW14X3NzaV9kbWFfYWxsb2Moc3Vic3RyZWFtKTsKKworCWlwcnRkLT5zaXplID0gcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpOworCWlwcnRkLT5wZXJpb2RzID0gcGFyYW1zX3BlcmlvZHMocGFyYW1zKTsKKwlpcHJ0ZC0+cGVyaW9kID0gcGFyYW1zX3BlcmlvZF9ieXRlcyhwYXJhbXMpOworCWlwcnRkLT5vZmZzZXQgPSAwOworCWlwcnRkLT5wZXJpb2RfdGltZSA9IEhaIC8gKHBhcmFtc19yYXRlKHBhcmFtcykgLworCQkJcGFyYW1zX3BlcmlvZF9zaXplKHBhcmFtcykpOworCisJc25kX3BjbV9zZXRfcnVudGltZV9idWZmZXIoc3Vic3RyZWFtLCAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyKTsKKworCWlmIChpcHJ0ZC0+c2dfY291bnQgIT0gaXBydGQtPnBlcmlvZHMpIHsKKwkJa2ZyZWUoaXBydGQtPnNnX2xpc3QpOworCisJCWlwcnRkLT5zZ19saXN0ID0ga2NhbGxvYyhpcHJ0ZC0+cGVyaW9kcyArIDEsCisJCQkJc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCksIEdGUF9LRVJORUwpOworCQlpZiAoIWlwcnRkLT5zZ19saXN0KQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWlwcnRkLT5zZ19jb3VudCA9IGlwcnRkLT5wZXJpb2RzICsgMTsKKwl9CisKKwlzZ19pbml0X3RhYmxlKGlwcnRkLT5zZ19saXN0LCBpcHJ0ZC0+c2dfY291bnQpOworCWRtYV9hZGRyID0gcnVudGltZS0+ZG1hX2FkZHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgaXBydGQtPnBlcmlvZHM7IGkrKykgeworCQlpcHJ0ZC0+c2dfbGlzdFtpXS5wYWdlX2xpbmsgPSAwOworCQlpcHJ0ZC0+c2dfbGlzdFtpXS5vZmZzZXQgPSAwOworCQlpcHJ0ZC0+c2dfbGlzdFtpXS5kbWFfYWRkcmVzcyA9IGRtYV9hZGRyOworCQlpcHJ0ZC0+c2dfbGlzdFtpXS5sZW5ndGggPSBpcHJ0ZC0+cGVyaW9kOworCQlkbWFfYWRkciArPSBpcHJ0ZC0+cGVyaW9kOworCX0KKworCS8qIGNsb3NlIHRoZSBsb29wICovCisJaXBydGQtPnNnX2xpc3RbaXBydGQtPnNnX2NvdW50IC0gMV0ub2Zmc2V0ID0gMDsKKwlpcHJ0ZC0+c2dfbGlzdFtpcHJ0ZC0+c2dfY291bnQgLSAxXS5sZW5ndGggPSAwOworCWlwcnRkLT5zZ19saXN0W2lwcnRkLT5zZ19jb3VudCAtIDFdLnBhZ2VfbGluayA9CisJCQkoKHVuc2lnbmVkIGxvbmcpIGlwcnRkLT5zZ19saXN0IHwgMHgwMSkgJiB+MHgwMjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfaW14X3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCWlmIChpcHJ0ZC0+ZG1hID49IDApIHsKKwkJaW14X2RtYV9mcmVlKGlwcnRkLT5kbWEpOworCQlpcHJ0ZC0+ZG1hID0gLUVJTlZBTDsKKwl9CisKKwlrZnJlZShpcHJ0ZC0+c2dfbGlzdCk7CisJaXBydGQtPnNnX2xpc3QgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2lteF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaW14X3BjbV9kbWFfcGFyYW1zICpkbWFfcGFyYW1zID0gcnRkLT5kYWktPmNwdV9kYWktPmRtYV9kYXRhOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisJaW50IGVycjsKKworCWlwcnRkLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJaXBydGQtPmJ1ZiA9ICh1bnNpZ25lZCBpbnQgKilzdWJzdHJlYW0tPmRtYV9idWZmZXIuYXJlYTsKKwlpcHJ0ZC0+cGVyaW9kX2NudCA9IDA7CisKKwlwcl9kZWJ1ZygiJXM6IGJ1ZjogJXAgcGVyaW9kOiAlZCBwZXJpb2RzOiAlZFxuIiwKKwkJCV9fZnVuY19fLCBpcHJ0ZC0+YnVmLCBpcHJ0ZC0+cGVyaW9kLCBpcHJ0ZC0+cGVyaW9kcyk7CisKKwllcnIgPSBpbXhfZG1hX3NldHVwX3NnKGlwcnRkLT5kbWEsIGlwcnRkLT5zZ19saXN0LCBpcHJ0ZC0+c2dfY291bnQsCisJCQlJTVhfRE1BX0xFTkdUSF9MT09QLCBkbWFfcGFyYW1zLT5kbWFfYWRkciwKKwkJCXN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgPworCQkJRE1BX01PREVfV1JJVEUgOiBETUFfTU9ERV9SRUFEKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2lteF9wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlpbXhfZG1hX2VuYWJsZShpcHJ0ZC0+ZG1hKTsKKworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlpbXhfZG1hX2Rpc2FibGUoaXBydGQtPmRtYSk7CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfaW14X3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBieXRlc190b19mcmFtZXMoc3Vic3RyZWFtLT5ydW50aW1lLCBpcHJ0ZC0+b2Zmc2V0KTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9pbXhfaGFyZHdhcmUgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCVNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUCB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQlTTkRSVl9QQ01fSU5GT19QQVVTRSB8CisJCVNORFJWX1BDTV9JTkZPX1JFU1VNRSwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5yYXRlX21pbiA9IDgwMDAsCisJLmNoYW5uZWxzX21pbiA9IDIsCisJLmNoYW5uZWxzX21heCA9IDIsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSBJTVhfU1NJX0RNQUJVRl9TSVpFLAorCS5wZXJpb2RfYnl0ZXNfbWluID0gMTI4LAorCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTYgKiAxMDI0LAorCS5wZXJpb2RzX21pbiA9IDIsCisJLnBlcmlvZHNfbWF4ID0gMjU1LAorCS5maWZvX3NpemUgPSAwLAorfTsKKworc3RhdGljIGludCBzbmRfaW14X29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgKmlwcnRkOworCWludCByZXQ7CisKKwlpcHJ0ZCA9IGt6YWxsb2Moc2l6ZW9mKCppcHJ0ZCksIEdGUF9LRVJORUwpOworCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGlwcnRkOworCisJcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIoc3Vic3RyZWFtLT5ydW50aW1lLAorCQkJU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdWJzdHJlYW0sICZzbmRfaW14X2hhcmR3YXJlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBpbXhfcGNtX29wcyA9IHsKKwkub3BlbgkJPSBzbmRfaW14X29wZW4sCisJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMJPSBzbmRfaW14X3BjbV9od19wYXJhbXMsCisJLmh3X2ZyZWUJPSBzbmRfaW14X3BjbV9od19mcmVlLAorCS5wcmVwYXJlCT0gc25kX2lteF9wY21fcHJlcGFyZSwKKwkudHJpZ2dlcgk9IHNuZF9pbXhfcGNtX3RyaWdnZXIsCisJLnBvaW50ZXIJPSBzbmRfaW14X3BjbV9wb2ludGVyLAorCS5tbWFwCQk9IHNuZF9pbXhfcGNtX21tYXAsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gaW14X3NvY19wbGF0Zm9ybV9kbWEgPSB7CisJLm5hbWUJCT0gImlteC1hdWRpbyIsCisJLnBjbV9vcHMgCT0gJmlteF9wY21fb3BzLAorCS5wY21fbmV3CT0gaW14X3BjbV9uZXcsCisJLnBjbV9mcmVlCT0gaW14X3BjbV9mcmVlLAorfTsKKworc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKmlteF9zc2lfZG1hX214Ml9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCXN0cnVjdCBpbXhfc3NpICpzc2kpCit7CisJc3NpLT5kbWFfcGFyYW1zX3R4LmJ1cnN0c2l6ZSA9IERNQV9UWEZJRk9fQlVSU1Q7CisJc3NpLT5kbWFfcGFyYW1zX3J4LmJ1cnN0c2l6ZSA9IERNQV9SWEZJRk9fQlVSU1Q7CisKKwlyZXR1cm4gJmlteF9zb2NfcGxhdGZvcm1fZG1hOworfQorCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L2lteC1wY20tZmlxLmMgYi9zb3VuZC9zb2MvaW14L2lteC1wY20tZmlxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDljYjk4NAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9pbXgvaW14LXBjbS1maXEuYwpAQCAtMCwwICsxLDI5NyBAQAorLyoKKyAqIGlteC1wY20tZmlxLmMgIC0tICBBTFNBIFNvYyBBdWRpbyBMYXllcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gY29kZSBjb3B5cmlnaHRlZCBieSBGcmVlc2NhbGUsCisgKiBMaWFtIEdpcmR3b29kLCBKYXZpZXIgTWFydGluIGFuZCBwcm9iYWJseSBvdGhlcnMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlIDxhc20vZmlxLmg+CisKKyNpbmNsdWRlIDxtYWNoL3NzaS5oPgorCisjaW5jbHVkZSAiaW14LXNzaS5oIgorCitzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgeworCWludCBwZXJpb2Q7CisJaW50IHBlcmlvZHM7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBsYXN0X29mZnNldDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJaW50IHBvbGxfdGltZTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbXhfc3NpX3NldF9uZXh0X3BvbGwoc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCkKK3sKKwlpcHJ0ZC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBpcHJ0ZC0+cG9sbF90aW1lOworfQorCitzdGF0aWMgdm9pZCBpbXhfc3NpX3RpbWVyX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9ICh2b2lkICopZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHB0X3JlZ3MgcmVnczsKKwl1bnNpZ25lZCBsb25nIGRlbHRhOworCisJZ2V0X2ZpcV9yZWdzKCZyZWdzKTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlpcHJ0ZC0+b2Zmc2V0ID0gcmVncy5BUk1fcjggJiAweGZmZmY7CisJZWxzZQorCQlpcHJ0ZC0+b2Zmc2V0ID0gcmVncy5BUk1fcjkgJiAweGZmZmY7CisKKwkvKiBIb3cgbXVjaCBkYXRhIGhhdmUgd2UgdHJhbnNmZXJyZWQgc2luY2UgdGhlIGxhc3QgcGVyaW9kIHJlcG9ydD8gKi8KKwlpZiAoaXBydGQtPm9mZnNldCA+PSBpcHJ0ZC0+bGFzdF9vZmZzZXQpCisJCWRlbHRhID0gaXBydGQtPm9mZnNldCAtIGlwcnRkLT5sYXN0X29mZnNldDsKKwllbHNlCisJCWRlbHRhID0gcnVudGltZS0+YnVmZmVyX3NpemUgKyBpcHJ0ZC0+b2Zmc2V0CisJCQktIGlwcnRkLT5sYXN0X29mZnNldDsKKworCS8qIElmIHdlJ3ZlIHRyYW5zZmVycmVkIGF0IGxlYXN0IGEgcGVyaW9kIHRoZW4gcmVwb3J0IGl0IGFuZAorCSAqIHJlc2V0IG91ciBwb2xsIHRpbWUgKi8KKwlpZiAoZGVsdGEgPj0gcnVudGltZS0+cGVyaW9kX3NpemUpIHsKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworCQlpcHJ0ZC0+bGFzdF9vZmZzZXQgPSBpcHJ0ZC0+b2Zmc2V0OworCisJCWlteF9zc2lfc2V0X25leHRfcG9sbChpcHJ0ZCk7CisJfQorCisJLyogUmVzdGFydCB0aGUgdGltZXI7IGlmIHdlIGRpZG4ndCByZXBvcnQgd2UnbGwgcnVuIG9uIHRoZSBuZXh0IHRpY2sgKi8KKwlhZGRfdGltZXIoJmlwcnRkLT50aW1lcik7CisKK30KKworc3RhdGljIHN0cnVjdCBmaXFfaGFuZGxlciBmaCA9IHsKKwkubmFtZQkJPSBEUlZfTkFNRSwKK307CisKK3N0YXRpYyBpbnQgc25kX2lteF9wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCWlwcnRkLT5zaXplID0gcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpOworCWlwcnRkLT5wZXJpb2RzID0gcGFyYW1zX3BlcmlvZHMocGFyYW1zKTsKKwlpcHJ0ZC0+cGVyaW9kID0gcGFyYW1zX3BlcmlvZF9ieXRlcyhwYXJhbXMpIDsKKwlpcHJ0ZC0+b2Zmc2V0ID0gMDsKKwlpcHJ0ZC0+bGFzdF9vZmZzZXQgPSAwOworCWlwcnRkLT5wb2xsX3RpbWUgPSBIWiAvIChwYXJhbXNfcmF0ZShwYXJhbXMpIC8gcGFyYW1zX3BlcmlvZF9zaXplKHBhcmFtcykpOworCisJc25kX3BjbV9zZXRfcnVudGltZV9idWZmZXIoc3Vic3RyZWFtLCAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9pbXhfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgKmlwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisKKwlnZXRfZmlxX3JlZ3MoJnJlZ3MpOworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlyZWdzLkFSTV9yOCA9IChpcHJ0ZC0+cGVyaW9kICogaXBydGQtPnBlcmlvZHMgLSAxKSA8PCAxNjsKKwllbHNlCisJCXJlZ3MuQVJNX3I5ID0gKGlwcnRkLT5wZXJpb2QgKiBpcHJ0ZC0+cGVyaW9kcyAtIDEpIDw8IDE2OworCisJc2V0X2ZpcV9yZWdzKCZyZWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpcV9lbmFibGU7CitzdGF0aWMgaW50IGlteF9wY21fZmlxOworCitzdGF0aWMgaW50IHNuZF9pbXhfcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgaW14X3BjbV9ydW50aW1lX2RhdGEgKmlwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJaW14X3NzaV9zZXRfbmV4dF9wb2xsKGlwcnRkKTsKKwkJYWRkX3RpbWVyKCZpcHJ0ZC0+dGltZXIpOworCQlpZiAoKytmaXFfZW5hYmxlID09IDEpCisJCQllbmFibGVfZmlxKGlteF9wY21fZmlxKTsKKworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlkZWxfdGltZXIoJmlwcnRkLT50aW1lcik7CisJCWlmICgtLWZpcV9lbmFibGUgPT0gMCkKKwkJCWRpc2FibGVfZmlxKGlteF9wY21fZmlxKTsKKworCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3Qgc25kX2lteF9wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1YnN0cmVhbS0+cnVudGltZSwgaXBydGQtPm9mZnNldCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfaW14X2hhcmR3YXJlID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCVNORFJWX1BDTV9JTkZPX01NQVAgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJU05EUlZfUENNX0lORk9fUEFVU0UgfAorCQlTTkRSVl9QQ01fSU5GT19SRVNVTUUsCisJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkucmF0ZV9taW4gPSA4MDAwLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5idWZmZXJfYnl0ZXNfbWF4ID0gSU1YX1NTSV9ETUFCVUZfU0laRSwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDEyOCwKKwkucGVyaW9kX2J5dGVzX21heCA9IDE2ICogMTAyNCwKKwkucGVyaW9kc19taW4gPSAyLAorCS5wZXJpb2RzX21heCA9IDI1NSwKKwkuZmlmb19zaXplID0gMCwKK307CisKK3N0YXRpYyBpbnQgc25kX2lteF9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGlteF9wY21fcnVudGltZV9kYXRhICppcHJ0ZDsKKwlpbnQgcmV0OworCisJaXBydGQgPSBremFsbG9jKHNpemVvZigqaXBydGQpLCBHRlBfS0VSTkVMKTsKKwlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBpcHJ0ZDsKKworCWluaXRfdGltZXIoJmlwcnRkLT50aW1lcik7CisJaXBydGQtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylzdWJzdHJlYW07CisJaXBydGQtPnRpbWVyLmZ1bmN0aW9uID0gaW14X3NzaV90aW1lcl9jYWxsYmFjazsKKworCXJldCA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHN1YnN0cmVhbS0+cnVudGltZSwKKwkJCVNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmc25kX2lteF9oYXJkd2FyZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2lteF9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBpbXhfcGNtX3J1bnRpbWVfZGF0YSAqaXBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlkZWxfdGltZXJfc3luYygmaXBydGQtPnRpbWVyKTsKKwlrZnJlZShpcHJ0ZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBpbXhfcGNtX29wcyA9IHsKKwkub3BlbgkJPSBzbmRfaW14X29wZW4sCisJLmNsb3NlCQk9IHNuZF9pbXhfY2xvc2UsCisJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMJPSBzbmRfaW14X3BjbV9od19wYXJhbXMsCisJLnByZXBhcmUJPSBzbmRfaW14X3BjbV9wcmVwYXJlLAorCS50cmlnZ2VyCT0gc25kX2lteF9wY21fdHJpZ2dlciwKKwkucG9pbnRlcgk9IHNuZF9pbXhfcGNtX3BvaW50ZXIsCisJLm1tYXAJCT0gc25kX2lteF9wY21fbW1hcCwKK307CisKK3N0YXRpYyBpbnQgaW14X3BjbV9maXFfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaW14X3BjbV9uZXcoY2FyZCwgZGFpLCBwY20pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoZGFpLT5wbGF5YmFjay5jaGFubmVsc19taW4pIHsKKwkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPQorCQkJcGNtLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLnN1YnN0cmVhbTsKKwkJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWYgPSAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyOworCisJCWlteF9zc2lfZmlxX3R4X2J1ZmZlciA9ICh1bnNpZ25lZCBsb25nKWJ1Zi0+YXJlYTsKKwl9CisKKwlpZiAoZGFpLT5jYXB0dXJlLmNoYW5uZWxzX21pbikgeworCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9CisJCQlwY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5zdWJzdHJlYW07CisJCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKworCQlpbXhfc3NpX2ZpcV9yeF9idWZmZXIgPSAodW5zaWduZWQgbG9uZylidWYtPmFyZWE7CisJfQorCisJc2V0X2ZpcV9oYW5kbGVyKCZpbXhfc3NpX2ZpcV9zdGFydCwKKwkJJmlteF9zc2lfZmlxX2VuZCAtICZpbXhfc3NpX2ZpcV9zdGFydCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtIGlteF9zb2NfcGxhdGZvcm1fZmlxID0geworCS5wY21fb3BzIAk9ICZpbXhfcGNtX29wcywKKwkucGNtX25ldwk9IGlteF9wY21fZmlxX25ldywKKwkucGNtX2ZyZWUJPSBpbXhfcGNtX2ZyZWUsCit9OworCitzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqaW14X3NzaV9maXFfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlzdHJ1Y3QgaW14X3NzaSAqc3NpKQoreworCWludCByZXQgPSAwOworCisJcmV0ID0gY2xhaW1fZmlxKCZmaCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gY2xhaW0gZmlxOiAlZCIsIHJldCk7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJbXhjX3NldF9pcnFfZmlxKHNzaS0+aXJxLCAxKTsKKworCWlteF9wY21fZmlxID0gc3NpLT5pcnE7CisKKwlpbXhfc3NpX2ZpcV9iYXNlID0gKHVuc2lnbmVkIGxvbmcpc3NpLT5iYXNlOworCisJc3NpLT5kbWFfcGFyYW1zX3R4LmJ1cnN0c2l6ZSA9IDQ7CisJc3NpLT5kbWFfcGFyYW1zX3J4LmJ1cnN0c2l6ZSA9IDY7CisKKwlyZXR1cm4gJmlteF9zb2NfcGxhdGZvcm1fZmlxOworfQorCit2b2lkIGlteF9zc2lfZmlxX2V4aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJc3RydWN0IGlteF9zc2kgKnNzaSkKK3sKKwlteGNfc2V0X2lycV9maXEoc3NpLT5pcnEsIDApOworCXJlbGVhc2VfZmlxKCZmaCk7Cit9CisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5jIGIvc291bmQvc29jL2lteC9pbXgtc3NpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZmNDZhNwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5jCkBAIC0wLDAgKzEsNzU4IEBACisvKgorICogaW14LXNzaS5jICAtLSAgQUxTQSBTb2MgQXVkaW8gTGF5ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGNvZGUgY29weXJpZ2h0ZWQgYnkgRnJlZXNjYWxlLAorICogTGlhbSBHaXJkd29vZCwgSmF2aWVyIE1hcnRpbiBhbmQgcHJvYmFibHkgb3RoZXJzLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCisgKiBUaGUgaS5NWCBTU0kgY29yZSBoYXMgc29tZSBuYXN0eSBsaW1pdGF0aW9ucyBpbiBBQzk3IG1vZGUuIFdoaWxlIG1vc3QKKyAqIHNhbmUgcHJvY2Vzc29yIHZlbmRvcnMgaGF2ZSBhIEZJRk8gcGVyIEFDOTcgc2xvdCwgdGhlIGkuTVggaGFzIG9ubHkKKyAqIG9uZSBGSUZPIHdoaWNoIGNvbWJpbmVzIGFsbCB2YWxpZCByZWNlaXZlIHNsb3RzLiBXZSBjYW5ub3QgZXZlbiBzZWxlY3QKKyAqIHdoaWNoIHNsb3RzIHdlIHdhbnQgdG8gcmVjZWl2ZS4gVGhlIFdNOTcxMiB3aXRoIHdoaWNoIHRoaXMgZHJpdmVyCisgKiB3YXMgZGV2ZWxvcHBlZCB3aXRoIGFsd2F5cyBzZW5kcyBHUElPIHN0YXR1cyBkYXRhIGluIHNsb3QgMTIgd2hpY2gKKyAqIHdlIHJlY2VpdmUgaW4gb3VyIChQQ00tKSBkYXRhIHN0cmVhbS4gVGhlIG9ubHkgY2hhbmNlIHdlIGhhdmUgaXMgdG8KKyAqIG1hbnVhbGx5IHNraXAgdGhpcyBkYXRhIGluIHRoZSBGSVEgaGFuZGxlci4gV2l0aCBzYW1wbGluZyByYXRlcyBkaWZmZXJlbnQKKyAqIGZyb20gNDgwMDBIeiBub3QgZXZlcnkgZnJhbWUgaGFzIHZhbGlkIHJlY2VpdmUgZGF0YSwgc28gdGhlIHJhdGlvCisgKiBiZXR3ZWVuIHBjbSBkYXRhIGFuZCBHUElPIHN0YXR1cyBkYXRhIGNoYW5nZXMuIE91ciBGSVEgaGFuZGxlciBpcyBub3QKKyAqIGFibGUgdG8gaGFuZGxlIHRoaXMsIGhlbmNlIHRoaXMgZHJpdmVyIG9ubHkgd29ya3Mgd2l0aCA0ODAwMEh6IHNhbXBsaW5nCisgKiByYXRlLgorICogUmVhZGluZyBhbmQgd3JpdGluZyBBQzk3IHJlZ2lzdGVycyBpcyBhbm90aGVyIGNoYWxsYW5nZS4gVGhlIGNvcmUKKyAqIHByb3ZpZGVzIHVzIHN0YXR1cyBiaXRzIHdoZW4gdGhlIHJlYWQgcmVnaXN0ZXIgaXMgdXBkYXRlZCB3aXRoICphbm90aGVyKgorICogdmFsdWUuIFdoZW4gd2UgcmVhZCB0aGUgc2FtZSByZWdpc3RlciB0d28gdGltZXMgKGFuZCB0aGUgcmVnaXN0ZXIgc3RpbGwKKyAqIGNvbnRhaW5zIHRoZSBzYW1lIHZhbHVlKSB0aGVzZSBzdGF0dXMgYml0cyBhcmUgbm90IHNldC4gV2Ugd29yaworICogYXJvdW5kIHRoaXMgYnkgbm90IHBvbGxpbmcgdGhlc2UgYml0cyBidXQgb25seSB3YWl0IGEgZml4ZWQgZGVsYXkuCisgKiAKKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSA8bWFjaC9zc2kuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlICJpbXgtc3NpLmgiCisKKyNkZWZpbmUgU1NJX1NBQ05UX0RFRkFVTFQgKFNTSV9TQUNOVF9BQzk3RU4gfCBTU0lfU0FDTlRfRlYpCisKKy8qCisgKiBTU0kgTmV0d29yayBNb2RlIG9yIFRETSBzbG90cyBjb25maWd1cmF0aW9uLgorICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLgorICovCitzdGF0aWMgaW50IGlteF9zc2lfc2V0X2RhaV90ZG1fc2xvdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCisJdW5zaWduZWQgaW50IHR4X21hc2ssIHVuc2lnbmVkIGludCByeF9tYXNrLCBpbnQgc2xvdHMsIGludCBzbG90X3dpZHRoKQoreworCXN0cnVjdCBpbXhfc3NpICpzc2kgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CisJdTMyIHNjY3I7CisKKwlzY2NyID0gcmVhZGwoc3NpLT5iYXNlICsgU1NJX1NUQ0NSKTsKKwlzY2NyICY9IH5TU0lfU1RDQ1JfRENfTUFTSzsKKwlzY2NyIHw9IFNTSV9TVENDUl9EQyhzbG90cyAtIDEpOworCXdyaXRlbChzY2NyLCBzc2ktPmJhc2UgKyBTU0lfU1RDQ1IpOworCisJc2NjciA9IHJlYWRsKHNzaS0+YmFzZSArIFNTSV9TUkNDUik7CisJc2NjciAmPSB+U1NJX1NUQ0NSX0RDX01BU0s7CisJc2NjciB8PSBTU0lfU1RDQ1JfREMoc2xvdHMgLSAxKTsKKwl3cml0ZWwoc2Njciwgc3NpLT5iYXNlICsgU1NJX1NSQ0NSKTsKKworCXdyaXRlbCh0eF9tYXNrLCBzc2ktPmJhc2UgKyBTU0lfU1RNU0spOworCXdyaXRlbChyeF9tYXNrLCBzc2ktPmJhc2UgKyBTU0lfU1JNU0spOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTU0kgREFJIGZvcm1hdCBjb25maWd1cmF0aW9uLgorICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLgorICogTm90ZTogV2UgZG9uJ3QgdXNlIHRoZSBJMlMgbW9kZXMgYnV0IGluc3RlYWQgbWFudWFsbHkgY29uZmlndXJlIHRoZQorICogU1NJIGZvciBJMlMgYmVjYXVzZSB0aGUgSTJTIG1vZGUgaXMgb25seSBhIHJlZ2lzdGVyIHByZXNldC4KKyAqLworc3RhdGljIGludCBpbXhfc3NpX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwgdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3QgaW14X3NzaSAqc3NpID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXUzMiBzdHJjciA9IDAsIHNjcjsKKworCXNjciA9IHJlYWRsKHNzaS0+YmFzZSArIFNTSV9TQ1IpICYgfihTU0lfU0NSX1NZTiB8IFNTSV9TQ1JfTkVUKTsKKworCS8qIERBSSBtb2RlICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQkvKiBkYXRhIG9uIHJpc2luZyBlZGdlIG9mIGJjbGssIGZyYW1lIGxvdyAxY2xrIGJlZm9yZSBkYXRhICovCisJCXN0cmNyIHw9IFNTSV9TVENSX1RGU0kgfCBTU0lfU1RDUl9URUZTIHwgU1NJX1NUQ1JfVFhCSVQwOworCQlzY3IgfD0gU1NJX1NDUl9ORVQ7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQkvKiBkYXRhIG9uIHJpc2luZyBlZGdlIG9mIGJjbGssIGZyYW1lIGhpZ2ggd2l0aCBkYXRhICovCisJCXN0cmNyIHw9IFNTSV9TVENSX1RYQklUMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJLyogZGF0YSBvbiByaXNpbmcgZWRnZSBvZiBiY2xrLCBmcmFtZSBoaWdoIHdpdGggZGF0YSAqLworCQlzdHJjciB8PSBTU0lfU1RDUl9URlNMOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQkvKiBkYXRhIG9uIHJpc2luZyBlZGdlIG9mIGJjbGssIGZyYW1lIGhpZ2ggMWNsayBiZWZvcmUgZGF0YSAqLworCQlzdHJjciB8PSBTU0lfU1RDUl9URlNMIHwgU1NJX1NUQ1JfVEVGUzsKKwkJYnJlYWs7CisJfQorCisJLyogREFJIGNsb2NrIGludmVyc2lvbiAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgorCQlzdHJjciB8PSBTU0lfU1RDUl9URlNJOworCQlzdHJjciAmPSB+U1NJX1NUQ1JfVFNDS1A7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCXN0cmNyICY9IH4oU1NJX1NUQ1JfVFNDS1AgfCBTU0lfU1RDUl9URlNJKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKKwkJc3RyY3IgfD0gU1NJX1NUQ1JfVEZTSSB8IFNTSV9TVENSX1RTQ0tQOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQlzdHJjciAmPSB+U1NJX1NUQ1JfVEZTSTsKKwkJc3RyY3IgfD0gU1NJX1NUQ1JfVFNDS1A7CisJCWJyZWFrOworCX0KKworCS8qIERBSSBjbG9jayBtYXN0ZXIgbWFza3MgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBNYXN0ZXIgbW9kZSBub3QgaW1wbGVtZW50ZWQsIG5lZWRzIGhhbmRsaW5nIG9mIGNsb2Nrcy4gKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3RyY3IgfD0gU1NJX1NUQ1JfVEZFTjA7CisKKwl3cml0ZWwoc3RyY3IsIHNzaS0+YmFzZSArIFNTSV9TVENSKTsKKwl3cml0ZWwoc3RyY3IsIHNzaS0+YmFzZSArIFNTSV9TUkNSKTsKKwl3cml0ZWwoc2NyLCBzc2ktPmJhc2UgKyBTU0lfU0NSKTsKKworCXJldHVybiAwOworfQorCisvKgorICogU1NJIHN5c3RlbSBjbG9jayBjb25maWd1cmF0aW9uLgorICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLgorICovCitzdGF0aWMgaW50IGlteF9zc2lfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAorCQkJCSAgaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCit7CisJc3RydWN0IGlteF9zc2kgKnNzaSA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwl1MzIgc2NyOworCisJc2NyID0gcmVhZGwoc3NpLT5iYXNlICsgU1NJX1NDUik7CisKKwlzd2l0Y2ggKGNsa19pZCkgeworCWNhc2UgSU1YX1NTUF9TWVNfQ0xLOgorCQlpZiAoZGlyID09IFNORF9TT0NfQ0xPQ0tfT1VUKQorCQkJc2NyIHw9IFNTSV9TQ1JfU1lTX0NMS19FTjsKKwkJZWxzZQorCQkJc2NyICY9IH5TU0lfU0NSX1NZU19DTEtfRU47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdyaXRlbChzY3IsIHNzaS0+YmFzZSArIFNTSV9TQ1IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTU0kgQ2xvY2sgZGl2aWRlcnMKKyAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHBvcnQgaXMgaW5hY3RpdmUgKGkuZS4gU1NJRU4gPSAwKS4KKyAqLworc3RhdGljIGludCBpbXhfc3NpX3NldF9kYWlfY2xrZGl2KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKKwkJCQkgIGludCBkaXZfaWQsIGludCBkaXYpCit7CisJc3RydWN0IGlteF9zc2kgKnNzaSA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwl1MzIgc3RjY3IsIHNyY2NyOworCisJc3RjY3IgPSByZWFkbChzc2ktPmJhc2UgKyBTU0lfU1RDQ1IpOworCXNyY2NyID0gcmVhZGwoc3NpLT5iYXNlICsgU1NJX1NSQ0NSKTsKKworCXN3aXRjaCAoZGl2X2lkKSB7CisJY2FzZSBJTVhfU1NJX1RYX0RJVl8yOgorCQlzdGNjciAmPSB+U1NJX1NUQ0NSX0RJVjI7CisJCXN0Y2NyIHw9IGRpdjsKKwkJYnJlYWs7CisJY2FzZSBJTVhfU1NJX1RYX0RJVl9QU1I6CisJCXN0Y2NyICY9IH5TU0lfU1RDQ1JfUFNSOworCQlzdGNjciB8PSBkaXY7CisJCWJyZWFrOworCWNhc2UgSU1YX1NTSV9UWF9ESVZfUE06CisJCXN0Y2NyICY9IH4weGZmOworCQlzdGNjciB8PSBTU0lfU1RDQ1JfUE0oZGl2KTsKKwkJYnJlYWs7CisJY2FzZSBJTVhfU1NJX1JYX0RJVl8yOgorCQlzdGNjciAmPSB+U1NJX1NUQ0NSX0RJVjI7CisJCXN0Y2NyIHw9IGRpdjsKKwkJYnJlYWs7CisJY2FzZSBJTVhfU1NJX1JYX0RJVl9QU1I6CisJCXN0Y2NyICY9IH5TU0lfU1RDQ1JfUFNSOworCQlzdGNjciB8PSBkaXY7CisJCWJyZWFrOworCWNhc2UgSU1YX1NTSV9SWF9ESVZfUE06CisJCXN0Y2NyICY9IH4weGZmOworCQlzdGNjciB8PSBTU0lfU1RDQ1JfUE0oZGl2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd3JpdGVsKHN0Y2NyLCBzc2ktPmJhc2UgKyBTU0lfU1RDQ1IpOworCXdyaXRlbChzcmNjciwgc3NpLT5iYXNlICsgU1NJX1NSQ0NSKTsKKworCXJldHVybiAwOworfQorCisvKgorICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLAorICogYWx0aG91Z2ggY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBieSB1cHBlciBsYXllcnMuCisgKi8KK3N0YXRpYyBpbnQgaW14X3NzaV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCit7CisJc3RydWN0IGlteF9zc2kgKnNzaSA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwl1MzIgcmVnLCBzY2NyOworCisJLyogVHgvUnggY29uZmlnICovCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJcmVnID0gU1NJX1NUQ0NSOworCQljcHVfZGFpLT5kbWFfZGF0YSA9ICZzc2ktPmRtYV9wYXJhbXNfdHg7CisJfSBlbHNlIHsKKwkJcmVnID0gU1NJX1NSQ0NSOworCQljcHVfZGFpLT5kbWFfZGF0YSA9ICZzc2ktPmRtYV9wYXJhbXNfcng7CisJfQorCisJc2NjciA9IHJlYWRsKHNzaS0+YmFzZSArIHJlZykgJiB+U1NJX1NUQ0NSX1dMX01BU0s7CisKKwkvKiBEQUkgZGF0YSAod29yZCkgc2l6ZSAqLworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJc2NjciB8PSBTU0lfU1JDQ1JfV0woMTYpOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJc2NjciB8PSBTU0lfU1JDQ1JfV0woMjApOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQlzY2NyIHw9IFNTSV9TUkNDUl9XTCgyNCk7CisJCWJyZWFrOworCX0KKworCXdyaXRlbChzY2NyLCBzc2ktPmJhc2UgKyByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW14X3NzaV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kLAorCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJc3RydWN0IGlteF9zc2kgKnNzaSA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgc2llcl9iaXRzLCBzaWVyOworCXVuc2lnbmVkIGludCBzY3I7CisKKwlzY3IgPSByZWFkbChzc2ktPmJhc2UgKyBTU0lfU0NSKTsKKwlzaWVyID0gcmVhZGwoc3NpLT5iYXNlICsgU1NJX1NJRVIpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJaWYgKHNzaS0+ZmxhZ3MgJiBJTVhfU1NJX0RNQSkKKwkJCXNpZXJfYml0cyA9IFNTSV9TSUVSX1RETUFFOworCQllbHNlCisJCQlzaWVyX2JpdHMgPSBTU0lfU0lFUl9USUUgfCBTU0lfU0lFUl9URkUwX0VOOworCX0gZWxzZSB7CisJCWlmIChzc2ktPmZsYWdzICYgSU1YX1NTSV9ETUEpCisJCQlzaWVyX2JpdHMgPSBTU0lfU0lFUl9SRE1BRTsKKwkJZWxzZQorCQkJc2llcl9iaXRzID0gU1NJX1NJRVJfUklFIHwgU1NJX1NJRVJfUkZGMF9FTjsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJCXNjciB8PSBTU0lfU0NSX1RFOworCQllbHNlCisJCQlzY3IgfD0gU1NJX1NDUl9SRTsKKwkJc2llciB8PSBzaWVyX2JpdHM7CisKKwkJaWYgKCsrc3NpLT5lbmFibGVkID09IDEpCisJCQlzY3IgfD0gU1NJX1NDUl9TU0lFTjsKKworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJCXNjciAmPSB+U1NJX1NDUl9URTsKKwkJZWxzZQorCQkJc2NyICY9IH5TU0lfU0NSX1JFOworCQlzaWVyICY9IH5zaWVyX2JpdHM7CisKKwkJaWYgKC0tc3NpLT5lbmFibGVkID09IDApCisJCQlzY3IgJj0gflNTSV9TQ1JfU1NJRU47CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCEoc3NpLT5mbGFncyAmIElNWF9TU0lfVVNFX0FDOTcpKQorCQkvKiByeC90eCBhcmUgYWx3YXlzIGVuYWJsZWQgdG8gYWNjZXNzIGFjOTcgcmVnaXN0ZXJzICovCisJCXdyaXRlbChzY3IsIHNzaS0+YmFzZSArIFNTSV9TQ1IpOworCisJd3JpdGVsKHNpZXIsIHNzaS0+YmFzZSArIFNTSV9TSUVSKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBpbXhfc3NpX3BjbV9kYWlfb3BzID0geworCS5od19wYXJhbXMJPSBpbXhfc3NpX2h3X3BhcmFtcywKKwkuc2V0X2ZtdAk9IGlteF9zc2lfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSBpbXhfc3NpX3NldF9kYWlfY2xrZGl2LAorCS5zZXRfc3lzY2xrCT0gaW14X3NzaV9zZXRfZGFpX3N5c2NsaywKKwkuc2V0X3RkbV9zbG90CT0gaW14X3NzaV9zZXRfZGFpX3RkbV9zbG90LAorCS50cmlnZ2VyCT0gaW14X3NzaV90cmlnZ2VyLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaSBpbXhfc3NpX2RhaSA9IHsKKwkucGxheWJhY2sgPSB7CisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwl9LAorCS5jYXB0dXJlID0geworCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJfSwKKwkub3BzID0gJmlteF9zc2lfcGNtX2RhaV9vcHMsCit9OworCitpbnQgc25kX2lteF9wY21fbW1hcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlpbnQgcmV0OworCisJcmV0ID0gZG1hX21tYXBfY29oZXJlbnQoTlVMTCwgdm1hLCBydW50aW1lLT5kbWFfYXJlYSwKKwkJCXJ1bnRpbWUtPmRtYV9hZGRyLCBydW50aW1lLT5kbWFfYnl0ZXMpOworCisJcHJfZGVidWcoIiVzOiByZXQ6ICVkICVwIDB4JTA4eCAweCUwOHhcbiIsIF9fZnVuY19fLCByZXQsCisJCQlydW50aW1lLT5kbWFfYXJlYSwKKwkJCXJ1bnRpbWUtPmRtYV9hZGRyLAorCQkJcnVudGltZS0+ZG1hX2J5dGVzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlteF9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbSAqcGNtLCBpbnQgc3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKwlzaXplX3Qgc2l6ZSA9IElNWF9TU0lfRE1BQlVGX1NJWkU7CisKKwlidWYtPmRldi50eXBlID0gU05EUlZfRE1BX1RZUEVfREVWOworCWJ1Zi0+ZGV2LmRldiA9IHBjbS0+Y2FyZC0+ZGV2OworCWJ1Zi0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlidWYtPmFyZWEgPSBkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKHBjbS0+Y2FyZC0+ZGV2LCBzaXplLAorCQkJCQkgICAmYnVmLT5hZGRyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1Zi0+YXJlYSkKKwkJcmV0dXJuIC1FTk9NRU07CisJYnVmLT5ieXRlcyA9IHNpemU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU2NCBpbXhfcGNtX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitpbnQgaW14X3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtKQoreworCisJaW50IHJldCA9IDA7CisKKwlpZiAoIWNhcmQtPmRldi0+ZG1hX21hc2spCisJCWNhcmQtPmRldi0+ZG1hX21hc2sgPSAmaW14X3BjbV9kbWFtYXNrOworCWlmICghY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzaykKKwkJY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisJaWYgKGRhaS0+cGxheWJhY2suY2hhbm5lbHNfbWluKSB7CisJCXJldCA9IGlteF9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihwY20sCisJCQlTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKworCWlmIChkYWktPmNhcHR1cmUuY2hhbm5lbHNfbWluKSB7CisJCXJldCA9IGlteF9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihwY20sCisJCQlTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBpbXhfcGNtX2ZyZWUoc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmJ1ZjsKKwlpbnQgc3RyZWFtOworCisJZm9yIChzdHJlYW0gPSAwOyBzdHJlYW0gPCAyOyBzdHJlYW0rKykgeworCQlzdWJzdHJlYW0gPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5zdWJzdHJlYW07CisJCWlmICghc3Vic3RyZWFtKQorCQkJY29udGludWU7CisKKwkJYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKwkJaWYgKCFidWYtPmFyZWEpCisJCQljb250aW51ZTsKKworCQlkbWFfZnJlZV93cml0ZWNvbWJpbmUocGNtLT5jYXJkLT5kZXYsIGJ1Zi0+Ynl0ZXMsCisJCQkJICAgICAgYnVmLT5hcmVhLCBidWYtPmFkZHIpOworCQlidWYtPmFyZWEgPSBOVUxMOworCX0KK30KKworc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gaW14X3NvY19wbGF0Zm9ybSA9IHsKKwkubmFtZQkJPSAiaW14LWF1ZGlvIiwKK307CitFWFBPUlRfU1lNQk9MX0dQTChpbXhfc29jX3BsYXRmb3JtKTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaSBpbXhfYWM5N19kYWkgPSB7CisJLm5hbWUgPSAiQUM5NyIsCisJLmFjOTdfY29udHJvbCA9IDEsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJfSwKKwkuY2FwdHVyZSA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJfSwKKwkub3BzID0gJmlteF9zc2lfcGNtX2RhaV9vcHMsCit9OworCitzdGF0aWMgdm9pZCBzZXR1cF9jaGFubmVsX3RvX2FjOTcoc3RydWN0IGlteF9zc2kgKmlteF9zc2kpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gaW14X3NzaS0+YmFzZTsKKworCXdyaXRlbCgweDAsIGJhc2UgKyBTU0lfU0NSKTsKKwl3cml0ZWwoMHgwLCBiYXNlICsgU1NJX1NUQ1IpOworCXdyaXRlbCgweDAsIGJhc2UgKyBTU0lfU1JDUik7CisKKwl3cml0ZWwoU1NJX1NDUl9TWU4gfCBTU0lfU0NSX05FVCwgYmFzZSArIFNTSV9TQ1IpOworCisJd3JpdGVsKFNTSV9TRkNTUl9SRldNMCg4KSB8CisJCVNTSV9TRkNTUl9URldNMCg4KSB8CisJCVNTSV9TRkNTUl9SRldNMSg4KSB8CisJCVNTSV9TRkNTUl9URldNMSg4KSwgYmFzZSArIFNTSV9TRkNTUik7CisKKwl3cml0ZWwoU1NJX1NUQ0NSX1dMKDE2KSB8IFNTSV9TVENDUl9EQygxMiksIGJhc2UgKyBTU0lfU1RDQ1IpOworCXdyaXRlbChTU0lfU1RDQ1JfV0woMTYpIHwgU1NJX1NUQ0NSX0RDKDEyKSwgYmFzZSArIFNTSV9TUkNDUik7CisKKwl3cml0ZWwoU1NJX1NDUl9TWU4gfCBTU0lfU0NSX05FVCB8IFNTSV9TQ1JfU1NJRU4sIGJhc2UgKyBTU0lfU0NSKTsKKwl3cml0ZWwoU1NJX1NPUl9XQUlUKDMpLCBiYXNlICsgU1NJX1NPUik7CisKKwl3cml0ZWwoU1NJX1NDUl9TWU4gfCBTU0lfU0NSX05FVCB8IFNTSV9TQ1JfU1NJRU4gfAorCQkJU1NJX1NDUl9URSB8IFNTSV9TQ1JfUkUsCisJCQliYXNlICsgU1NJX1NDUik7CisKKwl3cml0ZWwoU1NJX1NBQ05UX0RFRkFVTFQsIGJhc2UgKyBTU0lfU0FDTlQpOworCXdyaXRlbCgweGZmLCBiYXNlICsgU1NJX1NBQ0NESVMpOworCXdyaXRlbCgweDMwMCwgYmFzZSArIFNTSV9TQUNDRU4pOworfQorCitzdGF0aWMgc3RydWN0IGlteF9zc2kgKmFjOTdfc3NpOworCitzdGF0aWMgdm9pZCBpbXhfc3NpX2FjOTdfd3JpdGUoc3RydWN0IHNuZF9hYzk3ICphYzk3LCB1bnNpZ25lZCBzaG9ydCByZWcsCisJCXVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwlzdHJ1Y3QgaW14X3NzaSAqaW14X3NzaSA9IGFjOTdfc3NpOworCXZvaWQgX19pb21lbSAqYmFzZSA9IGlteF9zc2ktPmJhc2U7CisJdW5zaWduZWQgaW50IGxyZWc7CisJdW5zaWduZWQgaW50IGx2YWw7CisKKwlpZiAocmVnID4gMHg3ZikKKwkJcmV0dXJuOworCisJcHJfZGVidWcoIiVzOiAweCUwMnggMHglMDR4XG4iLCBfX2Z1bmNfXywgcmVnLCB2YWwpOworCisJbHJlZyA9IHJlZyA8PCAgMTI7CisJd3JpdGVsKGxyZWcsIGJhc2UgKyBTU0lfU0FDQUREKTsKKworCWx2YWwgPSB2YWwgPDwgNDsKKwl3cml0ZWwobHZhbCAsIGJhc2UgKyBTU0lfU0FDREFUKTsKKworCXdyaXRlbChTU0lfU0FDTlRfREVGQVVMVCB8IFNTSV9TQUNOVF9XUiwgYmFzZSArIFNTSV9TQUNOVCk7CisJdWRlbGF5KDEwMCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbXhfc3NpX2FjOTdfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJCXVuc2lnbmVkIHNob3J0IHJlZykKK3sKKwlzdHJ1Y3QgaW14X3NzaSAqaW14X3NzaSA9IGFjOTdfc3NpOworCXZvaWQgX19pb21lbSAqYmFzZSA9IGlteF9zc2ktPmJhc2U7CisKKwl1bnNpZ25lZCBzaG9ydCB2YWwgPSAtMTsKKwl1bnNpZ25lZCBpbnQgbHJlZzsKKworCWxyZWcgPSAocmVnICYgMHg3ZikgPDwgIDEyIDsKKwl3cml0ZWwobHJlZywgYmFzZSArIFNTSV9TQUNBREQpOworCXdyaXRlbChTU0lfU0FDTlRfREVGQVVMVCB8IFNTSV9TQUNOVF9SRCwgYmFzZSArIFNTSV9TQUNOVCk7CisKKwl1ZGVsYXkoMTAwKTsKKworCXZhbCA9IChyZWFkbChiYXNlICsgU1NJX1NBQ0RBVCkgPj4gNCkgJiAweGZmZmY7CisKKwlwcl9kZWJ1ZygiJXM6IDB4JTAyeCAweCUwNHhcbiIsIF9fZnVuY19fLCByZWcsIHZhbCk7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgdm9pZCBpbXhfc3NpX2FjOTdfcmVzZXQoc3RydWN0IHNuZF9hYzk3ICphYzk3KQoreworCXN0cnVjdCBpbXhfc3NpICppbXhfc3NpID0gYWM5N19zc2k7CisKKwlpZiAoaW14X3NzaS0+YWM5N19yZXNldCkKKwkJaW14X3NzaS0+YWM5N19yZXNldChhYzk3KTsKK30KKworc3RhdGljIHZvaWQgaW14X3NzaV9hYzk3X3dhcm1fcmVzZXQoc3RydWN0IHNuZF9hYzk3ICphYzk3KQoreworCXN0cnVjdCBpbXhfc3NpICppbXhfc3NpID0gYWM5N19zc2k7CisKKwlpZiAoaW14X3NzaS0+YWM5N193YXJtX3Jlc2V0KQorCQlpbXhfc3NpLT5hYzk3X3dhcm1fcmVzZXQoYWM5Nyk7Cit9CisKK3N0cnVjdCBzbmRfYWM5N19idXNfb3BzIHNvY19hYzk3X29wcyA9IHsKKwkucmVhZAkJPSBpbXhfc3NpX2FjOTdfcmVhZCwKKwkud3JpdGUJCT0gaW14X3NzaV9hYzk3X3dyaXRlLAorCS5yZXNldAkJPSBpbXhfc3NpX2FjOTdfcmVzZXQsCisJLndhcm1fcmVzZXQJPSBpbXhfc3NpX2FjOTdfd2FybV9yZXNldAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19hYzk3X29wcyk7CisKK3N0cnVjdCBzbmRfc29jX2RhaSBpbXhfc3NpX3BjbV9kYWlbMl07CitFWFBPUlRfU1lNQk9MX0dQTChpbXhfc3NpX3BjbV9kYWkpOworCitzdGF0aWMgaW50IGlteF9zc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgaW14X3NzaSAqc3NpOworCXN0cnVjdCBpbXhfc3NpX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKnBsYXRmb3JtOworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGludCB2YWw7CisJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkgPSAmaW14X3NzaV9wY21fZGFpW3BkZXYtPmlkXTsKKworCWlmIChkYWktPmlkID49IEFSUkFZX1NJWkUoaW14X3NzaV9wY21fZGFpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzc2kgPSBremFsbG9jKHNpemVvZigqc3NpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzc2kpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHBkYXRhKSB7CisJCXNzaS0+YWM5N19yZXNldCA9IHBkYXRhLT5hYzk3X3Jlc2V0OworCQlzc2ktPmFjOTdfd2FybV9yZXNldCA9IHBkYXRhLT5hYzk3X3dhcm1fcmVzZXQ7CisJCXNzaS0+ZmxhZ3MgPSBwZGF0YS0+ZmxhZ3M7CisJfQorCisJc3NpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCisJc3NpLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoc3NpLT5jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoc3NpLT5jbGspOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZ2V0IHRoZSBjbG9jazogJWRcbiIsCisJCQlyZXQpOworCQlnb3RvIGZhaWxlZF9jbGs7CisJfQorCWNsa19lbmFibGUoc3NpLT5jbGspOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGZhaWxlZF9nZXRfcmVzb3VyY2U7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBEUlZfTkFNRSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBmYWlsZWRfZ2V0X3Jlc291cmNlOworCX0KKworCXNzaS0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIXNzaS0+YmFzZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbGVkX2lvcmVtYXA7CisJfQorCisJaWYgKHNzaS0+ZmxhZ3MgJiBJTVhfU1NJX1VTRV9BQzk3KSB7CisJCWlmIChhYzk3X3NzaSkgeworCQkJcmV0ID0gLUVCVVNZOworCQkJZ290byBmYWlsZWRfYWM5NzsKKwkJfQorCQlhYzk3X3NzaSA9IHNzaTsKKwkJc2V0dXBfY2hhbm5lbF90b19hYzk3KHNzaSk7CisJCW1lbWNweShkYWksICZpbXhfYWM5N19kYWksIHNpemVvZihpbXhfYWM5N19kYWkpKTsKKwl9IGVsc2UKKwkJbWVtY3B5KGRhaSwgJmlteF9zc2lfZGFpLCBzaXplb2YoaW14X3NzaV9kYWkpKTsKKworCXdyaXRlbCgweDAsIHNzaS0+YmFzZSArIFNTSV9TSUVSKTsKKworCXNzaS0+ZG1hX3BhcmFtc19yeC5kbWFfYWRkciA9IHJlcy0+c3RhcnQgKyBTU0lfU1JYMDsKKwlzc2ktPmRtYV9wYXJhbXNfdHguZG1hX2FkZHIgPSByZXMtPnN0YXJ0ICsgU1NJX1NUWDA7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAidHgwIik7CisJaWYgKHJlcykKKwkJc3NpLT5kbWFfcGFyYW1zX3R4LmRtYSA9IHJlcy0+c3RhcnQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAicngwIik7CisJaWYgKHJlcykKKwkJc3NpLT5kbWFfcGFyYW1zX3J4LmRtYSA9IHJlcy0+c3RhcnQ7CisKKwlkYWktPmlkID0gcGRldi0+aWQ7CisJZGFpLT5kZXYgPSAmcGRldi0+ZGV2OworCWRhaS0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiaW14LXNzaS4lZCIsIHBkZXYtPmlkKTsKKwlkYWktPnByaXZhdGVfZGF0YSA9IHNzaTsKKworCWlmICgoY3B1X2lzX214MjcoKSB8fCBjcHVfaXNfbXgyMSgpKSAmJgorCQkJIShzc2ktPmZsYWdzICYgSU1YX1NTSV9VU0VfQUM5NykpIHsKKwkJc3NpLT5mbGFncyB8PSBJTVhfU1NJX0RNQTsKKwkJcGxhdGZvcm0gPSBpbXhfc3NpX2RtYV9teDJfaW5pdChwZGV2LCBzc2kpOworCX0gZWxzZQorCQlwbGF0Zm9ybSA9IGlteF9zc2lfZmlxX2luaXQocGRldiwgc3NpKTsKKworCWlteF9zb2NfcGxhdGZvcm0ucGNtX29wcyA9IHBsYXRmb3JtLT5wY21fb3BzOworCWlteF9zb2NfcGxhdGZvcm0ucGNtX25ldyA9IHBsYXRmb3JtLT5wY21fbmV3OworCWlteF9zb2NfcGxhdGZvcm0ucGNtX2ZyZWUgPSBwbGF0Zm9ybS0+cGNtX2ZyZWU7CisKKwl2YWwgPSBTU0lfU0ZDU1JfVEZXTTAoc3NpLT5kbWFfcGFyYW1zX3R4LmJ1cnN0c2l6ZSkgfAorCQlTU0lfU0ZDU1JfUkZXTTAoc3NpLT5kbWFfcGFyYW1zX3J4LmJ1cnN0c2l6ZSk7CisJd3JpdGVsKHZhbCwgc3NpLT5iYXNlICsgU1NJX1NGQ1NSKTsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKGRhaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZWdpc3RlciBEQUkgZmFpbGVkXG4iKTsKKwkJZ290byBmYWlsZWRfcmVnaXN0ZXI7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc3NpKTsKKworCXJldHVybiAwOworCitmYWlsZWRfcmVnaXN0ZXI6CitmYWlsZWRfYWM5NzoKKwlpb3VubWFwKHNzaS0+YmFzZSk7CitmYWlsZWRfaW9yZW1hcDoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK2ZhaWxlZF9nZXRfcmVzb3VyY2U6CisJY2xrX2Rpc2FibGUoc3NpLT5jbGspOworCWNsa19wdXQoc3NpLT5jbGspOworZmFpbGVkX2NsazoKKwlrZnJlZShzc2kpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgaW14X3NzaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJc3RydWN0IGlteF9zc2kgKnNzaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gJmlteF9zc2lfcGNtX2RhaVtwZGV2LT5pZF07CisKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKGRhaSk7CisKKwlpZiAoc3NpLT5mbGFncyAmIElNWF9TU0lfVVNFX0FDOTcpCisJCWFjOTdfc3NpID0gTlVMTDsKKworCWlmICghKHNzaS0+ZmxhZ3MgJiBJTVhfU1NJX0RNQSkpCisJCWlteF9zc2lfZmlxX2V4aXQocGRldiwgc3NpKTsKKworCWlvdW5tYXAoc3NpLT5iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwljbGtfZGlzYWJsZShzc2ktPmNsayk7CisJY2xrX3B1dChzc2ktPmNsayk7CisJa2ZyZWUoc3NpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpbXhfc3NpX2RyaXZlciA9IHsKKwkucHJvYmUgPSBpbXhfc3NpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChpbXhfc3NpX3JlbW92ZSksCisKKwkuZHJpdmVyID0geworCQkubmFtZSA9IERSVl9OQU1FLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW14X3NzaV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfcGxhdGZvcm0oJmlteF9zb2NfcGxhdGZvcm0pOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gcmVnaXN0ZXIgc29jIHBsYXRmb3JtOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlteF9zc2lfZHJpdmVyKTsKKwlpZiAocmV0KSB7CisJCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmaW14X3NvY19wbGF0Zm9ybSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpbXhfc3NpX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaW14X3NzaV9kcml2ZXIpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmaW14X3NvY19wbGF0Zm9ybSk7Cit9CisKK21vZHVsZV9pbml0KGlteF9zc2lfaW5pdCk7Cittb2R1bGVfZXhpdChpbXhfc3NpX2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9BVVRIT1IoIlNhc2NoYSBIYXVlciwgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImkuTVggSTJTL2FjOTcgU29DIEludGVyZmFjZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L2lteC1zc2kuaCBiL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZjI2ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvaW14L2lteC1zc2kuaApAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfSU1YX1NTSV9ICisjZGVmaW5lIF9JTVhfU1NJX0gKKworI2RlZmluZSBTU0lfU1RYMAkweDAwCisjZGVmaW5lIFNTSV9TVFgxCTB4MDQKKyNkZWZpbmUgU1NJX1NSWDAJMHgwOAorI2RlZmluZSBTU0lfU1JYMQkweDBjCisKKyNkZWZpbmUgU1NJX1NDUgkJMHgxMAorI2RlZmluZSBTU0lfU0NSX0NMS19JU1QJCSgxIDw8IDkpCisjZGVmaW5lIFNTSV9TQ1JfQ0xLX0lTVF9TSElGVAk5CisjZGVmaW5lIFNTSV9TQ1JfVENIX0VOCQkoMSA8PCA4KQorI2RlZmluZSBTU0lfU0NSX1NZU19DTEtfRU4JKDEgPDwgNykKKyNkZWZpbmUgU1NJX1NDUl9JMlNfTU9ERV9OT1JNCSgwIDw8IDUpCisjZGVmaW5lIFNTSV9TQ1JfSTJTX01PREVfTVNUUgkoMSA8PCA1KQorI2RlZmluZSBTU0lfU0NSX0kyU19NT0RFX1NMQVZFCSgyIDw8IDUpCisjZGVmaW5lIFNTSV9JMlNfTU9ERV9NQVNLCSgzIDw8IDUpCisjZGVmaW5lIFNTSV9TQ1JfU1lOCQkoMSA8PCA0KQorI2RlZmluZSBTU0lfU0NSX05FVAkJKDEgPDwgMykKKyNkZWZpbmUgU1NJX1NDUl9SRQkJKDEgPDwgMikKKyNkZWZpbmUgU1NJX1NDUl9URQkJKDEgPDwgMSkKKyNkZWZpbmUgU1NJX1NDUl9TU0lFTgkJKDEgPDwgMCkKKworI2RlZmluZSBTU0lfU0lTUgkweDE0CisjZGVmaW5lIFNTSV9TSVNSX01BU0sJCSgoMSA8PCAxOSkgLSAxKQorI2RlZmluZSBTU0lfU0lTUl9DTURBVQkJKDEgPDwgMTgpCisjZGVmaW5lIFNTSV9TSVNSX0NNRERVCQkoMSA8PCAxNykKKyNkZWZpbmUgU1NJX1NJU1JfUlhUCQkoMSA8PCAxNikKKyNkZWZpbmUgU1NJX1NJU1JfUkRSMQkJKDEgPDwgMTUpCisjZGVmaW5lIFNTSV9TSVNSX1JEUjAJCSgxIDw8IDE0KQorI2RlZmluZSBTU0lfU0lTUl9UREUxCQkoMSA8PCAxMykKKyNkZWZpbmUgU1NJX1NJU1JfVERFMAkJKDEgPDwgMTIpCisjZGVmaW5lIFNTSV9TSVNSX1JPRTEJCSgxIDw8IDExKQorI2RlZmluZSBTU0lfU0lTUl9ST0UwCQkoMSA8PCAxMCkKKyNkZWZpbmUgU1NJX1NJU1JfVFVFMQkJKDEgPDwgOSkKKyNkZWZpbmUgU1NJX1NJU1JfVFVFMAkJKDEgPDwgOCkKKyNkZWZpbmUgU1NJX1NJU1JfVEZTCQkoMSA8PCA3KQorI2RlZmluZSBTU0lfU0lTUl9SRlMJCSgxIDw8IDYpCisjZGVmaW5lIFNTSV9TSVNSX1RMUwkJKDEgPDwgNSkKKyNkZWZpbmUgU1NJX1NJU1JfUkxTCQkoMSA8PCA0KQorI2RlZmluZSBTU0lfU0lTUl9SRkYxCQkoMSA8PCAzKQorI2RlZmluZSBTU0lfU0lTUl9SRkYwCQkoMSA8PCAyKQorI2RlZmluZSBTU0lfU0lTUl9URkUxCQkoMSA8PCAxKQorI2RlZmluZSBTU0lfU0lTUl9URkUwCQkoMSA8PCAwKQorCisjZGVmaW5lIFNTSV9TSUVSCTB4MTgKKyNkZWZpbmUgU1NJX1NJRVJfUkRNQUUJCSgxIDw8IDIyKQorI2RlZmluZSBTU0lfU0lFUl9SSUUJCSgxIDw8IDIxKQorI2RlZmluZSBTU0lfU0lFUl9URE1BRQkJKDEgPDwgMjApCisjZGVmaW5lIFNTSV9TSUVSX1RJRQkJKDEgPDwgMTkpCisjZGVmaW5lIFNTSV9TSUVSX0NNREFVX0VOCSgxIDw8IDE4KQorI2RlZmluZSBTU0lfU0lFUl9DTUREVV9FTgkoMSA8PCAxNykKKyNkZWZpbmUgU1NJX1NJRVJfUlhUX0VOCQkoMSA8PCAxNikKKyNkZWZpbmUgU1NJX1NJRVJfUkRSMV9FTgkoMSA8PCAxNSkKKyNkZWZpbmUgU1NJX1NJRVJfUkRSMF9FTgkoMSA8PCAxNCkKKyNkZWZpbmUgU1NJX1NJRVJfVERFMV9FTgkoMSA8PCAxMykKKyNkZWZpbmUgU1NJX1NJRVJfVERFMF9FTgkoMSA8PCAxMikKKyNkZWZpbmUgU1NJX1NJRVJfUk9FMV9FTgkoMSA8PCAxMSkKKyNkZWZpbmUgU1NJX1NJRVJfUk9FMF9FTgkoMSA8PCAxMCkKKyNkZWZpbmUgU1NJX1NJRVJfVFVFMV9FTgkoMSA8PCA5KQorI2RlZmluZSBTU0lfU0lFUl9UVUUwX0VOCSgxIDw8IDgpCisjZGVmaW5lIFNTSV9TSUVSX1RGU19FTgkJKDEgPDwgNykKKyNkZWZpbmUgU1NJX1NJRVJfUkZTX0VOCQkoMSA8PCA2KQorI2RlZmluZSBTU0lfU0lFUl9UTFNfRU4JCSgxIDw8IDUpCisjZGVmaW5lIFNTSV9TSUVSX1JMU19FTgkJKDEgPDwgNCkKKyNkZWZpbmUgU1NJX1NJRVJfUkZGMV9FTgkoMSA8PCAzKQorI2RlZmluZSBTU0lfU0lFUl9SRkYwX0VOCSgxIDw8IDIpCisjZGVmaW5lIFNTSV9TSUVSX1RGRTFfRU4JKDEgPDwgMSkKKyNkZWZpbmUgU1NJX1NJRVJfVEZFMF9FTgkoMSA8PCAwKQorCisjZGVmaW5lIFNTSV9TVENSCTB4MWMKKyNkZWZpbmUgU1NJX1NUQ1JfVFhCSVQwCQkoMSA8PCA5KQorI2RlZmluZSBTU0lfU1RDUl9URkVOMQkJKDEgPDwgOCkKKyNkZWZpbmUgU1NJX1NUQ1JfVEZFTjAJCSgxIDw8IDcpCisjZGVmaW5lIFNTSV9GSUZPX0VOQUJMRV8wX1NISUZUIDcKKyNkZWZpbmUgU1NJX1NUQ1JfVEZESVIJCSgxIDw8IDYpCisjZGVmaW5lIFNTSV9TVENSX1RYRElSCQkoMSA8PCA1KQorI2RlZmluZSBTU0lfU1RDUl9UU0hGRAkJKDEgPDwgNCkKKyNkZWZpbmUgU1NJX1NUQ1JfVFNDS1AJCSgxIDw8IDMpCisjZGVmaW5lIFNTSV9TVENSX1RGU0kJCSgxIDw8IDIpCisjZGVmaW5lIFNTSV9TVENSX1RGU0wJCSgxIDw8IDEpCisjZGVmaW5lIFNTSV9TVENSX1RFRlMJCSgxIDw8IDApCisKKyNkZWZpbmUgU1NJX1NSQ1IJMHgyMAorI2RlZmluZSBTU0lfU1JDUl9SWEJJVDAJCSgxIDw8IDkpCisjZGVmaW5lIFNTSV9TUkNSX1JGRU4xCQkoMSA8PCA4KQorI2RlZmluZSBTU0lfU1JDUl9SRkVOMAkJKDEgPDwgNykKKyNkZWZpbmUgU1NJX0ZJRk9fRU5BQkxFXzBfU0hJRlQgNworI2RlZmluZSBTU0lfU1JDUl9SRkRJUgkJKDEgPDwgNikKKyNkZWZpbmUgU1NJX1NSQ1JfUlhESVIJCSgxIDw8IDUpCisjZGVmaW5lIFNTSV9TUkNSX1JTSEZECQkoMSA8PCA0KQorI2RlZmluZSBTU0lfU1JDUl9SU0NLUAkJKDEgPDwgMykKKyNkZWZpbmUgU1NJX1NSQ1JfUkZTSQkJKDEgPDwgMikKKyNkZWZpbmUgU1NJX1NSQ1JfUkZTTAkJKDEgPDwgMSkKKyNkZWZpbmUgU1NJX1NSQ1JfUkVGUwkJKDEgPDwgMCkKKworI2RlZmluZSBTU0lfU1JDQ1IJCTB4MjgKKyNkZWZpbmUgU1NJX1NSQ0NSX0RJVjIJCSgxIDw8IDE4KQorI2RlZmluZSBTU0lfU1JDQ1JfUFNSCQkoMSA8PCAxNykKKyNkZWZpbmUgU1NJX1NSQ0NSX1dMKHgpCQkoKCgoeCkgLSAyKSA+PiAxKSA8PCAxMykKKyNkZWZpbmUgU1NJX1NSQ0NSX0RDKHgpCQkoKCh4KSAmIDB4MWYpIDw8IDgpCisjZGVmaW5lIFNTSV9TUkNDUl9QTSh4KQkJKCgoeCkgJiAweGZmKSA8PCAwKQorI2RlZmluZSBTU0lfU1JDQ1JfV0xfTUFTSwkoMHhmIDw8IDEzKQorI2RlZmluZSBTU0lfU1JDQ1JfRENfTUFTSwkoMHgxZiA8PCA4KQorI2RlZmluZSBTU0lfU1JDQ1JfUE1fTUFTSwkoMHhmZiA8PCAwKQorCisjZGVmaW5lIFNTSV9TVENDUgkJMHgyNAorI2RlZmluZSBTU0lfU1RDQ1JfRElWMgkJKDEgPDwgMTgpCisjZGVmaW5lIFNTSV9TVENDUl9QU1IJCSgxIDw8IDE3KQorI2RlZmluZSBTU0lfU1RDQ1JfV0woeCkJCSgoKCh4KSAtIDIpID4+IDEpIDw8IDEzKQorI2RlZmluZSBTU0lfU1RDQ1JfREMoeCkJCSgoKHgpICYgMHgxZikgPDwgOCkKKyNkZWZpbmUgU1NJX1NUQ0NSX1BNKHgpCQkoKCh4KSAmIDB4ZmYpIDw8IDApCisjZGVmaW5lIFNTSV9TVENDUl9XTF9NQVNLCSgweGYgPDwgMTMpCisjZGVmaW5lIFNTSV9TVENDUl9EQ19NQVNLCSgweDFmIDw8IDgpCisjZGVmaW5lIFNTSV9TVENDUl9QTV9NQVNLCSgweGZmIDw8IDApCisKKyNkZWZpbmUgU1NJX1NGQ1NSCTB4MmMKKyNkZWZpbmUgU1NJX1NGQ1NSX1JGQ05UMSh4KQkoKCh4KSAmIDB4ZikgPDwgMjgpCisjZGVmaW5lIFNTSV9SWF9GSUZPXzFfQ09VTlRfU0hJRlQgMjgKKyNkZWZpbmUgU1NJX1NGQ1NSX1RGQ05UMSh4KQkoKCh4KSAmIDB4ZikgPDwgMjQpCisjZGVmaW5lIFNTSV9UWF9GSUZPXzFfQ09VTlRfU0hJRlQgMjQKKyNkZWZpbmUgU1NJX1NGQ1NSX1JGV00xKHgpCSgoKHgpICYgMHhmKSA8PCAyMCkKKyNkZWZpbmUgU1NJX1NGQ1NSX1RGV00xKHgpCSgoKHgpICYgMHhmKSA8PCAxNikKKyNkZWZpbmUgU1NJX1NGQ1NSX1JGQ05UMCh4KQkoKCh4KSAmIDB4ZikgPDwgMTIpCisjZGVmaW5lIFNTSV9SWF9GSUZPXzBfQ09VTlRfU0hJRlQgMTIKKyNkZWZpbmUgU1NJX1NGQ1NSX1RGQ05UMCh4KQkoKCh4KSAmIDB4ZikgPDwgIDgpCisjZGVmaW5lIFNTSV9UWF9GSUZPXzBfQ09VTlRfU0hJRlQgOAorI2RlZmluZSBTU0lfU0ZDU1JfUkZXTTAoeCkJKCgoeCkgJiAweGYpIDw8ICA0KQorI2RlZmluZSBTU0lfU0ZDU1JfVEZXTTAoeCkJKCgoeCkgJiAweGYpIDw8ICAwKQorI2RlZmluZSBTU0lfU0ZDU1JfUkZXTTBfTUFTSwkoMHhmIDw8ICA0KQorI2RlZmluZSBTU0lfU0ZDU1JfVEZXTTBfTUFTSwkoMHhmIDw8ICAwKQorCisjZGVmaW5lIFNTSV9TVFIJCTB4MzAKKyNkZWZpbmUgU1NJX1NUUl9URVNUCQkoMSA8PCAxNSkKKyNkZWZpbmUgU1NJX1NUUl9SQ0syVENLCQkoMSA8PCAxNCkKKyNkZWZpbmUgU1NJX1NUUl9SRlMyVEZTCQkoMSA8PCAxMykKKyNkZWZpbmUgU1NJX1NUUl9SWFNUQVRFKHgpCSgoKHgpICYgMHhmKSA8PCA4KQorI2RlZmluZSBTU0lfU1RSX1RYRDJSWEQJCSgxIDw8ICA3KQorI2RlZmluZSBTU0lfU1RSX1RDSzJSQ0sJCSgxIDw8ICA2KQorI2RlZmluZSBTU0lfU1RSX1RGUzJSRlMJCSgxIDw8ICA1KQorI2RlZmluZSBTU0lfU1RSX1RYU1RBVEUoeCkJKCgoeCkgJiAweGYpIDw8IDApCisKKyNkZWZpbmUgU1NJX1NPUgkJMHgzNAorI2RlZmluZSBTU0lfU09SX0NMS09GRgkJKDEgPDwgNikKKyNkZWZpbmUgU1NJX1NPUl9SWF9DTFIJCSgxIDw8IDUpCisjZGVmaW5lIFNTSV9TT1JfVFhfQ0xSCQkoMSA8PCA0KQorI2RlZmluZSBTU0lfU09SX0lOSVQJCSgxIDw8IDMpCisjZGVmaW5lIFNTSV9TT1JfV0FJVCh4KQkJKCgoeCkgJiAweDMpIDw8IDEpCisjZGVmaW5lIFNTSV9TT1JfV0FJVF9NQVNLCSgweDMgPDwgMSkKKyNkZWZpbmUgU1NJX1NPUl9TWU5SU1QJCSgxIDw8IDApCisKKyNkZWZpbmUgU1NJX1NBQ05UCTB4MzgKKyNkZWZpbmUgU1NJX1NBQ05UX0ZSRElWKHgpCSgoKHgpICYgMHgzZikgPDwgNSkKKyNkZWZpbmUgU1NJX1NBQ05UX1dSCQkoMSA8PCA0KQorI2RlZmluZSBTU0lfU0FDTlRfUkQJCSgxIDw8IDMpCisjZGVmaW5lIFNTSV9TQUNOVF9USUYJCSgxIDw8IDIpCisjZGVmaW5lIFNTSV9TQUNOVF9GVgkJKDEgPDwgMSkKKyNkZWZpbmUgU1NJX1NBQ05UX0FDOTdFTgkoMSA8PCAwKQorCisjZGVmaW5lIFNTSV9TQUNBREQJMHgzYworI2RlZmluZSBTU0lfU0FDREFUCTB4NDAKKyNkZWZpbmUgU1NJX1NBVEFHCTB4NDQKKyNkZWZpbmUgU1NJX1NUTVNLCTB4NDgKKyNkZWZpbmUgU1NJX1NSTVNLCTB4NGMKKyNkZWZpbmUgU1NJX1NBQ0NTVAkweDUwCisjZGVmaW5lIFNTSV9TQUNDRU4JMHg1NAorI2RlZmluZSBTU0lfU0FDQ0RJUwkweDU4CisKKy8qIFNTSSBjbG9jayBzb3VyY2VzICovCisjZGVmaW5lIElNWF9TU1BfU1lTX0NMSwkJMAorCisvKiBTU0kgYXVkaW8gZGl2aWRlcnMgKi8KKyNkZWZpbmUgSU1YX1NTSV9UWF9ESVZfMgkwCisjZGVmaW5lIElNWF9TU0lfVFhfRElWX1BTUgkxCisjZGVmaW5lIElNWF9TU0lfVFhfRElWX1BNCTIKKyNkZWZpbmUgSU1YX1NTSV9SWF9ESVZfMgkzCisjZGVmaW5lIElNWF9TU0lfUlhfRElWX1BTUgk0CisjZGVmaW5lIElNWF9TU0lfUlhfRElWX1BNCTUKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBpbXhfc3NpX3BjbV9kYWlbMl07CitleHRlcm4gc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gaW14X3NvY19wbGF0Zm9ybTsKKworI2RlZmluZSBEUlZfTkFNRSAiaW14LXNzaSIKKworc3RydWN0IGlteF9wY21fZG1hX3BhcmFtcyB7CisJaW50IGRtYTsKKwl1bnNpZ25lZCBsb25nIGRtYV9hZGRyOworCWludCBidXJzdHNpemU7Cit9OworCitzdHJ1Y3QgaW14X3NzaSB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYWM5N19kZXY7CisKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgaW14X2FjOTc7CisJc3RydWN0IGNsayAqY2xrOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlpbnQgaXJxOworCWludCBmaXFfZW5hYmxlOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKwl2b2lkICgqYWM5N19yZXNldCkgKHN0cnVjdCBzbmRfYWM5NyAqYWM5Nyk7CisJdm9pZCAoKmFjOTdfd2FybV9yZXNldCkoc3RydWN0IHNuZF9hYzk3ICphYzk3KTsKKworCXN0cnVjdCBpbXhfcGNtX2RtYV9wYXJhbXMJZG1hX3BhcmFtc19yeDsKKwlzdHJ1Y3QgaW14X3BjbV9kbWFfcGFyYW1zCWRtYV9wYXJhbXNfdHg7CisKKwlpbnQgZW5hYmxlZDsKK307CisKK3N0cnVjdCBzbmRfc29jX3BsYXRmb3JtICppbXhfc3NpX2ZpcV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCXN0cnVjdCBpbXhfc3NpICpzc2kpOwordm9pZCBpbXhfc3NpX2ZpcV9leGl0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBpbXhfc3NpICpzc2kpOworc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gKmlteF9zc2lfZG1hX214Ml9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCXN0cnVjdCBpbXhfc3NpICpzc2kpOworCitpbnQgc25kX2lteF9wY21fbW1hcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworaW50IGlteF9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJc3RydWN0IHNuZF9wY20gKnBjbSk7Cit2b2lkIGlteF9wY21fZnJlZShzdHJ1Y3Qgc25kX3BjbSAqcGNtKTsKKworLyoKKyAqIERvIG5vdCBjaGFuZ2UgdGhpcyBhcyB0aGUgRklRIGhhbmRsZXIgZGVwZW5kcyBvbiB0aGlzIHNpemUKKyAqLworI2RlZmluZSBJTVhfU1NJX0RNQUJVRl9TSVpFCSg2NCAqIDEwMjQpCisKKyNkZWZpbmUgRE1BX1JYRklGT19CVVJTVCAgICAgIDB4NAorI2RlZmluZSBETUFfVFhGSUZPX0JVUlNUICAgICAgMHg2CisKKyNlbmRpZiAvKiBfSU1YX1NTSV9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L214MV9teDItcGNtLmMgYi9zb3VuZC9zb2MvaW14L214MV9teDItcGNtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZmZmY2QuLjAwMDAwMDAKLS0tIGEvc291bmQvc29jL2lteC9teDFfbXgyLXBjbS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDg4ICswLDAgQEAKLS8qCi0gKiBteDFfbXgyLXBjbS5jIC0tIEFMU0EgU29DIGludGVyZmFjZSBmb3IgRnJlZXNjYWxlIGkuTVgxeCwgaS5NWDJ4IENQVXMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOSBWaXN0YSBTaWxpY29uIFMuTC4KLSAqIEF1dGhvcjogSmF2aWVyIE1hcnRpbgotICogICAgICAgICBqYXZpZXIubWFydGluQHZpc3RhLXNpbGljb24uY29tCi0gKgotICogQmFzZWQgb24gbXhjLXBjbS5jIGJ5IExpYW0gR2lyZHdvb2QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvZG1hLW14MS1teDIuaD4KLQotI2luY2x1ZGUgIm14MV9teDItcGNtLmgiCi0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIG14MV9teDJfcGNtX2hhcmR3YXJlID0gewotCS5pbmZvCQkJPSAoU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19NTUFQIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKLQkuZm9ybWF0cwkJPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKLQkuYnVmZmVyX2J5dGVzX21heAk9IDMyICogMTAyNCwKLQkucGVyaW9kX2J5dGVzX21pbgk9IDY0LAotCS5wZXJpb2RfYnl0ZXNfbWF4CT0gOCAqIDEwMjQsCi0JLnBlcmlvZHNfbWluCQk9IDIsCi0JLnBlcmlvZHNfbWF4CQk9IDI1NSwKLQkuZmlmb19zaXplCQk9IDAsCi19OwotCi1zdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgewotCWludCBkbWFfY2g7Ci0JaW50IGFjdGl2ZTsKLQl1bnNpZ25lZCBpbnQgcGVyaW9kOwotCXVuc2lnbmVkIGludCBwZXJpb2RzOwotCWludCB0eF9zcGluOwotCXNwaW5sb2NrX3QgZG1hX2xvY2s7Ci0Jc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgKmRtYV9wYXJhbXM7Ci19OwotCi0KLS8qKgotICAqIFRoaXMgZnVuY3Rpb24gc3RvcHMgdGhlIGN1cnJlbnQgZG1hIHRyYW5zZmVyIGZvciBwbGF5YmFjawotICAqIGFuZCBjbGVhcnMgdGhlIGRtYSBwb2ludGVycy4KLSAgKgotICAqIEBwYXJhbQlzdWJzdHJlYW0JcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIG9mIHRoZSBjdXJyZW50IHN0cmVhbS4KLSAgKgotICAqLwotc3RhdGljIGludCBhdWRpb19zdG9wX2RtYShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBteDFfbXgyX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBydGQtPmRtYV9sb2NrLCBmbGFncyk7Ci0KLQlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKLQotCXBydGQtPmFjdGl2ZSA9IDA7Ci0JcHJ0ZC0+cGVyaW9kID0gMDsKLQlwcnRkLT5wZXJpb2RzID0gMDsKLQotCS8qIHRoaXMgc3RvcHMgdGhlIGRtYSBjaGFubmVsIGFuZCBjbGVhcnMgdGhlIGJ1ZmZlciBwdHJzICovCi0KLQlpbXhfZG1hX2Rpc2FibGUocHJ0ZC0+ZG1hX2NoKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBydGQtPmRtYV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBuZXcgYXVkaW8gYmxvY2sgbmVlZHMgdG8gYmUKLSAgKiB0cmFuc2ZlcnJlZCB0byB0aGUgY29kZWMuIFRoZSBmdW5jdGlvbiByZWNlaXZlcyB0aGUgYWRkcmVzcyBhbmQgdGhlIHNpemUKLSAgKiBvZiB0aGUgbmV3IGJsb2NrIGFuZCBzdGFydCBhIG5ldyBETUEgdHJhbnNmZXIuCi0gICoKLSAgKiBAcGFyYW0Jc3Vic3RyZWFtCXBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgY3VycmVudCBzdHJlYW0uCi0gICoKLSAgKi8KLXN0YXRpYyBpbnQgZG1hX25ld19wZXJpb2Qoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9ICBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGludCBkbWFfc2l6ZTsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCWludCByZXQgPSAwOwotCWRtYV9hZGRyX3QgbWVtX2FkZHI7Ci0JdW5zaWduZWQgaW50IGRldl9hZGRyOwotCi0JaWYgKHBydGQtPmFjdGl2ZSkgewotCQlkbWFfc2l6ZSA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7Ci0JCW9mZnNldCA9IGRtYV9zaXplICogcHJ0ZC0+cGVyaW9kOwotCi0JCXByX2RlYnVnKCIlczogcGVyaW9kICglZCkgb3V0IG9mICglZClcbiIsIF9fZnVuY19fLAotCQkJcHJ0ZC0+cGVyaW9kLAotCQkJcnVudGltZS0+cGVyaW9kcyk7Ci0JCXByX2RlYnVnKCJwZXJpb2Rfc2l6ZSAlZCBmcmFtZXNcbiBvZmZzZXQgJWQgYnl0ZXNcbiIsCi0JCQkodW5zaWduZWQgaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLAotCQkJb2Zmc2V0KTsKLQkJcHJfZGVidWcoImRtYV9zaXplICVkIGJ5dGVzXG4iLCBkbWFfc2l6ZSk7Ci0KLQkJc25kX0JVR19PTihkbWFfc2l6ZSA+IG14MV9teDJfcGNtX2hhcmR3YXJlLnBlcmlvZF9ieXRlc19tYXgpOwotCi0JCW1lbV9hZGRyID0gKGRtYV9hZGRyX3QpKHJ1bnRpbWUtPmRtYV9hZGRyICsgb2Zmc2V0KTsKLQkJZGV2X2FkZHIgPSBwcnRkLT5kbWFfcGFyYW1zLT5wZXJfYWRkcmVzczsKLQkJcHJfZGVidWcoIiVzOiBtZW1fYWRkciBpcyAleFxuIGRldl9hZGRyIGlzICV4XG4iLAotCQkJCSBfX2Z1bmNfXywgbWVtX2FkZHIsIGRldl9hZGRyKTsKLQotCQlyZXQgPSBpbXhfZG1hX3NldHVwX3NpbmdsZShwcnRkLT5kbWFfY2gsIG1lbV9hZGRyLAotCQkJCQlkbWFfc2l6ZSwgZGV2X2FkZHIsCi0JCQkJCXBydGQtPmRtYV9wYXJhbXMtPnRyYW5zZmVyX3R5cGUpOwotCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciAlZCBjb25maWd1cmluZyBETUFcbiIsIHJldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCWlteF9kbWFfZW5hYmxlKHBydGQtPmRtYV9jaCk7Ci0KLQkJcHJfZGVidWcoIiVzOiB0cmFuc2ZlciBlbmFibGVkXG5tZW1fYWRkciA9ICV4XG4iLAotCQkJX19mdW5jX18sICh1bnNpZ25lZCBpbnQpIG1lbV9hZGRyKTsKLQkJcHJfZGVidWcoImRldl9hZGRyID0gJXhcbmRtYV9zaXplID0gJWRcbiIsCi0JCQkodW5zaWduZWQgaW50KSBkZXZfYWRkciwgZG1hX3NpemUpOwotCi0JCXBydGQtPnR4X3NwaW4gPSAxOyAvKiBGR0EgbGl0dGxlIHRyaWNrIHRvIHJldHJpZXZlIERNQSBwb3MgKi8KLQkJcHJ0ZC0+cGVyaW9kKys7Ci0JCXBydGQtPnBlcmlvZCAlPSBydW50aW1lLT5wZXJpb2RzOwotICAgIH0KLQlyZXR1cm4gcmV0OwotfQotCi0KLS8qKgotICAqIFRoaXMgaXMgYSBjYWxsYmFjayB3aGljaCB3aWxsIGJlIGNhbGxlZAotICAqIHdoZW4gYSBUWCB0cmFuc2ZlciBmaW5pc2hlcy4gVGhlIGNhbGwgb2NjdXJzCi0gICogaW4gaW50ZXJydXB0IGNvbnRleHQuCi0gICoKLSAgKiBAcGFyYW0JZGF0CXBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSBvZiB0aGUgY3VycmVudCBzdHJlYW0uCi0gICoKLSAgKi8KLXN0YXRpYyB2b2lkIGF1ZGlvX2RtYV9pcnEoaW50IGNoYW5uZWwsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKLQlzdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgKnBydGQ7Ci0JdW5zaWduZWQgaW50IGRtYV9zaXplOwotCXVuc2lnbmVkIGludCBwcmV2aW91c19wZXJpb2Q7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKLQotCXN1YnN0cmVhbSA9IGRhdGE7Ci0JcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCXByZXZpb3VzX3BlcmlvZCAgPSBwcnRkLT5wZXJpb2RzOwotCWRtYV9zaXplID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKLQlvZmZzZXQgPSBkbWFfc2l6ZSAqIHByZXZpb3VzX3BlcmlvZDsKLQotCXBydGQtPnR4X3NwaW4gPSAwOwotCXBydGQtPnBlcmlvZHMrKzsKLQlwcnRkLT5wZXJpb2RzICU9IHJ1bnRpbWUtPnBlcmlvZHM7Ci0KLQlwcl9kZWJ1ZygiJXM6IGlycSBwZXIgJWQgb2Zmc2V0ICV4XG4iLCBfX2Z1bmNfXywgcHJ0ZC0+cGVyaW9kcywgb2Zmc2V0KTsKLQotCS8qCi0JICAqIElmIHdlIGFyZSBnZXR0aW5nIGEgY2FsbGJhY2sgZm9yIGFuIGFjdGl2ZSBzdHJlYW0gdGhlbiB3ZSBpbmZvcm0KLQkgICogdGhlIFBDTSBtaWRkbGUgbGF5ZXIgd2UndmUgZmluaXNoZWQgYSBwZXJpb2QKLQkgICovCi0JaWYgKHBydGQtPmFjdGl2ZSkKLQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOwotCi0JLyoKLQkgICogVHJpZyBuZXh0IERNQSB0cmFuc2ZlcgotCSAgKi8KLQlkbWFfbmV3X3BlcmlvZChzdWJzdHJlYW0pOwotfQotCi0vKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIGhhcmR3YXJlIHRvIGFsbG93IGF1ZGlvCi0gICogcGxheWJhY2sgb3BlcmF0aW9ucy4gSXQgaXMgY2FsbGVkIGJ5IEFMU0EgZnJhbWV3b3JrLgotICAqCi0gICogQHBhcmFtCXN1YnN0cmVhbQlwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGN1cnJlbnQgc3RyZWFtLgotICAqCi0gICogQHJldHVybiAgICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuCi0gICovCi1zdGF0aWMgaW50Ci1zbmRfbXgxX214Ml9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSAgc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBteDFfbXgyX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKLQotCXBydGQtPnBlcmlvZCA9IDA7Ci0JcHJ0ZC0+cGVyaW9kcyA9IDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteDFfbXgyX3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0Jc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKLQkJCQkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBmYWlsZWQgdG8gbWFsbG9jIHBjbSBwYWdlcyBcbiIsCi0JCV9fZnVuY19fLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXByX2RlYnVnKCIlczogc25kX2lteDFfbXgyX2F1ZGlvX2h3X3BhcmFtcyBydW50aW1lLT5kbWFfYWRkciAweCgleClcbiIsCi0JCV9fZnVuY19fLCAodW5zaWduZWQgaW50KXJ1bnRpbWUtPmRtYV9hZGRyKTsKLQlwcl9kZWJ1ZygiJXM6IHNuZF9pbXgxX214Ml9hdWRpb19od19wYXJhbXMgcnVudGltZS0+ZG1hX2FyZWEgMHgoJXgpXG4iLAotCQlfX2Z1bmNfXywgKHVuc2lnbmVkIGludClydW50aW1lLT5kbWFfYXJlYSk7Ci0JcHJfZGVidWcoIiVzOiBzbmRfaW14MV9teDJfYXVkaW9faHdfcGFyYW1zIHJ1bnRpbWUtPmRtYV9ieXRlcyAweCgleClcbiIsCi0JCV9fZnVuY19fLCAodW5zaWduZWQgaW50KXJ1bnRpbWUtPmRtYV9ieXRlcyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG14MV9teDJfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlzdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7Ci0KLQlpbXhfZG1hX2ZyZWUocHJ0ZC0+ZG1hX2NoKTsKLQotCXNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14MV9teDJfcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCi17Ci0Jc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhICpwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7Ci0JaW50IHJldCA9IDA7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Ci0JCXBydGQtPnR4X3NwaW4gPSAwOwotCQkvKiByZXF1ZXN0ZWQgc3RyZWFtIHN0YXJ0dXAgKi8KLQkJcHJ0ZC0+YWN0aXZlID0gMTsKLQkJcHJfZGVidWcoIiVzOiBzdGFydGluZyBkbWFfbmV3X3BlcmlvZFxuIiwgX19mdW5jX18pOwotCQlyZXQgPSBkbWFfbmV3X3BlcmlvZChzdWJzdHJlYW0pOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0JCS8qIHJlcXVlc3RlZCBzdHJlYW0gc2h1dGRvd24gKi8KLQkJcHJfZGVidWcoIiVzOiBzdG9wcGluZyBkbWEgdHJhbnNmZXJcbiIsIF9fZnVuY19fKTsKLQkJcmV0ID0gYXVkaW9fc3RvcF9kbWEoc3Vic3RyZWFtKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNuZF9wY21fdWZyYW1lc190Ci1teDFfbXgyX3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwOwotCi0JLyogdHhfc3BpbiB2YWx1ZSBpcyB1c2VkIGhlcmUgdG8gY2hlY2sgaWYgYSB0cmFuc2ZlciBpcyBhY3RpdmUgKi8KLQlpZiAocHJ0ZC0+dHhfc3BpbikgewotCQlvZmZzZXQgPSAocnVudGltZS0+cGVyaW9kX3NpemUgKiAocHJ0ZC0+cGVyaW9kcykpICsKLQkJCQkJCShydW50aW1lLT5wZXJpb2Rfc2l6ZSA+PiAxKTsKLQkJaWYgKG9mZnNldCA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJCW9mZnNldCA9IHJ1bnRpbWUtPnBlcmlvZF9zaXplID4+IDE7Ci0JfSBlbHNlIHsKLQkJb2Zmc2V0ID0gKHJ1bnRpbWUtPnBlcmlvZF9zaXplICogKHBydGQtPnBlcmlvZHMpKTsKLQkJaWYgKG9mZnNldCA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJCW9mZnNldCA9IDA7Ci0JfQotCXByX2RlYnVnKCIlczogcG9pbnRlciBvZmZzZXQgJXhcbiIsIF9fZnVuY19fLCBvZmZzZXQpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIGludCBteDFfbXgyX3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IG14MV9teDJfcnVudGltZV9kYXRhICpwcnRkOwotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyAqZG1hX2RhdGEgPSBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGE7Ci0JaW50IHJldDsKLQotCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmbXgxX214Ml9wY21faGFyZHdhcmUpOwotCi0JcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwKLQkJCQkJU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcHJ0ZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBteDFfbXgyX3J1bnRpbWVfZGF0YSksIEdGUF9LRVJORUwpOwotCWlmIChwcnRkID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gcHJ0ZDsKLQotCWlmICghZG1hX2RhdGEpCi0JCXJldHVybiAtRU5PREVWOwotCi0JcHJ0ZC0+ZG1hX3BhcmFtcyA9IGRtYV9kYXRhOwotCi0JcHJfZGVidWcoIiVzOiBSZXF1ZXN0aW5nIGRtYSBjaGFubmVsICglcylcbiIsIF9fZnVuY19fLAotCQkJCQkJcHJ0ZC0+ZG1hX3BhcmFtcy0+bmFtZSk7Ci0JcmV0ID0gaW14X2RtYV9yZXF1ZXN0X2J5X3ByaW8ocHJ0ZC0+ZG1hX3BhcmFtcy0+bmFtZSwgRE1BX1BSSU9fSElHSCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciAlZCByZXF1ZXN0aW5nIGRtYSBjaGFubmVsXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlwcnRkLT5kbWFfY2ggPSByZXQ7Ci0JaW14X2RtYV9jb25maWdfYnVyc3RsZW4ocHJ0ZC0+ZG1hX2NoLAotCQkJCXBydGQtPmRtYV9wYXJhbXMtPndhdGVybWFya19sZXZlbCk7Ci0KLQlyZXQgPSBpbXhfZG1hX2NvbmZpZ19jaGFubmVsKHBydGQtPmRtYV9jaCwKLQkJCXBydGQtPmRtYV9wYXJhbXMtPnBlcl9jb25maWcsCi0JCQlwcnRkLT5kbWFfcGFyYW1zLT5tZW1fY29uZmlnLAotCQkJcHJ0ZC0+ZG1hX3BhcmFtcy0+ZXZlbnRfaWQsIDApOwotCi0JaWYgKHJldCkgewotCQlwcl9kZWJ1ZyhLRVJOX0VSUiAiRXJyb3IgJWQgY29uZmlndXJpbmcgZG1hIGNoYW5uZWwgJWRcbiIsCi0JCQlyZXQsIHBydGQtPmRtYV9jaCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcHJfZGVidWcoIiVzOiBTZXR0aW5nIHR4IGRtYSBjYWxsYmFjayBmdW5jdGlvblxuIiwgX19mdW5jX18pOwotCXJldCA9IGlteF9kbWFfc2V0dXBfaGFuZGxlcnMocHJ0ZC0+ZG1hX2NoLAotCQkJCWF1ZGlvX2RtYV9pcnEsIE5VTEwsCi0JCQkJKHZvaWQgKilzdWJzdHJlYW0pOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgJWQgc2V0dGluZyBkbWEgY2FsbGJhY2sgZnVuY3Rpb25cbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCXJldHVybiAwOwotCi0gb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbXgxX214Ml9wY21fY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlzdHJ1Y3QgbXgxX214Ml9ydW50aW1lX2RhdGEgKnBydGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7Ci0KLQlrZnJlZShwcnRkKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14MV9teDJfcGNtX21tYXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQlyZXR1cm4gZG1hX21tYXBfd3JpdGVjb21iaW5lKHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXYsIHZtYSwKLQkJCQkgICAgIHJ1bnRpbWUtPmRtYV9hcmVhLAotCQkJCSAgICAgcnVudGltZS0+ZG1hX2FkZHIsCi0JCQkJICAgICBydW50aW1lLT5kbWFfYnl0ZXMpOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIG14MV9teDJfcGNtX29wcyA9IHsKLQkub3BlbgkJPSBteDFfbXgyX3BjbV9vcGVuLAotCS5jbG9zZQkJPSBteDFfbXgyX3BjbV9jbG9zZSwKLQkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCi0JLmh3X3BhcmFtcwk9IG14MV9teDJfcGNtX2h3X3BhcmFtcywKLQkuaHdfZnJlZQk9IG14MV9teDJfcGNtX2h3X2ZyZWUsCi0JLnByZXBhcmUJPSBzbmRfbXgxX214Ml9wcmVwYXJlLAotCS50cmlnZ2VyCT0gbXgxX214Ml9wY21fdHJpZ2dlciwKLQkucG9pbnRlcgk9IG14MV9teDJfcGNtX3BvaW50ZXIsCi0JLm1tYXAJCT0gbXgxX214Ml9wY21fbW1hcCwKLX07Ci0KLXN0YXRpYyB1NjQgbXgxX214Ml9wY21fZG1hbWFzayA9IDB4ZmZmZmZmZmY7Ci0KLXN0YXRpYyBpbnQgbXgxX214Ml9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbSAqcGNtLCBpbnQgc3RyZWFtKQotewotCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtOwotCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKLQlzaXplX3Qgc2l6ZSA9IG14MV9teDJfcGNtX2hhcmR3YXJlLmJ1ZmZlcl9ieXRlc19tYXg7Ci0JYnVmLT5kZXYudHlwZSA9IFNORFJWX0RNQV9UWVBFX0RFVjsKLQlidWYtPmRldi5kZXYgPSBwY20tPmNhcmQtPmRldjsKLQlidWYtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0KLQkvKiBSZXNlcnZlIHVuY2FjaGVkLWJ1ZmZlcmVkIG1lbW9yeSBhcmVhIGZvciBETUEgKi8KLQlidWYtPmFyZWEgPSBkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKHBjbS0+Y2FyZC0+ZGV2LCBzaXplLAotCQkJCQkgICAmYnVmLT5hZGRyLCBHRlBfS0VSTkVMKTsKLQotCXByX2RlYnVnKCIlczogcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcjogYXJlYT0lcCwgYWRkcj0lcCwgc2l6ZT0lZFxuIiwKLQkJX19mdW5jX18sICh2b2lkICopIGJ1Zi0+YXJlYSwgKHZvaWQgKikgYnVmLT5hZGRyLCBzaXplKTsKLQotCWlmICghYnVmLT5hcmVhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWJ1Zi0+Ynl0ZXMgPSBzaXplOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBteDFfbXgyX3BjbV9mcmVlX2RtYV9idWZmZXJzKHN0cnVjdCBzbmRfcGNtICpwY20pCi17Ci0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07Ci0Jc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWY7Ci0JaW50IHN0cmVhbTsKLQotCWZvciAoc3RyZWFtID0gMDsgc3RyZWFtIDwgMjsgc3RyZWFtKyspIHsKLQkJc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtOwotCQlpZiAoIXN1YnN0cmVhbSkKLQkJCWNvbnRpbnVlOwotCi0JCWJ1ZiA9ICZzdWJzdHJlYW0tPmRtYV9idWZmZXI7Ci0JCWlmICghYnVmLT5hcmVhKQotCQkJY29udGludWU7Ci0KLQkJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKHBjbS0+Y2FyZC0+ZGV2LCBidWYtPmJ5dGVzLAotCQkJCSAgICAgIGJ1Zi0+YXJlYSwgYnVmLT5hZGRyKTsKLQkJYnVmLT5hcmVhID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgbXgxX214Ml9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCi0Jc3RydWN0IHNuZF9wY20gKnBjbSkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICghY2FyZC0+ZGV2LT5kbWFfbWFzaykKLQkJY2FyZC0+ZGV2LT5kbWFfbWFzayA9ICZteDFfbXgyX3BjbV9kbWFtYXNrOwotCWlmICghY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzaykKLQkJY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmY7Ci0KLQlpZiAoZGFpLT5wbGF5YmFjay5jaGFubmVsc19taW4pIHsKLQkJcmV0ID0gbXgxX214Ml9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihwY20sCi0JCQlTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKTsKLQkJcHJfZGVidWcoIiVzOiBwcmVhbGxvY2F0ZSBwbGF5YmFjayBidWZmZXJcbiIsIF9fZnVuY19fKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCX0KLQotCWlmIChkYWktPmNhcHR1cmUuY2hhbm5lbHNfbWluKSB7Ci0JCXJldCA9IG14MV9teDJfcGNtX3ByZWFsbG9jYXRlX2RtYV9idWZmZXIocGNtLAotCQkJU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKTsKLQkJcHJfZGVidWcoIiVzOiBwcmVhbGxvY2F0ZSBjYXB0dXJlIGJ1ZmZlclxuIiwgX19mdW5jX18pOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JfQotIG91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBteDFfbXgyX3NvY19wbGF0Zm9ybSA9IHsKLQkubmFtZQkJPSAibXgxX214Mi1hdWRpbyIsCi0JLnBjbV9vcHMgCT0gJm14MV9teDJfcGNtX29wcywKLQkucGNtX25ldwk9IG14MV9teDJfcGNtX25ldywKLQkucGNtX2ZyZWUJPSBteDFfbXgyX3BjbV9mcmVlX2RtYV9idWZmZXJzLAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKG14MV9teDJfc29jX3BsYXRmb3JtKTsKLQotc3RhdGljIGludCBfX2luaXQgbXgxX214Ml9zb2NfcGxhdGZvcm1faW5pdCh2b2lkKQotewotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX3BsYXRmb3JtKCZteDFfbXgyX3NvY19wbGF0Zm9ybSk7Ci19Ci1tb2R1bGVfaW5pdChteDFfbXgyX3NvY19wbGF0Zm9ybV9pbml0KTsKLQotc3RhdGljIHZvaWQgX19leGl0IG14MV9teDJfc29jX3BsYXRmb3JtX2V4aXQodm9pZCkKLXsKLQlzbmRfc29jX3VucmVnaXN0ZXJfcGxhdGZvcm0oJm14MV9teDJfc29jX3BsYXRmb3JtKTsKLX0KLW1vZHVsZV9leGl0KG14MV9teDJfc29jX3BsYXRmb3JtX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJKYXZpZXIgTWFydGluLCBqYXZpZXIubWFydGluQHZpc3RhLXNpbGljb24uY29tIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkZyZWVzY2FsZSBpLk1YMngsIGkuTVgxeCBQQ00gRE1BIG1vZHVsZSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teDFfbXgyLXBjbS5oIGIvc291bmQvc29jL2lteC9teDFfbXgyLXBjbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTUyODEwLi4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9pbXgvbXgxX214Mi1wY20uaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qCi0gKiBteDFfbXgyLXBjbS5oIDotIEFTb0MgcGxhdGZvcm0gaGVhZGVyIGZvciBGcmVlc2NhbGUgaS5NWDF4LCBpLk1YMngKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX01YMV9NWDJfUENNX0gKLSNkZWZpbmUgX01YMV9NWDJfUENNX0gKLQotLyogRE1BIGluZm9ybWF0aW9uIGZvciBteDFfbXgyIHBsYXRmb3JtcyAqLwotc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgewotCWNoYXIgKm5hbWU7CQkJLyogc3RyZWFtIGlkZW50aWZpZXIgKi8KLQl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfdHlwZTsJLyogUkVBRCBvciBXUklURSBETUEgdHJhbnNmZXIgKi8KLQlkbWFfYWRkcl90IHBlcl9hZGRyZXNzOwkJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBTU0kgZmlmbyAqLwotCWludCBldmVudF9pZDsJCQkvKiBmaXhlZCBETUEgbnVtYmVyIGZvciBTU0kgZmlmbyAqLwotCWludCB3YXRlcm1hcmtfbGV2ZWw7CQkvKiBTU0kgZmlmbyB3YXRlcm1hcmsgbGV2ZWwgKi8KLQlpbnQgcGVyX2NvbmZpZzsJCQkvKiBETUEgQ29uZmlnIGZsYWdzIGZvciBwZXJpcGhlcmFsICovCi0JaW50IG1lbV9jb25maWc7CQkJLyogRE1BIENvbmZpZyBmbGFncyBmb3IgUkFNICovCi0gfTsKLQotLyogcGxhdGZvcm0gZGF0YSAqLwotZXh0ZXJuIHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtIG14MV9teDJfc29jX3BsYXRmb3JtOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvbXgyN3Zpc193bTg5NzQuYyBiL3NvdW5kL3NvYy9pbXgvbXgyN3Zpc193bTg5NzQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdkMmEyNC4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvaW14L214Mjd2aXNfd204OTc0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMTggKzAsMCBAQAotLyoKLSAqIG14Mjd2aXNfd204OTc0LmMgIC0tICBTb0MgYXVkaW8gZm9yIG14Mjd2aXMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOSBWaXN0YSBTaWxpY29uIFMuTC4KLSAqIEF1dGhvcjogSmF2aWVyIE1hcnRpbgotICogICAgICAgICBqYXZpZXIubWFydGluQHZpc3RhLXNpbGljb24uY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgotCi0KLSNpbmNsdWRlICIuLi9jb2RlY3Mvd204OTc0LmgiCi0jaW5jbHVkZSAibXgxX214Mi1wY20uaCIKLSNpbmNsdWRlICJteGMtc3NpLmgiCi0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC5oPgotCi0jZGVmaW5lIElHTk9SRURfQVJHIDAKLQotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBteDI3dmlzOwotCi0vKioKLSAgKiBUaGlzIGZ1bmN0aW9uIGNvbm5lY3RzIFNTSTEgKEhQQ1IxKSBhcyBzbGF2ZSB0bwotICAqIFNTSTEgZXh0ZXJuYWwgc2lnbmFscyAoUFBDUjEpCi0gICogQXMgc2xhdmUsIEhQQ1IxIG11c3Qgc2V0IFRGU0RJUiBhbmQgVENMS0RJUiBhcyBpbnB1dHMgZnJvbQotICAqIHBvcnQgNAotICAqLwotdm9pZCBhdWRtdXhfY29ubmVjdF8xXzQodm9pZCkKLXsKLQlwcl9kZWJ1ZygiQVVETVVYOiBub3JtYWwgb3BlcmF0aW9uIG1vZGVcbiIpOwotCS8qIFJlc2V0IEhQQ1IxIGFuZCBQUENSMSAqLwotCi0JREFNX0hQQ1IxID0gMHgwMDAwMDAwMDsKLQlEQU1fUFBDUjEgPSAweDAwMDAwMDAwOwotCi0JLyogc2V0IHRvIHN5bmNocm9ub3VzICovCi0JREFNX0hQQ1IxIHw9IEFVRE1VWF9IUENSX1NZTjsKLQlEQU1fUFBDUjEgfD0gQVVETVVYX1BQQ1JfU1lOOwotCi0KLQkvKiBzZXQgUnggc291cmNlcyAxIDwtLT4gNCAqLwotCURBTV9IUENSMSB8PSBBVURNVVhfSFBDUl9SWERTRUwoMyk7IC8qIHBvcnQgNCAqLwotCURBTV9QUENSMSB8PSBBVURNVVhfUFBDUl9SWERTRUwoMCk7IC8qIHBvcnQgMSAqLwotCi0JLyogc2V0IFR4IGZyYW1lIGFuZCBDbG9jayBkaXJlY3Rpb24gYW5kIHNvdXJjZSAgNCAtLT4gMSBvdXRwdXQgKi8KLQlEQU1fSFBDUjEgfD0gQVVETVVYX0hQQ1JfVEZTRElSIHwgQVVETVVYX0hQQ1JfVENMS0RJUjsKLQlEQU1fSFBDUjEgfD0gQVVETVVYX0hQQ1JfVEZDU0VMKDMpOyAvKiBUeERTIGFuZCBUeENjbGsgZnJvbSBwb3J0IDQgKi8KLQotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBteDI3dmlzX2hpZmlfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7Ci0JdW5zaWduZWQgaW50IHBsbF9vdXQgPSAwLCBiY2xrID0gMCwgZm10ID0gMCwgbWNsayA9IDA7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKgotCSAqIFRoZSBXTTg5NzQgaXMgYmV0dGVyIGF0IGdlbmVyYXRpbmcgYWNjdXJhdGUgYXVkaW8gY2xvY2tzIHRoYW4gdGhlCi0JICogTVgyNyBTU0kgY29udHJvbGxlciwgc28gd2Ugd2lsbCB1c2UgaXQgYXMgbWFzdGVyIHdoZW4gd2UgY2FuLgotCSAqLwotCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgewotCWNhc2UgODAwMDoKLQkJZm10ID0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKLQkJbWNsayA9IFdNODk3NF9NQ0xLRElWXzEyOwotCQlwbGxfb3V0ID0gMjQ1NzYwMDA7Ci0JCWJyZWFrOwotCWNhc2UgMTYwMDA6Ci0JCWZtdCA9IFNORF9TT0NfREFJRk1UX0NCTV9DRk07Ci0JCXBsbF9vdXQgPSAxMjI4ODAwMDsKLQkJYnJlYWs7Ci0JY2FzZSA0ODAwMDoKLQkJZm10ID0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKLQkJYmNsayA9IFdNODk3NF9CQ0xLRElWXzQ7Ci0JCXBsbF9vdXQgPSAxMjI4ODAwMDsKLQkJYnJlYWs7Ci0JY2FzZSA5NjAwMDoKLQkJZm10ID0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKLQkJYmNsayA9IFdNODk3NF9CQ0xLRElWXzI7Ci0JCXBsbF9vdXQgPSAxMjI4ODAwMDsKLQkJYnJlYWs7Ci0JY2FzZSAxMTAyNToKLQkJZm10ID0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKLQkJYmNsayA9IFdNODk3NF9CQ0xLRElWXzE2OwotCQlwbGxfb3V0ID0gMTEyODk2MDA7Ci0JCWJyZWFrOwotCWNhc2UgMjIwNTA6Ci0JCWZtdCA9IFNORF9TT0NfREFJRk1UX0NCTV9DRk07Ci0JCWJjbGsgPSBXTTg5NzRfQkNMS0RJVl84OwotCQlwbGxfb3V0ID0gMTEyODk2MDA7Ci0JCWJyZWFrOwotCWNhc2UgNDQxMDA6Ci0JCWZtdCA9IFNORF9TT0NfREFJRk1UX0NCTV9DRk07Ci0JCWJjbGsgPSBXTTg5NzRfQkNMS0RJVl80OwotCQltY2xrID0gV004OTc0X01DTEtESVZfMjsKLQkJcGxsX291dCA9IDExMjg5NjAwOwotCQlicmVhazsKLQljYXNlIDg4MjAwOgotCQlmbXQgPSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOwotCQliY2xrID0gV004OTc0X0JDTEtESVZfMjsKLQkJcGxsX291dCA9IDExMjg5NjAwOwotCQlicmVhazsKLQl9Ci0KLQkvKiBzZXQgY29kZWMgREFJIGNvbmZpZ3VyYXRpb24gKi8KLQlyZXQgPSBjb2RlY19kYWktPm9wcy0+c2V0X2ZtdChjb2RlY19kYWksCi0JCVNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX05CX0lGIHwKLQkJU05EX1NPQ19EQUlGTVRfU1lOQyB8IGZtdCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBmcm9tIGNvZGVjIERBSSBjb25maWd1cmF0aW9uXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBzZXQgY3B1IERBSSBjb25maWd1cmF0aW9uICovCi0JcmV0ID0gY3B1X2RhaS0+b3BzLT5zZXRfZm10KGNwdV9kYWksCi0JCVNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX05CX05GIHwKLQkJU05EX1NPQ19EQUlGTVRfU1lOQyB8IGZtdCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBmcm9tIGNwdSBEQUkgY29uZmlndXJhdGlvblxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogUHV0IERDIGZpZWxkIG9mIFNUQ0NSIHRvIDEgKG5vdCB6ZXJvKSAqLwotCXJldCA9IGNwdV9kYWktPm9wcy0+c2V0X3RkbV9zbG90KGNwdV9kYWksIDAsIDIpOwotCi0JLyogc2V0IHRoZSBTU0kgc3lzdGVtIGNsb2NrIGFzIGlucHV0ICovCi0JcmV0ID0gY3B1X2RhaS0+b3BzLT5zZXRfc3lzY2xrKGNwdV9kYWksIElNWF9TU1BfU1lTX0NMSywgMCwKLQkJU05EX1NPQ19DTE9DS19JTik7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciB3aGVuIHNldHRpbmcgc3lzdGVtIFNTSSBjbGtcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIHNldCBjb2RlYyBCQ0xLIGRpdmlzaW9uIGZvciBzYW1wbGUgcmF0ZSAqLwotCXJldCA9IGNvZGVjX2RhaS0+b3BzLT5zZXRfY2xrZGl2KGNvZGVjX2RhaSwgV004OTc0X0JDTEtESVYsIGJjbGspOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igd2hlbiBzZXR0aW5nIEJDTEsgZGl2aXNpb25cbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCi0JLyogY29kZWMgUExMIGlucHV0IGlzIDI1IE1IeiAqLwotCXJldCA9IGNvZGVjX2RhaS0+b3BzLT5zZXRfcGxsKGNvZGVjX2RhaSwgSUdOT1JFRF9BUkcsIElHTk9SRURfQVJHLAotCQkJCQkyNTAwMDAwMCwgcGxsX291dCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciB3aGVuIHNldHRpbmcgUExMIGlucHV0XG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKnNldCBjb2RlYyBNQ0xLIGRpdmlzaW9uIGZvciBzYW1wbGUgcmF0ZSAqLwotCXJldCA9IGNvZGVjX2RhaS0+b3BzLT5zZXRfY2xrZGl2KGNvZGVjX2RhaSwgV004OTc0X01DTEtESVYsIG1jbGspOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igd2hlbiBzZXR0aW5nIE1DTEsgZGl2aXNpb25cbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14Mjd2aXNfaGlmaV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7Ci0KLQkvKiBkaXNhYmxlIHRoZSBQTEwgKi8KLQlyZXR1cm4gY29kZWNfZGFpLT5vcHMtPnNldF9wbGwoY29kZWNfZGFpLCBJR05PUkVEX0FSRywgSUdOT1JFRF9BUkcsCi0JCQkJICAgICAgIDAsIDApOwotfQotCi0vKgotICogbXgyN3ZpcyBXTTg5NzQgSGlGaSBEQUkgb3BzZXJhdGlvbnMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgbXgyN3Zpc19oaWZpX29wcyA9IHsKLQkuaHdfcGFyYW1zID0gbXgyN3Zpc19oaWZpX2h3X3BhcmFtcywKLQkuaHdfZnJlZSA9IG14Mjd2aXNfaGlmaV9od19mcmVlLAotfTsKLQotCi1zdGF0aWMgaW50IG14Mjd2aXNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXgyN3Zpc19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteDI3dmlzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlyZXQgPSBnZXRfc3NpX2NsaygwLCAmcGRldi0+ZGV2KTsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbnQgZ2V0IHNzaSBjbG9ja1xuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXgyN3Zpc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlwdXRfc3NpX2NsaygwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIG14Mjd2aXNfZGFpW10gPSB7Ci17IC8qIEhpZmkgUGxheWJhY2sqLwotCS5uYW1lID0gIldNODk3NCIsCi0JLnN0cmVhbV9uYW1lID0gIldNODk3NCBIaUZpIiwKLQkuY3B1X2RhaSA9ICZpbXhfc3NpX3BjbV9kYWlbMF0sCi0JLmNvZGVjX2RhaSA9ICZ3bTg5NzRfZGFpLAotCS5vcHMgPSAmbXgyN3Zpc19oaWZpX29wcywKLX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBteDI3dmlzID0gewotCS5uYW1lID0gIm14Mjd2aXMiLAotCS5wbGF0Zm9ybSA9ICZteDFfbXgyX3NvY19wbGF0Zm9ybSwKLQkucHJvYmUgPSBteDI3dmlzX3Byb2JlLAotCS5yZW1vdmUgPSBteDI3dmlzX3JlbW92ZSwKLQkuc3VzcGVuZF9wcmUgPSBteDI3dmlzX3N1c3BlbmQsCi0JLnJlc3VtZV9wb3N0ID0gbXgyN3Zpc19yZXN1bWUsCi0JLmRhaV9saW5rID0gbXgyN3Zpc19kYWksCi0JLm51bV9saW5rcyA9IEFSUkFZX1NJWkUobXgyN3Zpc19kYWkpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBteDI3dmlzX3NuZF9kZXZkYXRhID0gewotCS5jYXJkID0gJm14Mjd2aXMsCi0JLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtODk3NCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpteDI3dmlzX3NuZF9kZXZpY2U7Ci0KLS8qIFRlbXBvcmFsIGRlZmluaXRpb24gb2YgYm9hcmQgc3BlY2lmaWMgYmVoYXZpb3VyICovCi12b2lkIGdwaW9fc3NpX2FjdGl2ZShpbnQgc3NpX251bSkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCXVuc2lnbmVkIGludCBzc2kxX3BpbnNbXSA9IHsKLQkJUEMyMF9QRl9TU0kxX0ZTLAotCQlQQzIxX1BGX1NTSTFfUlhELAotCQlQQzIyX1BGX1NTSTFfVFhELAotCQlQQzIzX1BGX1NTSTFfQ0xLLAotCX07Ci0JdW5zaWduZWQgaW50IHNzaTJfcGluc1tdID0gewotCQlQQzI0X1BGX1NTSTJfRlMsCi0JCVBDMjVfUEZfU1NJMl9SWEQsCi0JCVBDMjZfUEZfU1NJMl9UWEQsCi0JCVBDMjdfUEZfU1NJMl9DTEssCi0JfTsKLQlpZiAoc3NpX251bSA9PSAwKQotCQlyZXQgPSBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKHNzaTFfcGlucywKLQkJCQlBUlJBWV9TSVpFKHNzaTFfcGlucyksICJVU0IgT1RHIik7Ci0JZWxzZQotCQlyZXQgPSBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKHNzaTJfcGlucywKLQkJCQlBUlJBWV9TSVpFKHNzaTJfcGlucyksICJVU0IgT1RHIik7Ci0JaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZXF1ZXN0aW5nIHNzaSAleCBwaW5zXG4iLCBzc2lfbnVtKTsKLX0KLQotCi1zdGF0aWMgaW50IF9faW5pdCBteDI3dmlzX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JbXgyN3Zpc19zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7Ci0JaWYgKCFteDI3dmlzX3NuZF9kZXZpY2UpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEobXgyN3Zpc19zbmRfZGV2aWNlLCAmbXgyN3Zpc19zbmRfZGV2ZGF0YSk7Ci0JbXgyN3Zpc19zbmRfZGV2ZGF0YS5kZXYgPSAmbXgyN3Zpc19zbmRfZGV2aWNlLT5kZXY7Ci0JcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChteDI3dmlzX3NuZF9kZXZpY2UpOwotCi0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgIkFTb0M6IFBsYXRmb3JtIGRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7Ci0JCXBsYXRmb3JtX2RldmljZV9wdXQobXgyN3Zpc19zbmRfZGV2aWNlKTsKLQl9Ci0KLQkvKiBXTTg5NzQgdXNlcyBTU0kxIChIUENSMSkgdmlhIEFVRE1VWCBwb3J0IDQgZm9yIGF1ZGlvIChQUENSMSkgKi8KLQlncGlvX3NzaV9hY3RpdmUoMCk7Ci0JYXVkbXV4X2Nvbm5lY3RfMV80KCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgbXgyN3Zpc19leGl0KHZvaWQpCi17Ci0JLyogV2Ugc2hvdWxkIGNhbGwgc29tZSAic3NpX2dwaW9faW5hY3RpdmUoKSIgcHJvcGVybHkgKi8KLX0KLQotbW9kdWxlX2luaXQobXgyN3Zpc19pbml0KTsKLW1vZHVsZV9leGl0KG14Mjd2aXNfZXhpdCk7Ci0KLQotTU9EVUxFX0FVVEhPUigiSmF2aWVyIE1hcnRpbiwgamF2aWVyLm1hcnRpbkB2aXN0YS1zaWxpY29uLmNvbSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBXTTg5NzQgbXgyN3ZpcyIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teGMtc3NpLmMgYi9zb3VuZC9zb2MvaW14L214Yy1zc2kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NkZWZlNi4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvaW14L214Yy1zc2kuYworKysgL2Rldi9udWxsCkBAIC0xLDg2MCArMCwwIEBACi0vKgotICogbXhjLXNzaS5jICAtLSAgU1NJIGRyaXZlciBmb3IgRnJlZXNjYWxlIElNWAotICoKLSAqIENvcHlyaWdodCAyMDA2IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCi0gKiBBdXRob3I6IExpYW0gR2lyZHdvb2QKLSAqICAgICAgICAgbGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KLSAqCi0gKiAgQmFzZWQgb24gbXhjLWFsc2EtbWMxMzc4MyAoQykgMjAwNiBGcmVlc2NhbGUuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVE9ETzoKLSAqICAgTmVlZCB0byByZXdvcmsgU1NJIHJlZ2lzdGVyIGRlZnMgd2hlbiBuZXcgZGVmcyBnbyBpbnRvIG1haW5saW5lLgotICogICBBZGQgc3VwcG9ydCBmb3IgVERNIGFuZCBGSUZPIDEuCi0gKiAgIEFkZCBzdXBwb3J0IGZvciBpLm14M3ggRE1BIGludGVyZmFjZS4KLSAqCi0gKi8KLQotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLmg+Ci0jaW5jbHVkZSA8bWFjaC9kbWEtbXgxLW14Mi5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0KLSNpbmNsdWRlICJteGMtc3NpLmgiCi0jaW5jbHVkZSAibXgxX214Mi1wY20uaCIKLQotI2RlZmluZSBTU0kxX1BPUlQJMAotI2RlZmluZSBTU0kyX1BPUlQJMQotCi1zdGF0aWMgaW50IHNzaV9hY3RpdmVbMl0gPSB7MCwgMH07Ci0KLS8qIERNQSBpbmZvcm1hdGlvbiBmb3IgbXgxX214MiBwbGF0Zm9ybXMgKi8KLXN0YXRpYyBzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyBpbXhfc3NpMV9wY21fc3RlcmVvX291dDAgPSB7Ci0JLm5hbWUJCQk9ICJTU0kxIFBDTSBTdGVyZW8gb3V0IDAiLAotCS50cmFuc2Zlcl90eXBlID0gRE1BX01PREVfV1JJVEUsCi0JLnBlcl9hZGRyZXNzID0gU1NJMV9CQVNFX0FERFIgKyBTVFgwLAotCS5ldmVudF9pZCA9IERNQV9SRVFfU1NJMV9UWDAsCi0JLndhdGVybWFya19sZXZlbCA9IFRYRklGT19XQVRFUk1BUkssCi0JLnBlcl9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMTYgfCBJTVhfRE1BX1RZUEVfRklGTywKLQkubWVtX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8zMiB8IElNWF9ETUFfVFlQRV9MSU5FQVIsCi19OwotCi1zdGF0aWMgc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgaW14X3NzaTFfcGNtX3N0ZXJlb19vdXQxID0gewotCS5uYW1lCQkJPSAiU1NJMSBQQ00gU3RlcmVvIG91dCAxIiwKLQkudHJhbnNmZXJfdHlwZSA9IERNQV9NT0RFX1dSSVRFLAotCS5wZXJfYWRkcmVzcyA9IFNTSTFfQkFTRV9BRERSICsgU1RYMSwKLQkuZXZlbnRfaWQgPSBETUFfUkVRX1NTSTFfVFgxLAotCS53YXRlcm1hcmtfbGV2ZWwgPSBUWEZJRk9fV0FURVJNQVJLLAotCS5wZXJfY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzE2IHwgSU1YX0RNQV9UWVBFX0ZJRk8sCi0JLm1lbV9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMzIgfCBJTVhfRE1BX1RZUEVfTElORUFSLAotfTsKLQotc3RhdGljIHN0cnVjdCBteDFfbXgyX3BjbV9kbWFfcGFyYW1zIGlteF9zc2kxX3BjbV9zdGVyZW9faW4wID0gewotCS5uYW1lCQkJPSAiU1NJMSBQQ00gU3RlcmVvIGluIDAiLAotCS50cmFuc2Zlcl90eXBlID0gRE1BX01PREVfUkVBRCwKLQkucGVyX2FkZHJlc3MgPSBTU0kxX0JBU0VfQUREUiArIFNSWDAsCi0JLmV2ZW50X2lkID0gRE1BX1JFUV9TU0kxX1JYMCwKLQkud2F0ZXJtYXJrX2xldmVsID0gUlhGSUZPX1dBVEVSTUFSSywKLQkucGVyX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8xNiB8IElNWF9ETUFfVFlQRV9GSUZPLAotCS5tZW1fY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzMyIHwgSU1YX0RNQV9UWVBFX0xJTkVBUiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyBpbXhfc3NpMV9wY21fc3RlcmVvX2luMSA9IHsKLQkubmFtZQkJCT0gIlNTSTEgUENNIFN0ZXJlbyBpbiAxIiwKLQkudHJhbnNmZXJfdHlwZSA9IERNQV9NT0RFX1JFQUQsCi0JLnBlcl9hZGRyZXNzID0gU1NJMV9CQVNFX0FERFIgKyBTUlgxLAotCS5ldmVudF9pZCA9IERNQV9SRVFfU1NJMV9SWDEsCi0JLndhdGVybWFya19sZXZlbCA9IFJYRklGT19XQVRFUk1BUkssCi0JLnBlcl9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMTYgfCBJTVhfRE1BX1RZUEVfRklGTywKLQkubWVtX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8zMiB8IElNWF9ETUFfVFlQRV9MSU5FQVIsCi19OwotCi1zdGF0aWMgc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgaW14X3NzaTJfcGNtX3N0ZXJlb19vdXQwID0gewotCS5uYW1lCQkJPSAiU1NJMiBQQ00gU3RlcmVvIG91dCAwIiwKLQkudHJhbnNmZXJfdHlwZSA9IERNQV9NT0RFX1dSSVRFLAotCS5wZXJfYWRkcmVzcyA9IFNTSTJfQkFTRV9BRERSICsgU1RYMCwKLQkuZXZlbnRfaWQgPSBETUFfUkVRX1NTSTJfVFgwLAotCS53YXRlcm1hcmtfbGV2ZWwgPSBUWEZJRk9fV0FURVJNQVJLLAotCS5wZXJfY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzE2IHwgSU1YX0RNQV9UWVBFX0ZJRk8sCi0JLm1lbV9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMzIgfCBJTVhfRE1BX1RZUEVfTElORUFSLAotfTsKLQotc3RhdGljIHN0cnVjdCBteDFfbXgyX3BjbV9kbWFfcGFyYW1zIGlteF9zc2kyX3BjbV9zdGVyZW9fb3V0MSA9IHsKLQkubmFtZQkJCT0gIlNTSTIgUENNIFN0ZXJlbyBvdXQgMSIsCi0JLnRyYW5zZmVyX3R5cGUgPSBETUFfTU9ERV9XUklURSwKLQkucGVyX2FkZHJlc3MgPSBTU0kyX0JBU0VfQUREUiArIFNUWDEsCi0JLmV2ZW50X2lkID0gRE1BX1JFUV9TU0kyX1RYMSwKLQkud2F0ZXJtYXJrX2xldmVsID0gVFhGSUZPX1dBVEVSTUFSSywKLQkucGVyX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8xNiB8IElNWF9ETUFfVFlQRV9GSUZPLAotCS5tZW1fY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzMyIHwgSU1YX0RNQV9UWVBFX0xJTkVBUiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXgxX214Ml9wY21fZG1hX3BhcmFtcyBpbXhfc3NpMl9wY21fc3RlcmVvX2luMCA9IHsKLQkubmFtZQkJCT0gIlNTSTIgUENNIFN0ZXJlbyBpbiAwIiwKLQkudHJhbnNmZXJfdHlwZSA9IERNQV9NT0RFX1JFQUQsCi0JLnBlcl9hZGRyZXNzID0gU1NJMl9CQVNFX0FERFIgKyBTUlgwLAotCS5ldmVudF9pZCA9IERNQV9SRVFfU1NJMl9SWDAsCi0JLndhdGVybWFya19sZXZlbCA9IFJYRklGT19XQVRFUk1BUkssCi0JLnBlcl9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMTYgfCBJTVhfRE1BX1RZUEVfRklGTywKLQkubWVtX2NvbmZpZyA9IElNWF9ETUFfTUVNU0laRV8zMiB8IElNWF9ETUFfVFlQRV9MSU5FQVIsCi19OwotCi1zdGF0aWMgc3RydWN0IG14MV9teDJfcGNtX2RtYV9wYXJhbXMgaW14X3NzaTJfcGNtX3N0ZXJlb19pbjEgPSB7Ci0JLm5hbWUJCQk9ICJTU0kyIFBDTSBTdGVyZW8gaW4gMSIsCi0JLnRyYW5zZmVyX3R5cGUgPSBETUFfTU9ERV9SRUFELAotCS5wZXJfYWRkcmVzcyA9IFNTSTJfQkFTRV9BRERSICsgU1JYMSwKLQkuZXZlbnRfaWQgPSBETUFfUkVRX1NTSTJfUlgxLAotCS53YXRlcm1hcmtfbGV2ZWwgPSBSWEZJRk9fV0FURVJNQVJLLAotCS5wZXJfY29uZmlnID0gSU1YX0RNQV9NRU1TSVpFXzE2IHwgSU1YX0RNQV9UWVBFX0ZJRk8sCi0JLm1lbV9jb25maWcgPSBJTVhfRE1BX01FTVNJWkVfMzIgfCBJTVhfRE1BX1RZUEVfTElORUFSLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgKnNzaV9jbGswLCAqc3NpX2NsazE7Ci0KLWludCBnZXRfc3NpX2NsayhpbnQgc3NpLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3dpdGNoIChzc2kpIHsKLQljYXNlIDA6Ci0JCXNzaV9jbGswID0gY2xrX2dldChkZXYsICJzc2kxIik7Ci0JCWlmIChJU19FUlIoc3NpX2NsazApKQotCQkJcmV0dXJuIFBUUl9FUlIoc3NpX2NsazApOwotCQlyZXR1cm4gMDsKLQljYXNlIDE6Ci0JCXNzaV9jbGsxID0gY2xrX2dldChkZXYsICJzc2kyIik7Ci0JCWlmIChJU19FUlIoc3NpX2NsazEpKQotCQkJcmV0dXJuIFBUUl9FUlIoc3NpX2NsazEpOwotCQlyZXR1cm4gMDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MKGdldF9zc2lfY2xrKTsKLQotdm9pZCBwdXRfc3NpX2NsayhpbnQgc3NpKQotewotCXN3aXRjaCAoc3NpKSB7Ci0JY2FzZSAwOgotCQljbGtfcHV0KHNzaV9jbGswKTsKLQkJc3NpX2NsazAgPSBOVUxMOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCWNsa19wdXQoc3NpX2NsazEpOwotCQlzc2lfY2xrMSA9IE5VTEw7Ci0JCWJyZWFrOwotCX0KLX0KLUVYUE9SVF9TWU1CT0wocHV0X3NzaV9jbGspOwotCi0vKgotICogU1NJIHN5c3RlbSBjbG9jayBjb25maWd1cmF0aW9uLgotICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLgotICovCi1zdGF0aWMgaW50IGlteF9zc2lfc2V0X2RhaV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAotCWludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQotewotCXUzMiBzY3I7Ci0KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCQlzY3IgPSBTU0kxX1NDUjsKLQkJcHJfZGVidWcoIiVzOiBTQ1IgZm9yIFNTSTEgaXMgJXhcbiIsIF9fZnVuY19fLCBzY3IpOwotCX0gZWxzZSB7Ci0JCXNjciA9IFNTSTJfU0NSOwotCQlwcl9kZWJ1ZygiJXM6IFNDUiBmb3IgU1NJMiBpcyAleFxuIiwgX19mdW5jX18sIHNjcik7Ci0JfQotCi0JaWYgKHNjciAmIFNTSV9TQ1JfU1NJRU4pIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyBzc2kgYWxyZWFkeSBlbmFibGVkXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3dpdGNoIChjbGtfaWQpIHsKLQljYXNlIElNWF9TU1BfU1lTX0NMSzoKLQkJaWYgKGRpciA9PSBTTkRfU09DX0NMT0NLX09VVCkgewotCQkJc2NyIHw9IFNTSV9TQ1JfU1lTX0NMS19FTjsKLQkJCXByX2RlYnVnKCIlczogY2xrIG9mIGlzIG91dHB1dFxuIiwgX19mdW5jX18pOwotCQl9IGVsc2UgewotCQkJc2NyICY9IH5TU0lfU0NSX1NZU19DTEtfRU47Ci0JCQlwcl9kZWJ1ZygiJXM6IGNsayBvZiBpcyBpbnB1dFxuIiwgX19mdW5jX18pOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7Ci0JCXByX2RlYnVnKCIlczogd3JpdGViYWNrIG9mIFNTSTFfU0NSXG4iLCBfX2Z1bmNfXyk7Ci0JCVNTSTFfU0NSID0gc2NyOwotCX0gZWxzZSB7Ci0JCXByX2RlYnVnKCIlczogd3JpdGViYWNrIG9mIFNTSTJfU0NSXG4iLCBfX2Z1bmNfXyk7Ci0JCVNTSTJfU0NSID0gc2NyOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogU1NJIENsb2NrIGRpdmlkZXJzCi0gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBwb3J0IGlzIGluYWN0aXZlIChpLmUuIFNTSUVOID0gMCkuCi0gKi8KLXN0YXRpYyBpbnQgaW14X3NzaV9zZXRfZGFpX2Nsa2RpdihzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCi0JaW50IGRpdl9pZCwgaW50IGRpdikKLXsKLQl1MzIgc3RjY3IsIHNyY2NyOwotCi0JcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7Ci0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJaWYgKFNTSTFfU0NSICYgU1NJX1NDUl9TU0lFTikKLQkJCXJldHVybiAwOwotCQlzcmNjciA9IFNTSTFfU1RDQ1I7Ci0JCXN0Y2NyID0gU1NJMV9TVENDUjsKLQl9IGVsc2UgewotCQlpZiAoU1NJMl9TQ1IgJiBTU0lfU0NSX1NTSUVOKQotCQkJcmV0dXJuIDA7Ci0JCXNyY2NyID0gU1NJMl9TVENDUjsKLQkJc3RjY3IgPSBTU0kyX1NUQ0NSOwotCX0KLQotCXN3aXRjaCAoZGl2X2lkKSB7Ci0JY2FzZSBJTVhfU1NJX1RYX0RJVl8yOgotCQlzdGNjciAmPSB+U1NJX1NUQ0NSX0RJVjI7Ci0JCXN0Y2NyIHw9IGRpdjsKLQkJYnJlYWs7Ci0JY2FzZSBJTVhfU1NJX1RYX0RJVl9QU1I6Ci0JCXN0Y2NyICY9IH5TU0lfU1RDQ1JfUFNSOwotCQlzdGNjciB8PSBkaXY7Ci0JCWJyZWFrOwotCWNhc2UgSU1YX1NTSV9UWF9ESVZfUE06Ci0JCXN0Y2NyICY9IH4weGZmOwotCQlzdGNjciB8PSBTU0lfU1RDQ1JfUE0oZGl2KTsKLQkJYnJlYWs7Ci0JY2FzZSBJTVhfU1NJX1JYX0RJVl8yOgotCQlzdGNjciAmPSB+U1NJX1NUQ0NSX0RJVjI7Ci0JCXN0Y2NyIHw9IGRpdjsKLQkJYnJlYWs7Ci0JY2FzZSBJTVhfU1NJX1JYX0RJVl9QU1I6Ci0JCXN0Y2NyICY9IH5TU0lfU1RDQ1JfUFNSOwotCQlzdGNjciB8PSBkaXY7Ci0JCWJyZWFrOwotCWNhc2UgSU1YX1NTSV9SWF9ESVZfUE06Ci0JCXN0Y2NyICY9IH4weGZmOwotCQlzdGNjciB8PSBTU0lfU1RDQ1JfUE0oZGl2KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJU1NJMV9TVENDUiA9IHN0Y2NyOwotCQlTU0kxX1NSQ0NSID0gc3JjY3I7Ci0JfSBlbHNlIHsKLQkJU1NJMl9TVENDUiA9IHN0Y2NyOwotCQlTU0kyX1NSQ0NSID0gc3JjY3I7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogU1NJIE5ldHdvcmsgTW9kZSBvciBURE0gc2xvdHMgY29uZmlndXJhdGlvbi4KLSAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHBvcnQgaXMgaW5hY3RpdmUgKGkuZS4gU1NJRU4gPSAwKS4KLSAqLwotc3RhdGljIGludCBpbXhfc3NpX3NldF9kYWlfdGRtX3Nsb3Qoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAotCXVuc2lnbmVkIGludCBtYXNrLCBpbnQgc2xvdHMpCi17Ci0JdTMyIHN0bXNrLCBzcm1zaywgc3RjY3I7Ci0KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCQlpZiAoU1NJMV9TQ1IgJiBTU0lfU0NSX1NTSUVOKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nIHNzaSBhbHJlYWR5IGVuYWJsZWRcbiIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJc3RjY3IgPSBTU0kxX1NUQ0NSOwotCX0gZWxzZSB7Ci0JCWlmIChTU0kyX1NDUiAmIFNTSV9TQ1JfU1NJRU4pIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmcgc3NpIGFscmVhZHkgZW5hYmxlZFxuIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlzdGNjciA9IFNTSTJfU1RDQ1I7Ci0JfQotCi0Jc3Rtc2sgPSBzcm1zayA9IG1hc2s7Ci0Jc3RjY3IgJj0gflNTSV9TVENDUl9EQ19NQVNLOwotCXN0Y2NyIHw9IFNTSV9TVENDUl9EQyhzbG90cyAtIDEpOwotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJU1NJMV9TVE1TSyA9IHN0bXNrOwotCQlTU0kxX1NSTVNLID0gc3Jtc2s7Ci0JCVNTSTFfU1JDQ1IgPSBTU0kxX1NUQ0NSID0gc3RjY3I7Ci0JfSBlbHNlIHsKLQkJU1NJMl9TVE1TSyA9IHN0bXNrOwotCQlTU0kyX1NSTVNLID0gc3Jtc2s7Ci0JCVNTSTJfU1JDQ1IgPSBTU0kyX1NUQ0NSID0gc3RjY3I7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTU0kgREFJIGZvcm1hdCBjb25maWd1cmF0aW9uLgotICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLgotICogTm90ZTogV2UgZG9uJ3QgdXNlIHRoZSBJMlMgbW9kZXMgYnV0IGluc3RlYWQgbWFudWFsbHkgY29uZmlndXJlIHRoZQotICogU1NJIGZvciBJMlMuCi0gKi8KLXN0YXRpYyBpbnQgaW14X3NzaV9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCi0JCXVuc2lnbmVkIGludCBmbXQpCi17Ci0JdTMyIHN0Y3IgPSAwLCBzcmNyID0gMCwgc2NyOwotCi0JLyoKLQkgKiBUaGlzIGlzIGRvbmUgdG8gYXZvaWQgdGhpcyBmdW5jdGlvbiB0byBtb2RpZnkKLQkgKiBwcmV2aW91cyBzZXQgdmFsdWVzIGluIHN0Y3IKLQkgKi8KLQlzdGNyID0gU1NJMV9TVENSOwotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpCi0JCXNjciA9IFNTSTFfU0NSICYgfihTU0lfU0NSX1NZTiB8IFNTSV9TQ1JfTkVUKTsKLQllbHNlCi0JCXNjciA9IFNTSTJfU0NSICYgfihTU0lfU0NSX1NZTiB8IFNTSV9TQ1JfTkVUKTsKLQotCWlmIChzY3IgJiBTU0lfU0NSX1NTSUVOKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmcgc3NpIGFscmVhZHkgZW5hYmxlZFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIERBSSBtb2RlICovCi0Jc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgewotCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgotCQkvKiBkYXRhIG9uIHJpc2luZyBlZGdlIG9mIGJjbGssIGZyYW1lIGxvdyAxY2xrIGJlZm9yZSBkYXRhICovCi0JCXN0Y3IgfD0gU1NJX1NUQ1JfVEZTSSB8IFNTSV9TVENSX1RFRlMgfCBTU0lfU1RDUl9UWEJJVDA7Ci0JCXNyY3IgfD0gU1NJX1NSQ1JfUkZTSSB8IFNTSV9TUkNSX1JFRlMgfCBTU0lfU1JDUl9SWEJJVDA7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgotCQkvKiBkYXRhIG9uIHJpc2luZyBlZGdlIG9mIGJjbGssIGZyYW1lIGhpZ2ggd2l0aCBkYXRhICovCi0JCXN0Y3IgfD0gU1NJX1NUQ1JfVFhCSVQwOwotCQlzcmNyIHw9IFNTSV9TUkNSX1JYQklUMDsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKLQkJLyogZGF0YSBvbiByaXNpbmcgZWRnZSBvZiBiY2xrLCBmcmFtZSBoaWdoIHdpdGggZGF0YSAqLwotCQlzdGNyIHw9IFNTSV9TVENSX1RGU0w7Ci0JCXNyY3IgfD0gU1NJX1NSQ1JfUkZTTDsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKLQkJLyogZGF0YSBvbiByaXNpbmcgZWRnZSBvZiBiY2xrLCBmcmFtZSBoaWdoIDFjbGsgYmVmb3JlIGRhdGEgKi8KLQkJc3RjciB8PSBTU0lfU1RDUl9URlNMIHwgU1NJX1NUQ1JfVEVGUzsKLQkJc3JjciB8PSBTU0lfU1JDUl9SRlNMIHwgU1NJX1NSQ1JfUkVGUzsKLQkJYnJlYWs7Ci0JfQotCi0JLyogREFJIGNsb2NrIGludmVyc2lvbiAqLwotCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKLQljYXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgotCQlzdGNyIHw9IFNTSV9TVENSX1RGU0k7Ci0JCXN0Y3IgJj0gflNTSV9TVENSX1RTQ0tQOwotCQlzcmNyIHw9IFNTSV9TUkNSX1JGU0k7Ci0JCXNyY3IgJj0gflNTSV9TUkNSX1JTQ0tQOwotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgotCQlzdGNyICY9IH4oU1NJX1NUQ1JfVFNDS1AgfCBTU0lfU1RDUl9URlNJKTsKLQkJc3JjciAmPSB+KFNTSV9TUkNSX1JTQ0tQIHwgU1NJX1NSQ1JfUkZTSSk7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6Ci0JCXN0Y3IgfD0gU1NJX1NUQ1JfVEZTSSB8IFNTSV9TVENSX1RTQ0tQOwotCQlzcmNyIHw9IFNTSV9TUkNSX1JGU0kgfCBTU0lfU1JDUl9SU0NLUDsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKLQkJc3RjciAmPSB+U1NJX1NUQ1JfVEZTSTsKLQkJc3RjciB8PSBTU0lfU1RDUl9UU0NLUDsKLQkJc3JjciAmPSB+U1NJX1NSQ1JfUkZTSTsKLQkJc3JjciB8PSBTU0lfU1JDUl9SU0NLUDsKLQkJYnJlYWs7Ci0JfQotCi0JLyogREFJIGNsb2NrIG1hc3RlciBtYXNrcyAqLwotCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKLQljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6Ci0JCXN0Y3IgfD0gU1NJX1NUQ1JfVEZESVIgfCBTU0lfU1RDUl9UWERJUjsKLQkJc3JjciB8PSBTU0lfU1JDUl9SRkRJUiB8IFNTSV9TUkNSX1JYRElSOwotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRlM6Ci0JCXN0Y3IgfD0gU1NJX1NUQ1JfVEZESVI7Ci0JCXNyY3IgfD0gU1NJX1NSQ1JfUkZESVI7Ci0JCWJyZWFrOwotCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGTToKLQkJc3RjciB8PSBTU0lfU1RDUl9UWERJUjsKLQkJc3JjciB8PSBTU0lfU1JDUl9SWERJUjsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJU1NJMV9TVENSID0gc3RjcjsKLQkJU1NJMV9TUkNSID0gc3JjcjsKLQkJU1NJMV9TQ1IgPSBzY3I7Ci0JfSBlbHNlIHsKLQkJU1NJMl9TVENSID0gc3RjcjsKLQkJU1NJMl9TUkNSID0gc3JjcjsKLQkJU1NJMl9TQ1IgPSBzY3I7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW14X3NzaV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwotCi0JaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKLQkJLyogc2V0IHVwIFRYIERNQSBwYXJhbXMgKi8KLQkJc3dpdGNoIChjcHVfZGFpLT5pZCkgewotCQljYXNlIElNWF9EQUlfU1NJMDoKLQkJCWNwdV9kYWktPmRtYV9kYXRhID0gJmlteF9zc2kxX3BjbV9zdGVyZW9fb3V0MDsKLQkJCWJyZWFrOwotCQljYXNlIElNWF9EQUlfU1NJMToKLQkJCWNwdV9kYWktPmRtYV9kYXRhID0gJmlteF9zc2kxX3BjbV9zdGVyZW9fb3V0MTsKLQkJCWJyZWFrOwotCQljYXNlIElNWF9EQUlfU1NJMjoKLQkJCWNwdV9kYWktPmRtYV9kYXRhID0gJmlteF9zc2kyX3BjbV9zdGVyZW9fb3V0MDsKLQkJCWJyZWFrOwotCQljYXNlIElNWF9EQUlfU1NJMzoKLQkJCWNwdV9kYWktPmRtYV9kYXRhID0gJmlteF9zc2kyX3BjbV9zdGVyZW9fb3V0MTsKLQkJfQotCQlwcl9kZWJ1ZygiJXM6IChwbGF5YmFjaylcbiIsIF9fZnVuY19fKTsKLQl9IGVsc2UgewotCQkvKiBzZXQgdXAgUlggRE1BIHBhcmFtcyAqLwotCQlzd2l0Y2ggKGNwdV9kYWktPmlkKSB7Ci0JCWNhc2UgSU1YX0RBSV9TU0kwOgotCQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmaW14X3NzaTFfcGNtX3N0ZXJlb19pbjA7Ci0JCQlicmVhazsKLQkJY2FzZSBJTVhfREFJX1NTSTE6Ci0JCQljcHVfZGFpLT5kbWFfZGF0YSA9ICZpbXhfc3NpMV9wY21fc3RlcmVvX2luMTsKLQkJCWJyZWFrOwotCQljYXNlIElNWF9EQUlfU1NJMjoKLQkJCWNwdV9kYWktPmRtYV9kYXRhID0gJmlteF9zc2kyX3BjbV9zdGVyZW9faW4wOwotCQkJYnJlYWs7Ci0JCWNhc2UgSU1YX0RBSV9TU0kzOgotCQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmaW14X3NzaTJfcGNtX3N0ZXJlb19pbjE7Ci0JCX0KLQkJcHJfZGVidWcoIiVzOiAoY2FwdHVyZSlcbiIsIF9fZnVuY19fKTsKLQl9Ci0KLQkvKgotCSAqIHdlIGNhbnQgcmVhbGx5IGNoYW5nZSBhbnkgU1NJIHZhbHVlcyBhZnRlciBTU0kgaXMgZW5hYmxlZAotCSAqIG5lZWQgdG8gZml4IGluIHNvZnR3YXJlIGZvciBtYXggZmxleGliaWxpdHkgLSBscmcKLQkgKi8KLQlpZiAoY3B1X2RhaS0+YWN0aXZlKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmcgc3NpIGFscmVhZHkgZW5hYmxlZFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIHJlc2V0IHRoZSBTU0kgcG9ydCAtIFNlY3QgNDUuNC40ICovCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQotCQlpZiAoIXNzaV9jbGswKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKHNzaV9hY3RpdmVbU1NJMV9QT1JUXSsrKSB7Ci0JCQlwcl9kZWJ1ZygiJXM6IGV4aXQgYmVmb3JlIHJlc2V0XG4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCS8qIFNTSTEgUmVzZXQgKi8KLQkJU1NJMV9TQ1IgPSAwOwotCi0JCVNTSTFfU0ZDU1IgPSBTU0lfU0ZDU1JfUkZXTTEoUlhGSUZPX1dBVEVSTUFSSykgfAotCQkJU1NJX1NGQ1NSX1JGV00wKFJYRklGT19XQVRFUk1BUkspIHwKLQkJCVNTSV9TRkNTUl9URldNMShUWEZJRk9fV0FURVJNQVJLKSB8Ci0JCQlTU0lfU0ZDU1JfVEZXTTAoVFhGSUZPX1dBVEVSTUFSSyk7Ci0JfSBlbHNlIHsKLQotCQlpZiAoIXNzaV9jbGsxKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKHNzaV9hY3RpdmVbU1NJMl9QT1JUXSsrKSB7Ci0JCQlwcl9kZWJ1ZygiJXM6IGV4aXQgYmVmb3JlIHJlc2V0XG4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCS8qIFNTSTIgUmVzZXQgKi8KLQkJU1NJMl9TQ1IgPSAwOwotCi0JCVNTSTJfU0ZDU1IgPSBTU0lfU0ZDU1JfUkZXTTEoUlhGSUZPX1dBVEVSTUFSSykgfAotCQkJU1NJX1NGQ1NSX1JGV00wKFJYRklGT19XQVRFUk1BUkspIHwKLQkJCVNTSV9TRkNTUl9URldNMShUWEZJRk9fV0FURVJNQVJLKSB8Ci0JCQlTU0lfU0ZDU1JfVEZXTTAoVFhGSUZPX1dBVEVSTUFSSyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBpbXhfc3NpX2h3X3R4X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7Ci0JdTMyIHN0Y2NyLCBzdGNyLCBzaWVyOwotCi0JcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCQlzdGNjciA9IFNTSTFfU1RDQ1IgJiB+U1NJX1NUQ0NSX1dMX01BU0s7Ci0JCXN0Y3IgPSBTU0kxX1NUQ1I7Ci0JCXNpZXIgPSBTU0kxX1NJRVI7Ci0JfSBlbHNlIHsKLQkJc3RjY3IgPSBTU0kyX1NUQ0NSICYgflNTSV9TVENDUl9XTF9NQVNLOwotCQlzdGNyID0gU1NJMl9TVENSOwotCQlzaWVyID0gU1NJMl9TSUVSOwotCX0KLQotCS8qIERBSSBkYXRhICh3b3JkKSBzaXplICovCi0Jc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgotCQlzdGNjciB8PSBTU0lfU1RDQ1JfV0woMTYpOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKLQkJc3RjY3IgfD0gU1NJX1NUQ0NSX1dMKDIwKTsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKLQkJc3RjY3IgfD0gU1NJX1NUQ0NSX1dMKDI0KTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogZW5hYmxlIGludGVycnVwdHMgKi8KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikKLQkJc3RjciB8PSBTU0lfU1RDUl9URkVOMDsKLQllbHNlCi0JCXN0Y3IgfD0gU1NJX1NUQ1JfVEZFTjE7Ci0Jc2llciB8PSBTU0lfU0lFUl9URE1BRTsKLQotCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7Ci0JCVNTSTFfU1RDUiA9IHN0Y3I7Ci0JCVNTSTFfU1RDQ1IgPSBzdGNjcjsKLQkJU1NJMV9TSUVSID0gc2llcjsKLQl9IGVsc2UgewotCQlTU0kyX1NUQ1IgPSBzdGNyOwotCQlTU0kyX1NUQ0NSID0gc3RjY3I7Ci0JCVNTSTJfU0lFUiA9IHNpZXI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBpbXhfc3NpX2h3X3J4X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7Ci0JdTMyIHNyY2NyLCBzcmNyLCBzaWVyOwotCi0JcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikgewotCQlzcmNjciA9IFNTSTFfU1JDQ1IgJiB+U1NJX1NSQ0NSX1dMX01BU0s7Ci0JCXNyY3IgPSBTU0kxX1NSQ1I7Ci0JCXNpZXIgPSBTU0kxX1NJRVI7Ci0JfSBlbHNlIHsKLQkJc3JjY3IgPSBTU0kyX1NSQ0NSICYgflNTSV9TUkNDUl9XTF9NQVNLOwotCQlzcmNyID0gU1NJMl9TUkNSOwotCQlzaWVyID0gU1NJMl9TSUVSOwotCX0KLQotCS8qIERBSSBkYXRhICh3b3JkKSBzaXplICovCi0Jc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgotCQlzcmNjciB8PSBTU0lfU1JDQ1JfV0woMTYpOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKLQkJc3JjY3IgfD0gU1NJX1NSQ0NSX1dMKDIwKTsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKLQkJc3JjY3IgfD0gU1NJX1NSQ0NSX1dMKDI0KTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogZW5hYmxlIGludGVycnVwdHMgKi8KLQlpZiAoY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kwIHx8IGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMikKLQkJc3JjciB8PSBTU0lfU1JDUl9SRkVOMDsKLQllbHNlCi0JCXNyY3IgfD0gU1NJX1NSQ1JfUkZFTjE7Ci0Jc2llciB8PSBTU0lfU0lFUl9SRE1BRTsKLQotCWlmIChjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTAgfHwgY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7Ci0JCVNTSTFfU1JDUiA9IHNyY3I7Ci0JCVNTSTFfU1JDQ1IgPSBzcmNjcjsKLQkJU1NJMV9TSUVSID0gc2llcjsKLQl9IGVsc2UgewotCQlTU0kyX1NSQ1IgPSBzcmNyOwotCQlTU0kyX1NSQ0NSID0gc3JjY3I7Ci0JCVNTSTJfU0lFUiA9IHNpZXI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBwb3J0IGlzIGluYWN0aXZlIChpLmUuIFNTSUVOID0gMCksCi0gKiBhbHRob3VnaCBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGJ5IHVwcGVyIGxheWVycy4KLSAqLwotaW50IGlteF9zc2lfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotCQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKLQotCWludCByZXQ7Ci0KLQkvKiBjYW50IGNoYW5nZSBhbnkgcGFyYW1ldGVycyB3aGVuIFNTSSBpcyBydW5uaW5nICovCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJaWYgKFNTSTFfU0NSICYgU1NJX1NDUl9TU0lFTikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyBzc2kgYWxyZWFkeSBlbmFibGVkXG4iKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKFNTSTJfU0NSICYgU1NJX1NDUl9TU0lFTikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyBzc2kgYWxyZWFkeSBlbmFibGVkXG4iKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBDb25maWd1cmUgYm90aCB0eCBhbmQgcnggcGFyYW1zIHdpdGggdGhlIHNhbWUgc2V0dGluZ3MuIFRoaXMgaXMKLQkgKiByZWFsbHkgYSBoYXJ3YXJlIHJlc3RyaWN0aW9uIGJlY2F1c2UgU1NJIG11c3QgYmUgZGlzYWJsZWQgdW50aWwKLQkgKiB3ZSBjYW4gY2hhbmdlIHRob3NlIHZhbHVlcy4gSWYgdGhlcmUgaXMgYW4gYWN0aXZlIGF1ZGlvIHN0cmVhbSBpbgotCSAqIG9uZSBkaXJlY3Rpb24sIGVuYWJsaW5nIHRoZSBvdGhlciBkaXJlY3Rpb24gd2l0aCBkaWZmZXJlbnQKLQkgKiBzZXR0aW5ncyB3b3VsZCBtZWFuIGRpc3R1cmJpbmcgdGhlIHJ1bm5pbmcgb25lLgotCSAqLwotCXJldCA9IGlteF9zc2lfaHdfdHhfcGFyYW1zKHN1YnN0cmVhbSwgcGFyYW1zKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQlyZXR1cm4gaW14X3NzaV9od19yeF9wYXJhbXMoc3Vic3RyZWFtLCBwYXJhbXMpOwotfQotCi1pbnQgaW14X3NzaV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwotCWludCByZXQ7Ci0KLQlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKLQotCS8qIEVuYWJsZSBjbGtzIGhlcmUgdG8gZm9sbG93IFNTSSByZWNvbW1lbmRlZCBpbml0IHNlcXVlbmNlICovCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKLQkJcmV0ID0gY2xrX2VuYWJsZShzc2lfY2xrMCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gZW5hYmxlIHNzaV9jbGswXG4iKTsKLQl9IGVsc2UgewotCQlyZXQgPSBjbGtfZW5hYmxlKHNzaV9jbGsxKTsKLQkJaWYgKHJldCA8IDApCi0JCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBlbmFibGUgc3NpX2NsazFcbiIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlteF9zc2lfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKLQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKLQl1MzIgc2NyOwotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpCi0JCXNjciA9IFNTSTFfU0NSOwotCWVsc2UKLQkJc2NyID0gU1NJMl9TQ1I7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgotCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJCXNjciB8PSBTU0lfU0NSX1RFIHwgU1NJX1NDUl9TU0lFTjsKLQkJZWxzZQotCQkJc2NyIHw9IFNTSV9TQ1JfUkUgfCBTU0lfU0NSX1NTSUVOOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKLQkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCQlzY3IgJj0gflNTSV9TQ1JfVEU7Ci0JCWVsc2UKLQkJCXNjciAmPSB+U1NJX1NDUl9SRTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpCi0JCVNTSTFfU0NSID0gc2NyOwotCWVsc2UKLQkJU1NJMl9TQ1IgPSBzY3I7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaW14X3NzaV9zaHV0ZG93bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKLQotCS8qIHNodXRkb3duIFNTSSBpZiBuZWl0aGVyIFR4IG9yIFJ4IGlzIGFjdGl2ZSAqLwotCWlmICghY3B1X2RhaS0+YWN0aXZlKSB7Ci0KLQkJaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fAotCQkJY3B1X2RhaS0+aWQgPT0gSU1YX0RBSV9TU0kyKSB7Ci0KLQkJCWlmICgtLXNzaV9hY3RpdmVbU1NJMV9QT1JUXSA+IDEpCi0JCQkJcmV0dXJuOwotCi0JCQlTU0kxX1NDUiA9IDA7Ci0JCQljbGtfZGlzYWJsZShzc2lfY2xrMCk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoLS1zc2lfYWN0aXZlW1NTSTJfUE9SVF0pCi0JCQkJcmV0dXJuOwotCQkJU1NJMl9TQ1IgPSAwOwotCQkJY2xrX2Rpc2FibGUoc3NpX2NsazEpOwotCQl9Ci0JfQotfQotCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGlteF9zc2lfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCi0Jc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW14X3NzaV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UKLSNkZWZpbmUgaW14X3NzaV9zdXNwZW5kCU5VTEwKLSNkZWZpbmUgaW14X3NzaV9yZXN1bWUJTlVMTAotI2VuZGlmCi0KLSNkZWZpbmUgSU1YX1NTSV9SQVRFUyBcCi0JKFNORFJWX1BDTV9SQVRFXzgwMDAgfCBTTkRSVl9QQ01fUkFURV8xMTAyNSB8IFwKLQlTTkRSVl9QQ01fUkFURV8xNjAwMCB8IFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgXAotCVNORFJWX1BDTV9SQVRFXzMyMDAwIHwgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCi0JU05EUlZfUENNX1JBVEVfNDgwMDAgfCBTTkRSVl9QQ01fUkFURV84ODIwMCB8IFwKLQlTTkRSVl9QQ01fUkFURV85NjAwMCkKLQotI2RlZmluZSBJTVhfU1NJX0JJVFMgXAotCShTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFwKLQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSkKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgaW14X3NzaV9wY21fZGFpX29wcyA9IHsKLQkuc3RhcnR1cCA9IGlteF9zc2lfc3RhcnR1cCwKLQkuc2h1dGRvd24gPSBpbXhfc3NpX3NodXRkb3duLAotCS50cmlnZ2VyID0gaW14X3NzaV90cmlnZ2VyLAotCS5wcmVwYXJlID0gaW14X3NzaV9wcmVwYXJlLAotCS5od19wYXJhbXMgPSBpbXhfc3NpX2h3X3BhcmFtcywKLQkuc2V0X3N5c2NsayA9IGlteF9zc2lfc2V0X2RhaV9zeXNjbGssCi0JLnNldF9jbGtkaXYgPSBpbXhfc3NpX3NldF9kYWlfY2xrZGl2LAotCS5zZXRfZm10ID0gaW14X3NzaV9zZXRfZGFpX2ZtdCwKLQkuc2V0X3RkbV9zbG90ID0gaW14X3NzaV9zZXRfZGFpX3RkbV9zbG90LAotfTsKLQotc3RydWN0IHNuZF9zb2NfZGFpIGlteF9zc2lfcGNtX2RhaVtdID0gewotewotCS5uYW1lID0gImlteC1pMnMtMS0wIiwKLQkuaWQgPSBJTVhfREFJX1NTSTAsCi0JLnN1c3BlbmQgPSBpbXhfc3NpX3N1c3BlbmQsCi0JLnJlc3VtZSA9IGlteF9zc2lfcmVzdW1lLAotCS5wbGF5YmFjayA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkuZm9ybWF0cyA9IElNWF9TU0lfQklUUywKLQkJLnJhdGVzID0gSU1YX1NTSV9SQVRFUyx9LAotCS5jYXB0dXJlID0gewotCQkuY2hhbm5lbHNfbWluID0gMSwKLQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5mb3JtYXRzID0gSU1YX1NTSV9CSVRTLAotCQkucmF0ZXMgPSBJTVhfU1NJX1JBVEVTLH0sCi0JLm9wcyA9ICZpbXhfc3NpX3BjbV9kYWlfb3BzLAotfSwKLXsKLQkubmFtZSA9ICJpbXgtaTJzLTItMCIsCi0JLmlkID0gSU1YX0RBSV9TU0kxLAotCS5wbGF5YmFjayA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkuZm9ybWF0cyA9IElNWF9TU0lfQklUUywKLQkJLnJhdGVzID0gSU1YX1NTSV9SQVRFUyx9LAotCS5jYXB0dXJlID0gewotCQkuY2hhbm5lbHNfbWluID0gMSwKLQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5mb3JtYXRzID0gSU1YX1NTSV9CSVRTLAotCQkucmF0ZXMgPSBJTVhfU1NJX1JBVEVTLH0sCi0JLm9wcyA9ICZpbXhfc3NpX3BjbV9kYWlfb3BzLAotfSwKLXsKLQkubmFtZSA9ICJpbXgtaTJzLTEtMSIsCi0JLmlkID0gSU1YX0RBSV9TU0kyLAotCS5zdXNwZW5kID0gaW14X3NzaV9zdXNwZW5kLAotCS5yZXN1bWUgPSBpbXhfc3NpX3Jlc3VtZSwKLQkucGxheWJhY2sgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAxLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLmZvcm1hdHMgPSBJTVhfU1NJX0JJVFMsCi0JCS5yYXRlcyA9IElNWF9TU0lfUkFURVMsfSwKLQkuY2FwdHVyZSA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkuZm9ybWF0cyA9IElNWF9TU0lfQklUUywKLQkJLnJhdGVzID0gSU1YX1NTSV9SQVRFUyx9LAotCS5vcHMgPSAmaW14X3NzaV9wY21fZGFpX29wcywKLX0sCi17Ci0JLm5hbWUgPSAiaW14LWkycy0yLTEiLAotCS5pZCA9IElNWF9EQUlfU1NJMywKLQkucGxheWJhY2sgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAxLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLmZvcm1hdHMgPSBJTVhfU1NJX0JJVFMsCi0JCS5yYXRlcyA9IElNWF9TU0lfUkFURVMsfSwKLQkuY2FwdHVyZSA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDEsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkuZm9ybWF0cyA9IElNWF9TU0lfQklUUywKLQkJLnJhdGVzID0gSU1YX1NTSV9SQVRFUyx9LAotCS5vcHMgPSAmaW14X3NzaV9wY21fZGFpX29wcywKLX0sCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoaW14X3NzaV9wY21fZGFpKTsKLQotc3RhdGljIGludCBfX2luaXQgaW14X3NzaV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyhpbXhfc3NpX3BjbV9kYWksCi0JCQkJQVJSQVlfU0laRShpbXhfc3NpX3BjbV9kYWkpKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGlteF9zc2lfZXhpdCh2b2lkKQotewotCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKGlteF9zc2lfcGNtX2RhaSwKLQkJCQlBUlJBWV9TSVpFKGlteF9zc2lfcGNtX2RhaSkpOwotfQotCi1tb2R1bGVfaW5pdChpbXhfc3NpX2luaXQpOwotbW9kdWxlX2V4aXQoaW14X3NzaV9leGl0KTsKLU1PRFVMRV9BVVRIT1IoIkxpYW0gR2lyZHdvb2QsIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJpLk1YIEFTb0MgSTJTIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teGMtc3NpLmggYi9zb3VuZC9zb2MvaW14L214Yy1zc2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJiYmRjOS4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvaW14L214Yy1zc2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi0vKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9JTVhfU1NJX0gKLSNkZWZpbmUgX0lNWF9TU0lfSAotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0vKiBTU0kgcmVncyBkZWZpbml0aW9uIC0gTU9WRSB0byAvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoLyB3aGVuIHN0YWJsZSAqLwotI2RlZmluZSBTU0kxX0lPX0JBU0VfQUREUglJT19BRERSRVNTKFNTSTFfQkFTRV9BRERSKQotI2RlZmluZSBTU0kyX0lPX0JBU0VfQUREUglJT19BRERSRVNTKFNTSTJfQkFTRV9BRERSKQotCi0jZGVmaW5lIFNUWDAgICAweDAwCi0jZGVmaW5lIFNUWDEgICAweDA0Ci0jZGVmaW5lIFNSWDAgICAweDA4Ci0jZGVmaW5lIFNSWDEgICAweDBjCi0jZGVmaW5lIFNDUiAgICAweDEwCi0jZGVmaW5lIFNJU1IgICAweDE0Ci0jZGVmaW5lIFNJRVIgICAweDE4Ci0jZGVmaW5lIFNUQ1IgICAweDFjCi0jZGVmaW5lIFNSQ1IgICAweDIwCi0jZGVmaW5lIFNUQ0NSICAweDI0Ci0jZGVmaW5lIFNSQ0NSICAweDI4Ci0jZGVmaW5lIFNGQ1NSICAweDJjCi0jZGVmaW5lIFNUUiAgICAweDMwCi0jZGVmaW5lIFNPUiAgICAweDM0Ci0jZGVmaW5lIFNBQ05UICAweDM4Ci0jZGVmaW5lIFNBQ0FERCAweDNjCi0jZGVmaW5lIFNBQ0RBVCAweDQwCi0jZGVmaW5lIFNBVEFHICAweDQ0Ci0jZGVmaW5lIFNUTVNLICAweDQ4Ci0jZGVmaW5lIFNSTVNLICAweDRjCi0KLSNkZWZpbmUgU1NJMV9TVFgwCSgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTVFgwKSkpCi0jZGVmaW5lIFNTSTFfU1RYMSAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTVFgxKSkpCi0jZGVmaW5lIFNTSTFfU1JYMCAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTUlgwKSkpCi0jZGVmaW5lIFNTSTFfU1JYMSAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTUlgxKSkpCi0jZGVmaW5lIFNTSTFfU0NSICAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTQ1IpKSkKLSNkZWZpbmUgU1NJMV9TSVNSICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNJU1IpKSkKLSNkZWZpbmUgU1NJMV9TSUVSICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNJRVIpKSkKLSNkZWZpbmUgU1NJMV9TVENSICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNUQ1IpKSkKLSNkZWZpbmUgU1NJMV9TUkNSICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNSQ1IpKSkKLSNkZWZpbmUgU1NJMV9TVENDUiAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNUQ0NSKSkpCi0jZGVmaW5lIFNTSTFfU1JDQ1IgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTUkNDUikpKQotI2RlZmluZSBTU0kxX1NGQ1NSICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU0ZDU1IpKSkKLSNkZWZpbmUgU1NJMV9TVFIgICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNUUikpKQotI2RlZmluZSBTU0kxX1NPUiAgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU09SKSkpCi0jZGVmaW5lIFNTSTFfU0FDTlQgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTQUNOVCkpKQotI2RlZmluZSBTU0kxX1NBQ0FERCAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU0FDQUREKSkpCi0jZGVmaW5lIFNTSTFfU0FDREFUICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTQUNEQVQpKSkKLSNkZWZpbmUgU1NJMV9TQVRBRyAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kxX0lPX0JBU0VfQUREUiArIFNBVEFHKSkpCi0jZGVmaW5lIFNTSTFfU1RNU0sgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMV9JT19CQVNFX0FERFIgKyBTVE1TSykpKQotI2RlZmluZSBTU0kxX1NSTVNLICAoKigodm9sYXRpbGUgdTMyICopKFNTSTFfSU9fQkFTRV9BRERSICsgU1JNU0spKSkKLQotCi0jZGVmaW5lIFNTSTJfU1RYMAkoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1RYMCkpKQotI2RlZmluZSBTU0kyX1NUWDEgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1RYMSkpKQotI2RlZmluZSBTU0kyX1NSWDAgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1JYMCkpKQotI2RlZmluZSBTU0kyX1NSWDEgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1JYMSkpKQotI2RlZmluZSBTU0kyX1NDUiAgICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU0NSKSkpCi0jZGVmaW5lIFNTSTJfU0lTUiAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTSVNSKSkpCi0jZGVmaW5lIFNTSTJfU0lFUiAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTSUVSKSkpCi0jZGVmaW5lIFNTSTJfU1RDUiAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTVENSKSkpCi0jZGVmaW5lIFNTSTJfU1JDUiAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTUkNSKSkpCi0jZGVmaW5lIFNTSTJfU1RDQ1IgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTVENDUikpKQotI2RlZmluZSBTU0kyX1NSQ0NSICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1JDQ1IpKSkKLSNkZWZpbmUgU1NJMl9TRkNTUiAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNGQ1NSKSkpCi0jZGVmaW5lIFNTSTJfU1RSICAgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTVFIpKSkKLSNkZWZpbmUgU1NJMl9TT1IgICAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNPUikpKQotI2RlZmluZSBTU0kyX1NBQ05UICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU0FDTlQpKSkKLSNkZWZpbmUgU1NJMl9TQUNBREQgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNBQ0FERCkpKQotI2RlZmluZSBTU0kyX1NBQ0RBVCAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU0FDREFUKSkpCi0jZGVmaW5lIFNTSTJfU0FUQUcgICgqKCh2b2xhdGlsZSB1MzIgKikoU1NJMl9JT19CQVNFX0FERFIgKyBTQVRBRykpKQotI2RlZmluZSBTU0kyX1NUTVNLICAoKigodm9sYXRpbGUgdTMyICopKFNTSTJfSU9fQkFTRV9BRERSICsgU1RNU0spKSkKLSNkZWZpbmUgU1NJMl9TUk1TSyAgKCooKHZvbGF0aWxlIHUzMiAqKShTU0kyX0lPX0JBU0VfQUREUiArIFNSTVNLKSkpCi0KLSNkZWZpbmUgU1NJX1NDUl9DTEtfSVNUICAgICAgICAoMSA8PCA5KQotI2RlZmluZSBTU0lfU0NSX1RDSF9FTiAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIFNTSV9TQ1JfU1lTX0NMS19FTiAgICAgKDEgPDwgNykKLSNkZWZpbmUgU1NJX1NDUl9JMlNfTU9ERV9OT1JNICAoMCA8PCA1KQotI2RlZmluZSBTU0lfU0NSX0kyU19NT0RFX01TVFIgICgxIDw8IDUpCi0jZGVmaW5lIFNTSV9TQ1JfSTJTX01PREVfU0xBVkUgKDIgPDwgNSkKLSNkZWZpbmUgU1NJX1NDUl9TWU4gICAgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBTU0lfU0NSX05FVCAgICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIFNTSV9TQ1JfUkUgICAgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgU1NJX1NDUl9URSAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBTU0lfU0NSX1NTSUVOICAgICAgICAgICgxIDw8IDApCi0KLSNkZWZpbmUgU1NJX1NJU1JfQ01EQVUgICAgICAgICAoMSA8PCAxOCkKLSNkZWZpbmUgU1NJX1NJU1JfQ01ERFUgICAgICAgICAoMSA8PCAxNykKLSNkZWZpbmUgU1NJX1NJU1JfUlhUICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgU1NJX1NJU1JfUkRSMSAgICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgU1NJX1NJU1JfUkRSMCAgICAgICAgICAoMSA8PCAxNCkKLSNkZWZpbmUgU1NJX1NJU1JfVERFMSAgICAgICAgICAoMSA8PCAxMykKLSNkZWZpbmUgU1NJX1NJU1JfVERFMCAgICAgICAgICAoMSA8PCAxMikKLSNkZWZpbmUgU1NJX1NJU1JfUk9FMSAgICAgICAgICAoMSA8PCAxMSkKLSNkZWZpbmUgU1NJX1NJU1JfUk9FMCAgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgU1NJX1NJU1JfVFVFMSAgICAgICAgICAoMSA8PCA5KQotI2RlZmluZSBTU0lfU0lTUl9UVUUwICAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIFNTSV9TSVNSX1RGUyAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgU1NJX1NJU1JfUkZTICAgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBTU0lfU0lTUl9UTFMgICAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIFNTSV9TSVNSX1JMUyAgICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgU1NJX1NJU1JfUkZGMSAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBTU0lfU0lTUl9SRkYwICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIFNTSV9TSVNSX1RGRTEgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgU1NJX1NJU1JfVEZFMCAgICAgICAgICAoMSA8PCAwKQotCi0jZGVmaW5lIFNTSV9TSUVSX1JETUFFICAgICAgICAgKDEgPDwgMjIpCi0jZGVmaW5lIFNTSV9TSUVSX1JJRSAgICAgICAgICAgKDEgPDwgMjEpCi0jZGVmaW5lIFNTSV9TSUVSX1RETUFFICAgICAgICAgKDEgPDwgMjApCi0jZGVmaW5lIFNTSV9TSUVSX1RJRSAgICAgICAgICAgKDEgPDwgMTkpCi0jZGVmaW5lIFNTSV9TSUVSX0NNREFVX0VOICAgICAgKDEgPDwgMTgpCi0jZGVmaW5lIFNTSV9TSUVSX0NNRERVX0VOICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIFNTSV9TSUVSX1JYVF9FTiAgICAgICAgKDEgPDwgMTYpCi0jZGVmaW5lIFNTSV9TSUVSX1JEUjFfRU4gICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIFNTSV9TSUVSX1JEUjBfRU4gICAgICAgKDEgPDwgMTQpCi0jZGVmaW5lIFNTSV9TSUVSX1RERTFfRU4gICAgICAgKDEgPDwgMTMpCi0jZGVmaW5lIFNTSV9TSUVSX1RERTBfRU4gICAgICAgKDEgPDwgMTIpCi0jZGVmaW5lIFNTSV9TSUVSX1JPRTFfRU4gICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIFNTSV9TSUVSX1JPRTBfRU4gICAgICAgKDEgPDwgMTApCi0jZGVmaW5lIFNTSV9TSUVSX1RVRTFfRU4gICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgU1NJX1NJRVJfVFVFMF9FTiAgICAgICAoMSA8PCA4KQotI2RlZmluZSBTU0lfU0lFUl9URlNfRU4gICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIFNTSV9TSUVSX1JGU19FTiAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgU1NJX1NJRVJfVExTX0VOICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBTU0lfU0lFUl9STFNfRU4gICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIFNTSV9TSUVSX1JGRjFfRU4gICAgICAgKDEgPDwgMykKLSNkZWZpbmUgU1NJX1NJRVJfUkZGMF9FTiAgICAgICAoMSA8PCAyKQotI2RlZmluZSBTU0lfU0lFUl9URkUxX0VOICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIFNTSV9TSUVSX1RGRTBfRU4gICAgICAgKDEgPDwgMCkKLQotI2RlZmluZSBTU0lfU1RDUl9UWEJJVDAgICAgICAgICgxIDw8IDkpCi0jZGVmaW5lIFNTSV9TVENSX1RGRU4xICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgU1NJX1NUQ1JfVEZFTjAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBTU0lfU1RDUl9URkRJUiAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIFNTSV9TVENSX1RYRElSICAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgU1NJX1NUQ1JfVFNIRkQgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBTU0lfU1RDUl9UU0NLUCAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIFNTSV9TVENSX1RGU0kgICAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgU1NJX1NUQ1JfVEZTTCAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBTU0lfU1RDUl9URUZTICAgICAgICAgICgxIDw8IDApCi0KLSNkZWZpbmUgU1NJX1NSQ1JfUlhCSVQwICAgICAgICAoMSA8PCA5KQotI2RlZmluZSBTU0lfU1JDUl9SRkVOMSAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIFNTSV9TUkNSX1JGRU4wICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgU1NJX1NSQ1JfUkZESVIgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBTU0lfU1JDUl9SWERJUiAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIFNTSV9TUkNSX1JTSEZEICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgU1NJX1NSQ1JfUlNDS1AgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBTU0lfU1JDUl9SRlNJICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIFNTSV9TUkNSX1JGU0wgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgU1NJX1NSQ1JfUkVGUyAgICAgICAgICAoMSA8PCAwKQotCi0jZGVmaW5lIFNTSV9TVENDUl9ESVYyICAgICAgICAgKDEgPDwgMTgpCi0jZGVmaW5lIFNTSV9TVENDUl9QU1IgICAgICAgICAgKDEgPDwgMTUpCi0jZGVmaW5lIFNTSV9TVENDUl9XTCh4KSAgICAgICAgKCgoKHgpIC0gMikgPj4gMSkgPDwgMTMpCi0jZGVmaW5lIFNTSV9TVENDUl9EQyh4KSAgICAgICAgKCgoeCkgJiAweDFmKSA8PCA4KQotI2RlZmluZSBTU0lfU1RDQ1JfUE0oeCkgICAgICAgICgoKHgpICYgMHhmZikgPDwgMCkKLSNkZWZpbmUgU1NJX1NUQ0NSX1dMX01BU0sgICAgICAgICgweGYgPDwgMTMpCi0jZGVmaW5lIFNTSV9TVENDUl9EQ19NQVNLICAgICAgICAoMHgxZiA8PCA4KQotI2RlZmluZSBTU0lfU1RDQ1JfUE1fTUFTSyAgICAgICAgKDB4ZmYgPDwgMCkKLQotI2RlZmluZSBTU0lfU1JDQ1JfRElWMiAgICAgICAgICgxIDw8IDE4KQotI2RlZmluZSBTU0lfU1JDQ1JfUFNSICAgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBTU0lfU1JDQ1JfV0woeCkgICAgICAgICgoKCh4KSAtIDIpID4+IDEpIDw8IDEzKQotI2RlZmluZSBTU0lfU1JDQ1JfREMoeCkgICAgICAgICgoKHgpICYgMHgxZikgPDwgOCkKLSNkZWZpbmUgU1NJX1NSQ0NSX1BNKHgpICAgICAgICAoKCh4KSAmIDB4ZmYpIDw8IDApCi0jZGVmaW5lIFNTSV9TUkNDUl9XTF9NQVNLICAgICAgICAoMHhmIDw8IDEzKQotI2RlZmluZSBTU0lfU1JDQ1JfRENfTUFTSyAgICAgICAgKDB4MWYgPDwgOCkKLSNkZWZpbmUgU1NJX1NSQ0NSX1BNX01BU0sgICAgICAgICgweGZmIDw8IDApCi0KLQotI2RlZmluZSBTU0lfU0ZDU1JfUkZDTlQxKHgpICAgKCgoeCkgJiAweGYpIDw8IDI4KQotI2RlZmluZSBTU0lfU0ZDU1JfVEZDTlQxKHgpICAgKCgoeCkgJiAweGYpIDw8IDI0KQotI2RlZmluZSBTU0lfU0ZDU1JfUkZXTTEoeCkgICAgKCgoeCkgJiAweGYpIDw8IDIwKQotI2RlZmluZSBTU0lfU0ZDU1JfVEZXTTEoeCkgICAgKCgoeCkgJiAweGYpIDw8IDE2KQotI2RlZmluZSBTU0lfU0ZDU1JfUkZDTlQwKHgpICAgKCgoeCkgJiAweGYpIDw8IDEyKQotI2RlZmluZSBTU0lfU0ZDU1JfVEZDTlQwKHgpICAgKCgoeCkgJiAweGYpIDw8ICA4KQotI2RlZmluZSBTU0lfU0ZDU1JfUkZXTTAoeCkgICAgKCgoeCkgJiAweGYpIDw8ICA0KQotI2RlZmluZSBTU0lfU0ZDU1JfVEZXTTAoeCkgICAgKCgoeCkgJiAweGYpIDw8ICAwKQotCi0jZGVmaW5lIFNTSV9TVFJfVEVTVCAgICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgU1NJX1NUUl9SQ0syVENLICAgICAgICgxIDw8IDE0KQotI2RlZmluZSBTU0lfU1RSX1JGUzJURlMgICAgICAgKDEgPDwgMTMpCi0jZGVmaW5lIFNTSV9TVFJfUlhTVEFURSh4KSAgICAoKCh4KSAmIDB4ZikgPDwgOCkKLSNkZWZpbmUgU1NJX1NUUl9UWEQyUlhEICAgICAgICgxIDw8ICA3KQotI2RlZmluZSBTU0lfU1RSX1RDSzJSQ0sgICAgICAgKDEgPDwgIDYpCi0jZGVmaW5lIFNTSV9TVFJfVEZTMlJGUyAgICAgICAoMSA8PCAgNSkKLSNkZWZpbmUgU1NJX1NUUl9UWFNUQVRFKHgpICAgICgoKHgpICYgMHhmKSA8PCAwKQotCi0jZGVmaW5lIFNTSV9TT1JfQ0xLT0ZGICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBTU0lfU09SX1JYX0NMUiAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgU1NJX1NPUl9UWF9DTFIgICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIFNTSV9TT1JfSU5JVCAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBTU0lfU09SX1dBSVQoeCkgICAgICAgKCgoeCkgJiAweDMpIDw8IDEpCi0jZGVmaW5lIFNTSV9TT1JfU1lOUlNUICAgICAgICAoMSA8PCAwKQotCi0jZGVmaW5lIFNTSV9TQUNOVF9GUkRJVih4KSAgICAoKCh4KSAmIDB4M2YpIDw8IDUpCi0jZGVmaW5lIFNTSV9TQUNOVF9XUiAgICAgICAgICAoeCA8PCA0KQotI2RlZmluZSBTU0lfU0FDTlRfUkQgICAgICAgICAgKHggPDwgMykKLSNkZWZpbmUgU1NJX1NBQ05UX1RJRiAgICAgICAgICh4IDw8IDIpCi0jZGVmaW5lIFNTSV9TQUNOVF9GViAgICAgICAgICAoeCA8PCAxKQotI2RlZmluZSBTU0lfU0FDTlRfQUM5N0VOICAgICAgKHggPDwgMCkKLQotLyogV2F0ZXJtYXJrcyBmb3IgRklGTydzICovCi0jZGVmaW5lIFRYRklGT19XQVRFUk1BUksJCQkJMHg0Ci0jZGVmaW5lIFJYRklGT19XQVRFUk1BUksJCQkJMHg0Ci0KLS8qIGkuTVggREFJIFNTUCBJRCdzICovCi0jZGVmaW5lIElNWF9EQUlfU1NJMAkJCTAgLyogU1NJMSBGSUZPIDAgKi8KLSNkZWZpbmUgSU1YX0RBSV9TU0kxCQkJMSAvKiBTU0kxIEZJRk8gMSAqLwotI2RlZmluZSBJTVhfREFJX1NTSTIJCQkyIC8qIFNTSTIgRklGTyAwICovCi0jZGVmaW5lIElNWF9EQUlfU1NJMwkJCTMgLyogU1NJMiBGSUZPIDEgKi8KLQotLyogU1NJIGNsb2NrIHNvdXJjZXMgKi8KLSNkZWZpbmUgSU1YX1NTUF9TWVNfQ0xLCQkwCi0KLS8qIFNTSSBhdWRpbyBkaXZpZGVycyAqLwotI2RlZmluZSBJTVhfU1NJX1RYX0RJVl8yCQkJMAotI2RlZmluZSBJTVhfU1NJX1RYX0RJVl9QU1IJCQkxCi0jZGVmaW5lIElNWF9TU0lfVFhfRElWX1BNCQkJMgotI2RlZmluZSBJTVhfU1NJX1JYX0RJVl8yCQkJMwotI2RlZmluZSBJTVhfU1NJX1JYX0RJVl9QU1IJCQk0Ci0jZGVmaW5lIElNWF9TU0lfUlhfRElWX1BNCQkJNQotCi0KLS8qIFNTSSBEaXYgMiAqLwotI2RlZmluZSBJTVhfU1NJX0RJVl8yX09GRgkJKH5TU0lfU1RDQ1JfRElWMikKLSNkZWZpbmUgSU1YX1NTSV9ESVZfMl9PTgkJU1NJX1NUQ0NSX0RJVjIKLQotZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBpbXhfc3NpX3BjbV9kYWlbNF07Ci1leHRlcm4gaW50IGdldF9zc2lfY2xrKGludCBzc2ksIHN0cnVjdCBkZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBwdXRfc3NpX2NsayhpbnQgc3NpKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9waHljb3JlLWFjOTcuYyBiL3NvdW5kL3NvYy9pbXgvcGh5Y29yZS1hYzk3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzMDdkNQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9pbXgvcGh5Y29yZS1hYzk3LmMKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIHBoeWNvcmUtYWM5Ny5jICAtLSAgU29DIGF1ZGlvIGZvciBpbXhfcGh5Y29yZSBpbiBBQzk3IG1vZGUKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4IDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSAiLi4vY29kZWNzL3dtOTcxMi5oIgorI2luY2x1ZGUgImlteC1zc2kuaCIKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgaW14X3BoeWNvcmU7CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgaW14X3BoeWNvcmVfaGlmaV9vcHMgPSB7Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgaW14X3BoeWNvcmVfZGFpX2FjOTdbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJIaUZpIiwKKwkJLnN0cmVhbV9uYW1lCT0gIkhpRmkiLAorCQkuY29kZWNfZGFpCT0gJndtOTcxMl9kYWlbV005NzEyX0RBSV9BQzk3X0hJRkldLAorCQkub3BzCQk9ICZpbXhfcGh5Y29yZV9oaWZpX29wcywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgaW14X3BoeWNvcmUgPSB7CisJLm5hbWUJCT0gIlBoeUNPUkUtYXVkaW8iLAorCS5wbGF0Zm9ybQk9ICZpbXhfc29jX3BsYXRmb3JtLAorCS5kYWlfbGluawk9IGlteF9waHljb3JlX2RhaV9hYzk3LAorCS5udW1fbGlua3MJPSBBUlJBWV9TSVpFKGlteF9waHljb3JlX2RhaV9hYzk3KSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgaW14X3BoeWNvcmVfc25kX2RldmRhdGEgPSB7CisJLmNhcmQJCT0gJmlteF9waHljb3JlLAorCS5jb2RlY19kZXYJPSAmc29jX2NvZGVjX2Rldl93bTk3MTIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaW14X3BoeWNvcmVfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgaW14X3BoeWNvcmVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfcGNtMDQzKCkgJiYgIW1hY2hpbmVfaXNfcGNhMTAwKCkpCisJCS8qIHJldHVybiBoYXBweS4gV2UgbWlnaHQgcnVuIG9uIGEgdG90YWxseSBkaWZmZXJlbnQgbWFjaGluZSAqLworCQlyZXR1cm4gMDsKKworCWlteF9waHljb3JlX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIWlteF9waHljb3JlX3NuZF9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJaW14X3BoeWNvcmVfZGFpX2FjOTdbMF0uY3B1X2RhaSA9ICZpbXhfc3NpX3BjbV9kYWlbMF07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShpbXhfcGh5Y29yZV9zbmRfZGV2aWNlLCAmaW14X3BoeWNvcmVfc25kX2RldmRhdGEpOworCWlteF9waHljb3JlX3NuZF9kZXZkYXRhLmRldiA9ICZpbXhfcGh5Y29yZV9zbmRfZGV2aWNlLT5kZXY7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChpbXhfcGh5Y29yZV9zbmRfZGV2aWNlKTsKKworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJBU29DOiBQbGF0Zm9ybSBkZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGlteF9waHljb3JlX3NuZF9kZXZpY2UpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpbXhfcGh5Y29yZV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoaW14X3BoeWNvcmVfc25kX2RldmljZSk7Cit9CisKK2xhdGVfaW5pdGNhbGwoaW14X3BoeWNvcmVfaW5pdCk7Cittb2R1bGVfZXhpdChpbXhfcGh5Y29yZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyIDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQaHlDT1JFIEFMU0EgU29DIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvS2NvbmZpZyBiL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKaW5kZXggNjE5NTJhYS4uZjExOTYzYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvS2NvbmZpZworKysgYi9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCkBAIC02LDYgKzYsOSBAQAogCXRyaXN0YXRlCiAJc2VsZWN0IE9NQVBfTUNCU1AKIAorY29uZmlnIFNORF9PTUFQX1NPQ19NQ1BETQorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfT01BUF9TT0NfTjgxMAogCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgTm9raWEgTjgxMCIKIAlkZXBlbmRzIG9uIFNORF9PTUFQX1NPQyAmJiBNQUNIX05PS0lBX044MTAgJiYgSTJDCkBAIC05NCwxMiArOTcsMTQgQEAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlIE9NQVAzIFBhbmRvcmEuCiAKIGNvbmZpZyBTTkRfT01BUF9TT0NfT01BUDNfQkVBR0xFCi0JdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBPTUFQMyBCZWFnbGUiCi0JZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUgJiYgU05EX09NQVBfU09DICYmIE1BQ0hfT01BUDNfQkVBR0xFCisJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBPTUFQMyBCZWFnbGUgYW5kIERldmtpdDgwMDAiCisJZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUgJiYgU05EX09NQVBfU09DCisJZGVwZW5kcyBvbiAoTUFDSF9PTUFQM19CRUFHTEUgfHwgTUFDSF9ERVZLSVQ4MDAwKQogCXNlbGVjdCBTTkRfT01BUF9TT0NfTUNCU1AKIAlzZWxlY3QgU05EX1NPQ19UV0w0MDMwCiAJaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUgQmVhZ2xlYm9hcmQuCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZSBCZWFnbGVib2FyZCBvcgorCSAgdGhlIGNsb25lIERldmtpdDgwMDAuCiAKIGNvbmZpZyBTTkRfT01BUF9TT0NfWk9PTTIKIAl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIFpvb20yIgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvTWFrZWZpbGUgYi9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQppbmRleCAxOTI4M2U1Li4wYmMwMGNhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQpAQCAtMSw5ICsxLDExIEBACiAjIE9NQVAgUGxhdGZvcm0gU3VwcG9ydAogc25kLXNvYy1vbWFwLW9ianMgOj0gb21hcC1wY20ubwogc25kLXNvYy1vbWFwLW1jYnNwLW9ianMgOj0gb21hcC1tY2JzcC5vCitzbmQtc29jLW9tYXAtbWNwZG0tb2JqcyA6PSBvbWFwLW1jcGRtLm8gbWNwZG0ubwogCiBvYmotJChDT05GSUdfU05EX09NQVBfU09DKSArPSBzbmQtc29jLW9tYXAubwogb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19NQ0JTUCkgKz0gc25kLXNvYy1vbWFwLW1jYnNwLm8KK29iai0kKENPTkZJR19TTkRfT01BUF9TT0NfTUNQRE0pICs9IHNuZC1zb2Mtb21hcC1tY3BkbS5vCiAKICMgT01BUCBNYWNoaW5lIFN1cHBvcnQKIHNuZC1zb2MtbjgxMC1vYmpzIDo9IG44MTAubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvbWNwZG0uYyBiL3NvdW5kL3NvYy9vbWFwL21jcGRtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ4ZGY2YwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9vbWFwL21jcGRtLmMKQEAgLTAsMCArMSw0ODQgQEAKKy8qCisgKiBtY3BkbS5jICAtLSAgTWNQRE0gaW50ZXJmYWNlIGRyaXZlcgorICoKKyAqIEF1dGhvcjogSm9yZ2UgRWR1YXJkbyBDYW5kZWxhcmlhIDx4MDEwNzIwOUB0aS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCisjaW5jbHVkZSAibWNwZG0uaCIKKworc3RhdGljIHN0cnVjdCBvbWFwX21jcGRtICptY3BkbTsKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfbWNwZG1fd3JpdGUodTE2IHJlZywgdTMyIHZhbCkKK3sKKyAgICAgICBfX3Jhd193cml0ZWwodmFsLCBtY3BkbS0+aW9fYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9tYXBfbWNwZG1fcmVhZCh1MTYgcmVnKQoreworICAgICAgIHJldHVybiBfX3Jhd19yZWFkbChtY3BkbS0+aW9fYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfbWNwZG1fcmVnX2R1bXAodm9pZCkKK3sKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICIqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisgICAgICAgZGV2X2RiZyhtY3BkbS0+ZGV2LCAiSVJRU1RBVFVTX1JBVzogIDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX0lSUVNUQVRVU19SQVcpKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJJUlFTVEFUVVM6ICAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9JUlFTVEFUVVMpKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJJUlFFTkFCTEVfU0VUOiAgMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICBvbWFwX21jcGRtX3JlYWQoTUNQRE1fSVJRRU5BQkxFX1NFVCkpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIklSUUVOQUJMRV9DTFI6ICAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9JUlFFTkFCTEVfQ0xSKSk7CisgICAgICAgZGV2X2RiZyhtY3BkbS0+ZGV2LCAiSVJRV0FLRV9FTjogMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICBvbWFwX21jcGRtX3JlYWQoTUNQRE1fSVJRV0FLRV9FTikpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIkRNQUVOQUJMRV9TRVQ6IDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX0RNQUVOQUJMRV9TRVQpKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJETUFFTkFCTEVfQ0xSOiAgMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICBvbWFwX21jcGRtX3JlYWQoTUNQRE1fRE1BRU5BQkxFX0NMUikpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIkRNQVdBS0VFTjogIDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX0RNQVdBS0VFTikpOworICAgICAgIGRldl9kYmcobWNwZG0tPmRldiwgIkNUUkw6ICAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9DVFJMKSk7CisgICAgICAgZGV2X2RiZyhtY3BkbS0+ZGV2LCAiRE5fREFUQTogIDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZWFkKE1DUERNX0ROX0RBVEEpKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJVUF9EQVRBOiAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9VUF9EQVRBKSk7CisgICAgICAgZGV2X2RiZyhtY3BkbS0+ZGV2LCAiRklGT19DVFJMX0ROOiAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9GSUZPX0NUUkxfRE4pKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJGSUZPX0NUUkxfVVA6ICAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9GSUZPX0NUUkxfVVApKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICJETl9PRkZTRVQ6ICAweCUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9tYXBfbWNwZG1fcmVhZChNQ1BETV9ETl9PRkZTRVQpKTsKKyAgICAgICBkZXZfZGJnKG1jcGRtLT5kZXYsICIqKioqKioqKioqKioqKioqKioqKioqKlxuIik7Cit9CisKKy8qCisgKiBUYWtlcyB0aGUgTWNQRE0gbW9kdWxlIGluIGFuZCBvdXQgb2YgcmVzZXQgc3RhdGUuCisgKiBVcGxpbmsgYW5kIGRvd25saW5rIGNhbiBiZSByZXNldCBpbmRpdmlkdWFsbHkuCisgKi8KK3N0YXRpYyB2b2lkIG9tYXBfbWNwZG1fcmVzZXRfY2FwdHVyZShpbnQgcmVzZXQpCit7CisgICAgICAgaW50IGN0cmwgPSBvbWFwX21jcGRtX3JlYWQoTUNQRE1fQ1RSTCk7CisKKyAgICAgICBpZiAocmVzZXQpCisgICAgICAgICAgICAgICBjdHJsIHw9IFNXX1VQX1JTVDsKKyAgICAgICBlbHNlCisgICAgICAgICAgICAgICBjdHJsICY9IH5TV19VUF9SU1Q7CisKKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0NUUkwsIGN0cmwpOworfQorCitzdGF0aWMgdm9pZCBvbWFwX21jcGRtX3Jlc2V0X3BsYXliYWNrKGludCByZXNldCkKK3sKKyAgICAgICBpbnQgY3RybCA9IG9tYXBfbWNwZG1fcmVhZChNQ1BETV9DVFJMKTsKKworICAgICAgIGlmIChyZXNldCkKKyAgICAgICAgICAgICAgIGN0cmwgfD0gU1dfRE5fUlNUOworICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIGN0cmwgJj0gflNXX0ROX1JTVDsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgY3RybCk7Cit9CisKKy8qCisgKiBFbmFibGVzIHRoZSB0cmFuc2ZlciB0aHJvdWdoIHRoZSBQRE0gaW50ZXJmYWNlIHRvL2Zyb20gdGhlIFBob2VuaXgKKyAqIGNvZGVjIGJ5IGVuYWJsaW5nIHRoZSBjb3JyZXNwb25kaW5nIFVQIG9yIEROIGNoYW5uZWxzLgorICovCit2b2lkIG9tYXBfbWNwZG1fc3RhcnQoaW50IHN0cmVhbSkKK3sKKyAgICAgICBpbnQgY3RybCA9IG9tYXBfbWNwZG1fcmVhZChNQ1BETV9DVFJMKTsKKworICAgICAgIGlmIChzdHJlYW0pCisgICAgICAgICAgICAgICBjdHJsIHw9IG1jcGRtLT51cF9jaGFubmVsczsKKyAgICAgICBlbHNlCisgICAgICAgICAgICAgICBjdHJsIHw9IG1jcGRtLT5kbl9jaGFubmVsczsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgY3RybCk7Cit9CisKKy8qCisgKiBEaXNhYmxlcyB0aGUgdHJhbnNmZXIgdGhyb3VnaCB0aGUgUERNIGludGVyZmFjZSB0by9mcm9tIHRoZSBQaG9lbml4CisgKiBjb2RlYyBieSBkaXNhYmxpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVVAgb3IgRE4gY2hhbm5lbHMuCisgKi8KK3ZvaWQgb21hcF9tY3BkbV9zdG9wKGludCBzdHJlYW0pCit7CisgICAgICAgaW50IGN0cmwgPSBvbWFwX21jcGRtX3JlYWQoTUNQRE1fQ1RSTCk7CisKKyAgICAgICBpZiAoc3RyZWFtKQorICAgICAgICAgICAgICAgY3RybCAmPSB+bWNwZG0tPnVwX2NoYW5uZWxzOworICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIGN0cmwgJj0gfm1jcGRtLT5kbl9jaGFubmVsczsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgY3RybCk7Cit9CisKKy8qCisgKiBDb25maWd1cmVzIE1jUERNIHVwbGluayBmb3IgYXVkaW8gcmVjb3JkaW5nLgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBvbWFwX21jcGRtX3N0YXJ0LgorICovCitpbnQgb21hcF9tY3BkbV9jYXB0dXJlX29wZW4oc3RydWN0IG9tYXBfbWNwZG1fbGluayAqdXBsaW5rKQoreworICAgICAgIGludCBpcnFfbWFzayA9IDA7CisgICAgICAgaW50IGN0cmw7CisKKyAgICAgICBpZiAoIXVwbGluaykKKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgbWNwZG0tPnVwbGluayA9IHVwbGluazsKKworICAgICAgIC8qIEVuYWJsZSBpcnEgcmVxdWVzdCBnZW5lcmF0aW9uICovCisgICAgICAgaXJxX21hc2sgfD0gdXBsaW5rLT5pcnFfbWFzayAmIE1DUERNX1VQTElOS19JUlFfTUFTSzsKKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0lSUUVOQUJMRV9TRVQsIGlycV9tYXNrKTsKKworICAgICAgIC8qIENvbmZpZ3VyZSB1cGxpbmsgdGhyZXNob2xkICovCisgICAgICAgaWYgKHVwbGluay0+dGhyZXNob2xkID4gVVBfVEhSRVNfTUFYKQorICAgICAgICAgICAgICAgdXBsaW5rLT50aHJlc2hvbGQgPSBVUF9USFJFU19NQVg7CisKKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0ZJRk9fQ1RSTF9VUCwgdXBsaW5rLT50aHJlc2hvbGQpOworCisgICAgICAgLyogQ29uZmlndXJlIERNQSBjb250cm9sbGVyICovCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9ETUFFTkFCTEVfU0VULCBETUFfVVBfRU5BQkxFKTsKKworICAgICAgIC8qIFNldCBwZG0gb3V0IGZvcm1hdCAqLworICAgICAgIGN0cmwgPSBvbWFwX21jcGRtX3JlYWQoTUNQRE1fQ1RSTCk7CisgICAgICAgY3RybCAmPSB+UERNT1VURk9STUFUOworICAgICAgIGN0cmwgfD0gdXBsaW5rLT5mb3JtYXQgJiBQRE1PVVRGT1JNQVQ7CisKKyAgICAgICAvKiBVcGxpbmsgY2hhbm5lbHMgKi8KKyAgICAgICBtY3BkbS0+dXBfY2hhbm5lbHMgPSB1cGxpbmstPmNoYW5uZWxzICYgKFBETV9VUF9NQVNLIHwgUERNX1NUQVRVU19NQVNLKTsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgY3RybCk7CisKKyAgICAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIENvbmZpZ3VyZXMgTWNQRE0gZG93bmxpbmsgZm9yIGF1ZGlvIHBsYXliYWNrLgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBvbWFwX21jcGRtX3N0YXJ0LgorICovCitpbnQgb21hcF9tY3BkbV9wbGF5YmFja19vcGVuKHN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKmRvd25saW5rKQoreworICAgICAgIGludCBpcnFfbWFzayA9IDA7CisgICAgICAgaW50IGN0cmw7CisKKyAgICAgICBpZiAoIWRvd25saW5rKQorICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgICBtY3BkbS0+ZG93bmxpbmsgPSBkb3dubGluazsKKworICAgICAgIC8qIEVuYWJsZSBpcnEgcmVxdWVzdCBnZW5lcmF0aW9uICovCisgICAgICAgaXJxX21hc2sgfD0gZG93bmxpbmstPmlycV9tYXNrICYgTUNQRE1fRE9XTkxJTktfSVJRX01BU0s7CisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9JUlFFTkFCTEVfU0VULCBpcnFfbWFzayk7CisKKyAgICAgICAvKiBDb25maWd1cmUgdXBsaW5rIHRocmVzaG9sZCAqLworICAgICAgIGlmIChkb3dubGluay0+dGhyZXNob2xkID4gRE5fVEhSRVNfTUFYKQorICAgICAgICAgICAgICAgZG93bmxpbmstPnRocmVzaG9sZCA9IEROX1RIUkVTX01BWDsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fRklGT19DVFJMX0ROLCBkb3dubGluay0+dGhyZXNob2xkKTsKKworICAgICAgIC8qIEVuYWJsZSBETUEgcmVxdWVzdCBnZW5lcmF0aW9uICovCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9ETUFFTkFCTEVfU0VULCBETUFfRE5fRU5BQkxFKTsKKworICAgICAgIC8qIFNldCBwZG0gb3V0IGZvcm1hdCAqLworICAgICAgIGN0cmwgPSBvbWFwX21jcGRtX3JlYWQoTUNQRE1fQ1RSTCk7CisgICAgICAgY3RybCAmPSB+UERNT1VURk9STUFUOworICAgICAgIGN0cmwgfD0gZG93bmxpbmstPmZvcm1hdCAmIFBETU9VVEZPUk1BVDsKKworICAgICAgIC8qIERvd25saW5rIGNoYW5uZWxzICovCisgICAgICAgbWNwZG0tPmRuX2NoYW5uZWxzID0gZG93bmxpbmstPmNoYW5uZWxzICYgKFBETV9ETl9NQVNLIHwgUERNX0NNRF9NQVNLKTsKKworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgY3RybCk7CisKKyAgICAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIENsZWFucyBNY1BETSB1cGxpbmsgY29uZmlndXJhdGlvbi4KKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW0gaXMgY2xvc2VkLgorICovCitpbnQgb21hcF9tY3BkbV9jYXB0dXJlX2Nsb3NlKHN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKnVwbGluaykKK3sKKyAgICAgICBpbnQgaXJxX21hc2sgPSAwOworCisgICAgICAgaWYgKCF1cGxpbmspCisgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgIC8qIERpc2FibGUgaXJxIHJlcXVlc3QgZ2VuZXJhdGlvbiAqLworICAgICAgIGlycV9tYXNrIHw9IHVwbGluay0+aXJxX21hc2sgJiBNQ1BETV9VUExJTktfSVJRX01BU0s7CisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9JUlFFTkFCTEVfQ0xSLCBpcnFfbWFzayk7CisKKyAgICAgICAvKiBEaXNhYmxlIERNQSByZXF1ZXN0IGdlbmVyYXRpb24gKi8KKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0RNQUVOQUJMRV9DTFIsIERNQV9VUF9FTkFCTEUpOworCisgICAgICAgLyogQ2xlYXIgRG93bmxpbmsgY2hhbm5lbHMgKi8KKyAgICAgICBtY3BkbS0+dXBfY2hhbm5lbHMgPSAwOworCisgICAgICAgbWNwZG0tPnVwbGluayA9IE5VTEw7CisKKyAgICAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIENsZWFucyBNY1BETSBkb3dubGluayBjb25maWd1cmF0aW9uLgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbSBpcyBjbG9zZWQuCisgKi8KK2ludCBvbWFwX21jcGRtX3BsYXliYWNrX2Nsb3NlKHN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKmRvd25saW5rKQoreworICAgICAgIGludCBpcnFfbWFzayA9IDA7CisKKyAgICAgICBpZiAoIWRvd25saW5rKQorICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgICAvKiBEaXNhYmxlIGlycSByZXF1ZXN0IGdlbmVyYXRpb24gKi8KKyAgICAgICBpcnFfbWFzayB8PSBkb3dubGluay0+aXJxX21hc2sgJiBNQ1BETV9ET1dOTElOS19JUlFfTUFTSzsKKyAgICAgICBvbWFwX21jcGRtX3dyaXRlKE1DUERNX0lSUUVOQUJMRV9DTFIsIGlycV9tYXNrKTsKKworICAgICAgIC8qIERpc2FibGUgRE1BIHJlcXVlc3QgZ2VuZXJhdGlvbiAqLworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fRE1BRU5BQkxFX0NMUiwgRE1BX0ROX0VOQUJMRSk7CisKKyAgICAgICAvKiBjbGVhciBEb3dubGluayBjaGFubmVscyAqLworICAgICAgIG1jcGRtLT5kbl9jaGFubmVscyA9IDA7CisKKyAgICAgICBtY3BkbS0+ZG93bmxpbmsgPSBOVUxMOworCisgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBvbWFwX21jcGRtX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKyAgICAgICBzdHJ1Y3Qgb21hcF9tY3BkbSAqbWNwZG1faXJxID0gZGV2X2lkOworICAgICAgIGludCBpcnFfc3RhdHVzOworCisgICAgICAgaXJxX3N0YXR1cyA9IG9tYXBfbWNwZG1fcmVhZChNQ1BETV9JUlFTVEFUVVMpOworCisgICAgICAgLyogQWNrbm93bGVkZ2UgaXJxIGV2ZW50ICovCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9JUlFTVEFUVVMsIGlycV9zdGF0dXMpOworCisgICAgICAgaWYgKGlycSAmIE1DUERNX0ROX0lSUV9GVUxMKSB7CisgICAgICAgICAgICAgICBkZXZfZXJyKG1jcGRtX2lycS0+ZGV2LCAiRE4gRklGTyBlcnJvciAleFxuIiwgaXJxX3N0YXR1cyk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX3Jlc2V0X3BsYXliYWNrKDEpOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9wbGF5YmFja19vcGVuKG1jcGRtX2lycS0+ZG93bmxpbmspOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZXNldF9wbGF5YmFjaygwKTsKKyAgICAgICB9CisKKyAgICAgICBpZiAoaXJxICYgTUNQRE1fRE5fSVJRX0VNUFRZKSB7CisgICAgICAgICAgICAgICBkZXZfZXJyKG1jcGRtX2lycS0+ZGV2LCAiRE4gRklGTyBlcnJvciAleFxuIiwgaXJxX3N0YXR1cyk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX3Jlc2V0X3BsYXliYWNrKDEpOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9wbGF5YmFja19vcGVuKG1jcGRtX2lycS0+ZG93bmxpbmspOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZXNldF9wbGF5YmFjaygwKTsKKyAgICAgICB9CisKKyAgICAgICBpZiAoaXJxICYgTUNQRE1fRE5fSVJRKSB7CisgICAgICAgICAgICAgICBkZXZfZGJnKG1jcGRtX2lycS0+ZGV2LCAiRE4gd3JpdGUgcmVxdWVzdFxuIik7CisgICAgICAgfQorCisgICAgICAgaWYgKGlycSAmIE1DUERNX1VQX0lSUV9GVUxMKSB7CisgICAgICAgICAgICAgICBkZXZfZXJyKG1jcGRtX2lycS0+ZGV2LCAiVVAgRklGTyBlcnJvciAleFxuIiwgaXJxX3N0YXR1cyk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX3Jlc2V0X2NhcHR1cmUoMSk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX2NhcHR1cmVfb3BlbihtY3BkbV9pcnEtPnVwbGluayk7CisgICAgICAgICAgICAgICBvbWFwX21jcGRtX3Jlc2V0X2NhcHR1cmUoMCk7CisgICAgICAgfQorCisgICAgICAgaWYgKGlycSAmIE1DUERNX1VQX0lSUV9FTVBUWSkgeworICAgICAgICAgICAgICAgZGV2X2VycihtY3BkbV9pcnEtPmRldiwgIlVQIEZJRk8gZXJyb3IgJXhcbiIsIGlycV9zdGF0dXMpOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZXNldF9jYXB0dXJlKDEpOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9jYXB0dXJlX29wZW4obWNwZG1faXJxLT51cGxpbmspOworICAgICAgICAgICAgICAgb21hcF9tY3BkbV9yZXNldF9jYXB0dXJlKDApOworICAgICAgIH0KKworICAgICAgIGlmIChpcnEgJiBNQ1BETV9VUF9JUlEpIHsKKyAgICAgICAgICAgICAgIGRldl9kYmcobWNwZG1faXJxLT5kZXYsICJVUCB3cml0ZSByZXF1ZXN0XG4iKTsKKyAgICAgICB9CisKKyAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK2ludCBvbWFwX21jcGRtX3JlcXVlc3Qodm9pZCkKK3sKKyAgICAgICBpbnQgcmV0OworCisgICAgICAgY2xrX2VuYWJsZShtY3BkbS0+Y2xrKTsKKworICAgICAgIHNwaW5fbG9jaygmbWNwZG0tPmxvY2spOworCisgICAgICAgaWYgKCFtY3BkbS0+ZnJlZSkgeworICAgICAgICAgICAgICAgZGV2X2VycihtY3BkbS0+ZGV2LCAiTWNQRE0gaW50ZXJmYWNlIGlzIGluIHVzZVxuIik7CisgICAgICAgICAgICAgICBzcGluX3VubG9jaygmbWNwZG0tPmxvY2spOworICAgICAgICAgICAgICAgcmV0ID0gLUVCVVNZOworICAgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgfQorICAgICAgIG1jcGRtLT5mcmVlID0gMDsKKworICAgICAgIHNwaW5fdW5sb2NrKCZtY3BkbS0+bG9jayk7CisKKyAgICAgICAvKiBEaXNhYmxlIGxpbmVzIHdoaWxlIHJlcXVlc3QgaXMgb25nb2luZyAqLworICAgICAgIG9tYXBfbWNwZG1fd3JpdGUoTUNQRE1fQ1RSTCwgMHgwMCk7CisKKyAgICAgICByZXQgPSByZXF1ZXN0X2lycShtY3BkbS0+aXJxLCBvbWFwX21jcGRtX2lycV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICJNY1BETSIsICh2b2lkICopbWNwZG0pOworICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgIGRldl9lcnIobWNwZG0tPmRldiwgIlJlcXVlc3QgZm9yIE1jUERNIElSUSBmYWlsZWRcbiIpOworICAgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgfQorCisgICAgICAgcmV0dXJuIDA7CisKK2VycjoKKyAgICAgICBjbGtfZGlzYWJsZShtY3BkbS0+Y2xrKTsKKyAgICAgICByZXR1cm4gcmV0OworfQorCit2b2lkIG9tYXBfbWNwZG1fZnJlZSh2b2lkKQoreworICAgICAgIHNwaW5fbG9jaygmbWNwZG0tPmxvY2spOworICAgICAgIGlmIChtY3BkbS0+ZnJlZSkgeworICAgICAgICAgICAgICAgZGV2X2VycihtY3BkbS0+ZGV2LCAiTWNQRE0gaW50ZXJmYWNlIGlzIGFscmVhZHkgZnJlZVxuIik7CisgICAgICAgICAgICAgICBzcGluX3VubG9jaygmbWNwZG0tPmxvY2spOworICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgIH0KKyAgICAgICBtY3BkbS0+ZnJlZSA9IDE7CisgICAgICAgc3Bpbl91bmxvY2soJm1jcGRtLT5sb2NrKTsKKworICAgICAgIGNsa19kaXNhYmxlKG1jcGRtLT5jbGspOworCisgICAgICAgZnJlZV9pcnEobWNwZG0tPmlycSwgKHZvaWQgKiltY3BkbSk7Cit9CisKKy8qIEVuYWJsZS9kaXNhYmxlIERDIG9mZnNldCBjYW5jZWxhdGlvbiBmb3IgdGhlIGFuYWxvZworICogaGVhZHNldCBwYXRoIChQRE0gY2hhbm5lbHMgMSBhbmQgMikuCisgKi8KK2ludCBvbWFwX21jcGRtX3NldF9vZmZzZXQoaW50IG9mZnNldDEsIGludCBvZmZzZXQyKQoreworICAgICAgIGludCBvZmZzZXQ7CisKKyAgICAgICBpZiAoKG9mZnNldDEgPiBETl9PRlNUX01BWCkgfHwgKG9mZnNldDIgPiBETl9PRlNUX01BWCkpCisgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgIG9mZnNldCA9IChvZmZzZXQxIDw8IEROX09GU1RfUlgxKSB8IChvZmZzZXQyIDw8IEROX09GU1RfUlgyKTsKKworICAgICAgIC8qIG9mZnNldCBjYW5jZWxsYXRpb24gZm9yIGNoYW5uZWwgMSAqLworICAgICAgIGlmIChvZmZzZXQxKQorICAgICAgICAgICAgICAgb2Zmc2V0IHw9IEROX09GU1RfUlgxX0VOOworICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIG9mZnNldCAmPSB+RE5fT0ZTVF9SWDFfRU47CisKKyAgICAgICAvKiBvZmZzZXQgY2FuY2VsbGF0aW9uIGZvciBjaGFubmVsIDIgKi8KKyAgICAgICBpZiAob2Zmc2V0MikKKyAgICAgICAgICAgICAgIG9mZnNldCB8PSBETl9PRlNUX1JYMl9FTjsKKyAgICAgICBlbHNlCisgICAgICAgICAgICAgICBvZmZzZXQgJj0gfkROX09GU1RfUlgyX0VOOworCisgICAgICAgb21hcF9tY3BkbV93cml0ZShNQ1BETV9ETl9PRkZTRVQsIG9mZnNldCk7CisKKyAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgb21hcF9tY3BkbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworICAgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzOworICAgICAgIGludCByZXQgPSAwOworCisgICAgICAgbWNwZG0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9tY3BkbSksIEdGUF9LRVJORUwpOworICAgICAgIGlmICghbWNwZG0pIHsKKyAgICAgICAgICAgICAgIHJldCA9IC1FTk9NRU07CisgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgfQorCisgICAgICAgcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKyAgICAgICBpZiAocmVzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHJlc291cmNlXG4iKTsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyX3Jlc291cmNlOworICAgICAgIH0KKworICAgICAgIHNwaW5fbG9ja19pbml0KCZtY3BkbS0+bG9jayk7CisgICAgICAgbWNwZG0tPmZyZWUgPSAxOworICAgICAgIG1jcGRtLT5pb19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworICAgICAgIGlmICghbWNwZG0tPmlvX2Jhc2UpIHsKKyAgICAgICAgICAgICAgIHJldCA9IC1FTk9NRU07CisgICAgICAgICAgICAgICBnb3RvIGVycl9yZXNvdXJjZTsKKyAgICAgICB9CisKKyAgICAgICBtY3BkbS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKworICAgICAgIG1jcGRtLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJwZG1fY2siKTsKKyAgICAgICBpZiAoSVNfRVJSKG1jcGRtLT5jbGspKSB7CisgICAgICAgICAgICAgICByZXQgPSBQVFJfRVJSKG1jcGRtLT5jbGspOworICAgICAgICAgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBwZG1fY2s6ICVkXG4iLCByZXQpOworICAgICAgICAgICAgICAgZ290byBlcnJfY2xrOworICAgICAgIH0KKworICAgICAgIG1jcGRtLT5kZXYgPSAmcGRldi0+ZGV2OworICAgICAgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jcGRtKTsKKworICAgICAgIHJldHVybiAwOworCitlcnJfY2xrOgorICAgICAgIGlvdW5tYXAobWNwZG0tPmlvX2Jhc2UpOworZXJyX3Jlc291cmNlOgorICAgICAgIGtmcmVlKG1jcGRtKTsKK2V4aXQ6CisgICAgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgb21hcF9tY3BkbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKyAgICAgICBzdHJ1Y3Qgb21hcF9tY3BkbSAqbWNwZG1fcHRyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKyAgICAgICBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworICAgICAgIGNsa19wdXQobWNwZG1fcHRyLT5jbGspOworCisgICAgICAgaW91bm1hcChtY3BkbV9wdHItPmlvX2Jhc2UpOworCisgICAgICAgbWNwZG1fcHRyLT5jbGsgPSBOVUxMOworICAgICAgIG1jcGRtX3B0ci0+ZnJlZSA9IDA7CisgICAgICAgbWNwZG1fcHRyLT5kZXYgPSBOVUxMOworCisgICAgICAga2ZyZWUobWNwZG1fcHRyKTsKKworICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX21jcGRtX2RyaXZlciA9IHsKKyAgICAgICAucHJvYmUgPSBvbWFwX21jcGRtX3Byb2JlLAorICAgICAgIC5yZW1vdmUgPSBfX2RldmV4aXRfcChvbWFwX21jcGRtX3JlbW92ZSksCisgICAgICAgLmRyaXZlciA9IHsKKyAgICAgICAgICAgICAgIC5uYW1lID0gIm9tYXAtbWNwZG0iLAorICAgICAgIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb21hcF9tY3BkbV9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfbWNwZG1faW5pdCh2b2lkKQoreworICAgICAgIHJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXBfbWNwZG1fZHJpdmVyKTsKK30KK2FyY2hfaW5pdGNhbGwob21hcF9tY3BkbV9pbml0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL21jcGRtLmggYi9zb3VuZC9zb2Mvb21hcC9tY3BkbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYjMyNmUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvb21hcC9tY3BkbS5oCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogbWNwZG0uaCAtLSBEZWZpbmVzIGZvciBNY1BETSBkcml2ZXIKKyAqCisgKiBBdXRob3I6IEpvcmdlIEVkdWFyZG8gQ2FuZGVsYXJpYSA8eDAxMDcyMDlAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworLyogTWNQRE0gcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgTUNQRE1fUkVWSVNJT04gICAgICAgICAweDAwCisjZGVmaW5lIE1DUERNX1NZU0NPTkZJRyAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIE1DUERNX0lSUVNUQVRVU19SQVcgICAgMHgyNAorI2RlZmluZSBNQ1BETV9JUlFTVEFUVVMgICAgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBNQ1BETV9JUlFFTkFCTEVfU0VUICAgIDB4MkMKKyNkZWZpbmUgTUNQRE1fSVJRRU5BQkxFX0NMUiAgICAweDMwCisjZGVmaW5lIE1DUERNX0lSUVdBS0VfRU4gICAgICAgMHgzNAorI2RlZmluZSBNQ1BETV9ETUFFTkFCTEVfU0VUICAgIDB4MzgKKyNkZWZpbmUgTUNQRE1fRE1BRU5BQkxFX0NMUiAgICAweDNDCisjZGVmaW5lIE1DUERNX0RNQVdBS0VFTiAgICAgICAgICAgICAgICAweDQwCisjZGVmaW5lIE1DUERNX0NUUkwgICAgICAgICAgICAgMHg0NAorI2RlZmluZSBNQ1BETV9ETl9EQVRBICAgICAgICAgIDB4NDgKKyNkZWZpbmUgTUNQRE1fVVBfREFUQSAgICAgICAgICAweDRDCisjZGVmaW5lIE1DUERNX0ZJRk9fQ1RSTF9ETiAgICAgMHg1MAorI2RlZmluZSBNQ1BETV9GSUZPX0NUUkxfVVAgICAgIDB4NTQKKyNkZWZpbmUgTUNQRE1fRE5fT0ZGU0VUICAgICAgICAgICAgICAgIDB4NTgKKworLyoKKyAqIE1DUERNX0lSUSBiaXQgZmllbGRzCisgKiBJUlFTVEFUVVNfUkFXLCBJUlFTVEFUVVMsIElSUUVOQUJMRV9TRVQsIElSUUVOQUJMRV9DTFIKKyAqLworCisjZGVmaW5lIE1DUERNX0ROX0lSUSAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBNQ1BETV9ETl9JUlFfRU1QVFkgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgTUNQRE1fRE5fSVJRX0FMTVNUX0VNUFRZICAgICAgICgxIDw8IDIpCisjZGVmaW5lIE1DUERNX0ROX0lSUV9GVUxMICAgICAgICAgICAgICAoMSA8PCAzKQorCisjZGVmaW5lIE1DUERNX1VQX0lSUSAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBNQ1BETV9VUF9JUlFfRU1QVFkgICAgICAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgTUNQRE1fVVBfSVJRX0FMTVNUX0ZVTEwgICAgICAgICAgICAgICAgKDEgPDwgMTApCisjZGVmaW5lIE1DUERNX1VQX0lSUV9GVUxMICAgICAgICAgICAgICAoMSA8PCAxMSkKKworI2RlZmluZSBNQ1BETV9ET1dOTElOS19JUlFfTUFTSyAgICAgICAgICAgICAgICAweDAwRgorI2RlZmluZSBNQ1BETV9VUExJTktfSVJRX01BU0sgICAgICAgICAgMHhGMDAKKworLyoKKyAqIE1DUERNX0RNQUVOQUJMRSBiaXQgZmllbGRzCisgKi8KKworI2RlZmluZSBETUFfRE5fRU5BQkxFICAgICAgICAgIDB4MQorI2RlZmluZSBETUFfVVBfRU5BQkxFICAgICAgICAgIDB4MgorCisvKgorICogTUNQRE1fQ1RSTCBiaXQgZmllbGRzCisgKi8KKworI2RlZmluZSBQRE1fVVAxX0VOICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBQRE1fVVAyX0VOICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBQRE1fVVAzX0VOICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBQRE1fRE4xX0VOICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBQRE1fRE4yX0VOICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBQRE1fRE4zX0VOICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBQRE1fRE40X0VOICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBQRE1fRE41X0VOICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBQRE1PVVRGT1JNQVQgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBDTURfSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFNUQVRVU19JTlQgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFNXX1VQX1JTVCAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFNXX0ROX1JTVCAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFBETV9VUF9NQVNLICAgICAgICAgICAgMHgwMDcKKyNkZWZpbmUgUERNX0ROX01BU0sgICAgICAgICAgICAweDBGOAorI2RlZmluZSBQRE1fQ01EX01BU0sgICAgICAgICAgIDB4MjAwCisjZGVmaW5lIFBETV9TVEFUVVNfTUFTSyAgICAgICAgICAgICAgICAweDQwMAorCisKKyNkZWZpbmUgUERNT1VURk9STUFUX0xKVVNUICAgICAoMCA8PCA4KQorI2RlZmluZSBQRE1PVVRGT1JNQVRfUkpVU1QgICAgICgxIDw8IDgpCisKKy8qCisgKiBNQ1BETV9GSUZPX0NUUkwgYml0IGZpZWxkcworICovCisKKyNkZWZpbmUgVVBfVEhSRVNfTUFYICAgICAgICAgICAweEYKKyNkZWZpbmUgRE5fVEhSRVNfTUFYICAgICAgICAgICAweEYKKworLyoKKyAqIE1DUERNX0ROX09GRlNFVCBiaXQgZmllbGRzCisgKi8KKworI2RlZmluZSBETl9PRlNUX1JYMV9FTiAgICAgICAgIDB4MDAwMQorI2RlZmluZSBETl9PRlNUX1JYMl9FTiAgICAgICAgIDB4MDEwMAorCisjZGVmaW5lIEROX09GU1RfUlgxICAgICAgICAgICAgMQorI2RlZmluZSBETl9PRlNUX1JYMiAgICAgICAgICAgIDkKKyNkZWZpbmUgRE5fT0ZTVF9NQVggICAgICAgICAgICAweDFGCisKKyNkZWZpbmUgTUNQRE1fVVBMSU5LICAgICAgICAgICAxCisjZGVmaW5lIE1DUERNX0RPV05MSU5LICAgICAgICAgMgorCitzdHJ1Y3Qgb21hcF9tY3BkbV9saW5rIHsKKyAgICAgICBpbnQgaXJxX21hc2s7CisgICAgICAgaW50IHRocmVzaG9sZDsKKyAgICAgICBpbnQgZm9ybWF0OworICAgICAgIGludCBjaGFubmVsczsKK307CisKK3N0cnVjdCBvbWFwX21jcGRtX3BsYXRmb3JtX2RhdGEgeworICAgICAgIHVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOworICAgICAgIHUxNiBpcnE7Cit9OworCitzdHJ1Y3Qgb21hcF9tY3BkbSB7CisgICAgICAgc3RydWN0IGRldmljZSAqZGV2OworICAgICAgIHVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOworICAgICAgIHZvaWQgX19pb21lbSAqaW9fYmFzZTsKKyAgICAgICB1OCBmcmVlOworICAgICAgIGludCBpcnE7CisKKyAgICAgICBzcGlubG9ja190IGxvY2s7CisgICAgICAgc3RydWN0IG9tYXBfbWNwZG1fcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisgICAgICAgc3RydWN0IGNsayAqY2xrOworICAgICAgIHN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKmRvd25saW5rOworICAgICAgIHN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKnVwbGluazsKKyAgICAgICBzdHJ1Y3QgY29tcGxldGlvbiBpcnFfY29tcGxldGlvbjsKKworICAgICAgIGludCBkbl9jaGFubmVsczsKKyAgICAgICBpbnQgdXBfY2hhbm5lbHM7Cit9OworCitleHRlcm4gdm9pZCBvbWFwX21jcGRtX3N0YXJ0KGludCBzdHJlYW0pOworZXh0ZXJuIHZvaWQgb21hcF9tY3BkbV9zdG9wKGludCBzdHJlYW0pOworZXh0ZXJuIGludCBvbWFwX21jcGRtX2NhcHR1cmVfb3BlbihzdHJ1Y3Qgb21hcF9tY3BkbV9saW5rICp1cGxpbmspOworZXh0ZXJuIGludCBvbWFwX21jcGRtX3BsYXliYWNrX29wZW4oc3RydWN0IG9tYXBfbWNwZG1fbGluayAqZG93bmxpbmspOworZXh0ZXJuIGludCBvbWFwX21jcGRtX2NhcHR1cmVfY2xvc2Uoc3RydWN0IG9tYXBfbWNwZG1fbGluayAqdXBsaW5rKTsKK2V4dGVybiBpbnQgb21hcF9tY3BkbV9wbGF5YmFja19jbG9zZShzdHJ1Y3Qgb21hcF9tY3BkbV9saW5rICpkb3dubGluayk7CitleHRlcm4gaW50IG9tYXBfbWNwZG1fcmVxdWVzdCh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXBfbWNwZG1fZnJlZSh2b2lkKTsKK2V4dGVybiBpbnQgb21hcF9tY3BkbV9zZXRfb2Zmc2V0KGludCBvZmZzZXQxLCBpbnQgb2Zmc2V0Mik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKaW5kZXggNmJiYmQyYS4uZDI5NzI1NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwpAQCAtMjg3LDYgKzI4Nyw4IEBACiAJb21hcF9tY2JzcF9kYWlfZG1hX3BhcmFtc1tpZF1bc3Vic3RyZWFtLT5zdHJlYW1dLmRtYV9yZXEgPSBkbWE7CiAJb21hcF9tY2JzcF9kYWlfZG1hX3BhcmFtc1tpZF1bc3Vic3RyZWFtLT5zdHJlYW1dLnBvcnRfYWRkciA9IHBvcnQ7CiAJb21hcF9tY2JzcF9kYWlfZG1hX3BhcmFtc1tpZF1bc3Vic3RyZWFtLT5zdHJlYW1dLnN5bmNfbW9kZSA9IHN5bmNfbW9kZTsKKwlvbWFwX21jYnNwX2RhaV9kbWFfcGFyYW1zW2lkXVtzdWJzdHJlYW0tPnN0cmVhbV0uZGF0YV90eXBlID0KKwkJCQkJCQlPTUFQX0RNQV9EQVRBX1RZUEVfUzE2OwogCWNwdV9kYWktPmRtYV9kYXRhID0gJm9tYXBfbWNic3BfZGFpX2RtYV9wYXJhbXNbaWRdW3N1YnN0cmVhbS0+c3RyZWFtXTsKIAogCWlmIChtY2JzcF9kYXRhLT5jb25maWd1cmVkKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jcGRtLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jcGRtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVmMTllNAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNwZG0uYwpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIG9tYXAtbWNwZG0uYyAgLS0gIE9NQVAgQUxTQSBTb0MgREFJIGRyaXZlciB1c2luZyBNY1BETSBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzCisgKgorICogQXV0aG9yOiBNaXNhZWwgTG9wZXogQ3J1eiA8eDAwNTI3MjlAdGkuY29tPgorICogQ29udGFjdDogSm9yZ2UgRWR1YXJkbyBDYW5kZWxhcmlhIDx4MDEwNzIwOUB0aS5jb20+CisgKiAgICAgICAgICBNYXJnYXJpdGEgT2xheWEgPG1hZ2kub2xheWFAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgPHBsYXQvY29udHJvbC5oPgorI2luY2x1ZGUgPHBsYXQvZG1hLmg+CisjaW5jbHVkZSA8cGxhdC9tY2JzcC5oPgorI2luY2x1ZGUgIm1jcGRtLmgiCisjaW5jbHVkZSAib21hcC1tY3BkbS5oIgorI2luY2x1ZGUgIm9tYXAtcGNtLmgiCisKK3N0cnVjdCBvbWFwX21jcGRtX2RhdGEgeworCXN0cnVjdCBvbWFwX21jcGRtX2xpbmsgKmxpbmtzOworCWludCBhY3RpdmU7Cit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbWNwZG1fbGluayBvbWFwX21jcGRtX2xpbmtzW10gPSB7CisJLyogZG93bmxpbmsgKi8KKwl7CisJCS5pcnFfbWFzayA9IE1DUERNX0ROX0lSUV9FTVBUWSB8IE1DUERNX0ROX0lSUV9GVUxMLAorCQkudGhyZXNob2xkID0gMSwKKwkJLmZvcm1hdCA9IFBETU9VVEZPUk1BVF9MSlVTVCwKKwl9LAorCS8qIHVwbGluayAqLworCXsKKwkJLmlycV9tYXNrID0gTUNQRE1fVVBfSVJRX0VNUFRZIHwgTUNQRE1fVVBfSVJRX0ZVTEwsCisJCS50aHJlc2hvbGQgPSAxLAorCQkuZm9ybWF0ID0gUERNT1VURk9STUFUX0xKVVNULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbWNwZG1fZGF0YSBtY3BkbV9kYXRhID0geworCS5saW5rcyA9IG9tYXBfbWNwZG1fbGlua3MsCisJLmFjdGl2ZSA9IDAsCit9OworCisvKgorICogU3RyZWFtIERNQSBwYXJhbWV0ZXJzCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9wY21fZG1hX2RhdGEgb21hcF9tY3BkbV9kYWlfZG1hX3BhcmFtc1tdID0geworCXsKKwkJLm5hbWUgPSAiQXVkaW8gcGxheWJhY2siLAorCQkuZG1hX3JlcSA9IE9NQVA0NFhYX0RNQV9NQ1BETV9ETCwKKwkJLmRhdGFfdHlwZSA9IE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIsCisJCS5zeW5jX21vZGUgPSBPTUFQX0RNQV9TWU5DX1BBQ0tFVCwKKwkJLnBhY2tldF9zaXplID0gMTYsCisJCS5wb3J0X2FkZHIgPSBPTUFQNDRYWF9NQ1BETV9MM19CQVNFICsgTUNQRE1fRE5fREFUQSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiQXVkaW8gY2FwdHVyZSIsCisJCS5kbWFfcmVxID0gT01BUDQ0WFhfRE1BX01DUERNX1VQLAorCQkuZGF0YV90eXBlID0gT01BUF9ETUFfREFUQV9UWVBFX1MzMiwKKwkJLnN5bmNfbW9kZSA9IE9NQVBfRE1BX1NZTkNfUEFDS0VULAorCQkucGFja2V0X3NpemUgPSAxNiwKKwkJLnBvcnRfYWRkciA9IE9NQVA0NFhYX01DUERNX0wzX0JBU0UgKyBNQ1BETV9VUF9EQVRBLAorCX0sCit9OworCitzdGF0aWMgaW50IG9tYXBfbWNwZG1fZGFpX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJaW50IGVyciA9IDA7CisKKwlpZiAoIWNwdV9kYWktPmFjdGl2ZSkKKwkJZXJyID0gb21hcF9tY3BkbV9yZXF1ZXN0KCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBvbWFwX21jcGRtX2RhaV9zaHV0ZG93bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCisJaWYgKCFjcHVfZGFpLT5hY3RpdmUpCisJCW9tYXBfbWNwZG1fZnJlZSgpOworfQorCitzdGF0aWMgaW50IG9tYXBfbWNwZG1fZGFpX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQsCisJCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJc3RydWN0IG9tYXBfbWNwZG1fZGF0YSAqbWNwZG1fcHJpdiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwlpbnQgc3RyZWFtID0gc3Vic3RyZWFtLT5zdHJlYW07CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlpZiAoIW1jcGRtX3ByaXYtPmFjdGl2ZSsrKQorCQkJb21hcF9tY3BkbV9zdGFydChzdHJlYW0pOworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlpZiAoIS0tbWNwZG1fcHJpdi0+YWN0aXZlKQorCQkJb21hcF9tY3BkbV9zdG9wKHN0cmVhbSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvbWFwX21jcGRtX2RhaV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCSAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJc3RydWN0IG9tYXBfbWNwZG1fZGF0YSAqbWNwZG1fcHJpdiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgb21hcF9tY3BkbV9saW5rICptY3BkbV9saW5rcyA9IG1jcGRtX3ByaXYtPmxpbmtzOworCWludCBzdHJlYW0gPSBzdWJzdHJlYW0tPnN0cmVhbTsKKwlpbnQgY2hhbm5lbHMsIGVyciwgbGlua19tYXNrID0gMDsKKworCWNwdV9kYWktPmRtYV9kYXRhID0gJm9tYXBfbWNwZG1fZGFpX2RtYV9wYXJhbXNbc3RyZWFtXTsKKworCWNoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7CisJc3dpdGNoIChjaGFubmVscykgeworCWNhc2UgNDoKKwkJaWYgKHN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCisJCQkvKiB1cCB0byAyIGNoYW5uZWxzIGZvciBjYXB0dXJlICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbGlua19tYXNrIHw9IDEgPDwgMzsKKwljYXNlIDM6CisJCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKQorCQkJLyogdXAgdG8gMiBjaGFubmVscyBmb3IgY2FwdHVyZSAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCWxpbmtfbWFzayB8PSAxIDw8IDI7CisJY2FzZSAyOgorCQlsaW5rX21hc2sgfD0gMSA8PCAxOworCWNhc2UgMToKKwkJbGlua19tYXNrIHw9IDEgPDwgMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogdW5zdXBwb3J0ZWQgbnVtYmVyIG9mIGNoYW5uZWxzICovCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQltY3BkbV9saW5rc1tzdHJlYW1dLmNoYW5uZWxzID0gbGlua19tYXNrIDw8IDM7CisJCWVyciA9IG9tYXBfbWNwZG1fcGxheWJhY2tfb3BlbigmbWNwZG1fbGlua3Nbc3RyZWFtXSk7CisJfSBlbHNlIHsKKwkJbWNwZG1fbGlua3Nbc3RyZWFtXS5jaGFubmVscyA9IGxpbmtfbWFzayA8PCAwOworCQllcnIgPSBvbWFwX21jcGRtX2NhcHR1cmVfb3BlbigmbWNwZG1fbGlua3Nbc3RyZWFtXSk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvbWFwX21jcGRtX2RhaV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCXN0cnVjdCBvbWFwX21jcGRtX2RhdGEgKm1jcGRtX3ByaXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG9tYXBfbWNwZG1fbGluayAqbWNwZG1fbGlua3MgPSBtY3BkbV9wcml2LT5saW5rczsKKwlpbnQgc3RyZWFtID0gc3Vic3RyZWFtLT5zdHJlYW07CisJaW50IGVycjsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSAgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJZXJyID0gb21hcF9tY3BkbV9wbGF5YmFja19jbG9zZSgmbWNwZG1fbGlua3Nbc3RyZWFtXSk7CisJZWxzZQorCQllcnIgPSBvbWFwX21jcGRtX2NhcHR1cmVfY2xvc2UoJm1jcGRtX2xpbmtzW3N0cmVhbV0pOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgb21hcF9tY3BkbV9kYWlfb3BzID0geworCS5zdGFydHVwCT0gb21hcF9tY3BkbV9kYWlfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBvbWFwX21jcGRtX2RhaV9zaHV0ZG93biwKKwkudHJpZ2dlcgk9IG9tYXBfbWNwZG1fZGFpX3RyaWdnZXIsCisJLmh3X3BhcmFtcwk9IG9tYXBfbWNwZG1fZGFpX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IG9tYXBfbWNwZG1fZGFpX2h3X2ZyZWUsCit9OworCisjZGVmaW5lIE9NQVBfTUNQRE1fUkFURVMJKFNORFJWX1BDTV9SQVRFXzg4MjAwIHwgU05EUlZfUENNX1JBVEVfOTYwMDApCisjZGVmaW5lIE9NQVBfTUNQRE1fRk9STUFUUwkoU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCisKK3N0cnVjdCBzbmRfc29jX2RhaSBvbWFwX21jcGRtX2RhaSA9IHsKKwkubmFtZSA9ICJvbWFwLW1jcGRtIiwKKwkuaWQgPSAtMSwKKwkucGxheWJhY2sgPSB7CisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gNCwKKwkJLnJhdGVzID0gT01BUF9NQ1BETV9SQVRFUywKKwkJLmZvcm1hdHMgPSBPTUFQX01DUERNX0ZPUk1BVFMsCisJfSwKKwkuY2FwdHVyZSA9IHsKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBPTUFQX01DUERNX1JBVEVTLAorCQkuZm9ybWF0cyA9IE9NQVBfTUNQRE1fRk9STUFUUywKKwl9LAorCS5vcHMgPSAmb21hcF9tY3BkbV9kYWlfb3BzLAorCS5wcml2YXRlX2RhdGEgPSAmbWNwZG1fZGF0YSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX21jcGRtX2RhaSk7CisKK3N0YXRpYyBpbnQgX19pbml0IHNuZF9vbWFwX21jcGRtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWkoJm9tYXBfbWNwZG1fZGFpKTsKK30KK21vZHVsZV9pbml0KHNuZF9vbWFwX21jcGRtX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgc25kX29tYXBfbWNwZG1fZXhpdCh2b2lkKQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJm9tYXBfbWNwZG1fZGFpKTsKK30KK21vZHVsZV9leGl0KHNuZF9vbWFwX21jcGRtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNaXNhZWwgTG9wZXogQ3J1eiA8eDAwNTI3MjlAdGkuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJPTUFQIFBETSBTb0MgSW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jcGRtLmggYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jcGRtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNiODBkNQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNwZG0uaApAQCAtMCwwICsxLDI5IEBACisvKgorICogb21hcC1tY3BkbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzCisgKgorICogQ29udGFjdDogTWlzYWVsIExvcGV6IENydXogPHgwMDUyNzI5QHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19PTUFQX01DUERNX0hfXworI2RlZmluZSBfX09NQVBfTUNQRE1fSF9fCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgb21hcF9tY3BkbV9kYWk7CisKKyNlbmRpZgkvKiBFbmQgb2YgX19PTUFQX01DUERNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKaW5kZXggOWRiMjc3MC4uODI1ZGIzOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCkBAIC0zNyw3ICszNyw4IEBACiAJCQkJICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CiAJCQkJICBTTkRSVl9QQ01fSU5GT19QQVVTRSB8CiAJCQkJICBTTkRSVl9QQ01fSU5GT19SRVNVTUUsCi0JLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQkJCSAgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCiAJLnBlcmlvZF9ieXRlc19taW4JPSAzMiwKIAkucGVyaW9kX2J5dGVzX21heAk9IDY0ICogMTAyNCwKIAkucGVyaW9kc19taW4JCT0gMiwKQEAgLTE0OSw2ICsxNTAsNyBAQAogCXN0cnVjdCBvbWFwX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgb21hcF9wY21fZG1hX2RhdGEgKmRtYV9kYXRhID0gcHJ0ZC0+ZG1hX2RhdGE7CiAJc3RydWN0IG9tYXBfZG1hX2NoYW5uZWxfcGFyYW1zIGRtYV9wYXJhbXM7CisJaW50IGJ5dGVzOwogCiAJLyogcmV0dXJuIGlmIHRoaXMgaXMgYSBidWZmZXJsZXNzIHRyYW5zZmVyIGUuZy4KIAkgKiBjb2RlYyA8LS0+IEJUIGNvZGVjIG9yIEdTTSBtb2RlbSAtLSBsZyBGSVhNRSAqLwpAQCAtMTU2LDExICsxNTgsNyBAQAogCQlyZXR1cm4gMDsKIAogCW1lbXNldCgmZG1hX3BhcmFtcywgMCwgc2l6ZW9mKGRtYV9wYXJhbXMpKTsKLQkvKgotCSAqIE5vdGU6IFJlZ2FyZGxlc3Mgb2YgaW50ZXJmYWNlIGRhdGEgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgT01BUCBNY0JTUAotCSAqIG9yIEVBQyBibG9ja3MsIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGlzIGFsd2F5cyBmaXhlZCAxNi1iaXQvc2FtcGxlCi0JICovCi0JZG1hX3BhcmFtcy5kYXRhX3R5cGUJCQk9IE9NQVBfRE1BX0RBVEFfVFlQRV9TMTY7CisJZG1hX3BhcmFtcy5kYXRhX3R5cGUJCQk9IGRtYV9kYXRhLT5kYXRhX3R5cGU7CiAJZG1hX3BhcmFtcy50cmlnZ2VyCQkJPSBkbWFfZGF0YS0+ZG1hX3JlcTsKIAlkbWFfcGFyYW1zLnN5bmNfbW9kZQkJCT0gZG1hX2RhdGEtPnN5bmNfbW9kZTsKIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewpAQCAtMTcwLDYgKzE2OCw3IEBACiAJCWRtYV9wYXJhbXMuc3JjX3N0YXJ0CQk9IHJ1bnRpbWUtPmRtYV9hZGRyOwogCQlkbWFfcGFyYW1zLmRzdF9zdGFydAkJPSBkbWFfZGF0YS0+cG9ydF9hZGRyOwogCQlkbWFfcGFyYW1zLmRzdF9wb3J0CQk9IE9NQVBfRE1BX1BPUlRfTVBVSTsKKwkJZG1hX3BhcmFtcy5kc3RfZmkJCT0gZG1hX2RhdGEtPnBhY2tldF9zaXplOwogCX0gZWxzZSB7CiAJCWRtYV9wYXJhbXMuc3JjX2Ftb2RlCQk9IE9NQVBfRE1BX0FNT0RFX0NPTlNUQU5UOwogCQlkbWFfcGFyYW1zLmRzdF9hbW9kZQkJPSBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQzsKQEAgLTE3Nyw2ICsxNzYsNyBAQAogCQlkbWFfcGFyYW1zLnNyY19zdGFydAkJPSBkbWFfZGF0YS0+cG9ydF9hZGRyOwogCQlkbWFfcGFyYW1zLmRzdF9zdGFydAkJPSBydW50aW1lLT5kbWFfYWRkcjsKIAkJZG1hX3BhcmFtcy5zcmNfcG9ydAkJPSBPTUFQX0RNQV9QT1JUX01QVUk7CisJCWRtYV9wYXJhbXMuc3JjX2ZpCQk9IGRtYV9kYXRhLT5wYWNrZXRfc2l6ZTsKIAl9CiAJLyoKIAkgKiBTZXQgRE1BIHRyYW5zZmVyIGZyYW1lIHNpemUgZXF1YWwgdG8gQUxTQSBwZXJpb2Qgc2l6ZSBhbmQgZnJhbWUKQEAgLTE4NCw3ICsxODQsOCBAQAogCSAqIHdlIGNhbiB0cmFuc2ZlciB0aGUgd2hvbGUgQUxTQSBidWZmZXIgd2l0aCBzaW5nbGUgRE1BIHRyYW5zZmVyIGJ1dAogCSAqIHN0aWxsIGNhbiBnZXQgYW4gaW50ZXJydXB0IGF0IGVhY2ggcGVyaW9kIGJvdW5hcnkKIAkgKi8KLQlkbWFfcGFyYW1zLmVsZW1fY291bnQJPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKSAvIDI7CisJYnl0ZXMgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKKwlkbWFfcGFyYW1zLmVsZW1fY291bnQJPSBieXRlcyA+PiBkbWFfZGF0YS0+ZGF0YV90eXBlOwogCWRtYV9wYXJhbXMuZnJhbWVfY291bnQJPSBydW50aW1lLT5wZXJpb2RzOwogCW9tYXBfc2V0X2RtYV9wYXJhbXMocHJ0ZC0+ZG1hX2NoLCAmZG1hX3BhcmFtcyk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmggYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5oCmluZGV4IDM4YTgyMWQuLmIxOTk3NWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmgKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1wY20uaApAQCAtMjksOCArMjksMTAgQEAKIAljaGFyCQkqbmFtZTsJCS8qIHN0cmVhbSBpZGVudGlmaWVyICovCiAJaW50CQlkbWFfcmVxOwkvKiBETUEgcmVxdWVzdCBsaW5lICovCiAJdW5zaWduZWQgbG9uZwlwb3J0X2FkZHI7CS8qIHRyYW5zbWl0L3JlY2VpdmUgcmVnaXN0ZXIgKi8KLQlpbnQJCXN5bmNfbW9kZTsJLyogRE1BIHN5bmMgbW9kZSAqLwogCXZvaWQgKCpzZXRfdGhyZXNob2xkKShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CisJaW50CQlkYXRhX3R5cGU7CS8qIGRhdGEgdHlwZSA4LDE2LDMyICovCisJaW50CQlzeW5jX21vZGU7CS8qIERNQSBzeW5jIG1vZGUgKi8KKwlpbnQJCXBhY2tldF9zaXplOwkvKiBwYWNrZXQgc2l6ZSBvbmx5IGluIFBBQ0tFVCBtb2RlICovCiB9OwogCiBleHRlcm4gc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gb21hcF9zb2NfcGxhdGZvcm07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwM2JlYWdsZS5jIGIvc291bmQvc29jL29tYXAvb21hcDNiZWFnbGUuYwppbmRleCBkODhhZDVjLi4yNDBlMDk3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwM2JlYWdsZS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzYmVhZ2xlLmMKQEAgLTExNywxMSArMTE3LDExIEBACiB7CiAJaW50IHJldDsKIAotCWlmICghbWFjaGluZV9pc19vbWFwM19iZWFnbGUoKSkgewotCQlwcl9kZWJ1ZygiTm90IE9NQVAzIEJlYWdsZSFcbiIpOworCWlmICghKG1hY2hpbmVfaXNfb21hcDNfYmVhZ2xlKCkgfHwgbWFjaGluZV9pc19kZXZraXQ4MDAwKCkpKSB7CisJCXByX2RlYnVnKCJOb3QgT01BUDMgQmVhZ2xlIG9yIERldmtpdDgwMDAhXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCXByX2luZm8oIk9NQVAzIEJlYWdsZSBTb0MgaW5pdFxuIik7CisJcHJfaW5mbygiT01BUDMgQmVhZ2xlL0RldmtpdDgwMDAgU29DIGluaXRcbiIpOwogCiAJb21hcDNiZWFnbGVfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOwogCWlmICghb21hcDNiZWFnbGVfc25kX2RldmljZSkgewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcDNwYW5kb3JhLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYwppbmRleCA2ODk4MGMxLi5kZTEwZjc2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtNDAsNiArNDEsOCBAQAogCiAjZGVmaW5lIFBSRUZJWCAiQVNvQyBvbWFwM3BhbmRvcmE6ICIKIAorc3RhdGljIHN0cnVjdCByZWd1bGF0b3IgKm9tYXAzcGFuZG9yYV9kYWNfcmVnOworCiBzdGF0aWMgaW50IG9tYXAzcGFuZG9yYV9jbW5faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLCB1bnNpZ25lZCBpbnQgZm10KQogewpAQCAtMTA2LDE3ICsxMDksMzMgQEAKIAkJCQkJICBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKIH0KIAorc3RhdGljIGludCBvbWFwM3BhbmRvcmFfZGFjX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmssIGludCBldmVudCkKK3sKKwkvKgorCSAqIFRoZSBQQ00xNzczIERBQyBkYXRhc2hlZXQgcmVxdWlyZXMgMW1zIGRlbGF5IGJldHdlZW4gc3dpdGNoaW5nCisJICogVkNDIHBvd2VyIG9uL29mZiBhbmQgL1BEIHBpbiBoaWdoL2xvdworCSAqLworCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKSB7CisJCXJlZ3VsYXRvcl9lbmFibGUob21hcDNwYW5kb3JhX2RhY19yZWcpOworCQltZGVsYXkoMSk7CisJCWdwaW9fc2V0X3ZhbHVlKE9NQVAzX1BBTkRPUkFfREFDX1BPV0VSX0dQSU8sIDEpOworCX0gZWxzZSB7CisJCWdwaW9fc2V0X3ZhbHVlKE9NQVAzX1BBTkRPUkFfREFDX1BPV0VSX0dQSU8sIDApOworCQltZGVsYXkoMSk7CisJCXJlZ3VsYXRvcl9kaXNhYmxlKG9tYXAzcGFuZG9yYV9kYWNfcmVnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBvbWFwM3BhbmRvcmFfaHBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJc3RydWN0IHNuZF9rY29udHJvbCAqaywgaW50IGV2ZW50KQogewotCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKSB7Ci0JCWdwaW9fc2V0X3ZhbHVlKE9NQVAzX1BBTkRPUkFfREFDX1BPV0VSX0dQSU8sIDEpOworCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKQogCQlncGlvX3NldF92YWx1ZShPTUFQM19QQU5ET1JBX0FNUF9QT1dFUl9HUElPLCAxKTsKLQl9IGVsc2UgeworCWVsc2UKIAkJZ3Bpb19zZXRfdmFsdWUoT01BUDNfUEFORE9SQV9BTVBfUE9XRVJfR1BJTywgMCk7Ci0JCW1kZWxheSgxKTsKLQkJZ3Bpb19zZXRfdmFsdWUoT01BUDNfUEFORE9SQV9EQUNfUE9XRVJfR1BJTywgMCk7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzAsNyArMTQ5LDkgQEAKICAqICB8UHwgPC0tLSBUV0w0MDMwIDwtLS0tLS0tLS0gTGluZSBJbiBhbmQgTUlDcwogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgb21hcDNwYW5kb3JhX291dF9kYXBtX3dpZGdldHNbXSA9IHsKLQlTTkRfU09DX0RBUE1fREFDKCJQQ00gREFDIiwgIkhpRmkgUGxheWJhY2siLCBTTkRfU09DX05PUE0sIDAsIDApLAorCVNORF9TT0NfREFQTV9EQUNfRSgiUENNIERBQyIsICJIaUZpIFBsYXliYWNrIiwgU05EX1NPQ19OT1BNLAorCQkJICAgMCwgMCwgb21hcDNwYW5kb3JhX2RhY19ldmVudCwKKwkJCSAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKIAlTTkRfU09DX0RBUE1fUEdBX0UoIkhlYWRwaG9uZSBBbXBsaWZpZXIiLCBTTkRfU09DX05PUE0sCiAJCQkgICAwLCAwLCBOVUxMLCAwLCBvbWFwM3BhbmRvcmFfaHBfZXZlbnQsCiAJCQkgICBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCkBAIC0zMDYsOCArMzI3LDE4IEBACiAJCWdvdG8gZmFpbDI7CiAJfQogCisJb21hcDNwYW5kb3JhX2RhY19yZWcgPSByZWd1bGF0b3JfZ2V0KCZvbWFwM3BhbmRvcmFfc25kX2RldmljZS0+ZGV2LCAidmNjIik7CisJaWYgKElTX0VSUihvbWFwM3BhbmRvcmFfZGFjX3JlZykpIHsKKwkJcHJfZXJyKFBSRUZJWCAiRmFpbGVkIHRvIGdldCBEQUMgcmVndWxhdG9yIGZyb20gJXM6ICVsZFxuIiwKKwkJCWRldl9uYW1lKCZvbWFwM3BhbmRvcmFfc25kX2RldmljZS0+ZGV2KSwKKwkJCVBUUl9FUlIob21hcDNwYW5kb3JhX2RhY19yZWcpKTsKKwkJZ290byBmYWlsMzsKKwl9CisKIAlyZXR1cm4gMDsKIAorZmFpbDM6CisJcGxhdGZvcm1fZGV2aWNlX2RlbChvbWFwM3BhbmRvcmFfc25kX2RldmljZSk7CiBmYWlsMjoKIAlwbGF0Zm9ybV9kZXZpY2VfcHV0KG9tYXAzcGFuZG9yYV9zbmRfZGV2aWNlKTsKIGZhaWwxOgpAQCAtMzIwLDYgKzM1MSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvbWFwM3BhbmRvcmFfc29jX2V4aXQodm9pZCkKIHsKKwlyZWd1bGF0b3JfcHV0KG9tYXAzcGFuZG9yYV9kYWNfcmVnKTsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihvbWFwM3BhbmRvcmFfc25kX2RldmljZSk7CiAJZ3Bpb19mcmVlKE9NQVAzX1BBTkRPUkFfQU1QX1BPV0VSX0dQSU8pOwogCWdwaW9fZnJlZShPTUFQM19QQU5ET1JBX0RBQ19QT1dFUl9HUElPKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcHhhLXNzcC5jIGIvc291bmQvc29jL3B4YS9weGEtc3NwLmMKaW5kZXggM2JkNzcxMi4uZTY5Mzk3ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9weGEtc3NwLmMKKysrIGIvc291bmQvc29jL3B4YS9weGEtc3NwLmMKQEAgLTEzNSwxMCArMTM1LDExIEBACiAJc3RydWN0IHNzcF9wcml2ICpwcml2ID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKCFjcHVfZGFpLT5hY3RpdmUpCi0JCXJldHVybiAwOworCQljbGtfZW5hYmxlKHByaXYtPmRldi5zc3AtPmNsayk7CiAKIAlzc3Bfc2F2ZV9zdGF0ZSgmcHJpdi0+ZGV2LCAmcHJpdi0+c3RhdGUpOwogCWNsa19kaXNhYmxlKHByaXYtPmRldi5zc3AtPmNsayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ2LDEyICsxNDcsMTMgQEAKIHsKIAlzdHJ1Y3Qgc3NwX3ByaXYgKnByaXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CiAKLQlpZiAoIWNwdV9kYWktPmFjdGl2ZSkKLQkJcmV0dXJuIDA7Ci0KIAljbGtfZW5hYmxlKHByaXYtPmRldi5zc3AtPmNsayk7CiAJc3NwX3Jlc3RvcmVfc3RhdGUoJnByaXYtPmRldiwgJnByaXYtPnN0YXRlKTsKLQlzc3BfZW5hYmxlKCZwcml2LT5kZXYpOworCisJaWYgKGNwdV9kYWktPmFjdGl2ZSkKKwkJc3NwX2VuYWJsZSgmcHJpdi0+ZGV2KTsKKwllbHNlCisJCWNsa19kaXNhYmxlKHByaXYtPmRldi5zc3AtPmNsayk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcmF1bWZlbGQuYyBiL3NvdW5kL3NvYy9weGEvcmF1bWZlbGQuYwppbmRleCBhY2ZjZTFjLi43ZTNmNDE2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3JhdW1mZWxkLmMKKysrIGIvc291bmQvc29jL3B4YS9yYXVtZmVsZC5jCkBAIC00MSw3ICs0MSw5IEBACiB9OwogCiAjZGVmaW5lIE1BWDk0ODVfTUNMS19GUkVRXzExMjg5NiAweDIyCi0jZGVmaW5lCU1BWDk0ODVfTUNMS19GUkVRXzEyMjg4MCAweDIzCisjZGVmaW5lIE1BWDk0ODVfTUNMS19GUkVRXzEyMjg4MCAweDIzCisjZGVmaW5lIE1BWDk0ODVfTUNMS19GUkVRXzIyNTc5MiAweDMyCisjZGVmaW5lIE1BWDk0ODVfTUNMS19GUkVRXzI0NTc2MCAweDMzCiAKIHN0YXRpYyB2b2lkIHNldF9tYXg5NDg1X2NsayhjaGFyIGNsaykKIHsKQEAgLTcxLDkgKzczLDE3IEBACiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKIAotCXNldF9tYXg5NDg1X2NsayhNQVg5NDg1X01DTEtfRlJFUV8xMTI4OTYpOworCS8qIHNldCBmcmVxIHRvIDAgdG8gZW5hYmxlIGFsbCBwb3NzaWJsZSBjb2RlYyBzYW1wbGUgcmF0ZXMgKi8KKwlyZXR1cm4gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIDAsIDAsIDApOworfQogCi0JcmV0dXJuIHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCAwLCAxMTI4OTYwMCwgMCk7CitzdGF0aWMgdm9pZCByYXVtZmVsZF9jczQyNzBfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKKworCS8qIHNldCBmcmVxIHRvIDAgdG8gZW5hYmxlIGFsbCBwb3NzaWJsZSBjb2RlYyBzYW1wbGUgcmF0ZXMgKi8KKwlzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgMCwgMCwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgcmF1bWZlbGRfY3M0MjcwX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKQEAgLTg2LDIwICs5NiwyNCBAQAogCWludCByZXQgPSAwOwogCiAJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7Ci0JY2FzZSA4MDAwOgotCWNhc2UgMTYwMDA6Ci0JY2FzZSA0ODAwMDoKLQljYXNlIDk2MDAwOgotCQlzZXRfbWF4OTQ4NV9jbGsoTUFYOTQ4NV9NQ0xLX0ZSRVFfMTIyODgwKTsKLQkJY2xrID0gMTIyODgwMDA7Ci0JCWJyZWFrOwotCWNhc2UgMTEwMjU6Ci0JY2FzZSAyMjA1MDoKIAljYXNlIDQ0MTAwOgotCWNhc2UgODgyMDA6CiAJCXNldF9tYXg5NDg1X2NsayhNQVg5NDg1X01DTEtfRlJFUV8xMTI4OTYpOwogCQljbGsgPSAxMTI4OTYwMDsKIAkJYnJlYWs7CisJY2FzZSA0ODAwMDoKKwkJc2V0X21heDk0ODVfY2xrKE1BWDk0ODVfTUNMS19GUkVRXzEyMjg4MCk7CisJCWNsayA9IDEyMjg4MDAwOworCQlicmVhazsKKwljYXNlIDg4MjAwOgorCQlzZXRfbWF4OTQ4NV9jbGsoTUFYOTQ4NV9NQ0xLX0ZSRVFfMjI1NzkyKTsKKwkJY2xrID0gMjI1NzkyMDA7CisJCWJyZWFrOworCWNhc2UgOTYwMDA6CisJCXNldF9tYXg5NDg1X2NsayhNQVg5NDg1X01DTEtfRlJFUV8yNDU3NjApOworCQljbGsgPSAyNDU3NjAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJZm10ID0gU05EX1NPQ19EQUlGTVRfSTJTIHwKQEAgLTEyOCw3ICsxNDIsNyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2NsayhjcHVfZGFpLCBQWEFfU1NQX0NMS19FWFQsIDAsIDEpOworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgUFhBX1NTUF9DTEtfRVhULCBjbGssIDEpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMzcsNiArMTUxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyByYXVtZmVsZF9jczQyNzBfb3BzID0gewogCS5zdGFydHVwID0gcmF1bWZlbGRfY3M0MjcwX3N0YXJ0dXAsCisJLnNodXRkb3duID0gcmF1bWZlbGRfY3M0MjcwX3NodXRkb3duLAogCS5od19wYXJhbXMgPSByYXVtZmVsZF9jczQyNzBfaHdfcGFyYW1zLAogfTsKIApAQCAtMTgxLDIwICsxOTYsMjQgQEAKIAlpbnQgZm10LCByZXQgPSAwLCBjbGsgPSAwOwogCiAJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7Ci0JY2FzZSA4MDAwOgotCWNhc2UgMTYwMDA6Ci0JY2FzZSA0ODAwMDoKLQljYXNlIDk2MDAwOgotCQlzZXRfbWF4OTQ4NV9jbGsoTUFYOTQ4NV9NQ0xLX0ZSRVFfMTIyODgwKTsKLQkJY2xrID0gMTIyODgwMDA7Ci0JCWJyZWFrOwotCWNhc2UgMTEwMjU6Ci0JY2FzZSAyMjA1MDoKIAljYXNlIDQ0MTAwOgotCWNhc2UgODgyMDA6CiAJCXNldF9tYXg5NDg1X2NsayhNQVg5NDg1X01DTEtfRlJFUV8xMTI4OTYpOwogCQljbGsgPSAxMTI4OTYwMDsKIAkJYnJlYWs7CisJY2FzZSA0ODAwMDoKKwkJc2V0X21heDk0ODVfY2xrKE1BWDk0ODVfTUNMS19GUkVRXzEyMjg4MCk7CisJCWNsayA9IDEyMjg4MDAwOworCQlicmVhazsKKwljYXNlIDg4MjAwOgorCQlzZXRfbWF4OTQ4NV9jbGsoTUFYOTQ4NV9NQ0xLX0ZSRVFfMjI1NzkyKTsKKwkJY2xrID0gMjI1NzkyMDA7CisJCWJyZWFrOworCWNhc2UgOTYwMDA6CisJCXNldF9tYXg5NDg1X2NsayhNQVg5NDg1X01DTEtfRlJFUV8yNDU3NjApOworCQljbGsgPSAyNDU3NjAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJZm10ID0gU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfTkJfTkY7CkBAIC0yMTcsNyArMjM2LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgUFhBX1NTUF9DTEtfRVhULCAwLCAxKTsKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNwdV9kYWksIFBYQV9TU1BfQ0xLX0VYVCwgY2xrLCAxKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvS2NvbmZpZyBiL3NvdW5kL3NvYy9zM2MyNHh4L0tjb25maWcKaW5kZXggYjQ4OWYxYS4uMTVmZTU3ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnCkBAIC0yNywxMiArMjcsMTAgQEAKIGNvbmZpZyBTTkRfUzNDX1NPQ19QQ00KIAl0cmlzdGF0ZQogCi1jb25maWcgU05EX1MzQzI0NDNfU09DX0FDOTcKK2NvbmZpZyBTTkRfUzNDX1NPQ19BQzk3CiAJdHJpc3RhdGUKLQlzZWxlY3QgUzNDMjQxMF9ETUEKLQlzZWxlY3QgQUM5N19CVVMKIAlzZWxlY3QgU05EX1NPQ19BQzk3X0JVUwotCQorCiBjb25maWcgU05EX1MzQzI0WFhfU09DX05FTzE5NzNfV004NzUzCiAJdHJpc3RhdGUgIlNvQyBJMlMgQXVkaW8gc3VwcG9ydCBmb3IgTkVPMTk3MyAtIFdNODc1MyIKIAlkZXBlbmRzIG9uIFNORF9TM0MyNFhYX1NPQyAmJiBNQUNIX05FTzE5NzNfR1RBMDEKQEAgLTcxLDggKzY5LDEwIEBACiBjb25maWcgU05EX1MzQzI0WFhfU09DX1NNREsyNDQzX1dNOTcxMAogCXRyaXN0YXRlICJTb0MgQUM5NyBBdWRpbyBzdXBwb3J0IGZvciBTTURLMjQ0MyAtIFdNOTcxMCIKIAlkZXBlbmRzIG9uIFNORF9TM0MyNFhYX1NPQyAmJiBNQUNIX1NNREsyNDQzCi0Jc2VsZWN0IFNORF9TM0MyNDQzX1NPQ19BQzk3CisJc2VsZWN0IFMzQzI0MTBfRE1BCisJc2VsZWN0IEFDOTdfQlVTCiAJc2VsZWN0IFNORF9TT0NfQUM5N19DT0RFQworCXNlbGVjdCBTTkRfUzNDX1NPQ19BQzk3CiAJaGVscAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBzbWRrMjQ0MwogCSAgd2l0aCB0aGUgV005NzEwLgpAQCAtODAsOCArODAsMTAgQEAKIGNvbmZpZyBTTkRfUzNDMjRYWF9TT0NfTE4yNDQwU0JDX0FMQzY1MAogCXRyaXN0YXRlICJTb0MgQUM5NyBBdWRpbyBzdXBwb3J0IGZvciBMTjI0NDBTQkMgLSBBTEM2NTAiCiAJZGVwZW5kcyBvbiBTTkRfUzNDMjRYWF9TT0MgJiYgQVJDSF9TM0MyNDEwCi0Jc2VsZWN0IFNORF9TM0MyNDQzX1NPQ19BQzk3CisJc2VsZWN0IFMzQzI0MTBfRE1BCisJc2VsZWN0IEFDOTdfQlVTCiAJc2VsZWN0IFNORF9TT0NfQUM5N19DT0RFQworCXNlbGVjdCBTTkRfUzNDX1NPQ19BQzk3CiAJaGVscAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBsbjI0NDBzYmMKIAkgIHdpdGggdGhlIEFMQzY1MC4KQEAgLTExMSwzICsxMTMsMTEgQEAKIAlzZWxlY3QgU05EX1MzQzI0WFhfU09DX0kyUwogCXNlbGVjdCBTTkRfU09DX1RMVjMyMEFJQzNYCiAJc2VsZWN0IFNORF9TM0MyNFhYX1NPQ19TSU1URUMKKworY29uZmlnIFNORF9TT0NfU01ES19XTTk3MTMKKwl0cmlzdGF0ZSAiU29DIEFDOTcgQXVkaW8gc3VwcG9ydCBmb3IgU01ESyB3aXRoIFdNOTcxMyIKKwlkZXBlbmRzIG9uIFNORF9TM0MyNFhYX1NPQyAmJiBNQUNIX1NNREs2NDEwCisJc2VsZWN0IFNORF9TT0NfV005NzEzCisJc2VsZWN0IFNORF9TM0NfU09DX0FDOTcKKwloZWxwCisJICBTYXQgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIHRoZSBTTURLLgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvTWFrZWZpbGUgYi9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZQppbmRleCBiNzQ0NjU3Li5kZjA3MWEzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZQpAQCAtMywxMyArMywxMyBAQAogc25kLXNvYy1zM2MyNHh4LWkycy1vYmpzIDo9IHMzYzI0eHgtaTJzLm8KIHNuZC1zb2MtczNjMjQxMi1pMnMtb2JqcyA6PSBzM2MyNDEyLWkycy5vCiBzbmQtc29jLXMzYzY0eHgtaTJzLW9ianMgOj0gczNjNjR4eC1pMnMubwotc25kLXNvYy1zM2MyNDQzLWFjOTctb2JqcyA6PSBzM2MyNDQzLWFjOTcubworc25kLXNvYy1zM2MtYWM5Ny1vYmpzIDo9IHMzYy1hYzk3Lm8KIHNuZC1zb2MtczNjLWkycy12Mi1vYmpzIDo9IHMzYy1pMnMtdjIubwogc25kLXNvYy1zM2MtcGNtLW9ianMgOj0gczNjLXBjbS5vCiAKIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0MpICs9IHNuZC1zb2MtczNjMjR4eC5vCiBvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX0kyUykgKz0gc25kLXNvYy1zM2MyNHh4LWkycy5vCi1vYmotJChDT05GSUdfU05EX1MzQzI0NDNfU09DX0FDOTcpICs9IHNuZC1zb2MtczNjMjQ0My1hYzk3Lm8KK29iai0kKENPTkZJR19TTkRfUzNDX1NPQ19BQzk3KSArPSBzbmQtc29jLXMzYy1hYzk3Lm8KIG9iai0kKENPTkZJR19TTkRfUzNDMjQxMl9TT0NfSTJTKSArPSBzbmQtc29jLXMzYzI0MTItaTJzLm8KIG9iai0kKENPTkZJR19TTkRfUzNDNjRYWF9TT0NfSTJTKSArPSBzbmQtc29jLXMzYzY0eHgtaTJzLm8KIG9iai0kKENPTkZJR19TTkRfUzNDX0kyU1YyX1NPQykgKz0gc25kLXNvYy1zM2MtaTJzLXYyLm8KQEAgLTI2LDYgKzI2LDcgQEAKIHNuZC1zb2MtczNjMjR4eC1zaW10ZWMtaGVybWVzLW9ianMgOj0gczNjMjR4eF9zaW10ZWNfaGVybWVzLm8KIHNuZC1zb2MtczNjMjR4eC1zaW10ZWMtdGx2MzIwYWljMjMtb2JqcyA6PSBzM2MyNHh4X3NpbXRlY190bHYzMjBhaWMyMy5vCiBzbmQtc29jLXNtZGs2NHh4LXdtODU4MC1vYmpzIDo9IHNtZGs2NHh4X3dtODU4MC5vCitzbmQtc29jLXNtZGstd205NzEzLW9ianMgOj0gc21ka193bTk3MTMubwogCiBvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX0pJVkVfV004NzUwKSArPSBzbmQtc29jLWppdmUtd204NzUwLm8KIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfTkVPMTk3M19XTTg3NTMpICs9IHNuZC1zb2MtbmVvMTk3My13bTg3NTMubwpAQCAtMzcsNCArMzgsNCBAQAogb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQ19TSU1URUNfSEVSTUVTKSArPSBzbmQtc29jLXMzYzI0eHgtc2ltdGVjLWhlcm1lcy5vCiBvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX1NJTVRFQ19UTFYzMjBBSUMyMykgKz0gc25kLXNvYy1zM2MyNHh4LXNpbXRlYy10bHYzMjBhaWMyMy5vCiBvYmotJChDT05GSUdfU05EX1MzQzY0WFhfU09DX1dNODU4MCkgKz0gc25kLXNvYy1zbWRrNjR4eC13bTg1ODAubwotCitvYmotJChDT05GSUdfU05EX1NPQ19TTURLX1dNOTcxMykgKz0gc25kLXNvYy1zbWRrLXdtOTcxMy5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9sbjI0NDBzYmNfYWxjNjUwLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9sbjI0NDBzYmNfYWxjNjUwLmMKaW5kZXggZDAwZDM1OS4uZmZhOTU0ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvbG4yNDQwc2JjX2FsYzY1MC5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L2xuMjQ0MHNiY19hbGM2NTAuYwpAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiLi4vY29kZWNzL2FjOTcuaCIKICNpbmNsdWRlICJzM2MtZG1hLmgiCi0jaW5jbHVkZSAiczNjMjR4eC1hYzk3LmgiCisjaW5jbHVkZSAiczNjLWFjOTcuaCIKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgbG4yNDQwc2JjOwogCkBAIC0zMyw3ICszMyw3IEBACiB7CiAJLm5hbWUgPSAiQUM5NyIsCiAJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCi0JLmNwdV9kYWkgPSAmczNjMjQ0M19hYzk3X2RhaVswXSwKKwkuY3B1X2RhaSA9ICZzM2NfYWM5N19kYWlbUzNDX0FDOTdfREFJX1BDTV0sCiAJLmNvZGVjX2RhaSA9ICZhYzk3X2RhaSwKIH0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjLWFjOTcuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1hYzk3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU4ZWQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1hYzk3LmMKQEAgLTAsMCArMSw1MTggQEAKKy8qIHNvdW5kL3NvYy9zM2MyNHh4L3MzYy1hYzk3LmMKKyAqCisgKiBBTFNBIFNvQyBBdWRpbyBMYXllciAtIFMzQyBBQzk3IENvbnRyb2xsZXIgZHJpdmVyCisgKiAJRXZvbHZlZCBmcm9tIHMzYzI0NDMtYWM5Ny5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uIEx0ZAorICogCUF1dGhvcjogSmFzd2luZGVyIFNpbmdoIDxqYXNzaS5icmFyQHNhbXN1bmcuY29tPgorICogCUNyZWRpdHM6IEdyYWVtZSBHcmVnb3J5LCBTZWFuIENob2kKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3MtYWM5Ny5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CisjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgorCisjaW5jbHVkZSAiczNjLWRtYS5oIgorI2luY2x1ZGUgInMzYy1hYzk3LmgiCisKKyNkZWZpbmUgQUNfQ01EX0FERFIoeCkgKHggPDwgMTYpCisjZGVmaW5lIEFDX0NNRF9EQVRBKHgpICh4ICYgMHhmZmZmKQorCitzdHJ1Y3QgczNjX2FjOTdfaW5mbyB7CisJdW5zaWduZWQgICAgICAgICAgIHN0YXRlOworCXN0cnVjdCBjbGsgICAgICAgICAqYWM5N19jbGs7CisJdm9pZCBfX2lvbWVtCSAgICpyZWdzOworCXN0cnVjdCBtdXRleCAgICAgICBsb2NrOworCXN0cnVjdCBjb21wbGV0aW9uICBkb25lOworfTsKK3N0YXRpYyBzdHJ1Y3QgczNjX2FjOTdfaW5mbyBzM2NfYWM5NzsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjX2RtYV9jbGllbnRfb3V0ID0geworCS5uYW1lID0gIkFDOTcgUENNT3V0IgorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjX2RtYV9jbGllbnRfaW4gPSB7CisJLm5hbWUgPSAiQUM5NyBQQ01JbiIKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzY19kbWFfY2xpZW50X21pY2luID0geworCS5uYW1lID0gIkFDOTcgTWljSW4iCit9OworCitzdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzY19hYzk3X3BjbV9vdXQgPSB7CisJLmNsaWVudAkJPSAmczNjX2RtYV9jbGllbnRfb3V0LAorCS5kbWFfc2l6ZQk9IDQsCit9OworCitzdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzY19hYzk3X3BjbV9pbiA9IHsKKwkuY2xpZW50CQk9ICZzM2NfZG1hX2NsaWVudF9pbiwKKwkuZG1hX3NpemUJPSA0LAorfTsKKworc3RhdGljIHN0cnVjdCBzM2NfZG1hX3BhcmFtcyBzM2NfYWM5N19taWNfaW4gPSB7CisJLmNsaWVudAkJPSAmczNjX2RtYV9jbGllbnRfbWljaW4sCisJLmRtYV9zaXplCT0gNCwKK307CisKK3N0YXRpYyB2b2lkIHMzY19hYzk3X2FjdGl2YXRlKHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKK3sKKwl1MzIgYWNfZ2xiY3RybCwgc3RhdDsKKworCXN0YXQgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCU1RBVCkgJiAweDc7CisJaWYgKHN0YXQgPT0gUzNDX0FDOTdfR0xCU1RBVF9NQUlOU1RBVEVfQUNUSVZFKQorCQlyZXR1cm47IC8qIFJldHVybiBpZiBhbHJlYWR5IGFjdGl2ZSAqLworCisJSU5JVF9DT01QTEVUSU9OKHMzY19hYzk3LmRvbmUpOworCisJYWNfZ2xiY3RybCA9IHJlYWRsKHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKwlhY19nbGJjdHJsID0gUzNDX0FDOTdfR0xCQ1RSTF9BQ0xJTktPTjsKKwl3cml0ZWwoYWNfZ2xiY3RybCwgczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCW1zbGVlcCgxKTsKKworCWFjX2dsYmN0cmwgfD0gUzNDX0FDOTdfR0xCQ1RSTF9UUkFOU0ZFUkRBVEFFTkFCTEU7CisJd3JpdGVsKGFjX2dsYmN0cmwsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKwltc2xlZXAoMSk7CisKKwlhY19nbGJjdHJsID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCWFjX2dsYmN0cmwgfD0gUzNDX0FDOTdfR0xCQ1RSTF9DT0RFQ1JFQURZSUU7CisJd3JpdGVsKGFjX2dsYmN0cmwsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKworCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZzM2NfYWM5Ny5kb25lLCBIWikpCisJCXByaW50ayhLRVJOX0VSUiAiQUM5NzogVW5hYmxlIHRvIGFjdGl2YXRlISIpOworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgczNjX2FjOTdfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisJdW5zaWduZWQgc2hvcnQgcmVnKQoreworCXUzMiBhY19nbGJjdHJsLCBhY19jb2RlY19jbWQ7CisJdTMyIHN0YXQsIGFkZHIsIGRhdGE7CisKKwltdXRleF9sb2NrKCZzM2NfYWM5Ny5sb2NrKTsKKworCXMzY19hYzk3X2FjdGl2YXRlKGFjOTcpOworCisJSU5JVF9DT01QTEVUSU9OKHMzY19hYzk3LmRvbmUpOworCisJYWNfY29kZWNfY21kID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0NPREVDX0NNRCk7CisJYWNfY29kZWNfY21kID0gUzNDX0FDOTdfQ09ERUNfQ01EX1JFQUQgfCBBQ19DTURfQUREUihyZWcpOworCXdyaXRlbChhY19jb2RlY19jbWQsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOworCisJdWRlbGF5KDUwKTsKKworCWFjX2dsYmN0cmwgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisJYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX0NPREVDUkVBRFlJRTsKKwl3cml0ZWwoYWNfZ2xiY3RybCwgczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnMzY19hYzk3LmRvbmUsIEhaKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJBQzk3OiBVbmFibGUgdG8gcmVhZCEiKTsKKworCXN0YXQgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfU1RBVCk7CisJYWRkciA9IChzdGF0ID4+IDE2KSAmIDB4N2Y7CisJZGF0YSA9IChzdGF0ICYgMHhmZmZmKTsKKworCWlmIChhZGRyICE9IHJlZykKKwkJcHJpbnRrKEtFUk5fRVJSICJzM2MtYWM5NzogcmVxIGFkZHIgPSAlMDJ4LCByZXAgYWRkciA9ICUwMnhcbiIsIHJlZywgYWRkcik7CisKKwltdXRleF91bmxvY2soJnMzY19hYzk3LmxvY2spOworCisJcmV0dXJuICh1bnNpZ25lZCBzaG9ydClkYXRhOworfQorCitzdGF0aWMgdm9pZCBzM2NfYWM5N193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZywKKwl1bnNpZ25lZCBzaG9ydCB2YWwpCit7CisJdTMyIGFjX2dsYmN0cmwsIGFjX2NvZGVjX2NtZDsKKworCW11dGV4X2xvY2soJnMzY19hYzk3LmxvY2spOworCisJczNjX2FjOTdfYWN0aXZhdGUoYWM5Nyk7CisKKwlJTklUX0NPTVBMRVRJT04oczNjX2FjOTcuZG9uZSk7CisKKwlhY19jb2RlY19jbWQgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfQ09ERUNfQ01EKTsKKwlhY19jb2RlY19jbWQgPSBBQ19DTURfQUREUihyZWcpIHwgQUNfQ01EX0RBVEEodmFsKTsKKwl3cml0ZWwoYWNfY29kZWNfY21kLCBzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfQ09ERUNfQ01EKTsKKworCXVkZWxheSg1MCk7CisKKwlhY19nbGJjdHJsID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCWFjX2dsYmN0cmwgfD0gUzNDX0FDOTdfR0xCQ1RSTF9DT0RFQ1JFQURZSUU7CisJd3JpdGVsKGFjX2dsYmN0cmwsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKworCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZzM2NfYWM5Ny5kb25lLCBIWikpCisJCXByaW50ayhLRVJOX0VSUiAiQUM5NzogVW5hYmxlIHRvIHdyaXRlISIpOworCisJYWNfY29kZWNfY21kID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0NPREVDX0NNRCk7CisJYWNfY29kZWNfY21kIHw9IFMzQ19BQzk3X0NPREVDX0NNRF9SRUFEOworCXdyaXRlbChhY19jb2RlY19jbWQsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOworCisJbXV0ZXhfdW5sb2NrKCZzM2NfYWM5Ny5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgczNjX2FjOTdfY29sZF9yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCit7CisJd3JpdGVsKFMzQ19BQzk3X0dMQkNUUkxfQ09MRFJFU0VULAorCQkJczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCW1zbGVlcCgxKTsKKworCXdyaXRlbCgwLCBzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisJbXNsZWVwKDEpOworfQorCitzdGF0aWMgdm9pZCBzM2NfYWM5N193YXJtX3Jlc2V0KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKK3sKKwl1MzIgc3RhdDsKKworCXN0YXQgPSByZWFkbChzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCU1RBVCkgJiAweDc7CisJaWYgKHN0YXQgPT0gUzNDX0FDOTdfR0xCU1RBVF9NQUlOU1RBVEVfQUNUSVZFKQorCQlyZXR1cm47IC8qIFJldHVybiBpZiBhbHJlYWR5IGFjdGl2ZSAqLworCisJd3JpdGVsKFMzQ19BQzk3X0dMQkNUUkxfV0FSTVJFU0VULCBzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisJbXNsZWVwKDEpOworCisJd3JpdGVsKDAsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKwltc2xlZXAoMSk7CisKKwlzM2NfYWM5N19hY3RpdmF0ZShhYzk3KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHMzY19hYzk3X2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJdTMyIGFjX2dsYmN0cmwsIGFjX2dsYnN0YXQ7CisKKwlhY19nbGJzdGF0ID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQlNUQVQpOworCisJaWYgKGFjX2dsYnN0YXQgJiBTM0NfQUM5N19HTEJTVEFUX0NPREVDUkVBRFkpIHsKKworCQlhY19nbGJjdHJsID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCQlhY19nbGJjdHJsICY9IH5TM0NfQUM5N19HTEJDVFJMX0NPREVDUkVBRFlJRTsKKwkJd3JpdGVsKGFjX2dsYmN0cmwsIHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKworCQljb21wbGV0ZSgmczNjX2FjOTcuZG9uZSk7CisJfQorCisJYWNfZ2xiY3RybCA9IHJlYWRsKHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKwlhY19nbGJjdHJsIHw9ICgxPDwzMCk7IC8qIENsZWFyIGludGVycnVwdCAqLworCXdyaXRlbChhY19nbGJjdHJsLCBzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0cnVjdCBzbmRfYWM5N19idXNfb3BzIHNvY19hYzk3X29wcyA9IHsKKwkucmVhZCAgICAgICA9IHMzY19hYzk3X3JlYWQsCisJLndyaXRlICAgICAgPSBzM2NfYWM5N193cml0ZSwKKwkud2FybV9yZXNldCA9IHMzY19hYzk3X3dhcm1fcmVzZXQsCisJLnJlc2V0ICAgICAgPSBzM2NfYWM5N19jb2xkX3Jlc2V0LAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19hYzk3X29wcyk7CisKK3N0YXRpYyBpbnQgczNjX2FjOTdfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmczNjX2FjOTdfcGNtX291dDsKKwllbHNlCisJCWNwdV9kYWktPmRtYV9kYXRhID0gJnMzY19hYzk3X3BjbV9pbjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzY19hYzk3X3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQsCisJCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJdTMyIGFjX2dsYmN0cmw7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCWludCBjaGFubmVsID0gKChzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgKikKKwkJICBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGEpLT5jaGFubmVsOworCisJYWNfZ2xiY3RybCA9IHJlYWRsKHMzY19hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKQorCQlhY19nbGJjdHJsICY9IH5TM0NfQUM5N19HTEJDVFJMX1BDTUlOVE1fTUFTSzsKKwllbHNlCisJCWFjX2dsYmN0cmwgJj0gflMzQ19BQzk3X0dMQkNUUkxfUENNT1VUVE1fTUFTSzsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCisJCQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfUENNSU5UTV9ETUE7CisJCWVsc2UKKwkJCWFjX2dsYmN0cmwgfD0gUzNDX0FDOTdfR0xCQ1RSTF9QQ01PVVRUTV9ETUE7CisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWJyZWFrOworCX0KKworCXdyaXRlbChhY19nbGJjdHJsLCBzM2NfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7CisKKwlzM2MyNDEwX2RtYV9jdHJsKGNoYW5uZWwsIFMzQzI0MTBfRE1BT1BfU1RBUlRFRCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2NfYWM5N19od19taWNfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCSAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlyZXR1cm4gLUVOT0RFVjsKKwllbHNlCisJCWNwdV9kYWktPmRtYV9kYXRhID0gJnMzY19hYzk3X21pY19pbjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzY19hYzk3X21pY190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICBpbnQgY21kLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwl1MzIgYWNfZ2xiY3RybDsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJaW50IGNoYW5uZWwgPSAoKHN0cnVjdCBzM2NfZG1hX3BhcmFtcyAqKQorCQkgIHJ0ZC0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YSktPmNoYW5uZWw7CisKKwlhY19nbGJjdHJsID0gcmVhZGwoczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCWFjX2dsYmN0cmwgJj0gflMzQ19BQzk3X0dMQkNUUkxfTUlDSU5UTV9NQVNLOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX01JQ0lOVE1fRE1BOworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlicmVhazsKKwl9CisKKwl3cml0ZWwoYWNfZ2xiY3RybCwgczNjX2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOworCisJczNjMjQxMF9kbWFfY3RybChjaGFubmVsLCBTM0MyNDEwX0RNQU9QX1NUQVJURUQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHMzY19hYzk3X2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHMzY19hYzk3X2h3X3BhcmFtcywKKwkudHJpZ2dlcgk9IHMzY19hYzk3X3RyaWdnZXIsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBzM2NfYWM5N19taWNfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gczNjX2FjOTdfaHdfbWljX3BhcmFtcywKKwkudHJpZ2dlcgk9IHMzY19hYzk3X21pY190cmlnZ2VyLAorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpIHMzY19hYzk3X2RhaVtdID0geworCVtTM0NfQUM5N19EQUlfUENNXSA9IHsKKwkJLm5hbWUgPQkiczNjLWFjOTciLAorCQkuaWQgPSBTM0NfQUM5N19EQUlfUENNLAorCQkuYWM5N19jb250cm9sID0gMSwKKwkJLnBsYXliYWNrID0geworCQkJLnN0cmVhbV9uYW1lID0gIkFDOTcgUGxheWJhY2siLAorCQkJLmNoYW5uZWxzX21pbiA9IDIsCisJCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCisJCS5jYXB0dXJlID0geworCQkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQ2FwdHVyZSIsCisJCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKKwkJLm9wcyA9ICZzM2NfYWM5N19kYWlfb3BzLAorCX0sCisJW1MzQ19BQzk3X0RBSV9NSUNdID0geworCQkubmFtZSA9ICJzM2MtYWM5Ny1taWMiLAorCQkuaWQgPSBTM0NfQUM5N19EQUlfTUlDLAorCQkuYWM5N19jb250cm9sID0gMSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBNaWMgQ2FwdHVyZSIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJCS5jaGFubmVsc19tYXggPSAxLAorCQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKKwkJLm9wcyA9ICZzM2NfYWM5N19taWNfZGFpX29wcywKKwl9LAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHMzY19hYzk3X2RhaSk7CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHMzY19hYzk3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICptZW1fcmVzLCAqZG1hdHhfcmVzLCAqZG1hcnhfcmVzLCAqZG1hbWljX3JlcywgKmlycV9yZXM7CisJc3RydWN0IHMzY19hdWRpb19wZGF0YSAqYWM5N19wZGF0YTsKKwlpbnQgcmV0OworCisJYWM5N19wZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghYWM5N19wZGF0YSB8fCAhYWM5N19wZGF0YS0+Y2ZnX2dwaW8pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2ZnX2dwaW8gY2FsbGJhY2sgbm90IHByb3ZpZGVkIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENoZWNrIGZvciBhdmFpbGFiaWxpdHkgb2YgbmVjZXNzYXJ5IHJlc291cmNlICovCisJZG1hdHhfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAwKTsKKwlpZiAoIWRtYXR4X3JlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZ2V0IEFDOTctVFggZG1hIHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlkbWFyeF9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOworCWlmICghZG1hcnhfcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgQUM5Ny1SWCBkbWEgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWRtYW1pY19yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDIpOworCWlmICghZG1hbWljX3JlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZ2V0IEFDOTctTUlDIGRtYSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJbWVtX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFtZW1fcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBnZXQgcmVnaXN0ZXIgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWlycV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICghaXJxX3JlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJBQzk3IElSUSBub3QgcHJvdmlkZWQhXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwKKwkJCQlyZXNvdXJjZV9zaXplKG1lbV9yZXMpLCAiczNjLWFjOTciKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gcmVxdWVzdCByZWdpc3RlciByZWdpb25cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXMzY19hYzk3X3BjbV9vdXQuY2hhbm5lbCA9IGRtYXR4X3Jlcy0+c3RhcnQ7CisJczNjX2FjOTdfcGNtX291dC5kbWFfYWRkciA9IG1lbV9yZXMtPnN0YXJ0ICsgUzNDX0FDOTdfUENNX0RBVEE7CisJczNjX2FjOTdfcGNtX2luLmNoYW5uZWwgPSBkbWFyeF9yZXMtPnN0YXJ0OworCXMzY19hYzk3X3BjbV9pbi5kbWFfYWRkciA9IG1lbV9yZXMtPnN0YXJ0ICsgUzNDX0FDOTdfUENNX0RBVEE7CisJczNjX2FjOTdfbWljX2luLmNoYW5uZWwgPSBkbWFtaWNfcmVzLT5zdGFydDsKKwlzM2NfYWM5N19taWNfaW4uZG1hX2FkZHIgPSBtZW1fcmVzLT5zdGFydCArIFMzQ19BQzk3X01JQ19EQVRBOworCisJaW5pdF9jb21wbGV0aW9uKCZzM2NfYWM5Ny5kb25lKTsKKwltdXRleF9pbml0KCZzM2NfYWM5Ny5sb2NrKTsKKworCXMzY19hYzk3LnJlZ3MgPSBpb3JlbWFwKG1lbV9yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbV9yZXMpKTsKKwlpZiAoczNjX2FjOTcucmVncyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBpb3JlbWFwIHJlZ2lzdGVyIHJlZ2lvblxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnIxOworCX0KKworCXMzY19hYzk3LmFjOTdfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiYWM5NyIpOworCWlmIChJU19FUlIoczNjX2FjOTcuYWM5N19jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInMzYy1hYzk3IGZhaWxlZCB0byBnZXQgYWM5N19jbG9ja1xuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyMjsKKwl9CisJY2xrX2VuYWJsZShzM2NfYWM5Ny5hYzk3X2Nsayk7CisKKwlpZiAoYWM5N19wZGF0YS0+Y2ZnX2dwaW8ocGRldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGNvbmZpZ3VyZSBncGlvXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnIzOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycV9yZXMtPnN0YXJ0LCBzM2NfYWM5N19pcnEsCisJCQkJCUlSUUZfRElTQUJMRUQsICJBQzk3IiwgTlVMTCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzM2MtYWM5NzogaW50ZXJydXB0IHJlcXVlc3QgZmFpbGVkLlxuIik7CisJCWdvdG8gZXJyNDsKKwl9CisKKwlzM2NfYWM5N19kYWlbUzNDX0FDOTdfREFJX1BDTV0uZGV2ID0gJnBkZXYtPmRldjsKKwlzM2NfYWM5N19kYWlbUzNDX0FDOTdfREFJX01JQ10uZGV2ID0gJnBkZXYtPmRldjsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyhzM2NfYWM5N19kYWksIEFSUkFZX1NJWkUoczNjX2FjOTdfZGFpKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI1OworCisJcmV0dXJuIDA7CisKK2VycjU6CisJZnJlZV9pcnEoaXJxX3Jlcy0+c3RhcnQsIE5VTEwpOworZXJyNDoKK2VycjM6CisJY2xrX2Rpc2FibGUoczNjX2FjOTcuYWM5N19jbGspOworCWNsa19wdXQoczNjX2FjOTcuYWM5N19jbGspOworZXJyMjoKKwlpb3VubWFwKHMzY19hYzk3LnJlZ3MpOworZXJyMToKKwlyZWxlYXNlX21lbV9yZWdpb24obWVtX3Jlcy0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtX3JlcykpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgczNjX2FjOTdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICptZW1fcmVzLCAqaXJxX3JlczsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHMzY19hYzk3X2RhaSwgQVJSQVlfU0laRShzM2NfYWM5N19kYWkpKTsKKworCWlycV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmIChpcnFfcmVzKQorCQlmcmVlX2lycShpcnFfcmVzLT5zdGFydCwgTlVMTCk7CisKKwljbGtfZGlzYWJsZShzM2NfYWM5Ny5hYzk3X2Nsayk7CisJY2xrX3B1dChzM2NfYWM5Ny5hYzk3X2Nsayk7CisKKwlpb3VubWFwKHMzY19hYzk3LnJlZ3MpOworCisJbWVtX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKG1lbV9yZXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW1fcmVzKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjX2FjOTdfZHJpdmVyID0geworCS5wcm9iZSAgPSBzM2NfYWM5N19wcm9iZSwKKwkucmVtb3ZlID0gczNjX2FjOTdfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInMzYy1hYzk3IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHMzY19hYzk3X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2NfYWM5N19kcml2ZXIpOworfQorbW9kdWxlX2luaXQoczNjX2FjOTdfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzM2NfYWM5N19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzY19hYzk3X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChzM2NfYWM5N19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSmFzd2luZGVyIFNpbmdoLCA8amFzc2kuYnJhckBzYW1zdW5nLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUM5NyBkcml2ZXIgZm9yIHRoZSBTYW1zdW5nIFNvQyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjLWFjOTcuaCBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1hYzk3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc4MTk4MwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1hYzk3LmgKQEAgLTAsMCArMSwyMyBAQAorLyogc291bmQvc29jL3MzYzI0eHgvczNjLWFjOTcuaAorICoKKyAqIEFMU0EgU29DIEF1ZGlvIExheWVyIC0gUzNDIEFDOTcgQ29udHJvbGxlciBkcml2ZXIKKyAqIAlFdm9sdmVkIGZyb20gczNjMjQ0My1hYzk3LmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4gTHRkCisgKiAJQXV0aG9yOiBKYXN3aW5kZXIgU2luZ2ggPGphc3NpLmJyYXJAc2Ftc3VuZy5jb20+CisgKiAJQ3JlZGl0czogR3JhZW1lIEdyZWdvcnksIFNlYW4gQ2hvaQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX1MzQ19BQzk3X0hfCisjZGVmaW5lIF9fUzNDX0FDOTdfSF8KKworI2RlZmluZSBTM0NfQUM5N19EQUlfUENNIDAKKyNkZWZpbmUgUzNDX0FDOTdfREFJX01JQyAxCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgczNjX2FjOTdfZGFpW107CisKKyNlbmRpZiAvKiBfX1MzQ19BQzk3X0hfICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtcGNtLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MtcGNtLmMKaW5kZXggOWU2MWE3Yy4uYTk4ZjQwYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1wY20uYwpAQCAtMjI5LDggKzIyOSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY20tPmxvY2ssIGZsYWdzKTsKIAotCWRldl9kYmcocGNtLT5kZXYsICJQQ01TT1VSQ0VfQ0xLLSVsdSBTQ0xLPSV1ZnMgXAotCQkJCVNDTEtfRElWPSVkIFNZTkNfRElWPSVkXG4iLAorCWRldl9kYmcocGNtLT5kZXYsICJQQ01TT1VSQ0VfQ0xLLSVsdSBTQ0xLPSV1ZnMgU0NMS19ESVY9JWQgU1lOQ19ESVY9JWRcbiIsCiAJCQkJY2xrX2dldF9yYXRlKGNsayksIHBjbS0+c2Nsa19wZXJfZnMsCiAJCQkJc2Nsa19kaXYsIHN5bmNfZGl2KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjQ0My1hYzk3LmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDQzLWFjOTcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE5MWUzYS4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNDQzLWFjOTcuYworKysgL2Rldi9udWxsCkBAIC0xLDQzMiArMCwwIEBACi0vKgotICogczNjMjQ0My1hYzk3LmMgIC0tICBBTFNBIFNvYyBBdWRpbyBMYXllcgotICoKLSAqIChjKSAyMDA3IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCi0gKiBHcmFlbWUgR3JlZ29yeSBncmFlbWUuZ3JlZ29yeUB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LCBTZWFuIENob2kgPHNoNDI4LmNob2lAc2Ftc3VuZy5jb20+Ci0gKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgotI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxwbGF0L3JlZ3MtYWM5Ny5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgotI2luY2x1ZGUgPG1hY2gvZG1hLmg+Ci0KLSNpbmNsdWRlICJzM2MtZG1hLmgiCi0jaW5jbHVkZSAiczNjMjR4eC1hYzk3LmgiCi0KLXN0cnVjdCBzM2MyNHh4X2FjOTdfaW5mbyB7Ci0Jdm9pZCBfX2lvbWVtCSpyZWdzOwotCXN0cnVjdCBjbGsJKmFjOTdfY2xrOwotfTsKLXN0YXRpYyBzdHJ1Y3QgczNjMjR4eF9hYzk3X2luZm8gczNjMjR4eF9hYzk3OwotCi1zdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGFjOTdfY29tcGxldGlvbik7Ci1zdGF0aWMgdTMyIGNvZGVjX3JlYWR5Owotc3RhdGljIERFRklORV9NVVRFWChhYzk3X211dGV4KTsKLQotc3RhdGljIHVuc2lnbmVkIHNob3J0IHMzYzI0NDNfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKLQl1bnNpZ25lZCBzaG9ydCByZWcpCi17Ci0JdTMyIGFjX2dsYmN0cmw7Ci0JdTMyIGFjX2NvZGVjX2NtZDsKLQl1MzIgc3RhdCwgYWRkciwgZGF0YTsKLQotCW11dGV4X2xvY2soJmFjOTdfbXV0ZXgpOwotCi0JY29kZWNfcmVhZHkgPSBTM0NfQUM5N19HTEJTVEFUX0NPREVDUkVBRFk7Ci0JYWNfY29kZWNfY21kID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOwotCWFjX2NvZGVjX2NtZCA9IFMzQ19BQzk3X0NPREVDX0NNRF9SRUFEIHwgQUNfQ01EX0FERFIocmVnKTsKLQl3cml0ZWwoYWNfY29kZWNfY21kLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0NPREVDX0NNRCk7Ci0KLQl1ZGVsYXkoNTApOwotCi0JYWNfZ2xiY3RybCA9IHJlYWRsKHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX0NPREVDUkVBRFlJRTsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmFjOTdfY29tcGxldGlvbik7Ci0KLQlzdGF0ID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19TVEFUKTsKLQlhZGRyID0gKHN0YXQgPj4gMTYpICYgMHg3ZjsKLQlkYXRhID0gKHN0YXQgJiAweGZmZmYpOwotCi0JaWYgKGFkZHIgIT0gcmVnKQotCQlwcmludGsoS0VSTl9FUlIgInMzYzI0eHgtYWM5NzogcmVxIGFkZHIgPSAlMDJ4LCIKLQkJCQkiIHJlcCBhZGRyID0gJTAyeFxuIiwgcmVnLCBhZGRyKTsKLQotCW11dGV4X3VubG9jaygmYWM5N19tdXRleCk7Ci0KLQlyZXR1cm4gKHVuc2lnbmVkIHNob3J0KWRhdGE7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzYzI0NDNfYWM5N193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZywKLQl1bnNpZ25lZCBzaG9ydCB2YWwpCi17Ci0JdTMyIGFjX2dsYmN0cmw7Ci0JdTMyIGFjX2NvZGVjX2NtZDsKLQotCW11dGV4X2xvY2soJmFjOTdfbXV0ZXgpOwotCi0JY29kZWNfcmVhZHkgPSBTM0NfQUM5N19HTEJTVEFUX0NPREVDUkVBRFk7Ci0JYWNfY29kZWNfY21kID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOwotCWFjX2NvZGVjX2NtZCA9IEFDX0NNRF9BRERSKHJlZykgfCBBQ19DTURfREFUQSh2YWwpOwotCXdyaXRlbChhY19jb2RlY19jbWQsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfQ09ERUNfQ01EKTsKLQotCXVkZWxheSg1MCk7Ci0KLQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfQ09ERUNSRUFEWUlFOwotCXdyaXRlbChhY19nbGJjdHJsLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCi0Jd2FpdF9mb3JfY29tcGxldGlvbigmYWM5N19jb21wbGV0aW9uKTsKLQotCWFjX2NvZGVjX2NtZCA9IHJlYWRsKHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfQ09ERUNfQ01EKTsKLQlhY19jb2RlY19jbWQgfD0gUzNDX0FDOTdfQ09ERUNfQ01EX1JFQUQ7Ci0Jd3JpdGVsKGFjX2NvZGVjX2NtZCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19DT0RFQ19DTUQpOwotCi0JbXV0ZXhfdW5sb2NrKCZhYzk3X211dGV4KTsKLQotfQotCi1zdGF0aWMgdm9pZCBzM2MyNDQzX2FjOTdfd2FybV9yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCi17Ci0JdTMyIGFjX2dsYmN0cmw7Ci0KLQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQlhY19nbGJjdHJsID0gUzNDX0FDOTdfR0xCQ1RSTF9XQVJNUkVTRVQ7Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JbXNsZWVwKDEpOwotCi0JYWNfZ2xiY3RybCA9IDA7Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JbXNsZWVwKDEpOwotfQotCi1zdGF0aWMgdm9pZCBzM2MyNDQzX2FjOTdfY29sZF9yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCi17Ci0JdTMyIGFjX2dsYmN0cmw7Ci0KLQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQlhY19nbGJjdHJsID0gUzNDX0FDOTdfR0xCQ1RSTF9DT0xEUkVTRVQ7Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JbXNsZWVwKDEpOwotCi0JYWNfZ2xiY3RybCA9IDA7Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JbXNsZWVwKDEpOwotCi0JYWNfZ2xiY3RybCA9IHJlYWRsKHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JYWNfZ2xiY3RybCA9IFMzQ19BQzk3X0dMQkNUUkxfQUNMSU5LT047Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0JbXNsZWVwKDEpOwotCi0JYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX1RSQU5TRkVSREFUQUVOQUJMRTsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQltc2xlZXAoMSk7Ci0KLQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfUENNT1VUVE1fRE1BIHwKLQkJUzNDX0FDOTdfR0xCQ1RSTF9QQ01JTlRNX0RNQSB8IFMzQ19BQzk3X0dMQkNUUkxfTUlDSU5UTV9ETUE7Ci0Jd3JpdGVsKGFjX2dsYmN0cmwsIHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBzM2MyNDQzX2FjOTdfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlpbnQgc3RhdHVzOwotCXUzMiBhY19nbGJjdHJsOwotCi0Jc3RhdHVzID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJTVEFUKSAmIGNvZGVjX3JlYWR5OwotCi0JaWYgKHN0YXR1cykgewotCQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQkJYWNfZ2xiY3RybCAmPSB+UzNDX0FDOTdfR0xCQ1RSTF9DT0RFQ1JFQURZSUU7Ci0JCXdyaXRlbChhY19nbGJjdHJsLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCQljb21wbGV0ZSgmYWM5N19jb21wbGV0aW9uKTsKLQl9Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdHJ1Y3Qgc25kX2FjOTdfYnVzX29wcyBzb2NfYWM5N19vcHMgPSB7Ci0JLnJlYWQJPSBzM2MyNDQzX2FjOTdfcmVhZCwKLQkud3JpdGUJPSBzM2MyNDQzX2FjOTdfd3JpdGUsCi0JLndhcm1fcmVzZXQJPSBzM2MyNDQzX2FjOTdfd2FybV9yZXNldCwKLQkucmVzZXQJPSBzM2MyNDQzX2FjOTdfY29sZF9yZXNldCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzI0NDNfZG1hX2NsaWVudF9vdXQgPSB7Ci0JLm5hbWUgPSAiQUM5NyBQQ00gU3RlcmVvIG91dCIKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzI0NDNfZG1hX2NsaWVudF9pbiA9IHsKLQkubmFtZSA9ICJBQzk3IFBDTSBTdGVyZW8gaW4iCi19OwotCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2MyNDQzX2RtYV9jbGllbnRfbWljaW4gPSB7Ci0JLm5hbWUgPSAiQUM5NyBNaWMgTW9ubyBpbiIKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgczNjMjQ0M19hYzk3X3BjbV9zdGVyZW9fb3V0ID0gewotCS5jbGllbnQJCT0gJnMzYzI0NDNfZG1hX2NsaWVudF9vdXQsCi0JLmNoYW5uZWwJPSBETUFDSF9QQ01fT1VULAotCS5kbWFfYWRkcgk9IFMzQzI0NDBfUEFfQUM5NyArIFMzQ19BQzk3X1BDTV9EQVRBLAotCS5kbWFfc2l6ZQk9IDQsCi19OwotCi1zdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzYzI0NDNfYWM5N19wY21fc3RlcmVvX2luID0gewotCS5jbGllbnQJCT0gJnMzYzI0NDNfZG1hX2NsaWVudF9pbiwKLQkuY2hhbm5lbAk9IERNQUNIX1BDTV9JTiwKLQkuZG1hX2FkZHIJPSBTM0MyNDQwX1BBX0FDOTcgKyBTM0NfQUM5N19QQ01fREFUQSwKLQkuZG1hX3NpemUJPSA0LAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfZG1hX3BhcmFtcyBzM2MyNDQzX2FjOTdfbWljX21vbm9faW4gPSB7Ci0JLmNsaWVudAkJPSAmczNjMjQ0M19kbWFfY2xpZW50X21pY2luLAotCS5jaGFubmVsCT0gRE1BQ0hfTUlDX0lOLAotCS5kbWFfYWRkcgk9IFMzQzI0NDBfUEFfQUM5NyArIFMzQ19BQzk3X01JQ19EQVRBLAotCS5kbWFfc2l6ZQk9IDQsCi19OwotCi1zdGF0aWMgaW50IHMzYzI0NDNfYWM5N19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0JaW50IHJldDsKLQl1MzIgYWNfZ2xiY3RybDsKLQotCXMzYzI0eHhfYWM5Ny5yZWdzID0gaW9yZW1hcChTM0MyNDQwX1BBX0FDOTcsIDB4MTAwKTsKLQlpZiAoczNjMjR4eF9hYzk3LnJlZ3MgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTlhJTzsKLQotCXMzYzI0eHhfYWM5Ny5hYzk3X2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImFjOTciKTsKLQlpZiAoczNjMjR4eF9hYzk3LmFjOTdfY2xrID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzM2MyNDQzLWFjOTcgZmFpbGVkIHRvIGdldCBhYzk3X2Nsb2NrXG4iKTsKLQkJaW91bm1hcChzM2MyNHh4X2FjOTcucmVncyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQljbGtfZW5hYmxlKHMzYzI0eHhfYWM5Ny5hYzk3X2Nsayk7Ci0KLQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFMCwgUzNDMjQ0M19HUEUwX0FDX25SRVNFVCk7Ci0JczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTEsIFMzQzI0NDNfR1BFMV9BQ19TWU5DKTsKLQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFMiwgUzNDMjQ0M19HUEUyX0FDX0JJVENMSyk7Ci0JczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTMsIFMzQzI0NDNfR1BFM19BQ19TREkpOwotCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEU0LCBTM0MyNDQzX0dQRTRfQUNfU0RPKTsKLQotCWFjX2dsYmN0cmwgPSByZWFkbChzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCWFjX2dsYmN0cmwgPSBTM0NfQUM5N19HTEJDVFJMX0NPTERSRVNFVDsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQltc2xlZXAoMSk7Ci0KLQlhY19nbGJjdHJsID0gMDsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQltc2xlZXAoMSk7Ci0KLQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQlhY19nbGJjdHJsID0gUzNDX0FDOTdfR0xCQ1RSTF9BQ0xJTktPTjsKLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQltc2xlZXAoMSk7Ci0KLQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfVFJBTlNGRVJEQVRBRU5BQkxFOwotCXdyaXRlbChhY19nbGJjdHJsLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCi0JcmV0ID0gcmVxdWVzdF9pcnEoSVJRX1MzQzI0NHhfQUM5NywgczNjMjQ0M19hYzk3X2lycSwKLQkJSVJRRl9ESVNBQkxFRCwgIkFDOTciLCBOVUxMKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgInMzYzI0eHgtYWM5NzogaW50ZXJydXB0IHJlcXVlc3QgZmFpbGVkLlxuIik7Ci0JCWNsa19kaXNhYmxlKHMzYzI0eHhfYWM5Ny5hYzk3X2Nsayk7Ci0JCWNsa19wdXQoczNjMjR4eF9hYzk3LmFjOTdfY2xrKTsKLQkJaW91bm1hcChzM2MyNHh4X2FjOTcucmVncyk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzYzI0NDNfYWM5N19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlmcmVlX2lycShJUlFfUzNDMjQ0eF9BQzk3LCBOVUxMKTsKLQljbGtfZGlzYWJsZShzM2MyNHh4X2FjOTcuYWM5N19jbGspOwotCWNsa19wdXQoczNjMjR4eF9hYzk3LmFjOTdfY2xrKTsKLQlpb3VubWFwKHMzYzI0eHhfYWM5Ny5yZWdzKTsKLX0KLQotc3RhdGljIGludCBzM2MyNDQzX2FjOTdfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCi0JCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7Ci0KLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmczNjMjQ0M19hYzk3X3BjbV9zdGVyZW9fb3V0OwotCWVsc2UKLQkJY3B1X2RhaS0+ZG1hX2RhdGEgPSAmczNjMjQ0M19hYzk3X3BjbV9zdGVyZW9faW47Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzM2MyNDQzX2FjOTdfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKLQkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKLXsKLQl1MzIgYWNfZ2xiY3RybDsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0JaW50IGNoYW5uZWwgPSAoKHN0cnVjdCBzM2NfZG1hX3BhcmFtcyAqKQotCQkgIHJ0ZC0+ZGFpLT5jcHVfZGFpLT5kbWFfZGF0YSktPmNoYW5uZWw7Ci0KLQlhY19nbGJjdHJsID0gcmVhZGwoczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgotCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKQotCQkJYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX1BDTUlOVE1fRE1BOwotCQllbHNlCi0JCQlhY19nbGJjdHJsIHw9IFMzQ19BQzk3X0dMQkNUUkxfUENNT1VUVE1fRE1BOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKLQkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSkKLQkJCWFjX2dsYmN0cmwgJj0gflMzQ19BQzk3X0dMQkNUUkxfUENNSU5UTV9NQVNLOwotCQllbHNlCi0JCQlhY19nbGJjdHJsICY9IH5TM0NfQUM5N19HTEJDVFJMX1BDTU9VVFRNX01BU0s7Ci0JCWJyZWFrOwotCX0KLQl3cml0ZWwoYWNfZ2xiY3RybCwgczNjMjR4eF9hYzk3LnJlZ3MgKyBTM0NfQUM5N19HTEJDVFJMKTsKLQotCXMzYzI0MTBfZG1hX2N0cmwoY2hhbm5lbCwgUzNDMjQxMF9ETUFPUF9TVEFSVEVEKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzI0NDNfYWM5N19od19taWNfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotCQkJCSAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQotewotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKLQotCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQotCQlyZXR1cm4gLUVOT0RFVjsKLQllbHNlCi0JCWNwdV9kYWktPmRtYV9kYXRhID0gJnMzYzI0NDNfYWM5N19taWNfbW9ub19pbjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzI0NDNfYWM5N19taWNfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkgICAgaW50IGNtZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCi17Ci0JdTMyIGFjX2dsYmN0cmw7Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCWludCBjaGFubmVsID0gKChzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgKikKLQkJICBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGEpLT5jaGFubmVsOwotCi0JYWNfZ2xiY3RybCA9IHJlYWRsKHMzYzI0eHhfYWM5Ny5yZWdzICsgUzNDX0FDOTdfR0xCQ1RSTCk7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKLQkJYWNfZ2xiY3RybCB8PSBTM0NfQUM5N19HTEJDVFJMX1BDTUlOVE1fRE1BOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKLQkJYWNfZ2xiY3RybCAmPSB+UzNDX0FDOTdfR0xCQ1RSTF9QQ01JTlRNX01BU0s7Ci0JfQotCXdyaXRlbChhY19nbGJjdHJsLCBzM2MyNHh4X2FjOTcucmVncyArIFMzQ19BQzk3X0dMQkNUUkwpOwotCi0JczNjMjQxMF9kbWFfY3RybChjaGFubmVsLCBTM0MyNDEwX0RNQU9QX1NUQVJURUQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgczNjMjQ0M19BQzk3X1JBVEVTIChTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTEwMjUgfFwKLQkJU05EUlZfUENNX1JBVEVfMTYwMDAgfCBTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFwKLQkJU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCkKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgczNjMjQ0M19hYzk3X2RhaV9vcHMgPSB7Ci0JLmh3X3BhcmFtcwk9IHMzYzI0NDNfYWM5N19od19wYXJhbXMsCi0JLnRyaWdnZXIJPSBzM2MyNDQzX2FjOTdfdHJpZ2dlciwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHMzYzI0NDNfYWM5N19taWNfZGFpX29wcyA9IHsKLQkuaHdfcGFyYW1zCT0gczNjMjQ0M19hYzk3X2h3X21pY19wYXJhbXMsCi0JLnRyaWdnZXIJPSBzM2MyNDQzX2FjOTdfbWljX3RyaWdnZXIsCi19OwotCi1zdHJ1Y3Qgc25kX3NvY19kYWkgczNjMjQ0M19hYzk3X2RhaVtdID0gewotewotCS5uYW1lID0gInMzYzI0NDMtYWM5NyIsCi0JLmlkID0gMCwKLQkuYWM5N19jb250cm9sID0gMSwKLQkucHJvYmUgPSBzM2MyNDQzX2FjOTdfcHJvYmUsCi0JLnJlbW92ZSA9IHMzYzI0NDNfYWM5N19yZW1vdmUsCi0JLnBsYXliYWNrID0gewotCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBQbGF5YmFjayIsCi0JCS5jaGFubmVsc19taW4gPSAyLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLnJhdGVzID0gczNjMjQ0M19BQzk3X1JBVEVTLAotCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLH0sCi0JLmNhcHR1cmUgPSB7Ci0JCS5zdHJlYW1fbmFtZSA9ICJBQzk3IENhcHR1cmUiLAotCQkuY2hhbm5lbHNfbWluID0gMiwKLQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5yYXRlcyA9IHMzYzI0NDNfQUM5N19SQVRFUywKLQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSAmczNjMjQ0M19hYzk3X2RhaV9vcHMsCi19LAotewotCS5uYW1lID0gInB4YTJ4eC1hYzk3LW1pYyIsCi0JLmlkID0gMSwKLQkuYWM5N19jb250cm9sID0gMSwKLQkuY2FwdHVyZSA9IHsKLQkJLnN0cmVhbV9uYW1lID0gIkFDOTcgTWljIENhcHR1cmUiLAotCQkuY2hhbm5lbHNfbWluID0gMSwKLQkJLmNoYW5uZWxzX21heCA9IDEsCi0JCS5yYXRlcyA9IHMzYzI0NDNfQUM5N19SQVRFUywKLQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSAmczNjMjQ0M19hYzk3X21pY19kYWlfb3BzLAotfSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChzM2MyNDQzX2FjOTdfZGFpKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHNvY19hYzk3X29wcyk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHMzYzI0NDNfYWM5N19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyhzM2MyNDQzX2FjOTdfZGFpLAotCQkJCSAgICAgQVJSQVlfU0laRShzM2MyNDQzX2FjOTdfZGFpKSk7Ci19Ci1tb2R1bGVfaW5pdChzM2MyNDQzX2FjOTdfaW5pdCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzM2MyNDQzX2FjOTdfZXhpdCh2b2lkKQotewotCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKHMzYzI0NDNfYWM5N19kYWksCi0JCQkJQVJSQVlfU0laRShzM2MyNDQzX2FjOTdfZGFpKSk7Ci19Ci1tb2R1bGVfZXhpdChzM2MyNDQzX2FjOTdfZXhpdCk7Ci0KLQotTU9EVUxFX0FVVEhPUigiR3JhZW1lIEdyZWdvcnkiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQUM5NyBkcml2ZXIgZm9yIHRoZSBTYW1zdW5nIHMzYzI0NDMgY2hpcCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1hYzk3LmggYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWFjOTcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk2Zjk0MS4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWFjOTcuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiBzM2MyNHh4LWFjOTcuYyAgLS0gIEFMU0EgU29jIEF1ZGlvIExheWVyCi0gKgotICogKGMpIDIwMDcgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KLSAqIEF1dGhvcjogR3JhZW1lIEdyZWdvcnkKLSAqICAgICAgICAgZ3JhZW1lLmdyZWdvcnlAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFJldmlzaW9uIGhpc3RvcnkKLSAqICAgIDEwdGggTm92IDIwMDYgICBJbml0aWFsIHZlcnNpb24uCi0gKi8KLQotI2lmbmRlZiBTM0MyNFhYQUM5N19IXwotI2RlZmluZSBTM0MyNFhYQUM5N19IXwotCi0jZGVmaW5lIEFDX0NNRF9BRERSKHgpICh4IDw8IDE2KQotI2RlZmluZSBBQ19DTURfREFUQSh4KSAoeCAmIDB4ZmZmZikKLQotZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBzM2MyNDQzX2FjOTdfZGFpW107Ci0KLSNlbmRpZiAvKlMzQzI0WFhBQzk3X0hfKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCmluZGV4IGNjN2VkYjUuLjkzZWQzYWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYwpAQCAtMTUsMTYgKzE1LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgotI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KIAogI2luY2x1ZGUgPHBsYXQvcmVncy1zM2MyNDEyLWlpcy5oPgpAQCAtMzgsNiArMzIsMTEgQEAKICNpbmNsdWRlICJzM2MtZG1hLmgiCiAjaW5jbHVkZSAiczNjNjR4eC1pMnMuaCIKIAorLyogVGhlIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8gbWF4aW11bSBvZiB0aGUgdG90YWwgbnVtYmVyCisgKiBvZiBJMlN2MyBjb250cm9sbGVycyB0aGF0IGFueSBzdXBwb3J0ZWQgU29DIGhhcy4KKyAqLworI2RlZmluZSBNQVhfSTJTVjMJMgorCiBzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCBzM2M2NHh4X2RtYV9jbGllbnRfb3V0ID0gewogCS5uYW1lCQk9ICJJMlMgUENNIFN0ZXJlbyBvdXQiCiB9OwpAQCAtNDYsMzcgKzQ1LDEyIEBACiAJLm5hbWUJCT0gIkkyUyBQQ00gU3RlcmVvIGluIgogfTsKIAotc3RhdGljIHN0cnVjdCBzM2NfZG1hX3BhcmFtcyBzM2M2NHh4X2kyc19wY21fc3RlcmVvX291dFsyXSA9IHsKLQlbMF0gPSB7Ci0JCS5jaGFubmVsCT0gRE1BQ0hfSTJTMF9PVVQsCi0JCS5jbGllbnQJCT0gJnMzYzY0eHhfZG1hX2NsaWVudF9vdXQsCi0JCS5kbWFfYWRkcgk9IFMzQzY0WFhfUEFfSUlTMCArIFMzQzI0MTJfSUlTVFhELAotCQkuZG1hX3NpemUJPSA0LAotCX0sCi0JWzFdID0gewotCQkuY2hhbm5lbAk9IERNQUNIX0kyUzFfT1VULAotCQkuY2xpZW50CQk9ICZzM2M2NHh4X2RtYV9jbGllbnRfb3V0LAotCQkuZG1hX2FkZHIJPSBTM0M2NFhYX1BBX0lJUzEgKyBTM0MyNDEyX0lJU1RYRCwKLQkJLmRtYV9zaXplCT0gNCwKLQl9LAotfTsKK3N0YXRpYyBzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19vdXRbTUFYX0kyU1YzXTsKK3N0YXRpYyBzdHJ1Y3QgczNjX2RtYV9wYXJhbXMgczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19pbltNQVhfSTJTVjNdOworc3RhdGljIHN0cnVjdCBzM2NfaTJzdjJfaW5mbyBzM2M2NHh4X2kyc1tNQVhfSTJTVjNdOwogCi1zdGF0aWMgc3RydWN0IHMzY19kbWFfcGFyYW1zIHMzYzY0eHhfaTJzX3BjbV9zdGVyZW9faW5bMl0gPSB7Ci0JWzBdID0gewotCQkuY2hhbm5lbAk9IERNQUNIX0kyUzBfSU4sCi0JCS5jbGllbnQJCT0gJnMzYzY0eHhfZG1hX2NsaWVudF9pbiwKLQkJLmRtYV9hZGRyCT0gUzNDNjRYWF9QQV9JSVMwICsgUzNDMjQxMl9JSVNSWEQsCi0JCS5kbWFfc2l6ZQk9IDQsCi0JfSwKLQlbMV0gPSB7Ci0JCS5jaGFubmVsCT0gRE1BQ0hfSTJTMV9JTiwKLQkJLmNsaWVudAkJPSAmczNjNjR4eF9kbWFfY2xpZW50X2luLAotCQkuZG1hX2FkZHIJPSBTM0M2NFhYX1BBX0lJUzEgKyBTM0MyNDEyX0lJU1JYRCwKLQkJLmRtYV9zaXplCT0gNCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfaTJzdjJfaW5mbyBzM2M2NHh4X2kyc1syXTsKK3N0cnVjdCBzbmRfc29jX2RhaSBzM2M2NHh4X2kyc19kYWlbTUFYX0kyU1YzXTsKK0VYUE9SVF9TWU1CT0xfR1BMKHMzYzY0eHhfaTJzX2RhaSk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHMzY19pMnN2Ml9pbmZvICp0b19pbmZvKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKIHsKQEAgLTE2OSw1NSArMTQzLDEzIEBACiAJLnNldF9zeXNjbGsJPSBzM2M2NHh4X2kyc19zZXRfc3lzY2xrLAkKIH07CiAKLXN0cnVjdCBzbmRfc29jX2RhaSBzM2M2NHh4X2kyc19kYWlbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJzM2M2NHh4LWkycyIsCi0JCS5pZAkJPSAwLAotCQkucHJvYmUJCT0gczNjNjR4eF9pMnNfcHJvYmUsCi0JCS5wbGF5YmFjayA9IHsKLQkJCS5jaGFubmVsc19taW4JPSAyLAotCQkJLmNoYW5uZWxzX21heAk9IDIsCi0JCQkucmF0ZXMJCT0gUzNDNjRYWF9JMlNfUkFURVMsCi0JCQkuZm9ybWF0cwk9IFMzQzY0WFhfSTJTX0ZNVFMsCi0JCX0sCi0JCS5jYXB0dXJlID0gewotCQkJIC5jaGFubmVsc19taW4JPSAyLAotCQkJIC5jaGFubmVsc19tYXgJPSAyLAotCQkJIC5yYXRlcwkJPSBTM0M2NFhYX0kyU19SQVRFUywKLQkJCSAuZm9ybWF0cwk9IFMzQzY0WFhfSTJTX0ZNVFMsCi0JCSB9LAotCQkub3BzID0gJnMzYzY0eHhfaTJzX2RhaV9vcHMsCi0JCS5zeW1tZXRyaWNfcmF0ZXMgPSAxLAotCX0sCi0JewotCQkubmFtZQkJPSAiczNjNjR4eC1pMnMiLAotCQkuaWQJCT0gMSwKLQkJLnByb2JlCQk9IHMzYzY0eHhfaTJzX3Byb2JlLAotCQkucGxheWJhY2sgPSB7Ci0JCQkuY2hhbm5lbHNfbWluCT0gMiwKLQkJCS5jaGFubmVsc19tYXgJPSAyLAotCQkJLnJhdGVzCQk9IFMzQzY0WFhfSTJTX1JBVEVTLAotCQkJLmZvcm1hdHMJPSBTM0M2NFhYX0kyU19GTVRTLAotCQl9LAotCQkuY2FwdHVyZSA9IHsKLQkJCSAuY2hhbm5lbHNfbWluCT0gMiwKLQkJCSAuY2hhbm5lbHNfbWF4CT0gMiwKLQkJCSAucmF0ZXMJCT0gUzNDNjRYWF9JMlNfUkFURVMsCi0JCQkgLmZvcm1hdHMJPSBTM0M2NFhYX0kyU19GTVRTLAotCQkgfSwKLQkJLm9wcyA9ICZzM2M2NHh4X2kyc19kYWlfb3BzLAotCQkuc3ltbWV0cmljX3JhdGVzID0gMSwKLQl9LAotfTsKLUVYUE9SVF9TWU1CT0xfR1BMKHMzYzY0eHhfaTJzX2RhaSk7Ci0KIHN0YXRpYyBfX2RldmluaXQgaW50IHMzYzY0eHhfaWlzX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzM2NfaTJzdjJfaW5mbyAqaTJzOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpOwogCWludCByZXQ7CiAKLQlpZiAocGRldi0+aWQgPj0gQVJSQVlfU0laRShzM2M2NHh4X2kycykpIHsKKwlpZiAocGRldi0+aWQgPj0gTUFYX0kyU1YzKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImlkICVkIG91dCBvZiByYW5nZVxuIiwgcGRldi0+aWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0yMjUsMTAgKzE1Nyw0MCBAQAogCWkycyA9ICZzM2M2NHh4X2kyc1twZGV2LT5pZF07CiAJZGFpID0gJnMzYzY0eHhfaTJzX2RhaVtwZGV2LT5pZF07CiAJZGFpLT5kZXYgPSAmcGRldi0+ZGV2OworCWRhaS0+bmFtZSA9ICJzM2M2NHh4LWkycyI7CisJZGFpLT5pZCA9IHBkZXYtPmlkOworCWRhaS0+c3ltbWV0cmljX3JhdGVzID0gMTsKKwlkYWktPnBsYXliYWNrLmNoYW5uZWxzX21pbiA9IDI7CisJZGFpLT5wbGF5YmFjay5jaGFubmVsc19tYXggPSAyOworCWRhaS0+cGxheWJhY2sucmF0ZXMgPSBTM0M2NFhYX0kyU19SQVRFUzsKKwlkYWktPnBsYXliYWNrLmZvcm1hdHMgPSBTM0M2NFhYX0kyU19GTVRTOworCWRhaS0+Y2FwdHVyZS5jaGFubmVsc19taW4gPSAyOworCWRhaS0+Y2FwdHVyZS5jaGFubmVsc19tYXggPSAyOworCWRhaS0+Y2FwdHVyZS5yYXRlcyA9IFMzQzY0WFhfSTJTX1JBVEVTOworCWRhaS0+Y2FwdHVyZS5mb3JtYXRzID0gUzNDNjRYWF9JMlNfRk1UUzsKKwlkYWktPnByb2JlID0gczNjNjR4eF9pMnNfcHJvYmU7CisJZGFpLT5vcHMgPSAmczNjNjR4eF9pMnNfZGFpX29wczsKIAogCWkycy0+ZG1hX2NhcHR1cmUgPSAmczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19pbltwZGV2LT5pZF07CiAJaTJzLT5kbWFfcGxheWJhY2sgPSAmczNjNjR4eF9pMnNfcGNtX3N0ZXJlb19vdXRbcGRldi0+aWRdOwogCisJaWYgKHBkZXYtPmlkID09IDApIHsKKwkJaTJzLT5kbWFfY2FwdHVyZS0+Y2hhbm5lbCA9IERNQUNIX0kyUzBfSU47CisJCWkycy0+ZG1hX2NhcHR1cmUtPmRtYV9hZGRyID0gUzNDNjRYWF9QQV9JSVMwICsgUzNDMjQxMl9JSVNSWEQ7CisJCWkycy0+ZG1hX3BsYXliYWNrLT5jaGFubmVsID0gRE1BQ0hfSTJTMF9PVVQ7CisJCWkycy0+ZG1hX3BsYXliYWNrLT5kbWFfYWRkciA9IFMzQzY0WFhfUEFfSUlTMCArIFMzQzI0MTJfSUlTVFhEOworCX0gZWxzZSB7CisJCWkycy0+ZG1hX2NhcHR1cmUtPmNoYW5uZWwgPSBETUFDSF9JMlMxX0lOOworCQlpMnMtPmRtYV9jYXB0dXJlLT5kbWFfYWRkciA9IFMzQzY0WFhfUEFfSUlTMSArIFMzQzI0MTJfSUlTUlhEOworCQlpMnMtPmRtYV9wbGF5YmFjay0+Y2hhbm5lbCA9IERNQUNIX0kyUzFfT1VUOworCQlpMnMtPmRtYV9wbGF5YmFjay0+ZG1hX2FkZHIgPSBTM0M2NFhYX1BBX0lJUzEgKyBTM0MyNDEyX0lJU1RYRDsKKwl9CisKKwlpMnMtPmRtYV9jYXB0dXJlLT5jbGllbnQgPSAmczNjNjR4eF9kbWFfY2xpZW50X2luOworCWkycy0+ZG1hX2NhcHR1cmUtPmRtYV9zaXplID0gNDsKKwlpMnMtPmRtYV9wbGF5YmFjay0+Y2xpZW50ID0gJnMzYzY0eHhfZG1hX2NsaWVudF9vdXQ7CisJaTJzLT5kbWFfcGxheWJhY2stPmRtYV9zaXplID0gNDsKKwogCWkycy0+aWlzX2NjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJhdWRpby1idXMiKTsKIAlpZiAoSVNfRVJSKGkycy0+aWlzX2NjbGspKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgYXVkaW8tYnVzXG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3NtZGsyNDQzX3dtOTcxMC5jIGIvc291bmQvc29jL3MzYzI0eHgvc21kazI0NDNfd205NzEwLmMKaW5kZXggMTJiNzgzYi4uMzYyMjU4OCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvc21kazI0NDNfd205NzEwLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvc21kazI0NDNfd205NzEwLmMKQEAgLTIxLDcgKzIxLDcgQEAKIAogI2luY2x1ZGUgIi4uL2NvZGVjcy9hYzk3LmgiCiAjaW5jbHVkZSAiczNjLWRtYS5oIgotI2luY2x1ZGUgInMzYzI0eHgtYWM5Ny5oIgorI2luY2x1ZGUgInMzYy1hYzk3LmgiCiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHNtZGsyNDQzOwogCkBAIC0yOSw3ICsyOSw3IEBACiB7CiAJLm5hbWUgPSAiQUM5NyIsCiAJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCi0JLmNwdV9kYWkgPSAmczNjMjQ0M19hYzk3X2RhaVswXSwKKwkuY3B1X2RhaSA9ICZzM2NfYWM5N19kYWlbUzNDX0FDOTdfREFJX1BDTV0sCiAJLmNvZGVjX2RhaSA9ICZhYzk3X2RhaSwKIH0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvc21ka193bTk3MTMuYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3NtZGtfd205NzEzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRmZDM5ZgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3NtZGtfd205NzEzLmMKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIHNtZGtfd205NzEzLmMgIC0tICBTb0MgYXVkaW8gZm9yIFNNREsKKyAqCisgKiBDb3B5cmlnaHQgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiBMdGQuCisgKiBBdXRob3I6IEphc3dpbmRlciBTaW5naCBCcmFyIDxqYXNzaS5icmFyQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgIi4uL2NvZGVjcy93bTk3MTMuaCIKKyNpbmNsdWRlICJzM2MtZG1hLmgiCisjaW5jbHVkZSAiczNjLWFjOTcuaCIKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc21kazsKKworLyoKKyAqIERlZmF1bHQgQ0ZHIHN3aXRjaCBzZXR0aW5ncyB0byB1c2UgdGhpcyBkcml2ZXI6CisgKgorICogICBTTURLNjQxMDogU2V0IENGRzEgMS0zIE9uLCBDRkcyIDEtNCBPZmYKKyAqLworCisvKgorIFBsYXliYWNrIChIZWFkUGhvbmUpOi0KKwkkIGFtaXhlciBzc2V0ICdIZWFkcGhvbmUnIHVubXV0ZQorCSQgYW1peGVyIHNzZXQgJ1JpZ2h0IEhlYWRwaG9uZSBPdXQgTXV4JyAnSGVhZHBob25lJworCSQgYW1peGVyIHNzZXQgJ0xlZnQgSGVhZHBob25lIE91dCBNdXgnICdIZWFkcGhvbmUnCisJJCBhbWl4ZXIgc3NldCAnUmlnaHQgSFAgTWl4ZXIgUENNJyB1bm11dGUKKwkkIGFtaXhlciBzc2V0ICdMZWZ0IEhQIE1peGVyIFBDTScgdW5tdXRlCisKKyBDYXB0dXJlIChMaW5lSW4pOi0KKwkkIGFtaXhlciBzc2V0ICdSaWdodCBDYXB0dXJlIFNvdXJjZScgJ0xpbmUnCisJJCBhbWl4ZXIgc3NldCAnTGVmdCBDYXB0dXJlIFNvdXJjZScgJ0xpbmUnCisqLworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgc21ka19kYWkgPSB7CisJLm5hbWUgPSAiQUM5NyIsCisJLnN0cmVhbV9uYW1lID0gIkFDOTcgUENNIiwKKwkuY3B1X2RhaSA9ICZzM2NfYWM5N19kYWlbUzNDX0FDOTdfREFJX1BDTV0sCisJLmNvZGVjX2RhaSA9ICZ3bTk3MTNfZGFpW1dNOTcxM19EQUlfQUM5N19ISUZJXSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHNtZGsgPSB7CisJLm5hbWUgPSAiU01ESyIsCisJLnBsYXRmb3JtID0gJnMzYzI0eHhfc29jX3BsYXRmb3JtLAorCS5kYWlfbGluayA9ICZzbWRrX2RhaSwKKwkubnVtX2xpbmtzID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2Ugc21ka19zbmRfYWM5N19kZXZkYXRhID0geworCS5jYXJkID0gJnNtZGssCisJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtOTcxMywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbWRrX3NuZF9hYzk3X2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgc21ka19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXNtZGtfc25kX2FjOTdfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisJaWYgKCFzbWRrX3NuZF9hYzk3X2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShzbWRrX3NuZF9hYzk3X2RldmljZSwKKwkJCSAgICAgJnNtZGtfc25kX2FjOTdfZGV2ZGF0YSk7CisJc21ka19zbmRfYWM5N19kZXZkYXRhLmRldiA9ICZzbWRrX3NuZF9hYzk3X2RldmljZS0+ZGV2OworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChzbWRrX3NuZF9hYzk3X2RldmljZSk7CisJaWYgKHJldCkKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChzbWRrX3NuZF9hYzk3X2RldmljZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc21ka19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc21ka19zbmRfYWM5N19kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChzbWRrX2luaXQpOworbW9kdWxlX2V4aXQoc21ka19leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJKYXN3aW5kZXIgU2luZ2ggQnJhciwgamFzc2kuYnJhckBzYW1zdW5nLmNvbSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBTTURLK1dNOTcxMyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL0tjb25maWcgYi9zb3VuZC9zb2Mvc2gvS2NvbmZpZwppbmRleCA5ZTY5NzY1Li4xMDY2NzQ5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvS2NvbmZpZworKysgYi9zb3VuZC9zb2Mvc2gvS2NvbmZpZwpAQCAtMjYsNiArMjYsMTMgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIEZTSSBzb3VuZCBzdXBwb3J0CiAKK2NvbmZpZyBTTkRfU09DX1NINF9TSVUKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gKFNVUEVSSCB8fCBBUkNIX1NITU9CSUxFKSAmJiBIQVZFX0NMSworCXNlbGVjdCBETUFfRU5HSU5FCisJc2VsZWN0IERNQURFVklDRVMKKwlzZWxlY3QgU0hfRE1BRQorCiAjIwogIyMgQm9hcmRzCiAjIwpAQCAtNDcsNCArNTQsMjAgQEAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZ2VuZXJpYyBzb3VuZCBzdXBwb3J0IGZvciB0aGUKIAkgIEZTSSAtIEFLNDY0MiB1bml0CiAKK2NvbmZpZyBTTkRfRlNJX0RBNzIxMAorCWJvb2wgIkZTSS1EQTcyMTAgc291bmQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNORF9TT0NfU0g0X0ZTSQorCXNlbGVjdCBTTkRfU09DX0RBNzIxMAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZ2VuZXJpYyBzb3VuZCBzdXBwb3J0IGZvciB0aGUKKwkgIEZTSSAtIERBNzIxMCB1bml0CisKK2NvbmZpZyBTTkRfU0lVX01JR09SCisJdHJpc3RhdGUgIlNJVSBzb3VuZCBzdXBwb3J0IG9uIE1pZ28tUiIKKwlkZXBlbmRzIG9uIFNIX01JR09SCisJc2VsZWN0IFNORF9TT0NfU0g0X1NJVQorCXNlbGVjdCBTTkRfU09DX1dNODk3OAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc291bmQgc3VwcG9ydCBmb3IgdGhlIFNINzcyMiBNaWdvLVIgYm9hcmQKKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL01ha2VmaWxlIGIvc291bmQvc29jL3NoL01ha2VmaWxlCmluZGV4IGE2OTk3ODcuLjhhNWExOTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2Mvc2gvTWFrZWZpbGUKQEAgLTYsMTMgKzYsMTkgQEAKIHNuZC1zb2MtaGFjLW9ianMJOj0gaGFjLm8KIHNuZC1zb2Mtc3NpLW9ianMJOj0gc3NpLm8KIHNuZC1zb2MtZnNpLW9ianMJOj0gZnNpLm8KK3NuZC1zb2Mtc2l1LW9ianMJOj0gc2l1X3BjbS5vIHNpdV9kYWkubwogb2JqLSQoQ09ORklHX1NORF9TT0NfU0g0X0hBQykJKz0gc25kLXNvYy1oYWMubwogb2JqLSQoQ09ORklHX1NORF9TT0NfU0g0X1NTSSkJKz0gc25kLXNvYy1zc2kubwogb2JqLSQoQ09ORklHX1NORF9TT0NfU0g0X0ZTSSkJKz0gc25kLXNvYy1mc2kubworb2JqLSQoQ09ORklHX1NORF9TT0NfU0g0X1NJVSkJKz0gc25kLXNvYy1zaXUubwogCiAjIyBib2FyZHMKIHNuZC1zb2Mtc2g3NzYwLWFjOTctb2Jqcwk6PSBzaDc3NjAtYWM5Ny5vCiBzbmQtc29jLWZzaS1hazQ2NDItb2JqcwkJOj0gZnNpLWFrNDY0Mi5vCitzbmQtc29jLWZzaS1kYTcyMTAtb2JqcwkJOj0gZnNpLWRhNzIxMC5vCitzbmQtc29jLW1pZ29yLW9ianMJCTo9IG1pZ29yLm8KIAogb2JqLSQoQ09ORklHX1NORF9TSDc3NjBfQUM5NykJKz0gc25kLXNvYy1zaDc3NjAtYWM5Ny5vCiBvYmotJChDT05GSUdfU05EX0ZTSV9BSzQ2NDIpCSs9IHNuZC1zb2MtZnNpLWFrNDY0Mi5vCitvYmotJChDT05GSUdfU05EX0ZTSV9EQTcyMTApCSs9IHNuZC1zb2MtZnNpLWRhNzIxMC5vCitvYmotJChDT05GSUdfU05EX1NJVV9NSUdPUikJKz0gc25kLXNvYy1taWdvci5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvZnNpLWRhNzIxMC5jIGIvc291bmQvc29jL3NoL2ZzaS1kYTcyMTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2I0ZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3NoL2ZzaS1kYTcyMTAuYwpAQCAtMCwwICsxLDgzIEBACisvKgorICogZnNpLWRhNzIxMC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorCisjaW5jbHVkZSA8c291bmQvc2hfZnNpLmg+CisjaW5jbHVkZSAiLi4vY29kZWNzL2RhNzIxMC5oIgorCitzdGF0aWMgaW50IGZzaV9kYTcyMTBfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJcmV0dXJuIHNuZF9zb2NfZGFpX3NldF9mbXQoJmRhNzIxMF9kYWksCisJCQkJICAgU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAorCQkJCSAgIFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgZnNpX2RhNzIxMF9kYWkgPSB7CisJLm5hbWUJCT0gIkRBNzIxMCIsCisJLnN0cmVhbV9uYW1lCT0gIkRBNzIxMCIsCisJLmNwdV9kYWkJPSAmZnNpX3NvY19kYWlbMV0sIC8qIEZTSSBCICovCisJLmNvZGVjX2RhaQk9ICZkYTcyMTBfZGFpLAorCS5pbml0CQk9IGZzaV9kYTcyMTBfaW5pdCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGZzaV9zb2NfY2FyZCA9IHsKKwkubmFtZQkJPSAiRlNJIiwKKwkucGxhdGZvcm0JPSAmZnNpX3NvY19wbGF0Zm9ybSwKKwkuZGFpX2xpbmsJPSAmZnNpX2RhNzIxMF9kYWksCisJLm51bV9saW5rcwk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGZzaV9kYTcyMTBfc25kX2RldmRhdGEgPSB7CisJLmNhcmQJCT0gJmZzaV9zb2NfY2FyZCwKKwkuY29kZWNfZGV2CT0gJnNvY19jb2RlY19kZXZfZGE3MjEwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmZzaV9kYTcyMTBfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgZnNpX2RhNzIxMF9zb3VuZF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWZzaV9kYTcyMTBfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghZnNpX2RhNzIxMF9zbmRfZGV2aWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGZzaV9kYTcyMTBfc25kX2RldmljZSwgJmZzaV9kYTcyMTBfc25kX2RldmRhdGEpOworCWZzaV9kYTcyMTBfc25kX2RldmRhdGEuZGV2ID0gJmZzaV9kYTcyMTBfc25kX2RldmljZS0+ZGV2OworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoZnNpX2RhNzIxMF9zbmRfZGV2aWNlKTsKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGZzaV9kYTcyMTBfc25kX2RldmljZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZnNpX2RhNzIxMF9zb3VuZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZnNpX2RhNzIxMF9zbmRfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoZnNpX2RhNzIxMF9zb3VuZF9pbml0KTsKK21vZHVsZV9leGl0KGZzaV9kYTcyMTBfc291bmRfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBGU0kgREEyNzEwIik7CitNT0RVTEVfQVVUSE9SKCJLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvZnNpLmMgYi9zb3VuZC9zb2Mvc2gvZnNpLmMKaW5kZXggNDI4MTNiOC4uOTkzYWJiNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL2ZzaS5jCisrKyBiL3NvdW5kL3NvYy9zaC9mc2kuYwpAQCAtNjcsNiArNjcsNyBAQAogLyogRE9GRl9TVCAqLwogI2RlZmluZSBFUlJfT1ZFUgkweDAwMDAwMDEwCiAjZGVmaW5lIEVSUl9VTkRFUgkweDAwMDAwMDAxCisjZGVmaW5lIFNUX0VSUgkJKEVSUl9PVkVSIHwgRVJSX1VOREVSKQogCiAvKiBDTEtfUlNUICovCiAjZGVmaW5lIEJfQ0xLCQkweDAwMDAwMDEwCkBAIC05Miw2ICs5Myw3IEBACiBzdHJ1Y3QgZnNpX3ByaXYgewogCXZvaWQgX19pb21lbSAqYmFzZTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyOwogCiAJaW50IGZpZm9fbWF4OwogCWludCBjaGFuOwpAQCAtMTA4LDEwICsxMTAsOSBAQAogCXN0cnVjdCBmc2lfcHJpdiBmc2lhOwogCXN0cnVjdCBmc2lfcHJpdiBmc2liOwogCXN0cnVjdCBzaF9mc2lfcGxhdGZvcm1faW5mbyAqaW5mbzsKKwlzcGlubG9ja190IGxvY2s7CiB9OwogCi1zdGF0aWMgc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlcjsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAKQEAgLTExOSwzNSArMTIwLDM1IEBACiAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBfX2ZzaV9yZWdfd3JpdGUodTMyIHJlZywgdTMyIGRhdGEpCitzdGF0aWMgdm9pZCBfX2ZzaV9yZWdfd3JpdGUodTMyIHJlZywgdTMyIGRhdGEpCiB7CiAJLyogdmFsaWQgZGF0YSBhcmVhIGlzIDI0Yml0ICovCiAJZGF0YSAmPSAweDAwZmZmZmZmOwogCi0JcmV0dXJuIGN0cmxfb3V0bChkYXRhLCByZWcpOworCV9fcmF3X3dyaXRlbChkYXRhLCByZWcpOwogfQogCiBzdGF0aWMgdTMyIF9fZnNpX3JlZ19yZWFkKHUzMiByZWcpCiB7Ci0JcmV0dXJuIGN0cmxfaW5sKHJlZyk7CisJcmV0dXJuIF9fcmF3X3JlYWRsKHJlZyk7CiB9CiAKLXN0YXRpYyBpbnQgX19mc2lfcmVnX21hc2tfc2V0KHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgZGF0YSkKK3N0YXRpYyB2b2lkIF9fZnNpX3JlZ19tYXNrX3NldCh1MzIgcmVnLCB1MzIgbWFzaywgdTMyIGRhdGEpCiB7CiAJdTMyIHZhbCA9IF9fZnNpX3JlZ19yZWFkKHJlZyk7CiAKIAl2YWwgJj0gfm1hc2s7CiAJdmFsIHw9IGRhdGEgJiBtYXNrOwogCi0JcmV0dXJuIF9fZnNpX3JlZ193cml0ZShyZWcsIHZhbCk7CisJX19mc2lfcmVnX3dyaXRlKHJlZywgdmFsKTsKIH0KIAotc3RhdGljIGludCBmc2lfcmVnX3dyaXRlKHN0cnVjdCBmc2lfcHJpdiAqZnNpLCB1MzIgcmVnLCB1MzIgZGF0YSkKK3N0YXRpYyB2b2lkIGZzaV9yZWdfd3JpdGUoc3RydWN0IGZzaV9wcml2ICpmc2ksIHUzMiByZWcsIHUzMiBkYXRhKQogewogCWlmIChyZWcgPiBSRUdfRU5EKQotCQlyZXR1cm4gLTE7CisJCXJldHVybjsKIAotCXJldHVybiBfX2ZzaV9yZWdfd3JpdGUoKHUzMikoZnNpLT5iYXNlICsgcmVnKSwgZGF0YSk7CisJX19mc2lfcmVnX3dyaXRlKCh1MzIpKGZzaS0+YmFzZSArIHJlZyksIGRhdGEpOwogfQogCiBzdGF0aWMgdTMyIGZzaV9yZWdfcmVhZChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgdTMyIHJlZykKQEAgLTE1OCwzOSArMTU5LDU1IEBACiAJcmV0dXJuIF9fZnNpX3JlZ19yZWFkKCh1MzIpKGZzaS0+YmFzZSArIHJlZykpOwogfQogCi1zdGF0aWMgaW50IGZzaV9yZWdfbWFza19zZXQoc3RydWN0IGZzaV9wcml2ICpmc2ksIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgZGF0YSkKK3N0YXRpYyB2b2lkIGZzaV9yZWdfbWFza19zZXQoc3RydWN0IGZzaV9wcml2ICpmc2ksIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgZGF0YSkKIHsKIAlpZiAocmVnID4gUkVHX0VORCkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm47CiAKLQlyZXR1cm4gX19mc2lfcmVnX21hc2tfc2V0KCh1MzIpKGZzaS0+YmFzZSArIHJlZyksIG1hc2ssIGRhdGEpOworCV9fZnNpX3JlZ19tYXNrX3NldCgodTMyKShmc2ktPmJhc2UgKyByZWcpLCBtYXNrLCBkYXRhKTsKIH0KIAotc3RhdGljIGludCBmc2lfbWFzdGVyX3dyaXRlKHUzMiByZWcsIHUzMiBkYXRhKQorc3RhdGljIHZvaWQgZnNpX21hc3Rlcl93cml0ZShzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyLCB1MzIgcmVnLCB1MzIgZGF0YSkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJaWYgKChyZWcgPCBNUkVHX1NUQVJUKSB8fAogCSAgICAocmVnID4gTVJFR19FTkQpKQotCQlyZXR1cm4gLTE7CisJCXJldHVybjsKIAotCXJldHVybiBfX2ZzaV9yZWdfd3JpdGUoKHUzMikobWFzdGVyLT5iYXNlICsgcmVnKSwgZGF0YSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1hc3Rlci0+bG9jaywgZmxhZ3MpOworCV9fZnNpX3JlZ193cml0ZSgodTMyKShtYXN0ZXItPmJhc2UgKyByZWcpLCBkYXRhKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXN0ZXItPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHUzMiBmc2lfbWFzdGVyX3JlYWQodTMyIHJlZykKK3N0YXRpYyB1MzIgZnNpX21hc3Rlcl9yZWFkKHN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIsIHUzMiByZWcpCiB7CisJdTMyIHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJaWYgKChyZWcgPCBNUkVHX1NUQVJUKSB8fAogCSAgICAocmVnID4gTVJFR19FTkQpKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBfX2ZzaV9yZWdfcmVhZCgodTMyKShtYXN0ZXItPmJhc2UgKyByZWcpKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFzdGVyLT5sb2NrLCBmbGFncyk7CisJcmV0ID0gX19mc2lfcmVnX3JlYWQoKHUzMikobWFzdGVyLT5iYXNlICsgcmVnKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFzdGVyLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGZzaV9tYXN0ZXJfbWFza19zZXQodTMyIHJlZywgdTMyIG1hc2ssIHUzMiBkYXRhKQorc3RhdGljIHZvaWQgZnNpX21hc3Rlcl9tYXNrX3NldChzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyLAorCQkJICAgICAgIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgZGF0YSkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCiAJaWYgKChyZWcgPCBNUkVHX1NUQVJUKSB8fAogCSAgICAocmVnID4gTVJFR19FTkQpKQotCQlyZXR1cm4gLTE7CisJCXJldHVybjsKIAotCXJldHVybiBfX2ZzaV9yZWdfbWFza19zZXQoKHUzMikobWFzdGVyLT5iYXNlICsgcmVnKSwgbWFzaywgZGF0YSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1hc3Rlci0+bG9jaywgZmxhZ3MpOworCV9fZnNpX3JlZ19tYXNrX3NldCgodTMyKShtYXN0ZXItPmJhc2UgKyByZWcpLCBtYXNrLCBkYXRhKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXN0ZXItPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjAwLDQzICsyMTcsMzUgQEAKIAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IGZzaV9wcml2ICpmc2lfZ2V0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorc3RhdGljIHN0cnVjdCBmc2lfbWFzdGVyICpmc2lfZ2V0X21hc3RlcihzdHJ1Y3QgZnNpX3ByaXYgKmZzaSkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkOwotCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gTlVMTDsKLQotCWlmICghc3Vic3RyZWFtIHx8ICFtYXN0ZXIpCi0JCXJldHVybiBOVUxMOwotCi0JcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3dpdGNoIChydGQtPmRhaS0+Y3B1X2RhaS0+aWQpIHsKLQljYXNlIDA6Ci0JCWZzaSA9ICZtYXN0ZXItPmZzaWE7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJZnNpID0gJm1hc3Rlci0+ZnNpYjsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGZzaTsKKwlyZXR1cm4gZnNpLT5tYXN0ZXI7CiB9CiAKIHN0YXRpYyBpbnQgZnNpX2lzX3BvcnRfYShzdHJ1Y3QgZnNpX3ByaXYgKmZzaSkKIHsKLQkvKiByZXR1cm4KLQkgKiAxIDogcG9ydCBhCi0JICogMCA6IHBvcnQgYgotCSAqLworCXJldHVybiBmc2ktPm1hc3Rlci0+YmFzZSA9PSBmc2ktPmJhc2U7Cit9CiAKLQlpZiAoZnNpID09ICZtYXN0ZXItPmZzaWEpCi0JCXJldHVybiAxOworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaSAqZnNpX2dldF9kYWkoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaV9saW5rICptYWNoaW5lID0gcnRkLT5kYWk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gIG1hY2hpbmUtPmNwdV9kYWk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnNpX3ByaXYgKmZzaV9nZXRfcHJpdihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IGZzaV9nZXRfZGFpKHN1YnN0cmVhbSk7CisKKwlyZXR1cm4gZGFpLT5wcml2YXRlX2RhdGE7CiB9CiAKIHN0YXRpYyB1MzIgZnNpX2dldF9pbmZvX2ZsYWdzKHN0cnVjdCBmc2lfcHJpdiAqZnNpKQogewogCWludCBpc19wb3J0YSA9IGZzaV9pc19wb3J0X2EoZnNpKTsKKwlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyID0gZnNpX2dldF9tYXN0ZXIoZnNpKTsKIAogCXJldHVybiBpc19wb3J0YSA/IG1hc3Rlci0+aW5mby0+cG9ydGFfZmxhZ3MgOgogCQltYXN0ZXItPmluZm8tPnBvcnRiX2ZsYWdzOwpAQCAtMzE0LDI3ICszMjMsMzAgQEAKIHN0YXRpYyB2b2lkIGZzaV9pcnFfZW5hYmxlKHN0cnVjdCBmc2lfcHJpdiAqZnNpLCBpbnQgaXNfcGxheSkKIHsKIAl1MzIgZGF0YSA9IGZzaV9wb3J0X2FiX2lvX2JpdChmc2ksIGlzX3BsYXkpOworCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIgPSBmc2lfZ2V0X21hc3Rlcihmc2kpOwogCi0JZnNpX21hc3Rlcl9tYXNrX3NldChJTVNLLCAgZGF0YSwgZGF0YSk7Ci0JZnNpX21hc3Rlcl9tYXNrX3NldChJRU1TSywgZGF0YSwgZGF0YSk7CisJZnNpX21hc3Rlcl9tYXNrX3NldChtYXN0ZXIsIElNU0ssICBkYXRhLCBkYXRhKTsKKwlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgSUVNU0ssIGRhdGEsIGRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBmc2lfaXJxX2Rpc2FibGUoc3RydWN0IGZzaV9wcml2ICpmc2ksIGludCBpc19wbGF5KQogewogCXUzMiBkYXRhID0gZnNpX3BvcnRfYWJfaW9fYml0KGZzaSwgaXNfcGxheSk7CisJc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlciA9IGZzaV9nZXRfbWFzdGVyKGZzaSk7CiAKLQlmc2lfbWFzdGVyX21hc2tfc2V0KElNU0ssICBkYXRhLCAwKTsKLQlmc2lfbWFzdGVyX21hc2tfc2V0KElFTVNLLCBkYXRhLCAwKTsKKwlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgSU1TSywgIGRhdGEsIDApOworCWZzaV9tYXN0ZXJfbWFza19zZXQobWFzdGVyLCBJRU1TSywgZGF0YSwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZzaV9jbGtfY3RybChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgaW50IGVuYWJsZSkKIHsKIAl1MzIgdmFsID0gZnNpX2lzX3BvcnRfYShmc2kpID8gKDEgPDwgMCkgOiAoMSA8PCA0KTsKKwlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyID0gZnNpX2dldF9tYXN0ZXIoZnNpKTsKIAogCWlmIChlbmFibGUpCi0JCWZzaV9tYXN0ZXJfbWFza19zZXQoQ0xLX1JTVCwgdmFsLCB2YWwpOworCQlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgQ0xLX1JTVCwgdmFsLCB2YWwpOwogCWVsc2UKLQkJZnNpX21hc3Rlcl9tYXNrX3NldChDTEtfUlNULCB2YWwsIDApOworCQlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgQ0xLX1JTVCwgdmFsLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgZnNpX2lycV9pbml0KHN0cnVjdCBmc2lfcHJpdiAqZnNpLCBpbnQgaXNfcGxheSkKQEAgLTM1NSw0MyArMzY3LDQ2IEBACiAJZnNpX3JlZ19tYXNrX3NldChmc2ksIGN0cmwsIEZJRk9fQ0xSLCBGSUZPX0NMUik7CiAKIAkvKiBjbGVhciBpbnRlcnJ1cHQgZmFjdG9yICovCi0JZnNpX21hc3Rlcl9tYXNrX3NldChJTlRfU1QsIGRhdGEsIDApOworCWZzaV9tYXN0ZXJfbWFza19zZXQoZnNpX2dldF9tYXN0ZXIoZnNpKSwgSU5UX1NULCBkYXRhLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgZnNpX3NvZnRfYWxsX3Jlc2V0KHZvaWQpCitzdGF0aWMgdm9pZCBmc2lfc29mdF9hbGxfcmVzZXQoc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlcikKIHsKLQl1MzIgc3RhdHVzID0gZnNpX21hc3Rlcl9yZWFkKFNPRlRfUlNUKTsKKwl1MzIgc3RhdHVzID0gZnNpX21hc3Rlcl9yZWFkKG1hc3RlciwgU09GVF9SU1QpOwogCiAJLyogcG9ydCBBQiByZXNldCAqLwogCXN0YXR1cyAmPSAweDAwMDAwMGZmOwotCWZzaV9tYXN0ZXJfd3JpdGUoU09GVF9SU1QsIHN0YXR1cyk7CisJZnNpX21hc3Rlcl93cml0ZShtYXN0ZXIsIFNPRlRfUlNULCBzdGF0dXMpOwogCW1kZWxheSgxMCk7CiAKIAkvKiBzb2Z0IHJlc2V0ICovCiAJc3RhdHVzICY9IDB4MDAwMDAwZjA7Ci0JZnNpX21hc3Rlcl93cml0ZShTT0ZUX1JTVCwgc3RhdHVzKTsKKwlmc2lfbWFzdGVyX3dyaXRlKG1hc3RlciwgU09GVF9SU1QsIHN0YXR1cyk7CiAJc3RhdHVzIHw9IDB4MDAwMDAwMDE7Ci0JZnNpX21hc3Rlcl93cml0ZShTT0ZUX1JTVCwgc3RhdHVzKTsKKwlmc2lfbWFzdGVyX3dyaXRlKG1hc3RlciwgU09GVF9SU1QsIHN0YXR1cyk7CiAJbWRlbGF5KDEwKTsKIH0KIAogLyogcGxheWJhY2sgaW50ZXJydXB0ICovCi1zdGF0aWMgaW50IGZzaV9kYXRhX3B1c2goc3RydWN0IGZzaV9wcml2ICpmc2kpCitzdGF0aWMgaW50IGZzaV9kYXRhX3B1c2goc3RydWN0IGZzaV9wcml2ICpmc2ksIGludCBzdGFydHVwKQogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBOVUxMOworCXUzMiBzdGF0dXM7CiAJaW50IHNlbmQ7CiAJaW50IGZpZm9fZnJlZTsKIAlpbnQgd2lkdGg7CiAJdTggKnN0YXJ0OwotCWludCBpOworCWludCBpLCBvdmVyX3BlcmlvZDsKIAogCWlmICghZnNpCQkJfHwKIAkgICAgIWZzaS0+c3Vic3RyZWFtCQl8fAogCSAgICAhZnNpLT5zdWJzdHJlYW0tPnJ1bnRpbWUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcnVudGltZSA9IGZzaS0+c3Vic3RyZWFtLT5ydW50aW1lOworCW92ZXJfcGVyaW9kCT0gMDsKKwlzdWJzdHJlYW0JPSBmc2ktPnN1YnN0cmVhbTsKKwlydW50aW1lCQk9IHN1YnN0cmVhbS0+cnVudGltZTsKIAogCS8qIEZTSSBGSUZPIGhhcyBsaW1pdC4KIAkgKiBTbywgdGhpcyBkcml2ZXIgY2FuIG5vdCBzZW5kIHBlcmlvZHMgZGF0YSBhdCBhIHRpbWUKQEAgLTM5OSw3ICs0MTQsNyBAQAogCWlmIChmc2ktPmJ5dGVfb2Zmc2V0ID49CiAJICAgIGZzaS0+cGVyaW9kX2xlbiAqIChmc2ktPnBlcmlvZHMgKyAxKSkgewogCi0JCXN1YnN0cmVhbSA9IGZzaS0+c3Vic3RyZWFtOworCQlvdmVyX3BlcmlvZCA9IDE7CiAJCWZzaS0+cGVyaW9kcyA9IChmc2ktPnBlcmlvZHMgKyAxKSAlIHJ1bnRpbWUtPnBlcmlvZHM7CiAKIAkJaWYgKDAgPT0gZnNpLT5wZXJpb2RzKQpAQCAtNDM4LDMwICs0NTMsNDQgQEAKIAogCWZzaS0+Ynl0ZV9vZmZzZXQgKz0gc2VuZCAqIHdpZHRoOwogCisJc3RhdHVzID0gZnNpX3JlZ19yZWFkKGZzaSwgRE9GRl9TVCk7CisJaWYgKCFzdGFydHVwKSB7CisJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpID0gZnNpX2dldF9kYWkoc3Vic3RyZWFtKTsKKworCQlpZiAoc3RhdHVzICYgRVJSX09WRVIpCisJCQlkZXZfZXJyKGRhaS0+ZGV2LCAib3ZlciBydW5cbiIpOworCQlpZiAoc3RhdHVzICYgRVJSX1VOREVSKQorCQkJZGV2X2VycihkYWktPmRldiwgInVuZGVyIHJ1blxuIik7CisJfQorCWZzaV9yZWdfd3JpdGUoZnNpLCBET0ZGX1NULCAwKTsKKwogCWZzaV9pcnFfZW5hYmxlKGZzaSwgMSk7CiAKLQlpZiAoc3Vic3RyZWFtKQorCWlmIChvdmVyX3BlcmlvZCkKIAkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZnNpX2RhdGFfcG9wKHN0cnVjdCBmc2lfcHJpdiAqZnNpKQorc3RhdGljIGludCBmc2lfZGF0YV9wb3Aoc3RydWN0IGZzaV9wcml2ICpmc2ksIGludCBzdGFydHVwKQogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBOVUxMOworCXUzMiBzdGF0dXM7CiAJaW50IGZyZWU7CiAJaW50IGZpZm9fZmlsbDsKIAlpbnQgd2lkdGg7CiAJdTggKnN0YXJ0OwotCWludCBpOworCWludCBpLCBvdmVyX3BlcmlvZDsKIAogCWlmICghZnNpCQkJfHwKIAkgICAgIWZzaS0+c3Vic3RyZWFtCQl8fAogCSAgICAhZnNpLT5zdWJzdHJlYW0tPnJ1bnRpbWUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcnVudGltZSA9IGZzaS0+c3Vic3RyZWFtLT5ydW50aW1lOworCW92ZXJfcGVyaW9kCT0gMDsKKwlzdWJzdHJlYW0JPSBmc2ktPnN1YnN0cmVhbTsKKwlydW50aW1lCQk9IHN1YnN0cmVhbS0+cnVudGltZTsKIAogCS8qIEZTSSBGSUZPIGhhcyBsaW1pdC4KIAkgKiBTbywgdGhpcyBkcml2ZXIgY2FuIG5vdCBzZW5kIHBlcmlvZHMgZGF0YSBhdCBhIHRpbWUKQEAgLTQ2OSw3ICs0OTgsNyBAQAogCWlmIChmc2ktPmJ5dGVfb2Zmc2V0ID49CiAJICAgIGZzaS0+cGVyaW9kX2xlbiAqIChmc2ktPnBlcmlvZHMgKyAxKSkgewogCi0JCXN1YnN0cmVhbSA9IGZzaS0+c3Vic3RyZWFtOworCQlvdmVyX3BlcmlvZCA9IDE7CiAJCWZzaS0+cGVyaW9kcyA9IChmc2ktPnBlcmlvZHMgKyAxKSAlIHJ1bnRpbWUtPnBlcmlvZHM7CiAKIAkJaWYgKDAgPT0gZnNpLT5wZXJpb2RzKQpAQCAtNTA3LDkgKzUzNiwyMCBAQAogCiAJZnNpLT5ieXRlX29mZnNldCArPSBmaWZvX2ZpbGwgKiB3aWR0aDsKIAorCXN0YXR1cyA9IGZzaV9yZWdfcmVhZChmc2ksIERJRkZfU1QpOworCWlmICghc3RhcnR1cCkgeworCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IGZzaV9nZXRfZGFpKHN1YnN0cmVhbSk7CisKKwkJaWYgKHN0YXR1cyAmIEVSUl9PVkVSKQorCQkJZGV2X2VycihkYWktPmRldiwgIm92ZXIgcnVuXG4iKTsKKwkJaWYgKHN0YXR1cyAmIEVSUl9VTkRFUikKKwkJCWRldl9lcnIoZGFpLT5kZXYsICJ1bmRlciBydW5cbiIpOworCX0KKwlmc2lfcmVnX3dyaXRlKGZzaSwgRElGRl9TVCwgMCk7CisKIAlmc2lfaXJxX2VuYWJsZShmc2ksIDApOwogCi0JaWYgKHN1YnN0cmVhbSkKKwlpZiAob3Zlcl9wZXJpb2QpCiAJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKIAogCXJldHVybiAwOwpAQCAtNTE3LDIzICs1NTcsMjQgQEAKIAogc3RhdGljIGlycXJldHVybl90IGZzaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQl1MzIgc3RhdHVzID0gZnNpX21hc3Rlcl9yZWFkKFNPRlRfUlNUKSAmIH4weDAwMDAwMDEwOwotCXUzMiBpbnRfc3QgPSBmc2lfbWFzdGVyX3JlYWQoSU5UX1NUKTsKKwlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyID0gZGF0YTsKKwl1MzIgc3RhdHVzID0gZnNpX21hc3Rlcl9yZWFkKG1hc3RlciwgU09GVF9SU1QpICYgfjB4MDAwMDAwMTA7CisJdTMyIGludF9zdCA9IGZzaV9tYXN0ZXJfcmVhZChtYXN0ZXIsIElOVF9TVCk7CiAKIAkvKiBjbGVhciBpcnEgc3RhdHVzICovCi0JZnNpX21hc3Rlcl93cml0ZShTT0ZUX1JTVCwgc3RhdHVzKTsKLQlmc2lfbWFzdGVyX3dyaXRlKFNPRlRfUlNULCBzdGF0dXMgfCAweDAwMDAwMDEwKTsKKwlmc2lfbWFzdGVyX3dyaXRlKG1hc3RlciwgU09GVF9SU1QsIHN0YXR1cyk7CisJZnNpX21hc3Rlcl93cml0ZShtYXN0ZXIsIFNPRlRfUlNULCBzdGF0dXMgfCAweDAwMDAwMDEwKTsKIAogCWlmIChpbnRfc3QgJiBJTlRfQV9PVVQpCi0JCWZzaV9kYXRhX3B1c2goJm1hc3Rlci0+ZnNpYSk7CisJCWZzaV9kYXRhX3B1c2goJm1hc3Rlci0+ZnNpYSwgMCk7CiAJaWYgKGludF9zdCAmIElOVF9CX09VVCkKLQkJZnNpX2RhdGFfcHVzaCgmbWFzdGVyLT5mc2liKTsKKwkJZnNpX2RhdGFfcHVzaCgmbWFzdGVyLT5mc2liLCAwKTsKIAlpZiAoaW50X3N0ICYgSU5UX0FfSU4pCi0JCWZzaV9kYXRhX3BvcCgmbWFzdGVyLT5mc2lhKTsKKwkJZnNpX2RhdGFfcG9wKCZtYXN0ZXItPmZzaWEsIDApOwogCWlmIChpbnRfc3QgJiBJTlRfQl9JTikKLQkJZnNpX2RhdGFfcG9wKCZtYXN0ZXItPmZzaWIpOworCQlmc2lfZGF0YV9wb3AoJm1hc3Rlci0+ZnNpYiwgMCk7CiAKLQlmc2lfbWFzdGVyX3dyaXRlKElOVF9TVCwgMHgwMDAwMDAwKTsKKwlmc2lfbWFzdGVyX3dyaXRlKG1hc3RlciwgSU5UX1NULCAweDAwMDAwMDApOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNTQ4LDcgKzU4OSw3IEBACiBzdGF0aWMgaW50IGZzaV9kYWlfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gZnNpX2dldChzdWJzdHJlYW0pOworCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gZnNpX2dldF9wcml2KHN1YnN0cmVhbSk7CiAJY29uc3QgY2hhciAqbXNnOwogCXUzMiBmbGFncyA9IGZzaV9nZXRfaW5mb19mbGFncyhmc2kpOwogCXUzMiBmbXQ7CkBAIC02NjcsNyArNzA4LDcgQEAKIHN0YXRpYyB2b2lkIGZzaV9kYWlfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gZnNpX2dldChzdWJzdHJlYW0pOworCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gZnNpX2dldF9wcml2KHN1YnN0cmVhbSk7CiAJaW50IGlzX3BsYXkgPSBzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOwogCiAJZnNpX2lycV9kaXNhYmxlKGZzaSwgaXNfcGxheSk7CkBAIC02NzksNyArNzIwLDcgQEAKIHN0YXRpYyBpbnQgZnNpX2RhaV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kLAogCQkJICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7Ci0Jc3RydWN0IGZzaV9wcml2ICpmc2kgPSBmc2lfZ2V0KHN1YnN0cmVhbSk7CisJc3RydWN0IGZzaV9wcml2ICpmc2kgPSBmc2lfZ2V0X3ByaXYoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCWludCBpc19wbGF5ID0gc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzsKIAlpbnQgcmV0ID0gMDsKQEAgLTY4OSw3ICs3MzAsNyBAQAogCQlmc2lfc3RyZWFtX3B1c2goZnNpLCBzdWJzdHJlYW0sCiAJCQkJZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSwKIAkJCQlmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+cGVyaW9kX3NpemUpKTsKLQkJcmV0ID0gaXNfcGxheSA/IGZzaV9kYXRhX3B1c2goZnNpKSA6IGZzaV9kYXRhX3BvcChmc2kpOworCQlyZXQgPSBpc19wbGF5ID8gZnNpX2RhdGFfcHVzaChmc2ksIDEpIDogZnNpX2RhdGFfcG9wKGZzaSwgMSk7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKIAkJZnNpX2lycV9kaXNhYmxlKGZzaSwgaXNfcGxheSk7CkBAIC03NjAsNyArODAxLDcgQEAKIHN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBmc2lfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gZnNpX2dldChzdWJzdHJlYW0pOworCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gZnNpX2dldF9wcml2KHN1YnN0cmVhbSk7CiAJbG9uZyBsb2NhdGlvbjsKIAogCWxvY2F0aW9uID0gKGZzaS0+Ynl0ZV9vZmZzZXQgLSAxKTsKQEAgLTg3MCwxMCArOTExLDE2IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IGZzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXI7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJdW5zaWduZWQgaW50IGlycTsKIAlpbnQgcmV0OwogCisJaWYgKDAgIT0gcGRldi0+aWQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY3VycmVudCBmc2kgc3VwcG9ydCBpZCAwIG9ubHkgbm93XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWlmICghcmVzIHx8IChpbnQpaXJxIDw9IDApIHsKQEAgLTg5OSwxNSArOTQ2LDIwIEBACiAJbWFzdGVyLT5pcnEJCT0gaXJxOwogCW1hc3Rlci0+aW5mbwkJPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAltYXN0ZXItPmZzaWEuYmFzZQk9IG1hc3Rlci0+YmFzZTsKKwltYXN0ZXItPmZzaWEubWFzdGVyCT0gbWFzdGVyOwogCW1hc3Rlci0+ZnNpYi5iYXNlCT0gbWFzdGVyLT5iYXNlICsgMHg0MDsKKwltYXN0ZXItPmZzaWIubWFzdGVyCT0gbWFzdGVyOworCXNwaW5fbG9ja19pbml0KCZtYXN0ZXItPmxvY2spOwogCiAJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CiAJcG1fcnVudGltZV9yZXN1bWUoJnBkZXYtPmRldik7CiAKIAlmc2lfc29jX2RhaVswXS5kZXYJCT0gJnBkZXYtPmRldjsKKwlmc2lfc29jX2RhaVswXS5wcml2YXRlX2RhdGEJPSAmbWFzdGVyLT5mc2lhOwogCWZzaV9zb2NfZGFpWzFdLmRldgkJPSAmcGRldi0+ZGV2OworCWZzaV9zb2NfZGFpWzFdLnByaXZhdGVfZGF0YQk9ICZtYXN0ZXItPmZzaWI7CiAKLQlmc2lfc29mdF9hbGxfcmVzZXQoKTsKKwlmc2lfc29mdF9hbGxfcmVzZXQobWFzdGVyKTsKIAogCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgJmZzaV9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsICJmc2kiLCBtYXN0ZXIpOwogCWlmIChyZXQpIHsKQEAgLTkzNyw2ICs5ODksMTAgQEAKIAogc3RhdGljIGludCBmc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IGZzaV9tYXN0ZXIgKm1hc3RlcjsKKworCW1hc3RlciA9IGZzaV9nZXRfbWFzdGVyKGZzaV9zb2NfZGFpWzBdLnByaXZhdGVfZGF0YSk7CisKIAlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcyhmc2lfc29jX2RhaSwgQVJSQVlfU0laRShmc2lfc29jX2RhaSkpOwogCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmZnNpX3NvY19wbGF0Zm9ybSk7CiAKQEAgLTk0Niw3ICsxMDAyLDEyIEBACiAKIAlpb3VubWFwKG1hc3Rlci0+YmFzZSk7CiAJa2ZyZWUobWFzdGVyKTsKLQltYXN0ZXIgPSBOVUxMOworCisJZnNpX3NvY19kYWlbMF0uZGV2CQk9IE5VTEw7CisJZnNpX3NvY19kYWlbMF0ucHJpdmF0ZV9kYXRhCT0gTlVMTDsKKwlmc2lfc29jX2RhaVsxXS5kZXYJCT0gTlVMTDsKKwlmc2lfc29jX2RhaVsxXS5wcml2YXRlX2RhdGEJPSBOVUxMOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9taWdvci5jIGIvc291bmQvc29jL3NoL21pZ29yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgyM2E1YwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zaC9taWdvci5jCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQUxTQSBTb0MgZHJpdmVyIGZvciBNaWdvLVIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CisKKyNpbmNsdWRlIDxjcHUvc2g3NzIyLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgIi4uL2NvZGVjcy93bTg5NzguaCIKKyNpbmNsdWRlICJzaXUuaCIKKworLyogRGVmYXVsdCA4MDAwSHogc2FtcGxpbmcgZnJlcXVlbmN5ICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb2RlY19mcmVxID0gODAwMCAqIDUxMjsKKworc3RhdGljIHVuc2lnbmVkIGludCB1c2VfY291bnQ7CisKKy8qIEV4dGVybmFsIGNsb2NrLCBzb3VyY2VkIGZyb20gdGhlIGNvZGVjIGF0IHRoZSBTSVVNQ0tCIHBpbiAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2l1bWNrYl9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjb2RlY19mcmVxOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2l1bWNrYl9jbGtfb3BzID0geworCS5yZWNhbGMgPSBzaXVtY2tiX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNpdW1ja2JfY2xrID0geworCS5uYW1lCQk9ICJzaXVtY2tiX2NsayIsCisJLmlkCQk9IC0xLAorCS5vcHMJCT0gJnNpdW1ja2JfY2xrX29wcywKKwkucmF0ZQkJPSAwLCAvKiBpbml0aWFsaXNlZCBhdCBydW4tdGltZSAqLworfTsKKworc3RhdGljIGludCBtaWdvcl9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOworCWludCByZXQ7CisJdW5zaWduZWQgaW50IHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIFdNODk3OF9QTEwsIDEzMDAwMDAwLAorCQkJCSAgICAgU05EX1NPQ19DTE9DS19JTik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNvZGVjX2RhaSwgV004OTc4X09QQ0xLUkFURSwgcmF0ZSAqIDUxMik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwgU05EX1NPQ19EQUlGTVRfTkJfSUYgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KHJ0ZC0+ZGFpLT5jcHVfZGFpLCBTTkRfU09DX0RBSUZNVF9OQl9JRiB8CisJCQkJICBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWNvZGVjX2ZyZXEgPSByYXRlICogNTEyOworCS8qCisJICogVGhpcyBwcm9wYWdhdGVzIHRoZSBwYXJlbnQgZnJlcXVlbmN5IGNoYW5nZSB0byBjaGlsZHJlbiBhbmQKKwkgKiByZWNhbGN1bGF0ZXMgdGhlIGZyZXF1ZW5jeSB0YWJsZQorCSAqLworCWNsa19zZXRfcmF0ZSgmc2l1bWNrYl9jbGssIGNvZGVjX2ZyZXEpOworCWRldl9kYmcoY29kZWNfZGFpLT5kZXYsICIlczogY29uZmlndXJlICVsdUh6XG4iLCBfX2Z1bmNfXywgY29kZWNfZnJlcSk7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKHJ0ZC0+ZGFpLT5jcHVfZGFpLCBTSVVfQ0xLQl9FWFQsCisJCQkJICAgICBjb2RlY19mcmVxIC8gMiwgU05EX1NPQ19DTE9DS19JTik7CisKKwlpZiAoIXJldCkKKwkJdXNlX2NvdW50Kys7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1pZ29yX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKKworCWlmICh1c2VfY291bnQpIHsKKwkJdXNlX2NvdW50LS07CisKKwkJaWYgKCF1c2VfY291bnQpCisJCQlzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgV004OTc4X1BMTCwgMCwKKwkJCQkJICAgICAgIFNORF9TT0NfQ0xPQ0tfSU4pOworCX0gZWxzZSB7CisJCWRldl9kYmcoY29kZWNfZGFpLT5kZXYsICJVbmJhbGFuY2VkIGh3X2ZyZWUhXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBtaWdvcl9kYWlfb3BzID0geworCS5od19wYXJhbXMgPSBtaWdvcl9od19wYXJhbXMsCisJLmh3X2ZyZWUgPSBtaWdvcl9od19mcmVlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IG1pZ29yX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiT25ib2FyZCBNaWNyb3Bob25lIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiRXh0ZXJuYWwgTWljcm9waG9uZSIsIE5VTEwpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJLyogSGVhZHBob25lIG91dHB1dCBjb25uZWN0ZWQgdG8gTEhQL1JIUCwgZW5hYmxlIE9VVDQgZm9yIFZNSUQgKi8KKwl7ICJIZWFkcGhvbmUiLCBOVUxMLCAgIk9VVDQgVk1JRCIgfSwKKwl7ICJPVVQ0IFZNSUQiLCBOVUxMLCAgIkxIUCIgfSwKKwl7ICJPVVQ0IFZNSUQiLCBOVUxMLCAgIlJIUCIgfSwKKworCS8qIE9uLWJvYXJkIG1pY3JvcGhvbmUgKi8KKwl7ICJSTUlDTiIsIE5VTEwsICJNaWMgQmlhcyIgfSwKKwl7ICJSTUlDUCIsIE5VTEwsICJNaWMgQmlhcyIgfSwKKwl7ICJNaWMgQmlhcyIsIE5VTEwsICJPbmJvYXJkIE1pY3JvcGhvbmUiIH0sCisKKwkvKiBFeHRlcm5hbCBtaWNyb3Bob25lICovCisJeyAiTE1JQ04iLCBOVUxMLCAiTWljIEJpYXMiIH0sCisJeyAiTE1JQ1AiLCBOVUxMLCAiTWljIEJpYXMiIH0sCisJeyAiTWljIEJpYXMiLCBOVUxMLCAiRXh0ZXJuYWwgTWljcm9waG9uZSIgfSwKK307CisKK3N0YXRpYyBpbnQgbWlnb3JfZGFpX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIG1pZ29yX2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUobWlnb3JfZGFwbV93aWRnZXRzKSk7CisKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIG1pZ29yIGRpZ2l0YWwgYXVkaW8gaW50ZXJmYWNlIGdsdWUgLSBjb25uZWN0cyBjb2RlYyA8LS0+IENQVSAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIG1pZ29yX2RhaSA9IHsKKwkubmFtZSA9ICJ3bTg5NzgiLAorCS5zdHJlYW1fbmFtZSA9ICJXTTg5NzgiLAorCS5jcHVfZGFpID0gJnNpdV9pMnNfZGFpLAorCS5jb2RlY19kYWkgPSAmd204OTc4X2RhaSwKKwkub3BzID0gJm1pZ29yX2RhaV9vcHMsCisJLmluaXQgPSBtaWdvcl9kYWlfaW5pdCwKK307CisKKy8qIG1pZ29yIGF1ZGlvIG1hY2hpbmUgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbmRfc29jX21pZ29yID0geworCS5uYW1lID0gIk1pZ28tUiIsCisJLnBsYXRmb3JtID0gJnNpdV9wbGF0Zm9ybSwKKwkuZGFpX2xpbmsgPSAmbWlnb3JfZGFpLAorCS5udW1fbGlua3MgPSAxLAorfTsKKworLyogbWlnb3IgYXVkaW8gc3Vic3lzdGVtICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIG1pZ29yX3NuZF9kZXZkYXRhID0geworCS5jYXJkID0gJnNuZF9zb2NfbWlnb3IsCisJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtODk3OCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptaWdvcl9zbmRfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBtaWdvcl9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGNsa19yZWdpc3Rlcigmc2l1bWNrYl9jbGspOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogUG9ydCBudW1iZXIgdXNlZCBvbiB0aGlzIG1hY2hpbmU6IHBvcnQgQiAqLworCW1pZ29yX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIDEpOworCWlmICghbWlnb3Jfc25kX2RldmljZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVwZGV2YWxsb2M7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEobWlnb3Jfc25kX2RldmljZSwgJm1pZ29yX3NuZF9kZXZkYXRhKTsKKworCW1pZ29yX3NuZF9kZXZkYXRhLmRldiA9ICZtaWdvcl9zbmRfZGV2aWNlLT5kZXY7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG1pZ29yX3NuZF9kZXZpY2UpOworCWlmIChyZXQpCisJCWdvdG8gZXBkZXZhZGQ7CisKKwlyZXR1cm4gMDsKKworZXBkZXZhZGQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChtaWdvcl9zbmRfZGV2aWNlKTsKK2VwZGV2YWxsb2M6CisJY2xrX3VucmVnaXN0ZXIoJnNpdW1ja2JfY2xrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbWlnb3JfZXhpdCh2b2lkKQoreworCWNsa191bnJlZ2lzdGVyKCZzaXVtY2tiX2Nsayk7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobWlnb3Jfc25kX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KG1pZ29yX2luaXQpOworbW9kdWxlX2V4aXQobWlnb3JfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBNaWdvciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL3NpdS5oIGIvc291bmQvc29jL3NoL3NpdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYzA0YWIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvc2gvc2l1LmgKQEAgLTAsMCArMSwxOTMgQEAKKy8qCisgKiBzaXUuaCAtIEFMU0EgU29DIGRyaXZlciBmb3IgUmVuZXNhcyBTSDczNDMsIFNINzcyMiBTSVUgcGVyaXBoZXJhbC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBDYXJsb3MgTXVub3ogPGNhcmxvc0BrZW5hdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgU0lVX0gKKyNkZWZpbmUgU0lVX0gKKworLyogQ29tbW9uIGtlcm5lbCBhbmQgdXNlci1zcGFjZSBmaXJtd2FyZS1idWlsZGluZyBkZWZpbmVzIGFuZCB0eXBlcyAqLworCisjZGVmaW5lIFlSQU0wX1NJWkUJCSgweDAwNDAgLyA0KQkJLyogMTYgKi8KKyNkZWZpbmUgWVJBTTFfU0laRQkJKDB4MDA4MCAvIDQpCQkvKiAzMiAqLworI2RlZmluZSBZUkFNMl9TSVpFCQkoMHgwMDQwIC8gNCkJCS8qIDE2ICovCisjZGVmaW5lIFlSQU0zX1NJWkUJCSgweDAwODAgLyA0KQkJLyogMzIgKi8KKyNkZWZpbmUgWVJBTTRfU0laRQkJKDB4MDA4MCAvIDQpCQkvKiAzMiAqLworI2RlZmluZSBZUkFNX0RFRl9TSVpFCQkoWVJBTTBfU0laRSArIFlSQU0xX1NJWkUgKyBZUkFNMl9TSVpFICsgXAorCQkJCSBZUkFNM19TSVpFICsgWVJBTTRfU0laRSkKKyNkZWZpbmUgWVJBTV9GSVJfU0laRQkJKDB4MDQwMCAvIDQpCQkvKiAyNTYgKi8KKyNkZWZpbmUgWVJBTV9JSVJfU0laRQkJKDB4MDIwMCAvIDQpCQkvKiAxMjggKi8KKworI2RlZmluZSBYUkFNMF9TSVpFCQkoMHgwNDAwIC8gNCkJCS8qIDI1NiAqLworI2RlZmluZSBYUkFNMV9TSVpFCQkoMHgwMjAwIC8gNCkJCS8qIDEyOCAqLworI2RlZmluZSBYUkFNMl9TSVpFCQkoMHgwMjAwIC8gNCkJCS8qIDEyOCAqLworCisvKiBQUkFNIHByb2dyYW0gYXJyYXkgc2l6ZSAqLworI2RlZmluZSBQUkFNMF9TSVpFCQkoMHgwMTAwIC8gNCkJCS8qIDY0ICovCisjZGVmaW5lIFBSQU0xX1NJWkUJCSgoMHgyMDAwIC0gMHgwMTAwKSAvIDQpCS8qIDE5ODQgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBzaXVfc3BiX3BhcmFtIHsKKwlfX3UzMglhYjFhOwkvKiBpbnB1dCBGSUZPIGFkZHJlc3MgKi8KKwlfX3UzMglhYjBhOwkvKiBvdXRwdXQgRklGTyBhZGRyZXNzICovCisJX191MzIJZGlyOwkvKiAwPXRoZSBhdGhlciBleGNlcHQgQ1BVT1VUUFVULCAxPUNQVUlOUFVUICovCisJX191MzIJZXZlbnQ7CS8qIFNQQiBwcm9ncmFtIHN0YXJ0aW5nIGNvbmRpdGlvbnMgKi8KKwlfX3UzMglzdGZpZm87CS8qIFNURklGTyByZWdpc3RlciBzZXR0aW5nIHZhbHVlICovCisJX191MzIJdHJkYXQ7CS8qIFRSREFUIHJlZ2lzdGVyIHNldHRpbmcgdmFsdWUgKi8KK307CisKK3N0cnVjdCBzaXVfZmlybXdhcmUgeworCV9fdTMyCQkJeXJhbV9maXJfY29lZmZbWVJBTV9GSVJfU0laRV07CisJX191MzIJCQlwcmFtMFtQUkFNMF9TSVpFXTsKKwlfX3UzMgkJCXByYW0xW1BSQU0xX1NJWkVdOworCV9fdTMyCQkJeXJhbTBbWVJBTTBfU0laRV07CisJX191MzIJCQl5cmFtMVtZUkFNMV9TSVpFXTsKKwlfX3UzMgkJCXlyYW0yW1lSQU0yX1NJWkVdOworCV9fdTMyCQkJeXJhbTNbWVJBTTNfU0laRV07CisJX191MzIJCQl5cmFtNFtZUkFNNF9TSVpFXTsKKwlfX3UzMgkJCXNwYnBhcl9udW07CisJc3RydWN0IHNpdV9zcGJfcGFyYW0Jc3BicGFyWzMyXTsKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2RtYS1zaC5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYWkuaD4KKworI2RlZmluZSBTSVVfUEVSSU9EX0JZVEVTX01BWAk4MTkyCQkvKiBETUEgdHJhbnNmZXIvcGVyaW9kIHNpemUgKi8KKyNkZWZpbmUgU0lVX1BFUklPRF9CWVRFU19NSU4JMjU2CQkvKiBETUEgdHJhbnNmZXIvcGVyaW9kIHNpemUgKi8KKyNkZWZpbmUgU0lVX1BFUklPRFNfTUFYCQk2NAkJLyogTWF4IHBlcmlvZHMgaW4gYnVmZmVyICovCisjZGVmaW5lIFNJVV9QRVJJT0RTX01JTgkJNAkJLyogTWluIHBlcmlvZHMgaW4gYnVmZmVyICovCisjZGVmaW5lIFNJVV9CVUZGRVJfQllURVNfTUFYCShTSVVfUEVSSU9EX0JZVEVTX01BWCAqIFNJVV9QRVJJT0RTX01BWCkKKworLyogU0lVIHBvcnRzOiBvbmx5IG9uZSBjYW4gYmUgdXNlZCBhdCBhIHRpbWUgKi8KK2VudW0geworCVNJVV9QT1JUX0EsCisJU0lVX1BPUlRfQiwKKwlTSVVfUE9SVF9OVU0sCit9OworCisvKiBTSVUgY2xvY2sgY29uZmlndXJhdGlvbiAqLworZW51bSB7CisJU0lVX0NMS0FfUExMLAorCVNJVV9DTEtBX0VYVCwKKwlTSVVfQ0xLQl9QTEwsCisJU0lVX0NMS0JfRVhUCit9OworCitzdHJ1Y3Qgc2l1X2luZm8geworCWludAkJCXBvcnRfaWQ7CisJdTMyIF9faW9tZW0JCSpwcmFtOworCXUzMiBfX2lvbWVtCQkqeHJhbTsKKwl1MzIgX19pb21lbQkJKnlyYW07CisJdTMyIF9faW9tZW0JCSpyZWc7CisJc3RydWN0IHNpdV9maXJtd2FyZQlmdzsKK307CisKK3N0cnVjdCBzaXVfc3RyZWFtIHsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJCXRhc2tsZXQ7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtCSpzdWJzdHJlYW07CisJc25kX3BjbV9mb3JtYXRfdAkJZm9ybWF0OworCXNpemVfdAkJCQlidWZfYnl0ZXM7CisJc2l6ZV90CQkJCXBlcmlvZF9ieXRlczsKKwlpbnQJCQkJY3VyX3BlcmlvZDsJLyogUGVyaW9kIGN1cnJlbnRseSBpbiBkbWEgKi8KKwl1MzIJCQkJdm9sdW1lOworCXNuZF9wY21fc2ZyYW1lc190CQl4ZmVyX2NudDsJLyogTnVtYmVyIG9mIGZyYW1lcyAqLworCXU4CQkJCXJ3X2ZsZzsJCS8qIHRyYW5zZmVyIHN0YXR1cyAqLworCS8qIERNQSBzdGF0dXMgKi8KKwlzdHJ1Y3QgZG1hX2NoYW4JCQkqY2hhbjsJCS8qIERNQSBjaGFubmVsICovCisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yCSp0eF9kZXNjOworCWRtYV9jb29raWVfdAkJCWNvb2tpZTsKKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZQkJcGFyYW07Cit9OworCitzdHJ1Y3Qgc2l1X3BvcnQgeworCXVuc2lnbmVkIGxvbmcJCXBsYXlfY2FwOwkvKiBVc2VkIHRvIHRyYWNrIGZ1bGwgZHVwbGV4ICovCisJc3RydWN0IHNuZF9wY20JCSpwY207CisJc3RydWN0IHNpdV9zdHJlYW0JcGxheWJhY2s7CisJc3RydWN0IHNpdV9zdHJlYW0JY2FwdHVyZTsKKwl1MzIJCQlzdGZpZm87CQkvKiBTVEZJRk8gdmFsdWUgZnJvbSBmaXJtd2FyZSAqLworCXUzMgkJCXRyZGF0OwkJLyogVFJEQVQgdmFsdWUgZnJvbSBmaXJtd2FyZSAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBzaXVfcG9ydCAqc2l1X3BvcnRzW1NJVV9QT1JUX05VTV07CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNpdV9wb3J0ICpzaXVfcG9ydF9pbmZvKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPQorCQl0b19wbGF0Zm9ybV9kZXZpY2Uoc3Vic3RyZWFtLT5wY20tPmNhcmQtPmRldik7CisJcmV0dXJuIHNpdV9wb3J0c1twZGV2LT5pZF07Cit9CisKKy8qIFJlZ2lzdGVyIGFjY2VzcyAqLworc3RhdGljIGlubGluZSB2b2lkIHNpdV93cml0ZTMyKHUzMiBfX2lvbWVtICphZGRyLCB1MzIgdmFsKQoreworCV9fcmF3X3dyaXRlbCh2YWwsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBzaXVfcmVhZDMyKHUzMiBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBfX3Jhd19yZWFkbChhZGRyKTsKK30KKworLyogU0lVIHJlZ2lzdGVycyAqLworI2RlZmluZSBTSVVfSUZDVEwJKDB4MDAwIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9TUkNUTAkoMHgwMDQgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX1NGT1JNCSgweDAwOCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfQ0tDVEwJKDB4MDBjIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9UUkRBVAkoMHgwMTAgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX1NURklGTwkoMHgwMTQgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX0RQQUsJKDB4MDFjIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9DS1JFVgkoMHgwMjAgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX0VWTlRDCSgweDAyOCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfU0JDVEwJKDB4MDQwIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9TQlBTRVQJKDB4MDQ0IC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9TQkZTVFMJKDB4MDY4IC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9TQkRWQ0EJKDB4MDZjIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9TQkRWQ0IJKDB4MDcwIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9TQkFDVElWCSgweDA3NCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfRE1BSUEJKDB4MDkwIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9ETUFJQgkoMHgwOTQgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX0RNQU9BCSgweDA5OCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfRE1BT0IJKDB4MDljIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9ETUFNTAkoMHgwYTAgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX1NQU1RTCSgweDBjYyAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfU1BDVEwJKDB4MGQwIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9CUkdBU0VMCSgweDEwMCAvIHNpemVvZih1MzIpKQorI2RlZmluZSBTSVVfQlJSQQkoMHgxMDQgLyBzaXplb2YodTMyKSkKKyNkZWZpbmUgU0lVX0JSR0JTRUwJKDB4MTA4IC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIFNJVV9CUlJCCSgweDEwYyAvIHNpemVvZih1MzIpKQorCitleHRlcm4gc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gc2l1X3BsYXRmb3JtOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBzaXVfaTJzX2RhaTsKKworaW50IHNpdV9pbml0X3BvcnQoaW50IHBvcnQsIHN0cnVjdCBzaXVfcG9ydCAqKnBvcnRfaW5mbywgc3RydWN0IHNuZF9jYXJkICpjYXJkKTsKK3ZvaWQgc2l1X2ZyZWVfcG9ydChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbyk7CisKKyNlbmRpZgorCisjZW5kaWYgLyogU0lVX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9zaXVfZGFpLmMgYi9zb3VuZC9zb2Mvc2gvc2l1X2RhaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTJkMTkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvc2gvc2l1X2RhaS5jCkBAIC0wLDAgKzEsODQ3IEBACisvKgorICogc2l1X2RhaS5jIC0gQUxTQSBTb0MgZHJpdmVyIGZvciBSZW5lc2FzIFNINzM0MywgU0g3NzIyIFNJVSBwZXJpcGhlcmFsLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA2IENhcmxvcyBNdW5veiA8Y2FybG9zQGtlbmF0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vc2l1Lmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhaS5oPgorCisjaW5jbHVkZSAic2l1LmgiCisKKy8qIEJvYXJkIHNwZWNpZmljcyAqLworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikKKyMgZGVmaW5lIFNJVV9NQVhfVk9MVU1FCQkweDEwMDAKKyNlbHNlCisjIGRlZmluZSBTSVVfTUFYX1ZPTFVNRQkJMHg3ZmZmCisjZW5kaWYKKworI2RlZmluZSBQUkFNX1NJWkUJMHgyMDAwCisjZGVmaW5lIFhSQU1fU0laRQkweDgwMAorI2RlZmluZSBZUkFNX1NJWkUJMHg4MDAKKworI2RlZmluZSBYUkFNX09GRlNFVAkweDQwMDAKKyNkZWZpbmUgWVJBTV9PRkZTRVQJMHg2MDAwCisjZGVmaW5lIFJFR19PRkZTRVQJMHhjMDAwCisKKyNkZWZpbmUgUExBWUJBQ0tfRU5BQkxFRAkxCisjZGVmaW5lIENBUFRVUkVfRU5BQkxFRAkJMgorCisjZGVmaW5lIFZPTFVNRV9DQVBUVVJFCQkwCisjZGVmaW5lIFZPTFVNRV9QTEFZQkFDSwkJMQorI2RlZmluZSBERkxUX1ZPTFVNRV9MRVZFTAkweDA4MDAwODAwCisKKy8qCisgKiBTUERJRiBpcyBvbmx5IGF2YWlsYWJsZSBvbiBwb3J0IEEgYW5kIG9uIHNvbWUgU0lVIGltcGxlbWVudGF0aW9ucyBpdCBpcyBvbmx5CisgKiBhdmFpbGFibGUgZm9yIGlucHV0LiBEdWUgdG8gdGhlIGxhY2sgb2YgaGFyZHdhcmUgdG8gdGVzdCBpdCwgU1BESUYgaXMgbGVmdAorICogZGlzYWJsZWQgaW4gdGhpcyBkcml2ZXIgdmVyc2lvbgorICovCitzdHJ1Y3QgZm9ybWF0X2ZsYWcgeworCXUzMglpMnM7CisJdTMyCXBjbTsKKwl1MzIJc3BkaWY7CisJdTMyCW1hc2s7Cit9OworCitzdHJ1Y3QgcG9ydF9mbGFnIHsKKwlzdHJ1Y3QgZm9ybWF0X2ZsYWcJcGxheWJhY2s7CisJc3RydWN0IGZvcm1hdF9mbGFnCWNhcHR1cmU7Cit9OworCitzdGF0aWMgc3RydWN0IHBvcnRfZmxhZyBzaXVfZmxhZ3NbU0lVX1BPUlRfTlVNXSA9IHsKKwlbU0lVX1BPUlRfQV0gPSB7CisJCS5wbGF5YmFjayA9IHsKKwkJCS5pMnMJPSAweDUwMDAwMDAwLAorCQkJLnBjbQk9IDB4NDAwMDAwMDAsCisJCQkuc3BkaWYJPSAweDgwMDAwMDAwLAkvKiBub3Qgb24gYWxsIFNJVSB2ZXJzaW9ucyAqLworCQkJLm1hc2sJPSAweGQwMDAwMDAwLAorCQl9LAorCQkuY2FwdHVyZSA9IHsKKwkJCS5pMnMJPSAweDA1MDAwMDAwLAorCQkJLnBjbQk9IDB4MDQwMDAwMDAsCisJCQkuc3BkaWYJPSAweDA4MDAwMDAwLAorCQkJLm1hc2sJPSAweDBkMDAwMDAwLAorCQl9LAorCX0sCisJW1NJVV9QT1JUX0JdID0geworCQkucGxheWJhY2sgPSB7CisJCQkuaTJzCT0gMHgwMDUwMDAwMCwKKwkJCS5wY20JPSAweDAwNDAwMDAwLAorCQkJLnNwZGlmCT0gMCwJCS8qIGltcG9zc2libGUgLSB0dXJuIG9mZiAqLworCQkJLm1hc2sJPSAweDAwNTAwMDAwLAorCQl9LAorCQkuY2FwdHVyZSA9IHsKKwkJCS5pMnMJPSAweDAwMDUwMDAwLAorCQkJLnBjbQk9IDB4MDAwNDAwMDAsCisJCQkuc3BkaWYJPSAwLAkJLyogaW1wb3NzaWJsZSAtIHR1cm4gb2ZmICovCisJCQkubWFzawk9IDB4MDAwNTAwMDAsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyB2b2lkIHNpdV9kYWlfc3RhcnQoc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8pCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCisJZGV2X2RiZyhwb3J0X2luZm8tPnBjbS0+Y2FyZC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCS8qIFR1cm4gb24gU0lVIGNsb2NrICovCisJcG1fcnVudGltZV9nZXRfc3luYyhzaXVfaTJzX2RhaS5kZXYpOworCisJLyogSXNzdWUgc29mdHdhcmUgcmVzZXQgdG8gc2l1ICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TUkNUTCwgMCk7CisKKwkvKiBXYWl0IGZvciB0aGUgcmVzZXQgdG8gdGFrZSBlZmZlY3QgKi8KKwl1ZGVsYXkoMSk7CisKKwlwb3J0X2luZm8tPnN0ZmlmbyA9IDA7CisJcG9ydF9pbmZvLT50cmRhdCA9IDA7CisKKwkvKiBwb3J0QSwgcG9ydEIsIFNJVSBvcGVyYXRlICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TUkNUTCwgMHgzMDEpOworCisJLyogcG9ydEE9MjU2ZnMsIHBvcnRCPTI1NmZzICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9DS0NUTCwgMHg0MDQwMDAwMCk7CisKKwkvKiBwb3J0QSdzIEJSRyBkb2VzIG5vdCBkaXZpZGUgU0lVQ0tBICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9CUkdBU0VMLCAwKTsKKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX0JSUkEsIDApOworCisJLyogcG9ydEIncyBCUkcgZGl2aWRlcyBTSVVDS0IgYnkgaGFsZiAqLworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfQlJHQlNFTCwgMSk7CisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9CUlJCLCAwKTsKKworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfSUZDVEwsIDB4NDQ0NDAwMDApOworCisJLyogcG9ydEE6IDMyIGJpdC9mcywgbWFzdGVyOyBwb3J0QjogMzIgYml0L2ZzLCBtYXN0ZXIgKi8KKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NGT1JNLCAweDBjMGMwMDAwKTsKKworCS8qCisJICogVm9sdW1lIGxldmVsczogbG9va3MgbGlrZSB0aGUgRFNQIGZpcm13YXJlIGltcGxlbWVudHMgdm9sdW1lIGNvbnRyb2xzCisJICogZGlmZmVyZW50bHkgZnJvbSB3aGF0J3MgZGVzY3JpYmVkIGluIHRoZSBkYXRhc2hlZXQKKwkgKi8KKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NCRFZDQSwgcG9ydF9pbmZvLT5wbGF5YmFjay52b2x1bWUpOworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU0JEVkNCLCBwb3J0X2luZm8tPmNhcHR1cmUudm9sdW1lKTsKK30KKworc3RhdGljIHZvaWQgc2l1X2RhaV9zdG9wKHZvaWQpCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCisJLyogU0lVIHNvZnR3YXJlIHJlc2V0ICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TUkNUTCwgMCk7CisKKwkvKiBUdXJuIG9mZiBTSVUgY2xvY2sgKi8KKwlwbV9ydW50aW1lX3B1dF9zeW5jKHNpdV9pMnNfZGFpLmRldik7Cit9CisKK3N0YXRpYyB2b2lkIHNpdV9kYWlfc3BiQXNlbGVjdChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbykKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNpdV9maXJtd2FyZSAqZncgPSAmaW5mby0+Znc7CisJdTMyICp5ZGVmID0gZnctPnlyYW0wOworCXUzMiBpZHg7CisKKwkvKiBwYXRoIEEgdXNlICovCisJaWYgKCFpbmZvLT5wb3J0X2lkKQorCQlpZHggPSAxOwkJLyogcG9ydEEgKi8KKwllbHNlCisJCWlkeCA9IDI7CQkvKiBwb3J0QiAqLworCisJeWRlZlswXSA9IChmdy0+c3BicGFyW2lkeF0uYWIxYSA8PCAxNikgfAorCQkoZnctPnNwYnBhcltpZHhdLmFiMGEgPDwgOCkgfAorCQkoZnctPnNwYnBhcltpZHhdLmRpciA8PCA3KSB8IDM7CisJeWRlZlsxXSA9IGZ3LT55cmFtMFsxXTsJLyogMHgwMzAwMDMwMCAqLworCXlkZWZbMl0gPSAoMTYgLyAyKSA8PCAyNDsKKwl5ZGVmWzNdID0gZnctPnlyYW0wWzNdOwkvKiAwICovCisJeWRlZls0XSA9IGZ3LT55cmFtMFs0XTsJLyogMCAqLworCXlkZWZbN10gPSBmdy0+c3BicGFyW2lkeF0uZXZlbnQ7CisJcG9ydF9pbmZvLT5zdGZpZm8gfD0gZnctPnNwYnBhcltpZHhdLnN0ZmlmbzsKKwlwb3J0X2luZm8tPnRyZGF0IHw9IGZ3LT5zcGJwYXJbaWR4XS50cmRhdDsKK30KKworc3RhdGljIHZvaWQgc2l1X2RhaV9zcGJCc2VsZWN0KHN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2l1X2Zpcm13YXJlICpmdyA9ICZpbmZvLT5mdzsKKwl1MzIgKnlkZWYgPSBmdy0+eXJhbTA7CisJdTMyIGlkeDsKKworCS8qIHBhdGggQiB1c2UgKi8KKwlpZiAoIWluZm8tPnBvcnRfaWQpCisJCWlkeCA9IDc7CQkvKiBwb3J0QSAqLworCWVsc2UKKwkJaWR4ID0gODsJCS8qIHBvcnRCICovCisKKwl5ZGVmWzVdID0gKGZ3LT5zcGJwYXJbaWR4XS5hYjFhIDw8IDE2KSB8CisJCShmdy0+c3BicGFyW2lkeF0uYWIwYSA8PCA4KSB8IDE7CisJeWRlZls2XSA9IGZ3LT5zcGJwYXJbaWR4XS5ldmVudDsKKwlwb3J0X2luZm8tPnN0ZmlmbyB8PSBmdy0+c3BicGFyW2lkeF0uc3RmaWZvOworCXBvcnRfaW5mby0+dHJkYXQgfD0gZnctPnNwYnBhcltpZHhdLnRyZGF0OworfQorCitzdGF0aWMgdm9pZCBzaXVfZGFpX29wZW4oc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW0pCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCXUzMiBzcmN0bCwgaWZjdGw7CisKKwlzcmN0bCA9IHNpdV9yZWFkMzIoYmFzZSArIFNJVV9TUkNUTCk7CisJaWZjdGwgPSBzaXVfcmVhZDMyKGJhc2UgKyBTSVVfSUZDVEwpOworCisJc3dpdGNoIChpbmZvLT5wb3J0X2lkKSB7CisJY2FzZSBTSVVfUE9SVF9BOgorCQkvKiBwb3J0QSBvcGVyYXRlcyAqLworCQlzcmN0bCB8PSAweDIwMDsKKwkJaWZjdGwgJj0gfjB4YzI7CisJCWJyZWFrOworCWNhc2UgU0lVX1BPUlRfQjoKKwkJLyogcG9ydEIgb3BlcmF0ZXMgKi8KKwkJc3JjdGwgfD0gMHgxMDA7CisJCWlmY3RsICY9IH4weDMxOworCQlicmVhazsKKwl9CisKKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NSQ1RMLCBzcmN0bCk7CisJLyogVW5tdXRlIGFuZCBjb25maWd1cmUgcG9ydEEgKi8KKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX0lGQ1RMLCBpZmN0bCk7Cit9CisKKy8qCisgKiBBdCB0aGUgbW9tZW50IG9ubHkgZml4ZWQgTGVmdC11cHBlciwgTGVmdC1sb3dlciwgUmlnaHQtdXBwZXIsIFJpZ2h0LWxvd2VyCisgKiBwYWNraW5nIGlzIHN1cHBvcnRlZAorICovCitzdGF0aWMgdm9pZCBzaXVfZGFpX3BjbWRhdGFwYWNrKHN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwl1MzIgX19pb21lbSAqYmFzZSA9IGluZm8tPnJlZzsKKwl1MzIgZHBhazsKKworCWRwYWsgPSBzaXVfcmVhZDMyKGJhc2UgKyBTSVVfRFBBSyk7CisKKwlzd2l0Y2ggKGluZm8tPnBvcnRfaWQpIHsKKwljYXNlIFNJVV9QT1JUX0E6CisJCWRwYWsgJj0gfjB4YzAwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgU0lVX1BPUlRfQjoKKwkJZHBhayAmPSB+MHgwMGMwMDAwMDsKKwkJYnJlYWs7CisJfQorCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9EUEFLLCBkcGFrKTsKK30KKworc3RhdGljIGludCBzaXVfZGFpX3NwYnN0YXJ0KHN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwl1MzIgX19pb21lbSAqYmFzZSA9IGluZm8tPnJlZzsKKwlzdHJ1Y3Qgc2l1X2Zpcm13YXJlICpmdyA9ICZpbmZvLT5mdzsKKwl1MzIgKnlkZWYgPSBmdy0+eXJhbTA7CisJaW50IGNudDsKKwl1MzIgX19pb21lbSAqYWRkOworCXUzMiAqcHRyOworCisJLyogTG9hZCBTUEIgUHJvZ3JhbSBpbiBQUkFNICovCisJcHRyID0gZnctPnByYW0wOworCWFkZCA9IGluZm8tPnByYW07CisJZm9yIChjbnQgPSAwOyBjbnQgPCBQUkFNMF9TSVpFOyBjbnQrKywgYWRkKyssIHB0cisrKQorCQlzaXVfd3JpdGUzMihhZGQsICpwdHIpOworCisJcHRyID0gZnctPnByYW0xOworCWFkZCA9IGluZm8tPnByYW0gKyAoMHgwMTAwIC8gc2l6ZW9mKHUzMikpOworCWZvciAoY250ID0gMDsgY250IDwgUFJBTTFfU0laRTsgY250KyssIGFkZCsrLCBwdHIrKykKKwkJc2l1X3dyaXRlMzIoYWRkLCAqcHRyKTsKKworCS8qIFhSQU0gaW5pdGlhbGl6YXRpb24gKi8KKwlhZGQgPSBpbmZvLT54cmFtOworCWZvciAoY250ID0gMDsgY250IDwgWFJBTTBfU0laRSArIFhSQU0xX1NJWkUgKyBYUkFNMl9TSVpFOyBjbnQrKywgYWRkKyspCisJCXNpdV93cml0ZTMyKGFkZCwgMCk7CisKKwkvKiBZUkFNIHZhcmlhYmxlIGFyZWEgaW5pdGlhbGl6YXRpb24gKi8KKwlhZGQgPSBpbmZvLT55cmFtOworCWZvciAoY250ID0gMDsgY250IDwgWVJBTV9ERUZfU0laRTsgY250KyssIGFkZCsrKQorCQlzaXVfd3JpdGUzMihhZGQsIHlkZWZbY250XSk7CisKKwkvKiBZUkFNIEZJUiBjb2VmZmljaWVudCBhcmVhIGluaXRpYWxpemF0aW9uICovCisJYWRkID0gaW5mby0+eXJhbSArICgweDAyMDAgLyBzaXplb2YodTMyKSk7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBZUkFNX0ZJUl9TSVpFOyBjbnQrKywgYWRkKyspCisJCXNpdV93cml0ZTMyKGFkZCwgZnctPnlyYW1fZmlyX2NvZWZmW2NudF0pOworCisJLyogWVJBTSBJSVIgY29lZmZpY2llbnQgYXJlYSBpbml0aWFsaXphdGlvbiAqLworCWFkZCA9IGluZm8tPnlyYW0gKyAoMHgwNjAwIC8gc2l6ZW9mKHUzMikpOworCWZvciAoY250ID0gMDsgY250IDwgWVJBTV9JSVJfU0laRTsgY250KyssIGFkZCsrKQorCQlzaXVfd3JpdGUzMihhZGQsIDApOworCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9UUkRBVCwgcG9ydF9pbmZvLT50cmRhdCk7CisJcG9ydF9pbmZvLT50cmRhdCA9IDB4MDsKKworCisJLyogU1BCIHN0YXJ0IGNvbmRpdGlvbjogc29mdHdhcmUgKi8KKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX1NCQUNUSVYsIDApOworCS8qIFN0YXJ0IFNQQiAqLworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU0JDVEwsIDB4YzAwMDAwMDApOworCS8qIFdhaXQgZm9yIHByb2dyYW0gdG8gaGFsdCAqLworCWNudCA9IDB4MTAwMDA7CisJd2hpbGUgKC0tY250ICYmIHNpdV9yZWFkMzIoYmFzZSArIFNJVV9TQkNUTCkgIT0gMHg4MDAwMDAwMCkKKwkJY3B1X3JlbGF4KCk7CisKKwlpZiAoIWNudCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIFNQQiBwcm9ncmFtIHN0YXJ0IGFkZHJlc3Mgc2V0dGluZyAqLworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU0JQU0VULCAweDAwNDAwMDAwKTsKKwkvKiBTUEIgaGFyZHdhcmUgc3RhcnQoRklGT0NUTCBzb3VyY2UpICovCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TQkFDVElWLCAweGMwMDAwMDAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaXVfZGFpX3NwYnN0b3Aoc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8pCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TQkFDVElWLCAwKTsKKwkvKiBTUEIgc3RvcCAqLworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU0JDVEwsIDApOworCisJcG9ydF9pbmZvLT5zdGZpZm8gPSAwOworfQorCisvKgkJQVBJIGZ1bmN0aW9ucwkJKi8KKworLyogUGxheWJhY2sgYW5kIGNhcHR1cmUgaGFyZHdhcmUgcHJvcGVydGllcyBhcmUgaWRlbnRpY2FsICovCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc2l1X2RhaV9wY21faHcgPSB7CisJLmluZm8JCQk9IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVELAorCS5mb3JtYXRzCQk9IFNORFJWX1BDTV9GTVRCSVRfUzE2LAorCS5yYXRlcwkJCT0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkucmF0ZV9taW4JCT0gODAwMCwKKwkucmF0ZV9tYXgJCT0gNDgwMDAsCisJLmNoYW5uZWxzX21pbgkJPSAyLAorCS5jaGFubmVsc19tYXgJCT0gMiwKKwkuYnVmZmVyX2J5dGVzX21heAk9IFNJVV9CVUZGRVJfQllURVNfTUFYLAorCS5wZXJpb2RfYnl0ZXNfbWluCT0gU0lVX1BFUklPRF9CWVRFU19NSU4sCisJLnBlcmlvZF9ieXRlc19tYXgJPSBTSVVfUEVSSU9EX0JZVEVTX01BWCwKKwkucGVyaW9kc19taW4JCT0gU0lVX1BFUklPRFNfTUlOLAorCS5wZXJpb2RzX21heAkJPSBTSVVfUEVSSU9EU19NQVgsCit9OworCitzdGF0aWMgaW50IHNpdV9kYWlfaW5mb192b2x1bWUoc3RydWN0IHNuZF9rY29udHJvbCAqa2N0cmwsCisJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbyA9IHNuZF9rY29udHJvbF9jaGlwKGtjdHJsKTsKKworCWRldl9kYmcocG9ydF9pbmZvLT5wY20tPmNhcmQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSAyOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gU0lVX01BWF9WT0xVTUU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaXVfZGFpX2dldF92b2x1bWUoc3RydWN0IHNuZF9rY29udHJvbCAqa2N0cmwsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbyA9IHNuZF9rY29udHJvbF9jaGlwKGtjdHJsKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwb3J0X2luZm8tPnBjbS0+Y2FyZC0+ZGV2OworCXUzMiB2b2w7CisKKwlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzd2l0Y2ggKGtjdHJsLT5wcml2YXRlX3ZhbHVlKSB7CisJY2FzZSBWT0xVTUVfUExBWUJBQ0s6CisJCS8qIFBsYXliYWNrIGlzIGFsd2F5cyBvbiBwb3J0IDAgKi8KKwkJdm9sID0gcG9ydF9pbmZvLT5wbGF5YmFjay52b2x1bWU7CisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gdm9sICYgMHhmZmZmOworCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IHZvbCA+PiAxNiAmIDB4ZmZmZjsKKwkJYnJlYWs7CisJY2FzZSBWT0xVTUVfQ0FQVFVSRToKKwkJLyogQ2FwdHVyZSBpcyBhbHdheXMgb24gcG9ydCAxICovCisJCXZvbCA9IHBvcnRfaW5mby0+Y2FwdHVyZS52b2x1bWU7CisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gdm9sICYgMHhmZmZmOworCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IHZvbCA+PiAxNiAmIDB4ZmZmZjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICIlcygpIGludmFsaWQgcHJpdmF0ZV92YWx1ZT0lbGRcbiIsCisJCQlfX2Z1bmNfXywga2N0cmwtPnByaXZhdGVfdmFsdWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaXVfZGFpX3B1dF92b2x1bWUoc3RydWN0IHNuZF9rY29udHJvbCAqa2N0cmwsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbyA9IHNuZF9rY29udHJvbF9jaGlwKGtjdHJsKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwb3J0X2luZm8tPnBjbS0+Y2FyZC0+ZGV2OworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwl1MzIgX19pb21lbSAqYmFzZSA9IGluZm8tPnJlZzsKKwl1MzIgbmV3X3ZvbDsKKwl1MzIgY3VyX3ZvbDsKKworCWRldl9kYmcoZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA8IDAgfHwKKwkgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPiBTSVVfTUFYX1ZPTFVNRSB8fAorCSAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA8IDAgfHwKKwkgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPiBTSVVfTUFYX1ZPTFVNRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluZXdfdm9sID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gfAorCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA8PCAxNjsKKworCS8qIFNlZSBjb21tZW50IGFib3ZlIC0gRFNQIGZpcm13YXJlIGltcGxlbWVudGF0aW9uICovCisJc3dpdGNoIChrY3RybC0+cHJpdmF0ZV92YWx1ZSkgeworCWNhc2UgVk9MVU1FX1BMQVlCQUNLOgorCQkvKiBQbGF5YmFjayBpcyBhbHdheXMgb24gcG9ydCAwICovCisJCWN1cl92b2wgPSBwb3J0X2luZm8tPnBsYXliYWNrLnZvbHVtZTsKKwkJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TQkRWQ0EsIG5ld192b2wpOworCQlwb3J0X2luZm8tPnBsYXliYWNrLnZvbHVtZSA9IG5ld192b2w7CisJCWJyZWFrOworCWNhc2UgVk9MVU1FX0NBUFRVUkU6CisJCS8qIENhcHR1cmUgaXMgYWx3YXlzIG9uIHBvcnQgMSAqLworCQljdXJfdm9sID0gcG9ydF9pbmZvLT5jYXB0dXJlLnZvbHVtZTsKKwkJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TQkRWQ0IsIG5ld192b2wpOworCQlwb3J0X2luZm8tPmNhcHR1cmUudm9sdW1lID0gbmV3X3ZvbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICIlcygpIGludmFsaWQgcHJpdmF0ZV92YWx1ZT0lbGRcbiIsCisJCQlfX2Z1bmNfXywga2N0cmwtPnByaXZhdGVfdmFsdWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY3VyX3ZvbCAhPSBuZXdfdm9sKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcGxheWJhY2tfY29udHJvbHMgPSB7CisJLmlmYWNlCQk9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lCQk9ICJQQ00gUGxheWJhY2sgVm9sdW1lIiwKKwkuaW5kZXgJCT0gMCwKKwkuaW5mbwkJPSBzaXVfZGFpX2luZm9fdm9sdW1lLAorCS5nZXQJCT0gc2l1X2RhaV9nZXRfdm9sdW1lLAorCS5wdXQJCT0gc2l1X2RhaV9wdXRfdm9sdW1lLAorCS5wcml2YXRlX3ZhbHVlCT0gVk9MVU1FX1BMQVlCQUNLLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGNhcHR1cmVfY29udHJvbHMgPSB7CisJLmlmYWNlCQk9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lCQk9ICJQQ00gQ2FwdHVyZSBWb2x1bWUiLAorCS5pbmRleAkJPSAwLAorCS5pbmZvCQk9IHNpdV9kYWlfaW5mb192b2x1bWUsCisJLmdldAkJPSBzaXVfZGFpX2dldF92b2x1bWUsCisJLnB1dAkJPSBzaXVfZGFpX3B1dF92b2x1bWUsCisJLnByaXZhdGVfdmFsdWUJPSBWT0xVTUVfQ0FQVFVSRSwKK307CisKK2ludCBzaXVfaW5pdF9wb3J0KGludCBwb3J0LCBzdHJ1Y3Qgc2l1X3BvcnQgKipwb3J0X2luZm8sIHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjYXJkLT5kZXY7CisJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0cmw7CisJaW50IHJldDsKKworCSpwb3J0X2luZm8gPSBremFsbG9jKHNpemVvZigqKnBvcnRfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghKnBvcnRfaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXZfZGJnKGRldiwgIiVzOiBwb3J0ICMlZEAlcFxuIiwgX19mdW5jX18sIHBvcnQsICpwb3J0X2luZm8pOworCisJKCpwb3J0X2luZm8pLT5wbGF5YmFjay52b2x1bWUgPSBERkxUX1ZPTFVNRV9MRVZFTDsKKwkoKnBvcnRfaW5mbyktPmNhcHR1cmUudm9sdW1lID0gREZMVF9WT0xVTUVfTEVWRUw7CisKKwkvKgorCSAqIEFkZCBtaXhlciBzdXBwb3J0LiBUaGUgU1BCIGlzIHVzZWQgdG8gY2hhbmdlIHRoZSB2b2x1bWUuIEJvdGgKKwkgKiBwb3J0cyB1c2UgdGhlIHNhbWUgU1BCLiBUaGVyZWZvcmUsIHdlIG9ubHkgcmVnaXN0ZXIgb25lCisJICogY29udHJvbCBpbnN0YW5jZSBzaW5jZSBpdCB3aWxsIGJlIHVzZWQgYnkgYm90aCBjaGFubmVscy4KKwkgKiBJbiBlcnJvciBjYXNlIHdlIGNvbnRpbnVlIHdpdGhvdXQgY29udHJvbHMuCisJICovCisJa2N0cmwgPSBzbmRfY3RsX25ldzEoJnBsYXliYWNrX2NvbnRyb2xzLCAqcG9ydF9pbmZvKTsKKwlyZXQgPSBzbmRfY3RsX2FkZChjYXJkLCBrY3RybCk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoZGV2LAorCQkJImZhaWxlZCB0byBhZGQgcGxheWJhY2sgY29udHJvbHMgJXAgcG9ydD0lZCBlcnI9JWRcbiIsCisJCQlrY3RybCwgcG9ydCwgcmV0KTsKKworCWtjdHJsID0gc25kX2N0bF9uZXcxKCZjYXB0dXJlX2NvbnRyb2xzLCAqcG9ydF9pbmZvKTsKKwlyZXQgPSBzbmRfY3RsX2FkZChjYXJkLCBrY3RybCk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoZGV2LAorCQkJImZhaWxlZCB0byBhZGQgY2FwdHVyZSBjb250cm9scyAlcCBwb3J0PSVkIGVycj0lZFxuIiwKKwkJCWtjdHJsLCBwb3J0LCByZXQpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2l1X2ZyZWVfcG9ydChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbykKK3sKKwlrZnJlZShwb3J0X2luZm8pOworfQorCitzdGF0aWMgaW50IHNpdV9kYWlfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydCA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc2l1X3BvcnQJKnBvcnRfaW5mbyA9IHNpdV9wb3J0X2luZm8oc3Vic3RyZWFtKTsKKwlpbnQgcmV0OworCisJZGV2X2RiZyhzdWJzdHJlYW0tPnBjbS0+Y2FyZC0+ZGV2LCAiJXM6IHBvcnQ9JWRAJXBcbiIsIF9fZnVuY19fLAorCQlpbmZvLT5wb3J0X2lkLCBwb3J0X2luZm8pOworCisJc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdWJzdHJlYW0sICZzaXVfZGFpX3BjbV9odyk7CisKKwlyZXQgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydCwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOworCWlmICh1bmxpa2VseShyZXQgPCAwKSkKKwkJcmV0dXJuIHJldDsKKworCXNpdV9kYWlfc3RhcnQocG9ydF9pbmZvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaXVfZGFpX3NodXRkb3duKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNpdV9wb3J0CSpwb3J0X2luZm8gPSBzaXVfcG9ydF9pbmZvKHN1YnN0cmVhbSk7CisKKwlkZXZfZGJnKHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXYsICIlczogcG9ydD0lZEAlcFxuIiwgX19mdW5jX18sCisJCWluZm8tPnBvcnRfaWQsIHBvcnRfaW5mbyk7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJcG9ydF9pbmZvLT5wbGF5X2NhcCAmPSB+UExBWUJBQ0tfRU5BQkxFRDsKKwllbHNlCisJCXBvcnRfaW5mby0+cGxheV9jYXAgJj0gfkNBUFRVUkVfRU5BQkxFRDsKKworCS8qIFN0b3AgdGhlIHNpdSBpZiB0aGUgb3RoZXIgc3RyZWFtIGlzIG5vdCB1c2luZyBpdCAqLworCWlmICghcG9ydF9pbmZvLT5wbGF5X2NhcCkgeworCQkvKiBkdXJpbmcgc3RtcmVhZCBvciBzdG13cml0ZSA/ICovCisJCUJVR19PTihwb3J0X2luZm8tPnBsYXliYWNrLnJ3X2ZsZyB8fCBwb3J0X2luZm8tPmNhcHR1cmUucndfZmxnKTsKKwkJc2l1X2RhaV9zcGJzdG9wKHBvcnRfaW5mbyk7CisJCXNpdV9kYWlfc3RvcCgpOworCX0KK30KKworLyogUENNIHBhcnQgb2Ygc2l1X2RhaV9wbGF5YmFja19wcmVwYXJlKCkgLyBzaXVfZGFpX2NhcHR1cmVfcHJlcGFyZSgpICovCitzdGF0aWMgaW50IHNpdV9kYWlfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydCA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbyA9IHNpdV9wb3J0X2luZm8oc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbTsKKwlpbnQgc2VsZiwgcmV0OworCisJZGV2X2RiZyhzdWJzdHJlYW0tPnBjbS0+Y2FyZC0+ZGV2LAorCQkiJXM6IHBvcnQgJWQsIGFjdGl2ZSBzdHJlYW1zICVseCwgJWQgY2hhbm5lbHNcbiIsCisJCV9fZnVuY19fLCBpbmZvLT5wb3J0X2lkLCBwb3J0X2luZm8tPnBsYXlfY2FwLCBydC0+Y2hhbm5lbHMpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJc2VsZiA9IFBMQVlCQUNLX0VOQUJMRUQ7CisJCXNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5wbGF5YmFjazsKKwl9IGVsc2UgeworCQlzZWxmID0gQ0FQVFVSRV9FTkFCTEVEOworCQlzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+Y2FwdHVyZTsKKwl9CisKKwkvKiBTZXQgdXAgdGhlIHNpdSBpZiBub3QgYWxyZWFkeSBkb25lICovCisJaWYgKCFwb3J0X2luZm8tPnBsYXlfY2FwKSB7CisJCXNpdV9zdHJlYW0tPnJ3X2ZsZyA9IDA7CS8qIHN0cmVhbS1kYXRhIHRyYW5zZmVyIGZsYWcgKi8KKworCQlzaXVfZGFpX3NwYkFzZWxlY3QocG9ydF9pbmZvKTsKKwkJc2l1X2RhaV9zcGJCc2VsZWN0KHBvcnRfaW5mbyk7CisKKwkJc2l1X2RhaV9vcGVuKHNpdV9zdHJlYW0pOworCisJCXNpdV9kYWlfcGNtZGF0YXBhY2soc2l1X3N0cmVhbSk7CisKKwkJcmV0ID0gc2l1X2RhaV9zcGJzdGFydChwb3J0X2luZm8pOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlwb3J0X2luZm8tPnBsYXlfY2FwIHw9IHNlbGY7CisKK2ZhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNJVSBjYW4gc2V0IGJ1cyBmb3JtYXQgdG8gSTJTIC8gUENNIC8gU1BESUYgaW5kZXBlbmRlbnRseSBmb3IgcGxheWJhY2sgYW5kCisgKiBjYXB0dXJlLCBob3dldmVyLCB0aGUgY3VycmVudCBBUEkgc2V0cyB0aGUgYnVzIGZvcm1hdCBnbG9iYWxseSBmb3IgYSBEQUkuCisgKi8KK3N0YXRpYyBpbnQgc2l1X2RhaV9zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAorCQkJICAgdW5zaWduZWQgaW50IGZtdCkKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJdTMyIF9faW9tZW0gKmJhc2UgPSBpbmZvLT5yZWc7CisJdTMyIGlmY3RsOworCisJZGV2X2RiZyhkYWktPmRldiwgIiVzOiBmbXQgMHgleCBvbiBwb3J0ICVkXG4iLAorCQlfX2Z1bmNfXywgZm10LCBpbmZvLT5wb3J0X2lkKTsKKworCWlmIChpbmZvLT5wb3J0X2lkIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBIZXJlIHNlbGVjdCBiZXR3ZWVuIEkyUyAvIFBDTSAvIFNQRElGICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlpZmN0bCA9IHNpdV9mbGFnc1tpbmZvLT5wb3J0X2lkXS5wbGF5YmFjay5pMnMgfAorCQkJc2l1X2ZsYWdzW2luZm8tPnBvcnRfaWRdLmNhcHR1cmUuaTJzOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJaWZjdGwgPSBzaXVfZmxhZ3NbaW5mby0+cG9ydF9pZF0ucGxheWJhY2sucGNtIHwKKwkJCXNpdV9mbGFnc1tpbmZvLT5wb3J0X2lkXS5jYXB0dXJlLnBjbTsKKwkJYnJlYWs7CisJLyogU1BESUYgZGlzYWJsZWQgLSBzZWUgY29tbWVudCBhdCB0aGUgdG9wICovCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWZjdGwgfD0gfihzaXVfZmxhZ3NbaW5mby0+cG9ydF9pZF0ucGxheWJhY2subWFzayB8CisJCSAgIHNpdV9mbGFnc1tpbmZvLT5wb3J0X2lkXS5jYXB0dXJlLm1hc2spICYKKwkJc2l1X3JlYWQzMihiYXNlICsgU0lVX0lGQ1RMKTsKKwlzaXVfd3JpdGUzMihiYXNlICsgU0lVX0lGQ1RMLCBpZmN0bCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaXVfZGFpX3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIGludCBjbGtfaWQsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3QgY2xrICpzaXVfY2xrLCAqcGFyZW50X2NsazsKKwljaGFyICpzaXVfbmFtZSwgKnBhcmVudF9uYW1lOworCWludCByZXQ7CisKKwlpZiAoZGlyICE9IFNORF9TT0NfQ0xPQ0tfSU4pCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2X2RiZyhkYWktPmRldiwgIiVzOiB1c2luZyBjbG9jayAlZFxuIiwgX19mdW5jX18sIGNsa19pZCk7CisKKwlzd2l0Y2ggKGNsa19pZCkgeworCWNhc2UgU0lVX0NMS0FfUExMOgorCQlzaXVfbmFtZSA9ICJzaXVhX2NsayI7CisJCXBhcmVudF9uYW1lID0gInBsbF9jbGsiOworCQlicmVhazsKKwljYXNlIFNJVV9DTEtBX0VYVDoKKwkJc2l1X25hbWUgPSAic2l1YV9jbGsiOworCQlwYXJlbnRfbmFtZSA9ICJzaXVtY2thX2NsayI7CisJCWJyZWFrOworCWNhc2UgU0lVX0NMS0JfUExMOgorCQlzaXVfbmFtZSA9ICJzaXViX2NsayI7CisJCXBhcmVudF9uYW1lID0gInBsbF9jbGsiOworCQlicmVhazsKKwljYXNlIFNJVV9DTEtCX0VYVDoKKwkJc2l1X25hbWUgPSAic2l1Yl9jbGsiOworCQlwYXJlbnRfbmFtZSA9ICJzaXVtY2tiX2NsayI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNpdV9jbGsgPSBjbGtfZ2V0KHNpdV9pMnNfZGFpLmRldiwgc2l1X25hbWUpOworCWlmIChJU19FUlIoc2l1X2NsaykpCisJCXJldHVybiBQVFJfRVJSKHNpdV9jbGspOworCisJcGFyZW50X2NsayA9IGNsa19nZXQoc2l1X2kyc19kYWkuZGV2LCBwYXJlbnRfbmFtZSk7CisJaWYgKCFJU19FUlIocGFyZW50X2NsaykpIHsKKwkJcmV0ID0gY2xrX3NldF9wYXJlbnQoc2l1X2NsaywgcGFyZW50X2Nsayk7CisJCWlmICghcmV0KQorCQkJY2xrX3NldF9yYXRlKHNpdV9jbGssIGZyZXEpOworCQljbGtfcHV0KHBhcmVudF9jbGspOworCX0KKworCWNsa19wdXQoc2l1X2Nsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgc2l1X2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBzaXVfZGFpX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gc2l1X2RhaV9zaHV0ZG93biwKKwkucHJlcGFyZQk9IHNpdV9kYWlfcHJlcGFyZSwKKwkuc2V0X3N5c2Nsawk9IHNpdV9kYWlfc2V0X3N5c2NsaywKKwkuc2V0X2ZtdAk9IHNpdV9kYWlfc2V0X2ZtdCwKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaSBzaXVfaTJzX2RhaSA9IHsKKwkubmFtZSA9ICJzaC1zaXUiLAorCS5pZCA9IDAsCisJLnBsYXliYWNrID0geworCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTYsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJfSwKKwkuY2FwdHVyZSA9IHsKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2LAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCSB9LAorCS5vcHMgPSAmc2l1X2RhaV9vcHMsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc2l1X2kyc19kYWkpOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzaXVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OworCXN0cnVjdCByZXNvdXJjZSAqcmVzLCAqcmVnaW9uOworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbzsKKwlpbnQgcmV0OworCisJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCAic2l1X3NwYi5iaW4iLCAmcGRldi0+ZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVyZXFmdzsKKworCS8qCisJICogTG9hZGVkIGZpcm13YXJlIGlzICJjb25zdCIgLSByZWFkIG9ubHksIGJ1dCB3ZSBoYXZlIHRvIG1vZGlmeSBpdCBpbgorCSAqIHNuZF9zaXVfc2g3MzQzX3NwYkFzZWxlY3QoKSBhbmQgc25kX3NpdV9zaDczNDNfc3BiQnNlbGVjdCgpCisJICovCisJbWVtY3B5KCZpbmZvLT5mdywgZndfZW50cnktPmRhdGEsIGZ3X2VudHJ5LT5zaXplKTsKKworCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVnZXRyZXM7CisJfQorCisJcmVnaW9uID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKKwkJCQkgICAgcGRldi0+bmFtZSk7CisJaWYgKCFyZWdpb24pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiU0lVIHJlZ2lvbiBhbHJlYWR5IGNsYWltZWRcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJlcW1lbXJlZzsKKwl9CisKKwlyZXQgPSAtRU5PTUVNOworCWluZm8tPnByYW0gPSBpb3JlbWFwKHJlcy0+c3RhcnQsIFBSQU1fU0laRSk7CisJaWYgKCFpbmZvLT5wcmFtKQorCQlnb3RvIGVtYXBwcmFtOworCWluZm8tPnhyYW0gPSBpb3JlbWFwKHJlcy0+c3RhcnQgKyBYUkFNX09GRlNFVCwgWFJBTV9TSVpFKTsKKwlpZiAoIWluZm8tPnhyYW0pCisJCWdvdG8gZW1hcHhyYW07CisJaW5mby0+eXJhbSA9IGlvcmVtYXAocmVzLT5zdGFydCArIFlSQU1fT0ZGU0VULCBZUkFNX1NJWkUpOworCWlmICghaW5mby0+eXJhbSkKKwkJZ290byBlbWFweXJhbTsKKwlpbmZvLT5yZWcgPSBpb3JlbWFwKHJlcy0+c3RhcnQgKyBSRUdfT0ZGU0VULCByZXNvdXJjZV9zaXplKHJlcykgLQorCQkJICAgIFJFR19PRkZTRVQpOworCWlmICghaW5mby0+cmVnKQorCQlnb3RvIGVtYXByZWc7CisKKwlzaXVfaTJzX2RhaS5kZXYgPSAmcGRldi0+ZGV2OworCXNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YSA9IGluZm87CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaXMoJnNpdV9pMnNfZGFpLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlZGFpaW5pdDsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfcGxhdGZvcm0oJnNpdV9wbGF0Zm9ybSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXNvY3JlZ3A7CisKKwlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKKworCXJldHVybiByZXQ7CisKK2Vzb2NyZWdwOgorCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKCZzaXVfaTJzX2RhaSwgMSk7CitlZGFpaW5pdDoKKwlpb3VubWFwKGluZm8tPnJlZyk7CitlbWFwcmVnOgorCWlvdW5tYXAoaW5mby0+eXJhbSk7CitlbWFweXJhbToKKwlpb3VubWFwKGluZm8tPnhyYW0pOworZW1hcHhyYW06CisJaW91bm1hcChpbmZvLT5wcmFtKTsKK2VtYXBwcmFtOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworZXJlcW1lbXJlZzoKK2VnZXRyZXM6CitlcmVxZnc6CisJa2ZyZWUoaW5mbyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzaXVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCisJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZzaXVfcGxhdGZvcm0pOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKCZzaXVfaTJzX2RhaSwgMSk7CisKKwlpb3VubWFwKGluZm8tPnJlZyk7CisJaW91bm1hcChpbmZvLT55cmFtKTsKKwlpb3VubWFwKGluZm8tPnhyYW0pOworCWlvdW5tYXAoaW5mby0+cHJhbSk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAocmVzKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlrZnJlZShpbmZvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzaXVfZHJpdmVyID0geworCS5kcml2ZXIgCT0geworCQkubmFtZQk9ICJzaF9zaXUiLAorCX0sCisJLnByb2JlCQk9IHNpdV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNpdV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2l1X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzaXVfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNpdV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNpdV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzaXVfaW5pdCkKK21vZHVsZV9leGl0KHNpdV9leGl0KQorCitNT0RVTEVfQVVUSE9SKCJDYXJsb3MgTXVub3ogPGNhcmxvc0BrZW5hdGkuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBTSDc3MjIgU0lVIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL3NpdV9wY20uYyBiL3NvdW5kL3NvYy9zaC9zaXVfcGNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVlZmMzMAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zaC9zaXVfcGNtLmMKQEAgLTAsMCArMSw2MTYgQEAKKy8qCisgKiBzaXVfcGNtLmMgLSBBTFNBIGRyaXZlciBmb3IgUmVuZXNhcyBTSDczNDMsIFNINzcyMiBTSVUgcGVyaXBoZXJhbC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBDYXJsb3MgTXVub3ogPGNhcmxvc0BrZW5hdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYWkuaD4KKworI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KKyNpbmNsdWRlIDxhc20vc2l1Lmg+CisKKyNpbmNsdWRlICJzaXUuaCIKKworI2RlZmluZSBHRVRfTUFYX1BFUklPRFMoYnVmX2J5dGVzLCBwZXJpb2RfYnl0ZXMpIFwKKwkJCQkoKGJ1Zl9ieXRlcykgLyAocGVyaW9kX2J5dGVzKSkKKyNkZWZpbmUgUEVSSU9EX09GRlNFVChidWZfYWRkciwgcGVyaW9kX251bSwgcGVyaW9kX2J5dGVzKSBcCisJCQkJKChidWZfYWRkcikgKyAoKHBlcmlvZF9udW0pICogKHBlcmlvZF9ieXRlcykpKQorCisjZGVmaW5lIFJXRl9TVE1fUkQJCTB4MDEJCS8qIFJlYWQgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgUldGX1NUTV9XVAkJMHgwMgkJLyogV3JpdGUgaW4gcHJvZ3Jlc3MgKi8KKworc3RydWN0IHNpdV9wb3J0ICpzaXVfcG9ydHNbU0lVX1BPUlRfTlVNXTsKKworLyogdHJhbnNmZXJzaXplIGlzIG51bWJlciBvZiB1MzIgZG1hIHRyYW5zZmVycyBwZXIgcGVyaW9kICovCitzdGF0aWMgaW50IHNpdV9wY21fc3Rtd3JpdGVfc3RvcChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbykKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJdTMyIF9faW9tZW0gKmJhc2UgPSBpbmZvLT5yZWc7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5wbGF5YmFjazsKKwl1MzIgc3RmaWZvOworCisJaWYgKCFzaXVfc3RyZWFtLT5yd19mbGcpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiBvdXRwdXQgRklGTyBkaXNhYmxlICovCisJc3RmaWZvID0gc2l1X3JlYWQzMihiYXNlICsgU0lVX1NURklGTyk7CisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TVEZJRk8sIHN0ZmlmbyAmIH4weDBjMTgwYzE4KTsKKwlwcl9kZWJ1ZygiJXM6IFNURklGTyAleCAtPiAleFxuIiwgX19mdW5jX18sCisJCSBzdGZpZm8sIHN0ZmlmbyAmIH4weDBjMTgwYzE4KTsKKworCS8qIGR1cmluZyBzdG13cml0ZSBjbGVhciAqLworCXNpdV9zdHJlYW0tPnJ3X2ZsZyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaXVfcGNtX3N0bXdyaXRlX3N0YXJ0KHN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvKQoreworCXN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+cGxheWJhY2s7CisKKwlpZiAoc2l1X3N0cmVhbS0+cndfZmxnKQorCQlyZXR1cm4gLUVQRVJNOworCisJLyogQ3VycmVudCBwZXJpb2QgaW4gYnVmZmVyICovCisJcG9ydF9pbmZvLT5wbGF5YmFjay5jdXJfcGVyaW9kID0gMDsKKworCS8qIGR1cmluZyBzdG13cml0ZSBmbGFnIHNldCAqLworCXNpdV9zdHJlYW0tPnJ3X2ZsZyA9IFJXRl9TVE1fV1Q7CisKKwkvKiBETUEgdHJhbnNmZXIgc3RhcnQgKi8KKwl0YXNrbGV0X3NjaGVkdWxlKCZzaXVfc3RyZWFtLT50YXNrbGV0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaXVfZG1hX3R4X2NvbXBsZXRlKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbSA9IGFyZzsKKworCWlmICghc2l1X3N0cmVhbS0+cndfZmxnKQorCQlyZXR1cm47CisKKwkvKiBVcGRhdGUgY29tcGxldGVkIHBlcmlvZCBjb3VudCAqLworCWlmICgrK3NpdV9zdHJlYW0tPmN1cl9wZXJpb2QgPj0KKwkgICAgR0VUX01BWF9QRVJJT0RTKHNpdV9zdHJlYW0tPmJ1Zl9ieXRlcywKKwkJCSAgICBzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMpKQorCQlzaXVfc3RyZWFtLT5jdXJfcGVyaW9kID0gMDsKKworCXByX2RlYnVnKCIlczogZG9uZSBwZXJpb2QgIyVkICgldS8ldSBieXRlcyksIGNvb2tpZSAlZFxuIiwKKwkJX19mdW5jX18sIHNpdV9zdHJlYW0tPmN1cl9wZXJpb2QsCisJCXNpdV9zdHJlYW0tPmN1cl9wZXJpb2QgKiBzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMsCisJCXNpdV9zdHJlYW0tPmJ1Zl9ieXRlcywgc2l1X3N0cmVhbS0+Y29va2llKTsKKworCXRhc2tsZXRfc2NoZWR1bGUoJnNpdV9zdHJlYW0tPnRhc2tsZXQpOworCisJLyogTm90aWZ5IGFsc2E6IGEgcGVyaW9kIGlzIGRvbmUgKi8KKwlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHNpdV9zdHJlYW0tPnN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgc2l1X3BjbV93cl9zZXQoc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8sCisJCQkgIGRtYV9hZGRyX3QgYnVmZiwgdTMyIHNpemUpCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCXN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+cGxheWJhY2s7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBzaXVfc3RyZWFtLT5zdWJzdHJlYW07CisJc3RydWN0IGRldmljZSAqZGV2ID0gc3Vic3RyZWFtLT5wY20tPmNhcmQtPmRldjsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2M7CisJZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisJdTMyIHN0ZmlmbzsKKworCXNnX2luaXRfdGFibGUoJnNnLCAxKTsKKwlzZ19zZXRfcGFnZSgmc2csIHBmbl90b19wYWdlKFBGTl9ET1dOKGJ1ZmYpKSwKKwkJICAgIHNpemUsIG9mZnNldF9pbl9wYWdlKGJ1ZmYpKTsKKwlzZ19kbWFfYWRkcmVzcygmc2cpID0gYnVmZjsKKworCWRlc2MgPSBzaXVfc3RyZWFtLT5jaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX3NsYXZlX3NnKHNpdV9zdHJlYW0tPmNoYW4sCisJCSZzZywgMSwgRE1BX1RPX0RFVklDRSwgRE1BX1BSRVBfSU5URVJSVVBUIHwgRE1BX0NUUkxfQUNLKTsKKwlpZiAoIWRlc2MpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgYSBkbWEgZGVzY3JpcHRvclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRlc2MtPmNhbGxiYWNrID0gc2l1X2RtYV90eF9jb21wbGV0ZTsKKwlkZXNjLT5jYWxsYmFja19wYXJhbSA9IHNpdV9zdHJlYW07CisJY29va2llID0gZGVzYy0+dHhfc3VibWl0KGRlc2MpOworCWlmIChjb29raWUgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHN1Ym1pdCBhIGRtYSB0cmFuc2ZlclxuIik7CisJCXJldHVybiBjb29raWU7CisJfQorCisJc2l1X3N0cmVhbS0+dHhfZGVzYyA9IGRlc2M7CisJc2l1X3N0cmVhbS0+Y29va2llID0gY29va2llOworCisJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcoc2l1X3N0cmVhbS0+Y2hhbik7CisKKwkvKiBvbmx5IG91dHB1dCBGSUZPIGVuYWJsZSAqLworCXN0ZmlmbyA9IHNpdV9yZWFkMzIoYmFzZSArIFNJVV9TVEZJRk8pOworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU1RGSUZPLCBzdGZpZm8gfCAocG9ydF9pbmZvLT5zdGZpZm8gJiAweDBjMTgwYzE4KSk7CisJZGV2X2RiZyhkZXYsICIlczogU1RGSUZPICV4IC0+ICV4XG4iLCBfX2Z1bmNfXywKKwkJc3RmaWZvLCBzdGZpZm8gfCAocG9ydF9pbmZvLT5zdGZpZm8gJiAweDBjMTgwYzE4KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaXVfcGNtX3JkX3NldChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbywKKwkJCSAgZG1hX2FkZHJfdCBidWZmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJdTMyIF9faW9tZW0gKmJhc2UgPSBpbmZvLT5yZWc7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5jYXB0dXJlOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gc2l1X3N0cmVhbS0+c3Vic3RyZWFtOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXY7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjOworCWRtYV9jb29raWVfdCBjb29raWU7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCXUzMiBzdGZpZm87CisKKwlkZXZfZGJnKGRldiwgIiVzOiAldUAlbGx4XG4iLCBfX2Z1bmNfXywgc2l6ZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylidWZmKTsKKworCXNnX2luaXRfdGFibGUoJnNnLCAxKTsKKwlzZ19zZXRfcGFnZSgmc2csIHBmbl90b19wYWdlKFBGTl9ET1dOKGJ1ZmYpKSwKKwkJICAgIHNpemUsIG9mZnNldF9pbl9wYWdlKGJ1ZmYpKTsKKwlzZ19kbWFfYWRkcmVzcygmc2cpID0gYnVmZjsKKworCWRlc2MgPSBzaXVfc3RyZWFtLT5jaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX3NsYXZlX3NnKHNpdV9zdHJlYW0tPmNoYW4sCisJCSZzZywgMSwgRE1BX0ZST01fREVWSUNFLCBETUFfUFJFUF9JTlRFUlJVUFQgfCBETUFfQ1RSTF9BQ0spOworCWlmICghZGVzYykgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgZGVzY3JpcHRvclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRlc2MtPmNhbGxiYWNrID0gc2l1X2RtYV90eF9jb21wbGV0ZTsKKwlkZXNjLT5jYWxsYmFja19wYXJhbSA9IHNpdV9zdHJlYW07CisJY29va2llID0gZGVzYy0+dHhfc3VibWl0KGRlc2MpOworCWlmIChjb29raWUgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHN1Ym1pdCBkbWEgZGVzY3JpcHRvclxuIik7CisJCXJldHVybiBjb29raWU7CisJfQorCisJc2l1X3N0cmVhbS0+dHhfZGVzYyA9IGRlc2M7CisJc2l1X3N0cmVhbS0+Y29va2llID0gY29va2llOworCisJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcoc2l1X3N0cmVhbS0+Y2hhbik7CisKKwkvKiBvbmx5IGlucHV0IEZJRk8gZW5hYmxlICovCisJc3RmaWZvID0gc2l1X3JlYWQzMihiYXNlICsgU0lVX1NURklGTyk7CisJc2l1X3dyaXRlMzIoYmFzZSArIFNJVV9TVEZJRk8sIHNpdV9yZWFkMzIoYmFzZSArIFNJVV9TVEZJRk8pIHwKKwkJICAgIChwb3J0X2luZm8tPnN0ZmlmbyAmIDB4MTMwNzEzMDcpKTsKKwlkZXZfZGJnKGRldiwgIiVzOiBTVEZJRk8gJXggLT4gJXhcbiIsIF9fZnVuY19fLAorCQlzdGZpZm8sIHN0ZmlmbyB8IChwb3J0X2luZm8tPnN0ZmlmbyAmIDB4MTMwNzEzMDcpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaXVfaW9fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW0gPSAoc3RydWN0IHNpdV9zdHJlYW0gKilkYXRhOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gc2l1X3N0cmVhbS0+c3Vic3RyZWFtOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXY7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnQgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8gPSBzaXVfcG9ydF9pbmZvKHN1YnN0cmVhbSk7CisKKwlkZXZfZGJnKGRldiwgIiVzOiBmbGFncyAleFxuIiwgX19mdW5jX18sIHNpdV9zdHJlYW0tPnJ3X2ZsZyk7CisKKwlpZiAoIXNpdV9zdHJlYW0tPnJ3X2ZsZykgeworCQlkZXZfZGJnKGRldiwgIiVzOiBzdHJlYW0gaW5hY3RpdmVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpIHsKKwkJZG1hX2FkZHJfdCBidWZmOworCQlzaXplX3QgY291bnQ7CisJCXU4ICp2aXJ0OworCisJCWJ1ZmYgPSAoZG1hX2FkZHJfdClQRVJJT0RfT0ZGU0VUKHJ0LT5kbWFfYWRkciwKKwkJCQkJCXNpdV9zdHJlYW0tPmN1cl9wZXJpb2QsCisJCQkJCQlzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMpOworCQl2aXJ0ID0gUEVSSU9EX09GRlNFVChydC0+ZG1hX2FyZWEsCisJCQkJICAgICBzaXVfc3RyZWFtLT5jdXJfcGVyaW9kLAorCQkJCSAgICAgc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzKTsKKwkJY291bnQgPSBzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXM7CisKKwkJLyogRE1BIHRyYW5zZmVyIHN0YXJ0ICovCisJCXNpdV9wY21fcmRfc2V0KHBvcnRfaW5mbywgYnVmZiwgY291bnQpOworCX0gZWxzZSB7CisJCXNpdV9wY21fd3Jfc2V0KHBvcnRfaW5mbywKKwkJCSAgICAgICAoZG1hX2FkZHJfdClQRVJJT0RfT0ZGU0VUKHJ0LT5kbWFfYWRkciwKKwkJCQkJCXNpdV9zdHJlYW0tPmN1cl9wZXJpb2QsCisJCQkJCQlzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMpLAorCQkJICAgICAgIHNpdV9zdHJlYW0tPnBlcmlvZF9ieXRlcyk7CisJfQorfQorCisvKiBDYXB0dXJlICovCitzdGF0aWMgaW50IHNpdV9wY21fc3RtcmVhZF9zdGFydChzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbykKK3sKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPmNhcHR1cmU7CisKKwlpZiAoc2l1X3N0cmVhbS0+eGZlcl9jbnQgPiAweDEwMDAwMDApCisJCXJldHVybiAtRUlOVkFMOworCWlmIChzaXVfc3RyZWFtLT5yd19mbGcpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiBDdXJyZW50IHBlcmlvZCBpbiBidWZmZXIgKi8KKwlzaXVfc3RyZWFtLT5jdXJfcGVyaW9kID0gMDsKKworCS8qIGR1cmluZyBzdG1yZWFkIGZsYWcgc2V0ICovCisJc2l1X3N0cmVhbS0+cndfZmxnID0gUldGX1NUTV9SRDsKKworCXRhc2tsZXRfc2NoZWR1bGUoJnNpdV9zdHJlYW0tPnRhc2tsZXQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2l1X3BjbV9zdG1yZWFkX3N0b3Aoc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8pCit7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCXN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+Y2FwdHVyZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzaXVfc3RyZWFtLT5zdWJzdHJlYW0tPnBjbS0+Y2FyZC0+ZGV2OworCXUzMiBzdGZpZm87CisKKwlpZiAoIXNpdV9zdHJlYW0tPnJ3X2ZsZykKKwkJcmV0dXJuIC1FUEVSTTsKKworCS8qIGlucHV0IEZJRk8gZGlzYWJsZSAqLworCXN0ZmlmbyA9IHNpdV9yZWFkMzIoYmFzZSArIFNJVV9TVEZJRk8pOworCXNpdV93cml0ZTMyKGJhc2UgKyBTSVVfU1RGSUZPLCBzdGZpZm8gJiB+MHgxMzA3MTMwNyk7CisJZGV2X2RiZyhkZXYsICIlczogU1RGSUZPICV4IC0+ICV4XG4iLCBfX2Z1bmNfXywKKwkJc3RmaWZvLCBzdGZpZm8gJiB+MHgxMzA3MTMwNyk7CisKKwkvKiBkdXJpbmcgc3RtcmVhZCBmbGFnIGNsZWFyICovCisJc2l1X3N0cmVhbS0+cndfZmxnID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpdV9wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3MsCisJCQkgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzcy0+cGNtLT5jYXJkLT5kZXY7CisJaW50IHJldDsKKworCWRldl9kYmcoZGV2LCAiJXM6IHBvcnQ9JWRcbiIsIF9fZnVuY19fLCBpbmZvLT5wb3J0X2lkKTsKKworCXJldCA9IHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzcywgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycihkZXYsICJzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoKSBmYWlsZWRcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzaXVfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzcykKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNpdV9wb3J0CSpwb3J0X2luZm8gPSBzaXVfcG9ydF9pbmZvKHNzKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzcy0+cGNtLT5jYXJkLT5kZXY7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW07CisKKwlpZiAoc3MtPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+cGxheWJhY2s7CisJZWxzZQorCQlzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+Y2FwdHVyZTsKKworCWRldl9kYmcoZGV2LCAiJXM6IHBvcnQ9JWRcbiIsIF9fZnVuY19fLCBpbmZvLT5wb3J0X2lkKTsKKworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHNzKTsKK30KKworc3RhdGljIGJvb2wgZmlsdGVyKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqc2xhdmUpCit7CisJc3RydWN0IHNoX2RtYWVfc2xhdmUgKnBhcmFtID0gc2xhdmU7CisKKwlwcl9kZWJ1ZygiJXM6IHNsYXZlIElEICVkXG4iLCBfX2Z1bmNfXywgcGFyYW0tPnNsYXZlX2lkKTsKKworCWlmICh1bmxpa2VseShwYXJhbS0+ZG1hX2RldiAhPSBjaGFuLT5kZXZpY2UtPmRldikpCisJCXJldHVybiBmYWxzZTsKKworCWNoYW4tPnByaXZhdGUgPSBwYXJhbTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBzaXVfcGNtX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzcykKK3sKKwkvKiBQbGF5YmFjayAvIENhcHR1cmUgKi8KKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8gPSBzaXVfcG9ydF9pbmZvKHNzKTsKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbTsKKwl1MzIgcG9ydCA9IGluZm8tPnBvcnRfaWQ7CisJc3RydWN0IHNpdV9wbGF0Zm9ybSAqcGRhdGEgPSBzaXVfaTJzX2RhaS5kZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gc3MtPnBjbS0+Y2FyZC0+ZGV2OworCWRtYV9jYXBfbWFza190IG1hc2s7CisJc3RydWN0IHNoX2RtYWVfc2xhdmUgKnBhcmFtOworCisJZG1hX2NhcF96ZXJvKG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CisKKwlkZXZfZGJnKGRldiwgIiVzLCBwb3J0PSVkQCVwXG4iLCBfX2Z1bmNfXywgcG9ydCwgcG9ydF9pbmZvKTsKKworCWlmIChzcy0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPnBsYXliYWNrOworCQlwYXJhbSA9ICZzaXVfc3RyZWFtLT5wYXJhbTsKKwkJcGFyYW0tPnNsYXZlX2lkID0gcG9ydCA/IFNIRE1BX1NMQVZFX1NJVUJfVFggOgorCQkJU0hETUFfU0xBVkVfU0lVQV9UWDsKKwl9IGVsc2UgeworCQlzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+Y2FwdHVyZTsKKwkJcGFyYW0gPSAmc2l1X3N0cmVhbS0+cGFyYW07CisJCXBhcmFtLT5zbGF2ZV9pZCA9IHBvcnQgPyBTSERNQV9TTEFWRV9TSVVCX1JYIDoKKwkJCVNIRE1BX1NMQVZFX1NJVUFfUlg7CisJfQorCisJcGFyYW0tPmRtYV9kZXYgPSBwZGF0YS0+ZG1hX2RldjsKKwkvKiBHZXQgRE1BIGNoYW5uZWwgKi8KKwlzaXVfc3RyZWFtLT5jaGFuID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBmaWx0ZXIsIHBhcmFtKTsKKwlpZiAoIXNpdV9zdHJlYW0tPmNoYW4pIHsKKwkJZGV2X2VycihkZXYsICJETUEgY2hhbm5lbCBhbGxvY2F0aW9uIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXNpdV9zdHJlYW0tPnN1YnN0cmVhbSA9IHNzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2l1X3BjbV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnNzKQoreworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzcy0+cGNtLT5jYXJkLT5kZXY7CisJc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8gPSBzaXVfcG9ydF9pbmZvKHNzKTsKKwlzdHJ1Y3Qgc2l1X3N0cmVhbSAqc2l1X3N0cmVhbTsKKworCWRldl9kYmcoZGV2LCAiJXM6IHBvcnQ9JWRcbiIsIF9fZnVuY19fLCBpbmZvLT5wb3J0X2lkKTsKKworCWlmIChzcy0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCXNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5wbGF5YmFjazsKKwllbHNlCisJCXNpdV9zdHJlYW0gPSAmcG9ydF9pbmZvLT5jYXB0dXJlOworCisJZG1hX3JlbGVhc2VfY2hhbm5lbChzaXVfc3RyZWFtLT5jaGFuKTsKKwlzaXVfc3RyZWFtLT5jaGFuID0gTlVMTDsKKworCXNpdV9zdHJlYW0tPnN1YnN0cmVhbSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaXVfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzcykKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNpdV9wb3J0ICpwb3J0X2luZm8gPSBzaXVfcG9ydF9pbmZvKHNzKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzcy0+cGNtLT5jYXJkLT5kZXY7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAJKnJ0ID0gc3MtPnJ1bnRpbWU7CisJc3RydWN0IHNpdV9zdHJlYW0gKnNpdV9zdHJlYW07CisJc25kX3BjbV9zZnJhbWVzX3QgeGZlcl9jbnQ7CisKKwlpZiAoc3MtPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+cGxheWJhY2s7CisJZWxzZQorCQlzaXVfc3RyZWFtID0gJnBvcnRfaW5mby0+Y2FwdHVyZTsKKworCXJ0ID0gc2l1X3N0cmVhbS0+c3Vic3RyZWFtLT5ydW50aW1lOworCisJc2l1X3N0cmVhbS0+YnVmX2J5dGVzID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHNzKTsKKwlzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3MpOworCisJZGV2X2RiZyhkZXYsICIlczogcG9ydD0lZCwgJWQgY2hhbm5lbHMsIHBlcmlvZD0ldSBieXRlc1xuIiwgX19mdW5jX18sCisJCWluZm8tPnBvcnRfaWQsIHJ0LT5jaGFubmVscywgc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzKTsKKworCS8qIFdlIG9ubHkgc3VwcG9ydCBidWZmZXJzIHRoYXQgYXJlIG11bHRpcGxlcyBvZiB0aGUgcGVyaW9kICovCisJaWYgKHNpdV9zdHJlYW0tPmJ1Zl9ieXRlcyAlIHNpdV9zdHJlYW0tPnBlcmlvZF9ieXRlcykgeworCQlkZXZfZXJyKGRldiwgIiVzKCkgLSBidWZmZXI9JWQgbm90IG11bHRpcGxlIG9mIHBlcmlvZD0lZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBzaXVfc3RyZWFtLT5idWZfYnl0ZXMsCisJCSAgICAgICBzaXVfc3RyZWFtLT5wZXJpb2RfYnl0ZXMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl4ZmVyX2NudCA9IGJ5dGVzX3RvX2ZyYW1lcyhydCwgc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzKTsKKwlpZiAoIXhmZXJfY250IHx8IHhmZXJfY250ID4gMHgxMDAwMDAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNpdV9zdHJlYW0tPmZvcm1hdCA9IHJ0LT5mb3JtYXQ7CisJc2l1X3N0cmVhbS0+eGZlcl9jbnQgPSB4ZmVyX2NudDsKKworCWRldl9kYmcoZGV2LCAicG9ydD0lZCBidWY9JWx4IGJ1Zl9ieXRlcz0lZCBwZXJpb2RfYnl0ZXM9JWQgIgorCQkiZm9ybWF0PSVkIGNoYW5uZWxzPSVkIHhmZXJfY250PSVkXG4iLCBpbmZvLT5wb3J0X2lkLAorCQkodW5zaWduZWQgbG9uZylydC0+ZG1hX2FkZHIsIHNpdV9zdHJlYW0tPmJ1Zl9ieXRlcywKKwkJc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzLAorCQlzaXVfc3RyZWFtLT5mb3JtYXQsIHJ0LT5jaGFubmVscywgKGludCl4ZmVyX2NudCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaXVfcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzcywgaW50IGNtZCkKK3sKKwlzdHJ1Y3Qgc2l1X2luZm8gKmluZm8gPSBzaXVfaTJzX2RhaS5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gc3MtPnBjbS0+Y2FyZC0+ZGV2OworCXN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvID0gc2l1X3BvcnRfaW5mbyhzcyk7CisJaW50IHJldDsKKworCWRldl9kYmcoZGV2LCAiJXM6IHBvcnQ9JWRAJXAsIGNtZD0lZFxuIiwgX19mdW5jX18sCisJCWluZm8tPnBvcnRfaWQsIHBvcnRfaW5mbywgY21kKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJaWYgKHNzLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJCXJldCA9IHNpdV9wY21fc3Rtd3JpdGVfc3RhcnQocG9ydF9pbmZvKTsKKwkJZWxzZQorCQkJcmV0ID0gc2l1X3BjbV9zdG1yZWFkX3N0YXJ0KHBvcnRfaW5mbyk7CisKKwkJaWYgKHJldCA8IDApCisJCQlkZXZfd2FybihkZXYsICIlczogc3RhcnQgZmFpbGVkIG9uIHBvcnQ9JWRcbiIsCisJCQkJIF9fZnVuY19fLCBpbmZvLT5wb3J0X2lkKTsKKworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCWlmIChzcy0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCQlzaXVfcGNtX3N0bXdyaXRlX3N0b3AocG9ydF9pbmZvKTsKKwkJZWxzZQorCQkJc2l1X3BjbV9zdG1yZWFkX3N0b3AocG9ydF9pbmZvKTsKKwkJcmV0ID0gMDsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgIiVzKCkgdW5zdXBwb3J0ZWQgY21kPSVkXG4iLCBfX2Z1bmNfXywgY21kKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU28gZmFyIG9ubHkgcmVzb2x1dGlvbiBvZiBvbmUgcGVyaW9kIGlzIHN1cHBvcnRlZCwgc3ViamVjdCB0byBleHRlbmRpbmcgdGhlCisgKiBkbWFuZ2luZSBBUEkKKyAqLworc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNpdV9wY21fcG9pbnRlcl9kbWEoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzcykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzcy0+cGNtLT5jYXJkLT5kZXY7CisJc3RydWN0IHNpdV9pbmZvICppbmZvID0gc2l1X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCXUzMiBfX2lvbWVtICpiYXNlID0gaW5mby0+cmVnOworCXN0cnVjdCBzaXVfcG9ydCAqcG9ydF9pbmZvID0gc2l1X3BvcnRfaW5mbyhzcyk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnQgPSBzcy0+cnVudGltZTsKKwlzaXplX3QgcHRyOworCXN0cnVjdCBzaXVfc3RyZWFtICpzaXVfc3RyZWFtOworCisJaWYgKHNzLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPnBsYXliYWNrOworCWVsc2UKKwkJc2l1X3N0cmVhbSA9ICZwb3J0X2luZm8tPmNhcHR1cmU7CisKKwkvKgorCSAqIHB0ciBpcyB0aGUgb2Zmc2V0IGludG8gdGhlIGJ1ZmZlciB3aGVyZSB0aGUgZG1hIGlzIGN1cnJlbnRseSBhdC4gV2UKKwkgKiBjaGVjayBpZiB0aGUgZG1hIGJ1ZmZlciBoYXMganVzdCB3cmFwcGVkLgorCSAqLworCXB0ciA9IFBFUklPRF9PRkZTRVQocnQtPmRtYV9hZGRyLAorCQkJICAgIHNpdV9zdHJlYW0tPmN1cl9wZXJpb2QsCisJCQkgICAgc2l1X3N0cmVhbS0+cGVyaW9kX2J5dGVzKSAtIHJ0LT5kbWFfYWRkcjsKKworCWRldl9kYmcoZGV2LAorCQkiJXM6IHBvcnQ9JWQsIGV2ZW50cyAleCwgRlNUUyAleCwgeGZlcnJlZCAldS8ldSwgY29va2llICVkXG4iLAorCQlfX2Z1bmNfXywgaW5mby0+cG9ydF9pZCwgc2l1X3JlYWQzMihiYXNlICsgU0lVX0VWTlRDKSwKKwkJc2l1X3JlYWQzMihiYXNlICsgU0lVX1NCRlNUUyksIHB0ciwgc2l1X3N0cmVhbS0+YnVmX2J5dGVzLAorCQlzaXVfc3RyZWFtLT5jb29raWUpOworCisJaWYgKHB0ciA+PSBzaXVfc3RyZWFtLT5idWZfYnl0ZXMpCisJCXB0ciA9IDA7CisKKwlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHNzLT5ydW50aW1lLCBwdHIpOworfQorCitzdGF0aWMgaW50IHNpdV9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbSAqcGNtKQoreworCS8qIGNhcmQtPmRldiA9PSBzb2NkZXYtPmRldiwgc2VlIHNuZF9zb2NfbmV3X3BjbXMoKSAqLworCXN0cnVjdCBzaXVfaW5mbyAqaW5mbyA9IHNpdV9pMnNfZGFpLnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGNhcmQtPmRldik7CisJaW50IHJldDsKKwlpbnQgaTsKKworCS8qIHBkZXYtPmlkIHNlbGVjdHMgYmV0d2VlbiBTSVVBIGFuZCBTSVVCICovCisJaWYgKHBkZXYtPmlkIDwgMCB8fCBwZGV2LT5pZCA+PSBTSVVfUE9SVF9OVU0pCisJCXJldHVybiAtRUlOVkFMOworCisJaW5mby0+cG9ydF9pZCA9IHBkZXYtPmlkOworCisJLyoKKwkgKiBXaGlsZSB0aGUgc2l1IGhhcyAyIHBvcnRzLCBvbmx5IG9uZSBwb3J0IGNhbiBiZSBvbiBhdCBhIHRpbWUgKG9ubHkgMQorCSAqIFNQQikuIFNvIGZhciBhbGwgdGhlIGJvYXJkcyB1c2luZyB0aGUgc2l1IGhhZCBvbmx5IG9uZSBvZiB0aGUgcG9ydHMKKwkgKiB3aXJlZCB0byBhIGNvZGVjLiBUbyBzaW1wbGlmeSB0aGluZ3MsIHdlIG9ubHkgcmVnaXN0ZXIgb25lIHBvcnQgd2l0aAorCSAqIGFsc2EuIEluIGNhc2UgYm90aCBwb3J0cyBhcmUgbmVlZGVkLCBpdCBzaG91bGQgYmUgY2hhbmdlZCBoZXJlCisJICovCisJZm9yIChpID0gcGRldi0+aWQ7IGkgPCBwZGV2LT5pZCArIDE7IGkrKykgeworCQlzdHJ1Y3Qgc2l1X3BvcnQgKipwb3J0X2luZm8gPSAmc2l1X3BvcnRzW2ldOworCisJCXJldCA9IHNpdV9pbml0X3BvcnQoaSwgcG9ydF9pbmZvLCBjYXJkKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLAorCQkJCVNORFJWX0RNQV9UWVBFX0RFViwgTlVMTCwKKwkJCQlTSVVfQlVGRkVSX0JZVEVTX01BWCwgU0lVX0JVRkZFUl9CWVRFU19NQVgpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihjYXJkLT5kZXYsCisJCQkgICAgICAgInNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwoKSBlcnI9JWQiLAorCQkJCXJldCk7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQkoKnBvcnRfaW5mbyktPnBjbSA9IHBjbTsKKworCQkvKiBJTyB0YXNrbGV0cyAqLworCQl0YXNrbGV0X2luaXQoJigqcG9ydF9pbmZvKS0+cGxheWJhY2sudGFza2xldCwgc2l1X2lvX3Rhc2tsZXQsCisJCQkgICAgICh1bnNpZ25lZCBsb25nKSYoKnBvcnRfaW5mbyktPnBsYXliYWNrKTsKKwkJdGFza2xldF9pbml0KCYoKnBvcnRfaW5mbyktPmNhcHR1cmUudGFza2xldCwgc2l1X2lvX3Rhc2tsZXQsCisJCQkgICAgICh1bnNpZ25lZCBsb25nKSYoKnBvcnRfaW5mbyktPmNhcHR1cmUpOworCX0KKworCWRldl9pbmZvKGNhcmQtPmRldiwgIlN1cGVySCBTSVUgZHJpdmVyIGluaXRpYWxpemVkLlxuIik7CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJc2l1X2ZyZWVfcG9ydChzaXVfcG9ydHNbcGRldi0+aWRdKTsKKwlkZXZfZXJyKGNhcmQtPmRldiwgIlNJVTogZmFpbGVkIHRvIGluaXRpYWxpemUuXG4iKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzaXVfcGNtX2ZyZWUoc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKHBjbS0+Y2FyZC0+ZGV2KTsKKwlzdHJ1Y3Qgc2l1X3BvcnQgKnBvcnRfaW5mbyA9IHNpdV9wb3J0c1twZGV2LT5pZF07CisKKwl0YXNrbGV0X2tpbGwoJnBvcnRfaW5mby0+Y2FwdHVyZS50YXNrbGV0KTsKKwl0YXNrbGV0X2tpbGwoJnBvcnRfaW5mby0+cGxheWJhY2sudGFza2xldCk7CisKKwlzaXVfZnJlZV9wb3J0KHBvcnRfaW5mbyk7CisJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfZnJlZV9mb3JfYWxsKHBjbSk7CisKKwlkZXZfZGJnKHBjbS0+Y2FyZC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzaXVfcGNtX29wcyA9IHsKKwkub3BlbgkJPSBzaXVfcGNtX29wZW4sCisJLmNsb3NlCQk9IHNpdV9wY21fY2xvc2UsCisJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMJPSBzaXVfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IHNpdV9wY21faHdfZnJlZSwKKwkucHJlcGFyZQk9IHNpdV9wY21fcHJlcGFyZSwKKwkudHJpZ2dlcgk9IHNpdV9wY21fdHJpZ2dlciwKKwkucG9pbnRlcgk9IHNpdV9wY21fcG9pbnRlcl9kbWEsCit9OworCitzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBzaXVfcGxhdGZvcm0gPSB7CisJLm5hbWUJCT0gInNpdS1hdWRpbyIsCisJLnBjbV9vcHMgCT0gJnNpdV9wY21fb3BzLAorCS5wY21fbmV3CT0gc2l1X3BjbV9uZXcsCisJLnBjbV9mcmVlCT0gc2l1X3BjbV9mcmVlLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNpdV9wbGF0Zm9ybSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNhY2hlLmMgYi9zb3VuZC9zb2Mvc29jLWNhY2hlLmMKaW5kZXggZDI1MDVlOC4uNTg2OWRjMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1jYWNoZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY2FjaGUuYwpAQCAtMTUsNiArMTUsNzQgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc25kX3NvY180XzEyX3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHJlZykKK3sKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwlpZiAocmVnID49IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKKwkJcmV0dXJuIC0xOworCXJldHVybiBjYWNoZVtyZWddOworfQorCitzdGF0aWMgaW50IHNuZF9zb2NfNF8xMl93cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJCQkgICAgIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKwl1OCBkYXRhWzJdOworCWludCByZXQ7CisKKwlCVUdfT04oY29kZWMtPnZvbGF0aWxlX3JlZ2lzdGVyKTsKKworCWRhdGFbMF0gPSAocmVnIDw8IDQpIHwgKCh2YWx1ZSA+PiA4KSAmIDB4MDAwZik7CisJZGF0YVsxXSA9IHZhbHVlICYgMHgwMGZmOworCisJaWYgKHJlZyA8IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKKwkJY2FjaGVbcmVnXSA9IHZhbHVlOworCisJaWYgKGNvZGVjLT5jYWNoZV9vbmx5KSB7CisJCWNvZGVjLT5jYWNoZV9zeW5jID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpOworCWlmIChyZXQgPT0gMikKKwkJcmV0dXJuIDA7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZWxzZQorCQlyZXR1cm4gLUVJTzsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCitzdGF0aWMgaW50IHNuZF9zb2NfNF8xMl9zcGlfd3JpdGUodm9pZCAqY29udHJvbF9kYXRhLCBjb25zdCBjaGFyICpkYXRhLAorCQkJCSBpbnQgbGVuKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjb250cm9sX2RhdGE7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0OworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCXU4IG1zZ1syXTsKKworCWlmIChsZW4gPD0gMCkKKwkJcmV0dXJuIDA7CisKKwltc2dbMF0gPSBkYXRhWzFdOworCW1zZ1sxXSA9IGRhdGFbMF07CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwltZW1zZXQoJnQsIDAsIChzaXplb2YgdCkpOworCisJdC50eF9idWYgPSAmbXNnWzBdOworCXQubGVuID0gbGVuOworCisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKwlzcGlfc3luYyhzcGksICZtKTsKKworCXJldHVybiBsZW47Cit9CisjZWxzZQorI2RlZmluZSBzbmRfc29jXzRfMTJfc3BpX3dyaXRlIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgdW5zaWduZWQgaW50IHNuZF9zb2NfN185X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAogCQkJCSAgICAgdW5zaWduZWQgaW50IHJlZykKIHsKQEAgLTM4LDYgKzEwNiwxMiBAQAogCiAJaWYgKHJlZyA8IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKIAkJY2FjaGVbcmVnXSA9IHZhbHVlOworCisJaWYgKGNvZGVjLT5jYWNoZV9vbmx5KSB7CisJCWNvZGVjLT5jYWNoZV9zeW5jID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCiAJcmV0ID0gY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpOwogCWlmIChyZXQgPT0gMikKIAkJcmV0dXJuIDA7CkBAIC05MSw2ICsxNjUsMTEgQEAKIAlpZiAocmVnIDwgY29kZWMtPnJlZ19jYWNoZV9zaXplKQogCQljYWNoZVtyZWddID0gdmFsdWU7CiAKKwlpZiAoY29kZWMtPmNhY2hlX29ubHkpIHsKKwkJY29kZWMtPmNhY2hlX3N5bmMgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDIpID09IDIpCiAJCXJldHVybiAwOwogCWVsc2UKQEAgLTExOSw2ICsxOTgsMTEgQEAKIAlpZiAoIXNuZF9zb2NfY29kZWNfdm9sYXRpbGVfcmVnaXN0ZXIoY29kZWMsIHJlZykpCiAJCXJlZ19jYWNoZVtyZWddID0gdmFsdWU7CiAKKwlpZiAoY29kZWMtPmNhY2hlX29ubHkpIHsKKwkJY29kZWMtPmNhY2hlX3N5bmMgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoY29kZWMtPmh3X3dyaXRlKGNvZGVjLT5jb250cm9sX2RhdGEsIGRhdGEsIDMpID09IDMpCiAJCXJldHVybiAwOwogCWVsc2UKQEAgLTEzMSwxMCArMjE1LDE0IEBACiAJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CiAKIAlpZiAocmVnID49IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSB8fAotCSAgICBzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKGNvZGVjLCByZWcpKQorCSAgICBzbmRfc29jX2NvZGVjX3ZvbGF0aWxlX3JlZ2lzdGVyKGNvZGVjLCByZWcpKSB7CisJCWlmIChjb2RlYy0+Y2FjaGVfb25seSkKKwkJCXJldHVybiAtRUlOVkFMOworCiAJCXJldHVybiBjb2RlYy0+aHdfcmVhZChjb2RlYywgcmVnKTsKLQllbHNlCisJfSBlbHNlIHsKIAkJcmV0dXJuIGNhY2hlW3JlZ107CisJfQogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCAoZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQpAQCAtMTcxLDYgKzI1OSwxMTQgQEAKICNkZWZpbmUgc25kX3NvY184XzE2X3JlYWRfaTJjIE5VTEwKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCAoZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jXzE2XzhfcmVhZF9pMmMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCQkgIHVuc2lnbmVkIGludCByKQoreworCXN0cnVjdCBpMmNfbXNnIHhmZXJbMl07CisJdTE2IHJlZyA9IHI7CisJdTggZGF0YTsKKwlpbnQgcmV0OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjb2RlYy0+Y29udHJvbF9kYXRhOworCisJLyogV3JpdGUgcmVnaXN0ZXIgKi8KKwl4ZmVyWzBdLmFkZHIgPSBjbGllbnQtPmFkZHI7CisJeGZlclswXS5mbGFncyA9IDA7CisJeGZlclswXS5sZW4gPSAyOworCXhmZXJbMF0uYnVmID0gKHU4ICopJnJlZzsKKworCS8qIFJlYWQgZGF0YSAqLworCXhmZXJbMV0uYWRkciA9IGNsaWVudC0+YWRkcjsKKwl4ZmVyWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJeGZlclsxXS5sZW4gPSAxOworCXhmZXJbMV0uYnVmID0gJmRhdGE7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCB4ZmVyLCAyKTsKKwlpZiAocmV0ICE9IDIpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJpMmNfdHJhbnNmZXIoKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGRhdGE7Cit9CisjZWxzZQorI2RlZmluZSBzbmRfc29jXzE2XzhfcmVhZF9pMmMgTlVMTAorI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc25kX3NvY18xNl84X3JlYWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHJlZykKK3sKKwl1MTYgKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZTsKKworCXJlZyAmPSAweGZmOworCWlmIChyZWcgPj0gY29kZWMtPnJlZ19jYWNoZV9zaXplKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIGNhY2hlW3JlZ107Cit9CisKK3N0YXRpYyBpbnQgc25kX3NvY18xNl84X3dyaXRlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlZywKKwkJCSAgICAgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXUxNiAqY2FjaGUgPSBjb2RlYy0+cmVnX2NhY2hlOworCXU4IGRhdGFbM107CisJaW50IHJldDsKKworCUJVR19PTihjb2RlYy0+dm9sYXRpbGVfcmVnaXN0ZXIpOworCisJZGF0YVswXSA9IChyZWcgPj4gOCkgJiAweGZmOworCWRhdGFbMV0gPSByZWcgJiAweGZmOworCWRhdGFbMl0gPSB2YWx1ZTsKKworCXJlZyAmPSAweGZmOworCWlmIChyZWcgPCBjb2RlYy0+cmVnX2NhY2hlX3NpemUpCisJCWNhY2hlW3JlZ10gPSB2YWx1ZTsKKworCWlmIChjb2RlYy0+Y2FjaGVfb25seSkgeworCQljb2RlYy0+Y2FjaGVfc3luYyA9IDE7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAzKTsKKwlpZiAocmV0ID09IDMpCisJCXJldHVybiAwOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UKKwkJcmV0dXJuIC1FSU87Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorc3RhdGljIGludCBzbmRfc29jXzE2Xzhfc3BpX3dyaXRlKHZvaWQgKmNvbnRyb2xfZGF0YSwgY29uc3QgY2hhciAqZGF0YSwKKwkJCQkgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY29udHJvbF9kYXRhOworCXN0cnVjdCBzcGlfdHJhbnNmZXIgdDsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKwl1OCBtc2dbM107CisKKwlpZiAobGVuIDw9IDApCisJCXJldHVybiAwOworCisJbXNnWzBdID0gZGF0YVswXTsKKwltc2dbMV0gPSBkYXRhWzFdOworCW1zZ1syXSA9IGRhdGFbMl07CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwltZW1zZXQoJnQsIDAsIChzaXplb2YgdCkpOworCisJdC50eF9idWYgPSAmbXNnWzBdOworCXQubGVuID0gbGVuOworCisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKwlzcGlfc3luYyhzcGksICZtKTsKKworCXJldHVybiBsZW47Cit9CisjZWxzZQorI2RlZmluZSBzbmRfc29jXzE2Xzhfc3BpX3dyaXRlIE5VTEwKKyNlbmRpZgorCisKIHN0YXRpYyBzdHJ1Y3QgewogCWludCBhZGRyX2JpdHM7CiAJaW50IGRhdGFfYml0czsKQEAgLTE4MCw5ICszNzYsMTQgQEAKIAl1bnNpZ25lZCBpbnQgKCppMmNfcmVhZCkoc3RydWN0IHNuZF9zb2NfY29kZWMgKiwgdW5zaWduZWQgaW50KTsKIH0gaW9fdHlwZXNbXSA9IHsKIAl7CisJCS5hZGRyX2JpdHMgPSA0LCAuZGF0YV9iaXRzID0gMTIsCisJCS53cml0ZSA9IHNuZF9zb2NfNF8xMl93cml0ZSwgLnJlYWQgPSBzbmRfc29jXzRfMTJfcmVhZCwKKwkJLnNwaV93cml0ZSA9IHNuZF9zb2NfNF8xMl9zcGlfd3JpdGUsCisJfSwKKwl7CiAJCS5hZGRyX2JpdHMgPSA3LCAuZGF0YV9iaXRzID0gOSwKIAkJLndyaXRlID0gc25kX3NvY183Xzlfd3JpdGUsIC5yZWFkID0gc25kX3NvY183XzlfcmVhZCwKLQkJLnNwaV93cml0ZSA9IHNuZF9zb2NfN185X3NwaV93cml0ZSAKKwkJLnNwaV93cml0ZSA9IHNuZF9zb2NfN185X3NwaV93cml0ZSwKIAl9LAogCXsKIAkJLmFkZHJfYml0cyA9IDgsIC5kYXRhX2JpdHMgPSA4LApAQCAtMTkzLDYgKzM5NCwxMiBAQAogCQkud3JpdGUgPSBzbmRfc29jXzhfMTZfd3JpdGUsIC5yZWFkID0gc25kX3NvY184XzE2X3JlYWQsCiAJCS5pMmNfcmVhZCA9IHNuZF9zb2NfOF8xNl9yZWFkX2kyYywKIAl9LAorCXsKKwkJLmFkZHJfYml0cyA9IDE2LCAuZGF0YV9iaXRzID0gOCwKKwkJLndyaXRlID0gc25kX3NvY18xNl84X3dyaXRlLCAucmVhZCA9IHNuZF9zb2NfMTZfOF9yZWFkLAorCQkuaTJjX3JlYWQgPSBzbmRfc29jXzE2XzhfcmVhZF9pMmMsCisJCS5zcGlfd3JpdGUgPSBzbmRfc29jXzE2Xzhfc3BpX3dyaXRlLAorCX0sCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtY29yZS5jIGIvc291bmQvc29jL3NvYy1jb3JlLmMKaW5kZXggMGE2NDQwYy4uYTAzYmFjOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1jb3JlLmMKKysrIGIvc291bmQvc29jL3NvYy1jb3JlLmMKQEAgLTEzMCw2ICsxMzAsMjkgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKGNvZGVjX3JlZywgMDQ0NCwgY29kZWNfcmVnX3Nob3csIE5VTEwpOwogCitzdGF0aWMgc3NpemVfdCBwbWRvd25fdGltZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHNvY2Rldi0+Y2FyZDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgY2FyZC0+cG1kb3duX3RpbWUpOworfQorCitzdGF0aWMgc3NpemVfdCBwbWRvd25fdGltZV9zZXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHNvY2Rldi0+Y2FyZDsKKworCXN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJmNhcmQtPnBtZG93bl90aW1lKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHBtZG93bl90aW1lLCAwNjQ0LCBwbWRvd25fdGltZV9zaG93LCBwbWRvd25fdGltZV9zZXQpOworCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiBzdGF0aWMgaW50IGNvZGVjX3JlZ19vcGVuX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CkBAIC01NDIsNyArNTY1LDcgQEAKIAkJLyogc3RhcnQgZGVsYXllZCBwb3Agd3EgaGVyZSBmb3IgcGxheWJhY2sgc3RyZWFtcyAqLwogCQljb2RlY19kYWktPnBvcF93YWl0ID0gMTsKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjYXJkLT5kZWxheWVkX3dvcmssCi0JCQltc2Vjc190b19qaWZmaWVzKHBtZG93bl90aW1lKSk7CisJCQltc2Vjc190b19qaWZmaWVzKGNhcmQtPnBtZG93bl90aW1lKSk7CiAJfSBlbHNlIHsKIAkJLyogY2FwdHVyZSBzdHJlYW1zIGNhbiBiZSBwb3dlcmVkIGRvd24gbm93ICovCiAJCXNuZF9zb2NfZGFwbV9zdHJlYW1fZXZlbnQoY29kZWMsCkBAIC05NDAsNiArOTYzLDEyIEBACiAJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCA9IHNvY2Rldi0+Y2FyZDsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBjYXJkLT5kYWlfbGlua1swXS5jcHVfZGFpOwogCisJLyogSWYgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoaXMgc29jIGRldmljZSBmYWlsZWQsIHRoZXJlIGlzIG5vIGNvZGVjCisJICogYXNzb2NpYXRlZCB3aXRoIGl0LiBKdXN0IGJhaWwgb3V0IGluIHRoaXMgY2FzZS4KKwkgKi8KKwlpZiAoIWNhcmQtPmNvZGVjKQorCQlyZXR1cm4gMDsKKwogCS8qIEFDOTcgZGV2aWNlcyBtaWdodCBoYXZlIG90aGVyIGRyaXZlcnMgaGFuZ2luZyBvZmYgdGhlbSBzbwogCSAqIG5lZWQgdG8gcmVzdW1lIGltbWVkaWF0ZWx5LiAgT3RoZXIgZHJpdmVycyBkb24ndCBoYXZlIHRoYXQKIAkgKiBwcm9ibGVtIGFuZCBtYXkgdGFrZSBhIHN1YnN0YW50aWFsIGFtb3VudCBvZiB0aW1lIHRvIHJlc3VtZQpAQCAtMTAzOSw2ICsxMDY4LDggQEAKIAlkZXZfZGJnKGNhcmQtPmRldiwgIkFsbCBjb21wb25lbnRzIHByZXNlbnQsIGluc3RhbnRpYXRpbmdcbiIpOwogCiAJLyogRm91bmQgZXZlcnl0aGluZywgYnJpbmcgaXQgdXAgKi8KKwljYXJkLT5wbWRvd25fdGltZSA9IHBtZG93bl90aW1lOworCiAJaWYgKGNhcmQtPnByb2JlKSB7CiAJCXJldCA9IGNhcmQtPnByb2JlKHBkZXYpOwogCQlpZiAocmV0IDwgMCkKQEAgLTExMjIsNiArMTE1MywxMCBAQAogCWlmIChyZXQgPCAwKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJhc29jOiBmYWlsZWQgdG8gYWRkIGRhcG0gc3lzZnMgZW50cmllc1xuIik7CiAKKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoY2FyZC0+c29jZGV2LT5kZXYsICZkZXZfYXR0cl9wbWRvd25fdGltZSk7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImFzb2M6IGZhaWxlZCB0byBhZGQgcG1kb3duX3RpbWUgc3lzZnNcbiIpOworCiAJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGNhcmQtPnNvY2Rldi0+ZGV2LCAmZGV2X2F0dHJfY29kZWNfcmVnKTsKIAlpZiAocmV0IDwgMCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXNvYzogZmFpbGVkIHRvIGFkZCBjb2RlYyBzeXNmcyBmaWxlc1xuIik7CkBAIC0xMjc2LDggKzEzMTEsOCBAQAogCWNvZGVjX2RhaS0+Y29kZWMgPSBjYXJkLT5jb2RlYzsKIAogCS8qIGNoZWNrIGNsaWVudCBhbmQgaW50ZXJmYWNlIGh3IGNhcGFiaWxpdGllcyAqLwotCXNwcmludGYobmV3X25hbWUsICIlcyAlcy0lZCIsIGRhaV9saW5rLT5zdHJlYW1fbmFtZSwgY29kZWNfZGFpLT5uYW1lLAotCQludW0pOworCXNucHJpbnRmKG5ld19uYW1lLCBzaXplb2YobmV3X25hbWUpLCAiJXMgJXMtJWQiLAorCQkgZGFpX2xpbmstPnN0cmVhbV9uYW1lLCBjb2RlY19kYWktPm5hbWUsIG51bSk7CiAKIAlpZiAoY29kZWNfZGFpLT5wbGF5YmFjay5jaGFubmVsc19taW4pCiAJCXBsYXliYWNrID0gMTsKQEAgLTEzNjgsNiArMTQwMyw3IEBACiAKIAljb2RlYy0+YWM5Ny0+YnVzLT5vcHMgPSBvcHM7CiAJY29kZWMtPmFjOTctPm51bSA9IG51bTsKKwljb2RlYy0+ZGV2ID0gJmNvZGVjLT5hYzk3LT5kZXY7CiAJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+bXV0ZXgpOwogCXJldHVybiAwOwogfQpAQCAtMTQyNyw5ICsxNDYzLDkgQEAKICAqCiAgKiBSZXR1cm5zIDEgZm9yIGNoYW5nZSBlbHNlIDAuCiAgKi8KLXN0YXRpYyBpbnQgc25kX3NvY191cGRhdGVfYml0c19sb2NrZWQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAotCQkJCXVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgaW50IG1hc2ssCi0JCQkJdW5zaWduZWQgaW50IHZhbHVlKQoraW50IHNuZF9zb2NfdXBkYXRlX2JpdHNfbG9ja2VkKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIGludCBtYXNrLAorCQkJICAgICAgIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKIAlpbnQgY2hhbmdlOwogCkBAIC0xNDM5LDYgKzE0NzUsNyBAQAogCiAJcmV0dXJuIGNoYW5nZTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfdXBkYXRlX2JpdHNfbG9ja2VkKTsKIAogLyoqCiAgKiBzbmRfc29jX3Rlc3RfYml0cyAtIHRlc3QgcmVnaXN0ZXIgZm9yIGNoYW5nZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1kYXBtLmMgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwppbmRleCAwZDI5NGVmLi42YzMzNTEwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWRhcG0uYworKysgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwpAQCAtNDQsMTMgKzQ0LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KIAotLyogZGVidWcgKi8KLSNpZmRlZiBERUJVRwotI2RlZmluZSBkdW1wX2RhcG0oY29kZWMsIGFjdGlvbikgZGJnX2R1bXBfZGFwbShjb2RlYywgYWN0aW9uKQotI2Vsc2UKLSNkZWZpbmUgZHVtcF9kYXBtKGNvZGVjLCBhY3Rpb24pCi0jZW5kaWYKLQogLyogZGFwbSBwb3dlciBzZXF1ZW5jZXMgLSBtYWtlIHRoaXMgcGVyIGNvZGVjIGluIHRoZSBmdXR1cmUgKi8KIHN0YXRpYyBpbnQgZGFwbV91cF9zZXFbXSA9IHsKIAlbc25kX3NvY19kYXBtX3ByZV0gPSAwLApAQCAtNzM5LDYgKzczMiw4IEBACiAJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKmIsCiAJCQkgICAgaW50IHNvcnRbXSkKIHsKKwlpZiAoYS0+Y29kZWMgIT0gYi0+Y29kZWMpCisJCXJldHVybiAodW5zaWduZWQgbG9uZylhIC0gKHVuc2lnbmVkIGxvbmcpYjsKIAlpZiAoc29ydFthLT5pZF0gIT0gc29ydFtiLT5pZF0pCiAJCXJldHVybiBzb3J0W2EtPmlkXSAtIHNvcnRbYi0+aWRdOwogCWlmIChhLT5yZWcgIT0gYi0+cmVnKQpAQCAtMTAxNywxMyArMTAxMiwyOCBAQAogCQkJc3lzX3Bvd2VyID0gMDsKIAkJCWJyZWFrOwogCQljYXNlIFNORF9TT0NfREFQTV9TVFJFQU1fTk9QOgotCQkJc3lzX3Bvd2VyID0gY29kZWMtPmJpYXNfbGV2ZWwgIT0gU05EX1NPQ19CSUFTX1NUQU5EQlk7CisJCQlzd2l0Y2ggKGNvZGVjLT5iaWFzX2xldmVsKSB7CisJCQkJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJCQljYXNlIFNORF9TT0NfQklBU19PRkY6CisJCQkJCXN5c19wb3dlciA9IDA7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXN5c19wb3dlciA9IDE7CisJCQkJCWJyZWFrOworCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQogCX0KIAorCWlmIChzeXNfcG93ZXIgJiYgY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX09GRikgeworCQlyZXQgPSBzbmRfc29jX2RhcG1fc2V0X2JpYXNfbGV2ZWwoc29jZGV2LAorCQkJCQkJICBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXByX2VycigiRmFpbGVkIHRvIHR1cm4gb24gYmlhczogJWRcbiIsIHJldCk7CisJfQorCiAJLyogSWYgd2UncmUgY2hhbmdpbmcgdG8gYWxsIG9uIG9yIGFsbCBvZmYgdGhlbiBwcmVwYXJlICovCiAJaWYgKChzeXNfcG93ZXIgJiYgY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1NUQU5EQlkpIHx8CiAJICAgICghc3lzX3Bvd2VyICYmIGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PTikpIHsKQEAgLTEwNDcsNiArMTA1NywxNCBAQAogCQkJcHJfZXJyKCJGYWlsZWQgdG8gYXBwbHkgc3RhbmRieSBiaWFzOiAlZFxuIiwgcmV0KTsKIAl9CiAKKwkvKiBJZiB3ZSdyZSBpbiBzdGFuZGJ5IGFuZCBjYW4gc3VwcG9ydCBiaWFzIG9mZiB0aGVuIGRvIHRoYXQgKi8KKwlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1NUQU5EQlkgJiYKKwkgICAgY29kZWMtPmlkbGVfYmlhc19vZmYpIHsKKwkJcmV0ID0gc25kX3NvY19kYXBtX3NldF9iaWFzX2xldmVsKHNvY2RldiwgU05EX1NPQ19CSUFTX09GRik7CisJCWlmIChyZXQgIT0gMCkKKwkJCXByX2VycigiRmFpbGVkIHRvIHR1cm4gb2ZmIGJpYXM6ICVkXG4iLCByZXQpOworCX0KKwogCS8qIElmIHdlIGp1c3QgcG93ZXJlZCB1cCB0aGVuIG1vdmUgdG8gYWN0aXZlIGJpYXMgKi8KIAlpZiAoY29kZWMtPmJpYXNfbGV2ZWwgPT0gU05EX1NPQ19CSUFTX1BSRVBBUkUgJiYgc3lzX3Bvd2VyKSB7CiAJCXJldCA9IHNuZF9zb2NfZGFwbV9zZXRfYmlhc19sZXZlbChzb2NkZXYsCkBAIC0xMDYxLDY2ICsxMDc5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIERFQlVHCi1zdGF0aWMgdm9pZCBkYmdfZHVtcF9kYXBtKHN0cnVjdCBzbmRfc29jX2NvZGVjKiBjb2RlYywgY29uc3QgY2hhciAqYWN0aW9uKQotewotCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3OwotCXN0cnVjdCBzbmRfc29jX2RhcG1fcGF0aCAqcCA9IE5VTEw7Ci0JaW50IGluLCBvdXQ7Ci0KLQlwcmludGsoIkRBUE0gJXMgJXNcbiIsIGNvZGVjLT5uYW1lLCBhY3Rpb24pOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh3LCAmY29kZWMtPmRhcG1fd2lkZ2V0cywgbGlzdCkgewotCi0JCS8qIG9ubHkgZGlzcGxheSB3aWRnZXRzIHRoYXQgZWZmZWN0IHJvdXRpbmcgKi8KLQkJc3dpdGNoICh3LT5pZCkgewotCQljYXNlIHNuZF9zb2NfZGFwbV9wcmU6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX3Bvc3Q6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX3ZtaWQ6Ci0JCQljb250aW51ZTsKLQkJY2FzZSBzbmRfc29jX2RhcG1fbXV4OgotCQljYXNlIHNuZF9zb2NfZGFwbV92YWx1ZV9tdXg6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX291dHB1dDoKLQkJY2FzZSBzbmRfc29jX2RhcG1faW5wdXQ6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX3N3aXRjaDoKLQkJY2FzZSBzbmRfc29jX2RhcG1faHA6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX21pYzoKLQkJY2FzZSBzbmRfc29jX2RhcG1fc3BrOgotCQljYXNlIHNuZF9zb2NfZGFwbV9saW5lOgotCQljYXNlIHNuZF9zb2NfZGFwbV9taWNiaWFzOgotCQljYXNlIHNuZF9zb2NfZGFwbV9kYWM6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX2FkYzoKLQkJY2FzZSBzbmRfc29jX2RhcG1fcGdhOgotCQljYXNlIHNuZF9zb2NfZGFwbV9taXhlcjoKLQkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsOgotCQljYXNlIHNuZF9zb2NfZGFwbV9zdXBwbHk6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX2FpZl9pbjoKLQkJY2FzZSBzbmRfc29jX2RhcG1fYWlmX291dDoKLQkJCWlmICh3LT5uYW1lKSB7Ci0JCQkJaW4gPSBpc19jb25uZWN0ZWRfaW5wdXRfZXAodyk7Ci0JCQkJZGFwbV9jbGVhcl93YWxrKHctPmNvZGVjKTsKLQkJCQlvdXQgPSBpc19jb25uZWN0ZWRfb3V0cHV0X2VwKHcpOwotCQkJCWRhcG1fY2xlYXJfd2Fsayh3LT5jb2RlYyk7Ci0JCQkJcHJpbnRrKCIlczogJXMgIGluICVkIG91dCAlZFxuIiwgdy0+bmFtZSwKLQkJCQkJdy0+cG93ZXIgPyAiT24iOiJPZmYiLGluLCBvdXQpOwotCi0JCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmdy0+c291cmNlcywgbGlzdF9zaW5rKSB7Ci0JCQkJCWlmIChwLT5jb25uZWN0KQotCQkJCQkJcHJpbnRrKCIgaW4gICVzICVzXG4iLCBwLT5uYW1lID8gcC0+bmFtZSA6ICJzdGF0aWMiLAotCQkJCQkJCXAtPnNvdXJjZS0+bmFtZSk7Ci0JCQkJfQotCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJnctPnNpbmtzLCBsaXN0X3NvdXJjZSkgewotCQkJCQlpZiAocC0+Y29ubmVjdCkKLQkJCQkJCXByaW50aygiIG91dCAlcyAlc1xuIiwgcC0+bmFtZSA/IHAtPm5hbWUgOiAic3RhdGljIiwKLQkJCQkJCQlwLT5zaW5rLT5uYW1lKTsKLQkJCQl9Ci0JCQl9Ci0JCWJyZWFrOwotCQl9Ci0JfQotfQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIHN0YXRpYyBpbnQgZGFwbV93aWRnZXRfcG93ZXJfb3Blbl9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewpAQCAtMTE0Nyw5ICsxMTA1LDE2IEBACiAJb3V0ID0gaXNfY29ubmVjdGVkX291dHB1dF9lcCh3KTsKIAlkYXBtX2NsZWFyX3dhbGsody0+Y29kZWMpOwogCi0JcmV0ID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlczogJXMgIGluICVkIG91dCAlZFxuIiwKKwlyZXQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzOiAlcyAgaW4gJWQgb3V0ICVkIiwKIAkJICAgICAgIHctPm5hbWUsIHctPnBvd2VyID8gIk9uIiA6ICJPZmYiLCBpbiwgb3V0KTsKIAorCWlmICh3LT5yZWcgPj0gMCkKKwkJcmV0ICs9IHNucHJpbnRmKGJ1ZiArIHJldCwgUEFHRV9TSVpFIC0gcmV0LAorCQkJCSIgLSBSJWQoMHgleCkgYml0ICVkIiwKKwkJCQl3LT5yZWcsIHctPnJlZywgdy0+c2hpZnQpOworCisJcmV0ICs9IHNucHJpbnRmKGJ1ZiArIHJldCwgUEFHRV9TSVpFIC0gcmV0LCAiXG4iKTsKKwogCWlmICh3LT5zbmFtZSkKIAkJcmV0ICs9IHNucHJpbnRmKGJ1ZiArIHJldCwgUEFHRV9TSVpFIC0gcmV0LCAiIHN0cmVhbSAlcyAlc1xuIiwKIAkJCQl3LT5zbmFtZSwKQEAgLTEyNDUsMTggKzEyMTAsMTUgQEAKIAkJCXBhdGgtPmNvbm5lY3QgPSAwOyAvKiBvbGQgY29ubmVjdGlvbiBtdXN0IGJlIHBvd2VyZWQgZG93biAqLwogCX0KIAotCWlmIChmb3VuZCkgeworCWlmIChmb3VuZCkKIAkJZGFwbV9wb3dlcl93aWRnZXRzKHdpZGdldC0+Y29kZWMsIFNORF9TT0NfREFQTV9TVFJFQU1fTk9QKTsKLQkJZHVtcF9kYXBtKHdpZGdldC0+Y29kZWMsICJtdXggcG93ZXIgdXBkYXRlIik7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CiAKIC8qIHRlc3QgYW5kIHVwZGF0ZSB0aGUgcG93ZXIgc3RhdHVzIG9mIGEgbWl4ZXIgb3Igc3dpdGNoIHdpZGdldCAqLwogc3RhdGljIGludCBkYXBtX21peGVyX3VwZGF0ZV9wb3dlcihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqd2lkZ2V0LAotCQkJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgcmVnLAotCQkJCSAgIGludCB2YWxfbWFzaywgaW50IHZhbCwgaW50IGludmVydCkKKwkJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGNvbm5lY3QpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV9wYXRoICpwYXRoOwogCWludCBmb3VuZCA9IDA7CkBAIC0xMjY2LDkgKzEyMjgsNiBAQAogCSAgICB3aWRnZXQtPmlkICE9IHNuZF9zb2NfZGFwbV9zd2l0Y2gpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKCFzbmRfc29jX3Rlc3RfYml0cyh3aWRnZXQtPmNvZGVjLCByZWcsIHZhbF9tYXNrLCB2YWwpKQotCQlyZXR1cm4gMDsKLQogCS8qIGZpbmQgZGFwbSB3aWRnZXQgcGF0aCBhc3NvYyB3aXRoIGtjb250cm9sICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXRoLCAmd2lkZ2V0LT5jb2RlYy0+ZGFwbV9wYXRocywgbGlzdCkgewogCQlpZiAocGF0aC0+a2NvbnRyb2wgIT0ga2NvbnRyb2wpCkBAIC0xMjc2LDE5ICsxMjM1LDEyIEBACiAKIAkJLyogZm91bmQsIG5vdyBjaGVjayB0eXBlICovCiAJCWZvdW5kID0gMTsKLQkJaWYgKHZhbCkKLQkJCS8qIG5ldyBjb25uZWN0aW9uICovCi0JCQlwYXRoLT5jb25uZWN0ID0gaW52ZXJ0ID8gMDoxOwotCQllbHNlCi0JCQkvKiBvbGQgY29ubmVjdGlvbiBtdXN0IGJlIHBvd2VyZWQgZG93biAqLwotCQkJcGF0aC0+Y29ubmVjdCA9IGludmVydCA/IDE6MDsKKwkJcGF0aC0+Y29ubmVjdCA9IGNvbm5lY3Q7CiAJCWJyZWFrOwogCX0KIAotCWlmIChmb3VuZCkgeworCWlmIChmb3VuZCkKIAkJZGFwbV9wb3dlcl93aWRnZXRzKHdpZGdldC0+Y29kZWMsIFNORF9TT0NfREFQTV9TVFJFQU1fTk9QKTsKLQkJZHVtcF9kYXBtKHdpZGdldC0+Y29kZWMsICJtaXhlciBwb3dlciB1cGRhdGUiKTsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0MDQsOSArMTM1Niw3IEBACiAgKi8KIGludCBzbmRfc29jX2RhcG1fc3luYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IHJldCA9IGRhcG1fcG93ZXJfd2lkZ2V0cyhjb2RlYywgU05EX1NPQ19EQVBNX1NUUkVBTV9OT1ApOwotCWR1bXBfZGFwbShjb2RlYywgInN5bmMiKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBkYXBtX3Bvd2VyX3dpZGdldHMoY29kZWMsIFNORF9TT0NfREFQTV9TVFJFQU1fTk9QKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGFwbV9zeW5jKTsKIApAQCAtMTY4OCw2ICsxNjM4LDcgQEAKIAl1bnNpZ25lZCBpbnQgbWFzayA9ICgxIDw8IGZscyhtYXgpKSAtIDE7CiAJdW5zaWduZWQgaW50IGludmVydCA9IG1jLT5pbnZlcnQ7CiAJdW5zaWduZWQgaW50IHZhbCwgdmFsMiwgdmFsX21hc2s7CisJaW50IGNvbm5lY3Q7CiAJaW50IHJldDsKIAogCXZhbCA9ICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIG1hc2spOwpAQCAtMTcxNCw3ICsxNjY1LDE3IEBACiAJCXJldHVybiAxOwogCX0KIAotCWRhcG1fbWl4ZXJfdXBkYXRlX3Bvd2VyKHdpZGdldCwga2NvbnRyb2wsIHJlZywgdmFsX21hc2ssIHZhbCwgaW52ZXJ0KTsKKwlpZiAoc25kX3NvY190ZXN0X2JpdHMod2lkZ2V0LT5jb2RlYywgcmVnLCB2YWxfbWFzaywgdmFsKSkgeworCQlpZiAodmFsKQorCQkJLyogbmV3IGNvbm5lY3Rpb24gKi8KKwkJCWNvbm5lY3QgPSBpbnZlcnQgPyAwOjE7CisJCWVsc2UKKwkJCS8qIG9sZCBjb25uZWN0aW9uIG11c3QgYmUgcG93ZXJlZCBkb3duICovCisJCQljb25uZWN0ID0gaW52ZXJ0ID8gMTowOworCisJCWRhcG1fbWl4ZXJfdXBkYXRlX3Bvd2VyKHdpZGdldCwga2NvbnRyb2wsIGNvbm5lY3QpOworCX0KKwogCWlmICh3aWRnZXQtPmV2ZW50KSB7CiAJCWlmICh3aWRnZXQtPmV2ZW50X2ZsYWdzICYgU05EX1NPQ19EQVBNX1BSRV9SRUcpIHsKIAkJCXJldCA9IHdpZGdldC0+ZXZlbnQod2lkZ2V0LCBrY29udHJvbCwKQEAgLTIxNTIsNyArMjExMyw2IEBACiAKIAlkYXBtX3Bvd2VyX3dpZGdldHMoY29kZWMsIGV2ZW50KTsKIAltdXRleF91bmxvY2soJmNvZGVjLT5tdXRleCk7Ci0JZHVtcF9kYXBtKGNvZGVjLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2RhcG1fc3RyZWFtX2V2ZW50KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9LY29uZmlnIGIvc291bmQvdXNiL0tjb25maWcKaW5kZXggNzM1MjVjMC4uOGMyOTI1OCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL0tjb25maWcKKysrIGIvc291bmQvdXNiL0tjb25maWcKQEAgLTIxLDYgKzIxLDE4IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtdXNiLWF1ZGlvLgogCitjb25maWcgU05EX1VTQl9VQTEwMQorCXRyaXN0YXRlICJFZGlyb2wgVUEtMTAxIGRyaXZlciAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBTTkRfUENNCisJc2VsZWN0IFNORF9SQVdNSURJCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBFZGlyb2wgVUEtMTAxIGF1ZGlvL01JREkKKwkgIGludGVyZmFjZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgc25kLXVhMTAxLgorCiBjb25maWcgU05EX1VTQl9VU1gyWQogCXRyaXN0YXRlICJUYXNjYW0gVVMtMTIyLCBVUy0yMjQgYW5kIFVTLTQyOCBVU0IgZHJpdmVyIgogCWRlcGVuZHMgb24gWDg2IHx8IFBQQyB8fCBBTFBIQQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL01ha2VmaWxlIGIvc291bmQvdXNiL01ha2VmaWxlCmluZGV4IGFiYjI4OGIuLjViZjY0YWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9NYWtlZmlsZQorKysgYi9zb3VuZC91c2IvTWFrZWZpbGUKQEAgLTQsOSArNCwxMSBAQAogCiBzbmQtdXNiLWF1ZGlvLW9ianMgOj0gdXNiYXVkaW8ubyB1c2JtaXhlci5vCiBzbmQtdXNiLWxpYi1vYmpzIDo9IHVzYm1pZGkubworc25kLXVhMTAxLW9ianMgOj0gdWExMDEubwogCiAjIFRvcGxldmVsIE1vZHVsZSBEZXBlbmRlbmN5CiBvYmotJChDT05GSUdfU05EX1VTQl9BVURJTykgKz0gc25kLXVzYi1hdWRpby5vIHNuZC11c2ItbGliLm8KK29iai0kKENPTkZJR19TTkRfVVNCX1VBMTAxKSArPSBzbmQtdWExMDEubyBzbmQtdXNiLWxpYi5vCiBvYmotJChDT05GSUdfU05EX1VTQl9VU1gyWSkgKz0gc25kLXVzYi1saWIubwogb2JqLSQoQ09ORklHX1NORF9VU0JfVVMxMjJMKSArPSBzbmQtdXNiLWxpYi5vCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91YTEwMS5jIGIvc291bmQvdXNiL3VhMTAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY0Y2NkZgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3VzYi91YTEwMS5jCkBAIC0wLDAgKzEsMTQyMSBAQAorLyoKKyAqIEVkaXJvbCBVQS0xMDEgZHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIENsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBkcml2ZXIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2F1ZGlvLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSAidXNiYXVkaW8uaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJFZGlyb2wgVUEtMTAxIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tFZGlyb2wsVUEtMTAxfX0iKTsKKworLyogSSB1c2UgbXkgVUEtMUEgZm9yIHRlc3RpbmcgYmVjYXVzZSBJIGRvbid0IGhhdmUgYSBVQS0xMDEgLi4uICovCisjZGVmaW5lIFVBMUFfSEFDSworCisvKgorICogU2hvdWxkIG5vdCBiZSBsb3dlciB0aGFuIHRoZSBtaW5pbXVtIHNjaGVkdWxpbmcgZGVsYXkgb2YgdGhlIGhvc3QKKyAqIGNvbnRyb2xsZXIuICBTb21lIEludGVsIGNvbnRyb2xsZXJzIG5lZWQgbW9yZSB0aGFuIG9uZSBmcmFtZTsgYXMgbG9uZyBhcworICogdGhhdCBkcml2ZXIgZG9lc24ndCB0ZWxsIHVzIGFib3V0IHRoaXMsIHVzZSAxLjUgZnJhbWVzIGp1c3QgdG8gYmUgc3VyZS4KKyAqLworI2RlZmluZSBNSU5fUVVFVUVfTEVOR1RICTEyCisvKiBTb21ld2hhdCByYW5kb20uICovCisjZGVmaW5lIE1BWF9RVUVVRV9MRU5HVEgJMzAKKy8qCisgKiBUaGlzIG1hZ2ljIHZhbHVlIG9wdGltaXplcyBtZW1vcnkgdXNhZ2UgZWZmaWNpZW5jeSBmb3IgdGhlIFVBLTEwMSdzIHBhY2tldAorICogc2l6ZXMgYXQgYWxsIHNhbXBsZSByYXRlcywgdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3R1cGlkIGNhY2hlIHBvb2wgc2l6ZXMKKyAqIHRoYXQgdXNiX2J1ZmZlcl9hbGxvYygpIHVzZXMuCisgKi8KKyNkZWZpbmUgREVGQVVMVF9RVUVVRV9MRU5HVEgJMjEKKworI2RlZmluZSBNQVhfUEFDS0VUX1NJWkUJCTY3MiAvKiBoYXJkd2FyZSBzcGVjaWZpYyAqLworI2RlZmluZSBNQVhfTUVNT1JZX0JVRkZFUlMJRElWX1JPVU5EX1VQKE1BWF9RVUVVRV9MRU5HVEgsIFwKKwkJCQkJICAgICBQQUdFX1NJWkUgLyBNQVhfUEFDS0VUX1NJWkUpCisKK3N0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CitzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CitzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9QTlA7CitzdGF0aWMgdW5zaWduZWQgaW50IHF1ZXVlX2xlbmd0aCA9IDIxOworCittb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiY2FyZCBpbmRleCIpOworbW9kdWxlX3BhcmFtX2FycmF5KGlkLCBjaGFycCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlLCAiZW5hYmxlIGNhcmQiKTsKK21vZHVsZV9wYXJhbShxdWV1ZV9sZW5ndGgsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhxdWV1ZV9sZW5ndGgsICJVU0IgcXVldWUgbGVuZ3RoIGluIG1pY3JvZnJhbWVzLCAiCisJCSBfX3N0cmluZ2lmeShNSU5fUVVFVUVfTEVOR1RIKSItIl9fc3RyaW5naWZ5KE1BWF9RVUVVRV9MRU5HVEgpKTsKKworZW51bSB7CisJSU5URl9QTEFZQkFDSywKKwlJTlRGX0NBUFRVUkUsCisJSU5URl9NSURJLAorCisJSU5URl9DT1VOVAorfTsKKworLyogYml0cyBpbiBzdHJ1Y3QgdWExMDE6OnN0YXRlcyAqLworZW51bSB7CisJVVNCX0NBUFRVUkVfUlVOTklORywKKwlVU0JfUExBWUJBQ0tfUlVOTklORywKKwlBTFNBX0NBUFRVUkVfT1BFTiwKKwlBTFNBX1BMQVlCQUNLX09QRU4sCisJQUxTQV9DQVBUVVJFX1JVTk5JTkcsCisJQUxTQV9QTEFZQkFDS19SVU5OSU5HLAorCUNBUFRVUkVfVVJCX0NPTVBMRVRFRCwKKwlQTEFZQkFDS19VUkJfQ09NUExFVEVELAorCURJU0NPTk5FQ1RFRCwKK307CisKK3N0cnVjdCB1YTEwMSB7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGZbSU5URl9DT1VOVF07CisJaW50IGNhcmRfaW5kZXg7CisJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG1pZGlfbGlzdDsKKwl1NjQgZm9ybWF0X2JpdDsKKwl1bnNpZ25lZCBpbnQgcmF0ZTsKKwl1bnNpZ25lZCBpbnQgcGFja2V0c19wZXJfc2Vjb25kOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJdW5zaWduZWQgbG9uZyBzdGF0ZXM7CisKKwkvKiBGSUZPIHRvIHN5bmNocm9uaXplIHBsYXliYWNrIHJhdGUgdG8gY2FwdHVyZSByYXRlICovCisJdW5zaWduZWQgaW50IHJhdGVfZmVlZGJhY2tfc3RhcnQ7CisJdW5zaWduZWQgaW50IHJhdGVfZmVlZGJhY2tfY291bnQ7CisJdTggcmF0ZV9mZWVkYmFja1tNQVhfUVVFVUVfTEVOR1RIXTsKKworCXN0cnVjdCBsaXN0X2hlYWQgcmVhZHlfcGxheWJhY2tfdXJiczsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcGxheWJhY2tfdGFza2xldDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBhbHNhX2NhcHR1cmVfd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCByYXRlX2ZlZWRiYWNrX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgYWxzYV9wbGF5YmFja193YWl0OworCXN0cnVjdCB1YTEwMV9zdHJlYW0geworCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwkJdW5zaWduZWQgaW50IHVzYl9waXBlOworCQl1bnNpZ25lZCBpbnQgY2hhbm5lbHM7CisJCXVuc2lnbmVkIGludCBmcmFtZV9ieXRlczsKKwkJdW5zaWduZWQgaW50IG1heF9wYWNrZXRfYnl0ZXM7CisJCXVuc2lnbmVkIGludCBwZXJpb2RfcG9zOworCQl1bnNpZ25lZCBpbnQgYnVmZmVyX3BvczsKKwkJdW5zaWduZWQgaW50IHF1ZXVlX2xlbmd0aDsKKwkJc3RydWN0IHVhMTAxX3VyYiB7CisJCQlzdHJ1Y3QgdXJiIHVyYjsKKwkJCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yIGlzb19mcmFtZV9kZXNjWzFdOworCQkJc3RydWN0IGxpc3RfaGVhZCByZWFkeV9saXN0OworCQl9ICp1cmJzW01BWF9RVUVVRV9MRU5HVEhdOworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IHNpemU7CisJCQl2b2lkICphZGRyOworCQkJZG1hX2FkZHJfdCBkbWE7CisJCX0gYnVmZmVyc1tNQVhfTUVNT1JZX0JVRkZFUlNdOworCX0gY2FwdHVyZSwgcGxheWJhY2s7CisKKwl1bnNpZ25lZCBpbnQgZnBzWzEwXTsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfY291bnRlcjsKK307CisKK3N0YXRpYyBERUZJTkVfTVVURVgoZGV2aWNlc19tdXRleCk7CitzdGF0aWMgdW5zaWduZWQgaW50IGRldmljZXNfdXNlZDsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1YTEwMV9kcml2ZXI7CisKK3N0YXRpYyB2b2lkIGFib3J0X2Fsc2FfcGxheWJhY2soc3RydWN0IHVhMTAxICp1YSk7CitzdGF0aWMgdm9pZCBhYm9ydF9hbHNhX2NhcHR1cmUoc3RydWN0IHVhMTAxICp1YSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICp1c2JfZXJyb3Jfc3RyaW5nKGludCBlcnIpCit7CisJc3dpdGNoIChlcnIpIHsKKwljYXNlIC1FTk9ERVY6CisJCXJldHVybiAibm8gZGV2aWNlIjsKKwljYXNlIC1FTk9FTlQ6CisJCXJldHVybiAiZW5kcG9pbnQgbm90IGVuYWJsZWQiOworCWNhc2UgLUVQSVBFOgorCQlyZXR1cm4gImVuZHBvaW50IHN0YWxsZWQiOworCWNhc2UgLUVOT1NQQzoKKwkJcmV0dXJuICJub3QgZW5vdWdoIGJhbmR3aWR0aCI7CisJY2FzZSAtRVNIVVRET1dOOgorCQlyZXR1cm4gImRldmljZSBkaXNhYmxlZCI7CisJY2FzZSAtRUhPU1RVTlJFQUNIOgorCQlyZXR1cm4gImRldmljZSBzdXNwZW5kZWQiOworCWNhc2UgLUVJTlZBTDoKKwljYXNlIC1FQUdBSU46CisJY2FzZSAtRUZCSUc6CisJY2FzZSAtRU1TR1NJWkU6CisJCXJldHVybiAiaW50ZXJuYWwgZXJyb3IiOworCWRlZmF1bHQ6CisJCXJldHVybiAidW5rbm93biBlcnJvciI7CisJfQorfQorCitzdGF0aWMgdm9pZCBhYm9ydF91c2JfY2FwdHVyZShzdHJ1Y3QgdWExMDEgKnVhKQoreworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVVNCX0NBUFRVUkVfUlVOTklORywgJnVhLT5zdGF0ZXMpKSB7CisJCXdha2VfdXAoJnVhLT5hbHNhX2NhcHR1cmVfd2FpdCk7CisJCXdha2VfdXAoJnVhLT5yYXRlX2ZlZWRiYWNrX3dhaXQpOworCX0KK30KKworc3RhdGljIHZvaWQgYWJvcnRfdXNiX3BsYXliYWNrKHN0cnVjdCB1YTEwMSAqdWEpCit7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQl3YWtlX3VwKCZ1YS0+YWxzYV9wbGF5YmFja193YWl0KTsKK30KKworc3RhdGljIHZvaWQgcGxheWJhY2tfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVzYl91cmIpCit7CisJc3RydWN0IHVhMTAxX3VyYiAqdXJiID0gKHN0cnVjdCB1YTEwMV91cmIgKil1c2JfdXJiOworCXN0cnVjdCB1YTEwMSAqdWEgPSB1cmItPnVyYi5jb250ZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodW5saWtlbHkodXJiLT51cmIuc3RhdHVzID09IC1FTk9FTlQgfHwJLyogdW5saW5rZWQgKi8KKwkJICAgICB1cmItPnVyYi5zdGF0dXMgPT0gLUVOT0RFViB8fAkvKiBkZXZpY2UgcmVtb3ZlZCAqLworCQkgICAgIHVyYi0+dXJiLnN0YXR1cyA9PSAtRUNPTk5SRVNFVCB8fAkvKiB1bmxpbmtlZCAqLworCQkgICAgIHVyYi0+dXJiLnN0YXR1cyA9PSAtRVNIVVRET1dOKSkgewkvKiBkZXZpY2UgZGlzYWJsZWQgKi8KKwkJYWJvcnRfdXNiX3BsYXliYWNrKHVhKTsKKwkJYWJvcnRfYWxzYV9wbGF5YmFjayh1YSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAodGVzdF9iaXQoVVNCX1BMQVlCQUNLX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkgeworCQkvKiBhcHBlbmQgVVJCIHRvIEZJRk8gKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnVhLT5sb2NrLCBmbGFncyk7CisJCWxpc3RfYWRkX3RhaWwoJnVyYi0+cmVhZHlfbGlzdCwgJnVhLT5yZWFkeV9wbGF5YmFja191cmJzKTsKKwkJaWYgKHVhLT5yYXRlX2ZlZWRiYWNrX2NvdW50ID4gMCkKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJnVhLT5wbGF5YmFja190YXNrbGV0KTsKKwkJdWEtPnBsYXliYWNrLnN1YnN0cmVhbS0+cnVudGltZS0+ZGVsYXkgLT0KKwkJCQl1cmItPnVyYi5pc29fZnJhbWVfZGVzY1swXS5sZW5ndGggLworCQkJCQkJdWEtPnBsYXliYWNrLmZyYW1lX2J5dGVzOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YS0+bG9jaywgZmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgZmlyc3RfcGxheWJhY2tfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gdXJiLT5jb250ZXh0OworCisJdXJiLT5jb21wbGV0ZSA9IHBsYXliYWNrX3VyYl9jb21wbGV0ZTsKKwlwbGF5YmFja191cmJfY29tcGxldGUodXJiKTsKKworCXNldF9iaXQoUExBWUJBQ0tfVVJCX0NPTVBMRVRFRCwgJnVhLT5zdGF0ZXMpOworCXdha2VfdXAoJnVhLT5hbHNhX3BsYXliYWNrX3dhaXQpOworfQorCisvKiBjb3B5IGRhdGEgZnJvbSB0aGUgQUxTQSByaW5nIGJ1ZmZlciBpbnRvIHRoZSBVUkIgYnVmZmVyICovCitzdGF0aWMgYm9vbCBjb3B5X3BsYXliYWNrX2RhdGEoc3RydWN0IHVhMTAxX3N0cmVhbSAqc3RyZWFtLCBzdHJ1Y3QgdXJiICp1cmIsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGZyYW1lcykKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOworCXVuc2lnbmVkIGludCBmcmFtZV9ieXRlcywgZnJhbWVzMTsKKwljb25zdCB1OCAqc291cmNlOworCisJcnVudGltZSA9IHN0cmVhbS0+c3Vic3RyZWFtLT5ydW50aW1lOworCWZyYW1lX2J5dGVzID0gc3RyZWFtLT5mcmFtZV9ieXRlczsKKwlzb3VyY2UgPSBydW50aW1lLT5kbWFfYXJlYSArIHN0cmVhbS0+YnVmZmVyX3BvcyAqIGZyYW1lX2J5dGVzOworCWlmIChzdHJlYW0tPmJ1ZmZlcl9wb3MgKyBmcmFtZXMgPD0gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKKwkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBzb3VyY2UsIGZyYW1lcyAqIGZyYW1lX2J5dGVzKTsKKwl9IGVsc2UgeworCQkvKiB3cmFwIGFyb3VuZCBhdCBlbmQgb2YgcmluZyBidWZmZXIgKi8KKwkJZnJhbWVzMSA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0gc3RyZWFtLT5idWZmZXJfcG9zOworCQltZW1jcHkodXJiLT50cmFuc2Zlcl9idWZmZXIsIHNvdXJjZSwgZnJhbWVzMSAqIGZyYW1lX2J5dGVzKTsKKwkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgZnJhbWVzMSAqIGZyYW1lX2J5dGVzLAorCQkgICAgICAgcnVudGltZS0+ZG1hX2FyZWEsIChmcmFtZXMgLSBmcmFtZXMxKSAqIGZyYW1lX2J5dGVzKTsKKwl9CisKKwlzdHJlYW0tPmJ1ZmZlcl9wb3MgKz0gZnJhbWVzOworCWlmIChzdHJlYW0tPmJ1ZmZlcl9wb3MgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCXN0cmVhbS0+YnVmZmVyX3BvcyAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwlzdHJlYW0tPnBlcmlvZF9wb3MgKz0gZnJhbWVzOworCWlmIChzdHJlYW0tPnBlcmlvZF9wb3MgPj0gcnVudGltZS0+cGVyaW9kX3NpemUpIHsKKwkJc3RyZWFtLT5wZXJpb2RfcG9zIC09IHJ1bnRpbWUtPnBlcmlvZF9zaXplOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkX3dpdGhfd3JhcGFyb3VuZChzdHJ1Y3QgdWExMDEgKnVhLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKnZhbHVlLCB1bnNpZ25lZCBpbnQgYWRkKQoreworCSp2YWx1ZSArPSBhZGQ7CisJaWYgKCp2YWx1ZSA+PSB1YS0+cGxheWJhY2sucXVldWVfbGVuZ3RoKQorCQkqdmFsdWUgLT0gdWEtPnBsYXliYWNrLnF1ZXVlX2xlbmd0aDsKK30KKworc3RhdGljIHZvaWQgcGxheWJhY2tfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHVhMTAxICp1YSA9ICh2b2lkICopZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBmcmFtZXM7CisJc3RydWN0IHVhMTAxX3VyYiAqdXJiOworCWJvb2wgZG9fcGVyaW9kX2VsYXBzZWQgPSBmYWxzZTsKKwlpbnQgZXJyOworCisJaWYgKHVubGlrZWx5KCF0ZXN0X2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBTeW5jaHJvbml6aW5nIHRoZSBwbGF5YmFjayByYXRlIHRvIHRoZSBjYXB0dXJlIHJhdGUgaXMgZG9uZSBieSB1c2luZworCSAqIHRoZSBzYW1lIHNlcXVlbmNlIG9mIHBhY2tldCBzaXplcyBmb3IgYm90aCBzdHJlYW1zLgorCSAqIFN1Ym1pdHRpbmcgYSBwbGF5YmFjayBVUkIgdGhlcmVmb3JlIHJlcXVpcmVzIGJvdGggYSByZWFkeSBVUkIgYW5kCisJICogdGhlIHNpemUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY2FwdHVyZSBwYWNrZXQsIGkuZS4sIGJvdGggcGxheWJhY2sKKwkgKiBhbmQgY2FwdHVyZSBVUkJzIG11c3QgaGF2ZSBiZWVuIGNvbXBsZXRlZC4gIFNpbmNlIHRoZSBVU0IgY29yZSBkb2VzCisJICogbm90IGd1YXJhbnRlZSB0aGF0IHBsYXliYWNrIGFuZCBjYXB0dXJlIGNvbXBsZXRlIGNhbGxiYWNrcyBhcmUKKwkgKiBjYWxsZWQgYWx0ZXJuYXRlbHksIHdlIHVzZSB0d28gRklGT3MgZm9yIHBhY2tldCBzaXplcyBhbmQgcmVhZCBVUkJzOworCSAqIHN1Ym1pdHRpbmcgcGxheWJhY2sgVVJCcyBpcyBwb3NzaWJsZSBhcyBsb25nIGFzIGJvdGggRklGT3MgYXJlCisJICogbm9uZW1wdHkuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVhLT5sb2NrLCBmbGFncyk7CisJd2hpbGUgKHVhLT5yYXRlX2ZlZWRiYWNrX2NvdW50ID4gMCAmJgorCSAgICAgICAhbGlzdF9lbXB0eSgmdWEtPnJlYWR5X3BsYXliYWNrX3VyYnMpKSB7CisJCS8qIHRha2UgcGFja2V0IHNpemUgb3V0IG9mIEZJRk8gKi8KKwkJZnJhbWVzID0gdWEtPnJhdGVfZmVlZGJhY2tbdWEtPnJhdGVfZmVlZGJhY2tfc3RhcnRdOworCQlhZGRfd2l0aF93cmFwYXJvdW5kKHVhLCAmdWEtPnJhdGVfZmVlZGJhY2tfc3RhcnQsIDEpOworCQl1YS0+cmF0ZV9mZWVkYmFja19jb3VudC0tOworCisJCS8qIHRha2UgVVJCIG91dCBvZiBGSUZPICovCisJCXVyYiA9IGxpc3RfZmlyc3RfZW50cnkoJnVhLT5yZWFkeV9wbGF5YmFja191cmJzLAorCQkJCSAgICAgICBzdHJ1Y3QgdWExMDFfdXJiLCByZWFkeV9saXN0KTsKKwkJbGlzdF9kZWwoJnVyYi0+cmVhZHlfbGlzdCk7CisKKwkJLyogZmlsbCBwYWNrZXQgd2l0aCBkYXRhIG9yIHNpbGVuY2UgKi8KKwkJdXJiLT51cmIuaXNvX2ZyYW1lX2Rlc2NbMF0ubGVuZ3RoID0KKwkJCWZyYW1lcyAqIHVhLT5wbGF5YmFjay5mcmFtZV9ieXRlczsKKwkJaWYgKHRlc3RfYml0KEFMU0FfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQkJZG9fcGVyaW9kX2VsYXBzZWQgfD0gY29weV9wbGF5YmFja19kYXRhKCZ1YS0+cGxheWJhY2ssCisJCQkJCQkJCSZ1cmItPnVyYiwKKwkJCQkJCQkJZnJhbWVzKTsKKwkJZWxzZQorCQkJbWVtc2V0KHVyYi0+dXJiLnRyYW5zZmVyX2J1ZmZlciwgMCwKKwkJCSAgICAgICB1cmItPnVyYi5pc29fZnJhbWVfZGVzY1swXS5sZW5ndGgpOworCisJCS8qIGFuZCBvZmYgeW91IGdvIC4uLiAqLworCQllcnIgPSB1c2Jfc3VibWl0X3VyYigmdXJiLT51cmIsIEdGUF9BVE9NSUMpOworCQlpZiAodW5saWtlbHkoZXJyIDwgMCkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVhLT5sb2NrLCBmbGFncyk7CisJCQlhYm9ydF91c2JfcGxheWJhY2sodWEpOworCQkJYWJvcnRfYWxzYV9wbGF5YmFjayh1YSk7CisJCQlkZXZfZXJyKCZ1YS0+ZGV2LT5kZXYsICJVU0IgcmVxdWVzdCBlcnJvciAlZDogJXNcbiIsCisJCQkJZXJyLCB1c2JfZXJyb3Jfc3RyaW5nKGVycikpOworCQkJcmV0dXJuOworCQl9CisJCXVhLT5wbGF5YmFjay5zdWJzdHJlYW0tPnJ1bnRpbWUtPmRlbGF5ICs9IGZyYW1lczsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWEtPmxvY2ssIGZsYWdzKTsKKwlpZiAoZG9fcGVyaW9kX2VsYXBzZWQpCisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQodWEtPnBsYXliYWNrLnN1YnN0cmVhbSk7Cit9CisKKy8qIGNvcHkgZGF0YSBmcm9tIHRoZSBVUkIgYnVmZmVyIGludG8gdGhlIEFMU0EgcmluZyBidWZmZXIgKi8KK3N0YXRpYyBib29sIGNvcHlfY2FwdHVyZV9kYXRhKHN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSwgc3RydWN0IHVyYiAqdXJiLAorCQkJICAgICAgdW5zaWduZWQgaW50IGZyYW1lcykKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOworCXVuc2lnbmVkIGludCBmcmFtZV9ieXRlcywgZnJhbWVzMTsKKwl1OCAqZGVzdDsKKworCXJ1bnRpbWUgPSBzdHJlYW0tPnN1YnN0cmVhbS0+cnVudGltZTsKKwlmcmFtZV9ieXRlcyA9IHN0cmVhbS0+ZnJhbWVfYnl0ZXM7CisJZGVzdCA9IHJ1bnRpbWUtPmRtYV9hcmVhICsgc3RyZWFtLT5idWZmZXJfcG9zICogZnJhbWVfYnl0ZXM7CisJaWYgKHN0cmVhbS0+YnVmZmVyX3BvcyArIGZyYW1lcyA8PSBydW50aW1lLT5idWZmZXJfc2l6ZSkgeworCQltZW1jcHkoZGVzdCwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIGZyYW1lcyAqIGZyYW1lX2J5dGVzKTsKKwl9IGVsc2UgeworCQkvKiB3cmFwIGFyb3VuZCBhdCBlbmQgb2YgcmluZyBidWZmZXIgKi8KKwkJZnJhbWVzMSA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0gc3RyZWFtLT5idWZmZXJfcG9zOworCQltZW1jcHkoZGVzdCwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIGZyYW1lczEgKiBmcmFtZV9ieXRlcyk7CisJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSwKKwkJICAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgZnJhbWVzMSAqIGZyYW1lX2J5dGVzLAorCQkgICAgICAgKGZyYW1lcyAtIGZyYW1lczEpICogZnJhbWVfYnl0ZXMpOworCX0KKworCXN0cmVhbS0+YnVmZmVyX3BvcyArPSBmcmFtZXM7CisJaWYgKHN0cmVhbS0+YnVmZmVyX3BvcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJc3RyZWFtLT5idWZmZXJfcG9zIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCXN0cmVhbS0+cGVyaW9kX3BvcyArPSBmcmFtZXM7CisJaWYgKHN0cmVhbS0+cGVyaW9kX3BvcyA+PSBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgeworCQlzdHJlYW0tPnBlcmlvZF9wb3MgLT0gcnVudGltZS0+cGVyaW9kX3NpemU7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGNhcHR1cmVfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSA9ICZ1YS0+Y2FwdHVyZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBmcmFtZXMsIHdyaXRlX3B0cjsKKwlib29sIGRvX3BlcmlvZF9lbGFwc2VkOworCWludCBlcnI7CisKKwlpZiAodW5saWtlbHkodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fAkJLyogdW5saW5rZWQgKi8KKwkJICAgICB1cmItPnN0YXR1cyA9PSAtRU5PREVWIHx8CQkvKiBkZXZpY2UgcmVtb3ZlZCAqLworCQkgICAgIHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8CS8qIHVubGlua2VkICovCisJCSAgICAgdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikpCS8qIGRldmljZSBkaXNhYmxlZCAqLworCQlnb3RvIHN0cmVhbV9zdG9wcGVkOworCisJaWYgKHVyYi0+c3RhdHVzID49IDAgJiYgdXJiLT5pc29fZnJhbWVfZGVzY1swXS5zdGF0dXMgPj0gMCkKKwkJZnJhbWVzID0gdXJiLT5pc29fZnJhbWVfZGVzY1swXS5hY3R1YWxfbGVuZ3RoIC8KKwkJCXN0cmVhbS0+ZnJhbWVfYnl0ZXM7CisJZWxzZQorCQlmcmFtZXMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVhLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoZnJhbWVzID4gMCAmJiB0ZXN0X2JpdChBTFNBX0NBUFRVUkVfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQlkb19wZXJpb2RfZWxhcHNlZCA9IGNvcHlfY2FwdHVyZV9kYXRhKHN0cmVhbSwgdXJiLCBmcmFtZXMpOworCWVsc2UKKwkJZG9fcGVyaW9kX2VsYXBzZWQgPSBmYWxzZTsKKworCWlmICh0ZXN0X2JpdChVU0JfQ0FQVFVSRV9SVU5OSU5HLCAmdWEtPnN0YXRlcykpIHsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHVubGlrZWx5KGVyciA8IDApKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YS0+bG9jaywgZmxhZ3MpOworCQkJZGV2X2VycigmdWEtPmRldi0+ZGV2LCAiVVNCIHJlcXVlc3QgZXJyb3IgJWQ6ICVzXG4iLAorCQkJCWVyciwgdXNiX2Vycm9yX3N0cmluZyhlcnIpKTsKKwkJCWdvdG8gc3RyZWFtX3N0b3BwZWQ7CisJCX0KKworCQkvKiBhcHBlbmQgcGFja2V0IHNpemUgdG8gRklGTyAqLworCQl3cml0ZV9wdHIgPSB1YS0+cmF0ZV9mZWVkYmFja19zdGFydDsKKwkJYWRkX3dpdGhfd3JhcGFyb3VuZCh1YSwgJndyaXRlX3B0ciwgdWEtPnJhdGVfZmVlZGJhY2tfY291bnQpOworCQl1YS0+cmF0ZV9mZWVkYmFja1t3cml0ZV9wdHJdID0gZnJhbWVzOworCQlpZiAodWEtPnJhdGVfZmVlZGJhY2tfY291bnQgPCB1YS0+cGxheWJhY2sucXVldWVfbGVuZ3RoKSB7CisJCQl1YS0+cmF0ZV9mZWVkYmFja19jb3VudCsrOworCQkJaWYgKHVhLT5yYXRlX2ZlZWRiYWNrX2NvdW50ID09CisJCQkJCQl1YS0+cGxheWJhY2sucXVldWVfbGVuZ3RoKQorCQkJCXdha2VfdXAoJnVhLT5yYXRlX2ZlZWRiYWNrX3dhaXQpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFJpbmcgYnVmZmVyIG92ZXJmbG93OyB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgcGxheWJhY2sKKwkJCSAqIHN0cmVhbSBpcyBub3QgcnVubmluZy4gIFRocm93IGF3YXkgdGhlIG9sZGVzdCBlbnRyeSwKKwkJCSAqIHNvIHRoYXQgdGhlIHBsYXliYWNrIHN0cmVhbSwgd2hlbiBpdCBzdGFydHMsIHNlZXMKKwkJCSAqIHRoZSBtb3N0IHJlY2VudCBwYWNrZXQgc2l6ZXMuCisJCQkgKi8KKwkJCWFkZF93aXRoX3dyYXBhcm91bmQodWEsICZ1YS0+cmF0ZV9mZWVkYmFja19zdGFydCwgMSk7CisJCX0KKwkJaWYgKHRlc3RfYml0KFVTQl9QTEFZQkFDS19SVU5OSU5HLCAmdWEtPnN0YXRlcykgJiYKKwkJICAgICFsaXN0X2VtcHR5KCZ1YS0+cmVhZHlfcGxheWJhY2tfdXJicykpCisJCQl0YXNrbGV0X3NjaGVkdWxlKCZ1YS0+cGxheWJhY2tfdGFza2xldCk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWEtPmxvY2ssIGZsYWdzKTsKKworCWlmIChkb19wZXJpb2RfZWxhcHNlZCkKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdHJlYW0tPnN1YnN0cmVhbSk7CisKKwkvKiBmb3IgZGVidWdnaW5nOiBtZWFzdXJlIHRoZSBzYW1wbGUgcmF0ZSByZWxhdGl2ZSB0byB0aGUgVVNCIGNsb2NrICovCisJdWEtPmZwc1t1YS0+ZnJhbWVfY291bnRlcisrIC8gdWEtPnBhY2tldHNfcGVyX3NlY29uZF0gKz0gZnJhbWVzOworCWlmICh1YS0+ZnJhbWVfY291bnRlciA+PSBBUlJBWV9TSVpFKHVhLT5mcHMpICogdWEtPnBhY2tldHNfcGVyX3NlY29uZCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwdHVyZSByYXRlOiIpOworCQlmb3IgKGZyYW1lcyA9IDA7IGZyYW1lcyA8IEFSUkFZX1NJWkUodWEtPmZwcyk7ICsrZnJhbWVzKQorCQkJcHJpbnRrKEtFUk5fQ09OVCAiICV1IiwgdWEtPmZwc1tmcmFtZXNdKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwkJbWVtc2V0KHVhLT5mcHMsIDAsIHNpemVvZih1YS0+ZnBzKSk7CisJCXVhLT5mcmFtZV9jb3VudGVyID0gMDsKKwl9CisJcmV0dXJuOworCitzdHJlYW1fc3RvcHBlZDoKKwlhYm9ydF91c2JfcGxheWJhY2sodWEpOworCWFib3J0X3VzYl9jYXB0dXJlKHVhKTsKKwlhYm9ydF9hbHNhX3BsYXliYWNrKHVhKTsKKwlhYm9ydF9hbHNhX2NhcHR1cmUodWEpOworfQorCitzdGF0aWMgdm9pZCBmaXJzdF9jYXB0dXJlX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVhMTAxICp1YSA9IHVyYi0+Y29udGV4dDsKKworCXVyYi0+Y29tcGxldGUgPSBjYXB0dXJlX3VyYl9jb21wbGV0ZTsKKwljYXB0dXJlX3VyYl9jb21wbGV0ZSh1cmIpOworCisJc2V0X2JpdChDQVBUVVJFX1VSQl9DT01QTEVURUQsICZ1YS0+c3RhdGVzKTsKKwl3YWtlX3VwKCZ1YS0+YWxzYV9jYXB0dXJlX3dhaXQpOworfQorCitzdGF0aWMgaW50IHN1Ym1pdF9zdHJlYW1fdXJicyhzdHJ1Y3QgdWExMDEgKnVhLCBzdHJ1Y3QgdWExMDFfc3RyZWFtICpzdHJlYW0pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3RyZWFtLT5xdWV1ZV9sZW5ndGg7ICsraSkgeworCQlpbnQgZXJyID0gdXNiX3N1Ym1pdF91cmIoJnN0cmVhbS0+dXJic1tpXS0+dXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwgIlVTQiByZXF1ZXN0IGVycm9yICVkOiAlc1xuIiwKKwkJCQllcnIsIHVzYl9lcnJvcl9zdHJpbmcoZXJyKSk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBraWxsX3N0cmVhbV91cmJzKHN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzdHJlYW0tPnF1ZXVlX2xlbmd0aDsgKytpKQorCQl1c2Jfa2lsbF91cmIoJnN0cmVhbS0+dXJic1tpXS0+dXJiKTsKK30KKworc3RhdGljIGludCBlbmFibGVfaXNvX2ludGVyZmFjZShzdHJ1Y3QgdWExMDEgKnVhLCB1bnNpZ25lZCBpbnQgaW50Zl9pbmRleCkKK3sKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzOworCisJYWx0cyA9IHVhLT5pbnRmW2ludGZfaW5kZXhdLT5jdXJfYWx0c2V0dGluZzsKKwlpZiAoYWx0cy0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZyAhPSAxKSB7CisJCWludCBlcnIgPSB1c2Jfc2V0X2ludGVyZmFjZSh1YS0+ZGV2LAorCQkJCQkgICAgYWx0cy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAxKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwKKwkJCQkiY2Fubm90IGluaXRpYWxpemUgaW50ZXJmYWNlOyBlcnJvciAlZDogJXNcbiIsCisJCQkJZXJyLCB1c2JfZXJyb3Jfc3RyaW5nKGVycikpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGlzYWJsZV9pc29faW50ZXJmYWNlKHN0cnVjdCB1YTEwMSAqdWEsIHVuc2lnbmVkIGludCBpbnRmX2luZGV4KQoreworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHM7CisKKwlhbHRzID0gdWEtPmludGZbaW50Zl9pbmRleF0tPmN1cl9hbHRzZXR0aW5nOworCWlmIChhbHRzLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nICE9IDApIHsKKwkJaW50IGVyciA9IHVzYl9zZXRfaW50ZXJmYWNlKHVhLT5kZXYsCisJCQkJCSAgICBhbHRzLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIDApOworCQlpZiAoZXJyIDwgMCAmJiAhdGVzdF9iaXQoRElTQ09OTkVDVEVELCAmdWEtPnN0YXRlcykpCisJCQlkZXZfd2FybigmdWEtPmRldi0+ZGV2LAorCQkJCSAiaW50ZXJmYWNlIHJlc2V0IGZhaWxlZDsgZXJyb3IgJWQ6ICVzXG4iLAorCQkJCSBlcnIsIHVzYl9lcnJvcl9zdHJpbmcoZXJyKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdG9wX3VzYl9jYXB0dXJlKHN0cnVjdCB1YTEwMSAqdWEpCit7CisJY2xlYXJfYml0KFVTQl9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKTsKKworCWtpbGxfc3RyZWFtX3VyYnMoJnVhLT5jYXB0dXJlKTsKKworCWRpc2FibGVfaXNvX2ludGVyZmFjZSh1YSwgSU5URl9DQVBUVVJFKTsKK30KKworc3RhdGljIGludCBzdGFydF91c2JfY2FwdHVyZShzdHJ1Y3QgdWExMDEgKnVhKQoreworCWludCBlcnI7CisKKwlpZiAodGVzdF9iaXQoRElTQ09OTkVDVEVELCAmdWEtPnN0YXRlcykpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHRlc3RfYml0KFVTQl9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJcmV0dXJuIDA7CisKKwlraWxsX3N0cmVhbV91cmJzKCZ1YS0+Y2FwdHVyZSk7CisKKwllcnIgPSBlbmFibGVfaXNvX2ludGVyZmFjZSh1YSwgSU5URl9DQVBUVVJFKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWNsZWFyX2JpdChDQVBUVVJFX1VSQl9DT01QTEVURUQsICZ1YS0+c3RhdGVzKTsKKwl1YS0+Y2FwdHVyZS51cmJzWzBdLT51cmIuY29tcGxldGUgPSBmaXJzdF9jYXB0dXJlX3VyYl9jb21wbGV0ZTsKKwl1YS0+cmF0ZV9mZWVkYmFja19zdGFydCA9IDA7CisJdWEtPnJhdGVfZmVlZGJhY2tfY291bnQgPSAwOworCisJc2V0X2JpdChVU0JfQ0FQVFVSRV9SVU5OSU5HLCAmdWEtPnN0YXRlcyk7CisJZXJyID0gc3VibWl0X3N0cmVhbV91cmJzKHVhLCAmdWEtPmNhcHR1cmUpOworCWlmIChlcnIgPCAwKQorCQlzdG9wX3VzYl9jYXB0dXJlKHVhKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBzdG9wX3VzYl9wbGF5YmFjayhzdHJ1Y3QgdWExMDEgKnVhKQoreworCWNsZWFyX2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpOworCisJa2lsbF9zdHJlYW1fdXJicygmdWEtPnBsYXliYWNrKTsKKworCXRhc2tsZXRfa2lsbCgmdWEtPnBsYXliYWNrX3Rhc2tsZXQpOworCisJZGlzYWJsZV9pc29faW50ZXJmYWNlKHVhLCBJTlRGX1BMQVlCQUNLKTsKK30KKworc3RhdGljIGludCBzdGFydF91c2JfcGxheWJhY2soc3RydWN0IHVhMTAxICp1YSkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgZnJhbWVzOworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgZXJyID0gMDsKKworCWlmICh0ZXN0X2JpdChESVNDT05ORUNURUQsICZ1YS0+c3RhdGVzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAodGVzdF9iaXQoVVNCX1BMQVlCQUNLX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJcmV0dXJuIDA7CisKKwlraWxsX3N0cmVhbV91cmJzKCZ1YS0+cGxheWJhY2spOworCXRhc2tsZXRfa2lsbCgmdWEtPnBsYXliYWNrX3Rhc2tsZXQpOworCisJZXJyID0gZW5hYmxlX2lzb19pbnRlcmZhY2UodWEsIElOVEZfUExBWUJBQ0spOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJY2xlYXJfYml0KFBMQVlCQUNLX1VSQl9DT01QTEVURUQsICZ1YS0+c3RhdGVzKTsKKwl1YS0+cGxheWJhY2sudXJic1swXS0+dXJiLmNvbXBsZXRlID0KKwkJZmlyc3RfcGxheWJhY2tfdXJiX2NvbXBsZXRlOworCXNwaW5fbG9ja19pcnEoJnVhLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmdWEtPnJlYWR5X3BsYXliYWNrX3VyYnMpOworCXNwaW5fdW5sb2NrX2lycSgmdWEtPmxvY2spOworCisJLyoKKwkgKiBXZSBzdWJtaXQgdGhlIGluaXRpYWwgVVJCcyBhbGwgYXQgb25jZSwgc28gd2UgaGF2ZSB0byB3YWl0IGZvciB0aGUKKwkgKiBwYWNrZXQgc2l6ZSBGSUZPIHRvIGJlIGZ1bGwuCisJICovCisJd2FpdF9ldmVudCh1YS0+cmF0ZV9mZWVkYmFja193YWl0LAorCQkgICB1YS0+cmF0ZV9mZWVkYmFja19jb3VudCA+PSB1YS0+cGxheWJhY2sucXVldWVfbGVuZ3RoIHx8CisJCSAgICF0ZXN0X2JpdChVU0JfQ0FQVFVSRV9SVU5OSU5HLCAmdWEtPnN0YXRlcykgfHwKKwkJICAgdGVzdF9iaXQoRElTQ09OTkVDVEVELCAmdWEtPnN0YXRlcykpOworCWlmICh0ZXN0X2JpdChESVNDT05ORUNURUQsICZ1YS0+c3RhdGVzKSkgeworCQlzdG9wX3VzYl9wbGF5YmFjayh1YSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAoIXRlc3RfYml0KFVTQl9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkgeworCQlzdG9wX3VzYl9wbGF5YmFjayh1YSk7CisJCXJldHVybiAtRUlPOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB1YS0+cGxheWJhY2sucXVldWVfbGVuZ3RoOyArK2kpIHsKKwkJLyogYWxsIGluaXRpYWwgVVJCcyBjb250YWluIHNpbGVuY2UgKi8KKwkJc3Bpbl9sb2NrX2lycSgmdWEtPmxvY2spOworCQlmcmFtZXMgPSB1YS0+cmF0ZV9mZWVkYmFja1t1YS0+cmF0ZV9mZWVkYmFja19zdGFydF07CisJCWFkZF93aXRoX3dyYXBhcm91bmQodWEsICZ1YS0+cmF0ZV9mZWVkYmFja19zdGFydCwgMSk7CisJCXVhLT5yYXRlX2ZlZWRiYWNrX2NvdW50LS07CisJCXNwaW5fdW5sb2NrX2lycSgmdWEtPmxvY2spOworCQl1cmIgPSAmdWEtPnBsYXliYWNrLnVyYnNbaV0tPnVyYjsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1swXS5sZW5ndGggPQorCQkJZnJhbWVzICogdWEtPnBsYXliYWNrLmZyYW1lX2J5dGVzOworCQltZW1zZXQodXJiLT50cmFuc2Zlcl9idWZmZXIsIDAsCisJCSAgICAgICB1cmItPmlzb19mcmFtZV9kZXNjWzBdLmxlbmd0aCk7CisJfQorCisJc2V0X2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpOworCWVyciA9IHN1Ym1pdF9zdHJlYW1fdXJicyh1YSwgJnVhLT5wbGF5YmFjayk7CisJaWYgKGVyciA8IDApCisJCXN0b3BfdXNiX3BsYXliYWNrKHVhKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBhYm9ydF9hbHNhX2NhcHR1cmUoc3RydWN0IHVhMTAxICp1YSkKK3sKKwlpZiAodGVzdF9iaXQoQUxTQV9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJc25kX3BjbV9zdG9wKHVhLT5jYXB0dXJlLnN1YnN0cmVhbSwgU05EUlZfUENNX1NUQVRFX1hSVU4pOworfQorCitzdGF0aWMgdm9pZCBhYm9ydF9hbHNhX3BsYXliYWNrKHN0cnVjdCB1YTEwMSAqdWEpCit7CisJaWYgKHRlc3RfYml0KEFMU0FfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQlzbmRfcGNtX3N0b3AodWEtPnBsYXliYWNrLnN1YnN0cmVhbSwgU05EUlZfUENNX1NUQVRFX1hSVU4pOworfQorCitzdGF0aWMgaW50IHNldF9zdHJlYW1faHcoc3RydWN0IHVhMTAxICp1YSwgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgdW5zaWduZWQgaW50IGNoYW5uZWxzKQoreworCWludCBlcnI7CisKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LmluZm8gPQorCQlTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCVNORFJWX1BDTV9JTkZPX0JBVENIIHwKKwkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCVNORFJWX1BDTV9JTkZPX0ZJRk9fSU5fRlJBTUVTOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcuZm9ybWF0cyA9IHVhLT5mb3JtYXRfYml0OworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcucmF0ZXMgPSBzbmRfcGNtX3JhdGVfdG9fcmF0ZV9iaXQodWEtPnJhdGUpOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcucmF0ZV9taW4gPSB1YS0+cmF0ZTsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LnJhdGVfbWF4ID0gdWEtPnJhdGU7CisJc3Vic3RyZWFtLT5ydW50aW1lLT5ody5jaGFubmVsc19taW4gPSBjaGFubmVsczsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCA9IGNoYW5uZWxzOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcuYnVmZmVyX2J5dGVzX21heCA9IDQ1MDAwICogMTAyNDsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LnBlcmlvZF9ieXRlc19taW4gPSAxOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcucGVyaW9kX2J5dGVzX21heCA9IFVJTlRfTUFYOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcucGVyaW9kc19taW4gPSAyOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcucGVyaW9kc19tYXggPSBVSU5UX01BWDsKKwllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHN1YnN0cmVhbS0+cnVudGltZSwKKwkJCQkJICAgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9USU1FLAorCQkJCQkgICAxNTAwMDAwIC8gdWEtPnBhY2tldHNfcGVyX3NlY29uZCwKKwkJCQkJICAgODE5MjAwMCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cyhzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsIDMyLCAyNCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjYXB0dXJlX3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyOworCisJdWEtPmNhcHR1cmUuc3Vic3RyZWFtID0gc3Vic3RyZWFtOworCWVyciA9IHNldF9zdHJlYW1faHcodWEsIHN1YnN0cmVhbSwgdWEtPmNhcHR1cmUuY2hhbm5lbHMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcuZmlmb19zaXplID0KKwkJRElWX1JPVU5EX0NMT1NFU1QodWEtPnJhdGUsIHVhLT5wYWNrZXRzX3Blcl9zZWNvbmQpOworCXN1YnN0cmVhbS0+cnVudGltZS0+ZGVsYXkgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LmZpZm9fc2l6ZTsKKworCW11dGV4X2xvY2soJnVhLT5tdXRleCk7CisJZXJyID0gc3RhcnRfdXNiX2NhcHR1cmUodWEpOworCWlmIChlcnIgPj0gMCkKKwkJc2V0X2JpdChBTFNBX0NBUFRVUkVfT1BFTiwgJnVhLT5zdGF0ZXMpOworCW11dGV4X3VubG9jaygmdWEtPm11dGV4KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBsYXliYWNrX3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyOworCisJdWEtPnBsYXliYWNrLnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwllcnIgPSBzZXRfc3RyZWFtX2h3KHVhLCBzdWJzdHJlYW0sIHVhLT5wbGF5YmFjay5jaGFubmVscyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJc3Vic3RyZWFtLT5ydW50aW1lLT5ody5maWZvX3NpemUgPQorCQlESVZfUk9VTkRfQ0xPU0VTVCh1YS0+cmF0ZSAqIHVhLT5wbGF5YmFjay5xdWV1ZV9sZW5ndGgsCisJCQkJICB1YS0+cGFja2V0c19wZXJfc2Vjb25kKTsKKworCW11dGV4X2xvY2soJnVhLT5tdXRleCk7CisJZXJyID0gc3RhcnRfdXNiX2NhcHR1cmUodWEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOworCWVyciA9IHN0YXJ0X3VzYl9wbGF5YmFjayh1YSk7CisJaWYgKGVyciA8IDApIHsKKwkJaWYgKCF0ZXN0X2JpdChBTFNBX0NBUFRVUkVfT1BFTiwgJnVhLT5zdGF0ZXMpKQorCQkJc3RvcF91c2JfY2FwdHVyZSh1YSk7CisJCWdvdG8gZXJyb3I7CisJfQorCXNldF9iaXQoQUxTQV9QTEFZQkFDS19PUEVOLCAmdWEtPnN0YXRlcyk7CitlcnJvcjoKKwltdXRleF91bmxvY2soJnVhLT5tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjYXB0dXJlX3BjbV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisKKwltdXRleF9sb2NrKCZ1YS0+bXV0ZXgpOworCWNsZWFyX2JpdChBTFNBX0NBUFRVUkVfT1BFTiwgJnVhLT5zdGF0ZXMpOworCWlmICghdGVzdF9iaXQoQUxTQV9QTEFZQkFDS19PUEVOLCAmdWEtPnN0YXRlcykpCisJCXN0b3BfdXNiX2NhcHR1cmUodWEpOworCW11dGV4X3VubG9jaygmdWEtPm11dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbGF5YmFja19wY21fY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHVhMTAxICp1YSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCisJbXV0ZXhfbG9jaygmdWEtPm11dGV4KTsKKwlzdG9wX3VzYl9wbGF5YmFjayh1YSk7CisJY2xlYXJfYml0KEFMU0FfUExBWUJBQ0tfT1BFTiwgJnVhLT5zdGF0ZXMpOworCWlmICghdGVzdF9iaXQoQUxTQV9DQVBUVVJFX09QRU4sICZ1YS0+c3RhdGVzKSkKKwkJc3RvcF91c2JfY2FwdHVyZSh1YSk7CisJbXV0ZXhfdW5sb2NrKCZ1YS0+bXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhcHR1cmVfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IHVhMTAxICp1YSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZ1YS0+bXV0ZXgpOworCWVyciA9IHN0YXJ0X3VzYl9jYXB0dXJlKHVhKTsKKwltdXRleF91bmxvY2soJnVhLT5tdXRleCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gc25kX3BjbV9saWJfYWxsb2Nfdm1hbGxvY19idWZmZXIoc3Vic3RyZWFtLAorCQkJCQkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKK30KKworc3RhdGljIGludCBwbGF5YmFja19wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IHVhMTAxICp1YSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZ1YS0+bXV0ZXgpOworCWVyciA9IHN0YXJ0X3VzYl9jYXB0dXJlKHVhKTsKKwlpZiAoZXJyID49IDApCisJCWVyciA9IHN0YXJ0X3VzYl9wbGF5YmFjayh1YSk7CisJbXV0ZXhfdW5sb2NrKCZ1YS0+bXV0ZXgpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHNuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSwKKwkJCQkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7Cit9CisKK3N0YXRpYyBpbnQgdWExMDFfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfdm1hbGxvY19idWZmZXIoc3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBjYXB0dXJlX3BjbV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmdWEtPm11dGV4KTsKKwllcnIgPSBzdGFydF91c2JfY2FwdHVyZSh1YSk7CisJbXV0ZXhfdW5sb2NrKCZ1YS0+bXV0ZXgpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyoKKwkgKiBUaGUgRUhDSSBkcml2ZXIgc2NoZWR1bGVzIHRoZSBmaXJzdCBwYWNrZXQgb2YgYW4gaXNvIHN0cmVhbSBhdCAxMCBtcworCSAqIGluIHRoZSBmdXR1cmUsIGkuZS4sIG5vIGRhdGEgaXMgYWN0dWFsbHkgY2FwdHVyZWQgZm9yIHRoYXQgbG9uZy4KKwkgKiBUYWtlIHRoZSB3YWl0IGhlcmUgc28gdGhhdCB0aGUgc3RyZWFtIGlzIGtub3duIHRvIGJlIGFjdHVhbGx5CisJICogcnVubmluZyB3aGVuIHRoZSBzdGFydCB0cmlnZ2VyIGhhcyBiZWVuIGNhbGxlZC4KKwkgKi8KKwl3YWl0X2V2ZW50KHVhLT5hbHNhX2NhcHR1cmVfd2FpdCwKKwkJICAgdGVzdF9iaXQoQ0FQVFVSRV9VUkJfQ09NUExFVEVELCAmdWEtPnN0YXRlcykgfHwKKwkJICAgIXRlc3RfYml0KFVTQl9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSk7CisJaWYgKHRlc3RfYml0KERJU0NPTk5FQ1RFRCwgJnVhLT5zdGF0ZXMpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIXRlc3RfYml0KFVTQl9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKSkKKwkJcmV0dXJuIC1FSU87CisKKwl1YS0+Y2FwdHVyZS5wZXJpb2RfcG9zID0gMDsKKwl1YS0+Y2FwdHVyZS5idWZmZXJfcG9zID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbGF5YmFja19wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJaW50IGVycjsKKworCW11dGV4X2xvY2soJnVhLT5tdXRleCk7CisJZXJyID0gc3RhcnRfdXNiX2NhcHR1cmUodWEpOworCWlmIChlcnIgPj0gMCkKKwkJZXJyID0gc3RhcnRfdXNiX3BsYXliYWNrKHVhKTsKKwltdXRleF91bmxvY2soJnVhLT5tdXRleCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBzZWUgdGhlIGNvbW1lbnQgaW4gY2FwdHVyZV9wY21fcHJlcGFyZSgpICovCisJd2FpdF9ldmVudCh1YS0+YWxzYV9wbGF5YmFja193YWl0LAorCQkgICB0ZXN0X2JpdChQTEFZQkFDS19VUkJfQ09NUExFVEVELCAmdWEtPnN0YXRlcykgfHwKKwkJICAgIXRlc3RfYml0KFVTQl9QTEFZQkFDS19SVU5OSU5HLCAmdWEtPnN0YXRlcykpOworCWlmICh0ZXN0X2JpdChESVNDT05ORUNURUQsICZ1YS0+c3RhdGVzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCF0ZXN0X2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQlyZXR1cm4gLUVJTzsKKworCXN1YnN0cmVhbS0+cnVudGltZS0+ZGVsYXkgPSAwOworCXVhLT5wbGF5YmFjay5wZXJpb2RfcG9zID0gMDsKKwl1YS0+cGxheWJhY2suYnVmZmVyX3BvcyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2FwdHVyZV9wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCWlmICghdGVzdF9iaXQoVVNCX0NBUFRVUkVfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQkJcmV0dXJuIC1FSU87CisJCXNldF9iaXQoQUxTQV9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQljbGVhcl9iaXQoQUxTQV9DQVBUVVJFX1JVTk5JTkcsICZ1YS0+c3RhdGVzKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaW50IHBsYXliYWNrX3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJaWYgKCF0ZXN0X2JpdChVU0JfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpKQorCQkJcmV0dXJuIC1FSU87CisJCXNldF9iaXQoQUxTQV9QTEFZQkFDS19SVU5OSU5HLCAmdWEtPnN0YXRlcyk7CisJCXJldHVybiAwOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJY2xlYXJfYml0KEFMU0FfUExBWUJBQ0tfUlVOTklORywgJnVhLT5zdGF0ZXMpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgc25kX3BjbV91ZnJhbWVzX3QgdWExMDFfcGNtX3BvaW50ZXIoc3RydWN0IHVhMTAxICp1YSwKKwkJCQkJCSAgc3RydWN0IHVhMTAxX3N0cmVhbSAqc3RyZWFtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHBvczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1YS0+bG9jaywgZmxhZ3MpOworCXBvcyA9IHN0cmVhbS0+YnVmZmVyX3BvczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YS0+bG9jaywgZmxhZ3MpOworCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBjYXB0dXJlX3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicykKK3sKKwlzdHJ1Y3QgdWExMDEgKnVhID0gc3Vicy0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHVhMTAxX3BjbV9wb2ludGVyKHVhLCAmdWEtPmNhcHR1cmUpOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QgcGxheWJhY2tfcGNtX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBzdWJzLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gdWExMDFfcGNtX3BvaW50ZXIodWEsICZ1YS0+cGxheWJhY2spOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIGNhcHR1cmVfcGNtX29wcyA9IHsKKwkub3BlbiA9IGNhcHR1cmVfcGNtX29wZW4sCisJLmNsb3NlID0gY2FwdHVyZV9wY21fY2xvc2UsCisJLmlvY3RsID0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9IGNhcHR1cmVfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9IHVhMTAxX3BjbV9od19mcmVlLAorCS5wcmVwYXJlID0gY2FwdHVyZV9wY21fcHJlcGFyZSwKKwkudHJpZ2dlciA9IGNhcHR1cmVfcGNtX3RyaWdnZXIsCisJLnBvaW50ZXIgPSBjYXB0dXJlX3BjbV9wb2ludGVyLAorCS5wYWdlID0gc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZSwKKwkubW1hcCA9IHNuZF9wY21fbGliX21tYXBfdm1hbGxvYywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgcGxheWJhY2tfcGNtX29wcyA9IHsKKwkub3BlbiA9IHBsYXliYWNrX3BjbV9vcGVuLAorCS5jbG9zZSA9IHBsYXliYWNrX3BjbV9jbG9zZSwKKwkuaW9jdGwgPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0gcGxheWJhY2tfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9IHVhMTAxX3BjbV9od19mcmVlLAorCS5wcmVwYXJlID0gcGxheWJhY2tfcGNtX3ByZXBhcmUsCisJLnRyaWdnZXIgPSBwbGF5YmFja19wY21fdHJpZ2dlciwKKwkucG9pbnRlciA9IHBsYXliYWNrX3BjbV9wb2ludGVyLAorCS5wYWdlID0gc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZSwKKwkubW1hcCA9IHNuZF9wY21fbGliX21tYXBfdm1hbGxvYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdWFjX2Zvcm1hdF90eXBlX2lfZGlzY3JldGVfZGVzY3JpcHRvciAqCitmaW5kX2Zvcm1hdF9kZXNjcmlwdG9yKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OworCXU4ICpleHRyYTsKKwlpbnQgZXh0cmFsZW47CisKKwlpZiAoaW50ZXJmYWNlLT5udW1fYWx0c2V0dGluZyAhPSAyKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiaW52YWxpZCBudW1fYWx0c2V0dGluZ1xuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCWFsdCA9ICZpbnRlcmZhY2UtPmFsdHNldHRpbmdbMF07CisJaWYgKGFsdC0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDApIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJpbnZhbGlkIGJOdW1FbmRwb2ludHNcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlhbHQgPSAmaW50ZXJmYWNlLT5hbHRzZXR0aW5nWzFdOworCWlmIChhbHQtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAxKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiaW52YWxpZCBiTnVtRW5kcG9pbnRzXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZXh0cmEgPSBhbHQtPmV4dHJhOworCWV4dHJhbGVuID0gYWx0LT5leHRyYWxlbjsKKwl3aGlsZSAoZXh0cmFsZW4gPj0gc2l6ZW9mKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIpKSB7CisJCXN0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yICpkZXNjOworCisJCWRlc2MgPSAoc3RydWN0IHVhY19mb3JtYXRfdHlwZV9pX2Rpc2NyZXRlX2Rlc2NyaXB0b3IgKilleHRyYTsKKwkJaWYgKGRlc2MtPmJMZW5ndGggPiBleHRyYWxlbikgeworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJkZXNjcmlwdG9yIG92ZXJmbG93XG4iKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWlmIChkZXNjLT5iTGVuZ3RoID09IFVBQ19GT1JNQVRfVFlQRV9JX0RJU0NSRVRFX0RFU0NfU0laRSgxKSAmJgorCQkgICAgZGVzYy0+YkRlc2NyaXB0b3JUeXBlID09IFVTQl9EVF9DU19JTlRFUkZBQ0UgJiYKKwkJICAgIGRlc2MtPmJEZXNjcmlwdG9yU3VidHlwZSA9PSBVQUNfRk9STUFUX1RZUEUpIHsKKwkJCWlmIChkZXNjLT5iRm9ybWF0VHlwZSAhPSBVQUNfRk9STUFUX1RZUEVfSV9QQ00gfHwKKwkJCSAgICBkZXNjLT5iU2FtRnJlcVR5cGUgIT0gMSkgeworCQkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LAorCQkJCQkiaW52YWxpZCBmb3JtYXQgdHlwZVxuIik7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlyZXR1cm4gZGVzYzsKKwkJfQorCQlleHRyYWxlbiAtPSBkZXNjLT5iTGVuZ3RoOworCQlleHRyYSArPSBkZXNjLT5iTGVuZ3RoOworCX0KKwlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgInNhbXBsZSBmb3JtYXQgZGVzY3JpcHRvciBub3QgZm91bmRcbiIpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGRldGVjdF91c2JfZm9ybWF0KHN0cnVjdCB1YTEwMSAqdWEpCit7CisJY29uc3Qgc3RydWN0IHVhY19mb3JtYXRfdHlwZV9pX2Rpc2NyZXRlX2Rlc2NyaXB0b3IgKmZtdF9jYXB0dXJlOworCWNvbnN0IHN0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yICpmbXRfcGxheWJhY2s7CisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQ7CisJdW5zaWduZWQgaW50IHJhdGUyOworCisJZm10X2NhcHR1cmUgPSBmaW5kX2Zvcm1hdF9kZXNjcmlwdG9yKHVhLT5pbnRmW0lOVEZfQ0FQVFVSRV0pOworCWZtdF9wbGF5YmFjayA9IGZpbmRfZm9ybWF0X2Rlc2NyaXB0b3IodWEtPmludGZbSU5URl9QTEFZQkFDS10pOworCWlmICghZm10X2NhcHR1cmUgfHwgIWZtdF9wbGF5YmFjaykKKwkJcmV0dXJuIC1FTlhJTzsKKworCXN3aXRjaCAoZm10X2NhcHR1cmUtPmJTdWJmcmFtZVNpemUpIHsKKwljYXNlIDM6CisJCXVhLT5mb3JtYXRfYml0ID0gU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFOworCQlicmVhazsKKwljYXNlIDQ6CisJCXVhLT5mb3JtYXRfYml0ID0gU05EUlZfUENNX0ZNVEJJVF9TMzJfTEU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwgInNhbXBsZSB3aWR0aCBpcyBub3QgMjQgb3IgMzIgYml0c1xuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCWlmIChmbXRfY2FwdHVyZS0+YlN1YmZyYW1lU2l6ZSAhPSBmbXRfcGxheWJhY2stPmJTdWJmcmFtZVNpemUpIHsKKwkJZGV2X2VycigmdWEtPmRldi0+ZGV2LAorCQkJInBsYXliYWNrL2NhcHR1cmUgc2FtcGxlIHdpZHRocyBkbyBub3QgbWF0Y2hcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWlmIChmbXRfY2FwdHVyZS0+YkJpdFJlc29sdXRpb24gIT0gMjQgfHwKKwkgICAgZm10X3BsYXliYWNrLT5iQml0UmVzb2x1dGlvbiAhPSAyNCkgeworCQlkZXZfZXJyKCZ1YS0+ZGV2LT5kZXYsICJzYW1wbGUgd2lkdGggaXMgbm90IDI0IGJpdHNcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXVhLT5yYXRlID0gY29tYmluZV90cmlwbGUoZm10X2NhcHR1cmUtPnRTYW1GcmVxWzBdKTsKKwlyYXRlMiA9IGNvbWJpbmVfdHJpcGxlKGZtdF9wbGF5YmFjay0+dFNhbUZyZXFbMF0pOworCWlmICh1YS0+cmF0ZSAhPSByYXRlMikgeworCQlkZXZfZXJyKCZ1YS0+ZGV2LT5kZXYsCisJCQkicGxheWJhY2svY2FwdHVyZSByYXRlcyBkbyBub3QgbWF0Y2g6ICV1LyV1XG4iLAorCQkJcmF0ZTIsIHVhLT5yYXRlKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlzd2l0Y2ggKHVhLT5kZXYtPnNwZWVkKSB7CisJY2FzZSBVU0JfU1BFRURfRlVMTDoKKwkJdWEtPnBhY2tldHNfcGVyX3NlY29uZCA9IDEwMDA7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCXVhLT5wYWNrZXRzX3Blcl9zZWNvbmQgPSA4MDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZ1YS0+ZGV2LT5kZXYsICJ1bmtub3duIGRldmljZSBzcGVlZFxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJdWEtPmNhcHR1cmUuY2hhbm5lbHMgPSBmbXRfY2FwdHVyZS0+Yk5yQ2hhbm5lbHM7CisJdWEtPnBsYXliYWNrLmNoYW5uZWxzID0gZm10X3BsYXliYWNrLT5iTnJDaGFubmVsczsKKwl1YS0+Y2FwdHVyZS5mcmFtZV9ieXRlcyA9CisJCWZtdF9jYXB0dXJlLT5iU3ViZnJhbWVTaXplICogdWEtPmNhcHR1cmUuY2hhbm5lbHM7CisJdWEtPnBsYXliYWNrLmZyYW1lX2J5dGVzID0KKwkJZm10X3BsYXliYWNrLT5iU3ViZnJhbWVTaXplICogdWEtPnBsYXliYWNrLmNoYW5uZWxzOworCisJZXBkID0gJnVhLT5pbnRmW0lOVEZfQ0FQVFVSRV0tPmFsdHNldHRpbmdbMV0uZW5kcG9pbnRbMF0uZGVzYzsKKwlpZiAoIXVzYl9lbmRwb2ludF9pc19pc29jX2luKGVwZCkpIHsKKwkJZGV2X2VycigmdWEtPmRldi0+ZGV2LCAiaW52YWxpZCBjYXB0dXJlIGVuZHBvaW50XG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJdWEtPmNhcHR1cmUudXNiX3BpcGUgPSB1c2JfcmN2aXNvY3BpcGUodWEtPmRldiwgdXNiX2VuZHBvaW50X251bShlcGQpKTsKKwl1YS0+Y2FwdHVyZS5tYXhfcGFja2V0X2J5dGVzID0gbGUxNl90b19jcHUoZXBkLT53TWF4UGFja2V0U2l6ZSk7CisKKwllcGQgPSAmdWEtPmludGZbSU5URl9QTEFZQkFDS10tPmFsdHNldHRpbmdbMV0uZW5kcG9pbnRbMF0uZGVzYzsKKwlpZiAoIXVzYl9lbmRwb2ludF9pc19pc29jX291dChlcGQpKSB7CisJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwgImludmFsaWQgcGxheWJhY2sgZW5kcG9pbnRcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKwl1YS0+cGxheWJhY2sudXNiX3BpcGUgPSB1c2Jfc25kaXNvY3BpcGUodWEtPmRldiwgdXNiX2VuZHBvaW50X251bShlcGQpKTsKKwl1YS0+cGxheWJhY2subWF4X3BhY2tldF9ieXRlcyA9IGxlMTZfdG9fY3B1KGVwZC0+d01heFBhY2tldFNpemUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsbG9jX3N0cmVhbV9idWZmZXJzKHN0cnVjdCB1YTEwMSAqdWEsIHN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVtYWluaW5nX3BhY2tldHMsIHBhY2tldHMsIHBhY2tldHNfcGVyX3BhZ2UsIGk7CisJc2l6ZV90IHNpemU7CisKKwlzdHJlYW0tPnF1ZXVlX2xlbmd0aCA9IHF1ZXVlX2xlbmd0aDsKKwlzdHJlYW0tPnF1ZXVlX2xlbmd0aCA9IG1heChzdHJlYW0tPnF1ZXVlX2xlbmd0aCwKKwkJCQkgICAodW5zaWduZWQgaW50KU1JTl9RVUVVRV9MRU5HVEgpOworCXN0cmVhbS0+cXVldWVfbGVuZ3RoID0gbWluKHN0cmVhbS0+cXVldWVfbGVuZ3RoLAorCQkJCSAgICh1bnNpZ25lZCBpbnQpTUFYX1FVRVVFX0xFTkdUSCk7CisKKwkvKgorCSAqIFRoZSBjYWNoZSBwb29sIHNpemVzIHVzZWQgYnkgdXNiX2J1ZmZlcl9hbGxvYygpICgxMjgsIDUxMiwgMjA0OCkgYXJlCisJICogcXVpdGUgYmFkIHdoZW4gdXNlZCB3aXRoIHRoZSBwYWNrZXQgc2l6ZXMgb2YgdGhpcyBkZXZpY2UgKGUuZy4gMjgwLAorCSAqIDUyMCwgNjI0KS4gIFRoZXJlZm9yZSwgd2UgYWxsb2NhdGUgYW5kIHN1YmRpdmlkZSBlbnRpcmUgcGFnZXMsIHVzaW5nCisJICogYSBzbWFsbGVyIGJ1ZmZlciBvbmx5IGZvciB0aGUgbGFzdCBjaHVuay4KKwkgKi8KKwlyZW1haW5pbmdfcGFja2V0cyA9IHN0cmVhbS0+cXVldWVfbGVuZ3RoOworCXBhY2tldHNfcGVyX3BhZ2UgPSBQQUdFX1NJWkUgLyBzdHJlYW0tPm1heF9wYWNrZXRfYnl0ZXM7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3RyZWFtLT5idWZmZXJzKTsgKytpKSB7CisJCXBhY2tldHMgPSBtaW4ocmVtYWluaW5nX3BhY2tldHMsIHBhY2tldHNfcGVyX3BhZ2UpOworCQlzaXplID0gcGFja2V0cyAqIHN0cmVhbS0+bWF4X3BhY2tldF9ieXRlczsKKwkJc3RyZWFtLT5idWZmZXJzW2ldLmFkZHIgPQorCQkJdXNiX2J1ZmZlcl9hbGxvYyh1YS0+ZGV2LCBzaXplLCBHRlBfS0VSTkVMLAorCQkJCQkgJnN0cmVhbS0+YnVmZmVyc1tpXS5kbWEpOworCQlpZiAoIXN0cmVhbS0+YnVmZmVyc1tpXS5hZGRyKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXN0cmVhbS0+YnVmZmVyc1tpXS5zaXplID0gc2l6ZTsKKwkJcmVtYWluaW5nX3BhY2tldHMgLT0gcGFja2V0czsKKwkJaWYgKCFyZW1haW5pbmdfcGFja2V0cykKKwkJCWJyZWFrOworCX0KKwlpZiAocmVtYWluaW5nX3BhY2tldHMpIHsKKwkJZGV2X2VycigmdWEtPmRldi0+ZGV2LCAidG9vIG1hbnkgcGFja2V0c1xuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3N0cmVhbV9idWZmZXJzKHN0cnVjdCB1YTEwMSAqdWEsIHN0cnVjdCB1YTEwMV9zdHJlYW0gKnN0cmVhbSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0cmVhbS0+YnVmZmVycyk7ICsraSkKKwkJdXNiX2J1ZmZlcl9mcmVlKHVhLT5kZXYsCisJCQkJc3RyZWFtLT5idWZmZXJzW2ldLnNpemUsCisJCQkJc3RyZWFtLT5idWZmZXJzW2ldLmFkZHIsCisJCQkJc3RyZWFtLT5idWZmZXJzW2ldLmRtYSk7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2Nfc3RyZWFtX3VyYnMoc3RydWN0IHVhMTAxICp1YSwgc3RydWN0IHVhMTAxX3N0cmVhbSAqc3RyZWFtLAorCQkJICAgICB2b2lkICgqdXJiX2NvbXBsZXRlKShzdHJ1Y3QgdXJiICopKQoreworCXVuc2lnbmVkIG1heF9wYWNrZXRfc2l6ZSA9IHN0cmVhbS0+bWF4X3BhY2tldF9ieXRlczsKKwlzdHJ1Y3QgdWExMDFfdXJiICp1cmI7CisJdW5zaWduZWQgaW50IGIsIHUgPSAwOworCisJZm9yIChiID0gMDsgYiA8IEFSUkFZX1NJWkUoc3RyZWFtLT5idWZmZXJzKTsgKytiKSB7CisJCXVuc2lnbmVkIGludCBzaXplID0gc3RyZWFtLT5idWZmZXJzW2JdLnNpemU7CisJCXU4ICphZGRyID0gc3RyZWFtLT5idWZmZXJzW2JdLmFkZHI7CisJCWRtYV9hZGRyX3QgZG1hID0gc3RyZWFtLT5idWZmZXJzW2JdLmRtYTsKKworCQl3aGlsZSAoc2l6ZSA+PSBtYXhfcGFja2V0X3NpemUpIHsKKwkJCWlmICh1ID49IHN0cmVhbS0+cXVldWVfbGVuZ3RoKQorCQkJCWdvdG8gYnVmc2l6ZV9lcnJvcjsKKwkJCXVyYiA9IGttYWxsb2Moc2l6ZW9mKCp1cmIpLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghdXJiKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJdXNiX2luaXRfdXJiKCZ1cmItPnVyYik7CisJCQl1cmItPnVyYi5kZXYgPSB1YS0+ZGV2OworCQkJdXJiLT51cmIucGlwZSA9IHN0cmVhbS0+dXNiX3BpcGU7CisJCQl1cmItPnVyYi50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUCB8CisJCQkJCVVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCQkJdXJiLT51cmIudHJhbnNmZXJfYnVmZmVyID0gYWRkcjsKKwkJCXVyYi0+dXJiLnRyYW5zZmVyX2RtYSA9IGRtYTsKKwkJCXVyYi0+dXJiLnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBtYXhfcGFja2V0X3NpemU7CisJCQl1cmItPnVyYi5udW1iZXJfb2ZfcGFja2V0cyA9IDE7CisJCQl1cmItPnVyYi5pbnRlcnZhbCA9IDE7CisJCQl1cmItPnVyYi5jb250ZXh0ID0gdWE7CisJCQl1cmItPnVyYi5jb21wbGV0ZSA9IHVyYl9jb21wbGV0ZTsKKwkJCXVyYi0+dXJiLmlzb19mcmFtZV9kZXNjWzBdLm9mZnNldCA9IDA7CisJCQl1cmItPnVyYi5pc29fZnJhbWVfZGVzY1swXS5sZW5ndGggPSBtYXhfcGFja2V0X3NpemU7CisJCQlzdHJlYW0tPnVyYnNbdSsrXSA9IHVyYjsKKwkJCXNpemUgLT0gbWF4X3BhY2tldF9zaXplOworCQkJYWRkciArPSBtYXhfcGFja2V0X3NpemU7CisJCQlkbWEgKz0gbWF4X3BhY2tldF9zaXplOworCQl9CisJfQorCWlmICh1ID09IHN0cmVhbS0+cXVldWVfbGVuZ3RoKQorCQlyZXR1cm4gMDsKK2J1ZnNpemVfZXJyb3I6CisJZGV2X2VycigmdWEtPmRldi0+ZGV2LCAiaW50ZXJuYWwgYnVmZmVyIHNpemUgZXJyb3JcbiIpOworCXJldHVybiAtRU5YSU87Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfc3RyZWFtX3VyYnMoc3RydWN0IHVhMTAxX3N0cmVhbSAqc3RyZWFtKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IHN0cmVhbS0+cXVldWVfbGVuZ3RoOyArK2kpCisJCWtmcmVlKHN0cmVhbS0+dXJic1tpXSk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfdXNiX3JlbGF0ZWRfcmVzb3VyY2VzKHN0cnVjdCB1YTEwMSAqdWEsCisJCQkJICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmcmVlX3N0cmVhbV91cmJzKCZ1YS0+Y2FwdHVyZSk7CisJZnJlZV9zdHJlYW1fdXJicygmdWEtPnBsYXliYWNrKTsKKwlmcmVlX3N0cmVhbV9idWZmZXJzKHVhLCAmdWEtPmNhcHR1cmUpOworCWZyZWVfc3RyZWFtX2J1ZmZlcnModWEsICZ1YS0+cGxheWJhY2spOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodWEtPmludGYpOyArK2kpCisJCWlmICh1YS0+aW50ZltpXSkgeworCQkJdXNiX3NldF9pbnRmZGF0YSh1YS0+aW50ZltpXSwgTlVMTCk7CisJCQlpZiAodWEtPmludGZbaV0gIT0gaW50ZXJmYWNlKQorCQkJCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoJnVhMTAxX2RyaXZlciwKKwkJCQkJCQkgICAgIHVhLT5pbnRmW2ldKTsKKwkJfQorfQorCitzdGF0aWMgdm9pZCB1YTEwMV9jYXJkX2ZyZWUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwltdXRleF9kZXN0cm95KCZ1YS0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IHVhMTAxX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqdXNiX2lkKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3VzYl9taWRpX2VuZHBvaW50X2luZm8gbWlkaV9lcCA9IHsKKwkJLm91dF9jYWJsZXMgPSAweDAwMDEsCisJCS5pbl9jYWJsZXMgPSAweDAwMDEKKwl9OworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyayBtaWRpX3F1aXJrID0geworCQkudHlwZSA9IFFVSVJLX01JRElfRklYRURfRU5EUE9JTlQsCisJCS5kYXRhID0gJm1pZGlfZXAKKwl9OworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgdWExMDEgKnVhOworCXVuc2lnbmVkIGludCBjYXJkX2luZGV4LCBpOworCWNoYXIgdXNiX3BhdGhbMzJdOworCWludCBlcnI7CisKKwlpZiAoaW50ZXJmYWNlLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgIT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZkZXZpY2VzX211dGV4KTsKKworCWZvciAoY2FyZF9pbmRleCA9IDA7IGNhcmRfaW5kZXggPCBTTkRSVl9DQVJEUzsgKytjYXJkX2luZGV4KQorCQlpZiAoZW5hYmxlW2NhcmRfaW5kZXhdICYmICEoZGV2aWNlc191c2VkICYgKDEgPDwgY2FyZF9pbmRleCkpKQorCQkJYnJlYWs7CisJaWYgKGNhcmRfaW5kZXggPj0gU05EUlZfQ0FSRFMpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXZpY2VzX211dGV4KTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtjYXJkX2luZGV4XSwgaWRbY2FyZF9pbmRleF0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKCp1YSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQltdXRleF91bmxvY2soJmRldmljZXNfbXV0ZXgpOworCQlyZXR1cm4gZXJyOworCX0KKwljYXJkLT5wcml2YXRlX2ZyZWUgPSB1YTEwMV9jYXJkX2ZyZWU7CisJdWEgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJdWEtPmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwl1YS0+Y2FyZCA9IGNhcmQ7CisJdWEtPmNhcmRfaW5kZXggPSBjYXJkX2luZGV4OworCUlOSVRfTElTVF9IRUFEKCZ1YS0+bWlkaV9saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmdWEtPmxvY2spOworCW11dGV4X2luaXQoJnVhLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJnVhLT5yZWFkeV9wbGF5YmFja191cmJzKTsKKwl0YXNrbGV0X2luaXQoJnVhLT5wbGF5YmFja190YXNrbGV0LAorCQkgICAgIHBsYXliYWNrX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXVhKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1YS0+YWxzYV9jYXB0dXJlX3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVhLT5yYXRlX2ZlZWRiYWNrX3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVhLT5hbHNhX3BsYXliYWNrX3dhaXQpOworCisjaWZkZWYgVUExQV9IQUNLCisJaWYgKHVhLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IGNwdV90b19sZTE2KDB4MDAxOCkpIHsKKwkJdWEtPmludGZbMl0gPSBpbnRlcmZhY2U7CisJCXVhLT5pbnRmWzBdID0gdXNiX2lmbnVtX3RvX2lmKHVhLT5kZXYsIDEpOworCQl1YS0+aW50ZlsxXSA9IHVzYl9pZm51bV90b19pZih1YS0+ZGV2LCAyKTsKKwkJdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoJnVhMTAxX2RyaXZlciwgdWEtPmludGZbMF0sIHVhKTsKKwkJdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoJnVhMTAxX2RyaXZlciwgdWEtPmludGZbMV0sIHVhKTsKKwl9IGVsc2UgeworI2VuZGlmCisJdWEtPmludGZbMF0gPSBpbnRlcmZhY2U7CisJZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUodWEtPmludGYpOyArK2kpIHsKKwkJdWEtPmludGZbaV0gPSB1c2JfaWZudW1fdG9faWYodWEtPmRldiwgaSk7CisJCWlmICghdWEtPmludGZbaV0pIHsKKwkJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwgImludGVyZmFjZSAldSBub3QgZm91bmRcbiIsIGkpOworCQkJZXJyID0gLUVOWElPOworCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJfQorCQllcnIgPSB1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmdWExMDFfZHJpdmVyLAorCQkJCQkJIHVhLT5pbnRmW2ldLCB1YSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQl1YS0+aW50ZltpXSA9IE5VTEw7CisJCQllcnIgPSAtRUJVU1k7CisJCQlnb3RvIHByb2JlX2Vycm9yOworCQl9CisJfQorI2lmZGVmIFVBMUFfSEFDSworCX0KKyNlbmRpZgorCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmaW50ZXJmYWNlLT5kZXYpOworCisjaWZkZWYgVUExQV9IQUNLCisJaWYgKHVhLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IGNwdV90b19sZTE2KDB4MDAxOCkpIHsKKwkJdWEtPmZvcm1hdF9iaXQgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRTsKKwkJdWEtPnJhdGUgPSA0NDEwMDsKKwkJdWEtPnBhY2tldHNfcGVyX3NlY29uZCA9IDEwMDA7CisJCXVhLT5jYXB0dXJlLmNoYW5uZWxzID0gMjsKKwkJdWEtPnBsYXliYWNrLmNoYW5uZWxzID0gMjsKKwkJdWEtPmNhcHR1cmUuZnJhbWVfYnl0ZXMgPSA0OworCQl1YS0+cGxheWJhY2suZnJhbWVfYnl0ZXMgPSA0OworCQl1YS0+Y2FwdHVyZS51c2JfcGlwZSA9IHVzYl9yY3Zpc29jcGlwZSh1YS0+ZGV2LCAyKTsKKwkJdWEtPnBsYXliYWNrLnVzYl9waXBlID0gdXNiX3NuZGlzb2NwaXBlKHVhLT5kZXYsIDEpOworCQl1YS0+Y2FwdHVyZS5tYXhfcGFja2V0X2J5dGVzID0gMTkyOworCQl1YS0+cGxheWJhY2subWF4X3BhY2tldF9ieXRlcyA9IDE5MjsKKwl9IGVsc2UgeworI2VuZGlmCisJZXJyID0gZGV0ZWN0X3VzYl9mb3JtYXQodWEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIHByb2JlX2Vycm9yOworI2lmZGVmIFVBMUFfSEFDSworCX0KKyNlbmRpZgorCisJc3RyY3B5KGNhcmQtPmRyaXZlciwgIlVBLTEwMSIpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJVQS0xMDEiKTsKKwl1c2JfbWFrZV9wYXRoKHVhLT5kZXYsIHVzYl9wYXRoLCBzaXplb2YodXNiX3BhdGgpKTsKKwlzbnByaW50Zih1YS0+Y2FyZC0+bG9uZ25hbWUsIHNpemVvZih1YS0+Y2FyZC0+bG9uZ25hbWUpLAorCQkgIkVESVJPTCBVQS0xMDEgKHNlcmlhbCAlcyksICV1IEh6IGF0ICVzLCAlcyBzcGVlZCIsCisJCSB1YS0+ZGV2LT5zZXJpYWwgPyB1YS0+ZGV2LT5zZXJpYWwgOiAiPyIsIHVhLT5yYXRlLCB1c2JfcGF0aCwKKwkJIHVhLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIID8gImhpZ2giIDogImZ1bGwiKTsKKworCWVyciA9IGFsbG9jX3N0cmVhbV9idWZmZXJzKHVhLCAmdWEtPmNhcHR1cmUpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIHByb2JlX2Vycm9yOworCWVyciA9IGFsbG9jX3N0cmVhbV9idWZmZXJzKHVhLCAmdWEtPnBsYXliYWNrKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBwcm9iZV9lcnJvcjsKKworCWVyciA9IGFsbG9jX3N0cmVhbV91cmJzKHVhLCAmdWEtPmNhcHR1cmUsIGNhcHR1cmVfdXJiX2NvbXBsZXRlKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBwcm9iZV9lcnJvcjsKKwllcnIgPSBhbGxvY19zdHJlYW1fdXJicyh1YSwgJnVhLT5wbGF5YmFjaywgcGxheWJhY2tfdXJiX2NvbXBsZXRlKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBwcm9iZV9lcnJvcjsKKworCWVyciA9IHNuZF9wY21fbmV3KGNhcmQsICJVQS0xMDEiLCAwLCAxLCAxLCAmdWEtPnBjbSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gcHJvYmVfZXJyb3I7CisJdWEtPnBjbS0+cHJpdmF0ZV9kYXRhID0gdWE7CisJc3RyY3B5KHVhLT5wY20tPm5hbWUsICJVQS0xMDEiKTsKKwlzbmRfcGNtX3NldF9vcHModWEtPnBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJnBsYXliYWNrX3BjbV9vcHMpOworCXNuZF9wY21fc2V0X29wcyh1YS0+cGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZjYXB0dXJlX3BjbV9vcHMpOworCisjaWZkZWYgVUExQV9IQUNLCisJaWYgKHVhLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ICE9IGNwdV90b19sZTE2KDB4MDAxOCkpIHsKKyNlbmRpZgorCWVyciA9IHNuZF91c2JtaWRpX2NyZWF0ZShjYXJkLCB1YS0+aW50ZltJTlRGX01JREldLAorCQkJCSAmdWEtPm1pZGlfbGlzdCwgJm1pZGlfcXVpcmspOworCWlmIChlcnIgPCAwKQorCQlnb3RvIHByb2JlX2Vycm9yOworI2lmZGVmIFVBMUFfSEFDSworCX0KKyNlbmRpZgorCisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gcHJvYmVfZXJyb3I7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgdWEpOworCWRldmljZXNfdXNlZCB8PSAxIDw8IGNhcmRfaW5kZXg7CisKKwltdXRleF91bmxvY2soJmRldmljZXNfbXV0ZXgpOworCXJldHVybiAwOworCitwcm9iZV9lcnJvcjoKKwlmcmVlX3VzYl9yZWxhdGVkX3Jlc291cmNlcyh1YSwgaW50ZXJmYWNlKTsKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCW11dGV4X3VubG9jaygmZGV2aWNlc19tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgdWExMDFfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1YTEwMSAqdWEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJc3RydWN0IGxpc3RfaGVhZCAqbWlkaTsKKworCWlmICghdWEpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmRldmljZXNfbXV0ZXgpOworCisJc2V0X2JpdChESVNDT05ORUNURUQsICZ1YS0+c3RhdGVzKTsKKwl3YWtlX3VwKCZ1YS0+cmF0ZV9mZWVkYmFja193YWl0KTsKKworCS8qIG1ha2Ugc3VyZSB0aGF0IHVzZXJzcGFjZSBjYW5ub3QgY3JlYXRlIG5ldyByZXF1ZXN0cyAqLworCXNuZF9jYXJkX2Rpc2Nvbm5lY3QodWEtPmNhcmQpOworCisJLyogbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlIG5vIHBlbmRpbmcgVVNCIHJlcXVlc3RzICovCisJX19saXN0X2Zvcl9lYWNoKG1pZGksICZ1YS0+bWlkaV9saXN0KQorCQlzbmRfdXNibWlkaV9kaXNjb25uZWN0KG1pZGkpOworCWFib3J0X2Fsc2FfcGxheWJhY2sodWEpOworCWFib3J0X2Fsc2FfY2FwdHVyZSh1YSk7CisJbXV0ZXhfbG9jaygmdWEtPm11dGV4KTsKKwlzdG9wX3VzYl9wbGF5YmFjayh1YSk7CisJc3RvcF91c2JfY2FwdHVyZSh1YSk7CisJbXV0ZXhfdW5sb2NrKCZ1YS0+bXV0ZXgpOworCisJZnJlZV91c2JfcmVsYXRlZF9yZXNvdXJjZXModWEsIGludGVyZmFjZSk7CisKKwlkZXZpY2VzX3VzZWQgJj0gfigxIDw8IHVhLT5jYXJkX2luZGV4KTsKKworCXNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQodWEtPmNhcmQpOworCisJbXV0ZXhfdW5sb2NrKCZkZXZpY2VzX211dGV4KTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVhMTAxX2lkc1tdID0geworI2lmZGVmIFVBMUFfSEFDSworCXsgVVNCX0RFVklDRSgweDA1ODIsIDB4MDAxOCkgfSwKKyNlbmRpZgorCXsgVVNCX0RFVklDRSgweDA1ODIsIDB4MDA3ZCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTgyLCAweDAwOGQpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVhMTAxX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1YTEwMV9kcml2ZXIgPSB7CisJLm5hbWUgPSAic25kLXVhMTAxIiwKKwkuaWRfdGFibGUgPSB1YTEwMV9pZHMsCisJLnByb2JlID0gdWExMDFfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSB1YTEwMV9kaXNjb25uZWN0LAorI2lmIDAKKwkuc3VzcGVuZCA9IHVhMTAxX3N1c3BlbmQsCisJLnJlc3VtZSA9IHVhMTAxX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX3VhMTAxX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZ1YTEwMV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX3VhMTAxX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdWExMDFfZHJpdmVyKTsKKwltdXRleF9kZXN0cm95KCZkZXZpY2VzX211dGV4KTsKK30KKworbW9kdWxlX2luaXQoYWxzYV9jYXJkX3VhMTAxX2luaXQpOworbW9kdWxlX2V4aXQoYWxzYV9jYXJkX3VhMTAxX2V4aXQpOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYmF1ZGlvLmMgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwppbmRleCA5ZWRlZjQ2Li5jNTM5ZjdmIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNiYXVkaW8uYworKysgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwpAQCAtNDQsOSArNDQsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvYXVkaW8uaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CisKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtMTcwLDExICsxNzIsMTIgQEAKIAl1bnNpZ25lZCBpbnQgY3VycGFja3NpemU7CS8qIGN1cnJlbnQgcGFja2V0IHNpemUgaW4gYnl0ZXMgKGZvciBjYXB0dXJlKSAqLwogCXVuc2lnbmVkIGludCBjdXJmcmFtZXNpemU7CS8qIGN1cnJlbnQgcGFja2V0IHNpemUgaW4gZnJhbWVzIChmb3IgY2FwdHVyZSkgKi8KIAl1bnNpZ25lZCBpbnQgZmlsbF9tYXg6IDE7CS8qIGZpbGwgbWF4IHBhY2tldCBzaXplIGFsd2F5cyAqLworCXVuc2lnbmVkIGludCB0eGZyX3F1aXJrOjE7CS8qIGFsbG93IHN1Yi1mcmFtZSBhbGlnbm1lbnQgKi8KIAl1bnNpZ25lZCBpbnQgZm10X3R5cGU7CQkvKiBVU0IgYXVkaW8gZm9ybWF0IHR5cGUgKDEtMykgKi8KIAogCXVuc2lnbmVkIGludCBydW5uaW5nOiAxOwkvKiBydW5uaW5nIHN0YXR1cyAqLwogCi0JdW5zaWduZWQgaW50IGh3cHRyX2RvbmU7CQkJLyogcHJvY2Vzc2VkIGZyYW1lIHBvc2l0aW9uIGluIHRoZSBidWZmZXIgKi8KKwl1bnNpZ25lZCBpbnQgaHdwdHJfZG9uZTsJLyogcHJvY2Vzc2VkIGJ5dGUgcG9zaXRpb24gaW4gdGhlIGJ1ZmZlciAqLwogCXVuc2lnbmVkIGludCB0cmFuc2Zlcl9kb25lOwkJLyogcHJvY2Vzc2VkIGZyYW1lcyBzaW5jZSBsYXN0IHBlcmlvZCB1cGRhdGUgKi8KIAl1bnNpZ25lZCBsb25nIGFjdGl2ZV9tYXNrOwkvKiBiaXRtYXNrIG9mIGFjdGl2ZSB1cmJzICovCiAJdW5zaWduZWQgbG9uZyB1bmxpbmtfbWFzazsJLyogYml0bWFzayBvZiB1bmxpbmtlZCB1cmJzICovCkBAIC0zNDMsNyArMzQ2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGNoYXIgKmNwOwogCWludCBpOwotCXVuc2lnbmVkIGludCBzdHJpZGUsIGxlbiwgb2xkcHRyOworCXVuc2lnbmVkIGludCBzdHJpZGUsIGZyYW1lcywgYnl0ZXMsIG9sZHB0cjsKIAlpbnQgcGVyaW9kX2VsYXBzZWQgPSAwOwogCiAJc3RyaWRlID0gcnVudGltZS0+ZnJhbWVfYml0cyA+PiAzOwpAQCAtMzU0LDI5ICszNTcsMzkgQEAKIAkJCXNuZF9wcmludGQoS0VSTl9FUlIgImZyYW1lICVkIGFjdGl2ZTogJWRcbiIsIGksIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKTsKIAkJCS8vIGNvbnRpbnVlOwogCQl9Ci0JCWxlbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCAvIHN0cmlkZTsKLQkJaWYgKCEgbGVuKQotCQkJY29udGludWU7CisJCWJ5dGVzID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOworCQlmcmFtZXMgPSBieXRlcyAvIHN0cmlkZTsKKwkJaWYgKCFzdWJzLT50eGZyX3F1aXJrKQorCQkJYnl0ZXMgPSBmcmFtZXMgKiBzdHJpZGU7CisJCWlmIChieXRlcyAlIChydW50aW1lLT5zYW1wbGVfYml0cyA+PiAzKSAhPSAwKSB7CisjaWZkZWYgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFCisJCQlpbnQgb2xkYnl0ZXMgPSBieXRlczsKKyNlbmRpZgorCQkJYnl0ZXMgPSBmcmFtZXMgKiBzdHJpZGU7CisJCQlzbmRfcHJpbnRkZChLRVJOX0VSUiAiQ29ycmVjdGVkIHVyYiBkYXRhIGxlbi4gJWQtPiVkXG4iLAorCQkJCQkJCW9sZGJ5dGVzLCBieXRlcyk7CisJCX0KIAkJLyogdXBkYXRlIHRoZSBjdXJyZW50IHBvaW50ZXIgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnMtPmxvY2ssIGZsYWdzKTsKIAkJb2xkcHRyID0gc3Vicy0+aHdwdHJfZG9uZTsKLQkJc3Vicy0+aHdwdHJfZG9uZSArPSBsZW47Ci0JCWlmIChzdWJzLT5od3B0cl9kb25lID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQotCQkJc3Vicy0+aHdwdHJfZG9uZSAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQkJc3Vicy0+dHJhbnNmZXJfZG9uZSArPSBsZW47CisJCXN1YnMtPmh3cHRyX2RvbmUgKz0gYnl0ZXM7CisJCWlmIChzdWJzLT5od3B0cl9kb25lID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICogc3RyaWRlKQorCQkJc3Vicy0+aHdwdHJfZG9uZSAtPSBydW50aW1lLT5idWZmZXJfc2l6ZSAqIHN0cmlkZTsKKwkJZnJhbWVzID0gKGJ5dGVzICsgKG9sZHB0ciAlIHN0cmlkZSkpIC8gc3RyaWRlOworCQlzdWJzLT50cmFuc2Zlcl9kb25lICs9IGZyYW1lczsKIAkJaWYgKHN1YnMtPnRyYW5zZmVyX2RvbmUgPj0gcnVudGltZS0+cGVyaW9kX3NpemUpIHsKIAkJCXN1YnMtPnRyYW5zZmVyX2RvbmUgLT0gcnVudGltZS0+cGVyaW9kX3NpemU7CiAJCQlwZXJpb2RfZWxhcHNlZCA9IDE7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3Vicy0+bG9jaywgZmxhZ3MpOwogCQkvKiBjb3B5IGEgZGF0YSBjaHVuayAqLwotCQlpZiAob2xkcHRyICsgbGVuID4gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKLQkJCXVuc2lnbmVkIGludCBjbnQgPSBydW50aW1lLT5idWZmZXJfc2l6ZSAtIG9sZHB0cjsKLQkJCXVuc2lnbmVkIGludCBibGVuID0gY250ICogc3RyaWRlOwotCQkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgb2xkcHRyICogc3RyaWRlLCBjcCwgYmxlbik7Ci0JCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEsIGNwICsgYmxlbiwgbGVuICogc3RyaWRlIC0gYmxlbik7CisJCWlmIChvbGRwdHIgKyBieXRlcyA+IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICogc3RyaWRlKSB7CisJCQl1bnNpZ25lZCBpbnQgYnl0ZXMxID0KKwkJCQkJcnVudGltZS0+YnVmZmVyX3NpemUgKiBzdHJpZGUgLSBvbGRwdHI7CisJCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEgKyBvbGRwdHIsIGNwLCBieXRlczEpOworCQkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhLCBjcCArIGJ5dGVzMSwgYnl0ZXMgLSBieXRlczEpOwogCQl9IGVsc2UgewotCQkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgb2xkcHRyICogc3RyaWRlLCBjcCwgbGVuICogc3RyaWRlKTsKKwkJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIG9sZHB0ciwgY3AsIGJ5dGVzKTsKIAkJfQogCX0KIAlpZiAocGVyaW9kX2VsYXBzZWQpCkBAIC01NjMsMzQgKzU3NiwzNCBAQAogCQkJCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUsCiAJCQkJc3RydWN0IHVyYiAqdXJiKQogewotCWludCBpLCBzdHJpZGUsIG9mZnM7Ci0JdW5zaWduZWQgaW50IGNvdW50czsKKwlpbnQgaSwgc3RyaWRlOworCXVuc2lnbmVkIGludCBjb3VudHMsIGZyYW1lcywgYnl0ZXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcGVyaW9kX2VsYXBzZWQgPSAwOwogCXN0cnVjdCBzbmRfdXJiX2N0eCAqY3R4ID0gdXJiLT5jb250ZXh0OwogCiAJc3RyaWRlID0gcnVudGltZS0+ZnJhbWVfYml0cyA+PiAzOwogCi0Jb2ZmcyA9IDA7CisJZnJhbWVzID0gMDsKIAl1cmItPmRldiA9IGN0eC0+c3Vicy0+ZGV2OyAvKiB3ZSBuZWVkIHRvIHNldCB0aGlzIGF0IGVhY2ggdGltZSAqLwogCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSAwOwogCXNwaW5fbG9ja19pcnFzYXZlKCZzdWJzLT5sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IGN0eC0+cGFja2V0czsgaSsrKSB7CiAJCWNvdW50cyA9IHNuZF91c2JfYXVkaW9fbmV4dF9wYWNrZXRfc2l6ZShzdWJzKTsKIAkJLyogc2V0IHVwIGRlc2NyaXB0b3IgKi8KLQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPSBvZmZzICogc3RyaWRlOworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9IGZyYW1lcyAqIHN0cmlkZTsKIAkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPSBjb3VudHMgKiBzdHJpZGU7Ci0JCW9mZnMgKz0gY291bnRzOworCQlmcmFtZXMgKz0gY291bnRzOwogCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzKys7CiAJCXN1YnMtPnRyYW5zZmVyX2RvbmUgKz0gY291bnRzOwogCQlpZiAoc3Vicy0+dHJhbnNmZXJfZG9uZSA+PSBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgewogCQkJc3Vicy0+dHJhbnNmZXJfZG9uZSAtPSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKIAkJCXBlcmlvZF9lbGFwc2VkID0gMTsKLQkJCWlmIChzdWJzLT5mbXRfdHlwZSA9PSBVU0JfRk9STUFUX1RZUEVfSUkpIHsKKwkJCWlmIChzdWJzLT5mbXRfdHlwZSA9PSBVQUNfRk9STUFUX1RZUEVfSUkpIHsKIAkJCQlpZiAoc3Vicy0+dHJhbnNmZXJfZG9uZSA+IDApIHsKIAkJCQkJLyogRklYTUU6IGZpbGwtbWF4IG1vZGUgaXMgbm90CiAJCQkJCSAqIHN1cHBvcnRlZCB5ZXQgKi8KLQkJCQkJb2ZmcyAtPSBzdWJzLT50cmFuc2Zlcl9kb25lOworCQkJCQlmcmFtZXMgLT0gc3Vicy0+dHJhbnNmZXJfZG9uZTsKIAkJCQkJY291bnRzIC09IHN1YnMtPnRyYW5zZmVyX2RvbmU7CiAJCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0KIAkJCQkJCWNvdW50cyAqIHN0cmlkZTsKQEAgLTYwMCw3ICs2MTMsNyBAQAogCQkJCWlmIChpIDwgY3R4LT5wYWNrZXRzKSB7CiAJCQkJCS8qIGFkZCBhIHRyYW5zZmVyIGRlbGltaXRlciAqLwogCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9Ci0JCQkJCQlvZmZzICogc3RyaWRlOworCQkJCQkJZnJhbWVzICogc3RyaWRlOwogCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9IDA7CiAJCQkJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMrKzsKIAkJCQl9CkBAIC02MTAsMjYgKzYyMywyNSBAQAogCQlpZiAocGVyaW9kX2VsYXBzZWQpIC8qIGZpbmlzaCBhdCB0aGUgcGVyaW9kIGJvdW5kYXJ5ICovCiAJCQlicmVhazsKIAl9Ci0JaWYgKHN1YnMtPmh3cHRyX2RvbmUgKyBvZmZzID4gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKKwlieXRlcyA9IGZyYW1lcyAqIHN0cmlkZTsKKwlpZiAoc3Vicy0+aHdwdHJfZG9uZSArIGJ5dGVzID4gcnVudGltZS0+YnVmZmVyX3NpemUgKiBzdHJpZGUpIHsKIAkJLyogZXJyLCB0aGUgdHJhbnNmZXJyZWQgYXJlYSBnb2VzIG92ZXIgYnVmZmVyIGJvdW5kYXJ5LiAqLwotCQl1bnNpZ25lZCBpbnQgbGVuID0gcnVudGltZS0+YnVmZmVyX3NpemUgLSBzdWJzLT5od3B0cl9kb25lOworCQl1bnNpZ25lZCBpbnQgYnl0ZXMxID0KKwkJCXJ1bnRpbWUtPmJ1ZmZlcl9zaXplICogc3RyaWRlIC0gc3Vicy0+aHdwdHJfZG9uZTsKIAkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyLAotCQkgICAgICAgcnVudGltZS0+ZG1hX2FyZWEgKyBzdWJzLT5od3B0cl9kb25lICogc3RyaWRlLAotCQkgICAgICAgbGVuICogc3RyaWRlKTsKLQkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgbGVuICogc3RyaWRlLAotCQkgICAgICAgcnVudGltZS0+ZG1hX2FyZWEsCi0JCSAgICAgICAob2ZmcyAtIGxlbikgKiBzdHJpZGUpOworCQkgICAgICAgcnVudGltZS0+ZG1hX2FyZWEgKyBzdWJzLT5od3B0cl9kb25lLCBieXRlczEpOworCQltZW1jcHkodXJiLT50cmFuc2Zlcl9idWZmZXIgKyBieXRlczEsCisJCSAgICAgICBydW50aW1lLT5kbWFfYXJlYSwgYnl0ZXMgLSBieXRlczEpOwogCX0gZWxzZSB7CiAJCW1lbWNweSh1cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJICAgICAgIHJ1bnRpbWUtPmRtYV9hcmVhICsgc3Vicy0+aHdwdHJfZG9uZSAqIHN0cmlkZSwKLQkJICAgICAgIG9mZnMgKiBzdHJpZGUpOworCQkgICAgICAgcnVudGltZS0+ZG1hX2FyZWEgKyBzdWJzLT5od3B0cl9kb25lLCBieXRlcyk7CiAJfQotCXN1YnMtPmh3cHRyX2RvbmUgKz0gb2ZmczsKLQlpZiAoc3Vicy0+aHdwdHJfZG9uZSA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJc3Vicy0+aHdwdHJfZG9uZSAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQlydW50aW1lLT5kZWxheSArPSBvZmZzOworCXN1YnMtPmh3cHRyX2RvbmUgKz0gYnl0ZXM7CisJaWYgKHN1YnMtPmh3cHRyX2RvbmUgPj0gcnVudGltZS0+YnVmZmVyX3NpemUgKiBzdHJpZGUpCisJCXN1YnMtPmh3cHRyX2RvbmUgLT0gcnVudGltZS0+YnVmZmVyX3NpemUgKiBzdHJpZGU7CisJcnVudGltZS0+ZGVsYXkgKz0gZnJhbWVzOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnMtPmxvY2ssIGZsYWdzKTsKLQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBvZmZzICogc3RyaWRlOworCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ5dGVzOwogCWlmIChwZXJpb2RfZWxhcHNlZCkKIAkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzLT5wY21fc3Vic3RyZWFtKTsKIAlyZXR1cm4gMDsKQEAgLTczNSw0MSArNzQ3LDYgQEAKIH0KIAogCi0vKiBnZXQgdGhlIHBoeXNpY2FsIHBhZ2UgcG9pbnRlciBhdCB0aGUgZ2l2ZW4gb2Zmc2V0ICovCi1zdGF0aWMgc3RydWN0IHBhZ2UgKnNuZF9wY21fZ2V0X3ZtYWxsb2NfcGFnZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0Jdm9pZCAqcGFnZXB0ciA9IHN1YnMtPnJ1bnRpbWUtPmRtYV9hcmVhICsgb2Zmc2V0OwotCXJldHVybiB2bWFsbG9jX3RvX3BhZ2UocGFnZXB0cik7Ci19Ci0KLS8qIGFsbG9jYXRlIHZpcnR1YWwgYnVmZmVyOyBtYXkgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlICovCi1zdGF0aWMgaW50IHNuZF9wY21fYWxsb2Nfdm1hbGxvY19idWZmZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vicy0+cnVudGltZTsKLQlpZiAocnVudGltZS0+ZG1hX2FyZWEpIHsKLQkJaWYgKHJ1bnRpbWUtPmRtYV9ieXRlcyA+PSBzaXplKQotCQkJcmV0dXJuIDA7IC8qIGFscmVhZHkgbGFyZ2UgZW5vdWdoICovCi0JCXZmcmVlKHJ1bnRpbWUtPmRtYV9hcmVhKTsKLQl9Ci0JcnVudGltZS0+ZG1hX2FyZWEgPSB2bWFsbG9jX3VzZXIoc2l6ZSk7Ci0JaWYgKCFydW50aW1lLT5kbWFfYXJlYSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcnVudGltZS0+ZG1hX2J5dGVzID0gc2l6ZTsKLQlyZXR1cm4gMDsKLX0KLQotLyogZnJlZSB2aXJ0dWFsIGJ1ZmZlcjsgbWF5IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSAqLwotc3RhdGljIGludCBzbmRfcGNtX2ZyZWVfdm1hbGxvY19idWZmZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzKQotewotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzLT5ydW50aW1lOwotCi0JdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOwotCXJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKLQlyZXR1cm4gMDsKLX0KLQotCiAvKgogICogdW5saW5rIGFjdGl2ZSB1cmJzLgogICovCkBAIC05MzcsMTggKzkxNCwxOCBAQAogCiAKIC8qCi0gKiByZXR1cm4gdGhlIGN1cnJlbnQgcGNtIHBvaW50ZXIuICBqdXN0IHJldHVybiB0aGUgaHdwdHJfZG9uZSB2YWx1ZS4KKyAqIHJldHVybiB0aGUgY3VycmVudCBwY20gcG9pbnRlci4gIGp1c3QgYmFzZWQgb24gdGhlIGh3cHRyX2RvbmUgdmFsdWUuCiAgKi8KIHN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfdXNiX3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfdXNiX3N1YnN0cmVhbSAqc3ViczsKLQlzbmRfcGNtX3VmcmFtZXNfdCBod3B0cl9kb25lOworCXVuc2lnbmVkIGludCBod3B0cl9kb25lOwogCQogCXN1YnMgPSAoc3RydWN0IHNuZF91c2Jfc3Vic3RyZWFtICopc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJc3Bpbl9sb2NrKCZzdWJzLT5sb2NrKTsKIAlod3B0cl9kb25lID0gc3Vicy0+aHdwdHJfZG9uZTsKIAlzcGluX3VubG9jaygmc3Vicy0+bG9jayk7Ci0JcmV0dXJuIGh3cHRyX2RvbmU7CisJcmV0dXJuIGh3cHRyX2RvbmUgLyAoc3Vic3RyZWFtLT5ydW50aW1lLT5mcmFtZV9iaXRzID4+IDMpOwogfQogCiAKQEAgLTExMzAsNyArMTEwNyw3IEBACiAJCXUtPnBhY2tldHMgPSAoaSArIDEpICogdG90YWxfcGFja3MgLyBzdWJzLT5udXJicwogCQkJLSBpICogdG90YWxfcGFja3MgLyBzdWJzLT5udXJiczsKIAkJdS0+YnVmZmVyX3NpemUgPSBtYXhzaXplICogdS0+cGFja2V0czsKLQkJaWYgKHN1YnMtPmZtdF90eXBlID09IFVTQl9GT1JNQVRfVFlQRV9JSSkKKwkJaWYgKHN1YnMtPmZtdF90eXBlID09IFVBQ19GT1JNQVRfVFlQRV9JSSkKIAkJCXUtPnBhY2tldHMrKzsgLyogZm9yIHRyYW5zZmVyIGRlbGltaXRlciAqLwogCQl1LT51cmIgPSB1c2JfYWxsb2NfdXJiKHUtPnBhY2tldHMsIEdGUF9LRVJORUwpOwogCQlpZiAoIXUtPnVyYikKQEAgLTEyMDYsNyArMTE4Myw3IEBACiAJCQlpZiAoaSA+PSBmcC0+bnJfcmF0ZXMpCiAJCQkJY29udGludWU7CiAJCX0KLQkJYXR0ciA9IGZwLT5lcF9hdHRyICYgRVBfQVRUUl9NQVNLOworCQlhdHRyID0gZnAtPmVwX2F0dHIgJiBVU0JfRU5EUE9JTlRfU1lOQ1RZUEU7CiAJCWlmICghIGZvdW5kKSB7CiAJCQlmb3VuZCA9IGZwOwogCQkJY3VyX2F0dHIgPSBhdHRyOwpAQCAtMTIxOCwxNCArMTE5NSwxNCBAQAogCQkgKiBNLWF1ZGlvIGF1ZGlvcGhpbGUgVVNCLgogCQkgKi8KIAkJaWYgKGF0dHIgIT0gY3VyX2F0dHIpIHsKLQkJCWlmICgoYXR0ciA9PSBFUF9BVFRSX0FTWU5DICYmCisJCQlpZiAoKGF0dHIgPT0gVVNCX0VORFBPSU5UX1NZTkNfQVNZTkMgJiYKIAkJCSAgICAgc3Vicy0+ZGlyZWN0aW9uID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHx8Ci0JCQkgICAgKGF0dHIgPT0gRVBfQVRUUl9BREFQVElWRSAmJgorCQkJICAgIChhdHRyID09IFVTQl9FTkRQT0lOVF9TWU5DX0FEQVBUSVZFICYmCiAJCQkgICAgIHN1YnMtPmRpcmVjdGlvbiA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKChjdXJfYXR0ciA9PSBFUF9BVFRSX0FTWU5DICYmCisJCQlpZiAoKGN1cl9hdHRyID09IFVTQl9FTkRQT0lOVF9TWU5DX0FTWU5DICYmCiAJCQkgICAgIHN1YnMtPmRpcmVjdGlvbiA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB8fAotCQkJICAgIChjdXJfYXR0ciA9PSBFUF9BVFRSX0FEQVBUSVZFICYmCisJCQkgICAgKGN1cl9hdHRyID09IFVTQl9FTkRQT0lOVF9TWU5DX0FEQVBUSVZFICYmCiAJCQkgICAgIHN1YnMtPmRpcmVjdGlvbiA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpKSB7CiAJCQkJZm91bmQgPSBmcDsKIAkJCQljdXJfYXR0ciA9IGF0dHI7CkBAIC0xMjU1LDExICsxMjMyLDExIEBACiAKIAllcCA9IGdldF9lbmRwb2ludChhbHRzLCAwKS0+YkVuZHBvaW50QWRkcmVzczsKIAkvKiBpZiBlbmRwb2ludCBoYXMgcGl0Y2ggY29udHJvbCwgZW5hYmxlIGl0ICovCi0JaWYgKGZtdC0+YXR0cmlidXRlcyAmIEVQX0NTX0FUVFJfUElUQ0hfQ09OVFJPTCkgeworCWlmIChmbXQtPmF0dHJpYnV0ZXMgJiBVQUNfRVBfQ1NfQVRUUl9QSVRDSF9DT05UUk9MKSB7CiAJCWRhdGFbMF0gPSAxOwotCQlpZiAoKGVyciA9IHNuZF91c2JfY3RsX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBTRVRfQ1VSLAorCQlpZiAoKGVyciA9IHNuZF91c2JfY3RsX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBVQUNfU0VUX0NVUiwKIAkJCQkJICAgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfT1VULAotCQkJCQkgICBQSVRDSF9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAxLCAxMDAwKSkgPCAwKSB7CisJCQkJCSAgIFVBQ19FUF9DU19BVFRSX1BJVENIX0NPTlRST0wgPDwgOCwgZXAsIGRhdGEsIDEsIDEwMDApKSA8IDApIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiVkOiVkOiBjYW5ub3Qgc2V0IGVuYWJsZSBQSVRDSFxuIiwKIAkJCQkgICBkZXYtPmRldm51bSwgaWZhY2UsIGVwKTsKIAkJCXJldHVybiBlcnI7CkBAIC0xMjc4LDIxICsxMjU1LDIxIEBACiAKIAllcCA9IGdldF9lbmRwb2ludChhbHRzLCAwKS0+YkVuZHBvaW50QWRkcmVzczsKIAkvKiBpZiBlbmRwb2ludCBoYXMgc2FtcGxpbmcgcmF0ZSBjb250cm9sLCBzZXQgaXQgKi8KLQlpZiAoZm10LT5hdHRyaWJ1dGVzICYgRVBfQ1NfQVRUUl9TQU1QTEVfUkFURSkgeworCWlmIChmbXQtPmF0dHJpYnV0ZXMgJiBVQUNfRVBfQ1NfQVRUUl9TQU1QTEVfUkFURSkgewogCQlpbnQgY3JhdGU7CiAJCWRhdGFbMF0gPSByYXRlOwogCQlkYXRhWzFdID0gcmF0ZSA+PiA4OwogCQlkYXRhWzJdID0gcmF0ZSA+PiAxNjsKLQkJaWYgKChlcnIgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwKKwkJaWYgKChlcnIgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgVUFDX1NFVF9DVVIsCiAJCQkJCSAgIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX09VVCwKLQkJCQkJICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7CisJCQkJCSAgIFVBQ19FUF9DU19BVFRSX1NBTVBMRV9SQVRFIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDolZDolZDogY2Fubm90IHNldCBmcmVxICVkIHRvIGVwICUjeFxuIiwKIAkJCQkgICBkZXYtPmRldm51bSwgaWZhY2UsIGZtdC0+YWx0c2V0dGluZywgcmF0ZSwgZXApOwogCQkJcmV0dXJuIGVycjsKIAkJfQotCQlpZiAoKGVyciA9IHNuZF91c2JfY3RsX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfQ1VSLAorCQlpZiAoKGVyciA9IHNuZF91c2JfY3RsX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBVQUNfR0VUX0NVUiwKIAkJCQkJICAgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfSU4sCi0JCQkJCSAgIFNBTVBMSU5HX0ZSRVFfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMywgMTAwMCkpIDwgMCkgeworCQkJCQkgICBVQUNfRVBfQ1NfQVRUUl9TQU1QTEVfUkFURSA8PCA4LCBlcCwgZGF0YSwgMywgMTAwMCkpIDwgMCkgewogCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIiVkOiVkOiVkOiBjYW5ub3QgZ2V0IGZyZXEgYXQgZXAgJSN4XG4iLAogCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZSwgZm10LT5hbHRzZXR0aW5nLCBlcCk7CiAJCQlyZXR1cm4gMDsgLyogc29tZSBkZXZpY2VzIGRvbid0IHN1cHBvcnQgcmVhZGluZyAqLwpAQCAtMTMwNyw2ICsxMjg0LDQ3IEBACiB9CiAKIC8qCisgKiBGb3IgRS1NdSAwNDA0VVNCLzAyMDJVU0IvVHJhY2tlclByZSBzYW1wbGUgcmF0ZSBzaG91bGQgYmUgc2V0IGZvciBkZXZpY2UsCisgKiBub3QgZm9yIGludGVyZmFjZS4KKyAqLworc3RhdGljIHZvaWQgc2V0X2Zvcm1hdF9lbXVfcXVpcmsoc3RydWN0IHNuZF91c2Jfc3Vic3RyZWFtICpzdWJzLAorCQkJCSBzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZtdCkKK3sKKwl1bnNpZ25lZCBjaGFyIGVtdV9zYW1wbGVyYXRlX2lkID0gMDsKKworCS8qIFdoZW4gY2FwdHVyZSBpcyBhY3RpdmUKKwkgKiBzYW1wbGUgcmF0ZSBzaG91bGRuJ3QgYmUgY2hhbmdlZAorCSAqIGJ5IHBsYXliYWNrIHN1YnN0cmVhbQorCSAqLworCWlmIChzdWJzLT5kaXJlY3Rpb24gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQlpZiAoc3Vicy0+c3RyZWFtLT5zdWJzdHJlYW1bU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5pbnRlcmZhY2UgIT0gLTEpCisJCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChmbXQtPnJhdGVfbWluKSB7CisJY2FzZSA0ODAwMDoKKwkJZW11X3NhbXBsZXJhdGVfaWQgPSBFTVVfUVVJUktfU1JfNDgwMDBIWjsKKwkJYnJlYWs7CisJY2FzZSA4ODIwMDoKKwkJZW11X3NhbXBsZXJhdGVfaWQgPSBFTVVfUVVJUktfU1JfODgyMDBIWjsKKwkJYnJlYWs7CisJY2FzZSA5NjAwMDoKKwkJZW11X3NhbXBsZXJhdGVfaWQgPSBFTVVfUVVJUktfU1JfOTYwMDBIWjsKKwkJYnJlYWs7CisJY2FzZSAxNzY0MDA6CisJCWVtdV9zYW1wbGVyYXRlX2lkID0gRU1VX1FVSVJLX1NSXzE3NjQwMEhaOworCQlicmVhazsKKwljYXNlIDE5MjAwMDoKKwkJZW11X3NhbXBsZXJhdGVfaWQgPSBFTVVfUVVJUktfU1JfMTkyMDAwSFo7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVtdV9zYW1wbGVyYXRlX2lkID0gRU1VX1FVSVJLX1NSXzQ0MTAwSFo7CisJCWJyZWFrOworCX0KKwlzbmRfZW11dXNiX3NldF9zYW1wbGVyYXRlKHN1YnMtPnN0cmVhbS0+Y2hpcCwgZW11X3NhbXBsZXJhdGVfaWQpOworfQorCisvKgogICogZmluZCBhIG1hdGNoaW5nIGZvcm1hdCBhbmQgc2V0IHVwIHRoZSBpbnRlcmZhY2UKICAqLwogc3RhdGljIGludCBzZXRfZm9ybWF0KHN0cnVjdCBzbmRfdXNiX3N1YnN0cmVhbSAqc3Vicywgc3RydWN0IGF1ZGlvZm9ybWF0ICpmbXQpCkBAIC0xMzY5LDkgKzEzODcsOSBAQAogCSAqIGRlc2NyaXB0b3JzIHdoaWNoIGZvb2wgdXMuICBpZiBpdCBoYXMgb25seSBvbmUgRVAsCiAJICogYXNzdW1lIGl0IGFzIGFkYXB0aXZlLW91dCBvciBzeW5jLWluLgogCSAqLwotCWF0dHIgPSBmbXQtPmVwX2F0dHIgJiBFUF9BVFRSX01BU0s7Ci0JaWYgKCgoaXNfcGxheWJhY2sgJiYgYXR0ciA9PSBFUF9BVFRSX0FTWU5DKSB8fAotCSAgICAgKCEgaXNfcGxheWJhY2sgJiYgYXR0ciA9PSBFUF9BVFRSX0FEQVBUSVZFKSkgJiYKKwlhdHRyID0gZm10LT5lcF9hdHRyICYgVVNCX0VORFBPSU5UX1NZTkNUWVBFOworCWlmICgoKGlzX3BsYXliYWNrICYmIGF0dHIgPT0gVVNCX0VORFBPSU5UX1NZTkNfQVNZTkMpIHx8CisJICAgICAoISBpc19wbGF5YmFjayAmJiBhdHRyID09IFVTQl9FTkRQT0lOVF9TWU5DX0FEQVBUSVZFKSkgJiYKIAkgICAgYWx0c2QtPmJOdW1FbmRwb2ludHMgPj0gMikgewogCQkvKiBjaGVjayBzeW5jLXBpcGUgZW5kcG9pbnQgKi8KIAkJLyogLi4uIGFuZCBjaGVjayBkZXNjcmlwdG9yIHNpemUgYmVmb3JlIGFjY2Vzc2luZyBiU3luY2hBZGRyZXNzCkBAIC0xNDExLDcgKzE0MjksNyBAQAogCX0KIAogCS8qIGFsd2F5cyBmaWxsIG1heCBwYWNrZXQgc2l6ZSAqLwotCWlmIChmbXQtPmF0dHJpYnV0ZXMgJiBFUF9DU19BVFRSX0ZJTExfTUFYKQorCWlmIChmbXQtPmF0dHJpYnV0ZXMgJiBVQUNfRVBfQ1NfQVRUUl9GSUxMX01BWCkKIAkJc3Vicy0+ZmlsbF9tYXggPSAxOwogCiAJaWYgKChlcnIgPSBpbml0X3VzYl9waXRjaChkZXYsIHN1YnMtPmludGVyZmFjZSwgYWx0cywgZm10KSkgPCAwKQpAQCAtMTQxOSw2ICsxNDM3LDE0IEBACiAKIAlzdWJzLT5jdXJfYXVkaW9mbXQgPSBmbXQ7CiAKKwlzd2l0Y2ggKHN1YnMtPnN0cmVhbS0+Y2hpcC0+dXNiX2lkKSB7CisJY2FzZSBVU0JfSUQoMHgwNDFlLCAweDNmMDIpOiAvKiBFLU11IDAyMDIgVVNCICovCisJY2FzZSBVU0JfSUQoMHgwNDFlLCAweDNmMDQpOiAvKiBFLU11IDA0MDQgVVNCICovCisJY2FzZSBVU0JfSUQoMHgwNDFlLCAweDNmMGEpOiAvKiBFLU11IFRyYWNrZXIgUHJlICovCisJCXNldF9mb3JtYXRfZW11X3F1aXJrKHN1YnMsIGZtdCk7CisJCWJyZWFrOworCX0KKwogI2lmIDAKIAlwcmludGsoS0VSTl9ERUJVRwogCSAgICAgICAic2V0dGluZyBkb25lOiBmb3JtYXQgPSAlZCwgcmF0ZSA9ICVkLi4lZCwgY2hhbm5lbHMgPSAlZFxuIiwKQEAgLTE0NDksOCArMTQ3NSw4IEBACiAJdW5zaWduZWQgaW50IGNoYW5uZWxzLCByYXRlLCBmb3JtYXQ7CiAJaW50IHJldCwgY2hhbmdlZDsKIAotCXJldCA9IHNuZF9wY21fYWxsb2Nfdm1hbGxvY19idWZmZXIoc3Vic3RyZWFtLAotCQkJCQkgICBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCXJldCA9IHNuZF9wY21fbGliX2FsbG9jX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSwKKwkJCQkJICAgICAgIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTE1MDcsNyArMTUzMyw3IEBACiAJc3Vicy0+cGVyaW9kX2J5dGVzID0gMDsKIAlpZiAoIXN1YnMtPnN0cmVhbS0+Y2hpcC0+c2h1dGRvd24pCiAJCXJlbGVhc2Vfc3Vic3RyZWFtX3VyYnMoc3VicywgMCk7Ci0JcmV0dXJuIHNuZF9wY21fZnJlZV92bWFsbG9jX2J1ZmZlcihzdWJzdHJlYW0pOworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSk7CiB9CiAKIC8qCkBAIC0xODYxLDcgKzE4ODcsNyBAQAogCQkJcnVudGltZS0+aHcuY2hhbm5lbHNfbWluID0gZnAtPmNoYW5uZWxzOwogCQlpZiAocnVudGltZS0+aHcuY2hhbm5lbHNfbWF4IDwgZnAtPmNoYW5uZWxzKQogCQkJcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4ID0gZnAtPmNoYW5uZWxzOwotCQlpZiAoZnAtPmZtdF90eXBlID09IFVTQl9GT1JNQVRfVFlQRV9JSSAmJiBmcC0+ZnJhbWVfc2l6ZSA+IDApIHsKKwkJaWYgKGZwLT5mbXRfdHlwZSA9PSBVQUNfRk9STUFUX1RZUEVfSUkgJiYgZnAtPmZyYW1lX3NpemUgPiAwKSB7CiAJCQkvKiBGSVhNRTogdGhlcmUgbWlnaHQgYmUgbW9yZSB0aGFuIG9uZSBhdWRpbyBmb3JtYXRzLi4uICovCiAJCQlydW50aW1lLT5ody5wZXJpb2RfYnl0ZXNfbWluID0gcnVudGltZS0+aHcucGVyaW9kX2J5dGVzX21heCA9CiAJCQkJZnAtPmZyYW1lX3NpemU7CkBAIC0xOTczLDcgKzE5OTksOCBAQAogCS5wcmVwYXJlID0Jc25kX3VzYl9wY21fcHJlcGFyZSwKIAkudHJpZ2dlciA9CXNuZF91c2JfcGNtX3BsYXliYWNrX3RyaWdnZXIsCiAJLnBvaW50ZXIgPQlzbmRfdXNiX3BjbV9wb2ludGVyLAotCS5wYWdlID0JCXNuZF9wY21fZ2V0X3ZtYWxsb2NfcGFnZSwKKwkucGFnZSA9CQlzbmRfcGNtX2xpYl9nZXRfdm1hbGxvY19wYWdlLAorCS5tbWFwID0JCXNuZF9wY21fbGliX21tYXBfdm1hbGxvYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX3VzYl9jYXB0dXJlX29wcyA9IHsKQEAgLTE5ODUsNyArMjAxMiw4IEBACiAJLnByZXBhcmUgPQlzbmRfdXNiX3BjbV9wcmVwYXJlLAogCS50cmlnZ2VyID0Jc25kX3VzYl9wY21fY2FwdHVyZV90cmlnZ2VyLAogCS5wb2ludGVyID0Jc25kX3VzYl9wY21fcG9pbnRlciwKLQkucGFnZSA9CQlzbmRfcGNtX2dldF92bWFsbG9jX3BhZ2UsCisJLnBhZ2UgPQkJc25kX3BjbV9saWJfZ2V0X3ZtYWxsb2NfcGFnZSwKKwkubW1hcCA9CQlzbmRfcGNtX2xpYl9tbWFwX3ZtYWxsb2MsCiB9OwogCiAKQEAgLTIwOTMsNyArMjEyMSw3IEBACiAjaW5jbHVkZSAidXNicXVpcmtzLmgiCiAgICAgeyAubWF0Y2hfZmxhZ3MgPSAoVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUyksCiAgICAgICAuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAotICAgICAgLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT19DT05UUk9MIH0sCisgICAgICAuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTCB9LAogICAgIHsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCkBAIC0yMTMyLDcgKzIxNjAsNyBAQAogCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgRW5kcG9pbnQ6ICVkICVzICglcylcbiIsCiAJCQkgICAgZnAtPmVuZHBvaW50ICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLLAogCQkJICAgIGZwLT5lbmRwb2ludCAmIFVTQl9ESVJfSU4gPyAiSU4iIDogIk9VVCIsCi0JCQkgICAgc3luY190eXBlc1soZnAtPmVwX2F0dHIgJiBFUF9BVFRSX01BU0spID4+IDJdKTsKKwkJCSAgICBzeW5jX3R5cGVzWyhmcC0+ZXBfYXR0ciAmIFVTQl9FTkRQT0lOVF9TWU5DVFlQRSkgPj4gMl0pOwogCQlpZiAoZnAtPnJhdGVzICYgU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUykgewogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiICAgIFJhdGVzOiAlZCAtICVkIChjb250aW51b3VzKVxuIiwKIAkJCQkgICAgZnAtPnJhdGVfbWluLCBmcC0+cmF0ZV9tYXgpOwpAQCAtMjIyNyw2ICsyMjU1LDcgQEAKIAlzdWJzLT5zdHJlYW0gPSBhczsKIAlzdWJzLT5kaXJlY3Rpb24gPSBzdHJlYW07CiAJc3Vicy0+ZGV2ID0gYXMtPmNoaXAtPmRldjsKKwlzdWJzLT50eGZyX3F1aXJrID0gYXMtPmNoaXAtPnR4ZnJfcXVpcms7CiAJaWYgKHNuZF91c2JfZ2V0X3NwZWVkKHN1YnMtPmRldikgPT0gVVNCX1NQRUVEX0ZVTEwpIHsKIAkJc3Vicy0+b3BzID0gYXVkaW9fdXJiX29wc1tzdHJlYW1dOwogCX0gZWxzZSB7CkBAIC0yMzk0LDI5ICsyNDIzLDY4IEBACiAgKiBAZm9ybWF0OiB0aGUgZm9ybWF0IHRhZyAod0Zvcm1hdFRhZykKICAqIEBmbXQ6IHRoZSBmb3JtYXQgdHlwZSBkZXNjcmlwdG9yCiAgKi8KLXN0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZm9ybWF0X2lfdHlwZShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwgc3RydWN0IGF1ZGlvZm9ybWF0ICpmcCwKLQkJCQkgICAgIGludCBmb3JtYXQsIHVuc2lnbmVkIGNoYXIgKmZtdCkKK3N0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZm9ybWF0X2lfdHlwZShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKKwkJCQkgICAgIHN0cnVjdCBhdWRpb2Zvcm1hdCAqZnAsCisJCQkJICAgICBpbnQgZm9ybWF0LCB2b2lkICpfZm10LAorCQkJCSAgICAgaW50IHByb3RvY29sKQogewotCWludCBwY21fZm9ybWF0OworCWludCBwY21fZm9ybWF0LCBpOwogCWludCBzYW1wbGVfd2lkdGgsIHNhbXBsZV9ieXRlczsKIAorCXN3aXRjaCAocHJvdG9jb2wpIHsKKwljYXNlIFVBQ19WRVJTSU9OXzE6IHsKKwkJc3RydWN0IHVhY19mb3JtYXRfdHlwZV9pX2Rpc2NyZXRlX2Rlc2NyaXB0b3IgKmZtdCA9IF9mbXQ7CisJCXNhbXBsZV93aWR0aCA9IGZtdC0+YkJpdFJlc29sdXRpb247CisJCXNhbXBsZV9ieXRlcyA9IGZtdC0+YlN1YmZyYW1lU2l6ZTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBVQUNfVkVSU0lPTl8yOiB7CisJCXN0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9leHRfZGVzY3JpcHRvciAqZm10ID0gX2ZtdDsKKwkJc2FtcGxlX3dpZHRoID0gZm10LT5iQml0UmVzb2x1dGlvbjsKKwkJc2FtcGxlX2J5dGVzID0gZm10LT5iU3Vic2xvdFNpemU7CisKKwkJLyoKKwkJICogRklYTUUKKwkJICogVVNCIGF1ZGlvIGNsYXNzIHYyIGRldmljZXMgc3BlY2lmeSBhIGJpdG1hcCBvZiBwb3NzaWJsZQorCQkgKiBhdWRpbyBmb3JtYXRzIHJhdGhlciB0aGFuIG9uZSBmaXggdmFsdWUuIEZvciBub3csIHdlIGp1c3QKKwkJICogcGljayBvbmUgb2YgdGhlbSBhbmQgcmVwb3J0IHRoYXQgYXMgdGhlIG9ubHkgcG9zc2libGUKKwkJICogdmFsdWUgZm9yIHRoaXMgc2V0dGluZy4KKwkJICogVGhlIGJpdCBhbGxvY2F0aW9uIG1hcCBpcyBpbiBmYWN0IGNvbXBhdGlibGUgdG8gdGhlCisJCSAqIHdGb3JtYXRUYWcgb2YgdGhlIHYxIEFTIHN0cmVhbWluZyBkZXNjcmlwdG9ycywgd2hpY2ggaXMgd2h5CisJCSAqIHdlIGNhbiBzaW1wbHkgbWFwIHRoZSBtYXRyaXguCisJCSAqLworCisJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCQlpZiAoZm9ybWF0ICYgKDFVTCA8PCBpKSkgeworCQkJCWZvcm1hdCA9IGkgKyAxOworCQkJCWJyZWFrOworCQkJfQorCisJCWJyZWFrOworCX0KKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCS8qIEZJWE1FOiBjb3JyZWN0IGVuZGlhbmVzcyBhbmQgc2lnbj8gKi8KIAlwY21fZm9ybWF0ID0gLTE7Ci0Jc2FtcGxlX3dpZHRoID0gZm10WzZdOwotCXNhbXBsZV9ieXRlcyA9IGZtdFs1XTsKKwogCXN3aXRjaCAoZm9ybWF0KSB7Ci0JY2FzZSAwOiAvKiBzb21lIGRldmljZXMgZG9uJ3QgZGVmaW5lIHRoaXMgY29ycmVjdGx5Li4uICovCisJY2FzZSBVQUNfRk9STUFUX1RZUEVfSV9VTkRFRklORUQ6IC8qIHNvbWUgZGV2aWNlcyBkb24ndCBkZWZpbmUgdGhpcyBjb3JyZWN0bHkuLi4gKi8KIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICIlZDoldTolZCA6IGZvcm1hdCB0eXBlIDAgaXMgZGV0ZWN0ZWQsIHByb2Nlc3NlZCBhcyBQQ01cbiIsCiAJCQkgICAgY2hpcC0+ZGV2LT5kZXZudW0sIGZwLT5pZmFjZSwgZnAtPmFsdHNldHRpbmcpOwogCQkvKiBmYWxsLXRocm91Z2ggKi8KLQljYXNlIFVTQl9BVURJT19GT1JNQVRfUENNOgorCWNhc2UgVUFDX0ZPUk1BVF9UWVBFX0lfUENNOgogCQlpZiAoc2FtcGxlX3dpZHRoID4gc2FtcGxlX2J5dGVzICogOCkgewogCQkJc25kX3ByaW50ayhLRVJOX0lORk8gIiVkOiV1OiVkIDogc2FtcGxlIGJpdHdpZHRoICVkIGluIG92ZXIgc2FtcGxlIGJ5dGVzICVkXG4iLAogCQkJCSAgIGNoaXAtPmRldi0+ZGV2bnVtLCBmcC0+aWZhY2UsIGZwLT5hbHRzZXR0aW5nLAogCQkJCSAgIHNhbXBsZV93aWR0aCwgc2FtcGxlX2J5dGVzKTsKIAkJfQogCQkvKiBjaGVjayB0aGUgZm9ybWF0IGJ5dGUgc2l6ZSAqLwotCQlzd2l0Y2ggKGZtdFs1XSkgeworCQlwcmludGsoIiBYWFhYWCBTQU1QTEUgQllURVMgJWRcbiIsIHNhbXBsZV9ieXRlcyk7CisJCXN3aXRjaCAoc2FtcGxlX2J5dGVzKSB7CiAJCWNhc2UgMToKIAkJCXBjbV9mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX1M4OwogCQkJYnJlYWs7CkBAIC0yNDM3LDEyICsyNTA1LDEyIEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXNuZF9wcmludGsoS0VSTl9JTkZPICIlZDoldTolZCA6IHVuc3VwcG9ydGVkIHNhbXBsZSBiaXR3aWR0aCAlZCBpbiAlZCBieXRlc1xuIiwKLQkJCQkgICBjaGlwLT5kZXYtPmRldm51bSwgZnAtPmlmYWNlLAotCQkJCSAgIGZwLT5hbHRzZXR0aW5nLCBzYW1wbGVfd2lkdGgsIHNhbXBsZV9ieXRlcyk7CisJCQkJICAgY2hpcC0+ZGV2LT5kZXZudW0sIGZwLT5pZmFjZSwgZnAtPmFsdHNldHRpbmcsCisJCQkJICAgc2FtcGxlX3dpZHRoLCBzYW1wbGVfYnl0ZXMpOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBVU0JfQVVESU9fRk9STUFUX1BDTTg6CisJY2FzZSBVQUNfRk9STUFUX1RZUEVfSV9QQ004OgogCQlwY21fZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9VODsKIAogCQkvKiBEYWxsYXMgRFM0MjAxIHdvcmthcm91bmQ6IGl0IGFkdmVydGlzZXMgVTggZm9ybWF0LCBidXQgcmVhbGx5CkBAIC0yNDUwLDEzICsyNTE4LDEzIEBACiAJCWlmIChjaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDRmYSwgMHg0MjAxKSkKIAkJCXBjbV9mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX1M4OwogCQlicmVhazsKLQljYXNlIFVTQl9BVURJT19GT1JNQVRfSUVFRV9GTE9BVDoKKwljYXNlIFVBQ19GT1JNQVRfVFlQRV9JX0lFRUVfRkxPQVQ6CiAJCXBjbV9mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUX0xFOwogCQlicmVhazsKLQljYXNlIFVTQl9BVURJT19GT1JNQVRfQUxBVzoKKwljYXNlIFVBQ19GT1JNQVRfVFlQRV9JX0FMQVc6CiAJCXBjbV9mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX0FfTEFXOwogCQlicmVhazsKLQljYXNlIFVTQl9BVURJT19GT1JNQVRfTVVfTEFXOgorCWNhc2UgVUFDX0ZPUk1BVF9UWVBFX0lfTVVMQVc6CiAJCXBjbV9mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX01VX0xBVzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTI0NzAsNyArMjUzOCw3IEBACiAKIC8qCiAgKiBwYXJzZSB0aGUgZm9ybWF0IGRlc2NyaXB0b3IgYW5kIHN0b3JlcyB0aGUgcG9zc2libGUgc2FtcGxlIHJhdGVzCi0gKiBvbiB0aGUgYXVkaW9mb3JtYXQgdGFibGUuCisgKiBvbiB0aGUgYXVkaW9mb3JtYXQgdGFibGUgKGF1ZGlvIGNsYXNzIHYxKS4KICAqCiAgKiBAZGV2OiB1c2IgZGV2aWNlCiAgKiBAZnA6IGF1ZGlvZm9ybWF0IHJlY29yZApAQCAtMjQ3OCwxMyArMjU0NiwxMyBAQAogICogQG9mZnNldDogdGhlIHN0YXJ0IG9mZnNldCBvZiBkZXNjcmlwdG9yIHBvaW50aW5nIHRoZSByYXRlIHR5cGUKICAqICAgICAgICAgICg3IGZvciB0eXBlIEkgYW5kIElJLCA4IGZvciB0eXBlIElJKQogICovCi1zdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2Zvcm1hdF9yYXRlcyhzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwgc3RydWN0IGF1ZGlvZm9ybWF0ICpmcCwKLQkJCQkgICAgdW5zaWduZWQgY2hhciAqZm10LCBpbnQgb2Zmc2V0KQorc3RhdGljIGludCBwYXJzZV9hdWRpb19mb3JtYXRfcmF0ZXNfdjEoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsIHN0cnVjdCBhdWRpb2Zvcm1hdCAqZnAsCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmZtdCwgaW50IG9mZnNldCkKIHsKIAlpbnQgbnJfcmF0ZXMgPSBmbXRbb2Zmc2V0XTsKIAogCWlmIChmbXRbMF0gPCBvZmZzZXQgKyAxICsgMyAqIChucl9yYXRlcyA/IG5yX3JhdGVzIDogMikpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQgOiBpbnZhbGlkIEZPUk1BVF9UWVBFIGRlc2NcbiIsCisJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogaW52YWxpZCBVQUNfRk9STUFUX1RZUEUgZGVzY1xuIiwKIAkJCQkgICBjaGlwLT5kZXYtPmRldm51bSwgZnAtPmlmYWNlLCBmcC0+YWx0c2V0dGluZyk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0yNTM1LDE0ICsyNjAzLDg3IEBACiB9CiAKIC8qCisgKiBwYXJzZSB0aGUgZm9ybWF0IGRlc2NyaXB0b3IgYW5kIHN0b3JlcyB0aGUgcG9zc2libGUgc2FtcGxlIHJhdGVzCisgKiBvbiB0aGUgYXVkaW9mb3JtYXQgdGFibGUgKGF1ZGlvIGNsYXNzIHYyKS4KKyAqLworc3RhdGljIGludCBwYXJzZV9hdWRpb19mb3JtYXRfcmF0ZXNfdjIoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCisJCQkJICAgICAgIHN0cnVjdCBhdWRpb2Zvcm1hdCAqZnAsCisJCQkJICAgICAgIHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBjaGlwLT5kZXY7CisJdW5zaWduZWQgY2hhciB0bXBbMl0sICpkYXRhOworCWludCBpLCBucl9yYXRlcywgZGF0YV9zaXplLCByZXQgPSAwOworCisJLyogZ2V0IHRoZSBudW1iZXIgb2Ygc2FtcGxlIHJhdGVzIGZpcnN0IGJ5IG9ubHkgZmV0Y2hpbmcgMiBieXRlcyAqLworCXJldCA9IHNuZF91c2JfY3RsX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBVQUMyX0NTX1JBTkdFLAorCQkJICAgICAgIFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfSU4sCisJCQkgICAgICAgMHgwMTAwLCBjaGlwLT5jbG9ja19pZCA8PCA4LCB0bXAsIHNpemVvZih0bXApLCAxMDAwKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZXRyaWV2ZSBudW1iZXIgb2Ygc2FtcGxlIHJhdGVzXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJbnJfcmF0ZXMgPSAodG1wWzFdIDw8IDgpIHwgdG1wWzBdOworCWRhdGFfc2l6ZSA9IDIgKyAxMiAqIG5yX3JhdGVzOworCWRhdGEgPSBremFsbG9jKGRhdGFfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCS8qIG5vdyBnZXQgdGhlIGZ1bGwgaW5mb3JtYXRpb24gKi8KKwlyZXQgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgVUFDMl9DU19SQU5HRSwKKwkJCSAgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX0lOLAorCQkJICAgICAgIDB4MDEwMCwgY2hpcC0+Y2xvY2tfaWQgPDwgOCwgZGF0YSwgZGF0YV9zaXplLCAxMDAwKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZXRyaWV2ZSBzYW1wbGUgcmF0ZSByYW5nZVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJZnAtPnJhdGVfdGFibGUgPSBrbWFsbG9jKHNpemVvZihpbnQpICogbnJfcmF0ZXMsIEdGUF9LRVJORUwpOworCWlmICghZnAtPnJhdGVfdGFibGUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlmcC0+bnJfcmF0ZXMgPSAwOworCWZwLT5yYXRlX21pbiA9IGZwLT5yYXRlX21heCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmF0ZXM7IGkrKykgeworCQlpbnQgcmF0ZSA9IGNvbWJpbmVfcXVhZCgmZGF0YVsyICsgMTIgKiBpXSk7CisKKwkJZnAtPnJhdGVfdGFibGVbZnAtPm5yX3JhdGVzXSA9IHJhdGU7CisJCWlmICghZnAtPnJhdGVfbWluIHx8IHJhdGUgPCBmcC0+cmF0ZV9taW4pCisJCQlmcC0+cmF0ZV9taW4gPSByYXRlOworCQlpZiAoIWZwLT5yYXRlX21heCB8fCByYXRlID4gZnAtPnJhdGVfbWF4KQorCQkJZnAtPnJhdGVfbWF4ID0gcmF0ZTsKKwkJZnAtPnJhdGVzIHw9IHNuZF9wY21fcmF0ZV90b19yYXRlX2JpdChyYXRlKTsKKwkJZnAtPm5yX3JhdGVzKys7CisJfQorCitlcnJfZnJlZToKKwlrZnJlZShkYXRhKTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCisvKgogICogcGFyc2UgdGhlIGZvcm1hdCB0eXBlIEkgYW5kIElJSSBkZXNjcmlwdG9ycwogICovCi1zdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2Zvcm1hdF9pKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLCBzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwLAotCQkJCWludCBmb3JtYXQsIHVuc2lnbmVkIGNoYXIgKmZtdCkKK3N0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZm9ybWF0X2koc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCisJCQkJc3RydWN0IGF1ZGlvZm9ybWF0ICpmcCwKKwkJCQlpbnQgZm9ybWF0LCB2b2lkICpfZm10LAorCQkJCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlKQogewotCWludCBwY21fZm9ybWF0OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmFsdHNkID0gZ2V0X2lmYWNlX2Rlc2MoaWZhY2UpOworCXN0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaV9kaXNjcmV0ZV9kZXNjcmlwdG9yICpmbXQgPSBfZm10OworCWludCBwcm90b2NvbCA9IGFsdHNkLT5iSW50ZXJmYWNlUHJvdG9jb2w7CisJaW50IHBjbV9mb3JtYXQsIHJldDsKIAotCWlmIChmbXRbM10gPT0gVVNCX0ZPUk1BVF9UWVBFX0lJSSkgeworCWlmIChmbXQtPmJGb3JtYXRUeXBlID09IFVBQ19GT1JNQVRfVFlQRV9JSUkpIHsKIAkJLyogRklYTUU6IHRoZSBmb3JtYXQgdHlwZSBpcyByZWFsbHkgSUVDeHh4CiAJCSAqICAgICAgICBidXQgd2UgZ2l2ZSBub3JtYWwgUENNIGZvcm1hdCB0byBnZXQgdGhlIGV4aXN0aW5nCiAJCSAqICAgICAgICBhcHBzIHdvcmtpbmcuLi4KQEAgLTI1NjAsMzQgKzI3MDEsNTcgQEAKIAkJCXBjbV9mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRTsKIAkJfQogCX0gZWxzZSB7Ci0JCXBjbV9mb3JtYXQgPSBwYXJzZV9hdWRpb19mb3JtYXRfaV90eXBlKGNoaXAsIGZwLCBmb3JtYXQsIGZtdCk7CisJCXBjbV9mb3JtYXQgPSBwYXJzZV9hdWRpb19mb3JtYXRfaV90eXBlKGNoaXAsIGZwLCBmb3JtYXQsIGZtdCwgcHJvdG9jb2wpOwogCQlpZiAocGNtX2Zvcm1hdCA8IDApCiAJCQlyZXR1cm4gLTE7CiAJfQorCiAJZnAtPmZvcm1hdCA9IHBjbV9mb3JtYXQ7Ci0JZnAtPmNoYW5uZWxzID0gZm10WzRdOworCisJLyogZ2F0aGVyIHBvc3NpYmxlIHNhbXBsZSByYXRlcyAqLworCS8qIGF1ZGlvIGNsYXNzIHYxIHJlcG9ydHMgcG9zc2libGUgc2FtcGxlIHJhdGVzIGFzIHBhcnQgb2YgdGhlCisJICogcHJvcHJpZXRhcnkgY2xhc3Mgc3BlY2lmaWMgZGVzY3JpcHRvci4KKwkgKiBhdWRpbyBjbGFzcyB2MiB1c2VzIGNsYXNzIHNwZWNpZmljIEVQMCByYW5nZSByZXF1ZXN0cyBmb3IgdGhhdC4KKwkgKi8KKwlzd2l0Y2ggKHByb3RvY29sKSB7CisJY2FzZSBVQUNfVkVSU0lPTl8xOgorCQlmcC0+Y2hhbm5lbHMgPSBmbXQtPmJOckNoYW5uZWxzOworCQlyZXQgPSBwYXJzZV9hdWRpb19mb3JtYXRfcmF0ZXNfdjEoY2hpcCwgZnAsIF9mbXQsIDcpOworCQlicmVhazsKKwljYXNlIFVBQ19WRVJTSU9OXzI6CisJCS8qIGZwLT5jaGFubmVscyBpcyBhbHJlYWR5IHNldCBpbiB0aGlzIGNhc2UgKi8KKwkJcmV0ID0gcGFyc2VfYXVkaW9fZm9ybWF0X3JhdGVzX3YyKGNoaXAsIGZwLCBpZmFjZSk7CisJCWJyZWFrOworCX0KKwogCWlmIChmcC0+Y2hhbm5lbHMgPCAxKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogaW52YWxpZCBjaGFubmVscyAlZFxuIiwKIAkJCSAgIGNoaXAtPmRldi0+ZGV2bnVtLCBmcC0+aWZhY2UsIGZwLT5hbHRzZXR0aW5nLCBmcC0+Y2hhbm5lbHMpOwogCQlyZXR1cm4gLTE7CiAJfQotCXJldHVybiBwYXJzZV9hdWRpb19mb3JtYXRfcmF0ZXMoY2hpcCwgZnAsIGZtdCwgNyk7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKgotICogcHJhc2UgdGhlIGZvcm1hdCB0eXBlIElJIGRlc2NyaXB0b3IKKyAqIHBhcnNlIHRoZSBmb3JtYXQgdHlwZSBJSSBkZXNjcmlwdG9yCiAgKi8KLXN0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZm9ybWF0X2lpKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLCBzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwLAotCQkJCSBpbnQgZm9ybWF0LCB1bnNpZ25lZCBjaGFyICpmbXQpCitzdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2Zvcm1hdF9paShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKKwkJCQkgc3RydWN0IGF1ZGlvZm9ybWF0ICpmcCwKKwkJCQkgaW50IGZvcm1hdCwgdm9pZCAqX2ZtdCwKKwkJCQkgc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2UpCiB7Ci0JaW50IGJyYXRlLCBmcmFtZXNpemU7CisJaW50IGJyYXRlLCBmcmFtZXNpemUsIHJldDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICphbHRzZCA9IGdldF9pZmFjZV9kZXNjKGlmYWNlKTsKKwlpbnQgcHJvdG9jb2wgPSBhbHRzZC0+YkludGVyZmFjZVByb3RvY29sOworCiAJc3dpdGNoIChmb3JtYXQpIHsKLQljYXNlIFVTQl9BVURJT19GT1JNQVRfQUMzOgorCWNhc2UgVUFDX0ZPUk1BVF9UWVBFX0lJX0FDMzoKIAkJLyogRklYTUU6IHRoZXJlIGlzIG5vIEFDMyBmb3JtYXQgZGVmaW5lZCB5ZXQgKi8KIAkJLy8gZnAtPmZvcm1hdCA9IFNORFJWX1BDTV9GT1JNQVRfQUMzOwogCQlmcC0+Zm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9VODsgLyogdGVtcG9yYXJpbHkgaGFjayB0byByZWNlaXZlIGJ5dGUgc3RyZWFtcyAqLwogCQlicmVhazsKLQljYXNlIFVTQl9BVURJT19GT1JNQVRfTVBFRzoKKwljYXNlIFVBQ19GT1JNQVRfVFlQRV9JSV9NUEVHOgogCQlmcC0+Zm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9NUEVHOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjU5NiwyNiArMjc2MCw0NiBAQAogCQlmcC0+Zm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9NUEVHOwogCQlicmVhazsKIAl9CisKIAlmcC0+Y2hhbm5lbHMgPSAxOwotCWJyYXRlID0gY29tYmluZV93b3JkKCZmbXRbNF0pOyAJLyogZm10WzQsNV0gOiB3TWF4Qml0UmF0ZSAoaW4ga2JwcykgKi8KLQlmcmFtZXNpemUgPSBjb21iaW5lX3dvcmQoJmZtdFs2XSk7IC8qIGZtdFs2LDddOiB3U2FtcGxlc1BlckZyYW1lICovCi0Jc25kX3ByaW50ZChLRVJOX0lORk8gImZvdW5kIGZvcm1hdCBJSSB3aXRoIG1heC5iaXRyYXRlID0gJWQsIGZyYW1lIHNpemU9JWRcbiIsIGJyYXRlLCBmcmFtZXNpemUpOwotCWZwLT5mcmFtZV9zaXplID0gZnJhbWVzaXplOwotCXJldHVybiBwYXJzZV9hdWRpb19mb3JtYXRfcmF0ZXMoY2hpcCwgZnAsIGZtdCwgOCk7IC8qIGZtdFs4Li5dIHNhbXBsZSByYXRlcyAqLworCisJc3dpdGNoIChwcm90b2NvbCkgeworCWNhc2UgVUFDX1ZFUlNJT05fMTogeworCQlzdHJ1Y3QgdWFjX2Zvcm1hdF90eXBlX2lpX2Rpc2NyZXRlX2Rlc2NyaXB0b3IgKmZtdCA9IF9mbXQ7CisJCWJyYXRlID0gbGUxNl90b19jcHUoZm10LT53TWF4Qml0UmF0ZSk7CisJCWZyYW1lc2l6ZSA9IGxlMTZfdG9fY3B1KGZtdC0+d1NhbXBsZXNQZXJGcmFtZSk7CisJCXNuZF9wcmludGQoS0VSTl9JTkZPICJmb3VuZCBmb3JtYXQgSUkgd2l0aCBtYXguYml0cmF0ZSA9ICVkLCBmcmFtZSBzaXplPSVkXG4iLCBicmF0ZSwgZnJhbWVzaXplKTsKKwkJZnAtPmZyYW1lX3NpemUgPSBmcmFtZXNpemU7CisJCXJldCA9IHBhcnNlX2F1ZGlvX2Zvcm1hdF9yYXRlc192MShjaGlwLCBmcCwgX2ZtdCwgOCk7IC8qIGZtdFs4Li5dIHNhbXBsZSByYXRlcyAqLworCQlicmVhazsKKwl9CisJY2FzZSBVQUNfVkVSU0lPTl8yOiB7CisJCXN0cnVjdCB1YWNfZm9ybWF0X3R5cGVfaWlfZXh0X2Rlc2NyaXB0b3IgKmZtdCA9IF9mbXQ7CisJCWJyYXRlID0gbGUxNl90b19jcHUoZm10LT53TWF4Qml0UmF0ZSk7CisJCWZyYW1lc2l6ZSA9IGxlMTZfdG9fY3B1KGZtdC0+d1NhbXBsZXNQZXJGcmFtZSk7CisJCXNuZF9wcmludGQoS0VSTl9JTkZPICJmb3VuZCBmb3JtYXQgSUkgd2l0aCBtYXguYml0cmF0ZSA9ICVkLCBmcmFtZSBzaXplPSVkXG4iLCBicmF0ZSwgZnJhbWVzaXplKTsKKwkJZnAtPmZyYW1lX3NpemUgPSBmcmFtZXNpemU7CisJCXJldCA9IHBhcnNlX2F1ZGlvX2Zvcm1hdF9yYXRlc192MihjaGlwLCBmcCwgaWZhY2UpOworCQlicmVhazsKKwl9CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBwYXJzZV9hdWRpb19mb3JtYXQoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsIHN0cnVjdCBhdWRpb2Zvcm1hdCAqZnAsCi0JCQkgICAgICBpbnQgZm9ybWF0LCB1bnNpZ25lZCBjaGFyICpmbXQsIGludCBzdHJlYW0pCisJCQkgICAgICBpbnQgZm9ybWF0LCB1bnNpZ25lZCBjaGFyICpmbXQsIGludCBzdHJlYW0sCisJCQkgICAgICBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZSkKIHsKIAlpbnQgZXJyOwogCiAJc3dpdGNoIChmbXRbM10pIHsKLQljYXNlIFVTQl9GT1JNQVRfVFlQRV9JOgotCWNhc2UgVVNCX0ZPUk1BVF9UWVBFX0lJSToKLQkJZXJyID0gcGFyc2VfYXVkaW9fZm9ybWF0X2koY2hpcCwgZnAsIGZvcm1hdCwgZm10KTsKKwljYXNlIFVBQ19GT1JNQVRfVFlQRV9JOgorCWNhc2UgVUFDX0ZPUk1BVF9UWVBFX0lJSToKKwkJZXJyID0gcGFyc2VfYXVkaW9fZm9ybWF0X2koY2hpcCwgZnAsIGZvcm1hdCwgZm10LCBpZmFjZSk7CiAJCWJyZWFrOwotCWNhc2UgVVNCX0ZPUk1BVF9UWVBFX0lJOgotCQllcnIgPSBwYXJzZV9hdWRpb19mb3JtYXRfaWkoY2hpcCwgZnAsIGZvcm1hdCwgZm10KTsKKwljYXNlIFVBQ19GT1JNQVRfVFlQRV9JSToKKwkJZXJyID0gcGFyc2VfYXVkaW9fZm9ybWF0X2lpKGNoaXAsIGZwLCBmb3JtYXQsIGZtdCwgaWZhY2UpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiJWQ6JXU6JWQgOiBmb3JtYXQgdHlwZSAlZCBpcyBub3Qgc3VwcG9ydGVkIHlldFxuIiwKQEAgLTI2MzMsNyArMjgxNyw3IEBACiAJaWYgKGNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwMDApIHx8CiAJICAgIGNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwMjApIHx8CiAJICAgIGNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNjEpKSB7Ci0JCWlmIChmbXRbM10gPT0gVVNCX0ZPUk1BVF9UWVBFX0kgJiYKKwkJaWYgKGZtdFszXSA9PSBVQUNfRk9STUFUX1RZUEVfSSAmJgogCQkgICAgZnAtPnJhdGVzICE9IFNORFJWX1BDTV9SQVRFXzQ4MDAwICYmCiAJCSAgICBmcC0+cmF0ZXMgIT0gU05EUlZfUENNX1JBVEVfOTYwMDApCiAJCQlyZXR1cm4gLTE7CkBAIC0yNjYyLDEwICsyODQ2LDEwIEBACiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0czsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICphbHRzZDsKIAlpbnQgaSwgYWx0bm8sIGVyciwgc3RyZWFtOwotCWludCBmb3JtYXQ7CisJaW50IGZvcm1hdCA9IDAsIG51bV9jaGFubmVscyA9IDA7CiAJc3RydWN0IGF1ZGlvZm9ybWF0ICpmcCA9IE5VTEw7CiAJdW5zaWduZWQgY2hhciAqZm10LCAqY3NlcDsKLQlpbnQgbnVtOworCWludCBudW0sIHByb3RvY29sOwogCiAJZGV2ID0gY2hpcC0+ZGV2OwogCkBAIC0yNjg0LDEwICsyODY4LDExIEBACiAJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CiAJCWFsdHMgPSAmaWZhY2UtPmFsdHNldHRpbmdbaV07CiAJCWFsdHNkID0gZ2V0X2lmYWNlX2Rlc2MoYWx0cyk7CisJCXByb3RvY29sID0gYWx0c2QtPmJJbnRlcmZhY2VQcm90b2NvbDsKIAkJLyogc2tpcCBpbnZhbGlkIG9uZSAqLwogCQlpZiAoKGFsdHNkLT5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX0FVRElPICYmCiAJCSAgICAgYWx0c2QtPmJJbnRlcmZhY2VDbGFzcyAhPSBVU0JfQ0xBU1NfVkVORE9SX1NQRUMpIHx8Ci0JCSAgICAoYWx0c2QtPmJJbnRlcmZhY2VTdWJDbGFzcyAhPSBVU0JfU1VCQ0xBU1NfQVVESU9fU1RSRUFNSU5HICYmCisJCSAgICAoYWx0c2QtPmJJbnRlcmZhY2VTdWJDbGFzcyAhPSBVU0JfU1VCQ0xBU1NfQVVESU9TVFJFQU1JTkcgJiYKIAkJICAgICBhbHRzZC0+YkludGVyZmFjZVN1YkNsYXNzICE9IFVTQl9TVUJDTEFTU19WRU5ET1JfU1BFQykgfHwKIAkJICAgIGFsdHNkLT5iTnVtRW5kcG9pbnRzIDwgMSB8fAogCQkgICAgbGUxNl90b19jcHUoZ2V0X2VuZHBvaW50KGFsdHMsIDApLT53TWF4UGFja2V0U2l6ZSkgPT0gMCkKQEAgLTI3MDgsMzAgKzI4OTMsNjUgQEAKIAkJCWNvbnRpbnVlOwogCiAJCS8qIGdldCBhdWRpbyBmb3JtYXRzICovCi0JCWZtdCA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGFsdHMtPmV4dHJhLCBhbHRzLT5leHRyYWxlbiwgTlVMTCwgQVNfR0VORVJBTCk7Ci0JCWlmICghZm10KSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IEFTX0dFTkVSQUwgZGVzY3JpcHRvciBub3QgZm91bmRcbiIsCi0JCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlX25vLCBhbHRubyk7Ci0JCQljb250aW51ZTsKKwkJc3dpdGNoIChwcm90b2NvbCkgeworCQljYXNlIFVBQ19WRVJTSU9OXzE6IHsKKwkJCXN0cnVjdCB1YWNfYXNfaGVhZGVyX2Rlc2NyaXB0b3JfdjEgKmFzID0KKwkJCQlzbmRfdXNiX2ZpbmRfY3NpbnRfZGVzYyhhbHRzLT5leHRyYSwgYWx0cy0+ZXh0cmFsZW4sIE5VTEwsIFVBQ19BU19HRU5FUkFMKTsKKworCQkJaWYgKCFhcykgeworCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogVUFDX0FTX0dFTkVSQUwgZGVzY3JpcHRvciBub3QgZm91bmRcbiIsCisJCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8pOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoYXMtPmJMZW5ndGggPCBzaXplb2YoKmFzKSkgeworCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogaW52YWxpZCBVQUNfQVNfR0VORVJBTCBkZXNjXG4iLAorCQkJCQkgICBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJZm9ybWF0ID0gbGUxNl90b19jcHUoYXMtPndGb3JtYXRUYWcpOyAvKiByZW1lbWJlciB0aGUgZm9ybWF0IHZhbHVlICovCisJCQlicmVhazsKIAkJfQogCi0JCWlmIChmbXRbMF0gPCA3KSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IGludmFsaWQgQVNfR0VORVJBTCBkZXNjXG4iLAotCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8pOwotCQkJY29udGludWU7CisJCWNhc2UgVUFDX1ZFUlNJT05fMjogeworCQkJc3RydWN0IHVhY19hc19oZWFkZXJfZGVzY3JpcHRvcl92MiAqYXMgPQorCQkJCXNuZF91c2JfZmluZF9jc2ludF9kZXNjKGFsdHMtPmV4dHJhLCBhbHRzLT5leHRyYWxlbiwgTlVMTCwgVUFDX0FTX0dFTkVSQUwpOworCisJCQlpZiAoIWFzKSB7CisJCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQgOiBVQUNfQVNfR0VORVJBTCBkZXNjcmlwdG9yIG5vdCBmb3VuZFxuIiwKKwkJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlX25vLCBhbHRubyk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChhcy0+Ykxlbmd0aCA8IHNpemVvZigqYXMpKSB7CisJCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQgOiBpbnZhbGlkIFVBQ19BU19HRU5FUkFMIGRlc2NcbiIsCisJCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8pOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQludW1fY2hhbm5lbHMgPSBhcy0+Yk5yQ2hhbm5lbHM7CisJCQlmb3JtYXQgPSBsZTMyX3RvX2NwdShhcy0+Ym1Gb3JtYXRzKTsKKworCQkJYnJlYWs7CiAJCX0KIAotCQlmb3JtYXQgPSAoZm10WzZdIDw8IDgpIHwgZm10WzVdOyAvKiByZW1lbWJlciB0aGUgZm9ybWF0IHZhbHVlICovCisJCWRlZmF1bHQ6CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZCA6IHVua25vd24gaW50ZXJmYWNlIHByb3RvY29sICUwNHhcbiIsCisJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlX25vLCBhbHRubywgcHJvdG9jb2wpOworCQkJY29udGludWU7CisJCX0KIAogCQkvKiBnZXQgZm9ybWF0IHR5cGUgKi8KLQkJZm10ID0gc25kX3VzYl9maW5kX2NzaW50X2Rlc2MoYWx0cy0+ZXh0cmEsIGFsdHMtPmV4dHJhbGVuLCBOVUxMLCBGT1JNQVRfVFlQRSk7CisJCWZtdCA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGFsdHMtPmV4dHJhLCBhbHRzLT5leHRyYWxlbiwgTlVMTCwgVUFDX0ZPUk1BVF9UWVBFKTsKIAkJaWYgKCFmbXQpIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogbm8gRk9STUFUX1RZUEUgZGVzY1xuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogbm8gVUFDX0ZPUk1BVF9UWVBFIGRlc2NcbiIsCiAJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlX25vLCBhbHRubyk7CiAJCQljb250aW51ZTsKIAkJfQotCQlpZiAoZm10WzBdIDwgOCkgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQgOiBpbnZhbGlkIEZPUk1BVF9UWVBFIGRlc2NcbiIsCisJCWlmICgoKHByb3RvY29sID09IFVBQ19WRVJTSU9OXzEpICYmIChmbXRbMF0gPCA4KSkgfHwKKwkJICAgICgocHJvdG9jb2wgPT0gVUFDX1ZFUlNJT05fMikgJiYgKGZtdFswXSAhPSA2KSkpIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogaW52YWxpZCBVQUNfRk9STUFUX1RZUEUgZGVzY1xuIiwKIAkJCQkgICBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0yNzQ0LDYgKzI5NjQsNyBAQAogCQlpZiAoZm10WzRdID09IDEgJiYgZm10WzVdID09IDIgJiYgYWx0bm8gPT0gMiAmJiBudW0gPT0gMyAmJgogCQkgICAgZnAgJiYgZnAtPmFsdHNldHRpbmcgPT0gMSAmJiBmcC0+Y2hhbm5lbHMgPT0gMSAmJgogCQkgICAgZnAtPmZvcm1hdCA9PSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRSAmJgorCQkgICAgcHJvdG9jb2wgPT0gVUFDX1ZFUlNJT05fMSAmJgogCQkgICAgbGUxNl90b19jcHUoZ2V0X2VuZHBvaW50KGFsdHMsIDApLT53TWF4UGFja2V0U2l6ZSkgPT0KIAkJCQkJCQlmcC0+bWF4cGFja3NpemUgKiAyKQogCQkJY29udGludWU7CkBAIC0yNzUyLDcgKzI5NzMsNyBAQAogCQkvKiBDcmVhbXdhcmUgTm9haCBoYXMgdGhpcyBkZXNjcmlwdG9yIGFmdGVyIHRoZSAybmQgZW5kcG9pbnQgKi8KIAkJaWYgKCFjc2VwICYmIGFsdHNkLT5iTnVtRW5kcG9pbnRzID49IDIpCiAJCQljc2VwID0gc25kX3VzYl9maW5kX2Rlc2MoYWx0cy0+ZW5kcG9pbnRbMV0uZXh0cmEsIGFsdHMtPmVuZHBvaW50WzFdLmV4dHJhbGVuLCBOVUxMLCBVU0JfRFRfQ1NfRU5EUE9JTlQpOwotCQlpZiAoIWNzZXAgfHwgY3NlcFswXSA8IDcgfHwgY3NlcFsyXSAhPSBFUF9HRU5FUkFMKSB7CisJCWlmICghY3NlcCB8fCBjc2VwWzBdIDwgNyB8fCBjc2VwWzJdICE9IFVBQ19FUF9HRU5FUkFMKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiJWQ6JXU6JWQgOiBubyBvciBpbnZhbGlkIgogCQkJCSAgICIgY2xhc3Mgc3BlY2lmaWMgZW5kcG9pbnQgZGVzY3JpcHRvclxuIiwKIAkJCQkgICBkZXYtPmRldm51bSwgaWZhY2Vfbm8sIGFsdG5vKTsKQEAgLTI3NzIsNiArMjk5Myw4IEBACiAJCWZwLT5lcF9hdHRyID0gZ2V0X2VuZHBvaW50KGFsdHMsIDApLT5ibUF0dHJpYnV0ZXM7CiAJCWZwLT5kYXRhaW50ZXJ2YWwgPSBwYXJzZV9kYXRhaW50ZXJ2YWwoY2hpcCwgYWx0cyk7CiAJCWZwLT5tYXhwYWNrc2l6ZSA9IGxlMTZfdG9fY3B1KGdldF9lbmRwb2ludChhbHRzLCAwKS0+d01heFBhY2tldFNpemUpOworCQkvKiBudW1fY2hhbm5lbHMgaXMgb25seSBzZXQgZm9yIHYyIGludGVyZmFjZXMgKi8KKwkJZnAtPmNoYW5uZWxzID0gbnVtX2NoYW5uZWxzOwogCQlpZiAoc25kX3VzYl9nZXRfc3BlZWQoZGV2KSA9PSBVU0JfU1BFRURfSElHSCkKIAkJCWZwLT5tYXhwYWNrc2l6ZSA9ICgoKGZwLT5tYXhwYWNrc2l6ZSA+PiAxMSkgJiAzKSArIDEpCiAJCQkJCSogKGZwLT5tYXhwYWNrc2l6ZSAmIDB4N2ZmKTsKQEAgLTI3ODQsMTIgKzMwMDcsMTIgQEAKIAkJCS8qIE9wdG9wbGF5IHNldHMgdGhlIHNhbXBsZSByYXRlIGF0dHJpYnV0ZSBhbHRob3VnaAogCQkJICogaXQgc2VlbXMgbm90IHN1cHBvcnRpbmcgaXQgaW4gZmFjdC4KIAkJCSAqLwotCQkJZnAtPmF0dHJpYnV0ZXMgJj0gfkVQX0NTX0FUVFJfU0FNUExFX1JBVEU7CisJCQlmcC0+YXR0cmlidXRlcyAmPSB+VUFDX0VQX0NTX0FUVFJfU0FNUExFX1JBVEU7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfSUQoMHgwNDFlLCAweDMwMjApOiAvKiBDcmVhdGl2ZSBTQiBBdWRpZ3kgMiBOWCAqLwogCQljYXNlIFVTQl9JRCgweDA3NjMsIDB4MjAwMyk6IC8qIE0tQXVkaW8gQXVkaW9waGlsZSBVU0IgKi8KIAkJCS8qIGRvZXNuJ3Qgc2V0IHRoZSBzYW1wbGUgcmF0ZSBhdHRyaWJ1dGUsIGJ1dCBzdXBwb3J0cyBpdCAqLwotCQkJZnAtPmF0dHJpYnV0ZXMgfD0gRVBfQ1NfQVRUUl9TQU1QTEVfUkFURTsKKwkJCWZwLT5hdHRyaWJ1dGVzIHw9IFVBQ19FUF9DU19BVFRSX1NBTVBMRV9SQVRFOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX0lEKDB4MDQ3ZiwgMHgwY2ExKTogLyogcGxhbnRyb25pY3MgaGVhZHNldCAqLwogCQljYXNlIFVTQl9JRCgweDA3N2QsIDB4MDdhZik6IC8qIEdyaWZmaW4gaU1pYyAobm90ZSB0aGF0IHRoZXJlIGlzCkBAIC0yNzk4LDE2ICszMDIxLDE2IEBACiAJCSAqIHBsYW50cm9uaWNzIGhlYWRzZXQgYW5kIEdyaWZmaW4gaU1pYyBoYXZlIHNldCBhZGFwdGl2ZS1pbgogCQkgKiBhbHRob3VnaCBpdCdzIHJlYWxseSBub3QuLi4KIAkJICovCi0JCQlmcC0+ZXBfYXR0ciAmPSB+RVBfQVRUUl9NQVNLOworCQkJZnAtPmVwX2F0dHIgJj0gflVTQl9FTkRQT0lOVF9TWU5DVFlQRTsKIAkJCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJCQlmcC0+ZXBfYXR0ciB8PSBFUF9BVFRSX0FEQVBUSVZFOworCQkJCWZwLT5lcF9hdHRyIHw9IFVTQl9FTkRQT0lOVF9TWU5DX0FEQVBUSVZFOwogCQkJZWxzZQotCQkJCWZwLT5lcF9hdHRyIHw9IEVQX0FUVFJfU1lOQzsKKwkJCQlmcC0+ZXBfYXR0ciB8PSBVU0JfRU5EUE9JTlRfU1lOQ19TWU5DOwogCQkJYnJlYWs7CiAJCX0KIAogCQkvKiBvaywgbGV0J3MgcGFyc2UgZnVydGhlci4uLiAqLwotCQlpZiAocGFyc2VfYXVkaW9fZm9ybWF0KGNoaXAsIGZwLCBmb3JtYXQsIGZtdCwgc3RyZWFtKSA8IDApIHsKKwkJaWYgKHBhcnNlX2F1ZGlvX2Zvcm1hdChjaGlwLCBmcCwgZm9ybWF0LCBmbXQsIHN0cmVhbSwgYWx0cykgPCAwKSB7CiAJCQlrZnJlZShmcC0+cmF0ZV90YWJsZSk7CiAJCQlrZnJlZShmcCk7CiAJCQljb250aW51ZTsKQEAgLTI4NDksNiArMzA3Miw2NSBAQAogCX0KIH0KIAorc3RhdGljIGludCBzbmRfdXNiX2NyZWF0ZV9zdHJlYW0oc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsIGludCBjdHJsaWYsIGludCBpbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGNoaXAtPmRldjsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmFsdHNkOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSA9IHVzYl9pZm51bV90b19pZihkZXYsIGludGVyZmFjZSk7CisKKwlpZiAoIWlmYWNlKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiV1OiVkIDogZG9lcyBub3QgZXhpc3RcbiIsCisJCQkgICBkZXYtPmRldm51bSwgY3RybGlmLCBpbnRlcmZhY2UpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodXNiX2ludGVyZmFjZV9jbGFpbWVkKGlmYWNlKSkgeworCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gIiVkOiVkOiVkOiBza2lwcGluZywgYWxyZWFkeSBjbGFpbWVkXG4iLAorCQkJCQkJZGV2LT5kZXZudW0sIGN0cmxpZiwgaW50ZXJmYWNlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYWx0cyA9ICZpZmFjZS0+YWx0c2V0dGluZ1swXTsKKwlhbHRzZCA9IGdldF9pZmFjZV9kZXNjKGFsdHMpOworCWlmICgoYWx0c2QtPmJJbnRlcmZhY2VDbGFzcyA9PSBVU0JfQ0xBU1NfQVVESU8gfHwKKwkgICAgIGFsdHNkLT5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDKSAmJgorCSAgICBhbHRzZC0+YkludGVyZmFjZVN1YkNsYXNzID09IFVTQl9TVUJDTEFTU19NSURJU1RSRUFNSU5HKSB7CisJCWludCBlcnIgPSBzbmRfdXNibWlkaV9jcmVhdGUoY2hpcC0+Y2FyZCwgaWZhY2UsCisJCQkJCSAgICAgJmNoaXAtPm1pZGlfbGlzdCwgTlVMTCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZDogY2Fubm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGV2aWNlXG4iLAorCQkJCQkJZGV2LT5kZXZudW0sIGN0cmxpZiwgaW50ZXJmYWNlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZ1c2JfYXVkaW9fZHJpdmVyLCBpZmFjZSwgKHZvaWQgKiktMUwpOworCisJCXJldHVybiAwOworCX0KKworCWlmICgoYWx0c2QtPmJJbnRlcmZhY2VDbGFzcyAhPSBVU0JfQ0xBU1NfQVVESU8gJiYKKwkgICAgIGFsdHNkLT5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDKSB8fAorCSAgICBhbHRzZC0+YkludGVyZmFjZVN1YkNsYXNzICE9IFVTQl9TVUJDTEFTU19BVURJT1NUUkVBTUlORykgeworCQlzbmRfcHJpbnRkZChLRVJOX0VSUiAiJWQ6JXU6JWQ6IHNraXBwaW5nIG5vbi1zdXBwb3J0ZWQgaW50ZXJmYWNlICVkXG4iLAorCQkJCQlkZXYtPmRldm51bSwgY3RybGlmLCBpbnRlcmZhY2UsIGFsdHNkLT5iSW50ZXJmYWNlQ2xhc3MpOworCQkvKiBza2lwIG5vbi1zdXBwb3J0ZWQgY2xhc3NlcyAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc25kX3VzYl9nZXRfc3BlZWQoZGV2KSA9PSBVU0JfU1BFRURfTE9XKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImxvdyBzcGVlZCBhdWRpbyBzdHJlYW1pbmcgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghIHBhcnNlX2F1ZGlvX2VuZHBvaW50cyhjaGlwLCBpbnRlcmZhY2UpKSB7CisJCXVzYl9zZXRfaW50ZXJmYWNlKGRldiwgaW50ZXJmYWNlLCAwKTsgLyogcmVzZXQgdGhlIGN1cnJlbnQgaW50ZXJmYWNlICovCisJCXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZ1c2JfYXVkaW9fZHJpdmVyLCBpZmFjZSwgKHZvaWQgKiktMUwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIHBhcnNlIGF1ZGlvIGNvbnRyb2wgZGVzY3JpcHRvciBhbmQgY3JlYXRlIHBjbS9taWRpIHN0cmVhbXMKICAqLwpAQCAtMjg1Niw2NyArMzEzOCw4MSBAQAogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBjaGlwLT5kZXY7CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaG9zdF9pZmFjZTsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2U7Ci0JdW5zaWduZWQgY2hhciAqcDE7Ci0JaW50IGksIGo7CisJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqYWx0c2Q7CisJdm9pZCAqY29udHJvbF9oZWFkZXI7CisJaW50IGksIHByb3RvY29sOwogCiAJLyogZmluZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICovCiAJaG9zdF9pZmFjZSA9ICZ1c2JfaWZudW1fdG9faWYoZGV2LCBjdHJsaWYpLT5hbHRzZXR0aW5nWzBdOwotCWlmICghKHAxID0gc25kX3VzYl9maW5kX2NzaW50X2Rlc2MoaG9zdF9pZmFjZS0+ZXh0cmEsIGhvc3RfaWZhY2UtPmV4dHJhbGVuLCBOVUxMLCBIRUFERVIpKSkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZmluZCBIRUFERVJcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKCEgcDFbN10gfHwgcDFbMF0gPCA4ICsgcDFbN10pIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiaW52YWxpZCBIRUFERVJcbiIpOworCWNvbnRyb2xfaGVhZGVyID0gc25kX3VzYl9maW5kX2NzaW50X2Rlc2MoaG9zdF9pZmFjZS0+ZXh0cmEsCisJCQkJCQkgaG9zdF9pZmFjZS0+ZXh0cmFsZW4sCisJCQkJCQkgTlVMTCwgVUFDX0hFQURFUik7CisJYWx0c2QgPSBnZXRfaWZhY2VfZGVzYyhob3N0X2lmYWNlKTsKKwlwcm90b2NvbCA9IGFsdHNkLT5iSW50ZXJmYWNlUHJvdG9jb2w7CisKKwlpZiAoIWNvbnRyb2xfaGVhZGVyKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBmaW5kIFVBQ19IRUFERVJcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKgotCSAqIHBhcnNlIGFsbCBVU0IgYXVkaW8gc3RyZWFtaW5nIGludGVyZmFjZXMKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgcDFbN107IGkrKykgewotCQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzOwotCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICphbHRzZDsKLQkJaiA9IHAxWzggKyBpXTsKLQkJaWZhY2UgPSB1c2JfaWZudW1fdG9faWYoZGV2LCBqKTsKLQkJaWYgKCFpZmFjZSkgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiJWQ6JXU6JWQgOiBkb2VzIG5vdCBleGlzdFxuIiwKLQkJCQkgICBkZXYtPmRldm51bSwgY3RybGlmLCBqKTsKLQkJCWNvbnRpbnVlOworCXN3aXRjaCAocHJvdG9jb2wpIHsKKwljYXNlIFVBQ19WRVJTSU9OXzE6IHsKKwkJc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvcl92MSAqaDEgPSBjb250cm9sX2hlYWRlcjsKKworCQlpZiAoIWgxLT5iSW5Db2xsZWN0aW9uKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAic2tpcHBpbmcgZW1wdHkgYXVkaW8gaW50ZXJmYWNlICh2MSlcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKHVzYl9pbnRlcmZhY2VfY2xhaW1lZChpZmFjZSkpIHsKLQkJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiJWQ6JWQ6JWQ6IHNraXBwaW5nLCBhbHJlYWR5IGNsYWltZWRcbiIsIGRldi0+ZGV2bnVtLCBjdHJsaWYsIGopOwotCQkJY29udGludWU7CisKKwkJaWYgKGgxLT5iTGVuZ3RoIDwgc2l6ZW9mKCpoMSkgKyBoMS0+YkluQ29sbGVjdGlvbikgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiaW52YWxpZCBVQUNfSEVBREVSICh2MSlcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJYWx0cyA9ICZpZmFjZS0+YWx0c2V0dGluZ1swXTsKLQkJYWx0c2QgPSBnZXRfaWZhY2VfZGVzYyhhbHRzKTsKLQkJaWYgKChhbHRzZC0+YkludGVyZmFjZUNsYXNzID09IFVTQl9DTEFTU19BVURJTyB8fAotCQkgICAgIGFsdHNkLT5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDKSAmJgotCQkgICAgYWx0c2QtPmJJbnRlcmZhY2VTdWJDbGFzcyA9PSBVU0JfU1VCQ0xBU1NfTUlESV9TVFJFQU1JTkcpIHsKLQkJCWludCBlcnIgPSBzbmRfdXNibWlkaV9jcmVhdGUoY2hpcC0+Y2FyZCwgaWZhY2UsCi0JCQkJCQkgICAgICZjaGlwLT5taWRpX2xpc3QsIE5VTEwpOwotCQkJaWYgKGVyciA8IDApIHsKLQkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDoldTolZDogY2Fubm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGV2aWNlXG4iLCBkZXYtPmRldm51bSwgY3RybGlmLCBqKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZ1c2JfYXVkaW9fZHJpdmVyLCBpZmFjZSwgKHZvaWQgKiktMUwpOwotCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMDsgaSA8IGgxLT5iSW5Db2xsZWN0aW9uOyBpKyspCisJCQlzbmRfdXNiX2NyZWF0ZV9zdHJlYW0oY2hpcCwgY3RybGlmLCBoMS0+YmFJbnRlcmZhY2VOcltpXSk7CisKKwkJYnJlYWs7CisJfQorCisJY2FzZSBVQUNfVkVSU0lPTl8yOiB7CisJCXN0cnVjdCB1YWNfY2xvY2tfc291cmNlX2Rlc2NyaXB0b3IgKmNzOworCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9hc3NvY19kZXNjcmlwdG9yICphc3NvYyA9CisJCQl1c2JfaWZudW1fdG9faWYoZGV2LCBjdHJsaWYpLT5pbnRmX2Fzc29jOworCisJCWlmICghYXNzb2MpIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIkF1ZGlvIGNsYXNzIHYyIGludGVyZmFjZXMgbmVlZCBhbiBpbnRlcmZhY2UgYXNzb2NpYXRpb25cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKChhbHRzZC0+YkludGVyZmFjZUNsYXNzICE9IFVTQl9DTEFTU19BVURJTyAmJgotCQkgICAgIGFsdHNkLT5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDKSB8fAotCQkgICAgYWx0c2QtPmJJbnRlcmZhY2VTdWJDbGFzcyAhPSBVU0JfU1VCQ0xBU1NfQVVESU9fU1RSRUFNSU5HKSB7Ci0JCQlzbmRfcHJpbnRkZChLRVJOX0VSUiAiJWQ6JXU6JWQ6IHNraXBwaW5nIG5vbi1zdXBwb3J0ZWQgaW50ZXJmYWNlICVkXG4iLCBkZXYtPmRldm51bSwgY3RybGlmLCBqLCBhbHRzZC0+YkludGVyZmFjZUNsYXNzKTsKLQkJCS8qIHNraXAgbm9uLXN1cHBvcnRlZCBjbGFzc2VzICovCi0JCQljb250aW51ZTsKKworCQkvKiBGSVhNRTogZm9yIG5vdywgd2UgZXhwZWN0IHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjbG9jayBzb3VyY2UKKwkJICogZGVzY3JpcHRvciBhbmQgd2UgYWx3YXlzIHRha2UgdGhlIGZpcnN0IG9uZS4KKwkJICogV2Ugc2hvdWxkIHByb3Blcmx5IHN1cHBvcnQgZGV2aWNlcyB3aXRoIG11bHRpcGxlIGNsb2NrIHNvdXJjZXMsCisJCSAqIGNsb2NrIHNlbGVjdG9ycyBhbmQgc2FtcGxlIHJhdGUgY29udmVyc2lvbiB1bml0cy4gKi8KKworCQljcyA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGhvc3RfaWZhY2UtPmV4dHJhLCBob3N0X2lmYWNlLT5leHRyYWxlbiwKKwkJCQkJCU5VTEwsIFVBQ19DTE9DS19TT1VSQ0UpOworCisJCWlmICghY3MpIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIkNMT0NLX1NPVVJDRSBkZXNjcmlwdG9yIG5vdCBmb3VuZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAoc25kX3VzYl9nZXRfc3BlZWQoZGV2KSA9PSBVU0JfU1BFRURfTE9XKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJsb3cgc3BlZWQgYXVkaW8gc3RyZWFtaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQkJY29udGludWU7CisKKwkJY2hpcC0+Y2xvY2tfaWQgPSBjcy0+YkNsb2NrSUQ7CisKKwkJZm9yIChpID0gMDsgaSA8IGFzc29jLT5iSW50ZXJmYWNlQ291bnQ7IGkrKykgeworCQkJaW50IGludGYgPSBhc3NvYy0+YkZpcnN0SW50ZXJmYWNlICsgaTsKKworCQkJaWYgKGludGYgIT0gY3RybGlmKQorCQkJCXNuZF91c2JfY3JlYXRlX3N0cmVhbShjaGlwLCBjdHJsaWYsIGludGYpOwogCQl9Ci0JCWlmICghIHBhcnNlX2F1ZGlvX2VuZHBvaW50cyhjaGlwLCBqKSkgewotCQkJdXNiX3NldF9pbnRlcmZhY2UoZGV2LCBqLCAwKTsgLyogcmVzZXQgdGhlIGN1cnJlbnQgaW50ZXJmYWNlICovCi0JCQl1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmdXNiX2F1ZGlvX2RyaXZlciwgaWZhY2UsICh2b2lkICopLTFMKTsKLQkJfQorCisJCWJyZWFrOworCX0KKworCWRlZmF1bHQ6CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVua25vd24gcHJvdG9jb2wgdmVyc2lvbiAweCUwMnhcbiIsIHByb3RvY29sKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zMDA3LDcgKzMzMDMsNyBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXVkaW9mb3JtYXQgdWFfZm9ybWF0ID0gewogCQkuZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TMjRfM0xFLAogCQkuY2hhbm5lbHMgPSAyLAotCQkuZm10X3R5cGUgPSBVU0JfRk9STUFUX1RZUEVfSSwKKwkJLmZtdF90eXBlID0gVUFDX0ZPUk1BVF9UWVBFX0ksCiAJCS5hbHRzZXR0aW5nID0gMSwKIAkJLmFsdHNldF9pZHggPSAxLAogCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTLApAQCAtMzA5OSw3ICszMzk1LDcgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF1ZGlvZm9ybWF0IHVhMTAwMF9mb3JtYXQgPSB7CiAJCS5mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRSwKLQkJLmZtdF90eXBlID0gVVNCX0ZPUk1BVF9UWVBFX0ksCisJCS5mbXRfdHlwZSA9IFVBQ19GT1JNQVRfVFlQRV9JLAogCQkuYWx0c2V0dGluZyA9IDEsCiAJCS5hbHRzZXRfaWR4ID0gMSwKIAkJLmF0dHJpYnV0ZXMgPSAwLApAQCAtMzE0Miw1OSArMzQzOCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBDcmVhdGUgYSBzdHJlYW0gZm9yIGFuIEVkaXJvbCBVQS0xMDEgaW50ZXJmYWNlLgotICogQ29weSwgcGFzdGUgYW5kIG1vZGlmeSBmcm9tIEVkaXJvbCBVQS0xMDAwCi0gKi8KLXN0YXRpYyBpbnQgY3JlYXRlX3VhMTAxX3F1aXJrKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLAotCQkJICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyayAqcXVpcmspCi17Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBhdWRpb2Zvcm1hdCB1YTEwMV9mb3JtYXQgPSB7Ci0JCS5mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRSwKLQkJLmZtdF90eXBlID0gVVNCX0ZPUk1BVF9UWVBFX0ksCi0JCS5hbHRzZXR0aW5nID0gMSwKLQkJLmFsdHNldF9pZHggPSAxLAotCQkuYXR0cmlidXRlcyA9IDAsCi0JCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFX0NPTlRJTlVPVVMsCi0JfTsKLQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzOwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmFsdHNkOwotCXN0cnVjdCBhdWRpb2Zvcm1hdCAqZnA7Ci0JaW50IHN0cmVhbSwgZXJyOwotCi0JaWYgKGlmYWNlLT5udW1fYWx0c2V0dGluZyAhPSAyKQotCQlyZXR1cm4gLUVOWElPOwotCWFsdHMgPSAmaWZhY2UtPmFsdHNldHRpbmdbMV07Ci0JYWx0c2QgPSBnZXRfaWZhY2VfZGVzYyhhbHRzKTsKLQlpZiAoYWx0cy0+ZXh0cmFsZW4gIT0gMTggfHwgYWx0cy0+ZXh0cmFbMV0gIT0gVVNCX0RUX0NTX0lOVEVSRkFDRSB8fAotCSAgICBhbHRzZC0+Yk51bUVuZHBvaW50cyAhPSAxKQotCQlyZXR1cm4gLUVOWElPOwotCi0JZnAgPSBrbWVtZHVwKCZ1YTEwMV9mb3JtYXQsIHNpemVvZigqZnApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWZwKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWZwLT5jaGFubmVscyA9IGFsdHMtPmV4dHJhWzExXTsKLQlmcC0+aWZhY2UgPSBhbHRzZC0+YkludGVyZmFjZU51bWJlcjsKLQlmcC0+ZW5kcG9pbnQgPSBnZXRfZW5kcG9pbnQoYWx0cywgMCktPmJFbmRwb2ludEFkZHJlc3M7Ci0JZnAtPmVwX2F0dHIgPSBnZXRfZW5kcG9pbnQoYWx0cywgMCktPmJtQXR0cmlidXRlczsKLQlmcC0+ZGF0YWludGVydmFsID0gcGFyc2VfZGF0YWludGVydmFsKGNoaXAsIGFsdHMpOwotCWZwLT5tYXhwYWNrc2l6ZSA9IGxlMTZfdG9fY3B1KGdldF9lbmRwb2ludChhbHRzLCAwKS0+d01heFBhY2tldFNpemUpOwotCWZwLT5yYXRlX21heCA9IGZwLT5yYXRlX21pbiA9IGNvbWJpbmVfdHJpcGxlKCZhbHRzLT5leHRyYVsxNV0pOwotCi0Jc3RyZWFtID0gKGZwLT5lbmRwb2ludCAmIFVTQl9ESVJfSU4pCi0JCT8gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFIDogU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzsKLQllcnIgPSBhZGRfYXVkaW9fZW5kcG9pbnQoY2hpcCwgc3RyZWFtLCBmcCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJa2ZyZWUoZnApOwotCQlyZXR1cm4gZXJyOwotCX0KLQkvKiBGSVhNRTogcGxheWJhY2sgbXVzdCBiZSBzeW5jaHJvbml6ZWQgdG8gY2FwdHVyZSAqLwotCXVzYl9zZXRfaW50ZXJmYWNlKGNoaXAtPmRldiwgZnAtPmlmYWNlLCAwKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBzbmRfdXNiX2NyZWF0ZV9xdWlyayhzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKIAkJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsCiAJCQkJY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmsgKnF1aXJrKTsKQEAgLTMyMzIsNiArMzQ3NSwxOCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogQWxsb3cgYWxpZ25tZW50IG9uIGF1ZGlvIHN1Yi1zbG90IChjaGFubmVsIHNhbXBsZXMpIHJhdGhlciB0aGFuCisgKiBvbiBhdWRpbyBzbG90cyAoYXVkaW8gZnJhbWVzKQorICovCitzdGF0aWMgaW50IGNyZWF0ZV9hbGlnbl90cmFuc2Zlcl9xdWlyayhzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKKwkJCQkgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrICpxdWlyaykKK3sKKwljaGlwLT50eGZyX3F1aXJrID0gMTsKKwlyZXR1cm4gMTsJLyogQ29udGludWUgd2l0aCBjcmVhdGluZyBzdHJlYW1zIGFuZCBtaXhlciAqLworfQorCiAKIC8qCiAgKiBib290IHF1aXJrcwpAQCAtMzMyNyw2ICszNTgyLDMyIEBACiB9CiAKIC8qCisgKiBUaGlzIGNhbGwgd2lsbCBwdXQgdGhlIHN5bnRoIGluICJVU0Igc2VuZCIgbW9kZSwgaS5lIGl0IHdpbGwgc2VuZCBNSURJCisgKiBtZXNzYWdlcyB0aHJvdWdoIFVTQiAodGhpcyBpcyBkaXNhYmxlZCBhdCBzdGFydHVwKS4gVGhlIHN5bnRoIHdpbGwKKyAqIGFja25vd2xlZGdlIGJ5IHNlbmRpbmcgYSBzeXNleCBvbiBlbmRwb2ludCAweDg1IGFuZCBieSBkaXNwbGF5aW5nIGEgVVNCCisgKiBzaWduIG9uIGl0cyBMQ0QuIFZhbHVlcyBoZXJlIGFyZSBjaG9zZW4gYmFzZWQgb24gc25pZmZpbmcgVVNCIHRyYWZmaWMKKyAqIHVuZGVyIFdpbmRvd3MuCisgKi8KK3N0YXRpYyBpbnQgc25kX3VzYl9hY2Nlc3NtdXNpY19ib290X3F1aXJrKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJaW50IGVyciwgYWN0dWFsX2xlbmd0aDsKKworCS8qICJtaWRpIHNlbmQiIGVuYWJsZSAqLworCXN0YXRpYyBjb25zdCB1OCBzZXFbXSA9IHsgMHg0ZSwgMHg3MywgMHg1MiwgMHgwMSB9OworCisJdm9pZCAqYnVmID0ga21lbWR1cChzZXEsIEFSUkFZX1NJWkUoc2VxKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCWVyciA9IHVzYl9pbnRlcnJ1cHRfbXNnKGRldiwgdXNiX3NuZGludHBpcGUoZGV2LCAweDA1KSwgYnVmLAorCQkJQVJSQVlfU0laRShzZXEpLCAmYWN0dWFsX2xlbmd0aCwgMTAwMCk7CisJa2ZyZWUoYnVmKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorCisvKgogICogU2V0dXAgcXVpcmtzCiAgKi8KICNkZWZpbmUgQVVESU9QSElMRV9TRVQJCQkweDAxIC8qIGlmIHNldCwgcGFyc2UgZGV2aWNlX3NldHVwICovCkBAIC0zNDA2LDggKzM2ODcsOCBAQAogCQlbUVVJUktfQVVESU9fU1RBTkRBUkRfSU5URVJGQUNFXSA9IGNyZWF0ZV9zdGFuZGFyZF9hdWRpb19xdWlyaywKIAkJW1FVSVJLX0FVRElPX0ZJWEVEX0VORFBPSU5UXSA9IGNyZWF0ZV9maXhlZF9zdHJlYW1fcXVpcmssCiAJCVtRVUlSS19BVURJT19FRElST0xfVUExMDAwXSA9IGNyZWF0ZV91YTEwMDBfcXVpcmssCi0JCVtRVUlSS19BVURJT19FRElST0xfVUExMDFdID0gY3JlYXRlX3VhMTAxX3F1aXJrLAotCQlbUVVJUktfQVVESU9fRURJUk9MX1VBWFhdID0gY3JlYXRlX3VheHhfcXVpcmsKKwkJW1FVSVJLX0FVRElPX0VESVJPTF9VQVhYXSA9IGNyZWF0ZV91YXh4X3F1aXJrLAorCQlbUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVJdID0gY3JlYXRlX2FsaWduX3RyYW5zZmVyX3F1aXJrCiAJfTsKIAogCWlmIChxdWlyay0+dHlwZSA8IFFVSVJLX1RZUEVfQ09VTlQpIHsKQEAgLTM1OTYsNyArMzg3Nyw2IEBACiAJaWZudW0gPSBnZXRfaWZhY2VfZGVzYyhhbHRzKS0+YkludGVyZmFjZU51bWJlcjsKIAlpZCA9IFVTQl9JRChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAogCQkgICAgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOwotCiAJaWYgKHF1aXJrICYmIHF1aXJrLT5pZm51bSA+PSAwICYmIGlmbnVtICE9IHF1aXJrLT5pZm51bSkKIAkJZ290byBfX2Vycl92YWw7CiAKQEAgLTM2MjQsNiArMzkwNCwxMiBAQAogCQkJZ290byBfX2Vycl92YWw7CiAJfQogCisJLyogQWNjZXNzIE11c2ljIFZpcnVzVEkgRGVza3RvcCAqLworCWlmIChpZCA9PSBVU0JfSUQoMHgxMzNlLCAweDA4MTUpKSB7CisJCWlmIChzbmRfdXNiX2FjY2Vzc211c2ljX2Jvb3RfcXVpcmsoZGV2KSA8IDApCisJCQlnb3RvIF9fZXJyX3ZhbDsKKwl9CisKIAkvKgogCSAqIGZvdW5kIGEgY29uZmlnLiAgbm93IHJlZ2lzdGVyIHRvIEFMU0EKIAkgKi8KQEAgLTM2NjEsNiArMzk0Nyw3IEBACiAJCX0KIAl9CiAKKwljaGlwLT50eGZyX3F1aXJrID0gMDsKIAllcnIgPSAxOyAvKiBjb250aW51ZSAqLwogCWlmIChxdWlyayAmJiBxdWlyay0+aWZudW0gIT0gUVVJUktfTk9fSU5URVJGQUNFKSB7CiAJCS8qIG5lZWQgc29tZSBzcGVjaWFsIGhhbmRsaW5ncyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYmF1ZGlvLmggYi9zb3VuZC91c2IvdXNiYXVkaW8uaAppbmRleCA0MGJhODExLi42YjAxNmQ0IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNiYXVkaW8uaAorKysgYi9zb3VuZC91c2IvdXNiYXVkaW8uaApAQCAtMjEsOTMgKzIxLDYgQEAKICAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKi8KIAotCi0vKgotICovCi0KLSNkZWZpbmUgVVNCX1NVQkNMQVNTX0FVRElPX0NPTlRST0wJMHgwMQotI2RlZmluZSBVU0JfU1VCQ0xBU1NfQVVESU9fU1RSRUFNSU5HCTB4MDIKLSNkZWZpbmUgVVNCX1NVQkNMQVNTX01JRElfU1RSRUFNSU5HCTB4MDMKLSNkZWZpbmUgVVNCX1NVQkNMQVNTX1ZFTkRPUl9TUEVDCTB4ZmYKLQotI2RlZmluZSBIRUFERVIJCQkJMHgwMQotI2RlZmluZSBJTlBVVF9URVJNSU5BTAkJCTB4MDIKLSNkZWZpbmUgT1VUUFVUX1RFUk1JTkFMCQkJMHgwMwotI2RlZmluZSBNSVhFUl9VTklUCQkJMHgwNAotI2RlZmluZSBTRUxFQ1RPUl9VTklUCQkJMHgwNQotI2RlZmluZSBGRUFUVVJFX1VOSVQJCQkweDA2Ci0jZGVmaW5lIFBST0NFU1NJTkdfVU5JVAkJCTB4MDcKLSNkZWZpbmUgRVhURU5TSU9OX1VOSVQJCQkweDA4Ci0KLSNkZWZpbmUgQVNfR0VORVJBTAkJCTB4MDEKLSNkZWZpbmUgRk9STUFUX1RZUEUJCQkweDAyCi0jZGVmaW5lIEZPUk1BVF9TUEVDSUZJQwkJCTB4MDMKLQotI2RlZmluZSBFUF9HRU5FUkFMCQkJMHgwMQotCi0jZGVmaW5lIE1TX0dFTkVSQUwJCQkweDAxCi0jZGVmaW5lIE1JRElfSU5fSkFDSwkJCTB4MDIKLSNkZWZpbmUgTUlESV9PVVRfSkFDSwkJCTB4MDMKLQotLyogZW5kcG9pbnQgYXR0cmlidXRlcyAqLwotI2RlZmluZSBFUF9BVFRSX01BU0sJCQkweDBjCi0jZGVmaW5lIEVQX0FUVFJfQVNZTkMJCQkweDA0Ci0jZGVmaW5lIEVQX0FUVFJfQURBUFRJVkUJCTB4MDgKLSNkZWZpbmUgRVBfQVRUUl9TWU5DCQkJMHgwYwotCi0vKiBjcyBlbmRwb2ludCBhdHRyaWJ1dGVzICovCi0jZGVmaW5lIEVQX0NTX0FUVFJfU0FNUExFX1JBVEUJCTB4MDEKLSNkZWZpbmUgRVBfQ1NfQVRUUl9QSVRDSF9DT05UUk9MCTB4MDIKLSNkZWZpbmUgRVBfQ1NfQVRUUl9GSUxMX01BWAkJMHg4MAotCi0vKiBBdWRpbyBDbGFzcyBzcGVjaWZpYyBSZXF1ZXN0IENvZGVzICovCi0KLSNkZWZpbmUgU0VUX0NVUiAgICAweDAxCi0jZGVmaW5lIEdFVF9DVVIgICAgMHg4MQotI2RlZmluZSBTRVRfTUlOICAgIDB4MDIKLSNkZWZpbmUgR0VUX01JTiAgICAweDgyCi0jZGVmaW5lIFNFVF9NQVggICAgMHgwMwotI2RlZmluZSBHRVRfTUFYICAgIDB4ODMKLSNkZWZpbmUgU0VUX1JFUyAgICAweDA0Ci0jZGVmaW5lIEdFVF9SRVMgICAgMHg4NAotI2RlZmluZSBTRVRfTUVNICAgIDB4MDUKLSNkZWZpbmUgR0VUX01FTSAgICAweDg1Ci0jZGVmaW5lIEdFVF9TVEFUICAgMHhmZgotCi0vKiBUZXJtaW5hbCBDb250cm9sIFNlbGVjdG9ycyAqLwotCi0jZGVmaW5lIENPUFlfUFJPVEVDVF9DT05UUk9MICAgICAgIDB4MDEKLQotLyogRW5kcG9pbnQgQ29udHJvbCBTZWxlY3RvcnMgKi8KLQotI2RlZmluZSBTQU1QTElOR19GUkVRX0NPTlRST0wgICAgICAweDAxCi0jZGVmaW5lIFBJVENIX0NPTlRST0wgICAgICAgICAgICAgIDB4MDIKLQotLyogRm9ybWF0IFR5cGVzICovCi0jZGVmaW5lIFVTQl9GT1JNQVRfVFlQRV9JCTB4MDEKLSNkZWZpbmUgVVNCX0ZPUk1BVF9UWVBFX0lJCTB4MDIKLSNkZWZpbmUgVVNCX0ZPUk1BVF9UWVBFX0lJSQkweDAzCi0KLS8qIHR5cGUgSSAqLwotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX1BDTQkweDAxCi0jZGVmaW5lIFVTQl9BVURJT19GT1JNQVRfUENNOAkweDAyCi0jZGVmaW5lIFVTQl9BVURJT19GT1JNQVRfSUVFRV9GTE9BVAkweDAzCi0jZGVmaW5lIFVTQl9BVURJT19GT1JNQVRfQUxBVwkweDA0Ci0jZGVmaW5lIFVTQl9BVURJT19GT1JNQVRfTVVfTEFXCTB4MDUKLQotLyogdHlwZSBJSSAqLwotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX01QRUcJMHgxMDAxCi0jZGVmaW5lIFVTQl9BVURJT19GT1JNQVRfQUMzCTB4MTAwMgotCi0vKiB0eXBlIElJSSAqLwotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX0lFQzE5MzdfQUMzCTB4MjAwMQotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX0lFQzE5MzdfTVBFRzFfTEFZRVIxCTB4MjAwMgotI2RlZmluZSBVU0JfQVVESU9fRk9STUFUX0lFQzE5MzdfTVBFRzJfTk9FWFQJMHgyMDAzCi0jZGVmaW5lIFVTQl9BVURJT19GT1JNQVRfSUVDMTkzN19NUEVHMl9FWFQJMHgyMDA0Ci0jZGVmaW5lIFVTQl9BVURJT19GT1JNQVRfSUVDMTkzN19NUEVHMl9MQVlFUjFfTFMJMHgyMDA1Ci0jZGVmaW5lIFVTQl9BVURJT19GT1JNQVRfSUVDMTkzN19NUEVHMl9MQVlFUjIzX0xTCTB4MjAwNgotCi0KIC8qIG1heGltdW0gbnVtYmVyIG9mIGVuZHBvaW50cyBwZXIgaW50ZXJmYWNlICovCiAjZGVmaW5lIE1JRElfTUFYX0VORFBPSU5UUyAyCiAKQEAgLTEyNSw5ICszOCwxMyBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAl1MzIgdXNiX2lkOwogCWludCBzaHV0ZG93bjsKKwl1bnNpZ25lZCBpbnQgdHhmcl9xdWlyazoxOyAvKiBTdWJmcmFtZSBib3VuZGFyaWVzIG9uIHRyYW5zZmVycyAqLwogCWludCBudW1faW50ZXJmYWNlczsKIAlpbnQgbnVtX3N1c3BlbmRlZF9pbnRmOwogCisJLyogZm9yIGF1ZGlvIGNsYXNzIHYyICovCisJaW50IGNsb2NrX2lkOworCiAJc3RydWN0IGxpc3RfaGVhZCBwY21fbGlzdDsJLyogbGlzdCBvZiBwY20gc3RyZWFtcyAqLwogCWludCBwY21fZGV2czsKIApAQCAtMTU5LDggKzc2LDggQEAKIAlRVUlSS19BVURJT19TVEFOREFSRF9JTlRFUkZBQ0UsCiAJUVVJUktfQVVESU9fRklYRURfRU5EUE9JTlQsCiAJUVVJUktfQVVESU9fRURJUk9MX1VBMTAwMCwKLQlRVUlSS19BVURJT19FRElST0xfVUExMDEsCiAJUVVJUktfQVVESU9fRURJUk9MX1VBWFgsCisJUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVIsCiAKIAlRVUlSS19UWVBFX0NPVU5UCiB9OwpAQCAtMjA5LDYgKzEyNiwxNiBAQAogLyoKICAqLwogCisvKkUtbXUgVVNCIHNhbXBsZXJhdGUgY29udHJvbCBxdWlyayovCitlbnVtIHsKKwlFTVVfUVVJUktfU1JfNDQxMDBIWiA9IDAsCisJRU1VX1FVSVJLX1NSXzQ4MDAwSFosCisJRU1VX1FVSVJLX1NSXzg4MjAwSFosCisJRU1VX1FVSVJLX1NSXzk2MDAwSFosCisJRU1VX1FVSVJLX1NSXzE3NjQwMEhaLAorCUVNVV9RVUlSS19TUl8xOTIwMDBIWgorfTsKKwogI2RlZmluZSBjb21iaW5lX3dvcmQocykgICAgKCgqKHMpKSB8ICgodW5zaWduZWQgaW50KShzKVsxXSA8PCA4KSkKICNkZWZpbmUgY29tYmluZV90cmlwbGUocykgIChjb21iaW5lX3dvcmQocykgfCAoKHVuc2lnbmVkIGludCkocylbMl0gPDwgMTYpKQogI2RlZmluZSBjb21iaW5lX3F1YWQocykgICAgKGNvbWJpbmVfdHJpcGxlKHMpIHwgKCh1bnNpZ25lZCBpbnQpKHMpWzNdIDw8IDI0KSkKQEAgLTIzNCw2ICsxNjEsOSBAQAogdm9pZCBzbmRfdXNibWlkaV9pbnB1dF9zdGFydChzdHJ1Y3QgbGlzdF9oZWFkKiBwKTsKIHZvaWQgc25kX3VzYm1pZGlfZGlzY29ubmVjdChzdHJ1Y3QgbGlzdF9oZWFkICpwKTsKIAordm9pZCBzbmRfZW11dXNiX3NldF9zYW1wbGVyYXRlKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLAorCQkJdW5zaWduZWQgY2hhciBzYW1wbGVyYXRlX2lkKTsKKwogLyoKICAqIHJldHJpZXZlIHVzYl9pbnRlcmZhY2UgZGVzY3JpcHRvciBmcm9tIHRoZSBob3N0IGludGVyZmFjZQogICogKGNvbmRpdGlvbmFsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIG9sZGVyIEFQSSkKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaWRpLmMgYi9zb3VuZC91c2IvdXNibWlkaS5jCmluZGV4IDZlODliODMuLjJjNTlhZmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JtaWRpLmMKKysrIGIvc291bmQvdXNiL3VzYm1pZGkuYwpAQCAtNDYsNiArNDYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9hdWRpby5oPgorCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CkBAIC0xMTYyLDEwICsxMTY0LDIyIEBACiAJCXBpcGUgPSB1c2Jfc25kaW50cGlwZSh1bWlkaS0+ZGV2LCBlcF9pbmZvLT5vdXRfZXApOwogCWVsc2UKIAkJcGlwZSA9IHVzYl9zbmRidWxrcGlwZSh1bWlkaS0+ZGV2LCBlcF9pbmZvLT5vdXRfZXApOwotCWlmICh1bWlkaS0+dXNiX2lkID09IFVTQl9JRCgweDBhOTIsIDB4MTAyMCkpIC8qIEVTSSBNNFUgKi8KLQkJZXAtPm1heF90cmFuc2ZlciA9IDQ7Ci0JZWxzZQorCXN3aXRjaCAodW1pZGktPnVzYl9pZCkgeworCWRlZmF1bHQ6CiAJCWVwLT5tYXhfdHJhbnNmZXIgPSB1c2JfbWF4cGFja2V0KHVtaWRpLT5kZXYsIHBpcGUsIDEpOworCQlicmVhazsKKwkJLyoKKwkJICogVmFyaW91cyBjaGlwcyBkZWNsYXJlIGEgcGFja2V0IHNpemUgbGFyZ2VyIHRoYW4gNCBieXRlcywgYnV0CisJCSAqIGRvIG5vdCBhY3R1YWxseSB3b3JrIHdpdGggbGFyZ2VyIHBhY2tldHM6CisJCSAqLworCWNhc2UgVVNCX0lEKDB4MGE5MiwgMHgxMDIwKTogLyogRVNJIE00VSAqLworCWNhc2UgVVNCX0lEKDB4MTQzMCwgMHg0NzRiKTogLyogUmVkT2N0YW5lIEdIIE1JREkgSU5URVJGQUNFICovCisJY2FzZSBVU0JfSUQoMHgxNWNhLCAweDAxMDEpOiAvKiBUZXh0ZWNoIFVTQiBNaWRpIENhYmxlICovCisJY2FzZSBVU0JfSUQoMHgxNWNhLCAweDE4MDYpOiAvKiBUZXh0ZWNoIFVTQiBNaWRpIENhYmxlICovCisJY2FzZSBVU0JfSUQoMHgxYTg2LCAweDc1MmQpOiAvKiBRaW5IZW5nIENIMzQ1ICJVU0IyLjAtTUlESSIgKi8KKwkJZXAtPm1heF90cmFuc2ZlciA9IDQ7CisJCWJyZWFrOworCX0KIAlmb3IgKGkgPSAwOyBpIDwgT1VUUFVUX1VSQlM7ICsraSkgewogCQlidWZmZXIgPSB1c2JfYnVmZmVyX2FsbG9jKHVtaWRpLT5kZXYsCiAJCQkJCSAgZXAtPm1heF90cmFuc2ZlciwgR0ZQX0tFUk5FTCwKQEAgLTE0MDcsNiArMTQyMSwxMiBAQAogCUVYVEVSTkFMX1BPUlQoMHgwODZhLCAweDAwMDEsIDgsICIlcyBCcm9hZGNhc3QiKSwKIAlFWFRFUk5BTF9QT1JUKDB4MDg2YSwgMHgwMDAyLCA4LCAiJXMgQnJvYWRjYXN0IiksCiAJRVhURVJOQUxfUE9SVCgweDA4NmEsIDB4MDAwMywgNCwgIiVzIEJyb2FkY2FzdCIpLAorCS8qIEFjY2VzcyBNdXNpYyBWaXJ1cyBUSSAqLworCUVYVEVSTkFMX1BPUlQoMHgxMzNlLCAweDA4MTUsIDAsICIlcyBNSURJIiksCisJUE9SVF9JTkZPKDB4MTMzZSwgMHgwODE1LCAxLCAiJXMgU3ludGgiLCAwLAorCQlTTkRSVl9TRVFfUE9SVF9UWVBFX01JRElfR0VORVJJQyB8CisJCVNORFJWX1NFUV9QT1JUX1RZUEVfSEFSRFdBUkUgfAorCQlTTkRSVl9TRVFfUE9SVF9UWVBFX1NZTlRIRVNJWkVSKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcG9ydF9pbmZvICpmaW5kX3BvcnRfaW5mbyhzdHJ1Y3Qgc25kX3VzYl9taWRpKiB1bWlkaSwgaW50IG51bWJlcikKQEAgLTE1MjIsNyArMTU0Miw3IEBACiAJaWYgKGhvc3RpZi0+ZXh0cmFsZW4gPj0gNyAmJgogCSAgICBtc19oZWFkZXItPmJMZW5ndGggPj0gNyAmJgogCSAgICBtc19oZWFkZXItPmJEZXNjcmlwdG9yVHlwZSA9PSBVU0JfRFRfQ1NfSU5URVJGQUNFICYmCi0JICAgIG1zX2hlYWRlci0+YkRlc2NyaXB0b3JTdWJ0eXBlID09IEhFQURFUikKKwkgICAgbXNfaGVhZGVyLT5iRGVzY3JpcHRvclN1YnR5cGUgPT0gVUFDX0hFQURFUikKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJNSURJU3RyZWFtaW5nIHZlcnNpb24gJTAyeC4lMDJ4XG4iLAogCQkJICAgIG1zX2hlYWRlci0+YmNkTVNDWzFdLCBtc19oZWFkZXItPmJjZE1TQ1swXSk7CiAJZWxzZQpAQCAtMTUzOCw3ICsxNTU4LDcgQEAKIAkJaWYgKGhvc3RlcC0+ZXh0cmFsZW4gPCA0IHx8CiAJCSAgICBtc19lcC0+Ykxlbmd0aCA8IDQgfHwKIAkJICAgIG1zX2VwLT5iRGVzY3JpcHRvclR5cGUgIT0gVVNCX0RUX0NTX0VORFBPSU5UIHx8Ci0JCSAgICBtc19lcC0+YkRlc2NyaXB0b3JTdWJ0eXBlICE9IE1TX0dFTkVSQUwpCisJCSAgICBtc19lcC0+YkRlc2NyaXB0b3JTdWJ0eXBlICE9IFVBQ19NU19HRU5FUkFMKQogCQkJY29udGludWU7CiAJCWlmICh1c2JfZW5kcG9pbnRfZGlyX291dChlcCkpIHsKIAkJCWlmIChlbmRwb2ludHNbZXBpZHhdLm91dF9lcCkgewpAQCAtMTc1MCw5ICsxNzcwLDkgQEAKIAkgICAgIGNzX2Rlc2MgPCBob3N0aWYtPmV4dHJhICsgaG9zdGlmLT5leHRyYWxlbiAmJiBjc19kZXNjWzBdID49IDI7CiAJICAgICBjc19kZXNjICs9IGNzX2Rlc2NbMF0pIHsKIAkJaWYgKGNzX2Rlc2NbMV0gPT0gVVNCX0RUX0NTX0lOVEVSRkFDRSkgewotCQkJaWYgKGNzX2Rlc2NbMl0gPT0gTUlESV9JTl9KQUNLKQorCQkJaWYgKGNzX2Rlc2NbMl0gPT0gVUFDX01JRElfSU5fSkFDSykKIAkJCQllbmRwb2ludC0+aW5fY2FibGVzID0gKGVuZHBvaW50LT5pbl9jYWJsZXMgPDwgMSkgfCAxOwotCQkJZWxzZSBpZiAoY3NfZGVzY1syXSA9PSBNSURJX09VVF9KQUNLKQorCQkJZWxzZSBpZiAoY3NfZGVzY1syXSA9PSBVQUNfTUlESV9PVVRfSkFDSykKIAkJCQllbmRwb2ludC0+b3V0X2NhYmxlcyA9IChlbmRwb2ludC0+b3V0X2NhYmxlcyA8PCAxKSB8IDE7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNibWl4ZXIuYyBiL3NvdW5kL3VzYi91c2JtaXhlci5jCmluZGV4IGM5OTgyMjAuLjhlOGY4NzFiIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNibWl4ZXIuYworKysgYi9zb3VuZC91c2IvdXNibWl4ZXIuYwpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvYXVkaW8uaD4KKwogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CiAjaW5jbHVkZSA8c291bmQvaHdkZXAuaD4KQEAgLTY5LDEzICs3MSwxNiBAQAogCXsgVVNCX0lEKDB4MDQxZSwgMHgzMDQ4KSwgMiwgMiwgNiwgNiwgIDIsICAweDZlOTEgfSwgLyogVG9zaGliYSBTQjA1MDAgKi8KIH07CiAKKyNkZWZpbmUgTUFYX0lEX0VMRU1TCTI1NgorCiBzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSB7CiAJc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXA7CiAJdW5zaWduZWQgaW50IGN0cmxpZjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJdW5zaWduZWQgaW50IGlnbm9yZV9jdGxfZXJyb3I7CiAJc3RydWN0IHVyYiAqdXJiOwotCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICoqaWRfZWxlbXM7IC8qIGFycmF5WzI1Nl0sIGluZGV4ZWQgYnkgdW5pdCBpZCAqLworCS8qIGFycmF5W01BWF9JRF9FTEVNU10sIGluZGV4ZWQgYnkgdW5pdCBpZCAqLworCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICoqaWRfZWxlbXM7CiAKIAkvKiBTb3VuZCBCbGFzdGVyIHJlbW90ZSBjb250cm9sIHN0dWZmICovCiAJY29uc3Qgc3RydWN0IHJjX2NvbmZpZyAqcmNfY2ZnOwpAQCAtMTA1LDcgKzExMCw3IEBACiAJc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKIAl1bnNpZ25lZCBpbnQgYnVmbGVuOwotCURFQ0xBUkVfQklUTUFQKHVuaXRiaXRtYXAsIDI1Nik7CisJREVDTEFSRV9CSVRNQVAodW5pdGJpdG1hcCwgTUFYX0lEX0VMRU1TKTsKIAlzdHJ1Y3QgdXNiX2F1ZGlvX3Rlcm0gb3Rlcm07CiAJY29uc3Qgc3RydWN0IHVzYm1peF9uYW1lX21hcCAqbWFwOwogCWNvbnN0IHN0cnVjdCB1c2JtaXhfc2VsZWN0b3JfbWFwICpzZWxlY3Rvcl9tYXA7CkBAIC0xMjMsNiArMTI4LDcgQEAKIAlpbnQgY2hhbm5lbHM7CiAJaW50IHZhbF90eXBlOwogCWludCBtaW4sIG1heCwgcmVzOworCWludCBkQm1pbiwgZEJtYXg7CiAJaW50IGNhY2hlZDsKIAlpbnQgY2FjaGVfdmFsW01BWF9DSEFOTkVMU107CiAJdTggaW5pdGlhbGl6ZWQ7CkBAIC0xODYsNiArMTkyLDIxIEBACiAJVVNCX1BST0NfRENSX1JFTEVBU0UgPSA2LAogfTsKIAorLypFLW11IDAyMDIoMDQwNCkgZVh0ZW5zaW9uIFVuaXQoWFUpIGNvbnRyb2wqLworZW51bSB7CisJVVNCX1hVX0NMT0NLX1JBVEUgCQk9IDB4ZTMwMSwKKwlVU0JfWFVfQ0xPQ0tfU09VUkNFCQk9IDB4ZTMwMiwKKwlVU0JfWFVfRElHSVRBTF9JT19TVEFUVVMJPSAweGUzMDMsCisJVVNCX1hVX0RFVklDRV9PUFRJT05TCQk9IDB4ZTMwNCwKKwlVU0JfWFVfRElSRUNUX01PTklUT1JJTkcJPSAweGUzMDUsCisJVVNCX1hVX01FVEVSSU5HCQkJPSAweGUzMDYKK307CitlbnVtIHsKKwlVU0JfWFVfQ0xPQ0tfU09VUkNFX1NFTEVDVE9SID0gMHgwMiwJLyogY2xvY2sgc291cmNlKi8KKwlVU0JfWFVfQ0xPQ0tfUkFURV9TRUxFQ1RPUiA9IDB4MDMsCS8qIGNsb2NrIHJhdGUgKi8KKwlVU0JfWFVfRElHSVRBTF9GT1JNQVRfU0VMRUNUT1IgPSAweDAxLAkvKiB0aGUgc3BkaWYgZm9ybWF0ICovCisJVVNCX1hVX1NPRlRfTElNSVRfU0VMRUNUT1IgPSAweDAzCS8qIHNvZnQgbGltaXRlciAqLworfTsKIAogLyoKICAqIG1hbnVhbCBtYXBwaW5nIG9mIG1peGVyIG5hbWVzCkBAIC0xOTQsNDIgKzIxNSw1MCBAQAogICovCiAjaW5jbHVkZSAidXNibWl4ZXJfbWFwcy5jIgogCi0vKiBnZXQgdGhlIG1hcHBlZCBuYW1lIGlmIHRoZSB1bml0IG1hdGNoZXMgKi8KLXN0YXRpYyBpbnQgY2hlY2tfbWFwcGVkX25hbWUoc3RydWN0IG1peGVyX2J1aWxkICpzdGF0ZSwgaW50IHVuaXRpZCwgaW50IGNvbnRyb2wsIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwICoKK2ZpbmRfbWFwKHN0cnVjdCBtaXhlcl9idWlsZCAqc3RhdGUsIGludCB1bml0aWQsIGludCBjb250cm9sKQogewotCWNvbnN0IHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgKnA7CisJY29uc3Qgc3RydWN0IHVzYm1peF9uYW1lX21hcCAqcCA9IHN0YXRlLT5tYXA7CiAKLQlpZiAoISBzdGF0ZS0+bWFwKQotCQlyZXR1cm4gMDsKKwlpZiAoIXApCisJCXJldHVybiBOVUxMOwogCiAJZm9yIChwID0gc3RhdGUtPm1hcDsgcC0+aWQ7IHArKykgewotCQlpZiAocC0+aWQgPT0gdW5pdGlkICYmIHAtPm5hbWUgJiYKLQkJICAgICghIGNvbnRyb2wgfHwgISBwLT5jb250cm9sIHx8IGNvbnRyb2wgPT0gcC0+Y29udHJvbCkpIHsKLQkJCWJ1Zmxlbi0tOwotCQkJcmV0dXJuIHN0cmxjcHkoYnVmLCBwLT5uYW1lLCBidWZsZW4pOwotCQl9CisJCWlmIChwLT5pZCA9PSB1bml0aWQgJiYKKwkJICAgICghY29udHJvbCB8fCAhcC0+Y29udHJvbCB8fCBjb250cm9sID09IHAtPmNvbnRyb2wpKQorCQkJcmV0dXJuIHA7CiAJfQotCXJldHVybiAwOworCXJldHVybiBOVUxMOworfQorCisvKiBnZXQgdGhlIG1hcHBlZCBuYW1lIGlmIHRoZSB1bml0IG1hdGNoZXMgKi8KK3N0YXRpYyBpbnQKK2NoZWNrX21hcHBlZF9uYW1lKGNvbnN0IHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgKnAsIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKK3sKKwlpZiAoIXAgfHwgIXAtPm5hbWUpCisJCXJldHVybiAwOworCisJYnVmbGVuLS07CisJcmV0dXJuIHN0cmxjcHkoYnVmLCBwLT5uYW1lLCBidWZsZW4pOwogfQogCiAvKiBjaGVjayB3aGV0aGVyIHRoZSBjb250cm9sIHNob3VsZCBiZSBpZ25vcmVkICovCi1zdGF0aWMgaW50IGNoZWNrX2lnbm9yZWRfY3RsKHN0cnVjdCBtaXhlcl9idWlsZCAqc3RhdGUsIGludCB1bml0aWQsIGludCBjb250cm9sKQorc3RhdGljIGlubGluZSBpbnQKK2NoZWNrX2lnbm9yZWRfY3RsKGNvbnN0IHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgKnApCiB7Ci0JY29uc3Qgc3RydWN0IHVzYm1peF9uYW1lX21hcCAqcDsKLQotCWlmICghIHN0YXRlLT5tYXApCisJaWYgKCFwIHx8IHAtPm5hbWUgfHwgcC0+ZEIpCiAJCXJldHVybiAwOwotCWZvciAocCA9IHN0YXRlLT5tYXA7IHAtPmlkOyBwKyspIHsKLQkJaWYgKHAtPmlkID09IHVuaXRpZCAmJiAhIHAtPm5hbWUgJiYKLQkJICAgICghIGNvbnRyb2wgfHwgISBwLT5jb250cm9sIHx8IGNvbnRyb2wgPT0gcC0+Y29udHJvbCkpIHsKLQkJCS8qCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiaWdub3JlZCBjb250cm9sICVkOiVkXG4iLAotCQkJICAgICAgIHVuaXRpZCwgY29udHJvbCk7Ci0JCQkqLwotCQkJcmV0dXJuIDE7Ci0JCX0KKwlyZXR1cm4gMTsKK30KKworLyogZEIgbWFwcGluZyAqLworc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX21hcHBlZF9kQihjb25zdCBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwICpwLAorCQkJCSAgIHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsKQoreworCWlmIChwICYmIHAtPmRCKSB7CisJCWN2YWwtPmRCbWluID0gcC0+ZEItPm1pbjsKKwkJY3ZhbC0+ZEJtYXggPSBwLT5kQi0+bWF4OwogCX0KLQlyZXR1cm4gMDsKIH0KIAogLyogZ2V0IHRoZSBtYXBwZWQgc2VsZWN0b3Igc291cmNlIG5hbWUgKi8KQEAgLTI1Nyw3ICsyODYsNyBAQAogCXAgPSBOVUxMOwogCXdoaWxlICgocCA9IHNuZF91c2JfZmluZF9kZXNjKHN0YXRlLT5idWZmZXIsIHN0YXRlLT5idWZsZW4sIHAsCiAJCQkJICAgICAgVVNCX0RUX0NTX0lOVEVSRkFDRSkpICE9IE5VTEwpIHsKLQkJaWYgKHBbMF0gPj0gNCAmJiBwWzJdID49IElOUFVUX1RFUk1JTkFMICYmIHBbMl0gPD0gRVhURU5TSU9OX1VOSVQgJiYgcFszXSA9PSB1bml0KQorCQlpZiAocFswXSA+PSA0ICYmIHBbMl0gPj0gVUFDX0lOUFVUX1RFUk1JTkFMICYmIHBbMl0gPD0gVUFDX0VYVEVOU0lPTl9VTklUX1YxICYmIHBbM10gPT0gdW5pdCkKIAkJCXJldHVybiBwOwogCX0KIAlyZXR1cm4gTlVMTDsKQEAgLTM3OCwxNCArNDA3LDE0IEBACiAKIHN0YXRpYyBpbnQgZ2V0X2N1cl9jdGxfdmFsdWUoc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsIGludCB2YWxpZHgsIGludCAqdmFsdWUpCiB7Ci0JcmV0dXJuIGdldF9jdGxfdmFsdWUoY3ZhbCwgR0VUX0NVUiwgdmFsaWR4LCB2YWx1ZSk7CisJcmV0dXJuIGdldF9jdGxfdmFsdWUoY3ZhbCwgVUFDX0dFVF9DVVIsIHZhbGlkeCwgdmFsdWUpOwogfQogCiAvKiBjaGFubmVsID0gMDogbWFzdGVyLCAxID0gZmlyc3QgY2hhbm5lbCAqLwogc3RhdGljIGlubGluZSBpbnQgZ2V0X2N1cl9taXhfcmF3KHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLAogCQkJCSAgaW50IGNoYW5uZWwsIGludCAqdmFsdWUpCiB7Ci0JcmV0dXJuIGdldF9jdGxfdmFsdWUoY3ZhbCwgR0VUX0NVUiwgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBjaGFubmVsLCB2YWx1ZSk7CisJcmV0dXJuIGdldF9jdGxfdmFsdWUoY3ZhbCwgVUFDX0dFVF9DVVIsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgY2hhbm5lbCwgdmFsdWUpOwogfQogCiBzdGF0aWMgaW50IGdldF9jdXJfbWl4X3ZhbHVlKHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLApAQCAtNDM5LDE0ICs0NjgsMTQgQEAKIAogc3RhdGljIGludCBzZXRfY3VyX2N0bF92YWx1ZShzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwgaW50IHZhbGlkeCwgaW50IHZhbHVlKQogewotCXJldHVybiBzZXRfY3RsX3ZhbHVlKGN2YWwsIFNFVF9DVVIsIHZhbGlkeCwgdmFsdWUpOworCXJldHVybiBzZXRfY3RsX3ZhbHVlKGN2YWwsIFVBQ19TRVRfQ1VSLCB2YWxpZHgsIHZhbHVlKTsKIH0KIAogc3RhdGljIGludCBzZXRfY3VyX21peF92YWx1ZShzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwgaW50IGNoYW5uZWwsCiAJCQkgICAgIGludCBpbmRleCwgaW50IHZhbHVlKQogewogCWludCBlcnI7Ci0JZXJyID0gc2V0X2N0bF92YWx1ZShjdmFsLCBTRVRfQ1VSLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IGNoYW5uZWwsCisJZXJyID0gc2V0X2N0bF92YWx1ZShjdmFsLCBVQUNfU0VUX0NVUiwgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBjaGFubmVsLAogCQkJICAgIHZhbHVlKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTQ2NiwyMCArNDk1LDggQEAKIAogCWlmIChzaXplIDwgc2l6ZW9mKHNjYWxlKSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JLyogVVNCIGRlc2NyaXB0aW9ucyBjb250YWluIHRoZSBkQiBzY2FsZSBpbiAxLzI1NiBkQiB1bml0Ci0JICogd2hpbGUgQUxTQSBUTFYgY29udGFpbnMgaW4gMS8xMDAgZEIgdW5pdAotCSAqLwotCXNjYWxlWzJdID0gKGNvbnZlcnRfc2lnbmVkX3ZhbHVlKGN2YWwsIGN2YWwtPm1pbikgKiAxMDApIC8gMjU2OwotCXNjYWxlWzNdID0gKGNvbnZlcnRfc2lnbmVkX3ZhbHVlKGN2YWwsIGN2YWwtPm1heCkgKiAxMDApIC8gMjU2OwotCWlmIChzY2FsZVszXSA8PSBzY2FsZVsyXSkgewotCQkvKiBzb21ldGhpbmcgaXMgd3Jvbmc7IGFzc3VtZSBpdCdzIGVpdGhlciBmcm9tL3RvIDBkQiAqLwotCQlpZiAoc2NhbGVbMl0gPCAwKQotCQkJc2NhbGVbM10gPSAwOwotCQllbHNlIGlmIChzY2FsZVsyXSA+IDApCi0JCQlzY2FsZVsyXSA9IDA7Ci0JCWVsc2UgLyogdG90YWxseSBjcmFwLCByZXR1cm4gYW4gZXJyb3IgKi8KLQkJCXJldHVybiAtRUlOVkFMOwotCX0KKwlzY2FsZVsyXSA9IGN2YWwtPmRCbWluOworCXNjYWxlWzNdID0gY3ZhbC0+ZEJtYXg7CiAJaWYgKGNvcHlfdG9fdXNlcihfdGx2LCBzY2FsZSwgc2l6ZW9mKHNjYWxlKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwpAQCAtNTg4LDEzICs2MDUsMTMgQEAKIAkJaWYgKHRlcm1fb25seSkKIAkJCXJldHVybiAwOwogCQlzd2l0Y2ggKGl0ZXJtLT50eXBlID4+IDE2KSB7Ci0JCWNhc2UgU0VMRUNUT1JfVU5JVDoKKwkJY2FzZSBVQUNfU0VMRUNUT1JfVU5JVDoKIAkJCXN0cmNweShuYW1lLCAiU2VsZWN0b3IiKTsgcmV0dXJuIDg7Ci0JCWNhc2UgUFJPQ0VTU0lOR19VTklUOgorCQljYXNlIFVBQ19QUk9DRVNTSU5HX1VOSVRfVjE6CiAJCQlzdHJjcHkobmFtZSwgIlByb2Nlc3MgVW5pdCIpOyByZXR1cm4gMTI7Ci0JCWNhc2UgRVhURU5TSU9OX1VOSVQ6CisJCWNhc2UgVUFDX0VYVEVOU0lPTl9VTklUX1YxOgogCQkJc3RyY3B5KG5hbWUsICJFeHQgVW5pdCIpOyByZXR1cm4gODsKLQkJY2FzZSBNSVhFUl9VTklUOgorCQljYXNlIFVBQ19NSVhFUl9VTklUOgogCQkJc3RyY3B5KG5hbWUsICJNaXhlciIpOyByZXR1cm4gNTsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiBzcHJpbnRmKG5hbWUsICJVbml0ICVkIiwgaXRlcm0tPmlkKTsKQEAgLTYzMywyMiArNjUwLDIyIEBACiAJd2hpbGUgKChwMSA9IGZpbmRfYXVkaW9fY29udHJvbF91bml0KHN0YXRlLCBpZCkpICE9IE5VTEwpIHsKIAkJdGVybS0+aWQgPSBpZDsKIAkJc3dpdGNoIChwMVsyXSkgewotCQljYXNlIElOUFVUX1RFUk1JTkFMOgorCQljYXNlIFVBQ19JTlBVVF9URVJNSU5BTDoKIAkJCXRlcm0tPnR5cGUgPSBjb21iaW5lX3dvcmQocDEgKyA0KTsKIAkJCXRlcm0tPmNoYW5uZWxzID0gcDFbN107CiAJCQl0ZXJtLT5jaGNvbmZpZyA9IGNvbWJpbmVfd29yZChwMSArIDgpOwogCQkJdGVybS0+bmFtZSA9IHAxWzExXTsKIAkJCXJldHVybiAwOwotCQljYXNlIEZFQVRVUkVfVU5JVDoKKwkJY2FzZSBVQUNfRkVBVFVSRV9VTklUOgogCQkJaWQgPSBwMVs0XTsKIAkJCWJyZWFrOyAvKiBjb250aW51ZSB0byBwYXJzZSAqLwotCQljYXNlIE1JWEVSX1VOSVQ6CisJCWNhc2UgVUFDX01JWEVSX1VOSVQ6CiAJCQl0ZXJtLT50eXBlID0gcDFbMl0gPDwgMTY7IC8qIHZpcnR1YWwgdHlwZSAqLwogCQkJdGVybS0+Y2hhbm5lbHMgPSBwMVs1ICsgcDFbNF1dOwogCQkJdGVybS0+Y2hjb25maWcgPSBjb21iaW5lX3dvcmQocDEgKyA2ICsgcDFbNF0pOwogCQkJdGVybS0+bmFtZSA9IHAxW3AxWzBdIC0gMV07CiAJCQlyZXR1cm4gMDsKLQkJY2FzZSBTRUxFQ1RPUl9VTklUOgorCQljYXNlIFVBQ19TRUxFQ1RPUl9VTklUOgogCQkJLyogY2FsbCByZWN1cnNpdmVseSB0byByZXRyaWV2ZSB0aGUgY2hhbm5lbCBpbmZvICovCiAJCQlpZiAoY2hlY2tfaW5wdXRfdGVybShzdGF0ZSwgcDFbNV0sIHRlcm0pIDwgMCkKIAkJCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTY1Niw4ICs2NzMsOCBAQAogCQkJdGVybS0+aWQgPSBpZDsKIAkJCXRlcm0tPm5hbWUgPSBwMVs5ICsgcDFbMF0gLSAxXTsKIAkJCXJldHVybiAwOwotCQljYXNlIFBST0NFU1NJTkdfVU5JVDoKLQkJY2FzZSBFWFRFTlNJT05fVU5JVDoKKwkJY2FzZSBVQUNfUFJPQ0VTU0lOR19VTklUX1YxOgorCQljYXNlIFVBQ19FWFRFTlNJT05fVU5JVF9WMToKIAkJCWlmIChwMVs2XSA9PSAxKSB7CiAJCQkJaWQgPSBwMVs3XTsKIAkJCQlicmVhazsgLyogY29udGludWUgdG8gcGFyc2UgKi8KQEAgLTcyMCw2ICs3MzcsNyBAQAogCWN2YWwtPm1pbiA9IGRlZmF1bHRfbWluOwogCWN2YWwtPm1heCA9IGN2YWwtPm1pbiArIDE7CiAJY3ZhbC0+cmVzID0gMTsKKwljdmFsLT5kQm1pbiA9IGN2YWwtPmRCbWF4ID0gMDsKIAogCWlmIChjdmFsLT52YWxfdHlwZSA9PSBVU0JfTUlYRVJfQk9PTEVBTiB8fAogCSAgICBjdmFsLT52YWxfdHlwZSA9PSBVU0JfTUlYRVJfSU5WX0JPT0xFQU4pIHsKQEAgLTczNCwyMyArNzUyLDIzIEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJfQotCQlpZiAoZ2V0X2N0bF92YWx1ZShjdmFsLCBHRVRfTUFYLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IG1pbmNobiwgJmN2YWwtPm1heCkgPCAwIHx8Ci0JCSAgICBnZXRfY3RsX3ZhbHVlKGN2YWwsIEdFVF9NSU4sIChjdmFsLT5jb250cm9sIDw8IDgpIHwgbWluY2huLCAmY3ZhbC0+bWluKSA8IDApIHsKKwkJaWYgKGdldF9jdGxfdmFsdWUoY3ZhbCwgVUFDX0dFVF9NQVgsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgbWluY2huLCAmY3ZhbC0+bWF4KSA8IDAgfHwKKwkJICAgIGdldF9jdGxfdmFsdWUoY3ZhbCwgVUFDX0dFVF9NSU4sIChjdmFsLT5jb250cm9sIDw8IDgpIHwgbWluY2huLCAmY3ZhbC0+bWluKSA8IDApIHsKIAkJCXNuZF9wcmludGQoS0VSTl9FUlIgIiVkOiVkOiBjYW5ub3QgZ2V0IG1pbi9tYXggdmFsdWVzIGZvciBjb250cm9sICVkIChpZCAlZClcbiIsCiAJCQkJICAgY3ZhbC0+aWQsIGN2YWwtPm1peGVyLT5jdHJsaWYsIGN2YWwtPmNvbnRyb2wsIGN2YWwtPmlkKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmIChnZXRfY3RsX3ZhbHVlKGN2YWwsIEdFVF9SRVMsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgbWluY2huLCAmY3ZhbC0+cmVzKSA8IDApIHsKKwkJaWYgKGdldF9jdGxfdmFsdWUoY3ZhbCwgVUFDX0dFVF9SRVMsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgbWluY2huLCAmY3ZhbC0+cmVzKSA8IDApIHsKIAkJCWN2YWwtPnJlcyA9IDE7CiAJCX0gZWxzZSB7CiAJCQlpbnQgbGFzdF92YWxpZF9yZXMgPSBjdmFsLT5yZXM7CiAKIAkJCXdoaWxlIChjdmFsLT5yZXMgPiAxKSB7Ci0JCQkJaWYgKHNldF9jdGxfdmFsdWUoY3ZhbCwgU0VUX1JFUywgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBtaW5jaG4sIGN2YWwtPnJlcyAvIDIpIDwgMCkKKwkJCQlpZiAoc2V0X2N0bF92YWx1ZShjdmFsLCBVQUNfU0VUX1JFUywgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBtaW5jaG4sIGN2YWwtPnJlcyAvIDIpIDwgMCkKIAkJCQkJYnJlYWs7CiAJCQkJY3ZhbC0+cmVzIC89IDI7CiAJCQl9Ci0JCQlpZiAoZ2V0X2N0bF92YWx1ZShjdmFsLCBHRVRfUkVTLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IG1pbmNobiwgJmN2YWwtPnJlcykgPCAwKQorCQkJaWYgKGdldF9jdGxfdmFsdWUoY3ZhbCwgVUFDX0dFVF9SRVMsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgbWluY2huLCAmY3ZhbC0+cmVzKSA8IDApCiAJCQkJY3ZhbC0+cmVzID0gbGFzdF92YWxpZF9yZXM7CiAJCX0KIAkJaWYgKGN2YWwtPnJlcyA9PSAwKQpAQCAtNzg3LDYgKzgwNSwyNCBAQAogCiAJCWN2YWwtPmluaXRpYWxpemVkID0gMTsKIAl9CisKKwkvKiBVU0IgZGVzY3JpcHRpb25zIGNvbnRhaW4gdGhlIGRCIHNjYWxlIGluIDEvMjU2IGRCIHVuaXQKKwkgKiB3aGlsZSBBTFNBIFRMViBjb250YWlucyBpbiAxLzEwMCBkQiB1bml0CisJICovCisJY3ZhbC0+ZEJtaW4gPSAoY29udmVydF9zaWduZWRfdmFsdWUoY3ZhbCwgY3ZhbC0+bWluKSAqIDEwMCkgLyAyNTY7CisJY3ZhbC0+ZEJtYXggPSAoY29udmVydF9zaWduZWRfdmFsdWUoY3ZhbCwgY3ZhbC0+bWF4KSAqIDEwMCkgLyAyNTY7CisJaWYgKGN2YWwtPmRCbWluID4gY3ZhbC0+ZEJtYXgpIHsKKwkJLyogc29tZXRoaW5nIGlzIHdyb25nOyBhc3N1bWUgaXQncyBlaXRoZXIgZnJvbS90byAwZEIgKi8KKwkJaWYgKGN2YWwtPmRCbWluIDwgMCkKKwkJCWN2YWwtPmRCbWF4ID0gMDsKKwkJZWxzZSBpZiAoY3ZhbC0+ZEJtaW4gPiAwKQorCQkJY3ZhbC0+ZEJtaW4gPSAwOworCQlpZiAoY3ZhbC0+ZEJtaW4gPiBjdmFsLT5kQm1heCkgeworCQkJLyogdG90YWxseSBjcmFwLCByZXR1cm4gYW4gZXJyb3IgKi8KKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkxMiw2ICs5NDgsNyBAQAogCWludCBuYW1laWQgPSBkZXNjW2Rlc2NbMF0gLSAxXTsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOwogCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsOworCWNvbnN0IHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgKm1hcDsKIAogCWNvbnRyb2wrKzsgLyogY2hhbmdlIGZyb20gemVyby1iYXNlZCB0byAxLWJhc2VkIHZhbHVlICovCiAKQEAgLTkyMCw3ICs5NTcsOCBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGNoZWNrX2lnbm9yZWRfY3RsKHN0YXRlLCB1bml0aWQsIGNvbnRyb2wpKQorCW1hcCA9IGZpbmRfbWFwKHN0YXRlLCB1bml0aWQsIGNvbnRyb2wpOworCWlmIChjaGVja19pZ25vcmVkX2N0bChtYXApKQogCQlyZXR1cm47CiAKIAljdmFsID0ga3phbGxvYyhzaXplb2YoKmN2YWwpLCBHRlBfS0VSTkVMKTsKQEAgLTk1NCwxMCArOTkyLDExIEBACiAJfQogCWtjdGwtPnByaXZhdGVfZnJlZSA9IHVzYl9taXhlcl9lbGVtX2ZyZWU7CiAKLQlsZW4gPSBjaGVja19tYXBwZWRfbmFtZShzdGF0ZSwgdW5pdGlkLCBjb250cm9sLCBrY3RsLT5pZC5uYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOworCWxlbiA9IGNoZWNrX21hcHBlZF9uYW1lKG1hcCwga2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKIAltYXBwZWRfbmFtZSA9IGxlbiAhPSAwOwogCWlmICghIGxlbiAmJiBuYW1laWQpCi0JCWxlbiA9IHNuZF91c2JfY29weV9zdHJpbmdfZGVzYyhzdGF0ZSwgbmFtZWlkLCBrY3RsLT5pZC5uYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOworCQlsZW4gPSBzbmRfdXNiX2NvcHlfc3RyaW5nX2Rlc2Moc3RhdGUsIG5hbWVpZCwKKwkJCQlrY3RsLT5pZC5uYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOwogCiAJc3dpdGNoIChjb250cm9sKSB7CiAJY2FzZSBVU0JfRkVBVFVSRV9NVVRFOgpAQCAtOTk1LDYgKzEwMzQsNyBAQAogCQkJa2N0bC0+dmRbMF0uYWNjZXNzIHw9IAogCQkJCVNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCB8CiAJCQkJU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9DQUxMQkFDSzsKKwkJCWNoZWNrX21hcHBlZF9kQihtYXAsIGN2YWwpOwogCQl9CiAJCWJyZWFrOwogCkBAIC0xMDQ4LDI5ICsxMDg4LDMwIEBACiAgKgogICogbW9zdCBvZiBjb250cm9sbHMgYXJlIGRlZmluZWQgaGVyZS4KICAqLwotc3RhdGljIGludCBwYXJzZV9hdWRpb19mZWF0dXJlX3VuaXQoc3RydWN0IG1peGVyX2J1aWxkICpzdGF0ZSwgaW50IHVuaXRpZCwgdW5zaWduZWQgY2hhciAqZnRyKQorc3RhdGljIGludCBwYXJzZV9hdWRpb19mZWF0dXJlX3VuaXQoc3RydWN0IG1peGVyX2J1aWxkICpzdGF0ZSwgaW50IHVuaXRpZCwgdm9pZCAqX2Z0cikKIHsKIAlpbnQgY2hhbm5lbHMsIGksIGo7CiAJc3RydWN0IHVzYl9hdWRpb190ZXJtIGl0ZXJtOwogCXVuc2lnbmVkIGludCBtYXN0ZXJfYml0cywgZmlyc3RfY2hfYml0czsKIAlpbnQgZXJyLCBjc2l6ZTsKKwlzdHJ1Y3QgdWFjX2ZlYXR1cmVfdW5pdF9kZXNjcmlwdG9yICpmdHIgPSBfZnRyOwogCi0JaWYgKGZ0clswXSA8IDcgfHwgISAoY3NpemUgPSBmdHJbNV0pIHx8IGZ0clswXSA8IDcgKyBjc2l6ZSkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogdW5pdCAldTogaW52YWxpZCBGRUFUVVJFX1VOSVQgZGVzY3JpcHRvclxuIiwgdW5pdGlkKTsKKwlpZiAoZnRyLT5iTGVuZ3RoIDwgNyB8fCAhIChjc2l6ZSA9IGZ0ci0+YkNvbnRyb2xTaXplKSB8fCBmdHItPmJMZW5ndGggPCA3ICsgY3NpemUpIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6IGludmFsaWQgVUFDX0ZFQVRVUkVfVU5JVCBkZXNjcmlwdG9yXG4iLCB1bml0aWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBwYXJzZSB0aGUgc291cmNlIHVuaXQgKi8KLQlpZiAoKGVyciA9IHBhcnNlX2F1ZGlvX3VuaXQoc3RhdGUsIGZ0cls0XSkpIDwgMCkKKwlpZiAoKGVyciA9IHBhcnNlX2F1ZGlvX3VuaXQoc3RhdGUsIGZ0ci0+YlNvdXJjZUlEKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCiAJLyogZGV0ZXJtaW5lIHRoZSBpbnB1dCBzb3VyY2UgdHlwZSBhbmQgbmFtZSAqLwotCWlmIChjaGVja19pbnB1dF90ZXJtKHN0YXRlLCBmdHJbNF0sICZpdGVybSkgPCAwKQorCWlmIChjaGVja19pbnB1dF90ZXJtKHN0YXRlLCBmdHItPmJTb3VyY2VJRCwgJml0ZXJtKSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JY2hhbm5lbHMgPSAoZnRyWzBdIC0gNykgLyBjc2l6ZSAtIDE7CisJY2hhbm5lbHMgPSAoZnRyLT5iTGVuZ3RoIC0gNykgLyBjc2l6ZSAtIDE7CiAKLQltYXN0ZXJfYml0cyA9IHNuZF91c2JfY29tYmluZV9ieXRlcyhmdHIgKyA2LCBjc2l6ZSk7CisJbWFzdGVyX2JpdHMgPSBzbmRfdXNiX2NvbWJpbmVfYnl0ZXMoZnRyLT5jb250cm9scywgY3NpemUpOwogCS8qIG1hc3RlciBjb25maWd1cmF0aW9uIHF1aXJrcyAqLwogCXN3aXRjaCAoc3RhdGUtPmNoaXAtPnVzYl9pZCkgewogCWNhc2UgVVNCX0lEKDB4MDhiYiwgMHgyNzAyKToKQEAgLTEwODEsMjEgKzExMjIsMjEgQEAKIAkJYnJlYWs7CiAJfQogCWlmIChjaGFubmVscyA+IDApCi0JCWZpcnN0X2NoX2JpdHMgPSBzbmRfdXNiX2NvbWJpbmVfYnl0ZXMoZnRyICsgNiArIGNzaXplLCBjc2l6ZSk7CisJCWZpcnN0X2NoX2JpdHMgPSBzbmRfdXNiX2NvbWJpbmVfYnl0ZXMoZnRyLT5jb250cm9scyArIGNzaXplLCBjc2l6ZSk7CiAJZWxzZQogCQlmaXJzdF9jaF9iaXRzID0gMDsKIAkvKiBjaGVjayBhbGwgY29udHJvbCB0eXBlcyAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCBjaF9iaXRzID0gMDsKIAkJZm9yIChqID0gMDsgaiA8IGNoYW5uZWxzOyBqKyspIHsKLQkJCXVuc2lnbmVkIGludCBtYXNrID0gc25kX3VzYl9jb21iaW5lX2J5dGVzKGZ0ciArIDYgKyBjc2l6ZSAqIChqKzEpLCBjc2l6ZSk7CisJCQl1bnNpZ25lZCBpbnQgbWFzayA9IHNuZF91c2JfY29tYmluZV9ieXRlcyhmdHItPmNvbnRyb2xzICsgY3NpemUgKiAoaisxKSwgY3NpemUpOwogCQkJaWYgKG1hc2sgJiAoMSA8PCBpKSkKIAkJCQljaF9iaXRzIHw9ICgxIDw8IGopOwogCQl9CiAJCWlmIChjaF9iaXRzICYgMSkgLyogdGhlIGZpcnN0IGNoYW5uZWwgbXVzdCBiZSBzZXQgKGZvciBlYXNlIG9mIHByb2dyYW1taW5nKSAqLwotCQkJYnVpbGRfZmVhdHVyZV9jdGwoc3RhdGUsIGZ0ciwgY2hfYml0cywgaSwgJml0ZXJtLCB1bml0aWQpOworCQkJYnVpbGRfZmVhdHVyZV9jdGwoc3RhdGUsIF9mdHIsIGNoX2JpdHMsIGksICZpdGVybSwgdW5pdGlkKTsKIAkJaWYgKG1hc3Rlcl9iaXRzICYgKDEgPDwgaSkpCi0JCQlidWlsZF9mZWF0dXJlX2N0bChzdGF0ZSwgZnRyLCAwLCBpLCAmaXRlcm0sIHVuaXRpZCk7CisJCQlidWlsZF9mZWF0dXJlX2N0bChzdGF0ZSwgX2Z0ciwgMCwgaSwgJml0ZXJtLCB1bml0aWQpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTEyMiw4ICsxMTYzLDEwIEBACiAJdW5zaWduZWQgaW50IG51bV9vdXRzID0gZGVzY1s1ICsgaW5wdXRfcGluc107CiAJdW5zaWduZWQgaW50IGksIGxlbjsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCWNvbnN0IHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgKm1hcDsKIAotCWlmIChjaGVja19pZ25vcmVkX2N0bChzdGF0ZSwgdW5pdGlkLCAwKSkKKwltYXAgPSBmaW5kX21hcChzdGF0ZSwgdW5pdGlkLCAwKTsKKwlpZiAoY2hlY2tfaWdub3JlZF9jdGwobWFwKSkKIAkJcmV0dXJuOwogCiAJY3ZhbCA9IGt6YWxsb2Moc2l6ZW9mKCpjdmFsKSwgR0ZQX0tFUk5FTCk7CkBAIC0xMTUyLDcgKzExOTUsNyBAQAogCX0KIAlrY3RsLT5wcml2YXRlX2ZyZWUgPSB1c2JfbWl4ZXJfZWxlbV9mcmVlOwogCi0JbGVuID0gY2hlY2tfbWFwcGVkX25hbWUoc3RhdGUsIHVuaXRpZCwgMCwga2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwlsZW4gPSBjaGVja19tYXBwZWRfbmFtZShtYXAsIGtjdGwtPmlkLm5hbWUsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CiAJaWYgKCEgbGVuKQogCQlsZW4gPSBnZXRfdGVybV9uYW1lKHN0YXRlLCBpdGVybSwga2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpLCAwKTsKIAlpZiAoISBsZW4pCkBAIC0xMzMwLDcgKzEzNzMsMzIgQEAKIAl7IFVTQl9QUk9DX0RDUiwgIkRDUiIsIGRjcl9wcm9jX2luZm8gfSwKIAl7IDAgfSwKIH07Ci0KKy8qCisgKiBwcmVkZWZpbmVkIGRhdGEgZm9yIGV4dGVuc2lvbiB1bml0cworICovCitzdGF0aWMgc3RydWN0IHByb2N1bml0X3ZhbHVlX2luZm8gY2xvY2tfcmF0ZV94dV9pbmZvW10gPSB7CisgICAgICAgeyBVU0JfWFVfQ0xPQ0tfUkFURV9TRUxFQ1RPUiwgIlNlbGVjdG9yIiwgVVNCX01JWEVSX1U4LCAwIH0sCisgICAgICAgeyAwIH0KK307CitzdGF0aWMgc3RydWN0IHByb2N1bml0X3ZhbHVlX2luZm8gY2xvY2tfc291cmNlX3h1X2luZm9bXSA9IHsKKwl7IFVTQl9YVV9DTE9DS19TT1VSQ0VfU0VMRUNUT1IsICJFeHRlcm5hbCIsIFVTQl9NSVhFUl9CT09MRUFOIH0sCisJeyAwIH0KK307CitzdGF0aWMgc3RydWN0IHByb2N1bml0X3ZhbHVlX2luZm8gc3BkaWZfZm9ybWF0X3h1X2luZm9bXSA9IHsKKwl7IFVTQl9YVV9ESUdJVEFMX0ZPUk1BVF9TRUxFQ1RPUiwgIlNQRElGL0FDMyIsIFVTQl9NSVhFUl9CT09MRUFOIH0sCisJeyAwIH0KK307CitzdGF0aWMgc3RydWN0IHByb2N1bml0X3ZhbHVlX2luZm8gc29mdF9saW1pdF94dV9pbmZvW10gPSB7CisJeyBVU0JfWFVfU09GVF9MSU1JVF9TRUxFQ1RPUiwgIiAiLCBVU0JfTUlYRVJfQk9PTEVBTiB9LAorCXsgMCB9Cit9Oworc3RhdGljIHN0cnVjdCBwcm9jdW5pdF9pbmZvIGV4dHVuaXRzW10gPSB7CisJeyBVU0JfWFVfQ0xPQ0tfUkFURSwgIkNsb2NrIHJhdGUiLCBjbG9ja19yYXRlX3h1X2luZm8gfSwKKwl7IFVTQl9YVV9DTE9DS19TT1VSQ0UsICJEaWdpdGFsSW4gQ0xLIHNvdXJjZSIsIGNsb2NrX3NvdXJjZV94dV9pbmZvIH0sCisJeyBVU0JfWFVfRElHSVRBTF9JT19TVEFUVVMsICJEaWdpdGFsT3V0IGZvcm1hdDoiLCBzcGRpZl9mb3JtYXRfeHVfaW5mbyB9LAorCXsgVVNCX1hVX0RFVklDRV9PUFRJT05TLCAiQW5hbG9ndWVJbiBTb2Z0IExpbWl0Iiwgc29mdF9saW1pdF94dV9pbmZvIH0sCisJeyAwIH0KK307CiAvKgogICogYnVpbGQgYSBwcm9jZXNzaW5nL2V4dGVuc2lvbiB1bml0CiAgKi8KQEAgLTEzNDIsNiArMTQxMCw3IEBACiAJaW50IGksIGVyciwgbmFtZWlkLCB0eXBlLCBsZW47CiAJc3RydWN0IHByb2N1bml0X2luZm8gKmluZm87CiAJc3RydWN0IHByb2N1bml0X3ZhbHVlX2luZm8gKnZhbGluZm87CisJY29uc3Qgc3RydWN0IHVzYm1peF9uYW1lX21hcCAqbWFwOwogCXN0YXRpYyBzdHJ1Y3QgcHJvY3VuaXRfdmFsdWVfaW5mbyBkZWZhdWx0X3ZhbHVlX2luZm9bXSA9IHsKIAkJeyAweDAxLCAiU3dpdGNoIiwgVVNCX01JWEVSX0JPT0xFQU4gfSwKIAkJeyAwIH0KQEAgLTEzNzEsNyArMTQ0MCw4IEBACiAJCS8qIEZJWE1FOiBiaXRtYXAgbWlnaHQgYmUgbG9uZ2VyIHRoYW4gOGJpdCAqLwogCQlpZiAoISAoZHNjWzEyICsgbnVtX2luc10gJiAoMSA8PCAodmFsaW5mby0+Y29udHJvbCAtIDEpKSkpCiAJCQljb250aW51ZTsKLQkJaWYgKGNoZWNrX2lnbm9yZWRfY3RsKHN0YXRlLCB1bml0aWQsIHZhbGluZm8tPmNvbnRyb2wpKQorCQltYXAgPSBmaW5kX21hcChzdGF0ZSwgdW5pdGlkLCB2YWxpbmZvLT5jb250cm9sKTsKKwkJaWYgKGNoZWNrX2lnbm9yZWRfY3RsKG1hcCkpCiAJCQljb250aW51ZTsKIAkJY3ZhbCA9IGt6YWxsb2Moc2l6ZW9mKCpjdmFsKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghIGN2YWwpIHsKQEAgLTEzOTEsOCArMTQ2MSwxOCBAQAogCQkJY3ZhbC0+bWF4ID0gZHNjWzE1XTsKIAkJCWN2YWwtPnJlcyA9IDE7CiAJCQljdmFsLT5pbml0aWFsaXplZCA9IDE7Ci0JCX0gZWxzZQotCQkJZ2V0X21pbl9tYXgoY3ZhbCwgdmFsaW5mby0+bWluX3ZhbHVlKTsKKwkJfSBlbHNlIHsKKwkJCWlmICh0eXBlID09IFVTQl9YVV9DTE9DS19SQVRFKSB7CisJCQkJLyogRS1NdSBVU0IgMDQwNC8wMjAyL1RyYWNrZXJQcmUKKwkJCQkgKiBzYW1wbGVyYXRlIGNvbnRyb2wgcXVpcmsKKwkJCQkgKi8KKwkJCQljdmFsLT5taW4gPSAwOworCQkJCWN2YWwtPm1heCA9IDU7CisJCQkJY3ZhbC0+cmVzID0gMTsKKwkJCQljdmFsLT5pbml0aWFsaXplZCA9IDE7CisJCQl9IGVsc2UKKwkJCQlnZXRfbWluX21heChjdmFsLCB2YWxpbmZvLT5taW5fdmFsdWUpOworCQl9CiAKIAkJa2N0bCA9IHNuZF9jdGxfbmV3MSgmbWl4ZXJfcHJvY3VuaXRfY3RsLCBjdmFsKTsKIAkJaWYgKCEga2N0bCkgewpAQCAtMTQwMiw4ICsxNDgyLDkgQEAKIAkJfQogCQlrY3RsLT5wcml2YXRlX2ZyZWUgPSB1c2JfbWl4ZXJfZWxlbV9mcmVlOwogCi0JCWlmIChjaGVja19tYXBwZWRfbmFtZShzdGF0ZSwgdW5pdGlkLCBjdmFsLT5jb250cm9sLCBrY3RsLT5pZC5uYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpKQotCQkJOworCQlpZiAoY2hlY2tfbWFwcGVkX25hbWUobWFwLCBrY3RsLT5pZC5uYW1lLAorCQkJCQkJc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKSkKKwkJCS8qIG5vdGhpbmcgKi8gOwogCQllbHNlIGlmIChpbmZvLT5uYW1lKQogCQkJc3RybGNweShrY3RsLT5pZC5uYW1lLCBpbmZvLT5uYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOwogCQllbHNlIHsKQEAgLTE0MzMsNyArMTUxNCw3IEBACiAKIHN0YXRpYyBpbnQgcGFyc2VfYXVkaW9fZXh0ZW5zaW9uX3VuaXQoc3RydWN0IG1peGVyX2J1aWxkICpzdGF0ZSwgaW50IHVuaXRpZCwgdW5zaWduZWQgY2hhciAqZGVzYykKIHsKLQlyZXR1cm4gYnVpbGRfYXVkaW9fcHJvY3VuaXQoc3RhdGUsIHVuaXRpZCwgZGVzYywgTlVMTCwgIkV4dGVuc2lvbiBVbml0Iik7CisJcmV0dXJuIGJ1aWxkX2F1ZGlvX3Byb2N1bml0KHN0YXRlLCB1bml0aWQsIGRlc2MsIGV4dHVuaXRzLCAiRXh0ZW5zaW9uIFVuaXQiKTsKIH0KIAogCkBAIC0xNTQyLDYgKzE2MjMsNyBAQAogCWludCBlcnI7CiAJc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWw7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwljb25zdCBzdHJ1Y3QgdXNibWl4X25hbWVfbWFwICptYXA7CiAJY2hhciAqKm5hbWVsaXN0OwogCiAJaWYgKCEgbnVtX2lucyB8fCBkZXNjWzBdIDwgNSArIG51bV9pbnMpIHsKQEAgLTE1NTcsNyArMTYzOSw4IEBACiAJaWYgKG51bV9pbnMgPT0gMSkgLyogb25seSBvbmUgPyBub25zZW5zZSEgKi8KIAkJcmV0dXJuIDA7CiAKLQlpZiAoY2hlY2tfaWdub3JlZF9jdGwoc3RhdGUsIHVuaXRpZCwgMCkpCisJbWFwID0gZmluZF9tYXAoc3RhdGUsIHVuaXRpZCwgMCk7CisJaWYgKGNoZWNrX2lnbm9yZWRfY3RsKG1hcCkpCiAJCXJldHVybiAwOwogCiAJY3ZhbCA9IGt6YWxsb2Moc2l6ZW9mKCpjdmFsKSwgR0ZQX0tFUk5FTCk7CkBAIC0xNjEyLDcgKzE2OTUsNyBAQAogCWtjdGwtPnByaXZhdGVfZnJlZSA9IHVzYl9taXhlcl9zZWxlY3Rvcl9lbGVtX2ZyZWU7CiAKIAluYW1laWQgPSBkZXNjW2Rlc2NbMF0gLSAxXTsKLQlsZW4gPSBjaGVja19tYXBwZWRfbmFtZShzdGF0ZSwgdW5pdGlkLCAwLCBrY3RsLT5pZC5uYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOworCWxlbiA9IGNoZWNrX21hcHBlZF9uYW1lKG1hcCwga2N0bC0+aWQubmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKIAlpZiAobGVuKQogCQk7CiAJZWxzZSBpZiAobmFtZWlkKQpAQCAtMTY1NiwxNyArMTczOSwxNyBAQAogCX0KIAogCXN3aXRjaCAocDFbMl0pIHsKLQljYXNlIElOUFVUX1RFUk1JTkFMOgorCWNhc2UgVUFDX0lOUFVUX1RFUk1JTkFMOgogCQlyZXR1cm4gMDsgLyogTk9QICovCi0JY2FzZSBNSVhFUl9VTklUOgorCWNhc2UgVUFDX01JWEVSX1VOSVQ6CiAJCXJldHVybiBwYXJzZV9hdWRpb19taXhlcl91bml0KHN0YXRlLCB1bml0aWQsIHAxKTsKLQljYXNlIFNFTEVDVE9SX1VOSVQ6CisJY2FzZSBVQUNfU0VMRUNUT1JfVU5JVDoKIAkJcmV0dXJuIHBhcnNlX2F1ZGlvX3NlbGVjdG9yX3VuaXQoc3RhdGUsIHVuaXRpZCwgcDEpOwotCWNhc2UgRkVBVFVSRV9VTklUOgorCWNhc2UgVUFDX0ZFQVRVUkVfVU5JVDoKIAkJcmV0dXJuIHBhcnNlX2F1ZGlvX2ZlYXR1cmVfdW5pdChzdGF0ZSwgdW5pdGlkLCBwMSk7Ci0JY2FzZSBQUk9DRVNTSU5HX1VOSVQ6CisJY2FzZSBVQUNfUFJPQ0VTU0lOR19VTklUX1YxOgogCQlyZXR1cm4gcGFyc2VfYXVkaW9fcHJvY2Vzc2luZ191bml0KHN0YXRlLCB1bml0aWQsIHAxKTsKLQljYXNlIEVYVEVOU0lPTl9VTklUOgorCWNhc2UgVUFDX0VYVEVOU0lPTl9VTklUX1YxOgogCQlyZXR1cm4gcGFyc2VfYXVkaW9fZXh0ZW5zaW9uX3VuaXQoc3RhdGUsIHVuaXRpZCwgcDEpOwogCWRlZmF1bHQ6CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiB1bml0ICV1OiB1bmV4cGVjdGVkIHR5cGUgMHglMDJ4XG4iLCB1bml0aWQsIHAxWzJdKTsKQEAgLTE2OTYsMTEgKzE3NzksMTEgQEAKIC8qCiAgKiBjcmVhdGUgbWl4ZXIgY29udHJvbHMKICAqCi0gKiB3YWxrIHRocm91Z2ggYWxsIE9VVFBVVF9URVJNSU5BTCBkZXNjcmlwdG9ycyB0byBzZWFyY2ggZm9yIG1peGVycworICogd2FsayB0aHJvdWdoIGFsbCBVQUNfT1VUUFVUX1RFUk1JTkFMIGRlc2NyaXB0b3JzIHRvIHNlYXJjaCBmb3IgbWl4ZXJzCiAgKi8KIHN0YXRpYyBpbnQgc25kX3VzYl9taXhlcl9jb250cm9scyhzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIpCiB7Ci0JdW5zaWduZWQgY2hhciAqZGVzYzsKKwlzdHJ1Y3QgdWFjX291dHB1dF90ZXJtaW5hbF9kZXNjcmlwdG9yX3YxICpkZXNjOwogCXN0cnVjdCBtaXhlcl9idWlsZCBzdGF0ZTsKIAlpbnQgZXJyOwogCWNvbnN0IHN0cnVjdCB1c2JtaXhfY3RsX21hcCAqbWFwOwpAQCAtMTcyNCwxNCArMTgwNywxNCBAQAogCX0KIAogCWRlc2MgPSBOVUxMOwotCXdoaWxlICgoZGVzYyA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGhvc3RpZi0+ZXh0cmEsIGhvc3RpZi0+ZXh0cmFsZW4sIGRlc2MsIE9VVFBVVF9URVJNSU5BTCkpICE9IE5VTEwpIHsKLQkJaWYgKGRlc2NbMF0gPCA5KQorCXdoaWxlICgoZGVzYyA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGhvc3RpZi0+ZXh0cmEsIGhvc3RpZi0+ZXh0cmFsZW4sIGRlc2MsIFVBQ19PVVRQVVRfVEVSTUlOQUwpKSAhPSBOVUxMKSB7CisJCWlmIChkZXNjLT5iTGVuZ3RoIDwgOSkKIAkJCWNvbnRpbnVlOyAvKiBpbnZhbGlkIGRlc2NyaXB0b3I/ICovCi0JCXNldF9iaXQoZGVzY1szXSwgc3RhdGUudW5pdGJpdG1hcCk7ICAvKiBtYXJrIHRlcm1pbmFsIElEIGFzIHZpc2l0ZWQgKi8KLQkJc3RhdGUub3Rlcm0uaWQgPSBkZXNjWzNdOwotCQlzdGF0ZS5vdGVybS50eXBlID0gY29tYmluZV93b3JkKCZkZXNjWzRdKTsKLQkJc3RhdGUub3Rlcm0ubmFtZSA9IGRlc2NbOF07Ci0JCWVyciA9IHBhcnNlX2F1ZGlvX3VuaXQoJnN0YXRlLCBkZXNjWzddKTsKKwkJc2V0X2JpdChkZXNjLT5iVGVybWluYWxJRCwgc3RhdGUudW5pdGJpdG1hcCk7ICAvKiBtYXJrIHRlcm1pbmFsIElEIGFzIHZpc2l0ZWQgKi8KKwkJc3RhdGUub3Rlcm0uaWQgPSBkZXNjLT5iVGVybWluYWxJRDsKKwkJc3RhdGUub3Rlcm0udHlwZSA9IGxlMTZfdG9fY3B1KGRlc2MtPndUZXJtaW5hbFR5cGUpOworCQlzdGF0ZS5vdGVybS5uYW1lID0gZGVzYy0+aVRlcm1pbmFsOworCQllcnIgPSBwYXJzZV9hdWRpb191bml0KCZzdGF0ZSwgZGVzYy0+YlNvdXJjZUlEKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KQEAgLTE3NDgsNiArMTgzMSw0NiBAQAogCQkJICAgICAgIGluZm8tPmVsZW1faWQpOwogfQogCitzdGF0aWMgdm9pZCBzbmRfdXNiX21peGVyX2R1bXBfY3ZhbChzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIsCisJCQkJICAgIGludCB1bml0aWQsCisJCQkJICAgIHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsKQoreworCXN0YXRpYyBjaGFyICp2YWxfdHlwZXNbXSA9IHsiQk9PTEVBTiIsICJJTlZfQk9PTEVBTiIsCisJCQkJICAgICJTOCIsICJVOCIsICJTMTYiLCAiVTE2In07CisJc25kX2lwcmludGYoYnVmZmVyLCAiICBVbml0OiAlaVxuIiwgdW5pdGlkKTsKKwlpZiAoY3ZhbC0+ZWxlbV9pZCkKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiICAgIENvbnRyb2w6IG5hbWU9XCIlc1wiLCBpbmRleD0laVxuIiwKKwkJCQljdmFsLT5lbGVtX2lkLT5uYW1lLCBjdmFsLT5lbGVtX2lkLT5pbmRleCk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiICAgIEluZm86IGlkPSVpLCBjb250cm9sPSVpLCBjbWFzaz0weCV4LCAiCisJCQkgICAgImNoYW5uZWxzPSVpLCB0eXBlPVwiJXNcIlxuIiwgY3ZhbC0+aWQsCisJCQkgICAgY3ZhbC0+Y29udHJvbCwgY3ZhbC0+Y21hc2ssIGN2YWwtPmNoYW5uZWxzLAorCQkJICAgIHZhbF90eXBlc1tjdmFsLT52YWxfdHlwZV0pOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBWb2x1bWU6IG1pbj0laSwgbWF4PSVpLCBkQm1pbj0laSwgZEJtYXg9JWlcbiIsCisJCQkgICAgY3ZhbC0+bWluLCBjdmFsLT5tYXgsIGN2YWwtPmRCbWluLCBjdmFsLT5kQm1heCk7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF91c2JfbWl4ZXJfcHJvY19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCisJCQkJICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyOworCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsOworCWludCB1bml0aWQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1peGVyLCAmY2hpcC0+bWl4ZXJfbGlzdCwgbGlzdCkgeworCQlzbmRfaXByaW50ZihidWZmZXIsCisJCQkiVVNCIE1peGVyOiB1c2JfaWQ9MHglMDh4LCBjdHJsaWY9JWksIGN0bGVycj0laVxuIiwKKwkJCQljaGlwLT51c2JfaWQsIG1peGVyLT5jdHJsaWYsCisJCQkJbWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IpOworCQlzbmRfaXByaW50ZihidWZmZXIsICJDYXJkOiAlc1xuIiwgY2hpcC0+Y2FyZC0+bG9uZ25hbWUpOworCQlmb3IgKHVuaXRpZCA9IDA7IHVuaXRpZCA8IE1BWF9JRF9FTEVNUzsgdW5pdGlkKyspIHsKKwkJCWZvciAoY3ZhbCA9IG1peGVyLT5pZF9lbGVtc1t1bml0aWRdOyBjdmFsOworCQkJCQkJY3ZhbCA9IGN2YWwtPm5leHRfaWRfZWxlbSkKKwkJCQlzbmRfdXNiX21peGVyX2R1bXBfY3ZhbChidWZmZXIsIHVuaXRpZCwgY3ZhbCk7CisJCX0KKwl9Cit9CisKIHN0YXRpYyB2b2lkIHNuZF91c2JfbWl4ZXJfbWVtb3J5X2NoYW5nZShzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIsCiAJCQkJCWludCB1bml0aWQpCiB7CkBAIC0xOTI0LDcgKzIwNDcsNyBAQAogCX0KIAltaXhlci0+cmNfc2V0dXBfcGFja2V0LT5iUmVxdWVzdFR5cGUgPQogCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFOwotCW1peGVyLT5yY19zZXR1cF9wYWNrZXQtPmJSZXF1ZXN0ID0gR0VUX01FTTsKKwltaXhlci0+cmNfc2V0dXBfcGFja2V0LT5iUmVxdWVzdCA9IFVBQ19HRVRfTUVNOwogCW1peGVyLT5yY19zZXR1cF9wYWNrZXQtPndWYWx1ZSA9IGNwdV90b19sZTE2KDApOwogCW1peGVyLT5yY19zZXR1cF9wYWNrZXQtPndJbmRleCA9IGNwdV90b19sZTE2KDApOwogCW1peGVyLT5yY19zZXR1cF9wYWNrZXQtPndMZW5ndGggPSBjcHVfdG9fbGUxNihsZW4pOwpAQCAtMjA0Nyw3ICsyMTcwLDcgQEAKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiJXM6ICIsIGphY2tzW2ldLm5hbWUpOwogCQllcnIgPSBzbmRfdXNiX2N0bF9tc2cobWl4ZXItPmNoaXAtPmRldiwKIAkJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUobWl4ZXItPmNoaXAtPmRldiwgMCksCi0JCQkJICAgICAgR0VUX01FTSwgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwKKwkJCQkgICAgICBVQUNfR0VUX01FTSwgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwKIAkJCQkgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCAwLAogCQkJCSAgICAgIGphY2tzW2ldLnVuaXRpZCA8PCA4LCBidWYsIDMsIDEwMCk7CiAJCWlmIChlcnIgPT0gMyAmJiAoYnVmWzBdID09IDMgfHwgYnVmWzBdID09IDYpKQpAQCAtMjEwOSw2ICsyMjMyLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgc25kX2VtdXVzYl9zZXRfc2FtcGxlcmF0ZShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIHNhbXBsZXJhdGVfaWQpCit7CisJc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyOworCXN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsOworCWludCB1bml0aWQgPSAxMjsgLyogU2FtbGVSYXRlIEV4dGVuc2lvblVuaXQgSUQgKi8KKworCWxpc3RfZm9yX2VhY2hfZW50cnkobWl4ZXIsICZjaGlwLT5taXhlcl9saXN0LCBsaXN0KSB7CisJCWN2YWwgPSBtaXhlci0+aWRfZWxlbXNbdW5pdGlkXTsKKwkJaWYgKGN2YWwpIHsKKwkJCXNldF9jdXJfY3RsX3ZhbHVlKGN2YWwsIGN2YWwtPmNvbnRyb2wgPDwgOCwKKwkJCQkJICBzYW1wbGVyYXRlX2lkKTsKKwkJCXNuZF91c2JfbWl4ZXJfbm90aWZ5X2lkKG1peGVyLCB1bml0aWQpOworCQl9CisJCWJyZWFrOworCX0KK30KKwogaW50IHNuZF91c2JfY3JlYXRlX21peGVyKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLCBpbnQgY3RybGlmLAogCQkJIGludCBpZ25vcmVfZXJyb3IpCiB7CkBAIC0yMTE2LDcgKzIyNTcsOSBAQAogCQkuZGV2X2ZyZWUgPSBzbmRfdXNiX21peGVyX2Rldl9mcmVlCiAJfTsKIAlzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXI7Ci0JaW50IGVycjsKKwlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmhvc3RfaWZhY2U7CisJaW50IGVyciwgcHJvdG9jb2w7CiAKIAlzdHJjcHkoY2hpcC0+Y2FyZC0+bWl4ZXJuYW1lLCAiVVNCIE1peGVyIik7CiAKQEAgLTIxMjYsMTIgKzIyNjksMjMgQEAKIAltaXhlci0+Y2hpcCA9IGNoaXA7CiAJbWl4ZXItPmN0cmxpZiA9IGN0cmxpZjsKIAltaXhlci0+aWdub3JlX2N0bF9lcnJvciA9IGlnbm9yZV9lcnJvcjsKLQltaXhlci0+aWRfZWxlbXMgPSBrY2FsbG9jKDI1Niwgc2l6ZW9mKCptaXhlci0+aWRfZWxlbXMpLCBHRlBfS0VSTkVMKTsKKwltaXhlci0+aWRfZWxlbXMgPSBrY2FsbG9jKE1BWF9JRF9FTEVNUywgc2l6ZW9mKCptaXhlci0+aWRfZWxlbXMpLAorCQkJCSAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtaXhlci0+aWRfZWxlbXMpIHsKIAkJa2ZyZWUobWl4ZXIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlob3N0X2lmYWNlID0gJnVzYl9pZm51bV90b19pZihjaGlwLT5kZXYsIGN0cmxpZiktPmFsdHNldHRpbmdbMF07CisJcHJvdG9jb2wgPSBob3N0X2lmYWNlLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbDsKKworCS8qIEZJWE1FISAqLworCWlmIChwcm90b2NvbCAhPSBVQUNfVkVSU0lPTl8xKSB7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJtaXhlciBpbnRlcmZhY2UgcHJvdG9jb2wgMHglMDJ4IG5vdCB5ZXQgc3VwcG9ydGVkXG4iLAorCQkJCQlwcm90b2NvbCk7CisJCXJldHVybiAwOworCX0KKwogCWlmICgoZXJyID0gc25kX3VzYl9taXhlcl9jb250cm9scyhtaXhlcikpIDwgMCB8fAogCSAgICAoZXJyID0gc25kX3VzYl9taXhlcl9zdGF0dXNfY3JlYXRlKG1peGVyKSkgPCAwKQogCQlnb3RvIF9lcnJvcjsKQEAgLTIxNDIsOCArMjI5Niw2IEBACiAJaWYgKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDIwKSB8fAogCSAgICBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkgfHwKIAkgICAgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDgpKSB7Ci0JCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnk7Ci0KIAkJaWYgKChlcnIgPSBzbmRfYXVkaWd5Mm54X2NvbnRyb2xzX2NyZWF0ZShtaXhlcikpIDwgMCkKIAkJCWdvdG8gX2Vycm9yOwogCQlpZiAoIXNuZF9jYXJkX3Byb2NfbmV3KGNoaXAtPmNhcmQsICJhdWRpZ3kybngiLCAmZW50cnkpKQpAQCAtMjE2MSw2ICsyMzEzLDExIEBACiAJZXJyID0gc25kX2RldmljZV9uZXcoY2hpcC0+Y2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBtaXhlciwgJmRldl9vcHMpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIF9lcnJvcjsKKworCWlmIChsaXN0X2VtcHR5KCZjaGlwLT5taXhlcl9saXN0KSAmJgorCSAgICAhc25kX2NhcmRfcHJvY19uZXcoY2hpcC0+Y2FyZCwgInVzYm1peGVyIiwgJmVudHJ5KSkKKwkJc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjaGlwLCBzbmRfdXNiX21peGVyX3Byb2NfcmVhZCk7CisKIAlsaXN0X2FkZCgmbWl4ZXItPmxpc3QsICZjaGlwLT5taXhlcl9saXN0KTsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYm1peGVyX21hcHMuYyBiL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMKaW5kZXggNzdjMzU4OC4uNzllOTAzYSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYm1peGVyX21hcHMuYworKysgYi9zb3VuZC91c2IvdXNibWl4ZXJfbWFwcy5jCkBAIC0xOSwxMSArMTksMTYgQEAKICAqCiAgKi8KIAorc3RydWN0IHVzYm1peF9kQl9tYXAgeworCXUzMiBtaW47CisJdTMyIG1heDsKK307CiAKIHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgewogCWludCBpZDsKIAljb25zdCBjaGFyICpuYW1lOwogCWludCBjb250cm9sOworCXN0cnVjdCB1c2JtaXhfZEJfbWFwICpkQjsKIH07CiAKIHN0cnVjdCB1c2JtaXhfc2VsZWN0b3JfbWFwIHsKQEAgLTcyLDcgKzc3LDcgQEAKIAl7IDgsICJMaW5lIFBsYXliYWNrIiB9LCAvKiBGVSAqLwogCS8qIDk6IElUIG1pYyAqLwogCXsgMTAsICJNaWMgUGxheWJhY2siIH0sIC8qIEZVICovCi0JeyAxMSwgIkNhcHR1cmUgSW5wdXQgU291cmNlIiB9LCAvKiBTVSAqLworCXsgMTEsICJDYXB0dXJlIFNvdXJjZSIgfSwgLyogU1UgKi8KIAl7IDEyLCAiQ2FwdHVyZSIgfSwgLyogRlUgKi8KIAkvKiAxMzogT1QgcGNtIGNhcHR1cmUgKi8KIAkvKiAxNDogTVUgKHcvbyBjb250cm9scykgKi8KQEAgLTEwMiw2ICsxMDcsOSBAQAogICogZS5nLiBubyBNYXN0ZXIgYW5kIGZha2UgUENNIHZvbHVtZQogICoJCQlQYXZlbCBNaWhheWxvdiA8YmluQGJhc2guaW5mbz4KICAqLworc3RhdGljIHN0cnVjdCB1c2JtaXhfZEJfbWFwIG1wM3BsdXNfZEJfMSA9IHstNDc4MSwgMH07CS8qIGp1c3QgZ3Vlc3MgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNibWl4X2RCX21hcCBtcDNwbHVzX2RCXzIgPSB7LTE3ODEsIDYxOH07IC8qIGp1c3QgZ3Vlc3MgKi8KKwogc3RhdGljIHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgbXAzcGx1c19tYXBbXSA9IHsKIAkvKiAxOiBJVCBwY20gKi8KIAkvKiAyOiBJVCBtaWMgKi8KQEAgLTExMCwxNiArMTE4LDE5IEBACiAJLyogNTogT1QgZGlnaXRhbCBvdXQgKi8KIAkvKiA2OiBPVCBzcGVha2VyICovCiAJLyogNzogT1QgcGNtIGNhcHR1cmUgKi8KLQl7IDgsICJDYXB0dXJlIElucHV0IFNvdXJjZSIgfSwgLyogRlUsIGRlZmF1bHQgUENNIENhcHR1cmUgU291cmNlICovCisJeyA4LCAiQ2FwdHVyZSBTb3VyY2UiIH0sIC8qIEZVLCBkZWZhdWx0IFBDTSBDYXB0dXJlIFNvdXJjZSAqLwogCQkvKiAoTWljLCBJbnB1dCAxID0gTGluZSBpbnB1dCwgSW5wdXQgMiA9IE9wdGljYWwgaW5wdXQpICovCiAJeyA5LCAiTWFzdGVyIFBsYXliYWNrIiB9LCAvKiBGVSwgZGVmYXVsdCBTcGVha2VyIDEgKi8KIAkvKiB7IDEwLCAiTWljIENhcHR1cmUiLCAxIH0sICovIC8qIEZVLCBNaWMgQ2FwdHVyZSAqLwotCS8qIHsgMTAsICJNaWMgQ2FwdHVyZSIsIDIgfSwgKi8gLyogRlUsIE1pYyBDYXB0dXJlICovCisJeyAxMCwgLyogIk1pYyBDYXB0dXJlIiwgKi8gTlVMTCwgMiwgLmRCID0gJm1wM3BsdXNfZEJfMiB9LAorCQkvKiBGVSwgTWljIENhcHR1cmUgKi8KIAl7IDEwLCAiTWljIEJvb3N0IiwgNyB9LCAvKiBGVSwgZGVmYXVsdCBBdXRvIEdhaW4gSW5wdXQgKi8KLQl7IDExLCAiTGluZSBDYXB0dXJlIiB9LCAvKiBGVSwgZGVmYXVsdCBQQ00gQ2FwdHVyZSAqLworCXsgMTEsICJMaW5lIENhcHR1cmUiLCAuZEIgPSAmbXAzcGx1c19kQl8yIH0sCisJCS8qIEZVLCBkZWZhdWx0IFBDTSBDYXB0dXJlICovCiAJeyAxMiwgIkRpZ2l0YWwgSW4gUGxheWJhY2siIH0sIC8qIEZVLCBkZWZhdWx0IFBDTSAxICovCi0JLyogeyAxMywgIk1pYyBQbGF5YmFjayIgfSwgKi8gLyogRlUsIGRlZmF1bHQgTWljIFBsYXliYWNrICovCi0JeyAxNCwgIkxpbmUgUGxheWJhY2siIH0sIC8qIEZVLCBkZWZhdWx0IFNwZWFrZXIgKi8KKwl7IDEzLCAvKiAiTWljIFBsYXliYWNrIiwgKi8gLmRCID0gJm1wM3BsdXNfZEJfMSB9LAorCQkvKiBGVSwgZGVmYXVsdCBNaWMgUGxheWJhY2sgKi8KKwl7IDE0LCAiTGluZSBQbGF5YmFjayIsIC5kQiA9ICZtcDNwbHVzX2RCXzEgfSwgLyogRlUsIGRlZmF1bHQgU3BlYWtlciAqLwogCS8qIDE1OiBNVSAqLwogCXsgMCB9IC8qIHRlcm1pbmF0b3IgKi8KIH07CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNicXVpcmtzLmggYi9zb3VuZC91c2IvdXNicXVpcmtzLmgKaW5kZXggYTg5MmJkYS4uZjA2ZmFmNyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYnF1aXJrcy5oCisrKyBiL3NvdW5kL3VzYi91c2JxdWlya3MuaApAQCAtOTEsNyArOTEsNyBAQAogCS5pZFZlbmRvciA9IDB4MDQ2ZCwKIAkuaWRQcm9kdWN0ID0gMHgwODUwLAogCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCi0JLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT19DT05UUk9MCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wKIH0sCiB7CiAJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfApAQCAtMTAwLDcgKzEwMCw3IEBACiAJLmlkVmVuZG9yID0gMHgwNDZkLAogCS5pZFByb2R1Y3QgPSAweDA4YWUsCiAJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKLQkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPX0NPTlRST0wKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTAogfSwKIHsKIAkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CkBAIC0xMDksNyArMTA5LDcgQEAKIAkuaWRWZW5kb3IgPSAweDA0NmQsCiAJLmlkUHJvZHVjdCA9IDB4MDhjNiwKIAkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAotCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9fQ09OVFJPTAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MCiB9LAogewogCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKQEAgLTExOCw3ICsxMTgsNyBAQAogCS5pZFZlbmRvciA9IDB4MDQ2ZCwKIAkuaWRQcm9kdWN0ID0gMHgwOGYwLAogCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCi0JLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT19DT05UUk9MCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wKIH0sCiB7CiAJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfApAQCAtMTI3LDcgKzEyNyw3IEBACiAJLmlkVmVuZG9yID0gMHgwNDZkLAogCS5pZFByb2R1Y3QgPSAweDA4ZjUsCiAJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKLQkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPX0NPTlRST0wKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTAogfSwKIHsKIAkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CkBAIC0xMzYsNyArMTM2LDcgQEAKIAkuaWRWZW5kb3IgPSAweDA0NmQsCiAJLmlkUHJvZHVjdCA9IDB4MDhmNiwKIAkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAotCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9fQ09OVFJPTAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MCiB9LAogewogCVVTQl9ERVZJQ0UoMHgwNDZkLCAweDA5OTApLApAQCAtMzAxLDcgKzMwMSw3IEBACiAJCQkJCS5pZmFjZSA9IDEsCiAJCQkJCS5hbHRzZXR0aW5nID0gMSwKIAkJCQkJLmFsdHNldF9pZHggPSAxLAotCQkJCQkuYXR0cmlidXRlcyA9IEVQX0NTX0FUVFJfRklMTF9NQVgsCisJCQkJCS5hdHRyaWJ1dGVzID0gVUFDX0VQX0NTX0FUVFJfRklMTF9NQVgsCiAJCQkJCS5lbmRwb2ludCA9IDB4ODEsCiAJCQkJCS5lcF9hdHRyID0gMHgwNSwKIAkJCQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUywKQEAgLTEyNjYsMzcgKzEyNjYsNiBAQAogCQl9CiAJfQogfSwKLS8qIFJvbGFuZCBVQS0xMDEgaW4gSGlnaC1TcGVlZCBNb2RlIG9ubHkgKi8KLXsKLQlVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDdkKSwKLQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJiAoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKLQkJLnZlbmRvcl9uYW1lID0gIlJvbGFuZCIsCi0JCS5wcm9kdWN0X25hbWUgPSAiVUEtMTAxIiwKLQkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKLQkJLnR5cGUgPSBRVUlSS19DT01QT1NJVEUsCi0JCS5kYXRhID0gKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrW10pIHsKLQkJCXsKLQkJCQkuaWZudW0gPSAwLAotCQkJCS50eXBlID0gUVVJUktfQVVESU9fRURJUk9MX1VBMTAxCi0JCQl9LAotCQkJewotCQkJCS5pZm51bSA9IDEsCi0JCQkJLnR5cGUgPSBRVUlSS19BVURJT19FRElST0xfVUExMDEKLQkJCX0sCi0JCQl7Ci0JCQkJLmlmbnVtID0gMiwKLQkJCQkudHlwZSA9IFFVSVJLX01JRElfRklYRURfRU5EUE9JTlQsCi0JCQkJLmRhdGEgPSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9taWRpX2VuZHBvaW50X2luZm8pIHsKLQkJCQkJLm91dF9jYWJsZXMgPSAweDAwMDEsCi0JCQkJCS5pbl9jYWJsZXMgID0gMHgwMDAxCi0JCQkJfQotCQkJfSwKLQkJCXsKLQkJCQkuaWZudW0gPSAtMQotCQkJfQotCQl9Ci0JfQotfSwKIHsKIAkvKiBoYXMgSUQgMHgwMDgxIHdoZW4gbm90IGluICJBZHZhbmNlZCBEcml2ZXIiIG1vZGUgKi8KIAlVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDgwKSwKQEAgLTIwNzMsNiArMjA0MiwzMyBAQAogCX0KIH0sCiAKKy8qIEFjY2VzcyBNdXNpYyBkZXZpY2VzICovCit7CisJLyogVmlydXNUSSBEZXNrdG9wICovCisJVVNCX0RFVklDRV9WRU5ET1JfU1BFQygweDEzM2UsIDB4MDgxNSksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKKwkJLnR5cGUgPSBRVUlSS19DT01QT1NJVEUsCisJCS5kYXRhID0gJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlya1tdKSB7CisJCQl7CisJCQkJLmlmbnVtID0gMywKKwkJCQkudHlwZSA9IFFVSVJLX01JRElfRklYRURfRU5EUE9JTlQsCisJCQkJLmRhdGEgPSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX21pZGlfZW5kcG9pbnRfaW5mbykgeworCQkJCQkub3V0X2NhYmxlcyA9IDB4MDAwMywKKwkJCQkJLmluX2NhYmxlcyAgPSAweDAwMDMKKwkJCQl9CisJCQl9LAorCQkJeworCQkJCS5pZm51bSA9IDQsCisJCQkJLnR5cGUgPSBRVUlSS19JR05PUkVfSU5URVJGQUNFCisJCQl9LAorCQkJeworCQkJCS5pZm51bSA9IC0xCisJCQl9CisJCX0KKwl9Cit9LAorCiAvKiAqLwogewogCS8qIGFrYS4gU2VyYXRvIFNjcmF0Y2ggTGl2ZSBESiBCb3ggKi8KQEAgLTIxMDUsNiArMjEwMSwxNjUgQEAKIAl9CiB9LAogCisvKiBIYXVwcGF1Z2UgSFZSLTk1MFEgYW5kIEhWUi04NTAgKi8KK3sKKwlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MjA0MCwgMHg3MjAwKSwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKKwkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJIYXVwcGF1Z2UiLAorCQkucHJvZHVjdF9uYW1lID0gIkhWUi05NTBRIiwKKwkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKKwkJLnR5cGUgPSBRVUlSS19BVURJT19BTElHTl9UUkFOU0ZFUiwKKwl9Cit9LAoreworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgyMDQwLCAweDcyMDEpLAorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIkhhdXBwYXVnZSIsCisJCS5wcm9kdWN0X25hbWUgPSAiSFZSLTk1MFEiLAorCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAorCQkudHlwZSA9IFFVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSLAorCX0KK30sCit7CisJVVNCX0RFVklDRV9WRU5ET1JfU1BFQygweDIwNDAsIDB4NzIwMiksCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsCisJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTCwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiSGF1cHBhdWdlIiwKKwkJLnByb2R1Y3RfbmFtZSA9ICJIVlItOTUwUSIsCisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVIsCisJfQorfSwKK3sKKwlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MjA0MCwgMHg3MjAzKSwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKKwkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJIYXVwcGF1Z2UiLAorCQkucHJvZHVjdF9uYW1lID0gIkhWUi05NTBRIiwKKwkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKKwkJLnR5cGUgPSBRVUlSS19BVURJT19BTElHTl9UUkFOU0ZFUiwKKwl9Cit9LAoreworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgyMDQwLCAweDcyMDQpLAorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIkhhdXBwYXVnZSIsCisJCS5wcm9kdWN0X25hbWUgPSAiSFZSLTk1MFEiLAorCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAorCQkudHlwZSA9IFFVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSLAorCX0KK30sCit7CisJVVNCX0RFVklDRV9WRU5ET1JfU1BFQygweDIwNDAsIDB4NzIwNSksCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsCisJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTCwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiSGF1cHBhdWdlIiwKKwkJLnByb2R1Y3RfbmFtZSA9ICJIVlItOTUwUSIsCisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVIsCisJfQorfSwKK3sKKwlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MjA0MCwgMHg3MjUwKSwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKKwkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJIYXVwcGF1Z2UiLAorCQkucHJvZHVjdF9uYW1lID0gIkhWUi05NTBRIiwKKwkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKKwkJLnR5cGUgPSBRVUlSS19BVURJT19BTElHTl9UUkFOU0ZFUiwKKwl9Cit9LAoreworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgyMDQwLCAweDcyMzApLAorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIkhhdXBwYXVnZSIsCisJCS5wcm9kdWN0X25hbWUgPSAiSFZSLTg1MCIsCisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVIsCisJfQorfSwKKworLyogRGlnaWRlc2lnbiBNYm94ICovCit7CisJLyogVGhhbmtzIHRvIENsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPiAqLworCVVTQl9ERVZJQ0UoMHgwZGJhLCAweDEwMDApLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJEaWdpZGVzaWduIiwKKwkJLnByb2R1Y3RfbmFtZSA9ICJNQm94IiwKKwkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKKwkJLnR5cGUgPSBRVUlSS19DT01QT1NJVEUsCisJCS5kYXRhID0gKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrW10peworCQkJeworCQkJCS5pZm51bSA9IDAsCisJCQkJLnR5cGUgPSBRVUlSS19JR05PUkVfSU5URVJGQUNFLAorCQkJfSwKKwkJCXsKKwkJCQkuaWZudW0gPSAxLAorCQkJCS50eXBlID0gUVVJUktfQVVESU9fRklYRURfRU5EUE9JTlQsCisJCQkJLmRhdGEgPSAmKGNvbnN0IHN0cnVjdCBhdWRpb2Zvcm1hdCkgeworCQkJCQkuZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TMjRfM0JFLAorCQkJCQkuY2hhbm5lbHMgPSAyLAorCQkJCQkuaWZhY2UgPSAxLAorCQkJCQkuYWx0c2V0dGluZyA9IDEsCisJCQkJCS5hbHRzZXRfaWR4ID0gMSwKKwkJCQkJLmF0dHJpYnV0ZXMgPSBVQUNfRVBfQ1NfQVRUUl9TQU1QTEVfUkFURSwKKwkJCQkJLmVuZHBvaW50ID0gMHgwMiwKKwkJCQkJLmVwX2F0dHIgPSAweDAxLAorCQkJCQkubWF4cGFja3NpemUgPSAweDEzMCwKKwkJCQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDQxMDAgfAorCQkJCQkJIFNORFJWX1BDTV9SQVRFXzQ4MDAwLAorCQkJCQkucmF0ZV9taW4gPSA0NDEwMCwKKwkJCQkJLnJhdGVfbWF4ID0gNDgwMDAsCisJCQkJCS5ucl9yYXRlcyA9IDIsCisJCQkJCS5yYXRlX3RhYmxlID0gKHVuc2lnbmVkIGludFtdKSB7CisJCQkJCQk0NDEwMCwgNDgwMDAKKwkJCQkJfQorCQkJCX0KKwkJCX0sCisJCQl7CisJCQkJLmlmbnVtID0gLTEKKwkJCX0KKwkJfQorCisJfQorfSwKKwogewogCS8qCiAJICogU29tZSBVU0IgTUlESSBkZXZpY2VzIGRvbid0IGhhdmUgYW4gYXVkaW8gY29udHJvbCBpbnRlcmZhY2UsCkBAIC0yMTEzLDcgKzIyNjgsNyBAQAogCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKIAkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAogCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCi0JLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19NSURJX1NUUkVBTUlORywKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX01JRElTVFJFQU1JTkcsCiAJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYgKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CiAJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCiAJCS50eXBlID0gUVVJUktfTUlESV9TVEFOREFSRF9JTlRFUkZBQ0UKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYyBiL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYwppbmRleCA5MWJiMjk2Li40NGRlYjIxIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCkBAIC0xNiw2ICsxNiw4IEBACiAgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2F1ZGlvLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2h3ZGVwLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CkBAIC0zMTUsOSArMzE3LDkgQEAKIAlkYXRhWzBdID0gcmF0ZTsKIAlkYXRhWzFdID0gcmF0ZSA+PiA4OwogCWRhdGFbMl0gPSByYXRlID4+IDE2OwotCWVyciA9IHVzMTIybF9jdGxfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsCisJZXJyID0gdXMxMjJsX2N0bF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgVUFDX1NFVF9DVVIsCiAJCQkgICAgIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX09VVCwKLQkJCSAgICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKTsKKwkJCSAgICAgVUFDX0VQX0NTX0FUVFJfU0FNUExFX1JBVEUgPDwgOCwgZXAsIGRhdGEsIDMsIDEwMDApOwogCWlmIChlcnIgPCAwKQogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDogY2Fubm90IHNldCBmcmVxICVkIHRvIGVwIDB4JXhcbiIsCiAJCQkgICBkZXYtPmRldm51bSwgcmF0ZSwgZXApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi8uZ2l0aWdub3JlIGIvdG9vbHMvcGVyZi8uZ2l0aWdub3JlCmluZGV4IDEyNDc2MGIuLmUxZDYwZDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZQorKysgYi90b29scy9wZXJmLy5naXRpZ25vcmUKQEAgLTE0LDYgKzE0LDcgQEAKIGNvbW1vbi1jbWRzLmgKIHBlcmYuZGF0YQogcGVyZi5kYXRhLm9sZAorcGVyZi1hcmNoaXZlCiB0YWdzCiBUQUdTCiBjc2NvcGUqCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1hcmNoaXZlLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWFyY2hpdmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZTE3NGQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1hcmNoaXZlLnR4dApAQCAtMCwwICsxLDIyIEBACitwZXJmLWFyY2hpdmUoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitwZXJmLWFyY2hpdmUgLSBDcmVhdGUgYXJjaGl2ZSB3aXRoIG9iamVjdCBmaWxlcyB3aXRoIGJ1aWxkLWlkcyBmb3VuZCBpbiBwZXJmLmRhdGEgZmlsZQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydwZXJmIGFyY2hpdmUnIFtmaWxlXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgY29tbWFuZCBydW5zIHJ1bnMgcGVyZi1idWlsZGlkLWxpc3QgLS13aXRoLWhpdHMsIGFuZCBjb2xsZWN0cyB0aGUgZmlsZXMKK3dpdGggdGhlIGJ1aWxkaWRzIGZvdW5kIHNvIHRoYXQgYW5hbGlzeXMgb2YgcGVyZi5kYXRhIGNvbnRlbnRzIGNhbiBiZSBwb3NzaWJsZQorb24gYW5vdGhlciBtYWNoaW5lLgorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua3BlcmY6cGVyZi1yZWNvcmRbMV0sIGxpbmtwZXJmOnBlcmYtYnVpbGRpZC1saXN0WzFdLCBsaW5rcGVyZjpwZXJmLXJlcG9ydFsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYnVpbGRpZC1jYWNoZS50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1idWlsZGlkLWNhY2hlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGJjM2I1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYnVpbGRpZC1jYWNoZS50eHQKQEAgLTAsMCArMSwzMyBAQAorcGVyZi1idWlsZGlkLWNhY2hlKDEpCis9PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorcGVyZi1idWlsZGlkLWNhY2hlIC0gTWFuYWdlIGJ1aWxkLWlkIGNhY2hlLgorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydwZXJmIGJ1aWxkaWQtbGlzdCA8b3B0aW9ucz4nCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBjb21tYW5kIG1hbmFnZXMgdGhlIGJ1aWxkLWlkIGNhY2hlLiBJdCBjYW4gYWRkIGFuZCByZW1vdmUgZmlsZXMgdG8gdGhlCitjYWNoZS4gSW4gdGhlIGZ1dHVyZSBpdCBzaG91bGQgYXMgd2VsbCBwdXJnZSBvbGRlciBlbnRyaWVzLCBzZXQgdXBwZXIgbGltaXRzCitmb3IgdGhlIHNwYWNlIHVzZWQgYnkgdGhlIGNhY2hlLCBldGMuCisKK09QVElPTlMKKy0tLS0tLS0KKy1hOjoKKy0tYWRkPTo6CisgICAgICAgIEFkZCBzcGVjaWZpZWQgZmlsZSB0byB0aGUgY2FjaGUuCistcjo6CistLXJlbW92ZT06OgorICAgICAgICBSZW1vdmUgc3BlY2lmaWVkIGZpbGUgdG8gdGhlIGNhY2hlLgorLXY6OgorLS12ZXJib3NlOjoKKwlCZSBtb3JlIHZlcmJvc2UuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua3BlcmY6cGVyZi1yZWNvcmRbMV0sIGxpbmtwZXJmOnBlcmYtcmVwb3J0WzFdCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1wcm9iZS50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1wcm9iZS50eHQKaW5kZXggMjUwZTM5MS4uMmRlMzQwNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcHJvYmUudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXByb2JlLnR4dApAQCAtMTUsNiArMTUsOCBAQAogJ3BlcmYgcHJvYmUnIFtvcHRpb25zXSAtLWRlbD0nW0dST1VQOl1FVkVOVCcgWy4uLl0KIG9yCiAncGVyZiBwcm9iZScgLS1saXN0CitvcgorJ3BlcmYgcHJvYmUnIC0tbGluZT0nRlVOQ1s6UkxOWytOVU18OlJMTjJdXXxTUkM6QUxOWytOVU18OkFMTjJdJwogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTQ1LDYgKzQ3LDExIEBACiAtLWxpc3Q6OgogCUxpc3QgdXAgY3VycmVudCBwcm9iZSBldmVudHMuCiAKKy1MOjoKKy0tbGluZT06OgorCVNob3cgc291cmNlIGNvZGUgbGluZXMgd2hpY2ggY2FuIGJlIHByb2JlZC4gVGhpcyBuZWVkcyBhbiBhcmd1bWVudAorCXdoaWNoIHNwZWNpZmllcyBhIHJhbmdlIG9mIHRoZSBzb3VyY2UgY29kZS4KKwogUFJPQkUgU1lOVEFYCiAtLS0tLS0tLS0tLS0KIFByb2JlIHBvaW50cyBhcmUgZGVmaW5lZCBieSBmb2xsb3dpbmcgc3ludGF4LgpAQCAtNTYsNiArNjMsMTkgQEAKIEl0IGlzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeSBhIHByb2JlIHBvaW50IGJ5IHRoZSBzb3VyY2UgbGluZSBudW1iZXIgYnkgdXNpbmcgJ1NSQzpBTE4nIHN5bnRheCwgd2hlcmUgJ1NSQycgaXMgdGhlIHNvdXJjZSBmaWxlIHBhdGggYW5kICdBTE4nIGlzIHRoZSBsaW5lIG51bWJlci4KICdBUkcnIHNwZWNpZmllcyB0aGUgYXJndW1lbnRzIG9mIHRoaXMgcHJvYmUgcG9pbnQuIFlvdSBjYW4gdXNlIHRoZSBuYW1lIG9mIGxvY2FsIHZhcmlhYmxlLCBvciBrcHJvYmUtdHJhY2VyIGFyZ3VtZW50IGZvcm1hdCAoZS5nLiAkcmV0dmFsLCAlYXgsIGV0YykuCiAKK0xJTkUgU1lOVEFYCistLS0tLS0tLS0tLQorTGluZSByYW5nZSBpcyBkZXNjcmlwdGVkIGJ5IGZvbGxvd2luZyBzeW50YXguCisKKyAiRlVOQ1s6UkxOWytOVU18OlJMTjJdXXxTUkM6QUxOWytOVU18OkFMTjJdIgorCitGVU5DIHNwZWNpZmllcyB0aGUgZnVuY3Rpb24gbmFtZSBvZiBzaG93aW5nIGxpbmVzLiAnUkxOJyBpcyB0aGUgc3RhcnQgbGluZQorbnVtYmVyIGZyb20gZnVuY3Rpb24gZW50cnkgbGluZSwgYW5kICdSTE4yJyBpcyB0aGUgZW5kIGxpbmUgbnVtYmVyLiBBcyBzYW1lIGFzCitwcm9iZSBzeW50YXgsICdTUkMnIG1lYW5zIHRoZSBzb3VyY2UgZmlsZSBwYXRoLCAnQUxOJyBpcyBzdGFydCBsaW5lIG51bWJlciwKK2FuZCAnQUxOMicgaXMgZW5kIGxpbmUgbnVtYmVyIGluIHRoZSBmaWxlLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgaG93CittYW55IGxpbmVzIHRvIHNob3cgYnkgdXNpbmcgJ05VTScuCitTbywgInNvdXJjZS5jOjEwMC0xMjAiIHNob3dzIGxpbmVzIGJldHdlZW4gMTAwdGggdG8gbDIwdGggaW4gc291cmNlLmMgZmlsZS4gQW5kICJmdW5jOjEwKzIwIiBzaG93cyAyMCBsaW5lcyBmcm9tIDEwdGggbGluZSBvZiBmdW5jIGZ1bmN0aW9uLgorCiBTRUUgQUxTTwogLS0tLS0tLS0KIGxpbmtwZXJmOnBlcmYtdHJhY2VbMV0sIGxpbmtwZXJmOnBlcmYtcmVjb3JkWzFdCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10b3AudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdG9wLnR4dAppbmRleCA0YTdkNTU4Li43ODViOWZjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10b3AudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRvcC50eHQKQEAgLTc0LDcgKzc0LDcgQEAKIAogLXMgPHN5bWJvbD46OgogLS1zeW0tYW5ub3RhdGU9PHN5bWJvbD46OgotICAgICAgICBBbm5vdGF0ZSB0aGlzIHN5bWJvbC4gIFJlcXVpcmVzIC1rIG9wdGlvbi4KKyAgICAgICAgQW5ub3RhdGUgdGhpcyBzeW1ib2wuCiAKIC12OjoKIC0tdmVyYm9zZTo6CmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS1wZXJsLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLXBlcmwudHh0CmluZGV4IGM1ZjU1ZjQuLmQ3MjljZWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLXBlcmwudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLXBlcmwudHh0CkBAIC04LDcgKzgsNyBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0ncGVyZiB0cmFjZScgWy1zIFtsYW5nXTpzY3JpcHRbLmV4dF0gXQorJ3BlcmYgdHJhY2UnIFstcyBbUGVybF06c2NyaXB0Wy5wbF0gXQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLXB5dGhvbi50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS1weXRob24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNDFhY2EKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS1weXRob24udHh0CkBAIC0wLDAgKzEsNjI1IEBACitwZXJmLXRyYWNlLXB5dGhvbigxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK3BlcmYtdHJhY2UtcHl0aG9uIC0gUHJvY2VzcyB0cmFjZSBkYXRhIHdpdGggYSBQeXRob24gc2NyaXB0CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ3BlcmYgdHJhY2UnIFstcyBbUHl0aG9uXTpzY3JpcHRbLnB5XSBdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIHBlcmYgdHJhY2Ugb3B0aW9uIGlzIHVzZWQgdG8gcHJvY2VzcyBwZXJmIHRyYWNlIGRhdGEgdXNpbmcgcGVyZidzCitidWlsdC1pbiBQeXRob24gaW50ZXJwcmV0ZXIuICBJdCByZWFkcyBhbmQgcHJvY2Vzc2VzIHRoZSBpbnB1dCBmaWxlIGFuZAorZGlzcGxheXMgdGhlIHJlc3VsdHMgb2YgdGhlIHRyYWNlIGFuYWx5c2lzIGltcGxlbWVudGVkIGluIHRoZSBnaXZlbgorUHl0aG9uIHNjcmlwdCwgaWYgYW55LgorCitBIFFVSUNLIEVYQU1QTEUKKy0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNlY3Rpb24gc2hvd3MgdGhlIHByb2Nlc3MsIHN0YXJ0IHRvIGZpbmlzaCwgb2YgY3JlYXRpbmcgYSB3b3JraW5nCitQeXRob24gc2NyaXB0IHRoYXQgYWdncmVnYXRlcyBhbmQgZXh0cmFjdHMgdXNlZnVsIGluZm9ybWF0aW9uIGZyb20gYQorcmF3IHBlcmYgdHJhY2Ugc3RyZWFtLiAgWW91IGNhbiBhdm9pZCByZWFkaW5nIHRoZSByZXN0IG9mIHRoaXMKK2RvY3VtZW50IGlmIGFuIGV4YW1wbGUgaXMgZW5vdWdoIGZvciB5b3U7IHRoZSByZXN0IG9mIHRoZSBkb2N1bWVudAorcHJvdmlkZXMgbW9yZSBkZXRhaWxzIG9uIGVhY2ggc3RlcCBhbmQgbGlzdHMgdGhlIGxpYnJhcnkgZnVuY3Rpb25zCithdmFpbGFibGUgdG8gc2NyaXB0IHdyaXRlcnMuCisKK1RoaXMgZXhhbXBsZSBhY3R1YWxseSBkZXRhaWxzIHRoZSBzdGVwcyB0aGF0IHdlcmUgdXNlZCB0byBjcmVhdGUgdGhlCisnc3lzY2FsbC1jb3VudHMnIHNjcmlwdCB5b3Ugc2VlIHdoZW4geW91IGxpc3QgdGhlIGF2YWlsYWJsZSBwZXJmIHRyYWNlCitzY3JpcHRzIHZpYSAncGVyZiB0cmFjZSAtbCcuICBBcyBzdWNoLCB0aGlzIHNjcmlwdCBhbHNvIHNob3dzIGhvdyB0bworaW50ZWdyYXRlIHlvdXIgc2NyaXB0IGludG8gdGhlIGxpc3Qgb2YgZ2VuZXJhbC1wdXJwb3NlICdwZXJmIHRyYWNlJworc2NyaXB0cyBsaXN0ZWQgYnkgdGhhdCBjb21tYW5kLgorCitUaGUgc3lzY2FsbC1jb3VudHMgc2NyaXB0IGlzIGEgc2ltcGxlIHNjcmlwdCwgYnV0IGRlbW9uc3RyYXRlcyBhbGwgdGhlCitiYXNpYyBpZGVhcyBuZWNlc3NhcnkgdG8gY3JlYXRlIGEgdXNlZnVsIHNjcmlwdC4gIEhlcmUncyBhbiBleGFtcGxlCitvZiBpdHMgb3V0cHV0IChzeXNjYWxsIG5hbWVzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCwgdGhleSB3aWxsIGFwcGVhcgorYXMgbnVtYmVycyk6CisKKy0tLS0KK3N5c2NhbGwgZXZlbnRzOgorCitldmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLQorc3lzX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ1NTA2Nworc3lzX2dldGRlbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDA3Mgorc3lzX2Nsb3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAzNworc3lzX3N3YXBvZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc2OQorc3lzX3JlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkyMworc3lzX3NjaGVkX3NldHBhcmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgyNgorc3lzX29wZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzMQorc3lzX25ld2ZzdGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyNgorc3lzX21tYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxNworc3lzX211bm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxNgorc3lzX2Z1dGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MQorc3lzX3NlbGVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMgorc3lzX3BvbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4NAorc3lzX3NldGl0aW1lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorc3lzX3dyaXRldiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorc3lzX2xzZWVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworc3lzX3J0X3NpZ3Byb2NtYXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorc3lzX3dhaXQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworc3lzX2lvY3RsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworc3lzX3NldF9yb2J1c3RfbGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorc3lzX2V4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorc3lzX2FjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorLS0tLQorCitCYXNpY2FsbHkgb3VyIHRhc2sgaXMgdG8ga2VlcCBhIHBlci1zeXNjYWxsIHRhbGx5IHRoYXQgZ2V0cyB1cGRhdGVkCitldmVyeSB0aW1lIGEgc3lzdGVtIGNhbGwgb2NjdXJzIGluIHRoZSBzeXN0ZW0uICBPdXIgc2NyaXB0IHdpbGwgZG8KK3RoYXQsIGJ1dCBmaXJzdCB3ZSBuZWVkIHRvIHJlY29yZCB0aGUgZGF0YSB0aGF0IHdpbGwgYmUgcHJvY2Vzc2VkIGJ5Cit0aGF0IHNjcmlwdC4gIFRoZW9yZXRpY2FsbHksIHRoZXJlIGFyZSBhIGNvdXBsZSBvZiB3YXlzIHdlIGNvdWxkIGRvCit0aGF0OgorCistIHdlIGNvdWxkIGVuYWJsZSBldmVyeSBldmVudCB1bmRlciB0aGUgdHJhY2luZy9ldmVudHMvc3lzY2FsbHMKKyAgZGlyZWN0b3J5LCBidXQgdGhpcyBpcyBvdmVyIDYwMCBzeXNjYWxscywgd2VsbCBiZXlvbmQgdGhlIG51bWJlcgorICBhbGxvd2FibGUgYnkgcGVyZi4gIFRoZXNlIGluZGl2aWR1YWwgc3lzY2FsbCBldmVudHMgd2lsbCBob3dldmVyIGJlCisgIHVzZWZ1bCBpZiB3ZSB3YW50IHRvIGxhdGVyIHVzZSB0aGUgZ3VpZGFuY2Ugd2UgZ2V0IGZyb20gdGhlCisgIGdlbmVyYWwtcHVycG9zZSBzY3JpcHRzIHRvIGRyaWxsIGRvd24gYW5kIGdldCBtb3JlIGRldGFpbCBhYm91dAorICBpbmRpdmlkdWFsIHN5c2NhbGxzIG9mIGludGVyZXN0LgorCistIHdlIGNhbiBlbmFibGUgdGhlIHN5c19lbnRlciBhbmQvb3Igc3lzX2V4aXQgc3lzY2FsbHMgZm91bmQgdW5kZXIKKyAgdHJhY2luZy9ldmVudHMvcmF3X3N5c2NhbGxzLiAgVGhlc2UgYXJlIGNhbGxlZCBmb3IgYWxsIHN5c2NhbGxzOyB0aGUKKyAgJ2lkJyBmaWVsZCBjYW4gYmUgdXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGluZGl2aWR1YWwgc3lzY2FsbAorICBudW1iZXJzLgorCitGb3IgdGhpcyBzY3JpcHQsIHdlIG9ubHkgbmVlZCB0byBrbm93IHRoYXQgYSBzeXNjYWxsIHdhcyBlbnRlcmVkOyB3ZQorZG9uJ3QgY2FyZSBob3cgaXQgZXhpdGVkLCBzbyB3ZSdsbCB1c2UgJ3BlcmYgcmVjb3JkJyB0byByZWNvcmQgb25seQordGhlIHN5c19lbnRlciBldmVudHM6CisKKy0tLS0KKyMgcGVyZiByZWNvcmQgLWMgMSAtZiAtYSAtTSAtUiAtZSByYXdfc3lzY2FsbHM6c3lzX2VudGVyCisKK15DWyBwZXJmIHJlY29yZDogV29rZW4gdXAgMSB0aW1lcyB0byB3cml0ZSBkYXRhIF0KK1sgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSA1Ni41NDUgTUIgcGVyZi5kYXRhICh+MjQ3MDUwMyBzYW1wbGVzKSBdCistLS0tCisKK1RoZSBvcHRpb25zIGJhc2ljYWxseSBzYXkgdG8gY29sbGVjdCBkYXRhIGZvciBldmVyeSBzeXNjYWxsIGV2ZW50CitzeXN0ZW0td2lkZSBhbmQgbXVsdGlwbGV4IHRoZSBwZXItY3B1IG91dHB1dCBpbnRvIGEgc2luZ2xlIHN0cmVhbS4KK1RoYXQgc2luZ2xlIHN0cmVhbSB3aWxsIGJlIHJlY29yZGVkIGluIGEgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKK2NhbGxlZCBwZXJmLmRhdGEuCisKK09uY2Ugd2UgaGF2ZSBhIHBlcmYuZGF0YSBmaWxlIGNvbnRhaW5pbmcgb3VyIGRhdGEsIHdlIGNhbiB1c2UgdGhlIC1nCisncGVyZiB0cmFjZScgb3B0aW9uIHRvIGdlbmVyYXRlIGEgUHl0aG9uIHNjcmlwdCB0aGF0IHdpbGwgY29udGFpbiBhCitjYWxsYmFjayBoYW5kbGVyIGZvciBlYWNoIGV2ZW50IHR5cGUgZm91bmQgaW4gdGhlIHBlcmYuZGF0YSB0cmFjZQorc3RyZWFtIChmb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlIFNUQVJURVIgU0NSSVBUUyBzZWN0aW9uKS4KKworLS0tLQorIyBwZXJmIHRyYWNlIC1nIHB5dGhvbgorZ2VuZXJhdGVkIFB5dGhvbiBzY3JpcHQ6IHBlcmYtdHJhY2UucHkKKworVGhlIG91dHB1dCBmaWxlIGNyZWF0ZWQgYWxzbyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgbmFtZWQKK3BlcmYtdHJhY2UucHkuICBIZXJlJ3MgdGhlIGZpbGUgaW4gaXRzIGVudGlyZXR5OgorCisjIHBlcmYgdHJhY2UgZXZlbnQgaGFuZGxlcnMsIGdlbmVyYXRlZCBieSBwZXJmIHRyYWNlIC1nIHB5dGhvbgorIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKKworIyBUaGUgY29tbW9uXyogZXZlbnQgaGFuZGxlciBmaWVsZHMgYXJlIHRoZSBtb3N0IHVzZWZ1bCBmaWVsZHMgY29tbW9uIHRvCisjIGFsbCBldmVudHMuICBUaGV5IGRvbid0IG5lY2Vzc2FyaWx5IGNvcnJlc3BvbmQgdG8gdGhlICdjb21tb25fKicgZmllbGRzCisjIGluIHRoZSBmb3JtYXQgZmlsZXMuICBUaG9zZSBmaWVsZHMgbm90IGF2YWlsYWJsZSBhcyBoYW5kbGVyIHBhcmFtcyBjYW4KKyMgYmUgcmV0cmlldmVkIHVzaW5nIFB5dGhvbiBmdW5jdGlvbnMgb2YgdGhlIGZvcm0gY29tbW9uXyooY29udGV4dCkuCisjIFNlZSB0aGUgcGVyZi10cmFjZS1weXRob24gRG9jdW1lbnRhdGlvbiBmb3IgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGZ1bmN0aW9ucy4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK3N5cy5wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydQRVJGX0VYRUNfUEFUSCddICsgXAorCScvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJykKKworZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKK2Zyb20gQ29yZSBpbXBvcnQgKgorCitkZWYgdHJhY2VfYmVnaW4oKToKKwlwcmludCAiaW4gdHJhY2VfYmVnaW4iCisKK2RlZiB0cmFjZV9lbmQoKToKKwlwcmludCAiaW4gdHJhY2VfZW5kIgorCitkZWYgcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwlpZCwgYXJncyk6CisJCXByaW50X2hlYWRlcihldmVudF9uYW1lLCBjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQkJY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pCisKKwkJcHJpbnQgImlkPSVkLCBhcmdzPSVzXG4iICUgXAorCQkoaWQsIGFyZ3MpLAorCitkZWYgdHJhY2VfdW5oYW5kbGVkKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsCisJCWNvbW1vbl9waWQsIGNvbW1vbl9jb21tKToKKwkJcHJpbnRfaGVhZGVyKGV2ZW50X25hbWUsIGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsCisJCWNvbW1vbl9waWQsIGNvbW1vbl9jb21tKQorCitkZWYgcHJpbnRfaGVhZGVyKGV2ZW50X25hbWUsIGNwdSwgc2VjcywgbnNlY3MsIHBpZCwgY29tbSk6CisJcHJpbnQgIiUtMjBzICU1dSAlMDV1LiUwOXUgJTh1ICUtMjBzICIgJSBcCisJKGV2ZW50X25hbWUsIGNwdSwgc2VjcywgbnNlY3MsIHBpZCwgY29tbSksCistLS0tCisKK0F0IHRoZSB0b3AgaXMgYSBjb21tZW50IGJsb2NrIGZvbGxvd2VkIGJ5IHNvbWUgaW1wb3J0IHN0YXRlbWVudHMgYW5kIGEKK3BhdGggYXBwZW5kIHdoaWNoIGV2ZXJ5IHBlcmYgdHJhY2Ugc2NyaXB0IHNob3VsZCBpbmNsdWRlLgorCitGb2xsb3dpbmcgdGhhdCBhcmUgYSBjb3VwbGUgZ2VuZXJhdGVkIGZ1bmN0aW9ucywgdHJhY2VfYmVnaW4oKSBhbmQKK3RyYWNlX2VuZCgpLCB3aGljaCBhcmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHRoZSBlbmQgb2YgdGhlCitzY3JpcHQgcmVzcGVjdGl2ZWx5IChmb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlIFNDUklQVF9MQVlPVVQgc2VjdGlvbgorYmVsb3cpLgorCitGb2xsb3dpbmcgdGhvc2UgYXJlIHRoZSAnZXZlbnQgaGFuZGxlcicgZnVuY3Rpb25zIGdlbmVyYXRlZCBvbmUgZm9yCitldmVyeSBldmVudCBpbiB0aGUgJ3BlcmYgcmVjb3JkJyBvdXRwdXQuICBUaGUgaGFuZGxlciBmdW5jdGlvbnMgdGFrZQordGhlIGZvcm0gc3Vic3lzdGVtX19ldmVudF9uYW1lLCBhbmQgY29udGFpbiBuYW1lZCBwYXJhbWV0ZXJzLCBvbmUgZm9yCitlYWNoIGZpZWxkIGluIHRoZSBldmVudDsgaW4gdGhpcyBjYXNlLCB0aGVyZSdzIG9ubHkgb25lIGV2ZW50LAorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIoKS4gIChzZWUgdGhlIEVWRU5UIEhBTkRMRVJTIHNlY3Rpb24gYmVsb3cgZm9yCittb3JlIGluZm8gb24gZXZlbnQgaGFuZGxlcnMpLgorCitUaGUgZmluYWwgY291cGxlIG9mIGZ1bmN0aW9ucyBhcmUsIGxpa2UgdGhlIGJlZ2luIGFuZCBlbmQgZnVuY3Rpb25zLAorZ2VuZXJhdGVkIGZvciBldmVyeSBzY3JpcHQuICBUaGUgZmlyc3QsIHRyYWNlX3VuaGFuZGxlZCgpLCBpcyBjYWxsZWQKK2V2ZXJ5IHRpbWUgdGhlIHNjcmlwdCBmaW5kcyBhbiBldmVudCBpbiB0aGUgcGVyZi5kYXRhIGZpbGUgdGhhdAorZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBldmVudCBoYW5kbGVyIGluIHRoZSBzY3JpcHQuICBUaGlzIGNvdWxkCittZWFuIGVpdGhlciB0aGF0IHRoZSByZWNvcmQgc3RlcCByZWNvcmRlZCBldmVudCB0eXBlcyB0aGF0IGl0IHdhc24ndAorcmVhbGx5IGludGVyZXN0ZWQgaW4sIG9yIHRoZSBzY3JpcHQgd2FzIHJ1biBhZ2FpbnN0IGEgdHJhY2UgZmlsZSB0aGF0Citkb2Vzbid0IGNvcnJlc3BvbmQgdG8gdGhlIHNjcmlwdC4KKworVGhlIHNjcmlwdCBnZW5lcmF0ZWQgYnkgLWcgb3B0aW9uIG9wdGlvbiBzaW1wbHkgcHJpbnRzIGEgbGluZSBmb3IgZWFjaAorZXZlbnQgZm91bmQgaW4gdGhlIHRyYWNlIHN0cmVhbSBpLmUuIGl0IGJhc2ljYWxseSBqdXN0IGR1bXBzIHRoZSBldmVudAorYW5kIGl0cyBwYXJhbWV0ZXIgdmFsdWVzIHRvIHN0ZG91dC4gIFRoZSBwcmludF9oZWFkZXIoKSBmdW5jdGlvbiBpcworc2ltcGx5IGEgdXRpbGl0eSBmdW5jdGlvbiB1c2VkIGZvciB0aGF0IHB1cnBvc2UuICBMZXQncyByZW5hbWUgdGhlCitzY3JpcHQgYW5kIHJ1biBpdCB0byBzZWUgdGhlIGRlZmF1bHQgb3V0cHV0OgorCistLS0tCisjIG12IHBlcmYtdHJhY2UucHkgc3lzY2FsbC1jb3VudHMucHkKKyMgcGVyZiB0cmFjZSAtcyBzeXNjYWxsLWNvdW50cy5weQorCityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc1ODIwODMgICAgIDc1MDYgcGVyZiAgICAgICAgICAgICAgICAgIGlkPTEsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc1OTU3NjQgICAgIDc1MDYgcGVyZiAgICAgICAgICAgICAgICAgIGlkPTEsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc2MjA4NjAgICAgIDc1MDYgcGVyZiAgICAgICAgICAgICAgICAgIGlkPTEsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc3MTA0NzggICAgIDY1MzMgbnB2aWV3ZXIuYmluICAgICAgICAgIGlkPTc4LCBhcmdzPQorcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIgICAgIDEgMDA4NDAuODQ3NzE5MjA0ICAgICA2NTMzIG5wdmlld2VyLmJpbiAgICAgICAgICBpZD0xNDIsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc3NTU0NDUgICAgIDY1MzMgbnB2aWV3ZXIuYmluICAgICAgICAgIGlkPTMsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc3NzU2MDEgICAgIDY1MzMgbnB2aWV3ZXIuYmluICAgICAgICAgIGlkPTMsIGFyZ3M9CityYXdfc3lzY2FsbHNfX3N5c19lbnRlciAgICAgMSAwMDg0MC44NDc3ODE4MjAgICAgIDY1MzMgbnB2aWV3ZXIuYmluICAgICAgICAgIGlkPTMsIGFyZ3M9CisuCisuCisuCistLS0tCisKK09mIGNvdXJzZSwgZm9yIHRoaXMgc2NyaXB0LCB3ZSdyZSBub3QgaW50ZXJlc3RlZCBpbiBwcmludGluZyBldmVyeQordHJhY2UgZXZlbnQsIGJ1dCByYXRoZXIgYWdncmVnYXRpbmcgaXQgaW4gYSB1c2VmdWwgd2F5LiAgU28gd2UnbGwgZ2V0CityaWQgb2YgZXZlcnl0aGluZyB0byBkbyB3aXRoIHByaW50aW5nIGFzIHdlbGwgYXMgdGhlIHRyYWNlX2JlZ2luKCkgYW5kCit0cmFjZV91bmhhbmRsZWQoKSBmdW5jdGlvbnMsIHdoaWNoIHdlIHdvbid0IGJlIHVzaW5nLiAgVGhhdCBsZWF2ZXMgdXMKK3dpdGggdGhpcyBtaW5pbWFsaXN0aWMgc2tlbGV0b246CisKKy0tLS0KK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwknL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKK2Zyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCitmcm9tIENvcmUgaW1wb3J0ICoKKworZGVmIHRyYWNlX2VuZCgpOgorCXByaW50ICJpbiB0cmFjZV9lbmQiCisKK2RlZiByYXdfc3lzY2FsbHNfX3N5c19lbnRlcihldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCWlkLCBhcmdzKToKKy0tLS0KKworSW4gdHJhY2VfZW5kKCksIHdlJ2xsIHNpbXBseSBwcmludCB0aGUgcmVzdWx0cywgYnV0IGZpcnN0IHdlIG5lZWQgdG8KK2dlbmVyYXRlIHNvbWUgcmVzdWx0cyB0byBwcmludC4gIFRvIGRvIHRoYXQgd2UgbmVlZCB0byBoYXZlIG91cgorc3lzX2VudGVyKCkgaGFuZGxlciBkbyB0aGUgbmVjZXNzYXJ5IHRhbGx5aW5nIHVudGlsIGFsbCBldmVudHMgaGF2ZQorYmVlbiBjb3VudGVkLiAgQSBoYXNoIHRhYmxlIGluZGV4ZWQgYnkgc3lzY2FsbCBpZCBpcyBhIGdvb2Qgd2F5IHRvCitzdG9yZSB0aGF0IGluZm9ybWF0aW9uOyBldmVyeSB0aW1lIHRoZSBzeXNfZW50ZXIoKSBoYW5kbGVyIGlzIGNhbGxlZCwKK3dlIHNpbXBseSBpbmNyZW1lbnQgYSBjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhhdCBoYXNoIGVudHJ5IGluZGV4ZWQgYnkKK3RoYXQgc3lzY2FsbCBpZDoKKworLS0tLQorICBzeXNjYWxscyA9IGF1dG9kaWN0KCkKKworICB0cnk6CisgICAgc3lzY2FsbHNbaWRdICs9IDEKKyAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICBzeXNjYWxsc1tpZF0gPSAxCistLS0tCisKK1RoZSBzeXNjYWxscyAnYXV0b2RpY3QnIG9iamVjdCBpcyBhIHNwZWNpYWwga2luZCBvZiBQeXRob24gZGljdGlvbmFyeQorKGltcGxlbWVudGVkIGluIENvcmUucHkpIHRoYXQgaW1wbGVtZW50cyBQZXJsJ3MgJ2F1dG92aXZpZnlpbmcnIGhhc2hlcworaW4gUHl0aG9uIGkuZS4gd2l0aCBhdXRvdml2aWZ5aW5nIGhhc2hlcywgeW91IGNhbiBhc3NpZ24gbmVzdGVkIGhhc2gKK3ZhbHVlcyB3aXRob3V0IGhhdmluZyB0byBnbyB0byB0aGUgdHJvdWJsZSBvZiBjcmVhdGluZyBpbnRlcm1lZGlhdGUKK2xldmVscyBpZiB0aGV5IGRvbid0IGV4aXN0IGUuZyBzeXNjYWxsc1tjb21tXVtwaWRdW2lkXSA9IDEgd2lsbCBjcmVhdGUKK3RoZSBpbnRlcm1lZGlhdGUgaGFzaCBsZXZlbHMgYW5kIGZpbmFsbHkgYXNzaWduIHRoZSB2YWx1ZSAxIHRvIHRoZQoraGFzaCBlbnRyeSBmb3IgJ2lkJyAoYmVjYXVzZSB0aGUgdmFsdWUgYmVpbmcgYXNzaWduZWQgaXNuJ3QgYSBoYXNoCitvYmplY3QgaXRzZWxmLCB0aGUgaW5pdGlhbCB2YWx1ZSBpcyBhc3NpZ25lZCBpbiB0aGUgVHlwZUVycm9yCitleGNlcHRpb24uICBXZWxsLCB0aGVyZSBtYXkgYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgaW4gUHl0aG9uIGJ1dAordGhhdCdzIHdoYXQgd29ya3MgZm9yIG5vdykuCisKK1B1dHRpbmcgdGhhdCBjb2RlIGludG8gdGhlIHJhd19zeXNjYWxsc19fc3lzX2VudGVyKCkgaGFuZGxlciwgd2UKK2VmZmVjdGl2ZWx5IGVuZCB1cCB3aXRoIGEgc2luZ2xlLWxldmVsIGRpY3Rpb25hcnkga2V5ZWQgb24gc3lzY2FsbCBpZAorYW5kIGhhdmluZyB0aGUgY291bnRzIHdlJ3ZlIHRhbGxpZWQgYXMgdmFsdWVzLgorCitUaGUgcHJpbnRfc3lzY2FsbF90b3RhbHMoKSBmdW5jdGlvbiBpdGVyYXRlcyBvdmVyIHRoZSBlbnRyaWVzIGluIHRoZQorZGljdGlvbmFyeSBhbmQgZGlzcGxheXMgYSBsaW5lIGZvciBlYWNoIGVudHJ5IGNvbnRhaW5pbmcgdGhlIHN5c2NhbGwKK25hbWUgKHRoZSBkaWN0b25hcnkga2V5cyBjb250YWluIHRoZSBzeXNjYWxsIGlkcywgd2hpY2ggYXJlIHBhc3NlZCB0bwordGhlIFV0aWwgZnVuY3Rpb24gc3lzY2FsbF9uYW1lKCksIHdoaWNoIHRyYW5zbGF0ZXMgdGhlIHJhdyBzeXNjYWxsCitudW1iZXJzIHRvIHRoZSBjb3JyZXNwb25kaW5nIHN5c2NhbGwgbmFtZSBzdHJpbmdzKS4gIFRoZSBvdXRwdXQgaXMKK2Rpc3BsYXllZCBhZnRlciBhbGwgdGhlIGV2ZW50cyBpbiB0aGUgdHJhY2UgaGF2ZSBiZWVuIHByb2Nlc3NlZCwgYnkKK2NhbGxpbmcgdGhlIHByaW50X3N5c2NhbGxfdG90YWxzKCkgZnVuY3Rpb24gZnJvbSB0aGUgdHJhY2VfZW5kKCkKK2hhbmRsZXIgY2FsbGVkIGF0IHRoZSBlbmQgb2Ygc2NyaXB0IHByb2Nlc3NpbmcuCisKK1RoZSBmaW5hbCBzY3JpcHQgcHJvZHVjaW5nIHRoZSBvdXRwdXQgc2hvd24gYWJvdmUgaXMgc2hvd24gaW4gaXRzCitlbnRpcmV0eSBiZWxvdyAoc3lzY2FsbF9uYW1lKCkgaGVscGVyIGlzIG5vdCB5ZXQgYXZhaWxhYmxlLCB5b3UgY2FuCitvbmx5IGRlYWwgd2l0aCBpZCdzIGZvciBub3cpOgorCistLS0tCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworc3lzLnBhdGguYXBwZW5kKG9zLmVudmlyb25bJ1BFUkZfRVhFQ19QQVRIJ10gKyBcCisJJy9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnKQorCitmcm9tIHBlcmZfdHJhY2VfY29udGV4dCBpbXBvcnQgKgorZnJvbSBDb3JlIGltcG9ydCAqCitmcm9tIFV0aWwgaW1wb3J0ICoKKworc3lzY2FsbHMgPSBhdXRvZGljdCgpCisKK2RlZiB0cmFjZV9lbmQoKToKKwlwcmludF9zeXNjYWxsX3RvdGFscygpCisKK2RlZiByYXdfc3lzY2FsbHNfX3N5c19lbnRlcihldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCWlkLCBhcmdzKToKKwl0cnk6CisJCXN5c2NhbGxzW2lkXSArPSAxCisJZXhjZXB0IFR5cGVFcnJvcjoKKwkJc3lzY2FsbHNbaWRdID0gMQorCitkZWYgcHJpbnRfc3lzY2FsbF90b3RhbHMoKToKKyAgICBpZiBmb3JfY29tbSBpcyBub3QgTm9uZToKKwkgICAgcHJpbnQgIlxuc3lzY2FsbCBldmVudHMgZm9yICVzOlxuXG4iICUgKGZvcl9jb21tKSwKKyAgICBlbHNlOgorCSAgICBwcmludCAiXG5zeXNjYWxsIGV2ZW50czpcblxuIiwKKworICAgIHByaW50ICIlLTQwcyAgJTEwc1xuIiAlICgiZXZlbnQiLCAiY291bnQiKSwKKyAgICBwcmludCAiJS00MHMgICUxMHNcbiIgJSAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS0tLS0tLS0iKSwKKworICAgIGZvciBpZCwgdmFsIGluIHNvcnRlZChzeXNjYWxscy5pdGVyaXRlbXMoKSwga2V5ID0gbGFtYmRhKGssIHYpOiAodiwgayksIFwKKwkJCQkgIHJldmVyc2UgPSBUcnVlKToKKwkgICAgcHJpbnQgIiUtNDBzICAlMTBkXG4iICUgKHN5c2NhbGxfbmFtZShpZCksIHZhbCksCistLS0tCisKK1RoZSBzY3JpcHQgY2FuIGJlIHJ1biBqdXN0IGFzIGJlZm9yZToKKworICAjIHBlcmYgdHJhY2UgLXMgc3lzY2FsbC1jb3VudHMucHkKKworU28gdGhvc2UgYXJlIHRoZSBlc3NlbnRpYWwgc3RlcHMgaW4gd3JpdGluZyBhbmQgcnVubmluZyBhIHNjcmlwdC4gIFRoZQorcHJvY2VzcyBjYW4gYmUgZ2VuZXJhbGl6ZWQgdG8gYW55IHRyYWNlcG9pbnQgb3Igc2V0IG9mIHRyYWNlcG9pbnRzCit5b3UncmUgaW50ZXJlc3RlZCBpbiAtIGJhc2ljYWxseSBmaW5kIHRoZSB0cmFjZXBvaW50KHMpIHlvdSdyZQoraW50ZXJlc3RlZCBpbiBieSBsb29raW5nIGF0IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBldmVudHMgc2hvd24gYnkKKydwZXJmIGxpc3QnIGFuZC9vciBsb29rIGluIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcgZXZlbnRzIGZvcgorZGV0YWlsZWQgZXZlbnQgYW5kIGZpZWxkIGluZm8sIHJlY29yZCB0aGUgY29ycmVzcG9uZGluZyB0cmFjZSBkYXRhCit1c2luZyAncGVyZiByZWNvcmQnLCBwYXNzaW5nIGl0IHRoZSBsaXN0IG9mIGludGVyZXN0aW5nIGV2ZW50cywKK2dlbmVyYXRlIGEgc2tlbGV0b24gc2NyaXB0IHVzaW5nICdwZXJmIHRyYWNlIC1nIHB5dGhvbicgYW5kIG1vZGlmeSB0aGUKK2NvZGUgdG8gYWdncmVnYXRlIGFuZCBkaXNwbGF5IGl0IGZvciB5b3VyIHBhcnRpY3VsYXIgbmVlZHMuCisKK0FmdGVyIHlvdSd2ZSBkb25lIHRoYXQgeW91IG1heSBlbmQgdXAgd2l0aCBhIGdlbmVyYWwtcHVycG9zZSBzY3JpcHQKK3RoYXQgeW91IHdhbnQgdG8ga2VlcCBhcm91bmQgYW5kIGhhdmUgYXZhaWxhYmxlIGZvciBmdXR1cmUgdXNlLiAgQnkKK3dyaXRpbmcgYSBjb3VwbGUgb2YgdmVyeSBzaW1wbGUgc2hlbGwgc2NyaXB0cyBhbmQgcHV0dGluZyB0aGVtIGluIHRoZQorcmlnaHQgcGxhY2UsIHlvdSBjYW4gaGF2ZSB5b3VyIHNjcmlwdCBsaXN0ZWQgYWxvbmdzaWRlIHRoZSBvdGhlcgorc2NyaXB0cyBsaXN0ZWQgYnkgdGhlICdwZXJmIHRyYWNlIC1sJyBjb21tYW5kIGUuZy46CisKKy0tLS0KK3Jvb3RAdHJvcGljYW5hOn4jIHBlcmYgdHJhY2UgLWwKK0xpc3Qgb2YgYXZhaWxhYmxlIHRyYWNlIHNjcmlwdHM6CisgIHdvcmtxdWV1ZS1zdGF0cyAgICAgICAgICAgICAgICAgICAgICB3b3JrcXVldWUgc3RhdHMgKGlucy9leGUvY3JlYXRlL2Rlc3Ryb3kpCisgIHdha2V1cC1sYXRlbmN5ICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0td2lkZSBtaW4vbWF4L2F2ZyB3YWtldXAgbGF0ZW5jeQorICBydy1ieS1maWxlIDxjb21tPiAgICAgICAgICAgICAgICAgICAgci93IGFjdGl2aXR5IGZvciBhIHByb2dyYW0sIGJ5IGZpbGUKKyAgcnctYnktcGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIHIvdyBhY3Rpdml0eQorLS0tLQorCitBIG5pY2Ugc2lkZSBlZmZlY3Qgb2YgZG9pbmcgdGhpcyBpcyB0aGF0IHlvdSBhbHNvIHRoZW4gY2FwdHVyZSB0aGUKK3Byb2JhYmx5IGxlbmd0aHkgJ3BlcmYgcmVjb3JkJyBjb21tYW5kIG5lZWRlZCB0byByZWNvcmQgdGhlIGV2ZW50cyBmb3IKK3RoZSBzY3JpcHQuCisKK1RvIGhhdmUgdGhlIHNjcmlwdCBhcHBlYXIgYXMgYSAnYnVpbHQtaW4nIHNjcmlwdCwgeW91IHdyaXRlIHR3byBzaW1wbGUKK3NjcmlwdHMsIG9uZSBmb3IgcmVjb3JkaW5nIGFuZCBvbmUgZm9yICdyZXBvcnRpbmcnLgorCitUaGUgJ3JlY29yZCcgc2NyaXB0IGlzIGEgc2hlbGwgc2NyaXB0IHdpdGggdGhlIHNhbWUgYmFzZSBuYW1lIGFzIHlvdXIKK3NjcmlwdCwgYnV0IHdpdGggLXJlY29yZCBhcHBlbmRlZC4gIFRoZSBzaGVsbCBzY3JpcHQgc2hvdWxkIGJlIHB1dAoraW50byB0aGUgcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4gZGlyZWN0b3J5IGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuCitJbiB0aGF0IHNjcmlwdCwgeW91IHdyaXRlIHRoZSAncGVyZiByZWNvcmQnIGNvbW1hbmQtbGluZSBuZWVkZWQgZm9yCit5b3VyIHNjcmlwdDoKKworLS0tLQorIyBjYXQga2VybmVsLXNvdXJjZS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZWNvcmQKKworIyEvYmluL2Jhc2gKK3BlcmYgcmVjb3JkIC1jIDEgLWYgLWEgLU0gLVIgLWUgcmF3X3N5c2NhbGxzOnN5c19lbnRlcgorLS0tLQorCitUaGUgJ3JlcG9ydCcgc2NyaXB0IGlzIGFsc28gYSBzaGVsbCBzY3JpcHQgd2l0aCB0aGUgc2FtZSBiYXNlIG5hbWUgYXMKK3lvdXIgc2NyaXB0LCBidXQgd2l0aCAtcmVwb3J0IGFwcGVuZGVkLiAgSXQgc2hvdWxkIGFsc28gYmUgbG9jYXRlZCBpbgordGhlIHBlcmYvc2NyaXB0cy9weXRob24vYmluIGRpcmVjdG9yeS4gIEluIHRoYXQgc2NyaXB0LCB5b3Ugd3JpdGUgdGhlCisncGVyZiB0cmFjZSAtcycgY29tbWFuZC1saW5lIG5lZWRlZCBmb3IgcnVubmluZyB5b3VyIHNjcmlwdDoKKworLS0tLQorIyBjYXQga2VybmVsLXNvdXJjZS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZXBvcnQKKworIyEvYmluL2Jhc2gKKyMgZGVzY3JpcHRpb246IHN5c3RlbS13aWRlIHN5c2NhbGwgY291bnRzCitwZXJmIHRyYWNlIC1zIH4vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24vc3lzY2FsbC1jb3VudHMucHkKKy0tLS0KKworTm90ZSB0aGF0IHRoZSBsb2NhdGlvbiBvZiB0aGUgUHl0aG9uIHNjcmlwdCBnaXZlbiBpbiB0aGUgc2hlbGwgc2NyaXB0CitpcyBpbiB0aGUgbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24gZGlyZWN0b3J5IC0gdGhpcyBpcyB3aGVyZQordGhlIHNjcmlwdCB3aWxsIGJlIGNvcGllZCBieSAnbWFrZSBpbnN0YWxsJyB3aGVuIHlvdSBpbnN0YWxsIHBlcmYuCitGb3IgdGhlIGluc3RhbGxhdGlvbiB0byBpbnN0YWxsIHlvdXIgc2NyaXB0IHRoZXJlLCB5b3VyIHNjcmlwdCBuZWVkcwordG8gYmUgbG9jYXRlZCBpbiB0aGUgcGVyZi9zY3JpcHRzL3B5dGhvbiBkaXJlY3RvcnkgaW4gdGhlIGtlcm5lbAorc291cmNlIHRyZWU6CisKKy0tLS0KKyMgbHMgLWFsIGtlcm5lbC1zb3VyY2UvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbgorCityb290QHRyb3BpY2FuYTovaG9tZS90cnovc3JjL3RpcCMgbHMgLWFsIHRvb2xzL3BlcmYvc2NyaXB0cy9weXRob24KK3RvdGFsIDMyCitkcnd4ci14ci14IDQgdHJ6IHRyeiA0MDk2IDIwMTAtMDEtMjYgMjI6MzAgLgorZHJ3eHIteHIteCA0IHRyeiB0cnogNDA5NiAyMDEwLTAxLTI2IDIyOjI5IC4uCitkcnd4ci14ci14IDIgdHJ6IHRyeiA0MDk2IDIwMTAtMDEtMjYgMjI6MjkgYmluCistcnctci0tci0tIDEgdHJ6IHRyeiAyNTQ4IDIwMTAtMDEtMjYgMjI6MjkgY2hlY2stcGVyZi10cmFjZS5weQorZHJ3eHIteHIteCAzIHRyeiB0cnogNDA5NiAyMDEwLTAxLTI2IDIyOjQ5IFBlcmYtVHJhY2UtVXRpbAorLXJ3LXItLXItLSAxIHRyeiB0cnogMTQ2MiAyMDEwLTAxLTI2IDIyOjMwIHN5c2NhbGwtY291bnRzLnB5CistLS0tCisKK09uY2UgeW91J3ZlIGRvbmUgdGhhdCAoZG9uJ3QgZm9yZ2V0IHRvIGRvIGEgbmV3ICdtYWtlIGluc3RhbGwnLAorb3RoZXJ3aXNlIHlvdXIgc2NyaXB0IHdvbid0IHNob3cgdXAgYXQgcnVuLXRpbWUpLCAncGVyZiB0cmFjZSAtbCcKK3Nob3VsZCBzaG93IGEgbmV3IGVudHJ5IGZvciB5b3VyIHNjcmlwdDoKKworLS0tLQorcm9vdEB0cm9waWNhbmE6fiMgcGVyZiB0cmFjZSAtbAorTGlzdCBvZiBhdmFpbGFibGUgdHJhY2Ugc2NyaXB0czoKKyAgd29ya3F1ZXVlLXN0YXRzICAgICAgICAgICAgICAgICAgICAgIHdvcmtxdWV1ZSBzdGF0cyAoaW5zL2V4ZS9jcmVhdGUvZGVzdHJveSkKKyAgd2FrZXVwLWxhdGVuY3kgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbS13aWRlIG1pbi9tYXgvYXZnIHdha2V1cCBsYXRlbmN5CisgIHJ3LWJ5LWZpbGUgPGNvbW0+ICAgICAgICAgICAgICAgICAgICByL3cgYWN0aXZpdHkgZm9yIGEgcHJvZ3JhbSwgYnkgZmlsZQorICBydy1ieS1waWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtLXdpZGUgci93IGFjdGl2aXR5CisgIHN5c2NhbGwtY291bnRzICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0td2lkZSBzeXNjYWxsIGNvdW50cworLS0tLQorCitZb3UgY2FuIG5vdyBwZXJmb3JtIHRoZSByZWNvcmQgc3RlcCB2aWEgJ3BlcmYgdHJhY2UgcmVjb3JkJzoKKworICAjIHBlcmYgdHJhY2UgcmVjb3JkIHN5c2NhbGwtY291bnRzCisKK2FuZCBkaXNwbGF5IHRoZSBvdXRwdXQgdXNpbmcgJ3BlcmYgdHJhY2UgcmVwb3J0JzoKKworICAjIHBlcmYgdHJhY2UgcmVwb3J0IHN5c2NhbGwtY291bnRzCisKK1NUQVJURVIgU0NSSVBUUworLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gcXVpY2tseSBnZXQgc3RhcnRlZCB3cml0aW5nIGEgc2NyaXB0IGZvciBhIHBhcnRpY3VsYXIgc2V0IG9mCit0cmFjZSBkYXRhIGJ5IGdlbmVyYXRpbmcgYSBza2VsZXRvbiBzY3JpcHQgdXNpbmcgJ3BlcmYgdHJhY2UgLWcKK3B5dGhvbicgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIGFuIGV4aXN0aW5nIHBlcmYuZGF0YSB0cmFjZSBmaWxlLgorVGhhdCB3aWxsIGdlbmVyYXRlIGEgc3RhcnRlciBzY3JpcHQgY29udGFpbmluZyBhIGhhbmRsZXIgZm9yIGVhY2ggb2YKK3RoZSBldmVudCB0eXBlcyBpbiB0aGUgdHJhY2UgZmlsZTsgaXQgc2ltcGx5IHByaW50cyBldmVyeSBhdmFpbGFibGUKK2ZpZWxkIGZvciBlYWNoIGV2ZW50IGluIHRoZSB0cmFjZSBmaWxlLgorCitZb3UgY2FuIGFsc28gbG9vayBhdCB0aGUgZXhpc3Rpbmcgc2NyaXB0cyBpbgorfi9saWJleGVjL3BlcmYtY29yZS9zY3JpcHRzL3B5dGhvbiBmb3IgdHlwaWNhbCBleGFtcGxlcyBzaG93aW5nIGhvdyB0bworZG8gYmFzaWMgdGhpbmdzIGxpa2UgYWdncmVnYXRlIGV2ZW50IGRhdGEsIHByaW50IHJlc3VsdHMsIGV0Yy4gIEFsc28sCit0aGUgY2hlY2stcGVyZi10cmFjZS5weSBzY3JpcHQsIHdoaWxlIG5vdCBpbnRlcmVzdGluZyBmb3IgaXRzIHJlc3VsdHMsCithdHRlbXB0cyB0byBleGVyY2lzZSBhbGwgb2YgdGhlIG1haW4gc2NyaXB0aW5nIGZlYXR1cmVzLgorCitFVkVOVCBIQU5ETEVSUworLS0tLS0tLS0tLS0tLS0KKworV2hlbiBwZXJmIHRyYWNlIGlzIGludm9rZWQgdXNpbmcgYSB0cmFjZSBzY3JpcHQsIGEgdXNlci1kZWZpbmVkCisnaGFuZGxlciBmdW5jdGlvbicgaXMgY2FsbGVkIGZvciBlYWNoIGV2ZW50IGluIHRoZSB0cmFjZS4gIElmIHRoZXJlJ3MKK25vIGhhbmRsZXIgZnVuY3Rpb24gZGVmaW5lZCBmb3IgYSBnaXZlbiBldmVudCB0eXBlLCB0aGUgZXZlbnQgaXMKK2lnbm9yZWQgKG9yIHBhc3NlZCB0byBhICd0cmFjZV9oYW5kbGVkJyBmdW5jdGlvbiwgc2VlIGJlbG93KSBhbmQgdGhlCituZXh0IGV2ZW50IGlzIHByb2Nlc3NlZC4KKworTW9zdCBvZiB0aGUgZXZlbnQncyBmaWVsZCB2YWx1ZXMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gdGhlCitoYW5kbGVyIGZ1bmN0aW9uOyBzb21lIG9mIHRoZSBsZXNzIGNvbW1vbiBvbmVzIGFyZW4ndCAtIHRob3NlIGFyZQorYXZhaWxhYmxlIGFzIGNhbGxzIGJhY2sgaW50byB0aGUgcGVyZiBleGVjdXRhYmxlIChzZWUgYmVsb3cpLgorCitBcyBhbiBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHBlcmYgcmVjb3JkIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gcmVjb3JkCithbGwgc2NoZWRfd2FrZXVwIGV2ZW50cyBpbiB0aGUgc3lzdGVtOgorCisgIyBwZXJmIHJlY29yZCAtYyAxIC1mIC1hIC1NIC1SIC1lIHNjaGVkOnNjaGVkX3dha2V1cAorCitUcmFjZXMgbWVhbnQgdG8gYmUgcHJvY2Vzc2VkIHVzaW5nIGEgc2NyaXB0IHNob3VsZCBiZSByZWNvcmRlZCB3aXRoCit0aGUgYWJvdmUgb3B0aW9uczogLWMgMSBzYXlzIHRvIHNhbXBsZSBldmVyeSBldmVudCwgLWEgdG8gZW5hYmxlCitzeXN0ZW0td2lkZSBjb2xsZWN0aW9uLCAtTSB0byBtdWx0aXBsZXggdGhlIG91dHB1dCwgYW5kIC1SIHRvIGNvbGxlY3QKK3JhdyBzYW1wbGVzLgorCitUaGUgZm9ybWF0IGZpbGUgZm9yIHRoZSBzY2hlZF93YWtlcCBldmVudCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZmllbGRzCisoc2VlIC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzL3NjaGVkL3NjaGVkX3dha2V1cC9mb3JtYXQpOgorCistLS0tCisgZm9ybWF0OgorICAgICAgICBmaWVsZDp1bnNpZ25lZCBzaG9ydCBjb21tb25fdHlwZTsKKyAgICAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fZmxhZ3M7CisgICAgICAgIGZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX3ByZWVtcHRfY291bnQ7CisgICAgICAgIGZpZWxkOmludCBjb21tb25fcGlkOworICAgICAgICBmaWVsZDppbnQgY29tbW9uX2xvY2tfZGVwdGg7CisKKyAgICAgICAgZmllbGQ6Y2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOworICAgICAgICBmaWVsZDpwaWRfdCBwaWQ7CisgICAgICAgIGZpZWxkOmludCBwcmlvOworICAgICAgICBmaWVsZDppbnQgc3VjY2VzczsKKyAgICAgICAgZmllbGQ6aW50IHRhcmdldF9jcHU7CistLS0tCisKK1RoZSBoYW5kbGVyIGZ1bmN0aW9uIGZvciB0aGlzIGV2ZW50IHdvdWxkIGJlIGRlZmluZWQgYXM6CisKKy0tLS0KK2RlZiBzY2hlZF9fc2NoZWRfd2FrZXVwKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLAorICAgICAgIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisgICAgICAgY29tbSwgcGlkLCBwcmlvLCBzdWNjZXNzLCB0YXJnZXRfY3B1KToKKyAgICAgICBwYXNzCistLS0tCisKK1RoZSBoYW5kbGVyIGZ1bmN0aW9uIHRha2VzIHRoZSBmb3JtIHN1YnN5c3RlbV9fZXZlbnRfbmFtZS4KKworVGhlIGNvbW1vbl8qIGFyZ3VtZW50cyBpbiB0aGUgaGFuZGxlcidzIGFyZ3VtZW50IGxpc3QgYXJlIHRoZSBzZXQgb2YKK2FyZ3VtZW50cyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzOyBzb21lIG9mIHRoZSBmaWVsZHMgY29ycmVzcG9uZAordG8gdGhlIGNvbW1vbl8qIGZpZWxkcyBpbiB0aGUgZm9ybWF0IGZpbGUsIGJ1dCBzb21lIGFyZSBzeW50aGVzaXplZCwKK2FuZCBzb21lIG9mIHRoZSBjb21tb25fKiBmaWVsZHMgYXJlbid0IGNvbW1vbiBlbm91Z2ggdG8gdG8gYmUgcGFzc2VkCit0byBldmVyeSBldmVudCBhcyBhcmd1bWVudHMgYnV0IGFyZSBhdmFpbGFibGUgYXMgbGlicmFyeSBmdW5jdGlvbnMuCisKK0hlcmUncyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggb2YgdGhlIGludmFyaWFudCBldmVudCBhcmdzOgorCisgZXZlbnRfbmFtZSAJICAJICAgIHRoZSBuYW1lIG9mIHRoZSBldmVudCBhcyB0ZXh0CisgY29udGV4dAkJICAgIGFuIG9wYXF1ZSAnY29va2llJyB1c2VkIGluIGNhbGxzIGJhY2sgaW50byBwZXJmCisgY29tbW9uX2NwdQkJICAgIHRoZSBjcHUgdGhlIGV2ZW50IG9jY3VycmVkIG9uCisgY29tbW9uX3NlY3MJCSAgICB0aGUgc2VjcyBwb3J0aW9uIG9mIHRoZSBldmVudCB0aW1lc3RhbXAKKyBjb21tb25fbnNlY3MJCSAgICB0aGUgbnNlY3MgcG9ydGlvbiBvZiB0aGUgZXZlbnQgdGltZXN0YW1wCisgY29tbW9uX3BpZAkJICAgIHRoZSBwaWQgb2YgdGhlIGN1cnJlbnQgdGFzaworIGNvbW1vbl9jb21tCQkgICAgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcworCitBbGwgb2YgdGhlIHJlbWFpbmluZyBmaWVsZHMgaW4gdGhlIGV2ZW50J3MgZm9ybWF0IGZpbGUgaGF2ZQorY291bnRlcnBhcnRzIGFzIGhhbmRsZXIgZnVuY3Rpb24gYXJndW1lbnRzIG9mIHRoZSBzYW1lIG5hbWUsIGFzIGNhbiBiZQorc2VlbiBpbiB0aGUgZXhhbXBsZSBhYm92ZS4KKworVGhlIGFib3ZlIHByb3ZpZGVzIHRoZSBiYXNpY3MgbmVlZGVkIHRvIGRpcmVjdGx5IGFjY2VzcyBldmVyeSBmaWVsZCBvZgorZXZlcnkgZXZlbnQgaW4gYSB0cmFjZSwgd2hpY2ggY292ZXJzIDkwJSBvZiB3aGF0IHlvdSBuZWVkIHRvIGtub3cgdG8KK3dyaXRlIGEgdXNlZnVsIHRyYWNlIHNjcmlwdC4gIFRoZSBzZWN0aW9ucyBiZWxvdyBjb3ZlciB0aGUgcmVzdC4KKworU0NSSVBUIExBWU9VVAorLS0tLS0tLS0tLS0tLQorCitFdmVyeSBwZXJmIHRyYWNlIFB5dGhvbiBzY3JpcHQgc2hvdWxkIHN0YXJ0IGJ5IHNldHRpbmcgdXAgYSBQeXRob24KK21vZHVsZSBzZWFyY2ggcGF0aCBhbmQgJ2ltcG9ydCdpbmcgYSBmZXcgc3VwcG9ydCBtb2R1bGVzIChzZWUgbW9kdWxlCitkZXNjcmlwdGlvbnMgYmVsb3cpOgorCistLS0tCisgaW1wb3J0IG9zCisgaW1wb3J0IHN5cworCisgc3lzLnBhdGguYXBwZW5kKG9zLmVudmlyb25bJ1BFUkZfRVhFQ19QQVRIJ10gKyBcCisJICAgICAgJy9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnKQorCisgZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKKyBmcm9tIENvcmUgaW1wb3J0ICoKKy0tLS0KKworVGhlIHJlc3Qgb2YgdGhlIHNjcmlwdCBjYW4gY29udGFpbiBoYW5kbGVyIGZ1bmN0aW9ucyBhbmQgc3VwcG9ydAorZnVuY3Rpb25zIGluIGFueSBvcmRlci4KKworQXNpZGUgZnJvbSB0aGUgZXZlbnQgaGFuZGxlciBmdW5jdGlvbnMgZGlzY3Vzc2VkIGFib3ZlLCBldmVyeSBzY3JpcHQKK2NhbiBpbXBsZW1lbnQgYSBzZXQgb2Ygb3B0aW9uYWwgZnVuY3Rpb25zOgorCisqdHJhY2VfYmVnaW4qLCBpZiBkZWZpbmVkLCBpcyBjYWxsZWQgYmVmb3JlIGFueSBldmVudCBpcyBwcm9jZXNzZWQgYW5kCitnaXZlcyBzY3JpcHRzIGEgY2hhbmNlIHRvIGRvIHNldHVwIHRhc2tzOgorCistLS0tCitkZWYgdHJhY2VfYmVnaW46CisgICAgcGFzcworLS0tLQorCisqdHJhY2VfZW5kKiwgaWYgZGVmaW5lZCwgaXMgY2FsbGVkIGFmdGVyIGFsbCBldmVudHMgaGF2ZSBiZWVuCisgcHJvY2Vzc2VkIGFuZCBnaXZlcyBzY3JpcHRzIGEgY2hhbmNlIHRvIGRvIGVuZC1vZi1zY3JpcHQgdGFza3MsIHN1Y2gKKyBhcyBkaXNwbGF5IHJlc3VsdHM6CisKKy0tLS0KK2RlZiB0cmFjZV9lbmQ6CisgICAgcGFzcworLS0tLQorCisqdHJhY2VfdW5oYW5kbGVkKiwgaWYgZGVmaW5lZCwgaXMgY2FsbGVkIGFmdGVyIGZvciBhbnkgZXZlbnQgdGhhdAorIGRvZXNuJ3QgaGF2ZSBhIGhhbmRsZXIgZXhwbGljaXRseSBkZWZpbmVkIGZvciBpdC4gIFRoZSBzdGFuZGFyZCBzZXQKKyBvZiBjb21tb24gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW50byBpdDoKKworLS0tLQorZGVmIHRyYWNlX3VuaGFuZGxlZChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LCBjb21tb25fc2VjcywKKyAgICAgICAgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSk6CisgICAgcGFzcworLS0tLQorCitUaGUgcmVtYWluaW5nIHNlY3Rpb25zIHByb3ZpZGUgZGVzY3JpcHRpb25zIG9mIGVhY2ggb2YgdGhlIGF2YWlsYWJsZQorYnVpbHQtaW4gcGVyZiB0cmFjZSBQeXRob24gbW9kdWxlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBmdW5jdGlvbnMuCisKK0FWQUlMQUJMRSBNT0RVTEVTIEFORCBGVU5DVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSB0aGUgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgYXZhaWxhYmxlCit2aWEgdGhlIHZhcmlvdXMgcGVyZiB0cmFjZSBQeXRob24gbW9kdWxlcy4gIFRvIHVzZSB0aGUgZnVuY3Rpb25zIGFuZAordmFyaWFibGVzIGZyb20gdGhlIGdpdmVuIG1vZHVsZSwgYWRkIHRoZSBjb3JyZXNwb25kaW5nICdmcm9tIFhYWFgKK2ltcG9ydCcgbGluZSB0byB5b3VyIHBlcmYgdHJhY2Ugc2NyaXB0LgorCitDb3JlLnB5IE1vZHVsZQorfn5+fn5+fn5+fn5+fn4KKworVGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgc29tZSBlc3NlbnRpYWwgZnVuY3Rpb25zIHRvIHVzZXIgc2NyaXB0cy4KKworVGhlICpmbGFnX3N0ciogYW5kICpzeW1ib2xfc3RyKiBmdW5jdGlvbnMgcHJvdmlkZSBodW1hbi1yZWFkYWJsZQorc3RyaW5ncyBmb3IgZmxhZyBhbmQgc3ltYm9saWMgZmllbGRzLiAgVGhlc2UgY29ycmVzcG9uZCB0byB0aGUgc3RyaW5ncworYW5kIHZhbHVlcyBwYXJzZWQgZnJvbSB0aGUgJ3ByaW50IGZtdCcgZmllbGRzIG9mIHRoZSBldmVudCBmb3JtYXQKK2ZpbGVzOgorCisgIGZsYWdfc3RyKGV2ZW50X25hbWUsIGZpZWxkX25hbWUsIGZpZWxkX3ZhbHVlKSAtIHJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRpb24gY29ycmVzcG9uZGluZyB0byBmaWVsZF92YWx1ZSBmb3IgdGhlIGZsYWcgZmllbGQgZmllbGRfbmFtZSBvZiBldmVudCBldmVudF9uYW1lCisgIHN5bWJvbF9zdHIoZXZlbnRfbmFtZSwgZmllbGRfbmFtZSwgZmllbGRfdmFsdWUpIC0gcmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGlvbiBjb3JyZXNwb25kaW5nIHRvIGZpZWxkX3ZhbHVlIGZvciB0aGUgc3ltYm9saWMgZmllbGQgZmllbGRfbmFtZSBvZiBldmVudCBldmVudF9uYW1lCisKK1RoZSAqYXV0b2RpY3QqIGZ1bmN0aW9uIHJldHVybnMgYSBzcGVjaWFsIHNwZWNpYWwga2luZCBvZiBQeXRob24KK2RpY3Rpb25hcnkgdGhhdCBpbXBsZW1lbnRzIFBlcmwncyAnYXV0b3ZpdmlmeWluZycgaGFzaGVzIGluIFB5dGhvbgoraS5lLiB3aXRoIGF1dG92aXZpZnlpbmcgaGFzaGVzLCB5b3UgY2FuIGFzc2lnbiBuZXN0ZWQgaGFzaCB2YWx1ZXMKK3dpdGhvdXQgaGF2aW5nIHRvIGdvIHRvIHRoZSB0cm91YmxlIG9mIGNyZWF0aW5nIGludGVybWVkaWF0ZSBsZXZlbHMgaWYKK3RoZXkgZG9uJ3QgZXhpc3QuCisKKyAgYXV0b2RpY3QoKSAtIHJldHVybnMgYW4gYXV0b3ZpdmlmeWluZyBkaWN0aW9uYXJ5IGluc3RhbmNlCisKKworcGVyZl90cmFjZV9jb250ZXh0IE1vZHVsZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitTb21lIG9mIHRoZSAnY29tbW9uJyBmaWVsZHMgaW4gdGhlIGV2ZW50IGZvcm1hdCBmaWxlIGFyZW4ndCBhbGwgdGhhdAorY29tbW9uLCBidXQgbmVlZCB0byBiZSBtYWRlIGFjY2Vzc2libGUgdG8gdXNlciBzY3JpcHRzIG5vbmV0aGVsZXNzLgorCitwZXJmX3RyYWNlX2NvbnRleHQgZGVmaW5lcyBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0bworYWNjZXNzIHRoaXMgZGF0YSBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBldmVudC4gIEVhY2ggb2YgdGhlc2UKK2Z1bmN0aW9ucyBleHBlY3RzIGEgY29udGV4dCB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlCitjb250ZXh0IHZhcmlhYmxlIHBhc3NlZCBpbnRvIGV2ZXJ5IGV2ZW50IGhhbmRsZXIgYXMgdGhlIHNlY29uZAorYXJndW1lbnQuCisKKyBjb21tb25fcGMoY29udGV4dCkgLSByZXR1cm5zIGNvbW1vbl9wcmVlbXB0IGNvdW50IGZvciB0aGUgY3VycmVudCBldmVudAorIGNvbW1vbl9mbGFncyhjb250ZXh0KSAtIHJldHVybnMgY29tbW9uX2ZsYWdzIGZvciB0aGUgY3VycmVudCBldmVudAorIGNvbW1vbl9sb2NrX2RlcHRoKGNvbnRleHQpIC0gcmV0dXJucyBjb21tb25fbG9ja19kZXB0aCBmb3IgdGhlIGN1cnJlbnQgZXZlbnQKKworVXRpbC5weSBNb2R1bGUKK35+fn5+fn5+fn5+fn5+CisKK1ZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHVzZSB3aXRoIHBlcmYgdHJhY2U6CisKKyAgbnNlY3Moc2VjcywgbnNlY3MpIC0gcmV0dXJucyB0b3RhbCBuc2VjcyBnaXZlbiBzZWNzL25zZWNzIHBhaXIKKyAgbnNlY3Nfc2Vjcyhuc2VjcykgLSByZXR1cm5zIHdob2xlIHNlY3MgcG9ydGlvbiBnaXZlbiBuc2VjcworICBuc2Vjc19uc2Vjcyhuc2VjcykgLSByZXR1cm5zIG5zZWNzIHJlbWFpbmRlciBnaXZlbiBuc2VjcworICBuc2Vjc19zdHIobnNlY3MpIC0gcmV0dXJucyBwcmludGFibGUgc3RyaW5nIGluIHRoZSBmb3JtIHNlY3MubnNlY3MKKyAgYXZnKHRvdGFsLCBuKSAtIHJldHVybnMgYXZlcmFnZSBnaXZlbiBhIHN1bSBhbmQgYSB0b3RhbCBudW1iZXIgb2YgdmFsdWVzCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua3BlcmY6cGVyZi10cmFjZVsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdHJhY2UudHh0CmluZGV4IDYwZTU5MDAuLjg4NzkyOTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRyYWNlLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10cmFjZS50eHQKQEAgLTE5LDYgKzE5LDExIEBACiAgICdwZXJmIHRyYWNlJyB0byBzZWUgYSBkZXRhaWxlZCB0cmFjZSBvZiB0aGUgd29ya2xvYWQgdGhhdCB3YXMKICAgcmVjb3JkZWQuCiAKKyAgWW91IGNhbiBhbHNvIHJ1biBhIHNldCBvZiBwcmUtY2FubmVkIHNjcmlwdHMgdGhhdCBhZ2dyZWdhdGUgYW5kCisgIHN1bW1hcml6ZSB0aGUgcmF3IHRyYWNlIGRhdGEgaW4gdmFyaW91cyB3YXlzICh0aGUgbGlzdCBvZiBzY3JpcHRzIGlzCisgIGF2YWlsYWJsZSB2aWEgJ3BlcmYgdHJhY2UgLWwnKS4gIFRoZSBmb2xsb3dpbmcgdmFyaWFudHMgYWxsb3cgeW91IHRvCisgIHJlY29yZCBhbmQgcnVuIHRob3NlIHNjcmlwdHM6CisKICAgJ3BlcmYgdHJhY2UgcmVjb3JkIDxzY3JpcHQ+JyB0byByZWNvcmQgdGhlIGV2ZW50cyByZXF1aXJlZCBmb3IgJ3BlcmYKICAgdHJhY2UgcmVwb3J0Jy4gIDxzY3JpcHQ+IGlzIHRoZSBuYW1lIGRpc3BsYXllZCBpbiB0aGUgb3V0cHV0IG9mCiAgICdwZXJmIHRyYWNlIC0tbGlzdCcgaS5lLiB0aGUgYWN0dWFsIHNjcmlwdCBuYW1lIG1pbnVzIGFueSBsYW5ndWFnZQpAQCAtMzEsNiArMzYsOSBAQAogICByZWNvcmQgPHNjcmlwdD4nIGlzIHVzZWQgYW5kIHNob3VsZCBiZSBwcmVzZW50IGZvciB0aGlzIGNvbW1hbmQgdG8KICAgc3VjY2VlZC4KIAorICBTZWUgdGhlICdTRUUgQUxTTycgc2VjdGlvbiBmb3IgbGlua3MgdG8gbGFuZ3VhZ2Utc3BlY2lmaWMKKyAgaW5mb3JtYXRpb24gb24gaG93IHRvIHdyaXRlIGFuZCBydW4geW91ciBvd24gdHJhY2Ugc2NyaXB0cy4KKwogT1BUSU9OUwogLS0tLS0tLQogLUQ6OgpAQCAtNDUsOSArNTMsMTEgQEAKIC0tbGlzdD06OgogICAgICAgICBEaXNwbGF5IGEgbGlzdCBvZiBhdmFpbGFibGUgdHJhY2Ugc2NyaXB0cy4KIAotLXM6OgorLXMgWydsYW5nJ106OgogLS1zY3JpcHQ9OjoKICAgICAgICAgUHJvY2VzcyB0cmFjZSBkYXRhIHdpdGggdGhlIGdpdmVuIHNjcmlwdCAoW2xhbmddOnNjcmlwdFsuZXh0XSkuCisJSWYgdGhlIHN0cmluZyAnbGFuZycgaXMgc3BlY2lmaWVkIGluIHBsYWNlIG9mIGEgc2NyaXB0IG5hbWUsIGEKKyAgICAgICAgbGlzdCBvZiBzdXBwb3J0ZWQgbGFuZ3VhZ2VzIHdpbGwgYmUgZGlzcGxheWVkIGluc3RlYWQuCiAKIC1nOjoKIC0tZ2VuLXNjcmlwdD06OgpAQCAtNTYsNCArNjYsNSBAQAogCiBTRUUgQUxTTwogLS0tLS0tLS0KLWxpbmtwZXJmOnBlcmYtcmVjb3JkWzFdLCBsaW5rcGVyZjpwZXJmLXRyYWNlLXBlcmxbMV0KK2xpbmtwZXJmOnBlcmYtcmVjb3JkWzFdLCBsaW5rcGVyZjpwZXJmLXRyYWNlLXBlcmxbMV0sCitsaW5rcGVyZjpwZXJmLXRyYWNlLXB5dGhvblsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYudHh0CmluZGV4IDY5YzgzMjUuLjBlZWIyNDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi50eHQKQEAgLTEyLDcgKzEyLDcgQEAKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1QZXJmb3JtYW5jZSBjb3VudGVycyBmb3IgTGludXggYXJlIGFyZSBhIG5ldyBrZXJuZWwtYmFzZWQgc3Vic3lzdGVtCitQZXJmb3JtYW5jZSBjb3VudGVycyBmb3IgTGludXggYXJlIGEgbmV3IGtlcm5lbC1iYXNlZCBzdWJzeXN0ZW0KIHRoYXQgcHJvdmlkZSBhIGZyYW1ld29yayBmb3IgYWxsIHRoaW5ncyBwZXJmb3JtYW5jZSBhbmFseXNpcy4gSXQKIGNvdmVycyBoYXJkd2FyZSBsZXZlbCAoQ1BVL1BNVSwgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0KSBmZWF0dXJlcwogYW5kIHNvZnR3YXJlIGZlYXR1cmVzIChzb2Z0d2FyZSBjb3VudGVycywgdHJhY2Vwb2ludHMpIGFzIHdlbGwuCmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQppbmRleCAyZTdmYTNhLi41NGE1YjUwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlCisrKyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKQEAgLTI4NiwxMSArMjg2LDcgQEAKIFNDUklQVF9TSCA9CiBURVNUX1BST0dSQU1TID0KIAotIwotIyBObyBzY3JpcHRzIHJpZ2h0IG5vdzoKLSMKLQotIyBTQ1JJUFRfU0ggKz0gcGVyZi1hbS5zaAorU0NSSVBUX1NIICs9IHBlcmYtYXJjaGl2ZS5zaAogCiAjCiAjIE5vIFBlcmwgc2NyaXB0cyByaWdodCBub3c6CkBAIC0zMTUsOSArMzExLDYgQEAKICMgTGlzdCBidWlsdC1pbiBjb21tYW5kICRDIHdob3NlIGltcGxlbWVudGF0aW9uIGNtZF8kQygpIGlzIG5vdCBpbgogIyBidWlsdGluLSRDLm8gYnV0IGlzIGxpbmtlZCBpbiBhcyBwYXJ0IG9mIHNvbWUgb3RoZXIgY29tbWFuZC4KICMKLSMgTm9uZSByaWdodCBub3c6Ci0jCi0jIEJVSUxUX0lOUyArPSBwZXJmLWluaXQgJFgKIAogIyB3aGF0ICdhbGwnIHdpbGwgYnVpbGQgYW5kICdpbnN0YWxsJyB3aWxsIGluc3RhbGwsIGluIHBlcmZleGVjZGlyCiBBTExfUFJPR1JBTVMgPSAkKFBST0dSQU1TKSAkKFNDUklQVFMpCkBAIC0zNDAsNiArMzMzLDcgQEAKIExJQl9IICs9IC4uLy4uL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCiBMSUJfSCArPSAuLi8uLi9pbmNsdWRlL2xpbnV4L3JidHJlZS5oCiBMSUJfSCArPSAuLi8uLi9pbmNsdWRlL2xpbnV4L2xpc3QuaAorTElCX0ggKz0gLi4vLi4vaW5jbHVkZS9saW51eC9oYXNoLmgKIExJQl9IICs9IC4uLy4uL2luY2x1ZGUvbGludXgvc3RyaW5naWZ5LmgKIExJQl9IICs9IHV0aWwvaW5jbHVkZS9saW51eC9iaXRtYXAuaAogTElCX0ggKz0gdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCkBAIC0zNjMsMTIgKzM1NywxNCBAQAogTElCX0ggKz0gcGVyZi5oCiBMSUJfSCArPSB1dGlsL2NhY2hlLmgKIExJQl9IICs9IHV0aWwvY2FsbGNoYWluLmgKK0xJQl9IICs9IHV0aWwvYnVpbGQtaWQuaAogTElCX0ggKz0gdXRpbC9kZWJ1Zy5oCiBMSUJfSCArPSB1dGlsL2RlYnVnZnMuaAogTElCX0ggKz0gdXRpbC9ldmVudC5oCiBMSUJfSCArPSB1dGlsL2V4ZWNfY21kLmgKIExJQl9IICs9IHV0aWwvdHlwZXMuaAogTElCX0ggKz0gdXRpbC9sZXZlbnNodGVpbi5oCitMSUJfSCArPSB1dGlsL21hcC5oCiBMSUJfSCArPSB1dGlsL3BhcnNlLW9wdGlvbnMuaAogTElCX0ggKz0gdXRpbC9wYXJzZS1ldmVudHMuaAogTElCX0ggKz0gdXRpbC9xdW90ZS5oCkBAIC0zODksMTIgKzM4NSwxMiBAQAogTElCX0ggKz0gdXRpbC9oaXN0LmgKIExJQl9IICs9IHV0aWwvdGhyZWFkLmgKIExJQl9IICs9IHV0aWwvdHJhY2UtZXZlbnQuaAotTElCX0ggKz0gdXRpbC90cmFjZS1ldmVudC1wZXJsLmgKIExJQl9IICs9IHV0aWwvcHJvYmUtZmluZGVyLmgKIExJQl9IICs9IHV0aWwvcHJvYmUtZXZlbnQuaAogCiBMSUJfT0JKUyArPSB1dGlsL2Fic3BhdGgubwogTElCX09CSlMgKz0gdXRpbC9hbGlhcy5vCitMSUJfT0JKUyArPSB1dGlsL2J1aWxkLWlkLm8KIExJQl9PQkpTICs9IHV0aWwvY29uZmlnLm8KIExJQl9PQkpTICs9IHV0aWwvY3R5cGUubwogTElCX09CSlMgKz0gdXRpbC9kZWJ1Z2ZzLm8KQEAgLTQzMSwxMiArNDI3LDEyIEBACiBMSUJfT0JKUyArPSB1dGlsL3RyYWNlLWV2ZW50LXBhcnNlLm8KIExJQl9PQkpTICs9IHV0aWwvdHJhY2UtZXZlbnQtcmVhZC5vCiBMSUJfT0JKUyArPSB1dGlsL3RyYWNlLWV2ZW50LWluZm8ubwotTElCX09CSlMgKz0gdXRpbC90cmFjZS1ldmVudC1wZXJsLm8KK0xJQl9PQkpTICs9IHV0aWwvdHJhY2UtZXZlbnQtc2NyaXB0aW5nLm8KIExJQl9PQkpTICs9IHV0aWwvc3ZnaGVscGVyLm8KIExJQl9PQkpTICs9IHV0aWwvc29ydC5vCiBMSUJfT0JKUyArPSB1dGlsL2hpc3QubwotTElCX09CSlMgKz0gdXRpbC9kYXRhX21hcC5vCiBMSUJfT0JKUyArPSB1dGlsL3Byb2JlLWV2ZW50Lm8KK0xJQl9PQkpTICs9IHV0aWwvdXRpbC5vCiAKIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWFubm90YXRlLm8KIApAQCAtNDUxLDYgKzQ0Nyw3IEBACiBCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1oZWxwLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXNjaGVkLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWJ1aWxkaWQtbGlzdC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi1idWlsZGlkLWNhY2hlLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWxpc3QubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tcmVjb3JkLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXJlcG9ydC5vCkBAIC00NjAsNiArNDU3LDcgQEAKIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXRyYWNlLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLXByb2JlLm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWttZW0ubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tbG9jay5vCiAKIFBFUkZMSUJTID0gJChMSUJfRklMRSkKIApAQCAtNTIwLDkgKzUxOCwyMyBAQAogCUJBU0lDX0NGTEFHUyArPSAtRE5PX0xJQlBFUkwKIGVsc2UKIAlBTExfTERGTEFHUyArPSAkKFBFUkxfRU1CRURfTERPUFRTKQorCUxJQl9PQkpTICs9IHV0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5vCiAJTElCX09CSlMgKz0gc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0Lm8KIGVuZGlmCiAKK2lmbmRlZiBOT19MSUJQWVRIT04KK1BZVEhPTl9FTUJFRF9MRE9QVFMgPSBgcHl0aG9uLWNvbmZpZyAtLWxkZmxhZ3MgMj4vZGV2L251bGxgCitQWVRIT05fRU1CRURfQ0NPUFRTID0gYHB5dGhvbi1jb25maWcgLS1jZmxhZ3MgMj4vZGV2L251bGxgCitlbmRpZgorCitpZm5lcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8UHl0aG9uLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBQeV9Jbml0aWFsaXplKCk7IHJldHVybiAwOyB9JykgfCAkKENDKSAteCBjIC0gJChQWVRIT05fRU1CRURfQ0NPUFRTKSAtbyAvZGV2L251bGwgJChQWVRIT05fRU1CRURfTERPUFRTKSA+IC9kZXYvbnVsbCAyPiYxICYmIGVjaG8geSIpLCB5KQorCUJBU0lDX0NGTEFHUyArPSAtRE5PX0xJQlBZVEhPTgorZWxzZQorCUFMTF9MREZMQUdTICs9ICQoUFlUSE9OX0VNQkVEX0xET1BUUykKKwlMSUJfT0JKUyArPSB1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5vCisJTElCX09CSlMgKz0gc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQubworZW5kaWYKKwogaWZkZWYgTk9fREVNQU5HTEUKIAlCQVNJQ19DRkxBR1MgKz0gLUROT19ERU1BTkdMRQogZWxzZQpAQCAtODk0LDEyICs5MDYsMTggQEAKIHV0aWwvZmluZF9uZXh0X2JpdC5vOiAuLi8uLi9saWIvZmluZF9uZXh0X2JpdC5jIFBFUkYtQ0ZMQUdTCiAJJChRVUlFVF9DQykkKENDKSAtbyB1dGlsL2ZpbmRfbmV4dF9iaXQubyAtYyAkKEFMTF9DRkxBR1MpIC1ERVRDX1BFUkZDT05GSUc9JyIkKEVUQ19QRVJGQ09ORklHX1NRKSInICQ8CiAKLXV0aWwvdHJhY2UtZXZlbnQtcGVybC5vOiB1dGlsL3RyYWNlLWV2ZW50LXBlcmwuYyBQRVJGLUNGTEFHUwotCSQoUVVJRVRfQ0MpJChDQykgLW8gdXRpbC90cmFjZS1ldmVudC1wZXJsLm8gLWMgJChBTExfQ0ZMQUdTKSAkKFBFUkxfRU1CRURfQ0NPUFRTKSAtV25vLXJlZHVuZGFudC1kZWNscyAtV25vLXN0cmljdC1wcm90b3R5cGVzIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLXNoYWRvdyAkPAordXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLm86IHV0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcGVybC5jIFBFUkYtQ0ZMQUdTCisJJChRVUlFVF9DQykkKENDKSAtbyB1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwubyAtYyAkKEFMTF9DRkxBR1MpICQoUEVSTF9FTUJFRF9DQ09QVFMpIC1Xbm8tcmVkdW5kYW50LWRlY2xzIC1Xbm8tc3RyaWN0LXByb3RvdHlwZXMgLVduby11bnVzZWQtcGFyYW1ldGVyIC1Xbm8tc2hhZG93ICQ8CiAKIHNjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5vOiBzY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYyBQRVJGLUNGTEFHUwogCSQoUVVJRVRfQ0MpJChDQykgLW8gc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0Lm8gLWMgJChBTExfQ0ZMQUdTKSAkKFBFUkxfRU1CRURfQ0NPUFRTKSAtV25vLXJlZHVuZGFudC1kZWNscyAtV25vLXN0cmljdC1wcm90b3R5cGVzIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLW5lc3RlZC1leHRlcm5zICQ8CiAKK3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLm86IHV0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLmMgUEVSRi1DRkxBR1MKKwkkKFFVSUVUX0NDKSQoQ0MpIC1vIHV0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLm8gLWMgJChBTExfQ0ZMQUdTKSAkKFBZVEhPTl9FTUJFRF9DQ09QVFMpIC1Xbm8tcmVkdW5kYW50LWRlY2xzIC1Xbm8tc3RyaWN0LXByb3RvdHlwZXMgLVduby11bnVzZWQtcGFyYW1ldGVyIC1Xbm8tc2hhZG93ICQ8CisKK3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0Lm86IHNjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMgUEVSRi1DRkxBR1MKKwkkKFFVSUVUX0NDKSQoQ0MpIC1vIHNjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0Lm8gLWMgJChBTExfQ0ZMQUdTKSAkKFBZVEhPTl9FTUJFRF9DQ09QVFMpIC1Xbm8tcmVkdW5kYW50LWRlY2xzIC1Xbm8tc3RyaWN0LXByb3RvdHlwZXMgLVduby11bnVzZWQtcGFyYW1ldGVyIC1Xbm8tbmVzdGVkLWV4dGVybnMgJDwKKwogcGVyZi0lJFg6ICUubyAkKFBFUkZMSUJTKQogCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpICQoZmlsdGVyICUubywkXikgJChMSUJTKQogCkBAIC0xMDA5LDkgKzEwMjcsMTYgQEAKIAkkKElOU1RBTEwpIHBlcmYkWCAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScKIAkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScKIAkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9wZXJsL2JpbicKKwkkKElOU1RBTEwpIHBlcmYtYXJjaGl2ZSAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSknCiAJJChJTlNUQUxMKSBzY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlLyogLXQgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnCiAJJChJTlNUQUxMKSBzY3JpcHRzL3BlcmwvKi5wbCAtdCAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSkvc2NyaXB0cy9wZXJsJwogCSQoSU5TVEFMTCkgc2NyaXB0cy9wZXJsL2Jpbi8qIC10ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3BlcmwvYmluJworCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKHBlcmZleGVjX2luc3RkaXJfU1EpL3NjcmlwdHMvcHl0aG9uL2JpbicKKwkkKElOU1RBTEwpIHNjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS8qIC10ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnCisJJChJTlNUQUxMKSBzY3JpcHRzL3B5dGhvbi8qLnB5IC10ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3B5dGhvbicKKwkkKElOU1RBTEwpIHNjcmlwdHMvcHl0aG9uL2Jpbi8qIC10ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKS9zY3JpcHRzL3B5dGhvbi9iaW4nCisKIGlmZGVmIEJVSUxUX0lOUwogCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKScKIAkkKElOU1RBTEwpICQoQlVJTFRfSU5TKSAnJChERVNURElSX1NRKSQocGVyZmV4ZWNfaW5zdGRpcl9TUSknCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCmluZGV4IDU5M2ZmMjUuLjVlYzVkZTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1hbm5vdGF0ZS5jCkBAIC01MywzMiArNTMsMjAgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN5bV9oaXN0X2ZpbHRlcjsKIAotc3RhdGljIGludCBzeW1ib2xfZmlsdGVyKHN0cnVjdCBtYXAgKm1hcCBfX3VzZWQsIHN0cnVjdCBzeW1ib2wgKnN5bSkKK3N0YXRpYyBpbnQgc3ltX19hbGxvY19oaXN0KHN0cnVjdCBzeW1ib2wgKnNlbGYpCiB7Ci0JaWYgKHN5bV9oaXN0X2ZpbHRlciA9PSBOVUxMIHx8Ci0JICAgIHN0cmNtcChzeW0tPm5hbWUsIHN5bV9oaXN0X2ZpbHRlcikgPT0gMCkgewotCQlzdHJ1Y3Qgc3ltX3ByaXYgKnByaXYgPSBzeW1ib2xfX3ByaXYoc3ltKTsKLQkJY29uc3QgaW50IHNpemUgPSAoc2l6ZW9mKCpwcml2LT5oaXN0KSArCi0JCQkJICAoc3ltLT5lbmQgLSBzeW0tPnN0YXJ0KSAqIHNpemVvZih1NjQpKTsKKwlzdHJ1Y3Qgc3ltX3ByaXYgKnByaXYgPSBzeW1ib2xfX3ByaXYoc2VsZik7CisJY29uc3QgaW50IHNpemUgPSAoc2l6ZW9mKCpwcml2LT5oaXN0KSArCisJCQkgIChzZWxmLT5lbmQgLSBzZWxmLT5zdGFydCkgKiBzaXplb2YodTY0KSk7CiAKLQkJcHJpdi0+aGlzdCA9IG1hbGxvYyhzaXplKTsKLQkJaWYgKHByaXYtPmhpc3QpCi0JCQltZW1zZXQocHJpdi0+aGlzdCwgMCwgc2l6ZSk7Ci0JCXJldHVybiAwOwotCX0KLQkvKgotCSAqIEZJWE1FOiBXZSBzaG91bGQgcmVhbGx5IGZpbHRlciBpdCBvdXQsIGFzIHdlIGRvbid0IHdhbnQgdG8gZ28gdGhydSBzeW1ib2xzCi0JICogd2UncmUgbm90IGludGVyZXN0ZWQsIGFuZCBpZiBhIERTTyBlbmRzIHVwIHdpdGggbm8gc3ltYm9scywgZGVsZXRlIGl0IHRvbywKLQkgKiBidXQgcmlnaHQgbm93IHRoZSBrZXJuZWwgbG9hZGluZyByb3V0aW5lcyBpbiBzeW1ib2wuYyBiYWlsIG91dCBpZiBubyBzeW1ib2xzCi0JICogYXJlIGZvdW5kLCBmaXggaXQgbGF0ZXIuCi0JICovCi0JcmV0dXJuIDA7CisJcHJpdi0+aGlzdCA9IHphbGxvYyhzaXplKTsKKwlyZXR1cm4gcHJpdi0+aGlzdCA9PSBOVUxMID8gLTEgOiAwOwogfQogCiAvKgogICogY29sbGVjdCBoaXN0b2dyYW0gY291bnRzCiAgKi8KLXN0YXRpYyB2b2lkIGhpc3RfaGl0KHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwgdTY0IGlwKQorc3RhdGljIGludCBhbm5vdGF0ZV9faGlzdF9oaXQoc3RydWN0IGhpc3RfZW50cnkgKmhlLCB1NjQgaXApCiB7CiAJdW5zaWduZWQgaW50IHN5bV9zaXplLCBvZmZzZXQ7CiAJc3RydWN0IHN5bWJvbCAqc3ltID0gaGUtPnN5bTsKQEAgLTg4LDgzICs3NiwxMjcgQEAKIAloZS0+Y291bnQrKzsKIAogCWlmICghc3ltIHx8ICFoZS0+bWFwKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJcHJpdiA9IHN5bWJvbF9fcHJpdihzeW0pOwotCWlmICghcHJpdi0+aGlzdCkKLQkJcmV0dXJuOworCWlmIChwcml2LT5oaXN0ID09IE5VTEwgJiYgc3ltX19hbGxvY19oaXN0KHN5bSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXN5bV9zaXplID0gc3ltLT5lbmQgLSBzeW0tPnN0YXJ0OwogCW9mZnNldCA9IGlwIC0gc3ltLT5zdGFydDsKIAotCWlmICh2ZXJib3NlKQotCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBpcD0lTHhcbiIsIF9fZnVuY19fLAotCQkJaGUtPm1hcC0+dW5tYXBfaXAoaGUtPm1hcCwgaXApKTsKKwlwcl9kZWJ1ZzMoIiVzOiBpcD0lI0x4XG4iLCBfX2Z1bmNfXywgaGUtPm1hcC0+dW5tYXBfaXAoaGUtPm1hcCwgaXApKTsKIAogCWlmIChvZmZzZXQgPj0gc3ltX3NpemUpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAloID0gcHJpdi0+aGlzdDsKIAloLT5zdW0rKzsKIAloLT5pcFtvZmZzZXRdKys7CiAKLQlpZiAodmVyYm9zZSA+PSAzKQotCQlwcmludGYoIiVwICVzOiBjb3VudCsrIFtpcDogJXAsICUwOEx4XSA9PiAlTGRcbiIsCi0JCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWhlLT5zeW0tPnN0YXJ0LAotCQkJaGUtPnN5bS0+bmFtZSwKLQkJCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpaXAsIGlwIC0gaGUtPnN5bS0+c3RhcnQsCi0JCQloLT5pcFtvZmZzZXRdKTsKKwlwcl9kZWJ1ZzMoIiUjTHggJXM6IGNvdW50KysgW2lwOiAlI0x4LCAlI0x4XSA9PiAlTGRcbiIsIGhlLT5zeW0tPnN0YXJ0LAorCQkgIGhlLT5zeW0tPm5hbWUsIGlwLCBpcCAtIGhlLT5zeW0tPnN0YXJ0LCBoLT5pcFtvZmZzZXRdKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwZXJmX3Nlc3Npb25fX2FkZF9oaXN0X2VudHJ5KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCiAJCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCwgdTY0IGNvdW50KQogewogCWJvb2wgaGl0OwotCXN0cnVjdCBoaXN0X2VudHJ5ICpoZSA9IF9fcGVyZl9zZXNzaW9uX19hZGRfaGlzdF9lbnRyeShzZWxmLCBhbCwgTlVMTCwKLQkJCQkJCQkgICAgICAgY291bnQsICZoaXQpOworCXN0cnVjdCBoaXN0X2VudHJ5ICpoZTsKKworCWlmIChzeW1faGlzdF9maWx0ZXIgIT0gTlVMTCAmJgorCSAgICAoYWwtPnN5bSA9PSBOVUxMIHx8IHN0cmNtcChzeW1faGlzdF9maWx0ZXIsIGFsLT5zeW0tPm5hbWUpICE9IDApKSB7CisJCS8qIFdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBhIHN5bWJvbCBuYW1lZCBzeW1faGlzdF9maWx0ZXIgKi8KKwkJaWYgKGFsLT5zeW0gIT0gTlVMTCkgeworCQkJcmJfZXJhc2UoJmFsLT5zeW0tPnJiX25vZGUsCisJCQkJICZhbC0+bWFwLT5kc28tPnN5bWJvbHNbYWwtPm1hcC0+dHlwZV0pOworCQkJc3ltYm9sX19kZWxldGUoYWwtPnN5bSk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaGUgPSBfX3BlcmZfc2Vzc2lvbl9fYWRkX2hpc3RfZW50cnkoc2VsZiwgYWwsIE5VTEwsIGNvdW50LCAmaGl0KTsKIAlpZiAoaGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JaGlzdF9oaXQoaGUsIGFsLT5hZGRyKTsKLQlyZXR1cm4gMDsKKworCXJldHVybiBhbm5vdGF0ZV9faGlzdF9oaXQoaGUsIGFsLT5hZGRyKTsKIH0KIAogc3RhdGljIGludCBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKIAotCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQ6ICVwXG4iLCBldmVudC0+aGVhZGVyLm1pc2MsCi0JCSAgICBldmVudC0+aXAucGlkLCAodm9pZCAqKShsb25nKWV2ZW50LT5pcC5pcCk7CisJZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZDogJSNMeFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAorCQkgICAgZXZlbnQtPmlwLnBpZCwgZXZlbnQtPmlwLmlwKTsKIAotCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoZXZlbnQsIHNlc3Npb24sICZhbCwgc3ltYm9sX2ZpbHRlcikgPCAwKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCi0JCQlldmVudC0+aGVhZGVyLnR5cGUpOworCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoZXZlbnQsIHNlc3Npb24sICZhbCwgTlVMTCkgPCAwKSB7CisJCXByX3dhcm5pbmcoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAorCQkJICAgZXZlbnQtPmhlYWRlci50eXBlKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCWlmICghYWwuZmlsdGVyZWQgJiYgcGVyZl9zZXNzaW9uX19hZGRfaGlzdF9lbnRyeShzZXNzaW9uLCAmYWwsIDEpKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAicHJvYmxlbSBpbmNyZW1lbnRpbmcgc3ltYm9sIGNvdW50LCAiCi0JCQkJInNraXBwaW5nIGV2ZW50XG4iKTsKKwkJcHJfd2FybmluZygicHJvYmxlbSBpbmNyZW1lbnRpbmcgc3ltYm9sIGNvdW50LCAiCisJCQkgICAic2tpcHBpbmcgZXZlbnRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2VfbGluZShGSUxFICpmaWxlLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsIHU2NCBsZW4pCitzdHJ1Y3Qgb2JqZHVtcF9saW5lIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJczY0CQkgb2Zmc2V0OworCWNoYXIJCSAqbGluZTsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZHVtcF9saW5lICpvYmpkdW1wX2xpbmVfX25ldyhzNjQgb2Zmc2V0LCBjaGFyICpsaW5lKQoreworCXN0cnVjdCBvYmpkdW1wX2xpbmUgKnNlbGYgPSBtYWxsb2Moc2l6ZW9mKCpzZWxmKSk7CisKKwlpZiAoc2VsZiAhPSBOVUxMKSB7CisJCXNlbGYtPm9mZnNldCA9IG9mZnNldDsKKwkJc2VsZi0+bGluZSA9IGxpbmU7CisJfQorCisJcmV0dXJuIHNlbGY7Cit9CisKK3N0YXRpYyB2b2lkIG9iamR1bXBfbGluZV9fZnJlZShzdHJ1Y3Qgb2JqZHVtcF9saW5lICpzZWxmKQoreworCWZyZWUoc2VsZi0+bGluZSk7CisJZnJlZShzZWxmKTsKK30KKworc3RhdGljIHZvaWQgb2JqZHVtcF9fYWRkX2xpbmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IG9iamR1bXBfbGluZSAqbGluZSkKK3sKKwlsaXN0X2FkZF90YWlsKCZsaW5lLT5ub2RlLCBoZWFkKTsKK30KKworc3RhdGljIHN0cnVjdCBvYmpkdW1wX2xpbmUgKm9iamR1bXBfX2dldF9uZXh0X2lwX2xpbmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJCSAgICAgIHN0cnVjdCBvYmpkdW1wX2xpbmUgKnBvcykKK3sKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHBvcywgaGVhZCwgbm9kZSkKKwkJaWYgKHBvcy0+b2Zmc2V0ID49IDApCisJCQlyZXR1cm4gcG9zOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfbGluZShGSUxFICpmaWxlLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUsCisJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IHN5bWJvbCAqc3ltID0gaGUtPnN5bTsKKwlzdHJ1Y3Qgb2JqZHVtcF9saW5lICpvYmpkdW1wX2xpbmU7CiAJY2hhciAqbGluZSA9IE5VTEwsICp0bXAsICp0bXAyOwotCXN0YXRpYyBjb25zdCBjaGFyICpwcmV2X2xpbmU7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKnByZXZfY29sb3I7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKIAlzaXplX3QgbGluZV9sZW47Ci0JdTY0IHN0YXJ0OwotCXM2NCBsaW5lX2lwOwotCWludCByZXQ7CisJczY0IGxpbmVfaXAsIG9mZnNldCA9IC0xOwogCWNoYXIgKmM7CiAKIAlpZiAoZ2V0bGluZSgmbGluZSwgJmxpbmVfbGVuLCBmaWxlKSA8IDApCiAJCXJldHVybiAtMTsKKwogCWlmICghbGluZSkKIAkJcmV0dXJuIC0xOwogCkBAIC0xNzMsOCArMjA1LDYgQEAKIAkJKmMgPSAwOwogCiAJbGluZV9pcCA9IC0xOwotCW9mZnNldCA9IDA7Ci0JcmV0ID0gLTI7CiAKIAkvKgogCSAqIFN0cmlwIGxlYWRpbmcgc3BhY2VzOgpAQCAtMTk1LDkgKzIyNSwzMCBAQAogCQkJbGluZV9pcCA9IC0xOwogCX0KIAotCXN0YXJ0ID0gaGUtPm1hcC0+dW5tYXBfaXAoaGUtPm1hcCwgc3ltLT5zdGFydCk7Ci0KIAlpZiAobGluZV9pcCAhPSAtMSkgeworCQl1NjQgc3RhcnQgPSBtYXBfX3JpcF8yb2JqZHVtcChoZS0+bWFwLCBzeW0tPnN0YXJ0KTsKKwkJb2Zmc2V0ID0gbGluZV9pcCAtIHN0YXJ0OworCX0KKworCW9iamR1bXBfbGluZSA9IG9iamR1bXBfbGluZV9fbmV3KG9mZnNldCwgbGluZSk7CisJaWYgKG9iamR1bXBfbGluZSA9PSBOVUxMKSB7CisJCWZyZWUobGluZSk7CisJCXJldHVybiAtMTsKKwl9CisJb2JqZHVtcF9fYWRkX2xpbmUoaGVhZCwgb2JqZHVtcF9saW5lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9iamR1bXBfbGluZV9fcHJpbnQoc3RydWN0IG9iamR1bXBfbGluZSAqc2VsZiwKKwkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAorCQkJICAgICAgIHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwgdTY0IGxlbikKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBoZS0+c3ltOworCXN0YXRpYyBjb25zdCBjaGFyICpwcmV2X2xpbmU7CisJc3RhdGljIGNvbnN0IGNoYXIgKnByZXZfY29sb3I7CisKKwlpZiAoc2VsZi0+b2Zmc2V0ICE9IC0xKSB7CiAJCWNvbnN0IGNoYXIgKnBhdGggPSBOVUxMOwogCQl1bnNpZ25lZCBpbnQgaGl0cyA9IDA7CiAJCWRvdWJsZSBwZXJjZW50ID0gMC4wOwpAQCAtMjA1LDE1ICsyNTYsMjIgQEAKIAkJc3RydWN0IHN5bV9wcml2ICpwcml2ID0gc3ltYm9sX19wcml2KHN5bSk7CiAJCXN0cnVjdCBzeW1fZXh0ICpzeW1fZXh0ID0gcHJpdi0+ZXh0OwogCQlzdHJ1Y3Qgc3ltX2hpc3QgKmggPSBwcml2LT5oaXN0OworCQlzNjQgb2Zmc2V0ID0gc2VsZi0+b2Zmc2V0OworCQlzdHJ1Y3Qgb2JqZHVtcF9saW5lICpuZXh0ID0gb2JqZHVtcF9fZ2V0X25leHRfaXBfbGluZShoZWFkLCBzZWxmKTsKIAotCQlvZmZzZXQgPSBsaW5lX2lwIC0gc3RhcnQ7Ci0JCWlmIChvZmZzZXQgPCBsZW4pCi0JCQloaXRzID0gaC0+aXBbb2Zmc2V0XTsKKwkJd2hpbGUgKG9mZnNldCA8IChzNjQpbGVuICYmCisJCSAgICAgICAobmV4dCA9PSBOVUxMIHx8IG9mZnNldCA8IG5leHQtPm9mZnNldCkpIHsKKwkJCWlmIChzeW1fZXh0KSB7CisJCQkJaWYgKHBhdGggPT0gTlVMTCkKKwkJCQkJcGF0aCA9IHN5bV9leHRbb2Zmc2V0XS5wYXRoOworCQkJCXBlcmNlbnQgKz0gc3ltX2V4dFtvZmZzZXRdLnBlcmNlbnQ7CisJCQl9IGVsc2UKKwkJCQloaXRzICs9IGgtPmlwW29mZnNldF07CiAKLQkJaWYgKG9mZnNldCA8IGxlbiAmJiBzeW1fZXh0KSB7Ci0JCQlwYXRoID0gc3ltX2V4dFtvZmZzZXRdLnBhdGg7Ci0JCQlwZXJjZW50ID0gc3ltX2V4dFtvZmZzZXRdLnBlcmNlbnQ7Ci0JCX0gZWxzZSBpZiAoaC0+c3VtKQorCQkJKytvZmZzZXQ7CisJCX0KKworCQlpZiAoc3ltX2V4dCA9PSBOVUxMICYmIGgtPnN1bSkKIAkJCXBlcmNlbnQgPSAxMDAuMCAqIGhpdHMgLyBoLT5zdW07CiAKIAkJY29sb3IgPSBnZXRfcGVyY2VudF9jb2xvcihwZXJjZW50KTsKQEAgLTIzNCwxMiArMjkyLDEyIEBACiAKIAkJY29sb3JfZnByaW50ZihzdGRvdXQsIGNvbG9yLCAiICU3LjJmIiwgcGVyY2VudCk7CiAJCXByaW50ZigiIDoJIik7Ci0JCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBQRVJGX0NPTE9SX0JMVUUsICIlc1xuIiwgbGluZSk7CisJCWNvbG9yX2ZwcmludGYoc3Rkb3V0LCBQRVJGX0NPTE9SX0JMVUUsICIlc1xuIiwgc2VsZi0+bGluZSk7CiAJfSBlbHNlIHsKLQkJaWYgKCEqbGluZSkKKwkJaWYgKCEqc2VsZi0+bGluZSkKIAkJCXByaW50ZigiICAgICAgICAgOlxuIik7CiAJCWVsc2UKLQkJCXByaW50ZigiICAgICAgICAgOgklc1xuIiwgbGluZSk7CisJCQlwcmludGYoIiAgICAgICAgIDoJJXNcbiIsIHNlbGYtPmxpbmUpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzY1LDYgKzQyMywyMCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgaGlzdF9lbnRyeV9fcHJpbnRfaGl0cyhzdHJ1Y3QgaGlzdF9lbnRyeSAqc2VsZikKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBzZWxmLT5zeW07CisJc3RydWN0IHN5bV9wcml2ICpwcml2ID0gc3ltYm9sX19wcml2KHN5bSk7CisJc3RydWN0IHN5bV9oaXN0ICpoID0gcHJpdi0+aGlzdDsKKwl1NjQgbGVuID0gc3ltLT5lbmQgLSBzeW0tPnN0YXJ0LCBvZmZzZXQ7CisKKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGxlbjsgKytvZmZzZXQpCisJCWlmIChoLT5pcFtvZmZzZXRdICE9IDApCisJCQlwcmludGYoIiUqTHg6ICVMdVxuIiwgQklUU19QRVJfTE9ORyAvIDIsCisJCQkgICAgICAgc3ltLT5zdGFydCArIG9mZnNldCwgaC0+aXBbb2Zmc2V0XSk7CisJcHJpbnRmKCIlKnM6ICVMdVxuIiwgQklUU19QRVJfTE9ORyAvIDIsICJoLT5zdW0iLCBoLT5zdW0pOworfQorCiBzdGF0aWMgdm9pZCBhbm5vdGF0ZV9zeW0oc3RydWN0IGhpc3RfZW50cnkgKmhlKQogewogCXN0cnVjdCBtYXAgKm1hcCA9IGhlLT5tYXA7CkBAIC0zNzQsMTUgKzQ0NiwxNSBAQAogCXU2NCBsZW47CiAJY2hhciBjb21tYW5kW1BBVEhfTUFYKjJdOwogCUZJTEUgKmZpbGU7CisJTElTVF9IRUFEKGhlYWQpOworCXN0cnVjdCBvYmpkdW1wX2xpbmUgKnBvcywgKm47CiAKIAlpZiAoIWZpbGVuYW1lKQogCQlyZXR1cm47CiAKLQlpZiAodmVyYm9zZSkKLQkJZnByaW50ZihzdGRlcnIsICIlczogZmlsZW5hbWU9JXMsIHN5bT0lcywgc3RhcnQ9JUx4LCBlbmQ9JUx4XG4iLAotCQkJX19mdW5jX18sIGZpbGVuYW1lLCBzeW0tPm5hbWUsCi0JCQltYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5zdGFydCksCi0JCQltYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5lbmQpKTsKKwlwcl9kZWJ1ZygiJXM6IGZpbGVuYW1lPSVzLCBzeW09JXMsIHN0YXJ0PSUjTHgsIGVuZD0lI0x4XG4iLCBfX2Z1bmNfXywKKwkJIGZpbGVuYW1lLCBzeW0tPm5hbWUsIG1hcC0+dW5tYXBfaXAobWFwLCBzeW0tPnN0YXJ0KSwKKwkJIG1hcC0+dW5tYXBfaXAobWFwLCBzeW0tPmVuZCkpOwogCiAJaWYgKGZ1bGxfcGF0aHMpCiAJCWRfZmlsZW5hbWUgPSBmaWxlbmFtZTsKQEAgLTQwNSw3ICs0NzcsOCBAQAogCQkgICAgICAgZHNvLCBkc28tPmxvbmdfbmFtZSwgc3ltLCBzeW0tPm5hbWUpOwogCiAJc3ByaW50Zihjb21tYW5kLCAib2JqZHVtcCAtLXN0YXJ0LWFkZHJlc3M9MHglMDE2THggLS1zdG9wLWFkZHJlc3M9MHglMDE2THggLWRTICVzfGdyZXAgLXYgJXMiLAotCQltYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5zdGFydCksIG1hcC0+dW5tYXBfaXAobWFwLCBzeW0tPmVuZCksCisJCW1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5zdGFydCksCisJCW1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5lbmQpLAogCQlmaWxlbmFtZSwgZmlsZW5hbWUpOwogCiAJaWYgKHZlcmJvc2UgPj0gMykKQEAgLTQxNiwxMSArNDg5LDIxIEBACiAJCXJldHVybjsKIAogCXdoaWxlICghZmVvZihmaWxlKSkgewotCQlpZiAocGFyc2VfbGluZShmaWxlLCBoZSwgbGVuKSA8IDApCisJCWlmIChwYXJzZV9saW5lKGZpbGUsIGhlLCAmaGVhZCkgPCAwKQogCQkJYnJlYWs7CiAJfQogCiAJcGNsb3NlKGZpbGUpOworCisJaWYgKHZlcmJvc2UpCisJCWhpc3RfZW50cnlfX3ByaW50X2hpdHMoaGUpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgJmhlYWQsIG5vZGUpIHsKKwkJb2JqZHVtcF9saW5lX19wcmludChwb3MsICZoZWFkLCBoZSwgbGVuKTsKKwkJbGlzdF9kZWwoJnBvcy0+bm9kZSk7CisJCW9iamR1bXBfbGluZV9fZnJlZShwb3MpOworCX0KKwogCWlmIChwcmludF9saW5lKQogCQlmcmVlX3NvdXJjZV9saW5lKGhlLCBsZW4pOwogfQpAQCAtNDUxLDEwICs1MzQsMTAgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBldmVudF9vcHMgPSB7Ci0JLnByb2Nlc3Nfc2FtcGxlX2V2ZW50CT0gcHJvY2Vzc19zYW1wbGVfZXZlbnQsCi0JLnByb2Nlc3NfbW1hcF9ldmVudAk9IGV2ZW50X19wcm9jZXNzX21tYXAsCi0JLnByb2Nlc3NfY29tbV9ldmVudAk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCi0JLnByb2Nlc3NfZm9ya19ldmVudAk9IGV2ZW50X19wcm9jZXNzX3Rhc2ssCisJLnNhbXBsZQk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAorCS5tbWFwCT0gZXZlbnRfX3Byb2Nlc3NfbW1hcCwKKwkuY29tbQk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCisJLmZvcmsJPSBldmVudF9fcHJvY2Vzc190YXNrLAogfTsKIAogc3RhdGljIGludCBfX2NtZF9hbm5vdGF0ZSh2b2lkKQpAQCAtNTQyLDkgKzYyNSw4IEBACiAJc2V0dXBfcGFnZXIoKTsKIAogCWlmIChmaWVsZF9zZXAgJiYgKmZpZWxkX3NlcCA9PSAnLicpIHsKLQkJZnB1dHMoIicuJyBpcyB0aGUgb25seSBub24gdmFsaWQgLS1maWVsZC1zZXBhcmF0b3IgYXJndW1lbnRcbiIsCi0JCQkJc3RkZXJyKTsKLQkJZXhpdCgxMjkpOworCQlwcl9lcnIoIicuJyBpcyB0aGUgb25seSBub24gdmFsaWQgLS1maWVsZC1zZXBhcmF0b3IgYXJndW1lbnRcbiIpOworCQlyZXR1cm4gLTE7CiAJfQogCiAJcmV0dXJuIF9fY21kX2Fubm90YXRlKCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1jYWNoZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGEwNWY1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtY2FjaGUuYwpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIGJ1aWx0aW4tYnVpbGRpZC1jYWNoZS5jCisgKgorICogQnVpbHRpbiBidWlsZGlkLWNhY2hlIGNvbW1hbmQ6IE1hbmFnZXMgYnVpbGQtaWQgY2FjaGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAcmVkaGF0LmNvbT4KKyAqLworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwZXJmLmgiCisjaW5jbHVkZSAidXRpbC9jYWNoZS5oIgorI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKyNpbmNsdWRlICJ1dGlsL2hlYWRlci5oIgorI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInV0aWwvc3RybGlzdC5oIgorI2luY2x1ZGUgInV0aWwvc3ltYm9sLmgiCisKK3N0YXRpYyBjaGFyIGNvbnN0ICphZGRfbmFtZV9saXN0X3N0ciwgKnJlbW92ZV9uYW1lX2xpc3Rfc3RyOworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWxkaWRfY2FjaGVfdXNhZ2VbXSA9IHsKKwkicGVyZiBidWlsZGlkLWNhY2hlIFs8b3B0aW9ucz5dIiwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBidWlsZGlkX2NhY2hlX29wdGlvbnNbXSA9IHsKKwlPUFRfU1RSSU5HKCdhJywgImFkZCIsICZhZGRfbmFtZV9saXN0X3N0ciwKKwkJICAgImZpbGUgbGlzdCIsICJmaWxlKHMpIHRvIGFkZCIpLAorCU9QVF9TVFJJTkcoJ3InLCAicmVtb3ZlIiwgJnJlbW92ZV9uYW1lX2xpc3Rfc3RyLCAiZmlsZSBsaXN0IiwKKwkJICAgICJmaWxlKHMpIHRvIHJlbW92ZSIpLAorCU9QVF9CT09MRUFOKCd2JywgInZlcmJvc2UiLCAmdmVyYm9zZSwgImJlIG1vcmUgdmVyYm9zZSIpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIGludCBidWlsZF9pZF9jYWNoZV9fYWRkX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKQoreworCWNoYXIgc2J1aWxkX2lkW0JVSUxEX0lEX1NJWkUgKiAyICsgMV07CisJdTggYnVpbGRfaWRbQlVJTERfSURfU0laRV07CisJaW50IGVycjsKKworCWlmIChmaWxlbmFtZV9fcmVhZF9idWlsZF9pZChmaWxlbmFtZSwgJmJ1aWxkX2lkLCBzaXplb2YoYnVpbGRfaWQpKSA8IDApIHsKKwkJcHJfZGVidWcoIkNvdWxkbid0IHJlYWQgYSBidWlsZC1pZCBpbiAlc1xuIiwgZmlsZW5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJYnVpbGRfaWRfX3NwcmludGYoYnVpbGRfaWQsIHNpemVvZihidWlsZF9pZCksIHNidWlsZF9pZCk7CisJZXJyID0gYnVpbGRfaWRfY2FjaGVfX2FkZF9zKHNidWlsZF9pZCwgZGVidWdkaXIsIGZpbGVuYW1lLCBmYWxzZSk7CisJaWYgKHZlcmJvc2UpCisJCXByX2luZm8oIkFkZGluZyAlcyAlczogJXNcbiIsIHNidWlsZF9pZCwgZmlsZW5hbWUsCisJCQllcnIgPyAiRkFJTCIgOiAiT2siKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJ1aWxkX2lkX2NhY2hlX19yZW1vdmVfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSBfX3VzZWQsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmRlYnVnZGlyIF9fdXNlZCkKK3sKKwl1OCBidWlsZF9pZFtCVUlMRF9JRF9TSVpFXTsKKwljaGFyIHNidWlsZF9pZFtCVUlMRF9JRF9TSVpFICogMiArIDFdOworCisJaW50IGVycjsKKworCWlmIChmaWxlbmFtZV9fcmVhZF9idWlsZF9pZChmaWxlbmFtZSwgJmJ1aWxkX2lkLCBzaXplb2YoYnVpbGRfaWQpKSA8IDApIHsKKwkJcHJfZGVidWcoIkNvdWxkbid0IHJlYWQgYSBidWlsZC1pZCBpbiAlc1xuIiwgZmlsZW5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJYnVpbGRfaWRfX3NwcmludGYoYnVpbGRfaWQsIHNpemVvZihidWlsZF9pZCksIHNidWlsZF9pZCk7CisJZXJyID0gYnVpbGRfaWRfY2FjaGVfX3JlbW92ZV9zKHNidWlsZF9pZCwgZGVidWdkaXIpOworCWlmICh2ZXJib3NlKQorCQlwcl9pbmZvKCJSZW1vdmluZyAlcyAlczogJXNcbiIsIHNidWlsZF9pZCwgZmlsZW5hbWUsCisJCQllcnIgPyAiRkFJTCIgOiAiT2siKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19jbWRfYnVpbGRpZF9jYWNoZSh2b2lkKQoreworCXN0cnVjdCBzdHJsaXN0ICpsaXN0OworCXN0cnVjdCBzdHJfbm9kZSAqcG9zOworCWNoYXIgZGVidWdkaXJbUEFUSF9NQVhdOworCisJc25wcmludGYoZGVidWdkaXIsIHNpemVvZihkZWJ1Z2RpciksICIlcy8lcyIsIGdldGVudigiSE9NRSIpLAorCQkgREVCVUdfQ0FDSEVfRElSKTsKKworCWlmIChhZGRfbmFtZV9saXN0X3N0cikgeworCQlsaXN0ID0gc3RybGlzdF9fbmV3KHRydWUsIGFkZF9uYW1lX2xpc3Rfc3RyKTsKKwkJaWYgKGxpc3QpIHsKKwkJCXN0cmxpc3RfX2Zvcl9lYWNoKHBvcywgbGlzdCkKKwkJCQlpZiAoYnVpbGRfaWRfY2FjaGVfX2FkZF9maWxlKHBvcy0+cywgZGVidWdkaXIpKSB7CisJCQkJCWlmIChlcnJubyA9PSBFRVhJU1QpIHsKKwkJCQkJCXByX2RlYnVnKCIlcyBhbHJlYWR5IGluIHRoZSBjYWNoZVxuIiwKKwkJCQkJCQkgcG9zLT5zKTsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCXByX3dhcm5pbmcoIkNvdWxkbid0IGFkZCAlczogJXNcbiIsCisJCQkJCQkgICBwb3MtPnMsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJfQorCisJCQlzdHJsaXN0X19kZWxldGUobGlzdCk7CisJCX0KKwl9CisKKwlpZiAocmVtb3ZlX25hbWVfbGlzdF9zdHIpIHsKKwkJbGlzdCA9IHN0cmxpc3RfX25ldyh0cnVlLCByZW1vdmVfbmFtZV9saXN0X3N0cik7CisJCWlmIChsaXN0KSB7CisJCQlzdHJsaXN0X19mb3JfZWFjaChwb3MsIGxpc3QpCisJCQkJaWYgKGJ1aWxkX2lkX2NhY2hlX19yZW1vdmVfZmlsZShwb3MtPnMsIGRlYnVnZGlyKSkgeworCQkJCQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisJCQkJCQlwcl9kZWJ1ZygiJXMgd2Fzbid0IGluIHRoZSBjYWNoZVxuIiwKKwkJCQkJCQkgcG9zLT5zKTsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCXByX3dhcm5pbmcoIkNvdWxkbid0IHJlbW92ZSAlczogJXNcbiIsCisJCQkJCQkgICBwb3MtPnMsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJfQorCisJCQlzdHJsaXN0X19kZWxldGUobGlzdCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9idWlsZGlkX2NhY2hlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fdXNlZCkKK3sKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsZGlkX2NhY2hlX29wdGlvbnMsCisJCQkgICAgIGJ1aWxkaWRfY2FjaGVfdXNhZ2UsIDApOworCisJaWYgKHN5bWJvbF9faW5pdCgpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJc2V0dXBfcGFnZXIoKTsKKwlyZXR1cm4gX19jbWRfYnVpbGRpZF9jYWNoZSgpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jCmluZGV4IDFlOTlhYzguLmQwNjc1YzAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1saXN0LmMKQEAgLTgsNiArOCw3IEBACiAgKi8KICNpbmNsdWRlICJidWlsdGluLmgiCiAjaW5jbHVkZSAicGVyZi5oIgorI2luY2x1ZGUgInV0aWwvYnVpbGQtaWQuaCIKICNpbmNsdWRlICJ1dGlsL2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgpAQCAtMTYsNiArMTcsNyBAQAogCiBzdGF0aWMgY2hhciBjb25zdCAqaW5wdXRfbmFtZSA9ICJwZXJmLmRhdGEiOwogc3RhdGljIGludCBmb3JjZTsKK3N0YXRpYyBib29sIHdpdGhfaGl0czsKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsZGlkX2xpc3RfdXNhZ2VbXSA9IHsKIAkicGVyZiBidWlsZGlkLWxpc3QgWzxvcHRpb25zPl0iLApAQCAtMjMsNiArMjUsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCU9QVF9CT09MRUFOKCdIJywgIndpdGgtaGl0cyIsICZ3aXRoX2hpdHMsICJTaG93IG9ubHkgRFNPcyB3aXRoIGhpdHMiKSwKIAlPUFRfU1RSSU5HKCdpJywgImlucHV0IiwgJmlucHV0X25hbWUsICJmaWxlIiwKIAkJICAgICJpbnB1dCBmaWxlIG5hbWUiKSwKIAlPUFRfQk9PTEVBTignZicsICJmb3JjZSIsICZmb3JjZSwgImRvbid0IGNvbXBsYWluLCBkbyBpdCIpLApAQCAtMzEsMjYgKzM0LDYgQEAKIAlPUFRfRU5EKCkKIH07CiAKLXN0YXRpYyBpbnQgcGVyZl9maWxlX3NlY3Rpb25fX3Byb2Nlc3NfYnVpbGRpZHMoc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uICpzZWxmLAotCQkJCQkgICAgICAgaW50IGZlYXQsIGludCBmZCkKLXsKLQlpZiAoZmVhdCAhPSBIRUFERVJfQlVJTERfSUQpCi0JCXJldHVybiAwOwotCi0JaWYgKGxzZWVrKGZkLCBzZWxmLT5vZmZzZXQsIFNFRUtfU0VUKSA8IDApIHsKLQkJcHJfd2FybmluZygiRmFpbGVkIHRvIGxzZWVrIHRvICVMZCBvZmZzZXQgZm9yIGJ1aWxkaWRzIVxuIiwKLQkJCSAgIHNlbGYtPm9mZnNldCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAocGVyZl9oZWFkZXJfX3JlYWRfYnVpbGRfaWRzKGZkLCBzZWxmLT5vZmZzZXQsIHNlbGYtPnNpemUpKSB7Ci0JCXByX3dhcm5pbmcoIkZhaWxlZCB0byByZWFkIGJ1aWxkaWRzIVxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBfX2NtZF9idWlsZGlkX2xpc3Qodm9pZCkKIHsKIAlpbnQgZXJyID0gLTE7CkBAIC02MCwxMCArNDMsMTAgQEAKIAlpZiAoc2Vzc2lvbiA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAKLQllcnIgPSBwZXJmX2hlYWRlcl9fcHJvY2Vzc19zZWN0aW9ucygmc2Vzc2lvbi0+aGVhZGVyLCBzZXNzaW9uLT5mZCwKLQkJCQkgICAgICAgICBwZXJmX2ZpbGVfc2VjdGlvbl9fcHJvY2Vzc19idWlsZGlkcyk7Ci0JaWYgKGVyciA+PSAwKQotCQlkc29zX19mcHJpbnRmX2J1aWxkaWQoc3Rkb3V0KTsKKwlpZiAod2l0aF9oaXRzKQorCQlwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZidWlsZF9pZF9fbWFya19kc29faGl0X29wcyk7CisKKwlkc29zX19mcHJpbnRmX2J1aWxkaWQoc3Rkb3V0LCB3aXRoX2hpdHMpOwogCiAJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbik7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMgYi90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jCmluZGV4IGJkNzFiOGMuLjE4YjNmNTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYwpAQCAtNDIsOCArNDIsOCBAQAogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCXN0cnVjdCBzYW1wbGVfZGF0YSBkYXRhID0geyAucGVyaW9kID0gMSwgfTsKIAotCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQ6ICVwXG4iLCBldmVudC0+aGVhZGVyLm1pc2MsCi0JCSAgICBldmVudC0+aXAucGlkLCAodm9pZCAqKShsb25nKWV2ZW50LT5pcC5pcCk7CisJZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZDogJSNMeFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAorCQkgICAgZXZlbnQtPmlwLnBpZCwgZXZlbnQtPmlwLmlwKTsKIAogCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoZXZlbnQsIHNlc3Npb24sICZhbCwgTlVMTCkgPCAwKSB7CiAJCXByX3dhcm5pbmcoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLApAQCAtNTEsMTIgKzUxLDEyIEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoYWwuZmlsdGVyZWQpCisJaWYgKGFsLmZpbHRlcmVkIHx8IGFsLnN5bSA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAogCWV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIHNlc3Npb24tPnNhbXBsZV90eXBlLCAmZGF0YSk7CiAKLQlpZiAoYWwuc3ltICYmIHBlcmZfc2Vzc2lvbl9fYWRkX2hpc3RfZW50cnkoc2Vzc2lvbiwgJmFsLCBkYXRhLnBlcmlvZCkpIHsKKwlpZiAocGVyZl9zZXNzaW9uX19hZGRfaGlzdF9lbnRyeShzZXNzaW9uLCAmYWwsIGRhdGEucGVyaW9kKSkgewogCQlwcl93YXJuaW5nKCJwcm9ibGVtIGluY3JlbWVudGluZyBzeW1ib2wgY291bnQsIHNraXBwaW5nIGV2ZW50XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTY2LDEyICs2NiwxMiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfb3BzIGV2ZW50X29wcyA9IHsKLQkucHJvY2Vzc19zYW1wbGVfZXZlbnQgPSBkaWZmX19wcm9jZXNzX3NhbXBsZV9ldmVudCwKLQkucHJvY2Vzc19tbWFwX2V2ZW50ICAgPSBldmVudF9fcHJvY2Vzc19tbWFwLAotCS5wcm9jZXNzX2NvbW1fZXZlbnQgICA9IGV2ZW50X19wcm9jZXNzX2NvbW0sCi0JLnByb2Nlc3NfZXhpdF9ldmVudCAgID0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKLQkucHJvY2Vzc19mb3JrX2V2ZW50ICAgPSBldmVudF9fcHJvY2Vzc190YXNrLAotCS5wcm9jZXNzX2xvc3RfZXZlbnQgICA9IGV2ZW50X19wcm9jZXNzX2xvc3QsCisJLnNhbXBsZQk9IGRpZmZfX3Byb2Nlc3Nfc2FtcGxlX2V2ZW50LAorCS5tbWFwCT0gZXZlbnRfX3Byb2Nlc3NfbW1hcCwKKwkuY29tbQk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCisJLmV4aXQJPSBldmVudF9fcHJvY2Vzc190YXNrLAorCS5mb3JrCT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKKwkubG9zdAk9IGV2ZW50X19wcm9jZXNzX2xvc3QsCiB9OwogCiBzdGF0aWMgdm9pZCBwZXJmX3Nlc3Npb25fX2luc2VydF9oaXN0X2VudHJ5X2J5X25hbWUoc3RydWN0IHJiX3Jvb3QgKnJvb3QsCkBAIC04MiwyOSArODIsMTkgQEAKIAlzdHJ1Y3QgaGlzdF9lbnRyeSAqaXRlcjsKIAogCXdoaWxlICgqcCAhPSBOVUxMKSB7Ci0JCWludCBjbXA7CiAJCXBhcmVudCA9ICpwOwogCQlpdGVyID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7Ci0KLQkJY21wID0gc3RyY21wKGhlLT5tYXAtPmRzby0+bmFtZSwgaXRlci0+bWFwLT5kc28tPm5hbWUpOwotCQlpZiAoY21wID4gMCkKKwkJaWYgKGhpc3RfZW50cnlfX2NtcChoZSwgaXRlcikgPCAwKQogCQkJcCA9ICYoKnApLT5yYl9sZWZ0OwotCQllbHNlIGlmIChjbXAgPCAwKQorCQllbHNlCiAJCQlwID0gJigqcCktPnJiX3JpZ2h0OwotCQllbHNlIHsKLQkJCWNtcCA9IHN0cmNtcChoZS0+c3ltLT5uYW1lLCBpdGVyLT5zeW0tPm5hbWUpOwotCQkJaWYgKGNtcCA+IDApCi0JCQkJcCA9ICYoKnApLT5yYl9sZWZ0OwotCQkJZWxzZQotCQkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7Ci0JCX0KIAl9CiAKIAlyYl9saW5rX25vZGUoJmhlLT5yYl9ub2RlLCBwYXJlbnQsIHApOwogCXJiX2luc2VydF9jb2xvcigmaGUtPnJiX25vZGUsIHJvb3QpOwogfQogCi1zdGF0aWMgdm9pZCBwZXJmX3Nlc3Npb25fX3Jlc29ydF9ieV9uYW1lKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCitzdGF0aWMgdm9pZCBwZXJmX3Nlc3Npb25fX3Jlc29ydF9oaXN0X2VudHJpZXMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKIHsKIAl1bnNpZ25lZCBsb25nIHBvc2l0aW9uID0gMTsKIAlzdHJ1Y3QgcmJfcm9vdCB0bXAgPSBSQl9ST09UOwpAQCAtMTIyLDI5ICsxMTIsMjggQEAKIAlzZWxmLT5oaXN0cyA9IHRtcDsKIH0KIAorc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19zZXRfaGlzdF9lbnRyaWVzX3Bvc2l0aW9ucyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQoreworCXBlcmZfc2Vzc2lvbl9fb3V0cHV0X3Jlc29ydChzZWxmLCBzZWxmLT5ldmVudHNfc3RhdHMudG90YWwpOworCXBlcmZfc2Vzc2lvbl9fcmVzb3J0X2hpc3RfZW50cmllcyhzZWxmKTsKK30KKwogc3RhdGljIHN0cnVjdCBoaXN0X2VudHJ5ICoKLXBlcmZfc2Vzc2lvbl9fZmluZF9oaXN0X2VudHJ5X2J5X25hbWUoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKLQkJCQkgICAgICBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpCitwZXJmX3Nlc3Npb25fX2ZpbmRfaGlzdF9lbnRyeShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJICAgICAgc3RydWN0IGhpc3RfZW50cnkgKmhlKQogewogCXN0cnVjdCByYl9ub2RlICpuID0gc2VsZi0+aGlzdHMucmJfbm9kZTsKIAogCXdoaWxlIChuKSB7CiAJCXN0cnVjdCBoaXN0X2VudHJ5ICppdGVyID0gcmJfZW50cnkobiwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwotCQlpbnQgY21wID0gc3RyY21wKGhlLT5tYXAtPmRzby0+bmFtZSwgaXRlci0+bWFwLT5kc28tPm5hbWUpOworCQlpbnQ2NF90IGNtcCA9IGhpc3RfZW50cnlfX2NtcChoZSwgaXRlcik7CiAKLQkJaWYgKGNtcCA+IDApCisJCWlmIChjbXAgPCAwKQogCQkJbiA9IG4tPnJiX2xlZnQ7Ci0JCWVsc2UgaWYgKGNtcCA8IDApCisJCWVsc2UgaWYgKGNtcCA+IDApCiAJCQluID0gbi0+cmJfcmlnaHQ7Ci0JCWVsc2UgewotCQkJY21wID0gc3RyY21wKGhlLT5zeW0tPm5hbWUsIGl0ZXItPnN5bS0+bmFtZSk7Ci0JCQlpZiAoY21wID4gMCkKLQkJCQluID0gbi0+cmJfbGVmdDsKLQkJCWVsc2UgaWYgKGNtcCA8IDApCi0JCQkJbiA9IG4tPnJiX3JpZ2h0OwotCQkJZWxzZQotCQkJCXJldHVybiBpdGVyOwotCQl9CisJCWVsc2UgCisJCQlyZXR1cm4gaXRlcjsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTE1NSwxMSArMTQ0LDkgQEAKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CiAKLQlwZXJmX3Nlc3Npb25fX3Jlc29ydF9ieV9uYW1lKG9sZF9zZXNzaW9uKTsKLQogCWZvciAobmQgPSByYl9maXJzdCgmbmV3X3Nlc3Npb24tPmhpc3RzKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKIAkJc3RydWN0IGhpc3RfZW50cnkgKnBvcyA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7Ci0JCXBvcy0+cGFpciA9IHBlcmZfc2Vzc2lvbl9fZmluZF9oaXN0X2VudHJ5X2J5X25hbWUob2xkX3Nlc3Npb24sIHBvcyk7CisJCXBvcy0+cGFpciA9IHBlcmZfc2Vzc2lvbl9fZmluZF9oaXN0X2VudHJ5KG9sZF9zZXNzaW9uLCBwb3MpOwogCX0KIH0KIApAQCAtMTc3LDkgKzE2NCwxMiBAQAogCQlyZXQgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb25baV0sICZldmVudF9vcHMpOwogCQlpZiAocmV0KQogCQkJZ290byBvdXRfZGVsZXRlOwotCQlwZXJmX3Nlc3Npb25fX291dHB1dF9yZXNvcnQoc2Vzc2lvbltpXSwgc2Vzc2lvbltpXS0+ZXZlbnRzX3N0YXRzLnRvdGFsKTsKIAl9CiAKKwlwZXJmX3Nlc3Npb25fX291dHB1dF9yZXNvcnQoc2Vzc2lvblsxXSwgc2Vzc2lvblsxXS0+ZXZlbnRzX3N0YXRzLnRvdGFsKTsKKwlpZiAoc2hvd19kaXNwbGFjZW1lbnQpCisJCXBlcmZfc2Vzc2lvbl9fc2V0X2hpc3RfZW50cmllc19wb3NpdGlvbnMoc2Vzc2lvblswXSk7CisKIAlwZXJmX3Nlc3Npb25fX21hdGNoX2hpc3RzKHNlc3Npb25bMF0sIHNlc3Npb25bMV0pOwogCXBlcmZfc2Vzc2lvbl9fZnByaW50Zl9oaXN0cyhzZXNzaW9uWzFdLCBzZXNzaW9uWzBdLAogCQkJCSAgICBzaG93X2Rpc3BsYWNlbWVudCwgc3Rkb3V0KTsKQEAgLTIwNCw3ICsxOTQsNyBAQAogCU9QVF9CT09MRUFOKCdmJywgImZvcmNlIiwgJmZvcmNlLCAiZG9uJ3QgY29tcGxhaW4sIGRvIGl0IiksCiAJT1BUX0JPT0xFQU4oJ20nLCAibW9kdWxlcyIsICZzeW1ib2xfY29uZi51c2VfbW9kdWxlcywKIAkJICAgICJsb2FkIG1vZHVsZSBzeW1ib2xzIC0gV0FSTklORzogdXNlIG9ubHkgd2l0aCAtayBhbmQgTElWRSBrZXJuZWwiKSwKLQlPUFRfQk9PTEVBTignUCcsICJmdWxsLXBhdGhzIiwgJmV2ZW50X29wcy5mdWxsX3BhdGhzLAorCU9QVF9CT09MRUFOKCdQJywgImZ1bGwtcGF0aHMiLCAmc3ltYm9sX2NvbmYuZnVsbF9wYXRocywKIAkJICAgICJEb24ndCBzaG9ydGVuIHRoZSBwYXRobmFtZXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgY3dkIiksCiAJT1BUX1NUUklORygnZCcsICJkc29zIiwgJnN5bWJvbF9jb25mLmRzb19saXN0X3N0ciwgImRzb1ssZHNvLi4uXSIsCiAJCSAgICJvbmx5IGNvbnNpZGVyIHN5bWJvbHMgaW4gdGhlc2UgZHNvcyIpLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWhlbHAuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1oZWxwLmMKaW5kZXggOWY4MTBiMS4uMjE1YjU4NCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLWhlbHAuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4taGVscC5jCkBAIC0yODYsOCArMjg2LDcgQEAKIAogCXB1dHMoIiBUaGUgbW9zdCBjb21tb25seSB1c2VkIHBlcmYgY29tbWFuZHMgYXJlOiIpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbW1vbl9jbWRzKTsgaSsrKSB7Ci0JCXByaW50ZigiICAgJXMgICAiLCBjb21tb25fY21kc1tpXS5uYW1lKTsKLQkJbXB1dF9jaGFyKCcgJywgbG9uZ2VzdCAtIHN0cmxlbihjb21tb25fY21kc1tpXS5uYW1lKSk7CisJCXByaW50ZigiICAgJS0qcyAgICIsIGxvbmdlc3QsIGNvbW1vbl9jbWRzW2ldLm5hbWUpOwogCQlwdXRzKGNvbW1vbl9jbWRzW2ldLmhlbHApOwogCX0KIH0KQEAgLTMxNCw4ICszMTMsNiBAQAogCQlyZXR1cm4gInBlcmYiOwogCWVsc2UgaWYgKCFwcmVmaXhjbXAocGVyZl9jbWQsICJwZXJmIikpCiAJCXJldHVybiBwZXJmX2NtZDsKLQllbHNlIGlmIChpc19wZXJmX2NvbW1hbmQocGVyZl9jbWQpKQotCQlyZXR1cm4gcHJlcGVuZCgicGVyZi0iLCBwZXJmX2NtZCk7CiAJZWxzZQogCQlyZXR1cm4gcHJlcGVuZCgicGVyZi0iLCBwZXJmX2NtZCk7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYwppbmRleCA5M2M2N2JmLi45MjRhOTUxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKQEAgLTkyLDIzICs5MiwxOCBAQAogCWlmICghZGlyMSkKIAkJcmV0dXJuOwogCi0Jd2hpbGUgKHRydWUpIHsKLQkJZGVudDEgPSByZWFkZGlyKGRpcjEpOwotCQlpZiAoIWRlbnQxKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHNzY2FuZihkZW50MS0+ZF9uYW1lLCAibm9kZSV1IiwgJm1lbSkgPCAxKQorCXdoaWxlICgoZGVudDEgPSByZWFkZGlyKGRpcjEpKSAhPSBOVUxMKSB7CisJCWlmIChkZW50MS0+ZF90eXBlICE9IERUX0RJUiB8fAorCQkgICAgc3NjYW5mKGRlbnQxLT5kX25hbWUsICJub2RlJXUiLCAmbWVtKSA8IDEpCiAJCQljb250aW51ZTsKIAogCQlzbnByaW50ZihidWYsIFBBVEhfTUFYLCAiJXMvJXMiLCBQQVRIX1NZU19OT0RFLCBkZW50MS0+ZF9uYW1lKTsKIAkJZGlyMiA9IG9wZW5kaXIoYnVmKTsKIAkJaWYgKCFkaXIyKQogCQkJY29udGludWU7Ci0JCXdoaWxlICh0cnVlKSB7Ci0JCQlkZW50MiA9IHJlYWRkaXIoZGlyMik7Ci0JCQlpZiAoIWRlbnQyKQotCQkJCWJyZWFrOwotCQkJaWYgKHNzY2FuZihkZW50Mi0+ZF9uYW1lLCAiY3B1JXUiLCAmY3B1KSA8IDEpCisJCXdoaWxlICgoZGVudDIgPSByZWFkZGlyKGRpcjIpKSAhPSBOVUxMKSB7CisJCQlpZiAoZGVudDItPmRfdHlwZSAhPSBEVF9MTksgfHwKKwkJCSAgICBzc2NhbmYoZGVudDItPmRfbmFtZSwgImNwdSV1IiwgJmNwdSkgPCAxKQogCQkJCWNvbnRpbnVlOwogCQkJY3B1bm9kZV9tYXBbY3B1XSA9IG1lbTsKIAkJfQpAQCAtMzIxLDExICszMTYsOCBAQAogCiAJZXZlbnRfX3BhcnNlX3NhbXBsZShldmVudCwgc2Vzc2lvbi0+c2FtcGxlX3R5cGUsICZkYXRhKTsKIAotCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICVwIHBlcmlvZDogJUxkXG4iLAotCQlldmVudC0+aGVhZGVyLm1pc2MsCi0JCWRhdGEucGlkLCBkYXRhLnRpZCwKLQkJKHZvaWQgKikobG9uZylkYXRhLmlwLAotCQkobG9uZyBsb25nKWRhdGEucGVyaW9kKTsKKwlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlI0x4IHBlcmlvZDogJUxkXG4iLCBldmVudC0+aGVhZGVyLm1pc2MsCisJCSAgICBkYXRhLnBpZCwgZGF0YS50aWQsIGRhdGEuaXAsIGRhdGEucGVyaW9kKTsKIAogCXRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBldmVudC0+aXAucGlkKTsKIAlpZiAodGhyZWFkID09IE5VTEwpIHsKQEAgLTM0MiwyMiArMzM0LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYW1wbGVfdHlwZV9jaGVjayhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQotewotCWlmICghKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkgewotCQlmcHJpbnRmKHN0ZGVyciwKLQkJCSJObyB0cmFjZSBzYW1wbGUgdG8gcmVhZC4gRGlkIHlvdSBjYWxsIHBlcmYgcmVjb3JkICIKLQkJCSJ3aXRob3V0IC1SPyIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZXZlbnRfb3BzID0gewotCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAotCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBldmVudF9fcHJvY2Vzc19jb21tLAotCS5zYW1wbGVfdHlwZV9jaGVjawk9IHNhbXBsZV90eXBlX2NoZWNrLAorCS5zYW1wbGUJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkuY29tbQk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCiB9OwogCiBzdGF0aWMgZG91YmxlIGZyYWdtZW50YXRpb24odW5zaWduZWQgbG9uZyBuX3JlcSwgdW5zaWduZWQgbG9uZyBuX2FsbG9jKQpAQCAtMzkwLDcgKzM2OSw3IEBACiAJCWlmIChpc19jYWxsZXIpIHsKIAkJCWFkZHIgPSBkYXRhLT5jYWxsX3NpdGU7CiAJCQlpZiAoIXJhd19pcCkKLQkJCQlzeW0gPSBtYXBfZ3JvdXBzX19maW5kX2Z1bmN0aW9uKCZzZXNzaW9uLT5rbWFwcywgc2Vzc2lvbiwgYWRkciwgTlVMTCk7CisJCQkJc3ltID0gbWFwX2dyb3Vwc19fZmluZF9mdW5jdGlvbigmc2Vzc2lvbi0+a21hcHMsIGFkZHIsIE5VTEwpOwogCQl9IGVsc2UKIAkJCWFkZHIgPSBkYXRhLT5wdHI7CiAKQEAgLTUwNCwxMSArNDgzLDE0IEBACiAKIHN0YXRpYyBpbnQgX19jbWRfa21lbSh2b2lkKQogewotCWludCBlcnI7CisJaW50IGVyciA9IC1FSU5WQUw7CiAJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25hbWUsIE9fUkRPTkxZLCAwKTsKIAlpZiAoc2Vzc2lvbiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWlmICghcGVyZl9zZXNzaW9uX19oYXNfdHJhY2VzKHNlc3Npb24sICJrbWVtIHJlY29yZCIpKQorCQlnb3RvIG91dF9kZWxldGU7CisKIAlzZXR1cF9wYWdlcigpOwogCWVyciA9IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgJmV2ZW50X29wcyk7CiAJaWYgKGVyciAhPSAwKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWxvY2suYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5YWIyYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMKQEAgLTAsMCArMSw2NzggQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGVyZi5oIgorCisjaW5jbHVkZSAidXRpbC91dGlsLmgiCisjaW5jbHVkZSAidXRpbC9jYWNoZS5oIgorI2luY2x1ZGUgInV0aWwvc3ltYm9sLmgiCisjaW5jbHVkZSAidXRpbC90aHJlYWQuaCIKKyNpbmNsdWRlICJ1dGlsL2hlYWRlci5oIgorCisjaW5jbHVkZSAidXRpbC9wYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidXRpbC90cmFjZS1ldmVudC5oIgorCisjaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIgorI2luY2x1ZGUgInV0aWwvc2Vzc2lvbi5oIgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjaW5jbHVkZSA8c2VtYXBob3JlLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisKKy8qIGJhc2VkIG9uIGtlcm5lbC9sb2NrZGVwLmMgKi8KKyNkZWZpbmUgTE9DS0hBU0hfQklUUwkJMTIKKyNkZWZpbmUgTE9DS0hBU0hfU0laRQkJKDFVTCA8PCBMT0NLSEFTSF9CSVRTKQorCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBsb2NraGFzaF90YWJsZVtMT0NLSEFTSF9TSVpFXTsKKworI2RlZmluZSBfX2xvY2toYXNoZm4oa2V5KQloYXNoX2xvbmcoKHVuc2lnbmVkIGxvbmcpa2V5LCBMT0NLSEFTSF9CSVRTKQorI2RlZmluZSBsb2NraGFzaGVudHJ5KGtleSkJKGxvY2toYXNoX3RhYmxlICsgX19sb2NraGFzaGZuKChrZXkpKSkKKworI2RlZmluZSBMT0NLX1NUQVRFX1VOTE9DS0VECTAJICAgICAgIC8qIGluaXRpYWwgc3RhdGUgKi8KKyNkZWZpbmUgTE9DS19TVEFURV9MT0NLRUQJMQorCitzdHJ1Y3QgbG9ja19zdGF0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWhhc2hfZW50cnk7CisJc3RydWN0IHJiX25vZGUJCXJiOwkJLyogdXNlZCBmb3Igc29ydGluZyAqLworCisJLyoKKwkgKiBGSVhNRTogcmF3X2ZpZWxkX3ZhbHVlKCkgcmV0dXJucyB1bnNpZ25lZCBsb25nIGxvbmcsCisJICogc28gYWRkcmVzcyBvZiBsb2NrZGVwX21hcCBzaG91bGQgYmUgZGVhbGVkIGFzIDY0Yml0LgorCSAqIElzIHRoZXJlIG1vcmUgYmV0dGVyIHNvbHV0aW9uPworCSAqLworCXZvaWQJCQkqYWRkcjsJCS8qIGFkZHJlc3Mgb2YgbG9ja2RlcF9tYXAsIHVzZWQgYXMgSUQgKi8KKwljaGFyCQkJKm5hbWU7CQkvKiBmb3Igc3RyY3B5KCksIHdlIGNhbm5vdCB1c2UgY29uc3QgKi8KKworCWludAkJCXN0YXRlOworCXU2NAkJCXByZXZfZXZlbnRfdGltZTsgLyogdGltZXN0YW1wIG9mIHByZXZpb3VzIGV2ZW50ICovCisKKwl1bnNpZ25lZCBpbnQJCW5yX2FjcXVpcmVkOworCXVuc2lnbmVkIGludAkJbnJfYWNxdWlyZTsKKwl1bnNpZ25lZCBpbnQJCW5yX2NvbnRlbmRlZDsKKwl1bnNpZ25lZCBpbnQJCW5yX3JlbGVhc2U7CisKKwkvKiB0aGVzZSB0aW1lcyBhcmUgaW4gbmFubyBzZWMuICovCisJdTY0CQkJd2FpdF90aW1lX3RvdGFsOworCXU2NAkJCXdhaXRfdGltZV9taW47CisJdTY0CQkJd2FpdF90aW1lX21heDsKK307CisKKy8qIGJ1aWxkIHNpbXBsZSBrZXkgZnVuY3Rpb24gb25lIGlzIGJpZ2dlciB0aGFuIHR3byAqLworI2RlZmluZSBTSU5HTEVfS0VZKG1lbWJlcikJCQkJCQlcCisJc3RhdGljIGludCBsb2NrX3N0YXRfa2V5XyAjIyBtZW1iZXIoc3RydWN0IGxvY2tfc3RhdCAqb25lLAlcCisJCQkJCSBzdHJ1Y3QgbG9ja19zdGF0ICp0d28pCQlcCisJewkJCQkJCQkJXAorCQlyZXR1cm4gb25lLT5tZW1iZXIgPiB0d28tPm1lbWJlcjsJCQlcCisJfQorCitTSU5HTEVfS0VZKG5yX2FjcXVpcmVkKQorU0lOR0xFX0tFWShucl9jb250ZW5kZWQpCitTSU5HTEVfS0VZKHdhaXRfdGltZV90b3RhbCkKK1NJTkdMRV9LRVkod2FpdF90aW1lX21pbikKK1NJTkdMRV9LRVkod2FpdF90aW1lX21heCkKKworc3RydWN0IGxvY2tfa2V5IHsKKwkvKgorCSAqIG5hbWU6IHRoZSB2YWx1ZSBmb3Igc3BlY2lmeSBieSB1c2VyCisJICogdGhpcyBzaG91bGQgYmUgc2ltcGxlciB0aGFuIHJhdyBuYW1lIG9mIG1lbWJlcgorCSAqIGUuZy4gbnJfYWNxdWlyZWQgLT4gYWNxdWlyZWQsIHdhaXRfdGltZV90b3RhbCAtPiB3YWl0X3RvdGFsCisJICovCisJY29uc3QgY2hhcgkJKm5hbWU7CisJaW50CQkJKCprZXkpKHN0cnVjdCBsb2NrX3N0YXQqLCBzdHJ1Y3QgbG9ja19zdGF0Kik7Cit9OworCitzdGF0aWMgY29uc3QgY2hhcgkJKnNvcnRfa2V5ID0gImFjcXVpcmVkIjsKKworc3RhdGljIGludAkJCSgqY29tcGFyZSkoc3RydWN0IGxvY2tfc3RhdCAqLCBzdHJ1Y3QgbG9ja19zdGF0ICopOworCitzdGF0aWMgc3RydWN0IHJiX3Jvb3QJCXJlc3VsdDsJLyogcGxhY2UgdG8gc3RvcmUgc29ydGVkIGRhdGEgKi8KKworI2RlZmluZSBERUZfS0VZX0xPQ0sobmFtZSwgZm5fc3VmZml4KQlcCisJeyAjbmFtZSwgbG9ja19zdGF0X2tleV8gIyMgZm5fc3VmZml4IH0KK3N0cnVjdCBsb2NrX2tleSBrZXlzW10gPSB7CisJREVGX0tFWV9MT0NLKGFjcXVpcmVkLCBucl9hY3F1aXJlZCksCisJREVGX0tFWV9MT0NLKGNvbnRlbmRlZCwgbnJfY29udGVuZGVkKSwKKwlERUZfS0VZX0xPQ0sod2FpdF90b3RhbCwgd2FpdF90aW1lX3RvdGFsKSwKKwlERUZfS0VZX0xPQ0sod2FpdF9taW4sIHdhaXRfdGltZV9taW4pLAorCURFRl9LRVlfTE9DSyh3YWl0X21heCwgd2FpdF90aW1lX21heCksCisKKwkvKiBleHRyYSBjb21wYXJpc29ucyBtdWNoIGNvbXBsaWNhdGVkIHNob3VsZCBiZSBoZXJlICovCisKKwl7IE5VTEwsIE5VTEwgfQorfTsKKworc3RhdGljIHZvaWQgc2VsZWN0X2tleSh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsga2V5c1tpXS5uYW1lOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoa2V5c1tpXS5uYW1lLCBzb3J0X2tleSkpIHsKKwkJCWNvbXBhcmUgPSBrZXlzW2ldLmtleTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWRpZSgiVW5rbm93biBjb21wYXJlIGtleTolc1xuIiwgc29ydF9rZXkpOworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfdG9fcmVzdWx0KHN0cnVjdCBsb2NrX3N0YXQgKnN0LAorCQkJICAgICBpbnQgKCpiaWdnZXIpKHN0cnVjdCBsb2NrX3N0YXQgKiwgc3RydWN0IGxvY2tfc3RhdCAqKSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnJiID0gJnJlc3VsdC5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBsb2NrX3N0YXQgKnA7CisKKwl3aGlsZSAoKnJiKSB7CisJCXAgPSBjb250YWluZXJfb2YoKnJiLCBzdHJ1Y3QgbG9ja19zdGF0LCByYik7CisJCXBhcmVudCA9ICpyYjsKKworCQlpZiAoYmlnZ2VyKHN0LCBwKSkKKwkJCXJiID0gJigqcmIpLT5yYl9sZWZ0OworCQllbHNlCisJCQlyYiA9ICYoKnJiKS0+cmJfcmlnaHQ7CisJfQorCisJcmJfbGlua19ub2RlKCZzdC0+cmIsIHBhcmVudCwgcmIpOworCXJiX2luc2VydF9jb2xvcigmc3QtPnJiLCAmcmVzdWx0KTsKK30KKworLyogcmV0dXJucyBsZWZ0IG1vc3QgZWxlbWVudCBvZiByZXN1bHQsIGFuZCBlcmFzZSBpdCAqLworc3RhdGljIHN0cnVjdCBsb2NrX3N0YXQgKnBvcF9mcm9tX3Jlc3VsdCh2b2lkKQoreworCXN0cnVjdCByYl9ub2RlICpub2RlID0gcmVzdWx0LnJiX25vZGU7CisKKwlpZiAoIW5vZGUpCisJCXJldHVybiBOVUxMOworCisJd2hpbGUgKG5vZGUtPnJiX2xlZnQpCisJCW5vZGUgPSBub2RlLT5yYl9sZWZ0OworCisJcmJfZXJhc2Uobm9kZSwgJnJlc3VsdCk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgbG9ja19zdGF0LCByYik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbG9ja19zdGF0ICpsb2NrX3N0YXRfZmluZG5ldyh2b2lkICphZGRyLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5ID0gbG9ja2hhc2hlbnRyeShhZGRyKTsKKwlzdHJ1Y3QgbG9ja19zdGF0ICpyZXQsICpuZXc7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJldCwgZW50cnksIGhhc2hfZW50cnkpIHsKKwkJaWYgKHJldC0+YWRkciA9PSBhZGRyKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwluZXcgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NrX3N0YXQpKTsKKwlpZiAoIW5ldykKKwkJZ290byBhbGxvY19mYWlsZWQ7CisKKwluZXctPmFkZHIgPSBhZGRyOworCW5ldy0+bmFtZSA9IHphbGxvYyhzaXplb2YoY2hhcikgKiBzdHJsZW4obmFtZSkgKyAxKTsKKwlpZiAoIW5ldy0+bmFtZSkKKwkJZ290byBhbGxvY19mYWlsZWQ7CisJc3RyY3B5KG5ldy0+bmFtZSwgbmFtZSk7CisKKwkvKiBMT0NLX1NUQVRFX1VOTE9DS0VEID09IDAgaXNuJ3QgZ3VhcmFudGVlZCBmb3JldmVyICovCisJbmV3LT5zdGF0ZSA9IExPQ0tfU1RBVEVfVU5MT0NLRUQ7CisJbmV3LT53YWl0X3RpbWVfbWluID0gVUxMT05HX01BWDsKKworCWxpc3RfYWRkKCZuZXctPmhhc2hfZW50cnksIGVudHJ5KTsKKwlyZXR1cm4gbmV3OworCithbGxvY19mYWlsZWQ6CisJZGllKCJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworfQorCitzdGF0aWMgY2hhcgkJCWNvbnN0ICppbnB1dF9uYW1lID0gInBlcmYuZGF0YSI7CisKK3N0YXRpYyBpbnQJCQlwcm9maWxlX2NwdSA9IC0xOworCitzdHJ1Y3QgcmF3X2V2ZW50X3NhbXBsZSB7CisJdTMyCQkJc2l6ZTsKKwljaGFyCQkJZGF0YVswXTsKK307CisKK3N0cnVjdCB0cmFjZV9hY3F1aXJlX2V2ZW50IHsKKwl2b2lkCQkJKmFkZHI7CisJY29uc3QgY2hhcgkJKm5hbWU7Cit9OworCitzdHJ1Y3QgdHJhY2VfYWNxdWlyZWRfZXZlbnQgeworCXZvaWQJCQkqYWRkcjsKKwljb25zdCBjaGFyCQkqbmFtZTsKK307CisKK3N0cnVjdCB0cmFjZV9jb250ZW5kZWRfZXZlbnQgeworCXZvaWQJCQkqYWRkcjsKKwljb25zdCBjaGFyCQkqbmFtZTsKK307CisKK3N0cnVjdCB0cmFjZV9yZWxlYXNlX2V2ZW50IHsKKwl2b2lkCQkJKmFkZHI7CisJY29uc3QgY2hhcgkJKm5hbWU7Cit9OworCitzdHJ1Y3QgdHJhY2VfbG9ja19oYW5kbGVyIHsKKwl2b2lkICgqYWNxdWlyZV9ldmVudCkoc3RydWN0IHRyYWNlX2FjcXVpcmVfZXZlbnQgKiwKKwkJCSAgICAgIHN0cnVjdCBldmVudCAqLAorCQkJICAgICAgaW50IGNwdSwKKwkJCSAgICAgIHU2NCB0aW1lc3RhbXAsCisJCQkgICAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpOworCisJdm9pZCAoKmFjcXVpcmVkX2V2ZW50KShzdHJ1Y3QgdHJhY2VfYWNxdWlyZWRfZXZlbnQgKiwKKwkJCSAgICAgICBzdHJ1Y3QgZXZlbnQgKiwKKwkJCSAgICAgICBpbnQgY3B1LAorCQkJICAgICAgIHU2NCB0aW1lc3RhbXAsCisJCQkgICAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkKTsKKworCXZvaWQgKCpjb250ZW5kZWRfZXZlbnQpKHN0cnVjdCB0cmFjZV9jb250ZW5kZWRfZXZlbnQgKiwKKwkJCQlzdHJ1Y3QgZXZlbnQgKiwKKwkJCQlpbnQgY3B1LAorCQkJCXU2NCB0aW1lc3RhbXAsCisJCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkKTsKKworCXZvaWQgKCpyZWxlYXNlX2V2ZW50KShzdHJ1Y3QgdHJhY2VfcmVsZWFzZV9ldmVudCAqLAorCQkJICAgICAgc3RydWN0IGV2ZW50ICosCisJCQkgICAgICBpbnQgY3B1LAorCQkJICAgICAgdTY0IHRpbWVzdGFtcCwKKwkJCSAgICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCk7Cit9OworCitzdGF0aWMgdm9pZAorcmVwb3J0X2xvY2tfYWNxdWlyZV9ldmVudChzdHJ1Y3QgdHJhY2VfYWNxdWlyZV9ldmVudCAqYWNxdWlyZV9ldmVudCwKKwkJCXN0cnVjdCBldmVudCAqX19ldmVudCBfX3VzZWQsCisJCQlpbnQgY3B1IF9fdXNlZCwKKwkJCXU2NCB0aW1lc3RhbXAsCisJCQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCXN0cnVjdCBsb2NrX3N0YXQgKnN0OworCisJc3QgPSBsb2NrX3N0YXRfZmluZG5ldyhhY3F1aXJlX2V2ZW50LT5hZGRyLCBhY3F1aXJlX2V2ZW50LT5uYW1lKTsKKworCXN3aXRjaCAoc3QtPnN0YXRlKSB7CisJY2FzZSBMT0NLX1NUQVRFX1VOTE9DS0VEOgorCQlicmVhazsKKwljYXNlIExPQ0tfU1RBVEVfTE9DS0VEOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUdfT04oMSk7CisJCWJyZWFrOworCX0KKworCXN0LT5wcmV2X2V2ZW50X3RpbWUgPSB0aW1lc3RhbXA7Cit9CisKK3N0YXRpYyB2b2lkCityZXBvcnRfbG9ja19hY3F1aXJlZF9ldmVudChzdHJ1Y3QgdHJhY2VfYWNxdWlyZWRfZXZlbnQgKmFjcXVpcmVkX2V2ZW50LAorCQkJIHN0cnVjdCBldmVudCAqX19ldmVudCBfX3VzZWQsCisJCQkgaW50IGNwdSBfX3VzZWQsCisJCQkgdTY0IHRpbWVzdGFtcCwKKwkJCSBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCXN0cnVjdCBsb2NrX3N0YXQgKnN0OworCisJc3QgPSBsb2NrX3N0YXRfZmluZG5ldyhhY3F1aXJlZF9ldmVudC0+YWRkciwgYWNxdWlyZWRfZXZlbnQtPm5hbWUpOworCisJc3dpdGNoIChzdC0+c3RhdGUpIHsKKwljYXNlIExPQ0tfU1RBVEVfVU5MT0NLRUQ6CisJCXN0LT5zdGF0ZSA9IExPQ0tfU1RBVEVfTE9DS0VEOworCQlzdC0+bnJfYWNxdWlyZWQrKzsKKwkJYnJlYWs7CisJY2FzZSBMT0NLX1NUQVRFX0xPQ0tFRDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHX09OKDEpOworCQlicmVhazsKKwl9CisKKwlzdC0+cHJldl9ldmVudF90aW1lID0gdGltZXN0YW1wOworfQorCitzdGF0aWMgdm9pZAorcmVwb3J0X2xvY2tfY29udGVuZGVkX2V2ZW50KHN0cnVjdCB0cmFjZV9jb250ZW5kZWRfZXZlbnQgKmNvbnRlbmRlZF9ldmVudCwKKwkJCSAgc3RydWN0IGV2ZW50ICpfX2V2ZW50IF9fdXNlZCwKKwkJCSAgaW50IGNwdSBfX3VzZWQsCisJCQkgIHU2NCB0aW1lc3RhbXAsCisJCQkgIHN0cnVjdCB0aHJlYWQgKnRocmVhZCBfX3VzZWQpCit7CisJc3RydWN0IGxvY2tfc3RhdCAqc3Q7CisKKwlzdCA9IGxvY2tfc3RhdF9maW5kbmV3KGNvbnRlbmRlZF9ldmVudC0+YWRkciwgY29udGVuZGVkX2V2ZW50LT5uYW1lKTsKKworCXN3aXRjaCAoc3QtPnN0YXRlKSB7CisJY2FzZSBMT0NLX1NUQVRFX1VOTE9DS0VEOgorCQlicmVhazsKKwljYXNlIExPQ0tfU1RBVEVfTE9DS0VEOgorCQlzdC0+bnJfY29udGVuZGVkKys7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVR19PTigxKTsKKwkJYnJlYWs7CisJfQorCisJc3QtPnByZXZfZXZlbnRfdGltZSA9IHRpbWVzdGFtcDsKK30KKworc3RhdGljIHZvaWQKK3JlcG9ydF9sb2NrX3JlbGVhc2VfZXZlbnQoc3RydWN0IHRyYWNlX3JlbGVhc2VfZXZlbnQgKnJlbGVhc2VfZXZlbnQsCisJCQlzdHJ1Y3QgZXZlbnQgKl9fZXZlbnQgX191c2VkLAorCQkJaW50IGNwdSBfX3VzZWQsCisJCQl1NjQgdGltZXN0YW1wLAorCQkJc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgbG9ja19zdGF0ICpzdDsKKwl1NjQgaG9sZF90aW1lOworCisJc3QgPSBsb2NrX3N0YXRfZmluZG5ldyhyZWxlYXNlX2V2ZW50LT5hZGRyLCByZWxlYXNlX2V2ZW50LT5uYW1lKTsKKworCXN3aXRjaCAoc3QtPnN0YXRlKSB7CisJY2FzZSBMT0NLX1NUQVRFX1VOTE9DS0VEOgorCQlicmVhazsKKwljYXNlIExPQ0tfU1RBVEVfTE9DS0VEOgorCQlzdC0+c3RhdGUgPSBMT0NLX1NUQVRFX1VOTE9DS0VEOworCQlob2xkX3RpbWUgPSB0aW1lc3RhbXAgLSBzdC0+cHJldl9ldmVudF90aW1lOworCisJCWlmICh0aW1lc3RhbXAgPCBzdC0+cHJldl9ldmVudF90aW1lKSB7CisJCQkvKiB0ZXJyaWJseSwgdGhpcyBjYW4gaGFwcGVuLi4uICovCisJCQlnb3RvIGVuZDsKKwkJfQorCisJCWlmIChzdC0+d2FpdF90aW1lX21pbiA+IGhvbGRfdGltZSkKKwkJCXN0LT53YWl0X3RpbWVfbWluID0gaG9sZF90aW1lOworCQlpZiAoc3QtPndhaXRfdGltZV9tYXggPCBob2xkX3RpbWUpCisJCQlzdC0+d2FpdF90aW1lX21heCA9IGhvbGRfdGltZTsKKwkJc3QtPndhaXRfdGltZV90b3RhbCArPSBob2xkX3RpbWU7CisKKwkJc3QtPm5yX3JlbGVhc2UrKzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHX09OKDEpOworCQlicmVhazsKKwl9CisKK2VuZDoKKwlzdC0+cHJldl9ldmVudF90aW1lID0gdGltZXN0YW1wOworfQorCisvKiBsb2NrIG9yaWVudGVkIGhhbmRsZXJzICovCisvKiBUT0RPOiBoYW5kbGVycyBmb3IgQ1BVIG9yaWVudGVkLCB0aHJlYWQgb3JpZW50ZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfbG9ja19oYW5kbGVyIHJlcG9ydF9sb2NrX29wcyAgPSB7CisJLmFjcXVpcmVfZXZlbnQJCT0gcmVwb3J0X2xvY2tfYWNxdWlyZV9ldmVudCwKKwkuYWNxdWlyZWRfZXZlbnQJCT0gcmVwb3J0X2xvY2tfYWNxdWlyZWRfZXZlbnQsCisJLmNvbnRlbmRlZF9ldmVudAk9IHJlcG9ydF9sb2NrX2NvbnRlbmRlZF9ldmVudCwKKwkucmVsZWFzZV9ldmVudAkJPSByZXBvcnRfbG9ja19yZWxlYXNlX2V2ZW50LAorfTsKKworc3RhdGljIHN0cnVjdCB0cmFjZV9sb2NrX2hhbmRsZXIgKnRyYWNlX2hhbmRsZXI7CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX2xvY2tfYWNxdWlyZV9ldmVudCh2b2lkICpkYXRhLAorCQkJICAgc3RydWN0IGV2ZW50ICpldmVudCBfX3VzZWQsCisJCQkgICBpbnQgY3B1IF9fdXNlZCwKKwkJCSAgIHU2NCB0aW1lc3RhbXAgX191c2VkLAorCQkJICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgdHJhY2VfYWNxdWlyZV9ldmVudCBhY3F1aXJlX2V2ZW50OworCXU2NCB0bXA7CQkvKiB0aGlzIGlzIHJlcXVpcmVkIGZvciBjYXN0aW5nLi4uICovCisKKwl0bXAgPSByYXdfZmllbGRfdmFsdWUoZXZlbnQsICJsb2NrZGVwX2FkZHIiLCBkYXRhKTsKKwltZW1jcHkoJmFjcXVpcmVfZXZlbnQuYWRkciwgJnRtcCwgc2l6ZW9mKHZvaWQgKikpOworCWFjcXVpcmVfZXZlbnQubmFtZSA9IChjaGFyICopcmF3X2ZpZWxkX3B0cihldmVudCwgIm5hbWUiLCBkYXRhKTsKKworCWlmICh0cmFjZV9oYW5kbGVyLT5hY3F1aXJlX2V2ZW50KQorCQl0cmFjZV9oYW5kbGVyLT5hY3F1aXJlX2V2ZW50KCZhY3F1aXJlX2V2ZW50LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX2xvY2tfYWNxdWlyZWRfZXZlbnQodm9pZCAqZGF0YSwKKwkJCSAgICBzdHJ1Y3QgZXZlbnQgKmV2ZW50IF9fdXNlZCwKKwkJCSAgICBpbnQgY3B1IF9fdXNlZCwKKwkJCSAgICB1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJCSAgICBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgX191c2VkKQoreworCXN0cnVjdCB0cmFjZV9hY3F1aXJlZF9ldmVudCBhY3F1aXJlZF9ldmVudDsKKwl1NjQgdG1wOwkJLyogdGhpcyBpcyByZXF1aXJlZCBmb3IgY2FzdGluZy4uLiAqLworCisJdG1wID0gcmF3X2ZpZWxkX3ZhbHVlKGV2ZW50LCAibG9ja2RlcF9hZGRyIiwgZGF0YSk7CisJbWVtY3B5KCZhY3F1aXJlZF9ldmVudC5hZGRyLCAmdG1wLCBzaXplb2Yodm9pZCAqKSk7CisJYWNxdWlyZWRfZXZlbnQubmFtZSA9IChjaGFyICopcmF3X2ZpZWxkX3B0cihldmVudCwgIm5hbWUiLCBkYXRhKTsKKworCWlmICh0cmFjZV9oYW5kbGVyLT5hY3F1aXJlX2V2ZW50KQorCQl0cmFjZV9oYW5kbGVyLT5hY3F1aXJlZF9ldmVudCgmYWNxdWlyZWRfZXZlbnQsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKK30KKworc3RhdGljIHZvaWQKK3Byb2Nlc3NfbG9ja19jb250ZW5kZWRfZXZlbnQodm9pZCAqZGF0YSwKKwkJCSAgICAgc3RydWN0IGV2ZW50ICpldmVudCBfX3VzZWQsCisJCQkgICAgIGludCBjcHUgX191c2VkLAorCQkJICAgICB1NjQgdGltZXN0YW1wIF9fdXNlZCwKKwkJCSAgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgdHJhY2VfY29udGVuZGVkX2V2ZW50IGNvbnRlbmRlZF9ldmVudDsKKwl1NjQgdG1wOwkJLyogdGhpcyBpcyByZXF1aXJlZCBmb3IgY2FzdGluZy4uLiAqLworCisJdG1wID0gcmF3X2ZpZWxkX3ZhbHVlKGV2ZW50LCAibG9ja2RlcF9hZGRyIiwgZGF0YSk7CisJbWVtY3B5KCZjb250ZW5kZWRfZXZlbnQuYWRkciwgJnRtcCwgc2l6ZW9mKHZvaWQgKikpOworCWNvbnRlbmRlZF9ldmVudC5uYW1lID0gKGNoYXIgKilyYXdfZmllbGRfcHRyKGV2ZW50LCAibmFtZSIsIGRhdGEpOworCisJaWYgKHRyYWNlX2hhbmRsZXItPmFjcXVpcmVfZXZlbnQpCisJCXRyYWNlX2hhbmRsZXItPmNvbnRlbmRlZF9ldmVudCgmY29udGVuZGVkX2V2ZW50LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX2xvY2tfcmVsZWFzZV9ldmVudCh2b2lkICpkYXRhLAorCQkJICAgc3RydWN0IGV2ZW50ICpldmVudCBfX3VzZWQsCisJCQkgICBpbnQgY3B1IF9fdXNlZCwKKwkJCSAgIHU2NCB0aW1lc3RhbXAgX191c2VkLAorCQkJICAgc3RydWN0IHRocmVhZCAqdGhyZWFkIF9fdXNlZCkKK3sKKwlzdHJ1Y3QgdHJhY2VfcmVsZWFzZV9ldmVudCByZWxlYXNlX2V2ZW50OworCXU2NCB0bXA7CQkvKiB0aGlzIGlzIHJlcXVpcmVkIGZvciBjYXN0aW5nLi4uICovCisKKwl0bXAgPSByYXdfZmllbGRfdmFsdWUoZXZlbnQsICJsb2NrZGVwX2FkZHIiLCBkYXRhKTsKKwltZW1jcHkoJnJlbGVhc2VfZXZlbnQuYWRkciwgJnRtcCwgc2l6ZW9mKHZvaWQgKikpOworCXJlbGVhc2VfZXZlbnQubmFtZSA9IChjaGFyICopcmF3X2ZpZWxkX3B0cihldmVudCwgIm5hbWUiLCBkYXRhKTsKKworCWlmICh0cmFjZV9oYW5kbGVyLT5hY3F1aXJlX2V2ZW50KQorCQl0cmFjZV9oYW5kbGVyLT5yZWxlYXNlX2V2ZW50KCZyZWxlYXNlX2V2ZW50LCBldmVudCwgY3B1LCB0aW1lc3RhbXAsIHRocmVhZCk7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9jZXNzX3Jhd19ldmVudCh2b2lkICpkYXRhLCBpbnQgY3B1LAorCQkgIHU2NCB0aW1lc3RhbXAsIHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKK3sKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50OworCWludCB0eXBlOworCisJdHlwZSA9IHRyYWNlX3BhcnNlX2NvbW1vbl90eXBlKGRhdGEpOworCWV2ZW50ID0gdHJhY2VfZmluZF9ldmVudCh0eXBlKTsKKworCWlmICghc3RyY21wKGV2ZW50LT5uYW1lLCAibG9ja19hY3F1aXJlIikpCisJCXByb2Nlc3NfbG9ja19hY3F1aXJlX2V2ZW50KGRhdGEsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKKwlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgImxvY2tfYWNxdWlyZWQiKSkKKwkJcHJvY2Vzc19sb2NrX2FjcXVpcmVkX2V2ZW50KGRhdGEsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKKwlpZiAoIXN0cmNtcChldmVudC0+bmFtZSwgImxvY2tfY29udGVuZGVkIikpCisJCXByb2Nlc3NfbG9ja19jb250ZW5kZWRfZXZlbnQoZGF0YSwgZXZlbnQsIGNwdSwgdGltZXN0YW1wLCB0aHJlYWQpOworCWlmICghc3RyY21wKGV2ZW50LT5uYW1lLCAibG9ja19yZWxlYXNlIikpCisJCXByb2Nlc3NfbG9ja19yZWxlYXNlX2V2ZW50KGRhdGEsIGV2ZW50LCBjcHUsIHRpbWVzdGFtcCwgdGhyZWFkKTsKK30KKworc3RhdGljIGludCBwcm9jZXNzX3NhbXBsZV9ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CisJc3RydWN0IHNhbXBsZV9kYXRhIGRhdGE7CisKKwliemVybygmZGF0YSwgc2l6ZW9mKHN0cnVjdCBzYW1wbGVfZGF0YSkpOworCWV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIHNlc3Npb24tPnNhbXBsZV90eXBlLCAmZGF0YSk7CisJdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIGRhdGEucGlkKTsKKworCWlmICh0aHJlYWQgPT0gTlVMTCkgeworCQlwcl9kZWJ1ZygicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCisJCQkgZXZlbnQtPmhlYWRlci50eXBlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWR1bXBfcHJpbnRmKCIgLi4uIHRocmVhZDogJXM6JWRcbiIsIHRocmVhZC0+Y29tbSwgdGhyZWFkLT5waWQpOworCisJaWYgKHByb2ZpbGVfY3B1ICE9IC0xICYmIHByb2ZpbGVfY3B1ICE9IChpbnQpIGRhdGEuY3B1KQorCQlyZXR1cm4gMDsKKworCXByb2Nlc3NfcmF3X2V2ZW50KGRhdGEucmF3X2RhdGEsIGRhdGEuY3B1LCBkYXRhLnRpbWUsIHRocmVhZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogVE9ETzogdmFyaW91cyB3YXkgdG8gcHJpbnQsIGNvbG9yaW5nLCBuYW5vIG9yIG1pbGxpIHNlYyAqLworc3RhdGljIHZvaWQgcHJpbnRfcmVzdWx0KHZvaWQpCit7CisJc3RydWN0IGxvY2tfc3RhdCAqc3Q7CisJY2hhciBjdXRfbmFtZVsyMF07CisKKwlwcmludGYoIiUxOHMgIiwgIklEIik7CisJcHJpbnRmKCIlMjBzICIsICJOYW1lIik7CisJcHJpbnRmKCIlMTBzICIsICJhY3F1aXJlZCIpOworCXByaW50ZigiJTEwcyAiLCAiY29udGVuZGVkIik7CisKKwlwcmludGYoIiUxNXMgIiwgInRvdGFsIHdhaXQgKG5zKSIpOworCXByaW50ZigiJTE1cyAiLCAibWF4IHdhaXQgKG5zKSIpOworCXByaW50ZigiJTE1cyAiLCAibWluIHdhaXQgKG5zKSIpOworCisJcHJpbnRmKCJcblxuIik7CisKKwl3aGlsZSAoKHN0ID0gcG9wX2Zyb21fcmVzdWx0KCkpKSB7CisJCWJ6ZXJvKGN1dF9uYW1lLCAyMCk7CisKKwkJcHJpbnRmKCIlcCAiLCBzdC0+YWRkcik7CisKKwkJaWYgKHN0cmxlbihzdC0+bmFtZSkgPCAxNikgeworCQkJLyogb3V0cHV0IHJhdyBuYW1lICovCisJCQlwcmludGYoIiUyMHMgIiwgc3QtPm5hbWUpOworCQl9IGVsc2UgeworCQkJc3RybmNweShjdXRfbmFtZSwgc3QtPm5hbWUsIDE2KTsKKwkJCWN1dF9uYW1lWzE2XSA9ICcuJzsKKwkJCWN1dF9uYW1lWzE3XSA9ICcuJzsKKwkJCWN1dF9uYW1lWzE4XSA9ICcuJzsKKwkJCWN1dF9uYW1lWzE5XSA9ICdcMCc7CisJCQkvKiBjdXQgb2ZmIG5hbWUgZm9yIHNhdmluZyBvdXRwdXQgc3R5bGUgKi8KKwkJCXByaW50ZigiJTIwcyAiLCBjdXRfbmFtZSk7CisJCX0KKworCQlwcmludGYoIiUxMHUgIiwgc3QtPm5yX2FjcXVpcmVkKTsKKwkJcHJpbnRmKCIlMTB1ICIsIHN0LT5ucl9jb250ZW5kZWQpOworCisJCXByaW50ZigiJTE1bGx1ICIsIHN0LT53YWl0X3RpbWVfdG90YWwpOworCQlwcmludGYoIiUxNWxsdSAiLCBzdC0+d2FpdF90aW1lX21heCk7CisJCXByaW50ZigiJTE1bGx1ICIsIHN0LT53YWl0X3RpbWVfbWluID09IFVMTE9OR19NQVggPworCQkgICAgICAgMCA6IHN0LT53YWl0X3RpbWVfbWluKTsKKwkJcHJpbnRmKCJcbiIpOworCX0KK30KKworc3RhdGljIHZvaWQgZHVtcF9tYXAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgbG9ja19zdGF0ICpzdDsKKworCWZvciAoaSA9IDA7IGkgPCBMT0NLSEFTSF9TSVpFOyBpKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzdCwgJmxvY2toYXNoX3RhYmxlW2ldLCBoYXNoX2VudHJ5KSB7CisJCQlwcmludGYoIiVwOiAlc1xuIiwgc3QtPmFkZHIsIHN0LT5uYW1lKTsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBlb3BzID0geworCS5zYW1wbGUJCQk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAorCS5jb21tCQkJPSBldmVudF9fcHJvY2Vzc19jb21tLAorfTsKKworc3RhdGljIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb247CisKK3N0YXRpYyBpbnQgcmVhZF9ldmVudHModm9pZCkKK3sKKwlzZXNzaW9uID0gcGVyZl9zZXNzaW9uX19uZXcoaW5wdXRfbmFtZSwgT19SRE9OTFksIDApOworCWlmICghc2Vzc2lvbikKKwkJZGllKCJJbml0aWFsaXppbmcgcGVyZiBzZXNzaW9uIGZhaWxlZFxuIik7CisKKwlyZXR1cm4gcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uLCAmZW9wcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNvcnRfcmVzdWx0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGxvY2tfc3RhdCAqc3Q7CisKKwlmb3IgKGkgPSAwOyBpIDwgTE9DS0hBU0hfU0laRTsgaSsrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3QsICZsb2NraGFzaF90YWJsZVtpXSwgaGFzaF9lbnRyeSkgeworCQkJaW5zZXJ0X3RvX3Jlc3VsdChzdCwgY29tcGFyZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fY21kX3JlcG9ydCh2b2lkKQoreworCXNldHVwX3BhZ2VyKCk7CisJc2VsZWN0X2tleSgpOworCXJlYWRfZXZlbnRzKCk7CisJc29ydF9yZXN1bHQoKTsKKwlwcmludF9yZXN1bHQoKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByZXBvcnRfdXNhZ2VbXSA9IHsKKwkicGVyZiBsb2NrIHJlcG9ydCBbPG9wdGlvbnM+XSIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gcmVwb3J0X29wdGlvbnNbXSA9IHsKKwlPUFRfU1RSSU5HKCdrJywgImtleSIsICZzb3J0X2tleSwgImFjcXVpcmVkIiwKKwkJICAgICJrZXkgZm9yIHNvcnRpbmciKSwKKwkvKiBUT0RPOiB0eXBlICovCisJT1BUX0VORCgpCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxvY2tfdXNhZ2VbXSA9IHsKKwkicGVyZiBsb2NrIFs8b3B0aW9ucz5dIHtyZWNvcmR8dHJhY2V8cmVwb3J0fSIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gbG9ja19vcHRpb25zW10gPSB7CisJT1BUX1NUUklORygnaScsICJpbnB1dCIsICZpbnB1dF9uYW1lLCAiZmlsZSIsICJpbnB1dCBmaWxlIG5hbWUiKSwKKwlPUFRfQk9PTEVBTigndicsICJ2ZXJib3NlIiwgJnZlcmJvc2UsICJiZSBtb3JlIHZlcmJvc2UgKHNob3cgc3ltYm9sIGFkZHJlc3MsIGV0YykiKSwKKwlPUFRfQk9PTEVBTignRCcsICJkdW1wLXJhdy10cmFjZSIsICZkdW1wX3RyYWNlLCAiZHVtcCByYXcgdHJhY2UgaW4gQVNDSUkiKSwKKwlPUFRfRU5EKCkKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpyZWNvcmRfYXJnc1tdID0geworCSJyZWNvcmQiLAorCSItYSIsCisJIi1SIiwKKwkiLU0iLAorCSItZiIsCisJIi1tIiwgIjEwMjQiLAorCSItYyIsICIxIiwKKwkiLWUiLCAibG9jazpsb2NrX2FjcXVpcmU6ciIsCisJIi1lIiwgImxvY2s6bG9ja19hY3F1aXJlZDpyIiwKKwkiLWUiLCAibG9jazpsb2NrX2NvbnRlbmRlZDpyIiwKKwkiLWUiLCAibG9jazpsb2NrX3JlbGVhc2U6ciIsCit9OworCitzdGF0aWMgaW50IF9fY21kX3JlY29yZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgaW50IHJlY19hcmdjLCBpLCBqOworCWNvbnN0IGNoYXIgKipyZWNfYXJndjsKKworCXJlY19hcmdjID0gQVJSQVlfU0laRShyZWNvcmRfYXJncykgKyBhcmdjIC0gMTsKKwlyZWNfYXJndiA9IGNhbGxvYyhyZWNfYXJnYyArIDEsIHNpemVvZihjaGFyICopKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlY29yZF9hcmdzKTsgaSsrKQorCQlyZWNfYXJndltpXSA9IHN0cmR1cChyZWNvcmRfYXJnc1tpXSk7CisKKwlmb3IgKGogPSAxOyBqIDwgKHVuc2lnbmVkIGludClhcmdjOyBqKyssIGkrKykKKwkJcmVjX2FyZ3ZbaV0gPSBhcmd2W2pdOworCisJQlVHX09OKGkgIT0gcmVjX2FyZ2MpOworCisJcmV0dXJuIGNtZF9yZWNvcmQoaSwgcmVjX2FyZ3YsIE5VTEwpOworfQorCitpbnQgY21kX2xvY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQoreworCXVuc2lnbmVkIGludCBpOworCisJc3ltYm9sX19pbml0KCk7CisJZm9yIChpID0gMDsgaSA8IExPQ0tIQVNIX1NJWkU7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQobG9ja2hhc2hfdGFibGUgKyBpKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGxvY2tfb3B0aW9ucywgbG9ja191c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisJaWYgKCFhcmdjKQorCQl1c2FnZV93aXRoX29wdGlvbnMobG9ja191c2FnZSwgbG9ja19vcHRpb25zKTsKKworCWlmICghc3RybmNtcChhcmd2WzBdLCAicmVjIiwgMykpIHsKKwkJcmV0dXJuIF9fY21kX3JlY29yZChhcmdjLCBhcmd2KTsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKGFyZ3ZbMF0sICJyZXBvcnQiLCA2KSkgeworCQl0cmFjZV9oYW5kbGVyID0gJnJlcG9ydF9sb2NrX29wczsKKwkJaWYgKGFyZ2MpIHsKKwkJCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsCisJCQkJCSAgICAgcmVwb3J0X29wdGlvbnMsIHJlcG9ydF91c2FnZSwgMCk7CisJCQlpZiAoYXJnYykKKwkJCQl1c2FnZV93aXRoX29wdGlvbnMocmVwb3J0X3VzYWdlLCByZXBvcnRfb3B0aW9ucyk7CisJCX0KKwkJX19jbWRfcmVwb3J0KCk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJ0cmFjZSIpKSB7CisJCS8qIEFsaWFzZWQgdG8gJ3BlcmYgdHJhY2UnICovCisJCXJldHVybiBjbWRfdHJhY2UoYXJnYywgYXJndiwgcHJlZml4KTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgIm1hcCIpKSB7CisJCS8qIHJlY3ljbGluZyByZXBvcnRfbG9ja19vcHMgKi8KKwkJdHJhY2VfaGFuZGxlciA9ICZyZXBvcnRfbG9ja19vcHM7CisJCXNldHVwX3BhZ2VyKCk7CisJCXJlYWRfZXZlbnRzKCk7CisJCWR1bXBfbWFwKCk7CisJfSBlbHNlIHsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGxvY2tfdXNhZ2UsIGxvY2tfb3B0aW9ucyk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCmluZGV4IGMxZTY3NzQuLmFkNDdiZDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSAidXRpbC9kZWJ1Z2ZzLmgiCiAjaW5jbHVkZSAidXRpbC9zeW1ib2wuaCIKICNpbmNsdWRlICJ1dGlsL3RocmVhZC5oIgotI2luY2x1ZGUgInV0aWwvc2Vzc2lvbi5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2UtZXZlbnRzLmgiCS8qIEZvciBkZWJ1Z2ZzX3BhdGggKi8KICNpbmNsdWRlICJ1dGlsL3Byb2JlLWZpbmRlci5oIgpAQCAtNTUsMTEgKzU0LDEzIEBACiAJYm9vbCBuZWVkX2R3YXJmOwogCWJvb2wgbGlzdF9ldmVudHM7CiAJYm9vbCBmb3JjZV9hZGQ7CisJYm9vbCBzaG93X2xpbmVzOwogCWludCBucl9wcm9iZTsKIAlzdHJ1Y3QgcHJvYmVfcG9pbnQgcHJvYmVzW01BWF9QUk9CRVNdOwogCXN0cnVjdCBzdHJsaXN0ICpkZWxsaXN0OwotCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnBzZXNzaW9uOwotCXN0cnVjdCBtYXAgKmttYXA7CisJc3RydWN0IG1hcF9ncm91cHMga21hcF9ncm91cHM7CisJc3RydWN0IG1hcCAqa21hcHNbTUFQX19OUl9UWVBFU107CisJc3RydWN0IGxpbmVfcmFuZ2UgbGluZV9yYW5nZTsKIH0gc2Vzc2lvbjsKIAogCkBAIC0xMjAsOCArMTIxLDggQEAKIHN0YXRpYyB2b2lkIGV2YWx1YXRlX3Byb2JlX3BvaW50KHN0cnVjdCBwcm9iZV9wb2ludCAqcHApCiB7CiAJc3RydWN0IHN5bWJvbCAqc3ltOwotCXN5bSA9IG1hcF9fZmluZF9zeW1ib2xfYnlfbmFtZShzZXNzaW9uLmttYXAsIHBwLT5mdW5jdGlvbiwKLQkJCQkgICAgICAgc2Vzc2lvbi5wc2Vzc2lvbiwgTlVMTCk7CisJc3ltID0gbWFwX19maW5kX3N5bWJvbF9ieV9uYW1lKHNlc3Npb24ua21hcHNbTUFQX19GVU5DVElPTl0sCisJCQkJICAgICAgIHBwLT5mdW5jdGlvbiwgTlVMTCk7CiAJaWYgKCFzeW0pCiAJCWRpZSgiS2VybmVsIHN5bWJvbCBcJyVzXCcgbm90IGZvdW5kIC0gcHJvYmUgbm90IGFkZGVkLiIsCiAJCSAgICBwcC0+ZnVuY3Rpb24pOwpAQCAtMTMwLDEyICsxMzEsMjMgQEAKICNpZm5kZWYgTk9fTElCRFdBUkYKIHN0YXRpYyBpbnQgb3Blbl92bWxpbnV4KHZvaWQpCiB7Ci0JaWYgKG1hcF9fbG9hZChzZXNzaW9uLmttYXAsIHNlc3Npb24ucHNlc3Npb24sIE5VTEwpIDwgMCkgeworCWlmIChtYXBfX2xvYWQoc2Vzc2lvbi5rbWFwc1tNQVBfX0ZVTkNUSU9OXSwgTlVMTCkgPCAwKSB7CiAJCXByX2RlYnVnKCJGYWlsZWQgdG8gbG9hZCBrZXJuZWwgbWFwLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlwcl9kZWJ1ZygiVHJ5IHRvIG9wZW4gJXNcbiIsIHNlc3Npb24ua21hcC0+ZHNvLT5sb25nX25hbWUpOwotCXJldHVybiBvcGVuKHNlc3Npb24ua21hcC0+ZHNvLT5sb25nX25hbWUsIE9fUkRPTkxZKTsKKwlwcl9kZWJ1ZygiVHJ5IHRvIG9wZW4gJXNcbiIsCisJCSBzZXNzaW9uLmttYXBzW01BUF9fRlVOQ1RJT05dLT5kc28tPmxvbmdfbmFtZSk7CisJcmV0dXJuIG9wZW4oc2Vzc2lvbi5rbWFwc1tNQVBfX0ZVTkNUSU9OXS0+ZHNvLT5sb25nX25hbWUsIE9fUkRPTkxZKTsKK30KKworc3RhdGljIGludCBvcHRfc2hvd19saW5lcyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX191c2VkLAorCQkJICBjb25zdCBjaGFyICpzdHIsIGludCB1bnNldCBfX3VzZWQpCit7CisJaWYgKHN0cikKKwkJcGFyc2VfbGluZV9yYW5nZV9kZXNjKHN0ciwgJnNlc3Npb24ubGluZV9yYW5nZSk7CisJSU5JVF9MSVNUX0hFQUQoJnNlc3Npb24ubGluZV9yYW5nZS5saW5lX2xpc3QpOworCXNlc3Npb24uc2hvd19saW5lcyA9IHRydWU7CisJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIApAQCAtMTQ0LDYgKzE1Niw3IEBACiAJInBlcmYgcHJvYmUgWzxvcHRpb25zPl0gLS1hZGQgJ1BST0JFREVGJyBbLS1hZGQgJ1BST0JFREVGJyAuLi5dIiwKIAkicGVyZiBwcm9iZSBbPG9wdGlvbnM+XSAtLWRlbCAnW0dST1VQOl1FVkVOVCcgLi4uIiwKIAkicGVyZiBwcm9iZSAtLWxpc3QiLAorCSJwZXJmIHByb2JlIC0tbGluZSAnTElORURFU0MnIiwKIAlOVUxMCiB9OwogCkBAIC0xODIsOSArMTk1LDMxIEBACiAJCW9wdF9hZGRfcHJvYmVfZXZlbnQpLAogCU9QVF9CT09MRUFOKCdmJywgImZvcmNlIiwgJnNlc3Npb24uZm9yY2VfYWRkLCAiZm9yY2libHkgYWRkIGV2ZW50cyIKIAkJICAgICIgd2l0aCBleGlzdGluZyBuYW1lIiksCisjaWZuZGVmIE5PX0xJQkRXQVJGCisJT1BUX0NBTExCQUNLKCdMJywgImxpbmUiLCBOVUxMLAorCQkgICAgICJGVU5DWzpSTE5bK05VTXw6UkxOMl1dfFNSQzpBTE5bK05VTXw6QUxOMl0iLAorCQkgICAgICJTaG93IHNvdXJjZSBjb2RlIGxpbmVzLiIsIG9wdF9zaG93X2xpbmVzKSwKKyNlbmRpZgogCU9QVF9FTkQoKQogfTsKIAorLyogSW5pdGlhbGl6ZSBzeW1ib2wgbWFwcyBmb3Igdm1saW51eCAqLworc3RhdGljIHZvaWQgaW5pdF92bWxpbnV4KHZvaWQpCit7CisJc3ltYm9sX2NvbmYuc29ydF9ieV9uYW1lID0gdHJ1ZTsKKwlpZiAoc3ltYm9sX2NvbmYudm1saW51eF9uYW1lID09IE5VTEwpCisJCXN5bWJvbF9jb25mLnRyeV92bWxpbnV4X3BhdGggPSB0cnVlOworCWVsc2UKKwkJcHJfZGVidWcoIlVzZSB2bWxpbnV4OiAlc1xuIiwgc3ltYm9sX2NvbmYudm1saW51eF9uYW1lKTsKKwlpZiAoc3ltYm9sX19pbml0KCkgPCAwKQorCQlkaWUoIkZhaWxlZCB0byBpbml0IHN5bWJvbCBtYXAuIik7CisKKwltYXBfZ3JvdXBzX19pbml0KCZzZXNzaW9uLmttYXBfZ3JvdXBzKTsKKwlpZiAobWFwX2dyb3Vwc19fY3JlYXRlX2tlcm5lbF9tYXBzKCZzZXNzaW9uLmttYXBfZ3JvdXBzLAorCQkJCQkgICBzZXNzaW9uLmttYXBzKSA8IDApCisJCWRpZSgiRmFpbGVkIHRvIGNyZWF0ZSBrZXJuZWwgbWFwcy4iKTsKK30KKwogaW50IGNtZF9wcm9iZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCiB7CiAJaW50IGksIHJldDsKQEAgLTIwMyw3ICsyMzgsOCBAQAogCQlwYXJzZV9wcm9iZV9ldmVudF9hcmd2KGFyZ2MsIGFyZ3YpOwogCX0KIAotCWlmICgoIXNlc3Npb24ubnJfcHJvYmUgJiYgIXNlc3Npb24uZGVsbGlzdCAmJiAhc2Vzc2lvbi5saXN0X2V2ZW50cykpCisJaWYgKCghc2Vzc2lvbi5ucl9wcm9iZSAmJiAhc2Vzc2lvbi5kZWxsaXN0ICYmICFzZXNzaW9uLmxpc3RfZXZlbnRzICYmCisJICAgICAhc2Vzc2lvbi5zaG93X2xpbmVzKSkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKIAogCWlmIChkZWJ1Z2ZzX3ZhbGlkX21vdW50cG9pbnQoZGVidWdmc19wYXRoKSA8IDApCkBAIC0yMTUsMTAgKzI1MSwzNCBAQAogCQkJCSAgICIgLS1hZGQvLS1kZWwuXG4iKTsKIAkJCXVzYWdlX3dpdGhfb3B0aW9ucyhwcm9iZV91c2FnZSwgb3B0aW9ucyk7CiAJCX0KKwkJaWYgKHNlc3Npb24uc2hvd19saW5lcykgeworCQkJcHJfd2FybmluZygiICBFcnJvcjogRG9uJ3QgdXNlIC0tbGlzdCB3aXRoIC0tbGluZS5cbiIpOworCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsKKwkJfQogCQlzaG93X3BlcmZfcHJvYmVfZXZlbnRzKCk7CiAJCXJldHVybiAwOwogCX0KIAorI2lmbmRlZiBOT19MSUJEV0FSRgorCWlmIChzZXNzaW9uLnNob3dfbGluZXMpIHsKKwkJaWYgKHNlc3Npb24ubnJfcHJvYmUgIT0gMCB8fCBzZXNzaW9uLmRlbGxpc3QpIHsKKwkJCXByX3dhcm5pbmcoIiAgRXJyb3I6IERvbid0IHVzZSAtLWxpbmUgd2l0aCIKKwkJCQkgICAiIC0tYWRkLy0tZGVsLlxuIik7CisJCQl1c2FnZV93aXRoX29wdGlvbnMocHJvYmVfdXNhZ2UsIG9wdGlvbnMpOworCQl9CisJCWluaXRfdm1saW51eCgpOworCQlmZCA9IG9wZW5fdm1saW51eCgpOworCQlpZiAoZmQgPCAwKQorCQkJZGllKCJDb3VsZCBub3Qgb3BlbiBkZWJ1Z2luZm8gZmlsZS4iKTsKKwkJcmV0ID0gZmluZF9saW5lX3JhbmdlKGZkLCAmc2Vzc2lvbi5saW5lX3JhbmdlKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJZGllKCJTb3VyY2UgbGluZSBpcyBub3QgZm91bmQuXG4iKTsKKwkJY2xvc2UoZmQpOworCQlzaG93X2xpbmVfcmFuZ2UoJnNlc3Npb24ubGluZV9yYW5nZSk7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCiAJaWYgKHNlc3Npb24uZGVsbGlzdCkgewogCQlkZWxfdHJhY2Vfa3Byb2JlX2V2ZW50cyhzZXNzaW9uLmRlbGxpc3QpOwogCQlzdHJsaXN0X19kZWxldGUoc2Vzc2lvbi5kZWxsaXN0KTsKQEAgLTIyNiwyMCArMjg2LDggQEAKIAkJCXJldHVybiAwOwogCX0KIAotCS8qIEluaXRpYWxpemUgc3ltYm9sIG1hcHMgZm9yIHZtbGludXggKi8KLQlzeW1ib2xfY29uZi5zb3J0X2J5X25hbWUgPSB0cnVlOwotCWlmIChzeW1ib2xfY29uZi52bWxpbnV4X25hbWUgPT0gTlVMTCkKLQkJc3ltYm9sX2NvbmYudHJ5X3ZtbGludXhfcGF0aCA9IHRydWU7Ci0JaWYgKHN5bWJvbF9faW5pdCgpIDwgMCkKLQkJZGllKCJGYWlsZWQgdG8gaW5pdCBzeW1ib2wgbWFwLiIpOwotCXNlc3Npb24ucHNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhOVUxMLCBPX1dST05MWSwgZmFsc2UpOwotCWlmIChzZXNzaW9uLnBzZXNzaW9uID09IE5VTEwpCi0JCWRpZSgiRmFpbGVkIHRvIGluaXQgcGVyZl9zZXNzaW9uLiIpOwotCXNlc3Npb24ua21hcCA9IG1hcF9ncm91cHNfX2ZpbmRfYnlfbmFtZSgmc2Vzc2lvbi5wc2Vzc2lvbi0+a21hcHMsCi0JCQkJCQlNQVBfX0ZVTkNUSU9OLAotCQkJCQkJIltrZXJuZWwua2FsbHN5bXNdIik7Ci0JaWYgKCFzZXNzaW9uLmttYXApCi0JCWRpZSgiQ291bGQgbm90IGZpbmQga2VybmVsIG1hcC5cbiIpOworCS8qIEFkZCBwcm9iZXMgKi8KKwlpbml0X3ZtbGludXgoKTsKIAogCWlmIChzZXNzaW9uLm5lZWRfZHdhcmYpCiAjaWZkZWYgTk9fTElCRFdBUkYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwppbmRleCAyNjU0MjUzLi43NzE1MzNjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCkBAIC01LDEwICs1LDEzIEBACiAgKiAob3IgYSBDUFUsIG9yIGEgUElEKSBpbnRvIHRoZSBwZXJmLmRhdGEgb3V0cHV0IGZpbGUgLSBmb3IKICAqIGxhdGVyIGFuYWx5c2lzIHZpYSBwZXJmIHJlcG9ydC4KICAqLworI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAorCiAjaW5jbHVkZSAiYnVpbHRpbi5oIgogCiAjaW5jbHVkZSAicGVyZi5oIgogCisjaW5jbHVkZSAidXRpbC9idWlsZC1pZC5oIgogI2luY2x1ZGUgInV0aWwvdXRpbC5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2Utb3B0aW9ucy5oIgogI2luY2x1ZGUgInV0aWwvcGFyc2UtZXZlbnRzLmgiCkBAIC02Miw2ICs2NSw3IEBACiBzdGF0aWMgaW50CQkJbnJfY3B1CQkJCT0gICAgICAwOwogCiBzdGF0aWMgaW50CQkJZmlsZV9uZXcJCQk9ICAgICAgMTsKK3N0YXRpYyBvZmZfdAkJCXBvc3RfcHJvY2Vzc2luZ19vZmZzZXQ7CiAKIHN0YXRpYyBzdHJ1Y3QgcGVyZl9zZXNzaW9uCSpzZXNzaW9uOwogCkBAIC0xMTEsMjIgKzExNSwxMCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgd3JpdGVfZXZlbnQoZXZlbnRfdCAqYnVmLCBzaXplX3Qgc2l6ZSkKLXsKLQkvKgotCSogQWRkIGl0IHRvIHRoZSBsaXN0IG9mIERTT3MsIHNvIHRoYXQgd2hlbiB3ZSBmaW5pc2ggdGhpcwotCSAqIHJlY29yZCBzZXNzaW9uIHdlIGNhbiBwaWNrIHRoZSBhdmFpbGFibGUgYnVpbGQtaWRzLgotCSAqLwotCWlmIChidWYtPmhlYWRlci50eXBlID09IFBFUkZfUkVDT1JEX01NQVApCi0JCWRzb3NfX2ZpbmRuZXcoYnVmLT5tbWFwLmZpbGVuYW1lKTsKLQotCXdyaXRlX291dHB1dChidWYsIHNpemUpOwotfQotCiBzdGF0aWMgaW50IHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQoZXZlbnRfdCAqZXZlbnQsCiAJCQkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmIF9fdXNlZCkKIHsKLQl3cml0ZV9ldmVudChldmVudCwgZXZlbnQtPmhlYWRlci5zaXplKTsKKwl3cml0ZV9vdXRwdXQoZXZlbnQsIGV2ZW50LT5oZWFkZXIuc2l6ZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3OCwxNCArMTcwLDE0IEBACiAJCXNpemUgPSBtZC0+bWFzayArIDEgLSAob2xkICYgbWQtPm1hc2spOwogCQlvbGQgKz0gc2l6ZTsKIAotCQl3cml0ZV9ldmVudChidWYsIHNpemUpOworCQl3cml0ZV9vdXRwdXQoYnVmLCBzaXplKTsKIAl9CiAKIAlidWYgPSAmZGF0YVtvbGQgJiBtZC0+bWFza107CiAJc2l6ZSA9IGhlYWQgLSBvbGQ7CiAJb2xkICs9IHNpemU7CiAKLQl3cml0ZV9ldmVudChidWYsIHNpemUpOworCXdyaXRlX291dHB1dChidWYsIHNpemUpOwogCiAJbWQtPnByZXYgPSBvbGQ7CiAJbW1hcF93cml0ZV90YWlsKG1kLCBvbGQpOwpAQCAtMzk1LDEwICszODcsMjEgQEAKIAlucl9jcHUrKzsKIH0KIAorc3RhdGljIGludCBwcm9jZXNzX2J1aWxkaWRzKHZvaWQpCit7CisJdTY0IHNpemUgPSBsc2VlayhvdXRwdXQsIDAsIFNFRUtfQ1VSKTsKKworCXNlc3Npb24tPmZkID0gb3V0cHV0OworCXJldHVybiBfX3BlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgcG9zdF9wcm9jZXNzaW5nX29mZnNldCwKKwkJCQkJICAgICAgc2l6ZSAtIHBvc3RfcHJvY2Vzc2luZ19vZmZzZXQsCisJCQkJCSAgICAgIHNpemUsICZidWlsZF9pZF9fbWFya19kc29faGl0X29wcyk7Cit9CisKIHN0YXRpYyB2b2lkIGF0ZXhpdF9oZWFkZXIodm9pZCkKIHsKIAlzZXNzaW9uLT5oZWFkZXIuZGF0YV9zaXplICs9IGJ5dGVzX3dyaXR0ZW47CiAKKwlwcm9jZXNzX2J1aWxkaWRzKCk7CiAJcGVyZl9oZWFkZXJfX3dyaXRlKCZzZXNzaW9uLT5oZWFkZXIsIG91dHB1dCwgdHJ1ZSk7CiB9CiAKQEAgLTU1MSw4ICs1NTQsMjMgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJcG9zdF9wcm9jZXNzaW5nX29mZnNldCA9IGxzZWVrKG91dHB1dCwgMCwgU0VFS19DVVIpOworCisJZXJyID0gZXZlbnRfX3N5bnRoZXNpemVfa2VybmVsX21tYXAocHJvY2Vzc19zeW50aGVzaXplZF9ldmVudCwKKwkJCQkJICAgIHNlc3Npb24sICJfdGV4dCIpOworCWlmIChlcnIgPCAwKSB7CisJCXByX2VycigiQ291bGRuJ3QgcmVjb3JkIGtlcm5lbCByZWZlcmVuY2UgcmVsb2NhdGlvbiBzeW1ib2wuXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBldmVudF9fc3ludGhlc2l6ZV9tb2R1bGVzKHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQsIHNlc3Npb24pOworCWlmIChlcnIgPCAwKSB7CisJCXByX2VycigiQ291bGRuJ3QgcmVjb3JkIGtlcm5lbCByZWZlcmVuY2UgcmVsb2NhdGlvbiBzeW1ib2wuXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoIXN5c3RlbV93aWRlICYmIHByb2ZpbGVfY3B1ID09IC0xKQotCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWQocGlkLCBwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50LAorCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWQodGFyZ2V0X3BpZCwgcHJvY2Vzc19zeW50aGVzaXplZF9ldmVudCwKIAkJCQkJIHNlc3Npb24pOwogCWVsc2UKIAkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50LCBzZXNzaW9uKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwppbmRleCA4NjBmMWVlLi5jZmM2NTVkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCkBAIC0zNCw2ICszNCw4IEBACiBzdGF0aWMgY2hhcgkJY29uc3QgKmlucHV0X25hbWUgPSAicGVyZi5kYXRhIjsKIAogc3RhdGljIGludAkJZm9yY2U7CitzdGF0aWMgYm9vbAkJaGlkZV91bnJlc29sdmVkOworc3RhdGljIGJvb2wJCWRvbnRfdXNlX2NhbGxjaGFpbnM7CiAKIHN0YXRpYyBpbnQJCXNob3dfdGhyZWFkczsKIHN0YXRpYyBzdHJ1Y3QgcGVyZl9yZWFkX3ZhbHVlcwlzaG93X3RocmVhZHNfdmFsdWVzOwpAQCAtOTEsMTEgKzkzLDggQEAKIAogCWV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIHNlc3Npb24tPnNhbXBsZV90eXBlLCAmZGF0YSk7CiAKLQlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKLQkJZXZlbnQtPmhlYWRlci5taXNjLAotCQlkYXRhLnBpZCwgZGF0YS50aWQsCi0JCSh2b2lkICopKGxvbmcpZGF0YS5pcCwKLQkJKGxvbmcgbG9uZylkYXRhLnBlcmlvZCk7CisJZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZC8lZDogJSNMeCBwZXJpb2Q6ICVMZFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAorCQkgICAgZGF0YS5waWQsIGRhdGEudGlkLCBkYXRhLmlwLCBkYXRhLnBlcmlvZCk7CiAKIAlpZiAoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pIHsKIAkJdW5zaWduZWQgaW50IGk7CkBAIC0xMjEsNyArMTIwLDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChhbC5maWx0ZXJlZCkKKwlpZiAoYWwuZmlsdGVyZWQgfHwgKGhpZGVfdW5yZXNvbHZlZCAmJiBhbC5zeW0gPT0gTlVMTCkpCiAJCXJldHVybiAwOwogCiAJaWYgKHBlcmZfc2Vzc2lvbl9fYWRkX2hpc3RfZW50cnkoc2Vzc2lvbiwgJmFsLCBkYXRhLmNhbGxjaGFpbiwgZGF0YS5wZXJpb2QpKSB7CkBAIC0xNTYsMTQgKzE1NSwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhbXBsZV90eXBlX2NoZWNrKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCitzdGF0aWMgaW50IHBlcmZfc2Vzc2lvbl9fc2V0dXBfc2FtcGxlX3R5cGUoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKIHsKLQlpZiAoIShzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikpIHsKKwlpZiAoIShzZWxmLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikpIHsKIAkJaWYgKHNvcnRfX2hhc19wYXJlbnQpIHsKIAkJCWZwcmludGYoc3RkZXJyLCAic2VsZWN0ZWQgLS1zb3J0IHBhcmVudCwgYnV0IG5vIgogCQkJCQkiIGNhbGxjaGFpbiBkYXRhLiBEaWQgeW91IGNhbGwiCiAJCQkJCSIgcGVyZiByZWNvcmQgd2l0aG91dCAtZz9cbiIpOwotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKHN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pIHsKIAkJCWZwcmludGYoc3RkZXJyLCAic2VsZWN0ZWQgLWcgYnV0IG5vIGNhbGxjaGFpbiBkYXRhLiIKQEAgLTE3MSwxMiArMTcwLDEzIEBACiAJCQkJCSIgLWc/XG4iKTsKIAkJCXJldHVybiAtMTsKIAkJfQotCX0gZWxzZSBpZiAoY2FsbGNoYWluX3BhcmFtLm1vZGUgIT0gQ0hBSU5fTk9ORSAmJiAhc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikgeworCX0gZWxzZSBpZiAoIWRvbnRfdXNlX2NhbGxjaGFpbnMgJiYgY2FsbGNoYWluX3BhcmFtLm1vZGUgIT0gQ0hBSU5fTk9ORSAmJgorCQkgICAhc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikgewogCQkJc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbiA9IHRydWU7CiAJCQlpZiAocmVnaXN0ZXJfY2FsbGNoYWluX3BhcmFtKCZjYWxsY2hhaW5fcGFyYW0pIDwgMCkgewogCQkJCWZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgcmVnaXN0ZXIgY2FsbGNoYWluIgogCQkJCQkJIiBwYXJhbXNcbiIpOwotCQkJCXJldHVybiAtMTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAl9CiAKQEAgLTE4NCwyMCArMTg0LDE4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZXZlbnRfb3BzID0gewotCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAotCS5wcm9jZXNzX21tYXBfZXZlbnQJPSBldmVudF9fcHJvY2Vzc19tbWFwLAotCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBldmVudF9fcHJvY2Vzc19jb21tLAotCS5wcm9jZXNzX2V4aXRfZXZlbnQJPSBldmVudF9fcHJvY2Vzc190YXNrLAotCS5wcm9jZXNzX2ZvcmtfZXZlbnQJPSBldmVudF9fcHJvY2Vzc190YXNrLAotCS5wcm9jZXNzX2xvc3RfZXZlbnQJPSBldmVudF9fcHJvY2Vzc19sb3N0LAotCS5wcm9jZXNzX3JlYWRfZXZlbnQJPSBwcm9jZXNzX3JlYWRfZXZlbnQsCi0JLnNhbXBsZV90eXBlX2NoZWNrCT0gc2FtcGxlX3R5cGVfY2hlY2ssCisJLnNhbXBsZQk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAorCS5tbWFwCT0gZXZlbnRfX3Byb2Nlc3NfbW1hcCwKKwkuY29tbQk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCisJLmV4aXQJPSBldmVudF9fcHJvY2Vzc190YXNrLAorCS5mb3JrCT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKKwkubG9zdAk9IGV2ZW50X19wcm9jZXNzX2xvc3QsCisJLnJlYWQJPSBwcm9jZXNzX3JlYWRfZXZlbnQsCiB9OwogCi0KIHN0YXRpYyBpbnQgX19jbWRfcmVwb3J0KHZvaWQpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKIAlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uOwogCiAJc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25hbWUsIE9fUkRPTkxZLCBmb3JjZSk7CkBAIC0yMDcsNiArMjA1LDEwIEBACiAJaWYgKHNob3dfdGhyZWFkcykKIAkJcGVyZl9yZWFkX3ZhbHVlc19pbml0KCZzaG93X3RocmVhZHNfdmFsdWVzKTsKIAorCXJldCA9IHBlcmZfc2Vzc2lvbl9fc2V0dXBfc2FtcGxlX3R5cGUoc2Vzc2lvbik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZGVsZXRlOworCiAJcmV0ID0gcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uLCAmZXZlbnRfb3BzKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9kZWxldGU7CkBAIC0yNDMsMTEgKzI0NSwxOSBAQAogCiBzdGF0aWMgaW50CiBwYXJzZV9jYWxsY2hhaW5fb3B0KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCBfX3VzZWQsIGNvbnN0IGNoYXIgKmFyZywKLQkJICAgIGludCB1bnNldCBfX3VzZWQpCisJCSAgICBpbnQgdW5zZXQpCiB7CiAJY2hhciAqdG9rOwogCWNoYXIgKmVuZHB0cjsKIAorCS8qCisJICogLS1uby1jYWxsLWdyYXBoCisJICovCisJaWYgKHVuc2V0KSB7CisJCWRvbnRfdXNlX2NhbGxjaGFpbnMgPSB0cnVlOworCQlyZXR1cm4gMDsKKwl9CisKIAlzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluID0gdHJ1ZTsKIAogCWlmICghYXJnKQpAQCAtMzE5LDcgKzMyOSw3IEBACiAJCSAgICJwcmV0dHkgcHJpbnRpbmcgc3R5bGUga2V5OiBub3JtYWwgcmF3IiksCiAJT1BUX1NUUklORygncycsICJzb3J0IiwgJnNvcnRfb3JkZXIsICJrZXlbLGtleTIuLi5dIiwKIAkJICAgInNvcnQgYnkga2V5KHMpOiBwaWQsIGNvbW0sIGRzbywgc3ltYm9sLCBwYXJlbnQiKSwKLQlPUFRfQk9PTEVBTignUCcsICJmdWxsLXBhdGhzIiwgJmV2ZW50X29wcy5mdWxsX3BhdGhzLAorCU9QVF9CT09MRUFOKCdQJywgImZ1bGwtcGF0aHMiLCAmc3ltYm9sX2NvbmYuZnVsbF9wYXRocywKIAkJICAgICJEb24ndCBzaG9ydGVuIHRoZSBwYXRobmFtZXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgY3dkIiksCiAJT1BUX1NUUklORygncCcsICJwYXJlbnQiLCAmcGFyZW50X3BhdHRlcm4sICJyZWdleCIsCiAJCSAgICJyZWdleCBmaWx0ZXIgdG8gaWRlbnRpZnkgcGFyZW50LCBzZWU6ICctLXNvcnQgcGFyZW50JyIpLApAQCAtMzQwLDYgKzM1MCw4IEBACiAJT1BUX1NUUklORygndCcsICJmaWVsZC1zZXBhcmF0b3IiLCAmc3ltYm9sX2NvbmYuZmllbGRfc2VwLCAic2VwYXJhdG9yIiwKIAkJICAgInNlcGFyYXRvciBmb3IgY29sdW1ucywgbm8gc3BhY2VzIHdpbGwgYmUgYWRkZWQgYmV0d2VlbiAiCiAJCSAgICJjb2x1bW5zICcuJyBpcyByZXNlcnZlZC4iKSwKKwlPUFRfQk9PTEVBTignVScsICJoaWRlLXVucmVzb2x2ZWQiLCAmaGlkZV91bnJlc29sdmVkLAorCQkgICAgIk9ubHkgZGlzcGxheSBlbnRyaWVzIHJlc29sdmVkIHRvIGEgc3ltYm9sIiksCiAJT1BUX0VORCgpCiB9OwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCmluZGV4IDgwMjA5ZGYuLjRmNWEwM2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCkBAIC0xNjIxLDExICsxNjIxLDggQEAKIAogCWV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIHNlc3Npb24tPnNhbXBsZV90eXBlLCAmZGF0YSk7CiAKLQlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlcCBwZXJpb2Q6ICVMZFxuIiwKLQkJZXZlbnQtPmhlYWRlci5taXNjLAotCQlkYXRhLnBpZCwgZGF0YS50aWQsCi0JCSh2b2lkICopKGxvbmcpZGF0YS5pcCwKLQkJKGxvbmcgbG9uZylkYXRhLnBlcmlvZCk7CisJZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZC8lZDogJSNMeCBwZXJpb2Q6ICVMZFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAorCQkgICAgZGF0YS5waWQsIGRhdGEudGlkLCBkYXRhLmlwLCBkYXRhLnBlcmlvZCk7CiAKIAl0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgZGF0YS5waWQpOwogCWlmICh0aHJlYWQgPT0gTlVMTCkgewpAQCAtMTY1MywzMyArMTY1MCwyMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhbXBsZV90eXBlX2NoZWNrKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gX191c2VkKQotewotCWlmICghKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkgewotCQlmcHJpbnRmKHN0ZGVyciwKLQkJCSJObyB0cmFjZSBzYW1wbGUgdG8gcmVhZC4gRGlkIHlvdSBjYWxsIHBlcmYgcmVjb3JkICIKLQkJCSJ3aXRob3V0IC1SPyIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZXZlbnRfb3BzID0gewotCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAotCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBldmVudF9fcHJvY2Vzc19jb21tLAotCS5wcm9jZXNzX2xvc3RfZXZlbnQJPSBwcm9jZXNzX2xvc3RfZXZlbnQsCi0JLnNhbXBsZV90eXBlX2NoZWNrCT0gc2FtcGxlX3R5cGVfY2hlY2ssCisJLnNhbXBsZQk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAorCS5jb21tCT0gZXZlbnRfX3Byb2Nlc3NfY29tbSwKKwkubG9zdAk9IHByb2Nlc3NfbG9zdF9ldmVudCwKIH07CiAKIHN0YXRpYyBpbnQgcmVhZF9ldmVudHModm9pZCkKIHsKLQlpbnQgZXJyOworCWludCBlcnIgPSAtRUlOVkFMOwogCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gPSBwZXJmX3Nlc3Npb25fX25ldyhpbnB1dF9uYW1lLCBPX1JET05MWSwgMCk7CiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQllcnIgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOworCWlmIChwZXJmX3Nlc3Npb25fX2hhc190cmFjZXMoc2Vzc2lvbiwgInJlY29yZCAtUiIpKQorCQllcnIgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOworCiAJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbik7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCmluZGV4IGM3MGQ3MjAuLmU4Yzg1ZDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgInV0aWwvcGFyc2UtZXZlbnRzLmgiCiAjaW5jbHVkZSAidXRpbC9ldmVudC5oIgogI2luY2x1ZGUgInV0aWwvZGVidWcuaCIKKyNpbmNsdWRlICJ1dGlsL2hlYWRlci5oIgogCiAjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtNzksNiArODAsOCBAQAogCiBzdGF0aWMgaW50CQkJZXZlbnRfc2NhbGVkW01BWF9DT1VOVEVSU107CiAKK3N0YXRpYyB2b2xhdGlsZSBpbnQgZG9uZSA9IDA7CisKIHN0cnVjdCBzdGF0cwogewogCWRvdWJsZSBuLCBtZWFuLCBNMjsKQEAgLTI0Nyw2MSArMjUwLDY0IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIHQwLCB0MTsKIAlpbnQgc3RhdHVzID0gMDsKIAlpbnQgY291bnRlcjsKLQlpbnQgcGlkOworCWludCBwaWQgPSB0YXJnZXRfcGlkOwogCWludCBjaGlsZF9yZWFkeV9waXBlWzJdLCBnb19waXBlWzJdOworCWNvbnN0IGJvb2wgZm9ya3MgPSAodGFyZ2V0X3BpZCA9PSAtMSAmJiBhcmdjID4gMCk7CiAJY2hhciBidWY7CiAKIAlpZiAoIXN5c3RlbV93aWRlKQogCQlucl9jcHVzID0gMTsKIAotCWlmIChwaXBlKGNoaWxkX3JlYWR5X3BpcGUpIDwgMCB8fCBwaXBlKGdvX3BpcGUpIDwgMCkgeworCWlmIChmb3JrcyAmJiAocGlwZShjaGlsZF9yZWFkeV9waXBlKSA8IDAgfHwgcGlwZShnb19waXBlKSA8IDApKSB7CiAJCXBlcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBwaXBlcyIpOwogCQlleGl0KDEpOwogCX0KIAotCWlmICgocGlkID0gZm9yaygpKSA8IDApCi0JCXBlcnJvcigiZmFpbGVkIHRvIGZvcmsiKTsKKwlpZiAoZm9ya3MpIHsKKwkJaWYgKChwaWQgPSBmb3JrKCkpIDwgMCkKKwkJCXBlcnJvcigiZmFpbGVkIHRvIGZvcmsiKTsKIAotCWlmICghcGlkKSB7Ci0JCWNsb3NlKGNoaWxkX3JlYWR5X3BpcGVbMF0pOwotCQljbG9zZShnb19waXBlWzFdKTsKLQkJZmNudGwoZ29fcGlwZVswXSwgRl9TRVRGRCwgRkRfQ0xPRVhFQyk7CisJCWlmICghcGlkKSB7CisJCQljbG9zZShjaGlsZF9yZWFkeV9waXBlWzBdKTsKKwkJCWNsb3NlKGdvX3BpcGVbMV0pOworCQkJZmNudGwoZ29fcGlwZVswXSwgRl9TRVRGRCwgRkRfQ0xPRVhFQyk7CisKKwkJCS8qCisJCQkgKiBEbyBhIGR1bW15IGV4ZWN2cCB0byBnZXQgdGhlIFBMVCBlbnRyeSByZXNvbHZlZCwKKwkJCSAqIHNvIHdlIGF2b2lkIHRoZSByZXNvbHZlciBvdmVyaGVhZCBvbiB0aGUgcmVhbAorCQkJICogZXhlY3ZwIGNhbGwuCisJCQkgKi8KKwkJCWV4ZWN2cCgiIiwgKGNoYXIgKiopYXJndik7CisKKwkJCS8qCisJCQkgKiBUZWxsIHRoZSBwYXJlbnQgd2UncmUgcmVhZHkgdG8gZ28KKwkJCSAqLworCQkJY2xvc2UoY2hpbGRfcmVhZHlfcGlwZVsxXSk7CisKKwkJCS8qCisJCQkgKiBXYWl0IHVudGlsIHRoZSBwYXJlbnQgdGVsbHMgdXMgdG8gZ28uCisJCQkgKi8KKwkJCWlmIChyZWFkKGdvX3BpcGVbMF0sICZidWYsIDEpID09IC0xKQorCQkJCXBlcnJvcigidW5hYmxlIHRvIHJlYWQgcGlwZSIpOworCisJCQlleGVjdnAoYXJndlswXSwgKGNoYXIgKiopYXJndik7CisKKwkJCXBlcnJvcihhcmd2WzBdKTsKKwkJCWV4aXQoLTEpOworCQl9CisKKwkJY2hpbGRfcGlkID0gcGlkOwogCiAJCS8qCi0JCSAqIERvIGEgZHVtbXkgZXhlY3ZwIHRvIGdldCB0aGUgUExUIGVudHJ5IHJlc29sdmVkLAotCQkgKiBzbyB3ZSBhdm9pZCB0aGUgcmVzb2x2ZXIgb3ZlcmhlYWQgb24gdGhlIHJlYWwKLQkJICogZXhlY3ZwIGNhbGwuCi0JCSAqLwotCQlleGVjdnAoIiIsIChjaGFyICoqKWFyZ3YpOwotCi0JCS8qCi0JCSAqIFRlbGwgdGhlIHBhcmVudCB3ZSdyZSByZWFkeSB0byBnbworCQkgKiBXYWl0IGZvciB0aGUgY2hpbGQgdG8gYmUgcmVhZHkgdG8gZXhlYy4KIAkJICovCiAJCWNsb3NlKGNoaWxkX3JlYWR5X3BpcGVbMV0pOwotCi0JCS8qCi0JCSAqIFdhaXQgdW50aWwgdGhlIHBhcmVudCB0ZWxscyB1cyB0byBnby4KLQkJICovCi0JCWlmIChyZWFkKGdvX3BpcGVbMF0sICZidWYsIDEpID09IC0xKQorCQljbG9zZShnb19waXBlWzBdKTsKKwkJaWYgKHJlYWQoY2hpbGRfcmVhZHlfcGlwZVswXSwgJmJ1ZiwgMSkgPT0gLTEpCiAJCQlwZXJyb3IoInVuYWJsZSB0byByZWFkIHBpcGUiKTsKLQotCQlleGVjdnAoYXJndlswXSwgKGNoYXIgKiopYXJndik7Ci0KLQkJcGVycm9yKGFyZ3ZbMF0pOwotCQlleGl0KC0xKTsKKwkJY2xvc2UoY2hpbGRfcmVhZHlfcGlwZVswXSk7CiAJfQogCi0JY2hpbGRfcGlkID0gcGlkOwotCi0JLyoKLQkgKiBXYWl0IGZvciB0aGUgY2hpbGQgdG8gYmUgcmVhZHkgdG8gZXhlYy4KLQkgKi8KLQljbG9zZShjaGlsZF9yZWFkeV9waXBlWzFdKTsKLQljbG9zZShnb19waXBlWzBdKTsKLQlpZiAocmVhZChjaGlsZF9yZWFkeV9waXBlWzBdLCAmYnVmLCAxKSA9PSAtMSkKLQkJcGVycm9yKCJ1bmFibGUgdG8gcmVhZCBwaXBlIik7Ci0JY2xvc2UoY2hpbGRfcmVhZHlfcGlwZVswXSk7Ci0KIAlmb3IgKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgbnJfY291bnRlcnM7IGNvdW50ZXIrKykKIAkJY3JlYXRlX3BlcmZfc3RhdF9jb3VudGVyKGNvdW50ZXIsIHBpZCk7CiAKQEAgLTMxMCw4ICszMTYsMTIgQEAKIAkgKi8KIAl0MCA9IHJkY2xvY2soKTsKIAotCWNsb3NlKGdvX3BpcGVbMV0pOwotCXdhaXQoJnN0YXR1cyk7CisJaWYgKGZvcmtzKSB7CisJCWNsb3NlKGdvX3BpcGVbMV0pOworCQl3YWl0KCZzdGF0dXMpOworCX0gZWxzZSB7CisJCXdoaWxlKCFkb25lKTsKKwl9CiAKIAl0MSA9IHJkY2xvY2soKTsKIApAQCAtNDE3LDEwICs0MjcsMTMgQEAKIAlmZmx1c2goc3Rkb3V0KTsKIAogCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKLQlmcHJpbnRmKHN0ZGVyciwgIiBQZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRzIGZvciBcJyVzIiwgYXJndlswXSk7Ci0KLQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQotCQlmcHJpbnRmKHN0ZGVyciwgIiAlcyIsIGFyZ3ZbaV0pOworCWZwcmludGYoc3RkZXJyLCAiIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3RhdHMgZm9yICIpOworCWlmKHRhcmdldF9waWQgPT0gLTEpIHsKKwkJZnByaW50ZihzdGRlcnIsICJcJyVzIiwgYXJndlswXSk7CisJCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisJCQlmcHJpbnRmKHN0ZGVyciwgIiAlcyIsIGFyZ3ZbaV0pOworCX1lbHNlCisJCWZwcmludGYoc3RkZXJyLCAidGFzayBwaWQgXCclZCIsIHRhcmdldF9waWQpOwogCiAJZnByaW50ZihzdGRlcnIsICJcJyIpOwogCWlmIChydW5fY291bnQgPiAxKQpAQCAtNDQ1LDYgKzQ1OCw5IEBACiAKIHN0YXRpYyB2b2lkIHNraXBfc2lnbmFsKGludCBzaWdubykKIHsKKwlpZih0YXJnZXRfcGlkICE9IC0xKQorCQlkb25lID0gMTsKKwogCXNpZ25yID0gc2lnbm87CiB9CiAKQEAgLTQ2MSw3ICs0NzcsNyBAQAogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHN0YXRfdXNhZ2VbXSA9IHsKLQkicGVyZiBzdGF0IFs8b3B0aW9ucz5dIDxjb21tYW5kPiIsCisJInBlcmYgc3RhdCBbPG9wdGlvbnM+XSBbPGNvbW1hbmQ+XSIsCiAJTlVMTAogfTsKIApAQCAtNDkyLDcgKzUwOCw3IEBACiAKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBzdGF0X3VzYWdlLAogCQlQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKLQlpZiAoIWFyZ2MpCisJaWYgKCFhcmdjICYmIHRhcmdldF9waWQgPT0gLTEpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhzdGF0X3VzYWdlLCBvcHRpb25zKTsKIAlpZiAocnVuX2NvdW50IDw9IDApCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhzdGF0X3VzYWdlLCBvcHRpb25zKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYwppbmRleCAzZjhiYmNmLi4wZDRkOGZmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCkBAIC0xMDI5LDMzICsxMDI5LDI0IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHNhbXBsZV90eXBlX2NoZWNrKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCi17Ci0JaWYgKCEoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9SQVcpKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiTm8gdHJhY2Ugc2FtcGxlcyBmb3VuZCBpbiB0aGUgZmlsZS5cbiIKLQkJCQkiSGF2ZSB5b3UgdXNlZCAncGVyZiB0aW1lY2hhcnQgcmVjb3JkJyB0byByZWNvcmQgaXQ/XG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfb3BzIGV2ZW50X29wcyA9IHsKLQkucHJvY2Vzc19jb21tX2V2ZW50CT0gcHJvY2Vzc19jb21tX2V2ZW50LAotCS5wcm9jZXNzX2ZvcmtfZXZlbnQJPSBwcm9jZXNzX2ZvcmtfZXZlbnQsCi0JLnByb2Nlc3NfZXhpdF9ldmVudAk9IHByb2Nlc3NfZXhpdF9ldmVudCwKLQkucHJvY2Vzc19zYW1wbGVfZXZlbnQJPSBxdWV1ZV9zYW1wbGVfZXZlbnQsCi0JLnNhbXBsZV90eXBlX2NoZWNrCT0gc2FtcGxlX3R5cGVfY2hlY2ssCisJLmNvbW0JPSBwcm9jZXNzX2NvbW1fZXZlbnQsCisJLmZvcmsJPSBwcm9jZXNzX2ZvcmtfZXZlbnQsCisJLmV4aXQJPSBwcm9jZXNzX2V4aXRfZXZlbnQsCisJLnNhbXBsZQk9IHF1ZXVlX3NhbXBsZV9ldmVudCwKIH07CiAKIHN0YXRpYyBpbnQgX19jbWRfdGltZWNoYXJ0KHZvaWQpCiB7CiAJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiA9IHBlcmZfc2Vzc2lvbl9fbmV3KGlucHV0X25hbWUsIE9fUkRPTkxZLCAwKTsKLQlpbnQgcmV0OworCWludCByZXQgPSAtRUlOVkFMOwogCiAJaWYgKHNlc3Npb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpZiAoIXBlcmZfc2Vzc2lvbl9faGFzX3RyYWNlcyhzZXNzaW9uLCAidGltZWNoYXJ0IHJlY29yZCIpKQorCQlnb3RvIG91dF9kZWxldGU7CisKIAlyZXQgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2RlbGV0ZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwppbmRleCA0YjkxZDhjLi4zMWYyZTU5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCkBAIC05NCw2ICs5NCw3IEBACiAKIHN0YXRpYyBjaGFyCQkJKnN5bV9maWx0ZXIJCQk9ICAgTlVMTDsKIHN0cnVjdCBzeW1fZW50cnkJCSpzeW1fZmlsdGVyX2VudHJ5CQk9ICAgTlVMTDsKK3N0cnVjdCBzeW1fZW50cnkJCSpzeW1fZmlsdGVyX2VudHJ5X3NjaGVkCQk9ICAgTlVMTDsKIHN0YXRpYyBpbnQJCQlzeW1fcGNudF9maWx0ZXIJCQk9ICAgICAgNTsKIHN0YXRpYyBpbnQJCQlzeW1fY291bnRlcgkJCT0gICAgICAwOwogc3RhdGljIGludAkJCWRpc3BsYXlfd2VpZ2h0ZWQJCT0gICAgIC0xOwpAQCAtMjAxLDEwICsyMDIsOSBAQAogCWxlbiA9IHN5bS0+ZW5kIC0gc3ltLT5zdGFydDsKIAogCXNwcmludGYoY29tbWFuZCwKLQkJIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPTB4JTAxNkx4ICIKLQkJCSAiLS1zdG9wLWFkZHJlc3M9MHglMDE2THggLWRTICVzIiwKLQkJbWFwLT51bm1hcF9pcChtYXAsIHN5bS0+c3RhcnQpLAotCQltYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5lbmQpLCBwYXRoKTsKKwkJIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPSUjMCpMeCAtLXN0b3AtYWRkcmVzcz0lIzAqTHggLWRTICVzIiwKKwkJQklUU19QRVJfTE9ORyAvIDQsIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5zdGFydCksCisJCUJJVFNfUEVSX0xPTkcgLyA0LCBtYXBfX3JpcF8yb2JqZHVtcChtYXAsIHN5bS0+ZW5kKSwgcGF0aCk7CiAKIAlmaWxlID0gcG9wZW4oY29tbWFuZCwgInIiKTsKIAlpZiAoIWZpbGUpCkBAIC0yMTUsNyArMjE1LDcgQEAKIAl3aGlsZSAoIWZlb2YoZmlsZSkpIHsKIAkJc3RydWN0IHNvdXJjZV9saW5lICpzcmM7CiAJCXNpemVfdCBkdW1teSA9IDA7Ci0JCWNoYXIgKmM7CisJCWNoYXIgKmMsICpzZXA7CiAKIAkJc3JjID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc291cmNlX2xpbmUpKTsKIAkJYXNzZXJ0KHNyYyAhPSBOVUxMKTsKQEAgLTIzNCwxNCArMjM0LDExIEBACiAJCSpzb3VyY2UtPmxpbmVzX3RhaWwgPSBzcmM7CiAJCXNvdXJjZS0+bGluZXNfdGFpbCA9ICZzcmMtPm5leHQ7CiAKLQkJaWYgKHN0cmxlbihzcmMtPmxpbmUpPjggJiYgc3JjLT5saW5lWzhdID09ICc6JykgewotCQkJc3JjLT5laXAgPSBzdHJ0b3VsbChzcmMtPmxpbmUsIE5VTEwsIDE2KTsKLQkJCXNyYy0+ZWlwID0gbWFwLT51bm1hcF9pcChtYXAsIHNyYy0+ZWlwKTsKLQkJfQotCQlpZiAoc3RybGVuKHNyYy0+bGluZSk+OCAmJiBzcmMtPmxpbmVbMTZdID09ICc6JykgewotCQkJc3JjLT5laXAgPSBzdHJ0b3VsbChzcmMtPmxpbmUsIE5VTEwsIDE2KTsKLQkJCXNyYy0+ZWlwID0gbWFwLT51bm1hcF9pcChtYXAsIHNyYy0+ZWlwKTsKLQkJfQorCQlzcmMtPmVpcCA9IHN0cnRvdWxsKHNyYy0+bGluZSwgJnNlcCwgMTYpOworCQlpZiAoKnNlcCA9PSAnOicpCisJCQlzcmMtPmVpcCA9IG1hcF9fb2JqZHVtcF8yaXAobWFwLCBzcmMtPmVpcCk7CisJCWVsc2UgLyogdGhpcyBsaW5lIGhhcyBubyBpcCBpbmZvIChlLmcuIHNvdXJjZSBsaW5lKSAqLworCQkJc3JjLT5laXAgPSAwOwogCX0KIAlwY2xvc2UoZmlsZSk7CiBvdXRfYXNzaWduOgpAQCAtMjc2LDYgKzI3Myw5IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWZvciAobGluZSA9IHN5bWUtPnNyYy0+bGluZXM7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0KSB7CisJCS8qIHNraXAgbGluZXMgd2l0aG91dCBJUCBpbmZvICovCisJCWlmIChsaW5lLT5laXAgPT0gMCkKKwkJCWNvbnRpbnVlOwogCQlpZiAobGluZS0+ZWlwID09IGlwKSB7CiAJCQlsaW5lLT5jb3VudFtjb3VudGVyXSsrOwogCQkJYnJlYWs7CkBAIC0yODcsMTcgKzI4NywyMCBAQAogCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzeW1lLT5zcmMtPmxvY2spOwogfQogCisjZGVmaW5lIFBBVFRFUk5fTEVOCQkoQklUU19QRVJfTE9ORyAvIDQgKyAyKQorCiBzdGF0aWMgdm9pZCBsb29rdXBfc3ltX3NvdXJjZShzdHJ1Y3Qgc3ltX2VudHJ5ICpzeW1lKQogewogCXN0cnVjdCBzeW1ib2wgKnN5bWJvbCA9IHN5bV9lbnRyeV9fc3ltYm9sKHN5bWUpOwogCXN0cnVjdCBzb3VyY2VfbGluZSAqbGluZTsKLQljaGFyIHBhdHRlcm5bUEFUSF9NQVhdOworCWNoYXIgcGF0dGVybltQQVRURVJOX0xFTiArIDFdOwogCi0Jc3ByaW50ZihwYXR0ZXJuLCAiPCVzPjoiLCBzeW1ib2wtPm5hbWUpOworCXNwcmludGYocGF0dGVybiwgIiUwKkx4IDwiLCBCSVRTX1BFUl9MT05HIC8gNCwKKwkJbWFwX19yaXBfMm9iamR1bXAoc3ltZS0+bWFwLCBzeW1ib2wtPnN0YXJ0KSk7CiAKIAlwdGhyZWFkX211dGV4X2xvY2soJnN5bWUtPnNyYy0+bG9jayk7CiAJZm9yIChsaW5lID0gc3ltZS0+c3JjLT5saW5lczsgbGluZTsgbGluZSA9IGxpbmUtPm5leHQpIHsKLQkJaWYgKHN0cnN0cihsaW5lLT5saW5lLCBwYXR0ZXJuKSkgeworCQlpZiAobWVtY21wKGxpbmUtPmxpbmUsIHBhdHRlcm4sIFBBVFRFUk5fTEVOKSA9PSAwKSB7CiAJCQlzeW1lLT5zcmMtPnNvdXJjZSA9IGxpbmU7CiAJCQlicmVhazsKIAkJfQpAQCAtNjY3LDcgKzY3MCw3IEBACiAJfQogCiAJaWYgKCFmb3VuZCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIlNvcnJ5LCAlcyBpcyBub3QgYWN0aXZlLlxuIiwgc3ltX2ZpbHRlcik7CisJCWZwcmludGYoc3RkZXJyLCAiU29ycnksICVzIGlzIG5vdCBhY3RpdmUuXG4iLCBidWYpOwogCQlzbGVlcCgxKTsKIAkJcmV0dXJuOwogCX0gZWxzZQpAQCAtNjk1LDExICs2OTgsOSBAQAogCiAJZnByaW50ZihzdGRvdXQsICJcdFtmXSAgICAgcHJvZmlsZSBkaXNwbGF5IGZpbHRlciAoY291bnQpLiAgICBcdCglZClcbiIsIGNvdW50X2ZpbHRlcik7CiAKLQlpZiAoc3ltYm9sX2NvbmYudm1saW51eF9uYW1lKSB7Ci0JCWZwcmludGYoc3Rkb3V0LCAiXHRbRl0gICAgIGFubm90YXRlIGRpc3BsYXkgZmlsdGVyIChwZXJjZW50KS4gXHQoJWQlJSlcbiIsIHN5bV9wY250X2ZpbHRlcik7Ci0JCWZwcmludGYoc3Rkb3V0LCAiXHRbc10gICAgIGFubm90YXRlIHN5bWJvbC4gICAgICAgICAgICAgICAgICAgXHQoJXMpXG4iLCBuYW1lPzogIk5VTEwiKTsKLQkJZnByaW50ZihzdGRvdXQsICJcdFtTXSAgICAgc3RvcCBhbm5vdGF0aW9uLlxuIik7Ci0JfQorCWZwcmludGYoc3Rkb3V0LCAiXHRbRl0gICAgIGFubm90YXRlIGRpc3BsYXkgZmlsdGVyIChwZXJjZW50KS4gXHQoJWQlJSlcbiIsIHN5bV9wY250X2ZpbHRlcik7CisJZnByaW50ZihzdGRvdXQsICJcdFtzXSAgICAgYW5ub3RhdGUgc3ltYm9sLiAgICAgICAgICAgICAgICAgICBcdCglcylcbiIsIG5hbWU/OiAiTlVMTCIpOworCWZwcmludGYoc3Rkb3V0LCAiXHRbU10gICAgIHN0b3AgYW5ub3RhdGlvbi5cbiIpOwogCiAJaWYgKG5yX2NvdW50ZXJzID4gMSkKIAkJZnByaW50ZihzdGRvdXQsICJcdFt3XSAgICAgdG9nZ2xlIGRpc3BsYXkgd2VpZ2h0ZWQvY291bnRbRV1yLiBcdCglZClcbiIsIGRpc3BsYXlfd2VpZ2h0ZWQgPyAxIDogMCk7CkBAIC03MjUsMTQgKzcyNiwxMyBAQAogCQljYXNlICdRJzoKIAkJY2FzZSAnSyc6CiAJCWNhc2UgJ1UnOgorCQljYXNlICdGJzoKKwkJY2FzZSAncyc6CisJCWNhc2UgJ1MnOgogCQkJcmV0dXJuIDE7CiAJCWNhc2UgJ0UnOgogCQljYXNlICd3JzoKIAkJCXJldHVybiBucl9jb3VudGVycyA+IDEgPyAxIDogMDsKLQkJY2FzZSAnRic6Ci0JCWNhc2UgJ3MnOgotCQljYXNlICdTJzoKLQkJCXJldHVybiBzeW1ib2xfY29uZi52bWxpbnV4X25hbWUgPyAxIDogMDsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCX0KQEAgLTkxMCw4ICs5MTAsMTIgQEAKIAlzeW1lID0gc3ltYm9sX19wcml2KHN5bSk7CiAJc3ltZS0+bWFwID0gbWFwOwogCXN5bWUtPnNyYyA9IE5VTEw7Ci0JaWYgKCFzeW1fZmlsdGVyX2VudHJ5ICYmIHN5bV9maWx0ZXIgJiYgIXN0cmNtcChuYW1lLCBzeW1fZmlsdGVyKSkKLQkJc3ltX2ZpbHRlcl9lbnRyeSA9IHN5bWU7CisKKwlpZiAoIXN5bV9maWx0ZXJfZW50cnkgJiYgc3ltX2ZpbHRlciAmJiAhc3RyY21wKG5hbWUsIHN5bV9maWx0ZXIpKSB7CisJCS8qIHNjaGVkdWxlIGluaXRpYWwgc3ltX2ZpbHRlcl9lbnRyeSBzZXR1cCAqLworCQlzeW1fZmlsdGVyX2VudHJ5X3NjaGVkID0gc3ltZTsKKwkJc3ltX2ZpbHRlciA9IE5VTEw7CisJfQogCiAJZm9yIChpID0gMDsgc2tpcF9zeW1ib2xzW2ldOyBpKyspIHsKIAkJaWYgKCFzdHJjbXAoc2tpcF9zeW1ib2xzW2ldLCBuYW1lKSkgewpAQCAtOTM0LDggKzkzOCwxMSBAQAogCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOwogCXU4IG9yaWdpbiA9IHNlbGYtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7CiAKKwkrK3NhbXBsZXM7CisKIAlzd2l0Y2ggKG9yaWdpbikgewogCWNhc2UgUEVSRl9SRUNPUkRfTUlTQ19VU0VSOgorCQkrK3VzZXJzcGFjZV9zYW1wbGVzOwogCQlpZiAoaGlkZV91c2VyX3N5bWJvbHMpCiAJCQlyZXR1cm47CiAJCWJyZWFrOwpAQCAtOTQ4LDkgKzk1NSwzOCBAQAogCX0KIAogCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoc2VsZiwgc2Vzc2lvbiwgJmFsLCBzeW1ib2xfZmlsdGVyKSA8IDAgfHwKLQkgICAgYWwuc3ltID09IE5VTEwgfHwgYWwuZmlsdGVyZWQpCisJICAgIGFsLmZpbHRlcmVkKQogCQlyZXR1cm47CiAKKwlpZiAoYWwuc3ltID09IE5VTEwpIHsKKwkJLyoKKwkJICogQXMgd2UgZG8gbGF6eSBsb2FkaW5nIG9mIHN5bXRhYnMgd2Ugb25seSB3aWxsIGtub3cgaWYgdGhlCisJCSAqIHNwZWNpZmllZCB2bWxpbnV4IGZpbGUgaXMgaW52YWxpZCB3aGVuIHdlIGFjdHVhbGx5IGhhdmUgYQorCQkgKiBoaXQgaW4ga2VybmVsIHNwYWNlIGFuZCB0aGVuIHRyeSB0byBsb2FkIGl0LiBTbyBpZiB3ZSBnZXQKKwkJICogaGVyZSBhbmQgdGhlcmUgYXJlIF9ub18gc3ltYm9scyBpbiB0aGUgRFNPIGJhY2tpbmcgdGhlCisJCSAqIGtlcm5lbCBtYXAsIGJhaWwgb3V0LgorCQkgKgorCQkgKiBXZSBtYXkgbmV2ZXIgZ2V0IGhlcmUsIGZvciBpbnN0YW5jZSwgaWYgd2UgdXNlIC1LLworCQkgKiAtLWhpZGUta2VybmVsLXN5bWJvbHMsIGV2ZW4gaWYgdGhlIHVzZXIgc3BlY2lmaWVzIGFuCisJCSAqIGludmFsaWQgLS12bWxpbnV4IDstKQorCQkgKi8KKwkJaWYgKGFsLm1hcCA9PSBzZXNzaW9uLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0gJiYKKwkJICAgIFJCX0VNUFRZX1JPT1QoJmFsLm1hcC0+ZHNvLT5zeW1ib2xzW01BUF9fRlVOQ1RJT05dKSkgeworCQkJcHJfZXJyKCJUaGUgJXMgZmlsZSBjYW4ndCBiZSB1c2VkXG4iLAorCQkJICAgICAgIHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSk7CisJCQlleGl0KDEpOworCQl9CisKKwkJcmV0dXJuOworCX0KKworCS8qIGxldCdzIHNlZSwgd2hldGhlciB3ZSBuZWVkIHRvIGluc3RhbGwgaW5pdGlhbCBzeW1fZmlsdGVyX2VudHJ5ICovCisJaWYgKHN5bV9maWx0ZXJfZW50cnlfc2NoZWQpIHsKKwkJc3ltX2ZpbHRlcl9lbnRyeSA9IHN5bV9maWx0ZXJfZW50cnlfc2NoZWQ7CisJCXN5bV9maWx0ZXJfZW50cnlfc2NoZWQgPSBOVUxMOworCQlwYXJzZV9zb3VyY2Uoc3ltX2ZpbHRlcl9lbnRyeSk7CisJfQorCiAJc3ltZSA9IHN5bWJvbF9fcHJpdihhbC5zeW0pOwogCWlmICghc3ltZS0+c2tpcCkgewogCQlzeW1lLT5jb3VudFtjb3VudGVyXSsrOwpAQCAtOTYwLDkgKzk5Niw2IEBACiAJCWlmIChsaXN0X2VtcHR5KCZzeW1lLT5ub2RlKSB8fCAhc3ltZS0+bm9kZS5uZXh0KQogCQkJX19saXN0X2luc2VydF9hY3RpdmVfc3ltKHN5bWUpOwogCQlwdGhyZWFkX211dGV4X3VubG9jaygmYWN0aXZlX3N5bWJvbHNfbG9jayk7Ci0JCWlmIChvcmlnaW4gPT0gUEVSRl9SRUNPUkRfTUlTQ19VU0VSKQotCQkJKyt1c2Vyc3BhY2Vfc2FtcGxlczsKLQkJKytzYW1wbGVzOwogCX0KIH0KIApAQCAtOTc1LDYgKzEwMDgsMTAgQEAKIAljYXNlIFBFUkZfUkVDT1JEX01NQVA6CiAJCWV2ZW50X19wcm9jZXNzX21tYXAoZXZlbnQsIHNlc3Npb24pOwogCQlicmVhazsKKwljYXNlIFBFUkZfUkVDT1JEX0ZPUks6CisJY2FzZSBQRVJGX1JFQ09SRF9FWElUOgorCQlldmVudF9fcHJvY2Vzc190YXNrKGV2ZW50LCBzZXNzaW9uKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMTI0NCw3ICsxMjgxLDcgQEAKIAlPUFRfQk9PTEVBTignaScsICJpbmhlcml0IiwgJmluaGVyaXQsCiAJCSAgICAiY2hpbGQgdGFza3MgaW5oZXJpdCBjb3VudGVycyIpLAogCU9QVF9TVFJJTkcoJ3MnLCAic3ltLWFubm90YXRlIiwgJnN5bV9maWx0ZXIsICJzeW1ib2wgbmFtZSIsCi0JCSAgICAic3ltYm9sIHRvIGFubm90YXRlIC0gcmVxdWlyZXMgLWsgb3B0aW9uIiksCisJCSAgICAic3ltYm9sIHRvIGFubm90YXRlIiksCiAJT1BUX0JPT0xFQU4oJ3onLCAiemVybyIsICZ6ZXJvLAogCQkgICAgInplcm8gaGlzdG9yeSBhY3Jvc3MgdXBkYXRlcyIpLAogCU9QVF9JTlRFR0VSKCdGJywgImZyZXEiLCAmZnJlcSwKQEAgLTEyODAsMTYgKzEzMTcsMTQgQEAKIAogCXN5bWJvbF9jb25mLnByaXZfc2l6ZSA9IChzaXplb2Yoc3RydWN0IHN5bV9lbnRyeSkgKwogCQkJCSAobnJfY291bnRlcnMgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7Ci0JaWYgKHN5bWJvbF9jb25mLnZtbGludXhfbmFtZSA9PSBOVUxMKQotCQlzeW1ib2xfY29uZi50cnlfdm1saW51eF9wYXRoID0gdHJ1ZTsKKworCXN5bWJvbF9jb25mLnRyeV92bWxpbnV4X3BhdGggPSAoc3ltYm9sX2NvbmYudm1saW51eF9uYW1lID09IE5VTEwpOwogCWlmIChzeW1ib2xfX2luaXQoKSA8IDApCiAJCXJldHVybiAtMTsKIAogCWlmIChkZWxheV9zZWNzIDwgMSkKIAkJZGVsYXlfc2VjcyA9IDE7CiAKLQlwYXJzZV9zb3VyY2Uoc3ltX2ZpbHRlcl9lbnRyeSk7Ci0KIAkvKgogCSAqIFVzZXIgc3BlY2lmaWVkIGNvdW50IG92ZXJyaWRlcyBkZWZhdWx0IGZyZXF1ZW5jeS4KIAkgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKaW5kZXggNTc0YTIxNS4uNWRiNjg3ZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKIAlwZXJmX3NldF9hcmd2X2V4ZWNfcGF0aChwZXJmX2V4ZWNfcGF0aCgpKTsKIAogCXNldHVwX3Blcmxfc2NyaXB0aW5nKCk7CisJc2V0dXBfcHl0aG9uX3NjcmlwdGluZygpOwogCiAJc2NyaXB0aW5nX29wcyA9ICZkZWZhdWx0X3NjcmlwdGluZ19vcHM7CiB9CkBAIC03NSwxMSArNzYsOCBAQAogCiAJZXZlbnRfX3BhcnNlX3NhbXBsZShldmVudCwgc2Vzc2lvbi0+c2FtcGxlX3R5cGUsICZkYXRhKTsKIAotCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICVwIHBlcmlvZDogJUxkXG4iLAotCQlldmVudC0+aGVhZGVyLm1pc2MsCi0JCWRhdGEucGlkLCBkYXRhLnRpZCwKLQkJKHZvaWQgKikobG9uZylkYXRhLmlwLAotCQkobG9uZyBsb25nKWRhdGEucGVyaW9kKTsKKwlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlI0x4IHBlcmlvZDogJUxkXG4iLCBldmVudC0+aGVhZGVyLm1pc2MsCisJCSAgICBkYXRhLnBpZCwgZGF0YS50aWQsIGRhdGEuaXAsIGRhdGEucGVyaW9kKTsKIAogCXRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBldmVudC0+aXAucGlkKTsKIAlpZiAodGhyZWFkID09IE5VTEwpIHsKQEAgLTEwMywyMiArMTAxLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYW1wbGVfdHlwZV9jaGVjayhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQotewotCWlmICghKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSkgewotCQlmcHJpbnRmKHN0ZGVyciwKLQkJCSJObyB0cmFjZSBzYW1wbGUgdG8gcmVhZC4gRGlkIHlvdSBjYWxsIHBlcmYgcmVjb3JkICIKLQkJCSJ3aXRob3V0IC1SPyIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgZXZlbnRfb3BzID0gewotCS5wcm9jZXNzX3NhbXBsZV9ldmVudAk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAotCS5wcm9jZXNzX2NvbW1fZXZlbnQJPSBldmVudF9fcHJvY2Vzc19jb21tLAotCS5zYW1wbGVfdHlwZV9jaGVjawk9IHNhbXBsZV90eXBlX2NoZWNrLAorCS5zYW1wbGUJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkuY29tbQk9IGV2ZW50X19wcm9jZXNzX2NvbW0sCiB9OwogCiBzdGF0aWMgaW50IF9fY21kX3RyYWNlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCkBAIC0yMzUsOSArMjIwLDkgQEAKIAljb25zdCBjaGFyICpzY3JpcHQsICpleHQ7CiAJaW50IGxlbjsKIAotCWlmIChzdHJjbXAoc3RyLCAibGlzdCIpID09IDApIHsKKwlpZiAoc3RyY21wKHN0ciwgImxhbmciKSA9PSAwKSB7CiAJCWxpc3RfYXZhaWxhYmxlX2xhbmd1YWdlcygpOwotCQlyZXR1cm4gMDsKKwkJZXhpdCgwKTsKIAl9CiAKIAlzY3JpcHQgPSBzdHJjaHIoc3RyLCAnOicpOwpAQCAtNTMxLDYgKzUxNiw4IEBACiAJCSAgICAgcGFyc2Vfc2NyaXB0bmFtZSksCiAJT1BUX1NUUklORygnZycsICJnZW4tc2NyaXB0IiwgJmdlbmVyYXRlX3NjcmlwdF9sYW5nLCAibGFuZyIsCiAJCSAgICJnZW5lcmF0ZSBwZXJmLXRyYWNlLnh4IHNjcmlwdCBpbiBzcGVjaWZpZWQgbGFuZ3VhZ2UiKSwKKwlPUFRfU1RSSU5HKCdpJywgImlucHV0IiwgJmlucHV0X25hbWUsICJmaWxlIiwKKwkJICAgICJpbnB1dCBmaWxlIG5hbWUiKSwKIAogCU9QVF9FTkQoKQogfTsKQEAgLTU5Miw2ICs1NzksOSBAQAogCWlmIChzZXNzaW9uID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCisJaWYgKCFwZXJmX3Nlc3Npb25fX2hhc190cmFjZXMoc2Vzc2lvbiwgInJlY29yZCAtUiIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChnZW5lcmF0ZV9zY3JpcHRfbGFuZykgewogCQlzdHJ1Y3Qgc3RhdCBwZXJmX3N0YXQ7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi5oIGIvdG9vbHMvcGVyZi9idWlsdGluLmgKaW5kZXggMTgwMzViMS4uMTBmZTQ5ZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLmgKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLmgKQEAgLTE2LDYgKzE2LDcgQEAKIAogZXh0ZXJuIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfYmVuY2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfYnVpbGRpZF9jYWNoZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9idWlsZGlkX2xpc3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfZGlmZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9oZWxwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKQEAgLTMwLDUgKzMxLDYgQEAKIGV4dGVybiBpbnQgY21kX3ZlcnNpb24oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfcHJvYmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfa21lbShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9sb2NrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2NvbW1hbmQtbGlzdC50eHQgYi90b29scy9wZXJmL2NvbW1hbmQtbGlzdC50eHQKaW5kZXggNzFkYzdjMy4uOWFmY2ZmMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9jb21tYW5kLWxpc3QudHh0CisrKyBiL3Rvb2xzL3BlcmYvY29tbWFuZC1saXN0LnR4dApAQCAtMyw3ICszLDkgQEAKICMgY29tbWFuZCBuYW1lCQkJY2F0ZWdvcnkgW2RlcHJlY2F0ZWRdIFtjb21tb25dCiAjCiBwZXJmLWFubm90YXRlCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KK3BlcmYtYXJjaGl2ZQkJCW1haW5wb3JjZWxhaW4gY29tbW9uCiBwZXJmLWJlbmNoCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KK3BlcmYtYnVpbGRpZC1jYWNoZQkJbWFpbnBvcmNlbGFpbiBjb21tb24KIHBlcmYtYnVpbGRpZC1saXN0CQltYWlucG9yY2VsYWluIGNvbW1vbgogcGVyZi1kaWZmCQkJbWFpbnBvcmNlbGFpbiBjb21tb24KIHBlcmYtbGlzdAkJCW1haW5wb3JjZWxhaW4gY29tbW9uCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2Rlc2lnbi50eHQgYi90b29scy9wZXJmL2Rlc2lnbi50eHQKaW5kZXggOGQwZGU1MS4uYmQwYmIxYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9kZXNpZ24udHh0CisrKyBiL3Rvb2xzL3BlcmYvZGVzaWduLnR4dApAQCAtMTAxLDEwICsxMDEsMTAgQEAKIAkgKi8KIAlQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMJCT0gMCwKIAlQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUwkJPSAxLAotCVBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFUwk9IDIsCisJUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTCQk9IDIsCiAJUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVMJCT0gMywKIAlQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMJPSA0LAotCVBFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFUwk9IDUsCisJUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTCQk9IDUsCiAJUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTCQk9IDYsCiB9OwogCkBAIC0xMzEsOCArMTMxLDggQEAKICAqLwogZW51bSBzd19ldmVudF9pZHMgewogCVBFUkZfQ09VTlRfU1dfQ1BVX0NMT0NLCQk9IDAsCi0JUEVSRl9DT1VOVF9TV19UQVNLX0NMT0NLCQk9IDEsCi0JUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUUwkJPSAyLAorCVBFUkZfQ09VTlRfU1dfVEFTS19DTE9DSwk9IDEsCisJUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUUwk9IDIsCiAJUEVSRl9DT1VOVF9TV19DT05URVhUX1NXSVRDSEVTCT0gMywKIAlQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TCT0gNCwKIAlQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01JTgk9IDUsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3BlcmYtYXJjaGl2ZS5zaCBiL3Rvb2xzL3BlcmYvcGVyZi1hcmNoaXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZmJlMmYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3BlcmYtYXJjaGl2ZS5zaApAQCAtMCwwICsxLDMyIEBACisjIS9iaW4vYmFzaAorIyBwZXJmIGFyY2hpdmUKKyMgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQHJlZGhhdC5jb20+CisKK1BFUkZfREFUQT1wZXJmLmRhdGEKK2lmIFsgJCMgLW5lIDAgXSA7IHRoZW4KKwlQRVJGX0RBVEE9JDEKK2ZpCisKK0RFQlVHRElSPX4vLmRlYnVnLworQlVJTERJRFM9JChta3RlbXAgL3RtcC9wZXJmLWFyY2hpdmUtYnVpbGRpZHMuWFhYWFhYKQorCitwZXJmIGJ1aWxkaWQtbGlzdCAtaSAkUEVSRl9EQVRBIC0td2l0aC1oaXRzID4gJEJVSUxESURTCitpZiBbICEgLXMgJEJVSUxESURTIF0gOyB0aGVuCisJZWNobyAicGVyZiBhcmNoaXZlOiBubyBidWlsZC1pZHMgZm91bmQiCisJcm0gLWYgJEJVSUxESURTCisJZXhpdCAxCitmaQorCitNQU5JRkVTVD0kKG1rdGVtcCAvdG1wL3BlcmYtYXJjaGl2ZS1tYW5pZmVzdC5YWFhYWFgpCisKK2N1dCAtZCAnICcgLWYgMSAkQlVJTERJRFMgfCBcCit3aGlsZSByZWFkIGJ1aWxkX2lkIDsgZG8KKwlsaW5rbmFtZT0kREVCVUdESVIuYnVpbGQtaWQvJHtidWlsZF9pZDowOjJ9LyR7YnVpbGRfaWQ6Mn0KKwlmaWxlbmFtZT0kKHJlYWRsaW5rIC1mICRsaW5rbmFtZSkKKwllY2hvICR7bGlua25hbWUjJERFQlVHRElSfSA+PiAkTUFOSUZFU1QKKwllY2hvICR7ZmlsZW5hbWUjJERFQlVHRElSfSA+PiAkTUFOSUZFU1QKK2RvbmUKKwordGFyIGNmaiAkUEVSRl9EQVRBLnRhci5iejIgLUMgJERFQlVHRElSIC1UICRNQU5JRkVTVAorcm0gLWYgJE1BTklGRVNUICRCVUlMRElEUworZXhpdCAwCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3BlcmYuYyBiL3Rvb2xzL3BlcmYvcGVyZi5jCmluZGV4IDg3M2U1NWYuLjU3Y2IxMDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvcGVyZi5jCisrKyBiL3Rvb2xzL3BlcmYvcGVyZi5jCkBAIC00OCw3ICs0OCw4IEBACiAJcmV0dXJuIGMudmFsOwogfQogCi1zdGF0aWMgdm9pZCBjb21taXRfcGFnZXJfY2hvaWNlKHZvaWQpIHsKK3N0YXRpYyB2b2lkIGNvbW1pdF9wYWdlcl9jaG9pY2Uodm9pZCkKK3sKIAlzd2l0Y2ggKHVzZV9wYWdlcikgewogCWNhc2UgMDoKIAkJc2V0ZW52KCJQRVJGX1BBR0VSIiwgImNhdCIsIDEpOwpAQCAtNzAsNyArNzEsNyBAQAogCQkgInRyYWNpbmcvZXZlbnRzIik7CiB9CiAKLXN0YXRpYyBpbnQgaGFuZGxlX29wdGlvbnMoY29uc3QgY2hhcioqKiBhcmd2LCBpbnQqIGFyZ2MsIGludCogZW52Y2hhbmdlZCkKK3N0YXRpYyBpbnQgaGFuZGxlX29wdGlvbnMoY29uc3QgY2hhciAqKiphcmd2LCBpbnQgKmFyZ2MsIGludCAqZW52Y2hhbmdlZCkKIHsKIAlpbnQgaGFuZGxlZCA9IDA7CiAKQEAgLTEwOSw3ICsxMTAsNyBAQAogCQkJCSplbnZjaGFuZ2VkID0gMTsKIAkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tcGVyZi1kaXIiKSkgewogCQkJaWYgKCphcmdjIDwgMikgewotCQkJCWZwcmludGYoc3RkZXJyLCAiTm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLXBlcmYtZGlyLlxuIiApOworCQkJCWZwcmludGYoc3RkZXJyLCAiTm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLXBlcmYtZGlyLlxuIik7CiAJCQkJdXNhZ2UocGVyZl91c2FnZV9zdHJpbmcpOwogCQkJfQogCQkJc2V0ZW52KFBFUkZfRElSX0VOVklST05NRU5ULCAoKmFyZ3YpWzFdLCAxKTsKQEAgLTEyNCw3ICsxMjUsNyBAQAogCQkJCSplbnZjaGFuZ2VkID0gMTsKIAkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0td29yay10cmVlIikpIHsKIAkJCWlmICgqYXJnYyA8IDIpIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIk5vIGRpcmVjdG9yeSBnaXZlbiBmb3IgLS13b3JrLXRyZWUuXG4iICk7CisJCQkJZnByaW50ZihzdGRlcnIsICJObyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC0td29yay10cmVlLlxuIik7CiAJCQkJdXNhZ2UocGVyZl91c2FnZV9zdHJpbmcpOwogCQkJfQogCQkJc2V0ZW52KFBFUkZfV09SS19UUkVFX0VOVklST05NRU5ULCAoKmFyZ3YpWzFdLCAxKTsKQEAgLTE2OCw3ICsxNjksNyBAQAogewogCWludCBlbnZjaGFuZ2VkID0gMCwgcmV0ID0gMCwgc2F2ZWRfZXJybm8gPSBlcnJubzsKIAlpbnQgY291bnQsIG9wdGlvbl9jb3VudDsKLQljb25zdCBjaGFyKiogbmV3X2FyZ3Y7CisJY29uc3QgY2hhciAqKm5ld19hcmd2OwogCWNvbnN0IGNoYXIgKmFsaWFzX2NvbW1hbmQ7CiAJY2hhciAqYWxpYXNfc3RyaW5nOwogCkBAIC0yMTAsMTEgKzIxMSwxMSBAQAogCQlpZiAoIXN0cmNtcChhbGlhc19jb21tYW5kLCBuZXdfYXJndlswXSkpCiAJCQlkaWUoInJlY3Vyc2l2ZSBhbGlhczogJXMiLCBhbGlhc19jb21tYW5kKTsKIAotCQluZXdfYXJndiA9IHJlYWxsb2MobmV3X2FyZ3YsIHNpemVvZihjaGFyKikgKgorCQluZXdfYXJndiA9IHJlYWxsb2MobmV3X2FyZ3YsIHNpemVvZihjaGFyICopICoKIAkJCQkgICAgKGNvdW50ICsgKmFyZ2NwICsgMSkpOwogCQkvKiBpbnNlcnQgYWZ0ZXIgY29tbWFuZCBuYW1lICovCi0JCW1lbWNweShuZXdfYXJndiArIGNvdW50LCAqYXJndiArIDEsIHNpemVvZihjaGFyKikgKiAqYXJnY3ApOwotCQluZXdfYXJndltjb3VudCsqYXJnY3BdID0gTlVMTDsKKwkJbWVtY3B5KG5ld19hcmd2ICsgY291bnQsICphcmd2ICsgMSwgc2l6ZW9mKGNoYXIgKikgKiAqYXJnY3ApOworCQluZXdfYXJndltjb3VudCArICphcmdjcF0gPSBOVUxMOwogCiAJCSphcmd2ID0gbmV3X2FyZ3Y7CiAJCSphcmdjcCArPSBjb3VudCAtIDE7CkBAIC0yODUsNiArMjg2LDcgQEAKIHsKIAljb25zdCBjaGFyICpjbWQgPSBhcmd2WzBdOwogCXN0YXRpYyBzdHJ1Y3QgY21kX3N0cnVjdCBjb21tYW5kc1tdID0geworCQl7ICJidWlsZGlkLWNhY2hlIiwgY21kX2J1aWxkaWRfY2FjaGUsIDAgfSwKIAkJeyAiYnVpbGRpZC1saXN0IiwgY21kX2J1aWxkaWRfbGlzdCwgMCB9LAogCQl7ICJkaWZmIiwJY21kX2RpZmYsCTAgfSwKIAkJeyAiaGVscCIsCWNtZF9oZWxwLAkwIH0sCkBAIC0zMDEsNiArMzAzLDcgQEAKIAkJeyAic2NoZWQiLAljbWRfc2NoZWQsCTAgfSwKIAkJeyAicHJvYmUiLAljbWRfcHJvYmUsCTAgfSwKIAkJeyAia21lbSIsCWNtZF9rbWVtLAkwIH0sCisJCXsgImxvY2siLAljbWRfbG9jaywJMCB9LAogCX07CiAJdW5zaWduZWQgaW50IGk7CiAJc3RhdGljIGNvbnN0IGNoYXIgZXh0W10gPSBTVFJJUF9FWFRFTlNJT047CkBAIC0zODgsNyArMzkxLDcgQEAKIC8qIG1pbmkgL3Byb2MvbW91bnRzIHBhcnNlcjogc2VhcmNoaW5nIGZvciAiXmJsYWggL21vdW50L3BvaW50IGRlYnVnZnMiICovCiBzdGF0aWMgdm9pZCBnZXRfZGVidWdmc19tbnRwdCh2b2lkKQogewotCWNvbnN0IGNoYXIgKnBhdGggPSBkZWJ1Z2ZzX2ZpbmRfbW91bnRwb2ludCgpOworCWNvbnN0IGNoYXIgKnBhdGggPSBkZWJ1Z2ZzX21vdW50KE5VTEwpOwogCiAJaWYgKHBhdGgpCiAJCXN0cm5jcHkoZGVidWdmc19tbnRwdCwgcGF0aCwgc2l6ZW9mKGRlYnVnZnNfbW50cHQpKTsKQEAgLTQ0OSw4ICs0NTIsOCBAQAogCXNldHVwX3BhdGgoKTsKIAogCXdoaWxlICgxKSB7Ci0JCXN0YXRpYyBpbnQgZG9uZV9oZWxwID0gMDsKLQkJc3RhdGljIGludCB3YXNfYWxpYXMgPSAwOworCQlzdGF0aWMgaW50IGRvbmVfaGVscDsKKwkJc3RhdGljIGludCB3YXNfYWxpYXM7CiAKIAkJd2FzX2FsaWFzID0gcnVuX2FyZ3YoJmFyZ2MsICZhcmd2KTsKIAkJaWYgKGVycm5vICE9IEVOT0VOVCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5jCmluZGV4IGFmNzhkOWEuLjAxYTY0YWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYwpAQCAtMzEsMTMgKzMxLDE0IEBACiAjaW5jbHVkZSAiRVhURVJOLmgiCiAjaW5jbHVkZSAicGVybC5oIgogI2luY2x1ZGUgIlhTVUIuaCIKLSNpbmNsdWRlICIuLi8uLi8uLi91dGlsL3RyYWNlLWV2ZW50LXBlcmwuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9wZXJmLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vdXRpbC90cmFjZS1ldmVudC5oIgogCiAjaWZuZGVmIFBFUkxfVU5VU0VEX1ZBUgogIyAgZGVmaW5lIFBFUkxfVU5VU0VEX1ZBUih2YXIpIGlmICgwKSB2YXIgPSB2YXIKICNlbmRpZgogCi0jbGluZSA0MSAiQ29udGV4dC5jIgorI2xpbmUgNDIgIkNvbnRleHQuYyIKIAogWFMoWFNfUGVyZl9fVHJhY2VfX0NvbnRleHRfY29tbW9uX3BjKTsgLyogcHJvdG90eXBlIHRvIHBhc3MgLVdtaXNzaW5nLXByb3RvdHlwZXMgKi8KIFhTKFhTX1BlcmZfX1RyYWNlX19Db250ZXh0X2NvbW1vbl9wYykKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LnhzIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQueHMKaW5kZXggZmI3ODAwNi4uNTQ5Y2YwNCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQueHMKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQueHMKQEAgLTIyLDcgKzIyLDggQEAKICNpbmNsdWRlICJFWFRFUk4uaCIKICNpbmNsdWRlICJwZXJsLmgiCiAjaW5jbHVkZSAiWFNVQi5oIgotI2luY2x1ZGUgIi4uLy4uLy4uL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL3BlcmYuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi91dGlsL3RyYWNlLWV2ZW50LmgiCiAKIE1PRFVMRSA9IFBlcmY6OlRyYWNlOjpDb250ZXh0CQlQQUNLQUdFID0gUGVyZjo6VHJhY2U6OkNvbnRleHQKIFBST1RPVFlQRVM6IEVOQUJMRQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL1V0aWwucG0gYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5wbQppbmRleCAwNTJmMTMyLi5mODY5YzQ4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5wbQorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5wbQpAQCAtNDQsNyArNDQsNyBAQAogc3ViIG5zZWNzX25zZWNzIHsKICAgICBteSAoJG5zZWNzKSA9IEBfOwogCi0gICAgcmV0dXJuICRuc2VjcyAtIG5zZWNzX3NlY3MoJG5zZWNzKTsKKyAgICByZXR1cm4gJG5zZWNzICUgJE5TRUNTX1BFUl9TRUM7CiB9CiAKIHN1YiBuc2Vjc19zdHIgewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2NoZWNrLXBlcmYtdHJhY2UtcmVjb3JkIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2NoZWNrLXBlcmYtdHJhY2UtcmVjb3JkCmluZGV4IGM3ZWM1ZGUuLmU2Y2IxNDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9jaGVjay1wZXJmLXRyYWNlLXJlY29yZAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vY2hlY2stcGVyZi10cmFjZS1yZWNvcmQKQEAgLTEsNyArMSwyIEBACiAjIS9iaW4vYmFzaAotcGVyZiByZWNvcmQgLWMgMSAtZiAtYSAtTSAtUiAtZSBrbWVtOmttYWxsb2MgLWUgaXJxOnNvZnRpcnFfZW50cnkKLQotCi0KLQotCitwZXJmIHJlY29yZCAtYyAxIC1mIC1hIC1NIC1SIC1lIGttZW06a21hbGxvYyAtZSBpcnE6c29mdGlycV9lbnRyeSAtZSBrbWVtOmtmcmVlCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vY2hlY2stcGVyZi10cmFjZS1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vY2hlY2stcGVyZi10cmFjZS1yZXBvcnQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmYzRhMDMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2NoZWNrLXBlcmYtdHJhY2UtcmVwb3J0CisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jIS9iaW4vYmFzaAotIyBkZXNjcmlwdGlvbjogdXNlbGVzcyBidXQgZXhoYXVzdGl2ZSB0ZXN0IHNjcmlwdAotcGVyZiB0cmFjZSAtcyB+L2xpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcGVybC9jaGVjay1wZXJmLXRyYWNlLnBsCi0KLQotCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vZmFpbGVkLXN5c2NhbGxzLXJlY29yZCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2Jpbi9mYWlsZWQtc3lzY2FsbHMtcmVjb3JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODg1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vZmFpbGVkLXN5c2NhbGxzLXJlY29yZApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9iYXNoCitwZXJmIHJlY29yZCAtYyAxIC1mIC1hIC1NIC1SIC1lIHJhd19zeXNjYWxsczpzeXNfZXhpdApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2ZhaWxlZC1zeXNjYWxscy1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9iaW4vZmFpbGVkLXN5c2NhbGxzLXJlcG9ydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmZjNjYwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvYmluL2ZhaWxlZC1zeXNjYWxscy1yZXBvcnQKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vYmFzaAorIyBkZXNjcmlwdGlvbjogc3lzdGVtLXdpZGUgZmFpbGVkIHN5c2NhbGxzCisjIGFyZ3M6IFtjb21tXQorcGVyZiB0cmFjZSAtcyB+L2xpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcGVybC9mYWlsZWQtc3lzY2FsbHMucGwgJDEKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2ZhaWxlZC1zeXNjYWxscy5wbCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL2ZhaWxlZC1zeXNjYWxscy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMThlN2UyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvZmFpbGVkLXN5c2NhbGxzLnBsCkBAIC0wLDAgKzEsMzggQEAKKyMgZmFpbGVkIHN5c3RlbSBjYWxsIGNvdW50cworIyAoYykgMjAxMCwgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisjCisjIERpc3BsYXlzIHN5c3RlbS13aWRlIGZhaWxlZCBzeXN0ZW0gY2FsbCB0b3RhbHMKKyMgSWYgYSBbY29tbV0gYXJnIGlzIHNwZWNpZmllZCwgb25seSBzeXNjYWxscyBjYWxsZWQgYnkgW2NvbW1dIGFyZSBkaXNwbGF5ZWQuCisKK3VzZSBsaWIgIiRFTlZ7J1BFUkZfRVhFQ19QQVRIJ30vc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9saWIiOwordXNlIGxpYiAiLi9QZXJmLVRyYWNlLVV0aWwvbGliIjsKK3VzZSBQZXJmOjpUcmFjZTo6Q29yZTsKK3VzZSBQZXJmOjpUcmFjZTo6Q29udGV4dDsKK3VzZSBQZXJmOjpUcmFjZTo6VXRpbDsKKworbXkgJWZhaWxlZF9zeXNjYWxsczsKKworc3ViIHJhd19zeXNjYWxsczo6c3lzX2V4aXQKK3sKKwlteSAoJGV2ZW50X25hbWUsICRjb250ZXh0LCAkY29tbW9uX2NwdSwgJGNvbW1vbl9zZWNzLCAkY29tbW9uX25zZWNzLAorCSAgICAkY29tbW9uX3BpZCwgJGNvbW1vbl9jb21tLAorCSAgICAkaWQsICRyZXQpID0gQF87CisKKwlpZiAoJHJldCA8IDApIHsKKwkgICAgJGZhaWxlZF9zeXNjYWxsc3skY29tbW9uX2NvbW19Kys7CisJfQorfQorCitzdWIgdHJhY2VfZW5kCit7CisgICAgcHJpbnRmKCJcbmZhaWxlZCBzeXNjYWxscyBieSBjb21tOlxuXG4iKTsKKworICAgIHByaW50ZigiJS0yMHMgICUxMHNcbiIsICJjb21tIiwgIiMgZXJyb3JzIik7CisgICAgcHJpbnRmKCIlLTIwcyAgJTZzICAlMTBzXG4iLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLSIpOworCisgICAgZm9yZWFjaCBteSAkY29tbSAoc29ydCB7JGZhaWxlZF9zeXNjYWxsc3skYn0gPD0+ICRmYWlsZWRfc3lzY2FsbHN7JGF9fQorCQkgICAgICBrZXlzICVmYWlsZWRfc3lzY2FsbHMpIHsKKwkgICAgcHJpbnRmKCIlLTIwcyAgJTEwc1xuIiwgJGNvbW0sICRmYWlsZWRfc3lzY2FsbHN7JGNvbW19KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU3MDg1ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29udGV4dC5jLiAgUHl0aG9uIGludGVyZmFjZXMgZm9yIHBlcmYgdHJhY2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxQeXRob24uaD4KKyNpbmNsdWRlICIuLi8uLi8uLi9wZXJmLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vdXRpbC90cmFjZS1ldmVudC5oIgorCitQeU1PRElOSVRfRlVOQyBpbml0cGVyZl90cmFjZV9jb250ZXh0KHZvaWQpOworCitzdGF0aWMgUHlPYmplY3QgKnBlcmZfdHJhY2VfY29udGV4dF9jb21tb25fcGMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworCXN0YXRpYyBzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKnNjcmlwdGluZ19jb250ZXh0OworCVB5T2JqZWN0ICpjb250ZXh0OworCWludCByZXR2YWw7CisKKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iLCAmY29udGV4dCkpCisJCXJldHVybiBOVUxMOworCisJc2NyaXB0aW5nX2NvbnRleHQgPSBQeUNPYmplY3RfQXNWb2lkUHRyKGNvbnRleHQpOworCXJldHZhbCA9IGNvbW1vbl9wYyhzY3JpcHRpbmdfY29udGV4dCk7CisKKwlyZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaSIsIHJldHZhbCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqcGVyZl90cmFjZV9jb250ZXh0X2NvbW1vbl9mbGFncyhQeU9iamVjdCAqc2VsZiwKKwkJCQkJCSBQeU9iamVjdCAqYXJncykKK3sKKwlzdGF0aWMgc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpzY3JpcHRpbmdfY29udGV4dDsKKwlQeU9iamVjdCAqY29udGV4dDsKKwlpbnQgcmV0dmFsOworCisJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiwgJmNvbnRleHQpKQorCQlyZXR1cm4gTlVMTDsKKworCXNjcmlwdGluZ19jb250ZXh0ID0gUHlDT2JqZWN0X0FzVm9pZFB0cihjb250ZXh0KTsKKwlyZXR2YWwgPSBjb21tb25fZmxhZ3Moc2NyaXB0aW5nX2NvbnRleHQpOworCisJcmV0dXJuIFB5X0J1aWxkVmFsdWUoImkiLCByZXR2YWwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKnBlcmZfdHJhY2VfY29udGV4dF9jb21tb25fbG9ja19kZXB0aChQeU9iamVjdCAqc2VsZiwKKwkJCQkJCSAgICAgIFB5T2JqZWN0ICphcmdzKQoreworCXN0YXRpYyBzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKnNjcmlwdGluZ19jb250ZXh0OworCVB5T2JqZWN0ICpjb250ZXh0OworCWludCByZXR2YWw7CisKKwlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iLCAmY29udGV4dCkpCisJCXJldHVybiBOVUxMOworCisJc2NyaXB0aW5nX2NvbnRleHQgPSBQeUNPYmplY3RfQXNWb2lkUHRyKGNvbnRleHQpOworCXJldHZhbCA9IGNvbW1vbl9sb2NrX2RlcHRoKHNjcmlwdGluZ19jb250ZXh0KTsKKworCXJldHVybiBQeV9CdWlsZFZhbHVlKCJpIiwgcmV0dmFsKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIENvbnRleHRNZXRob2RzW10gPSB7CisJeyAiY29tbW9uX3BjIiwgcGVyZl90cmFjZV9jb250ZXh0X2NvbW1vbl9wYywgTUVUSF9WQVJBUkdTLAorCSAgIkdldCB0aGUgY29tbW9uIHByZWVtcHQgY291bnQgZXZlbnQgZmllbGQgdmFsdWUuIn0sCisJeyAiY29tbW9uX2ZsYWdzIiwgcGVyZl90cmFjZV9jb250ZXh0X2NvbW1vbl9mbGFncywgTUVUSF9WQVJBUkdTLAorCSAgIkdldCB0aGUgY29tbW9uIGZsYWdzIGV2ZW50IGZpZWxkIHZhbHVlLiJ9LAorCXsgImNvbW1vbl9sb2NrX2RlcHRoIiwgcGVyZl90cmFjZV9jb250ZXh0X2NvbW1vbl9sb2NrX2RlcHRoLAorCSAgTUVUSF9WQVJBUkdTLAkiR2V0IHRoZSBjb21tb24gbG9jayBkZXB0aCBldmVudCBmaWVsZCB2YWx1ZS4ifSwKKwl7IE5VTEwsIE5VTEwsIDAsIE5VTEx9Cit9OworCitQeU1PRElOSVRfRlVOQyBpbml0cGVyZl90cmFjZV9jb250ZXh0KHZvaWQpCit7CisJKHZvaWQpIFB5X0luaXRNb2R1bGUoInBlcmZfdHJhY2VfY29udGV4dCIsIENvbnRleHRNZXRob2RzKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL0NvcmUucHkgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9Db3JlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYzQ2NGUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9Db3JlLnB5CkBAIC0wLDAgKzEsOTEgQEAKKyMgQ29yZS5weSAtIFB5dGhvbiBleHRlbnNpb24gZm9yIHBlcmYgdHJhY2UsIGNvcmUgZnVuY3Rpb25zCisjCisjIENvcHlyaWdodCAoQykgMjAxMCBieSBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPgorIworIyBUaGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCisjIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLgorCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAorCitkZWYgYXV0b2RpY3QoKToKKyAgICByZXR1cm4gZGVmYXVsdGRpY3QoYXV0b2RpY3QpCisKK2ZsYWdfZmllbGRzID0gYXV0b2RpY3QoKQorc3ltYm9saWNfZmllbGRzID0gYXV0b2RpY3QoKQorCitkZWYgZGVmaW5lX2ZsYWdfZmllbGQoZXZlbnRfbmFtZSwgZmllbGRfbmFtZSwgZGVsaW0pOgorICAgIGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWydkZWxpbSddID0gZGVsaW0KKworZGVmIGRlZmluZV9mbGFnX3ZhbHVlKGV2ZW50X25hbWUsIGZpZWxkX25hbWUsIHZhbHVlLCBmaWVsZF9zdHIpOgorICAgIGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWyd2YWx1ZXMnXVt2YWx1ZV0gPSBmaWVsZF9zdHIKKworZGVmIGRlZmluZV9zeW1ib2xpY19maWVsZChldmVudF9uYW1lLCBmaWVsZF9uYW1lKToKKyAgICAjIG5vdGhpbmcgdG8gZG8sIHJlYWxseQorICAgIHBhc3MKKworZGVmIGRlZmluZV9zeW1ib2xpY192YWx1ZShldmVudF9uYW1lLCBmaWVsZF9uYW1lLCB2YWx1ZSwgZmllbGRfc3RyKToKKyAgICBzeW1ib2xpY19maWVsZHNbZXZlbnRfbmFtZV1bZmllbGRfbmFtZV1bJ3ZhbHVlcyddW3ZhbHVlXSA9IGZpZWxkX3N0cgorCitkZWYgZmxhZ19zdHIoZXZlbnRfbmFtZSwgZmllbGRfbmFtZSwgdmFsdWUpOgorICAgIHN0cmluZyA9ICIiCisKKyAgICBpZiBmbGFnX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXToKKwlwcmludF9kZWxpbSA9IDAKKyAgICAgICAga2V5cyA9IGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWyd2YWx1ZXMnXS5rZXlzKCkKKyAgICAgICAga2V5cy5zb3J0KCkKKyAgICAgICAgZm9yIGlkeCBpbiBrZXlzOgorICAgICAgICAgICAgaWYgbm90IHZhbHVlIGFuZCBub3QgaWR4OgorICAgICAgICAgICAgICAgIHN0cmluZyArPSBmbGFnX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXVsndmFsdWVzJ11baWR4XQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBpZHggYW5kICh2YWx1ZSAmIGlkeCkgPT0gaWR4OgorICAgICAgICAgICAgICAgIGlmIHByaW50X2RlbGltIGFuZCBmbGFnX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXVsnZGVsaW0nXToKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgIiArIGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWydkZWxpbSddICsgIiAiCisgICAgICAgICAgICAgICAgc3RyaW5nICs9IGZsYWdfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWyd2YWx1ZXMnXVtpZHhdCisgICAgICAgICAgICAgICAgcHJpbnRfZGVsaW0gPSAxCisgICAgICAgICAgICAgICAgdmFsdWUgJj0gfmlkeAorCisgICAgcmV0dXJuIHN0cmluZworCitkZWYgc3ltYm9sX3N0cihldmVudF9uYW1lLCBmaWVsZF9uYW1lLCB2YWx1ZSk6CisgICAgc3RyaW5nID0gIiIKKworICAgIGlmIHN5bWJvbGljX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXToKKyAgICAgICAga2V5cyA9IHN5bWJvbGljX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXVsndmFsdWVzJ10ua2V5cygpCisgICAgICAgIGtleXMuc29ydCgpCisgICAgICAgIGZvciBpZHggaW4ga2V5czoKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZSBhbmQgbm90IGlkeDoKKwkJc3RyaW5nID0gc3ltYm9saWNfZmllbGRzW2V2ZW50X25hbWVdW2ZpZWxkX25hbWVdWyd2YWx1ZXMnXVtpZHhdCisgICAgICAgICAgICAgICAgYnJlYWsKKwkgICAgaWYgKHZhbHVlID09IGlkeCk6CisJCXN0cmluZyA9IHN5bWJvbGljX2ZpZWxkc1tldmVudF9uYW1lXVtmaWVsZF9uYW1lXVsndmFsdWVzJ11baWR4XQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICByZXR1cm4gc3RyaW5nCisKK3RyYWNlX2ZsYWdzID0geyAweDAwOiAiTk9ORSIsIFwKKyAgICAgICAgICAgICAgICAgICAgMHgwMTogIklSUVNfT0ZGIiwgXAorICAgICAgICAgICAgICAgICAgICAweDAyOiAiSVJRU19OT1NVUFBPUlQiLCBcCisgICAgICAgICAgICAgICAgICAgIDB4MDQ6ICJORUVEX1JFU0NIRUQiLCBcCisgICAgICAgICAgICAgICAgICAgIDB4MDg6ICJIQVJESVJRIiwgXAorICAgICAgICAgICAgICAgICAgICAweDEwOiAiU09GVElSUSIgfQorCitkZWYgdHJhY2VfZmxhZ19zdHIodmFsdWUpOgorICAgIHN0cmluZyA9ICIiCisgICAgcHJpbnRfZGVsaW0gPSAwCisKKyAgICBrZXlzID0gdHJhY2VfZmxhZ3Mua2V5cygpCisKKyAgICBmb3IgaWR4IGluIGtleXM6CisJaWYgbm90IHZhbHVlIGFuZCBub3QgaWR4OgorCSAgICBzdHJpbmcgKz0gIk5PTkUiCisJICAgIGJyZWFrCisKKwlpZiBpZHggYW5kICh2YWx1ZSAmIGlkeCkgPT0gaWR4OgorCSAgICBpZiBwcmludF9kZWxpbToKKwkJc3RyaW5nICs9ICIgfCAiOworCSAgICBzdHJpbmcgKz0gdHJhY2VfZmxhZ3NbaWR4XQorCSAgICBwcmludF9kZWxpbSA9IDEKKwkgICAgdmFsdWUgJj0gfmlkeAorCisgICAgcmV0dXJuIHN0cmluZwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvVXRpbC5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL1V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNlOTE0MwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL1V0aWwucHkKQEAgLTAsMCArMSwyNSBAQAorIyBVdGlsLnB5IC0gUHl0aG9uIGV4dGVuc2lvbiBmb3IgcGVyZiB0cmFjZSwgbWlzY2VsbGFuZW91cyB1dGlsaXR5IGNvZGUKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIGJ5IFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CisjCisjIFRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKKyMgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24uCisKK05TRUNTX1BFUl9TRUMgICAgPSAxMDAwMDAwMDAwCisKK2RlZiBhdmcodG90YWwsIG4pOgorICAgIHJldHVybiB0b3RhbCAvIG4KKworZGVmIG5zZWNzKHNlY3MsIG5zZWNzKToKKyAgICByZXR1cm4gc2VjcyAqIE5TRUNTX1BFUl9TRUMgKyBuc2VjcworCitkZWYgbnNlY3Nfc2Vjcyhuc2Vjcyk6CisgICAgcmV0dXJuIG5zZWNzIC8gTlNFQ1NfUEVSX1NFQworCitkZWYgbnNlY3NfbnNlY3MobnNlY3MpOgorICAgIHJldHVybiBuc2VjcyAlIE5TRUNTX1BFUl9TRUMKKworZGVmIG5zZWNzX3N0cihuc2Vjcyk6CisgICAgc3RyID0gIiU1dS4lMDl1IiAlIChuc2Vjc19zZWNzKG5zZWNzKSwgbnNlY3NfbnNlY3MobnNlY3MpKSwKKyAgICByZXR1cm4gc3RyCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9mYWlsZWQtc3lzY2FsbHMtYnktcGlkLXJlY29yZCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL2ZhaWxlZC1zeXNjYWxscy1ieS1waWQtcmVjb3JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODg1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9mYWlsZWQtc3lzY2FsbHMtYnktcGlkLXJlY29yZApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9iYXNoCitwZXJmIHJlY29yZCAtYyAxIC1mIC1hIC1NIC1SIC1lIHJhd19zeXNjYWxsczpzeXNfZXhpdApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9mYWlsZWQtc3lzY2FsbHMtYnktcGlkLXJlcG9ydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTBjMGE4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC1yZXBvcnQKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vYmFzaAorIyBkZXNjcmlwdGlvbjogc3lzdGVtLXdpZGUgZmFpbGVkIHN5c2NhbGxzLCBieSBwaWQKKyMgYXJnczogW2NvbW1dCitwZXJmIHRyYWNlIC1zIH4vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC5weSAkMQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtYnktcGlkLXJlY29yZCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3N5c2NhbGwtY291bnRzLWJ5LXBpZC1yZWNvcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhOGM1MAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3N5c2NhbGwtY291bnRzLWJ5LXBpZC1yZWNvcmQKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vYmFzaAorcGVyZiByZWNvcmQgLWMgMSAtZiAtYSAtTSAtUiAtZSByYXdfc3lzY2FsbHM6c3lzX2VudGVyCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1ieS1waWQtcmVwb3J0IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtYnktcGlkLXJlcG9ydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODA0NGQxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtYnktcGlkLXJlcG9ydApAQCAtMCwwICsxLDQgQEAKKyMhL2Jpbi9iYXNoCisjIGRlc2NyaXB0aW9uOiBzeXN0ZW0td2lkZSBzeXNjYWxsIGNvdW50cywgYnkgcGlkCisjIGFyZ3M6IFtjb21tXQorcGVyZiB0cmFjZSAtcyB+L2xpYmV4ZWMvcGVyZi1jb3JlL3NjcmlwdHMvcHl0aG9uL3N5c2NhbGwtY291bnRzLWJ5LXBpZC5weSAkMQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtcmVjb3JkIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc3lzY2FsbC1jb3VudHMtcmVjb3JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YThjNTAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZWNvcmQKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vYmFzaAorcGVyZiByZWNvcmQgLWMgMSAtZiAtYSAtTSAtUiAtZSByYXdfc3lzY2FsbHM6c3lzX2VudGVyCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZXBvcnQgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZXBvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM2NmFhNjEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL2Jpbi9zeXNjYWxsLWNvdW50cy1yZXBvcnQKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vYmFzaAorIyBkZXNjcmlwdGlvbjogc3lzdGVtLXdpZGUgc3lzY2FsbCBjb3VudHMKKyMgYXJnczogW2NvbW1dCitwZXJmIHRyYWNlIC1zIH4vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24vc3lzY2FsbC1jb3VudHMucHkgJDEKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vY2hlY2stcGVyZi10cmFjZS5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vY2hlY2stcGVyZi10cmFjZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjRkOTM0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9jaGVjay1wZXJmLXRyYWNlLnB5CkBAIC0wLDAgKzEsODMgQEAKKyMgcGVyZiB0cmFjZSBldmVudCBoYW5kbGVycywgZ2VuZXJhdGVkIGJ5IHBlcmYgdHJhY2UgLWcgcHl0aG9uCisjIChjKSAyMDEwLCBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPgorIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKKyMKKyMgVGhpcyBzY3JpcHQgdGVzdHMgYmFzaWMgZnVuY3Rpb25hbGl0eSBzdWNoIGFzIGZsYWcgYW5kIHN5bWJvbAorIyBzdHJpbmdzLCBjb21tb25feHh4KCkgY2FsbHMgYmFjayBpbnRvIHBlcmYsIGJlZ2luLCBlbmQsIHVuaGFuZGxlZAorIyBldmVudHMsIGV0Yy4gIEJhc2ljYWxseSwgaWYgdGhpcyBzY3JpcHQgcnVucyBzdWNjZXNzZnVsbHkgYW5kCisjIGRpc3BsYXlzIGV4cGVjdGVkIHJlc3VsdHMsIFB5dGhvbiBzY3JpcHRpbmcgc3VwcG9ydCBzaG91bGQgYmUgb2suCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwknL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKK2Zyb20gQ29yZSBpbXBvcnQgKgorZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKKwordW5oYW5kbGVkID0gYXV0b2RpY3QoKQorCitkZWYgdHJhY2VfYmVnaW4oKToKKwlwcmludCAidHJhY2VfYmVnaW4iCisJcGFzcworCitkZWYgdHJhY2VfZW5kKCk6CisgICAgICAgIHByaW50X3VuaGFuZGxlZCgpCisKK2RlZiBpcnFfX3NvZnRpcnFfZW50cnkoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwl2ZWMpOgorCQlwcmludF9oZWFkZXIoZXZlbnRfbmFtZSwgY29tbW9uX2NwdSwgY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywKKwkJCWNvbW1vbl9waWQsIGNvbW1vbl9jb21tKQorCisgICAgICAgICAgICAgICAgcHJpbnRfdW5jb21tb24oY29udGV4dCkKKworCQlwcmludCAidmVjPSVzXG4iICUgXAorCQkoc3ltYm9sX3N0cigiaXJxX19zb2Z0aXJxX2VudHJ5IiwgInZlYyIsIHZlYykpLAorCitkZWYga21lbV9fa21hbGxvYyhldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCWNhbGxfc2l0ZSwgcHRyLCBieXRlc19yZXEsIGJ5dGVzX2FsbG9jLAorCWdmcF9mbGFncyk6CisJCXByaW50X2hlYWRlcihldmVudF9uYW1lLCBjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQkJY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pCisKKyAgICAgICAgICAgICAgICBwcmludF91bmNvbW1vbihjb250ZXh0KQorCisJCXByaW50ICJjYWxsX3NpdGU9JXUsIHB0cj0ldSwgYnl0ZXNfcmVxPSV1LCAiIFwKKwkJImJ5dGVzX2FsbG9jPSV1LCBnZnBfZmxhZ3M9JXNcbiIgJSBcCisJCShjYWxsX3NpdGUsIHB0ciwgYnl0ZXNfcmVxLCBieXRlc19hbGxvYywKKworCQlmbGFnX3N0cigia21lbV9fa21hbGxvYyIsICJnZnBfZmxhZ3MiLCBnZnBfZmxhZ3MpKSwKKworZGVmIHRyYWNlX3VuaGFuZGxlZChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQljb21tb25fcGlkLCBjb21tb25fY29tbSk6CisgICAgdHJ5OgorICAgICAgICB1bmhhbmRsZWRbZXZlbnRfbmFtZV0gKz0gMQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHVuaGFuZGxlZFtldmVudF9uYW1lXSA9IDEKKworZGVmIHByaW50X2hlYWRlcihldmVudF9uYW1lLCBjcHUsIHNlY3MsIG5zZWNzLCBwaWQsIGNvbW0pOgorCXByaW50ICIlLTIwcyAlNXUgJTA1dS4lMDl1ICU4dSAlLTIwcyAiICUgXAorCShldmVudF9uYW1lLCBjcHUsIHNlY3MsIG5zZWNzLCBwaWQsIGNvbW0pLAorCisjIHByaW50IHRyYWNlIGZpZWxkcyBub3QgaW5jbHVkZWQgaW4gaGFuZGxlciBhcmdzCitkZWYgcHJpbnRfdW5jb21tb24oY29udGV4dCk6CisgICAgcHJpbnQgImNvbW1vbl9wcmVlbXB0X2NvdW50PSVkLCBjb21tb25fZmxhZ3M9JXMsIGNvbW1vbl9sb2NrX2RlcHRoPSVkLCAiIFwKKyAgICAgICAgJSAoY29tbW9uX3BjKGNvbnRleHQpLCB0cmFjZV9mbGFnX3N0cihjb21tb25fZmxhZ3MoY29udGV4dCkpLCBcCisgICAgICAgICAgICAgICBjb21tb25fbG9ja19kZXB0aChjb250ZXh0KSkKKworZGVmIHByaW50X3VuaGFuZGxlZCgpOgorICAgIGtleXMgPSB1bmhhbmRsZWQua2V5cygpCisgICAgaWYgbm90IGtleXM6CisgICAgICAgIHJldHVybgorCisgICAgcHJpbnQgIlxudW5oYW5kbGVkIGV2ZW50czpcblxuIiwKKworICAgIHByaW50ICIlLTQwcyAgJTEwc1xuIiAlICgiZXZlbnQiLCAiY291bnQiKSwKKyAgICBwcmludCAiJS00MHMgICUxMHNcbiIgJSAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS0tLS0tLS0iKSwKKworICAgIGZvciBldmVudF9uYW1lIGluIGtleXM6CisJcHJpbnQgIiUtNDBzICAlMTBkXG4iICUgKGV2ZW50X25hbWUsIHVuaGFuZGxlZFtldmVudF9uYW1lXSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vZmFpbGVkLXN5c2NhbGxzLWJ5LXBpZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2EwMjI3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9mYWlsZWQtc3lzY2FsbHMtYnktcGlkLnB5CkBAIC0wLDAgKzEsNjggQEAKKyMgZmFpbGVkIHN5c3RlbSBjYWxsIGNvdW50cywgYnkgcGlkCisjIChjKSAyMDEwLCBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPgorIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKKyMKKyMgRGlzcGxheXMgc3lzdGVtLXdpZGUgZmFpbGVkIHN5c3RlbSBjYWxsIHRvdGFscywgYnJva2VuIGRvd24gYnkgcGlkLgorIyBJZiBhIFtjb21tXSBhcmcgaXMgc3BlY2lmaWVkLCBvbmx5IHN5c2NhbGxzIGNhbGxlZCBieSBbY29tbV0gYXJlIGRpc3BsYXllZC4KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK3N5cy5wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydQRVJGX0VYRUNfUEFUSCddICsgXAorCScvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlJykKKworZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICoKK2Zyb20gQ29yZSBpbXBvcnQgKgorCit1c2FnZSA9ICJwZXJmIHRyYWNlIC1zIHN5c2NhbGwtY291bnRzLWJ5LXBpZC5weSBbY29tbV1cbiI7CisKK2Zvcl9jb21tID0gTm9uZQorCitpZiBsZW4oc3lzLmFyZ3YpID4gMjoKKwlzeXMuZXhpdCh1c2FnZSkKKworaWYgbGVuKHN5cy5hcmd2KSA+IDE6CisJZm9yX2NvbW0gPSBzeXMuYXJndlsxXQorCitzeXNjYWxscyA9IGF1dG9kaWN0KCkKKworZGVmIHRyYWNlX2JlZ2luKCk6CisJcGFzcworCitkZWYgdHJhY2VfZW5kKCk6CisJcHJpbnRfZXJyb3JfdG90YWxzKCkKKworZGVmIHJhd19zeXNjYWxsc19fc3lzX2V4aXQoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwlpZCwgcmV0KToKKwlpZiBmb3JfY29tbSBpcyBub3QgTm9uZToKKwkJaWYgY29tbW9uX2NvbW0gIT0gZm9yX2NvbW06CisJCQlyZXR1cm4KKworCWlmIHJldCA8IDA6CisJCXRyeToKKwkJCXN5c2NhbGxzW2NvbW1vbl9jb21tXVtjb21tb25fcGlkXVtpZF1bcmV0XSArPSAxCisJCWV4Y2VwdCBUeXBlRXJyb3I6CisJCQlzeXNjYWxsc1tjb21tb25fY29tbV1bY29tbW9uX3BpZF1baWRdW3JldF0gPSAxCisKK2RlZiBwcmludF9lcnJvcl90b3RhbHMoKToKKyAgICBpZiBmb3JfY29tbSBpcyBub3QgTm9uZToKKwkgICAgcHJpbnQgIlxuc3lzY2FsbCBlcnJvcnMgZm9yICVzOlxuXG4iICUgKGZvcl9jb21tKSwKKyAgICBlbHNlOgorCSAgICBwcmludCAiXG5zeXNjYWxsIGVycm9yczpcblxuIiwKKworICAgIHByaW50ICIlLTMwcyAgJTEwc1xuIiAlICgiY29tbSBbcGlkXSIsICJjb3VudCIpLAorICAgIHByaW50ICIlLTMwcyAgJTEwc1xuIiAlICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tLS0tLS0iKSwKKworICAgIGNvbW1fa2V5cyA9IHN5c2NhbGxzLmtleXMoKQorICAgIGZvciBjb21tIGluIGNvbW1fa2V5czoKKwkgICAgcGlkX2tleXMgPSBzeXNjYWxsc1tjb21tXS5rZXlzKCkKKwkgICAgZm9yIHBpZCBpbiBwaWRfa2V5czoKKwkJICAgIHByaW50ICJcbiVzIFslZF1cbiIgJSAoY29tbSwgcGlkKSwKKwkJICAgIGlkX2tleXMgPSBzeXNjYWxsc1tjb21tXVtwaWRdLmtleXMoKQorCQkgICAgZm9yIGlkIGluIGlkX2tleXM6CisJCQkgICAgcHJpbnQgIiAgc3lzY2FsbDogJS0xNmRcbiIgJSAoaWQpLAorCQkJICAgIHJldF9rZXlzID0gc3lzY2FsbHNbY29tbV1bcGlkXVtpZF0ua2V5cygpCisJCQkgICAgZm9yIHJldCwgdmFsIGluIHNvcnRlZChzeXNjYWxsc1tjb21tXVtwaWRdW2lkXS5pdGVyaXRlbXMoKSwga2V5ID0gbGFtYmRhKGssIHYpOiAodiwgayksICByZXZlcnNlID0gVHJ1ZSk6CisJCQkJICAgIHByaW50ICIgICAgZXJyID0gJS0yMGQgICUxMGRcbiIgJSAocmV0LCB2YWwpLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy1ieS1waWQucHkgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3N5c2NhbGwtY291bnRzLWJ5LXBpZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjcyMmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy1ieS1waWQucHkKQEAgLTAsMCArMSw2NCBAQAorIyBzeXN0ZW0gY2FsbCBjb3VudHMsIGJ5IHBpZAorIyAoYykgMjAxMCwgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisjCisjIERpc3BsYXlzIHN5c3RlbS13aWRlIHN5c3RlbSBjYWxsIHRvdGFscywgYnJva2VuIGRvd24gYnkgc3lzY2FsbC4KKyMgSWYgYSBbY29tbV0gYXJnIGlzIHNwZWNpZmllZCwgb25seSBzeXNjYWxscyBjYWxsZWQgYnkgW2NvbW1dIGFyZSBkaXNwbGF5ZWQuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwknL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKK2Zyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCitmcm9tIENvcmUgaW1wb3J0ICoKKwordXNhZ2UgPSAicGVyZiB0cmFjZSAtcyBzeXNjYWxsLWNvdW50cy1ieS1waWQucHkgW2NvbW1dXG4iOworCitmb3JfY29tbSA9IE5vbmUKKworaWYgbGVuKHN5cy5hcmd2KSA+IDI6CisJc3lzLmV4aXQodXNhZ2UpCisKK2lmIGxlbihzeXMuYXJndikgPiAxOgorCWZvcl9jb21tID0gc3lzLmFyZ3ZbMV0KKworc3lzY2FsbHMgPSBhdXRvZGljdCgpCisKK2RlZiB0cmFjZV9iZWdpbigpOgorCXBhc3MKKworZGVmIHRyYWNlX2VuZCgpOgorCXByaW50X3N5c2NhbGxfdG90YWxzKCkKKworZGVmIHJhd19zeXNjYWxsc19fc3lzX2VudGVyKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCisJY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisJaWQsIGFyZ3MpOgorCWlmIGZvcl9jb21tIGlzIG5vdCBOb25lOgorCQlpZiBjb21tb25fY29tbSAhPSBmb3JfY29tbToKKwkJCXJldHVybgorCXRyeToKKwkJc3lzY2FsbHNbY29tbW9uX2NvbW1dW2NvbW1vbl9waWRdW2lkXSArPSAxCisJZXhjZXB0IFR5cGVFcnJvcjoKKwkJc3lzY2FsbHNbY29tbW9uX2NvbW1dW2NvbW1vbl9waWRdW2lkXSA9IDEKKworZGVmIHByaW50X3N5c2NhbGxfdG90YWxzKCk6CisgICAgaWYgZm9yX2NvbW0gaXMgbm90IE5vbmU6CisJICAgIHByaW50ICJcbnN5c2NhbGwgZXZlbnRzIGZvciAlczpcblxuIiAlIChmb3JfY29tbSksCisgICAgZWxzZToKKwkgICAgcHJpbnQgIlxuc3lzY2FsbCBldmVudHMgYnkgY29tbS9waWQ6XG5cbiIsCisKKyAgICBwcmludCAiJS00MHMgICUxMHNcbiIgJSAoImNvbW0gW3BpZF0vc3lzY2FsbHMiLCAiY291bnQiKSwKKyAgICBwcmludCAiJS00MHMgICUxMHNcbiIgJSAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS0tLS0tLSIpLAorCisgICAgY29tbV9rZXlzID0gc3lzY2FsbHMua2V5cygpCisgICAgZm9yIGNvbW0gaW4gY29tbV9rZXlzOgorCSAgICBwaWRfa2V5cyA9IHN5c2NhbGxzW2NvbW1dLmtleXMoKQorCSAgICBmb3IgcGlkIGluIHBpZF9rZXlzOgorCQkgICAgcHJpbnQgIlxuJXMgWyVkXVxuIiAlIChjb21tLCBwaWQpLAorCQkgICAgaWRfa2V5cyA9IHN5c2NhbGxzW2NvbW1dW3BpZF0ua2V5cygpCisJCSAgICBmb3IgaWQsIHZhbCBpbiBzb3J0ZWQoc3lzY2FsbHNbY29tbV1bcGlkXS5pdGVyaXRlbXMoKSwgXAorCQkJCSAga2V5ID0gbGFtYmRhKGssIHYpOiAodiwgayksICByZXZlcnNlID0gVHJ1ZSk6CisJCQkgICAgcHJpbnQgIiAgJS0zOGQgICUxMGRcbiIgJSAoaWQsIHZhbCksCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3N5c2NhbGwtY291bnRzLnB5IGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTc3ZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zeXNjYWxsLWNvdW50cy5weQpAQCAtMCwwICsxLDU4IEBACisjIHN5c3RlbSBjYWxsIGNvdW50cworIyAoYykgMjAxMCwgVG9tIFphbnVzc2kgPHR6YW51c3NpQGdtYWlsLmNvbT4KKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisjCisjIERpc3BsYXlzIHN5c3RlbS13aWRlIHN5c3RlbSBjYWxsIHRvdGFscywgYnJva2VuIGRvd24gYnkgc3lzY2FsbC4KKyMgSWYgYSBbY29tbV0gYXJnIGlzIHNwZWNpZmllZCwgb25seSBzeXNjYWxscyBjYWxsZWQgYnkgW2NvbW1dIGFyZSBkaXNwbGF5ZWQuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitzeXMucGF0aC5hcHBlbmQob3MuZW52aXJvblsnUEVSRl9FWEVDX1BBVEgnXSArIFwKKwknL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpCisKK2Zyb20gcGVyZl90cmFjZV9jb250ZXh0IGltcG9ydCAqCitmcm9tIENvcmUgaW1wb3J0ICoKKwordXNhZ2UgPSAicGVyZiB0cmFjZSAtcyBzeXNjYWxsLWNvdW50cy5weSBbY29tbV1cbiI7CisKK2Zvcl9jb21tID0gTm9uZQorCitpZiBsZW4oc3lzLmFyZ3YpID4gMjoKKwlzeXMuZXhpdCh1c2FnZSkKKworaWYgbGVuKHN5cy5hcmd2KSA+IDE6CisJZm9yX2NvbW0gPSBzeXMuYXJndlsxXQorCitzeXNjYWxscyA9IGF1dG9kaWN0KCkKKworZGVmIHRyYWNlX2JlZ2luKCk6CisJcGFzcworCitkZWYgdHJhY2VfZW5kKCk6CisJcHJpbnRfc3lzY2FsbF90b3RhbHMoKQorCitkZWYgcmF3X3N5c2NhbGxzX19zeXNfZW50ZXIoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwlpZCwgYXJncyk6CisJaWYgZm9yX2NvbW0gaXMgbm90IE5vbmU6CisJCWlmIGNvbW1vbl9jb21tICE9IGZvcl9jb21tOgorCQkJcmV0dXJuCisJdHJ5OgorCQlzeXNjYWxsc1tpZF0gKz0gMQorCWV4Y2VwdCBUeXBlRXJyb3I6CisJCXN5c2NhbGxzW2lkXSA9IDEKKworZGVmIHByaW50X3N5c2NhbGxfdG90YWxzKCk6CisgICAgaWYgZm9yX2NvbW0gaXMgbm90IE5vbmU6CisJICAgIHByaW50ICJcbnN5c2NhbGwgZXZlbnRzIGZvciAlczpcblxuIiAlIChmb3JfY29tbSksCisgICAgZWxzZToKKwkgICAgcHJpbnQgIlxuc3lzY2FsbCBldmVudHM6XG5cbiIsCisKKyAgICBwcmludCAiJS00MHMgICUxMHNcbiIgJSAoImV2ZW50IiwgImNvdW50IiksCisgICAgcHJpbnQgIiUtNDBzICAlMTBzXG4iICUgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLS0tLS0tLS0tIiksCisKKyAgICBmb3IgaWQsIHZhbCBpbiBzb3J0ZWQoc3lzY2FsbHMuaXRlcml0ZW1zKCksIGtleSA9IGxhbWJkYShrLCB2KTogKHYsIGspLCBcCisJCQkJICByZXZlcnNlID0gVHJ1ZSk6CisJICAgIHByaW50ICIlLTQwZCAgJTEwZFxuIiAlIChpZCwgdmFsKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5jIGIvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5MDRiMwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5jCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBidWlsZC1pZC5jCisgKgorICogYnVpbGQtaWQgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAcmVkaGF0LmNvbT4KKyAqLworI2luY2x1ZGUgImJ1aWxkLWlkLmgiCisjaW5jbHVkZSAiZXZlbnQuaCIKKyNpbmNsdWRlICJzeW1ib2wuaCIKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworc3RhdGljIGludCBidWlsZF9pZF9fbWFya19kc29faGl0KGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoreworCXN0cnVjdCBhZGRyX2xvY2F0aW9uIGFsOworCXU4IGNwdW1vZGUgPSBldmVudC0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSzsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgZXZlbnQtPmlwLnBpZCk7CisKKwlpZiAodGhyZWFkID09IE5VTEwpIHsKKwkJcHJfZXJyKCJwcm9ibGVtIHByb2Nlc3NpbmcgJWQgZXZlbnQsIHNraXBwaW5nIGl0LlxuIiwKKwkJCWV2ZW50LT5oZWFkZXIudHlwZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwl0aHJlYWRfX2ZpbmRfYWRkcl9tYXAodGhyZWFkLCBzZXNzaW9uLCBjcHVtb2RlLCBNQVBfX0ZVTkNUSU9OLAorCQkJICAgICAgZXZlbnQtPmlwLmlwLCAmYWwpOworCisJaWYgKGFsLm1hcCAhPSBOVUxMKQorCQlhbC5tYXAtPmRzby0+aGl0ID0gMTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgYnVpbGRfaWRfX21hcmtfZHNvX2hpdF9vcHMgPSB7CisJLnNhbXBsZQk9IGJ1aWxkX2lkX19tYXJrX2Rzb19oaXQsCisJLm1tYXAJPSBldmVudF9fcHJvY2Vzc19tbWFwLAorCS5mb3JrCT0gZXZlbnRfX3Byb2Nlc3NfdGFzaywKK307CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9idWlsZC1pZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOTgxZDYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgUEVSRl9CVUlMRF9JRF9IXworI2RlZmluZSBQRVJGX0JVSUxEX0lEX0hfIDEKKworI2luY2x1ZGUgInNlc3Npb24uaCIKKworZXh0ZXJuIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBidWlsZF9pZF9fbWFya19kc29faGl0X29wczsKKworI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZGF0YV9tYXAuYyBiL3Rvb2xzL3BlcmYvdXRpbC9kYXRhX21hcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTU3YjgzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kYXRhX21hcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLSNpbmNsdWRlICJzeW1ib2wuaCIKLSNpbmNsdWRlICJ1dGlsLmgiCi0jaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJ0aHJlYWQuaCIKLSNpbmNsdWRlICJzZXNzaW9uLmgiCi0KLXN0YXRpYyBpbnQgcHJvY2Vzc19ldmVudF9zdHViKGV2ZW50X3QgKmV2ZW50IF9fdXNlZCwKLQkJCSAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24gX191c2VkKQotewotCWR1bXBfcHJpbnRmKCI6IHVuaGFuZGxlZCFcbiIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX2V2ZW50X29wc19fZmlsbF9kZWZhdWx0cyhzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKmhhbmRsZXIpCi17Ci0JaWYgKCFoYW5kbGVyLT5wcm9jZXNzX3NhbXBsZV9ldmVudCkKLQkJaGFuZGxlci0+cHJvY2Vzc19zYW1wbGVfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7Ci0JaWYgKCFoYW5kbGVyLT5wcm9jZXNzX21tYXBfZXZlbnQpCi0JCWhhbmRsZXItPnByb2Nlc3NfbW1hcF9ldmVudCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKLQlpZiAoIWhhbmRsZXItPnByb2Nlc3NfY29tbV9ldmVudCkKLQkJaGFuZGxlci0+cHJvY2Vzc19jb21tX2V2ZW50ID0gcHJvY2Vzc19ldmVudF9zdHViOwotCWlmICghaGFuZGxlci0+cHJvY2Vzc19mb3JrX2V2ZW50KQotCQloYW5kbGVyLT5wcm9jZXNzX2ZvcmtfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7Ci0JaWYgKCFoYW5kbGVyLT5wcm9jZXNzX2V4aXRfZXZlbnQpCi0JCWhhbmRsZXItPnByb2Nlc3NfZXhpdF9ldmVudCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKLQlpZiAoIWhhbmRsZXItPnByb2Nlc3NfbG9zdF9ldmVudCkKLQkJaGFuZGxlci0+cHJvY2Vzc19sb3N0X2V2ZW50ID0gcHJvY2Vzc19ldmVudF9zdHViOwotCWlmICghaGFuZGxlci0+cHJvY2Vzc19yZWFkX2V2ZW50KQotCQloYW5kbGVyLT5wcm9jZXNzX3JlYWRfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7Ci0JaWYgKCFoYW5kbGVyLT5wcm9jZXNzX3Rocm90dGxlX2V2ZW50KQotCQloYW5kbGVyLT5wcm9jZXNzX3Rocm90dGxlX2V2ZW50ID0gcHJvY2Vzc19ldmVudF9zdHViOwotCWlmICghaGFuZGxlci0+cHJvY2Vzc191bnRocm90dGxlX2V2ZW50KQotCQloYW5kbGVyLT5wcm9jZXNzX3VudGhyb3R0bGVfZXZlbnQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpldmVudF9fbmFtZVtdID0gewotCVswXQkJCSA9ICJUT1RBTCIsCi0JW1BFUkZfUkVDT1JEX01NQVBdCSA9ICJNTUFQIiwKLQlbUEVSRl9SRUNPUkRfTE9TVF0JID0gIkxPU1QiLAotCVtQRVJGX1JFQ09SRF9DT01NXQkgPSAiQ09NTSIsCi0JW1BFUkZfUkVDT1JEX0VYSVRdCSA9ICJFWElUIiwKLQlbUEVSRl9SRUNPUkRfVEhST1RUTEVdCSA9ICJUSFJPVFRMRSIsCi0JW1BFUkZfUkVDT1JEX1VOVEhST1RUTEVdID0gIlVOVEhST1RUTEUiLAotCVtQRVJGX1JFQ09SRF9GT1JLXQkgPSAiRk9SSyIsCi0JW1BFUkZfUkVDT1JEX1JFQURdCSA9ICJSRUFEIiwKLQlbUEVSRl9SRUNPUkRfU0FNUExFXQkgPSAiU0FNUExFIiwKLX07Ci0KLXVuc2lnbmVkIGxvbmcgZXZlbnRfX3RvdGFsW1BFUkZfUkVDT1JEX01BWF07Ci0KLXZvaWQgZXZlbnRfX3ByaW50X3RvdGFscyh2b2lkKQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBQRVJGX1JFQ09SRF9NQVg7ICsraSkKLQkJcHJfaW5mbygiJTEwcyBldmVudHM6ICUxMGxkXG4iLAotCQkJZXZlbnRfX25hbWVbaV0sIGV2ZW50X190b3RhbFtpXSk7Ci19Ci0KLXN0YXRpYyBpbnQgcHJvY2Vzc19ldmVudChldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkJCSBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKm9wcywKLQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQotewotCXRyYWNlX2V2ZW50KGV2ZW50KTsKLQotCWlmIChldmVudC0+aGVhZGVyLnR5cGUgPCBQRVJGX1JFQ09SRF9NQVgpIHsKLQkJZHVtcF9wcmludGYoIiVwIFslcF06IFBFUkZfUkVDT1JEXyVzIiwKLQkJCSAgICAodm9pZCAqKShvZmZzZXQgKyBoZWFkKSwKLQkJCSAgICAodm9pZCAqKShsb25nKShldmVudC0+aGVhZGVyLnNpemUpLAotCQkJICAgIGV2ZW50X19uYW1lW2V2ZW50LT5oZWFkZXIudHlwZV0pOwotCQkrK2V2ZW50X190b3RhbFswXTsKLQkJKytldmVudF9fdG90YWxbZXZlbnQtPmhlYWRlci50eXBlXTsKLQl9Ci0KLQlzd2l0Y2ggKGV2ZW50LT5oZWFkZXIudHlwZSkgewotCWNhc2UgUEVSRl9SRUNPUkRfU0FNUExFOgotCQlyZXR1cm4gb3BzLT5wcm9jZXNzX3NhbXBsZV9ldmVudChldmVudCwgc2Vzc2lvbik7Ci0JY2FzZSBQRVJGX1JFQ09SRF9NTUFQOgotCQlyZXR1cm4gb3BzLT5wcm9jZXNzX21tYXBfZXZlbnQoZXZlbnQsIHNlc3Npb24pOwotCWNhc2UgUEVSRl9SRUNPUkRfQ09NTToKLQkJcmV0dXJuIG9wcy0+cHJvY2Vzc19jb21tX2V2ZW50KGV2ZW50LCBzZXNzaW9uKTsKLQljYXNlIFBFUkZfUkVDT1JEX0ZPUks6Ci0JCXJldHVybiBvcHMtPnByb2Nlc3NfZm9ya19ldmVudChldmVudCwgc2Vzc2lvbik7Ci0JY2FzZSBQRVJGX1JFQ09SRF9FWElUOgotCQlyZXR1cm4gb3BzLT5wcm9jZXNzX2V4aXRfZXZlbnQoZXZlbnQsIHNlc3Npb24pOwotCWNhc2UgUEVSRl9SRUNPUkRfTE9TVDoKLQkJcmV0dXJuIG9wcy0+cHJvY2Vzc19sb3N0X2V2ZW50KGV2ZW50LCBzZXNzaW9uKTsKLQljYXNlIFBFUkZfUkVDT1JEX1JFQUQ6Ci0JCXJldHVybiBvcHMtPnByb2Nlc3NfcmVhZF9ldmVudChldmVudCwgc2Vzc2lvbik7Ci0JY2FzZSBQRVJGX1JFQ09SRF9USFJPVFRMRToKLQkJcmV0dXJuIG9wcy0+cHJvY2Vzc190aHJvdHRsZV9ldmVudChldmVudCwgc2Vzc2lvbik7Ci0JY2FzZSBQRVJGX1JFQ09SRF9VTlRIUk9UVExFOgotCQlyZXR1cm4gb3BzLT5wcm9jZXNzX3VudGhyb3R0bGVfZXZlbnQoZXZlbnQsIHNlc3Npb24pOwotCWRlZmF1bHQ6Ci0JCW9wcy0+dG90YWxfdW5rbm93bisrOwotCQlyZXR1cm4gLTE7Ci0JfQotfQotCi1pbnQgcGVyZl9oZWFkZXJfX3JlYWRfYnVpbGRfaWRzKGludCBpbnB1dCwgdTY0IG9mZnNldCwgdTY0IHNpemUpCi17Ci0Jc3RydWN0IGJ1aWxkX2lkX2V2ZW50IGJldjsKLQljaGFyIGZpbGVuYW1lW1BBVEhfTUFYXTsKLQl1NjQgbGltaXQgPSBvZmZzZXQgKyBzaXplOwotCWludCBlcnIgPSAtMTsKLQotCXdoaWxlIChvZmZzZXQgPCBsaW1pdCkgewotCQlzdHJ1Y3QgZHNvICpkc287Ci0JCXNzaXplX3QgbGVuOwotCi0JCWlmIChyZWFkKGlucHV0LCAmYmV2LCBzaXplb2YoYmV2KSkgIT0gc2l6ZW9mKGJldikpCi0JCQlnb3RvIG91dDsKLQotCQlsZW4gPSBiZXYuaGVhZGVyLnNpemUgLSBzaXplb2YoYmV2KTsKLQkJaWYgKHJlYWQoaW5wdXQsIGZpbGVuYW1lLCBsZW4pICE9IGxlbikKLQkJCWdvdG8gb3V0OwotCi0JCWRzbyA9IGRzb3NfX2ZpbmRuZXcoZmlsZW5hbWUpOwotCQlpZiAoZHNvICE9IE5VTEwpCi0JCQlkc29fX3NldF9idWlsZF9pZChkc28sICZiZXYuYnVpbGRfaWQpOwotCi0JCW9mZnNldCArPSBiZXYuaGVhZGVyLnNpemU7Ci0JfQotCWVyciA9IDA7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHN0cnVjdCB0aHJlYWQgKnBlcmZfc2Vzc2lvbl9fcmVnaXN0ZXJfaWRsZV90aHJlYWQoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKLXsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2VsZiwgMCk7Ci0KLQlpZiAoIXRocmVhZCB8fCB0aHJlYWRfX3NldF9jb21tKHRocmVhZCwgInN3YXBwZXIiKSkgewotCQlwcl9lcnIoInByb2JsZW0gaW5zZXJ0aW5nIGlkbGUgdGFzay5cbiIpOwotCQl0aHJlYWQgPSBOVUxMOwotCX0KLQotCXJldHVybiB0aHJlYWQ7Ci19Ci0KLWludCBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCi0JCQkJIHN0cnVjdCBwZXJmX2V2ZW50X29wcyAqb3BzKQotewotCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBoZWFkLCBzaGlmdDsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7Ci0Jc2l6ZV90CXBhZ2Vfc2l6ZTsKLQlldmVudF90ICpldmVudDsKLQl1aW50MzJfdCBzaXplOwotCWNoYXIgKmJ1ZjsKLQotCWlmIChwZXJmX3Nlc3Npb25fX3JlZ2lzdGVyX2lkbGVfdGhyZWFkKHNlbGYpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcGVyZl9ldmVudF9vcHNfX2ZpbGxfZGVmYXVsdHMob3BzKTsKLQotCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0KLQloZWFkID0gc2VsZi0+aGVhZGVyLmRhdGFfb2Zmc2V0OwotCXNlbGYtPnNhbXBsZV90eXBlID0gcGVyZl9oZWFkZXJfX3NhbXBsZV90eXBlKCZzZWxmLT5oZWFkZXIpOwotCi0JZXJyID0gLUVJTlZBTDsKLQlpZiAob3BzLT5zYW1wbGVfdHlwZV9jaGVjayAmJiBvcHMtPnNhbXBsZV90eXBlX2NoZWNrKHNlbGYpIDwgMCkKLQkJZ290byBvdXRfZXJyOwotCi0JaWYgKCFvcHMtPmZ1bGxfcGF0aHMpIHsKLQkJY2hhciBiZltQQVRIX01BWF07Ci0KLQkJaWYgKGdldGN3ZChiZiwgc2l6ZW9mKGJmKSkgPT0gTlVMTCkgewotCQkJZXJyID0gLWVycm5vOwotb3V0X2dldGN3ZF9lcnI6Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4iKTsKLQkJCWdvdG8gb3V0X2VycjsKLQkJfQotCQlzZWxmLT5jd2QgPSBzdHJkdXAoYmYpOwotCQlpZiAoc2VsZi0+Y3dkID09IE5VTEwpIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dF9nZXRjd2RfZXJyOwotCQl9Ci0JCXNlbGYtPmN3ZGxlbiA9IHN0cmxlbihzZWxmLT5jd2QpOwotCX0KLQotCXNoaWZ0ID0gcGFnZV9zaXplICogKGhlYWQgLyBwYWdlX3NpemUpOwotCW9mZnNldCArPSBzaGlmdDsKLQloZWFkIC09IHNoaWZ0OwotCi1yZW1hcDoKLQlidWYgPSBtbWFwKE5VTEwsIHBhZ2Vfc2l6ZSAqIHNlbGYtPm1tYXBfd2luZG93LCBQUk9UX1JFQUQsCi0JCSAgIE1BUF9TSEFSRUQsIHNlbGYtPmZkLCBvZmZzZXQpOwotCWlmIChidWYgPT0gTUFQX0ZBSUxFRCkgewotCQlwcl9lcnIoImZhaWxlZCB0byBtbWFwIGZpbGVcbiIpOwotCQllcnIgPSAtZXJybm87Ci0JCWdvdG8gb3V0X2VycjsKLQl9Ci0KLW1vcmU6Ci0JZXZlbnQgPSAoZXZlbnRfdCAqKShidWYgKyBoZWFkKTsKLQotCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7Ci0JaWYgKCFzaXplKQotCQlzaXplID0gODsKLQotCWlmIChoZWFkICsgZXZlbnQtPmhlYWRlci5zaXplID49IHBhZ2Vfc2l6ZSAqIHNlbGYtPm1tYXBfd2luZG93KSB7Ci0JCWludCBtdW5tYXBfcmV0OwotCi0JCXNoaWZ0ID0gcGFnZV9zaXplICogKGhlYWQgLyBwYWdlX3NpemUpOwotCi0JCW11bm1hcF9yZXQgPSBtdW5tYXAoYnVmLCBwYWdlX3NpemUgKiBzZWxmLT5tbWFwX3dpbmRvdyk7Ci0JCWFzc2VydChtdW5tYXBfcmV0ID09IDApOwotCi0JCW9mZnNldCArPSBzaGlmdDsKLQkJaGVhZCAtPSBzaGlmdDsKLQkJZ290byByZW1hcDsKLQl9Ci0KLQlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOwotCi0JZHVtcF9wcmludGYoIlxuJXAgWyVwXTogZXZlbnQ6ICVkXG4iLAotCQkJKHZvaWQgKikob2Zmc2V0ICsgaGVhZCksCi0JCQkodm9pZCAqKShsb25nKWV2ZW50LT5oZWFkZXIuc2l6ZSwKLQkJCWV2ZW50LT5oZWFkZXIudHlwZSk7Ci0KLQlpZiAoIXNpemUgfHwgcHJvY2Vzc19ldmVudChldmVudCwgc2VsZiwgb3BzLCBvZmZzZXQsIGhlYWQpIDwgMCkgewotCi0JCWR1bXBfcHJpbnRmKCIlcCBbJXBdOiBza2lwcGluZyB1bmtub3duIGhlYWRlciB0eXBlOiAlZFxuIiwKLQkJCSh2b2lkICopKG9mZnNldCArIGhlYWQpLAotCQkJKHZvaWQgKikobG9uZykoZXZlbnQtPmhlYWRlci5zaXplKSwKLQkJCWV2ZW50LT5oZWFkZXIudHlwZSk7Ci0KLQkJLyoKLQkJICogYXNzdW1lIHdlIGxvc3QgdHJhY2sgb2YgdGhlIHN0cmVhbSwgY2hlY2sgYWxpZ25tZW50LCBhbmQKLQkJICogaW5jcmVtZW50IGEgc2luZ2xlIHU2NCBpbiB0aGUgaG9wZSB0byBjYXRjaCBvbiBhZ2FpbiAnc29vbicuCi0JCSAqLwotCi0JCWlmICh1bmxpa2VseShoZWFkICYgNykpCi0JCQloZWFkICY9IH43VUxMOwotCi0JCXNpemUgPSA4OwotCX0KLQotCWhlYWQgKz0gc2l6ZTsKLQotCWlmIChvZmZzZXQgKyBoZWFkID49IHNlbGYtPmhlYWRlci5kYXRhX29mZnNldCArIHNlbGYtPmhlYWRlci5kYXRhX3NpemUpCi0JCWdvdG8gZG9uZTsKLQotCWlmIChvZmZzZXQgKyBoZWFkIDwgc2VsZi0+c2l6ZSkKLQkJZ290byBtb3JlOwotCi1kb25lOgotCWVyciA9IDA7Ci1vdXRfZXJyOgotCXJldHVybiBlcnI7Ci19CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZGVidWcuYyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCmluZGV4IDI4ZDUyMGQuLjA5MDU2MDAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgImNvbG9yLmgiCiAjaW5jbHVkZSAiZXZlbnQuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgInV0aWwuaCIKIAogaW50IHZlcmJvc2UgPSAwOwogaW50IGR1bXBfdHJhY2UgPSAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuYyBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Z2ZzLmMKaW5kZXggMDZiNzNlZS4uYTg4ZmVmYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuYworKysgYi90b29scy9wZXJmL3V0aWwvZGVidWdmcy5jCkBAIC0xMDYsMTYgKzEwNiwxNCBAQAogCXJldHVybiAwOwogfQogCi0vKiBtb3VudCB0aGUgZGVidWdmcyBzb21ld2hlcmUgKi8KKy8qIG1vdW50IHRoZSBkZWJ1Z2ZzIHNvbWV3aGVyZSBpZiBpdCdzIG5vdCBtb3VudGVkICovCiAKLWludCBkZWJ1Z2ZzX21vdW50KGNvbnN0IGNoYXIgKm1vdW50cG9pbnQpCitjaGFyICpkZWJ1Z2ZzX21vdW50KGNvbnN0IGNoYXIgKm1vdW50cG9pbnQpCiB7Ci0JY2hhciBtb3VudGNtZFsxMjhdOwotCiAJLyogc2VlIGlmIGl0J3MgYWxyZWFkeSBtb3VudGVkICovCiAJaWYgKGRlYnVnZnNfZmluZF9tb3VudHBvaW50KCkpIHsKIAkJZGVidWdmc19wcmVtb3VudGVkID0gMTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBkZWJ1Z2ZzX21vdW50cG9pbnQ7CiAJfQogCiAJLyogaWYgbm90IG1vdW50ZWQgYW5kIG5vIGFyZ3VtZW50ICovCkBAIC0xMjcsMTMgKzEyNSwxNCBAQAogCQkJbW91bnRwb2ludCA9ICIvc3lzL2tlcm5lbC9kZWJ1ZyI7CiAJfQogCisJaWYgKG1vdW50KE5VTEwsIG1vdW50cG9pbnQsICJkZWJ1Z2ZzIiwgMCwgTlVMTCkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwogCS8qIHNhdmUgdGhlIG1vdW50cG9pbnQgKi8KIAlzdHJuY3B5KGRlYnVnZnNfbW91bnRwb2ludCwgbW91bnRwb2ludCwgc2l6ZW9mKGRlYnVnZnNfbW91bnRwb2ludCkpOworCWRlYnVnZnNfZm91bmQgPSAxOwogCi0JLyogbW91bnQgaXQgKi8KLQlzbnByaW50Zihtb3VudGNtZCwgc2l6ZW9mKG1vdW50Y21kKSwKLQkJICIvYmluL21vdW50IC10IGRlYnVnZnMgZGVidWdmcyAlcyIsIG1vdW50cG9pbnQpOwotCXJldHVybiBzeXN0ZW0obW91bnRjbWQpOworCXJldHVybiBkZWJ1Z2ZzX21vdW50cG9pbnQ7CiB9CiAKIC8qIHVtb3VudCB0aGUgZGVidWdmcyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuaCBiL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Z2ZzLmgKaW5kZXggM2NkMTRmOS4uODNhMDI4NyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnZnMuaAorKysgYi90b29scy9wZXJmL3V0aWwvZGVidWdmcy5oCkBAIC0xNSw3ICsxNSw3IEBACiBleHRlcm4gY29uc3QgY2hhciAqZGVidWdmc19maW5kX21vdW50cG9pbnQodm9pZCk7CiBleHRlcm4gaW50IGRlYnVnZnNfdmFsaWRfbW91bnRwb2ludChjb25zdCBjaGFyICpkZWJ1Z2ZzKTsKIGV4dGVybiBpbnQgZGVidWdmc192YWxpZF9lbnRyeShjb25zdCBjaGFyICpwYXRoKTsKLWV4dGVybiBpbnQgZGVidWdmc19tb3VudChjb25zdCBjaGFyICptb3VudHBvaW50KTsKK2V4dGVybiBjaGFyICpkZWJ1Z2ZzX21vdW50KGNvbnN0IGNoYXIgKm1vdW50cG9pbnQpOwogZXh0ZXJuIGludCBkZWJ1Z2ZzX3Vtb3VudCh2b2lkKTsKIGV4dGVybiBpbnQgZGVidWdmc193cml0ZShjb25zdCBjaGFyICplbnRyeSwgY29uc3QgY2hhciAqdmFsdWUpOwogZXh0ZXJuIGludCBkZWJ1Z2ZzX3JlYWQoY29uc3QgY2hhciAqZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwppbmRleCA4YTllNmJhLi43MDVlYzYzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwpAQCAtOCw4ICs4LDcgQEAKICNpbmNsdWRlICJ0aHJlYWQuaCIKIAogc3RhdGljIHBpZF90IGV2ZW50X19zeW50aGVzaXplX2NvbW0ocGlkX3QgcGlkLCBpbnQgZnVsbCwKLQkJCQkgICAgaW50ICgqcHJvY2VzcykoZXZlbnRfdCAqZXZlbnQsCi0JCQkJCQkgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKSwKKwkJCQkgICAgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJCSAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCWV2ZW50X3QgZXY7CkBAIC05MSw4ICs5MCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgZXZlbnRfX3N5bnRoZXNpemVfbW1hcF9ldmVudHMocGlkX3QgcGlkLCBwaWRfdCB0Z2lkLAotCQkJCQkgaW50ICgqcHJvY2VzcykoZXZlbnRfdCAqZXZlbnQsCi0JCQkJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiksCisJCQkJCSBldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCiAJCQkJCSBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOwpAQCAtMTEyLDcgKzExMCwxMCBAQAogCXdoaWxlICgxKSB7CiAJCWNoYXIgYmZbQlVGU0laXSwgKnBiZiA9IGJmOwogCQlldmVudF90IGV2ID0gewotCQkJLmhlYWRlciA9IHsgLnR5cGUgPSBQRVJGX1JFQ09SRF9NTUFQIH0sCisJCQkuaGVhZGVyID0geworCQkJCS50eXBlID0gUEVSRl9SRUNPUkRfTU1BUCwKKwkJCQkubWlzYyA9IDAsIC8qIEp1c3QgbGlrZSB0aGUga2VybmVsLCBzZWUga2VybmVsL3BlcmZfZXZlbnQuYyBfX3BlcmZfZXZlbnRfbW1hcCAqLworCQkJIH0sCiAJCX07CiAJCWludCBuOwogCQlzaXplX3Qgc2l6ZTsKQEAgLTE1Niw5ICsxNTcsMzggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZChwaWRfdCBwaWQsCi0JCQkgICAgIGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50LAotCQkJCQkgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiksCitpbnQgZXZlbnRfX3N5bnRoZXNpemVfbW9kdWxlcyhldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoreworCXN0cnVjdCByYl9ub2RlICpuZDsKKworCWZvciAobmQgPSByYl9maXJzdCgmc2Vzc2lvbi0+a21hcHMubWFwc1tNQVBfX0ZVTkNUSU9OXSk7CisJICAgICBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCQlldmVudF90IGV2OworCQlzaXplX3Qgc2l6ZTsKKwkJc3RydWN0IG1hcCAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYXAsIHJiX25vZGUpOworCisJCWlmIChwb3MtPmRzby0+a2VybmVsKQorCQkJY29udGludWU7CisKKwkJc2l6ZSA9IEFMSUdOKHBvcy0+ZHNvLT5sb25nX25hbWVfbGVuICsgMSwgc2l6ZW9mKHU2NCkpOworCQltZW1zZXQoJmV2LCAwLCBzaXplb2YoZXYpKTsKKwkJZXYubW1hcC5oZWFkZXIubWlzYyA9IDE7IC8qIGtlcm5lbCB1c2VzIDAgZm9yIHVzZXIgc3BhY2UgbWFwcywgc2VlIGtlcm5lbC9wZXJmX2V2ZW50LmMgX19wZXJmX2V2ZW50X21tYXAgKi8KKwkJZXYubW1hcC5oZWFkZXIudHlwZSA9IFBFUkZfUkVDT1JEX01NQVA7CisJCWV2Lm1tYXAuaGVhZGVyLnNpemUgPSAoc2l6ZW9mKGV2Lm1tYXApIC0KKwkJCQkgICAgICAgIChzaXplb2YoZXYubW1hcC5maWxlbmFtZSkgLSBzaXplKSk7CisJCWV2Lm1tYXAuc3RhcnQgPSBwb3MtPnN0YXJ0OworCQlldi5tbWFwLmxlbiAgID0gcG9zLT5lbmQgLSBwb3MtPnN0YXJ0OworCisJCW1lbWNweShldi5tbWFwLmZpbGVuYW1lLCBwb3MtPmRzby0+bG9uZ19uYW1lLAorCQkgICAgICAgcG9zLT5kc28tPmxvbmdfbmFtZV9sZW4gKyAxKTsKKwkJcHJvY2VzcygmZXYsIHNlc3Npb24pOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZF90IHBpZCwgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCXBpZF90IHRnaWQgPSBldmVudF9fc3ludGhlc2l6ZV9jb21tKHBpZCwgMSwgcHJvY2Vzcywgc2Vzc2lvbik7CkBAIC0xNjcsOCArMTk3LDcgQEAKIAlyZXR1cm4gZXZlbnRfX3N5bnRoZXNpemVfbW1hcF9ldmVudHMocGlkLCB0Z2lkLCBwcm9jZXNzLCBzZXNzaW9uKTsKIH0KIAotdm9pZCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWRzKGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50LAotCQkJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKSwKK3ZvaWQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCiAJCQkgICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKIAlESVIgKnByb2M7CkBAIC0xODksNiArMjE4LDU5IEBACiAJY2xvc2VkaXIocHJvYyk7CiB9CiAKK3N0cnVjdCBwcm9jZXNzX3N5bWJvbF9hcmdzIHsKKwljb25zdCBjaGFyICpuYW1lOworCXU2NAkgICBzdGFydDsKK307CisKK3N0YXRpYyBpbnQgZmluZF9zeW1ib2xfY2Iodm9pZCAqYXJnLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyIHR5cGUsIHU2NCBzdGFydCkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19zeW1ib2xfYXJncyAqYXJncyA9IGFyZzsKKworCS8qCisJICogTXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGF0IGxlYXN0IGFuIGFsaWFzLCBhcyBpbiBQQVJJU0M2NCwgd2hlcmUgIl90ZXh0IiBpcworCSAqIGFuICdBJyB0byB0aGUgc2FtZSBhZGRyZXNzIGFzICJfc3RleHQiLgorCSAqLworCWlmICghKHN5bWJvbF90eXBlX19pc19hKHR5cGUsIE1BUF9fRlVOQ1RJT04pIHx8CisJICAgICAgdHlwZSA9PSAnQScpIHx8IHN0cmNtcChuYW1lLCBhcmdzLT5uYW1lKSkKKwkJcmV0dXJuIDA7CisKKwlhcmdzLT5zdGFydCA9IHN0YXJ0OworCXJldHVybiAxOworfQorCitpbnQgZXZlbnRfX3N5bnRoZXNpemVfa2VybmVsX21tYXAoZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAorCQkJCSAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKKwkJCQkgIGNvbnN0IGNoYXIgKnN5bWJvbF9uYW1lKQoreworCXNpemVfdCBzaXplOworCWV2ZW50X3QgZXYgPSB7CisJCS5oZWFkZXIgPSB7CisJCQkudHlwZSA9IFBFUkZfUkVDT1JEX01NQVAsCisJCQkubWlzYyA9IDEsIC8qIGtlcm5lbCB1c2VzIDAgZm9yIHVzZXIgc3BhY2UgbWFwcywgc2VlIGtlcm5lbC9wZXJmX2V2ZW50LmMgX19wZXJmX2V2ZW50X21tYXAgKi8KKwkJfSwKKwl9OworCS8qCisJICogV2Ugc2hvdWxkIGdldCB0aGlzIGZyb20gL3N5cy9rZXJuZWwvc2VjdGlvbnMvLnRleHQsIGJ1dCB0aWxsIHRoYXQgaXMKKwkgKiBhdmFpbGFibGUgdXNlIHRoaXMsIGFuZCBhZnRlciBpdCBpcyB1c2UgdGhpcyBhcyBhIGZhbGxiYWNrIGZvciBvbGRlcgorCSAqIGtlcm5lbHMuCisJICovCisJc3RydWN0IHByb2Nlc3Nfc3ltYm9sX2FyZ3MgYXJncyA9IHsgLm5hbWUgPSBzeW1ib2xfbmFtZSwgfTsKKworCWlmIChrYWxsc3ltc19fcGFyc2UoIi9wcm9jL2thbGxzeW1zIiwgJmFyZ3MsIGZpbmRfc3ltYm9sX2NiKSA8PSAwKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXNpemUgPSBzbnByaW50Zihldi5tbWFwLmZpbGVuYW1lLCBzaXplb2YoZXYubW1hcC5maWxlbmFtZSksCisJCQkiW2tlcm5lbC5rYWxsc3ltcy4lc10iLCBzeW1ib2xfbmFtZSkgKyAxOworCXNpemUgPSBBTElHTihzaXplLCBzaXplb2YodTY0KSk7CisJZXYubW1hcC5oZWFkZXIuc2l6ZSA9IChzaXplb2YoZXYubW1hcCkgLSAoc2l6ZW9mKGV2Lm1tYXAuZmlsZW5hbWUpIC0gc2l6ZSkpOworCWV2Lm1tYXAucGdvZmYgPSBhcmdzLnN0YXJ0OworCWV2Lm1tYXAuc3RhcnQgPSBzZXNzaW9uLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0tPnN0YXJ0OworCWV2Lm1tYXAubGVuICAgPSBzZXNzaW9uLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0tPmVuZCAtIGV2Lm1tYXAuc3RhcnQgOworCisJcmV0dXJuIHByb2Nlc3MoJmV2LCBzZXNzaW9uKTsKK30KKwogc3RhdGljIHZvaWQgdGhyZWFkX19jb21tX2FkanVzdChzdHJ1Y3QgdGhyZWFkICpzZWxmKQogewogCWNoYXIgKmNvbW0gPSBzZWxmLT5jb21tOwpAQCAtMjQwLDIyICszMjIsODggQEAKIAogaW50IGV2ZW50X19wcm9jZXNzX21tYXAoZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgc2VsZi0+bW1hcC5waWQpOwotCXN0cnVjdCBtYXAgKm1hcCA9IG1hcF9fbmV3KCZzZWxmLT5tbWFwLCBNQVBfX0ZVTkNUSU9OLAotCQkJCSAgIHNlc3Npb24tPmN3ZCwgc2Vzc2lvbi0+Y3dkbGVuKTsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CisJc3RydWN0IG1hcCAqbWFwOwogCi0JZHVtcF9wcmludGYoIiAlZC8lZDogWyVwKCVwKSBAICVwXTogJXNcbiIsCi0JCSAgICBzZWxmLT5tbWFwLnBpZCwgc2VsZi0+bW1hcC50aWQsCi0JCSAgICAodm9pZCAqKShsb25nKXNlbGYtPm1tYXAuc3RhcnQsCi0JCSAgICAodm9pZCAqKShsb25nKXNlbGYtPm1tYXAubGVuLAotCQkgICAgKHZvaWQgKikobG9uZylzZWxmLT5tbWFwLnBnb2ZmLAotCQkgICAgc2VsZi0+bW1hcC5maWxlbmFtZSk7CisJZHVtcF9wcmludGYoIiAlZC8lZDogWyUjTHgoJSNMeCkgQCAlI0x4XTogJXNcbiIsCisJCSAgICBzZWxmLT5tbWFwLnBpZCwgc2VsZi0+bW1hcC50aWQsIHNlbGYtPm1tYXAuc3RhcnQsCisJCSAgICBzZWxmLT5tbWFwLmxlbiwgc2VsZi0+bW1hcC5wZ29mZiwgc2VsZi0+bW1hcC5maWxlbmFtZSk7CisKKwlpZiAoc2VsZi0+bW1hcC5waWQgPT0gMCkgeworCQlzdGF0aWMgY29uc3QgY2hhciBrbW1hcF9wcmVmaXhbXSA9ICJba2VybmVsLmthbGxzeW1zLiI7CisKKwkJaWYgKHNlbGYtPm1tYXAuZmlsZW5hbWVbMF0gPT0gJy8nKSB7CisJCQljaGFyIHNob3J0X21vZHVsZV9uYW1lWzEwMjRdOworCQkJY2hhciAqbmFtZSA9IHN0cnJjaHIoc2VsZi0+bW1hcC5maWxlbmFtZSwgJy8nKSwgKmRvdDsKKworCQkJaWYgKG5hbWUgPT0gTlVMTCkKKwkJCQlnb3RvIG91dF9wcm9ibGVtOworCisJCQkrK25hbWU7IC8qIHNraXAgLyAqLworCQkJZG90ID0gc3RycmNocihuYW1lLCAnLicpOworCQkJaWYgKGRvdCA9PSBOVUxMKQorCQkJCWdvdG8gb3V0X3Byb2JsZW07CisKKwkJCXNucHJpbnRmKHNob3J0X21vZHVsZV9uYW1lLCBzaXplb2Yoc2hvcnRfbW9kdWxlX25hbWUpLAorCQkJCSAiWyUuKnNdIiwgKGludCkoZG90IC0gbmFtZSksIG5hbWUpOworCQkJc3RyeGZyY2hhcihzaG9ydF9tb2R1bGVfbmFtZSwgJy0nLCAnXycpOworCisJCQltYXAgPSBwZXJmX3Nlc3Npb25fX25ld19tb2R1bGVfbWFwKHNlc3Npb24sCisJCQkJCQkJICAgc2VsZi0+bW1hcC5zdGFydCwKKwkJCQkJCQkgICBzZWxmLT5tbWFwLmZpbGVuYW1lKTsKKwkJCWlmIChtYXAgPT0gTlVMTCkKKwkJCQlnb3RvIG91dF9wcm9ibGVtOworCisJCQluYW1lID0gc3RyZHVwKHNob3J0X21vZHVsZV9uYW1lKTsKKwkJCWlmIChuYW1lID09IE5VTEwpCisJCQkJZ290byBvdXRfcHJvYmxlbTsKKworCQkJbWFwLT5kc28tPnNob3J0X25hbWUgPSBuYW1lOworCQkJbWFwLT5lbmQgPSBtYXAtPnN0YXJ0ICsgc2VsZi0+bW1hcC5sZW47CisJCX0gZWxzZSBpZiAobWVtY21wKHNlbGYtPm1tYXAuZmlsZW5hbWUsIGttbWFwX3ByZWZpeCwKKwkJCQlzaXplb2Yoa21tYXBfcHJlZml4KSAtIDEpID09IDApIHsKKwkJCWNvbnN0IGNoYXIgKnN5bWJvbF9uYW1lID0gKHNlbGYtPm1tYXAuZmlsZW5hbWUgKworCQkJCQkJICAgc2l6ZW9mKGttbWFwX3ByZWZpeCkgLSAxKTsKKwkJCS8qCisJCQkgKiBTaG91bGQgYmUgdGhlcmUgYWxyZWFkeSwgZnJvbSB0aGUgYnVpbGQtaWQgdGFibGUgaW4KKwkJCSAqIHRoZSBoZWFkZXIuCisJCQkgKi8KKwkJCXN0cnVjdCBkc28gKmtlcm5lbCA9IF9fZHNvc19fZmluZG5ldygmZHNvc19fa2VybmVsLAorCQkJCQkJCSAgICAgIltrZXJuZWwua2FsbHN5bXNdIik7CisJCQlpZiAoa2VybmVsID09IE5VTEwpCisJCQkJZ290byBvdXRfcHJvYmxlbTsKKworCQkJa2VybmVsLT5rZXJuZWwgPSAxOworCQkJaWYgKF9fcGVyZl9zZXNzaW9uX19jcmVhdGVfa2VybmVsX21hcHMoc2Vzc2lvbiwga2VybmVsKSA8IDApCisJCQkJZ290byBvdXRfcHJvYmxlbTsKKworCQkJc2Vzc2lvbi0+dm1saW51eF9tYXBzW01BUF9fRlVOQ1RJT05dLT5zdGFydCA9IHNlbGYtPm1tYXAuc3RhcnQ7CisJCQlzZXNzaW9uLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0tPmVuZCAgID0gc2VsZi0+bW1hcC5zdGFydCArIHNlbGYtPm1tYXAubGVuOworCQkJLyoKKwkJCSAqIEJlIGEgYml0IHBhcmFub2lkIGhlcmUsIHNvbWUgcGVyZi5kYXRhIGZpbGUgY2FtZSB3aXRoCisJCQkgKiBhIHplcm8gc2l6ZWQgc3ludGhlc2l6ZWQgTU1BUCBldmVudCBmb3IgdGhlIGtlcm5lbC4KKwkJCSAqLworCQkJaWYgKHNlc3Npb24tPnZtbGludXhfbWFwc1tNQVBfX0ZVTkNUSU9OXS0+ZW5kID09IDApCisJCQkJc2Vzc2lvbi0+dm1saW51eF9tYXBzW01BUF9fRlVOQ1RJT05dLT5lbmQgPSB+MFVMOworCisJCQlwZXJmX3Nlc3Npb25fX3NldF9rYWxsc3ltc19yZWZfcmVsb2Nfc3ltKHNlc3Npb24sIHN5bWJvbF9uYW1lLAorCQkJCQkJCQkgc2VsZi0+bW1hcC5wZ29mZik7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlc3Npb24sIHNlbGYtPm1tYXAucGlkKTsKKwltYXAgPSBtYXBfX25ldygmc2VsZi0+bW1hcCwgTUFQX19GVU5DVElPTiwKKwkJICAgICAgIHNlc3Npb24tPmN3ZCwgc2Vzc2lvbi0+Y3dkbGVuKTsKIAogCWlmICh0aHJlYWQgPT0gTlVMTCB8fCBtYXAgPT0gTlVMTCkKLQkJZHVtcF9wcmludGYoInByb2JsZW0gcHJvY2Vzc2luZyBQRVJGX1JFQ09SRF9NTUFQLCBza2lwcGluZyBldmVudC5cbiIpOwotCWVsc2UKLQkJdGhyZWFkX19pbnNlcnRfbWFwKHRocmVhZCwgbWFwKTsKKwkJZ290byBvdXRfcHJvYmxlbTsKIAorCXRocmVhZF9faW5zZXJ0X21hcCh0aHJlYWQsIG1hcCk7CisJcmV0dXJuIDA7CisKK291dF9wcm9ibGVtOgorCWR1bXBfcHJpbnRmKCJwcm9ibGVtIHByb2Nlc3NpbmcgUEVSRl9SRUNPUkRfTU1BUCwgc2tpcHBpbmcgZXZlbnQuXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg0LDExICs0MzIsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCB0aHJlYWRfX2ZpbmRfYWRkcl9sb2NhdGlvbihzdHJ1Y3QgdGhyZWFkICpzZWxmLAotCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIHU4IGNwdW1vZGUsCi0JCQkJZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKLQkJCQlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsCi0JCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKK3ZvaWQgdGhyZWFkX19maW5kX2FkZHJfbWFwKHN0cnVjdCB0aHJlYWQgKnNlbGYsCisJCQkgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCB1OCBjcHVtb2RlLAorCQkJICAgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKKwkJCSAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCkKIHsKIAlzdHJ1Y3QgbWFwX2dyb3VwcyAqbWcgPSAmc2VsZi0+bWc7CiAKQEAgLTMwMyw3ICs0NTAsNiBAQAogCWVsc2UgewogCQlhbC0+bGV2ZWwgPSAnSCc7CiAJCWFsLT5tYXAgPSBOVUxMOwotCQlhbC0+c3ltID0gTlVMTDsKIAkJcmV0dXJuOwogCX0KIHRyeV9hZ2FpbjoKQEAgLTMyMiwxMSArNDY4LDIxIEBACiAJCQltZyA9ICZzZXNzaW9uLT5rbWFwczsKIAkJCWdvdG8gdHJ5X2FnYWluOwogCQl9Ci0JCWFsLT5zeW0gPSBOVUxMOwotCX0gZWxzZSB7CisJfSBlbHNlCiAJCWFsLT5hZGRyID0gYWwtPm1hcC0+bWFwX2lwKGFsLT5tYXAsIGFsLT5hZGRyKTsKLQkJYWwtPnN5bSA9IG1hcF9fZmluZF9zeW1ib2woYWwtPm1hcCwgc2Vzc2lvbiwgYWwtPmFkZHIsIGZpbHRlcik7Ci0JfQorfQorCit2b2lkIHRocmVhZF9fZmluZF9hZGRyX2xvY2F0aW9uKHN0cnVjdCB0aHJlYWQgKnNlbGYsCisJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgdTggY3B1bW9kZSwKKwkJCQllbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAorCQkJCXN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCwKKwkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQoreworCXRocmVhZF9fZmluZF9hZGRyX21hcChzZWxmLCBzZXNzaW9uLCBjcHVtb2RlLCB0eXBlLCBhZGRyLCBhbCk7CisJaWYgKGFsLT5tYXAgIT0gTlVMTCkKKwkJYWwtPnN5bSA9IG1hcF9fZmluZF9zeW1ib2woYWwtPm1hcCwgYWwtPmFkZHIsIGZpbHRlcik7CisJZWxzZQorCQlhbC0+c3ltID0gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgZHNvX19jYWxjX2NvbF93aWR0aChzdHJ1Y3QgZHNvICpzZWxmKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmggYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaAppbmRleCA2OTBhOTZkLi41MGE3MTMyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaApAQCAtMSwxMCArMSwxMCBAQAogI2lmbmRlZiBfX1BFUkZfUkVDT1JEX0gKICNkZWZpbmUgX19QRVJGX1JFQ09SRF9ICiAKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKwogI2luY2x1ZGUgIi4uL3BlcmYuaCIKLSNpbmNsdWRlICJ1dGlsLmgiCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgIm1hcC5oIgogCiAvKgogICogUEVSRl9TQU1QTEVfSVAgfCBQRVJGX1NBTVBMRV9USUQgfCAqCkBAIC0xMDEsNzQgKzEwMSwxOSBAQAogCiB2b2lkIGV2ZW50X19wcmludF90b3RhbHModm9pZCk7CiAKLWVudW0gbWFwX3R5cGUgewotCU1BUF9fRlVOQ1RJT04gPSAwLAotCU1BUF9fVkFSSUFCTEUsCi19OwotCi0jZGVmaW5lIE1BUF9fTlJfVFlQRVMgKE1BUF9fVkFSSUFCTEUgKyAxKQotCi1zdHJ1Y3QgbWFwIHsKLQl1bmlvbiB7Ci0JCXN0cnVjdCByYl9ub2RlCXJiX25vZGU7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQl9OwotCXU2NAkJCXN0YXJ0OwotCXU2NAkJCWVuZDsKLQllbnVtIG1hcF90eXBlCQl0eXBlOwotCXU2NAkJCXBnb2ZmOwotCXU2NAkJCSgqbWFwX2lwKShzdHJ1Y3QgbWFwICosIHU2NCk7Ci0JdTY0CQkJKCp1bm1hcF9pcCkoc3RydWN0IG1hcCAqLCB1NjQpOwotCXN0cnVjdCBkc28JCSpkc287Ci19OwotCi1zdGF0aWMgaW5saW5lIHU2NCBtYXBfX21hcF9pcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBpcCkKLXsKLQlyZXR1cm4gaXAgLSBtYXAtPnN0YXJ0ICsgbWFwLT5wZ29mZjsKLX0KLQotc3RhdGljIGlubGluZSB1NjQgbWFwX191bm1hcF9pcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBpcCkKLXsKLQlyZXR1cm4gaXAgKyBtYXAtPnN0YXJ0IC0gbWFwLT5wZ29mZjsKLX0KLQotc3RhdGljIGlubGluZSB1NjQgaWRlbnRpdHlfX21hcF9pcChzdHJ1Y3QgbWFwICptYXAgX191c2VkLCB1NjQgaXApCi17Ci0JcmV0dXJuIGlwOwotfQotCi1zdHJ1Y3Qgc3ltYm9sOwotCi10eXBlZGVmIGludCAoKnN5bWJvbF9maWx0ZXJfdCkoc3RydWN0IG1hcCAqbWFwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOwotCi12b2lkIG1hcF9faW5pdChzdHJ1Y3QgbWFwICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsCi0JICAgICAgIHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHBnb2ZmLCBzdHJ1Y3QgZHNvICpkc28pOwotc3RydWN0IG1hcCAqbWFwX19uZXcoc3RydWN0IG1tYXBfZXZlbnQgKmV2ZW50LCBlbnVtIG1hcF90eXBlLAotCQkgICAgIGNoYXIgKmN3ZCwgaW50IGN3ZGxlbik7Ci12b2lkIG1hcF9fZGVsZXRlKHN0cnVjdCBtYXAgKnNlbGYpOwotc3RydWN0IG1hcCAqbWFwX19jbG9uZShzdHJ1Y3QgbWFwICpzZWxmKTsKLWludCBtYXBfX292ZXJsYXAoc3RydWN0IG1hcCAqbCwgc3RydWN0IG1hcCAqcik7Ci1zaXplX3QgbWFwX19mcHJpbnRmKHN0cnVjdCBtYXAgKnNlbGYsIEZJTEUgKmZwKTsKLQogc3RydWN0IHBlcmZfc2Vzc2lvbjsKIAotaW50IG1hcF9fbG9hZChzdHJ1Y3QgbWFwICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCSAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwotc3RydWN0IHN5bWJvbCAqbWFwX19maW5kX3N5bWJvbChzdHJ1Y3QgbWFwICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCQkJCXU2NCBhZGRyLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKLXN0cnVjdCBzeW1ib2wgKm1hcF9fZmluZF9zeW1ib2xfYnlfbmFtZShzdHJ1Y3QgbWFwICpzZWxmLCBjb25zdCBjaGFyICpuYW1lLAotCQkJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCQkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKLXZvaWQgbWFwX19maXh1cF9zdGFydChzdHJ1Y3QgbWFwICpzZWxmKTsKLXZvaWQgbWFwX19maXh1cF9lbmQoc3RydWN0IG1hcCAqc2VsZik7Cit0eXBlZGVmIGludCAoKmV2ZW50X19oYW5kbGVyX3QpKGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIAotaW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZChwaWRfdCBwaWQsCi0JCQkgICAgIGludCAoKnByb2Nlc3MpKGV2ZW50X3QgKmV2ZW50LAotCQkJCQkgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiksCitpbnQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZF90IHBpZCwgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKLXZvaWQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhpbnQgKCpwcm9jZXNzKShldmVudF90ICpldmVudCwKLQkJCQkJICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiksCit2b2lkIGV2ZW50X19zeW50aGVzaXplX3RocmVhZHMoZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJICAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOworaW50IGV2ZW50X19zeW50aGVzaXplX2tlcm5lbF9tbWFwKGV2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKKwkJCQkgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCQkJICBjb25zdCBjaGFyICpzeW1ib2xfbmFtZSk7CitpbnQgZXZlbnRfX3N5bnRoZXNpemVfbW9kdWxlcyhldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIAogaW50IGV2ZW50X19wcm9jZXNzX2NvbW0oZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiBpbnQgZXZlbnRfX3Byb2Nlc3NfbG9zdChldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwppbmRleCA4YTBiY2E1Li42YzlhYTE2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCkBAIC0xLDggKzEsMTIgQEAKKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKKwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpbmNsdWRlICJ1dGlsLmgiCiAjaW5jbHVkZSAiaGVhZGVyLmgiCkBAIC0xMDUsMjQgKzEwOSwyOCBAQAogc3RhdGljIGludCBldmVudF9jb3VudDsKIHN0YXRpYyBzdHJ1Y3QgcGVyZl90cmFjZV9ldmVudF90eXBlICpldmVudHM7CiAKLXZvaWQgcGVyZl9oZWFkZXJfX3B1c2hfZXZlbnQodTY0IGlkLCBjb25zdCBjaGFyICpuYW1lKQoraW50IHBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KHU2NCBpZCwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlpZiAoc3RybGVuKG5hbWUpID4gTUFYX0VWRU5UX05BTUUpCiAJCXByX3dhcm5pbmcoIkV2ZW50ICVzIHdpbGwgYmUgdHJ1bmNhdGVkXG4iLCBuYW1lKTsKIAogCWlmICghZXZlbnRzKSB7CiAJCWV2ZW50cyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHBlcmZfdHJhY2VfZXZlbnRfdHlwZSkpOwotCQlpZiAoIWV2ZW50cykKLQkJCWRpZSgibm9tZW0iKTsKKwkJaWYgKGV2ZW50cyA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CiAJfSBlbHNlIHsKLQkJZXZlbnRzID0gcmVhbGxvYyhldmVudHMsIChldmVudF9jb3VudCArIDEpICogc2l6ZW9mKHN0cnVjdCBwZXJmX3RyYWNlX2V2ZW50X3R5cGUpKTsKLQkJaWYgKCFldmVudHMpCi0JCQlkaWUoIm5vbWVtIik7CisJCXN0cnVjdCBwZXJmX3RyYWNlX2V2ZW50X3R5cGUgKm5ldmVudHM7CisKKwkJbmV2ZW50cyA9IHJlYWxsb2MoZXZlbnRzLCAoZXZlbnRfY291bnQgKyAxKSAqIHNpemVvZigqZXZlbnRzKSk7CisJCWlmIChuZXZlbnRzID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZXZlbnRzID0gbmV2ZW50czsKIAl9CiAJbWVtc2V0KCZldmVudHNbZXZlbnRfY291bnRdLCAwLCBzaXplb2Yoc3RydWN0IHBlcmZfdHJhY2VfZXZlbnRfdHlwZSkpOwogCWV2ZW50c1tldmVudF9jb3VudF0uZXZlbnRfaWQgPSBpZDsKIAlzdHJuY3B5KGV2ZW50c1tldmVudF9jb3VudF0ubmFtZSwgbmFtZSwgTUFYX0VWRU5UX05BTUUgLSAxKTsKIAlldmVudF9jb3VudCsrOworCXJldHVybiAwOwogfQogCiBjaGFyICpwZXJmX2hlYWRlcl9fZmluZF9ldmVudCh1NjQgaWQpCkBAIC0xNjksMzEgKzE3Nyw0OCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBpbnQgZmQpCi17Ci0jZGVmaW5lIE5BTUVfQUxJR04JNjQKLQlzdHJ1Y3QgZHNvICpwb3M7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgemVyb19idWZbTkFNRV9BTElHTl07CisjZGVmaW5lIE5BTUVfQUxJR04gNjQKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKSB7CitzdGF0aWMgaW50IHdyaXRlX3BhZGRlZChpbnQgZmQsIGNvbnN0IHZvaWQgKmJmLCBzaXplX3QgY291bnQsCisJCQlzaXplX3QgY291bnRfYWxpZ25lZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciB6ZXJvX2J1ZltOQU1FX0FMSUdOXTsKKwlpbnQgZXJyID0gZG9fd3JpdGUoZmQsIGJmLCBjb3VudCk7CisKKwlpZiAoIWVycikKKwkJZXJyID0gZG9fd3JpdGUoZmQsIHplcm9fYnVmLCBjb3VudF9hbGlnbmVkIC0gY291bnQpOworCisJcmV0dXJuIGVycjsKK30KKworI2RlZmluZSBkc29zX19mb3JfZWFjaF93aXRoX2J1aWxkX2lkKHBvcywgaGVhZCkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKQlcCisJCWlmICghcG9zLT5oYXNfYnVpbGRfaWQpCQlcCisJCQljb250aW51ZTsJCVwKKwkJZWxzZQorCitzdGF0aWMgaW50IF9fZHNvc19fd3JpdGVfYnVpbGRpZF90YWJsZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCB1MTYgbWlzYywgaW50IGZkKQoreworCXN0cnVjdCBkc28gKnBvczsKKworCWRzb3NfX2Zvcl9lYWNoX3dpdGhfYnVpbGRfaWQocG9zLCBoZWFkKSB7CiAJCWludCBlcnI7CiAJCXN0cnVjdCBidWlsZF9pZF9ldmVudCBiOwogCQlzaXplX3QgbGVuOwogCi0JCWlmICghcG9zLT5oYXNfYnVpbGRfaWQpCisJCWlmICghcG9zLT5oaXQpCiAJCQljb250aW51ZTsKIAkJbGVuID0gcG9zLT5sb25nX25hbWVfbGVuICsgMTsKIAkJbGVuID0gQUxJR04obGVuLCBOQU1FX0FMSUdOKTsKIAkJbWVtc2V0KCZiLCAwLCBzaXplb2YoYikpOwogCQltZW1jcHkoJmIuYnVpbGRfaWQsIHBvcy0+YnVpbGRfaWQsIHNpemVvZihwb3MtPmJ1aWxkX2lkKSk7CisJCWIuaGVhZGVyLm1pc2MgPSBtaXNjOwogCQliLmhlYWRlci5zaXplID0gc2l6ZW9mKGIpICsgbGVuOwogCQllcnIgPSBkb193cml0ZShmZCwgJmIsIHNpemVvZihiKSk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKLQkJZXJyID0gZG9fd3JpdGUoZmQsIHBvcy0+bG9uZ19uYW1lLCBwb3MtPmxvbmdfbmFtZV9sZW4gKyAxKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCQllcnIgPSBkb193cml0ZShmZCwgemVyb19idWYsIGxlbiAtIHBvcy0+bG9uZ19uYW1lX2xlbiAtIDEpOworCQllcnIgPSB3cml0ZV9wYWRkZWQoZmQsIHBvcy0+bG9uZ19uYW1lLAorCQkJCSAgIHBvcy0+bG9uZ19uYW1lX2xlbiArIDEsIGxlbik7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0yMDMsMTIgKzIyOCwxNDMgQEAKIAogc3RhdGljIGludCBkc29zX193cml0ZV9idWlsZGlkX3RhYmxlKGludCBmZCkKIHsKLQlpbnQgZXJyID0gX19kc29zX193cml0ZV9idWlsZGlkX3RhYmxlKCZkc29zX19rZXJuZWwsIGZkKTsKKwlpbnQgZXJyID0gX19kc29zX193cml0ZV9idWlsZGlkX3RhYmxlKCZkc29zX19rZXJuZWwsCisJCQkJCSAgICAgIFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMLCBmZCk7CiAJaWYgKGVyciA9PSAwKQotCQllcnIgPSBfX2Rzb3NfX3dyaXRlX2J1aWxkaWRfdGFibGUoJmRzb3NfX3VzZXIsIGZkKTsKKwkJZXJyID0gX19kc29zX193cml0ZV9idWlsZGlkX3RhYmxlKCZkc29zX191c2VyLAorCQkJCQkJICBQRVJGX1JFQ09SRF9NSVNDX1VTRVIsIGZkKTsKIAlyZXR1cm4gZXJyOwogfQogCitpbnQgYnVpbGRfaWRfY2FjaGVfX2FkZF9zKGNvbnN0IGNoYXIgKnNidWlsZF9pZCwgY29uc3QgY2hhciAqZGVidWdkaXIsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfa2FsbHN5bXMpCit7CisJY29uc3Qgc2l6ZV90IHNpemUgPSBQQVRIX01BWDsKKwljaGFyICpmaWxlbmFtZSA9IG1hbGxvYyhzaXplKSwKKwkgICAgICpsaW5rbmFtZSA9IG1hbGxvYyhzaXplKSwgKnRhcmdldG5hbWU7CisJaW50IGxlbiwgZXJyID0gLTE7CisKKwlpZiAoZmlsZW5hbWUgPT0gTlVMTCB8fCBsaW5rbmFtZSA9PSBOVUxMKQorCQlnb3RvIG91dF9mcmVlOworCisJbGVuID0gc25wcmludGYoZmlsZW5hbWUsIHNpemUsICIlcyVzJXMiLAorCQkgICAgICAgZGVidWdkaXIsIGlzX2thbGxzeW1zID8gIi8iIDogIiIsIG5hbWUpOworCWlmIChta2Rpcl9wKGZpbGVuYW1lLCAwNzU1KSkKKwkJZ290byBvdXRfZnJlZTsKKworCXNucHJpbnRmKGZpbGVuYW1lICsgbGVuLCBzaXplb2YoZmlsZW5hbWUpIC0gbGVuLCAiLyVzIiwgc2J1aWxkX2lkKTsKKworCWlmIChhY2Nlc3MoZmlsZW5hbWUsIEZfT0spKSB7CisJCWlmIChpc19rYWxsc3ltcykgeworCQkJIGlmIChjb3B5ZmlsZSgiL3Byb2Mva2FsbHN5bXMiLCBmaWxlbmFtZSkpCisJCQkJZ290byBvdXRfZnJlZTsKKwkJfSBlbHNlIGlmIChsaW5rKG5hbWUsIGZpbGVuYW1lKSAmJiBjb3B5ZmlsZShuYW1lLCBmaWxlbmFtZSkpCisJCQlnb3RvIG91dF9mcmVlOworCX0KKworCWxlbiA9IHNucHJpbnRmKGxpbmtuYW1lLCBzaXplLCAiJXMvLmJ1aWxkLWlkLyUuMnMiLAorCQkgICAgICAgZGVidWdkaXIsIHNidWlsZF9pZCk7CisKKwlpZiAoYWNjZXNzKGxpbmtuYW1lLCBYX09LKSAmJiBta2Rpcl9wKGxpbmtuYW1lLCAwNzU1KSkKKwkJZ290byBvdXRfZnJlZTsKKworCXNucHJpbnRmKGxpbmtuYW1lICsgbGVuLCBzaXplIC0gbGVuLCAiLyVzIiwgc2J1aWxkX2lkICsgMik7CisJdGFyZ2V0bmFtZSA9IGZpbGVuYW1lICsgc3RybGVuKGRlYnVnZGlyKSAtIDU7CisJbWVtY3B5KHRhcmdldG5hbWUsICIuLi8uLiIsIDUpOworCisJaWYgKHN5bWxpbmsodGFyZ2V0bmFtZSwgbGlua25hbWUpID09IDApCisJCWVyciA9IDA7CitvdXRfZnJlZToKKwlmcmVlKGZpbGVuYW1lKTsKKwlmcmVlKGxpbmtuYW1lKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJ1aWxkX2lkX2NhY2hlX19hZGRfYihjb25zdCB1OCAqYnVpbGRfaWQsIHNpemVfdCBidWlsZF9pZF9zaXplLAorCQkJCSBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZWJ1Z2RpciwKKwkJCQkgYm9vbCBpc19rYWxsc3ltcykKK3sKKwljaGFyIHNidWlsZF9pZFtCVUlMRF9JRF9TSVpFICogMiArIDFdOworCisJYnVpbGRfaWRfX3NwcmludGYoYnVpbGRfaWQsIGJ1aWxkX2lkX3NpemUsIHNidWlsZF9pZCk7CisKKwlyZXR1cm4gYnVpbGRfaWRfY2FjaGVfX2FkZF9zKHNidWlsZF9pZCwgZGVidWdkaXIsIG5hbWUsIGlzX2thbGxzeW1zKTsKK30KKworaW50IGJ1aWxkX2lkX2NhY2hlX19yZW1vdmVfcyhjb25zdCBjaGFyICpzYnVpbGRfaWQsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKQoreworCWNvbnN0IHNpemVfdCBzaXplID0gUEFUSF9NQVg7CisJY2hhciAqZmlsZW5hbWUgPSBtYWxsb2Moc2l6ZSksCisJICAgICAqbGlua25hbWUgPSBtYWxsb2Moc2l6ZSk7CisJaW50IGVyciA9IC0xOworCisJaWYgKGZpbGVuYW1lID09IE5VTEwgfHwgbGlua25hbWUgPT0gTlVMTCkKKwkJZ290byBvdXRfZnJlZTsKKworCXNucHJpbnRmKGxpbmtuYW1lLCBzaXplLCAiJXMvLmJ1aWxkLWlkLyUuMnMvJXMiLAorCQkgZGVidWdkaXIsIHNidWlsZF9pZCwgc2J1aWxkX2lkICsgMik7CisKKwlpZiAoYWNjZXNzKGxpbmtuYW1lLCBGX09LKSkKKwkJZ290byBvdXRfZnJlZTsKKworCWlmIChyZWFkbGluayhsaW5rbmFtZSwgZmlsZW5hbWUsIHNpemUpIDwgMCkKKwkJZ290byBvdXRfZnJlZTsKKworCWlmICh1bmxpbmsobGlua25hbWUpKQorCQlnb3RvIG91dF9mcmVlOworCisJLyoKKwkgKiBTaW5jZSB0aGUgbGluayBpcyByZWxhdGl2ZSwgd2UgbXVzdCBtYWtlIGl0IGFic29sdXRlOgorCSAqLworCXNucHJpbnRmKGxpbmtuYW1lLCBzaXplLCAiJXMvLmJ1aWxkLWlkLyUuMnMvJXMiLAorCQkgZGVidWdkaXIsIHNidWlsZF9pZCwgZmlsZW5hbWUpOworCisJaWYgKHVubGluayhsaW5rbmFtZSkpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwllcnIgPSAwOworb3V0X2ZyZWU6CisJZnJlZShmaWxlbmFtZSk7CisJZnJlZShsaW5rbmFtZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBkc29fX2NhY2hlX2J1aWxkX2lkKHN0cnVjdCBkc28gKnNlbGYsIGNvbnN0IGNoYXIgKmRlYnVnZGlyKQoreworCWJvb2wgaXNfa2FsbHN5bXMgPSBzZWxmLT5rZXJuZWwgJiYgc2VsZi0+bG9uZ19uYW1lWzBdICE9ICcvJzsKKworCXJldHVybiBidWlsZF9pZF9jYWNoZV9fYWRkX2Ioc2VsZi0+YnVpbGRfaWQsIHNpemVvZihzZWxmLT5idWlsZF9pZCksCisJCQkJICAgICBzZWxmLT5sb25nX25hbWUsIGRlYnVnZGlyLCBpc19rYWxsc3ltcyk7Cit9CisKK3N0YXRpYyBpbnQgX19kc29zX19jYWNoZV9idWlsZF9pZHMoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgY29uc3QgY2hhciAqZGVidWdkaXIpCit7CisJc3RydWN0IGRzbyAqcG9zOworCWludCBlcnIgPSAwOworCisJZHNvc19fZm9yX2VhY2hfd2l0aF9idWlsZF9pZChwb3MsIGhlYWQpCisJCWlmIChkc29fX2NhY2hlX2J1aWxkX2lkKHBvcywgZGVidWdkaXIpKQorCQkJZXJyID0gLTE7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGRzb3NfX2NhY2hlX2J1aWxkX2lkcyh2b2lkKQoreworCWludCBlcnJfa2VybmVsLCBlcnJfdXNlcjsKKwljaGFyIGRlYnVnZGlyW1BBVEhfTUFYXTsKKworCXNucHJpbnRmKGRlYnVnZGlyLCBzaXplb2YoZGVidWdkaXIpLCAiJXMvJXMiLCBnZXRlbnYoIkhPTUUiKSwKKwkJIERFQlVHX0NBQ0hFX0RJUik7CisKKwlpZiAobWtkaXIoZGVidWdkaXIsIDA3NTUpICE9IDAgJiYgZXJybm8gIT0gRUVYSVNUKQorCQlyZXR1cm4gLTE7CisKKwllcnJfa2VybmVsID0gX19kc29zX19jYWNoZV9idWlsZF9pZHMoJmRzb3NfX2tlcm5lbCwgZGVidWdkaXIpOworCWVycl91c2VyICAgPSBfX2Rzb3NfX2NhY2hlX2J1aWxkX2lkcygmZHNvc19fdXNlciwgZGVidWdkaXIpOworCXJldHVybiBlcnJfa2VybmVsIHx8IGVycl91c2VyID8gLTEgOiAwOworfQorCiBzdGF0aWMgaW50IHBlcmZfaGVhZGVyX19hZGRzX3dyaXRlKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwgaW50IGZkKQogewogCWludCBucl9zZWN0aW9uczsKQEAgLTIxNyw3ICszNzMsNyBAQAogCXU2NCBzZWNfc3RhcnQ7CiAJaW50IGlkeCA9IDAsIGVycjsKIAotCWlmIChkc29zX19yZWFkX2J1aWxkX2lkcygpKQorCWlmIChkc29zX19yZWFkX2J1aWxkX2lkcyh0cnVlKSkKIAkJcGVyZl9oZWFkZXJfX3NldF9mZWF0KHNlbGYsIEhFQURFUl9CVUlMRF9JRCk7CiAKIAlucl9zZWN0aW9ucyA9IGJpdG1hcF93ZWlnaHQoc2VsZi0+YWRkc19mZWF0dXJlcywgSEVBREVSX0ZFQVRfQklUUyk7CkBAIC0yNTcsNyArNDEzLDkgQEAKIAkJCXByX2RlYnVnKCJmYWlsZWQgdG8gd3JpdGUgYnVpbGRpZCB0YWJsZVxuIik7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9Ci0JCWJ1aWxkaWRfc2VjLT5zaXplID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKSAtIGJ1aWxkaWRfc2VjLT5vZmZzZXQ7CisJCWJ1aWxkaWRfc2VjLT5zaXplID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKSAtCisJCQkJCSAgYnVpbGRpZF9zZWMtPm9mZnNldDsKKwkJZHNvc19fY2FjaGVfYnVpbGRfaWRzKCk7CiAJfQogCiAJbHNlZWsoZmQsIHNlY19zdGFydCwgU0VFS19TRVQpOwpAQCAtMzYwLDMwICs1MTgsNDMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZG9fcmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCitzdGF0aWMgaW50IGRvX3JlYWQoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBzaXplKQogewogCXdoaWxlIChzaXplKSB7CiAJCWludCByZXQgPSByZWFkKGZkLCBidWYsIHNpemUpOwogCi0JCWlmIChyZXQgPCAwKQotCQkJZGllKCJmYWlsZWQgdG8gcmVhZCIpOwotCQlpZiAocmV0ID09IDApCi0JCQlkaWUoImZhaWxlZCB0byByZWFkOiBtaXNzaW5nIGRhdGEiKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJcmV0dXJuIC0xOwogCiAJCXNpemUgLT0gcmV0OwogCQlidWYgKz0gcmV0OwogCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBlcmZfaGVhZGVyX19nZXRidWZmZXI2NChzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsCisJCQkJICAgIGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoZG9fcmVhZChmZCwgYnVmLCBzaXplKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHNlbGYtPm5lZWRzX3N3YXApCisJCW1lbV9ic3dhcF82NChidWYsIHNpemUpOworCisJcmV0dXJuIDA7CiB9CiAKIGludCBwZXJmX2hlYWRlcl9fcHJvY2Vzc19zZWN0aW9ucyhzdHJ1Y3QgcGVyZl9oZWFkZXIgKnNlbGYsIGludCBmZCwKIAkJCQkgIGludCAoKnByb2Nlc3MpKHN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbiAqc2VsZiwKKwkJCQkJCSBzdHJ1Y3QgcGVyZl9oZWFkZXIgKnBoLAogCQkJCQkJIGludCBmZWF0LCBpbnQgZmQpKQogewogCXN0cnVjdCBwZXJmX2ZpbGVfc2VjdGlvbiAqZmVhdF9zZWM7CiAJaW50IG5yX3NlY3Rpb25zOwogCWludCBzZWNfc2l6ZTsKIAlpbnQgaWR4ID0gMDsKLQlpbnQgZXJyID0gMCwgZmVhdCA9IDE7CisJaW50IGVyciA9IC0xLCBmZWF0ID0gMTsKIAogCW5yX3NlY3Rpb25zID0gYml0bWFwX3dlaWdodChzZWxmLT5hZGRzX2ZlYXR1cmVzLCBIRUFERVJfRkVBVF9CSVRTKTsKIAlpZiAoIW5yX3NlY3Rpb25zKQpAQCAtMzk3LDMzICs1NjgsNDUgQEAKIAogCWxzZWVrKGZkLCBzZWxmLT5kYXRhX29mZnNldCArIHNlbGYtPmRhdGFfc2l6ZSwgU0VFS19TRVQpOwogCi0JZG9fcmVhZChmZCwgZmVhdF9zZWMsIHNlY19zaXplKTsKKwlpZiAocGVyZl9oZWFkZXJfX2dldGJ1ZmZlcjY0KHNlbGYsIGZkLCBmZWF0X3NlYywgc2VjX3NpemUpKQorCQlnb3RvIG91dF9mcmVlOwogCisJZXJyID0gMDsKIAl3aGlsZSAoaWR4IDwgbnJfc2VjdGlvbnMgJiYgZmVhdCA8IEhFQURFUl9MQVNUX0ZFQVRVUkUpIHsKIAkJaWYgKHBlcmZfaGVhZGVyX19oYXNfZmVhdChzZWxmLCBmZWF0KSkgewogCQkJc3RydWN0IHBlcmZfZmlsZV9zZWN0aW9uICpzZWMgPSAmZmVhdF9zZWNbaWR4KytdOwogCi0JCQllcnIgPSBwcm9jZXNzKHNlYywgZmVhdCwgZmQpOworCQkJZXJyID0gcHJvY2VzcyhzZWMsIHNlbGYsIGZlYXQsIGZkKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCWJyZWFrOwogCQl9CiAJCSsrZmVhdDsKIAl9Ci0KK291dF9mcmVlOgogCWZyZWUoZmVhdF9zZWMpOwogCXJldHVybiBlcnI7Ci19OworfQogCiBpbnQgcGVyZl9maWxlX2hlYWRlcl9fcmVhZChzdHJ1Y3QgcGVyZl9maWxlX2hlYWRlciAqc2VsZiwKIAkJCSAgIHN0cnVjdCBwZXJmX2hlYWRlciAqcGgsIGludCBmZCkKIHsKIAlsc2VlayhmZCwgMCwgU0VFS19TRVQpOwotCWRvX3JlYWQoZmQsIHNlbGYsIHNpemVvZigqc2VsZikpOwogCi0JaWYgKHNlbGYtPm1hZ2ljICAgICAhPSBQRVJGX01BR0lDIHx8Ci0JICAgIHNlbGYtPmF0dHJfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHBlcmZfZmlsZV9hdHRyKSkKKwlpZiAoZG9fcmVhZChmZCwgc2VsZiwgc2l6ZW9mKCpzZWxmKSkgfHwKKwkgICAgbWVtY21wKCZzZWxmLT5tYWdpYywgX19wZXJmX21hZ2ljLCBzaXplb2Yoc2VsZi0+bWFnaWMpKSkKIAkJcmV0dXJuIC0xOwogCisJaWYgKHNlbGYtPmF0dHJfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHBlcmZfZmlsZV9hdHRyKSkgeworCQl1NjQgYXR0cl9zaXplID0gYnN3YXBfNjQoc2VsZi0+YXR0cl9zaXplKTsKKworCQlpZiAoYXR0cl9zaXplICE9IHNpemVvZihzdHJ1Y3QgcGVyZl9maWxlX2F0dHIpKQorCQkJcmV0dXJuIC0xOworCisJCW1lbV9ic3dhcF82NChzZWxmLCBvZmZzZXRvZihzdHJ1Y3QgcGVyZl9maWxlX2hlYWRlciwKKwkJCQkJICAgIGFkZHNfZmVhdHVyZXMpKTsKKwkJcGgtPm5lZWRzX3N3YXAgPSB0cnVlOworCX0KKwogCWlmIChzZWxmLT5zaXplICE9IHNpemVvZigqc2VsZikpIHsKIAkJLyogU3VwcG9ydCB0aGUgcHJldmlvdXMgZm9ybWF0ICovCiAJCWlmIChzZWxmLT5zaXplID09IG9mZnNldG9mKHR5cGVvZigqc2VsZiksIGFkZHNfZmVhdHVyZXMpKQpAQCAtNDMzLDE5ICs2MTYsMzEgQEAKIAl9CiAKIAltZW1jcHkoJnBoLT5hZGRzX2ZlYXR1cmVzLCAmc2VsZi0+YWRkc19mZWF0dXJlcywKLQkgICAgICAgc2l6ZW9mKHNlbGYtPmFkZHNfZmVhdHVyZXMpKTsKKwkgICAgICAgc2l6ZW9mKHBoLT5hZGRzX2ZlYXR1cmVzKSk7CisJLyoKKwkgKiBGSVhNRTogaGFjayB0aGF0IGFzc3VtZXMgdGhhdCBpZiB3ZSBuZWVkIHN3YXAgdGhlIHBlcmYuZGF0YSBmaWxlCisJICogbWF5IGJlIGNvbWluZyBmcm9tIGFuIGFyY2ggd2l0aCBhIGRpZmZlcmVudCB3b3JkLXNpemUsIGVyZ28gZGlmZmVyZW50CisJICogREVGSU5FX0JJVE1BUCBmb3JtYXQsIGludmVzdGlnYXRlIG1vcmUgbGF0ZXIsIGJ1dCBmb3Igbm93IGl0cyBtb3N0bHkKKwkgKiBzYWZlIHRvIGFzc3VtZSB0aGF0IHdlIGhhdmUgYSBidWlsZC1pZCBzZWN0aW9uLiBUcmFjZSBmaWxlcyBwcm9iYWJseQorCSAqIGhhdmUgc2V2ZXJhbCBvdGhlciBpc3N1ZXMgaW4gdGhpcyByZWFsbSBhbnl3YXkuLi4KKwkgKi8KKwlpZiAocGgtPm5lZWRzX3N3YXApIHsKKwkJbWVtc2V0KCZwaC0+YWRkc19mZWF0dXJlcywgMCwgc2l6ZW9mKHBoLT5hZGRzX2ZlYXR1cmVzKSk7CisJCXBlcmZfaGVhZGVyX19zZXRfZmVhdChwaCwgSEVBREVSX0JVSUxEX0lEKTsKKwl9CiAKIAlwaC0+ZXZlbnRfb2Zmc2V0ID0gc2VsZi0+ZXZlbnRfdHlwZXMub2Zmc2V0OwotCXBoLT5ldmVudF9zaXplCSA9IHNlbGYtPmV2ZW50X3R5cGVzLnNpemU7Ci0JcGgtPmRhdGFfb2Zmc2V0CSA9IHNlbGYtPmRhdGEub2Zmc2V0OworCXBoLT5ldmVudF9zaXplICAgPSBzZWxmLT5ldmVudF90eXBlcy5zaXplOworCXBoLT5kYXRhX29mZnNldCAgPSBzZWxmLT5kYXRhLm9mZnNldDsKIAlwaC0+ZGF0YV9zaXplCSA9IHNlbGYtPmRhdGEuc2l6ZTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwZXJmX2ZpbGVfc2VjdGlvbl9fcHJvY2VzcyhzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24gKnNlbGYsCisJCQkJICAgICAgc3RydWN0IHBlcmZfaGVhZGVyICpwaCwKIAkJCQkgICAgICBpbnQgZmVhdCwgaW50IGZkKQogewotCWlmIChsc2VlayhmZCwgc2VsZi0+b2Zmc2V0LCBTRUVLX1NFVCkgPCAwKSB7CisJaWYgKGxzZWVrKGZkLCBzZWxmLT5vZmZzZXQsIFNFRUtfU0VUKSA9PSAob2ZmX3QpLTEpIHsKIAkJcHJfZGVidWcoIkZhaWxlZCB0byBsc2VlayB0byAlTGQgb2Zmc2V0IGZvciBmZWF0dXJlICVkLCAiCiAJCQkgImNvbnRpbnVpbmcuLi5cbiIsIHNlbGYtPm9mZnNldCwgZmVhdCk7CiAJCXJldHVybiAwOwpAQCAtNDU3LDcgKzY1Miw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBIRUFERVJfQlVJTERfSUQ6Ci0JCWlmIChwZXJmX2hlYWRlcl9fcmVhZF9idWlsZF9pZHMoZmQsIHNlbGYtPm9mZnNldCwgc2VsZi0+c2l6ZSkpCisJCWlmIChwZXJmX2hlYWRlcl9fcmVhZF9idWlsZF9pZHMocGgsIGZkLCBzZWxmLT5vZmZzZXQsIHNlbGYtPnNpemUpKQogCQkJcHJfZGVidWcoIkZhaWxlZCB0byByZWFkIGJ1aWxkaWRzLCBjb250aW51aW5nLi4uXG4iKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTQ2OSw3ICs2NjQsNyBAQAogCiBpbnQgcGVyZl9oZWFkZXJfX3JlYWQoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLCBpbnQgZmQpCiB7Ci0Jc3RydWN0IHBlcmZfZmlsZV9oZWFkZXIgZl9oZWFkZXI7CisJc3RydWN0IHBlcmZfZmlsZV9oZWFkZXIJZl9oZWFkZXI7CiAJc3RydWN0IHBlcmZfZmlsZV9hdHRyCWZfYXR0cjsKIAl1NjQJCQlmX2lkOwogCWludCBucl9hdHRycywgbnJfaWRzLCBpLCBqOwpAQCAtNDg2LDcgKzY4MSw5IEBACiAJCXN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICphdHRyOwogCQlvZmZfdCB0bXA7CiAKLQkJZG9fcmVhZChmZCwgJmZfYXR0ciwgc2l6ZW9mKGZfYXR0cikpOworCQlpZiAocGVyZl9oZWFkZXJfX2dldGJ1ZmZlcjY0KHNlbGYsIGZkLCAmZl9hdHRyLCBzaXplb2YoZl9hdHRyKSkpCisJCQlnb3RvIG91dF9lcnJubzsKKwogCQl0bXAgPSBsc2VlayhmZCwgMCwgU0VFS19DVVIpOwogCiAJCWF0dHIgPSBwZXJmX2hlYWRlcl9hdHRyX19uZXcoJmZfYXR0ci5hdHRyKTsKQEAgLTQ5Nyw3ICs2OTQsOCBAQAogCQlsc2VlayhmZCwgZl9hdHRyLmlkcy5vZmZzZXQsIFNFRUtfU0VUKTsKIAogCQlmb3IgKGogPSAwOyBqIDwgbnJfaWRzOyBqKyspIHsKLQkJCWRvX3JlYWQoZmQsICZmX2lkLCBzaXplb2YoZl9pZCkpOworCQkJaWYgKHBlcmZfaGVhZGVyX19nZXRidWZmZXI2NChzZWxmLCBmZCwgJmZfaWQsIHNpemVvZihmX2lkKSkpCisJCQkJZ290byBvdXRfZXJybm87CiAKIAkJCWlmIChwZXJmX2hlYWRlcl9hdHRyX19hZGRfaWQoYXR0ciwgZl9pZCkgPCAwKSB7CiAJCQkJcGVyZl9oZWFkZXJfYXR0cl9fZGVsZXRlKGF0dHIpOwpAQCAtNTE3LDcgKzcxNSw5IEBACiAJCWV2ZW50cyA9IG1hbGxvYyhmX2hlYWRlci5ldmVudF90eXBlcy5zaXplKTsKIAkJaWYgKGV2ZW50cyA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWRvX3JlYWQoZmQsIGV2ZW50cywgZl9oZWFkZXIuZXZlbnRfdHlwZXMuc2l6ZSk7CisJCWlmIChwZXJmX2hlYWRlcl9fZ2V0YnVmZmVyNjQoc2VsZiwgZmQsIGV2ZW50cywKKwkJCQkJICAgICBmX2hlYWRlci5ldmVudF90eXBlcy5zaXplKSkKKwkJCWdvdG8gb3V0X2Vycm5vOwogCQlldmVudF9jb3VudCA9ICBmX2hlYWRlci5ldmVudF90eXBlcy5zaXplIC8gc2l6ZW9mKHN0cnVjdCBwZXJmX3RyYWNlX2V2ZW50X3R5cGUpOwogCX0KIApAQCAtNTI3LDYgKzcyNyw4IEBACiAKIAlzZWxmLT5mcm96ZW4gPSAxOwogCXJldHVybiAwOworb3V0X2Vycm5vOgorCXJldHVybiAtZXJybm87CiB9CiAKIHU2NCBwZXJmX2hlYWRlcl9fc2FtcGxlX3R5cGUoc3RydWN0IHBlcmZfaGVhZGVyICpoZWFkZXIpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmggYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmgKaW5kZXggZDExOGQwNS4uODJhNmFmNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuaApAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzdGRib29sLmg+CiAjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJldmVudC5oIgogCiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAKQEAgLTUyLDYgKzUzLDcgQEAKIAl1NjQJCQlkYXRhX3NpemU7CiAJdTY0CQkJZXZlbnRfb2Zmc2V0OwogCXU2NAkJCWV2ZW50X3NpemU7CisJYm9vbAkJCW5lZWRzX3N3YXA7CiAJREVDTEFSRV9CSVRNQVAoYWRkc19mZWF0dXJlcywgSEVBREVSX0ZFQVRfQklUUyk7CiB9OwogCkBAIC02NCw3ICs2Niw3IEBACiBpbnQgcGVyZl9oZWFkZXJfX2FkZF9hdHRyKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwKIAkJCSAgc3RydWN0IHBlcmZfaGVhZGVyX2F0dHIgKmF0dHIpOwogCi12b2lkIHBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KHU2NCBpZCwgY29uc3QgY2hhciAqbmFtZSk7CitpbnQgcGVyZl9oZWFkZXJfX3B1c2hfZXZlbnQodTY0IGlkLCBjb25zdCBjaGFyICpuYW1lKTsKIGNoYXIgKnBlcmZfaGVhZGVyX19maW5kX2V2ZW50KHU2NCBpZCk7CiAKIHN0cnVjdCBwZXJmX2hlYWRlcl9hdHRyICpwZXJmX2hlYWRlcl9hdHRyX19uZXcoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cik7CkBAIC04MCw2ICs4MiwxMSBAQAogCiBpbnQgcGVyZl9oZWFkZXJfX3Byb2Nlc3Nfc2VjdGlvbnMoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLCBpbnQgZmQsCiAJCQkJICBpbnQgKCpwcm9jZXNzKShzdHJ1Y3QgcGVyZl9maWxlX3NlY3Rpb24gKnNlbGYsCisJCQkJCQkgc3RydWN0IHBlcmZfaGVhZGVyICpwaCwKIAkJCQkJCSBpbnQgZmVhdCwgaW50IGZkKSk7CiAKK2ludCBidWlsZF9pZF9jYWNoZV9fYWRkX3MoY29uc3QgY2hhciAqc2J1aWxkX2lkLCBjb25zdCBjaGFyICpkZWJ1Z2RpciwKKwkJCSAgY29uc3QgY2hhciAqbmFtZSwgYm9vbCBpc19rYWxsc3ltcyk7CitpbnQgYnVpbGRfaWRfY2FjaGVfX3JlbW92ZV9zKGNvbnN0IGNoYXIgKnNidWlsZF9pZCwgY29uc3QgY2hhciAqZGVidWdkaXIpOworCiAjZW5kaWYgLyogX19QRVJGX0hFQURFUl9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9oYXNoLmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9oYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAxZjU3MwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2hhc2guaApAQCAtMCwwICsxLDUgQEAKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9pbmNsdWRlL2xpbnV4L2hhc2guaCIKKworI2lmbmRlZiBQRVJGX0hBU0hfSAorI2RlZmluZSBQRVJGX0hBU0hfSAorI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDIxYzAyNzQuLmYyNjExNjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0xMDEsNSArMTAxLDYgQEAKIAllcHJpbnRmKG4sIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBwcl9kZWJ1ZzIoZm10LCAuLi4pIHByX2RlYnVnTigyLCBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgcHJfZGVidWczKGZtdCwgLi4uKSBwcl9kZWJ1Z04oMywgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pCisjZGVmaW5lIHByX2RlYnVnNChmbXQsIC4uLikgcHJfZGVidWdOKDQsIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYyBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYwppbmRleCBjNGQ1NWEwLi5lNTA5Y2Q1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvbWFwLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL21hcC5jCkBAIC01LDYgKzUsMTEgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgImRlYnVnLmgiCiAKK2NvbnN0IGNoYXIgKm1hcF90eXBlX19uYW1lW01BUF9fTlJfVFlQRVNdID0geworCVtNQVBfX0ZVTkNUSU9OXSA9ICJGdW5jdGlvbnMiLAorCVtNQVBfX1ZBUklBQkxFXSA9ICJWYXJpYWJsZXMiLAorfTsKKwogc3RhdGljIGlubGluZSBpbnQgaXNfYW5vbl9tZW1vcnkoY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAJcmV0dXJuIHN0cmNtcChmaWxlbmFtZSwgIi8vYW5vbiIpID09IDA7CkBAIC02OCw4ICs3MywxMyBAQAogCQltYXBfX2luaXQoc2VsZiwgdHlwZSwgZXZlbnQtPnN0YXJ0LCBldmVudC0+c3RhcnQgKyBldmVudC0+bGVuLAogCQkJICBldmVudC0+cGdvZmYsIGRzbyk7CiAKLQkJaWYgKHNlbGYtPmRzbyA9PSB2ZHNvIHx8IGFub24pCisJCWlmIChhbm9uKSB7CitzZXRfaWRlbnRpdHk6CiAJCQlzZWxmLT5tYXBfaXAgPSBzZWxmLT51bm1hcF9pcCA9IGlkZW50aXR5X19tYXBfaXA7CisJCX0gZWxzZSBpZiAoc3RyY21wKGZpbGVuYW1lLCAiW3Zkc29dIikgPT0gMCkgeworCQkJZHNvX19zZXRfbG9hZGVkKGRzbywgc2VsZi0+dHlwZSk7CisJCQlnb3RvIHNldF9pZGVudGl0eTsKKwkJfQogCX0KIAlyZXR1cm4gc2VsZjsKIG91dF9kZWxldGU6CkBAIC0xMDQsOCArMTE0LDcgQEAKIAogI2RlZmluZSBEU09fX0RFTEVURUQgIihkZWxldGVkKSIKIAotaW50IG1hcF9fbG9hZChzdHJ1Y3QgbWFwICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCSAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCitpbnQgbWFwX19sb2FkKHN0cnVjdCBtYXAgKnNlbGYsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CiAJY29uc3QgY2hhciAqbmFtZSA9IHNlbGYtPmRzby0+bG9uZ19uYW1lOwogCWludCBucjsKQEAgLTExMyw3ICsxMjIsNyBAQAogCWlmIChkc29fX2xvYWRlZChzZWxmLT5kc28sIHNlbGYtPnR5cGUpKQogCQlyZXR1cm4gMDsKIAotCW5yID0gZHNvX19sb2FkKHNlbGYtPmRzbywgc2VsZiwgc2Vzc2lvbiwgZmlsdGVyKTsKKwluciA9IGRzb19fbG9hZChzZWxmLT5kc28sIHNlbGYsIGZpbHRlcik7CiAJaWYgKG5yIDwgMCkgewogCQlpZiAoc2VsZi0+ZHNvLT5oYXNfYnVpbGRfaWQpIHsKIAkJCWNoYXIgc2J1aWxkX2lkW0JVSUxEX0lEX1NJWkUgKiAyICsgMV07CkBAIC0xNDQsMjQgKzE1MywyOSBAQAogCiAJCXJldHVybiAtMTsKIAl9CisJLyoKKwkgKiBPbmx5IGFwcGxpZXMgdG8gdGhlIGtlcm5lbCwgYXMgaXRzIHN5bXRhYnMgYXJlbid0IHJlbGF0aXZlIGxpa2UgdGhlCisJICogbW9kdWxlIG9uZXMuCisJICovCisJaWYgKHNlbGYtPmRzby0+a2VybmVsKQorCQltYXBfX3JlbG9jX3ZtbGludXgoc2VsZik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHN5bWJvbCAqbWFwX19maW5kX3N5bWJvbChzdHJ1Y3QgbWFwICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCQkJCXU2NCBhZGRyLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQorc3RydWN0IHN5bWJvbCAqbWFwX19maW5kX3N5bWJvbChzdHJ1Y3QgbWFwICpzZWxmLCB1NjQgYWRkciwKKwkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewotCWlmIChtYXBfX2xvYWQoc2VsZiwgc2Vzc2lvbiwgZmlsdGVyKSA8IDApCisJaWYgKG1hcF9fbG9hZChzZWxmLCBmaWx0ZXIpIDwgMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlyZXR1cm4gZHNvX19maW5kX3N5bWJvbChzZWxmLT5kc28sIHNlbGYtPnR5cGUsIGFkZHIpOwogfQogCiBzdHJ1Y3Qgc3ltYm9sICptYXBfX2ZpbmRfc3ltYm9sX2J5X25hbWUoc3RydWN0IG1hcCAqc2VsZiwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKLQlpZiAobWFwX19sb2FkKHNlbGYsIHNlc3Npb24sIGZpbHRlcikgPCAwKQorCWlmIChtYXBfX2xvYWQoc2VsZiwgZmlsdGVyKSA8IDApCiAJCXJldHVybiBOVUxMOwogCiAJaWYgKCFkc29fX3NvcnRlZF9ieV9uYW1lKHNlbGYtPmRzbywgc2VsZi0+dHlwZSkpCkBAIC0yMDEsMyArMjE1LDIzIEBACiAJcmV0dXJuIGZwcmludGYoZnAsICIgJUx4LSVMeCAlTHggJXNcbiIsCiAJCSAgICAgICBzZWxmLT5zdGFydCwgc2VsZi0+ZW5kLCBzZWxmLT5wZ29mZiwgc2VsZi0+ZHNvLT5uYW1lKTsKIH0KKworLyoKKyAqIG9iamR1bXAgd2FudHMvcmVwb3J0cyBhYnNvbHV0ZSBJUHMgZm9yIEVUX0VYRUMsIGFuZCBSSVBzIGZvciBFVF9EWU4uCisgKiBtYXAtPmRzby0+YWRqdXN0X3N5bWJvbHM9PTEgZm9yIEVUX0VYRUMtbGlrZSBjYXNlcy4KKyAqLwordTY0IG1hcF9fcmlwXzJvYmpkdW1wKHN0cnVjdCBtYXAgKm1hcCwgdTY0IHJpcCkKK3sKKwl1NjQgYWRkciA9IG1hcC0+ZHNvLT5hZGp1c3Rfc3ltYm9scyA/CisJCQltYXAtPnVubWFwX2lwKG1hcCwgcmlwKSA6CS8qIFJJUCAtPiBJUCAqLworCQkJcmlwOworCXJldHVybiBhZGRyOworfQorCit1NjQgbWFwX19vYmpkdW1wXzJpcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBhZGRyKQoreworCXU2NCBpcCA9IG1hcC0+ZHNvLT5hZGp1c3Rfc3ltYm9scyA/CisJCQlhZGRyIDoKKwkJCW1hcC0+dW5tYXBfaXAobWFwLCBhZGRyKTsJLyogUklQIC0+IElQICovCisJcmV0dXJuIGlwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21hcC5oIGIvdG9vbHMvcGVyZi91dGlsL21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NTYzNjgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvbWFwLmgKQEAgLTAsMCArMSw5NCBAQAorI2lmbmRlZiBfX1BFUkZfTUFQX0gKKyNkZWZpbmUgX19QRVJGX01BUF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitlbnVtIG1hcF90eXBlIHsKKwlNQVBfX0ZVTkNUSU9OID0gMCwKKwlNQVBfX1ZBUklBQkxFLAorfTsKKworI2RlZmluZSBNQVBfX05SX1RZUEVTIChNQVBfX1ZBUklBQkxFICsgMSkKKworZXh0ZXJuIGNvbnN0IGNoYXIgKm1hcF90eXBlX19uYW1lW01BUF9fTlJfVFlQRVNdOworCitzdHJ1Y3QgZHNvOworc3RydWN0IHJlZl9yZWxvY19zeW07CitzdHJ1Y3QgbWFwX2dyb3VwczsKKworc3RydWN0IG1hcCB7CisJdW5pb24geworCQlzdHJ1Y3QgcmJfbm9kZQlyYl9ub2RlOworCQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJfTsKKwl1NjQJCQlzdGFydDsKKwl1NjQJCQllbmQ7CisJZW51bSBtYXBfdHlwZQkJdHlwZTsKKwl1NjQJCQlwZ29mZjsKKworCS8qIGlwIC0+IGRzbyByaXAgKi8KKwl1NjQJCQkoKm1hcF9pcCkoc3RydWN0IG1hcCAqLCB1NjQpOworCS8qIGRzbyByaXAgLT4gaXAgKi8KKwl1NjQJCQkoKnVubWFwX2lwKShzdHJ1Y3QgbWFwICosIHU2NCk7CisKKwlzdHJ1Y3QgZHNvCQkqZHNvOworfTsKKworc3RydWN0IGttYXAgeworCXN0cnVjdCByZWZfcmVsb2Nfc3ltCSpyZWZfcmVsb2Nfc3ltOworCXN0cnVjdCBtYXBfZ3JvdXBzCSprbWFwczsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGttYXAgKm1hcF9fa21hcChzdHJ1Y3QgbWFwICpzZWxmKQoreworCXJldHVybiAoc3RydWN0IGttYXAgKikoc2VsZiArIDEpOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBtYXBfX21hcF9pcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBpcCkKK3sKKwlyZXR1cm4gaXAgLSBtYXAtPnN0YXJ0ICsgbWFwLT5wZ29mZjsKK30KKworc3RhdGljIGlubGluZSB1NjQgbWFwX191bm1hcF9pcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBpcCkKK3sKKwlyZXR1cm4gaXAgKyBtYXAtPnN0YXJ0IC0gbWFwLT5wZ29mZjsKK30KKworc3RhdGljIGlubGluZSB1NjQgaWRlbnRpdHlfX21hcF9pcChzdHJ1Y3QgbWFwICptYXAgX191c2VkLCB1NjQgaXApCit7CisJcmV0dXJuIGlwOworfQorCisKKy8qIHJpcC9pcCA8LT4gYWRkciBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byBgb2JqZHVtcCAtLXN0YXJ0LWFkZHJlc3M9YCAqLwordTY0IG1hcF9fcmlwXzJvYmpkdW1wKHN0cnVjdCBtYXAgKm1hcCwgdTY0IHJpcCk7Cit1NjQgbWFwX19vYmpkdW1wXzJpcChzdHJ1Y3QgbWFwICptYXAsIHU2NCBhZGRyKTsKKworc3RydWN0IHN5bWJvbDsKK3N0cnVjdCBtbWFwX2V2ZW50OworCit0eXBlZGVmIGludCAoKnN5bWJvbF9maWx0ZXJfdCkoc3RydWN0IG1hcCAqbWFwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOworCit2b2lkIG1hcF9faW5pdChzdHJ1Y3QgbWFwICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsCisJICAgICAgIHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHBnb2ZmLCBzdHJ1Y3QgZHNvICpkc28pOworc3RydWN0IG1hcCAqbWFwX19uZXcoc3RydWN0IG1tYXBfZXZlbnQgKmV2ZW50LCBlbnVtIG1hcF90eXBlLAorCQkgICAgIGNoYXIgKmN3ZCwgaW50IGN3ZGxlbik7Cit2b2lkIG1hcF9fZGVsZXRlKHN0cnVjdCBtYXAgKnNlbGYpOworc3RydWN0IG1hcCAqbWFwX19jbG9uZShzdHJ1Y3QgbWFwICpzZWxmKTsKK2ludCBtYXBfX292ZXJsYXAoc3RydWN0IG1hcCAqbCwgc3RydWN0IG1hcCAqcik7CitzaXplX3QgbWFwX19mcHJpbnRmKHN0cnVjdCBtYXAgKnNlbGYsIEZJTEUgKmZwKTsKKworaW50IG1hcF9fbG9hZChzdHJ1Y3QgbWFwICpzZWxmLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKK3N0cnVjdCBzeW1ib2wgKm1hcF9fZmluZF9zeW1ib2woc3RydWN0IG1hcCAqc2VsZiwKKwkJCQl1NjQgYWRkciwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CitzdHJ1Y3Qgc3ltYm9sICptYXBfX2ZpbmRfc3ltYm9sX2J5X25hbWUoc3RydWN0IG1hcCAqc2VsZiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7Cit2b2lkIG1hcF9fZml4dXBfc3RhcnQoc3RydWN0IG1hcCAqc2VsZik7Cit2b2lkIG1hcF9fZml4dXBfZW5kKHN0cnVjdCBtYXAgKnNlbGYpOworCit2b2lkIG1hcF9fcmVsb2Nfdm1saW51eChzdHJ1Y3QgbWFwICpzZWxmKTsKKworI2VuZGlmIC8qIF9fUEVSRl9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCmluZGV4IGU1YmMwZmIuLjA1ZDBjNWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYworKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKQEAgLTQ1MCw3ICs0NTAsOCBAQAogLyogc3lzICsgJzonICsgZXZlbnQgKyAnOicgKyBmbGFncyovCiAjZGVmaW5lIE1BWF9FVk9QVF9MRU4JKE1BWF9FVkVOVF9MRU5HVEggKiAyICsgMiArIDEyOCkKIHN0YXRpYyBlbnVtIGV2ZW50X3Jlc3VsdAotcGFyc2Vfc3Vic3lzdGVtX3RyYWNlcG9pbnRfZXZlbnQoY2hhciAqc3lzX25hbWUsIGNoYXIgKmZsYWdzKQorcGFyc2VfbXVsdGlwbGVfdHJhY2Vwb2ludF9ldmVudChjaGFyICpzeXNfbmFtZSwgY29uc3QgY2hhciAqZXZ0X2V4cCwKKwkJCQljaGFyICpmbGFncykKIHsKIAljaGFyIGV2dF9wYXRoW01BWFBBVEhMRU5dOwogCXN0cnVjdCBkaXJlbnQgKmV2dF9lbnQ7CkBAIC00NzQsNiArNDc1LDkgQEAKIAkJICAgIHx8ICFzdHJjbXAoZXZ0X2VudC0+ZF9uYW1lLCAiZmlsdGVyIikpCiAJCQljb250aW51ZTsKIAorCQlpZiAoIXN0cmdsb2JtYXRjaChldnRfZW50LT5kX25hbWUsIGV2dF9leHApKQorCQkJY29udGludWU7CisKIAkJbGVuID0gc25wcmludGYoZXZlbnRfb3B0LCBNQVhfRVZPUFRfTEVOLCAiJXM6JXMlcyVzIiwgc3lzX25hbWUsCiAJCQkgICAgICAgZXZ0X2VudC0+ZF9uYW1lLCBmbGFncyA/ICI6IiA6ICIiLAogCQkJICAgICAgIGZsYWdzID86ICIiKTsKQEAgLTUyMiw5ICs1MjYsMTAgQEAKIAlpZiAoZXZ0X2xlbmd0aCA+PSBNQVhfRVZFTlRfTEVOR1RIKQogCQlyZXR1cm4gRVZUX0ZBSUxFRDsKIAotCWlmICghc3RyY21wKGV2dF9uYW1lLCAiKiIpKSB7CisJaWYgKHN0cnBicmsoZXZ0X25hbWUsICIqPyIpKSB7CiAJCSpzdHJwID0gZXZ0X25hbWUgKyBldnRfbGVuZ3RoOwotCQlyZXR1cm4gcGFyc2Vfc3Vic3lzdGVtX3RyYWNlcG9pbnRfZXZlbnQoc3lzX25hbWUsIGZsYWdzKTsKKwkJcmV0dXJuIHBhcnNlX211bHRpcGxlX3RyYWNlcG9pbnRfZXZlbnQoc3lzX25hbWUsIGV2dF9uYW1lLAorCQkJCQkJICAgICAgIGZsYWdzKTsKIAl9IGVsc2UKIAkJcmV0dXJuIHBhcnNlX3NpbmdsZV90cmFjZXBvaW50X2V2ZW50KHN5c19uYW1lLCBldnRfbmFtZSwKIAkJCQkJCSAgICAgZXZ0X2xlbmd0aCwgZmxhZ3MsCkBAIC03NTMsMTEgKzc1OCwxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHN0b3JlX2V2ZW50X3R5cGUoY29uc3QgY2hhciAqb3JnbmFtZSkKK3N0YXRpYyBpbnQgc3RvcmVfZXZlbnRfdHlwZShjb25zdCBjaGFyICpvcmduYW1lKQogewogCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdLCAqYzsKIAlGSUxFICpmaWxlOwotCWludCBpZDsKKwlpbnQgaWQsIG47CiAKIAlzcHJpbnRmKGZpbGVuYW1lLCAiJXMvIiwgZGVidWdmc19wYXRoKTsKIAlzdHJuY2F0KGZpbGVuYW1lLCBvcmduYW1lLCBzdHJsZW4ob3JnbmFtZSkpOwpAQCAtNzY5LDExICs3NzQsMTQgQEAKIAogCWZpbGUgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKIAlpZiAoIWZpbGUpCi0JCXJldHVybjsKLQlpZiAoZnNjYW5mKGZpbGUsICIlaSIsICZpZCkgPCAxKQotCQlkaWUoImNhbm5vdCBzdG9yZSBldmVudCBJRCIpOworCQlyZXR1cm4gMDsKKwluID0gZnNjYW5mKGZpbGUsICIlaSIsICZpZCk7CiAJZmNsb3NlKGZpbGUpOwotCXBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KGlkLCBvcmduYW1lKTsKKwlpZiAobiA8IDEpIHsKKwkJcHJfZXJyKCJjYW5ub3Qgc3RvcmUgZXZlbnQgSURcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHBlcmZfaGVhZGVyX19wdXNoX2V2ZW50KGlkLCBvcmduYW1lKTsKIH0KIAogaW50IHBhcnNlX2V2ZW50cyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQgX191c2VkLCBjb25zdCBjaGFyICpzdHIsIGludCB1bnNldCBfX3VzZWQpCkBAIC03ODIsNyArNzkwLDggQEAKIAllbnVtIGV2ZW50X3Jlc3VsdCByZXQ7CiAKIAlpZiAoc3RyY2hyKHN0ciwgJzonKSkKLQkJc3RvcmVfZXZlbnRfdHlwZShzdHIpOworCQlpZiAoc3RvcmVfZXZlbnRfdHlwZShzdHIpIDwgMCkKKwkJCXJldHVybiAtMTsKIAogCWZvciAoOzspIHsKIAkJaWYgKG5yX2NvdW50ZXJzID09IE1BWF9DT1VOVEVSUykKQEAgLTgzNSwxMSArODQ0LDEyIEBACiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1tdID0gewotCSIiLAogCSJIYXJkd2FyZSBldmVudCIsCiAJIlNvZnR3YXJlIGV2ZW50IiwKIAkiVHJhY2Vwb2ludCBldmVudCIsCiAJIkhhcmR3YXJlIGNhY2hlIGV2ZW50IiwKKwkiUmF3IGhhcmR3YXJlIGV2ZW50IGRlc2NyaXB0b3IiLAorCSJIYXJkd2FyZSBicmVha3BvaW50IiwKIH07CiAKIC8qCkBAIC04NzIsNyArODgyLDcgQEAKIAkJCXNucHJpbnRmKGV2dF9wYXRoLCBNQVhQQVRITEVOLCAiJXM6JXMiLAogCQkJCSBzeXNfZGlyZW50LmRfbmFtZSwgZXZ0X2RpcmVudC5kX25hbWUpOwogCQkJcHJpbnRmKCIgICUtNDJzIFslc11cbiIsIGV2dF9wYXRoLAotCQkJCWV2ZW50X3R5cGVfZGVzY3JpcHRvcnNbUEVSRl9UWVBFX1RSQUNFUE9JTlQrMV0pOworCQkJCWV2ZW50X3R5cGVfZGVzY3JpcHRvcnNbUEVSRl9UWVBFX1RSQUNFUE9JTlRdKTsKIAkJfQogCQljbG9zZWRpcihldnRfZGlyKTsKIAl9CkBAIC04OTIsOSArOTAyLDcgQEAKIAlwcmludGYoIkxpc3Qgb2YgcHJlLWRlZmluZWQgZXZlbnRzICh0byBiZSB1c2VkIGluIC1lKTpcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXZlbnRfc3ltYm9scyk7IGkrKywgc3ltcysrKSB7Ci0JCXR5cGUgPSBzeW1zLT50eXBlICsgMTsKLQkJaWYgKHR5cGUgPj0gQVJSQVlfU0laRShldmVudF90eXBlX2Rlc2NyaXB0b3JzKSkKLQkJCXR5cGUgPSAwOworCQl0eXBlID0gc3ltcy0+dHlwZTsKIAogCQlpZiAodHlwZSAhPSBwcmV2X3R5cGUpCiAJCQlwcmludGYoIlxuIik7CkBAIC05MTksMTcgKzkyNywxOSBAQAogCQkJZm9yIChpID0gMDsgaSA8IFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWDsgaSsrKSB7CiAJCQkJcHJpbnRmKCIgICUtNDJzIFslc11cbiIsCiAJCQkJCWV2ZW50X2NhY2hlX25hbWUodHlwZSwgb3AsIGkpLAotCQkJCQlldmVudF90eXBlX2Rlc2NyaXB0b3JzWzRdKTsKKwkJCQkJZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1tQRVJGX1RZUEVfSFdfQ0FDSEVdKTsKIAkJCX0KIAkJfQogCX0KIAogCXByaW50ZigiXG4iKTsKLQlwcmludGYoIiAgJS00MnMgW3JhdyBoYXJkd2FyZSBldmVudCBkZXNjcmlwdG9yXVxuIiwKLQkJInJOTk4iKTsKKwlwcmludGYoIiAgJS00MnMgWyVzXVxuIiwKKwkJInJOTk4iLCBldmVudF90eXBlX2Rlc2NyaXB0b3JzW1BFUkZfVFlQRV9SQVddKTsKIAlwcmludGYoIlxuIik7CiAKLQlwcmludGYoIiAgJS00MnMgW2hhcmR3YXJlIGJyZWFrcG9pbnRdXG4iLCAibWVtOjxhZGRyPls6YWNjZXNzXSIpOworCXByaW50ZigiICAlLTQycyBbJXNdXG4iLAorCQkJIm1lbTo8YWRkcj5bOmFjY2Vzc10iLAorCQkJZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1tQRVJGX1RZUEVfQlJFQUtQT0lOVF0pOwogCXByaW50ZigiXG4iKTsKIAogCXByaW50X3RyYWNlcG9pbnRfZXZlbnRzKCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCmluZGV4IGZkZTE3YjAuLjhmMDU2ODggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAic3RyaW5nLmgiCiAjaW5jbHVkZSAic3RybGlzdC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgogI2luY2x1ZGUgInBhcnNlLWV2ZW50cy5oIiAgLyogRm9yIGRlYnVnZnNfcGF0aCAqLwogI2luY2x1ZGUgInByb2JlLWV2ZW50LmgiCiAKQEAgLTYyLDYgKzY0LDQyIEBACiAJcmV0dXJuIHJldDsKIH0KIAordm9pZCBwYXJzZV9saW5lX3JhbmdlX2Rlc2MoY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3QgbGluZV9yYW5nZSAqbHIpCit7CisJY29uc3QgY2hhciAqcHRyOworCWNoYXIgKnRtcDsKKwkvKgorCSAqIDxTeW50YXg+CisJICogU1JDOlNMTlsrTlVNfC1FTE5dCisJICogRlVOQ1s6U0xOWytOVU18LUVMTl1dCisJICovCisJcHRyID0gc3RyY2hyKGFyZywgJzonKTsKKwlpZiAocHRyKSB7CisJCWxyLT5zdGFydCA9ICh1bnNpZ25lZCBpbnQpc3RydG91bChwdHIgKyAxLCAmdG1wLCAwKTsKKwkJaWYgKCp0bXAgPT0gJysnKQorCQkJbHItPmVuZCA9IGxyLT5zdGFydCArICh1bnNpZ25lZCBpbnQpc3RydG91bCh0bXAgKyAxLAorCQkJCQkJCQkgICAgJnRtcCwgMCk7CisJCWVsc2UgaWYgKCp0bXAgPT0gJy0nKQorCQkJbHItPmVuZCA9ICh1bnNpZ25lZCBpbnQpc3RydG91bCh0bXAgKyAxLCAmdG1wLCAwKTsKKwkJZWxzZQorCQkJbHItPmVuZCA9IDA7CisJCXByX2RlYnVnKCJMaW5lIHJhbmdlIGlzICV1IHRvICV1XG4iLCBsci0+c3RhcnQsIGxyLT5lbmQpOworCQlpZiAobHItPmVuZCAmJiBsci0+c3RhcnQgPiBsci0+ZW5kKQorCQkJc2VtYW50aWNfZXJyb3IoIlN0YXJ0IGxpbmUgbXVzdCBiZSBzbWFsbGVyIgorCQkJCSAgICAgICAiIHRoYW4gZW5kIGxpbmUuIik7CisJCWlmICgqdG1wICE9ICdcMCcpCisJCQlzZW1hbnRpY19lcnJvcigiVGFpbGluZyB3aXRoIGludmFsaWQgY2hhcmFjdGVyICclZCcuIiwKKwkJCQkgICAgICAgKnRtcCk7CisJCXRtcCA9IHN0cm5kdXAoYXJnLCAocHRyIC0gYXJnKSk7CisJfSBlbHNlCisJCXRtcCA9IHN0cmR1cChhcmcpOworCisJaWYgKHN0cmNocih0bXAsICcuJykpCisJCWxyLT5maWxlID0gdG1wOworCWVsc2UKKwkJbHItPmZ1bmN0aW9uID0gdG1wOworfQorCiAvKiBDaGVjayB0aGUgbmFtZSBpcyBnb29kIGZvciBldmVudC9ncm91cCAqLwogc3RhdGljIGJvb2wgY2hlY2tfZXZlbnRfbmFtZShjb25zdCBjaGFyICpuYW1lKQogewpAQCAtMzcwLDcgKzQwOCw3IEBACiAJaWYgKHJldCA8IDApIHsKIAkJaWYgKGVycm5vID09IEVOT0VOVCkKIAkJCWRpZSgia3Byb2JlX2V2ZW50cyBmaWxlIGRvZXMgbm90IGV4aXN0IC0iCi0JCQkgICAgIiBwbGVhc2UgcmVidWlsZCB3aXRoIENPTkZJR19LUFJPQkVfVFJBQ0VSLiIpOworCQkJICAgICIgcGxlYXNlIHJlYnVpbGQgd2l0aCBDT05GSUdfS1BST0JFX0VWRU5ULiIpOwogCQllbHNlCiAJCQlkaWUoIkNvdWxkIG5vdCBvcGVuIGtwcm9iZV9ldmVudHMgZmlsZTogJXMiLAogCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CkBAIC00NTcsNiArNDk1LDggQEAKIAlzdHJ1Y3Qgc3RybGlzdCAqcmF3bGlzdDsKIAlzdHJ1Y3Qgc3RyX25vZGUgKmVudDsKIAorCXNldHVwX3BhZ2VyKCk7CisKIAltZW1zZXQoJnBwLCAwLCBzaXplb2YocHApKTsKIAlmZCA9IG9wZW5fa3Byb2JlX2V2ZW50cyhPX1JET05MWSwgMCk7CiAJcmF3bGlzdCA9IGdldF90cmFjZV9rcHJvYmVfZXZlbnRfcmF3bGlzdChmZCk7CkBAIC02NzgsMyArNzE4LDY2IEBACiAJY2xvc2UoZmQpOwogfQogCisjZGVmaW5lIExJTkVCVUZfU0laRSAyNTYKKworc3RhdGljIHZvaWQgc2hvd19vbmVfbGluZShGSUxFICpmcCwgdW5zaWduZWQgaW50IGwsIGJvb2wgc2tpcCwgYm9vbCBzaG93X251bSkKK3sKKwljaGFyIGJ1ZltMSU5FQlVGX1NJWkVdOworCWNvbnN0IGNoYXIgKmNvbG9yID0gUEVSRl9DT0xPUl9CTFVFOworCisJaWYgKGZnZXRzKGJ1ZiwgTElORUJVRl9TSVpFLCBmcCkgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKKwlpZiAoIXNraXApIHsKKwkJaWYgKHNob3dfbnVtKQorCQkJZnByaW50ZihzdGRvdXQsICIlN3UgICVzIiwgbCwgYnVmKTsKKwkJZWxzZQorCQkJY29sb3JfZnByaW50ZihzdGRvdXQsIGNvbG9yLCAiICAgICAgICAgJXMiLCBidWYpOworCX0KKworCXdoaWxlIChzdHJsZW4oYnVmKSA9PSBMSU5FQlVGX1NJWkUgLSAxICYmCisJICAgICAgIGJ1ZltMSU5FQlVGX1NJWkUgLSAyXSAhPSAnXG4nKSB7CisJCWlmIChmZ2V0cyhidWYsIExJTkVCVUZfU0laRSwgZnApID09IE5VTEwpCisJCQlnb3RvIGVycm9yOworCQlpZiAoIXNraXApIHsKKwkJCWlmIChzaG93X251bSkKKwkJCQlmcHJpbnRmKHN0ZG91dCwgIiVzIiwgYnVmKTsKKwkJCWVsc2UKKwkJCQljb2xvcl9mcHJpbnRmKHN0ZG91dCwgY29sb3IsICIlcyIsIGJ1Zik7CisJCX0KKwl9CisJcmV0dXJuOworZXJyb3I6CisJaWYgKGZlb2YoZnApKQorCQlkaWUoIlNvdXJjZSBmaWxlIGlzIHNob3J0ZXIgdGhhbiBleHBlY3RlZC4iKTsKKwllbHNlCisJCWRpZSgiRmlsZSByZWFkIGVycm9yOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Cit9CisKK3ZvaWQgc2hvd19saW5lX3JhbmdlKHN0cnVjdCBsaW5lX3JhbmdlICpscikKK3sKKwl1bnNpZ25lZCBpbnQgbCA9IDE7CisJc3RydWN0IGxpbmVfbm9kZSAqbG47CisJRklMRSAqZnA7CisKKwlzZXR1cF9wYWdlcigpOworCisJaWYgKGxyLT5mdW5jdGlvbikKKwkJZnByaW50ZihzdGRvdXQsICI8JXM6JWQ+XG4iLCBsci0+ZnVuY3Rpb24sCisJCQlsci0+c3RhcnQgLSBsci0+b2Zmc2V0KTsKKwllbHNlCisJCWZwcmludGYoc3Rkb3V0LCAiPCVzOiVkPlxuIiwgbHItPmZpbGUsIGxyLT5zdGFydCk7CisKKwlmcCA9IGZvcGVuKGxyLT5wYXRoLCAiciIpOworCWlmIChmcCA9PSBOVUxMKQorCQlkaWUoIkZhaWxlZCB0byBvcGVuICVzOiAlcyIsIGxyLT5wYXRoLCBzdHJlcnJvcihlcnJubykpOworCS8qIFNraXAgdG8gc3RhcnRpbmcgbGluZSBudW1iZXIgKi8KKwl3aGlsZSAobCA8IGxyLT5zdGFydCkKKwkJc2hvd19vbmVfbGluZShmcCwgbCsrLCB0cnVlLCBmYWxzZSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxuLCAmbHItPmxpbmVfbGlzdCwgbGlzdCkgeworCQl3aGlsZSAobG4tPmxpbmUgPiBsKQorCQkJc2hvd19vbmVfbGluZShmcCwgKGwrKykgLSBsci0+b2Zmc2V0LCBmYWxzZSwgZmFsc2UpOworCQlzaG93X29uZV9saW5lKGZwLCAobCsrKSAtIGxyLT5vZmZzZXQsIGZhbHNlLCB0cnVlKTsKKwl9CisJZmNsb3NlKGZwKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5oIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmgKaW5kZXggN2YxZDQ5OS4uNzExMjg3ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmgKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSAicHJvYmUtZmluZGVyLmgiCiAjaW5jbHVkZSAic3RybGlzdC5oIgogCitleHRlcm4gdm9pZCBwYXJzZV9saW5lX3JhbmdlX2Rlc2MoY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3QgbGluZV9yYW5nZSAqbHIpOwogZXh0ZXJuIHZvaWQgcGFyc2VfcGVyZl9wcm9iZV9ldmVudChjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwcm9iZV9wb2ludCAqcHAsCiAJCQkJICAgYm9vbCAqbmVlZF9kd2FyZik7CiBleHRlcm4gaW50IHN5bnRoZXNpemVfcGVyZl9wcm9iZV9wb2ludChzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwKTsKQEAgLTE1LDYgKzE2LDcgQEAKIAkJCQkgICAgYm9vbCBmb3JjZV9hZGQpOwogZXh0ZXJuIHZvaWQgZGVsX3RyYWNlX2twcm9iZV9ldmVudHMoc3RydWN0IHN0cmxpc3QgKmRlbGxpc3QpOwogZXh0ZXJuIHZvaWQgc2hvd19wZXJmX3Byb2JlX2V2ZW50cyh2b2lkKTsKK2V4dGVybiB2b2lkIHNob3dfbGluZV9yYW5nZShzdHJ1Y3QgbGluZV9yYW5nZSAqbHIpOwogCiAvKiBNYXhpbXVtIGluZGV4IG51bWJlciBvZiBldmVudC1uYW1lIHBvc3RmaXggKi8KICNkZWZpbmUgTUFYX0VWRU5UX0lOREVYCTEwMjQKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYwppbmRleCA0Yjg1MmMwLi4xYjIxMjRkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jCkBAIC0xNDAsNiArMTQwLDMxIEBACiAJcmV0dXJuIGZvdW5kOwogfQogCitzdGF0aWMgaW50IGN1X2dldF9maWxlbmFtZShEd2FyZl9EaWUgY3VfZGllLCBEd2FyZl9VbnNpZ25lZCBmbm8sIGNoYXIgKipidWYpCit7CisJRHdhcmZfU2lnbmVkIGNudCwgaTsKKwljaGFyICoqc3JjczsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghYnVmIHx8ICFmbm8pCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gZHdhcmZfc3JjZmlsZXMoY3VfZGllLCAmc3JjcywgJmNudCwgJl9fZHdfZXJyb3IpOworCWlmIChyZXQgPT0gRFdfRExWX09LKSB7CisJCWlmICgoRHdhcmZfVW5zaWduZWQpY250ID4gZm5vIC0gMSkgeworCQkJKmJ1ZiA9IHN0cmR1cChzcmNzW2ZubyAtIDFdKTsKKwkJCXJldCA9IDA7CisJCQlwcl9kZWJ1ZygiZm91bmQgZmlsZW5hbWU6ICVzXG4iLCAqYnVmKTsKKwkJfSBlbHNlCisJCQlyZXQgPSAtRU5PRU5UOworCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspCisJCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIHNyY3NbaV0sIERXX0RMQV9TVFJJTkcpOworCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIHNyY3MsIERXX0RMQV9MSVNUKTsKKwl9IGVsc2UKKwkJcmV0ID0gLUVJTlZBTDsKKwlyZXR1cm4gcmV0OworfQorCiAvKiBDb21wYXJlIGRpZW5hbWUgYW5kIHRuYW1lICovCiBzdGF0aWMgaW50IGRpZV9jb21wYXJlX25hbWUoRHdhcmZfRGllIGR3X2RpZSwgY29uc3QgY2hhciAqdG5hbWUpCiB7CkBAIC00MDIsMTEgKzQyNywxMSBAQAogCX0gZWxzZSBpZiAob3AgPT0gRFdfT1BfcmVneCkgewogCQlyZWduID0gbG9jLT5scl9udW1iZXI7CiAJfSBlbHNlCi0JCWRpZSgiRHdhcmZfT1AgJWQgaXMgbm90IHN1cHBvcnRlZC5cbiIsIG9wKTsKKwkJZGllKCJEd2FyZl9PUCAlZCBpcyBub3Qgc3VwcG9ydGVkLiIsIG9wKTsKIAogCXJlZ3MgPSBnZXRfYXJjaF9yZWdzdHIocmVnbik7CiAJaWYgKCFyZWdzKQotCQlkaWUoIiVsbGQgZXhjZWVkcyBtYXggcmVnaXN0ZXIgbnVtYmVyLlxuIiwgcmVnbik7CisJCWRpZSgiJWxsZCBleGNlZWRzIG1heCByZWdpc3RlciBudW1iZXIuIiwgcmVnbik7CiAKIAlpZiAoZGVyZWYpCiAJCXJldCA9IHNucHJpbnRmKHBmLT5idWYsIHBmLT5sZW4sCkBAIC00MzgsNyArNDYzLDcgQEAKIAlyZXR1cm4gOwogZXJyb3I6CiAJZGllKCJGYWlsZWQgdG8gZmluZCB0aGUgbG9jYXRpb24gb2YgJXMgYXQgdGhpcyBhZGRyZXNzLlxuIgotCSAgICAiIFBlcmhhcHMsIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQuXG4iLCBwZi0+dmFyKTsKKwkgICAgIiBQZXJoYXBzLCBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LiIsIHBmLT52YXIpOwogfQogCiBzdGF0aWMgaW50IHZhcmlhYmxlX2NhbGxiYWNrKHN0cnVjdCBkaWVfbGluayAqZGxpbmssIHZvaWQgKmRhdGEpCkBAIC00NzYsNyArNTAxLDcgQEAKIAkvKiBTZWFyY2ggY2hpbGQgZGllIGZvciBsb2NhbCB2YXJpYWJsZXMgYW5kIHBhcmFtZXRlcnMuICovCiAJcmV0ID0gc2VhcmNoX2RpZV9mcm9tX2NoaWxkcmVuKHNwX2RpZSwgdmFyaWFibGVfY2FsbGJhY2ssIHBmKTsKIAlpZiAoIXJldCkKLQkJZGllKCJGYWlsZWQgdG8gZmluZCAnJXMnIGluIHRoaXMgZnVuY3Rpb24uXG4iLCBwZi0+dmFyKTsKKwkJZGllKCJGYWlsZWQgdG8gZmluZCAnJXMnIGluIHRoaXMgZnVuY3Rpb24uIiwgcGYtPnZhcik7CiB9CiAKIC8qIEdldCBhIGZyYW1lIGJhc2Ugb24gdGhlIGFkZHJlc3MgKi8KQEAgLTU2Nyw3ICs1OTIsNyBAQAogfQogCiAvKiBGaW5kIHByb2JlIHBvaW50IGZyb20gaXRzIGxpbmUgbnVtYmVyICovCi1zdGF0aWMgdm9pZCBmaW5kX2J5X2xpbmUoc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCitzdGF0aWMgdm9pZCBmaW5kX3Byb2JlX3BvaW50X2J5X2xpbmUoc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCiB7CiAJRHdhcmZfU2lnbmVkIGNudCwgaSwgY2xtOwogCUR3YXJmX0xpbmUgKmxpbmVzOwpAQCAtNjAyLDcgKzYyNyw3IEBACiAJCXJldCA9IHNlYXJjaF9kaWVfZnJvbV9jaGlsZHJlbihwZi0+Y3VfZGllLAogCQkJCQkgICAgICAgcHJvYmVhZGRyX2NhbGxiYWNrLCBwZik7CiAJCWlmIChyZXQgPT0gMCkKLQkJCWRpZSgiUHJvYmUgcG9pbnQgaXMgbm90IGZvdW5kIGluIHN1YnByb2dyYW1zLlxuIik7CisJCQlkaWUoIlByb2JlIHBvaW50IGlzIG5vdCBmb3VuZCBpbiBzdWJwcm9ncmFtcy4iKTsKIAkJLyogQ29udGludWluZywgYmVjYXVzZSB0YXJnZXQgbGluZSBtaWdodCBiZSBpbmxpbmVkLiAqLwogCX0KIAlkd2FyZl9zcmNsaW5lc19kZWFsbG9jKF9fZHdfZGVidWcsIGxpbmVzLCBjbnQpOwpAQCAtNjI2LDcgKzY1MSw3IEBACiAJCQkJcGYtPmZubyA9IGRpZV9nZXRfZGVjbF9maWxlKGRsaW5rLT5kaWUpOwogCQkJCXBmLT5sbm8gPSBkaWVfZ2V0X2RlY2xfbGluZShkbGluay0+ZGllKQogCQkJCQkgKyBwcC0+bGluZTsKLQkJCQlmaW5kX2J5X2xpbmUocGYpOworCQkJCWZpbmRfcHJvYmVfcG9pbnRfYnlfbGluZShwZik7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCQlpZiAoZGllX2lubGluZWRfc3VicHJvZ3JhbShkbGluay0+ZGllKSkgewpAQCAtNjYxLDcgKzY4Niw3IEBACiAJCQkJICAgICFkaWVfaW5saW5lZF9zdWJwcm9ncmFtKGxrLT5kaWUpKQogCQkJCQlnb3RvIGZvdW5kOwogCQkJfQotCQkJZGllKCJGYWlsZWQgdG8gZmluZCByZWFsIHN1YnByb2dyYW0uXG4iKTsKKwkJCWRpZSgiRmFpbGVkIHRvIGZpbmQgcmVhbCBzdWJwcm9ncmFtLiIpOwogZm91bmQ6CiAJCQkvKiBHZXQgb2Zmc2V0IGZyb20gc3VicHJvZ3JhbSAqLwogCQkJcmV0ID0gZGllX3dpdGhpbl9zdWJwcm9ncmFtKGxrLT5kaWUsIHBmLT5hZGRyLCAmb2Zmcyk7CkBAIC02NzMsNyArNjk4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZmluZF9ieV9mdW5jKHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQorc3RhdGljIHZvaWQgZmluZF9wcm9iZV9wb2ludF9ieV9mdW5jKHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQogewogCXNlYXJjaF9kaWVfZnJvbV9jaGlsZHJlbihwZi0+Y3VfZGllLCBwcm9iZWZ1bmNfY2FsbGJhY2ssIHBmKTsKIH0KQEAgLTcxNCwxMCArNzM5LDEwIEBACiAJCQlpZiAocmV0ID09IERXX0RMVl9OT19FTlRSWSkKIAkJCQlwZi5jdV9iYXNlID0gMDsKIAkJCWlmIChwcC0+ZnVuY3Rpb24pCi0JCQkJZmluZF9ieV9mdW5jKCZwZik7CisJCQkJZmluZF9wcm9iZV9wb2ludF9ieV9mdW5jKCZwZik7CiAJCQllbHNlIHsKIAkJCQlwZi5sbm8gPSBwcC0+bGluZTsKLQkJCQlmaW5kX2J5X2xpbmUoJnBmKTsKKwkJCQlmaW5kX3Byb2JlX3BvaW50X2J5X2xpbmUoJnBmKTsKIAkJCX0KIAkJfQogCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIHBmLmN1X2RpZSwgRFdfRExBX0RJRSk7CkBAIC03MjgsMyArNzUzLDE1OSBAQAogCXJldHVybiBwcC0+Zm91bmQ7CiB9CiAKKworc3RhdGljIHZvaWQgbGluZV9yYW5nZV9hZGRfbGluZShzdHJ1Y3QgbGluZV9yYW5nZSAqbHIsIHVuc2lnbmVkIGludCBsaW5lKQoreworCXN0cnVjdCBsaW5lX25vZGUgKmxuOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisKKwkvKiBSZXZlcnNlIHNlYXJjaCwgYmVjYXVzZSBuZXcgbGluZSB3aWxsIGJlIHRoZSBsYXN0IG9uZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShsbiwgJmxyLT5saW5lX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGxuLT5saW5lIDwgbGluZSkgeworCQkJcCA9ICZsbi0+bGlzdDsKKwkJCWdvdG8gZm91bmQ7CisJCX0gZWxzZSBpZiAobG4tPmxpbmUgPT0gbGluZSkJLyogQWxyZWFkeSBleGlzdCAqLworCQkJcmV0dXJuIDsKKwl9CisJLyogTGlzdCBpcyBlbXB0eSwgb3IgdGhlIHNtYWxsZXN0IGVudHJ5ICovCisJcCA9ICZsci0+bGluZV9saXN0OworZm91bmQ6CisJcHJfZGVidWcoIkRlYnVnOiBhZGQgYSBsaW5lICV1XG4iLCBsaW5lKTsKKwlsbiA9IHphbGxvYyhzaXplb2Yoc3RydWN0IGxpbmVfbm9kZSkpOworCURJRV9JRihsbiA9PSBOVUxMKTsKKwlsbi0+bGluZSA9IGxpbmU7CisJSU5JVF9MSVNUX0hFQUQoJmxuLT5saXN0KTsKKwlsaXN0X2FkZCgmbG4tPmxpc3QsIHApOworfQorCisvKiBGaW5kIGxpbmUgcmFuZ2UgZnJvbSBpdHMgbGluZSBudW1iZXIgKi8KK3N0YXRpYyB2b2lkIGZpbmRfbGluZV9yYW5nZV9ieV9saW5lKHN0cnVjdCBsaW5lX2ZpbmRlciAqbGYpCit7CisJRHdhcmZfU2lnbmVkIGNudCwgaTsKKwlEd2FyZl9MaW5lICpsaW5lczsKKwlEd2FyZl9VbnNpZ25lZCBsaW5lbm8gPSAwOworCUR3YXJmX1Vuc2lnbmVkIGZubzsKKwlEd2FyZl9BZGRyIGFkZHI7CisJaW50IHJldDsKKworCXJldCA9IGR3YXJmX3NyY2xpbmVzKGxmLT5jdV9kaWUsICZsaW5lcywgJmNudCwgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQlyZXQgPSBkd2FyZl9saW5lX3NyY2ZpbGVubyhsaW5lc1tpXSwgJmZubywgJl9fZHdfZXJyb3IpOworCQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJCWlmIChmbm8gIT0gbGYtPmZubykKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IGR3YXJmX2xpbmVubyhsaW5lc1tpXSwgJmxpbmVubywgJl9fZHdfZXJyb3IpOworCQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJCWlmIChsZi0+bG5vX3MgPiBsaW5lbm8gfHwgbGYtPmxub19lIDwgbGluZW5vKQorCQkJY29udGludWU7CisKKwkJLyogRmlsdGVyIGxpbmUgaW4gdGhlIGZ1bmN0aW9uIGFkZHJlc3MgcmFuZ2UgKi8KKwkJaWYgKGxmLT5hZGRyX3MgJiYgbGYtPmFkZHJfZSkgeworCQkJcmV0ID0gZHdhcmZfbGluZWFkZHIobGluZXNbaV0sICZhZGRyLCAmX19kd19lcnJvcik7CisJCQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJCQlpZiAobGYtPmFkZHJfcyA+IGFkZHIgfHwgbGYtPmFkZHJfZSA8PSBhZGRyKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWxpbmVfcmFuZ2VfYWRkX2xpbmUobGYtPmxyLCAodW5zaWduZWQgaW50KWxpbmVubyk7CisJfQorCWR3YXJmX3NyY2xpbmVzX2RlYWxsb2MoX19kd19kZWJ1ZywgbGluZXMsIGNudCk7CisJaWYgKCFsaXN0X2VtcHR5KCZsZi0+bHItPmxpbmVfbGlzdCkpCisJCWxmLT5mb3VuZCA9IDE7Cit9CisKKy8qIFNlYXJjaCBmdW5jdGlvbiBmcm9tIGZ1bmN0aW9uIG5hbWUgKi8KK3N0YXRpYyBpbnQgbGluZWZ1bmNfY2FsbGJhY2soc3RydWN0IGRpZV9saW5rICpkbGluaywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbGluZV9maW5kZXIgKmxmID0gKHN0cnVjdCBsaW5lX2ZpbmRlciAqKWRhdGE7CisJc3RydWN0IGxpbmVfcmFuZ2UgKmxyID0gbGYtPmxyOworCUR3YXJmX0hhbGYgdGFnOworCWludCByZXQ7CisKKwlyZXQgPSBkd2FyZl90YWcoZGxpbmstPmRpZSwgJnRhZywgJl9fZHdfZXJyb3IpOworCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKKwlpZiAodGFnID09IERXX1RBR19zdWJwcm9ncmFtICYmCisJICAgIGRpZV9jb21wYXJlX25hbWUoZGxpbmstPmRpZSwgbHItPmZ1bmN0aW9uKSA9PSAwKSB7CisJCS8qIEdldCB0aGUgYWRkcmVzcyByYW5nZSBvZiB0aGlzIGZ1bmN0aW9uICovCisJCXJldCA9IGR3YXJmX2hpZ2hwYyhkbGluay0+ZGllLCAmbGYtPmFkZHJfZSwgJl9fZHdfZXJyb3IpOworCQlpZiAocmV0ID09IERXX0RMVl9PSykKKwkJCXJldCA9IGR3YXJmX2xvd3BjKGRsaW5rLT5kaWUsICZsZi0+YWRkcl9zLCAmX19kd19lcnJvcik7CisJCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKKwkJaWYgKHJldCA9PSBEV19ETFZfTk9fRU5UUlkpIHsKKwkJCWxmLT5hZGRyX3MgPSAwOworCQkJbGYtPmFkZHJfZSA9IDA7CisJCX0KKworCQlsZi0+Zm5vID0gZGllX2dldF9kZWNsX2ZpbGUoZGxpbmstPmRpZSk7CisJCWxyLT5vZmZzZXQgPSBkaWVfZ2V0X2RlY2xfbGluZShkbGluay0+ZGllKTs7CisJCWxmLT5sbm9fcyA9IGxyLT5vZmZzZXQgKyBsci0+c3RhcnQ7CisJCWlmICghbHItPmVuZCkKKwkJCWxmLT5sbm9fZSA9IChEd2FyZl9VbnNpZ25lZCktMTsKKwkJZWxzZQorCQkJbGYtPmxub19lID0gbHItPm9mZnNldCArIGxyLT5lbmQ7CisJCWxyLT5zdGFydCA9IGxmLT5sbm9fczsKKwkJbHItPmVuZCA9IGxmLT5sbm9fZTsKKwkJZmluZF9saW5lX3JhbmdlX2J5X2xpbmUobGYpOworCQkvKiBJZiB3ZSBmaW5kIGEgdGFyZ2V0IGZ1bmN0aW9uLCB0aGlzIHNob3VsZCBiZSBlbmQuICovCisJCWxmLT5mb3VuZCA9IDE7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZmluZF9saW5lX3JhbmdlX2J5X2Z1bmMoc3RydWN0IGxpbmVfZmluZGVyICpsZikKK3sKKwlzZWFyY2hfZGllX2Zyb21fY2hpbGRyZW4obGYtPmN1X2RpZSwgbGluZWZ1bmNfY2FsbGJhY2ssIGxmKTsKK30KKworaW50IGZpbmRfbGluZV9yYW5nZShpbnQgZmQsIHN0cnVjdCBsaW5lX3JhbmdlICpscikKK3sKKwlEd2FyZl9IYWxmIGFkZHJfc2l6ZSA9IDA7CisJRHdhcmZfVW5zaWduZWQgbmV4dF9jdWggPSAwOworCWludCByZXQ7CisJc3RydWN0IGxpbmVfZmluZGVyIGxmID0gey5sciA9IGxyfTsKKworCXJldCA9IGR3YXJmX2luaXQoZmQsIERXX0RMQ19SRUFELCAwLCAwLCAmX19kd19kZWJ1ZywgJl9fZHdfZXJyb3IpOworCWlmIChyZXQgIT0gRFdfRExWX09LKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXdoaWxlICghbGYuZm91bmQpIHsKKwkJLyogU2VhcmNoIENVIChDb21waWxhdGlvbiBVbml0KSAqLworCQlyZXQgPSBkd2FyZl9uZXh0X2N1X2hlYWRlcihfX2R3X2RlYnVnLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJJmFkZHJfc2l6ZSwgJm5leHRfY3VoLCAmX19kd19lcnJvcik7CisJCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKKwkJaWYgKHJldCA9PSBEV19ETFZfTk9fRU5UUlkpCisJCQlicmVhazsKKworCQkvKiBHZXQgdGhlIERJRShEZWJ1Z2dpbmcgSW5mb3JtYXRpb24gRW50cnkpIG9mIHRoaXMgQ1UgKi8KKwkJcmV0ID0gZHdhcmZfc2libGluZ29mKF9fZHdfZGVidWcsIDAsICZsZi5jdV9kaWUsICZfX2R3X2Vycm9yKTsKKwkJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCisJCS8qIENoZWNrIGlmIHRhcmdldCBmaWxlIGlzIGluY2x1ZGVkLiAqLworCQlpZiAobHItPmZpbGUpCisJCQlsZi5mbm8gPSBjdV9maW5kX2ZpbGVubyhsZi5jdV9kaWUsIGxyLT5maWxlKTsKKworCQlpZiAoIWxyLT5maWxlIHx8IGxmLmZubykgeworCQkJaWYgKGxyLT5mdW5jdGlvbikKKwkJCQlmaW5kX2xpbmVfcmFuZ2VfYnlfZnVuYygmbGYpOworCQkJZWxzZSB7CisJCQkJbGYubG5vX3MgPSBsci0+c3RhcnQ7CisJCQkJaWYgKCFsci0+ZW5kKQorCQkJCQlsZi5sbm9fZSA9IChEd2FyZl9VbnNpZ25lZCktMTsKKwkJCQllbHNlCisJCQkJCWxmLmxub19lID0gbHItPmVuZDsKKwkJCQlmaW5kX2xpbmVfcmFuZ2VfYnlfbGluZSgmbGYpOworCQkJfQorCQkJLyogR2V0IHRoZSByZWFsIGZpbGUgcGF0aCAqLworCQkJaWYgKGxmLmZvdW5kKQorCQkJCWN1X2dldF9maWxlbmFtZShsZi5jdV9kaWUsIGxmLmZubywgJmxyLT5wYXRoKTsKKwkJfQorCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIGxmLmN1X2RpZSwgRFdfRExBX0RJRSk7CisJfQorCXJldCA9IGR3YXJmX2ZpbmlzaChfX2R3X2RlYnVnLCAmX19kd19lcnJvcik7CisJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCXJldHVybiBsZi5mb3VuZDsKK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCmluZGV4IGE0MDg2YWFkLi45NzJiMzg2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfUFJPQkVfRklOREVSX0gKICNkZWZpbmUgX1BST0JFX0ZJTkRFUl9ICiAKKyNpbmNsdWRlICJ1dGlsLmgiCisKICNkZWZpbmUgTUFYX1BBVEhfTEVOCQkgMjU2CiAjZGVmaW5lIE1BWF9QUk9CRV9CVUZGRVIJMTAyNAogI2RlZmluZSBNQVhfUFJPQkVTCQkgMTI4CkBAIC0zMiw4ICszNCwyNiBAQAogCWNoYXIJCQkqcHJvYmVzW01BWF9QUk9CRVNdOwkvKiBPdXRwdXQgYnVmZmVycyAod2lsbCBiZSBhbGxvY2F0ZWQpKi8KIH07CiAKKy8qIExpbmUgbnVtYmVyIGNvbnRhaW5lciAqLworc3RydWN0IGxpbmVfbm9kZSB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXVuc2lnbmVkIGludAkJbGluZTsKK307CisKKy8qIExpbmUgcmFuZ2UgKi8KK3N0cnVjdCBsaW5lX3JhbmdlIHsKKwljaGFyCQkJKmZpbGU7CQkJLyogRmlsZSBuYW1lICovCisJY2hhcgkJCSpmdW5jdGlvbjsJCS8qIEZ1bmN0aW9uIG5hbWUgKi8KKwl1bnNpZ25lZCBpbnQJCXN0YXJ0OwkJCS8qIFN0YXJ0IGxpbmUgbnVtYmVyICovCisJdW5zaWduZWQgaW50CQllbmQ7CQkJLyogRW5kIGxpbmUgbnVtYmVyICovCisJdW5zaWduZWQgaW50CQlvZmZzZXQ7CQkJLyogU3RhcnQgbGluZSBvZmZzZXQgKi8KKwljaGFyCQkJKnBhdGg7CQkJLyogUmVhbCBwYXRoIG5hbWUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpbmVfbGlzdDsJCS8qIFZpc2libGUgbGluZXMgKi8KK307CisKICNpZm5kZWYgTk9fTElCRFdBUkYKIGV4dGVybiBpbnQgZmluZF9wcm9iZXBvaW50KGludCBmZCwgc3RydWN0IHByb2JlX3BvaW50ICpwcCk7CitleHRlcm4gaW50IGZpbmRfbGluZV9yYW5nZShpbnQgZmQsIHN0cnVjdCBsaW5lX3JhbmdlICpscik7CiAKIC8qIFdvcmthcm91bmQgZm9yIHVuZGVmaW5lZCBfTUlQU19TWkxPTkcgYnVnIGluIGxpYmR3YXJmLmg6ICovCiAjaWZuZGVmIF9NSVBTX1NaTE9ORwpAQCAtNjAsNiArODAsMTkgQEAKIAljaGFyCQkJKmJ1ZjsJCQkvKiBDdXJyZW50IG91dHB1dCBidWZmZXIgKi8KIAlpbnQJCQlsZW47CQkJLyogTGVuZ3RoIG9mIG91dHB1dCBidWZmZXIgKi8KIH07CisKK3N0cnVjdCBsaW5lX2ZpbmRlciB7CisJc3RydWN0IGxpbmVfcmFuZ2UJKmxyOwkJCS8qIFRhcmdldCBsaW5lIHJhbmdlICovCisKKwlEd2FyZl9VbnNpZ25lZAkJZm5vOwkJCS8qIEZpbGUgbnVtYmVyICovCisJRHdhcmZfVW5zaWduZWQJCWxub19zOwkJCS8qIFN0YXJ0IGxpbmUgbnVtYmVyICovCisJRHdhcmZfVW5zaWduZWQJCWxub19lOwkJCS8qIEVuZCBsaW5lIG51bWJlciAqLworCUR3YXJmX0FkZHIJCWFkZHJfczsJCQkvKiBTdGFydCBhZGRyZXNzICovCisJRHdhcmZfQWRkcgkJYWRkcl9lOwkJCS8qIEVuZCBhZGRyZXNzICovCisJRHdhcmZfRGllCQljdV9kaWU7CQkJLyogQ3VycmVudCBDVSAqLworCWludAkJCWZvdW5kOworfTsKKwogI2VuZGlmIC8qIE5PX0xJQkRXQVJGICovCiAKICNlbmRpZiAvKl9QUk9CRV9GSU5ERVJfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBlcmwuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLmMKc2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBlcmwuYwpyZW5hbWUgdG8gdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwuYwppbmRleCA2ZDZkNzZiLi41Mzc2Mzc4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLmMKQEAgLTI1LDEwICsyNSwxNiBAQAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KIAotI2luY2x1ZGUgIi4uL3BlcmYuaCIKLSNpbmNsdWRlICJ1dGlsLmgiCi0jaW5jbHVkZSAidHJhY2UtZXZlbnQuaCIKLSNpbmNsdWRlICJ0cmFjZS1ldmVudC1wZXJsLmgiCisjaW5jbHVkZSAiLi4vLi4vcGVyZi5oIgorI2luY2x1ZGUgIi4uL3V0aWwuaCIKKyNpbmNsdWRlICIuLi90cmFjZS1ldmVudC5oIgorCisjaW5jbHVkZSA8RVhURVJOLmg+CisjaW5jbHVkZSA8cGVybC5oPgorCit2b2lkIGJvb3RfUGVyZl9fVHJhY2VfX0NvbnRleHQocFRIWF8gQ1YgKmN2KTsKK3ZvaWQgYm9vdF9EeW5hTG9hZGVyKHBUSFhfIENWICpjdik7Cit0eXBlZGVmIFBlcmxJbnRlcnByZXRlciAqIElOVEVSUDsKIAogdm9pZCB4c19pbml0KHBUSFgpOwogCkBAIC00OSw3ICs1NSw3IEBACiAKIHN0cnVjdCBldmVudCAqZXZlbnRzW0ZUUkFDRV9NQVhfRVZFTlRdOwogCi1zdGF0aWMgc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpzY3JpcHRpbmdfY29udGV4dDsKK2V4dGVybiBzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKnNjcmlwdGluZ19jb250ZXh0OwogCiBzdGF0aWMgY2hhciAqY3VyX2ZpZWxkX25hbWU7CiBzdGF0aWMgaW50IHplcm9fZmxhZ19hdG9tOwpAQCAtMjM5LDMzICsyNDUsNiBAQAogCXJldHVybiBldmVudDsKIH0KIAotaW50IGNvbW1vbl9wYyhzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpCi17Ci0JaW50IHBjOwotCi0JcGMgPSBwYXJzZV9jb21tb25fcGMoY29udGV4dC0+ZXZlbnRfZGF0YSk7Ci0KLQlyZXR1cm4gcGM7Ci19Ci0KLWludCBjb21tb25fZmxhZ3Moc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KQotewotCWludCBmbGFnczsKLQotCWZsYWdzID0gcGFyc2VfY29tbW9uX2ZsYWdzKGNvbnRleHQtPmV2ZW50X2RhdGEpOwotCi0JcmV0dXJuIGZsYWdzOwotfQotCi1pbnQgY29tbW9uX2xvY2tfZGVwdGgoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KQotewotCWludCBsb2NrX2RlcHRoOwotCi0JbG9ja19kZXB0aCA9IHBhcnNlX2NvbW1vbl9sb2NrX2RlcHRoKGNvbnRleHQtPmV2ZW50X2RhdGEpOwotCi0JcmV0dXJuIGxvY2tfZGVwdGg7Ci19Ci0KIHN0YXRpYyB2b2lkIHBlcmxfcHJvY2Vzc19ldmVudChpbnQgY3B1LCB2b2lkICpkYXRhLAogCQkJICAgICAgIGludCBzaXplIF9fdW51c2VkLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjcywgY2hhciAqY29tbSkKQEAgLTU4Nyw3NSArNTY2LDMgQEAKIAkucHJvY2Vzc19ldmVudCA9IHBlcmxfcHJvY2Vzc19ldmVudCwKIAkuZ2VuZXJhdGVfc2NyaXB0ID0gcGVybF9nZW5lcmF0ZV9zY3JpcHQsCiB9OwotCi1zdGF0aWMgdm9pZCBwcmludF91bnN1cHBvcnRlZF9tc2codm9pZCkKLXsKLQlmcHJpbnRmKHN0ZGVyciwgIlBlcmwgc2NyaXB0aW5nIG5vdCBzdXBwb3J0ZWQuIgotCQkiICBJbnN0YWxsIGxpYnBlcmwgYW5kIHJlYnVpbGQgcGVyZiB0byBlbmFibGUgaXQuXG4iCi0JCSJGb3IgZXhhbXBsZTpcbiAgIyBhcHQtZ2V0IGluc3RhbGwgbGlicGVybC1kZXYgKHVidW50dSkiCi0JCSJcbiAgIyB5dW0gaW5zdGFsbCBwZXJsLUV4dFV0aWxzLUVtYmVkIChGZWRvcmEpIgotCQkiXG4gIGV0Yy5cbiIpOwotfQotCi1zdGF0aWMgaW50IHBlcmxfc3RhcnRfc2NyaXB0X3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKnNjcmlwdCBfX3VudXNlZCwKLQkJCQkJIGludCBhcmdjIF9fdW51c2VkLAotCQkJCQkgY29uc3QgY2hhciAqKmFyZ3YgX191bnVzZWQpCi17Ci0JcHJpbnRfdW5zdXBwb3J0ZWRfbXNnKCk7Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbnQgcGVybF9zdG9wX3NjcmlwdF91bnN1cHBvcnRlZCh2b2lkKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwZXJsX3Byb2Nlc3NfZXZlbnRfdW5zdXBwb3J0ZWQoaW50IGNwdSBfX3VudXNlZCwKLQkJCQkJICAgdm9pZCAqZGF0YSBfX3VudXNlZCwKLQkJCQkJICAgaW50IHNpemUgX191bnVzZWQsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjcyBfX3VudXNlZCwKLQkJCQkJICAgY2hhciAqY29tbSBfX3VudXNlZCkKLXsKLX0KLQotc3RhdGljIGludCBwZXJsX2dlbmVyYXRlX3NjcmlwdF91bnN1cHBvcnRlZChjb25zdCBjaGFyICpvdXRmaWxlIF9fdW51c2VkKQotewotCXByaW50X3Vuc3VwcG9ydGVkX21zZygpOwotCi0JcmV0dXJuIC0xOwotfQotCi1zdHJ1Y3Qgc2NyaXB0aW5nX29wcyBwZXJsX3NjcmlwdGluZ191bnN1cHBvcnRlZF9vcHMgPSB7Ci0JLm5hbWUgPSAiUGVybCIsCi0JLnN0YXJ0X3NjcmlwdCA9IHBlcmxfc3RhcnRfc2NyaXB0X3Vuc3VwcG9ydGVkLAotCS5zdG9wX3NjcmlwdCA9IHBlcmxfc3RvcF9zY3JpcHRfdW5zdXBwb3J0ZWQsCi0JLnByb2Nlc3NfZXZlbnQgPSBwZXJsX3Byb2Nlc3NfZXZlbnRfdW5zdXBwb3J0ZWQsCi0JLmdlbmVyYXRlX3NjcmlwdCA9IHBlcmxfZ2VuZXJhdGVfc2NyaXB0X3Vuc3VwcG9ydGVkLAotfTsKLQotc3RhdGljIHZvaWQgcmVnaXN0ZXJfcGVybF9zY3JpcHRpbmcoc3RydWN0IHNjcmlwdGluZ19vcHMgKnNjcmlwdGluZ19vcHMpCi17Ci0JaW50IGVycjsKLQllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigiUGVybCIsIHNjcmlwdGluZ19vcHMpOwotCWlmIChlcnIpCi0JCWRpZSgiZXJyb3IgcmVnaXN0ZXJpbmcgUGVybCBzY3JpcHQgZXh0ZW5zaW9uIik7Ci0KLQllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigicGwiLCBzY3JpcHRpbmdfb3BzKTsKLQlpZiAoZXJyKQotCQlkaWUoImVycm9yIHJlZ2lzdGVyaW5nIHBsIHNjcmlwdCBleHRlbnNpb24iKTsKLQotCXNjcmlwdGluZ19jb250ZXh0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQpKTsKLX0KLQotI2lmZGVmIE5PX0xJQlBFUkwKLXZvaWQgc2V0dXBfcGVybF9zY3JpcHRpbmcodm9pZCkKLXsKLQlyZWdpc3Rlcl9wZXJsX3NjcmlwdGluZygmcGVybF9zY3JpcHRpbmdfdW5zdXBwb3J0ZWRfb3BzKTsKLX0KLSNlbHNlCi12b2lkIHNldHVwX3Blcmxfc2NyaXB0aW5nKHZvaWQpCi17Ci0JcmVnaXN0ZXJfcGVybF9zY3JpcHRpbmcoJnBlcmxfc2NyaXB0aW5nX29wcyk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2E0MTRiCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5jCkBAIC0wLDAgKzEsNTczIEBACisvKgorICogdHJhY2UtZXZlbnQtcHl0aG9uLiAgRmVlZCB0cmFjZSBldmVudHMgdG8gYW4gZW1iZWRkZWQgUHl0aG9uIGludGVycHJldGVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8UHl0aG9uLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgIi4uLy4uL3BlcmYuaCIKKyNpbmNsdWRlICIuLi91dGlsLmgiCisjaW5jbHVkZSAiLi4vdHJhY2UtZXZlbnQuaCIKKworUHlNT0RJTklUX0ZVTkMgaW5pdHBlcmZfdHJhY2VfY29udGV4dCh2b2lkKTsKKworI2RlZmluZSBGVFJBQ0VfTUFYX0VWRU5UCQkJCVwKKwkoKDEgPDwgKHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiA4KSkgLSAxKQorCitzdHJ1Y3QgZXZlbnQgKmV2ZW50c1tGVFJBQ0VfTUFYX0VWRU5UXTsKKworI2RlZmluZSBNQVhfRklFTERTCTY0CisjZGVmaW5lIE5fQ09NTU9OX0ZJRUxEUwk3CisKK2V4dGVybiBzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKnNjcmlwdGluZ19jb250ZXh0OworCitzdGF0aWMgY2hhciAqY3VyX2ZpZWxkX25hbWU7CitzdGF0aWMgaW50IHplcm9fZmxhZ19hdG9tOworCitzdGF0aWMgUHlPYmplY3QgKm1haW5fbW9kdWxlLCAqbWFpbl9kaWN0OworCitzdGF0aWMgdm9pZCBoYW5kbGVyX2NhbGxfZGllKGNvbnN0IGNoYXIgKmhhbmRsZXJfbmFtZSkKK3sKKwlQeUVycl9QcmludCgpOworCVB5X0ZhdGFsRXJyb3IoInByb2JsZW0gaW4gUHl0aG9uIHRyYWNlIGV2ZW50IGhhbmRsZXIiKTsKK30KKworc3RhdGljIHZvaWQgZGVmaW5lX3ZhbHVlKGVudW0gcHJpbnRfYXJnX3R5cGUgZmllbGRfdHlwZSwKKwkJCSBjb25zdCBjaGFyICpldl9uYW1lLAorCQkJIGNvbnN0IGNoYXIgKmZpZWxkX25hbWUsCisJCQkgY29uc3QgY2hhciAqZmllbGRfdmFsdWUsCisJCQkgY29uc3QgY2hhciAqZmllbGRfc3RyKQoreworCWNvbnN0IGNoYXIgKmhhbmRsZXJfbmFtZSA9ICJkZWZpbmVfZmxhZ192YWx1ZSI7CisJUHlPYmplY3QgKmhhbmRsZXIsICp0LCAqcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZTsKKwl1bnNpZ25lZCBuID0gMDsKKworCWlmIChmaWVsZF90eXBlID09IFBSSU5UX1NZTUJPTCkKKwkJaGFuZGxlcl9uYW1lID0gImRlZmluZV9zeW1ib2xpY192YWx1ZSI7CisKKwl0ID0gUHlUdXBsZV9OZXcoNCk7CisJaWYgKCF0KQorCQlQeV9GYXRhbEVycm9yKCJjb3VsZG4ndCBjcmVhdGUgUHl0aG9uIHR1cGxlIik7CisKKwl2YWx1ZSA9IGV2YWxfZmxhZyhmaWVsZF92YWx1ZSk7CisKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeVN0cmluZ19Gcm9tU3RyaW5nKGV2X25hbWUpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeVN0cmluZ19Gcm9tU3RyaW5nKGZpZWxkX25hbWUpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeUludF9Gcm9tTG9uZyh2YWx1ZSkpOworCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssIFB5U3RyaW5nX0Zyb21TdHJpbmcoZmllbGRfc3RyKSk7CisKKwloYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobWFpbl9kaWN0LCBoYW5kbGVyX25hbWUpOworCWlmIChoYW5kbGVyICYmIFB5Q2FsbGFibGVfQ2hlY2soaGFuZGxlcikpIHsKKwkJcmV0dmFsID0gUHlPYmplY3RfQ2FsbE9iamVjdChoYW5kbGVyLCB0KTsKKwkJaWYgKHJldHZhbCA9PSBOVUxMKQorCQkJaGFuZGxlcl9jYWxsX2RpZShoYW5kbGVyX25hbWUpOworCX0KKworCVB5X0RFQ1JFRih0KTsKK30KKworc3RhdGljIHZvaWQgZGVmaW5lX3ZhbHVlcyhlbnVtIHByaW50X2FyZ190eXBlIGZpZWxkX3R5cGUsCisJCQkgIHN0cnVjdCBwcmludF9mbGFnX3N5bSAqZmllbGQsCisJCQkgIGNvbnN0IGNoYXIgKmV2X25hbWUsCisJCQkgIGNvbnN0IGNoYXIgKmZpZWxkX25hbWUpCit7CisJZGVmaW5lX3ZhbHVlKGZpZWxkX3R5cGUsIGV2X25hbWUsIGZpZWxkX25hbWUsIGZpZWxkLT52YWx1ZSwKKwkJICAgICBmaWVsZC0+c3RyKTsKKworCWlmIChmaWVsZC0+bmV4dCkKKwkJZGVmaW5lX3ZhbHVlcyhmaWVsZF90eXBlLCBmaWVsZC0+bmV4dCwgZXZfbmFtZSwgZmllbGRfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlZmluZV9maWVsZChlbnVtIHByaW50X2FyZ190eXBlIGZpZWxkX3R5cGUsCisJCQkgY29uc3QgY2hhciAqZXZfbmFtZSwKKwkJCSBjb25zdCBjaGFyICpmaWVsZF9uYW1lLAorCQkJIGNvbnN0IGNoYXIgKmRlbGltKQoreworCWNvbnN0IGNoYXIgKmhhbmRsZXJfbmFtZSA9ICJkZWZpbmVfZmxhZ19maWVsZCI7CisJUHlPYmplY3QgKmhhbmRsZXIsICp0LCAqcmV0dmFsOworCXVuc2lnbmVkIG4gPSAwOworCisJaWYgKGZpZWxkX3R5cGUgPT0gUFJJTlRfU1lNQk9MKQorCQloYW5kbGVyX25hbWUgPSAiZGVmaW5lX3N5bWJvbGljX2ZpZWxkIjsKKworCWlmIChmaWVsZF90eXBlID09IFBSSU5UX0ZMQUdTKQorCQl0ID0gUHlUdXBsZV9OZXcoMyk7CisJZWxzZQorCQl0ID0gUHlUdXBsZV9OZXcoMik7CisJaWYgKCF0KQorCQlQeV9GYXRhbEVycm9yKCJjb3VsZG4ndCBjcmVhdGUgUHl0aG9uIHR1cGxlIik7CisKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeVN0cmluZ19Gcm9tU3RyaW5nKGV2X25hbWUpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeVN0cmluZ19Gcm9tU3RyaW5nKGZpZWxkX25hbWUpKTsKKwlpZiAoZmllbGRfdHlwZSA9PSBQUklOVF9GTEFHUykKKwkJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlTdHJpbmdfRnJvbVN0cmluZyhkZWxpbSkpOworCisJaGFuZGxlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1haW5fZGljdCwgaGFuZGxlcl9uYW1lKTsKKwlpZiAoaGFuZGxlciAmJiBQeUNhbGxhYmxlX0NoZWNrKGhhbmRsZXIpKSB7CisJCXJldHZhbCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoaGFuZGxlciwgdCk7CisJCWlmIChyZXR2YWwgPT0gTlVMTCkKKwkJCWhhbmRsZXJfY2FsbF9kaWUoaGFuZGxlcl9uYW1lKTsKKwl9CisKKwlQeV9ERUNSRUYodCk7Cit9CisKK3N0YXRpYyB2b2lkIGRlZmluZV9ldmVudF9zeW1ib2xzKHN0cnVjdCBldmVudCAqZXZlbnQsCisJCQkJIGNvbnN0IGNoYXIgKmV2X25hbWUsCisJCQkJIHN0cnVjdCBwcmludF9hcmcgKmFyZ3MpCit7CisJc3dpdGNoIChhcmdzLT50eXBlKSB7CisJY2FzZSBQUklOVF9OVUxMOgorCQlicmVhazsKKwljYXNlIFBSSU5UX0FUT006CisJCWRlZmluZV92YWx1ZShQUklOVF9GTEFHUywgZXZfbmFtZSwgY3VyX2ZpZWxkX25hbWUsICIwIiwKKwkJCSAgICAgYXJncy0+YXRvbS5hdG9tKTsKKwkJemVyb19mbGFnX2F0b20gPSAwOworCQlicmVhazsKKwljYXNlIFBSSU5UX0ZJRUxEOgorCQlpZiAoY3VyX2ZpZWxkX25hbWUpCisJCQlmcmVlKGN1cl9maWVsZF9uYW1lKTsKKwkJY3VyX2ZpZWxkX25hbWUgPSBzdHJkdXAoYXJncy0+ZmllbGQubmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFJJTlRfRkxBR1M6CisJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBhcmdzLT5mbGFncy5maWVsZCk7CisJCWRlZmluZV9maWVsZChQUklOVF9GTEFHUywgZXZfbmFtZSwgY3VyX2ZpZWxkX25hbWUsCisJCQkgICAgIGFyZ3MtPmZsYWdzLmRlbGltKTsKKwkJZGVmaW5lX3ZhbHVlcyhQUklOVF9GTEFHUywgYXJncy0+ZmxhZ3MuZmxhZ3MsIGV2X25hbWUsCisJCQkgICAgICBjdXJfZmllbGRfbmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFJJTlRfU1lNQk9MOgorCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+c3ltYm9sLmZpZWxkKTsKKwkJZGVmaW5lX2ZpZWxkKFBSSU5UX1NZTUJPTCwgZXZfbmFtZSwgY3VyX2ZpZWxkX25hbWUsIE5VTEwpOworCQlkZWZpbmVfdmFsdWVzKFBSSU5UX1NZTUJPTCwgYXJncy0+c3ltYm9sLnN5bWJvbHMsIGV2X25hbWUsCisJCQkgICAgICBjdXJfZmllbGRfbmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFJJTlRfU1RSSU5HOgorCQlicmVhazsKKwljYXNlIFBSSU5UX1RZUEU6CisJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBhcmdzLT50eXBlY2FzdC5pdGVtKTsKKwkJYnJlYWs7CisJY2FzZSBQUklOVF9PUDoKKwkJaWYgKHN0cmNtcChhcmdzLT5vcC5vcCwgIjoiKSA9PSAwKQorCQkJemVyb19mbGFnX2F0b20gPSAxOworCQlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgYXJncy0+b3AubGVmdCk7CisJCWRlZmluZV9ldmVudF9zeW1ib2xzKGV2ZW50LCBldl9uYW1lLCBhcmdzLT5vcC5yaWdodCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHdlIHNob3VsZCB3YXJuLi4uICovCisJCXJldHVybjsKKwl9CisKKwlpZiAoYXJncy0+bmV4dCkKKwkJZGVmaW5lX2V2ZW50X3N5bWJvbHMoZXZlbnQsIGV2X25hbWUsIGFyZ3MtPm5leHQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBldmVudCAqZmluZF9jYWNoZV9ldmVudChpbnQgdHlwZSkKK3sKKwlzdGF0aWMgY2hhciBldl9uYW1lWzI1Nl07CisJc3RydWN0IGV2ZW50ICpldmVudDsKKworCWlmIChldmVudHNbdHlwZV0pCisJCXJldHVybiBldmVudHNbdHlwZV07CisKKwlldmVudHNbdHlwZV0gPSBldmVudCA9IHRyYWNlX2ZpbmRfZXZlbnQodHlwZSk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzcHJpbnRmKGV2X25hbWUsICIlc19fJXMiLCBldmVudC0+c3lzdGVtLCBldmVudC0+bmFtZSk7CisKKwlkZWZpbmVfZXZlbnRfc3ltYm9scyhldmVudCwgZXZfbmFtZSwgZXZlbnQtPnByaW50X2ZtdC5hcmdzKTsKKworCXJldHVybiBldmVudDsKK30KKworc3RhdGljIHZvaWQgcHl0aG9uX3Byb2Nlc3NfZXZlbnQoaW50IGNwdSwgdm9pZCAqZGF0YSwKKwkJCQkgaW50IHNpemUgX191bnVzZWQsCisJCQkJIHVuc2lnbmVkIGxvbmcgbG9uZyBuc2VjcywgY2hhciAqY29tbSkKK3sKKwlQeU9iamVjdCAqaGFuZGxlciwgKnJldHZhbCwgKmNvbnRleHQsICp0OworCXN0YXRpYyBjaGFyIGhhbmRsZXJfbmFtZVsyNTZdOworCXN0cnVjdCBmb3JtYXRfZmllbGQgKmZpZWxkOworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJdW5zaWduZWQgbG9uZyBzLCBuczsKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50OworCXVuc2lnbmVkIG4gPSAwOworCWludCB0eXBlOworCWludCBwaWQ7CisKKwl0ID0gUHlUdXBsZV9OZXcoTUFYX0ZJRUxEUyk7CisJaWYgKCF0KQorCQlQeV9GYXRhbEVycm9yKCJjb3VsZG4ndCBjcmVhdGUgUHl0aG9uIHR1cGxlIik7CisKKwl0eXBlID0gdHJhY2VfcGFyc2VfY29tbW9uX3R5cGUoZGF0YSk7CisKKwlldmVudCA9IGZpbmRfY2FjaGVfZXZlbnQodHlwZSk7CisJaWYgKCFldmVudCkKKwkJZGllKCJ1ZyEgbm8gZXZlbnQgZm91bmQgZm9yIHR5cGUgJWQiLCB0eXBlKTsKKworCXBpZCA9IHRyYWNlX3BhcnNlX2NvbW1vbl9waWQoZGF0YSk7CisKKwlzcHJpbnRmKGhhbmRsZXJfbmFtZSwgIiVzX18lcyIsIGV2ZW50LT5zeXN0ZW0sIGV2ZW50LT5uYW1lKTsKKworCXMgPSBuc2VjcyAvIE5TRUNTX1BFUl9TRUM7CisJbnMgPSBuc2VjcyAtIHMgKiBOU0VDU19QRVJfU0VDOworCisJc2NyaXB0aW5nX2NvbnRleHQtPmV2ZW50X2RhdGEgPSBkYXRhOworCisJY29udGV4dCA9IFB5Q09iamVjdF9Gcm9tVm9pZFB0cihzY3JpcHRpbmdfY29udGV4dCwgTlVMTCk7CisKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeVN0cmluZ19Gcm9tU3RyaW5nKGhhbmRsZXJfbmFtZSkpOworCVB5VHVwbGVfU2V0SXRlbSh0LCBuKyssCisJCQlQeUNPYmplY3RfRnJvbVZvaWRQdHIoc2NyaXB0aW5nX2NvbnRleHQsIE5VTEwpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeUludF9Gcm9tTG9uZyhjcHUpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeUludF9Gcm9tTG9uZyhzKSk7CisJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlJbnRfRnJvbUxvbmcobnMpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeUludF9Gcm9tTG9uZyhwaWQpKTsKKwlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeVN0cmluZ19Gcm9tU3RyaW5nKGNvbW0pKTsKKworCWZvciAoZmllbGQgPSBldmVudC0+Zm9ybWF0LmZpZWxkczsgZmllbGQ7IGZpZWxkID0gZmllbGQtPm5leHQpIHsKKwkJaWYgKGZpZWxkLT5mbGFncyAmIEZJRUxEX0lTX1NUUklORykgeworCQkJaW50IG9mZnNldDsKKwkJCWlmIChmaWVsZC0+ZmxhZ3MgJiBGSUVMRF9JU19EWU5BTUlDKSB7CisJCQkJb2Zmc2V0ID0gKihpbnQgKikoZGF0YSArIGZpZWxkLT5vZmZzZXQpOworCQkJCW9mZnNldCAmPSAweGZmZmY7CisJCQl9IGVsc2UKKwkJCQlvZmZzZXQgPSBmaWVsZC0+b2Zmc2V0OworCQkJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywKKwkJCQlQeVN0cmluZ19Gcm9tU3RyaW5nKChjaGFyICopZGF0YSArIG9mZnNldCkpOworCQl9IGVsc2UgeyAvKiBGSUVMRF9JU19OVU1FUklDICovCisJCQl2YWwgPSByZWFkX3NpemUoZGF0YSArIGZpZWxkLT5vZmZzZXQsIGZpZWxkLT5zaXplKTsKKwkJCWlmIChmaWVsZC0+ZmxhZ3MgJiBGSUVMRF9JU19TSUdORUQpIHsKKwkJCQlQeVR1cGxlX1NldEl0ZW0odCwgbisrLCBQeUludF9Gcm9tTG9uZyh2YWwpKTsKKwkJCX0gZWxzZSB7CisJCQkJUHlUdXBsZV9TZXRJdGVtKHQsIG4rKywgUHlJbnRfRnJvbUxvbmcodmFsKSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoX1B5VHVwbGVfUmVzaXplKCZ0LCBuKSA9PSAtMSkKKwkJUHlfRmF0YWxFcnJvcigiZXJyb3IgcmVzaXppbmcgUHl0aG9uIHR1cGxlIik7CisKKwloYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobWFpbl9kaWN0LCBoYW5kbGVyX25hbWUpOworCWlmIChoYW5kbGVyICYmIFB5Q2FsbGFibGVfQ2hlY2soaGFuZGxlcikpIHsKKwkJcmV0dmFsID0gUHlPYmplY3RfQ2FsbE9iamVjdChoYW5kbGVyLCB0KTsKKwkJaWYgKHJldHZhbCA9PSBOVUxMKQorCQkJaGFuZGxlcl9jYWxsX2RpZShoYW5kbGVyX25hbWUpOworCX0gZWxzZSB7CisJCWhhbmRsZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtYWluX2RpY3QsICJ0cmFjZV91bmhhbmRsZWQiKTsKKwkJaWYgKGhhbmRsZXIgJiYgUHlDYWxsYWJsZV9DaGVjayhoYW5kbGVyKSkgeworCQkJaWYgKF9QeVR1cGxlX1Jlc2l6ZSgmdCwgTl9DT01NT05fRklFTERTKSA9PSAtMSkKKwkJCQlQeV9GYXRhbEVycm9yKCJlcnJvciByZXNpemluZyBQeXRob24gdHVwbGUiKTsKKworCQkJcmV0dmFsID0gUHlPYmplY3RfQ2FsbE9iamVjdChoYW5kbGVyLCB0KTsKKwkJCWlmIChyZXR2YWwgPT0gTlVMTCkKKwkJCQloYW5kbGVyX2NhbGxfZGllKCJ0cmFjZV91bmhhbmRsZWQiKTsKKwkJfQorCX0KKworCVB5X0RFQ1JFRih0KTsKK30KKworc3RhdGljIGludCBydW5fc3RhcnRfc3ViKHZvaWQpCit7CisJUHlPYmplY3QgKmhhbmRsZXIsICpyZXR2YWw7CisJaW50IGVyciA9IDA7CisKKwltYWluX21vZHVsZSA9IFB5SW1wb3J0X0FkZE1vZHVsZSgiX19tYWluX18iKTsKKwlpZiAobWFpbl9tb2R1bGUgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCVB5X0lOQ1JFRihtYWluX21vZHVsZSk7CisKKwltYWluX2RpY3QgPSBQeU1vZHVsZV9HZXREaWN0KG1haW5fbW9kdWxlKTsKKwlpZiAobWFpbl9kaWN0ID09IE5VTEwpIHsKKwkJZXJyID0gLTE7CisJCWdvdG8gZXJyb3I7CisJfQorCVB5X0lOQ1JFRihtYWluX2RpY3QpOworCisJaGFuZGxlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1haW5fZGljdCwgInRyYWNlX2JlZ2luIik7CisJaWYgKGhhbmRsZXIgPT0gTlVMTCB8fCAhUHlDYWxsYWJsZV9DaGVjayhoYW5kbGVyKSkKKwkJZ290byBvdXQ7CisKKwlyZXR2YWwgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGhhbmRsZXIsIE5VTEwpOworCWlmIChyZXR2YWwgPT0gTlVMTCkKKwkJaGFuZGxlcl9jYWxsX2RpZSgidHJhY2VfYmVnaW4iKTsKKworCVB5X0RFQ1JFRihyZXR2YWwpOworCXJldHVybiBlcnI7CitlcnJvcjoKKwlQeV9YREVDUkVGKG1haW5fZGljdCk7CisJUHlfWERFQ1JFRihtYWluX21vZHVsZSk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFN0YXJ0IHRyYWNlIHNjcmlwdAorICovCitzdGF0aWMgaW50IHB5dGhvbl9zdGFydF9zY3JpcHQoY29uc3QgY2hhciAqc2NyaXB0LCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqKmNvbW1hbmRfbGluZTsKKwljaGFyIGJ1ZltQQVRIX01BWF07CisJaW50IGksIGVyciA9IDA7CisJRklMRSAqZnA7CisKKwljb21tYW5kX2xpbmUgPSBtYWxsb2MoKGFyZ2MgKyAxKSAqIHNpemVvZihjb25zdCBjaGFyICopKTsKKwljb21tYW5kX2xpbmVbMF0gPSBzY3JpcHQ7CisJZm9yIChpID0gMTsgaSA8IGFyZ2MgKyAxOyBpKyspCisJCWNvbW1hbmRfbGluZVtpXSA9IGFyZ3ZbaSAtIDFdOworCisJUHlfSW5pdGlhbGl6ZSgpOworCisJaW5pdHBlcmZfdHJhY2VfY29udGV4dCgpOworCisJUHlTeXNfU2V0QXJndihhcmdjICsgMSwgKGNoYXIgKiopY29tbWFuZF9saW5lKTsKKworCWZwID0gZm9wZW4oc2NyaXB0LCAiciIpOworCWlmICghZnApIHsKKwkJc3ByaW50ZihidWYsICJDYW4ndCBvcGVuIHB5dGhvbiBzY3JpcHQgXCIlc1wiIiwgc2NyaXB0KTsKKwkJcGVycm9yKGJ1Zik7CisJCWVyciA9IC0xOworCQlnb3RvIGVycm9yOworCX0KKworCWVyciA9IFB5UnVuX1NpbXBsZUZpbGUoZnAsIHNjcmlwdCk7CisJaWYgKGVycikgeworCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHJ1bm5pbmcgcHl0aG9uIHNjcmlwdCAlc1xuIiwgc2NyaXB0KTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBydW5fc3RhcnRfc3ViKCk7CisJaWYgKGVycikgeworCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHN0YXJ0aW5nIHB5dGhvbiBzY3JpcHQgJXNcbiIsIHNjcmlwdCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZnJlZShjb21tYW5kX2xpbmUpOworCWZwcmludGYoc3RkZXJyLCAicGVyZiB0cmFjZSBzdGFydGVkIHdpdGggUHl0aG9uIHNjcmlwdCAlc1xuXG4iLAorCQlzY3JpcHQpOworCisJcmV0dXJuIGVycjsKK2Vycm9yOgorCVB5X0ZpbmFsaXplKCk7CisJZnJlZShjb21tYW5kX2xpbmUpOworCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFN0b3AgdHJhY2Ugc2NyaXB0CisgKi8KK3N0YXRpYyBpbnQgcHl0aG9uX3N0b3Bfc2NyaXB0KHZvaWQpCit7CisJUHlPYmplY3QgKmhhbmRsZXIsICpyZXR2YWw7CisJaW50IGVyciA9IDA7CisKKwloYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobWFpbl9kaWN0LCAidHJhY2VfZW5kIik7CisJaWYgKGhhbmRsZXIgPT0gTlVMTCB8fCAhUHlDYWxsYWJsZV9DaGVjayhoYW5kbGVyKSkKKwkJZ290byBvdXQ7CisKKwlyZXR2YWwgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGhhbmRsZXIsIE5VTEwpOworCWlmIChyZXR2YWwgPT0gTlVMTCkKKwkJaGFuZGxlcl9jYWxsX2RpZSgidHJhY2VfZW5kIik7CisJZWxzZQorCQlQeV9ERUNSRUYocmV0dmFsKTsKK291dDoKKwlQeV9YREVDUkVGKG1haW5fZGljdCk7CisJUHlfWERFQ1JFRihtYWluX21vZHVsZSk7CisJUHlfRmluYWxpemUoKTsKKworCWZwcmludGYoc3RkZXJyLCAiXG5wZXJmIHRyYWNlIFB5dGhvbiBzY3JpcHQgc3RvcHBlZFxuIik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHB5dGhvbl9nZW5lcmF0ZV9zY3JpcHQoY29uc3QgY2hhciAqb3V0ZmlsZSkKK3sKKwlzdHJ1Y3QgZXZlbnQgKmV2ZW50ID0gTlVMTDsKKwlzdHJ1Y3QgZm9ybWF0X2ZpZWxkICpmOworCWNoYXIgZm5hbWVbUEFUSF9NQVhdOworCWludCBub3RfZmlyc3QsIGNvdW50OworCUZJTEUgKm9mcDsKKworCXNwcmludGYoZm5hbWUsICIlcy5weSIsIG91dGZpbGUpOworCW9mcCA9IGZvcGVuKGZuYW1lLCAidyIpOworCWlmIChvZnAgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImNvdWxkbid0IG9wZW4gJXNcbiIsIGZuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwlmcHJpbnRmKG9mcCwgIiMgcGVyZiB0cmFjZSBldmVudCBoYW5kbGVycywgIgorCQkiZ2VuZXJhdGVkIGJ5IHBlcmYgdHJhY2UgLWcgcHl0aG9uXG4iKTsKKworCWZwcmludGYob2ZwLCAiIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwiCisJCSIgTGljZW5zZSB2ZXJzaW9uIDJcblxuIik7CisKKwlmcHJpbnRmKG9mcCwgIiMgVGhlIGNvbW1vbl8qIGV2ZW50IGhhbmRsZXIgZmllbGRzIGFyZSB0aGUgbW9zdCB1c2VmdWwgIgorCQkiZmllbGRzIGNvbW1vbiB0b1xuIik7CisKKwlmcHJpbnRmKG9mcCwgIiMgYWxsIGV2ZW50cy4gIFRoZXkgZG9uJ3QgbmVjZXNzYXJpbHkgY29ycmVzcG9uZCB0byAiCisJCSJ0aGUgJ2NvbW1vbl8qJyBmaWVsZHNcbiIpOworCisJZnByaW50ZihvZnAsICIjIGluIHRoZSBmb3JtYXQgZmlsZXMuICBUaG9zZSBmaWVsZHMgbm90IGF2YWlsYWJsZSBhcyAiCisJCSJoYW5kbGVyIHBhcmFtcyBjYW5cbiIpOworCisJZnByaW50ZihvZnAsICIjIGJlIHJldHJpZXZlZCB1c2luZyBQeXRob24gZnVuY3Rpb25zIG9mIHRoZSBmb3JtICIKKwkJImNvbW1vbl8qKGNvbnRleHQpLlxuIik7CisKKwlmcHJpbnRmKG9mcCwgIiMgU2VlIHRoZSBwZXJmLXRyYWNlLXB5dGhvbiBEb2N1bWVudGF0aW9uIGZvciB0aGUgbGlzdCAiCisJCSJvZiBhdmFpbGFibGUgZnVuY3Rpb25zLlxuXG4iKTsKKworCWZwcmludGYob2ZwLCAiaW1wb3J0IG9zXG4iKTsKKwlmcHJpbnRmKG9mcCwgImltcG9ydCBzeXNcblxuIik7CisKKwlmcHJpbnRmKG9mcCwgInN5cy5wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydQRVJGX0VYRUNfUEFUSCddICsgXFxcbiIpOworCWZwcmludGYob2ZwLCAiXHQnL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZScpXG4iKTsKKwlmcHJpbnRmKG9mcCwgIlxuZnJvbSBwZXJmX3RyYWNlX2NvbnRleHQgaW1wb3J0ICpcbiIpOworCWZwcmludGYob2ZwLCAiZnJvbSBDb3JlIGltcG9ydCAqXG5cblxuIik7CisKKwlmcHJpbnRmKG9mcCwgImRlZiB0cmFjZV9iZWdpbigpOlxuIik7CisJZnByaW50ZihvZnAsICJcdHByaW50IFwiaW4gdHJhY2VfYmVnaW5cIlxuXG4iKTsKKworCWZwcmludGYob2ZwLCAiZGVmIHRyYWNlX2VuZCgpOlxuIik7CisJZnByaW50ZihvZnAsICJcdHByaW50IFwiaW4gdHJhY2VfZW5kXCJcblxuIik7CisKKwl3aGlsZSAoKGV2ZW50ID0gdHJhY2VfZmluZF9uZXh0X2V2ZW50KGV2ZW50KSkpIHsKKwkJZnByaW50ZihvZnAsICJkZWYgJXNfXyVzKCIsIGV2ZW50LT5zeXN0ZW0sIGV2ZW50LT5uYW1lKTsKKwkJZnByaW50ZihvZnAsICJldmVudF9uYW1lLCAiKTsKKwkJZnByaW50ZihvZnAsICJjb250ZXh0LCAiKTsKKwkJZnByaW50ZihvZnAsICJjb21tb25fY3B1LFxuIik7CisJCWZwcmludGYob2ZwLCAiXHRjb21tb25fc2VjcywgIik7CisJCWZwcmludGYob2ZwLCAiY29tbW9uX25zZWNzLCAiKTsKKwkJZnByaW50ZihvZnAsICJjb21tb25fcGlkLCAiKTsKKwkJZnByaW50ZihvZnAsICJjb21tb25fY29tbSxcblx0Iik7CisKKwkJbm90X2ZpcnN0ID0gMDsKKwkJY291bnQgPSAwOworCisJCWZvciAoZiA9IGV2ZW50LT5mb3JtYXQuZmllbGRzOyBmOyBmID0gZi0+bmV4dCkgeworCQkJaWYgKG5vdF9maXJzdCsrKQorCQkJCWZwcmludGYob2ZwLCAiLCAiKTsKKwkJCWlmICgrK2NvdW50ICUgNSA9PSAwKQorCQkJCWZwcmludGYob2ZwLCAiXG5cdCIpOworCisJCQlmcHJpbnRmKG9mcCwgIiVzIiwgZi0+bmFtZSk7CisJCX0KKwkJZnByaW50ZihvZnAsICIpOlxuIik7CisKKwkJZnByaW50ZihvZnAsICJcdFx0cHJpbnRfaGVhZGVyKGV2ZW50X25hbWUsIGNvbW1vbl9jcHUsICIKKwkJCSJjb21tb25fc2VjcywgY29tbW9uX25zZWNzLFxuXHRcdFx0IgorCQkJImNvbW1vbl9waWQsIGNvbW1vbl9jb21tKVxuXG4iKTsKKworCQlmcHJpbnRmKG9mcCwgIlx0XHRwcmludCBcIiIpOworCisJCW5vdF9maXJzdCA9IDA7CisJCWNvdW50ID0gMDsKKworCQlmb3IgKGYgPSBldmVudC0+Zm9ybWF0LmZpZWxkczsgZjsgZiA9IGYtPm5leHQpIHsKKwkJCWlmIChub3RfZmlyc3QrKykKKwkJCQlmcHJpbnRmKG9mcCwgIiwgIik7CisJCQlpZiAoY291bnQgJiYgY291bnQgJSAzID09IDApIHsKKwkJCQlmcHJpbnRmKG9mcCwgIlwiIFxcXG5cdFx0XCIiKTsKKwkJCX0KKwkJCWNvdW50Kys7CisKKwkJCWZwcmludGYob2ZwLCAiJXM9IiwgZi0+bmFtZSk7CisJCQlpZiAoZi0+ZmxhZ3MgJiBGSUVMRF9JU19TVFJJTkcgfHwKKwkJCSAgICBmLT5mbGFncyAmIEZJRUxEX0lTX0ZMQUcgfHwKKwkJCSAgICBmLT5mbGFncyAmIEZJRUxEX0lTX1NZTUJPTElDKQorCQkJCWZwcmludGYob2ZwLCAiJSVzIik7CisJCQllbHNlIGlmIChmLT5mbGFncyAmIEZJRUxEX0lTX1NJR05FRCkKKwkJCQlmcHJpbnRmKG9mcCwgIiUlZCIpOworCQkJZWxzZQorCQkJCWZwcmludGYob2ZwLCAiJSV1Iik7CisJCX0KKworCQlmcHJpbnRmKG9mcCwgIlxcblwiICUlIFxcXG5cdFx0KCIpOworCisJCW5vdF9maXJzdCA9IDA7CisJCWNvdW50ID0gMDsKKworCQlmb3IgKGYgPSBldmVudC0+Zm9ybWF0LmZpZWxkczsgZjsgZiA9IGYtPm5leHQpIHsKKwkJCWlmIChub3RfZmlyc3QrKykKKwkJCQlmcHJpbnRmKG9mcCwgIiwgIik7CisKKwkJCWlmICgrK2NvdW50ICUgNSA9PSAwKQorCQkJCWZwcmludGYob2ZwLCAiXG5cdFx0Iik7CisKKwkJCWlmIChmLT5mbGFncyAmIEZJRUxEX0lTX0ZMQUcpIHsKKwkJCQlpZiAoKGNvdW50IC0gMSkgJSA1ICE9IDApIHsKKwkJCQkJZnByaW50ZihvZnAsICJcblx0XHQiKTsKKwkJCQkJY291bnQgPSA0OworCQkJCX0KKwkJCQlmcHJpbnRmKG9mcCwgImZsYWdfc3RyKFwiIik7CisJCQkJZnByaW50ZihvZnAsICIlc19fJXNcIiwgIiwgZXZlbnQtPnN5c3RlbSwKKwkJCQkJZXZlbnQtPm5hbWUpOworCQkJCWZwcmludGYob2ZwLCAiXCIlc1wiLCAlcykiLCBmLT5uYW1lLAorCQkJCQlmLT5uYW1lKTsKKwkJCX0gZWxzZSBpZiAoZi0+ZmxhZ3MgJiBGSUVMRF9JU19TWU1CT0xJQykgeworCQkJCWlmICgoY291bnQgLSAxKSAlIDUgIT0gMCkgeworCQkJCQlmcHJpbnRmKG9mcCwgIlxuXHRcdCIpOworCQkJCQljb3VudCA9IDQ7CisJCQkJfQorCQkJCWZwcmludGYob2ZwLCAic3ltYm9sX3N0cihcIiIpOworCQkJCWZwcmludGYob2ZwLCAiJXNfXyVzXCIsICIsIGV2ZW50LT5zeXN0ZW0sCisJCQkJCWV2ZW50LT5uYW1lKTsKKwkJCQlmcHJpbnRmKG9mcCwgIlwiJXNcIiwgJXMpIiwgZi0+bmFtZSwKKwkJCQkJZi0+bmFtZSk7CisJCQl9IGVsc2UKKwkJCQlmcHJpbnRmKG9mcCwgIiVzIiwgZi0+bmFtZSk7CisJCX0KKworCQlmcHJpbnRmKG9mcCwgIiksXG5cbiIpOworCX0KKworCWZwcmludGYob2ZwLCAiZGVmIHRyYWNlX3VuaGFuZGxlZChldmVudF9uYW1lLCBjb250ZXh0LCAiCisJCSJjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLFxuXHRcdCIKKwkJImNvbW1vbl9waWQsIGNvbW1vbl9jb21tKTpcbiIpOworCisJZnByaW50ZihvZnAsICJcdFx0cHJpbnRfaGVhZGVyKGV2ZW50X25hbWUsIGNvbW1vbl9jcHUsICIKKwkJImNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsXG5cdFx0Y29tbW9uX3BpZCwgIgorCQkiY29tbW9uX2NvbW0pXG5cbiIpOworCisJZnByaW50ZihvZnAsICJkZWYgcHJpbnRfaGVhZGVyKCIKKwkJImV2ZW50X25hbWUsIGNwdSwgc2VjcywgbnNlY3MsIHBpZCwgY29tbSk6XG4iCisJCSJcdHByaW50IFwiJSUtMjBzICUlNXUgJSUwNXUuJSUwOXUgJSU4dSAlJS0yMHMgXCIgJSUgXFxcblx0IgorCQkiKGV2ZW50X25hbWUsIGNwdSwgc2VjcywgbnNlY3MsIHBpZCwgY29tbSksXG4iKTsKKworCWZjbG9zZShvZnApOworCisJZnByaW50ZihzdGRlcnIsICJnZW5lcmF0ZWQgUHl0aG9uIHNjcmlwdDogJXNcbiIsIGZuYW1lKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc2NyaXB0aW5nX29wcyBweXRob25fc2NyaXB0aW5nX29wcyA9IHsKKwkubmFtZSA9ICJQeXRob24iLAorCS5zdGFydF9zY3JpcHQgPSBweXRob25fc3RhcnRfc2NyaXB0LAorCS5zdG9wX3NjcmlwdCA9IHB5dGhvbl9zdG9wX3NjcmlwdCwKKwkucHJvY2Vzc19ldmVudCA9IHB5dGhvbl9wcm9jZXNzX2V2ZW50LAorCS5nZW5lcmF0ZV9zY3JpcHQgPSBweXRob25fZ2VuZXJhdGVfc2NyaXB0LAorfTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCmluZGV4IGNlM2E2YzguLjBkZTcyNTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYwpAQCAtMSw1ICsxLDggQEAKKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCisjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIApAQCAtNDksNiArNTIsMTEgQEAKIAlyZXR1cm4gLTE7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHBlcmZfc2Vzc2lvbl9fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCit7CisJcmV0dXJuIG1hcF9ncm91cHNfX2NyZWF0ZV9rZXJuZWxfbWFwcygmc2VsZi0+a21hcHMsIHNlbGYtPnZtbGludXhfbWFwcyk7Cit9CisKIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnBlcmZfc2Vzc2lvbl9fbmV3KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbW9kZSwgYm9vbCBmb3JjZSkKIHsKIAlzaXplX3QgbGVuID0gZmlsZW5hbWUgPyBzdHJsZW4oZmlsZW5hbWUpICsgMSA6IDA7CkBAIC02NiwxMyArNzQsMjIgQEAKIAlzZWxmLT5tbWFwX3dpbmRvdyA9IDMyOwogCXNlbGYtPmN3ZCA9IE5VTEw7CiAJc2VsZi0+Y3dkbGVuID0gMDsKKwlzZWxmLT51bmtub3duX2V2ZW50cyA9IDA7CiAJbWFwX2dyb3Vwc19faW5pdCgmc2VsZi0+a21hcHMpOwogCi0JaWYgKHBlcmZfc2Vzc2lvbl9fY3JlYXRlX2tlcm5lbF9tYXBzKHNlbGYpIDwgMCkKLQkJZ290byBvdXRfZGVsZXRlOworCWlmIChtb2RlID09IE9fUkRPTkxZKSB7CisJCWlmIChwZXJmX3Nlc3Npb25fX29wZW4oc2VsZiwgZm9yY2UpIDwgMCkKKwkJCWdvdG8gb3V0X2RlbGV0ZTsKKwl9IGVsc2UgaWYgKG1vZGUgPT0gT19XUk9OTFkpIHsKKwkJLyoKKwkJICogSW4gT19SRE9OTFkgbW9kZSB0aGlzIHdpbGwgYmUgcGVyZm9ybWVkIHdoZW4gcmVhZGluZyB0aGUKKwkJICoga2VybmVsIE1NQVAgZXZlbnQsIGluIGV2ZW50X19wcm9jZXNzX21tYXAoKS4KKwkJICovCisJCWlmIChwZXJmX3Nlc3Npb25fX2NyZWF0ZV9rZXJuZWxfbWFwcyhzZWxmKSA8IDApCisJCQlnb3RvIG91dF9kZWxldGU7CisJfQogCi0JaWYgKG1vZGUgPT0gT19SRE9OTFkgJiYgcGVyZl9zZXNzaW9uX19vcGVuKHNlbGYsIGZvcmNlKSA8IDApCi0JCWdvdG8gb3V0X2RlbGV0ZTsKKwlzZWxmLT5zYW1wbGVfdHlwZSA9IHBlcmZfaGVhZGVyX19zYW1wbGVfdHlwZSgmc2VsZi0+aGVhZGVyKTsKIG91dDoKIAlyZXR1cm4gc2VsZjsKIG91dF9mcmVlOgpAQCAtMTQ4LDMgKzE2NSw0MDkgQEAKIAogCXJldHVybiBzeW1zOwogfQorCitzdGF0aWMgaW50IHByb2Nlc3NfZXZlbnRfc3R1YihldmVudF90ICpldmVudCBfX3VzZWQsCisJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uIF9fdXNlZCkKK3sKKwlkdW1wX3ByaW50ZigiOiB1bmhhbmRsZWQhXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9vcHNfX2ZpbGxfZGVmYXVsdHMoc3RydWN0IHBlcmZfZXZlbnRfb3BzICpoYW5kbGVyKQoreworCWlmIChoYW5kbGVyLT5zYW1wbGUgPT0gTlVMTCkKKwkJaGFuZGxlci0+c2FtcGxlID0gcHJvY2Vzc19ldmVudF9zdHViOworCWlmIChoYW5kbGVyLT5tbWFwID09IE5VTEwpCisJCWhhbmRsZXItPm1tYXAgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CisJaWYgKGhhbmRsZXItPmNvbW0gPT0gTlVMTCkKKwkJaGFuZGxlci0+Y29tbSA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKKwlpZiAoaGFuZGxlci0+Zm9yayA9PSBOVUxMKQorCQloYW5kbGVyLT5mb3JrID0gcHJvY2Vzc19ldmVudF9zdHViOworCWlmIChoYW5kbGVyLT5leGl0ID09IE5VTEwpCisJCWhhbmRsZXItPmV4aXQgPSBwcm9jZXNzX2V2ZW50X3N0dWI7CisJaWYgKGhhbmRsZXItPmxvc3QgPT0gTlVMTCkKKwkJaGFuZGxlci0+bG9zdCA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKKwlpZiAoaGFuZGxlci0+cmVhZCA9PSBOVUxMKQorCQloYW5kbGVyLT5yZWFkID0gcHJvY2Vzc19ldmVudF9zdHViOworCWlmIChoYW5kbGVyLT50aHJvdHRsZSA9PSBOVUxMKQorCQloYW5kbGVyLT50aHJvdHRsZSA9IHByb2Nlc3NfZXZlbnRfc3R1YjsKKwlpZiAoaGFuZGxlci0+dW50aHJvdHRsZSA9PSBOVUxMKQorCQloYW5kbGVyLT51bnRocm90dGxlID0gcHJvY2Vzc19ldmVudF9zdHViOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZXZlbnRfX25hbWVbXSA9IHsKKwlbMF0JCQkgPSAiVE9UQUwiLAorCVtQRVJGX1JFQ09SRF9NTUFQXQkgPSAiTU1BUCIsCisJW1BFUkZfUkVDT1JEX0xPU1RdCSA9ICJMT1NUIiwKKwlbUEVSRl9SRUNPUkRfQ09NTV0JID0gIkNPTU0iLAorCVtQRVJGX1JFQ09SRF9FWElUXQkgPSAiRVhJVCIsCisJW1BFUkZfUkVDT1JEX1RIUk9UVExFXQkgPSAiVEhST1RUTEUiLAorCVtQRVJGX1JFQ09SRF9VTlRIUk9UVExFXSA9ICJVTlRIUk9UVExFIiwKKwlbUEVSRl9SRUNPUkRfRk9SS10JID0gIkZPUksiLAorCVtQRVJGX1JFQ09SRF9SRUFEXQkgPSAiUkVBRCIsCisJW1BFUkZfUkVDT1JEX1NBTVBMRV0JID0gIlNBTVBMRSIsCit9OworCit1bnNpZ25lZCBsb25nIGV2ZW50X190b3RhbFtQRVJGX1JFQ09SRF9NQVhdOworCit2b2lkIGV2ZW50X19wcmludF90b3RhbHModm9pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgUEVSRl9SRUNPUkRfTUFYOyArK2kpCisJCXByX2luZm8oIiUxMHMgZXZlbnRzOiAlMTBsZFxuIiwKKwkJCWV2ZW50X19uYW1lW2ldLCBldmVudF9fdG90YWxbaV0pOworfQorCit2b2lkIG1lbV9ic3dhcF82NCh2b2lkICpzcmMsIGludCBieXRlX3NpemUpCit7CisJdTY0ICptID0gc3JjOworCisJd2hpbGUgKGJ5dGVfc2l6ZSA+IDApIHsKKwkJKm0gPSBic3dhcF82NCgqbSk7CisJCWJ5dGVfc2l6ZSAtPSBzaXplb2YodTY0KTsKKwkJKyttOworCX0KK30KKworc3RhdGljIHZvaWQgZXZlbnRfX2FsbDY0X3N3YXAoZXZlbnRfdCAqc2VsZikKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIgKmhkciA9ICZzZWxmLT5oZWFkZXI7CisJbWVtX2Jzd2FwXzY0KGhkciArIDEsIHNlbGYtPmhlYWRlci5zaXplIC0gc2l6ZW9mKCpoZHIpKTsKK30KKworc3RhdGljIHZvaWQgZXZlbnRfX2NvbW1fc3dhcChldmVudF90ICpzZWxmKQoreworCXNlbGYtPmNvbW0ucGlkID0gYnN3YXBfMzIoc2VsZi0+Y29tbS5waWQpOworCXNlbGYtPmNvbW0udGlkID0gYnN3YXBfMzIoc2VsZi0+Y29tbS50aWQpOworfQorCitzdGF0aWMgdm9pZCBldmVudF9fbW1hcF9zd2FwKGV2ZW50X3QgKnNlbGYpCit7CisJc2VsZi0+bW1hcC5waWQJID0gYnN3YXBfMzIoc2VsZi0+bW1hcC5waWQpOworCXNlbGYtPm1tYXAudGlkCSA9IGJzd2FwXzMyKHNlbGYtPm1tYXAudGlkKTsKKwlzZWxmLT5tbWFwLnN0YXJ0ID0gYnN3YXBfNjQoc2VsZi0+bW1hcC5zdGFydCk7CisJc2VsZi0+bW1hcC5sZW4JID0gYnN3YXBfNjQoc2VsZi0+bW1hcC5sZW4pOworCXNlbGYtPm1tYXAucGdvZmYgPSBic3dhcF82NChzZWxmLT5tbWFwLnBnb2ZmKTsKK30KKworc3RhdGljIHZvaWQgZXZlbnRfX3Rhc2tfc3dhcChldmVudF90ICpzZWxmKQoreworCXNlbGYtPmZvcmsucGlkCT0gYnN3YXBfMzIoc2VsZi0+Zm9yay5waWQpOworCXNlbGYtPmZvcmsudGlkCT0gYnN3YXBfMzIoc2VsZi0+Zm9yay50aWQpOworCXNlbGYtPmZvcmsucHBpZAk9IGJzd2FwXzMyKHNlbGYtPmZvcmsucHBpZCk7CisJc2VsZi0+Zm9yay5wdGlkCT0gYnN3YXBfMzIoc2VsZi0+Zm9yay5wdGlkKTsKKwlzZWxmLT5mb3JrLnRpbWUJPSBic3dhcF82NChzZWxmLT5mb3JrLnRpbWUpOworfQorCitzdGF0aWMgdm9pZCBldmVudF9fcmVhZF9zd2FwKGV2ZW50X3QgKnNlbGYpCit7CisJc2VsZi0+cmVhZC5waWQJCT0gYnN3YXBfMzIoc2VsZi0+cmVhZC5waWQpOworCXNlbGYtPnJlYWQudGlkCQk9IGJzd2FwXzMyKHNlbGYtPnJlYWQudGlkKTsKKwlzZWxmLT5yZWFkLnZhbHVlCT0gYnN3YXBfNjQoc2VsZi0+cmVhZC52YWx1ZSk7CisJc2VsZi0+cmVhZC50aW1lX2VuYWJsZWQJPSBic3dhcF82NChzZWxmLT5yZWFkLnRpbWVfZW5hYmxlZCk7CisJc2VsZi0+cmVhZC50aW1lX3J1bm5pbmcJPSBic3dhcF82NChzZWxmLT5yZWFkLnRpbWVfcnVubmluZyk7CisJc2VsZi0+cmVhZC5pZAkJPSBic3dhcF82NChzZWxmLT5yZWFkLmlkKTsKK30KKwordHlwZWRlZiB2b2lkICgqZXZlbnRfX3N3YXBfb3ApKGV2ZW50X3QgKnNlbGYpOworCitzdGF0aWMgZXZlbnRfX3N3YXBfb3AgZXZlbnRfX3N3YXBfb3BzW10gPSB7CisJW1BFUkZfUkVDT1JEX01NQVBdICAgPSBldmVudF9fbW1hcF9zd2FwLAorCVtQRVJGX1JFQ09SRF9DT01NXSAgID0gZXZlbnRfX2NvbW1fc3dhcCwKKwlbUEVSRl9SRUNPUkRfRk9SS10gICA9IGV2ZW50X190YXNrX3N3YXAsCisJW1BFUkZfUkVDT1JEX0VYSVRdICAgPSBldmVudF9fdGFza19zd2FwLAorCVtQRVJGX1JFQ09SRF9MT1NUXSAgID0gZXZlbnRfX2FsbDY0X3N3YXAsCisJW1BFUkZfUkVDT1JEX1JFQURdICAgPSBldmVudF9fcmVhZF9zd2FwLAorCVtQRVJGX1JFQ09SRF9TQU1QTEVdID0gZXZlbnRfX2FsbDY0X3N3YXAsCisJW1BFUkZfUkVDT1JEX01BWF0gICAgPSBOVUxMLAorfTsKKworc3RhdGljIGludCBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnQoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCQkgICAgICAgZXZlbnRfdCAqZXZlbnQsCisJCQkJICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X29wcyAqb3BzLAorCQkJCSAgICAgICB1NjQgb2Zmc2V0LCB1NjQgaGVhZCkKK3sKKwl0cmFjZV9ldmVudChldmVudCk7CisKKwlpZiAoZXZlbnQtPmhlYWRlci50eXBlIDwgUEVSRl9SRUNPUkRfTUFYKSB7CisJCWR1bXBfcHJpbnRmKCIlI0x4IFslI3hdOiBQRVJGX1JFQ09SRF8lcyIsCisJCQkgICAgb2Zmc2V0ICsgaGVhZCwgZXZlbnQtPmhlYWRlci5zaXplLAorCQkJICAgIGV2ZW50X19uYW1lW2V2ZW50LT5oZWFkZXIudHlwZV0pOworCQkrK2V2ZW50X190b3RhbFswXTsKKwkJKytldmVudF9fdG90YWxbZXZlbnQtPmhlYWRlci50eXBlXTsKKwl9CisKKwlpZiAoc2VsZi0+aGVhZGVyLm5lZWRzX3N3YXAgJiYgZXZlbnRfX3N3YXBfb3BzW2V2ZW50LT5oZWFkZXIudHlwZV0pCisJCWV2ZW50X19zd2FwX29wc1tldmVudC0+aGVhZGVyLnR5cGVdKGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQtPmhlYWRlci50eXBlKSB7CisJY2FzZSBQRVJGX1JFQ09SRF9TQU1QTEU6CisJCXJldHVybiBvcHMtPnNhbXBsZShldmVudCwgc2VsZik7CisJY2FzZSBQRVJGX1JFQ09SRF9NTUFQOgorCQlyZXR1cm4gb3BzLT5tbWFwKGV2ZW50LCBzZWxmKTsKKwljYXNlIFBFUkZfUkVDT1JEX0NPTU06CisJCXJldHVybiBvcHMtPmNvbW0oZXZlbnQsIHNlbGYpOworCWNhc2UgUEVSRl9SRUNPUkRfRk9SSzoKKwkJcmV0dXJuIG9wcy0+Zm9yayhldmVudCwgc2VsZik7CisJY2FzZSBQRVJGX1JFQ09SRF9FWElUOgorCQlyZXR1cm4gb3BzLT5leGl0KGV2ZW50LCBzZWxmKTsKKwljYXNlIFBFUkZfUkVDT1JEX0xPU1Q6CisJCXJldHVybiBvcHMtPmxvc3QoZXZlbnQsIHNlbGYpOworCWNhc2UgUEVSRl9SRUNPUkRfUkVBRDoKKwkJcmV0dXJuIG9wcy0+cmVhZChldmVudCwgc2VsZik7CisJY2FzZSBQRVJGX1JFQ09SRF9USFJPVFRMRToKKwkJcmV0dXJuIG9wcy0+dGhyb3R0bGUoZXZlbnQsIHNlbGYpOworCWNhc2UgUEVSRl9SRUNPUkRfVU5USFJPVFRMRToKKwkJcmV0dXJuIG9wcy0+dW50aHJvdHRsZShldmVudCwgc2VsZik7CisJZGVmYXVsdDoKKwkJc2VsZi0+dW5rbm93bl9ldmVudHMrKzsKKwkJcmV0dXJuIC0xOworCX0KK30KKwordm9pZCBwZXJmX2V2ZW50X2hlYWRlcl9fYnN3YXAoc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyICpzZWxmKQoreworCXNlbGYtPnR5cGUgPSBic3dhcF8zMihzZWxmLT50eXBlKTsKKwlzZWxmLT5taXNjID0gYnN3YXBfMTYoc2VsZi0+bWlzYyk7CisJc2VsZi0+c2l6ZSA9IGJzd2FwXzE2KHNlbGYtPnNpemUpOworfQorCitpbnQgcGVyZl9oZWFkZXJfX3JlYWRfYnVpbGRfaWRzKHN0cnVjdCBwZXJmX2hlYWRlciAqc2VsZiwKKwkJCQlpbnQgaW5wdXQsIHU2NCBvZmZzZXQsIHU2NCBzaXplKQoreworCXN0cnVjdCBidWlsZF9pZF9ldmVudCBiZXY7CisJY2hhciBmaWxlbmFtZVtQQVRIX01BWF07CisJdTY0IGxpbWl0ID0gb2Zmc2V0ICsgc2l6ZTsKKwlpbnQgZXJyID0gLTE7CisKKwl3aGlsZSAob2Zmc2V0IDwgbGltaXQpIHsKKwkJc3RydWN0IGRzbyAqZHNvOworCQlzc2l6ZV90IGxlbjsKKwkJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZkc29zX191c2VyOworCisJCWlmIChyZWFkKGlucHV0LCAmYmV2LCBzaXplb2YoYmV2KSkgIT0gc2l6ZW9mKGJldikpCisJCQlnb3RvIG91dDsKKworCQlpZiAoc2VsZi0+bmVlZHNfc3dhcCkKKwkJCXBlcmZfZXZlbnRfaGVhZGVyX19ic3dhcCgmYmV2LmhlYWRlcik7CisKKwkJbGVuID0gYmV2LmhlYWRlci5zaXplIC0gc2l6ZW9mKGJldik7CisJCWlmIChyZWFkKGlucHV0LCBmaWxlbmFtZSwgbGVuKSAhPSBsZW4pCisJCQlnb3RvIG91dDsKKworCQlpZiAoYmV2LmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwpCisJCQloZWFkID0gJmRzb3NfX2tlcm5lbDsKKworCQlkc28gPSBfX2Rzb3NfX2ZpbmRuZXcoaGVhZCwgZmlsZW5hbWUpOworCQlpZiAoZHNvICE9IE5VTEwpIHsKKwkJCWRzb19fc2V0X2J1aWxkX2lkKGRzbywgJmJldi5idWlsZF9pZCk7CisJCQlpZiAoaGVhZCA9PSAmZHNvc19fa2VybmVsICYmIGZpbGVuYW1lWzBdID09ICdbJykKKwkJCQlkc28tPmtlcm5lbCA9IDE7CisJCX0KKworCQlvZmZzZXQgKz0gYmV2LmhlYWRlci5zaXplOworCX0KKwllcnIgPSAwOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGhyZWFkICpwZXJmX3Nlc3Npb25fX3JlZ2lzdGVyX2lkbGVfdGhyZWFkKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCit7CisJc3RydWN0IHRocmVhZCAqdGhyZWFkID0gcGVyZl9zZXNzaW9uX19maW5kbmV3KHNlbGYsIDApOworCisJaWYgKHRocmVhZCA9PSBOVUxMIHx8IHRocmVhZF9fc2V0X2NvbW0odGhyZWFkLCAic3dhcHBlciIpKSB7CisJCXByX2VycigicHJvYmxlbSBpbnNlcnRpbmcgaWRsZSB0YXNrLlxuIik7CisJCXRocmVhZCA9IE5VTEw7CisJfQorCisJcmV0dXJuIHRocmVhZDsKK30KKworaW50IF9fcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLAorCQkJCSAgIHU2NCBkYXRhX29mZnNldCwgdTY0IGRhdGFfc2l6ZSwKKwkJCQkgICB1NjQgZmlsZV9zaXplLCBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgKm9wcykKK3sKKwlpbnQgZXJyLCBtbWFwX3Byb3QsIG1tYXBfZmxhZ3M7CisJdTY0IGhlYWQsIHNoaWZ0OworCXU2NCBvZmZzZXQgPSAwOworCXNpemVfdAlwYWdlX3NpemU7CisJZXZlbnRfdCAqZXZlbnQ7CisJdWludDMyX3Qgc2l6ZTsKKwljaGFyICpidWY7CisKKwlwZXJmX2V2ZW50X29wc19fZmlsbF9kZWZhdWx0cyhvcHMpOworCisJcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOworCisJaGVhZCA9IGRhdGFfb2Zmc2V0OworCXNoaWZ0ID0gcGFnZV9zaXplICogKGhlYWQgLyBwYWdlX3NpemUpOworCW9mZnNldCArPSBzaGlmdDsKKwloZWFkIC09IHNoaWZ0OworCisJbW1hcF9wcm90ICA9IFBST1RfUkVBRDsKKwltbWFwX2ZsYWdzID0gTUFQX1NIQVJFRDsKKworCWlmIChzZWxmLT5oZWFkZXIubmVlZHNfc3dhcCkgeworCQltbWFwX3Byb3QgIHw9IFBST1RfV1JJVEU7CisJCW1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURTsKKwl9CityZW1hcDoKKwlidWYgPSBtbWFwKE5VTEwsIHBhZ2Vfc2l6ZSAqIHNlbGYtPm1tYXBfd2luZG93LCBtbWFwX3Byb3QsCisJCSAgIG1tYXBfZmxhZ3MsIHNlbGYtPmZkLCBvZmZzZXQpOworCWlmIChidWYgPT0gTUFQX0ZBSUxFRCkgeworCQlwcl9lcnIoImZhaWxlZCB0byBtbWFwIGZpbGVcbiIpOworCQllcnIgPSAtZXJybm87CisJCWdvdG8gb3V0X2VycjsKKwl9CisKK21vcmU6CisJZXZlbnQgPSAoZXZlbnRfdCAqKShidWYgKyBoZWFkKTsKKworCWlmIChzZWxmLT5oZWFkZXIubmVlZHNfc3dhcCkKKwkJcGVyZl9ldmVudF9oZWFkZXJfX2Jzd2FwKCZldmVudC0+aGVhZGVyKTsKKwlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOworCWlmIChzaXplID09IDApCisJCXNpemUgPSA4OworCisJaWYgKGhlYWQgKyBldmVudC0+aGVhZGVyLnNpemUgPj0gcGFnZV9zaXplICogc2VsZi0+bW1hcF93aW5kb3cpIHsKKwkJaW50IG11bm1hcF9yZXQ7CisKKwkJc2hpZnQgPSBwYWdlX3NpemUgKiAoaGVhZCAvIHBhZ2Vfc2l6ZSk7CisKKwkJbXVubWFwX3JldCA9IG11bm1hcChidWYsIHBhZ2Vfc2l6ZSAqIHNlbGYtPm1tYXBfd2luZG93KTsKKwkJYXNzZXJ0KG11bm1hcF9yZXQgPT0gMCk7CisKKwkJb2Zmc2V0ICs9IHNoaWZ0OworCQloZWFkIC09IHNoaWZ0OworCQlnb3RvIHJlbWFwOworCX0KKworCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7CisKKwlkdW1wX3ByaW50ZigiXG4lI0x4IFslI3hdOiBldmVudDogJWRcbiIsCisJCSAgICBvZmZzZXQgKyBoZWFkLCBldmVudC0+aGVhZGVyLnNpemUsIGV2ZW50LT5oZWFkZXIudHlwZSk7CisKKwlpZiAoc2l6ZSA9PSAwIHx8CisJICAgIHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudChzZWxmLCBldmVudCwgb3BzLCBvZmZzZXQsIGhlYWQpIDwgMCkgeworCQlkdW1wX3ByaW50ZigiJSNMeCBbJSN4XTogc2tpcHBpbmcgdW5rbm93biBoZWFkZXIgdHlwZTogJWRcbiIsCisJCQkgICAgb2Zmc2V0ICsgaGVhZCwgZXZlbnQtPmhlYWRlci5zaXplLAorCQkJICAgIGV2ZW50LT5oZWFkZXIudHlwZSk7CisJCS8qCisJCSAqIGFzc3VtZSB3ZSBsb3N0IHRyYWNrIG9mIHRoZSBzdHJlYW0sIGNoZWNrIGFsaWdubWVudCwgYW5kCisJCSAqIGluY3JlbWVudCBhIHNpbmdsZSB1NjQgaW4gdGhlIGhvcGUgdG8gY2F0Y2ggb24gYWdhaW4gJ3Nvb24nLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KGhlYWQgJiA3KSkKKwkJCWhlYWQgJj0gfjdVTEw7CisKKwkJc2l6ZSA9IDg7CisJfQorCisJaGVhZCArPSBzaXplOworCisJaWYgKG9mZnNldCArIGhlYWQgPj0gZGF0YV9vZmZzZXQgKyBkYXRhX3NpemUpCisJCWdvdG8gZG9uZTsKKworCWlmIChvZmZzZXQgKyBoZWFkIDwgZmlsZV9zaXplKQorCQlnb3RvIG1vcmU7Citkb25lOgorCWVyciA9IDA7CitvdXRfZXJyOgorCXJldHVybiBlcnI7Cit9CisKK2ludCBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCisJCQkJIHN0cnVjdCBwZXJmX2V2ZW50X29wcyAqb3BzKQoreworCWludCBlcnI7CisKKwlpZiAocGVyZl9zZXNzaW9uX19yZWdpc3Rlcl9pZGxlX3RocmVhZChzZWxmKSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICghc3ltYm9sX2NvbmYuZnVsbF9wYXRocykgeworCQljaGFyIGJmW1BBVEhfTUFYXTsKKworCQlpZiAoZ2V0Y3dkKGJmLCBzaXplb2YoYmYpKSA9PSBOVUxMKSB7CisJCQllcnIgPSAtZXJybm87CitvdXRfZ2V0Y3dkX2VycjoKKwkJCXByX2VycigiZmFpbGVkIHRvIGdldCB0aGUgY3VycmVudCBkaXJlY3RvcnlcbiIpOworCQkJZ290byBvdXRfZXJyOworCQl9CisJCXNlbGYtPmN3ZCA9IHN0cmR1cChiZik7CisJCWlmIChzZWxmLT5jd2QgPT0gTlVMTCkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0X2dldGN3ZF9lcnI7CisJCX0KKwkJc2VsZi0+Y3dkbGVuID0gc3RybGVuKHNlbGYtPmN3ZCk7CisJfQorCisJZXJyID0gX19wZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlbGYsIHNlbGYtPmhlYWRlci5kYXRhX29mZnNldCwKKwkJCQkJICAgICBzZWxmLT5oZWFkZXIuZGF0YV9zaXplLAorCQkJCQkgICAgIHNlbGYtPnNpemUsIG9wcyk7CitvdXRfZXJyOgorCXJldHVybiBlcnI7Cit9CisKK2Jvb2wgcGVyZl9zZXNzaW9uX19oYXNfdHJhY2VzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlpZiAoIShzZWxmLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykpIHsKKwkJcHJfZXJyKCJObyB0cmFjZSBzYW1wbGUgdG8gcmVhZC4gRGlkIHlvdSBjYWxsICdwZXJmICVzJz9cbiIsIG1zZyk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworaW50IHBlcmZfc2Vzc2lvbl9fc2V0X2thbGxzeW1zX3JlZl9yZWxvY19zeW0oc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCQkJICAgICBjb25zdCBjaGFyICpzeW1ib2xfbmFtZSwKKwkJCQkJICAgICB1NjQgYWRkcikKK3sKKwljaGFyICpicmFja2V0OworCWVudW0gbWFwX3R5cGUgaTsKKworCXNlbGYtPnJlZl9yZWxvY19zeW0ubmFtZSA9IHN0cmR1cChzeW1ib2xfbmFtZSk7CisJaWYgKHNlbGYtPnJlZl9yZWxvY19zeW0ubmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJyYWNrZXQgPSBzdHJjaHIoc2VsZi0+cmVmX3JlbG9jX3N5bS5uYW1lLCAnXScpOworCWlmIChicmFja2V0KQorCQkqYnJhY2tldCA9ICdcMCc7CisKKwlzZWxmLT5yZWZfcmVsb2Nfc3ltLmFkZHIgPSBhZGRyOworCisJZm9yIChpID0gMDsgaSA8IE1BUF9fTlJfVFlQRVM7ICsraSkgeworCQlzdHJ1Y3Qga21hcCAqa21hcCA9IG1hcF9fa21hcChzZWxmLT52bWxpbnV4X21hcHNbaV0pOworCQlrbWFwLT5yZWZfcmVsb2Nfc3ltID0gJnNlbGYtPnJlZl9yZWxvY19zeW07CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1NjQgbWFwX19yZWxvY19tYXBfaXAoc3RydWN0IG1hcCAqbWFwLCB1NjQgaXApCit7CisJcmV0dXJuIGlwICsgKHM2NCltYXAtPnBnb2ZmOworfQorCitzdGF0aWMgdTY0IG1hcF9fcmVsb2NfdW5tYXBfaXAoc3RydWN0IG1hcCAqbWFwLCB1NjQgaXApCit7CisJcmV0dXJuIGlwIC0gKHM2NCltYXAtPnBnb2ZmOworfQorCit2b2lkIG1hcF9fcmVsb2Nfdm1saW51eChzdHJ1Y3QgbWFwICpzZWxmKQoreworCXN0cnVjdCBrbWFwICprbWFwID0gbWFwX19rbWFwKHNlbGYpOworCXM2NCByZWxvYzsKKworCWlmICgha21hcC0+cmVmX3JlbG9jX3N5bSB8fCAha21hcC0+cmVmX3JlbG9jX3N5bS0+dW5yZWxvY2F0ZWRfYWRkcikKKwkJcmV0dXJuOworCisJcmVsb2MgPSAoa21hcC0+cmVmX3JlbG9jX3N5bS0+dW5yZWxvY2F0ZWRfYWRkciAtCisJCSBrbWFwLT5yZWZfcmVsb2Nfc3ltLT5hZGRyKTsKKworCWlmICghcmVsb2MpCisJCXJldHVybjsKKworCXNlbGYtPm1hcF9pcCAgID0gbWFwX19yZWxvY19tYXBfaXA7CisJc2VsZi0+dW5tYXBfaXAgPSBtYXBfX3JlbG9jX3VubWFwX2lwOworCXNlbGYtPnBnb2ZmICAgID0gcmVsb2M7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uaAppbmRleCAzMmVhYTFiLi4zMTk1MGZjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmgKQEAgLTMsMTMgKzMsMTMgQEAKIAogI2luY2x1ZGUgImV2ZW50LmgiCiAjaW5jbHVkZSAiaGVhZGVyLmgiCisjaW5jbHVkZSAic3ltYm9sLmgiCiAjaW5jbHVkZSAidGhyZWFkLmgiCiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgiCiAKIHN0cnVjdCBpcF9jYWxsY2hhaW47CiBzdHJ1Y3QgdGhyZWFkOwotc3RydWN0IHN5bWJvbDsKIAogc3RydWN0IHBlcmZfc2Vzc2lvbiB7CiAJc3RydWN0IHBlcmZfaGVhZGVyCWhlYWRlcjsKQEAgLTE4LDEwICsxOCwxMyBAQAogCXN0cnVjdCBtYXBfZ3JvdXBzCWttYXBzOwogCXN0cnVjdCByYl9yb290CQl0aHJlYWRzOwogCXN0cnVjdCB0aHJlYWQJCSpsYXN0X21hdGNoOworCXN0cnVjdCBtYXAJCSp2bWxpbnV4X21hcHNbTUFQX19OUl9UWVBFU107CiAJc3RydWN0IGV2ZW50c19zdGF0cwlldmVudHNfc3RhdHM7CiAJdW5zaWduZWQgbG9uZwkJZXZlbnRfdG90YWxbUEVSRl9SRUNPUkRfTUFYXTsKKwl1bnNpZ25lZCBsb25nCQl1bmtub3duX2V2ZW50czsKIAlzdHJ1Y3QgcmJfcm9vdAkJaGlzdHM7CiAJdTY0CQkJc2FtcGxlX3R5cGU7CisJc3RydWN0IHJlZl9yZWxvY19zeW0JcmVmX3JlbG9jX3N5bTsKIAlpbnQJCQlmZDsKIAlpbnQJCQljd2RsZW47CiAJY2hhcgkJCSpjd2Q7CkBAIC0zMSwyMyArMzQsMjUgQEAKIHR5cGVkZWYgaW50ICgqZXZlbnRfb3ApKGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogCiBzdHJ1Y3QgcGVyZl9ldmVudF9vcHMgewotCWV2ZW50X29wCXByb2Nlc3Nfc2FtcGxlX2V2ZW50OwotCWV2ZW50X29wCXByb2Nlc3NfbW1hcF9ldmVudDsKLQlldmVudF9vcAlwcm9jZXNzX2NvbW1fZXZlbnQ7Ci0JZXZlbnRfb3AJcHJvY2Vzc19mb3JrX2V2ZW50OwotCWV2ZW50X29wCXByb2Nlc3NfZXhpdF9ldmVudDsKLQlldmVudF9vcAlwcm9jZXNzX2xvc3RfZXZlbnQ7Ci0JZXZlbnRfb3AJcHJvY2Vzc19yZWFkX2V2ZW50OwotCWV2ZW50X29wCXByb2Nlc3NfdGhyb3R0bGVfZXZlbnQ7Ci0JZXZlbnRfb3AJcHJvY2Vzc191bnRocm90dGxlX2V2ZW50OwotCWludAkJKCpzYW1wbGVfdHlwZV9jaGVjaykoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7Ci0JdW5zaWduZWQgbG9uZwl0b3RhbF91bmtub3duOwotCWJvb2wJCWZ1bGxfcGF0aHM7CisJZXZlbnRfb3Agc2FtcGxlLAorCQkgbW1hcCwKKwkJIGNvbW0sCisJCSBmb3JrLAorCQkgZXhpdCwKKwkJIGxvc3QsCisJCSByZWFkLAorCQkgdGhyb3R0bGUsCisJCSB1bnRocm90dGxlOwogfTsKIAogc3RydWN0IHBlcmZfc2Vzc2lvbiAqcGVyZl9zZXNzaW9uX19uZXcoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBtb2RlLCBib29sIGZvcmNlKTsKIHZvaWQgcGVyZl9zZXNzaW9uX19kZWxldGUoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZik7CiAKK3ZvaWQgcGVyZl9ldmVudF9oZWFkZXJfX2Jzd2FwKHN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciAqc2VsZik7CisKK2ludCBfX3BlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwKKwkJCQkgICB1NjQgZGF0YV9vZmZzZXQsIHU2NCBkYXRhX3NpemUsIHU2NCBzaXplLAorCQkJCSAgIHN0cnVjdCBwZXJmX2V2ZW50X29wcyAqb3BzKTsKIGludCBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCiAJCQkJIHN0cnVjdCBwZXJmX2V2ZW50X29wcyAqZXZlbnRfb3BzKTsKIApAQCAtNTYsNiArNjEsMjggQEAKIAkJCQkJCXN0cnVjdCBpcF9jYWxsY2hhaW4gKmNoYWluLAogCQkJCQkJc3RydWN0IHN5bWJvbCAqKnBhcmVudCk7CiAKLWludCBwZXJmX2hlYWRlcl9fcmVhZF9idWlsZF9pZHMoaW50IGlucHV0LCB1NjQgb2Zmc2V0LCB1NjQgZmlsZV9zaXplKTsKK2Jvb2wgcGVyZl9zZXNzaW9uX19oYXNfdHJhY2VzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsIGNvbnN0IGNoYXIgKm1zZyk7CiAKK2ludCBwZXJmX2hlYWRlcl9fcmVhZF9idWlsZF9pZHMoc3RydWN0IHBlcmZfaGVhZGVyICpzZWxmLCBpbnQgaW5wdXQsCisJCQkJdTY0IG9mZnNldCwgdTY0IGZpbGVfc2l6ZSk7CisKK2ludCBwZXJmX3Nlc3Npb25fX3NldF9rYWxsc3ltc19yZWZfcmVsb2Nfc3ltKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCisJCQkJCSAgICAgY29uc3QgY2hhciAqc3ltYm9sX25hbWUsCisJCQkJCSAgICAgdTY0IGFkZHIpOworCit2b2lkIG1lbV9ic3dhcF82NCh2b2lkICpzcmMsIGludCBieXRlX3NpemUpOworCitzdGF0aWMgaW5saW5lIGludCBfX3BlcmZfc2Vzc2lvbl9fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCisJCQkJCQlzdHJ1Y3QgZHNvICprZXJuZWwpCit7CisJcmV0dXJuIF9fbWFwX2dyb3Vwc19fY3JlYXRlX2tlcm5lbF9tYXBzKCZzZWxmLT5rbWFwcywKKwkJCQkJCXNlbGYtPnZtbGludXhfbWFwcywga2VybmVsKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWFwICoKKwlwZXJmX3Nlc3Npb25fX25ld19tb2R1bGVfbWFwKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsCisJCQkJICAgICB1NjQgc3RhcnQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXJldHVybiBtYXBfZ3JvdXBzX19uZXdfbW9kdWxlKCZzZWxmLT5rbWFwcywgc3RhcnQsIGZpbGVuYW1lKTsKK30KICNlbmRpZiAvKiBfX1BFUkZfU0VTU0lPTl9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3RyaW5nLmMgYi90b29scy9wZXJmL3V0aWwvc3RyaW5nLmMKaW5kZXggNTM1MmQ3ZC4uYzM5N2Q0ZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N0cmluZy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuYwpAQCAtMjI3LDE2ICsyMjcsNzMgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotLyogR2xvYiBleHByZXNzaW9uIHBhdHRlcm4gbWF0Y2hpbmcgKi8KKy8qIENoYXJhY3RlciBjbGFzcyBtYXRjaGluZyAqLworc3RhdGljIGJvb2wgX19tYXRjaF9jaGFyY2xhc3MoY29uc3QgY2hhciAqcGF0LCBjaGFyIGMsIGNvbnN0IGNoYXIgKipucGF0KQoreworCWJvb2wgY29tcGxlbWVudCA9IGZhbHNlLCByZXQgPSB0cnVlOworCisJaWYgKCpwYXQgPT0gJyEnKSB7CisJCWNvbXBsZW1lbnQgPSB0cnVlOworCQlwYXQrKzsKKwl9CisJaWYgKCpwYXQrKyA9PSBjKQkvKiBGaXJzdCBjaGFyYWN0ZXIgaXMgc3BlY2lhbCAqLworCQlnb3RvIGVuZDsKKworCXdoaWxlICgqcGF0ICYmICpwYXQgIT0gJ10nKSB7CS8qIE1hdGNoaW5nICovCisJCWlmICgqcGF0ID09ICctJyAmJiAqKHBhdCArIDEpICE9ICddJykgewkvKiBSYW5nZSAqLworCQkJaWYgKCoocGF0IC0gMSkgPD0gYyAmJiBjIDw9ICoocGF0ICsgMSkpCisJCQkJZ290byBlbmQ7CisJCQlpZiAoKihwYXQgLSAxKSA+ICoocGF0ICsgMSkpCisJCQkJZ290byBlcnJvcjsKKwkJCXBhdCArPSAyOworCQl9IGVsc2UgaWYgKCpwYXQrKyA9PSBjKQorCQkJZ290byBlbmQ7CisJfQorCWlmICghKnBhdCkKKwkJZ290byBlcnJvcjsKKwlyZXQgPSBmYWxzZTsKKworZW5kOgorCXdoaWxlICgqcGF0ICYmICpwYXQgIT0gJ10nKQkvKiBTZWFyY2hpbmcgY2xvc2luZyAqLworCQlwYXQrKzsKKwlpZiAoISpwYXQpCisJCWdvdG8gZXJyb3I7CisJKm5wYXQgPSBwYXQgKyAxOworCXJldHVybiBjb21wbGVtZW50ID8gIXJldCA6IHJldDsKKworZXJyb3I6CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHN0cmdsb2JtYXRjaCAtIGdsb2IgZXhwcmVzc2lvbiBwYXR0ZXJuIG1hdGNoaW5nCisgKiBAc3RyOiB0aGUgdGFyZ2V0IHN0cmluZyB0byBtYXRjaAorICogQHBhdDogdGhlIHBhdHRlcm4gc3RyaW5nIHRvIG1hdGNoCisgKgorICogVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIEBzdHIgbWF0Y2hlcyBAcGF0LiBAcGF0IGNhbiBpbmNsdWRlcyB3aWxkY2FyZHMKKyAqICgnKicsJz8nKSBhbmQgY2hhcmFjdGVyIGNsYXNzZXMgKFtDSEFSU10sIGNvbXBsZW1lbnRhdGlvbiBhbmQgcmFuZ2VzIGFyZQorICogYWxzbyBzdXBwb3J0ZWQpLiBBbHNvLCB0aGlzIHN1cHBvcnRzIGVzY2FwZSBjaGFyYWN0ZXIgKCdcJykgdG8gdXNlIHNwZWNpYWwKKyAqIGNoYXJhY3RlcnMgYXMgbm9ybWFsIGNoYXJhY3Rlci4KKyAqCisgKiBOb3RlOiBpZiBAcGF0IHN5bnRheCBpcyBicm9rZW4sIHRoaXMgYWx3YXlzIHJldHVybnMgZmFsc2UuCisgKi8KIGJvb2wgc3RyZ2xvYm1hdGNoKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQogewogCXdoaWxlICgqc3RyICYmICpwYXQgJiYgKnBhdCAhPSAnKicpIHsKLQkJaWYgKCpwYXQgPT0gJz8nKSB7CisJCWlmICgqcGF0ID09ICc/JykgewkvKiBNYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyICovCiAJCQlzdHIrKzsKIAkJCXBhdCsrOwotCQl9IGVsc2UKLQkJCWlmICgqc3RyKysgIT0gKnBhdCsrKQorCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoKnBhdCA9PSAnWycpCS8qIENoYXJhY3RlciBjbGFzc2VzL1JhbmdlcyAqLworCQkJaWYgKF9fbWF0Y2hfY2hhcmNsYXNzKHBhdCArIDEsICpzdHIsICZwYXQpKSB7CisJCQkJc3RyKys7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UKIAkJCQlyZXR1cm4gZmFsc2U7CisJCWVsc2UgaWYgKCpwYXQgPT0gJ1xcJykgLyogRXNjYXBlZCBjaGFyIG1hdGNoIGFzIG5vcm1hbCBjaGFyICovCisJCQlwYXQrKzsKKwkJaWYgKCpzdHIrKyAhPSAqcGF0KyspCisJCQlyZXR1cm4gZmFsc2U7CiAJfQogCS8qIENoZWNrIHdpbGQgY2FyZCAqLwogCWlmICgqcGF0ID09ICcqJykgewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCmluZGV4IGFiOTI3NjMuLjMyM2MwYWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKQEAgLTEsNiArMSw1IEBACiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgIi4uL3BlcmYuaCIKLSNpbmNsdWRlICJzZXNzaW9uLmgiCiAjaW5jbHVkZSAic29ydC5oIgogI2luY2x1ZGUgInN0cmluZy5oIgogI2luY2x1ZGUgInN5bWJvbC5oIgpAQCAtMjIsNiArMjEsNyBAQAogZW51bSBkc29fb3JpZ2luIHsKIAlEU09fX09SSUdfS0VSTkVMID0gMCwKIAlEU09fX09SSUdfSkFWQV9KSVQsCisJRFNPX19PUklHX0JVSUxEX0lEX0NBQ0hFLAogCURTT19fT1JJR19GRURPUkEsCiAJRFNPX19PUklHX1VCVU5UVSwKIAlEU09fX09SSUdfQlVJTERJRCwKQEAgLTMzLDcgKzMzLDcgQEAKIHN0YXRpYyB2b2lkIGRzb3NfX2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgZHNvICpkc28pOwogc3RhdGljIHN0cnVjdCBtYXAgKm1hcF9fbmV3Mih1NjQgc3RhcnQsIHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlKTsKIHN0YXRpYyBpbnQgZHNvX19sb2FkX2tlcm5lbF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAotCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOworCQkJCXN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwogc3RhdGljIGludCB2bWxpbnV4X3BhdGhfX25yX2VudHJpZXM7CiBzdGF0aWMgY2hhciAqKnZtbGludXhfcGF0aDsKIApAQCAtNTMsMTcgKzUzLDEyIEBACiAJcmV0dXJuIHNlbGYtPnNvcnRlZF9ieV9uYW1lICYgKDEgPDwgdHlwZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRzb19fc2V0X2xvYWRlZChzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCi17Ci0Jc2VsZi0+bG9hZGVkIHw9ICgxIDw8IHR5cGUpOwotfQotCiBzdGF0aWMgdm9pZCBkc29fX3NldF9zb3J0ZWRfYnlfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCiB7CiAJc2VsZi0+c29ydGVkX2J5X25hbWUgfD0gKDEgPDwgdHlwZSk7CiB9CiAKLXN0YXRpYyBib29sIHN5bWJvbF90eXBlX19pc19hKGNoYXIgc3ltYm9sX3R5cGUsIGVudW0gbWFwX3R5cGUgbWFwX3R5cGUpCitib29sIHN5bWJvbF90eXBlX19pc19hKGNoYXIgc3ltYm9sX3R5cGUsIGVudW0gbWFwX3R5cGUgbWFwX3R5cGUpCiB7CiAJc3dpdGNoIChtYXBfdHlwZSkgewogCWNhc2UgTUFQX19GVU5DVElPTjoKQEAgLTE0MiwxNCArMTM3LDE0IEBACiAJc2VsZi0+c3RhcnQgPSBzdGFydDsKIAlzZWxmLT5lbmQgICA9IGxlbiA/IHN0YXJ0ICsgbGVuIC0gMSA6IHN0YXJ0OwogCi0JcHJfZGVidWczKCIlczogJXMgJSNMeC0lI0x4XG4iLCBfX2Z1bmNfXywgbmFtZSwgc3RhcnQsIHNlbGYtPmVuZCk7CisJcHJfZGVidWc0KCIlczogJXMgJSNMeC0lI0x4XG4iLCBfX2Z1bmNfXywgbmFtZSwgc3RhcnQsIHNlbGYtPmVuZCk7CiAKIAltZW1jcHkoc2VsZi0+bmFtZSwgbmFtZSwgbmFtZWxlbik7CiAKIAlyZXR1cm4gc2VsZjsKIH0KIAotc3RhdGljIHZvaWQgc3ltYm9sX19kZWxldGUoc3RydWN0IHN5bWJvbCAqc2VsZikKK3ZvaWQgc3ltYm9sX19kZWxldGUoc3RydWN0IHN5bWJvbCAqc2VsZikKIHsKIAlmcmVlKCgodm9pZCAqKXNlbGYpIC0gc3ltYm9sX2NvbmYucHJpdl9zaXplKTsKIH0KQEAgLTE2MCw3ICsxNTUsNyBAQAogCQkgICAgICAgc2VsZi0+c3RhcnQsIHNlbGYtPmVuZCwgc2VsZi0+bmFtZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRzb19fc2V0X2xvbmdfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBjaGFyICpuYW1lKQordm9pZCBkc29fX3NldF9sb25nX25hbWUoc3RydWN0IGRzbyAqc2VsZiwgY2hhciAqbmFtZSkKIHsKIAlpZiAobmFtZSA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC0xNzUsNyArMTcwLDcgQEAKIAogc3RydWN0IGRzbyAqZHNvX19uZXcoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgZHNvICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikgKyBzdHJsZW4obmFtZSkgKyAxKTsKKwlzdHJ1Y3QgZHNvICpzZWxmID0gemFsbG9jKHNpemVvZigqc2VsZikgKyBzdHJsZW4obmFtZSkgKyAxKTsKIAogCWlmIChzZWxmICE9IE5VTEwpIHsKIAkJaW50IGk7CkBAIC0zNDQsMTAgKzMzOSwxMCBAQAogCQkJCSAgICAgJnNlbGYtPnN5bWJvbHNbdHlwZV0pOwogfQogCi1pbnQgYnVpbGRfaWRfX3NwcmludGYodTggKnNlbGYsIGludCBsZW4sIGNoYXIgKmJmKQoraW50IGJ1aWxkX2lkX19zcHJpbnRmKGNvbnN0IHU4ICpzZWxmLCBpbnQgbGVuLCBjaGFyICpiZikKIHsKIAljaGFyICpiaWQgPSBiZjsKLQl1OCAqcmF3ID0gc2VsZjsKKwljb25zdCB1OCAqcmF3ID0gc2VsZjsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgewpAQCAtMzcyLDYgKzM2NywxMCBAQAogCXN0cnVjdCByYl9ub2RlICpuZDsKIAlzaXplX3QgcmV0ID0gZnByaW50ZihmcCwgImRzbzogJXMgKCIsIHNlbGYtPnNob3J0X25hbWUpOwogCisJaWYgKHNlbGYtPnNob3J0X25hbWUgIT0gc2VsZi0+bG9uZ19uYW1lKQorCQlyZXQgKz0gZnByaW50ZihmcCwgIiVzLCAiLCBzZWxmLT5sb25nX25hbWUpOworCXJldCArPSBmcHJpbnRmKGZwLCAiJXMsICVzbG9hZGVkLCAiLCBtYXBfdHlwZV9fbmFtZVt0eXBlXSwKKwkJICAgICAgIHNlbGYtPmxvYWRlZCA/ICIiIDogIk5PVCAiKTsKIAlyZXQgKz0gZHNvX19mcHJpbnRmX2J1aWxkaWQoc2VsZiwgZnApOwogCXJldCArPSBmcHJpbnRmKGZwLCAiKVxuIik7CiAJZm9yIChuZCA9IHJiX2ZpcnN0KCZzZWxmLT5zeW1ib2xzW3R5cGVdKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKQEAgLTM4MiwyNCArMzgxLDIwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIExvYWRzIHRoZSBmdW5jdGlvbiBlbnRyaWVzIGluIC9wcm9jL2thbGxzeW1zIGludG8ga2VybmVsX21hcC0+ZHNvLAotICogc28gdGhhdCB3ZSBjYW4gaW4gdGhlIG5leHQgc3RlcCBzZXQgdGhlIHN5bWJvbCAtPmVuZCBhZGRyZXNzIGFuZCB0aGVuCi0gKiBjYWxsIGtlcm5lbF9tYXBzX19zcGxpdF9rYWxsc3ltcy4KLSAqLwotc3RhdGljIGludCBkc29fX2xvYWRfYWxsX2thbGxzeW1zKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCkKK2ludCBrYWxsc3ltc19fcGFyc2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQgKmFyZywKKwkJICAgIGludCAoKnByb2Nlc3Nfc3ltYm9sKSh2b2lkICphcmcsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCQkgICAgIGNoYXIgdHlwZSwgdTY0IHN0YXJ0KSkKIHsKIAljaGFyICpsaW5lID0gTlVMTDsKIAlzaXplX3QgbjsKLQlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZzZWxmLT5zeW1ib2xzW21hcC0+dHlwZV07Ci0JRklMRSAqZmlsZSA9IGZvcGVuKCIvcHJvYy9rYWxsc3ltcyIsICJyIik7CisJaW50IGVyciA9IDA7CisJRklMRSAqZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwogCiAJaWYgKGZpbGUgPT0gTlVMTCkKIAkJZ290byBvdXRfZmFpbHVyZTsKIAogCXdoaWxlICghZmVvZihmaWxlKSkgewogCQl1NjQgc3RhcnQ7Ci0JCXN0cnVjdCBzeW1ib2wgKnN5bTsKIAkJaW50IGxpbmVfbGVuLCBsZW47CiAJCWNoYXIgc3ltYm9sX3R5cGU7CiAJCWNoYXIgKnN5bWJvbF9uYW1lOwpAQCAtNDIwLDQzICs0MTUsNzIgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXN5bWJvbF90eXBlID0gdG91cHBlcihsaW5lW2xlbl0pOwotCQlpZiAoIXN5bWJvbF90eXBlX19pc19hKHN5bWJvbF90eXBlLCBtYXAtPnR5cGUpKQotCQkJY29udGludWU7Ci0KIAkJc3ltYm9sX25hbWUgPSBsaW5lICsgbGVuICsgMjsKLQkJLyoKLQkJICogV2lsbCBmaXggdXAgdGhlIGVuZCBsYXRlciwgd2hlbiB3ZSBoYXZlIGFsbCBzeW1ib2xzIHNvcnRlZC4KLQkJICovCi0JCXN5bSA9IHN5bWJvbF9fbmV3KHN0YXJ0LCAwLCBzeW1ib2xfbmFtZSk7CiAKLQkJaWYgKHN5bSA9PSBOVUxMKQotCQkJZ290byBvdXRfZGVsZXRlX2xpbmU7Ci0JCS8qCi0JCSAqIFdlIHdpbGwgcGFzcyB0aGUgc3ltYm9scyB0byB0aGUgZmlsdGVyIGxhdGVyLCBpbgotCQkgKiBtYXBfX3NwbGl0X2thbGxzeW1zLCB3aGVuIHdlIGhhdmUgc3BsaXQgdGhlIG1hcHMgcGVyIG1vZHVsZQotCQkgKi8KLQkJc3ltYm9sc19faW5zZXJ0KHJvb3QsIHN5bSk7CisJCWVyciA9IHByb2Nlc3Nfc3ltYm9sKGFyZywgc3ltYm9sX25hbWUsIHN5bWJvbF90eXBlLCBzdGFydCk7CisJCWlmIChlcnIpCisJCQlicmVhazsKIAl9CiAKIAlmcmVlKGxpbmUpOwogCWZjbG9zZShmaWxlKTsKKwlyZXR1cm4gZXJyOwogCi0JcmV0dXJuIDA7Ci0KLW91dF9kZWxldGVfbGluZToKLQlmcmVlKGxpbmUpOwogb3V0X2ZhaWx1cmU6CiAJcmV0dXJuIC0xOwogfQogCitzdHJ1Y3QgcHJvY2Vzc19rYWxsc3ltc19hcmdzIHsKKwlzdHJ1Y3QgbWFwICptYXA7CisJc3RydWN0IGRzbyAqZHNvOworfTsKKworc3RhdGljIGludCBtYXBfX3Byb2Nlc3Nfa2FsbHN5bV9zeW1ib2wodm9pZCAqYXJnLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICAgICBjaGFyIHR5cGUsIHU2NCBzdGFydCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IHByb2Nlc3Nfa2FsbHN5bXNfYXJncyAqYSA9IGFyZzsKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZhLT5kc28tPnN5bWJvbHNbYS0+bWFwLT50eXBlXTsKKworCWlmICghc3ltYm9sX3R5cGVfX2lzX2EodHlwZSwgYS0+bWFwLT50eXBlKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFdpbGwgZml4IHVwIHRoZSBlbmQgbGF0ZXIsIHdoZW4gd2UgaGF2ZSBhbGwgc3ltYm9scyBzb3J0ZWQuCisJICovCisJc3ltID0gc3ltYm9sX19uZXcoc3RhcnQsIDAsIG5hbWUpOworCisJaWYgKHN5bSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKgorCSAqIFdlIHdpbGwgcGFzcyB0aGUgc3ltYm9scyB0byB0aGUgZmlsdGVyIGxhdGVyLCBpbgorCSAqIG1hcF9fc3BsaXRfa2FsbHN5bXMsIHdoZW4gd2UgaGF2ZSBzcGxpdCB0aGUgbWFwcyBwZXIgbW9kdWxlCisJICovCisJc3ltYm9sc19faW5zZXJ0KHJvb3QsIHN5bSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBMb2FkcyB0aGUgZnVuY3Rpb24gZW50cmllcyBpbiAvcHJvYy9rYWxsc3ltcyBpbnRvIGtlcm5lbF9tYXAtPmRzbywKKyAqIHNvIHRoYXQgd2UgY2FuIGluIHRoZSBuZXh0IHN0ZXAgc2V0IHRoZSBzeW1ib2wgLT5lbmQgYWRkcmVzcyBhbmQgdGhlbgorICogY2FsbCBrZXJuZWxfbWFwc19fc3BsaXRfa2FsbHN5bXMuCisgKi8KK3N0YXRpYyBpbnQgZHNvX19sb2FkX2FsbF9rYWxsc3ltcyhzdHJ1Y3QgZHNvICpzZWxmLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkgIHN0cnVjdCBtYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19rYWxsc3ltc19hcmdzIGFyZ3MgPSB7IC5tYXAgPSBtYXAsIC5kc28gPSBzZWxmLCB9OworCXJldHVybiBrYWxsc3ltc19fcGFyc2UoZmlsZW5hbWUsICZhcmdzLCBtYXBfX3Byb2Nlc3Nfa2FsbHN5bV9zeW1ib2wpOworfQorCiAvKgogICogU3BsaXQgdGhlIHN5bWJvbHMgaW50byBtYXBzLCBtYWtpbmcgc3VyZSB0aGVyZSBhcmUgbm8gb3ZlcmxhcHMsIGkuZS4gdGhlCiAgKiBrZXJuZWwgcmFuZ2UgaXMgYnJva2VuIGluIHNldmVyYWwgbWFwcywgbmFtZWQgW2tlcm5lbF0uTiwgYXMgd2UgZG9uJ3QgaGF2ZQogICogdGhlIG9yaWdpbmFsIEVMRiBzZWN0aW9uIG5hbWVzIHZtbGludXggaGF2ZS4KICAqLwogc3RhdGljIGludCBkc29fX3NwbGl0X2thbGxzeW1zKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKLQkJCSAgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQorCQkJICAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CisJc3RydWN0IG1hcF9ncm91cHMgKmttYXBzID0gbWFwX19rbWFwKG1hcCktPmttYXBzOwogCXN0cnVjdCBtYXAgKmN1cnJfbWFwID0gbWFwOwogCXN0cnVjdCBzeW1ib2wgKnBvczsKIAlpbnQgY291bnQgPSAwOwpAQCAtNDc3LDEzICs1MDEsMTcgQEAKIAogCQkJKm1vZHVsZSsrID0gJ1wwJzsKIAotCQkJaWYgKHN0cmNtcChzZWxmLT5uYW1lLCBtb2R1bGUpKSB7Ci0JCQkJY3Vycl9tYXAgPSBtYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoJnNlc3Npb24tPmttYXBzLCBtYXAtPnR5cGUsIG1vZHVsZSk7CisJCQlpZiAoc3RyY21wKGN1cnJfbWFwLT5kc28tPnNob3J0X25hbWUsIG1vZHVsZSkpIHsKKwkJCQljdXJyX21hcCA9IG1hcF9ncm91cHNfX2ZpbmRfYnlfbmFtZShrbWFwcywgbWFwLT50eXBlLCBtb2R1bGUpOwogCQkJCWlmIChjdXJyX21hcCA9PSBOVUxMKSB7CiAJCQkJCXByX2RlYnVnKCIvcHJvYy97a2FsbHN5bXMsbW9kdWxlc30gIgotCQkJCQkgICAgICAgICAiaW5jb25zaXN0ZW5jeSFcbiIpOworCQkJCQkgICAgICAgICAiaW5jb25zaXN0ZW5jeSB3aGlsZSBsb29raW5nICIKKwkJCQkJCSAiZm9yIFwiJXNcIiBtb2R1bGUhXG4iLCBtb2R1bGUpOwogCQkJCQlyZXR1cm4gLTE7CiAJCQkJfQorCisJCQkJaWYgKGN1cnJfbWFwLT5kc28tPmxvYWRlZCkKKwkJCQkJZ290byBkaXNjYXJkX3N5bWJvbDsKIAkJCX0KIAkJCS8qCiAJCQkgKiBTbyB0aGF0IHdlIGxvb2sganVzdCBsaWtlIHdlIGdldCBmcm9tIC5rbyBmaWxlcywKQEAgLTUwMywxMyArNTMxLDEzIEBACiAJCQkJcmV0dXJuIC0xOwogCiAJCQljdXJyX21hcCA9IG1hcF9fbmV3Mihwb3MtPnN0YXJ0LCBkc28sIG1hcC0+dHlwZSk7Ci0JCQlpZiAobWFwID09IE5VTEwpIHsKKwkJCWlmIChjdXJyX21hcCA9PSBOVUxMKSB7CiAJCQkJZHNvX19kZWxldGUoZHNvKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAKIAkJCWN1cnJfbWFwLT5tYXBfaXAgPSBjdXJyX21hcC0+dW5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOwotCQkJbWFwX2dyb3Vwc19faW5zZXJ0KCZzZXNzaW9uLT5rbWFwcywgY3Vycl9tYXApOworCQkJbWFwX2dyb3Vwc19faW5zZXJ0KGttYXBzLCBjdXJyX21hcCk7CiAJCQkrK2tlcm5lbF9yYW5nZTsKIAkJfQogCkBAIC01MjgsMTcgKzU1NiwxNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotCi1zdGF0aWMgaW50IGRzb19fbG9hZF9rYWxsc3ltcyhzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCi0JCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQoraW50IGRzb19fbG9hZF9rYWxsc3ltcyhzdHJ1Y3QgZHNvICpzZWxmLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJICAgICAgIHN0cnVjdCBtYXAgKm1hcCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKLQlpZiAoZHNvX19sb2FkX2FsbF9rYWxsc3ltcyhzZWxmLCBtYXApIDwgMCkKKwlpZiAoZHNvX19sb2FkX2FsbF9rYWxsc3ltcyhzZWxmLCBmaWxlbmFtZSwgbWFwKSA8IDApCiAJCXJldHVybiAtMTsKIAogCXN5bWJvbHNfX2ZpeHVwX2VuZCgmc2VsZi0+c3ltYm9sc1ttYXAtPnR5cGVdKTsKIAlzZWxmLT5vcmlnaW4gPSBEU09fX09SSUdfS0VSTkVMOwogCi0JcmV0dXJuIGRzb19fc3BsaXRfa2FsbHN5bXMoc2VsZiwgbWFwLCBzZXNzaW9uLCBmaWx0ZXIpOworCXJldHVybiBkc29fX3NwbGl0X2thbGxzeW1zKHNlbGYsIG1hcCwgZmlsdGVyKTsKIH0KIAogc3RhdGljIGludCBkc29fX2xvYWRfcGVyZl9tYXAoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLApAQCAtODY0LDEwICs4OTEsMTAgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZHNvX19sb2FkX3N5bShzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCi0JCQkgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgY29uc3QgY2hhciAqbmFtZSwgaW50IGZkLAotCQkJIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCBrZXJuZWwsIGludCBrbW9kdWxlKQorc3RhdGljIGludCBkc29fX2xvYWRfc3ltKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSBpbnQgZmQsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCBrbW9kdWxlKQogeworCXN0cnVjdCBrbWFwICprbWFwID0gc2VsZi0+a2VybmVsID8gbWFwX19rbWFwKG1hcCkgOiBOVUxMOwogCXN0cnVjdCBtYXAgKmN1cnJfbWFwID0gbWFwOwogCXN0cnVjdCBkc28gKmN1cnJfZHNvID0gc2VsZjsKIAlzaXplX3QgZHNvX25hbWVfbGVuID0gc3RybGVuKHNlbGYtPnNob3J0X25hbWUpOwpAQCAtOTI0LDcgKzk1MSw3IEBACiAJbnJfc3ltcyA9IHNoZHIuc2hfc2l6ZSAvIHNoZHIuc2hfZW50c2l6ZTsKIAogCW1lbXNldCgmc3ltLCAwLCBzaXplb2Yoc3ltKSk7Ci0JaWYgKCFrZXJuZWwpIHsKKwlpZiAoIXNlbGYtPmtlcm5lbCkgewogCQlzZWxmLT5hZGp1c3Rfc3ltYm9scyA9IChlaGRyLmVfdHlwZSA9PSBFVF9FWEVDIHx8CiAJCQkJZWxmX3NlY3Rpb25fYnlfbmFtZShlbGYsICZlaGRyLCAmc2hkciwKIAkJCQkJCSAgICAgIi5nbnUucHJlbGlua191bmRvIiwKQEAgLTkzMywxMSArOTYwLDE1IEBACiAKIAllbGZfc3ltdGFiX19mb3JfZWFjaF9zeW1ib2woc3ltcywgbnJfc3ltcywgaWR4LCBzeW0pIHsKIAkJc3RydWN0IHN5bWJvbCAqZjsKLQkJY29uc3QgY2hhciAqZWxmX25hbWU7CisJCWNvbnN0IGNoYXIgKmVsZl9uYW1lID0gZWxmX3N5bV9fbmFtZSgmc3ltLCBzeW1zdHJzKTsKIAkJY2hhciAqZGVtYW5nbGVkID0gTlVMTDsKIAkJaW50IGlzX2xhYmVsID0gZWxmX3N5bV9faXNfbGFiZWwoJnN5bSk7CiAJCWNvbnN0IGNoYXIgKnNlY3Rpb25fbmFtZTsKIAorCQlpZiAoa21hcCAmJiBrbWFwLT5yZWZfcmVsb2Nfc3ltICYmIGttYXAtPnJlZl9yZWxvY19zeW0tPm5hbWUgJiYKKwkJICAgIHN0cmNtcChlbGZfbmFtZSwga21hcC0+cmVmX3JlbG9jX3N5bS0+bmFtZSkgPT0gMCkKKwkJCWttYXAtPnJlZl9yZWxvY19zeW0tPnVucmVsb2NhdGVkX2FkZHIgPSBzeW0uc3RfdmFsdWU7CisKIAkJaWYgKCFpc19sYWJlbCAmJiAhZWxmX3N5bV9faXNfYSgmc3ltLCBtYXAtPnR5cGUpKQogCQkJY29udGludWU7CiAKQEAgLTk1MCwxMCArOTgxLDkgQEAKIAkJaWYgKGlzX2xhYmVsICYmICFlbGZfc2VjX19pc19hKCZzaGRyLCBzZWNzdHJzLCBtYXAtPnR5cGUpKQogCQkJY29udGludWU7CiAKLQkJZWxmX25hbWUgPSBlbGZfc3ltX19uYW1lKCZzeW0sIHN5bXN0cnMpOwogCQlzZWN0aW9uX25hbWUgPSBlbGZfc2VjX19uYW1lKCZzaGRyLCBzZWNzdHJzKTsKIAotCQlpZiAoa2VybmVsIHx8IGttb2R1bGUpIHsKKwkJaWYgKHNlbGYtPmtlcm5lbCB8fCBrbW9kdWxlKSB7CiAJCQljaGFyIGRzb19uYW1lW1BBVEhfTUFYXTsKIAogCQkJaWYgKHN0cmNtcChzZWN0aW9uX25hbWUsCkBAIC05NjksNyArOTk5LDcgQEAKIAkJCXNucHJpbnRmKGRzb19uYW1lLCBzaXplb2YoZHNvX25hbWUpLAogCQkJCSAiJXMlcyIsIHNlbGYtPnNob3J0X25hbWUsIHNlY3Rpb25fbmFtZSk7CiAKLQkJCWN1cnJfbWFwID0gbWFwX2dyb3Vwc19fZmluZF9ieV9uYW1lKCZzZXNzaW9uLT5rbWFwcywgbWFwLT50eXBlLCBkc29fbmFtZSk7CisJCQljdXJyX21hcCA9IG1hcF9ncm91cHNfX2ZpbmRfYnlfbmFtZShrbWFwLT5rbWFwcywgbWFwLT50eXBlLCBkc29fbmFtZSk7CiAJCQlpZiAoY3Vycl9tYXAgPT0gTlVMTCkgewogCQkJCXU2NCBzdGFydCA9IHN5bS5zdF92YWx1ZTsKIApAQCAtOTgwLDcgKzEwMTAsNyBAQAogCQkJCWlmIChjdXJyX2RzbyA9PSBOVUxMKQogCQkJCQlnb3RvIG91dF9lbGZfZW5kOwogCQkJCWN1cnJfbWFwID0gbWFwX19uZXcyKHN0YXJ0LCBjdXJyX2RzbywKLQkJCQkJCSAgICAgTUFQX19GVU5DVElPTik7CisJCQkJCQkgICAgIG1hcC0+dHlwZSk7CiAJCQkJaWYgKGN1cnJfbWFwID09IE5VTEwpIHsKIAkJCQkJZHNvX19kZWxldGUoY3Vycl9kc28pOwogCQkJCQlnb3RvIG91dF9lbGZfZW5kOwpAQCAtOTg4LDggKzEwMTgsOSBAQAogCQkJCWN1cnJfbWFwLT5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOwogCQkJCWN1cnJfbWFwLT51bm1hcF9pcCA9IGlkZW50aXR5X19tYXBfaXA7CiAJCQkJY3Vycl9kc28tPm9yaWdpbiA9IERTT19fT1JJR19LRVJORUw7Ci0JCQkJbWFwX2dyb3Vwc19faW5zZXJ0KCZzZXNzaW9uLT5rbWFwcywgY3Vycl9tYXApOworCQkJCW1hcF9ncm91cHNfX2luc2VydChrbWFwLT5rbWFwcywgY3Vycl9tYXApOwogCQkJCWRzb3NfX2FkZCgmZHNvc19fa2VybmVsLCBjdXJyX2Rzbyk7CisJCQkJZHNvX19zZXRfbG9hZGVkKGN1cnJfZHNvLCBtYXAtPnR5cGUpOwogCQkJfSBlbHNlCiAJCQkJY3Vycl9kc28gPSBjdXJyX21hcC0+ZHNvOwogCkBAIC05OTcsOSArMTAyOCwxMCBAQAogCQl9CiAKIAkJaWYgKGN1cnJfZHNvLT5hZGp1c3Rfc3ltYm9scykgewotCQkJcHJfZGVidWcyKCJhZGp1c3Rpbmcgc3ltYm9sOiBzdF92YWx1ZTogJUx4IHNoX2FkZHI6ICIKLQkJCQkgICIlTHggc2hfb2Zmc2V0OiAlTHhcbiIsICh1NjQpc3ltLnN0X3ZhbHVlLAotCQkJCSAgKHU2NClzaGRyLnNoX2FkZHIsICh1NjQpc2hkci5zaF9vZmZzZXQpOworCQkJcHJfZGVidWc0KCIlczogYWRqdXN0aW5nIHN5bWJvbDogc3RfdmFsdWU6ICUjTHggIgorCQkJCSAgInNoX2FkZHI6ICUjTHggc2hfb2Zmc2V0OiAlI0x4XG4iLCBfX2Z1bmNfXywKKwkJCQkgICh1NjQpc3ltLnN0X3ZhbHVlLCAodTY0KXNoZHIuc2hfYWRkciwKKwkJCQkgICh1NjQpc2hkci5zaF9vZmZzZXQpOwogCQkJc3ltLnN0X3ZhbHVlIC09IHNoZHIuc2hfYWRkciAtIHNoZHIuc2hfb2Zmc2V0OwogCQl9CiAJCS8qCkBAIC0xMDI3LDggKzEwNTksMTYgQEAKIAkvKgogCSAqIEZvciBtaXNhbm5vdGF0ZWQsIHplcm9lZCwgQVNNIGZ1bmN0aW9uIHNpemVzLgogCSAqLwotCWlmIChuciA+IDApCisJaWYgKG5yID4gMCkgewogCQlzeW1ib2xzX19maXh1cF9lbmQoJnNlbGYtPnN5bWJvbHNbbWFwLT50eXBlXSk7CisJCWlmIChrbWFwKSB7CisJCQkvKgorCQkJICogV2UgbmVlZCB0byBmaXh1cCB0aGlzIGhlcmUgdG9vIGJlY2F1c2Ugd2UgY3JlYXRlIG5ldworCQkJICogbWFwcyBoZXJlLCBmb3IgdGhpbmdzIGxpa2UgdnN5c2NhbGwgc2VjdGlvbnMuCisJCQkgKi8KKwkJCV9fbWFwX2dyb3Vwc19fZml4dXBfZW5kKGttYXAtPmttYXBzLCBtYXAtPnR5cGUpOworCQl9CisJfQogCWVyciA9IG5yOwogb3V0X2VsZl9lbmQ6CiAJZWxmX2VuZChlbGYpOwpAQCAtMTA0MSwyNSArMTA4MSwyOCBAQAogCXJldHVybiBtZW1jbXAoc2VsZi0+YnVpbGRfaWQsIGJ1aWxkX2lkLCBzaXplb2Yoc2VsZi0+YnVpbGRfaWQpKSA9PSAwOwogfQogCi1zdGF0aWMgYm9vbCBfX2Rzb3NfX3JlYWRfYnVpbGRfaWRzKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCitzdGF0aWMgYm9vbCBfX2Rzb3NfX3JlYWRfYnVpbGRfaWRzKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGJvb2wgd2l0aF9oaXRzKQogewogCWJvb2wgaGF2ZV9idWlsZF9pZCA9IGZhbHNlOwogCXN0cnVjdCBkc28gKnBvczsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKQorCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBub2RlKSB7CisJCWlmICh3aXRoX2hpdHMgJiYgIXBvcy0+aGl0KQorCQkJY29udGludWU7CiAJCWlmIChmaWxlbmFtZV9fcmVhZF9idWlsZF9pZChwb3MtPmxvbmdfbmFtZSwgcG9zLT5idWlsZF9pZCwKIAkJCQkJICAgIHNpemVvZihwb3MtPmJ1aWxkX2lkKSkgPiAwKSB7CiAJCQloYXZlX2J1aWxkX2lkCSAgPSB0cnVlOwogCQkJcG9zLT5oYXNfYnVpbGRfaWQgPSB0cnVlOwogCQl9CisJfQogCiAJcmV0dXJuIGhhdmVfYnVpbGRfaWQ7CiB9CiAKLWJvb2wgZHNvc19fcmVhZF9idWlsZF9pZHModm9pZCkKK2Jvb2wgZHNvc19fcmVhZF9idWlsZF9pZHMoYm9vbCB3aXRoX2hpdHMpCiB7Ci0JYm9vbCBrYnVpbGRpZHMgPSBfX2Rzb3NfX3JlYWRfYnVpbGRfaWRzKCZkc29zX19rZXJuZWwpLAotCSAgICAgdWJ1aWxkaWRzID0gX19kc29zX19yZWFkX2J1aWxkX2lkcygmZHNvc19fdXNlcik7CisJYm9vbCBrYnVpbGRpZHMgPSBfX2Rzb3NfX3JlYWRfYnVpbGRfaWRzKCZkc29zX19rZXJuZWwsIHdpdGhfaGl0cyksCisJICAgICB1YnVpbGRpZHMgPSBfX2Rzb3NfX3JlYWRfYnVpbGRfaWRzKCZkc29zX191c2VyLCB3aXRoX2hpdHMpOwogCXJldHVybiBrYnVpbGRpZHMgfHwgdWJ1aWxkaWRzOwogfQogCkBAIC0xMTkxLDYgKzEyMzQsNyBAQAogCXN0YXRpYyBjb25zdCBjaGFyIG9yaWdpbltdID0gewogCQlbRFNPX19PUklHX0tFUk5FTF0gPSAgICdrJywKIAkJW0RTT19fT1JJR19KQVZBX0pJVF0gPSAnaicsCisJCVtEU09fX09SSUdfQlVJTERfSURfQ0FDSEVdID0gJ0InLAogCQlbRFNPX19PUklHX0ZFRE9SQV0gPSAgICdmJywKIAkJW0RTT19fT1JJR19VQlVOVFVdID0gICAndScsCiAJCVtEU09fX09SSUdfQlVJTERJRF0gPSAgJ2InLApAQCAtMTIwMywxOSArMTI0NywxOSBAQAogCXJldHVybiBvcmlnaW5bc2VsZi0+b3JpZ2luXTsKIH0KIAotaW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCi0JICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKK2ludCBkc29fX2xvYWQoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCWludCBzaXplID0gUEFUSF9NQVg7CiAJY2hhciAqbmFtZTsKIAl1OCBidWlsZF9pZFtCVUlMRF9JRF9TSVpFXTsKKwljaGFyIGJ1aWxkX2lkX2hleFtCVUlMRF9JRF9TSVpFICogMiArIDFdOwogCWludCByZXQgPSAtMTsKIAlpbnQgZmQ7CiAKIAlkc29fX3NldF9sb2FkZWQoc2VsZiwgbWFwLT50eXBlKTsKIAogCWlmIChzZWxmLT5rZXJuZWwpCi0JCXJldHVybiBkc29fX2xvYWRfa2VybmVsX3N5bShzZWxmLCBtYXAsIHNlc3Npb24sIGZpbHRlcik7CisJCXJldHVybiBkc29fX2xvYWRfa2VybmVsX3N5bShzZWxmLCBtYXAsIGZpbHRlcik7CiAKIAluYW1lID0gbWFsbG9jKHNpemUpOwogCWlmICghbmFtZSkKQEAgLTEyMzAsOCArMTI3NCwxNiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXNlbGYtPm9yaWdpbiA9IERTT19fT1JJR19GRURPUkEgLSAxOworCXNlbGYtPm9yaWdpbiA9IERTT19fT1JJR19CVUlMRF9JRF9DQUNIRTsKIAorCWlmIChzZWxmLT5oYXNfYnVpbGRfaWQpIHsKKwkJYnVpbGRfaWRfX3NwcmludGYoc2VsZi0+YnVpbGRfaWQsIHNpemVvZihzZWxmLT5idWlsZF9pZCksCisJCQkJICBidWlsZF9pZF9oZXgpOworCQlzbnByaW50ZihuYW1lLCBzaXplLCAiJXMvJXMvLmJ1aWxkLWlkLyUuMnMvJXMiLAorCQkJIGdldGVudigiSE9NRSIpLCBERUJVR19DQUNIRV9ESVIsCisJCQkgYnVpbGRfaWRfaGV4LCBidWlsZF9pZF9oZXggKyAyKTsKKwkJZ290byBvcGVuX2ZpbGU7CisJfQogbW9yZToKIAlkbyB7CiAJCXNlbGYtPm9yaWdpbisrOwpAQCAtMTI0Nyw4ICsxMjk5LDYgQEAKIAkJY2FzZSBEU09fX09SSUdfQlVJTERJRDoKIAkJCWlmIChmaWxlbmFtZV9fcmVhZF9idWlsZF9pZChzZWxmLT5sb25nX25hbWUsIGJ1aWxkX2lkLAogCQkJCQkJICAgIHNpemVvZihidWlsZF9pZCkpKSB7Ci0JCQkJY2hhciBidWlsZF9pZF9oZXhbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKLQogCQkJCWJ1aWxkX2lkX19zcHJpbnRmKGJ1aWxkX2lkLCBzaXplb2YoYnVpbGRfaWQpLAogCQkJCQkJICBidWlsZF9pZF9oZXgpOwogCQkJCXNucHJpbnRmKG5hbWUsIHNpemUsCkBAIC0xMjc2LDExICsxMzI2LDExIEBACiAJCQlpZiAoIWRzb19fYnVpbGRfaWRfZXF1YWwoc2VsZiwgYnVpbGRfaWQpKQogCQkJCWdvdG8gbW9yZTsKIAkJfQotCitvcGVuX2ZpbGU6CiAJCWZkID0gb3BlbihuYW1lLCBPX1JET05MWSk7CiAJfSB3aGlsZSAoZmQgPCAwKTsKIAotCXJldCA9IGRzb19fbG9hZF9zeW0oc2VsZiwgbWFwLCBOVUxMLCBuYW1lLCBmZCwgZmlsdGVyLCAwLCAwKTsKKwlyZXQgPSBkc29fX2xvYWRfc3ltKHNlbGYsIG1hcCwgbmFtZSwgZmQsIGZpbHRlciwgMCk7CiAJY2xvc2UoZmQpOwogCiAJLyoKQEAgLTEzMDksMTQgKzEzNTksMzQgQEAKIAlmb3IgKG5kID0gcmJfZmlyc3QoJnNlbGYtPm1hcHNbdHlwZV0pOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewogCQlzdHJ1Y3QgbWFwICptYXAgPSByYl9lbnRyeShuZCwgc3RydWN0IG1hcCwgcmJfbm9kZSk7CiAKLQkJaWYgKG1hcC0+ZHNvICYmIHN0cmNtcChtYXAtPmRzby0+bmFtZSwgbmFtZSkgPT0gMCkKKwkJaWYgKG1hcC0+ZHNvICYmIHN0cmNtcChtYXAtPmRzby0+c2hvcnRfbmFtZSwgbmFtZSkgPT0gMCkKIAkJCXJldHVybiBtYXA7CiAJfQogCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgcGVyZl9zZXNzaW9uX19zZXRfbW9kdWxlc19wYXRoX2RpcihzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLCBjaGFyICpkaXJuYW1lKQorc3RhdGljIGludCBkc29fX2tlcm5lbF9tb2R1bGVfZ2V0X2J1aWxkX2lkKHN0cnVjdCBkc28gKnNlbGYpCit7CisJY2hhciBmaWxlbmFtZVtQQVRIX01BWF07CisJLyoKKwkgKiBrZXJuZWwgbW9kdWxlIHNob3J0IG5hbWVzIGFyZSBvZiB0aGUgZm9ybSAiW21vZHVsZV0iIGFuZAorCSAqIHdlIG5lZWQganVzdCAibW9kdWxlIiBoZXJlLgorCSAqLworCWNvbnN0IGNoYXIgKm5hbWUgPSBzZWxmLT5zaG9ydF9uYW1lICsgMTsKKworCXNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLAorCQkgIi9zeXMvbW9kdWxlLyUuKnMvbm90ZXMvLm5vdGUuZ251LmJ1aWxkLWlkIiwKKwkJIChpbnQpc3RybGVuKG5hbWUgLSAxKSwgbmFtZSk7CisKKwlpZiAoc3lzZnNfX3JlYWRfYnVpbGRfaWQoZmlsZW5hbWUsIHNlbGYtPmJ1aWxkX2lkLAorCQkJCSBzaXplb2Yoc2VsZi0+YnVpbGRfaWQpKSA9PSAwKQorCQlzZWxmLT5oYXNfYnVpbGRfaWQgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFwX2dyb3Vwc19fc2V0X21vZHVsZXNfcGF0aF9kaXIoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsIGNoYXIgKmRpcm5hbWUpCiB7CiAJc3RydWN0IGRpcmVudCAqZGVudDsKIAlESVIgKmRpciA9IG9wZW5kaXIoZGlybmFtZSk7CkBAIC0xMzM2LDcgKzE0MDYsNyBAQAogCiAJCQlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy8lcyIsCiAJCQkJIGRpcm5hbWUsIGRlbnQtPmRfbmFtZSk7Ci0JCQlpZiAocGVyZl9zZXNzaW9uX19zZXRfbW9kdWxlc19wYXRoX2RpcihzZWxmLCBwYXRoKSA8IDApCisJCQlpZiAobWFwX2dyb3Vwc19fc2V0X21vZHVsZXNfcGF0aF9kaXIoc2VsZiwgcGF0aCkgPCAwKQogCQkJCWdvdG8gZmFpbHVyZTsKIAkJfSBlbHNlIHsKIAkJCWNoYXIgKmRvdCA9IHN0cnJjaHIoZGVudC0+ZF9uYW1lLCAnLicpLApAQCAtMTM1MCw3ICsxNDIwLDcgQEAKIAkJCQkgKGludCkoZG90IC0gZGVudC0+ZF9uYW1lKSwgZGVudC0+ZF9uYW1lKTsKIAogCQkJc3RyeGZyY2hhcihkc29fbmFtZSwgJy0nLCAnXycpOwotCQkJbWFwID0gbWFwX2dyb3Vwc19fZmluZF9ieV9uYW1lKCZzZWxmLT5rbWFwcywgTUFQX19GVU5DVElPTiwgZHNvX25hbWUpOworCQkJbWFwID0gbWFwX2dyb3Vwc19fZmluZF9ieV9uYW1lKHNlbGYsIE1BUF9fRlVOQ1RJT04sIGRzb19uYW1lKTsKIAkJCWlmIChtYXAgPT0gTlVMTCkKIAkJCQljb250aW51ZTsKIApAQCAtMTM2MSw2ICsxNDMxLDcgQEAKIAkJCWlmIChsb25nX25hbWUgPT0gTlVMTCkKIAkJCQlnb3RvIGZhaWx1cmU7CiAJCQlkc29fX3NldF9sb25nX25hbWUobWFwLT5kc28sIGxvbmdfbmFtZSk7CisJCQlkc29fX2tlcm5lbF9tb2R1bGVfZ2V0X2J1aWxkX2lkKG1hcC0+ZHNvKTsKIAkJfQogCX0KIApAQCAtMTM3MCw3ICsxNDQxLDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgcGVyZl9zZXNzaW9uX19zZXRfbW9kdWxlc19wYXRoKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCitzdGF0aWMgaW50IG1hcF9ncm91cHNfX3NldF9tb2R1bGVzX3BhdGgoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYpCiB7CiAJc3RydWN0IHV0c25hbWUgdXRzOwogCWNoYXIgbW9kdWxlc19wYXRoW1BBVEhfTUFYXTsKQEAgLTEzODEsNyArMTQ1Miw3IEBACiAJc25wcmludGYobW9kdWxlc19wYXRoLCBzaXplb2YobW9kdWxlc19wYXRoKSwgIi9saWIvbW9kdWxlcy8lcy9rZXJuZWwiLAogCQkgdXRzLnJlbGVhc2UpOwogCi0JcmV0dXJuIHBlcmZfc2Vzc2lvbl9fc2V0X21vZHVsZXNfcGF0aF9kaXIoc2VsZiwgbW9kdWxlc19wYXRoKTsKKwlyZXR1cm4gbWFwX2dyb3Vwc19fc2V0X21vZHVsZXNfcGF0aF9kaXIoc2VsZiwgbW9kdWxlc19wYXRoKTsKIH0KIAogLyoKQEAgLTEzOTEsOCArMTQ2Miw4IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbWFwICptYXBfX25ldzIodTY0IHN0YXJ0LCBzdHJ1Y3QgZHNvICpkc28sIGVudW0gbWFwX3R5cGUgdHlwZSkKIHsKLQlzdHJ1Y3QgbWFwICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikpOwotCisJc3RydWN0IG1hcCAqc2VsZiA9IHphbGxvYyhzaXplb2YoKnNlbGYpICsKKwkJCQkgIChkc28tPmtlcm5lbCA/IHNpemVvZihzdHJ1Y3Qga21hcCkgOiAwKSk7CiAJaWYgKHNlbGYgIT0gTlVMTCkgewogCQkvKgogCQkgKiAtPmVuZCB3aWxsIGJlIGZpbGxlZCBhZnRlciB3ZSBsb2FkIGFsbCB0aGUgc3ltYm9scwpAQCAtMTQwMyw3ICsxNDc0LDI1IEBACiAJcmV0dXJuIHNlbGY7CiB9CiAKLXN0YXRpYyBpbnQgcGVyZl9zZXNzaW9uX19jcmVhdGVfbW9kdWxlX21hcHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZikKK3N0cnVjdCBtYXAgKm1hcF9ncm91cHNfX25ld19tb2R1bGUoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsIHU2NCBzdGFydCwKKwkJCQkgICBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3QgbWFwICptYXA7CisJc3RydWN0IGRzbyAqZHNvID0gX19kc29zX19maW5kbmV3KCZkc29zX19rZXJuZWwsIGZpbGVuYW1lKTsKKworCWlmIChkc28gPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwltYXAgPSBtYXBfX25ldzIoc3RhcnQsIGRzbywgTUFQX19GVU5DVElPTik7CisJaWYgKG1hcCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWRzby0+b3JpZ2luID0gRFNPX19PUklHX0tNT0RVTEU7CisJbWFwX2dyb3Vwc19faW5zZXJ0KHNlbGYsIG1hcCk7CisJcmV0dXJuIG1hcDsKK30KKworc3RhdGljIGludCBtYXBfZ3JvdXBzX19jcmVhdGVfbW9kdWxlcyhzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZikKIHsKIAljaGFyICpsaW5lID0gTlVMTDsKIAlzaXplX3QgbjsKQEAgLTE0MTYsNyArMTUwNSw2IEBACiAJd2hpbGUgKCFmZW9mKGZpbGUpKSB7CiAJCWNoYXIgbmFtZVtQQVRIX01BWF07CiAJCXU2NCBzdGFydDsKLQkJc3RydWN0IGRzbyAqZHNvOwogCQljaGFyICpzZXA7CiAJCWludCBsaW5lX2xlbjsKIApAQCAtMTQ0MiwzMiArMTUzMCwxNiBAQAogCQkqc2VwID0gJ1wwJzsKIAogCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJbJXNdIiwgbGluZSk7Ci0JCWRzbyA9IGRzb19fbmV3KG5hbWUpOwotCi0JCWlmIChkc28gPT0gTlVMTCkKKwkJbWFwID0gbWFwX2dyb3Vwc19fbmV3X21vZHVsZShzZWxmLCBzdGFydCwgbmFtZSk7CisJCWlmIChtYXAgPT0gTlVMTCkKIAkJCWdvdG8gb3V0X2RlbGV0ZV9saW5lOwotCi0JCW1hcCA9IG1hcF9fbmV3MihzdGFydCwgZHNvLCBNQVBfX0ZVTkNUSU9OKTsKLQkJaWYgKG1hcCA9PSBOVUxMKSB7Ci0JCQlkc29fX2RlbGV0ZShkc28pOwotCQkJZ290byBvdXRfZGVsZXRlX2xpbmU7Ci0JCX0KLQotCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksCi0JCQkgIi9zeXMvbW9kdWxlLyVzL25vdGVzLy5ub3RlLmdudS5idWlsZC1pZCIsIGxpbmUpOwotCQlpZiAoc3lzZnNfX3JlYWRfYnVpbGRfaWQobmFtZSwgZHNvLT5idWlsZF9pZCwKLQkJCQkJIHNpemVvZihkc28tPmJ1aWxkX2lkKSkgPT0gMCkKLQkJCWRzby0+aGFzX2J1aWxkX2lkID0gdHJ1ZTsKLQotCQlkc28tPm9yaWdpbiA9IERTT19fT1JJR19LTU9EVUxFOwotCQltYXBfZ3JvdXBzX19pbnNlcnQoJnNlbGYtPmttYXBzLCBtYXApOwotCQlkc29zX19hZGQoJmRzb3NfX2tlcm5lbCwgZHNvKTsKKwkJZHNvX19rZXJuZWxfbW9kdWxlX2dldF9idWlsZF9pZChtYXAtPmRzbyk7CiAJfQogCiAJZnJlZShsaW5lKTsKIAlmY2xvc2UoZmlsZSk7CiAKLQlyZXR1cm4gcGVyZl9zZXNzaW9uX19zZXRfbW9kdWxlc19wYXRoKHNlbGYpOworCXJldHVybiBtYXBfZ3JvdXBzX19zZXRfbW9kdWxlc19wYXRoKHNlbGYpOwogCiBvdXRfZGVsZXRlX2xpbmU6CiAJZnJlZShsaW5lKTsKQEAgLTE0NzYsNyArMTU0OCw2IEBACiB9CiAKIHN0YXRpYyBpbnQgZHNvX19sb2FkX3ZtbGludXgoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAotCQkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAogCQkJICAgICBjb25zdCBjaGFyICp2bWxpbnV4LCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCWludCBlcnIgPSAtMSwgZmQ7CkBAIC0xNTEwLDUxICsxNTgxLDEyNCBAQAogCQlyZXR1cm4gLTE7CiAKIAlkc29fX3NldF9sb2FkZWQoc2VsZiwgbWFwLT50eXBlKTsKLQllcnIgPSBkc29fX2xvYWRfc3ltKHNlbGYsIG1hcCwgc2Vzc2lvbiwgc2VsZi0+bG9uZ19uYW1lLCBmZCwgZmlsdGVyLCAxLCAwKTsKKwllcnIgPSBkc29fX2xvYWRfc3ltKHNlbGYsIG1hcCwgdm1saW51eCwgZmQsIGZpbHRlciwgMCk7CiAJY2xvc2UoZmQpOwogCisJaWYgKGVyciA+IDApCisJCXByX2RlYnVnKCJVc2luZyAlcyBmb3Igc3ltYm9sc1xuIiwgdm1saW51eCk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgZHNvX19sb2FkX3ZtbGludXhfcGF0aChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCisJCQkgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQoreworCWludCBpLCBlcnIgPSAwOworCisJcHJfZGVidWcoIkxvb2tpbmcgYXQgdGhlIHZtbGludXhfcGF0aCAoJWQgZW50cmllcyBsb25nKVxuIiwKKwkJIHZtbGludXhfcGF0aF9fbnJfZW50cmllcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdm1saW51eF9wYXRoX19ucl9lbnRyaWVzOyArK2kpIHsKKwkJZXJyID0gZHNvX19sb2FkX3ZtbGludXgoc2VsZiwgbWFwLCB2bWxpbnV4X3BhdGhbaV0sIGZpbHRlcik7CisJCWlmIChlcnIgPiAwKSB7CisJCQlkc29fX3NldF9sb25nX25hbWUoc2VsZiwgc3RyZHVwKHZtbGludXhfcGF0aFtpXSkpOworCQkJYnJlYWs7CisJCX0KKwl9CisKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGRzb19fbG9hZF9rZXJuZWxfc3ltKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKLQkJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQorCQkJCXN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CiAJaW50IGVycjsKLQlib29sIGlzX2thbGxzeW1zOworCWNvbnN0IGNoYXIgKmthbGxzeW1zX2ZpbGVuYW1lID0gTlVMTDsKKwljaGFyICprYWxsc3ltc19hbGxvY2F0ZWRfZmlsZW5hbWUgPSBOVUxMOworCS8qCisJICogU3RlcCAxOiBpZiB0aGUgdXNlciBzcGVjaWZpZWQgYSB2bWxpbnV4IGZpbGVuYW1lLCB1c2UgaXQgYW5kIG9ubHkKKwkgKiBpdCwgcmVwb3J0aW5nIGVycm9ycyB0byB0aGUgdXNlciBpZiBpdCBjYW5ub3QgYmUgdXNlZC4KKwkgKgorCSAqIEZvciBpbnN0YW5jZSwgdHJ5IHRvIGFuYWx5c2UgYW4gQVJNIHBlcmYuZGF0YSBmaWxlIF93aXRob3V0XyBhCisJICogYnVpbGQtaWQsIG9yIGlmIHRoZSB1c2VyIHNwZWNpZmllcyB0aGUgd3JvbmcgcGF0aCB0byB0aGUgcmlnaHQKKwkgKiB2bWxpbnV4IGZpbGUsIG9idmlvdXNseSB3ZSBjYW4ndCBmYWxsYmFjayB0byBhbm90aGVyIHZtbGludXggKGEKKwkgKiB4ODZfODYgb25lLCBvbiB0aGUgbWFjaGluZSB3aGVyZSBhbmFseXNpcyBpcyBiZWluZyBwZXJmb3JtZWQsIHNheSksCisJICogb3Igd29yc2UsIC9wcm9jL2thbGxzeW1zLgorCSAqCisJICogSWYgdGhlIHNwZWNpZmllZCBmaWxlIF9oYXNfIGEgYnVpbGQtaWQgYW5kIHRoZXJlIGlzIGEgYnVpbGQtaWQKKwkgKiBzZWN0aW9uIGluIHRoZSBwZXJmLmRhdGEgZmlsZSwgd2Ugd2lsbCBzdGlsbCBkbyB0aGUgZXhwZWN0ZWQKKwkgKiB2YWxpZGF0aW9uIGluIGRzb19fbG9hZF92bWxpbnV4IGFuZCB3aWxsIGJhaWwgb3V0IGlmIHRoZXkgZG9uJ3QKKwkgKiBtYXRjaC4KKwkgKi8KKwlpZiAoc3ltYm9sX2NvbmYudm1saW51eF9uYW1lICE9IE5VTEwpIHsKKwkJZXJyID0gZHNvX19sb2FkX3ZtbGludXgoc2VsZiwgbWFwLAorCQkJCQlzeW1ib2xfY29uZi52bWxpbnV4X25hbWUsIGZpbHRlcik7CisJCWdvdG8gb3V0X3RyeV9maXh1cDsKKwl9CiAKIAlpZiAodm1saW51eF9wYXRoICE9IE5VTEwpIHsKLQkJaW50IGk7Ci0JCXByX2RlYnVnKCJMb29raW5nIGF0IHRoZSB2bWxpbnV4X3BhdGggKCVkIGVudHJpZXMgbG9uZylcbiIsCi0JCQkgdm1saW51eF9wYXRoX19ucl9lbnRyaWVzKTsKLQkJZm9yIChpID0gMDsgaSA8IHZtbGludXhfcGF0aF9fbnJfZW50cmllczsgKytpKSB7Ci0JCQllcnIgPSBkc29fX2xvYWRfdm1saW51eChzZWxmLCBtYXAsIHNlc3Npb24sCi0JCQkJCQl2bWxpbnV4X3BhdGhbaV0sIGZpbHRlcik7Ci0JCQlpZiAoZXJyID4gMCkgewotCQkJCXByX2RlYnVnKCJVc2luZyAlcyBmb3Igc3ltYm9sc1xuIiwKLQkJCQkJIHZtbGludXhfcGF0aFtpXSk7Ci0JCQkJZHNvX19zZXRfbG9uZ19uYW1lKHNlbGYsCi0JCQkJCQkgICBzdHJkdXAodm1saW51eF9wYXRoW2ldKSk7Ci0JCQkJZ290byBvdXRfZml4dXA7CisJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4X3BhdGgoc2VsZiwgbWFwLCBmaWx0ZXIpOworCQlpZiAoZXJyID4gMCkKKwkJCWdvdG8gb3V0X2ZpeHVwOworCX0KKworCS8qCisJICogU2F5IHRoZSBrZXJuZWwgRFNPIHdhcyBjcmVhdGVkIHdoZW4gcHJvY2Vzc2luZyB0aGUgYnVpbGQtaWQgaGVhZGVyIHRhYmxlLAorCSAqIHdlIGhhdmUgYSBidWlsZC1pZCwgc28gY2hlY2sgaWYgaXQgaXMgdGhlIHNhbWUgYXMgdGhlIHJ1bm5pbmcga2VybmVsLAorCSAqIHVzaW5nIGl0IGlmIGl0IGlzLgorCSAqLworCWlmIChzZWxmLT5oYXNfYnVpbGRfaWQpIHsKKwkJdTgga2FsbHN5bXNfYnVpbGRfaWRbQlVJTERfSURfU0laRV07CisJCWNoYXIgc2J1aWxkX2lkW0JVSUxEX0lEX1NJWkUgKiAyICsgMV07CisKKwkJaWYgKHN5c2ZzX19yZWFkX2J1aWxkX2lkKCIvc3lzL2tlcm5lbC9ub3RlcyIsIGthbGxzeW1zX2J1aWxkX2lkLAorCQkJCQkgc2l6ZW9mKGthbGxzeW1zX2J1aWxkX2lkKSkgPT0gMCkgeworCQkJaWYgKGRzb19fYnVpbGRfaWRfZXF1YWwoc2VsZiwga2FsbHN5bXNfYnVpbGRfaWQpKSB7CisJCQkJa2FsbHN5bXNfZmlsZW5hbWUgPSAiL3Byb2Mva2FsbHN5bXMiOworCQkJCWdvdG8gZG9fa2FsbHN5bXM7CiAJCQl9CiAJCX0KKwkJLyoKKwkJICogTm93IGxvb2sgaWYgd2UgaGF2ZSBpdCBvbiB0aGUgYnVpbGQtaWQgY2FjaGUgaW4KKwkJICogJEhPTUUvLmRlYnVnL1trZXJuZWwua2FsbHN5bXNdLgorCQkgKi8KKwkJYnVpbGRfaWRfX3NwcmludGYoc2VsZi0+YnVpbGRfaWQsIHNpemVvZihzZWxmLT5idWlsZF9pZCksCisJCQkJICBzYnVpbGRfaWQpOworCisJCWlmIChhc3ByaW50Zigma2FsbHN5bXNfYWxsb2NhdGVkX2ZpbGVuYW1lLAorCQkJICAgICAiJXMvLmRlYnVnL1trZXJuZWwua2FsbHN5bXNdLyVzIiwKKwkJCSAgICAgZ2V0ZW52KCJIT01FIiksIHNidWlsZF9pZCkgPT0gLTEpIHsKKwkJCXByX2VycigiTm90IGVub3VnaCBtZW1vcnkgZm9yIGthbGxzeW1zIGZpbGUgbG9va3VwXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWthbGxzeW1zX2ZpbGVuYW1lID0ga2FsbHN5bXNfYWxsb2NhdGVkX2ZpbGVuYW1lOworCisJCWlmIChhY2Nlc3Moa2FsbHN5bXNfZmlsZW5hbWUsIEZfT0spKSB7CisJCQlwcl9lcnIoIk5vIGthbGxzeW1zIG9yIHZtbGludXggd2l0aCBidWlsZC1pZCAlcyAiCisJCQkgICAgICAgIndhcyBmb3VuZFxuIiwgc2J1aWxkX2lkKTsKKwkJCWZyZWUoa2FsbHN5bXNfYWxsb2NhdGVkX2ZpbGVuYW1lKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIExhc3QgcmVzb3J0LCBpZiB3ZSBkb24ndCBoYXZlIGEgYnVpbGQtaWQgYW5kIGNvdWxkbid0IGZpbmQKKwkJICogYW55IHZtbGludXggZmlsZSwgdHJ5IHRoZSBydW5uaW5nIGtlcm5lbCBrYWxsc3ltcyB0YWJsZS4KKwkJICovCisJCWthbGxzeW1zX2ZpbGVuYW1lID0gIi9wcm9jL2thbGxzeW1zIjsKIAl9CiAKLQlpc19rYWxsc3ltcyA9IHNlbGYtPmxvbmdfbmFtZVswXSA9PSAnWyc7Ci0JaWYgKGlzX2thbGxzeW1zKQotCQlnb3RvIGRvX2thbGxzeW1zOwotCi0JZXJyID0gZHNvX19sb2FkX3ZtbGludXgoc2VsZiwgbWFwLCBzZXNzaW9uLCBzZWxmLT5sb25nX25hbWUsIGZpbHRlcik7Ci0JaWYgKGVyciA8PSAwKSB7Ci0JCXByX2luZm8oIlRoZSBmaWxlICVzIGNhbm5vdCBiZSB1c2VkLCAiCi0JCQkidHJ5aW5nIHRvIHVzZSAvcHJvYy9rYWxsc3ltcy4uLiIsIHNlbGYtPmxvbmdfbmFtZSk7CiBkb19rYWxsc3ltczoKLQkJZXJyID0gZHNvX19sb2FkX2thbGxzeW1zKHNlbGYsIG1hcCwgc2Vzc2lvbiwgZmlsdGVyKTsKLQkJaWYgKGVyciA+IDAgJiYgIWlzX2thbGxzeW1zKQotICAgICAgICAgICAgICAgICAgICAgICAgZHNvX19zZXRfbG9uZ19uYW1lKHNlbGYsIHN0cmR1cCgiW2tlcm5lbC5rYWxsc3ltc10iKSk7Ci0JfQorCWVyciA9IGRzb19fbG9hZF9rYWxsc3ltcyhzZWxmLCBrYWxsc3ltc19maWxlbmFtZSwgbWFwLCBmaWx0ZXIpOworCWlmIChlcnIgPiAwKQorCQlwcl9kZWJ1ZygiVXNpbmcgJXMgZm9yIHN5bWJvbHNcbiIsIGthbGxzeW1zX2ZpbGVuYW1lKTsKKwlmcmVlKGthbGxzeW1zX2FsbG9jYXRlZF9maWxlbmFtZSk7CiAKK291dF90cnlfZml4dXA6CiAJaWYgKGVyciA+IDApIHsKIG91dF9maXh1cDoKKwkJaWYgKGthbGxzeW1zX2ZpbGVuYW1lICE9IE5VTEwpCisJCQlkc29fX3NldF9sb25nX25hbWUoc2VsZiwgc3RyZHVwKCJba2VybmVsLmthbGxzeW1zXSIpKTsKIAkJbWFwX19maXh1cF9zdGFydChtYXApOwogCQltYXBfX2ZpeHVwX2VuZChtYXApOwogCX0KQEAgLTE1NjQsNyArMTcwOCw2IEBACiAKIExJU1RfSEVBRChkc29zX191c2VyKTsKIExJU1RfSEVBRChkc29zX19rZXJuZWwpOwotc3RydWN0IGRzbyAqdmRzbzsKIAogc3RhdGljIHZvaWQgZHNvc19fYWRkKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBkc28gKmRzbykKIHsKQEAgLTE1NzYsMTkgKzE3MTksMTkgQEAKIAlzdHJ1Y3QgZHNvICpwb3M7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaGVhZCwgbm9kZSkKLQkJaWYgKHN0cmNtcChwb3MtPm5hbWUsIG5hbWUpID09IDApCisJCWlmIChzdHJjbXAocG9zLT5sb25nX25hbWUsIG5hbWUpID09IDApCiAJCQlyZXR1cm4gcG9zOwogCXJldHVybiBOVUxMOwogfQogCi1zdHJ1Y3QgZHNvICpkc29zX19maW5kbmV3KGNvbnN0IGNoYXIgKm5hbWUpCitzdHJ1Y3QgZHNvICpfX2Rzb3NfX2ZpbmRuZXcoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgZHNvICpkc28gPSBkc29zX19maW5kKCZkc29zX191c2VyLCBuYW1lKTsKKwlzdHJ1Y3QgZHNvICpkc28gPSBkc29zX19maW5kKGhlYWQsIG5hbWUpOwogCiAJaWYgKCFkc28pIHsKIAkJZHNvID0gZHNvX19uZXcobmFtZSk7CiAJCWlmIChkc28gIT0gTlVMTCkgewotCQkJZHNvc19fYWRkKCZkc29zX191c2VyLCBkc28pOworCQkJZHNvc19fYWRkKGhlYWQsIGRzbyk7CiAJCQlkc29fX3NldF9iYXNlbmFtZShkc28pOwogCQl9CiAJfQpAQCAtMTYxMyw3NSArMTc1Niw3OCBAQAogCV9fZHNvc19fZnByaW50ZigmZHNvc19fdXNlciwgZnApOwogfQogCi1zdGF0aWMgc2l6ZV90IF9fZHNvc19fZnByaW50Zl9idWlsZGlkKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIEZJTEUgKmZwKQorc3RhdGljIHNpemVfdCBfX2Rzb3NfX2ZwcmludGZfYnVpbGRpZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBGSUxFICpmcCwKKwkJCQkgICAgICBib29sIHdpdGhfaGl0cykKIHsKIAlzdHJ1Y3QgZHNvICpwb3M7CiAJc2l6ZV90IHJldCA9IDA7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaGVhZCwgbm9kZSkgeworCQlpZiAod2l0aF9oaXRzICYmICFwb3MtPmhpdCkKKwkJCWNvbnRpbnVlOwogCQlyZXQgKz0gZHNvX19mcHJpbnRmX2J1aWxkaWQocG9zLCBmcCk7CiAJCXJldCArPSBmcHJpbnRmKGZwLCAiICVzXG4iLCBwb3MtPmxvbmdfbmFtZSk7CiAJfQogCXJldHVybiByZXQ7CiB9CiAKLXNpemVfdCBkc29zX19mcHJpbnRmX2J1aWxkaWQoRklMRSAqZnApCitzaXplX3QgZHNvc19fZnByaW50Zl9idWlsZGlkKEZJTEUgKmZwLCBib29sIHdpdGhfaGl0cykKIHsKLQlyZXR1cm4gKF9fZHNvc19fZnByaW50Zl9idWlsZGlkKCZkc29zX19rZXJuZWwsIGZwKSArCi0JCV9fZHNvc19fZnByaW50Zl9idWlsZGlkKCZkc29zX191c2VyLCBmcCkpOworCXJldHVybiAoX19kc29zX19mcHJpbnRmX2J1aWxkaWQoJmRzb3NfX2tlcm5lbCwgZnAsIHdpdGhfaGl0cykgKworCQlfX2Rzb3NfX2ZwcmludGZfYnVpbGRpZCgmZHNvc19fdXNlciwgZnAsIHdpdGhfaGl0cykpOwogfQogCi1zdGF0aWMgc3RydWN0IGRzbyAqZHNvc19fY3JlYXRlX2tlcm5lbCggY29uc3QgY2hhciAqdm1saW51eCkKK3N0cnVjdCBkc28gKmRzb19fbmV3X2tlcm5lbChjb25zdCBjaGFyICpuYW1lKQogewotCXN0cnVjdCBkc28gKmtlcm5lbCA9IGRzb19fbmV3KHZtbGludXggPzogIltrZXJuZWwua2FsbHN5bXNdIik7CisJc3RydWN0IGRzbyAqc2VsZiA9IGRzb19fbmV3KG5hbWUgPzogIltrZXJuZWwua2FsbHN5bXNdIik7CiAKLQlpZiAoa2VybmVsID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0Ja2VybmVsLT5zaG9ydF9uYW1lID0gIltrZXJuZWxdIjsKLQlrZXJuZWwtPmtlcm5lbAkgICA9IDE7Ci0KLQl2ZHNvID0gZHNvX19uZXcoIlt2ZHNvXSIpOwotCWlmICh2ZHNvID09IE5VTEwpCi0JCWdvdG8gb3V0X2RlbGV0ZV9rZXJuZWxfZHNvOwotCWRzb19fc2V0X2xvYWRlZCh2ZHNvLCBNQVBfX0ZVTkNUSU9OKTsKLQotCWlmIChzeXNmc19fcmVhZF9idWlsZF9pZCgiL3N5cy9rZXJuZWwvbm90ZXMiLCBrZXJuZWwtPmJ1aWxkX2lkLAotCQkJCSBzaXplb2Yoa2VybmVsLT5idWlsZF9pZCkpID09IDApCi0JCWtlcm5lbC0+aGFzX2J1aWxkX2lkID0gdHJ1ZTsKLQotCWRzb3NfX2FkZCgmZHNvc19fa2VybmVsLCBrZXJuZWwpOwotCWRzb3NfX2FkZCgmZHNvc19fdXNlciwgdmRzbyk7Ci0KLQlyZXR1cm4ga2VybmVsOwotCi1vdXRfZGVsZXRlX2tlcm5lbF9kc286Ci0JZHNvX19kZWxldGUoa2VybmVsKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGludCBtYXBfZ3JvdXBzX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsIGNvbnN0IGNoYXIgKnZtbGludXgpCi17Ci0Jc3RydWN0IG1hcCAqZnVuY3Rpb25zLCAqdmFyaWFibGVzOwotCXN0cnVjdCBkc28gKmtlcm5lbCA9IGRzb3NfX2NyZWF0ZV9rZXJuZWwodm1saW51eCk7Ci0KLQlpZiAoa2VybmVsID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCWZ1bmN0aW9ucyA9IG1hcF9fbmV3MigwLCBrZXJuZWwsIE1BUF9fRlVOQ1RJT04pOwotCWlmIChmdW5jdGlvbnMgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JdmFyaWFibGVzID0gbWFwX19uZXcyKDAsIGtlcm5lbCwgTUFQX19WQVJJQUJMRSk7Ci0JaWYgKHZhcmlhYmxlcyA9PSBOVUxMKSB7Ci0JCW1hcF9fZGVsZXRlKGZ1bmN0aW9ucyk7Ci0JCXJldHVybiAtMTsKKwlpZiAoc2VsZiAhPSBOVUxMKSB7CisJCXNlbGYtPnNob3J0X25hbWUgPSAiW2tlcm5lbF0iOworCQlzZWxmLT5rZXJuZWwJID0gMTsKIAl9CiAKLQlmdW5jdGlvbnMtPm1hcF9pcCA9IGZ1bmN0aW9ucy0+dW5tYXBfaXAgPQotCQl2YXJpYWJsZXMtPm1hcF9pcCA9IHZhcmlhYmxlcy0+dW5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOwotCW1hcF9ncm91cHNfX2luc2VydChzZWxmLCBmdW5jdGlvbnMpOwotCW1hcF9ncm91cHNfX2luc2VydChzZWxmLCB2YXJpYWJsZXMpOworCXJldHVybiBzZWxmOworfQorCit2b2lkIGRzb19fcmVhZF9ydW5uaW5nX2tlcm5lbF9idWlsZF9pZChzdHJ1Y3QgZHNvICpzZWxmKQoreworCWlmIChzeXNmc19fcmVhZF9idWlsZF9pZCgiL3N5cy9rZXJuZWwvbm90ZXMiLCBzZWxmLT5idWlsZF9pZCwKKwkJCQkgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSkgPT0gMCkKKwkJc2VsZi0+aGFzX2J1aWxkX2lkID0gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBkc28gKmRzb3NfX2NyZWF0ZV9rZXJuZWwoY29uc3QgY2hhciAqdm1saW51eCkKK3sKKwlzdHJ1Y3QgZHNvICprZXJuZWwgPSBkc29fX25ld19rZXJuZWwodm1saW51eCk7CisKKwlpZiAoa2VybmVsICE9IE5VTEwpIHsKKwkJZHNvX19yZWFkX3J1bm5pbmdfa2VybmVsX2J1aWxkX2lkKGtlcm5lbCk7CisJCWRzb3NfX2FkZCgmZHNvc19fa2VybmVsLCBrZXJuZWwpOworCX0KKworCXJldHVybiBrZXJuZWw7Cit9CisKK2ludCBfX21hcF9ncm91cHNfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKKwkJCQkgICAgIHN0cnVjdCBtYXAgKnZtbGludXhfbWFwc1tNQVBfX05SX1RZUEVTXSwKKwkJCQkgICAgIHN0cnVjdCBkc28gKmtlcm5lbCkKK3sKKwllbnVtIG1hcF90eXBlIHR5cGU7CisKKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgTUFQX19OUl9UWVBFUzsgKyt0eXBlKSB7CisJCXN0cnVjdCBrbWFwICprbWFwOworCisJCXZtbGludXhfbWFwc1t0eXBlXSA9IG1hcF9fbmV3MigwLCBrZXJuZWwsIHR5cGUpOworCQlpZiAodm1saW51eF9tYXBzW3R5cGVdID09IE5VTEwpCisJCQlyZXR1cm4gLTE7CisKKwkJdm1saW51eF9tYXBzW3R5cGVdLT5tYXBfaXAgPQorCQkJdm1saW51eF9tYXBzW3R5cGVdLT51bm1hcF9pcCA9IGlkZW50aXR5X19tYXBfaXA7CisKKwkJa21hcCA9IG1hcF9fa21hcCh2bWxpbnV4X21hcHNbdHlwZV0pOworCQlrbWFwLT5rbWFwcyA9IHNlbGY7CisJCW1hcF9ncm91cHNfX2luc2VydChzZWxmLCB2bWxpbnV4X21hcHNbdHlwZV0pOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTc5MSwxOSArMTkzNywyMiBAQAogCXJldHVybiAtMTsKIH0KIAotaW50IHBlcmZfc2Vzc2lvbl9fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCitpbnQgbWFwX2dyb3Vwc19fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLAorCQkJCSAgIHN0cnVjdCBtYXAgKnZtbGludXhfbWFwc1tNQVBfX05SX1RZUEVTXSkKIHsKLQlpZiAobWFwX2dyb3Vwc19fY3JlYXRlX2tlcm5lbF9tYXBzKCZzZWxmLT5rbWFwcywKLQkJCQkJICAgc3ltYm9sX2NvbmYudm1saW51eF9uYW1lKSA8IDApCisJc3RydWN0IGRzbyAqa2VybmVsID0gZHNvc19fY3JlYXRlX2tlcm5lbChzeW1ib2xfY29uZi52bWxpbnV4X25hbWUpOworCisJaWYgKGtlcm5lbCA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoc3ltYm9sX2NvbmYudXNlX21vZHVsZXMgJiYKLQkgICAgcGVyZl9zZXNzaW9uX19jcmVhdGVfbW9kdWxlX21hcHMoc2VsZikgPCAwKQotCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIGxvYWQgbGlzdCBvZiBtb2R1bGVzIGZvciBzZXNzaW9uICVzLCAiCi0JCQkgImNvbnRpbnVpbmcuLi5cbiIsIHNlbGYtPmZpbGVuYW1lKTsKKwlpZiAoX19tYXBfZ3JvdXBzX19jcmVhdGVfa2VybmVsX21hcHMoc2VsZiwgdm1saW51eF9tYXBzLCBrZXJuZWwpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHN5bWJvbF9jb25mLnVzZV9tb2R1bGVzICYmIG1hcF9ncm91cHNfX2NyZWF0ZV9tb2R1bGVzKHNlbGYpIDwgMCkKKwkJcHJfZGVidWcoIlByb2JsZW1zIGNyZWF0aW5nIG1vZHVsZSBtYXBzLCBjb250aW51aW5nIGFueXdheS4uLlxuIik7CiAJLyoKIAkgKiBOb3cgdGhhdCB3ZSBoYXZlIGFsbCB0aGUgbWFwcyBjcmVhdGVkLCBqdXN0IHNldCB0aGUgLT5lbmQgb2YgdGhlbToKIAkgKi8KLQltYXBfZ3JvdXBzX19maXh1cF9lbmQoJnNlbGYtPmttYXBzKTsKKwltYXBfZ3JvdXBzX19maXh1cF9lbmQoc2VsZik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmggYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKaW5kZXggOGFkZWQyMy4uMjgwZGFkZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaApAQCAtOCw2ICs4LDggQEAKICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KICNpbmNsdWRlICJldmVudC5oIgogCisjZGVmaW5lIERFQlVHX0NBQ0hFX0RJUiAiLmRlYnVnIgorCiAjaWZkZWYgSEFWRV9DUExVU19ERU1BTkdMRQogZXh0ZXJuIGNoYXIgKmNwbHVzX2RlbWFuZ2xlKGNvbnN0IGNoYXIgKiwgaW50KTsKIApAQCAtNDksNiArNTEsOCBAQAogCWNoYXIJCW5hbWVbMF07CiB9OwogCit2b2lkIHN5bWJvbF9fZGVsZXRlKHN0cnVjdCBzeW1ib2wgKnNlbGYpOworCiBzdHJ1Y3Qgc3RybGlzdDsKIAogc3RydWN0IHN5bWJvbF9jb25mIHsKQEAgLTU4LDcgKzYyLDggQEAKIAkJCXNvcnRfYnlfbmFtZSwKIAkJCXNob3dfbnJfc2FtcGxlcywKIAkJCXVzZV9jYWxsY2hhaW4sCi0JCQlleGNsdWRlX290aGVyOworCQkJZXhjbHVkZV9vdGhlciwKKwkJCWZ1bGxfcGF0aHM7CiAJY29uc3QgY2hhcgkqdm1saW51eF9uYW1lLAogCQkJKmZpZWxkX3NlcDsKIAljaGFyICAgICAgICAgICAgKmRzb19saXN0X3N0ciwKQEAgLTc3LDYgKzgyLDEyIEBACiAJcmV0dXJuICgodm9pZCAqKXNlbGYpIC0gc3ltYm9sX2NvbmYucHJpdl9zaXplOwogfQogCitzdHJ1Y3QgcmVmX3JlbG9jX3N5bSB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwl1NjQJCWFkZHI7CisJdTY0CQl1bnJlbG9jYXRlZF9hZGRyOworfTsKKwogc3RydWN0IGFkZHJfbG9jYXRpb24gewogCXN0cnVjdCB0aHJlYWQgKnRocmVhZDsKIAlzdHJ1Y3QgbWFwICAgICptYXA7CkBAIC05NCw2ICsxMDUsNyBAQAogCXU4CQkgc2xlbl9jYWxjdWxhdGVkOjE7CiAJdTgJCSBoYXNfYnVpbGRfaWQ6MTsKIAl1OAkJIGtlcm5lbDoxOworCXU4CQkgaGl0OjE7CiAJdW5zaWduZWQgY2hhcgkgb3JpZ2luOwogCXU4CQkgc29ydGVkX2J5X25hbWU7CiAJdTgJCSBsb2FkZWQ7CkBAIC0xMDUsMzcgKzExNyw1NSBAQAogfTsKIAogc3RydWN0IGRzbyAqZHNvX19uZXcoY29uc3QgY2hhciAqbmFtZSk7CitzdHJ1Y3QgZHNvICpkc29fX25ld19rZXJuZWwoY29uc3QgY2hhciAqbmFtZSk7CiB2b2lkIGRzb19fZGVsZXRlKHN0cnVjdCBkc28gKnNlbGYpOwogCiBib29sIGRzb19fbG9hZGVkKGNvbnN0IHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSk7CiBib29sIGRzb19fc29ydGVkX2J5X25hbWUoY29uc3Qgc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlKTsKIAorc3RhdGljIGlubGluZSB2b2lkIGRzb19fc2V0X2xvYWRlZChzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCit7CisJc2VsZi0+bG9hZGVkIHw9ICgxIDw8IHR5cGUpOworfQorCiB2b2lkIGRzb19fc29ydF9ieV9uYW1lKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSk7CiAKLXN0cnVjdCBwZXJmX3Nlc3Npb247CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBkc29zX191c2VyLCBkc29zX19rZXJuZWw7CiAKLXN0cnVjdCBkc28gKmRzb3NfX2ZpbmRuZXcoY29uc3QgY2hhciAqbmFtZSk7Ci1pbnQgZHNvX19sb2FkKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKK3N0cnVjdCBkc28gKl9fZHNvc19fZmluZG5ldyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBjb25zdCBjaGFyICpuYW1lKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHNvICpkc29zX19maW5kbmV3KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIF9fZHNvc19fZmluZG5ldygmZHNvc19fdXNlciwgbmFtZSk7Cit9CisKK2ludCBkc29fX2xvYWQoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKK2ludCBkc29fX2xvYWRfdm1saW51eF9wYXRoKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKKwkJCSAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOworaW50IGRzb19fbG9hZF9rYWxsc3ltcyhzdHJ1Y3QgZHNvICpzZWxmLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgc3RydWN0IG1hcCAqbWFwLAorCQkgICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CiB2b2lkIGRzb3NfX2ZwcmludGYoRklMRSAqZnApOwotc2l6ZV90IGRzb3NfX2ZwcmludGZfYnVpbGRpZChGSUxFICpmcCk7CitzaXplX3QgZHNvc19fZnByaW50Zl9idWlsZGlkKEZJTEUgKmZwLCBib29sIHdpdGhfaGl0cyk7CiAKIHNpemVfdCBkc29fX2ZwcmludGZfYnVpbGRpZChzdHJ1Y3QgZHNvICpzZWxmLCBGSUxFICpmcCk7CiBzaXplX3QgZHNvX19mcHJpbnRmKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSwgRklMRSAqZnApOwogY2hhciBkc29fX3N5bXRhYl9vcmlnaW4oY29uc3Qgc3RydWN0IGRzbyAqc2VsZik7Cit2b2lkIGRzb19fc2V0X2xvbmdfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBjaGFyICpuYW1lKTsKIHZvaWQgZHNvX19zZXRfYnVpbGRfaWQoc3RydWN0IGRzbyAqc2VsZiwgdm9pZCAqYnVpbGRfaWQpOwordm9pZCBkc29fX3JlYWRfcnVubmluZ19rZXJuZWxfYnVpbGRfaWQoc3RydWN0IGRzbyAqc2VsZik7CiBzdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIpOwogc3RydWN0IHN5bWJvbCAqZHNvX19maW5kX3N5bWJvbF9ieV9uYW1lKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSwKIAkJCQkJY29uc3QgY2hhciAqbmFtZSk7CiAKIGludCBmaWxlbmFtZV9fcmVhZF9idWlsZF9pZChjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqYmYsIHNpemVfdCBzaXplKTsKIGludCBzeXNmc19fcmVhZF9idWlsZF9pZChjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqYmYsIHNpemVfdCBzaXplKTsKLWJvb2wgZHNvc19fcmVhZF9idWlsZF9pZHModm9pZCk7Ci1pbnQgYnVpbGRfaWRfX3NwcmludGYodTggKnNlbGYsIGludCBsZW4sIGNoYXIgKmJmKTsKK2Jvb2wgZHNvc19fcmVhZF9idWlsZF9pZHMoYm9vbCB3aXRoX2hpdHMpOworaW50IGJ1aWxkX2lkX19zcHJpbnRmKGNvbnN0IHU4ICpzZWxmLCBpbnQgbGVuLCBjaGFyICpiZik7CitpbnQga2FsbHN5bXNfX3BhcnNlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB2b2lkICphcmcsCisJCSAgICBpbnQgKCpwcm9jZXNzX3N5bWJvbCkodm9pZCAqYXJnLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgIGNoYXIgdHlwZSwgdTY0IHN0YXJ0KSk7CiAKIGludCBzeW1ib2xfX2luaXQodm9pZCk7Ci1pbnQgcGVyZl9zZXNzaW9uX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZik7Citib29sIHN5bWJvbF90eXBlX19pc19hKGNoYXIgc3ltYm9sX3R5cGUsIGVudW0gbWFwX3R5cGUgbWFwX3R5cGUpOwogCi1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCBkc29zX191c2VyLCBkc29zX19rZXJuZWw7Ci1leHRlcm4gc3RydWN0IGRzbyAqdmRzbzsKICNlbmRpZiAvKiBfX1BFUkZfU1lNQk9MICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMKaW5kZXggNGEwOGRjZi4uMjFiOTIxNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYwpAQCAtMzEsMTIgKzMxLDQxIEBACiAJcmV0dXJuIHNlbGY7CiB9CiAKK3N0YXRpYyB2b2lkIG1hcF9ncm91cHNfX2ZsdXNoKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmKQoreworCWludCB0eXBlOworCisJZm9yICh0eXBlID0gMDsgdHlwZSA8IE1BUF9fTlJfVFlQRVM7IHR5cGUrKykgeworCQlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZzZWxmLT5tYXBzW3R5cGVdOworCQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX2ZpcnN0KHJvb3QpOworCisJCXdoaWxlIChuZXh0KSB7CisJCQlzdHJ1Y3QgbWFwICpwb3MgPSByYl9lbnRyeShuZXh0LCBzdHJ1Y3QgbWFwLCByYl9ub2RlKTsKKwkJCW5leHQgPSByYl9uZXh0KCZwb3MtPnJiX25vZGUpOworCQkJcmJfZXJhc2UoJnBvcy0+cmJfbm9kZSwgcm9vdCk7CisJCQkvKgorCQkJICogV2UgbWF5IGhhdmUgcmVmZXJlbmNlcyB0byB0aGlzIG1hcCwgZm9yCisJCQkgKiBpbnN0YW5jZSBpbiBzb21lIGhpc3RfZW50cnkgaW5zdGFuY2VzLCBzbworCQkJICoganVzdCBtb3ZlIHRoZW0gdG8gYSBzZXBhcmF0ZSBsaXN0LgorCQkJICovCisJCQlsaXN0X2FkZF90YWlsKCZwb3MtPm5vZGUsICZzZWxmLT5yZW1vdmVkX21hcHNbcG9zLT50eXBlXSk7CisJCX0KKwl9Cit9CisKIGludCB0aHJlYWRfX3NldF9jb21tKHN0cnVjdCB0aHJlYWQgKnNlbGYsIGNvbnN0IGNoYXIgKmNvbW0pCiB7CisJaW50IGVycjsKKwogCWlmIChzZWxmLT5jb21tKQogCQlmcmVlKHNlbGYtPmNvbW0pOwogCXNlbGYtPmNvbW0gPSBzdHJkdXAoY29tbSk7Ci0JcmV0dXJuIHNlbGYtPmNvbW0gPyAwIDogLUVOT01FTTsKKwllcnIgPSBzZWxmLT5jb21tID09IE5VTEwgPyAtRU5PTUVNIDogMDsKKwlpZiAoIWVycikgeworCQlzZWxmLT5jb21tX3NldCA9IHRydWU7CisJCW1hcF9ncm91cHNfX2ZsdXNoKCZzZWxmLT5tZyk7CisJfQorCXJldHVybiBlcnI7CiB9CiAKIGludCB0aHJlYWRfX2NvbW1fbGVuKHN0cnVjdCB0aHJlYWQgKnNlbGYpCkBAIC01MCwxMSArNzksNiBAQAogCXJldHVybiBzZWxmLT5jb21tX2xlbjsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKm1hcF90eXBlX19uYW1lW01BUF9fTlJfVFlQRVNdID0gewotCVtNQVBfX0ZVTkNUSU9OXSA9ICJGdW5jdGlvbnMiLAotCVtNQVBfX1ZBUklBQkxFXSA9ICJWYXJpYWJsZXMiLAotfTsKLQogc3RhdGljIHNpemVfdCBfX21hcF9ncm91cHNfX2ZwcmludGZfbWFwcyhzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwKIAkJCQkJIGVudW0gbWFwX3R5cGUgdHlwZSwgRklMRSAqZnApCiB7CkBAIC0yNTUsMTEgKzI3OSwxNCBAQAogewogCWludCBpOwogCi0JaWYgKHNlbGYtPmNvbW0pCi0JCWZyZWUoc2VsZi0+Y29tbSk7Ci0Jc2VsZi0+Y29tbSA9IHN0cmR1cChwYXJlbnQtPmNvbW0pOwotCWlmICghc2VsZi0+Y29tbSkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHBhcmVudC0+Y29tbV9zZXQpIHsKKwkJaWYgKHNlbGYtPmNvbW0pCisJCQlmcmVlKHNlbGYtPmNvbW0pOworCQlzZWxmLT5jb21tID0gc3RyZHVwKHBhcmVudC0+Y29tbSk7CisJCWlmICghc2VsZi0+Y29tbSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlzZWxmLT5jb21tX3NldCA9IHRydWU7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IE1BUF9fTlJfVFlQRVM7ICsraSkKIAkJaWYgKG1hcF9ncm91cHNfX2Nsb25lKCZzZWxmLT5tZywgJnBhcmVudC0+bWcsIGkpIDwgMCkKQEAgLTI4MiwxNCArMzA5LDEzIEBACiB9CiAKIHN0cnVjdCBzeW1ib2wgKm1hcF9ncm91cHNfX2ZpbmRfc3ltYm9sKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLAotCQkJCSAgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAogCQkJCSAgICAgICBlbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyLAogCQkJCSAgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCXN0cnVjdCBtYXAgKm1hcCA9IG1hcF9ncm91cHNfX2ZpbmQoc2VsZiwgdHlwZSwgYWRkcik7CiAKIAlpZiAobWFwICE9IE5VTEwpCi0JCXJldHVybiBtYXBfX2ZpbmRfc3ltYm9sKG1hcCwgc2Vzc2lvbiwgbWFwLT5tYXBfaXAobWFwLCBhZGRyKSwgZmlsdGVyKTsKKwkJcmV0dXJuIG1hcF9fZmluZF9zeW1ib2wobWFwLCBtYXAtPm1hcF9pcChtYXAsIGFkZHIpLCBmaWx0ZXIpOwogCiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmggYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmgKaW5kZXggYzIwNmY3Mi4uMGEyOGYzOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaApAQCAtMTUsNiArMTUsNyBAQAogCXN0cnVjdCBtYXBfZ3JvdXBzCW1nOwogCXBpZF90CQkJcGlkOwogCWNoYXIJCQlzaG9ydG5hbWVbM107CisJYm9vbAkJCWNvbW1fc2V0OwogCWNoYXIJCQkqY29tbTsKIAlpbnQJCQljb21tX2xlbjsKIH07CkBAIC00OCwyMyArNDksMzYgQEAKIAlyZXR1cm4gc2VsZiA/IG1hcF9ncm91cHNfX2ZpbmQoJnNlbGYtPm1nLCB0eXBlLCBhZGRyKSA6IE5VTEw7CiB9CiAKK3ZvaWQgdGhyZWFkX19maW5kX2FkZHJfbWFwKHN0cnVjdCB0aHJlYWQgKnNlbGYsCisJCQkgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCB1OCBjcHVtb2RlLAorCQkJICAgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkciwKKwkJCSAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCk7CisKIHZvaWQgdGhyZWFkX19maW5kX2FkZHJfbG9jYXRpb24oc3RydWN0IHRocmVhZCAqc2VsZiwKIAkJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCB1OCBjcHVtb2RlLAogCQkJCWVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCiAJCQkJc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsLAogCQkJCXN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwogc3RydWN0IHN5bWJvbCAqbWFwX2dyb3Vwc19fZmluZF9zeW1ib2woc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCi0JCQkJICAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCiAJCQkJICAgICAgIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIsCiAJCQkJICAgICAgIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzeW1ib2wgKgotbWFwX2dyb3Vwc19fZmluZF9mdW5jdGlvbihzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkJCSAgdTY0IGFkZHIsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzeW1ib2wgKm1hcF9ncm91cHNfX2ZpbmRfZnVuY3Rpb24oc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCisJCQkJCQkgICAgICAgdTY0IGFkZHIsCisJCQkJCQkgICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKLQlyZXR1cm4gbWFwX2dyb3Vwc19fZmluZF9zeW1ib2woc2VsZiwgc2Vzc2lvbiwgTUFQX19GVU5DVElPTiwgYWRkciwgZmlsdGVyKTsKKwlyZXR1cm4gbWFwX2dyb3Vwc19fZmluZF9zeW1ib2woc2VsZiwgTUFQX19GVU5DVElPTiwgYWRkciwgZmlsdGVyKTsKIH0KIAogc3RydWN0IG1hcCAqbWFwX2dyb3Vwc19fZmluZF9ieV9uYW1lKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLAogCQkJCSAgICAgZW51bSBtYXBfdHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lKTsKKworaW50IF9fbWFwX2dyb3Vwc19fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmLAorCQkJCSAgICAgc3RydWN0IG1hcCAqdm1saW51eF9tYXBzW01BUF9fTlJfVFlQRVNdLAorCQkJCSAgICAgc3RydWN0IGRzbyAqa2VybmVsKTsKK2ludCBtYXBfZ3JvdXBzX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCisJCQkJICAgc3RydWN0IG1hcCAqdm1saW51eF9tYXBzW01BUF9fTlJfVFlQRVNdKTsKKworc3RydWN0IG1hcCAqbWFwX2dyb3Vwc19fbmV3X21vZHVsZShzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwgdTY0IHN0YXJ0LAorCQkJCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKICNlbmRpZgkvKiBfX1BFUkZfVEhSRUFEX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1pbmZvLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtaW5mby5jCmluZGV4IGNhY2UzNTUuLjVlYTg5NzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1pbmZvLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LWluZm8uYwpAQCAtMjAsNiArMjAsNyBAQAogICovCiAjZGVmaW5lIF9HTlVfU09VUkNFCiAjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8bW50ZW50Lmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTM3LDYgKzM4LDcgQEAKIAogI2luY2x1ZGUgIi4uL3BlcmYuaCIKICNpbmNsdWRlICJ0cmFjZS1ldmVudC5oIgorI2luY2x1ZGUgImRlYnVnZnMuaCIKIAogI2RlZmluZSBWRVJTSU9OICIwLjUiCiAKQEAgLTEwMSwzMiArMTAzLDEyIEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICpmaW5kX2RlYnVnZnModm9pZCkKIHsKLQlzdGF0aWMgY2hhciBkZWJ1Z2ZzW01BWF9QQVRIKzFdOwotCXN0YXRpYyBpbnQgZGVidWdmc19mb3VuZDsKLQljaGFyIHR5cGVbMTAwXTsKLQlGSUxFICpmcDsKKwljb25zdCBjaGFyICpwYXRoID0gZGVidWdmc19tb3VudChOVUxMKTsKIAotCWlmIChkZWJ1Z2ZzX2ZvdW5kKQotCQlyZXR1cm4gZGVidWdmczsKKwlpZiAoIXBhdGgpCisJCWRpZSgiWW91ciBrZXJuZWwgbm90IHN1cHBvcnQgZGVidWdmcyBmaWxlc3lzdGVtIik7CiAKLQlpZiAoKGZwID0gZm9wZW4oIi9wcm9jL21vdW50cyIsInIiKSkgPT0gTlVMTCkKLQkJZGllKCJDYW4ndCBvcGVuIC9wcm9jL21vdW50cyBmb3IgcmVhZCIpOwotCi0Jd2hpbGUgKGZzY2FuZihmcCwgIiUqcyAlIgotCQkgICAgICBTVFIoTUFYX1BBVEgpCi0JCSAgICAgICJzICU5OXMgJSpzICUqZCAlKmRcbiIsCi0JCSAgICAgIGRlYnVnZnMsIHR5cGUpID09IDIpIHsKLQkJaWYgKHN0cmNtcCh0eXBlLCAiZGVidWdmcyIpID09IDApCi0JCQlicmVhazsKLQl9Ci0JZmNsb3NlKGZwKTsKLQotCWlmIChzdHJjbXAodHlwZSwgImRlYnVnZnMiKSAhPSAwKQotCQlkaWUoImRlYnVnZnMgbm90IG1vdW50ZWQsIHBsZWFzZSBtb3VudCIpOwotCi0JZGVidWdmc19mb3VuZCA9IDE7Ci0KLQlyZXR1cm4gZGVidWdmczsKKwlyZXR1cm4gcGF0aDsKIH0KIAogLyoKQEAgLTI3MSw2ICsyNTMsOCBAQAogCXdyaXRlX29yX2RpZSgiaGVhZGVyX3BhZ2UiLCAxMik7CiAJd3JpdGVfb3JfZGllKCZzaXplLCA4KTsKIAljaGVja19zaXplID0gY29weV9maWxlX2ZkKGZkKTsKKwljbG9zZShmZCk7CisKIAlpZiAoc2l6ZSAhPSBjaGVja19zaXplKQogCQlkaWUoIndyb25nIHNpemUgZm9yICclcycgc2l6ZT0lbGxkIHJlYWQ9JWxsZCIsCiAJCSAgICBwYXRoLCBzaXplLCBjaGVja19zaXplKTsKQEAgLTI4OSw2ICsyNzMsNyBAQAogCWlmIChzaXplICE9IGNoZWNrX3NpemUpCiAJCWRpZSgid3Jvbmcgc2l6ZSBmb3IgJyVzJyIsIHBhdGgpOwogCXB1dF90cmFjaW5nX2ZpbGUocGF0aCk7CisJY2xvc2UoZmQpOwogfQogCiBzdGF0aWMgYm9vbCBuYW1lX2luX3RwX2xpc3QoY2hhciAqc3lzLCBzdHJ1Y3QgdHJhY2Vwb2ludF9wYXRoICp0cHMpCkBAIC0zMTcsNyArMzAyLDggQEAKIAkJZGllKCJjYW4ndCByZWFkIGRpcmVjdG9yeSAnJXMnIiwgc3lzKTsKIAogCXdoaWxlICgoZGVudCA9IHJlYWRkaXIoZGlyKSkpIHsKLQkJaWYgKHN0cmNtcChkZW50LT5kX25hbWUsICIuIikgPT0gMCB8fAorCQlpZiAoZGVudC0+ZF90eXBlICE9IERUX0RJUiB8fAorCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4iKSA9PSAwIHx8CiAJCSAgICBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLi4iKSA9PSAwIHx8CiAJCSAgICAhbmFtZV9pbl90cF9saXN0KGRlbnQtPmRfbmFtZSwgdHBzKSkKIAkJCWNvbnRpbnVlOwpAQCAtMzM0LDcgKzMyMCw4IEBACiAKIAlyZXdpbmRkaXIoZGlyKTsKIAl3aGlsZSAoKGRlbnQgPSByZWFkZGlyKGRpcikpKSB7Ci0JCWlmIChzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLiIpID09IDAgfHwKKwkJaWYgKGRlbnQtPmRfdHlwZSAhPSBEVF9ESVIgfHwKKwkJICAgIHN0cmNtcChkZW50LT5kX25hbWUsICIuIikgPT0gMCB8fAogCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4uIikgPT0gMCB8fAogCQkgICAgIW5hbWVfaW5fdHBfbGlzdChkZW50LT5kX25hbWUsIHRwcykpCiAJCQljb250aW51ZTsKQEAgLTM1Myw2ICszNDAsNyBAQAogCiAJCWZyZWUoZm9ybWF0KTsKIAl9CisJY2xvc2VkaXIoZGlyKTsKIH0KIAogc3RhdGljIHZvaWQgcmVhZF9mdHJhY2VfZmlsZXMoc3RydWN0IHRyYWNlcG9pbnRfcGF0aCAqdHBzKQpAQCAtMzk0LDI2ICszODIsMjEgQEAKIAkJZGllKCJjYW4ndCByZWFkIGRpcmVjdG9yeSAnJXMnIiwgcGF0aCk7CiAKIAl3aGlsZSAoKGRlbnQgPSByZWFkZGlyKGRpcikpKSB7Ci0JCWlmIChzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLiIpID09IDAgfHwKKwkJaWYgKGRlbnQtPmRfdHlwZSAhPSBEVF9ESVIgfHwKKwkJICAgIHN0cmNtcChkZW50LT5kX25hbWUsICIuIikgPT0gMCB8fAogCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4uIikgPT0gMCB8fAogCQkgICAgc3RyY21wKGRlbnQtPmRfbmFtZSwgImZ0cmFjZSIpID09IDAgfHwKIAkJICAgICFzeXN0ZW1faW5fdHBfbGlzdChkZW50LT5kX25hbWUsIHRwcykpCiAJCQljb250aW51ZTsKLQkJc3lzID0gbWFsbG9jX29yX2RpZShzdHJsZW4ocGF0aCkgKyBzdHJsZW4oZGVudC0+ZF9uYW1lKSArIDIpOwotCQlzcHJpbnRmKHN5cywgIiVzLyVzIiwgcGF0aCwgZGVudC0+ZF9uYW1lKTsKLQkJcmV0ID0gc3RhdChzeXMsICZzdCk7Ci0JCWZyZWUoc3lzKTsKLQkJaWYgKHJldCA8IDApCi0JCQljb250aW51ZTsKLQkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpCi0JCQljb3VudCsrOworCQljb3VudCsrOwogCX0KIAogCXdyaXRlX29yX2RpZSgmY291bnQsIDQpOwogCiAJcmV3aW5kZGlyKGRpcik7CiAJd2hpbGUgKChkZW50ID0gcmVhZGRpcihkaXIpKSkgewotCQlpZiAoc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4iKSA9PSAwIHx8CisJCWlmIChkZW50LT5kX3R5cGUgIT0gRFRfRElSIHx8CisJCSAgICBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLiIpID09IDAgfHwKIAkJICAgIHN0cmNtcChkZW50LT5kX25hbWUsICIuLiIpID09IDAgfHwKIAkJICAgIHN0cmNtcChkZW50LT5kX25hbWUsICJmdHJhY2UiKSA9PSAwIHx8CiAJCSAgICAhc3lzdGVtX2luX3RwX2xpc3QoZGVudC0+ZF9uYW1lLCB0cHMpKQpAQCAtNDIyLDE0ICs0MDUsMTMgQEAKIAkJc3ByaW50ZihzeXMsICIlcy8lcyIsIHBhdGgsIGRlbnQtPmRfbmFtZSk7CiAJCXJldCA9IHN0YXQoc3lzLCAmc3QpOwogCQlpZiAocmV0ID49IDApIHsKLQkJCWlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7Ci0JCQkJd3JpdGVfb3JfZGllKGRlbnQtPmRfbmFtZSwgc3RybGVuKGRlbnQtPmRfbmFtZSkgKyAxKTsKLQkJCQljb3B5X2V2ZW50X3N5c3RlbShzeXMsIHRwcyk7Ci0JCQl9CisJCQl3cml0ZV9vcl9kaWUoZGVudC0+ZF9uYW1lLCBzdHJsZW4oZGVudC0+ZF9uYW1lKSArIDEpOworCQkJY29weV9ldmVudF9zeXN0ZW0oc3lzLCB0cHMpOwogCQl9CiAJCWZyZWUoc3lzKTsKIAl9CiAKKwljbG9zZWRpcihkaXIpOwogCXB1dF90cmFjaW5nX2ZpbGUocGF0aCk7CiB9CiAKQEAgLTUzMyw3ICs1MTUsNyBAQAogCXdyaXRlX29yX2RpZShidWYsIDEpOwogCiAJLyogc2F2ZSBwYWdlX3NpemUgKi8KLQlwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpOworCXBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKIAl3cml0ZV9vcl9kaWUoJnBhZ2Vfc2l6ZSwgNCk7CiAKIAlyZWFkX2hlYWRlcl9maWxlcygpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYwppbmRleCBjNWMzMmJlLi45YjNjMjBmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYworKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYwpAQCAtMTkyNSw2ICsxOTI1LDE1IEBACiAJaWYgKCFmaWVsZCkKIAkJcmV0dXJuIE5VTEw7CiAKKwlpZiAoZmllbGQtPmZsYWdzICYgRklFTERfSVNfU1RSSU5HKSB7CisJCWludCBvZmZzZXQ7CisKKwkJb2Zmc2V0ID0gKihpbnQgKikoZGF0YSArIGZpZWxkLT5vZmZzZXQpOworCQlvZmZzZXQgJj0gMHhmZmZmOworCisJCXJldHVybiBkYXRhICsgb2Zmc2V0OworCX0KKwogCXJldHVybiBkYXRhICsgZmllbGQtPm9mZnNldDsKIH0KIApAQCAtMzI3NywzICszMjg2LDE4IEBACiAJY3B1cyA9IG5yX2NwdXM7CiAJbG9uZ19zaXplID0gbG9uZ19zejsKIH0KKworaW50IGNvbW1vbl9wYyhzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpCit7CisJcmV0dXJuIHBhcnNlX2NvbW1vbl9wYyhjb250ZXh0LT5ldmVudF9kYXRhKTsKK30KKworaW50IGNvbW1vbl9mbGFncyhzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgKmNvbnRleHQpCit7CisJcmV0dXJuIHBhcnNlX2NvbW1vbl9mbGFncyhjb250ZXh0LT5ldmVudF9kYXRhKTsKK30KKworaW50IGNvbW1vbl9sb2NrX2RlcHRoKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCkKK3sKKwlyZXR1cm4gcGFyc2VfY29tbW9uX2xvY2tfZGVwdGgoY29udGV4dC0+ZXZlbnRfZGF0YSk7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5oIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBlcmwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg4ZmIyNi4uMDAwMDAwMAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGVybC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotI2lmbmRlZiBfX1BFUkZfVFJBQ0VfRVZFTlRfUEVSTF9ICi0jZGVmaW5lIF9fUEVSRl9UUkFDRV9FVkVOVF9QRVJMX0gKLSNpZmRlZiBOT19MSUJQRVJMCi10eXBlZGVmIGludCBJTlRFUlA7Ci0jZGVmaW5lIGRTUAotI2RlZmluZSBFTlRFUgotI2RlZmluZSBTQVZFVE1QUwotI2RlZmluZSBQVVRCQUNLCi0jZGVmaW5lIFNQQUdBSU4KLSNkZWZpbmUgRlJFRVRNUFMKLSNkZWZpbmUgTEVBVkUKLSNkZWZpbmUgU1AKLSNkZWZpbmUgRVJSU1YKLSNkZWZpbmUgR19TQ0FMQVIJCSgwKQotI2RlZmluZSBHX0RJU0NBUkQJCSgwKQotI2RlZmluZSBHX05PQVJHUwkJKDApCi0jZGVmaW5lIFBVU0hNQVJLKGEpCi0jZGVmaW5lIFN2VFJVRShhKQkJKDApCi0jZGVmaW5lIFhQVVNIcyhzKQotI2RlZmluZSBzdl8ybW9ydGFsKGEpCi0jZGVmaW5lIG5ld1NWcHYoYSxiKQotI2RlZmluZSBuZXdTVnV2KGEpCi0jZGVmaW5lIG5ld1NWaXYoYSkKLSNkZWZpbmUgZ2V0X2N2KGEsYikJCSgwKQotI2RlZmluZSBjYWxsX3B2KGEsYikJCSgwKQotI2RlZmluZSBwZXJsX2FsbG9jKCkJCSgwKQotI2RlZmluZSBwZXJsX2NvbnN0cnVjdChhKQkoMCkKLSNkZWZpbmUgcGVybF9wYXJzZShhLGIsYyxkLGUpCSgwKQotI2RlZmluZSBwZXJsX3J1bihhKQkJKDApCi0jZGVmaW5lIHBlcmxfZGVzdHJ1Y3QoYSkJKDApCi0jZGVmaW5lIHBlcmxfZnJlZShhKQkJKDApCi0jZGVmaW5lIHBUSFgJCQl2b2lkCi0jZGVmaW5lIENWCQkJdm9pZAotI2RlZmluZSBkWFNVQl9TWVMKLSNkZWZpbmUgcFRIWF8KLXN0YXRpYyBpbmxpbmUgdm9pZCBuZXdYUyhjb25zdCBjaGFyICphLCB2b2lkICpiLCBjb25zdCBjaGFyICpjKSB7fQotc3RhdGljIHZvaWQgYm9vdF9QZXJmX19UcmFjZV9fQ29udGV4dChwVEhYXyBDViAqY3YpIHt9Ci1zdGF0aWMgdm9pZCBib290X0R5bmFMb2FkZXIocFRIWF8gQ1YgKmN2KSB7fQotI2Vsc2UKLSNpbmNsdWRlIDxFWFRFUk4uaD4KLSNpbmNsdWRlIDxwZXJsLmg+Ci12b2lkIGJvb3RfUGVyZl9fVHJhY2VfX0NvbnRleHQocFRIWF8gQ1YgKmN2KTsKLXZvaWQgYm9vdF9EeW5hTG9hZGVyKHBUSFhfIENWICpjdik7Ci10eXBlZGVmIFBlcmxJbnRlcnByZXRlciAqIElOVEVSUDsKLSNlbmRpZgotCi1zdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgewotCXZvaWQgKmV2ZW50X2RhdGE7Ci19OwotCi1pbnQgY29tbW9uX3BjKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCk7Ci1pbnQgY29tbW9uX2ZsYWdzKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCk7Ci1pbnQgY29tbW9uX2xvY2tfZGVwdGgoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KTsKLQotI2VuZGlmIC8qIF9fUEVSRl9UUkFDRV9FVkVOVF9QRVJMX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1yZWFkLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcmVhZC5jCmluZGV4IDE3NDQ0MjIuLjdjZDExOTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1yZWFkLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXJlYWQuYwpAQCAtMTgsNyArMTgsNyBAQAogICoKICAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAgKi8KLSNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAogCiAjaW5jbHVkZSA8ZGlyZW50Lmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTgzLDcgKzgzLDcgQEAKIAljaGFyICpzdHIgPSBOVUxMOwogCWludCBzaXplID0gMDsKIAlpbnQgaTsKLQlpbnQgcjsKKwlvZmZfdCByOwogCiAJZm9yICg7OykgewogCQlyID0gcmVhZChpbnB1dF9mZCwgYnVmLCBCVUZTSVopOwpAQCAtMTE4LDcgKzExOCw3IEBACiAKIAkvKiBtb3ZlIHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nICovCiAJciA9IGxzZWVrKGlucHV0X2ZkLCAtKHIgLSBpKSwgU0VFS19DVVIpOwotCWlmIChyIDwgMCkKKwlpZiAociA9PSAob2ZmX3QpLTEpCiAJCWRpZSgibHNlZWsiKTsKIAogCWlmIChzdHIpIHsKQEAgLTI4Miw4ICsyODIsOCBAQAogCiBzdGF0aWMgdm9pZCBnZXRfbmV4dF9wYWdlKGludCBjcHUpCiB7Ci0Jb2ZmNjRfdCBzYXZlX3NlZWs7Ci0Jb2ZmNjRfdCByZXQ7CisJb2ZmX3Qgc2F2ZV9zZWVrOworCW9mZl90IHJldDsKIAogCWlmICghY3B1X2RhdGFbY3B1XS5wYWdlKQogCQlyZXR1cm47CkBAIC0yOTgsMTcgKzI5OCwxNyBAQAogCQl1cGRhdGVfY3B1X2RhdGFfaW5kZXgoY3B1KTsKIAogCQkvKiBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZSBtYXkgZXhwZWN0IHRoZSBwb2ludGVyIHRvIG5vdCBtb3ZlICovCi0JCXNhdmVfc2VlayA9IGxzZWVrNjQoaW5wdXRfZmQsIDAsIFNFRUtfQ1VSKTsKKwkJc2F2ZV9zZWVrID0gbHNlZWsoaW5wdXRfZmQsIDAsIFNFRUtfQ1VSKTsKIAotCQlyZXQgPSBsc2VlazY0KGlucHV0X2ZkLCBjcHVfZGF0YVtjcHVdLm9mZnNldCwgU0VFS19TRVQpOwotCQlpZiAocmV0IDwgMCkKKwkJcmV0ID0gbHNlZWsoaW5wdXRfZmQsIGNwdV9kYXRhW2NwdV0ub2Zmc2V0LCBTRUVLX1NFVCk7CisJCWlmIChyZXQgPT0gKG9mZl90KS0xKQogCQkJZGllKCJmYWlsZWQgdG8gbHNlZWsiKTsKIAkJcmV0ID0gcmVhZChpbnB1dF9mZCwgY3B1X2RhdGFbY3B1XS5wYWdlLCBwYWdlX3NpemUpOwogCQlpZiAocmV0IDwgMCkKIAkJCWRpZSgiZmFpbGVkIHRvIHJlYWQgcGFnZSIpOwogCiAJCS8qIHJlc2V0IHRoZSBmaWxlIHBvaW50ZXIgYmFjayAqLwotCQlsc2VlazY0KGlucHV0X2ZkLCBzYXZlX3NlZWssIFNFRUtfU0VUKTsKKwkJbHNlZWsoaW5wdXRfZmQsIHNhdmVfc2VlaywgU0VFS19TRVQpOwogCiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtc2NyaXB0aW5nLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtc2NyaXB0aW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VhOTgzYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1zY3JpcHRpbmcuYwpAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIHRyYWNlLWV2ZW50LXNjcmlwdGluZy4gIFNjcmlwdGluZyBlbmdpbmUgY29tbW9uIGFuZCBpbml0aWFsaXphdGlvbiBjb2RlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgIi4uL3BlcmYuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAidHJhY2UtZXZlbnQuaCIKKworc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpzY3JpcHRpbmdfY29udGV4dDsKKworc3RhdGljIGludCBzdG9wX3NjcmlwdF91bnN1cHBvcnRlZCh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2V2ZW50X3Vuc3VwcG9ydGVkKGludCBjcHUgX191bnVzZWQsCisJCQkJICAgICAgdm9pZCAqZGF0YSBfX3VudXNlZCwKKwkJCQkgICAgICBpbnQgc2l6ZSBfX3VudXNlZCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbnNlY3MgX191bnVzZWQsCisJCQkJICAgICAgY2hhciAqY29tbSBfX3VudXNlZCkKK3sKK30KKworc3RhdGljIHZvaWQgcHJpbnRfcHl0aG9uX3Vuc3VwcG9ydGVkX21zZyh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLCAiUHl0aG9uIHNjcmlwdGluZyBub3Qgc3VwcG9ydGVkLiIKKwkJIiAgSW5zdGFsbCBsaWJweXRob24gYW5kIHJlYnVpbGQgcGVyZiB0byBlbmFibGUgaXQuXG4iCisJCSJGb3IgZXhhbXBsZTpcbiAgIyBhcHQtZ2V0IGluc3RhbGwgcHl0aG9uLWRldiAodWJ1bnR1KSIKKwkJIlxuICAjIHl1bSBpbnN0YWxsIHB5dGhvbi1kZXZlbCAoRmVkb3JhKSIKKwkJIlxuICBldGMuXG4iKTsKK30KKworc3RhdGljIGludCBweXRob25fc3RhcnRfc2NyaXB0X3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKnNjcmlwdCBfX3VudXNlZCwKKwkJCQkJICAgaW50IGFyZ2MgX191bnVzZWQsCisJCQkJCSAgIGNvbnN0IGNoYXIgKiphcmd2IF9fdW51c2VkKQoreworCXByaW50X3B5dGhvbl91bnN1cHBvcnRlZF9tc2coKTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBweXRob25fZ2VuZXJhdGVfc2NyaXB0X3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKm91dGZpbGUgX191bnVzZWQpCit7CisJcHJpbnRfcHl0aG9uX3Vuc3VwcG9ydGVkX21zZygpOworCisJcmV0dXJuIC0xOworfQorCitzdHJ1Y3Qgc2NyaXB0aW5nX29wcyBweXRob25fc2NyaXB0aW5nX3Vuc3VwcG9ydGVkX29wcyA9IHsKKwkubmFtZSA9ICJQeXRob24iLAorCS5zdGFydF9zY3JpcHQgPSBweXRob25fc3RhcnRfc2NyaXB0X3Vuc3VwcG9ydGVkLAorCS5zdG9wX3NjcmlwdCA9IHN0b3Bfc2NyaXB0X3Vuc3VwcG9ydGVkLAorCS5wcm9jZXNzX2V2ZW50ID0gcHJvY2Vzc19ldmVudF91bnN1cHBvcnRlZCwKKwkuZ2VuZXJhdGVfc2NyaXB0ID0gcHl0aG9uX2dlbmVyYXRlX3NjcmlwdF91bnN1cHBvcnRlZCwKK307CisKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX3B5dGhvbl9zY3JpcHRpbmcoc3RydWN0IHNjcmlwdGluZ19vcHMgKnNjcmlwdGluZ19vcHMpCit7CisJaW50IGVycjsKKwllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigiUHl0aG9uIiwgc2NyaXB0aW5nX29wcyk7CisJaWYgKGVycikKKwkJZGllKCJlcnJvciByZWdpc3RlcmluZyBQeXRob24gc2NyaXB0IGV4dGVuc2lvbiIpOworCisJZXJyID0gc2NyaXB0X3NwZWNfcmVnaXN0ZXIoInB5Iiwgc2NyaXB0aW5nX29wcyk7CisJaWYgKGVycikKKwkJZGllKCJlcnJvciByZWdpc3RlcmluZyBweSBzY3JpcHQgZXh0ZW5zaW9uIik7CisKKwlzY3JpcHRpbmdfY29udGV4dCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0KSk7Cit9CisKKyNpZmRlZiBOT19MSUJQWVRIT04KK3ZvaWQgc2V0dXBfcHl0aG9uX3NjcmlwdGluZyh2b2lkKQoreworCXJlZ2lzdGVyX3B5dGhvbl9zY3JpcHRpbmcoJnB5dGhvbl9zY3JpcHRpbmdfdW5zdXBwb3J0ZWRfb3BzKTsKK30KKyNlbHNlCitzdHJ1Y3Qgc2NyaXB0aW5nX29wcyBweXRob25fc2NyaXB0aW5nX29wczsKKwordm9pZCBzZXR1cF9weXRob25fc2NyaXB0aW5nKHZvaWQpCit7CisJcmVnaXN0ZXJfcHl0aG9uX3NjcmlwdGluZygmcHl0aG9uX3NjcmlwdGluZ19vcHMpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHByaW50X3BlcmxfdW5zdXBwb3J0ZWRfbXNnKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsICJQZXJsIHNjcmlwdGluZyBub3Qgc3VwcG9ydGVkLiIKKwkJIiAgSW5zdGFsbCBsaWJwZXJsIGFuZCByZWJ1aWxkIHBlcmYgdG8gZW5hYmxlIGl0LlxuIgorCQkiRm9yIGV4YW1wbGU6XG4gICMgYXB0LWdldCBpbnN0YWxsIGxpYnBlcmwtZGV2ICh1YnVudHUpIgorCQkiXG4gICMgeXVtIGluc3RhbGwgJ3BlcmwoRXh0VXRpbHM6OkVtYmVkKScgKEZlZG9yYSkiCisJCSJcbiAgZXRjLlxuIik7Cit9CisKK3N0YXRpYyBpbnQgcGVybF9zdGFydF9zY3JpcHRfdW5zdXBwb3J0ZWQoY29uc3QgY2hhciAqc2NyaXB0IF9fdW51c2VkLAorCQkJCQkgaW50IGFyZ2MgX191bnVzZWQsCisJCQkJCSBjb25zdCBjaGFyICoqYXJndiBfX3VudXNlZCkKK3sKKwlwcmludF9wZXJsX3Vuc3VwcG9ydGVkX21zZygpOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHBlcmxfZ2VuZXJhdGVfc2NyaXB0X3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKm91dGZpbGUgX191bnVzZWQpCit7CisJcHJpbnRfcGVybF91bnN1cHBvcnRlZF9tc2coKTsKKworCXJldHVybiAtMTsKK30KKworc3RydWN0IHNjcmlwdGluZ19vcHMgcGVybF9zY3JpcHRpbmdfdW5zdXBwb3J0ZWRfb3BzID0geworCS5uYW1lID0gIlBlcmwiLAorCS5zdGFydF9zY3JpcHQgPSBwZXJsX3N0YXJ0X3NjcmlwdF91bnN1cHBvcnRlZCwKKwkuc3RvcF9zY3JpcHQgPSBzdG9wX3NjcmlwdF91bnN1cHBvcnRlZCwKKwkucHJvY2Vzc19ldmVudCA9IHByb2Nlc3NfZXZlbnRfdW5zdXBwb3J0ZWQsCisJLmdlbmVyYXRlX3NjcmlwdCA9IHBlcmxfZ2VuZXJhdGVfc2NyaXB0X3Vuc3VwcG9ydGVkLAorfTsKKworc3RhdGljIHZvaWQgcmVnaXN0ZXJfcGVybF9zY3JpcHRpbmcoc3RydWN0IHNjcmlwdGluZ19vcHMgKnNjcmlwdGluZ19vcHMpCit7CisJaW50IGVycjsKKwllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigiUGVybCIsIHNjcmlwdGluZ19vcHMpOworCWlmIChlcnIpCisJCWRpZSgiZXJyb3IgcmVnaXN0ZXJpbmcgUGVybCBzY3JpcHQgZXh0ZW5zaW9uIik7CisKKwllcnIgPSBzY3JpcHRfc3BlY19yZWdpc3RlcigicGwiLCBzY3JpcHRpbmdfb3BzKTsKKwlpZiAoZXJyKQorCQlkaWUoImVycm9yIHJlZ2lzdGVyaW5nIHBsIHNjcmlwdCBleHRlbnNpb24iKTsKKworCXNjcmlwdGluZ19jb250ZXh0ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQpKTsKK30KKworI2lmZGVmIE5PX0xJQlBFUkwKK3ZvaWQgc2V0dXBfcGVybF9zY3JpcHRpbmcodm9pZCkKK3sKKwlyZWdpc3Rlcl9wZXJsX3NjcmlwdGluZygmcGVybF9zY3JpcHRpbmdfdW5zdXBwb3J0ZWRfb3BzKTsKK30KKyNlbHNlCitzdHJ1Y3Qgc2NyaXB0aW5nX29wcyBwZXJsX3NjcmlwdGluZ19vcHM7CisKK3ZvaWQgc2V0dXBfcGVybF9zY3JpcHRpbmcodm9pZCkKK3sKKwlyZWdpc3Rlcl9wZXJsX3NjcmlwdGluZygmcGVybF9zY3JpcHRpbmdfb3BzKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LmggYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQuaAppbmRleCA2YWQ0MDU2Li5jMzI2OWI5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQuaApAQCAtMjc5LDcgKzI3OSwxNSBAQAogCiBpbnQgc2NyaXB0X3NwZWNfcmVnaXN0ZXIoY29uc3QgY2hhciAqc3BlYywgc3RydWN0IHNjcmlwdGluZ19vcHMgKm9wcyk7CiAKLWV4dGVybiBzdHJ1Y3Qgc2NyaXB0aW5nX29wcyBwZXJsX3NjcmlwdGluZ19vcHM7CiB2b2lkIHNldHVwX3Blcmxfc2NyaXB0aW5nKHZvaWQpOwordm9pZCBzZXR1cF9weXRob25fc2NyaXB0aW5nKHZvaWQpOworCitzdHJ1Y3Qgc2NyaXB0aW5nX2NvbnRleHQgeworCXZvaWQgKmV2ZW50X2RhdGE7Cit9OworCitpbnQgY29tbW9uX3BjKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCk7CitpbnQgY29tbW9uX2ZsYWdzKHN0cnVjdCBzY3JpcHRpbmdfY29udGV4dCAqY29udGV4dCk7CitpbnQgY29tbW9uX2xvY2tfZGVwdGgoc3RydWN0IHNjcmlwdGluZ19jb250ZXh0ICpjb250ZXh0KTsKIAogI2VuZGlmIC8qIF9fUEVSRl9UUkFDRV9FVkVOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3V0aWwuYyBiL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjliODkwZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmMKQEAgLTAsMCArMSw5NCBAQAorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCitpbnQgbWtkaXJfcChjaGFyICpwYXRoLCBtb2RlX3QgbW9kZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgZXJyOworCWNoYXIgKmQgPSBwYXRoOworCisJaWYgKCpkICE9ICcvJykKKwkJcmV0dXJuIC0xOworCisJaWYgKHN0YXQocGF0aCwgJnN0KSA9PSAwKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgqKytkID09ICcvJyk7CisKKwl3aGlsZSAoKGQgPSBzdHJjaHIoZCwgJy8nKSkpIHsKKwkJKmQgPSAnXDAnOworCQllcnIgPSBzdGF0KHBhdGgsICZzdCkgJiYgbWtkaXIocGF0aCwgbW9kZSk7CisJCSpkKysgPSAnLyc7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gLTE7CisJCXdoaWxlICgqZCA9PSAnLycpCisJCQkrK2Q7CisJfQorCXJldHVybiAoc3RhdChwYXRoLCAmc3QpICYmIG1rZGlyKHBhdGgsIG1vZGUpKSA/IC0xIDogMDsKK30KKworc3RhdGljIGludCBzbG93X2NvcHlmaWxlKGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvKQoreworCWludCBlcnIgPSAwOworCWNoYXIgKmxpbmUgPSBOVUxMOworCXNpemVfdCBuOworCUZJTEUgKmZyb21fZnAgPSBmb3Blbihmcm9tLCAiciIpLCAqdG9fZnA7CisKKwlpZiAoZnJvbV9mcCA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXRvX2ZwID0gZm9wZW4odG8sICJ3Iik7CisJaWYgKHRvX2ZwID09IE5VTEwpCisJCWdvdG8gb3V0X2ZjbG9zZV9mcm9tOworCisJd2hpbGUgKGdldGxpbmUoJmxpbmUsICZuLCBmcm9tX2ZwKSA+IDApCisJCWlmIChmcHV0cyhsaW5lLCB0b19mcCkgPT0gRU9GKQorCQkJZ290byBvdXRfZmNsb3NlX3RvOworCWVyciA9IDA7CitvdXRfZmNsb3NlX3RvOgorCWZjbG9zZSh0b19mcCk7CisJZnJlZShsaW5lKTsKK291dF9mY2xvc2VfZnJvbToKKwlmY2xvc2UoZnJvbV9mcCk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworaW50IGNvcHlmaWxlKGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvKQoreworCWludCBmcm9tZmQsIHRvZmQ7CisJc3RydWN0IHN0YXQgc3Q7CisJdm9pZCAqYWRkcjsKKwlpbnQgZXJyID0gLTE7CisKKwlpZiAoc3RhdChmcm9tLCAmc3QpKQorCQlnb3RvIG91dDsKKworCWlmIChzdC5zdF9zaXplID09IDApIC8qIC9wcm9jPyBkbyBpdCBzbG93bHkuLi4gKi8KKwkJcmV0dXJuIHNsb3dfY29weWZpbGUoZnJvbSwgdG8pOworCisJZnJvbWZkID0gb3Blbihmcm9tLCBPX1JET05MWSk7CisJaWYgKGZyb21mZCA8IDApCisJCWdvdG8gb3V0OworCisJdG9mZCA9IGNyZWF0KHRvLCAwNzU1KTsKKwlpZiAodG9mZCA8IDApCisJCWdvdG8gb3V0X2Nsb3NlX2Zyb207CisKKwlhZGRyID0gbW1hcChOVUxMLCBzdC5zdF9zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmcm9tZmQsIDApOworCWlmIChhZGRyID09IE1BUF9GQUlMRUQpCisJCWdvdG8gb3V0X2Nsb3NlX3RvOworCisJaWYgKHdyaXRlKHRvZmQsIGFkZHIsIHN0LnN0X3NpemUpID09IHN0LnN0X3NpemUpCisJCWVyciA9IDA7CisKKwltdW5tYXAoYWRkciwgc3Quc3Rfc2l6ZSk7CitvdXRfY2xvc2VfdG86CisJY2xvc2UodG9mZCk7CisJaWYgKGVycikKKwkJdW5saW5rKHRvKTsKK291dF9jbG9zZV9mcm9tOgorCWNsb3NlKGZyb21mZCk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmggYi90b29scy9wZXJmL3V0aWwvdXRpbC5oCmluZGV4IGM2NzNkODguLjBmNWIyYTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3V0aWwuaApAQCAtNDAzLDQgKzQwMyw3IEBACiAjZW5kaWYKICNlbmRpZgogCitpbnQgbWtkaXJfcChjaGFyICpwYXRoLCBtb2RlX3QgbW9kZSk7CitpbnQgY29weWZpbGUoY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuYyBiL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuYwppbmRleCAxYzE1ZTM5Li5jZmE1NWQ2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdmFsdWVzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3ZhbHVlcy5jCkBAIC0xNjksNiArMTY5LDcgQEAKIAkJCQljb3VudGVyd2lkdGhbal0sIHZhbHVlcy0+dmFsdWVbaV1bal0pOwogCQlmcHJpbnRmKGZwLCAiXG4iKTsKIAl9CisJZnJlZShjb3VudGVyd2lkdGgpOwogfQogCiBzdGF0aWMgdm9pZCBwZXJmX3JlYWRfdmFsdWVzX19kaXNwbGF5X3JhdyhGSUxFICpmcCwK